コード例 #1
0
        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));
        }
コード例 #2
0
        public async Task <IActionResult> GameServerStatus()
        {
            var filterModel = new GameServerStatusFilterModel().ApplyAuthForGameServerStatus(User);

            var statusModel = await _gameServerStatusRepository.GetAllStatusModels(filterModel, TimeSpan.Zero);

            return(View(statusModel));
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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);
        }