Example #1
0
        public void RemoveOnlineUser()
        {
            var chatAdminUser = _service.GetChatUserByConnectionId(Context.ConnectionId);

            ChatRoomVM roomVM = new ChatRoomVM();

            if (chatAdminUser != null)
            {
                // Notify Admins
                Clients.Group("adminGroup").removeUser(chatAdminUser.UserName);
                Clients.Group("adminGroup").removeOnlineUser(chatAdminUser.UserName);
                // This is used to update the database
                var rooms = _service.GetAllActiveChatRoomsByUser(chatAdminUser.ChatUserId);
                if (rooms != null && rooms.Count > 0)
                {
                    foreach (var r in rooms)
                    {
                        ChatRoomVM chatRoomVM = new ChatRoomVM();
                        --r.ActiveUserCount;
                        if (r.ActiveUserCount == 0)
                        {
                            r.Status = 1;
                            r.EndTime = GetLocalTime();
                            _service.UpdateChatRoom(r);
                            RemoveActiveRoom(r.ChatRoomName);
                            Clients.Group("adminGroup").removeRoom(r.ChatRoomName);
                        }
                        else
                        {
                            r.HasAdminUser = false;
                            r.ChatUser = null;
                            _service.UpdateChatRoom(r);
                            chatRoomVM.ActiveUserCount = r.ActiveUserCount;
                            chatRoomVM.ChatRoomName = r.ChatRoomName;
                            chatRoomVM.HasAdminUser = r.HasAdminUser;
                            Clients.Group("adminGroup").updateActiveRoom(chatRoomVM);
                            // TODO: Place room update code for live feed here
                            RoomFeedVM roomFeed = new RoomFeedVM();

                            roomFeed.UsersInRoom = r.ActiveUserCount;
                            roomFeed.StartTime = r.StartTime;
                            roomFeed.RoomName = r.ChatRoomName;
                            roomFeed.HelperName = chatAdminUser.FirstName + " " + chatAdminUser.LastName;
                            roomFeed.ClientId = r.ChatUserId;
                            if (r.HasAdminUser == true) { roomFeed.BeingHelped = "Yes"; } else { roomFeed.BeingHelped = "No"; }
                            Clients.Group("adminGroup").updateRoom(roomFeed);
                            Groups.Remove(Context.ConnectionId, roomFeed.RoomName);
                        }

                    }
                    chatAdminUser.IsOnline = false;
                    chatAdminUser.LogOutTime = GetLocalTime();

                    _service.UpdateAdminUser(chatAdminUser);
                }
                else
                {
                    chatAdminUser.IsOnline = false;
                    chatAdminUser.LogOutTime = GetLocalTime();
                    _service.UpdateAdminUser(chatAdminUser);
                }
            }
        }
