Example #1
0
        /// <inheritdoc />
        public async ValueTask <bool> Send(ISocketCacheKey key, IMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            var webSocket = _socketManager.Get(key);

            if (webSocket == null)
            {
                return(false);
            }

            if (webSocket.State != System.Net.WebSockets.WebSocketState.Open || webSocket.CloseStatus.HasValue)
            {
                return(false);
            }

            var str = JsonConvert.SerializeObject(message);
            await webSocket.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes(str)),
                                      System.Net.WebSockets.WebSocketMessageType.Text, true, default);

            return(true);
        }
Example #2
0
        /// <inheritdoc />
        public async ValueTask <bool> Remove(ISocketCacheKey key)
        {
            var result = _keySocket.TryRemove(key, out var socket);

            if (result)
            {
                _socketKey.TryRemove(socket, out _);
                await socket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Close", default);
            }
            return(result);
        }
        /// <inheritdoc />
        public bool Register(ISocketCacheKey key, EventHandler <MessageReceiveEventArgs> handler)
        {
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }

            var socket = _socketManager.Get(key);

            if (socket == null)
            {
                return(false);
            }

            var receiver = WebSocketReceiver.GetReceiver(socket);

            if (receiver == null)
            {
                return(false);
            }
            receiver.MessageHandler += handler;
            return(true);
        }
Example #4
0
 /// <inheritdoc />
 public WebSocket Get(ISocketCacheKey key)
 {
     _keySocket.TryGetValue(key, out var socket);
     return(socket);
 }