datasender.cpp 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #include "datasender.h"
  2. //#include <QDebug>
  3. extern YT_UNIT_SHM *ytShm;
  4. DataSender::DataSender(QObject *parent, QString serverPath, QString id) :
  5. QObject(parent)
  6. {
  7. waitting = false;
  8. ServerPath = serverPath;
  9. SelfId = id;
  10. timer = new QTimer(this);
  11. connect(timer,SIGNAL(timeout()),this,SLOT(time_out()));
  12. queryManager = new QNetworkAccessManager(this);
  13. connect(queryManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(query_finishedSlot(QNetworkReply*)));
  14. timer->start(5000);
  15. }
  16. void DataSender::query_finishedSlot(QNetworkReply *reply)
  17. {
  18. if(reply->error()==QNetworkReply::NoError){
  19. QByteArray qj = reply->readAll();
  20. // qDebug()<<qj.data();
  21. }
  22. waitting = false;
  23. }
  24. void DataSender::reply_timeout()
  25. {
  26. waitting = false;
  27. }
  28. void DataSender::time_out()
  29. {
  30. if(!waitting){
  31. json_object *iotlist,*obj[5],*obj_list[5], *body, *json;
  32. int comm,adds,i;
  33. int count[5],alarm[5],out[5];
  34. char tmp[256];
  35. body = json_object_new_object();
  36. json = json_object_new_object();
  37. iotlist = json_object_new_array();
  38. for(i=0;i<5;i++)
  39. {
  40. count[i]=0;
  41. alarm[i]=0;
  42. out[i]=0;
  43. obj[i] = json_object_new_object();
  44. obj_list[i] = json_object_new_array();
  45. }
  46. for(comm=0;comm<4;comm++)
  47. {
  48. if(ytShm->commList.comm[comm].ENABLED==0x01){
  49. for(adds=0;adds<256;adds++)
  50. {
  51. if(ytShm->sPointList.sPoint[comm][adds].ENABLED==0x01)
  52. {
  53. json_object *sp = json_object_new_object();
  54. for(i=0;i<5;i++)
  55. {
  56. if((ytShm->sPointList.sPoint[comm][adds].SUB_TYPE&(0x01<<i))==(0x01<<i))
  57. count[i]++;
  58. }
  59. if(ytShm->commStatusList.commStatus[comm].STATUS!=0x01)
  60. {
  61. if(ytShm->sPointList.sPoint[comm][adds].SUB_TYPE>0)
  62. {
  63. for(i=0;i<5;i++)
  64. {
  65. if((ytShm->sPointList.sPoint[comm][adds].SUB_TYPE&(0x01<<i))==(0x01<<i))
  66. out[i]++;
  67. }
  68. json_object_object_add(sp,"STATUS_ID",json_object_new_int(1));
  69. json_object_object_add(sp,"STATUS",json_object_new_string(QString::fromUtf8("离线").toUtf8().data()));
  70. }
  71. }else{
  72. if(ytShm->spStatusList.spStatus[comm][adds].ALARM_STATUS!=0x00)
  73. {
  74. for(i=0;i<5;i++)
  75. {
  76. if((ytShm->sPointList.sPoint[comm][adds].SUB_TYPE&(0x01<<i))==(0x01<<i))
  77. alarm[i]++;
  78. }
  79. json_object_object_add(sp,"STATUS_ID",json_object_new_int(2));
  80. json_object_object_add(sp,"STATUS",json_object_new_string(QString::fromUtf8("告警").toUtf8().data()));
  81. }else{
  82. json_object_object_add(sp,"STATUS_ID",json_object_new_int(0));
  83. json_object_object_add(sp,"STATUS",json_object_new_string(QString::fromUtf8("正常").toUtf8().data()));
  84. }
  85. }
  86. json_object_object_add(sp,"COMM",json_object_new_int(comm));
  87. json_object_object_add(sp,"ADDR",json_object_new_int(adds));
  88. json_object_object_add(sp,"PNO_NAME",
  89. json_object_new_string(ytShm->sPointList.sPoint[comm][adds].NAME));
  90. json_object_object_add(sp,"PNO_TYPE",json_object_new_int(ytShm->sPointList.sPoint[comm][adds].PNO_TYPE));
  91. if(ytShm->sPointList.sPoint[comm][adds].PNO_TYPE==0x01){
  92. if(ytShm->spStatusList.spStatus[comm][adds].REALTIME_VALUE==0.0)
  93. json_object_object_add(sp,"VALUE",json_object_new_string("0"));
  94. else
  95. json_object_object_add(sp,"VALUE",json_object_new_string("1"));
  96. }else{
  97. sprintf(tmp,"%.2f",ytShm->spStatusList.spStatus[comm][adds].REALTIME_VALUE);
  98. json_object_object_add(sp,"VALUE",json_object_new_string(tmp));
  99. }
  100. time_t t = ytShm->spStatusList.spStatus[comm][adds].REALTIME_TIMESTAMP;
  101. struct tm *loc_time = localtime(&t);
  102. sprintf(tmp,"%04d-%02d-%02d %02d:%02d:%02d",
  103. loc_time->tm_year+1900,
  104. loc_time->tm_mon+1,
  105. loc_time->tm_mday,
  106. loc_time->tm_hour,
  107. loc_time->tm_min,
  108. loc_time->tm_sec);
  109. json_object_object_add(sp,"TIME",json_object_new_string(tmp));
  110. for(i=0;i<5;i++)
  111. {
  112. if((ytShm->sPointList.sPoint[comm][adds].SUB_TYPE&(0x01<<i))==(0x01<<i))
  113. json_object_array_add(obj_list[i],sp);
  114. }
  115. }
  116. }
  117. }
  118. }
  119. for(i=0;i<5;i++)
  120. {
  121. json_object_object_add(obj[i],"ID",json_object_new_int(i+1));
  122. switch(i){
  123. case 0:
  124. json_object_object_add(obj[i],"NAME",json_object_new_string(QString::fromUtf8("火灾监控实时信息").toUtf8().data()));
  125. break;
  126. case 1:
  127. json_object_object_add(obj[i],"NAME",json_object_new_string(QString::fromUtf8("电气火灾监控实时信息").toUtf8().data()));
  128. break;
  129. case 2:
  130. json_object_object_add(obj[i],"NAME",json_object_new_string(QString::fromUtf8("消防水系统监控实时信息").toUtf8().data()));
  131. break;
  132. case 3:
  133. json_object_object_add(obj[i],"NAME",json_object_new_string(QString::fromUtf8("通道监控实时信息").toUtf8().data()));
  134. break;
  135. case 4:
  136. json_object_object_add(obj[i],"NAME",json_object_new_string(QString::fromUtf8("消防电源监控实时信息").toUtf8().data()));
  137. break;
  138. }
  139. json_object_object_add(obj[i],"COUNT",json_object_new_int(count[i]));
  140. json_object_object_add(obj[i],"OUT",json_object_new_int(out[i]));
  141. json_object_object_add(obj[i],"ALARM",json_object_new_int(alarm[i]));
  142. json_object_object_add(obj[i],"LIST",obj_list[i]);
  143. json_object_array_add(iotlist,obj[i]);
  144. }
  145. json_object_object_add(body,"IOT_LIST",iotlist);
  146. json_object_object_add(json,"RESULT",body);
  147. json_object_object_add(json,"NAME",json_object_new_string(QString::fromUtf8("Usky_IoT-03").toUtf8().data()));
  148. json_object_object_add(json,"VER",json_object_new_string("1.01"));
  149. json_object_object_add(json,"Id",json_object_new_string(SelfId.toUtf8().data()));
  150. QNetworkRequest *req = new QNetworkRequest(QUrl(ServerPath));
  151. req->setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
  152. req->setRawHeader("Accept","text/html, application/xhtml+xml, */*");
  153. req->setRawHeader("Accept-Language","zh-CN");
  154. req->setRawHeader("Connection","keep-alive");
  155. req->setRawHeader("Cache-Control"," no-cache");
  156. QByteArray postdata;
  157. postdata.append(QString::fromUtf8(json_object_to_json_string(json)).toUtf8());
  158. req->setRawHeader("Content-Length",QString("%1").arg(postdata.length()).toUtf8());
  159. QNetworkReply *reply = queryManager->post(*req,postdata);
  160. QReplayTimeout *pTimeout = new QReplayTimeout(reply,10000);
  161. connect(pTimeout, SIGNAL(net_timeout()),this,SLOT(reply_timeout()));
  162. }
  163. }