<add>工作流框架搭建
This commit is contained in:
		
						commit
						a569ee6972
					
				|  | @ -0,0 +1,4 @@ | ||||||
|  | /bin | ||||||
|  | /build | ||||||
|  | /.vscode | ||||||
|  | /.cache | ||||||
|  | @ -0,0 +1,13 @@ | ||||||
|  | cmake_minimum_required(VERSION 3.10) | ||||||
|  | project(workflow VERSION 0.1.0 LANGUAGES CXX) | ||||||
|  | set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin) | ||||||
|  | set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib) | ||||||
|  | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin) | ||||||
|  | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib) | ||||||
|  | set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib) | ||||||
|  | add_compile_definitions(-DSWF_EXPORT_DLL) | ||||||
|  | set(CMAKE_CXX_STANDARD 17) | ||||||
|  | aux_source_directory(src SRC_LIST) | ||||||
|  | add_executable(${PROJECT_NAME} ${SRC_LIST}) | ||||||
|  | 
 | ||||||
|  | target_include_directories(${PROJECT_NAME} PRIVATE include head) | ||||||
|  | @ -0,0 +1,16 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include "INode.h" | ||||||
|  | #include "node_view.h" | ||||||
|  | 
 | ||||||
|  | class SWF_API SWFNode : public WF::INode | ||||||
|  | { | ||||||
|  |     std::vector<node_view> m_next; | ||||||
|  |     std::vector<node_view> m_prev; | ||||||
|  |      | ||||||
|  | public: | ||||||
|  |     SWFNode(); | ||||||
|  | 
 | ||||||
|  |     // 获取节点类型
 | ||||||
|  |     NodeType GetNodeType() const noexcept; | ||||||
|  | }; | ||||||
|  | @ -0,0 +1,30 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include "SWFDefine.h" | ||||||
|  | #include "IFlow.h" | ||||||
|  | #include "node_view.h" | ||||||
|  | 
 | ||||||
|  | namespace WF { class INode; } | ||||||
|  | 
 | ||||||
|  | class SWF_API SWFlow : public WF::IFlow | ||||||
|  | { | ||||||
|  |     // 工作流状态
 | ||||||
|  |     FlowStatus m_nStatus; | ||||||
|  |     // 工作流节点列表
 | ||||||
|  |     std::vector<std::shared_ptr<WF::INode>> m_vecNodes; | ||||||
|  | 
 | ||||||
|  |     node_view m_curNode; // 当前节点视图
 | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  |     SWFlow(); | ||||||
|  |     ~SWFlow() override; | ||||||
|  | 
 | ||||||
|  |     // 运行工作流
 | ||||||
|  |     void Run() override; | ||||||
|  | 
 | ||||||
|  |     // 停止工作流
 | ||||||
|  |     void Stop() override; | ||||||
|  | 
 | ||||||
|  |     // 获取工作流状态
 | ||||||
|  |     int GetStatus() const noexcept override; | ||||||
|  | }; | ||||||
|  | @ -0,0 +1,18 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include "INode.h" | ||||||
|  | 
 | ||||||
|  | class SWF_API node_view | ||||||
|  | { | ||||||
|  |     /*
 | ||||||
|  |      * @brief 节点视图类 | ||||||
|  |      * @note  不管理节点对象的生命周期 | ||||||
|  |      */ | ||||||
|  |     WF::INode* m_node; | ||||||
|  | public: | ||||||
|  |     node_view(WF::INode* node) : m_node(node) {} | ||||||
|  |     ~node_view() = default; | ||||||
|  | 
 | ||||||
|  |     // 获取节点类型
 | ||||||
|  |     NodeType GetNodeType() const noexcept; | ||||||
|  | }; | ||||||
|  | @ -0,0 +1,28 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | /////////////////////////////////////////////////////
 | ||||||
|  | // @file:  IError.h
 | ||||||
|  | // @brief: Error handling interface
 | ||||||
|  | // @author: dyz
 | ||||||
|  | // @date: 2025-04-19
 | ||||||
|  | // @version: 1.0
 | ||||||
|  | /////////////////////////////////////////////////////
 | ||||||
|  | #include "SWFInc.h" | ||||||
|  | 
 | ||||||
