private void WritePacket(ICustomDataOutput writer, int id) { var packet = writer.Data; writer.Clear(); var typeLen = ComputeTypeLen(packet.Length); var header = (short)SubComputeStaticHeader((uint)id, typeLen); writer.WriteShort(header); switch (typeLen) { case 0: break; case 1: writer.WriteByte((byte)packet.Length); break; case 2: writer.WriteShort((short)packet.Length); break; case 3: writer.WriteByte((byte)((packet.Length >> 16) & 255)); writer.WriteShort((short)(packet.Length & 65535)); break; default: throw new Exception("Packet's length can't be encoded on 4 or more bytes"); } writer.WriteBytes(packet); }
private void WritePacket(ICustomDataOutput writer, NetworkMessage message) { var packet = writer.Data; writer.Clear(); var typeLen = ComputeTypeLen(packet.Length); var id = message.GetType().GetProperty("MessageID").GetValue(message); var header = (short)SubComputeStaticHeader((uint)id, typeLen); writer.WriteShort(header); writer.WriteUInt(_instanceId++); switch (typeLen) { case 0: break; case 1: writer.WriteByte((byte)packet.Length); break; case 2: writer.WriteShort((short)packet.Length); break; case 3: writer.WriteByte((byte)((packet.Length >> 16) & 255)); writer.WriteShort((short)(packet.Length & 65535)); break; default: throw new Exception("Packet's length can't be encoded on 4 or more bytes"); } writer.WriteBytes(packet); }