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 "Local_Server/Data_Feed/Data_Feed.h"
#include "../server/Global.h" #include "../server/Global.h"
void Data_Feed_UDP_Server::handle_in_loop() { void Data_Feed_UDP_Server::handle_in_loop() {
svr.tick(); ucoro::sync_await(svr.tick_coro());
} }
bool Data_Feed_UDP_Server::_open() { bool Data_Feed_UDP_Server::_open() {
svr.set_bind_address("0.0.0.0", port); svr.set_bind_address("0.0.0.0", port);
+7 -7
View File
@@ -126,8 +126,8 @@ public:
~Data_Feed_TCP_Server() override {} ~Data_Feed_TCP_Server() override {}
void handle_in_loop() override { void handle_in_loop() override {
//std::cout << socket.to_string() << "flush_clients" << std::endl; //std::cout << socket.to_string() << "flush_clients" << std::endl;
svr.flush_clients(); ucoro::sync_await(svr.flush_clients_coro());
svr.tick(); ucoro::sync_await(svr.tick_coro());
} }
void from_json(const Psc::JSON* that_json) override { void from_json(const Psc::JSON* that_json) override {
Data_Feed::from_json(that_json); Data_Feed::from_json(that_json);
@@ -148,8 +148,7 @@ public:
svr.set_connect_system_buffer_size(connect_system_buffer_size); svr.set_connect_system_buffer_size(connect_system_buffer_size);
svr.set_tcp_no_delay(false); svr.set_tcp_no_delay(false);
svr.create(); svr.create();
bool ok = svr.listen("0.0.0.0", port); return ucoro::sync_await(svr.listen_coro("0.0.0.0", port));
return true;
} }
Psc::JSON get_clients_json() { Psc::JSON get_clients_json() {
Psc::JSON ret = Psc::JSON::array(); Psc::JSON ret = Psc::JSON::array();
@@ -186,7 +185,7 @@ public:
class Data_Feed_TCP_Client : public Data_Feed { class Data_Feed_TCP_Client : public Data_Feed {
public: public:
void handle_in_loop() override { void handle_in_loop() override {
cli.tick(); ucoro::sync_await(cli.tick_coro());
} }
std::string url; std::string url;
Psc::JSON get_custom_state_json() override { Psc::JSON get_custom_state_json() override {
@@ -203,6 +202,7 @@ public:
sockaddr_in.port = port; sockaddr_in.port = port;
cli.set_dest_address(sockaddr_in); cli.set_dest_address(sockaddr_in);
cli.create(); cli.create();
ucoro::sync_await(cli.connect_coro());
return true; return true;
} }
void from_json(const Psc::JSON* that_json) override { void from_json(const Psc::JSON* that_json) override {
@@ -268,7 +268,7 @@ public:
return VAR_JSON_1(state); return VAR_JSON_1(state);
} }
void handle_in_loop() override { void handle_in_loop() override {
cli.tick(); ucoro::sync_await(cli.tick_coro());
} }
Psc::asio_socket::UDP_Client cli; Psc::asio_socket::UDP_Client cli;
std::string url; std::string url;
@@ -291,7 +291,7 @@ public:
bool _open() override { bool _open() override {
cli.create(); cli.create();
cli.set_dest_address(url, port); cli.set_dest_address(url, port);
cli.connect(); ucoro::sync_await(cli.connect_coro());
return true; return true;
} }
}; };
@@ -202,19 +202,19 @@ void data_feed_thread(std::atomic<bool>& running) {
} }
if (feed->type == "Data_Feed_TCP_Server") { if (feed->type == "Data_Feed_TCP_Server") {
auto it = dynamic_cast<Data_Feed_TCP_Server*>(feed.get()); 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") { else if (feed->type == "Data_Feed_UDP_Server") {
auto it = dynamic_cast<Data_Feed_UDP_Server*>(feed.get()); 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") { else if (feed->type == "Data_Feed_TCP_Client") {
auto it = dynamic_cast<Data_Feed_TCP_Client*>(feed.get()); 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") { else if (feed->type == "Data_Feed_UDP_Client") {
auto it = dynamic_cast<Data_Feed_UDP_Client*>(feed.get()); 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 { struct TCP_Client_Data_Source : Data_Source {
void handle_in_loop() override { void handle_in_loop() override {
cli.tick(); ucoro::sync_await(cli.tick_coro());
} }
Psc::JSON get_custom_state_json() override { Psc::JSON get_custom_state_json() override {
auto& state = cli.state; auto& state = cli.state;
@@ -245,6 +245,7 @@ struct TCP_Client_Data_Source : Data_Source {
cli.set_dest_address(addr); cli.set_dest_address(addr);
cli.create(); cli.create();
ucoro::sync_await(cli.connect_coro());
return true; return true;
} }
void _close() override { cli.close(); } void _close() override { cli.close(); }
@@ -262,7 +263,7 @@ struct TCP_Client_Data_Source : Data_Source {
} }
std::string read() override { std::string read() override {
return cli.read(); return ucoro::sync_await(cli.read_coro());
} }
}; };
struct Serial_Data_Source : Data_Source { struct Serial_Data_Source : Data_Source {