public void StopTransfer(TransferQueue queue) { if (queue.Type == QueueType.Upload) { queue.Stop(); } if (Stopped != null) { Stopped(this, queue); } PacketWriter packetWriter = new PacketWriter(); packetWriter.Write((byte)Headers.Stop); packetWriter.Write(queue.Id); Send(packetWriter.GetBytes()); queue.Close(); }
private void process() { PacketReader packetReader = new PacketReader(_buffer); Headers header = (Headers)packetReader.ReadByte(); switch (header) { case Headers.Queue: { int id = packetReader.ReadInt32(); string fileName = packetReader.ReadString(); long length = packetReader.ReadInt64(); TransferQueue queue = TransferQueue.CreateDownloadQueue(this, id, Path.Combine(OutputFolder, Path.GetFileName(fileName)), length); _transfers.Add(id, queue); if (Queued != null) { Queued(this, queue); } } break; case Headers.Start: { int id = packetReader.ReadInt32(); if (_transfers.ContainsKey(id)) { _transfers[id].Start(); } } break; case Headers.Stop: { int id = packetReader.ReadInt32(); if (_transfers.ContainsKey(id)) { TransferQueue queue = _transfers[id]; queue.Stop(); queue.Close(); if (Stopped != null) { Stopped(this, queue); } _transfers.Remove(id); } } break; case Headers.Pause: { int id = packetReader.ReadInt32(); if (_transfers.ContainsKey(id)) { TransferQueue queue = _transfers[id]; if (queue.Type == QueueType.Upload) { queue.Pause(); } if (Paused != null) { Paused(this, queue); } } } break; case Headers.Chunk: { int id = packetReader.ReadInt32(); long index = packetReader.ReadInt64(); int size = packetReader.ReadInt32(); byte[] buffer = packetReader.ReadBytes(size); TransferQueue queue = _transfers[id]; queue.Write(buffer, index); queue.Progress = (int)((queue.Transferred * 100) / queue.Length); if (queue.LastProgress < queue.Progress) { queue.LastProgress = queue.Progress; if (ProgressChanged != null) { ProgressChanged(this, queue); } if (queue.Progress == 100) { queue.Close(); if (Complete != null) { Complete(this, queue); } } } } break; default: break; } packetReader.Dispose(); }