瀏覽代碼

update configs

ZenZ 1 年之前
父節點
當前提交
57f8dad9ca

+ 37 - 0
DataManagerMain/Config.cpp

@@ -0,0 +1,37 @@
+#include "Config.h"
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QJsonArray>
+#include <QFile>
+
+
+Config::Config(const QString &filename)
+{
+    // QMap<QString, QString> configMap;
+
+    //QString fullpath = QCoreApplication::applicationDirPath() + "/config.json";
+    QFile file(filename);
+    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+        //LOGERROR("open {} error", filename.toStdString().c_str());
+        return;
+    }
+    QByteArray array = file.readAll();
+    file.close();
+    QJsonParseError jsonParseError;
+    QJsonDocument jsonDocument(QJsonDocument::fromJson(array, &jsonParseError));
+    if(QJsonParseError::NoError != jsonParseError.error)
+    {
+        //LOGERROR("parse json file {} error", fullpath.toStdString().c_str());
+        return;
+    }
+    if(!jsonDocument.isObject()){
+        return;
+    }
+    QJsonObject obj = jsonDocument.object();
+    QString appName = obj["AppName"].toString();
+    QString appId = obj["AppId"].toString();
+    QJsonObject redis = obj["redis"].toObject();
+    redisCfg.host = redis["host"].toString();
+    redisCfg.port = redis["port"].toInt();
+    redisCfg.au = redis["au"].toString();
+}

+ 19 - 0
DataManagerMain/Config.h

@@ -0,0 +1,19 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+#include <QString>
+class Config
+{
+public:
+    Config() = delete;
+    Config(const QString& filename);
+    struct RedisConfig{
+        QString host;
+        uint16_t port;
+        QString au;
+    };
+    RedisConfig redisCfg;
+    QString AppName;
+    QString AppId;
+};
+
+#endif // CONFIG_H

+ 4 - 3
DataManagerMain/DataManager.cpp

@@ -4,6 +4,7 @@
 #include "DataSubscribe.h"
 #include "DataConsumer.h"
 #include <QDebug>
+
 DataManager::DataManager() {
 
 }
@@ -20,11 +21,11 @@ DataManager::~DataManager()
 //     //consumerMap[key]->OnData(key, val);
 // }
 
