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)); }
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); } }