55 lines
1.8 KiB
C#
55 lines
1.8 KiB
C#
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<object> EndpointHandler(string requestBody);
|
|
// Mapping of method => handler
|
|
private Dictionary<string, EndpointHandler> registeredEndpointHandlers;
|
|
|
|
private void RegisterEndpointHandlers()
|
|
{
|
|
MethodInfo[] methods = typeof(PlayerDataController).GetMethods();
|
|
registeredEndpointHandlers = methods
|
|
.Aggregate(new Dictionary<string, EndpointHandler>(), (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<object> EntryPoint()
|
|
{
|
|
|
|
return null;
|
|
}
|
|
|
|
}
|
|
} |