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

106 lines
2.5 KiB
C++
Raw Normal View History

2016-08-07 10:50:04 -04:00
namespace Components
{
class Command : public Component
{
public:
class IParams
{
public:
IParams() {};
virtual ~IParams() {};
virtual char* operator[](size_t index) = 0;
virtual size_t length() = 0;
virtual std::string join(size_t startIndex);
};
class IClientParams : public IParams
{
public:
IClientParams(unsigned int id) : commandId(id) {};
IClientParams(const IClientParams &obj) : commandId(obj.commandId) {};
IClientParams() : IClientParams(*Game::cmd_id) {};
~IClientParams() {};
char* operator[](size_t index) override;
size_t length() override;
private:
unsigned int commandId;
};
class IServerParams : public IParams
{
public:
IServerParams(unsigned int id) : commandId(id) {};
IServerParams(const IServerParams &obj) : commandId(obj.commandId) {};
IServerParams() : IServerParams(*Game::cmd_id_sv) {};
~IServerParams() {};
char* operator[](size_t index) override;
size_t length() override;
private:
unsigned int commandId;
};
2016-08-07 10:50:04 -04:00
class Params
{
public:
Params(IParams* _paramInterface) : paramInterface(_paramInterface)
{
if (!paramInterface)
{
throw new std::invalid_argument("Invalid command parameter interface!");
}
};
Params(const Params &obj) : paramInterface(obj.paramInterface) {};
char* operator[](size_t index)
{
return paramInterface->operator[](index);
}
2016-08-07 10:50:04 -04:00
size_t length()
{
return paramInterface->length();
}
2016-08-07 10:50:04 -04:00
std::string join(size_t startIndex)
{
return paramInterface->join(startIndex);
}
2016-08-07 10:50:04 -04:00
private:
IParams* paramInterface;
2016-08-07 10:50:04 -04:00
};
typedef void(Callback)(Command::Params params);
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();
2016-08-07 10:50:04 -04:00
static void Add(const char* name, Callback* callback);
static void AddSV(const char* name, 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;
2016-08-07 10:50:04 -04:00
static std::map<std::string, wink::slot<Callback>> FunctionMap;
static std::map<std::string, wink::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();
};
}