public void Process(Connection connection) { Connection = connection; using (Reader = new BinaryReader(new MemoryStream(connection.Buffer))) { Read(); } try { Process(); } catch (Exception ex) { Log.WarnException("ARecvPacket", ex); } }
public void Send(IConnection state) { if (state == null || !state.IsValid) { return; } if (!OpCodes.Send.ContainsKey(GetType())) { Log.Warn("UNKNOWN packet opcode: {0}", GetType().Name); return; } lock (WriteLock) { if (Datas == null) { try { using (MemoryStream stream = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(stream, new UTF8Encoding())) { WriteH(writer, 0); //Reserved for length WriteH(writer, OpCodes.Send[GetType()]); Write(writer); } Datas = stream.ToArray(); BitConverter.GetBytes((short)Datas.Length).CopyTo(Datas, 0); } } catch (Exception ex) { Log.Warn("Can't write packet: {0}", GetType().Name); Log.WarnException("ASendPacket", ex); return; } } } state.PushPacket(Datas); }