Clean up ConCmdManager (bug 5900, r=fyren).

This commit is contained in:
David Anderson
2013-08-31 11:51:23 -07:00
parent 435f2b8e39
commit ba927964c8
4 changed files with 190 additions and 361 deletions
+26 -18
View File
@@ -43,15 +43,11 @@
#include "concmd_cleaner.h"
#include <sm_stringhashmap.h>
#include <am-utility.h>
#include <am-inlinelist.h>
#include <am-linkedlist.h>
using namespace SourceHook;
enum CmdType
{
Cmd_Server,
Cmd_Admin,
};
struct AdminCmdInfo
{
AdminCmdInfo()
@@ -65,30 +61,44 @@ struct AdminCmdInfo
FlagBits eflags; /* effective flags */
};
struct CmdHook
struct ConCmdInfo;
struct CmdHook : public ke::InlineListNode<CmdHook>
{
CmdHook()
enum Type {
Server,
Client
};
CmdHook(Type type, ConCmdInfo *cmd, IPluginFunction *fun, const char *description)
: type(type),
info(cmd),
pf(fun),
helptext(description)
{
pf = NULL;
pAdmin = NULL;
}
IPluginFunction *pf; /* function hook */
String helptext; /* help text */
AdminCmdInfo *pAdmin; /* admin requirements, if any */
Type type;
ConCmdInfo *info;
IPluginFunction *pf; /* function hook */
ke::AString helptext; /* help text */
ke::AutoPtr<AdminCmdInfo> admin; /* admin requirements, if any */
};
typedef ke::InlineList<CmdHook> CmdHookList;
struct ConCmdInfo
{
ConCmdInfo()
{
sourceMod = false;
pCmd = NULL;
eflags = 0;
}
bool sourceMod; /**< Determines whether or not concmd was created by a SourceMod plugin */
ConCommand *pCmd; /**< Pointer to the command itself */
List<CmdHook *> srvhooks; /**< Hooks as a server command */
List<CmdHook *> conhooks; /**< Hooks as a console command */
AdminCmdInfo admin; /**< Admin info, if any */
CmdHookList hooks; /**< Hook list */
FlagBits eflags; /**< Effective admin flags */
};
typedef List<ConCmdInfo *> ConCmdList;
@@ -139,8 +149,6 @@ private:
void SetCommandClient(int client);
void AddToCmdList(ConCmdInfo *info);
void RemoveConCmd(ConCmdInfo *info, const char *cmd, bool is_read_safe, bool untrack);
void RemoveConCmds(List<CmdHook *> &cmdlist);
void RemoveConCmds(List<CmdHook *> &cmdlist, IPluginContext *pContext);
bool CheckAccess(int client, const char *cmd, AdminCmdInfo *pAdmin);
// Case insensitive