Example #2
0
        // Disconnects Users
        public override Task OnDisconnected()
        {
            // Get user from Active User list
            var user = activeUsers.Find(u => u.ConnectionId == Context.ConnectionId);

            var chatAdminUser = _service.GetChatUserByConnectionId(Context.ConnectionId);

            if (chatAdminUser != null)
            {
                Clients.Group("adminGroup").removeOnlineUser(chatAdminUser.UserName);
            }

            ChatRoomVM roomVM = new ChatRoomVM();

            if (user != null)
            {
                // get room
                var chatRoom = _service.GetActiveRoomByName(user.roomName);
                // Remove user from ChatRoom
                var chatRoomCount = chatRoom.ActiveUserCount;

                chatRoom.ActiveUserCount = chatRoomCount - 1;

                // Check to see if there are any other users
                if (chatRoom.ActiveUserCount == 0)
                {
                    // If no users then remove room from active Chat Rooms list
                    chatRoom.Status = 1;
                    chatRoom.EndTime = GetLocalTime();
                    // Javascript function that removes room from ChatLobby room list.
                    RemoveActiveRoom(chatRoom.ChatRoomName);
                    // Update the room in the database.
                    _service.UpdateChatRoom(chatRoom);
                    Clients.All.removeRoom(chatRoom.ChatRoomName);
                }
                else
                {
                    // If there are still users in a room update the count in the lobby
                    //TODO: change to roomVM
                    roomVM.ActiveUserCount = chatRoom.ActiveUserCount;
                    roomVM.ChatRoomName = chatRoom.ChatRoomName;
                    roomVM.HasAdminUser = chatRoom.HasAdminUser;

                    _service.UpdateChatRoom(chatRoom);
                    Clients.Group("adminGroup").updateActiveRoom(roomVM);
                    // TODO: Place room update code for live feed here
                    RoomFeedVM roomFeed = new RoomFeedVM();

                    roomFeed.UsersInRoom = chatRoom.ActiveUserCount;
                    roomFeed.StartTime = chatRoom.StartTime;
                    roomFeed.RoomName = chatRoom.ChatRoomName;
                    roomFeed.ClientId = chatRoom.ChatUserId;
                    if (chatRoom.HasAdminUser == true) { roomFeed.BeingHelped = "Yes"; } else { roomFeed.BeingHelped = "No"; }
                    Clients.All.updateRoom(roomFeed);
                    Groups.Remove(Context.ConnectionId, roomFeed.RoomName);
                }
                activeUsers.Remove(user);
            }
            else if (chatAdminUser != null && chatAdminUser.IsOnline == true)
            {
                // Notify Admins
                Clients.Group("adminGroup").removeUser(chatAdminUser.UserName);
                Clients.Group("adminGroup").removeOnlineUser(chatAdminUser.UserName);
                // This is used to update the database
                var rooms = _service.GetAllActiveChatRoomsByUser(chatAdminUser.ChatUserId);
                if (rooms != null && rooms.Count > 0)
                {
                    foreach (var r in rooms)
                    {
                        ChatRoomVM chatRoomVM = new ChatRoomVM();
                        --r.ActiveUserCount;
                        if (r.ActiveUserCount == 0)
                        {
                            r.Status = 1;
                            r.EndTime = GetLocalTime();
                            _service.UpdateChatRoom(r);
                            RemoveActiveRoom(r.ChatRoomName);
                            Clients.Group("adminGroup").removeRoom(r.ChatRoomName);
                        }
                        else
                        {
                            r.HasAdminUser = false;
                            r.ChatUser = null;
                            _service.UpdateChatRoom(r);
                            chatRoomVM.ActiveUserCount = r.ActiveUserCount;
                            chatRoomVM.ChatRoomName = r.ChatRoomName;
                            chatRoomVM.HasAdminUser = r.HasAdminUser;
                            Clients.Group("adminGroup").updateActiveRoom(chatRoomVM);
                            // TODO: Place room update code for live feed here
                            RoomFeedVM roomFeed = new RoomFeedVM();

                            roomFeed.UsersInRoom = r.ActiveUserCount;
                            roomFeed.StartTime = r.StartTime;
                            roomFeed.RoomName = r.ChatRoomName;
                            roomFeed.HelperName = chatAdminUser.FirstName + " " + chatAdminUser.LastName;
                            roomFeed.ClientId = r.ChatUserId;
                            if (r.HasAdminUser == true) { roomFeed.BeingHelped = "Yes"; } else { roomFeed.BeingHelped = "No"; }
                            Clients.Group("adminGroup").updateRoom(roomFeed);
                            Groups.Remove(Context.ConnectionId, roomFeed.RoomName);
                        }

                    }
                    chatAdminUser.IsOnline = false;
                    chatAdminUser.LogOutTime = GetLocalTime();

                    _service.UpdateAdminUser(chatAdminUser);
                }
                else
                {
                    chatAdminUser.IsOnline = false;
                    chatAdminUser.LogOutTime = GetLocalTime();
                    _service.UpdateAdminUser(chatAdminUser);
                }
            }
            return base.OnDisconnected();
        }
Example #3
0
        // Connect/Create Agent ChatUser and add to a ChatRoom and SignalR Group
        public ChatClientUser ConnectUser(string username)
        {
            var OnlineUsers = _service.GetOnlineUsers();

            if (OnlineUsers.Count() > 1)
            {
                string roomName = RandomString(5);
                JoinGroup(roomName);

                ChatClientUser user = new ChatClientUser() { userName = username, roomName = roomName, isUserAllowed = true, ConnectionId = Context.ConnectionId };
                ChatRoom room = new ChatRoom();

                room.ChatUserId = user.userName;

                room.StartTime = GetLocalTime();
                //room.StartTime = DateTime.Now;
                room.Status = 0;
                room.ActiveUserCount = 1;
                room.ChatRoomName = roomName;
                room.HasAdminUser = false;

                activeUsers.Add(user);

                // Save ChatRoom to Repo
                _service.AddChatRoom(room);

                // This adds the new chat room to the admin chat lobby
                Clients.Group("adminGroup").addActiveRoom(room, user);

                RoomFeedVM roomFeed = new RoomFeedVM();

                if (room.HasAdminUser == true)
                { roomFeed.BeingHelped = "Yes"; }
                else { roomFeed.BeingHelped = "No"; }
                roomFeed.ClientId = room.ChatUserId;
                roomFeed.HelperName = "";
                roomFeed.RoomName = room.ChatRoomName;
                roomFeed.StartTime = room.StartTime;
                roomFeed.UsersInRoom = room.ActiveUserCount;

                Clients.All.addRoom(roomFeed);

                return user;
            }
            else
            {
                return new ChatClientUser { userName = username, isUserAllowed = false };
            }
        }
