1
0
mirror of https://github.com/RaidMax/IW4M-Admin.git synced 2025-06-10 15:20:48 -05:00

Update projects to .net 8 (#326)

* Update codebase to target .NET 8.0 and improve JSON serialization

This commit switches our target framework from .NET 6.0 to .NET 8.0 and replaces Newtonsoft.Json with System.Text.Json for serialization. The JsonConverter classes have been updated to support the new JSON model and some enhancements were applied to the codebase such as fixing a command property and updating various package references.

* Align with Develop

* Update SharedLibraryCore package version

The version of the SharedLibraryCore package reference has been updated across multiple projects from '2024.2.4.85' to '2024.2.5.9'. Meanwhile, version within SharedLibraryCore.csproj has been changed from '2024.02.04.085' to '2024.01.01.1'. Changes also include removal of .NET 8 requirement notice and reenabling of status upload to master communicator.

* Update properties in IRConParser and IRConParserConfiguration to be settable

The properties in the `IRConParser` and `IRConParserConfiguration` interfaces were updated to include setters. Previously, the properties in these interfaces were read-only. This change allows for the modifications and extensions of properties defined, thereby bolstering flexibility for the handling of games and parsers.

* Replace RestEase with Refit in API usage

Refit has been implemented as a replacement for RestEase in all API calls. As such, all related code, parameters and imports have been adjusted to function with Refit. Logic has also been added to handle certain Refit-specific behaviours. Occurrences of the RestEase package have been removed from the project.

* Enable auto-redirect in HttpClient

The HttpClient instance used in Application/Main.cs has been modified to automatically follow redirect responses. This was accomplished by adding "AllowAutoRedirect = true" to the HttpClientHandler used when creating the HttpClient.

---------

Co-authored-by: Amos <amos2580@hotmail.co.uk>
This commit is contained in:
RaidMax
2024-06-22 10:19:06 -05:00
committed by GitHub
parent 1f82596582
commit 34af7a332c
38 changed files with 558 additions and 432 deletions

View File

@ -1,5 +1,5 @@
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Text.Json.Serialization;
using SharedLibraryCore.Helpers;
namespace IW4MAdmin.Application.API.Master
@ -12,32 +12,32 @@ namespace IW4MAdmin.Application.API.Master
/// <summary>
/// Unique ID of the instance
/// </summary>
[JsonProperty("id")]
[JsonPropertyName("id")]
public string Id { get; set; }
/// <summary>
/// Indicates how long the instance has been running
/// </summary>
[JsonProperty("uptime")]
[JsonPropertyName("uptime")]
public int Uptime { get; set; }
/// <summary>
/// Specifies the version of the instance
/// </summary>
[JsonProperty("version")]
[JsonPropertyName("version")]
[JsonConverter(typeof(BuildNumberJsonConverter))]
public BuildNumber Version { get; set; }
/// <summary>
/// List of servers the instance is monitoring
/// </summary>
[JsonProperty("servers")]
[JsonPropertyName("servers")]
public List<ApiServer> Servers { get; set; }
/// <summary>
/// Url IW4MAdmin is listening on
/// </summary>
[JsonProperty("webfront_url")]
[JsonPropertyName("webfront_url")]
public string WebfrontUrl { get; set; }
}
}

View File

@ -1,31 +1,28 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json.Serialization;
namespace IW4MAdmin.Application.API.Master
{
public class ApiServer
{
[JsonProperty("id")]
[JsonPropertyName("id")]
public long Id { get; set; }
[JsonProperty("ip")]
[JsonPropertyName("ip")]
public string IPAddress { get; set; }
[JsonProperty("port")]
[JsonPropertyName("port")]
public short Port { get; set; }
[JsonProperty("version")]
[JsonPropertyName("version")]
public string Version { get; set; }
[JsonProperty("gametype")]
[JsonPropertyName("gametype")]
public string Gametype { get; set; }
[JsonProperty("map")]
[JsonPropertyName("map")]
public string Map { get; set; }
[JsonProperty("game")]
[JsonPropertyName("game")]
public string Game { get; set; }
[JsonProperty("hostname")]
[JsonPropertyName("hostname")]
public string Hostname { get; set; }
[JsonProperty("clientnum")]
[JsonPropertyName("clientnum")]
public int ClientNum { get; set; }
[JsonProperty("maxclientnum")]
[JsonPropertyName("maxclientnum")]
public int MaxClientNum { get; set; }
}
}

