Beispiel #1
0
        /// <inheritdoc cref="LeaveAsync"/>
        public Task LeaveAsync(string key, IWebSocketIo webSocketIo)
        {
            return(Task.Run(() =>
            {
                try
                {
                    _semaphoreSlim.Wait();

                    if (_channels[key].Contains(webSocketIo))
                    {
                        _channels[key].Remove(webSocketIo);
                        webSocketIo.JoinedChannels.Remove(key);
                        webSocketIo.OnLeaved(this, new WebSocketIoEventArgs(key, webSocketIo));

                        if (_channels[key].Count == 0)
                        {
                            _channels.Remove(key);
                        }
                    }
                }
                finally
                {
                    _semaphoreSlim.Release();
                }
            }));
        }
Beispiel #2
0
        /// <inheritdoc cref="DisposeAsync"/>
        public Task DisposeAsync(IWebSocketIo webSocketIo)
        {
            return(Task.Run(async() =>
            {
                try
                {
                    await _semaphoreSlim.WaitAsync();

                    if (_webSocketIos.ContainsKey(webSocketIo.SocketId))
                    {
                        _webSocketIos.Remove(webSocketIo.SocketId);
                    }

                    foreach (var channel in webSocketIo.JoinedChannels)
                    {
                        if (_channels.ContainsKey(channel))
                        {
                            _channels[channel].Remove(webSocketIo);
                        }
                    }

                    webSocketIo.JoinedChannels.Clear();

                    await webSocketIo.Socket.CloseAsync(WebSocketCloseStatus.EndpointUnavailable, "", CancellationToken.None);
                }
                finally
                {
                    _semaphoreSlim.Release();
                }
            }));
        }
Beispiel #3
0
        /// <inheritdoc cref="LeaveAllAsync"/>
        public Task LeaveAllAsync(IWebSocketIo webSocketIo)
        {
            return(Task.Run(() =>
            {
                try
                {
                    _semaphoreSlim.Wait();

                    foreach (var channel in webSocketIo.JoinedChannels)
                    {
                        if (_channels.ContainsKey(channel))
                        {
                            _channels[channel].Remove(webSocketIo);
                            webSocketIo.OnLeaved(this, new WebSocketIoEventArgs(channel, webSocketIo));
                        }
                    }

                    webSocketIo.JoinedChannels.Clear();
                }
                finally
                {
                    _semaphoreSlim.Release();
                }
            }));
        }
Beispiel #4
0
        /// <inheritdoc cref="JoinAsync"/>
        public Task JoinAsync(string key, IWebSocketIo webSocketIo)
        {
            return(Task.Run(() =>
            {
                try
                {
                    _semaphoreSlim.Wait();
                    if (!_channels.ContainsKey(key))
                    {
                        _channels[key] = new List <IWebSocketIo>();
                    }

                    if (!_channels[key].Contains(webSocketIo))
                    {
                        _channels[key].Add(webSocketIo);
                        webSocketIo.JoinedChannels.Add(key);
                    }
                }
                finally
                {
                    _semaphoreSlim.Release();
                }
            }));
        }
Beispiel #5
0
 public TestController(IWebSocketIo webSocketIo) : base(webSocketIo)
 {
     _webSocketIo = webSocketIo;
 }
Beispiel #6
0
 public WebSocketIoNoContentResult(IWebSocketIo webSocketIo)
 {
     _webSocketIo = webSocketIo;
 }
 public JwtController(IWebSocketIo webSocketIo,
                      IConfiguration configuration) : base(webSocketIo)
 {
     _webSocketIo   = webSocketIo;
     _configuration = configuration;
 }
 public WebSocketIoStatusCodeResult(IWebSocketIo webSocketIo, int statusCode) : base(statusCode)
 {
     _webSocketIo = webSocketIo;
 }
 public WebSocketIoOkResult(IWebSocketIo webSocketIo)
 {
     _webSocketIo = webSocketIo;
 }
Beispiel #10
0
 public WebSocketIoOkObjectResult(IWebSocketIo webSocketIo,
                                  object value) : base(value)
 {
     _webSocketIo = webSocketIo;
 }
 public WebSocketIoContentResult(IWebSocketIo webSocketIo, string content)
 {
     _webSocketIo = webSocketIo;
     _content     = content;
 }
 public WebSocketIoController(IWebSocketIo webSocketIo)
 {
     _webSocketIo = webSocketIo;
 }
Beispiel #13
0
 public ChannelsController(IWebSocketIo webSocketIo,
                           IWebSocketIoPacket packet) : base(webSocketIo)
 {
     _webSocketIo = webSocketIo;
     _packet      = packet;
 }
 public WebSocketIoOkEventObjectResult(IWebSocketIo webSocketIo, string emitName, object value) : base(webSocketIo, value)
 {
     _webSocketIo = webSocketIo;
     _emitName    = emitName;
 }
Beispiel #15
0
 /// <inheritdoc cref="OnDisconnected"/>
 public virtual void OnDisconnected(object sender, IWebSocketIo webSocketIo)
 {
     Disconnected?.Invoke(sender, webSocketIo);
 }
 public WebSocketIoEventArgs(string channelKey, IWebSocketIo webSocketIo)
 {
     ChannelKey  = channelKey;
     WebSocketIo = webSocketIo;
 }
Beispiel #17
0
 /// <inheritdoc cref="Add"/>
 public void Add(Guid guid, IWebSocketIo socket)
 {
     _webSocketIos.Add(new KeyValuePair <Guid, IWebSocketIo>(guid, socket));
 }
 /// <summary>
 /// 클라이언트에게 객체를 전송합니다.
 /// </summary>
 /// <param name="webSocketIo"><see cref="IWebSocketIo"/></param>
 /// <param name="obj">객체 입니다.</param>
 /// <param name="endOfMessage">메시지의 끝인지 아닌지의 여부 입니다.</param>
 /// <param name="cancellationToken"><see cref="CancellationToken"/> 입니다.</param>
 public static Task SendDataAsync(this IWebSocketIo webSocketIo, object obj, bool endOfMessage = true,
                                  CancellationToken cancellationToken = default(CancellationToken))
 {
     return(webSocketIo.SendDataAsync(obj, endOfMessage, cancellationToken));
 }
 public BroadcastBuilder(IWebSocketIo webSocketIo,
                         IWebSocketIoConnectionManager webSocketIoConnectionManager)
 {
     _webSocketIo = webSocketIo;
     _webSocketIoConnectionManager = webSocketIoConnectionManager;
 }