AppStart_Init.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using System.Net;
  3. namespace ET.Server
  4. {
  5. [Event(SceneType.Process)]
  6. public class AppStart_Init: AEvent<Scene, ET.EventType.AppStart>
  7. {
  8. protected override async ETTask Run(Scene scene, ET.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<CoroutineLockComponent>();
  17. // 发送普通actor消息
  18. Game.Scene.AddComponent<ActorMessageSenderComponent>();
  19. // 发送location actor消息
  20. Game.Scene.AddComponent<ActorLocationSenderComponent>();
  21. // 访问location server的组件
  22. Game.Scene.AddComponent<LocationProxyComponent>();
  23. Game.Scene.AddComponent<ActorMessageDispatcherComponent>();
  24. // 数值订阅组件
  25. Game.Scene.AddComponent<NumericWatcherComponent>();
  26. Game.Scene.AddComponent<AIDispatcherComponent>();
  27. #region 机器人使用
  28. Game.Scene.AddComponent<ClientSceneManagerComponent>();
  29. Game.Scene.AddComponent<RobotCaseDispatcherComponent>();
  30. Game.Scene.AddComponent<RobotCaseComponent>();
  31. #endregion
  32. Game.Scene.AddComponent<NetThreadComponent>();
  33. Game.Scene.AddComponent<NavmeshComponent, Func<string, byte[]>>(Server.RecastFileReader.Read);
  34. switch (Game.Options.AppType)
  35. {
  36. case AppType.Server:
  37. {
  38. Game.Scene.AddComponent<NetInnerComponent, IPEndPoint, int>(processConfig.InnerIPPort, SessionStreamDispatcherType.SessionStreamDispatcherServerInner);
  39. var processScenes = StartSceneConfigCategory.Instance.GetByProcess(Game.Options.Process);
  40. foreach (StartSceneConfig startConfig in processScenes)
  41. {
  42. await Server.SceneFactory.Create(Game.Scene, startConfig.Id, startConfig.InstanceId, startConfig.Zone, startConfig.Name,
  43. startConfig.Type, startConfig);
  44. }
  45. break;
  46. }
  47. case AppType.Watcher:
  48. {
  49. StartMachineConfig startMachineConfig = WatcherHelper.GetThisMachineConfig();
  50. WatcherComponent watcherComponent = Game.Scene.AddComponent<WatcherComponent>();
  51. watcherComponent.Start(Game.Options.CreateScenes);
  52. Game.Scene.AddComponent<NetInnerComponent, IPEndPoint, int>(NetworkHelper.ToIPEndPoint($"{startMachineConfig.InnerIP}:{startMachineConfig.WatcherPort}"), SessionStreamDispatcherType.SessionStreamDispatcherServerInner);
  53. break;
  54. }
  55. case AppType.GameTool:
  56. break;
  57. }
  58. if (Game.Options.Console == 1)
  59. {
  60. Game.Scene.AddComponent<ConsoleComponent>();
  61. }
  62. }
  63. }
  64. }