CSUpdate.exe源代码

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

- B$ I6 u. Y) I* K& M" I
  1. / RevApp.cpp : Defines the class behaviors for the application.
    . F- C) a5 l* O2 i0 o2 z
  2. //6 _9 }% {+ p3 m6 w

  3. ( f. a8 E) q) }" D& D1 i" c
  4. #include "stdafx.h": h5 V/ S6 O4 {# D3 z+ [) z
  5. ; ^; I. ?; M9 F. u  M3 W
  6. //#define UNICODE
    ) m. i( Y, r" s" u! q
  7. //#include <gdiplus.h>
    9 w2 c* z, K5 x3 o" _
  8. //using namespace Gdiplus;
    - B* Z: M) z& P5 @3 P
  9. 7 W* P$ h# a" x! `  n  r1 ?
  10. #include "RevApp.h"
      K% N* {+ q5 c7 D
  11. #include "RevAppDlg.h"
    # _7 B0 l! V. |6 A; E
  12. ; e+ `& h! D. G6 H; ~4 T. v
  13. #pragma warning(disable:4786)+ T( |! v( p; e2 g9 X$ w
  14. #include <map>& m- f% q6 |* D) e! M- e# r
  15. #include <list>+ Z$ T* p: q6 t8 b( p# x
  16. #include <direct.h>& Y# [9 [: H7 H; e3 [2 ~' f! y
  17. 6 a9 S' R% M3 x# k1 S8 [
  18. #ifdef _DEBUG; A& T6 v; {1 F. u# R
  19. #define new DEBUG_NEW2 D7 [: d0 C, Z/ i
  20. #undef THIS_FILE4 `# K  }0 ]/ u; [1 T: g
  21. static char THIS_FILE[] = __FILE__;
    2 M( Q, t  N- p% C9 n( A
  22. #endif7 ?& ?4 h9 n' u3 D2 g
  23. #include "SkinResDef.h"
    4 s2 h; g, N  l- b
  24. #include "ChangeBG.h"6 a1 t3 h8 _+ Q  Q
  25. #include "AFXINET.H"; p) h8 o! Q+ W" _, Q" Y

  26. + }+ G  ]+ H. A0 @7 w% x8 [" f7 A
  27. #define TRADITIONAL_CHINESE 0' X# j* x0 n+ c8 F: T8 w
  28. #define SIMPLIFY_CHINESE 1- @: x) @1 y7 u9 O2 b1 j8 [
  29. #define ENGLISH 2
    ; y: ]+ E3 n- g, p5 l/ A9 B
  30. int m_iLanguage = ENGLISH;
    # E+ t3 L1 u, A: x8 {: x
  31. /////////////////////////////////////////////////////////////////////////////
    2 e1 k- {" ~3 t7 L7 m7 [
  32. // CRevAppApp3 H5 I( D" x" M3 ?4 I4 h, S
  33. 9 v3 r, [% b0 \; H7 w2 U; u
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ( M1 W. H+ [/ e  a
  35.         //{{AFX_MSG_MAP(CRevAppApp)9 d$ i0 Q7 E7 U$ U5 B. |
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.2 X$ X5 `$ _9 L; i5 @/ o
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ; U; P# D* c/ O
  38.         //}}AFX_MSG
    7 T- c2 _, D% s
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)4 C% U; _) I# G! u0 _- @# H
  40. END_MESSAGE_MAP(), V4 K6 ~* Z2 F

  41. 2 d) ^: F# ]+ Q" Q+ G, E) {
  42. /////////////////////////////////////////////////////////////////////////////+ x+ r! L% H1 e7 U  r4 m
  43. // CRevAppApp construction* a" T$ e0 {6 c0 b4 f
  44. $ e/ K& r' S' E9 T) _0 M
  45. CRevAppApp::CRevAppApp()" n  T1 B( Q' U
  46. {# j/ Y1 {3 v6 ]& q1 J; v/ x% t$ `
  47.         // TODO: add construction code here,
    : d* H' w9 N/ |' f: _  D
  48.         // Place all significant initialization in InitInstance! y1 Z  X! J- ^* H
  49.   bDisplayIsBig5=FALSE;0 N3 D. O( w0 G6 H2 a
  50.   bRestartUpdater=FALSE;
    0 M! H  H& D6 `) j" R
  51.   bFinishUpdated=FALSE;) Z2 @2 D2 Q. F1 _2 L  P
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    . [8 Y3 ^3 t8 @# C5 N  N
  53.   InitChangeDataBig52GBKS();6 S3 T, P! S( d$ f2 F/ g" Z
  54.   InitChangeDataGBKS2Big5();
    9 ^2 F$ c: m: `; t, q
  55.         //3 f. O" [) V% X# x0 I
  56.         bClickRunExe = FALSE;1 e$ S4 M$ b. U$ l! v  V% Q4 M
  57.         //
    ' k$ _( h1 f" ^) j' ]4 c" M
  58. }& l! B& P' ]' O: U+ e8 [
  59. $ R6 D# X: t! @3 E" l; k: ?( o8 N
  60. CRevAppApp::~CRevAppApp()
    9 P5 B4 t1 u6 A" I) j3 A; m
  61. {; V# k" z6 @6 A7 u8 \" \
  62.         // TODO: add construction code here,8 H; |5 `* b  r6 @- H# w
  63.         // Place all significant initialization in InitInstance
    1 s5 A) H, w7 r% W1 z1 i" [
  64.   EndChangeData();
    7 N7 b0 U/ |2 [" F. Y/ y( D: e
  65. }2 C6 f# Y2 N8 U9 k, o/ j
  66. 0 @' x9 ^" H6 D  f9 ?( p
  67. /////////////////////////////////////////////////////////////////////////////" L7 T" H1 |* Z. g! v0 [' n
  68. // The one and only CRevAppApp object
    + R5 B8 s( T4 A2 J3 S

  69. : R  ]9 ]; ^' R; p3 u0 [% S
  70. CRevAppApp theApp;
    1 v0 o* a" Z! K, x4 A- K3 [5 t
  71. : \1 `7 K9 A$ I
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)" E* C4 C5 G6 k: l
  73. {
    + b7 w1 j7 R2 F; i# J
  74.   int iEOF=0;+ N9 w) [8 p/ b9 K8 f7 a/ d
  75.   char szTempName[MAX_PATH];
    * {# A6 c4 m- c- u  W3 R
  76.   *szFileName=0;
    / f: X# Z, D1 L: F0 x" t' p$ a% \
  77.   iEOF=fscanf(fp,"%s",szTempName);
    7 @) c6 {, [7 e! v  n) ], I! T
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    8 U) `+ ]' b- o( T6 L5 _3 t
  79.   {/ y' k1 p# k4 k1 t  u. T' I8 c% l
  80.     strcpy(szFileName,&szTempName[1]);
    ; S5 N6 J6 h/ x# L
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)' ?4 p! D6 O8 L3 O
  82.     {1 K+ J# o/ N$ z# c* f) i8 [& o
  83.       iEOF=fscanf(fp,"%s",szTempName);+ m5 q2 y3 a4 x6 f5 p
  84.       strcat(szFileName," ");
    9 J6 |) `# Z! \3 J% \% {) ^
  85.       strcat(szFileName,szTempName);% K7 o5 Q* X+ G7 x
  86.     }* q9 h. ^. V6 Z
  87.     if(strlen(szFileName)>=1)
    ) u; a- \; p: L0 c3 d5 M
  88.     {
    6 J/ L4 G" }  z2 P' G( F
  89.       szFileName[strlen(szFileName)-1]=0;
    # ^, R2 Q1 F$ ?* {# ]
  90.     }
    - x0 R5 j0 \' I
  91.   }" y% I# ?7 t, ?# H5 {# `
  92.   return szFileName;. G, D2 X  }+ ^& Q  v: e
  93. }
    ; b$ n" P) ^/ J; v* T+ i2 J7 O
  94. 7 |8 @# E6 v1 V: E  B3 U
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    , R- \" N  d$ Q+ o* L
  96. {
    3 |- i+ e- F( c4 T$ f1 P
  97.   FILE *fp;
    . l2 f6 x7 ~9 x
  98.   char *key=NULL;
    - a+ `/ ~) P( ]& Z
  99.   char version[MAX_PATH];* L& [5 R) [. t& W  s& ~1 O
  100.   LPUPDATEFILE file,olds;
    5 k9 `% o6 G1 M2 v6 N
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 q8 X0 z3 K1 o% N5 V9 i( K: e

  102. / K% G$ \4 U/ Z4 ^  e
  103.   UpdateList.clear();+ X: y5 J. N& D' s; ?4 C7 D
  104.   UpdateFile.clear();; v7 R. J* Y0 C+ O& Y  \
  105.   if(GetFileAttributes(filename)==-1) return false;
    7 V" F# T: ]0 g! F* K" ?
  106.   if(!(fp=fopen(filename,"r"))) return false;$ V6 D- z) s% E/ E0 T" x8 b* t
  107.   fscanf(fp,"%s",version);3 g0 \% n1 C, ^0 D6 S9 Y# i1 U1 i+ b
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }$ A$ W6 D) C0 Y& A+ s* K
  109.   while(fscanf(fp,"%s",version)!=EOF)7 h" v6 z- h# n# z7 M; H; @' [
  110.   {
    # e  i3 B. P, {$ y. t0 ]; `4 b- @6 V
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 v- D' d& j7 O' K  I2 U2 J
  112.     fscanf(fp,"%s",file->path);/ f. G! ]' }* U) I: j* {$ h
  113.     ReadFileNames(fp,file->file);
    ; ^) U- X* L! @9 P3 L: a, ^2 G4 n
  114.     strcpy(file->full,".");
    9 X# n* f# O8 ]- @/ m9 f
  115.     strcat(file->full,file->path);) {' S1 I( o0 S( d0 z9 }
  116.     strcat(file->full,file->file);/ j( {8 [# a% p5 b& f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    5 e; j# H0 T9 m1 r* v- o
  118.     {
    0 u: j3 ~& f1 r
  119.       file->vers=(float)atof(version);
    ( G' K5 Z' Y& X% [5 Q7 y
  120.       UpdateList.push_back(file->full);
    / w3 Z7 N: k' C8 ~* M& P
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    + ^1 t4 a7 M/ v
  122.     }  }1 n9 C' j0 }- z, Y
  123.     else* a. c0 r' L/ L4 x# @* ?
  124.     {6 Q+ I, t( R' r6 m  z
  125.       olds=(*p).second;) g1 {0 f  k2 g
  126.       if(olds->vers<(float)atof(version))& x" P5 r+ W. \( M
  127.       {
    ( L6 A. ]0 j2 s; ^( @
  128.         olds->vers=(float)atof(version);
    9 Q. A) j5 y4 H2 ~
  129.       }
      _/ ?/ r) Q- n% z, Y5 _
  130.       free(file);
    " @; L' T9 ]8 h" \, s6 t
  131.     }5 R( J9 i( u: |) d1 Q& u
  132.   }
    $ Z5 v* R5 E2 h% @* `
  133.   fclose(fp);
    . c- e' c  e5 D6 Q' N* p
  134.   return true;5 y/ x! J, A; f$ q  f* g; d
  135. }' K: J% L* R! h7 H5 W) Y

  136. 1 b% b4 g7 a. Z) ^# _) X- ]
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ( p9 L, ]1 N( h- m
  138. {7 _3 O5 z/ R! m4 l1 q4 p) x
  139.   TCHAR  szFull[MAX_PATH];5 c6 y# H7 d1 g- n4 j
  140.   TCHAR *token,*inter;
    % `9 V5 r" z6 r! s
  141.   *szPath=0;
    8 X3 N+ {( I0 \* K
  142.   strcpy(szFull,szFullPath);4 e# a  `4 Q" \. ^6 A
  143.   token=strtok(szFull,"\\/");0 ^5 V! B  [# `1 b0 y  l2 c
  144.   inter=token;
    + |/ d! s; a& j4 ~5 G) ?* C
  145.   while(token=strtok(NULL,"\\/"))2 k) R2 Z8 X# b8 ~) f
  146.   {( ~( @2 ^# z$ p9 P
  147.     strcat(szPath,inter);
    # T5 N( Y, L# A1 f! D3 {
  148.     strcat(szPath,"\");( z7 T  l* O0 Q; K- l
  149.     inter=token;
    ( d) R* g' A8 T
  150.   }
    * [( M2 R& _: S: s: d
  151.   return strlen(szPath);, c6 z: R4 Z/ y3 S7 F
  152. }
    1 O2 ~: t/ R% k  K! i
  153. ; O. m' h. I2 B- E: r" F
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)* J, w: P+ {( M
  155. {8 i: ^3 Q% p) [1 r' A  i  N, r6 C
  156.   DWORD attrib=GetFileAttributes(Target);
    2 I  o4 `# X+ F  n1 T& {
  157.   if(attrib!=-1)
    , [7 _6 `/ ~6 V
  158.   {
    ! |2 Y1 w6 w1 N! x6 l- f
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , y. \7 g3 B& {! b. f+ D1 C2 F
  160.     {' Q& o: q- \  H1 |( K0 T+ R0 k
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    8 ?! |$ a0 ^7 v/ d5 Y
  162.       SetFileAttributes(Target,attrib);+ j) y$ U* q" I& V( m
  163.     }/ ~: K  D# P4 y6 N
  164.   }) @* N% |% }3 s) K& f; X7 x, x
  165.   CopyFile(Source,Target,Erase);
    $ k# P" {; z* }3 j
  166. }/ a: @. Y" H4 [  d+ |' c" I( ?+ R
  167. 6 S" r/ ?7 h" j3 M" [6 E: Q+ Y3 P  B
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    2 L0 w( m( l% M7 a. u9 T' `: [, k, v
  169. {
    4 A6 _' F  p- Z2 r
  170.      FILE *fp;
    8 d2 ^, X6 p" {& J" _
  171.      char  szBuffer[8192];
    , |' N2 U3 a2 A2 k
  172.   va_list  argptr;: o' j6 |/ Z) W; k& B5 N' X
  173. ' K  b2 D& D8 y2 C, \  R! Y. n
  174.         va_start(argptr,message);3 H1 W" e" V& e* B
  175.         vsprintf(szBuffer,message,argptr);5 `0 c: Q! [6 ?) k5 M) g: d
  176.         va_end(argptr);5 {1 ^( V* v0 b! T7 t7 V1 ^
  177.   fp=fopen(FileName,"a");$ W& ^2 K- B1 U% t% L6 L
  178.   if(fp)
    # t6 H& G0 i6 W( K; E) w0 {0 i" P$ Z% p
  179.   {
    5 @' x' s% V- c2 O, h, x( [
  180.     fprintf(fp,szBuffer);
    5 h6 L1 T3 h! ~! q( w
  181.     fclose(fp);: A& X* B# h4 @" c% R/ `% u
  182.           _flushall();
    7 ]  K4 w% `& m( `6 i0 j/ f
  183.   }
    9 \. u- l+ y1 T
  184. }
    1 w# y4 k3 z. t( \8 Q' j/ h/ U( [

  185. ! u! a8 q% i" a7 K% f
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    * q) l! v+ b4 {0 V& b9 ?; P. v
  187. {" r7 U, |& S1 q' ^: C
  188.      FILE *fp;% j& n; i! G1 ]+ L9 c! ?2 _4 j
  189.     DWORD  attrib;8 Y  T1 h* h9 A/ Y: O
  190.   attrib=GetFileAttributes(FileName);
    * w  \3 b4 Z/ U+ g" Z! n3 D
  191.   if(attrib!=-1)' b: m* }9 V" d4 L$ L! S, B
  192.   {
    2 v' Q, R0 h* K$ Z) D4 E* k
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    + o6 d# z' k0 k$ }1 p
  194.     if(!SetFileAttributes(FileName,attrib))0 U, X* y, V1 f2 D1 g& F, T
  195.     {' h: ?3 s! N# c- _' O. `2 f, |
  196.       return FALSE;  o7 \3 f% m5 ~! ?
  197.     }
    ) w- k$ c8 V4 Y% q9 {: i! p
  198.   }
    / b. w; ^! l& H
  199.   fp=fopen(FileName,"wb");
    ( {; p) V3 X4 @0 f" X/ I
  200.   if(fp)6 D5 S" N6 q4 q8 e% x/ W* `( e
  201.   {
    5 P# j1 j% K2 y4 m5 p3 Q& ]
  202.     fclose(fp);% m, h- ?5 W. A: ^- O$ M
  203.   }
    8 \$ z: ^; }5 A2 [! O
  204.   return TRUE;
    % F4 u3 B6 x. v& p) y; m; Q
  205. }- `, ?: @2 k; z) a1 y  R) V  j
  206. ) N0 `* i. l' r2 Q; H
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    & r1 s: V7 T# Y+ o& T, @% z
  208. {
      k6 E9 W6 D+ m
  209.   char filename[MAX_PATH];
    ( c, [- Q) e( T3 P" f# u
  210.   LPUPDATEFILE file,olds;
    $ w- U5 Q  d5 g! s1 w
  211.   std::map<int,CString>::iterator i;; E) S5 d* z+ F
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 e+ I+ q1 ]: s' x7 x( i& J. @8 F
  213.   std::list<CString>::iterator l;' ^; J0 @: T, s/ Z4 k" {, V

  214. . E* a  w2 B0 A( c' a! z
  215.   if(bFirstUpdate); M2 A" Q+ Z  B  h* m+ `; J
  216.   {* [8 n/ i" N% b0 h) y4 }
  217.     dwCurrFile=0;. F& L  Y/ J- ]
  218.     bFirstUpdate=FALSE;
    9 `; M1 S# a6 d0 c1 Y
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), J$ o/ C3 ^0 F$ e" G
  220.     {7 s1 ]  X" R. O$ ]
  221.       dwTotalFiles=UpdateLocal.size();5 v8 f4 w6 E( I- P( `( i
  222.       dwDownLoaded=0;
    3 o  Q' k: }$ f
  223.       bSilentStep=FALSE;- R7 w) c" S' I
  224.       bCompressed=TRUE;
    9 j. T$ f; I  r3 J" Q9 y2 u5 P
  225.       strExtLocal.Empty();6 b7 q. N6 p; }( D) K* k
  226.       strFullName=(*i).second;- ?0 g4 [# L/ h( A" b3 O" l" H6 m; D3 H
  227.       dwProgramState=AP_CONNECT;
    7 i1 q& N! g$ H. Q8 G( h
  228.       return TRUE;
    / n1 b  w/ M, x0 I2 V
  229.     }
    8 j3 y# j1 g5 G+ T7 |
  230.   }
    " u% S* t& K2 z- k) }
  231.   else if(bRestartUpdater==FALSE)
    - |- Y6 u% M  r: Q/ S( {; o
  232.   {
    & ?; i' I$ X; P: Y1 ^  l* D
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())) b0 z3 T* E% s$ c  O$ q
  234.     {! I! p' H( d$ U, u6 k
  235.       file=(*p).second;# _% j' B) _% D/ g
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())( v3 r- O; a1 c) Z4 o
  237.       {5 j5 H; k1 g8 C. J$ Z# c# I
  238.         olds=(*p).second;6 R6 o. w  D* R$ O+ q& u* h' t& Q
  239.         olds->vers=file->vers;
    4 t. X0 I) U% M, t7 W; X
  240.       }- o6 D$ v! ^; K' \  I1 L# z
  241.       else! V# m+ _0 G/ K/ V& N
  242.       {( @! _2 a8 h$ u, B$ {- m) U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / ~' V; T- O; B2 k$ B5 I  T* D
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
      P6 k& p" K, _! M0 |
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));) R, w8 Z' w+ q- t0 i$ U$ o
  246.       }. }% _3 [. e( E( ]9 W8 x4 @
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");! b! S( c/ _3 g
  248.       sprintf(filename,"(%s)",file->file);# V/ G. l% |$ F! D) a( S
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& Q! l$ I$ d4 v/ W; _" d, J) x
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    / G: I8 }# i) G; T
  251.     }" x) W- u1 C/ T: h4 v' e  ^3 m" f
  252.     dwCurrFile++;! l. b7 D7 N7 h' f1 t1 n
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% ?2 e/ d. ~+ K; B' {  z7 X" O
  254.     {
    # }+ z" r5 k5 e) e6 Z
  255.       bSilentStep=FALSE;
    % a0 \0 n" y- T9 @- [
  256.       bCompressed=TRUE;( j* j1 i- N( b3 S
  257.       strExtLocal.Empty();
    8 `" _9 [$ }; s( R
  258.       strFullName=(*i).second;
    / A/ S& L) T2 x. [% \. E4 v8 G
  259.       dwProgramState=AP_CONNECT;
    % Z1 l! q! Y1 r1 v
  260.       return TRUE;" ]- k- r3 j& L
  261.     }5 p6 u) T8 h/ S
  262.     if(!bRestartUpdater)7 ~. q. J. B# v2 A4 c1 e
  263.     {
    5 Q. w+ A4 A% ^" a9 S
  264.       int iCurrSize,iFileSize;1 e" ]& R+ v4 ]8 i# X: a
  265.       iCurrSize=0;5 ^2 }' O8 r3 \8 N9 R8 N/ _1 o
  266.       iFileSize=UpdateList2.size();
    6 M; `! i# Q. z/ |" M/ a
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");5 u9 S- e; Y! I7 U$ q) X2 G3 e
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");) h1 x; {/ O2 g: m) v* u' g# ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");( q8 g% w0 q& }1 D- C1 @  {: J+ d
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 @9 i0 b: L& T
  271.       Fclearf(".\\update.dat");
    0 Q! D7 R5 ~* i: w
  272.       Fprintf(".\\update.dat","Bloodyf\n");* ~  Y3 L' z7 b
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ' q4 {0 }: i3 J5 V' ^& O- Y! {
  274.       {7 D& h& C5 G4 j' m+ y, M' v) n, j
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())  s3 J: M# K; l5 U' \# i
  276.         {
    - B) A5 I& X3 J! d: z# z9 S
  277.           file=(*p).second;) q1 W  t" B* I8 \& u, f& _/ T  t$ _
  278.           sprintf(filename,"(%s)",file->file);- s$ X3 h2 ~5 E! ]+ V, P
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    4 {* L: ?  C0 t, s, _
  280.           iCurrSize++;
    5 c" v  S1 r! R0 [; V/ {
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    * x4 _0 w3 J- V- }6 E
  282.         }
    $ E6 _- W; P, ?! T3 W
  283.       }1 N) c/ i) Y! {: K1 E8 Y
  284.       unlink(".\\update.txt");
    & ?5 c" W" i4 E; M4 X  N. @' w# N
  285.       unlink(".\\update.tmp");
    ! h9 `6 k" y! @8 i
  286.       Fclearf(".\\checkversion.dat");& A- p7 \5 T& }! C2 r1 H
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);  \8 p' m: J9 Y& i, T
  288.       if(UpdateLocal.size())
    ) O& G& N& U$ ]7 s2 Z
  289.       {
    1 g9 T% ~3 R1 o% n7 q7 @1 q/ v
  290.         UpdateLocal.clear();6 F& w# }# K" |" P
  291.       }
      q1 F0 Q9 q0 v- `" P1 |
  292.       if(UpdateFile3.size())& b5 a% \% W/ n; \
  293.       {
    6 J1 [0 m7 V$ T7 R4 c
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    / N: K: @% D9 Z" N4 ^* ]
  295.         {
    / N9 n. u/ N3 X# z/ U1 N, B. `( `
  296.           file=(*p).second;
    + ~( ?8 }8 f5 h5 H: W  M
  297.           free(file);
    $ A! U( b( e( p2 m9 j
  298.         }
    : C: I2 D$ ?. a
  299.         UpdateFile3.clear();
    6 L6 r! S' f0 d, @2 X  d4 u
  300.         UpdateList3.clear();- O0 b, ~+ A: Q! P" q
  301.       }
    , j& K; Z- `+ m2 H2 E! _
  302.       if(UpdateFile2.size())
    . y7 W) l# t5 v
  303.       {
    . T  F2 l! c9 b! w
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)5 j2 \3 J# v% J0 ]
  305.         {
    1 f- ]( Q; W) j2 E$ F8 @8 B& [
  306.           file=(*p).second;3 [) @, E: h+ W0 v! w6 a3 o- p; d
  307.           free(file);, E% a' ]. }0 e( C+ U2 h
  308.         }5 u8 M- F6 B( A$ N+ x; |6 c; ^
  309.         UpdateFile2.clear();5 }3 c) ?# u" [& X" Q/ |. ~' Y
  310.         UpdateList2.clear();
    ' f$ j' X1 g$ Z: j
  311.       }3 a$ }! i# E0 o9 s+ ~5 P
  312.       if(UpdateFile1.size())9 O8 p2 l; T0 d) x4 k2 `7 m
  313.       {
    : C! s4 w9 f0 R7 S- F
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' Z7 [& O. b8 P& I
  315.         {
    6 c0 {- ^$ e% Z8 V) _0 ^
  316.           file=(*p).second;
    ; G, d0 j& j! _1 i% H- J( `7 m
  317.           free(file);
    " [6 s* \$ `& `- |% _
  318.         }# }8 |4 ^' M7 e) ]) a9 g: \  u7 B9 H
  319.         UpdateFile1.clear();
    ( [$ X& C7 |# B! x# L6 t: W
  320.         UpdateList1.clear();' G, ~6 y0 j& \0 j0 X
  321.       }
    - U  [7 a! ]) J
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));+ x; s% _, N  O1 u; K
  323.     }' {: t& N4 B& {
  324.   }
    7 I+ S5 ^/ s& T1 d. b
  325.   return FALSE;
    ! J: j* l, M& J- O1 Z7 _0 q* X: T
  326. }
    ) ^; b: D1 K5 `' f- N  H, k  }$ n$ c
  327. & @0 o  j$ Q2 L  o* ?1 i
  328. void CRevAppApp::ClearAll(void)
    * n3 Z$ v# C  h( L; ~$ T$ [
  329. {1 A* j; y$ L* {' Y& g9 f. k; \* N
  330.   LPUPDATEFILE file;  {- ~  C6 ~3 s& p, B5 x1 B
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% v0 m; S3 ?9 s: K1 H
  332. , [1 `2 y) l- s
  333.   if(UpdateLocal.size())/ p8 x$ {. p# C( g7 h  l  j
  334.   {
    3 u1 N# O8 b- j# \- A8 R+ f* e
  335.     UpdateLocal.clear();
    % E: j" ?( A  W( S9 f
  336.   }+ r0 W7 a) t- d# g, V
  337.   if(UpdateFile3.size()); C. j/ ]" i2 n  [" _6 a
  338.   {! O  r# y) W! E5 n& u) I
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* `. t. H$ b; m( e5 B
  340.     {
    ; R5 Y# P9 P" k* V/ Y! h& y
  341.       file=(*p).second;, [8 }& m2 C0 A, n
  342.       free(file);/ s# ^2 ?/ b4 T- z0 k1 D8 \
  343.     }- g% m% Q0 u( o
  344.     UpdateFile3.clear();
    , Q. y4 z2 p% R: B* e; t; P
  345.     UpdateList3.clear();* M7 a% l# a. }+ _
  346.   }
    * |/ e, G# a! \0 z; j
  347.   if(UpdateFile2.size())
    - ]8 W4 b# k# k1 d- C: b& A' v! i; K
  348.   {% h5 Z, c# W5 M( l
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 I8 T! ?8 w- ?1 B/ b1 @
  350.     {
    2 u8 x" {" I: x1 |: P3 ^6 [' s
  351.       file=(*p).second;
    & ?+ H8 U5 Y) e  x' [0 Z* Z
  352.       free(file);
    & G6 H- g8 b- n& U
  353.     }
    - o& o1 M( @# e. b- T  I
  354.     UpdateFile2.clear();
    2 r1 x# D6 Z1 Y, S; a6 D
  355.     UpdateList2.clear();- z' B! Y! ?; V8 \
  356.   }
    9 h4 C, y3 w, J. v( J- @6 f
  357.   if(UpdateFile1.size())
    ; H7 J1 k4 ^2 Y5 J! p$ o
  358.   {
    9 x- O, z3 M, O4 h
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) i+ C2 E9 W! o; |
  360.     {
    * t) z: J7 B7 {$ W7 C7 e
  361.       file=(*p).second;# D3 A2 v7 j9 Q! n% k& t8 S0 J5 V
  362.       free(file);
    ( R& T& g) J/ P* h2 D6 ~+ [  P. k  w
  363.     }
    ; z0 L3 w% S$ H0 f( m
  364.     UpdateFile1.clear();4 y" t8 \" f* r+ H% o! N
  365.     UpdateList1.clear();8 H  S9 v8 l8 l4 U/ v& @
  366.   }& V8 |8 {% n0 a  I- [# s
  367. }  
    7 E, E( ]6 e' S8 I' f" @( k2 Y
  368.   5 D5 }! u7 s. L# n( Z& ]" \3 a* a
  369. BOOL CRevAppApp::CheckLocalVersion(void)
      C& A* |- U* m, {" _" t! n, p7 Y3 |
  370. {$ b$ Y) Z  A+ U' R! L, p4 h/ Y
  371.   int c;
    ! {  s* h: H8 K0 T9 m9 {3 q. I9 N
  372.   LPUPDATEFILE file1,file2;
    0 V7 X$ k; n7 u, P) i. ~& q3 A
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    / E  z% i- V7 F- q+ A. b
  374.   std::list<CString>::iterator l;
    2 y0 q( b8 W& ]0 w# ]
  375. 1 F4 h4 i0 d4 y5 B( N
  376.   UpdateLocal.clear();' ?' k! i3 v6 d
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 v: m5 s& ^& r/ N1 t
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ! g! b' O# j5 O  F2 J+ E* g7 q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);/ Q1 C; Q) k$ _# P1 {: a5 A
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    . Y% L7 A8 t  f7 v6 ]6 K3 H5 A# t
  381.   if(UpdateFile3.size())# L# ~. l' J2 {$ V0 N$ I
  382.   {; l' r2 R' ?5 V5 O3 G3 A7 E
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)& p) `) n, t6 _! D# \9 m6 Q
  384.     {
    3 N7 _" G+ f4 z8 x$ E
  385.       file2=(LPUPDATEFILE)(*i).second;/ R# e% }" F: }5 o- n1 C
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 Z3 B. |8 d. u8 G: J; R
  387.       {4 ]4 B1 \# J" l3 K- x0 c
  388.         file1=(LPUPDATEFILE)(*p).second;
    % ?0 e  n& g  }3 U+ A, S! w
  389.         file1->vers=file2->vers;
    : \, L2 G1 V0 E0 b: V
  390.       }- w. c" |/ ^3 d$ V, y! K
  391.       else( O5 T' e  q3 m5 M6 t+ ]
  392.       {. v0 J$ H3 h0 `2 {8 n0 u
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & W, J& w9 T, G0 N; h8 @5 |0 R8 U/ ?
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));7 a& o, b$ h- x5 s" j
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));7 ~6 _& k! Q% z0 O3 S
  396.       }
    # M2 G5 @5 Q5 t4 K, f( ^& k" `
  397.     }
    , X) ]1 E5 B! Y$ B0 r
  398.   }
    ( m6 E6 Z) @) C* V+ u0 |! {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + `4 j1 z% w9 u) {
  400.   {7 T6 d9 ]+ s* Q9 ~
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    # k' Y: U6 A: {9 A7 B# x
  402.     {
    : s8 `. b1 }+ d/ A. M9 ~- \3 v
  403.       file2=(LPUPDATEFILE)(*i).second;' R0 a8 w0 F# \1 Q4 \
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      _4 D4 e& s/ i, A+ f. d* F
  405.       {
    2 J# W# o1 z! _9 Z9 [
  406.         file1=(LPUPDATEFILE)(*p).second;/ f3 \# E7 ]( D
  407.         if(file1->vers!=file2->vers)
    7 F4 r/ C, ^( M, |# R5 z7 L' ]
  408.         {
    3 U! [9 r+ `. `0 A4 t
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ i9 M) w: V: h
  410.           c++;
    ; Q2 @) v2 h; o( p" |3 ~
  411.         }
    + [) B) q+ c$ C- `
  412.       }! ]: P: I% j; B' Q/ G9 T
  413.       else2 q, n6 c# H  W! x
  414.       {
      B$ J: B( Q  F( K0 L# \
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) z; o9 w* ^, N  W/ T) h
  416.         c++;
    % h, _/ Y# ]+ A( K; c) q
  417.       }8 U( |5 t* E8 M0 m
  418.     }
    : O8 E( b% F4 z6 ]# W. ]
  419.   }
    9 d4 O/ [: S( R* Q
  420.   unlink(".\\DownLoad\\update.txt");3 w( ~% ?0 Q1 `# F
  421.   if(UpdateLocal.size()) return TRUE;
    ! ?7 @4 x- Q6 h$ p1 a) O
  422.   else                   return FALSE;/ K* b3 G! s4 g* O" P. L) A# K
  423. }
    ; j1 Z! H0 X5 c; C

  424. : |  y+ f/ E* ?- U7 ]
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"/ @; g1 b  f. k% r% B7 \: V  r" m
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn". p6 K! p2 U/ {: M
  427. + K* t. u# \, U, ?# U

  428. 1 U. J3 U# v0 y  U# b7 X+ p
  429. $ ~, S$ y8 v/ N
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( @# e5 U+ O, o
  431. {
    $ C: G& k* \8 X5 e) m' a
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;9 b6 R4 u# B! C8 m5 e( G9 ~0 R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% f3 _5 ^" E0 d3 m* u9 t
  434.   {
    , U: @0 d, W; W" Y" I. }) j
  435.     char szLanguage[50];
    % s" U6 \* [+ X; b) m
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    0 B; v) |% L+ d! M/ o
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , @, {: V1 y$ k/ L' a8 S/ o6 d
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 l. l% j. v3 e1 W
  439.     else                                   m_iLanguage=ENGLISH;6 g" H( L- h4 O" B8 f" L
  440.     char szRegister[100];# ]* j% r- i2 @, w+ l5 Y# n. V4 G
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 u& I5 W. S% L# B/ f, \
  442.     strRegsName=szRegister;! k7 h" z1 k. t  h% X" D& M' P
  443.     char szPatchURL[100];( i% N- }  }0 }9 X( ?
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ W( h# j  @) c+ L
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) r3 j, d, y8 @
  446.   }! ^& E5 J- `5 p5 L
  447.   else
    : S0 ]- H; f* G5 g6 \
  448.   {
    2 a" g- O7 p% d5 ?' e
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 ^% M& y. e4 y/ a
  450.     strRegsName=DEFAULT_REG_URL;, p) ]7 s7 y  i* K
  451.   }
    2 k2 {5 t% ~4 \# x, L
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ( A4 `$ ~. J' C, P
  453.   {) ?  ?5 @) a& a
  454.     char szIP[50];
    $ I4 r( b4 _/ Z# p' z
  455.     char szDIR[300];
      m4 x/ c* |0 F# |5 Q+ S0 U
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 N( o5 [6 s3 K+ s5 w+ @- Y7 y
  457.     {
    * N0 k9 K# l0 N4 @7 l
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");6 A1 r2 N- c( K2 a, N+ ?; g
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");7 T2 h& D! w! Y. D6 s
  460.       strHostName=szIP;
    + Y+ ]3 E& y% l" V! Z9 n7 V
  461.       strHostPath.Format("/%s",szDIR);+ s  E2 @. v- C
  462.     }1 n) ]  v2 O' ^& }
  463.     else& m/ M) r) l1 Z4 t
  464.     {' W" D( U7 m3 @2 z1 ?4 K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)+ _' }2 A# v& m
  466.       {
    8 S2 g, b0 q1 r( ], V; ?3 Y! k
  467.         char szLanguage[50];
    ; X% C( j( z' A( r9 ~: L/ a& S
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    $ i  C8 M, U- u9 o
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 T, e3 E5 O3 L- S
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 m# A. `( M9 [9 J+ }! C! p
  471.         else                                   m_iLanguage=ENGLISH;$ ^  P9 d1 A, `6 S# c
  472.         char szRegister[100];
    , k7 ?6 U8 B9 u6 v3 K
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ E" t# p- h( @, s
  474.         strRegsName=szRegister;
    / i. Y0 m- P8 f, `- y' _
  475.         char szPatchURL[100];" R9 j. y5 q+ b9 [, `* J3 r- Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) [+ c8 M- T/ [: Q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ E# k9 T# Z1 R. ^6 G
  478.       }4 c! O. |) j& Q# O/ ]/ z1 T4 A
  479.       else- ~- g  V/ u; J+ E2 j5 ?5 Y
  480.       {
    0 C" S3 I1 g; R' n- p
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 p" a' L- B; C5 S! g- Z; j+ i
  482.         strRegsName=DEFAULT_REG_URL;
    3 U9 y% e2 K6 H+ W9 f9 i' N: n3 v
  483.       }# l  Z) M( J8 E/ F; |4 g
  484.     }
    , [2 X7 G. k) g; ~
  485.   }
    ; C: l* E- E/ F3 U! k& C) r, k
  486.   return true;
    1 ~; M* F  n" ]$ z! F! y
  487. }
    9 W3 t- J; {' `1 o8 ?
  488. 1 E% ]' B4 g$ b) T
  489. #include ".\ZLib\unzip.h"! }0 `* T. c( Y1 Y) e
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    3 b+ O' ~4 p  ^/ j. B0 f
  491. /////////////////////////////////////////////////////////////////////////////
    6 J3 G% ]. r% K4 G$ Z4 c
  492. // CRevAppApp initialization* t% y; y: I8 a
  493. " {! T% y# g7 k9 u- |
  494. BOOL CRevAppApp::InitInstance()0 m6 v: l6 B1 R  e6 U! N, A
  495. {; i# T' J/ J& Q$ N
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];6 A+ y! Z+ P' k6 P% ~

  497. ( W; q3 z, F' J. }/ {4 |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    0 f* d! u. r- L. s
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))6 X- S" ~! b, B8 U" M
  500.   {# q6 F* z8 |# F' a% n) u) I5 I
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    3 V9 P/ h0 m4 B: z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);& ]- C/ O8 {+ T; A3 y- @+ M; j
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))% m5 u% j! z8 j: J6 P# m
  504.     {1 P. M8 M- J# {( ?
  505.       strcpy(szPath,szPathTarget);- E6 u- g- M; x( l% a+ v0 C0 K
  506.       SetCurrentDirectory(szPath);
    ( o/ \3 s  i' P. ^, b
  507.     }' j. P1 ^, U) q* j7 \
  508.   }' F( a' C9 i1 ?; W
  509. #ifdef _DEBUG+ ~+ l+ d! R9 R; _. x
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / I) H% v7 v3 z+ E9 L, h" H
  511. #else1 i2 l1 z$ p/ `6 B1 I9 V
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    7 [5 B5 c! r! k* j0 t; J! G# t. G1 T
  513. #endif( u) E0 U% a" N/ l+ J0 U3 B) z
  514.   {
    # g2 X7 c- _+ {
  515.     char tempFileName[MAX_PATH];
    8 t+ m" F( H- ?# J
  516.     strcpy(tempFileName,szPathSource);, A% U/ T2 ~" ]* x( c" P6 R" d+ R
  517.     tempFileName[strlen(szPathSource)-12]=0;9 Q$ J  D+ B, \! H. C
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    : F1 ~* {+ i6 g6 }
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);# B' m+ T9 P% v4 z
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    6 ]1 l( ^- z5 z: r
  521.     return TRUE;
    + S8 f2 Y5 H+ S" E: u
  522.   }
    8 {  s7 S; h% K
  523.   // Nuke 0118: Delete run.exe0 V/ D$ W8 T& P  F) P
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );8 g# m, I; s, S( K9 o/ y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");' i; }. `5 d  ?) U; h
  526.   if(!ReadCfgFile("Config.ini"))
    " R+ K5 d. N, y1 L3 q
  527.   {! \1 Z! O5 E! t9 [3 m
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    9 r8 I& U7 U+ c  T. q" Y8 E
  529.     return TRUE;, a* \# }9 H+ b) b3 t6 Q5 Z1 p$ b, H+ }
  530.   }
    6 E7 e! {: e6 |" Q4 [
  531.   HANDLE mutex;
    ! Y* O; d+ V7 h6 G2 ]8 n5 S
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ' Q1 ~1 }  ^  h% ]: t
  533.   {4 i5 D7 I: v" h" n$ f" y1 M
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    0 }& R. u  K# R, B
  535.     {; w& K8 v3 Q# o) z# t& q: N- K
  536.       CloseHandle(mutex);
    # n- b* c: f2 T$ S9 r
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);6 B: _: X( v* S! X: O1 N
  538.       return TRUE;7 a7 [( P6 f9 S5 \1 v
  539.     }
    + B8 R$ [0 u: F5 ^2 N, z
  540.   }  
    : u4 m' a3 ^' w, F) h' T- u$ ]
  541.   CloseHandle(mutex);
    . M. Q9 j0 z% s3 l% v5 }

  542. 7 e! e" ?# W; r0 T' }+ X1 d
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    1 ?) M) q1 Y8 ?0 O- ?5 @+ h
  544. 4 e8 o; w( l1 q9 _1 `
  545.         AfxEnableControlContainer();/ |: v# D) s* y% m, g# m
  546. ' y6 g% h8 V6 M# s, g% a
  547.   bCanUpdate=FALSE;
    ) B, f1 K* g# X4 C
  548.   dwStartUpSteps=1;
    , j4 N! Y: b5 F, J; n  U: z
  549.   dwProgramState=AP_NOTHING;7 `  N, j7 V2 V4 J/ R+ k. c
  550. ! Y: z/ f% ?( h
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ! `8 u7 ^( U6 i5 C* U

  552. ( S: l2 _& H( s
  553.         // Standard initialization- `5 i" Z, e4 v) o8 C4 b
  554.         // If you are not using these features and wish to reduce the size, C( u6 V1 a3 f  t9 w/ _1 C; p
  555.         //  of your final executable, you should remove from the following
    1 c5 k( p( T) A" p1 r0 ?
  556.         //  the specific initialization routines you do not need.
    4 `1 H0 V  _- q+ l( _

  557. ! L$ G8 \$ ~1 S
  558. #ifdef _AFXDLL
    * W8 u" g* o, ~+ R+ q- o) T
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    & H7 `8 @* e7 b' ?
  560. #else8 }) z8 F+ \: e5 s% e
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    - |* K. N: N' p' l8 _6 G6 G  H
  562. #endif) N8 g; I9 Q- b( C
  563. * _2 J& u2 U1 q2 J% q- [
  564.   dlg=new CRevAppDlg;
    . P9 p+ ~, H! l
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    , w: B+ v( ~5 a% y- g: E
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    1 @) c! \9 f  s# |, h, @0 ^
  567.   m_pMainWnd=dlg;2 l3 W) W1 ?" S# @
  568. % c! j* p; R4 n! i) S9 j
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    4 T5 V* S! V4 m. N5 e6 q7 d* F
  570. - q3 d$ L1 Q0 ]3 F4 `
  571. //  GdiplusStartupInput gdiplusStartupInput;
    + t) v+ c/ a7 L
  572. //  ULONG_PTR gdiplusToken;  J& n0 @# @2 V- y( S
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);" k% H) f7 r( W8 T: G1 d

  574. 4 E$ \; ~  S3 r3 N( m6 S
  575. //        CRevAppDlg dlg;8 T+ q2 L/ W6 x- {; r
  576. //        int nResponse = dlg.DoModal();
    9 K" J2 m4 y: W5 U0 Q7 K* B
  577. //        if (nResponse == IDOK)
    ( e7 m0 Z5 Z$ C$ w2 S) N+ k
  578. //        {# @) x1 ~, y3 c, Z5 j2 O  e
  579. //                // TODO: Place code here to handle when the dialog is2 x9 [; A$ Y/ A4 j9 O  f8 R0 }$ w
  580. //                //  dismissed with OK
    * E5 b5 w9 ~" a2 j' ?: O# W. P
  581. //        }
    $ |& t, J7 i5 J, Z
  582. //        else if (nResponse == IDCANCEL)$ ]6 Z9 L. ]5 f" j5 N* R5 g; k
  583. //        {  u5 u2 y( r6 m6 i
  584. //                // TODO: Place code here to handle when the dialog is9 k0 ~/ I. y/ g0 K
  585. //                //  dismissed with Cancel6 {% z, ~% S! W. z
  586. //        }
    1 i6 T( P/ c- v2 `$ _' A0 Z: t

  587. 9 X7 W  f) j8 r- t
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    , }$ w- r- z. z( L- c" [- {  H1 {
  589.         //  application, rather than start the application's message pump.( a8 T8 \2 O, P" b: w- q7 }8 ]- {% a9 N
  590.         return TRUE;
    # d$ a7 L3 z- a* \
  591. }& c4 f8 L- a- I8 w
  592. ! M" |, Q0 n! e% ?; ^% E
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    4 k: z8 @% f! P& X
  594. {
    # z2 w2 I4 l9 N) K  J
  595.   int i;
    & u+ |" L2 T7 f" {- n% F$ n
  596.   char *szRet;" b% w" f. f, U5 n# N

  597. - Z$ I/ R9 L+ \# I- Q$ E; L% P* D
  598.   if(pSource) { itoken=0; sztoken=pSource; }$ [: ]5 D$ ?6 I% [4 D
  599.   if(sztoken)$ |( J7 W: ^# q; E
  600.   {# ]8 U3 T9 I* p
  601.     szRet=&sztoken[itoken];3 s5 S+ ?6 b3 D5 S# p
  602.     while(sztoken[itoken])
    ' z" t; a# L7 U. N1 C  s+ P+ D7 Y
  603.     {% f* k* G6 \6 v( ~  w8 z5 d
  604.       for(i=0;i<(int)strlen(token);i++)
    $ F5 I& X: b( r
  605.       {5 M9 e$ J. l9 U7 f
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    " O# `0 Q; |. g* O$ `
  607.         {# Y1 i0 R5 O3 @' ]( X$ C3 @
  608.           sztoken[itoken++]=0;9 U& C5 m2 \$ w
  609.           sztoken[itoken++]=0;
    4 J7 o0 h0 V% K+ d
  610.           return szRet;+ X7 E3 ~4 ~* B8 l# w) I* V. c
  611.         }" G- V/ i3 l7 z
  612.       }  J- T8 {; Q* p7 B% r" r; |8 E& Q
  613.       itoken++;0 r! H3 Y( v* b1 M* c. t$ t1 e
  614.     }
    7 \: S! `* t3 B8 v* S. h" n) j1 j( y
  615.   }
    ! i; }; p  ^" d0 x7 r; o% U' B1 x+ n" d
  616.   return NULL;$ R. G  e  K, l. b1 @4 d3 y9 `$ h
  617. }
    ! ^6 v1 d+ T+ i: ]! L, L6 f! j& n
  618. 3 u, t& m. e  h& o0 M0 {8 E! u
  619. void ProcessProc(long Total,long Current)
    . d/ b- h, I; Z7 I( u
  620. {2 J- Y1 w% z. t) R9 I
  621.         MSG msg;* z6 [1 Q# i- a: D5 c2 X
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    3 j) z' }3 t' x- Q0 u
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));( \2 K/ x" _7 b8 ~: _
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))4 }7 t7 h- `3 `2 h9 v
  625.         {) y' j8 g9 G; A" b. A
  626.                 if(!GetMessage(&msg,NULL,0,0))7 t/ Z8 }( y# O, a+ j7 Z
  627.                 {
    6 |& @0 C  q8 T% |0 w
  628.                         return;
    0 r: }/ U2 [& Z" h" R
  629.                 }
    & u6 h( W$ r8 |2 q1 o  \
  630.                 TranslateMessage(&msg);
    + |4 H/ ]8 a2 ^; U8 B/ P, _9 A- G
  631.                 DispatchMessage(&msg);
      z4 l' h/ [+ F' ?# ^
  632.         }       
    ( P" Z3 C; Z) m& y& U. P7 V
  633. }
    $ N- {, h# [" L5 q- F0 n

  634. % Y5 G9 I% N" F/ q$ x. j
  635. BOOL bFirstChar=TRUE;
    . [+ B3 S/ B% O

  636. * C; u! r9 F; P
  637. BOOL CRevAppApp::OnIdle(LONG lCount)# G0 Q* ?- H; \  C: A
  638. {4 p: I3 V# M4 N* i/ n6 k8 S
  639.         // TODO: Add your specialized code here and/or call the base class
    - l1 _' e' ?# @( z2 w
  640.   switch(dwProgramState)
    ' B: ?) j1 a  u# f9 x, ~
  641.   {' D8 E3 t2 G. H' M: k
  642.   case AP_NOTHING:
    0 @" b& f7 V: {9 m8 _8 p% w
  643.     switch(dwStartUpSteps)9 F7 r0 R; }9 g: W
  644.     {
    # T+ X6 x8 V9 E$ A9 I6 K$ r
  645.     case 1:
      a$ ~7 ?' J6 E8 G6 t
  646.       {
    . k3 n3 Q! U8 T% f) Y7 l: v- Z- G
  647.         int i;! m5 g6 i) B" Y( [$ O3 G9 {
  648.         CDC *pCDC=dlg->GetDC();
    - L$ h+ y+ R1 j+ x
  649.         HDC hdcwnd=pCDC->m_hDC;
    # e4 n  C$ d* |4 C- M# [0 T
  650. //        Graphics graphics(hdcwnd);6 o! M" t! [" x- F8 x" `# D
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");! Y( Q: i! z8 G' `% x
  652. //        INT iWidth=bitmap.GetWidth();
    ( I' a  k2 N0 f* s
  653. //        INT iHeight=bitmap.GetHeight();4 s3 }8 K2 D" L9 j2 W) r* K' c
  654. //        Color color,colorTemp;
    6 z8 S  T) _9 a( d& U' _
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    0 Z+ ~8 t) k" J% z, ]7 a
  656. //        {1 y5 [* U: {6 \: J/ y
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    & M' h6 y5 G! ~* b# P1 r. L' g1 y" ^
  658. //          {( L2 T+ [$ i) W
  659. //            bitmap.GetPixel(iColumn,iRow,&color);2 W  A( o9 v5 h9 K' \: q) W6 b
  660. //            colorTemp.SetValue(color.MakeARGB() P$ v9 s' Q! c" |
  661. //              (BYTE)(255*iColumn/iWidth),
    % x2 |9 F! S* f2 }2 W  m8 P
  662. //              color.GetRed(),. f# y6 |+ r" a, t8 M
  663. //              color.GetGreen(),* R( y! W* f0 u
  664. //              color.GetBlue()));
    5 L; x: K( G4 I7 p$ D) E
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    4 ~1 Q* x4 z& a0 K& c; a
  666. //          }
    0 P! T% {( ~' _5 _/ |
  667. //        }" A9 D; O. H7 l0 z% ?# s! l% Y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);; N3 I/ `) }0 Y/ j4 s' ]
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    6 Z, j+ f4 {7 m+ W
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    & B( r9 {: ~! j
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- {) L" s" q/ \
  672.         for(i=0;i<240;i+=8)7 Y& P. r) A# ~" z  D8 U
  673.         {' U( D; ~2 }8 @% R% U
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 u. Q* L& n0 u9 u. P+ F. J
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  s6 v8 `4 F+ c6 \: Y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ |. w) u. q* W  P
  677.           Sleep(33);% Z# ~1 T  p8 c  V/ D8 z/ z
  678.         }
    & y! T  B1 W/ l) K- G1 r3 A; ?
  679.         Sleep(1000);
    , y, q7 `8 C- B. X
  680.         for(i=240;i>0;i-=8)5 r3 N3 u  F, B4 s* p: {
  681.         {0 ]4 u" E" |2 i4 D( x
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  V. V* |( `; ?2 r# E: E7 w- y
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % R) w! H# |1 v9 Y3 w9 _
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' E8 N! \- H1 k4 M
  685.           Sleep(33);
    " z" q4 C1 u9 J* O2 {
  686.         }
    2 m) R. q6 b) o2 B* U( T$ G% `
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    - z' n0 r% K* h. p$ H( j8 h. m+ p1 }
  688.         dlg->ReleaseDC(pCDC);3 V0 B. N5 v$ c; B( V: Q- `8 o. {
  689.         DeleteDC(hdctar);5 f9 p. K9 o& _  R: E3 X# a
  690.         DeleteDC(hdcsrc);
    2 L$ C+ h* u) }' K/ ~& [
  691.         DeleteDC(hdcorg);
    : \. X+ {. |: D& Y
  692.       }% i9 z# `% A/ [" ^; l  F+ [) Y3 F  S
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    1 X+ Q$ U* `' }# y+ O3 f9 l
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");$ C( w- Z  o. C1 L0 }7 B  C# d
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ( U2 ?7 D: r: E( M( U. ]! E- R7 M
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    * v7 V5 c3 I3 c1 g+ i' w9 |  W% D
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + N: Y- Z9 M( [+ s
  698.       if(!Dn.Connected())
    9 Z5 l" W7 x& c. i) s1 L
  699.       {4 [- Y  ^. q3 h/ F' _
  700.         dwTotalFiles=1;7 z5 R- ~6 ^8 V% u) f# P' G
  701.         dwDownLoaded=0;) Z7 t% s0 s# C2 k5 M
  702.         bSilentStep=TRUE;
    - g8 C' l( w' n  c+ R
  703.         bCompressed=FALSE;
    / z# q& @  E' G) ?. j
  704.         strExtLocal.Empty();
    ) v) g" g9 u( ^5 @' B
  705.         strFullName="readme.txt";
    / J& K; Z1 ~) S+ h% I7 t! z
  706.         dwProgramState=AP_CONNECT;
    2 K  g# o3 |2 m6 k
  707.       }
    & g4 k+ \- a( w" k1 y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    $ e- l" M! d% b  r; t
  709.       dwStartUpSteps=2;
    & @7 ^( V9 n1 a  z
  710.       break;
    & {0 b% I, r; \  _
  711.     case 2:
    6 ]3 Z# w: Q' ~8 w6 m6 R
  712.       {
      p7 Q- s. z* x" G# @& b! p  b
  713.         int iEOF;
    9 x! |* u- x+ Q5 O, D/ A) S
  714.         FILE *fp;, P( i( O$ J& a0 H- U! l
  715.         char szString[512];
    * R5 T, _3 ^8 h# o
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");( d0 @! t! R. I- `6 q8 z: M
  717.         if(fp)  Z% M3 W% I  y+ u  L' C2 b
  718.         {! C5 }$ y8 X* e! P. g
  719.           do
    6 k8 e2 c2 k# K
  720.           {; E( l0 b& j! e" ^- u7 o1 C" J
  721.             iEOF=fscanf(fp,"%s",szString);
    3 Y/ {" F) H2 s# w
  722.             if(strlen(szString))7 S8 b0 R) d$ c# N  ~: h2 Y  Q0 z
  723.             {
    6 }# z: i: `( r+ S
  724.               if(bFirstChar)1 N: g7 i3 E1 i
  725.               {2 I, U0 i! @- F- W/ R- t7 |7 z& q" ?
  726.                 bFirstChar=FALSE;* l  T- J& C0 A% V' n% h
  727.                 bConnectIsBig5=FALSE;
    ! h/ H8 o& M5 f$ a
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    " w6 Y* j9 L2 ~+ q1 _% D' s8 h
  729.               }
    0 ^+ W) t" x6 G0 K$ G8 ^
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- V4 p+ }- s+ m. x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    + o( `2 J& x6 Y/ T* z
  732.               dlg->m_ListText.AddString(szString);$ W- i( E0 m% W9 P, |
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% Y$ P9 |( P& B* N7 S0 S7 L1 l; n
  734.               *szString=0;
    8 B+ E( x! }" e2 z
  735.             }4 M' _7 q! v. \) c. ^4 n# k
  736.           } while(iEOF!=EOF);# J" I- r" m3 ]4 U! g: S2 c
  737.           fclose(fp);
      E6 q1 R7 f) ^! L+ {8 T# L, h
  738.           unlink(".\\DownLoad\\readme.txt");
    . J0 R8 o" L  N! G! R; X
  739.           dwStartUpSteps=3;9 J5 _7 y& ^" H+ M0 i$ u
  740.         }
    . V  _& p7 O* G  ^4 y2 `7 m9 {5 a- x
  741.       }, o+ `  E0 ^6 X0 Y3 E- B
  742.       break;. D% s& o! g0 g+ Y' [' R
  743.     case 3:! G: C- }! z: w6 V; F) v  V' K
  744.       if(!Dn.Connected())7 q( ~4 n, m. T  E; y. y$ Q/ i5 ^# k% }
  745.       {
    . j; R# T9 d1 f9 `
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);, a8 M, o5 D; q/ Q& V: I$ O
  747.         dwTotalFiles=1;
    7 Q; H9 L: B: E
  748.         dwDownLoaded=0;
    # e4 S, b5 X9 W. J* V& X
  749.         bSilentStep=TRUE;; n% K( h- m5 f) b6 ~% v
  750.         bCompressed=FALSE;
      [* J- O  @7 ]! G+ H2 R
  751.         strExtLocal.Empty();+ P2 S- L  D/ v. M6 i: I
  752.         strFullName="checkversion.txt";! z) ^2 W: E; s+ l+ A
  753.         dwProgramState=AP_CONNECT;# A" ^% k; Q# ]" I% \( z6 N' ?' ~
  754.       }
    8 e( H, Y0 \. x( ~+ J7 C, ]  f6 p
  755.       dwStartUpSteps=4;. @' p, F8 B, ^/ K# |" x
  756.       break;
    1 Y# l% G; l5 \$ q% |
  757.     case 4:
    1 W1 Z" a3 Z$ g8 H9 U
  758.       {/ w* A6 L% G* S* |
  759.         FILE *fp;1 z; A# b( L5 K5 h  [$ W1 W
  760.         char szString1[128];$ x( @3 v( n2 a0 K5 b7 l  U/ u
  761.         char szString2[128];
    . }0 \+ c8 g1 c
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    4 @4 Y4 N0 s* ^; c. k( Y8 n
  763.         if(fp)1 }2 `/ r! \; L) J7 G6 k; h' G
  764.         {, A! m2 _1 P7 B
  765.           fscanf(fp,"%s",szString1);
    ( P) J" o9 e: U! t2 l2 r
  766.           fclose(fp);
    " E; D7 P/ W* e
  767.           fCheckVersion=atof(szString1);, {2 c+ Z8 s, s! l6 `0 M" [
  768.           fp=fopen(".\\checkversion.dat","r");3 s/ k& a) |5 W
  769.           if(fp)
    / t4 z5 I" X9 Y6 @' t( Z: @2 E
  770.           {% a" f( O/ @  K* y% U  l
  771.             fscanf(fp,"%s",szString2);7 C8 u' x& X5 C; W* ?
  772.             fclose(fp);7 f9 `' w5 y7 b5 _  u4 e+ h
  773.             if(atof(szString1)!=atof(szString2))5 s. w" n% b0 G/ F
  774.             {  ?' |. e2 W4 p" v' }
  775.               if(!Dn.Connected())
    ) I5 l9 Y1 w7 c1 v" ~. m7 g7 P2 q% O
  776.               {. w, E* ^& x; r; r' G( a
  777.                 bFirstUpdate=TRUE;
      @. N' p& u& b, V. ~1 T
  778.                 dwTotalFiles=1;
    & M/ L; q: |+ j, z* W' Y* _* u& j
  779.                 dwDownLoaded=0;% ^4 j# e' n5 A
  780.                 bSilentStep=FALSE;
    2 p4 f  m2 l( O
  781.                 bCompressed=TRUE;, G# f: B5 S/ Q0 g$ `
  782.                 strExtLocal=".\\DownLoad\";8 o; S: P; J! L& e7 Q3 X; R& Y
  783.                 strFullName="update.txt";
    5 G7 l$ l7 ^0 t4 Z6 z
  784.                 dwProgramState=AP_CONNECT;, @# C* q$ ~" Q8 n6 Z2 d
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . u" V8 R- _3 b, b* i& a- [/ k
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 D( o4 F3 t( F1 Z) ]8 v. O9 G
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");1 w' n$ ]: r8 V* V* {

  788. ) n( z, d$ y! _& y9 m  q- @
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( S! V+ U( {$ I* U1 Z
  790.                 unlink(".\\DownLoad\\checkversion.txt");5 P7 B1 F; H( G* B& ?. V1 |* e6 }
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    % h+ U2 j8 Z2 {; K
  792.                 {/ U; D+ ?: ]6 F% S1 x
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( e3 |6 {& A( w" @" z! e
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % v) K. z! q4 _0 R% M8 v/ Q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");& g7 c2 M" u6 }: `1 _
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 W1 @7 i  |( c" `1 C
  797. $ L5 [0 ~* I& z, \/ ^' V5 ^
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 Q$ D3 k" S( Z+ O2 H+ b- X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* F! j5 B0 @& Y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");3 K+ N- O0 L; Y# `
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, a; q! h: \- F1 X5 W
  802.                 }
    1 J* t6 {( p* N: d- a+ o
  803.                 dwStartUpSteps=5;
    5 [- ^1 q" M0 Z7 F
  804.               }/ H- T) n; j& R( @. S" j3 L
  805.             }
    & A% R# Y$ `2 d- x; {
  806.             else
    # h; w8 F1 F% O9 p
  807.             {5 |1 q. t" F1 N" U0 j
  808.               unlink(".\\DownLoad\\checkversion.txt");
    7 {1 `; U# b' D. \
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");1 J; @! m! c  y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    3 s5 s) i1 p6 y. {$ p
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ! A: ?$ X4 V4 y& o1 \
  812. ' ]7 A7 }; v0 W' H6 g
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 A, s; f. X) Z# K5 h7 ~' N
  814.               dwStartUpSteps=99;
    , v" C6 V8 x/ b
  815.               bFinishUpdated=TRUE;# m8 J; m" G8 A6 n5 i6 E8 x7 S) _
  816.               bCanUpdate=TRUE;
    9 u: S' O' O9 n4 N: q" p
  817.             }
    $ U9 c4 o6 D; Z& [  Z- Y- M3 J- e
  818.           }
    + [4 a/ c9 R" Z' B
  819.           else
    . \: _& w1 Z9 ?! w
  820.           {  s9 j# d" ~* l4 K3 C
  821.             if(!Dn.Connected())+ c# X0 u! O, c: j
  822.             {+ r# Z5 f; ~  N  b
  823.               bFirstUpdate=TRUE;0 s& t4 F( q* C! {
  824.               dwTotalFiles=1;
    : r! z! [9 F3 \0 q: B7 R$ x  ~! N& P
  825.               dwDownLoaded=0;' p5 N/ |. J( l$ {. Q' O
  826.               bSilentStep=FALSE;
    ! M- |, [0 r7 @4 k! U3 m* A
  827.               bCompressed=TRUE;, ~1 _# `0 n5 s- P, [! y6 v
  828.               strExtLocal=".\\DownLoad\";
    / r" X. q6 R7 v7 P
  829.               strFullName="update.txt";+ ?- ]+ S: Q, p  w6 f
  830.               dwProgramState=AP_CONNECT;$ Y8 t, T8 ^* p! N
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 x( p  y. R; k  Z/ E' I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! q; i3 U" H3 c  e, ^2 r1 X
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");1 J8 j+ W% V! s* F
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 K) F$ {5 H) t" q6 y
  835.               unlink(".\\DownLoad\\checkversion.txt");
    0 l. K; }, R2 t4 D
  836.               if(GetFileAttributes("Wsa.zip" )!=-1): Y5 J! j# H5 s$ w7 A) ^
  837.               {
    2 A  b* ?9 K) O, }; e# a1 ?* q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    - P& \) n0 Y2 v
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    , C( n8 Q1 t- `" @$ B
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");# Y) v4 f' I$ K0 g% n$ X
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 t3 L4 L2 C4 r" J" }) A/ K4 i( V" t
  842.                
    ) k! B8 f6 k$ O) h5 b& }
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 l2 q7 ^  v2 V
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- n. z3 [0 `5 g) p) C7 u; P
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");5 C+ \: b# H( M8 H/ z9 }& y3 R! {
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 \  X8 _" c# |1 e7 J0 R1 Z
  847.               }7 D1 z& Z7 O1 f7 n
  848.               dwStartUpSteps=5;
    2 y# S& K& y: o" l0 N3 c& e8 d
  849.             }$ x2 n, H+ {: K! N1 m& r+ D( h
  850.           }4 S7 B" V, ?  I/ i. E2 A
  851.         }
    3 k4 a3 ]( B. T& r8 T* t
  852.         else& n; ]2 t+ H: [* Z3 T
  853.         {/ z, d! s. u$ |' h  L5 l7 j* J
  854.           dwStartUpSteps=3;
    9 Q5 S) c. T5 b; p2 Z% X
  855.         }
    $ C: D# l# w% y7 A3 i1 N
  856.       }
    , r9 m! G- J6 d+ K
  857.       break;. v# T' M# a% Q3 c3 a! e, F
  858.     case 5:1 D1 T; I* s. S7 g  `9 U9 J
  859.       {/ X& u# ?# r" d0 E" g
  860.         if(GetFileAttributes("Wsa.zip" )!=-1): ~9 O) ^3 C8 \1 v
  861.         {
    " r: B) b5 ?# T0 Z4 c
  862.           int opt_overwrite=1;$ M  ?# @' J. G/ W
  863.           int opt_do_extract_withoutpath=0;
    / D- ^4 o/ }) @4 c# M2 u7 Z7 b4 j
  864.           unzFile uf=NULL;$ x# z5 q1 L* u  a( w6 U& O) A+ ?

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

評分

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