First version of new slash-command parser.
This commit is contained in:
@@ -5,6 +5,9 @@
|
||||
#include "driver-windows.cpp"
|
||||
#endif
|
||||
|
||||
#include "slash-parser.hpp"
|
||||
#include "slash-parser.cpp"
|
||||
|
||||
#define POLLVEC_SIZE (DRV_MAX_CHAN + 1)
|
||||
#define MAX_BIO_BUFFER (128 * 1024)
|
||||
|
||||
@@ -191,14 +194,12 @@ class Driver {
|
||||
}
|
||||
}
|
||||
|
||||
void handle_lua_source() {
|
||||
if (engw.get_rescan_lua_source(&engw)) {
|
||||
drvutil::ostringstream oss;
|
||||
std::string err = drvutil::package_lua_source(".", &oss);
|
||||
if_error_print_and_exit(err);
|
||||
std::string_view ossv = oss.view();
|
||||
engw.play_access(&engw, AccessKind::INVOKE_LUA_SOURCE, 0, ossv.size(), ossv.data(), nullptr, nullptr);
|
||||
}
|
||||
void inject_lua_source() {
|
||||
drvutil::ostringstream oss;
|
||||
std::string err = drvutil::package_lua_source(".", &oss);
|
||||
if_error_print_and_exit(err);
|
||||
std::string_view ossv = oss.view();
|
||||
engw.play_access(&engw, AccessKind::INVOKE_LUA_SOURCE, 0, ossv.size(), ossv.data(), nullptr, nullptr);
|
||||
}
|
||||
|
||||
void channel_printbuffer() {
|
||||
@@ -213,6 +214,20 @@ class Driver {
|
||||
}
|
||||
}
|
||||
|
||||
void handle_slash_command(const std::string &cmd)
|
||||
{
|
||||
SlashCommandParser parser(cmd);
|
||||
if (parser.Parse("/quit", "")) {
|
||||
exit(0);
|
||||
}
|
||||
else if (parser.Parse("/cpl", "")) {
|
||||
inject_lua_source();
|
||||
}
|
||||
else {
|
||||
readline_device_.printline(parser.Error());
|
||||
}
|
||||
}
|
||||
|
||||
void add_console_command(std::string_view addition)
|
||||
{
|
||||
std::string cmd = console_command_ + std::string(addition);
|
||||
@@ -229,7 +244,7 @@ class Driver {
|
||||
} else if (message == "white space") {
|
||||
// no need to do anything.
|
||||
} else if (message == "slash command") {
|
||||
readline_device_.printline("slash command.");
|
||||
handle_slash_command(cmd);
|
||||
} else if (message.empty()) {
|
||||
engw.play_access(&engw, AccessKind::INVOKE_LUA_EXPR,
|
||||
0, cmd.size(), cmd.c_str(), nullptr, nullptr);
|
||||
@@ -689,7 +704,9 @@ class Driver {
|
||||
|
||||
// Main loop.
|
||||
while (!engw.get_stop_driver(&engw)) {
|
||||
handle_lua_source();
|
||||
if (engw.get_rescan_lua_source(&engw)) {
|
||||
inject_lua_source();
|
||||
}
|
||||
handle_new_outgoing_sockets();
|
||||
handle_socket_input_output();
|
||||
handle_console_input();
|
||||
|
||||
Reference in New Issue
Block a user