void OnApplicationQuit() { Env.isRunning = false; if (NetModule.instance != null) { NetModule.instance.OnSocketEvent -= this.OnSocketEvent; NetModule.instance.Dispose(); } UIManager.Dispose(); LoggerProxy.Dispose(); AppDomain.CurrentDomain.UnhandledException -= this.OnUnhandledException; }
static int Start(string[] args) { AssemblyName[] assemblies = Assembly.GetEntryAssembly().GetReferencedAssemblies(); foreach (AssemblyName assembly in assemblies) { Assembly.Load(assembly); } LoggerProxy.Init(Resources.log4net_config); CommandArgs commandArg = CommandLine.Parse(args); Dictionary <string, string> argPairs = commandArg.argPairs; int maxClient; if (!argPairs.ContainsKey("c")) { maxClient = 10; } else { if (!int.TryParse(argPairs["c"], out maxClient)) { Logger.Log("最大连接数解析错误"); return(1); } } if (!argPairs.ContainsKey("p")) { Logger.Log("没有指定端口"); return(1); } if (!int.TryParse(argPairs["p"], out int _port)) { Logger.Log("端口解析错误"); return(1); } int useUDP; if (!argPairs.ContainsKey("t")) { useUDP = 0; } else { if (!int.TryParse(argPairs["t"], out useUDP)) { Logger.Log("协议类型解析错误"); return(1); } } if (!argPairs.ContainsKey("d")) { Logger.Log("无效的配置文件路径"); return(1); } string defFile = argPairs["d"]; string json; try { json = File.ReadAllText(defFile); } catch (Exception e) { Logger.Log(e); return(1); } Defs.Init(json); _handlerCenter = new HandlerCenter(); NetworkManager.PType protocolType = useUDP > 0 ? NetworkManager.PType.Kcp : NetworkManager.PType.Tcp; if (protocolType == NetworkManager.PType.Kcp) { NetworkManager.SetupKCP(); } NetworkManager.AddPacketTypes(); NetworkManager.CreateServer(NETWORK_NAME, protocolType, maxClient); NetworkManager.AddServerEventHandler(NETWORK_NAME, ProcessServerEvent); NetworkManager.StartServer(NETWORK_NAME, _port); Logger.Log($"Server started, listening port: {_port}"); Thread inputThread = new Thread(InputWorker); inputThread.IsBackground = true; inputThread.Start(); System.Diagnostics.Stopwatch sp = new System.Diagnostics.Stopwatch(); sp.Start(); long lastElapsed = 0; while (!_disposed) { long elapsed = sp.ElapsedMilliseconds; long dt = elapsed - lastElapsed; NetworkManager.Update(dt); lastElapsed = elapsed; ProcessInput(); Thread.Sleep(10); } sp.Stop(); inputThread.Join(); LoggerProxy.Dispose(); return(0); }