public static void EnqueueSendMessage(IConnection connection, IEncryption encryptor, PeerMessage message,
IRateLimiter rateLimiter, ConnectionMonitor peerMonitor, ConnectionMonitor managerMonitor,
AsyncIOCallback callback, object state)
{
var count = message.ByteLength;
var buffer = ClientEngine.BufferManager.GetBuffer(count);
message.Encode(buffer, 0);
encryptor.Encrypt(buffer, 0, count);
var data = SendCache.Dequeue().Initialise(buffer, callback, state);
NetworkIO.EnqueueSend(connection, buffer, 0, count, rateLimiter, peerMonitor, managerMonitor,
EndSendCallback, data);
}