#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;iemit_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); } } }