|  | namespace WF { | ||||||
|  |     class SWF_API IError | ||||||
|  |     { | ||||||
|  |     public: | ||||||
|  |         virtual ~IError() = default; | ||||||
|  | 
 | ||||||
|  |         // Get the error code
 | ||||||
|  |         virtual int GetErrorCode() const = 0; | ||||||
|  | 
 | ||||||
|  |         // Get the error message
 | ||||||
|  |         virtual const char* GetErrorMessage() const = 0; | ||||||
|  | 
 | ||||||
|  |         // Set the error code and message
 | ||||||
|  |         virtual void SetError(int code, const char* message) = 0; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  | } // namespace WF
 | ||||||
|  | @ -0,0 +1,30 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | /////////////////////////////////////////////////////
 | ||||||
|  | // @file: IFlow.h
 | ||||||
|  | // @brief:  Interface for the Flow class
 | ||||||
|  | // @author: dyz
 | ||||||
|  | // @date: 2025-04-19
 | ||||||
|  | // @version: 1.0
 | ||||||
|  | /////////////////////////////////////////////////////
 | ||||||
|  | 
 | ||||||
|  | #include "SWFInc.h" | ||||||
|  | 
 | ||||||
|  | namespace WF { | ||||||
|  | 
 | ||||||
|  |     class SWF_API IFlow | ||||||
|  |     { | ||||||
|  |     public: | ||||||
|  |         virtual ~IFlow() = default; | ||||||
|  | 
 | ||||||
|  |         // 运行工作流
 | ||||||
|  |         virtual void Run() = 0; | ||||||
|  | 
 | ||||||
|  |         // 停止工作流
 | ||||||
|  |         virtual void Stop() = 0; | ||||||
|  | 
 | ||||||
|  |         // 获取工作流状态
 | ||||||
|  |         virtual int GetStatus() const = 0; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  | } // namespace WF
 | ||||||
|  | @ -0,0 +1,26 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | /////////////////////////////////////////////////////
 | ||||||
|  | // @file: INode.h
 | ||||||
|  | // @brief: Interface for the Node class
 | ||||||
|  | // @author: dyz
 | ||||||
|  | // @date: 2025-04-19
 | ||||||
|  | // @version: 1.0
 | ||||||
|  | /////////////////////////////////////////////////////
 | ||||||
|  | 
 | ||||||
|  | #include "SWFInc.h" | ||||||
|  | #include "SWFDefine.h" | ||||||
|  | 
 | ||||||
|  | namespace WF | ||||||
|  | { | ||||||
|  |     class SWF_API INode | ||||||
|  |     { | ||||||
|  |     public: | ||||||
|  |         // 执行节点的操作
 | ||||||
|  |         virtual void exec() = 0; | ||||||
|  |         virtual INode* clone() const = 0; | ||||||
|  |         virtual NodeType GetNodeType() const = 0; | ||||||
|  |         virtual ~INode() = default; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  | } // namespace WF
 | ||||||
|  | @ -0,0 +1,46 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | //////////////////////////////////////////////////////
 | ||||||
|  | // @file: SWFDefine.h
 | ||||||
|  | // @brief: 工作流类型定义
 | ||||||
|  | // @author: dyz
 | ||||||
|  | // @date: 2025-04-19
 | ||||||
|  | // @version: 1.0
 | ||||||
|  | //////////////////////////////////////////////////////
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /**********************************************************
 | ||||||
|  |  * @brief 工作流节点类型定义 | ||||||
|  |  * @note 该定义用于工作流节点的类型标识 | ||||||
|  | **********************************************************/ | ||||||
|  | #define FOR_MEMORY_NODETYPE(_f) \ | ||||||
|  |     _f(START)  \ | ||||||
|  |     _f(END)    \ | ||||||
|  |     _f(IF)     \ | ||||||
|  |     _f(ACTIVTIY) \ | ||||||
|  |     _f(SEND)   \ | ||||||
|  |     _f(RECEIVE) \ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #define FOR_MEMORY_FLOWSTATUS(_f) \ | ||||||
|  |     _f(INIT)  \ | ||||||
|  |     _f(RUNNING)    \ | ||||||
|  |     _f(END)     \ | ||||||
|  |     _f(ERROR) \ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | enum class NodeType | ||||||
|  | { | ||||||
|  | #define _f(_name) _name, | ||||||
|  |     FOR_MEMORY_NODETYPE(_f) | ||||||
|  | #undef _f | ||||||
|  |     MAX_NODETYPE | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | enum class FlowStatus | ||||||
|  | { | ||||||
|  | #define _f(_name) _name, | ||||||
|  |     FOR_MEMORY_FLOWSTATUS(_f) | ||||||
|  | #undef _f | ||||||
|  |     MAX_FLOWSTATUS | ||||||
|  | }; | ||||||
|  | @ -0,0 +1,23 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #ifdef _WIN32 | ||||||
|  | #   ifdef SWF_EXPORT_DLL | ||||||
|  | #       define SWF_API __declspec(dllexport) | ||||||
|  | #   else | ||||||
|  | #       define SWF_API __declspec(dllimport) | ||||||
|  | #   endif | ||||||
|  | #else | ||||||
|  | #   ifdef SWF_EXPORT_DLL | ||||||
|  | #       define SWF_API __attribute__((visibility("default"))) | ||||||
|  | #   else | ||||||
|  | #       define SWF_API | ||||||
|  | #   endif | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | // 公共头文件
 | ||||||
|  | #include <iostream> | ||||||
|  | #include <string> | ||||||
|  | #include <vector> | ||||||
|  | #include <map> | ||||||
|  | #include <memory> | ||||||
|  | #include <algorithm> | ||||||
|  | @ -0,0 +1,10 @@ | ||||||
|  | #include "INode.h" | ||||||
|  | #include "SWFlow.h" | ||||||
|  | 
 | ||||||
|  | void SWFlow::Run() { | ||||||
|  | 
 | ||||||
|  |     // 按照序列执行节点
 | ||||||
|  |     for (auto& node : m_vecNodes) { | ||||||
|  |         node->exec(); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,10 @@ | ||||||
|  | #include "IFlow.h" | ||||||
|  | #include "SWFlow.h" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | int main(){ | ||||||
|  |     WF::IFlow* flow = new SWFlow(); | ||||||
|  |     flow->Run(); | ||||||
|  |      | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue