hanzhengyi 4 лет назад
Родитель
Сommit
beec6bc93f
5 измененных файлов с 1021 добавлено и 0 удалено
  1. 22 0
      CamCore/.qmake.stash
  2. 31 0
      CamCore/CamCore.pro
  3. 865 0
      CamCore/coreobject.cpp
  4. 103 0
      CamCore/coreobject.h
  5. BIN
      CamCore/coreobject.o

+ 22 - 0
CamCore/.qmake.stash

@@ -0,0 +1,22 @@
+QMAKE_CXX.INCDIRS = \
+    /usr/include/c++/4.8.5 \
+    /usr/include/c++/4.8.5/x86_64-redhat-linux \
+    /usr/include/c++/4.8.5/backward \
+    /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include \
+    /usr/local/include \
+    /usr/include
+QMAKE_CXX.LIBDIRS = \
+    /usr/lib/gcc/x86_64-redhat-linux/4.8.5 \
+    /usr/lib64 \
+    /lib64 \
+    /usr/lib \
+    /lib
+QMAKE_CXX.QT_COMPILER_STDCXX = 199711L
+QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 4
+QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 8
+QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 5
+QMAKE_CXX.COMPILER_MACROS = \
+    QT_COMPILER_STDCXX \
+    QMAKE_GCC_MAJOR_VERSION \
+    QMAKE_GCC_MINOR_VERSION \
+    QMAKE_GCC_PATCH_VERSION

+ 31 - 0
CamCore/CamCore.pro

@@ -0,0 +1,31 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2019-04-07T10:32:27
+#
+#-------------------------------------------------
+
+QT       += core xml sql network
+
+QT       -= gui
+
+TARGET = ytCamCore
+CONFIG   += console
+CONFIG   -= app_bundle
+
+TEMPLATE = app
+
+
+SOURCES += main.cpp \
+    coreobject.cpp \
+    ttsthreads.cpp \
+    wechartthreads.cpp
+
+HEADERS += \
+    coreobject.h \
+    ttsthreads.h \
+    wechartthreads.h
+
+
+INCLUDEPATH += ../hc/incCn
+
+LIBS +=  -L../hc/lib -lHCEHomeCMS -lHCEHomeAlarm -lHCEHomeStream -lHCNetUtils -lHCEHomeSS -lhpr -lcrypto -lssl -lsqlite3 -liconv2 -lSystemTransform

+ 865 - 0
CamCore/coreobject.cpp

