Updating the deploy algorithm

This commit is contained in:
WolverinDEV
2020-07-31 17:35:14 +02:00
parent 72abd7e20e
commit 3dea4906e1
28 changed files with 1384 additions and 912 deletions
+22 -66
View File
@@ -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")) {