#ifndef TIMER_MANAGER_H #define TIMER_MANAGER_H #include #include #include #include #include #include #include #include #include #include #include // 定时任务类型 enum class TimerType { COUNTDOWN, // 倒计时 DELAYED_EXEC, // 延时执行 PERIODIC, // 周期性任务 SCHEDULED // 定时执行 }; // 定时任务状态 enum class TimerStatus { PENDING, // 等待中 RUNNING, // 运行中 COMPLETED, // 已完成 CANCELLED, // 已取消 FAILED // 失败 }; // MCP工具回调函数类型 using McpToolCallback = std::function; // 定时任务结构 struct TimerTask { std::string id; // 唯一标识符 std::string name; // 任务名称 TimerType type; // 任务类型 TimerStatus status; // 任务状态 uint32_t duration_ms; // 持续时间(毫秒) time_t scheduled_time; // 预定执行时间 time_t created_time; // 创建时间 time_t start_time; // 开始时间 time_t end_time; // 结束时间 // MCP工具相关 std::string mcp_tool_name; // MCP工具名称 std::string mcp_tool_args; // MCP工具参数 McpToolCallback callback; // 回调函数 // 周期性任务相关 uint32_t interval_ms; // 间隔时间(毫秒) int repeat_count; // 重复次数(-1表示无限) int current_repeat; // 当前重复次数 // 用户数据 std::string user_data; // 用户自定义数据 std::string description; // 任务描述 TimerTask() : type(TimerType::COUNTDOWN), status(TimerStatus::PENDING), duration_ms(0), scheduled_time(0), created_time(0), start_time(0), end_time(0), interval_ms(0), repeat_count(0), current_repeat(0) {} }; class TimerManager { public: static TimerManager& GetInstance() { static TimerManager instance; return instance; } // 倒计时器功能 std::string CreateCountdownTimer(const std::string& name, uint32_t duration_ms, const std::string& description = ""); // 延时执行MCP工具 std::string CreateDelayedMcpTask(const std::string& name, uint32_t delay_ms, const std::string& mcp_tool_name, const std::string& mcp_tool_args = "", const std::string& description = ""); // 周期性任务 std::string CreatePeriodicTask(const std::string& name, uint32_t interval_ms, int repeat_count = -1, // -1表示无限重复 const std::string& mcp_tool_name = "", const std::string& mcp_tool_args = "", const std::string& description = ""); // 定时执行任务 std::string CreateScheduledTask(const std::string& name, time_t scheduled_time, const std::string& mcp_tool_name, const std::string& mcp_tool_args = "", const std::string& description = ""); // 任务管理 bool StartTask(const std::string& task_id); bool StopTask(const std::string& task_id); bool CancelTask(const std::string& task_id); bool DeleteTask(const std::string& task_id); // 查询功能 TimerTask* GetTask(const std::string& task_id); std::vector GetAllTasks(); std::vector GetTasksByStatus(TimerStatus status); std::vector GetRunningTasks(); std::vector GetUpcomingTasks(int minutes = 60); // 统计功能 int GetTaskCount(); int GetTaskCountByStatus(TimerStatus status); int GetTaskCountByType(TimerType type); // 系统控制 void StartManager(); void StopManager(); bool IsRunning(); // 回调设置 void SetTaskCompletedCallback(std::function callback); void SetTaskFailedCallback(std::function callback); // 数据持久化 bool SaveToStorage(); bool LoadFromStorage(); // 导出功能 std::string ExportToJson(); private: TimerManager(); ~TimerManager(); // 内部方法 std::string GenerateTaskId(); void TaskWorker(); void ExecuteTask(TimerTask& task); bool ExecuteMcpTool(const std::string& tool_name, const std::string& args); void UpdateTaskStatus(TimerTask& task, TimerStatus status); void NotifyTaskCompleted(const TimerTask& task); void NotifyTaskFailed(const TimerTask& task, const std::string& error); // FreeRTOS定时器回调 static void TimerCallback(TimerHandle_t timer_handle); std::map tasks_; std::map timers_; std::mutex tasks_mutex_; std::atomic is_running_; std::thread worker_thread_; // 回调函数 std::function task_completed_callback_; std::function task_failed_callback_; static const char* TAG; }; #endif // TIMER_MANAGER_H