改进协程循环逻辑

This commit is contained in:
2026-06-25 15:01:29 +08:00
parent 03bfac8d0c
commit 1504db9db0
12 changed files with 409 additions and 484 deletions
+13 -28
View File
@@ -4,6 +4,7 @@
#include "Data_Source_Handler.h"
namespace Psc {
class SM_RingBuffer;
}
@@ -67,19 +68,16 @@ protected:
class Data_Source : public std::enable_shared_from_this<Data_Source>, public Data_Source_Handler {
public:
~Data_Source() override = default;
std::unique_ptr<concurrencpp::result<void>> loop_task;
std::shared_ptr<Data_Source> that();
virtual concurrencpp::result<std::string> read_coro() {co_return "";};
bool registered() const;
virtual Psc::JSON get_custom_state_json() = 0;
Psc::JSON get_state();
std::string last_char; // 用于处理奇数字节的情?
// std::shared_ptr<Input_Format> parse_format;
std::string last_char; // 用于处理奇数字节
Data_Source();
concurrencpp::result<void> loop_coro(std::shared_ptr<concurrencpp::worker_thread_executor> executor) override;
std::shared_ptr<SSR::Mode_Msg> last_prase_msg = nullptr;
virtual concurrencpp::result<void> handle_in_loop_coro(){co_return;}
std::atomic<bool> enable{};
std::string type;
std::atomic<bool> base_station_show{};
std::atomic<bool> aircraft_show{};
@@ -144,29 +142,12 @@ public:
Get_J(keep_mode);
// parse_format->from_json(that_json->get("parse_format"));
}
bool open() {
if (!_open_) {
_open_ = _open();
return _open_;
}
return true;
}
bool is_open() const { return _open_; }
void close() {
if (_open_) {
_open_ = false;
_close();
}
}
std::string buffer;
protected:
bool _open_ = false;
virtual bool _open() = 0;
virtual void _close() = 0;
};
struct TCP_Client_Data_Source : Data_Source {
class TCP_Client_Data_Source : public Data_Source {
public:
concurrencpp::result<void> handle_in_loop_coro() override {
co_await cli.tick_coro();
co_return;
@@ -212,7 +193,8 @@ struct TCP_Client_Data_Source : Data_Source {
co_return co_await cli.read_coro();
}
};
struct Serial_Data_Source : Data_Source {
class Serial_Data_Source : public Data_Source {
public:
std::string port_name;
Baud_Rate_Type baud_rate{};
Psc::JSON get_custom_state_json() override {
@@ -283,7 +265,8 @@ enum class File_Data_Type {
enum Play_Mode { one, loop, analysis, time_batch };
struct File_Data_Source : public Data_Source {
class File_Data_Source : public Data_Source {
public:
std::string file_path;
File_Data_Type data_type = File_Data_Type::BIN_Blank_Text;
Play_Mode play_mode = Play_Mode::one;
@@ -343,7 +326,8 @@ struct File_Data_Source : public Data_Source {
std::vector<std::string> part_infos;
std::mutex mtx;
};
struct Dll_Data_Source : Data_Source {
class Dll_Data_Source : public Data_Source {
public:
Psc::JSON get_custom_state_json() override {
auto ret = VAR_JSON_1(state);
ret.append({"read_vaild_len", vs.to_string()});
@@ -410,7 +394,8 @@ struct Dll_Data_Source : Data_Source {
};
struct Shared_Memory_Data_Source : Data_Source {
class Shared_Memory_Data_Source : public Data_Source {
public:
Psc::JSON get_custom_state_json() override {
return Psc::JSON::object();
}