DDNet documentation
Loading...
Searching...
No Matches
console.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef ENGINE_SHARED_CONSOLE_H
4#define ENGINE_SHARED_CONSOLE_H
5
6#include "memheap.h"
7
8#include <engine/console.h>
9#include <engine/storage.h>
10
11#include <optional>
12#include <vector>
13
14class CConsole : public IConsole
15{
16 class CCommand : public ICommandInfo
17 {
20
21 public:
22 const char *m_pName;
23 const char *m_pHelp;
24 const char *m_pParams;
25
26 const CCommand *Next() const { return m_pNext; }
27 CCommand *Next() { return m_pNext; }
28 void SetNext(CCommand *pNext) { m_pNext = pNext; }
30 bool m_Temp;
33
34 const char *Name() const override { return m_pName; }
35 const char *Help() const override { return m_pHelp; }
36 const char *Params() const override { return m_pParams; }
37 int Flags() const override { return m_Flags; }
38 EAccessLevel GetAccessLevel() const override { return m_AccessLevel; }
39 void SetAccessLevel(EAccessLevel AccessLevel);
40 };
41
50
53 const char *m_apStrokeStr[2];
55
57 {
58 public:
59 const char *m_pFilename;
61 };
62
65
68
69 static void TraverseChain(FCommandCallback *ppfnCallback, void **ppUserData);
70
71 static void Con_Chain(IResult *pResult, void *pUserData);
72 static void Con_Echo(IResult *pResult, void *pUserData);
73 static void Con_Exec(IResult *pResult, void *pUserData);
74 static void ConCommandAccess(IResult *pResult, void *pUser);
75 static void ConCommandStatus(IConsole::IResult *pResult, void *pUser);
76 void PrintCommandList(EAccessLevel MinAccessLevel, int ExcludeFlagMask);
77
78 void ExecuteLineStroked(int Stroke, const char *pStr, int ClientId = IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons = true) override;
79
82
85
88
91
92 bool CanUseCommand(int ClientId, const IConsole::ICommandInfo *pCommand) const;
93
94 enum
95 {
98 };
99
100 class CResult : public IResult
101 {
102 public:
105
106 const char *m_pCommand;
107 const char *m_apArgs[MAX_PARTS];
108
109 CResult(int ClientId);
110 CResult(const CResult &Other);
111
112 void AddArgument(const char *pArg);
113 void RemoveArgument(unsigned Index) override;
114
115 const char *GetString(unsigned Index) const override;
116 int GetInteger(unsigned Index) const override;
117 float GetFloat(unsigned Index) const override;
118 ColorHSLA GetColor(unsigned Index, float DarkestLighting) const override;
119
120 // DDRace
121
123 std::optional<int> m_VictimId;
124 void ResetVictim();
125 void SetVictim(int Victim);
126 void SetVictim(const char *pVictim);
127 int GetVictim() const override;
128 };
129
130 int ParseStart(CResult *pResult, const char *pString, int Length);
131
132 enum
133 {
139 };
140
141 int ParseArgs(CResult *pResult, const char *pFormat);
142
143 /*
144 this function will set pFormat to the next parameter (i,s,r,v,?) it contains and
145 return the parameter; descriptions in brackets like [file] will be skipped;
146 returns '\0' if there is no next parameter; expects pFormat to point at a
147 parameter
148 */
149 char NextParam(const char *&pFormat);
150
152 {
153 public:
156 CExecutionQueueEntry(CCommand *pCommand, const CResult &Result) :
157 m_pCommand(pCommand),
158 m_Result(Result) {}
159 };
160 std::vector<CExecutionQueueEntry> m_vExecutionQueue;
161
162 void AddCommandSorted(CCommand *pCommand);
163 CCommand *FindCommand(const char *pName, int FlagMask);
164
166
167public:
168 CConsole(int FlagMask);
169 ~CConsole() override;
170
171 void Init() override;
172 const ICommandInfo *FirstCommandInfo(int ClientId, int FlagMask) const override;
173 const ICommandInfo *NextCommandInfo(const IConsole::ICommandInfo *pInfo, int ClientId, int FlagMask) const override;
174 const ICommandInfo *GetCommandInfo(const char *pName, int FlagMask, bool Temp) override;
175 int PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback, void *pUser) override;
176
177 void ParseArguments(int NumArgs, const char **ppArguments) override;
178 void Register(const char *pName, const char *pParams, int Flags, FCommandCallback pfnFunc, void *pUser, const char *pHelp) override;
179 void RegisterTemp(const char *pName, const char *pParams, int Flags, const char *pHelp) override;
180 void DeregisterTemp(const char *pName) override;
181 void DeregisterTempAll() override;
182 void Chain(const char *pName, FChainCommandCallback pfnChainFunc, void *pUser) override;
183 void StoreCommands(bool Store) override;
184
185 bool LineIsValid(const char *pStr) override;
186 void ExecuteLine(const char *pStr, int ClientId = IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons = true) override;
187 void ExecuteLineFlag(const char *pStr, int FlagMask, int ClientId = IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons = true) override;
188 bool ExecuteFile(const char *pFilename, int ClientId = IConsole::CLIENT_ID_UNSPECIFIED, bool LogFailure = false, int StorageType = IStorage::TYPE_ALL) override;
189
190 void Print(int Level, const char *pFrom, const char *pStr, ColorRGBA PrintColor = CONSOLE_DEFAULT_COLOR) const override;
191 void SetGetVictimsCommandCallback(FGetVictimsCommandCallback pfnCallback, void *pUser) override;
192 void SetTeeHistorianCommandCallback(FTeeHistorianCommandCallback pfnCallback, void *pUser) override;
193 void SetUnknownCommandCallback(FUnknownCommandCallback pfnCallback, void *pUser) override;
194 void SetCanUseCommandCallback(FCanUseCommandCallback pfnCallback, void *pUser) override;
195 void InitChecksum(CChecksumData *pData) const override;
196
203 static std::optional<EAccessLevel> AccessLevelToEnum(const char *pAccessLevel);
204
211 static const char *AccessLevelToString(EAccessLevel AccessLevel);
212
213 static std::optional<ColorHSLA> ColorParse(const char *pStr, float DarkestLighting);
214
215 // DDRace
216
217 static void ConUserCommandStatus(IConsole::IResult *pResult, void *pUser);
218
219 bool Cheated() const override { return m_Cheated; }
220
221 int FlagMask() const override { return m_FlagMask; }
222 void SetFlagMask(int FlagMask) override { m_FlagMask = FlagMask; }
223};
224
225#endif
Definition console.h:43
FCommandCallback m_pfnCallback
Definition console.h:46
void * m_pUserData
Definition console.h:48
void * m_pCallbackUserData
Definition console.h:47
FChainCommandCallback m_pfnChainCallback
Definition console.h:45
Definition console.h:17
EAccessLevel GetAccessLevel() const override
Definition console.h:38
CCommand * Next()
Definition console.h:27
CCommand * m_pNext
Definition console.h:19
int Flags() const override
Definition console.h:37
const char * m_pName
Definition console.h:22
void * m_pUserData
Definition console.h:32
void SetNext(CCommand *pNext)
Definition console.h:28
const char * Name() const override
Definition console.h:34
bool m_Temp
Definition console.h:30
const char * Help() const override
Definition console.h:35
FCommandCallback m_pfnCallback
Definition console.h:31
const CCommand * Next() const
Definition console.h:26
void SetAccessLevel(EAccessLevel AccessLevel)
Definition console.cpp:91
const char * Params() const override
Definition console.h:36
const char * m_pParams
Definition console.h:24
const char * m_pHelp
Definition console.h:23
EAccessLevel m_AccessLevel
Definition console.h:18
int m_Flags
Definition console.h:29
Definition console.h:57
CExecFile * m_pPrev
Definition console.h:60
const char * m_pFilename
Definition console.h:59
CCommand * m_pCommand
Definition console.h:154
CExecutionQueueEntry(CCommand *pCommand, const CResult &Result)
Definition console.h:156
CResult m_Result
Definition console.h:155
Definition console.h:101
float GetFloat(unsigned Index) const override
Definition console.cpp:76
const char * m_apArgs[MAX_PARTS]
Definition console.h:107
void AddArgument(const char *pArg)
Definition console.cpp:47
std::optional< int > m_VictimId
Definition console.h:123
void RemoveArgument(unsigned Index) override
Definition console.cpp:52
CResult(int ClientId)
Definition console.cpp:28
void SetVictim(int Victim)
Definition console.cpp:1173
char m_aStringStorage[CONSOLE_MAX_STR_LENGTH+1]
Definition console.h:103
char * m_pArgsStart
Definition console.h:104
void ResetVictim()
Definition console.cpp:1167
char m_aSpecialVictim[16]
Definition console.h:122
int GetVictim() const override
Definition console.cpp:1161
const char * m_pCommand
Definition console.h:106
ColorHSLA GetColor(unsigned Index, float DarkestLighting) const override
Definition console.cpp:84
int GetInteger(unsigned Index) const override
Definition console.cpp:68
const char * GetString(unsigned Index) const override
Definition console.cpp:61
const ICommandInfo * NextCommandInfo(const IConsole::ICommandInfo *pInfo, int ClientId, int FlagMask) const override
Definition console.cpp:107
static void ConUserCommandStatus(IConsole::IResult *pResult, void *pUser)
Definition console.cpp:862
void ParseArguments(int NumArgs, const char **ppArguments) override
Definition console.cpp:938
void SetFlagMask(int FlagMask) override
Definition console.h:222
void DeregisterTempAll() override
Definition console.cpp:1079
static std::optional< EAccessLevel > AccessLevelToEnum(const char *pAccessLevel)
Definition console.cpp:119
@ PARSEARGS_INVALID_INTEGER
Definition console.h:136
@ PARSEARGS_OK
Definition console.h:134
@ PARSEARGS_INVALID_COLOR
Definition console.h:137
@ PARSEARGS_INVALID_FLOAT
Definition console.h:138
@ PARSEARGS_MISSING_VALUE
Definition console.h:135
bool m_Cheated
Definition console.h:165
static void Con_Echo(IResult *pResult, void *pUserData)
Definition console.cpp:767
FCanUseCommandCallback m_pfnCanUseCommandCallback
Definition console.h:89
FTeeHistorianCommandCallback m_pfnTeeHistorianCommandCallback
Definition console.h:83
void StoreCommands(bool Store) override
Definition console.cpp:1132
@ MAX_PARTS
Definition console.h:97
@ CONSOLE_MAX_STR_LENGTH
Definition console.h:96
bool Cheated() const override
Definition console.h:219
bool m_StoreCommands
Definition console.h:52
void Init() override
Definition console.cpp:933
void SetUnknownCommandCallback(FUnknownCommandCallback pfnCallback, void *pUser) override
Definition console.cpp:391
void Register(const char *pName, const char *pParams, int Flags, FCommandCallback pfnFunc, void *pUser, const char *pHelp) override
Definition console.cpp:986
void Print(int Level, const char *pFrom, const char *pStr, ColorRGBA PrintColor=CONSOLE_DEFAULT_COLOR) const override
Definition console.cpp:365
void AddCommandSorted(CCommand *pCommand)
Definition console.cpp:962
CCommand * m_pFirstCommand
Definition console.h:54
~CConsole() override
Definition console.cpp:908
FGetVictimsCommandCallback m_pfnGetVictimsCommandCallback
Definition console.h:80
void SetGetVictimsCommandCallback(FGetVictimsCommandCallback pfnCallback, void *pUser) override
Definition console.cpp:379
void * m_pUnknownCommandUserdata
Definition console.h:87
CConsole(int FlagMask)
Definition console.cpp:878
static void TraverseChain(FCommandCallback *ppfnCallback, void **ppUserData)
Definition console.cpp:868
const ICommandInfo * FirstCommandInfo(int ClientId, int FlagMask) const override
Definition console.cpp:96
int m_FlagMask
Definition console.h:51
int ParseStart(CResult *pResult, const char *pString, int Length)
Definition console.cpp:161
const char * m_apStrokeStr[2]
Definition console.h:53
static const char * AccessLevelToString(EAccessLevel AccessLevel)
Definition console.cpp:143
FUnknownCommandCallback m_pfnUnknownCommandCallback
Definition console.h:86
void DeregisterTemp(const char *pName) override
Definition console.cpp:1047
void * m_pTeeHistorianCommandUserdata
Definition console.h:84
int ParseArgs(CResult *pResult, const char *pFormat)
Definition console.cpp:186
bool CanUseCommand(int ClientId, const IConsole::ICommandInfo *pCommand) const
Definition console.cpp:667
int FlagMask() const override
Definition console.h:221
void RegisterTemp(const char *pName, const char *pParams, int Flags, const char *pHelp) override
Definition console.cpp:1013
CExecFile * m_pFirstExec
Definition console.h:63
static void ConCommandAccess(IResult *pResult, void *pUser)
Definition console.cpp:777
void SetCanUseCommandCallback(FCanUseCommandCallback pfnCallback, void *pUser) override
Definition console.cpp:397
void ExecuteLineStroked(int Stroke, const char *pStr, int ClientId=IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons=true) override
Definition console.cpp:478
void Chain(const char *pName, FChainCommandCallback pfnChainFunc, void *pUser) override
Definition console.cpp:1107
void * m_pCanUseCommandUserData
Definition console.h:90
CCommand * FindCommand(const char *pName, int FlagMask)
Definition console.cpp:692
void PrintCommandList(EAccessLevel MinAccessLevel, int ExcludeFlagMask)
Definition console.cpp:816
const ICommandInfo * GetCommandInfo(const char *pName, int FlagMask, bool Temp) override
Definition console.cpp:1145
void * m_pGetVictimsCommandUserData
Definition console.h:81
bool LineIsValid(const char *pStr) override
Definition console.cpp:421
void InitChecksum(CChecksumData *pData) const override
Definition console.cpp:403
char NextParam(const char *&pFormat)
Definition console.cpp:307
static void Con_Exec(IResult *pResult, void *pUserData)
Definition console.cpp:772
bool ExecuteFile(const char *pFilename, int ClientId=IConsole::CLIENT_ID_UNSPECIFIED, bool LogFailure=false, int StorageType=IStorage::TYPE_ALL) override
Definition console.cpp:720
void ExecuteLineFlag(const char *pStr, int FlagMask, int ClientId=IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons=true) override
Definition console.cpp:712
CCommand * m_pRecycleList
Definition console.h:66
int PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback, void *pUser) override
Definition console.cpp:675
void ExecuteLine(const char *pStr, int ClientId=IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons=true) override
Definition console.cpp:706
static std::optional< ColorHSLA > ColorParse(const char *pStr, float DarkestLighting)
Definition console.cpp:1191
IStorage * m_pStorage
Definition console.h:64
void SetTeeHistorianCommandCallback(FTeeHistorianCommandCallback pfnCallback, void *pUser) override
Definition console.cpp:385
static void ConCommandStatus(IConsole::IResult *pResult, void *pUser)
Definition console.cpp:850
static void Con_Chain(IResult *pResult, void *pUserData)
Definition console.cpp:1101
CHeap m_TempCommands
Definition console.h:67
std::vector< CExecutionQueueEntry > m_vExecutionQueue
Definition console.h:160
Definition memheap.h:11
Definition color.h:146
Definition color.h:183
Definition console.h:92
Definition console.h:66
IResult(int ClientId)
Definition console.h:71
Definition console.h:22
static bool EmptyUnknownCommandCallback(const char *pCommand, void *pUser)
Definition console.h:111
@ CLIENT_ID_UNSPECIFIED
Definition console.h:49
EAccessLevel
Definition console.h:57
bool(* FUnknownCommandCallback)(const char *pCommand, void *pUser)
Definition console.h:107
void(* FChainCommandCallback)(IResult *pResult, void *pUserData, FCommandCallback pfnCallback, void *pCallbackUserData)
Definition console.h:106
bool(* FCanUseCommandCallback)(int ClientId, const ICommandInfo *pCommand, void *pUser)
Definition console.h:108
void(* FPossibleCallback)(int Index, const char *pCmd, void *pUser)
Definition console.h:104
void(* FCommandCallback)(IResult *pResult, void *pUserData)
Definition console.h:105
std::optional< std::vector< int > >(* FGetVictimsCommandCallback)(int ClientId, const char *pVictim, void *pUser)
Definition console.h:102
void(* FTeeHistorianCommandCallback)(int ClientId, int FlagMask, const char *pCmd, IResult *pResult, void *pUser)
Definition console.h:103
Definition storage.h:21
@ TYPE_ALL
Definition storage.h:27
static constexpr ColorRGBA CONSOLE_DEFAULT_COLOR
Definition console.h:16
Definition checksum.h:7