找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
& [& _) M8 H" G3 T4 _$ r& Q
  1. / RevApp.cpp : Defines the class behaviors for the application.) y& j( u$ q! u
  2. //) f( G: B6 _5 N' Z" Q
  3. 1 ]5 q' B" D) x* f: {* J) W
  4. #include "stdafx.h"
    & z8 B7 \& _3 {" P1 z" ^5 u  s

  5. 1 d2 k& h; z: D5 H9 J6 V4 n
  6. //#define UNICODE
    " F: [; a0 O  _2 c* g1 I
  7. //#include <gdiplus.h>
    4 @* r: E$ I2 V/ `4 H/ O' n/ g
  8. //using namespace Gdiplus;& ^* [( f7 x6 {$ l* l; H
  9. & q5 J9 O5 v) q
  10. #include "RevApp.h"
    8 \4 z! A+ D% v  X" @
  11. #include "RevAppDlg.h"
    5 T* {6 }+ Y( X) m/ e; P( p) ^

  12. 8 @% {% H. ?9 E% s; E
  13. #pragma warning(disable:4786)9 d, k! D" l6 k: b$ W5 N
  14. #include <map>- b  A& F) A. \5 Y
  15. #include <list>8 p6 `) R1 O- L0 G
  16. #include <direct.h>
    ' \+ v: |" w8 u9 J0 u7 y4 n' J! q5 F

  17.   j) K& z- \- O5 {% h
  18. #ifdef _DEBUG
    - p6 Q: ?; B2 B
  19. #define new DEBUG_NEW
    $ w' m8 ]- E9 a: A
  20. #undef THIS_FILE1 \) p9 A9 U, l- x" I
  21. static char THIS_FILE[] = __FILE__;7 {7 i' E; u1 l- Z+ ^1 P
  22. #endif
    4 h7 E1 d6 s, L' r- v
  23. #include "SkinResDef.h"1 B% y( }7 V5 x7 Z
  24. #include "ChangeBG.h"
      x' H/ s( `( g
  25. #include "AFXINET.H"& G: S! F; u& A

  26. 9 B  F* o/ ^  R' P1 s2 y- @7 b- c2 e
  27. #define TRADITIONAL_CHINESE 0
    1 r: Q+ U6 _* ]! {3 e9 B
  28. #define SIMPLIFY_CHINESE 1, `6 Y; W' U9 ?. ^/ F
  29. #define ENGLISH 2
    " r8 d% G2 w9 }. v
  30. int m_iLanguage = ENGLISH;. J; u; E- x; ^9 x: d- O, c
  31. /////////////////////////////////////////////////////////////////////////////2 P1 F$ }0 e  L, }
  32. // CRevAppApp
    ! ?* ]' r+ E& R; l, e

  33. * d; E( I  ?; t: d( m9 i7 _* e  E
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    / \7 f# o" A& d) {
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    4 n, R5 ~! ~; V+ s+ N& j% I  l. k
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.( a8 d. H; {  A# ], V* l+ a% |
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    6 E. R0 W0 c% z! ]* c$ g7 W6 c$ t
  38.         //}}AFX_MSG! s+ O" e% W5 e  A
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    * t- q# o" \) e$ f7 Y" x* g$ f. d8 A' G
  40. END_MESSAGE_MAP()- A& ?+ R; }- `$ @! T' A
  41. - J% w: `9 X# z+ s$ A( J+ S
  42. /////////////////////////////////////////////////////////////////////////////
    - X" ~- U! H: [  W, A: P
  43. // CRevAppApp construction3 B" }; {; X4 L1 p7 {+ t

  44. ) J; }! o6 A1 |* y0 j% Y" s
  45. CRevAppApp::CRevAppApp(). g3 c: Q* u; X$ P* \
  46. {' v2 T$ _8 y, k; M/ X% `; R
  47.         // TODO: add construction code here,# |9 H2 z( ^% l" \- @
  48.         // Place all significant initialization in InitInstance) M+ X% M+ \- x& z+ P( n9 {
  49.   bDisplayIsBig5=FALSE;
    ; e& u3 P# y$ Q' m6 J& J5 F( _
  50.   bRestartUpdater=FALSE;% v. D5 N; f, i# n! g. P! w0 U
  51.   bFinishUpdated=FALSE;
    * }" X: q# w9 I9 T
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;7 V+ _( z& w. _+ ^+ V
  53.   InitChangeDataBig52GBKS();: A4 u, m& Y9 A6 ~$ w
  54.   InitChangeDataGBKS2Big5();. }* G+ V& [: j1 K
  55.         //# h7 \* m/ X* ]0 ?9 g
  56.         bClickRunExe = FALSE;
    % _* C" o$ s( ?' c" F$ b
  57.         //
    7 Z2 o5 G( g1 m9 n6 A
  58. }
    % D$ ~' L, W/ N/ T6 Q+ M

  59. % W# T* K  ~% t4 H* @5 Y! y( r" |
  60. CRevAppApp::~CRevAppApp()2 n% j  H: `+ A3 w
  61. {
    1 h% [4 X. Y7 k- o, ^
  62.         // TODO: add construction code here,; X# t# |' g8 l0 y
  63.         // Place all significant initialization in InitInstance
    & H) h5 m! Q$ e9 W4 G# s
  64.   EndChangeData();
    5 P: ?- z9 b8 S" m' U% m2 `
  65. }& m5 S9 C" q. P# v1 u7 D
  66. 4 @% W9 c' N* T4 O& l' @: `6 M
  67. /////////////////////////////////////////////////////////////////////////////
    % L5 r7 _- B$ w* D9 u" M
  68. // The one and only CRevAppApp object
    & j; @# W4 d, _4 C1 P! q9 D

  69. 0 Q/ }* |8 S9 M! `: W
  70. CRevAppApp theApp;) Z6 V$ q+ z) Z1 p& n
  71.   i9 Q2 B+ r) y& @
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    5 I/ O) S! z* t2 Z
  73. {4 d) V% D; x9 O( T
  74.   int iEOF=0;
    9 U2 o) f' ~- e& q8 j" M3 }
  75.   char szTempName[MAX_PATH];  M) Y3 q3 M! E+ X0 r" R* P( z" F
  76.   *szFileName=0;$ R7 v, X7 ]+ o7 X2 N
  77.   iEOF=fscanf(fp,"%s",szTempName);* s4 q: K) q. m6 o6 A
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')8 l2 `& U1 M( d. H( c. `# o
  79.   {0 [5 J7 `1 M$ B5 I! W
  80.     strcpy(szFileName,&szTempName[1]);+ {  e/ B- O" A  B
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    : c& @3 l+ `8 c- Z. d1 v5 w0 q
  82.     {3 E$ Y  F) C' W! L, I/ H
  83.       iEOF=fscanf(fp,"%s",szTempName);" l6 n) U' \1 C% J, h  ?) y
  84.       strcat(szFileName," ");
    - j4 m) J- d/ U$ ~2 S& i! G
  85.       strcat(szFileName,szTempName);* S$ j' Z) V& S* y) k) w
  86.     }& X1 K/ j) c& F
  87.     if(strlen(szFileName)>=1)
    + a* b4 G& \- ~, M
  88.     {2 J$ N+ H* e) O
  89.       szFileName[strlen(szFileName)-1]=0;2 A* |9 e# d7 T$ V( K
  90.     }) S0 L2 C" H5 R5 u& N
  91.   }
    # k' H" j7 k5 }  s
  92.   return szFileName;
    1 _, [+ [. `# n- I
  93. }
    % i! E) @; q2 u" L
  94. 8 L% c+ m, n2 X3 ^9 L
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)  W5 q0 ]8 C; ]; t5 O: N; s
  96. {
    " T) c- T$ c* `' X8 n( d
  97.   FILE *fp;" |1 ]4 {, ^+ T) ]. w: K3 M
  98.   char *key=NULL;
    - G' i$ k5 E! F# j) ~
  99.   char version[MAX_PATH];
    : a+ }/ @+ C; N+ s0 E
  100.   LPUPDATEFILE file,olds;
    # F2 D# V2 \: t/ h- B
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 P  I5 V3 U6 s3 b7 s
  102.   A! {, t" @+ ~% I% q  l* S
  103.   UpdateList.clear();
    - W0 t/ N% Q/ F( D# N' `
  104.   UpdateFile.clear();. k$ c5 [- l# g
  105.   if(GetFileAttributes(filename)==-1) return false;
    / Z+ b9 }9 _( |8 y
  106.   if(!(fp=fopen(filename,"r"))) return false;  H* {3 p; M0 u  F7 r& S. O
  107.   fscanf(fp,"%s",version);
    7 O( f5 V" }; P7 p
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }$ K5 X2 W( d9 P" n7 W9 m+ u- ]
  109.   while(fscanf(fp,"%s",version)!=EOF)1 n1 B( v/ q; P1 r7 ?% v& N
  110.   {* r' ?6 R8 d4 ]  ?
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! E& j5 i% H. L5 u( t1 ~7 a4 U1 W
  112.     fscanf(fp,"%s",file->path);2 m; q+ Q: |# c3 W4 w, i' {  N
  113.     ReadFileNames(fp,file->file);4 X+ j- X( c$ t% |& Z7 Q4 s
  114.     strcpy(file->full,".");
    - D5 Q3 }, a9 K, v
  115.     strcat(file->full,file->path);8 b5 |9 w$ ?9 r1 F
  116.     strcat(file->full,file->file);) I7 F( |  G' V" h8 E4 s/ B! Q
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())8 n$ ?4 {" ]% ]
  118.     {# D- U# S! ^% `9 G& |4 a: d
  119.       file->vers=(float)atof(version);
    ! H1 o9 ], s) M
  120.       UpdateList.push_back(file->full);) e7 j2 P( I8 t2 ~9 P
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    2 f8 ?4 h  ]6 R% W; K% g6 W: s) R- o
  122.     }
    . z7 P* W; W# F" s) w  _4 q, Z
  123.     else; O2 H. x3 ]7 F+ w7 J" D
  124.     {& i. W4 ~+ T8 {. Z2 x: L9 G
  125.       olds=(*p).second;
    # ^4 Z+ F# H% R7 c  |
  126.       if(olds->vers<(float)atof(version))
    + s+ f6 y' Y' c  W/ |! u, r9 w
  127.       {
    ! Y' P. S) n1 s! \- J# U# v' {
  128.         olds->vers=(float)atof(version);
    - V' R5 w5 I& k9 t, B! i' m
  129.       }
    * N6 Y6 k& v9 L. Q
  130.       free(file);. u) I2 {" p) e0 V- M
  131.     }
    # m8 ~  @! U* P
  132.   }+ C8 U! W, `" W$ O
  133.   fclose(fp);
    3 f$ _, K; H5 x4 L" R  h7 r# S
  134.   return true;" C7 U9 S: W. Y3 t3 W2 `5 D
  135. }1 G8 S0 v- s  z; t/ T; `' {

  136. 0 u8 V1 R1 N  H8 G
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    $ J6 \7 q  ~+ P& o3 Y
  138. {
    " U8 N) W+ K2 [( |
  139.   TCHAR  szFull[MAX_PATH];$ N" Q! i0 O( m1 p1 w, g
  140.   TCHAR *token,*inter;( E/ [- B4 n4 [  ]/ \# @
  141.   *szPath=0;
    % \  H! X. J2 Q" u. u
  142.   strcpy(szFull,szFullPath);% d. r) ?0 Y. q- Y' ?3 M
  143.   token=strtok(szFull,"\\/");
    5 j5 r* |$ H5 F/ J- u6 ]+ J  h5 a7 B
  144.   inter=token;
    ) x, |! T+ K: P  U% w6 P6 y+ V
  145.   while(token=strtok(NULL,"\\/")), U2 i9 {: V9 t; u
  146.   {
    & G9 d* }5 U0 h8 H. ~) ^
  147.     strcat(szPath,inter);
    3 Y7 g# m* q/ Q. n6 F! T
  148.     strcat(szPath,"\");
    - I9 q6 x/ i. y6 `' I$ N* p& \9 h
  149.     inter=token;
    ! Z; T1 Y, `0 i. L! O
  150.   }
    $ V  ~0 ~; f/ _! ]9 P/ K( Z1 B* N
  151.   return strlen(szPath);
    ! W! C1 `3 {! R7 W! |3 g4 W% o! w
  152. }7 S# ]% X  ]2 ]$ U
  153. ' |) V/ ]" b4 t4 ~
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    / G3 z/ W4 M6 L6 f1 K4 x8 h
  155. {
    2 A/ J# Q" P" \- E0 X" X- U$ G
  156.   DWORD attrib=GetFileAttributes(Target);
    ) I8 l2 G* R0 M- |2 W' Z; M+ V
  157.   if(attrib!=-1)- |. H0 h6 H, _9 S) ~+ v0 e
  158.   {5 Y: D, G! U. B3 l. G: e
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    9 e$ [+ y6 N! h2 q0 x1 t. y; X/ g
  160.     {
    * k( n; s$ {/ X" F0 w7 T8 C
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    0 e/ `8 i1 [/ I- s) b9 `% B
  162.       SetFileAttributes(Target,attrib);
    , V2 A, N) F9 H1 p3 o+ s
  163.     }
    + R; e' U# D+ R- H% t, Y8 {1 X
  164.   }+ ~5 W5 ?0 ]+ q/ N
  165.   CopyFile(Source,Target,Erase);8 Z2 a- z& M, c' `# w7 ?& w' B
  166. }
      A8 g! @' I' m: x( j7 c

  167. ; i- a. L, u$ H7 f
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ' z& ]  C1 S7 ~
  169. {
    & L% I( C$ |7 n1 b! K: q+ Z$ x
  170.      FILE *fp;
    6 p  A3 U9 k4 H" o  h. z4 X
  171.      char  szBuffer[8192];
    / `, X2 M( x5 j+ d
  172.   va_list  argptr;
    . }+ t! @, R: ~! {

  173. ( u. G- I  h7 E2 b3 M9 f
  174.         va_start(argptr,message);
    ! o2 k: t# t. J) y, u; A) X
  175.         vsprintf(szBuffer,message,argptr);4 k0 E8 R) v# X0 V$ Z
  176.         va_end(argptr);
    7 R4 z) ?% [) p- R% [2 \2 j0 b1 H
  177.   fp=fopen(FileName,"a");
    9 C1 e3 f( m5 a% f  ~7 T' _
  178.   if(fp)/ e( J" d' I% @* m' B3 ~' F& C+ o
  179.   {1 ?1 [, b; Z) Z+ t$ l  C0 C/ s
  180.     fprintf(fp,szBuffer);
    & ]9 A/ v) t6 \4 U7 e( o( @
  181.     fclose(fp);
    + \) C* ~( A! d! `1 I5 M3 d. G0 n
  182.           _flushall();
    ' ~, ^) W" a; m9 {" R; h! j) e
  183.   }
    % q; a2 K/ a" `. T
  184. }0 O' ?" i* P: t$ S

  185. 3 b0 s# v2 y5 t( d& ^' s# y
  186. BOOL CRevAppApp::Fclearf(char *FileName)' w8 s' k8 `! u; q$ l  t
  187. {* P. C$ v7 Q! x6 K$ a" F
  188.      FILE *fp;% g, P9 ~/ w0 N# K- y' _
  189.     DWORD  attrib;$ w) d4 N( Z& M+ V8 d' F
  190.   attrib=GetFileAttributes(FileName);
    ; `! r5 f6 n9 F+ O1 k6 p  b
  191.   if(attrib!=-1)
    8 L* n' B5 s% L  {! i
  192.   {& r" b1 t6 Y: @# Y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);% p* ]% N8 W0 o5 P" _
  194.     if(!SetFileAttributes(FileName,attrib))
    + r( g' [, L' B* [
  195.     {
    7 f( e$ |! I$ R) y/ f
  196.       return FALSE;
    ) h" R, i0 x" X: A2 I( H+ c5 [: j
  197.     }
    9 e0 V  z7 P& q0 g4 Z! H
  198.   }, F% p; ?6 V* X$ o& u
  199.   fp=fopen(FileName,"wb");- f4 U. w( a' E) _% q  P, O
  200.   if(fp)9 L* Q- M! }$ J  o6 I
  201.   {/ C* H6 h/ y4 R; ^
  202.     fclose(fp);
    " g; C5 z! |4 C, g+ ]0 v
  203.   }
    : |% b: K! }1 Q& E" M  V% a
  204.   return TRUE;
    2 x8 b0 [$ I8 E7 o& D( O2 `
  205. }  R* m! U4 F- ?' F
  206. 3 q+ S3 B. ^4 X) @) Q# }& Y( S
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    & r8 [) l  X+ i% D& {  b: S- F
  208. {+ b0 e- H6 n& }1 g1 |$ P& y+ u
  209.   char filename[MAX_PATH];
    9 Z0 P1 {$ ?( i" C4 _- I
  210.   LPUPDATEFILE file,olds;& F( j$ e. B7 h7 v% h* `
  211.   std::map<int,CString>::iterator i;; U, }# O5 o; T# C
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    + w! Y, p2 W4 }, p) }
  213.   std::list<CString>::iterator l;
      G; z+ @8 ]# b# l7 ^6 r# ^
  214. 6 ?6 P& q& c- t; O0 _) R5 D$ p7 r4 Y
  215.   if(bFirstUpdate)3 [. @# F; L3 L1 R
  216.   {
    * C' Q( C, J* s$ }" X
  217.     dwCurrFile=0;
    1 l% S2 }5 H3 d, m2 u  S: z- p
  218.     bFirstUpdate=FALSE;3 @+ _- g' _( }
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): }. p6 A. z7 ~$ \( B3 D* w: O
  220.     {: Y# I, o; w; u, v' {
  221.       dwTotalFiles=UpdateLocal.size();
    $ u  ]$ i( o4 G9 b  p  y' z, x
  222.       dwDownLoaded=0;
    ( D  U8 Z; @# t) F" ]# o- W9 B
  223.       bSilentStep=FALSE;
    ( p( W) R, v/ W
  224.       bCompressed=TRUE;
    % H  I5 U& n! l
  225.       strExtLocal.Empty();
    $ h- b# ]5 e1 K6 l- M. c
  226.       strFullName=(*i).second;* B& u1 |8 J! X2 }- t; U
  227.       dwProgramState=AP_CONNECT;5 h) m" y/ f/ Q" f+ y
  228.       return TRUE;
    * P. q/ L1 K4 t; j9 A
  229.     }
    $ e: Q& X' t5 g) l
  230.   }
    - P& c* C% H3 J4 Z+ b7 [! }; q
  231.   else if(bRestartUpdater==FALSE)1 V  R7 o0 F  v" m: F* C
  232.   {& q5 D0 ]3 j( u8 y7 m$ z- B& X( E
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    . l6 p; S6 x- r  R/ e: I9 E9 s! K
  234.     {: s# {' L8 `, V) I7 {. P; h1 h3 O" D5 u6 x
  235.       file=(*p).second;( a0 O0 Q9 d; X1 p% c; j$ @! u
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())/ }. u! n( W% N& U' ?4 Y
  237.       {
    + X% u. J1 G8 _
  238.         olds=(*p).second;0 d. C3 ?" z/ _5 P# D' }# o2 U$ a: e* n
  239.         olds->vers=file->vers;
    ' k6 T- s8 x3 |3 b" h0 P0 Z2 C
  240.       }8 G# u" f% j4 w/ p% q/ E: L
  241.       else, ~( \" z% `, \9 q' s( a' M2 d
  242.       {% b3 R! |2 ^" d3 q) Q; K8 l
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 H2 z2 ?- B2 v# R; q
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    * D/ j& |$ A4 e+ c9 V7 x: B. R1 J5 e9 p
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    " Z. v1 f, p, X  s! j  \# I
  246.       }  D8 P! _, m, S
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    8 i3 A, d7 H1 H1 E
  248.       sprintf(filename,"(%s)",file->file);
    $ }6 l$ ~1 [; K5 H6 k
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 A" t2 o5 u+ k# f0 O9 Z6 ?. ~
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }! U6 X2 ~' Q" H8 _4 B9 ?1 B
  251.     }: q: B7 k$ s! n  N2 a+ y
  252.     dwCurrFile++;
    # s3 ~$ ]! O" z  {9 J
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 v5 |* H5 A0 ~8 t
  254.     {
    - U0 Z; L4 Y4 `2 ^1 ]
  255.       bSilentStep=FALSE;. ]' n8 [$ ?4 H& B6 V& a" B
  256.       bCompressed=TRUE;- j" N) W& t+ F# u- w
  257.       strExtLocal.Empty();2 ?. R0 Q; ~+ B( n( h! e
  258.       strFullName=(*i).second;$ ?# S0 k; _3 z! v0 A. B
  259.       dwProgramState=AP_CONNECT;8 k" O3 q" X  |% _/ d+ w- t
  260.       return TRUE;& @- P/ k* g/ x, m0 O
  261.     }
    % k: V. y( y, T% Z, T4 z8 W( k% |: _$ q
  262.     if(!bRestartUpdater)
    . g' U2 D. l6 _7 A+ @* T" {
  263.     {; ?2 T9 w2 w% _0 p: m) i  L
  264.       int iCurrSize,iFileSize;
    & M4 C. C6 P5 t6 D
  265.       iCurrSize=0;
    ! S( X4 T  i+ a: P
  266.       iFileSize=UpdateList2.size();( H: C& K5 D6 J1 ]+ o( X4 ?
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");2 K! e+ t) @8 _# ~: O7 H
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    1 E5 Z6 b* T% U, R  S" V* u
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + M6 I% P( C, Z7 z# d& a, B! n! c/ `
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ P2 P3 I$ M5 u& W/ [
  271.       Fclearf(".\\update.dat");8 N. V0 f" @) ^; L1 q6 h( V
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    5 }: N$ [7 S! g8 b, F, c
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)- I  A; }" W0 W' ]; O2 ~
  274.       {6 i0 n( s3 o, t0 a- V; w) M; G
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())4 w* y: P7 R, Z- E. ]. c
  276.         {
    9 z0 q. s! t0 S; x/ I
  277.           file=(*p).second;# ^! `% W3 b& a& i+ b. v4 t7 b
  278.           sprintf(filename,"(%s)",file->file);
    % E, z' V6 t5 ~# \' o% n  h& R
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / b- g' g; n4 @  |
  280.           iCurrSize++;
    ; N  ]3 @6 S: D  D9 n8 }! R5 c
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    0 H( A3 C0 ?7 Z2 J; B0 ^
  282.         }" c0 E! u" {+ `6 T9 h2 U) h- |
  283.       }
    * a2 E, z  F# C5 V
  284.       unlink(".\\update.txt");
    * x% F+ }4 I9 R+ s( w9 j/ N# x; y
  285.       unlink(".\\update.tmp");" Q2 P3 e% O# R$ \- M2 U
  286.       Fclearf(".\\checkversion.dat");" G0 Y& J+ I5 P8 H
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    " q1 M! f2 N( G5 N
  288.       if(UpdateLocal.size())5 v8 h9 J; J, Y
  289.       {
    - }& ^. w8 W" O
  290.         UpdateLocal.clear();
    7 d$ G. V) q2 |! G. |& E$ w
  291.       }
    # f" H# {3 C1 u. |
  292.       if(UpdateFile3.size())+ j0 C* |! Z% Z# m0 n
  293.       {
    # x+ G9 `4 ^1 o1 O: y7 X% q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + x, F- z$ T. T6 X
  295.         {" Y/ W- v5 }$ W* f. Y
  296.           file=(*p).second;) J! e! p6 ^- l2 a. U+ h
  297.           free(file);7 i/ t& ~( ~) Z, C
  298.         }
    7 b2 d  ^* |7 J1 u
  299.         UpdateFile3.clear();9 [; r8 V, O0 H) S2 u/ @& t4 n) @) w
  300.         UpdateList3.clear();
    # z5 K  _4 O$ l0 Z, D
  301.       }9 ]0 F0 m* E/ w$ d5 ~; m+ ~/ S
  302.       if(UpdateFile2.size())
    6 L' [- |5 c' l8 L7 P% W
  303.       {; S8 x/ [% g4 [; `7 M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); P5 J7 P6 ~/ G+ H( J' A* o+ v
  305.         {1 D0 T7 v& T6 ~$ c4 g6 J
  306.           file=(*p).second;
    - |4 F6 g7 Q4 B
  307.           free(file);) h7 ^7 D: g) k
  308.         }9 |1 i- w/ V" A
  309.         UpdateFile2.clear();5 r6 E8 b  A. b% b  B0 l4 V
  310.         UpdateList2.clear();  J* Z* [2 E" e8 Y
  311.       }
    6 X$ ?! w9 h. z: _- ~, g" z) J
  312.       if(UpdateFile1.size())! ~2 S( |- o9 c/ V' y% y. f
  313.       {" E, V! t1 P5 Q2 M
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 b* S, C$ E, n0 i" e
  315.         {) X% f. [; H5 \
  316.           file=(*p).second;" O8 l6 n" u+ V8 k6 J: h* [
  317.           free(file);
    & R- \6 r' E6 d* k2 Y3 w. ^/ p8 r
  318.         }, [" y! R; m3 c
  319.         UpdateFile1.clear();
    7 d6 l- d: t7 ~$ A" X  }! C
  320.         UpdateList1.clear();
    ) c- ]8 r. ?+ C$ _  w# U' L8 ?- h
  321.       }
    , W& _/ ?. E. v" v  Y" C4 y5 E
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! r4 k, n" n+ p* |, `! S
  323.     }; M& d) f8 N' ]
  324.   }
    8 T& e# O4 l7 ^' i, |- ^
  325.   return FALSE;
    : j* `7 h0 S# d: r) Q# F
  326. }3 X1 R- A( r3 d9 g& t- _  n3 m

  327. ; X) v2 }+ [9 C
  328. void CRevAppApp::ClearAll(void)
    ( d: ]  K1 E6 Q9 g/ P2 q" h
  329. {9 K+ M9 F/ ~! F# u$ ?" x' y
  330.   LPUPDATEFILE file;. F5 v. h2 _; G$ d0 P! I3 E
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 J0 @  m4 \( g) ?/ n
  332. - B9 n) l+ b# J5 p5 H
  333.   if(UpdateLocal.size())
    / [" J0 r+ d# V0 A5 K
  334.   {& m# F6 t& [3 c- Q7 L. W
  335.     UpdateLocal.clear();$ X0 b1 E: ?/ e* [$ W5 }
  336.   }
    ' a- R' N* {6 K. U
  337.   if(UpdateFile3.size())
    ) Z( Y! @' o* b/ X& W. O' N0 C
  338.   {* Z5 C% L: o: W& ]
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), p  x9 l5 J8 g5 P" g: X4 e
  340.     {! j6 x  i: }! T6 t
  341.       file=(*p).second;3 G" s, `: a1 \: ^
  342.       free(file);4 w' _+ V& j& j
  343.     }
    5 ?' A4 A8 ]; \! l6 i
  344.     UpdateFile3.clear();
    . U' c" q2 ]7 F/ U1 x
  345.     UpdateList3.clear();* i- Z! h5 j1 k0 K" m8 F
  346.   }+ _. J6 Z  F5 i9 @1 p8 g
  347.   if(UpdateFile2.size())
    ) I' D' P/ F8 F  m% [7 L
  348.   {+ N5 q8 B6 m' m7 ~
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 c8 v  H3 Q0 ~
  350.     {
    ' e" p; P; d" b7 p/ e- c; a
  351.       file=(*p).second;. @, {! e5 {' U( W
  352.       free(file);/ _* j" y- b8 X; {# f! l+ I
  353.     }% g! \* Q$ G0 g# R4 H" P3 |
  354.     UpdateFile2.clear();
    ' r. C5 A( ~3 X' |# o
  355.     UpdateList2.clear();5 Q6 d5 G: i$ |6 C/ T) Y/ M! |
  356.   }* C& ^2 D, b  }9 _: q* z# o# M1 |
  357.   if(UpdateFile1.size())
    # Z: \2 t1 U3 P) ]+ Y* a6 M  ?4 e
  358.   {& Q6 ?) V: q8 X
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - ], I2 O7 N2 s  A
  360.     {
    : p2 }- y! \( E+ a
  361.       file=(*p).second;5 J7 X8 k" C% y8 I* r) v: m
  362.       free(file);
    7 z. f. t. a8 }: Z1 v% w
  363.     }- u4 }+ d- A3 c4 u& R6 n- z
  364.     UpdateFile1.clear();
    ! d0 `* m/ {% L
  365.     UpdateList1.clear();$ c# j. i9 p" C% k* ?  M0 T" _
  366.   }
    9 a4 G( d' [6 h6 j
  367. }  * Z/ O/ [3 _: a2 |( h2 m
  368.   
    1 K& r0 V- K6 }  R
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    8 P. _6 L0 W" p5 i3 i% W
  370. {
    ; [6 _2 w- o; _$ U, r5 T- [" u  L
  371.   int c;
    . r) `8 c$ B0 Q; v
  372.   LPUPDATEFILE file1,file2;
    9 `$ [( |: E- K( X. i# @
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    - q) `3 ]( C1 T& x' a9 E+ b: V& X0 c
  374.   std::list<CString>::iterator l;' U/ u: ^# o2 N0 f! W  v
  375. " ]- U" Z0 q6 x3 ~# _/ f1 j1 w! T
  376.   UpdateLocal.clear();
    : T; T: ]0 Q. V% \
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);: x$ Z: _7 `( d: j, j( E: j
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ N2 o9 g+ O* K- _  c
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);3 Z3 C6 H+ I8 ]) @5 Q& B6 p
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);  P/ B' s, e' ~& e4 z
  381.   if(UpdateFile3.size())
      z& H8 }0 T' X( @3 c3 ~$ A' U
  382.   {) }. L* I# i0 L
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)" w0 N3 t6 j1 Z- b. j( k* M/ O4 z
  384.     {
    . I% V- a+ A! ^
  385.       file2=(LPUPDATEFILE)(*i).second;  C4 [5 K  v. Q* j9 D) h
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! s4 ^4 x/ g$ U# h% W( S: d; \
  387.       {
    1 K& V" c, i4 \) O0 X& f
  388.         file1=(LPUPDATEFILE)(*p).second;- X, C; i8 f4 ~6 Z" ^! `
  389.         file1->vers=file2->vers;
    ( D" x& C+ G4 w* G7 \0 H8 F
  390.       }. g" X9 z- Z+ y7 L+ G" J2 u# q
  391.       else
    6 @& h) J  v, y; `/ ]6 @
  392.       {: w) k9 O2 j7 {# t2 q0 K0 G
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * Y$ L6 g$ c; J! [( l/ c& m
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    1 m5 [/ w) U4 b. y( ]2 T" @
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& f# z; O0 A" L' U% x
  396.       }
    7 Q3 U; ^$ h3 J; T8 q3 n! s) C
  397.     }- A2 w2 i& }' K* I: u
  398.   }8 P$ A; D- O; f# e
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++). W, F5 D% L! B: m& i
  400.   {' W* ?9 Y) u5 e! G4 g! d3 ^2 O
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    & v; t/ z4 w' L$ `+ R- x
  402.     {
    - ^4 x9 v) H/ E2 a/ V
  403.       file2=(LPUPDATEFILE)(*i).second;
    6 `* U9 a# F) w
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 ?& w; M; {( X0 F
  405.       {* z. o" J. i# z$ g$ t
  406.         file1=(LPUPDATEFILE)(*p).second;
    * U# Q1 Q$ \* U! V5 b
  407.         if(file1->vers!=file2->vers)& H. ~4 b+ s1 ^% y1 ^: ~
  408.         {
    2 J; \  d) v' u6 ~
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    $ e1 O7 n$ [& V1 U8 X- O
  410.           c++;. m/ p& [+ z1 O) v6 r9 ^( ?
  411.         }
    , Q$ K2 d7 B4 Z. F/ g. x; \
  412.       }
      I& S$ ^# [2 ]4 [- P, F; h
  413.       else
    4 }  _( @. c" s; X) P  Y: C
  414.       {
    + Y" j% B) H$ i2 |
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + v9 n: T4 n8 v
  416.         c++;& z$ Y+ a( S$ u6 P9 O
  417.       }
    ; u6 P, i' K; v. g
  418.     }
    , X4 c. A+ @2 @4 O
  419.   }* S* a" l4 ?$ ?! y  z2 r! F! A
  420.   unlink(".\\DownLoad\\update.txt");
      @  w0 l4 \( ^7 X
  421.   if(UpdateLocal.size()) return TRUE;
    + E1 W, U! D5 k$ V+ }
  422.   else                   return FALSE;3 @8 O  n4 d* H' [* s4 s
  423. }
    & B. p% ^* ?0 a( `$ L( L

  424. 0 M; _9 O3 x/ V" v; _# u4 r6 \# p+ u
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"- z  w4 C+ @. j+ d$ m$ D# p4 D
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn": W9 N9 z& ?& p! j- \9 _' ~% V2 F

  427. ; |4 Z* ^! I2 ]+ a. F4 c

  428. 5 `. Y: o' s" ?- O2 I# V- n. s
  429. 3 B' {$ L/ i- l9 e& R; C7 t
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ! Z# G7 u. k# _2 Z
  431. {2 c$ ?$ R' \( J
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;3 Q9 _3 V+ _- c  L
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% j! x7 v) k0 r! S# [
  434.   {* r' |# F1 A& A! J3 d
  435.     char szLanguage[50];
    , X* k! |+ S2 `* ^) r4 _
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / }  r) n  W; b- \& y) W
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  l& k+ E, ?; j# ^' Z) G$ e4 l; b$ s
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;: V" g4 r' j! x
  439.     else                                   m_iLanguage=ENGLISH;
    0 N2 m( E/ V, F% K* b
  440.     char szRegister[100];
    9 m; ]3 U& N+ @/ c- R1 T1 ]# n
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % s1 m$ l& e# I" M. k4 J& n
  442.     strRegsName=szRegister;
    , D% Z! V% u1 `6 C/ N4 o
  443.     char szPatchURL[100];
    7 a) E( l8 z; y6 _+ ]" n
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . G( i) t+ s2 U9 U5 H" Z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 J* ]% y- E( X" k  b
  446.   }- g! e, h% K4 @5 Q2 y0 T
  447.   else
    - T* ]( ?, y# @1 {
  448.   {% c3 y( o' k) m1 F, ~: l
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 C! Q  g  x6 T* h' l
  450.     strRegsName=DEFAULT_REG_URL;
    $ m8 P# A+ h& V* o( f
  451.   }
    5 }( A4 \0 B9 h2 s+ k
  452.   if(GetFileAttributes("hosts.ini")!=-1)
      ]2 d( x6 [* W
  453.   {: N  Q% G$ g! g+ T9 U/ K7 P
  454.     char szIP[50];0 G  |$ l5 s( q
  455.     char szDIR[300];
    8 l  N0 b- F3 }$ v
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))9 s! k( r. l6 r& I$ T8 D4 B6 z! b
  457.     {
    7 E, `9 Q  J6 w1 w  B3 S: i9 w
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");; s: U' _) ~4 U$ z6 [6 v( y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 Y1 N. n% I6 |
  460.       strHostName=szIP;$ |' T% s& F1 W3 {* q. m
  461.       strHostPath.Format("/%s",szDIR);
    ) z, ^1 g6 A( `  e" \! a9 y2 X
  462.     }
    - W  w2 B: R& u5 u0 Q( T
  463.     else
    & p. _! I8 [& ~( C
  464.     {
    / Z* u# |8 ~, Z7 p
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)6 t% Z+ H( f( X) X& a
  466.       {/ M! |* M: F0 `8 d4 N
  467.         char szLanguage[50];1 r9 w; s4 V: H1 [
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 b- _9 w3 |0 g2 |. b6 Y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 r% V% g4 E) o' @* W
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - C' W( Z; y5 [
  471.         else                                   m_iLanguage=ENGLISH;
    + C1 K4 n% q! D+ |' W* b) Q4 S' q
  472.         char szRegister[100];
    & O# B" {% ]8 F
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! U) V" b! m( g* u- C+ K
  474.         strRegsName=szRegister;" W" C* a$ j7 ~2 l# r
  475.         char szPatchURL[100];4 _6 J. i( ?! w5 B: f
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * r+ ?' Q; N6 X) @" x* E
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  n! b6 O2 @4 s$ H6 y: C
  478.       }+ r3 k/ x: y* [& t3 y5 K% F# v
  479.       else: t7 [0 {) u1 q5 {% _& q; {" d0 o
  480.       {
    + P, K! f( x1 B% v
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    " n3 v; w) i3 X: @0 R, I9 U4 Y9 ^
  482.         strRegsName=DEFAULT_REG_URL;
    ( V  [$ O  D. L# r1 s
  483.       }& Y6 j6 f9 e& Y; p! L% k
  484.     }
    / N1 j- E+ F8 O
  485.   }& g$ s# i" `4 f' z+ p
  486.   return true;
    ' f% C6 w  J" _( Y* p: Q: i) e/ y
  487. }4 ?5 H5 m) P/ f0 e! {) q* E, {( a1 m

  488. . W, n) W. W, J8 t9 d3 D
  489. #include ".\ZLib\unzip.h"3 w  {- X; u9 m( O
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    , Q% H/ E$ T( q/ y# I1 x$ S
  491. /////////////////////////////////////////////////////////////////////////////
    ' r, F+ w  G: y# K0 `; i
  492. // CRevAppApp initialization' r8 u3 O0 A' c
  493. ; k9 f5 C, c" y1 T) V" g
  494. BOOL CRevAppApp::InitInstance()
    : ?: k1 u+ D* O+ j' J
  495. {) h2 b" W4 V& f& D; P- C# n
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];. `7 c  r- _) _* v# D

  497. : D; {4 Q$ n* _/ S, a; S  j: s9 [5 s
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 s! N% z4 ~, s3 |' w
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))- |! X: h6 y$ X& _
  500.   {
    ! k& |& c7 M: Q2 Z' @5 J4 \
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");7 i: V* D2 K& {( p0 d
  502.     GetPathFromFullPath(szPathTarget,szPathSource);. T8 D8 R5 R" d6 k7 @& u8 t+ n
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))): Q- n* C3 g3 h5 J; n
  504.     {
      m- Z' H" g$ _3 z
  505.       strcpy(szPath,szPathTarget);
    5 X/ E; l% K4 w+ w, U  R2 S
  506.       SetCurrentDirectory(szPath);
    / g7 m% e6 i5 r: |4 o: n
  507.     }
    ( a1 M$ T: l6 ]. M
  508.   }) r- \9 x, k, \7 g% f4 k+ v
  509. #ifdef _DEBUG
    ! `: z9 Q! {) ]; z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      m( S  Y4 N8 ?
  511. #else% `3 f7 \. P: Q1 W0 _4 z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , p! ~+ U$ N. g, w) |! E* r
  513. #endif/ H' a$ s' K% E& G+ i, U
  514.   {: b3 c% w6 X6 M( R* v; N5 g/ d6 C( c
  515.     char tempFileName[MAX_PATH];
    3 L$ {& n7 V- S2 i4 r  F( f
  516.     strcpy(tempFileName,szPathSource);
    # ~( j& D7 d$ n# A( m
  517.     tempFileName[strlen(szPathSource)-12]=0;1 e# w$ {0 O% A+ z8 Z: G
  518.     strcat(tempFileName,"\\$CSUpdate.exe");+ C% \) ]% e1 \1 c* X, R. k8 D
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);% Y3 c& N* L% Z# {6 B4 K
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ' {2 P4 B* v" O
  521.     return TRUE;! N& Z6 m4 i# ^
  522.   }
    - Y0 Q! F' v$ N2 K+ i! g3 V
  523.   // Nuke 0118: Delete run.exe' m# B# n0 A: l6 M! I7 k0 e
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    7 r! M2 W5 a$ n+ g; d1 G" S. U
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");1 K6 g1 g9 \4 H* m& M7 m  V$ f
  526.   if(!ReadCfgFile("Config.ini"))4 x3 r7 ~1 {2 r4 l
  527.   {3 P* n. @' o& Z- ], e8 R2 r
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);' G; i3 B, }- F+ A4 {, M$ Z
  529.     return TRUE;
    7 V9 T. q7 k* z/ E  o4 L
  530.   }$ m( Q) ^0 {  p1 _0 |9 M3 G
  531.   HANDLE mutex;
      i0 h8 i; a$ N
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 m# G3 N8 T9 O' I' k
  533.   {+ O5 i0 l6 y. d: r2 o- X
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    7 ^* Z8 W; D& l1 r. ~% V- O% I% }
  535.     {
    ) a* w, A0 a* g8 P
  536.       CloseHandle(mutex);2 S. l  @8 f$ a% {+ A
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);, G4 K# E3 [  U0 e$ u, c" P  U
  538.       return TRUE;* H% w- Y. U6 V/ U
  539.     }
    & G' w2 B/ E6 V) z) ~6 a: }6 U
  540.   }  - w# @' O* B- T( E
  541.   CloseHandle(mutex);( o" T% b* Y8 J

  542. 6 }: v- \; f' k
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    " h7 G: y! S9 V6 z3 T! N+ q2 e6 }
  544. - u+ X1 ?& S; R* _- a7 y0 z( ^5 c  @
  545.         AfxEnableControlContainer();; d2 h5 Y9 g8 G$ q. C; O

  546. ) g- z7 w3 G, I- m- @
  547.   bCanUpdate=FALSE;
    6 z  k! }' W5 J" \5 M' E- N
  548.   dwStartUpSteps=1;
    1 B: ~3 B! q  P. `' h& P1 a1 y
  549.   dwProgramState=AP_NOTHING;/ Z1 I* ^  J0 ^( ^  Z1 A

  550. 1 a! l+ {) T/ ]$ W7 M/ T1 F( \
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);& \8 i. A4 ?- o& s. J1 O7 w* O

  552. 7 J. _$ c' l# ^. g* A
  553.         // Standard initialization+ Y- c- l7 N, U8 b
  554.         // If you are not using these features and wish to reduce the size
    % `/ E& v$ _- j* H
  555.         //  of your final executable, you should remove from the following+ B, e3 z- M; J
  556.         //  the specific initialization routines you do not need.
    7 q% z  b- m) Y. C8 k

  557. 9 {1 w0 G+ P" B
  558. #ifdef _AFXDLL  C; A7 j  w# P( @8 M
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    $ r" C2 d) m$ t* E" d- }
  560. #else( U6 j6 I. X! V* _6 l* U
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( q' q0 K0 z8 Y8 n- c; A
  562. #endif
    7 p% R. s/ M- z, Q: ?

  563. 6 r  \6 b8 X6 @) ?$ U9 |8 D9 e
  564.   dlg=new CRevAppDlg;/ \5 {( Y% f) f& o- a- @
  565.   dlg->Create(IDD_REVAPP_DIALOG);+ T( i4 G; _2 s, u$ a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    : @# u3 U3 }6 d9 D/ ~7 ~
  567.   m_pMainWnd=dlg;& m9 p/ X: U7 H. r, l) b7 [2 @
  568. 0 P! e1 K5 O9 T. V6 N, j# k9 Y% ?& I
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);0 t# U6 S2 `; ?7 A
  570. $ O7 u7 u. j6 j3 p7 G$ U. M
  571. //  GdiplusStartupInput gdiplusStartupInput;
    - J/ v, s  X3 L( i3 |" O
  572. //  ULONG_PTR gdiplusToken;
    ) r# o; Q+ E4 K, G9 d/ w
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    . u. [$ }$ ^8 x6 ~
  574. ' u+ F9 Z7 l( U. |% s6 r
  575. //        CRevAppDlg dlg;; q8 o  ~8 ]) A; s
  576. //        int nResponse = dlg.DoModal();
    # z, _$ P' ]# A. a9 g1 v
  577. //        if (nResponse == IDOK)& g9 |8 S5 _& C8 n3 g) e
  578. //        {
    8 o/ g( k  b% k5 _
  579. //                // TODO: Place code here to handle when the dialog is
    . M  W( [. o! z6 A9 ~' {
  580. //                //  dismissed with OK
    * h6 r" n. C$ [5 s' V0 x6 [
  581. //        }: h7 F0 {  D( `7 v/ ^
  582. //        else if (nResponse == IDCANCEL)" z; b: W! k  Q( s
  583. //        {
    % n- D* B+ M' J# H( P% G0 |# D0 Y& W
  584. //                // TODO: Place code here to handle when the dialog is
    ) Q' a: o6 G$ Y6 p. i+ f/ A' G6 n
  585. //                //  dismissed with Cancel
    & |; o2 G$ ]- f, n% Y* D
  586. //        }
    ' q5 X6 k/ \1 _! b
  587. $ t; N6 X; n( _2 t% Q
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ; T$ F/ u1 q' X" n3 O
  589.         //  application, rather than start the application's message pump.
    & u7 o: x+ |+ Z% \
  590.         return TRUE;9 ]' }3 _9 ~5 r6 q8 x
  591. }
    2 b4 Z4 t1 @3 N

  592. 3 [' k4 x( y5 ]+ K3 m
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    8 a$ _4 O4 B( X5 x0 u, v
  594. {
    0 V2 ?% w: Q& l- E
  595.   int i;
    7 }# _  G" h* u) V  {
  596.   char *szRet;: P$ O2 F5 e3 U. s

  597. & c( _8 w; f# F1 H6 f* F, Z
  598.   if(pSource) { itoken=0; sztoken=pSource; }5 g& }4 h1 X5 Z& [  s
  599.   if(sztoken)
    3 }- O( I4 ?- f" {+ Q
  600.   {$ B% Y: Y9 H/ t
  601.     szRet=&sztoken[itoken];8 W: r9 c( D% e7 r& n; O4 h
  602.     while(sztoken[itoken])1 L5 K0 L1 L9 |' I0 L
  603.     {/ [- h: a/ ?* ^8 ^/ @/ n$ ?7 q
  604.       for(i=0;i<(int)strlen(token);i++)
    4 J% O. @/ e% K
  605.       {
    " ~* N) h0 i. I; ^" ?
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    # c0 v8 n1 U/ `  q
  607.         {
    6 |0 h. O2 Q) X& Q6 g! q  @! i0 h% L! f: _
  608.           sztoken[itoken++]=0;
    - V0 J9 N$ [9 z( K0 S/ D
  609.           sztoken[itoken++]=0;
    3 r0 e* m9 I- t
  610.           return szRet;
    4 K$ z( ^5 Q3 {4 M$ L
  611.         }
    : I. r9 f: x+ p% f% m
  612.       }0 @8 D3 G' l  K. r( M
  613.       itoken++;3 ~; ^8 ~2 D2 R8 T: o4 W
  614.     }
    8 A# v5 e) @; ]( f# t) P
  615.   }* m6 b: e: T7 J* |2 |' Q# q9 y
  616.   return NULL;
    ) @+ H4 Q+ D0 i5 w! b
  617. }0 Y+ }" W0 ^0 }, `2 i( t' S0 L
  618. 5 Z/ j  c/ Q6 C" V$ }8 R( C! w2 c
  619. void ProcessProc(long Total,long Current)* C, w9 w% ~4 N8 O3 a
  620. {8 H& o# z, U2 j; @, k- v
  621.         MSG msg;
    " }  A6 ?4 u2 ~
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);& z* J- l& M! L4 n: e' A) P/ ^- L. @
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));  l9 v- n  S+ ^: Z/ X: m
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))4 c& S2 n7 N3 v# ~3 {
  625.         {
    5 W  b: d* z% M& j/ c
  626.                 if(!GetMessage(&msg,NULL,0,0))
    1 V" |8 Q7 o% j# Q
  627.                 {
    * h- t4 U6 k; N) Q
  628.                         return;
    6 R; @6 s) ]' z, V  q, M$ I
  629.                 }0 l5 D5 B) x9 z: {( e$ L" V
  630.                 TranslateMessage(&msg);6 d+ G; J7 i0 k8 Z6 r" a% Y
  631.                 DispatchMessage(&msg);, s' Q( I/ d( ?- U, W
  632.         }        . q; |1 y( b  Y/ `- s! X* r
  633. }
      e& f5 b# W6 I3 X) |

  634. & {; E7 E/ M" L! a9 \
  635. BOOL bFirstChar=TRUE;
    5 j0 y( a: n/ n1 g, q

  636. ! E/ q7 Q  R  D9 b7 |0 ~% D0 w
  637. BOOL CRevAppApp::OnIdle(LONG lCount)  E9 s0 A# K7 U7 X. ]4 {, b
  638. {9 X: F8 }) e$ e% v" D
  639.         // TODO: Add your specialized code here and/or call the base class, x# V: L" j( K( _3 }
  640.   switch(dwProgramState)& _: g9 E: }& [4 q$ N0 m
  641.   {
    : D* l/ i% I8 l0 N- @& J% u# y
  642.   case AP_NOTHING:
    $ o. B/ i1 j' I9 M! }5 H) W2 L
  643.     switch(dwStartUpSteps)& g. i8 A# W2 {, S, k& u
  644.     {8 u3 z' P3 h# W# V; |/ n
  645.     case 1:
    . J5 n7 H# `# Z8 E( [7 P4 t
  646.       {5 L) ]; y, r, D) P! y( F' E
  647.         int i;+ d: M6 v  N* I( N" u0 k. ?3 x- X
  648.         CDC *pCDC=dlg->GetDC();
    / n8 A# V: f3 i$ s. z& B& l
  649.         HDC hdcwnd=pCDC->m_hDC;+ b9 k! T- e+ z& ~, f/ K
  650. //        Graphics graphics(hdcwnd);
    ' S3 P4 t" r6 w! G
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ( Q( S! g5 V, w
  652. //        INT iWidth=bitmap.GetWidth();
    6 |: R' r- R# U" q# f. {; f
  653. //        INT iHeight=bitmap.GetHeight();
    " g. ^  G7 m% d
  654. //        Color color,colorTemp;7 I7 A4 r( e' w6 C
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ( K) Q6 q: J" [/ {
  656. //        {, u1 j1 @9 a" R/ i: s/ ~
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    5 ]: Z0 r* M$ ?. K7 r
  658. //          {7 y1 q8 `' a; t3 l
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    6 c0 j* O& v+ ]1 Z. h1 M
  660. //            colorTemp.SetValue(color.MakeARGB(
    ! `  q. P& a& a1 P7 Q  p
  661. //              (BYTE)(255*iColumn/iWidth),+ @# o8 X7 G  B
  662. //              color.GetRed(),
    + Y+ Q- l7 T: w) X$ J
  663. //              color.GetGreen(),
    - D. m3 r/ C, p3 `( h
  664. //              color.GetBlue()));
    " v5 `- x+ t2 v5 d8 i$ d
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);. K3 |$ r6 }3 I" r1 X: n4 {
  666. //          }1 z2 ?; ~; ]4 P# e7 H
  667. //        }) S' v) `0 v( j/ ~
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);, i; R- Q& ^, I! {- F  u4 `4 M
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # D- T4 j' V$ ~0 h3 s# N
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");. i# Q# [# N# t# C" M
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( o( \6 N- O2 h! F$ j, [# R
  672.         for(i=0;i<240;i+=8)
    $ c0 Q. l; O( }( e% c$ S5 f
  673.         {
    $ t# B. c( |: i* y9 _; H
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);, B. s: X2 _" d" c6 [/ l
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# L/ N9 s) r, S( ^. t& P
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);, @& B, G( Q! O+ }
  677.           Sleep(33);+ s2 C# z. Q1 r/ P8 w
  678.         }
    7 V8 S) v: z" w4 g$ n1 ^1 m! l* k
  679.         Sleep(1000);) S9 N6 N0 j/ d* m- ~
  680.         for(i=240;i>0;i-=8)8 R! `: l  V) w/ t7 R7 r) j: \
  681.         {& s' O% s0 x5 |$ N* W% m1 q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 A  C! t. v9 l) G) L! ~/ a6 `# b
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    8 O' ^/ w. ^7 x) C* Y1 {
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 D( h- u, u7 L: E( b4 U8 Y& j
  685.           Sleep(33);
    * {" u0 G6 O, J  O$ {
  686.         }
    3 f7 I8 r4 U1 G; N( ]
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    9 Q" M& v+ z- {; s; ^6 i: F0 t/ v
  688.         dlg->ReleaseDC(pCDC);! j5 `7 K+ A. d8 \( z
  689.         DeleteDC(hdctar);% R5 W; j" k6 U9 l3 f/ w
  690.         DeleteDC(hdcsrc);6 B$ A5 Z" N! F! L, L1 L
  691.         DeleteDC(hdcorg);. O5 j) y  k# p6 M  @
  692.       }! ]; J, }! _/ n* }; x# |( R" l1 s1 v
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    : e$ N5 w+ L, s1 ?8 h. V; h1 R7 J$ ?7 ~
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    6 J/ R* \  Y, ^9 y" @6 d+ y" ~
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");1 r; s2 q  f" D) M" t
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");6 h1 |4 X4 W+ d! x2 f( ?) e
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 B2 |# x" \* P" Q( v' G( n
  698.       if(!Dn.Connected())
    & d+ e! O# k: C4 e
  699.       {
    0 v/ e0 \1 U& n7 S
  700.         dwTotalFiles=1;5 \* o, k1 H! z( X
  701.         dwDownLoaded=0;" N3 p& B8 U$ H& S# Y2 n- M
  702.         bSilentStep=TRUE;) t/ E9 M& [* n/ p% U! |
  703.         bCompressed=FALSE;
    9 Z8 y, e; h8 Z
  704.         strExtLocal.Empty();, m; V6 k) N7 A( t$ a
  705.         strFullName="readme.txt";6 z* H% }( \7 G1 W6 U
  706.         dwProgramState=AP_CONNECT;
    : R* G/ @: i' I" Z# K
  707.       }
    2 w. `& z5 p: w5 Z( F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();& K0 B4 X! ?/ t& _- [6 r
  709.       dwStartUpSteps=2;
    " e. n! {9 N9 x9 {5 i+ t" O
  710.       break;0 G- I# ]7 j! Z
  711.     case 2:- ^3 u: Q& c6 j
  712.       {
    7 w" I4 L  U' i# H% N. {7 P+ F# K
  713.         int iEOF;3 `% J; E5 q8 x9 R2 E' E
  714.         FILE *fp;
    & q3 O/ i% Y; o0 \/ d3 t* q
  715.         char szString[512];1 c! U- D  E) H  Q8 y: j7 O7 J
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* f, p% C" N1 ~4 ?) D
  717.         if(fp)/ b' r0 H  P$ w4 \- S8 D# [
  718.         {. o& q( J& [& \1 J: L$ p+ B8 n
  719.           do" M& |& c) q$ ?, {. R
  720.           {0 V& `& l) ^, B2 @/ w* d5 \
  721.             iEOF=fscanf(fp,"%s",szString);9 T0 E" U# {) f$ V/ b) R* B
  722.             if(strlen(szString))
    0 }7 K# P9 ~+ X# L+ H8 M
  723.             {
    0 J* w4 {8 u. M, N
  724.               if(bFirstChar)5 c& u3 s) R- B$ D8 Y: ~# ]1 A
  725.               {
    ( I- O9 |' s* P
  726.                 bFirstChar=FALSE;8 ]! S: P& s0 \& H" B
  727.                 bConnectIsBig5=FALSE;
    6 ]% J2 ]6 }! ^5 Y; |
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;/ d  o+ Z0 R1 d- `
  729.               }
    . Q% _9 X# \' |3 f+ m- s
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    6 n" W: W* X' i9 Q- s* z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ) x& |7 v) i1 V1 e8 f2 X  v
  732.               dlg->m_ListText.AddString(szString);) N) p" n4 O. h; x3 d
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 E  U! l7 F) `
  734.               *szString=0;
    * [: k$ \  W  E0 @8 [; r
  735.             }
    ) ?" h2 S+ x+ Y, c/ m
  736.           } while(iEOF!=EOF);
    & @! T$ s9 w0 |# J/ @2 m; F  F
  737.           fclose(fp);
    & X& J, q8 W9 h& U8 R, N
  738.           unlink(".\\DownLoad\\readme.txt");
    4 }$ F! G, n) C0 n$ ]  ~' ?# X9 F
  739.           dwStartUpSteps=3;9 ]" K0 l  C1 H/ I- X; G5 t4 u
  740.         }
    5 V/ h7 r& z2 m3 I/ o2 i
  741.       }3 X+ X3 i1 L- X' G" l) W& W6 E/ ?* J
  742.       break;
    & ~( z, e# g$ [% C# U5 N+ B# Z
  743.     case 3:( U) |3 t+ h$ ^9 Z3 }" v
  744.       if(!Dn.Connected())9 K" z1 p; a: W( @+ @& Q# i
  745.       {+ B  V$ F. i- F# U
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);0 c% B; U2 ~5 c7 O
  747.         dwTotalFiles=1;1 R, l) t! {# d% K4 l1 M3 }  Y( l
  748.         dwDownLoaded=0;
    + X7 f: c: b% @
  749.         bSilentStep=TRUE;. {+ ]: p  p) }) @" [7 m
  750.         bCompressed=FALSE;9 ?7 {% e/ v  ~8 k0 l- Q& t/ U5 S
  751.         strExtLocal.Empty();
    3 J& M7 S8 Y9 d1 b/ w$ ^
  752.         strFullName="checkversion.txt";& Y- T, c- B8 P
  753.         dwProgramState=AP_CONNECT;
    2 H, c  m' Z0 n/ ^. w" X" k
  754.       }& m2 ~2 \0 u6 B. A6 r
  755.       dwStartUpSteps=4;& d' f2 k" u4 ]; r6 @( \
  756.       break;
    5 A; }; r  _8 s- b+ I
  757.     case 4:
    5 Y3 |% J. }& [5 @. h
  758.       {
    ! j6 w9 L0 r* p' z( b) l0 M
  759.         FILE *fp;% S2 _! i( b, y
  760.         char szString1[128];+ i) z. v2 S& ?9 W: }$ E; d/ r: N
  761.         char szString2[128];( F+ H+ N3 z& I2 u  g' I
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ( \4 K% r  \8 j
  763.         if(fp)5 @" M7 b$ s) L. }6 N" ~
  764.         {+ M4 ^/ N3 \6 \! F& w
  765.           fscanf(fp,"%s",szString1);) C- W8 ?; b. q
  766.           fclose(fp);4 a' D; H  _; S$ t; X7 S5 l
  767.           fCheckVersion=atof(szString1);9 P+ `  h) U7 L( g1 @+ @! n
  768.           fp=fopen(".\\checkversion.dat","r");
    $ J& s# J( g7 ?4 x" R$ z
  769.           if(fp), s' F. O8 d8 s: ?
  770.           {/ t+ q/ \$ q* r  c2 l
  771.             fscanf(fp,"%s",szString2);
    $ @5 C3 T6 s: E
  772.             fclose(fp);
    # \8 I  _) f0 B, P
  773.             if(atof(szString1)!=atof(szString2))' O7 ~2 e0 K9 s5 b9 [2 y, K4 I9 S
  774.             {
    4 [/ Q! O5 C2 U% m/ q& Q
  775.               if(!Dn.Connected()). o  f% f- x  p  @, X
  776.               {7 B! T) m* Q" d5 @* \
  777.                 bFirstUpdate=TRUE;/ {; |* ~  K7 r/ Y" q8 ^9 d
  778.                 dwTotalFiles=1;" D1 G1 h# R2 e! `9 V# u2 L
  779.                 dwDownLoaded=0;
    8 c# ?' Y- p- W( q: m8 e
  780.                 bSilentStep=FALSE;
    1 x! B0 t) a! z/ o: U
  781.                 bCompressed=TRUE;9 @# e* W4 f! U+ I
  782.                 strExtLocal=".\\DownLoad\";
    " H1 \5 T5 k8 L9 w) L1 n0 t- z
  783.                 strFullName="update.txt";) y1 L# m3 W  v
  784.                 dwProgramState=AP_CONNECT;/ p1 C% a! {8 |& I# \. C5 h5 t. L- r  H
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & k  e/ p' O5 [5 C0 {% Y/ T# |0 x
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - x3 [: k* a4 P6 F/ Z8 r! ?. f  ^' \$ D/ ^
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");( o+ G) u2 V) D! m; C9 c+ |2 D

  788. / C1 E( C" t( K
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. @  z2 s, w1 x; q; b6 x( k! K
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    2 F9 N) z/ N, P6 o
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1); k8 p( s' D' U# E; Q0 v
  792.                 {
    2 ]  l  M) f0 C7 s! |
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    " y0 H+ B5 l) Q. c7 E
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    0 l- b3 o8 Q& d) ~: Y- {' O$ R
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    5 c% e$ [; Q5 q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # a4 ?# o8 r* `  Q

  797. ! `8 E1 ^- ?  B* f* b
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - o3 J/ v  U* B3 H
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");8 G# o5 l- \9 t
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");% J! D& ]4 b. B$ e0 \  u! k* _3 @
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / O. [$ w1 O+ @) R
  802.                 }( v) R2 a$ C- u; \; B. f: c2 D: x
  803.                 dwStartUpSteps=5;0 ^1 p/ V9 j" I* j6 c3 d
  804.               }
    9 h1 Q: J' {6 E2 W
  805.             }, B' Y2 e+ b# S# \; S9 R" _2 w7 v. q
  806.             else- M; O; d& r1 A7 h, x  c6 f6 H
  807.             {' [! c3 o2 \% H5 S* F) j
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ' a# h8 c  V8 C& T9 Q2 {$ Q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    6 v5 @6 P0 n) V
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    3 }+ r0 C; E$ G7 C; r3 l
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");; b9 x$ s. T( i+ R' x; m5 _
  812. 2 I. _- n7 V$ E. U; I
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 v- a- a" y/ R7 q/ U2 h& ]+ d0 H
  814.               dwStartUpSteps=99;
    4 g1 q3 `! h: x
  815.               bFinishUpdated=TRUE;
    , d1 t/ Z' ^& a# [2 N
  816.               bCanUpdate=TRUE;4 x$ K- @3 Q& y; r
  817.             }. V. h9 \6 J$ }& g: j5 ~
  818.           }) F  r2 f0 V% f' m
  819.           else, t5 T3 [/ E2 Y$ B, e7 i$ x
  820.           {
    3 B3 @6 f) G8 R# V% J+ N
  821.             if(!Dn.Connected()); f* n7 f6 l/ t6 S
  822.             {
    1 e, e  f, }# D8 F6 n6 ~4 W
  823.               bFirstUpdate=TRUE;
    1 }4 b: l* [; d, [& `' E: T
  824.               dwTotalFiles=1;
    2 i3 E9 R( Q. Y7 q
  825.               dwDownLoaded=0;
    % y! T& n7 s0 ?; c
  826.               bSilentStep=FALSE;) ]9 V- o2 J$ s% ?
  827.               bCompressed=TRUE;
    0 G# q1 `+ |" a2 F& U  a5 s; X; [# y
  828.               strExtLocal=".\\DownLoad\";: @, |7 K9 @' S, i3 ^+ |5 }
  829.               strFullName="update.txt";# W1 F6 D: r; R; K% A' p  n
  830.               dwProgramState=AP_CONNECT;
    9 O: X1 k. t8 y1 ?: A0 _: J
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 B1 [8 R( T4 {9 k+ M: `
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 J' R# E* i5 R& Z" W4 ^" K+ v
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . |! |2 u# p5 J  V
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & f  O" ~0 b3 Q. Z, z" E. g
  835.               unlink(".\\DownLoad\\checkversion.txt");7 E* u' @- }( ?! C6 ]
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)" s; i% n$ o! e$ ]8 T4 k
  837.               {
    % m6 _8 L) v+ A1 X7 \
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");6 x& a# g: H  `! B6 ?9 o
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    * L5 d. t# E% _
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");' ^7 k! n( j0 S& ]6 q4 B/ q6 D6 `5 P
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 m) q/ W- b7 B( z9 M/ v8 ]9 J
  842.                
    4 f7 _) r; a2 W+ j0 _9 T# V
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 n! f& D6 J/ v8 y; V, ?# V
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& G7 A9 L) ^/ E2 a. `1 h
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");( l; B4 e% R2 w3 X: s
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . I6 ~3 Q6 X: A4 m# a3 {1 e* J
  847.               }/ Z! ?) Q! D7 U, i5 i- F8 D
  848.               dwStartUpSteps=5;
      S/ E& v6 k: J
  849.             }4 A9 ~4 Y6 X- k7 G3 g
  850.           }- C3 c/ j/ h4 _5 S: j- B3 E9 E% i
  851.         }5 @: K* m, {2 A9 D! Q$ o, [6 n
  852.         else
    , M8 Z! G& c$ F$ ]
  853.         {
    2 h8 a. \5 O  A, P) Q0 s+ o7 W
  854.           dwStartUpSteps=3;
    7 w& B% H5 b2 _8 }
  855.         }2 i) R1 a, \: q3 d/ H3 R( _& ^  P
  856.       }& b3 _  [; n! C
  857.       break;
    1 G% j: Q$ f! W& r) @
  858.     case 5:
    ) k( v7 D' s5 U) p: l; ?* E! o
  859.       {
    * P  |) W2 o$ ?/ m0 w
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)+ ?& c% t1 J6 x3 B. |6 }
  861.         {
    " U. F3 p' S5 ^# j4 S! c$ j+ Y. _
  862.           int opt_overwrite=1;
    ! `$ Z6 _9 ?/ K' p
  863.           int opt_do_extract_withoutpath=0;3 X% G1 E$ E9 I% `9 |) V0 ]( K
  864.           unzFile uf=NULL;: K; ]# J" `% ^& H
  865. 0 W& A  }& R$ _: f
  866.           uf=unzOpen("Wsa.zip");
    7 T7 @4 C* M. f2 P
  867.           if(uf); |) }: |* L* q: r7 F! A0 [
  868.           {5 x# O# R, D+ r/ x- o% Z; D
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);2 N  w( d9 B/ h! N
  870.             unzClose(uf);5 e% Y2 j( v" u, q7 |
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");$ D  q8 Y$ i7 I" O  @
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");5 ~8 f4 A* X7 j! U# B( E" Y
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    + U1 i" V: b; t7 P; ]* @4 ]6 ^  Q
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * Q, v; D1 s! u5 w, B! P% k' A. X8 S/ |
  875.           }
    5 Y5 Y, H/ w. v. Y
  876.           DeleteFile("Wsa.zip" );
    # s* u/ [/ ^  D2 p( Y' N1 R; |2 ?
  877.         }
    , A: E) p/ L( y9 `5 T  [
  878. 7 ]. G+ @5 H! @9 h( Y
  879.         if(CheckLocalVersion())( a% h7 H# `" d# |. x2 x1 J
  880.         {, z8 N+ e- |, v( Z* b
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");+ M; x: ]* `( G% J: Q# L
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");2 I. D8 X* {7 g$ z/ h+ }; [
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");6 V$ @* c. r  G6 [
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; K4 B2 [5 @" |8 u! c
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    $ L: S$ T2 s8 y$ r! F. A; g+ N
  886.           dwStartUpSteps=99;
    * @4 S( o" P7 {7 x' r: {9 x! t  u
  887.         }
    4 V1 l8 e: z& v$ b1 I& j
  888.         else; @' I6 b; h4 n2 V8 u8 w2 H
  889.         {
    6 W) M- B  `/ C
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 {5 m: D- R0 [4 L9 N& x! e
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    1 A2 J3 x" f% Q/ O9 ^& D
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
      w) ~+ Y: D; A5 E$ b" r# `8 s. Y

  893. & W& E7 e& s/ l+ G$ O
  894.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : O$ ^  ?  r1 u% D% y2 N
  895.           dwStartUpSteps=99;
    3 P1 P; L9 Z* m
  896.           bFinishUpdated=TRUE;
    - Q" c% d; j0 n, I  @$ n; F( [
  897.         }3 l$ I- H4 D+ L8 E, b0 \% W
  898.         bCanUpdate=TRUE;
    " ^1 R8 ^* \4 ]- O/ ?3 r% {
  899.       }# q8 ~( }+ I6 Y  U& _$ U
  900.       break;* {2 u1 t* g. Q2 _* E9 @5 o( B
  901.     case 6:: |% s# Y; ~$ W! c* A
  902.       {8 s3 m- u! _& r( s/ n9 o
  903.         if(!UpdateLocalVersion())# A1 i$ {& q  y3 n7 y$ T! G8 f
  904.         {
      n2 z0 b- e3 q6 o! b* ^
  905.           if(bRestartUpdater), t, ?2 F& ^6 ~2 }: P
  906.           {. b/ }; W8 N# \
  907.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);
    & E5 c& C1 q- v! p
  908.             else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);  Q3 j2 f" _  N: A2 s! H; A
  909.             else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);
    4 K; T. Z; x2 O) d
  910.             DestroyWindow(m_pMainWnd->GetSafeHwnd());
    # Q% z& R4 l* ~$ }6 }8 m6 Q3 i1 ~
  911.             dwStartUpSteps=99;: D" ^8 v% v: J) a
  912.           }+ A5 |) I+ g  K+ A
  913.           else+ a! y8 d+ k( F( c2 |
  914.           {+ a; o, ~  h# A  Q7 v9 z( n2 z
  915.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈竒ЧΘ.....");8 c# B* h& D8 F+ U4 t$ V" m
  916.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新的资料已经完成.....");
    / _0 z% h& l3 u
  917.             else                                                      dlg->m_ListText.AddString("updated file ok.....");
    * k, |1 L1 @' I
  918.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      r) i5 D( L' Y# b+ p- Z
  919.             SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,0,0);0 Q8 y# i8 F9 x8 H! G1 Y
  920.             dwStartUpSteps=7;
    5 n" k% O, c* J
  921.             bFinishUpdated=TRUE;
    ) ~1 N$ P# @* r' l/ u
  922.           }2 R8 y' @, J& r/ ~4 H  A
  923.         }6 i/ B+ d  G& U& x& s
  924.         else% A/ x/ Z$ V2 \0 o5 q- }
  925.         {1 n8 A9 l- N6 v- o
  926.           if(bRestartUpdater)" y9 }. s; Q! y3 T, ^
  927.           {
    4 ]; y. D0 g* B0 D7 R
  928.                                                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);
    : H9 c6 b: n  M7 x& h8 m, b
  929.                                                 else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);. s: I1 }, |- J: ^
  930.                                                 else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);/ e  i8 ?& R# H
  931.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    * `) o& U$ H; k
  932.             dwStartUpSteps=99;
    % Q9 j' M; |8 B. p
  933.           }( n4 U  `' ?' f
  934.         }
    ! v% t/ c$ t% `$ `3 l
  935.       }
    7 K; @5 k" d  e. ~% b" e: ^
  936.       break;
    : ^9 t$ i. O4 j: t0 A5 K
  937.     case 7:
    $ O% o  n* o1 A: B8 n
  938.       {% u0 R- ?3 p2 L' n4 r
  939.         char szExecuteFile[14]="Bf_Client.exe";
      [6 W" }* q* t, [5 J* I& M2 i8 A% z- b
  940.         if(GetFileAttributes("Run.exe")!=-1) strcpy(szExecuteFile,"Run.exe");
    . {$ H/ r& I1 u. t7 t
  941.         if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);
    - _* B$ k! k$ E1 x
  942.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated2",NULL,SW_SHOW);
    / w! X; x7 V: D+ M7 O6 \2 M
  943.         else                                   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);
    , b( S1 `; N( r: Y# `" p# Z
  944.         DestroyWindow(m_pMainWnd->GetSafeHwnd());
    . M! ]4 W0 s# N" v- d
  945.         dwStartUpSteps=99;7 @: w+ X% f% }6 q5 _0 O( j
  946.       }3 i' B, g/ O: J+ _
  947.       break;( h& J0 h+ b6 [3 Q
  948.                 //add by cece
    / z( a/ N4 P  V
  949.                 case 8:
    + V$ h" D  z7 X' ]" {" K, C
  950.                         {- O7 r( ]1 {) z# Z2 v
  951.                                 if(!Dn.Connected())
    ( M4 o/ ^. H  P# U! S$ O( c
  952.                                 {
    : P6 b' c) d% {  v+ @
  953.                                         dwTotalFiles=1;0 D6 m. ?$ M5 l: U  D3 u6 ]
  954.                                         dwDownLoaded=0;
    $ H+ c+ E/ n# s" }$ g4 c+ J
  955.                                         bSilentStep=TRUE;/ r( w/ n5 S% h
  956.                                         bCompressed=TRUE;
    ' K! k3 w  S$ R* `% U
  957.                                         strExtLocal.Empty();
    1 p) w* L5 y" w( e1 f' B
  958.                                         strFullName="download/CRCTable.txt";2 v5 J& h6 T5 Q8 x; Q% E9 m
  959.                                         dwProgramState=AP_CONNECT;% [/ {" N+ a! R4 O4 N6 z
  960.                                 }
    6 m4 ?, q9 n5 O  j" H2 C6 G
  961.                                 //
    + P( T% {  N. P& O9 B$ ]4 M
  962.                                 dwStartUpSteps = 9;1 y$ R- ?5 ~# H  G0 z; i. p
  963.                         }
    7 `: V3 B$ p) [, H1 s9 L  R
  964.                         break;2 ?* o1 ~; y4 l# m! u+ t+ |
  965.                 case 9:; R: r+ v: I" u- z
  966.                         {6 P5 Y+ S- q1 T# C% k
  967.                                 if(!Dn.Connected())" b- F! b5 A) f
  968.                                 {
    ) G; F$ ?, _& ]# E) n$ k8 b% ?) C* C
  969.                                         dwTotalFiles=1;8 e2 i# I0 a5 ]: o4 X. P. [
  970.                                         dwDownLoaded=0;6 {7 H% S1 M0 ]  K; r* t* U! ]
  971.                                         bSilentStep=TRUE;2 z+ C% s3 _1 R. W- Y
  972.                                         bCompressed=TRUE;
    , z) o5 a% _- R; ^; _6 F! ?: D- u
  973.                                         strExtLocal.Empty();9 a) d, u* I. J+ ?
  974.                                         strFullName="Run.exe";- S* C* x$ Y7 G5 u- {
  975.                                         dwProgramState=AP_CONNECT;
    ; _' D; p5 z0 O: S+ o
  976.                                 }
    - g; h" E; |9 k* ~* k
  977.                                 //
    , x' a0 ?5 Z% ~* \3 m% [) e2 [
  978.                                 dwStartUpSteps = 10;
    6 F4 ?( z8 i; U" }! N
  979.                         }0 K; z) h8 V% x
  980.                         break;
    1 p! w7 @1 @- d4 ]- w! H0 D
  981.                 case 10:
    9 b+ ]* w9 O  b  a& y- p1 }
  982.                         {
    / p. a1 l& [! P1 z& x/ ?
  983.                                 if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);
    1 v. c! A. [) a5 V9 B( n& A- q
  984.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open","Run.exe","updated2",NULL,SW_SHOW);( @/ @5 H/ }" j, n# e* w' w
  985.         else                                   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);3 _( b" B3 S# o6 s+ P
  986.                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    9 B' d) N% D9 K7 W8 n2 s9 D; j
  987.                                 theApp.bClickRunExe = FALSE;
    + C& d. [$ k6 g' d! L
  988.         dwStartUpSteps = 99;
    % z2 R' v8 v" {3 n- O* S7 G* q# Q8 f
  989.                                 //
    * }6 m" f0 @: f5 t
  990.                         }
    ' c" |) J+ A; D/ j+ X7 y
  991.                         break;
    1 ~; o% c* t" m7 H1 T3 r
  992.                 //
    1 k$ H. O! D6 i$ H2 [3 J
  993.     }
    ' L7 y# f- N( z6 H- a; S8 E
  994.     break;' S1 G0 K2 [: S$ B/ w: i. e, y
  995.   case AP_CONNECT:
    * g$ @$ o- n3 x& L& X/ N3 R
  996.           if(Dn.InitNWSSock(4096,4096))% A. S$ G8 f7 \' P% E: ]8 m
  997.     {8 L" ^6 o6 Z# j2 ]& o+ \
  998.       char szPathName[MAX_PATH];
    & {8 E; Z* r, b" Z! p7 [" J. x$ u
  999.       dwLastSize=0;& j8 v% h6 U  S2 [, S/ h* i8 O# ]
  1000.       GetPathFromFullPath(szPathName,(char*)(LPCTSTR)strFullName);
    " J7 {* n2 o" B, j, ~" |4 u
  1001.       strFilePath=strExtLocal+szPathName;
    7 h; L5 c1 X8 `8 d: E4 A
  1002.       strFileName=strFullName.Right(strFullName.GetLength()-strlen(szPathName));: F  }# q1 Y1 D5 W" j+ S0 [
  1003.       dwResumeNums=0;- X$ i- P, Y6 m0 U
  1004.       CString strTempName;
    * h, c( c; Y2 [" B+ m0 U# I
  1005.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);
    ) v& J1 ~$ t1 p, Z; J) d+ F% t
  1006.       CString strCountData;
    ! G* Z( \8 `# z  z- @1 c
  1007.       strCountData.Format("%d/%d",dwDownLoaded+1,dwTotalFiles);4 Z5 E4 C( f9 I1 R- u* i
  1008.       dlg->m_FileNumber.SetWindowText(strCountData);! e0 `% j. c, u. K8 J9 a
  1009.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & D8 a& B- d( s
  1010.       if(bCompressed)
    1 x! H% }8 e+ L& ^5 Z# Z! N! R
  1011.       {
    % w5 h' |( N5 D% H. j6 A
  1012.         strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);
    / J( e9 I. X/ P
  1013.       }3 s* P& B0 [3 B- s7 U! M) y
  1014.       else
    5 \9 @; v) R$ w& _7 a; s
  1015.       {
    3 k) E4 L0 L" m, ~, `( q
  1016.         strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);
    4 \+ Y% Y, ]0 a) w; ?6 n0 n! Z
  1017.       }1 z* h4 {  I6 L; O" i
  1018.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);* |. B) G$ r5 i- J
  1019.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());2 j% Y0 R& R5 ^& j
  1020.       LastTickCount=GetTickCount();4 T2 E4 `+ G# _7 e5 [
  1021.       dwProgramState=AP_SENDING;
    8 b+ h2 u) M& c; ~
  1022.     }( t) x: E2 G5 z. K! Y  D3 i7 y
  1023.     else" l! [+ J7 @" O, {
  1024.     {
    4 H/ G$ z1 N  o0 g7 a9 u) a7 w$ K
  1025.       Dn.QuitNWSSock();
    4 \! B( ]& X& E7 |2 A
  1026.       dwProgramState=AP_NOTHING;
    ! s# G' `, g, Y5 O
  1027.     }  q* E0 b$ V; y$ |; L- [: C
  1028.     break;1 ~) {6 ~3 x* w% f! D5 O% k6 F. r  |
  1029.   case AP_RESUMED:
    . H& [& u6 ]" ^
  1030.           if(Dn.InitNWSSock(4096,4096))
    3 h4 h  I4 Z, O, R* }* W1 x, R3 [
  1031.     {% s- D9 }/ I" `! Z2 t
  1032.       dwResumeNums++;
    + M3 s: W9 Q5 U
  1033.       CString strTempName;
    * e1 s+ }' l' ]8 T
  1034.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);
    2 D, @# t5 t9 y- W
  1035.       CString strCountData;/ y& x1 O, H5 ?1 b! q. e
  1036.       strCountData.Format("%d/%d",dwDownLoaded,dwTotalFiles);6 s0 l: k+ o7 b' G
  1037.       dlg->m_FileNumber.SetWindowText(strCountData);+ p+ M5 A3 z$ m% Q* Y6 H
  1038.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));9 P2 U+ D( W) b. y, T
  1039.       if(bCompressed)# g) W+ s% d- q4 s" q  u
  1040.       {
      _7 `9 `) b$ D( I! d
  1041.         strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nRange: bytes=%d-\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName,dwCurrSize);
    9 u' R1 @5 S: L( U9 q# J9 Q3 H
  1042.       }
    ' o5 }0 B  V  M* {
  1043.       else4 j2 z! S. y" v6 O; j6 D4 n5 Q
  1044.       {
      H3 `* H8 r. D3 `, E" z7 ^& P3 x
  1045.         strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nRange: bytes=%d-\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName,dwCurrSize);1 N  D+ i/ h- _' ?( p9 R# ]9 [- j
  1046.       }
    * E; I& v$ _! @+ |1 R; C0 z* o
  1047.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);: |/ X5 `) v* k( z
  1048.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());
    ; t+ f% V# x4 ?/ N4 A1 q: z7 q# o( q
  1049.       LastTickCount=GetTickCount();
    & B% a; z1 y$ v# [
  1050.       dwProgramState=AP_SENDING;
    8 J) b7 y. K* @; N, t: ~
  1051.     }
    0 D# }! Z" [  Y7 F. ]
  1052.     else
    / W$ Z, o$ h4 b) X
  1053.     {& J- i. D5 s5 j) R$ ]# `( H' r
  1054.       Dn.QuitNWSSock();
    - P2 k- a- R2 B
  1055.       dwProgramState=AP_NOTHING;
    ; V% M4 y+ a% i. F
  1056.     }
    1 ?( A# H. H) V8 {
  1057.     break;! ^; t! }1 V# L- V" _, k( |. s( O8 L
  1058.   case AP_SENDING:
    " V- K. O/ H- P; G! \6 }
  1059.     {0 z8 Y% v. r$ M6 y/ N' e
  1060.       DWORD RecvLen,SendLen;
    % o) f7 ]* c, t( r; ^* d1 f1 N
  1061.       if(Dn.NetworkLoop(RecvLen,SendLen)); n0 a+ W0 @3 a3 z# L2 b
  1062.       {2 o5 z/ }7 y1 R! ~
  1063.         LastTickCount=GetTickCount();
    / r% \; A$ _" T- j) J. p
  1064.         if(SendLen)
    % N8 {' b* b: w1 |' s
  1065.         {
      @1 q5 F7 I9 _  v
  1066.           bReadHeaders=FALSE;
    3 P& J; |& t, n2 X" R, i9 a3 A' T
  1067.           dwProgramState=AP_RECEIVE;6 E& V8 I+ L1 e  X7 b
  1068.         }
    & J5 g' v9 C2 S/ y1 [/ F& Z
  1069.       }4 l. v+ c# H, U6 N- g
  1070.       else: B0 h  X2 H7 N" [/ O
  1071.       {: a* f+ z/ w2 \4 A" g; d. j
  1072.         if(GetTickCount()-LastTickCount>3000)
    2 F* C' m# k$ A4 V4 T2 A- c
  1073.         {
    7 F* u/ j% ^& }+ p3 W1 H0 M' E1 A" d
  1074.           Dn.QuitNWSSock();1 O+ x, I" R% E' E$ s
  1075.           dwProgramState=AP_CONNECT;
    ! ]1 u6 S' z2 E
  1076.                                         //2 C. D5 }) Y8 P: @3 G! U" y% h
  1077.                                         static DWORD s_dwCount = 0;! b: Q4 n% P- F+ y- \3 X
  1078.                                         s_dwCount++;
    - P) j+ ^5 e/ G
  1079.                                         if( s_dwCount > 10 )
    4 x3 T8 ]- N2 d% j, [; _. z
  1080.                                         {
    # O# |# O* O* ~8 ^, ^2 t
  1081.                                                 if(m_iLanguage==TRADITIONAL_CHINESE)   MessageBox(GetActiveWindow(),"硈钡穝狝竟ア毖叫浪琩眤呼蹈砞竚   ","Error",MB_OK|MB_ICONERROR);
      _' P6 N1 q$ z8 G! _
  1082.                                                 else if(m_iLanguage==SIMPLIFY_CHINESE) MessageBox(GetActiveWindow(),"连接更新伺服器失败,请检查您的网络设置   ","Error",MB_OK|MB_ICONERROR);, {9 T* F* M. z4 ~) Z1 i
  1083.                                                 else                                   MessageBox(GetActiveWindow(),"Connected Error, Please Check Your Network Status   ","Error",MB_OK|MB_ICONERROR);5 t3 f; `1 Y& |. U
  1084.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());" y2 i6 z. v5 S3 x
  1085.                                         }/ m8 ]0 }# B* ?6 R$ D
  1086.         }
    ' d3 c& V9 V) _+ S1 R7 R
  1087.       }
    / n$ \7 A) X0 C! t; |& j
  1088.     }
    , L$ Y' ^3 K% f, \; z* O5 \, {
  1089.     break;
    5 b! U0 q4 S  M; Z3 t# I3 m! n
  1090.   case AP_RECEIVE:1 B0 @: p. V. ?5 w/ V
  1091.     {8 r! W" X4 h$ b
  1092.       int Count;) Y9 s0 _8 V/ w
  1093.       DWORD RecvLen,SendLen;' T" J  }8 B1 T: ]/ j% Q
  1094.       if(Dn.NetworkLoop(RecvLen,SendLen))1 y9 |9 `; M. T/ A6 b9 _! r$ k
  1095.       {
    9 t8 ], {" t6 t! ]9 g4 M' q
  1096.         LastTickCount=GetTickCount();
    / q  {% K7 d! i4 A2 H; Z: l
  1097.         if(RecvLen)+ `  w+ G  Y3 r2 a) B4 w6 P
  1098.         {$ k% h; G- q* e7 G2 f4 y
  1099.           if(!bReadHeaders)) I* b  W5 @. D4 T3 f3 l" q' @
  1100.           {) P: X& ?) p# I0 a8 ?3 W, b$ e
  1101.             char *token=strtok3(Dn.szRecvBuff,"\r\n");
    + H( d3 a' i- Z7 F* Y; G
  1102.             if(token)
    ' O! b7 N9 U- c' H# ~
  1103.             {
    . |+ _+ k& X, w* F4 U
  1104.               dwFileSize=0;
    3 j; a" z0 U! b0 }  R. {1 C
  1105.               for(int i=0;i<(int)strlen(token)-3;i++)5 w8 f0 N* T4 \# D6 m- K* y2 W
  1106.               {
    2 k7 z( f" p3 h, ?. o' |
  1107.                 if(!strnicmp(&token[i],"206",3))
    1 t) @! ?  e" k, T
  1108.                 {/ Y! N. Y$ N  U+ x; f
  1109.                   if(!bSilentStep)
    2 b7 h3 O% |* v6 f" U" ?9 G3 w
  1110.                   {1 v$ D7 G) Q/ t7 a2 w  y* c
  1111.                     CString strTempName;, b' \3 V5 y# G. f, z
  1112.                     strTempName.Format("%s.....resuming(%d)",strFileName,dwResumeNums);
    ! l3 V3 h' Q) ^7 T/ j
  1113.                     if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    # G' ?1 I3 M4 ~. |
  1114.                     dlg->m_ListText.AddString(strTempName);  e1 c3 e' e. I& _' Z
  1115.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) t! C8 |5 Z" E2 {8 b
  1116.                   }
    , S) V. A- J' V' m
  1117.                   bReadHeaders=TRUE;
    3 Q2 Y/ |+ d" d7 O
  1118.                   while(token=strtok3(NULL,"\r\n"))
    ; P" n4 [- m1 h3 |, ]$ W
  1119.                   {
    9 W9 ^' _& U' B. |+ Q
  1120.                     if(!strlen(token)&&dwFileSize)
    0 H- q1 P/ p! a/ {% P
  1121.                     {
    # i9 `$ d" k- Y: h- W; @& o8 z" z8 y
  1122.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;
    " K4 z! c( [* f, A" L
  1123.                       if((int)Dn.dwRecvLeft>0)
    - D+ j3 y$ j& v+ V7 o
  1124.                       {
    4 ~. Z+ W2 J* w6 J# k
  1125.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)7 g% }, L1 c+ R3 A; L
  1126.                         {* l2 Y% U& q4 N
  1127.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
    9 ]! u9 M" h# I3 q% H
  1128.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);0 b: H+ U# x" i( \6 k3 z9 k
  1129.                         }- s1 t2 Q) [( {+ p6 j
  1130.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);
    6 H+ [$ W- h( Y6 e
  1131.                         dwCurrSize+=Dn.dwRecvLeft;
    : c5 c! w* L7 {
  1132.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;
    . c$ {' c4 _1 h, H. K
  1133.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    : K# _9 c1 d, i& a0 B
  1134.                       }) W' g, x+ y- @' T
  1135.                       break;! m6 E' V/ g/ T% `$ v# K2 C
  1136.                     }
    9 X) v, Q1 D: r# t! ]7 _
  1137.                     else
    + h! f: {0 J+ h6 M2 h* O
  1138.                     {
    ( d0 s- Q: {" p( u
  1139.                       if(!strnicmp(token,"Content-Length",14))' u, V3 G/ h: \. a- e" r$ E! z' m
  1140.                       {: i$ W  h) _  C( w7 F
  1141.                         if(!Dn.szCompBuff)
    5 X; ^4 Z" J$ N- V% D
  1142.                         {; ]; l; |0 V3 B9 F4 T8 h
  1143.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;3 J1 L5 ~  k' f5 \
  1144.                           Dn.szCompBuff=(LPSTR)malloc(dwFileSize);
    9 [' _( u& x4 A, q3 C  w. i
  1145.                         }5 A+ @( n. K3 d" f8 z3 |4 A
  1146.                         else if(dwFileSize!=dwLastSize)
    3 r: N$ v( c9 X
  1147.                         {
    # c! m* ~2 I8 m
  1148.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;
    1 c% C# g* `. f1 M6 \* ^
  1149.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);7 Z' e1 M1 h. P
  1150.                         }, g* U% E4 c4 l$ u% H. t, h; ?
  1151.                       }
    ) R' s6 e' Z1 r& R5 y6 T8 F
  1152.                     }, i( E* t/ {3 I0 |# X& n+ T
  1153.                   }7 }4 H' g( d/ S. [3 A  j
  1154.                   break;$ o* r* J8 u0 a6 o
  1155.                 }( e" u4 j, B: s! Z; A
  1156.                 if(!strnicmp(&token[i],"200",3))
    ' D/ h) J' x5 q* j' ?: ~1 F
  1157.                 {; F' w8 b& s; K3 Z
  1158.                   if(!bSilentStep)
    1 w+ p; x' A# o# l0 ~
  1159.                   {3 W9 x3 M- c3 b
  1160.                     dlg->m_ListText.AddString(strFileName+".....downloading");8 R6 @: L; h& s; x
  1161.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( `7 K( [5 k: b+ r. C& n. ^0 R  |
  1162.                   }
    & x4 X/ Z6 v6 d% o1 `/ [: c! K+ K
  1163.                   dwCurrSize=0;/ E0 ?9 n- l1 E- [1 B
  1164.                   bReadHeaders=TRUE;: |- K1 b0 X5 h) Z- t5 }
  1165.                   while(token=strtok3(NULL,"\r\n"))' i" R7 \) z) L
  1166.                   {
    ' Z# M% x4 k3 r# J9 s$ T
  1167.                     if(!strlen(token)&&dwFileSize)& d. b- @; _! S$ D% t  o
  1168.                     {
    $ q0 f1 t# T. E3 x0 N. F
  1169.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;
      P! L, W, Q0 q6 |: M
  1170.                       if((int)Dn.dwRecvLeft>0)% e5 j9 s5 {! G
  1171.                       {
    6 B/ T; O$ c9 P
  1172.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
    ; {4 a9 h( g) B: A# o
  1173.                         {
    ! I% ~% }1 z* E1 Q
  1174.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;3 u. x$ E" U3 e. }3 Y
  1175.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);% z& |# w- T5 e- z! F1 h
  1176.                         }; b% U' g) e: T( D4 r7 t6 F
  1177.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);9 S% r4 O0 B: Z
  1178.                         dwCurrSize+=Dn.dwRecvLeft;
    . Y. W. G7 p" H2 b& {  {4 N- M
  1179.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;
    3 b$ F' ~& K1 V$ z  q  Q7 f& Y2 A
  1180.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    9 f" w; x: i  K2 C
  1181.                       }
    * E6 F+ G6 r: C  V- T5 {) {
  1182.                       break;& \$ }/ N* B5 {6 J5 U) n
  1183.                     }
    3 V( j7 }. b" [  O! b! b
  1184.                     else
    / X# R3 c& w6 P3 Z1 Q! E6 K
  1185.                     {
    . ^6 I* Y5 n4 G- o" @8 ]3 G4 _
  1186.                       if(!strnicmp(token,"Content-Length",14))0 }: G* `$ G- Y! [0 t) m$ o; y
  1187.                       {6 ^  l& e- K! s% C$ T
  1188.                         if(Dn.szCompBuff) { free(Dn.szCompBuff); Dn.szCompBuff=NULL; }
    $ q# F# P1 }6 A9 p5 ]
  1189.                         dwLastSize=dwFileSize=atoi(&token[16]);
    % V  u; |5 {8 u0 S  D; R
  1190.                         Dn.szCompBuff=(LPSTR)malloc(dwFileSize);$ e6 |6 B0 h" N# V
  1191.                       }! r/ @( o* `- n5 o& B
  1192.                     }
    6 p. C+ z$ I( k* I$ `
  1193.                   }
    8 F- {' V7 F2 ~% e' w9 i) O
  1194.                   break;
    8 w$ g; v( M: V4 D) j7 T
  1195.                 }
    4 ?1 V& m+ M9 d( h! i/ U! y8 A
  1196.               }6 G7 Q8 E9 a  \! B1 n: T/ Y. Z
  1197.               if(!bReadHeaders||!dwFileSize)
    8 f3 ]5 B3 |9 }0 K- I
  1198.               {4 |' x; ]* D+ g: m) y
  1199.                 // Wrong Header or Reading File Size Error
    # X7 U# ?; y8 x. m6 l( o' Y
  1200.                 Dn.QuitNWSSock();
    5 Z& y6 k' p, V' F
  1201.                 dwProgramState=AP_NOTHING;# Q7 u: K; M# y! E7 F; z
  1202.                 CString strTempName;7 {/ `- C# }$ q1 d
  1203.                 strTempName.Format("Navigate %s File Error !",strFullName);
    / N$ G) \, t8 T4 h: E
  1204.                 MessageBox(GetActiveWindow(),strTempName,"Error",MB_OK|MB_ICONERROR);1 a; V% M$ d2 g# ]- L$ }* c
  1205.                 bRestartUpdater=TRUE;
    3 z% l4 v) |4 n" n. I. p$ S. X
  1206.               }
    2 M% V; B" Y; S! D4 q( S2 ^  H
  1207.             }
    4 J* ]: n0 H0 B9 e
  1208.             else9 O: V# o$ g4 m( E, ]* p. _
  1209.             {+ O" H* @: y; W8 X
  1210.               // Have No Header
    6 @% y3 _6 c6 J: c) p  `' X
  1211.               Dn.QuitNWSSock();8 x! C2 o8 Q4 _
  1212.               dwProgramState=AP_CONNECT;% L1 [  W% Y2 ^$ J' ?
  1213.             }
    ' q# V  \/ }6 n2 N0 \6 w
  1214.           }
    + J# E0 M, p7 c. [; q
  1215.           else
    4 g9 @* u+ o. V
  1216.           {% |5 Y$ O( f9 J% b. I1 u; L1 ^
  1217.             // Reading File From Web
    4 [7 W( {) s( o" F1 I
  1218.             if((int)Dn.dwRecvLeft>0)
    : T0 h0 O) J! O6 V4 i6 O. p; t6 m) N) F
  1219.             {8 m. @, a. }; Z
  1220.               if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)" `% d+ }# j. o* s0 G9 N; n
  1221.               {
    0 T* l) [, C0 J! ^, S
  1222.                 dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;1 E) O+ @8 `9 {3 L0 r# y
  1223.                 Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    5 U0 A9 c% c: @, Y
  1224.               }
    " b" W' L# g+ y  `' ?' Z
  1225.               memcpy(Dn.szCompBuff+dwCurrSize,Dn.szRecvBuff,Dn.dwRecvLeft);
    - X( `1 q, [* S7 z/ j
  1226.               dwCurrSize+=RecvLen;
    ! a6 g: v. ?* y
  1227.               Dn.dwRecvLeft-=RecvLen;1 z+ c2 Q3 S( ~1 Q' `
  1228.             }
    : C+ r" |$ d- r3 i2 S- Z) b' L& Y  }( B6 m
  1229.                                                 dlg->m_Process2.SetPos(100*dwCurrSize/(dwFileSize<=0?1:dwFileSize));
    4 j3 |5 B& G. I. \! a: O
  1230. //            int iRate = 100*dwCurrSize/(dwFileSize<=0?1:dwFileSize);- \3 n4 M; {. E0 h, P0 j1 E; x
  1231. //            dlg->m_Process2.SetPos(iRate);# h  c# c0 L6 z# \& E  C& f
  1232. //            if(iRate < 0)   iRate = 0;) V4 V# [$ q: A1 S( K' R
  1233. //            if(iRate > 100) iRate = 100;
    9 c/ V3 S. Q% [
  1234. //            char szShow[5];, e8 ?5 C: n, N2 Z/ G9 x
  1235. //            sprintf(szShow,"%d%%",iRate);- ^& y" i% }; t+ [  N4 P
  1236. //            dlg->m_SingleRate.SetWindowText(szShow);
    : Z( ^# |, }  |
  1237.                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    ' T% u* q3 i; w# O, v. d- a* |; K; `
  1238.           }
    . Q, U! J! [% @# `- f+ P: N' Z8 {* H
  1239.         }
    1 {5 I* s0 E4 r& l6 @
  1240.         else if(dwCurrSize<dwFileSize)  y; ]* ^& p) ^/ h2 Z& u7 [* _
  1241.         {) _  Q% N4 V. T6 P
  1242.           // Disconnection But Size Error7 [: e6 d1 w: B9 |3 `) {1 ^
  1243.           Dn.QuitNWSSock();
    * l& A8 x& S( ~2 @' Z. j% Z$ ~
  1244.           if(dwCurrSize) dwProgramState=AP_RESUMED;. a" Z' [% z6 j' r
  1245.           else           dwProgramState=AP_CONNECT;
    - S+ v- o/ w% ]" I) H6 k
  1246.         }5 {: p1 e+ l/ b; Q
  1247.         else
    ! @! k3 t% F+ s2 j" |! {+ D$ u  W
  1248.         {3 j+ O, e% b, k) l" d! e. z
  1249. SaveFileJump:
    # M& d2 \& K9 n! h  {! a& f; R
  1250.           // End of File and Disconnect0 d8 d' s7 t9 s
  1251.           FILE *Fp;
    ; v! c3 H) q4 t0 T- n) s: B
  1252.           char szTempName[MAX_PATH];
    ( h! ?5 Q  b# V& j3 C
  1253.           strcpy(szTempName,".\\DownLoad\");! N3 e) z* y, [( V' e9 {/ J0 e2 o; `
  1254.           strcat(szTempName,(char*)(LPCTSTR)strFileName);
    " b1 z1 B+ N5 ^" h: s4 \, r
  1255.           if(bCompressed) strcat(szTempName,".zip");+ Y7 ]) D1 i7 [1 x5 c4 ]
  1256.           if(dwCurrSize)7 r& y3 p3 S7 S# E2 J6 |
  1257.           {
    & }' I) a9 j( d3 S! R
  1258.                   Fp=fopen(szTempName,"wb");
    / ^6 J& c: ?% |$ C6 t( ^9 Y; H
  1259.             if(!Fp)& K; k+ N; ?% J+ p, l7 m
  1260.             {% |' x3 y' r# J5 u
  1261.               _mkdir("DownLoad");5 Y5 u, b2 h  R  ^: S0 ]
  1262.               Fp=fopen(szTempName,"wb");0 b" H$ v1 w7 e3 @( U- z
  1263.             }  I  q7 q- v8 g( L" n% O
  1264.             if(Fp)
    ( L/ w. f4 U1 C" \
  1265.             {: V: l3 k$ ]0 o4 b$ {# A$ s
  1266.               fwrite(Dn.szCompBuff,1,dwCurrSize,Fp);# |# B( J/ F- k: i+ U  m7 S: C/ ^" o1 B
  1267.               fclose(Fp);
    % c. k& g) S" P- U2 ~
  1268.             }2 k& q! B# k8 O* a$ t6 ~, A
  1269.           }0 g) d* e& y% N/ ]2 t
  1270.           if(!bSilentStep)
    6 n3 J1 w3 |3 f
  1271.           {
    ' y9 n: p4 r3 P. j" q2 S0 M
  1272.             if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);9 H- B/ |! T7 G( `! x$ w
  1273.             dlg->m_ListText.AddString(strFileName+".....saving");0 |$ i* V) j3 J/ l9 E
  1274.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * l; k7 T6 @9 T# M- c% m! |
  1275.           }
    + r) ^. e7 S! x6 L; X
  1276.           if(bCompressed)
    , A, x. Y$ W/ S1 K
  1277.           {; u8 L$ j# }  O; J! J9 T% ]+ p
  1278.                    int opt_overwrite=1;) z' w/ h3 A! g5 k/ h
  1279.             int opt_do_extract_withoutpath=0;
    + B& _7 N6 e# ]
  1280.                    unzFile uf=NULL;
    9 L4 w2 H- `+ Q. f
  1281.                          uf=unzOpen(szTempName);& n5 a0 x- m/ w
  1282.             if(uf)
    # G2 M3 o: @6 p; C
  1283.             {
    4 q; ]) |3 W- V! z  x- c( E8 @
  1284.               if(!bSilentStep)
    ' R$ l2 n# d! I2 t
  1285.               {6 e- z) b( k. [& ~$ _
  1286.                 if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);2 ~  Y; V! \6 q1 c' P) z! A/ j& ^& s
  1287.                 dlg->m_ListText.AddString(strFileName+".....extracting");' l# H5 }/ M1 j; p9 p/ z  Y
  1288.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 N; g( p* }" \+ ?9 r/ U, v7 y
  1289.               }, b' U2 v5 Y7 S5 @9 `
  1290.               if(do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,(char*)(LPCTSTR)strFilePath,NULL)==UNZ_OK)+ e$ D6 i9 T6 L6 h
  1291.               {
    / y. s2 A! Z8 Y1 K4 P! d
  1292.                 if(!bSilentStep)
    9 J8 R4 A; _+ Z3 b' w/ ?% {( v
  1293.                 {
    ! L2 k6 R$ r3 n2 b& u& @
  1294.                   if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    : j: I4 e' @$ ]
  1295.                   dlg->m_ListText.AddString(strFileName+".....done");
    ! `4 \8 N) H$ @- ?
  1296.                   dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* M2 I  |4 V8 U0 M. Y( x
  1297.                 }3 i; z, V, q9 h9 ?: {" d8 E
  1298.                 dwDownLoaded++;5 y" j( r' R  D; [! j* O! m* ]. y5 L
  1299.                 dwProgramState=AP_NOTHING;7 q" E8 x: J6 \6 X8 w( S
  1300.               }
    2 v* R# U6 t( y
  1301.               else
    8 _) W, n2 ^- s( R) k( u3 \/ ]
  1302.               {0 w% V, U9 ]  ~" @& Q
  1303.                 dwProgramState=AP_CONNECT;
    1 v) I+ S: I# j5 d
  1304.               }
    5 d8 w7 ^; f, P: n) ?
  1305.                     unzClose(uf);% N5 L# W4 o8 a$ ?# d+ ~
  1306.             }
    ( x- D8 {6 d$ y% B# w5 ^9 E
  1307.             else
    3 ^2 R* I7 }! u( t! K" }% z1 @
  1308.             {
    9 q7 J& q6 M& W
  1309.               dwProgramState=AP_CONNECT;& [( n( l+ r- N% W
  1310.             }' W/ K8 L! ?2 O7 U; `
  1311.             unlink(szTempName);# g- l7 k6 s  o+ q" C6 y
  1312.           }
    - n; a1 _8 Y3 J9 u6 I+ S/ }! ?
  1313.           else3 {& Z. x+ V! @
  1314.           {
    + W/ z) U1 V' b! O+ q! F9 u: G2 u
  1315.             if(!bSilentStep)
    6 `; i6 Y# W  K/ L2 b
  1316.             {
    " p. s) U, N2 k* f" ]! W0 f
  1317.               if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);5 @: q  \: D, Y) w% N
  1318.               dlg->m_ListText.AddString(strFileName+".....done");
    9 ]% n' I' ]! Y+ P4 |" I+ L
  1319.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 b2 j: o$ m  J: J7 @
  1320.             }
    2 s2 K. |0 g$ p' N( ]/ `9 P
  1321.             dwDownLoaded++;
    ( A) H( k- I" X: S/ {4 f
  1322.             dwProgramState=AP_NOTHING;
    ! w: W" r+ O* v" C7 h
  1323.           }
    $ t% i/ O5 ~  q
  1324.           Dn.QuitNWSSock();
    5 R6 ~& A6 K8 `; l* M% D
  1325.         }
    / m3 d& `9 H: q" ?" ~* K0 R& B4 z5 \
  1326.       }
    + z2 \% M" k5 m* `3 w0 T8 U
  1327.       else3 n, l1 v9 j% |9 [; D, D2 x
  1328.       {
    , ~5 i7 Z. |4 Z2 |) Z% S0 }: z- l0 _
  1329.         // Connect Timeout8 C3 U: H( M9 Y
  1330.         if(GetTickCount()-LastTickCount>30000)  o1 x' y8 Q$ @4 H* p$ g% y
  1331.         {
    8 I8 M; \( U) G: l8 [9 b5 Q2 o' ?
  1332.           Dn.QuitNWSSock();9 ~; K" l& n+ Z& K' }
  1333.           if(dwCurrSize) dwProgramState=AP_RESUMED;
    0 x4 x. F& i, I3 N! [, {" P$ q# V2 Q
  1334.           else           dwProgramState=AP_CONNECT;
    - V2 d6 |. j$ ]6 R6 d5 u$ T  Y
  1335.         }$ l# ?% C/ W8 U( c
  1336.       }
    : S( l; S5 V# L# R  s7 |: G
  1337.     }) s; Y; r2 k" J
  1338.     break;
    # {9 ]8 \0 h( P6 I# N
  1339.   }
    " w; _: A2 j4 @4 W1 c$ E3 R
  1340.         return CWinApp::OnIdle(lCount);
    : n: M: h+ J5 a, C, X. v, H
  1341. }# A. E5 r. j$ A3 I" j
複製代碼
其实登陆器也就是这么一回事儿……8 u; v% ^% Y6 G
附件有编译教程和源码4 H( e8 F$ Y0 U9 R, Y
遊客,如果您要查看本帖隱藏內容請回復

( q; a( {" c3 h2 c6 x# h1 |0 Q$ X, p' n  X. u  N

評分

參與人數 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部評分

wuzhenpan 發表於 2019-10-24 09:31:51 | 顯示全部樓層
1111111111111111111111111111111111111111111111111111111
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:55 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:50 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_NBC3C 發表於 2018-1-30 18:08:32 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回復

使用道具 舉報

qutebaby6309 發表於 2018-1-31 08:29:25 | 顯示全部樓層
來看看囉 謝謝大大的分享 ~
回復

使用道具 舉報

advsolarpower 發表於 2018-3-17 13:42:22 | 顯示全部樓層
热爱他肺癌热锅额度都是感受到
回復

使用道具 舉報

提莫 發表於 2018-3-23 17:17:22 | 顯示全部樓層
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回復

使用道具 舉報

提莫_k6Zum 發表於 2018-3-29 13:30:35 | 顯示全部樓層
dddddddddddd
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-2-24 03:01

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表