public async Task <FriendDto> CreateFriendshipRequest(CreateFriendshipRequestInput input) { var userIdentifier = AbpSession.ToUserIdentifier(); var probableFriend = new UserIdentifier(input.TenantId, input.UserId); _chatFeatureChecker.CheckChatFeatures(userIdentifier.TenantId, probableFriend.TenantId); if (_friendshipManager.GetFriendshipOrNull(userIdentifier, probableFriend) != null) { throw new UserFriendlyException(L("YouAlreadySentAFriendshipRequestToThisUser")); } var user = await UserManager.FindByIdAsync(AbpSession.GetUserId()); User probableFriendUser; using (CurrentUnitOfWork.SetTenantId(input.TenantId)) { probableFriendUser = (await UserManager.FindByIdAsync(input.UserId)); } var friendTenancyName = probableFriend.TenantId.HasValue ? _tenantCache.Get(probableFriend.TenantId.Value).TenancyName : null; var sourceFriendship = new Friendship(userIdentifier, probableFriend, friendTenancyName, probableFriendUser.UserName, probableFriendUser.ProfilePictureId, FriendshipState.Accepted); _friendshipManager.CreateFriendship(sourceFriendship); var userTenancyName = user.TenantId.HasValue ? _tenantCache.Get(user.TenantId.Value).TenancyName : null; var targetFriendship = new Friendship(probableFriend, userIdentifier, userTenancyName, user.UserName, user.ProfilePictureId, FriendshipState.Accepted); _friendshipManager.CreateFriendship(targetFriendship); var clients = _onlineClientManager.GetAllByUserId(probableFriend); if (clients.Any()) { var isFriendOnline = _onlineClientManager.IsOnline(sourceFriendship.ToUserIdentifier()); _chatCommunicator.SendFriendshipRequestToClient(clients, targetFriendship, false, isFriendOnline); } var senderClients = _onlineClientManager.GetAllByUserId(userIdentifier); if (senderClients.Any()) { var isFriendOnline = _onlineClientManager.IsOnline(targetFriendship.ToUserIdentifier()); _chatCommunicator.SendFriendshipRequestToClient(senderClients, sourceFriendship, true, isFriendOnline); } var sourceFriendshipRequest = sourceFriendship.MapTo <FriendDto>(); sourceFriendshipRequest.IsOnline = _onlineClientManager.GetAllByUserId(probableFriend).Any(); return(sourceFriendshipRequest); }
public void SendFriendshipRequestToClient(IReadOnlyList <IOnlineClient> clients, Friendship friendship, bool isOwnRequest, bool isFriendOnline) { foreach (var client in clients) { var signalRClient = GetSignalRClientOrNull(client); if (signalRClient == null) { return; } var friendshipRequest = friendship.MapTo <FriendDto>(); friendshipRequest.IsOnline = isFriendOnline; signalRClient.getFriendshipRequest(friendshipRequest, isOwnRequest); } }