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);
}
}