#include "videocore.h" #include "../AGBoxDog/boxshm.h" #include "boxdeviceshm.h" AGBoxShm *agBoxShm; BoxDeviceShm *boxDeviceShm; void VideoCore::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(); } qry.clear(); int nrow = 0; sql.clear(); sql = QString("select device_code,device_id,device_type,company_code,device_gateway from yt_t_device"); qry = db.exec(sql); while (qry.next()) { if(nrow > 1023) break; boxDeviceShm->device[nrow].Enabled = 0x01; sprintf(boxDeviceShm->device[nrow].device_code,"%s",qry.value(0).toString().toUtf8().data()); sprintf(boxDeviceShm->device[nrow].device_id,"%s",qry.value(1).toString().toUtf8().data()); boxDeviceShm->device[nrow].device_type = qry.value(2).toInt(); sprintf(boxDeviceShm->device[nrow].company_code,"%s",qry.value(3).toString().toUtf8().data()); sprintf(boxDeviceShm->device[nrow].device_gateway,"%s",qry.value(4).toString().toUtf8().data()); nrow++; } for(int i=nrow;i<1024;i++){ boxDeviceShm->device[i].Enabled = 0x00; } nrow = 0; qry.clear(); sql.clear(); sql = QString("select device_type,attribute_name,attribute_code from yt_t_attribute"); qry = db.exec(sql); while (qry.next()) { if(nrow > 299) break; boxDeviceShm->procuctattrbute[nrow].Enabled = 0x01; boxDeviceShm->procuctattrbute[nrow].device_type = qry.value(0).toInt(); sprintf(boxDeviceShm->procuctattrbute[nrow].attribute_name,"%s",qry.value(1).toString().toUtf8().data()); sprintf(boxDeviceShm->procuctattrbute[nrow].attribute_code,"%s",qry.value(2).toString().toUtf8().data()); nrow++; } for(int i=nrow;i<300;i++){ boxDeviceShm->procuctattrbute[i].Enabled = 0x00; } } bool VideoCore::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)); if((key=ftok(VIDEO_PATH,static_cast(VIDEO_PORT)))==-1){ return false; } if((shmid=shmget(key,sizeof(BoxDeviceShm),IPC_CREAT|0666))==-1){ return false; } boxDeviceShm = static_cast(shmat(shmid,nullptr,0)); shm_init(); return true; } VideoCore::VideoCore(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("[agvideo] open yt_conf.db failed")); } if(shm_load()){ logthread->appendData(QString("[agvideo] shm load success")); } mqttIdx = 1; m_client = new QMQTT::Client(QHostAddress(ip),static_cast(port.toInt()),this); connect(m_client,&QMQTT::Client::connected,this,&VideoCore::onConnected); m_client->setUsername(username); m_client->setPassword(password.toLatin1()); m_client->setCleanSession(true); m_client->connectToHost(); httpthread = new HttpThread(this); connect(httpthread,&HttpThread::dataLog,this,&VideoCore::dataLog); connect(httpthread,&HttpThread::mqttData,this,&VideoCore::mqtt_data); tcpserver = new TcpServer(this); connect(tcpserver,&TcpServer::tcp_log,this,&VideoCore::dataLog); tcpserver1 = new TcpServer1(this); connect(tcpserver1,&TcpServer1::tcp_log,this,&VideoCore::dataLog); } VideoCore::~VideoCore() { logthread->stop(); httpthread->stop(); } void VideoCore::start() { tcpserver->start(); tcpserver1->start(); } void VideoCore::onConnected() { logthread->appendData(QString("mqtt onConnected")); } void VideoCore::dataLog(QString log) { logthread->appendData(log); } void VideoCore::mqtt_data(QString mqtt_msg) { printf("test1111 [%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; } }