fix(rcon): patch buffer flush bug (#216)
This commit is contained in:
parent
009b97e4a1
commit
88f75fca4e
@ -169,11 +169,11 @@ namespace command
|
|||||||
{
|
{
|
||||||
if (args.size() == 1)
|
if (args.size() == 1)
|
||||||
{
|
{
|
||||||
const auto current = game::Dvar_ValueToString(dvar, dvar->current);
|
const std::string current = game::Dvar_ValueToString(dvar, dvar->current);
|
||||||
const auto reset = game::Dvar_ValueToString(dvar, dvar->reset);
|
const std::string reset = game::Dvar_ValueToString(dvar, dvar->reset);
|
||||||
|
|
||||||
console::info("\"%s\" is: \"%s\" default: \"%s\" checksum: %d type: %i\n",
|
console::info("\"%s\" is: \"%s\" default: \"%s\" checksum: %d type: %i\n",
|
||||||
dvars::dvar_get_name(dvar).data(), current, reset, dvar->checksum, dvar->type);
|
dvars::dvar_get_name(dvar).data(), current.data(), reset.data(), dvar->checksum, dvar->type);
|
||||||
|
|
||||||
const auto dvar_info = dvars::dvar_get_description(dvar);
|
const auto dvar_info = dvars::dvar_get_description(dvar);
|
||||||
|
|
||||||
@ -184,7 +184,7 @@ namespace command
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char command[0x1000] = { 0 };
|
char command[0x1000]{};
|
||||||
game::Dvar_GetCombinedString(command, 1);
|
game::Dvar_GetCombinedString(command, 1);
|
||||||
game::Dvar_SetCommand(args[0], command);
|
game::Dvar_SetCommand(args[0], command);
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ namespace rcon
|
|||||||
std::atomic_bool is_redirecting_{ false };
|
std::atomic_bool is_redirecting_{ false };
|
||||||
std::atomic_bool has_redirected_{ false };
|
std::atomic_bool has_redirected_{ false };
|
||||||
game::netadr_s redirect_target_ = {};
|
game::netadr_s redirect_target_ = {};
|
||||||
|
std::string redirect_buffer = {};
|
||||||
std::recursive_mutex redirect_lock;
|
std::recursive_mutex redirect_lock;
|
||||||
|
|
||||||
void setup_redirect(const game::netadr_s& target)
|
void setup_redirect(const game::netadr_s& target)
|
||||||
@ -29,15 +30,19 @@ namespace rcon
|
|||||||
has_redirected_ = false;
|
has_redirected_ = false;
|
||||||
is_redirecting_ = true;
|
is_redirecting_ = true;
|
||||||
redirect_target_ = target;
|
redirect_target_ = target;
|
||||||
|
redirect_buffer.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear_redirect()
|
void clear_redirect()
|
||||||
{
|
{
|
||||||
std::lock_guard<std::recursive_mutex> $(redirect_lock);
|
std::lock_guard<std::recursive_mutex> $(redirect_lock);
|
||||||
|
|
||||||
|
network::send(redirect_target_, "print", redirect_buffer, '\n');
|
||||||
|
|
||||||
has_redirected_ = false;
|
has_redirected_ = false;
|
||||||
is_redirecting_ = false;
|
is_redirecting_ = false;
|
||||||
redirect_target_ = {};
|
redirect_target_ = {};
|
||||||
|
redirect_buffer.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_rcon_command(const std::string& password, const std::string& data)
|
void send_rcon_command(const std::string& password, const std::string& data)
|
||||||
@ -69,7 +74,7 @@ namespace rcon
|
|||||||
|
|
||||||
std::string build_status_buffer()
|
std::string build_status_buffer()
|
||||||
{
|
{
|
||||||
const auto mapname = game::Dvar_FindVar("mapname");
|
const auto* mapname = game::Dvar_FindVar("mapname");
|
||||||
|
|
||||||
std::string buffer{};
|
std::string buffer{};
|
||||||
buffer.append(utils::string::va("map: %s\n", mapname->current.string));
|
buffer.append(utils::string::va("map: %s\n", mapname->current.string));
|
||||||
@ -78,7 +83,7 @@ namespace rcon
|
|||||||
buffer.append(
|
buffer.append(
|
||||||
"--- ----- --- ---- -------------------------------- ---------------- --------------------- -----\n");
|
"--- ----- --- ---- -------------------------------- ---------------- --------------------- -----\n");
|
||||||
|
|
||||||
const auto svs_clients = *game::svs_clients;
|
const auto* svs_clients = *game::svs_clients;
|
||||||
if (svs_clients == nullptr)
|
if (svs_clients == nullptr)
|
||||||
{
|
{
|
||||||
return buffer;
|
return buffer;
|
||||||
@ -86,7 +91,7 @@ namespace rcon
|
|||||||
|
|
||||||
for (auto i = 0u; i < *game::svs_numclients; i++)
|
for (auto i = 0u; i < *game::svs_numclients; i++)
|
||||||
{
|
{
|
||||||
const auto client = &svs_clients[i];
|
const auto* client = &svs_clients[i];
|
||||||
|
|
||||||
if (client->header.state >= 1 && client->gentity && client->gentity->client)
|
if (client->header.state >= 1 && client->gentity && client->gentity->client)
|
||||||
{
|
{
|
||||||
@ -122,9 +127,10 @@ namespace rcon
|
|||||||
if (is_redirecting_)
|
if (is_redirecting_)
|
||||||
{
|
{
|
||||||
has_redirected_ = true;
|
has_redirected_ = true;
|
||||||
network::send(redirect_target_, "print", message, '\n');
|
redirect_buffer.append(message);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ namespace demonware
|
|||||||
{
|
{
|
||||||
auto result = std::make_unique<bdDMLRawData>();
|
auto result = std::make_unique<bdDMLRawData>();
|
||||||
result->country_code = "US";
|
result->country_code = "US";
|
||||||
result->country_code = "'Murica";
|
result->country = "United States of America";
|
||||||
result->region = "New York";
|
result->region = "New York";
|
||||||
result->city = "New York";
|
result->city = "New York";
|
||||||
result->latitude = 0;
|
result->latitude = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user