#ifndef __NODES_AND_CONNECTORS__ #define __NODES_AND_CONNECTORS__ #include #include #include "imgui.h" #include "imnodes.h" #include "ID_Generator.hpp" // =====================================接口抽象====================================================== class Abs_Connector // 抽象接口类 { protected: typedef enum { CONNECTOR_TYPE_UNKNOWN, // 未知连接点类型 CONNECTOR_TYPE_OUTPUT, // 输出 CONNECTOR_TYPE_INPUT, // 输入 } Connector_Type_Enum; // 接口类型枚举 // ID 分配器 Independent_ID_Generator *ID_Generator; int id; // ID Connector_Type_Enum type; // 类型标识 const char *socket_str; // 套接字字符串 Abs_Connector *provider; // 提供者 std::vector receiver_list; // 接收方 void *product; // 产物 public: // 显式禁用默认构造 Abs_Connector() = delete; // 必要构造 Abs_Connector(Independent_ID_Generator *ID_Generator, Connector_Type_Enum type, const char *socket_str); // 析构 ~Abs_Connector(); // 连接到目标连接点 virtual bool Connect_To(Abs_Connector *target); // 断开连接 virtual void Disconnect(void); // 注册产物 virtual bool Register_Product(void *product, size_t size); // 获取上级节点 virtual Abs_Connector *Get_Provider(void); // 获取产物 virtual void *Get_Product(void); // 获取ID virtual int Get_ID(void); // 绘制连接点 virtual void Show(void) = 0; }; // =====================================节点抽象====================================================== class Abs_Node // 抽象节点类 { protected: typedef enum { NODE_TYPE_UNKNOWN, // 未知节点类型 NODE_TYPE_MSG_LINE_INPUT, // 消息输入节点 NODE_TYPE_CSV_EXPORTER, // CSV输出节点 } Node_Type_Enum; // 节点类型枚举 // ID 分配器 Independent_ID_Generator *Node_ID_Generator; // 节点ID生成器 Independent_ID_Generator *Connector_ID_Generator; // 连接点ID生成器 int id; // ID Node_Type_Enum type; // 类型 ImVec2 initial_position; // 初始位置 bool close_flag; // 关闭标志位 // 接口列表 std::vector> Connector_List; public: // 显式禁用默认构造 Abs_Node() = delete; // 必要构造 Abs_Node(Independent_ID_Generator *Node_ID_Generator, Independent_ID_Generator *Connector_ID_Generator, Node_Type_Enum type, ImVec2 initial_position = ImVec2(0, 0)); // 析构 ~Abs_Node(); // 绘制节点 virtual void Show(void) = 0; // 执行处理流程 virtual bool Execute_Process(void) = 0; // 获取关闭信号 virtual bool Get_CloseFlag(void); // 获取接口列表 std::vector> &Get_Connector_List(void); }; // ====================================接口类声明================================================ // DLT信息输出接口 class MSG_OutPut_Connector : public Abs_Connector { public: // 显式禁用默认构造 MSG_OutPut_Connector() = delete; // 必要构造 explicit MSG_OutPut_Connector(Independent_ID_Generator *ID_Generator); // 绘制接口 virtual void Show(void); }; // DLT信息输入接口 class MSG_InPut_Connector : public Abs_Connector { public: // 显式禁用默认构造 MSG_InPut_Connector() = delete; // 必要构造 explicit MSG_InPut_Connector(Independent_ID_Generator *ID_Generator); // 绘制接口 virtual void Show(void); }; // CSV 列输入接口 class CSV_Column_Input_Connector : public Abs_Connector { public: // 显式禁用默认构造 CSV_Column_Input_Connector() = delete; // 必要构造 explicit CSV_Column_Input_Connector(Independent_ID_Generator *ID_Generator); // 绘制接口 virtual void Show(void); }; // CSV 列输出接口 class CSV_Column_Output_Connector : public Abs_Connector { public: // 显式禁用默认构造 CSV_Column_Output_Connector() = delete; // 必要构造 explicit CSV_Column_Output_Connector(Independent_ID_Generator *ID_Generator); // 绘制接口 virtual void Show(void); }; // ====================================节点类声明================================================ // 接口测试节点 class Connector_Test_Node : public Abs_Node { public: // 显式禁用默认构造 Connector_Test_Node() = delete; // 必要构造 Connector_Test_Node(Independent_ID_Generator *Node_ID_Generator, Independent_ID_Generator *Connector_ID_Generator, ImVec2 initial_position = ImVec2(0, 0)); // 绘制节点 virtual void Show(void); // 执行处理流程 virtual bool Execute_Process(void); }; // DLT信息输入类,起始点 class MSG_Input_Node : public Abs_Node { public: // 显式禁用默认构造 MSG_Input_Node() = delete; // 必要构造 MSG_Input_Node(Independent_ID_Generator *Node_ID_Generator, Independent_ID_Generator *Connector_ID_Generator, ImVec2 initial_position = ImVec2(0, 0)); // 绘制节点 virtual void Show(void); // 执行处理流程 virtual bool Execute_Process(void); }; #endif