public async Task SendChatMessage(string threadId, int recipientId, string message)
        {
            int senderId = int.Parse(Context.User.FindFirst(ClaimTypes.NameIdentifier).Value);
            var isRecipientFocusingOnThisConversation = false;
            var recipientFocusingConversationList     = new List <int>();

            if (userFocusingMessageThreads.TryGetValue(recipientId, out recipientFocusingConversationList))
            {
                isRecipientFocusingOnThisConversation = recipientFocusingConversationList.Contains(senderId);
            }
            var messageToSave = new Message(senderId, recipientId, message);
            var messageToSent = new MessageForReceive()
            {
                ThreadId       = threadId,
                SenderId       = senderId,
                RecipientId    = recipientId,
                MessageContent = message,
                MessageSent    = messageToSave.MessageSent
            };
            int?unreadMessageTotalCountOughtToBeNotifiedToRecipient =
                await repository.AddMessageToThread(messageToSave, ObjectId.Parse(threadId), isRecipientFocusingOnThisConversation);

            var tasks = new List <Task>();

            tasks.Add(Clients.Group(recipientId.ToString()).SendAsync("ReceiveMessage", messageToSent));
            tasks.Add(Clients.Group(senderId.ToString()).SendAsync("ReceiveMessage", messageToSent));
            if (unreadMessageTotalCountOughtToBeNotifiedToRecipient.HasValue)
            {
                tasks.Add(Clients.Group(recipientId.ToString()).SendAsync(
                              "ReceiveTotalUnreadMessageCount",
                              unreadMessageTotalCountOughtToBeNotifiedToRecipient.Value
                              ));
            }
            await Task.WhenAll(tasks);
        }