CSUpdate.exe源代码

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

# J3 E, f4 p0 J. @, l
  1. / RevApp.cpp : Defines the class behaviors for the application.
    - Z5 u$ {" b) ^* U2 E% [
  2. //$ r, X) O- x; z3 w$ i: K
  3. ! K, ~0 C: z! y; d3 Y9 a. {& O6 `
  4. #include "stdafx.h": m: A4 Y' L* a2 d' r, o
  5. ) m$ }! F! D  |  @
  6. //#define UNICODE
    & f; |- m, J+ K8 v
  7. //#include <gdiplus.h>
      A+ @9 g$ Y, O9 s3 D$ s  l
  8. //using namespace Gdiplus;
    0 L# G0 P! |! t* P/ Q" F% r" D: \

  9. 7 @1 Y5 P3 V. O3 {6 E+ z
  10. #include "RevApp.h"0 F: r. R+ R- L$ H7 C* N
  11. #include "RevAppDlg.h"
    9 J6 h  Y+ b- d0 i2 g
  12. 5 J2 r# m6 g7 E- @
  13. #pragma warning(disable:4786)3 E$ ~  S( ^7 v; O
  14. #include <map>1 M& C! F; [" @2 z& y4 U
  15. #include <list>
    0 B+ i1 j8 w7 l+ u+ g4 c* j
  16. #include <direct.h>& {7 C, p& Z. I& e0 |0 l+ L" Z/ @

  17. " [' f  V  U2 W/ l
  18. #ifdef _DEBUG
    4 i% W' y$ p/ j6 D; e& X" F
  19. #define new DEBUG_NEW, {* Y7 r( ~3 a
  20. #undef THIS_FILE& N  k3 V2 J1 I4 c/ Z" m, I  {- J
  21. static char THIS_FILE[] = __FILE__;
    - ?$ R) K6 u3 m2 F5 D
  22. #endif
    7 u' I# Q; e0 e) M
  23. #include "SkinResDef.h"
    0 n' S2 r/ Q3 H1 K: U+ X) U
  24. #include "ChangeBG.h"0 f4 g( Z2 I  u1 P1 B& m
  25. #include "AFXINET.H"
    $ i2 I2 N$ _/ Y$ B, F

  26. 6 O* z2 I" k; y* L, r2 c* R
  27. #define TRADITIONAL_CHINESE 0. |1 |+ v. A& b0 N
  28. #define SIMPLIFY_CHINESE 1. ~" u  M$ a- l# w+ k
  29. #define ENGLISH 2
    1 A# g( v9 V' j. Z
  30. int m_iLanguage = ENGLISH;* u: |& z  J& D6 _6 f
  31. /////////////////////////////////////////////////////////////////////////////
    % Z2 W- ~, t! n* Z% I
  32. // CRevAppApp
    ) ~+ x- }8 o0 {+ |; i9 N
  33. 7 P4 k4 j3 D/ B" e0 P
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    5 ]( B) R8 n  \4 P* E
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    $ Z8 B# D* c# j4 z2 U
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    3 y: w& }& m( P0 H" H& _
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!# z. P! x% U+ Z+ c: N* O' E
  38.         //}}AFX_MSG2 J" }# f3 V! u# C
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp). N3 X& _2 s* W3 p; I' C
  40. END_MESSAGE_MAP()" Z, M4 K7 u1 F; A7 ?  Y: d. ?0 E
  41. 0 A" R8 C1 e7 U4 Q
  42. /////////////////////////////////////////////////////////////////////////////$ L7 p3 M9 T! g/ U* o- q
  43. // CRevAppApp construction
    . K+ p7 _+ n$ h' o9 a( L$ b

  44. ' i: w3 f2 E* L
  45. CRevAppApp::CRevAppApp()3 ~. G  _9 E5 l+ r9 C; O
  46. {
    . {" ]5 }3 v5 v+ o
  47.         // TODO: add construction code here,
    5 Q1 B% }1 C2 q3 Z* P
  48.         // Place all significant initialization in InitInstance% i/ J7 e" m2 J: Y0 u( x* W5 A
  49.   bDisplayIsBig5=FALSE;
    2 h) ]/ q3 c/ x, l
  50.   bRestartUpdater=FALSE;
    , n7 s. C$ o( w
  51.   bFinishUpdated=FALSE;$ c2 H5 L2 [% N! K" {+ {* c
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;% l) C- F: x- {$ Z* D% ^
  53.   InitChangeDataBig52GBKS();
    % D) N5 T2 Q2 \9 X8 {5 T
  54.   InitChangeDataGBKS2Big5();
    3 I+ j$ f& Q. F9 Y) M
  55.         //
    * R# S' w$ Y/ }
  56.         bClickRunExe = FALSE;
    $ K) {4 I0 G. |4 C: A4 ?5 g
  57.         //& s. j* Y0 ~3 n; x5 N
  58. }
    8 `/ Q9 @4 L6 m& X5 Y" P% N
  59. 4 K' v8 y: R: K5 @0 D7 U
  60. CRevAppApp::~CRevAppApp()4 I, f% j) K( H( C5 W$ a4 Y' H
  61. {
    ( x; V" i4 s" K
  62.         // TODO: add construction code here,
    8 j! S$ }  B' d  H5 F+ C
  63.         // Place all significant initialization in InitInstance
    % \1 l5 j4 Q# t  U# [
  64.   EndChangeData();
    : R% i; B7 }: _
  65. }# a1 m) B. ~+ W
  66. , ~% Q) L7 ]3 p  W! X/ D! T) ?
  67. /////////////////////////////////////////////////////////////////////////////4 b7 l8 B$ V  M( n4 @
  68. // The one and only CRevAppApp object
    ! Q$ c) r. Q+ I  J- T. T

  69. + r2 m* x" G6 P2 F' Z  E' T9 }
  70. CRevAppApp theApp;
    : r; ?" ^! C5 u$ a9 g

  71.   K6 Y. u3 o4 a5 B6 m
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)4 E3 @* d# [' Y! A
  73. {" |) ?  h! u: H2 |/ q
  74.   int iEOF=0;
    9 T5 R# J8 x: y3 x4 M3 h+ b4 a
  75.   char szTempName[MAX_PATH];+ ^7 b* Q5 D4 m& z
  76.   *szFileName=0;; r; c# C9 i  ]9 w/ ?# r
  77.   iEOF=fscanf(fp,"%s",szTempName);
    4 a  g  C6 v4 {" s
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    3 Y+ J6 ^+ d( q2 Y% j; i% I, p3 \
  79.   {6 b$ ~/ ~, c( \& V( @* i8 z
  80.     strcpy(szFileName,&szTempName[1]);/ E+ K7 R' M6 u( u9 v
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF), |/ ~6 Z+ `% T; N- X1 z: G; g
  82.     {
    $ T( ?$ U, X! K3 z- D$ `0 o7 Q
  83.       iEOF=fscanf(fp,"%s",szTempName);& r" k2 D. }! n
  84.       strcat(szFileName," ");( w- Z. }  e/ F! @  Z7 o- c
  85.       strcat(szFileName,szTempName);
    3 j# `* z1 o' C; L4 O
  86.     }4 Q$ H$ w" E0 B
  87.     if(strlen(szFileName)>=1)! j7 w% l* z3 s  m: ^: v9 S1 B7 Z
  88.     {) A0 b# k3 z% T9 t
  89.       szFileName[strlen(szFileName)-1]=0;
    8 {: _0 i; o% [4 C
  90.     }
    + X* E) C: @- z0 T7 f, y
  91.   }, M* o9 Y8 l$ v0 b4 I/ I$ X. l
  92.   return szFileName;
    ; S) J. }& f0 D, q' c
  93. }8 H0 {* s0 ]- r. A% P; a
  94. + n. f& m9 h; w% B1 ]9 w4 f0 _
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)  }% C; U  ^4 t+ v: }0 Z7 [
  96. {
    1 _5 W* o0 y1 W. a) U
  97.   FILE *fp;
    ' R* I4 j5 y; b5 R8 d7 h
  98.   char *key=NULL;
      n6 }4 d5 q* S
  99.   char version[MAX_PATH];
    ' C) n! v" d3 x0 C
  100.   LPUPDATEFILE file,olds;% U# `4 \- ]' O$ t$ M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( P* }5 Y% F# i6 S: |, X

  102. , q, [$ y( O! R9 [
  103.   UpdateList.clear();
    5 I. }( ]' h4 K9 d/ F+ q% Y
  104.   UpdateFile.clear();
    . f) s' Z2 c- A  D0 F* F
  105.   if(GetFileAttributes(filename)==-1) return false;7 D3 n, B$ b: v+ ^* K0 Z4 L
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ) g, a6 w5 K* n8 _; _2 S% r
  107.   fscanf(fp,"%s",version);
    ! B7 y5 ~7 I/ y7 t
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }; z* N- z% b, n  [; S8 G! ]
  109.   while(fscanf(fp,"%s",version)!=EOF)2 `8 ~# M" h% X  j% s8 h
  110.   {7 f# X2 f, x: ?
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: E* }/ T( E, ?8 P, t
  112.     fscanf(fp,"%s",file->path);# }$ w; o  P) ]6 k! T2 X
  113.     ReadFileNames(fp,file->file);/ q  @& j) l' h, m( g; X* E
  114.     strcpy(file->full,".");8 [5 b6 @) A3 }
  115.     strcat(file->full,file->path);. g- _8 D7 z# q0 _9 @0 t
  116.     strcat(file->full,file->file);$ `2 H- I# ]) i
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    $ M# Q% I: _9 I. G
  118.     {' k: `- k- J" N$ y* i
  119.       file->vers=(float)atof(version);3 a' b1 d1 Y1 J; B5 |( u; y9 b6 T
  120.       UpdateList.push_back(file->full);
    # P, \$ k  |! o9 U; |) b8 U' e
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));2 o, K/ r/ ~, m7 F+ R+ d. c. {
  122.     }
    3 o$ i) H% M3 I$ U+ M
  123.     else. E! r. D7 }6 m: \4 X/ D, Q
  124.     {+ L' T1 x; z' }# z
  125.       olds=(*p).second;' v  H" S) i1 l0 k7 b% D; @
  126.       if(olds->vers<(float)atof(version))- m0 Y8 B1 I, [+ Y6 I& N
  127.       {3 P9 `. M; [) Q  x2 f, T
  128.         olds->vers=(float)atof(version);+ J& H7 g# D+ c* ?) P& [8 @
  129.       }9 ^- u. N' g; v1 ?+ v# Y) r6 N7 B
  130.       free(file);
    6 ]  t8 H0 A/ i9 f( |1 L
  131.     }! V+ X0 {+ K7 S
  132.   }
    ' T$ a) d: X7 [4 E' \+ R
  133.   fclose(fp);9 N$ Z! d4 [7 m3 Y$ B
  134.   return true;! O$ K: G3 ?' |- t" t$ q; U% J) Q- `
  135. }
    8 D$ r: {3 M( N( k7 M

  136. " r3 U0 n) Z1 Q+ Y7 \4 b3 r
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)* d7 N; z5 M% k+ H0 a# R
  138. {4 G0 x* L+ v, q8 d2 D* N+ c( o
  139.   TCHAR  szFull[MAX_PATH];
    . t& G# @5 p) w# o- R5 ?  C
  140.   TCHAR *token,*inter;% V8 ?! F7 r/ H! o' F
  141.   *szPath=0;/ E, `# a1 T2 e4 g# v: z1 V- R
  142.   strcpy(szFull,szFullPath);
    5 j) h6 q, O$ f* C
  143.   token=strtok(szFull,"\\/");: s+ ]+ _! |6 v: W2 A
  144.   inter=token;! W( H. f: j1 {! I' V
  145.   while(token=strtok(NULL,"\\/"))% I1 Y( q( h6 i# O0 v; R
  146.   {9 N- J/ N' W* R  R4 L5 Y) n6 U
  147.     strcat(szPath,inter);6 Q6 K+ M4 \# T, h" L, C
  148.     strcat(szPath,"\");( ?2 d+ ]! P' N% ^! Y
  149.     inter=token;! h/ n. \& E/ p! e0 e, z5 B9 @
  150.   }
    " J; I2 E# c! u: ?; t* d1 I; v
  151.   return strlen(szPath);" H' j! L2 O; q* w9 o$ O
  152. }1 f* W; ?5 g% }0 W
  153. + t8 J, X, d8 ?2 V7 w0 G' w
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)# g$ M" |4 b1 P7 C+ C
  155. {' P1 c0 o/ ?/ F0 e& O/ W) m
  156.   DWORD attrib=GetFileAttributes(Target);
    % u2 F& M% N. d( ^) G4 ^
  157.   if(attrib!=-1). j0 N1 N5 n; n; S6 m3 d
  158.   {) s( v" k) M1 p; Y* W
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    1 _$ M0 O& }$ v7 }7 V  Y7 H$ ]
  160.     {* w" l. l4 g% ~
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);$ c* Z' [% C7 S$ J) J
  162.       SetFileAttributes(Target,attrib);& ~+ o! {1 i9 u# s2 b# {
  163.     }: q: m9 Z2 i9 t% }% W' W/ S) g
  164.   }) ?$ a& W3 P6 }2 k( ?9 L5 F' g8 f2 i# i
  165.   CopyFile(Source,Target,Erase);* o  \$ P% J" |- f! m
  166. }
    0 B5 _2 M; c% V+ Z2 ~$ q7 T3 K! `/ _0 |
  167. ( Z, {# z* ~4 j- B
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)* m6 a% T# w4 C9 u& x. I
  169. {
    : f2 b* o0 m( Q! ~2 U% f3 c! z# X
  170.      FILE *fp;
    2 ?' L5 w7 k; w. b8 I
  171.      char  szBuffer[8192];
      ^- B$ h: k8 a  A  v. L' K& T
  172.   va_list  argptr;
    # _: U6 y* m8 i5 k2 \7 h4 {

  173. % [6 i1 K7 n" P6 b& \  j' Z
  174.         va_start(argptr,message);
    5 m1 A+ R' Y& X6 c& f0 I% J
  175.         vsprintf(szBuffer,message,argptr);( x+ |/ F" i1 P8 `0 w# |
  176.         va_end(argptr);
    $ k6 g+ Q# n! o; ~% o1 Z
  177.   fp=fopen(FileName,"a");, r# w  I& ?- x1 j5 B8 u
  178.   if(fp)  V0 M  ^7 u  G9 C% b
  179.   {
    & V" v9 L1 W  v
  180.     fprintf(fp,szBuffer);3 F, A4 k+ Y" @. f# d% I; }' W
  181.     fclose(fp);
    # w! }6 _- W, j% B: |! |9 Z
  182.           _flushall();
    8 h3 E2 P8 n- p$ c
  183.   }! v1 ^$ S4 j. M4 {' h& ^) k
  184. }
    8 _) b. v; a7 k" j5 ]
  185. 7 l, _# ]# K( r+ R- x* G/ ~, b5 z
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    2 o8 H" P( i5 S$ a
  187. {; N: s5 I# V6 B# U- X9 ~
  188.      FILE *fp;
    ! Z0 g, ]0 j5 q3 Q/ h, V* G
  189.     DWORD  attrib;
    " f/ ?" }# ?& m
  190.   attrib=GetFileAttributes(FileName);7 ?; E( J8 I' L- x. Z
  191.   if(attrib!=-1)
    - x9 \0 `) m1 F; O+ D" d9 w) M
  192.   {
    ' p6 D3 a7 A% \  R. K, G$ k
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);6 Q# U8 J2 N- _' L' H0 ]
  194.     if(!SetFileAttributes(FileName,attrib))
    6 a7 t+ c) k3 z* n
  195.     {3 J" x7 d/ M8 N: }$ L
  196.       return FALSE;; h9 n( K% J5 x5 F
  197.     }
    ' Q2 W- P* s1 Z0 o
  198.   }' z8 @+ V) W& l$ r9 w5 [% F
  199.   fp=fopen(FileName,"wb");' X0 M- g$ P: M2 H/ B7 ~$ \" ?
  200.   if(fp)
    , g$ u  v9 J) t8 L8 o
  201.   {
    , X6 o8 m/ R& Q; J4 G9 L
  202.     fclose(fp);" U. p" B% t& x) p
  203.   }
    2 [* O4 U$ l" C0 p/ P% i, R
  204.   return TRUE;
    ! ?! A. T4 ~' q
  205. }
    ; E" A' ?5 X6 V
  206. 8 M1 N) t5 p5 l6 w$ t5 d
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + o# m1 f6 j2 R/ [; }6 r! O) o
  208. {
    ( ^$ s+ b1 ?- |' |9 `! p
  209.   char filename[MAX_PATH];
    ) N3 k+ s; }' Z, S, V
  210.   LPUPDATEFILE file,olds;8 n- J* B. e0 f" {
  211.   std::map<int,CString>::iterator i;! Q9 H! I& }/ d: {, O. g
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 o4 O* x( u& q+ H+ j
  213.   std::list<CString>::iterator l;2 H8 a+ l% f* F3 b% Q, ~( I* w+ c& i

  214. 9 P* y5 E3 O' N) [5 ]
  215.   if(bFirstUpdate); ]5 A' \- O9 e/ H+ r
  216.   {8 Z' p6 U  }8 L0 Q4 T9 y' w
  217.     dwCurrFile=0;& O' x% t; f5 m" c
  218.     bFirstUpdate=FALSE;0 V; ^9 R( Y( Q, |# E& e# }% I& w
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 ~9 e8 p1 z' {4 E
  220.     {
    $ ?0 h  F* Q5 \; `: u
  221.       dwTotalFiles=UpdateLocal.size();' {8 m5 X4 X0 k! `5 M+ ]: }
  222.       dwDownLoaded=0;3 B- |+ Q; D6 `0 u9 m, m# n
  223.       bSilentStep=FALSE;, w/ d6 U3 h4 Y  f! Q0 ~! K
  224.       bCompressed=TRUE;
    + e6 |9 ?; F+ D# c+ h' @2 T
  225.       strExtLocal.Empty();; F/ r% L! {" ?  B
  226.       strFullName=(*i).second;
    8 W/ L& y) {) j/ U# U$ N$ e& q7 _6 p7 X$ |
  227.       dwProgramState=AP_CONNECT;
    - V) H' ]! [8 x( ]
  228.       return TRUE;
    % s, C* {4 F4 E* u* I: q
  229.     }
    3 _: ~4 J4 u: y
  230.   }
    % g) {9 Z9 p  x$ }/ J6 l
  231.   else if(bRestartUpdater==FALSE)6 @4 u! K) i$ N7 q
  232.   {
    % d! e8 h( C, g/ G. @
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    3 g, L/ W5 A. ?1 @) w; A
  234.     {
    : t) T0 N8 O6 C: [
  235.       file=(*p).second;+ X3 `! F1 f7 g: p* H9 |
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())( s3 ?+ N0 S6 N) O; B$ K
  237.       {& J/ p* i+ t% b# r" A
  238.         olds=(*p).second;& q9 N; b/ F. s$ I
  239.         olds->vers=file->vers;
    , L5 L4 p5 _0 u' t% S! }3 ^
  240.       }
    $ v$ w# }- V/ `! X: q  v/ U; ~% C9 q
  241.       else
    3 A5 ^& L1 }  }- n9 s. G
  242.       {
    $ i: ~$ \! g7 h* C
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 R  t+ g4 L& j) ]7 [
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* ^, T. N& @: T( p
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    # M% F, }) z9 }! b9 n* G
  246.       }& X% E1 e: j$ J* l# W
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    4 c2 Y5 ?( G' N* v+ j
  248.       sprintf(filename,"(%s)",file->file);
    % j2 g5 Q% d) G- U5 p4 a7 _
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' H/ x' ~8 u$ i/ F* \- F- C
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    0 d" `% R- D0 z' F6 L6 j
  251.     }
    % ?3 u% l' h1 ]1 K+ M
  252.     dwCurrFile++;( P) J; ~2 U- t7 r: ~- S3 J
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 S6 O' ^0 Q6 g8 ^% p5 _! {" Q# W
  254.     {
    . B! l- X6 C* Z- k) ]6 A8 A
  255.       bSilentStep=FALSE;# U8 ~3 d; f! ?4 K% q5 d
  256.       bCompressed=TRUE;
    7 @4 Y7 r# {! z. k/ f8 ]
  257.       strExtLocal.Empty();" X! s2 ^! J; B( v6 V
  258.       strFullName=(*i).second;8 j/ y* K" s) F6 H
  259.       dwProgramState=AP_CONNECT;
    6 Z+ @: M% c$ C+ Y( N! H5 r
  260.       return TRUE;
      ^  K" i2 b& d! i- D: Z2 Q# I
  261.     }( G+ F8 z# z9 w! q& N! {
  262.     if(!bRestartUpdater)
    3 o# O6 \( {9 Z: R
  263.     {# Q8 J9 B6 e4 a( |/ E& q' i& e9 G
  264.       int iCurrSize,iFileSize;( \: {. l1 ~- K4 S  R
  265.       iCurrSize=0;
    # C' j! B4 o* x6 M) G0 T9 d! |6 L" Q$ y
  266.       iFileSize=UpdateList2.size();1 o3 e- f- c8 @( E8 V( C
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");" Z* E0 V, h& X7 Y+ a
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    3 l( d7 N/ Q5 A. o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    - j& J/ Y# v& m5 L! ?
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( r2 [6 B3 a4 x( ?: E) E
  271.       Fclearf(".\\update.dat");
    $ c6 d. W$ B) w
  272.       Fprintf(".\\update.dat","Bloodyf\n");3 ~) h  x+ K# P
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 y3 x/ }7 m; Y. F. i0 G) G
  274.       {8 J' Q) w9 C/ b% `6 d) i& F4 U& b1 K7 D
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    8 G0 t, t5 p$ Q: a/ i$ H9 c  E
  276.         {9 X( d! ]* \, X! e' V- t6 m
  277.           file=(*p).second;- M) v/ F2 |3 S6 n
  278.           sprintf(filename,"(%s)",file->file);
    . H1 n; Z3 v- I5 ?" U
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # x/ y# L+ [+ G9 p' n
  280.           iCurrSize++;
    ' H) A* n) e4 K8 ]3 R
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    4 n$ C& y4 W9 m6 K: z, ^# b
  282.         }
    ( Q$ m1 g6 q9 v
  283.       }
    + `7 \+ g- \  A/ Y
  284.       unlink(".\\update.txt");2 Z: t, m; G3 w+ X" Z
  285.       unlink(".\\update.tmp");
    + g0 j. v* v& R3 t2 G; j
  286.       Fclearf(".\\checkversion.dat");9 ^, E/ }5 i: j) o3 z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);2 O  I* p) g9 ^9 v! _& q4 C
  288.       if(UpdateLocal.size())$ U) T% [& o  [! k% ]) c
  289.       {3 n0 z. T  l0 r4 M- b! a0 s
  290.         UpdateLocal.clear();: P3 b+ a+ o6 ]- E% d
  291.       }
    4 e) X7 w8 I% }& ?
  292.       if(UpdateFile3.size())/ m9 |: {' }& S" J6 Y9 S
  293.       {$ v# X" A* g- P
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ) ^& Q9 @8 F' m8 p% V
  295.         {( |- ]4 ~5 J& P' {/ A
  296.           file=(*p).second;" A4 ^! ~) c% K  J5 |
  297.           free(file);
    . H# s* z4 a8 V7 g
  298.         }1 p8 R8 P5 }. K, v. H3 F7 l( Y
  299.         UpdateFile3.clear();, o* @7 X- r! G9 Z
  300.         UpdateList3.clear();9 @0 o# c6 J  Y* T9 W- `
  301.       }
    ; N( ?9 E( F% d' @( I7 i
  302.       if(UpdateFile2.size())2 ?0 {+ j6 d9 F) x
  303.       {& B: v2 \3 I; ^9 b
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + E) P' L2 z4 C1 g
  305.         {
    * O* B3 g% P1 V' X
  306.           file=(*p).second;1 ^4 r* M) i; x. a/ O7 x  e5 O
  307.           free(file);  p0 X2 {$ Q: U6 K
  308.         }* a1 m/ N7 f2 h' b$ C6 A
  309.         UpdateFile2.clear();
    ; t. W3 _1 x& R+ B; A% S
  310.         UpdateList2.clear();
    , _5 I' R% v) ^/ z. \* R! j/ ^
  311.       }& X& y; l) j# w
  312.       if(UpdateFile1.size())
    9 x  q* l0 E% K) T$ s
  313.       {8 {. G4 x! s4 V' Y2 c  M) a
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & d9 E9 Y% V) W7 q: o1 J
  315.         {
    / d- F0 |/ b5 |8 I
  316.           file=(*p).second;
    5 P& F4 p+ A/ B/ q9 y5 K
  317.           free(file);
      \% t- N1 C2 N
  318.         }
    ( e  }2 V1 t  ~  B
  319.         UpdateFile1.clear();# b4 m" h, I8 z/ e' k! K
  320.         UpdateList1.clear();
    ; c' E% J% `0 [7 ]. n) J
  321.       }" i& D* H) g8 C
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));  D- g  N  G& p& V% w
  323.     }" h% w8 X% L$ r. d( {5 Z1 B  ^
  324.   }& E1 S3 a6 q% ^% f: Z
  325.   return FALSE;
    , m& Q5 P* H9 ?5 S& b+ F. t
  326. }, a* d( a1 k9 E8 k9 \: k; o+ L
  327. , N. m- k: R2 G( J5 t4 P2 `
  328. void CRevAppApp::ClearAll(void)8 j6 F) J& `/ h
  329. {0 T6 }/ H6 A* w  b9 D4 q* i
  330.   LPUPDATEFILE file;+ J1 g6 o- w0 ]1 P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
      w! q! r, t* f* d- r* q" e. f
  332. / f8 g/ \7 v: M3 i) f
  333.   if(UpdateLocal.size())* K: [4 z1 l4 x
  334.   {2 `5 b. y3 w! K3 _
  335.     UpdateLocal.clear();
      A9 S) o2 P/ E0 v  G3 f  [/ v
  336.   }
    . o1 g" U2 H( H/ [( X  C
  337.   if(UpdateFile3.size())
    + }5 K; ?1 x0 N
  338.   {( e2 ~5 B/ b7 W
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % V; ?8 m, P: ?8 S# `4 v4 W* V) n
  340.     {  d2 o9 c( h- {' `
  341.       file=(*p).second;* g3 i+ r& u9 e; ^0 y
  342.       free(file);/ R5 e: z9 U" q. w+ n2 o
  343.     }( B# b# c& X5 N1 |; u
  344.     UpdateFile3.clear();
    9 n( F) s5 ~* ~! o
  345.     UpdateList3.clear();6 U1 Z# X$ y8 m$ B' n* y$ j
  346.   }$ ~2 l, j: v+ s5 p; \( n/ K
  347.   if(UpdateFile2.size())( M! Q) K- g( W" A/ }
  348.   {
    7 e# ]) @' I$ R# K1 k/ ~  p
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 {$ [9 y8 ^: k, T: f
  350.     {3 v7 |. g4 w3 j' t
  351.       file=(*p).second;  _, D0 t" I$ N( ]4 g7 `
  352.       free(file);
    4 a! c8 e  ]  A( w" B  k6 \% [
  353.     }5 }' {! |" c" ]
  354.     UpdateFile2.clear();
    % e6 U) o# h6 O% d
  355.     UpdateList2.clear();
    4 A/ R. m# E: M+ ^
  356.   }+ O: ^+ g- N, t9 \3 `+ J
  357.   if(UpdateFile1.size())
    4 e$ Q/ H. z/ V/ [
  358.   {
    / d' [+ W& n+ V/ l* i
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)8 L, v, o) B: P1 `% i( m
  360.     {
      G* }( e( F* N, Z! o  e* t( d+ j
  361.       file=(*p).second;
    . J$ V. ]' W  @
  362.       free(file);
    4 S2 M: ]( x# R. ^" K. ~# g4 |% j2 P
  363.     }
    9 M3 }) b6 S7 k$ Z9 f
  364.     UpdateFile1.clear();
    : _) O' e; q* l( h
  365.     UpdateList1.clear();
    6 R% w, [4 Z: D% X, o
  366.   }1 @2 H+ c& g; t. v3 U1 i
  367. }  
    - t9 L) i" [& J; u" Q
  368.   
    ( O% g0 T% P# V% I$ Y* A& ?$ f
  369. BOOL CRevAppApp::CheckLocalVersion(void)( W8 S( \$ y; E( j0 f
  370. {
    ; U+ w! M$ y7 c. B
  371.   int c;
    1 p4 ^8 j" T6 ~( l/ B5 m1 z, t
  372.   LPUPDATEFILE file1,file2;
    : h4 S9 Y/ u# r% t; T9 {
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 S( Z* {) [6 y7 q" l! u
  374.   std::list<CString>::iterator l;6 A& y1 i9 x# e0 ?
  375. " u& I" D  I' G+ z: @' w
  376.   UpdateLocal.clear();' G" @8 U" v3 ?7 g7 D4 B% q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ' }1 Z+ d- g5 N' w* a
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    , O+ W" ~: \0 }/ z) d
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);0 F# R% ^. K% T& G" c; L' n: F
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);  v, g( L% W( o' Y1 }
  381.   if(UpdateFile3.size())
    3 C7 h& K7 a; E* w0 F$ S$ J  }* z
  382.   {
    8 J$ z) f% a' g/ j
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    : V6 G) _! m. o  q9 r
  384.     {" L9 s& m. o& m5 s8 f% {; g
  385.       file2=(LPUPDATEFILE)(*i).second;
    / r" ~' n( c9 v9 f2 K
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 r- V7 b' R1 O: ^8 k
  387.       {: \. ?6 G& R4 M6 z3 j; y/ F. V
  388.         file1=(LPUPDATEFILE)(*p).second;2 [$ x* n% b5 l5 Z! f% L! \6 O
  389.         file1->vers=file2->vers;
    * j% A/ U3 e( u8 M8 k; B$ a9 `
  390.       }
      v5 K( K/ s' W: u' g
  391.       else
    # Q0 ?1 N& ]0 U! P( K
  392.       {# B# n/ i; v: j3 `
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& G5 p7 p2 k% C1 |
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    7 n! L2 W, {9 B# E4 c8 S
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    6 J6 G0 M& E. K9 U5 O/ G
  396.       }' H( O4 W( G# a, h4 K; J
  397.     }3 Y) \# M) u7 m& t- Q
  398.   }) W5 E6 K3 V5 b+ C
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)# A1 k5 G7 }* t$ o3 N
  400.   {7 ^; j. j  P: C& b  h" |
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    3 P6 m" E0 p. w  N: `; E
  402.     {& K$ m, @' Y, w& d* E9 ~+ M' N* x
  403.       file2=(LPUPDATEFILE)(*i).second;" M! Z$ Y' g) T! e$ ~
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / V4 ?, L4 g4 B% t/ Y, O2 A
  405.       {  L- q; B* H* r7 v) y) p
  406.         file1=(LPUPDATEFILE)(*p).second;' @: l& y' ?6 ^' Q7 b
  407.         if(file1->vers!=file2->vers)6 Z2 U: I4 T% ^+ F3 e) H; M% a; K
  408.         {
    4 \8 y9 ~, v8 P0 z: r9 l$ L8 G
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    $ A! C% e% n- A6 T  v- p
  410.           c++;
    6 h$ J  f. e4 h, a  P  e
  411.         }
    : h' Q4 {* O+ S( o0 g+ H4 C$ e5 G
  412.       }
    7 e* ]8 R  }3 l
  413.       else
    ) x8 O4 j" [+ ]% G2 V
  414.       {
    ; U$ R9 W. O0 N8 x
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));8 T  D3 P3 G$ ^* L  _
  416.         c++;0 S, l' ?; P6 Z9 V+ f
  417.       }
    5 {# V9 \5 W9 U7 @
  418.     }
    2 l; H9 |; K9 k" f, K
  419.   }1 l/ K: \' a" [3 v+ x9 y* Y) K7 x
  420.   unlink(".\\DownLoad\\update.txt");
    - h" Z  W2 ?! H, K+ z9 K
  421.   if(UpdateLocal.size()) return TRUE;7 N/ f7 J; m2 p) e5 S8 H/ G$ n
  422.   else                   return FALSE;
    6 I! i) x, ~2 ?9 W
  423. }
    ; M- ?$ A, U' k( @; V/ r5 a; h  ^0 i

  424. 4 J/ n1 b2 z% i# v; }5 S  R
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"  g5 }( B. Y5 N7 F* E
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn") _3 {* ~  V9 M0 Y: B

  427. 0 n8 J7 c  q) v  a9 h2 f* x1 y
  428. 8 `0 I* h/ W3 d  ?) H

  429. % v9 h7 o2 ?6 r0 T2 [' @2 j( ^
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 o6 O- U6 a  C& _/ Q
  431. {
    1 c6 f2 p' B7 {0 L+ p
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    5 @. ?3 T$ u; ^/ B8 e
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : Z& y! h4 X# |: H; ?
  434.   {: e* P8 ]" \% f' L
  435.     char szLanguage[50];
    $ e3 T- q- z% m  _
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, }" K' M+ u/ @
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 x4 x4 L. J! Y1 a: u
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& ^/ F! g- S5 _2 J( Z$ Q% T% A* K
  439.     else                                   m_iLanguage=ENGLISH;
    ; K! d3 e  w& @6 J
  440.     char szRegister[100];
    # `! {4 ?2 v" w' H9 C+ Z4 f. K
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- M" u% W- [/ Y
  442.     strRegsName=szRegister;
    4 D7 n: [- g4 N
  443.     char szPatchURL[100];
    , q+ j9 Q& g; ?. m1 r7 ^
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * U7 b# y; D) A6 Z! E, n
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 m; H$ f* X  n3 Y! y
  446.   }9 F# n3 u8 C7 o5 _
  447.   else
    % {' [/ k, S  |" R
  448.   {- u4 ]* }! W( ~% u( g* H, y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) e& o7 w2 G0 d" X/ Q: g
  450.     strRegsName=DEFAULT_REG_URL;
    * V- x0 M6 M  o! u1 l! q
  451.   }
    , C5 U7 J9 J2 @( ?( _  r
  452.   if(GetFileAttributes("hosts.ini")!=-1)+ N9 e7 U6 a( I1 S3 O( \
  453.   {0 q" S- ]+ @( y4 {( b( T
  454.     char szIP[50];: {( X1 ?. x  O; G( ~+ }+ \% k
  455.     char szDIR[300];
    6 G1 i" l& A- y
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    : a7 C, t4 [. d9 m" ^# F
  457.     {
    - s3 Y4 K% T: s/ C
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & X1 g) h1 f# b1 E" h7 D4 T
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");; ^1 V2 p! l4 n$ _- d
  460.       strHostName=szIP;0 c8 E. F( @: G" X* O1 {
  461.       strHostPath.Format("/%s",szDIR);
    2 C* H* o; A8 }
  462.     }& l, R# c9 \$ G4 }7 c* w( t
  463.     else2 O' ~$ Y" n. g7 P( P
  464.     {
    . {5 c! C. q( j' i
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . V, m5 K) S' A5 i4 o0 Z: [
  466.       {; u& O7 ]$ _5 Z6 ]2 ?& t/ R
  467.         char szLanguage[50];
    4 }. ]0 @# |. `- A
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* q" m. J  \- U8 M9 B1 v% M  ~. e5 b
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;5 g5 u4 }% S8 w
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 M2 x3 ~: M7 T; |  d. s. {2 d
  471.         else                                   m_iLanguage=ENGLISH;; \+ y4 o: u6 Q* [0 N% B, |
  472.         char szRegister[100];% Q  j* T5 x8 S  k9 y
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; c* ]. q5 L0 r+ q
  474.         strRegsName=szRegister;) K, Y5 P7 E! @5 W# |
  475.         char szPatchURL[100];6 }. B' r& Z0 N5 N; z" e/ j9 u
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 T/ q: ~# a1 Y% z9 S
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 Q! k5 e2 R0 S6 K% X+ r# ^
  478.       }
    4 \* t* D1 A6 }
  479.       else
    0 B9 `- B" l$ s3 m
  480.       {
    1 x; R0 P$ H% D/ W2 b* y
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      X+ X) r+ Y8 r2 G$ G6 D7 k
  482.         strRegsName=DEFAULT_REG_URL;/ p7 a: x9 U( M4 L4 G( T) R
  483.       }$ v* V# Q/ B& Y
  484.     }0 q7 i" _  c0 R5 @
  485.   }- U$ U5 Q; |) k( t
  486.   return true;8 a9 N% U- q% N6 m% `2 K
  487. }
    $ l) H) J2 m  R
  488. ; }6 ^! P' I& f2 t4 w6 X
  489. #include ".\ZLib\unzip.h"
    4 a& G! E5 N# Z2 Y) I" a
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);2 X  c- Q9 X% h" I, K# q
  491. /////////////////////////////////////////////////////////////////////////////
    2 o0 \# p! o- M/ P  c" x  J
  492. // CRevAppApp initialization9 h+ [: _3 _+ l2 V! f
  493. ' j4 [3 k* Z+ S7 \; C, j0 d
  494. BOOL CRevAppApp::InitInstance()
    " \. v6 [6 e7 `; ?9 u
  495. {2 z% J/ W* ~, E4 F1 ?# J
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    2 l8 r6 Z4 K8 u# N7 H' j8 Y

  497. : q/ q+ v9 u% T0 l. j: z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);1 e( v+ w+ @' B) V! j2 h
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    * p! e- Y2 r5 x# O3 `- E5 I/ h
  500.   {
    - J7 d; I2 k# S# R& M" T) h
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    7 g  _7 L$ ^% D+ Y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ! X! S. H! v4 x5 B) i2 R# S& ~" K1 K
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))- K( O! T& v* `+ [, U  g( [# ^: b& ^
  504.     {& [1 @5 [5 y9 e7 ^) ^( l, L' ]
  505.       strcpy(szPath,szPathTarget);
    6 j  h0 Y" s" M' E4 e
  506.       SetCurrentDirectory(szPath);  X& z6 F- H& X2 ~0 s
  507.     }
    6 J: h# K7 A$ `1 n8 x
  508.   }% d+ J* M1 T, `8 t% ^
  509. #ifdef _DEBUG
    0 h  h1 Y3 v3 C& p" o6 _
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ c) v7 D) G$ G' ^" Y
  511. #else  |+ e6 o: p6 a) p+ Z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( P3 |6 b* L1 h* \
  513. #endif
    * D5 K8 \3 G7 A+ |% L1 R
  514.   {
    ( x* I" m. \& V+ D
  515.     char tempFileName[MAX_PATH];& j6 F/ e5 c+ w" Z" J, x
  516.     strcpy(tempFileName,szPathSource);; l: Q4 L$ s9 [7 Z  w6 m
  517.     tempFileName[strlen(szPathSource)-12]=0;
    " u2 K. D! i2 v, J. b8 p7 H
  518.     strcat(tempFileName,"\\$CSUpdate.exe");. M! ?, i, m& o  Y: {8 y1 U( z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ' |6 s! X7 ?, A! M; y1 L" S0 R
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    0 z7 C/ R; J8 m# C2 j7 R! V
  521.     return TRUE;$ S. t  E6 n7 y
  522.   }  |( u& ^6 k- g
  523.   // Nuke 0118: Delete run.exe! T( g8 R, N5 L- w4 M$ z3 W4 t7 v" j( d
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    9 s1 Q' b  X4 z# m8 M$ U8 g: ]
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ) E! t$ Z; K4 l+ O: V/ b# U9 S* @
  526.   if(!ReadCfgFile("Config.ini"))
    0 r* [" X( c6 D
  527.   {
    & C- b1 X2 d4 F$ [3 A' O* R5 Y
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);- \+ b: P  z" A! Q
  529.     return TRUE;2 M* w; L- p/ }, p, t9 f
  530.   }# l7 l3 S  v) r, e
  531.   HANDLE mutex;
    " ^6 V. p6 z% ^6 W- l0 t1 F
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))# ^% B/ u- p. }  E9 y1 A
  533.   {2 f2 L+ {5 t/ K. C
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    / y+ _" y5 |, N) [  D6 c# I
  535.     {- n7 l2 _% V; K- [' ]5 X1 P
  536.       CloseHandle(mutex);. k7 P( G: R( \
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);7 e* L3 D- g' Q+ c6 }
  538.       return TRUE;& ?4 z, |3 i/ P1 t3 g! h
  539.     }/ ~- H' `& D$ ?! o+ c; e& @) a$ Q
  540.   }  
    6 X. X& M$ {: w" _4 y- x
  541.   CloseHandle(mutex);/ H! c- w) q: Z* s. f+ x
  542. 0 [  n  r1 v" d4 S
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ' D& ?, f: o( d2 p0 j; Y

  544. # M# {2 _  |# ?2 m! m9 m( v3 K
  545.         AfxEnableControlContainer();
    ) e& F# Z4 ?) c5 H2 z4 A5 |( c
  546. : A6 `/ j! E$ L: t
  547.   bCanUpdate=FALSE;6 H' R- ]% [' I  _' H+ T) \
  548.   dwStartUpSteps=1;+ L9 ~( ^: \' w) V
  549.   dwProgramState=AP_NOTHING;
    % e% P# F9 n. H5 R
  550. , `# M. B0 y' f5 l# C+ Z4 I. a
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);$ V! [$ K$ u( b+ @* d

  552. * w5 ]9 ?) O) J% T/ _5 M
  553.         // Standard initialization8 p; o) J7 b+ K1 t2 Q1 B
  554.         // If you are not using these features and wish to reduce the size2 ~" v- y: m# p/ M( r
  555.         //  of your final executable, you should remove from the following8 S: A" t- b$ c; O' r) E
  556.         //  the specific initialization routines you do not need.! Q9 U" Y$ O4 b6 f
  557. 9 Y+ ~1 @* R. E  s
  558. #ifdef _AFXDLL
    9 J+ f/ P, J: u. T2 T2 P
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    * G  Q7 C1 q0 O& h! p. d8 T+ W$ U
  560. #else  U: F& J- E8 \" H
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    % r# |) E4 b  P3 H" z- y
  562. #endif
    7 Z% T+ L4 F0 K5 f3 r) i" t- s
  563. ' I2 w# q/ T. L* K
  564.   dlg=new CRevAppDlg;
    5 {1 R! B: O! i0 d  P, u: F
  565.   dlg->Create(IDD_REVAPP_DIALOG);% q8 m2 Z% |+ b" V  n: z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    5 [, F5 u2 p" ]
  567.   m_pMainWnd=dlg;* F) v& }5 D: x; H0 G  W# x# W

  568. . n; g2 y; f# q  u! P. n  A6 {
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    2 c5 \. u" b) O, M

  570. 7 Y) [7 u& x- K. Z
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ' W/ P9 i+ T6 q0 c
  572. //  ULONG_PTR gdiplusToken;
    ) m' v& |; G+ R  g$ q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ) L9 ^: |% q8 X9 }+ t- Q4 N

  574. " @( H* [4 ?9 p
  575. //        CRevAppDlg dlg;
    ) A& J4 l/ U8 }
  576. //        int nResponse = dlg.DoModal();2 e, D! k4 l# B. g
  577. //        if (nResponse == IDOK)! ]. ]& f3 T6 A) ]6 O: }
  578. //        {- i2 l' B; m8 [& U% o( d8 b6 ?
  579. //                // TODO: Place code here to handle when the dialog is
    ) ?. }# w8 F/ q' g& z9 `& Y
  580. //                //  dismissed with OK
    4 C& R. g; ^& D' E1 O5 S
  581. //        }
    $ l8 c' s7 P  q, a9 {) {) j) S
  582. //        else if (nResponse == IDCANCEL)
    9 P$ G+ i7 e/ R5 E4 }6 f
  583. //        {
    * a, M7 i" W  _
  584. //                // TODO: Place code here to handle when the dialog is2 L* y  n3 Q* ^8 A; T5 v8 l' \' x
  585. //                //  dismissed with Cancel
    + |. X# G+ w" p
  586. //        }
    1 g# F& @( y5 k$ }' N2 @4 C
  587. # T8 G* D" d* N; R; S6 w
  588.         // Since the dialog has been closed, return FALSE so that we exit the# \' ^+ T* f9 c. F
  589.         //  application, rather than start the application's message pump.' V( q6 f1 _  p! @
  590.         return TRUE;8 f2 {; u: }, h
  591. }% l- `6 {3 v0 H+ \) X! H
  592. " v4 A# _! d* [# _" P
  593. char *CRevAppApp::strtok3(char *pSource,char *token)( A- _5 O) B' P, m% m
  594. {
    6 q' i' B1 Q% d# Z4 `* Q+ G+ w
  595.   int i;; [$ f" a; b4 q+ n9 E; N
  596.   char *szRet;2 o) z1 N1 a# ^6 t( y

  597. ' b! V6 ?: _3 R' _) b' ?
  598.   if(pSource) { itoken=0; sztoken=pSource; }5 x, J# E1 l0 i+ k7 k: p& {" G" X
  599.   if(sztoken)
    - l& O- y6 n& g" h' `
  600.   {# a# x$ P" o5 s0 h! G! e
  601.     szRet=&sztoken[itoken];
    5 S6 q8 e3 d* Y- f' _7 l
  602.     while(sztoken[itoken])
    4 x7 o  t" C1 m1 B. b% d6 j( j
  603.     {
    ! a; _7 @- \9 C
  604.       for(i=0;i<(int)strlen(token);i++)
    ( K; L- D% t  \
  605.       {* x# |! O, G% z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    . {8 M* p7 ]5 h! F1 M
  607.         {' ]' B6 b- O  S
  608.           sztoken[itoken++]=0;1 w, v/ H- Y# E$ H) E
  609.           sztoken[itoken++]=0;% L) U- r0 `$ g6 H, t" \7 n
  610.           return szRet;
    ! q% Z; V3 S; }3 |* b$ a7 W
  611.         }! i" N3 q9 c# O6 M
  612.       }
    0 V3 R; g' g# A1 s4 H$ t. P; J# h
  613.       itoken++;
    3 F6 V9 I. S& D+ B4 M0 N4 a
  614.     }
    8 M4 o* j0 r4 K
  615.   }' l: I+ b5 |$ g- p+ F
  616.   return NULL;) g! e5 R. \  _* {! S
  617. }5 [" D* ?9 J! B& v: r. T" c

  618. : @1 n& }) U5 k+ }/ e3 k9 b
  619. void ProcessProc(long Total,long Current)1 D; u8 ?- v& _; X) {9 o# j. T
  620. {  T" K7 R" O+ T9 H  u5 b1 f  S
  621.         MSG msg;2 w# O) L4 K0 i4 _2 i3 s
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    2 G$ I# v5 Q' E/ M8 p- ~; c
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));) u5 a; H' l/ B
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ( A6 F& C" f6 `. R8 a
  625.         {) ]* H' V6 Q0 }" ^3 s$ }7 ~+ k
  626.                 if(!GetMessage(&msg,NULL,0,0))0 \: i, A5 l3 q. K
  627.                 {. M% h* {2 j/ F5 C. |
  628.                         return;; x) j# ]( p+ Z2 b2 y) M
  629.                 }/ Z) e# Z  m. X  S3 o) q
  630.                 TranslateMessage(&msg);
    ! m; S  v6 H. z0 \6 w6 i6 w$ T# s
  631.                 DispatchMessage(&msg);
    ' Q+ @: b9 f2 n4 W0 g4 K5 ]% F( Y
  632.         }       
    0 J1 S2 Y$ \7 c
  633. }7 X6 b: \3 i9 H* l  L% Z
  634. + f0 M+ |9 y4 T+ Q" t0 l
  635. BOOL bFirstChar=TRUE;
    ; g  m& D$ I9 u1 ^+ |' h8 _
  636. % [6 I! c' Z* V
  637. BOOL CRevAppApp::OnIdle(LONG lCount)5 X+ N1 z& F% }  G7 S5 D
  638. {
    ' e- k, Q5 g1 u  p' j( h
  639.         // TODO: Add your specialized code here and/or call the base class
    9 }9 W, B4 u: c# `# F6 [' _
  640.   switch(dwProgramState). K; N' g/ j( m$ \; v
  641.   {
    2 \5 I6 A" g5 Q( l# S, `! n
  642.   case AP_NOTHING:- q' H) E2 e6 p) q9 U8 ^: o
  643.     switch(dwStartUpSteps): i3 }. c1 M) A4 }1 H& c5 P
  644.     {' ?% L8 i1 [& b! L- a
  645.     case 1:
    ! Z- K: t2 s* p' t9 c. h+ D
  646.       {
    . s0 J4 Q& [3 w5 R. j2 Z
  647.         int i;
    : J* U, a$ e- Y; u2 Q9 |: ~' s( s1 A
  648.         CDC *pCDC=dlg->GetDC();8 _$ w# Q2 f2 g
  649.         HDC hdcwnd=pCDC->m_hDC;/ u# n( [% ^0 w: h/ U
  650. //        Graphics graphics(hdcwnd);/ P; t1 |1 I0 s+ c6 I
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");8 S( C5 H4 i& E% I
  652. //        INT iWidth=bitmap.GetWidth();
    9 a2 q" K7 [  _" }9 @
  653. //        INT iHeight=bitmap.GetHeight();
    4 K# _$ L7 P. r2 i: B
  654. //        Color color,colorTemp;" K( T, j& A7 ^/ b" U
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ! p3 {5 ]' b3 K1 |
  656. //        {! L6 l8 D: }) Q" j9 @
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)7 E& J( x- O) k# H( K+ I" M
  658. //          {
    ' Y% I3 M$ J  N* c
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      o5 R$ a. {2 ~2 S: j& H
  660. //            colorTemp.SetValue(color.MakeARGB(  d/ s' c. o- g$ X! D
  661. //              (BYTE)(255*iColumn/iWidth),+ K0 r, b8 J# E2 j; |" F2 @
  662. //              color.GetRed(),6 R( C- |1 X8 D( l: G+ \$ d
  663. //              color.GetGreen(),
    4 P# ]/ ~3 t: F2 {& T
  664. //              color.GetBlue()));
    - p5 x$ S) k3 {
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ! D- t- h" Z7 K9 f/ y# e
  666. //          }$ L$ @& M) L- B7 s) x
  667. //        }
    & b4 x' S! \  i: h% {1 X
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);# y' T, R& s& n& T
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");4 z2 n5 G! ~" }$ W- ~* r2 e3 B
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    # |; _6 Q9 [6 d  x+ Y
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");% v& @- ?0 N" Z" Q1 N* B
  672.         for(i=0;i<240;i+=8)
    ' z  z/ f1 h, E" j. f
  673.         {
    % G! H4 @: Y5 k8 b& {6 f
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);# X* |7 d% x0 \; Q2 }! Z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 H" F$ V7 Y: o& O9 d, o
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " v  ?4 u( w( Y* E" l
  677.           Sleep(33);4 u, b/ n; H* A* X6 O, c$ c. U
  678.         }% B  C6 ~9 Z' K# p/ O/ W
  679.         Sleep(1000);
    2 k9 U: ^5 w! X$ T2 v, ^5 I
  680.         for(i=240;i>0;i-=8)1 F8 K! V( _' }4 J
  681.         {1 U1 R/ s* x  L# ]- @. @
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      j1 e& W/ C+ c" A/ o; d
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    2 j, T* `5 Z* k, {6 B8 b2 [
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * U! ?5 {; v: l  P2 O0 m# [' s
  685.           Sleep(33);
    * j0 W$ c! ^4 S- j/ s# N. b, _
  686.         }" y5 }4 U5 }6 Z5 p+ c1 [
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 ^9 l! ?! q: Z  V
  688.         dlg->ReleaseDC(pCDC);- t8 V! }2 P) j4 G, h# |
  689.         DeleteDC(hdctar);. y( q* I6 R/ r+ J0 N& f
  690.         DeleteDC(hdcsrc);
    $ O2 T; p: V5 u% n
  691.         DeleteDC(hdcorg);
    7 _3 L  D0 q' I$ ^& o# [+ U" V
  692.       }
    - _6 g9 u3 d' O( c
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    # D! P7 i( f+ B4 Z# v
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");* I9 U7 S- N% r' [- I2 G2 ^
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    2 R4 a& R/ C- q. f4 A
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    9 ?: x3 ^) }: T
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : C9 ]8 R& v  T  k: }
  698.       if(!Dn.Connected())
    8 W' ^9 v8 g) W& R
  699.       {6 i( ~3 ]+ W2 O4 m
  700.         dwTotalFiles=1;& ^7 s( C( c  K+ t$ ]5 J
  701.         dwDownLoaded=0;$ V- J+ ]! }$ r4 i% a- E" Y& A
  702.         bSilentStep=TRUE;
    , C; V& F5 @3 O
  703.         bCompressed=FALSE;: g( q) U! ?$ Z: p
  704.         strExtLocal.Empty();
    " d2 k/ T$ x, N+ G# p
  705.         strFullName="readme.txt";
    * C  m" k& b/ x0 O. [+ c* K# y8 G4 S
  706.         dwProgramState=AP_CONNECT;; q) Y( m1 O/ G! y$ a1 d( u7 Z7 t
  707.       }2 _  O, X- }. e0 {5 E
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();2 a6 K1 c( g) N; _
  709.       dwStartUpSteps=2;
    ' @1 \2 T' Y5 l- X, r. X
  710.       break;( i/ |5 k; `) A6 U5 W0 Q
  711.     case 2:/ H7 H" [% B2 w
  712.       {" z& Y" D" \8 S& f
  713.         int iEOF;* {8 ]% {! A! z  ^0 Q" G$ K
  714.         FILE *fp;
    $ U, e( J3 h% f$ M2 ^2 J
  715.         char szString[512];) X  n, C: W* ?; x& P, G
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    2 s* ~2 f& \* `# y& n
  717.         if(fp)! d# r2 B, i4 D' f0 N7 c
  718.         {
    4 H& g. j+ O: U
  719.           do
    ! m" D$ d1 o& B$ V& Q5 h
  720.           {/ P. e6 e* a9 D5 }: O: l% f3 r$ n: o
  721.             iEOF=fscanf(fp,"%s",szString);; D+ A4 f1 B* l
  722.             if(strlen(szString)); n4 q  [; q$ |9 F) ~; J8 A
  723.             {) V3 u( \8 k: i
  724.               if(bFirstChar)3 _- r0 L1 C8 D; C6 s2 K" {
  725.               {9 l3 |9 f  d: A
  726.                 bFirstChar=FALSE;
    : Y- I% h- L8 R7 }* }
  727.                 bConnectIsBig5=FALSE;7 r: f% r4 Z; D- X  V0 Z( a
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 n: I! f9 S+ p$ A
  729.               }3 L* m! l# K/ h$ N% H6 J
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    8 o- U" e2 y/ u) i; ~" p+ j
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    & E" f+ M. _3 G* Z  \  c) n
  732.               dlg->m_ListText.AddString(szString);4 T- I  ?0 m0 ^4 Y+ P2 L1 [
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " G& X8 P4 p/ k, n
  734.               *szString=0;
    , m0 x# w5 p8 G5 p4 ?
  735.             }
    2 o# i# B5 _! D, e
  736.           } while(iEOF!=EOF);
    # W$ W, o/ D3 a3 B9 o1 ]1 I
  737.           fclose(fp);) k0 g) B' k# m# H6 x
  738.           unlink(".\\DownLoad\\readme.txt");2 ]  O9 D$ a( _
  739.           dwStartUpSteps=3;' Z# P3 G' o3 Q" u" @- ?1 A
  740.         }; t- E$ j& Z1 u& k( Z' s) b
  741.       }
    3 h' j( Z! v$ A1 h
  742.       break;
    ' q+ ~8 D4 X/ j/ ?( {, h9 [
  743.     case 3:* C+ ?/ o, U2 R$ {
  744.       if(!Dn.Connected())
    0 F* A2 Y) b& U+ p* A* t; ^
  745.       {
    ! \% m4 I1 t8 K1 j! a
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    6 [( F# q( P8 r! W+ z8 w5 q
  747.         dwTotalFiles=1;- N3 G& V+ f1 w# y' U
  748.         dwDownLoaded=0;( Q+ ^; G: w" S* J8 C- P
  749.         bSilentStep=TRUE;7 w5 k7 M: r# D% q' v, Y$ v8 G
  750.         bCompressed=FALSE;
    " U" \- H6 e5 B2 ~
  751.         strExtLocal.Empty();( P* w# a4 S. }- K6 h) D! b
  752.         strFullName="checkversion.txt";; n- T( l  ~( N3 C: m
  753.         dwProgramState=AP_CONNECT;
    * l* z& r, r6 d+ L+ n2 z
  754.       }
    + o9 P9 P' P  Q& t) ?% R
  755.       dwStartUpSteps=4;
    3 q, I0 x7 u! U3 n, x
  756.       break;
    + E6 w1 B$ y# ^* S4 W
  757.     case 4:9 L. X3 L5 i) G) H
  758.       {% A9 S' u: e' W% J2 [
  759.         FILE *fp;
    5 }) q5 {( {  {& i& `7 \
  760.         char szString1[128];' a3 }/ B, E) L- [& B3 O
  761.         char szString2[128];
    1 n* w; y8 o/ w. d2 t
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");" y+ w% Q2 y* n! P
  763.         if(fp)8 t# a4 Z1 d, |) q7 Z- Y  D" ^
  764.         {4 L( U" q' ]( x& J: q
  765.           fscanf(fp,"%s",szString1);
    & O. }- D0 G+ l" W  P
  766.           fclose(fp);% l; Z1 |4 k% `" x9 z  f
  767.           fCheckVersion=atof(szString1);( V  `' ^0 P7 k  Y: d
  768.           fp=fopen(".\\checkversion.dat","r");9 _* z' A: y  |' v) Y- m* R: y1 {
  769.           if(fp)
    / _+ t7 C+ ?0 ?
  770.           {9 M0 _: L8 Q( j& ^
  771.             fscanf(fp,"%s",szString2);5 T3 N+ c2 r  c
  772.             fclose(fp);
    ; B/ n0 M) @. r& ]; s
  773.             if(atof(szString1)!=atof(szString2))6 \( K" ~0 X* p) |
  774.             {
    - M  F& h' S3 L
  775.               if(!Dn.Connected())) k  g! z8 D2 ~
  776.               {3 G+ R; x2 f& m: ~! H4 b% ?
  777.                 bFirstUpdate=TRUE;* Z3 d$ O: i) G4 ?! z, ~
  778.                 dwTotalFiles=1;' s# H7 s- U5 s6 p, o+ o
  779.                 dwDownLoaded=0;+ b! k/ q* X( V- F
  780.                 bSilentStep=FALSE;
    $ q1 N3 t( I  y2 V* Q) j
  781.                 bCompressed=TRUE;
    , x6 c" ]. `% l; f- t  e
  782.                 strExtLocal=".\\DownLoad\";5 d8 d0 u+ i/ ^1 U
  783.                 strFullName="update.txt";5 p* C- }. q7 H
  784.                 dwProgramState=AP_CONNECT;
    % ~5 R& S( I0 N- z6 @: ~
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % K2 i: {- O9 F( ~1 [
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");$ m9 P, O0 I' r. \4 }" ~9 B
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : I2 d! x. N0 Q4 Y
  788.   k, z; e- l. q
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 d# K2 V  |0 d
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    # B) o$ D( [  \: n+ y! ]
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)" ^1 u. i- E7 t- Q. u4 U
  792.                 {
    & O5 R+ O6 Y- \' A7 T9 e! x- R
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : b: R- O, E8 H
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");2 @( l, D% Z7 J6 s
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");% I6 R( y; X9 O$ y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, z* J) U/ g( L* O0 y

  797. + g6 q# r! t7 F/ r: }$ w  X
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ E9 l, Q. V. B
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* ^+ d0 B! x; D# R1 d
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");( S) Q6 j# R$ T, ]3 `
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* p' P0 b1 w% M7 @
  802.                 }, T$ ?% Y. D8 R. M$ U: d
  803.                 dwStartUpSteps=5;
    6 o- c; ^- c1 b% J' t' Q
  804.               }* b$ E- N4 z, _- E6 V: p0 Y
  805.             }
    4 @' W6 t" ]# ]" Q6 X( r% O
  806.             else
    ' i9 m/ F& t' J
  807.             {( H3 ]0 K1 H: o4 P  \) t
  808.               unlink(".\\DownLoad\\checkversion.txt");
    & Z/ o1 C/ x0 ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : |5 M$ F: t/ P% C1 n' L& P1 G
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");: p8 I# N. n5 |5 l" N( S
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");1 `) E$ p! C5 T4 F7 k4 d! v9 `0 b0 W

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

評分

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