Ejemplo n.º 1
0
        //---------------------------- Connection Handlings ------------------------

        public async Task <List <HandlerResult> > OnConnected(string userEmail, WebSocket socket)
        {
            var resList = new List <HandlerResult>();

            var user = await _unitOfWork.UserManager.FindByEmailAsync(userEmail);

            _connectionManager.AddSocket(user, socket);

            var statusMessage = _sendFormatFactory.ConnectionStatus(user);
            var friends       = await _unitOfWork.Friends.GetFriends(user);

            var potentialFriends = await _unitOfWork.Friends.GetPotentialFriends(user);

            var chatRooms = await _unitOfWork.ChatRoomUsers.GetChatRoomsByUser(user);

            var roomsList          = chatRooms.Select(roomUser => roomUser.ChatRoom).ToList();
            var confirmedRoomsList = chatRooms.Where(roomUser => roomUser.Confirmed).Select(roomUser => roomUser.ChatRoom).ToList();
            var potentialRoomsList = chatRooms.Where(roomUser => !roomUser.Confirmed).Select(roomUser => roomUser.ChatRoom).ToList();
            var chatRoomsUsers     = await _unitOfWork.ChatRoomUsers.GetChatUsersList(roomsList);

            var unreadPrivateMessages = await _unitOfWork.PrivateMessages.GetNotSeen(user.Id);

            var unreadChatMessages = await _unitOfWork.ChatMessages.GetNotSeen(user.Id);

            var initialMessage = _sendFormatFactory.InitialInfo(user, friends, potentialFriends, confirmedRoomsList
                                                                , chatRoomsUsers
                                                                , unreadPrivateMessages
                                                                , unreadChatMessages
                                                                , potentialRoomsList);
            var friendsSockets = _connectionManager.GetSockets(friends);

            resList.Add(CreateResult(socket, initialMessage));
            resList.Add(CreateResult(friendsSockets, statusMessage));

            return(resList);
        }