找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
0 T" ^% M7 A; C% W' p# U: Y/ T
  1. / RevApp.cpp : Defines the class behaviors for the application.
    . l; `# o$ E; [$ }! L
  2. //
    4 S5 A% I4 Q' a& h* _
  3. # k  @# o( q2 C7 c' L/ C; R
  4. #include "stdafx.h"
    0 m) D6 z/ s8 Q$ R$ m( K: p9 ~

  5. 6 V! ~1 D$ T/ d2 f+ c- R
  6. //#define UNICODE1 S3 q: G! L6 S! ]
  7. //#include <gdiplus.h>- T1 E8 B! n5 U. n, E2 B, y0 @
  8. //using namespace Gdiplus;' W0 [- X  I  D9 l
  9. ) }6 @8 m; H4 t+ U" Q9 @8 F) T% B' x
  10. #include "RevApp.h"* f; h- b, X. z3 K7 v: F+ v
  11. #include "RevAppDlg.h"/ W% l8 Z0 r! h) D! C

  12.   ?# ~8 x, A. D
  13. #pragma warning(disable:4786)' S5 P& r1 P/ R$ |& o& V
  14. #include <map>
    & Q1 g& D( [9 {7 M. z$ N, N1 V* @7 n. F) B
  15. #include <list>( u0 O; ?# {. h* P& d4 d  K% w6 U
  16. #include <direct.h>( v: b0 p) f! V3 c/ }( \/ Z( ?3 b

  17. 2 r' N0 u) z8 U/ [4 J6 o2 D  v
  18. #ifdef _DEBUG
    # M+ O4 }# W6 L
  19. #define new DEBUG_NEW
    % S6 G. U7 k0 p1 b( d+ m
  20. #undef THIS_FILE. b. Q+ w- F. Q
  21. static char THIS_FILE[] = __FILE__;
    5 W' y/ t2 T, I: I
  22. #endif
    # i8 _+ ?3 o/ Z  ~6 U
  23. #include "SkinResDef.h"
    ) T  s- _7 u4 Z& ]
  24. #include "ChangeBG.h"
    - U) b5 K7 O0 L: \. Y
  25. #include "AFXINET.H"9 M. F4 M9 \. @  Y" q0 w
  26. 5 i! {7 T$ O, N
  27. #define TRADITIONAL_CHINESE 0
    ! r5 ^1 a9 A' c" I" o7 _% h
  28. #define SIMPLIFY_CHINESE 1
    - }! n! j" G5 o- j+ g
  29. #define ENGLISH 2$ }$ ^7 m* _& u* }- f7 L: h
  30. int m_iLanguage = ENGLISH;' W! b' C5 R, v6 P+ j
  31. /////////////////////////////////////////////////////////////////////////////" n! b8 H* M6 p6 j8 k
  32. // CRevAppApp$ a" L3 A! j* r4 ?1 n5 ~

  33. & y: W  X( ]- Y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp). h) c0 m) j, v* L5 ^
  35.         //{{AFX_MSG_MAP(CRevAppApp)6 i- h# z1 c% Z! t/ A4 ^
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.- Z* W8 Z; U% t! Z
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!! P% ?2 f  ~. t8 I" w
  38.         //}}AFX_MSG  V4 k- W6 T$ [% v, M8 b* ^8 G# T
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)2 B! ^/ O$ K6 o! G% }  m9 q
  40. END_MESSAGE_MAP(). K+ W" R! [# X, M( E* p+ a# I! ^
  41. 9 ], f9 Y3 {( s
  42. /////////////////////////////////////////////////////////////////////////////
    - f! S4 ~  j7 M" V6 Y, V3 K4 u
  43. // CRevAppApp construction) v, Z( `  E; s% S/ F+ o3 B+ T
  44. 1 s% a# y% s6 \1 K9 R
  45. CRevAppApp::CRevAppApp(), F5 B7 {0 P) w# j* i3 E2 l- P1 ?5 O* b
  46. {
    2 L( K& ]  ?( Y) r
  47.         // TODO: add construction code here,
    3 h2 b: s. K) i+ }4 K2 f# S
  48.         // Place all significant initialization in InitInstance
    ) T  D) U( J3 `  g
  49.   bDisplayIsBig5=FALSE;0 `4 Q3 p1 F( K1 ^  s) N+ \
  50.   bRestartUpdater=FALSE;
    & r3 ]. c5 \" w- b; ~% I- K8 G% k
  51.   bFinishUpdated=FALSE;
    / q) r+ b  o2 I
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;# |: N/ q( G0 H. q( }1 [
  53.   InitChangeDataBig52GBKS();
    " P3 L7 s1 K7 p' f9 D- a+ c2 F% }/ R
  54.   InitChangeDataGBKS2Big5();
    0 O' w8 S7 I( @5 S- L5 D
  55.         //
    # d$ u6 M0 U; R8 V7 r
  56.         bClickRunExe = FALSE;
      a+ D- j; ^. T9 o
  57.         //  C7 r: V* j" n! {& o
  58. }9 K8 c; j) i7 s: A0 X
  59. 6 f, O7 i; L7 x2 [0 B
  60. CRevAppApp::~CRevAppApp()' Z3 X2 ]4 }/ H% }8 h) {1 e" Q
  61. {
    4 w9 [4 Z6 `) V
  62.         // TODO: add construction code here,# C0 ]+ J% x1 u3 a* k4 q9 ?, ]) p
  63.         // Place all significant initialization in InitInstance
    % v3 J/ c3 m& s$ T' G% u
  64.   EndChangeData();' v# B) V) Q$ r; s
  65. }
    0 _4 j% }1 G, q! I7 \

  66. " a  D6 }* N9 u, [8 i
  67. /////////////////////////////////////////////////////////////////////////////# ?/ s8 o0 y7 o# P
  68. // The one and only CRevAppApp object
    ) A* M7 }4 s! d  `
  69. ; x  C3 b7 e7 ^7 J+ ]/ q1 v
  70. CRevAppApp theApp;) k& x5 B0 i9 I2 g# E) E+ S

  71. + J. F  b: w# s
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)9 l7 Y* |/ b2 h" ~- _) h, z
  73. {' A1 |* @- ~/ L% w+ Q
  74.   int iEOF=0;0 w$ _7 {# t: o+ x& a4 ?5 N$ ^7 F
  75.   char szTempName[MAX_PATH];' v7 S4 Y( v2 D2 c! t
  76.   *szFileName=0;
    3 h$ p8 W) ?; Q/ X
  77.   iEOF=fscanf(fp,"%s",szTempName);! b8 u! |/ |6 D0 P, u5 F: P7 z
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
      ]. S2 k' @0 g8 W2 ?
  79.   {
    ; Q/ f8 O. ~$ W5 Y4 m# m" Q8 F
  80.     strcpy(szFileName,&szTempName[1]);2 A* F. ^) g7 K, |
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    - Y4 t& N0 B/ G% m( p' G
  82.     {! P/ f3 t# N. \# s( ^8 \
  83.       iEOF=fscanf(fp,"%s",szTempName);; z$ S) V: H$ L' `. X; {2 i! e
  84.       strcat(szFileName," ");: `6 U0 B5 K& n. D- Z) O( `
  85.       strcat(szFileName,szTempName);1 h0 u1 }0 {4 `/ F. J9 b0 Q" j, }
  86.     }5 g8 f/ \' o) x' V. l2 ~2 e
  87.     if(strlen(szFileName)>=1)
    4 e4 {0 b$ v8 i4 t/ X. \
  88.     {% l9 r5 o5 t1 l  c! ]6 z' Z. O
  89.       szFileName[strlen(szFileName)-1]=0;
    ! X" p8 v" ?, p1 ~2 C
  90.     }
    / e# P9 b- `! x, X4 \
  91.   }
    9 m6 @* A" R  T0 C3 I
  92.   return szFileName;
    + K; r: e5 |# Z) D5 g# _
  93. }
    . o; f( I" m# j& i* S: h

  94. ' {+ x, }* F5 ?" e$ a
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)4 P$ N; v( i* ]8 y  ^* w0 R
  96. {) ~9 i* i2 N* }9 A$ i6 o( C$ c
  97.   FILE *fp;
    * o; R' f, O8 x7 q
  98.   char *key=NULL;
    + b/ U5 s; H5 z! ?7 }
  99.   char version[MAX_PATH];2 ]& F5 {" B6 j' N9 i0 ^/ `4 V
  100.   LPUPDATEFILE file,olds;
    ; L( d- ~; ^. e) N% v
  101.   std::map<CString,LPUPDATEFILE>::iterator p;: [4 Z3 a" Y3 |6 Q! S1 ?

  102. 7 q$ ~4 F& U5 H/ w1 A+ Z3 Z8 ?
  103.   UpdateList.clear();
    0 N; ]- v% l& R# W# w+ K6 E0 K; k
  104.   UpdateFile.clear();3 j4 @4 j: N' r
  105.   if(GetFileAttributes(filename)==-1) return false;
    ' Y9 ^9 |$ \+ [, S' {1 a
  106.   if(!(fp=fopen(filename,"r"))) return false;
    5 E4 N: S8 G/ _* I: k; D' ]
  107.   fscanf(fp,"%s",version);/ S" z1 \  O5 _/ K2 y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }" |$ Q7 F6 j+ E+ L+ [
  109.   while(fscanf(fp,"%s",version)!=EOF)4 \$ v- A  N+ P9 W0 M: \
  110.   {  \/ B; {1 G9 }7 c5 h/ \7 @
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. x: w( M- U1 D: n6 Q$ A1 m. }
  112.     fscanf(fp,"%s",file->path);* A9 P  X' P- ~5 m  h
  113.     ReadFileNames(fp,file->file);
    1 w( T% k2 {; K  D! c' `
  114.     strcpy(file->full,".");
    ! I. I, U$ {: ^2 i0 w- B
  115.     strcat(file->full,file->path);
    * Z7 Q' r7 x- H( e7 Y6 m( }& V2 W: P
  116.     strcat(file->full,file->file);
    3 {+ Y1 l% n) U8 F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ( x% J0 n% r+ n5 n/ z
  118.     {$ `4 P2 {" \' F! M' n$ ]! t! K+ y
  119.       file->vers=(float)atof(version);6 p3 V8 M8 L1 d
  120.       UpdateList.push_back(file->full);+ l' R' @1 _# F% V; ~
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));8 W2 _3 F0 F' i& W8 Y: [
  122.     }
    2 ~& x0 p" e- e% W
  123.     else
    # n9 F) v  u# }7 R6 I+ i
  124.     {5 N- r1 Z/ o7 O1 n) ~' c5 P5 ?. Y
  125.       olds=(*p).second;5 B6 e& C: @; }
  126.       if(olds->vers<(float)atof(version))
    ! s( p. J4 Z! `% T
  127.       {
    ) y- b( D' A$ T2 }1 e- h9 O& P
  128.         olds->vers=(float)atof(version);
    : d1 q0 O1 _# c- ^1 h3 e+ K) ?
  129.       }
    & h" `+ s' k1 D1 l
  130.       free(file);3 R3 C8 P* z; X# D8 b
  131.     }
    % I5 S5 l! ?  B6 E. p- t
  132.   }
    # {* X2 N/ [1 ~7 Z
  133.   fclose(fp);3 H( f; w/ S8 W5 e+ [! u
  134.   return true;
    7 g( _  {- d* d( {
  135. }
    3 r7 r5 h7 L+ _7 N) C( [
  136. 0 `. \. R* _& E" V( d
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    9 E# @4 s- f4 Z. W
  138. {
    & i9 s: B3 ?  a
  139.   TCHAR  szFull[MAX_PATH];; A7 T( l* D$ `$ K7 \, T8 g
  140.   TCHAR *token,*inter;+ T, L7 K7 B9 C; q7 f
  141.   *szPath=0;0 d5 `4 M3 p3 ^+ C
  142.   strcpy(szFull,szFullPath);
    9 j( F7 o/ i# B% w. f
  143.   token=strtok(szFull,"\\/");5 v: p3 G5 E& y* }) i4 w& [
  144.   inter=token;
    # h4 M* K3 |: \- n- w
  145.   while(token=strtok(NULL,"\\/"))6 a, C- M4 V  {6 e
  146.   {
    7 C3 B  Y2 [6 @9 K0 ~; l. w3 `
  147.     strcat(szPath,inter);
    ; y0 Z1 n# [$ ?5 |; g
  148.     strcat(szPath,"\");
    ) m2 l) R& p, z- [1 P; z: G
  149.     inter=token;) k6 y/ w  t. V7 m& G% e
  150.   }0 v" n% x3 m( j( p' x: p
  151.   return strlen(szPath);
    & K1 C: E& }# g! X
  152. }7 ?  |3 a+ z7 V
  153. ; c0 q5 ]0 _: S) I0 o# G
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    . j. @% h( x6 e( v2 l+ v8 n
  155. {
      ?! r# B* D) G0 V1 p
  156.   DWORD attrib=GetFileAttributes(Target);
    / V$ m2 x7 {5 @6 y& N" X9 p. ^
  157.   if(attrib!=-1)' t* c# v/ O/ E" ^6 v3 S% I
  158.   {+ @1 n; a: B2 }( a- P
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    * q; a: i& C8 n+ j& Z: F# s
  160.     {
    8 H: o. p! I/ c. d9 ?
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);6 w3 R: h* r8 X7 z( i! O
  162.       SetFileAttributes(Target,attrib);
    ! u' I- W( G$ K0 q0 f* B/ `
  163.     }
    ( a) T. _) ~9 n
  164.   }
    2 w8 d5 B) X5 Q) o
  165.   CopyFile(Source,Target,Erase);' M+ x6 ~' ?, `1 {  M" B9 D2 o, g6 x
  166. }/ W, o4 p$ b  Q2 |) v! M' L
  167. ' t% j( D& p+ i* Z% |
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)# a9 j% ^& q7 s9 j. g0 Q9 G
  169. {
    # h* m/ \, O1 p1 g# T
  170.      FILE *fp;
    5 n- S  m% i4 W/ W. Q. L0 Y
  171.      char  szBuffer[8192];
    ! X/ o, A3 `; ?- V( S
  172.   va_list  argptr;: ?# \& ~2 D2 e' I* p; F1 U

  173. 3 g! ^- f1 D4 T2 o# v
  174.         va_start(argptr,message);+ b' \, m8 w1 v: K1 n7 ~
  175.         vsprintf(szBuffer,message,argptr);
    ' S7 M4 W. I! K3 p! C$ i! J" I9 E
  176.         va_end(argptr);
    . o/ ^* n& ]+ \8 w
  177.   fp=fopen(FileName,"a");/ o% O0 `/ P+ N6 F6 X  j. j: C" E
  178.   if(fp)
    6 g& o+ f" t5 @+ `& f% ]) K4 w
  179.   {
    7 y! a4 w0 ]% q/ r9 ~& H4 u
  180.     fprintf(fp,szBuffer);
    ) J; Y6 B) i1 Y( g- z% R
  181.     fclose(fp);
    4 O4 }2 s# Q5 r1 }6 x
  182.           _flushall();& O( }' l- r: _- r
  183.   }
    ' K" I1 a8 @' p2 [. J
  184. }
    0 M* f# I7 a2 s- ~2 Y/ w
  185. - p1 g4 F2 z9 p3 Y, k7 V  y8 O1 v
  186. BOOL CRevAppApp::Fclearf(char *FileName)5 L4 q; g0 v. F! {
  187. {
    % H9 K5 z+ ?  \; \) m
  188.      FILE *fp;) X8 e6 \5 S3 @; B6 ?+ T  q  p2 E
  189.     DWORD  attrib;
    ' p, o7 I8 h& P- Y  I8 K  e/ S1 L
  190.   attrib=GetFileAttributes(FileName);* y. x* c% Y, p  p. o4 i
  191.   if(attrib!=-1)  D) O/ l+ Z& D5 [0 d
  192.   {
    ; B' j; N' o3 A, S" ~
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);8 h) E7 B/ d3 [9 r% _- L6 X4 [5 O
  194.     if(!SetFileAttributes(FileName,attrib))
    ! B( A6 |6 y& u, t4 n
  195.     {
    # v  }) r, `. ]+ _
  196.       return FALSE;0 W6 V: _0 _8 v/ b* u
  197.     }
    % s9 t7 Y1 F' A6 C
  198.   }
    ! T% R$ b2 W! i$ X
  199.   fp=fopen(FileName,"wb");
    8 v3 d/ c* W, F
  200.   if(fp)
    % V" ]% r# }3 {$ k1 c
  201.   {
    # ]2 M0 h( T* O' c( N, h" {
  202.     fclose(fp);
    . Z( M. L6 v3 f6 b; O( J. C$ r4 f  z
  203.   }0 I: h3 u: `9 Q3 D4 m
  204.   return TRUE;
    % w# O) p! f5 Y
  205. }
    + [( X3 {7 u: r' n; {
  206. # e0 L0 s8 E1 y8 i
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + Q/ a$ q" W7 r
  208. {
    * n6 F& ]; d$ R0 d
  209.   char filename[MAX_PATH];
    ' z2 N# x, q7 |0 b( ?4 m0 @; O
  210.   LPUPDATEFILE file,olds;. q) i7 R  q1 t# e( D- H& g
  211.   std::map<int,CString>::iterator i;
    6 F  g) T# A5 w" [
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) @, q% d" p/ y$ I
  213.   std::list<CString>::iterator l;  u, m. r* J6 w- l, l- \- d# ?1 v
  214. " Z( J1 R( p+ T1 ]5 c) x6 F+ I7 t5 p
  215.   if(bFirstUpdate)  C1 i! N, c$ Z- s' Z8 p' o4 D
  216.   {
    ; b  T* W+ y1 s
  217.     dwCurrFile=0;
    7 C$ i" C5 Y& e0 m, L1 U5 `. h! ?4 ]7 A
  218.     bFirstUpdate=FALSE;* B0 y3 ~  b* Y0 r9 K1 E& \
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). \/ h. ?) |  T: k
  220.     {0 Z6 n* |% v. _" p: e4 f
  221.       dwTotalFiles=UpdateLocal.size();+ x" N$ Q1 x9 T. _7 Q
  222.       dwDownLoaded=0;
    0 Q7 |1 F' B. v0 ^1 l
  223.       bSilentStep=FALSE;
    8 g, O0 A) h0 v  ]9 }6 ]
  224.       bCompressed=TRUE;; _  A2 x' ~, v0 S+ p( U4 O
  225.       strExtLocal.Empty();
    & S& R2 b+ g3 h8 g( M  @
  226.       strFullName=(*i).second;4 D/ ^3 p: p+ i# V8 x
  227.       dwProgramState=AP_CONNECT;
    ! ^) b( {3 p0 ~5 }3 X+ p4 c' B/ J
  228.       return TRUE;
    ! Y" {, d+ g$ @+ G; P) I; L
  229.     }
    , J  `, A2 K* A) a- ~4 o
  230.   }7 K& f, M+ G% ?, M
  231.   else if(bRestartUpdater==FALSE)2 J$ j: k* a: ~8 q$ z: _( D* E% q
  232.   {0 U( C3 Q) E) n, o6 G% r9 ~- g
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())% z- v, x6 Q" x1 \. r  |% ]1 M( h' p
  234.     {
    $ k" ]7 {* S6 ]9 g% K  U
  235.       file=(*p).second;* h: k; c+ I; M' n
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())6 N) R7 s; w& u' k0 C
  237.       {
    & f% U2 M4 v+ j
  238.         olds=(*p).second;
    * }# |' e8 T) t8 N; g1 r# A$ B8 [3 P, G+ ~
  239.         olds->vers=file->vers;/ b3 r4 B5 y$ n; ]. b# p
  240.       }
    " K+ L3 X0 A2 _2 }
  241.       else  |3 G% L1 g# D2 e6 P
  242.       {
    7 g& [9 Y6 W& \" F! ~6 @8 c" Y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - `7 }  d9 `( j+ F
  244.         memcpy(olds,file,sizeof(UPDATEFILE));& M+ M; y. X) f, r; ^4 y7 ]* w
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    2 Y4 ]1 j8 m- e. S6 `& C% W
  246.       }
    5 |2 E# M3 a( x# R( Z, o+ J
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    : C' h5 f7 A  S7 G* J# Q2 L  q  f
  248.       sprintf(filename,"(%s)",file->file);
    6 @  v+ \4 ^9 f8 L$ |
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  t: u1 V2 ]5 t4 i3 Y" W
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    8 W6 r" v! v. |+ V* Z  `4 ?
  251.     }
    4 ?" G4 B# z  g: ?" B* v
  252.     dwCurrFile++;! k* K* G7 U- a7 N
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) X3 j3 q9 x. x" [4 o' v
  254.     {
    9 e+ q8 N9 ]9 D+ n7 z4 b
  255.       bSilentStep=FALSE;
    4 s' b$ \: u) ^( B% q  b3 G
  256.       bCompressed=TRUE;
    ! {6 b+ n; Z7 u/ ~' \$ y  C
  257.       strExtLocal.Empty();$ G) Q! Y) N8 A! H
  258.       strFullName=(*i).second;
    $ {1 R/ N# [$ f+ c
  259.       dwProgramState=AP_CONNECT;& ^# L6 O& k. F9 ^4 |5 `' E, a
  260.       return TRUE;
    * U& M  H) W2 D: j  q3 ]9 l
  261.     }
    6 w3 T* G- F9 ?: C" Y
  262.     if(!bRestartUpdater)
    % i4 b, z" Z$ B9 c
  263.     {7 J  r4 a" m3 ~, X# k6 m; L8 e
  264.       int iCurrSize,iFileSize;$ \$ G* a& H7 l
  265.       iCurrSize=0;# d* r" q/ D( K' J
  266.       iFileSize=UpdateList2.size();
    * d9 M4 Y$ o4 f0 g+ v9 J: B
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");- ~' [) U( r# c( |7 t$ [" e, m
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    5 L9 t7 ]5 \. n$ x8 F1 T5 {
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");, E+ U- k' k+ R+ m$ Q- Y' \
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & m" G/ D9 v0 u
  271.       Fclearf(".\\update.dat");
      R: w1 u+ S$ S# g0 H) m
  272.       Fprintf(".\\update.dat","Bloodyf\n");( {! z, m5 {1 s9 q: K+ g  Y% |
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++); E5 s3 O! g2 A' i
  274.       {/ Z3 e# A7 M& Z' L
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())$ ^, B+ l* P9 G& m
  276.         {
    . q6 h( n; E' {& c
  277.           file=(*p).second;9 E& v" _' ^. x; C2 v( V$ s' ?
  278.           sprintf(filename,"(%s)",file->file);1 d" X! g/ Q$ F: d
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ ?0 V' y* E5 Y6 c4 b3 Z, g, L
  280.           iCurrSize++;6 Z: U3 u* `" g0 W; h
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    1 r! A- H+ R1 i9 Q( \% w
  282.         }: s, j7 p, u: ~9 J& L1 C% C* l1 P2 o
  283.       }+ @: z7 o# ~8 e: R7 s3 x
  284.       unlink(".\\update.txt");
    9 j& ]3 A3 \& {/ g2 ]+ W% n% H' X& p
  285.       unlink(".\\update.tmp");1 m$ r; `" ?4 E8 A
  286.       Fclearf(".\\checkversion.dat");
    6 G! b( c2 q$ u" g' o
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' I. t& b' |) ^% T2 r
  288.       if(UpdateLocal.size())
    ( B! Q# z  R/ I3 _- R+ v
  289.       {- H- s, j* Y4 [$ n
  290.         UpdateLocal.clear();0 Q: ~. v/ e, h7 E
  291.       }
    4 O) @# e8 u6 j5 I5 Z; y
  292.       if(UpdateFile3.size())/ G$ ~9 j) H5 ]( {
  293.       {* b4 H3 `% E. O
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 h0 e4 ]" |6 R% E4 m
  295.         {, u9 Y* p" I& z$ x2 x
  296.           file=(*p).second;
    6 ~6 b# S, I# {; j" ?9 v
  297.           free(file);9 _! C6 a* x  l! @3 R7 }
  298.         }/ z$ j/ ]: Q, [+ a
  299.         UpdateFile3.clear();8 o) Q& W9 X/ C' P+ ?$ ?
  300.         UpdateList3.clear();8 H/ u' q+ G( g5 N& F* o+ c
  301.       }6 n. P% Q7 s' \, I6 ]1 X+ e* l
  302.       if(UpdateFile2.size())$ {; Q% N8 V' H8 {$ n, s
  303.       {( Q* Y3 z; P! O' m/ {
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% m# Q1 p. \0 i! x* b' B3 P
  305.         {
    ) r2 ?& _7 y4 l# @9 s
  306.           file=(*p).second;
    * e* w- Q% H6 ?6 C/ g
  307.           free(file);+ u% p) u1 \" |% ^' z# Y2 B
  308.         }
    ( R: k9 a# o$ l( @
  309.         UpdateFile2.clear();. k0 e3 v+ P6 L
  310.         UpdateList2.clear();
    + g) s: ?: j$ o0 g2 t" g* }
  311.       }
    - A/ p6 E2 ^# z5 E6 u
  312.       if(UpdateFile1.size())& P: f5 l$ B4 s2 ~, q
  313.       {' m( u2 s% r6 b4 m/ W+ o" z9 A
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - {% {0 P6 x+ ?, [. ^: q5 f
  315.         {6 z5 Q: L! ~6 D6 c3 m
  316.           file=(*p).second;6 E8 f) ?+ h7 e1 z# t8 Y4 |5 g
  317.           free(file);2 i1 ~  l) u7 I
  318.         }% ^" k0 R: o( Z* f& e% F4 ~# m( X
  319.         UpdateFile1.clear();( R# e: d, {; e; Y. Z2 w
  320.         UpdateList1.clear();, [! G% c( l8 r
  321.       }* D, i* a9 Q. {1 M9 S
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 `. m& E; o2 f+ h% ]
  323.     }
    , m; o: ~( H4 ^$ q9 h  d
  324.   }
    ; q! b$ O+ c6 f& [
  325.   return FALSE;: H* F: c" J3 ?
  326. }
    % {4 z, [- N8 r4 u
  327. 4 y8 Z3 d- @4 n# m. M
  328. void CRevAppApp::ClearAll(void)
    2 U6 S  q- D3 C# k4 y8 C
  329. {' y( r+ {+ i: I- R2 b% `
  330.   LPUPDATEFILE file;% R+ o9 z& z: Y6 n
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% ^# T/ u6 H1 Q: u0 T& r
  332. / J# g& @6 |: _$ S! w
  333.   if(UpdateLocal.size())" Z4 p9 J1 }% u! ^+ m% `# Y
  334.   {! V. \1 v6 c/ M* ~3 I
  335.     UpdateLocal.clear();0 J2 T( x- V$ _9 r
  336.   }
    % K" d8 `, s7 J( X
  337.   if(UpdateFile3.size())$ p- \8 v. z/ b+ `
  338.   {
    7 Q. |4 n0 E& c6 k5 E
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); ^- b; C9 F. u- {- }6 u
  340.     {9 o# _' a9 a) A; t
  341.       file=(*p).second;5 |9 a9 \+ g0 G: [, g  l& Y
  342.       free(file);+ @; V; \7 @0 f0 @- j! ~, d2 _. g
  343.     }
    6 K: r" ]% H5 X
  344.     UpdateFile3.clear();
    9 b) t1 g0 V7 u4 w% c4 }5 k
  345.     UpdateList3.clear();  H; U- _  g6 P5 T: P* P' c
  346.   }
    8 _" f, `1 f# c
  347.   if(UpdateFile2.size())+ N  [. m4 D8 d  X' `
  348.   {0 q) f, {" y. y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    2 Z& M3 `* \* Z, b
  350.     {
    6 S6 b2 t9 S3 O! r& C# d( a; P9 n
  351.       file=(*p).second;
    : l6 \; @, j/ ~( z
  352.       free(file);$ k( q* w2 _/ O  A
  353.     }1 c) O6 H3 t2 G$ i' ]# [/ w8 x1 I
  354.     UpdateFile2.clear();- s7 E% }+ @+ N
  355.     UpdateList2.clear();" O2 @2 G+ C+ L* P8 w
  356.   }- _5 q" d, p+ \' g& ]7 W
  357.   if(UpdateFile1.size()); \4 _6 P; ]4 d9 Q
  358.   {
    0 o! r& ^6 b) p; y1 E3 n
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & o/ v& W6 D" `
  360.     {) |/ [3 j; _# O9 V, ~8 T
  361.       file=(*p).second;
      ]8 I" }% ~$ V: s. p3 Q) q$ G8 j
  362.       free(file);  f! ]3 e  z+ W; Y% D' y  R0 o
  363.     }2 m. E5 {% C. A
  364.     UpdateFile1.clear();
    ; i1 S  G/ G% O& I3 ^7 @/ d
  365.     UpdateList1.clear();
    ( M/ k  g8 c0 \  r) G8 U9 Z2 x! X
  366.   }) @& R& o5 l% D
  367. }  ( C- z! v' m; U; x* v
  368.   
    % N. H2 I  s. }- X# n( D4 C
  369. BOOL CRevAppApp::CheckLocalVersion(void)/ K  S  s) \; w$ A- g
  370. {& C$ ~$ n3 |2 q3 D8 W; Y" b% Z3 r
  371.   int c;7 }$ D2 E5 H' d! |* ^( t% _% {" ^
  372.   LPUPDATEFILE file1,file2;: k* v3 E+ D6 w
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ) t) V) S2 _4 F' @; B4 W- o
  374.   std::list<CString>::iterator l;
    - p* O% A. k, L* ?0 a# y8 p. v- K
  375. 0 _) g6 e" _7 n3 N$ o& |3 }
  376.   UpdateLocal.clear();4 W% s$ n4 {* |# R  t9 Y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);8 u7 x/ s  Z5 I* g) r8 b- C. s
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    / u- u' F+ x! k3 _2 {
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);9 a3 v! L9 Z$ C+ L
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);1 u% I$ A# Z$ t3 \4 \! \4 p
  381.   if(UpdateFile3.size())
    / y& _' ^5 \( }! S4 a1 B
  382.   {
    2 k1 N5 \  w; a$ j1 M
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    9 z1 P' M  P1 P# c
  384.     {
    & d" }& N) O8 H! @2 T4 ~
  385.       file2=(LPUPDATEFILE)(*i).second;
    - S0 g( U/ f& c& ?% _. P
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())% t: _1 Y" Q8 t
  387.       {0 ?+ S) K; ]3 P9 v
  388.         file1=(LPUPDATEFILE)(*p).second;
    , H8 z) |- j1 m/ k6 M# ?
  389.         file1->vers=file2->vers;- o8 Q1 i" S$ \9 G5 \
  390.       }
    3 O3 @$ D2 g3 U  N
  391.       else
    6 N, [2 g; `7 N
  392.       {7 I4 P! Y- T- N* ]7 _
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% |) w$ b1 _) J; [! j
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 k5 T2 R3 \1 _' J3 J/ X# [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));% i4 T5 \& s+ [2 M1 x3 n4 M, u5 B
  396.       }
    # @3 H: k+ @$ u# X( E7 |$ a& p5 q
  397.     }
      t8 q# x  F* r0 m9 O
  398.   }
    # {# h. O$ B+ M+ S) X' V
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ a$ G& U7 ?/ ^( X+ G
  400.   {. d# G3 Y4 M. B
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())& P( n& I% x% A% s1 L
  402.     {( V5 T& o" g9 o
  403.       file2=(LPUPDATEFILE)(*i).second;
    & x7 O" ?0 X9 |: D- a
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 k/ L0 v* v2 r
  405.       {4 A5 C  K8 Z$ X+ t) M
  406.         file1=(LPUPDATEFILE)(*p).second;, T$ d2 E: h, _& {/ ^; s) z# C/ ]
  407.         if(file1->vers!=file2->vers)
    / S7 J. H  d. ?4 i. x
  408.         {  [, {# R2 r5 K
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! V1 N5 l" [) R: v+ n2 z& U3 y3 @
  410.           c++;! ?6 z! ]; _, g0 C3 ^3 Q8 k- p
  411.         }: W4 N$ ?  c  d. g% u4 q
  412.       }
    . i& u: B: r1 A$ M
  413.       else, }- ^$ k5 S- O+ C) T9 y3 E( E
  414.       {. ~: F8 e2 ~" Q5 c3 I% ~  n
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: B% z" S6 y0 z( s' r
  416.         c++;
    ; `3 q- k& t0 r( y" B
  417.       }
    - ?6 j( m; h: ^+ \+ l
  418.     }6 D, d3 f: j; W: {4 ^) ]. }
  419.   }
    9 y! F5 v( T8 A
  420.   unlink(".\\DownLoad\\update.txt");
    * J; q" o% |: H# J% L. ^9 A
  421.   if(UpdateLocal.size()) return TRUE;3 @, h1 c' a( y. a
  422.   else                   return FALSE;
    * a% B/ G0 N3 X6 f* R2 W# [0 Y  ?
  423. }# U3 g1 [! f9 m; E% ^8 E7 z! u4 T
  424. % {, M) x7 u0 U) C+ w
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"# p' ^7 v' B$ ~0 x! A1 H2 Q. d
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' i' J/ b; l5 \, B

  427. 8 T! o2 W' i% ?: F
  428. 0 c: U3 O" b* Z5 q& B) m

  429. 7 C8 l9 K* z; Y6 u) b
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    , o" G) T. {; ~
  431. {
    # V: n# O- @/ i2 t/ I3 t+ F0 v
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ; k5 z8 R3 t  P
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - c) {7 m$ E9 f4 S! o
  434.   {
    - f9 y# Q, T: @. \
  435.     char szLanguage[50];4 }+ Q& A1 N* l7 q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 o; f' g2 Z/ O( W2 R! C# P
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + ^6 c) I, }7 N& M! u5 N
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, d& ?0 E6 f! Z. J; C4 N0 _
  439.     else                                   m_iLanguage=ENGLISH;- H# W# o( q+ ^8 w/ A
  440.     char szRegister[100];& Y, W0 K( R; D
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) G5 s* r& _* j  H
  442.     strRegsName=szRegister;
    : h: H" d  i  o* c9 Z
  443.     char szPatchURL[100];
    7 y& a; n! H7 R! b! C
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " k; B/ u6 y! f$ u+ j0 C$ Q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , i! x: ]: Z5 X  @& [7 C  u
  446.   }
    % g0 e+ X" X* G& r& c! L7 D' O9 R
  447.   else
    0 ]! n/ m# F5 c0 q4 A, ~$ q* c; x
  448.   {
    7 |" F, y, g  j! f4 r4 A) x. C- {
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    5 K1 A- X! a1 t  A
  450.     strRegsName=DEFAULT_REG_URL;- x$ ]; w0 k7 A) v8 Z$ p. `
  451.   }! _+ O& t$ \0 c
  452.   if(GetFileAttributes("hosts.ini")!=-1)& t! ]) W- `  Y  s- J8 ~0 F+ ]5 @9 Q
  453.   {
    3 X. _0 K" c# @
  454.     char szIP[50];2 L7 v2 ?' J+ D. j. z3 k( Y
  455.     char szDIR[300];
    9 G8 R% C7 x' F7 b/ i& d' p
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    0 }( N2 ?$ |! z/ w
  457.     {
    ) H" q: i/ N8 Q- m0 i
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    + F3 Y+ ^) P! H2 \8 l0 g  b- q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");  U" k+ g0 _" H
  460.       strHostName=szIP;
    8 D7 v) i) j4 D
  461.       strHostPath.Format("/%s",szDIR);5 F0 E8 ?" Z) z0 V
  462.     }5 Q, N* J! a0 M/ A
  463.     else
      I! i6 W( r% o8 l. ^: y
  464.     {- B0 Y% Y* v# Z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; e1 B; W: ?8 B7 e$ c4 n, B  f
  466.       {; W* w' {  L' X* B+ i- z
  467.         char szLanguage[50];1 Z# K( B  g0 v- e
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 `8 a8 \2 @2 Y' u) ?
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 E: V+ Z% w2 p6 A
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 @7 `3 Z% I+ F9 v6 b7 d8 v8 j
  471.         else                                   m_iLanguage=ENGLISH;/ t5 B; {& @+ P9 p6 k
  472.         char szRegister[100];
    - j7 h6 a1 a- n! V/ @( p) G
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    9 t/ v3 W" e1 @9 ^
  474.         strRegsName=szRegister;  O2 ^# n; D7 S8 d/ I( m
  475.         char szPatchURL[100];
    $ p2 X: r+ l4 o2 d3 g8 V& c
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 N3 x. z* ~- m; G( S
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. [. A& E9 s" E
  478.       }
    7 m9 S$ m+ {% k3 V
  479.       else$ s. D. T" ]/ d" i: w
  480.       {1 N2 z9 Z+ t7 Z/ ~
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & N$ J. l, M1 @2 q
  482.         strRegsName=DEFAULT_REG_URL;
    * J& A5 a: }4 x0 T
  483.       }
    5 q" H: J  p) c& P8 E
  484.     }3 P1 L  B5 Q1 I. X9 q
  485.   }. E8 [7 J8 l2 _" C
  486.   return true;
    ! S; L5 K& E+ {4 }4 ]; r
  487. }, |" K0 D- r6 {) D
  488. ( d9 P2 d+ V* a) l, i
  489. #include ".\ZLib\unzip.h"
    ; ?: U% X4 j- d% ]7 I
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);1 X" X; f. s* w2 j5 I; z. k
  491. /////////////////////////////////////////////////////////////////////////////' o/ @$ q: I& F4 B
  492. // CRevAppApp initialization  c7 u/ I6 K3 }" ]: m2 l
  493. 9 V# h5 k' x0 e8 K5 r6 J1 V* M
  494. BOOL CRevAppApp::InitInstance()+ |/ x7 S& C9 L. k3 r* z
  495. {
    7 n) w0 c# e3 Y" e: O* P
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];, [& \. h/ Y4 d! k9 w. a6 Y+ W

  497. 0 K. L4 Y6 O, N  |" D$ K9 W: T
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);% w; f8 d+ t( i' T5 w0 c6 a. ~
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    + c( f0 o: |) o4 F. u, ?- \3 R4 `- W
  500.   {
    $ o. z8 Q# _, z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");+ t3 O% x1 h; }6 [: R
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    9 n" y. Q% M) h: T* @$ l2 F
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))' j5 i' e+ w. U1 ~
  504.     {* I# E  _/ Z$ {1 I; K
  505.       strcpy(szPath,szPathTarget);
    # e- [) v2 G9 o4 S
  506.       SetCurrentDirectory(szPath);
    ) |* k/ {& l9 d/ W/ N3 z
  507.     }
    0 Q$ @1 |1 n) N0 f& S/ B% p9 |- v" O
  508.   }1 z' v& [" [' C
  509. #ifdef _DEBUG" Z% b! k5 U6 r1 `; b1 Y$ a5 f
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 w: I7 w. t! [. J7 E8 [# ^# w! ?
  511. #else
    % N- s6 s: `! t1 J) B- A; Y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( ~; y* P$ N3 ^9 v8 P0 a+ ^! p
  513. #endif# }/ Y6 A& T& I% [5 R  {
  514.   {
    5 m* f: {6 S4 C) m! _4 S  G
  515.     char tempFileName[MAX_PATH];
    9 T6 e' K8 j2 I. D6 q
  516.     strcpy(tempFileName,szPathSource);6 X/ E& t1 ~9 l' G
  517.     tempFileName[strlen(szPathSource)-12]=0;
    + P4 g; j! A2 C
  518.     strcat(tempFileName,"\\$CSUpdate.exe");% a( P$ z5 e) T5 s
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    - O; c0 A  o- p
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);% D# U" e- O. R% ?- _, I
  521.     return TRUE;2 r# M5 h& H1 d7 g  S
  522.   }3 t& B; s% [" y  j5 C
  523.   // Nuke 0118: Delete run.exe
    6 a  j+ q/ C1 q* u2 C, [
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    1 B( i. C% h* I1 E) k* k. U2 I
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");! i( g! V% A7 A* M0 d$ d2 w
  526.   if(!ReadCfgFile("Config.ini"))
    6 k  p  c/ Z- K
  527.   {
    ( f5 u: b, j2 S
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);1 {1 d3 A% o- k8 h- O) x" A
  529.     return TRUE;
    $ Z2 q( }" [0 J( ^
  530.   }
    8 A* l  H: f+ }
  531.   HANDLE mutex;
    + y# ?+ Z7 w7 k! b  _- a  k: G
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    4 t1 \! c% b* \: s% N& [5 N( \
  533.   {
    ( |7 w. C( U. l/ p% ~
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    - N* h" H+ R8 {; o3 w/ I8 Q, Q; f) K
  535.     {* h( C8 W( \1 Y" Y
  536.       CloseHandle(mutex);% c2 n' D: e+ O
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! a( ?6 ?' w( _
  538.       return TRUE;
    ( N/ p1 d# B3 \3 X- K7 S  ^4 H
  539.     }4 r* H. \* u! B
  540.   }  
    ) H6 M6 |) v6 @1 J8 v! ^# g- E
  541.   CloseHandle(mutex);& J* s. a5 Q6 X' i3 ~3 B+ S
  542. & `! E$ A; s3 c; [
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);4 b3 @4 p. P! m9 b! _! O5 \
  544. 6 T7 W5 m5 p4 L3 w/ V/ v' c! S( m
  545.         AfxEnableControlContainer();3 V0 i, U* Y/ Z: N% m1 H  Z
  546. " _; A8 p$ X" O8 v3 i
  547.   bCanUpdate=FALSE;
    6 u: ^6 k' E1 h  u& n
  548.   dwStartUpSteps=1;
    $ Q8 n8 U% Y' z6 T  ~" U
  549.   dwProgramState=AP_NOTHING;! b* s$ [$ L$ T$ J
  550. 0 t6 A+ l* }( \" w: v
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. d3 A# w! z; ]* U! G- p

  552. ) ^1 L5 d) W0 V' `
  553.         // Standard initialization3 \- O, J" D1 N7 q
  554.         // If you are not using these features and wish to reduce the size
    & d8 q, `: a- ^
  555.         //  of your final executable, you should remove from the following5 B7 P9 j* G# Z2 t
  556.         //  the specific initialization routines you do not need.8 N6 @+ p; d3 F
  557. 3 S0 i/ @( _- H: ~
  558. #ifdef _AFXDLL
    ) L7 K6 k3 H! ^5 F! a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL* N7 t6 l& Y. k( e' l
  560. #else" K: E2 X2 J. R4 t
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( h' O4 p8 @/ M4 A1 q( Y% u
  562. #endif  X/ u- J: h. A: ]9 R- O; A

  563. . K' C" t+ E' o" d: _. n0 I
  564.   dlg=new CRevAppDlg;6 M8 s8 J5 l; O$ P7 B/ s
  565.   dlg->Create(IDD_REVAPP_DIALOG);7 [# Q' d  I" e
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ) U) n0 |1 H( h0 `& I2 F: s  h  P
  567.   m_pMainWnd=dlg;( I, B7 A- \" R
  568. " o5 ~2 p; G% y3 n9 {3 X
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    $ O: Y  U: S( {+ u; x1 O& a
  570. 5 i9 P0 d3 P; ?/ ^: a4 a+ `0 U
  571. //  GdiplusStartupInput gdiplusStartupInput;
    " I* @: R  O& u3 ?% J
  572. //  ULONG_PTR gdiplusToken;
      ~3 |1 }- j* ?) @  ~" Z/ x
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);. p. V  L$ p% q$ \

  574. 9 p- Z0 f6 S- c
  575. //        CRevAppDlg dlg;
    ) p' o3 M+ Q1 M& g2 U
  576. //        int nResponse = dlg.DoModal();7 q* }* m) s# n# T3 [" m
  577. //        if (nResponse == IDOK)1 K) y' w1 f- j
  578. //        {/ x, F( `3 z! v1 ^2 O2 J1 p
  579. //                // TODO: Place code here to handle when the dialog is5 i' S6 h  B8 ]
  580. //                //  dismissed with OK
    ( c1 z8 g5 C8 Z- S2 S7 Z
  581. //        }( k3 y2 w& B* g
  582. //        else if (nResponse == IDCANCEL)6 p# I& K  }; `& d: b+ C0 T
  583. //        {
    ( f2 O7 E) H, _4 U' _- e- m7 T
  584. //                // TODO: Place code here to handle when the dialog is
    ' p/ M% G4 }2 w+ _, u8 k! O$ q
  585. //                //  dismissed with Cancel0 ^+ `5 J* j8 G5 S
  586. //        }
    # M* ^- U  T( A; m# L  |8 A8 S
  587. , P: R" O& i% m2 d# P2 S
  588.         // Since the dialog has been closed, return FALSE so that we exit the- s! A/ I8 c- k3 H) a
  589.         //  application, rather than start the application's message pump.7 a( F  I0 k( b: X. w! ?
  590.         return TRUE;
    : ]2 |) j# ^3 z- ~$ [1 F5 W
  591. }
    $ }' e, P+ L; a. @1 O
  592. 0 G0 r2 p4 a+ f, \4 W! e
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    / i# z8 w/ C" T% Q% [9 V. h
  594. {
    4 U" V. R/ N2 ?) F
  595.   int i;
    8 |/ R7 v$ ^3 h' i* K
  596.   char *szRet;
    ; `" v* `( Y- @: b9 g* b7 p

  597. , b( [' P1 b: ?$ A  A: m
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    9 |- g3 D. j2 m+ B( f- a
  599.   if(sztoken)
    6 C" Y4 E+ M$ \0 W- n
  600.   {
    0 j3 H2 M+ K: K% Q& T
  601.     szRet=&sztoken[itoken];
    $ ?1 N: _& ~$ ~4 B: Z
  602.     while(sztoken[itoken]). V" ~5 h6 F* G7 X) e' N
  603.     {% f& V0 S: F; N) M  z/ H" ~
  604.       for(i=0;i<(int)strlen(token);i++)- v1 E& @& G5 k; d) {  J3 V$ d
  605.       {
    ) h2 D% H2 |/ B6 N& s
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])& s  y# L! t+ d7 w$ Z1 G; G
  607.         {
    5 e, ~& \3 O1 `! j! P  |- C
  608.           sztoken[itoken++]=0;
    , m: u) F: i1 v% t' B' s
  609.           sztoken[itoken++]=0;
    5 c- v8 @" r& l) z3 u, }/ T  ~8 O
  610.           return szRet;; F5 X8 [' w6 P( S! {; e$ ~! U
  611.         }3 x) x6 _; j# T! d9 A2 d% k4 E8 l% N( y# D
  612.       }
    2 |) V$ g& i3 J; {8 E
  613.       itoken++;# B; W# T# H; k1 P( W; K6 a+ a
  614.     }& b. _0 Y3 x) s% u3 T8 Z+ @
  615.   }
    3 b7 U7 a# D" L3 |7 G/ B
  616.   return NULL;4 s: X' w7 j5 s  p7 H" p% F" j5 K
  617. }
    7 `& }, I$ P0 B/ E7 `$ _
  618. 3 z4 N) V) j8 s
  619. void ProcessProc(long Total,long Current)
    , m$ r$ s1 L, v/ u2 [5 b1 ^
  620. {+ d' Q- f/ @* x/ k. X1 i
  621.         MSG msg;
    + B/ O: D8 p) @, E' C
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);5 ]1 ]/ C+ l$ j( Y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' o( m$ J% ?* Z' M4 p" W2 [8 _9 j
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ) `9 _( H# i: Q* J0 j
  625.         {0 q4 Y! L8 k/ ]8 v1 n$ E% e
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ! ]0 J$ ^' l9 t) ~! x- i7 p0 a7 F5 p# s
  627.                 {
    % J1 p6 K2 X- A& a% Z$ A
  628.                         return;4 y' ]. p( {* @
  629.                 }# h# B* x# S( y* V
  630.                 TranslateMessage(&msg);/ [5 p7 g% f* }9 X7 j
  631.                 DispatchMessage(&msg);
    ' `; J% x4 Z1 i
  632.         }        2 r8 ]9 |$ m5 h; z8 {
  633. }# u3 h% ?2 V8 x

  634. $ O0 g7 B* F9 ^
  635. BOOL bFirstChar=TRUE;5 i" A1 P% F' Y, [! u) _1 A6 D

  636. ; \6 P  e4 Y9 ^: V5 E. o- {) d
  637. BOOL CRevAppApp::OnIdle(LONG lCount)& A% {1 C* F; U9 B- I
  638. {3 c7 L6 ?& P% _; W* x  E
  639.         // TODO: Add your specialized code here and/or call the base class
    & _7 m/ T! z9 z, N# p
  640.   switch(dwProgramState)
    2 o5 Z/ w1 D) D0 @. \2 y6 y  T
  641.   {: Q0 m  i# a6 W4 Z
  642.   case AP_NOTHING:
    . n( s- k4 |  S2 \& `; ~2 Q0 {
  643.     switch(dwStartUpSteps)
    . f3 e- p1 n$ b
  644.     {. q' O% g/ {: T* A. q
  645.     case 1:
    ! l- y$ H( A) D
  646.       {  f6 L0 `9 o% s
  647.         int i;
    & U% ~. R6 g7 m
  648.         CDC *pCDC=dlg->GetDC();9 b; F, a# k+ a0 \) \& ~3 D. k( Q1 {
  649.         HDC hdcwnd=pCDC->m_hDC;0 v& o; J: I' U- @
  650. //        Graphics graphics(hdcwnd);
    + ?: I4 B# T8 Y% ~$ x& |
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");) k8 j1 j# c# ^" j
  652. //        INT iWidth=bitmap.GetWidth();
    8 v5 a( ]* k+ u; y7 F/ y
  653. //        INT iHeight=bitmap.GetHeight();
    $ S* F4 {+ I2 ^' r# o/ v/ ?! X! |- x
  654. //        Color color,colorTemp;
    9 N% I" v( V; Y  G- G
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)- f8 U- v# N* p/ u( o3 s$ {/ v
  656. //        {
    & k  W  N6 F+ K& ^# m1 A% |  G
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( ]9 s" a8 ?% e! n& c
  658. //          {9 W* N5 t% q5 c/ a/ ^1 k- @8 z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ) P2 p3 q- {2 P2 {+ a+ q+ W$ A
  660. //            colorTemp.SetValue(color.MakeARGB(, q! R! }/ z( t2 t
  661. //              (BYTE)(255*iColumn/iWidth),
    4 C+ s$ `" J/ S7 s8 ^9 i% N
  662. //              color.GetRed(),
    9 b# m" K/ h# p* q* |! I
  663. //              color.GetGreen(),, M1 I: D! m6 N% C4 q  v6 `
  664. //              color.GetBlue()));3 _3 ]( r. ]; C; N9 g% n
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # m. k9 K7 [, e: [* ?
  666. //          }' G, N7 `- U. Y* @8 Y
  667. //        }% y" P' B- G1 X4 ^
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + v9 e% R* ?* o2 Q# L# E7 b2 ]7 I
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( {% w0 [% w4 W6 s# v9 V  _
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");+ |0 f" l5 p; D0 S9 m% d
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 c& S' ^- s  g+ d
  672.         for(i=0;i<240;i+=8)
    $ J+ z" k- P) ]% x, g0 z
  673.         {
    7 f; k# k  K0 N& N' l  l
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ L/ z. U, `5 Y& W2 ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . {0 G! o2 |7 \) F. ]
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % G2 n- _- c6 g
  677.           Sleep(33);0 t, f6 X% g' Y( x1 J; s4 q/ I
  678.         }& D/ ]. N6 O8 b6 b
  679.         Sleep(1000);: W# l" f8 K: d5 s
  680.         for(i=240;i>0;i-=8): \5 Z; a* \5 ]. S5 U4 Y
  681.         {
    ( S) P7 i' P% Y# m7 o, \
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; e% V- G- O% C2 W+ S7 S) v& W
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 [+ {9 i* C, w% _6 F% f
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# `7 ]: [' c% J  {, n" X2 c
  685.           Sleep(33);
    " k. f2 I; ]% Y5 |7 F- u1 Q% j
  686.         }
    ; w- H% Y, l9 |. W# R
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    8 e7 r: g" [# u) z* r8 v
  688.         dlg->ReleaseDC(pCDC);! P; H" ?3 r& P/ X7 v) a
  689.         DeleteDC(hdctar);, A' e7 y. Y) P% [
  690.         DeleteDC(hdcsrc);
    2 k( D- [2 m- Y+ Q- o% M* Q  a
  691.         DeleteDC(hdcorg);. l+ t8 Z6 d5 s7 T1 t2 x
  692.       }
    + |4 \* D& C2 k4 w, g! p4 c1 z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);" F! U$ w( r+ W9 f" M4 u% [# y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    & k2 o% s$ V5 m' b% L$ y
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 O3 @2 P3 X- L/ V5 e0 N  p
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");# y8 K4 ]6 K# b. c
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 o# w& I+ l7 p1 D1 V! p4 S
  698.       if(!Dn.Connected())
    4 d# a* ?1 j# G& ^0 ]& u$ B
  699.       {5 c4 ?6 _! {' Y9 t$ b& N' B
  700.         dwTotalFiles=1;  P) F' D5 r! J9 X. g9 k
  701.         dwDownLoaded=0;
    , W3 T3 H7 Y% a" \5 x% M9 r2 i1 @
  702.         bSilentStep=TRUE;
    ) t9 L" h6 f) U
  703.         bCompressed=FALSE;$ g& w; m+ U  P# D8 C
  704.         strExtLocal.Empty();
    ) t  l9 f) O1 X4 h# G! |
  705.         strFullName="readme.txt";, X. [- M+ A; H9 v0 R3 d& T
  706.         dwProgramState=AP_CONNECT;4 G9 k+ u; A+ T7 J2 x
  707.       }: H3 K+ b3 U" E1 K
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    5 H$ k! K* W1 {/ k6 I+ r
  709.       dwStartUpSteps=2;# U) B: F+ b+ E* B& k
  710.       break;
    & o6 R, A+ j( T* w  P% ?
  711.     case 2:. {1 c: j7 H& ^
  712.       {
      u3 }! P# K2 \$ L
  713.         int iEOF;8 _. C- ?! {% ^6 ]. T0 ?
  714.         FILE *fp;6 `# @7 @4 i# R5 X4 _6 x8 {3 {
  715.         char szString[512];5 ~+ _0 ^. }. ~* x7 O
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");: U. C; d$ \; t+ E$ }: g8 C
  717.         if(fp)
    ( ~; A# V$ [! {
  718.         {
    3 [1 U4 V+ n* K) Z- s
  719.           do
    + k! X, w% z* Y5 \( O
  720.           {0 q6 L. n! }  V9 q7 x( B, k- O
  721.             iEOF=fscanf(fp,"%s",szString);
    / N2 N3 D8 H" n, D7 R" l. O
  722.             if(strlen(szString))
    1 k( F) O% ?! @7 V# Y
  723.             {2 y* n1 }; G5 E- }
  724.               if(bFirstChar)  R1 e1 x4 {, ^+ D
  725.               {3 X3 m6 w( w" a8 `& @
  726.                 bFirstChar=FALSE;' A  n: U* P6 r, _  ^. k7 f
  727.                 bConnectIsBig5=FALSE;
    / S5 P) [* r* T; u+ p6 D
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 p/ U  R% c; T
  729.               }* D# Z2 h, A! `1 P% C
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    - S- t/ B: j: w! c  o$ ], s% b' Y
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    8 [& ~- b8 Y2 E5 Y
  732.               dlg->m_ListText.AddString(szString);
    3 s; [$ Z! R& Q, O
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' w. N( O# [! s; G
  734.               *szString=0;
    , z& Z+ d0 Q6 S+ F* J
  735.             }& r8 _! v. m2 g* ?
  736.           } while(iEOF!=EOF);
    ' M" {. u( M8 E6 U9 N9 q2 X
  737.           fclose(fp);
    : R$ v) E1 o( B, X$ S
  738.           unlink(".\\DownLoad\\readme.txt");
    6 `( j/ p8 B8 b1 W) @) l1 R* J
  739.           dwStartUpSteps=3;: j  b/ t+ J! N4 }  k& A* T
  740.         }
    ; a/ u4 [/ p/ W2 v2 r
  741.       }
    0 u( d: h% {1 @% l7 ^
  742.       break;% x( Z5 |/ ~( I
  743.     case 3:
    * @, K; l2 P' J' S
  744.       if(!Dn.Connected())# F5 ?- r  j/ m3 H
  745.       {! B4 \& ?( ^7 c2 q' J' h
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    : f" T8 D& v( v# E+ s. Z) t
  747.         dwTotalFiles=1;
    2 ?9 {5 \4 U9 \3 V) k7 V
  748.         dwDownLoaded=0;  Y2 p8 P1 H" F+ d" |6 m6 n9 s
  749.         bSilentStep=TRUE;- ~5 r- Z$ w5 J! r- ]# p* Y5 s
  750.         bCompressed=FALSE;
    : [  y, y. z/ [
  751.         strExtLocal.Empty();
    + V! k7 i' R/ V0 j- @9 o
  752.         strFullName="checkversion.txt";2 V8 ]' i2 H/ v; X  Y+ L8 P
  753.         dwProgramState=AP_CONNECT;
    4 v0 m5 y( C- K/ |6 k7 ^
  754.       }
    & B6 r) F9 D" h6 |5 @  C
  755.       dwStartUpSteps=4;
    4 T  \. |' a, f+ r
  756.       break;6 w/ O; Z( P. _) C  b5 f
  757.     case 4:
    ) x7 Q  ]* n0 \% ]2 }) X( r
  758.       {. `; b3 V% O% q* i! p4 v3 N
  759.         FILE *fp;+ A; i$ \" u/ E4 f5 t. R
  760.         char szString1[128];
    + c3 O3 p4 ]$ {3 n$ o$ x
  761.         char szString2[128];4 c8 [/ q& g) p6 I) `
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; Y0 C, ?' P5 s- z/ u% w
  763.         if(fp); T6 O3 b4 G9 t* B& Y% N4 \
  764.         {
    . l1 P9 r) K) f) {4 T6 T# @
  765.           fscanf(fp,"%s",szString1);7 W- A& S9 L  l( y; }, a8 k5 C
  766.           fclose(fp);
    7 t( O# K! e% U8 N% y1 l0 u
  767.           fCheckVersion=atof(szString1);6 f9 U9 R' a7 ?5 c" E
  768.           fp=fopen(".\\checkversion.dat","r");3 W% ]  y  R5 X9 b7 d7 `  [. s
  769.           if(fp)
    $ G9 m* t( U1 X) l" p4 u4 s
  770.           {+ m) g2 B& Z) m. L9 d, V2 c$ U
  771.             fscanf(fp,"%s",szString2);
    4 d# M* {4 v; R4 f7 f, `  d2 b
  772.             fclose(fp);
    4 i+ r0 V% y' w+ U! a: W
  773.             if(atof(szString1)!=atof(szString2))
    4 p0 y5 x9 [; A  j9 @
  774.             {: g( v. [1 R" l. I* x* k0 \! _
  775.               if(!Dn.Connected())& C# g( I$ M( ^" }
  776.               {
    " Q* o" p$ ]  ^/ k9 q
  777.                 bFirstUpdate=TRUE;
    $ ?& k4 ?8 a+ R1 H  M) j% `
  778.                 dwTotalFiles=1;
    - o. A5 J% Z! g5 \# Q) @
  779.                 dwDownLoaded=0;
    / d/ @, V9 o6 t# K0 [0 t
  780.                 bSilentStep=FALSE;
    5 [+ c) @! T9 s4 l* V! k6 S% N
  781.                 bCompressed=TRUE;4 d/ I9 j$ M& s, \  |* Y* e
  782.                 strExtLocal=".\\DownLoad\";8 ]5 W2 I9 k' T. l& H0 i+ A
  783.                 strFullName="update.txt";1 E2 t, b0 Y4 k: v9 G. {
  784.                 dwProgramState=AP_CONNECT;
    * d/ D4 D  f7 @
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . \8 W) x& e& Y4 W: ?+ M3 s7 x* C& U
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    * O; H! d( `- g
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 a/ o( l( b6 b- p4 V

  788. 4 z7 v( t) i! W% i5 t+ Z, i- b# B
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ V0 M( V& G( K# U8 a/ b
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    - c3 G  T3 N+ x- [% `& u+ b
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    6 `7 B( T% ?! c/ _! X! T
  792.                 {
    3 F( \9 H$ v- H! b5 A
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");7 e' x- y  L) \) Z. O& j
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");( l0 }4 m$ [$ B; ^" _9 ^
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");7 x' n7 v5 a# |8 ]
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 p; B( {9 N: w. b% |
  797. % y3 }  s; g; n+ t& p
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");/ n9 r' h% v  E* W
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 ~, o, n! ~) c$ y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");6 v. i  j% p- w. V
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 o3 e/ d+ Y# s& E# S
  802.                 }
    * ~5 y& u/ Q; H+ d
  803.                 dwStartUpSteps=5;
    / e. g+ m4 S- b9 W! ^3 O
  804.               }
    % }0 H8 a3 h- p, A) |0 p5 O
  805.             }2 t6 k2 G9 x- f
  806.             else( y- L  W; b: C$ m" U7 Y
  807.             {
    6 g" H  t4 p1 Z3 [5 ^7 A
  808.               unlink(".\\DownLoad\\checkversion.txt");4 o; g2 b# b( Q) l4 j' Q, a" M
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");% {( A8 E1 S) U1 g7 I4 {: j
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 ~5 u; l* v6 E
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' w& p) U  c: d4 V
  812. / Z3 N2 V/ x: I
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# k/ E) O6 O- Z" g% I7 ?7 I
  814.               dwStartUpSteps=99;
    $ U" ]3 x2 V3 s% b: H
  815.               bFinishUpdated=TRUE;
    * F4 K, n2 R0 Y7 o( t: s
  816.               bCanUpdate=TRUE;) @9 h6 U( R. V# P. d, J+ a2 T
  817.             }
    - u; }  @# L1 }* u
  818.           }
    + {, a/ M: t* K, g7 {: t
  819.           else9 f5 D( Y6 z" u% f8 G. U. Z: x: z- _) C
  820.           {6 a2 r% |9 t6 T3 i0 E# I1 K2 M+ f: m
  821.             if(!Dn.Connected())
    6 X5 c- \' V  r1 i( \
  822.             {
    . ~* t4 `4 l7 Y4 u$ u
  823.               bFirstUpdate=TRUE;
    6 x) H9 ]! i. Q8 b& Q
  824.               dwTotalFiles=1;, `! V8 j/ B# s9 x
  825.               dwDownLoaded=0;) V9 c  T. x1 Q  f/ l
  826.               bSilentStep=FALSE;
    " q& ?7 G, @/ z( N" f" [4 z5 H
  827.               bCompressed=TRUE;' N# P* X  }1 \- m1 j4 q
  828.               strExtLocal=".\\DownLoad\";
    $ ~8 }2 m1 X1 c; V& e1 \  [
  829.               strFullName="update.txt";1 ^) j4 t3 |; H6 R% b
  830.               dwProgramState=AP_CONNECT;9 w' h  z9 {9 l! T6 d) \( J
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & a) Z# C% f+ {0 l' ?% v$ r6 F
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 [: }: u6 j/ w, q4 X- k
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");* l0 P( H* [; Y/ C
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; `% q" o- r+ c( X' k2 l
  835.               unlink(".\\DownLoad\\checkversion.txt");
    7 M3 P8 W( _( ?6 K1 x2 A% i) k- T
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)9 }6 o% ?, |3 o2 s5 y
  837.               {( E7 H: a, S1 D8 K
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    0 G+ X3 G; b/ G2 B. x6 W- |
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");4 R2 v9 C' i/ e, u. W
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");- |! b& C- M6 j* n; l
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . {; x$ T, y" J6 b8 F5 Q
  842.                 4 C# J/ b( Q1 c7 g$ Q# w
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 h1 \) r$ t7 c/ T* h
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) _9 V& J3 g& [
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    / s* C; Q4 e" Q. u0 ~
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 e* g9 q  A8 G& U7 f  {! ~. }& ]
  847.               }
    0 c! U* {$ l% V% {1 r
  848.               dwStartUpSteps=5;8 W5 D$ f! j! m) z) b+ d$ m$ E
  849.             }3 y! E7 u2 d, u/ m" E0 X& m4 A
  850.           }6 o  g# `5 J& G3 L- U/ W* }% c8 g& ]
  851.         }% }' D# I7 Q# V) j; X' ]* S. I8 N
  852.         else; m& t0 F  C8 w3 p0 j9 S, ?
  853.         {
    - X; {1 m. K( y7 z
  854.           dwStartUpSteps=3;
    " v3 q5 `2 G& O2 }
  855.         }! ^- a, x9 k( l% }3 q
  856.       }5 `7 K. _3 W, ?. Y/ S- T* C, L
  857.       break;3 \: v% [8 W4 _8 X( I
  858.     case 5:1 b8 I4 E! n) q- _; i
  859.       {
    ; n- L' U& p- l1 s. l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)2 l: {' X" F5 K" i/ N, C0 D: O
  861.         {. G: n& S8 q' Q; g0 U* t
  862.           int opt_overwrite=1;
    ! x1 g- O4 @4 X% p) \1 E! S
  863.           int opt_do_extract_withoutpath=0;: t. k. o6 U9 M7 R+ _/ P
  864.           unzFile uf=NULL;  ?* J5 @2 Y5 Z5 D4 F" Y

  865. ! A. c6 F& o0 @% X+ h/ v# f
  866.           uf=unzOpen("Wsa.zip");+ N$ X# W) L$ H( n
  867.           if(uf)
    1 v+ O; v  ^; Z8 H3 {
  868.           {* x6 n: z3 b' o# y: |* ~
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);1 l$ e( ?9 a; i4 ?, y
  870.             unzClose(uf);
    4 R0 z8 S0 U: l% h! W9 o4 d
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    : Q. _/ f! o* ]. P' w; L2 V
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    " k9 P* b& h# N. z9 n
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");( D  e" X' M; T- j* M
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % M' X! @7 Q1 H
  875.           }/ A& u. M7 J3 B( d
  876.           DeleteFile("Wsa.zip" );5 x9 \0 \( ?& E$ c# ~1 I3 L
  877.         }
    4 n) O0 J% E( d# t8 g( K6 ^  D' F

  878. 6 `" V' G- e( m: A  [" m
  879.         if(CheckLocalVersion())$ U3 ^1 u9 A; ~
  880.         {$ {5 T& R$ W- _* e
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");" R0 V) V& \% `; c4 b/ i- C
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    6 s+ z! I- L7 x
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    # J9 M8 q3 e/ O0 m  W! A& x+ b8 a
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 s+ m* p) B! R1 \/ V6 O$ n
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);& N* d: X# _& ?& N6 f# N' C
  886.           dwStartUpSteps=99;
    ) g, a- X% t# g( N
  887.         }
    8 U1 w' S1 x. U& ~( d0 ~! [
  888.         else
    4 l  B2 [5 W- }0 V" E; [
  889.         {- B$ _! N2 t* x/ }- X& Z+ P% R
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' q$ y$ @6 a$ o5 R
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");7 C( V, i& [4 \2 l! K
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 C3 ]! J9 G# c' [' z. y$ [2 v

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-3 22:37

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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