@@ -0,0 +1,865 @@
+#include "coreobject.h"
+
+#define iServerIP "172.19.198.166"
+#define oServerIP "47.103.74.123"
+
+#define UN_REFERENCED_PARAMETER(x) {(x) = (x);}
+
+extern BOOL CALLBACK RegisterCallBack(LONG lUserID, DWORD dwDataType, void *pOutBuffer, DWORD dwOutLen, void *pInBuffer, DWORD dwInLen, void *pUser);
+extern BOOL CALLBACK fnPREVIEW_NEWLINK_CB(LONG lPreviewHandle, NET_EHOME_NEWLINK_CB_MSG *pNewLinkCBMsg, void *pUserData);
+extern void CALLBACK fnPREVIEW_DATA_CB(LONG lPreviewHandle, NET_EHOME_PREVIEW_CB_MSG *pPreviewCBMsg, void *pUserData);
+extern BOOL InputStreamData(QString deviceid, BYTE byDataType, char* pBuffer, int iDataLen);
+extern BOOL CALLBACK AlarmMSGCallBack (LONG lHaldle, NET_EHOME_ALARM_MSG *pAlarmMsg, void *pUserData);
+extern QDateTime getFullTime(FullTime fTime);
+extern void setFullTime(FullTime *fTime, QDateTime qTime);
+extern QString getNewId();
+
+uint start_time;
+bool had_reg;
+
+MyEHomeShm *ytShm;
+
+CoreObject::CoreObject(QObject *parent) :
+    QObject(parent)
+{
+    processList.clear();
+    sqlList.clear();
+    reportList.clear();
+    companyphoneList.clear();
+    isWorking = false;
+    start_time = QDateTime::currentDateTime().toTime_t();
+    had_reg = false;
+    timer = new QTimer();
+    db = QSqlDatabase::addDatabase("QMYSQL","conf_db");
+    db.setDatabaseName("jdxf");
+    db.setHostName("47.98.201.187");
+    db.setUserName("root");
+    db.setPassword("Yt2018IoT");
+    NET_ESTREAM_Init();
+    NET_EALARM_Init();
+    NET_ECMS_Init();
+    if(shm_load()){
+        QDateTime zeroTime = QDateTime::fromTime_t(0);
+        for(int i=0;i<DEVICES_COUNT;i++){
+            ytShm->eHomeDevice[i].LoginId = -1;
+            ytShm->eHomeDevice[i].SessionId = -1;
+            ytShm->eHomeDevice[i].listen_preview_handle = -1;
+            ytShm->eHomeDevice[i].listen_alarm_handle = -1;
+            ytShm->eHomeDevice[i].lLinkHandle = -1;
+            ytShm->eHomeDevice[i].previewId = -1;
+            ytShm->eHomeDevice[i].Connected = 0x00;
+            ytShm->eHomeDevice[i].Inited = 0x00;
+            ytShm->eHomeDevice[i].onLined = 0x00;
+            ytShm->eHomeDevice[i].savetmp = 0x00;
+            ytShm->eHomeDevice[i].transed = 0x00;
+            for(int j=0;j<8;j++)
+                ytShm->eHomeDevice[i].io[j] = 0x00;
+            ytShm->eHomeDevice[i].time[0]=0;
+            ytShm->eHomeDevice[i].time[1]=0;
+            ytShm->eHomeDevice[i].tmpfile = NULL;
+            setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
+            setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
+            QProcess *process = new QProcess(this);
+            connect(process,SIGNAL(finished(int)),this,SLOT(process_stop()));
+            connect(process,SIGNAL(destroyed()),this,SLOT(process_stop()));
+            connect(process,SIGNAL(aboutToClose()),this,SLOT(process_stop()));
+            processList.append(process);
+        }
+        for(quint16 i=0;i<8;i++){
+            wxThreads[i] = new WechartThreads(this,i,"47.98.201.73","/jdxf/wxapp2.php/Home/GeneralPush/voice");
+//            connect(wxThreads[i],&WechartThreads::wxchart,this,&CoreObject::chartlog);
+            wssThread[i] = new ttsThreads(this,i,"47.98.201.73","/report",55125);
+//            spThread[i] = new ttsThreads(this,i,"47.98.201.187","/report",55335);
+//            connect(wssThread[i],&ttsThreads::ttslog,this,&CoreObject::chartlog);
+            wxThreads[i]->start();
+            wssThread[i]->start();
+//            spThread[i]->start();
+        }
+        repcur = 0;
+        wxcur = 0;
+    }
+    chkPhoneList();
+    connect(timer,SIGNAL(timeout()),this,SLOT(time_out()));
+}
+
+CoreObject::~CoreObject()
+{
+    for(int i=0;i<processList.length();i++){
+        if(processList.at(i)->pid()>0)
+            processList.at(i)->close();
+    }
+    NET_ECMS_Fini();
+    NET_ESTREAM_Fini();
+    NET_EALARM_Fini();
+}
+
+void CoreObject::chkPhoneList()
+{
+    if(db.open()){
+        QList<Company_Phone> tmpList;
+        QSqlQuery qry = db.exec("select owner_code, phone from sp_owner_phone where phone<>''");
+        while (qry.next()) {
+            tmpList.append(Company_Phone(qry.value(0).toString(),qry.value(1).toString()));
+        }
+        db.close();
+        companyphoneList.clear();
+        if(tmpList.length()>0)
+            companyphoneList.append(tmpList);
+        synchour = QTime::currentTime().hour();
+    }
+}
+
+void CoreObject::chartlog(quint16 idx, QDateTime t, QString data, bool dirflag){
+    if(dirflag)
+        printf("[ %04d-%02d-%02d %02d:%02d:%02d >>> ] %s\n",
+               t.date().year(),t.date().month(),t.date().day(),
+               t.time().hour(),t.time().minute(),t.time().second(),
+               data.toUtf8().data());
+    else
+        printf("[ %04d-%02d-%02d %02d:%02d:%02d <<< ] %s\n",
+               t.date().year(),t.date().month(),t.date().day(),
+               t.time().hour(),t.time().minute(),t.time().second(),
+               data.toUtf8().data());
+}
+
+bool CoreObject::shm_load()
+{
+    int shmid;
+    key_t key;
+    if((key = ftok(SHM_PATH,(int)SHM_PORT))==-1)
+        return false;
+    if((shmid = shmget(key,sizeof(MyEHomeShm),IPC_CREAT|0666))==-1)
+        return false;
+    ytShm = (MyEHomeShm *)shmat(shmid,NULL,0);
+    return true;
+}
+
+QString getNewId()
+{
+    return QUuid::createUuid().toString().replace("{","").replace("}","");
+}
+
+BOOL RegisterCallBack(LONG lUserID, DWORD dwDataType, void *pOutBuffer, DWORD dwOutLen, void *pInBuffer, DWORD dwInLen, void *pUser)
+{
+    int i,idx=0;
+    bool found = false;
+
+    had_reg = true;
+    QDateTime zeroTime = QDateTime::fromTime_t(0);
+    if (ENUM_DEV_ON == dwDataType)
+    {
+        NET_EHOME_DEV_REG_INFO *pDevInfo = (NET_EHOME_DEV_REG_INFO *)pOutBuffer;
+//        qDebug()<<"RegisterCallBack: "<<(char*)(pDevInfo->byDeviceID);
+        if(pDevInfo!=NULL)
+        {
+            for(i=0;i<DEVICES_COUNT;i++){
+                if(strcmp(ytShm->eHomeDevice[i].deviceID,QString((char*)(pDevInfo->byDeviceID)).replace(" ","_").toUtf8().data())==0){
+                    found = true;
+                    memcpy(ytShm->eHomeDevice[i].devIp,(char *)(pDevInfo->struDevAdd.szIP),sizeof(ytShm->eHomeDevice[i].devIp));
+                    ytShm->eHomeDevice[i].LoginId = lUserID;
+                    ytShm->eHomeDevice[i].Connected = 0x00;
+                    ytShm->eHomeDevice[i].Inited = 0x01;
+                    ytShm->eHomeDevice[i].onLined = 0x00;
+                    ytShm->eHomeDevice[i].savetmp = 0x00;
+                    if(ytShm->eHomeDevice[i].transed==0x01)
+                        fclose(ytShm->eHomeDevice[i].tmpfile);
+                    ytShm->eHomeDevice[i].tmpfile = NULL;
+                    ytShm->eHomeDevice[i].transed = 0x00;
+                    ytShm->eHomeDevice[i].io[15]=0x00;
+                    ytShm->eHomeDevice[i].io[14]=0x03;
+                    setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
+                    setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
+                    idx=i;
+                    break;
+                }
+            }
+            if(!found){
+//                return FALSE;
+                for(int i=0;i<DEVICES_COUNT;i++){
+                    if(QString(ytShm->eHomeDevice[i].deviceID).trimmed().length()==0){
+                        ytShm->eHomeDevice[i].io[8]=0x00;
+                        ytShm->eHomeDevice[i].LoginId = lUserID;
+                        sprintf(ytShm->eHomeDevice[i].deviceID,"%s",QString((char *)(pDevInfo->byDeviceID)).replace(" ","_").toUtf8().data());
+                        ytShm->eHomeDevice[i].Connected = 0x00;
+                        ytShm->eHomeDevice[i].onLined = 0x00;
+                        setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
+                        setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
+                        ytShm->eHomeDevice[i].Inited = 0x01;
+                        ytShm->eHomeDevice[i].savetmp = 0x00;
+                        if(ytShm->eHomeDevice[i].transed==0x01)
+                            fclose(ytShm->eHomeDevice[i].tmpfile);
+                        ytShm->eHomeDevice[i].tmpfile = NULL;
+                        ytShm->eHomeDevice[i].transed = 0x00;
+                        ytShm->eHomeDevice[i].io[15]=0x00;
+                        ytShm->eHomeDevice[i].io[14]=0x03;
+                        idx = i;
+                        break;
+                    }
+                }
+            }
+
+            //输入参数
+            NET_EHOME_SERVER_INFO *pServerInfo = (NET_EHOME_SERVER_INFO *)pInBuffer;
+            pServerInfo->dwTimeOutCount = 6; //心跳超时次数
+            pServerInfo->dwKeepAliveSec = 15; //心跳间隔
+            memcpy(pServerInfo->struUDPAlarmSever.szIP, oServerIP, sizeof(oServerIP));
+            memcpy(pServerInfo->struTCPAlarmSever.szIP, oServerIP, sizeof(oServerIP)); //报警服务器IP地址(TCP协议)
+            pServerInfo->struUDPAlarmSever.wPort = 7669; //报警服务器端口(UDP协议),需要和报警服务器启动监听的端口一致
+            pServerInfo->struTCPAlarmSever.wPort = 7668;
+            pServerInfo->dwAlarmServerType = 1;  //报警服务器类型:0- 只支持UDP协议上报,1- 支持UDP、TCP两种协议上报
+        }
+    }else if (ENUM_DEV_OFF == dwDataType){
+        for(int i=0;i<DEVICES_COUNT;i++){
+            if(ytShm->eHomeDevice[i].LoginId==lUserID){
+                ytShm->eHomeDevice[i].io[15]=0x00;
+                ytShm->eHomeDevice[i].io[14]=0x02;
+                ytShm->eHomeDevice[i].LoginId = -1;
+//                printf("%s link off\n",ytShm->eHomeDevice[i].deviceID);
+                if(ytShm->eHomeDevice[i].SessionId>=0){
+                    if(NET_ECMS_StopGetRealStream(lUserID,ytShm->eHomeDevice[i].SessionId)){
+                        ytShm->eHomeDevice[i].SessionId = -1;
+                        if(ytShm->eHomeDevice[i].previewId>=0){
+                            if(NET_ESTREAM_StopPreview(ytShm->eHomeDevice[i].previewId)){
+                                ytShm->eHomeDevice[i].previewId = -1;
+                                QString tmpfile = QString(ytShm->eHomeDevice[i].filename);
+                                QFile(tmpfile).remove();
+                                ytShm->eHomeDevice[i].Connected = 0x00;
+//                                        bzero(ytShm->eHomeDevice[i].deviceID,sizeof(ytShm->eHomeDevice[i].deviceID));
+                                ytShm->eHomeDevice[i].Inited = 0x00;
+                                ytShm->eHomeDevice[i].onLined = 0x00;
+                                setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
+                                setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
+
+                                ytShm->eHomeDevice[i].savetmp = 0x00;
+                                if(ytShm->eHomeDevice[i].transed==0x01)
+                                    fclose(ytShm->eHomeDevice[i].tmpfile);
+                                ytShm->eHomeDevice[i].tmpfile = NULL;
+                                ytShm->eHomeDevice[i].transed = 0x00;
+                                if(ytShm->eHomeDevice[i].lLinkHandle>0){
+                                    if(NET_ESTREAM_StopListenPreview(ytShm->eHomeDevice[i].lLinkHandle)){
+                                        ytShm->eHomeDevice[i].lLinkHandle = -1;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }else{
+                    QString tmpfile = QString(ytShm->eHomeDevice[i].filename);
+                    QFile(tmpfile).remove();
+                    ytShm->eHomeDevice[i].io[15]=0x00;
+                    ytShm->eHomeDevice[i].Connected = 0x00;
+//                    bzero(ytShm->eHomeDevice[i].deviceID,sizeof(ytShm->eHomeDevice[i].deviceID));
+                    ytShm->eHomeDevice[i].Inited = 0x00;
+                    ytShm->eHomeDevice[i].onLined = 0x00;
+                    ytShm->eHomeDevice[i].LoginId = -1;
+                    setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
+                    setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
+                    ytShm->eHomeDevice[i].lLinkHandle = -1;
+                    ytShm->eHomeDevice[i].savetmp = 0x00;
+                    if(ytShm->eHomeDevice[i].transed==0x01)
+                        fclose(ytShm->eHomeDevice[i].tmpfile);
+                    ytShm->eHomeDevice[i].tmpfile = NULL;
+                    ytShm->eHomeDevice[i].transed = 0x00;
+                }
+                break;
+            }
+        }
+        NET_ECMS_ForceLogout(lUserID);
+    }
+    return TRUE;
+}
+
+
+BOOL CALLBACK fnPREVIEW_NEWLINK_CB(LONG lPreviewHandle, NET_EHOME_NEWLINK_CB_MSG *pNewLinkCBMsg, void *pUserData)
+{
+    for(int i=0;i<DEVICES_COUNT;i++){
+        if((ytShm->eHomeDevice[i].LoginId>-1)&&(ytShm->eHomeDevice[i].listen_preview_handle>-1)){
+            if(ytShm->eHomeDevice[i].SessionId == pNewLinkCBMsg->iSessionID){
+//                printf("fnPREVIEW_NEWLINK_CB:%s\n",ytShm->eHomeDevice[i].deviceID);
+                ytShm->eHomeDevice[i].lLinkHandle = lPreviewHandle;
+                NET_EHOME_PREVIEW_DATA_CB_PARAM struDataCB = {0};
+                struDataCB.pUserData = &(ytShm->eHomeDevice[i]);
+                struDataCB.fnPreviewDataCB = fnPREVIEW_DATA_CB;
+                struDataCB.byStreamFormat = 0;//封装格式:0- PS
+                if (!NET_ESTREAM_SetPreviewDataCB(lPreviewHandle, &struDataCB))
+                {
+                    ytShm->eHomeDevice[i].SessionId = -1;
+                    ytShm->eHomeDevice[i].Connected = 0x00;;
+//                    printf("NET_ESTREAM_SetPreviewDataCB set failed(%s)\n",ytShm->eHomeDevice[i].deviceID);
+                    return false;
+                }
+//                printf("NET_ESTREAM_SetPreviewDataCB set pass(%s)\n",ytShm->eHomeDevice[i].deviceID);
+                return true;
+            }
+        }
+    }
+    return false;
+}
+
+void CALLBACK fnPREVIEW_DATA_CB(LONG lPreviewHandle, NET_EHOME_PREVIEW_CB_MSG *pPreviewCBMsg, void *pUserData)
+{
+    if (NULL == pPreviewCBMsg)
+    {
+        return ;
+    }
+    EHomeDevice *dev= (EHomeDevice *)pUserData;
+    dev->Connected = 0x01;
+    dev->previewId = lPreviewHandle;
+    InputStreamData(QString(dev->deviceID).replace(" ","_"), pPreviewCBMsg->byDataType, (char*)pPreviewCBMsg->pRecvdata, pPreviewCBMsg->dwDataLen);
+}
+
+void ProcessHttpAlarmInfo(void *pXml, unsigned long dwLen, void *pUrl, unsigned long dwUrllen,CoreObject *obj){
+    if((pXml==NULL)&&(pUrl==NULL))
+        return;
+    UN_REFERENCED_PARAMETER(dwLen);
+    UN_REFERENCED_PARAMETER(pUrl);
+    UN_REFERENCED_PARAMETER(dwUrllen);
+    char deviceID[32] = {0};
+    char eventTime[20] = {0};
+    char eventType[128] = {0};
+    char eventState[20] = {0};
+    char pic[2][256]={0};
+    LPNET_EHOME_ALARM_ISAPI_INFO pISAPIAlarm = (NET_EHOME_ALARM_ISAPI_INFO *)(pXml);
+    NET_EHOME_ALARM_ISAPI_INFO struISAPIAlarm = {0};
+    memcpy(&struISAPIAlarm,pISAPIAlarm, sizeof(NET_EHOME_ALARM_ISAPI_INFO));
+    if(struISAPIAlarm.pAlarmData)
+    {
+         if(struISAPIAlarm.byDataType==2){
+        }else if(struISAPIAlarm.byDataType==1){
+            QByteArray data = QByteArray((const   char *)(struISAPIAlarm.pAlarmData));
+            int cur = data.indexOf("--boundary");
+            if(cur>0){
+                QXmlStreamReader reader;
+                reader.addData(data.mid(0,cur));
+                while(!reader.atEnd()){
+                    if(reader.isStartElement()){
+                        if(reader.name()=="eventType"){
+                            sprintf(eventType,"%s",reader.readElementText().toUtf8().data());
+                        }else if(reader.name()=="deviceID"){
+                            sprintf(deviceID,"%s",reader.readElementText().toUtf8().data());
+                        }else if(reader.name()=="dateTime"){
+                            sprintf(eventTime,"%s",reader.readElementText().replace("T"," ").mid(0,19).toUtf8().data());
+                        }else if(reader.name()=="eventState"){
+                            sprintf(eventState,"%s",reader.readElementText().toUtf8().data());
+                        }
+                    }
+                    reader.readNext();
+                }
+            }
+        }
+        if(struISAPIAlarm.byPicturesNumber>0){
+            time_t t = QDateTime::currentDateTime().toTime_t();
+            for(int i=0;i<struISAPIAlarm.byPicturesNumber;i++){
+                char fname[128];
+                sprintf(fname,"/usr/local/nginx/html/VideoAlarmPics/pic_%d_%s_%d.jpg",t,deviceID,i);
+                if(i<2)
+                    sprintf(pic[i],"http://47.103.74.123/VideoAlarmPics/pic_%d_%s_%d.jpg",t,deviceID,i);
+                FILE *f = fopen(fname,"w");
+                fwrite(((NET_EHOME_ALARM_ISAPI_PICDATA *)struISAPIAlarm.pPicPackData)[i].pPicData,1,((NET_EHOME_ALARM_ISAPI_PICDATA *)struISAPIAlarm.pPicPackData)[i].dwPicLen,f);
+                fclose(f);
+            }
+        }
+        obj->reportList.append(Alarm_Report(deviceID,eventTime,QString::fromUtf8("200001"),
+                                            QString::fromUtf8("insert into sp_video2017 (id,port,device_code,time,status,address,ncmd,data1,data2,data3,data4,data5,clsj,clr,clnr,clwb,cllxr,cldh,clzt,cllx,video) values (NULL,'%1','%2','%3','%4','','%5','%6','%7','%8','火点/高温检测告警','','1970-01-01 08:00:00','','','','','',0,'','')")
+                            .arg(2).arg(deviceID).arg(eventTime).arg(1)
+                            .arg(2).arg(eventState).arg(pic[0]).arg(pic[1])));
+    }
+}
+
+BOOL CALLBACK AlarmMSGCallBack(LONG lHandle, NET_EHOME_ALARM_MSG *pAlarmMsg, void *pUserData)
+{
+//    LONG lListenHandle = -1;
+//    lListenHandle = lHandle;
+    int i;
+    CoreObject *obj = (CoreObject *)pUserData;
+    DWORD dwType = pAlarmMsg->dwAlarmType;  //不同的报警类型(dwAlarmType),pAlarmInfo对应不同的报警信息类型
+
+    if(pAlarmMsg->pHttpUrl!=NULL)
+        dwType = EHOME_ISAPI_ALARM;
+//    printf("Callback of alarm listening, dwAlarmType[%d]\n", dwType);
+
+    switch(dwType)
+    {
+    case EHOME_ALARM_UNKNOWN://未知报警信息
+//        printf("Unknown Alarm Type!\n");
+        break;
+    case EHOME_ALARM://基本报警信息:移动侦测、视频遮盖、视频丢失、PIR报警、人脸侦测、区域入侵等
+    {
+        NET_EHOME_ALARM_INFO struAlarmInfo;
+        memcpy(&struAlarmInfo, pAlarmMsg->pAlarmInfo, sizeof(NET_EHOME_ALARM_INFO));
+        printf("Basic Alarm: Device ID[%s], szAlarmTime[%s], Alarm Type[%d], Action[%d], VideoChannel[%d]!\n", struAlarmInfo.szDeviceID, \
+            struAlarmInfo.szAlarmTime, struAlarmInfo.dwAlarmType, struAlarmInfo.dwAlarmAction, struAlarmInfo.dwVideoChannel);
+        if((struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)||(struAlarmInfo.dwAlarmType==ALARM_TYPE_LEFT)||(struAlarmInfo.dwAlarmType==ALARM_TYPE_TAKE))
+        {
+            QString devId = QString(struAlarmInfo.szDeviceID);
+            for(i=0;i>obj->alarmList.length();i++){
+                if(obj->alarmList.at(i).Device_Code.compare(devId)==0){
+                    if((struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)&&(struAlarmInfo.dwAlarmAction!=0))
+                        obj->alarmList.removeAt(i);
+                    else if(struAlarmInfo.dwAlarmType==ALARM_TYPE_TAKE)
+                        obj->alarmList.removeAt(i);
+                    return TRUE;
+                }
+            }
+            QString time1 = QString(struAlarmInfo.szAlarmTime);
+            QString time2 = time1.mid(0,10)+" "+time1.mid(11,8);
+//            QString sql = QString::fromUtf8("insert into sp_video2017 (id,port,device_code,time,status,address,ncmd,data1,data2,data3,data4,data5,clsj,clr,clnr,clwb,cllxr,cldh,clzt,cllx,video) values (NULL,'%1','%2','%3','%4','','%5','%6','','','占道检测告警','','1970-01-01 08:00:00','','','','','',0,'','')")
+//                .arg(1).arg(struAlarmInfo.szDeviceID).arg(time2).arg(struAlarmInfo.dwAlarmAction==0?1:0)
+//                .arg(struAlarmInfo.dwAlarmType).arg(struAlarmInfo.dwAlarmAction);
+//            obj->sqlList.append(sql);
+            if(struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)
+                obj->alarmList.append(AlarmEvent(devId,time2,(struAlarmInfo.dwAlarmAction==0?1:0)));
+            else
+                obj->alarmList.append(AlarmEvent(devId,time2,1));
+            for(i=0;i<DEVICES_COUNT;i++){
+                if(strcmp(ytShm->eHomeDevice[i].deviceID,(char*)(struAlarmInfo.szDeviceID))==0){
+                    ytShm->eHomeDevice[i].io[6]=0x01;
+                }
+            }
+        }
+    }
+        break;
+//    case EHOME_ALARM_HEATMAP_REPORT://热度图报告上传
+//        NET_EHOME_HEATMAP_REPORT struHeatmapInfo;
+//        memcpy(&struHeatmapInfo, pAlarmMsg->pAlarmInfo, sizeof(NET_EHOME_HEATMAP_REPORT));
+//        printf("Heatmap report: Device ID[%s], StartTime[%s], StopTime[%s], dwVideoChannel[%d]!\n", struHeatmapInfo.byDeviceID, \
+//            struHeatmapInfo.byStartTime, struHeatmapInfo.byStopTime, struHeatmapInfo.dwVideoChannel);
+//        break;
+//    case EHOME_ALARM_FACESNAP_REPORT://人脸抓拍报告上传
+//        NET_EHOME_FACESNAP_REPORT struFaceSnap;
+//        memcpy(&struFaceSnap, pAlarmMsg->pAlarmInfo, sizeof(NET_EHOME_FACESNAP_REPORT));
+//        printf("Face snap: Device ID[%s], AlarmTime[%s], dwFaceScore[%d], dwVideoChannel[%d]!\n", struFaceSnap.byDeviceID, \
+//            struFaceSnap.byAlarmTime, struFaceSnap.dwFaceScore, struFaceSnap.dwVideoChannel);
+//        break;
+//    case EHOME_ALARM_GPS://GPS信息上传
+//        NET_EHOME_GPS_INFO struGpsInfo;
+//        memcpy(&struGpsInfo, pAlarmMsg->pAlarmInfo, sizeof(NET_EHOME_GPS_INFO));
+//        printf("GPS info: Device ID[%s], SampleTime[%s], Longitude[%d], Latitude[%d]!\n", struGpsInfo.byDeviceID, \
+//            struGpsInfo.bySampleTime, struGpsInfo.dwLongitude, struGpsInfo.dwLatitude );
+//        break;
+//    case EHOME_ALARM_CID_REPORT://报警主机CID报警信息
+//        NET_EHOME_CID_INFO struCIDInfo;
+//        memcpy(&struCIDInfo, pAlarmMsg->pAlarmInfo, sizeof(NET_EHOME_CID_INFO));
+//        printf("CID info: Device ID[%s], AlarmTime[%s], CID Code[%d], CID Type[%d], CID Describe[%s]!\n", struCIDInfo.byDeviceID, \
+//        struCIDInfo.byTriggerTime, struCIDInfo.dwCIDCode, struCIDInfo.dwCIDType, struCIDInfo.byCIDDescribe );
+//        break;
+    case EHOME_ISAPI_ALARM:
+        ProcessHttpAlarmInfo(pAlarmMsg->pAlarmInfo,pAlarmMsg->dwAlarmInfoLen,pAlarmMsg->pHttpUrl,pAlarmMsg->dwHttpUrlLen,obj);
+        break;
+    default:
+        break;
+    }
+
+    return TRUE;
+}
+
+BOOL InputStreamData(QString deviceid, BYTE byDataType, char* pBuffer, int iDataLen)
+{
+    int i;
+    uint t = QDateTime::currentDateTime().toTime_t();
+    for(i=0;i<DEVICES_COUNT;i++){
+        if(QString(ytShm->eHomeDevice[i].deviceID).compare(deviceid)==0){
+            if(ytShm->eHomeDevice[i].io[0]==0x01){
+                ytShm->eHomeDevice[i].time[0] = t;
+                if(ytShm->eHomeDevice[i].savetmp==0x00){
+                    QString tmpfile = QString("/tmp/%1.mp4").arg(ytShm->eHomeDevice[i].deviceID).replace(" ","_");
+                    sprintf(ytShm->eHomeDevice[i].filename,"%s",tmpfile.toUtf8().data());
+                    setFullTime(&(ytShm->eHomeDevice[i].onLinetime),QDateTime::currentDateTime());
+                    ytShm->eHomeDevice[i].savetmp = 0x01;
+                    ytShm->eHomeDevice[i].tmpfile  = fopen(tmpfile.toUtf8().data(),"wb");
+                    fwrite(pBuffer,iDataLen,1,ytShm->eHomeDevice[i].tmpfile);
+                }else{
+                    if(ytShm->eHomeDevice[i].tmpfile!=NULL){
+                        fwrite(pBuffer,iDataLen,1,ytShm->eHomeDevice[i].tmpfile);
+                    }
+                }
+            }else{
+                NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId);
+            }
+            return true;
+        }
+    }
+    return false;
+}
+
+void setFullTime(FullTime *fTime, QDateTime qTime){
+    fTime->YEAR = qTime.date().year()&0xffff;
+    fTime->MONTH = qTime.date().month()&0xff;
+    fTime->DAY = qTime.date().day()&0xff;
+    fTime->HOUR = qTime.time().hour()&0xff;
+    fTime->MINUTE = qTime.time().minute()&0xff;
+    fTime->SECOND = qTime.time().second()&0xff;
+    fTime->TIMESTAMP = qTime.toTime_t();
+}
+
+QDateTime getFullTime(FullTime fTime){
+    if((fTime.YEAR==0)||(fTime.MONTH==0)||(fTime.DAY==0))
+        return QDateTime::fromTime_t(fTime.TIMESTAMP);
+    else
+        return QDateTime(QDate((int)fTime.YEAR,(int)fTime.MONTH,(int)fTime.DAY),QTime((int)fTime.HOUR,(int)fTime.MINUTE,(int)fTime.SECOND));
+}
+
+void CoreObject::start()
+{
+    //预览监听参数
+    NET_EHOME_LOCAL_GENERAL_CFG struGeneralCfg = {0};
+    struGeneralCfg.byAlarmPictureSeparate = 1;
+    if(!NET_EALARM_SetSDKLocalCfg(LOCAL_CFG_TYPE_GENERAL,&struGeneralCfg)){
+//        printf("NET_EALARM_SetSDKLocalCfg falied\n");
+        NET_ECMS_Fini();
+        return;
+    }
+//    printf("NET_EALARM_SetSDKLocalCfg pass!\n");
+    //报警监听参数
+    NET_EHOME_ALARM_LISTEN_PARAM struTcpAlarmListenParam = {0};
+    memcpy(struTcpAlarmListenParam.struAddress.szIP, iServerIP, sizeof(iServerIP));
+    struTcpAlarmListenParam.byProtocolType = 0;
+    struTcpAlarmListenParam.struAddress.wPort = 7668;
+    struTcpAlarmListenParam.fnMsgCb = AlarmMSGCallBack;
+    struTcpAlarmListenParam.pUserData = this;
+    struTcpAlarmListenParam.byUseCmsPort = 0;
+    struTcpAlarmListenParam.byUseThreadPool = 0;
+    if(NET_EALARM_StartListen(&struTcpAlarmListenParam)<-1){
+//        printf("NET_EALARM_StartListen TCP failed, error code: %d\n", NET_EALARM_GetLastError());
+        NET_ECMS_Fini();
+        NET_ESTREAM_Fini();
+        NET_EALARM_Fini();
+        exit(1);
+    }
+//    printf("NET_EALARM_StartListen TCP!\n");
+
+    //报警监听参数
+    NET_EHOME_ALARM_LISTEN_PARAM struListen = {0};
+    memcpy(struListen.struAddress.szIP, iServerIP, sizeof(iServerIP));
+    struListen.struAddress.wPort = 7669; //报警服务器监听端口
+    struListen.fnMsgCb = AlarmMSGCallBack; //报警回调函数
+    struListen.pUserData = this;
+    struListen.byUseCmsPort = 0;
+    struListen.byUseThreadPool = 0;
+    struListen.byProtocolType = 1; //0- TCP方式(保留,暂不支持),1- UDP方式
+
+    //启动报警监听
+    LONG lHandle = NET_EALARM_StartListen(&struListen);
+    if(lHandle< -1)
+    {
+//        printf("NET_EALARM_StartListen failed, error code: %d\n", NET_EALARM_GetLastError());
+        NET_ECMS_Fini();
+        NET_ESTREAM_Fini();
+        NET_EALARM_Fini();
+        exit(1);
+    }
+//    printf("NET_EALARM_StartListen!\n");
+    for(int i=0;i<DEVICES_COUNT;i++){
+        ytShm->eHomeDevice[i].previewport = 58000+i;
+        ytShm->eHomeDevice[i].listen_alarm_handle = lHandle;
+        NET_EHOME_LISTEN_PREVIEW_CFG struListen = {0};
+        memcpy(struListen.struIPAdress.szIP,iServerIP, sizeof(iServerIP));
+        struListen.struIPAdress.wPort = ytShm->eHomeDevice[i].previewport; //流媒体服务器监听端口
+        struListen.fnNewLinkCB = fnPREVIEW_NEWLINK_CB; //预览连接请求回调函数
+        struListen.pUser =&(ytShm->eHomeDevice[i]);
+        struListen.byLinkMode = 0; //0- TCP方式,1- UDP方式
+        lHandle = NET_ESTREAM_StartListenPreview(&struListen);
+        if(lHandle<-1){
+        }else{
+            ytShm->eHomeDevice[i].listen_preview_handle = lHandle;
+        }
+    }
+    NET_EHOME_CMS_LISTEN_PARAM struCMSListenPara = {0};
+    memcpy(struCMSListenPara.struAddress.szIP, "0.0.0.0", sizeof("0.0.0.0"));
+    struCMSListenPara.struAddress.wPort = 7660;
+    struCMSListenPara.fnCB = RegisterCallBack;
+    LONG lListen = NET_ECMS_StartListen(&struCMSListenPara);
+    if(lListen < -1)
+    {
+        NET_ECMS_Fini();
+        NET_ESTREAM_Fini();
+        NET_EALARM_Fini();
+        exit(1);
+    }
+    timer->start(3000);
+//    qDebug()<<"start core";
+}
+
+void CoreObject::process_stop()
+{
+    QProcess *p = (QProcess *)sender();
+    for(int i=0;i<DEVICES_COUNT;i++){
+        if(p==processList.at(i)){
+            if(ytShm->eHomeDevice[i].Connected==0x01){
+                ytShm->eHomeDevice[i].io[0]=0x00;
+            }
+            break;
+        }
+    }
+}
+
+void CoreObject::AlarmReport(QString addr, QString type, QString time, QString companyCode, quint64 insertid)
+{
+//    if(type.toInt()==200104)
+//        type="占道侦测报警";
+//    else if(type.toInt()==200001)
+//        type="火点侦测报警";
+//    QString rep2 = QString("{\"SubType\":16,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":0,\"CompanyCode\":\"%3\",\"evt_name\":\"%4\",\"evt\":0,\"alarm_time\":\"%5\"}")
+//            .arg(addr).arg(insertid).arg(companyCode).arg(type).arg(time);
+//    printf("%s\n",rep2.toUtf8().data());
+//    repcur++;
+//    repcur &= 0x07;
+//    wssThread[repcur]->appendData(rep2);
+}
+
+QString CoreObject::getCompanyCode(QString addr){
+    for(int i=0;i<DEVICES_COUNT;i++){
+        QString devid = QString(ytShm->eHomeDevice[i].deviceID);
+        if(QString::compare(addr,devid)==0){
+            return QString(ytShm->eHomeDevice[i].rtsppath);
+        }
+    }
+    return "";
+}
+
+void CoreObject::time_out()
+{
+    QDateTime t = QDateTime::currentDateTime();
+    ytShm->workingTime[0] = t.toTime_t();
+    if(!had_reg){
+        if((ytShm->workingTime[0]-start_time)>30)
+            exit(1);
+    }
+    if(isWorking)
+        return;
+    isWorking = true;
+    if(synchour!=t.time().hour())
+        chkPhoneList();
+    for(int i=0;i<DEVICES_COUNT;i++){
+        if(ytShm->eHomeDevice[i].Inited==0x01){
+            if(ytShm->eHomeDevice[i].Connected==0x00){
+                if(ytShm->eHomeDevice[i].io[8]==0x01)
+                    ytShm->eHomeDevice[i].io[0] = 0x01;
+                else if(ytShm->eHomeDevice[i].io[7]==0x01){
+                    if((ytShm->eHomeDevice[i].time[1]>0)&&((t.toTime_t()-ytShm->eHomeDevice[i].time[1])>300)){
+//                        printf("%s time over close\n",ytShm->eHomeDevice[i].deviceID);
+                        ytShm->eHomeDevice[i].io[0] = 0x00;
+                        ytShm->eHomeDevice[i].io[7] = 0x00;
+                        ytShm->eHomeDevice[i].time[1]=0;
+                    }else if(ytShm->eHomeDevice[i].io[0]==0x00){
+//                        printf("%s io7 on\n",ytShm->eHomeDevice[i].deviceID);
+//                        ytShm->eHomeDevice[i].io[7] = 0x00;
+                        ytShm->eHomeDevice[i].io[0] = 0x01;
+                    }else if(ytShm->eHomeDevice[i].io[0]==0x01){
+                        if(ytShm->eHomeDevice[i].io[15]>2){
+//                            printf("%s NET_ECMS_StopGetRealStream\n",ytShm->eHomeDevice[i].deviceID);
+                            if(NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId)){
+//                                ytShm->eHomeDevice[i].io[0] = 0x00;
+//                                ytShm->eHomeDevice[i].io[7] = 0x00;
+                            }
+                            ytShm->eHomeDevice[i].time[1]=0;
+                            ytShm->eHomeDevice[i].SessionId=-1;
+                        }
+                    }
+                }else if(ytShm->eHomeDevice[i].io[6]==0x01){
+//                    printf("%s io6 on\n",ytShm->eHomeDevice[i].deviceID);
+                    ytShm->eHomeDevice[i].io[0] = 0x01;
+                }
+                if(ytShm->eHomeDevice[i].io[0]==0x01){
+                    if(ytShm->eHomeDevice[i].SessionId>-1){
+                        NET_EHOME_PUSHSTREAM_IN struPushStreamIn = {0};
+                        struPushStreamIn.dwSize = sizeof(struPushStreamIn);
+                        struPushStreamIn.lSessionID = ytShm->eHomeDevice[i].SessionId; //SessionID,预览请求会话ID
+                        //预览请求推流输出参数
+                        NET_EHOME_PUSHSTREAM_OUT struPushStreamOut = {0};
+                        if(!NET_ECMS_StartPushRealStream(ytShm->eHomeDevice[i].LoginId, &struPushStreamIn, &struPushStreamOut)){
+//                            printf("%s NET_ECMS_StartGetRealStreamV11 failed.\n",ytShm->eHomeDevice[i].deviceID);
+                            ytShm->eHomeDevice[i].io[15]++;
+                        }else{
+//                            printf("%s start push real stream\n",ytShm->eHomeDevice[i].deviceID);
+                            ytShm->eHomeDevice[i].io[15]=0x00;
+                        }
+                    }
+                    else
+                    {
+                        ytShm->eHomeDevice[i].previewport = 58000+i;
+//                        printf("actice %s at %d(loginId:%d)\n",ytShm->eHomeDevice[i].deviceID,ytShm->eHomeDevice[i].previewport,ytShm->eHomeDevice[i].LoginId);
+                        NET_EHOME_PREVIEWINFO_IN_V11 struPreviewIn = {0};
+                        struPreviewIn.iChannel = 1; //通道号
+                        struPreviewIn.dwLinkMode = 0; //0- TCP方式,1- UDP方式
+                        struPreviewIn.dwStreamType = 1; //码流类型:0- 主码流,1- 子码流, 2- 第三码流
+                        memcpy(struPreviewIn.struStreamSever.szIP, oServerIP, sizeof(oServerIP));//流媒体服务器IP地址
+                        struPreviewIn.struStreamSever.wPort = ytShm->eHomeDevice[i].previewport;
+                        //预览请求输出参数
+                        NET_EHOME_PREVIEWINFO_OUT struPreviewOut = {0};
+                        if(!NET_ECMS_StartGetRealStreamV11(ytShm->eHomeDevice[i].LoginId, &struPreviewIn, &struPreviewOut)){
+//                            printf("%s NET_ECMS_StartGetRealStreamV11 failed.\n",ytShm->eHomeDevice[i].deviceID);
+                        }else{
+//                            printf("active %s lSessionID:%d\n",ytShm->eHomeDevice[i].deviceID,struPreviewOut.lSessionID);
+                            ytShm->eHomeDevice[i].SessionId = struPreviewOut.lSessionID;
+                            NET_EHOME_PUSHSTREAM_IN struPushStreamIn = {0};
+                            struPushStreamIn.dwSize = sizeof(struPushStreamIn);
+                            struPushStreamIn.lSessionID = struPreviewOut.lSessionID; //SessionID,预览请求会话ID
+                            //预览请求推流输出参数
+                            NET_EHOME_PUSHSTREAM_OUT struPushStreamOut = {0};
+                            if(!NET_ECMS_StartPushRealStream(ytShm->eHomeDevice[i].LoginId, &struPushStreamIn, &struPushStreamOut)){
+//                                printf("%s NET_ECMS_StartGetRealStreamV11 failed.\n",ytShm->eHomeDevice[i].deviceID);
+                                ytShm->eHomeDevice[i].io[15]++;
+                            }else{
+//                                printf("%s start push real stream\n",ytShm->eHomeDevice[i].deviceID);
+                                ytShm->eHomeDevice[i].io[15]=0x00;
+                            }
+                        }
+                    }
+                }
+            }else if((ytShm->eHomeDevice[i].time[1]>0)&&((t.toTime_t()-ytShm->eHomeDevice[i].time[1])>300)){
+                if((ytShm->eHomeDevice[i].io[7]==0x01)||(ytShm->eHomeDevice[i].io[8]==0x01)){
+                    if(NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId)){
+                        ytShm->eHomeDevice[i].io[0] = 0x00;
+                        ytShm->eHomeDevice[i].io[7] = 0x00;
+                        ytShm->eHomeDevice[i].time[1]=0;
+                        ytShm->eHomeDevice[i].SessionId =-1;
+                    }
+                }
+            }else if((ytShm->eHomeDevice[i].Connected==0x01)&&(ytShm->eHomeDevice[i].io[0]==0x00)){
+                if(NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId)){
+                    ytShm->eHomeDevice[i].Connected=0x00;
+                    ytShm->eHomeDevice[i].SessionId=-1;
+                    ytShm->eHomeDevice[i].time[0]=0;
+                    ytShm->eHomeDevice[i].time[1]=0;
+                    if(processList.at(i)->pid()>0){
+                        processList.at(i)->close();
+                    }
+//                    qDebug()<<QString("%1 will  close.(%2)").arg(ytShm->eHomeDevice[i].deviceID).arg(i).toUtf8().data();
+                    QString tmpfile = QString(ytShm->eHomeDevice[i].filename).replace(" ","_");
+                    if(ytShm->eHomeDevice[i].tmpfile!=NULL)
+                        fclose(ytShm->eHomeDevice[i].tmpfile);
+                    ytShm->eHomeDevice[i].savetmp = 0x00;
+                    ytShm->eHomeDevice[i].tmpfile = NULL;
+                    QFile(tmpfile).remove();
+                    if(ytShm->eHomeDevice[i].io[8]==0x01){
+                        tmpfile = QString("/tmp/%1.mp4").arg(ytShm->eHomeDevice[i].deviceID);
+                        sprintf(ytShm->eHomeDevice[i].filename,"%s",tmpfile.toUtf8().data());
+                        ytShm->eHomeDevice[i].tmpfile  = fopen(tmpfile.toUtf8().data(),"wb");
+                        setFullTime(&(ytShm->eHomeDevice[i].onLinetime),t);
+                        sprintf(ytShm->eHomeDevice[i].filename,"");
+                    }
+                    ytShm->eHomeDevice[i].transed = 0x00;
+                }
+            }else if((ytShm->eHomeDevice[i].savetmp==0x01)&&(ytShm->eHomeDevice[i].transed==0x00)&&(ytShm->eHomeDevice[i].onLinetime.TIMESTAMP>0)&&((t.toTime_t()-ytShm->eHomeDevice[i].onLinetime.TIMESTAMP)>3)){
+                if(ytShm->eHomeDevice[i].io[6]==0x01){
+                    ytShm->eHomeDevice[i].io[6]=0x00;
+                    ytShm->eHomeDevice[i].io[0]=0x00;
+                    for(int j=0;j<alarmList.length();j++){
+                        if(alarmList.at(j).Device_Code.compare(QString(ytShm->eHomeDevice[i].deviceID))==0){
+                            QString tmpfile = QString(ytShm->eHomeDevice[i].filename).replace(" ","_");
+                            QString pic1name = QString("http://47.103.74.123/VideoAlarmPics/pic_%1_%2_0.jpg").arg(QDateTime::fromString(alarmList.at(j).Event_Time,"yyyy-MM-dd HH:mm:ss").toTime_t()).arg(QString(alarmList.at(j).Device_Code).replace(" ","_"));
+                            QString picname = QString("/usr/local/nginx/html/VideoAlarmPics/pic_%1_%2_0.jpg").arg(QDateTime::fromString(alarmList.at(j).Event_Time,"yyyy-MM-dd HH:mm:ss").toTime_t()).arg(QString(alarmList.at(j).Device_Code).replace(" ","_"));
+                            QString cmd1 = QString("ffmpeg -ss 00:00:00 -i \"%1\" -f image2 -y \"%2\"").arg(tmpfile).arg(picname);
+                            if(ytShm->eHomeDevice[i].io[8]==0x02){
+                                reportList.append(Alarm_Report(alarmList.at(j).Device_Code,alarmList.at(j).Event_Time,QString::fromUtf8("200104"),
+                                                                    QString::fromUtf8("insert into sp_video2017 (id,port,device_code,time,status,address,ncmd,data1,data2,data3,data4,data5,clsj,clr,clnr,clwb,cllxr,cldh,clzt,cllx,video) values (NULL,'%1','%2','%3','%4','','%5','%6','%7','%8','消防占道告警','','1970-01-01 08:00:00','','','','','',0,'','')")
+                                                    .arg(2).arg(alarmList.at(j).Device_Code).arg(alarmList.at(j).Event_Time).arg(1)
+                                                    .arg(104).arg(alarmList.at(j).Event_Status).arg(pic1name).arg("")));
+                            }else if(ytShm->eHomeDevice[i].io[8]==0x04){
+                                reportList.append(Alarm_Report(alarmList.at(j).Device_Code,alarmList.at(j).Event_Time,QString::fromUtf8("200105"),
+                                                                    QString::fromUtf8("insert into sp_video2017 (id,port,device_code,time,status,address,ncmd,data1,data2,data3,data4,data5,clsj,clr,clnr,clwb,cllxr,cldh,clzt,cllx,video) values (NULL,'%1','%2','%3','%4','','%5','%6','%7','%8','电动车禁入/区域入侵告警','','1970-01-01 08:00:00','','','','','',0,'','')")
+                                                    .arg(2).arg(alarmList.at(j).Device_Code).arg(alarmList.at(j).Event_Time).arg(1)
+                                                    .arg(104).arg(alarmList.at(j).Event_Status).arg(pic1name).arg("")));
+                            }
+
+                            if(processList.at(i)->pid()>0)
+                                processList.at(i)->close();
+                            processList.at(i)->start(cmd1);
+                            alarmList.removeAt(j);
+                            break;
+                        }
+                    }
+                }else{
+                    setFullTime(&(ytShm->eHomeDevice[i].transtime),t);
+                    QString tmpfile = QString(ytShm->eHomeDevice[i].filename).replace(" ","_");
+                    ytShm->eHomeDevice[i].transed = 0x01;
+                    sprintf(ytShm->eHomeDevice[i].filename,"%s",tmpfile.toUtf8().data());
+                    system(QString("rm -f /usr/local/nginx/html/hls/%1*").arg(ytShm->eHomeDevice[i].deviceID).toUtf8().data());
+                    QString  cmd1 = QString("ffmpeg -re -i \"%1\" -c:v libx264 -an -strict -2 -s 352x278 -g 15 -f flv -v quiet \"rtmp://%2/hls/%3\"   -c:v libx264 -an -strict -2 -s  352x278 -g 15 -f flv -v quiet \"rtmp://%4/live/%5\" ").arg(tmpfile).arg(iServerIP).arg(ytShm->eHomeDevice[i].deviceID).arg(iServerIP).arg(ytShm->eHomeDevice[i].deviceID);
+                    if(processList.at(i)->pid()>0)
+                        processList.at(i)->close();
+                    processList.at(i)->start(cmd1);
+                    ytShm->eHomeDevice[i].time[1] = t.toTime_t();
+//                    qDebug()<<QString("%1 will on line.(%2)").arg(ytShm->eHomeDevice[i].deviceID).arg(i).toUtf8().data();
+                }
+            }else if((ytShm->eHomeDevice[i].transed==0x01)&&(ytShm->eHomeDevice[i].time[1]>0)&&((t.toTime_t()-ytShm->eHomeDevice[i].time[1])>600)){
+                if(NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId)){
+                    ytShm->eHomeDevice[i].Connected=0x00;
+                    ytShm->eHomeDevice[i].SessionId=-1;
+                    ytShm->eHomeDevice[i].time[0]=0;
+                    ytShm->eHomeDevice[i].time[1]=0;
+//                    qDebug()<<QString("%1 will  close.(%2)").arg(ytShm->eHomeDevice[i].deviceID).arg(i).toUtf8().data();
+                    processList.at(i)->close();
+                    QString tmpfile = QString(ytShm->eHomeDevice[i].filename);
+                    if(ytShm->eHomeDevice[i].tmpfile!=NULL)
+                        fclose(ytShm->eHomeDevice[i].tmpfile);
+                    ytShm->eHomeDevice[i].savetmp = 0x00;
+                    ytShm->eHomeDevice[i].tmpfile = NULL;
+                    QFile(tmpfile).remove();
+                    ytShm->eHomeDevice[i].transed = 0x00;
+                }
+            }
+        }
+    }
+    if(reportList.length()>0){
+        if(db.open()){
+            while (reportList.length()>0) {
+                QString phonelist = "";
+                Alarm_Report rep = reportList.first();
+                QSqlQuery qry = db.exec(rep.Sql);
+                quint64 insertId = qry.lastInsertId().toULongLong();
+                QString type="";
+                QString companyCode = getCompanyCode(rep.Device_Code);
+                if(rep.Event_Name.toInt()==200104)
+                    type=QString::fromUtf8("占道侦测报警");
+                else if(rep.Event_Name.toInt()==200001)
+                    type=QString::fromUtf8("火点侦测报警");
+                else if(rep.Event_Name.toInt()==200105)
+                    type=QString::fromUtf8("电动车禁入/区域入侵告警");
+                printf("device code:%s\nget company code:%s\n",rep.Device_Code.toUtf8().data(),companyCode.toUtf8().data());
+                if(companyCode.length()>0){
+//                    QString rep1 = QString("{\"SubType\":16,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":false}").arg(rep.Device_Code).arg(insertId);
+//                    spThread[repcur]->appendData(rep1);
+                    QString rep2 = QString("{\"SubType\":16,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":0,\"CompanyCode\":\"%3\",\"evt_name\":\"%4\",\"evt\":0,\"alarm_time\":\"%5\"}")
+                                    .arg(rep.Device_Code).arg(insertId).arg(companyCode).arg(type).arg(rep.Event_Time);
+                    printf("%s\n",rep2.toUtf8().data());
+                    wssThread[repcur]->appendData(rep2);
+                    for(int i=0;i<companyphoneList.length();i++){
+                        if(QString::compare(companyphoneList.at(i).CompanyCode,companyCode)==0){
+                            if(phonelist.length()==0)
+                                phonelist = companyphoneList.at(i).Phone;
+                            else
+                                phonelist.append(","+companyphoneList.at(i).Phone);
+                        }
+                    }
+                    repcur++;
+                    repcur &= 0x07;
+                    if(phonelist.length()>0){
+                        QString data = QString("evt_name=%1&device_code=%2&phone=%3&insert_id=%4&time=%5&bz=%1").arg(type).arg(rep.Device_Code).arg(phonelist).arg(insertId).arg(rep.Event_Time)
+                                .replace(",","%2C").replace(":","%3A").replace(" ","+");
+                        printf("%s\n",data.toUtf8().data());
+                        wxThreads[wxcur]->appendData(data);
+                        wxcur++;
+                        wxcur &= 0x07;
+                    }
+
+                }
+                reportList.removeFirst();
+            }
+            db.close();
+        }
+    }
+    if(sqlList.length()>0){
+        if(db.open()){
+            while(sqlList.length()>0){
+                db.exec(sqlList.first());
+//                system(QString("echo \"%1\" > /tmp/pic_sql.log").arg(sqlList.first()).toUtf8().data());
+//                printf("%s\n",sqlList.first().toUtf8().data());
+                sqlList.removeFirst();
+            }
+            db.close();
+        }
+    }
+    isWorking = false;
+}

