private void ProcessReceive(NetToken clientToken, SocketAsyncEventArgs socketAsyncEvent) { if (socketAsyncEvent == null) { throw new ArgumentNullException("Cannot receive data from a null socket event.", nameof(socketAsyncEvent)); } if (socketAsyncEvent.BytesTransferred > 0) { if (socketAsyncEvent.SocketError == SocketError.Success) { this._packetParser.ParseIncomingData(clientToken, socketAsyncEvent.Buffer, socketAsyncEvent.BytesTransferred); if (clientToken.IsMessageComplete) { this._messageDispatcher.DispatchMessage(clientToken.Client, clientToken); clientToken.Reset(); } this.ReceiveData(clientToken.Client, socketAsyncEvent); } else { this.OnError(clientToken.Client, socketAsyncEvent.SocketError); } } else { this.ClearSocketEvent(socketAsyncEvent); this.OnDisconnected(clientToken.Client); } }
private void ProcessReceive(NetToken clientToken, SocketAsyncEventArgs socketAsyncEvent) { if (socketAsyncEvent == null) { throw new ArgumentNullException(nameof(socketAsyncEvent), "Cannot receive data from a null socket event."); } if (socketAsyncEvent.BytesTransferred > 0) { if (socketAsyncEvent.SocketError == SocketError.Success) { IEnumerable <byte[]> messages = _packetParser.ParseIncomingData(clientToken, socketAsyncEvent.Buffer, socketAsyncEvent.BytesTransferred); if (messages.Any()) { foreach (byte[] message in messages) { ProcessReceivedMessage(clientToken.Client, message); } } if (clientToken.DataStartOffset >= socketAsyncEvent.BytesTransferred) { clientToken.Reset(); } ReceiveData(clientToken.Client, socketAsyncEvent); } else { OnError(clientToken.Client, socketAsyncEvent.SocketError); } } else { ClearSocketEvent(socketAsyncEvent); OnDisconnected(clientToken.Client); } }