HubController.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using Microsoft.AspNetCore.Mvc;
  2. using static CompServ.CompServConst;
  3. namespace CompServ.Hub
  4. {
  5. [ApiController]
  6. public class HubController(HubWorkerHolder hubWorkerHolder) : ControllerBase
  7. {
  8. [HttpGet]
  9. [Route(ApiPathHubRootForCheckAlive)]
  10. public ActionResult CheckAlive() => Content(AliveMessageHub);
  11. [HttpPost]
  12. [Route(ApiPathHubRegisterWorker)]
  13. public async Task<ActionResult> Register()
  14. {
  15. var wr = HttpContext.Request.ExtractWorkerRegister();
  16. if (wr.port == null || wr.ratio == null) return StatusCode(400, "missing required header");
  17. var url = $"http://{Request.HttpContext.Connection.RemoteIpAddress}:{wr.port}";
  18. hubWorkerHolder.RegisterWorker(url, wr.ratio.Value);
  19. return Empty;
  20. }
  21. [HttpPost]
  22. [Route(ApiPathHubUnRegisterWorker)]
  23. public async Task<ActionResult> UnRegister()
  24. {
  25. var wr = HttpContext.Request.ExtractWorkerRegister();
  26. if (wr.port == null) return StatusCode(400, "missing required header");
  27. var url = $"http://{Request.HttpContext.Connection.RemoteIpAddress}:{wr.port}";
  28. hubWorkerHolder.UnRegisterWorker(url);
  29. return Empty;
  30. }
  31. [HttpGet]
  32. [Route(ApiPathHubGetWorker)]
  33. public async Task<ActionResult> GetWorker()
  34. {
  35. var url = await hubWorkerHolder.GetWorkerAsync();
  36. return Content(url);
  37. }
  38. }
  39. }