| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- using System;
- using System.Threading;
- using Base;
- using Model;
- using NLog;
- namespace App
- {
- internal static class Program
- {
- private static void Main(string[] args)
- {
- // 异步方法全部会回掉到主线程
- SynchronizationContext.SetSynchronizationContext(new OneThreadSynchronizationContext());
- try
- {
- Game.EntityEventManager.Register("Model", typeof(Game).Assembly);
- Game.EntityEventManager.Register("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<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<NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
- Game.Scene.AddComponent<NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
- Game.Scene.AddComponent<RealmGateAddressComponent>();
- break;
- case AppType.Gate:
- Game.Scene.AddComponent<NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
- Game.Scene.AddComponent<NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
- Game.Scene.AddComponent<GateSessionKeyComponent>();
- break;
- case AppType.AllServer:
- Game.Scene.AddComponent<NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
- Game.Scene.AddComponent<NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
- 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);
- Game.Poller.Update();
- Game.EntityEventManager.Update();
- }
- catch (Exception e)
- {
- Log.Error(e.ToString());
- }
- }
- }
- catch (Exception e)
- {
- Log.Error(e.ToString());
- }
- }
- }
- }
|