public override async Task <Empty> SubscribeToRoomsUpdates(RoomsUpdatesRequest request, ServerCallContext context) { _logger.LogInformation( "Begin grpc call from method {Method} to subscribe to Rooms {RoomsIds} with connectionId {ConnectionId}", context.Method, string.Join(',', request.Rooms.Select(r => r.Id)), 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 dm in request.Rooms) { var dmSubscription = new RoomSubscription(dm.Id); await _subscriptionService.SubscribeAsync(request.ConnectionId, dmSubscription); foreach (var member in dm.MembersIds) { var userSubscription = new UserSubscription(member); await _subscriptionService.SubscribeAsync(request.ConnectionId, userSubscription); } } return(new Empty()); }
public async Task SubscribeToRoomsUpdatesAsync(string userId, string connectionId, params Room[] rooms) { await GrpcCallerService.CallService(_urls.GrpcNotifications, async channel => { var client = new NotificationsGrpc.NotificationsGrpcClient(channel); var request = new RoomsUpdatesRequest { UserId = userId, ConnectionId = connectionId }; foreach (var room in rooms) { var roomModel = new GrpcNotifcations.Room { Id = room.Id }; roomModel.MembersIds.AddRange(room.MembersIds); request.Rooms.Add(roomModel); } await client.SubscribeToRoomsUpdatesAsync(request); }); }