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); }
// 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(); }
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); }
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()); } }
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()); } }
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(); }
private void OnDestroy() { if (mSingletonObj == this.gameObject) { hasDestroy = true; mSingletonObj = null; OneThreadSynchronizationContext asy = OneThreadSynchronizationContext.Instance; asy.OnDestroy(); asy = null; } }
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}"); } } }
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}"); } } }
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); } } }
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)); }
public async Task <BodyResponse <MatchingResponseVM> > BlindMatching([FromHeader] long id, long blind) { return(await OneThreadSynchronizationContext.UserRequest(id, blind, _service.BlindMatching)); }
public static void Install() { context = new OneThreadSynchronizationContext(); //SynchronizationContext.SetSynchronizationContext(context); }
public static void Main(string[] args) { CreateWebHostBuilder(args).Build().RunAsync(); OneThreadSynchronizationContext.Run(); }
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()); } }
public void OnDestroy() { _instance = null; }
public async Task <WrappedResponse <RoomMatchResponseVm> > PlayNow([FromHeader] long id) { var response = await OneThreadSynchronizationContext.UserRequest(id, _service.Playnow); return(response); }
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); } }
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); } }