camthread.cpp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. #include "camthread.h"
  2. #include "ytdhcam.h"
  3. #define UN_REFERENCED_PARAMETER(x) {(x) = (x);}
  4. BOOL CALLBACK MessCallBack(LONG lCommand, LLONG lLoginID, char *pBuf, DWORD dwBufLen, char *pchDVRIP, LONG nDVRPort, LDWORD dwUser)
  5. {
  6. if(dwUser==0)
  7. return false;
  8. QDateTime t = QDateTime::currentDateTime();
  9. CamThread *thread = (CamThread *)dwUser;
  10. thread->emit_msg(QString::fromUtf8("[ %1 %2 ] Alarm(%3)").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(thread->DevIP).arg(lCommand));
  11. return true;
  12. }
  13. int CALLBACK RealLoadPicCallback(LLONG lAnalyzerHandle, DWORD dwAlarmType, void* pAlarmInfo, BYTE *pBuffer, DWORD dwBufSize, LDWORD dwUser, int nSequence, void *userdata)
  14. {
  15. if(dwUser==0)
  16. return false;
  17. unsigned int i;
  18. FILE *file;
  19. QDateTime t = QDateTime::currentDateTime();
  20. CamThread *thread = (CamThread *)dwUser;
  21. thread->emit_msg(QString("[ %1 %2 ] lAnalyzerHandle:%3, dwAlarmType:%4, pAlarmInfo:%5, nSequence:%6")
  22. .arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(thread->DevIP)
  23. .arg(lAnalyzerHandle).arg(dwAlarmType).arg(QString((char *)pAlarmInfo)).arg(nSequence));
  24. QString filename = QString("/usr/local/nginx/html/VideoAlarmPics/%1_%2.jpg").arg(thread->DevName).arg(t.toString("yyyyMMddHHmmsszzz"));
  25. file = fopen(filename.toUtf8().data(),"w");
  26. for(i=0;i<dwBufSize;i++){
  27. fputc(pBuffer[i],file);
  28. }
  29. fflush(file);
  30. fclose(file);
  31. thread->emit_alarm(thread->DevName,QString("%1%2").arg(dwAlarmType,2,10,QChar('0')).arg(nSequence,2,10,QChar('0')),QString("http://47.103.74.123/VideoAlarmPics/%1_%2.jpg").arg(thread->DevName).arg(t.toString("yyyyMMddHHmmsszzz")),t.toString("yyyy-MM-dd HH:mm:ss"));
  32. return 0;
  33. }
  34. CamThread::CamThread(int idx, QObject *parent)
  35. : QThread(parent)
  36. {
  37. DevIdx = idx;
  38. DevIP = QString(sysConfShm->deviceInfo[DevIdx].Ip);
  39. DevPort = sysConfShm->deviceInfo[DevIdx].Port;
  40. DevName = QString(sysConfShm->deviceInfo[DevIdx].Device_Code);
  41. DevLoginname = QString(sysConfShm->deviceInfo[DevIdx].LoginName);
  42. DevPassword = QString(sysConfShm->deviceInfo[DevIdx].Password);
  43. }
  44. CamThread::~CamThread()
  45. {
  46. if(sysConfShm->deviceInfo[DevIdx].SubscribeHandle!=0)
  47. CLIENT_StopLoadPic(sysConfShm->deviceInfo[DevIdx].SubscribeHandle);
  48. if(sysConfShm->deviceInfo[DevIdx].LoginHandle!=0)
  49. CLIENT_Logout(sysConfShm->deviceInfo[DevIdx].LoginHandle);
  50. sysConfShm->deviceInfo[DevIdx].LoginHandle=0;
  51. }
  52. void CamThread::emit_alarm(QString deviceid, QString alarmtype, QString picpath, QString alarmtime){
  53. emit CamAlarm(deviceid,alarmtype,picpath,alarmtime);
  54. }
  55. void CamThread::stop()
  56. {
  57. keepwork = false;
  58. }
  59. void CamThread::emit_msg(QString msg)
  60. {
  61. emit CamMsg(msg);
  62. }
  63. void CamThread::initNetSDK()
  64. {
  65. CLIENT_SetDVRMessCallBack(MessCallBack,(LDWORD)this);
  66. }
  67. void CamThread::LoginError(QDateTime t, QString ip, int error, QString &errStr)
  68. {
  69. switch (error) {
  70. case 0:
  71. errStr = QString::fromUtf8("[ %1 %2 ] Login Success").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  72. break;
  73. case 1:
  74. errStr = QString::fromUtf8("[ %1 %2 ] Account or Password Incorrect").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  75. break;
  76. case 2:
  77. errStr = QString::fromUtf8("[ %1 %2 ] User Is Not Exist").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  78. break;
  79. case 3:
  80. errStr = QString::fromUtf8("[ %1 %2 ] Login Timeout").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  81. break;
  82. case 4:
  83. errStr = QString::fromUtf8("[ %1 %2 ] Repeat Login").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  84. break;
  85. case 5:
  86. errStr = QString::fromUtf8("[ %1 %2 ] User Account is Locked").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  87. break;
  88. case 6:
  89. errStr = QString::fromUtf8("[ %1 %2 ] User In Blacklist").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  90. break;
  91. case 7:
  92. errStr = QString::fromUtf8("[ %1 %2 ] Device Busy").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  93. break;
  94. case 8:
  95. errStr = QString::fromUtf8("[ %1 %2 ] Sub Connect Failed").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  96. break;
  97. case 9:
  98. errStr = QString::fromUtf8("[ %1 %2] Host Connect Failed").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  99. break;
  100. case 10:
  101. errStr = QString::fromUtf8("[ %1 %2 ] Max Connect").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  102. break;
  103. case 11:
  104. errStr = QString::fromUtf8("[ %1 %2 ] Support Protocol3 Only").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  105. break;
  106. case 12:
  107. errStr = QString::fromUtf8("[ %1 %2 ] Ukey Info Error").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  108. break;
  109. case 13:
  110. errStr = QString::fromUtf8("[ %1 %2 ] No Authorized").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  111. break;
  112. case 18:
  113. errStr = QString::fromUtf8("[ %1 %2 ] Device Account isn't Initialized").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
  114. break;
  115. default:
  116. errStr = QString::fromUtf8("[ %1 %2 ] Unknown Error Code(%3)").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip).arg(error);
  117. break;
  118. }
  119. emit_msg(errStr);
  120. }
  121. void CamThread::run()
  122. {
  123. int nError = 0;
  124. NET_DEVICEINFO_Ex stDevInfo;
  125. QDateTime t;
  126. QString Msg="";
  127. initNetSDK();
  128. sysConfShm->deviceInfo[DevIdx].LoginHandle = CLIENT_LoginEx2(sysConfShm->deviceInfo[DevIdx].Ip,
  129. sysConfShm->deviceInfo[DevIdx].Port,
  130. sysConfShm->deviceInfo[DevIdx].LoginName,
  131. sysConfShm->deviceInfo[DevIdx].Password,
  132. EM_LOGIN_SPEC_CAP_SERVER_CONN,
  133. (void *)(sysConfShm->deviceInfo[DevIdx].Device_Code),
  134. &stDevInfo,
  135. &nError);
  136. t = QDateTime::currentDateTime();
  137. if(sysConfShm->deviceInfo[DevIdx].LoginHandle==0){
  138. sysConfShm->deviceInfo[DevIdx].LoginStatus = 0x00;
  139. LoginError(t,DevIP,nError,Msg);
  140. emit CamMsg(Msg);
  141. }else{
  142. sysConfShm->deviceInfo[DevIdx].LoginStatus = 0x01;
  143. sysConfShm->deviceInfo[DevIdx].keepThread = 0x01;
  144. LoginError(t,DevIP,nError,Msg);
  145. emit CamMsg(Msg);
  146. sysConfShm->deviceInfo[DevIdx].SubscribeHandle = CLIENT_RealLoadPictureEx(sysConfShm->deviceInfo[DevIdx].LoginHandle,
  147. 0,EVENT_IVS_ALL,TRUE,RealLoadPicCallback,(LDWORD)this,nullptr);
  148. if(sysConfShm->deviceInfo[DevIdx].SubscribeHandle==0){
  149. emit CamMsg(QString("subscribe to intelligent event failed"));
  150. }else{
  151. emit CamMsg(QString("subscribe to intelligent event success"));
  152. while(sysConfShm->deviceInfo[DevIdx].keepThread){
  153. usleep(500000);
  154. }
  155. CLIENT_StopLoadPic(sysConfShm->deviceInfo[DevIdx].SubscribeHandle);
  156. }
  157. }
  158. }