示例#1
0
文件: Engine.cs 项目: Niraka/Asat
        public Engine(EngineConfig config)
        {
            m_engineConfig       = ResolveEngineConfig(config);
            m_eventManager       = new Event.EventManager();
            m_engineEvents       = new EngineEvents(m_eventManager);
            m_modules            = new List <Module>();
            m_apiContexts        = new SortedDictionary <int, ApiContext>();
            m_iNextApiContextUid = 0;
            m_iNextModuleUid     = 0;

            m_iModuleAvailableEventUid   = m_engineEvents.GetEventTypeUid(EngineEvents.Types.MODULE_AVAILABLE);
            m_iModuleUnavailableEventUid = m_engineEvents.GetEventTypeUid(EngineEvents.Types.MODULE_UNAVAILABLE);
            m_iApiConstructedEventUid    = m_engineEvents.GetEventTypeUid(EngineEvents.Types.API_CONSTRUCTED);
            m_iDependencyRequestEventUid = m_engineEvents.GetEventTypeUid(EngineEvents.Types.DEPENDENCY_REQUEST);

            m_eventManager.AddEventListener(this, m_engineEvents.GetEventTypeUid(EngineEvents.Types.DEPENDENCY_REQUEST));

            AddModule <Modules.Database.DatabaseModule>("database", null);
            AddModule <Modules.Disk.DiskModule>("disk", null);
            AddModule <Modules.Network.NetworkModule>("network", null);
            AddModule <Modules.Validation.ValidationModule>("validation", null);
            AddModule <Modules.Settings.SettingsModule>("settings", new List <string> {
                "database", "database"
            });
        }
示例#2
0
文件: Engine.cs 项目: Niraka/Asat
        /// <summary>
        /// Constructs an instance of the engines api configured to operate within the given context.
        /// </summary>
        /// <param name="iApiContextUid">The id of the api context to construct with</param>
        /// <returns>An api context or null</returns>
        public EngineApi GetApi(int iApiContextUid)
        {
            ApiContext context;

            if (m_apiContexts.TryGetValue(iApiContextUid, out context))
            {
                EngineApi api = new EngineApi(context, m_engineEvents);
                m_eventManager.AddEventListener(api, m_iModuleAvailableEventUid);
                m_eventManager.AddEventListener(api, m_iModuleUnavailableEventUid);
                m_eventManager.AddEventListener(api, m_iApiConstructedEventUid);

                m_eventManager.LaunchEvent(m_iApiConstructedEventUid, m_modules);
                return(api);
            }

            return(null);
        }