Esempio n. 1
0
        public bool Remove(string connectionId)
        {
            lock (_syncObj)
            {
                var isRemoved   = false;
                var _database   = GetDatabase();
                var clientValue = _database.HashGet(_clientStoreKey, connectionId);
                if (clientValue.IsNullOrEmpty)
                {
                    return(isRemoved);
                }

                _database.HashDelete(_clientStoreKey, connectionId);
                isRemoved = true;

                var client = JsonConvert.DeserializeObject <OnlineClient>(clientValue);

                if (isRemoved)
                {
                    var user = client.ToUserIdentifierOrNull();

                    if (user != null && !IsUserOnline(user))
                    {
                        UserDisconnected.InvokeSafely(this, new OnlineUserEventArgs(user, client));
                    }

                    ClientDisconnected.InvokeSafely(this, new OnlineClientEventArgs(client));
                }

                return(isRemoved);
            }
        }
        public virtual bool Remove(string connectionId)
        {
            lock (SyncObj)
            {
                IOnlineClient client;
                var           isRemoved = Clients.TryRemove(connectionId, out client);

                if (isRemoved)
                {
                    var user = client.ToUserIdentifierOrNull();

                    if (user != null && !this.IsOnline(user))
                    {
                        UserDisconnected.InvokeSafely(this, new OnlineUserEventArgs(user, client));
                    }

                    ClientDisconnected.InvokeSafely(this, new OnlineClientEventArgs(client));
                }
                _cacheManager.GetCache <string, IOnlineClient>(nameof(IOnlineClient)).Remove(connectionId);
                return(isRemoved);
            }
        }