SceneFactory.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System.Net;
  2. using System.Net.Sockets;
  3. namespace ET.Server
  4. {
  5. public static class SceneFactory
  6. {
  7. public static async ETTask<Scene> CreateServerScene(Entity parent, long id, long instanceId, int zone, string name, SceneType sceneType, StartSceneConfig startSceneConfig = null)
  8. {
  9. await ETTask.CompletedTask;
  10. Scene scene = EntitySceneFactory.CreateScene(id, instanceId, zone, sceneType, name, parent);
  11. scene.AddComponent<MailBoxComponent, MailboxType>(MailboxType.UnOrderMessageDispatcher);
  12. switch (scene.SceneType)
  13. {
  14. case SceneType.Router:
  15. // 云服务器中,一般来说router要单独部署,不过大家经常放在一起,那么下面要修改
  16. // startSceneConfig.OuterIPPort改成startSceneConfig.InnerIPOutPort
  17. // 然后云服务器防火墙把端口映射过来
  18. scene.AddComponent<RouterComponent, IPEndPoint, string, NetworkProtocol>(
  19. startSceneConfig.InnerIPOutPort,
  20. startSceneConfig.StartProcessConfig.InnerIP,
  21. NetworkProtocol.TCP
  22. );
  23. break;
  24. case SceneType.RouterManager: // 正式发布请用CDN代替RouterManager
  25. // 云服务器在防火墙那里做端口映射
  26. scene.AddComponent<HttpComponent, string>($"http://+:{startSceneConfig.OuterPort}/");
  27. break;
  28. case SceneType.Realm:
  29. scene.AddComponent<NetServerComponent, IPEndPoint, NetworkProtocol>(startSceneConfig.InnerIPOutPort, NetworkProtocol.KCP);
  30. scene.AddComponent<UserSessionComponent>();
  31. break;
  32. case SceneType.Game:
  33. ConstGame.GameServerId = startSceneConfig.Id;
  34. ConstGame.GameServerUUID = System.Guid.NewGuid().ToString();
  35. scene.AddComponent<NetServerComponent, IPEndPoint, NetworkProtocol>(startSceneConfig.InnerIPOutPort, NetworkProtocol.KCP);
  36. scene.AddComponent<GameTokenInfoComponent>();
  37. scene.AddComponent<GamePlayerComponent>();
  38. scene.AddComponent<GameMapComponent>();
  39. // 战斗服的Ice会话组件
  40. scene.AddComponent<BattleIceAgentComponent>();
  41. scene.AddComponent<ObjectWait>();
  42. // 抖音AccessToken组件
  43. if (Options.Instance.InitAccessToken == 1)
  44. {
  45. scene.AddComponent<GameDouyinComponent>();
  46. }
  47. break;
  48. case SceneType.Location:
  49. scene.AddComponent<LocationComponent>();
  50. break;
  51. case SceneType.Robot:
  52. scene.AddComponent<RobotManagerComponent>();
  53. break;
  54. case SceneType.BenchmarkServer:
  55. scene.AddComponent<BenchmarkServerComponent>();
  56. scene.AddComponent<NetServerComponent, IPEndPoint, NetworkProtocol>(startSceneConfig.InnerIPOutPort, NetworkProtocol.KCP);
  57. break;
  58. case SceneType.BenchmarkClient:
  59. scene.AddComponent<BenchmarkClientComponent>();
  60. break;
  61. }
  62. return scene;
  63. }
  64. }
  65. }