dvander@140: #ifndef _INCLUDE_SOURCEMOD_MODULE_INTERFACE_H_ dvander@140: #define _INCLUDE_SOURCEMOD_MODULE_INTERFACE_H_ dvander@140: dvander@140: #include dvander@140: #include dvander@140: dvander@140: namespace SourceMod dvander@140: { dvander@140: class IModuleInterface; dvander@140: dvander@140: class IModule : public IUnloadableParent dvander@140: { dvander@140: public: dvander@140: virtual UnloadableParentType GetParentType() dvander@140: { dvander@140: return ParentType_Module; dvander@140: } dvander@140: public: dvander@140: virtual IModuleInterface *GetModuleInfo() =0; dvander@140: virtual const char *GetFilename() =0; dvander@140: }; dvander@140: dvander@140: class IModuleInterface dvander@140: { dvander@140: public: dvander@140: /** dvander@140: * @brief Called when the module is loaded. dvander@140: * dvander@140: * @param me Pointer back to module. dvander@140: * @param sys Pointer to interface sharing system of SourceMod. dvander@140: * @param error Error buffer to print back to, if any. dvander@140: * @param err_max Maximum size of error buffer. dvander@140: * @param late If this module was loaded "late" (i.e. manually). dvander@140: * @return True if load should continue, false otherwise. dvander@140: */ dvander@140: virtual bool OnModuleLoad(IModule *me, IShareSys *sys, char *error, size_t err_max, bool late) =0; dvander@140: dvander@140: /** dvander@140: * @brief Called when the module is unloaded. dvander@140: * dvander@140: * @param force True if this unload will be forced. dvander@140: * @param error Error message buffer. dvander@140: * @param err_max Maximum siez of error buffer. dvander@140: * @return True on success, false to request no unload. dvander@140: */ dvander@140: virtual bool OnModuleUnload(bool force, char *error, size_t err_max) =0; dvander@140: dvander@140: /** dvander@140: * @brief Called when your pause state is about to change. dvander@140: * dvander@140: * @param pause True if pausing, false if unpausing. dvander@140: */ dvander@140: virtual void OnPauseChange(bool pause) =0; dvander@140: dvander@140: public: dvander@140: virtual const char *GetModuleName() =0; dvander@140: virtual const char *GetModuleVersion() =0; dvander@140: virtual const char *GetModuleURL() =0; dvander@140: virtual const char *GetModuleTags() =0; dvander@140: virtual const char *GetModuleAuthor() =0; dvander@140: }; dvander@140: dvander@140: #define SMINTERFACE_MODULEMANAGER_NAME "IModuleManager" dvander@140: #define SMINTERFACE_MODULEMANAGER_VERSION 1 dvander@140: dvander@140: enum ModuleLifetime dvander@140: { dvander@140: ModuleLifetime_Forever, //Module will never be unloaded automatically dvander@140: ModuleLifetime_Map, //Module will be unloaded at the end of the map dvander@140: ModuleLifetime_Dependent, //Module will be unloaded once its dependencies are gone dvander@140: }; dvander@140: dvander@140: class IModuleManager : public SMInterface dvander@140: { dvander@140: public: dvander@140: /** dvander@140: * @brief Loads a module into the module system. dvander@140: * dvander@140: * @param path Path to module file, relative to the modules folder. dvander@140: * @param lifetime Lifetime of the module. dvander@140: * @param error Error buffer. dvander@140: * @param err_max Maximum error buffer length. dvander@140: * @return New IModule on success, NULL on failure. dvander@140: */ dvander@140: virtual IModule *LoadModule(const char *path, dvander@140: ModuleLifetime lifetime, dvander@140: char *error, dvander@140: size_t err_max); dvander@140: }; dvander@140: }; dvander@140: dvander@140: #endif //_INCLUDE_SOURCEMOD_MODULE_INTERFACE_H_