public void Broadcast(ISdpPacket packet) { byte[] data = SdpCodec.Encode(packet); if (data.Length == 0) { return; } Service.Sessions.BroadcastAsync(data, null); }
public void SendTo(string id, ISdpPacket packet) { byte[] data = SdpCodec.Encode(packet); if (data.Length == 0) { return; } Service.Sessions.SendToAsync(data, id, null); }
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()); } }
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); }
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); } }
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."); } }