messagesender.cpp 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include "messagesender.h"
  2. MessageSender::MessageSender(QObject *parent, QString serverPath, QString key, QString id) :
  3. QObject(parent)
  4. {
  5. waitting = false;
  6. hour = 255;
  7. minutes = 255;
  8. ServerPath = serverPath;
  9. UKey = key;
  10. SID = id;
  11. msgList.clear();
  12. // printf("sender path:%s\nkey:%s,id:%s\n",ServerPath.toUtf8().data(),UKey.toUtf8().data(),SID.toUtf8().data());
  13. timer = new QTimer(this);
  14. connect(timer,SIGNAL(timeout()),this,SLOT(time_out()));
  15. queryManager = new QNetworkAccessManager(this);
  16. connect(queryManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(query_finishedSlot(QNetworkReply*)));
  17. beepManager = new QNetworkAccessManager(this);
  18. connect(beepManager,SIGNAL(finished(QNetworkReply *)),this,SLOT(beep_finishedSlot(QNetworkReply*)));
  19. time_out();
  20. timer->start(5000);
  21. }
  22. void MessageSender::appendMsg(Msg msg)
  23. {
  24. msgList.append(msg);
  25. }
  26. void MessageSender::reply_timeout()
  27. {
  28. waitting = false;
  29. }
  30. void MessageSender::query_finishedSlot(QNetworkReply *reply)
  31. {
  32. if(reply->error()==QNetworkReply::NoError){
  33. QByteArray qj = reply->readAll();
  34. emit sent(msgList.first().ID);
  35. msgList.removeFirst();
  36. }
  37. waitting = false;
  38. }
  39. void MessageSender::beep_finishedSlot(QNetworkReply *reply)
  40. {
  41. if(reply->error()==QNetworkReply::NoError){
  42. QByteArray qj = reply->readAll();
  43. }
  44. waitting = false;
  45. }
  46. void MessageSender::time_out()
  47. {
  48. if(!waitting){
  49. if(msgList.length()>0){
  50. waitting = true;
  51. Msg msg = msgList.first();
  52. printf("%s\n",msg.MSG.toUtf8().data());
  53. QNetworkRequest *req = new QNetworkRequest(QUrl(ServerPath));
  54. req->setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded; charset=UTF-8");
  55. req->setRawHeader("Accept","text/html, application/xhtml+xml, */*");
  56. req->setRawHeader("Accept-Language","zh-CN");
  57. req->setRawHeader("Connection","keep-alive");
  58. req->setRawHeader("Cache-Control"," no-cache");
  59. QByteArray postdata;
  60. postdata.append(msg.MSG.toUtf8());
  61. req->setRawHeader("Content-Length",QString("%1").arg(postdata.length()).toUtf8());
  62. QNetworkReply *reply = queryManager->post(*req,postdata);
  63. QReplayTimeout *pTimeout = new QReplayTimeout(reply,10000);
  64. connect(pTimeout, SIGNAL(net_timeout()),this,SLOT(reply_timeout()));
  65. }else if(minutes!=QTime::currentTime().minute()){
  66. if(QTime::currentTime().minute()>2){
  67. waitting = true;
  68. minutes = QTime::currentTime().minute();
  69. QNetworkRequest *req = new QNetworkRequest(QUrl(ServerPath));
  70. req->setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded; charset=UTF-8");
  71. req->setRawHeader("Accept","text/html, application/xhtml+xml, */*");
  72. req->setRawHeader("Accept-Language","zh-CN");
  73. req->setRawHeader("Connection","keep-alive");
  74. req->setRawHeader("Cache-Control"," no-cache");
  75. QString postdata = QString("key=%1&json={\"jsonrpc\":\"2.0\",\"id\":\"%2\",\"method\":\"updateHeart\",\"params\":{\"deviceId\":\"%2\"}}")
  76. .arg(UKey).arg(SID);
  77. req->setRawHeader("Content-Length",QString("%1").arg(postdata.length()).toUtf8());
  78. QNetworkReply *reply = beepManager->post(*req,postdata.toUtf8());
  79. QReplayTimeout *pTimeout = new QReplayTimeout(reply,10000);
  80. connect(pTimeout, SIGNAL(net_timeout()),this,SLOT(reply_timeout()));
  81. }
  82. }
  83. }
  84. }