mirror of
https://github.com/RaidMax/IW4M-Admin.git
synced 2025-06-10 15:20:48 -05:00
updates to support new master versioning
make sure game files are copied correctly in build output
This commit is contained in:
@ -1,19 +1,36 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Collections.Generic;
|
||||
using Newtonsoft.Json;
|
||||
using RestEase;
|
||||
using SharedLibraryCore.Helpers;
|
||||
|
||||
namespace IW4MAdmin.Application.API.Master
|
||||
{
|
||||
/// <summary>
|
||||
/// Defines the structure of the IW4MAdmin instance for the master API
|
||||
/// </summary>
|
||||
public class ApiInstance
|
||||
{
|
||||
/// <summary>
|
||||
/// Unique ID of the instance
|
||||
/// </summary>
|
||||
[JsonProperty("id")]
|
||||
public string Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates how long the instance has been running
|
||||
/// </summary>
|
||||
[JsonProperty("uptime")]
|
||||
public int Uptime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Specifices the version of the instance
|
||||
/// </summary>
|
||||
[JsonProperty("version")]
|
||||
public float Version { get; set; }
|
||||
[JsonConverter(typeof(BuildNumberJsonConverter))]
|
||||
public BuildNumber Version { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// List of servers the instance is monitoring
|
||||
/// </summary>
|
||||
[JsonProperty("servers")]
|
||||
public List<ApiServer> Servers { get; set; }
|
||||
}
|
||||
|
@ -1,22 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using RestEase;
|
||||
using SharedLibraryCore;
|
||||
|
||||
namespace IW4MAdmin.Application.API.Master
|
||||
{
|
||||
public class HeartbeatState
|
||||
{
|
||||
public bool Connected { get; set; }
|
||||
public CancellationToken Token { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Defines the heartbeat functionality for IW4MAdmin
|
||||
/// </summary>
|
||||
public class Heartbeat
|
||||
{
|
||||
/// <summary>
|
||||
/// Sends heartbeat to master server
|
||||
/// </summary>
|
||||
/// <param name="mgr"></param>
|
||||
/// <param name="firstHeartbeat"></param>
|
||||
/// <returns></returns>
|
||||
public static async Task Send(ApplicationManager mgr, bool firstHeartbeat = false)
|
||||
{
|
||||
var api = Endpoint.Get();
|
||||
@ -35,7 +34,7 @@ namespace IW4MAdmin.Application.API.Master
|
||||
{
|
||||
Id = mgr.GetApplicationSettings().Configuration().Id,
|
||||
Uptime = (int)(DateTime.UtcNow - mgr.StartTime).TotalSeconds,
|
||||
Version = (float)Program.Version,
|
||||
Version = Program.Version,
|
||||
Servers = mgr.Servers.Select(s =>
|
||||
new ApiServer()
|
||||
{
|
||||
@ -52,14 +51,21 @@ namespace IW4MAdmin.Application.API.Master
|
||||
}).ToList()
|
||||
};
|
||||
|
||||
Response<ResultMessage> response = null;
|
||||
|
||||
if (firstHeartbeat)
|
||||
{
|
||||
var message = await api.AddInstance(instance);
|
||||
response = await api.AddInstance(instance);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
var message = await api.UpdateInstance(instance.Id, instance);
|
||||
response = await api.UpdateInstance(instance.Id, instance);
|
||||
}
|
||||
|
||||
if (response.ResponseMessage.StatusCode != System.Net.HttpStatusCode.OK)
|
||||
{
|
||||
mgr.Logger.WriteWarning($"Response code from master is {response.ResponseMessage.StatusCode}, message is {response.StringContent}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using RestEase;
|
||||
using SharedLibraryCore.Helpers;
|
||||
|
||||
namespace IW4MAdmin.Application.API.Master
|
||||
{
|
||||
@ -22,9 +23,12 @@ namespace IW4MAdmin.Application.API.Master
|
||||
public class VersionInfo
|
||||
{
|
||||
[JsonProperty("current-version-stable")]
|
||||
public float CurrentVersionStable { get; set; }
|
||||
[JsonConverter(typeof(BuildNumberJsonConverter))]
|
||||
public BuildNumber CurrentVersionStable { get; set; }
|
||||
|
||||
[JsonProperty("current-version-prerelease")]
|
||||
public float CurrentVersionPrerelease { get; set; }
|
||||
[JsonConverter(typeof(BuildNumberJsonConverter))]
|
||||
public BuildNumber CurrentVersionPrerelease { get; set; }
|
||||
}
|
||||
|
||||
public class ResultMessage
|
||||
@ -38,11 +42,14 @@ namespace IW4MAdmin.Application.API.Master
|
||||
#if !DEBUG
|
||||
private static readonly IMasterApi api = RestClient.For<IMasterApi>("http://api.raidmax.org:5000");
|
||||
#else
|
||||
private static IMasterApi api = RestClient.For<IMasterApi>("http://127.0.0.1");
|
||||
private static readonly IMasterApi api = RestClient.For<IMasterApi>("http://127.0.0.1");
|
||||
#endif
|
||||
public static IMasterApi Get() => api;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Defines the capabilities of the master API
|
||||
/// </summary>
|
||||
[Header("User-Agent", "IW4MAdmin-RestEase")]
|
||||
public interface IMasterApi
|
||||
{
|
||||
@ -53,13 +60,15 @@ namespace IW4MAdmin.Application.API.Master
|
||||
Task<TokenId> Authenticate([Body] AuthenticationId Id);
|
||||
|
||||
[Post("instance/")]
|
||||
Task<ResultMessage> AddInstance([Body] ApiInstance instance);
|
||||
[AllowAnyStatusCode]
|
||||
Task<Response<ResultMessage>> AddInstance([Body] ApiInstance instance);
|
||||
|
||||
[Put("instance/{id}")]
|
||||
Task<ResultMessage> UpdateInstance([Path] string id, [Body] ApiInstance instance);
|
||||
[AllowAnyStatusCode]
|
||||
Task<Response<ResultMessage>> UpdateInstance([Path] string id, [Body] ApiInstance instance);
|
||||
|
||||
[Get("version")]
|
||||
Task<VersionInfo> GetVersion();
|
||||
[Get("version/{apiVersion}")]
|
||||
Task<VersionInfo> GetVersion([Path] int apiVersion);
|
||||
|
||||
[Get("localization")]
|
||||
Task<List<SharedLibraryCore.Localization.Layout>> GetLocalization();
|
||||
|
Reference in New Issue
Block a user