Exemplo n.º 1
0
        public async Task <IReadOnlyCollection <ChatRoom> > ListRooms(CancellationToken token = default)
        {
            var operationToken = CancellationTokenSource.CreateLinkedTokenSource(clientLifetime.Token, token).Token;

            var request = new ListRoomsRequest();

            var response = await transport.Exchange <ListRoomsResponse>(request, operationToken);

            return(response.Rooms);
        }
Exemplo n.º 2
0
        public override async Task ListRooms(ListRoomsRequest request, IServerStreamWriter <AvailableRoom> responseStream, ServerCallContext context)
        {
            if (_chatRooms.IsEmpty)
            {
                //await responseStream.WriteAsync(new AvailableRoom());
                return;
            }
            var keys = _chatRooms.Keys;

            for (int i = 0; i < keys.Count; i++)
            {
                var item         = new AvailableRoom();
                var room         = keys.ElementAt(i);
                var participants = _chatRooms[room];
                item.RoomName     = room.Name;
                item.Participants = String.Join(",", participants.Take(5));

                //send them slowly, theres no need to rush this, after all
                //the concurrent dictionary is subject to locks
                await responseStream.WriteAsync(item);
            }
        }