#include "infoclient.h" #include "databoardmem.h" InfoClient::InfoClient(qintptr socketDescriptor, QObject *parent) :QThread(parent){ db = QSqlDatabase::database("DataDashBoard"); AgentId = ""; this->socketDescriptor = socketDescriptor; count = 0; isWorking = false; } void InfoClient::appendData(QString emitlog) { emit sendlog(emitlog); } void InfoClient::run() { QTcpSocket tcpSocket; if(!tcpSocket.setSocketDescriptor(socketDescriptor)){ printf("setSocketDescriptor failed\n"); //emit write_error(); return; } printf("InfoClient::run()\n"); this->appendData("enter into InfoClient::run()"); count = 0; isWorking = true; while(isWorking){ // printf("tcpSocket.state() = %d\n",tcpSocket.state()); // this->appendData(QString("tcpSocket.state() = %1").arg(tcpSocket.state())); if(tcpSocket.state()!=QTcpSocket::ConnectedState){ printf("tcpSocket.state()!=QTcpSocket::ConnectedState = %d\n",tcpSocket.state()); this->appendData(QString("tcpSocket.state()!=QTcpSocket::ConnectedState = %1").arg(tcpSocket.state())); tcpSocket.abort(); //emit write_error(); return; } if(tcpSocket.waitForReadyRead(1000)){ QByteArray cmd = tcpSocket.readAll(); QString cmdlog = QString(cmd); this->appendData(cmdlog); QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(cmd,&json_error)); if(json_error.error==QJsonParseError::NoError){ QJsonObject root = jsonDoc.object(); QDateTime dt = QDateTime::currentDateTime(); // QString stationid; if((!root.value("DeviceID").isUndefined())&&(!root.value("DeviceID").isNull()) &&(!root.value("DeviceStatus").isUndefined())&&(!root.value("DeviceStatus").isNull()) &&(!root.value("DeviceStatusNote").isUndefined())&&(!root.value("DeviceStatusNote").isNull()) &&(!root.value("TimeStamp").isUndefined())&&(!root.value("TimeStamp").isNull()) &&(!root.value("Values").isUndefined())&&(!root.value("Values").isNull())) { QString deviceID = root.value("DeviceID").toString(); int deviceStatus = root.value("DeviceStatus").toInt(); QString deviceStatusNote = root.value("DeviceStatusNote").toString(); QString timeStamp = root.value("TimeStamp").toString(); QJsonArray valueArray = root.value("Values").toArray(); for(int s=0;s<16;s++){ if(ytStationCount->station[s].Enabled==0x01){ int alarm=0,fault=0,deviceStatustemp=0; for(int d=0;d<128;d++){ if(ytStationCount->station[s].StationDevice[d].Enabled==0x01){ if(QString::compare(deviceID,QString(ytStationCount->station[s].StationDevice[d].DeviceID))==0){ ytStationCount->station[s].StationDevice[d].UpTime = dt.toTime_t(); ytStationCount->station[s].StationDevice[d].DeviceStatus=deviceStatus; sprintf(ytStationCount->station[s].StationDevice[d].DeviceStatusNote,"%s",deviceStatusNote.toUtf8().data()); sprintf(ytStationCount->station[s].LastCommTime,"%s",dt.toString("yyyy-MM-dd HH:mm:ss").toUtf8().data()); for(int n=0;n=0)&&(addr<256)){ for(int i=9;i>0;i--){ ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i].AlarmStatus= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i-1].AlarmStatus; sprintf(ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i].Time,"%s",ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i-1].Time); ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i].Value= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[i-1].Value; } ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].AlarmStatus= obj.value("AlarmStatus").toInt(); sprintf(ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Time,"%s",obj.value("Time").toString().toUtf8().data()); ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Value= obj.value("Value").toDouble(); ytStationCount->station[s].StationDevice[d].DevicePoint[addr].AlarmStatus= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].AlarmStatus; sprintf(ytStationCount->station[s].StationDevice[d].DevicePoint[addr].Time,"%s",ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Time); ytStationCount->station[s].StationDevice[d].DevicePoint[addr].Value= ytStationCount->station[s].StationDevice[d].DevicePoint[addr].pointvaluelist[0].Value; } } } } deviceStatustemp = ytStationCount->station[s].StationDevice[d].DeviceStatus; if(deviceStatustemp == 1){ alarm++; }else if(deviceStatustemp == 2){ fault++; } } } if(alarm == 0 && fault == 0) { ytStationCount->station[s].StationStatus=0; sprintf(ytStationCount->station[s].StationStatusNote,"正常"); } if(alarm != 0) { ytStationCount->station[s].StationStatus=1; sprintf(ytStationCount->station[s].StationStatusNote,"告警"); } if(fault != 0 && alarm == 0) { ytStationCount->station[s].StationStatus=2; sprintf(ytStationCount->station[s].StationStatusNote,"故障"); } ytStationCount->station[s].DeviceAlarm=alarm; ytStationCount->station[s].DeviceFault=fault; } } } // cmd = QString("{\"CMD\":\"pushDeviceValues\",\"TimeStamp\":\"%1\",\"REPLY\":\"1\"}").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).toUtf8(); // tcpSocket.write(cmd); // tcpSocket.waitForBytesWritten(3000); } } usleep(500000); } }