private IPacketIn ReadPacket(IPacketIn packet) { try { byte[] buffer = ReadBuffer(packet.Length - _bufferSize); if (_needToDecrypt) { if (_idBuffer == null) { //throw new Exception("InitialBuffer not provided for packet id " + packet.Id); _idBuffer = ReadBuffer(8); } buffer = XTEA.Decrypt(buffer, Config.Pong); byte[] newBuffer = new byte[_idBuffer.Length + buffer.Length]; _idBuffer.CopyTo(newBuffer, 0); buffer.CopyTo(newBuffer, _idBuffer.Length); buffer = newBuffer; } packet.ParseBuffer(buffer); //Length - buffer because of alread read data _log.Packet("Read PacketID: " + packet.Id.ToString("X2")); return(packet); } catch (Exception e) { _log.Error("Error with client: " + _ip + " Exception: " + e); Drop("IOException: " + e.Message); } return(null); }
private async Task ListenForPackets(Context ctx) { try { for (;;) { if (_networkStream.CanRead && _networkStream.DataAvailable) { (await IPacketIn.ReadHeaderAsync(_networkStream)).ProcessPacket(ctx); } await Task.Delay(1, ctx.Token); } } catch (Exception e) { Console.WriteLine(e); } }
private IPacketIn ReadPacket(IPacketIn packet) { try { byte[] buffer = ReadBuffer(packet.Length - _bufferSize); if (_needToDecrypt) { if (_idBuffer == null) { //throw new Exception("InitialBuffer not provided for packet id " + packet.Id); _idBuffer = ReadBuffer(8); } buffer = XTEA.Decrypt(buffer, Config.Pong); byte[] newBuffer = new byte[_idBuffer.Length + buffer.Length]; _idBuffer.CopyTo(newBuffer, 0); buffer.CopyTo(newBuffer, _idBuffer.Length); buffer = newBuffer; } packet.ParseBuffer(buffer); //Length - buffer because of alread read data _log.Packet("Read PacketID: " + packet.Id.ToString("X2")); return packet; } catch (Exception e) { _log.Error("Error with client: " + _ip + " Exception: " + e); Drop("IOException: " + e.Message); } return null; }