JedpUtil.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. //
  2. // Created by Ht on 2022/10/18.
  3. //
  4. #ifndef IOT_EDGE_VDALNEW_SERIALUTIL_H
  5. #define IOT_EDGE_VDALNEW_SERIALUTIL_H
  6. #include "JAExObjectV.h"
  7. namespace jedge {
  8. class JE_API SerialUtil {
  9. public:
  10. static void loadInnerClasses(QJAMgServer &server) {
  11. auto cls = server.Class(sval_class_name_jedp_);
  12. bindJAClassCreator(cls, QJAJedpTranser);
  13. JAUDS_DEFINE_CLASS_METHOD_WITH_STACK(server, cls, QJAJedpTranser, makeMsg);
  14. JAUDS_DEFINE_CLASS_METHOD_WITH_STACK(server, cls, QJAJedpTranser, loadMsg);
  15. JAUDS_DEFINE_CLASS_METHOD_WITH_STACK(server, cls, QJAJedpTranser, loadRule);
  16. //创建一个Jedp对象
  17. auto stack_ = server.findClass("stack");
  18. //查看当前可用的rule情况
  19. stack_->Method("rules", [&server] JAMethodConst(s,o,qm,sp) {
  20. FLogR("Run rule load command as : loadJedp <file>[.json]. Available belows:");
  21. QStringList fl;
  22. auto base = server.getSubCacheDirFullPath("vdal/rule",nullptr);
  23. auto bsize= base.size()+1;
  24. FileUtils::listFiles(base , "json", fl);
  25. auto re = s.findObject("rsp");
  26. for (const auto &f :fl) // NOLINT(altera-unroll-loops)
  27. FLogR("\t->%s%s%s", qlog_HighLight, f.substr(bsize).c_str(), qlog_LOG);
  28. FLogR("==END");
  29. if(re!=nullptr) {
  30. Json::Value files;
  31. for (const auto &f :fl) // NOLINT(altera-unroll-loops)
  32. files.append(f.substr(bsize));
  33. OkRsp(*re);
  34. re->put("files", files);
  35. }
  36. return true;
  37. });
  38. //loadJedp ruleName [objName, [ruleFilePath]]
  39. //创建一个rule对象,并加载某路径
  40. stack_->Method("loadJedp", [&server] JAMethodConst(s,o,qm,sp) {
  41. PREPARE_PARAM(param, sp);
  42. auto ruleName = param.getParam(0);
  43. auto objName = param.getParam(1, ruleName);
  44. param.putString("ruleName", ruleName);
  45. //相对路径
  46. auto rulePath = param.getParam(2);
  47. param.clearDataStartWith("@");
  48. if(rulePath.empty()) {
  49. rulePath = server.getSubCacheDirFullPath("vdal/rule", (objName + ".json").c_str(), nullptr);
  50. param.insertParamAt(0, rulePath.c_str(), nullptr);
  51. }
  52. qlibc::QData config;
  53. config.copyDataNotStartWith(param, '@');
  54. auto* jedp = new QJAJedpTranser(s.getContext(), config);
  55. jedp->setName(objName);
  56. if(!jedp->loadRule(s, param, nullptr)) {
  57. delete jedp;
  58. QWarn("Fail to load jedp %s : %s", objName.c_str(), rulePath.c_str());
  59. return false;
  60. }
  61. s.getContext().Object(objName, jedp); //首先占用缓存。如果http服务已经存在,则覆盖之、前序http服务器被释放
  62. QLog("create a default jedp server ok named %s as Rule : %s", objName.c_str(), ruleName.c_str());
  63. return true;
  64. });
  65. }
  66. static void releaseClasses(QJAMgServer &server) {
  67. server.releaseClass(sval_class_name_jedp_);
  68. server.removeClassMethod("stack", "loadJedp");
  69. server.removeClassMethod("stack", "rules");
  70. }
  71. };
  72. }
  73. #endif //IOT_EDGE_VDALNEW_SERIALUTIL_H