extensions/threader/smsdk_ext.cpp
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
#include <stdio.h>
dvander@356
    16
#include <malloc.h>
dvander@322
    17
#include "smsdk_ext.h"
dvander@322
    18
dvander@322
    19
IShareSys *g_pShareSys = NULL;
dvander@322
    20
IExtension *myself = NULL;
dvander@322
    21
IHandleSys *g_pHandleSys = NULL;
dvander@322
    22
ISourceMod *g_pSM = NULL;
dvander@356
    23
IForwardManager *g_pForwards = NULL;
dvander@322
    24
dvander@322
    25
PLATFORM_EXTERN_C IExtensionInterface *GetSMExtAPI()
dvander@322
    26
{
dvander@322
    27
	return g_pExtensionIface;
dvander@322
    28
}
dvander@322
    29
dvander@322
    30
SDKExtension::SDKExtension()
dvander@322
    31
{
dvander@322
    32
#if defined SMEXT_CONF_METAMOD
dvander@322
    33
	m_SourceMMLoaded = false;
dvander@322
    34
	m_WeAreUnloaded = false;
dvander@322
    35
	m_WeGotPauseChange = false;
dvander@322
    36
#endif
dvander@322
    37
}
dvander@322
    38
dvander@322
    39
bool SDKExtension::OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, size_t err_max, bool late)
dvander@322
    40
{
dvander@322
    41
	g_pShareSys = sys;
dvander@322
    42
	myself = me;
dvander@322
    43
dvander@322
    44
#if defined SMEXT_CONF_METAMOD
dvander@322
    45
	m_WeAreUnloaded = true;
dvander@322
    46
dvander@322
    47
	if (!m_SourceMMLoaded)
dvander@322
    48
	{
dvander@322
    49
		if (error)
dvander@322
    50
		{
dvander@322
    51
			snprintf(error, err_max, "Metamod attach failed");
dvander@322
    52
		}
dvander@322
    53
		return false;
dvander@322
    54
	}
dvander@322
    55
#endif
dvander@322
    56
dvander@322
    57
	SM_GET_IFACE(HANDLESYSTEM, g_pHandleSys);
dvander@322
    58
	SM_GET_IFACE(SOURCEMOD, g_pSM);
dvander@356
    59
	SM_GET_IFACE(FORWARDMANAGER, g_pForwards);
dvander@322
    60
dvander@322
    61
	if (SDK_OnLoad(error, err_max, late))
dvander@322
    62
	{
dvander@322
    63
#if defined SMEXT_CONF_METAMOD
dvander@322
    64
		m_WeAreUnloaded = true;
dvander@322
    65
#endif
dvander@322
    66
		return true;
dvander@322
    67
	}
dvander@322
    68
dvander@322
    69
	return false;
dvander@322
    70
}
dvander@322
    71
dvander@322
    72
bool SDKExtension::IsMetamodExtension()
dvander@322
    73
{
dvander@322
    74
#if defined SMEXT_CONF_METAMOD
dvander@322
    75
	return true;
dvander@322
    76
#else
dvander@322
    77
	return false;
dvander@322
    78
#endif
dvander@322
    79
}
dvander@322
    80
dvander@322
    81
void SDKExtension::OnExtensionPauseChange(bool state)
dvander@322
    82
{
dvander@322
    83
#if defined SMEXT_CONF_METAMOD
dvander@322
    84
	m_WeGotPauseChange = true;
dvander@322
    85
#endif
dvander@322
    86
	SDK_OnPauseChange(state);
dvander@322
    87
}
dvander@322
    88
dvander@322
    89
void SDKExtension::OnExtensionsAllLoaded()
dvander@322
    90
{
dvander@322
    91
	SDK_OnAllLoaded();
dvander@322
    92
}
dvander@322
    93
dvander@322
    94
void SDKExtension::OnExtensionUnload()
dvander@322
    95
{
dvander@322
    96
#if defined SMEXT_CONF_METAMOD
dvander@322
    97
	m_WeAreUnloaded = true;
dvander@322
    98
#endif
dvander@322
    99
	SDK_OnUnload();
dvander@322
   100
}
dvander@322
   101
dvander@322
   102
const char *SDKExtension::GetExtensionAuthor()
dvander@322
   103
{
dvander@322
   104
	return SMEXT_CONF_AUTHOR;
dvander@322
   105
}
dvander@322
   106
dvander@322
   107
const char *SDKExtension::GetExtensionDateString()
dvander@322
   108
{
dvander@322
   109
	return SMEXT_CONF_DATESTRING;
dvander@322
   110
}
dvander@322
   111
