readmodulefromredis.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include "readmodulefromredis.h"
  2. #include <QJsonArray>
  3. #include <QJsonObject>
  4. #include <QJsonDocument>
  5. #include <QtCore/QTextCodec>
  6. #include <fstream>
  7. readmodulefromredis::readmodulefromredis(RedisAgent* redis)
  8. {
  9. m_pRedis = redis;
  10. }
  11. bool readmodulefromredis::parse(QString cfg,ModuleInfo& moduleInfo)
  12. {
  13. QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
  14. QTextCodec::setCodecForLocale(utf8);
  15. QJsonParseError err;
  16. QJsonDocument jsonDoc(QJsonDocument::fromJson(cfg.toLocal8Bit(),&err));
  17. QJsonObject jsonObject = jsonDoc.object();
  18. QStringList keys = jsonObject.keys();
  19. foreach (QString key, keys)
  20. {
  21. if( key.compare("name",Qt::CaseInsensitive) == 0)
  22. {
  23. moduleInfo.Name = jsonObject["name"].toString().toLocal8Bit().toStdString();
  24. }
  25. else if( key.compare("code",Qt::CaseInsensitive) == 0)
  26. {
  27. moduleInfo.Code = jsonObject["code"].toString().toLocal8Bit().toStdString();
  28. }
  29. else if( key.compare("type",Qt::CaseInsensitive) == 0)
  30. {
  31. QString type = jsonObject["type"].toString();
  32. moduleInfo.Type = control;
  33. }
  34. else if( key.compare("model",Qt::CaseInsensitive) == 0)
  35. {
  36. moduleInfo.AssemblyName = jsonObject["model"].toString().toLocal8Bit().toStdString();
  37. }
  38. else if( key.compare("serverId",Qt::CaseInsensitive) == 0)
  39. {
  40. moduleInfo.serverId = jsonObject["serverId"].toInt();
  41. }
  42. else if( key.compare("settings",Qt::CaseInsensitive) == 0)
  43. {
  44. QJsonObject jsonSettings = jsonObject["settings"].toObject();
  45. QStringList lst = jsonSettings.keys();
  46. foreach (QString item, lst)
  47. {
  48. Setting oSetting;
  49. oSetting.Name = item.toLocal8Bit().toStdString();
  50. QJsonValue::Type t = jsonSettings[item].type();
  51. switch( t )
  52. {
  53. case QJsonValue::Bool:
  54. oSetting.qValue = jsonSettings[item].toBool();
  55. break;
  56. case QJsonValue::Double:
  57. oSetting.qValue = jsonSettings[item].toDouble();
  58. break;
  59. case QJsonValue::String:
  60. oSetting.qValue = jsonSettings[item].toString();
  61. break;
  62. }
  63. moduleInfo.vSettings.push_back(oSetting);
  64. }
  65. }
  66. else if( key.compare("inputs",Qt::CaseInsensitive) == 0)
  67. {
  68. if( jsonObject["inputs"].isArray() )
  69. {
  70. QJsonArray arr = jsonObject["inputs"].toArray();
  71. for(auto i : arr)
  72. {
  73. if( i.type() == QJsonValue::String )
  74. {
  75. moduleInfo.lstInputs.push_back(i.toString().toLocal8Bit().toStdString());
  76. }
  77. }
  78. }
  79. }
  80. }
  81. return true;
  82. }
  83. std::list<ModuleInfo> readmodulefromredis::loadModules(QString id)
  84. {
  85. std::list<ModuleInfo> lstModules;
  86. if( m_pRedis != nullptr)
  87. {
  88. QStringList lst = m_pRedis->hvals("intelligentcontrol");
  89. foreach (QString str, lst) // 我就不取hkey了,那个就是用编号区分一下
  90. {
  91. if( str.isEmpty() )
  92. continue;
  93. ModuleInfo moduleInfo;
  94. if( parse(str,moduleInfo) )
  95. {
  96. // 判断一下是否这个服务器管理的实例,如果是的话加入
  97. if(moduleInfo.serverId == id.toInt())
  98. lstModules.push_back(moduleInfo);
  99. }
  100. }
  101. }
  102. return lstModules;
  103. }