IW4M-Admin/WebfrontCore/Controllers/ServerController.cs

122 lines
4.8 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
2022-01-22 13:49:12 -05:00
using Microsoft.AspNetCore.Mvc;
using SharedLibraryCore;
2018-04-08 02:44:42 -04:00
using SharedLibraryCore.Dtos;
move all the deployment setup into 2.4 pr (#85) * don't run build commands in release * fix test file * Set up CI with Azure Pipelines [skip ci] * Include fonts and fix automessage hidden command * more project changes * migration from bower to libman * more lib man changes * project update for sneaky commands * add missing canvas.js dep update projects not to have stupid extra dlls include in previous * update pipeline file * update post publish script and pipeline definition * fix broken yaml * move encoding conversion to seperate script * remove extra uneeded rank icons remove garbage language files being created remove frontend lib when done * fix publish script path * grab localizations through powershell * fix broken batch :shrug: * actually fixed * only include runtime compilation in debug mode for webfront * don't deploy un minified css use full jquery version * add step to download the scss for open iconic change the font path * update mkdir for iconic path * don't include old iconic css * correct font path for real now * copy script plugins * lots of changes for deployment * build the projects * use projectdir instead of solution dir * nerf script commands plugin fix live radar left over command * actually kill script command post build * Update azure-pipelines.yml for Azure Pipelines * Update azure-pipelines.yml for Azure Pipelines * fix the font file copy (I think) * maybe fix delete folder issue * Update azure-pipelines.yml for Azure Pipelines * Update azure-pipelines.yml for Azure Pipelines * Update azure-pipelines.yml for Azure Pipelines * Update azure-pipelines.yml for Azure Pipelines * Update azure-pipelines.yml for Azure Pipelines * Update azure-pipelines.yml for Azure Pipelines
2019-12-02 16:52:36 -05:00
using SharedLibraryCore.Interfaces;
2018-02-21 20:29:23 -05:00
using System.Linq;
2022-06-04 10:58:30 -04:00
using Data.Models;
using Data.Models.Client.Stats;
2022-01-22 13:49:12 -05:00
using IW4MAdmin.Plugins.Stats.Helpers;
using WebfrontCore.ViewModels;
2018-02-21 20:29:23 -05:00
namespace WebfrontCore.Controllers
{
2018-03-06 02:22:19 -05:00
public class ServerController : BaseController
2018-02-21 20:29:23 -05:00
{
2022-01-22 13:49:12 -05:00
public ServerController(IManager manager) : base(manager)
move all the deployment setup into 2.4 pr (#85) * don't run build commands in release * fix test file * Set up CI with Azure Pipelines [skip ci] * Include fonts and fix automessage hidden command * more project changes * migration from bower to libman * more lib man changes * project update for sneaky commands * add missing canvas.js dep update projects not to have stupid extra dlls include in previous * update pipeline file * update post publish script and pipeline definition * fix broken yaml * move encoding conversion to seperate script * remove extra uneeded rank icons remove garbage language files being created remove frontend lib when done * fix publish script path * grab localizations through powershell * fix broken batch :shrug: * actually fixed * only include runtime compilation in debug mode for webfront * don't deploy un minified css use full jquery version * add step to download the scss for open iconic change the font path * update mkdir for iconic path * don't include old iconic css * correct font path for real now * copy script plugins * lots of changes for deployment * build the projects * use projectdir instead of solution dir * nerf script commands plugin fix live radar left over command * actually kill script command post build * Update azure-pipelines.yml for Azure Pipelines * Update azure-pipelines.yml for Azure Pipelines * fix the font file copy (I think) * maybe fix delete folder issue * Update azure-pipelines.yml for Azure Pipelines * Update azure-pipelines.yml for Azure Pipelines * Update azure-pipelines.yml for Azure Pipelines * Update azure-pipelines.yml for Azure Pipelines * Update azure-pipelines.yml for Azure Pipelines * Update azure-pipelines.yml for Azure Pipelines
2019-12-02 16:52:36 -05:00
{
}
2018-02-21 20:29:23 -05:00
[HttpGet]
[ResponseCache(NoStore = true, Duration = 0)]
public IActionResult ClientActivity(long id)
2018-02-21 20:29:23 -05:00
{
var matchingServer = Manager.GetServers().FirstOrDefault(server => server.EndPoint == id);
if (matchingServer == null)
{
return NotFound();
}
2018-02-21 20:29:23 -05:00
2022-04-19 19:43:58 -04:00
var serverInfo = new ServerInfo
2018-02-21 20:29:23 -05:00
{
Name = matchingServer.Hostname,
ID = matchingServer.EndPoint,
Port = matchingServer.ListenPort,
Map = matchingServer.CurrentMap?.Alias,
Game = (Reference.Game)matchingServer.GameName,
ClientCount = matchingServer.ClientNum,
MaxClients = matchingServer.MaxClients,
PrivateClientSlots = matchingServer.PrivateClientSlots,
GameType = matchingServer.GametypeName,
Players = matchingServer.GetClientsAsList()
.Select(client => new PlayerInfo
2022-01-22 13:49:12 -05:00
{
Name = client.Name,
ClientId = client.ClientId,
Level = client.Level.ToLocalizedLevelName(),
LevelInt = (int)client.Level,
ZScore = client.GetAdditionalProperty<EFClientStatistics>(StatManager
2022-01-22 13:49:12 -05:00
.CLIENT_STATS_KEY)?.ZScore
}).ToList(),
ChatHistory = matchingServer.ChatHistory.ToList(),
ClientHistory = matchingServer.ClientHistory,
IsPasswordProtected = !string.IsNullOrEmpty(matchingServer.GamePassword)
2018-02-21 20:29:23 -05:00
};
return PartialView("_ClientActivity", serverInfo);
}
2022-01-22 13:49:12 -05:00
[HttpGet]
2022-04-19 19:43:58 -04:00
public ActionResult Scoreboard(string serverId)
2022-01-22 13:49:12 -05:00
{
ViewBag.Title = Localization["WEBFRONT_TITLE_SCOREBOARD"];
ViewBag.SelectedServerId = string.IsNullOrEmpty(serverId)
? Manager.GetServers().FirstOrDefault()?.ToString()
: serverId;
2022-04-20 09:39:16 -04:00
return View(ProjectScoreboard(Manager.GetServers(), null, true));
2022-01-22 13:49:12 -05:00
}
[HttpGet("[controller]/{id}/scoreboard")]
public ActionResult Scoreboard(string id, [FromQuery] string order = null, [FromQuery] bool down = true)
2022-01-22 13:49:12 -05:00
{
2022-04-19 19:43:58 -04:00
var server = Manager.GetServers().FirstOrDefault(srv => srv.ToString() == id);
2022-01-22 13:49:12 -05:00
if (server == null)
{
return NotFound();
}
2022-04-19 19:43:58 -04:00
ViewBag.SelectedServerId = id;
return View("_Scoreboard", ProjectScoreboard(new[] { server }, order, down).First());
2022-01-22 13:49:12 -05:00
}
2022-01-24 10:56:48 -05:00
private static IEnumerable<ScoreboardInfo> ProjectScoreboard(IEnumerable<Server> servers, string order,
2022-04-20 09:39:16 -04:00
bool down)
2022-01-22 13:49:12 -05:00
{
return servers.Select(server => new ScoreboardInfo
2022-01-22 13:49:12 -05:00
{
2022-01-24 10:56:48 -05:00
OrderByKey = order,
ShouldOrderDescending = down,
2022-01-22 13:49:12 -05:00
MapName = server.CurrentMap.ToString(),
ServerName = server.Hostname,
2022-04-19 19:43:58 -04:00
ServerId = server.ToString(),
GameCode = server.GameCode,
2022-04-20 09:39:16 -04:00
ClientInfo = server.GetClientsAsList().Select(client =>
2022-01-22 13:49:12 -05:00
new
{
stats = client.GetAdditionalProperty<EFClientStatistics>(StatManager.CLIENT_STATS_KEY),
client
})
.Select(clientData => new ClientScoreboardInfo
{
ClientName = clientData.client.Name,
ClientId = clientData.client.ClientId,
2022-01-24 15:05:50 -05:00
Score = Math.Max(clientData.client.Score, clientData.stats?.RoundScore ?? 0),
2022-01-22 13:49:12 -05:00
Ping = clientData.client.Ping,
Kills = clientData.stats?.MatchData?.Kills,
Deaths = clientData.stats?.MatchData?.Deaths,
ScorePerMinute = clientData.stats?.SessionSPM,
2022-01-24 10:56:48 -05:00
Kdr = clientData.stats?.MatchData?.Kdr,
ZScore = clientData.stats?.ZScore == null || clientData.stats.ZScore == 0
? null
: clientData.stats.ZScore,
Team = clientData.client.Team
2022-01-22 13:49:12 -05:00
})
2022-04-20 09:39:16 -04:00
.ToList()
2022-01-22 13:49:12 -05:00
}).ToList();
}
2018-02-21 20:29:23 -05:00
}
}