private IExtensible MumbleRead() { var sslStreamReader = new BinaryReader(_sslStream); IExtensible result; try { Int16 type = IPAddress.NetworkToHostOrder(sslStreamReader.ReadInt16()); Int32 size = IPAddress.NetworkToHostOrder(sslStreamReader.ReadInt32()); if (type == (int)MessageTypes.UdpTunnel) { result = new UdpTunnel { packet = sslStreamReader.ReadBytes(size) }; } else { result = MumbleProtocolFactory.Deserialize((MessageTypes)type, size, sslStreamReader); } } catch (IOException) { result = null; } return(result); }
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(); }