public override async ETTask Run(EventType.AppStart args) { Game.Scene.AddComponent <ConfigComponent>(); StartProcessConfig processConfig = StartProcessConfigCategory.Instance.Get(Game.Options.Process); Game.Scene.AddComponent <TimerComponent>(); Game.Scene.AddComponent <OpcodeTypeComponent>(); Game.Scene.AddComponent <MessageDispatcherComponent>(); Game.Scene.AddComponent <CoroutineLockComponent>(); // 发送普通actor消息 Game.Scene.AddComponent <ActorMessageSenderComponent>(); // 发送location actor消息 Game.Scene.AddComponent <ActorLocationSenderComponent>(); // 访问location server的组件 Game.Scene.AddComponent <LocationProxyComponent>(); Game.Scene.AddComponent <ActorMessageDispatcherComponent>(); // 数值订阅组件 Game.Scene.AddComponent <NumericWatcherComponent>(); Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(processConfig.InnerIPPort); var processScenes = StartSceneConfigCategory.Instance.GetByProcess(Game.Options.Process); foreach (StartSceneConfig startConfig in processScenes) { await SceneFactory.Create(Game.Scene, startConfig.SceneId, startConfig.Zone, startConfig.Name, startConfig.Type, startConfig); } }
protected override async ETTask Run(EventType.AppStart args) { Game.Scene.AddComponent <ConfigComponent>(); await ConfigComponent.Instance.LoadAsync(); StartProcessConfig processConfig = StartProcessConfigCategory.Instance.Get(Game.Options.Process); Game.Scene.AddComponent <TimerComponent>(); Game.Scene.AddComponent <OpcodeTypeComponent>(); Game.Scene.AddComponent <MessageDispatcherComponent>(); Game.Scene.AddComponent <SessionStreamDispatcher>(); Game.Scene.AddComponent <CoroutineLockComponent>(); // 发送普通actor消息 Game.Scene.AddComponent <ActorMessageSenderComponent>(); // 发送location actor消息 Game.Scene.AddComponent <ActorLocationSenderComponent>(); // 访问location server的组件 Game.Scene.AddComponent <LocationProxyComponent>(); Game.Scene.AddComponent <ActorMessageDispatcherComponent>(); // 数值订阅组件 Game.Scene.AddComponent <NumericWatcherComponent>(); Game.Scene.AddComponent <NetThreadComponent>(); Game.Scene.AddComponent <NavmeshComponent, Func <string, byte[]> >(RecastFileReader.Read); switch (Game.Options.AppType) { case AppType.Server: { Game.Scene.AddComponent <NetInnerComponent, IPEndPoint, int>(processConfig.InnerIPPort, SessionStreamDispatcherType.SessionStreamDispatcherServerInner); var processScenes = StartSceneConfigCategory.Instance.GetByProcess(Game.Options.Process); foreach (StartSceneConfig startConfig in processScenes) { await SceneFactory.Create(Game.Scene, startConfig.Id, startConfig.InstanceId, startConfig.Zone, startConfig.Name, startConfig.Type, startConfig); } break; } case AppType.Watcher: { StartMachineConfig startMachineConfig = WatcherHelper.GetThisMachineConfig(); WatcherComponent watcherComponent = Game.Scene.AddComponent <WatcherComponent>(); watcherComponent.Start(Game.Options.CreateScenes); Game.Scene.AddComponent <NetInnerComponent, IPEndPoint, int>(NetworkHelper.ToIPEndPoint($"{startMachineConfig.InnerIP}:{startMachineConfig.WatcherPort}"), SessionStreamDispatcherType.SessionStreamDispatcherServerInner); break; } case AppType.GameTool: break; } if (Game.Options.Console == 1) { Game.Scene.AddComponent <ConsoleComponent>(); } }
public override void EndInit() { for (int i = 0; i < list.Count; i++) { StartProcessConfig config = list[i]; config.EndInit(); this.dict.Add(config.Id, config); } this.AfterEndInit(); }
protected override async ETTask Run(EventType.AppStart args) { Game.Scene.AddComponent <ConfigComponent>(); ConfigComponent.GetAllConfigBytes = LoadConfigHelper.GetAllConfigBytes; ConfigComponent.GetOneConfigBytes = LoadConfigHelper.GetOneConfigBytes; await ConfigComponent.Instance.LoadAsync(); StartProcessConfig processConfig = StartProcessConfigCategory.Instance.Get(Game.Options.Process); Game.Scene.AddComponent <TimerComponent>(); Game.Scene.AddComponent <OpcodeTypeComponent>(); Game.Scene.AddComponent <MessageDispatcherComponent>(); Game.Scene.AddComponent <CoroutineLockComponent>(); // 发送普通actor消息 Game.Scene.AddComponent <ActorMessageSenderComponent>(); // 发送location actor消息 Game.Scene.AddComponent <ActorLocationSenderComponent>(); // 访问location server的组件 Game.Scene.AddComponent <LocationProxyComponent>(); Game.Scene.AddComponent <ActorMessageDispatcherComponent>(); // 数值订阅组件 Game.Scene.AddComponent <NumericWatcherComponent>(); Game.Scene.AddComponent <NetThreadComponent>(); Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(processConfig.InnerIPPort); var processScenes = StartSceneConfigCategory.Instance.GetByProcess(Game.Options.Process); foreach (StartSceneConfig startConfig in processScenes) { await SceneFactory.Create(Game.Scene, startConfig.InstanceId, startConfig.Zone, startConfig.Name, startConfig.Type, startConfig); } switch (Game.Options.AppType) { case AppType.Server: break; case AppType.Watcher: break; } if (Game.Options.Console == 1) { Game.Scene.AddComponent <ConsoleComponent>(); } }
public static Process StartProcess(int processId, int createScenes = 0) { StartProcessConfig startProcessConfig = StartProcessConfigCategory.Instance.Get(processId); const string exe = "dotnet"; string arguments = $"{startProcessConfig.AppName}.dll" + $" --Process={startProcessConfig.Id}" + $" --AppType={startProcessConfig.AppName}" + $" --Develop={Game.Options.Develop}" + $" --CreateScenes={createScenes}" + $" --LogLevel={Game.Options.LogLevel}"; Log.Debug($"{exe} {arguments}"); Process process = ProcessHelper.Run(exe, arguments); return(process); }
protected override async ETTask Run(EventType.AppStart args) { Game.Scene.AddComponent <ConfigComponent>(); await ConfigComponent.Instance.LoadAsync(); //读取StartProcessConfig中id为Game.Options.Process(这里值为1)的整行配置 //ET6.0由于使用了protobuffer作为导表工具,所以请去Excel文件夹查看原数据 StartProcessConfig processConfig = StartProcessConfigCategory.Instance.Get(GlobalDefine.Options.Process); Game.Scene.AddComponent <TimerComponent>(); Game.Scene.AddComponent <OpcodeTypeComponent>(); Game.Scene.AddComponent <MessageDispatcherComponent>(); Game.Scene.AddComponent <CoroutineLockComponent>(); // 发送普通actor消息 Game.Scene.AddComponent <ActorMessageSenderComponent>(); // 发送location actor消息 Game.Scene.AddComponent <ActorLocationSenderComponent>(); // 访问location server的组件 Game.Scene.AddComponent <LocationProxyComponent>(); Game.Scene.AddComponent <ActorMessageDispatcherComponent>(); // 数值订阅组件 Game.Scene.AddComponent <NumericWatcherComponent>(); Game.Scene.AddComponent <NetThreadComponent>(); //根据自身的类型来决定要添加的组件 switch (GlobalDefine.Options.AppType) { case AppType.Server: { //是一个Sever就添加一个内网组件,用于内网通信 Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(processConfig.InnerIPPort); //以GloabDefine.Options.Process为凭证获取自己要添加的Scene //注意在StartSceneConfig.xlsx中有两份配置,第一份是给Server用的,第二份是给Robot用的 List <StartSceneConfig> processScenes = StartSceneConfigCategory.Instance.GetByProcess(GlobalDefine.Options.Process); foreach (StartSceneConfig startConfig in processScenes) { await SceneFactory.Create(Game.Scene, startConfig.Id, startConfig.InstanceId, startConfig.Zone, startConfig.Name, startConfig.Type, startConfig); } break; } case AppType.Watcher: { //是一个守护进程就额外添加一个WatcherComponent,守护进程可以用来负责拉起和管理全部的进程 StartMachineConfig startMachineConfig = WatcherHelper.GetThisMachineConfig(); WatcherComponent watcherComponent = Game.Scene.AddComponent <WatcherComponent>(); watcherComponent.Start(GlobalDefine.Options.CreateScenes); Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(NetworkHelper.ToIPEndPoint($"{startMachineConfig.InnerIP}:{startMachineConfig.WatcherPort}")); break; } case AppType.GameTool: break; } if (GlobalDefine.Options.Console == 1) { Game.Scene.AddComponent <ConsoleComponent>(); } }