iw4x-client/src/Components/Modules/Command.hpp

74 lines
1.9 KiB
C++
Raw Normal View History

2016-08-07 10:50:04 -04:00
namespace Components
{
class Command : public Component
{
public:
class Params
{
public:
Params() {};
virtual ~Params() {};
virtual char* get(size_t index) = 0;
virtual size_t length() = 0;
virtual std::string join(size_t startIndex);
virtual char* operator[](size_t index);
};
class ClientParams : public Params
{
public:
ClientParams(unsigned int id) : commandId(id) {};
ClientParams(const ClientParams &obj) : commandId(obj.commandId) {};
ClientParams() : ClientParams(*Game::cmd_id) {};
char* get(size_t index) override;
size_t length() override;
private:
unsigned int commandId;
};
class ServerParams : public Params
{
public:
ServerParams(unsigned int id) : commandId(id) {};
ServerParams(const ServerParams &obj) : commandId(obj.commandId) {};
ServerParams() : ServerParams(*Game::cmd_id_sv) {};
char* get(size_t index) override;
size_t length() override;
private:
unsigned int commandId;
};
typedef void(Callback)(Command::Params* params);
2016-08-07 10:50:04 -04:00
Command();
~Command();
2016-08-15 10:40:30 -04:00
2016-09-16 05:04:28 -04:00
#if defined(DEBUG) || defined(FORCE_UNIT_TESTS)
const char* getName() { return "Command"; };
2016-08-15 10:40:30 -04:00
#endif
2016-08-07 10:50:04 -04:00
2016-08-16 14:36:52 -04:00
static Game::cmd_function_t* Allocate();
static void Add(const char* name, Utils::Slot<Callback> callback);
static void AddSV(const char* name, Utils::Slot<Callback> callback);
2016-09-05 13:54:16 -04:00
static void AddRaw(const char* name, void(*callback)(), bool key = false);
2016-08-07 10:50:04 -04:00
static void AddRawSV(const char* name, void(*callback)());
static void Execute(std::string command, bool sync = true);
2016-08-07 12:25:44 -04:00
static Game::cmd_function_t* Find(std::string command);
2016-08-07 10:50:04 -04:00
private:
2016-08-13 10:39:05 -04:00
static Utils::Memory::Allocator MemAllocator;
static std::unordered_map<std::string, Utils::Slot<Callback>> FunctionMap;
static std::unordered_map<std::string, Utils::Slot<Callback>> FunctionMapSV;
2016-08-13 10:39:05 -04:00
2016-08-07 10:50:04 -04:00
static void MainCallback();
static void MainCallbackSV();
};
}