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); }
public ReceiveMessageState Initialise(IConnection connection, IEncryption decryptor, IRateLimiter limiter, ConnectionMonitor peerMonitor, TorrentManager manager, byte[] buffer, AsyncMessageReceivedCallback callback, object state) { Connection = connection; Decryptor = decryptor; Manager = manager; Buffer = buffer; PeerMonitor = peerMonitor; RateLimiter = limiter; ManagerMonitor = manager?.Monitor; Callback = callback; State = state; return this; }
public AsyncIOState Initialise(IConnection connection, byte[] buffer, int offset, int count, AsyncIOCallback callback, object state, IRateLimiter limiter, ConnectionMonitor peerMonitor, ConnectionMonitor managerMonitor) { Connection = connection; Buffer = buffer; Count = count; Callback = callback; Offset = offset; ManagerMonitor = managerMonitor; PeerMonitor = peerMonitor; RateLimiter = limiter; Remaining = count; State = state; return this; }
internal PeerId(Peer peer, TorrentManager manager) { if (peer == null) throw new ArgumentNullException(nameof(peer)); SuggestedPieces = new MonoTorrentCollection<int>(); AmChoking = true; IsChoking = true; IsAllowedFastPieces = new MonoTorrentCollection<int>(); AmAllowedFastPieces = new MonoTorrentCollection<int>(); LastMessageReceived = DateTime.Now; LastMessageSent = DateTime.Now; Peer = peer; MaxPendingRequests = 2; MaxSupportedPendingRequests = 50; Monitor = new ConnectionMonitor(); _sendQueue = new MonoTorrentCollection<PeerMessage>(12); ExtensionSupports = new ExtensionSupports(); TorrentManager = manager; InitializeTyrant(); }
public static void EnqueueReceiveMessage(IConnection connection, IEncryption decryptor, IRateLimiter rateLimiter, ConnectionMonitor monitor, TorrentManager manager, AsyncMessageReceivedCallback callback, object state) { // FIXME: Hardcoded number var count = 4; var buffer = ClientEngine.BufferManager.GetBuffer(count); var data = ReceiveCache.Dequeue() .Initialise(connection, decryptor, rateLimiter, monitor, manager, buffer, callback, state); NetworkIO.EnqueueReceive(connection, buffer, 0, count, rateLimiter, monitor, data.ManagerMonitor, MessageLengthReceivedCallback, data); }
public static void EnqueueSend(IConnection connection, byte[] buffer, int offset, int count, IRateLimiter rateLimiter, ConnectionMonitor peerMonitor, ConnectionMonitor managerMonitor, AsyncIOCallback callback, object state) { var data = TransferCache.Dequeue() .Initialise(connection, buffer, offset, count, callback, state, rateLimiter, peerMonitor, managerMonitor); lock (SendQueue) SendOrEnqueue(data); }