Example #1
0
 // Send RTC message to client
 private static async Task SendMessage(RTCMessage msg, WebSocket socket)
 {
     string jsonMsg    = JsonConvert.SerializeObject(msg);
     var    textBuffer = new ArraySegment <byte>(Encoding.UTF8.GetBytes(jsonMsg));
     var    ct         = CancellationToken.None;
     await socket.SendAsync(textBuffer, WebSocketMessageType.Text, true, ct);
 }
Example #2
0
 public async Task SendVideoOffer(RTCMessage message)
 {
     try {
         message.Sender = Context.ConnectionId;
         await Clients.Client(message.Target).receiveVideoOffer(message);
     } catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
 }
Example #3
0
        // Disconnected clients watcher and notifier
        private async static Task WatchDisconnectedClients()
        {
            while (true)
            {
                // Notify other clients
                var disconnectNotify = new RTCMessage(MessageDisconnected)
                {
                    Target = disconnectedIds.Take()
                };

                foreach (var clientCtx in clients.Values)
                {
                    await SendMessage(disconnectNotify, clientCtx.Socket);
                }
            }
        }
Example #4
0
        // Process incoming message
        private async Task ProcessMessage(RTCMessage msg, RTCClientContext client)
        {
            string[] allowedTypes =
            {
                MessageInit, MessageOffer, MessageAnswer, MessageIce
            };

            if (allowedTypes.Contains(msg.Type))
            {
                switch (msg.Type)
                {
                case MessageInit:
                    // Another client is ready
                    client.IsReady = true;
                    var readyMsg = new RTCMessage(MessageAvailableClients)
                    {
                        Data = clients.Where(kv => kv.Value != client &&
                                             kv.Value.IsReady)
                               .Select(kv => kv.Key)
                               .ToArray(),
                        Target = clients.Single(kv => kv.Value == client).Key
                    };
                    await SendMessage(readyMsg, client.Socket);

                    break;

                default:
                    // Transfer to paired client
                    var anotherPeer = clients[msg.Target];
                    // Relay message
                    msg.Target = clients.Single(kv => kv.Value == client).Key;
                    await SendMessage(msg, anotherPeer.Socket);

                    break;
                }
            }
        }
Example #5
0
 public async Task SendNewIceCandidate(RTCMessage message)
 {
     message.Sender = Context.ConnectionId;
     await Clients.Client(message.Target).SendAsync("ReceiveNewIceCAndidate", message);
 }
Example #6
0
 public async Task SendVideoAnswer(RTCMessage message)
 {
     message.Sender = Context.ConnectionId;
     await Clients.Client(message.Target).SendAsync("ReceiveVideoAnswer", message);
 }