core/logic/intercom.h
author David Anderson <dvander@alliedmods.net>
Sat Feb 16 15:57:00 2013 -0800 (2013-02-16)
changeset 3792 d8a07e40bcb6
parent 3791 47e1ee9cea86
child 3800 21dfb9897341
permissions -rw-r--r--
Move DebugReporter from core to logic (bug 5607, r=psychonic).
dvander@2726
     1
/**
dvander@2726
     2
 * vim: set ts=4 :
dvander@2726
     3
 * =============================================================================
dvander@2726
     4
 * SourceMod
dvander@2726
     5
 * Copyright (C) 2004-2009 AlliedModders LLC.  All rights reserved.
dvander@2726
     6
 * =============================================================================
dvander@2726
     7
 *
dvander@2726
     8
 * This program is free software; you can redistribute it and/or modify it under
dvander@2726
     9
 * the terms of the GNU General Public License, version 3.0, as published by the
dvander@2726
    10
 * Free Software Foundation.
dvander@2726
    11
 * 
dvander@2726
    12
 * This program is distributed in the hope that it will be useful, but WITHOUT
dvander@2726
    13
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@2726
    14
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
dvander@2726
    15
 * details.
dvander@2726
    16
 *
dvander@2726
    17
 * You should have received a copy of the GNU General Public License along with
dvander@2726
    18
 * this program.  If not, see <http://www.gnu.org/licenses/>.
dvander@2726
    19
 *
dvander@2726
    20
 * As a special exception, AlliedModders LLC gives you permission to link the
dvander@2726
    21
 * code of this program (as well as its derivative works) to "Half-Life 2," the
dvander@2726
    22
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
dvander@2726
    23
 * by the Valve Corporation.  You must obey the GNU General Public License in
dvander@2726
    24
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
dvander@2726
    25
 * this exception to all derivative works.  AlliedModders LLC defines further
dvander@2726
    26
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
dvander@2726
    27
 * or <http://www.sourcemod.net/license.php>.
dvander@2726
    28
 *
dvander@2726
    29
 * Version: $Id$
dvander@2726
    30
 */
dvander@2726
    31
dvander@2726
    32
#include <sp_vm_api.h>
dvander@2726
    33
#include <IHandleSys.h>
dvander@2726
    34
#include <IShareSys.h>
dvander@2726
    35
dvander@2726
    36
#ifndef _INCLUDE_SOURCEMOD_INTERCOM_H_
dvander@2726
    37
#define _INCLUDE_SOURCEMOD_INTERCOM_H_
dvander@2726
    38
dvander@2726
    39
using namespace SourceMod;
dvander@2726
    40
dvander@2726
    41
/**
dvander@2726
    42
 * Add 1 to the RHS of this expression to bump the intercom file
dvander@2726
    43
 * This is to prevent mismatching core/logic binaries
dvander@2726
    44
 */
dvander@3792
    45
#define SM_LOGIC_MAGIC		(0x0F47C0DE - 18)
dvander@2726
    46
dvander@2726
    47
#if defined SM_LOGIC
dvander@2726
    48
class IVEngineServer
dvander@2726
    49
#else
dvander@2726
    50
class IVEngineServer_Logic
dvander@2726
    51
#endif
dvander@2726
    52
{
dvander@2726
    53
public:
dvander@2726
    54
	virtual bool IsMapValid(const char *map) = 0;
dvander@3001
    55
	virtual void ServerCommand(const char *cmd) = 0;
dvander@2726
    56
};
dvander@2726
    57
dvander@2726
    58
namespace SourceMod
dvander@2726
    59
{
dvander@2726
    60
	class ISourceMod;
dvander@2726
    61
	class ILibrarySys;
dvander@2726
    62
	class ITextParsers;
dvander@2726
    63
	class IThreader;
dvander@2728
    64
	class IRootConsole;
dvander@2728
    65
	class IPluginManager;
dvander@2730
    66
	class IForwardManager;
dvander@2989
    67
	class ITimerSystem;
dvander@2996
    68
	class IPlayerManager;
dvander@3000
    69
	class IAdminSystem;
dvander@3001
    70
	class IGameHelpers;
dvander@3004
    71
	class IPhraseCollection;
dvander@3004
    72
	class ITranslator;
dvander@3010
    73
	class IGameConfig;
dvander@2726
    74
}
dvander@2726
    75
dvander@2726
    76
class IVEngineServer;
dvander@2726
    77
class ConVar;
dvander@2726
    78
dvander@2989
    79
struct ServerGlobals
dvander@2989
    80
{
dvander@2989
    81
	const double *universalTime;
dvander@2989
    82
	float *interval_per_tick;
dvander@2989
    83
	float *frametime;
dvander@2989
    84
};
dvander@2989
    85
dvander@2726
    86
