AppStart_Init.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System;
  2. using System.Net;
  3. namespace ET
  4. {
  5. public class AppStart_Init: AEvent<EventType.AppStart>
  6. {
  7. protected override async ETTask Run(EventType.AppStart args)
  8. {
  9. switch (Game.Options.AppType)
  10. {
  11. case AppType.ExcelExporter:
  12. {
  13. Game.Options.Console = 1;
  14. try
  15. {
  16. ExcelExporter.Export();
  17. }
  18. catch (Exception e)
  19. {
  20. Log.Console(e.ToString());
  21. System.Environment.Exit(1);
  22. }
  23. System.Environment.Exit(0);
  24. return;
  25. }
  26. case AppType.Proto2CS:
  27. {
  28. Game.Options.Console = 1;
  29. try
  30. {
  31. Proto2CS.Export();
  32. }
  33. catch (Exception e)
  34. {
  35. Log.Console(e.ToString());
  36. System.Environment.Exit(1);
  37. }
  38. System.Environment.Exit(0);
  39. return;
  40. }
  41. }
  42. Game.Scene.AddComponent<ConfigComponent>();
  43. await ConfigComponent.Instance.LoadAsync();
  44. StartProcessConfig processConfig = StartProcessConfigCategory.Instance.Get(Game.Options.Process);
  45. Game.Scene.AddComponent<TimerComponent>();
  46. Game.Scene.AddComponent<OpcodeTypeComponent>();
  47. Game.Scene.AddComponent<MessageDispatcherComponent>();
  48. Game.Scene.AddComponent<SessionStreamDispatcher>();
  49. Game.Scene.AddComponent<CoroutineLockComponent>();
  50. // 发送普通actor消息
  51. Game.Scene.AddComponent<ActorMessageSenderComponent>();
  52. // 发送location actor消息
  53. Game.Scene.AddComponent<ActorLocationSenderComponent>();
  54. // 访问location server的组件
  55. Game.Scene.AddComponent<LocationProxyComponent>();
  56. Game.Scene.AddComponent<ActorMessageDispatcherComponent>();
  57. // 数值订阅组件
  58. Game.Scene.AddComponent<NumericWatcherComponent>();
  59. Game.Scene.AddComponent<NetThreadComponent>();
  60. switch (Game.Options.AppType)
  61. {
  62. case AppType.Server:
  63. {
  64. Game.Scene.AddComponent<NetInnerComponent, IPEndPoint, int>(processConfig.InnerIPPort, SessionStreamDispatcherType.SessionStreamDispatcherServerInner);
  65. var processScenes = StartSceneConfigCategory.Instance.GetByProcess(Game.Options.Process);
  66. foreach (StartSceneConfig startConfig in processScenes)
  67. {
  68. await SceneFactory.Create(Game.Scene, startConfig.Id, startConfig.InstanceId, startConfig.Zone, startConfig.Name,
  69. startConfig.Type, startConfig);
  70. }
  71. break;
  72. }
  73. case AppType.Watcher:
  74. {
  75. StartMachineConfig startMachineConfig = WatcherHelper.GetThisMachineConfig();
  76. WatcherComponent watcherComponent = Game.Scene.AddComponent<WatcherComponent>();
  77. watcherComponent.Start(Game.Options.CreateScenes);
  78. Game.Scene.AddComponent<NetInnerComponent, IPEndPoint, int>(NetworkHelper.ToIPEndPoint($"{startMachineConfig.InnerIP}:{startMachineConfig.WatcherPort}"), SessionStreamDispatcherType.SessionStreamDispatcherServerInner);
  79. break;
  80. }
  81. case AppType.GameTool:
  82. break;
  83. }
  84. if (Game.Options.Console == 1)
  85. {
  86. Game.Scene.AddComponent<ConsoleComponent>();
  87. }
  88. }
  89. }
  90. }