public async void Read() { try { while (true) { if (IsDisconnected) { return; } byte[] _buffer = new byte[2]; int bytesRead = await Stream.ReadAsync(_buffer, 0, 2); if (bytesRead == 0) { Log.Debug("Client closed connection"); CloseConnection(); return; } if (bytesRead != 2) { throw new Exception("Wrong packet"); } short length = BitConverter.ToInt16(_buffer, 0); _buffer = new byte[length - 2]; bytesRead = await Stream.ReadAsync(_buffer, 0, length - 2); if (bytesRead != length - 2) { throw new Exception("Wrong packet"); } _crypt.Decrypt(_buffer); Task.Factory.StartNew(() => _gamePacketHandler.HandlePacket(_buffer.ToPacket(), this)); } } catch (Exception e) { Log.Error(e); CloseConnection(); } }
private void OnReceiveCallback(IAsyncResult result) { if (IsTerminated) { return; } Stream.EndRead(result); byte[] buff = new byte[_buffer.Length]; _buffer.CopyTo(buff, 0); _crypt.Decrypt(buff); TrafficUp += _buffer.Length; GamePacketHandler.HandlePacket(new Packet(1, buff), this); new System.Threading.Thread(Read).Start(); }