private void OnDataArrive(IConnection connection, byte[] data) { _worker.Queue(() => { var peer = _peers[connection.Endpoint]; var butesReceived = data.Length; GlobalReceiveSpeedWatcher.AddBytes(butesReceived); peer.Statistics.AddReceivedBytes(butesReceived); peer.ReceiveSpeedWatcher.AddBytes(butesReceived); Events.RaiseAsync(PeerDataReceived, this, new PeerDataEventArgs(peer, data)); }); }
internal async Task <int> ReceiveAsync(byte[] buffer, int offset, int count, IPEndPoint endpoint) { Guard.NotNull(buffer, "buffer"); Guard.NotNull(endpoint, "endpoint"); Guard.ContainsKey(_peers, endpoint, "Peer is not registered."); var peer = _peers[endpoint]; try { var received = await peer.Connection.ReceiveAsync(new ArraySegment <byte>(buffer, offset, count)); GlobalReceiveSpeedWatcher.AddBytes(received); peer.Statistics.AddReceivedBytes(received); peer.ReceiveSpeedWatcher.AddBytes(received); return(received); } catch (SocketException) { DisconnectPeer(peer); return(0); } }