-void DataManager::Startup()
+void DataManager::Startup(Config& config)
 {
-    Config config;
+    //Config config;
     DataManagerProxy dmp;
-    auto lstModules = dmp.loadModuleInfos(config.serverId, config.appName);
+    auto lstModules = dmp.loadModuleInfos(config.AppId.toStdString().c_str(), config.AppName.toStdString().c_str());
 
     for(auto itr = lstModules.consumers.begin(); itr != lstModules.consumers.end(); ++itr){
         //ScopedPointer<DataConsumer> consumer {new DataConsumer()};

+ 3 - 1
DataManagerMain/DataManager.h

@@ -6,13 +6,15 @@
 #include "DataConsumer.h"
 #include "DataSubscribe.h"
 #include <QSharedDataPointer>
+#include "Config.h"
 class DataManager
 {
 public:
     DataManager();
+    ~DataManager();
 public:
     //virtual void OnData(std::string key, QVariant val);
-    void Startup();
+    void Startup(Config& config);
 
 private:
     QMap<QString, DataConsumer*> consumerMap;

+ 3 - 1
DataManagerMain/DataManagerMain.pro

@@ -13,7 +13,8 @@ HEADERS += \
     ../include/JobModule.h \
     ../include/LibraryLoader.h \
     ../include/RunnableModule.h \
-    ../include/Publisher.h
+    ../include/Publisher.h \
+    Config.h
 
 
 HEADERS += \
@@ -23,6 +24,7 @@ HEADERS += \
     DataSubscribe.h
 
 SOURCES += \
+        Config.cpp \
         DataConsumer.cpp \
         DataManager.cpp \
         DataManagerProxy.cpp \

+ 21 - 71
DataManagerMain/DataManagerProxy.cpp

@@ -4,95 +4,45 @@ DataManagerProxy::DataManagerProxy() {
 
 }
 
-DataManagerInfo DataManagerProxy::loadModuleInfos(int id, std::string app)
+QList<DataManagerInfo> DataManagerProxy::loadModuleInfos(const char* id, const char* app)
 {
-/*
-    DataItem objDataItem;
-    objDataItem.Id = 1;
-    objDataItem.Code = "CEJINGYI-001.TEMP";
-    objDataItem.DataName = "1号测径仪温度";
-    objDataItem.DataType = "Integer";
-    objDataItem.Description = "1号测径仪温度值";
-    objDataItem.Displayed = true;
 
-    ModuleInfo objModule;
-    objModule.Id = 1;
-    objModule.Name = "Modbus000";
-    objModule.Model = "Modbus Com A0001";
-    objModule.Code = "Modbus000-1";
-    objModule.Type = ModuleType::Sensor;
-    objModule.AssemblyName = "plugins/SampleTemperature.dll";
-    objModule.ClassName = "Lanpeng.Module.Sensors.Modbus001";
-    objModule.Version = "1.0";
-
-    DeviceInfo objDevice;
-    objDevice.Id = 1;
-    objDevice.Name = "测径仪温度传感器";
-    objDevice.Type = "传感器";
-    objDevice.Model = "Temperatur Sensor A001";
-    objDevice.Code = "ASCDSC001221S";
-    objDevice.Description = "aaaaa";
-    objDevice.ModuleInfo = objModule;
-    objDevice.Properties.push_back(objDataItem);
-*/
     RedisClient* redis = new RedisClient();
-
-    /*DeviceInfo di;
+    QList<DataManagerInfo > listDataManageInfo;
+    QString key = QString("%1:%2").arg(app).arg(id);
+    DeviceInfo di;
     if( redis != nullptr)
     {
-        ModuleInfo mi;
-        mi.Code = "alarm";
-        mi.AssemblyName = app;
-
-        DataItem oDT;
-        oDT.Code = "data";
-        mi.Properties.push_back(oDT);
-        QStringList lst = redis->hvals(id.c_str());
+        QStringList lst = redis->hvals(key);
         foreach (QString str, lst)
         {
             if( str.isEmpty() )
             {
                 continue;
             }
+            ModuleInfo mi;
+            mi.Name = "RedisSubscriber";
 
-            AlarmRuler ar;
-            if( parse(str,ar) )
-            {
-                QString szJson;
-                szJson += "{";
-                szJson += QString("\"Operator\":\"%1\",").arg(ar.Operator.c_str());
-                szJson += QString("\"Operator1\":%1,").arg(ar.dbOperator1);
-                szJson += QString("\"Operator2\":%1,").arg(ar.dbOperator2);
-                szJson += QString("\"KeepTimes\":%1").arg(ar.nKeepTimes);
-                szJson += "}";
-                Setting oSet;
-                oSet.Name = ar.NodeCode;
-                oSet.qValue = szJson;
+            mi.AssemblyName = "plugins/RedisSubscriber.dll";
+            mi.ClassName = "RedisSubscriber";
 
-                mi.vSettings.push_back(oSet);
-            }
-        }
-        di.ModuleInfo = mi;
-    }
+            ConsumerInfo ci;
 
-    return di;
-    */
-    ModuleInfo mi;
-    mi.Name = "RedisSubscriber";
+            ci.name = "TDengine";
 
-    mi.AssemblyName = "plugins/RedisSubscriber.dll";
-    mi.ClassName = "RedisSubscriber";
-    ConsumerInfo ci;
+            ci.AssemblyName = "plugins/TDengine.dll";
+            ci.ClassName = "TDengine";
+            ci.SubscribeName = "RedisSubscriber";
+            DataManagerInfo dataManageInfo;
+            dataManageInfo.consumers.push_back(ci);
+            dataManageInfo.modules.push_back(mi);
+            listDataManageInfo.push_back(dataManageInfo);
 
-    ci.name = "TDengine";
+        }
+    }
 
-    ci.AssemblyName = "plugins/TDengine.dll";
-    ci.ClassName = "TDengine";
-    ci.SubscribeName = "RedisSubscriber";
+    //return di;
 
-    DataManagerInfo listDataManageInfo;
-    listDataManageInfo.consumers.push_back(ci);
-    listDataManageInfo.modules.push_back(mi);
 
     return listDataManageInfo;
 }

+ 2 - 1
DataManagerMain/DataManagerProxy.h

@@ -2,13 +2,14 @@
 #define DATAMANAGERPROXY_H
 #include "Define.h"
 #include <QMap>
+#include <QList>
 class DataManagerProxy
 {
 public:
     DataManagerProxy();
 
 public:
-    DataManagerInfo loadModuleInfos(int id,std::string app);
+    QList<DataManagerInfo> loadModuleInfos(const char* id,const char* app);
 };
 
 #endif // DATAMANAGERPROXY_H

+ 11 - 1
DataManagerMain/main.cpp

@@ -2,6 +2,9 @@
 #include <QLocale>
 #include <QTranslator>
 #include "DataManager.h"
+#include <QCommandLineParser>
+#include <QCommandLineOption>
+#include "Config.h"
 int main(int argc, char *argv[])
 {
     QCoreApplication a(argc, argv);
@@ -15,9 +18,16 @@ int main(int argc, char *argv[])
             break;
         }
     }
