Do a refactor of command parsing in lpxclient and lpxserver
This commit is contained in:
@@ -20,7 +20,7 @@ public:
|
||||
using UniqueClient = std::unique_ptr<Client>;
|
||||
using ClientVector = eng::vector<UniqueClient>;
|
||||
|
||||
class LpxServer : public DrivenEngine {
|
||||
class LpxServer : public DrivenEngine, public CommonCommands {
|
||||
public:
|
||||
using StringVec = LuaConsole::StringVec;
|
||||
UniqueWorld master_;
|
||||
@@ -66,72 +66,68 @@ public:
|
||||
next_tick_ = 0.0;
|
||||
}
|
||||
|
||||
void do_luainvoke_command(const util::StringVec &words) {
|
||||
master_->invoke(Invocation(Invocation::KIND_LUA, admin_id_, admin_id_, words[1]));
|
||||
virtual void do_syntax_error(std::string_view error) override {
|
||||
stdostream() << "Syntax error: " << error << std::endl;
|
||||
}
|
||||
|
||||
void do_luaprobe_command(const util::StringVec &words) {
|
||||
master_->snapshot();
|
||||
stdostream() << master_->probe_lua(admin_id_, words[1]);;
|
||||
master_->rollback();
|
||||
virtual void do_unknown_command(std::string_view name) override {
|
||||
stdostream() << "Unknown command: " << name << std::endl;
|
||||
}
|
||||
|
||||
void do_syntax_command(const util::StringVec &words) {
|
||||
stdostream() << "Syntax Error: " << words[1] << std::endl;
|
||||
}
|
||||
|
||||
void do_view_command(const StringVec &cmd) {
|
||||
stdostream() << master_->tangibles_near_debug_string(admin_id_, 1000);
|
||||
}
|
||||
|
||||
void do_menu_command(const StringVec &cmd) {
|
||||
int64_t place = sv::to_int64(cmd[1], admin_id_);
|
||||
master_->update_gui(admin_id_, place, &gui_);
|
||||
stdostream() << gui_.menu_debug_string();
|
||||
}
|
||||
|
||||
void do_choose_command(const StringVec &cmd) {
|
||||
stdostream() << "Chose menu item: " << cmd[1] << std::endl;
|
||||
eng::string action = gui_.get_action(sv::to_int64(cmd[1]));
|
||||
virtual void do_choose_command(int64_t n) override {
|
||||
eng::string action = gui_.get_action(n);
|
||||
if (action == "") {
|
||||
stdostream() << "Invalid menu item #" << std::endl;
|
||||
return;
|
||||
}
|
||||
stdostream() << "Invoking plan: " << action << std::endl;
|
||||
master_->invoke(Invocation(Invocation::KIND_CHOOSE, admin_id_, gui_.place(), action));
|
||||
}
|
||||
|
||||
void do_tick_command(const util::StringVec &words) {
|
||||
master_->invoke(Invocation(Invocation::KIND_TICK, admin_id_, admin_id_, ""));
|
||||
virtual void do_view_command() override {
|
||||
stdostream() << master_->tangibles_near_debug_string(admin_id_, 1000);
|
||||
}
|
||||
|
||||
void do_cpl_command(const util::StringVec &words) {
|
||||
rescan_lua_source();
|
||||
virtual void do_moveto_command(int x, int y) override {
|
||||
do_unknown_command("moveto");
|
||||
}
|
||||
|
||||
void do_quit_command(const util::StringVec &words) {
|
||||
virtual void do_menu_command(int64_t tanid) override {
|
||||
master_->update_gui(admin_id_, (tanid == 0) ? admin_id_ : tanid, &gui_);
|
||||
stdostream() << gui_.menu_debug_string();
|
||||
}
|
||||
|
||||
virtual void do_quit_command() override {
|
||||
stop_driver();
|
||||
}
|
||||
|
||||
void do_aborthttp_command(const util::StringVec &words) {
|
||||
virtual void do_cpl_command() override {
|
||||
rescan_lua_source();
|
||||
}
|
||||
|
||||
virtual void do_work_command() override {
|
||||
do_unknown_command("work");
|
||||
}
|
||||
|
||||
virtual void do_display_command() override {
|
||||
do_unknown_command("display");
|
||||
}
|
||||
|
||||
virtual void do_aborthttp_command() override {
|
||||
master_->abort_all_http_requests(425, "http requests aborted from the server command line");
|
||||
}
|
||||
|
||||
void do_command(const util::StringVec &words) {
|
||||
if (words.empty()) return;
|
||||
else if (words[0] == "luainvoke") do_luainvoke_command(words);
|
||||
else if (words[0] == "luaprobe") do_luaprobe_command(words);
|
||||
else if (words[0] == "syntax") do_syntax_command(words);
|
||||
else if (words[0] == "view") do_view_command(words);
|
||||
else if (words[0] == "menu") do_menu_command(words);
|
||||
else if (words[0] == "choose") do_choose_command(words);
|
||||
else if (words[0] == "tick") do_tick_command(words);
|
||||
else if (words[0] == "cpl") do_cpl_command(words);
|
||||
else if (words[0] == "quit") do_quit_command(words);
|
||||
else if (words[0] == "aborthttp") do_aborthttp_command(words);
|
||||
else {
|
||||
stdostream() << "Unsupported command: " << words[0] << std::endl;
|
||||
}
|
||||
virtual void do_connect_command(std::string_view hostname) override {
|
||||
do_unknown_command("connect");
|
||||
}
|
||||
|
||||
virtual void do_luainvoke_command(std::string_view cmd) override {
|
||||
master_->invoke(Invocation(Invocation::KIND_LUA, admin_id_, admin_id_, cmd));
|
||||
}
|
||||
|
||||
virtual void do_luaprobe_command(std::string_view cmd) override {
|
||||
master_->snapshot();
|
||||
stdostream() << master_->probe_lua(admin_id_, cmd);
|
||||
master_->rollback();
|
||||
}
|
||||
|
||||
void delete_client(UniqueClient &client) {
|
||||
|
||||
Reference in New Issue
Block a user