HttpGetRouterHandler.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Net;
  4. using System.Text;
  5. namespace ET.Server
  6. {
  7. [HttpHandler(SceneType.RouterManager, "/get_router")]
  8. public class HttpGetRouterHandler : IHttpHandler
  9. {
  10. public async ETTask Handle(Scene scene, HttpListenerContext context)
  11. {
  12. HttpGetRouterResponse httpGetRouterResponse = HttpGetRouterResponse.Create();
  13. List<StartSceneConfig> realms = StartSceneConfigCategory.Instance.GetBySceneType(SceneType.Realm);
  14. foreach (StartSceneConfig startSceneConfig in realms)
  15. {
  16. // 这里是要用InnerIP,因为云服务器上realm绑定不了OuterIP的,所以realm的内网外网的socket都是监听内网地址
  17. httpGetRouterResponse.Realms.Add(startSceneConfig.InnerIPPort.ToString());
  18. }
  19. foreach (StartSceneConfig startSceneConfig in StartSceneConfigCategory.Instance.GetBySceneType(SceneType.Router))
  20. {
  21. httpGetRouterResponse.Routers.Add($"{startSceneConfig.StartProcessConfig.OuterIP}:{startSceneConfig.Port}");
  22. }
  23. HttpListenerRequest request = context.Request;
  24. using HttpListenerResponse response = context.Response;
  25. if (request.HttpMethod == "OPTIONS")
  26. {
  27. response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");
  28. response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
  29. response.AddHeader("Access-Control-Max-Age", "1728000");
  30. }
  31. response.AppendHeader("Access-Control-Allow-Origin", "*");
  32. byte[] bytes = MongoHelper.ToJson(httpGetRouterResponse).ToUtf8();
  33. response.StatusCode = 200;
  34. response.ContentEncoding = Encoding.UTF8;
  35. response.ContentLength64 = bytes.Length;
  36. await response.OutputStream.WriteAsync(bytes, 0, bytes.Length);
  37. await scene.Root().GetComponent<TimerComponent>().WaitAsync(1000);
  38. }
  39. }
  40. }