private void MumbleWrite(IExtensible message) { if (!_connected) { return; } var sslStreamWriter = new BinaryWriter(_sslStream); if (message is UdpTunnel tunnel) { var audioMessage = tunnel; Int16 messageType = (Int16)MumbleProtocolFactory.MessageType(tunnel); Int32 messageSize = audioMessage.packet.Length; sslStreamWriter.Write(IPAddress.HostToNetworkOrder(messageType)); sslStreamWriter.Write(IPAddress.HostToNetworkOrder(messageSize)); sslStreamWriter.Write(audioMessage.packet); } else { MemoryStream messageStream = new MemoryStream(); Serializer.NonGeneric.Serialize(messageStream, message); Int16 messageType = (Int16)MumbleProtocolFactory.MessageType(message); Int32 messageSize = (Int32)messageStream.Length; sslStreamWriter.Write(IPAddress.HostToNetworkOrder(messageType)); sslStreamWriter.Write(IPAddress.HostToNetworkOrder(messageSize)); messageStream.Position = 0; sslStreamWriter.Write(messageStream.ToArray()); } sslStreamWriter.Flush(); }