dvander@498: /** dvander@498: * vim: set ts=4 : dvander@498: * =============================================================== dvander@498: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@498: * =============================================================== dvander@498: * dvander@498: * This file is not open source and may not be copied without explicit dvander@498: * written permission of AlliedModders LLC. This file may not be redistributed dvander@498: * in whole or significant part. dvander@498: * For information, see LICENSE.txt or http://www.sourcemod.net/license.php dvander@498: * dvander@498: * Version: $Id$ dvander@498: */ dvander@498: dvander@498: #ifndef _INCLUDE_SOURCEMOD_CCONCMDMANAGER_H_ dvander@498: #define _INCLUDE_SOURCEMOD_CCONCMDMANAGER_H_ dvander@498: dvander@498: #include "sm_globals.h" dvander@498: #include "sourcemm_api.h" dvander@498: #include "ForwardSys.h" dvander@498: #include "sm_trie.h" dvander@498: #include dvander@498: #include dvander@498: dvander@498: using namespace SourceHook; dvander@498: dvander@498: enum CmdType dvander@498: { dvander@498: Cmd_Server, dvander@498: Cmd_Console, dvander@498: Cmd_Client dvander@498: }; dvander@498: dvander@498: struct ConCmdInfo dvander@498: { dvander@498: ConCmdInfo() dvander@498: { dvander@498: sourceMod = false; dvander@498: pCmd = NULL; dvander@498: srvhooks = NULL; dvander@500: conhooks = NULL; dvander@498: } dvander@498: bool sourceMod; /**< Determines whether or not concmd was created by a SourceMod plugin */ dvander@498: ConCommand *pCmd; /**< Pointer to the command itself */ dvander@498: IChangeableForward *srvhooks; /**< Hooks on this name as a server command */ dvander@500: IChangeableForward *conhooks; /**< Hooks on this name as a console command */ dvander@498: }; dvander@498: dvander@498: class CConCmdManager : dvander@498: public SMGlobalClass, dvander@498: public IRootConsoleCommand, dvander@498: public IPluginsListener dvander@498: { dvander@498: friend void CommandCallback(); dvander@498: public: dvander@498: CConCmdManager(); dvander@498: ~CConCmdManager(); dvander@498: public: //SMGlobalClass dvander@498: void OnSourceModAllInitialized(); dvander@498: void OnSourceModShutdown(); dvander@498: public: //IPluginsListener dvander@498: void OnPluginLoaded(IPlugin *plugin); dvander@498: void OnPluginDestroyed(IPlugin *plugin); dvander@498: public: //IRootConsoleCommand dvander@498: void OnRootConsoleCommand(const char *command, unsigned int argcount); dvander@498: public: dvander@498: void AddServerCommand(IPluginFunction *pFunction, const char *name, const char *description, int flags); dvander@500: void AddConsoleCommand(IPluginFunction *pFunction, const char *name, const char *description, int flags); dvander@500: ResultType DispatchClientCommand(int client, ResultType type); dvander@498: private: dvander@498: void InternalDispatch(); dvander@498: ConCmdInfo *AddOrFindCommand(const char *name, const char *description, int flags); dvander@498: void SetCommandClient(int client); dvander@498: void AddToCmdList(ConCmdInfo *info); dvander@498: void RemoveConCmd(ConCmdInfo *info); dvander@498: private: dvander@498: Trie *m_pCmds; dvander@498: List m_CmdList; dvander@498: int m_CmdClient; dvander@498: }; dvander@498: dvander@498: extern CConCmdManager g_ConCmds; dvander@498: dvander@498: #endif // _INCLUDE_SOURCEMOD_CCONCMDMANAGER_H_ dvander@498: