CSUpdate.exe源代码

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

* ?' m( M' i1 T; ?, ?
  1. / RevApp.cpp : Defines the class behaviors for the application.( k8 P, f% A' z6 _
  2. //" n# }& T4 W& H& T" f% T: _
  3. $ _" {5 |: L2 E# d! h
  4. #include "stdafx.h"
    6 A  b$ \! S  A6 o: n9 ]

  5. 1 D) }- P& \7 D
  6. //#define UNICODE6 m+ G3 H9 x: d% \, Z' B
  7. //#include <gdiplus.h>1 q( k) T, w& Z) ?/ ]7 N
  8. //using namespace Gdiplus;
    6 {; h1 u9 L4 p  j& s

  9. - M& I' r6 V. `  c+ @4 D! N8 u
  10. #include "RevApp.h"
    ! R: q0 v9 z9 i, j. Z& N. T6 ?
  11. #include "RevAppDlg.h"7 A. @' b, g$ ~

  12. ! f( g' I9 v# P$ c( Z
  13. #pragma warning(disable:4786)' h/ `, t# D$ ]& V8 L" \
  14. #include <map>
    ' j! d7 }. N5 F1 _
  15. #include <list>+ {/ S3 n+ F- A; K
  16. #include <direct.h>: n) F: |9 q& `& v' m+ r
  17. % ~5 _: n( l; D, a
  18. #ifdef _DEBUG( Q# d6 l* X! U' G: b
  19. #define new DEBUG_NEW
    % n$ n1 _8 h+ J! O9 v7 l) }+ ]
  20. #undef THIS_FILE
    ) s# X1 w1 i* f5 Y) t5 s
  21. static char THIS_FILE[] = __FILE__;
    0 D6 O. Q  `) M) `9 l. t$ C, K
  22. #endif
    1 x, m& }* Y& F5 z$ I
  23. #include "SkinResDef.h"
    % v& R4 a2 v) x1 \; [9 t
  24. #include "ChangeBG.h"
    1 ]/ B, k: t4 g! B1 F5 E8 R* N2 r+ D
  25. #include "AFXINET.H"
    & ^9 a9 k- L% Y. `9 I

  26. 2 M* z# Y5 L' H: j+ k0 M, {3 @
  27. #define TRADITIONAL_CHINESE 06 m, S$ i4 n3 d/ m2 S! }
  28. #define SIMPLIFY_CHINESE 1) s3 a+ _! I: m& e
  29. #define ENGLISH 2
    % o" H4 B0 H+ H% C8 P
  30. int m_iLanguage = ENGLISH;" }% [; a5 a' a% Q- B% [8 e
  31. /////////////////////////////////////////////////////////////////////////////) D1 o0 ~# O2 _7 {
  32. // CRevAppApp+ T4 O; ~! z7 V8 X% T; _
  33. & ]/ j/ ~- w+ P2 |# U
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    & h/ @* [1 t5 f: q! v* j
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    * U6 A( u- g0 P. D
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.2 F2 [, o" N6 ~" d/ _
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!% c7 U- t4 t; r9 U0 l% {5 {0 e
  38.         //}}AFX_MSG
    ' W! J! l  ?8 }+ j+ B. k
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp). `6 W9 N2 m6 w8 j
  40. END_MESSAGE_MAP()
    1 G+ }6 \) M) [: B1 D' E. h
  41. + F; f1 S# e0 ~$ p6 Z, p5 c  T1 R3 L3 B
  42. /////////////////////////////////////////////////////////////////////////////* \8 c# Q" k+ X5 d1 |& F" }
  43. // CRevAppApp construction+ T7 l- R9 @( Q' Z% c
  44. ' v1 `" x  X: v+ D
  45. CRevAppApp::CRevAppApp(); U! v# ?* T5 c  _; D2 D* K
  46. {4 g" ?, q6 a* c  ^: F
  47.         // TODO: add construction code here,
    . B" _0 Z" I# P4 d% \1 f1 R
  48.         // Place all significant initialization in InitInstance
    ! }" j/ y1 {  c5 `1 B4 G
  49.   bDisplayIsBig5=FALSE;
    % M3 a$ {3 E+ O+ N( i
  50.   bRestartUpdater=FALSE;
    5 J3 n6 O) Q2 A8 ^
  51.   bFinishUpdated=FALSE;
    % ?' Z  l: ]. k! ?
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    $ S2 Y) m8 k/ F7 n& ?5 M3 p
  53.   InitChangeDataBig52GBKS();" `3 ~. a" K( m
  54.   InitChangeDataGBKS2Big5();
    & ^3 Q# `" M* U' q
  55.         //3 B# e: |9 \. @' [% }* B3 @
  56.         bClickRunExe = FALSE;; L+ x/ ?# r5 N6 @
  57.         //
    , ^, W; |4 g  [0 M
  58. }# }& }3 I$ W, l! ~# B
  59. 5 P2 K4 H# U  S. Y6 h& Z( L. `- b
  60. CRevAppApp::~CRevAppApp()& M8 t% M5 H% o+ X" ^) E
  61. {# j- u- k2 e* _$ K0 p6 v& \8 J/ Y" K
  62.         // TODO: add construction code here,
    % r9 V* q' w5 L- O3 e; V
  63.         // Place all significant initialization in InitInstance: }( }, U3 C; C& B
  64.   EndChangeData();+ d/ W! h3 ^% R
  65. }
    7 R( h5 \. ~0 U1 u4 z

  66. & @: Q! {8 {4 T
  67. /////////////////////////////////////////////////////////////////////////////
    5 k6 E# P- P% }( Y5 |- k
  68. // The one and only CRevAppApp object
    , C9 }" Z/ C! o7 Z( e
  69. ! N, r* L, N8 ?8 z; Y" m3 A
  70. CRevAppApp theApp;' |8 ^, Q% K2 E& D* ^5 k% G
  71. ; F# R% K5 X. y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 G# g' k  _6 W1 P; J
  73. {6 `; T5 c8 @* f- x5 Z' x' S! r. b8 W9 U
  74.   int iEOF=0;/ L. M. c; Z5 L. h# }5 I- U' u
  75.   char szTempName[MAX_PATH];
    & n' U: N" |. Y. r) R! R! A9 W
  76.   *szFileName=0;
    6 @4 B' A8 V. i# m; P0 J
  77.   iEOF=fscanf(fp,"%s",szTempName);7 }8 T6 T8 s8 f7 ]' ]% t
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')* O0 A8 D0 \7 D4 S) T
  79.   {# q) d: f( f. d% p
  80.     strcpy(szFileName,&szTempName[1]);' g" @2 w) c0 z$ V5 l0 o
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)' K# x% Z2 ^* L5 E  S
  82.     {& e0 H; N0 h: j0 J/ E
  83.       iEOF=fscanf(fp,"%s",szTempName);
    7 W& ^& m; Z4 z# T
  84.       strcat(szFileName," ");5 m9 l6 h9 B: X) y- @( y5 m
  85.       strcat(szFileName,szTempName);
    + V1 w# i% F: }( T2 g
  86.     }
    . H, P( X7 O! U. i% K
  87.     if(strlen(szFileName)>=1)& e) s- o) l) W  i' g! r- T
  88.     {
    3 k4 v( ?. A: b  W& o2 W' T
  89.       szFileName[strlen(szFileName)-1]=0;
    * |3 r) X' w, c% b9 C
  90.     }
    & u' u. G4 M0 ~: Q' C; A
  91.   }
    : Y0 Z  i; G7 m* d
  92.   return szFileName;! a/ I2 L- k7 a; t' {9 ~, b4 g
  93. }
      g& D+ R8 g1 P

  94. - \/ x) Q; k4 O# y% m
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( `# a* A# \5 e) w7 O. ?
  96. {% x* `! c) @# g6 j2 m4 t6 U
  97.   FILE *fp;. {( _/ o5 l3 g5 U
  98.   char *key=NULL;, a! B/ a. |$ u' \
  99.   char version[MAX_PATH];% W0 {" ^! Q) G
  100.   LPUPDATEFILE file,olds;
    4 ?6 Z) `  {+ ~3 q" v# \
  101.   std::map<CString,LPUPDATEFILE>::iterator p;) c' b% O) Z/ t  M+ U
  102.   L$ ^3 x7 `- H  M# O: T0 W$ Z
  103.   UpdateList.clear();
    7 ]. d8 n0 {) O
  104.   UpdateFile.clear();9 c4 I: {+ H: o3 y- ?
  105.   if(GetFileAttributes(filename)==-1) return false;1 O* U7 Z% b+ ]
  106.   if(!(fp=fopen(filename,"r"))) return false;  A! T, z3 q* y" S5 N7 ]# B! D
  107.   fscanf(fp,"%s",version);* t" |: o/ I; u
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }2 s9 ~( A4 v1 q  j8 V( v5 O
  109.   while(fscanf(fp,"%s",version)!=EOF)$ E, N# J) c, l1 F  i
  110.   {/ A$ e0 H- I- s4 B% I6 R3 g: k
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* q1 E0 n5 s+ M& [' O+ O
  112.     fscanf(fp,"%s",file->path);
    * D8 b* ^5 n: y2 ^* B  r# f
  113.     ReadFileNames(fp,file->file);) e1 n: z& `7 G( K; J( S/ ?
  114.     strcpy(file->full,".");/ R' k2 T0 t* o' {; ?
  115.     strcat(file->full,file->path);1 h- x) n# {8 v! Y$ r( r' Z& V
  116.     strcat(file->full,file->file);  t0 w5 d. |5 l
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ) i4 O) V* y5 v; i# S5 c2 V% J  e3 D
  118.     {; D5 H# j0 Y4 {
  119.       file->vers=(float)atof(version);' X  Y5 Y' }# d" Q3 V7 A7 q5 f
  120.       UpdateList.push_back(file->full);8 w7 s% K' P- G+ K) B9 I" m
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));5 l! j6 V: H! i( E& c2 [& `9 F3 q
  122.     }1 c9 e" o( R4 o/ _8 v1 p4 r' n2 Q
  123.     else: b) H: s$ J# ^# x, ]
  124.     {
    ' v( F$ a& Z/ f* H' {' R4 u
  125.       olds=(*p).second;  G3 [) i) M' v. L
  126.       if(olds->vers<(float)atof(version))
    . g  M0 S- m4 |1 y+ |
  127.       {
    " Q  |7 G7 t& R3 \( A8 \# N
  128.         olds->vers=(float)atof(version);
    ; Q+ r1 |5 J# i& Y& Z
  129.       }6 {9 e1 l5 x/ k( n% G4 T& \, h5 ^6 I
  130.       free(file);
    " F) B4 U% e* c3 M7 e0 Q
  131.     }
    . T' K  W+ {% o' {# G
  132.   }
    5 W1 Y" {) N$ t% d
  133.   fclose(fp);
    1 k0 C; {" n! r' I2 c/ h1 ^2 N
  134.   return true;
    * n/ v" L! w$ f0 @: j
  135. }+ i7 z- |$ g' \8 m' e

  136. 1 `5 n* X. \. G$ _. q. b3 K5 [3 Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    3 m; T2 u! u; x$ M
  138. {) u* z8 N2 E3 e3 t% |. p2 C' ^
  139.   TCHAR  szFull[MAX_PATH];
    / {, P( m; ]+ ^: `! t0 i& C2 K
  140.   TCHAR *token,*inter;
    . l  S0 N  k6 X( j
  141.   *szPath=0;/ [6 k' n0 n( v
  142.   strcpy(szFull,szFullPath);5 V) o: @) C& o
  143.   token=strtok(szFull,"\\/");+ {# n8 A, j" l7 J! v' F
  144.   inter=token;
    ; \: S0 K5 ~& D, V
  145.   while(token=strtok(NULL,"\\/"))
    ; r( O9 d4 }" x9 [+ J* R7 P  I
  146.   {2 \* i' S3 D& J6 o! D1 p& O
  147.     strcat(szPath,inter);
    : F. ]! u4 B+ g3 p5 _/ p. {
  148.     strcat(szPath,"\");
    + G! H* z* c4 H6 J3 X
  149.     inter=token;* f' W5 |. u- m: a: J6 `" t
  150.   }! C8 k9 Y6 N1 Y: s. f
  151.   return strlen(szPath);$ t  d2 p7 ^) J2 x
  152. }
    1 e' D! N8 D3 l( h- Z/ g- y

  153. 1 Y; K* Y3 z/ t# c5 Z  r
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ a3 p* V$ t, D6 ?0 h: Z/ I
  155. {: x/ f1 e/ N0 s2 g4 P  J* w
  156.   DWORD attrib=GetFileAttributes(Target);' x7 F. I, ~7 b  x
  157.   if(attrib!=-1)( {* w% N7 `. J) [3 s. W" u$ v
  158.   {$ Q  B4 Y% _! _: p0 Y% ~
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))/ X! P5 V* G, R- N1 ^" [) O
  160.     {1 ^3 B; `9 _* U; T2 ]; V
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    9 S) c* }7 K. @" l0 a7 J$ X
  162.       SetFileAttributes(Target,attrib);
    / D: {" `( K5 r
  163.     }
    " ~4 ~9 \2 z5 R; O
  164.   }) c; X! X7 W( Y' t, J
  165.   CopyFile(Source,Target,Erase);: {- f) K0 r' ?% a! `( z& a) o
  166. }3 N* [  Q/ _$ ?: b* n) _( v

  167. , t/ S9 P( D6 u* Z/ i- }$ C: p
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & @2 H( ^$ ^5 d# C/ g# v
  169. {
    2 P* D/ C* l& _$ h) F% k1 k9 X4 z
  170.      FILE *fp;' ~1 \( h0 h0 D' V6 B. i
  171.      char  szBuffer[8192];2 L/ G6 J1 z9 d& L( y
  172.   va_list  argptr;
    . u( Y' ]: |$ W

  173. : T3 k4 j; I/ s2 T0 z1 \( f7 R& y  T
  174.         va_start(argptr,message);# Z+ I$ d, R; S( u/ d
  175.         vsprintf(szBuffer,message,argptr);
    $ ~: J- l9 t3 V# F
  176.         va_end(argptr);5 ^: M8 {0 A2 ^0 ^# x
  177.   fp=fopen(FileName,"a");
    " U! T+ `; H* Q; i" `: j4 L
  178.   if(fp); j" z: n, B9 \* U* z7 P* a; A
  179.   {
    % }3 E9 x: Q2 Y; V+ u. K/ f
  180.     fprintf(fp,szBuffer);% C' L- y3 y$ R# A0 p
  181.     fclose(fp);
      ]0 C+ W* w8 W% ^
  182.           _flushall();6 g6 R2 O& \* y3 {; m! v
  183.   }& f: i& i6 Q5 N- g* G. h
  184. }
    3 N. `" r7 w( S1 d& `+ \8 l
  185. 2 Q9 r+ c" B! D
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    " U# A- Z/ Q; }2 C- v
  187. {5 `  d- Q) s3 B7 K1 t
  188.      FILE *fp;% H! }# U4 p! b* M$ R
  189.     DWORD  attrib;
    $ I0 R4 L7 {7 F$ @2 x8 J  P
  190.   attrib=GetFileAttributes(FileName);
    / O7 U# l& @- D4 @; `( r$ k
  191.   if(attrib!=-1)
    4 K/ P7 o1 j9 p4 |
  192.   {
    2 k0 Y* q" j  H- t$ `7 ~. Q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ( r5 w$ U7 P% c3 P9 ~
  194.     if(!SetFileAttributes(FileName,attrib))% D1 i" ~. y; e' x# Q1 Z
  195.     {0 x: D4 U4 {: x9 x) R
  196.       return FALSE;
    * V$ k( B' y+ C+ D+ Z
  197.     }
    * ]" m# f6 Z( }' \2 T2 I% w, Q
  198.   }
    % s" s/ u1 M0 e" v! J5 b& e3 r
  199.   fp=fopen(FileName,"wb");. a( ?) Y4 ]9 N+ J$ R7 e8 L' N
  200.   if(fp)" A# Q# v  u" f0 g% ~: c
  201.   {
    7 q# T0 i$ ^( a' h  T- [
  202.     fclose(fp);
    1 P5 K4 b# s( ?
  203.   }2 W, K* g1 b% ]7 `, p: I9 m# O
  204.   return TRUE;
    9 j- w8 t( W/ k- ^
  205. }
    6 z$ Q* m' l. v$ Q: A  K
  206. 7 U$ U' C9 m6 x# X  I, m0 J+ D( \7 U( i
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    $ E  [0 \4 L0 p5 N  @* Z3 S0 p
  208. {  y  E; ]5 w9 z+ U& ^3 M) N/ ^
  209.   char filename[MAX_PATH];4 X$ w' O! J" a- z  B( J- l
  210.   LPUPDATEFILE file,olds;
    7 K+ B: f( e' c& ?: v( `: f) V
  211.   std::map<int,CString>::iterator i;
    : J* [; X$ D8 V1 i
  212.   std::map<CString,LPUPDATEFILE>::iterator p;* `- X: v; S' q- a
  213.   std::list<CString>::iterator l;+ {- s/ v5 h. i

  214. + F% ?2 \$ e# [& |/ j8 h
  215.   if(bFirstUpdate)
    / `6 b- f9 G! Q( E* ~
  216.   {
    ) Y! V7 j, C/ _( B4 {9 @1 m
  217.     dwCurrFile=0;
    3 C  [/ n+ d9 X/ y- f
  218.     bFirstUpdate=FALSE;' ^* A& X; W, H, y
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& j5 p/ v: {2 a
  220.     {
    : ~0 E$ n$ k% k6 ]0 I. v
  221.       dwTotalFiles=UpdateLocal.size();8 _$ \+ G+ g, J. {. h0 |4 {. d
  222.       dwDownLoaded=0;- {1 |! i2 \' ?9 V. u
  223.       bSilentStep=FALSE;
    ' s5 k. x2 ?  {1 |8 C1 f
  224.       bCompressed=TRUE;
    # c1 \- Z  b/ d
  225.       strExtLocal.Empty();
    6 R# C/ v+ L, d" n/ o
  226.       strFullName=(*i).second;
    # F" C2 N$ t. y6 H9 C
  227.       dwProgramState=AP_CONNECT;
    5 `+ F9 k( f8 i7 |+ k
  228.       return TRUE;
    / {8 X2 \( H; c% }+ ^' x! O$ v
  229.     }
    9 E2 U8 u9 i/ o6 U
  230.   }3 j, A4 F. I, [
  231.   else if(bRestartUpdater==FALSE)+ l- ]: D9 E, K& X/ ~' d4 G: M$ M5 E4 |- S
  232.   {
      t* \% T4 g" T8 ]- t! J+ j
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    8 {: \2 ?2 ^/ C
  234.     {( c+ z: |; X6 }; r# K" s9 m  i% N1 y
  235.       file=(*p).second;3 W9 R2 ^) e  W, N
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())& o  V! ~" d& t1 {: S( g% _
  237.       {
    ; {1 g# Q: t$ b" q9 w% R( k
  238.         olds=(*p).second;( k3 U4 R6 b$ R6 v" p6 Q2 D3 c
  239.         olds->vers=file->vers;0 V9 N4 h# v, |  i0 ?- f9 r; Y
  240.       }, {! v4 s" j+ a! Z" @5 D# k2 |, z7 N
  241.       else) z. P3 x- O- u4 u+ I  Q/ o
  242.       {" X2 V  h0 i- T8 a( D
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 n2 S( G9 V# f/ J2 x
  244.         memcpy(olds,file,sizeof(UPDATEFILE));; B0 O- C$ @2 `7 Y6 g
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));* M6 w& p1 S6 V' D+ c
  246.       }
    1 N' M1 Q: T  _( ^" p: {
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");% `5 y6 J+ }7 l
  248.       sprintf(filename,"(%s)",file->file);
    ( a1 q! g0 ^4 t& e6 Y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 r+ w5 B6 X0 @5 Y2 S
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }; z, F% k: U& X4 [+ A7 [
  251.     }) V) o  t* c. D! w( z
  252.     dwCurrFile++;
    $ y* l9 ~2 _; g( P$ S
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 U0 K+ {2 G  g5 R1 V3 T+ B, H$ j
  254.     {- s9 M, _$ R9 o0 ~& q4 n  @
  255.       bSilentStep=FALSE;
    + c5 T( |' b  z/ K9 o3 u) _5 d
  256.       bCompressed=TRUE;0 ]. h1 P0 R; m: X/ j! J
  257.       strExtLocal.Empty();- b3 L* i3 S  ~. H4 d. l6 x
  258.       strFullName=(*i).second;( Y  T0 |7 g. P) i/ B: B. e& m0 j
  259.       dwProgramState=AP_CONNECT;. H5 L, o2 D( t9 ~4 O9 F( u
  260.       return TRUE;
    ! i4 P# T; B  ^) |$ F% R" C5 _. L2 A
  261.     }
    9 O0 O& o7 }$ e/ g! u
  262.     if(!bRestartUpdater)2 M! d* b+ r9 o; _, w$ w9 O
  263.     {
    * j& E3 z5 o4 G- a; W9 o3 V
  264.       int iCurrSize,iFileSize;4 l* x% m) k7 R6 ?  q4 Z
  265.       iCurrSize=0;
    & U; O' g' k- C5 u) L
  266.       iFileSize=UpdateList2.size();
    . P5 E& q2 R+ l
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    / a/ t  p7 c' M& x7 J5 y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    9 e  p$ j3 X$ C- ]% C& b9 Z
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    : A3 U2 h9 e. u3 d) g3 D
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 C- ?1 H% f. h7 w% {* H$ }- \
  271.       Fclearf(".\\update.dat");0 U5 A5 D! H9 X4 j5 T
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    8 |2 z4 r- |7 r2 z2 L
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) T" x7 t* v+ X  {6 m
  274.       {
    4 ^0 K2 t  Q. `5 U. A0 z/ I
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    + Y! f% }( Q, w, C' F! D: M
  276.         {
    / N8 y* n$ B  y/ P5 F  _( b, v; f6 Y% H
  277.           file=(*p).second;+ f" N) T0 ^0 ~, i# l  k. Q( m# P9 m
  278.           sprintf(filename,"(%s)",file->file);0 i( F% D  \% @: n
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ Z: D7 v- o! g8 X9 D" t
  280.           iCurrSize++;: a6 q- o- _. k4 u! a4 C9 z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ( Q6 Q* I& e: n* E5 a* Z+ t  x
  282.         }$ Z! `+ B* o. [7 j: A8 d
  283.       }
      ]; I% \# U; p$ I, U( j
  284.       unlink(".\\update.txt");
      ]3 S9 [- s" W2 Y
  285.       unlink(".\\update.tmp");
    $ V7 S# ]% P* u4 I+ T
  286.       Fclearf(".\\checkversion.dat");' t  Y6 r) C/ W/ A5 {8 D0 L  ]6 x
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);0 _; l% F4 Y; O
  288.       if(UpdateLocal.size())7 S( ~1 B5 d" v) e5 ?
  289.       {
    1 s, T2 q! C+ a1 n8 h  J
  290.         UpdateLocal.clear();
    " L0 i' O; b9 J+ v6 b6 a
  291.       }6 ]) B! r, ~8 T- g: f" X' m
  292.       if(UpdateFile3.size())6 ^" s& r' K- z/ N+ ~6 y6 ^; L
  293.       {
    " E: @; o/ z# _* m+ w: u  Y" S3 S. O
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  {6 W& V2 \- \9 x4 K) ^* o
  295.         {6 @/ Z# F! [1 E/ @/ [/ R- Y0 O. ~
  296.           file=(*p).second;7 c% Z' C5 l# a. h# t- Q: }
  297.           free(file);. ~' G! H4 N$ d  q7 y) U
  298.         }# a! {: g" ?/ s6 a; ^3 O$ G
  299.         UpdateFile3.clear();+ g) q$ v9 i3 j$ ]% H! E, N
  300.         UpdateList3.clear();
    . x0 |& o: J6 v& z" u
  301.       }2 @; G1 U! a. Q6 x
  302.       if(UpdateFile2.size())6 Z" ~/ F2 y" M9 |& T# _
  303.       {
    1 ]* ]" G8 u4 l) i9 s, b2 _4 e0 F
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # v' i2 w' u1 J, E9 V9 w
  305.         {
      X" K# D, n# l8 B8 r, N
  306.           file=(*p).second;9 Q& W$ [; {% |
  307.           free(file);' [' Z6 n: @* ~% O, r
  308.         }
    . W1 ?8 t* E1 o1 h
  309.         UpdateFile2.clear();
    8 \8 q. l% C) |: n2 i! ?4 k$ S
  310.         UpdateList2.clear();3 I& @! u3 P+ u5 H" g* S! A
  311.       }1 U3 t# k& U# I6 B; Y
  312.       if(UpdateFile1.size())8 G1 ], _; f+ L8 P7 H
  313.       {
    / `3 z4 e- g3 y9 C$ }8 l: U
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    2 g, [) T4 _% K3 b6 n
  315.         {
    9 O4 b; @) s, Z! x
  316.           file=(*p).second;
    - Y. s6 ^. P" Y
  317.           free(file);, D2 a, B' N# Y3 o
  318.         }
      k  ?7 h7 ?% o9 {
  319.         UpdateFile1.clear();& g! s7 P7 b+ E: O
  320.         UpdateList1.clear();
    % t3 n/ O5 B: L4 i; E
  321.       }
    ! ?5 F  @( f) b2 p3 m
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ O! |% b5 g: _) n
  323.     }: d; r2 ^) T5 D; F1 @& Y
  324.   }
    & ]2 y( s8 y% S% u9 y) s
  325.   return FALSE;
    2 d2 i( r0 J+ e$ C$ M: F5 @& x
  326. }
    7 o/ u/ n' b9 e+ a) n# Q+ x

  327. 7 U: B& _8 T) s( K
  328. void CRevAppApp::ClearAll(void)6 C0 X% N5 R4 c9 c& {
  329. {
    3 V; b' G! `2 `+ o+ h5 |9 `8 [
  330.   LPUPDATEFILE file;
    9 {/ a% |1 E: y3 S
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' p2 F/ `: k, }. K. S7 g% T/ H

  332. 5 G3 w+ ]; z2 Y% J2 g! ]6 s
  333.   if(UpdateLocal.size())8 j( m# t1 {9 V) n. B
  334.   {( v: J( L+ R4 R
  335.     UpdateLocal.clear();
    8 ]$ `+ C4 A1 H( @% e/ V7 B) k
  336.   }
    " @0 Y+ B4 F) V6 X- r3 A8 s
  337.   if(UpdateFile3.size())
    - H1 a; A( \) x$ M5 N
  338.   {9 _$ e5 R; G' o. }* Q
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). B: m: Y9 i, z4 P
  340.     {3 q3 L2 N! z6 K4 o% ]
  341.       file=(*p).second;
    4 k- {( x; P8 h0 J" _! k& E$ ~% {
  342.       free(file);' a/ `2 F' r- A2 z# x$ c
  343.     }" F9 U! G/ Z5 D
  344.     UpdateFile3.clear();
    ; w; }8 \6 q  L5 z: K
  345.     UpdateList3.clear();
    / m! B/ d) _  H5 r1 o1 r
  346.   }  F) S1 a2 C- B) _7 R
  347.   if(UpdateFile2.size())& q0 C0 X6 ^0 D
  348.   {) D; l) m- j7 j" O8 C# s: b
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 ?- K' i' c- N. o0 z. z
  350.     {% H4 X; ~& @0 o' y
  351.       file=(*p).second;
    ( P+ Q* a" z% \$ J; `: P; ?
  352.       free(file);
    / ^6 q: W) L3 J: P- `& U1 G8 ?/ _
  353.     }
    5 f4 l% E/ v  H! O  g9 P3 l: v
  354.     UpdateFile2.clear();. ~; s5 e9 @# S8 V2 V+ ]$ \7 {
  355.     UpdateList2.clear();
    ( ~* a2 r- J- d! @: ?9 O
  356.   }4 D  a  H; D# {9 M: V5 q) V
  357.   if(UpdateFile1.size())4 j; P' J& N6 ^2 r7 r$ e
  358.   {
    5 e& K  W- E$ P9 a) H
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), l3 ^- s7 v/ `" M3 v; C0 g
  360.     {: x, Y' J1 }( `5 a: M/ `& c" [
  361.       file=(*p).second;- B# \$ E7 s3 O- j1 Z
  362.       free(file);
    ! `6 H8 J+ V- Z5 X+ \* s
  363.     }# @$ m+ {+ r; S  _4 C: U& J, F
  364.     UpdateFile1.clear();
      D' [. W* f5 b$ ~0 _: I7 U# T
  365.     UpdateList1.clear();
    4 q1 E( t0 X8 r. W# y
  366.   }: }; P! Y/ @3 e% K
  367. }  / T! u$ l2 q8 D1 F  w( K5 z
  368.   1 {% {! a2 i: M5 v. L3 T
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ! t1 C; M" r+ k0 I  `( W
  370. {
    ' l5 F' @7 |3 A5 w2 ^! l' |
  371.   int c;% e1 {: [) z5 W4 _3 f4 ]* a2 O8 p
  372.   LPUPDATEFILE file1,file2;5 H) v8 K& }, S/ s8 L
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    5 {) D4 T  S$ Q
  374.   std::list<CString>::iterator l;, t" k8 |; f* t3 W! Z- E

  375. / M) q# u; a" ~) S, G
  376.   UpdateLocal.clear();. H; i$ G- N8 d, c1 [8 _
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);' Q& j8 ]' N4 p  J- z+ y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);  b& t7 {0 i5 G9 J) G& |
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ; h5 m* m0 b/ R7 B
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);3 a$ m# l0 x. s7 x
  381.   if(UpdateFile3.size())! w) U5 e* `$ e  b# u, q! k
  382.   {9 b- `  C% D' w- g- G
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    3 a" Q1 s$ x- a, J
  384.     {
    5 g5 o! e; v/ K. n) r: M
  385.       file2=(LPUPDATEFILE)(*i).second;
    ' Q4 d5 T  X9 Z. G' {) h8 Q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 \* m5 k9 `/ `/ }3 [7 S
  387.       {
    5 }8 R6 b, Y+ u9 z
  388.         file1=(LPUPDATEFILE)(*p).second;
    / ~  v  K% X& M; }# P
  389.         file1->vers=file2->vers;
    + j! _# O+ L( m* {. y$ t
  390.       }# p* @& g+ N1 o" O5 E; {' p
  391.       else
    : m5 f5 w" l6 e
  392.       {
    6 |% a. w1 X- @8 S
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # I) {1 ^" y1 U' D) W" |) P& h
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ; B4 J( M# `$ T# x* O9 U! r
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));% T* P4 n6 e* k
  396.       }! o& ^  Q# Q3 D6 ~4 G/ [# ~
  397.     }1 J9 [  r/ ~4 [3 J3 Z, [
  398.   }' U- a. P6 W6 ~0 l
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% O8 g" n/ ~% ]
  400.   {
    6 y' y( x6 n3 n5 K0 O; N4 n+ K! P; C
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    6 o$ H/ s& d3 T6 A* v( b
  402.     {8 A" f- ^0 A( l* k8 r& R
  403.       file2=(LPUPDATEFILE)(*i).second;6 y/ R3 K9 X' G; R3 C: }
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 b4 e5 P1 }/ c! W
  405.       {( T* `: I$ N  t8 V
  406.         file1=(LPUPDATEFILE)(*p).second;- @3 p+ T5 W" V
  407.         if(file1->vers!=file2->vers)
    $ s0 b/ q/ c: l6 m: p
  408.         {
    ! `, d: O8 v* H
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! `: C9 a# v; l& z# u7 [
  410.           c++;! J( L& s! Q% ]. ~
  411.         }! Q7 Q1 f: [6 O+ S
  412.       }
    - `7 \0 Z% g9 r+ R9 G1 ]
  413.       else3 I, ^/ F; c5 `& g/ t
  414.       {
    ' R" `' y- Y0 i% c/ n
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * n  t5 N, @; \$ \! C
  416.         c++;
    ' j4 [6 X* ]. ]6 M4 r& l+ X
  417.       }/ V; o; x6 k- n, E$ ^. H
  418.     }
    $ J% O! g/ B9 ?2 a
  419.   }5 a+ p9 c$ n/ r
  420.   unlink(".\\DownLoad\\update.txt");
    ; l) g5 S9 w, |/ }8 f0 W& o
  421.   if(UpdateLocal.size()) return TRUE;* \6 u1 U- j0 |+ c7 C
  422.   else                   return FALSE;- [* S$ G( l8 F9 O
  423. }: r3 E9 k7 b) m& N1 {( |. {1 E
  424. ; E2 v3 r+ e' I" h, F
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    0 n+ C; n# U0 g5 f6 s
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"  U( Q6 T4 A' R( y2 ]$ N! G

  427. * e- i/ @3 Z: ~* V2 W
  428. $ ]* m( s9 d, ~2 O

  429. ) G$ x7 L' s% n: y2 Y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    0 S5 Y9 T( L" Y9 ]7 m) G4 o/ n
  431. {
    9 V: ^" p$ s* l. H
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;5 O, Y, d0 q( I4 d4 o, Q1 t5 m; d
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& E& Q( ]3 m  R+ C- {
  434.   {# J- u3 l) \, m$ a! v3 e
  435.     char szLanguage[50];, \- V4 K; f" y9 S# E
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    0 ~/ b+ q8 Z1 Q/ S1 p, O, v8 |
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. u/ h: m. T' K
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 O. a% y0 X3 E" F2 h! h6 s
  439.     else                                   m_iLanguage=ENGLISH;
    % v( L; r& P: p. \- ?. s
  440.     char szRegister[100];
    4 J, z7 z5 s: b0 e
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 c! p) H# x+ Z
  442.     strRegsName=szRegister;
    . {; f, F1 @* a- ?5 i
  443.     char szPatchURL[100];; V/ r& t0 p5 }. a, w7 N( j
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 q' F8 l% F4 E" g6 Y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( @1 Q+ ], `$ P( ^8 N! E9 h! d3 `
  446.   }! G! o2 `0 S' B! ^7 D
  447.   else
    $ R* w$ q5 U! P0 I
  448.   {: y! [& X) R  a: k) b0 y! |
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);0 Z* W3 k3 e3 E5 _
  450.     strRegsName=DEFAULT_REG_URL;' `% E+ J0 L8 p
  451.   }
    ' |! J- R- t( p& h
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    / ]* h' r7 d' `% m/ l
  453.   {& \& B1 G& b9 W2 D
  454.     char szIP[50];7 a' D" Y* b3 Z* P% ]7 O- s
  455.     char szDIR[300];  N' z7 X' Y8 i' ~3 ]
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))! N5 `( W$ c0 A
  457.     {. G9 e, o0 v* p* S  h( A+ I
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");" j2 ~0 ^* d, W. `1 ?0 t/ b
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    9 S# y3 t$ d- Z) U
  460.       strHostName=szIP;/ G+ `6 q, i  G
  461.       strHostPath.Format("/%s",szDIR);
    2 h0 A/ w) V! f% X9 `
  462.     }2 Z: y! G5 W) o1 H
  463.     else" b$ Y7 |! V6 H) s$ _8 Q
  464.     {
    9 G- A" R2 i( ~& H7 Y
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 X! M, z9 {! U% T, l+ B$ \$ d
  466.       {
    . J" v% i* b- l% N5 n6 ~
  467.         char szLanguage[50];& v6 r" J& \: L/ B" C
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 v# h5 L/ q, N/ @
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) s+ P$ Q4 w% z! [& H8 x
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! ?) ?% A+ c; R
  471.         else                                   m_iLanguage=ENGLISH;
    " C  e9 O3 i6 K4 i& z9 b) d3 x
  472.         char szRegister[100];
    6 z' X5 X, C3 ]& I
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! d0 k, C( _8 M$ [  G
  474.         strRegsName=szRegister;
    0 r" x4 y  Z, t' V' |
  475.         char szPatchURL[100];
    $ n: C0 h7 J1 v% }
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' v( Z) b* ]+ ^0 t- `  z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- \5 T6 d/ F6 D9 y
  478.       }
    4 E" d( ]6 z4 S- s* K6 g
  479.       else  r7 N5 m" E/ v- y  i, d
  480.       {
    # ], ]9 F' |8 K
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- B* A! a' o$ u
  482.         strRegsName=DEFAULT_REG_URL;
    * j6 m3 z: c4 y0 O
  483.       }* H9 n9 v$ X  t( E' g9 I+ Y
  484.     }+ j% J) K, S& b" w: \' s, O
  485.   }! j. \. V  L+ O, l* x, z# E
  486.   return true;, ~; {% [( _- @  m, X& h& V
  487. }
    3 g9 C- r* z: A2 `2 l/ h2 S; a6 y4 C
  488. & j" B$ x- ~" T  T  N2 }$ i. s
  489. #include ".\ZLib\unzip.h"  @- k% {2 J" }& g
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    # U7 X- P' x- I- Q3 l8 d2 y
  491. /////////////////////////////////////////////////////////////////////////////% r% E- Q, x# m3 C/ C' b0 {7 S
  492. // CRevAppApp initialization/ v: p/ {3 v& m, O- p3 Z
  493. 0 b0 p' a. f  H- M
  494. BOOL CRevAppApp::InitInstance()
    ' u2 I$ x9 r7 N
  495. {
    2 R7 w7 s( v" U7 `+ c$ k
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ( b5 X2 _6 {" n+ h
  497. 6 T  z( p( l: n2 b3 r
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);& I- O- w4 F) g% Z/ Z# `: D9 c! c
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))8 A8 k0 e- ~$ F  F; f) z
  500.   {: B6 J  I1 o% S% C) N" w- H
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    5 D" v  ?% m3 @( E8 z3 z/ {
  502.     GetPathFromFullPath(szPathTarget,szPathSource);$ e3 Y( x6 i' d6 ]
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))( ^7 B4 S- N9 {& @, P! a
  504.     {
    ( M& l/ L3 t0 g
  505.       strcpy(szPath,szPathTarget);! \* G: G6 _0 u% n
  506.       SetCurrentDirectory(szPath);
    " @: m6 [4 C; w6 P  {
  507.     }5 ]. ?/ t: L( V& e) N/ {* M8 d5 V0 B" k
  508.   }0 O. b9 E0 s/ U8 q. s+ Z# I
  509. #ifdef _DEBUG
    1 A* X# _6 }4 h4 j& N6 x# S6 ^
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 J2 y' m* T( l3 v1 s
  511. #else
    - U4 u8 ~+ l" n, ^7 S9 ~4 H
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    7 G9 F+ U3 z( K' O9 e, V. u
  513. #endif
    9 e# L% ?2 p  {; n% Y5 `1 w
  514.   {
    - w# Z# B5 V3 }( X+ e# U
  515.     char tempFileName[MAX_PATH];6 V. i: E* Z1 c+ E; D
  516.     strcpy(tempFileName,szPathSource);
    ( F, @, a2 T) R  X" v) {" e1 t3 x
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ' b( v' a! u0 U; h: Y0 ^( D
  518.     strcat(tempFileName,"\\$CSUpdate.exe");; @8 q5 _8 z* `  {/ M; Y- y
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    6 ^' h2 w- _. e, g/ D
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);* V! t' f* w7 @, `$ E( a9 S
  521.     return TRUE;" X7 a( D3 t3 n8 t. S
  522.   }( ^! s! J: d9 D' c/ a1 j/ \
  523.   // Nuke 0118: Delete run.exe: ]7 |8 `: _. L2 E2 ?: h% T: b
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );! x4 W, h1 {8 ~  ^$ A% u2 i; f' H9 o
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");0 l6 x( D( S* L0 c1 b. q
  526.   if(!ReadCfgFile("Config.ini"))& u9 I4 J! @6 p
  527.   {5 l8 W9 p' m, N# j
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);$ X# R2 q; D, p; a0 @; e' k% Z0 k
  529.     return TRUE;
    8 T+ [7 V% o2 Q0 _
  530.   }/ h. t2 b* ]; v: \& l
  531.   HANDLE mutex;
    ' a) P) z7 m9 U4 @8 H
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    - i8 E6 V5 b! u2 ~9 Q$ l
  533.   {
    : ]) x* l7 P7 O# x3 X. ~
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ; C' L- E1 g+ L: [& J, o
  535.     {2 A9 m9 U' |( n+ G- J
  536.       CloseHandle(mutex);! d1 C+ o# {$ [  f+ @+ A9 o
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);& M+ e* B3 H- C- t& G  [0 m
  538.       return TRUE;4 [( [# o5 [  Y2 K2 ?
  539.     }! M. S5 h3 k! t3 @
  540.   }  
    ( x  z, R9 ]+ n8 m
  541.   CloseHandle(mutex);
    / ~: m. Z, R, H2 C- Y  [
  542. ) C7 K7 K5 G2 y: f2 P, t- z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);: v4 f9 ^# R& X
  544. # Y/ h* r. _" B3 X
  545.         AfxEnableControlContainer();
    / f% Z+ z+ G. c& h, I

  546. 9 x7 O4 b, f/ P! D4 N
  547.   bCanUpdate=FALSE;# p: o) q& o# t5 l# o
  548.   dwStartUpSteps=1;; z. u; D  j% _- A( w
  549.   dwProgramState=AP_NOTHING;
    . z1 Y. k6 L& z. e) v! T

  550. 4 H. S. G: U0 D7 u7 ^2 x, }4 A
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    9 m% f( t* h+ K. n% x

  552. / t3 h$ o2 z3 A. b- Q
  553.         // Standard initialization
    . R" {: [- c. _. R8 P* n
  554.         // If you are not using these features and wish to reduce the size% b1 o, y9 `" j5 ]
  555.         //  of your final executable, you should remove from the following
      Z: P& R9 U! l- P% E. B
  556.         //  the specific initialization routines you do not need.
    ) H2 ?* C9 Q% L8 ]. x* y, K

  557. 6 H; N" i5 t7 J1 i
  558. #ifdef _AFXDLL; Q/ j1 d5 X9 Q
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 q# F" K2 G, p! m
  560. #else
    ' c0 g1 o* z  p  n* `
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 s" C7 G) G, W1 ?% R. J
  562. #endif/ n7 @: y- j8 K
  563. & i, O9 f, C% Q6 D
  564.   dlg=new CRevAppDlg;
    ; x. S3 M$ p1 t# m
  565.   dlg->Create(IDD_REVAPP_DIALOG);3 _5 [+ C3 m$ j$ v0 }( \( I
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    0 O$ H; J, m9 `, z0 C
  567.   m_pMainWnd=dlg;# v; h; E3 v. g+ _+ j' Z
  568. ; b/ v; ~$ D' _( {6 ]$ C
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    + B1 b' ]& S' B
  570.   O0 s: t# Z/ I  y3 d/ b
  571. //  GdiplusStartupInput gdiplusStartupInput;* f6 E: q) A6 u3 H! B
  572. //  ULONG_PTR gdiplusToken;
    . c' e; Q; S" f) Z4 t
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 K) y$ P! q: d8 {8 N* e% H$ A; u) v

  574. 8 V; k6 ]9 m9 k; t& w$ W! D
  575. //        CRevAppDlg dlg;8 T4 I5 {& O( e% t
  576. //        int nResponse = dlg.DoModal();" n4 p: e% e) N% ]4 U
  577. //        if (nResponse == IDOK)
    2 h8 i% w" s0 {! p4 e; b6 |
  578. //        {
    " t1 G0 Z0 R. P9 W
  579. //                // TODO: Place code here to handle when the dialog is. _: j: |  R: K
  580. //                //  dismissed with OK
    . k! @. g- g! G( P6 z0 N. I
  581. //        }+ t! Y+ v; b) C* l1 |% o
  582. //        else if (nResponse == IDCANCEL), s9 g0 q1 R" Q8 r0 p
  583. //        {5 Q7 D3 S* @3 p
  584. //                // TODO: Place code here to handle when the dialog is) Z" U- c2 \0 T& R' W
  585. //                //  dismissed with Cancel6 _' W0 \4 X9 B' |9 [
  586. //        }
    1 B9 G# B, e8 e" \4 [$ t$ i* G& |+ A

  587. ) E7 n: z2 l$ j3 {* @
  588.         // Since the dialog has been closed, return FALSE so that we exit the
      ]" P% s* t% z/ t2 \+ I& g: X
  589.         //  application, rather than start the application's message pump., s1 v& s0 e; f' K
  590.         return TRUE;
    $ c8 i4 \) `  w8 E8 o
  591. }4 E7 i0 h- n$ b. j

  592. 0 b3 U. E0 V) U( B% R' d- y3 {1 W
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * y4 ^, Z, p6 B) b
  594. {
    1 F7 T/ Z4 d/ S5 o7 V0 ^
  595.   int i;6 G. Q2 O9 F! U  Q/ S
  596.   char *szRet;  ?' P2 C% B9 D1 j/ H1 |+ ~  j, f
  597. ' `$ i5 c1 {5 U  `) O) N
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    $ t2 m0 N/ H5 o: n1 m, f4 K" p- L
  599.   if(sztoken)
    . h' O. H: T8 ?0 D0 {  k
  600.   {
    4 n: q+ _' X( M1 d5 P
  601.     szRet=&sztoken[itoken];
    $ z/ I2 a5 \, D! X+ I
  602.     while(sztoken[itoken])
    ( B5 b8 h6 u7 a1 Q6 `0 A( ?, M. P
  603.     {5 ?% I0 p9 F; l# `9 p
  604.       for(i=0;i<(int)strlen(token);i++)9 h+ Z- J6 r* Q% V, s6 V5 H/ l0 P$ x
  605.       {
    3 S1 J& [( b/ h8 G( K3 c! S  N, G/ ~
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ( t3 c+ y7 m$ }( o, G& z$ e
  607.         {! F1 m5 ?. l* V7 Y
  608.           sztoken[itoken++]=0;
    ; C6 i) x# E- ^# @5 t
  609.           sztoken[itoken++]=0;
    1 `% ~2 |3 U& O, N5 U
  610.           return szRet;
    . L) P4 T9 u: D0 Z6 {7 V
  611.         }
    : C. i0 A" T0 g% C
  612.       }
    ; N+ }: |7 X% A
  613.       itoken++;4 r) |6 M$ t# s0 T8 I
  614.     }3 X* v' y2 N$ W7 T
  615.   }
    + l8 E; x( ]% ~/ ?' L+ F
  616.   return NULL;
    0 I8 J; Y+ C. d0 X4 n) m' ?
  617. }+ I, @# p0 d/ s9 [) O- s# G9 P

  618. $ T4 {  @  ?  X3 L6 J6 \: `& s5 T
  619. void ProcessProc(long Total,long Current)* _+ s9 S( }. A& V" n' R
  620. {
    ! A5 M9 ?$ e: x2 h8 V  Q6 T
  621.         MSG msg;; |- S4 f/ C$ i: b0 y; X. b4 p
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);2 ^8 p) {' F+ D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    4 p6 v2 t4 p2 ?0 L
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ' x1 [& J+ Q" R; E* |
  625.         {$ W3 U: b4 b) P+ P# g/ V( g
  626.                 if(!GetMessage(&msg,NULL,0,0))
    8 X, ~. ~( t1 ]# y" P& Y4 W
  627.                 {
    ( F) Z: \0 e) @
  628.                         return;* z' f  Y0 {1 h# L; S, U) N5 [
  629.                 }9 k1 F  A3 K7 V3 f- k
  630.                 TranslateMessage(&msg);
    6 t" S+ b+ Q0 [3 }& d: ^! G
  631.                 DispatchMessage(&msg);
    ; u" \* `6 K5 E) d7 E/ x+ w! c
  632.         }        ! M7 `$ Q: S; v, H- p
  633. }
    - t% R1 K& x$ Q

  634. 7 |; s0 k2 g9 B
  635. BOOL bFirstChar=TRUE;
    . \7 Q7 U$ B9 j* \

  636. 0 W# \3 |" k/ X' N0 I9 j6 f, Z$ d
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    5 |! G% S: T( c
  638. {1 B/ E+ U  _8 {/ j: w
  639.         // TODO: Add your specialized code here and/or call the base class
    " q4 `# U' w  Y, d
  640.   switch(dwProgramState)% M+ s$ L3 P- b) l' r9 z
  641.   {" e* G, v6 q" u. s
  642.   case AP_NOTHING:3 w, d+ i' n" O' n
  643.     switch(dwStartUpSteps)
    9 G; R$ a0 ~: g/ c- U1 V% z
  644.     {
    4 V0 ^1 \" S3 d6 f$ Q4 l  M
  645.     case 1:! v3 D& G: ~* c
  646.       {+ @$ p& r! S9 k3 B
  647.         int i;
      X! P% a4 d) [( z+ d4 ~
  648.         CDC *pCDC=dlg->GetDC();7 J, \% X( K! v# K/ V
  649.         HDC hdcwnd=pCDC->m_hDC;
    0 H% b8 m" Z1 X( c
  650. //        Graphics graphics(hdcwnd);" O$ q* Z* z* I; k! P
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");8 Z+ ~4 O( W  c( p7 A9 L
  652. //        INT iWidth=bitmap.GetWidth();5 l; y- O, y" X5 J/ L  M1 Q
  653. //        INT iHeight=bitmap.GetHeight();
    ! B; W; V3 t* z! ~
  654. //        Color color,colorTemp;
    ' J+ g3 H( @; m9 ^. p" T" R) k9 ]; |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)1 |2 f1 m7 h, x5 Z
  656. //        {
    ) G3 A/ m5 s: A! \# T* i6 X
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    0 z# a2 R* E3 h9 V  u8 F/ J
  658. //          {
    2 F% {% b8 _4 I( b( J
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    7 d; g  t/ G% d
  660. //            colorTemp.SetValue(color.MakeARGB(. c0 r! e+ v4 r" E7 u. a! }
  661. //              (BYTE)(255*iColumn/iWidth),3 O2 T8 ^+ j/ ]  |* l3 K
  662. //              color.GetRed(),! O0 F+ c/ M7 a0 T! L* B" ~9 ^1 i! m/ u
  663. //              color.GetGreen(),
    ! Q) r: E4 n8 n
  664. //              color.GetBlue()));
    + `/ S4 ]( r8 P- m+ @
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) m# Q& H' f. u) P
  666. //          }  l8 v. T* _- H
  667. //        }
    . I, p+ R, a  \' ?! ?$ E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);% @2 P2 d; _1 e# s: n
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 ]9 h, l. ]9 F: D4 Y" ?
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 p9 [+ V/ G& ?: @
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : I- {3 Y: {* l6 M/ f# m
  672.         for(i=0;i<240;i+=8)
    , w$ D  c: u9 ^1 U0 k
  673.         {
    % r. B& j. k, Y: \. P
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% V' S7 I  _1 v% f5 y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! K: L( M+ b9 C* G( s
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + I; t  j, n9 [& F; S
  677.           Sleep(33);0 [! Z( ]% W9 f% U4 q# @
  678.         }
    ' |! d4 f& K1 G! W8 N, q" w: d
  679.         Sleep(1000);# `" s7 W+ J9 M" H" B# _& ^$ Z, n
  680.         for(i=240;i>0;i-=8)7 m# w  D- n0 u* E) p0 D) M6 n
  681.         {
    # y" l+ D+ z3 v) d6 x$ B0 R* q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" N: K$ ]# P  W; i" l
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);) n! \- c7 e4 j" d
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' @* s2 e. \/ K3 l/ ^6 O% D
  685.           Sleep(33);
    8 Q+ v2 h9 A( ?- V$ u
  686.         }4 Y) N9 E3 @' t5 u# V: ]7 W
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);: c6 G0 i& A2 o, c& Q3 E
  688.         dlg->ReleaseDC(pCDC);
    $ b9 \3 b, j4 C
  689.         DeleteDC(hdctar);5 y! l$ C# L9 w: p) R6 I
  690.         DeleteDC(hdcsrc);! t! H; A9 C7 }/ d, I( R
  691.         DeleteDC(hdcorg);
    6 G0 T8 z, e- K9 N/ \' k4 S, o" D
  692.       }
    4 Z5 }5 o6 }$ y9 M9 E; B( t
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);. Q5 R: P+ R+ H- G# L0 }4 c
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  T+ [# W! P& \, p
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");8 p, r6 n1 E7 I! H* b) Y$ d; w8 q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");1 a. J- s9 s) h/ P5 W
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / W, j3 e, z. Q0 n7 u" l7 A
  698.       if(!Dn.Connected())
    ' c" _1 d0 H7 p5 U$ K% b0 M
  699.       {7 F  N+ V8 J- N9 I
  700.         dwTotalFiles=1;' b/ M. ]3 v7 Z/ B
  701.         dwDownLoaded=0;
    ; m2 G1 V8 E8 b$ v4 u
  702.         bSilentStep=TRUE;
    , ~6 C( `5 q# h) _9 J% {$ c
  703.         bCompressed=FALSE;
    ! G3 R' ]# e0 E% _1 d
  704.         strExtLocal.Empty();
    $ K; g5 i2 k  `) o* h2 D
  705.         strFullName="readme.txt";5 r$ {* F: G- h& p
  706.         dwProgramState=AP_CONNECT;
    ! K) r: d! j, ?2 j. F5 c
  707.       }6 N! M0 ?; I6 V. X. B! g
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();: Z# ^- E, U: R, R  p3 a1 P$ W4 t
  709.       dwStartUpSteps=2;8 g7 y* j& H$ d
  710.       break;
    ; ?2 |, B0 V3 m; p- I4 w" a
  711.     case 2:0 Z# ?& F; s* R: f( K& i1 V+ C7 ~
  712.       {. w7 o) H; \& a5 N0 D" B
  713.         int iEOF;% I: G1 w" T2 Z3 X( e  H5 d
  714.         FILE *fp;
    # F$ v3 o; k8 {% q
  715.         char szString[512];! Z* Q* m8 a. Y9 f& M6 u
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    , y) m$ ]" _: f0 S7 c
  717.         if(fp)
    # ?0 u) y8 v4 d
  718.         {
    - t3 Z; o4 A7 y  P
  719.           do9 |! o0 K, @/ B, {7 E
  720.           {1 f+ _& Q+ X/ Y$ ~6 i, P
  721.             iEOF=fscanf(fp,"%s",szString);* y7 T: O4 V/ Q9 ?  k" d
  722.             if(strlen(szString))! e% J. T7 O! F2 w: H# u
  723.             {
    ( M, f" {6 U2 G: N
  724.               if(bFirstChar)
    8 U* @& L# r" y$ C6 r3 x, `( V
  725.               {
    % w- W5 O2 z$ B
  726.                 bFirstChar=FALSE;. o* B3 U- j& K; t+ u2 K4 J# [
  727.                 bConnectIsBig5=FALSE;
    2 J: L& E+ q2 @! b# e2 b' B
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    4 I2 E( j: m0 ^+ ~  G7 G
  729.               }( N9 N' A* i: c* A9 I
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));/ p1 q5 J* ^/ n# B4 b( y/ r
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));( C3 U. _. ?( l6 Y$ x. p
  732.               dlg->m_ListText.AddString(szString);$ s1 I" Q' ]- T" w. w
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + B, Y3 v) {' ~, T
  734.               *szString=0;4 \5 H8 j' p% l6 r( D6 y
  735.             }/ J6 c; C; t. ~+ ?9 e3 D
  736.           } while(iEOF!=EOF);
    ; X, {! p3 E1 n9 Y
  737.           fclose(fp);: D& O6 V0 V9 m, Y$ _' ~9 i
  738.           unlink(".\\DownLoad\\readme.txt");$ n, }8 O- r7 I& n9 S. Q  |$ O/ y
  739.           dwStartUpSteps=3;
    ; t0 ?2 G: x4 S( t
  740.         }
    & G( F* t! H% w: u
  741.       }
    ! l6 x4 N  Z  Q: I* I0 G0 `
  742.       break;
    % z# J$ E1 C6 {4 X4 G8 v
  743.     case 3:" b; `- m' v2 Z( k% H5 [" E
  744.       if(!Dn.Connected())
    8 l3 X: N- Y4 `( I. R
  745.       {
    ; p# N/ H' q1 I
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  v- U/ ?' r" a7 n3 Q( v0 B
  747.         dwTotalFiles=1;
      y( K0 P# j5 t! }& ]! ]8 t+ U9 F
  748.         dwDownLoaded=0;
    ) ]- y: T- i% k$ z
  749.         bSilentStep=TRUE;
    6 f6 v9 {$ v/ O9 ^
  750.         bCompressed=FALSE;6 E' h3 P% p$ T0 g- a- J5 g. [  Q- R
  751.         strExtLocal.Empty();. Z  n" d" N4 i2 W! k) V
  752.         strFullName="checkversion.txt";7 C8 K* q1 }1 [/ ^$ `
  753.         dwProgramState=AP_CONNECT;1 _1 L5 u' y6 ]0 w. N1 T
  754.       }. q  w4 `2 f4 v: y7 |5 \
  755.       dwStartUpSteps=4;) Y4 n' H& |9 S" F
  756.       break;
    / }( g% U6 ^1 N1 @: x& W
  757.     case 4:
    7 K" [) f" T% F8 C+ e9 \6 m
  758.       {
    3 |- q1 J3 {1 n; ^  v# i
  759.         FILE *fp;
    % [6 Z. N" X% s
  760.         char szString1[128];
    # ^: Y5 z- V4 R; h
  761.         char szString2[128];) P, w1 S  s; x$ m
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    " g* H& U# `/ n" h) B6 `
  763.         if(fp); x% g; v- C" G( q6 [/ {: S9 T
  764.         {2 h4 i) ?9 c! Q5 x
  765.           fscanf(fp,"%s",szString1);
    % d3 l' z+ z- J, U' f/ I
  766.           fclose(fp);
    6 a2 \3 ?- K7 M4 {# i! k+ L- E
  767.           fCheckVersion=atof(szString1);
    . W; {8 k8 @0 P
  768.           fp=fopen(".\\checkversion.dat","r");  z$ G: v# l, i. {
  769.           if(fp)
    + f4 J+ Z) E% [' S; O) d
  770.           {2 p$ U2 C$ _1 k1 N3 r4 ?; Y
  771.             fscanf(fp,"%s",szString2);
    : `: @9 R$ V0 M6 ~: M
  772.             fclose(fp);
    3 n! O6 K& i: j1 r& g" g' r
  773.             if(atof(szString1)!=atof(szString2))
    ) d: ]* t* ?- Z; P; o0 u+ v
  774.             {8 x9 _6 P/ ~7 {# ^$ R
  775.               if(!Dn.Connected())/ V% g. W  t' l! u" ~6 j' d% w
  776.               {( g% L5 z2 \% h# ?4 }3 s0 h7 f: }: j
  777.                 bFirstUpdate=TRUE;8 y9 x. ~; }7 a, ^
  778.                 dwTotalFiles=1;
    % `+ t  o, S% p2 Z
  779.                 dwDownLoaded=0;8 z& _1 g% X4 A, c+ h# t6 p+ d  n
  780.                 bSilentStep=FALSE;$ M' F% Y3 W; k. @" U4 g
  781.                 bCompressed=TRUE;" z/ y1 C! I" B8 {- v' e
  782.                 strExtLocal=".\\DownLoad\";
    , k6 R$ N0 j- P; R8 W' ]5 G
  783.                 strFullName="update.txt";
    2 a# d/ N6 ^0 k" Q; P1 h+ a3 h$ y
  784.                 dwProgramState=AP_CONNECT;+ C- M+ ~3 `" _3 ?8 r, Z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ; m6 @' _& K& g, \0 L
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" O1 T8 N3 }! X, N. F, _! E
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");5 W9 p. o# y5 b

  788. 5 y6 z1 n% a- m0 h9 ?/ f3 |- ?
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 `9 r7 Z* [5 M. |* a
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    + ^  k9 L& }" C7 J, l  \& a
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)# l/ l) T5 H$ H
  792.                 {8 A9 d# [5 a+ W* j2 S
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    / O# B5 n6 j2 J: i1 v4 Q8 x
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    + m6 r# I; c4 O, p
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    : a9 y4 G6 d! U. o/ N
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 J/ [: f& C  p& x% P
  797. ; `5 n! r" d0 a" v7 a; L( V1 D
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # q& z4 v) t( M+ ]: X3 j
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : P; l/ g' }! b6 ]
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");4 J5 T1 x' D* Z, ]1 p3 J
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 l9 s- o; F- G9 T" m
  802.                 }" Q; e5 f1 q4 k2 |. e: ~
  803.                 dwStartUpSteps=5;/ G1 O3 r* e; p  e1 _8 A+ ?: H
  804.               }  \2 s8 X* i" q
  805.             }* k5 }2 [3 j# K; j$ J7 p
  806.             else
    . ^0 j/ F$ _0 f
  807.             {
    % X$ m! u* F+ t0 P
  808.               unlink(".\\DownLoad\\checkversion.txt");' a: N2 r' ]' l* a7 p( k+ y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 `: y5 n- H% ^3 i  e) L9 l4 P$ g
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % r2 _; \4 {/ _: j; i5 [3 ^
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");; x2 v/ E+ S) F: d  d9 G! q/ G7 K
  812.   h* Z0 r& K- o) L9 t  a' X' Q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! [4 F/ D1 G- J3 ?1 l
  814.               dwStartUpSteps=99;
      j# X8 r, ?0 ]+ ~8 e7 H  _4 j
  815.               bFinishUpdated=TRUE;# e* F6 P; n6 ~
  816.               bCanUpdate=TRUE;, C9 h, p! J  C  ~
  817.             }5 g$ ], l* ]0 `7 I% m+ S2 k+ r% g
  818.           }
    ; E+ N( {/ g- u4 T- V3 b! w$ ?
  819.           else- P# a, u# ?' a1 R% u( s
  820.           {$ {( V9 I6 B. |. W  Z2 C% V' D# Z/ o
  821.             if(!Dn.Connected())8 Q% q  X) S- Y% @6 c: Z$ g3 c
  822.             {
    + {' E8 f5 h# m# d/ c& {! N
  823.               bFirstUpdate=TRUE;' W  m- n. o& K4 n" t& I
  824.               dwTotalFiles=1;
    . o" ^3 J. a- ~" n2 _  @* a# k
  825.               dwDownLoaded=0;
    $ B7 y8 K& [; ]. L* Y3 Q& t: |) E( m
  826.               bSilentStep=FALSE;
    4 |. `2 J# |/ n! |& \3 _$ D
  827.               bCompressed=TRUE;2 W% ^3 x) U  o/ a" U- ~+ c+ M- Q) K
  828.               strExtLocal=".\\DownLoad\";
    0 D9 c# E; m+ T2 z) U  g. L
  829.               strFullName="update.txt";
    5 J/ v: R8 S% A+ A( Z
  830.               dwProgramState=AP_CONNECT;/ F2 ?: E) s8 I: ~" Q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' Z# u: {- O: c9 N
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    $ v  M9 L/ b' x5 r5 o& F
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . v: o3 i+ S! S
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" h* ?# j( p" Q9 F2 B% ]
  835.               unlink(".\\DownLoad\\checkversion.txt");3 [* o9 b" K% t  \
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    % Z7 L2 i2 b4 E. j/ A4 G1 L3 k
  837.               {
    % v9 d% n! g9 F& c; [4 M
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");! A, p$ ^! C# C9 G. r# y& n" z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");; ?: n* _$ }8 O
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    . T8 P! x- N( R
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 a" ~; T( T, j- W$ Q1 H% I
  842.                 - {1 `6 T) z& |
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) m9 a- u' Q4 q3 W/ ]
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! [0 H/ B3 q: B
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");: o4 H" E4 q  \3 `$ |; v  Y  f- M6 Z% B
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      I2 \% W( I4 ~- v& L! M* s8 s
  847.               }
    , v/ @* k7 y$ j( {
  848.               dwStartUpSteps=5;
    . f" R0 D$ i% \# j$ F1 ~% D- D) u
  849.             }5 A5 R; ~% k; P0 Y9 r& W6 }/ O
  850.           }# v. {5 Q0 [9 I8 ]
  851.         }
    1 G$ R# `% E0 h2 L: U8 p
  852.         else0 H. s5 |7 m5 n! y6 H
  853.         {6 X8 V; [- h# Y7 ], j1 Q4 Z
  854.           dwStartUpSteps=3;4 J% o( I) z; r7 H
  855.         }
    . m+ }  z* W4 d0 n/ l% d; o
  856.       }+ J! |( _; X7 B" R& d$ r$ X
  857.       break;, l* E) c6 [5 L  K
  858.     case 5:
    + K* v1 {* R$ Q0 q
  859.       {
    / B2 O; x) \3 H) z' W1 i2 p( H
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)4 n) |6 \: X; m7 o
  861.         {
    / x8 b- U$ A; Q; g1 j; ^
  862.           int opt_overwrite=1;
    / T. S$ q' s. c3 ^2 k; o5 D
  863.           int opt_do_extract_withoutpath=0;; G+ R6 ]/ r  K1 x4 `3 m8 i0 \4 @  o
  864.           unzFile uf=NULL;6 S6 W; i* ?' g3 l2 U. p. [4 S: V: Z
  865. $ z: A2 ?1 ]3 g
  866.           uf=unzOpen("Wsa.zip");; j6 g' r4 t& s0 @! \/ m3 p
  867.           if(uf)% A8 z; p3 Z$ b5 r% b  ]
  868.           {
    7 x9 `5 P3 p3 N8 X
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);0 h( r; \4 @8 k6 {
  870.             unzClose(uf);
    6 b  W0 f3 l  g5 L' V7 e
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");5 r" ?* f- q& v! h! c6 t6 g  T. r. f/ t
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");) }0 u! @; T1 o. O
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    % n1 o/ ?- T; Y. R' s8 z, ^9 P* D
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 F1 K: P4 P" u5 T% X/ ~
  875.           }: r3 r* U, B4 W2 @( `; {1 l
  876.           DeleteFile("Wsa.zip" );
    ; d% N3 B4 J; d1 X: }& L: x
  877.         }
    * m% Q8 r" S8 }% Q6 u9 `, I

  878. 4 x3 h2 c' G0 [
  879.         if(CheckLocalVersion())
    % D8 A( l7 d) v; A9 k% a( m
  880.         {
    & ~! `- d; F; f. t! b1 y
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");; }& I$ n; B8 z- M7 r
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
      H% M0 c5 z- d3 G& b
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    4 [' x# a3 D. I
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ V* d. I: m5 A2 W5 [# o
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);% x, E* U7 \+ k$ ~
  886.           dwStartUpSteps=99;) q6 A! K! o. D  K7 `3 P3 P
  887.         }8 K" B# U) W1 A3 z+ {1 c
  888.         else( E  C8 X4 H4 h7 W. X; v% O' q
  889.         {. C, g7 }* W3 `/ y6 Y2 ]* l
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 ^/ n- m2 S) A- o1 I" _7 z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - `1 ~$ d- ^  Y1 p9 M
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");5 j7 s4 U! S, P3 D& t

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

" J' E4 e) [- E& @$ N/ d7 B( T# V' v6 g: m- |

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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