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));
        }
Exemplo n.º 2
0
        /* 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);
        }