using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using TOOHUCardAPI.Data; namespace TOOHUCardAPI.Controllers { [Route("api/[controller]")] [ApiController] public class PlayerDataController : ControllerBase { private delegate Task EndpointHandler(string requestBody); // Mapping of method => handler private Dictionary registeredEndpointHandlers; private void RegisterEndpointHandlers() { MethodInfo[] methods = typeof(PlayerDataController).GetMethods(); registeredEndpointHandlers = methods .Aggregate(new Dictionary(), (handlers, m) => { Attribute attr = m.GetCustomAttribute(typeof(EndpointHandlerAttribute), false); if (attr != null) { EndpointHandlerAttribute e = (EndpointHandlerAttribute) attr; handlers.Add(e.Method, (EndpointHandler)m.CreateDelegate(typeof(EndpointHandler), this)); } return handlers; }); } public PlayerDataController() { RegisterEndpointHandlers(); } /** * The game uses a single endpoint for player data. * The object they send has a method field that's used to decide what's being done * So let's use a single entry point and redirect based on that */ [HttpPost] public async Task EntryPoint() { return null; } } }