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 bool TakesClientId() const override;
38 int Flags() const override { return m_Flags; }
39 EAccessLevel GetAccessLevel() const override { return m_AccessLevel; }
40 void SetAccessLevel(EAccessLevel AccessLevel);
41 };
42
51
54 const char *m_apStrokeStr[2];
56
58 {
59 public:
60 const char *m_pFilename;
62 };
63
66
69
70 static void TraverseChain(FCommandCallback *ppfnCallback, void **ppUserData);
71
72 static void Con_Chain(IResult *pResult, void *pUserData);
73 static void Con_Echo(IResult *pResult, void *pUserData);
74 static void Con_Exec(IResult *pResult, void *pUserData);
75 static void ConCommandAccess(IResult *pResult, void *pUser);
76 static void ConCommandStatus(IConsole::IResult *pResult, void *pUser);
77 void PrintCommandList(EAccessLevel MinAccessLevel, int ExcludeFlagMask);
78
79 void ExecuteLineStroked(int Stroke, const char *pStr, int ClientId = IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons = true) override;
80
83
86
89
92
93 bool CanUseCommand(int ClientId, const IConsole::ICommandInfo *pCommand) const;
94
95 enum
96 {
99 };
100
101 class CResult : public IResult
102 {
103 public:
106
107 const char *m_pCommand;
108 const char *m_apArgs[MAX_PARTS];
109
110 CResult(int ClientId);
111 CResult(const CResult &Other);
112
113 void AddArgument(const char *pArg);
114 void RemoveArgument(unsigned Index) override;
115
116 const char *GetString(unsigned Index) const override;
117 int GetInteger(unsigned Index) const override;
118 float GetFloat(unsigned Index) const override;
119 ColorHSLA GetColor(unsigned Index, float DarkestLighting) const override;
120
121 // DDRace
122
124 {
125 public:
126 static constexpr unsigned MAX_VICTIM_LENGTH = 16;
127 // symbolic victim like "me" or "all", resolved to ids before the command callback runs
129 std::optional<int> m_Id;
130 };
131 std::vector<CVictim> m_vVictims;
132 void AddVictim(const char *pVictim);
133 void SetVictim(unsigned Slot, int Victim);
134 int GetVictim(unsigned Slot) const override;
135 };
136
137 int ParseStart(CResult *pResult, const char *pString, int Length);
138
139 enum
140 {
146 };
147
148 int ParseArgs(CResult *pResult, const char *pFormat);
149
150 /*
151 this function will set pFormat to the next parameter it contains and
152 return the parameter; descriptions in brackets like [file] will be skipped;
153 returns '\0' if there is no next parameter; expects pFormat to point at a
154 parameter
155 */
156 static char NextParam(const char *&pFormat);
157
159 {
160 public:
163 CExecutionQueueEntry(CCommand *pCommand, const CResult &Result) :
164 m_pCommand(pCommand),
165 m_Result(Result) {}
166 };
167 std::vector<CExecutionQueueEntry> m_vExecutionQueue;
168
169 void AddCommandSorted(CCommand *pCommand);
170 CCommand *FindCommand(const char *pName, int FlagMask);
171
173
174public:
175 CConsole(int FlagMask);
176 ~CConsole() override;
177
178 void Init() override;
179 const ICommandInfo *FirstCommandInfo(int ClientId, int FlagMask) const override;
180 const ICommandInfo *NextCommandInfo(const IConsole::ICommandInfo *pInfo, int ClientId, int FlagMask) const override;
181 const ICommandInfo *GetCommandInfo(const char *pName, int FlagMask, bool Temp) override;
182 int PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback, void *pUser) override;
183
184 void ParseArguments(int NumArgs, const char **ppArguments) override;
185 void Register(const char *pName, const char *pParams, int Flags, FCommandCallback pfnFunc, void *pUser, const char *pHelp) override;
186 void RegisterTemp(const char *pName, const char *pParams, int Flags, const char *pHelp) override;
187 void DeregisterTemp(const char *pName) override;
188 void DeregisterTempAll() override;
189 void Chain(const char *pName, FChainCommandCallback pfnChainFunc, void *pUser) override;
190 void StoreCommands(bool Store) override;
191
192 bool LineIsValid(const char *pStr) override;
193 void ExecuteLine(const char *pStr, int ClientId = IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons = true) override;
194 void ExecuteLineFlag(const char *pStr, int FlagMask, int ClientId = IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons = true) override;
195 bool ExecuteFile(const char *pFilename, int ClientId = IConsole::CLIENT_ID_UNSPECIFIED, bool LogFailure = false, int StorageType = IStorage::TYPE_ALL) override;
196
197 void Print(int Level, const char *pFrom, const char *pStr, ColorRGBA PrintColor = CONSOLE_DEFAULT_COLOR) const override;
198 void SetGetVictimsCommandCallback(FGetVictimsCommandCallback pfnCallback, void *pUser) override;
199 void SetTeeHistorianCommandCallback(FTeeHistorianCommandCallback pfnCallback, void *pUser) override;
200 void SetUnknownCommandCallback(FUnknownCommandCallback pfnCallback, void *pUser) override;
201 void SetCanUseCommandCallback(FCanUseCommandCallback pfnCallback, void *pUser) override;
202 void InitChecksum(CChecksumData *pData) const override;
203
210 static std::optional<EAccessLevel> AccessLevelToEnum(const char *pAccessLevel);
211
218 static const char *AccessLevelToString(EAccessLevel AccessLevel);
219
220 static std::optional<ColorHSLA> ColorParse(const char *pStr, float DarkestLighting);
221
222 // DDRace
223
224 static void ConUserCommandStatus(IConsole::IResult *pResult, void *pUser);
225
226 bool Cheated() const override { return m_Cheated; }
227
228 int FlagMask() const override { return m_FlagMask; }
229 void SetFlagMask(int FlagMask) override { m_FlagMask = FlagMask; }
230};
231
232#endif
Definition console.h:44
FCommandCallback m_pfnCallback
Definition console.h:47
void * m_pUserData
Definition console.h:49
void * m_pCallbackUserData
Definition console.h:48
FChainCommandCallback m_pfnChainCallback
Definition console.h:46
Definition console.h:17
EAccessLevel GetAccessLevel() const override
Definition console.h:39
CCommand * Next()
Definition console.h:27
CCommand * m_pNext
Definition console.h:19
int Flags() const override
Definition console.h:38
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:104
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
bool TakesClientId() const override
Definition console.cpp:93
int m_Flags
Definition console.h:29
Definition console.h:58
CExecFile * m_pPrev
Definition console.h:61
const char * m_pFilename
Definition console.h:60
CCommand * m_pCommand
Definition console.h:161
CExecutionQueueEntry(CCommand *pCommand, const CResult &Result)
Definition console.h:163
CResult m_Result
Definition console.h:162
Definition console.h:124
char m_aSpecialVictim[MAX_VICTIM_LENGTH]
Definition console.h:128
std::optional< int > m_Id
Definition console.h:129
static constexpr unsigned MAX_VICTIM_LENGTH
Definition console.h:126
Definition console.h:102
float GetFloat(unsigned Index) const override
Definition console.cpp:78
const char * m_apArgs[MAX_PARTS]
Definition console.h:108
void AddArgument(const char *pArg)
Definition console.cpp:49
void RemoveArgument(unsigned Index) override
Definition console.cpp:54
void AddVictim(const char *pVictim)
Definition console.cpp:1187
CResult(int ClientId)
Definition console.cpp:29
char m_aStringStorage[CONSOLE_MAX_STR_LENGTH+1]
Definition console.h:104
void SetVictim(unsigned Slot, int Victim)
Definition console.cpp:1180
std::vector< CVictim > m_vVictims
Definition console.h:131
char * m_pArgsStart
Definition console.h:105
const char * m_pCommand
Definition console.h:107
ColorHSLA GetColor(unsigned Index, float DarkestLighting) const override
Definition console.cpp:86
int GetInteger(unsigned Index) const override
Definition console.cpp:70
const char * GetString(unsigned Index) const override
Definition console.cpp:63
int GetVictim(unsigned Slot) const override
Definition console.cpp:1173
const ICommandInfo * NextCommandInfo(const IConsole::ICommandInfo *pInfo, int ClientId, int FlagMask) const override
Definition console.cpp:120
static void ConUserCommandStatus(IConsole::IResult *pResult, void *pUser)
Definition console.cpp:882
void ParseArguments(int NumArgs, const char **ppArguments) override
Definition console.cpp:958
void SetFlagMask(int FlagMask) override
Definition console.h:229
void DeregisterTempAll() override
Definition console.cpp:1099
static std::optional< EAccessLevel > AccessLevelToEnum(const char *pAccessLevel)
Definition console.cpp:132
@ PARSEARGS_INVALID_INTEGER
Definition console.h:143
@ PARSEARGS_OK
Definition console.h:141
@ PARSEARGS_INVALID_COLOR
Definition console.h:144
@ PARSEARGS_INVALID_FLOAT
Definition console.h:145
@ PARSEARGS_MISSING_VALUE
Definition console.h:142
bool m_Cheated
Definition console.h:172
static void Con_Echo(IResult *pResult, void *pUserData)
Definition console.cpp:787
FCanUseCommandCallback m_pfnCanUseCommandCallback
Definition console.h:90
FTeeHistorianCommandCallback m_pfnTeeHistorianCommandCallback
Definition console.h:84
void StoreCommands(bool Store) override
Definition console.cpp:1144
@ MAX_PARTS
Definition console.h:98
@ CONSOLE_MAX_STR_LENGTH
Definition console.h:97
bool Cheated() const override
Definition console.h:226
bool m_StoreCommands
Definition console.h:53
void Init() override
Definition console.cpp:953
void SetUnknownCommandCallback(FUnknownCommandCallback pfnCallback, void *pUser) override
Definition console.cpp:401
void Register(const char *pName, const char *pParams, int Flags, FCommandCallback pfnFunc, void *pUser, const char *pHelp) override
Definition console.cpp:1006
void Print(int Level, const char *pFrom, const char *pStr, ColorRGBA PrintColor=CONSOLE_DEFAULT_COLOR) const override
Definition console.cpp:375
void AddCommandSorted(CCommand *pCommand)
Definition console.cpp:982
CCommand * m_pFirstCommand
Definition console.h:55
FGetVictimsCommandCallback m_pfnGetVictimsCommandCallback
Definition console.h:81
void SetGetVictimsCommandCallback(FGetVictimsCommandCallback pfnCallback, void *pUser) override
Definition console.cpp:389
void * m_pUnknownCommandUserdata
Definition console.h:88
CConsole(int FlagMask)
Definition console.cpp:898
static void TraverseChain(FCommandCallback *ppfnCallback, void **ppUserData)
Definition console.cpp:888
const ICommandInfo * FirstCommandInfo(int ClientId, int FlagMask) const override
Definition console.cpp:109
int m_FlagMask
Definition console.h:52
int ParseStart(CResult *pResult, const char *pString, int Length)
Definition console.cpp:174
const char * m_apStrokeStr[2]
Definition console.h:54
static const char * AccessLevelToString(EAccessLevel AccessLevel)
Definition console.cpp:156
FUnknownCommandCallback m_pfnUnknownCommandCallback
Definition console.h:87
void DeregisterTemp(const char *pName) override
Definition console.cpp:1067
void * m_pTeeHistorianCommandUserdata
Definition console.h:85
int ParseArgs(CResult *pResult, const char *pFormat)
Definition console.cpp:199
bool CanUseCommand(int ClientId, const IConsole::ICommandInfo *pCommand) const
Definition console.cpp:690
int FlagMask() const override
Definition console.h:228
void RegisterTemp(const char *pName, const char *pParams, int Flags, const char *pHelp) override
Definition console.cpp:1033
CExecFile * m_pFirstExec
Definition console.h:64
static void ConCommandAccess(IResult *pResult, void *pUser)
Definition console.cpp:797
void SetCanUseCommandCallback(FCanUseCommandCallback pfnCallback, void *pUser) override
Definition console.cpp:407
void ExecuteLineStroked(int Stroke, const char *pStr, int ClientId=IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons=true) override
Definition console.cpp:488
void Chain(const char *pName, FChainCommandCallback pfnChainFunc, void *pUser) override
Definition console.cpp:1127
void * m_pCanUseCommandUserData
Definition console.h:91
CCommand * FindCommand(const char *pName, int FlagMask)
Definition console.cpp:715
void PrintCommandList(EAccessLevel MinAccessLevel, int ExcludeFlagMask)
Definition console.cpp:836
const ICommandInfo * GetCommandInfo(const char *pName, int FlagMask, bool Temp) override
Definition console.cpp:1157
void * m_pGetVictimsCommandUserData
Definition console.h:82
bool LineIsValid(const char *pStr) override
Definition console.cpp:431
void InitChecksum(CChecksumData *pData) const override
Definition console.cpp:413
static char NextParam(const char *&pFormat)
Definition console.cpp:325
static void Con_Exec(IResult *pResult, void *pUserData)
Definition console.cpp:792
bool ExecuteFile(const char *pFilename, int ClientId=IConsole::CLIENT_ID_UNSPECIFIED, bool LogFailure=false, int StorageType=IStorage::TYPE_ALL) override
Definition console.cpp:743
void ExecuteLineFlag(const char *pStr, int FlagMask, int ClientId=IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons=true) override
Definition console.cpp:735
CCommand * m_pRecycleList
Definition console.h:67
int PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback, void *pUser) override
Definition console.cpp:698
void ExecuteLine(const char *pStr, int ClientId=IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons=true) override
Definition console.cpp:729
static std::optional< ColorHSLA > ColorParse(const char *pStr, float DarkestLighting)
Definition console.cpp:1198
IStorage * m_pStorage
Definition console.h:65
void SetTeeHistorianCommandCallback(FTeeHistorianCommandCallback pfnCallback, void *pUser) override
Definition console.cpp:395
static void ConCommandStatus(IConsole::IResult *pResult, void *pUser)
Definition console.cpp:870
static void Con_Chain(IResult *pResult, void *pUserData)
Definition console.cpp:1121
CHeap m_TempCommands
Definition console.h:68
std::vector< CExecutionQueueEntry > m_vExecutionQueue
Definition console.h:167
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:113
@ CLIENT_ID_UNSPECIFIED
Definition console.h:49
std::optional< std::vector< int > >(*) FGetVictimsCommandCallback(int ClientId, const char *pVictim, void *pUser)
Definition console.h:104
bool(*) FUnknownCommandCallback(const char *pCommand, void *pUser)
Definition console.h:109
EAccessLevel
Definition console.h:57
void(*) FPossibleCallback(int Index, const char *pCmd, void *pUser)
Definition console.h:106
bool(*) FCanUseCommandCallback(int ClientId, const ICommandInfo *pCommand, void *pUser)
Definition console.h:110
void(*) FTeeHistorianCommandCallback(int ClientId, int FlagMask, const char *pCmd, IResult *pResult, void *pUser)
Definition console.h:105
void(*) FCommandCallback(IResult *pResult, void *pUserData)
Definition console.h:107
void(*) FChainCommandCallback(IResult *pResult, void *pUserData, FCommandCallback pfnCallback, void *pCallbackUserData)
Definition console.h:108
Definition storage.h:21
@ TYPE_ALL
Definition storage.h:27
Definition checksum.h:7