示例#1
0
        public void SetChatUserStatusToIdle(int status)
        {
            System.Web.HttpContextBase httpContext = Context.Request.GetHttpContext();
            int        UserId      = 0;
            HttpCookie auth_cookie = httpContext.Request.Cookies[Cookies.UserId];

            if (auth_cookie != null)
            {
                UserId = Convert.ToInt32(auth_cookie.Value);
            }
            if (SingletonUserChatGroups.Instance.ActiveUsers?
                .Where(m => m.UserId == UserId)
                .Any() == true)
            {
                SingletonUserChatGroups.Instance.ActiveUsers
                .Where(m => m.UserId == UserId)
                .FirstOrDefault()
                .Status = status;
                if (status == (int)ChatUserStatus.Active)
                {
                    SingletonUserChatGroups.Instance.ActiveUsers
                    .Where(m => m.UserId == UserId)
                    .FirstOrDefault()
                    .LastActivityAt = DateTime.UtcNow;
                }
                SingletonUserChatGroups.Instance.ActiveUsers
                .Where(m => m.UserId == UserId)
                .FirstOrDefault()
                .Status = status;
            }

            ChatMessageActiveUser obj = new ChatMessageActiveUser();

            if (SingletonUserChatGroups.Instance.ActiveUsers != null)
            {
                obj.ActiveUsers = SingletonUserChatGroups.Instance.ActiveUsers.OrderByDescending(m => m.LastMessageAt).ToList();

                Clients.All.SetChatUserStatusToIdleCallback(new ActionOutput <ChatMessageActiveUser>
                {
                    Status = ActionStatus.Successfull,
                    Object = obj
                });
            }
        }
示例#2
0
        private void ChatUserStatusToIdleTimer(object state)
        {
            if (SingletonUserChatGroups.Instance.ActiveUsers != null)
            {
                var IdleUsers = SingletonUserChatGroups.Instance.ActiveUsers
                                .Where(m => m.LastActivityAt < DateTime.UtcNow.AddMinutes(-IdleUserTimeout))
                                .ToList();
                SingletonUserChatGroups.Instance.ActiveUsers
                .Where(m => m.LastActivityAt < DateTime.UtcNow.AddMinutes(-IdleUserTimeout))
                .ToList()
                .ForEach(m => m.Status = (int)ChatUserStatus.Idle);

                ChatMessageActiveUser obj = new ChatMessageActiveUser();
                obj.ActiveUsers = SingletonUserChatGroups.Instance.ActiveUsers.OrderBy(m => m.Status).ToList();

                _chatHub.Clients.All.SetChatUserStatusToIdleCallback(new ActionOutput <ChatMessageActiveUser>
                {
                    Message = "ChatUserStatusToIdleTimer: " + DateTime.UtcNow.ToString(),
                    Status  = ActionStatus.Successfull,
                    Object  = obj
                });
            }
        }