CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
7 n: b8 G+ U! l% h. f; q
  1. / RevApp.cpp : Defines the class behaviors for the application.( |1 @1 H0 j4 P  _
  2. //
    % K( i: r' F2 E2 B; u- t% t
  3. # g1 d3 W5 R/ e2 j* g: `( @
  4. #include "stdafx.h"
    / V% U& H7 b: c3 F! L8 \; C+ l

  5. 3 ^" p9 ?% l" V, S9 ^9 R4 A. O
  6. //#define UNICODE
    ( _7 q' R& R. `% `7 m
  7. //#include <gdiplus.h>
    # P# j3 w3 e7 V% h
  8. //using namespace Gdiplus;: q5 L7 J2 K2 m1 v
  9. 7 L# Y% |0 }- H1 G) g
  10. #include "RevApp.h"
    " B0 @* u% r6 u3 \% Z& T
  11. #include "RevAppDlg.h"
    3 p( v* ?) @5 l
  12. - L+ {, ]' \+ G8 U
  13. #pragma warning(disable:4786)+ L6 @$ Q6 n; x: n+ A
  14. #include <map>2 x% ]- [8 n! g0 Y3 P2 e1 ^* X
  15. #include <list>
    ; B/ P$ q* i% _9 m
  16. #include <direct.h># j  W& _6 d& W( H
  17. ; e0 ]* |8 o4 L- V5 h; E  b
  18. #ifdef _DEBUG
    $ k9 X7 b3 k! x& Y5 X& l3 i
  19. #define new DEBUG_NEW
    % ]8 h; P/ _- Z. s1 b. \. a8 p
  20. #undef THIS_FILE7 V) a. L6 M" V- E( j
  21. static char THIS_FILE[] = __FILE__;, `9 x6 c) D4 n+ X' f: a0 o
  22. #endif; r2 i7 y3 a0 c% [4 Q6 W( l
  23. #include "SkinResDef.h"# z# t) [$ _* ]; ?0 b! J0 K) E4 @
  24. #include "ChangeBG.h"/ z6 t# G% _+ j$ x# E
  25. #include "AFXINET.H") x: m, k# V5 Q4 W6 Y% `1 G
  26. 7 A) O* r' N% v% f
  27. #define TRADITIONAL_CHINESE 0! s1 A" t7 ^6 w) j
  28. #define SIMPLIFY_CHINESE 1# }8 C* y# p$ P% d7 w( T( d2 J
  29. #define ENGLISH 2: ?/ {) a& @- [% C2 \  x
  30. int m_iLanguage = ENGLISH;8 I3 i1 A' K' }! ]# ^% w
  31. /////////////////////////////////////////////////////////////////////////////' M# M2 O4 s" C! s& N; w- I
  32. // CRevAppApp
    9 d' @  @3 ?9 R# O7 e, v9 Z+ }9 x9 N

  33. / j4 ?9 {% g: I  g. ]" M
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)2 p* f/ T5 B' O" M# [
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    1 ]' O1 x8 X% j9 G4 Y! Y: `
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
      k2 R0 y2 t0 w0 ^+ J% A
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!* p& d7 P0 A+ t9 \0 ~% k$ g
  38.         //}}AFX_MSG
    5 z8 \. D3 R8 x+ N" P- F1 D9 }
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)! K( z- X8 i% j. t) j! o. y
  40. END_MESSAGE_MAP()
    ; |4 ?8 t+ g( }2 [( O- r) X
  41. , O5 b+ W3 X6 l& p8 E9 n; l( `# W; W
  42. /////////////////////////////////////////////////////////////////////////////
    / X' X! [' X- S( a
  43. // CRevAppApp construction: W0 N2 W9 m& b4 S- X7 E
  44. / H9 A. b: p" x# n% ?4 ^7 C; |
  45. CRevAppApp::CRevAppApp()
    ; m  q5 D4 h! f, u8 y, h* t* P
  46. {+ m/ m# }6 W8 s) i
  47.         // TODO: add construction code here,
    " u  `2 J/ G9 o1 J- ~
  48.         // Place all significant initialization in InitInstance% N% u2 [9 W) w. ]! x4 a
  49.   bDisplayIsBig5=FALSE;
    + O" h- e0 o- ^5 G5 e$ C5 {
  50.   bRestartUpdater=FALSE;
    3 Q. x# ?& X0 w- k
  51.   bFinishUpdated=FALSE;
      j6 W  `+ b' h' V
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    3 s4 [. r) @: P$ b" B
  53.   InitChangeDataBig52GBKS();
    - R! h: {8 g. L4 y5 `  n
  54.   InitChangeDataGBKS2Big5();2 h( ~3 U" n  y5 |
  55.         //
    8 m- U3 s9 i% m, z
  56.         bClickRunExe = FALSE;/ E6 C) M" ^, I5 R) t6 V
  57.         //
    # H' o. b8 V* x8 h# e
  58. }! q5 c* }/ i5 L4 B, |

  59. % F/ J  A* {9 O9 x3 \4 @* l# T
  60. CRevAppApp::~CRevAppApp(), s7 Y& Y4 d4 p, {8 m
  61. {
    & B& I1 @9 P! ^$ T/ w7 n0 W  ], H
  62.         // TODO: add construction code here,
    3 H! i; q. x* ~9 O
  63.         // Place all significant initialization in InitInstance
    0 c% N% p) T. j, z. A
  64.   EndChangeData();* x9 J; H3 y" K
  65. }
    ! d. d4 t( H5 H1 f/ `1 c4 A

  66. ' K( _+ C' k$ @5 X2 y+ N
  67. /////////////////////////////////////////////////////////////////////////////) U, A1 ]: }( q  @6 G; e
  68. // The one and only CRevAppApp object6 X3 j6 o0 w) C) Q4 f7 V
  69. / P& Y, s- I" ^% t* v; {, G
  70. CRevAppApp theApp;
    : a+ `1 P6 A2 A! v8 S$ w
  71. ; t' _6 V# p+ Z% g1 x1 Y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)) ?' e' m2 t( D' L
  73. {
    & U7 x8 _! P) D1 N$ M! E$ d3 t
  74.   int iEOF=0;8 h0 S2 v; r) Q/ P+ S- Q, |
  75.   char szTempName[MAX_PATH];; s7 K  V0 x  ]/ g4 Q( K
  76.   *szFileName=0;
    / L) D% x4 E  o& V
  77.   iEOF=fscanf(fp,"%s",szTempName);
    2 j: i) M: r9 a7 |
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')0 D3 U3 D$ Q* I# W9 S& d
  79.   {+ E3 Q, e7 H* V) a9 n' ^
  80.     strcpy(szFileName,&szTempName[1]);
    ; S, v* f! \3 L' s
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)0 ^% ~0 z# u0 \: I2 i
  82.     {
    6 k; w7 u6 J. J% Y4 ^
  83.       iEOF=fscanf(fp,"%s",szTempName);0 L4 q! f' w0 S' B6 ?
  84.       strcat(szFileName," ");# g* ~& x" M+ ~7 v. x+ j6 d6 J6 s  F
  85.       strcat(szFileName,szTempName);
    2 `9 _; D5 R$ [7 G5 N# b
  86.     }2 S6 K- J! Y. c& F
  87.     if(strlen(szFileName)>=1)* Z" [% ]6 u4 M1 {" @# J) I$ k
  88.     {3 J9 y9 ?2 C- Y6 ]
  89.       szFileName[strlen(szFileName)-1]=0;& |3 D0 n2 F0 S9 Y) K
  90.     }
      D% a! [( D* L: _5 n! l% e% r
  91.   }
    * {- |3 H( q7 |. K
  92.   return szFileName;
    2 u7 o$ v7 E. c( ~: A
  93. }: M& V9 d. g, e4 W9 Y$ j1 Z- b7 {
  94. $ o; f0 I- l2 J0 H3 K* Y( o8 ^
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    1 ]( G* c2 Y% y& R* a; v
  96. {
    : ^5 M# ^3 S' [  l. ]8 X& W
  97.   FILE *fp;
    1 ]/ p% s7 c: d! \7 Z- ^& L
  98.   char *key=NULL;
    ; A  }% \, R0 ~  k1 C
  99.   char version[MAX_PATH];6 R" L9 v; q' R* K$ R
  100.   LPUPDATEFILE file,olds;
    ' I8 A, a3 |/ y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 |5 w5 I% O, _1 `  P& f5 @

  102. 1 n% Z! }1 A+ E" ^9 p: s8 f
  103.   UpdateList.clear();
    9 V) N* }$ E; d" J+ @
  104.   UpdateFile.clear();
      c! s0 X5 Y" Z3 O
  105.   if(GetFileAttributes(filename)==-1) return false;8 a: Q7 }/ g! O1 T; i3 A( k
  106.   if(!(fp=fopen(filename,"r"))) return false;/ i1 X' ^) L3 x- N# S8 i" f  ?0 j
  107.   fscanf(fp,"%s",version);
    / Q3 N1 ^( t0 s6 j) }) J
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }  P6 e6 E+ u$ ?: P9 k' H$ A
  109.   while(fscanf(fp,"%s",version)!=EOF)2 h0 X' T, R+ ~
  110.   {
    , g. o0 {2 e7 s9 x" D
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 f) r. @  q! J$ d- q
  112.     fscanf(fp,"%s",file->path);
    ! C8 y8 M, {. a+ z
  113.     ReadFileNames(fp,file->file);# |- `8 k1 k7 i, c8 |
  114.     strcpy(file->full,".");% V2 @" o5 Y$ U
  115.     strcat(file->full,file->path);
    + n- L  ?+ K, T. L" y. Q/ _
  116.     strcat(file->full,file->file);
    9 j+ }( y' n4 n* Y# l
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    : m; I& C  \  `
  118.     {: `) Y, ~; k; `2 H
  119.       file->vers=(float)atof(version);9 ~/ J. g9 [, z% w& s/ b
  120.       UpdateList.push_back(file->full);# a- I5 w0 ]/ h. g
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));1 Y6 _; r; i3 N" H! _5 X9 x" A8 Y
  122.     }
    % u; C- H/ `3 A/ `9 }7 P
  123.     else5 Z# ?: T2 q8 n9 ?$ x9 e8 `  W) i! U6 R
  124.     {
    , {9 [: |5 ?6 _
  125.       olds=(*p).second;* b. b8 L' g0 g  H3 R& }% L$ O
  126.       if(olds->vers<(float)atof(version))
    / N$ Z! R& Q  f9 P" c5 c2 f$ `' K! @
  127.       {0 M+ x: @3 `1 B0 ], _
  128.         olds->vers=(float)atof(version);
    ! @+ W  v. J* S
  129.       }
    ( j# N' U- c" ?( g1 Q
  130.       free(file);6 H+ a: I- M. v3 f, ^
  131.     }2 Q5 |$ W% N, \  o- ~7 q; M! l( q2 r
  132.   }
    * f. m' j8 L& G: q" w7 N
  133.   fclose(fp);
    , w) b$ Y4 C& b- _
  134.   return true;* @  l1 s4 A7 ]1 u3 F& ]
  135. }
    , d9 T: w/ n5 g9 I; W! y3 M
  136. 7 }9 A8 J7 _1 C
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)5 p) }- z: I  l& @
  138. {) }/ l, e( q7 `
  139.   TCHAR  szFull[MAX_PATH];
    , x" O; {+ b5 h( m8 v
  140.   TCHAR *token,*inter;
    ; F0 [' S2 F: ]3 v; l' L' l
  141.   *szPath=0;/ C4 @2 H9 X7 t* ?  [
  142.   strcpy(szFull,szFullPath);3 t( s0 X; y, T! N
  143.   token=strtok(szFull,"\\/");
    4 s5 x$ N+ G, ?" E  x2 ?9 N9 K" K
  144.   inter=token;
    " T4 q( E7 i8 a" O! c
  145.   while(token=strtok(NULL,"\\/"))
    3 n2 C# L: w6 y* {
  146.   {
    9 i+ l: A6 l% }
  147.     strcat(szPath,inter);5 z  @/ d. u/ r$ W' Z- C' |
  148.     strcat(szPath,"\");* H! a" ^9 N: l: O
  149.     inter=token;
      E' Y0 I+ w5 w5 {
  150.   }; Z# Y6 |5 ?: Z/ N
  151.   return strlen(szPath);
    ! p% I5 o+ I  v- I* I8 L
  152. }; H% ]. n/ e* q% K' t
  153. " `: U7 g9 B" H) S
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)2 e' W  C* o: \5 R- z0 W  D/ B
  155. {
      o8 x6 d5 n8 c. J/ y
  156.   DWORD attrib=GetFileAttributes(Target);% ], w5 N2 N. ]2 z
  157.   if(attrib!=-1)( l, z- P0 }" M( o3 v* A
  158.   {9 s4 C5 b+ G" {& c* J/ ?
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ b+ r6 P8 D& g) N9 N  {0 y
  160.     {! ?4 i5 K$ z# R" [/ n$ ?  U& l
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
      G6 i+ x1 ?3 _) p+ T' A* V
  162.       SetFileAttributes(Target,attrib);
    2 H8 H( I- m1 X
  163.     }
    6 `* W; B7 {, g$ T. u' @3 o0 c2 @% y
  164.   }
    5 w3 p: Z& i6 y
  165.   CopyFile(Source,Target,Erase);5 O. W8 x$ e  X3 e6 D; F& R4 S1 K: X
  166. }
    # S7 }7 e4 r; ?+ |  E3 t" b4 S

  167. 7 @9 I6 W- D/ @; o, a
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)  K* L) l9 h: A3 ]
  169. {
    ; T+ y- n# R" R
  170.      FILE *fp;
    ) H. V& Z" g' B2 b. [5 _
  171.      char  szBuffer[8192];% V7 `- Y3 H% w9 d* A% A1 M
  172.   va_list  argptr;" m' |, O/ T: e+ y- J
  173. % n( I6 ^  n) m# J( x; c6 Y
  174.         va_start(argptr,message);0 d( U. c& z% B9 U9 p& W+ q
  175.         vsprintf(szBuffer,message,argptr);; {) f+ \3 }+ h4 ]
  176.         va_end(argptr);% j8 h: t7 T! Q% R6 n
  177.   fp=fopen(FileName,"a");; Z+ R: P1 `8 }+ _  l1 O2 J
  178.   if(fp)0 C) ^7 z6 f. d5 y2 i# ~5 l
  179.   {
    : n" e  S9 }) H: u) c5 l$ O
  180.     fprintf(fp,szBuffer);
    ! h, w7 N( P- N6 Y
  181.     fclose(fp);( O& Y, P  |+ ~" B
  182.           _flushall();1 g: `' J. }& o! Z5 x6 n5 @
  183.   }+ l& ^% J6 k1 J6 V- @
  184. }8 ?( _. ^, I, Z% o: d) g. P

  185. 5 B' J' L5 @& L
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    " g- H  Y) W3 n- W3 a- b( h
  187. {5 M' t0 G, {0 }5 H# K- a6 @
  188.      FILE *fp;1 D" W# E1 Z  ?$ d3 A8 \& p2 B! P+ ?
  189.     DWORD  attrib;: V/ A) t$ H8 A& _% H
  190.   attrib=GetFileAttributes(FileName);
    ( }+ s! U; ~! G. t- _! s5 F
  191.   if(attrib!=-1): }6 ^: q# j  |% T8 J. s5 t
  192.   {$ {  @5 N) ^+ e2 L
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    4 z; i; @4 {9 y5 w% i
  194.     if(!SetFileAttributes(FileName,attrib))
    - L: K# z' z/ l3 X. {
  195.     {
    / a" V( j1 R/ q/ f0 `
  196.       return FALSE;  u% }. u: K8 h
  197.     }( |; s( _: ]- B0 P4 _
  198.   }) U1 G" _) g% ?. b$ z
  199.   fp=fopen(FileName,"wb");' I8 J, D$ J  u: y4 R
  200.   if(fp)! D% T  K; j  B3 E) y6 S
  201.   {- V" S5 J; C* a+ M
  202.     fclose(fp);! p6 \# j# }9 t  b$ ?8 N: t3 e
  203.   }$ k- J. b' P/ o4 {7 V4 h/ h
  204.   return TRUE;# X( _# I7 v6 h" T
  205. }
    & D! s% U1 H6 Z+ a' p/ f
  206. : y1 C3 C! b( T4 w
  207. BOOL CRevAppApp::UpdateLocalVersion(void)  r5 g% y" R; {( T
  208. {
    - `: r( p( T7 \2 `8 ~
  209.   char filename[MAX_PATH];& D! x$ u4 E3 p2 f* O: {. D7 s
  210.   LPUPDATEFILE file,olds;
    ) V+ p5 g) Z) N- {
  211.   std::map<int,CString>::iterator i;/ F/ i, I/ G( b3 n( U+ M. i
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( d0 a& S* W+ Z# y$ T  t
  213.   std::list<CString>::iterator l;9 v; v4 ?' Q& F) `3 l, w  v

  214. 6 r1 {1 p  X# x, r" p8 l
  215.   if(bFirstUpdate). @+ b, M9 p8 w, M$ C/ p# P6 I
  216.   {
    9 H+ ^" ~+ ~- @" P
  217.     dwCurrFile=0;0 ?3 ]% I9 r  a  z
  218.     bFirstUpdate=FALSE;
    9 T2 y2 V# N- o8 m7 f+ v
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 [0 K' o) Y- r. S+ s) K
  220.     {, B, y. z4 k3 r+ Q& B, W; t
  221.       dwTotalFiles=UpdateLocal.size();# B4 w, f" g+ Q. c8 z( G
  222.       dwDownLoaded=0;
    , j: q9 R8 \) y
  223.       bSilentStep=FALSE;' h9 H$ U: E; e+ U% e* J
  224.       bCompressed=TRUE;, @" w- {. _( C+ l) e
  225.       strExtLocal.Empty();5 @4 c' R2 h0 H7 w2 s7 [: \/ k  _
  226.       strFullName=(*i).second;* e- a! W1 J8 I' s* w
  227.       dwProgramState=AP_CONNECT;
    - k5 _- Z  z, h  k) i* F5 @. x
  228.       return TRUE;- A4 }4 L: o7 I7 H4 ~" [, R
  229.     }
    * ?9 k9 c0 O- ], d
  230.   }- x  b4 U! h1 e* E4 y5 s/ S
  231.   else if(bRestartUpdater==FALSE)& H% |- i, v: D% z% u$ m
  232.   {
    4 [; Y* ~' v1 V& M( C( c$ s
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ) B# f2 u) }% g+ K+ i7 i1 k5 Q
  234.     {. c  \1 n7 z$ K
  235.       file=(*p).second;
    3 I" B9 X4 ^. H6 i2 g! k. q
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    $ Z/ u% S6 }5 O" P- m" r
  237.       {
    * E! [9 c3 I, ~  m1 X
  238.         olds=(*p).second;
    : T# @9 \- ]( b% b5 v6 Z) S
  239.         olds->vers=file->vers;+ i+ F' e% \2 l. i
  240.       }. S# A$ Z8 M1 z* b4 X: [' q
  241.       else
    0 w! J) ^& j. B3 i' ]# i/ G: c- \; u
  242.       {+ J- r/ k4 t2 H, o' m" L
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( a3 ?9 w* {* R2 l* E; Y2 O
  244.         memcpy(olds,file,sizeof(UPDATEFILE));/ o+ ^! Q( T+ X, d
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));4 r0 p& C3 t+ E5 s" J7 x
  246.       }
    ) t6 C) t6 B9 i
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");; Y1 J4 v: I& {& Q5 R8 D- h$ m
  248.       sprintf(filename,"(%s)",file->file);6 k- W! K: W5 x2 D8 c# o
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 G# z. a9 I+ A
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }- Y9 f) J- P! D4 t5 m/ O, @
  251.     }
    0 j" a- v9 ]+ \' p) x, ?% @6 r
  252.     dwCurrFile++;! I  V1 M0 F/ G5 P) v+ {: z' S
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). ^( V' I, s8 O
  254.     {
    % I5 G) ^3 s9 ~; ]4 d
  255.       bSilentStep=FALSE;
    # i8 k7 D$ |- V1 w
  256.       bCompressed=TRUE;
    - P3 B4 O% @2 P" u2 m" @3 N
  257.       strExtLocal.Empty();
    # V0 O$ R; N$ Y% p
  258.       strFullName=(*i).second;
    4 Y3 H9 x8 J! p. \
  259.       dwProgramState=AP_CONNECT;
    $ i3 Y: T) C% p
  260.       return TRUE;
    " p+ ?' H! \* A+ ?2 G( v: w/ w
  261.     }- e- C' M8 I' F5 ~; p' H
  262.     if(!bRestartUpdater)
    : B$ O# R* U" b( H$ E+ t7 z
  263.     {, D9 ^6 C% U4 O; }9 w& ^" h( F
  264.       int iCurrSize,iFileSize;$ p* A- C. m, ]) b0 O6 e
  265.       iCurrSize=0;
    4 b& M. m  z7 o2 h+ r
  266.       iFileSize=UpdateList2.size();) h0 d# d* z9 s/ a0 h: Y5 \
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");( Y% Y; j5 j( h, ?1 i8 _
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");% R1 v1 H* J6 q+ _! k+ m) |9 W/ y; y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ; ~0 X/ X& G; S5 c/ G( |3 w& z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % l3 c* A- Y  d% b& E: f5 A
  271.       Fclearf(".\\update.dat");
    # s9 n& O* z- K; l0 T( L
  272.       Fprintf(".\\update.dat","Bloodyf\n");0 S" F/ h5 n, F3 z! p
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++): w4 H! k( \$ M2 x
  274.       {9 }( B( }0 y2 z- @1 W9 d# a
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    9 \# r3 v# ^% ^- L
  276.         {  R# F  u7 }" H7 X
  277.           file=(*p).second;
    5 Z/ N0 t. v, a
  278.           sprintf(filename,"(%s)",file->file);0 D. S9 ]9 J$ U5 f5 z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 O; Q1 K, z& l3 U; b0 v, ?
  280.           iCurrSize++;; e( q; T. \0 h' g2 X
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
      Q* z: b, X& Q% W
  282.         }
    $ {8 l2 f) e! S2 Q
  283.       }
    ; L4 [  R) r" ]
  284.       unlink(".\\update.txt");
    # K2 e) F, G$ J& q+ Y3 o
  285.       unlink(".\\update.tmp");
    $ z6 G0 G% {2 j% h: ^4 r- d' l
  286.       Fclearf(".\\checkversion.dat");* O* O4 i8 e: @/ p+ n
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);& F" \1 \) h! _
  288.       if(UpdateLocal.size())
    1 k3 v- y7 }9 j: A
  289.       {
    ) g. T$ B; g* f# v! Y
  290.         UpdateLocal.clear();1 t: Y. _, r7 Y' `" ]: R; J% q
  291.       }
    8 G* ~* o; |  m
  292.       if(UpdateFile3.size()): q3 u: `2 ^* L/ f+ g( |8 B
  293.       {3 V$ M1 s% I- _" K, i; B
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 a4 R; G! D! ]
  295.         {4 M. Q6 V6 K+ @6 Z. {* H
  296.           file=(*p).second;* U2 O6 x( `2 L
  297.           free(file);1 ~/ T( w9 k! T! e$ @
  298.         }
      B! K) F+ ]4 L4 n  l, z9 z( a
  299.         UpdateFile3.clear();
    * w* C* y5 @3 \9 Q( O
  300.         UpdateList3.clear();
    8 \' V6 g/ h" u$ {4 w' d
  301.       }: h* X6 p# i" Z, F
  302.       if(UpdateFile2.size())
    ! Z  P# l0 q1 y/ d* y4 K* i# D
  303.       {
    3 h; U$ C$ Y; Y' l1 j8 b% |3 x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# i& p0 W: h$ t
  305.         {8 x, ~8 A% ]" ]
  306.           file=(*p).second;* d  U5 G* K2 n6 |6 P/ k
  307.           free(file);
    % |( M" I$ O5 G) U0 @
  308.         }
    " O; a4 h: h! d  Y4 i
  309.         UpdateFile2.clear();
    5 x7 W# p! N. U1 A" r
  310.         UpdateList2.clear();
    # {4 l; K2 ^! e! H) G6 e3 {
  311.       }
    0 D7 w% p4 F  ]  N4 A6 B! O% t) a7 m
  312.       if(UpdateFile1.size())% e$ ]7 E9 g7 t
  313.       {2 u4 V6 O9 g9 L7 O; i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - d* x& X# S2 E' \5 L6 K/ ?: u8 M
  315.         {2 h& L; o9 B; d) [8 p1 H7 H
  316.           file=(*p).second;
    ! g& U  y) K, p0 g7 r1 i# A
  317.           free(file);& e1 p3 X& m; p8 g$ }( i3 {: Q1 O
  318.         }3 `5 b: ~% G+ D# A' H- N! s; T, ?
  319.         UpdateFile1.clear();
    * R3 k( s% D3 p3 l2 i$ ~8 g6 r
  320.         UpdateList1.clear();' r5 o  B6 W, O0 O9 A
  321.       }
    3 ]% c$ T7 x7 ]6 @: ?' y4 H; p
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    3 b0 C( m# ^& u4 y- Z2 V
  323.     }
    ' ?! e- H2 {" B; ?3 Y% K3 s
  324.   }
    3 g% B* J3 {( r1 _2 J! {- c
  325.   return FALSE;
    . e* w( v, F6 ~1 D# J- Z2 K
  326. }! H% _$ V7 \- Y9 ^7 _0 X( g

  327. $ q+ ~3 ~% G; R2 n
  328. void CRevAppApp::ClearAll(void)
    ; _- E1 }7 B2 y
  329. {
    8 g' z3 E$ Q6 Y
  330.   LPUPDATEFILE file;
    2 f! i" U) a+ ~- m& U
  331.   std::map<CString,LPUPDATEFILE>::iterator p;" r# x- n# n- Z- d2 P

  332. & n# h* R7 S. s! `9 X1 G, v3 ?
  333.   if(UpdateLocal.size())) q6 C, s! G0 T6 ]* o; k% J2 k
  334.   {
    5 m8 N; {) v( ?  l
  335.     UpdateLocal.clear();
    2 V7 |# a- ~$ H9 M8 W1 k$ l0 L1 q
  336.   }
    3 j! C) m5 t9 s, ]% Y! z
  337.   if(UpdateFile3.size())
    9 R- J2 y+ k8 J
  338.   {
    8 _3 r& @* }+ G4 K0 a4 T
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * m: s4 b0 H2 S8 c3 J
  340.     {
    ! S+ t# p! w$ E( x
  341.       file=(*p).second;3 f, y+ f  P  q
  342.       free(file);
    & L: _7 H7 l+ o7 |2 W2 z
  343.     }
    0 _: p3 c; G% W/ Z1 @* h
  344.     UpdateFile3.clear();
    ! g0 v" y' u+ r* h" ~) u
  345.     UpdateList3.clear();2 X/ z3 V* M; B' g
  346.   }
    $ _/ G  R8 q5 p. [; |+ o- C  r* `
  347.   if(UpdateFile2.size())* r8 a2 |+ \6 d' V( ]
  348.   {
    / s5 F+ P  W3 L, p4 f
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , w, K3 m+ x, `% |
  350.     {  Q  B- @9 m& j2 j
  351.       file=(*p).second;
    6 O9 R. t& p0 p$ Q
  352.       free(file);
    6 Q6 T& N' s4 ]6 K/ \) \2 a
  353.     }
    ; [+ ^9 r0 g1 i. }
  354.     UpdateFile2.clear();7 i! [2 b5 D1 j5 i* E. K  M* R
  355.     UpdateList2.clear();" v) h) w* y# d; k# X
  356.   }) M5 Y4 H) s+ z
  357.   if(UpdateFile1.size())
    2 s8 ?9 Z" b$ S4 o+ v% |
  358.   {/ c1 G6 X& @$ I5 s! C  v" r
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & R& `. v+ K( |0 Y
  360.     {
      }3 @% i- F  |/ M2 `* \! \
  361.       file=(*p).second;3 A1 P. W* X& z
  362.       free(file);
    . D% Q$ A; B$ V; T
  363.     }
    8 C9 F1 m" y9 D5 n' k' U
  364.     UpdateFile1.clear();- A' f1 O+ {7 t1 J+ d- S! P
  365.     UpdateList1.clear();" @+ j7 V$ f* B" I4 m' e. F! H
  366.   }, _- B6 t* N# z! x7 y% P; X$ |: b
  367. }  
    $ `  z" Y7 c5 s0 L6 w. `1 g
  368.   
    . f9 i. {$ O6 j1 N
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    7 M* J' W: L! ?, a: u
  370. {1 d) Z" |' v2 {$ {( G3 M
  371.   int c;
    ( I6 u& v- y  m: {
  372.   LPUPDATEFILE file1,file2;
    / s* b/ O% z' ?0 _0 D
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;! h9 r6 ]: |& o6 ~
  374.   std::list<CString>::iterator l;+ B" B( m- `) ?

  375. " B7 I) p, n' ?1 ?# Q4 y+ Z
  376.   UpdateLocal.clear();
    ) w1 t* Q) W$ w% ]# ^$ }/ o
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    % \, ^* d2 Y+ S, A; `
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);& b, }  o% x# z. R* h9 X' F9 v
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);+ q9 V4 r" C0 y$ T7 f
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    & \$ p2 z' _/ }
  381.   if(UpdateFile3.size())
    * g7 A, x1 I2 E" C& n' R, X- `# e8 M  G
  382.   {
    9 V1 m& g. ^! f  n. X6 @
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)" V# l' K" y# V$ K2 y+ B
  384.     {3 I6 O) O1 o# e: L: N
  385.       file2=(LPUPDATEFILE)(*i).second;
    % Z* b/ z! n% C
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    . B+ |8 A8 \/ g5 R  f, C4 ?/ |6 S
  387.       {$ G6 h7 o! J9 W1 g1 h
  388.         file1=(LPUPDATEFILE)(*p).second;
    ' C: S( Y1 r4 Z8 A7 I
  389.         file1->vers=file2->vers;
    9 j- i- S; y1 o$ _# ]2 E
  390.       }
    ' ]$ {# d" O: ?4 R: v) h- C$ C" Y
  391.       else+ m, O; Z4 q) C% W, }. F
  392.       {- t6 i$ d2 r# q; V% n* H
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " U" f+ Z3 \: {6 u$ Y  d
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));: }0 c) \+ N* K4 v+ j
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ! y) t/ A+ U+ F0 p0 j' Z1 b
  396.       }
    ' |1 B) [- k) P# _3 M9 Z  k/ ^
  397.     }
    0 x6 p5 i5 p2 g9 R' S" ?4 [2 d
  398.   }7 X% D4 Q/ ~' |1 n& ?; L
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 h2 b, x4 e  T4 g/ W! t- F7 B& u
  400.   {
    7 a# {8 o& S% v/ h( n, B) W
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())$ e4 H. p# P0 a; d" Z! d% A2 s$ b. I
  402.     {/ x& W& a4 Z* n3 T! L) G% Y
  403.       file2=(LPUPDATEFILE)(*i).second;
    2 q5 n. j& n" l% n' l- D
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " y% V5 V6 h8 k: I
  405.       {
    " s5 z$ |# {8 k
  406.         file1=(LPUPDATEFILE)(*p).second;
    ) \5 i. m: u) _" u8 C, D8 F& l; ^4 ]
  407.         if(file1->vers!=file2->vers)
    $ v; m) S. t$ `8 ~
  408.         {
    5 R5 a- R* U) }4 r( x) M
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
      [5 A% u1 m! l, a* T
  410.           c++;6 c; A) L% a8 S
  411.         }) X* N. W# i! l1 I3 k2 [% ^/ t
  412.       }& \4 q" a) c  [
  413.       else
    ' L! V7 ?7 }  `% X7 |* V3 ]/ |
  414.       {
    5 e) s5 o  Z8 h% {& k$ D
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 t1 v' Y+ c& i
  416.         c++;
    , D- C3 q5 \& E! ^3 H
  417.       }
    / e, ]9 K$ O( }6 e
  418.     }- G! A! V0 |% Z6 R5 U
  419.   }
    ; t& k  K$ W) ?( p9 Q3 M
  420.   unlink(".\\DownLoad\\update.txt");
    # r4 f; X6 I  D! |6 n7 e6 p
  421.   if(UpdateLocal.size()) return TRUE;- |6 S4 Q4 p4 O' @
  422.   else                   return FALSE;
    5 g2 L8 B" S2 |% R
  423. }
    ! B% \" y1 m- o6 Y
  424. ' ^! T# O' A, ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    3 F, A; |) q+ w) C% ?
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"7 h- z6 `0 h% J$ R( v

  427. 8 w$ I- Z* Q; f7 f# E  W$ S

  428. " T1 Y( @4 ]& @) [$ q2 W
  429. 9 q9 j5 W6 E4 y; p; \
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    0 Q% t* q. N, A. D5 P, ]
  431. {
    ( ?, p. L' q0 ^  Q3 `# X( K# x4 D
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;: i( M" x* L1 b  N9 `3 M0 C
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # D( p9 r! t* M. |! m( `/ h5 j
  434.   {
    " C8 B7 y* V! d) M- `
  435.     char szLanguage[50];% ^0 X2 O/ y) i8 p
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . N: M6 I1 m# }0 s
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 e$ g: ^# S; e+ p( m2 e. t
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' L! j5 F1 K7 H3 X6 f
  439.     else                                   m_iLanguage=ENGLISH;4 f9 i" z7 m8 g/ t. u' Y, y
  440.     char szRegister[100];0 s5 l" y1 U, |+ o6 i3 }
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : ]7 y4 @2 C, i  l
  442.     strRegsName=szRegister;
    ' s+ U0 u& B( S/ t9 \$ d! H9 u- Y3 o
  443.     char szPatchURL[100];
    - b1 j/ t' L7 {# P
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 q2 o) ?' j" X1 @3 c, f" |
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ o; ?- v0 C9 N5 ~: O
  446.   }
    - E1 C9 V  g  G) I9 m
  447.   else4 T* L& O& p8 B; m. G
  448.   {
    ) p' b6 U& o: r: W
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);+ }# H/ q/ e: D' E3 R: k4 [
  450.     strRegsName=DEFAULT_REG_URL;
    + Z* C7 ~! }- J2 M2 E  H2 V
  451.   }
    - N" o$ ~9 R% b, b6 ?, H
  452.   if(GetFileAttributes("hosts.ini")!=-1)+ ]! V4 ^) `4 k' {- s1 A
  453.   {
    3 B5 w1 r2 }2 |" e2 `8 c' I
  454.     char szIP[50];
    : G: s* t; J0 @, j
  455.     char szDIR[300];
    ! i, i1 {" S8 f* R9 g3 A: ^* b
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    + R- W' [0 |. \; V8 e( w- X# b  s
  457.     {
    , g, U# ]0 {1 k" X( J4 r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");5 |3 ]- c' n+ f& L- I5 n
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");8 ^% @8 a5 G5 h3 ]$ m1 c
  460.       strHostName=szIP;
    3 S6 p3 m1 z: [3 x* e( i  X: b6 S* a6 A
  461.       strHostPath.Format("/%s",szDIR);
    6 v, p: w/ e+ b& ]
  462.     }
    # a. g, Y. W$ ?# P4 e
  463.     else: f! l& |# w" T! c6 X- @8 s
  464.     {
    - S3 v: M, ?8 x4 ~. [6 x5 L
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* [* `$ U$ m! _9 k+ d0 I9 S- t
  466.       {: y# X6 a+ ~0 g0 B5 b/ `  r% Y
  467.         char szLanguage[50];- a/ ^% O1 }4 H3 Z! ]4 l% r7 |9 n
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 l) T4 Y: y' K9 X/ a
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 b  Y. ]5 P) Q8 I! r6 O4 X
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      N+ a+ N; J5 Z
  471.         else                                   m_iLanguage=ENGLISH;$ R; K- L# p- L  Y
  472.         char szRegister[100];
    + ~9 O' P% N! e: Q' Z; K
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # c0 \( T( Q- s9 y. q- e
  474.         strRegsName=szRegister;4 L% y5 w- A  j7 _; h
  475.         char szPatchURL[100];
    1 T8 Q9 b4 r- x% d
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 S- a6 b5 c$ y' O8 _6 V$ V
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);7 q/ m3 D/ C  ?
  478.       }5 R, a1 }) k+ \  p
  479.       else
    6 G" h% C' X2 P  l6 m/ a8 }
  480.       {
    * T( P) t* N6 V% o' ]* a
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ g9 P- X$ m$ I; [2 o$ ]
  482.         strRegsName=DEFAULT_REG_URL;+ w# {$ o; V% _3 ?/ }
  483.       }
    . F! L. ^7 J# F- K( h- f7 ]/ p, e
  484.     }& E! i0 @" e) r/ k0 W
  485.   }
    ) Z$ }4 Q; H- `0 }0 g" c1 q4 W# a
  486.   return true;8 ~& f$ m! f" T! @8 e
  487. }
    : l& x% Q% v' [* P

  488. ) ?8 K% D5 e4 |6 ^
  489. #include ".\ZLib\unzip.h"8 B" b2 e9 c8 K% M: @# R+ M$ H# c
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);# }; v6 T3 d$ V3 d# k8 `
  491. /////////////////////////////////////////////////////////////////////////////
    5 [$ u# b9 R- i* z1 s: G1 J
  492. // CRevAppApp initialization
    / d, f% M, [+ p
  493. 5 c* G+ h, j6 d6 m+ m
  494. BOOL CRevAppApp::InitInstance()" r9 C- P2 J( C9 h# Q1 H) x% T
  495. {
    ( w( |4 M; R( Y4 J3 ^
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];- s# i2 Y* i8 a, Q1 l
  497. / r$ o2 F  @, e' z5 _1 Z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ( J  l! G" M$ M4 O" |
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))6 g+ P. V5 z! K% e' s6 ~) C
  500.   {5 A! d' a" w6 y7 [# i5 s5 ^
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ! q& Z' K6 \1 Z6 |9 p& t( P* h
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 d2 g: N7 _6 g# P/ ~- [
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))6 j6 _6 b  {6 |- d2 T
  504.     {2 f3 S' k% h: K7 z
  505.       strcpy(szPath,szPathTarget);! b8 t  d! ~# `- Z( |. ?
  506.       SetCurrentDirectory(szPath);) K9 V0 B$ {" [+ p1 F' b$ ]/ Q7 ]
  507.     }
    : O3 {1 O2 d  z4 o$ Y7 C' G
  508.   }
      L% M1 y9 d6 w: a
  509. #ifdef _DEBUG
    6 d: h5 z6 M4 P$ T0 s
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % ]* b# M/ R2 N( C
  511. #else7 \2 J5 w9 k4 a5 o8 o5 S
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - M$ K9 d5 E; W  |6 v& U
  513. #endif
      U$ C) X0 B6 h5 u( O- c
  514.   {3 ]% q4 j( t4 H) {+ l- [) t
  515.     char tempFileName[MAX_PATH];
    . o$ l: C  V: s! T& N1 R0 h$ v5 K5 s
  516.     strcpy(tempFileName,szPathSource);' W2 D8 V! ?% z6 t! q
  517.     tempFileName[strlen(szPathSource)-12]=0;6 c( N( q/ V2 e1 z; g
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    * S+ b. _8 W1 z+ \$ {
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    1 I  e) {* j6 u: Q8 M; r4 ~8 H
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ' x4 A) G6 n7 U
  521.     return TRUE;
    : w$ ~3 l  N  x3 e/ p4 h3 e
  522.   }
    5 a0 k3 ^6 r" P8 `0 W! B; l. z( G3 B
  523.   // Nuke 0118: Delete run.exe
    3 O8 K3 y- R; X4 i0 J5 l
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );! D& X& E* \; b3 O
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");8 Q8 e' w5 q2 C8 i& Z- l$ V* @* N
  526.   if(!ReadCfgFile("Config.ini"))% Q/ j4 h- @4 v4 E- x/ y
  527.   {
    " t0 |% t4 V/ X: A) F3 K1 i
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);+ P5 Q9 y7 q5 ?) W$ ]
  529.     return TRUE;' U- _) K5 x& O( _& G/ A
  530.   }
    , g- Y( I( o; S8 U
  531.   HANDLE mutex;; L+ t% l) h, s2 _: t
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")); f, c) W2 [1 U, i! ]! G
  533.   {- X2 A' ^3 c$ W1 P2 {. g
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)" {+ n% d6 C1 n
  535.     {
    1 ?3 o" ]- T0 \
  536.       CloseHandle(mutex);
    ( M' g0 y$ f( P
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    5 w+ @* H6 v4 Y, a" F0 V
  538.       return TRUE;. {9 i9 |# g& _% ]# l" K) ^
  539.     }. _! h! v5 Z7 ^  ~2 Z' j# ~
  540.   }  0 E# S, `' ]. M' Q6 t
  541.   CloseHandle(mutex);
    & S1 \* Q  U6 P3 m4 N1 H- z5 O
  542. % k4 K! X$ Z  O1 q5 q  R# A9 ]+ I0 w
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    % @8 @1 f( M5 X) W# |1 `7 E4 f

  544. 3 O; n4 n# a* S( x+ Z/ W
  545.         AfxEnableControlContainer();" b# H' G0 Q  }$ \, _
  546. 4 ^5 ]# {" |6 J/ c$ M
  547.   bCanUpdate=FALSE;1 x( i: H; I9 M, \3 ^2 v+ g
  548.   dwStartUpSteps=1;
    ) U! i0 V) O5 a: t) P: d
  549.   dwProgramState=AP_NOTHING;- h- n+ G3 b; C* S2 a3 q
  550. % Q0 I! s1 I! X% n: y( r
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);7 ^1 ]& M5 n6 K7 N
  552. ; [- i# O- e; L2 K
  553.         // Standard initialization
    " r; i# H2 W  K$ X- T& J8 f6 y5 N
  554.         // If you are not using these features and wish to reduce the size; d" ]. p; {7 y
  555.         //  of your final executable, you should remove from the following
    / h# E( y7 V: w7 F. R: S
  556.         //  the specific initialization routines you do not need.0 J( O7 I( F0 j3 Q1 M
  557. 8 q) k0 ?$ T: ]7 P( F; v( g! m0 ~
  558. #ifdef _AFXDLL
    ; u3 B2 |6 B: |2 X) |
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' ~$ k! _% r5 S, \9 x
  560. #else
    : f% W0 C7 i% t# h6 C  t% I
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ h1 Y9 ], J: X. v/ z" I5 z& G
  562. #endif
    " Z4 q" v9 M2 Y& j2 C; {

  563. # p! l" U2 j. u' D- q
  564.   dlg=new CRevAppDlg;7 M/ j8 C/ h9 o! k; l
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 f! q% U- e. i% I# \
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    0 T  B1 A6 z8 h/ M! R: M; Z4 z
  567.   m_pMainWnd=dlg;! Q% U) r8 s. [% z9 ~' P

  568. : n6 V! H1 k1 t) n( l5 f6 h# O( ]$ K
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
      G$ d# a. F" O' y& I6 O$ Y4 z

  570. 4 |  F" g' W- v" O& b  ^
  571. //  GdiplusStartupInput gdiplusStartupInput;
    , T* s8 j& F! f  h1 s9 [
  572. //  ULONG_PTR gdiplusToken;* Q2 v; o7 d( f. ]) L
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);) j" B# U# R8 [8 L! c9 P3 J/ c
  574. ! |1 I" L; M4 Z5 F) s6 D
  575. //        CRevAppDlg dlg;
    # f1 Y4 y! Z: ]0 k% P0 O
  576. //        int nResponse = dlg.DoModal();
    ; X# Z; r5 T$ F% o- j8 b& t
  577. //        if (nResponse == IDOK)9 C/ U- d4 O+ P8 l# |, ~
  578. //        {
    0 Z/ i9 T2 ~% b! r3 z, S/ C
  579. //                // TODO: Place code here to handle when the dialog is
    . A6 t( r% g: x3 q0 [
  580. //                //  dismissed with OK9 v' h* d4 y( N: [% m
  581. //        }* ^5 p7 V8 y1 [* z$ I" c
  582. //        else if (nResponse == IDCANCEL)3 d1 k5 G) I/ j9 B# |( ?
  583. //        {/ R6 E- t5 i; i+ l
  584. //                // TODO: Place code here to handle when the dialog is
    ( u" s$ q: f6 H2 V4 |. q9 l" u! A
  585. //                //  dismissed with Cancel5 F2 d, H! d* t& n
  586. //        }1 ^: p# ]+ g( a- F8 d

  587. ! x4 X, A& ^% i" w
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    3 u' r' a0 |0 q/ y  _5 v
  589.         //  application, rather than start the application's message pump.8 A7 j1 o8 u3 O
  590.         return TRUE;3 Y; E9 ?; Y- y( m# k  h4 H( R
  591. }# t6 u1 s$ z# q- W$ L) L* w! X1 P
  592. ; ~$ j$ V6 g  I, A& n# `" H7 ^
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 L. x* r9 J. I1 l0 b1 L/ U  r
  594. {
    & {9 F$ F: I. C2 f: Y3 u. u! t
  595.   int i;" T5 b5 ?* |( n4 Y: X& ^
  596.   char *szRet;
    $ d( }6 D! r. A  a7 U/ [! v
  597. # t3 W$ E4 W4 }+ i
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    3 o9 v' t9 T) u+ q1 ?* [$ X1 `( J
  599.   if(sztoken)" C+ L: A) m* d4 E- N- Q6 ]
  600.   {, l/ p; N. O9 Z; ?+ F8 j
  601.     szRet=&sztoken[itoken];
    & d; ^- [3 d% |" ^3 |; Y
  602.     while(sztoken[itoken]), _$ Y) d6 A" a
  603.     {
      ^: U) b$ m1 S3 `6 `4 n" l0 [9 Y
  604.       for(i=0;i<(int)strlen(token);i++)
    ) h: l, `5 O) B0 D  a9 O) ]5 z, @. X
  605.       {  I4 \9 e# G* A  \4 i
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])1 f. x- Q( E% @- }* ?7 p! M
  607.         {% q- K" J- I8 J0 |- Q
  608.           sztoken[itoken++]=0;
    6 ^, X& f/ p8 ?- Q: g' b: U2 o
  609.           sztoken[itoken++]=0;
    : `+ _* e, ?$ J  N
  610.           return szRet;
    ) \0 u% H2 J. h( l( n6 c' z6 q
  611.         }
    3 y; i. r$ A7 ]
  612.       }+ l2 @2 H" T8 ]. h2 y
  613.       itoken++;
    & e& h9 H* @7 s! y( T) }" V
  614.     }" @9 t- ^+ i5 {
  615.   }+ b5 I' P0 v) u/ _
  616.   return NULL;3 C: J7 F/ C& {2 }% M0 F- d
  617. }
    6 |! `3 D1 c" S7 V- E
  618. / D4 W( L$ f) M; g! B2 L: D6 o/ E4 \
  619. void ProcessProc(long Total,long Current)
    # p- `/ F7 E/ a3 I% z5 Q4 }2 Y! O
  620. {( G# O7 O4 d4 z& ]
  621.         MSG msg;& Y% C; ~1 ?2 E+ M. C
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " p, d* T+ |9 v; @
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ! f4 v6 d! x* _6 ^/ O& R
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))0 g% r7 C! ^. ^8 v
  625.         {; N. a; S+ x, E
  626.                 if(!GetMessage(&msg,NULL,0,0))
    3 X7 t" g0 c4 q! f2 P! Y
  627.                 {
    7 d2 J+ J; M0 w8 ?- H3 ]
  628.                         return;
    2 c6 F9 v" J8 d
  629.                 }
    + i4 [1 H: k4 m: Q8 h/ r
  630.                 TranslateMessage(&msg);
    ; ?! n& {+ E$ k2 w* q+ U
  631.                 DispatchMessage(&msg);+ N. }# O) \0 B( O3 d. ~6 G
  632.         }        . }. @5 n0 X  Z6 q2 p- f7 B
  633. }
    & t$ g* E- e6 w8 J* Q

  634. ( C# n; m2 }9 s% Q( O
  635. BOOL bFirstChar=TRUE;9 ?+ |5 M2 j5 g  S7 z. K
  636. . x3 {7 A9 z, M+ N, z% i( z, U) O7 F
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    5 O% {; C) U+ Q5 E5 H8 t1 N
  638. {
    $ h. M, a1 i4 c
  639.         // TODO: Add your specialized code here and/or call the base class
    " U* c$ r' ^; A, E5 M
  640.   switch(dwProgramState)4 H* C& ]3 h$ S5 H9 G- D$ N
  641.   {1 e+ x8 I5 j) ~$ Z' x8 K
  642.   case AP_NOTHING:
    ; t  Y( ^6 l) F# X) S& q7 c
  643.     switch(dwStartUpSteps)5 \& G7 y& ~- \
  644.     {7 k, S# S  I* w) M4 I
  645.     case 1:
    6 ~8 q6 f) D9 b6 I0 T$ I8 O
  646.       {
    4 I5 }/ a: }1 s9 [
  647.         int i;
    ! _$ l* I! W1 ]2 R' A( x5 O
  648.         CDC *pCDC=dlg->GetDC();  o, S0 e# X, Q: L6 n. D$ x
  649.         HDC hdcwnd=pCDC->m_hDC;1 i3 F4 A$ y( g
  650. //        Graphics graphics(hdcwnd);, A5 ]5 }5 ?9 v2 O0 _* e/ M) U
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");8 X+ I( L4 u* {7 ]9 }, i
  652. //        INT iWidth=bitmap.GetWidth();
    # R* Q: t. z" g7 m
  653. //        INT iHeight=bitmap.GetHeight();
      ^& i- t+ o1 j
  654. //        Color color,colorTemp;
    : o" u% e5 ~3 \2 }7 X( a
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)2 A0 H  v" o4 V3 m
  656. //        {
    8 S8 s% E0 \1 ~4 J/ e$ @; d4 A
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    0 G1 |$ x) @: l, D. e: T
  658. //          {
    7 o7 i6 j. ]& [/ T. F" H
  659. //            bitmap.GetPixel(iColumn,iRow,&color);4 B+ Z5 I, W, {% t- q7 i4 i
  660. //            colorTemp.SetValue(color.MakeARGB(* U  E) |! g4 ~! [4 N
  661. //              (BYTE)(255*iColumn/iWidth),
    ! m' y+ x5 }1 F, h
  662. //              color.GetRed(),5 {& p* {( g, Y9 c& k
  663. //              color.GetGreen(),* R' L8 ^0 P0 y8 y: u- e- S0 V3 d
  664. //              color.GetBlue()));+ J9 |  l1 t* Z* {: H* j
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    4 K" D+ ^3 |7 x9 S# u
  666. //          }$ Z( {6 l$ s: X8 D
  667. //        }
    . N/ Z1 P. [9 t! f1 ^5 ]* e; Z
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);0 F( s! ], [; h8 s3 Q2 t- O6 h& V  g4 V
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 H7 s4 D0 q' B5 j$ z$ e+ d+ c- i
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");2 o  v7 `! S! i3 u5 P" X
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & x2 p5 v7 D$ W  s% [
  672.         for(i=0;i<240;i+=8)
    - w) E9 |3 O5 B, U
  673.         {
    8 z% I- s7 |2 I
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);3 O! Q$ D6 \6 R2 T% C
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / o$ d$ Y' x& m0 X! ]; J% ^
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);1 @1 i8 i  S4 O3 r$ ]6 s& N
  677.           Sleep(33);
    1 }6 @4 S! r0 E% a# ^  W7 p2 M
  678.         }) k  d3 G1 ^3 I0 q8 Z* [
  679.         Sleep(1000);6 T: v( U& @6 g; \$ p
  680.         for(i=240;i>0;i-=8)7 j; ?, z9 A9 N3 f0 L# T
  681.         {
    + z1 T+ g& n7 F" H, d1 i9 n1 t
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & K3 ~- z/ @* }& e, E" a+ k
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 }6 [8 ?6 ?+ {: _1 D& X( ~& W
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / b" \& i& |% m$ Z
  685.           Sleep(33);
    : c! _- t7 a+ K7 O+ H( X1 y
  686.         }  ]$ G8 p, v, ~3 T' h' k
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    5 J9 c& {, K- x, J$ ?
  688.         dlg->ReleaseDC(pCDC);: S, z/ F) ~1 |9 C$ c* Q) G
  689.         DeleteDC(hdctar);
    " e$ Z) F: v$ q& G0 v% u) s
  690.         DeleteDC(hdcsrc);
    1 o( C, v8 r; ~4 T: n
  691.         DeleteDC(hdcorg);
    / H' k$ B- g0 C# X& G+ f+ D
  692.       }
    ; w5 m0 H! x5 p; C& w) i! e3 E
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);% r2 y7 G+ l5 j
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");6 P' [1 h9 M1 u/ s( l7 Z$ w+ |
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");. _2 c" g' i( S
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- n7 \7 Q$ h7 \* C# k. ^
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 F( b5 ^1 b4 l0 m: w0 t6 }, U' [
  698.       if(!Dn.Connected())- W  e5 k1 B: ^+ ~: F8 v
  699.       {
    - u+ K+ i: \, J- a
  700.         dwTotalFiles=1;
    1 A2 e" s+ Z. F
  701.         dwDownLoaded=0;( k- D; R8 X1 y' g* l4 n
  702.         bSilentStep=TRUE;' ^- \- j' o( }. Y; W! c- y
  703.         bCompressed=FALSE;5 [' U, {) l5 Y, {$ y# U
  704.         strExtLocal.Empty();2 q( P5 Q; j% A2 s6 T$ N* z4 D  ^
  705.         strFullName="readme.txt";2 Z3 ]: g: \" w
  706.         dwProgramState=AP_CONNECT;
    6 J+ m5 n! E) m3 C! ?5 @
  707.       }6 S7 V; h4 c, @3 b& q8 I0 a
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    6 q1 `0 r( }& i: V& k; w  q. g
  709.       dwStartUpSteps=2;
    ) e7 D% [; P# J4 _3 H& W: w
  710.       break;
    . {5 h) V6 ]4 L* J
  711.     case 2:
    $ i. K5 ~' s( O8 X
  712.       {) A/ A2 F0 W. t* R
  713.         int iEOF;- Y9 ^* w, H. a% \5 {* x  \: a# V
  714.         FILE *fp;
    0 k8 v( w: q* E- H+ o# \
  715.         char szString[512];$ G+ a) }: f- P7 P# ~
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ( h9 e! B' r- Y! T, _
  717.         if(fp)
    4 w% A' o' P! {* |# H, z4 l% @/ F5 }
  718.         {
    ; e9 y% R0 j& v4 z/ W
  719.           do
    7 Z& v+ T& {; a" F2 X- X
  720.           {
    ' E, E1 o- V8 n/ t* E
  721.             iEOF=fscanf(fp,"%s",szString);) f. m- X* w  @9 l; b3 N# W/ {
  722.             if(strlen(szString))
    3 p, k" P; C" N
  723.             {
    * O2 {2 o+ f6 ?5 U
  724.               if(bFirstChar)2 C& W4 h9 n) L; h2 w2 O
  725.               {
    ' g0 Q5 L9 L, V; ~4 C; ^# Z
  726.                 bFirstChar=FALSE;; j1 {8 y3 F1 s
  727.                 bConnectIsBig5=FALSE;3 o: v' e/ |9 G
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ( [& O7 b7 c* x3 X% {# r
  729.               }
    6 d/ D, `% ], y" k3 F7 }9 J* o
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));, F* [/ }$ Z5 Z; c5 [- k/ {
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    2 j! s8 ~" L; Y2 {# w
  732.               dlg->m_ListText.AddString(szString);' i! ]6 t) E% X" V0 o
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & E& R; I* L# x# s! F/ s% y
  734.               *szString=0;
    & D! l  |5 @: A1 v" P3 L/ d9 X' g
  735.             }
    7 k, W# D" l& K* V
  736.           } while(iEOF!=EOF);
    - [5 L, j8 v2 P
  737.           fclose(fp);3 N' B: J! @. i. D. t8 J2 K
  738.           unlink(".\\DownLoad\\readme.txt");3 `' r* |: E6 x  i/ N* o. k
  739.           dwStartUpSteps=3;- Q4 I7 O/ q5 o% P6 ?( x$ p9 \
  740.         }
    % H4 ]. J$ i) S% v2 b
  741.       }4 J& s7 i% R+ E* u# m- s
  742.       break;- E$ T9 K$ W7 R. D3 U
  743.     case 3:. {% [; k+ c. m+ E
  744.       if(!Dn.Connected())$ b* N+ h0 p: e( c  S
  745.       {. v( m9 h9 f+ @: s3 x$ [
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    3 @, Y; S1 w6 B2 t- S: H
  747.         dwTotalFiles=1;
    1 S7 `5 c, k! @* p
  748.         dwDownLoaded=0;, F4 N; @  m2 |+ _/ T
  749.         bSilentStep=TRUE;
    ! p2 o3 B% M% ]( A# z4 A2 n  l
  750.         bCompressed=FALSE;
    ) @% L) k( _2 }$ |
  751.         strExtLocal.Empty();+ X; J( Y6 P2 X
  752.         strFullName="checkversion.txt";) |' ~: W: ~" S
  753.         dwProgramState=AP_CONNECT;
    % g' v2 E9 n" E; l3 o4 g8 s3 ^+ e
  754.       }
    7 t8 l; {9 K  W
  755.       dwStartUpSteps=4;$ }2 \1 O0 g" N* B4 Z. R4 O
  756.       break;/ k, B" C6 s/ q+ B- v- n
  757.     case 4:
    5 s) X8 A$ y' k6 `: `
  758.       {; ]( @2 E$ Q& O4 S4 O5 r
  759.         FILE *fp;
    6 W. L1 [$ Y% X" u* Z1 A' T
  760.         char szString1[128];9 Q' E  S/ J3 T% F- p  e5 H
  761.         char szString2[128];
    5 L4 c7 @& a6 X3 I7 \4 G% n9 g
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    6 N1 ?% g, [) f/ r6 a& }6 S
  763.         if(fp)* O& x3 N# L5 i. ^% x
  764.         {
    # W' C/ |+ |% u$ X  h
  765.           fscanf(fp,"%s",szString1);
    & K' N5 {# ^$ [5 w7 A0 i5 g
  766.           fclose(fp);0 B8 P' i9 K. |! e
  767.           fCheckVersion=atof(szString1);/ y& o9 q4 ~7 n0 i
  768.           fp=fopen(".\\checkversion.dat","r");
    : M) H& H/ j; r3 ~
  769.           if(fp)
    * ^4 Q. ^# l( @6 F
  770.           {$ |" z+ w4 v6 ^, a7 K
  771.             fscanf(fp,"%s",szString2);9 a, _- U3 Z, c1 \/ m9 Q' O
  772.             fclose(fp);
    1 I4 h7 V; g4 ?
  773.             if(atof(szString1)!=atof(szString2))% C7 p) u; j( `( `# }( v0 F. E
  774.             {3 R; C- F( c6 l! E# d4 B5 [1 @
  775.               if(!Dn.Connected()), o/ y8 ^1 N) k9 [1 y0 T$ J9 V1 C
  776.               {) Y. E9 b# v6 J0 j
  777.                 bFirstUpdate=TRUE;
    5 L% f( _2 I0 }) W$ q8 x) R( \
  778.                 dwTotalFiles=1;8 g+ |% a9 a; g: b: @6 p
  779.                 dwDownLoaded=0;
    & r- [& V% B- b' C, t9 Q4 ~2 U
  780.                 bSilentStep=FALSE;
    / p0 \: X5 {2 D5 V" b: k: {0 |# P
  781.                 bCompressed=TRUE;
    " W. r' }  T- j. o5 m; T, a4 P
  782.                 strExtLocal=".\\DownLoad\";5 D$ v5 T5 Z3 z0 f/ B1 u
  783.                 strFullName="update.txt";6 d1 V" i. R9 t3 k0 t+ D0 w9 ?% c! P
  784.                 dwProgramState=AP_CONNECT;
    6 X' p9 `2 d! ~, D- `3 \
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% }3 D8 ]" o7 c" U/ D9 E. S
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 w) u; O  `, W4 L5 U
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 Y3 c8 J3 r8 y; d2 P

  788. : k- d7 d" q, W( d4 j% d6 F
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 c# n4 i& P* d* D9 o
  790.                 unlink(".\\DownLoad\\checkversion.txt");
      ]5 {, b1 R, Z1 r3 M6 }, T* R
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    2 G) y6 p8 N6 N. ?
  792.                 {" W4 |; N+ I" u8 n9 q& Y  O
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");/ _  l" h+ {  i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");7 t! Y7 b% C$ J
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    6 O5 A" G9 P3 g. Q) L5 s$ V
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! m8 G+ S1 w% x; u8 l; d
  797. 7 f, h3 `4 V' ~: N7 i, i; C/ m
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 L* L1 }# W% w
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");+ W9 {; R1 l; L8 }4 Z% H
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");# S( B* T% B8 K' W0 f
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 ~# V: u! `$ X
  802.                 }
    ' q. d9 P/ o9 N9 ?
  803.                 dwStartUpSteps=5;
    8 _# d6 n2 I  M+ C2 [" j
  804.               }
    , R2 N& y: o- v2 V  A/ O
  805.             }" r& Q1 ~- _$ C  A0 f
  806.             else
    0 h: `/ r) N5 v' D
  807.             {
    9 s' q% n6 W* Q  j/ D+ k4 S
  808.               unlink(".\\DownLoad\\checkversion.txt");
    0 W& W. y# v, T2 \. C( G& _
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    % f4 v6 a8 w9 Z  R* E7 B) {
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : S+ e. S0 X0 \0 d0 @
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");5 K9 c0 I0 Y6 C. Z& {2 d- B
  812. + T* J) p" l+ ^. \; T4 b5 ?* [$ ~
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. R9 ]0 f. }% S2 b2 ?
  814.               dwStartUpSteps=99;
    9 E& `6 f% J% G4 I( d& O5 S
  815.               bFinishUpdated=TRUE;6 V3 J3 X/ S& m  |+ c. q/ |# c- U
  816.               bCanUpdate=TRUE;* l. U: A6 Z* R0 ^* m0 D
  817.             }! Z3 Y! x2 y1 i9 H) q# Y, I/ r
  818.           }
    & A" D) L+ I2 M) u- _
  819.           else
    7 N6 N  s/ Z. L: \) F) G" J
  820.           {
    6 q& U# \- X' i2 Y
  821.             if(!Dn.Connected())4 t$ G. h: U$ ~+ d" F% z5 O
  822.             {
    # v+ e+ g. N2 w! f1 ]$ D+ F
  823.               bFirstUpdate=TRUE;' X2 ^9 U8 n! R' K7 {
  824.               dwTotalFiles=1;3 {. f9 f. j" s
  825.               dwDownLoaded=0;; o% x2 r9 L% j
  826.               bSilentStep=FALSE;
    ' ^4 P( B( Z& A! H6 H* m
  827.               bCompressed=TRUE;
    ! m0 B& O4 ?+ Z. h% ?
  828.               strExtLocal=".\\DownLoad\";8 ?9 F8 h" y3 I
  829.               strFullName="update.txt";; ^, N6 E) W9 C7 j) e! r
  830.               dwProgramState=AP_CONNECT;
      q) @# A, u0 s5 K8 j
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- [* f" R* }1 x4 p8 V7 u# i
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");+ ?  N4 Y& Z) }6 H& N! s# ]% n, E8 Y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 s. S$ _  R7 P% I: n! Z: R
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 _: [9 N3 {% J6 u7 F  j
  835.               unlink(".\\DownLoad\\checkversion.txt");
    * w" B- N: i; I# W
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)1 U- C, A) w7 Q/ V3 b  G) m
  837.               {
    0 s% U  M" y1 ]6 u
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    , j  X# x% d  G; o: l# u
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    8 t) b. }7 ~8 j3 d: R$ u" N+ Z: F2 h
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");  R: w. R4 X) G4 i2 p* z( F/ w* ^
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 a. l1 k2 F5 W$ F% L9 u& [
  842.                 : X' p2 w; H* p# X
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) Q0 ~% z) }' {
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 z! R- j, c6 ]5 q( s2 C
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");: \) E8 Q& q5 G0 P8 @3 m1 j
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 Q& U: x" R5 t& Q( U- A/ {! \
  847.               }! M6 ?9 _) ]" C  i
  848.               dwStartUpSteps=5;* O% G5 Z; W! s) ]1 G
  849.             }
    2 k! N% ?" l2 |6 L
  850.           }, T+ d( `, \/ T" P/ w
  851.         }/ y, [+ Y! v, x
  852.         else+ @( }) H' O8 X5 x, v
  853.         {
    % d: a& u8 _5 a! z
  854.           dwStartUpSteps=3;1 t: G' s  S) f5 U/ j% V
  855.         }! E% g) H3 ~: N! S" m# T4 g9 R+ l
  856.       }
    0 A1 _* d; `8 f) o% t/ V
  857.       break;- L) i% d6 J6 W" y
  858.     case 5:' r% Z! a+ Z+ P7 \
  859.       {+ ]  P! V6 G6 E2 s& _
  860.         if(GetFileAttributes("Wsa.zip" )!=-1); u1 u: F/ V$ i- D5 X. p6 c  D
  861.         {% F$ d8 O! T1 r( n$ Q3 u( [9 d% ~) E4 F
  862.           int opt_overwrite=1;* o+ y7 {2 f: E+ B7 w
  863.           int opt_do_extract_withoutpath=0;! r  m% h' m* W" t& \/ k$ r7 g4 G
  864.           unzFile uf=NULL;9 o* W6 b7 @8 E
  865. $ c( J$ F+ x4 L! \$ ~
  866.           uf=unzOpen("Wsa.zip");: c! T# T9 f/ |
  867.           if(uf)2 Z# g. d' a! _0 M8 T* V" v
  868.           {
    $ o) i$ M- b# D, P/ `$ z
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);3 ]6 }! s* B+ E. ~/ F
  870.             unzClose(uf);/ b9 t/ m% ]/ d( I4 Q
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    9 G: @; m* l9 Y0 _
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
      C# {; x  G8 q" g
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    : |7 J5 v1 w, t, p9 @9 z! x
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 d* X# c' _0 s  {* X+ {. i
  875.           }
    ; q+ c  k9 G3 _: J6 i/ M
  876.           DeleteFile("Wsa.zip" );
    ; @" s. s1 S: R1 Z
  877.         }" C3 \9 C6 A. G

  878. + f  X) }  T. M. Y1 Q
  879.         if(CheckLocalVersion())
    . A+ K) ^7 W1 v* S/ t
  880.         {) E: B- a4 ^0 o% m, X$ i9 [5 i
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    6 S/ r/ h2 o, V& n
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    8 x) k) t" e; H" @" E
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ) k0 q6 v: g6 E& B8 ~; G6 {
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 S* A5 p7 j& S+ B7 A- r
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);4 d6 h# d. m% s1 m, B# N" Q8 y
  886.           dwStartUpSteps=99;
    9 `6 T! T. R' l* S
  887.         }6 A$ W) D* p" t( K" B- k- ~
  888.         else
    2 H, D% d0 P( u: r
  889.         {# ~0 J: ~+ }6 `' c# ]# E, Z, f
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ s* [4 ~* \3 j
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");* Z: M6 N" n# N+ r3 o
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 r! z/ y$ W' D* a7 F4 d% T! i  S

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

% R  s. P6 N- x+ s( @' }+ ]! @) x
$ G# `4 k2 X9 b# P+ J

評分

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