Example #1
0
        public async Task SendMessage(Message message)
        {
            var recipient = await _userService.GetUserByIdAsync(message.RecipientId);

            var sender = await _userService.GetUserByUserNameAsync(Context.User.Identity.Name);

            var senderDetail = GetUserDetail(sender.Id);

            if (senderDetail != null)
            {
                if (!await _chatService.DoesChatExistAsync(sender.Id))
                {
                    var chat = new Chat
                    {
                        ChatId = sender.Id
                    };

                    await _chatService.AddChatAsync(chat);
                }

                message.ChatId = sender.Id;

                await _chatService.AddMessageAsync(message);

                await _unitOfWork.CompleteAsync();

                var senderChatModel = PrepareChatModel(message, sender, MessagePosition.Right, "me");

                var recipientChatModel = PrepareChatModel(message, sender, MessagePosition.Left);

                var senderMessageTemplate = await PrepareMessageTemplate(senderChatModel);

                var recipientMessageTemplate = await PrepareMessageTemplate(recipientChatModel);

                //Send message to the recipient if and only if is online
                if (GetUserDetail(recipient.Id) != null)
                {
                    await Clients.User(recipient.Id)
                    .SendAsync("addChatMessage", recipientMessageTemplate, message.Id, sender.Id);
                }

                //Caller
                await Clients.User(sender.Id).SendAsync("addChatMessage", senderMessageTemplate, message.Id, null);
            }
        }