Example #4
0
        // Add ChatUser and ChatRoom to SignalR Groups
        public void JoinGroup(string groupName)
        {
            Groups.Add(Context.ConnectionId, groupName);

            // If admin, add to ChatRoom's list of active ChatUsers
            //var user = activeUsers.Find(u => u.ConnectionId == Context.ConnectionId);
            //var room = activeChatRooms.Find(r => r.ChatRoomName == groupName);

            var adminUser = _service.GetChatUserByConnectionId(Context.ConnectionId);
            var chatRoom = _service.GetActiveRoomByName(groupName);
            var defaultCannedMessage = _service.GetDefaultCannedMessage();

            if (adminUser != null && chatRoom != null)
            {
                ChatRoomVM roomVM = new ChatRoomVM();
                ChatMessage message = new ChatMessage();

                // Initial Welcome Message
                if (chatRoom.FirstMessage == true)
                {
                    if (defaultCannedMessage != null)
                    {
                        message.ChatRoom = chatRoom;
                        message.ChatRoomId = chatRoom.ChatRoomId;
                        message.UserName = adminUser.UserName;
                        message.Content = defaultCannedMessage.CannedMessageContent;
                        message.MessageSent = GetLocalTime();
                        chatRoom.ChatMessages.Add(message);
                        chatRoom.FirstMessage = false;

                        Clients.Group(groupName).DisplayMessage(message.UserName, message.Content, groupName);
                        Clients.Group(groupName).DisplayMessageToClient(adminUser.FirstName, message.Content);
                    }
                }

                ++chatRoom.ActiveUserCount;
                chatRoom.AdminChatUserId = adminUser.ChatUserId;
                chatRoom.HasAdminUser = true;
                chatRoom.ChatUser = adminUser;

                adminUser.ChatRooms.Add(chatRoom);

                roomVM.HasAdminUser = chatRoom.HasAdminUser;
                roomVM.ActiveUserCount = chatRoom.ActiveUserCount;
                roomVM.ChatRoomName = chatRoom.ChatRoomName;

                _service.UpdateChatRoom(chatRoom);
                _service.UpdateAdminUser(adminUser);

                Clients.OthersInGroup(groupName).userConnected(adminUser.FirstName);
                Clients.Group("adminGroup").updateActiveRoom(roomVM);

                RoomFeedVM roomFeed = new RoomFeedVM();

                roomFeed.UsersInRoom = chatRoom.ActiveUserCount;
                roomFeed.StartTime = chatRoom.StartTime;
                roomFeed.RoomName = chatRoom.ChatRoomName;
                roomFeed.HelperName = adminUser.FirstName + " " + adminUser.LastName;
                roomFeed.ClientId = chatRoom.ChatUserId;
                if (chatRoom.HasAdminUser == true) { roomFeed.BeingHelped = "Yes"; } else { roomFeed.BeingHelped = "No"; }

                // TODO: Update Chat Room in Live Feed
                Clients.All.updateRoom(roomFeed);
            }
        }
Example #5
0
        // Methods for Control Panel
        public ActionResult LiveUserRoomFeed()
        {
            ViewBag.MenuBar = "ControlPanel";

            var currentUser = _service.GetChatUserByUsername(HttpContext.User.Identity.Name.ToString());
            ViewBag.UserNameFullName = currentUser.FirstName + " " + currentUser.LastName;
            if (currentUser.IsOnline == true)
            {
                currentUser.IsOnline = false;
                _service.UpdateAdminUser(currentUser);

            }
            ViewBag.IsAdmin = currentUser.IsAdmin;
            ViewBag.UserName = currentUser.FirstName + " " + currentUser.LastName;
            ViewBag.User = currentUser.UserName;

            var onlineUsers = _service.GetOnlineUsers();

            var rooms = _service.GetActiveChatRooms();

            LiveUserRoomFeedVM feed = new LiveUserRoomFeedVM();

            foreach (var ou in onlineUsers)
            {
                UserFeedVM user = new UserFeedVM();

                user.FirstName = ou.FirstName;
                user.LastName = ou.LastName;
                user.LogInTime = ou.LogInTime;
                user.UserName = ou.UserName;

                feed.OnlineUsers.Add(user);
            }
            foreach (var r in rooms)
            {
                RoomFeedVM room = new RoomFeedVM();

                if (r.HasAdminUser == true)
                {
                    room.BeingHelped = "Yes";
                }
                else
                {
                    room.BeingHelped = "No";
                }
                room.ClientId = r.ChatUserId;
                if (r.ChatUser != null)
                {
                    room.HelperName = r.ChatUser.FirstName + " " + r.ChatUser.LastName;
                }
                else
                {
                    room.HelperName = string.Empty;
                }
                room.RoomName = r.ChatRoomName;
                room.StartTime = r.StartTime;
                room.UsersInRoom = r.ActiveUserCount;
                feed.ActiveRooms.Add(room);
            }

            return View(feed);
        }