+    QCommandLineOption op1("config","config file path", "config/config.json");
+    QCommandLineParser parser;
+    parser.addOption(op1);
+    parser.addHelpOption();
+
+    parser.process(a);
+    Config config(parser.value("config"));
 
     DataManager dataMgr;
-    dataMgr.Startup();
+    dataMgr.Startup(config);
 
     return a.exec();
 }

+ 2 - 2
include/Define.h

@@ -73,10 +73,10 @@ struct DataManagerInfo{
 };
 
 
-struct Config
+/*struct Config
 {
     int serverId;
     std::string appName;
-};
+};*/
 
 

+ 76 - 10
modules/RedisClient/RedisClient.cpp

@@ -156,7 +156,7 @@ void RedisClient::start()
     redisTimer->start(1000);
 }
 
-bool RedisClient::hset(QString m, QString k, QString v)
+bool RedisClient::hset(const QString& m, const QString& k, const QString& v)
 {
     //如果 field 是哈希表中的一个新建域,并且值设置成功,reply->integer为1
     //如果哈希表中域 field 已经存在且旧值已被新值覆盖,reply->integer为0
@@ -176,7 +176,7 @@ bool RedisClient::hset(QString m, QString k, QString v)
     return ret;
 }
 
-QString RedisClient::hget(QString m, QString k)
+QString RedisClient::hget(const QString& m, const QString& k)
 {
     QString ret;
     redisReply * reply = (redisReply*)redisCommand(rc, QString("hget " + m + " " + k).toStdString().c_str());
@@ -197,8 +197,74 @@ QString RedisClient::hget(QString m, QString k)
     return ret;
 }
 
+QStringList RedisClient::hkeys(const QString& k)
+{
+    QStringList ret;
+    redisReply *reply = (redisReply *)redisCommand(rc, QString("hkeys " + k).toStdString().c_str());
+    if (rc->err)
+    {
+        redisOk = false;
+        qDebug() << rc->errstr;
+    }
+    else if (reply->type == REDIS_REPLY_ARRAY)
+    {
+        // type:4表示不存在,type:1表示返回的为字符串
+        // qDebug() <<"type:" << reply->type << reply->str << reply->len; //type:1
+        for (size_t i = 0; i < reply->elements; i++)
+        {
+            // qDebug() << "key: " << i << reply->element[i]->str;
+            ret.append(QString(reply->element[i]->str));
+        }
+    }
+    return ret;
+}
+
+QStringList RedisClient::hvals(const QString& k)
+{
+    QStringList ret;
+    redisReply *reply = (redisReply *)redisCommand(rc, QString("hvals " + k).toStdString().c_str());
+    if (rc->err)
+    {
+        redisOk = false;
+        qDebug() << rc->errstr;
+    }
+    else if (reply->type == REDIS_REPLY_ARRAY)
+    {
+        // type:4表示不存在,type:1表示返回的为字符串
+        // qDebug() <<"type:" << reply->type << reply->str << reply->len; //type:1
+        for (size_t i = 0; i < reply->elements; i++)
+        {
+            // qDebug() << "key: " << i << reply->element[i]->str;
+            ret.append(QString(reply->element[i]->str));
+        }
+    }
+    return ret;
+}
+
+QHash<QString, QString> RedisClient::hgetall(const QString& k)
+{
+    QHash<QString, QString> ret;
+    redisReply *reply = (redisReply *)redisCommand(rc, QString("hgetall " + k).toStdString().c_str());
+    if (rc->err)
+    {
+        redisOk = false;
+        qDebug() << rc->errstr;
+    }
+    else if (reply->type == REDIS_REPLY_ARRAY)
+    {
+        // type:4表示不存在,type:1表示返回的为字符串
+        // qDebug() <<"type:" << reply->type << reply->str << reply->len; //type:1
+        for (size_t i = 0; i < reply->elements; i += 2)
+        {
+            // qDebug() << "key: " << i << reply->element[i]->str;
+            ret.insert(QString(reply->element[i]->str), QString(reply->element[i + 1]->str));
+        }
+    }
+    return ret;
+}
+
 //向队列尾(右)部加入字符串数据
-bool RedisClient::rpush(QString lData, QString js)
+bool RedisClient::rpush(const QString& lData, const QString& js)
 {
     bool ret = false;
     redisReply * reply = (redisReply*)redisCommand(rc, QString("rpush " + lData + " " + js).toStdString().c_str());
@@ -220,7 +286,7 @@ bool RedisClient::rpush(QString lData, QString js)
 }
 
 //向队列尾(右)部加入二进制数据
