core/interfaces/IModuleSys.h
author David Anderson <dvander@alliedmods.net>
Sat Nov 11 11:10:24 2006 +0000 (2006-11-11)
changeset 177 d29ade52d953
parent 140 2c25d4131b38
child 211 4c77142eaf36
permissions -rw-r--r--
Fleshed out forward system and extensively documented its design considerations
Implemented and did basic tests on new IPluginFunction type
Split function types into a separate file
dvander@140
     1
#ifndef _INCLUDE_SOURCEMOD_MODULE_INTERFACE_H_
dvander@140
     2
#define _INCLUDE_SOURCEMOD_MODULE_INTERFACE_H_
dvander@140
     3
dvander@140
     4
#include <IShareSys.h>
dvander@140
     5
#include <ILibrarySys.h>
dvander@140
     6
dvander@140
     7
namespace SourceMod
dvander@140
     8
{
dvander@140
     9
	class IModuleInterface;
dvander@140
    10
dvander@140
    11
	class IModule : public IUnloadableParent
dvander@140
    12
	{
dvander@140
    13
	public:
dvander@140
    14
		virtual UnloadableParentType GetParentType()
dvander@140
    15
		{
dvander@140
    16
			return ParentType_Module;
dvander@140
    17
		}
dvander@140
    18
	public:
dvander@140
    19
		virtual IModuleInterface *GetModuleInfo() =0;
dvander@140
    20
		virtual const char *GetFilename() =0;
dvander@140
    21
	};
dvander@140
    22
dvander@140
    23
	class IModuleInterface
dvander@140
    24
	{
dvander@140
    25
	public:
dvander@140
    26
		/**
dvander@140
    27
		 * @brief Called when the module is loaded.
dvander@140
    28
		 * 
dvander@140
    29
		 * @param me		Pointer back to module.
dvander@140
    30
		 * @param sys		Pointer to interface sharing system of SourceMod.
dvander@140
    31
		 * @param error		Error buffer to print back to, if any.
dvander@140
    32
		 * @param err_max	Maximum size of error buffer.
dvander@140
    33
		 * @param late		If this module was loaded "late" (i.e. manually).
dvander@140
    34
		 * @return			True if load should continue, false otherwise.
dvander@140
    35
		 */
dvander@140
    36
		virtual bool OnModuleLoad(IModule *me, IShareSys *sys, char *error, size_t err_max, bool late) =0;
dvander@140
    37
dvander@140
    38
		/**
dvander@140
    39
		 * @brief Called when the module is unloaded.
dvander@140
    40
		 *
dvander@140
    41
		 * @param force		True if this unload will be forced.
dvander@140
    42
		 * @param error		Error message buffer.
dvander@140
    43
		 * @param err_max	Maximum siez of error buffer.
dvander@140
    44
		 * @return			True on success, false to request no unload.
dvander@140
    45
		 */
dvander@140
    46
		virtual bool OnModuleUnload(bool force, char *error, size_t err_max) =0;
dvander@140
    47
dvander@140
    48
		/**
dvander@140
    49
		 * @brief Called when your pause state is about to change.
dvander@140
    50
		 * 
dvander@140
    51
		 * @param pause		True if pausing, false if unpausing.
dvander@140
    52
		 */
dvander@140
    53
		virtual void OnPauseChange(bool pause) =0;
dvander@140
    54
dvander@140
    55
	public:
dvander@140
    56
		virtual const char *GetModuleName() =0;
dvander@140
    57
		virtual const char *GetModuleVersion() =0;
dvander@140
    58
		virtual const char *GetModuleURL() =0;
dvander@140
    59
		virtual const char *GetModuleTags() =0;
dvander@140
    60
		virtual const char *GetModuleAuthor() =0;
dvander@140
    61
	};
dvander@140
    62
dvander@140
    63
	#define SMINTERFACE_MODULEMANAGER_NAME		"IModuleManager"
dvander@140
    64
	#define SMINTERFACE_MODULEMANAGER_VERSION		1
dvander@140
    65
dvander@140
    66
	enum ModuleLifetime
dvander@140
    67
	{
dvander@140
    68
		ModuleLifetime_Forever,				//Module will never be unloaded automatically
dvander@140
    69
		ModuleLifetime_Map,					//Module will be unloaded at the end of the map
dvander@140
    70
		ModuleLifetime_Dependent,			//Module will be unloaded once its dependencies are gone
dvander@140
    71
	};
dvander@140
    72
dvander@140
    73
	class IModuleManager : public SMInterface
dvander@140
    74
	{
dvander@140
    75
	public:
dvander@140
    76
		/**
dvander@140
    77
		 * @brief Loads a module into the module system.
dvander@140
    78
		 *
dvander@140
    79
		 * @param path		Path to module file, relative to the modules folder.
dvander@140
    80
		 * @param lifetime	Lifetime of the module.
dvander@140
    81
		 * @param error		Error buffer.
dvander@140
    82
		 * @param err_max	Maximum error buffer length.
dvander@140
    83
		 * @return			New IModule on success, NULL on failure.
dvander@140
    84
		 */
dvander@140
    85
		virtual IModule *LoadModule(const char *path, 
dvander@140
    86
									ModuleLifetime lifetime, 
dvander@140
    87
									char *error,
dvander@140
    88
									size_t err_max);
dvander@140
    89
	};
dvander@140
    90
};
dvander@140
    91
dvander@140
    92
#endif //_INCLUDE_SOURCEMOD_MODULE_INTERFACE_H_