dogobject.cpp 5.7 KB

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