Esempio n. 1
0
    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();
        }
    }
Esempio n. 2
0
        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];
        }
Esempio n. 3
0
 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);
 }
Esempio n. 4
0
        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);
        }