Exemple #1
0
        /// <summary>
        /// 用户上线
        /// </summary>
        public static void UserOnline(ChatUserVM ou)
        {
            var user = FindOnlineUser(ou.UserId);

            if (user == null)
            {
                OnlineUser2.Add(ou.UserId, ou);
            }
            else
            {
                var conn = ou.Conns.FirstOrDefault();
                OnlineUser2[ou.UserId].Conns.Add(conn.Key, conn.Value);
            }
        }
Exemple #2
0
        ///// <summary>
        ///// 处理加入组
        ///// </summary>
        ///// <param name="groupVM">组信息</param>
        ///// <returns></returns>
        //public static ActionResultVM HandelJoinGroup(ChatGroupVM groupVM)
        //{
        //    var group = ccs.FindGroup(groupVM.GroupId);
        //    if (group != null)
        //    {
        //        //加入用户
        //        var users = ccs.FindUsers(groupVM.GroupUser.Keys.ToList());

        //        if (users.Count > 0)
        //        {
        //            //用户加入组
        //            foreach (var user in users)
        //            {
        //                foreach (var conn in user.Conns.Keys)
        //                {
        //                    await Groups.AddToGroupAsync(conn, group.GroupConnId);
        //                }

        //                //维护组
        //                ccs.OnlineGroup1[groupVM.GroupId].GroupUser.Add(user.UserId, user);
        //            }

        //            //推通知
        //            await PushMessageToGroup(new ChatMessageVM()
        //            {
        //                CmFromId = ccs.OnlineUser1.Values.First().UserId,
        //                CmType = MessageType.EventJoinGroup.ToString(),
        //                CmContent = users,
        //                CmToIds = new List<string> { groupVM.GroupId }
        //            });
        //        }
        //    }
        //}

        ///// <summary>
        ///// 处理离开组
        ///// </summary>
        ///// <param name="groupVM">组信息</param>
        ///// <returns></returns>
        //public static ActionResultVM HandelLeaveGroup(ChatGroupVM groupVM)
        //{
        //    var group = ccs.FindGroup(groupVM.GroupId);
        //    if (group != null)
        //    {
        //        //离开用户
        //        var users = ccs.FindUsers(groupVM.GroupUser.Keys.ToList());

        //        if (users.Count > 0)
        //        {
        //            //删除用户
        //            foreach (var user in users)
        //            {
        //                foreach (var conn in user.Conns.Keys)
        //                {
        //                    await Groups.RemoveFromGroupAsync(conn, group.GroupConnId);
        //                }

        //                //维护组
        //                ccs.OnlineGroup1[groupVM.GroupId].GroupUser.Remove(user.UserId);
        //            }

        //            //推通知
        //            await PushMessageToGroup(new ChatMessageVM()
        //            {
        //                CmFromId = ccs.OnlineUser1.Values.First().UserId,
        //                CmType = MessageType.EventLeaveGroup.ToString(),
        //                CmContent = users,
        //                CmToIds = new List<string> { groupVM.GroupId }
        //            });
        //        }
        //    }
        //}

        ///// <summary>
        ///// 处理删除组
        ///// </summary>
        ///// <param name="groupVM">组信息</param>
        ///// <returns></returns>
        //public static ActionResultVM HandelDelGroup(ChatGroupVM groupVM)
        //{
        //    var group = ccs.FindGroup(groupVM.GroupId);
        //    if (group != null)
        //    {
        //        //组所有用户
        //        var users = ccs.FindUsers(group.GroupUser.Keys.ToList());

        //        if (users.Count > 0)
        //        {
        //            //删除组
        //            foreach (var user in users)
        //            {
        //                foreach (var conn in user.Conns.Keys)
        //                {
        //                    await Groups.RemoveFromGroupAsync(conn, group.GroupConnId);
        //                }
        //            }

        //            //维护组
        //            ccs.OnlineGroup1.Remove(group.GroupId);

        //            //推通知
        //            await PushMessageToGroup(new ChatMessageVM()
        //            {
        //                CmFromId = ccs.OnlineUser1.Values.First().UserId,
        //                CmType = MessageType.EventDelGroup.ToString(),
        //                CmToIds = new List<string> { groupVM.GroupId }
        //            });
        //        }
        //    }
        //}

        #endregion

        #region 方法

        /// <summary>
        /// 获取登录用户信息
        /// </summary>
        /// <param name="hc">上下文</param>
        /// <returns></returns>
        public static ChatUserVM GetChatUserInfo(HttpContext hc)
        {
            if (hc.User.Identity.IsAuthenticated)
            {
                var ud = hc.User.FindFirstValue(ClaimTypes.UserData)?.ToJObject();

                var cu = new ChatUserVM()
                {
                    UserId    = hc.User.FindFirstValue(ClaimTypes.NameIdentifier),
                    UserName  = hc.User.FindFirstValue(ClaimTypes.Name),
                    UserPhoto = ud["UserPhoto"]?.ToString()
                };

                return(cu);
            }

            return(null);
        }
Exemple #3
0
        /// <summary>
        /// 用户下线
        /// </summary>
        public static void UserOffline(ChatUserVM ou)
        {
            var user = FindOnlineUser(ou?.UserId);

            if (user != null)
            {
                var cu = OnlineUser2[ou.UserId];

                //多端登录
                if (cu.Conns.Count > 1)
                {
                    cu.Conns.Remove(ou.Conns.FirstOrDefault().Key);
                }
                else
                {
                    OnlineUser2.Remove(ou.UserId);
                }
            }
        }