AppStart_Init.cs 3.9 KB

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