IW4M-Admin/WebfrontCore/Controllers/ServerController.cs

117 lines
4.5 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 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
2022-04-19 19:43:58 -04:00
var serverInfo = new ServerInfo
2018-02-21 20:29:23 -05:00
{
Name = s.Hostname,
ID = s.EndPoint,
Port = s.Port,
2018-02-21 20:29:23 -05:00
Map = s.CurrentMap.Alias,
2022-06-04 10:58:30 -04:00
Game = (Reference.Game)s.GameName,
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,
2022-04-19 19:43:58 -04:00
ZScore = p.GetAdditionalProperty<EFClientStatistics>(StatManager
2022-01-22 13:49:12 -05:00
.CLIENT_STATS_KEY)?.ZScore
}).ToList(),
ChatHistory = s.ChatHistory.ToList(),
ClientHistory = s.ClientHistory,
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]
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"];
2022-04-19 19:43:58 -04:00
ViewBag.SelectedServerId = string.IsNullOrEmpty(serverId) ? Manager.GetServers().FirstOrDefault()?.ToString() : serverId;
2022-01-22 13:49:12 -05:00
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")]
2022-04-19 19:43:58 -04:00
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;
2022-01-24 10:56:48 -05:00
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
{
2022-04-19 19:43:58 -04:00
return servers.Select((server, index) => 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(),
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
}
}