123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #include "interfacethread.h"
- InterfaceThread::InterfaceThread(qintptr socketDescriptor, QObject *parent) : QThread(parent)
- {
- waitEcho = false;
- getEcho = false;
- EchoString = "";
- CmdId = QUuid::createUuid().toString().replace(QRegExp("{|}"),"");
- this->SocketDescriptor = socketDescriptor;
- }
- InterfaceThread::~InterfaceThread()
- {
- deleteLater();
- }
- bool InterfaceThread::chkCmdID(QString id)//server程序对队列中的thread核对cmdid
- {
- if(QString::compare(id,CmdId)==0)
- return true;
- return false;
- }
- void InterfaceThread::setEchoString(QString string)
- {
- //这里将返回的数据字符串(json格式)发回前端
- EchoString = QString("HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *\r\nContent-type: json/plain\r\n\r\n%1").arg(string.replace("\r","").replace("\n","").replace("\\",""));
- getEcho = true;
- emit CommData(CmdId, 1, EchoString);
- }
- void InterfaceThread::run()
- {
- QTcpSocket *so = new QTcpSocket;
- int waitCount=0;
- if(!so->setSocketDescriptor(this->SocketDescriptor))
- {
- so->abort();
- return;
- }
- waitEcho = true;
- while(waitEcho){
- if(getEcho){//得到回应数据
- so->write(EchoString.toUtf8());
- so->flush();
- waitEcho = false;
- emit CommData(CmdId, 1, "jiesustring");
- }else if(waitCount>60){//等待回应数据超时
- QJsonObject o_Data;
- o_Data.insert("code", 408);
- o_Data.insert("msg", "硬件响应超时");
- o_Data.insert("data", "");
- QString string = QString(QJsonDocument(o_Data).toJson()).replace("\"","\\\"");
- QString EchoTimeoutString = QString("HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *\r\nContent-type: json/plain\r\n\r\n%1").arg(string.replace("\r","").replace("\n","").replace("\\",""));;
- so->write(EchoTimeoutString.toUtf8());
- so->flush();
- waitEcho = false;
- }else if(so->waitForReadyRead(1000)){
- getEcho = false;
- waitCount = 0;
- QByteArray data = so->readAll();//这里要先打印出来,一般在数据结构中找到"{"符号,以往我的做法是找到“queryJson={}”字符串作为特征的,从这一行到全部后续字符串连接成一个字符串后处理
- QStringList Dat = QString(data).split("\r\n");
- QByteArray cmd;
- bool found = false;
- for(int i=0;i<Dat.length();i++){
- if(Dat.at(i).indexOf("{")>=0)
- found = true;
- if(found)
- cmd.append(Dat.at(i).trimmed().toUtf8());
- }
- QJsonParseError json_error;
- QJsonDocument jsonDoc(QJsonDocument::fromJson(cmd,&json_error));
- if(json_error.error==QJsonParseError::NoError){
- QJsonObject root = jsonDoc.object();
- int commandType = 0;
- if((!root.value("command_type").isUndefined())&&(!root.value("command_type").isNull())){
- commandType=root.value("command_type").toString().toInt();
- }
- if((!root.value("RESET").isUndefined())&&(!root.value("RESET").isNull())){
- emit resetRequest(root.value("DEVICEID").toString().trimmed(),2,0,0);
- }else if(commandType==10){
- emit CommData(root.value("terminal_code").toString().trimmed(), 2, root.value("terminal_code").toString().trimmed());
- emit resetRequest(root.value("terminal_code").toString().trimmed(),11,root.value("operation_type").toString().toInt(),0);
- }else if((!root.value("start_point").isUndefined())&&(!root.value("start_point").isNull())){
- // emit resetRequest(root.value("terminal_code").toString().trimmed(),12,root.value("operation_type").toString().trimmed());
- emit requestRealTimeData(root.value("terminal_code").toString().trimmed(),12,root.value("operation_type").toString().toInt(),root.value("pn").toString().toInt(),root.value("query_number").toString().toInt(),root.value("start_point").toString().toInt());
- }else if((!root.value("economize_gear").isUndefined())&&(!root.value("economize_gear").isNull())){
- QString Data = QString("[ %1 %2 =============== %3 ------------------- ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(root.value("application_key").toString().toInt())
- .arg(root.value("operation_type").toString().toInt());
- emit CommData(root.value("terminal_code").toString().trimmed(), 2, Data);
- emit requestRealTimeData(root.value("terminal_code").toString().trimmed(),5,root.value("operation_type").toString().toInt(),root.value("pn").toString().toInt(),root.value("control_type").toString().toInt(),root.value("economize_gear").toString().toInt());
- }else if((!root.value("time_data").isUndefined())&&(!root.value("time_data").isNull())){
- QString Data = QString("[ %1 %2 =============== %3 ------------------- ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(root.value("application_key").toString().toInt())
- .arg(root.value("time_data").toString().trimmed());
- emit CommData(root.value("terminal_code").toString().trimmed(), 2, Data);
- QString tmp = root.value("time_data").toString();
- emit requestSetParameters(root.value("terminal_code").toString().trimmed(),4,root.value("operation_type").toString().toInt(),tmp);
- }else if(commandType==14){
- QString Data = QString("[ %1 =============== %2 ------------------- ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(14);
- emit CommData(root.value("terminal_code").toString().trimmed(), 2, Data);
- emit requestRealTimeData(root.value("terminal_code").toString().trimmed(),14,root.value("operation_type").toString().toInt(),root.value("pm").toString().toInt(),root.value("pn").toString().toInt(),0);
- }
- }
- }
- waitCount++;
- usleep(100000);
- }
- if(so->isOpen())
- so->abort();
- }
|