-bool RedisClient::rpushb(QString lData, QByteArray ba)
+bool RedisClient::rpushb(const QString& lData, const QByteArray& ba)
 {
     bool ret = false;
     const char *arg[3]; //3个参数(cmd, k, v)
@@ -253,7 +319,7 @@ bool RedisClient::rpushb(QString lData, QByteArray ba)
     return ret;
 }
 
-QString RedisClient::lpop(QString lData)
+QString RedisClient::lpop(const QString& lData)
 {
     QString ret;
     redisReply * reply = (redisReply*)redisCommand(rc, QString("lpop " + lData).toStdString().c_str());
@@ -488,7 +554,7 @@ bool RedisClient::publishb(const QString& ch,const QByteArray& ba)
     return ret;
 }
 
-void RedisClient::subscribe(QString ch, redisCallbackFn *fn, void* data)
+void RedisClient::subscribe(const QString& ch, redisCallbackFn *fn, void* data)
 {
     if (rac == nullptr)
     {
@@ -517,7 +583,7 @@ void RedisClient::subscribe(QString ch, redisCallbackFn *fn, void* data)
     }
 }
 
-void RedisClient::psubscribe(QString ch, redisCallbackFn *fn, void* data)
+void RedisClient::psubscribe(const QString& ch, redisCallbackFn *fn, void* data)
 {
     if (rac == nullptr)
     {
@@ -547,11 +613,11 @@ void RedisClient::psubscribe(QString ch, redisCallbackFn *fn, void* data)
     }
 }
 
-void RedisClient::Setup(std::string addr, uint _port, std::string password)
+void RedisClient::Setup(const QString& addr, uint _port,const QString&password)
 {
-    ip = addr.c_str();
+    ip = addr;
     port = _port;
-    auth = password.c_str();
+    auth = password;
 
     redisOk = false;
 }

+ 20 - 17
modules/RedisClient/RedisClient.h

@@ -19,22 +19,25 @@ public:
 public slots:
     void start();
     void conn();
-    bool hset(QString m, QString k, QString v);
-    QString hget(QString m, QString k);
-    bool set(QString k, QString v);
-    bool setb(QString k, QByteArray &v);
-    QString get(QString k);
-    QByteArray getb(QString k);
-    bool rpush(QString lData, QString js);                  //向队列尾部加入字符串数据
-    bool rpushb(QString lData, QByteArray ba);              //向队列尾部加入二进制数据
-    QString lpop(QString lData);
-    QString blpop(QString lData, quint32 timeout);          //同步阻塞一定时间返回数据
-    bool blpop(QString lData, redisCallbackFn *fn);         //阻塞从队列头部获取最早数据
-    bool publish(const QString& ch, const QString& js);
-    bool publishb(const QString& ch, const QByteArray& ba);
-    bool expire(QString k,int sec);
-    void subscribe(QString ch, redisCallbackFn *fn, void* data = nullptr);        // 订阅
-    void psubscribe(QString ch, redisCallbackFn *fn, void* priData = nullptr);       // 订阅:模式匹配
+    bool hset(const QString& m, const QString& k, const QString& v);
+    QString hget(const QString& m, const QString& k);
+    bool set(const QString& k, const QString& v);
+    bool setb(const QString& k,const QByteArray &v);
+    const QString& get(const QString& k);
+    QByteArray getb(const QString& k);
+    QStringList hkeys(const QString& k);
+    QStringList hvals(const QString& k);
+    QHash<QString, QString> hgetall(const QString& k);
+    bool rpush(const QString& lData, const QString& js);                  //向队列尾部加入字符串数据
+    bool rpushb(const QString& lData, const QByteArray& ba);              //向队列尾部加入二进制数据
+    QString lpop(const QString& lData);
+    QString blpop(const QString& lData, quint32 timeout);          //同步阻塞一定时间返回数据
+    bool blpop(const QString& lData, redisCallbackFn *fn);         //阻塞从队列头部获取最早数据
+    bool publish(const QString&& ch, const QString&& js);
+    bool publishb(const QString&& ch, const QByteArray& ba);
+    bool expire(const QString& k,int sec);
+    void subscribe(const QString& ch, redisCallbackFn *fn, void* data = nullptr);        // 订阅
+    void psubscribe(const QString& ch, redisCallbackFn *fn, void* priData = nullptr);       // 订阅:模式匹配
 
 private:
     //QString ip = "192.168.9.56";
@@ -48,5 +51,5 @@ private:
     RedisQtAdapter adapter;             //异步事件驱动适配器
 
 public:
-    void Setup(std::string addr, uint port, std::string password);
+    void Setup(const QString& addr, uint port, const QString& password);
 };