Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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);
            });
        }