public async Task <IActionResult> Index() { var gameServerFilterModel = new GameServerFilterModel { Order = GameServerFilterModel.OrderBy.BannerServerListPosition }.ApplyAuthForServerAdmin(User); var servers = await _gameServersRepository.GetGameServers(gameServerFilterModel); var gameServerStatusFilterModel = new GameServerStatusFilterModel().ApplyAuthForGameServerStatus(User); var serversStatus = await _gameServerStatusRepository.GetAllStatusModels(gameServerStatusFilterModel, TimeSpan.Zero); var results = new List <ServersController.ServerInfoViewModel>(); foreach (var server in servers) { var portalGameServerStatusDto = serversStatus.SingleOrDefault(ss => server.ServerId == ss.ServerId); if (portalGameServerStatusDto != null) { results.Add(new ServersController.ServerInfoViewModel { GameServer = server, GameServerStatus = portalGameServerStatusDto }); } } return(View(results)); }
public async Task <IActionResult> GameServerStatus() { var filterModel = new GameServerStatusFilterModel().ApplyAuthForGameServerStatus(User); var statusModel = await _gameServerStatusRepository.GetAllStatusModels(filterModel, TimeSpan.Zero); return(View(statusModel)); }
public async Task <List <PortalGameServerStatusDto> > GetAllStatusModels(GameServerStatusFilterModel filterModel, TimeSpan cacheCutoff) { var query = new TableQuery <PortalGameServerStatusEntity>().AsTableQuery(); var results = new List <PortalGameServerStatusDto>(); TableContinuationToken continuationToken = null; do { var queryResult = await _statusTable.ExecuteQuerySegmentedAsync(query, continuationToken); foreach (var entity in queryResult) { if (cacheCutoff != TimeSpan.Zero && entity.Timestamp < DateTime.UtcNow + cacheCutoff) { var refreshedGameServerStatusDto = await RefreshGameServerStatus(entity.ServerId); results.Add(refreshedGameServerStatusDto); continue; } var gameServerStatusDto = new PortalGameServerStatusDto { ServerId = entity.ServerId, GameType = entity.GameType, ServerName = entity.ServerName, Hostname = entity.Hostname, QueryPort = entity.QueryPort, Map = entity.Map, Mod = entity.Mod, PlayerCount = entity.PlayerCount, MaxPlayers = entity.MaxPlayers, Players = entity.Players, Timestamp = entity.Timestamp }; results.Add(gameServerStatusDto); } continuationToken = queryResult.ContinuationToken; } while (continuationToken != null); var toReturn = results.Where(server => server != null).AsQueryable(); if (filterModel.GameTypes != null && filterModel.GameTypes.Any()) { toReturn = toReturn.Where(server => filterModel.GameTypes.Contains(server.GameType)).AsQueryable(); } if (filterModel.ServerIds != null && filterModel.ServerIds.Any()) { toReturn = toReturn.Where(server => filterModel.ServerIds.Contains(server.ServerId)).AsQueryable(); } return(toReturn.ToList()); }
public static GameServerStatusFilterModel ApplyAuthForGameServerStatus(this GameServerStatusFilterModel filterModel, ClaimsPrincipal claimsPrincipal) { var requiredClaims = new[] { XtremeIdiotsClaimTypes.SeniorAdmin, XtremeIdiotsClaimTypes.HeadAdmin, PortalClaimTypes.GameServer }; var(gameTypes, serverIds) = claimsPrincipal.ClaimedGamesAndItems(requiredClaims); filterModel.GameTypes = gameTypes; filterModel.ServerIds = serverIds; return(filterModel); }