public async Task JoinRoom(string roomId, string group) { await _chatService.SetUserCurrentRoomByUserId(Context.User.Identity.Name, Guid.Parse(roomId)); GetUserAndCurrentRoomChatView user = await _chatService.GetUserAndCurrentRoomByUserId(Context.User.Identity.Name); GetAllMessagesChatView room = await _chatService.GetAllMessagesByRoomId(Guid.Parse(roomId)); GetAllUsersChatView usersInRoom = _chatService.GetAllUsersByRoomId(user.CurrentRoomId); await Groups.AddToGroupAsync(Context.ConnectionId, group); await Clients.Group(group).SendAsync("UserConnected", $"{user.FirstName} {user.LastName} join to conversation", user, usersInRoom); await Clients.Group(group).SendAsync("ReceiveRoomMessages", room); }
public GetAllUsersChatView GetAllUsersByRoomId(Guid roomId) { var users = _userManager.Users .Where(x => x.CurrentRoomId == roomId) .ToList(); if (!users.Any()) { throw new Exception("Users is not find"); } var response = new GetAllUsersChatView(); response.Users = _mapper.Map(users, response.Users); return(response); }
public override async Task OnConnectedAsync() { GetUserAndCurrentRoomChatView user = await _chatService.GetUserAndCurrentRoomByUserId(Context.User.Identity.Name); GetAllRoomsChatView userRooms = await _chatService.GetByUserId(Context.User.Identity.Name); List <string> roomNames = userRooms.Rooms .Where(x => x.Id == user.CurrentRoomId) .Select(x => x.Name) .ToList(); GetAllUsersChatView usersInRoom = _chatService.GetAllUsersByRoomId(user.CurrentRoomId); await Clients.Groups(roomNames).SendAsync("UserConnected", $"{user.FirstName} {user.LastName} join to conversation", user, usersInRoom); await base.OnConnectedAsync(); }