private void OnData(IAsyncResult result) { try { _bytesToRead -= _ns.EndRead(result); if (_bytesToRead > 0) { _ns.BeginRead(_buffer, _buffer.Length - _bytesToRead, _bytesToRead, OnData, null); return; } // Combine the buffer for packetId and the data because we encrypt those together, we have to combine and decrypt them together _buffer = packetId.Concat(_buffer).ToArray(); // Decrypt the buffer to retrieve the actual packetId and the data if (_encrypt) { _buffer = this._crypt.Decrypt(_buffer).ToArray(); } var packet = new Packet(this, BitConverter.ToUInt16(_buffer, 0), _buffer.Skip(2).ToArray()); var hexDump = SerializeWriter.HexDump(packet.Buffer); if (ServerMain.Instance.LogEnabled[1] && ServerMain.Instance.IPBlacklist.Contains(this.EndPoint.Address.ToString()) == false) { Log.Info("Handling packet {0} ({1} id {2}, 0x{2:X}) on {3} at {4}.", "", Packets.GetName(packet.Id), packet.Id, this.EndPoint.Port.ToString(), DateTime.Now.ToString()); Log.Info("HexDump {0}:{1}{2}", packet.Id, Environment.NewLine, hexDump); } _parent.Parse(packet); _buffer = new byte[4]; _bytesToRead = _buffer.Length; _ns.BeginRead(_buffer, 0, 4, OnHeader, null); } catch (Exception ex) { KillConnection(ex); } }