private void ProcessPackets() { short id = 0; while (!pause && buffers.Count > 0) { byte[] packBuff = PacketCrypto.Decode((byte[])buffers.Dequeue()); id = Packet.GetMsgID(packBuff); Handler handler = (Handler)events[id]; if (handler != null) { INetPacket packet = handler.packet.Create(); handler.packet = packet; Packet.Decode(packBuff, handler.packet); Debug.Log("id: " + id.ToString() + ", packet: " + handler.packet); PostEvent(id, handler.packet); } } if (error_id != 0) { PostSocketEvent(error_id, res); error_id = 0; res = String.Empty; client.Close(); } }
private void Decode(byte[] header) { if (PacketCrypto != null) { PacketCrypto.decrypt(header, 6); } ushort length; short opcode; if (PacketCrypto == null) { length = BitConverter.ToUInt16(new byte[] { header[1], header[0] }, 0); opcode = BitConverter.ToInt16(header, 2); } else { length = BitConverter.ToUInt16(new byte[] { header[1], header[0] }, 0); opcode = BitConverter.ToInt16(new byte[] { header[2], header[3] }, 0); } header[0] = BitConverter.GetBytes(opcode)[0]; header[1] = BitConverter.GetBytes(opcode)[1]; header[2] = BitConverter.GetBytes(length)[0]; header[3] = BitConverter.GetBytes(length)[1]; }
public static byte[] Encode(INetPacket packet) { if (packet != null) { ByteArray bytes = new ByteArray(); packet.build(bytes); byte[] bodyBytes = PacketCrypto.Encode(bytes.GetBytes()); List <byte> pack = swab32(bodyBytes.Length); pack.AddRange(bodyBytes); return(pack.ToArray()); } return(null); }
public void Send(ClientConnection conn, byte[] data, int index, int count) { var _packetCrypto = new PacketCrypto(conn.Account.SessionKey); if (conn.Connected) { if (conn.Encrypted) { _packetCrypto.Encrypt(data, index, count); } conn.Stream.Write(data, index, count); conn.Stream.Flush(); } }
private void Decode(byte[] header, out ushort length, out short opcode) { PacketCrypto?.Decrypt(header, 6); if (PacketCrypto == null) { length = BitConverter.ToUInt16(new[] { header[1], header[0] }, 0); opcode = BitConverter.ToInt16(header, 2); } else { length = BitConverter.ToUInt16(new[] { header[1], header[0] }, 0); opcode = BitConverter.ToInt16(new[] { header[2], header[3] }, 0); } }
private byte[] Encode(int size, int opcode) { var index = 0; var newSize = size + 2; var header = new byte[4]; if (newSize > 0x7FFF) { header[index++] = (byte)(0x80 | (0xFF & (newSize >> 16))); } header[index++] = (byte)(0xFF & (newSize >> 8)); header[index++] = (byte)(0xFF & (newSize >> 0)); header[index++] = (byte)(0xFF & opcode); header[index] = (byte)(0xFF & (opcode >> 8)); if (PacketCrypto != null) { header = PacketCrypto.Encrypt(header); } return(header); }