|
@@ -0,0 +1,110 @@
|
|
|
+#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();
|
|
|
+}
|