改进协程循环逻辑
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user