Exemplo n.º 1
0
        public static void Main()
        {
            //let async functions call in this thread
            OneThreadSynchronizationContext contex = new OneThreadSynchronizationContext();

            SynchronizationContext.SetSynchronizationContext(contex);
            Debug.Log("Main start");
            Utils.StartServices();
            try {
                DoAwake();
                while (true)
                {
                    try {
                        Thread.Sleep(3);
                        contex.Update();
                        server.Update();
                    }
                    catch (ThreadAbortException e) {
                        return;
                    }
                    catch (Exception e) {
                        Log.Error(e.ToString());
                    }
                }
            }
            catch (ThreadAbortException e) {
                return;
            }
            catch (Exception e) {
                Log.Error(e.ToString());
            }
        }
        public async Task <WrappedResponse <GetBlindRoomListResponseVm> > GetBlindRoomList([FromHeader] long id)
        {
            var response = await OneThreadSynchronizationContext
                           .UserRequest(id, _service.GetBlindRoomList);

            return(response);
        }
Exemplo n.º 3
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();

            // 异步方法全部会回掉到主线程:KNet必须单线程!
            OneThreadSynchronizationContext contex = new OneThreadSynchronizationContext();

            SynchronizationContext.SetSynchronizationContext(contex);

            var ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
            var netcom     = new NetworkComponent();

            netcom.Awake(NetworkProtocol.KCP, ipEndPoint);


            contex.Update();
            //todo: 谁来调用Update???
            //netcom.Update();

            //var hotfixLoader = app.ApplicationServices.GetService<HotfixLoader>();
            //Task thot = hotfixLoader.Load();
        }
Exemplo n.º 4
0
        public void DoAwake(IServiceContainer services)
        {
            _syncContext = new OneThreadSynchronizationContext();
            SynchronizationContext.SetSynchronizationContext(_syncContext);
            Utils.StartServices();
            if (Instance != null)
            {
                Debug.LogError("LifeCycle Error: Awake more than once!!");
                return;
            }

            Instance              = this;
            _serviceContainer     = services as ServiceContainer;
            _registerService      = new EventRegisterService();
            _mgrContainer         = new ManagerContainer();
            _timeMachineContainer = new TimeMachineContainer();

            //AutoCreateManagers;
            var svcs = _serviceContainer.GetAllServices();

            foreach (var service in svcs)
            {
                _timeMachineContainer.RegisterTimeMachine(service as ITimeMachine);
                if (service is BaseService baseService)
                {
                    _mgrContainer.RegisterManager(baseService);
                }
            }

            _serviceContainer.RegisterService(_timeMachineContainer);
            _serviceContainer.RegisterService(_registerService);
        }
Exemplo n.º 5
0
        public static void Main()
        {
            OneThreadSynchronizationContext context = new OneThreadSynchronizationContext();

            SynchronizationContext.SetSynchronizationContext(context);
            Debug.Log("Main start");
            try{
                DoAwake();
                while (true)
                {
                    try {
                        Thread.Sleep(3);
                        context.Update();
                        server.Update();
                    }
                    catch (ThreadAbortException e) {
                        return;
                    }
                    catch (Exception e) {
                        Log.Error(e.ToString());
                    }
                }
            }catch (ThreadAbortException e) {
                return;
            }catch (Exception e) {
                Log.Error(e.ToString());
            }
        }
Exemplo n.º 6
0
        public static void __Main()
        {
            // 异步方法全部会回掉到主线程
            OneThreadSynchronizationContext contex = new OneThreadSynchronizationContext();

            SynchronizationContext.SetSynchronizationContext(contex);
            try {
                DoAwake();
                while (true)
                {
                    try {
                        Thread.Sleep(3);
                        contex.Update();
                        server.Update();
                    }
                    catch (ThreadAbortException e) {
                        return;
                    }
                    catch (Exception e) {
                        Log.Error(e.ToString());
                    }
                }
            }
            catch (ThreadAbortException e) {
                return;
            }
            catch (Exception e) {
                Log.Error(e.ToString());
            }
        }
Exemplo n.º 7
0
        public static void Main(string[] args)
        {
            var config = ConfigStartup.GetConfiguration(args);

            Log.Logger = LogConfig.CreateSerilogLogger(config, AppName);
            Log.Information("CreateHostBuilder ({ApplicationContext})...", AppName);
            CreateHostBuilder(args, config).Build().RunAsync();
            OneThreadSynchronizationContext.Run();
        }
