tcp udp 改协程

This commit is contained in:
2026-06-23 09:23:01 +08:00
parent 9a140f7379
commit 816c7c3c1d
5 changed files with 22 additions and 14 deletions
+7
View File
@@ -0,0 +1,7 @@
if(NOT TARGET std::filesystem)
add_library(std::filesystem INTERFACE IMPORTED GLOBAL)
set_property(TARGET std::filesystem APPEND PROPERTY INTERFACE_COMPILE_FEATURES cxx_std_17)
endif()
set(Filesystem_FOUND TRUE)
set(Filesystem_Final_FOUND TRUE)
+1 -1
View File
@@ -1,7 +1,7 @@
#include "Local_Server/Data_Feed/Data_Feed.h"
#include "../server/Global.h"
void Data_Feed_UDP_Server::handle_in_loop() {
svr.tick();
ucoro::sync_await(svr.tick_coro());
}
bool Data_Feed_UDP_Server::_open() {
svr.set_bind_address("0.0.0.0", port);
+7 -7
View File
@@ -126,8 +126,8 @@ public:
~Data_Feed_TCP_Server() override {}
void handle_in_loop() override {
//std::cout << socket.to_string() << "flush_clients" << std::endl;
svr.flush_clients();
svr.tick();
ucoro::sync_await(svr.flush_clients_coro());
ucoro::sync_await(svr.tick_coro());
}
void from_json(const Psc::JSON* that_json) override {
Data_Feed::from_json(that_json);
@@ -148,8 +148,7 @@ public:
svr.set_connect_system_buffer_size(connect_system_buffer_size);
svr.set_tcp_no_delay(false);
svr.create();
bool ok = svr.listen("0.0.0.0", port);
return true;
return ucoro::sync_await(svr.listen_coro("0.0.0.0", port));
}
Psc::JSON get_clients_json() {
Psc::JSON ret = Psc::JSON::array();
@@ -186,7 +185,7 @@ public:
class Data_Feed_TCP_Client : public Data_Feed {
public:
void handle_in_loop() override {
cli.tick();
ucoro::sync_await(cli.tick_coro());
}
std::string url;
Psc::JSON get_custom_state_json() override {
@@ -203,6 +202,7 @@ public:
sockaddr_in.port = port;
cli.set_dest_address(sockaddr_in);
cli.create();
ucoro::sync_await(cli.connect_coro());
return true;
}
void from_json(const Psc::JSON* that_json) override {
@@ -268,7 +268,7 @@ public:
return VAR_JSON_1(state);
}
void handle_in_loop() override {
cli.tick();
ucoro::sync_await(cli.tick_coro());
}
Psc::asio_socket::UDP_Client cli;
std::string url;
@@ -291,7 +291,7 @@ public:
bool _open() override {
cli.create();
cli.set_dest_address(url, port);
cli.connect();
ucoro::sync_await(cli.connect_coro());
return true;
}
};
@@ -202,19 +202,19 @@ void data_feed_thread(std::atomic<bool>& running) {
}
if (feed->type == "Data_Feed_TCP_Server") {
auto it = dynamic_cast<Data_Feed_TCP_Server*>(feed.get());
it->svr.write_to_all_clients(*str);
ucoro::sync_await(it->svr.write_to_all_clients_coro(*str));
}
else if (feed->type == "Data_Feed_UDP_Server") {
auto it = dynamic_cast<Data_Feed_UDP_Server*>(feed.get());
it->svr.write_to_all_clients(*str);
ucoro::sync_await(it->svr.write_to_all_clients_coro(*str));
}
else if (feed->type == "Data_Feed_TCP_Client") {
auto it = dynamic_cast<Data_Feed_TCP_Client*>(feed.get());
it->cli.send(*str);
ucoro::sync_await(it->cli.send_coro(*str));
}
else if (feed->type == "Data_Feed_UDP_Client") {
auto it = dynamic_cast<Data_Feed_UDP_Client*>(feed.get());
it->cli.send(*str);
ucoro::sync_await(it->cli.send_coro(*str));
}
}
}
@@ -224,7 +224,7 @@ protected:
struct TCP_Client_Data_Source : Data_Source {
void handle_in_loop() override {
cli.tick();
ucoro::sync_await(cli.tick_coro());
}
Psc::JSON get_custom_state_json() override {
auto& state = cli.state;
@@ -245,6 +245,7 @@ struct TCP_Client_Data_Source : Data_Source {
cli.set_dest_address(addr);
cli.create();
ucoro::sync_await(cli.connect_coro());
return true;
}
void _close() override { cli.close(); }
@@ -262,7 +263,7 @@ struct TCP_Client_Data_Source : Data_Source {
}
std::string read() override {
return cli.read();
return ucoro::sync_await(cli.read_coro());
}
};
struct Serial_Data_Source : Data_Source {