Esempio n. 1
0
 public void Broadcast(ISdpPacket packet)
 {
     byte[] data = SdpCodec.Encode(packet);
     if (data.Length == 0)
     {
         return;
     }
     Service.Sessions.BroadcastAsync(data, null);
 }
Esempio n. 2
0
 public void SendTo(string id, ISdpPacket packet)
 {
     byte[] data = SdpCodec.Encode(packet);
     if (data.Length == 0)
     {
         return;
     }
     Service.Sessions.SendToAsync(data, id, null);
 }
Esempio n. 3
0
        public static byte[] Encode(ISdpPacket packet)
        {
            using (var stream = new MemoryStream())
                using (var writer = new BinaryWriter(stream))
                {
                    writer.Write((byte)packet.Type);
                    packet.WriteTo(writer);

                    return(stream.ToArray());
                }
        }
Esempio n. 4
0
        public void Send(ISdpPacket packet)
        {
            if (!(Client.IsAlive && Client.ReadyState == WebSocketState.Open))
            {
                return;
            }

            byte[] data = SdpCodec.Encode(packet);
            if (data.Length == 0)
            {
                return;
            }
            Client.SendAsync(data, null);
        }
Esempio n. 5
0
        public static ISdpPacket Decode(byte[] data)
        {
            using (var stream = new MemoryStream(data))
                using (BinaryReader reader = new BinaryReader(stream))
                {
                    PacketType opcode = (PacketType)reader.ReadByte();
                    if (!SdpManager.PacketTypes.TryGetValue(opcode, out Type type))
                    {
                        throw new InvalidDataException("Unknown opcode.");
                    }

                    ISdpPacket packet = (ISdpPacket)Activator.CreateInstance(type);
                    packet.ReadFrom(reader);

                    return(packet);
                }
        }
Esempio n. 6
0
        public void HandlePacket(string id, ISdpPacket packet)
        {
            switch (packet.Type)
            {
            case PacketType.InitializeClient:
                InitializeClient?.Invoke(id, (InitializeClient)packet);
                break;

            case PacketType.LineAction:
                HandleAction(id, (LineAction)packet);
                break;

            case PacketType.InitializeLine:
                InitializeLine?.Invoke(id, (InitializeLine)packet);
                break;

            case PacketType.LineStateChanged:
                LineStateChanged?.Invoke(id, (LineStateChanged)packet);
                break;

            case PacketType.LineMetadata:
                LineMetadata?.Invoke(id, (LineMetadata)packet);
                break;

            case PacketType.Error:
                Error?.Invoke(id, (Error)packet);
                break;

            case PacketType.Settings:
                Settings?.Invoke(id, (Settings)packet);
                break;

            case PacketType.SettingsQuery:
                SettingsQuery?.Invoke(id, (SettingsQuery)packet);
                break;

            default:
                throw new NotImplementedException("Packet type doesn't have a registered handler.");
            }
        }