public void Pack(ICustomDataWriter writer)
        {
            CustomDataWriter customWriter = new();

            Serialize(customWriter);

            var size = customWriter.Data.Length;

            uint typeLen = ComputeTypeLen((uint)size);

            writer.WriteShort((short)SubComputeStaticHeader(MessageId, typeLen));
            writer.WriteUInt(GLOBAL_INSTANCE++);

            switch (typeLen)
            {
            case 1:
                writer.WriteByte((byte)size);
                break;

            case 2:
                writer.WriteUShort((ushort)size);
                break;

            case 3:
                writer.WriteByte((byte)(size >> 16 & 255));
                writer.WriteUShort((ushort)(size & 65535));
                break;
            }

            writer.WriteBytes(customWriter.Data);
            customWriter.Dispose();
        }
        public override void Serialize(ICustomDataWriter writer)
        {
            base.Serialize(writer);

            writer.WriteShort((short)HumanInfos.ProtocolId);
            HumanInfos.Serialize(writer);
            writer.WriteUInt(AccountId);
        }
Пример #3
0
        public void Pack(ICustomDataWriter writerOut, uint globalInstanceId)
        {
            CustomDataWriter writer = new CustomDataWriter();

            Serialize(writer);         //write all param of the packet
            byte[] data = writer.Data; //get the packet in array

            byte typeLen;              //get the size of the size

            if (data.Length > 65535)
            {
                typeLen = 3;
            }
            else if (data.Length > 255)
            {
                typeLen = 2;
            }
            else if (data.Length > 0)
            {
                typeLen = 1;
            }
            else
            {
                typeLen = 0;
            }

            writerOut.WriteShort((short)(MessageId << 2 | typeLen)); //write id and size of size
            writerOut.WriteUInt(globalInstanceId);
            switch (typeLen)                                         //write the size
            {
            case 0:
                break;

            case 1:
                writerOut.WriteByte((byte)data.Length);
                break;

            case 2:
                writerOut.WriteShort((short)data.Length);
                break;

            case 3:
                writerOut.WriteByte((byte)(data.Length >> 16 & 255));
                writerOut.WriteShort((short)(data.Length & 65535));
                break;
            }
            writerOut.WriteBytes(data);//write the packet after write the header
        }