CSUpdate.exe源代码

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

9 {" c1 Z2 x- n* P! D7 E
  1. / RevApp.cpp : Defines the class behaviors for the application.2 D: ^3 L' t) L* g6 a6 W
  2. //6 n) e# l0 ~8 a. V' ^- k# O  n
  3. $ o, k) W/ Y" q1 K9 a- b
  4. #include "stdafx.h"
    - ]9 v; \+ i# q* _8 e6 ~
  5. ) [7 J1 F  F; ]  w! j
  6. //#define UNICODE# k# t; @" U: O0 E7 f! f
  7. //#include <gdiplus.h>
    0 p. h$ \3 j( Q
  8. //using namespace Gdiplus;
    + a5 n4 A- x1 G. I) J
  9. - u+ _3 b7 H- V4 _; A/ z
  10. #include "RevApp.h"
    ! r) \5 y3 I' J; w/ B) L2 _
  11. #include "RevAppDlg.h"
    ( V, B# {$ z/ p# P
  12. " @' c9 ]/ J: ]  @
  13. #pragma warning(disable:4786)
    & M* G% W- S# p& _6 m
  14. #include <map>
      E3 _: k2 J2 C
  15. #include <list>
    4 l- k$ _- e$ o: G  N" ?1 D
  16. #include <direct.h>
    . s4 n" s( B- z! w# x$ t

  17. % p/ @' l( G7 F6 x' O+ J1 L
  18. #ifdef _DEBUG
    3 W$ Y2 j5 V; _3 b; n5 z
  19. #define new DEBUG_NEW
    5 p" ?& P* u9 E" M) z6 ?
  20. #undef THIS_FILE7 Q9 I1 {3 r& S% V1 l% r9 N2 X) w
  21. static char THIS_FILE[] = __FILE__;0 P* k6 P: H" v( k1 h
  22. #endif! |% Y- _* ^4 q3 r! b3 k
  23. #include "SkinResDef.h"( H! G9 _1 d+ F- ]
  24. #include "ChangeBG.h"5 t7 V! M) }; O- a  Y* o% h! R
  25. #include "AFXINET.H"
    $ @% W  \4 ]9 y, M: e7 K8 D
  26. . e( D4 d' _/ i# M# I# M
  27. #define TRADITIONAL_CHINESE 0
    . |5 R  H; f9 o. b6 _3 s
  28. #define SIMPLIFY_CHINESE 18 b& O1 `& Q  ?
  29. #define ENGLISH 26 F2 g7 x: ^; d8 O' ]  J2 \
  30. int m_iLanguage = ENGLISH;
    6 b5 q3 K- Y+ \$ U7 L+ H+ j$ P
  31. /////////////////////////////////////////////////////////////////////////////
    2 L. ^: p) X( P
  32. // CRevAppApp
    3 N: P: \. o7 u- x

  33. . v. ]- G7 g' k7 O1 }1 j1 v
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp), c0 x  q' r3 s  `0 {5 k
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    $ S8 x! ~: M) k7 n+ P( B2 x, s* E' p6 @
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.& D* b6 o! _4 B. ?& E& B+ S. ]
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!4 b$ ^/ R1 r  @. K* y, ?- x9 X
  38.         //}}AFX_MSG, _; ~, O: |  n- f2 _5 C
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    . w) o* b' B* |& X: x6 G& x$ R* p+ h
  40. END_MESSAGE_MAP()3 o+ s) g5 S5 N' m& h# d
  41. . z  x: E( U% F4 s3 L
  42. /////////////////////////////////////////////////////////////////////////////
    7 |) X& s7 y" T5 e0 L7 @2 y
  43. // CRevAppApp construction1 y8 [$ n" r5 |6 \  X4 l
  44. $ R8 W& \# M' z% ^. R
  45. CRevAppApp::CRevAppApp()
    & K, y9 n& e2 M/ I8 A
  46. {8 c* _9 E; h) [, B- B- `7 q
  47.         // TODO: add construction code here,
    , |. _- c% e- a& }' o6 E: }
  48.         // Place all significant initialization in InitInstance
    5 J  r; g& h4 ]; J8 M0 S" }: D5 b
  49.   bDisplayIsBig5=FALSE;6 t. l6 N% d5 N" X6 X0 i
  50.   bRestartUpdater=FALSE;. a% L4 \# V) w& A0 |) y
  51.   bFinishUpdated=FALSE;
    " g3 L2 L+ {9 w* M) M1 k
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;$ l* n; h) q# G( p& ~
  53.   InitChangeDataBig52GBKS();/ E  [1 p, ^3 h1 L* F0 x
  54.   InitChangeDataGBKS2Big5();. Y$ D- c9 E& ^% I) ]) O; ]
  55.         //+ D. B4 N& e" Z& v: ~+ @
  56.         bClickRunExe = FALSE;. v! |' s  F/ D  w: q
  57.         //- `+ r" |$ m: g2 e* L: b
  58. }
    6 u  P- r& O" O7 A
  59. ( A5 T! V. U' r0 \1 G+ k& z
  60. CRevAppApp::~CRevAppApp()1 B. s. ?9 ~# R
  61. {3 R' y, C& r$ ], N
  62.         // TODO: add construction code here," g- d0 ?  m- U* n8 a
  63.         // Place all significant initialization in InitInstance
    : `+ H: B, ^1 p; |: e* W
  64.   EndChangeData();, r' Q" i* x' ^  A8 N6 \3 b
  65. }* X' v% D  W2 {+ q, J; m- F7 l

  66. 0 m: v' P% t0 c! {! f5 n
  67. /////////////////////////////////////////////////////////////////////////////
    # i& ^# l5 \, D4 ^, V/ w
  68. // The one and only CRevAppApp object
    " ?1 \0 g0 A' q& t4 ~
  69. - `5 j3 r- L- o5 A& T) |
  70. CRevAppApp theApp;& X% g3 G) I& _

  71. & j$ B1 H' h9 ?- N4 G, L
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    " K8 u/ I6 Z5 S) q6 B
  73. {
    4 q# m3 t+ t, y7 x* P6 g$ h
  74.   int iEOF=0;
    9 H& h8 l! n3 u2 I# C
  75.   char szTempName[MAX_PATH];; Q. k1 F3 F- O& L7 y3 b
  76.   *szFileName=0;& F* T+ O6 G) Q0 Z, g6 _, ~# p- G
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! m/ w8 W) H1 o6 E- ~& ^) d0 ^4 k
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    1 q6 j: M8 z0 l( F
  79.   {/ v% w3 c& e' {9 v& H$ b% _3 j
  80.     strcpy(szFileName,&szTempName[1]);+ A* k. s  Z6 U4 n! m
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    # U" K. y$ G1 r7 e; Q
  82.     {3 ?" H1 ]* P, V$ A0 R/ e
  83.       iEOF=fscanf(fp,"%s",szTempName);/ U& f* W6 A& o& W
  84.       strcat(szFileName," ");
    # H1 a( j% J8 {9 M7 p/ |
  85.       strcat(szFileName,szTempName);; v# b0 C! C0 R
  86.     }+ O7 I5 t) W$ k; `# I9 g( R( U, R
  87.     if(strlen(szFileName)>=1)7 N1 u1 H/ u3 v1 W+ y
  88.     {3 r* E- q: E  O* {* V: @
  89.       szFileName[strlen(szFileName)-1]=0;) Z$ b1 j; n$ d# W$ F' h
  90.     }
    0 z1 W, D2 F. G1 H
  91.   }
    6 I5 I8 n  ?. f8 P2 g" N1 R; ]
  92.   return szFileName;
    + e  q$ j  F5 e& n
  93. }
    ' r- L6 g$ C! }) T. H+ a
  94. % C3 d% ], m& Z, |2 Q4 C
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ) t! U3 {& P8 _% i) D9 o3 r
  96. {/ ~. o& Q$ C* R0 s( k" v
  97.   FILE *fp;5 t) @4 K  m% ]3 m+ \
  98.   char *key=NULL;0 b! L5 E, P7 ]/ n- E' l+ j
  99.   char version[MAX_PATH];
    . Q' C# ?( u. S+ `" U1 l( U" B
  100.   LPUPDATEFILE file,olds;% ^& |4 s3 D; `! ?$ n' s
  101.   std::map<CString,LPUPDATEFILE>::iterator p;) }* a6 O' p3 z( K6 [

  102. : n+ J' Y3 e4 A  B/ f' F
  103.   UpdateList.clear();& V3 P8 ]6 f4 I/ [6 G5 \6 G* b
  104.   UpdateFile.clear();
    ( }$ _7 I: S0 ~7 W# A% l
  105.   if(GetFileAttributes(filename)==-1) return false;
    0 h, Z: v. m' M6 n  e2 @+ a
  106.   if(!(fp=fopen(filename,"r"))) return false;
    * ]3 a9 l7 N; ?& I
  107.   fscanf(fp,"%s",version);
    . e2 ?. w* |+ X9 \: u- }& f
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . C. O" i5 P. j9 k8 z! }
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ! ~; D2 K: t) q- o" |# L% a, V' d
  110.   {
    $ R( b/ {0 t* Y/ R  K
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; j9 k" }1 l1 a, r( z
  112.     fscanf(fp,"%s",file->path);
    , _8 J8 U. ^. |% j
  113.     ReadFileNames(fp,file->file);* [7 }+ G/ @/ N+ z  c% ]; a
  114.     strcpy(file->full,".");
    : e" R' B; l, c6 q
  115.     strcat(file->full,file->path);; i- P- h3 m4 k" J4 G
  116.     strcat(file->full,file->file);
    " M$ b0 e' Y7 \) W7 h; _1 x
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    9 t$ }, E* z0 i* ]+ X; \7 M
  118.     {
    + M: y3 y+ R5 a: |# i+ o/ I+ `
  119.       file->vers=(float)atof(version);
    * d3 I6 w, M8 @+ [
  120.       UpdateList.push_back(file->full);8 K" i$ r+ t( g; P, |) l/ y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));2 i) f+ d$ W7 V" Q
  122.     }
    / ~/ u6 {- h% Q0 [
  123.     else/ c! d" r% r/ }4 [" m4 S8 o# y
  124.     {
    1 b9 Q3 y2 y- a* i6 }- @- C
  125.       olds=(*p).second;8 i, D3 m. ]8 K7 B* E4 b' G2 x4 Z
  126.       if(olds->vers<(float)atof(version))( K2 v' F+ P+ f4 P9 Z6 x
  127.       {
    ' j; F9 r) X" [% O; Q1 J4 Q3 U
  128.         olds->vers=(float)atof(version);6 A1 k( m% ^  {/ C3 S) L( d  A- K
  129.       }
    : p6 C4 S! E( U) c' k
  130.       free(file);
      o3 B. E" v& d
  131.     }) l% C$ R* c% m# z$ Q( L( b9 ]. k
  132.   }$ j- L. o7 r. b, v
  133.   fclose(fp);0 I' U$ z3 ?. Y( c
  134.   return true;
    & ~& q: ], T( ^$ _
  135. }
    % p, ^/ a  Q$ j9 @0 e: m  e" g; [

  136. ; ]" I3 U& B. A3 J
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  c* M( l3 B0 I' d7 r) Z3 \; E7 V
  138. {
    ; s3 b) ~' n0 G
  139.   TCHAR  szFull[MAX_PATH];
    " o4 |& B5 U4 Q5 o3 V6 z7 g
  140.   TCHAR *token,*inter;1 T' p, D( |5 @
  141.   *szPath=0;
    9 E# a# {* w' ?) v# }
  142.   strcpy(szFull,szFullPath);
    0 O- X; K+ q) w! V" N9 [
  143.   token=strtok(szFull,"\\/");
    2 [! ]+ \9 \1 M* L
  144.   inter=token;
    0 K  p1 U3 ]9 f1 @% }) w5 X
  145.   while(token=strtok(NULL,"\\/"))- a9 {1 A( {2 V3 H0 q7 y
  146.   {) p/ Q# R' ~. L# s
  147.     strcat(szPath,inter);/ n1 h5 L3 t* }" b& P
  148.     strcat(szPath,"\");8 m8 B# n) A5 t, I8 D3 P- g! V$ P
  149.     inter=token;
    : l% E  @# s1 l, w
  150.   }6 g) p% K& `/ E5 g/ [& g, Z9 R
  151.   return strlen(szPath);0 u2 N" T1 v1 Q# A
  152. }, e; o9 ^+ e: ~6 i

  153. , S, O6 o' S; t' d5 ~- @5 b" R% X
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase): j) s8 A' s6 ~$ ]
  155. {: @( a, z( z! l! ~* P. B
  156.   DWORD attrib=GetFileAttributes(Target);
    + P4 e+ Y4 l( [$ M: ?' v
  157.   if(attrib!=-1)
    4 w- c, @" |9 @# Y+ b, Z1 ^& ?- e
  158.   {4 ]) i% F$ S* {+ G  a# t$ |
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ; C$ E: @2 o. d3 \
  160.     {
    ; s& Y( o* \; G9 t- i
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);) f) i, c" _1 J  M& q0 q: l0 h. T
  162.       SetFileAttributes(Target,attrib);8 a" J. A6 U6 K" q0 j0 n
  163.     }! ^) T3 K  }9 \: L% l
  164.   }
    4 o* j. i* ?% [0 }- r  W
  165.   CopyFile(Source,Target,Erase);
    % F6 e3 P% I9 G+ R, b
  166. }( U0 o0 Y! C# ~3 u3 O
  167. 3 b7 R. I  _4 j# b/ t5 c4 h8 I6 H4 Q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)5 r& z! z2 H! h# K0 f; \
  169. {- O) B+ J7 j2 a5 J# R1 }, Z* y
  170.      FILE *fp;
    : z7 `3 o9 r2 X! R$ @4 b: P, \
  171.      char  szBuffer[8192];
    ! e- }+ Q  F# u8 V$ Y
  172.   va_list  argptr;
    1 ]3 t5 y2 l7 Q2 y7 |
  173. # i- V8 c  N2 b8 e; B8 ^
  174.         va_start(argptr,message);
    , n/ @% }9 F( U8 T' B) A) f; {6 ?, p
  175.         vsprintf(szBuffer,message,argptr);. g" x4 @/ T0 }6 R5 a5 k7 C" h7 x
  176.         va_end(argptr);6 q- x7 P2 q! L9 S# N
  177.   fp=fopen(FileName,"a");
    * w. `; u0 \9 n) _) H
  178.   if(fp)
    ) X/ N4 f7 O- q4 V' v
  179.   {
    # D) Y0 P8 ~3 Y, H( I( J/ u
  180.     fprintf(fp,szBuffer);/ @* F% P, ^6 ?3 c
  181.     fclose(fp);- r, ~/ v3 Y; Q5 o
  182.           _flushall();) D! ^+ p; J/ s+ v- ]+ H
  183.   }, C: P+ U/ P: c5 M8 E
  184. }
    . x$ \+ E7 Z# f0 y; V+ G5 |% _/ c# }

  185. - q" v( \8 r; `8 v; `
  186. BOOL CRevAppApp::Fclearf(char *FileName)! l" R' C  _# ^- Q2 h* ~
  187. {" ]% s; k( x7 U! ]% F- x& [
  188.      FILE *fp;
    : u, @1 P* r  S. Q6 U8 w$ V
  189.     DWORD  attrib;6 \, |5 q; f6 H& r0 Z# l. j+ i1 m
  190.   attrib=GetFileAttributes(FileName);& h! y! f) f! ?  Z5 k+ y# K% h& `
  191.   if(attrib!=-1)9 V  O; ]+ H2 u
  192.   {/ y+ ^" ^. ?6 T1 n# U( J7 q- o
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ) ~4 b4 }3 L" c; F  z% |& k' V
  194.     if(!SetFileAttributes(FileName,attrib))9 T# o/ n) B# q, a" r9 }
  195.     {7 F; U* o- R, r5 m. v7 G2 g; c. T& Q! l
  196.       return FALSE;
    3 u7 c$ S+ I3 @+ z% r2 y* u6 h
  197.     }
    , Z3 {8 I3 K3 l$ _# l" [  ~
  198.   }/ h( Z3 g/ ^) x. W
  199.   fp=fopen(FileName,"wb");/ `7 n6 V- |* \
  200.   if(fp)/ U$ V1 d$ ?7 I. G1 `" W& x& P- N7 r
  201.   {" x5 z4 {; y3 [" l
  202.     fclose(fp);+ [5 J/ ?9 ?9 S0 \
  203.   }0 K) ?# s5 O% `' r; T. \) Y6 N
  204.   return TRUE;* S9 h) r) ^& V8 r
  205. }
    ( `7 |; ?# M" f

  206. % X! O( U- D7 F0 G$ x3 {& P
  207. BOOL CRevAppApp::UpdateLocalVersion(void); c* Z7 i3 L5 n. H& R# X! g, ]
  208. {2 X7 l& j# e' D! m5 c: ^" J4 D
  209.   char filename[MAX_PATH];
    9 e! [7 w2 o+ L0 v2 s
  210.   LPUPDATEFILE file,olds;2 T2 K; Z2 Z2 N. W4 m) j
  211.   std::map<int,CString>::iterator i;) z4 b: G* p5 W  q6 R( Z/ w
  212.   std::map<CString,LPUPDATEFILE>::iterator p;; ~( e) R! v( b$ R8 Q
  213.   std::list<CString>::iterator l;
    5 G4 f+ I1 H" @; \$ u7 |

  214. " W1 [  c$ A4 V7 h" ~+ H9 J0 `0 s
  215.   if(bFirstUpdate)% A# J' b9 ?5 A' M
  216.   {$ q7 o7 ~7 b% F1 w6 D
  217.     dwCurrFile=0;- L- ?' q. ~3 g) F
  218.     bFirstUpdate=FALSE;* t4 F+ g6 M/ z9 H
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ U$ p6 k9 s8 g/ m
  220.     {6 y  B. @2 H/ r' Q2 o
  221.       dwTotalFiles=UpdateLocal.size();
    3 c  m9 s* T* P' F5 X% D  f5 _: ^
  222.       dwDownLoaded=0;6 L2 Z: X0 ?% k8 w& w" o# }
  223.       bSilentStep=FALSE;( Q! S3 Y/ e7 `5 \9 ~+ t
  224.       bCompressed=TRUE;
    , m7 A/ L: h/ N0 L
  225.       strExtLocal.Empty();
    2 W& L& l7 q# j; h1 e9 J
  226.       strFullName=(*i).second;+ |/ \+ }, P/ S9 F' S8 h1 X
  227.       dwProgramState=AP_CONNECT;
    6 S: @4 h" D) i1 C" h* T$ a
  228.       return TRUE;0 K! x1 {$ i5 \, i: c
  229.     }0 n) X. H* ~3 ^- O% `! s8 U- q
  230.   }- Q& [$ Y* k5 O, s9 ^- {( H
  231.   else if(bRestartUpdater==FALSE)
    5 E! }% g$ y7 X- ~& ]
  232.   {* L  K- L+ V0 F# s( A
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- B% f* \2 J; [* T, c! j
  234.     {$ N* |8 ~8 p! a% w& U" g: \
  235.       file=(*p).second;
    5 v: B+ [( W) o! s3 W3 @. r
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    # d/ [) x( r3 ?& e- f5 P5 d3 b, A
  237.       {, i+ J; `5 T7 t
  238.         olds=(*p).second;
    ) T2 t2 n$ J& B  ?/ ~0 i
  239.         olds->vers=file->vers;
    % z$ u: J: c% K: O' B
  240.       }! S5 U3 s$ B7 u8 N1 V8 f6 s5 B
  241.       else
    + d- g. W; U5 ?% [# u. o
  242.       {# }2 J3 |- c9 A( c; E9 P
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 ^4 b3 y/ c8 Q/ }2 i2 c
  244.         memcpy(olds,file,sizeof(UPDATEFILE));& c2 R9 p. X( Q3 F, r" A, u4 I0 T3 G
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    8 N( Z# p# Y4 r4 E
  246.       }
    5 w" _+ y; M8 u: r8 s% J: \
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");7 G! \' t5 D, i! B9 i( {' h6 J2 y/ V
  248.       sprintf(filename,"(%s)",file->file);
    $ t' M$ [. G- \4 h3 M- Y0 L
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / f5 U  U7 _& q! }, @  ^
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }" ^) b5 F& |) B# [0 O0 u
  251.     }
    % h# I3 Y+ y% u! [5 u
  252.     dwCurrFile++;$ X$ Q2 W0 N/ A: g, i
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    9 A1 E4 Y" F% m8 o8 k, C1 T
  254.     {
    3 U) \$ `$ n" P
  255.       bSilentStep=FALSE;
    - d4 s) T: M4 _8 K  W* L( f
  256.       bCompressed=TRUE;
    $ K6 i- \) R- ?: u+ s
  257.       strExtLocal.Empty();
    4 t  @8 e4 w; t  ?1 _# l
  258.       strFullName=(*i).second;2 b3 V# I! {8 n1 N% R  b
  259.       dwProgramState=AP_CONNECT;
    4 u5 ?6 G3 F- X  n
  260.       return TRUE;
      `# ]# p. [/ v' S" H
  261.     }
    ( o" `. H' Z0 M" w; A# O
  262.     if(!bRestartUpdater)* W$ n! m6 u, S* J
  263.     {  a* A4 w( v$ Z" G: P& N6 `( O- a
  264.       int iCurrSize,iFileSize;
    ! O9 A; L) ?# j' A! h" Q) z
  265.       iCurrSize=0;
    3 p& d' T6 l# N
  266.       iFileSize=UpdateList2.size();/ |0 R4 p$ t6 _/ l, O  t7 q+ j) [
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    * m5 f6 J0 m: u; j, ?; r0 A
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    4 p: t# n# B7 @: K/ R. Y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");7 B6 W" L5 D8 v% F, S) F+ j$ v
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& J8 p8 F2 x% [) T
  271.       Fclearf(".\\update.dat");) m, `; ?4 S8 V
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    2 @1 ?5 a7 i0 M- u0 A, L
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) t; n/ j  h7 c* {! I- S, Z
  274.       {
    ! S, u( `/ P6 C0 K4 ^5 h
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    0 j" o; \8 ^  {) I+ o
  276.         {
    6 G; `( ]4 }# l! E' e
  277.           file=(*p).second;1 O1 B* q0 t9 [4 ?2 d
  278.           sprintf(filename,"(%s)",file->file);
    ' m( u) o1 w6 e; M  C; O
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / Y( ]4 y: e1 b5 v5 {: ^4 t
  280.           iCurrSize++;8 c- {# k0 \0 C/ b4 y6 g; h
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
      h; \+ S& z  x7 h# h
  282.         }
    ; x1 V# d8 U8 x- ]' I1 V
  283.       }  n4 G( G' d) K( Q- G
  284.       unlink(".\\update.txt");
    6 p# |  ?( G2 z# h( [! V! T6 ]
  285.       unlink(".\\update.tmp");
    ; `5 F/ T6 f! H. G) J* `& D
  286.       Fclearf(".\\checkversion.dat");% T" b* `+ W7 y/ N* p
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);/ T* z2 e3 u* Q% {+ M! H
  288.       if(UpdateLocal.size())
    % _$ p. t4 o/ A1 M% o& y3 B! ?% z; q0 \
  289.       {2 o$ |% r+ T2 n
  290.         UpdateLocal.clear();8 I& H6 z* S+ N  U$ K4 H% d4 \6 H
  291.       }
    , R: G, Z1 L" H$ ]7 c8 |" P' B+ ~
  292.       if(UpdateFile3.size())
    1 j1 y  ^7 S8 T
  293.       {
    ( P  u8 I" R+ o
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . F- U, p+ f) z0 B& S  ]* N3 g
  295.         {4 M# E/ \3 D: q9 Q, D8 `7 m4 i1 O$ Y  A
  296.           file=(*p).second;: n! M; m8 ^. R2 F/ p6 r" T
  297.           free(file);% B: O- ^& C3 m
  298.         }, M4 u' z2 G( w% z1 L% M
  299.         UpdateFile3.clear();
    1 @4 ~% @* P1 n" N  \' ]
  300.         UpdateList3.clear();
    1 T& P. U7 A, l8 J8 m8 c  B5 a5 z1 G
  301.       }$ i+ B# I) Y' n8 t: S- `
  302.       if(UpdateFile2.size())
    % R: _) A5 u: r% ?, c" j! f
  303.       {7 A9 l7 ~) s. |( c1 k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ j. g4 ~% h9 a" W
  305.         {( @! \% c  Z; I
  306.           file=(*p).second;* Z3 g; k& ?5 F
  307.           free(file);8 n1 J' s6 s9 Y
  308.         }
    8 l$ H: A0 w. E+ W; p
  309.         UpdateFile2.clear();3 [7 k4 C% J, e
  310.         UpdateList2.clear();
    + C' g9 y$ }/ }' G
  311.       }9 q, Z$ j4 ~6 S9 I
  312.       if(UpdateFile1.size())
    3 o- N3 V1 C8 k. t: W
  313.       {7 S. {7 X) P+ @# f* n: u
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    2 L2 v3 c. x+ D- V% c
  315.         {
    5 ?* }) [6 X- f
  316.           file=(*p).second;
    & Z! G9 U+ c  I& e7 G( P. e
  317.           free(file);0 ?! v7 V3 x- S8 D# ]  u' z
  318.         }
    ( O+ H) N' m" H+ I+ |2 B2 u# g* T* {
  319.         UpdateFile1.clear();/ W2 a0 ^6 w1 P
  320.         UpdateList1.clear();
    . \, U5 S1 O1 }; D8 T( ?
  321.       }1 r3 U- E* j% x7 r6 j6 j
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' ], H- `' h8 k
  323.     }
    7 x6 [- z. v" p) M0 {6 J9 c( v$ F9 B
  324.   }$ L0 L8 M5 r0 g3 O- N
  325.   return FALSE;
    ( T2 {- y- f6 ]/ b  @. n
  326. }! \- a6 [3 V* S, p

  327. / `" J+ s& m9 Y( f) M6 x, J
  328. void CRevAppApp::ClearAll(void)
    ! _3 p0 R( M, z) ?2 t- V* n5 G( R
  329. {$ ^8 ]( T# \4 D; }# g0 t$ t* Q3 o
  330.   LPUPDATEFILE file;+ n. O0 y5 ^  a3 y7 z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;- D+ h+ h, r% U2 [& D& H  x

  332. 4 t, ^3 a. `& b8 X, W5 Q9 Q
  333.   if(UpdateLocal.size())
    3 F5 n' ]% `; s2 ^7 k. l0 T
  334.   {0 W* K4 U6 w' d
  335.     UpdateLocal.clear();
    / e4 Y  y& Y( ]8 ^8 l: B: f# Z2 U
  336.   }
    ' o5 h9 q1 X$ ~3 \9 T
  337.   if(UpdateFile3.size())- K! q- ~0 O0 Q4 s
  338.   {& b4 b/ ^/ B& _: `
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* `3 d! R$ \. a+ Q" M
  340.     {
      T* p+ S, P3 e7 J- y0 q
  341.       file=(*p).second;
    1 |! D8 ?4 ]) {; @0 t# [
  342.       free(file);" ^' |! h9 v/ k$ {" |; H0 Q- ?# [
  343.     }* ~) A/ _/ k: j1 {; ^* }3 N; Y: v6 @
  344.     UpdateFile3.clear();
    5 m. E' A5 H8 X5 U
  345.     UpdateList3.clear();$ L( {2 i+ m/ Q! P5 N# |
  346.   }
    " |- g/ e& n) d! V3 m3 U
  347.   if(UpdateFile2.size())
    1 H2 Q" B# [4 h1 {
  348.   {
    . G7 d0 Y3 v6 R+ y* F, Z) |  M( s: p
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 B9 ^4 m3 c3 J. w4 A
  350.     {
    / N, R% W: e9 U$ C4 |; t
  351.       file=(*p).second;, J( k# I$ J5 b5 E0 C/ Q
  352.       free(file);
    $ t& U' l2 t& z: W; O
  353.     }
    & t6 F6 b- K/ ?# y# g, v
  354.     UpdateFile2.clear();: P# l" N; X# y/ X' u/ I0 i1 M
  355.     UpdateList2.clear();
    : p' Z3 A) v7 e* J3 [3 j
  356.   }
    9 h/ i# H/ F0 z$ r# Y) q* w
  357.   if(UpdateFile1.size())
    7 Y) c8 r5 K( O, z( c% _
  358.   {, H& g- C6 a: x" I6 }- p$ ~% Z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    1 d& D% B+ }/ v6 [& H
  360.     {
    8 K* w! q9 @! L% [
  361.       file=(*p).second;- |# L0 Y% O3 h1 [! [
  362.       free(file);# N% \/ r" I1 q, ?
  363.     }
    , O$ {# A8 i3 l
  364.     UpdateFile1.clear();$ q. z# f( M/ C1 B
  365.     UpdateList1.clear();
      c: C: V; ^' S0 ?
  366.   }- q4 Y9 D3 P, X4 h
  367. }  $ G; t- p6 l$ G8 F1 F6 e( d3 H& C
  368.   8 p7 J9 S! G; G7 B( H
  369. BOOL CRevAppApp::CheckLocalVersion(void)# y8 y1 y3 `& g3 ?" N1 }* Y2 O
  370. {
    7 f; d  ?5 R/ W/ J0 \
  371.   int c;
    # Z1 `" Y0 I% X9 V; J) |
  372.   LPUPDATEFILE file1,file2;
    + ?) s+ O. I- o) B; H1 S
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ) f- j: s- v" S5 N
  374.   std::list<CString>::iterator l;
    / S; w6 x+ f, r$ u% C/ A. n

  375. 4 S  f$ O& N! p! q" o  M) `, M
  376.   UpdateLocal.clear();% J, e" {, `' O( {" ?
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 `: u0 e3 d) }
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);7 H) d7 ~7 S& c2 ^% Y' F% g
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);% _$ e1 c/ g7 h/ f5 m: X) M& J% l8 a
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    . }) l1 R- N8 {' \$ q9 \
  381.   if(UpdateFile3.size())
    / O; n; `0 y# S# o4 i! `
  382.   {( S4 b+ E$ S9 r+ @, D
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)8 P2 {  u! S, A$ w* d9 A  K! e! \
  384.     {
    # m' p+ ~7 L5 ~# z
  385.       file2=(LPUPDATEFILE)(*i).second;/ J3 W$ W/ F$ Z: {
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; g. M% H$ h$ }0 \5 }% T
  387.       {! {3 D$ V  _3 n
  388.         file1=(LPUPDATEFILE)(*p).second;4 G3 W6 f' G$ ]/ e
  389.         file1->vers=file2->vers;
    * H2 P" A' m# Q' q' X/ h
  390.       }
    $ K+ X( e$ u( w7 @" W
  391.       else1 P3 m4 H1 s( l1 w0 ^
  392.       {
    & l: P( H' P) E4 K
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 ]* L: E% p9 t) `
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( [- G/ h8 t( N) o" l/ n/ q) B
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));7 A! ~$ {! V$ N
  396.       }
    ( O! L$ O: _& ]
  397.     }, A  w, p5 e; \2 u
  398.   }$ l. l4 x" @7 y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # o; H7 q* k. Y7 k5 e/ E7 @
  400.   {
    6 \# ?! p( K. x9 K" O5 e- F
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    0 i8 i/ j: [0 H8 R+ |
  402.     {- F" r. M! M6 m( b4 @$ L& m
  403.       file2=(LPUPDATEFILE)(*i).second;
    3 g1 B" R: Z0 A2 Y+ n' C) a; \% p
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; q/ I$ J/ a. k" P& q
  405.       {& l9 h1 u' C$ s) d/ \8 o4 ~
  406.         file1=(LPUPDATEFILE)(*p).second;
    " W/ k/ R( ?5 j4 r
  407.         if(file1->vers!=file2->vers): p; V5 v& M7 ^! W8 s
  408.         {4 z4 Z1 @/ |9 z" T, z
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 \5 ?  m+ }/ E
  410.           c++;
    3 p" a9 l- U, ?: n
  411.         }: B1 @5 E4 Z4 B
  412.       }3 l* p0 b6 t: U/ f
  413.       else
    0 w3 B0 M9 c, ~1 b! T
  414.       {, {: t+ S9 S9 _+ M; J
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& h' {9 K! N% Z$ J, I
  416.         c++;
    ; f6 a! j& ]" A% I; R4 d. {( v0 w
  417.       }
    9 Y2 E, B7 b9 d6 W- X6 d& X
  418.     }
    $ a7 F& m1 `& h# a1 w. }
  419.   }
    + t7 l2 H  \! ~( k5 g
  420.   unlink(".\\DownLoad\\update.txt");
    ) p' U' t, o" |" t
  421.   if(UpdateLocal.size()) return TRUE;2 t0 E; _$ F# V
  422.   else                   return FALSE;; _8 t3 V) N* @+ S
  423. }/ `7 p* \; s1 M8 Z+ b  J. v, d
  424. + H# m$ N4 [* w, s, H0 h7 m
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    + }# N3 G' t1 Y, A3 ^- ]( W
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    : N2 L* {0 a9 y3 V' {' Y

  427. " t" ]& W% K& C) J' Q. {2 W

  428. 9 u% S% f  k1 n3 j5 c6 a0 v8 H5 R
  429. 0 M1 L, [# o2 U; C# V1 i) j! E; {
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    9 J! f& [: I9 J" J
  431. {
    & A- m) t& r% R2 g
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    2 w' f" U  f3 C1 L$ i3 k  v
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; i* f( l% O4 A
  434.   {9 W& R& T& q- I3 S( R/ B- X0 ^: ~9 ^
  435.     char szLanguage[50];
    ) \7 C: u) r; `& D; O8 O
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( I8 E9 ~# T7 i( H
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;$ [+ _) v, x/ ]7 u4 v4 _
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 v  d5 |: U1 [) r
  439.     else                                   m_iLanguage=ENGLISH;' i4 D! R) i5 }0 S* Z4 B3 `
  440.     char szRegister[100];
    6 E7 G0 B2 i# t" f
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 A' j; Y3 X" [4 D- O
  442.     strRegsName=szRegister;
    3 `. `( O( s" j2 r# w/ p1 }
  443.     char szPatchURL[100];8 j; K9 X; |2 v) E
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 C# o; a' i1 U, u
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 ]) o6 O* h# C5 X; b0 |3 E
  446.   }' Q7 A  Y* B, s; m! F0 o
  447.   else% z1 h6 v) v2 I4 D
  448.   {
    4 z" A) V: c8 n
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 t2 [0 Q0 x) h5 q" _
  450.     strRegsName=DEFAULT_REG_URL;
    - a: a( c& a9 z
  451.   }
    ; u+ G9 @+ j% \/ U1 ?
  452.   if(GetFileAttributes("hosts.ini")!=-1). }2 [* w& H; D* o2 L! N, g
  453.   {
    : a, U4 t6 L- {, G+ i
  454.     char szIP[50];
    7 ]) X" E# V0 u) I4 a6 o3 S
  455.     char szDIR[300];( y( {7 F8 H. u+ W" R
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))3 ~; s( U2 D+ S6 J' B
  457.     {8 f* ~' V6 G& b# f; Y* U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");0 O; |& J  J5 l) r1 d7 X8 |
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    % d' B. L' B0 D
  460.       strHostName=szIP;
    & w& h3 \3 u  B+ h! g
  461.       strHostPath.Format("/%s",szDIR);' f' m7 x# v/ P! g* e7 _+ S2 f
  462.     }
    * v  l3 A1 g6 u9 b0 _( o
  463.     else4 c$ N5 }' z1 S$ S
  464.     {% g+ C0 V' i$ q! P
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)+ \& B7 `: s6 N* `' m) q( B
  466.       {
    3 [9 w+ c; R7 c
  467.         char szLanguage[50];6 ]: R6 g7 X% ~$ ^" w
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 N: V& Q" H0 H  {3 e
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    / r5 z4 h: y# e' P
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 S' M$ T7 K1 @9 m
  471.         else                                   m_iLanguage=ENGLISH;
    . ^8 M6 i- e1 ]7 q
  472.         char szRegister[100];
    , A0 i8 f% P* n/ L; U- c3 H
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  w" w6 B  M' x
  474.         strRegsName=szRegister;: p$ u! k/ ^* f
  475.         char szPatchURL[100];
    & z  Y5 q3 j, d& ]
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 z4 ]  U: |- A! {2 W( h% Y
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 {/ I  y( Y5 [2 P
  478.       }
    ) [$ o( P* `" ~/ Y8 [; Q8 Z3 ]& a
  479.       else/ t% g& {" E- T
  480.       {' }: g) k/ M4 d8 Y1 b- P, v
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & P" x8 r8 U" R  B
  482.         strRegsName=DEFAULT_REG_URL;% N" G# Z0 q2 d2 A) t# j# @; i2 G
  483.       }/ ^, Q- {# k- a0 Z
  484.     }; q- i, o' M. U" S6 [% b- S- o" T
  485.   }4 Q5 Q- H* A6 u% l: O( z
  486.   return true;$ x6 I% r; I: A6 y2 w4 Y8 ^
  487. }
    ' }- l8 x. C  G  k2 V

  488. 3 m$ H& `' k, `% k0 Y
  489. #include ".\ZLib\unzip.h"2 z1 t# C- l* T7 }& @+ _# U
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);$ y8 u: p: D* c5 O% S( U
  491. /////////////////////////////////////////////////////////////////////////////" U; H. a2 @( Y4 @
  492. // CRevAppApp initialization! W% q1 z- I. H( J1 r
  493. 1 ^, S; D; ]6 r. u" C5 K
  494. BOOL CRevAppApp::InitInstance()' d' ~3 i- D! i3 |9 g
  495. {- D7 v; v. ~1 D  M$ ?9 f% D
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];& Q1 |! X" y8 p- C

  497. 9 t9 V2 a+ C" Q2 {7 P$ {
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);( X: \+ n; ]% A+ q) P! I+ L
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    $ }. d/ ^0 y$ y( k5 w0 q
  500.   {
    * H9 F: ]7 p% K3 R; ^- r
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ! t, O& p9 H2 H+ X, e
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    6 |5 x' x; Q* `2 d  B! y
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))), y2 E* J, o6 o
  504.     {3 u: p+ \+ r! P  \" ]' m. r. [
  505.       strcpy(szPath,szPathTarget);
    0 ~" ^' X- i* X+ L
  506.       SetCurrentDirectory(szPath);
    9 j1 ^1 ^6 N$ C: |- ]/ O
  507.     }( n8 u0 M+ I% l
  508.   }) ?- J4 M( y5 H0 T, |' p. A5 G
  509. #ifdef _DEBUG
    6 k0 Z; ]/ L! Z* f' K, X5 ^
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 J7 {( k# F( F* c
  511. #else# S( f- q# v# V( k7 A) y0 D. h
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      a3 k* M2 Q" U& T, c6 v
  513. #endif4 e5 u* W& c7 b3 R( f
  514.   {
    9 l: m0 B) b9 l3 v5 O; |% z
  515.     char tempFileName[MAX_PATH];9 m( W# H7 W- y& M) \9 g# S7 p+ n
  516.     strcpy(tempFileName,szPathSource);! d% [  u) U: ?0 ~! I
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ) N1 l7 V( C# s& W
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ' o# i3 d+ U0 D. }: p6 {
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 \; r! E! H6 I, Y& ^
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);5 I0 x/ P) _# Q$ }/ n
  521.     return TRUE;
    & r4 q3 ^/ U% R/ M7 D6 A% \$ Z/ p
  522.   }7 Q# e) r1 X" r: Z
  523.   // Nuke 0118: Delete run.exe
    5 k! F6 ~$ O& n3 c! J
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    4 G! S; P- V! N, _7 D
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    & M5 V7 Y. B1 |! P, o  z' M
  526.   if(!ReadCfgFile("Config.ini"))
    # E0 N& t+ l0 v' n% \
  527.   {
    1 g+ u$ O' z/ S+ u2 p
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ! @- m9 r% w* @+ E4 `9 z
  529.     return TRUE;  J) b* d$ a' _) Z% H1 L3 _- I8 W6 e% V
  530.   }
    $ o- Z; A( |! v
  531.   HANDLE mutex;/ M. r1 V. J  l4 C8 O
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ; n0 C+ N- Z" }+ P: P
  533.   {, Y  \  W& A' R+ }& z/ `; _
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 @$ x1 \$ D" s% z' Z/ z
  535.     {
    ; [3 p/ k& x* o
  536.       CloseHandle(mutex);
    + v# L, ], a. G+ B6 o' u
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ; Z1 t1 G% @+ D! x* j; m
  538.       return TRUE;4 s( p, |" C! w+ J
  539.     }
    4 @; f9 U9 n& \" \" k, b
  540.   }  
    7 B7 `1 b1 F% c8 R8 C. ]
  541.   CloseHandle(mutex);
    6 p4 t! K; ^7 z; Z

  542. 0 Y( V& X. N9 j# ~5 z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);2 ^+ ^, O" r5 o

  544. * t, P/ m. i' e
  545.         AfxEnableControlContainer();
    1 R5 _5 d4 `6 _' M; J6 G% K
  546. + f  \! H& ^" b  z
  547.   bCanUpdate=FALSE;
    ; m0 P8 B$ r/ S. y0 K1 _# P5 p8 U
  548.   dwStartUpSteps=1;
    ! O7 H  I- [9 U
  549.   dwProgramState=AP_NOTHING;& a4 A8 _- p. V2 ]$ V0 C6 _
  550. ; T" c9 x* C& _, r- t) ~& u
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);- p' j  F" Y+ `+ D" n/ P8 V

  552. 6 G. M8 T0 v3 x, n8 x5 k# j7 ~
  553.         // Standard initialization
    9 o1 G9 {  ]! G# v" a1 i' g" y
  554.         // If you are not using these features and wish to reduce the size
    # E: U8 T) ?( s/ x
  555.         //  of your final executable, you should remove from the following
    ) s% B) B; Z- J$ |2 Y/ _; F" N
  556.         //  the specific initialization routines you do not need.4 R( y5 L- E5 d+ k& j

  557. ; I. h- e4 b, ^, V" h# y
  558. #ifdef _AFXDLL
    + @( R2 e+ c9 p" t7 ~& _" G
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    $ r  `# c; E! |
  560. #else
    - p% _0 u6 L4 y8 p
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically) l6 R. w# ?9 k4 A; b8 B
  562. #endif
    9 l4 @: x7 e( m  s! g

  563. 0 n0 k8 \0 I8 Q5 f
  564.   dlg=new CRevAppDlg;, }3 w/ M/ `) y
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    4 K$ R3 s. l/ U$ b, `, s% i0 k
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    2 G# k9 t$ S, \0 a
  567.   m_pMainWnd=dlg;
    1 {- H& c) P2 J

  568. ( g2 u6 C# Y" C3 y; m
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);# Z# ]: F' M# a3 W3 s9 H- d( [

  570. 0 ~) |- H# f# ]8 v
  571. //  GdiplusStartupInput gdiplusStartupInput;
    8 z1 w9 S, t9 F
  572. //  ULONG_PTR gdiplusToken;
    9 V$ t! |) h- Q0 f% u4 C+ d8 r
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);9 \4 {" k% |, c) c# I3 o. G  \

  574. $ S/ J" n3 V# T5 R  ^
  575. //        CRevAppDlg dlg;0 Q! s; u( U8 V3 n+ X) r* O
  576. //        int nResponse = dlg.DoModal();8 e* i$ A" ?, B! D, ]+ t
  577. //        if (nResponse == IDOK)& C+ P- N) t. }& P
  578. //        {
    7 z. c( o, v  |9 v/ X
  579. //                // TODO: Place code here to handle when the dialog is
    ( d) h% o6 B' B- `! n
  580. //                //  dismissed with OK
    ; P: e3 j, q9 ~! |5 W3 Y1 Z3 s5 a3 T+ p
  581. //        }
    % g# F. s; y( i
  582. //        else if (nResponse == IDCANCEL)& x* E# f: i: d- _, ~
  583. //        {5 q( O1 x$ T& {/ p6 ]! Q6 s$ |- w0 V
  584. //                // TODO: Place code here to handle when the dialog is& D! t, e0 F' l( _$ a
  585. //                //  dismissed with Cancel2 x7 N6 V* r+ B% U1 n0 W2 i: N# }
  586. //        }- L: f7 x! F9 W# S5 A

  587. ' z9 F4 }) G) l9 @' K1 \* |( |
  588.         // Since the dialog has been closed, return FALSE so that we exit the# q9 ?2 b3 @$ O
  589.         //  application, rather than start the application's message pump.
    " N* m9 O$ x: L# W2 h/ K( _
  590.         return TRUE;
    ' J( y1 q$ y8 v( S$ z
  591. }
    7 g3 i9 g; p0 q' N

  592. * }2 O$ W  [- \, Z9 C1 V2 W
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    % i- k. E% k8 n; L3 _
  594. {6 ^) z1 J/ N9 U  H9 J# C& y
  595.   int i;
    , X# V9 W" u; [" c* u
  596.   char *szRet;8 W" q! ~7 u- U% j; m4 x

  597. , ], w; d! v5 @8 B2 j+ r# \* D
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    / ?& p( X- Q- l: e' i6 g
  599.   if(sztoken)- p: @! I: E$ l! L9 H
  600.   {! L7 t, p+ ^+ H; h1 R  O' s
  601.     szRet=&sztoken[itoken];
    , F. k) d/ m$ I0 g) Z( J
  602.     while(sztoken[itoken])
    * I2 \1 B7 C/ a
  603.     {
    ; z: W7 A3 O  F% {$ W
  604.       for(i=0;i<(int)strlen(token);i++)3 H; r5 b2 O* g9 s: P: d
  605.       {2 H9 V/ \' E$ n1 a: k9 l/ q, ]' [: @
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]); c  X2 m% ^4 R; W0 c& L! ?
  607.         {% h2 _. M# `( R: N# V
  608.           sztoken[itoken++]=0;
    & B5 ^0 U7 T, A8 z
  609.           sztoken[itoken++]=0;
    * w, {4 P3 H$ i# U" a
  610.           return szRet;& {$ `8 a& F. ^+ b$ v  ^+ s5 Q
  611.         }
    ! B* B; B+ M% Z3 A# g
  612.       }' V9 \  t' Y9 H. M1 x
  613.       itoken++;) r! ~# p2 ?. V4 B
  614.     }* A- i8 x# D9 ~
  615.   }
    3 H$ L; v: F$ }7 _7 T
  616.   return NULL;
    . p! H6 o9 C0 b. |  `: c9 b% \
  617. }
    5 {4 ]5 X6 w1 d7 O7 z) K
  618. 2 t" N& X! E4 c) F1 @0 e
  619. void ProcessProc(long Total,long Current)5 k3 w* E- b8 y
  620. {/ u& J' V  e1 O# w
  621.         MSG msg;6 g1 a  G$ |# t: D' m1 T( d
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);+ G3 X& H2 o# H9 n: D7 _( g
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ( [! n* p/ n" `
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    5 N$ l2 U+ B6 U! ^
  625.         {
    4 w7 D  O7 B$ i
  626.                 if(!GetMessage(&msg,NULL,0,0))
    % H" c2 J' w; e/ |0 @4 [
  627.                 {$ H6 y' Q, w$ \0 W; A
  628.                         return;
    ( h9 v0 T- g& c1 N" n4 I+ r
  629.                 }
    + o" Y/ R  L: B0 }+ }
  630.                 TranslateMessage(&msg);+ a& p/ j# J7 A
  631.                 DispatchMessage(&msg);4 j' A: x8 f; I6 p) v  H: t7 z/ q
  632.         }       
    ) Y6 d1 M2 ^0 I# _% z% d# K
  633. }
    + }) q* R+ \0 ?; @

  634. + v/ H2 q9 L& Z
  635. BOOL bFirstChar=TRUE;4 m0 e" n" ~0 q
  636. . |/ K# h4 @: x0 b- ~& h
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    $ i- d" t$ {; ^. ?
  638. {! ]! v( a# G, o; i% Y
  639.         // TODO: Add your specialized code here and/or call the base class! Q: }# u  t- F% T2 m' A% B. W/ B/ p
  640.   switch(dwProgramState)
    & k9 o* T# H. t- P* T  {" d( i
  641.   {& }( S' m7 n' J6 s& |6 U. m% ]
  642.   case AP_NOTHING:2 Q+ y9 k5 l% C8 C6 R  K) U
  643.     switch(dwStartUpSteps)
    2 k0 k: K* O8 @* N9 p
  644.     {
    : ?- R2 c5 _0 L! }$ _* ^" }) \0 V
  645.     case 1:
    & k4 o) z# U0 [% R
  646.       {' W2 ^4 {7 l- O! B9 p$ a
  647.         int i;
    ! J8 r" J" ?' J# Q9 X2 R/ W7 F
  648.         CDC *pCDC=dlg->GetDC();
    6 t0 O% ^' y3 u, N4 m* s
  649.         HDC hdcwnd=pCDC->m_hDC;/ Z3 q7 L5 P: }" @- ]% M; x
  650. //        Graphics graphics(hdcwnd);
    : Q  L% W' r& v+ a1 q5 O) P% D
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");7 X" `8 a! O- A$ g5 x% W/ T1 b- S" V
  652. //        INT iWidth=bitmap.GetWidth();
    - \, B! G+ X. X6 k* W8 O
  653. //        INT iHeight=bitmap.GetHeight();
    1 a! j. L% t4 y2 q& d
  654. //        Color color,colorTemp;% l* D2 X! L0 g5 B0 F3 S
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
      D0 c# a+ W# s$ C
  656. //        {
    ) y/ q9 [, \8 O' X2 X0 g+ n8 N. l
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % K0 s. G) P. n8 p6 k
  658. //          {# B' [& P- D& Q; q
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    $ ?% \; H1 ^6 q3 b5 U/ o, u
  660. //            colorTemp.SetValue(color.MakeARGB(6 w/ Z3 ^* D' d/ k6 C! t
  661. //              (BYTE)(255*iColumn/iWidth),; K3 i7 t3 S" @% J3 {) K6 `+ g
  662. //              color.GetRed(),; J( g# p" `0 c4 E# {
  663. //              color.GetGreen(),% L' L$ C$ A0 G* z( Z
  664. //              color.GetBlue()));
    , W+ o) m$ d6 l7 L; V. q/ |
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);8 u6 f6 B( Q6 @0 c  T
  666. //          }+ h7 \8 l& ]- d& I
  667. //        }
      _7 o, V, A5 ]7 u: b
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);1 q4 g' m: \/ t+ }' R! i# f
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 e4 F! C- R" a0 c  {9 B+ c1 r
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ; J- x; x, a6 G& F
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! X' U& C- @! h! r! _0 Q0 G! j
  672.         for(i=0;i<240;i+=8)" w. @3 [, z1 G4 ^# ~# C
  673.         {
    ; ]; C5 U" D& J8 ]8 @4 u, l/ p! ]
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " ^4 M  V: K1 Y% _: R( _& W$ Y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    # j2 a3 O6 f7 _
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! v# A# n, V; I. s+ c  o$ O
  677.           Sleep(33);* k4 v7 ~' a% m! h5 S" t5 V0 o
  678.         }
    + x0 {6 Y4 }! t2 v
  679.         Sleep(1000);
    . e- I: \* E2 ~5 P5 \3 s. w
  680.         for(i=240;i>0;i-=8)1 U: E. k( b8 N" \9 n2 R
  681.         {
    . W1 o& i7 K; ?* G
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . z" u5 @1 g% i) z! e
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " T3 A1 M8 B+ l: P& V; q" ~
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 t( |- O! K1 M8 S& v: [
  685.           Sleep(33);
    * ]& C& x- r0 Q
  686.         }$ ]6 e" ?" V! X$ o5 M
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 ]; S9 a& Z: x; d8 F: q, I
  688.         dlg->ReleaseDC(pCDC);
    7 r  c( C8 E6 P, {. K) Q
  689.         DeleteDC(hdctar);  u" {  `8 Z) @( y7 J
  690.         DeleteDC(hdcsrc);, v5 x5 G( I* O0 B8 e$ x
  691.         DeleteDC(hdcorg);" x0 e+ S4 r- K2 Y" X1 _0 B
  692.       }
    + B5 K3 C$ T/ ^1 Q
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; T$ ^# }1 D$ l6 a3 \8 D  n- G  ~
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");6 s2 [# K# g4 z" x# x
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ' X. q% A  B% H  B, A
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ) w5 B# T9 K+ T+ I
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 G0 B7 z- c! W. Q
  698.       if(!Dn.Connected())4 \5 \  r5 v$ E
  699.       {! K; Q5 q( R0 c6 B  [
  700.         dwTotalFiles=1;  G) T, G2 f/ h8 k5 Z: {
  701.         dwDownLoaded=0;
    4 ?- W7 i) x8 l3 s
  702.         bSilentStep=TRUE;( T3 L0 r3 F! ^  _
  703.         bCompressed=FALSE;' S9 }8 V, @% j8 v- h! t9 `
  704.         strExtLocal.Empty();
    3 U8 S4 n) l4 ], A$ q  q! K. ]& a
  705.         strFullName="readme.txt";
    6 l0 s# v1 h; J
  706.         dwProgramState=AP_CONNECT;
    5 e+ D7 I% c& m% U1 D" `
  707.       }
    + }2 |1 D# c' b% G: M# y9 f5 h
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();7 E) G# }3 r) ^) z* e8 l& P% C
  709.       dwStartUpSteps=2;; {) g% b9 z4 v4 |4 o9 s
  710.       break;
    8 O4 C- g* Q- t; u( x* }- E
  711.     case 2:. K3 v" n  q/ X' ~! ^) c  }
  712.       {
    # O+ Q" N% [) I9 j" d
  713.         int iEOF;; k( d0 P2 i% A6 u9 Q, J
  714.         FILE *fp;7 j0 E9 s, L; a; E" I) ]* j7 D
  715.         char szString[512];
    ( h7 k& t1 u* R$ g  {( B- a
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");! B" N) [. f6 R  ], n# w2 Z
  717.         if(fp)
    - ~. _/ \2 Y3 v% {. P1 {8 }
  718.         {
    , C8 n2 z8 Y/ w& ~7 @" e5 J
  719.           do6 C: `' }6 c( i- J2 t# r$ ]
  720.           {  e; k* t1 S8 M0 W
  721.             iEOF=fscanf(fp,"%s",szString);
    + k% H% Z) J' @7 ]2 Q
  722.             if(strlen(szString))% s" h. q  y" z1 j/ U  @
  723.             {
    7 f' y" O# V% i- d( S& t0 h  K
  724.               if(bFirstChar)5 I$ }$ l9 ~7 }# G5 _
  725.               {
    % ]7 k: d5 I7 `" e8 ^$ K! I
  726.                 bFirstChar=FALSE;
    ; t& U: V( B6 j/ p" u4 g
  727.                 bConnectIsBig5=FALSE;' r$ i* H) N) n6 ~
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;. e8 n6 @) C8 o& e. O2 @" G
  729.               }
    9 [* r7 N& r6 B- N7 Q- S
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));* a7 i: W& ]" v+ O4 }  U8 b
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    1 d9 {3 M4 R2 @& W1 {' \- a
  732.               dlg->m_ListText.AddString(szString);
    2 v  e. P2 i& g9 g4 z! L
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : X( `! l. y* a7 E. Q! L' Z0 U3 }8 _
  734.               *szString=0;
    ; B5 F+ d4 u' S7 M' d: |: k  M% h! p
  735.             }
      O( Q  _! F% l4 h. [5 s
  736.           } while(iEOF!=EOF);1 p  s2 b4 {1 X/ r1 I: G7 @
  737.           fclose(fp);
    9 k! y; d; s! `
  738.           unlink(".\\DownLoad\\readme.txt");
    , [- C8 B& \" ^" X
  739.           dwStartUpSteps=3;
    1 }* p0 a/ u$ A6 b
  740.         }
    3 n! h3 L. n) R+ r/ m0 T
  741.       }2 z1 H: ?" j# [7 B, a
  742.       break;6 {# P4 [* \0 J1 B6 q. Q' i. j
  743.     case 3:
    7 E4 z9 R* u+ f8 z5 y
  744.       if(!Dn.Connected())) v5 c: }$ l/ _
  745.       {6 h2 U0 {/ v1 L: ?) T8 U+ A: S: g
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);& G; b7 R- O4 U0 h" M# F6 d
  747.         dwTotalFiles=1;5 M  r5 ~6 `3 e; B. |3 M
  748.         dwDownLoaded=0;
    ' \3 g% @, ?2 v3 W. |2 S8 W$ i
  749.         bSilentStep=TRUE;9 V/ e4 _0 H/ a+ z3 w
  750.         bCompressed=FALSE;
    % \4 q! ]- ]* }& U/ p# r. s4 T5 h
  751.         strExtLocal.Empty();
    * t% s8 ^7 |& Y
  752.         strFullName="checkversion.txt";
    $ g8 A4 C5 u* |1 [' l
  753.         dwProgramState=AP_CONNECT;, W) V- H" j$ h* q8 l) i
  754.       }* A+ K3 Z1 w: W$ Z8 f, u8 A
  755.       dwStartUpSteps=4;
    ) Q; H3 }8 Y7 E+ J
  756.       break;) R6 S3 Y% O) J+ V6 O
  757.     case 4:
    / L1 J" u% ~/ b# a3 H; H: D
  758.       {
    7 u2 N# `  ]# r
  759.         FILE *fp;1 m* H. F2 y8 ]- U; u
  760.         char szString1[128];
    ! e& s1 S7 S5 W9 K# `1 F
  761.         char szString2[128];9 H, R1 ~- ?. a- W, \
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    . A1 C* q/ B: }( A% Z  L+ n
  763.         if(fp)
    / b8 z. I' o- T& }& f! W/ Y( b
  764.         {
      J% J% @, A( i; \
  765.           fscanf(fp,"%s",szString1);( q7 B% m8 l2 a$ ~
  766.           fclose(fp);/ T) k% L) `& E# {7 r
  767.           fCheckVersion=atof(szString1);
    ) Q; J& ^: ?- z3 U# g
  768.           fp=fopen(".\\checkversion.dat","r");
    9 ?- M/ c: V/ q) H3 N
  769.           if(fp)
    . f; Y2 g; v9 u+ F& g! I
  770.           {
    2 _3 n+ Z) N4 r
  771.             fscanf(fp,"%s",szString2);
    % e+ }, t" n- [* A9 K
  772.             fclose(fp);; ~2 B- L" S" \- d
  773.             if(atof(szString1)!=atof(szString2))
    , m, ]% K2 [4 L, Y0 m+ F
  774.             {
    : u' w8 j0 K$ ^( D4 j% ^1 A
  775.               if(!Dn.Connected())
    , U6 ^9 P9 Z( D/ J% {1 g
  776.               {) ~7 O4 G8 ^4 ?" o
  777.                 bFirstUpdate=TRUE;0 B5 L6 |& W/ {$ q3 v
  778.                 dwTotalFiles=1;: V& n3 I! e7 L5 A( t7 h5 ]
  779.                 dwDownLoaded=0;
    1 [1 G* g( ]& j& |; {  W8 Q
  780.                 bSilentStep=FALSE;
    ! n+ F5 b& q  J- \' N$ B, V  R
  781.                 bCompressed=TRUE;3 r6 o* y1 M# W; C3 f4 |
  782.                 strExtLocal=".\\DownLoad\";
    2 ^" B5 c+ P( |9 R0 B! L+ E
  783.                 strFullName="update.txt";
    " T! x$ L9 @9 g
  784.                 dwProgramState=AP_CONNECT;
    0 d& q( B1 d; c; ~4 Z# x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 A; d  s( q' Z5 U3 i
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    : R! u" S1 l3 |2 z6 \& N
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");( k  L; N' d& {, u

  788. & X' t  I% ?- p6 V$ h
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% k: R4 B# I/ K* P; v* t
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    / f: T& _! V5 q: x  n8 ?/ K+ O
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ; f) k8 ?+ E8 U) a$ Q, f& S
  792.                 {$ J5 F. X, c& n6 m4 h8 J7 o: X
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");$ s( D# `2 a/ D( m5 u7 H1 T
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");! w; j( f3 J. L+ I( R9 F+ z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    5 m8 z, r, o! ^/ R! n& B- r; K
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * Z9 B) o. O9 _/ c
  797. # q  k2 v3 g! f, ]8 |# i, x
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " y4 w% `4 x: z% K8 A1 E. C6 f" m$ v
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + A0 ?+ V4 V. t  v% Y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");; ]- g0 f- n+ \. o' q. D
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * n% j2 X6 K0 [0 i/ E; a
  802.                 }4 S+ y+ e1 g6 H" z' u# }0 Z( p
  803.                 dwStartUpSteps=5;) ?) h- [8 J3 I
  804.               }, E  n0 ?1 ~* f
  805.             }: e8 h) g# q3 Q2 c% A
  806.             else! B; S3 O2 ~* I- E
  807.             {  P- E& s3 K( A
  808.               unlink(".\\DownLoad\\checkversion.txt");6 ?1 b0 S" z5 Q" N# \" m
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 [6 a; e. r8 O/ P+ Z# l) k: {
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 J/ V, ]6 a  i: R" s
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    7 G% z/ G; Y6 s! ]5 `) M

  812. 8 s+ q) D' r: G7 ^$ U: E
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / P0 y, C# p4 x' [1 ?; M$ a
  814.               dwStartUpSteps=99;
    $ C& j* h$ b, T" \7 l; m
  815.               bFinishUpdated=TRUE;
    - @% q" ^  {2 L! j. b
  816.               bCanUpdate=TRUE;
    ( T5 @" x! S, s0 p$ p' [
  817.             }7 c% o' p; i. e5 S0 ]2 {# |* ^
  818.           }
    5 x3 m9 R, G" A% z% E
  819.           else5 S. l" H' T6 _
  820.           {/ j) n) }$ B* L& o& K8 {
  821.             if(!Dn.Connected())4 e+ R) l5 {0 V! Q6 ^) y- M' k) F
  822.             {
    ; }) c# L+ r" d3 `0 H& I
  823.               bFirstUpdate=TRUE;
    8 @7 ]5 q1 j' e3 l- Y8 ]
  824.               dwTotalFiles=1;
    ' h  K, h; a/ |' Z5 U6 ~
  825.               dwDownLoaded=0;% s  c& c; h  X& }0 P
  826.               bSilentStep=FALSE;
    * d  Y2 |/ w/ O$ f7 x- s
  827.               bCompressed=TRUE;
    " v  A# Y& N) G; H% f$ o
  828.               strExtLocal=".\\DownLoad\";" M3 B' \/ N7 P1 E2 k
  829.               strFullName="update.txt";
    , H3 d9 l% v) L9 s) t
  830.               dwProgramState=AP_CONNECT;
    3 D4 Z. I/ y$ E1 r
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");6 a( r3 C7 C2 y8 t
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) ?  |- {0 Q: k( Z+ r
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");4 H' w9 [* g! s" [! X
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 h1 q) i9 A5 _) X- e. ~8 D& K
  835.               unlink(".\\DownLoad\\checkversion.txt");
    - y$ J( t  o5 ^4 C5 K2 F
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)7 P0 T- ~$ G' P! d8 {
  837.               {0 r% y6 K0 F9 U2 U; u' T& K/ B1 t
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    9 E& Z7 r9 U8 q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");1 S# Y8 Y- X$ l" O! c. p
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    0 T0 `" r5 j. l% e+ s6 X3 I0 y
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 e( M( G" S$ p" B" ^- a
  842.                
    : S9 w& [5 J! c. k8 _3 N) `( N4 U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 D1 ]; G# o# v/ S7 Z! h
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& X1 R) F8 \( W% Y3 y, ]3 u0 s
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    7 T5 _* L5 @$ ^! l  j. I" F- z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' J8 F8 q1 D  ?$ {" ]7 m  V
  847.               }) S  I# Q! Q0 Q
  848.               dwStartUpSteps=5;' o9 W5 q, u9 w, X
  849.             }4 _, Z8 `' N" O+ t! d7 Y
  850.           }
    & q. R/ O" m0 c5 l
  851.         }9 U8 Q( H; ~7 V1 o5 b$ q
  852.         else
    ' A) v" ?6 G% C+ R2 F0 }
  853.         {
    6 a" H% E4 p- ?, }3 Z, Q+ \
  854.           dwStartUpSteps=3;8 t5 W" S0 _+ ]- Y2 z& W- v
  855.         }
    ( v5 D5 g: r: U+ }
  856.       }
    % i0 \, q! @1 I. H
  857.       break;. v+ T2 A5 l1 ?0 A0 g& j
  858.     case 5:1 Y  r4 Y. w0 V6 r' e; g- P! F, K
  859.       {  {/ N+ E" J$ Y4 d5 b! {
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    " a8 }5 t2 Q4 L: \! S) s& i
  861.         {7 f& [- Q2 i" }8 e- d
  862.           int opt_overwrite=1;
    $ }, Q: ?$ s) r4 |$ O, E4 f0 U! U# S
  863.           int opt_do_extract_withoutpath=0;1 R) d* [5 @: H& j, c- A" ^
  864.           unzFile uf=NULL;
    8 R, [& |7 U0 F: q

  865. $ k9 A0 i7 w1 ^7 \6 t! _6 K6 `' x
  866.           uf=unzOpen("Wsa.zip");
    ( x) E! w0 J& n
  867.           if(uf)
    " X7 w) b- s1 x1 [% X  E
  868.           {5 D4 y2 o& o/ X# u4 Q. {0 ~6 N+ s8 i/ r
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ; m3 ]3 U* O3 u* p( K
  870.             unzClose(uf);
    4 c% O! T0 d% A4 G
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");* b% @2 \* V- E1 @5 T7 \: h4 {
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");+ k1 \: ?' H5 W5 B
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    " h; h" `" m2 Q' T) l
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& s/ X( P. ?1 H* i6 q
  875.           }
    1 Y0 h" M' Q3 \* ^3 V$ w' f! ^  N6 N
  876.           DeleteFile("Wsa.zip" );
    5 D, V7 H4 \( D+ |8 r# b
  877.         }
    " ?- q+ O4 y! J3 h/ l
  878. $ E( O5 i" W& o) x& L" F# _: l
  879.         if(CheckLocalVersion())
    * I* x. _; L6 q3 w: `! Q1 N( m9 w
  880.         {  V9 N. g' J# u# z8 A' t
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");: q2 e7 f7 u/ [9 I- A/ a+ {# t5 {% `
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ) s, E' o; h. N
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");7 `. E) s, L1 B
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. v/ |, ~8 g9 O( t) o6 J% X5 b1 K
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);9 X6 D$ ^: `/ c0 u
  886.           dwStartUpSteps=99;* b# C5 @8 `, |8 r( \) q3 ~
  887.         }1 Q! W+ K% h/ B( V
  888.         else
    ! i' U; J2 q1 W
  889.         {& m! H2 C" |3 K, ^
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 U4 O3 L/ L* P" J4 Z4 k
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 a6 u5 J4 z1 X4 R' i5 W/ @% g
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    7 D/ y; O/ q( b& t1 i

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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