HubController.cs 1.8 KB

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