initial import of plugin loading code

little fixes to API
temporarily commented dependency iface until final

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40177
This commit is contained in:
David Anderson 2006-11-10 07:49:38 +00:00
parent ace0d842e5
commit ac761f61ce
6 changed files with 37 additions and 26 deletions

View File

@ -2,7 +2,7 @@
#define _INCLUDE_SOURCEMOD_PLUGINMNGR_INTERFACE_H_ #define _INCLUDE_SOURCEMOD_PLUGINMNGR_INTERFACE_H_
#include <IShareSys.h> #include <IShareSys.h>
#include <sp_vm_context.h> #include <sp_vm_api.h>
#define SMINTERFACE_PLUGINMANAGER_NAME "IPluginManager" #define SMINTERFACE_PLUGINMANAGER_NAME "IPluginManager"
#define SMINTERFACE_PLUGINMANAGER_VERSION 1 #define SMINTERFACE_PLUGINMANAGER_VERSION 1
@ -27,6 +27,7 @@ namespace SourceMod
enum PluginStatus enum PluginStatus
{ {
Plugin_Running=0, /* Plugin is running */ Plugin_Running=0, /* Plugin is running */
Plugin_Loaded, /* Plugin is loaded but not initialized */
Plugin_Paused, /* Plugin is paused */ Plugin_Paused, /* Plugin is paused */
Plugin_Stopped, /* Plugin is paused for map changes, too */ Plugin_Stopped, /* Plugin is paused for map changes, too */
Plugin_Error, /* Plugin has a blocking error */ Plugin_Error, /* Plugin has a blocking error */
@ -46,59 +47,66 @@ namespace SourceMod
/** /**
* @brief Encapsulates a run-time plugin as maintained by SourceMod. * @brief Encapsulates a run-time plugin as maintained by SourceMod.
*/ */
class IPlugin : public IUnloadableParent class IPlugin /*: public IUnloadableParent*/
{ {
public: public:
UnloadableParentType GetParentType() /*UnloadableParentType GetParentType()
{ {
return ParentType_Module; return ParentType_Module;
} }*/
public: public:
/** /**
* @brief Returns the lifetime of a plugin. * @brief Returns the lifetime of a plugin.
*/ */
virtual PluginLifetime GetLifetime() =0; virtual PluginLifetime GetLifetime() const =0;
/** /**
* @brief Returns the current API context being used in the plugin. * @brief Returns the current API context being used in the plugin.
* *
* @return Pointer to an IPluginContext, or NULL if not loaded. * @return Pointer to an IPluginContext, or NULL if not loaded.
*/ */
virtual SourcePawn::IPluginContext *GetBaseContext() =0; virtual SourcePawn::IPluginContext *GetBaseContext() const =0;
/** /**
* @brief Returns the context structure being used in the plugin. * @brief Returns the context structure being used in the plugin.
* *
* @brief Pointer to an sp_context_t, or NULL if not loaded. * @return Pointer to an sp_context_t, or NULL if not loaded.
*/ */
virtual sp_context_t *GetContext() =0; virtual sp_context_t *GetContext() const =0;
/** /**
* @brief Returns information about the plugin. * @brief Returns the plugin file structure.
* *
* @brief Pointer to an sm_plugininfo_t, or NULL if not loaded. * @return Pointer to an sp_plugin_t, or NULL if not loaded.
*/ */
virtual sm_plugininfo_t *GetPublicInfo() =0; virtual const sp_plugin_t *GetPluginStructure() const =0;
/**
* @brief Returns information about the plugin by reference.
*
* @return Pointer to a sm_plugininfo_t object, NULL if plugin is not loaded.
*/
virtual const sm_plugininfo_t *GetPublicInfo() const =0;
/** /**
* @brief Returns the plugin filename (relative to plugins dir). * @brief Returns the plugin filename (relative to plugins dir).
*/ */
virtual const char *GetFilename() =0; virtual const char *GetFilename() const =0;
/** /**
* @brief Returns true if a plugin is in debug mode, false otherwise. * @brief Returns true if a plugin is in debug mode, false otherwise.
*/ */
virtual bool IsDebugging() =0; virtual bool IsDebugging() const =0;
/** /**
* @brief Returns the plugin status. * @brief Returns the plugin status.
*/ */
virtual PluginStatus GetStatus() =0; virtual PluginStatus GetStatus() const =0;
/** /**
* @brief Sets whether the plugin is paused or not. * @brief Sets whether the plugin is paused or not.
* *
* @return True on successful pause, false otherwise. * @return True on successful state change, false otherwise.
*/ */
virtual bool SetPauseState(bool paused) =0; virtual bool SetPauseState(bool paused) =0;
@ -110,12 +118,12 @@ namespace SourceMod
/** /**
* @brief Returns whether the plugin is locked from being updated on mapchange. * @brief Returns whether the plugin is locked from being updated on mapchange.
*/ */
virtual bool GetLockForUpdates() =0; virtual bool GetLockForUpdates() const =0;
/** /**
* @brief Returns the unique serial number of a plugin. * @brief Returns the unique serial number of a plugin.
*/ */
virtual unsigned int GetSerial() =0; virtual unsigned int GetSerial() const =0;
}; };
@ -125,7 +133,7 @@ namespace SourceMod
class IPluginIterator class IPluginIterator
{ {
public: public:
virtual void ~IPluginIterator() virtual ~IPluginIterator()
{ {
}; };
public: public:

View File

@ -255,6 +255,10 @@
RelativePath="..\systems\LibrarySys.h" RelativePath="..\systems\LibrarySys.h"
> >
</File> </File>
<File
RelativePath="..\systems\PluginSys.h"
>
</File>
</Filter> </Filter>
<Filter <Filter
Name="Source Files" Name="Source Files"
@ -263,6 +267,10 @@
RelativePath="..\systems\LibrarySys.cpp" RelativePath="..\systems\LibrarySys.cpp"
> >
</File> </File>
<File
RelativePath="..\systems\PluginSys.cpp"
>
</File>
</Filter> </Filter>
</Filter> </Filter>
<Filter <Filter

View File

@ -56,11 +56,6 @@ IPluginContext *SourcePawnEngine::CreateBaseContext(sp_context_t *ctx)
void SourcePawnEngine::FreeBaseContext(IPluginContext *ctx) void SourcePawnEngine::FreeBaseContext(IPluginContext *ctx)
{ {
sp_context_t *_ctx = ctx->GetContext();
IVirtualMachine *vm = ctx->GetVirtualMachine();
vm->FreeContext(_ctx);
delete ctx; delete ctx;
} }

View File

@ -52,7 +52,7 @@ forward bool:OnPluginLoad(Handle:myself, bool:late, String:error[], err_max);
* *
* @noreturn * @noreturn
*/ */
forward OnPluginRequirements(); forward OnCreatePlugin();
/** /**
* Called when the plugin is about to be unloaded. * Called when the plugin is about to be unloaded.

View File

@ -6,7 +6,7 @@ public Plugin:myinfo =
author = "BAILOPAN", author = "BAILOPAN",
description = "Tests Stuff", description = "Tests Stuff",
version = "1.0.0.0", version = "1.0.0.0",
url = "http://www.sourceomd.net/" url = "http://www.sourcemod.net/"
} }
public OnPluginInit() public OnPluginInit()

View File

@ -343,7 +343,7 @@ namespace SourcePawn
virtual IPluginContext *CreateBaseContext(sp_context_t *ctx) =0; virtual IPluginContext *CreateBaseContext(sp_context_t *ctx) =0;
/** /**
* Frees a context. * Frees a base context. Does not free the sp_context_t it holds.
* *
* @param ctx Context pointer to free. * @param ctx Context pointer to free.
*/ */