IW4M-Admin/WebfrontCore/Controllers/ServerController.cs

106 lines
3.8 KiB
C#
Raw Normal View History

2022-01-22 13:49:12 -05:00
using System.Collections.Generic;
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;
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 s = Manager.GetServers().FirstOrDefault(_server => _server.EndPoint == id);
2018-02-21 20:29:23 -05:00
if (s == null)
{
return NotFound();
}
2018-02-21 20:29:23 -05:00
var serverInfo = new ServerInfo()
{
Name = s.Hostname,
ID = s.EndPoint,
Port = s.Port,
2018-02-21 20:29:23 -05:00
Map = s.CurrentMap.Alias,
ClientCount = s.Clients.Count(client => client != null),
2018-02-21 20:29:23 -05:00
MaxClients = s.MaxClients,
2022-01-22 13:49:12 -05:00
GameType = s.GametypeName,
Players = s.GetClientsAsList()
2022-01-22 13:49:12 -05:00
.Select(p => new PlayerInfo
{
Name = p.Name,
ClientId = p.ClientId,
Level = p.Level.ToLocalizedLevelName(),
LevelInt = (int) p.Level,
ZScore = p.GetAdditionalProperty<EFClientStatistics>(IW4MAdmin.Plugins.Stats.Helpers.StatManager
.CLIENT_STATS_KEY)?.ZScore
}).ToList(),
ChatHistory = s.ChatHistory.ToList(),
PlayerHistory = s.ClientHistory.ToArray(),
IsPasswordProtected = !string.IsNullOrEmpty(s.GamePassword)
2018-02-21 20:29:23 -05:00
};
return PartialView("_ClientActivity", serverInfo);
}
2022-01-22 13:49:12 -05:00
[HttpGet]
public ActionResult Scoreboard()
{
ViewBag.Title = Localization["WEBFRONT_TITLE_SCOREBOARD"];
return View(ProjectScoreboard(Manager.GetServers()));
}
[HttpGet("[controller]/{id}/scoreboard")]
public ActionResult Scoreboard(long id)
{
var server = Manager.GetServers().FirstOrDefault(srv => srv.EndPoint == id);
if (server == null)
{
return NotFound();
}
return View("_Scoreboard", ProjectScoreboard(new[] {server}).First());
}
private IEnumerable<ScoreboardInfo> ProjectScoreboard(IEnumerable<Server> servers)
{
return servers.Select(server => new ScoreboardInfo
{
MapName = server.CurrentMap.ToString(),
ServerName = server.Hostname,
ServerId = server.EndPoint,
ClientInfo = server.GetClientsAsList().Select(client =>
new
{
stats = client.GetAdditionalProperty<EFClientStatistics>(StatManager.CLIENT_STATS_KEY),
client
})
.Select(clientData => new ClientScoreboardInfo
{
ClientName = clientData.client.Name,
ClientId = clientData.client.ClientId,
Score = clientData.client.Score,
Ping = clientData.client.Ping,
Kills = clientData.stats?.MatchData?.Kills,
Deaths = clientData.stats?.MatchData?.Deaths,
ScorePerMinute = clientData.stats?.SessionSPM,
Kdr = clientData.stats?.MatchData?.Kdr
})
.ToList()
}).ToList();
}
2018-02-21 20:29:23 -05:00
}
}