struct sm_core_t
dvander@2726
    87
{
dvander@2726
    88
	/* Objects */
dvander@2726
    89
	IHandleSys 		*handlesys;
dvander@2726
    90
	IdentityToken_t *core_ident;
dvander@2726
    91
	ISourceMod		*sm;
dvander@2726
    92
	ILibrarySys		*libsys;
dvander@2726
    93
	IVEngineServer	*engine;
dvander@2726
    94
	IShareSys		*sharesys;
dvander@2728
    95
	IRootConsole	*rootmenu;
dvander@2728
    96
	IPluginManager	*pluginsys;
dvander@2730
    97
	IForwardManager	*forwardsys;
dvander@2989
    98
	ITimerSystem    *timersys;
dvander@2996
    99
	IPlayerManager  *playerhelpers;
dvander@3000
   100
	IAdminSystem	*adminsys;
dvander@3010
   101
	IGameHelpers    *gamehelpers;
dvander@3792
   102
	ISourcePawnEngine *spe1;
dvander@3792
   103
	ISourcePawnEngine2 *spe2;
dvander@2726
   104
	/* Functions */
dvander@2726
   105
	void			(*AddNatives)(sp_nativeinfo_t* nlist);
dvander@2726
   106
	ConVar *		(*FindConVar)(const char*);
dvander@2726
   107
	unsigned int	(*strncopy)(char*, const char*, size_t);
dvander@2726
   108
	char *			(*TrimWhitespace)(char *, size_t &);
dvander@2726
   109
	void			(*LogError)(const char*, ...);
dvander@3791
   110
	void			(*Log)(const char*, ...);
dvander@3791
   111
	void			(*LogToFile)(FILE *fp, const char*, ...);
dvander@3791
   112
	void			(*LogToGame)(const char *message);
dvander@3791
   113
	bool			(*FileExists)(const char *path);
dvander@2726
   114
	const char *	(*GetCvarString)(ConVar*);
dvander@2726
   115
	size_t			(*Format)(char*, size_t, const char*, ...);
dvander@3792
   116
	size_t			(*FormatArgs)(char*, size_t, const char*,va_list ap);
dvander@3004
   117
	bool			(*gnprintf)(char *, size_t, const char *, IPhraseCollection *, void **,
dvander@3004
   118
	                            unsigned int, unsigned int &, size_t *, const char **);
dvander@3006
   119
	size_t			(*atcprintf)(char *, size_t, const char *, IPluginContext *, const cell_t *, int *);
dvander@3010
   120
	bool            (*GetGameName)(char *buffer, size_t maxlength);
dvander@3010
   121
	const char *    (*GetGameDescription)();
dvander@3010
   122
	const char *    (*GetSourceEngineName)();
dvander@3010
   123
	bool            (*SymbolsAreHidden)();
fyrenmoo@3366
   124
	const char *	(*GetCoreConfigValue)(const char*);
dvander@2989
   125
	/* Data */
dvander@2989
   126
	ServerGlobals   *serverGlobals;
dvander@3010
   127
	void *          serverFactory;
dvander@3010
   128
	void *          engineFactory;
skamonkey@3320
   129
	void *          matchmakingDSFactory;
dvander@2726
   130
};
dvander@2726
   131
dvander@2726
   132
struct sm_logic_t
dvander@2726
   133
{
dvander@2726
   134
	SMGlobalClass	*head;
dvander@2726
   135
	IThreader		*threader;
dvander@2728
   136
	IProfiler		*profiler;
dvander@3004
   137
	ITranslator		*translator;
dvander@3002
   138
	const char      *(*stristr)(const char *, const char *);
dvander@3004
   139
	bool			(*CoreTranslate)(char *,  size_t, const char *, unsigned int, size_t *, ...);
dvander@3004
   140
	void            (*AddCorePhraseFile)(const char *filename);
dvander@3005
   141
	unsigned int	(*ReplaceAll)(char*, size_t, const char *, const char *, bool);
dvander@3005
   142
	char            *(*ReplaceEx)(char *, size_t, const char *, size_t, const char *, size_t, bool);
dvander@3010
   143
	size_t          (*DecodeHexString)(unsigned char *, size_t, const char *);
dvander@3010
   144
	IGameConfig *   (*GetCoreGameConfig)();
dvander@3791
   145
	bool			(*OnLogPrint)(const char *msg);	// true to supercede
dvander@3792
   146
	IDebugListener   *debugger;
dvander@3792
   147
	void			(*GenerateError)(IPluginContext *, cell_t, int, const char *, ...);
dvander@2726
   148
};
dvander@2726
   149
dvander@2726
   150
typedef void (*LogicInitFunction)(const sm_core_t *core, sm_logic_t *logic);
dvander@2726
   151
typedef LogicInitFunction (*LogicLoadFunction)(uint32_t magic);
dvander@2726
   152
typedef ITextParsers *(*GetITextParsers)();
dvander@2726
   153
dvander@2726
   154
#endif /* _INCLUDE_SOURCEMOD_INTERCOM_H_ */
dvander@2726
   155