X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fmodules.h;h=d7b46ad4834b6552333605b79010396b9dec7b9a;hb=52e4d9c96c83ca4bbbeb487966ac2897a384907d;hp=1d9d16f264572b8222a1f6752015a7ddc0677a4a;hpb=8a64bd3a0ac72855b681b00f3a9a08cebee755ce;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/modules.h b/include/modules.h index 1d9d16f26..d7b46ad48 100644 --- a/include/modules.h +++ b/include/modules.h @@ -1168,6 +1168,9 @@ typedef IntModuleList::iterator EventHandlerIter; */ class CoreExport ModuleManager { + public: + typedef std::vector ServiceList; + private: /** Holds a string describing the last module error to occur */ @@ -1189,7 +1192,7 @@ class CoreExport ModuleManager /** Loads all core modules (cmd_*) */ - void LoadCoreModules(); + void LoadCoreModules(std::map& servicemap); /** Calls the Prioritize() method in all loaded modules * @return True if all went well, false if a dependency loop was detected @@ -1207,6 +1210,16 @@ class CoreExport ModuleManager /** List of data services keyed by name */ std::multimap DataProviders; + /** A list of ServiceProviders waiting to be registered. + * Non-NULL when constructing a Module, NULL otherwise. + * When non-NULL ServiceProviders add themselves to this list on creation and the core + * automatically registers them (that is, call AddService()) after the Module is constructed, + * and before Module::init() is called. + * If a service is created after the construction of the Module (for example in init()) it + * has to be registered manually. + */ + ServiceList* NewServices; + /** Simple, bog-standard, boring constructor. */ ModuleManager(); @@ -1328,6 +1341,11 @@ class CoreExport ModuleManager /** Unregister a service provided by a module */ void DelService(ServiceProvider&); + /** Register all services in a given ServiceList + * @param list The list containing the services to register + */ + void AddServices(const ServiceList& list); + inline void AddServices(ServiceProvider** list, int count) { for(int i=0; i < count; i++) @@ -1410,7 +1428,7 @@ struct AllModuleList { { \ return new y; \ } \ - extern "C" const char inspircd_src_version[] = VERSION " " REVISION; + extern "C" DllExport const char inspircd_src_version[] = VERSION " " REVISION; #endif #define COMMAND_INIT(c) MODULE_INIT(CommandModule)