CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
! A' R& w2 W' C; B& O$ b
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ! |& e/ K) i5 m% V* R! y
  2. //2 r) \& z3 ~5 T/ O

  3. # Z2 q4 }/ }% A" _
  4. #include "stdafx.h"
    + q$ v& G$ n5 p

  5. - ?2 G6 Q% v/ H; b
  6. //#define UNICODE
    & Y9 `0 @" y* ?# V! r' ]. @
  7. //#include <gdiplus.h>9 n! P. \# ~" q& t2 X) P( ^* L! N
  8. //using namespace Gdiplus;
    - F9 E% k( w; P' b  x& V! s1 a

  9. $ S, F4 T0 o0 k! w3 N% W
  10. #include "RevApp.h"* y' _) _* v& L
  11. #include "RevAppDlg.h"
    0 T2 m$ B& Y- d7 \1 v8 m

  12. & o6 A' U, Z8 T1 L0 D+ ~
  13. #pragma warning(disable:4786)
    + M" |" }% o% n' T  _
  14. #include <map>6 g) B! L1 k$ V) P. y! H1 d. w1 ^' T
  15. #include <list>2 q+ v: X+ e  @
  16. #include <direct.h>
    3 q  w! D2 `1 G  K7 m

  17. 1 n8 Q. C  h6 l; y9 t) G: Y
  18. #ifdef _DEBUG( K3 B- d6 k) r+ ?: x: h$ a0 [( W! O
  19. #define new DEBUG_NEW9 k# g7 G* X5 G: o  N0 ?# {) r9 z
  20. #undef THIS_FILE, l. I+ a6 n  X1 \5 O
  21. static char THIS_FILE[] = __FILE__;5 n/ ~% x" V$ g6 v
  22. #endif
    $ B) S4 F+ _, o0 {0 I4 y$ o
  23. #include "SkinResDef.h"
    5 z  W! \  I* X+ {$ Y7 ?- u  S
  24. #include "ChangeBG.h"9 C' j* N9 A' o1 F0 s* c" k/ B
  25. #include "AFXINET.H"
    5 N+ W+ F8 ^+ _$ ~, z0 y+ @9 o

  26. & c5 {/ Q) e2 r1 O) L8 w1 {
  27. #define TRADITIONAL_CHINESE 0; R$ l' c4 j  n, H
  28. #define SIMPLIFY_CHINESE 1
    5 E7 `. u/ J# f" K# z  _( H* U
  29. #define ENGLISH 2( j  B+ b, @0 z" c
  30. int m_iLanguage = ENGLISH;
    4 \4 P) a( L- a8 K5 t+ z0 {
  31. /////////////////////////////////////////////////////////////////////////////
    ' r8 z% J3 [$ w% e
  32. // CRevAppApp- r. `0 b2 N) p1 u: M0 @
  33. ' U: B. `5 l4 a) C) _, ]1 c! c
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    2 G0 W4 E9 U1 M& O! g
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    / F. {7 r, y6 O, y% w
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here." l) N+ o& z! X1 h4 y7 n) I' |4 t
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    : T- q* T) B9 e: [, Z
  38.         //}}AFX_MSG
    ( i; I9 c: C2 J' W) q, ?, a* t
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ) d8 I% A- m$ x6 ?6 s8 h" ~
  40. END_MESSAGE_MAP()
    # H  D+ V! Z1 |& F8 B/ Q

  41. : O% W! ^! J; E! i7 k  `
  42. /////////////////////////////////////////////////////////////////////////////, c: i' D9 w$ [( E4 H
  43. // CRevAppApp construction! ~9 h& I! d/ w9 G" R8 w

  44. 6 H$ t5 \. P' f- F" L/ {
  45. CRevAppApp::CRevAppApp()# E  Y5 T, d6 U
  46. {- F7 k) {. A0 w7 F. H3 F) L, k9 Y
  47.         // TODO: add construction code here,
    3 x. t6 D% v  b, C0 v$ C3 t1 _
  48.         // Place all significant initialization in InitInstance
    / z4 q3 U9 V1 S4 N. n  C
  49.   bDisplayIsBig5=FALSE;6 Q2 z; z+ A  a; W' s0 l, |9 i
  50.   bRestartUpdater=FALSE;. D  _! ~+ D' m4 Y/ ^9 `
  51.   bFinishUpdated=FALSE;
    " B2 o$ ~/ \+ b/ [$ a% Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;6 W  W* ^. Y2 \0 {2 n
  53.   InitChangeDataBig52GBKS();3 {& t8 u% r% s* w
  54.   InitChangeDataGBKS2Big5();/ H# d$ ^- O8 o* D" S5 \
  55.         //  l: J/ ?( R, B9 s- F; S
  56.         bClickRunExe = FALSE;
    ! F% I  A2 n# s  A. C
  57.         //2 P3 T1 N3 m5 u3 U, e8 T
  58. }
    / J( f' w  p# S, l
  59. ! C$ [0 H: o0 a6 ^8 `$ p
  60. CRevAppApp::~CRevAppApp()
    ; w" ?( r) {. B$ p2 I8 m3 S
  61. {
    % W' y5 e: j0 H* r8 C  }# F
  62.         // TODO: add construction code here,
    5 _1 h  G5 A5 @+ A6 V. R
  63.         // Place all significant initialization in InitInstance) p* A- @2 E  g+ G# R: N, ?$ n
  64.   EndChangeData();  l: `8 _4 Q& t7 K  H" w
  65. }
    ( N) d; R5 E3 m

  66. ! i, R4 D" Q3 _$ z! m5 {- k/ G( a
  67. /////////////////////////////////////////////////////////////////////////////
    - {) [3 v6 a% J% i. o6 U5 a: g
  68. // The one and only CRevAppApp object' v6 e' t! a2 T

  69. % a* g7 x3 M9 h7 e4 x+ T
  70. CRevAppApp theApp;6 k# _/ Z6 b+ @# ]
  71. " N$ E! F! @8 B/ K- A1 r
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName), R  m! {% ?+ h  N' C- x
  73. {
    1 }7 M0 b7 _4 C4 }! c# W+ {8 m
  74.   int iEOF=0;: `( ]1 e' @0 \
  75.   char szTempName[MAX_PATH];
    / j5 L& ?/ J4 v! R' q/ y7 B+ x
  76.   *szFileName=0;& B3 m6 Z2 a' u/ B. p/ x$ a6 w
  77.   iEOF=fscanf(fp,"%s",szTempName);: [6 x/ M8 r: F8 v4 s- i" J
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    % v( @! S* t( k+ @0 z
  79.   {! b) i# ?. O$ y1 a# h, b
  80.     strcpy(szFileName,&szTempName[1]);0 U. U2 Q. ^; a/ e7 V
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ! P9 @% x5 k4 y1 _- ]; {
  82.     {
    7 G4 B0 m/ c6 R
  83.       iEOF=fscanf(fp,"%s",szTempName);0 ~( V0 Z8 X5 B% P
  84.       strcat(szFileName," ");
    + l4 b* H. O$ H, Y9 n
  85.       strcat(szFileName,szTempName);
    ) K) v! m; w4 l, Z0 b; ]8 \, ?
  86.     }" j6 y! U7 A% c$ s, d
  87.     if(strlen(szFileName)>=1)
      Q- @" w# d+ ]4 A, f- |- v0 r* M
  88.     {
    ' x1 `2 N. o% `: V( O8 t$ }
  89.       szFileName[strlen(szFileName)-1]=0;
    7 L8 j2 B) H3 O" i) w% I7 {
  90.     }+ e7 s% A/ B- @
  91.   }) g" `+ A  |. R! u1 I3 b
  92.   return szFileName;- V) n- G# X' o" t
  93. }
    ! G4 \$ v" i: Q9 L

  94. : R. W) s' i- h6 F7 d" p7 N
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    7 A2 M* l+ T  V8 T
  96. {
    2 p! S5 O+ F% z+ s& x; S7 w9 L* d
  97.   FILE *fp;
    * P1 v/ y3 Z2 D4 v- c6 s- l
  98.   char *key=NULL;: e  y' I8 D& B- K; g' i1 u
  99.   char version[MAX_PATH];
    % p+ I9 ?: Y2 ^
  100.   LPUPDATEFILE file,olds;5 W7 B" A; Z- ]5 Y& e
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 Y$ A! @1 C  H, j* ~
  102. 0 J( o0 |# \' S. g4 l
  103.   UpdateList.clear();! j8 W7 e- V* r9 W
  104.   UpdateFile.clear();
    $ m5 p, X: C: D' d
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; z7 f1 j9 V' ?( _1 z& h0 r# u
  106.   if(!(fp=fopen(filename,"r"))) return false;2 ?, }8 y5 b. D8 _3 F6 ]$ H
  107.   fscanf(fp,"%s",version);; r1 Z4 @/ I& J1 M+ g) w0 S1 ^6 {
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ' ~3 x- w& H$ j7 \6 J2 [
  109.   while(fscanf(fp,"%s",version)!=EOF)% t! U4 i9 o5 \+ q: R
  110.   {2 w  k- }2 F" T- A
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 A' ~+ G* E8 ~" j6 `4 Z
  112.     fscanf(fp,"%s",file->path);
    1 j8 |$ X! B- o6 m
  113.     ReadFileNames(fp,file->file);
    . ^- [2 G3 S! ]
  114.     strcpy(file->full,".");5 Q3 P. F* T+ h
  115.     strcat(file->full,file->path);
    - l. F3 p0 b' \% g/ L- V
  116.     strcat(file->full,file->file);5 C4 @* ^  M; `  D
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())# l& ~6 l# j, N- d! p8 [
  118.     {
    - y6 [# C3 l! R0 [- ]5 n/ J
  119.       file->vers=(float)atof(version);
    ; P* c5 O/ _9 l# }) J  p
  120.       UpdateList.push_back(file->full);: c7 Q4 X# j9 L7 K0 w6 j' R2 p( s) a
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));6 w( w; ~; y; W/ L! L4 n* ?
  122.     }  j7 M3 I; v0 y- V7 x5 Y2 R+ D
  123.     else
    + X, ?& {  \' }' r% j
  124.     {! v1 I6 `/ w: _6 J; T2 ?2 U* I. [
  125.       olds=(*p).second;
    6 I  e5 [. F+ M$ k2 e
  126.       if(olds->vers<(float)atof(version))1 p8 r4 A: q+ y" t8 C" i3 W0 r
  127.       {
    $ b  C: w  O. Q/ [0 R3 X
  128.         olds->vers=(float)atof(version);/ z* m/ D+ j9 _  C
  129.       }
    8 h8 L# q9 Q  @1 e
  130.       free(file);6 o, ?( Q) j& r" y7 s! y! z
  131.     }
    # p; v( c( }  _+ _1 e6 o
  132.   }) s8 O& y5 f5 X; W1 L' i/ G9 B
  133.   fclose(fp);
    6 {, n5 B- s$ u5 g$ o9 S- ]3 w" p
  134.   return true;+ \# N6 ]' p3 N) V9 `0 Z
  135. }* B; v& p/ y/ ?- P# x
  136. 5 O" K. r1 @0 ?  m7 i2 G) @! C
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    3 p) u9 C* W+ |
  138. {
    + x3 Y! q( U( z9 q( n
  139.   TCHAR  szFull[MAX_PATH];+ X: a2 e$ Q+ D4 p' S% P. _
  140.   TCHAR *token,*inter;
    2 @% b, j2 S+ u! C+ \- O+ e' S
  141.   *szPath=0;
    ) U5 J. E4 ^" K
  142.   strcpy(szFull,szFullPath);- K" G% K& T9 Y; P, e1 V8 D3 m1 Q
  143.   token=strtok(szFull,"\\/");$ S2 c9 \% g" y0 J  k
  144.   inter=token;
    " E, z- d& S# B8 ~0 g) ?) _
  145.   while(token=strtok(NULL,"\\/"))2 D; N8 V- ]; f% T1 l. L: F- _
  146.   {
    1 Q) U2 O/ k9 J0 k
  147.     strcat(szPath,inter);
      y2 `/ [0 T+ j/ J& y' I8 E8 G0 Z
  148.     strcat(szPath,"\");
    + Z: |: N- C/ d  S
  149.     inter=token;" o9 X& @( q* W  G# E5 O' W2 n
  150.   }* Y: Z( Y% Z; Y; U% j1 |4 S0 L- e
  151.   return strlen(szPath);+ q  o% \+ C, t" y) D3 \
  152. }$ D% q5 M0 z7 A: `* i6 ?- r5 ~8 Z
  153.   L' ~/ G3 k, ?  o3 e& k
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    1 p0 M! V$ n. v: g; b7 B" \6 `% P7 _
  155. {
    * W4 r: ?$ z; w; X4 J* c% ]1 L# }
  156.   DWORD attrib=GetFileAttributes(Target);
    7 x, j; i6 ]/ a5 r9 M) A
  157.   if(attrib!=-1)
    , _/ g" g  d4 m5 p4 a/ p5 S
  158.   {
    3 P! D* ]3 ?3 l( s, ^  G$ ~: [$ [
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))/ y) n9 }+ V* |
  160.     {# P' B' k3 `0 w& I) v  M
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);1 B8 d6 w$ n7 H7 J( I  }
  162.       SetFileAttributes(Target,attrib);
    ) |5 P( N, W! J# h% d
  163.     }; p% ^: G/ P1 w/ l/ ]* v
  164.   }5 T" z4 L( @& I% O
  165.   CopyFile(Source,Target,Erase);; a' M6 W. D1 w7 z% B
  166. }
    . g$ u& a* y# R
  167. / Z. W7 G6 c" B& I8 w0 w
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)! \' ^$ M6 x, I
  169. {- ^6 ~* ^! D, x$ ?; p, R; y
  170.      FILE *fp;+ Q, l/ W# z/ ]. A# _/ Y  H
  171.      char  szBuffer[8192];
    + S( K% [6 i! N$ G
  172.   va_list  argptr;
    / s3 O! f6 Y: r- R7 J$ @; H1 {
  173. . A. h+ x6 m1 Z" O
  174.         va_start(argptr,message);# n7 l. V3 O# K. j9 o
  175.         vsprintf(szBuffer,message,argptr);
    " E2 ?1 k1 S- F
  176.         va_end(argptr);) `3 @$ }. a# ?4 B
  177.   fp=fopen(FileName,"a");/ w. P" L& E: P( `  A0 V
  178.   if(fp)/ ?; e7 I0 g' e
  179.   {
    4 q8 p& n- B$ V' U/ F8 u
  180.     fprintf(fp,szBuffer);
    1 [3 l6 B! v8 _" q
  181.     fclose(fp);
    " C7 G9 Q  _; m0 E$ {. ~( r' ~
  182.           _flushall();
    + {4 t+ \0 b* Z$ O* U3 _
  183.   }! P/ ]* W, e2 F
  184. }
    0 r! d/ z  j6 _; E9 J* k

  185. 6 F3 w/ f1 `8 \* L4 Z
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    8 p8 @  _, ~4 X" @4 L" a
  187. {# Z- a& \- B* ]& ^& A
  188.      FILE *fp;& P9 Y  M$ e2 w* K2 ^" I; e& D
  189.     DWORD  attrib;
    1 }& i. P9 C1 t# _5 k5 O3 m
  190.   attrib=GetFileAttributes(FileName);4 W  ]; i  z1 ^' P9 L7 Y
  191.   if(attrib!=-1)
    4 X- v) z% h  W# t! \2 h, `& M) d5 m
  192.   {4 V" \8 c" @& x+ E4 P. D
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);; C0 X( k7 j% e! V+ k* {* |/ s8 o
  194.     if(!SetFileAttributes(FileName,attrib))9 p. k, U( U% b* A2 z5 @7 F* y
  195.     {
    8 {7 {$ g' v# j
  196.       return FALSE;6 g' Y& R4 q! g- X8 @
  197.     }
    9 n( {8 r: K8 _* g' Q
  198.   }; k8 T) m, I+ u# N$ j7 G  P1 F5 r
  199.   fp=fopen(FileName,"wb");, E7 @1 H) V7 V
  200.   if(fp)1 ]  U. l5 B% x+ V5 I. [4 w
  201.   {
    % t- g: q' u/ v. i
  202.     fclose(fp);4 _" \1 @! \, K( M9 H: B) A7 V
  203.   }  A, q0 s: ], Z3 g
  204.   return TRUE;9 |! K6 V' \$ e2 I4 R
  205. }2 Y, n8 [( `7 ~+ e- m3 Q

  206. % F; m! k& B  n/ `! F. L! r
  207. BOOL CRevAppApp::UpdateLocalVersion(void). S1 c6 _2 j* G6 v) S* B
  208. {3 p+ n2 t6 N, k4 @, d# e2 r
  209.   char filename[MAX_PATH];
    - s- D  X3 J; m! W; I8 v
  210.   LPUPDATEFILE file,olds;  ~  _# P$ ~. v# E5 J
  211.   std::map<int,CString>::iterator i;/ @( m$ q; }* M$ h- F! ?3 E& D
  212.   std::map<CString,LPUPDATEFILE>::iterator p;' ~, a+ Q- V% d: }9 x+ G
  213.   std::list<CString>::iterator l;$ E' D5 b. \. f; k' Z
  214. ' y2 D% `3 p' @4 F
  215.   if(bFirstUpdate)* ^0 f0 C$ h8 c0 }7 _  Z  L
  216.   {
    " g" z4 O3 N/ r+ J4 C2 V
  217.     dwCurrFile=0;1 s# f6 ~! ]" A* I; Y! ~  D" {
  218.     bFirstUpdate=FALSE;
    . D8 X+ q1 ~" x! G2 H( ]( n
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' T" O4 t  f+ r$ s! n  \  _! k) K
  220.     {) |% W' w: H2 D; v) V. W
  221.       dwTotalFiles=UpdateLocal.size();
    / [/ E) v, i& v5 _7 B/ z
  222.       dwDownLoaded=0;
    / ]$ P; B  E% b2 H8 f4 |
  223.       bSilentStep=FALSE;/ d3 t( ~" h$ C  T: Q
  224.       bCompressed=TRUE;
    0 _( U5 n1 {5 m
  225.       strExtLocal.Empty();
    . f" W* T4 A- f/ \8 c. w
  226.       strFullName=(*i).second;2 e: K+ g  m8 F: y& `/ Y5 H. f( U
  227.       dwProgramState=AP_CONNECT;
    * a( Z2 {; ?% X& f2 Z& \9 l
  228.       return TRUE;
    . S( C$ ~% h/ |
  229.     }
    $ Z* ^9 L& r0 p) O3 n& k% ]
  230.   }9 K! e( F& |. x8 K  R
  231.   else if(bRestartUpdater==FALSE)5 p% o6 M$ A# }
  232.   {
      x/ b" K. }+ W2 }& M
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    8 u, O) Y5 v5 T/ Z4 m+ ?' L/ u
  234.     {
    5 y4 u4 R; B" ]  P6 ~3 m( \
  235.       file=(*p).second;& K! n* D5 f, ~1 X2 x' U
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())$ d7 R( G$ f5 z, h  t/ `0 I! {
  237.       {
    7 k- D# i: H( j1 o
  238.         olds=(*p).second;
    5 C1 l* V# H( R( W6 Z, Z
  239.         olds->vers=file->vers;3 ]. ^' D) [  B
  240.       }
    5 z$ [. O. C$ J, K3 m
  241.       else
    ! R0 |; M$ o- q. h
  242.       {
    ) Z; \+ O6 s1 ^, v
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # `/ r. _8 H  n) P) F. L/ k+ t
  244.         memcpy(olds,file,sizeof(UPDATEFILE));! ~4 P. t2 X6 }. \/ S, w
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    - ?) n1 E& A9 y1 M, e7 ?- \7 ~2 h7 I0 [* [
  246.       }3 U, C" `6 t( Z$ O3 \& Z5 z' k# \" x
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");& S& z9 n1 O$ U) m
  248.       sprintf(filename,"(%s)",file->file);
    , ^- L  s+ U3 s$ G$ u* g# B. U
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 l$ [1 ^7 ^- [
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    / o( z' ^9 ~" Z7 ^- F' V
  251.     }+ v% x1 E8 u5 o1 J5 I# y/ j
  252.     dwCurrFile++;
    ) I3 ?# a7 O5 H) \
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 f% y* {  }; X6 ~' x
  254.     {7 \# E$ |! V# P" E
  255.       bSilentStep=FALSE;
    . v$ ?/ k" a' u$ L
  256.       bCompressed=TRUE;6 ~) z( |+ D5 e: w! c2 h7 I* H: u, l0 \
  257.       strExtLocal.Empty();
    & L9 y9 b- v- {6 N- M5 x
  258.       strFullName=(*i).second;5 h' p7 X7 V. E
  259.       dwProgramState=AP_CONNECT;
    : B( w$ ~- H2 Z' i$ `, g* I
  260.       return TRUE;% n! @& a: }5 t7 B0 R
  261.     }
    2 d) `. R  }2 O0 O3 c9 N
  262.     if(!bRestartUpdater)
    - N$ I- B: ~" k
  263.     {8 _. n. Z! \4 u3 o
  264.       int iCurrSize,iFileSize;( T: G" U% M5 Q1 T2 N: ]1 m
  265.       iCurrSize=0;
    % R; W' H8 z# `. V
  266.       iFileSize=UpdateList2.size();
    ! `/ v. t7 ^1 ?
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    : x3 j$ u. S% O/ ~; o: b: s$ H/ e
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    4 I6 N4 D/ L  p6 \" H
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + T: U* s) F- P& D4 ~; _6 b) g
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) Y9 d0 X* G6 E' z0 ~
  271.       Fclearf(".\\update.dat");
    7 o' n" [; E; \
  272.       Fprintf(".\\update.dat","Bloodyf\n");4 J2 b" z/ {  p+ I% ?  y; ~. z/ {
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)1 @5 u8 y. C! {! p# e1 G8 c
  274.       {( @' q. U* k: s  p+ u8 [# C
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()). ]. z3 h6 O% i/ m
  276.         {& o3 ^$ Z; a7 Q# x0 n
  277.           file=(*p).second;$ x% K5 k# V% I: w9 D$ N$ M
  278.           sprintf(filename,"(%s)",file->file);
    - t9 @! f6 _, A+ v: A, N
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; g( X1 ~2 \; O- Y! v7 O3 B
  280.           iCurrSize++;
    / Q* @8 i  m# m
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    . R" S. N( D% W6 B# Q2 j( j. ^! T
  282.         }
    ! \" U( F5 C* v
  283.       }) T- D( C* X' O. l
  284.       unlink(".\\update.txt");1 l5 g5 O: Z/ i6 x6 [
  285.       unlink(".\\update.tmp");
    ! M# U6 W, v; f7 [( u
  286.       Fclearf(".\\checkversion.dat");
    % H2 C7 C, J8 j, G$ b# R, N
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);9 Y  s( K( r7 G* {" w# V5 I3 ]& s& N  ^
  288.       if(UpdateLocal.size())
    ; a3 t3 x' ]0 E; s* O- E9 J' Y
  289.       {) w* Z. ^1 o$ _0 O, C( V3 l
  290.         UpdateLocal.clear();8 x7 `- O" x6 v2 F
  291.       }
    ( J6 t, h1 `. ?+ y  m
  292.       if(UpdateFile3.size())1 P" r. s7 y  I1 R8 r' u/ S3 ~
  293.       {& R! c/ U; m( r$ d" O& ~
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 s& F! t, v  F+ t, Y) l4 q$ i, `; x
  295.         {
    5 E3 r0 U7 ~  B
  296.           file=(*p).second;
    4 g; q/ {2 e/ h& a' b( M/ B+ z, u: Y; L
  297.           free(file);
    4 W; n5 \, K) V% u6 a
  298.         }
    : R" `" g4 z! ^8 T/ _
  299.         UpdateFile3.clear();* l/ j: f; n# z9 u
  300.         UpdateList3.clear();
    / {# h  T7 O# B" _$ P1 e( T% K
  301.       }+ ^: U$ m& J* u5 K3 V
  302.       if(UpdateFile2.size())  J9 n# [7 @8 D! Q0 H( u
  303.       {+ ~: x; j& B! |: o& I
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), c3 O8 N, O" {$ b. v, Q$ P
  305.         {: e9 {* j" O/ o
  306.           file=(*p).second;) K$ S! H5 E7 g% o$ U5 `
  307.           free(file);
    ' z2 Q9 d; N/ U8 f5 X
  308.         }4 [6 y7 z* x! W/ r, r! {# c
  309.         UpdateFile2.clear();7 e( F3 @5 O. h2 N: R9 s, l
  310.         UpdateList2.clear();
    4 i0 s9 C/ s# T$ {- I" v4 `
  311.       }* V5 _3 N" j+ {4 z: B% O
  312.       if(UpdateFile1.size())- ]8 L3 m# p, u0 D. \0 u0 [
  313.       {( I' F6 b5 n! C" G
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( X# P  z! P7 O6 p3 Z
  315.         {- J9 M5 N5 A5 W/ n! c1 Y
  316.           file=(*p).second;
    ) v& ]  n. P' y
  317.           free(file);
    % F( q6 W8 n0 {+ F/ x6 P% y. R% @9 L8 h
  318.         }
    & A$ g# o' e$ v2 X6 F1 t9 ~- j$ o" D& B
  319.         UpdateFile1.clear();
    4 V, h3 C8 u+ v5 T; d9 W/ [* R
  320.         UpdateList1.clear();
    4 R, P0 r3 E6 u5 s" \  a$ F
  321.       }2 C$ {/ |- s3 D9 T
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    8 O$ I# }- \$ H* W
  323.     }
    , B0 w7 V8 O$ t. N
  324.   }
    ' _2 S: g0 y5 ^& T
  325.   return FALSE;
    6 z' G8 O1 B/ _8 W! R& {+ L
  326. }9 O9 C5 ]1 T% m7 W9 t

  327. # i' k7 u' N; O8 ]* Y. J" ~
  328. void CRevAppApp::ClearAll(void)
    ( x2 W3 J# m5 U& R2 \
  329. {( I: y% m& H7 o3 J
  330.   LPUPDATEFILE file;" l/ \7 M- u( ^0 P; `0 y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;# h+ Y2 V8 _: N* u( [8 K: c0 Y8 L
  332. 3 ]& D& |3 i2 m6 Y: {* p( \; y
  333.   if(UpdateLocal.size())+ f+ x# O  z0 l+ t: k) o7 g
  334.   {
    " r; S( w6 I/ d9 H
  335.     UpdateLocal.clear();
    , V7 O; w# a6 n# p5 `7 }
  336.   }" h4 r4 |! U& O5 j* P
  337.   if(UpdateFile3.size())4 A: @4 y# |- j6 t' r
  338.   {7 F5 n: `9 J  D) b
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 C1 f; m4 ^+ c: Q' e8 J
  340.     {
    0 N. p0 R$ x/ m2 X
  341.       file=(*p).second;& d# z3 ?+ n2 g" Q- S  k! n
  342.       free(file);
    " g# _0 t% K' |6 e
  343.     }
    * S8 r& g4 D4 t2 x
  344.     UpdateFile3.clear();6 B  L' J2 v! j5 R
  345.     UpdateList3.clear();' G: b7 a* d6 K- l: }2 d
  346.   }
    6 b$ q/ q* Y9 o" w
  347.   if(UpdateFile2.size())
    1 b: Q0 d5 {& d* p
  348.   {  q% j8 ~8 p- o2 C
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 Y$ H. o  }8 L; X- @8 D$ v. E8 S
  350.     {
    7 S) k! D/ D0 k% T  L
  351.       file=(*p).second;- }. x; d5 v. [. Y5 G
  352.       free(file);- t9 K- G! n6 ]4 s" S+ V6 F
  353.     }; I$ ^* v$ U: z
  354.     UpdateFile2.clear();9 l0 B  C- r9 `! d
  355.     UpdateList2.clear();
    7 G& P/ j$ q- o: _
  356.   }. P; Y3 |: M5 W: I: A- ^
  357.   if(UpdateFile1.size())
    ! Q- `% _9 O1 E
  358.   {* H  x( ~- S3 r2 s. Z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! d" f( Z- p. I' h3 D1 V1 |( k
  360.     {& H; t4 f7 u4 }0 Q) ^9 e$ U
  361.       file=(*p).second;
    2 [+ M+ s  d# U; s+ h
  362.       free(file);
    9 L) B! z$ J5 S. F9 f. X
  363.     }* m5 T! ~" x3 L% B
  364.     UpdateFile1.clear();
    $ k! ?7 q/ A9 X$ j* F6 r
  365.     UpdateList1.clear();
    4 Z' L1 h" Y7 R! g$ ?8 W& o
  366.   }
    6 p: \( f% g% h( V
  367. }  " {. s( y+ w, I5 B) R5 V( ?1 O& O+ l
  368.   
    1 q8 [# z* {% ~. ?5 a0 f
  369. BOOL CRevAppApp::CheckLocalVersion(void)) P/ J: k6 S/ |' }! N, j; z3 z( R
  370. {
    7 ~$ {$ w3 w/ h
  371.   int c;
    1 v2 y" l# {8 h  e0 g
  372.   LPUPDATEFILE file1,file2;
    5 S3 z  V- b/ H
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;4 C: {9 u5 R3 L" |
  374.   std::list<CString>::iterator l;! [4 p; M" O( G' L, J

  375. 6 _2 r; d9 w' f" N) A
  376.   UpdateLocal.clear();, l9 I( m% C  ?0 [
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( r2 o$ a& R0 k# |
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    / A2 J! T" ^" D
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    $ f* W1 \. Y( u. j8 X7 Y" b/ N
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    6 c( H9 S8 O+ B  s) v3 [
  381.   if(UpdateFile3.size())
    , a2 [- `7 a; U. a" ]( Y! e" I; A
  382.   {# x2 q4 o* ^4 D# U& f% A6 i, {
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    . W  h) C: I% a) C6 E
  384.     {3 g  W; m* ]' O; r
  385.       file2=(LPUPDATEFILE)(*i).second;, }0 L$ c: H; d+ D6 U, I7 H
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ( o2 c4 X. b  a! c/ o2 K
  387.       {
    7 c3 X& I2 ]3 ]/ ?# [8 P
  388.         file1=(LPUPDATEFILE)(*p).second;
    6 Z' \& d3 v  t- Q
  389.         file1->vers=file2->vers;
      p$ z6 i$ m6 n& p; q
  390.       }
    7 o/ e; ]4 k3 U
  391.       else
    0 \  x( ~( o4 K0 R7 s$ \5 c7 Q% u
  392.       {5 v: P' T; O, J
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 I, r( |4 X" D. F
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));& p! S" P; @7 l6 M! p& ^
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));" Q+ ]3 H! P: a4 O: ?
  396.       }# Q9 N( r# \# I+ Y7 D
  397.     }: K& m- I' d' [+ E: K
  398.   }1 |$ @( X2 W- E5 I; B! S0 _7 O
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)! b& H! ]% W/ q1 @; ]6 u- n
  400.   {
    ' H7 N. J: E/ w
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    + U% _7 @9 b; P& v
  402.     {8 b, \! ]' |- u! I4 h
  403.       file2=(LPUPDATEFILE)(*i).second;9 O/ d+ i5 V2 z
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 N5 Q. }8 f6 G0 P
  405.       {
    0 H0 v$ A" _, @& F
  406.         file1=(LPUPDATEFILE)(*p).second;
    ; ?( u; X; H% e& s
  407.         if(file1->vers!=file2->vers)
    & K8 O4 A5 J% V. g
  408.         {: y0 t+ {) K; q% M2 S/ i
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ d- |  q  Q# u2 g& j9 x
  410.           c++;
    " n! Q. }4 g5 U( H" q
  411.         }# C# M1 O8 m. j8 k  z% \$ o; Y  _
  412.       }* Y8 g0 t, b+ X8 k/ r1 \6 f
  413.       else
    : C% K, \2 u  r: B" i
  414.       {: S# Y* Q% k+ I+ n0 k; |2 l7 k& Y8 w
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 S6 h8 m6 v3 U6 X! }' h7 g. P
  416.         c++;. ^8 @6 ^) }: ?- T
  417.       }7 t! k- J8 {0 u, M2 b
  418.     }8 Z1 n* Z% B; u4 U) z
  419.   }. H( ]/ \, m  U: A  v* K
  420.   unlink(".\\DownLoad\\update.txt");
    & i% s/ y% V( ]  R9 f8 D
  421.   if(UpdateLocal.size()) return TRUE;2 ]8 v) e) k7 T
  422.   else                   return FALSE;
    7 x1 Z5 V5 }7 N, y
  423. }/ T0 [+ x+ v: Y" ?0 O! R# v

  424. : l& A5 j( a) v
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"2 ^% z; P* W/ i5 f/ f
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    $ P* ~6 O$ @% x
  427. - n$ J! k6 x# @

  428. $ q/ l2 L8 c" w1 D- u

  429. . H6 f% R, v7 Q. X  U
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)8 r5 r& I# J9 M% P
  431. {  |" |6 v9 @* E9 m5 F0 @+ h  y& T
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    9 t: s9 X& V- R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 a' G& G9 G1 y/ [3 I% c: a9 C
  434.   {1 J3 i. ]9 y( b) D
  435.     char szLanguage[50];
    ' P8 }/ h3 W1 K( Q# k. b$ W$ q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, B+ b6 w0 L1 ?! ^6 Q# e$ M
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ K1 z. s7 z7 w* T3 W1 \
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * o' r; a4 m1 H0 Q6 J- j7 \
  439.     else                                   m_iLanguage=ENGLISH;
    - z; w  O* K1 S0 X6 ?% X) v, u
  440.     char szRegister[100];
    , J- ]' e2 W2 _1 ?$ p& C, {
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");# z9 R  E. O) a# \% q$ q) w. {
  442.     strRegsName=szRegister;
    " N5 ^" ~+ _; K& M: y# [; j2 ]$ V( I
  443.     char szPatchURL[100];2 P) J$ U) P% x1 H3 O, W
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + i3 y" T% |  l# y- u7 K
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 J+ U0 Y; \* ?7 z2 J
  446.   }& k  D/ f" R0 S0 e
  447.   else: n8 A& V" m9 G7 A0 G' n& o
  448.   {: R/ V" l; U0 T* E3 l4 m1 A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + E' y( G: c0 O6 w
  450.     strRegsName=DEFAULT_REG_URL;
    ; R8 a8 u9 j- L( }" B
  451.   }) u( I: l' O1 g/ g1 O2 l
  452.   if(GetFileAttributes("hosts.ini")!=-1)( A$ {5 t% x+ q' V3 ]4 |& v1 y
  453.   {
    8 x1 |: t- A  U5 _
  454.     char szIP[50];
    / b  \, s5 |% C) d4 u4 j
  455.     char szDIR[300];2 [4 ~. P5 ~8 Y
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))3 H( B3 N6 V2 s# e, l! o# N
  457.     {4 D* T3 `) p. n- O8 O. `  M! @
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");! |4 O: R. ^1 R$ `4 M4 S. f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    0 ~$ O5 H# p5 [0 }5 U3 Z% g  o1 d
  460.       strHostName=szIP;7 }; O  @+ t+ F: Y& H2 `
  461.       strHostPath.Format("/%s",szDIR);
    5 {  G8 }5 B% ~: J" h, I5 ^, m
  462.     }  ?' b1 \* X% {$ x' T+ Z* O  k3 K
  463.     else0 x/ O5 `1 _5 n- O% d3 e- W
  464.     {
    2 N8 n2 y. ~. ]8 o! S" ~( i7 l6 @6 ^
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 l! ]$ Z$ X! Q! W$ h
  466.       {3 [+ B* u0 X3 E" x. V. L4 M$ r
  467.         char szLanguage[50];
    . U/ |5 D: e/ Z* o
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 e) D4 c4 m, C
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 r6 ?( [0 V  v% M; o8 T: O
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! e/ _+ u; a; i- R
  471.         else                                   m_iLanguage=ENGLISH;
    / ^! s3 d" |$ l6 }3 o; p# q' z
  472.         char szRegister[100];
    " c% l' J' O) b, \/ w6 @6 F
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % M7 x3 a1 |* O2 r
  474.         strRegsName=szRegister;# Y+ F% d6 k+ X
  475.         char szPatchURL[100];& P; h- E. l6 V/ T
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , |4 X# Y7 M* c
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / X, T! ?8 Y1 T" K/ b7 |8 Z
  478.       }0 b+ f8 V- d2 o9 ?
  479.       else& Z2 G- G/ {0 V3 R, X" o! A
  480.       {
    4 d" [- B) G$ W' t8 q9 w
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 W! i! \( T+ o+ A
  482.         strRegsName=DEFAULT_REG_URL;0 ~. q+ E8 ^+ }
  483.       }6 V6 l, v2 u: _3 t( n0 e- e: V
  484.     }
    1 E1 D& s- n- W/ ^
  485.   }
    6 t3 k2 Z( a: w: ~6 {
  486.   return true;2 }) g0 @7 B; L3 n/ |  e9 f
  487. }$ ~# T7 t1 ^. _; ^# y$ a2 v; u

  488. ' x7 C1 G& S' I9 r7 d5 M1 x- }& w
  489. #include ".\ZLib\unzip.h"1 J, f( `3 J# c' Y8 Y
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    0 D( B3 e6 e: F' w* F) J9 |2 \: I
  491. /////////////////////////////////////////////////////////////////////////////: v4 ^' T% Q1 q' A
  492. // CRevAppApp initialization3 d/ H5 m# K" s6 |6 u/ }6 b

  493. ' j1 b* c& m' A* i& l  ^- v' W
  494. BOOL CRevAppApp::InitInstance()
    - _! b5 n% Y9 [1 c* ^
  495. {& i, b2 Q- t$ s
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];3 M+ x  s. k6 {: w9 x
  497. 2 X( k; R; p* Z5 E/ k2 M% I6 g% V) K
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);) k( A$ _9 [2 K* S/ B) V* ?0 L
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    0 [1 g" g# h0 y! O7 L( C1 n
  500.   {6 ?1 K/ F* p) F8 U" g
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");% C$ q2 u- p' X. E
  502.     GetPathFromFullPath(szPathTarget,szPathSource);  j0 m1 H2 W; B
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))$ x- r- a: x- m. r: i' I' |- p2 C
  504.     {, Z0 z2 Z, t* w# g# s
  505.       strcpy(szPath,szPathTarget);
    % b# }7 L& n/ h' s' ?2 b$ h
  506.       SetCurrentDirectory(szPath);
    ' g% R3 E  V3 ^5 H9 y
  507.     }, R2 f1 z5 M2 k: ]' @: ^  C
  508.   }5 q' d# V$ s0 @. l/ s
  509. #ifdef _DEBUG& s& K7 k( R; t+ x
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " e& Y$ u7 {7 C: U8 a
  511. #else! F2 j( a8 Z1 j, o/ r& s3 J7 ]
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    0 A) O) C% b8 Z
  513. #endif/ y' E5 L- }8 j! b* S! d
  514.   {
    7 {* ~- B7 r0 }( v* G  C; Z( }
  515.     char tempFileName[MAX_PATH];
    % Y& v' V1 `0 e6 B5 @( z5 U; @! y
  516.     strcpy(tempFileName,szPathSource);) b/ B. M6 g* c1 n5 S2 j
  517.     tempFileName[strlen(szPathSource)-12]=0;
    " K7 F0 h6 s  {8 ~" ]
  518.     strcat(tempFileName,"\\$CSUpdate.exe");$ Y9 }6 q; C7 t. n( p3 T( ^$ `8 m$ G
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);2 t5 O5 v8 f& K8 L) M8 a
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
      P# r( b! e/ {2 t2 J& V
  521.     return TRUE;
    . s( P* O4 m6 u
  522.   }7 p1 D2 ~* G! Q8 k6 F+ n- s$ j. y, G
  523.   // Nuke 0118: Delete run.exe& ]1 P# W9 Y5 j
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ; _  @  z  D' Y2 P
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");. z3 A7 [8 f! {( U2 ?
  526.   if(!ReadCfgFile("Config.ini"))
    1 n2 w; t1 T! T
  527.   {
    ( K2 S) U* r- @7 Q) ?, H- Z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);( C" D) ?1 s3 `, Y! x. A
  529.     return TRUE;- m# H9 L; m( c0 ?
  530.   }
    2 H8 t  S2 b- S! ^
  531.   HANDLE mutex;
    5 r' ~5 ~& {2 D' i2 A
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ; D' j6 m- _/ B% Q. l4 O' _9 p
  533.   {
    1 a/ M' k  D+ {
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    8 X& h( s# T8 Q, n* E8 U
  535.     {/ x' y8 y7 l1 j
  536.       CloseHandle(mutex);
    . t5 p, V& f4 ^# D/ E1 @
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    5 I7 Y  m; h" p' g1 w$ i/ ]
  538.       return TRUE;
    ) D) S4 z' K# G- ?1 B& l
  539.     }
    5 R( m( p5 b; ?, y7 \# N
  540.   }  , x* C( I. u) S8 g. N, K
  541.   CloseHandle(mutex);+ u: r4 z0 \+ t5 ~* n0 G9 p6 O
  542. ) |$ D7 ?3 b; t# Y% L
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ' [- c+ ~% c1 X, E+ x

  544. ; y* a5 m$ x, v, v9 ~+ p" E" J
  545.         AfxEnableControlContainer();- B/ w' e% i/ D

  546. ' Z  _, |& W% C" L/ h' S
  547.   bCanUpdate=FALSE;) {/ j$ K# y. V) L8 R7 q) K
  548.   dwStartUpSteps=1;- v+ }4 v1 A# J; U/ i5 C
  549.   dwProgramState=AP_NOTHING;
    9 x6 H1 ?# z! R: l5 k
  550.   n6 j+ f$ t0 Y; U2 g/ W
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) m9 C% S  w7 e2 m

  552. 2 o  M0 ^% s1 b% ~
  553.         // Standard initialization
    - C/ {! B% j+ o2 ~1 X
  554.         // If you are not using these features and wish to reduce the size4 Q' a3 U5 U2 E; ?* T* ?' u8 j
  555.         //  of your final executable, you should remove from the following
    + n1 i) x' R. ]4 B# b6 c1 Q9 a1 I
  556.         //  the specific initialization routines you do not need.
      ^% ~, t* G5 R
  557. % b$ K1 ^2 w( E( {- N" L
  558. #ifdef _AFXDLL- s) I8 }7 ~; M4 X! p
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL* ~/ H6 P& V9 r# s1 d( f
  560. #else% B* V) P5 d  u( i
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically3 k0 J& b6 r3 f3 o# J; o* J
  562. #endif
    / X5 s5 D' M& }

  563. 9 p, g  y. Z" ]2 E3 O' L& H# _9 N
  564.   dlg=new CRevAppDlg;* l* ]$ {5 s) U
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    & f5 g8 x# @+ s3 r& j* e
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / v6 [' W: y$ t4 g  S3 o' h
  567.   m_pMainWnd=dlg;
    + f4 a7 u& r( K! ]: J* L

  568. , ~9 b; A" x1 G  V, r% Y3 n/ v
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    $ |( ~8 L# h% [: {

  570. * U- V% q2 P  k( U6 f4 [
  571. //  GdiplusStartupInput gdiplusStartupInput;8 p/ b- P& ~( {7 p
  572. //  ULONG_PTR gdiplusToken;
    1 t% A$ K7 j9 y# m( E! P
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    & U9 x# C3 u) d+ W) c- U+ i
  574. * R2 r2 ^- o2 O/ j5 N$ a1 A/ }
  575. //        CRevAppDlg dlg;: U7 c3 F0 t% }* R
  576. //        int nResponse = dlg.DoModal();
    & {- ?. `+ {. r/ t+ t) ?5 H6 P
  577. //        if (nResponse == IDOK)
    & G4 B( {5 {" }# R6 d
  578. //        {. g7 x6 b. X3 e4 E& a/ o
  579. //                // TODO: Place code here to handle when the dialog is
    : ^5 ?* C+ m% G) P
  580. //                //  dismissed with OK3 w( z  \0 N8 W) c3 [# Y
  581. //        }7 |( ?7 R2 I, d& g, e
  582. //        else if (nResponse == IDCANCEL)
    0 g1 T" x6 T2 l" r
  583. //        {% v9 q" T5 ]% F: X) g. t
  584. //                // TODO: Place code here to handle when the dialog is" f  @' m, v( J* _2 u; A
  585. //                //  dismissed with Cancel0 Z- K, w  M0 L7 v' R4 i$ g0 j
  586. //        }
    2 G& e. h* p: ~2 F1 ]/ @
  587. / D) H- _2 P1 Q  B' k) ?
  588.         // Since the dialog has been closed, return FALSE so that we exit the. J6 j" t3 U) w8 E
  589.         //  application, rather than start the application's message pump.
    : j4 Q, s5 w3 m
  590.         return TRUE;
    3 Z- Q2 c- |+ b  e( m8 R$ g- E
  591. }* C7 h' A! o. A. n4 _

  592. ! M* a  @- `- r
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 ~5 r; I1 v, @; i8 B+ i4 g- V
  594. {
    4 q6 S, h9 j! w7 b3 D. v
  595.   int i;
    2 D5 t. [+ Y5 h5 C) ^, i
  596.   char *szRet;, Q5 u) h0 X3 @. S& o& a4 h" w# I

  597. - a) Z9 C" Z. O. @. ]" P; \
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    , @+ r7 y1 K0 E# k3 l( {7 u" j' L
  599.   if(sztoken), X3 l" |/ X2 l
  600.   {# Z+ A. V, b2 o7 L0 U& S  U& c
  601.     szRet=&sztoken[itoken];
    ) {% ?0 b; M: k7 U2 E% l+ M2 v
  602.     while(sztoken[itoken])
    - O5 F5 b" P' u) j4 P* }  E  x" e$ R) A
  603.     {
    6 f/ k: _6 i, a
  604.       for(i=0;i<(int)strlen(token);i++)
    & h  r1 P& [+ c4 F8 v1 g
  605.       {
    3 W8 a7 p; y# m' B% [
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 [/ S) J6 y5 I3 ~
  607.         {
    , p3 {+ V; y& K' P
  608.           sztoken[itoken++]=0;5 p5 e% Q- t# e6 C$ w
  609.           sztoken[itoken++]=0;
    ( _, G& N9 C, E% s
  610.           return szRet;
    $ w" ~3 {; I, C% @3 j/ o- V6 D
  611.         }
    ) D. F+ p- ?# x; r+ M1 j
  612.       }
    . \, U1 H3 |) l4 e" p
  613.       itoken++;
    9 e. b6 K8 o! j1 P1 v+ s9 r
  614.     }3 K3 }; L. x: M6 u* @1 R: b: D
  615.   }
    5 t3 P! G" z7 S5 e4 s, y) I
  616.   return NULL;
    # j; o2 j! s6 i1 F) ^
  617. }+ I. a3 |+ k# G! i( `8 Q3 d
  618. ; {) f# R8 r  c, [; N5 P
  619. void ProcessProc(long Total,long Current)
    / U; h  y& V5 M- T
  620. {
    : p6 B2 X8 F+ h. N- c! y
  621.         MSG msg;
    4 u2 C& J1 S/ r# n0 P- r% Q: ?
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);' z' h9 Z1 M' p: [4 B5 @" K; a
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));: d% C2 _5 t& {6 _8 j( C& j
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    9 R$ z' Q8 Q& |3 z0 c+ _" k
  625.         {
    5 [* x# q2 Q/ ?! K; l. m& Q1 C( y
  626.                 if(!GetMessage(&msg,NULL,0,0)); R% y, T- O5 \, o8 u7 {
  627.                 {  c1 \4 y4 _  Z, Y! |, o% m
  628.                         return;
    & y% j8 Q) n8 }
  629.                 }
    ( `) O6 L( S, M# D- R. K
  630.                 TranslateMessage(&msg);/ C- Q: }6 X2 H1 s3 Z
  631.                 DispatchMessage(&msg);% D& C0 [4 C, N$ m. a
  632.         }        % ]& S( w- s1 C1 ^- P
  633. }- b- y' @5 y8 t, i# Y: t5 E9 L& a

  634. + e6 F. [" |( b8 U7 h
  635. BOOL bFirstChar=TRUE;( Z) Z0 R+ M0 |! {0 G. f# X+ h
  636. % n$ W5 ]) w9 R; a4 _7 s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    - F& f( o% N5 ^
  638. {. q% _, _6 |7 E! O" m# \7 M
  639.         // TODO: Add your specialized code here and/or call the base class* K; c& l4 N  U
  640.   switch(dwProgramState)
    1 i1 h! {2 c+ X& b" |2 F! {! o1 \0 r8 o
  641.   {. ?3 X( J1 H) H5 ]4 u" N- S, c
  642.   case AP_NOTHING:" G3 y$ u! C' {% f8 O
  643.     switch(dwStartUpSteps)7 g$ ?/ m2 Y: w/ k; \& V* v# k' r
  644.     {8 m4 V6 q$ j2 z9 e  _' v2 N$ ^& E
  645.     case 1:
    # D* D" S- O# |5 P. A
  646.       {
    6 F/ B% V  \6 U  M$ U0 L2 B  C# j
  647.         int i;& e' Y' f# Y% R! [0 n# U+ ^" s
  648.         CDC *pCDC=dlg->GetDC();* B/ ^3 }7 v( X7 T# [! V9 x
  649.         HDC hdcwnd=pCDC->m_hDC;
    9 ^% W2 O! W2 e9 g$ a9 \$ [/ y
  650. //        Graphics graphics(hdcwnd);1 P, e6 b1 i' }2 F# Z$ g
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
      e. s+ u/ w! v) L( l& s2 ^
  652. //        INT iWidth=bitmap.GetWidth();
    $ ]9 ?: q7 ^+ Q- l( p
  653. //        INT iHeight=bitmap.GetHeight();/ ~. h8 }4 |4 m: M; |# O0 }$ a
  654. //        Color color,colorTemp;
      _5 T% L" i1 O( `' g+ V, I
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ; \+ }( H, U( _# l% h7 o3 g* N0 e
  656. //        {
    ; }( H0 |0 X' C' E3 `7 u; B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++): q9 Y9 @6 h. X( c* H6 ?: b2 e
  658. //          {# R$ c$ ?0 ~5 Q, S9 b
  659. //            bitmap.GetPixel(iColumn,iRow,&color);  v4 H/ \/ R2 X. S* P& V
  660. //            colorTemp.SetValue(color.MakeARGB(
    ) E3 E1 e0 G) y
  661. //              (BYTE)(255*iColumn/iWidth),, v  Z1 |; z" g( `5 o! u& B
  662. //              color.GetRed(),
    ' P1 F! |' @& T: H2 a
  663. //              color.GetGreen(),+ W9 ~4 T3 g7 A/ V- a0 u0 b6 ]
  664. //              color.GetBlue()));
    0 w* {3 Z4 J& p4 b4 E
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    0 B2 `9 W1 h2 q" ]  Q# G
  666. //          }. p% V) h$ w5 x( d+ W) F# E6 n
  667. //        }
    2 J8 ?7 }, Q8 ~6 T. M
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);( X+ H8 E1 L" S
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; i* Q& Y" }" K. u( }8 g& M
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    % a9 j! J/ a) A( [( y; [) Z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 q+ A: \) Q7 R; @2 n
  672.         for(i=0;i<240;i+=8)3 y/ U2 `5 [! V6 `
  673.         {/ O  R, A, o% J4 B2 r" L% F
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ u3 X% M9 q" A- [
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 K4 o% R; Z/ \* V
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( D1 {& H, v' j/ @/ o1 d5 i: n
  677.           Sleep(33);4 u8 x( T7 _& s1 s, J6 f' X
  678.         }2 R& O$ j8 F/ R) J( `
  679.         Sleep(1000);5 H  ^0 A" @, f* l' a
  680.         for(i=240;i>0;i-=8)- R7 x/ `+ e4 x6 H# k
  681.         {* m/ z5 c+ g- u# ]2 N5 r  }0 I
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( V7 M8 M+ k, Z2 G
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 B6 J9 |, t# ?- J) L
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . X  u3 A" k9 B. k4 L8 k
  685.           Sleep(33);8 L. \  J1 @5 O) F4 X2 ]; F+ L
  686.         }9 J' |$ @8 P( M9 L
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
      ~+ `  [% c* |4 c
  688.         dlg->ReleaseDC(pCDC);
    3 g& M+ B! |5 R$ T
  689.         DeleteDC(hdctar);
    $ h' J) s8 B' l9 O: R
  690.         DeleteDC(hdcsrc);( w5 K! d, t6 e1 y# d
  691.         DeleteDC(hdcorg);0 |0 p. Y- H( y9 b3 V5 s9 m: q( M
  692.       }2 S+ r$ B+ p  u7 z7 R2 U# j* K
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);: u7 ?3 ?" Z+ n8 A& ~
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 S9 q- \+ p" F4 U6 y, X
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    5 y% w2 s2 u0 Y# I1 w
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    1 `, f; f( ^3 \8 J& c+ |+ |4 m5 U
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 G) ?& Y! s( b% o+ O3 t
  698.       if(!Dn.Connected())
    ( q! Q+ A4 S% A6 p" q- i
  699.       {
    % Z9 Q3 J# X+ y! E+ J& U( N4 D
  700.         dwTotalFiles=1;1 j! p2 W3 u. r. _" i- T
  701.         dwDownLoaded=0;
    % V' G- h& U- C8 ~
  702.         bSilentStep=TRUE;
    1 u; ^6 K# E8 I& W5 ~7 r
  703.         bCompressed=FALSE;7 a. O- ~( S$ m2 }) F; m
  704.         strExtLocal.Empty();, h: Z8 Z; n9 J' l) M6 a
  705.         strFullName="readme.txt";  `- y8 l' t  `, P) W+ \9 g# y
  706.         dwProgramState=AP_CONNECT;& `5 G% K/ T$ s# a( o/ }
  707.       }
    1 O  k3 U4 v) ]) I6 ~+ W
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
      m# W3 D2 z5 T9 O: N" e
  709.       dwStartUpSteps=2;
    & x. H/ j# y1 ^. Q0 `: C; J
  710.       break;
    ) m/ ]' v0 A% S% G
  711.     case 2:( e4 d. h* B* K0 j9 m, o; ~) |; I! S
  712.       {
    7 \# m, i" |$ e% A# D) A
  713.         int iEOF;
    ' C# G8 z! _, d
  714.         FILE *fp;
    0 G+ E" y% g5 f5 e& Q3 `
  715.         char szString[512];8 ^$ C5 W7 j( E" Y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 ]6 S3 Q) Z) L# A3 F
  717.         if(fp)3 D$ {7 J' k' A1 ?
  718.         {  v- f, S; `# G4 R7 y" d" p
  719.           do& M/ \% N/ q4 m$ u  ~, O$ {
  720.           {6 h1 E; y" g1 r4 O3 D' a) j  c  S
  721.             iEOF=fscanf(fp,"%s",szString);0 F: b- F% D, E  ~- Q' {0 t
  722.             if(strlen(szString))
    ( f5 E8 I; O3 q" y( _. o
  723.             {
    $ G9 v# Y  z7 R5 Y0 m
  724.               if(bFirstChar)
    ; m1 y0 a. l9 u# N& p3 N/ G* |
  725.               {& {* u( {# w! G8 t9 e, _
  726.                 bFirstChar=FALSE;
    8 q$ v8 {6 l" D# o6 }
  727.                 bConnectIsBig5=FALSE;* w$ J( v) B6 N' V' n6 l
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    9 g# ]7 ]/ l$ w% v+ R3 a$ n7 |; A- T
  729.               }
    2 S; t; u  Y' a. j* B' P8 L* }: L
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . |' C8 Z3 T* K% C4 U  i2 ~9 j
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    % L" u, z' Z# I3 c5 I
  732.               dlg->m_ListText.AddString(szString);
    , _2 e3 ~/ m& u. ]: s$ a5 p& X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 f& {  N, V& L( i; }  x
  734.               *szString=0;
    # O3 r1 V7 }% k: u; b
  735.             }( D7 O- E& P- Z, h( A2 O& F
  736.           } while(iEOF!=EOF);
    9 F4 O5 i. E* n+ Q
  737.           fclose(fp);
    0 v; Z5 ~  v2 G: o2 n
  738.           unlink(".\\DownLoad\\readme.txt");
    - S, C& U. b. E% I
  739.           dwStartUpSteps=3;. z# \& k7 ~2 y' y
  740.         }
    ; A  H3 C% b+ E2 w! z
  741.       }: k* o/ r) c- k# T) H% N
  742.       break;+ p1 \5 J- J) c% L
  743.     case 3:  ]! H- E. i* J* H" C
  744.       if(!Dn.Connected())
    " W- C& c3 q$ {# O, ^/ A& }2 Q
  745.       {6 R. k7 z" Y2 h+ r9 K( ^$ ^
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    $ b/ V6 d4 K1 p( b/ n; F3 @
  747.         dwTotalFiles=1;
    * M" M0 a5 G6 B" j
  748.         dwDownLoaded=0;
    ! m. S: B: h# L- Q
  749.         bSilentStep=TRUE;
    6 f' {& b+ H1 p
  750.         bCompressed=FALSE;; D( Z* ]9 }' H. h2 I
  751.         strExtLocal.Empty();$ g' _) a% T# w
  752.         strFullName="checkversion.txt";) k5 s( y# L6 b2 P) |, u
  753.         dwProgramState=AP_CONNECT;/ L6 j: }' f: w
  754.       }
    9 r. H! h. l' ~' v1 t
  755.       dwStartUpSteps=4;
    9 U5 d2 k9 f  r
  756.       break;* q5 d# S8 C8 y: q7 \
  757.     case 4:
    / A' f! ?3 y- c' M3 N
  758.       {9 |" Z$ E, p( n+ }) H4 e
  759.         FILE *fp;
    ' ]$ e* W$ k. x) a
  760.         char szString1[128];
    3 l: U5 W: L0 e5 F6 |" P
  761.         char szString2[128];5 m1 Q( i5 T0 N8 U1 [! r' l: ]
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");! ~- u# W% ^" B* a/ N
  763.         if(fp)
    $ x( J  E2 g- E" C% _. d# G0 @$ C  M% h
  764.         {7 Y4 N3 A1 s9 ~' M) B1 S  A$ B. F% X
  765.           fscanf(fp,"%s",szString1);
    1 {& ]5 Q+ C+ Z) O% I- Z( d' k
  766.           fclose(fp);  {! U2 a+ |5 c" g( Y7 q4 M
  767.           fCheckVersion=atof(szString1);
    8 L6 u5 ?- A# \* a0 U
  768.           fp=fopen(".\\checkversion.dat","r");
    - W/ A' a- x6 [1 U* |
  769.           if(fp): U6 w6 c% f& J% H6 Y" Z) V0 Q0 l6 z
  770.           {
    " c8 J2 K7 ?: d/ @2 J
  771.             fscanf(fp,"%s",szString2);  N" o5 x. ?/ b" f; n/ F/ w( g/ i9 J
  772.             fclose(fp);9 x' v: Z8 o9 B, F
  773.             if(atof(szString1)!=atof(szString2))
    / u. s( T$ C& U  w4 F% Y
  774.             {
    / T+ X) l$ m  y5 E& o) |
  775.               if(!Dn.Connected())
    2 x( t' y+ H2 y' E2 q' u1 J
  776.               {2 t$ ?! k! r% j, L+ p- ^( h
  777.                 bFirstUpdate=TRUE;6 y& w# D( q0 W. k6 }! Z8 A
  778.                 dwTotalFiles=1;& Q) I6 H8 M* b; S
  779.                 dwDownLoaded=0;; c; `$ @' K1 v
  780.                 bSilentStep=FALSE;$ x: N. t5 @' u2 R& e
  781.                 bCompressed=TRUE;! }% l2 {# d( Y! Q9 m) h7 k* X( k" [
  782.                 strExtLocal=".\\DownLoad\";+ L# V2 |% e0 Z3 a9 ~7 l
  783.                 strFullName="update.txt";
    & D: ~! a0 z" u. ]+ N% b% G
  784.                 dwProgramState=AP_CONNECT;- F: m7 g  ~# `
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ e5 A( I7 s5 v- E9 }
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' T' U* \; ?1 B/ D' f( K
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    # _- E! D6 q$ W# X# d

  788. 6 G4 J4 L& |2 }& \9 {  U0 {
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 ]5 F# s6 ^9 f. e8 E6 `- n
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    0 B* g6 B% z' G$ V
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)8 r4 k9 W0 y3 O  n) _1 R. T9 o
  792.                 {
    $ t; o) x, g7 c" p) f+ m( x
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    % }1 j& W# d7 g& ^
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    $ j! S% d- w2 v( K$ U2 }
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    # ~0 k0 ?! G5 H4 U- H  d# y$ x1 [
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & d8 a% X* i$ h1 L& S( }% A7 _5 E$ n

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

1 S$ ?# [' W% K5 k7 J* D
* }1 J; L+ r8 g7 F# _# \5 N2 d: R( v

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

寂寞在_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
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部