core/CConCmdManager.h
author David Anderson <dvander@alliedmods.net>
Thu Feb 15 22:17:01 2007 +0000 (2007-02-15)
changeset 498 b404e8154de4
child 500 868e9b19a872
permissions -rw-r--r--
implemented+tested RegServerCmd()
renamed internal project console stuff
dvander@498
     1
/**
dvander@498
     2
 * vim: set ts=4 :
dvander@498
     3
 * ===============================================================
dvander@498
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@498
     5
 * ===============================================================
dvander@498
     6
 *
dvander@498
     7
 * This file is not open source and may not be copied without explicit
dvander@498
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@498
     9
 * in whole or significant part.
dvander@498
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@498
    11
 *
dvander@498
    12
 * Version: $Id$
dvander@498
    13
 */
dvander@498
    14
dvander@498
    15
#ifndef _INCLUDE_SOURCEMOD_CCONCMDMANAGER_H_
dvander@498
    16
#define _INCLUDE_SOURCEMOD_CCONCMDMANAGER_H_
dvander@498
    17
dvander@498
    18
#include "sm_globals.h"
dvander@498
    19
#include "sourcemm_api.h"
dvander@498
    20
#include "ForwardSys.h"
dvander@498
    21
#include "sm_trie.h"
dvander@498
    22
#include <sh_list.h>
dvander@498
    23
#include <IRootConsoleMenu.h>
dvander@498
    24
dvander@498
    25
using namespace SourceHook;
dvander@498
    26
dvander@498
    27
enum CmdType
dvander@498
    28
{
dvander@498
    29
	Cmd_Server,
dvander@498
    30
	Cmd_Console,
dvander@498
    31
	Cmd_Client
dvander@498
    32
};
dvander@498
    33
dvander@498
    34
struct ConCmdInfo
dvander@498
    35
{
dvander@498
    36
	ConCmdInfo()
dvander@498
    37
	{
dvander@498
    38
		sourceMod = false;
dvander@498
    39
		pCmd = NULL;
dvander@498
    40
		srvhooks = NULL;
dvander@498
    41
	}
dvander@498
    42
	bool sourceMod;					/**< Determines whether or not concmd was created by a SourceMod plugin */
dvander@498
    43
	ConCommand *pCmd;				/**< Pointer to the command itself */
dvander@498
    44
	IChangeableForward *srvhooks;	/**< Hooks on this name as a server command */
dvander@498
    45
};
dvander@498
    46
dvander@498
    47
class CConCmdManager :
dvander@498
    48
	public SMGlobalClass,
dvander@498
    49
	public IRootConsoleCommand,
dvander@498
    50
	public IPluginsListener
dvander@498
    51
{
dvander@498
    52
	friend void CommandCallback();
dvander@498
    53
public:
dvander@498
    54
	CConCmdManager();
dvander@498
    55
	~CConCmdManager();
dvander@498
    56
public: //SMGlobalClass
dvander@498
    57
	void OnSourceModAllInitialized();
dvander@498
    58
	void OnSourceModShutdown();
dvander@498
    59
public: //IPluginsListener
dvander@498
    60
	void OnPluginLoaded(IPlugin *plugin);
dvander@498
    61
	void OnPluginDestroyed(IPlugin *plugin);
dvander@498
    62
public: //IRootConsoleCommand
dvander@498
    63
	void OnRootConsoleCommand(const char *command, unsigned int argcount);
dvander@498
    64
public:
dvander@498
    65
	void AddServerCommand(IPluginFunction *pFunction, const char *name, const char *description, int flags);
dvander@498
    66
private:
dvander@498
    67
	void InternalDispatch();
dvander@498
    68
	ConCmdInfo *AddOrFindCommand(const char *name, const char *description, int flags);
dvander@498
    69
	void SetCommandClient(int client);
dvander@498
    70
	void AddToCmdList(ConCmdInfo *info);
dvander@498
    71
	void RemoveConCmd(ConCmdInfo *info);
dvander@498
    72
private:
dvander@498
    73
	Trie *m_pCmds;
dvander@498
    74
	List<ConCmdInfo *> m_CmdList;
dvander@498
    75
	int m_CmdClient;
dvander@498
    76
};
dvander@498
    77
dvander@498
    78
extern CConCmdManager g_ConCmds;
dvander@498
    79
dvander@498
    80
#endif // _INCLUDE_SOURCEMOD_CCONCMDMANAGER_H_
dvander@498
    81