예제 #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());
        }