找回密碼
 立即注册

CSUpdate.exe源代码

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

4 r1 r; f" {2 D$ h$ L- [
  1. / RevApp.cpp : Defines the class behaviors for the application.
      p2 b: i. S! p; O2 W$ e& M* i" {
  2. //* @7 P$ b) l0 C3 j3 t

  3.   l0 Y# x" Y5 J6 R" [+ l
  4. #include "stdafx.h"
    + O) ?% j% P, Y! v

  5.   u) W0 M7 H, {9 f8 ^7 U" ^
  6. //#define UNICODE: |' a1 M# {# k* f$ {
  7. //#include <gdiplus.h>
      Z& q- Y% l9 O6 G; j
  8. //using namespace Gdiplus;
    ( D& m& B1 K( v) D- x

  9.   H( w8 w' V7 A- |% B9 j
  10. #include "RevApp.h"1 L+ d' j( o2 i* W; t; @( ?' B+ |) G
  11. #include "RevAppDlg.h"
    & J  d5 m, j6 L3 M

  12. & B' K2 m6 {) ?+ a8 s4 \: r9 `# R) J, b
  13. #pragma warning(disable:4786)
    1 W+ Z/ x2 a9 ]$ R. R
  14. #include <map>
    ' I( q5 M  W+ P; s
  15. #include <list>
    3 t: I" O# l1 P# c  p# t$ F" r
  16. #include <direct.h>2 N6 J) w4 q  A6 c9 G. F+ {

  17. # V1 t* I# G# f, V  |
  18. #ifdef _DEBUG& _2 f1 t( O- U& \
  19. #define new DEBUG_NEW4 M% c9 f# E3 S! R8 ~0 i
  20. #undef THIS_FILE
    3 a0 {% {; P1 _
  21. static char THIS_FILE[] = __FILE__;! K: d/ W' O7 U5 [
  22. #endif$ H; G! {4 e/ \* I9 F
  23. #include "SkinResDef.h"* \+ Z: b& y2 x9 `( M
  24. #include "ChangeBG.h"
    % F% D: _3 H' }0 j! m# @
  25. #include "AFXINET.H"# h/ b- `3 k. S0 ]8 Y* }5 X; u
  26. # n0 `# i7 _) E, F- [8 f/ o( K
  27. #define TRADITIONAL_CHINESE 0! t& R3 S+ n7 ^" Q9 ~5 J( f
  28. #define SIMPLIFY_CHINESE 1( ]4 F  P0 u3 ]" d* G
  29. #define ENGLISH 2$ [/ h; J/ o1 C+ a
  30. int m_iLanguage = ENGLISH;/ o% y. U! t5 k! b7 f
  31. /////////////////////////////////////////////////////////////////////////////
    ! ?; {$ A5 I" C0 v- i
  32. // CRevAppApp
    9 e/ O0 N* }- e

  33. & s' x: k5 r; B1 j4 S7 t
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    5 ~3 d# l& M6 s4 ], ?( ]
  35.         //{{AFX_MSG_MAP(CRevAppApp)$ B& }& O+ _9 a1 ]% h6 ^
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    6 z. O9 l1 i% p. s+ j0 s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!( b6 n3 E/ x& z# r
  38.         //}}AFX_MSG$ C, G. F/ h' A
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)3 A1 h- [2 H6 u: r7 `
  40. END_MESSAGE_MAP()
    4 U( R) Y0 v7 e: W% Z, d
  41. - B' \$ t$ D( B7 s" P1 z8 ]3 h
  42. /////////////////////////////////////////////////////////////////////////////2 b+ y- D/ ~8 ^" G& e6 g' R9 c0 }; P  s
  43. // CRevAppApp construction$ v) G+ s: ^8 r9 r% t

  44. " ^! P  U4 a6 l$ M- ?
  45. CRevAppApp::CRevAppApp()9 v; l0 N. h( J2 f
  46. {0 `4 P3 k8 W+ }& u% c& e
  47.         // TODO: add construction code here,. e7 @5 C! P5 o8 d$ G3 T9 a; ?
  48.         // Place all significant initialization in InitInstance
    7 M% s/ H+ s' `) r  c. V) h$ s
  49.   bDisplayIsBig5=FALSE;7 N# d: [2 F! e) f1 r# ?
  50.   bRestartUpdater=FALSE;2 c7 q9 E+ ]2 e8 D( E& `
  51.   bFinishUpdated=FALSE;7 b9 c  s- u0 ]. R
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;, Q, q3 A/ i; c3 d
  53.   InitChangeDataBig52GBKS();7 A. C/ \, K& U, x
  54.   InitChangeDataGBKS2Big5();& e' X: w; A/ L$ [$ `6 f& \
  55.         //# N' O9 G9 U, H0 i
  56.         bClickRunExe = FALSE;4 Q/ G/ ~' W4 a8 ?+ J
  57.         //
    ' N. Y$ d2 z" D* v4 T, F
  58. }% @. ?/ U3 S8 U' A/ P: f* L: {
  59. 9 H+ v+ @. `& v+ F4 [
  60. CRevAppApp::~CRevAppApp()
    7 @0 F( C# O! T- V. ^3 l
  61. {4 m" k2 O# j9 w* e3 w/ k
  62.         // TODO: add construction code here,
    / |$ K+ u" `9 d
  63.         // Place all significant initialization in InitInstance
    . H( c( Y- _' |" q8 h
  64.   EndChangeData();
    : M5 A- [: q7 V( b1 _' b. u
  65. }# p+ m. ?2 [" D- I3 z4 H2 i2 s; P
  66. ; f+ h* d1 i6 X/ D/ [' V+ \: o" d
  67. /////////////////////////////////////////////////////////////////////////////
    1 |( S' Z" e2 i* v8 F" t
  68. // The one and only CRevAppApp object* ]7 o& |( x) N( `" F+ j0 Z9 K
  69. 5 u! b! ~1 s3 P' p& X) j4 j
  70. CRevAppApp theApp;+ W+ _8 Q3 }4 V7 L* ?! U$ T
  71. 3 u5 s7 X. i# N6 [$ U6 V6 j
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    4 A# u. o( V. W" p) h7 `
  73. {  B0 v# i9 A7 O! C0 \' W7 n
  74.   int iEOF=0;+ y- t: y6 B$ A: s# @
  75.   char szTempName[MAX_PATH];
    + h( V3 u6 t  s, }
  76.   *szFileName=0;
    - K+ Q9 i6 A- O4 @( l
  77.   iEOF=fscanf(fp,"%s",szTempName);6 [: h* z# [! L8 E+ v  {2 Z1 n& [
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')/ b* I' t8 A0 i% d  [
  79.   {! B$ v/ v& |1 M2 ^9 [, X
  80.     strcpy(szFileName,&szTempName[1]);1 W# |6 [; j8 d$ H9 A( Q7 @) \. @
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    + _5 N6 b2 m' o& ~; C( b( r
  82.     {) D0 `* ~7 r8 u6 ~
  83.       iEOF=fscanf(fp,"%s",szTempName);3 [6 P% O# |: a
  84.       strcat(szFileName," ");
    9 r( R1 [; F$ t% r& z( Z7 e
  85.       strcat(szFileName,szTempName);
    - ^4 u: O; j. L0 {( Q4 F1 x: a
  86.     }6 s5 G$ ]& o1 @; S5 |2 G% m" d: ]
  87.     if(strlen(szFileName)>=1)
    / q) f; o/ r/ D" I& o
  88.     {
    . z2 a% s' R1 I3 _+ H
  89.       szFileName[strlen(szFileName)-1]=0;; n0 e; Z/ ^. A! a1 r; Y
  90.     }
    ! n" U. P# Y2 n8 ~! {" ^6 w
  91.   }
    ' b+ w: p; x8 X+ |' h: ?7 j9 Z
  92.   return szFileName;$ R8 F- d  J0 a: h) {% ]
  93. }
    8 _( g$ t/ ^' Q! Z! L2 n

  94. 6 `$ J3 U" @0 \  e+ c5 C
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)5 Y3 O7 e- b, F# q5 U$ e
  96. {
    7 y$ F# N! e  x
  97.   FILE *fp;
    + z9 v1 y0 e) Z
  98.   char *key=NULL;3 Q3 p0 f3 R6 \& u5 j/ L5 \" g/ ?
  99.   char version[MAX_PATH];
    : \3 d: z/ r: l0 B) x
  100.   LPUPDATEFILE file,olds;  ?$ D% ], F, D: `5 g
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 L- P# t+ Y# R/ n8 H

  102. + {. P& H) j) D) y2 S2 y4 V9 o6 y+ k
  103.   UpdateList.clear();! D! J. h% ?% ~9 E1 V$ e
  104.   UpdateFile.clear();! Q+ D, u. ~, x, j: D
  105.   if(GetFileAttributes(filename)==-1) return false;
    7 \2 X: ]! D: X3 `* D- C- p& g
  106.   if(!(fp=fopen(filename,"r"))) return false;) K- d: D$ c. F$ `) J) `
  107.   fscanf(fp,"%s",version);& H' r4 N, d7 r' l
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    / t; E6 d  F: t+ T
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ) r. \6 T8 @+ `* a1 m- v# c& d! y1 A
  110.   {1 i0 e' x& ^+ q3 w; o( r
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 V/ v" Z6 b2 N  q* g  T7 z3 {
  112.     fscanf(fp,"%s",file->path);7 t: r( Q6 p8 v: \3 R+ E/ A
  113.     ReadFileNames(fp,file->file);* G. B6 x- c/ k) C$ J" S, z
  114.     strcpy(file->full,".");
    9 Y2 x! T. w' J' ^8 G
  115.     strcat(file->full,file->path);
    " C7 d4 ~* ?/ ~4 e- B, n: g1 S# D
  116.     strcat(file->full,file->file);8 ~# ~- M# `- r5 J* V8 y) Z8 ]/ Y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
      K* K$ T" M+ _! H; `
  118.     {
    : X# c; g5 _  O' F- X
  119.       file->vers=(float)atof(version);
    + ?1 q' O7 ]0 b' Q6 h7 J3 C8 x
  120.       UpdateList.push_back(file->full);
    & C1 o+ o* ?9 b% i/ ~
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , i9 |) X; x& O$ `) C* ^
  122.     }( R* B: B  ^- y; ^0 R; m: z
  123.     else
    / Z6 G% `1 w. S3 P6 n( T
  124.     {
    ' }& A# L; n& G: Y+ s
  125.       olds=(*p).second;
    ; b( p0 H) |9 e0 l5 I% y, E3 A
  126.       if(olds->vers<(float)atof(version))# S1 N4 K# |: A, u8 {3 `2 d
  127.       {6 `" g+ W; o$ }0 y) ?, Z
  128.         olds->vers=(float)atof(version);
    . F  I# }8 ?& s: v" P- y1 N9 Y
  129.       }
    + z9 y8 D$ U8 n4 B$ D
  130.       free(file);- ?) n4 ?& G" e9 l
  131.     }/ I! X7 R+ }6 b8 ?
  132.   }& B8 W4 D& F- {" h
  133.   fclose(fp);
    3 A  Y6 k' }. S0 F; a8 a( O
  134.   return true;
    6 j) S! z8 R. y0 l
  135. }
    1 n" {. v, H. z# O, E

  136. + a6 q' n$ f% Y  ]
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    * E6 m) @$ i' A
  138. {: w2 x1 w) Z" k9 r
  139.   TCHAR  szFull[MAX_PATH];8 ~! A) k! l  H: R0 A, `9 O8 @* p
  140.   TCHAR *token,*inter;
    ) `; T1 p' |9 C) t8 S% I1 N" M& F3 j* {
  141.   *szPath=0;
    % d; H8 q+ M2 ~1 q& i
  142.   strcpy(szFull,szFullPath);/ V- c9 M* O+ g* p
  143.   token=strtok(szFull,"\\/");
      Q: {  O- Q% R7 G$ {
  144.   inter=token;9 U/ y$ v2 C/ Q4 V$ d
  145.   while(token=strtok(NULL,"\\/"))4 Y4 W: G9 s9 }
  146.   {
    & y' w* [) ]+ {0 Y. A$ @( g
  147.     strcat(szPath,inter);
    + v# [' d" h7 n3 Z: ^
  148.     strcat(szPath,"\");" F( |5 y2 V0 ~$ \9 \
  149.     inter=token;
    1 q& G* V' |" s6 d" Q: S' a
  150.   }9 g& G5 A& \9 A: f) ]- j# q
  151.   return strlen(szPath);- S. [+ ]' p; C* z3 J: K
  152. }
      h* Z4 Q) R. @& v) K
  153. 1 C- n, |$ O0 y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    * y4 S0 a6 P& B  X% ~/ i4 a5 P
  155. {
    3 ?( e$ \6 |, y
  156.   DWORD attrib=GetFileAttributes(Target);
    1 s( V* R" C2 C: o
  157.   if(attrib!=-1)$ D, f* ^0 D4 E2 [
  158.   {
    / [' f; G' i* |- Y4 A$ V! j! Q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , I3 ?" V4 H0 t& U
  160.     {
    0 o) t. d, K, m* F
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);! n' s$ a% J6 C5 _. \
  162.       SetFileAttributes(Target,attrib);
    5 ?; Z9 i3 S: l/ B8 c7 k
  163.     }
    & Q% p! m5 l: q; U
  164.   }
    8 Z! a& v$ ^2 K) U: p
  165.   CopyFile(Source,Target,Erase);* `: G+ a1 ]" y
  166. }9 t8 g' ~5 _% k0 g' A
  167. - x& R/ t& g/ m7 ^6 \6 C3 H
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! @) _: k% T( Y# w/ h- }
  169. {
    ( T0 d' }# B$ u
  170.      FILE *fp;4 b3 ]' _, b0 R# J( U
  171.      char  szBuffer[8192];
    ) f# g& X( Q1 Q+ @4 k4 e
  172.   va_list  argptr;2 n) }9 s  R0 x  _. b* x; V

  173. 4 y$ v3 @5 W2 T9 m
  174.         va_start(argptr,message);
    9 G/ u" u$ _9 R9 w2 l
  175.         vsprintf(szBuffer,message,argptr);5 z3 U# `; \& [! ^; `) z# _
  176.         va_end(argptr);
    1 X$ y* s* M) e  E% s4 D9 h0 z6 B+ b
  177.   fp=fopen(FileName,"a");
    . \' r6 J9 ]1 i5 @$ W/ g& [9 a- ~
  178.   if(fp)
    5 M- H$ C8 m8 f! M7 G( V% W8 G
  179.   {
    / w% l. I( T* n0 ?4 m
  180.     fprintf(fp,szBuffer);
    - Y# T" g+ n0 D0 X+ w
  181.     fclose(fp);: u# F( z! w  G) B9 w( c  l3 I
  182.           _flushall();
    8 l" i( K  r1 }! W
  183.   }& ]* f$ h/ B& n# [3 E2 I
  184. }, k' c) H+ o  L# n' p
  185. * w6 z/ S3 ^- g3 I! ?1 ^
  186. BOOL CRevAppApp::Fclearf(char *FileName)" i8 h6 @% k, j9 y4 a- ~; n5 r
  187. {! s8 }0 O0 i( }6 @3 h* j
  188.      FILE *fp;) l1 u+ k8 j4 g
  189.     DWORD  attrib;1 `2 A* G2 Q8 k) \
  190.   attrib=GetFileAttributes(FileName);
    " T6 ^0 h# k" |  m
  191.   if(attrib!=-1)% R/ j9 H: O/ q% d
  192.   {
    " d6 z0 [+ @9 Z& R5 G6 A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      L9 u+ b1 D1 c% P  O, q1 ^
  194.     if(!SetFileAttributes(FileName,attrib))
    7 @+ x& ~$ B1 r" D" A
  195.     {
      N8 C. V; T. B& B& z8 H, x. @
  196.       return FALSE;
    $ f$ j' E3 X4 e2 |! i: s4 H+ v9 Q3 O5 I
  197.     }' G% i  v1 X" A
  198.   }- |5 n. q+ `7 \
  199.   fp=fopen(FileName,"wb");1 Z6 G3 ~1 S/ M( U+ m  `; Q$ p
  200.   if(fp)  j) q3 m+ o( z  ^; E3 p3 r
  201.   {
    , U% y1 r" E0 l% e5 d8 S6 R
  202.     fclose(fp);* `+ A0 U$ w2 e# X
  203.   }  P- Y5 N. P: U& _! E% A9 O
  204.   return TRUE;
    + n: M4 a7 Z+ z$ k% p" |
  205. }
    8 w! U: Y3 a0 N2 ]
  206. ) e* F7 X8 j. ?% a( p8 T4 f: _/ b4 Q9 N
  207. BOOL CRevAppApp::UpdateLocalVersion(void)2 E9 `; {: K; V' O% X7 F
  208. {
    6 h' D, t" G' |
  209.   char filename[MAX_PATH];  ]8 e- l6 u7 A1 _
  210.   LPUPDATEFILE file,olds;0 A& T, c& |8 r8 i4 M. q: h
  211.   std::map<int,CString>::iterator i;
    9 ]/ m8 E8 d$ D/ J. j
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ S' V8 z$ d  D" ^: u
  213.   std::list<CString>::iterator l;7 t: g* {% g2 O2 J; j
  214. - m" |. d% @& K& K
  215.   if(bFirstUpdate)
    8 w- F" S9 ^6 T' [. ^) r% d
  216.   {
    # H3 C- i) ]  j+ |3 d( \
  217.     dwCurrFile=0;; \; p$ I7 d: v9 q/ }
  218.     bFirstUpdate=FALSE;
    4 y& ]- r8 Q- d5 n! u
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ T# v+ [4 b; m
  220.     {4 q/ }4 j- A5 }  j) R. z" k7 `5 M
  221.       dwTotalFiles=UpdateLocal.size();( C: n) e& O- t& Q( W9 n
  222.       dwDownLoaded=0;
    % s1 P7 U1 }4 ?# ]6 S- E6 l2 }
  223.       bSilentStep=FALSE;
    ) d* r! v1 ?$ z4 g! t) g0 {6 k
  224.       bCompressed=TRUE;
    ; e: `# ~% D* |) s3 _& R
  225.       strExtLocal.Empty();
    3 R6 ^1 T0 x5 b6 i6 h- S; T( I6 [, ^
  226.       strFullName=(*i).second;( ?* c7 ]' X" h
  227.       dwProgramState=AP_CONNECT;
    " i' [' }8 w$ u1 Q) |) ~
  228.       return TRUE;
    ' b8 v( Y- L) F% u; p
  229.     }8 i# F1 [$ M# m
  230.   }
    % G9 y! P# |2 y# I
  231.   else if(bRestartUpdater==FALSE)
    ! x4 M1 ^, u: z9 _3 A
  232.   {
    $ |+ M( l! l# @( l1 D/ L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())3 |8 B8 [$ L3 H& e5 W- q" o
  234.     {
    * u7 u, M" G- b$ U- @$ v1 p
  235.       file=(*p).second;) T2 F' T, h7 x$ ?/ F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())0 a. n! J% Y; m/ E2 A
  237.       {8 z9 s8 G* ]" r! E& I" ~
  238.         olds=(*p).second;
    - R- q' H; `' t
  239.         olds->vers=file->vers;
    / f+ V8 E! D' r) A+ ]
  240.       }
    / c7 L# Y1 y5 f: }* P
  241.       else
    & P8 h% P% E( K
  242.       {
    ( `  t! S6 }1 U' E5 w4 I% U7 y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# }0 ]* U/ V) D+ w
  244.         memcpy(olds,file,sizeof(UPDATEFILE));6 k4 D8 v3 F, D5 q- R) ~
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));& [( d8 {! n9 \- j: f) J" `
  246.       }9 a4 _9 G  j& _. y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    # G0 w  K5 g6 G; u. X: E5 h
  248.       sprintf(filename,"(%s)",file->file);
    6 ~+ v7 g7 e" n; o1 \3 M' R
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 @2 r; `# \- {+ \$ n! q$ c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    2 ^  x- `4 U, i
  251.     }
    8 X* r/ h. y* _8 y1 e
  252.     dwCurrFile++;- J, T# w& [( |$ j$ L1 H1 M- g+ [
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ Y3 I! p# Z* o& h, [, y
  254.     {% K1 I+ O* {7 o, _
  255.       bSilentStep=FALSE;3 ]; q: t2 c* f- L7 f3 S+ G: _
  256.       bCompressed=TRUE;
    + c, G3 ]0 P8 |% {/ O
  257.       strExtLocal.Empty();; `# t# ?7 T  U# Z* N
  258.       strFullName=(*i).second;
    5 ^& {1 `! |! i, a. X% H- @
  259.       dwProgramState=AP_CONNECT;
    ' Y$ s2 J9 F  k; u* V
  260.       return TRUE;
    0 s2 H8 Y6 J8 ?, `
  261.     }) ~& M2 Q! ^( C4 g9 l
  262.     if(!bRestartUpdater). }" M5 F4 j7 d# T
  263.     {
    " `; E0 C9 Z- j' J9 t9 p
  264.       int iCurrSize,iFileSize;
    2 A5 F. R- N: K  H: z: Z5 n- b
  265.       iCurrSize=0;$ }# E1 f. Y' j. M8 M5 T1 B
  266.       iFileSize=UpdateList2.size();
    " ]& x8 E7 n2 L
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
      L; w$ J! U5 ]5 f; e
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");  L3 J8 {- Y5 Z0 w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");) ~; g% A' H9 o+ N, x4 u' Y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 W. a' ^# J! M, V
  271.       Fclearf(".\\update.dat");
    ( O* M) L2 G. |! B7 a7 y
  272.       Fprintf(".\\update.dat","Bloodyf\n");4 `% i9 c1 X0 `' v
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , W; L/ n/ F5 b) b% h0 y
  274.       {! t# ?$ f& Y* j( a  k; S
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())* q( n+ i  c2 U
  276.         {" w" K: [6 I" F; N: x5 p
  277.           file=(*p).second;
    $ @% u5 @3 x4 M: R
  278.           sprintf(filename,"(%s)",file->file);
    * ^& K* C1 e  g& L7 k# m
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& y% F+ L. E- E( Y+ K
  280.           iCurrSize++;
    - ~+ f, a2 b+ F  n3 I  T
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));! L" T4 P. y0 l* i8 o. R
  282.         }. P4 B+ c  L; o6 _2 p8 `/ @% c4 \
  283.       }
    . ^7 J; V9 a% d1 w& Y
  284.       unlink(".\\update.txt");
    $ H6 I% L) x: I4 k; z! p6 }! W
  285.       unlink(".\\update.tmp");% z! `; q0 I( x% @) A. @
  286.       Fclearf(".\\checkversion.dat");
    & a4 Q. x4 U$ |' g
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    . F0 b2 y7 J5 {* u, c
  288.       if(UpdateLocal.size())$ ~% e$ V9 {6 t0 U0 E. {
  289.       {
    2 J1 r( {8 `8 U9 c) O2 P9 x+ H
  290.         UpdateLocal.clear();9 w% C- s+ _7 y3 m3 m+ `
  291.       }
    % i' a: Q& M! R  c
  292.       if(UpdateFile3.size())
    . L$ h, [- M3 j8 Z/ I: e2 Z
  293.       {) Q2 Z- m# g0 W5 `1 Z5 K) g$ h4 w
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " g  M1 M; N1 }/ Z3 Q  z1 W  W
  295.         {
    0 b7 |7 [8 i% w* G% _  X
  296.           file=(*p).second;
    ' s) f: @- e: T) r* i
  297.           free(file);
    5 U  ~* p. v" h, R
  298.         }
    ( f4 d; N; D% I1 g4 f  y! W
  299.         UpdateFile3.clear();
    ! U! I  v/ ~7 o: ]$ }, J; `. U, T5 c% ]
  300.         UpdateList3.clear();
    ; H7 C$ A9 w$ z7 q( b" j
  301.       }
    ( }: z5 K% [! C+ z) q! d; u- ~
  302.       if(UpdateFile2.size())3 Q: J* o. h' J
  303.       {! N% P8 t* Z% z# F8 \6 i
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % B& u. ^; e6 Q; ]: E; Q' N
  305.         {
    ( N, w' O1 J% D9 ~& c+ I
  306.           file=(*p).second;: P8 r  ^4 h4 q
  307.           free(file);9 _: Y* d$ B! H& D
  308.         }
    9 t+ H1 S1 i4 \* y) t
  309.         UpdateFile2.clear();
    , {0 s! C. v( {5 X$ M4 ^9 t7 R
  310.         UpdateList2.clear();
    / ]  _8 n! [5 @3 @& G
  311.       }
    2 x9 R! \* ~/ x+ a/ K
  312.       if(UpdateFile1.size())
    3 e# e# h  A7 u
  313.       {0 O5 _  o' l8 S* U! O/ t
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) T1 `8 e7 C' t7 c  Q
  315.         {
    1 O! {9 O8 T4 J* ], q) h" K
  316.           file=(*p).second;( T9 ?/ r& F3 b/ g4 ?0 d( S" u& l( Y8 y
  317.           free(file);- c4 D5 }5 K0 [
  318.         }
    7 z3 `. D; _/ _; N, r/ x$ B$ L' A
  319.         UpdateFile1.clear();8 a4 R5 y6 x8 H, r1 o! X; t2 w
  320.         UpdateList1.clear();+ w3 H! ~0 n" I2 c, m* I& i
  321.       }& _/ w3 g3 `  o7 I  @4 A
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' ~# u1 d% D( R* a) Q5 G
  323.     }2 R/ H; |& c( B- P: N
  324.   }
    / r- L) v" _$ [: p0 E" u
  325.   return FALSE;
    # @. ^0 Q) O/ N1 H7 f
  326. }8 }6 J2 e2 ?5 m2 ~8 D

  327. 6 U1 Y) r4 I! l, j7 T# s" a
  328. void CRevAppApp::ClearAll(void)- c- s# F/ ]9 _3 b
  329. {+ U: b. K9 N: a: m2 w
  330.   LPUPDATEFILE file;9 H1 u! Q- S/ V7 o8 S
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    / m( Z$ J" e2 g/ K3 H

  332.   S7 w7 \# E/ d0 X" Q" o; K
  333.   if(UpdateLocal.size())$ z) k' h+ J/ k8 E# D! G
  334.   {; k  P' Y7 ^4 \% j, O3 z
  335.     UpdateLocal.clear();9 i& d- D! o" S, y  F
  336.   }! j$ i" L( I* V9 o3 B3 r( e! j6 t
  337.   if(UpdateFile3.size())1 k; D5 B7 Y# _7 [! n
  338.   {
    9 g9 C1 c0 h/ K7 v( @: X
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 w, Y8 u- h6 M$ O
  340.     {
    0 }+ i( v1 e3 {! B) k7 b, j  k' v9 [
  341.       file=(*p).second;
    6 a4 _  _) H+ I$ i1 x1 _% g7 D
  342.       free(file);2 {0 \% B1 k+ {: X+ g/ `
  343.     }/ d# {+ N: R3 E+ @. `( _
  344.     UpdateFile3.clear();
    0 P" \+ m! {' o  g3 d( N& T' z( v
  345.     UpdateList3.clear();! f/ w1 r6 A0 q' I
  346.   }
    # S1 k. q+ ~3 B7 A
  347.   if(UpdateFile2.size())
    4 m4 F5 Z+ O5 N, x
  348.   {, N. Z2 E' [7 i& _7 i
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 V& d' r0 n, Q# v; d
  350.     {
    # m5 Z* g. R" O/ n. d
  351.       file=(*p).second;8 i, l7 B% Z  M" [3 s
  352.       free(file);
    * }) R/ J- j2 {3 f+ \( f
  353.     }: {* X& w7 a% K$ l% s) a
  354.     UpdateFile2.clear();, U' g% @- ~. t9 {8 ?  D! T2 W
  355.     UpdateList2.clear();8 u7 r, |; O6 U2 z0 d% }' y6 y
  356.   }( T# [5 y1 C! U) h2 Z
  357.   if(UpdateFile1.size())
    4 c- S: N6 w% ?
  358.   {
    ( D- O: k5 z9 D: w
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). e6 T/ f' G/ P' ~0 ]( S8 H
  360.     {5 s3 S" A+ d+ ^0 g8 X
  361.       file=(*p).second;
    ' a2 U7 Y$ R+ {1 B9 h& y
  362.       free(file);$ E9 T3 r( ]2 x( a) x2 d
  363.     }
      w) I7 b7 u/ a$ p
  364.     UpdateFile1.clear();
    - s& g& N  }) F: M: Z9 E' ?. t. w  H( q
  365.     UpdateList1.clear();
    0 ]" ^2 ^) ?: d& J$ `9 }& n
  366.   }
    # o2 F: Q5 E# @! `( I
  367. }  ( `0 }1 C% }5 r$ j; ?
  368.   
    8 K5 t8 Y* D# y8 t6 o0 s2 ~8 m
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    : q8 h% Z- ^: `1 Q! T; G
  370. {7 ?+ u' a% Y: m; l4 H# w; e* O
  371.   int c;
    ( X) W- |+ p( q$ i
  372.   LPUPDATEFILE file1,file2;+ e5 G3 P/ ~# O1 d
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ( A) [" [/ x% m' D7 E+ p- \/ T, B; {
  374.   std::list<CString>::iterator l;
    5 T3 j; \3 b5 i2 q  O% W
  375. ; R' J, @/ D7 {4 v& r
  376.   UpdateLocal.clear();
    , s  k1 j; Z# X1 c& @  D
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ( _' Z3 q# @3 A  O. J
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ) b1 o3 a3 v( c: n$ D" g, t" }2 |
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);- w- q2 {7 N" S7 U$ Y( G
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ' n* R9 ~( U/ c% o4 T1 e. [
  381.   if(UpdateFile3.size())' s  R% D6 j( ?6 z
  382.   {
    0 Q; X2 |4 p: x3 X, X" ^2 [9 i
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)" Z+ O/ O' t# w
  384.     {
    ; v$ j1 u, S0 C+ A; J& t
  385.       file2=(LPUPDATEFILE)(*i).second;2 K8 Z: b7 e0 Q$ }
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  ?7 k3 }1 M4 Y" u! r3 Y0 X
  387.       {; U4 ?- F; b6 @7 r7 Z
  388.         file1=(LPUPDATEFILE)(*p).second;
    * q3 h+ k. a9 w5 w+ i
  389.         file1->vers=file2->vers;  u2 \9 I! ?: k: g& n
  390.       }3 q* S1 i1 g( i! [" Y
  391.       else3 L- Q: O% ~' ?$ k
  392.       {/ T7 X+ x* G" Y. T: K2 r  H) c
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 \1 K1 b& Z* R5 }
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ( W* i  D/ a0 [; N! [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    0 e( K& D+ r8 P- V# n
  396.       }) Y1 X( |5 e! P1 M
  397.     }. F, ~, o) y0 h! j  v- `8 s" z/ O% j
  398.   }  J4 Z3 E2 D' @, _
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! s# X# N# l0 D. Z4 Z( v
  400.   {
    $ T7 Q' {% H0 e5 J, ]. }3 G& M
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())* o9 y5 I4 q! G" d- U3 `& W
  402.     {% q* `6 B1 v. T: b+ \9 {. |5 S% A
  403.       file2=(LPUPDATEFILE)(*i).second;
    * X* Y/ ?8 m9 R& ]6 Y7 h
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); a: F. E5 G2 {; |+ a
  405.       {" a5 |; g# w2 r6 x: m: ^8 {0 S! S
  406.         file1=(LPUPDATEFILE)(*p).second;7 p) l! [; C' o3 Y
  407.         if(file1->vers!=file2->vers)! h3 s( E5 h8 b7 U) g  i- I, p+ X
  408.         {
    8 q- k# a/ u( n6 Y3 ^* X6 d. h
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 k  Z" t/ }% q8 Z; \- E
  410.           c++;
    1 `0 q% w% k+ Q, B* U
  411.         }) G' O, M& S, G( S' \  y0 K$ @7 X
  412.       }  A8 n  X. h5 O( r8 z! b2 z
  413.       else+ B! Q% ?) {9 g
  414.       {6 `/ g% l, F5 n% _
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & S( r4 ]7 T9 S$ S! {' W4 c) q; ^
  416.         c++;
    , F9 K$ Z$ R( E& p% x) X  w
  417.       }
    + L7 P5 q2 y+ `/ o: S
  418.     }
    % \2 I- D% Y3 d' P* t& _
  419.   }) H3 o( ^  {  Y: t: {+ T) `( R
  420.   unlink(".\\DownLoad\\update.txt");: K: b& {5 i; l6 U% p1 h
  421.   if(UpdateLocal.size()) return TRUE;, a* a+ L  x1 ]4 a
  422.   else                   return FALSE;
    # D, n+ v* O* S9 V0 z
  423. }2 I7 ?% r! x) L; t: i  O1 J
  424. " [) w3 N0 n# S( N
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"! V! N; d/ g0 v3 _8 P  J
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
      S! E- O0 C( ^5 y+ X

  427.   g, s  u9 C( \# I2 @3 C) D+ g

  428. . v: M! s1 W  E7 N! ~
  429. % t4 d1 A  b' t+ a/ o# H
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( b# y& {  f6 t6 |+ l4 A9 n! D' h
  431. {7 P! `- N" w; @  O# z6 P; d9 u
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;6 f1 Y0 v! v, }
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): ^3 q. v* h  X4 H
  434.   {
      ~: }# B/ `% X- X0 Q* b$ I9 P  P
  435.     char szLanguage[50];
    # l' B& m3 r; N, b4 P
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 ?6 b3 G  F5 m% I2 ~6 q3 E
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' F/ `/ H$ v  c4 P0 q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 {. {7 ]- [' {9 w- [* C; X
  439.     else                                   m_iLanguage=ENGLISH;! Y* J' t. k; l8 I5 d$ a
  440.     char szRegister[100];
    5 K4 q" Q" s/ G* @% y$ `" V
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- L" ^. l* |  C6 O% g- f
  442.     strRegsName=szRegister;, I; K" h+ f* r$ w  ?" W5 |
  443.     char szPatchURL[100];- ^2 Y$ v  y+ l
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . v  ^* S; V. {3 p: b( y% a
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 A0 O3 B- a! F" P! t$ @/ h
  446.   }7 K: f8 P- j& Q8 }; X: u7 ?
  447.   else! F/ _7 Q& X- C, F; \" {+ d0 G5 ^
  448.   {
    3 |1 r6 r2 \' Q% D5 g( F/ ?* f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 J2 a" x; ~( {7 x5 X3 E
  450.     strRegsName=DEFAULT_REG_URL;3 Y% \0 G$ u- y$ n% u
  451.   }
    * ?/ |' y6 }5 C; J& D* H# Q
  452.   if(GetFileAttributes("hosts.ini")!=-1)- }8 l7 K6 Z% P- Q/ m
  453.   {
    $ t3 g' K! g" w2 P3 {' |! f5 i' D* [
  454.     char szIP[50];
    7 c& L2 t" \1 D7 r# u( Y+ S6 `
  455.     char szDIR[300];
    2 Y  p$ R9 n; ~* r7 ?* Q
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))+ b7 n" e4 O6 \9 k: I* l' B
  457.     {; r7 t5 G+ O! l! `9 u
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : g0 `5 ~' o8 W9 D! N5 y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");9 u& s" ~8 c/ |
  460.       strHostName=szIP;1 j* H5 ?9 J2 x2 C# S3 L
  461.       strHostPath.Format("/%s",szDIR);
    $ `% {* A2 a7 N
  462.     }+ f  \. B; G4 F9 o; y1 T
  463.     else
    5 d( u! e& X+ ]* q0 l
  464.     {
    6 e7 e7 X. t2 R
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 E- L( u. u+ X" R
  466.       {4 n  R  i( f+ L% F5 [
  467.         char szLanguage[50];
    7 c& p1 C0 A; q0 D3 S& _/ Z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" ~/ D! K# R* u& F+ w: g
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & m( o' L* I7 R) E& X* v5 C
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 b( j8 Z  p  @9 |( L( g
  471.         else                                   m_iLanguage=ENGLISH;
    3 c4 v1 z& r; f/ t) }
  472.         char szRegister[100];
    % V: l! X$ U7 k/ K0 W) C/ x
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 X! A( ^7 [4 C7 F
  474.         strRegsName=szRegister;
    ' p" B, M) Y" |: g. T) _4 h
  475.         char szPatchURL[100];4 _$ P  t0 R* _8 t) N/ q* I, |2 @8 {
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 c4 R1 b, _* }  j0 \' r) y
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    * h+ n  l6 i' B" ~/ d* j; l
  478.       }
    6 ^4 V: C2 {2 Q! N& T
  479.       else- f! \5 l0 d- o3 J0 |. u" ^7 g
  480.       {
    0 n3 e- ~# j) o5 t8 t
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) K: f- z/ f. }5 |+ t! S
  482.         strRegsName=DEFAULT_REG_URL;
    " H, a% ?0 K" S- c
  483.       }
    8 e- u2 q* o9 m3 |4 X% O/ _! a
  484.     }: c" {( a0 l5 f+ t2 m& }& x
  485.   }* I. W3 t; e& q
  486.   return true;
    & I  X, ?7 ]/ n. L4 P( u6 o5 w, M7 d1 q
  487. }
    4 C! d3 r: d7 o: m( A$ `; C: H

  488. 4 v5 K9 Q: Z1 F! @; o) X5 c* j
  489. #include ".\ZLib\unzip.h"
    + e+ z% I0 T) f. P1 H- `( {5 ?
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    0 v% G2 m/ n+ I% _) F, @
  491. /////////////////////////////////////////////////////////////////////////////
    6 _2 p2 e8 {  W' \, P* h
  492. // CRevAppApp initialization
    : t( j4 {8 a$ P2 p& ^

  493. * m! B! a: h7 M# J
  494. BOOL CRevAppApp::InitInstance()+ h* M) y  y! U
  495. {  g6 ^  Y! c) S7 }$ X& J
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ' K( x! ?+ ?% c( d1 e# B
  497. : B$ Y9 e* Y. P! X
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    4 a+ U/ T2 w" V0 X
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))- C) e  P( m, a* C# l/ b
  500.   {
    , ]7 r$ S  Z$ p" b. f  k0 d
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");2 c7 g6 s6 o& H% |- B
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    - q9 q/ M2 V+ g# |4 N
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    # O4 `7 m5 E1 `# ~& C0 g
  504.     {
    / m6 Q, ~4 y! a- c
  505.       strcpy(szPath,szPathTarget);
    $ _/ m0 B  }2 h7 i% e% K. B
  506.       SetCurrentDirectory(szPath);' }* p; \; ?1 W6 z5 _
  507.     }
    ' q/ t9 S, L8 s
  508.   }7 R4 ~  ]* l" K3 G" ?; I* `* k* c* U
  509. #ifdef _DEBUG# d- X# t& \7 ~
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ' W3 a2 K' r# C1 i# M( \; ?: s
  511. #else
    , |& H) {3 f! |  d/ @+ m' L
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ y" e) C0 D% D7 ~
  513. #endif+ o) g1 ]* H) i4 C* ^. m
  514.   {* Z; l. J: e7 q3 o) h3 [* G( ]# F
  515.     char tempFileName[MAX_PATH];! g# b% _! e% g. P9 ~, O( O0 o  p
  516.     strcpy(tempFileName,szPathSource);8 Q3 z2 ?3 t0 q) g% z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    * F4 o0 v( b9 O7 ^1 R$ t1 `: K- c
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    " b. S# n; Q: w! R; y) ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    1 R4 `1 P9 {3 N( B
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);( `. Y3 T7 y0 e# [9 c
  521.     return TRUE;) [1 G% H" y$ J" k. o. n8 c" r
  522.   }1 X) F+ x# F4 w$ K# G
  523.   // Nuke 0118: Delete run.exe. v5 g& v% E! c" _* [' U
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    / l) T* j. z- y! n9 T
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    - V2 M0 g) P) E$ Z$ y
  526.   if(!ReadCfgFile("Config.ini"))
    ! t8 d  \( e2 A  c4 _
  527.   {2 U. {) o6 E* h4 f) q- ^
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    8 _& U$ a. F2 R
  529.     return TRUE;8 m- M. ^; O0 x/ o+ f
  530.   }" }9 n) S! E  R! E
  531.   HANDLE mutex;3 Q" B6 i7 D7 \" o; `# d8 u. F5 S9 d
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))& [2 U  f) H, o% s, K- k/ w7 }
  533.   {
    6 N. F/ y# @& ~
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)$ \/ p# _. `5 F8 w  V( s1 x8 g% A
  535.     {
    3 U; s/ U. _/ J' R3 T
  536.       CloseHandle(mutex);
    & y* a. ]/ N1 o0 P
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);4 f3 T) |, h. u( |. p! r
  538.       return TRUE;, r7 K2 V/ a* y5 o( M  m
  539.     }8 M9 E5 I. k4 ]3 W5 W2 J6 w
  540.   }  
    . v; d9 j# r7 y6 t* I% ~
  541.   CloseHandle(mutex);
    . o+ _7 j- |8 ~. Z! B4 o

  542. $ J& l1 J, N7 f- x8 |3 K* p8 Y& N4 c
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);- g9 h' c. N% x/ Y& p0 s6 C
  544. " F- b. u; @% B) T
  545.         AfxEnableControlContainer();
    4 z* c; v1 E9 L& G/ ^  O8 o
  546. : t5 e; P1 D' T: ]: M% o  E  `
  547.   bCanUpdate=FALSE;
    $ Y/ x* \' d4 g7 \( E* s
  548.   dwStartUpSteps=1;/ n  ~' W6 `3 x; |7 P4 K
  549.   dwProgramState=AP_NOTHING;, G# U3 w. @! j2 z& M, t6 h7 N% e" P
  550. 4 r0 J# C0 F* ?! B- M: s
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);: u" H# Y% X0 Q7 K/ L( z
  552. % r& \' t3 Q7 {
  553.         // Standard initialization
    $ P6 t- f/ y0 \) _- L# [
  554.         // If you are not using these features and wish to reduce the size
    : I* _) Q; B/ ]3 G$ N- u/ O' Y
  555.         //  of your final executable, you should remove from the following4 ]8 g- b/ b. j0 V
  556.         //  the specific initialization routines you do not need.
    0 m$ g! M  N0 g% W9 G
  557. 0 P4 x/ b7 l6 f' _' k2 \1 @/ _
  558. #ifdef _AFXDLL9 u8 h4 O% C! `: C# ^
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ( W% j( D) g# p% q6 A# n
  560. #else( j" o0 l/ v5 r
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically% o) @7 F2 d9 e4 T) ~5 R1 _0 I' [
  562. #endif
    & i% n3 P6 N% U/ B6 S$ R5 V# b
  563. ( u" @: k% [) H, \
  564.   dlg=new CRevAppDlg;
    ' N# h; w2 r4 V) w" w1 z
  565.   dlg->Create(IDD_REVAPP_DIALOG);# [& }( Y: U3 t; p- W; m
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    9 B  C7 `" @0 w- Z9 M1 D2 t; l: t, e
  567.   m_pMainWnd=dlg;
    9 P8 q% j9 o1 J2 i9 U" |6 R

  568. - K4 E* h1 b% C! R2 v
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);4 h' Q  o! _. `' q
  570. ; o$ F' n; I$ e0 l4 m. o
  571. //  GdiplusStartupInput gdiplusStartupInput;
    . ?) z4 y5 h8 `. i- ~) R0 \; ^3 V# y
  572. //  ULONG_PTR gdiplusToken;8 a, B5 }2 }3 {7 F( V7 p
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ( R# o$ x9 M1 h: \
  574. & j6 Z+ w6 j# |3 A) g& }0 P( Y0 t
  575. //        CRevAppDlg dlg;
    9 A- R1 d# U: x
  576. //        int nResponse = dlg.DoModal();
    0 e$ i8 e, v& T: Y( f& ]% g
  577. //        if (nResponse == IDOK)
    : ?- ?8 p9 R! h5 g1 n9 f2 [) Y/ T
  578. //        {5 f* B; h4 r, Z8 \4 E7 x
  579. //                // TODO: Place code here to handle when the dialog is
    4 Z5 @( ^  v0 _& [
  580. //                //  dismissed with OK' p& D" Y  w( p" M* j$ \0 I3 G% H
  581. //        }5 i! c. W3 x" m* p0 f& I
  582. //        else if (nResponse == IDCANCEL)) J) ?1 G  i5 ?- A, B
  583. //        {. a1 u" r# K6 Y! Z& @! H, x4 h
  584. //                // TODO: Place code here to handle when the dialog is
    6 O/ L: h, T5 H
  585. //                //  dismissed with Cancel
    9 T: H( O% ?, r% _
  586. //        }
    8 S/ J! j; Q$ U4 t' L# ]9 ]
  587. 1 O/ k  {! p- t( J  \; y
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    $ V+ m7 ?% d1 {8 P
  589.         //  application, rather than start the application's message pump.
    + _3 h/ O  Y+ x( W  U) K2 l+ e9 w
  590.         return TRUE;4 n/ U3 O$ S! P5 H0 d
  591. }
      x! T" r* r0 ]' Q; k8 ^: H
  592. " R2 p6 ]9 `3 s$ _2 y
  593. char *CRevAppApp::strtok3(char *pSource,char *token)1 N! ]4 y/ n* Y! I$ [0 [
  594. {
    3 x: |" \- ~& I* W4 D7 V  e% E
  595.   int i;7 _; z) i9 `- K& O
  596.   char *szRet;
    # b1 Y, m# k; U! x
  597. / u2 Q1 P" f+ f/ B
  598.   if(pSource) { itoken=0; sztoken=pSource; }( R  r% O! a8 ]7 \
  599.   if(sztoken)
    3 a& ~+ c$ {7 d  y! I  d
  600.   {
    9 u" j0 r$ V  Z
  601.     szRet=&sztoken[itoken];
    % f" ?0 L5 v5 \8 l# m& Z& f' X
  602.     while(sztoken[itoken])( f6 W! t) j) @8 X. }0 T) u
  603.     {) ^: K$ [: {7 ~7 b1 F- k: o
  604.       for(i=0;i<(int)strlen(token);i++)
    5 y5 h% q1 @7 K% U
  605.       {
    * Z$ o2 N7 L5 T& D  t
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    & [" U7 B8 M( Q7 X9 D" `- j3 Z
  607.         {/ Z  B& p8 A1 }  ]
  608.           sztoken[itoken++]=0;: L& i9 l, F  o# x4 }
  609.           sztoken[itoken++]=0;- P7 ~1 \% N- }/ t& {3 M! z, J
  610.           return szRet;
    5 ~3 m1 n0 r4 l/ y
  611.         }" |; Q0 i) q; |/ t$ k) A
  612.       }
    5 L4 q( _1 n: p: U/ T
  613.       itoken++;0 |( w6 {$ W+ A3 R8 h* l
  614.     }
    , W- D( u- N2 y' E( j: A
  615.   }
    % z7 [, a: }0 k  G% Z. f0 f9 U
  616.   return NULL;6 ^, K/ k8 m4 f% F7 K; Y9 L: |$ E
  617. }
    ) ?; [1 x- {( |- E* e
  618. 3 P8 \4 [9 q4 i% A8 ~
  619. void ProcessProc(long Total,long Current)
    ' D# Z: [" ?( r. }
  620. {
      m. T% H0 l( c
  621.         MSG msg;: X" s$ B& [4 T# Z$ A( h# r
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);% a' M) O  v' N4 _: C  h
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    $ x9 E, m) d) s' v* f: F& D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 u, p/ T7 w! e. U
  625.         {
    . g/ I3 h* B' d; i. s
  626.                 if(!GetMessage(&msg,NULL,0,0))
    9 j( @* i# S; Q1 d6 z* A; W1 I6 r: f
  627.                 {
    / y) x/ O$ _: O& Q. ?9 O
  628.                         return;
    % \/ y+ B  P; d$ j
  629.                 }
    - |1 S7 }: n# ^* g& T' ^( f5 U
  630.                 TranslateMessage(&msg);( w& a8 @- i/ V5 `
  631.                 DispatchMessage(&msg);3 D8 r/ a2 o% T, y7 o/ M1 v( x) I
  632.         }        , h1 K- m9 |) C# l+ W' H; X6 M
  633. }
    ! E' ?; g5 z5 x( D) }. i! d

  634. # x4 P0 i' i. x( T! i& v
  635. BOOL bFirstChar=TRUE;% i, `+ J! h0 E7 z. M
  636. 5 K8 m4 q0 x& r8 W+ O7 ~* J3 J5 V/ s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    " i) ?, b5 A1 q4 }0 b
  638. {2 Y3 d' K: @  k. P9 ]% N
  639.         // TODO: Add your specialized code here and/or call the base class, r1 \; ~5 ], l2 @# i% l$ E2 j. i
  640.   switch(dwProgramState): g2 P% F8 k. Y* {
  641.   {# x1 B0 [" C% v$ o. K, P
  642.   case AP_NOTHING:* `2 V/ r* u% [4 e0 Z
  643.     switch(dwStartUpSteps)- K% U9 N% Y. o6 o& R! b7 b
  644.     {
    0 `, _3 {+ K6 K9 X
  645.     case 1:3 p6 N+ D' F, p( H/ y. w
  646.       {* A' ?0 p8 E* \, D" G8 Z9 [
  647.         int i;  D3 H+ g$ K% w( ?5 J% S% U
  648.         CDC *pCDC=dlg->GetDC();- ^( U4 O. z2 D; R. ~6 c& K
  649.         HDC hdcwnd=pCDC->m_hDC;
    1 _4 r* m- `2 S5 e* {# P" }8 ?
  650. //        Graphics graphics(hdcwnd);- z" @/ ^+ w6 e- @* _) p4 p* u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");) p' [$ U: F/ H4 z  x% A& u
  652. //        INT iWidth=bitmap.GetWidth();
    9 Q/ Q0 W% r: e
  653. //        INT iHeight=bitmap.GetHeight();7 S" q$ y1 \- y/ z( x1 X
  654. //        Color color,colorTemp;) P" S2 A% i7 s) V
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    4 e3 Y  ]" a' B* z  s8 J
  656. //        {1 N* k, ^0 Y2 Z0 M- U
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    : C2 z# z* Y, a! {3 Y& v
  658. //          {0 y" N- F9 n6 `1 @
  659. //            bitmap.GetPixel(iColumn,iRow,&color);) d( a; C( R: i( g( n7 \
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 \8 D0 ^5 N9 u& j( p* s* ?
  661. //              (BYTE)(255*iColumn/iWidth),
    ! v2 g) H) ]9 ~1 d. N- d' E
  662. //              color.GetRed(),
    7 B+ b& H& E7 m8 Q1 K2 y$ u
  663. //              color.GetGreen(),7 d& o, u" f9 u, T
  664. //              color.GetBlue()));! }0 S) q( E0 h6 w6 {3 X. \% `
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ; U' n3 f1 V; D2 f" d' P# _) k
  666. //          }
    2 @: h; `; [  r
  667. //        }8 j& w6 C: `7 r7 R6 ^
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 r8 v1 J- A. \: O# v4 T& h
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ c4 Y. ]$ K- }) `4 |+ N) i
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");/ x) h, h. F+ g! `( R& s- R
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- T8 y5 j! q& K5 k6 p$ V& Y5 w8 W
  672.         for(i=0;i<240;i+=8)% T; ?* m7 X; ^; j. M- [& q2 e8 P
  673.         {, d# B! B5 U; d" d$ g9 q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. S! H; q( r  K: Y7 [
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& t& F- A3 S  e- z
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) ^$ w" V! W3 V
  677.           Sleep(33);% n4 }  m! }7 {$ `
  678.         }1 @( ^$ y, M/ n6 H2 H; S2 B
  679.         Sleep(1000);" |( [# L) C( o' p+ c& \/ a5 x1 K/ \
  680.         for(i=240;i>0;i-=8)
    ; d4 M+ O' }, O1 R1 x
  681.         {
    ( o' k+ d# K3 }: _
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);* o/ k& X" y1 F" m9 n1 e" ^6 O
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ) i& m; D) ?. ]( H! i- D- K
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);! L$ g) P4 K6 J( I" A/ J1 }
  685.           Sleep(33);1 b9 {8 l1 ^/ g  k% c
  686.         }  V" y4 P! j! E  D9 N
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);; V. v- N8 y6 L/ w' A4 T
  688.         dlg->ReleaseDC(pCDC);+ J/ Z4 T( M7 ]& x
  689.         DeleteDC(hdctar);
    " d9 U, _# T9 h, [/ {; J
  690.         DeleteDC(hdcsrc);
    . e3 d; u  N7 w, M$ V" }
  691.         DeleteDC(hdcorg);( l3 p# _( d* T% R) [
  692.       }" L+ C. V! b" \) e/ [  M9 C: v
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);8 a. _$ J2 P( l) F4 \! s9 G! B
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");0 A$ T) k; Q/ \7 ~% B/ I1 z4 t
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    4 P; O1 |  T! z3 K' ~, Q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");9 w: k" A. Q6 g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( a( z, g0 l( a* M
  698.       if(!Dn.Connected())
    / A" T+ ?% u% k  B+ |
  699.       {
    ( T+ I1 C( D/ ]- z
  700.         dwTotalFiles=1;
    9 @4 X3 i; V- i: x5 F
  701.         dwDownLoaded=0;
    : K. s. m, S3 p
  702.         bSilentStep=TRUE;4 \% o7 x0 p* P+ V- S
  703.         bCompressed=FALSE;
    9 e" v( F: v5 t2 i% q8 o- N. L8 @
  704.         strExtLocal.Empty();, [% s* @) g$ A4 L
  705.         strFullName="readme.txt";
    , ]* P% i" r1 D( W
  706.         dwProgramState=AP_CONNECT;% s1 s! H# ~' g- `7 E8 V
  707.       }! o; e4 h' v; n5 g" T3 [
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();" m1 f3 b9 w! q- j
  709.       dwStartUpSteps=2;
    # Z- H; Z( h6 l- g+ E
  710.       break;
    ) ^  t, q7 @! G( S) B8 j
  711.     case 2:
    % t4 _; e0 f. k- S
  712.       {
    7 w# m& d# [/ v  N
  713.         int iEOF;
      g/ n9 s7 ^9 \' ^' q( o% P6 A
  714.         FILE *fp;; ?% o+ @8 l3 [) ?, K5 n% e4 K
  715.         char szString[512];, F. `0 d  |! Y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    9 m; w0 K  w1 R. c4 T7 o
  717.         if(fp)
    % Q4 _' _0 d5 Z5 s) h- k( @7 H7 J
  718.         {
    3 c/ w; N4 \8 ~3 e; L/ s+ ]# u2 {
  719.           do
    & _$ S# Q, ]+ S# H( H3 V
  720.           {
    8 |) j; V6 f& y6 k: I, E8 l
  721.             iEOF=fscanf(fp,"%s",szString);; |. b3 w7 [" k5 ^  c. |7 L! t, g
  722.             if(strlen(szString))
    " m' _( Q2 N8 {( _! R( f( U8 _! z
  723.             {
    , U4 M; l5 U& |/ O& r
  724.               if(bFirstChar)
    ( S7 [3 U! {9 {3 ]( u6 s/ A3 U
  725.               {
    . U+ e1 Y2 W8 M9 O* f4 ^$ n/ |
  726.                 bFirstChar=FALSE;
      Y1 j3 ~" H; A1 Y2 d5 j' t9 B
  727.                 bConnectIsBig5=FALSE;9 a7 C- ^7 v8 c
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;1 p" _, A9 h" W) T0 H
  729.               }
    3 u5 A; l" ^) R3 E
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- S, R# T- G6 `3 B3 h
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - n' i3 ~' F# l* b
  732.               dlg->m_ListText.AddString(szString);1 I6 c' `: x. X$ L/ h, K
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ v! F. L! i, u! Y
  734.               *szString=0;
    0 @+ k# {  K6 |/ S# A! f  p
  735.             }
    $ K# o4 j/ n, M3 ]
  736.           } while(iEOF!=EOF);) p, B) b7 e: X( `3 D: R, s
  737.           fclose(fp);
    ) l2 F4 a3 T3 k( b0 K+ y6 Y. _/ Y. k
  738.           unlink(".\\DownLoad\\readme.txt");6 D5 @( ~3 ?# O+ j$ P
  739.           dwStartUpSteps=3;8 P' P4 c6 `, f0 E) j
  740.         }
    ; E0 D6 y: o4 |- J% w
  741.       }
    3 h9 h" y7 W& K8 R, b: N
  742.       break;% i- n9 l/ A# R7 ]
  743.     case 3:: t8 [) ], d3 ?
  744.       if(!Dn.Connected())
    & t9 ^9 I* l, w9 Z" [6 b; L
  745.       {
    7 q+ n% e+ f) @3 O
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);) |( [9 B( S( }" Z( E- `+ y) j) o
  747.         dwTotalFiles=1;
    0 [  g, p6 j& ~% d1 n4 u6 R- h$ K
  748.         dwDownLoaded=0;
    ! A% c. S9 H( p. C7 h
  749.         bSilentStep=TRUE;
    - J7 N2 u7 T. S
  750.         bCompressed=FALSE;/ v/ r* g- n4 f" K1 F6 d
  751.         strExtLocal.Empty();7 n) l2 L& @4 w7 D: B" n  ?- k
  752.         strFullName="checkversion.txt";
    " N: O  N7 O- `2 ?! [( n. L& g% H
  753.         dwProgramState=AP_CONNECT;1 r; `3 S$ W: L' d4 i2 I
  754.       }
    4 ^' d0 j5 t) O" s- }4 |! G
  755.       dwStartUpSteps=4;
    4 n7 H' X! |" \0 U2 M2 p
  756.       break;& J$ j; o( g& k9 c
  757.     case 4:
    ; R. e& E. N6 }2 D" q' X
  758.       {
    ' @  E6 Y) O, y, n2 s* b5 k
  759.         FILE *fp;' s# P# B; T% s
  760.         char szString1[128];
    9 m# a+ Y6 F; z/ Z3 e8 e6 t+ r& P
  761.         char szString2[128];
    2 f  \. @2 [# F/ V; a
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' z+ N' A. M+ ]7 i
  763.         if(fp)
    . |% N4 B+ M8 Q# w
  764.         {
    5 @3 J9 f' V& O3 y8 Y6 o. D2 A  e
  765.           fscanf(fp,"%s",szString1);
    $ x/ ]5 f, T4 }- d  W
  766.           fclose(fp);
    ( B0 i2 s" b, ^' V
  767.           fCheckVersion=atof(szString1);
    ' s/ H% h1 g  {# r, |9 s( \2 X
  768.           fp=fopen(".\\checkversion.dat","r");" B! x: S/ b) T4 m: w$ z2 Q3 ^
  769.           if(fp)1 @1 j) e+ q$ J
  770.           {4 X$ u$ _( g# v% g  }. f: J; V
  771.             fscanf(fp,"%s",szString2);
    % p$ l; R% Y) ?, A) b# q
  772.             fclose(fp);
    # G. [8 U: t; d3 H! M
  773.             if(atof(szString1)!=atof(szString2))& Q1 d* e, w" n+ f6 y
  774.             {; b" e7 N5 j5 w$ I+ X
  775.               if(!Dn.Connected())
    : g+ o8 N7 M' u- n
  776.               {
    " `. a* j7 _2 \- b
  777.                 bFirstUpdate=TRUE;. g1 F. }+ h* P& Q, V+ a
  778.                 dwTotalFiles=1;& U# o6 f  v% @7 \, S7 g4 u+ Q
  779.                 dwDownLoaded=0;5 U' ^7 o! h7 Q, d1 Y$ p" A- M
  780.                 bSilentStep=FALSE;" D4 T0 X9 R4 Z8 v
  781.                 bCompressed=TRUE;
    - m/ e$ j; L9 X3 p: ~" `* o3 }
  782.                 strExtLocal=".\\DownLoad\";
    / s! n  M! p6 X- P" O
  783.                 strFullName="update.txt";
    ) S0 z+ }/ @1 W% M. r- t* Y
  784.                 dwProgramState=AP_CONNECT;
    2 q; X+ ?. l5 J. U, j
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / g& a' c$ O+ M
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 H. F) j5 E6 m2 N  f! ~
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");8 J4 r/ Z$ K8 e" ~  |( b
  788. ; S  O( F! @( T" R& n
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # F& @' L( S# T! ~& z1 `
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    % G* J+ m) z6 F2 s+ r/ r8 _
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
      o: _4 w2 M8 c( ?
  792.                 {9 p" x4 J! j( ~! A% c# ?8 m
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : V$ ?# v+ T5 k1 W
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" ?6 _3 e, f+ A( s$ R
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    3 z1 \" p( C+ K; z" @
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / y" j' c! B& Z+ [: {1 n
  797. 8 d# ]* \6 n2 k$ m4 P3 {
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    2 S+ F5 i% t* R) h9 u
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* s7 `/ z# ?! E8 f) m9 Y3 E- |9 P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    : L+ v- J" n, b. D3 J* Y, h" a
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : Q+ ~5 `, r1 P+ q: C4 b
  802.                 }
    . W0 L( c) P8 j% i. `  _
  803.                 dwStartUpSteps=5;# [7 n; f: ], k/ r
  804.               }- A) h7 o4 J8 @6 n
  805.             }- r% C: K% r4 ]; A6 ^
  806.             else3 U0 }6 x+ d4 t$ K, ]1 q
  807.             {2 ?! y" O2 e& C6 |" v  S
  808.               unlink(".\\DownLoad\\checkversion.txt");  Y& L! w2 k4 N# |  S, K  Z/ t
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* T. x1 [! c$ U, \% y" b2 y* O
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 j+ z* Q5 d5 t9 X' Z" N9 B$ {1 |  T4 m
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");. X. T! s7 B, C2 G' s* r

  812. - |8 x9 f7 ^6 \2 ~9 c# g  t
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 R. G5 X1 ?* }' u1 g. @
  814.               dwStartUpSteps=99;
    ( Z; C+ \- e* y: Y  ^. L
  815.               bFinishUpdated=TRUE;; z5 P3 [" m6 o) {( k
  816.               bCanUpdate=TRUE;
    3 k: v  n0 ?* c2 |! |* B
  817.             }: d8 Z6 q% ^& Z7 ~" H+ ?8 W. S, A
  818.           }! K8 N4 t4 f1 J( {' q) W. e
  819.           else
    . W5 b! i% e; G, Q( S9 D# P
  820.           {
    : F6 m; B) x  E) _; f6 ?; f
  821.             if(!Dn.Connected())
    7 p6 ^7 C/ p) _$ `
  822.             {: d: b9 Z6 I2 c" T5 N# O+ G4 E
  823.               bFirstUpdate=TRUE;
    9 q: {  T1 @. U
  824.               dwTotalFiles=1;, U5 k8 t7 n! E. x
  825.               dwDownLoaded=0;% X' j; s: r2 V3 b9 E
  826.               bSilentStep=FALSE;" a' P8 S1 N' d* k- e" ~
  827.               bCompressed=TRUE;! M1 D8 j; B( M: x) A
  828.               strExtLocal=".\\DownLoad\";
    + |+ @3 \  e8 q( w: p
  829.               strFullName="update.txt";
      _2 A! y. O; d7 O5 ?* a) q
  830.               dwProgramState=AP_CONNECT;: _4 w9 n9 x& Z- B' S8 x, L3 q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 |, [9 O$ b( s+ w) m; C
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ D( h2 Y1 l7 D3 a8 s
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");2 T+ ~+ @2 v  q& v
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 I. }: S8 p2 |$ T7 \2 _
  835.               unlink(".\\DownLoad\\checkversion.txt");6 T' L* E9 s% p7 ^1 \
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    " T9 V( ]+ f' t8 t: |6 T. c5 S
  837.               {
    / i9 y; p3 b* V) Y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    & ]0 z6 t: w7 ^4 v9 k: r
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");( b* J3 S" {) v5 {& p
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    5 L# D. `% m9 {. v4 {. {
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - k1 P8 u" O) o/ Z0 x1 n
  842.                
    , K' _" v  c1 ^) a: ~0 ?% J
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % b5 l9 N. x; s! a4 p3 a: Y! A
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ Q' f5 V9 l4 c# A2 U+ m
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");5 c# d( M% T+ n2 S6 w2 {" I
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' N* F) d. @1 ]$ A1 T$ f- Z# X
  847.               }, L; k7 G+ b0 B6 l) L9 q0 E# T- P2 S
  848.               dwStartUpSteps=5;
    , n" Z# ]( X6 M# C4 [% U
  849.             }
    3 K; H7 l4 D8 g, c5 @( a8 }
  850.           }
    # r* K# b' ^* Y- V
  851.         }
    5 V% E- p+ x7 ]) Z. H: l
  852.         else
    6 m' p  T( V# m3 A
  853.         {& V( q3 x  k4 {* _# h0 R3 g" V" L
  854.           dwStartUpSteps=3;. i7 e2 S( R; J0 g2 N/ N
  855.         }; P5 A' R2 d5 M" x0 b1 j
  856.       }
    * B7 j( W5 k5 M& d8 m
  857.       break;
    $ p  n% D' k5 r5 u) J; _! W/ J: m& ^. K
  858.     case 5:3 }9 [+ N/ x# R" y
  859.       {
    . S1 W& X7 P* j; O; }0 Z
  860.         if(GetFileAttributes("Wsa.zip" )!=-1); H+ M: R# c+ b- A! k' P8 [0 f* {
  861.         {( l+ k' Q' C; V
  862.           int opt_overwrite=1;
    4 u/ S. e% V; h; n
  863.           int opt_do_extract_withoutpath=0;
    2 ]6 O! @5 B* [
  864.           unzFile uf=NULL;$ I% {* r( m5 k
  865. ) n/ }  Q' K* d  a6 n
  866.           uf=unzOpen("Wsa.zip");
    4 K3 q  L' c! N# O
  867.           if(uf)
    $ _( W' k; @& V# `( w" g* N, B
  868.           {; J( o* `. l4 z# ~* ]2 u; d" N
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);" {. g8 U6 V! D1 O* P; Y9 T, a
  870.             unzClose(uf);
    8 \+ F: F7 ], W; c/ [. i' s' s& O
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");8 h5 x4 n! h2 E+ z( b( M  o8 N6 y
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");. j5 W7 o. w! r3 ], B8 i* c$ O" N; c
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    # u* f  r5 L% U4 T( ]# c; e( Q) U
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , Q; p/ C2 k! c% e2 M* ^: E
  875.           }
    6 L  k: |; S4 C: ~
  876.           DeleteFile("Wsa.zip" );
    % I$ G+ B+ u+ K) \
  877.         }1 z6 A0 G3 B- N4 D

  878. & r% X. G! ]! o: j0 }- H3 |
  879.         if(CheckLocalVersion())
    6 f- a% \0 c& Z) U- g
  880.         {
    $ q, u3 l* S; ~- `: N) ^0 G- O
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    . D2 V% w/ |8 W2 c. W" }
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    - ^4 ^, u8 _* t4 o- u+ }$ @
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");* Y# R( K/ x8 S* }
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- Z; ~# _0 @' o
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    . ]3 c1 x# Y' P  m
  886.           dwStartUpSteps=99;
    . a$ k$ f( d  N& v7 D
  887.         }
    3 o! w# L, m- V" d% c
  888.         else0 L6 J5 o/ I) B% \6 t
  889.         {% o& l) l; [' H; N( Z
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  k6 j$ g( ?* x2 J
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    0 P& [4 _1 ~- m
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");. I3 O; C0 f( }, {5 ]) E

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

$ {9 j" y7 z' x, K8 O. P$ N4 N1 k+ ?: P, X/ g/ @

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-2 02:47

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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