#include "guardcore.h" #include "../AGBoxDog/boxshm.h" AGBoxShm *agBoxShm; void GuardCore::shm_init(){ QSqlQuery qry; QString sql = QString("select mqtt_ip,mqtt_port,user_name,pass_word from yt_t_mqtt where item_name = 'data-agbox'"); qry = db.exec(sql); while (qry.next()) { ip = qry.value(0).toString(); port = qry.value(1).toString(); username = qry.value(2).toString(); password = qry.value(3).toString(); } sql.clear(); qry.clear(); sql = QString("select url,app_key,app_signature from yt_t_platforminfo where type = 'door-search-hk'"); qry = db.exec(sql); while (qry.next()) { devinfourl = qry.value(0).toString(); devinfokey = qry.value(1).toString(); devinfosignature = qry.value(2).toString(); } sql.clear(); qry.clear(); sql = QString("select url,app_key,app_signature from yt_t_platforminfo where type = 'door-event-hk'"); qry = db.exec(sql); while (qry.next()) { httpurl = qry.value(0).toString(); httpkey = qry.value(1).toString(); httpsignature = qry.value(2).toString(); } sql.clear(); qry.clear(); sql = QString("select url,app_key,app_signature from yt_t_platforminfo where type = 'door-state-hk'"); qry = db.exec(sql); while (qry.next()) { httpurl1 = qry.value(0).toString(); httpkey1 = qry.value(1).toString(); httpsignature1 = qry.value(2).toString(); } sql.clear(); qry.clear(); sql = QString("select url,app_key,app_signature from yt_t_platforminfo where type = 'door-control-hk'"); qry = db.exec(sql); while (qry.next()) { tcpserverurl = qry.value(0).toString(); tcpserverkey = qry.value(1).toString(); tcpserversignature = qry.value(2).toString(); } } bool GuardCore::shm_load(){ key_t key; int shmid; if((key=ftok(SHM_PATH,static_cast(SHM_PORT)))==-1){ return false; } if((shmid=shmget(key,sizeof(AGBoxShm),IPC_CREAT|0666))==-1){ return false; } agBoxShm = static_cast(shmat(shmid,nullptr,0)); shm_init(); return true; } GuardCore::GuardCore(QObject *parent) : QObject(parent) { logthread = new LogThread(this); logthread->start(); db = QSqlDatabase::addDatabase("QSQLITE","conf_db"); db.setDatabaseName(QString("/opt/db/yt_conf.db")); if(!db.open()){ logthread->appendData(QString("[agguard] open yt_conf.db failed")); } if(shm_load()){ logthread->appendData(QString("[agguard] shm load success")); } mqttIdx = 1; mqttEventIdx = 1; m_client = new QMQTT::Client(QHostAddress(ip),static_cast(port.toInt()),this); connect(m_client,&QMQTT::Client::connected,this,&GuardCore::onConnected); m_client->setUsername(username); m_client->setPassword(password.toLatin1()); m_client->setCleanSession(true); m_client->connectToHost(); dbthread = new DatabaseThread(this,&db); connect(dbthread,&DatabaseThread::dbdata_log,this,&GuardCore::dataLog); httpthread = new HttpThread(this); connect(httpthread,&HttpThread::dataLog,this,&GuardCore::dataLog); connect(httpthread,&HttpThread::mqttData,this,&GuardCore::mqtt_data); connect(httpthread,&HttpThread::mqttEvent,this,&GuardCore::mqtt_event); httpthread->app_info(httpurl,httpkey,httpsignature,httpurl1,httpkey1,httpsignature); tcpserver = new TcpServer(this); connect(tcpserver,&TcpServer::tcp_log,this,&GuardCore::dataLog); tcpserver->app_info(tcpserverurl,tcpserverkey,tcpserversignature); devinfoserver = new DevInfoTcpServer(this); connect(devinfoserver,&DevInfoTcpServer::tcp_log,this,&GuardCore::dataLog); connect(devinfoserver,&DevInfoTcpServer::append_sql,this,&GuardCore::appendSql); devinfoserver->app_info(devinfourl,devinfokey,devinfosignature); } GuardCore::~GuardCore() { logthread->stop(); dbthread->stop(); httpthread->stop(); } void GuardCore::start() { tcpserver->start(); devinfoserver->start(); dbthread->start(); } void GuardCore::onConnected() { logthread->appendData(QString("mqtt onConnected")); } void GuardCore::dataLog(QString log) { logthread->appendData(log); } void GuardCore::mqtt_data(QString mqtt_msg) { printf("test2222 [%s]\n",mqtt_msg.toUtf8().data()); if((m_client->connectionState()==QMQTT::STATE_INIT)||(m_client->connectionState()==QMQTT::STATE_DISCONNECTED)){ m_client->connectToHost(); } m_client->publish(QMQTT::Message(mqttIdx++,"data-collector",mqtt_msg.toUtf8())); if(mqttIdx > 9999){ mqttIdx = 1; } } void GuardCore::mqtt_event(QString mqtt_msg) { printf("test2222 mqtt event [%s]\n",mqtt_msg.toUtf8().data()); if((m_client->connectionState()==QMQTT::STATE_INIT)||(m_client->connectionState()==QMQTT::STATE_DISCONNECTED)){ m_client->connectToHost(); } m_client->publish(QMQTT::Message(mqttEventIdx++,"event-collector",mqtt_msg.toUtf8())); if(mqttEventIdx > 9999){ mqttEventIdx = 1; } } void GuardCore::appendSql(QString sql) { dbthread->appendSql(sql); shm_init(); }