<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