dvander@322
   112
const char *SDKExtension::GetExtensionDescription()
dvander@322
   113
{
dvander@322
   114
	return SMEXT_CONF_DESCRIPTION;
dvander@322
   115
}
dvander@322
   116
dvander@322
   117
const char *SDKExtension::GetExtensionVerString()
dvander@322
   118
{
dvander@322
   119
	return SMEXT_CONF_VERSION;
dvander@322
   120
}
dvander@322
   121
dvander@322
   122
const char *SDKExtension::GetExtensionName()
dvander@322
   123
{
dvander@322
   124
	return SMEXT_CONF_NAME;
dvander@322
   125
}
dvander@322
   126
dvander@322
   127
const char *SDKExtension::GetExtensionTag()
dvander@322
   128
{
dvander@322
   129
	return SMEXT_CONF_LOGTAG;
dvander@322
   130
}
dvander@322
   131
dvander@322
   132
const char *SDKExtension::GetExtensionURL()
dvander@322
   133
{
dvander@322
   134
	return SMEXT_CONF_URL;
dvander@322
   135
}
dvander@322
   136
dvander@322
   137
bool SDKExtension::SDK_OnLoad(char *error, size_t err_max, bool late)
dvander@322
   138
{
dvander@322
   139
	return true;
dvander@322
   140
}
dvander@322
   141
dvander@322
   142
void SDKExtension::SDK_OnUnload()
dvander@322
   143
{
dvander@322
   144
}
dvander@322
   145
dvander@322
   146
void SDKExtension::SDK_OnPauseChange(bool paused)
dvander@322
   147
{
dvander@322
   148
}
dvander@322
   149
dvander@322
   150
void SDKExtension::SDK_OnAllLoaded()
dvander@322
   151
{
dvander@322
   152
}
dvander@322
   153
dvander@322
   154
#if defined SMEXT_CONF_METAMOD
dvander@322
   155
dvander@322
   156
PluginId g_PLID = 0;
dvander@322
   157
ISmmPlugin *g_PLAPI = NULL;
dvander@322
   158
SourceHook::ISourceHook *g_SHPtr = NULL;
dvander@322
   159
ISmmAPI *g_SMAPI = NULL;
dvander@322
   160
dvander@322
   161
IVEngineServer *engine = NULL;
dvander@322
   162
IServerGameDLL *gamedll = NULL;
dvander@322
   163
dvander@322
   164
SMM_API void *PL_EXPOSURE(const char *name, int *code)
dvander@322
   165
{
dvander@322
   166
	if (name && !strcmp(name, PLAPI_NAME))
dvander@322
   167
	{
dvander@322
   168
		if (code)
dvander@322
   169
		{
dvander@322
   170
			*code = IFACE_OK;
dvander@322
   171
		}
dvander@322
   172
		return static_cast<void *>(g_pExtensionIface);
dvander@322
   173
	}
dvander@322
   174
dvander@322
   175
	if (code)
dvander@322
   176
	{
dvander@322
   177
		*code = IFACE_FAILED;
dvander@322
   178
	}
dvander@322
   179
dvander@322
   180
	return NULL;
dvander@322
   181
}
dvander@322
   182
dvander@322
   183
bool SDKExtension::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late)
dvander@322
   184
{
dvander@322
   185
	PLUGIN_SAVEVARS();
dvander@322
   186
dvander@322
   187
	GET_V_IFACE_ANY(serverFactory, gamedll, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL);
dvander@322
   188
	GET_V_IFACE_CURRENT(engineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER);
dvander@322
   189
dvander@322
   190
	m_SourceMMLoaded = true;
dvander@322
   191
dvander@322
   192
	return SDK_OnMetamodLoad(error, maxlen, late);
dvander@322
   193
}
dvander@322
   194
dvander@322
   195
bool SDKExtension::Unload(char *error, size_t maxlen)
dvander@322
   196
{
dvander@322
   197
	if (!m_WeAreUnloaded)
dvander@322
   198
	{
dvander@322
   199
		if (error)
dvander@322
   200
		{
dvander@322
   201
			snprintf(error, maxlen, "This extension must be unloaded by SourceMod.");
dvander@322
   202
		}
dvander@322
   203
		return false;
dvander@322
   204
	}
dvander@322
   205
dvander@322
   206
	return SDK_OnMetamodUnload(error, maxlen);
dvander@322
   207
}
dvander@322
   208
dvander@322
   209
