coreobject.cpp 63 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223
  1. #include "coreobject.h"
  2. #include <unistd.h>
  3. //公司这边生产环境的内网和外网ip
  4. //#define iServerIP "172.19.198.166"
  5. //#define oServerIP "47.103.74.123"
  6. //伍继158对应的内网和外网ip
  7. //#define iServerIP "192.168.0.31"
  8. //#define oServerIP "124.70.160.158"
  9. //伍继91对应的内网和外网ip
  10. #define iServerIP "192.168.0.149"
  11. #define oServerIP "124.71.175.91"
  12. #define UN_REFERENCED_PARAMETER(x) {(x) = (x);}
  13. extern BOOL CALLBACK RegisterCallBack(LONG lUserID, DWORD dwDataType, void *pOutBuffer, DWORD dwOutLen, void *pInBuffer, DWORD dwInLen, void *pUser);
  14. extern BOOL CALLBACK fnPREVIEW_NEWLINK_CB(LONG lPreviewHandle, NET_EHOME_NEWLINK_CB_MSG *pNewLinkCBMsg, void *pUserData);
  15. extern void CALLBACK fnPREVIEW_DATA_CB(LONG lPreviewHandle, NET_EHOME_PREVIEW_CB_MSG *pPreviewCBMsg, void *pUserData);
  16. extern BOOL InputStreamData(QString deviceid, BYTE byDataType, char* pBuffer, int iDataLen);
  17. extern BOOL CALLBACK AlarmMSGCallBack (LONG lHaldle, NET_EHOME_ALARM_MSG *pAlarmMsg, void *pUserData);
  18. extern QDateTime getFullTime(FullTime fTime);
  19. extern void setFullTime(FullTime *fTime, QDateTime qTime);
  20. extern QString getNewId();
  21. uint start_time;
  22. bool had_reg;
  23. int nopic_count;
  24. MyEHomeShm *ytShm;
  25. MyEHomeMQShm *ytMqShm;
  26. CoreObject::CoreObject(QObject *parent) :
  27. QObject(parent)
  28. {
  29. infomqttIdx=1;
  30. alarmmqttIdx=1;
  31. nopic_count = 0;
  32. processList.clear();
  33. sqlList.clear();
  34. reportList.clear();
  35. companyphoneList.clear();
  36. isWorking = false;
  37. alarmListenHandle = -1;
  38. start_time = QDateTime::currentDateTime().toTime_t();
  39. had_reg = false;
  40. hour = 255;
  41. netAccessManager = new QNetworkAccessManager(this);
  42. connect(netAccessManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishedSlot(QNetworkReply*)));
  43. timer = new QTimer();
  44. //公司187生产环境对应的数据库配置
  45. // db = QSqlDatabase::addDatabase("QMYSQL","conf_db");
  46. // db.setDatabaseName("jdxf");
  47. // db.setHostName("47.98.201.187");
  48. // db.setUserName("root");
  49. // db.setPassword("Yt2018IoT");
  50. //伍继158环境对应的数据库配置
  51. // db = QSqlDatabase::addDatabase("QMYSQL","conf_db");
  52. // db.setDatabaseName("smart_electricity");
  53. // db.setHostName("124.70.160.158");
  54. // db.setUserName("root");
  55. // db.setPassword("Y48hD&Eg");
  56. //伍继91环境对应的数据库配置
  57. db = QSqlDatabase::addDatabase("QMYSQL","conf_db");
  58. db.setDatabaseName("smart_electricity");
  59. db.setHostName("192.168.0.206");
  60. db.setUserName("electric");
  61. db.setPassword("Y48hD&Eg");
  62. QString ip="",port="",name="",passwd="";
  63. db.open();
  64. QSqlQuery mqttqry = db.exec("select ip, port, username, passwd from yt_dataprocessservice_mqtt where type = 'YtCam';");
  65. while(mqttqry.next()){
  66. ip = mqttqry.value(0).toString();
  67. port = mqttqry.value(1).toString();
  68. name = mqttqry.value(2).toString();
  69. passwd = mqttqry.value(3).toString();
  70. }
  71. printf("ip= %s ,port= %s,username= %s,passwd= %s \n",ip.toUtf8().data(),port.toUtf8().data(),name.toUtf8().data(),passwd.toUtf8().data());
  72. db.close();
  73. m_client = new QMQTT::Client(QHostAddress(ip),static_cast<quint16>(port.toInt()),this);
  74. m_client->setUsername(name);
  75. m_client->setPassword(passwd.toLatin1());
  76. connect(m_client,&QMQTT::Client::connected,this,&CoreObject::mqconnected);
  77. m_client->connectToHost();
  78. NET_ESTREAM_Init();
  79. NET_EALARM_Init();
  80. NET_ECMS_Init();
  81. if(shm_load()){
  82. QDateTime zeroTime = QDateTime::fromTime_t(0);
  83. for(int i=0;i<DEVICES_COUNT;i++){
  84. alarmTime[i]=0;
  85. ytShm->eHomeDevice[i].LoginId = -1;
  86. ytShm->eHomeDevice[i].SessionId = -1;
  87. ytShm->eHomeDevice[i].listen_preview_handle = -1;
  88. ytShm->eHomeDevice[i].listen_alarm_handle = -1;
  89. ytShm->eHomeDevice[i].lLinkHandle = -1;
  90. ytShm->eHomeDevice[i].previewId = -1;
  91. ytShm->eHomeDevice[i].Connected = 0x00;
  92. ytShm->eHomeDevice[i].Inited = 0x00;
  93. ytShm->eHomeDevice[i].onLined = 0x00;
  94. ytShm->eHomeDevice[i].savetmp = 0x00;
  95. ytShm->eHomeDevice[i].transed = 0x00;
  96. for(int j=0;j<7;j++)
  97. ytShm->eHomeDevice[i].io[j] = 0x00;
  98. ytShm->eHomeDevice[i].time[0]=0;
  99. ytShm->eHomeDevice[i].time[1]=0;
  100. ytShm->eHomeDevice[i].tmpfile = NULL;
  101. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
  102. setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
  103. QProcess *process = new QProcess(this);
  104. connect(process,SIGNAL(finished(int)),this,SLOT(process_stop()));
  105. connect(process,SIGNAL(destroyed()),this,SLOT(process_stop()));
  106. connect(process,SIGNAL(aboutToClose()),this,SLOT(process_stop()));
  107. processList.append(process);
  108. }
  109. printf("processList.length = %d\n",processList.length());
  110. for(quint16 i=0;i<8;i++){
  111. wxThreads[i] = new WechartThreads(this,i,"47.98.201.73","/jdxf/wxapp2.php/Home/GeneralPush/voice");
  112. wssThread[i] = new ttsThreads(this,i,"47.98.201.73","/report",55125);
  113. spThread[i] = new ttsThreads(this,i,"47.98.201.187","/report",55335);
  114. // connect(wxThreads[i],&WechartThreads::wxchart,this,&CoreObject::chartlog);
  115. // connect(wssThread[i],&ttsThreads::ttslog,this,&CoreObject::chartlog);
  116. // connect(spThread[i],&ttsThreads::ttslog,this,&CoreObject::chartlog);
  117. wxThreads[i]->start();
  118. wssThread[i]->start();
  119. spThread[i]->start();
  120. }
  121. repcur = 0;
  122. wxcur = 0;
  123. }
  124. logThread = new LogThread(this);
  125. logThread->start();
  126. chkPhoneList();
  127. connect(timer,SIGNAL(timeout()),this,SLOT(time_out()));
  128. time_out();
  129. }
  130. CoreObject::~CoreObject()
  131. {
  132. for(int i=0;i<processList.length();i++){
  133. if(processList.at(i)->pid()>0)
  134. processList.at(i)->close();
  135. if(ytShm->eHomeDevice[i].listen_preview_handle>=-1){
  136. NET_ESTREAM_StopListenPreview(ytShm->eHomeDevice[i].listen_preview_handle);
  137. }
  138. }
  139. if(alarmListenHandle>-1)
  140. NET_EALARM_StopListen(alarmListenHandle);
  141. NET_ECMS_Fini();
  142. NET_ESTREAM_Fini();
  143. NET_EALARM_Fini();
  144. netAccessManager->deleteLater();
  145. }
  146. void CoreObject::mqconnected()
  147. {
  148. printf("mqtt connected\n");
  149. }
  150. void CoreObject::chkPhoneList()
  151. {
  152. if(db.open()){
  153. QList<Company_Phone> tmpList;
  154. QSqlQuery qry = db.exec("select owner_code, phone from sp_owner_phone where phone<>''");
  155. while (qry.next()) {
  156. tmpList.append(Company_Phone(qry.value(0).toString(),qry.value(1).toString()));
  157. }
  158. db.close();
  159. companyphoneList.clear();
  160. if(tmpList.length()>0)
  161. companyphoneList.append(tmpList);
  162. synchour = QTime::currentTime().hour();
  163. }
  164. }
  165. void CoreObject::chartlog(quint16 idx, QDateTime t, QString data, bool dirflag){
  166. if((idx<DEVICES_COUNT)&&(QString(ytShm->eHomeDevice[idx].deviceID).length()>0))
  167. {
  168. QString log;
  169. if(dirflag)
  170. log = QString("[ %1 (%2) >>> ] %3").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(ytShm->eHomeDevice[idx].deviceID).arg(data);
  171. else
  172. log = QString("[ %1 (%2) >>> ] %3").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(ytShm->eHomeDevice[idx].deviceID).arg(data);
  173. logThread->appendData(log);
  174. }
  175. }
  176. bool CoreObject::shm_load()
  177. {
  178. int shmid;
  179. key_t key;
  180. if((key = ftok(SHM_PATH,(int)SHM_PORT))==-1)
  181. return false;
  182. if((shmid = shmget(key,sizeof(MyEHomeShm),IPC_CREAT|0666))==-1)
  183. return false;
  184. ytShm = (MyEHomeShm *)shmat(shmid,NULL,0);
  185. if((key = ftok(SHM_PATH,(int)(SHM_PORT+10)))==-1)
  186. return false;
  187. if((shmid = shmget(key,sizeof(MyEHomeMQShm),IPC_CREAT|0666))==-1)
  188. return false;
  189. ytMqShm = (MyEHomeMQShm *)shmat(shmid,NULL,0);
  190. return true;
  191. }
  192. QString getNewId()
  193. {
  194. return QUuid::createUuid().toString().replace("{","").replace("}","");
  195. }
  196. BOOL RegisterCallBack(LONG lUserID, DWORD dwDataType, void *pOutBuffer, DWORD dwOutLen, void *pInBuffer, DWORD dwInLen, void *pUser)
  197. {
  198. printf("enter into RegisterCallBack\n");
  199. int i,idx=0;
  200. bool found = false;
  201. had_reg = true;
  202. CoreObject *obj = (CoreObject *)pUser;
  203. QDateTime zeroTime = QDateTime::fromTime_t(0);
  204. QDateTime t_now = QDateTime::currentDateTime();
  205. ytShm->workingTime[0] = t_now.toTime_t();
  206. if (ENUM_DEV_ON == dwDataType)
  207. {
  208. NET_EHOME_DEV_REG_INFO *pDevInfo = (NET_EHOME_DEV_REG_INFO *)pOutBuffer;
  209. printf("pDevInfo = : %s\n",(char*)(pDevInfo->byDeviceID));
  210. // qDebug()<<"RegisterCallBack: "<<(char*)(pDevInfo->byDeviceID);
  211. if(pDevInfo!=NULL)
  212. {
  213. for(i=0;i<DEVICES_COUNT;i++){
  214. if(strcmp(ytShm->eHomeDevice[i].deviceID,QString((char*)(pDevInfo->byDeviceID)).replace(" ","_").toUtf8().data())==0){
  215. found = true;
  216. memcpy(ytShm->eHomeDevice[i].devIp,(char *)(pDevInfo->struDevAdd.szIP),sizeof(ytShm->eHomeDevice[i].devIp));
  217. obj->appendLog(QString("[ %1 (%2) online ]").arg(t_now.toString("yyyy-MM-dd HH:mm:ss")).arg(ytShm->eHomeDevice[i].deviceID));
  218. ytShm->eHomeDevice[i].LoginId = lUserID;
  219. ytShm->eHomeDevice[i].Connected = 0x00;
  220. ytShm->eHomeDevice[i].Inited = 0x01;
  221. ytShm->eHomeDevice[i].onLined = 0x00;
  222. ytShm->eHomeDevice[i].savetmp = 0x00;
  223. // if(ytShm->eHomeDevice[i].tmpfile!=NULL)
  224. // fclose(ytShm->eHomeDevice[i].tmpfile);
  225. ytShm->eHomeDevice[i].tmpfile = NULL;
  226. ytShm->eHomeDevice[i].transed = 0x00;
  227. ytShm->eHomeDevice[i].io[15]=0x00;
  228. ytShm->eHomeDevice[i].io[14]=0x03;
  229. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
  230. setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
  231. idx=i;
  232. break;
  233. }
  234. }
  235. if(!found){
  236. return FALSE;
  237. }
  238. //输入参数
  239. NET_EHOME_SERVER_INFO *pServerInfo = (NET_EHOME_SERVER_INFO *)pInBuffer;
  240. pServerInfo->dwTimeOutCount = 6; //心跳超时次数
  241. pServerInfo->dwKeepAliveSec = 15; //心跳间隔
  242. memcpy(pServerInfo->struUDPAlarmSever.szIP, oServerIP, sizeof(oServerIP));
  243. memcpy(pServerInfo->struTCPAlarmSever.szIP, oServerIP, sizeof(oServerIP)); //报警服务器IP地址(TCP协议)
  244. pServerInfo->struUDPAlarmSever.wPort = 7669; //报警服务器端口(UDP协议),需要和报警服务器启动监听的端口一致
  245. pServerInfo->struTCPAlarmSever.wPort = 7668;
  246. pServerInfo->dwAlarmServerType = 1; //报警服务器类型:0- 只支持UDP协议上报,1- 支持UDP、TCP两种协议上报
  247. }
  248. }else if (ENUM_DEV_OFF == dwDataType){
  249. for(int i=0;i<DEVICES_COUNT;i++){
  250. if(ytShm->eHomeDevice[i].LoginId==lUserID){
  251. ytShm->eHomeDevice[i].io[15]=0x00;
  252. ytShm->eHomeDevice[i].io[14]=0x02;
  253. ytShm->eHomeDevice[i].LoginId = -1;
  254. obj->appendLog(QString("[ %1 (%2) offline ]").arg(t_now.toString("yyyy-MM-dd HH:mm:ss")).arg(ytShm->eHomeDevice[i].deviceID));
  255. if(ytShm->eHomeDevice[i].SessionId>=0){
  256. if(NET_ECMS_StopGetRealStream(lUserID,ytShm->eHomeDevice[i].SessionId)){
  257. ytShm->eHomeDevice[i].SessionId = -1;
  258. if(ytShm->eHomeDevice[i].previewId>=0){
  259. if(NET_ESTREAM_StopPreview(ytShm->eHomeDevice[i].previewId)){
  260. ytShm->eHomeDevice[i].previewId = -1;
  261. QString tmpfile = QString(ytShm->eHomeDevice[i].filename);
  262. QFile(tmpfile).remove();
  263. ytShm->eHomeDevice[i].Connected = 0x00;
  264. // bzero(ytShm->eHomeDevice[i].deviceID,sizeof(ytShm->eHomeDevice[i].deviceID));
  265. ytShm->eHomeDevice[i].Inited = 0x00;
  266. ytShm->eHomeDevice[i].onLined = 0x00;
  267. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
  268. setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
  269. ytShm->eHomeDevice[i].savetmp = 0x00;
  270. // if(ytShm->eHomeDevice[i].tmpfile!=NULL)
  271. // fclose(ytShm->eHomeDevice[i].tmpfile);
  272. ytShm->eHomeDevice[i].tmpfile = NULL;
  273. ytShm->eHomeDevice[i].transed = 0x00;
  274. if(ytShm->eHomeDevice[i].lLinkHandle>0){
  275. if(NET_ESTREAM_StopListenPreview(ytShm->eHomeDevice[i].lLinkHandle)){
  276. ytShm->eHomeDevice[i].lLinkHandle = -1;
  277. }
  278. }
  279. }
  280. }
  281. }
  282. }else{
  283. QString tmpfile = QString(ytShm->eHomeDevice[i].filename);
  284. QFile(tmpfile).remove();
  285. ytShm->eHomeDevice[i].io[15]=0x00;
  286. ytShm->eHomeDevice[i].Connected = 0x00;
  287. // bzero(ytShm->eHomeDevice[i].deviceID,sizeof(ytShm->eHomeDevice[i].deviceID));
  288. ytShm->eHomeDevice[i].Inited = 0x00;
  289. ytShm->eHomeDevice[i].onLined = 0x00;
  290. ytShm->eHomeDevice[i].LoginId = -1;
  291. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
  292. setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
  293. ytShm->eHomeDevice[i].lLinkHandle = -1;
  294. ytShm->eHomeDevice[i].savetmp = 0x00;
  295. // if(ytShm->eHomeDevice[i].transed==0x01)
  296. // fclose(ytShm->eHomeDevice[i].tmpfile);
  297. ytShm->eHomeDevice[i].tmpfile = NULL;
  298. ytShm->eHomeDevice[i].transed = 0x00;
  299. }
  300. break;
  301. }
  302. }
  303. NET_ECMS_ForceLogout(lUserID);
  304. }
  305. return TRUE;
  306. }
  307. BOOL CALLBACK fnPREVIEW_NEWLINK_CB(LONG lPreviewHandle, NET_EHOME_NEWLINK_CB_MSG *pNewLinkCBMsg, void *pUserData)
  308. {
  309. ytShm->workingTime[0] = QDateTime::currentDateTime().toTime_t();
  310. for(int i=0;i<DEVICES_COUNT;i++){
  311. if((ytShm->eHomeDevice[i].LoginId>-1)&&(ytShm->eHomeDevice[i].listen_preview_handle>-1)){
  312. if(strcmp(ytShm->eHomeDevice[i].deviceID,QString((char *)pNewLinkCBMsg->szDeviceID).replace(" ","_").toUtf8().data())==0){
  313. // if(ytShm->eHomeDevice[i].SessionId == pNewLinkCBMsg->iSessionID){
  314. // printf("fnPREVIEW_NEWLINK_CB:%s\n",ytShm->eHomeDevice[i].deviceID);
  315. ytShm->eHomeDevice[i].lLinkHandle = lPreviewHandle;
  316. NET_EHOME_PREVIEW_DATA_CB_PARAM struDataCB = {0};
  317. struDataCB.pUserData = &(ytShm->eHomeDevice[i]);
  318. struDataCB.fnPreviewDataCB = fnPREVIEW_DATA_CB;
  319. struDataCB.byStreamFormat = 0;//封装格式:0- PS
  320. if (!NET_ESTREAM_SetPreviewDataCB(lPreviewHandle, &struDataCB))
  321. {
  322. ytShm->eHomeDevice[i].SessionId = -1;
  323. ytShm->eHomeDevice[i].Connected = 0x00;;
  324. printf("NET_ESTREAM_SetPreviewDataCB set failed(%s)\n",ytShm->eHomeDevice[i].deviceID);
  325. return false;
  326. }
  327. printf("NET_ESTREAM_SetPreviewDataCB set pass(%s)\n",ytShm->eHomeDevice[i].deviceID);
  328. return true;
  329. }
  330. }
  331. }
  332. return false;
  333. }
  334. bool CoreObject::checkAlarmDevTime(QString deviceid){
  335. // return true;
  336. uint t = QDateTime::currentDateTime().toTime_t();
  337. for(int i=0;i<DEVICES_COUNT;i++){
  338. QString devId = QString(ytShm->eHomeDevice[i].deviceID);
  339. if(QString::compare(devId,deviceid)==0){
  340. if((t-alarmTime[i])>180){
  341. alarmTime[i] = t;
  342. return true;
  343. }
  344. }
  345. }
  346. return false;
  347. }
  348. void CALLBACK fnPREVIEW_DATA_CB(LONG lPreviewHandle, NET_EHOME_PREVIEW_CB_MSG *pPreviewCBMsg, void *pUserData)
  349. {
  350. ytShm->workingTime[0] = QDateTime::currentDateTime().toTime_t();
  351. if (NULL == pPreviewCBMsg)
  352. {
  353. return ;
  354. }
  355. EHomeDevice *dev= (EHomeDevice *)pUserData;
  356. dev->Connected = 0x01;
  357. dev->previewId = lPreviewHandle;
  358. InputStreamData(QString(dev->deviceID).replace(" ","_"), pPreviewCBMsg->byDataType, (char*)pPreviewCBMsg->pRecvdata, pPreviewCBMsg->dwDataLen);
  359. }
  360. void ProcessHttpAlarmInfo(void *pXml, unsigned long dwLen, void *pUrl, unsigned long dwUrllen,void *pUserData){
  361. if((pXml==NULL)&&(pUrl==NULL))
  362. return;
  363. UN_REFERENCED_PARAMETER(dwLen);
  364. UN_REFERENCED_PARAMETER(pUrl);
  365. UN_REFERENCED_PARAMETER(dwUrllen);
  366. char deviceID[32] = {0};
  367. char eventTime[20] = {0};
  368. char eventType[128] = {0};
  369. char eventState[20] = {0};
  370. char pic[2][256]={0};
  371. CoreObject *obj = (CoreObject *)pUserData;
  372. LPNET_EHOME_ALARM_ISAPI_INFO pISAPIAlarm = (NET_EHOME_ALARM_ISAPI_INFO *)(pXml);
  373. NET_EHOME_ALARM_ISAPI_INFO struISAPIAlarm = {0};
  374. memcpy(&struISAPIAlarm,pISAPIAlarm, sizeof(NET_EHOME_ALARM_ISAPI_INFO));
  375. obj->appendLog(QString("{ligangceshi5:%1}")
  376. .arg(struISAPIAlarm.pAlarmData));
  377. if(struISAPIAlarm.pAlarmData)
  378. {
  379. if(struISAPIAlarm.byDataType==2){
  380. QByteArray data = QByteArray((const char *)(struISAPIAlarm.pAlarmData));
  381. QXmlStreamReader reader;
  382. int cur = data.indexOf("--boundary");
  383. reader.addData(data.mid(0,cur));
  384. while(!reader.atEnd()){
  385. if(reader.isStartElement()){
  386. if(reader.name()=="eventType"){
  387. sprintf(eventType,"%s",reader.readElementText().toUtf8().data());
  388. }else if(reader.name()=="deviceID"){
  389. sprintf(deviceID,"%s",reader.readElementText().toUtf8().data());
  390. }else if(reader.name()=="dateTime"){
  391. sprintf(eventTime,"%s",reader.readElementText().replace("T"," ").mid(0,19).toUtf8().data());
  392. }else if(reader.name()=="eventState"){
  393. sprintf(eventState,"%s",reader.readElementText().toUtf8().data());
  394. }
  395. }
  396. reader.readNext();
  397. }
  398. obj->appendLog(QString("{ligangceshi3:%1}")
  399. .arg(deviceID));
  400. }else if(struISAPIAlarm.byDataType==1){
  401. QByteArray data = QByteArray((const char *)(struISAPIAlarm.pAlarmData));
  402. int cur = data.indexOf("--boundary");
  403. if(cur>0){
  404. QXmlStreamReader reader;
  405. reader.addData(data.mid(0,cur));
  406. while(!reader.atEnd()){
  407. if(reader.isStartElement()){
  408. if(reader.name()=="eventType"){
  409. sprintf(eventType,"%s",reader.readElementText().toUtf8().data());
  410. }else if(reader.name()=="deviceID"){
  411. sprintf(deviceID,"%s",reader.readElementText().toUtf8().data());
  412. }else if(reader.name()=="dateTime"){
  413. sprintf(eventTime,"%s",reader.readElementText().replace("T"," ").mid(0,19).toUtf8().data());
  414. }else if(reader.name()=="eventState"){
  415. sprintf(eventState,"%s",reader.readElementText().toUtf8().data());
  416. }
  417. }
  418. reader.readNext();
  419. }
  420. obj->appendLog(QString("{ligangceshi4:%1}")
  421. .arg(deviceID));
  422. }
  423. }
  424. if(obj->checkAlarmDevTime(deviceID)){
  425. if(struISAPIAlarm.byPicturesNumber>0){
  426. time_t t = QDateTime::currentDateTime().toTime_t();
  427. for(int i=0;i<struISAPIAlarm.byPicturesNumber;i++){
  428. char fname[128];
  429. sprintf(fname,"/usr/local/nginx/html/VideoAlarmPics/pic_%d_%s_%d.jpg",t,deviceID,i);
  430. if(i<2)
  431. sprintf(pic[i],"http://124.71.175.91/VideoAlarmPics/pic_%d_%s_%d.jpg",t,deviceID,i);
  432. FILE *f = fopen(fname,"w");
  433. fwrite(((NET_EHOME_ALARM_ISAPI_PICDATA *)struISAPIAlarm.pPicPackData)[i].pPicData,1,((NET_EHOME_ALARM_ISAPI_PICDATA *)struISAPIAlarm.pPicPackData)[i].dwPicLen,f);
  434. fclose(f);
  435. }
  436. }
  437. obj->reportList.append(Alarm_Report(deviceID,eventTime,QString::fromUtf8("200001"),
  438. 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,'','')")
  439. .arg(2).arg(deviceID).arg(eventTime).arg(1)
  440. .arg(2).arg(eventState).arg(pic[0]).arg(pic[1])));
  441. for(int k=0;k<DEVICES_COUNT;k++){
  442. QString devid = QString(ytShm->eHomeDevice[k].deviceID);
  443. if(QString::compare(deviceID,devid)==0){
  444. sprintf(ytShm->eHomeDeviceFtp[k].filePath,"%s",pic[0]);
  445. break;
  446. }
  447. }
  448. }
  449. }
  450. }
  451. BOOL CALLBACK AlarmMSGCallBack(LONG lHandle, NET_EHOME_ALARM_MSG *pAlarmMsg, void *pUserData)
  452. {
  453. int i,idx;
  454. QDateTime dt = QDateTime::currentDateTime();
  455. CoreObject *obj = (CoreObject *)pUserData;
  456. DWORD dwType = pAlarmMsg->dwAlarmType; //不同的报警类型(dwAlarmType),pAlarmInfo对应不同的报警信息类型
  457. ytShm->workingTime[0] = dt.toTime_t();
  458. if(pAlarmMsg->pHttpUrl!=NULL)
  459. dwType = EHOME_ISAPI_ALARM;
  460. switch(dwType)
  461. {
  462. case EHOME_ALARM_UNKNOWN://未知报警信息
  463. NET_EHOME_ALARM_INFO struAlarmInfo;
  464. obj->appendLog(QString("{ligangceshi1:%1,%2,%3}")
  465. .arg(dt.toString("yyyy-MM-dd HH:mm:ss")).arg(struAlarmInfo.dwAlarmType).arg(struAlarmInfo.szDeviceID));
  466. break;
  467. case EHOME_ALARM://基本报警信息:移动侦测、视频遮盖、视频丢失、PIR报警、人脸侦测、区域入侵等
  468. {
  469. NET_EHOME_ALARM_INFO struAlarmInfo;
  470. memcpy(&struAlarmInfo, pAlarmMsg->pAlarmInfo, sizeof(NET_EHOME_ALARM_INFO));
  471. if((struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)||(struAlarmInfo.dwAlarmType==ALARM_TYPE_LEFT)||(struAlarmInfo.dwAlarmType==ALARM_TYPE_TAKE))
  472. {
  473. QString devId = QString(struAlarmInfo.szDeviceID);
  474. if(obj->checkAlarmDevTime(devId)){
  475. obj->appendLog(QString("[ %1 alm(%2) ] Basic Alarm: Device ID[%3], szAlarmTime[%4], Alarm Type[%5], Action[%6], VideoChannel[%7]!")
  476. .arg(dt.toString("yyyy-MM-dd HH:mm:ss")).arg(obj->alarmList.length())
  477. .arg(struAlarmInfo.szDeviceID).arg(struAlarmInfo.szAlarmTime).arg(struAlarmInfo.dwAlarmType).arg(struAlarmInfo.dwAlarmAction).arg(struAlarmInfo.dwVideoChannel));
  478. for(idx=0;idx<DEVICES_COUNT;idx++){
  479. if((strcmp(ytShm->eHomeDevice[idx].deviceID,(char*)(struAlarmInfo.szDeviceID))==0)
  480. &&((ytShm->eHomeDevice[idx].io[8]==0x02)||(ytShm->eHomeDevice[idx].io[8]==0x04)||(ytShm->eHomeDevice[idx].io[8]==0x08)||(ytShm->eHomeDevice[idx].io[8]==0x84))){
  481. for(i=0;i>obj->alarmList.length();i++){
  482. if(obj->alarmList.at(i).Device_Code.compare(devId)==0){
  483. if((struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)&&(struAlarmInfo.dwAlarmAction!=0))
  484. obj->alarmList.removeAt(i);
  485. else if(struAlarmInfo.dwAlarmType==ALARM_TYPE_TAKE)
  486. obj->alarmList.removeAt(i);
  487. break;
  488. }
  489. }
  490. QString time1 = QString(struAlarmInfo.szAlarmTime);
  491. QString time2 = time1.mid(0,10)+" "+time1.mid(11,8);
  492. if(struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)
  493. obj->alarmList.append(AlarmEvent(devId,time2,(struAlarmInfo.dwAlarmAction==0?1:0),dt.toTime_t()));
  494. else
  495. obj->alarmList.append(AlarmEvent(devId,time2,1,dt.toTime_t()));
  496. ytShm->eHomeDevice[idx].io[6]=0x01;
  497. }
  498. }
  499. }
  500. }else{
  501. obj->appendLog(QString("{ligangceshi2:%1,%2,%3}")
  502. .arg(dt.toString("yyyy-MM-dd HH:mm:ss")).arg(struAlarmInfo.dwAlarmType).arg(struAlarmInfo.szDeviceID));
  503. }
  504. }
  505. break;
  506. case EHOME_ISAPI_ALARM:
  507. ProcessHttpAlarmInfo(pAlarmMsg->pAlarmInfo,pAlarmMsg->dwAlarmInfoLen,pAlarmMsg->pHttpUrl,pAlarmMsg->dwHttpUrlLen,pUserData);
  508. break;
  509. default:
  510. NET_EHOME_ALARM_INFO struAlarmInfo1;
  511. obj->appendLog(QString("{ligangceshi:%1,%2,%3}")
  512. .arg(dt.toString("yyyy-MM-dd HH:mm:ss")).arg(struAlarmInfo1.dwAlarmType).arg(struAlarmInfo.szDeviceID));
  513. break;
  514. }
  515. return TRUE;
  516. }
  517. BOOL InputStreamData(QString deviceid, BYTE byDataType, char* pBuffer, int iDataLen)
  518. {
  519. int i;
  520. uint t = QDateTime::currentDateTime().toTime_t();
  521. ytShm->workingTime[0] = t;
  522. printf("InputStreamData test \n");
  523. if(iDataLen>0){
  524. nopic_count = 0;
  525. for(i=0;i<DEVICES_COUNT;i++){
  526. if(QString(ytShm->eHomeDevice[i].deviceID).compare(deviceid)==0){
  527. if(ytShm->eHomeDevice[i].io[0]==0x01){
  528. ytShm->eHomeDevice[i].time[0] = t;
  529. if(ytShm->eHomeDevice[i].savetmp==0x00){
  530. if(ytShm->eHomeDevice[i].tmpfile!=NULL){
  531. fclose(ytShm->eHomeDevice[i].tmpfile);
  532. ytShm->eHomeDevice[i].tmpfile = NULL;
  533. }
  534. QString tmpfile = QString("/tmp/%1.mp4").arg(ytShm->eHomeDevice[i].deviceID).replace(" ","_");
  535. sprintf(ytShm->eHomeDevice[i].filename,"%s",tmpfile.toUtf8().data());
  536. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),QDateTime::currentDateTime());
  537. ytShm->eHomeDevice[i].savetmp = 0x01;
  538. ytShm->eHomeDevice[i].tmpfile = fopen(tmpfile.toUtf8().data(),"wb");
  539. fwrite(pBuffer,iDataLen,1,ytShm->eHomeDevice[i].tmpfile);
  540. }else{
  541. if(ytShm->eHomeDevice[i].tmpfile!=NULL){
  542. fwrite(pBuffer,iDataLen,1,ytShm->eHomeDevice[i].tmpfile);
  543. }else{
  544. QString tmpfile = QString("/tmp/%1.mp4").arg(ytShm->eHomeDevice[i].deviceID).replace(" ","_");
  545. sprintf(ytShm->eHomeDevice[i].filename,"%s",tmpfile.toUtf8().data());
  546. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),QDateTime::currentDateTime());
  547. // ytShm->eHomeDevice[i].savetmp = 0x01;
  548. ytShm->eHomeDevice[i].tmpfile = fopen(tmpfile.toUtf8().data(),"wb");
  549. fwrite(pBuffer,iDataLen,1,ytShm->eHomeDevice[i].tmpfile);
  550. }
  551. }
  552. }else{
  553. NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId);
  554. }
  555. return true;
  556. }
  557. }
  558. }
  559. return false;
  560. }
  561. void setFullTime(FullTime *fTime, QDateTime qTime){
  562. fTime->YEAR = qTime.date().year()&0xffff;
  563. fTime->MONTH = qTime.date().month()&0xff;
  564. fTime->DAY = qTime.date().day()&0xff;
  565. fTime->HOUR = qTime.time().hour()&0xff;
  566. fTime->MINUTE = qTime.time().minute()&0xff;
  567. fTime->SECOND = qTime.time().second()&0xff;
  568. fTime->TIMESTAMP = qTime.toTime_t();
  569. }
  570. QDateTime getFullTime(FullTime fTime){
  571. if((fTime.YEAR==0)||(fTime.MONTH==0)||(fTime.DAY==0))
  572. return QDateTime::fromTime_t(fTime.TIMESTAMP);
  573. else
  574. return QDateTime(QDate((int)fTime.YEAR,(int)fTime.MONTH,(int)fTime.DAY),QTime((int)fTime.HOUR,(int)fTime.MINUTE,(int)fTime.SECOND));
  575. }
  576. void CoreObject::appendLog(QString log)
  577. {
  578. logThread->appendData(log);
  579. }
  580. void CoreObject::start()
  581. {
  582. //预览监听参数
  583. timer->start(3000);
  584. NET_EHOME_LOCAL_GENERAL_CFG struGeneralCfg = {0};
  585. struGeneralCfg.byAlarmPictureSeparate = 1;
  586. if(!NET_EALARM_SetSDKLocalCfg(LOCAL_CFG_TYPE_GENERAL,&struGeneralCfg)){
  587. printf("NET_EALARM_SetSDKLocalCfg falied\n");
  588. NET_ECMS_Fini();
  589. return;
  590. }
  591. printf("NET_EALARM_SetSDKLocalCfg pass!\n");
  592. //报警监听参数
  593. NET_EHOME_ALARM_LISTEN_PARAM struTcpAlarmListenParam = {0};
  594. memcpy(struTcpAlarmListenParam.struAddress.szIP, iServerIP, sizeof(iServerIP));
  595. struTcpAlarmListenParam.byProtocolType = 0;
  596. struTcpAlarmListenParam.struAddress.wPort = 7668;
  597. struTcpAlarmListenParam.fnMsgCb = AlarmMSGCallBack;
  598. struTcpAlarmListenParam.pUserData = this;
  599. struTcpAlarmListenParam.byUseCmsPort = 0;
  600. struTcpAlarmListenParam.byUseThreadPool = 0;
  601. if((alarmListenHandle=NET_EALARM_StartListen(&struTcpAlarmListenParam))<-1){
  602. printf("NET_EALARM_StartListen TCP failed, error code: %d\n", NET_EALARM_GetLastError());
  603. NET_ECMS_Fini();
  604. NET_ESTREAM_Fini();
  605. NET_EALARM_Fini();
  606. exit(1);
  607. }
  608. printf("NET_EALARM_StartListen TCP!\n");
  609. //报警监听参数
  610. NET_EHOME_ALARM_LISTEN_PARAM struListen = {0};
  611. memcpy(struListen.struAddress.szIP, iServerIP, sizeof(iServerIP));
  612. struListen.struAddress.wPort = 7669; //报警服务器监听端口
  613. struListen.fnMsgCb = AlarmMSGCallBack; //报警回调函数
  614. struListen.pUserData = this;
  615. struListen.byUseCmsPort = 0;
  616. struListen.byUseThreadPool = 0;
  617. struListen.byProtocolType = 1; //0- TCP方式(保留,暂不支持),1- UDP方式
  618. //启动报警监听
  619. LONG lHandle = NET_EALARM_StartListen(&struListen);
  620. if(lHandle< -1)
  621. {
  622. printf("NET_EALARM_StartListen failed, error code: %d\n", NET_EALARM_GetLastError());
  623. NET_ECMS_Fini();
  624. NET_ESTREAM_Fini();
  625. NET_EALARM_Fini();
  626. exit(1);
  627. }
  628. printf("NET_EALARM_StartListen!\n");
  629. NET_ECMS_SetLogToFile(1,QString("/var/log/usky/").toUtf8().data(),true);
  630. for(int i=0;i<DEVICES_COUNT;i++){
  631. printf("NET_ESTREAM_StartListenPreview\n");
  632. ytShm->eHomeDevice[i].previewport = 58000+i;
  633. ytShm->eHomeDevice[i].listen_alarm_handle = lHandle;
  634. NET_EHOME_LISTEN_PREVIEW_CFG struListen = {0};
  635. memcpy(struListen.struIPAdress.szIP,iServerIP, sizeof(iServerIP));
  636. struListen.struIPAdress.wPort = ytShm->eHomeDevice[i].previewport; //流媒体服务器监听端口
  637. struListen.fnNewLinkCB = fnPREVIEW_NEWLINK_CB; //预览连接请求回调函数
  638. struListen.pUser =&(ytShm->eHomeDevice[i]);
  639. struListen.byLinkMode = 0; //0- TCP方式,1- UDP方式
  640. lHandle = NET_ESTREAM_StartListenPreview(&struListen);
  641. if(lHandle<-1){
  642. }else{
  643. ytShm->eHomeDevice[i].listen_preview_handle = lHandle;
  644. }
  645. }
  646. NET_EHOME_CMS_LISTEN_PARAM struCMSListenPara = {0};
  647. memcpy(struCMSListenPara.struAddress.szIP, "0.0.0.0", sizeof("0.0.0.0"));
  648. struCMSListenPara.struAddress.wPort = 7660;
  649. struCMSListenPara.fnCB = RegisterCallBack;
  650. struCMSListenPara.pUserData = this;
  651. printf("NET_ECMS_StartListen begin\n");
  652. LONG lListen = NET_ECMS_StartListen(&struCMSListenPara);
  653. if(lListen < -1)
  654. {
  655. printf("NET_ECMS_StartListen fail\n");
  656. NET_ECMS_Fini();
  657. NET_ESTREAM_Fini();
  658. NET_EALARM_Fini();
  659. exit(1);
  660. }
  661. printf("NET_ECMS_StartListen end\n");
  662. // qDebug()<<"start core";
  663. }
  664. void CoreObject::process_stop()
  665. {
  666. printf("process_stop \n");
  667. QProcess *p = (QProcess *)sender();
  668. for(int i=0;i<DEVICES_COUNT;i++){
  669. if(p==processList.at(i)){
  670. if(ytShm->eHomeDevice[i].Connected==0x01){
  671. ytShm->eHomeDevice[i].io[0]=0x00;
  672. }
  673. break;
  674. }
  675. }
  676. }
  677. void CoreObject::AlarmReport(QString addr, QString type, QString time, QString companyCode, quint64 insertid)
  678. {
  679. // if(type.toInt()==200104)
  680. // type="占道侦测报警";
  681. // else if(type.toInt()==200001)
  682. // type="火点侦测报警";
  683. // QString rep2 = QString("{\"SubType\":16,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":0,\"CompanyCode\":\"%3\",\"evt_name\":\"%4\",\"evt\":0,\"alarm_time\":\"%5\"}")
  684. // .arg(addr).arg(insertid).arg(companyCode).arg(type).arg(time);
  685. // printf("%s\n",rep2.toUtf8().data());
  686. // repcur++;
  687. // repcur &= 0x07;
  688. // wssThread[repcur]->appendData(rep2);
  689. }
  690. QString CoreObject::getCompanyCode(QString addr){
  691. for(int i=0;i<DEVICES_COUNT;i++){
  692. QString devid = QString(ytShm->eHomeDevice[i].deviceID);
  693. if(QString::compare(addr,devid)==0){
  694. return QString(ytShm->eHomeDevice[i].rtsppath);
  695. }
  696. }
  697. return "";
  698. }
  699. void CoreObject::clear_devalarm(AlarmEvent devAlarm,bool isFtp)
  700. {
  701. for(int i=0;i<DEVICES_COUNT;i++){
  702. if(devAlarm.Device_Code.compare(QString(ytShm->eHomeDevice[i].deviceID))==0){
  703. if(processList.at(i)->pid()>0)
  704. processList.at(i)->close();
  705. ytShm->eHomeDevice[i].io[6]=0x00;
  706. ytShm->eHomeDevice[i].io[0]=0x00;
  707. QString tmpfile = QString(ytShm->eHomeDevice[i].filename);
  708. if(ytShm->eHomeDevice[i].tmpfile!=NULL)
  709. fclose(ytShm->eHomeDevice[i].tmpfile);
  710. ytShm->eHomeDevice[i].savetmp = 0x00;
  711. ytShm->eHomeDevice[i].tmpfile = NULL;
  712. QFile(tmpfile).remove();
  713. ytShm->eHomeDevice[i].transed = 0x00;
  714. sprintf(ytShm->eHomeDevice[i].filename,"");
  715. if(isFtp){
  716. if(ytShm->eHomeDevice[i].io[8]==0x08){
  717. reportList.append(Alarm_Report(devAlarm.Device_Code,devAlarm.Event_Time,QString::fromUtf8("200104"),
  718. 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,'','')")
  719. .arg(2).arg(devAlarm.Device_Code).arg(devAlarm.Event_Time).arg(1)
  720. .arg(104).arg(devAlarm.Event_Status).arg(ytShm->eHomeDeviceFtp[i].filePath).arg("")));
  721. }else if(ytShm->eHomeDevice[i].io[8]==0x84){
  722. reportList.append(Alarm_Report(devAlarm.Device_Code,devAlarm.Event_Time,QString::fromUtf8("200105"),
  723. 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,'','')")
  724. .arg(2).arg(devAlarm.Device_Code).arg(devAlarm.Event_Time).arg(1)
  725. .arg(106).arg(devAlarm.Event_Status).arg(ytShm->eHomeDeviceFtp[i].filePath).arg("")));
  726. }
  727. }else{
  728. if(ytShm->eHomeDevice[i].io[8]==0x02||ytShm->eHomeDevice[i].io[8]==0x08){
  729. reportList.append(Alarm_Report(devAlarm.Device_Code,devAlarm.Event_Time,QString::fromUtf8("200104"),
  730. 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,'','')")
  731. .arg(2).arg(devAlarm.Device_Code).arg(devAlarm.Event_Time).arg(1)
  732. .arg(104).arg(devAlarm.Event_Status).arg("").arg("")));
  733. }else if(ytShm->eHomeDevice[i].io[8]==0x04||ytShm->eHomeDevice[i].io[8]==0x84){
  734. reportList.append(Alarm_Report(devAlarm.Device_Code,devAlarm.Event_Time,QString::fromUtf8("200105"),
  735. 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,'','')")
  736. .arg(2).arg(devAlarm.Device_Code).arg(devAlarm.Event_Time).arg(1)
  737. .arg(106).arg(devAlarm.Event_Status).arg("").arg("")));
  738. }
  739. }
  740. break;
  741. }
  742. }
  743. for(int i=0;i<alarmList.length();i++){
  744. if(alarmList.at(i).Device_Code.compare(devAlarm.Device_Code)==0){
  745. alarmList.removeAt(i);
  746. // break;
  747. }
  748. }
  749. }
  750. void CoreObject::time_out()
  751. {
  752. printf("time_out start\n");
  753. if(hour != QTime::currentTime().hour()){
  754. hour = QTime::currentTime().hour();
  755. QByteArray post_data;
  756. uint t = QDateTime::currentDateTime().toTime_t();
  757. QString tmp="";
  758. QString number= QString("%1%2%3").arg("usky").arg(t).arg("056ac8fae059c9c9e700b734922edfc8");
  759. QByteArray str;
  760. str = QCryptographicHash::hash(number.toLatin1(),QCryptographicHash::Md5);
  761. tmp.append(str.toHex());
  762. post_data.append(QString("requestType=%1&").arg(3));
  763. post_data.append(QString("publicKey=%1&").arg(tmp));
  764. post_data.append(QString("timeStamp=%1").arg(t));
  765. QNetworkRequest *req = new QNetworkRequest();
  766. req->setUrl(QUrl("https://iot.usky.cn/ytapi/admin/Manage/wooGiApi"));
  767. req->setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
  768. req->setHeader(QNetworkRequest::ContentLengthHeader,post_data.length());
  769. QNetworkReply* reply = netAccessManager->post(*req,post_data);
  770. }
  771. uint ChkTime = 0;
  772. QDateTime t = QDateTime::currentDateTime();
  773. ytShm->workingTime[0] = t.toTime_t();
  774. if(!had_reg){
  775. if((ytShm->workingTime[0]-start_time)>30)
  776. exit(1);
  777. }
  778. if(isWorking)
  779. return;
  780. isWorking = true;
  781. if(synchour!=t.time().hour())
  782. chkPhoneList();
  783. t = QDateTime::currentDateTime();
  784. ytShm->workingTime[0] = t.toTime_t();
  785. for(int i=0;i<DEVICES_COUNT;i++){
  786. if(ytShm->eHomeDevice[i].Inited==0x01){
  787. t = QDateTime::currentDateTime();
  788. ytShm->workingTime[0] = t.toTime_t();
  789. if(ytShm->eHomeDevice[i].Connected==0x00){
  790. if(ytShm->eHomeDevice[i].io[8]==0x01)
  791. ytShm->eHomeDevice[i].io[0] = 0x01;
  792. else if(ytShm->eHomeDevice[i].io[7]==0x01){
  793. if((ytShm->eHomeDevice[i].time[1]>0)&&((t.toTime_t()-ytShm->eHomeDevice[i].time[1])>300)){
  794. printf("%s time over close\n",ytShm->eHomeDevice[i].deviceID);
  795. ytShm->eHomeDevice[i].io[0] = 0x00;
  796. ytShm->eHomeDevice[i].io[7] = 0x00;
  797. ytShm->eHomeDevice[i].time[1]=0;
  798. }else if(ytShm->eHomeDevice[i].io[0]==0x00){
  799. printf("%s io7 on\n",ytShm->eHomeDevice[i].deviceID);
  800. // ytShm->eHomeDevice[i].io[7] = 0x00;
  801. ytShm->eHomeDevice[i].io[0] = 0x01;
  802. }else if(ytShm->eHomeDevice[i].io[0]==0x01){
  803. if(ytShm->eHomeDevice[i].io[15]>2){
  804. printf("%s NET_ECMS_StopGetRealStream\n",ytShm->eHomeDevice[i].deviceID);
  805. if(NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId)){
  806. // ytShm->eHomeDevice[i].io[0] = 0x00;
  807. // ytShm->eHomeDevice[i].io[7] = 0x00;
  808. }
  809. ytShm->eHomeDevice[i].time[1]=0;
  810. ytShm->eHomeDevice[i].SessionId=-1;
  811. }
  812. }
  813. }else if(ytShm->eHomeDevice[i].io[6]==0x01){
  814. printf("%s io6 on\n",ytShm->eHomeDevice[i].deviceID);
  815. ytShm->eHomeDevice[i].io[0] = 0x01;
  816. if(ytShm->eHomeDevice[i].io[8]==0x08||ytShm->eHomeDevice[i].io[8]==0x84){
  817. ytShm->eHomeDevice[i].io[0] = 0x00;
  818. QDateTime zeroTime = QDateTime::fromTime_t(0);
  819. uint t1 = QDateTime::currentDateTime().toTime_t();
  820. QDateTime start = QDateTime::currentDateTime();
  821. QDateTime now;
  822. do{
  823. now=QDateTime::currentDateTime();
  824. }while(start.secsTo(now)<=5);
  825. QString filePath = QString("/var/ftp/pub/%1").arg(QString(ytShm->eHomeDevice[i].deviceID));
  826. QDir qd(filePath);
  827. QFileInfo subFileList = qd.entryInfoList(QDir::Files | QDir::CaseSensitive).last();
  828. QString filePath1 = QString("%1/%2").arg(filePath).arg(subFileList.fileName());
  829. QString filePath2 = QString("/usr/local/nginx/html/VideoAlarmPics/%1_%2.jpg").arg(QString(ytShm->eHomeDevice[i].deviceID)).arg(t1);
  830. QFile file2(filePath1);
  831. uint fileTime = subFileList.created().toTime_t();
  832. file2.copy(filePath2);
  833. QFile::remove(filePath1);
  834. QString picturePath = QString("http://124.71.175.91/VideoAlarmPics/%1_%2.jpg").arg(QString(ytShm->eHomeDevice[i].deviceID)).arg(t1);
  835. uint timeDiff = t1-fileTime;
  836. appendLog(QString("{filePath1:%1,%2,%3,%4}").arg(filePath1).arg(timeDiff).arg(t1).arg(fileTime));
  837. if(timeDiff>120){
  838. for(int j=0;j<alarmList.length();j++){
  839. if(alarmList.at(j).Device_Code.compare(ytShm->eHomeDevice[i].deviceID)==0){
  840. AlarmEvent ftpae = alarmList.at(j);
  841. clear_devalarm(ftpae,false);
  842. break;
  843. }
  844. }
  845. }else{
  846. ytShm->eHomeDevice[i].io[0] = 0x00;
  847. if(QString(ytShm->eHomeDeviceFtp[i].deviceID).compare(QString(ytShm->eHomeDevice[i].deviceID))==0){
  848. sprintf(ytShm->eHomeDeviceFtp[i].fileName,"%s",subFileList.fileName().toUtf8().data());
  849. sprintf(ytShm->eHomeDeviceFtp[i].filePath,"%s",picturePath.toUtf8().data());
  850. setFullTime(&(ytShm->eHomeDeviceFtp[i].alarmTime),zeroTime);
  851. }else{
  852. sprintf(ytShm->eHomeDeviceFtp[i].deviceID,"%s",QString(ytShm->eHomeDevice[i].deviceID).toUtf8().data());
  853. sprintf(ytShm->eHomeDeviceFtp[i].fileName,"%s",subFileList.fileName().toUtf8().data());
  854. sprintf(ytShm->eHomeDeviceFtp[i].filePath,"%s",picturePath.toUtf8().data());
  855. setFullTime(&(ytShm->eHomeDeviceFtp[i].alarmTime),zeroTime);
  856. }
  857. for(int j=0;j<alarmList.length();j++){
  858. if(alarmList.at(j).Device_Code.compare(ytShm->eHomeDevice[i].deviceID)==0){
  859. AlarmEvent ftpae = alarmList.at(j);
  860. clear_devalarm(ftpae,true);
  861. break;
  862. }
  863. }
  864. }
  865. }
  866. }
  867. if(ytShm->eHomeDevice[i].io[0]==0x01){
  868. if(ytShm->eHomeDevice[i].SessionId>-1){
  869. NET_EHOME_PUSHSTREAM_IN struPushStreamIn = {0};
  870. struPushStreamIn.dwSize = sizeof(struPushStreamIn);
  871. struPushStreamIn.lSessionID = ytShm->eHomeDevice[i].SessionId; //SessionID,预览请求会话ID
  872. //预览请求推流输出参数
  873. NET_EHOME_PUSHSTREAM_OUT struPushStreamOut = {0};
  874. if(!NET_ECMS_StartPushRealStream(ytShm->eHomeDevice[i].LoginId, &struPushStreamIn, &struPushStreamOut)){
  875. printf("%s NET_ECMS_StartGetRealStreamV11 failed.\n",ytShm->eHomeDevice[i].deviceID);
  876. ytShm->eHomeDevice[i].io[15]++;
  877. }else{
  878. printf("%s start push real stream\n",ytShm->eHomeDevice[i].deviceID);
  879. ytShm->eHomeDevice[i].io[15]=0x00;
  880. }
  881. }
  882. else
  883. {
  884. ytShm->eHomeDevice[i].previewport = 58000+i;
  885. printf("actice %s at %d(loginId:%d)\n",ytShm->eHomeDevice[i].deviceID,ytShm->eHomeDevice[i].previewport,ytShm->eHomeDevice[i].LoginId);
  886. NET_EHOME_PREVIEWINFO_IN_V11 struPreviewIn = {0};
  887. struPreviewIn.iChannel = 1; //通道号
  888. struPreviewIn.dwLinkMode = 0; //0- TCP方式,1- UDP方式
  889. struPreviewIn.dwStreamType = 1; //码流类型:0- 主码流,1- 子码流, 2- 第三码流
  890. memcpy(struPreviewIn.struStreamSever.szIP, oServerIP, sizeof(oServerIP));//流媒体服务器IP地址
  891. struPreviewIn.struStreamSever.wPort = ytShm->eHomeDevice[i].previewport;
  892. //预览请求输出参数
  893. NET_EHOME_PREVIEWINFO_OUT struPreviewOut = {0};
  894. if(!NET_ECMS_StartGetRealStreamV11(ytShm->eHomeDevice[i].LoginId, &struPreviewIn, &struPreviewOut)){
  895. printf("%s NET_ECMS_StartGetRealStreamV11 failed.\n",ytShm->eHomeDevice[i].deviceID);
  896. }else{
  897. printf("active %s lSessionID:%d\n",ytShm->eHomeDevice[i].deviceID,struPreviewOut.lSessionID);
  898. ytShm->eHomeDevice[i].SessionId = struPreviewOut.lSessionID;
  899. NET_EHOME_PUSHSTREAM_IN struPushStreamIn = {0};
  900. struPushStreamIn.dwSize = sizeof(struPushStreamIn);
  901. struPushStreamIn.lSessionID = struPreviewOut.lSessionID; //SessionID,预览请求会话ID
  902. //预览请求推流输出参数
  903. NET_EHOME_PUSHSTREAM_OUT struPushStreamOut = {0};
  904. if(!NET_ECMS_StartPushRealStream(ytShm->eHomeDevice[i].LoginId, &struPushStreamIn, &struPushStreamOut)){
  905. printf("%s NET_ECMS_StartGetRealStreamV11 failed.\n",ytShm->eHomeDevice[i].deviceID);
  906. ytShm->eHomeDevice[i].io[15]++;
  907. }else{
  908. printf("%s start push real stream\n",ytShm->eHomeDevice[i].deviceID);
  909. ytShm->eHomeDevice[i].io[15]=0x00;
  910. }
  911. }
  912. }
  913. }
  914. }else if((ytShm->eHomeDevice[i].time[1]>0)&&((t.toTime_t()-ytShm->eHomeDevice[i].time[1])>300)){
  915. if((ytShm->eHomeDevice[i].io[7]==0x01)||(ytShm->eHomeDevice[i].io[8]==0x01)){
  916. if(NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId)){
  917. ytShm->eHomeDevice[i].io[0] = 0x00;
  918. ytShm->eHomeDevice[i].io[7] = 0x00;
  919. ytShm->eHomeDevice[i].time[1]=0;
  920. ytShm->eHomeDevice[i].SessionId =-1;
  921. }
  922. }
  923. }else if((ytShm->eHomeDevice[i].Connected==0x01)&&(ytShm->eHomeDevice[i].io[0]==0x00)){
  924. if(NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId)){
  925. ytShm->eHomeDevice[i].Connected=0x00;
  926. ytShm->eHomeDevice[i].SessionId=-1;
  927. ytShm->eHomeDevice[i].time[0]=0;
  928. ytShm->eHomeDevice[i].time[1]=0;
  929. if(processList.at(i)->pid()>0){
  930. processList.at(i)->close();
  931. }
  932. // qDebug()<<QString("%1 will close.(%2)").arg(ytShm->eHomeDevice[i].deviceID).arg(i).toUtf8().data();
  933. QString tmpfile = QString(ytShm->eHomeDevice[i].filename).replace(" ","_");
  934. if(ytShm->eHomeDevice[i].tmpfile!=NULL)
  935. fclose(ytShm->eHomeDevice[i].tmpfile);
  936. ytShm->eHomeDevice[i].savetmp = 0x00;
  937. ytShm->eHomeDevice[i].tmpfile = NULL;
  938. QFile(tmpfile).remove();
  939. if(ytShm->eHomeDevice[i].io[8]==0x01){
  940. tmpfile = QString("/tmp/%1.mp4").arg(ytShm->eHomeDevice[i].deviceID);
  941. sprintf(ytShm->eHomeDevice[i].filename,"%s",tmpfile.toUtf8().data());
  942. ytShm->eHomeDevice[i].tmpfile = fopen(tmpfile.toUtf8().data(),"wb");
  943. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),t);
  944. sprintf(ytShm->eHomeDevice[i].filename,"");
  945. }
  946. ytShm->eHomeDevice[i].transed = 0x00;
  947. }
  948. }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)){
  949. if(ytShm->eHomeDevice[i].io[6]==0x01){
  950. ytShm->eHomeDevice[i].io[6]=0x00;
  951. ytShm->eHomeDevice[i].io[0]=0x00;
  952. for(int j=0;j<alarmList.length();j++){
  953. if(alarmList.at(j).Device_Code.compare(QString(ytShm->eHomeDevice[i].deviceID))==0){
  954. QString tmpfile = QString(ytShm->eHomeDevice[i].filename).replace(" ","_");
  955. QString pic1name = QString("http://124.71.175.91/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(" ","_"));
  956. 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(" ","_"));
  957. QString cmd1 = QString("ffmpeg -ss 00:00:00 -i \"%1\" -f image2 -y \"%2\"").arg(tmpfile).arg(picname);
  958. if(ytShm->eHomeDevice[i].io[8]==0x02){
  959. reportList.append(Alarm_Report(alarmList.at(j).Device_Code,alarmList.at(j).Event_Time,QString::fromUtf8("200104"),
  960. 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,'','')")
  961. .arg(2).arg(alarmList.at(j).Device_Code).arg(alarmList.at(j).Event_Time).arg(1)
  962. .arg(104).arg(alarmList.at(j).Event_Status).arg(pic1name).arg("")));
  963. sprintf(ytShm->eHomeDeviceFtp[i].filePath,"%s",pic1name.toUtf8().data());
  964. }else if(ytShm->eHomeDevice[i].io[8]==0x04){
  965. reportList.append(Alarm_Report(alarmList.at(j).Device_Code,alarmList.at(j).Event_Time,QString::fromUtf8("200105"),
  966. 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,'','')")
  967. .arg(2).arg(alarmList.at(j).Device_Code).arg(alarmList.at(j).Event_Time).arg(1)
  968. .arg(106).arg(alarmList.at(j).Event_Status).arg(pic1name).arg("")));
  969. sprintf(ytShm->eHomeDeviceFtp[i].filePath,"%s",pic1name.toUtf8().data());
  970. }
  971. if(processList.at(i)->pid()>0)
  972. processList.at(i)->close();
  973. processList.at(i)->start(cmd1);
  974. alarmList.removeAt(j);
  975. break;
  976. }
  977. }
  978. }else{
  979. setFullTime(&(ytShm->eHomeDevice[i].transtime),t);
  980. QString tmpfile = QString(ytShm->eHomeDevice[i].filename).replace(" ","_");
  981. ytShm->eHomeDevice[i].transed = 0x01;
  982. sprintf(ytShm->eHomeDevice[i].filename,"%s",tmpfile.toUtf8().data());
  983. system(QString("rm -f /usr/local/nginx/html/hls/%1*").arg(ytShm->eHomeDevice[i].deviceID).toUtf8().data());
  984. 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);
  985. if(processList.at(i)->pid()>0)
  986. processList.at(i)->close();
  987. processList.at(i)->start(cmd1);
  988. ytShm->eHomeDevice[i].time[1] = t.toTime_t();
  989. }
  990. }else if((ytShm->eHomeDevice[i].transed==0x01)&&(ytShm->eHomeDevice[i].time[1]>0)&&((t.toTime_t()-ytShm->eHomeDevice[i].time[1])>600)){
  991. if(NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId)){
  992. ytShm->eHomeDevice[i].Connected=0x00;
  993. ytShm->eHomeDevice[i].SessionId=-1;
  994. ytShm->eHomeDevice[i].time[0]=0;
  995. ytShm->eHomeDevice[i].time[1]=0;
  996. // qDebug()<<QString("%1 will close.(%2)").arg(ytShm->eHomeDevice[i].deviceID).arg(i).toUtf8().data();
  997. processList.at(i)->close();
  998. QString tmpfile = QString(ytShm->eHomeDevice[i].filename);
  999. if(ytShm->eHomeDevice[i].tmpfile!=NULL)
  1000. fclose(ytShm->eHomeDevice[i].tmpfile);
  1001. ytShm->eHomeDevice[i].savetmp = 0x00;
  1002. ytShm->eHomeDevice[i].tmpfile = NULL;
  1003. QFile(tmpfile).remove();
  1004. ytShm->eHomeDevice[i].transed = 0x00;
  1005. }
  1006. }
  1007. }
  1008. }
  1009. if(reportList.length()>0){
  1010. if(db.open()){
  1011. while (reportList.length()>0) {
  1012. t = QDateTime::currentDateTime();
  1013. ytShm->workingTime[0] = t.toTime_t();
  1014. QString phonelist = "";
  1015. Alarm_Report rep = reportList.first();
  1016. appendLog(QString("[ %1 sql(%2) ] %3").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(alarmList.length()).arg(rep.Sql));
  1017. printf("[ %s sql(%d) ] %s\n",t.toString("yyyy-MM-dd HH:mm:ss").toUtf8().data(),alarmList.length(),rep.Sql.toUtf8().data());
  1018. QSqlQuery qry = db.exec(rep.Sql);
  1019. quint64 insertId = qry.lastInsertId().toULongLong();
  1020. QString type="",point="";
  1021. //QString companyCode = getCompanyCode(rep.Device_Code);
  1022. QString companyCode="",deviceType="",deviceName="",value="";
  1023. for(int i=0;i<DEVICES_COUNT;i++){
  1024. QString devid = QString(ytShm->eHomeDevice[i].deviceID);
  1025. if(QString::compare(rep.Device_Code,devid)==0){
  1026. companyCode = QString(ytShm->eHomeDevice[i].rtsppath);
  1027. deviceType.append(QString("%1").arg((ytShm->eHomeDevice[i].io[8]&0xff),2,16,QChar('0')));
  1028. deviceName = QString(ytMqShm->eHomeDeviceMq[i].deviceName);
  1029. value = QString(ytShm->eHomeDeviceFtp[i].filePath);
  1030. break;
  1031. }
  1032. }
  1033. if(rep.Event_Name.toInt()==200104){
  1034. type=QString::fromUtf8("占道侦测报警");
  1035. point.append("1602");
  1036. }else if(rep.Event_Name.toInt()==200001){
  1037. type=QString::fromUtf8("火点侦测报警");
  1038. point.append("1601");
  1039. }else if(rep.Event_Name.toInt()==200105){
  1040. type=QString::fromUtf8("电动车禁入/区域入侵告警");
  1041. point.append("1603");
  1042. }
  1043. printf("device code:%s\nget company code:%s\n",rep.Device_Code.toUtf8().data(),companyCode.toUtf8().data());
  1044. if(companyCode.length()>0){
  1045. QString alarmTopic = QString("/usky/ytCamCore/%1/%2/alarm").arg(companyCode).arg(rep.Device_Code);
  1046. QString alarmStr = "";
  1047. alarmStr.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"ALARM\",\"timeStamp\":\"%10\"}").arg(rep.Device_Code).arg(deviceName).arg(type).arg(point).arg(value).arg(deviceName).arg((QDateTime::fromString(rep.Event_Time,"yyyy-MM-dd hh:mm:ss")).toTime_t()).arg(deviceType).arg(rep.Device_Code).arg((QDateTime::fromString(rep.Event_Time,"yyyy-MM-dd hh:mm:ss")).toTime_t()));
  1048. if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED) ||(m_client->connectionState()==QMQTT::STATE_INIT)){
  1049. m_client->connectToHost();
  1050. }
  1051. if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  1052. m_client->publish(QMQTT::Message(alarmmqttIdx++,alarmTopic,alarmStr.toUtf8()));
  1053. if(alarmmqttIdx>9999)
  1054. alarmmqttIdx=1;
  1055. }
  1056. QString rep1 = QString("{\"SubType\":16,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":false}").arg(rep.Device_Code).arg(insertId);
  1057. spThread[repcur]->appendData(rep1);
  1058. QString rep2 = QString("{\"SubType\":16,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":0,\"CompanyCode\":\"%3\",\"evt_name\":\"%4\",\"evt\":0,\"alarm_time\":\"%5\"}")
  1059. .arg(rep.Device_Code).arg(insertId).arg(companyCode).arg(type).arg(rep.Event_Time);
  1060. printf("1234 --- %s\n",rep2.toUtf8().data());
  1061. wssThread[repcur]->appendData(rep2);
  1062. for(int i=0;i<companyphoneList.length();i++){
  1063. if(QString::compare(companyphoneList.at(i).CompanyCode,companyCode)==0){
  1064. if(phonelist.length()==0)
  1065. phonelist = companyphoneList.at(i).Phone;
  1066. else
  1067. phonelist.append(","+companyphoneList.at(i).Phone);
  1068. }
  1069. }
  1070. repcur++;
  1071. repcur &= 0x07;
  1072. if(phonelist.length()>0){
  1073. 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)
  1074. .replace(",","%2C").replace(":","%3A").replace(" ","+");
  1075. wxThreads[wxcur]->appendData(data);
  1076. wxcur++;
  1077. wxcur &= 0x07;
  1078. }
  1079. }
  1080. reportList.removeFirst();
  1081. }
  1082. db.close();
  1083. }
  1084. }
  1085. if(sqlList.length()>0){
  1086. if(db.open()){
  1087. while(sqlList.length()>0){
  1088. db.exec(sqlList.first());
  1089. appendLog(QString("[ %1 sql ] %2").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(sqlList.first()));
  1090. sqlList.removeFirst();
  1091. }
  1092. db.close();
  1093. }
  1094. }
  1095. int a_count=0;
  1096. t = QDateTime::currentDateTime();
  1097. if((t.toTime_t()-ChkTime)>60)
  1098. {
  1099. ChkTime = t.toTime_t();
  1100. QListIterator<AlarmEvent> AlaList(alarmList);
  1101. while(AlaList.hasNext()){
  1102. AlarmEvent ae = AlaList.next();
  1103. if((t.toTime_t()-ae.t_stamp)>120){
  1104. nopic_count++;
  1105. a_count++;
  1106. appendLog(QString("[ %1 out(%2:%3) ] %4 %5").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(alarmList.length()).arg(a_count).arg(ae.Device_Code).arg(ae.Event_Time));
  1107. clear_devalarm(ae,false);
  1108. if(nopic_count>5)
  1109. exit(1);
  1110. }
  1111. }
  1112. }
  1113. isWorking = false;
  1114. }
  1115. void CoreObject::finishedSlot(QNetworkReply *reply)
  1116. {
  1117. //printf("enter finishedSlot ++++++++++++++\n");
  1118. QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
  1119. if(status_code == 200){
  1120. if(reply->error() == QNetworkReply::NoError){
  1121. QString message = QString::fromUtf8(reply->readAll());
  1122. QByteArray data = message.toLatin1();
  1123. QJsonParseError json_err;
  1124. QJsonDocument jsondoc(QJsonDocument::fromJson(data,&json_err));
  1125. //printf("json_err.error = %d\n ",json_err.error);
  1126. if(json_err.error==QJsonParseError::NoError){
  1127. QJsonObject root = jsondoc.object();
  1128. QJsonObject obj = root.value("data").toObject();
  1129. QString num = "";
  1130. int t = 0;
  1131. if((!obj.value("publicKey").isUndefined())&&(!obj.value("publicKey").isNull())){
  1132. num = obj.value("publicKey").toString();
  1133. }
  1134. if((!obj.value("timeStamp").isUndefined())&&(!obj.value("timeStamp").isNull())){
  1135. t = obj.value("timeStamp").toInt();
  1136. }
  1137. QString temp="";
  1138. QString number = QString("%1%2%3").arg("usky").arg(t).arg("056ac8fae059c9c9e700b734922edfc8");
  1139. QByteArray str = QCryptographicHash::hash(number.toLatin1(),QCryptographicHash::Md5);
  1140. temp.append(str.toHex());
  1141. if(QString::compare(num,temp)!=0){
  1142. exit(1);
  1143. }
  1144. }
  1145. }else{
  1146. }
  1147. }else{
  1148. }
  1149. reply->abort();
  1150. reply->close();
  1151. reply->deleteLater();
  1152. }