public void Broadcast(IPCMessage msg) { using (MemoryStream stream = new MemoryStream()) { ISerializer serializer = _serializerResolver.GetSerializer(msg.GetType()); if (serializer == null) { return; } SerializationContext serializationContext = new SerializationContext(_serializerResolver); StreamWriter writer = new StreamWriter(stream) { Position = 0 }; writer.WriteUInt16(PacketPrefix); writer.WriteInt16(0); writer.WriteByte(_channelId); writer.WriteInt32(DynelManager.LocalPlayer.Identity.Instance); writer.WriteInt16(msg.Opcode); serializer.Serialize(writer, serializationContext, msg); long length = writer.Position; writer.Position = 2; writer.WriteInt16((short)length); writer.Dispose(); byte[] serialized = stream.ToArray(); _udpClient.Send(serialized, serialized.Length, _remoteEndPoint); } }
public void Serialize(Stream stream, Message message, out SerializationContext serializationContext) { serializationContext = null; var serializer = this.serializerResolver.GetSerializer(message.Body.GetType()); if (serializer == null) { return; } serializationContext = new SerializationContext(this.serializerResolver); var writer = new StreamWriter(stream) { Position = 0 }; this.headerSerializer.Serialize(writer, serializationContext, message.Header); serializer.Serialize(writer, serializationContext, message.Body); var length = writer.Position; writer.Position = 6; writer.WriteInt16((short)length); }