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); } }