public static ServerStateManager GetInstance() { if (instance == null) { instance = new ServerStateManager(); } return(instance); }
protected void SetupServerStateMonitor() { var serverStateFilePath = GameServerSettings.Default.ServerStateFile; this.serverStateManager = new ServerStateManager(this.WorkloadController); this.serverStateManager.OnNewServerState += OnNewServerState; if (string.IsNullOrEmpty(serverStateFilePath) == false) { this.serverStateManager.Start(Path.Combine(this.ApplicationRootPath, serverStateFilePath)); } if (GameServerSettings.Default.EnableNamedPipe) { serverStateManager.StartListenPipe(); } }
void Init() { webRequestHandler = gameObject.AddComponent <webRequestHandler>(); serverStateManager = gameObject.AddComponent <ServerStateManager>(); userLocalDB = UserLocalDB.LoadFromFile(); }
/// <summary> /// 初始化Logic modules /// </summary> /// <remarks> /// 方法在 InitOnceServer_Step1() 里被调用 /// </remarks> public void Initializationing() { var dependenceModules = new List <KeyValuePair <InitDependenceAttribute, ILogicModule> >(); foreach (var type in AssemblyUtil.GetTypesByInterface(typeof(ILogicModule))) { if (type.IsInterface) { continue; } string moduleId = string.Empty; try { var obj = Activator.CreateInstance(type); var module = (ILogicModule)obj; moduleId = module.ModuleId; // 获得模块的初始化依赖 var dependances = type.GetCustomAttributes(typeof(InitDependenceAttribute), false); if (dependances.Length > 0) { var dependance = dependances[0] as InitDependenceAttribute; if (dependance != null) { dependenceModules.Add( new KeyValuePair <InitDependenceAttribute, ILogicModule>(dependance, module)); } } // 忽略某些模块的初始化 var ignore = type.GetCustomAttributes(typeof(IgnoreInitializationAttribute), true); if (ignore.Length > 0) { Logs.Info("Ignore {0} init.", moduleId); continue; } // 一般逻辑模块会要求实现一个模块状态输出功能 if (type.GetInterface(typeof(IServerState).Name) != null) { ServerStateManager.Register((IServerState)obj); } Logs.Info("Craete module {0}", moduleId); modules.Add(module); } catch (Exception ex) { Logs.Error("LogicModule.CreateModule fail. ModuleName:{0} Type:{1} ", moduleId, type.Name, ex); } } foreach (var dp in dependenceModules) { modules.Remove(dp.Value); } while (dependenceModules.Count > 0) { bool isChange = false; foreach (var dp in dependenceModules.ToArray()) { int content = 0; foreach (var moduleName in dp.Key.Dependences) { content += modules.Count(o => o.ModuleId == moduleName); } if (content == dp.Key.Dependences.Length) { // 满足依赖条件 modules.Add(dp.Value); isChange = true; dependenceModules.Remove(dp); } } if (!isChange) { string moduleName = string.Empty; dependenceModules.ForEach(o => { moduleName += o.Value.ModuleId + ","; }); Logs.Error("模块依赖可能存在循环依赖问题,请检查以下模块:{0}", moduleName.TrimEnd(',')); modules.AddRange(dependenceModules.Select(o => o.Value).ToArray()); break; } } foreach (var module in modules) { try { module.Initializationing(); } catch (Exception ex) { Logs.Error("LogicModule.Initializationing fail. moduleId:{0}", module.ModuleId, ex); } } }