Exemple #1
0
        private async Task ProcessRequest(WebSocketManager wsManager, int maxTicks)
        {
            using (var ws = await wsManager.AcceptWebSocketAsync())
            {
                var sender = new WebSocketSender(ws);
                int ticks  = 0;

                void TickHandler()
                {
                    sender.QueueSend(GetTime());
                    if (maxTicks != 0 && ++ticks >= maxTicks)
                    {
                        sender.CloseAsync();
                    }
                }

                _timer.Tick += TickHandler;
                try
                {
                    await sender.HandleCommunicationAsync();
                }
                finally
                {
                    _timer.Tick -= TickHandler;
                }
            }
        }
Exemple #2
0
        public async Task AddSocket(WebSocketManager socketManager)
        {
            WebSocket socket = await socketManager.AcceptWebSocketAsync();

            if (!_sockets.Contains(socket))
            {
                _sockets.Add(socket);
            }

            await CloseSocketWhenNeed(socket);
        }
         public async Task DispatchAsync(WebSocketManager manager) {
 
             WebSocket socket = await manager.AcceptWebSocketAsync();
             SafeSocket commonSocket = new SafeSocket(socket);
             Task[] senderTasks = new Task[this.senders.Count];
             for (int senderIndex = 0; senderIndex < senderTasks.Length; senderIndex++) {
                 int index = senderIndex;// careful at index ! , make copy and use it inside closure !
                 senderTasks[senderIndex] = Task.Run(async () => {
                     await commonSocket.ReadAsync();
                 });
             }
         }
Exemple #4
0
        public async Task <bool> TryOpenSocket(string origin, WebSocketManager webSocket)
        {
            if (SocketConnections.ContainsKey(origin))
            {
                await TryCloseSocket(origin);
            }

            if (SocketConnections.TryAdd(origin, await webSocket.AcceptWebSocketAsync()))
            {
                var tokenSource = new CancellationTokenSource();

                if (_socketConnectionTokens.TryAdd(origin, tokenSource))
                {
                    await Echo(SocketConnections[origin], tokenSource.Token);
                }

                return(true);
            }

            return(false);
        }