123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- #include "camthread.h"
- #include "ytdhcam.h"
- #define UN_REFERENCED_PARAMETER(x) {(x) = (x);}
- BOOL CALLBACK MessCallBack(LONG lCommand, LLONG lLoginID, char *pBuf, DWORD dwBufLen, char *pchDVRIP, LONG nDVRPort, LDWORD dwUser)
- {
- if(dwUser==0)
- return false;
- QDateTime t = QDateTime::currentDateTime();
- CamThread *thread = (CamThread *)dwUser;
- thread->emit_msg(QString::fromUtf8("[ %1 %2 ] Alarm(%3)").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(thread->DevIP).arg(lCommand));
- return true;
- }
- int CALLBACK RealLoadPicCallback(LLONG lAnalyzerHandle, DWORD dwAlarmType, void* pAlarmInfo, BYTE *pBuffer, DWORD dwBufSize, LDWORD dwUser, int nSequence, void *userdata)
- {
- if(dwUser==0)
- return false;
- unsigned int i;
- FILE *file;
- QDateTime t = QDateTime::currentDateTime();
- CamThread *thread = (CamThread *)dwUser;
- thread->emit_msg(QString("[ %1 %2 ] lAnalyzerHandle:%3, dwAlarmType:%4, pAlarmInfo:%5, nSequence:%6")
- .arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(thread->DevIP)
- .arg(lAnalyzerHandle).arg(dwAlarmType).arg(QString((char *)pAlarmInfo)).arg(nSequence));
- QString filename = QString("/usr/local/nginx/html/VideoAlarmPics/%1_%2.jpg").arg(thread->DevName).arg(t.toString("yyyyMMddHHmmsszzz"));
- file = fopen(filename.toUtf8().data(),"w");
- for(i=0;i<dwBufSize;i++){
- fputc(pBuffer[i],file);
- }
- fflush(file);
- fclose(file);
- 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"));
- return 0;
- }
- CamThread::CamThread(int idx, QObject *parent)
- : QThread(parent)
- {
- DevIdx = idx;
- DevIP = QString(sysConfShm->deviceInfo[DevIdx].Ip);
- DevPort = sysConfShm->deviceInfo[DevIdx].Port;
- DevName = QString(sysConfShm->deviceInfo[DevIdx].Device_Code);
- DevLoginname = QString(sysConfShm->deviceInfo[DevIdx].LoginName);
- DevPassword = QString(sysConfShm->deviceInfo[DevIdx].Password);
- }
- CamThread::~CamThread()
- {
- if(sysConfShm->deviceInfo[DevIdx].SubscribeHandle!=0)
- CLIENT_StopLoadPic(sysConfShm->deviceInfo[DevIdx].SubscribeHandle);
- if(sysConfShm->deviceInfo[DevIdx].LoginHandle!=0)
- CLIENT_Logout(sysConfShm->deviceInfo[DevIdx].LoginHandle);
- sysConfShm->deviceInfo[DevIdx].LoginHandle=0;
- }
- void CamThread::emit_alarm(QString deviceid, QString alarmtype, QString picpath, QString alarmtime){
- emit CamAlarm(deviceid,alarmtype,picpath,alarmtime);
- }
- void CamThread::stop()
- {
- keepwork = false;
- }
- void CamThread::emit_msg(QString msg)
- {
- emit CamMsg(msg);
- }
- void CamThread::initNetSDK()
- {
- CLIENT_SetDVRMessCallBack(MessCallBack,(LDWORD)this);
- }
- void CamThread::LoginError(QDateTime t, QString ip, int error, QString &errStr)
- {
- switch (error) {
- case 0:
- errStr = QString::fromUtf8("[ %1 %2 ] Login Success").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 1:
- errStr = QString::fromUtf8("[ %1 %2 ] Account or Password Incorrect").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 2:
- errStr = QString::fromUtf8("[ %1 %2 ] User Is Not Exist").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 3:
- errStr = QString::fromUtf8("[ %1 %2 ] Login Timeout").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 4:
- errStr = QString::fromUtf8("[ %1 %2 ] Repeat Login").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 5:
- errStr = QString::fromUtf8("[ %1 %2 ] User Account is Locked").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 6:
- errStr = QString::fromUtf8("[ %1 %2 ] User In Blacklist").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 7:
- errStr = QString::fromUtf8("[ %1 %2 ] Device Busy").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 8:
- errStr = QString::fromUtf8("[ %1 %2 ] Sub Connect Failed").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 9:
- errStr = QString::fromUtf8("[ %1 %2] Host Connect Failed").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 10:
- errStr = QString::fromUtf8("[ %1 %2 ] Max Connect").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 11:
- errStr = QString::fromUtf8("[ %1 %2 ] Support Protocol3 Only").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 12:
- errStr = QString::fromUtf8("[ %1 %2 ] Ukey Info Error").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 13:
- errStr = QString::fromUtf8("[ %1 %2 ] No Authorized").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- case 18:
- errStr = QString::fromUtf8("[ %1 %2 ] Device Account isn't Initialized").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip);
- break;
- default:
- errStr = QString::fromUtf8("[ %1 %2 ] Unknown Error Code(%3)").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(ip).arg(error);
- break;
- }
- emit_msg(errStr);
- }
- void CamThread::run()
- {
- int nError = 0;
- NET_DEVICEINFO_Ex stDevInfo;
- QDateTime t;
- QString Msg="";
- initNetSDK();
- sysConfShm->deviceInfo[DevIdx].LoginHandle = CLIENT_LoginEx2(sysConfShm->deviceInfo[DevIdx].Ip,
- sysConfShm->deviceInfo[DevIdx].Port,
- sysConfShm->deviceInfo[DevIdx].LoginName,
- sysConfShm->deviceInfo[DevIdx].Password,
- EM_LOGIN_SPEC_CAP_SERVER_CONN,
- (void *)(sysConfShm->deviceInfo[DevIdx].Device_Code),
- &stDevInfo,
- &nError);
- t = QDateTime::currentDateTime();
- if(sysConfShm->deviceInfo[DevIdx].LoginHandle==0){
- sysConfShm->deviceInfo[DevIdx].LoginStatus = 0x00;
- LoginError(t,DevIP,nError,Msg);
- emit CamMsg(Msg);
- }else{
- sysConfShm->deviceInfo[DevIdx].LoginStatus = 0x01;
- sysConfShm->deviceInfo[DevIdx].keepThread = 0x01;
- LoginError(t,DevIP,nError,Msg);
- emit CamMsg(Msg);
- sysConfShm->deviceInfo[DevIdx].SubscribeHandle = CLIENT_RealLoadPictureEx(sysConfShm->deviceInfo[DevIdx].LoginHandle,
- 0,EVENT_IVS_ALL,TRUE,RealLoadPicCallback,(LDWORD)this,nullptr);
- if(sysConfShm->deviceInfo[DevIdx].SubscribeHandle==0){
- emit CamMsg(QString("subscribe to intelligent event failed"));
- }else{
- emit CamMsg(QString("subscribe to intelligent event success"));
- while(sysConfShm->deviceInfo[DevIdx].keepThread){
- usleep(500000);
- }
- CLIENT_StopLoadPic(sysConfShm->deviceInfo[DevIdx].SubscribeHandle);
- }
- }
- }
|