DataStorageMgmt.hpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #pragma once
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <vector>
  6. #include <memepp/native.hpp>
  7. #define NOMINMAX // max()无法识别问题是由于与 Windows.h 头文件中的宏定义产生了冲突而导致的编译错误。
  8. #include "ghc/filesystem.hpp"
  9. class DataStorageMgmt
  10. {
  11. public:
  12. DataStorageMgmt();
  13. ~DataStorageMgmt();
  14. //初始化存储,创建数据存储文件句柄
  15. void init_data_storage(memepp::native_string & folderPath, const uint8_t deviceId);
  16. //保存数据到文件
  17. void save_data_to_file(const uint8_t data[], const size_t dataSize, const uint64_t timestamp);
  18. //获取时间戳范围内的历史数据文件,并返回开始时间和结束时间
  19. void get_history_file_list(uint64_t& startTime, uint64_t& endTime, std::vector<ghc::filesystem::path>& hisDataPath);
  20. //根据时间范围,读取历史数据(总召数据)
  21. void read_history_data(const ghc::filesystem::path filePath, std::vector<uint8_t>& historyData);
  22. //当网关离线的时候,创建离线文件
  23. void create_offline_data_file();
  24. //保存离线文件
  25. void save_offline_data_to_file(const uint8_t data[], const size_t dataSize);
  26. //获取所有离线数据文件路径,等待发送
  27. void get_offline_flie_list(std::vector<ghc::filesystem::path>& offlineDataPath);
  28. //读取离线数据
  29. void read_offline_data(const ghc::filesystem::path filePath, std::vector<std::vector<uint8_t>>& cache);
  30. //过了12点到了第二天,需要重新初始化
  31. void to_new_day();
  32. //检查是否小时变化,需要重新创建离线文件
  33. void check_to_next_hour();
  34. //停止存储离线数据
  35. void stop_save_offline();
  36. private:
  37. //删除大于缓存周期的文件
  38. void delete_out_date_file(const memepp::native_string dataFolderPath, uint16_t max_days);
  39. memepp::native_string get_earliest_file(memepp::native_string folderPath);
  40. std::string get_last_filename(memepp::native_string folderPath);
  41. void remove_file(memepp::native_string filePath);
  42. private:
  43. //存储数据的文件夹路径
  44. memepp::native_string m_folderPath;
  45. //历史数据
  46. std::fstream m_history_data_fs;
  47. //存储数据文件数据的目录
  48. memepp::native_string m_history_folder;
  49. memepp::native_string m_history_folder_today;
  50. //离线数据操作句柄,用于断点续传功能
  51. std::fstream m_offline_file_fs;
  52. //离线数据文件夹
  53. memepp::native_string m_offline_folder;
  54. //离线数据文件夹,每天创建一个新文件夹
  55. memepp::native_string m_offline_folder_today;
  56. //记录创建文件的时间,1个小时创建一个文件
  57. memepp::native_string m_strDateTime;
  58. //标识当前小时内第几个离线文件
  59. uint16_t offline_data_file_index;
  60. //存储大于90%以上,就不再存储数据,该状态由应用去判断
  61. bool isCanSave;
  62. };