Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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>();
            }
        }
Esempio n. 3
0
        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>();
            }
        }
Esempio n. 4
0
        protected override async ETTask Run(Session session, C2G_EnterMap request, G2C_EnterMap response, Action reply)
        {
            Player player = session.GetComponent <SessionPlayerComponent>().GetMyPlayer();

            // 在Gate上动态创建一个Map Scene,把Unit从DB中加载放进来,然后传送到真正的Map中,这样登陆跟传送的逻辑就完全一样了
            GateMapComponent gateMapComponent = player.AddComponent <GateMapComponent>();

            gateMapComponent.Scene = await SceneFactory.Create(gateMapComponent, "GateMap", SceneType.Map);

            Scene scene = gateMapComponent.Scene;

            // 这里可以从DB中加载Unit
            Unit unit = UnitFactory.Create(scene, player.Id, UnitType.Player);

            unit.AddComponent <UnitGateComponent, long>(session.InstanceId);

            StartSceneConfig startSceneConfig = StartSceneConfigCategory.Instance.GetBySceneName(session.DomainZone(), "Map1");

            response.MyId = player.Id;
            reply();

            // 开始传送
            await TransferHelper.Transfer(unit, startSceneConfig.InstanceId, startSceneConfig.Name);
        }
Esempio n. 5
0
        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>();
            }
        }