finish file recall
This commit is contained in:
@@ -49,6 +49,78 @@ public:
|
||||
std::string VOLTAGE; //补招暂态事件标识 0-不补招;1-补招
|
||||
};
|
||||
|
||||
// ====== ★新增:下载/列目录阶段枚举与结果枚举 ======
|
||||
enum class RecallPhase {
|
||||
IDLE = 0,
|
||||
LISTING, // 正在请求并等待“目录文件名列表”
|
||||
DOWNLOADING // 正在按队列逐个下载
|
||||
};
|
||||
|
||||
enum class ActionResult {
|
||||
PENDING = -1, // 还未返回
|
||||
FAIL = 0,
|
||||
OK = 1
|
||||
};
|
||||
|
||||
// ====== ★修改:扩展 RecallFile,支持“多目录 + 文件筛选 + 串行下载”的状态机 ======
|
||||
class RecallFile
|
||||
{
|
||||
public:
|
||||
int recall_status; // 补招状态 0-未补招 1-补招中 2-补招完成 3-补招失败
|
||||
std::string StartTime; // 数据补招起始时间(yyyy-MM-dd HH:mm:ss)
|
||||
std::string EndTime; // 数据补招结束时间(yyyy-MM-dd HH:mm:ss)
|
||||
std::string STEADY; // 补招历史统计数据标识 0-不补招;1-补招
|
||||
std::string VOLTAGE; // 补招暂态事件标识 0-不补招;1-补招
|
||||
|
||||
//暂态文件用
|
||||
bool direct_mode = false; // 直下文件开关:true 表示不按时间窗,仅按目标文件名
|
||||
std::string target_filename; // 直下文件名(不含目录)
|
||||
|
||||
std::list<std::string> file_paths; // 已下载/要上报的完整路径(用于最终结果)
|
||||
|
||||
// ★新增:按“目录名 -> 文件名列表”的映射;由“其他线程”在目录请求成功后回填
|
||||
std::map<std::string, std::vector<tag_dir_info>> dir_files;
|
||||
|
||||
// ★新增:候选目录(可扩展)
|
||||
std::vector<std::string> dir_candidates{
|
||||
"/cf/COMTRADE",
|
||||
"/bd0/COMTRADE",
|
||||
"/sd0/COMTRADE",
|
||||
"/sd0:1/COMTRADE"
|
||||
};
|
||||
|
||||
// ★新增:状态机运行时变量
|
||||
RecallPhase phase = RecallPhase::IDLE;
|
||||
int cur_dir_index = 0; // 正在尝试的目录下标
|
||||
std::string cur_dir; // 正在处理的目录
|
||||
|
||||
// ★新增:列目录/下载请求“回执位”,由其他线程置位
|
||||
ActionResult list_result = ActionResult::PENDING; // 当前目录的列举结果
|
||||
ActionResult download_result = ActionResult::PENDING; // 当前文件的下载结果
|
||||
|
||||
// ★新增:下载队列(已筛选出在时间窗内的文件,含完整路径)
|
||||
std::list<std::string> download_queue;
|
||||
std::string downloading_file; // 当前正在下载的文件(完整路径)
|
||||
|
||||
// ★新增:一个便捷复位
|
||||
void reset_runtime(bool keep_direct = false)
|
||||
{
|
||||
phase = RecallPhase::IDLE;
|
||||
cur_dir_index = 0;
|
||||
cur_dir.clear();
|
||||
list_result = ActionResult::PENDING;
|
||||
download_result = ActionResult::PENDING;
|
||||
download_queue.clear();
|
||||
downloading_file.clear();
|
||||
dir_files.clear();
|
||||
// ★新增:按需保留直下文件开关和目标名
|
||||
if (!keep_direct) {
|
||||
direct_mode = false;
|
||||
target_filename.clear();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
enum class RecallStatus {
|
||||
NOT_STARTED = 0, // 未补招
|
||||
RUNNING = 1, // 补招中
|
||||
@@ -127,7 +199,8 @@ public:
|
||||
qvvr_event qvvrevent;
|
||||
|
||||
//补招列表
|
||||
std::list<RecallMonitor> recall_list;
|
||||
std::list<RecallMonitor> recall_list; //事件
|
||||
std::list<RecallFile> recall_list_static;//稳态文件
|
||||
|
||||
//定值list
|
||||
std::list<float> set_values;
|
||||
@@ -579,6 +652,15 @@ void on_device_response_minimal(int response_code,
|
||||
|
||||
//处理补招的任务
|
||||
void check_recall_event();
|
||||
void check_recall_file();
|
||||
|
||||
|
||||
//缓存目录信息
|
||||
void filemenu_cache_put(const std::string& dev_id,
|
||||
std::vector<tag_dir_info> FileList);
|
||||
//提取目录信息
|
||||
bool filemenu_cache_take(const std::string& dev_id, std::vector<tag_dir_info>& out);
|
||||
|
||||
|
||||
//小工具
|
||||
inline std::string trim_cstr(const char* s, size_t n) {
|
||||
|
||||
Reference in New Issue
Block a user