DataEngine.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #include "DataEngine.h"
  2. #include "DeviceManagerProxy.h"
  3. #include <QJsonArray>
  4. #include <QJsonObject>
  5. #include <QJsonDocument>
  6. #include <fstream>
  7. #include <QtCore/QVariant>
  8. #include <QtCore/QDebug>
  9. #include <QtWidgets/QApplication>
  10. extern std::string loadContent(std::string szFilename);
  11. DataEngine::DataEngine()
  12. :QObject()
  13. {
  14. m_pRedis = nullptr;
  15. m_pTDengine = nullptr;
  16. m_mpDevControler.clear();
  17. }
  18. void DataEngine::OnData(std::string name,QVariant val)
  19. {
  20. // if( m_pRedis != nullptr )
  21. // {
  22. // m_pRedis->Publish(name, val);
  23. // }
  24. // else
  25. // {
  26. // qCritical() << __FILE__ << __LINE__ << " " << "no publisher.";
  27. // }
  28. if( m_pTDengine != nullptr )
  29. {
  30. m_pTDengine->Publish(name, val);
  31. }
  32. else
  33. {
  34. qCritical() << __FILE__ << __LINE__ << " " << "no publisher.";
  35. }
  36. }
  37. void DataEngine::sltSubData(char* topic, char* msg)
  38. {
  39. if(m_mpDevControler.find(topic) == m_mpDevControler.end())
  40. {
  41. return;
  42. }
  43. m_mpDevControler[topic]->OnSubData(topic,msg);
  44. }
  45. void loadConfig(std::string szFile,Config& config)
  46. {
  47. std::string cfg = loadContent(szFile);
  48. QJsonDocument jsonDoc(QJsonDocument::fromJson(cfg.c_str()));
  49. QJsonObject json = jsonDoc.object();
  50. QStringList keys = json.keys();
  51. if( keys.contains("serverid",Qt::CaseInsensitive))
  52. {
  53. config.serverId = json["serverid"].toString().toLocal8Bit().toStdString();
  54. }
  55. if( keys.contains("module",Qt::CaseInsensitive))
  56. {
  57. config.appName = json["module"].toString().toLocal8Bit().toStdString();
  58. }
  59. }
  60. void DataEngine::Startup()
  61. {
  62. // merge file name
  63. QString szWorkDir = qApp->applicationDirPath();
  64. if( szWorkDir.right(1).contains("/") == false && szWorkDir.right(1).contains("\\") == false)
  65. {
  66. szWorkDir += "/";
  67. }
  68. std::string szFile = szWorkDir.toLocal8Bit().toStdString() + "config/server.json";
  69. // load server config
  70. std::map<std::string,tagSetup> mpConfig;
  71. std::string cfg = loadContent(szFile);
  72. QJsonDocument jsonDoc(QJsonDocument::fromJson(cfg.c_str()));
  73. QJsonArray ja = jsonDoc.array();
  74. for(auto i : ja)
  75. {
  76. QJsonObject json = i.toObject();
  77. QStringList items = json.keys();
  78. if( items.contains("ignore",Qt::CaseInsensitive) && json["ignore"].type() == QJsonValue::Bool && json["ignore"].toBool())
  79. {
  80. continue;
  81. }
  82. tagSetup ts;
  83. ts.addr = json["addr"].toString().toLocal8Bit().toStdString();
  84. ts.user = json["user"].toString().toLocal8Bit().toStdString();
  85. ts.password = json["password"].toString().toLocal8Bit().toStdString();
  86. ts.db = json["database"].toString().toLocal8Bit().toStdString();
  87. ts.port = json["port"].toInt();
  88. std::string szName = json["name"].toString().toLocal8Bit().toStdString();
  89. mpConfig[szName] = ts;
  90. }
  91. m_pRedis = new RedisAgent();
  92. m_pRedis->Connect(mpConfig["redis"]); // redis
  93. m_pTDengine = new TDAgent();
  94. m_pTDengine->Connect(mpConfig["tdengine"]); // td
  95. // server.id
  96. Config config;
  97. loadConfig(szWorkDir.toLocal8Bit().toStdString() + "config/alarm.json",config);
  98. DeviceManagerProxy dm(m_pRedis);
  99. std::list<AlarmRuler> lstRulers = dm.loadDevices(config.serverId, config.appName);
  100. DeviceController* pControler = new DeviceController();
  101. pControler->regConsumer(this);
  102. pControler->CreateDevice(config.appName,lstRulers);
  103. std::list<std::string> topics;
  104. std::list<AlarmRuler>::iterator itr;
  105. for( itr = lstRulers.begin(); itr != lstRulers.end(); ++itr )
  106. {
  107. std::string szTopic = itr->NodeCode + "." + itr->DataItemCode;
  108. m_mpDevControler[szTopic] = pControler;
  109. topics.push_back(szTopic);
  110. }
  111. m_pTDengine->Subscribe(topics);
  112. connect(m_pTDengine,SIGNAL(sigEvent(char*, char*)),this,SLOT(sltSubData(char*, char*)));
  113. }