View File

@ -1,79 +1,70 @@
using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using IW4MAdmin.Application.Plugin;
using Newtonsoft.Json;
using RestEase;
using Refit;
using SharedLibraryCore.Helpers;
namespace IW4MAdmin.Application.API.Master
namespace IW4MAdmin.Application.API.Master;
public class AuthenticationId
{
public class AuthenticationId
{
[JsonProperty("id")]
public string Id { get; set; }
}
public class TokenId
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }
}
public class VersionInfo
{
[JsonProperty("current-version-stable")]
[JsonConverter(typeof(BuildNumberJsonConverter))]
public BuildNumber CurrentVersionStable { get; set; }
[JsonProperty("current-version-prerelease")]
[JsonConverter(typeof(BuildNumberJsonConverter))]
public BuildNumber CurrentVersionPrerelease { get; set; }
}
public class ResultMessage
{
[JsonProperty("message")]
public string Message { get; set; }
}
public class PluginSubscriptionContent
{
public string Content { get; set; }
public PluginType Type { get; set; }
}
/// <summary>
/// Defines the capabilities of the master API
/// </summary>
[Header("User-Agent", "IW4MAdmin-RestEase")]
public interface IMasterApi
{
[Header("Authorization")]
string AuthorizationToken { get; set; }
[Post("authenticate")]
Task<TokenId> Authenticate([Body] AuthenticationId Id);
[Post("instance/")]
[AllowAnyStatusCode]
Task<Response<ResultMessage>> AddInstance([Body] ApiInstance instance);
[Put("instance/{id}")]
[AllowAnyStatusCode]
Task<Response<ResultMessage>> UpdateInstance([Path] string id, [Body] ApiInstance instance);
[Get("version/{apiVersion}")]
Task<VersionInfo> GetVersion([Path] int apiVersion);
[Get("localization")]
Task<List<SharedLibraryCore.Localization.Layout>> GetLocalization();
[Get("localization/{languageTag}")]
Task<SharedLibraryCore.Localization.Layout> GetLocalization([Path("languageTag")] string languageTag);
[Get("plugin_subscriptions")]
Task<IEnumerable<PluginSubscriptionContent>> GetPluginSubscription([Query("instance_id")] Guid instanceId, [Query("subscription_id")] string subscription_id);
}
[JsonPropertyName("id")] public string Id { get; set; }
}
public class TokenId
{
[JsonPropertyName("access_token")] public string AccessToken { get; set; }
}
public class VersionInfo
{
[JsonPropertyName("current-version-stable")]
[JsonConverter(typeof(BuildNumberJsonConverter))]
public BuildNumber CurrentVersionStable { get; set; }
[JsonPropertyName("current-version-prerelease")]
[JsonConverter(typeof(BuildNumberJsonConverter))]
public BuildNumber CurrentVersionPrerelease { get; set; }
}
public class ResultMessage
{
[JsonPropertyName("message")] public string Message { get; set; }
}
public class PluginSubscriptionContent
{
public string Content { get; set; }
public PluginType Type { get; set; }
}
/// <summary>
/// Defines the capabilities of the master API
/// </summary>
[Headers("User-Agent: IW4MAdmin-RestEase")]
public interface IMasterApi
{
[Post("/authenticate")]
Task<TokenId> Authenticate([Body] AuthenticationId Id);
[Post("/instance/")]
Task<IApiResponse<ResultMessage>> AddInstance([Body] ApiInstance instance, [Header("Authorization")] string authorization);
[Put("/instance/{id}")]
Task<IApiResponse<ResultMessage>> UpdateInstance(string id, [Body] ApiInstance instance, [Header("Authorization")] string authorization);
[Get("/version/{apiVersion}")]
Task<VersionInfo> GetVersion(int apiVersion);
[Get("/localization")]
Task<List<SharedLibraryCore.Localization.Layout>> GetLocalization();
[Get("/localization/{languageTag}")]
Task<SharedLibraryCore.Localization.Layout> GetLocalization(string languageTag);
[Get("/plugin_subscriptions")]
Task<IEnumerable<PluginSubscriptionContent>> GetPluginSubscription([Query("instance_id")] Guid instanceId,
[Query("subscription_id")] string subscription_id);
}