重构协程

This commit is contained in:
2026-06-25 11:17:52 +08:00
parent 2aad10ccf4
commit f0510f5438
11 changed files with 370 additions and 386 deletions
@@ -4,6 +4,7 @@
#include "Resources.h"
#include "../server/Global.h"
#include "../server/Performance_Monitor.h"
#include "Core/Base/Coro_Result.h"
#include <SQLiteCpp/Statement.h>
#include <SQLiteCpp/Transaction.h>
@@ -67,30 +68,22 @@ namespace
}
template <typename T, typename Starter>
psco::awaitable<T> await_external_database_callback(Starter starter)
concurrencpp::result<T> await_external_database_callback(Starter starter)
{
using Result = psco::traits::exception_with_result_t<T>;
auto result = co_await psco::callback_awaitable<Result>(
[starter = std::move(starter)](auto handler) mutable
auto result = co_await Psc::coro::callback_result<T>(
[starter = std::move(starter)](auto done) mutable
{
starter([handler = std::move(handler)](std::exception_ptr exception,
T value) mutable
starter([done = std::move(done)](std::exception_ptr exception, T value) mutable
{
if (exception)
{
handler(Result{exception});
done.set_exception(exception);
return;
}
handler(Result{std::move(value)});
done(std::move(value));
});
});
if (std::holds_alternative<std::exception_ptr>(result))
{
std::rethrow_exception(std::get<std::exception_ptr>(result));
}
co_return std::move(std::get<T>(result));
co_return std::move(result);
}
} // 命名空间
@@ -494,7 +487,7 @@ void External_Resources_Manager::async_external_database_status(
std::move(callback));
}
psco::awaitable<std::vector<External_Resource_Status>>
concurrencpp::result<std::vector<External_Resource_Status>>
External_Resources_Manager::refresh_external_databases_coro(
const bool force_download)
{
@@ -506,7 +499,7 @@ External_Resources_Manager::refresh_external_databases_coro(
});
}
psco::awaitable<External_Resource_Status>
concurrencpp::result<External_Resource_Status>
External_Resources_Manager::refresh_external_database_coro(
std::string resource_name,
const bool force_download)
@@ -521,7 +514,7 @@ External_Resources_Manager::refresh_external_database_coro(
});
}
psco::awaitable<External_Resource_Status>
concurrencpp::result<External_Resource_Status>
External_Resources_Manager::import_external_database_coro(
std::string resource_name,
std::filesystem::path source_file)
@@ -536,7 +529,7 @@ External_Resources_Manager::import_external_database_coro(
});
}
psco::awaitable<External_Resource_Status>
concurrencpp::result<External_Resource_Status>
External_Resources_Manager::clear_external_database_table_coro(
std::string resource_name)
{
@@ -548,7 +541,7 @@ External_Resources_Manager::clear_external_database_table_coro(
});
}
psco::awaitable<std::optional<External_Database_Row>>
concurrencpp::result<std::optional<External_Database_Row>>
External_Resources_Manager::query_external_database_coro(
std::string resource_name,
std::vector<std::string> primary_key_values) const
@@ -566,33 +559,51 @@ External_Resources_Manager::query_external_database_coro(
});
}
psco::awaitable<std::map<std::string, std::shared_ptr<External_Database_Row>>>
concurrencpp::result<std::shared_ptr<External_Database_Row_Map>>
External_Resources_Manager::query_aircraft_external_databases_coro(
std::string icao24) const
{
co_return co_await await_external_database_callback<
std::map<std::string, std::shared_ptr<External_Database_Row>>>(
[this, icao24 = std::move(icao24)](Row_Map_Callback callback) mutable
auto result = co_await Psc::coro::callback_result<std::shared_ptr<External_Database_Row_Map>>(
[this, icao24 = std::move(icao24)](auto done) mutable
{
async_query_aircraft_external_databases(
std::move(icao24), std::move(callback));
std::move(icao24),
[done = std::move(done)](std::exception_ptr exception, External_Database_Row_Map value) mutable
{
if (exception)
{
done.set_exception(exception);
return;
}
done(std::make_shared<External_Database_Row_Map>(std::move(value)));
});
});
co_return result;
}
psco::awaitable<std::map<std::string, std::shared_ptr<External_Database_Row>>>
concurrencpp::result<std::shared_ptr<External_Database_Row_Map>>
External_Resources_Manager::query_callsign_external_databases_coro(
std::optional<std::string> callsign) const
{
co_return co_await await_external_database_callback<
std::map<std::string, std::shared_ptr<External_Database_Row>>>(
[this, callsign = std::move(callsign)](Row_Map_Callback callback) mutable
auto result = co_await Psc::coro::callback_result<std::shared_ptr<External_Database_Row_Map>>(
[this, callsign = std::move(callsign)](auto done) mutable
{
async_query_callsign_external_databases(
std::move(callsign), std::move(callback));
std::move(callsign),
[done = std::move(done)](std::exception_ptr exception, External_Database_Row_Map value) mutable
{
if (exception)
{
done.set_exception(exception);
return;
}
done(std::make_shared<External_Database_Row_Map>(std::move(value)));
});
});
co_return result;
}
psco::awaitable<std::vector<External_Resource_Status>>
concurrencpp::result<std::vector<External_Resource_Status>>
External_Resources_Manager::external_database_status_coro() const
{
co_return co_await await_external_database_callback<std::vector<External_Resource_Status>>