Exemplo n.º 8
0
 private void OnDestroy()
 {
     if (mSingletonObj == this.gameObject)
     {
         hasDestroy    = true;
         mSingletonObj = null;
         OneThreadSynchronizationContext asy = OneThreadSynchronizationContext.Instance;
         asy.OnDestroy();
         asy = null;
     }
 }
Exemplo n.º 9
0
        private static void Main()
        {
            OneThreadSynchronizationContext _ = OneThreadSynchronizationContext.Instance;

            WaitTimeAsync(5000, WaitTimeFinishCallback);

            while (true)
            {
                OneThreadSynchronizationContext.Instance.Update();

                Thread.Sleep(1);

                ++loopCount;
                if (loopCount % 10000 == 0)
                {
                    Console.WriteLine($"loop count: {loopCount}");
                }
            }
        }
Exemplo n.º 10
0
        static void Main(string[] args)
        {
            OneThreadSynchronizationContext _ = OneThreadSynchronizationContext.Instance;

            Console.WriteLine($"主线程: {Thread.CurrentThread.ManagedThreadId}");

            Crontine();

            while (true)
            {
                OneThreadSynchronizationContext.Instance.Update();

                Thread.Sleep(1);

                ++loopCount;
                if (loopCount % 10000 == 0)
                {
                    Console.WriteLine($"loop count: {loopCount}");
                }
            }
        }
Exemplo n.º 11
0
        static void Main(string[] args)
        {
            // 异步方法全部会回掉到主线程
            OneThreadSynchronizationContext contex = new OneThreadSynchronizationContext();

            SynchronizationContext.SetSynchronizationContext(contex);

            //AssemblyTypes(typeof(Game).Assembly);
            //AssemblyTypes(typeof(StageScene).Assembly);

            Game.EventSystem.Add(DLLType.Model, typeof(Stage).Assembly);


            Component willRemove = null;

            Stage stage1 = ComponentFactory.CreateWithId <Stage, ulong, string>(1, 1001, "关卡一");
            Stage stage2 = ComponentFactory.CreateWithId <Stage, ulong, string>(2, 1002, "关卡二");

            stage1.AddComponent <UnitMoveSystem>();
            stage2.AddComponent <UnitMoveSystem>();

            War.StageManager.Add(stage1);
            War.StageManager.Add(stage2);

            Unit unit = ComponentFactory.CreateWithParent <Unit, string>(stage1, "单位1");

            unit.AddComponent <UnitMoveComponent>();
            stage1.AddUnit(unit);

            unit = ComponentFactory.Create <Unit, string>("单位2");
            unit.AddComponent <UnitMoveComponent>();
            stage1.AddUnit(unit);

            willRemove = unit;


            unit = ComponentFactory.Create <Unit, string>("单位B1");
            unit.AddComponent <UnitMoveComponent>();
            stage2.AddUnit(unit);


            while (true)
            {
                try
                {
                    contex.Update();
                    Game.EventSystem.Update();

                    if (willRemove != null)
                    {
                        willRemove.Dispose();
                        willRemove = null;

                        unit = ComponentFactory.CreateWithParent <Unit, string>(stage1, "单位A11");
                        unit.AddComponent <UnitMoveComponent>();
                        stage1.AddUnit(unit);

                        unit = ComponentFactory.CreateWithParent <Unit, string>(stage1, "单位A12");
                        unit.AddComponent <UnitMoveComponent>();
                        stage1.AddUnit(unit);
                    }

                    Log.Info("--------------------");
                    Thread.Sleep(2000);
                }
                catch (Exception e)
                {
                    Log.Error(e);
                }
            }
        }
Exemplo n.º 12
0
        public async Task <BodyResponse <MatchingResponseVM> > PlayNow([FromHeader] long id)
        {
            var response = await OneThreadSynchronizationContext.UserRequest(id, _service.Playnow);

            return(response);
        }
 public async Task <WrappedResponse <RoomMatchResponseVm> > BlindMatching([FromHeader] long id, long blind)
 {
     return(await OneThreadSynchronizationContext.UserRequest(id, blind, _service.BlindMatch));
 }
Exemplo n.º 14
0
 public async Task <BodyResponse <MatchingResponseVM> > BlindMatching([FromHeader] long id, long blind)
 {
     return(await OneThreadSynchronizationContext.UserRequest(id, blind, _service.BlindMatching));
 }
