public async Task Handle(ConnectionUpdatedIntegrationEvent @event) { var connectionSubscription = new ConnectionSubscription(@event.UserId, @event.OtherId); var connectionMethod = ConnectionUpdatedMethod.WithArgs(@event.OtherId, @event.Notes, (int)@event.Relationship); await _publisherService.PublishAsync(connectionSubscription, connectionMethod); var statusSubscription = new UserStatusSubscription(@event.OtherId); var connections = await _connectionService.GetConnectionsAsync(@event.UserId); foreach (var connection in connections) { if (@event.Relationship == ConnectionUpdatedIntegrationEvent.RelationshipEnum.Friend) { await _subscriptionService.SubscribeAsync(connection, statusSubscription); var isOnline = await _connectionService.HasConnectionsAsync(@event.OtherId); var statusMethod = UserStatusUpdatedMethod.WithArgs(@event.OtherId, isOnline ? UserStatus.Online : UserStatus.Offline); await _publisherService.PublishAsync(connection, statusMethod); } else { await _subscriptionService.UnsubscribeAsync(connection, statusSubscription); var statusMethod = UserStatusUpdatedMethod.WithArgs(@event.OtherId, UserStatus.Unknown); await _publisherService.PublishAsync(connection, statusMethod); } } }
public override async Task <Empty> SubscribeToUsersUpdates(ConnectionsUpdatesRequest request, ServerCallContext context) { _logger.LogInformation( "Begin grpc call from method {Method} to subscribe to users updates {UsersIds} with connectionId {ConnectionId}", context.Method, string.Join(',', request.UsersIds), request.ConnectionId); var verifiedConnection = await _userConnectionService.VerifyConnectionAsync(request.UserId, request.ConnectionId); if (!verifiedConnection) { context.Status = new Status(StatusCode.InvalidArgument, "Invalid connection id."); return(new Empty()); } foreach (var userId in request.UsersIds) { var userSubscription = new UserSubscription(userId); await _subscriptionService.SubscribeAsync(request.ConnectionId, userSubscription); var relationshipSubscription = new ConnectionSubscription(request.UserId, userId); await _subscriptionService.SubscribeAsync(request.ConnectionId, relationshipSubscription); } return(new Empty()); }
public async Task Handle(ConnectionCreatedIntegrationEvent @event) { var userSubscription = new UserSubscription(@event.OtherId); var connectionSubscription = new ConnectionSubscription(@event.UserId, @event.OtherId); var connectionIds = await _userConnectionService.GetConnectionsAsync(@event.UserId); foreach (var connectionId in connectionIds) { await _subscriptionService.SubscribeAsync(connectionId, userSubscription); await _subscriptionService.SubscribeAsync(connectionId, connectionSubscription); } var method = ConnectionCreatedMethod.WithArgs(@event.OtherId, @event.Name, @event.Tag); await _publisherService.PublishAsync(connectionSubscription, method); }