extensions/threader/smsdk_ext.h
author David Anderson <dvander@alliedmods.net>
Fri Feb 16 03:47:10 2007 +0000 (2007-02-16)
changeset 501 e209a7296936
parent 373 bf3335acefdd
permissions -rw-r--r--
removed this potential feature, not useful enough
dvander@373
     1
/**
dvander@373
     2
 * ===============================================================
dvander@373
     3
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@373
     4
 * ===============================================================
dvander@373
     5
 *
dvander@373
     6
 *  This file is part of the SourceMod/SourcePawn SDK.  This file may only be used 
dvander@373
     7
 * or modified under the Terms and Conditions of its License Agreement, which is found 
dvander@373
     8
 * in LICENSE.txt.  The Terms and Conditions for making SourceMod extensions/plugins 
dvander@373
     9
 * may change at any time.  To view the latest information, see:
dvander@373
    10
 *   http://www.sourcemod.net/license.php
dvander@373
    11
 *
dvander@373
    12
 * Version: $Id$
dvander@373
    13
 */
dvander@373
    14
dvander@322
    15
#ifndef _INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_
dvander@322
    16
#define _INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_
dvander@322
    17
dvander@322
    18
#include "smsdk_config.h"
dvander@322
    19
#include <IExtensionSys.h>
dvander@322
    20
#include <IHandleSys.h>
dvander@322
    21
#include <sp_vm_api.h>
dvander@322
    22
#include <sm_platform.h>
dvander@322
    23
#include <ISourceMod.h>
dvander@356
    24
#include <IForwardSys.h>
dvander@322
    25
dvander@322
    26
#if defined SMEXT_CONF_METAMOD
dvander@322
    27
#include <ISmmPlugin.h>
dvander@322
    28
#include <eiface.h>
dvander@322
    29
#endif
dvander@322
    30
dvander@322
    31
using namespace SourceMod;
dvander@322
    32
using namespace SourcePawn;
dvander@322
    33
dvander@322
    34
class SDKExtension : 
dvander@322
    35
#if defined SMEXT_CONF_METAMOD
dvander@322
    36
	public ISmmPlugin,
dvander@322
    37
#endif
dvander@322
    38
	public IExtensionInterface
dvander@322
    39
{
dvander@322
    40
public:
dvander@322
    41
	SDKExtension();
dvander@322
    42
public:
dvander@322
    43
	/**
dvander@322
    44
	 * @brief This is called after the initial loading sequence has been processed.
dvander@322
    45
	 *
dvander@322
    46
	 * @param error		Error message buffer.
dvander@322
    47
	 * @param err_max	Size of error message buffer.
dvander@322
    48
	 * @param late		Whether or not the module was loaded after map load.
dvander@322
    49
	 * @return			True to succeed loading, false to fail.
dvander@322
    50
	 */
dvander@322
    51
	virtual bool SDK_OnLoad(char *error, size_t err_max, bool late);
dvander@322
    52
	
dvander@322
    53
	/**
dvander@322
    54
	 * @brief This is called right before the extension is unloaded.
dvander@322
    55
	 */
dvander@322
    56
	virtual void SDK_OnUnload();
dvander@322
    57
dvander@322
    58
	/**
dvander@322
    59
	 * @brief This is called once all known extensions have been loaded.
dvander@322
    60
	 */
dvander@322
    61
	virtual void SDK_OnAllLoaded();
dvander@322
    62
dvander@322
    63
	/**
dvander@322
    64
	 * @brief Called when the pause state is changed.
dvander@322
    65
	 */
dvander@322
    66
	virtual void SDK_OnPauseChange(bool paused);
dvander@322
    67
dvander@322
    68
#if defined SMEXT_CONF_METAMOD
dvander@322
    69
	/**
dvander@322
    70
	 * @brief Called when Metamod is attached, before the extension version is called.
dvander@322
    71
	 *
dvander@322
    72
	 * @param error			Error buffer.
dvander@322
    73
	 * @param err_max		Maximum size of error buffer.
dvander@322
    74
	 * @param late			Whether or not Metamod considers this a late load.
dvander@322
    75
	 * @return				True to succeed, false to fail.
dvander@322
    76
	 */
dvander@322
    77
	virtual bool SDK_OnMetamodLoad(char *error, size_t err_max, bool late);
dvander@322
    78
dvander@322
    79
	/**
dvander@322
    80
	 * @brief Called when Metamod is detaching, after the extension version is called.
dvander@322
    81
	 * NOTE: By default this is blocked unless sent from SourceMod.
dvander@322
    82
	 *
dvander@322
    83
	 * @param error			Error buffer.
dvander@322
    84
	 * @param err_max		Maximum size of error buffer.
dvander@322
    85
	 * @return				True to succeed, false to fail.
dvander@322
    86
	 */
dvander@322
    87
	virtual bool SDK_OnMetamodUnload(char *error, size_t err_max);
dvander@322
    88
dvander@322
    89
	/**
dvander@322
    90
	 * @brief Called when Metamod's pause state is changing.
dvander@322
    91
	 * NOTE: By default this is blocked unless sent from SourceMod.
dvander@322
    92
	 *
dvander@322
    93
	 * @param paused		Pause state being set.
dvander@322
    94
	 * @param error			Error buffer.
dvander@322
    95
	 * @param err_max		Maximum size of error buffer.
dvander@322
    96
	 * @return				True to succeed, false to fail.
dvander@322
    97
	 */
dvander@322
    98
	virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t err_max);
