CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式

* j! x6 p; }" ]- i4 p  I6 S+ S
  1. / RevApp.cpp : Defines the class behaviors for the application.
    + n9 R. j: i) D2 H2 K
  2. //' {% E/ N6 u) d  g1 J
  3. * h' G( z' a6 X" B
  4. #include "stdafx.h"
    ! }! L3 \+ R" y% y2 l
  5. % ?. q# y* j, h. J! V- g
  6. //#define UNICODE
    6 @1 l8 _7 r1 p% `( X* k8 ]9 w
  7. //#include <gdiplus.h>* v+ ^( z! B# K0 ~+ s! T3 T
  8. //using namespace Gdiplus;% }! ?& u: h( O) A& a3 `8 Y0 w  F

  9. ) {: Y4 c0 ]% R) I+ \
  10. #include "RevApp.h"
    2 E1 R0 C9 v+ W# |$ l
  11. #include "RevAppDlg.h"
    9 W/ c7 z4 Q- N8 l, u

  12. ) w  @1 R$ i, X( Y: D7 Y
  13. #pragma warning(disable:4786)
    0 a& }* z+ t; y
  14. #include <map>+ n' F" p6 P7 t; X% k" k
  15. #include <list>
    : ~/ P! Y. a' g; m$ _
  16. #include <direct.h>' c4 c2 G2 [8 t5 \6 p, ?

  17. ( G  h2 P5 k( W9 X! n- D: @8 i5 ?
  18. #ifdef _DEBUG
    , i7 G: K5 p2 ~& ?( j$ M0 o
  19. #define new DEBUG_NEW
    5 Q& E% y+ E0 ~2 R' m; V2 h! l
  20. #undef THIS_FILE
    7 v( [. X/ ?& L" ]  z. w4 F# w  x
  21. static char THIS_FILE[] = __FILE__;
    6 S1 j0 j: d/ w% E. ^# I9 h0 R9 T
  22. #endif! q" {4 Z0 R6 ?8 E
  23. #include "SkinResDef.h"1 c2 {3 [$ y! i7 g2 ?  L
  24. #include "ChangeBG.h"
    % q( b; |# N' E
  25. #include "AFXINET.H"
    1 F: [" S4 v7 t+ C! i8 {
  26. ' g" Y. Q$ x' u9 b* H
  27. #define TRADITIONAL_CHINESE 0# z, v/ `. z) ^" T& c# b- G8 h
  28. #define SIMPLIFY_CHINESE 1
      f7 G1 b- P9 l7 P% r9 z
  29. #define ENGLISH 25 J* s7 t  _# _. f3 o; s* d
  30. int m_iLanguage = ENGLISH;
    - K& d/ J) F8 p5 ]' ?% h
  31. /////////////////////////////////////////////////////////////////////////////
    2 v. Z' y9 Q5 I0 z
  32. // CRevAppApp1 x; `# H: i1 `3 J  i

  33. 4 ?3 T8 [: e1 j5 _) L  u& K
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)7 L% k/ u* }* r2 o: O
  35.         //{{AFX_MSG_MAP(CRevAppApp)& i5 r, q$ b# H2 h8 `7 i
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.' v* J) j  k3 a$ O3 T+ m
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!, K4 d$ r' v" _5 [0 Z; P
  38.         //}}AFX_MSG% q2 n. N5 t; s, h/ R
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)$ D+ _5 g! D  }# l" U( Q
  40. END_MESSAGE_MAP()) K6 h! K1 a1 j: t/ Z/ t% p

  41. 0 ]" j- x4 ]/ k; f0 n2 j+ v: G" W. B
  42. /////////////////////////////////////////////////////////////////////////////( x% O$ a! }! N" S
  43. // CRevAppApp construction
    0 t6 X1 W9 s- _' x

  44. 8 p6 C& Z6 U. n. g6 A4 Z+ }
  45. CRevAppApp::CRevAppApp(), N% L/ _  Y$ F. C
  46. {
    " R) S$ f( @- Z2 @6 u) I
  47.         // TODO: add construction code here,4 M  o, }( |" R/ j+ e" c9 C. C
  48.         // Place all significant initialization in InitInstance
    9 L9 ^# w& I7 B  q0 l) P/ y$ w
  49.   bDisplayIsBig5=FALSE;
    3 F% i! z  j4 m  j+ v- M+ B. j+ \) P
  50.   bRestartUpdater=FALSE;/ J: S% A' y) f; B; ~+ e0 N
  51.   bFinishUpdated=FALSE;. s* i1 x! Q! L! c% W0 k& r
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;7 ?& t3 _! H$ l& v  V
  53.   InitChangeDataBig52GBKS();1 i, u: Y' K+ l1 p4 ?
  54.   InitChangeDataGBKS2Big5();
    6 }, G- N( T1 G  s4 K
  55.         //
    5 g" d/ X& t6 Z' g% `* D  b
  56.         bClickRunExe = FALSE;; {% \5 }: c( B. A. J  r2 K
  57.         //
    5 V4 x. F+ \" G0 f' K: B  \
  58. }
    6 c" Z! o0 u/ N+ f9 z, f
  59. / w5 r/ y/ c% ~
  60. CRevAppApp::~CRevAppApp()
    : n% k7 j% o; _" {6 `4 L, Z) S! W4 @
  61. {4 A. J$ q, U8 V
  62.         // TODO: add construction code here,
    $ l: F+ S9 i6 B  q# Y& z6 @7 A% R
  63.         // Place all significant initialization in InitInstance
    % K( M4 ?' I9 V3 B5 z9 X- z2 \, J: m, T
  64.   EndChangeData();& R  K: o8 z4 X, S
  65. }
    + t" {9 S9 |8 d/ H" V( q
  66. - [2 @$ v1 J: M5 b3 _+ e
  67. /////////////////////////////////////////////////////////////////////////////
    # Y; ~1 @- v! s# D0 M
  68. // The one and only CRevAppApp object2 D) {$ M* r- p8 t

  69. 4 }; E1 ~, T4 b4 Q$ }% m7 C
  70. CRevAppApp theApp;
    0 N; C" L  b+ z$ t
  71. 7 T4 Q% f2 j4 R. _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ! q+ }; i- {" f6 ?  Z3 u
  73. {
      D4 o+ s6 O  T6 P) z, G
  74.   int iEOF=0;
      u# K- ^* _. F/ E$ n( P5 ?
  75.   char szTempName[MAX_PATH];; e6 p, ^! W. |  Z1 R  ^: u, U
  76.   *szFileName=0;
    & t, K$ W$ D% k
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( V3 T5 I  ?9 i, b. D: a  n
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    5 ]! N# g3 J" s9 O4 g% ]
  79.   {
    1 N4 t/ z( J& M
  80.     strcpy(szFileName,&szTempName[1]);
    ! d! T) A6 H4 m0 @( o
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)! c) q. k! c; i
  82.     {
    ) Y! z2 a+ _( D7 \6 _  S1 F& A
  83.       iEOF=fscanf(fp,"%s",szTempName);9 n  L( J* w) I: Y; p+ X
  84.       strcat(szFileName," ");
    3 @) P" r; r  C- G( i
  85.       strcat(szFileName,szTempName);% o+ e+ t* j3 T0 G5 d# S7 Q
  86.     }
    - o2 z/ P$ o8 Q; y& ]8 N' s$ f
  87.     if(strlen(szFileName)>=1); @7 R9 i( G5 b' V) o' X9 @+ J
  88.     {
    0 u" M0 J! f# j1 y7 G
  89.       szFileName[strlen(szFileName)-1]=0;- g4 }& p1 ]; @8 R4 D: J
  90.     }: K2 N+ _: f+ C. n! \1 d
  91.   }
    ; A/ Q* V5 |4 H# O! f4 r2 F
  92.   return szFileName;. V$ Y5 r4 f3 }" G* a& H6 A" l4 R
  93. }4 a: u  M+ r  S0 r6 e1 N2 C

  94. ( b$ J! O: X. K& p1 k7 L" m
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    4 i! H  Q* C3 M  a% e
  96. {. f, v' i; Q" D9 ~& U
  97.   FILE *fp;
    ( Y" l9 c( q5 r  J! |" A2 v. h2 f, S
  98.   char *key=NULL;
    9 w( p$ t) P! A- {. \. M( T
  99.   char version[MAX_PATH];
    8 u- D& r+ ?5 R$ O& B
  100.   LPUPDATEFILE file,olds;
    , n3 D. V& {4 d0 H
  101.   std::map<CString,LPUPDATEFILE>::iterator p;! a* ~( ~8 X/ Q  A
  102. 2 k5 c5 t: y) }6 d; |( X6 g
  103.   UpdateList.clear();
    / J7 Z" m' @1 d: a& D
  104.   UpdateFile.clear();4 U, S' l9 x5 W% U, T/ V
  105.   if(GetFileAttributes(filename)==-1) return false;# {" ?0 q' |$ x/ Q
  106.   if(!(fp=fopen(filename,"r"))) return false;0 V0 Q% h: {$ T3 _
  107.   fscanf(fp,"%s",version);
    6 Z) {3 k. z8 ?* g' H1 ~
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }4 q6 ?, t: Q% ~+ i; W0 u" q; r2 A
  109.   while(fscanf(fp,"%s",version)!=EOF)  e9 n/ N7 E% ?) b6 c+ H
  110.   {
    0 l( W, w9 V6 T2 C& m) |0 A: w1 h
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ x4 K7 N" x- E# G+ s8 Q
  112.     fscanf(fp,"%s",file->path);; q0 v3 q8 }, x% ~6 }- P
  113.     ReadFileNames(fp,file->file);
    % ?. S% N0 t$ {* Q- s
  114.     strcpy(file->full,".");* |) C5 M8 l3 a
  115.     strcat(file->full,file->path);
    * s: j/ R7 |/ }* I
  116.     strcat(file->full,file->file);; B6 W' a* m$ i, L" C
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& |' G. S) {' e
  118.     {8 O" y6 f2 E5 X9 o  i- B: L" l
  119.       file->vers=(float)atof(version);
    - L1 B& h, E* w7 Z2 a/ Z8 W0 w
  120.       UpdateList.push_back(file->full);
    , U$ z- w  l8 T; w% Z  M
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));- u4 f( E; X6 l! d" v# i5 n
  122.     }5 H4 Z; T2 H: b  `  n
  123.     else9 V4 c5 v( e: x# F4 F0 d7 }5 }
  124.     {
    8 D" ^4 I% v9 V) B9 ]
  125.       olds=(*p).second;
    3 U; r% ]0 i5 Z
  126.       if(olds->vers<(float)atof(version))
    2 f1 E1 b) r0 H+ {8 I2 V
  127.       {
    & r: y9 }3 U$ _
  128.         olds->vers=(float)atof(version);
    # M& o( _0 w8 T) ]) L0 D' `
  129.       }7 k0 m# P& s# V0 q! b, u" q
  130.       free(file);
    7 Y# B) @: D! T/ e9 y( ]9 F1 h
  131.     }
    " z! b' S4 c% U/ \7 N  \
  132.   }
    4 {( r$ G8 ~+ @3 G; e) W4 ?
  133.   fclose(fp);
    ) g& _' ?5 Q) O! R/ R
  134.   return true;! f& E* ^" x7 w+ Z5 ^; z
  135. }
    * f  t5 ^6 J' u$ b& e
  136. / d% t# ?; u2 j, k/ W5 C
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    . @5 }' Q) F, o
  138. {; \4 B. Y$ B8 v- g, l3 m8 i) r3 R/ E
  139.   TCHAR  szFull[MAX_PATH];; b4 M4 j& S9 h$ b  D1 P+ ?1 L8 K
  140.   TCHAR *token,*inter;: X7 H' F" A5 l
  141.   *szPath=0;1 z+ v7 y4 r# t: J9 c  Z( w
  142.   strcpy(szFull,szFullPath);1 s- T6 v' Q* @4 V. A
  143.   token=strtok(szFull,"\\/");
    - a2 {% M  g5 `; V
  144.   inter=token;
    1 Z. q  n( ~% b) s
  145.   while(token=strtok(NULL,"\\/"))4 x* u3 \: e" S
  146.   {) W, Q/ l+ V' P+ h! M7 S6 V, M8 {
  147.     strcat(szPath,inter);/ L2 v# q  z' I# z% ?/ H
  148.     strcat(szPath,"\");
    ; _# q% z5 ^5 j
  149.     inter=token;
    ) O' {! O1 ^3 k. {5 a) m* C8 a
  150.   }' k9 L8 l& R+ _$ U
  151.   return strlen(szPath);
    + D& {# d/ S% L1 g" S, E
  152. }
    7 ^( z) j6 x' P3 k9 C0 N
  153. . W( ]# R; d& ~/ a# L
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)" ]2 q, r% }5 Y, S) Q4 b
  155. {
    - r$ d( N( i; d
  156.   DWORD attrib=GetFileAttributes(Target);
    $ s! u/ S  x, q" T
  157.   if(attrib!=-1)$ P3 {$ _( d" }, f
  158.   {2 v8 A- N* a5 `* D- q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))) j4 _. @+ [( c
  160.     {' J% b* o6 t- p, i7 K7 m, F
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);3 U8 C/ _; w. V8 J2 j# o( d9 p6 s
  162.       SetFileAttributes(Target,attrib);
    ' j  Z) K+ j  n8 m  Z' U. e
  163.     }8 ?( k* k0 ]0 L4 m2 Q
  164.   }
    2 \$ V; O9 S) D$ P: b; }' ?5 ~
  165.   CopyFile(Source,Target,Erase);
    7 T; F4 [/ P, [: y" x- |
  166. }
    + _' e/ a" w+ o) p
  167. 1 L2 Q# W+ o5 e( u  j- y: L9 d
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    8 Q* l6 J1 U1 B0 O% k7 z7 x! n; @- f
  169. {
    : _/ r" Z0 e$ F& j
  170.      FILE *fp;
    ' N$ W) p0 w( I; ^5 M
  171.      char  szBuffer[8192];
    % _3 I' [* N; {
  172.   va_list  argptr;' I( r  A8 S( R3 C" P& P
  173. / D- h& G9 M3 A; D
  174.         va_start(argptr,message);
    ' P6 [0 _, J# s5 j# ?; z
  175.         vsprintf(szBuffer,message,argptr);
    & F* R$ _1 r/ o$ I
  176.         va_end(argptr);5 A# i; l0 H7 b( A! m1 P: Z
  177.   fp=fopen(FileName,"a");5 f0 i6 P/ v1 t( k2 ~5 i8 m
  178.   if(fp)
    ; o/ t" o) }' X
  179.   {' y' x$ H, f9 U0 j/ `; c) `
  180.     fprintf(fp,szBuffer);, _7 t; y+ c: b+ B7 n! i8 ?) U
  181.     fclose(fp);# F) b+ Y- J, S+ t
  182.           _flushall();/ O) S$ a; x* v, x/ u
  183.   }9 ~8 B2 R* k, L/ G/ r' v
  184. }& p1 a* o( o! B" C0 L- `
  185. % S  M) O/ \7 C, y- z0 d
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    1 j$ x3 G* n# p- G) y6 o8 J
  187. {' y" [2 D5 q, e# k% c* R  t- j) j" o, A
  188.      FILE *fp;' f+ x! J: K; j4 J- m
  189.     DWORD  attrib;9 \6 Z. P+ H5 r3 p
  190.   attrib=GetFileAttributes(FileName);/ v% N" [5 Z* A/ M
  191.   if(attrib!=-1)
    - O& O+ ?3 ~" j1 ~& E! y9 [& r! N. Y
  192.   {
    ! z5 B4 Z, A2 y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);  F% A" s' p" y" l- r
  194.     if(!SetFileAttributes(FileName,attrib))8 q. ?  @7 r9 v4 a0 G* u) ~3 b
  195.     {
    ' n& `3 _. f* r, Y6 R
  196.       return FALSE;
    & _) ~; ^' m4 n
  197.     }
    9 N; h# x8 o( [% v+ o
  198.   }/ z% z% B0 N3 L- W% s! l/ _
  199.   fp=fopen(FileName,"wb");+ g  J. H7 Z6 A% a9 |# m' U
  200.   if(fp)
    " P( w* S1 a# L; `
  201.   {; p; e" B7 Q% _
  202.     fclose(fp);2 w$ \+ ~' ]5 C  G
  203.   }" J& K+ \8 T# q" r2 b
  204.   return TRUE;
    % u0 |6 w4 g. V. ]1 e9 w' p1 c' Z3 J
  205. }
    : b" @0 N  E6 u# s( ?; e
  206. 0 N# I5 _& \7 M" _9 Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)2 h" j# A; H- s
  208. {" A' @5 P, n) O( _  l4 P# ^9 s) ?
  209.   char filename[MAX_PATH];( P  V! I6 w# p8 a
  210.   LPUPDATEFILE file,olds;& ]* X5 g3 J- u$ Z: k" a& b% X# q7 i
  211.   std::map<int,CString>::iterator i;: v1 U0 B/ V( x* }8 B- Y) s" h
  212.   std::map<CString,LPUPDATEFILE>::iterator p;/ Z' ]( Q0 Y" W1 a
  213.   std::list<CString>::iterator l;9 b; y: Z% X) c# G: w
  214. 2 d4 M) j  K5 F: d8 U% s/ n
  215.   if(bFirstUpdate)7 P0 E% n2 t: Q) a" n7 ~
  216.   {
    5 ^2 p. s+ U' r
  217.     dwCurrFile=0;
    5 B+ W0 F1 r0 p5 ?
  218.     bFirstUpdate=FALSE;. M- k7 e" |7 J6 Q4 ?
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 B3 V1 Q8 l6 M! E, ^2 |
  220.     {
    , f1 s) Z; m& R, Q5 H
  221.       dwTotalFiles=UpdateLocal.size();. w$ y/ L7 ^; o6 a
  222.       dwDownLoaded=0;
    , ~- h) T6 y" _' J) A0 r7 B
  223.       bSilentStep=FALSE;) v: h5 ~8 d/ z2 J0 N% q$ V+ t
  224.       bCompressed=TRUE;
    3 H2 Z! C2 h8 @! ^" S
  225.       strExtLocal.Empty();) w* K* M% Y$ v( f, V6 D8 l
  226.       strFullName=(*i).second;1 J) [1 ]% F( C0 L- s5 G4 v
  227.       dwProgramState=AP_CONNECT;
    $ [# ^' j$ J( B
  228.       return TRUE;8 e) T. a( i+ W) b. Q
  229.     }2 _- o6 F2 t& ?+ }$ l# w( D( o
  230.   }
    + D+ k1 ]/ P: T
  231.   else if(bRestartUpdater==FALSE)
    2 X3 `0 ^3 U- }) r* X
  232.   {
    , l' Y" a$ f' c+ C; t2 z7 r& ?
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    8 T; f+ @) b( _9 A4 s; t
  234.     {$ t* h' j0 Z  \, B! ^6 @  ^
  235.       file=(*p).second;2 Q7 B' G% t' f3 o
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())3 k4 T/ ]6 ]$ b! M
  237.       {7 s% @; W& ]* X: L3 }) ~
  238.         olds=(*p).second;
    + v6 _; \7 r' L; d: E( O. k" g
  239.         olds->vers=file->vers;$ q1 v1 A; e7 H" o" y4 D/ Y4 k) D- E4 L
  240.       }
    ) X. [. P& G: v  m
  241.       else
    " w' N/ a1 w6 J# L& b) W' U& f
  242.       {1 ?+ E1 L5 F# Y* f4 }8 G# t. W
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) t) T2 ?( C' d- j: g& [6 i! ~3 l
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* W# S4 I3 x9 U' c, d. }
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 H; i# h$ p9 L: X- p9 h8 x
  246.       }- O$ Q! R8 ^4 B: z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");* J8 x4 @* m# [  l) l8 o
  248.       sprintf(filename,"(%s)",file->file);
    6 x8 s( I; D$ J# a. V4 j  M
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % z3 q, B7 z6 e  S9 C5 |- \
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    & J$ e+ a+ P4 @1 K% \- p
  251.     }
    7 [/ F+ x7 @7 T7 W: v- q
  252.     dwCurrFile++;
    1 i( c' n7 r5 [/ I+ B/ P+ M# D
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ H  N" d- W! _7 y1 G% @
  254.     {. J) B! h9 `3 J) r
  255.       bSilentStep=FALSE;
    5 m! G- U( g0 c$ j
  256.       bCompressed=TRUE;
    3 r+ M- k) `0 W- t: R1 ~
  257.       strExtLocal.Empty();, C1 ]7 z7 l, {+ p: M" [  c
  258.       strFullName=(*i).second;
    4 Y8 Z2 T3 V) _: }- E! i1 i; ^# l7 f
  259.       dwProgramState=AP_CONNECT;6 e: ]( x. E1 r) g. H1 Y
  260.       return TRUE;, w/ I6 X, R* Z5 j; V8 A6 O
  261.     }
    9 S+ M* H# p" h2 h2 N2 w
  262.     if(!bRestartUpdater)
    : w2 v/ M: a6 |- \: s8 g" Z, f
  263.     {# ^" Z( n5 p9 O+ e) T
  264.       int iCurrSize,iFileSize;- Z* ~( r' h. x' T( C) [, g  `* ?( Z
  265.       iCurrSize=0;
    : M2 U3 i" L0 s. H
  266.       iFileSize=UpdateList2.size();$ ~8 l; O" p7 U7 z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");6 ~) C6 c: Q/ ~  l$ t
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    1 M- k7 m, y& q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");# v9 M4 X& P* ?
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. X) V7 a1 z! f3 f8 n
  271.       Fclearf(".\\update.dat");; N8 h0 t0 g( z7 T8 A# C$ p
  272.       Fprintf(".\\update.dat","Bloodyf\n");( C+ l! u, e, I6 @
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++). ?' E- ]9 Y8 u: }2 ~1 o( S
  274.       {
    # f6 i" T+ a9 Y. W& I5 n
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    4 b! M! {2 l* Z/ l6 Y
  276.         {' w8 h& {9 ]& q
  277.           file=(*p).second;& d6 G7 `7 r) C4 w
  278.           sprintf(filename,"(%s)",file->file);
    - O/ I; G0 w- J. {; a" i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 x! |0 O  c' w1 D% H' n- C
  280.           iCurrSize++;
    & `9 R  h7 C1 F) A
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    # @1 _7 Z1 P) `& e" Y4 f' Q
  282.         }
    9 F% l1 c4 [' r' }# P- v2 _6 W1 M
  283.       }' R# I6 M! x$ ~/ n. u; k
  284.       unlink(".\\update.txt");
    ( M0 Y# R: ]- P- K
  285.       unlink(".\\update.tmp");) _- g( m; o( u" j6 ^& W5 T4 x& }" T- X
  286.       Fclearf(".\\checkversion.dat");
    ( L' s) F7 H% E+ y% e9 J
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);. v" n7 T/ a4 U1 m/ }
  288.       if(UpdateLocal.size())7 d2 M+ }* k; g6 [* h" |  L: I& W3 Z
  289.       {
    1 e+ Q  k. W5 z* M
  290.         UpdateLocal.clear();) g: l, J6 A! r
  291.       }
    4 ?# T+ A- j+ {/ x3 l
  292.       if(UpdateFile3.size())
    # z9 ~6 c' W0 q9 z
  293.       {$ a- F! Y' F/ [+ [! G
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 F6 a9 I4 {" f- S, w
  295.         {$ t: K8 M6 I: f
  296.           file=(*p).second;3 \: k2 v8 `- B% [
  297.           free(file);
    $ Z* x5 s0 T) z2 `8 l% t, M
  298.         }' I6 M- t$ g& {- F- k0 T6 g
  299.         UpdateFile3.clear();
    - V  j) Q) [3 m  }$ k) z: N
  300.         UpdateList3.clear();
    / k& l2 t. H' G; a5 n
  301.       }3 w6 S' `* y* J9 M/ Z% u$ S: U$ k* j
  302.       if(UpdateFile2.size()): g3 L& |3 B4 s# t" v7 @
  303.       {
    2 ?9 J0 X/ Z& {/ `. h" I! m7 h4 N
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * Y- c7 j8 J2 l5 G
  305.         {
    . b4 U! }! s$ B( [* E1 H
  306.           file=(*p).second;: g( O7 @( F+ b% E
  307.           free(file);# F6 @4 U- [) N1 r
  308.         }
    6 V( h! q2 S7 ]" m' P  E
  309.         UpdateFile2.clear();
    4 M  _9 ]. m0 E, K
  310.         UpdateList2.clear();
    7 M' f& `* n: q. I1 C4 N" D7 ^
  311.       }
      J% [$ b; W2 N. l  M* z, P
  312.       if(UpdateFile1.size())
    2 P% b2 K7 k( K
  313.       {* G/ k9 w9 K+ P) k6 c$ ^
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). L, ^2 X4 Q; h. l
  315.         {+ \  ~% }$ ]! B& z$ D
  316.           file=(*p).second;
    ) C+ i; N6 O) d. z  ?/ G# S
  317.           free(file);
    : ?7 K) f3 s# \  t% ^* I: k- n1 L
  318.         }
    ' Z2 V+ J4 @7 J1 d' L/ h
  319.         UpdateFile1.clear();
    # b* E- B( r9 S
  320.         UpdateList1.clear();
    ; i5 d3 [% ]; o! M- Q2 W% A
  321.       }) [: X1 u. H, O1 q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 p" _9 E( d1 g* ~- `& l; s
  323.     }' u4 A+ U3 y% \% J6 M" z
  324.   }
    9 {: B( \5 J+ e% s
  325.   return FALSE;
    ( @5 O5 `7 B. Q5 D$ F
  326. }- F  B+ c* }! q# I

  327. ! b3 m9 s9 X& {  N; S9 P' s' O
  328. void CRevAppApp::ClearAll(void)2 f: u2 I# b$ n) _0 E# D. \
  329. {
    9 S  B. u' F8 I  C  c! |! l
  330.   LPUPDATEFILE file;
    7 F' ?  l0 {6 P$ F% T7 u9 n
  331.   std::map<CString,LPUPDATEFILE>::iterator p;+ L0 j' _; x: E' q
  332. , C8 a/ }2 E' Q* B9 T. H
  333.   if(UpdateLocal.size())
    ) K' t, X* r( P$ ~2 I- R
  334.   {
    4 t. B3 A  Q7 U2 r+ H! b) @. }
  335.     UpdateLocal.clear();: _9 O0 d9 w6 a; g& l! O" U( U
  336.   }
    : d6 \# h: k& f/ j  b: G4 r, t) B
  337.   if(UpdateFile3.size())
      h/ \/ A6 k4 v( V+ M. s
  338.   {- Y& F/ C: H0 G, x9 e: y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)1 j8 J1 J7 X( q1 P4 ?! C$ X0 z, u
  340.     {
    2 [+ D% ^, p* ?$ T9 j8 l
  341.       file=(*p).second;
    / R$ x4 G1 W7 f, ^9 w% G6 P
  342.       free(file);  L% l6 [: T, r
  343.     }
    : E- r$ t; Q, U+ b+ z
  344.     UpdateFile3.clear();5 g5 |' R7 }, b( V, s
  345.     UpdateList3.clear();
    7 C% }9 n0 t6 h4 ?* j
  346.   }  b7 d' _4 e  L% G
  347.   if(UpdateFile2.size())& s. R# }+ [& m, I; J
  348.   {
    7 [& z1 \3 ]7 Z2 r) H+ H6 s
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ O4 G, y! h: D- C* ?# B
  350.     {) \& ~7 R4 ]$ a: Y
  351.       file=(*p).second;( R5 T7 A0 U1 z" E- [
  352.       free(file);0 z6 O$ j5 H4 ?# |
  353.     }1 B3 q% U( J1 Z- T
  354.     UpdateFile2.clear();
    ' H0 p2 w. y! k' n4 U
  355.     UpdateList2.clear();* w* m( l! @% L
  356.   }
    4 t" R. b/ v9 m
  357.   if(UpdateFile1.size())6 o; ^  ]) h+ [2 K7 k
  358.   {* N3 {- l6 @) d: K1 e9 E
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). {0 X, s( a* \
  360.     {
    ( `0 l. C# ]7 l, j# j# }7 o8 V0 E' n
  361.       file=(*p).second;
    . j) ]  F# y! Q' j
  362.       free(file);
    3 f- R/ \8 t* `  M0 ]
  363.     }/ @$ y* d* t6 O7 c  k. }
  364.     UpdateFile1.clear();
    2 w( @; N7 }& G" G, b" f
  365.     UpdateList1.clear();! P. W) m  v2 B9 o4 N# g
  366.   }
    $ N' i) \$ n: z% V7 c
  367. }  
    ; D  U7 J( |5 |/ u# L. n: x
  368.   
    / L) x: ?3 g( l/ q0 i( R3 H7 @
  369. BOOL CRevAppApp::CheckLocalVersion(void)  l% Y: f6 I# O, t% {8 z
  370. {+ M+ [( c1 ^& N; c9 z( u
  371.   int c;
    1 C/ q9 N( b9 J+ t2 @" ]
  372.   LPUPDATEFILE file1,file2;
    4 G" L" g" G- V  L" l
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    2 a- _+ S- z: q  s" u
  374.   std::list<CString>::iterator l;
    * f9 ]4 m( N9 U4 O) Y" n$ e

  375. ( s: E0 K& _: a) N- X
  376.   UpdateLocal.clear();
    : Y$ M: `4 [, @& Q( x
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);4 z# ^* h( I/ {
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ B# e. j) Z/ X4 q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' f, L4 {7 m* Q; P
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    4 q8 t1 C5 F. G: E
  381.   if(UpdateFile3.size())+ a. d9 ?1 r$ w' z
  382.   {
    5 D2 x0 P5 D8 _* n9 H8 v2 k
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ) Z* C* B1 N$ y3 E  e
  384.     {* c) E$ f. x+ K2 ~; N
  385.       file2=(LPUPDATEFILE)(*i).second;
    # @( Y" m7 o: Q# c2 s
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 U; I* X: [+ m( \9 R5 c2 Q
  387.       {
    ; Y9 |. T/ ^1 E3 z
  388.         file1=(LPUPDATEFILE)(*p).second;3 C' B+ T  z& r/ b7 c/ E5 ~# w
  389.         file1->vers=file2->vers;
    2 `: \0 F+ v9 v' T1 g4 Q! I
  390.       }
    3 ^3 r% u$ U  S* d" m& T
  391.       else
    ' u2 B& ?( d/ d8 ~* `* K/ o
  392.       {4 k' ?8 ?0 k/ j6 r: w8 [9 q5 _
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: o/ o5 F6 O% q! m
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    8 z6 b3 {+ A  h" J
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));% {0 ~2 }: N. l7 [7 l: C
  396.       }( H" ?" i, Y; C) [9 ^$ G
  397.     }
    8 f) H- d" c; Y* t7 X5 x
  398.   }0 |2 P/ n; ?% N# c
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 H0 H) s7 x: l: T3 t  j
  400.   {! `5 q. E/ K5 h" _) Y. d
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    $ a$ \8 j" \) K+ p8 L6 n7 Z, t
  402.     {) J7 e; ~8 M( r% ^1 p
  403.       file2=(LPUPDATEFILE)(*i).second;; u, L1 r2 E, l
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); r3 G2 y1 N1 f2 k$ `5 S$ C. B; @; o
  405.       {% P' |5 H9 T# B: z! j) T" j; m8 c
  406.         file1=(LPUPDATEFILE)(*p).second;
    ; H3 x; [) S" O* m" G7 \$ [* C* `
  407.         if(file1->vers!=file2->vers)
    ) J& f4 X" {4 R5 {
  408.         {
    / U! F1 u# c' d3 j
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * @# [8 W, Q  I8 H5 X. @% z
  410.           c++;
    0 o+ W/ R$ ]' B( T: B: b
  411.         }8 R$ y; }4 `& D1 G" r
  412.       }
    & c( U; y  N4 ]0 }
  413.       else
    7 ?9 e% [% z5 y! a' p* @
  414.       {
    ) ~2 i% _- V- N# Y- L( b0 N; b
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 [: s, \3 U6 O! Y1 n9 f
  416.         c++;
    , N- ?0 [: o8 C5 ^/ ]
  417.       }' m! ?3 U8 D& d! m8 j) m  X
  418.     }
    & R. f( p0 C6 D4 b, J7 X7 L
  419.   }4 M) F$ R' C: {
  420.   unlink(".\\DownLoad\\update.txt");  \" A5 y3 V3 o! [# A5 }4 x
  421.   if(UpdateLocal.size()) return TRUE;
    ' T9 d6 Y% b/ P2 k* L3 I7 D6 |/ r
  422.   else                   return FALSE;" W9 L. q- Q# n2 \
  423. }
    , t7 q  C0 F* q8 z, T) ?+ Z8 y
  424. 7 Z! _5 a' S1 P1 K
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ) ^( \8 p* Y1 t8 Z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"8 n- H% W" D2 Z3 n/ m) ?- s4 `' X

  427. ; @6 u' O4 v0 g4 T" i4 m
  428. $ m+ ~6 Y' y5 _0 q" M
  429. ( s+ i. b5 w& U" ~* _
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile); f) O; B4 y4 x( D' e) O
  431. {! ]0 o# F! F* ]# P4 Q7 z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;8 i% v' y  y$ S5 B' Q
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 l- \. Q. `. y
  434.   {
    ) V/ F: F* h  z
  435.     char szLanguage[50];6 n% X* S8 ^% j$ t3 q5 m; G
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / x( Q5 |" Y! P) K+ K0 Y0 Y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;( s2 N. Q) u, ~4 X) B) E7 }: K
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    , Z% A9 ]' ~; O5 y
  439.     else                                   m_iLanguage=ENGLISH;
    0 f* e4 N$ V- a( s1 \9 n3 A
  440.     char szRegister[100];; K" |& W+ v8 f( I  _% a4 g! `* m
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");, F+ L( g% E) R. a8 c0 g: ^
  442.     strRegsName=szRegister;
    & k* P( D  D* W, u
  443.     char szPatchURL[100];
    ' V/ z) h" y" q  P4 k" |6 u, {$ k
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - a1 s0 ]- c, e* f" ^  C
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / d% E3 M7 U# h4 c  o- o
  446.   }6 n3 C$ A7 U( M3 q
  447.   else. s6 g' q  a' u2 Y. |
  448.   {7 g* v, X2 ]! `9 j, _. P; I2 {
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 z+ X1 l8 H; ?% M
  450.     strRegsName=DEFAULT_REG_URL;  g4 \: Q1 W: x! }
  451.   }4 K3 a4 b( j  t! {; q8 {
  452.   if(GetFileAttributes("hosts.ini")!=-1)* {6 E6 v& `+ s% P0 r1 H/ Y2 Y5 _
  453.   {
    * [, E# H! k; m7 d
  454.     char szIP[50];
    0 b" {" a' G- d" I
  455.     char szDIR[300];
    6 V# L5 @: F; @+ d+ P
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))3 P6 T3 t3 I/ F4 E
  457.     {
    1 X  n5 w/ d0 ~2 o" i" V- i; r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");1 ~7 z  @1 q- C3 ~: e! g
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");$ ?8 @3 g* e/ ]' s8 F
  460.       strHostName=szIP;3 o% a" U* q; p$ T2 }6 ]
  461.       strHostPath.Format("/%s",szDIR);" w8 N+ B, p7 P0 S: Z7 t; W8 ]) c
  462.     }
    : E7 j9 p5 m( Y
  463.     else
    6 J" B/ [" n% d" A0 @* ^1 S
  464.     {
    , y% B3 l+ ~: G  X+ D& H- y/ Y5 e
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % Z+ \0 V" A# o+ ~- C
  466.       {
    % Y) l0 _6 }7 g) T
  467.         char szLanguage[50];
    6 M, C* M& i# i8 V9 K  x" |9 r8 q
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; W+ m( {: h: y, Y) h; [
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * C& R  |, o! R
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" m) D$ [7 J# w6 Z9 P; A" k* i
  471.         else                                   m_iLanguage=ENGLISH;
    ) K$ j' h* B( S( H6 m
  472.         char szRegister[100];
    " q! {/ q) [1 u8 O% d
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 C4 ~: X$ c* R% z4 V* [
  474.         strRegsName=szRegister;
    + R$ m3 B! `+ n- x( ~% w) Z
  475.         char szPatchURL[100];9 C) m* h; A9 I1 e+ _3 E
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ; E& a$ y& ^, U2 \
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 W/ W: r$ z* W- S3 |; `# S" {
  478.       }
    0 R1 \7 Z5 H7 p6 P$ i2 Z9 a
  479.       else
    ' t! @3 y% Z; s! I7 |
  480.       {# N" Z- k3 N8 Q. A3 ^7 M5 C
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 k! c; d  [' T$ p- s. g5 X& K6 d4 ^
  482.         strRegsName=DEFAULT_REG_URL;3 T  Q: }* y4 A. r1 l5 N
  483.       }4 h% V1 Y0 r$ G0 ~
  484.     }6 e. k% T1 S; T- s* H, k4 Y
  485.   }8 @/ J# A* B  G
  486.   return true;
    * d2 b  ?5 H: k7 y
  487. }
    - E0 l9 L0 _) z9 [

  488. 8 p# p" ?: p  r* a
  489. #include ".\ZLib\unzip.h"
    / B$ a* |9 `9 K  @* f. U( o! r
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ) m( u! r7 ^6 d
  491. /////////////////////////////////////////////////////////////////////////////$ U9 i8 Q$ N2 `6 g4 m
  492. // CRevAppApp initialization. T" h+ s& H- I2 u- B

  493. 9 K% Y" |: [6 T% Q; G/ y& \  a
  494. BOOL CRevAppApp::InitInstance()
    - t7 h. ~) B) _2 I% h+ z: _
  495. {
    / A7 r/ m4 |- o5 G! y+ V: T1 H
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    2 `) O( g: g6 `$ [' E) K

  497. * F, ~' K8 _7 `/ B" H
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);( p5 z) M+ [. |4 R, m7 F9 v
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ' \' n8 |- I% o, q$ ?* z/ w
  500.   {
    ( P0 {2 H8 l/ r, k5 ^8 y9 ]5 p. a
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    6 q# y, E" \1 e% h
  502.     GetPathFromFullPath(szPathTarget,szPathSource);1 _+ C. Z9 M4 O5 E! R  q- f
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    0 ]; ]4 _! h, _" p
  504.     {; X  w( \7 J  }" W
  505.       strcpy(szPath,szPathTarget);
    4 e9 _# w6 T6 P0 l- T
  506.       SetCurrentDirectory(szPath);
    & a- y! O0 v& p1 U$ I' c/ O) I
  507.     }. c1 j, }1 ^3 x
  508.   }6 W+ K  g- z& y& L/ A* X
  509. #ifdef _DEBUG: i2 J" G. U6 v# R7 b- Y) R
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 @& Z3 j9 N* s9 Y3 W
  511. #else$ C+ v! k+ [; Q
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 n6 ?, _0 ^5 G! Q
  513. #endif
    7 G+ J, r+ d5 ?6 F
  514.   {
    * G2 w0 a! o7 U
  515.     char tempFileName[MAX_PATH];
    ; y# o) g) N1 e  k; B% Z2 i
  516.     strcpy(tempFileName,szPathSource);' x7 H& H5 h' [) [
  517.     tempFileName[strlen(szPathSource)-12]=0;5 v+ h0 W  m3 E/ ]" Q+ g1 X
  518.     strcat(tempFileName,"\\$CSUpdate.exe");5 r0 q/ K/ t1 I# @
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    5 {2 Y) Z/ e; p; ~2 t
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    + M0 {5 ^; d5 ]$ A) b. \$ k
  521.     return TRUE;8 D6 D8 I1 I; B8 ~3 G
  522.   }
    4 L2 o3 p% p$ u  I9 E# S
  523.   // Nuke 0118: Delete run.exe
    + W2 G( T% t7 Z# A
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    9 s& o: x1 l6 y5 `3 m; M
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + s3 f- A. V! \3 e  H1 m
  526.   if(!ReadCfgFile("Config.ini"))+ T/ q$ A9 Q$ h: |% a
  527.   {
    & J, v9 u, @! H6 e/ _% z3 L
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 \6 v: c$ a$ W; e  K6 r3 `3 y# v, n
  529.     return TRUE;* b3 l6 p* F& P) |
  530.   }
    ' v% Q$ C: h% M0 b9 u* ~
  531.   HANDLE mutex;
    9 U2 H5 h) ?" O
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))* j$ C9 I8 u6 }$ ?; G+ F: u
  533.   {- _7 S1 M3 f9 W, l
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    9 u$ ?1 T; R9 C, h* `% x
  535.     {
    / l) `4 u! y8 z! z
  536.       CloseHandle(mutex);" E8 A# }3 ?3 ~$ V# d  M: C8 B3 v
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    7 Z. g8 `! m+ D- Z8 b! l
  538.       return TRUE;
    1 ~! v: b" d8 ]: ^/ X
  539.     }7 R; {' s3 h/ a( z
  540.   }  : m- r" a, [" z$ v# d4 N; M
  541.   CloseHandle(mutex);
    + K% B: b: k6 }& ~  a0 F; L' X. y
  542. - ~2 q* r5 }. X! Y+ ?
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    3 f% G: p( k( Y7 y! W
  544. ) L) Z% o7 v- k2 z
  545.         AfxEnableControlContainer();
    " }4 R! b( o' }# ~

  546. 8 \7 m8 D6 [  \+ E- E
  547.   bCanUpdate=FALSE;# v. _5 ]! J9 U0 N+ c8 S$ b9 y2 q' X
  548.   dwStartUpSteps=1;- H% Q* [* [- E( u5 T/ K1 u% w% w
  549.   dwProgramState=AP_NOTHING;( K8 C+ f4 _# o2 q
  550. & O& s5 z: S4 a8 g
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
      c5 I# N5 I1 X) z, Q8 ]# y; Y- P$ ~
  552. 2 d( o: |  C+ {+ Y
  553.         // Standard initialization
    3 |, j+ n! `* U
  554.         // If you are not using these features and wish to reduce the size
    - [  C; a) v5 O/ N* f/ `8 O* s
  555.         //  of your final executable, you should remove from the following
    ! Y9 l& _  u  r/ V4 z5 [
  556.         //  the specific initialization routines you do not need.
      Q' g# q3 e" l; Z. f+ ^

  557. . n  E2 E7 y  B& P; J# u
  558. #ifdef _AFXDLL
    " b; w" b3 `6 ]1 E1 ]
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' d0 G! \" _" [0 _; W
  560. #else+ O1 p& g$ L4 W) ^
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically2 L7 Y4 {( {' q9 ~- L( x+ |
  562. #endif- N6 t8 Q; Q. b" `# ~" \

  563. 0 V$ Q! Z( d% L9 b* }
  564.   dlg=new CRevAppDlg;
    8 X* ~: d4 l) I0 o: i
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    / Q, G0 t7 |( [
  566.   dlg->ShowWindow(SW_SHOWNORMAL);; G) G% B3 {$ [" h# P( w5 ]
  567.   m_pMainWnd=dlg;
    9 _1 {- I7 U( t2 O3 K1 I, Q& g
  568. 2 r; _: N7 y+ V
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    / N' Q4 `' @9 _+ K+ p5 _2 T

  570. ( Z2 a; s4 r) {; J
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ( ]! |: p9 k1 f- H
  572. //  ULONG_PTR gdiplusToken;; g! C/ w1 _: L; k! R2 [
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 i% V4 N! c* ^) \

  574. 7 Q; b$ n9 @+ }* l% E) y
  575. //        CRevAppDlg dlg;$ K! j* o0 |- K; I+ u  A3 I
  576. //        int nResponse = dlg.DoModal();$ P# g! M6 L% `5 {
  577. //        if (nResponse == IDOK)
    3 h' C3 `# w: Q9 T4 @
  578. //        {4 t4 N- M1 u# n$ F8 U) i& \( J
  579. //                // TODO: Place code here to handle when the dialog is( B, m  ?* w/ p: B( D" i) E+ s
  580. //                //  dismissed with OK
    ! ~5 c0 p4 T3 Q7 A
  581. //        }5 T, q9 [' C7 L9 T3 m* Y' J" }0 C
  582. //        else if (nResponse == IDCANCEL)1 g+ u% z. u0 ~3 Q) X# d1 g
  583. //        {
    / T" m( {7 _7 ^5 L6 g9 d
  584. //                // TODO: Place code here to handle when the dialog is; g. r0 h4 i0 h$ I3 T! e
  585. //                //  dismissed with Cancel1 ]$ B2 _. K& J/ y, D0 g! ^
  586. //        }- |9 q5 a) @, e2 F* g- h

  587. : S0 H/ x) x, P; Y4 p& v
  588.         // Since the dialog has been closed, return FALSE so that we exit the! u; D( p  I* f" C* H; J* X% F1 C* f
  589.         //  application, rather than start the application's message pump.
    % f* \' C( y0 K- o4 b9 G+ g/ E
  590.         return TRUE;: x0 s  u7 ^: H+ J6 R" t
  591. }% B' Z" [$ ]* ?( @' U

  592. $ V( f- X) [% @* g( N
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 r: u$ Y6 v9 n( |8 x6 [: m! L( t
  594. {
    4 F9 N% B& f$ R7 Z
  595.   int i;  a" L, X9 }  P. _
  596.   char *szRet;
    8 n3 m* [  _2 {  }. v- |/ t4 c

  597. - u4 ~9 k1 s' x2 l+ ~, H/ ?! M* }
  598.   if(pSource) { itoken=0; sztoken=pSource; }) i& R- K. Z7 ?- I7 J# t. h. P' A
  599.   if(sztoken), I9 U- U% X; p5 l
  600.   {: b5 I$ i7 d* E) g' d
  601.     szRet=&sztoken[itoken];0 `" m" g# w+ a* }* G( J
  602.     while(sztoken[itoken])
    % I! m9 B$ a# Y* Z& `& N0 q
  603.     {
    7 p$ V- p$ m- G8 L
  604.       for(i=0;i<(int)strlen(token);i++)8 B. q6 p  S# C1 P* I
  605.       {
    + T+ o3 p0 n! {
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])+ z; @9 E# k& y( \* |
  607.         {7 ^2 b5 O/ `5 o' G# o8 H
  608.           sztoken[itoken++]=0;$ W( B2 C9 \) O# M* F! y
  609.           sztoken[itoken++]=0;
    ) y0 J* w. ?+ J6 C; n) J3 M0 n
  610.           return szRet;  q- M0 y# D8 }. s6 b/ ?
  611.         }* P/ e. X5 {' l6 \9 |& Z8 m
  612.       }
    ) G6 N: Z0 p* u' a+ B  U& B. x
  613.       itoken++;
    ( x4 ?/ G! J, u/ M  b
  614.     }2 M' ~) r5 g8 b9 M7 J' Q
  615.   }
    ( s: X* n, _9 P6 w; \
  616.   return NULL;
    $ M9 w( G6 ?* P3 E
  617. }. l6 W9 y! q) I/ M
  618. * ~- G* n; K" w; M/ a5 H5 Y3 {
  619. void ProcessProc(long Total,long Current)
    7 S' ~8 z# y3 F1 {1 d1 U, W# Y* d
  620. {
    ) p; k3 G6 h. }/ G: z
  621.         MSG msg;
    + ]' H* `- s: |% c0 k
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);) n/ U' m; l2 v; Z) c& T4 Q( G
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));" Q; a; T$ X/ o1 F, ]
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    7 g8 I& f# i3 a- Y
  625.         {2 Y! b8 S) b4 m+ m% }
  626.                 if(!GetMessage(&msg,NULL,0,0))
    3 m$ V, m/ y& p, H3 ^' O
  627.                 {& e& B; ^* t& e2 t
  628.                         return;8 {3 e+ v( F1 k$ Q4 \
  629.                 }
    ) c* p: h: N* u' _
  630.                 TranslateMessage(&msg);: f: }7 a$ |- d5 ?% g: f7 b4 Z. i
  631.                 DispatchMessage(&msg);0 J6 R' k8 N$ X6 I8 ]- ]
  632.         }        ! W& X/ _& S" Y7 v6 e
  633. }0 W  Y* N/ U3 k  `6 M

  634. * o0 O! T6 k8 d: x' c
  635. BOOL bFirstChar=TRUE;
    4 i  C2 L5 E/ v- O  _% g6 w+ N/ g7 Y
  636. ' z/ t* f/ Z8 v6 k
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    , G( c5 O& r9 j. m+ G; {
  638. {
    3 u1 w7 v/ [7 n2 q. L- g
  639.         // TODO: Add your specialized code here and/or call the base class: `. Y: t( r; A
  640.   switch(dwProgramState)
    7 T1 @" m* x8 _- y
  641.   {
    6 p- T. Y$ n) P
  642.   case AP_NOTHING:6 j7 b, Z7 j0 n  S
  643.     switch(dwStartUpSteps)' {6 H' F& K2 w% \8 I
  644.     {" k( Y- s* m2 ~  l: u6 L1 q
  645.     case 1:7 B% F/ L! s4 H+ g5 q
  646.       {( l& M+ V7 V) F: Q3 K, l
  647.         int i;8 C. ]4 A+ a5 @5 L5 M
  648.         CDC *pCDC=dlg->GetDC();) d4 h( Z! b( o' q% z7 L; G
  649.         HDC hdcwnd=pCDC->m_hDC;* }' i+ b4 _; c: R9 Z. i* L
  650. //        Graphics graphics(hdcwnd);3 m, j* F2 A( `3 l8 Y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    * X" |6 j# I# s6 C  Y
  652. //        INT iWidth=bitmap.GetWidth();
    / e, z, m6 e% {6 L4 V: Q/ e
  653. //        INT iHeight=bitmap.GetHeight();
    ! ~' z& m& |# Y; ~/ m. `- c
  654. //        Color color,colorTemp;' p: j( I# d3 T' n3 |7 h
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    2 M! b0 I' m& i
  656. //        {- X+ y2 E, ?1 W$ a! Z) r: i* e
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)7 p1 m2 ?& |2 ?$ O
  658. //          {
    . f) h. R/ R$ ]3 T( B0 e
  659. //            bitmap.GetPixel(iColumn,iRow,&color);7 r/ a$ v% d$ G
  660. //            colorTemp.SetValue(color.MakeARGB(9 R) d& E1 [0 K3 h0 g
  661. //              (BYTE)(255*iColumn/iWidth),0 O- v+ {$ U) W( S4 t
  662. //              color.GetRed(),
    ( _4 E1 N  ~  H" G
  663. //              color.GetGreen(),
    : B* e1 |/ t1 s; J3 v4 _7 M
  664. //              color.GetBlue()));+ e' M: u- r* f+ x  r/ z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    , G$ M9 y8 e* I
  666. //          }
    2 S$ f1 z# y/ n) M  r
  667. //        }+ }) Q( |/ }5 L. F4 e+ `
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    . K' Y8 o8 x% p
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 ~- U! K' i4 i% Y* S4 }
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");8 u5 ^6 N) x2 H# a5 |
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! f2 `8 ?& W1 y, L
  672.         for(i=0;i<240;i+=8)9 H8 @/ S7 ^0 X- m. H  _8 d
  673.         {
    8 w0 L$ U* K; z
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! x, F3 H3 k# [: X6 B6 J
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 |/ h7 R# ^2 _8 f
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # ^# d. d( ~9 f& F% n4 |
  677.           Sleep(33);
    $ P& h& i/ i/ {" e; V
  678.         }
    0 V, ~, c* \, {; F) J: l) N/ u% N
  679.         Sleep(1000);
    ( a' i2 F) X( z
  680.         for(i=240;i>0;i-=8)4 g* z, h$ h# \, Z5 \# R7 j6 @
  681.         {# Q4 n3 @2 h9 i" O: M1 N5 k4 w" W
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 O* q/ K# H% J0 S# `  W
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " A+ o" z+ p6 L, h' s) }
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( U& O: Q  o$ z* a
  685.           Sleep(33);
    ' R' e" {- _" q- X
  686.         }& R! N: ~6 O) f( @
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    $ _. X7 T1 n. B; k
  688.         dlg->ReleaseDC(pCDC);
    4 s; b3 p: k. S  x
  689.         DeleteDC(hdctar);
    - H7 [3 c( n3 r. I
  690.         DeleteDC(hdcsrc);
    . ^, d" z6 m0 G
  691.         DeleteDC(hdcorg);
      ]8 k/ {8 V9 j
  692.       }& B4 D! a4 d3 ~
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; x) d% V  K+ K
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    " Q- }8 t+ h( P
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ) G8 G2 R& m  t0 [
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");1 c' J( T+ M) u9 I0 V( K8 \+ z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 [! M6 r2 i, }) |3 t
  698.       if(!Dn.Connected())/ q  g0 k* p9 ~, N) P; J
  699.       {
    6 I2 |7 s/ j* W
  700.         dwTotalFiles=1;
    ' v0 s! O5 j9 l
  701.         dwDownLoaded=0;3 L7 X& @: v) i. M% Y
  702.         bSilentStep=TRUE;' N+ ]2 `$ G- p6 f* C
  703.         bCompressed=FALSE;% r# \. O6 I# `$ ?$ S. _, b
  704.         strExtLocal.Empty();$ D0 o' y) L. P
  705.         strFullName="readme.txt";
    6 y" V- F/ l! u0 b: d
  706.         dwProgramState=AP_CONNECT;
    : z# W' d% b/ v# M5 w; O
  707.       }0 o6 ?' a+ w+ E, X3 i$ v
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();3 x0 g* F! s. p- |
  709.       dwStartUpSteps=2;  G) A. H; j- \  C( U
  710.       break;
    - C) I8 r9 I! E+ r5 O' O
  711.     case 2:
    0 T2 n6 a, D  k% A; M! y  n
  712.       {/ e+ H. W. u- t8 m: X
  713.         int iEOF;/ y0 H  D& n/ T6 S/ M
  714.         FILE *fp;
    " y1 p. X/ I& X* u
  715.         char szString[512];  D* @5 t& J. h% c
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");- s& f- W# `$ O$ ?/ M
  717.         if(fp)3 x. U7 ^8 C/ q2 ?- n  h2 o
  718.         {# N- m( a3 r3 |+ Q$ |9 r: W
  719.           do
    $ T% M1 u2 Y* W3 ^3 M* P
  720.           {
    ; y3 B+ x# ?0 b. p- A
  721.             iEOF=fscanf(fp,"%s",szString);' {  U% O/ N0 F: e  r1 V/ Q
  722.             if(strlen(szString)); m8 a9 k7 E- R; k
  723.             {
    ' l4 h/ P4 H; j0 ?, P% x
  724.               if(bFirstChar)+ m& `3 T4 T6 V* H3 ]" L, _6 G) n
  725.               {
    7 s% h$ B: o+ h& q1 z7 i1 g# N, ^
  726.                 bFirstChar=FALSE;- s; ]: N5 o0 J8 ]$ j: W  ~
  727.                 bConnectIsBig5=FALSE;7 \& E, |' ~. r8 I( O% e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;, H; \  y8 {! m9 d4 l2 V* X4 I
  729.               }
    , ^! x0 J) n3 t# }3 A0 w
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- j5 U* P" s6 R) x8 R+ i( ?/ R
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));3 i3 Z) o0 c7 P8 A
  732.               dlg->m_ListText.AddString(szString);
    7 d2 y" E' z1 ?  A$ [, S$ S& s" d
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / N# n% s8 r* d2 F
  734.               *szString=0;$ d* ^9 p  M+ d1 l' d; f
  735.             }  K. {5 }! d& K
  736.           } while(iEOF!=EOF);  f  g5 i* \. z1 {  A2 t4 D' @
  737.           fclose(fp);
    ) ]4 [. E/ J7 N; y8 A
  738.           unlink(".\\DownLoad\\readme.txt");$ W* g  s8 ?; Y& u
  739.           dwStartUpSteps=3;' j6 r3 X! A& q
  740.         }+ Z4 u7 k$ K& Z0 i. D4 N2 K, Z
  741.       }
    3 U5 |0 w. T$ l+ Q
  742.       break;
    # N: N, |; q: j
  743.     case 3:
    # E! u. e  g' h2 g% B- {
  744.       if(!Dn.Connected())
    ) Z: Y& I  R$ d5 f8 K' E; O
  745.       {
    # F' y" ~9 m5 l% D' d. x. K" b1 O
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    $ ?0 h% e7 H8 e2 D4 _
  747.         dwTotalFiles=1;
    5 `8 v1 C5 r! `$ d4 Z" N  k- I
  748.         dwDownLoaded=0;6 n. r! a0 U2 h8 t6 r5 F( G
  749.         bSilentStep=TRUE;5 j6 U& S4 x5 }( o7 z' ]7 w
  750.         bCompressed=FALSE;
    4 m7 {3 c. x" P- c! }
  751.         strExtLocal.Empty();5 t" |9 i; d1 D7 R4 s
  752.         strFullName="checkversion.txt";
    1 x' U! G1 J3 L9 ]0 |7 [# j4 j4 W9 H7 S: }
  753.         dwProgramState=AP_CONNECT;/ }, r% d9 Y2 I  U7 m# }: F4 E
  754.       }
    8 t; H: Z5 i; }4 f, m$ {! k2 m+ C
  755.       dwStartUpSteps=4;
    2 t, e9 U5 P: `, f% d- U
  756.       break;, J4 N2 K3 H" A  T3 v/ {
  757.     case 4:
    7 v8 |) c* }8 ^: r, w
  758.       {
    7 a2 {' c: P$ M$ H0 j7 c' I" V
  759.         FILE *fp;
    ( Z2 |- b$ I8 i8 f0 d2 V2 ]0 K9 L
  760.         char szString1[128];  g. i' |- S9 x& `( _
  761.         char szString2[128];3 t  i* e8 c, _. I# H. r$ M! a
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; |  K# T4 l' q7 o1 c2 x2 F
  763.         if(fp)
    ) d4 z% h0 j. b
  764.         {
    1 Y* L  x8 `' l5 T
  765.           fscanf(fp,"%s",szString1);
    % K2 p0 t# Z3 u0 a3 m+ U
  766.           fclose(fp);
    ! a  v* |% u$ O% \& R
  767.           fCheckVersion=atof(szString1);
    2 @- a' k, Y0 Y9 \
  768.           fp=fopen(".\\checkversion.dat","r");
    ( H2 k+ N& k* G+ J4 I) p9 ^
  769.           if(fp)- z% [! s- R/ q1 O$ w$ }) e( E
  770.           {1 q* }  e! V) q1 N+ y
  771.             fscanf(fp,"%s",szString2);
    ; K9 |1 R) M: K1 w* U( O
  772.             fclose(fp);, ~* I' I7 ?( ^/ p+ w) G* e
  773.             if(atof(szString1)!=atof(szString2))% b/ S) A! C7 X' N8 P9 Q
  774.             {/ G; N1 o; T; u; W, Z& Z6 T3 F
  775.               if(!Dn.Connected())# X* i( [9 U$ W% B4 R
  776.               {: g7 V" ?  Y$ r% D) S4 a$ Q8 l
  777.                 bFirstUpdate=TRUE;% v7 A6 c' j) l( o; k1 O
  778.                 dwTotalFiles=1;
    " ?1 w& U/ B5 k2 o7 D# R- `7 ]/ u
  779.                 dwDownLoaded=0;, n$ i0 ]6 R* ]+ o; P
  780.                 bSilentStep=FALSE;
    0 u& M1 B( C) y$ p
  781.                 bCompressed=TRUE;
    3 Z6 h! M4 `' s, c
  782.                 strExtLocal=".\\DownLoad\";
    2 |3 w. J- g, z  }* w; j% ?0 U
  783.                 strFullName="update.txt";
    - A- |. T) F8 F1 S" Z
  784.                 dwProgramState=AP_CONNECT;
    ' E5 _* U% e" j9 \$ q* [! Y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 Y2 K: O# {( H; M
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / s% ?( p( |0 Z0 @/ b4 X
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! U1 ~- |" T0 A1 {; g0 a1 t1 \

  788. 1 B" @; X! X/ `3 {7 K" g! L
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 a0 Z9 p# x' ~4 W, V3 Z# c
  790.                 unlink(".\\DownLoad\\checkversion.txt");* v9 L7 x* o' l  f% Q) ]
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 A( e! B8 W& _. ]; b
  792.                 {, ~8 p+ V2 G: r+ Q8 m3 d( M
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    2 T) M) O. l, u9 H
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    , r3 x# Z8 n7 M4 a! \/ }
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    7 D" W2 ]  r: d7 s
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 V1 p( b  T0 a) D
  797. + `& g/ w% o' C. ~
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 h  w7 l8 ?/ a4 E! {
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; e  |' ~, l, h% o9 O* ~
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");  d* `% ?! X7 H& s; `
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( M, D2 q; k9 D
  802.                 }
    4 r5 C" n5 j3 G) ~  f
  803.                 dwStartUpSteps=5;9 c1 U3 J- O; M. H2 ]: @
  804.               }
    " k6 M# B3 R& J( v4 s
  805.             }
    2 N. d4 F( A$ C2 }: d' Y
  806.             else
    ! ^$ @0 C5 |/ ^+ B6 z( l/ a5 `- y
  807.             {, k! T6 x- q8 S
  808.               unlink(".\\DownLoad\\checkversion.txt");
    0 T- P4 z7 u6 G2 u  H/ s
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : ?7 B. b" F. b( q$ a- S. V; u3 U4 ~
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ( Y1 _! b0 B8 x/ ~8 C. f  m
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");) s2 o% V  M. _% V
  812. 2 F8 g/ U+ l! b
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 v: N, E/ A, E1 y6 D' A5 C
  814.               dwStartUpSteps=99;) S0 g7 B6 ^; x* F
  815.               bFinishUpdated=TRUE;
      S$ m6 |) K, M$ R
  816.               bCanUpdate=TRUE;
    . D3 I& t% y8 j0 @7 R( M8 E
  817.             }
    & E+ Q9 p$ f+ _. ~5 {
  818.           }
    , y: c$ h6 ~* t7 u5 `7 R/ W
  819.           else& f1 @# O! q" Z- R- k
  820.           {& o: u# D: }/ K7 t- O5 m) F
  821.             if(!Dn.Connected())2 |- Y9 F/ [. Y
  822.             {8 e$ C5 i5 m6 o$ c) A
  823.               bFirstUpdate=TRUE;
    8 _0 [) W  ~+ l' Y3 \, |
  824.               dwTotalFiles=1;  }0 B0 v2 f: ~1 N9 M
  825.               dwDownLoaded=0;
    6 I  @, \/ a* T3 ~% ~2 ]
  826.               bSilentStep=FALSE;8 w4 G1 D3 W! S& ~& _) K+ T
  827.               bCompressed=TRUE;5 T- A! n- v* I" k. ^+ v
  828.               strExtLocal=".\\DownLoad\";: A& s: \3 f- y1 L; @4 `. n- E6 F
  829.               strFullName="update.txt";
    / j, b1 C( j" |3 v1 U3 D
  830.               dwProgramState=AP_CONNECT;* u, S9 Y  D# ^6 @. h
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' e& R* A7 e+ K) X5 T
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - K- V, U1 l" f1 D& V
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");. H4 Y3 P/ j: @, f* m
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' V$ d% U7 [$ I0 ?. C
  835.               unlink(".\\DownLoad\\checkversion.txt");# W; m( w# Z" j0 Z' J+ X
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)$ E" f; i1 z( Y' L3 _+ d. I
  837.               {( f3 G" r; d/ ?8 A, K$ [  ^
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");+ U8 F4 |6 }1 z, f
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    3 {8 |) i( l  E$ }- v  l6 |- r
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    # t: d2 o' L3 ^  k  q" }  p+ W% s
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 X: ~& Z4 x  `9 s. i7 |
  842.                
    : Z- ]9 V9 d3 h0 k& m6 B
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 C8 m# N# I4 C8 d2 \/ K
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 P" w" a) f: c% q1 h" @
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");/ J. ~0 t( b" E+ ]+ [& b5 C
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . \" d6 {/ Z4 t" p: }7 g* a
  847.               }3 f1 i' e( k& ]. K1 N9 k# `5 g/ F
  848.               dwStartUpSteps=5;
    6 }* ?; i& j, K2 G( x
  849.             }
    ) B  {2 N  l$ b: N7 H& F% G4 P# W
  850.           }0 f# v. Z- j7 Q* a0 {: t
  851.         }
    0 s9 Z' N  X$ \  d# M1 ~6 l* G
  852.         else
    , W3 D3 D; @( N: D
  853.         {
    ! {% K7 R7 m$ L2 @! H4 Y7 }
  854.           dwStartUpSteps=3;
    " r% s/ e+ T3 g7 m/ S
  855.         }
    : A# z, {6 U/ x# q- h( O$ N
  856.       }# O+ k: P% s8 S0 e1 u/ \
  857.       break;  Q0 F6 Z6 }3 V- }, o6 I0 n
  858.     case 5:/ A' ?, ^0 O+ }9 R% t- d
  859.       {) T. V  ]5 F3 V
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    . Y# y  [5 z: o! g* F  Q% v( }5 _: b
  861.         {4 p8 b; R0 x" o0 [$ J5 ?
  862.           int opt_overwrite=1;
    ; Q& {/ g, ?1 r* b) K+ U/ r
  863.           int opt_do_extract_withoutpath=0;2 J( d4 T' p' Y. U' f9 Q
  864.           unzFile uf=NULL;
    + h/ S# s- ^- K0 K: O; a$ l- d9 U  ?
  865. % w3 S$ _( E& Y# c" p! T
  866.           uf=unzOpen("Wsa.zip");6 ^  U9 `- ?) R- \  q' [0 J! Z
  867.           if(uf)* O' }6 ^+ y: i2 I/ f! N, V" e+ m# B
  868.           {
    $ K6 t. `, s* `  o+ N
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);+ }9 Q, ^7 p5 U5 K0 c4 h% Q- K
  870.             unzClose(uf);
    4 K. u2 r  }* _5 ^6 c8 t
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");# z* }4 k+ ?- v) Q! v
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    2 }- Y! }; O' G1 e; ~. o
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    0 F% z* E2 S6 O# \) y/ P) ^% U. Y5 l
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . h, {, Q2 U  w- N
  875.           }2 N" w' z0 U  l& A; J
  876.           DeleteFile("Wsa.zip" );
    5 L  ]% o! [" a* H: @) E0 U0 j
  877.         }# j6 v# O5 n0 G/ d

  878. - l( k! E% ~& x% r
  879.         if(CheckLocalVersion())
    : G/ m& q3 }# v' h5 G; j. l) k
  880.         {
    " w& B- P! j+ l- K0 k/ M) }
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");3 n7 y! l* q, a& E& {" U& e) ~
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");: _$ u, d# J$ b, X0 j: O" v0 F
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    / V% O8 |7 P/ l$ c! E% v7 Y
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! R! F2 i/ ^+ y+ U: N" t
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    6 g( l( P$ l. S6 S! s: \
  886.           dwStartUpSteps=99;
    . ^! b+ v8 t! K4 d0 E$ m7 Y
  887.         }
    1 y, [' S& w+ E) t9 x
  888.         else1 O% G' W# l. M* E1 S0 R9 f
  889.         {1 q9 w3 N* _# Y. V+ i) }9 K
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");; v: T4 `' b7 ?6 Z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");; Q- l( Y; m' `3 I
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ) e6 _$ C1 g1 L

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

0 z% |& ~$ A( c9 B: m& f& g
  s3 I! H. @) I

評分

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