public async Task <IActionResult> CreateGroupChat([FromBody] GroupChatMember otherMember) { var user = await TokenHelper.GetUser(User, _userManager); if (user == null) { return(RequestHandler.Unauthorized()); } if (user.Id.ToString() == otherMember.Id) { return(RequestHandler.BadRequest("You can't start a chat with yourself")); } var groupChat = await _groupChatService.GetExistingGroupChatAsync(user.Id.ToString(), otherMember.Id); if (groupChat != null) { return(RequestHandler.BadRequest($"You are already in a group chat with {otherMember.Name}")); } groupChat = new GroupChat(); groupChat.Members.Add(new GroupChatMember { Id = user.Id.ToString(), Name = user.UserName, Email = user.Email, }); groupChat.Members.Add(otherMember); await _groupChatService.SaveGroupChatAsync(groupChat); foreach (var member in groupChat.Members) { var clients = SignalRMemberService.GetConnectionsByUser(member.Id); if (clients == null) { continue; } foreach (var connectionId in clients) { await _signalRHub.Groups.AddToGroupAsync(connectionId, groupChat.Id); if (member.Id == user.Id.ToString()) { await _signalRHub.Clients.Client(connectionId).GroupChatUpdated(groupChat); } else { await _signalRHub.Clients.Client(connectionId).GroupChatCreated(groupChat, user.UserName); } } } return(Ok(groupChat)); }
/* CHAT SYSTEM */ public async Task SendGroupChatMessage(ChatMessageRequest request) { var groupChat = await _groupChatService.GetGroupChatByIdAsync(request.GroupId); if (groupChat == null) { return; } groupChat.ChatMessages.Add(new ChatMessage { Id = Guid.NewGuid(), SenderId = Context.UserIdentifier, Message = request.Message, DateTime = DateTime.Now }); await _groupChatService.SaveGroupChatAsync(groupChat, Context.UserIdentifier); await GroupChatUpdated(groupChat); }