From 7b73d23b9e68436cef7d5e85ae27d4b1fbd8adfa Mon Sep 17 00:00:00 2001 From: littlefoot Date: Tue, 26 Oct 2021 00:26:52 -0400 Subject: [PATCH] Player data initial --- .../Controllers/MethodBasedController.cs | 16 +++++-- .../Controllers/PlayerDataController.cs | 27 +++++++---- TOOHUCardAPI/Data/CardEncodingUtil.cs | 6 +++ TOOHUCardAPI/Models/GameConfigResponse.cs | 20 ++++---- .../Models/PlayerDataRequestObjects.cs | 2 +- .../Models/PlayerDataResponseObjects.cs | 46 +++++++++++++------ TOOHUCardAPI/Startup.cs | 2 +- TOOHUCardAPI/TOOHUCardAPI.csproj | 1 + 8 files changed, 80 insertions(+), 40 deletions(-) create mode 100644 TOOHUCardAPI/Data/CardEncodingUtil.cs diff --git a/TOOHUCardAPI/Controllers/MethodBasedController.cs b/TOOHUCardAPI/Controllers/MethodBasedController.cs index ec6e67a..4d53d11 100644 --- a/TOOHUCardAPI/Controllers/MethodBasedController.cs +++ b/TOOHUCardAPI/Controllers/MethodBasedController.cs @@ -12,7 +12,7 @@ namespace TOOHUCardAPI.Controllers public class MethodBasedController : ControllerBase { public delegate Task EndpointHandler(string requestBody); - private static Dictionary MethodMapByType; + private static Dictionary MethodMapByType = new Dictionary(); protected Task InvokeEndpointHandlerForMethod(object _this, string method, string body) { @@ -20,7 +20,7 @@ namespace TOOHUCardAPI.Controllers if (registeredEndpointHandlers.ContainsKey(method)) { return ((EndpointHandler) registeredEndpointHandlers[method] - .CreateDelegate(typeof(EndpointHandler), _this)).Invoke(body); + .CreateDelegate(typeof(EndpointHandler), _this))(body); } throw new MissingEndpointHandlerException(method); } @@ -29,15 +29,14 @@ namespace TOOHUCardAPI.Controllers { if (!MethodMapByType.ContainsKey(typeof(T))) { - RegisterEndpointHandlers(); + MethodMapByType[typeof(T)] = RegisterEndpointHandlers(); } - return MethodMapByType[typeof(T)]; } private static MethodMap RegisterEndpointHandlers() { - MethodInfo[] methods = typeof(T).GetMethods(); + MethodInfo[] methods = typeof(T).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance); return methods .Aggregate(new MethodMap(), (handlers, m) => { @@ -51,4 +50,11 @@ namespace TOOHUCardAPI.Controllers }); } } + + public class MissingEndpointHandlerException : Exception + { + public MissingEndpointHandlerException(string method) : base($"Handler for [{method}] is either missing or incorrectly setup.") + { + } + } } \ No newline at end of file diff --git a/TOOHUCardAPI/Controllers/PlayerDataController.cs b/TOOHUCardAPI/Controllers/PlayerDataController.cs index 8986c0a..099e7e6 100644 --- a/TOOHUCardAPI/Controllers/PlayerDataController.cs +++ b/TOOHUCardAPI/Controllers/PlayerDataController.cs @@ -1,10 +1,14 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Net.Http; using System.Reflection; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using TOOHUCardAPI.Data; using TOOHUCardAPI.Models; @@ -20,17 +24,22 @@ namespace TOOHUCardAPI.Controllers * So let's use a single entry point and redirect based on that */ [HttpPost] - public async Task EntryPoint(IMethodBasedRequest methodRequest) + public async Task EntryPoint([FromBody] object bodyObj) { - return null; + string body = JsonConvert.SerializeObject(bodyObj); + JObject request = JObject.Parse(body); + string method = request["method"].ToString(); + return await InvokeEndpointHandlerForMethod(this, method, body); + } + + [EndpointHandler("get")] + private async Task Test(string body) + { + PlayerDataGetRequestObject requestObject = JsonConvert.DeserializeObject(body); + PlayerDataGetResponseObject response = new PlayerDataGetResponseObject(requestObject.Ids.Length); + + return response; } } - - public class MissingEndpointHandlerException : Exception - { - public MissingEndpointHandlerException(string? method) : base($"Handler for [{method}] is either missing or incorrectly setup.") - { - } - } } \ No newline at end of file diff --git a/TOOHUCardAPI/Data/CardEncodingUtil.cs b/TOOHUCardAPI/Data/CardEncodingUtil.cs new file mode 100644 index 0000000..1e8a561 --- /dev/null +++ b/TOOHUCardAPI/Data/CardEncodingUtil.cs @@ -0,0 +1,6 @@ +namespace TOOHUCardAPI.Data +{ + public static class CardEncodingUtil + { + } +} \ No newline at end of file diff --git a/TOOHUCardAPI/Models/GameConfigResponse.cs b/TOOHUCardAPI/Models/GameConfigResponse.cs index 2568cbb..489ab99 100644 --- a/TOOHUCardAPI/Models/GameConfigResponse.cs +++ b/TOOHUCardAPI/Models/GameConfigResponse.cs @@ -19,16 +19,16 @@ namespace TOOHUCardAPI.Models public class GameConfigResponse { private static string SUCCESS_CODE = "0000"; - [JsonPropertyName("code")] public string Code { get; set; } = SUCCESS_CODE; - [JsonPropertyName("msg")] public string Message { get; set; } = string.Empty; - [JsonPropertyName("game_code")] public string GameCode { get; set; } = string.Empty; - [JsonPropertyName("game_msg")] public string GameMessage { get; set; } = string.Empty; - [JsonPropertyName("luck_card")] public string LuckCard { get; set; } = string.Empty; - [JsonPropertyName("luck_crit")] public float LuckCrit { get; set; } - [JsonPropertyName("new_card_list")] public string NewCardList { get; set; } = string.Empty; - [JsonPropertyName("open_day_list")] public string OpenDayList { get; set; } = String.Empty; - [JsonPropertyName("is_open_day")] public int IsOpenDay { get; set; } - [JsonPropertyName("server_time")] public string ServerTime { get; set; } = string.Empty; + [JsonProperty("code")] public string Code { get; set; } = SUCCESS_CODE; + [JsonProperty("msg")] public string Message { get; set; } = string.Empty; + [JsonProperty("game_code")] public string GameCode { get; set; } = string.Empty; + [JsonProperty("game_msg")] public string GameMessage { get; set; } = string.Empty; + [JsonProperty("luck_card")] public string LuckCard { get; set; } = string.Empty; + [JsonProperty("luck_crit")] public float LuckCrit { get; set; } + [JsonProperty("new_card_list")] public string NewCardList { get; set; } = string.Empty; + [JsonProperty("open_day_list")] public string OpenDayList { get; set; } = String.Empty; + [JsonProperty("is_open_day")] public int IsOpenDay { get; set; } + [JsonProperty("server_time")] public string ServerTime { get; set; } = string.Empty; } } \ No newline at end of file diff --git a/TOOHUCardAPI/Models/PlayerDataRequestObjects.cs b/TOOHUCardAPI/Models/PlayerDataRequestObjects.cs index 2213af6..38377db 100644 --- a/TOOHUCardAPI/Models/PlayerDataRequestObjects.cs +++ b/TOOHUCardAPI/Models/PlayerDataRequestObjects.cs @@ -1,6 +1,6 @@ namespace TOOHUCardAPI.Models { - public class PlayerDataRequestObject + public class PlayerDataGetRequestObject { public string Method { get; set; } public string[] Ids { get; set; } diff --git a/TOOHUCardAPI/Models/PlayerDataResponseObjects.cs b/TOOHUCardAPI/Models/PlayerDataResponseObjects.cs index 85cf95a..3a85732 100644 --- a/TOOHUCardAPI/Models/PlayerDataResponseObjects.cs +++ b/TOOHUCardAPI/Models/PlayerDataResponseObjects.cs @@ -1,23 +1,41 @@ +using System.Collections.Generic; +using System.Linq; +using Newtonsoft.Json; + namespace TOOHUCardAPI.Models { + public class PlayerDataGetResponseObject + { + public Dictionary bo { get; set; } + + public PlayerDataGetResponseObject(int players) + { + this.bo = new Dictionary(); + foreach (int i in Enumerable.Range(0, players)) + { + bo[i] = new PlayerDataGetResponseObjectPlayer(); + } + } + } /** * Fields pulled from the game code * Looking up Gamerules.Playerdata */ - public class PlayerDataGetResponseObject + public class PlayerDataGetResponseObjectPlayer { - - public string Code { get; set; } - public string Message { get; set; } - public string SteamId { get; set; } - public int MaxWave { get; set; } - public int MaxTeamWave { get; set; } - public int PetLevel { get; set; } - public string EndTime { get; set; } - public int KeyTotal { get; set; } - public string KeySaveDate { get; set; } - public int Vip { get; set; } - public int Point { get; set; } - public string LevelList { get; set; } + [JsonProperty("code")] public string Code { get; set; } = "0000"; + + [JsonProperty("msg")] public string Message { get; set; } = string.Empty; + //[JsonProperty("steamid")] + //public string SteamId { get; set; } + [JsonProperty("max_wave")] public int MaxWave { get; set; } = 0; + [JsonProperty("max_team_wave")] public int MaxTeamWave { get; set; } = 0; + [JsonProperty("pet_level")] public int PetLevel { get; set; } = 1; + [JsonProperty("end_time")] public string EndTime { get; set; } = string.Empty; + [JsonProperty("key_total")] public int KeyTotal { get; set; } = 100; + [JsonProperty("key_save_date")] public string KeySaveDate { get; set; } = string.Empty; + [JsonProperty("vip")] public int Vip { get; set; } = 1; + [JsonProperty("point")] public int Point { get; set; } = 10000; + [JsonProperty("level_list")] public string LevelList { get; set; } = string.Empty; } } \ No newline at end of file diff --git a/TOOHUCardAPI/Startup.cs b/TOOHUCardAPI/Startup.cs index f2ee54e..34a64c7 100644 --- a/TOOHUCardAPI/Startup.cs +++ b/TOOHUCardAPI/Startup.cs @@ -26,7 +26,7 @@ namespace TOOHUCardAPI // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { - services.AddControllers(); + services.AddControllers().AddNewtonsoftJson(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo {Title = "TOOHUCardAPI", Version = "v1"}); diff --git a/TOOHUCardAPI/TOOHUCardAPI.csproj b/TOOHUCardAPI/TOOHUCardAPI.csproj index 76e4201..d0246d9 100644 --- a/TOOHUCardAPI/TOOHUCardAPI.csproj +++ b/TOOHUCardAPI/TOOHUCardAPI.csproj @@ -6,6 +6,7 @@ +