Example #1
0
        private void ReadMessage(IAsyncResult ar)
        {
            int read = _networkStream.EndRead(ar);

            if (read <= 0)
            {
                Disconnect("Received empty data, socket probably disconnected! Closing connection");
                return;
            }
            _dataReadDelta += read;
            if (_dataReadDelta == _dataBuffer.Length)
            {
                // Message fully received
                NetworkMessage msg = NetworkConverter.Deserialize(_dataBuffer);
                // Set the player info here again, so the client can't trick the server by sending fake data
                msg.playerInfo = playerInfo;
                _messageHandler.AddServerMessage(msg);
                ResetAndWaitForNext();
            }
            else
            {
                _logger.Debug("Parts of the message missing");
                // Wait for the rest of the message
                _networkStream.BeginRead(_dataBuffer, _dataReadDelta, _messageLength - _dataReadDelta, ReadMessage,
                                         null);
            }
        }
        private NetworkMessage ReceiveSingleMessage(TcpClient client)
        {
            byte[] dataBuffer = new byte[4];
            int    headerLength = 0, msgDataLength = 0, msgReadLength = 0;

            do
            {
                headerLength += client.GetStream().Read(dataBuffer, 0, 4 - headerLength);
            } while (headerLength < 4);
            msgDataLength = BitConverter.ToInt32(dataBuffer, 0);
            dataBuffer    = new byte[msgDataLength];
            do
            {
                msgReadLength += client.GetStream().Read(dataBuffer, 0, msgDataLength - msgReadLength);
            } while (msgReadLength < msgDataLength);
            return(NetworkConverter.Deserialize(dataBuffer));
        }
Example #3
0
        private void ReadMessage(IAsyncResult ar)
        {
            int read = _stream.EndRead(ar);

            if (read <= 0)
            {
                Disconnect("Received empty data, socket probably disconnected! Closing connection");
                return;
            }
            _dataReadDelta += read;
            if (_dataReadDelta == _dataBuffer.Length)
            {
                // Message fully received
                NetworkMessage msg = NetworkConverter.Deserialize(_dataBuffer);
                _networkManager.MessageHandler.AddClientMessage(msg);
                ResetAndWaitForNext();
            }
            else
            {
                // Wait for the rest of the message
                _stream.BeginRead(_dataBuffer, _dataReadDelta, _messageLength - _dataReadDelta, ReadMessage,
                                  null);
            }
        }