public void SendObjectPacket(ObjectPacket packet, bool encrypt, bool compress = false) { // Invoke the following generic method here to enable AOT // public static byte[] Serialize<T>(T value, MessagePackSerializerOptions options = null, CancellationToken cancellationToken = default); MethodInfo genericSerializeMethod; var packetType = packet.GetType(); if (!_GenericSerializeMethods.TryGetValue(packetType, out genericSerializeMethod)) { genericSerializeMethod = SerializeMethod.MakeGenericMethod(packetType); _GenericSerializeMethods[packetType] = genericSerializeMethod; } _parameterCache2.Value[0] = packet; _parameterCache2.Value[1] = compress ? NetSettings.LZ4CompressOptions : NetSettings.MessagePackOptions; var data = genericSerializeMethod.Invoke(null, _parameterCache2.Value) as byte[]; var size = data.Length + HeaderTailSize; var buffer = new MessageBuffer(size + (ServerSocket ? 4 : 2)); if (ServerSocket) { buffer.Write(BitConverter.GetBytes((int)size), 4); } else { buffer.Write(BitConverter.GetBytes((ushort)size), 2); } buffer.Write(BitConverter.GetBytes(packet.PacketId), 4); buffer.Write(BitConverter.GetBytes(compress), 1); buffer.Write(data, data.Length); if (encrypt) { _authCrypt.EncryptSend(buffer.Data(), 0, SendHeaderSize); } SendPacket(buffer); }
public void SendPacket(ByteBuffer packet) { if (_closed.Value) { return; } if (!packet.Empty && packet.Wpos() > 0) { var buffer = new MessageBuffer(packet.Wpos()); buffer.Write(packet.Data(), packet.Wpos()); QueuePacket(buffer); } }