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); }
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 }