bool SDKExtension::Pause(char *error, size_t maxlen)
dvander@322
   210
{
dvander@322
   211
	if (!m_WeGotPauseChange)
dvander@322
   212
	{
dvander@322
   213
		if (error)
dvander@322
   214
		{
dvander@322
   215
			snprintf(error, maxlen, "This extension must be paused by SourceMod.");
dvander@322
   216
		}
dvander@322
   217
		return false;
dvander@322
   218
	}
dvander@322
   219
dvander@322
   220
	m_WeGotPauseChange = false;
dvander@322
   221
dvander@322
   222
	return SDK_OnMetamodPauseChange(true, error, maxlen);
dvander@322
   223
}
dvander@322
   224
dvander@322
   225
bool SDKExtension::Unpause(char *error, size_t maxlen)
dvander@322
   226
{
dvander@322
   227
	if (!m_WeGotPauseChange)
dvander@322
   228
	{
dvander@322
   229
		if (error)
dvander@322
   230
		{
dvander@322
   231
			snprintf(error, maxlen, "This extension must be unpaused by SourceMod.");
dvander@322
   232
		}
dvander@322
   233
		return false;
dvander@322
   234
	}
dvander@322
   235
dvander@322
   236
	m_WeGotPauseChange = false;
dvander@322
   237
dvander@322
   238
	return SDK_OnMetamodPauseChange(false, error, maxlen);
dvander@322
   239
}
dvander@322
   240
dvander@322
   241
const char *SDKExtension::GetAuthor()
dvander@322
   242
{
dvander@322
   243
	return GetExtensionAuthor();
dvander@322
   244
}
dvander@322
   245
dvander@322
   246
const char *SDKExtension::GetDate()
dvander@322
   247
{
dvander@322
   248
	return GetExtensionDateString();
dvander@322
   249
}
dvander@322
   250
dvander@322
   251
const char *SDKExtension::GetDescription()
dvander@322
   252
{
dvander@322
   253
	return GetExtensionDescription();
dvander@322
   254
}
dvander@322
   255
dvander@322
   256
const char *SDKExtension::GetLicense()
dvander@322
   257
{
dvander@322
   258
	return SMEXT_CONF_LICENSE;
dvander@322
   259
}
dvander@322
   260
dvander@322
   261
const char *SDKExtension::GetLogTag()
dvander@322
   262
{
dvander@322
   263
	return GetExtensionTag();
dvander@322
   264
}
dvander@322
   265
dvander@322
   266
const char *SDKExtension::GetName()
dvander@322
   267
{
dvander@322
   268
	return GetExtensionName();
dvander@322
   269
}
dvander@322
   270
dvander@322
   271
const char *SDKExtension::GetURL()
dvander@322
   272
{
dvander@322
   273
	return GetExtensionURL();
dvander@322
   274
}
dvander@322
   275
dvander@322
   276
const char *SDKExtension::GetVersion()
dvander@322
   277
{
dvander@322
   278
	return GetExtensionVerString();
dvander@322
   279
}
dvander@322
   280
dvander@322
   281
bool SDKExtension::SDK_OnMetamodLoad(char *error, size_t err_max, bool late)
dvander@322
   282
{
dvander@322
   283
	return true;
dvander@322
   284
}
dvander@322
   285
dvander@322
   286
bool SDKExtension::SDK_OnMetamodUnload(char *error, size_t err_max)
dvander@322
   287
{
dvander@322
   288
	return true;
dvander@322
   289
}
dvander@322
   290
dvander@322
   291
bool SDKExtension::SDK_OnMetamodPauseChange(bool paused, char *error, size_t err_max)
dvander@322
   292
{
dvander@322
   293
	return true;
dvander@322
   294
}
dvander@322
   295
dvander@322
   296
#endif
dvander@356
   297
dvander@356
   298
/* Overload a few things to prevent libstdc++ linking */
dvander@356
   299
#if defined __linux__
dvander@356
   300
extern "C" void __cxa_pure_virtual(void)
dvander@356
   301
{
dvander@356
   302
}
dvander@356
   303
dvander@356
   304
void *operator new(size_t size)
dvander@356
   305
{
dvander@356
   306
	return malloc(size);
dvander@356
   307
}
dvander@356
   308
dvander@356
   309
void *operator new[](size_t size) 
dvander@356
   310
{
dvander@356
   311
	return malloc(size);
dvander@356
   312
}
dvander@356
   313
dvander@356
   314
void operator delete(void *ptr) 
dvander@356
   315
{
dvander@356
   316
	free(ptr);
dvander@356
   317
}
dvander@356
   318
dvander@356
   319
void operator delete[](void * ptr)
dvander@356
   320
{
dvander@356
   321
	free(ptr);
dvander@356
   322
}
dvander@356
   323
#endif
dvander@356
   324