Example #1
0
        public Task <RollListDto <Message> > GetMessagesOfLobbyAsync(Guid lobbyId, Guid?oldestId,
                                                                     int requestedCount)
        {
            var lobby = lobbyStorage.GetLobby(lobbyId);

            if (!lobby.Contains(identityService.GetCurrentUserName()))
            {
                throw new UnauthorizedAccessException("Not authorized to read the messages of this lobby.");
            }

            List <Message>?results = null;

            if (oldestId.HasValue)
            {
                var oldest = lobbyStorage.GetMessages(lobbyId).Single(x => x.Id == oldestId);
                results = lobbyStorage.GetMessages(lobbyId)
                          .Where(x => x.Timestamp < oldest.Timestamp)
                          .OrderByDescending(x => x.Timestamp)
                          .Take(requestedCount)
                          .OrderBy(x => x.Timestamp)
                          .ToList();
            }
            else
            {
                results = lobbyStorage.GetMessages(lobbyId)
                          .OrderByDescending(x => x.Timestamp)
                          .Take(requestedCount)
                          .OrderBy(x => x.Timestamp)
                          .ToList();
            }

            var hasMore = results.Count == requestedCount && lobbyStorage.GetMessages(lobbyId)
                          .Any(x => x.Timestamp < results.First().Timestamp);

            return(Task.FromResult(new RollListDto <Message>
            {
                HasMoreLeft = hasMore,
                Data = results
            }));
        }
Example #2
0
 public Task <List <Message> > GetMessages(Guid lobbyId)
 {
     return(Task.FromResult(lobbyStorage.GetMessages(lobbyId)));
 }