void DownloadThread() { try { mLog.Info("Download thread id:[{0}]", Thread.CurrentThread.ManagedThreadId.ToString()); DownloadSubTask subTask = this.mTask.GetSubTask(); while (subTask != null) { byte[] data = HttpDownloadRange.Download(subTask.RemotePath, subTask.from, subTask.to); if (data == null) { mLog.Error("An error has occurred in the dowmload thread,error:noknown."); break; } subTask.data = data; var b = this.mTask.UpdateTaskState(subTask, 2); if (b) { mLog.Info("Thread Download finish."); break; } subTask = this.mTask.GetSubTask(); } } catch (Exception e) { mLog.Error("An error has occurred in the dowmload thread,error:{0}", e.ToString()); this.Errored(e.Message); } }
void Download() { if (task_ != null) { Console.WriteLine("Download begin task id = " + task_.Id.ToString()); byte[] data = HttpDownloadRange.Download(task_.RemotePath, task_.from, task_.to); Console.WriteLine("Download end"); Console.WriteLine("trans begin"); FileBlockBeginPacket begin = new FileBlockBeginPacket(); autoResetEvent_.WaitOne(); Program.slave.Send(begin.Encode()); byte[] b3k = new byte[1024 * 3]; int c = (data.Length + 3071) / 3072; for (int i = 0; i < c - 1; ++i) { Array.Copy(data, 1024 * 3 * i, b3k, 0, 1024 * 3); FileBlockDataPacket d = new FileBlockDataPacket(b3k); autoResetEvent_.WaitOne(); Program.slave.Send(d.Encode()); } int lastBlockSize = data.Length % 3072; if (lastBlockSize == 0) { lastBlockSize = 3072; } { byte[] bxk = new byte[lastBlockSize]; Array.Copy(data, 1024 * 3 * (c - 1), bxk, 0, lastBlockSize); FileBlockDataPacket d = new FileBlockDataPacket(bxk); autoResetEvent_.WaitOne(); Program.slave.Send(d.Encode()); } FileBlockEndPacket end = new FileBlockEndPacket(); autoResetEvent_.WaitOne(); Program.slave.Send(end.Encode()); Console.WriteLine("trans end"); } }
void Download() { if (task_ != null) { LogManager.Instalce.DownloadTaskBeginLog(task_.RemotePath, task_.from, task_.to); byte[] data = HttpDownloadRange.Download(task_.RemotePath, task_.from, task_.to); LogManager.Instalce.DownloadTaskEndLog(task_.RemotePath, task_.from, task_.to); LogManager.Instalce.TransferBegin(task_.RemotePath, task_.from, task_.to); FileBlockBeginPacket begin = new FileBlockBeginPacket(); autoResetEvent_.WaitOne(); Peer.Send(begin.Encode()); byte[] b3k = new byte[1024 * 3]; int c = (data.Length + 3071) / 3072; for (int i = 0; i < c - 1; ++i) { Array.Copy(data, 1024 * 3 * i, b3k, 0, 1024 * 3); FileBlockDataPacket d = new FileBlockDataPacket(b3k); autoResetEvent_.WaitOne(); Peer.Send(d.Encode()); } int lastBlockSize = data.Length % 3072; if (lastBlockSize == 0) { lastBlockSize = 3072; } { byte[] bxk = new byte[lastBlockSize]; Array.Copy(data, 1024 * 3 * (c - 1), bxk, 0, lastBlockSize); FileBlockDataPacket d = new FileBlockDataPacket(bxk); autoResetEvent_.WaitOne(); Peer.Send(d.Encode()); } FileBlockEndPacket end = new FileBlockEndPacket(); autoResetEvent_.WaitOne(); Peer.Send(end.Encode()); LogManager.Instalce.TransferEnd(task_.RemotePath, task_.from, task_.to); } }
void Download() { DownloadSubTask subTask = task_.GetSubTask(); while (subTask != null) { byte[] data = HttpDownloadRange.Download(subTask.RemotePath, subTask.from, subTask.to); if (data == null) { Console.WriteLine("download error"); break; } subTask.data = data; var b = task_.UpdateTaskState(subTask, 2); if (b) { Console.WriteLine("download finish"); break; } subTask = task_.GetSubTask(); } }
static void Main(string[] args) { string url = @"http://speed.myzone.cn/WindowsXP_SP2.exe"; HttpFileSplit split = new HttpFileSplit(); long blockSize = 1024 * 3; if (split.TryToSplit(url, blockSize)) { Console.WriteLine("url:" + url); Console.WriteLine("fileSize_:" + split.fileSize_); Console.WriteLine("blockCount_:" + split.blockCount_); Console.WriteLine("lastBlockSize_:" + split.lastBlockSize_); Console.ReadKey(); byte[] data = HttpDownloadRange.Download(url, 3 * split.blockSize_, 4 * split.blockSize_ - 1); if (data != null && data.Length == split.blockSize_) { Console.WriteLine("HttpDownloadRange ok"); } } Console.ReadKey(); }