dogobject.cpp 6.3 KB

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