Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
            }
        }