ProcSM.cpp
上传用户:yffx2008
上传日期:2014-10-12
资源大小:12414k
文件大小:36k
源码类别:

交通/航空行业

开发平台:

Visual C++

  1. // ProcSM.cpp: implementation of the CProcSM class.
  2. //
  3. ///////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "GpsSC.h"
  6. #include "ProcSM.h"
  7. #include "Unicode.h"
  8. #include "Afxcoll.h"
  9. #include "Afxmt.h"
  10. #include "SysIniteDlg.h"
  11. #include "TreeCtrlEx.h"
  12. #include "VehicleMessageSet.h"
  13. #include "ClientinfoSet.h"
  14. #include "MainFrm.h"
  15. #include "DiverNumberDlg.h"
  16. #include "UserTypeDlg.h"
  17. #include "MonitorDlg.h"
  18. #include "ChooseTimeDlg.h"
  19. #include "ChangePassWordDlg.h"
  20. #include "ComUserDlg.h"
  21. #include "GpsScView.h"
  22. #include "SMdata.h"
  23. #include "ctype.h"
  24. #ifdef _DEBUG
  25. #undef THIS_FILE
  26. static char THIS_FILE[]=__FILE__;
  27. #define new DEBUG_NEW
  28. #endif
  29. //////////////////////////////////////////////////////////////////////
  30. // Construction/Destruction
  31. //////////////////////////////////////////////////////////////////////
  32. //the globale data
  33. CString strToBeWriteToComm; //最终将要发送到串行口的字符串
  34. CGpsSCDoc* m_pDoc; //the ducument pointor for send message
  35. CStringList gStringList;
  36. CCriticalSection m_cMessageDealer; //the critical varaible
  37. CString strToBeJudge(""); //the string to be process
  38. //the thread fuction for write somthing to the comm
  39. UINT WriteThread(LPVOID lparam)
  40. {
  41. CProcSM * m_pProcsm = (CProcSM *) lparam;
  42. while(1) {
  43. if(strToBeWriteToComm.IsEmpty()) Sleep(10);
  44. if(m_pDoc->m_bConnected == FALSE) continue;
  45. if((strToBeWriteToComm.GetLength() != 0) && (m_pDoc != NULL)) {
  46. m_pProcsm->WriteComPort(strToBeWriteToComm,m_pDoc);
  47. strToBeWriteToComm.Empty();
  48. }
  49. }
  50. return 1;
  51. }
  52. //THE process thread
  53. UINT ProcessThread(LPVOID lparam)
  54. {
  55. CProcSM *pProcsm = (CProcSM*)lparam;
  56. while(1) {
  57. Sleep(1000);
  58. if(gStringList.GetCount() != 0) {
  59. strToBeJudge.Empty();
  60. for(int k = 0; k < gStringList.GetCount(); k++) {
  61. strToBeJudge += gStringList.GetAt(gStringList.FindIndex(k));
  62. }
  63. }
  64. if(!strToBeJudge.IsEmpty()) {
  65. pProcsm->JudgeReceivedMsg(strToBeJudge);
  66. }
  67. m_cMessageDealer.Lock();
  68. if(!strToBeJudge.IsEmpty()) strToBeJudge.Empty();
  69. m_cMessageDealer.Unlock();
  70. }
  71. }
  72. CProcSM::CProcSM()
  73. {
  74. strToBeWriteToComm = "";            //最终将要发送到串行口的字符串
  75. m_sVehicleNumber        = "13751709724";
  76. m_strDriverNumber = "13751709724";
  77. strCommonUserPassWord = "123456";
  78. m_bWaveComInite = TRUE;
  79. m_nUserType = 0;
  80. m_bSysTemInit = FALSE;
  81. m_pView = NULL;
  82. m_sCurrMonitorCar.Empty();
  83. m_sGetPositionCar.Empty();
  84. }
  85. CProcSM::~CProcSM()
  86. {
  87. }
  88. CString CProcSM::ConstructSendstr(CString strOrder,CString m_sVehicleNumber,CString strSMConttent)
  89. {
  90. CString  str2Send;
  91. str2Send.Empty();
  92. str2Send += strOrder;
  93. str2Send += """;
  94. str2Send += m_sVehicleNumber;
  95. str2Send += ""r";
  96. str2Send += strSMConttent;
  97. str2Send += "x1ar";
  98. return str2Send;
  99. }
  100. /********************************************************************/
  101. //a reload function
  102. //the software send to the wavecom chip,all the order is command
  103. //so the mSleepTime only depend on the order not depend on the 
  104. //conttent of the smconttetn ,because the scconttent is the order 
  105. /********************************************************************/
  106. void CProcSM::SetStr2Send(CString sSendStr)
  107. {
  108. if(!m_bWaveComInite) {
  109. AfxMessageBox("电话系统没有初始化n,请初始化电话系统!");
  110. return;
  111. }
  112. if(!sSendStr.IsEmpty()) strToBeWriteToComm = sSendStr;
  113. }
  114. void CProcSM::JudgeReceivedMsg(CString strReceived)
  115. {
  116. if(strReceived.IsEmpty()) return;
  117. strReceived.Replace(" ","");
  118. CString SM_Num,ShortMessage;
  119. int nFind;
  120. SM_Num = NewSMIndication(strReceived);
  121. if(SM_Num != "") {
  122. nFind = strReceived.Find("CMGR");
  123. if(nFind == -1) {
  124. m_cMessageDealer.Lock();
  125. strToBeWriteToComm = READONESHORTMESSAGE;
  126. strToBeWriteToComm.Replace("XXX",SM_Num);
  127. m_cMessageDealer.Unlock();
  128. return ;
  129. }
  130. }
  131. //读完一条短信息并处理后,立即删除刚读的那一条短信息
  132. SM_Num = GetNewSMData(strReceived,ShortMessage);
  133. if(!SM_Num.IsEmpty()) {
  134. m_cMessageDealer.Lock();
  135. ProcShortMessage(ShortMessage);
  136. strToBeWriteToComm  = DELONESHORTMESSAGE;
  137. strToBeWriteToComm.Replace("XXX",SM_Num);
  138. m_cMessageDealer.Unlock();
  139. }
  140. SendMessageResult(strReceived);
  141. ClearStrList();
  142. DealSystemMsg(strReceived);
  143. }
  144. void CProcSM::ClearStrList()
  145. {
  146. m_cMessageDealer.Lock();
  147. if(!gStringList.IsEmpty()) gStringList.RemoveAll();
  148. m_cMessageDealer.Unlock();
  149. }
  150. void CProcSM::ClearVehicleList()
  151. {
  152. m_lCurrMonitorVehicle.RemoveAll();
  153. }
  154. void CProcSM::SendMessageResult(CString strReceived)
  155. {
  156. if(strReceived.IsEmpty()) return ;
  157. int  nFind1, nFind2;
  158. nFind1 = strReceived.Find("+CMGS");
  159. nFind2 = strReceived.Find("OK");
  160. if((nFind1 != -1) && (nFind2 != -1)) {
  161. // AfxMessageBox("短信发送成功!");
  162. }
  163. nFind1 = strReceived.Find("+CMGS");
  164. nFind2 = strReceived.Find("ERROR");
  165. if((nFind1 != -1) && (nFind2 != -1)) {
  166. // AfxMessageBox("短信发送失败!");
  167. }
  168. }
  169. CString CProcSM::GetNewSMData(CString strReceived,CString &sMessage)
  170. {
  171. if(strReceived.IsEmpty()) return "";
  172. CString SM_Num(""),Data;
  173. int  nFind1, nFind2, i;
  174. char chr;
  175. nFind1 = strReceived.Find("AT+CMGR=");
  176. if(nFind1 != -1) {
  177. for(i = nFind1 + 8; i < strReceived.GetLength(); i++) {
  178. chr = strReceived.GetAt(i);
  179. if(isalnum(chr)) SM_Num += chr;
  180. else break;
  181. if((chr == 'r') || (chr == 'n')) break;
  182. }
  183. }
  184. nFind1 = strReceived.Find("READ");
  185. nFind2 = strReceived.Find("OK");
  186. if((nFind1 != -1) && (nFind2 != -1)) {
  187. sMessage = GetSpecialStr(strReceived,nFind1 + 6,nFind2);
  188. }
  189. return SM_Num;
  190. }
  191. void CProcSM::ProcShortMessage(CString sMessage)
  192. {
  193. CVehicleMessageSet messageSet;
  194. CClientinfoSet clientinfoSet;
  195. CMainFrame *pMainFrame = NULL;
  196. CString sTel,sDate,sUnico,sAnsi;
  197. CString sID,sState,sPos,sGx,sGy,sSpeed,sDriver;
  198. int nFind1,nFind2,Len;
  199. sTel.Empty(); sDate.Empty(); sUnico.Empty(); sAnsi.Empty(); sID.Empty();
  200. sState.Empty(); sPos.Empty(); sGx.Empty(); sGy.Empty(); sSpeed.Empty(); sDriver.Empty();
  201. sMessage.Replace("r","");
  202. sMessage.Replace("n","");
  203. sMessage.Replace(" ","");
  204. // WriteToFile("Message.txt",sMessage);
  205. Len = sMessage.GetLength();
  206. nFind1 = sMessage.Find(""");
  207. nFind2 = sMessage.Find(""",nFind1 + 1);
  208. sTel = GetSpecialStr(sMessage,nFind1 + 1, nFind2);
  209. sTel = sTel.Right(11);
  210. nFind1 = sMessage.Find(""",nFind2 + 1);
  211. nFind2 = sMessage.Find(""",nFind1 + 1);
  212. sDate = GetSpecialStr(sMessage,nFind1 + 1, nFind2);
  213. sUnico = GetSpecialStr(sMessage,nFind2 + 1,Len);
  214. sAnsi = UnicodeStr2AnsiStr(sUnico);
  215. if(sAnsi.Find("指令已经执行") != -1) { //判断是否自动监控
  216. AfxMessageBox("自动监控指令已经执行!");
  217. return;
  218. }
  219. if(sAnsi.Find("密码错误") != -1) {
  220. return;
  221. }
  222. nFind1 = sAnsi.Find('r');
  223. if(nFind1 != -1) {
  224. sID = GetSpecialStr(sAnsi,0,nFind1);
  225. sAnsi = sAnsi.Mid(nFind1 + 1);
  226. }
  227. nFind1 = sID.Find(":");
  228. if(nFind1 != -1) sID = sID.Mid(nFind1 + 1);
  229. nFind1 = sAnsi.Find('r');
  230. if(nFind1 != -1) {
  231. sState = GetSpecialStr(sAnsi,0,nFind1);
  232. sAnsi = sAnsi.Mid(nFind1 + 1);
  233. }
  234. nFind1 = sState.Find(":");
  235. if(nFind1 != -1) sState = sState.Mid(nFind1 + 1);
  236. nFind1 = sAnsi.Find('r');
  237. if(nFind1 != -1) {
  238. sPos = GetSpecialStr(sAnsi,0,nFind1);
  239. sAnsi = sAnsi.Mid(nFind1 + 1);
  240. }
  241. nFind1 = sPos.Find(":");
  242. if(nFind1 != -1) sPos = sPos.Mid(nFind1 + 1);
  243. nFind1 = sAnsi.Find('r');
  244. if(nFind1 != -1) {
  245. sGx = GetSpecialStr(sAnsi,0,nFind1);
  246. sAnsi = sAnsi.Mid(nFind1 + 1);
  247. }
  248. nFind1 = sGx.Find(":");
  249. if(nFind1 != -1) sGx = sGx.Mid(nFind1 + 1);
  250. nFind1 = sAnsi.Find('r');
  251. if(nFind1 != -1) {
  252. sGy = GetSpecialStr(sAnsi,0,nFind1);
  253. sAnsi = sAnsi.Mid(nFind1 + 1);
  254. }
  255. nFind1 = sGy.Find(":");
  256. if(nFind1 != -1) sGy = sGy.Mid(nFind1 + 1);
  257. // nFind1 = sAnsi.Find('r');
  258. // if(nFind1 != -1) {
  259. // sSpeed = GetSpecialStr(sAnsi,0,nFind1);
  260. // }
  261. sSpeed = sAnsi;
  262. nFind1 = sSpeed.Find(":");
  263. if(nFind1 != -1) sSpeed = sSpeed.Mid(nFind1 + 1);
  264. if(sGx.IsEmpty() || sGy.IsEmpty()) return ;
  265. clientinfoSet.FindClientinfo(sTel,sDriver,sID);
  266. ChangLGAndLt(sGx,sGy,sID,sTel);
  267. messageSet.AddMessage(sTel,sDate,sState,sPos,sGx,sGy,sSpeed);
  268. pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
  269. if(pMainFrame != NULL) {
  270. pMainFrame->Insert2ListCtrl(sID,sDriver,sDate,sSpeed,sGx,sGy,sState,sTel,sPos);
  271. }
  272. }
  273. CString CProcSM::NewSMIndication(CString strReceived)
  274. {
  275. if(strReceived.IsEmpty()) return "";
  276. int  nFind1, nFind2, i;
  277. nFind1 = strReceived.Find("CMTI");
  278. nFind2 = strReceived.Find("SM");
  279. if((nFind1 != -1) && (nFind2 != -1)) {
  280. strReceived = strReceived.Mid(nFind2 + 4);
  281. CString Str("");
  282. char chr;
  283. for(i = 0; i < strReceived.GetLength(); i++) {
  284. chr = strReceived.GetAt(i);
  285. if(isalnum(chr)) Str += chr;
  286. else break;
  287. if((chr == 'r') || (chr == 'n')) break;
  288. }
  289. return Str;
  290. }
  291. return "";
  292. }
  293. CString CProcSM::GetLenStr(CString DstStr,BYTE pos,BYTE Len)
  294. {
  295. CString RetStr("");
  296. BYTE i;
  297. for(i = pos; i < pos + Len; i++) {
  298. RetStr += DstStr.GetAt(i);
  299. }
  300. return RetStr;
  301. }
  302. CString CProcSM::GetSpecialStr(CString sSrcStr,long pos1,long pos2)
  303. {
  304. CString RetStr("");
  305. long i;
  306. for(i = pos1; i < pos2; i++) {
  307. RetStr += sSrcStr.GetAt(i);
  308. }
  309. return RetStr; 
  310. }
  311. /**********************************************/
  312. /*  read the serial port ,the function
  313. /*  return the numbers of the date
  314. /***********************************************/
  315. long CProcSM::ReadComPort(WPARAM wParam,CGpsSCDoc *pDoc)
  316. {
  317. if(!pDoc->m_bConnected || (wParam&EV_RXCHAR) != EV_RXCHAR) {
  318. SetEvent(pDoc->m_hPostMsgEvent);
  319. return 0L;
  320. }
  321. CString  strMessage;
  322. char buff[512];
  323. long nLength;
  324. nLength = pDoc->ReadComm(buff,512);
  325. buff[nLength] = 0;
  326. strMessage = buff;
  327. // WriteToFile("ReadMsg.txt",strMessage);
  328. if(nLength != 0) {
  329. gStringList.AddTail(strMessage);
  330. }
  331. SetEvent(pDoc->m_hPostMsgEvent); //允许发送下个 WM_COOMMNOTIFY 消息
  332. return 0L;
  333. }
  334. /****************************************/
  335. /*    write date to the serial port
  336. /****************************************/
  337. long CProcSM::WriteComPort(CString str2Write,CGpsSCDoc *pDoc)
  338. {
  339. if(str2Write.IsEmpty()) return 0;
  340. if(!(pDoc->m_bConnected)) {
  341. AfxMessageBox("串行口没有成功打开,请检查串行口!");
  342. return 0;
  343. }
  344. // WriteToFile("WriteMsg.txt",str2Write);
  345. COMSTAT ComStat;
  346. DWORD dwErrorFlags;
  347. BYTE Buf[512];
  348. BOOL fState;
  349. DWORD length = 0,i;
  350. length = str2Write.GetLength();
  351. if(length > 512) length = 512;
  352. for(i = 0; i < length; i++) Buf[i] = str2Write.GetAt(i);
  353. Buf[i] = 0;
  354. ClearCommError(pDoc->m_hCom,&dwErrorFlags,&ComStat);
  355. fState = WriteFile(pDoc->m_hCom,Buf,length,&length,&(pDoc->m_osWrite));
  356. if(!fState) {
  357. if(GetLastError()==ERROR_IO_PENDING) {
  358. GetOverlappedResult(pDoc->m_hCom,&(pDoc->m_osWrite),&length,TRUE); 
  359. }
  360. else {
  361. length = 0;
  362. }
  363. }
  364. return length;
  365. }
  366. /*************************************************/
  367. //function to deal systemstr
  368. /*************************************************/
  369. void CProcSM::DealSystemMsg(CString strReceived)
  370. {
  371. // WriteToFile("System.txt",strReceived);
  372. int Ask;
  373. strReceived.Replace("r","");
  374. strReceived.Replace("n","");
  375. strReceived.Replace(" ","");
  376. if(strReceived.Find(WAVECOMINITETEXTSUCCESS) != -1) { //Text方式
  377.   AfxMessageBox("监控中心电话初始化成功!");
  378. }
  379. else if (strReceived.Find(WAVECOMINITETEXTFAILE) != -1) { //Text方式
  380. Ask = AfxMessageBox("监控中心电话初始化失败,n是否重新初始化监控中心电话?",MB_YESNO);
  381. if(Ask == IDYES) SetStr2Send(WAVECOMINITETEXT);
  382. }
  383. else if (strReceived .Find(WAVECOMINITEPDUSUCCESS) !=-1) { //PDU方式
  384. AfxMessageBox("监控中心电话初始化成功!");
  385. }
  386.     else if (strReceived.Find(WAVECOMINITEPDUFAILE) != -1) { //PDU方式
  387. Ask = AfxMessageBox("监控中心电话初始化失败,n是否重新初始化监控中心电话?",MB_YESNO);
  388. if(Ask == IDYES) SetStr2Send(WAVECOMINITEPDU);
  389. }
  390. }
  391. //get gprmc data
  392. BOOL CProcSM::GetSubData(char * ReceData,CString *strLongitude,CString *strLatitude)
  393. {
  394. CString TmpStr1,TmpStr2;
  395. int DataPos = 0;
  396. INT strlength = strlen(ReceData);
  397. if (strlength >= 60)
  398. {
  399. TmpStr1 = GetString(ReceData,&DataPos); //用于去掉 "$GPRMC,"等字符
  400. }
  401. else
  402. {
  403. return false;
  404. }
  405. if(TmpStr1 == "$GPRMC")
  406. {
  407. TmpStr1 = GetString(ReceData,&DataPos); //获取GPS接收时间
  408. if(!TmpStr1.IsEmpty())
  409. {
  410. ;
  411. }
  412. else 
  413. {
  414. return false;
  415. }
  416. TmpStr1 = GetString(ReceData,&DataPos); //获取GPS接收状态
  417. TmpStr1 = GetString(ReceData,&DataPos); //获取GPS接收纬度
  418. if(!TmpStr1.IsEmpty()) 
  419. {
  420. *strLatitude = TmpStr1;
  421. }
  422. else 
  423. {
  424. return false;
  425. }
  426. TmpStr1 = GetString(ReceData,&DataPos); //获取GPS接收 南北方向
  427. TmpStr1 = GetString(ReceData,&DataPos); //获取GPS接收经度
  428. if(!TmpStr1.IsEmpty()) 
  429. {
  430. if(TmpStr1.GetLength() >9)
  431. *strLongitude = TmpStr1;
  432. }
  433. else 
  434. {
  435. return false;
  436. }
  437. }
  438. return true;
  439. }
  440. ///get string 
  441. CString CProcSM::GetString(char *pData, int *pos)
  442. {
  443. BYTE i = 0;
  444. char ArrStr[20];
  445. CString RetStr;
  446. RetStr = "";
  447. while (pData[*pos] != ',') {
  448. ArrStr[i] = pData[*pos];
  449. i++; (*pos)++;
  450. if(i == 20){
  451. return RetStr;
  452. }
  453. }
  454. ArrStr[i] = 0;
  455. (*pos)++;
  456. RetStr = ArrStr;
  457. return RetStr;
  458. }
  459. //congstruct the message whitch to be send to the vehicle and then send it to the vehicle;
  460. void CProcSM::SetMessageType(CString strVehicleNumber, CString strSMConttent)
  461. {
  462. CString str2Send("");
  463. if(!m_bWaveComInite)
  464. {
  465. AfxMessageBox("电话系统没有初始化,请初始化电话系统!");
  466. return;
  467. }
  468. str2Send = ConstructSendstr("AT+CMGS=",strVehicleNumber,strSMConttent);
  469. if(str2Send != "")
  470. {
  471. strToBeWriteToComm = str2Send ;
  472. }
  473. str2Send = "";
  474. }
  475. //begin the thread
  476. void CProcSM::BeginThread()
  477. {
  478. ::AfxBeginThread(WriteThread,this);
  479. ::AfxBeginThread(ProcessThread,this);
  480. }
  481. //set the doc prointer
  482. void CProcSM::SetDocPointer(CGpsSCDoc *pDoc)
  483. {
  484. m_pDoc = pDoc;
  485. }
  486. void CProcSM::WriteToFile(CString FileName,CString sInfo)
  487. {
  488. CFile f;
  489. if(!f.Open(FileName,CFile::modeReadWrite,NULL)) {
  490. if(!f.Open(FileName,CFile::modeCreate | CFile::modeReadWrite,NULL)) {
  491. AfxMessageBox("open file error!");
  492. return;
  493. }
  494. }
  495. f.SeekToEnd();
  496. CString s;
  497. s.Format("%s%c%c",sInfo,'r','n');
  498. f.Write(s,s.GetLength());
  499. f.Close();
  500. }
  501. //simulater the driver
  502. void CProcSM::SimulatorDriver()
  503. {
  504. CDiverNumberDlg numberdlg;
  505. CString strToSend("");
  506. numberdlg.m_strDriverNumber = m_strDriverNumber;
  507. if(numberdlg.DoModal() == IDOK)
  508. {
  509. int a =AfxMessageBox("确实要设定车主电话吗?",MB_YESNO);
  510. if(a = IDYES)
  511. {
  512. m_strDriverNumber.Empty();
  513. m_strDriverNumber = numberdlg.m_strDriverNumber;
  514. strToSend = SETHOSTTELNO;
  515. strToSend += m_strDriverNumber;
  516. strToSend += "#";
  517. SetMessageType(m_sVehicleNumber,strToSend);
  518. }
  519. }
  520. //change the la and lt
  521. void CProcSM::ChangLGAndLt(CString &strLongitude,CString &strLatitude,CString &strVehicleNO,CString &strTelNumber)
  522. {
  523. ((CGpsSCView *)m_pView)->SendGXGY(strLongitude, strLatitude,strVehicleNO,strTelNumber);
  524. }
  525. //systerm inite
  526. BOOL CProcSM::SystermInite(void * pView)
  527. {
  528. CRect rect;
  529. m_pView = (CGpsSCView *)pView;
  530. CSysIniteDlg *pdlg = new CSysIniteDlg();
  531. pdlg->Create(IDD_SYSINITEDLG,NULL);
  532. pdlg->ShowWindow(SW_SHOW);
  533. pdlg->CenterWindow(NULL);
  534. pdlg->m_strIniteText = "正在初始化系统,可能需要较长时间,请等待......";
  535. pdlg->UpdateData(FALSE);
  536. SetStr2Send(WAVECOMINITETEXT);
  537. SleepEx(1000,TRUE);
  538. SetStr2Send("AT+CMGD=1r");
  539. pdlg->m_strIniteText = "还剩余12秒......";
  540. pdlg->UpdateData(FALSE);
  541.    SleepEx(1000,TRUE);
  542. SetStr2Send("AT+CMGD=2r");
  543. SleepEx(1000,TRUE);
  544. pdlg->m_strIniteText = "还剩余11秒......";
  545. pdlg->UpdateData(FALSE);
  546. SetStr2Send("AT+CMGD=3r");
  547. SleepEx(1000,TRUE);
  548. pdlg->m_strIniteText = "还剩余10秒......";
  549. pdlg->UpdateData(FALSE);
  550. SetStr2Send("AT+CMGD=4r");
  551. SleepEx(1000,TRUE);
  552. pdlg->m_strIniteText = "还剩余9秒......";
  553. pdlg->UpdateData(FALSE);
  554. SetStr2Send("AT+CMGD=5r");
  555. SleepEx(1000,TRUE);
  556. pdlg->m_strIniteText = "还剩余8秒......";
  557. pdlg->UpdateData(FALSE);
  558. SetStr2Send("AT+CMGD=6r");
  559. SleepEx(1000,TRUE);
  560. pdlg->m_strIniteText = "还剩余7秒......";
  561. pdlg->UpdateData(FALSE);
  562. SetStr2Send("AT+CMGD=7r");
  563. SleepEx(1000,TRUE);
  564. pdlg->m_strIniteText = "还剩余6秒......";
  565. pdlg->UpdateData(FALSE);
  566. SetStr2Send("AT+CMGD=8r");
  567. SleepEx(1000,TRUE);
  568. pdlg->m_strIniteText = "还剩余5秒......";
  569. pdlg->UpdateData(FALSE);
  570. SetStr2Send("AT+CMGD=9r");
  571. SleepEx(1000,TRUE);
  572. pdlg->m_strIniteText = "还剩余4秒......";
  573. pdlg->UpdateData(FALSE);
  574. SetStr2Send("AT+CMGD=10r");
  575. SleepEx(1000,TRUE);
  576. pdlg->m_strIniteText = "还剩余3秒......";
  577. pdlg->UpdateData(FALSE);
  578. SetStr2Send("AT+CMGD=11r");
  579. SleepEx(1000,TRUE);
  580. pdlg->m_strIniteText = "还剩余2秒......";
  581. pdlg->UpdateData(FALSE);
  582. SetStr2Send("AT+CMGD=12r");
  583. SleepEx(1000,TRUE);
  584. pdlg->m_strIniteText = "还剩余1秒......";
  585. pdlg->UpdateData(FALSE);
  586. SetStr2Send("AT+CMGD=13r");
  587. SleepEx(1000,TRUE);
  588. pdlg->m_strIniteText = "还剩余1秒......";
  589. pdlg->UpdateData(FALSE);
  590. SetStr2Send("AT+CMGD=14r");
  591. SleepEx(1000,TRUE);
  592. pdlg->m_strIniteText = "还剩余1秒......";
  593. pdlg->UpdateData(FALSE);
  594. SetStr2Send("AT+CMGD=15r");
  595. SleepEx(1000,TRUE);
  596. pdlg->m_strIniteText = "还剩余1秒......";
  597. pdlg->UpdateData(FALSE);
  598.    pdlg->ShowWindow(SW_HIDE);
  599. pdlg->CloseWindow();
  600. pdlg->DestroyWindow();
  601. m_bSysTemInit = TRUE;
  602. return TRUE;
  603. }
  604. void CProcSM::OnGetvehicleposition(CString strItemText)
  605. {
  606. CMainFrame *pMainFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd; 
  607. CDlgAsCenterDlg dlg;
  608. bool Flag;
  609. if(pMainFrame == NULL) return;
  610. Flag = pMainFrame->m_wndTree1.GetCarPhoneAndPassword();
  611. if(m_nUserType == 0)
  612. {
  613. if(strItemText.IsEmpty()) {
  614. if(!Flag) {
  615. if(dlg.DoModal() == IDCANCEL) return;
  616. m_sVehicleNumber = dlg.m_strVehicleNo;
  617. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  618. SetMessageType(m_sVehicleNumber,GETPOSITION);
  619. }
  620. else {
  621. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  622. SetMessageType(m_sVehicleNumber,GETPOSITION);
  623. m_sGetPositionCar = m_sVehicleNumber;
  624. }
  625. }
  626. else {
  627. CClientinfoSet cSet;
  628. cSet.FindCarPswAndNO(strItemText,m_sVehicleNumber,m_strPassWord);
  629. SetMessageType(m_sVehicleNumber,GETPOSITION);
  630. m_sGetPositionCar = m_sVehicleNumber;
  631. }
  632. }
  633. else
  634. {
  635. if(strItemText.IsEmpty()) {
  636. if(!Flag) {
  637. if(dlg.DoModal() == IDCANCEL) return;
  638. CClientinfoSet cSet;
  639. m_sVehicleNumber = dlg.m_strVehicleNo;
  640. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  641. m_strPassWord  = cSet.GetPassword(m_sVehicleNumber);
  642. m_strPassWord += GETPOSITION;
  643. SetMessageType(m_sVehicleNumber,m_strPassWord);
  644. m_sGetPositionCar = m_sVehicleNumber;
  645. }
  646. else {
  647. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  648. m_strPassWord    = pMainFrame->m_wndTree1.m_strPassWord;
  649. m_strPassWord += GETPOSITION;
  650. SetMessageType(m_sVehicleNumber,m_strPassWord);
  651. m_sGetPositionCar = m_sVehicleNumber;
  652. }
  653. }
  654. else {
  655. CClientinfoSet cSet;
  656. cSet.FindCarPswAndNO(strItemText,m_sVehicleNumber,m_strPassWord);
  657. m_strPassWord += GETPOSITION;
  658. SetMessageType(m_sVehicleNumber,m_strPassWord);
  659. m_sGetPositionCar = m_sVehicleNumber;
  660. }
  661. }
  662. }
  663. //set the lock
  664. void CProcSM::OnSetlock(CString strItemText)
  665. {
  666. CMainFrame *pMainFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd; 
  667. CDlgAsCenterDlg dlg;
  668. bool Flag;
  669. if(pMainFrame == NULL) return;
  670. Flag = pMainFrame->m_wndTree1.GetCarPhoneAndPassword();
  671. if(m_nUserType == 0)
  672. {
  673. if(strItemText.IsEmpty()) {
  674. if(!Flag) {
  675. if(dlg.DoModal() == IDCANCEL) return;
  676. m_sVehicleNumber = dlg.m_strVehicleNo;
  677. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  678. SetMessageType(m_sVehicleNumber,SETLOCK);
  679. }
  680. else {
  681. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  682. SetMessageType(m_sVehicleNumber,SETLOCK);
  683. }
  684. }
  685. else {
  686. CClientinfoSet cSet;
  687. cSet.FindCarPswAndNO(strItemText,m_sVehicleNumber,m_strPassWord);
  688. SetMessageType(m_sVehicleNumber,SETLOCK);
  689. }
  690. }
  691. else
  692. {
  693. if(strItemText.IsEmpty()) {
  694. if(!Flag) {
  695. if(dlg.DoModal() == IDCANCEL) return;
  696. CClientinfoSet cSet;
  697. m_sVehicleNumber = dlg.m_strVehicleNo;
  698. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  699. m_strPassWord  = cSet.GetPassword(m_sVehicleNumber);
  700. m_strPassWord += SETLOCK;
  701. SetMessageType(m_sVehicleNumber,m_strPassWord);
  702. }
  703. else {
  704. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  705. m_strPassWord    = pMainFrame->m_wndTree1.m_strPassWord;
  706. m_strPassWord += SETLOCK;
  707. SetMessageType(m_sVehicleNumber,m_strPassWord);
  708. }
  709. }
  710. else {
  711. CClientinfoSet cSet;
  712. cSet.FindCarPswAndNO(strItemText,m_sVehicleNumber,m_strPassWord);
  713. m_strPassWord += SETLOCK;
  714. SetMessageType(m_sVehicleNumber,m_strPassWord);
  715. }
  716. }
  717. }
  718. //shut down oil
  719. void CProcSM::OnShutoil(CString strItemText)
  720. {
  721. CMainFrame *pMainFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd; 
  722. CDlgAsCenterDlg dlg;
  723. bool Flag;
  724. if(pMainFrame == NULL) return;
  725. Flag = pMainFrame->m_wndTree1.GetCarPhoneAndPassword();
  726. if(m_nUserType == 0)
  727. {
  728. if(strItemText.IsEmpty()) {
  729. if(!Flag) {
  730. if(dlg.DoModal() == IDCANCEL) return;
  731. m_sVehicleNumber = dlg.m_strVehicleNo;
  732. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  733. SetMessageType(m_sVehicleNumber,SHUTOIL);
  734. }
  735. else {
  736. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  737. SetMessageType(m_sVehicleNumber,SHUTOIL);
  738. }
  739. }
  740. else {
  741. CClientinfoSet cSet;
  742. cSet.FindCarPswAndNO(strItemText,m_sVehicleNumber,m_strPassWord);
  743. SetMessageType(m_sVehicleNumber,SHUTOIL);
  744. }
  745. }
  746. else
  747. {
  748. if(strItemText.IsEmpty()) {
  749. if(!Flag) {
  750. if(dlg.DoModal() == IDCANCEL) return;
  751. CClientinfoSet cSet;
  752. m_sVehicleNumber = dlg.m_strVehicleNo;
  753. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  754. m_strPassWord  = cSet.GetPassword(m_sVehicleNumber);
  755. m_strPassWord += SHUTOIL;
  756. SetMessageType(m_sVehicleNumber,m_strPassWord);
  757. }
  758. else {
  759. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  760. m_strPassWord    = pMainFrame->m_wndTree1.m_strPassWord;
  761. m_strPassWord += SHUTOIL;
  762. SetMessageType(m_sVehicleNumber,m_strPassWord);
  763. }
  764. }
  765. else {
  766. CClientinfoSet cSet;
  767. cSet.FindCarPswAndNO(strItemText,m_sVehicleNumber,m_strPassWord);
  768. m_strPassWord += SHUTOIL;
  769. SetMessageType(m_sVehicleNumber,m_strPassWord);
  770. }
  771. }
  772. }
  773. //open the lock
  774. void CProcSM::OnOpenlock(CString strItemText)
  775. {
  776. CMainFrame *pMainFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd; 
  777. CDlgAsCenterDlg dlg;
  778. CString Str;
  779. bool Flag;
  780. if(pMainFrame == NULL) return;
  781. Flag = pMainFrame->m_wndTree1.GetCarPhoneAndPassword();
  782. if(m_nUserType == 0) {
  783. if(strItemText.IsEmpty()) {
  784. if(!Flag) {
  785. if(dlg.DoModal() == IDCANCEL) return;
  786. m_sVehicleNumber = dlg.m_strVehicleNo;
  787. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  788. Str.Format("确定要对 % s解锁吗?",m_sVehicleNumber);
  789. if(AfxMessageBox(Str,MB_YESNO) == IDNO) return;
  790. SetMessageType(m_sVehicleNumber,OPENLOCK);
  791. }
  792. else {
  793. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  794. Str.Format("确定要对 % s解锁吗?",m_sVehicleNumber);
  795. if(AfxMessageBox(Str,MB_YESNO) == IDNO) return;
  796. SetMessageType(m_sVehicleNumber,OPENLOCK);
  797. }
  798. }
  799. else {
  800. CClientinfoSet cSet;
  801. cSet.FindCarPswAndNO(strItemText,m_sVehicleNumber,m_strPassWord);
  802. Str.Format("确定要对 % s解锁吗?",m_sVehicleNumber);
  803. if(AfxMessageBox(Str,MB_YESNO) == IDNO) return;
  804. SetMessageType(m_sVehicleNumber,OPENLOCK);
  805. }
  806. }
  807. else
  808. {
  809. if(strItemText.IsEmpty()) {
  810. if(!Flag) {
  811. if(dlg.DoModal() == IDCANCEL) return;
  812. CClientinfoSet cSet;
  813. m_sVehicleNumber = dlg.m_strVehicleNo;
  814. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  815. m_strPassWord  = cSet.GetPassword(m_sVehicleNumber);
  816. m_strPassWord += OPENLOCK;
  817. Str.Format("确定要对 % s解锁吗?",m_sVehicleNumber);
  818. if(AfxMessageBox(Str,MB_YESNO) == IDNO) return;
  819. SetMessageType(m_sVehicleNumber,m_strPassWord);
  820. }
  821. else {
  822. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  823. m_strPassWord    = pMainFrame->m_wndTree1.m_strPassWord;
  824. m_strPassWord += OPENLOCK;
  825. Str.Format("确定要对 % s解锁吗?",m_sVehicleNumber);
  826. if(AfxMessageBox(Str,MB_YESNO) == IDNO) return;
  827. SetMessageType(m_sVehicleNumber,m_strPassWord);
  828. }
  829. }
  830. else {
  831. CClientinfoSet cSet;
  832. cSet.FindCarPswAndNO(strItemText,m_sVehicleNumber,m_strPassWord);
  833. m_strPassWord += OPENLOCK;
  834. Str.Format("确定要对 % s解锁吗?",m_sVehicleNumber);
  835. if(AfxMessageBox(Str,MB_YESNO) == IDNO) return;
  836. SetMessageType(m_sVehicleNumber,m_strPassWord);
  837. }
  838. }
  839. }
  840. //as normal user change the normal user password
  841. void CProcSM::HoseChangePassWord()
  842. {
  843. CComUserDlg dlg;
  844. CString strPassOriginal;
  845. dlg.m_strPassWordOriginal = "123456";
  846. dlg.m_strCommUserPassWord = "123456";
  847. CString m_strToSend = "";
  848. if(dlg.DoModal() == IDOK)
  849. {
  850. strPassOriginal = dlg.m_strPassWordOriginal;
  851. strCommonUserPassWord.Empty();
  852. m_sVehicleNumber.Empty();
  853. m_sVehicleNumber = dlg.m_strVehicleTelno;
  854. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  855. strCommonUserPassWord = dlg.m_strCommUserPassWord;
  856. int a =AfxMessageBox("普通用户密码设定为:"+ strCommonUserPassWord+ " 确定吗?",MB_YESNO);
  857. if(a == IDYES)
  858. {
  859. m_strToSend = strPassOriginal+USERCHANGEPASS+strCommonUserPassWord+"#";
  860. SetMessageType(m_sVehicleNumber,m_strToSend);
  861. }
  862. }
  863. }
  864. void CProcSM::SelectUserType()
  865. {
  866. CUserTypeDlg dlg(m_nUserType);
  867. if(dlg.DoModal() == IDOK) {
  868. m_nUserType = dlg.m_nUserType;
  869. }
  870. }
  871. //the center auto monitor the vehicle
  872. void CProcSM::AutoMonitor(CString strItemText)
  873. {
  874. CMainFrame *pMainFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
  875. CChooseTimeDlg TimeDlg;
  876. CMonitorDlg dlg;
  877. CString strToSend;
  878. bool Flag;
  879. if(pMainFrame == NULL) return;
  880. Flag = pMainFrame->m_wndTree1.GetCarPhoneAndPassword();
  881. if(m_nUserType == 0)
  882. {
  883. if(strItemText.IsEmpty()) {
  884. if(!Flag) {
  885. if(dlg.DoModal() == IDCANCEL) return;
  886. m_sVehicleNumber = dlg.m_strVehicleNo;
  887. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  888. strToSend  = AUTOMONITOR;
  889. strToSend += dlg.m_strMonitorTimeSpan;
  890. strToSend += '#';
  891. SetMessageType(m_sVehicleNumber,strToSend);
  892. if(!m_sCurrMonitorCar.IsEmpty()) {
  893. m_sCurrMonitorCar = m_sVehicleNumber;
  894. }
  895. }
  896. else {
  897. if(TimeDlg.DoModal() == IDCANCEL) return;
  898. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  899. strToSend  = AUTOMONITOR;
  900. strToSend += TimeDlg.m_strMonitorTimeSpan;
  901. strToSend += '#';
  902. SetMessageType(m_sVehicleNumber,strToSend);
  903. if(!m_sCurrMonitorCar.IsEmpty()) {
  904. m_sCurrMonitorCar = m_sVehicleNumber;
  905. }
  906. }
  907. }
  908. else {
  909. CClientinfoSet cSet;
  910. if(TimeDlg.DoModal() == IDCANCEL) return;
  911. cSet.FindCarPswAndNO(strItemText,m_sVehicleNumber,m_strPassWord);
  912. strToSend  = AUTOMONITOR;
  913. strToSend += TimeDlg.m_strMonitorTimeSpan;
  914. strToSend += '#';
  915. SetMessageType(m_sVehicleNumber,strToSend);
  916. if(!m_sCurrMonitorCar.IsEmpty()) {
  917. m_sCurrMonitorCar = m_sVehicleNumber;
  918. }
  919. }
  920. }
  921. else
  922. {
  923. if(strItemText.IsEmpty()) {
  924. if(!Flag) {
  925. if(dlg.DoModal() == IDCANCEL) return;
  926. CClientinfoSet cSet;
  927. m_sVehicleNumber = dlg.m_strVehicleNo;
  928. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  929. m_strPassWord  = cSet.GetPassword(m_sVehicleNumber);
  930. m_strPassWord += AUTOMONITOR;
  931. m_strPassWord += dlg.m_strMonitorTimeSpan;
  932. m_strPassWord += '#';
  933. SetMessageType(m_sVehicleNumber,m_strPassWord);
  934. if(!m_sCurrMonitorCar.IsEmpty()) {
  935. m_sCurrMonitorCar = m_sVehicleNumber;
  936. }
  937. }
  938. else {
  939. if(TimeDlg.DoModal() == IDCANCEL) return;
  940. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  941. m_strPassWord    = pMainFrame->m_wndTree1.m_strPassWord;
  942. m_strPassWord += AUTOMONITOR;
  943. m_strPassWord += TimeDlg.m_strMonitorTimeSpan;
  944. m_strPassWord += '#';
  945. SetMessageType(m_sVehicleNumber,m_strPassWord);
  946. if(!m_sCurrMonitorCar.IsEmpty()) {
  947. m_sCurrMonitorCar = m_sVehicleNumber;
  948. }
  949. }
  950. }
  951. else {
  952. CClientinfoSet cSet;
  953. if(TimeDlg.DoModal() == IDCANCEL) return;
  954. cSet.FindCarPswAndNO(strItemText,m_sVehicleNumber,m_strPassWord);
  955. m_strPassWord += AUTOMONITOR;
  956. m_strPassWord += TimeDlg.m_strMonitorTimeSpan;
  957. m_strPassWord += '#';
  958. SetMessageType(m_sVehicleNumber,m_strPassWord);
  959. if(!m_sCurrMonitorCar.IsEmpty()) {
  960. m_sCurrMonitorCar = m_sVehicleNumber;
  961. }
  962. }
  963. }
  964. }
  965. //取消监控
  966. void CProcSM::CanceLautoMonitor(CString strItemText)
  967. {
  968. CMainFrame *pMainFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd; 
  969. CDlgAsCenterDlg dlg;
  970. CString sVehicleNumber;
  971. bool Flag;
  972. if(pMainFrame == NULL) return;
  973. Flag = pMainFrame->m_wndTree1.GetCarPhoneAndPassword();
  974. if(m_nUserType == 0)
  975. {
  976. if(strItemText.IsEmpty()) {
  977. if(!Flag) {
  978. if(dlg.DoModal() == IDCANCEL) return;
  979. m_sVehicleNumber = dlg.m_strVehicleNo;
  980. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  981. SetMessageType(m_sVehicleNumber,CANCELAUTOMONITOR);
  982. if(m_sCurrMonitorCar == strItemText) {
  983. m_sCurrMonitorCar.Empty();
  984. }
  985. }
  986. else {
  987. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  988. SetMessageType(m_sVehicleNumber,CANCELAUTOMONITOR);
  989. if(m_sCurrMonitorCar == strItemText) {
  990. m_sCurrMonitorCar.Empty();
  991. }
  992. }
  993. }
  994. else {
  995. CClientinfoSet cSet;
  996. cSet.FindCarPswAndNO(strItemText,sVehicleNumber,m_strPassWord);
  997. SetMessageType(sVehicleNumber,CANCELAUTOMONITOR);
  998. if(m_sCurrMonitorCar == strItemText) {
  999. m_sCurrMonitorCar.Empty();
  1000. }
  1001. }
  1002. }
  1003. else
  1004. {
  1005. if(strItemText.IsEmpty()) {
  1006. if(!Flag) {
  1007. if(dlg.DoModal() == IDCANCEL) return;
  1008. CClientinfoSet cSet;
  1009. m_sVehicleNumber = dlg.m_strVehicleNo;
  1010. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  1011. m_strPassWord  = cSet.GetPassword(m_sVehicleNumber);
  1012. m_strPassWord += CANCELAUTOMONITOR;
  1013. SetMessageType(m_sVehicleNumber,m_strPassWord);
  1014. if(m_sCurrMonitorCar == strItemText) {
  1015. m_sCurrMonitorCar.Empty();
  1016. }
  1017. }
  1018. else {
  1019. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  1020. m_strPassWord    = pMainFrame->m_wndTree1.m_strPassWord;
  1021. m_strPassWord += CANCELAUTOMONITOR;
  1022. SetMessageType(m_sVehicleNumber,m_strPassWord);
  1023. if(m_sCurrMonitorCar == strItemText) {
  1024. m_sCurrMonitorCar.Empty();
  1025. }
  1026. }
  1027. }
  1028. else {
  1029. CClientinfoSet cSet;
  1030. cSet.FindCarPswAndNO(strItemText,sVehicleNumber,m_strPassWord);
  1031. m_strPassWord += CANCELAUTOMONITOR;
  1032. SetMessageType(sVehicleNumber,m_strPassWord);
  1033. if(m_sCurrMonitorCar == strItemText) {
  1034. m_sCurrMonitorCar.Empty();
  1035. }
  1036. }
  1037. }
  1038. }
  1039. void CProcSM::GetHelp(CString strItemText)
  1040. {
  1041. CMainFrame *pMainFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd; 
  1042. CDlgAsCenterDlg dlg;
  1043. bool Flag;
  1044. if(pMainFrame == NULL) return;
  1045. Flag = pMainFrame->m_wndTree1.GetCarPhoneAndPassword();
  1046. if(m_nUserType == 0)
  1047. {
  1048. if(strItemText.IsEmpty()) {
  1049. if(!Flag) {
  1050. if(dlg.DoModal() == IDCANCEL) return;
  1051. m_sVehicleNumber = dlg.m_strVehicleNo;
  1052. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  1053. SetMessageType(m_sVehicleNumber,GETHELP);
  1054. }
  1055. else {
  1056. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  1057. SetMessageType(m_sVehicleNumber,GETHELP);
  1058. }
  1059. }
  1060. else {
  1061. CClientinfoSet cSet;
  1062. cSet.FindCarPswAndNO(strItemText,m_sVehicleNumber,m_strPassWord);
  1063. SetMessageType(m_sVehicleNumber,GETHELP);
  1064. }
  1065. }
  1066. else
  1067. {
  1068. if(strItemText.IsEmpty()) {
  1069. if(!Flag) {
  1070. if(dlg.DoModal() == IDCANCEL) return;
  1071. CClientinfoSet cSet;
  1072. m_sVehicleNumber = dlg.m_strVehicleNo;
  1073. m_sVehicleNumber = m_sVehicleNumber.Right(11);
  1074. m_strPassWord  = cSet.GetPassword(m_sVehicleNumber);
  1075. m_strPassWord += GETHELP;
  1076. SetMessageType(m_sVehicleNumber,m_strPassWord);
  1077. }
  1078. else {
  1079. m_sVehicleNumber = pMainFrame->m_wndTree1.m_strCarPhone;
  1080. m_strPassWord    = pMainFrame->m_wndTree1.m_strPassWord;
  1081. m_strPassWord += GETHELP;
  1082. SetMessageType(m_sVehicleNumber,m_strPassWord);
  1083. }
  1084. }
  1085. else {
  1086. CClientinfoSet cSet;
  1087. cSet.FindCarPswAndNO(strItemText,m_sVehicleNumber,m_strPassWord);
  1088. m_strPassWord += GETHELP;
  1089. SetMessageType(m_sVehicleNumber,m_strPassWord);
  1090. }
  1091. }
  1092. }
  1093. BOOL CProcSM::CheckMonitorCar()
  1094. {
  1095. if(m_sCurrMonitorCar.IsEmpty()) return TRUE;
  1096. return FALSE;
  1097. }
  1098. void CProcSM::SetMonitorCar(CString VehicleID)
  1099. {
  1100. m_sCurrMonitorCar = VehicleID;
  1101. }
  1102. WORD CProcSM::GetUnicodeFromTable(WORD wGB)
  1103. {
  1104. WORD wUnicode = 0;
  1105. long i;
  1106. for(i = 0; i < UnicodeTable_Len; i++) {
  1107. if(wGB == UnicodeTable[i][0]) {
  1108. wUnicode = UnicodeTable[i][1];
  1109. break;
  1110. }
  1111. }
  1112. return wUnicode;
  1113. }
  1114. WORD CProcSM::GetAnsiFromTable(WORD lTemp)
  1115. {
  1116. WORD wAnsi = 0;
  1117. long i;
  1118. for(i = 0; i < UnicodeTable_Len; i++) {
  1119. if(lTemp == UnicodeTable[i][1]) {
  1120. wAnsi = UnicodeTable[i][0];
  1121. break;
  1122. }
  1123. }
  1124. return wAnsi;
  1125. }
  1126. CString CProcSM::AnsiStr2UnicodeStr(CString sAnsiStr)
  1127. {
  1128. CString sRet(""),Str;
  1129. WORD w;
  1130. BYTE Len,chr,pos = 0;
  1131. Len = sAnsiStr.GetLength();
  1132. while(pos < Len) {
  1133. chr = (BYTE)sAnsiStr.GetAt(pos);
  1134. if(chr < 0x80) { //作ASCII处理
  1135. w = (WORD)chr;
  1136. pos++;
  1137. }
  1138. else { //作汉字处理
  1139. w  = (WORD)((chr << 8) + (BYTE)sAnsiStr.GetAt(pos + 1));
  1140. w -= 0x8080;
  1141. w  = GetUnicodeFromTable(w);
  1142. pos += 2;
  1143. if(w == 0) {
  1144. continue;
  1145. }
  1146. }
  1147. Str.Format("%04x",w);
  1148. sRet += Str;
  1149. }
  1150. return sRet;
  1151. }
  1152. CString CProcSM::UnicodeStr2AnsiStr(CString UnicodeStr)
  1153. {
  1154. CString sRet(""),Str;
  1155. BYTE Len,i;
  1156. BYTE arr[3];
  1157. WORD lTemp;
  1158. arr[2] = 0;
  1159. Len = UnicodeStr.GetLength();
  1160. for(i = 0; i < Len; i += 4) {
  1161. Str = GetLenStr(UnicodeStr,i,4);
  1162. lTemp = (WORD)LongNEtoLong(Str);
  1163. if(lTemp < 0x80) {
  1164. Str.Format("%c",lTemp);
  1165. }
  1166. else {
  1167. lTemp  = GetAnsiFromTable(lTemp);
  1168. lTemp += 0x8080;
  1169. arr[1] = (BYTE)(lTemp &  0x00ff);
  1170. arr[0] = (BYTE)(lTemp >> 8);
  1171. Str = arr;
  1172. }
  1173. sRet += Str;
  1174. }
  1175. return sRet;
  1176. }
  1177. long CProcSM::LongNEtoLong(CString LongNE)
  1178. {
  1179. CString TmpStr;
  1180. BYTE j,Len,tmp,Count = 0;
  1181. long Ret = 0,lTmp;
  1182. char i,chr;
  1183. LongNE = "0x" + LongNE;
  1184. Len = LongNE.GetLength();
  1185. if(Len <= 2) return Ret;
  1186. LongNE = LongNE.Right(Len - 2);
  1187. for(i = Len - 2 - 1; i > -1; i--) {
  1188. chr = LongNE.GetAt(i);
  1189. tmp = CharToNum(chr);
  1190. for(lTmp = 1,j = 0; j < Count; j++){
  1191. lTmp *= 16;
  1192. }
  1193. Ret += (tmp * lTmp);
  1194. Count++;
  1195. }
  1196. return Ret;
  1197. }
  1198. BYTE CProcSM::CharToNum(char chr)
  1199. {
  1200. BYTE Ret = 0;
  1201. switch(chr) {
  1202. case 'A':
  1203. case 'a':
  1204. Ret = 10;
  1205. break;
  1206. case 'B':
  1207. case 'b':
  1208. Ret = 11;
  1209. break;
  1210. case 'C':
  1211. case 'c':
  1212. Ret = 12;
  1213. break;
  1214. case 'D':
  1215. case 'd':
  1216. Ret = 13;
  1217. break;
  1218. case 'E':
  1219. case 'e':
  1220. Ret = 14;
  1221. break;
  1222. case 'F':
  1223. case 'f':
  1224. Ret = 15;
  1225. break;
  1226. default:
  1227. Ret = (BYTE)(chr - '0');
  1228. }
  1229. return Ret;
  1230. }
  1231. void CProcSM::DeleteTheMonitorVehicle(CString sVehicleID)
  1232. {
  1233. POSITION pos,SavePos;
  1234. CString sVehicle;
  1235. pos = m_lCurrMonitorVehicle.GetHeadPosition();
  1236. while(pos != NULL) {
  1237. SavePos = pos;
  1238. sVehicle = m_lCurrMonitorVehicle.GetNext(pos);
  1239. if(sVehicle == sVehicleID) {
  1240. m_lCurrMonitorVehicle.RemoveAt(SavePos);
  1241. // CMainFrame *pMainFrm = (CMainFrame*)AfxGetApp()->m_pMainWnd;
  1242. // pMainFrm->EditTreeItem(sVehicleID,false);
  1243. break;
  1244. }
  1245. }
  1246. }
  1247. void CProcSM::AddTheMonitorVehicle(CString sVehicleID)
  1248. {
  1249. if(sVehicleID.IsEmpty()) return;
  1250. POSITION pos;
  1251. CString sVehicle;
  1252. pos = m_lCurrMonitorVehicle.GetTailPosition();
  1253. while(pos != NULL) {
  1254. sVehicle = m_lCurrMonitorVehicle.GetPrev(pos);
  1255. if(sVehicle == sVehicleID) {
  1256. return;
  1257. }
  1258. }
  1259. m_lCurrMonitorVehicle.AddHead(sVehicleID);
  1260. // CMainFrame *pMainFrm = (CMainFrame*)AfxGetApp()->m_pMainWnd;
  1261. // pMainFrm->EditTreeItem(sVehicleID,true);
  1262. }
  1263. bool CProcSM::CheckVehicleMonitorNow(CString sVehicleID)
  1264. {
  1265. if(m_lCurrMonitorVehicle.GetCount() == 0) {
  1266. AddTheMonitorVehicle(sVehicleID);
  1267. return true;
  1268. }
  1269. POSITION pos;
  1270. CString sVehicle;
  1271. pos = m_lCurrMonitorVehicle.GetHeadPosition();
  1272. while(pos != NULL) {
  1273. sVehicle = m_lCurrMonitorVehicle.GetNext(pos);
  1274. if(sVehicle == sVehicleID) {
  1275. return true;
  1276. }
  1277. }
  1278. return false;
  1279. }