dvander@322
    99
#endif
dvander@322
   100
dvander@322
   101
public: //IExtensionInterface
dvander@322
   102
	virtual bool OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, size_t err_max, bool late);
dvander@322
   103
	virtual void OnExtensionUnload();
dvander@322
   104
	virtual void OnExtensionsAllLoaded();
dvander@322
   105
	virtual bool IsMetamodExtension();
dvander@322
   106
	virtual void OnExtensionPauseChange(bool state);
dvander@322
   107
	virtual const char *GetExtensionName();
dvander@322
   108
	virtual const char *GetExtensionURL();
dvander@322
   109
	virtual const char *GetExtensionTag();
dvander@322
   110
	virtual const char *GetExtensionAuthor();
dvander@322
   111
	virtual const char *GetExtensionVerString();
dvander@322
   112
	virtual const char *GetExtensionDescription();
dvander@322
   113
	virtual const char *GetExtensionDateString();
dvander@322
   114
#if defined SMEXT_CONF_METAMOD
dvander@322
   115
public: //ISmmPlugin
dvander@322
   116
	virtual bool Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlength, bool late);
dvander@322
   117
	virtual const char *GetAuthor();
dvander@322
   118
	virtual const char *GetName();
dvander@322
   119
	virtual const char *GetDescription();
dvander@322
   120
	virtual const char *GetURL();
dvander@322
   121
	virtual const char *GetLicense();
dvander@322
   122
	virtual const char *GetVersion();
dvander@322
   123
	virtual const char *GetDate();
dvander@322
   124
	virtual const char *GetLogTag();
dvander@322
   125
	virtual bool Unload(char *error, size_t maxlen);
dvander@322
   126
	virtual bool Pause(char *error, size_t maxlen);
dvander@322
   127
	virtual bool Unpause(char *error, size_t maxlen);
dvander@322
   128
private:
dvander@322
   129
	bool m_SourceMMLoaded;
dvander@322
   130
	bool m_WeAreUnloaded;
dvander@322
   131
	bool m_WeGotPauseChange;
dvander@322
   132
#endif
dvander@322
   133
};
dvander@322
   134
dvander@322
   135
extern SDKExtension *g_pExtensionIface;
dvander@322
   136
dvander@322
   137
extern IShareSys *g_pShareSys;
dvander@322
   138
extern IExtension *myself;
dvander@322
   139
extern IHandleSys *g_pHandleSys;
dvander@322
   140
extern ISourceMod *g_pSM;
dvander@356
   141
extern IForwardManager *g_pForwards;
dvander@322
   142
dvander@322
   143
#if defined SMEXT_CONF_METAMOD
dvander@322
   144
PLUGIN_GLOBALVARS();
dvander@322
   145
extern IVEngineServer *engine;
dvander@322
   146
extern IServerGameDLL *gamedll;
dvander@322
   147
#endif
dvander@322
   148
dvander@322
   149
#define SM_MKIFACE(name) SMINTERFACE_##name##_NAME, SMINTERFACE_##name##_VERSION
dvander@322
   150
#define SM_GET_IFACE(prefix,addr) \
dvander@322
   151
	if (!g_pShareSys->RequestInterface(SM_MKIFACE(prefix), myself, (SMInterface **)&addr)) { \
dvander@322
   152
	 if (error) { \
dvander@322
   153
		snprintf(error, err_max, "Could not find interface: %s", SMINTERFACE_##prefix##_NAME); \
dvander@322
   154
	 } \
dvander@322
   155
	 return false; \
dvander@322
   156
	}
dvander@322
   157
dvander@322
   158
#endif //_INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_