/* ======== SourceMM ======== * Copyright (C) 2004-2008 Metamod:Source Development Team * No warranties of any kind * * License: zlib/libpng * * Author(s): David "BAILOPAN" Anderson * ============================ */ #ifndef _INCLUDE_PLUGINMANAGER_H #define _INCLUDE_PLUGINMANAGER_H /** * @brief Plugin Manager interface * @file IPluginManager.h */ typedef int PluginId; #include "ISmmPlugin.h" /** * @brief Load sources */ enum { Pl_BadLoad=0, Pl_Console=-1, Pl_File=-2, Pl_MinId=1, }; /** * @brief Status of a plugin at runtime */ enum Pl_Status { Pl_NotFound=-4, Pl_Error=-3, Pl_Refused=-2, Pl_Paused=-1, Pl_Running=0, }; typedef int PluginId; struct factories; class ISmmPluginManager { public: /** * @brief Loads a plugin and returns its id. If this is called before DLLInit(), * then the plugin is considered to be "hot" - it might refuse its own load later! * Also, a hot plugin might not have an error message. * * @param file String containing file name * @param source Specifies who loaded the plugin * @param status Status of the plugin * @param ismm Pointer to Smm API * @param error String buffer for error messages * @param maxlen Maximum length of buffer * @return Id of plugin */ virtual PluginId Load(const char *file, PluginId source, bool &already, char *error, size_t maxlen) =0; /** * @brief Unloads a plugin * * @param id Id of plugin * @param error String buffer for error messages * @param maxlen Maximum length of buffer * @return True on success, false otherwise */ virtual bool Unload(PluginId id, bool force, char *error, size_t maxlen) =0; /** * @brief Pauses a plugin * * @param id Id of plugin * @param error String buffer for error messages * @param maxlen Maximum length of buffer * @return True on success, false otherwise */ virtual bool Pause(PluginId id, char *error, size_t maxlen) =0; /** * @brief Unpauses a plugin * * @param id Id of plugin * @param force If true, forces the plugin to unload * @param error String buffer for error messages * @param maxlen Maximum length of buffer * @return True on success, false otherwise */ virtual bool Unpause(PluginId id, char *error, size_t maxlen) =0; /** * @brief Unloads all plugins forcefully * * @return True on success, false otherwise */ virtual bool UnloadAll() =0; /** * @brief Returns information about a plugin * * @param id Id of plugin * @param file Pointer to file string by reference * @param list Pointer to factories by reference * @param status By reference status of plugin * @param source By reference source of plugin * @return True on success, false if not found */ virtual bool Query(PluginId id, const char *&file, Pl_Status &status, PluginId &source) =0; /** * @brief Checks another plugin's QueryRunning() status. * * @param id Id of plugin * @param error Message buffer * @param maxlen Size of error buffer * @return Status value */ virtual bool QueryRunning(PluginId id, char *error, size_t maxlength) =0; /** * @brief Returns the handle of a plugin (OS dependent meaning) * * @param id Id of plugin * @param handle By reference handle of plugin, if any * @return True if plugin id is valid, false otherwise */ virtual bool QueryHandle(PluginId id, void *&handle) =0; }; #endif //_INCLUDE_PLUGINMANAGER_H