예제 #1
0
        public async Task <IEnumerable <RoomDetails> > GetAllRoomsAsync()
        {
            var rooms = await RoomResource.ReadAsync();

            var tasks = rooms.Select(
                room => GetRoomDetailsAsync(
                    room,
                    ParticipantResource.ReadAsync(
                        room.Sid,
                        ParticipantStatus.Connected)));

            return(await Task.WhenAll(tasks));

            async Task <RoomDetails> GetRoomDetailsAsync(
                RoomResource room,
                Task <ResourceSet <ParticipantResource> > participantTask)
            {
                var participants = await participantTask;

                return(new RoomDetails
                {
                    Name = room.UniqueName,
                    MaxParticipants = room.MaxParticipants ?? 0,
                    ParticipantCount = participants.ToList().Count
                });
            }
        }
예제 #2
0
        public async ValueTask <IEnumerable <RoomDetails> > GetAllRoomsAsync()
        {
            var rooms = await RoomResource.ReadAsync();

            var tasks = rooms.Select(
                room => GetRoomDetailsAsync(
                    room,
                    ParticipantResource.ReadAsync(
                        room.Sid,
                        ParticipantStatus.Connected)));

            return(await Task.WhenAll(tasks));
예제 #3
0
        public async Task <IEnumerable <RoomDetails> > GetAllRoomsAsync(string roomSid = null)
        {
            var rooms = await RoomResource.ReadAsync();

            if (roomSid != null)
            {
                var tasks = rooms.Where(x => x.Sid == roomSid).Select(
                    room => GetRoomDetailsAsync(
                        room,
                        ParticipantResource.ReadAsync(
                            room.Sid,
                            ParticipantStatus.Connected)));
                return(await Task.WhenAll(tasks));
            }
            else
            {
                var tasks = rooms.Select(
                    room => GetRoomDetailsAsync(
                        room,
                        ParticipantResource.ReadAsync(
                            room.Sid,
                            ParticipantStatus.Connected)));

                return(await Task.WhenAll(tasks));
            }
            //Note that for every room n that exists, GetRoomDetailsAsync is invoked to fetch the room’s connected participants. This can be a performance concern! Even though this is done asynchronously and in parallel, it should be considered a potential bottleneck and marked for refactoring. It isn't a concern in this demo project, as there are, at most, a few rooms.
            async Task <RoomDetails> GetRoomDetailsAsync(
                RoomResource room,
                Task <ResourceSet <ParticipantResource> > participantTask)
            {
                var participants = await participantTask;

                return(new RoomDetails
                {
                    Id = room.Sid,
                    Name = room.UniqueName,
                    MaxParticipants = room.MaxParticipants ?? 0,
                    ParticipantCount = participants.ToList().Count
                });
            }
        }