private async Task HandleReceiverToSenderAsync(UserIdentifier senderIdentifier, UserIdentifier receiverIdentifier, string message, Guid sharedMessageId) { var friendshipState = (await _friendshipManager.GetFriendshipOrNullAsync(receiverIdentifier, senderIdentifier))?.State; if (friendshipState == null) { var senderTenancyName = senderIdentifier.TenantId.HasValue ? _tenantCache.Get(senderIdentifier.TenantId.Value).TenancyName : null; var senderUser = _userManager.GetUser(senderIdentifier); await _friendshipManager.CreateFriendshipAsync( new Friendship( receiverIdentifier, senderIdentifier, senderTenancyName, senderUser.UserName, senderUser.ProfilePictureId, FriendshipState.Accepted ) ); } if (friendshipState == FriendshipState.Blocked) { //Do not send message if receiver banned the sender return; } var sentMessage = new ChatMessage( receiverIdentifier, senderIdentifier, ChatSide.Receiver, message, ChatMessageReadState.Unread, sharedMessageId, ChatMessageReadState.Read ); Save(sentMessage); var clients = _onlineClientManager.GetAllByUserId(receiverIdentifier); if (clients.Any()) { await _chatCommunicator.SendMessageToClient(clients, sentMessage); } else if (GetUnreadMessageCount(senderIdentifier, receiverIdentifier) == 1) { var senderTenancyName = senderIdentifier.TenantId.HasValue ? _tenantCache.Get(senderIdentifier.TenantId.Value).TenancyName : null; await _userEmailer.TryToSendChatMessageMail( _userManager.GetUser(receiverIdentifier), _userManager.GetUser(senderIdentifier).UserName, senderTenancyName, sentMessage ); } }
public async Task SendMessageToClient(IReadOnlyList <IOnlineClient> clients, ChatMessage message) { await Task.CompletedTask; }