interfacethread.cpp 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include "interfacethread.h"
  2. InterfaceThread::InterfaceThread(qintptr socketDescriptor, QObject *parent) : QThread(parent)
  3. {
  4. waitEcho = false;
  5. getEcho = false;
  6. EchoString = "";
  7. CmdId = QUuid::createUuid().toString().replace(QRegExp("{|}"),"");
  8. this->SocketDescriptor = socketDescriptor;
  9. }
  10. InterfaceThread::~InterfaceThread()
  11. {
  12. deleteLater();
  13. }
  14. bool InterfaceThread::chkCmdID(QString id)//server程序对队列中的thread核对cmdid
  15. {
  16. if(QString::compare(id,CmdId)==0)
  17. return true;
  18. return false;
  19. }
  20. void InterfaceThread::setEchoString(QString string)
  21. {
  22. //这里将返回的数据字符串(json格式)发回前端
  23. 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("\\",""));
  24. getEcho = true;
  25. emit CommData(CmdId, 1, EchoString);
  26. }
  27. void InterfaceThread::run()
  28. {
  29. QTcpSocket *so = new QTcpSocket;
  30. int waitCount=0;
  31. if(!so->setSocketDescriptor(this->SocketDescriptor))
  32. {
  33. so->abort();
  34. return;
  35. }
  36. waitEcho = true;
  37. while(waitEcho){
  38. if(getEcho){//得到回应数据
  39. so->write(EchoString.toUtf8());
  40. so->flush();
  41. waitEcho = false;
  42. emit CommData(CmdId, 1, "jiesustring");
  43. }else if(waitCount>60){//等待回应数据超时
  44. QJsonObject o_Data;
  45. o_Data.insert("code", 408);
  46. o_Data.insert("msg", "硬件响应超时");
  47. o_Data.insert("data", "");
  48. QString string = QString(QJsonDocument(o_Data).toJson()).replace("\"","\\\"");
  49. 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("\\",""));;
  50. so->write(EchoTimeoutString.toUtf8());
  51. so->flush();
  52. waitEcho = false;
  53. }else if(so->waitForReadyRead(1000)){
  54. getEcho = false;
  55. waitCount = 0;
  56. QByteArray data = so->readAll();//这里要先打印出来,一般在数据结构中找到"{"符号,以往我的做法是找到“queryJson={}”字符串作为特征的,从这一行到全部后续字符串连接成一个字符串后处理
  57. QStringList Dat = QString(data).split("\r\n");
  58. QByteArray cmd;
  59. bool found = false;
  60. for(int i=0;i<Dat.length();i++){
  61. if(Dat.at(i).indexOf("{")>=0)
  62. found = true;
  63. if(found)
  64. cmd.append(Dat.at(i).trimmed().toUtf8());
  65. }
  66. QJsonParseError json_error;
  67. QJsonDocument jsonDoc(QJsonDocument::fromJson(cmd,&json_error));
  68. if(json_error.error==QJsonParseError::NoError){
  69. QJsonObject root = jsonDoc.object();
  70. int commandType = 0;
  71. if((!root.value("command_type").isUndefined())&&(!root.value("command_type").isNull())){
  72. commandType=root.value("command_type").toString().toInt();
  73. }
  74. if((!root.value("RESET").isUndefined())&&(!root.value("RESET").isNull())){
  75. emit resetRequest(root.value("DEVICEID").toString().trimmed(),2,0,0);
  76. }else if(commandType==10){
  77. emit CommData(root.value("terminal_code").toString().trimmed(), 2, root.value("terminal_code").toString().trimmed());
  78. emit resetRequest(root.value("terminal_code").toString().trimmed(),11,root.value("operation_type").toString().toInt(),0);
  79. }else if((!root.value("start_point").isUndefined())&&(!root.value("start_point").isNull())){
  80. // emit resetRequest(root.value("terminal_code").toString().trimmed(),12,root.value("operation_type").toString().trimmed());
  81. 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());
  82. }else if((!root.value("economize_gear").isUndefined())&&(!root.value("economize_gear").isNull())){
  83. QString Data = QString("[ %1 %2 =============== %3 ------------------- ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(root.value("application_key").toString().toInt())
  84. .arg(root.value("operation_type").toString().toInt());
  85. emit CommData(root.value("terminal_code").toString().trimmed(), 2, Data);
  86. 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());
  87. }else if((!root.value("time_data").isUndefined())&&(!root.value("time_data").isNull())){
  88. QString Data = QString("[ %1 %2 =============== %3 ------------------- ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(root.value("application_key").toString().toInt())
  89. .arg(root.value("time_data").toString().trimmed());
  90. emit CommData(root.value("terminal_code").toString().trimmed(), 2, Data);
  91. QString tmp = root.value("time_data").toString();
  92. emit requestSetParameters(root.value("terminal_code").toString().trimmed(),4,root.value("operation_type").toString().toInt(),tmp);
  93. }else if(commandType==14){
  94. QString Data = QString("[ %1 =============== %2 ------------------- ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(14);
  95. emit CommData(root.value("terminal_code").toString().trimmed(), 2, Data);
  96. 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);
  97. }
  98. }
  99. }
  100. waitCount++;
  101. usleep(100000);
  102. }
  103. if(so->isOpen())
  104. so->abort();
  105. }