TcpParse.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. #include "stdafx.h"
  2. #include "kernel.h"
  3. #include "Client2SrvType.h"
  4. #include "TcpParse.h"
  5. #include "crc32.h"
  6. #include "SocketHandle.h"
  7. #include "Global.h"
  8. CTcpParse::CTcpParse(void)
  9. {
  10. }
  11. CTcpParse::~CTcpParse(void)
  12. {
  13. }
  14. unsigned int CTcpParse::CalcCheckSum( void *pData, unsigned int nSize )
  15. {
  16. unsigned int checksum = 0;
  17. if ( nSize <= sizeof( ProtocolHeader ) )
  18. {
  19. return 0;
  20. }
  21. unsigned char *pBody = &( ( unsigned char* )pData )[ sizeof( ProtocolHeader ) ];
  22. nSize -= sizeof( ProtocolHeader );
  23. checksum = crc32( 0, pBody, nSize );
  24. return checksum;
  25. }
  26. void CTcpParse::ProcessDevOnline(void *pSocketHandle, void *pData, int nLen)
  27. {
  28. ReqDevOnline *pReqDevOnline = (ReqDevOnline *)pData;
  29. CAnalog *pAnalog = pVariantsManager->FindAnalog( pReqDevOnline->nVarID );
  30. if( pAnalog==NULL )
  31. return;
  32. //if( pAnalog->m_nVarID==41 )
  33. // LOG4C((LOG_NOTICE, "%s, 值: %d C", pAnalog->m_strDesc,(int)pAnalog->m_fData ));
  34. pAnalog->m_fData = (float)pReqDevOnline->nOnline;
  35. }
  36. void CTcpParse::ProcessHeart(void *pSocketHandle, void *pData, int nLen)
  37. {
  38. ((CSocketHandle *)pSocketHandle)->Write((const LPBYTE)pData, nLen, NULL);
  39. }
  40. void CTcpParse::ProcessSingleVarOnline(void *pSocketHandle, void *pData, int nLen)
  41. {
  42. }
  43. void CTcpParse::ProcessMulVarOnline(void *pSocketHandle, void *pData, int nLen)
  44. {
  45. }
  46. int CTcpParse::GetVarstatus(float fParaValue, int iUpperLimit, int iLowerLimit, int iNormalState)
  47. {
  48. int iResult = iNormalState;
  49. if ( (iUpperLimit > 0 || iLowerLimit > 0) && iUpperLimit > iLowerLimit )
  50. {
  51. //iResult = (iParaValue >= iUpperLimit || iParaValue <= iLowerLimit);
  52. if( fParaValue > iUpperLimit )
  53. {
  54. iResult = UPPER_LIMIT_ID; // 上限告警
  55. }
  56. if( fParaValue < iLowerLimit )
  57. {
  58. iResult = LOWER_LIMIT_ID; // 下限告警
  59. }
  60. else
  61. {
  62. return iResult;
  63. }
  64. }
  65. else if( (int)fParaValue != iNormalState )
  66. {
  67. iResult = (int)fParaValue;
  68. }
  69. return iResult;
  70. }
  71. void CTcpParse::ProcessReadSingleVarData(void *pSocketHandle, void *pData, int nLen)
  72. {
  73. ReqSingleVarData *pReqSingleVarData = (ReqSingleVarData *)pData;
  74. CAnalog *pAnalog = pVariantsManager->FindAnalog( pReqSingleVarData->nVarID );
  75. if( pAnalog==NULL )
  76. return;
  77. //if( pAnalog->m_nVarID==41 )
  78. // LOG4C((LOG_NOTICE, "%s, 值: %d A", pAnalog->m_strDesc,(int)pAnalog->m_fData ));
  79. pAnalog->m_fData = (float)pReqSingleVarData->Data;
  80. //if( (int)pAnalog->m_fData==0 )
  81. //{
  82. // CString s;s.Format( "%f",pAnalog->m_fData );
  83. // if( -1 != s.Find("-") )
  84. // pAnalog->m_fData = 0.0;
  85. // //LOG4C((LOG_NOTICE, "%s, 值: %d %s ", pAnalog->m_strDesc,(int)pAnalog->m_fData,s ));
  86. //}
  87. //LOG4C(( LOG_NOTICE,"RRRRR var=%s %d m_fData=%d",pAnalog->m_strDesc,pAnalog->m_nVarTypeID,(int)pAnalog->m_fData ));
  88. //if( pReqSingleVarData->nVarID==19 )
  89. //{
  90. // LOG4C((LOG_NOTICE, "%s %d %d",pReqSingleVarData->DevUid,pReqSingleVarData->nStatus,(int)pReqSingleVarData->Data));
  91. //}
  92. }
  93. void CTcpParse::ProcessReadSpecialMulVarData(void *pSocketHandle, void *pData, int nLen)
  94. {
  95. }
  96. void CTcpParse::ProcessReadSpecialSingleVarData(void *pSocketHandle, void *pData, int nLen)
  97. {
  98. ReqSingleSpecialVarData *pReqSingleSpecialVarData = (ReqSingleSpecialVarData *)pData;
  99. CAnalog *pAnalog = pVariantsManager->FindAnalog( pReqSingleSpecialVarData->iVarid );
  100. if( pAnalog==NULL )
  101. return;
  102. //if( pAnalog->m_nVarID==41 )
  103. // LOG4C((LOG_NOTICE, "%s, 值: %d B", pAnalog->m_strDesc,(int)pAnalog->m_fData ));
  104. pAnalog->m_fData = (float)pReqSingleSpecialVarData->Data;
  105. //if( (int)pAnalog->m_fData==0 )
  106. //{
  107. // CString s;s.Format( "%f",pAnalog->m_fData );
  108. // if( -1 != s.Find("-") )
  109. // pAnalog->m_fData = 0.0;
  110. // //LOG4C((LOG_NOTICE, "%s, 值: %d %s ", pAnalog->m_strDesc,(int)pAnalog->m_fData,s ));
  111. //}
  112. //LOG4C(( LOG_NOTICE,"RRRRR var=%s %d m_fData=%d",pAnalog->m_strDesc,pAnalog->m_nVarTypeID,(int)pAnalog->m_fData ));
  113. //if( pReqSingleSpecialVarData->iVarid==19 )
  114. //{
  115. // LOG4C((LOG_NOTICE, "%s %d %d",pReqSingleSpecialVarData->DevUid,pReqSingleSpecialVarData->nStatus,(int)pReqSingleSpecialVarData->Data));
  116. //}
  117. }
  118. void CTcpParse::ProcessReadMulVarData(void *pSocketHandle, void *pData, int nLen)
  119. {
  120. }
  121. void CTcpParse::ProcessWriteSingleVarData(void *pSocketHandle, void *pData, int nLen)
  122. {
  123. ReqWrSingleVarData *pReqWrSingleVarData = (ReqWrSingleVarData*)pData;
  124. CAnalog *pAnalog = pVariantsManager->FindAnalog( pReqWrSingleVarData->iVarid );
  125. if( pAnalog==NULL )
  126. return;
  127. }
  128. void CTcpParse::ProcessWriteMulVarData(void *pSocketHandle, void *pData, int nLen)
  129. {
  130. }
  131. void CTcpParse::ProcessDogData(void *pSocketHandle, void *pData, int nLen)
  132. {
  133. ReqDogData *pReqDogData = (ReqDogData *)pData;
  134. if( pReqDogData->nPastDue==1 )
  135. pDevicesManager->m_bIsPastDue = true;
  136. else
  137. pDevicesManager->m_bIsPastDue = false;
  138. pDevicesManager->m_nSlaveVersion = pReqDogData->SlaveVersion;
  139. pDevicesManager->m_sPassDueInfo.Format( "%s",pReqDogData->ErrorInfo );
  140. }
  141. void CTcpParse::ProcessAlarmConfirm(void *pSocketHandle, void *pData, int nLen)
  142. {
  143. ReqAlarmConfirm *pReqAlarmConfig = (ReqAlarmConfirm *)pData;
  144. pEventServer->SetEventStatus2Config( pReqAlarmConfig->DevUid,pReqAlarmConfig->iVarid,pReqAlarmConfig->nAlarmIndex );
  145. }
  146. int CTcpParse::OnCmdProcess(void *pSocketHandle, void *pData)
  147. {
  148. ProtocolHeader *pHeader = (ProtocolHeader *)pData;
  149. if( pHeader == NULL ) return -1;
  150. if( pHeader->nLen < 0 || pHeader->nLen > 65535 ) return -1;
  151. unsigned int tmp = CalcCheckSum(pHeader, pHeader->nLen);
  152. if( tmp != pHeader->Verify )
  153. {
  154. return -1;
  155. }
  156. switch( pHeader->nCmd )
  157. {
  158. case CMD_DEV_ONLINE: // 请求设备在线回应
  159. ProcessDevOnline(pSocketHandle, pData, pHeader->nLen);
  160. break;
  161. case CMD_SINGLE_VAR_ONLINE: // 请求单个变量在线回应
  162. ProcessSingleVarOnline(pSocketHandle, pData, pHeader->nLen);
  163. break;
  164. case CMD_MUL_VAR_ONLINE: // 请求多个变量在线回应
  165. ProcessMulVarOnline(pSocketHandle, pData, pHeader->nLen);
  166. break;
  167. case CMD_READ_SINGLE_VAR_DATA: // 请求单个变量内容回应
  168. ProcessReadSingleVarData(pSocketHandle, pData, pHeader->nLen);
  169. break;
  170. case CMD_READ_MUL_VAR_DATA: // 请求多个变量内容回应
  171. ProcessReadMulVarData(pSocketHandle, pData, pHeader->nLen);
  172. break;
  173. case CMD_WRITE_SINGLE_VAR_DATA: // 请求写单个变量回应
  174. ProcessWriteSingleVarData(pSocketHandle, pData, pHeader->nLen);
  175. break;
  176. case CMD_WRITE_MUL_VAR_DATA: // 请求写多个变量回应
  177. ProcessWriteMulVarData(pSocketHandle, pData, pHeader->nLen);
  178. break;
  179. case CMD_READ_SPECIAL_SINGLE_VAR_DATA:
  180. ProcessReadSpecialSingleVarData(pSocketHandle, pData, pHeader->nLen);
  181. break;
  182. case CMD_READ_SPECIAL_MUL_VAR_DATA:
  183. ProcessReadSpecialMulVarData(pSocketHandle, pData, pHeader->nLen);
  184. break;
  185. case CMD_DOG_DATA: // 请求狗数据回应
  186. ProcessDogData(pSocketHandle, pData, pHeader->nLen);
  187. break;
  188. case CMD_ALARM_CONFIRM: // 报警确认
  189. ProcessAlarmConfirm(pSocketHandle, pData, pHeader->nLen);
  190. break;
  191. case CMD_HEART:
  192. ProcessHeart(pSocketHandle, pData, pHeader->nLen);
  193. break;
  194. case CMD_ALARM_VAR_DATA: // 有通知产生
  195. ProcessAlarmData(pSocketHandle, pData, pHeader->nLen);
  196. break;
  197. case CMD_GET_SERVER_VAR:
  198. ProcessServerVer(pSocketHandle, pData, pHeader->nLen);
  199. break;
  200. case CMD_OTHER_INFO:
  201. ProcessOtherInfo(pSocketHandle, pData, pHeader->nLen);
  202. break;
  203. }
  204. return 0;
  205. }
  206. void CTcpParse::ProcessData(void *pSocketHandle, const BYTE* pData, DWORD nLen)
  207. {
  208. DWORD nBuffIndex = 0;
  209. CSocketHandle* pSH = (CSocketHandle *)pSocketHandle;
  210. EnterCriticalSection( &(pSH->m_hClient2SrvSection) );
  211. while( nBuffIndex < nLen )
  212. {
  213. //LOG4C((LOG_NOTICE, "接收长度=%d, 处理长度=%d, PendingSize=%d", nLen, nBuffIndex, pSH->m_nPendingSize));
  214. ProtocolHeader *pHeader; //当前协议包头
  215. DWORD nProcessedLen = 0; //当前循环处理了多少个字节
  216. if( pSH->m_nPendingSize > 0 ) // 开始组包
  217. {
  218. //LOG4C((LOG_NOTICE, "开始组包"));
  219. pHeader = (ProtocolHeader *)pSH->m_PendingBuffer;
  220. if( pSH->m_nPendingSize < sizeof(ProtocolHeader) ) //上一次接收到的长度小于包头
  221. {
  222. DWORD nLinkHeaderLen = sizeof( ProtocolHeader ) - pSH->m_nPendingSize;
  223. if( nLinkHeaderLen <= nLen ) //这次可以收完包头
  224. {
  225. memcpy( &pSH->m_PendingBuffer[ pSH->m_nPendingSize ], pData, nLinkHeaderLen ); //这里已经收完Header
  226. nProcessedLen = pHeader->nLen - pSH->m_nPendingSize;
  227. if( nProcessedLen <= nLen ) //如果所需处理的长度小于等于当前包长度
  228. {
  229. memcpy( &pSH->m_PendingBuffer[ sizeof( ProtocolHeader ) ],
  230. & ( ( char *) pData )[ nLinkHeaderLen ],
  231. pHeader->nLen - sizeof( ProtocolHeader ) );
  232. //LOG4C((LOG_NOTICE, "收完所需的包"));
  233. pSH->m_nPendingSize = 0; // 收完所需的包,置m_nPendingSize为0
  234. }
  235. else
  236. {
  237. int nTemp = nLen - nLinkHeaderLen; //除去头剩余部分的长度
  238. if ( nTemp > 0 ) //刚好是Header的长度,不用拷贝内存,所以这里加了>0的判断
  239. {
  240. memcpy( &pSH->m_PendingBuffer[ sizeof( ProtocolHeader ) ],
  241. & ( ( char *) pData )[ nLinkHeaderLen ],
  242. nTemp );
  243. }
  244. pSH->m_nPendingSize += nLen;
  245. }
  246. }
  247. else //这次还是没有收完包头, 继续Pending
  248. {
  249. //LOG4C((LOG_NOTICE, "这次还是没有收完包头, 继续Pending"));
  250. memcpy( &pSH->m_PendingBuffer[ pSH->m_nPendingSize ], pData, nLen );
  251. pSH->m_nPendingSize += nLen;
  252. nProcessedLen = nLen;
  253. }
  254. }
  255. else //Header部分已经在阻塞的缓冲区中
  256. {
  257. nProcessedLen = pHeader->nLen - pSH->m_nPendingSize;
  258. if ( nProcessedLen <= nLen ) //如果需要处理的长度小于现有包的长度
  259. {
  260. memcpy( &pSH->m_PendingBuffer[ pSH->m_nPendingSize ], pData, nProcessedLen );
  261. pSH->m_nPendingSize = 0;
  262. }
  263. else //否则要继续阻塞
  264. {
  265. memcpy( &pSH->m_PendingBuffer[ pSH->m_nPendingSize ], pData, nLen );
  266. pSH->m_nPendingSize += nLen;
  267. }
  268. }
  269. }
  270. else //第一次接包
  271. {
  272. //LOG4C((LOG_NOTICE, "第一次接包"));
  273. pHeader = (ProtocolHeader *)&( (unsigned char *)pData )[nBuffIndex];
  274. if( nLen - nBuffIndex < sizeof(ProtocolHeader) ) // 没有收够包头,先记录当前收到的Buffer
  275. {
  276. //如果第一次接包就没有收够包头,认为是非法包,扔掉,就是说已处理的长度nProcessedLen = 0
  277. pSH->m_nPendingSize = nLen - nBuffIndex;
  278. memcpy(pSH->m_PendingBuffer, pHeader, pSH->m_nPendingSize);
  279. LOG4C((LOG_NOTICE, "第一次接包就没有收够包头,认为是非法包,扔掉"));
  280. }
  281. else
  282. {
  283. nProcessedLen = pHeader->nLen;
  284. if( (int)pHeader->nLen > nLen - nBuffIndex )
  285. {
  286. memcpy(pSH->m_PendingBuffer, pHeader, nLen - nBuffIndex);
  287. //如果第一次接包,pHeader->nLen大于当前包的总长,认为是非法包,扔掉
  288. if( nBuffIndex == 0 )
  289. {
  290. //组包错误,则扔掉当前包
  291. LOG4C((LOG_NOTICE, "第一次接包,服务器pHeader->nLen大于当前包的总长,认为是非法包,扔掉\r\n"));
  292. }
  293. pSH->m_nPendingSize = nLen - nBuffIndex;
  294. nProcessedLen = nLen - nBuffIndex;
  295. }
  296. else
  297. {
  298. //LOG4C((LOG_NOTICE, "正常包"));
  299. pSH->m_nPendingSize = 0;
  300. }
  301. }
  302. }
  303. if ( nProcessedLen == 0 )
  304. {
  305. // 没有收够包头,认为是非法包,扔掉
  306. LOG4C((LOG_NOTICE, "没有收够包头,认为是非法包,扔掉"));
  307. break;
  308. }
  309. if ( pSH->m_nPendingSize == 0 )
  310. {
  311. if ( pHeader->nLen > SOCKET_BUFFSIZE )
  312. {
  313. // 包长度超过限制
  314. LOG4C((LOG_NOTICE, "pHeader->nLen超过限制"));
  315. }
  316. if(-1 == OnCmdProcess( pSocketHandle, pHeader ))
  317. {
  318. //MessageBox( NULL, "Error OnCmdProcess", NULL, MB_OK );
  319. LOG4C((LOG_NOTICE, "Error OnCmdProcess"));
  320. break;
  321. }
  322. }
  323. nBuffIndex += nProcessedLen;
  324. }
  325. LeaveCriticalSection( &(pSH->m_hClient2SrvSection) );
  326. }
  327. BOOL CTcpParse::SendNoticeToServer( void *pSocketHandle, int iCmd,int iOperateType,CString sUserName,CString sUID,int iVarID )
  328. {
  329. if( pSocketHandle==NULL )
  330. return FALSE;
  331. switch( iCmd )
  332. {
  333. case 5004:
  334. {
  335. NoticeReadVar tag;
  336. int nLen = sizeof( NoticeReadVar );
  337. memset( &tag,0,nLen );
  338. tag.Header.nLen = nLen;
  339. tag.Header.nCmd = iCmd;
  340. tag.Header.nCmdType = 0;
  341. strcpy( (char *)tag.DevUid, (char *)(LPCTSTR)sUID );
  342. tag.iVarid = iVarID;
  343. tag.iOperateType = iOperateType;
  344. tag.Header.Verify = CalcCheckSum( (void *)&tag,nLen );
  345. ((CSocketHandle *)pSocketHandle)->Write((const LPBYTE)&tag, nLen, NULL);
  346. }
  347. break;
  348. case 5005:
  349. {
  350. NoticeReadDev tag;
  351. int nLen = sizeof( NoticeReadDev );
  352. memset( &tag,0,nLen );
  353. tag.Header.nLen = nLen;
  354. tag.Header.nCmd = iCmd;
  355. tag.Header.nCmdType = 0;
  356. strcpy( (char *)tag.DevUid, (char *)(LPCTSTR)sUID );
  357. tag.iOperateType = iOperateType;
  358. tag.Header.Verify = CalcCheckSum( (void *)&tag,nLen );
  359. ((CSocketHandle *)pSocketHandle)->Write((const LPBYTE)&tag, nLen, NULL);
  360. }
  361. break;
  362. case 5006:
  363. {
  364. NoticeReadUser tag;
  365. int nLen = sizeof( NoticeReadUser );
  366. memset( &tag,0,nLen );
  367. tag.Header.nLen = nLen;
  368. tag.Header.nCmd = iCmd;
  369. tag.Header.nCmdType = 0;
  370. strcpy( (char *)tag.UserName, (char *)(LPCTSTR)sUserName );
  371. tag.iOperateType = iOperateType;
  372. tag.Header.Verify = CalcCheckSum( (void *)&tag,nLen );
  373. ((CSocketHandle *)pSocketHandle)->Write((const LPBYTE)&tag, nLen, NULL);
  374. }
  375. break;
  376. }
  377. return true;
  378. }
  379. BOOL CTcpParse::GetServerVer( void *pSocketHandle )
  380. {
  381. if( pSocketHandle==NULL )
  382. return FALSE;
  383. ServerVer tag;
  384. int nLen = sizeof( ServerVer );
  385. memset( &tag,0,nLen );
  386. tag.Header.nLen = nLen;
  387. tag.Header.nCmd = CMD_GET_SERVER_VAR;
  388. tag.Header.nCmdType = 0;
  389. tag.Header.Verify = CalcCheckSum( (void *)&tag,nLen );
  390. ((CSocketHandle *)pSocketHandle)->Write((const LPBYTE)&tag, nLen, NULL);
  391. return TRUE;
  392. }
  393. BOOL CTcpParse::TestAlarm( void *pSocketHandle )
  394. {
  395. if( pSocketHandle==NULL )
  396. return FALSE;
  397. ProtocolHeader Header;
  398. int nLen = sizeof( ProtocolHeader );
  399. memset( &Header,0,nLen );
  400. Header.nLen = nLen;
  401. Header.nCmd = 5007;
  402. Header.nCmdType = 0;
  403. Header.Verify = CalcCheckSum( (void *)&Header,nLen );
  404. ((CSocketHandle *)pSocketHandle)->Write((const LPBYTE)&Header, nLen, NULL);
  405. return TRUE;
  406. }
  407. BOOL CTcpParse::ConfigAlarm( void *pSocketHandle,CString sUID,int iVarID,int iStatus,int iAlarmIndex )
  408. {
  409. AlarmConfirm tag;
  410. int nLen = sizeof( AlarmConfirm );
  411. memset( &tag,0,nLen );
  412. tag.Header.nLen = nLen;
  413. tag.Header.nCmd = CMD_ALARM_CONFIRM;
  414. tag.Header.nCmdType = 0;
  415. strcpy( (char *)tag.DevUid, (char *)(LPCTSTR)sUID );
  416. tag.iVarid = iVarID;
  417. tag.nStauts = iStatus;
  418. tag.nAlarmIndex = iAlarmIndex;
  419. tag.Header.Verify = CalcCheckSum( (void *)&tag,nLen );
  420. ((CSocketHandle *)pSocketHandle)->Write((const LPBYTE)&tag, nLen, NULL);
  421. return TRUE;
  422. }
  423. void CTcpParse::ProcessAlarmData(void *pSocketHandle, void *pData, int nLen)
  424. {
  425. AutoSendAlarmData *pAlarmData = (AutoSendAlarmData *)pData;
  426. CString sUid,str;
  427. sUid.Format( "%s",pAlarmData->DevUid );
  428. if( pVariantsManager->m_SADeviceUid.GetCount()>0 )
  429. {
  430. bool bExist=false;
  431. for( int i=0;i<pVariantsManager->m_SADeviceUid.GetCount();i++ )
  432. {
  433. str = pVariantsManager->m_SADeviceUid.GetAt( i );
  434. if( str.Find(sUid)!=-1 )
  435. {
  436. bExist = true;
  437. break;
  438. }
  439. }
  440. if( !bExist )
  441. {
  442. LOG4C((LOG_NOTICE, "设备%s 不是本地区的,不在本客户端显示",sUid));
  443. return;
  444. }
  445. }
  446. pEventServer->AddAlarmEvent(
  447. pAlarmData->DevUid,
  448. pAlarmData->nVarID,
  449. pAlarmData->nStatus,
  450. pAlarmData->sContent,
  451. pAlarmData->Data,
  452. pAlarmData->nUpperLimit,
  453. pAlarmData->nLowerLimit,
  454. pAlarmData->nNormalState,
  455. pAlarmData->nAlarmState,
  456. pAlarmData->nWarningLevel,
  457. pAlarmData->nAlarmIndex,
  458. pAlarmData->nNoticeDelay,
  459. pAlarmData->sWarningTime
  460. );
  461. }
  462. void CTcpParse::ProcessServerVer(void *pSocketHandle, void *pData, int nLen)
  463. {
  464. ServerVer *tag = (ServerVer *)pData;
  465. pDevicesManager->m_sServerVer.Format( "%s",tag->Ver );
  466. }
  467. void CTcpParse::ProcessOtherInfo(void *pSocketHandle, void *pData, int nLen)
  468. {
  469. OtherInfo *tag = (OtherInfo *)pData;
  470. if( tag->nMainType==1 && ( tag->nSlaveType==0 || tag->nSlaveType==1 ) )//手机卡和试用期共用
  471. {
  472. pDevicesManager->m_bIsBlanceSmall = false;
  473. pDevicesManager->m_sBanceContent.Format( "%s",tag->sData1 );
  474. }
  475. //pDevicesManager->m_sServerVer.Format( "%s",tag->Ver );
  476. }