Msg.cpp
上传用户:guangzhiyw
上传日期:2007-01-09
资源大小:495k
文件大小:20k
源码类别:

ICQ/即时通讯

开发平台:

Visual C++

  1. // Msg.cpp: implementation of the CMsg1 class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "common.h"
  6. #include "Msg.h"
  7. //////////////////////////////////////////////////////////////////////
  8. // Construction/Destruction
  9. //////////////////////////////////////////////////////////////////////
  10. CMsg1::CMsg1()
  11. {
  12. Msg="";
  13. }
  14. CMsg1::~CMsg1()
  15. {
  16. }
  17. void CMsg1::PackToBuf()
  18. {
  19. CData::PackToBuf();
  20. *((DWORD*)(szBuf+BP))=FriendId;
  21. BP+=sizeof(DWORD);
  22. *((CTime*)(szBuf+BP))=Time;
  23. BP+=sizeof(CTime);
  24. WORD sLen=Msg.GetLength();
  25. *((WORD*)(szBuf+BP))=sLen;
  26. BP+=sizeof(WORD);
  27. if(sLen>0)
  28. {
  29. strcpy(szBuf+BP,Msg.GetBuffer(Msg.GetLength()));
  30. BP+=sLen;
  31. }
  32. num=BP;
  33. }
  34. BOOL CMsg1::LoadFromBuf()
  35. {
  36. if(!CData::LoadFromBuf())return FALSE;
  37. FriendId=*((DWORD*)(szBuf+BP));
  38. BP+=sizeof(DWORD);
  39. Time=*((CTime*)(szBuf+BP));
  40. BP+=sizeof(CTime);
  41. WORD sLen=0;
  42. sLen=*((WORD*)(szBuf+BP));
  43. BP+=sizeof(WORD);
  44. if(sLen>0&&BP+sLen<=num)
  45. {
  46. CString msg(szBuf+BP,sLen);
  47. Msg=msg;
  48. BP+=sLen;
  49. }
  50. else if(sLen==0) 
  51. {
  52. Msg="";
  53. }
  54. else
  55. {
  56. return FALSE;
  57. }
  58. if(BP==num)return TRUE;
  59. return FALSE;
  60. }
  61. //////////////////////////////////////////////////////////////////////
  62. // CMsg2 Class
  63. //////////////////////////////////////////////////////////////////////
  64. //////////////////////////////////////////////////////////////////////
  65. // Construction/Destruction
  66. //////////////////////////////////////////////////////////////////////
  67. CMsg2::CMsg2()
  68. {
  69. Msg="";
  70. }
  71. CMsg2::~CMsg2()
  72. {
  73. }
  74. void CMsg2::PackToBuf()
  75. {
  76. CData::PackToBuf();
  77. WORD aNum=0;
  78. aNum=aFriendId.GetSize();
  79. *((WORD*)(szBuf+BP))=aNum;
  80. BP+=sizeof(WORD);
  81. for(int i=0;i<aNum;i++)
  82. {
  83. *((DWORD*)(szBuf+BP))=aFriendId.GetAt(i);
  84. BP+=sizeof(DWORD);
  85. }
  86. *((CTime*)(szBuf+BP))=Time;
  87. BP+=sizeof(CTime);
  88. WORD sLen=Msg.GetLength();
  89. *((WORD*)(szBuf+BP))=sLen;
  90. BP+=sizeof(WORD);
  91. if(sLen>0)
  92. {
  93. strcpy(szBuf+BP,Msg.GetBuffer(Msg.GetLength()));
  94. BP+=sLen;
  95. }
  96. num=BP;
  97. }
  98. BOOL CMsg2::LoadFromBuf()
  99. {
  100. if(!CData::LoadFromBuf())return FALSE;
  101. WORD aNum=0;
  102. aNum=*((WORD*)(szBuf+BP));
  103. BP+=sizeof(WORD);
  104. if(aNum>0)
  105. {
  106. aFriendId.RemoveAll();
  107. for(int i=0;i<aNum;i++)
  108. {
  109. aFriendId.Add(*((DWORD*)(szBuf+BP)));
  110. BP+=sizeof(DWORD);
  111. }
  112. }
  113. else if(aNum<0)
  114. {
  115. return FALSE;
  116. }
  117. Time=*((CTime*)(szBuf+BP));
  118. BP+=sizeof(CTime);
  119. WORD sLen=0;
  120. sLen=*((WORD*)(szBuf+BP));
  121. BP+=sizeof(WORD);
  122. if(sLen>0&&BP+sLen<=num)
  123. {
  124. CString msg(szBuf+BP,sLen);
  125. Msg=msg;
  126. BP+=sLen;
  127. }
  128. else if(sLen==0) 
  129. {
  130. Msg="";
  131. }
  132. else
  133. {
  134. return FALSE;
  135. }
  136. if(BP==num)return TRUE;
  137. return FALSE;
  138. }
  139. //////////////////////////////////////////////////////////////////////
  140. // CMsg3 Class
  141. //////////////////////////////////////////////////////////////////////
  142. //////////////////////////////////////////////////////////////////////
  143. // Construction/Destruction
  144. //////////////////////////////////////////////////////////////////////
  145. CMsg3::CMsg3()
  146. {
  147. }
  148. CMsg3::~CMsg3()
  149. {
  150. }
  151. void CMsg3::PackToBuf()
  152. {
  153. CData::PackToBuf();
  154. *((DWORD*)(szBuf+BP))=Value;
  155. BP+=sizeof(DWORD);
  156. num=BP;
  157. }
  158. BOOL CMsg3::LoadFromBuf()
  159. {
  160. if(!CData::LoadFromBuf())return FALSE;
  161. Value=*((DWORD*)(szBuf+BP));
  162. BP+=sizeof(DWORD);
  163. if(BP==num)return TRUE;
  164. return FALSE;
  165. }
  166. //////////////////////////////////////////////////////////////////////
  167. // CMsg4 Class
  168. //////////////////////////////////////////////////////////////////////
  169. //////////////////////////////////////////////////////////////////////
  170. // Construction/Destruction
  171. //////////////////////////////////////////////////////////////////////
  172. CMsg4::CMsg4()
  173. {
  174. Msg="";
  175. BroadcastPwd="";
  176. }
  177. CMsg4::~CMsg4()
  178. {
  179. }
  180. void CMsg4::PackToBuf()
  181. {
  182. CData::PackToBuf();
  183. WORD sLen=BroadcastPwd.GetLength();
  184. *((WORD*)(szBuf+BP))=sLen;
  185. BP+=sizeof(WORD);
  186. if(sLen>0)
  187. {
  188. strcpy(szBuf+BP,BroadcastPwd.GetBuffer(BroadcastPwd.GetLength()));
  189. BP+=sLen;
  190. }
  191. sLen=Msg.GetLength();
  192. *((WORD*)(szBuf+BP))=sLen;
  193. BP+=sizeof(WORD);
  194. if(sLen>0)
  195. {
  196. strcpy(szBuf+BP,Msg.GetBuffer(Msg.GetLength()));
  197. BP+=sLen;
  198. }
  199. num=BP;
  200. }
  201. BOOL CMsg4::LoadFromBuf()
  202. {
  203. if(!CData::LoadFromBuf())return FALSE;
  204. WORD sLen=0;
  205. sLen=*((WORD*)(szBuf+BP));
  206. BP+=sizeof(WORD);
  207. if(sLen>0&&BP+sLen<=num)
  208. {
  209. CString msg(szBuf+BP,sLen);
  210. BroadcastPwd=msg;
  211. BP+=sLen;
  212. }
  213. else if(sLen==0) 
  214. {
  215. BroadcastPwd="";
  216. }
  217. else
  218. {
  219. return FALSE;
  220. }
  221. sLen=0;
  222. sLen=*((WORD*)(szBuf+BP));
  223. BP+=sizeof(WORD);
  224. if(sLen>0&&BP+sLen<=num)
  225. {
  226. CString msg(szBuf+BP,sLen);
  227. Msg=msg;
  228. BP+=sLen;
  229. }
  230. else if(sLen==0) 
  231. {
  232. Msg="";
  233. }
  234. else
  235. {
  236. return FALSE;
  237. }
  238. if(BP==num)return TRUE;
  239. return FALSE;
  240. }
  241. //////////////////////////////////////////////////////////////////////
  242. // CMsgModifyPwd Class
  243. //////////////////////////////////////////////////////////////////////
  244. //////////////////////////////////////////////////////////////////////
  245. // Construction/Destruction
  246. //////////////////////////////////////////////////////////////////////
  247. CMsgModifyPwd::CMsgModifyPwd()
  248. {
  249. }
  250. CMsgModifyPwd::~CMsgModifyPwd()
  251. {
  252. }
  253. void CMsgModifyPwd::PackToBuf()
  254. {
  255. CData::PackToBuf();
  256. WORD sLen=OldPwd.GetLength();
  257. *((WORD*)(szBuf+BP))=sLen;
  258. BP+=sizeof(WORD);
  259. if(sLen>0)
  260. {
  261. strcpy(szBuf+BP,OldPwd.GetBuffer(OldPwd.GetLength()));
  262. BP+=sLen;
  263. }
  264. sLen=NewPwd.GetLength();
  265. *((WORD*)(szBuf+BP))=sLen;
  266. BP+=sizeof(WORD);
  267. if(sLen>0)
  268. {
  269. strcpy(szBuf+BP,NewPwd.GetBuffer(NewPwd.GetLength()));
  270. BP+=sLen;
  271. }
  272. num=BP;
  273. }
  274. BOOL CMsgModifyPwd::LoadFromBuf()
  275. {
  276. if(!CData::LoadFromBuf())return FALSE;
  277. WORD sLen=0;
  278. sLen=*((WORD*)(szBuf+BP));
  279. BP+=sizeof(WORD);
  280. if(sLen>0&&BP+sLen<=num)
  281. {
  282. CString msg(szBuf+BP,sLen);
  283. OldPwd=msg;
  284. BP+=sLen;
  285. }
  286. else if(sLen==0) 
  287. {
  288. OldPwd="";
  289. }
  290. else
  291. {
  292. return FALSE;
  293. }
  294. sLen=0;
  295. sLen=*((WORD*)(szBuf+BP));
  296. BP+=sizeof(WORD);
  297. if(sLen>0&&BP+sLen<=num)
  298. {
  299. CString msg(szBuf+BP,sLen);
  300. NewPwd=msg;
  301. BP+=sLen;
  302. }
  303. else if(sLen==0) 
  304. {
  305. NewPwd="";
  306. }
  307. else
  308. {
  309. return FALSE;
  310. }
  311. if(BP==num)return TRUE;
  312. return FALSE;
  313. }
  314. //////////////////////////////////////////////////////////////////////
  315. // CMsgOnlineFriend Class
  316. //////////////////////////////////////////////////////////////////////
  317. //////////////////////////////////////////////////////////////////////
  318. // Construction/Destruction
  319. //////////////////////////////////////////////////////////////////////
  320. CMsgOnlineFriend::CMsgOnlineFriend()
  321. {
  322. }
  323. CMsgOnlineFriend::~CMsgOnlineFriend()
  324. {
  325. }
  326. BOOL CMsgOnlineFriend::LoadFromBuf()
  327. {
  328. if(!CData::LoadFromBuf())return FALSE;
  329. WORD aNum=0;
  330. aNum=*((WORD*)(szBuf+BP));
  331. BP+=sizeof(WORD);
  332. if(aNum>0)
  333. {
  334. aFriendId.RemoveAll();
  335. aFriendState.RemoveAll();
  336. aFriendIP.RemoveAll();
  337. aFriendPort.RemoveAll();
  338. for(int i=0;i<aNum;i++)
  339. {
  340. aFriendId.Add(*((DWORD*)(szBuf+BP)));
  341. BP+=sizeof(DWORD);
  342. aFriendState.Add(*(szBuf+BP));
  343. BP++;
  344. aFriendIP.Add(*((DWORD*)(szBuf+BP)));
  345. BP+=sizeof(DWORD);
  346. aFriendPort.Add(*((DWORD*)(szBuf+BP)));
  347. BP+=sizeof(DWORD);
  348. }
  349. }
  350. else if(aNum<0) return FALSE;
  351. if(BP==num)return TRUE;
  352. return FALSE;
  353. }
  354. void CMsgOnlineFriend::PackToBuf()
  355. {
  356. CData::PackToBuf();
  357. WORD aNum=aFriendId.GetSize();
  358. *((WORD*)(szBuf+BP))=aNum;
  359. BP+=sizeof(WORD);
  360. for(int i=0;i<aNum;i++)
  361. {
  362. *((DWORD*)(szBuf+BP))=aFriendId.GetAt(i);
  363. BP+=sizeof(DWORD);
  364. *(szBuf+BP)=aFriendState.GetAt(i);
  365. BP++;
  366. *((DWORD*)(szBuf+BP))=aFriendIP.GetAt(i);
  367. BP+=sizeof(DWORD);
  368. *((DWORD*)(szBuf+BP))=aFriendPort.GetAt(i);
  369. BP+=sizeof(DWORD);
  370. }
  371. num=BP;
  372. }
  373. //////////////////////////////////////////////////////////////////////
  374. // CMsgChangePI Class
  375. //////////////////////////////////////////////////////////////////////
  376. //////////////////////////////////////////////////////////////////////
  377. // Construction/Destruction
  378. //////////////////////////////////////////////////////////////////////
  379. CMsgChangePI::CMsgChangePI()
  380. {
  381. Mask=0;
  382. }
  383. CMsgChangePI::~CMsgChangePI()
  384. {
  385. }
  386. void CMsgChangePI::PackToBuf()
  387. {
  388. CData::PackToBuf();
  389. *((DWORD*)(szBuf+BP))=Mask;
  390. BP+=sizeof(DWORD);
  391. if(Mask&NAME)
  392. {
  393. WORD sLen=Name.GetLength();
  394. *((WORD*)(szBuf+BP))=sLen;
  395. BP+=sizeof(WORD);
  396. if(sLen>0)
  397. {
  398. strcpy(szBuf+BP,Name.GetBuffer(Name.GetLength()));
  399. BP+=sLen;
  400. }
  401. }
  402. if(Mask&SEX)
  403. {
  404. *((BYTE*)(szBuf+BP))=Sex;
  405. BP++;
  406. }
  407. if(Mask&CANBEADD)
  408. {
  409. *((BYTE*)(szBuf+BP))=Canbeadd;
  410. BP++;
  411. }
  412. if(Mask&PHOTOID)
  413. {
  414. *((DWORD*)(szBuf+BP))=PhotoId;
  415. BP+=sizeof(DWORD);
  416. }
  417. if(Mask&AGE)
  418. {
  419. WORD sLen=Age.GetLength();
  420. *((WORD*)(szBuf+BP))=sLen;
  421. BP+=sizeof(WORD);
  422. if(sLen>0)
  423. {
  424. strcpy(szBuf+BP,Age.GetBuffer(Age.GetLength()));
  425. BP+=sLen;
  426. }
  427. }
  428. if(Mask&PHONE)
  429. {
  430. WORD sLen=Phone.GetLength();
  431. *((WORD*)(szBuf+BP))=sLen;
  432. BP+=sizeof(WORD);
  433. if(sLen>0)
  434. {
  435. strcpy(szBuf+BP,Phone.GetBuffer(Phone.GetLength()));
  436. BP+=sLen;
  437. }
  438. }
  439. if(Mask&FAX)
  440. {
  441. WORD sLen=Fax.GetLength();
  442. *((WORD*)(szBuf+BP))=sLen;
  443. BP+=sizeof(WORD);
  444. if(sLen>0)
  445. {
  446. strcpy(szBuf+BP,Fax.GetBuffer(Fax.GetLength()));
  447. BP+=sLen;
  448. }
  449. }
  450. if(Mask&EMAIL)
  451. {
  452. WORD sLen=Email.GetLength();
  453. *((WORD*)(szBuf+BP))=sLen;
  454. BP+=sizeof(WORD);
  455. if(sLen>0)
  456. {
  457. strcpy(szBuf+BP,Email.GetBuffer(Email.GetLength()));
  458. BP+=sLen;
  459. }
  460. }
  461. if(Mask&HOMEPAGE)
  462. {
  463. WORD sLen=Homepage.GetLength();
  464. *((WORD*)(szBuf+BP))=sLen;
  465. BP+=sizeof(WORD);
  466. if(sLen>0)
  467. {
  468. strcpy(szBuf+BP,Homepage.GetBuffer(Homepage.GetLength()));
  469. BP+=sLen;
  470. }
  471. }
  472. if(Mask&ADDRESS)
  473. {
  474. WORD sLen=Address.GetLength();
  475. *((WORD*)(szBuf+BP))=sLen;
  476. BP+=sizeof(WORD);
  477. if(sLen>0)
  478. {
  479. strcpy(szBuf+BP,Address.GetBuffer(Address.GetLength()));
  480. BP+=sLen;
  481. }
  482. }
  483. if(Mask&DEPARTMENT)
  484. {
  485. WORD sLen=Department.GetLength();
  486. *((WORD*)(szBuf+BP))=sLen;
  487. BP+=sizeof(WORD);
  488. if(sLen>0)
  489. {
  490. strcpy(szBuf+BP,Department.GetBuffer(Department.GetLength()));
  491. BP+=sLen;
  492. }
  493. }
  494. if(Mask&DESCRIPTION)
  495. {
  496. WORD sLen=Description.GetLength();
  497. *((WORD*)(szBuf+BP))=sLen;
  498. BP+=sizeof(WORD);
  499. if(sLen>0)
  500. {
  501. strcpy(szBuf+BP,Description.GetBuffer(Description.GetLength()));
  502. BP+=sLen;
  503. }
  504. }
  505. num=BP;
  506. }
  507. BOOL CMsgChangePI::LoadFromBuf()
  508. {
  509. if(!CData::LoadFromBuf())return FALSE;
  510. Mask=*((DWORD*)(szBuf+BP));
  511. BP+=sizeof(DWORD);
  512. if(Mask&NAME)
  513. {
  514. WORD sLen;
  515. sLen=*((WORD*)(szBuf+BP));
  516. BP+=sizeof(WORD);
  517. if(sLen>0&&BP+sLen<=num)
  518. {
  519. CString a(szBuf+BP,sLen);
  520. Name=a;
  521. BP+=sLen;
  522. }
  523. else if(sLen<0) return FALSE;
  524. }
  525. if(Mask&SEX)
  526. {
  527. Sex=*((BYTE*)(szBuf+BP));
  528. BP++;
  529. }
  530. if(Mask&CANBEADD)
  531. {
  532. Canbeadd=*((BYTE*)(szBuf+BP));
  533. BP++;
  534. }
  535. if(Mask&PHOTOID)
  536. {
  537. PhotoId=*((DWORD*)(szBuf+BP));
  538. BP+=sizeof(DWORD);
  539. }
  540. if(Mask&AGE)
  541. {
  542. WORD sLen;
  543. sLen=*((WORD*)(szBuf+BP));
  544. BP+=sizeof(WORD);
  545. if(sLen>0&&BP+sLen<=num)
  546. {
  547. CString a(szBuf+BP,sLen);
  548. Age=a;
  549. BP+=sLen;
  550. }
  551. else if(sLen<0) return FALSE;
  552. }
  553. if(Mask&PHONE)
  554. {
  555. WORD sLen;
  556. sLen=*((WORD*)(szBuf+BP));
  557. BP+=sizeof(WORD);
  558. if(sLen>0&&BP+sLen<=num)
  559. {
  560. CString a(szBuf+BP,sLen);
  561. Phone=a;
  562. BP+=sLen;
  563. }
  564. else if(sLen<0) return FALSE;
  565. }
  566. if(Mask&FAX)
  567. {
  568. WORD sLen;
  569. sLen=*((WORD*)(szBuf+BP));
  570. BP+=sizeof(WORD);
  571. if(sLen>0&&BP+sLen<=num)
  572. {
  573. CString a(szBuf+BP,sLen);
  574. Fax=a;
  575. BP+=sLen;
  576. }
  577. else if(sLen<0) return FALSE;
  578. }
  579. if(Mask&EMAIL)
  580. {
  581. WORD sLen;
  582. sLen=*((WORD*)(szBuf+BP));
  583. BP+=sizeof(WORD);
  584. if(sLen>0&&BP+sLen<=num)
  585. {
  586. CString a(szBuf+BP,sLen);
  587. Email=a;
  588. BP+=sLen;
  589. }
  590. else if(sLen<0) return FALSE;
  591. }
  592. if(Mask&HOMEPAGE)
  593. {
  594. WORD sLen;
  595. sLen=*((WORD*)(szBuf+BP));
  596. BP+=sizeof(WORD);
  597. if(sLen>0&&BP+sLen<=num)
  598. {
  599. CString a(szBuf+BP,sLen);
  600. Homepage=a;
  601. BP+=sLen;
  602. }
  603. else if(sLen<0) return FALSE;
  604. }
  605. if(Mask&ADDRESS)
  606. {
  607. WORD sLen;
  608. sLen=*((WORD*)(szBuf+BP));
  609. BP+=sizeof(WORD);
  610. if(sLen>0&&BP+sLen<=num)
  611. {
  612. CString a(szBuf+BP,sLen);
  613. Address=a;
  614. BP+=sLen;
  615. }
  616. else if(sLen<0) return FALSE;
  617. }
  618. if(Mask&DEPARTMENT)
  619. {
  620. WORD sLen;
  621. sLen=*((WORD*)(szBuf+BP));
  622. BP+=sizeof(WORD);
  623. if(sLen>0&&BP+sLen<=num)
  624. {
  625. CString a(szBuf+BP,sLen);
  626. Department=a;
  627. BP+=sLen;
  628. }
  629. else if(sLen<0) return FALSE;
  630. }
  631. if(Mask&DESCRIPTION)
  632. {
  633. WORD sLen;
  634. sLen=*((WORD*)(szBuf+BP));
  635. BP+=sizeof(WORD);
  636. if(sLen>0&&BP+sLen<=num)
  637. {
  638. CString a(szBuf+BP,sLen);
  639. Description=a;
  640. BP+=sLen;
  641. }
  642. else if(sLen<0) return FALSE;
  643. }
  644. if(num==BP)return TRUE;
  645. return FALSE;
  646. }
  647. //////////////////////////////////////////////////////////////////////
  648. // CMsgPerson Class
  649. //////////////////////////////////////////////////////////////////////
  650. //////////////////////////////////////////////////////////////////////
  651. // Construction/Destruction
  652. //////////////////////////////////////////////////////////////////////
  653. CMsgPerson::CMsgPerson()
  654. {
  655. }
  656. CMsgPerson::~CMsgPerson()
  657. {
  658. }
  659. void CMsgPerson::PackToBuf()
  660. {
  661. CData::PackToBuf();
  662. WORD sLen=Name.GetLength();
  663. *((WORD*)(szBuf+BP))=sLen;
  664. BP+=sizeof(WORD);
  665. if(sLen>0)
  666. {
  667. strcpy(szBuf+BP,Name.GetBuffer(Name.GetLength()));
  668. BP+=sLen;
  669. }
  670. *((BYTE*)(szBuf+BP))=Sex;
  671. BP++;
  672. *((BYTE*)(szBuf+BP))=Canbeadd;
  673. BP++;
  674. *((DWORD*)(szBuf+BP))=PhotoId;
  675. BP+=sizeof(DWORD);
  676. sLen=Age.GetLength();
  677. *((WORD*)(szBuf+BP))=sLen;
  678. BP+=sizeof(WORD);
  679. if(sLen>0)
  680. {
  681. strcpy(szBuf+BP,Age.GetBuffer(Age.GetLength()));
  682. BP+=sLen;
  683. }
  684. sLen=Phone.GetLength();
  685. *((WORD*)(szBuf+BP))=sLen;
  686. BP+=sizeof(WORD);
  687. if(sLen>0)
  688. {
  689. strcpy(szBuf+BP,Phone.GetBuffer(Phone.GetLength()));
  690. BP+=sLen;
  691. }
  692. sLen=Fax.GetLength();
  693. *((WORD*)(szBuf+BP))=sLen;
  694. BP+=sizeof(WORD);
  695. if(sLen>0)
  696. {
  697. strcpy(szBuf+BP,Fax.GetBuffer(Fax.GetLength()));
  698. BP+=sLen;
  699. }
  700. sLen=Email.GetLength();
  701. *((WORD*)(szBuf+BP))=sLen;
  702. BP+=sizeof(WORD);
  703. if(sLen>0)
  704. {
  705. strcpy(szBuf+BP,Email.GetBuffer(Email.GetLength()));
  706. BP+=sLen;
  707. }
  708. sLen=Homepage.GetLength();
  709. *((WORD*)(szBuf+BP))=sLen;
  710. BP+=sizeof(WORD);
  711. if(sLen>0)
  712. {
  713. strcpy(szBuf+BP,Homepage.GetBuffer(Homepage.GetLength()));
  714. BP+=sLen;
  715. }
  716. sLen=Address.GetLength();
  717. *((WORD*)(szBuf+BP))=sLen;
  718. BP+=sizeof(WORD);
  719. if(sLen>0)
  720. {
  721. strcpy(szBuf+BP,Address.GetBuffer(Address.GetLength()));
  722. BP+=sLen;
  723. }
  724. sLen=Department.GetLength();
  725. *((WORD*)(szBuf+BP))=sLen;
  726. BP+=sizeof(WORD);
  727. if(sLen>0)
  728. {
  729. strcpy(szBuf+BP,Department.GetBuffer(Department.GetLength()));
  730. BP+=sLen;
  731. }
  732. sLen=Description.GetLength();
  733. *((WORD*)(szBuf+BP))=sLen;
  734. BP+=sizeof(WORD);
  735. if(sLen>0)
  736. {
  737. strcpy(szBuf+BP,Description.GetBuffer(Description.GetLength()));
  738. BP+=sLen;
  739. }
  740. sLen=Password.GetLength();
  741. *((WORD*)(szBuf+BP))=sLen;
  742. BP+=sizeof(WORD);
  743. if(sLen>0)
  744. {
  745. strcpy(szBuf+BP,Password.GetBuffer(Password.GetLength()));
  746. BP+=sLen;
  747. }
  748. num=BP;
  749. }
  750. BOOL CMsgPerson::LoadFromBuf()
  751. {
  752. if(!CData::LoadFromBuf())return FALSE;
  753. WORD sLen;
  754. sLen=*((WORD*)(szBuf+BP));
  755. BP+=sizeof(WORD);
  756. if(sLen>0&&BP+sLen<=num)
  757. {
  758. CString a(szBuf+BP,sLen);
  759. Name=a;
  760. BP+=sLen;
  761. }
  762. else if(sLen<0) return FALSE;
  763. Sex=*((BYTE*)(szBuf+BP));
  764. BP++;
  765. Canbeadd=*((BYTE*)(szBuf+BP));
  766. BP++;
  767. PhotoId=*((DWORD*)(szBuf+BP));
  768. BP+=sizeof(DWORD);
  769. sLen=*((WORD*)(szBuf+BP));
  770. BP+=sizeof(WORD);
  771. if(sLen>0&&BP+sLen<=num)
  772. {
  773. CString a(szBuf+BP,sLen);
  774. Age=a;
  775. BP+=sLen;
  776. }
  777. else if(sLen<0) return FALSE;
  778. sLen=*((WORD*)(szBuf+BP));
  779. BP+=sizeof(WORD);
  780. if(sLen>0&&BP+sLen<=num)
  781. {
  782. CString a(szBuf+BP,sLen);
  783. Phone=a;
  784. BP+=sLen;
  785. }
  786. else if(sLen<0) return FALSE;
  787. sLen=*((WORD*)(szBuf+BP));
  788. BP+=sizeof(WORD);
  789. if(sLen>0&&BP+sLen<=num)
  790. {
  791. CString a(szBuf+BP,sLen);
  792. Fax=a;
  793. BP+=sLen;
  794. }
  795. else if(sLen<0) return FALSE;
  796. sLen;
  797. sLen=*((WORD*)(szBuf+BP));
  798. BP+=sizeof(WORD);
  799. if(sLen>0&&BP+sLen<=num)
  800. {
  801. CString a(szBuf+BP,sLen);
  802. Email=a;
  803. BP+=sLen;
  804. }
  805. else if(sLen<0) return FALSE;
  806. sLen=*((WORD*)(szBuf+BP));
  807. BP+=sizeof(WORD);
  808. if(sLen>0&&BP+sLen<=num)
  809. {
  810. CString a(szBuf+BP,sLen);
  811. Homepage=a;
  812. BP+=sLen;
  813. }
  814. else if(sLen<0) return FALSE;
  815. sLen=*((WORD*)(szBuf+BP));
  816. BP+=sizeof(WORD);
  817. if(sLen>0&&BP+sLen<=num)
  818. {
  819. CString a(szBuf+BP,sLen);
  820. Address=a;
  821. BP+=sLen;
  822. }
  823. else if(sLen<0) return FALSE;
  824. sLen=*((WORD*)(szBuf+BP));
  825. BP+=sizeof(WORD);
  826. if(sLen>0&&BP+sLen<=num)
  827. {
  828. CString a(szBuf+BP,sLen);
  829. Department=a;
  830. BP+=sLen;
  831. }
  832. else if(sLen<0) return FALSE;
  833. sLen=*((WORD*)(szBuf+BP));
  834. BP+=sizeof(WORD);
  835. if(sLen>0&&BP+sLen<=num)
  836. {
  837. CString a(szBuf+BP,sLen);
  838. Description=a;
  839. BP+=sLen;
  840. }
  841. else if(sLen<0) return FALSE;
  842. sLen=*((WORD*)(szBuf+BP));
  843. BP+=sizeof(WORD);
  844. if(sLen>0&&BP+sLen<=num)
  845. {
  846. CString a(szBuf+BP,sLen);
  847. Password=a;
  848. BP+=sLen;
  849. }
  850. else if(sLen<0) return FALSE;
  851. if(num==BP)return TRUE;
  852. return FALSE;
  853. }
  854. //////////////////////////////////////////////////////////////////////
  855. // CShowOnlinePeople Class
  856. //////////////////////////////////////////////////////////////////////
  857. //////////////////////////////////////////////////////////////////////
  858. // Construction/Destruction
  859. //////////////////////////////////////////////////////////////////////
  860. CShowOnlinePeople::CShowOnlinePeople()
  861. {
  862. }
  863. CShowOnlinePeople::~CShowOnlinePeople()
  864. {
  865. }
  866. void CShowOnlinePeople::PackToBuf()
  867. {
  868. CData::PackToBuf();
  869. WORD aNum=aId.GetSize();
  870. *((WORD*)(szBuf+BP))=aNum;
  871. BP+=sizeof(WORD);
  872. for(int i=0;i<aNum;i++)
  873. {
  874. *((DWORD*)(szBuf+BP))=aPhotoId.GetAt(i);
  875. BP+=sizeof(DWORD);
  876. *((DWORD*)(szBuf+BP))=aId.GetAt(i);
  877. BP+=sizeof(DWORD);
  878. WORD sLen=aName[i].GetLength();
  879. *((WORD*)(szBuf+BP))=sLen;
  880. BP+=sizeof(WORD);
  881. if(sLen>0)
  882. {
  883. strcpy(szBuf+BP,aName[i].GetBuffer(aName[i].GetLength()));
  884. BP+=sLen;
  885. }
  886. sLen=aDepartment[i].GetLength();
  887. *((WORD*)(szBuf+BP))=sLen;
  888. BP+=sizeof(WORD);
  889. if(sLen>0)
  890. {
  891. strcpy(szBuf+BP,aDepartment[i].GetBuffer(aDepartment[i].GetLength()));
  892. BP+=sLen;
  893. }
  894. }
  895. num=BP;
  896. }
  897. BOOL CShowOnlinePeople::LoadFromBuf()
  898. {
  899. if(!CData::LoadFromBuf())return FALSE;
  900. WORD aNum=0;
  901. aNum=*((WORD*)(szBuf+BP));
  902. BP+=sizeof(WORD);
  903. if(aNum>0)
  904. {
  905. aPhotoId.RemoveAll();
  906. aId.RemoveAll();
  907. aName.RemoveAll();
  908. aDepartment.RemoveAll();
  909. for(int i=0;i<aNum;i++)
  910. {
  911. aPhotoId.Add(*((DWORD*)(szBuf+BP)));
  912. BP+=sizeof(DWORD);
  913. aId.Add(*((DWORD*)(szBuf+BP)));
  914. BP+=sizeof(DWORD);
  915. WORD sLen;
  916. sLen=*((WORD*)(szBuf+BP));
  917. BP+=sizeof(WORD);
  918. if(sLen>=0&&sLen<num)
  919. {
  920. CString a(szBuf+BP,sLen);
  921. aName.Add(a);
  922. BP+=sLen;
  923. }
  924. else if(sLen!=0) return FALSE;
  925. sLen=*((WORD*)(szBuf+BP));
  926. BP+=sizeof(WORD);
  927. if(sLen>=0&&sLen<num)
  928. {
  929. CString a(szBuf+BP,sLen);
  930. aDepartment.Add(a);
  931. BP+=sLen;
  932. }
  933. else if(sLen!=0) return FALSE;
  934. }
  935. }
  936. else if(aNum<0)return FALSE;
  937. if(BP==num)return TRUE;
  938. return FALSE;
  939. }
  940. //////////////////////////////////////////////////////////////////////
  941. // CNoticeMsg Class
  942. //////////////////////////////////////////////////////////////////////
  943. //////////////////////////////////////////////////////////////////////
  944. // Construction/Destruction
  945. //////////////////////////////////////////////////////////////////////
  946. CNoticeMsg::CNoticeMsg()
  947. {
  948. }
  949. CNoticeMsg::~CNoticeMsg()
  950. {
  951. }
  952. BOOL CNoticeMsg::LoadFromBuf()
  953. {
  954. if(!CData::LoadFromBuf())return FALSE;
  955. IP=*((DWORD*)(szBuf+BP));
  956. BP+=sizeof(DWORD);
  957. Port=*((DWORD*)(szBuf+BP));
  958. BP+=sizeof(DWORD);
  959. if(BP==num)return TRUE;
  960. return FALSE;
  961. }
  962. void CNoticeMsg::PackToBuf()
  963. {
  964. CData::PackToBuf();
  965. *((DWORD*)(szBuf+BP))=IP;
  966. BP+=sizeof(DWORD);
  967. *((DWORD*)(szBuf+BP))=Port;
  968. BP+=sizeof(DWORD);
  969. num=BP;
  970. }