Skip to content

Commit

Permalink
Support cmd interface with unix socket
Browse files Browse the repository at this point in the history
Use command-line option:
--enablecmdinterface=unixsocket:path
  • Loading branch information
past-due committed Sep 10, 2023
1 parent 3ea024d commit 2f8f091
Show file tree
Hide file tree
Showing 5 changed files with 653 additions and 136 deletions.
57 changes: 37 additions & 20 deletions src/clparse.cpp
Expand Up @@ -45,6 +45,7 @@
#include "wrappers.h"
#include "multilobbycommands.h"
#include "gamehistorylogger.h"
#include "stdinreader.h"

#include <cwchar>

Expand Down Expand Up @@ -89,7 +90,6 @@ static bool wz_autoratingEnable = false;
static bool wz_cli_headless = false;
static bool wz_streamer_spectator_mode = false;
static bool wz_lobby_slashcommands = false;
static WZ_Command_Interface wz_cmd_interface = WZ_Command_Interface::None;
static int wz_min_autostart_players = -1;

#if defined(WZ_OS_WIN)
Expand Down Expand Up @@ -435,7 +435,7 @@ static const struct poptOption *getOptionsTable()
{ "enablelobbyslashcmd", POPT_ARG_NONE, CLI_LOBBY_SLASHCOMMANDS, N_("Enable lobby slash commands (for connecting clients)"), nullptr},
{ "addlobbyadminhash", POPT_ARG_STRING, CLI_ADD_LOBBY_ADMINHASH, N_("Add a lobby admin identity hash (for slash commands)"), _("hash string")},
{ "addlobbyadminpublickey", POPT_ARG_STRING, CLI_ADD_LOBBY_ADMINPUBLICKEY, N_("Add a lobby admin public key (for slash commands)"), N_("b64-pub-key")},
{ "enablecmdinterface", POPT_ARG_STRING, CLI_COMMAND_INTERFACE, N_("Enable command interface"), N_("(stdin)")},
{ "enablecmdinterface", POPT_ARG_STRING, CLI_COMMAND_INTERFACE, N_("Enable command interface"), N_("(stdin, unixsocket:path)")},
{ "startplayers", POPT_ARG_STRING, CLI_STARTPLAYERS, N_("Minimum required players to auto-start game"), N_("startplayers")},
{ "gamelog-output", POPT_ARG_STRING, CLI_GAMELOG_OUTPUTMODES, N_("Game history log output mode(s)"), "(log,cmdinterface)"},
{ "gamelog-outputkey", POPT_ARG_STRING, CLI_GAMELOG_OUTPUTKEY, N_("Game history log output key"), "[playerindex, playerposition]"},
Expand Down Expand Up @@ -1101,20 +1101,42 @@ bool ParseCommandLine(int argc, const char * const *argv)
break;

case CLI_COMMAND_INTERFACE:
token = poptGetOptArg(poptCon);
if (token == nullptr || strlen(token) == 0)
{
// use default, which is currently "stdin"
token = "stdin";
}
if (strcmp(token, "stdin") == 0)
{
// enable stdin
wz_cmd_interface = WZ_Command_Interface::StdIn_Interface;
}
else
{
qFatal("Unsupported / invalid enablecmdinterface value");
token = poptGetOptArg(poptCon);
if (token == nullptr || strlen(token) == 0)
{
// use default, which is currently "stdin"
token = "stdin";
}
WZ_Command_Interface mode = WZ_Command_Interface::None;
std::string value;
if (strcmp(token, "stdin") == 0)
{
mode = WZ_Command_Interface::StdIn_Interface;
}
else if (strncmp(token, "unixsocket", strlen("unixsocket")) == 0)
{
mode = WZ_Command_Interface::Unix_Socket;
// expected form is "unixsocket:path" - parse for the path
if (strlen(token) > strlen("unixsocket"))
{
size_t delimeterIdx = strlen("unixsocket");
if (token[delimeterIdx] == ':' && token[delimeterIdx+1] != '\0')
{
// grab the rest of the string as the path value
value = &token[delimeterIdx+1];
}
else
{
qFatal("Invalid enablecmdinterface unixsocket value (expecting unixsocket:path)");
}
}
}
else
{
qFatal("Unsupported / invalid enablecmdinterface value");
}
configSetCmdInterface(mode, value);
}
break;
case CLI_STARTPLAYERS:
Expand Down Expand Up @@ -1287,11 +1309,6 @@ bool lobby_slashcommands_enabled()
return wz_lobby_slashcommands;
}

WZ_Command_Interface wz_command_interface()
{
return wz_cmd_interface;
}

int min_autostart_player_count()
{
return wz_min_autostart_players;
Expand Down
7 changes: 0 additions & 7 deletions src/clparse.h
Expand Up @@ -39,13 +39,6 @@ bool getAutoratingEnable();
bool streamer_spectator_mode();
bool lobby_slashcommands_enabled();

enum class WZ_Command_Interface
{
None,
StdIn_Interface,
};
WZ_Command_Interface wz_command_interface();

int min_autostart_player_count();

#endif // __INCLUDED_SRC_CLPARSE_H__
10 changes: 3 additions & 7 deletions src/main.cpp
Expand Up @@ -1685,19 +1685,15 @@ static bool initializeCrashHandlingContext(optional<video_backend> gfxbackend)

static void wzCmdInterfaceInit()
{
switch (wz_command_interface())
if (wz_command_interface_enabled())
{
case WZ_Command_Interface::None:
return;
case WZ_Command_Interface::StdIn_Interface:
stdInThreadInit();
break;
cmdInterfaceThreadInit();
}
}

static void wzCmdInterfaceShutdown()
{
stdInThreadShutdown();
cmdInterfaceThreadShutdown();
}

static void cleanupOldLogFiles()
Expand Down

0 comments on commit 2f8f091

Please sign in to comment.