CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
5 {3 r1 g1 R& s- z
  1. / RevApp.cpp : Defines the class behaviors for the application.7 o: ^2 ~$ x% A- {( v' F. g& [5 O8 |
  2. //9 j% q$ o( Y& |( n  p! l
  3. $ I* d4 j# {" b- Z( {+ Y/ A* w
  4. #include "stdafx.h"
    * p+ A9 ?7 y6 ]9 k

  5. - A" H* C# }  [. }! q  x: [3 r; G
  6. //#define UNICODE
    9 Z( K" T! C. ?6 _- T. X& v
  7. //#include <gdiplus.h>2 t! {" i' `8 ?: J: v8 S
  8. //using namespace Gdiplus;
    " N6 X- e0 A7 K2 M% M; z
  9. 4 ]4 z% I- z0 x- `6 [
  10. #include "RevApp.h"
    % \+ p% |% F6 Q& U% T8 p
  11. #include "RevAppDlg.h"
    % s5 l& |+ l1 L5 u- ~
  12. 8 F5 z2 @5 A& a: l9 {
  13. #pragma warning(disable:4786)
    6 f5 S7 e; w% `
  14. #include <map>7 F) z, d4 d" z4 _2 s7 w
  15. #include <list>
    & B2 H: x  f8 G, o
  16. #include <direct.h>- W0 s3 z. h! ^

  17. ' \: t, L; s: I8 w, X
  18. #ifdef _DEBUG9 q8 q. f: a' U% S- f4 i# Q
  19. #define new DEBUG_NEW5 T4 @$ F  J2 K1 }+ p/ `( e
  20. #undef THIS_FILE( d. U+ `, W1 R) X
  21. static char THIS_FILE[] = __FILE__;
    7 Y5 H5 B. B3 U! }' X. s1 s2 x& o
  22. #endif
    9 l) T7 }8 A. E: q) n3 r) E) e. L
  23. #include "SkinResDef.h") }- w9 y2 k, y
  24. #include "ChangeBG.h"" j. \' |7 Q: k& p5 j
  25. #include "AFXINET.H"( X) T. K% w/ }

  26. 1 B3 O$ y! \. n
  27. #define TRADITIONAL_CHINESE 0
    / V+ u2 i% w5 c/ H
  28. #define SIMPLIFY_CHINESE 1& n1 P8 d+ x3 E& I
  29. #define ENGLISH 28 O- _( M) b) l, u7 c8 w* f* R- _; F
  30. int m_iLanguage = ENGLISH;
    / n1 {+ j7 B$ H
  31. /////////////////////////////////////////////////////////////////////////////$ e4 w2 T1 l9 z* `8 x$ M& J; @9 o' V5 \
  32. // CRevAppApp
    ; y, ]! h1 G; u! E
  33. & c& Z# H$ x$ \$ M' {5 n
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    8 n3 z* u8 ^% T" B3 h3 r7 ]
  35.         //{{AFX_MSG_MAP(CRevAppApp)' |( [4 E" m  }1 f) A* @$ \
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. c7 y. E/ D9 u: m) {3 W! J/ m
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    " k2 c& V: f$ f. I7 b0 C
  38.         //}}AFX_MSG1 X5 X3 f9 F8 d7 ^! O6 F# s
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)% z, v- j; X% E9 M- K2 ?/ e
  40. END_MESSAGE_MAP()/ H2 w6 g3 H9 f. t+ q
  41. ; Q1 v/ w, c6 i% [+ L& v0 e
  42. /////////////////////////////////////////////////////////////////////////////+ i; K) M& c- R. y  _
  43. // CRevAppApp construction  S! z4 R! c0 s, M. m: y- b+ A
  44. ( ~6 J. l6 ]$ l% X& j
  45. CRevAppApp::CRevAppApp()
    ; {  F, V/ C8 m, s! {- [
  46. {; P& U" E1 F% o( P# t: j
  47.         // TODO: add construction code here,
    7 Q/ c: s$ c* `* ]
  48.         // Place all significant initialization in InitInstance
    # E& A& y0 k6 u3 I) X7 h( A
  49.   bDisplayIsBig5=FALSE;+ z) O4 S& b) |8 M: U
  50.   bRestartUpdater=FALSE;
    1 ~) e; u) B  j7 `( d3 V
  51.   bFinishUpdated=FALSE;0 J, J" W* L7 z" Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;3 h* ]0 b( n6 V
  53.   InitChangeDataBig52GBKS();- C5 [8 h4 f8 D" T
  54.   InitChangeDataGBKS2Big5();5 @; n1 u5 d& A2 j, }6 [0 J& Y! q+ m
  55.         //- I2 G, I: j5 [" E% `2 U4 ^
  56.         bClickRunExe = FALSE;
    6 x* O9 H" y7 I3 ]) q
  57.         //
    , K5 f1 H9 y: y, D6 `, x" ]) g* k+ c7 u
  58. }4 \) ~1 E4 Q/ r

  59. ) k  y6 D9 W5 `
  60. CRevAppApp::~CRevAppApp(), N6 O5 _. |8 g0 k% T* F
  61. {: \+ h8 j' ?5 L9 @) m
  62.         // TODO: add construction code here,
    # d2 D$ g6 k  C6 x8 {
  63.         // Place all significant initialization in InitInstance; Y' X3 n, E1 e/ C7 x
  64.   EndChangeData();5 |. z  u2 _3 s9 J
  65. }
    $ U* n. u7 c' f+ Z
  66. . K( L+ e! A( f2 v
  67. /////////////////////////////////////////////////////////////////////////////
    ' g4 b- r/ s3 C# l6 W3 w% h0 O
  68. // The one and only CRevAppApp object
    ; Q# g+ @% A/ q. _
  69. 7 v: C; m& t4 d& m& g: W
  70. CRevAppApp theApp;$ V. v5 j1 J5 V

  71. * Y2 n" }8 K+ C  @/ e7 }5 F, p' F
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    & N* r4 @2 T4 Y% ?6 K; @
  73. {+ n2 O1 _8 g3 h6 M- [6 Q; {
  74.   int iEOF=0;
    2 E& Z5 B) k2 k4 k
  75.   char szTempName[MAX_PATH];6 n6 J; L5 g% H" Q# b
  76.   *szFileName=0;
    $ N; e: [, M6 P2 b3 c' {
  77.   iEOF=fscanf(fp,"%s",szTempName);
    + |0 h. m, Q8 R# b1 U
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    * [: V" q1 D' [& a1 |
  79.   {
    ! _6 Y7 v! V: Y: o1 d! O" ?3 ^
  80.     strcpy(szFileName,&szTempName[1]);! |* d5 V; V# \, H: F5 e: y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)% r+ ^1 r, V( n+ w2 X6 n
  82.     {
    . g7 ^; Y) {9 R5 t7 P9 m
  83.       iEOF=fscanf(fp,"%s",szTempName);
    $ R2 N+ u5 n: t6 p$ H
  84.       strcat(szFileName," ");
      d" N/ c1 u! I# Q0 S! z8 E9 h
  85.       strcat(szFileName,szTempName);$ r# w2 U8 p' R; s( G! k2 f6 \: q
  86.     }: o6 R5 t( @8 ~5 u; R' v
  87.     if(strlen(szFileName)>=1)! U+ n( y. \0 e: `& E
  88.     {* T/ N3 _- f# l% F: k8 W' C. B0 Q8 J
  89.       szFileName[strlen(szFileName)-1]=0;
    - D  G& J% ^( [4 a9 M* @
  90.     }
    0 g1 t! I4 T+ N# v
  91.   }
    7 n& j& k$ s' n5 _7 k
  92.   return szFileName;0 M& x8 v+ h( k# ?' D" \
  93. }
    4 f2 i$ r( b  N* x- F
  94. 1 ]: B! B3 V0 M# U. g2 M+ b; D% ^9 h
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)' ?) A6 `1 i4 S) m( G
  96. {- U2 `; y4 M+ t1 N6 b
  97.   FILE *fp;9 f& R; ^9 {: e/ G
  98.   char *key=NULL;+ F6 {' t* g5 ]) K
  99.   char version[MAX_PATH];
    0 c: d. _9 ^$ _0 `% B5 N
  100.   LPUPDATEFILE file,olds;
    8 F  K5 ]2 x. x4 y1 A8 Z# o! Q! f3 N
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / W9 r3 [( h1 D, C& Y# h6 l+ f

  102. 3 l! D1 H. @1 P4 ~+ n9 v
  103.   UpdateList.clear();9 H2 w, d, {3 y6 V. g3 g
  104.   UpdateFile.clear();
    + I4 v: _! y) u' m. O
  105.   if(GetFileAttributes(filename)==-1) return false;
    : ?( P' ^& p- ~3 u! m; ?
  106.   if(!(fp=fopen(filename,"r"))) return false;
    : q) j4 f: g6 d
  107.   fscanf(fp,"%s",version);4 n% y. A- S- i, K$ D4 r
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }% g, u5 e% U2 A
  109.   while(fscanf(fp,"%s",version)!=EOF)
    / U, Z) H( y" _- z; S3 E) T
  110.   {2 s2 X! ?4 N; t" j6 Y7 T5 g
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , ~9 p3 v0 Y. {: `$ H4 x
  112.     fscanf(fp,"%s",file->path);
    . `+ d* l! [" F( K
  113.     ReadFileNames(fp,file->file);4 m- f4 ]6 M. r4 X6 k* C5 \
  114.     strcpy(file->full,".");" p/ O+ O3 g4 c
  115.     strcat(file->full,file->path);" b5 B' b' n2 u# V/ m
  116.     strcat(file->full,file->file);! H/ u6 F# {0 i0 W
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    2 }% I& B; H5 i' K
  118.     {) p( ~/ @( p5 J6 W0 S7 T# e
  119.       file->vers=(float)atof(version);
    % Z' l& w1 q+ i6 @# g3 |
  120.       UpdateList.push_back(file->full);: c" M- v: U# G6 g0 _  B5 e
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    0 ?6 u' k6 @* R" U/ g
  122.     }
    ' I3 p; P9 B; t$ K( O
  123.     else
    0 J6 Z! P) N( k* B0 F2 V7 ~
  124.     {
    ' ?7 f8 K% C! c9 X, `+ K
  125.       olds=(*p).second;
    , u7 t- u* r* |" ]# y
  126.       if(olds->vers<(float)atof(version))
    3 M0 f  u0 B, t9 U, D
  127.       {
    & ?4 m, z# t4 P7 {8 M( v
  128.         olds->vers=(float)atof(version);
    8 T; v8 e9 C6 S7 `+ x
  129.       }8 m* z! K* R# T" d, y  B
  130.       free(file);
    : B2 V5 f' o: z3 J0 C
  131.     }
    5 N6 h3 k+ u$ @* h! E) X
  132.   }2 ?. B8 `7 ~  Z6 O% ^/ A: q" H! N4 C
  133.   fclose(fp);2 q4 c" Q5 T: ?9 y* A
  134.   return true;9 C, s( ]/ o" p: B$ b
  135. }& H% c* D5 ~. P7 l+ R$ A

  136.   X0 ^7 @3 e. I* G0 p9 r; g
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    + ~/ P9 g! V4 S
  138. {
    3 t& w! ?/ e$ `2 J+ I/ t5 k
  139.   TCHAR  szFull[MAX_PATH];/ O* a- m2 t; u+ w$ u/ v  D- G  Q
  140.   TCHAR *token,*inter;* ?. }0 G+ `4 f- O
  141.   *szPath=0;. k* @' k: X" t5 l& w
  142.   strcpy(szFull,szFullPath);
    ' x' u6 a% P0 T8 e( y
  143.   token=strtok(szFull,"\\/");' |4 X: V9 O1 J) q- D
  144.   inter=token;% V0 V9 y$ [, a. F# _7 c
  145.   while(token=strtok(NULL,"\\/")), l7 f" Y8 y" T- P  J( i! c
  146.   {- m0 I. k6 [* C0 D2 z
  147.     strcat(szPath,inter);/ T- G6 X( e2 m. T+ z
  148.     strcat(szPath,"\");
    9 v7 R2 h" L7 q# I! E
  149.     inter=token;9 [- C  ]' I% Y1 ~# N- [
  150.   }
    " r6 L0 ^8 U/ L6 F' G6 F
  151.   return strlen(szPath);
    # [4 U' `7 Y. f) K5 o% g( h1 Z+ n- O
  152. }
    # y  j0 e/ i4 u- m: U4 Z6 m# H
  153. 9 d" ^7 S% ~  E; ?3 f
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)/ e- R+ T! E; d) \' C8 S
  155. {: r% s. G' H. L4 d
  156.   DWORD attrib=GetFileAttributes(Target);0 S1 s6 I# {! r, p, D' o" l/ O# f- r
  157.   if(attrib!=-1)
    ; P4 L( b. p% M, s7 q
  158.   {' M. V. e& R. A" q; n
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    . ^7 |2 u5 G% z# k6 z# t- w
  160.     {
      v- {2 a3 F8 ^; q8 o5 C  @* S
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    7 X/ @/ ~0 P  w( _
  162.       SetFileAttributes(Target,attrib);
    & F* d: Z- a8 A1 s( w5 W
  163.     }
    % U6 p) {/ |5 {4 W$ i
  164.   }
    1 ~$ T3 l/ |& p& {
  165.   CopyFile(Source,Target,Erase);
      k1 M( e1 ?' K
  166. }. [: I: C% d8 t! J. _5 t( Z: [5 _
  167. 2 [) W1 O+ I( ~# t* f' V  m/ a
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)/ v- G2 w% M6 m# B; j
  169. {
    ; Y  u; w$ A3 r2 M) Y
  170.      FILE *fp;# q8 `3 P$ D0 s3 l
  171.      char  szBuffer[8192];
    4 {- |0 [  D  Y& S9 W8 Z
  172.   va_list  argptr;
    + d1 b2 S  i8 |: o9 N0 d# C  }6 p
  173. % q1 J, K; a3 A
  174.         va_start(argptr,message);
    " C) r+ {0 }# {- `+ s6 G/ Q
  175.         vsprintf(szBuffer,message,argptr);
    : o* O# @( |" R5 \; Q8 ]- G2 s
  176.         va_end(argptr);
    3 {( E% s2 z" C, g& b1 r
  177.   fp=fopen(FileName,"a");
    % [% l. `8 A- F: q! E
  178.   if(fp)1 @# N# I* s% `' e
  179.   {
    . m4 n2 O5 M% \5 Y, t
  180.     fprintf(fp,szBuffer);
    ; c, F0 v$ D% `# k( S
  181.     fclose(fp);; K6 E( g3 B' F) d
  182.           _flushall();, f5 P' V7 O  r3 |8 P' I9 h
  183.   }
    * x1 Z) j& T/ o" E: |! j1 X$ r
  184. }  N9 R7 w3 g" V, v) C& V& e
  185. 6 q3 M7 H5 s: s; P( R0 i
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    8 K- v( Y6 X6 b$ q# ]( W" k* P- R6 y( }
  187. {
    : b1 ?* a% L; r8 h" z2 o* c& U. f
  188.      FILE *fp;5 y9 ]$ O5 a1 u0 D2 \0 `
  189.     DWORD  attrib;9 o. W  x9 I( Y$ ^
  190.   attrib=GetFileAttributes(FileName);8 H* M  y: x3 }- a
  191.   if(attrib!=-1)
    ) H1 q7 [! v2 C$ {$ Q$ p
  192.   {' f, l& i) S/ U& ]
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    $ x; @1 I2 M6 ^) q" h8 i
  194.     if(!SetFileAttributes(FileName,attrib))
    5 ]7 ^9 M8 q! a% n
  195.     {
    3 R) f" W( V1 k
  196.       return FALSE;- ^' F& B0 g8 G' A) _
  197.     }
    6 }4 r* S; e" B8 u' a
  198.   }$ ^0 l7 y1 i0 y* h, O& B" N! v+ \8 k
  199.   fp=fopen(FileName,"wb");
      z3 E+ n7 _+ C* \
  200.   if(fp)
    % `8 z) l# n) ^  Y! X( j- `
  201.   {" `9 d& H/ M2 u- }  J& b% M1 C  C
  202.     fclose(fp);/ t$ b" s: n6 \5 N: \/ m
  203.   }
    : C) K3 a" j# M- f- L' C; G
  204.   return TRUE;# J& ~% _5 S4 Q
  205. }+ b+ F5 V+ H  N8 b# l  F# n
  206. + w& o5 o: R+ P, @2 B
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    * @1 V2 [, u* K% M: {2 a
  208. {* f6 W4 Y  _2 N( g6 p0 `
  209.   char filename[MAX_PATH];
    / t$ D  _! P; j, M; _
  210.   LPUPDATEFILE file,olds;2 Y' ^# K0 q$ |0 k9 e6 X; I! K
  211.   std::map<int,CString>::iterator i;9 b; x9 q% z7 P
  212.   std::map<CString,LPUPDATEFILE>::iterator p;7 W# [& j: h, ?* q  G. X- T- p- N
  213.   std::list<CString>::iterator l;3 e3 P6 O% W' `1 `8 d
  214. + v8 v1 _/ A' Q, U! F- A
  215.   if(bFirstUpdate)
    1 Q$ I) S; f/ B! F6 X# L
  216.   {( ]" d4 [! a; d% y/ X4 V/ I
  217.     dwCurrFile=0;" O7 `' p3 B. e5 T+ }6 |3 _6 e
  218.     bFirstUpdate=FALSE;
    * y. T$ v. ?/ W
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " a* @4 W# Q% b8 f* \
  220.     {
    7 @% i- m; k, I0 b, X
  221.       dwTotalFiles=UpdateLocal.size();
    " X5 O; R( ^0 k& a8 v
  222.       dwDownLoaded=0;7 D2 o% Q' z7 B2 m! d
  223.       bSilentStep=FALSE;. |9 N( ~) a7 S0 f
  224.       bCompressed=TRUE;, U" p2 N7 ?( _* |" W, E! R& g4 K7 g
  225.       strExtLocal.Empty();
    6 u: X5 G2 @: @* L( P! P. y
  226.       strFullName=(*i).second;% M3 g, x+ l5 {( ]- A" `4 c
  227.       dwProgramState=AP_CONNECT;
    3 [/ v7 p& C) l" E4 f
  228.       return TRUE;- I: o  s5 g$ ~: B' K( p) G; Q2 r
  229.     }" W. s; F: ^/ y; ]$ Z/ Q
  230.   }
    / U; b% {3 G2 U( L
  231.   else if(bRestartUpdater==FALSE)+ V* W0 `7 {' K: y- y* \/ |$ E. s
  232.   {$ [1 H$ t, N# D; Q! _8 a, X2 T
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    / Z: B8 q) W3 y
  234.     {
    6 z, i! z4 d% K$ D0 v5 }% \, s
  235.       file=(*p).second;' J' J1 E9 {' g4 M
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    8 C) f3 _+ K. l% \4 O
  237.       {
    7 K! M$ f& G% p* I. I3 M( Z
  238.         olds=(*p).second;
    $ C- R" X1 K3 {- f
  239.         olds->vers=file->vers;" f4 v# a% n/ q& b1 _
  240.       }8 N3 R. d" v! \9 h  T  M- {4 O# r  L
  241.       else
    1 L! X; I) H# a) }! ~/ S
  242.       {
    ; h( s8 n! [5 C9 a3 F+ g3 \
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! X. P) q( L+ Y8 u6 K. H: b) _
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ z( z0 `% p- I" s$ A! s1 a1 x) [3 ]
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));+ w, K" H7 j% s4 a7 d, z
  246.       }
    & O6 a: z  V( w3 N9 t0 ~" X
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    6 u. G$ c4 _% r2 G
  248.       sprintf(filename,"(%s)",file->file);3 N0 f. q( n' i: [* Y) F: J  ~
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 W0 N4 V$ P6 o" K
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }6 X( Q& z! ?: I4 T0 y$ x7 j
  251.     }
    ) H( l+ g* n  k* P7 O$ S
  252.     dwCurrFile++;$ |3 }8 g% R% @
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    6 e2 J$ E. |  F& W% I( ?
  254.     {) S% A/ ?: E5 e/ d9 l7 \6 Y4 ^. a
  255.       bSilentStep=FALSE;8 L5 @; U+ A* K! I# x
  256.       bCompressed=TRUE;
    . Y) r; P2 S/ H  V
  257.       strExtLocal.Empty();6 c. b, O+ R1 S% H6 b- d" c7 }' d0 w. ~
  258.       strFullName=(*i).second;
    7 B: R( x# j; V+ V$ n5 {1 z, Q+ m/ K4 A9 y
  259.       dwProgramState=AP_CONNECT;
    7 H- ?& B' l: V
  260.       return TRUE;% H/ X) v& r+ c  U7 p5 X
  261.     }
    - p, J' U( a) o- i  [- g
  262.     if(!bRestartUpdater)' C8 Y; e* @% s" K# C; v+ X
  263.     {/ i- w- W' I; C/ M
  264.       int iCurrSize,iFileSize;* b% `" ^- K: h* m& F0 ^# ^
  265.       iCurrSize=0;
    7 c; h8 g3 f$ x  J* a
  266.       iFileSize=UpdateList2.size();
    ; N, V! u4 Q9 F* n
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ( z( L$ Z) N$ w2 j: ?, y3 R
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    - O5 B( \: `1 p- v" ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + k" C* c" ^6 t2 V
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! I4 @1 t. C5 M; h; T
  271.       Fclearf(".\\update.dat");: K3 B. J) R' P+ F: {3 P
  272.       Fprintf(".\\update.dat","Bloodyf\n");6 R' Y# n2 ?1 `: f, u4 a
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & m* f$ _" k! N- h* w. }
  274.       {3 V7 E, |' _0 o
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()): b( W( t, b+ M# F/ A
  276.         {
    ( h; Q# }; ~- D; W
  277.           file=(*p).second;, D: K. Z$ i& y9 K
  278.           sprintf(filename,"(%s)",file->file);
    6 v7 Y. i/ m2 X7 l
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % i  V8 H- ^8 s- \5 ]8 J
  280.           iCurrSize++;! A( \8 T$ M* {: m% ?7 j2 k
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    1 c& \( z5 Z' O' q4 C; v0 K, x1 s. }
  282.         }
      e4 s. {1 D0 }5 E2 s$ {! j
  283.       }
    $ ^; d9 l2 X2 ?) K# j4 h& q6 [
  284.       unlink(".\\update.txt");1 C  \' W" a! x
  285.       unlink(".\\update.tmp");* A' f; E% K2 h
  286.       Fclearf(".\\checkversion.dat");( N  b+ H3 K; A0 z, _: Y
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);/ Q* t& {) J, X! c5 M3 O: S, c, _
  288.       if(UpdateLocal.size())
    ; @) k5 W( u7 h* {0 U
  289.       {. }! Q& z& `0 U8 ]
  290.         UpdateLocal.clear();: u0 \2 M1 q9 O7 Z) b& e
  291.       }
    6 D+ \' D4 l& h7 e- B+ }, o
  292.       if(UpdateFile3.size())( {* K+ c# D2 C' n. h, `' e
  293.       {
    $ O5 Q4 O% f+ d! D- A
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 h5 \# w, R4 c+ E
  295.         {9 A! }3 r! `! G" y1 r5 O% p
  296.           file=(*p).second;( C) t% x8 f' F7 k
  297.           free(file);0 C* U( B7 a3 Q' N5 f8 C
  298.         }( U8 q) F$ s3 V' j6 c+ ~
  299.         UpdateFile3.clear();
    2 i% o) K' y. `7 l
  300.         UpdateList3.clear();
    7 h9 g; Y- M2 y2 ^1 l' C
  301.       }9 f$ [% c* s' w9 U
  302.       if(UpdateFile2.size())9 o; S! F6 E( h( X, S. l' g' }
  303.       {
    + b" I, s7 g& C! Q/ _
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 G* B  i- b& E9 Z' K
  305.         {0 X  [* Q4 F) V+ Y
  306.           file=(*p).second;
    1 x2 Z9 t3 q' h2 B- L& Q/ a
  307.           free(file);
    ) e+ V* @  u6 e* ?/ c( U4 N+ I
  308.         }
    ! I4 a' m. Q0 ^/ X& M6 ]( \
  309.         UpdateFile2.clear();4 x% _  z& q+ P4 A% ^
  310.         UpdateList2.clear();
    2 G0 y9 d- h) R3 K% r  M4 E% q
  311.       }
    8 P! U( n, h% L* h% a
  312.       if(UpdateFile1.size())
    : t0 a' Y! ?* c, S) l, [1 X
  313.       {
    % v( A# H2 i' |; A0 L
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 J! z" g: Q1 M7 x, w* n
  315.         {
    . H: b: S/ D" i6 H, R3 U8 L9 y
  316.           file=(*p).second;
    : G: o, t. I: x
  317.           free(file);
      o$ u# w# e: R# U' ~
  318.         }& B3 C' E5 ~% d4 \, x- m$ o2 ]2 i6 {
  319.         UpdateFile1.clear();
    5 \! C, ]: L3 k$ o
  320.         UpdateList1.clear();" ~' w5 G( g( g* }- l
  321.       }
    " A2 I: z% g6 u! r7 h5 {# r0 V; K
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));" T) w( v+ C! A+ m5 e, f
  323.     }
    ; e3 _, E8 s0 E! D
  324.   }1 a! k5 T" G' l1 f
  325.   return FALSE;* Y$ A4 Z! B+ w' V! u' e
  326. }
    3 N4 q. {8 ]! v1 q9 r

  327. 7 d) ~- p, S) a( K3 H2 @0 ?$ u
  328. void CRevAppApp::ClearAll(void)( |- Z; i) T1 v+ `% _( F2 {
  329. {
    8 _" O+ J* u) Y2 N% S
  330.   LPUPDATEFILE file;$ t2 s# Q& {  a0 Q4 ^; w
  331.   std::map<CString,LPUPDATEFILE>::iterator p;4 D- {: T  k. X
  332. 3 p, t9 R7 z; H1 z- J% L9 d, X
  333.   if(UpdateLocal.size())8 ~4 ^1 R6 u" D/ h# _
  334.   {/ _: w( R$ c" d) \( p, i9 }
  335.     UpdateLocal.clear();$ x" H. ?2 [) {% ]. t" b
  336.   }  R/ h; f* v3 l! J( G
  337.   if(UpdateFile3.size()), [4 U! R5 z( [
  338.   {
    5 q: q/ W* }2 i& E4 i  A( P
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( F" o' g" g, j# r
  340.     {# V, q- o' z" P: H
  341.       file=(*p).second;
    * [( B% |0 z% W5 p) `2 q
  342.       free(file);
    1 \. Q0 p: y# ]) N& H  P( A
  343.     }5 W1 e; U# A7 g. @1 O
  344.     UpdateFile3.clear();
    7 {7 f/ |. Z3 p% `4 l: o2 T
  345.     UpdateList3.clear();0 Z" }8 r( i5 X1 {- i
  346.   }
    7 {$ {) w+ o2 k& t! b" Z
  347.   if(UpdateFile2.size()): |& K) \4 I1 V" J1 v5 x+ w
  348.   {
    / c" G; _: S  m+ K+ M
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 z9 T% w$ j/ N4 U
  350.     {' t$ B* d0 {4 o. i+ U* a: s
  351.       file=(*p).second;, H, n: `" P( v% s  A( f7 P2 t
  352.       free(file);
    1 D& W" B$ Y( W0 J& r# k* |
  353.     }3 E* R+ U- ]9 ^  Q: J0 Q' z  x
  354.     UpdateFile2.clear();# h. c- V, A: i+ ?# ~3 C  |
  355.     UpdateList2.clear();
    # }) i, v$ S* m  U
  356.   }# q' k3 J. x6 C
  357.   if(UpdateFile1.size())
    5 G' ?, `3 a$ K. r; j: P% T
  358.   {4 T7 b8 z5 Q2 K8 J7 Z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++): M7 U/ @- b5 h. L
  360.     {
    ' d; T' n+ Z7 n5 T
  361.       file=(*p).second;
    / z0 @6 K4 F/ ]. l
  362.       free(file);0 [- z. o! T# N' W+ b
  363.     }
    9 q. E8 n4 c7 P7 h! q
  364.     UpdateFile1.clear();4 P, p* H2 K! ]! c, @
  365.     UpdateList1.clear();9 k% I  B; Y) Y1 R, ^
  366.   }
    1 N1 H3 ^6 _) Y, ^- B
  367. }  3 {+ a# U; V1 T
  368.   
    9 M7 g/ C4 I6 D5 A
  369. BOOL CRevAppApp::CheckLocalVersion(void)" F, ]- C1 n0 N0 h% [+ k
  370. {
    ! I9 |: i% J1 g( T4 \$ e$ ?; [
  371.   int c;
    & t- C5 m; Q, ^; U+ ^5 @# C
  372.   LPUPDATEFILE file1,file2;' N2 z- g9 `+ [, b$ Q. H
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;. A7 Z4 E4 ?2 j  W
  374.   std::list<CString>::iterator l;- x  a3 f- M" r- O& G

  375. 1 I2 V1 [* d; z7 W- e5 b$ x- U
  376.   UpdateLocal.clear();8 \; ~7 y: {4 O: P5 F& d3 n1 d
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( j, J) B6 [2 V( b
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ( q) S- P9 G8 m. B) k) s
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : q" ^" D& F% B; N! F! A3 ]/ s
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    , Y# A  ?2 U5 c- d
  381.   if(UpdateFile3.size())
    + [+ y' W5 B  u. u2 ]
  382.   {
    & p4 s$ T. ~; c3 i9 |; f
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); Q. y+ w3 C* _/ D' _2 K
  384.     {
    # A" O4 A+ h: k2 K% z
  385.       file2=(LPUPDATEFILE)(*i).second;& D% k7 F+ i+ s8 S" ]. d
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : v  d* _, ], g
  387.       {  }' O+ }# h8 \) Q" O/ f4 j- q/ p" O
  388.         file1=(LPUPDATEFILE)(*p).second;
      a* v4 P1 C: {. \; u
  389.         file1->vers=file2->vers;
    + s4 G* G: ^9 J! V4 H
  390.       }
    " B+ s4 ~2 j1 s& N% ~
  391.       else( V( b# O: B' N: h+ k, X$ J
  392.       {8 M' W# Y4 I9 i) X
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : A$ o6 s( D4 _
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( h7 n* `2 N- M: x# F
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ' a) H+ i9 F9 ~$ u- @- O; D
  396.       }
    7 d! Q  q% s7 F$ M' o% a
  397.     }
    5 }# z7 e: {% R
  398.   }. |0 D1 H( G5 |3 H
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . i$ }- g" z# ~, K  s, y
  400.   {
    , W! l6 }9 T$ G  Y0 U* j
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- K- M8 B% s, P+ y
  402.     {
    % g  a- r, m; U; o2 T
  403.       file2=(LPUPDATEFILE)(*i).second;0 y) z# r& ]" r: m: j5 ^
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 G  Y! L8 t8 L( G6 f
  405.       {
      `1 f, t' B6 c1 z
  406.         file1=(LPUPDATEFILE)(*p).second;
    4 n$ s. r1 r( r3 n! \0 T
  407.         if(file1->vers!=file2->vers)% {  f$ g# V* j! J# O
  408.         {* l4 U; U0 r( e% q$ z) i9 H
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) c. g8 J; O- r7 F. S7 F
  410.           c++;- j, c) p, C( y6 C6 g
  411.         }
    , Y9 J, e" @* M0 t1 B# r& h) x3 z( {! D
  412.       }0 \4 ~7 ~& g! Q) r
  413.       else
    0 ]7 t8 c# r; c7 T
  414.       {2 j/ O- o& B* a. n# p7 g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 P; Y, {/ E8 V& ~3 i4 c
  416.         c++;* ]+ Y$ l: ]( E' t# O( ~
  417.       }( E+ d5 c2 U% u& n4 W5 _& q
  418.     }
    3 q' @) l& H* `# m" ?
  419.   }
    ! L$ x6 L  ?4 n& C1 v
  420.   unlink(".\\DownLoad\\update.txt");& v7 o2 v* ~1 W, ]4 a* s
  421.   if(UpdateLocal.size()) return TRUE;
    : D; ^" A- a) W
  422.   else                   return FALSE;
    , _! a( T2 g/ X* P+ w. c
  423. }  i) I& z0 C) ?4 A! U
  424. , B. E+ T# ~$ v; i% k  [
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    9 A2 m  j' l+ G1 h! r
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"9 U0 h( \4 [# x8 T9 m% k/ ^6 a- \0 I
  427. ( V" ?5 v! V& s! U7 {  B. ~

  428. 2 L+ H  @  |& A  S  r* m) ]* C4 g

  429. ' I# Z# \+ ?- i- g
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)2 x; ~' H( b- w
  431. {: d) B! I8 Z" P' n7 ?% R! g
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
      B/ V, V7 N/ }& O( M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 e, ~, ^5 z& H5 M7 ~0 K7 J$ V
  434.   {2 s6 k0 ^& B) H7 o8 E/ N# x2 d
  435.     char szLanguage[50];
    ( M- H4 F2 t" D9 r9 l" \) V/ c
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 K3 b4 L, ^& S7 l. b: O- J
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ U7 B4 k& e0 _3 D8 w
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 U) @- C8 f" K" @
  439.     else                                   m_iLanguage=ENGLISH;- K9 G& f6 v! \6 m; ~9 M+ g  f
  440.     char szRegister[100];
    ; [0 W/ A2 y- H
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 G" b1 e6 q/ r; b/ v0 X
  442.     strRegsName=szRegister;
    8 V; i  V) U, ^( m9 Z! l" W$ w
  443.     char szPatchURL[100];6 I0 u" v$ [# T' R9 M9 R
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * O; H& f4 A# P& [: |1 o2 T
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( N& s: [  h+ x; B  W
  446.   }' x/ p+ I% }5 f; z
  447.   else6 V& L: ^+ Y: f0 L+ S! v
  448.   {
    $ n3 B9 t0 p% U' X
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# V9 z% G! [: u
  450.     strRegsName=DEFAULT_REG_URL;0 B. p( u  I0 V& E% {6 k) g
  451.   }
    / Q9 s$ n' W2 u& j* B
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 z/ w& G: ?1 g, F2 `
  453.   {
    : Y5 n9 [9 \4 g. O
  454.     char szIP[50];- h$ \9 P6 s$ Q! M
  455.     char szDIR[300];
    1 C. U* }' d1 T
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    . y) H* |& z1 A: C
  457.     {
    9 P, U  z% E/ \) [* `
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");+ v6 M6 c" w' q( p$ E3 _0 q# ]8 f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");1 }! k9 r  P- ^" ?4 j' k3 b! E
  460.       strHostName=szIP;
    7 G/ [9 ?! O+ e# ]
  461.       strHostPath.Format("/%s",szDIR);( v) {/ P7 y! x0 O5 s; M4 F1 _
  462.     }8 E; U% S. t$ v7 E" z
  463.     else
    5 D! `* ]( n3 X8 U
  464.     {/ R# g# O, u; T- X7 r" f# ^& c, }/ H
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& t& x: M) O0 E- r, D! N8 w( B5 ?9 M
  466.       {  O+ W# ~0 b8 v" U! \
  467.         char szLanguage[50];
    % f2 b2 Y/ z3 I- Q. B
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 e5 k0 i2 y) \
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . d, v! i) C5 {/ s2 r
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 S, e+ H+ w1 ^. i
  471.         else                                   m_iLanguage=ENGLISH;; x& }) Q3 l  l  B9 Q" @
  472.         char szRegister[100];
    2 t9 ?  l  O$ ~- l; E( A" H8 ~" |
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 @8 t, t" {$ j: o; }" S
  474.         strRegsName=szRegister;$ Y/ s/ J( y+ x& h, ~. o
  475.         char szPatchURL[100];
    & s+ H) L: G, F% f
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: G. r# w3 N2 ]1 u/ ]
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 Y7 X+ e1 C5 I1 Q6 R1 ?2 N
  478.       }" f9 g+ u% ?7 q5 B9 _
  479.       else+ O2 R/ o/ H& K) d& ~
  480.       {
    4 o0 p" V* J. B- C+ C4 O
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , d' N; _: M$ {+ ^; q( S% a" }7 {: _
  482.         strRegsName=DEFAULT_REG_URL;
    ! g2 D3 h1 v1 P' `2 t6 U
  483.       }
    ; v2 O1 W- D; |  ~# x
  484.     }
    0 c7 g4 m% Q4 b& W" L
  485.   }  }+ T6 u) Y7 ^
  486.   return true;
    * X3 A) s# z; F7 T
  487. }# J4 W, Z2 ~! Y) `0 R# r
  488. 2 m/ f, X8 c3 X4 ^: {: ?
  489. #include ".\ZLib\unzip.h": q3 Y7 {. H, q4 L. b6 J% H# P
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);" }( `1 R! v/ s0 v! Q; d
  491. /////////////////////////////////////////////////////////////////////////////* e- U; `  v- t# s+ v# u3 m
  492. // CRevAppApp initialization+ O# |; O1 S+ s2 L" S( a
  493. 0 n# Z" M: ?+ m, [& @
  494. BOOL CRevAppApp::InitInstance()
    - u2 k) L/ c, k' M5 N0 I0 o
  495. {
    + C! x0 z6 }: S  d3 R% R
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];* p8 F! ?" c# K3 u  O+ ]8 E
  497. 4 ?% f$ ~% T2 B1 c, \
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);& ^  @' T; A+ `  l7 }
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    $ D0 o) y" i/ v7 s4 g6 ?, A3 \* F& q& E
  500.   {
    2 l) k; U8 T: \3 a; H' Z6 s: z, E
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");1 ^; P+ j; _  ^( ]+ I
  502.     GetPathFromFullPath(szPathTarget,szPathSource);! g# t  F9 T$ v+ p$ }
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    6 H# V" n7 Q% Q) {+ t: G; T4 A
  504.     {( P+ Y3 ^: R; f3 I3 j, `, C
  505.       strcpy(szPath,szPathTarget);
    : j( O8 D8 x# t
  506.       SetCurrentDirectory(szPath);
    * x# x0 X: W# \" r
  507.     }
    ) z% i* ^5 g+ |& c8 z; P1 L
  508.   }
    % ]! L0 ~: k$ O8 o
  509. #ifdef _DEBUG
    1 Z+ B' v# d: ?  A) Y1 e! t
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 J$ U2 Y/ t* N" `
  511. #else& |; }& v9 e" Z' I
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ `& d' L( L7 t8 o% }, M
  513. #endif6 C) G4 b9 r. q$ r* }" N
  514.   {0 M" m( v9 N, m' A: R5 t, C/ S
  515.     char tempFileName[MAX_PATH];8 N6 {$ W' y- W* U5 C# v3 O+ ^9 o% L- H
  516.     strcpy(tempFileName,szPathSource);
      z& T- V1 u$ q! y, [, o' P
  517.     tempFileName[strlen(szPathSource)-12]=0;& P' e! s" @1 k5 ?, t* R+ G" Z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");* d7 N4 N) V4 w: U
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);2 h8 H/ B" s, ^1 B
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    0 a2 Z) s4 S  b) _% H4 ~+ w
  521.     return TRUE;
    & U+ c6 {; {% V5 a( Q9 _/ q7 v
  522.   }) Y4 v5 l+ A7 x2 t
  523.   // Nuke 0118: Delete run.exe* M2 j: B8 e+ ~7 w% ~
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );+ ]8 q0 X, u( s2 k; t$ v; [
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    6 c4 z: B6 j2 g$ o, N3 t
  526.   if(!ReadCfgFile("Config.ini"))% `$ `" B6 S/ F0 |0 }+ W
  527.   {; e( C& k, x9 K" p2 |7 k; @
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    - d, J! D3 p# A" ^2 L! T
  529.     return TRUE;; ]- S3 M+ C2 B5 ~
  530.   }
    9 j3 m; w. r; r( t
  531.   HANDLE mutex;
    : Y) m( O, x2 ~4 M# z" Q" h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 p9 K6 w: w5 V- p* ]
  533.   {
    . d% S2 z  V+ _6 o. X2 s/ ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 U( W6 s) V* ]  ]
  535.     {5 d8 W( K# s7 b. M# B0 P$ x/ ]8 j) O
  536.       CloseHandle(mutex);
    1 r8 b3 F7 b/ G4 R( }1 Z) @
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    / N/ `# r: t2 i  _0 |: W
  538.       return TRUE;
    8 c! I( x& x  t6 @, {& z6 \# j
  539.     }# T4 A9 u. f1 y* v* F
  540.   }  , O6 q, N3 L6 |6 _5 }; w4 V2 c0 r8 Z
  541.   CloseHandle(mutex);
    % m. M: C% q9 F2 P# D" @
  542. 7 ^, A; i: w2 z/ C0 j
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);3 m- s# U, u* C1 b: n& o
  544. 5 p1 Y- r9 U, h, |
  545.         AfxEnableControlContainer();
    1 R3 `& t. [8 J/ d
  546. ) G% }1 D$ \& T# b
  547.   bCanUpdate=FALSE;7 u) B/ x/ [2 {- J  B, V* e
  548.   dwStartUpSteps=1;
    & t- b- H/ c: b' t, J5 U! k: R
  549.   dwProgramState=AP_NOTHING;
    6 j! ]8 J$ g$ Q/ e' A: H

  550. 4 _/ K8 P: D- Z# j2 M9 n
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);3 V9 J- ~  b" I/ i# u

  552. , a3 p6 D% P) e* I' F/ p
  553.         // Standard initialization
    + j3 ~3 F' c7 `/ ~8 w0 U  p9 B. E
  554.         // If you are not using these features and wish to reduce the size
    9 g* |: w9 n+ V$ C% v" J( j4 W0 ~
  555.         //  of your final executable, you should remove from the following) n3 N8 a5 ~$ ?% b) W8 ?# s0 X( U
  556.         //  the specific initialization routines you do not need.. w# |- A9 v4 V- Q. l

  557. * W, K! S8 {' m4 C) ~6 Y, @/ U
  558. #ifdef _AFXDLL
    , t, A- r6 p  m! {3 x, ~
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ! C4 y7 Y9 Q- d6 M' l9 y8 C! C
  560. #else6 y+ O6 ]' z8 r+ k& U
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    5 m5 j! s* m- ^# G$ M, \; \; Q* o
  562. #endif+ s$ V& o8 W1 G
  563. : F6 h4 b0 {" x3 v5 p9 f
  564.   dlg=new CRevAppDlg;
    " z2 ~  O/ P7 w& k0 \/ j, m: v4 }
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    - O1 l" N3 M5 y8 X( E1 ?! d
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    % W; M* ?; N+ t8 P* E4 F  c
  567.   m_pMainWnd=dlg;8 Z5 c; B" R, t* a; ~. K+ v; J" w4 s
  568. ! @" p4 ^5 B% u- n* W; m% x
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    3 u, D: I# |! u5 A# h! W
  570. 6 e. J% s8 w' T: t! r! e5 m
  571. //  GdiplusStartupInput gdiplusStartupInput;" p. @! U: p& D# v
  572. //  ULONG_PTR gdiplusToken;
    , |+ C9 i; b( l: Q. h7 X# t8 b& b& H$ B
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);0 a$ s, V( {( P) p" Y9 e, v1 \: ^' O* z

  574. # f) G0 R9 }5 Z: j. z+ O
  575. //        CRevAppDlg dlg;: |" n6 Y9 L) l* e( N
  576. //        int nResponse = dlg.DoModal();
    & K  U1 O7 N# k
  577. //        if (nResponse == IDOK)
    ) R/ }# M; F, k9 o/ ?$ G
  578. //        {# C, i5 r) w7 I# l
  579. //                // TODO: Place code here to handle when the dialog is, q8 s( \) n2 l- G& `6 `4 C) h! Y2 j
  580. //                //  dismissed with OK
    ( y( J/ R" f5 i6 ^: S/ U
  581. //        }7 Q+ v9 d) t9 G, S) u" j
  582. //        else if (nResponse == IDCANCEL)* T% A9 t$ E) H( _# z
  583. //        {. ?+ W8 z7 P3 L
  584. //                // TODO: Place code here to handle when the dialog is
    0 w$ l" e& x$ o6 x4 T; P# {
  585. //                //  dismissed with Cancel* V; p+ d, f! k$ v2 n, w
  586. //        }
    ' d0 k& B/ t+ R  P: y
  587. 9 H  L7 j; h" z9 f& K$ r/ ~
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    + i2 ?+ K3 D. k  h! [: j
  589.         //  application, rather than start the application's message pump.
    3 J9 l! D7 B2 f" H
  590.         return TRUE;) l) h9 y" J; |
  591. }
    % y& o2 I6 [& C: z

  592. + n4 X# @' [4 ~! b+ g+ R
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    7 j1 k) T, s* R( ~/ D& @
  594. {
    ) k; K3 {. c% v* e* P: m
  595.   int i;
    # [2 ^: ]/ I/ c9 v
  596.   char *szRet;
    & T$ F! e4 `6 m: C
  597. , d) y/ T6 t3 C5 L) E' a
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    : o- f5 S$ r1 @, P6 }
  599.   if(sztoken)
    8 J' J* `" h5 A( b( r
  600.   {1 Z' L/ b. x% Z4 i! {0 ]5 I% T& u
  601.     szRet=&sztoken[itoken];
    ) P: ]. q7 o" _% O9 `/ H5 O7 Z& z9 K
  602.     while(sztoken[itoken])
    8 q7 }; Y: ~! `! K5 S: L: p" Z+ L8 l0 x
  603.     {$ M3 f) \: f4 j/ ?
  604.       for(i=0;i<(int)strlen(token);i++)% [$ ]8 I0 k* Q2 k5 k9 y6 d+ w
  605.       {' r* R5 |* K0 z, X7 l' s
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' o" `/ a+ z1 ]) ?  z
  607.         {" i! _+ x9 _; u" a
  608.           sztoken[itoken++]=0;
    8 a8 J) o8 ]: T+ V8 ?
  609.           sztoken[itoken++]=0;$ j5 N$ Z5 _% D0 z& Y
  610.           return szRet;
    , E( C. y7 e/ N# k# C
  611.         }; D4 s5 g: e6 K% F
  612.       }" J! ^; U, j/ y
  613.       itoken++;- z8 f8 R0 A; W( _* q0 b, m+ s% d
  614.     }; `* Y6 A8 w1 Z) Y, y
  615.   }) {0 k) R% z& H; u- d6 @
  616.   return NULL;
    $ D. v! u' K# l, R0 I. o- ~6 x
  617. }0 O$ A0 s: y& `6 L5 y& |: R1 V$ g6 k

  618. 1 w) Q& m$ V, R
  619. void ProcessProc(long Total,long Current)7 l2 g. p7 R$ i  q: i7 ^
  620. {; }1 V: e  s9 h5 n8 w& ]0 g% ^
  621.         MSG msg;6 ^- y% Q. ?! h
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);3 ~  f9 i/ e+ W+ d* ?  a: G
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ! F+ H; ^- n5 l! W8 N( D" w
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))4 v% E7 i' z. i) @" i, a4 j0 L
  625.         {
    . h& I3 Q* K: a& I# D  ]
  626.                 if(!GetMessage(&msg,NULL,0,0))
    " C  t! g' G1 H
  627.                 {5 ?, i; ]4 a$ ^7 x2 c  P
  628.                         return;) Q3 S  v0 Q, f7 M9 u2 j
  629.                 }5 b. S4 N% g6 `- T2 J
  630.                 TranslateMessage(&msg);
    / P" n; q& s% L: ]& {- o8 C5 `
  631.                 DispatchMessage(&msg);
      q! A# \% k$ \
  632.         }        , `/ Z4 x' m: u1 U
  633. }
    # k# a1 I* B3 y: Z/ {2 F2 u

  634. : Z4 J& y; w" Z
  635. BOOL bFirstChar=TRUE;
    - I2 G% m' B" L5 [4 m

  636. 0 N4 H- E) [2 V# ?5 @9 y) y$ b
  637. BOOL CRevAppApp::OnIdle(LONG lCount)8 y. \3 m2 O4 [$ z4 `8 e: W
  638. {
    ) @% M; P+ Q' j6 M; }
  639.         // TODO: Add your specialized code here and/or call the base class, O6 V3 s. m$ I, y! p9 G" S, l# d
  640.   switch(dwProgramState)/ f8 f8 b8 S/ [3 s
  641.   {
    # ~) ]) \! h$ C% e- g- B  j8 x) s
  642.   case AP_NOTHING:# A. D/ d( ]- c/ ^. n
  643.     switch(dwStartUpSteps)6 [0 S2 D/ V9 n9 o! ~
  644.     {; ^0 i. z4 }' [3 F7 ^  J
  645.     case 1:; a" C' m9 |5 _/ H
  646.       {6 n& A8 s1 E2 d7 `( w6 t( u  w
  647.         int i;
    5 M( G7 T- M( ^. Z
  648.         CDC *pCDC=dlg->GetDC();
    8 D2 I( J* E( |
  649.         HDC hdcwnd=pCDC->m_hDC;
    8 S5 [) [, ]; f: Z, C, M/ l
  650. //        Graphics graphics(hdcwnd);# N! d+ v& a2 V: B6 H% \
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");+ ?& W& A. r9 P
  652. //        INT iWidth=bitmap.GetWidth();
    0 w5 a+ E, @. C0 P- [: i
  653. //        INT iHeight=bitmap.GetHeight();3 o, H9 }3 |6 S- O
  654. //        Color color,colorTemp;$ c! r; k; u" Y1 D  ]% C
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & j; S, Q# r% s, W$ S# {1 a1 U
  656. //        {; d6 Z! w9 i+ t+ `
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ! Z: D* k% H" w0 R6 b, v
  658. //          {. d& \1 X2 t& m% |
  659. //            bitmap.GetPixel(iColumn,iRow,&color);5 P$ H: M. b9 J
  660. //            colorTemp.SetValue(color.MakeARGB(
    6 x/ {* j7 Z6 z: R9 R- A
  661. //              (BYTE)(255*iColumn/iWidth),
    0 H9 K1 P% w- I" v# R6 n  k
  662. //              color.GetRed(),
    8 g4 m/ B& I$ W7 |  ?/ a
  663. //              color.GetGreen(),
    ( Y* t. C+ C6 }$ o, Y* t4 b2 I( y
  664. //              color.GetBlue()));8 ]! ?$ L9 z9 |
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    % \9 j+ |0 v/ H! E) U
  666. //          }- o5 d0 E* z: x- I  X3 ?
  667. //        }6 T7 l- V$ C9 B: B
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ; |0 z, s2 p0 t$ t( V' }- t) K2 h
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: o, T8 z0 O( {- G8 h* I7 n5 E
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    % X8 z3 [" a- B/ C5 u' P
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / {. R4 v# C+ ?9 Q
  672.         for(i=0;i<240;i+=8)
    , ?1 B1 D: F9 _) |
  673.         {, g8 Q7 Z8 R# g) \5 i$ |% v
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) [* g" i# U2 Q* K3 ]2 Q8 g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 o! f' [' O; ?8 B6 O
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 f: [0 t( J1 R0 C- C
  677.           Sleep(33);% U1 N- X2 o( K7 c0 J# K
  678.         }% [3 t4 @8 T5 P- ]+ B9 L1 e! _, w
  679.         Sleep(1000);
    ( M! Z+ F! p* d! |+ U0 U
  680.         for(i=240;i>0;i-=8)
    1 H  q- Z" ]4 g9 C) g) M7 i' u
  681.         {
    0 e8 y" z6 E+ Z9 e1 |
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 I3 W5 ~3 {- E
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  L. L0 O8 M0 g, s! Z6 W- x, }
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 Y  X+ @; A9 `) i
  685.           Sleep(33);: M0 N. I6 M! O1 q; j6 k6 D2 d$ p
  686.         }
    / O. I1 ~& q/ u# C6 h4 P7 k
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    * R8 x! r5 I( [% N6 ?
  688.         dlg->ReleaseDC(pCDC);
    # F0 o0 ^- j+ o7 y9 }. O* X" V: ^
  689.         DeleteDC(hdctar);4 x. d4 t2 \( W  d+ t
  690.         DeleteDC(hdcsrc);
    : }8 I/ F7 Y5 Y; I( f8 |
  691.         DeleteDC(hdcorg);" O' ^4 ^/ Q8 h
  692.       }
    1 s' p2 \! v: H: n2 |4 d' P7 u
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    7 w3 e# E8 B: t, h1 q' o) _
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ; H& ?5 L$ j) a7 P; X# r, I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    5 I8 j% E# c6 Y9 E/ {5 l. y0 t8 M
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ! p6 r; e( w) c( g" X$ A1 u
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 I6 E/ {$ c% o
  698.       if(!Dn.Connected())
    ! f  h: @5 D1 r- D% g& Y4 o7 w: y
  699.       {' b( v' q. `: Y# E' Q
  700.         dwTotalFiles=1;, L2 l+ ]8 i) O4 c) h
  701.         dwDownLoaded=0;3 H5 E; D7 ?3 U
  702.         bSilentStep=TRUE;/ G+ v# R, l, T0 a
  703.         bCompressed=FALSE;
    ( i9 F, L& H& H: i: O8 _, }; K
  704.         strExtLocal.Empty();7 y+ o3 B9 {0 C' h
  705.         strFullName="readme.txt";
    : J3 j; [- m4 `' D; Q$ U2 D
  706.         dwProgramState=AP_CONNECT;
    ; G  P5 N5 |. k; {
  707.       }  D2 h. t3 i6 Y. i. ?
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();2 q7 x9 T% V5 X
  709.       dwStartUpSteps=2;
      v$ Y) R3 _2 s* o) d* O# s
  710.       break;
    9 m* a+ }. D% p  x1 R$ R
  711.     case 2:0 i) z) a: l) `3 v( b
  712.       {( r5 g) Q8 M0 g- s6 }& t
  713.         int iEOF;
    $ s1 M# i: Q( d8 s
  714.         FILE *fp;
    + M: V/ {) v5 q6 W* A
  715.         char szString[512];# [* c: Q( b; A% y; q
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    9 z1 H% X+ ~8 U% a  w) G
  717.         if(fp)
    ! x) [& \( y  d5 z. r- Z7 D
  718.         {1 K% B# c) ?. i, \% Q
  719.           do
    $ B$ v- g1 b( [+ A& v  R
  720.           {
    . g5 N2 d* z  i2 `5 A* F
  721.             iEOF=fscanf(fp,"%s",szString);
    & c3 t5 N- S* {8 ]& G1 f6 C) [
  722.             if(strlen(szString))9 [, n6 Q5 E  D$ Q0 C3 z
  723.             {& m, n. D6 |  h7 ?
  724.               if(bFirstChar)' E5 @) I6 r, A/ B& J( g% Z$ @5 ^
  725.               {9 Q4 F) W& ^) n$ q$ J6 C+ s1 Y
  726.                 bFirstChar=FALSE;8 R0 @& ?8 \1 B1 N
  727.                 bConnectIsBig5=FALSE;0 ]4 y( n6 W; h+ ?( a& `
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ; c$ ^/ T' Z7 _8 m* l$ T
  729.               }5 L+ c% d; K/ S6 t
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));5 @* ~" F7 ?/ P3 m, z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ( @/ @& X* b3 c1 {1 a5 B
  732.               dlg->m_ListText.AddString(szString);  D2 U0 Z7 x. v: E# s$ D. Y
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% m1 _8 {5 S" ?$ w! l) X; L
  734.               *szString=0;
    3 L6 m: e& v! S- u1 C
  735.             }) m% x4 N) J: Z$ K1 h( |: [
  736.           } while(iEOF!=EOF);
    : g9 d4 O' D4 g* d: _4 s
  737.           fclose(fp);; Y& F9 _4 Q6 M
  738.           unlink(".\\DownLoad\\readme.txt");! E0 D5 b- w( \
  739.           dwStartUpSteps=3;8 S) z+ t. Q% e( \+ ^1 ~
  740.         }
    9 h# z$ g% D. Z3 P- g
  741.       }9 y$ B' N0 A* v8 K7 S) \# v
  742.       break;
    5 G0 H! Z* l9 ]- c0 ^" m
  743.     case 3:8 `/ H0 i2 D7 R1 C! V5 r
  744.       if(!Dn.Connected())% f2 {/ Y" e- ]9 B8 F
  745.       {
    9 F5 ?7 d$ J  I7 L
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  r$ f4 _4 R! W: N7 W6 z% o
  747.         dwTotalFiles=1;
    ( J' a6 m3 V. y* D% F. i
  748.         dwDownLoaded=0;
    8 c7 E& F9 [* U  N
  749.         bSilentStep=TRUE;
    4 k% C1 i- Q4 [
  750.         bCompressed=FALSE;% W$ V8 @3 [5 Q! \4 d0 c3 g; g8 r
  751.         strExtLocal.Empty();6 n7 d  \7 C6 Z$ A: S" U
  752.         strFullName="checkversion.txt";
    2 {3 e* ?) o& V- m3 m
  753.         dwProgramState=AP_CONNECT;7 \& U3 {( u1 O8 \+ n- S. q( F0 x
  754.       }
    ' c8 ~! i1 R6 z( ^1 W
  755.       dwStartUpSteps=4;( {% P& y- z% d" ?
  756.       break;1 L5 T8 U/ j* ~' e' \$ v
  757.     case 4:$ K( K& _7 U. P0 D+ v
  758.       {
    + E$ M3 {1 a% d, o( h
  759.         FILE *fp;
    ; ?# E; S: |/ K0 c# H2 @+ Q
  760.         char szString1[128];3 E! ]7 B# G. i
  761.         char szString2[128];" g4 h4 e; p# F* e
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    + J& r6 M6 n) V# n5 ^: [/ |. ^
  763.         if(fp)
    " t$ F7 W/ h: q' P. d$ d: M
  764.         {
    ' w& K2 I& y  _! E# W  k
  765.           fscanf(fp,"%s",szString1);
    1 M( X5 K, w) V1 _8 Q6 ~; d
  766.           fclose(fp);
    9 S; e+ A) l5 ?/ a
  767.           fCheckVersion=atof(szString1);
    ! a  I" Y1 Z$ M! w/ p
  768.           fp=fopen(".\\checkversion.dat","r");
    2 ~( y( c2 r9 j0 U2 p+ w' R
  769.           if(fp)0 p8 A! U% E# ?
  770.           {
    2 C9 x: g+ Y! |
  771.             fscanf(fp,"%s",szString2);
    0 A! Y2 p' v; f6 Y* \, D
  772.             fclose(fp);0 H+ ^4 ~9 A  M3 u/ i4 }  l0 h# j
  773.             if(atof(szString1)!=atof(szString2))
    6 L; q9 V9 j3 K' g
  774.             {
    0 \- M+ R8 L) P# j: a% e4 a
  775.               if(!Dn.Connected())/ L; O4 G1 ?! L# ^1 J
  776.               {% T% M$ r8 `2 W5 G% r% S6 ]' j
  777.                 bFirstUpdate=TRUE;9 E5 v6 x( K) @9 {& n& S
  778.                 dwTotalFiles=1;. e+ n+ s1 N2 B( }8 d
  779.                 dwDownLoaded=0;3 X) y5 O- X4 D. J
  780.                 bSilentStep=FALSE;
    7 N' W. R. v' ]& L) D) a7 n
  781.                 bCompressed=TRUE;
    1 ^( e8 n. c  }
  782.                 strExtLocal=".\\DownLoad\";
    - O, u5 i3 D- X* P  A2 ^  ~! e& l
  783.                 strFullName="update.txt";
    . F4 F% H" j! Z3 v& h" m
  784.                 dwProgramState=AP_CONNECT;: b0 M" E% i1 y5 v
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , [, s. u, o1 X# l6 }
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- n+ i/ T0 F# C0 o" z& p
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & r: t! N. u! w. ?: p, x

  788. ' K( L5 E% W5 }: c  g5 O
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * F3 x1 ?- ]: \+ H) R* l+ I7 A
  790.                 unlink(".\\DownLoad\\checkversion.txt");, z& r# ~) q  V
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1), k6 O5 r( J- I& j
  792.                 {
    " U! Z6 h- |) K( U
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");" c6 u* \1 k+ F" j+ f
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");% p& @1 E' C' [) G" z! y9 a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");5 H: j6 I$ |0 T% r, H6 M6 ^" X+ I* k
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ l5 Y8 P% K% j/ c2 w/ m; }
  797. ( l! D" I; ?! H4 b* H$ O4 Q/ R
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 f" x$ m* m! O, v& t
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    5 l8 g5 e# b& q$ R+ Y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    / @. ~1 o3 p7 S9 W( {( d; u7 z8 J
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 _% @2 \0 o; b8 Z3 H: C( _# _
  802.                 }- Y0 `! t4 A( w
  803.                 dwStartUpSteps=5;
    . j" \! h( V  B" u& d( y: |
  804.               }
    6 Q, ?9 i& c% x. W3 z3 J
  805.             }
    ! H  e1 r2 i. G! o: t5 N
  806.             else
    - V% U1 P  u6 R" G" n
  807.             {
    - z$ `+ Z6 t3 _4 \  R4 t
  808.               unlink(".\\DownLoad\\checkversion.txt");
    + ^% [( f/ N1 H, |4 u
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    " a, v4 D2 a& R# ^) |3 g
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 W" R: l- F- K/ w3 [* Z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    5 g2 l: U( [$ f! C0 v3 R  K
  812. 5 r/ T, d0 `. q: H7 V; u9 F2 G# R
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" q2 C3 Z% P9 I% b% B4 y8 a# S+ f
  814.               dwStartUpSteps=99;0 B: }/ O; U5 u) B: Q
  815.               bFinishUpdated=TRUE;' }% P$ a8 T* G6 U
  816.               bCanUpdate=TRUE;% y+ d% a6 _2 y" \; Z, T- y
  817.             }/ L  q, ]2 z0 @1 w6 f7 Q
  818.           }
    : F/ F# P6 z# r+ |* }4 {
  819.           else, C( I. k" E  _# }. C: ?0 D
  820.           {3 h8 R6 v9 @% |! ^. W
  821.             if(!Dn.Connected())0 n, @! x, v) ]. Q) n5 E
  822.             {
    , q) K+ g- W3 @, p5 g
  823.               bFirstUpdate=TRUE;
    ( B! U, Y6 H  W
  824.               dwTotalFiles=1;+ z& J2 d9 C6 K/ C- P$ v. @
  825.               dwDownLoaded=0;
    2 h% J- {( h. h3 ~2 X
  826.               bSilentStep=FALSE;
    : N( c: F2 ]" _4 e
  827.               bCompressed=TRUE;
    ( s) v+ u! _$ J6 L8 m0 a
  828.               strExtLocal=".\\DownLoad\";
    : T8 C4 `, ?& ]
  829.               strFullName="update.txt";7 f( e0 {% |% ^) p& D# m! R
  830.               dwProgramState=AP_CONNECT;# n# E- X6 I" ?7 n6 t, z# L
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    0 p2 h1 \7 |1 j2 P& p
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) F3 s  p: J" Z6 q( D
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' f* o; C7 }3 d" @
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 [: l( y, l! F) J  D! n7 D' T
  835.               unlink(".\\DownLoad\\checkversion.txt");, d+ L8 @( a% Q  O3 G5 v$ J
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)6 E9 \- V! u: r7 v0 L7 ?& x3 U. \
  837.               {
    $ R8 _1 T$ }0 }, C$ _( Y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    8 ]3 _  w1 ~* A
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    4 [; s2 p2 r# m' u* ^
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    2 i( b( L6 V8 q- E# R, q% T
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" \* ^) o8 r9 u( ?7 u' [; ^' @
  842.                
    " w. b& {; w1 B. E# ?
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ; g/ t; F8 y! {% g8 I
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 g; M; j6 _( y4 B2 X# o( t6 w* N
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");" p( z; G: U# D
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 [; {9 c. V7 i
  847.               }  [3 j# d' W8 z3 O% `! N" X  M9 c5 v4 T
  848.               dwStartUpSteps=5;
    ' M5 G" M/ ?6 Q5 e
  849.             }- a5 C. X2 A( }
  850.           }- q8 e9 F- A9 _" V" P! O2 o
  851.         }4 }( R, s  M9 d4 S8 U- f; a
  852.         else9 c6 Z3 O, m8 F0 D% P( A
  853.         {$ c8 o; C% s' ^3 N. R
  854.           dwStartUpSteps=3;
    / f7 x% f. |* ?% E& Y! _! b' x! o! K
  855.         }, `) U: T( o' i# S2 \7 P
  856.       }
    . e3 q8 W" B" ?$ H) b3 j
  857.       break;5 e: W5 d6 o$ g: l, v
  858.     case 5:
    3 a% n  C  x: ?7 \2 J/ r
  859.       {. S0 R2 N% s  a" j
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    : \8 |. S4 i/ h+ M$ V) V9 W
  861.         {8 {8 x8 [1 Q" \3 g# u1 j3 l& g  C) c
  862.           int opt_overwrite=1;
    5 s- E* r, ^( M/ N& h
  863.           int opt_do_extract_withoutpath=0;
    1 h9 O5 q! J, o$ O6 f2 B; E$ ^$ E) U; c
  864.           unzFile uf=NULL;
    ' r1 S7 j. s: K* z8 a

  865. * D8 M0 X* w1 N0 n$ a
  866.           uf=unzOpen("Wsa.zip");
    , I: ^, G& l$ t. f$ d2 x
  867.           if(uf)+ y( H$ W) P2 X! `) ~4 `
  868.           {
    & W% ~0 Q& g5 a/ D& ^: l" B7 U' G7 l
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);5 e& R# T3 X2 _8 u7 C% [* w, o0 H
  870.             unzClose(uf);3 A& D# I1 g: H. u% C# j+ N
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");4 J/ H5 c- _4 R+ N; |* A, n6 Y
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    - i8 _% \, Y2 H! h- n
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    2 h  |4 h! U+ ~  {. v
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. D' x& ?! |( `, D% v
  875.           }+ T/ q7 B  N1 n& e
  876.           DeleteFile("Wsa.zip" );
    - I* {1 K3 h+ c1 R
  877.         }
    + T% m8 N, N; }, c' Y
  878. ( t- Y, |7 N$ h2 i% N1 j' f2 `
  879.         if(CheckLocalVersion())+ o; w( w% i! @0 r0 b0 R1 _
  880.         {& _. Z- {! }, I9 o" \
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    0 {9 S; Q  M5 [5 A1 f; w8 [% U0 `" G
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");1 L1 p1 v2 f; I) _
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    * o* u) X6 m" L5 M/ @" X( k# ]
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- h2 f0 Q) b1 Z* V  Y% L1 [
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    . `0 L4 M3 d9 D) ?# I5 }
  886.           dwStartUpSteps=99;5 d3 w9 S( g6 X8 C( I
  887.         }
    9 j$ m- E2 t: m1 ]# `0 Q7 r; H, O; z& W
  888.         else
    - Z0 f) Z1 k) p) N0 X9 {% n0 F* V
  889.         {
    % h* @9 x* ], J4 S/ B. w, p
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      E* I  V) W  P" E. N! y& `( Z) v
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");  O; A9 V9 d. N( @- F
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 W/ l7 N  Q* P1 _; n# J- K2 `

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

評分

參與人數 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客服返回頂部