重构协程
This commit is contained in:
@@ -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>>
|
||||
|
||||
Reference in New Issue
Block a user