using System; using System.Net; using System.Threading; using ETModel; using MongoDB.Bson.Serialization; using NLog; namespace App { internal static class Program { private static void Main(string[] args) { // 异步方法全部会回掉到主线程 OneThreadSynchronizationContext contex = new OneThreadSynchronizationContext(); SynchronizationContext.SetSynchronizationContext(contex); try { Game.EventSystem.Add(DLLType.Model, typeof(Game).Assembly); Game.EventSystem.Add(DLLType.Hotfix, DllHelper.GetHotfixAssembly()); Options options = Game.Scene.AddComponent(args).Options; StartConfig startConfig = Game.Scene.AddComponent(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(); Game.Scene.AddComponent(); // 根据不同的AppType添加不同的组件 OuterConfig outerConfig = startConfig.GetComponent(); InnerConfig innerConfig = startConfig.GetComponent(); ClientConfig clientConfig = startConfig.GetComponent(); switch (startConfig.AppType) { case AppType.Manager: Game.Scene.AddComponent(innerConfig.IPEndPoint); Game.Scene.AddComponent(outerConfig.IPEndPoint); Game.Scene.AddComponent(); break; case AppType.Realm: Game.Scene.AddComponent(); Game.Scene.AddComponent(innerConfig.IPEndPoint); Game.Scene.AddComponent(outerConfig.IPEndPoint); Game.Scene.AddComponent(); Game.Scene.AddComponent(); break; case AppType.Gate: Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(innerConfig.IPEndPoint); Game.Scene.AddComponent(outerConfig.IPEndPoint); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); break; case AppType.Location: Game.Scene.AddComponent(innerConfig.IPEndPoint); Game.Scene.AddComponent(); break; case AppType.Map: Game.Scene.AddComponent(innerConfig.IPEndPoint); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); break; case AppType.AllServer: Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(innerConfig.IPEndPoint); Game.Scene.AddComponent(outerConfig.IPEndPoint); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); Game.Scene.AddComponent(); // Game.Scene.AddComponent(); break; case AppType.Benchmark: Game.Scene.AddComponent(); Game.Scene.AddComponent(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); } } } }