Updating the deploy algorithm
This commit is contained in:
@@ -367,23 +367,6 @@ command_result ConnectedClient::handleCommandClientChatClosed(Command &cmd) {
|
||||
return command_result{error::ok};
|
||||
}
|
||||
|
||||
constexpr static auto kDBListQuery{R"(
|
||||
SELECT `clients`.*, `properties`.`value` as `client_description` FROM (
|
||||
SELECT
|
||||
`clients_server`.`client_database_id`,
|
||||
`clients_server`.`client_unique_id`,
|
||||
`clients_server`.`client_nickname`,
|
||||
`clients_server`.`client_ip`,
|
||||
`clients_server`.`client_created`,
|
||||
`clients_server`.`client_last_connected`,
|
||||
`clients_server`.`client_total_connections`,
|
||||
`clients`.`client_login_name` FROM `clients_server`
|
||||
INNER JOIN `clients` ON `clients`.`client_database_id` = `clients_server`.`client_database_id`
|
||||
WHERE `server_id` = :serverId LIMIT :offset, :limit
|
||||
) AS `clients`
|
||||
LEFT JOIN `properties` ON `properties`.serverId = :serverId AND `properties`.key = 'client_description' AND `properties`.`id` = `clients`.`client_database_id`
|
||||
)"};
|
||||
|
||||
command_result ConnectedClient::handleCommandClientDbList(Command &cmd) {
|
||||
CMD_REQ_SERVER;
|
||||
CMD_RESET_IDLE;
|
||||
@@ -398,59 +381,32 @@ command_result ConnectedClient::handleCommandClientDbList(Command &cmd) {
|
||||
ts::command_builder result{this->notify_response_command("notifyclientdblist")};
|
||||
result.reserve_bulks(limit);
|
||||
|
||||
size_t command_index{0}, set_index{0};
|
||||
struct CallbackArgument {
|
||||
ts::command_builder& result;
|
||||
bool show_ip{false};
|
||||
size_t command_index{0};
|
||||
};
|
||||
|
||||
auto show_ip = permission::v2::permission_granted(1, this->calculate_permission(permission::b_client_remoteaddress_view, 0));
|
||||
CallbackArgument callback_argument{result};
|
||||
callback_argument.show_ip = permission::v2::permission_granted(1, this->calculate_permission(permission::b_client_remoteaddress_view, 0));
|
||||
serverInstance->databaseHelper()->listDatabaseClients(this->getServerId(), { offset }, { limit }, [](void* ptr_data, const DatabaseClient& client) {
|
||||
auto argument = (CallbackArgument*) ptr_data;
|
||||
|
||||
auto sqlResult = sql::command{this->server->getSql(), kDBListQuery, variable{":serverId", this->getServerId()}, variable{":offset", offset}, variable{":limit", limit}}
|
||||
.query([&](int length, std::string* values, std::string* names) {
|
||||
set_index++;
|
||||
auto bulk = result.bulk(command_index++);
|
||||
bulk.reserve(300);
|
||||
auto bulk = argument->result.bulk(argument->command_index++);
|
||||
bulk.reserve(300);
|
||||
|
||||
auto index{0};
|
||||
try {
|
||||
assert(names[index] == "client_database_id");
|
||||
bulk.put_unchecked("cldbid", values[index++]);
|
||||
bulk.put_unchecked("cldbid", client.client_database_id);
|
||||
bulk.put_unchecked("client_unique_identifier", client.client_unique_id);
|
||||
bulk.put_unchecked("client_nickname", client.client_nickname);
|
||||
bulk.put_unchecked("client_lastip", argument->show_ip ? client.client_ip : "hidden");
|
||||
bulk.put_unchecked("client_lastconnected", client.client_last_connected);
|
||||
bulk.put_unchecked("client_created", client.client_created);
|
||||
bulk.put_unchecked("client_totalconnections", client.client_total_connections);
|
||||
bulk.put_unchecked("client_login_name", client.client_login_name);
|
||||
bulk.put_unchecked("client_description", client.client_description);
|
||||
}, &callback_argument);
|
||||
|
||||
assert(names[index] == "client_unique_id");
|
||||
bulk.put_unchecked("client_unique_identifier", values[index++]);
|
||||
|
||||
assert(names[index] == "client_nickname");
|
||||
bulk.put_unchecked("client_nickname", values[index++]);
|
||||
|
||||
assert(names[index] == "client_ip");
|
||||
bulk.put_unchecked("client_lastip", show_ip ? values[index++] : "hidden");
|
||||
|
||||
assert(names[index] == "client_created");
|
||||
bulk.put_unchecked("client_lastconnected", values[index++]);
|
||||
|
||||
assert(names[index] == "client_last_connected");
|
||||
bulk.put_unchecked("client_created", values[index++]);
|
||||
|
||||
assert(names[index] == "client_total_connections");
|
||||
bulk.put_unchecked("client_totalconnections", values[index++]);
|
||||
|
||||
assert(names[index] == "client_login_name");
|
||||
bulk.put_unchecked("client_login_name", values[index++]);
|
||||
|
||||
assert(names[index] == "client_description");
|
||||
bulk.put_unchecked("client_description", values[index++]);
|
||||
|
||||
assert(index == length);
|
||||
} catch (std::exception& ex) {
|
||||
command_index--;
|
||||
logError(this->getServerId(), "Failed to parse client base properties at index {}: {}. Offset: {} Limit: {} Set: {}",
|
||||
index - 1,
|
||||
ex.what(),
|
||||
offset,
|
||||
limit,
|
||||
set_index - 1
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
if (command_index == 0)
|
||||
if (callback_argument.command_index == 0)
|
||||
return command_result{error::database_empty_result};
|
||||
|
||||
if (cmd.hasParm("count")) {
|
||||
|
||||
Reference in New Issue
Block a user