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" }); }
/// <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); }