/// <inheritdoc /> public void AddToGroup(T key, string userId, string connectionId) { lock (_locker) { if (!RolesGroup.ContainsKey(key)) RolesGroup.Add(key, new List<HubUser> { new HubUser(userId, connectionId) }); else if (RolesGroup.ContainsKey(key)) { var user = RolesGroup[key].Find(x => x.UserId == userId); if (user == null) RolesGroup[key].Add(new HubUser(userId, connectionId)); user?.ConnectionIds.Add(connectionId); } OnGroupChange?.Invoke(this, new ManagerEventArgs<T, HubUser> { Action = ManagerAction.AddItem, Key = key, Value = new HubUser(userId, connectionId) }); } }
/// <summary> /// Remove user connection from group /// </summary> /// <param name="userId">User identifier</param> /// <param name="connectionId">user connection identifier</param> public void RemoveFromGroup(string userId, string connectionId) { lock (_locker) { foreach (var item in RolesGroup.ToList()) { var user = RolesGroup[item.Key].Find(x => x.UserId == userId); if (user != null) { if (user.ConnectionIds.Count > 1) user.ConnectionIds.Remove(connectionId); else RolesGroup[item.Key].Remove(user); OnGroupChange?.Invoke(this, new ManagerEventArgs<T, HubUser> { Action = ManagerAction.RemoveItem, Key = item.Key, Value = user }); } if (RolesGroup[item.Key].Count == 0) RolesGroup.Remove(item.Key); } } }