dogobject.cpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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. //公司187生产环境对应的数据库配置
  20. db = QSqlDatabase::addDatabase("QMYSQL","conf_db");
  21. db.setDatabaseName("ytIoT");
  22. db.setHostName("47.98.201.187");
  23. db.setUserName("root");
  24. db.setPassword("Yt2018IoT");
  25. //伍继158环境对应的数据库配置
  26. // db = QSqlDatabase::addDatabase("QMYSQL","conf_db");
  27. // db.setDatabaseName("ytIoT");
  28. // db.setHostName("124.70.160.158");
  29. // db.setUserName("root");
  30. // db.setPassword("Y48hD&Eg");
  31. //伍继91环境对应的数据库配置
  32. // db = QSqlDatabase::addDatabase("QMYSQL","conf_db");
  33. // db.setDatabaseName("ytiot");
  34. // db.setHostName("192.168.0.206");
  35. // db.setUserName("electric");
  36. // db.setPassword("Y48hD&Eg");
  37. db.open();
  38. shmLoad = load_shm();
  39. start_t = QDateTime::currentDateTime().toTime_t();
  40. timer = new QTimer(this);
  41. connect(timer,SIGNAL(timeout()),this,SLOT(time_out()));
  42. for(int i=0;i<16;i++)
  43. ytShm->workingTime[i] = 0;
  44. devConfList.clear();
  45. if(db.isOpen()){
  46. QSqlQuery qry = db.exec("select device_code, comm_type, company_code, dev_name from ytiot_v_video order by device_code");
  47. while(qry.next()){
  48. devConfList.append(DevConf(qry.value(0).toString(),qry.value(1).toUInt()&0xff,qry.value(2).toString(),qry.value(3).toString()));
  49. }
  50. qry.clear();
  51. }
  52. QDateTime zeroTime = QDateTime::fromTime_t(0);
  53. for(int i=0;i<DEVICES_COUNT;i++){
  54. ytShm->eHomeDevice[i].io[8] = 0x00;
  55. }
  56. for(int i=0;i<devConfList.length();i++){
  57. if(i>1024){
  58. break;
  59. }
  60. ytShm->eHomeDevice[i].LoginId = -1;
  61. ytShm->eHomeDevice[i].SessionId = -1;
  62. ytShm->eHomeDevice[i].listen_preview_handle = -1;
  63. ytShm->eHomeDevice[i].listen_alarm_handle = -1;
  64. ytShm->eHomeDevice[i].lLinkHandle = -1;
  65. ytShm->eHomeDevice[i].previewId = -1;
  66. ytShm->eHomeDevice[i].previewport = 58000+i;
  67. ytShm->eHomeDevice[i].alarmport = 0;
  68. ytShm->eHomeDevice[i].Connected = 0x00;
  69. ytShm->eHomeDevice[i].Inited = 0x00;
  70. ytShm->eHomeDevice[i].onLined = 0x00;
  71. ytShm->eHomeDevice[i].savetmp = 0x00;
  72. ytShm->eHomeDevice[i].transed = 0x00;
  73. for(int j=0;j<16;j++)
  74. ytShm->eHomeDevice[i].io[j] = 0x00;
  75. ytShm->eHomeDevice[i].time[0]=0;
  76. ytShm->eHomeDevice[i].time[1]=0;
  77. bzero(ytShm->eHomeDevice[i].deviceID,sizeof(ytShm->eHomeDevice[i].deviceID));
  78. ytShm->eHomeDevice[i].tmpfile = NULL;
  79. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
  80. setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
  81. sprintf(ytShm->eHomeDevice[i].deviceID,"%s",devConfList.at(i).DeviceId.toUtf8().data());
  82. sprintf(ytShm->eHomeDevice[i].rtsppath,"%s",devConfList.at(i).rtspPath.toUtf8().data());
  83. sprintf(ytMqShm->eHomeDeviceMq[i].deviceID,"%s",devConfList.at(i).DeviceId.toUtf8().data());
  84. sprintf(ytMqShm->eHomeDeviceMq[i].deviceName,"%s",devConfList.at(i).deviceName.toUtf8().data());
  85. ytShm->eHomeDevice[i].io[8] = devConfList.at(i).CommType;
  86. printf("%d)%s\n",i+1,ytShm->eHomeDevice[i].deviceID);
  87. }
  88. }
  89. bool DogObject::load_shm()
  90. {
  91. int shmid;
  92. key_t key;
  93. if((key = ftok(SHM_PATH,(int)SHM_PORT))==-1)
  94. return false;
  95. if((shmid = shmget(key,sizeof(MyEHomeShm),IPC_CREAT|0666))==-1)
  96. return false;
  97. ytShm = (MyEHomeShm *)shmat(shmid,NULL,0);
  98. if((key = ftok(SHMMQ_PATH,(int)(SHM_PORT+10)))==-1)
  99. return false;
  100. if((shmid = shmget(key,sizeof(MyEHomeMQShm),IPC_CREAT|0666))==-1)
  101. return false;
  102. ytMqShm = (MyEHomeMQShm *)shmat(shmid,NULL,0);
  103. return true;
  104. }
  105. void DogObject::start()
  106. {
  107. if(shmLoad&&db.isOpen())
  108. timer->start(5000);
  109. }
  110. void DogObject::time_out()
  111. {
  112. uint t = QDateTime::currentDateTime().toTime_t();
  113. if(isWorking)
  114. return;
  115. isWorking = true;
  116. if(db.isOpen()){
  117. devConfList.clear();
  118. QSqlQuery qry = db.exec("select device_code, comm_type, company_code, dev_name from ytiot_v_video order by device_code");
  119. // qDebug()<<"select devicd_code, comm_type from ytiot_v_video";
  120. while(qry.next()){
  121. devConfList.append(DevConf(qry.value(0).toString(),qry.value(1).toUInt()&0xff,qry.value(2).toString(),qry.value(3).toString()));
  122. // qDebug()<<qry.value(0).toString().toUtf8().data()<<QString("%1").arg(qry.value(1).toUInt()&0xff).toUtf8().data();
  123. }
  124. qry.clear();
  125. }else
  126. db.open();
  127. for(int i=0;i<DEVICES_COUNT;i++){
  128. t = QDateTime::currentDateTime().toTime_t();
  129. for(int j=0;j<devConfList.length();j++){
  130. if(strcmp(ytShm->eHomeDevice[i].deviceID,devConfList.at(j).DeviceId.toUtf8().data())==0)
  131. {
  132. ytShm->eHomeDevice[i].io[8] = devConfList.at(j).CommType;
  133. break;
  134. }
  135. }
  136. // if(QString(ytShm->eHomeDevice[i].filename).length()>0){
  137. // QFileInfo f_info(QString(ytShm->eHomeDevice[i].filename));
  138. // if((f_info.exists())&&((t-f_info.lastModified().toTime_t())>120)){
  139. // system("killall ytCamCore");
  140. // system("rm -f /usr/local/nginx/html/hls/*");
  141. // system("rm /tmp/*.mp4");
  142. // system("ytCamCore &");
  143. // ytShm->workingTime[0]=t;
  144. // break;
  145. // }
  146. // }
  147. if(ytShm->eHomeDevice[i].Inited==0x01){
  148. if(ytShm->eHomeDevice[i].io[1]==0x01)
  149. ytShm->eHomeDevice[i].io[0]=0x00;
  150. if(ytShm->eHomeDevice[i].Connected==0x01){
  151. if((ytShm->eHomeDevice[i].time[0]>0)&&((t-ytShm->eHomeDevice[i].time[0])>10)){
  152. if(ytShm->eHomeDevice[i].io[0]==0x01)
  153. ytShm->eHomeDevice[i].io[0]=0x00;
  154. // }else if((ytShm->eHomeDevice[i].time[1]>0)&&((t-ytShm->eHomeDevice[i].time[1])>300)){
  155. // if(ytShm->eHomeDevice[i].io[0]==0x01)
  156. // ytShm->eHomeDevice[i].io[0]=0x00;
  157. }
  158. }
  159. }
  160. }
  161. t = QDateTime::currentDateTime().toTime_t();
  162. if((t-ytShm->workingTime[0])>30){
  163. system("killall ytCamCore");
  164. system("rm -f /usr/local/nginx/html/hls/*");
  165. system("rm /tmp/*.mp4");
  166. system("ytCamCore &");
  167. ytShm->workingTime[0]=t;
  168. }
  169. isWorking = false;
  170. }