Exemplo n.º 15
0
 public static void Install()
 {
     context = new OneThreadSynchronizationContext();
     //SynchronizationContext.SetSynchronizationContext(context);
 }
Exemplo n.º 16
0
 public static void Main(string[] args)
 {
     CreateWebHostBuilder(args).Build().RunAsync();
     OneThreadSynchronizationContext.Run();
 }
Exemplo n.º 17
0
        private static void Main(string[] args)
        {
            // 异步方法全部会回掉到主线程
            OneThreadSynchronizationContext contex = new OneThreadSynchronizationContext();

            SynchronizationContext.SetSynchronizationContext(contex);

            try
            {
                ObjectEvents.Instance.Add("Model", typeof(Game).Assembly);
                ObjectEvents.Instance.Add("Hotfix", DllHelper.GetHotfixAssembly());

                Options     options     = Game.Scene.AddComponent <OptionComponent, string[]>(args).Options;
                StartConfig startConfig = Game.Scene.AddComponent <StartConfigComponent, string, int>(options.Config, options.AppId).StartConfig;

                IdGenerater.AppId = options.AppId;

                LogManager.Configuration.Variables["appType"] = startConfig.AppType.ToString();
                LogManager.Configuration.Variables["appId"]   = startConfig.AppId.ToString();

                Log.Info("server start........................");

                Game.Scene.AddComponent <OpcodeTypeComponent>();
                Game.Scene.AddComponent <MessageDispatherComponent, AppType>(startConfig.AppType);

                // 根据不同的AppType添加不同的组件
                OuterConfig  outerConfig  = startConfig.GetComponent <OuterConfig>();
                InnerConfig  innerConfig  = startConfig.GetComponent <InnerConfig>();
                ClientConfig clientConfig = startConfig.GetComponent <ClientConfig>();
                switch (startConfig.AppType)
                {
                case AppType.Manager:
                    Game.Scene.AddComponent <NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
                    Game.Scene.AddComponent <NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
                    Game.Scene.AddComponent <AppManagerComponent>();
                    break;

                case AppType.Realm:
                    Game.Scene.AddComponent <ActorMessageDispatherComponent>();
                    Game.Scene.AddComponent <ActorManagerComponent>();
                    Game.Scene.AddComponent <NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
                    Game.Scene.AddComponent <NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
                    Game.Scene.AddComponent <LocationProxyComponent>();
                    Game.Scene.AddComponent <ActorComponent>();
                    Game.Scene.AddComponent <RealmGateAddressComponent>();
                    break;

                case AppType.Gate:
                    Game.Scene.AddComponent <PlayerComponent>();
                    Game.Scene.AddComponent <ActorMessageDispatherComponent>();
                    Game.Scene.AddComponent <ActorManagerComponent>();
                    Game.Scene.AddComponent <NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
                    Game.Scene.AddComponent <NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
                    Game.Scene.AddComponent <LocationProxyComponent>();
                    Game.Scene.AddComponent <ActorComponent>();
                    Game.Scene.AddComponent <ActorProxyComponent>();
                    Game.Scene.AddComponent <GateSessionKeyComponent>();
                    break;

                case AppType.Location:
                    Game.Scene.AddComponent <NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
                    Game.Scene.AddComponent <LocationComponent>();
                    break;

                case AppType.Map:
                    Game.Scene.AddComponent <NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
                    Game.Scene.AddComponent <ActorManagerComponent>();
                    Game.Scene.AddComponent <UnitComponent>();
                    Game.Scene.AddComponent <LocationProxyComponent>();
                    Game.Scene.AddComponent <ActorComponent>();
                    Game.Scene.AddComponent <ActorProxyComponent>();
                    Game.Scene.AddComponent <ActorMessageDispatherComponent>();
                    break;

                case AppType.AllServer:
                    Game.Scene.AddComponent <ActorProxyComponent>();
                    Game.Scene.AddComponent <PlayerComponent>();
                    Game.Scene.AddComponent <UnitComponent>();
                    Game.Scene.AddComponent <DBComponent>();
                    Game.Scene.AddComponent <DBProxyComponent>();
                    Game.Scene.AddComponent <LocationComponent>();
                    Game.Scene.AddComponent <ActorMessageDispatherComponent>();
                    Game.Scene.AddComponent <ActorManagerComponent>();
                    Game.Scene.AddComponent <NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
                    Game.Scene.AddComponent <NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
                    Game.Scene.AddComponent <LocationProxyComponent>();
                    Game.Scene.AddComponent <ActorComponent>();
                    Game.Scene.AddComponent <AppManagerComponent>();
                    Game.Scene.AddComponent <RealmGateAddressComponent>();
                    Game.Scene.AddComponent <GateSessionKeyComponent>();
                    break;

                case AppType.Benchmark:
                    Game.Scene.AddComponent <NetOuterComponent>();
                    Game.Scene.AddComponent <BenchmarkComponent, string>(clientConfig.Address);
                    break;

                default:
                    throw new Exception($"命令行参数没有设置正确的AppType: {startConfig.AppType}");
                }

                while (true)
                {
                    try
                    {
                        Thread.Sleep(1);
                        contex.Update();
                        ObjectEvents.Instance.Update();
                    }
                    catch (Exception e)
                    {
                        Log.Error(e.ToString());
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error(e.ToString());
            }
        }
Exemplo n.º 18
0
 public void OnDestroy()
 {
     _instance = null;
 }
        public async Task <WrappedResponse <RoomMatchResponseVm> > PlayNow([FromHeader] long id)
        {
            var response = await OneThreadSynchronizationContext.UserRequest(id, _service.Playnow);

            return(response);
        }
Exemplo n.º 20
0
        private static void Main(string[] args)
        {
            // 异步方法全部会回掉到主线程
            OneThreadSynchronizationContext contex = new OneThreadSynchronizationContext();

            SynchronizationContext.SetSynchronizationContext(contex);

            MongoHelper.Init();

            try
            {
                Game.EventSystem.Add(DLLType.Model, typeof(Game).Assembly);
                Game.EventSystem.Add(DLLType.Hotfix, DllHelper.GetHotfixAssembly());

                Options     options     = Game.Scene.AddComponent <OptionComponent, string[]>(args).Options;
                StartConfig startConfig = Game.Scene.AddComponent <StartConfigComponent, string, int>(options.Config, options.AppId).StartConfig;

                if (!options.AppType.Is(startConfig.AppType))
                {
                    Log.Error("命令行参数apptype与配置不一致");
                    return;
                }

                IdGenerater.AppId = options.AppId;

                LogManager.Configuration.Variables["appType"]       = startConfig.AppType.ToString();
                LogManager.Configuration.Variables["appId"]         = startConfig.AppId.ToString();
                LogManager.Configuration.Variables["appTypeFormat"] = $"{startConfig.AppType,-8}";
                LogManager.Configuration.Variables["appIdFormat"]   = $"{startConfig.AppId:D3}";

                Log.Info($"server start........................ {startConfig.AppId} {startConfig.AppType}");

                Game.Scene.AddComponent <OpcodeTypeComponent>();
                Game.Scene.AddComponent <MessageDispatherComponent>();

                // 根据不同的AppType添加不同的组件
                OuterConfig  outerConfig  = startConfig.GetComponent <OuterConfig>();
                InnerConfig  innerConfig  = startConfig.GetComponent <InnerConfig>();
                ClientConfig clientConfig = startConfig.GetComponent <ClientConfig>();

                switch (startConfig.AppType)
                {
                case AppType.Manager:
                    Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(innerConfig.IPEndPoint);
                    Game.Scene.AddComponent <NetOuterComponent, IPEndPoint>(outerConfig.IPEndPoint);
                    Game.Scene.AddComponent <AppManagerComponent>();
                    break;

                case AppType.Realm:
                    Game.Scene.AddComponent <ActorMessageDispatherComponent>();
                    Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(innerConfig.IPEndPoint);
                    Game.Scene.AddComponent <NetOuterComponent, IPEndPoint>(outerConfig.IPEndPoint);
                    Game.Scene.AddComponent <LocationProxyComponent>();
                    Game.Scene.AddComponent <RealmGateAddressComponent>();
                    break;

                case AppType.Gate:
                    Game.Scene.AddComponent <PlayerComponent>();
                    Game.Scene.AddComponent <ActorMessageDispatherComponent>();
                    Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(innerConfig.IPEndPoint);
                    Game.Scene.AddComponent <NetOuterComponent, IPEndPoint>(outerConfig.IPEndPoint);
                    Game.Scene.AddComponent <LocationProxyComponent>();
                    Game.Scene.AddComponent <ActorProxyComponent>();
                    Game.Scene.AddComponent <GateSessionKeyComponent>();
                    break;

                case AppType.Location:
                    Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(innerConfig.IPEndPoint);
                    Game.Scene.AddComponent <LocationComponent>();
                    break;

                case AppType.Map:
                    Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(innerConfig.IPEndPoint);
                    Game.Scene.AddComponent <UnitComponent>();
                    Game.Scene.AddComponent <LocationProxyComponent>();
                    Game.Scene.AddComponent <ActorProxyComponent>();
                    Game.Scene.AddComponent <ActorMessageDispatherComponent>();
                    Game.Scene.AddComponent <ServerFrameComponent>();
                    break;

                case AppType.AllServer:
                    Game.Scene.AddComponent <ActorProxyComponent>();
                    Game.Scene.AddComponent <PlayerComponent>();
                    Game.Scene.AddComponent <UnitComponent>();
                    Game.Scene.AddComponent <DBComponent>();
                    Game.Scene.AddComponent <DBProxyComponent>();
                    Game.Scene.AddComponent <DBCacheComponent>();
                    Game.Scene.AddComponent <LocationComponent>();
                    Game.Scene.AddComponent <ActorMessageDispatherComponent>();
                    Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(innerConfig.IPEndPoint);
                    Game.Scene.AddComponent <NetOuterComponent, IPEndPoint>(outerConfig.IPEndPoint);
                    Game.Scene.AddComponent <LocationProxyComponent>();
                    Game.Scene.AddComponent <AppManagerComponent>();
                    Game.Scene.AddComponent <RealmGateAddressComponent>();
                    Game.Scene.AddComponent <GateSessionKeyComponent>();
                    Game.Scene.AddComponent <ConfigComponent>();
                    Game.Scene.AddComponent <ServerFrameComponent>();
                    break;

                case AppType.Benchmark:
                    Game.Scene.AddComponent <NetOuterComponent>();
                    Game.Scene.AddComponent <BenchmarkComponent, IPEndPoint>(clientConfig.IPEndPoint);
                    break;

                default:
                    throw new Exception($"命令行参数没有设置正确的AppType: {startConfig.AppType}");
                }

                while (true)
                {
                    try
                    {
                        Thread.Sleep(1);
                        contex.Update();
                        Game.EventSystem.Update();
                    }
                    catch (Exception e)
                    {
                        Log.Error(e);
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
Exemplo n.º 21
0
        private static void Main(string[] args)
        {
            // 异步方法全部会回掉到主线程
            OneThreadSynchronizationContext contex = new OneThreadSynchronizationContext();

            SynchronizationContext.SetSynchronizationContext(contex);

            try
            {
                /*string strConn = "Database=usersdata;Data Source=127.0.0.1;";
                 * strConn += "User Id=root;Password=066047;port=3306;";
                 * MySqlConnection sqlConn_ = new MySqlConnection(strConn);
                 * try
                 * {
                 *  sqlConn_.Open();
                 *  Console.WriteLine("[数据库]连接成功");
                 * }
                 * catch (Exception e)
                 * {
                 *  Console.WriteLine("[数据库]连接失败" + e.Message);
                 *  return;
                 * }*/

                Game.EventSystem.Add(DLLType.Model, typeof(Game).Assembly);
                Game.EventSystem.Add(DLLType.Hotfix, DllHelper.GetHotfixAssembly());

                Options     options     = Game.Scene.AddComponent <OptionComponent, string[]>(args).Options;
                StartConfig startConfig = Game.Scene.AddComponent <StartConfigComponent, string, int>(options.Config, options.AppId).StartConfig;

                if (!options.AppType.Is(startConfig.AppType))
                {
                    Log.Error("命令行参数apptype与配置不一致");
                    return;
                }

                IdGenerater.AppId = options.AppId;

                LogManager.Configuration.Variables["appType"]       = startConfig.AppType.ToString();
                LogManager.Configuration.Variables["appId"]         = startConfig.AppId.ToString();
                LogManager.Configuration.Variables["appTypeFormat"] = $"{startConfig.AppType,-8}";
                LogManager.Configuration.Variables["appIdFormat"]   = $"{startConfig.AppId:D3}";

                Log.Info($"server start........................ {startConfig.AppId} {startConfig.AppType}");

                Game.Scene.AddComponent <OpcodeTypeComponent>();
                Game.Scene.AddComponent <MessageDispatherComponent>();

                // 根据不同的AppType添加不同的组件
                OuterConfig  outerConfig  = startConfig.GetComponent <OuterConfig>();
                InnerConfig  innerConfig  = startConfig.GetComponent <InnerConfig>();
                ClientConfig clientConfig = startConfig.GetComponent <ClientConfig>();

                switch (startConfig.AppType)
                {
                case AppType.Manager:
                    Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(innerConfig.IPEndPoint);
                    Game.Scene.AddComponent <NetOuterComponent, IPEndPoint>(outerConfig.IPEndPoint);
                    Game.Scene.AddComponent <AppManagerComponent>();
                    break;

                case AppType.Realm:
                    Game.Scene.AddComponent <ActorMessageDispatherComponent>();
                    Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(innerConfig.IPEndPoint);
                    Game.Scene.AddComponent <NetOuterComponent, IPEndPoint>(outerConfig.IPEndPoint);
                    Game.Scene.AddComponent <LocationProxyComponent>();
                    Game.Scene.AddComponent <RealmGateAddressComponent>();
                    break;

                case AppType.Gate:
                    Game.Scene.AddComponent <PlayerComponent>();
                    Game.Scene.AddComponent <ActorMessageDispatherComponent>();
                    Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(innerConfig.IPEndPoint);
                    Game.Scene.AddComponent <NetOuterComponent, IPEndPoint>(outerConfig.IPEndPoint);
                    Game.Scene.AddComponent <LocationProxyComponent>();
                    Game.Scene.AddComponent <ActorMessageSenderComponent>();
                    Game.Scene.AddComponent <GateSessionKeyComponent>();
                    break;

                case AppType.Location:
                    Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(innerConfig.IPEndPoint);
                    Game.Scene.AddComponent <LocationComponent>();
                    break;

                case AppType.Map:
                    Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(innerConfig.IPEndPoint);
                    Game.Scene.AddComponent <UnitComponent>();
                    Game.Scene.AddComponent <LocationProxyComponent>();
                    Game.Scene.AddComponent <ActorMessageSenderComponent>();
                    Game.Scene.AddComponent <ActorMessageDispatherComponent>();
                    Game.Scene.AddComponent <ServerFrameComponent>();
                    break;

                case AppType.AllServer:
                    Game.Scene.AddComponent <ActorMessageSenderComponent>();
                    Game.Scene.AddComponent <PlayerComponent>();
                    Game.Scene.AddComponent <UnitComponent>();
                    //Game.Scene.AddComponent<DBComponent>();
                    //Game.Scene.AddComponent<DBProxyComponent>();
                    //Game.Scene.AddComponent<DBCacheComponent>();
                    Game.Scene.AddComponent <MySqlComponent>();
                    Game.Scene.AddComponent <LocationComponent>();
                    Game.Scene.AddComponent <ActorMessageDispatherComponent>();
                    Game.Scene.AddComponent <NetInnerComponent, IPEndPoint>(innerConfig.IPEndPoint);
                    Game.Scene.AddComponent <NetOuterComponent, IPEndPoint>(outerConfig.IPEndPoint);
                    Game.Scene.AddComponent <LocationProxyComponent>();
                    Game.Scene.AddComponent <AppManagerComponent>();
                    Game.Scene.AddComponent <RealmGateAddressComponent>();
                    Game.Scene.AddComponent <GateSessionKeyComponent>();
                    Game.Scene.AddComponent <ConfigComponent>();
                    Game.Scene.AddComponent <ServerFrameComponent>();
                    // Game.Scene.AddComponent<HttpComponent>();
                    break;

                case AppType.Benchmark:
                    Game.Scene.AddComponent <NetOuterComponent>();
                    Game.Scene.AddComponent <BenchmarkComponent, IPEndPoint>(clientConfig.IPEndPoint);
                    break;

                default:
                    throw new Exception($"命令行参数没有设置正确的AppType: {startConfig.AppType}");
                }

                while (true)
                {
                    try
                    {
                        Thread.Sleep(1);
                        contex.Update();
                        Game.EventSystem.Update();
                    }
                    catch (Exception e)
                    {
                        Log.Error(e);
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }