dogobject.cpp 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. #include "dogobject.h"
  2. #include <QDebug>
  3. MyEHomeShm *ytShm;
  4. MyEHomeMQShm *ytMqShm;
  5. void setFullTime(FullTime *fTime, QDateTime qTime){
  6. fTime->YEAR = qTime.date().year()&0xffff;
  7. fTime->MONTH = qTime.date().month()&0xff;
  8. fTime->DAY = qTime.date().day()&0xff;
  9. fTime->HOUR = qTime.time().hour()&0xff;
  10. fTime->MINUTE = qTime.time().minute()&0xff;
  11. fTime->SECOND = qTime.time().second()&0xff;
  12. fTime->TIMESTAMP = qTime.toTime_t();
  13. }
  14. DogObject::DogObject(QObject *parent) :
  15. QObject(parent)
  16. {
  17. shmLoad = false;
  18. isWorking = false;
  19. isEqual = false;
  20. hour = 255;
  21. //公司187生产环境对应的数据库配置
  22. // db = QSqlDatabase::addDatabase("QMYSQL","conf_db");
  23. // db.setDatabaseName("ytIoT");
  24. // db.setHostName("47.98.201.187");
  25. // db.setUserName("root");
  26. // db.setPassword("Yt2018IoT");
  27. //伍继158环境对应的数据库配置
  28. // db = QSqlDatabase::addDatabase("QMYSQL","conf_db");
  29. // db.setDatabaseName("ytIoT");
  30. // db.setHostName("124.70.160.158");
  31. // db.setUserName("root");
  32. // db.setPassword("Y48hD&Eg");
  33. //伍继91环境对应的数据库配置
  34. db = QSqlDatabase::addDatabase("QMYSQL","conf_db");
  35. db.setDatabaseName("ytiot");
  36. db.setHostName("192.168.0.206");
  37. db.setUserName("electric");
  38. db.setPassword("Y48hD&Eg");
  39. db.open();
  40. shmLoad = load_shm();
  41. start_t = QDateTime::currentDateTime().toTime_t();
  42. timer = new QTimer(this);
  43. connect(timer,SIGNAL(timeout()),this,SLOT(time_out()));
  44. netAccessManager = new QNetworkAccessManager(this);
  45. connect(netAccessManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishedSlot(QNetworkReply*)));
  46. for(int i=0;i<16;i++)
  47. ytShm->workingTime[i] = 0;
  48. devConfList.clear();
  49. if(db.isOpen()){
  50. QSqlQuery qry = db.exec("select device_code, comm_type, company_code, dev_name from ytiot_v_video order by device_code");
  51. while(qry.next()){
  52. devConfList.append(DevConf(qry.value(0).toString(),qry.value(1).toUInt()&0xff,qry.value(2).toString(),qry.value(3).toString()));
  53. }
  54. qry.clear();
  55. }
  56. else{
  57. printf("db disconnect\n");
  58. }
  59. QDateTime zeroTime = QDateTime::fromTime_t(0);
  60. for(int i=0;i<DEVICES_COUNT;i++){
  61. ytShm->eHomeDevice[i].io[8] = 0x00;
  62. }
  63. for(int i=0;i<devConfList.length();i++){
  64. if(i>1024){
  65. break;
  66. }
  67. ytShm->eHomeDevice[i].LoginId = -1;
  68. ytShm->eHomeDevice[i].SessionId = -1;
  69. ytShm->eHomeDevice[i].listen_preview_handle = -1;
  70. ytShm->eHomeDevice[i].listen_alarm_handle = -1;
  71. ytShm->eHomeDevice[i].lLinkHandle = -1;
  72. ytShm->eHomeDevice[i].previewId = -1;
  73. ytShm->eHomeDevice[i].previewport = 58000+i;
  74. ytShm->eHomeDevice[i].alarmport = 0;
  75. ytShm->eHomeDevice[i].Connected = 0x00;
  76. ytShm->eHomeDevice[i].Inited = 0x00;
  77. ytShm->eHomeDevice[i].onLined = 0x00;
  78. ytShm->eHomeDevice[i].savetmp = 0x00;
  79. ytShm->eHomeDevice[i].transed = 0x00;
  80. for(int j=0;j<16;j++)
  81. ytShm->eHomeDevice[i].io[j] = 0x00;
  82. ytShm->eHomeDevice[i].time[0]=0;
  83. ytShm->eHomeDevice[i].time[1]=0;
  84. bzero(ytShm->eHomeDevice[i].deviceID,sizeof(ytShm->eHomeDevice[i].deviceID));
  85. ytShm->eHomeDevice[i].tmpfile = NULL;
  86. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
  87. setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
  88. sprintf(ytShm->eHomeDevice[i].deviceID,"%s",devConfList.at(i).DeviceId.toUtf8().data());
  89. sprintf(ytShm->eHomeDevice[i].rtsppath,"%s",devConfList.at(i).rtspPath.toUtf8().data());
  90. sprintf(ytMqShm->eHomeDeviceMq[i].deviceID,"%s",devConfList.at(i).DeviceId.toUtf8().data());
  91. sprintf(ytMqShm->eHomeDeviceMq[i].deviceName,"%s",devConfList.at(i).deviceName.toUtf8().data());
  92. ytShm->eHomeDevice[i].io[8] = devConfList.at(i).CommType;
  93. printf("%d)%s\n",i+1,ytShm->eHomeDevice[i].deviceID);
  94. }
  95. }
  96. DogObject::~DogObject()
  97. {
  98. netAccessManager->deleteLater();
  99. }
  100. bool DogObject::load_shm()
  101. {
  102. int shmid;
  103. key_t key;
  104. if((key = ftok(SHM_PATH,(int)SHM_PORT))==-1)
  105. return false;
  106. if((shmid = shmget(key,sizeof(MyEHomeShm),IPC_CREAT|0666))==-1)
  107. return false;
  108. ytShm = (MyEHomeShm *)shmat(shmid,NULL,0);
  109. if((key = ftok(SHMMQ_PATH,(int)(SHM_PORT+10)))==-1)
  110. return false;
  111. if((shmid = shmget(key,sizeof(MyEHomeMQShm),IPC_CREAT|0666))==-1)
  112. return false;
  113. ytMqShm = (MyEHomeMQShm *)shmat(shmid,NULL,0);
  114. return true;
  115. }
  116. void DogObject::start()
  117. {
  118. if(shmLoad&&db.isOpen())
  119. timer->start(5000);
  120. }
  121. void DogObject::time_out()
  122. {
  123. if(hour != QTime::currentTime().hour()){
  124. hour = QTime::currentTime().hour();
  125. QByteArray post_data;
  126. uint t = QDateTime::currentDateTime().toTime_t();
  127. QString tmp="";
  128. QString number= QString("%1%2%3").arg("usky").arg(t).arg("056ac8fae059c9c9e700b734922edfc8");
  129. QByteArray str;
  130. str = QCryptographicHash::hash(number.toLatin1(),QCryptographicHash::Md5);
  131. tmp.append(str.toHex());
  132. post_data.append(QString("requestType=%1&").arg(3));
  133. post_data.append(QString("publicKey=%1&").arg(tmp));
  134. post_data.append(QString("timeStamp=%1").arg(t));
  135. QNetworkRequest *req = new QNetworkRequest();
  136. req->setUrl(QUrl("https://iot.usky.cn/ytapi/admin/Manage/wooGiApi"));
  137. req->setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
  138. req->setHeader(QNetworkRequest::ContentLengthHeader,post_data.length());
  139. QNetworkReply* reply = netAccessManager->post(*req,post_data);
  140. }
  141. uint t = QDateTime::currentDateTime().toTime_t();
  142. if(isWorking)
  143. return;
  144. isWorking = true;
  145. if(db.isOpen()){
  146. devConfList.clear();
  147. QSqlQuery qry = db.exec("select device_code, comm_type, company_code, dev_name from ytiot_v_video order by device_code");
  148. // qDebug()<<"select devicd_code, comm_type from ytiot_v_video";
  149. while(qry.next()){
  150. devConfList.append(DevConf(qry.value(0).toString(),qry.value(1).toUInt()&0xff,qry.value(2).toString(),qry.value(3).toString()));
  151. // qDebug()<<qry.value(0).toString().toUtf8().data()<<QString("%1").arg(qry.value(1).toUInt()&0xff).toUtf8().data();
  152. }
  153. qry.clear();
  154. }else
  155. db.open();
  156. for(int i=0;i<DEVICES_COUNT;i++){
  157. t = QDateTime::currentDateTime().toTime_t();
  158. for(int j=0;j<devConfList.length();j++){
  159. if(strcmp(ytShm->eHomeDevice[i].deviceID,devConfList.at(j).DeviceId.toUtf8().data())==0)
  160. {
  161. ytShm->eHomeDevice[i].io[8] = devConfList.at(j).CommType;
  162. break;
  163. }
  164. }
  165. // if(QString(ytShm->eHomeDevice[i].filename).length()>0){
  166. // QFileInfo f_info(QString(ytShm->eHomeDevice[i].filename));
  167. // if((f_info.exists())&&((t-f_info.lastModified().toTime_t())>120)){
  168. // system("killall ytCamCore");
  169. // system("rm -f /usr/local/nginx/html/hls/*");
  170. // system("rm /tmp/*.mp4");
  171. // system("ytCamCore &");
  172. // ytShm->workingTime[0]=t;
  173. // break;
  174. // }
  175. // }
  176. if(ytShm->eHomeDevice[i].Inited==0x01){
  177. if(ytShm->eHomeDevice[i].io[1]==0x01)
  178. ytShm->eHomeDevice[i].io[0]=0x00;
  179. if(ytShm->eHomeDevice[i].Connected==0x01){
  180. if((ytShm->eHomeDevice[i].time[0]>0)&&((t-ytShm->eHomeDevice[i].time[0])>10)){
  181. if(ytShm->eHomeDevice[i].io[0]==0x01)
  182. ytShm->eHomeDevice[i].io[0]=0x00;
  183. // }else if((ytShm->eHomeDevice[i].time[1]>0)&&((t-ytShm->eHomeDevice[i].time[1])>300)){
  184. // if(ytShm->eHomeDevice[i].io[0]==0x01)
  185. // ytShm->eHomeDevice[i].io[0]=0x00;
  186. }
  187. }
  188. }
  189. }
  190. t = QDateTime::currentDateTime().toTime_t();
  191. if(((t-ytShm->workingTime[0])>30)&&(isEqual)){
  192. system("killall ytCamCore");
  193. system("rm -f /usr/local/nginx/html/hls/*");
  194. system("rm /tmp/*.mp4");
  195. system("ytCamCore &");
  196. ytShm->workingTime[0]=t;
  197. }
  198. isWorking = false;
  199. }
  200. void DogObject::finishedSlot(QNetworkReply *reply)
  201. {
  202. //printf("enter finishedSlot ++++++++++++++\n");
  203. QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
  204. if(status_code == 200){
  205. if(reply->error() == QNetworkReply::NoError){
  206. QString message = QString::fromUtf8(reply->readAll());
  207. QByteArray data = message.toLatin1();
  208. QJsonParseError json_err;
  209. QJsonDocument jsondoc(QJsonDocument::fromJson(data,&json_err));
  210. //printf("json_err.error = %d\n ",json_err.error);
  211. if(json_err.error==QJsonParseError::NoError){
  212. QJsonObject root = jsondoc.object();
  213. QJsonObject obj = root.value("data").toObject();
  214. QString num = "";
  215. int t = 0;
  216. if((!obj.value("publicKey").isUndefined())&&(!obj.value("publicKey").isNull())){
  217. num = obj.value("publicKey").toString();
  218. }
  219. if((!obj.value("timeStamp").isUndefined())&&(!obj.value("timeStamp").isNull())){
  220. t = obj.value("timeStamp").toInt();
  221. }
  222. QString temp="";
  223. QString number = QString("%1%2%3").arg("usky").arg(t).arg("056ac8fae059c9c9e700b734922edfc8");
  224. QByteArray str = QCryptographicHash::hash(number.toLatin1(),QCryptographicHash::Md5);
  225. temp.append(str.toHex());
  226. if(QString::compare(num,temp)!=0){
  227. isEqual = false;
  228. }
  229. else{
  230. isEqual = true;
  231. }
  232. }
  233. }else{
  234. }
  235. }else{
  236. }
  237. reply->abort();
  238. reply->close();
  239. reply->deleteLater();
  240. }