重构协程

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
+21 -21
View File
@@ -47,7 +47,7 @@ struct Output_Format {
class Data_Feed {
public:
virtual ~Data_Feed() = default;
std::unique_ptr<psco::awaitable<void>> loop_task;
std::unique_ptr<concurrencpp::result<void>> loop_task;
BIN_Msg_Buffer msg_buffer{};
std::string key;
bool enable = false;
@@ -57,11 +57,11 @@ public:
virtual void handle_in_loop() {
}
virtual psco::awaitable<void> handle_in_loop_coro() {
virtual concurrencpp::result<void> handle_in_loop_coro() {
handle_in_loop();
co_return;
}
virtual psco::awaitable<void> send_coro(const std::string&) {
virtual concurrencpp::result<void> send_coro(const std::string&) {
co_return;
}
virtual Psc::JSON to_json() {
@@ -99,7 +99,7 @@ public:
}
std::string to_string() {
return "Data_Feed" + VAR_STR_3(key, enable, type) + "";
return "Data_Feed{" + VAR_STR_3(key, enable, type) + "}";
}
bool registered();
@@ -136,14 +136,14 @@ public:
~Data_Feed_TCP_Server() override {}
void handle_in_loop() override {
//std::cout << socket.to_string() << "flush_clients" << std::endl;
psco::sync_await(handle_in_loop_coro());
(handle_in_loop_coro()).get();
}
psco::awaitable<void> handle_in_loop_coro() override {
concurrencpp::result<void> handle_in_loop_coro() override {
co_await svr.flush_clients_coro();
co_await svr.tick_coro();
co_return;
}
psco::awaitable<void> send_coro(const std::string& data) override {
concurrencpp::result<void> send_coro(const std::string& data) override {
co_await svr.write_to_all_clients_coro(data);
co_return;
}
@@ -166,7 +166,7 @@ public:
svr.set_connect_system_buffer_size(connect_system_buffer_size);
svr.set_tcp_no_delay(false);
svr.create();
return psco::sync_await(svr.listen_coro("0.0.0.0", port));
return (svr.listen_coro("0.0.0.0", port)).get();
}
Psc::JSON get_clients_json() {
Psc::JSON ret = Psc::JSON::array();
@@ -191,7 +191,7 @@ public:
{
auto& ins = conn->send_num.instant;
auto& avr =conn->send_num.average;
cur.append({"send_num(byte/)", VAR_STR_2(ins, avr)});
cur.append({"send_num(byte/count)", VAR_STR_2(ins, avr)});
}
ret.append(cur);
}
@@ -203,13 +203,13 @@ public:
class Data_Feed_TCP_Client : public Data_Feed {
public:
void handle_in_loop() override {
psco::sync_await(handle_in_loop_coro());
(handle_in_loop_coro()).get();
}
psco::awaitable<void> handle_in_loop_coro() override {
concurrencpp::result<void> handle_in_loop_coro() override {
co_await cli.tick_coro();
co_return;
}
psco::awaitable<void> send_coro(const std::string& data) override {
concurrencpp::result<void> send_coro(const std::string& data) override {
co_await cli.send_coro(data);
co_return;
}
@@ -228,7 +228,7 @@ public:
sockaddr_in.port = port;
cli.set_dest_address(sockaddr_in);
cli.create();
psco::sync_await(cli.connect_coro());
(cli.connect_coro()).get();
return true;
}
void from_json(const Psc::JSON* that_json) override {
@@ -258,8 +258,8 @@ public:
Data_Feed_UDP_Server()= default;
~Data_Feed_UDP_Server() override = default;
void handle_in_loop() override;
psco::awaitable<void> handle_in_loop_coro() override;
psco::awaitable<void> send_coro(const std::string& data) override;
concurrencpp::result<void> handle_in_loop_coro() override;
concurrencpp::result<void> send_coro(const std::string& data) override;
[[nodiscard]] Psc::JSON get_clients_json() const {
Psc::JSON ret = Psc::JSON::array();
for (const auto& i : svr.clients) {
@@ -296,13 +296,13 @@ public:
return VAR_JSON_1(state);
}
void handle_in_loop() override {
psco::sync_await(handle_in_loop_coro());
(handle_in_loop_coro()).get();
}
psco::awaitable<void> handle_in_loop_coro() override {
concurrencpp::result<void> handle_in_loop_coro() override {
co_await cli.tick_coro();
co_return;
}
psco::awaitable<void> send_coro(const std::string& data) override {
concurrencpp::result<void> send_coro(const std::string& data) override {
co_await cli.send_coro(data);
co_return;
}
@@ -321,13 +321,13 @@ public:
return ret;
}
void _close() override {
std::cout << "udp客户端 目标地址:" << cli.dest_address.to_string() << "关闭!" << std::endl;
std::cout << "udp client target address:" << cli.dest_address.to_string() << " closed" << std::endl;
cli.close();
}
bool _open() override {
cli.create();
cli.set_dest_address(url, port);
psco::sync_await(cli.connect_coro());
(cli.connect_coro()).get();
return true;
}
};
@@ -340,7 +340,7 @@ inline std::shared_ptr<Data_Feed> create_data_feed_from_type(const std::string&
if (t == "Data_Feed_UDP_Server") ret = std::make_shared<Data_Feed_UDP_Server>(); else
if (t == "Data_Feed_TCP_Client") ret = std::make_shared<Data_Feed_TCP_Client>(); else
if (t == "Data_Feed_UDP_Client") ret = std::make_shared<Data_Feed_UDP_Client>(); else {
std::cout << "未知的 Data_Feed type类型! t:[" << t << "]"<< std::endl;
std::cout << "鏈煡鐨? Data_Feed type绫诲瀷! t:[" << t << "]"<< std::endl;
throw std::invalid_argument("unknown Data_Feed type: " + t);
}
return ret;