+ 103 - 0
CamCore/coreobject.h

@@ -0,0 +1,103 @@
+#ifndef COREOBJECT_H
+#define COREOBJECT_H
+
+#include <QObject>
+#include <QTimer>
+#include <QList>
+#include <QDateTime>
+#include "HCEHomeCMS.h"
+#include "HCEHomeAlarm.h"
+#include "HCEHomeStream.h"
+#include <QUuid>
+#include <QRegExp>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <QFile>
+#include <QProcess>
+#include "../include/YT_EHOME_shm.h"
+#include <QXmlStreamReader>
+#include <QStringList>
+#include <QSqlDatabase>
+#include <QSqlQuery>
+#include <QVariant>
+#include <QDebug>
+#include "ttsthreads.h"
+#include "wechartthreads.h"
+
+class AlarmEvent {
+public:
+    explicit AlarmEvent(QString id, QString etime, int sta){
+        Device_Code = id;
+        Event_Time = etime;
+        Event_Status = sta;
+    }
+
+    QString Device_Code;
+    QString Event_Time;
+    int Event_Status;
+};
+
+class Alarm_Report {
+public:
+    explicit Alarm_Report(QString addr, QString time, QString type, QString sql){
+        Device_Code = addr;
+        Event_Time = time;
+        Event_Name = type;
+        Sql = sql;
+    }
+    QString Device_Code;
+    QString Event_Time;
+    QString Event_Name;
+    QString Sql;
+};
+
+class Company_Phone {
+public:
+    explicit Company_Phone(QString companycode, QString phone){
+        CompanyCode=companycode;
+        Phone=phone;
+    }
+    QString CompanyCode;
+    QString Phone;
+};
+
+class CoreObject : public QObject
+{
+    Q_OBJECT
+public:
+    explicit CoreObject(QObject *parent = 0);
+    ~CoreObject();
+    void start();
+    bool shm_load();
+    void shm_init();
+    void AlarmReport(QString addr, QString type, QString time, QString companyCode, quint64 insertid);
+    void chkPhoneList();
+    QString getCompanyCode(QString addr);
+
+    QStringList sqlList;
+    QList<AlarmEvent> alarmList;
+    QList<Alarm_Report> reportList;
+    QList<Company_Phone> companyphoneList;
+
+signals:
+    
+public slots:
+    void time_out();
+    void process_stop();
+    void chartlog(quint16 idx, QDateTime t, QString data, bool dirflag);
+private:
+    QTimer *timer;
+    bool isWorking;
+    QList<QProcess *> processList;
+    QSqlDatabase db;
+    ttsThreads *wssThread[8];
+//    ttsThreads *spThread[8];
+    WechartThreads *wxThreads[8];
+    int repcur,wxcur;
+    int synchour;
+};
+
+#endif // COREOBJECT_H

BIN
CamCore/coreobject.o