Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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();
        }