using System.Net;
namespace ZeraldotNet.LibBitTorrent
{
public delegate void DataFlunkedDelegate(long length);
public delegate void FinishedDelegate();
public delegate void FailedDelegate(string message);
public delegate bool PendingDelegate();
public delegate void StatusDelegate(string message, double downloadRate, double uploadRate, double fractionDone, double timeEstimate);
public delegate void ErrorDelegate(string message);
public delegate bool WantDelegate(int piece);
public delegate void TaskDelegate();
public delegate void SchedulerDelegate(TaskDelegate func, double delay, string TaskName);
public delegate void DataDelegate(long amount);
public delegate long MeasureTotalDelegate();
public delegate double MeasureRateDelegate();
public delegate int HowManyDelegate();
public delegate long AmountDelegate();
public delegate void StartDelegate(IPEndPoint dns, byte[] id);
}
public void DownloadStuff()
{
Download.StartDownload(downloadParameters, doneFlag, new StatusDelegate(MyStatus),
new ErrorDelegate(MyError), new FinishedDelegate(MyFinish));
}
public void MyFinish()
{
lbTimeEstimate.Text = "Download successful!";
pbPercentage.EditValue = 100;
lbDownloadRate.Text = string.Empty;
}
public void MyStatus(string message, double downloadRate, double uploadRate, double fractionDone, double timeEstimate)
{
BeginInvoke(new StatusDelegate(Status),
new object[] {message, downloadRate, uploadRate, fractionDone, timeEstimate});
}
public void MyError(string message)
{
BeginInvoke(new ErrorDelegate(ShowError), new object[] {message});
}
public void Status(string message, double downloadRate, double uploadRate, double fractionDone, double timeEstimate)
{
if (message != null && message.Length != 0)
{
rtbLog.AppendText(message);
rtbLog.AppendText("\r\n");
}
if (downloadRate >= 0.0)
{
lbDownloadRate.Text = (downloadRate/1024).ToString("0.00") + " kB/s";
}
if (uploadRate >= 0.0)
{
lbUploadRate.Text = (uploadRate/1024).ToString("0.00") + "kB/s";
}
if (fractionDone >= 0.0)
{
pbPercentage.EditValue = (int) (fractionDone*100);
lbPercentage.Text = (fractionDone*100).ToString("0.00") + "%";
}
if (timeEstimate > 0.0)
{
TimeSpan ts = TimeSpan.FromSeconds(timeEstimate);
lbTimeEstimate.Text =
string.Format("{0} hours {1} minutes {2} seconds", ts.Hours + (ts.Days*24), ts.Minutes, ts.Seconds);
}
}
public void ShowError(string message)
{
if (message != null && message.Length != 0)
{
rtbLog.AppendText("Error: ");
rtbLog.AppendText(message);
rtbLog.AppendText("\r\n");
}
}