DDraceNetwork 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_CONSOLE_H
4#define ENGINE_CONSOLE_H
5
6#include "kernel.h"
7
8#include <base/color.h>
9
10#include <engine/storage.h>
11
12#include <memory>
13
14static constexpr ColorRGBA gs_ConsoleDefaultColor(1, 1, 1, 1);
15
16enum LEVEL : char;
17struct CChecksumData;
18
19class IConsole : public IInterface
20{
21 MACRO_INTERFACE("console")
22public:
23 // TODO: rework/cleanup
24 enum
25 {
29 };
30
31 enum
32 {
36
38
39 // The id `-1` has full admin access on the server.
40 // It is used in the following cases:
41 // - Loading the config file on server start
42 // - Econ and fifo connections
43 // - Commands run on passed votes
44 //
45 // Client side it has less importance
46 // because there is no difference in access levels.
50
52 };
53
61
62 // TODO: rework this interface to reduce the amount of virtual calls
63 class IResult
64 {
65 protected:
66 unsigned m_NumArgs;
67
68 public:
69 IResult(int ClientId) :
70 m_NumArgs(0),
71 m_ClientId(ClientId) {}
72 virtual ~IResult() = default;
73
74 virtual int GetInteger(unsigned Index) const = 0;
75 virtual float GetFloat(unsigned Index) const = 0;
76 virtual const char *GetString(unsigned Index) const = 0;
77 virtual ColorHSLA GetColor(unsigned Index, float DarkestLighting) const = 0;
78
79 virtual void RemoveArgument(unsigned Index) = 0;
80
81 int NumArguments() const { return m_NumArgs; }
83
84 // DDRace
85
86 virtual int GetVictim() const = 0;
87 };
88
90 {
91 public:
92 virtual ~ICommandInfo() = default;
93 virtual const char *Name() const = 0;
94 virtual const char *Help() const = 0;
95 virtual const char *Params() const = 0;
96 virtual int Flags() const = 0;
97 virtual EAccessLevel GetAccessLevel() const = 0;
98 };
99
100 typedef void (*FTeeHistorianCommandCallback)(int ClientId, int FlagMask, const char *pCmd, IResult *pResult, void *pUser);
101 typedef void (*FPossibleCallback)(int Index, const char *pCmd, void *pUser);
102 typedef void (*FCommandCallback)(IResult *pResult, void *pUserData);
103 typedef void (*FChainCommandCallback)(IResult *pResult, void *pUserData, FCommandCallback pfnCallback, void *pCallbackUserData);
104 typedef bool (*FUnknownCommandCallback)(const char *pCommand, void *pUser); // returns true if the callback has handled the argument
105 typedef bool (*FCanUseCommandCallback)(int ClientId, const ICommandInfo *pCommand, void *pUser);
106
107 static void EmptyPossibleCommandCallback(int Index, const char *pCmd, void *pUser) {}
108 static bool EmptyUnknownCommandCallback(const char *pCommand, void *pUser) { return false; }
109
110 virtual void Init() = 0;
111 virtual const ICommandInfo *FirstCommandInfo(int ClientId, int FlagMask) const = 0;
112 virtual const ICommandInfo *NextCommandInfo(const IConsole::ICommandInfo *pInfo, int ClientId, int FlagMask) const = 0;
113 virtual const ICommandInfo *GetCommandInfo(const char *pName, int FlagMask, bool Temp) = 0;
114 virtual int PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback = EmptyPossibleCommandCallback, void *pUser = nullptr) = 0;
115 virtual void ParseArguments(int NumArgs, const char **ppArguments) = 0;
116
117 virtual void Register(const char *pName, const char *pParams, int Flags, FCommandCallback pfnFunc, void *pUser, const char *pHelp) = 0;
118 virtual void RegisterTemp(const char *pName, const char *pParams, int Flags, const char *pHelp) = 0;
119 virtual void DeregisterTemp(const char *pName) = 0;
120 virtual void DeregisterTempAll() = 0;
121 virtual void Chain(const char *pName, FChainCommandCallback pfnChainFunc, void *pUser) = 0;
122 virtual void StoreCommands(bool Store) = 0;
123
124 virtual bool LineIsValid(const char *pStr) = 0;
125 virtual void ExecuteLine(const char *pStr, int ClientId, bool InterpretSemicolons = true) = 0;
126 virtual void ExecuteLineFlag(const char *pStr, int FlasgMask, int ClientId, bool InterpretSemicolons = true) = 0;
127 virtual void ExecuteLineStroked(int Stroke, const char *pStr, int ClientId, bool InterpretSemicolons = true) = 0;
128 virtual bool ExecuteFile(const char *pFilename, int ClientId, bool LogFailure = false, int StorageType = IStorage::TYPE_ALL) = 0;
129
136 virtual void Print(int Level, const char *pFrom, const char *pStr, ColorRGBA PrintColor = gs_ConsoleDefaultColor) const = 0;
137 virtual void SetTeeHistorianCommandCallback(FTeeHistorianCommandCallback pfnCallback, void *pUser) = 0;
138 virtual void SetUnknownCommandCallback(FUnknownCommandCallback pfnCallback, void *pUser) = 0;
139 virtual void SetCanUseCommandCallback(FCanUseCommandCallback pfnCallback, void *pUser) = 0;
140 virtual void InitChecksum(CChecksumData *pData) const = 0;
141
142 static LEVEL ToLogLevel(int ConsoleLevel);
143 static int ToLogLevelFilter(int ConsoleLevel);
144
145 // DDRace
146
147 virtual bool Cheated() const = 0;
148
149 virtual int FlagMask() const = 0;
150 virtual void SetFlagMask(int FlagMask) = 0;
151};
152
153std::unique_ptr<IConsole> CreateConsole(int FlagMask);
154
155#endif // FILE_ENGINE_CONSOLE_H
Definition color.h:145
Definition color.h:182
Definition console.h:90
virtual EAccessLevel GetAccessLevel() const =0
virtual const char * Name() const =0
virtual const char * Params() const =0
virtual ~ICommandInfo()=default
virtual int Flags() const =0
virtual const char * Help() const =0
Definition console.h:64
IResult(int ClientId)
Definition console.h:69
virtual int GetInteger(unsigned Index) const =0
int NumArguments() const
Definition console.h:81
virtual float GetFloat(unsigned Index) const =0
int m_ClientId
Definition console.h:82
virtual void RemoveArgument(unsigned Index)=0
unsigned m_NumArgs
Definition console.h:66
virtual int GetVictim() const =0
virtual ~IResult()=default
virtual const char * GetString(unsigned Index) const =0
virtual ColorHSLA GetColor(unsigned Index, float DarkestLighting) const =0
Definition console.h:20
virtual void DeregisterTemp(const char *pName)=0
static bool EmptyUnknownCommandCallback(const char *pCommand, void *pUser)
Definition console.h:108
virtual void StoreCommands(bool Store)=0
@ TEMPCMD_HELP_LENGTH
Definition console.h:34
@ FILE_RECURSION_LIMIT
Definition console.h:51
@ CLIENT_ID_NO_GAME
Definition console.h:49
@ CLIENT_ID_UNSPECIFIED
Definition console.h:47
@ TEMPCMD_PARAMS_LENGTH
Definition console.h:35
@ CLIENT_ID_GAME
Definition console.h:48
@ CMDLINE_LENGTH
Definition console.h:37
@ TEMPCMD_NAME_LENGTH
Definition console.h:33
virtual void ExecuteLineStroked(int Stroke, const char *pStr, int ClientId, bool InterpretSemicolons=true)=0
virtual const ICommandInfo * GetCommandInfo(const char *pName, int FlagMask, bool Temp)=0
virtual void InitChecksum(CChecksumData *pData) const =0
virtual void ParseArguments(int NumArgs, const char **ppArguments)=0
EAccessLevel
Definition console.h:55
@ USER
Definition console.h:59
@ MODERATOR
Definition console.h:57
@ ADMIN
Definition console.h:56
@ HELPER
Definition console.h:58
bool(* FUnknownCommandCallback)(const char *pCommand, void *pUser)
Definition console.h:104
virtual void ExecuteLine(const char *pStr, int ClientId, bool InterpretSemicolons=true)=0
void(* FChainCommandCallback)(IResult *pResult, void *pUserData, FCommandCallback pfnCallback, void *pCallbackUserData)
Definition console.h:103
virtual void Chain(const char *pName, FChainCommandCallback pfnChainFunc, void *pUser)=0
virtual int PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback=EmptyPossibleCommandCallback, void *pUser=nullptr)=0
virtual void Print(int Level, const char *pFrom, const char *pStr, ColorRGBA PrintColor=gs_ConsoleDefaultColor) const =0
virtual void Register(const char *pName, const char *pParams, int Flags, FCommandCallback pfnFunc, void *pUser, const char *pHelp)=0
bool(* FCanUseCommandCallback)(int ClientId, const ICommandInfo *pCommand, void *pUser)
Definition console.h:105
static int ToLogLevelFilter(int ConsoleLevel)
Definition console.cpp:345
@ OUTPUT_LEVEL_ADDINFO
Definition console.h:27
@ OUTPUT_LEVEL_DEBUG
Definition console.h:28
@ OUTPUT_LEVEL_STANDARD
Definition console.h:26
static void EmptyPossibleCommandCallback(int Index, const char *pCmd, void *pUser)
Definition console.h:107
virtual bool ExecuteFile(const char *pFilename, int ClientId, bool LogFailure=false, int StorageType=IStorage::TYPE_ALL)=0
void(* FPossibleCallback)(int Index, const char *pCmd, void *pUser)
Definition console.h:101
virtual void RegisterTemp(const char *pName, const char *pParams, int Flags, const char *pHelp)=0
virtual void DeregisterTempAll()=0
virtual bool Cheated() const =0
virtual void SetTeeHistorianCommandCallback(FTeeHistorianCommandCallback pfnCallback, void *pUser)=0
void(* FCommandCallback)(IResult *pResult, void *pUserData)
Definition console.h:102
virtual void ExecuteLineFlag(const char *pStr, int FlasgMask, int ClientId, bool InterpretSemicolons=true)=0
virtual void Init()=0
virtual void SetUnknownCommandCallback(FUnknownCommandCallback pfnCallback, void *pUser)=0
virtual int FlagMask() const =0
virtual void SetFlagMask(int FlagMask)=0
virtual void SetCanUseCommandCallback(FCanUseCommandCallback pfnCallback, void *pUser)=0
virtual bool LineIsValid(const char *pStr)=0
static LEVEL ToLogLevel(int ConsoleLevel)
Definition console.cpp:330
virtual const ICommandInfo * FirstCommandInfo(int ClientId, int FlagMask) const =0
void(* FTeeHistorianCommandCallback)(int ClientId, int FlagMask, const char *pCmd, IResult *pResult, void *pUser)
Definition console.h:100
virtual const ICommandInfo * NextCommandInfo(const IConsole::ICommandInfo *pInfo, int ClientId, int FlagMask) const =0
IInterface()
Definition kernel.h:19
@ TYPE_ALL
Definition storage.h:27
std::unique_ptr< IConsole > CreateConsole(int FlagMask)
Definition console.cpp:1113
static constexpr ColorRGBA gs_ConsoleDefaultColor(1, 1, 1, 1)
#define MACRO_INTERFACE(Name)
Definition kernel.h:25
LEVEL
Definition log.h:8
Definition checksum.h:7