1.1 --- a/core/interfaces/IPluginSys.h Fri Jan 19 05:25:43 2007 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,302 +0,0 @@
1.4 -#ifndef _INCLUDE_SOURCEMOD_PLUGINMNGR_INTERFACE_H_
1.5 -#define _INCLUDE_SOURCEMOD_PLUGINMNGR_INTERFACE_H_
1.6 -
1.7 -#include <IShareSys.h>
1.8 -#include <sp_vm_api.h>
1.9 -
1.10 -#define SMINTERFACE_PLUGINSYSTEM_NAME "IPluginManager"
1.11 -#define SMINTERFACE_PLUGINSYSTEM_VERSION 1
1.12 -
1.13 -#define SM_CONTEXTVAR_USER 3
1.14 -
1.15 -namespace SourceMod
1.16 -{
1.17 - class IPlugin;
1.18 -
1.19 - /**
1.20 - * @brief Encapsulates plugin public information.
1.21 - */
1.22 - typedef struct sm_plugininfo_s
1.23 - {
1.24 - const char *name;
1.25 - const char *author;
1.26 - const char *description;
1.27 - const char *version;
1.28 - const char *url;
1.29 - } sm_plugininfo_t;
1.30 -
1.31 -
1.32 - /**
1.33 - * @brief Describes the usability status of a plugin.
1.34 - * Note: The status "Loaded" and "Created" are only reachable
1.35 - * during map load.
1.36 - */
1.37 - enum PluginStatus
1.38 - {
1.39 - Plugin_Running=0, /* Plugin is running */
1.40 - /* All states below are unexecutable */
1.41 - Plugin_Paused, /* Plugin is loaded but paused */
1.42 - Plugin_Error, /* Plugin is loaded but errored/locked */
1.43 - /* All states below do not have all natives */
1.44 - Plugin_Loaded, /* Plugin has passed loading and can be finalized */
1.45 - Plugin_Failed, /* Plugin has a fatal failure */
1.46 - Plugin_Created, /* Plugin is created but not initialized */
1.47 - Plugin_Uncompiled, /* Plugin is not yet compiled by the JIT */
1.48 - Plugin_BadLoad, /* Plugin failed to load */
1.49 - };
1.50 -
1.51 -
1.52 - /**
1.53 - * @brief Describes the object lifetime of a plugin.
1.54 - */
1.55 - enum PluginType
1.56 - {
1.57 - PluginType_Private, /* Plugin is privately managed and receives no forwards */
1.58 - PluginType_MapUpdated, /* Plugin will never be unloaded unless for updates on mapchange */
1.59 - PluginType_MapOnly, /* Plugin will be removed at mapchange */
1.60 - PluginType_Global, /* Plugin will never be unloaded or updated */
1.61 - };
1.62 -
1.63 - class IPluginFunction;
1.64 -
1.65 - /**
1.66 - * @brief Encapsulates a run-time plugin as maintained by SourceMod.
1.67 - */
1.68 - class IPlugin
1.69 - {
1.70 - public:
1.71 - virtual ~IPlugin()
1.72 - {
1.73 - }
1.74 -
1.75 - /**
1.76 - * @brief Returns the lifetime of a plugin.
1.77 - */
1.78 - virtual PluginType GetType() const =0;
1.79 -
1.80 - /**
1.81 - * @brief Returns the current API context being used in the plugin.
1.82 - *
1.83 - * @return Pointer to an IPluginContext, or NULL if not loaded.
1.84 - */
1.85 - virtual SourcePawn::IPluginContext *GetBaseContext() const =0;
1.86 -
1.87 - /**
1.88 - * @brief Returns the context structure being used in the plugin.
1.89 - *
1.90 - * @return Pointer to an sp_context_t, or NULL if not loaded.
1.91 - */
1.92 - virtual sp_context_t *GetContext() const =0;
1.93 -
1.94 - /**
1.95 - * @brief Returns the plugin file structure.
1.96 - *
1.97 - * @return Pointer to an sp_plugin_t, or NULL if not loaded.
1.98 - */
1.99 - virtual const sp_plugin_t *GetPluginStructure() const =0;
1.100 -
1.101 - /**
1.102 - * @brief Returns information about the plugin by reference.
1.103 - *
1.104 - * @return Pointer to a sm_plugininfo_t object, NULL if plugin is not loaded.
1.105 - */
1.106 - virtual const sm_plugininfo_t *GetPublicInfo() const =0;
1.107 -
1.108 - /**
1.109 - * @brief Returns the plugin filename (relative to plugins dir).
1.110 - */
1.111 - virtual const char *GetFilename() const =0;
1.112 -
1.113 - /**
1.114 - * @brief Returns true if a plugin is in debug mode, false otherwise.
1.115 - */
1.116 - virtual bool IsDebugging() const =0;
1.117 -
1.118 - /**
1.119 - * @brief Returns the plugin status.
1.120 - */
1.121 - virtual PluginStatus GetStatus() const =0;
1.122 -
1.123 - /**
1.124 - * @brief Sets whether the plugin is paused or not.
1.125 - *
1.126 - * @return True on successful state change, false otherwise.
1.127 - */
1.128 - virtual bool SetPauseState(bool paused) =0;
1.129 -
1.130 - /**
1.131 - * @brief Returns the unique serial number of a plugin.
1.132 - */
1.133 - virtual unsigned int GetSerial() const =0;
1.134 -
1.135 - /**
1.136 - * @brief Returns a function by name.
1.137 - *
1.138 - * @param public_name Name of the function.
1.139 - * @return A new IPluginFunction pointer, NULL if not found.
1.140 - */
1.141 - virtual IPluginFunction *GetFunctionByName(const char *public_name) =0;
1.142 -
1.143 - /**
1.144 - * @brief Returns a function by its id.
1.145 - *
1.146 - * @param func_id Function ID.
1.147 - * @return A new IPluginFunction pointer, NULL if not found.
1.148 - */
1.149 - virtual IPluginFunction *GetFunctionById(funcid_t func_id) =0;
1.150 -
1.151 - /**
1.152 - * @brief Returns a plugin's identity token.
1.153 - */
1.154 - virtual IdentityToken_t *GetIdentity() const =0;
1.155 - };
1.156 -
1.157 -
1.158 - /**
1.159 - * @brief Iterates over a list of plugins.
1.160 - */
1.161 - class IPluginIterator
1.162 - {
1.163 - public:
1.164 - virtual ~IPluginIterator()
1.165 - {
1.166 - };
1.167 - public:
1.168 - /**
1.169 - * @brief Returns true if there are more plugins in the iterator.
1.170 - */
1.171 - virtual bool MorePlugins() =0;
1.172 -
1.173 - /**
1.174 - * @brief Returns the plugin at the current iterator position.
1.175 - */
1.176 - virtual IPlugin *GetPlugin() =0;
1.177 -
1.178 - /**
1.179 - * @brief Advances to the next plugin in the iterator.
1.180 - */
1.181 - virtual void NextPlugin() =0;
1.182 -
1.183 - /**
1.184 - * @brief Destroys the iterator object.
1.185 - * Note: You may use 'delete' in lieu of this function.
1.186 - */
1.187 - virtual void Release() =0;
1.188 - };
1.189 -
1.190 - /**
1.191 - * @brief Listens for plugin-oriented events.
1.192 - */
1.193 - class IPluginsListener
1.194 - {
1.195 - public:
1.196 - /**
1.197 - * @brief Called when a plugin is created/mapped into memory.
1.198 - */
1.199 - virtual void OnPluginCreated(IPlugin *plugin)
1.200 - {
1.201 - }
1.202 -
1.203 - /**
1.204 - * @brief Called when a plugin is fully loaded successfully.
1.205 - */
1.206 - virtual void OnPluginLoaded(IPlugin *plugin)
1.207 - {
1.208 - }
1.209 -
1.210 - /**
1.211 - * @brief Called when a plugin is unloaded (only if fully loaded).
1.212 - */
1.213 - virtual void OnPluginUnloaded(IPlugin *plugin)
1.214 - {
1.215 - }
1.216 -
1.217 - /**
1.218 - * @brief Called when a plugin is destroyed.
1.219 - * NOTE: Always called if Created, even if load failed.
1.220 - */
1.221 - virtual void OnPluginDestroyed(IPlugin *plugin)
1.222 - {
1.223 - }
1.224 - };
1.225 -
1.226 -
1.227 - /**
1.228 - * @brief Manages the runtime loading and unloading of plugins.
1.229 - */
1.230 - class IPluginManager : public SMInterface
1.231 - {
1.232 - public:
1.233 - virtual const char *GetInterfaceName()
1.234 - {
1.235 - return SMINTERFACE_PLUGINSYSTEM_NAME;
1.236 - }
1.237 -
1.238 - virtual unsigned int GetInterfaceVersion()
1.239 - {
1.240 - return SMINTERFACE_PLUGINSYSTEM_VERSION;
1.241 - }
1.242 - public:
1.243 - /**
1.244 - * @brief Attempts to load a plugin.
1.245 - *
1.246 - * @param path Path and filename of plugin, relative to plugins folder.
1.247 - * @param debug Whether or not to default the plugin into debug mode.
1.248 - * @param type Lifetime of the plugin.
1.249 - * @param error Buffer to hold any error message.
1.250 - * @param err_max Maximum length of error message buffer.
1.251 - * @return A new plugin pointer on success, false otherwise.
1.252 - */
1.253 - virtual IPlugin *LoadPlugin(const char *path,
1.254 - bool debug,
1.255 - PluginType type,
1.256 - char error[],
1.257 - size_t err_max) =0;
1.258 -
1.259 - /**
1.260 - * @brief Attempts to unload a plugin.
1.261 - *
1.262 - * @param plugin Pointer to the plugin handle.
1.263 - * @return True on success, false otherwise.
1.264 - */
1.265 - virtual bool UnloadPlugin(IPlugin *plugin) =0;
1.266 -
1.267 - /**
1.268 - * @brief Finds a plugin by its context.
1.269 - * Note: This function should be considered O(1).
1.270 - *
1.271 - * @param ctx Pointer to an sp_context_t.
1.272 - * @return Pointer to a matching IPlugin, or NULL if none found.
1.273 - */
1.274 - virtual IPlugin *FindPluginByContext(const sp_context_t *ctx) =0;
1.275 -
1.276 - /**
1.277 - * @brief Returns the number of plugins (both failed and loaded).
1.278 - *
1.279 - * @return The number of internally cached plugins.
1.280 - */
1.281 - virtual unsigned int GetPluginCount() =0;
1.282 -
1.283 - /**
1.284 - * @brief Returns a pointer that can be used to iterate through plugins.
1.285 - * Note: This pointer must be freed using EITHER delete OR IPluginIterator::Release().
1.286 - */
1.287 - virtual IPluginIterator *GetPluginIterator() =0;
1.288 -
1.289 - /**
1.290 - * @brief Adds a plugin manager listener.
1.291 - *
1.292 - * @param listener Pointer to a listener.
1.293 - */
1.294 - virtual void AddPluginsListener(IPluginsListener *listener) =0;
1.295 -
1.296 - /**
1.297 - * @brief Removes a plugin listener.
1.298 - *
1.299 - * @param listener Pointer to a listener.
1.300 - */
1.301 - virtual void RemovePluginsListener(IPluginsListener *listener) =0;
1.302 - };
1.303 -};
1.304 -
1.305 -#endif //_INCLUDE_SOURCEMOD_PLUGINMNGR_INTERFACE_H_