private void SendMessage(PeerId id, PeerMessage message, MessagingCallback callback) { try { id.MessageSentCallback = callback; id.CurrentlySendingMessage = message; RateLimiterGroup limiter = id.TorrentManager.UploadLimiter; if (message is PieceMessage) { PeerIO.EnqueueSendMessage(id.Connection, id.Encryptor, message, limiter, id.Monitor, id.TorrentManager.Monitor, endSendMessageCallback, id); ClientEngine.BufferManager.FreeBuffer(ref ((PieceMessage)message).Data); id.IsRequestingPiecesCount--; } else { PeerIO.EnqueueSendMessage(id.Connection, id.Encryptor, message, null, id.Monitor, id.TorrentManager.Monitor, endSendMessageCallback, id); } } catch (Exception ex) { CleanupSocket(id, ex.Message); } }
void CreateRateLimiters() { RateLimiter downloader = new RateLimiter(); downloadLimiter = new RateLimiterGroup(); downloadLimiter.Add(new PauseLimiter(this)); downloadLimiter.Add(downloader); RateLimiter uploader = new RateLimiter(); uploadLimiter = new RateLimiterGroup(); uploadLimiter.Add(new PauseLimiter(this)); uploadLimiter.Add(uploader); }
void CreateRateLimiters() { RateLimiter downloader = new RateLimiter(); downloadLimiter = new RateLimiterGroup(); downloadLimiter.Add(new DiskWriterLimiter(DiskManager)); downloadLimiter.Add(downloader); RateLimiter uploader = new RateLimiter(); uploadLimiter = new RateLimiterGroup(); downloadLimiter.Add(new DiskWriterLimiter(DiskManager)); uploadLimiter.Add(uploader); ClientEngine.MainLoop.QueueTimeout(TimeSpan.FromSeconds(1), delegate { downloader.UpdateChunks(Settings.GlobalMaxDownloadSpeed, TotalDownloadSpeed); uploader.UpdateChunks(Settings.GlobalMaxUploadSpeed, TotalUploadSpeed); return(!disposed); }); }