diff --git a/WebfrontCore/Controllers/Client/Legacy/StatsController.cs b/WebfrontCore/Controllers/Client/Legacy/StatsController.cs index 4c3012aca..803f11888 100644 --- a/WebfrontCore/Controllers/Client/Legacy/StatsController.cs +++ b/WebfrontCore/Controllers/Client/Legacy/StatsController.cs @@ -30,10 +30,11 @@ namespace IW4MAdmin.Plugins.Web.StatsWeb.Controllers private readonly IDatabaseContextFactory _contextFactory; private readonly StatsConfiguration _config; private readonly IServerDataViewer _serverDataViewer; + private readonly StatManager _statManager; public StatsController(ILogger logger, IManager manager, IResourceQueryHelper resourceQueryHelper, ITranslationLookup translationLookup, - IDatabaseContextFactory contextFactory, StatsConfiguration config, IServerDataViewer serverDataViewer) : base(manager) + IDatabaseContextFactory contextFactory, StatsConfiguration config, IServerDataViewer serverDataViewer, StatManager statManager) : base(manager) { _logger = logger; _manager = manager; @@ -42,6 +43,7 @@ namespace IW4MAdmin.Plugins.Web.StatsWeb.Controllers _contextFactory = contextFactory; _config = config; _serverDataViewer = serverDataViewer; + _statManager = statManager; } [HttpGet] @@ -52,23 +54,23 @@ namespace IW4MAdmin.Plugins.Web.StatsWeb.Controllers ViewBag.Localization = _translationLookup; ViewBag.SelectedServerId = serverId; - var server = _manager.GetServers().FirstOrDefault(server => server.ToString() == serverId); + var server = _manager.GetServers().FirstOrDefault(server => server.Id == serverId) as IGameServer; long? matchedServerId = null; if (server != null) { - matchedServerId = StatManager.GetIdForServer(server); + matchedServerId = server.LegacyDatabaseId; } ViewBag.TotalRankedClients = await _serverDataViewer.RankedClientsCountAsync(matchedServerId, token); ViewBag.ServerId = matchedServerId; return View("~/Views/Client/Statistics/Index.cshtml", _manager.GetServers() - .Select(server => new ServerInfo + .Select(selectedServer => new ServerInfo { - Name = server.Hostname, - IPAddress = server.IP, - Port = server.Port + Name = selectedServer.Hostname, + IPAddress = selectedServer.ListenAddress, + Port = selectedServer.ListenPort })); } @@ -81,16 +83,14 @@ namespace IW4MAdmin.Plugins.Web.StatsWeb.Controllers serverId = null; } - var server = _manager.GetServers().FirstOrDefault(_server => _server.EndPoint == serverId); - - if (server != null) + if (_manager.GetServers().FirstOrDefault(activeServer => activeServer.EndPoint == serverId) is IGameServer server) { - serverId = StatManager.GetIdForServer(server); + serverId = server.LegacyDatabaseId; } var results = _config?.EnableAdvancedMetrics ?? true - ? await Plugin.Manager.GetNewTopStats(offset, count, serverId) - : await Plugin.Manager.GetTopStats(offset, count, serverId); + ? await _statManager.GetNewTopStats(offset, count, serverId) + : await _statManager.GetTopStats(offset, count, serverId); // this returns an empty result so we know to stale the loader if (results.Count == 0 && offset > 0) @@ -205,7 +205,7 @@ namespace IW4MAdmin.Plugins.Web.StatsWeb.Controllers .Include(s => s.CurrentViewAngle) .Include(s => s.Server) .Include(s => s.PredictedViewAngles) - .ThenInclude(_angles => _angles.Vector) + .ThenInclude(angles => angles.Vector) .OrderBy(s => s.When) .ThenBy(s => s.Hits); diff --git a/WebfrontCore/Controllers/ServerController.cs b/WebfrontCore/Controllers/ServerController.cs index 344885ef4..5e76c03d5 100644 --- a/WebfrontCore/Controllers/ServerController.cs +++ b/WebfrontCore/Controllers/ServerController.cs @@ -22,36 +22,36 @@ namespace WebfrontCore.Controllers [ResponseCache(NoStore = true, Duration = 0)] public IActionResult ClientActivity(long id) { - var s = Manager.GetServers().FirstOrDefault(_server => _server.EndPoint == id); + var matchingServer = Manager.GetServers().FirstOrDefault(server => server.EndPoint == id); - if (s == null) + if (matchingServer == null) { return NotFound(); } var serverInfo = new ServerInfo { - Name = s.Hostname, - ID = s.EndPoint, - Port = s.Port, - Map = s.CurrentMap.Alias, - Game = (Reference.Game)s.GameName, - ClientCount = s.Clients.Count(client => client != null), - MaxClients = s.MaxClients, - GameType = s.GametypeName, - Players = s.GetClientsAsList() - .Select(p => new PlayerInfo + Name = matchingServer.Hostname, + ID = matchingServer.EndPoint, + Port = matchingServer.ListenPort, + Map = matchingServer.CurrentMap?.Alias, + Game = (Reference.Game)matchingServer.GameName, + ClientCount = matchingServer.ClientNum, + MaxClients = matchingServer.MaxClients, + GameType = matchingServer.GametypeName, + Players = matchingServer.GetClientsAsList() + .Select(client => new PlayerInfo { - Name = p.Name, - ClientId = p.ClientId, - Level = p.Level.ToLocalizedLevelName(), - LevelInt = (int) p.Level, - ZScore = p.GetAdditionalProperty(StatManager + Name = client.Name, + ClientId = client.ClientId, + Level = client.Level.ToLocalizedLevelName(), + LevelInt = (int)client.Level, + ZScore = client.GetAdditionalProperty(StatManager .CLIENT_STATS_KEY)?.ZScore }).ToList(), - ChatHistory = s.ChatHistory.ToList(), - ClientHistory = s.ClientHistory, - IsPasswordProtected = !string.IsNullOrEmpty(s.GamePassword) + ChatHistory = matchingServer.ChatHistory.ToList(), + ClientHistory = matchingServer.ClientHistory, + IsPasswordProtected = !string.IsNullOrEmpty(matchingServer.GamePassword) }; return PartialView("_ClientActivity", serverInfo); } diff --git a/WebfrontCore/ViewComponents/ServerListViewComponent.cs b/WebfrontCore/ViewComponents/ServerListViewComponent.cs index c9e5e30a9..e9800feff 100644 --- a/WebfrontCore/ViewComponents/ServerListViewComponent.cs +++ b/WebfrontCore/ViewComponents/ServerListViewComponent.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Threading; using Data.Models; using Data.Models.Client.Stats; +using IW4MAdmin.Plugins.Stats.Helpers; using SharedLibraryCore.Configuration; using SharedLibraryCore.Interfaces; using static SharedLibraryCore.Server; @@ -68,10 +69,10 @@ namespace WebfrontCore.ViewComponents { Name = server.Hostname, ID = server.EndPoint, - Port = server.Port, - Map = server.CurrentMap.Alias, + Port = server.ListenPort, + Map = server.CurrentMap?.Alias, Game = (Reference.Game)server.GameName, - ClientCount = server.Clients.Count(client => client != null), + ClientCount = server.ClientNum, MaxClients = server.MaxClients, GameType = server.GametypeName, ClientHistory = new ClientHistoryInfo @@ -80,15 +81,14 @@ namespace WebfrontCore.ViewComponents ClientCounts = counts.ToList() }, Players = server.GetClientsAsList() - .Select(p => new PlayerInfo() + .Select(client => new PlayerInfo { - Name = p.Name, - ClientId = p.ClientId, - Level = p.Level.ToLocalizedLevelName(), - LevelInt = (int) p.Level, - Tag = p.Tag, - ZScore = p.GetAdditionalProperty(IW4MAdmin.Plugins.Stats.Helpers - .StatManager + Name = client.Name, + ClientId = client.ClientId, + Level = client.Level.ToLocalizedLevelName(), + LevelInt = (int)client.Level, + Tag = client.Tag, + ZScore = client.GetAdditionalProperty(StatManager .CLIENT_STATS_KEY)?.ZScore }).ToList(), ChatHistory = server.ChatHistory.ToList(), @@ -97,7 +97,7 @@ namespace WebfrontCore.ViewComponents ExternalIPAddress = server.ResolvedIpEndPoint.Address.IsInternal() ? Program.Manager.ExternalIPAddress : server.IP, ConnectProtocolUrl = server.EventParser.URLProtocolFormat.FormatExt( server.ResolvedIpEndPoint.Address.IsInternal() ? Program.Manager.ExternalIPAddress : server.IP, - server.Port) + server.ListenPort) }); } diff --git a/WebfrontCore/ViewComponents/TopPlayersViewComponent.cs b/WebfrontCore/ViewComponents/TopPlayersViewComponent.cs index 63934ab49..81587bec9 100644 --- a/WebfrontCore/ViewComponents/TopPlayersViewComponent.cs +++ b/WebfrontCore/ViewComponents/TopPlayersViewComponent.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using IW4MAdmin.Plugins.Stats; using IW4MAdmin.Plugins.Stats.Helpers; using Microsoft.AspNetCore.Mvc; +using SharedLibraryCore.Interfaces; using Stats.Config; namespace WebfrontCore.ViewComponents @@ -10,26 +11,28 @@ namespace WebfrontCore.ViewComponents public class TopPlayersViewComponent : ViewComponent { private readonly StatsConfiguration _config; + private readonly StatManager _statManager; - public TopPlayersViewComponent(StatsConfiguration config) + public TopPlayersViewComponent(StatsConfiguration config, StatManager statManager) { _config = config; + _statManager = statManager; } public async Task InvokeAsync(int count, int offset, string serverEndpoint = null) { var server = Plugin.ServerManager.GetServers() - .FirstOrDefault(server => server.ToString() == serverEndpoint); + .FirstOrDefault(server => server.Id == serverEndpoint) as IGameServer; - var serverId = server is null ? (long?)null : StatManager.GetIdForServer(server); + var serverId = server?.LegacyDatabaseId; ViewBag.UseNewStats = _config?.EnableAdvancedMetrics ?? true; - ViewBag.SelectedServerName = server?.Hostname; + ViewBag.SelectedServerName = server?.ServerName; return View("~/Views/Client/Statistics/Components/TopPlayers/_List.cshtml", ViewBag.UseNewStats - ? await Plugin.Manager.GetNewTopStats(offset, count, serverId) - : await Plugin.Manager.GetTopStats(offset, count, serverId)); + ? await _statManager.GetNewTopStats(offset, count, serverId) + : await _statManager.GetTopStats(offset, count, serverId)); } } }