找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
( H9 ]8 j# _' O; c3 e5 T3 `5 O
  1. / RevApp.cpp : Defines the class behaviors for the application.( Y; k& t" D% H5 d9 k
  2. //
    $ `5 ^$ r; k1 c
  3. 2 m1 F3 r$ R+ @6 Y* c" N8 ]
  4. #include "stdafx.h"
      Y4 q. [. Q, F" t( x: E
  5. + i+ J0 T# _  _$ L& y8 i2 i
  6. //#define UNICODE+ r0 L5 f* l" d" B' T
  7. //#include <gdiplus.h>
    8 q4 ^+ ~+ F3 D# n
  8. //using namespace Gdiplus;. E+ P* P3 ]  p  q# J; E  X

  9. 7 A2 e: U4 ^2 p
  10. #include "RevApp.h"# Z, L2 ]0 t. t' O
  11. #include "RevAppDlg.h"
    * v$ ^8 q$ I  E6 o2 j+ X

  12. : m5 R% O5 N, D7 D
  13. #pragma warning(disable:4786)
    % N5 B" ~) `1 Y6 J( X. w9 W* o
  14. #include <map># p) w' I+ Y: j& o5 H& |
  15. #include <list>' @( g4 E3 i; c4 p! x
  16. #include <direct.h>, C) {# ~9 O$ c  {

  17. 6 ]4 a8 l; R0 U5 @. g
  18. #ifdef _DEBUG" w4 o/ X9 h( t. S, F& m8 }
  19. #define new DEBUG_NEW
    0 K& B5 {" o4 P( U  @% i
  20. #undef THIS_FILE- \3 d% A8 m$ t. r
  21. static char THIS_FILE[] = __FILE__;
    4 H* S' F3 L2 D: P( K5 ~
  22. #endif7 F' |. ^$ I) v
  23. #include "SkinResDef.h"
    1 f* M# H; U( @3 l
  24. #include "ChangeBG.h"
    ( L  U5 c( e  H
  25. #include "AFXINET.H"
    . d0 Z( p# M1 x6 p! m
  26. ' S6 s/ X. ^, S3 O; v5 H. I5 N% m% O' ?
  27. #define TRADITIONAL_CHINESE 0  o  `; t8 z; C2 }
  28. #define SIMPLIFY_CHINESE 14 X3 x1 g5 d' K( E
  29. #define ENGLISH 2. H, m+ X! e5 `1 c  [6 i2 }( T1 l
  30. int m_iLanguage = ENGLISH;
    # R0 O- e! c) H0 G  Y$ l) }
  31. /////////////////////////////////////////////////////////////////////////////4 B- s- D& k, A4 S2 c
  32. // CRevAppApp
    - q8 t- j  G1 }8 W9 ~
  33. " D# c" L9 d: n7 f# Q" F! V4 W
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    , W% u( O9 l- T; M
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    7 D5 A6 I% \; R  j3 [9 r6 F
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.$ x; X6 {/ o$ Y$ ?
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!& J/ h& P; e0 L3 z5 f' ^. s
  38.         //}}AFX_MSG
    ( A# D  Y+ O# d6 \# w
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)% A- n( P5 w2 e; e' R
  40. END_MESSAGE_MAP()' t/ p6 D! B: q4 ]; F
  41. / {! G& i# ?/ q1 X9 f
  42. /////////////////////////////////////////////////////////////////////////////
    1 ^4 |- x$ r& g( m' B) P
  43. // CRevAppApp construction9 C0 N8 r/ L+ i' b3 U% l+ b

  44. " m5 `3 y6 g4 y. o5 }; ?* c
  45. CRevAppApp::CRevAppApp()% P$ R! s9 k+ l3 F1 A! c
  46. {) q* w% O3 Y( N; G& h2 S
  47.         // TODO: add construction code here,: X3 O0 P) W0 A& e) f2 J# N
  48.         // Place all significant initialization in InitInstance
    * ~- F- o# p3 z8 ^0 B) z# I
  49.   bDisplayIsBig5=FALSE;
    ( V! v0 o9 w7 B# L2 @
  50.   bRestartUpdater=FALSE;
    + D+ ?9 m5 y6 L% B; t" f; i9 B
  51.   bFinishUpdated=FALSE;
    * `, I+ z/ \8 W; @3 y# B
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    / h/ q& b. e; {2 h3 Z+ ?
  53.   InitChangeDataBig52GBKS();0 T' c0 C4 @+ s* }0 P* }7 h+ R8 V
  54.   InitChangeDataGBKS2Big5();
    & V/ Q8 Z  P5 Z, w
  55.         //
    ( b0 D3 [) B, h+ e
  56.         bClickRunExe = FALSE;3 {' e$ e8 Y. F' S9 w1 @1 U- A
  57.         //
    + h1 a' ~6 @: D5 r4 @. |4 K2 c
  58. }" q6 L7 @  ]4 q9 B" E

  59. & n# r9 C9 j3 ^; Z2 M
  60. CRevAppApp::~CRevAppApp()1 X. _, Z; X/ @/ `# M. n1 H2 l
  61. {2 T* w- S3 ~& Z9 R6 M! @, L3 g, G, I
  62.         // TODO: add construction code here,
    5 }  F$ }8 H/ ~7 @; ^! r
  63.         // Place all significant initialization in InitInstance2 Z& \. D% i: e1 B" @
  64.   EndChangeData();
    / K1 l5 v4 ]+ W  h6 c1 L
  65. }
    ! n( g$ {3 h* ~$ h. k8 s

  66. ; [! U, c0 D  |3 I4 N2 b" U
  67. /////////////////////////////////////////////////////////////////////////////# p. `% f) H1 \1 b( i
  68. // The one and only CRevAppApp object
    / R9 q3 F0 ~6 K- p. Q6 L2 C
  69. " K7 }$ W0 W  c0 t/ \
  70. CRevAppApp theApp;
    0 M0 |3 l7 N% b6 }/ Y
  71. % L2 U5 }6 K. l1 F2 t
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)( ?. k$ j' {4 J) x7 l' u
  73. {( B  V9 \" ]! ]: Q: X/ N8 b5 I
  74.   int iEOF=0;
    0 e3 z" b" A( t% Y
  75.   char szTempName[MAX_PATH];& z# l! o+ y/ C; f% ~6 L
  76.   *szFileName=0;& ~+ y% Z) P; O& F; x* Q4 w
  77.   iEOF=fscanf(fp,"%s",szTempName);
    6 k3 m6 T4 e' J4 o, F5 B
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    " Z7 i0 W. e& Y# h
  79.   {
    ( r0 D+ ~; g' Z* X4 L/ W
  80.     strcpy(szFileName,&szTempName[1]);, {5 P( u0 d- z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)0 I. @+ [9 k! Q
  82.     {: C( |. o9 c( F. W, }
  83.       iEOF=fscanf(fp,"%s",szTempName);
    * Z8 a! O# x! O# t6 r4 K
  84.       strcat(szFileName," ");
    * C# e0 c# s7 V7 N
  85.       strcat(szFileName,szTempName);
    / w) `3 C: J0 ]$ G6 a
  86.     }' W, e; s( q, x4 T: q& Z' S; \' O
  87.     if(strlen(szFileName)>=1)2 x% {" Q6 e5 T$ ]9 I5 ]
  88.     {4 n- ]5 F! \4 v; Q* Q  [
  89.       szFileName[strlen(szFileName)-1]=0;
    . g) x% I* ]# c7 u
  90.     }& f' i6 d- q  A
  91.   }
    ( w9 N1 a" c9 X
  92.   return szFileName;) L0 d3 x( D' P! f
  93. }+ d( R8 l3 @; `7 Z
  94. " }* E6 ?. O. n8 g4 }3 m$ B
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    , f' w/ A- w0 u/ }2 o) b" W8 \
  96. {
    2 z% n  o. e, e
  97.   FILE *fp;
    & k% w0 a1 l( \1 t# n
  98.   char *key=NULL;
    ; ^! J, r( {7 X+ C) A' p, p$ d" ~
  99.   char version[MAX_PATH];8 q5 c) i$ ^, c9 x
  100.   LPUPDATEFILE file,olds;, x& Z4 }& A/ B+ B# d
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( L; F0 W! d# ]" j$ h) @. J

  102. - Q, [/ K$ [  \* H) S
  103.   UpdateList.clear();" {' N3 c4 V8 u
  104.   UpdateFile.clear();
    % T: X2 D3 e* ^; C
  105.   if(GetFileAttributes(filename)==-1) return false;
    * p3 n8 V, o+ ^8 F2 A" ^
  106.   if(!(fp=fopen(filename,"r"))) return false;7 {4 J* V+ C; d+ t% q
  107.   fscanf(fp,"%s",version);) q& f9 C' l' O" H4 r( |
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }6 _  k5 x: ?1 W6 V  o* F
  109.   while(fscanf(fp,"%s",version)!=EOF)
    3 _; S3 h$ o; _& P4 i& V
  110.   {
    3 b% d( @; r7 ?0 R* \# ^
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 L; g  d" K/ ]- A
  112.     fscanf(fp,"%s",file->path);
    $ w+ Z/ }9 I1 v$ p- {# L
  113.     ReadFileNames(fp,file->file);$ s- Q, U9 ?- N% ~
  114.     strcpy(file->full,".");) q4 H& [4 L) A) X5 a
  115.     strcat(file->full,file->path);
    3 H& d" |9 W; N; t/ b0 L
  116.     strcat(file->full,file->file);
    4 [/ a9 g& _4 l. m
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())* L8 h- Y7 F: O( f( q2 L
  118.     {
    % j. j& z0 L/ B) Q. E
  119.       file->vers=(float)atof(version);
    5 z9 x4 V1 w; M6 B
  120.       UpdateList.push_back(file->full);
    1 E3 R! |# v! \& ]* T
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    - N9 a' ]: \0 ?# T3 b/ g
  122.     }
    % ]! X' p$ f6 }  ?
  123.     else! g6 w, D( M( K; p1 @3 T+ c
  124.     {
    ( c. C! H$ O/ Y1 [( f
  125.       olds=(*p).second;- B1 h2 Q' ]9 G
  126.       if(olds->vers<(float)atof(version)), ~  j- ?6 t8 G
  127.       {
    ( o& ?/ r/ C( K; Z- P. [
  128.         olds->vers=(float)atof(version);: c0 u$ L1 a3 u8 W5 m
  129.       }0 ?8 r6 M9 I$ t, ?8 B
  130.       free(file);& I; z! q, E/ ?( a" f
  131.     }0 V/ c! k8 t1 _
  132.   }
    . i5 c& P! q/ M2 b5 k0 W
  133.   fclose(fp);
    9 U8 N) n' U. ~. S8 z# z4 n/ {' R* j) F
  134.   return true;
    5 z4 x4 A& Q/ d: ~* k9 [" `
  135. }
    0 ?: H* o6 p' Z  o9 P0 o1 s# Q  l
  136. * U/ k5 d: t8 N4 i" h
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)! @6 q% a8 W( a+ x5 `/ K8 E
  138. {' p5 B2 u8 ]% O9 i
  139.   TCHAR  szFull[MAX_PATH];# i/ P: |. }+ C1 n2 p
  140.   TCHAR *token,*inter;$ E8 S  g, o6 k
  141.   *szPath=0;
    ( y! `5 D# R# h: }' e
  142.   strcpy(szFull,szFullPath);2 a, z1 L2 g9 R! Q
  143.   token=strtok(szFull,"\\/");6 w/ B5 J' j9 [& k# \5 |
  144.   inter=token;8 ~* c) l% H" C* J/ y9 {; X) q
  145.   while(token=strtok(NULL,"\\/"))/ z, v7 g; y9 a, J1 h4 `1 D$ k
  146.   {
    / v# s; y  x7 r3 ?5 x
  147.     strcat(szPath,inter);  b& x: d8 w' q6 M: ]
  148.     strcat(szPath,"\");# q! H- H1 V- A3 @
  149.     inter=token;9 N$ T' e" [& R% ]0 ]8 [
  150.   }9 O) X5 o3 B" y, L! X5 ^4 S  u
  151.   return strlen(szPath);
      }, R) E* Q) T) a1 G. D
  152. }
    ) F. o1 u. t# }$ \, H' \

  153. + A1 T- j! a  o/ J% \( e
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase), V' G0 j8 R# a6 R1 m
  155. {
    & |  Q  V. H; n% R2 n- c6 j0 M& \
  156.   DWORD attrib=GetFileAttributes(Target);7 C3 d( ~2 z# l
  157.   if(attrib!=-1)2 k0 S0 o/ r( F7 j
  158.   {9 X& A/ P: R5 N- O/ S, W
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))/ C" n1 u( }# R: n( ]  C' S7 ~
  160.     {8 o! [# I# W$ }6 f  S" [
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ D- ~4 C$ p4 L# X9 i
  162.       SetFileAttributes(Target,attrib);
    , y' e& ?+ a  x1 D' g% N. x
  163.     }
    2 h! ?  E/ ^, X& x$ g
  164.   }
    0 k0 J. u, i0 M3 v
  165.   CopyFile(Source,Target,Erase);9 L) ?! m) o# @' w
  166. }
    6 L  w3 W9 A7 w" q' O; w/ [

  167. 7 C( J$ d1 _9 b3 a; t
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    5 f* j1 T# F/ [
  169. {& i4 Q/ }, V( m2 s
  170.      FILE *fp;8 c8 e) s0 t/ ]
  171.      char  szBuffer[8192];
    4 V) z1 Y# t, ^. Q8 E3 X" d6 i
  172.   va_list  argptr;9 |6 l. s% m% p9 M

  173. * W3 U8 N+ N2 ~1 p% g/ s2 o
  174.         va_start(argptr,message);8 l1 {( I: X2 v
  175.         vsprintf(szBuffer,message,argptr);
    2 j/ V2 D& }, D, O
  176.         va_end(argptr);
    , ?/ m, A' i* l7 h
  177.   fp=fopen(FileName,"a");
    " H3 X' L% n$ Z3 r& H5 L+ @5 o' \
  178.   if(fp)0 l9 ~4 F7 j! U( v1 J1 x
  179.   {
    - T, f, I7 l& `: A7 g, z
  180.     fprintf(fp,szBuffer);% e$ a! b) b& l8 p/ h) h* r5 r
  181.     fclose(fp);+ B1 ~* h5 N) ^4 p2 B2 c
  182.           _flushall();, s# z! X: H" W
  183.   }
    9 ]" |8 |1 T0 v9 |8 {1 c) B
  184. }7 G  A  {9 `1 h' i2 }) Z

  185. 5 T( c* v3 w* [
  186. BOOL CRevAppApp::Fclearf(char *FileName)9 z! G7 S  z( A1 L6 |6 I2 I- ?' g
  187. {( z6 V7 z$ ^6 G3 ^5 H% c
  188.      FILE *fp;
    : L  h2 Z# [( B  f- i$ e
  189.     DWORD  attrib;
    1 t  m% X  O% a$ z
  190.   attrib=GetFileAttributes(FileName);4 @; N+ {8 D4 E- `: L
  191.   if(attrib!=-1)) f, o! z* i8 n( o5 W
  192.   {  |3 ^2 x  j$ J1 j) _6 ]
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);# ]* E4 c3 F1 o, {9 |9 i7 I* \& K# {
  194.     if(!SetFileAttributes(FileName,attrib))
    3 f$ [) Z% x) h1 i2 A
  195.     {7 \" U# k% _/ Z9 A/ \% ^7 P
  196.       return FALSE;
    9 P! h0 i9 ^( r. X# o1 l
  197.     }
    5 ?2 R8 M0 y  ~4 \
  198.   }3 L$ n& P. X. n$ r: N- X# \
  199.   fp=fopen(FileName,"wb");
    ) |$ [7 \2 [4 F( t- ~" f
  200.   if(fp)
    + |3 x# A, Q3 E
  201.   {
    * Y* {2 t  }( Y' R/ g
  202.     fclose(fp);
      ~  l0 k9 T- u4 B* a3 P
  203.   }. K% `, P! F1 ?! P% J& e& ^
  204.   return TRUE;" M- V8 Z* g* s
  205. }
    0 n: h2 [/ g5 |6 x1 @2 C) N- c& [4 a

  206. $ n+ x# j- w8 _
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ! V, f& b! |' s; V! v
  208. {
    6 T# `) c2 @! |! W
  209.   char filename[MAX_PATH];6 D0 |7 H! [9 n5 h/ I
  210.   LPUPDATEFILE file,olds;3 ~$ i) X* c0 X% P8 k- G- ?# E
  211.   std::map<int,CString>::iterator i;6 G* M+ v$ @2 k! u1 x( Z( I
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    - f. z. N6 \8 U% U3 u
  213.   std::list<CString>::iterator l;
    6 S6 _0 K' i) T( s+ h5 D

  214. * T/ t* e% I$ j4 }# W6 {) |
  215.   if(bFirstUpdate)
    # j8 w7 h/ U( T) y
  216.   {
    $ e5 k) y9 a8 A7 u2 X% I
  217.     dwCurrFile=0;
    0 j+ S8 h" R' w: K9 U: [
  218.     bFirstUpdate=FALSE;
    ; u, b8 l: l4 f1 s4 H
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # Y6 P: Q- o6 N% E9 K
  220.     {+ d4 l" y" i) F- f
  221.       dwTotalFiles=UpdateLocal.size();7 N. c: J* _9 T, a! l  j, g
  222.       dwDownLoaded=0;
      p  ?; V1 o8 X; G
  223.       bSilentStep=FALSE;
    : R+ |+ k: v% d9 C3 |' O+ J
  224.       bCompressed=TRUE;3 u( w- ?( ]% Y! }
  225.       strExtLocal.Empty();- W3 ]  V! a  r6 D
  226.       strFullName=(*i).second;
    ; B6 ]9 ^9 z/ Q6 V# ~$ g0 M" }# q
  227.       dwProgramState=AP_CONNECT;, a' t5 [4 t0 F+ j+ G  ?  L
  228.       return TRUE;: ^0 Y; y2 ~8 I
  229.     }
    7 h3 s% x; f# a/ w3 s" ?
  230.   }
    - I+ m/ M3 m% j* O- q- A$ h* D2 Y4 F
  231.   else if(bRestartUpdater==FALSE)
    ; r; j; t) A0 K& P, {" ?' _
  232.   {
    & C9 f( n1 C* k) i' A/ m
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- h* f3 l# y! ^: N) a7 r
  234.     {2 |. K1 |0 l8 C* o  ]1 ?
  235.       file=(*p).second;) g! j7 {9 ~' |, A
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())3 A4 o/ D( I' Z6 A0 W( z) J
  237.       {
    # Z% }+ d9 N6 y
  238.         olds=(*p).second;, B/ w! L: o. S& C! C: P
  239.         olds->vers=file->vers;+ V: ?  e' g- w+ }3 j/ @% V5 B
  240.       }
    . G1 X. M# q6 Q+ n( h
  241.       else
    ) `, ^1 y: ^: `; a: D  X+ r
  242.       {
    0 A: y) f4 V/ Z9 M) `# o& V
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + ^8 U/ l* _* m6 X* i7 z8 g: ^
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) h( ~) L$ S7 z
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));# Q4 R6 C( |" m
  246.       }
    ' b2 O. V. o  A. w# t  U4 t: L
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");% g6 g# x# k( Q6 H/ b( n1 s# G
  248.       sprintf(filename,"(%s)",file->file);: X$ Y7 d9 A# H! a9 h/ L& p& V
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 C$ m6 I+ C  \; O8 z' L  R
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }/ z  i* O7 R6 r  [0 q/ ]
  251.     }
    / l" R& t1 i$ z3 R$ v
  252.     dwCurrFile++;
    % G7 ~: J+ [$ Y
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% ?9 x; i6 P# z  i( z3 H
  254.     {
    6 F6 y  l: z$ ]
  255.       bSilentStep=FALSE;% Y1 d5 L! Z& B3 K0 b
  256.       bCompressed=TRUE;
    ( m, t, ^+ }' U) ^
  257.       strExtLocal.Empty();
    , k4 j. W0 U$ E, j! ?: k
  258.       strFullName=(*i).second;
    8 z) b. v1 }; W5 ?, _; l
  259.       dwProgramState=AP_CONNECT;0 E; p4 F7 i+ _7 B
  260.       return TRUE;
    / G2 b- H1 `& W( x3 i
  261.     }. @  P' z. s: z  O( z
  262.     if(!bRestartUpdater)  \  D) P6 q- Z# k9 y1 l. ]
  263.     {
    ( Z; L$ f0 ~3 u) B
  264.       int iCurrSize,iFileSize;" d* w. h/ Q% k  J; x! Q
  265.       iCurrSize=0;1 M+ z6 A0 y5 q+ X% J2 ?
  266.       iFileSize=UpdateList2.size();3 u' [* l8 ~) p" }: b' ?0 ^3 }
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    : G7 i0 z- w8 F- @
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");; H- Z6 g4 N4 |& D
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + P9 p' o1 Y# ]
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' h, Q7 V* g# Z3 w& P
  271.       Fclearf(".\\update.dat");
    ) ^! [/ u- K1 L8 h
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    : ?9 x$ ^$ R" D7 i% w1 c) h
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 ]; ~- k+ i2 k/ e! R% C7 p' M9 ]
  274.       {
    " {5 @# L# T' n
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())7 T2 p4 Y# l5 B1 X
  276.         {# Y4 z. c4 Q  f9 U
  277.           file=(*p).second;2 D" W; {5 i& s" T# ?. O
  278.           sprintf(filename,"(%s)",file->file);- g2 G  U: y1 h5 w% p) q
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: P  \, X) [7 A4 v+ z9 i
  280.           iCurrSize++;
    " w1 k% E$ w* }- p" }
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));+ }2 G8 {, z6 s, f# {: W, h
  282.         }
    + n5 O2 a  d# M7 g6 r1 F
  283.       }
    : c; T' ~; B# t' N, M
  284.       unlink(".\\update.txt");! Z" a3 [# ^, b% m
  285.       unlink(".\\update.tmp");
    * d. {0 g6 P2 H% v; {) w* @
  286.       Fclearf(".\\checkversion.dat");+ j% }9 `$ Q' k4 K. x4 T
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);* y0 x; `, ~! H. D
  288.       if(UpdateLocal.size())
    $ Y" F, D& j8 Q8 L3 Q' G
  289.       {
    5 ]6 M; W6 {7 ]. m2 j2 M0 d
  290.         UpdateLocal.clear();2 H' N4 ^: n% S; ~9 m- ^9 u& \2 H
  291.       }4 k+ A5 S6 ?6 A( R) t1 Z
  292.       if(UpdateFile3.size())$ w0 ~; d, \2 b0 D. _5 e" F
  293.       {* q+ x" S' F3 I
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( \6 y8 N7 W- P) }. j
  295.         {+ ?( M8 @: M! x" w& m
  296.           file=(*p).second;
    . ]$ N' Q7 w8 s. X) e& u
  297.           free(file);
    8 Y) K8 E2 Y8 N6 O: P
  298.         }4 N, ~. x- N" C: r0 C, l
  299.         UpdateFile3.clear();
    ) Y9 h' X0 d4 m! P
  300.         UpdateList3.clear();
    1 u" J9 y. c3 T0 }& B0 i2 v
  301.       }
    + K* }$ l8 X. ]: W; u
  302.       if(UpdateFile2.size())( v+ z. ~" X( p+ L9 b( W
  303.       {
    , @9 |) I. [; z1 S
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ e. Q$ \( ~5 H& K: l* o2 }0 I8 b& [* j
  305.         {
    ! N4 M7 u1 G( c- I9 N
  306.           file=(*p).second;
    ! f9 ?+ `. |9 A% A- n
  307.           free(file);
    * k- p3 ?5 \3 T! q% b. N. c2 h
  308.         }( v7 @4 [) _( ~1 S
  309.         UpdateFile2.clear();
    7 I9 U2 }+ s, f# f
  310.         UpdateList2.clear();
    1 y" e7 }, F. v  i% O# T" H( m
  311.       }
    & ~# k5 _6 R6 o7 f' j
  312.       if(UpdateFile1.size())
    ' G0 F$ G$ X+ q, q
  313.       {9 |2 Y3 d$ K( p. o; `
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' L5 B/ p, B) M; p
  315.         {
    * a% l( W6 |0 z+ U4 E1 P
  316.           file=(*p).second;
    9 s( ~5 [. m! I$ S. e$ ~* q' T8 {
  317.           free(file);: T) R* C' y+ n" T& h9 _
  318.         }6 a8 o* v: r. X& ]" Q( e; x' k$ i
  319.         UpdateFile1.clear();
    " F9 H) ?9 ?  O% g& h7 L, X
  320.         UpdateList1.clear();0 z6 O8 V* Z2 T# |4 I
  321.       }% l  u0 s: d# W6 Y$ @
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 N) `1 |7 b; |  b6 ~- I: M, S4 K- v
  323.     }
    ) X9 f. p$ L* l
  324.   }6 V+ v  q5 f# G1 u0 q# u" x* @
  325.   return FALSE;* I- X; z2 f1 l( L, |# E0 F  J
  326. }
    . ]3 y4 ]) Z7 i6 Y

  327. & A( P$ s2 \/ G1 @! _9 [0 N
  328. void CRevAppApp::ClearAll(void)
    9 F; ~' ?* T8 [$ U& I6 T4 `
  329. {; N+ b0 ?( h% t# F
  330.   LPUPDATEFILE file;
    2 ]' X' s+ J1 Z5 m; D
  331.   std::map<CString,LPUPDATEFILE>::iterator p;" J, V& S8 d9 H
  332. % Z$ }# {8 T1 Q- i3 `) ~& K
  333.   if(UpdateLocal.size())
    4 z; c- u* s& i& @$ s; G- i
  334.   {+ e% {/ J, @( W, m5 w
  335.     UpdateLocal.clear();
    $ p5 Z( a: \8 v6 z! @' j
  336.   }
    * ?0 A7 t" H' B) k7 L: }$ U' Z
  337.   if(UpdateFile3.size())4 {5 C7 s* i# F7 X2 ]
  338.   {/ H, e' D" _) R. U) j
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)1 V/ D' A' E  W4 O7 Z% T. g4 @
  340.     {* j8 [  ~0 r7 x6 }. Z" [/ M1 P
  341.       file=(*p).second;
    : D. _1 _' U* n/ y& y4 K$ }+ `/ q
  342.       free(file);( m' H+ @' |4 ]2 F5 X6 K2 u2 {
  343.     }& f9 _; _4 W, H, w9 K5 G. n2 C
  344.     UpdateFile3.clear();& B+ Q0 ?, O5 M
  345.     UpdateList3.clear();) n% Q( P$ C4 W7 ?" k# x3 m
  346.   }9 f6 Y0 h, p5 F1 |. v
  347.   if(UpdateFile2.size())
    # C! C/ u2 ?7 c! W* z' d- M* O
  348.   {: F3 K5 T- w  w
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : [+ N2 v; h8 n$ |% G, r8 k
  350.     {! }; E% y. a- b3 h
  351.       file=(*p).second;" _" {8 N$ R2 b3 _! C, x8 e
  352.       free(file);# e1 ]8 p6 E$ E: F
  353.     }
    7 S: V9 }/ f. E2 g- [
  354.     UpdateFile2.clear();
    . d' O& x; n! f
  355.     UpdateList2.clear();" H$ M' M0 A, z" U8 b& [
  356.   }% n, ^* X: j; {& A2 X4 z1 e/ |
  357.   if(UpdateFile1.size()). o" |* k, `; u2 k6 E
  358.   {
    0 ?4 M7 V4 a! E1 @4 ]6 V
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # ]" z' b/ @# J: a  ?
  360.     {
    ; v1 y9 ]# N0 k. f  U- h$ D
  361.       file=(*p).second;
    1 c2 _* x# g" f0 L2 C4 d
  362.       free(file);' m6 H6 ~% }  l- R1 v5 d3 A
  363.     }9 Q+ z: F1 t7 u- x
  364.     UpdateFile1.clear();. j& y6 F! A! X$ t! Z
  365.     UpdateList1.clear();" U8 V, M7 X. [& z2 V3 P
  366.   }
    % b1 M* w$ [! G
  367. }  
    ( V& i& W0 W7 d& z  s- q" }
  368.   3 a; M5 `! x4 x, D4 _" U5 x
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    3 F( f) T, P/ n  Q4 n" X
  370. {
    ) g. m) l5 ?% h! P# D
  371.   int c;
    " z6 x5 ?5 _8 c5 f, n7 \# Z
  372.   LPUPDATEFILE file1,file2;
    ( D' R: x9 T! \5 V6 M: j
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ( k: ~9 c% d" }0 J  V
  374.   std::list<CString>::iterator l;
      G$ ?6 Q" [5 g- g9 B6 N+ ?7 H+ v
  375. % R' s' `7 V  `2 v
  376.   UpdateLocal.clear();/ W( a& K: ~; ~) b
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);5 V) D4 c- ^& X9 @
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    7 t5 E  S* t  Q2 X
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);+ [- e1 B4 X" q. l( A$ z4 d
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);+ E4 ]: o/ E  s0 H6 ?+ X) P
  381.   if(UpdateFile3.size())# d2 l$ [* P1 ?# o5 }* g3 b
  382.   {
    " T( M9 S% o2 k' |
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    . P% O% A3 [4 N
  384.     {( H. ^( X- q' R2 u: |; i# o
  385.       file2=(LPUPDATEFILE)(*i).second;+ s) ?, J9 j# V& I+ K$ o
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( f3 r8 t; H8 M& |, M. Z; m2 E8 m
  387.       {% ?8 F& \% l' Y( g# x& ~% K, m
  388.         file1=(LPUPDATEFILE)(*p).second;
    + f8 Q( I" ]0 g! m4 @4 ?
  389.         file1->vers=file2->vers;
    * v, L( R, P; G- N6 J
  390.       }8 R1 D3 _0 {$ ]% n, G' ~' \0 w+ K/ [
  391.       else6 ~) z, p; q. |7 V2 S2 F
  392.       {) L/ M9 x1 v- h8 G
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* H- A( T+ H% _% i$ F7 _
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));2 Q3 K7 I. t* {: ]
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    . J/ C. g* \3 Q1 {% p
  396.       }, L* R8 v4 m- z$ o1 ?0 o
  397.     }
    : M7 n! z4 A  e
  398.   }
    : p; f! S3 @; E
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 ~5 L- l) P' e( E# m" P
  400.   {; I2 n2 R1 r8 C5 M  n. m: ~
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())6 O4 _( w% R. ~  L1 Q1 S
  402.     {" `) x( E5 A* r) o
  403.       file2=(LPUPDATEFILE)(*i).second;2 S( S. B4 Q& U) j4 n8 g
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 |" s! |1 e5 \' H
  405.       {8 U# ]% j4 I$ \- u- j
  406.         file1=(LPUPDATEFILE)(*p).second;2 y4 Z( I- p8 H3 q3 v
  407.         if(file1->vers!=file2->vers)
    ( C* _5 a$ |) E3 g
  408.         {  k3 T4 ?2 [( P7 o
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 [5 V0 V/ A& U
  410.           c++;# q7 {) i/ m* b- F# k" m
  411.         }
    8 h# r+ S& G' @! N1 j  l2 o
  412.       }6 p% \7 l, b# z" |
  413.       else: ?$ z: F" Q4 N, M  w6 K/ M  t
  414.       {
    * [4 m7 D! U! x8 Z- a7 K
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% j$ \( Z' ~2 ?: A& Y/ X2 F
  416.         c++;" h' W0 C' A1 J8 S
  417.       }
    4 t4 ~: v* a/ m5 \; x
  418.     }. p2 F% q% T# u$ l( p; B9 U
  419.   }
    * q" ?- w  ]5 m8 D9 V! ]
  420.   unlink(".\\DownLoad\\update.txt");$ |+ Z2 H: o9 i, L9 V
  421.   if(UpdateLocal.size()) return TRUE;
    ' f0 G6 r( G) J6 e2 [, x1 w
  422.   else                   return FALSE;
    , G& K, \6 ~. F; n1 p. Y$ Q1 }
  423. }! H& F: L2 [% E1 Z0 P. i
  424. 6 g! Q& Q. g1 {1 m- D
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    : M$ [: @5 J6 L% d
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"( D  k6 Q5 Q) Y8 ]3 d
  427. ) l1 X' O% g2 a

  428. : i- g& n0 h: e6 l3 I6 r4 }7 E! g9 n

  429. 3 i! D- F9 X; V/ g
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)8 W3 q8 d! r- ?6 }1 H/ |! Q
  431. {
    - W8 X+ P% Z! }" d: g1 o
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ) |% S/ G: Z+ M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 o9 W$ Q" P& t5 q0 d# f
  434.   {* J5 l8 H3 B3 L2 ^4 W8 ]8 c/ M5 d$ w
  435.     char szLanguage[50];7 E! N; v3 b* A0 \* ~  S4 \) O; o* Q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 t( j, X% q7 [) ^, z6 o
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: j  ^! q& q& E3 T6 F' N
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) I  _. q( A+ z, [1 Z2 H$ Y1 |
  439.     else                                   m_iLanguage=ENGLISH;
    # {/ |; w' J7 d' f# \% w
  440.     char szRegister[100];
    , w' v) n+ P! q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");0 E2 B" m# I/ T! c/ Y) F
  442.     strRegsName=szRegister;
    & `$ V5 P, ]% ^0 ~  S' |# o8 z4 U
  443.     char szPatchURL[100];
    + i( p! e' {4 e. b6 X  \3 g
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ N3 R0 k) ^; q4 ^! j
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & e% q! R% S: X/ k7 Q# _; G  Z
  446.   }
    6 L# f: f. S; h6 n/ q- m: f
  447.   else0 y( |) \+ Z" m: N9 ]
  448.   {2 y' S/ h0 C1 y2 A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 h9 M8 s$ ^7 a6 j: n3 \' a' t$ x
  450.     strRegsName=DEFAULT_REG_URL;
    6 {% R8 ]8 y% |; a+ V
  451.   }! s* }1 C* c8 z% n% x: P
  452.   if(GetFileAttributes("hosts.ini")!=-1)) L4 F7 I. Y' ^- o, e9 T; z
  453.   {
    * x% K1 j. X' Z# V
  454.     char szIP[50];
    , y2 L$ a# d, a& P$ W
  455.     char szDIR[300];
    , m- N2 x4 H/ L3 T! {4 _
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    # H2 X6 P) ~  v' ?; X* l# L) V; c
  457.     {
    , _+ h7 P; p9 y- r; Q- }  q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    , ]8 g# \, h8 o' e3 r+ C
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");* r9 ]7 J9 N+ N* ^% N
  460.       strHostName=szIP;
    + ?) F1 m, N0 _
  461.       strHostPath.Format("/%s",szDIR);- _$ z" Y% }# A
  462.     }
    " o/ O/ `8 P: W+ ]' i, R
  463.     else
    " y. N# G) F* [+ C% C0 v* r
  464.     {
    $ M7 V( {' m0 q" x5 l0 H
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ R, B% f- I$ `+ S, q, _/ m
  466.       {
    & |9 B1 D/ [3 ~2 N& T- `
  467.         char szLanguage[50];
    7 u$ n$ ^8 l& g, ^! _7 Z8 a
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( B0 H/ Z8 H9 ]1 C' B% w8 X) L) s
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + Z: r. s+ Y% i. p) Z$ G! m- P
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 Y4 i3 d, {" {0 S  p
  471.         else                                   m_iLanguage=ENGLISH;) Y! w5 X9 s8 a/ T
  472.         char szRegister[100];& q6 c: G( z- V
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& n3 `+ y1 t3 T* j
  474.         strRegsName=szRegister;
    & g7 L; _3 O+ I" b% s; h
  475.         char szPatchURL[100];
    5 h1 l7 f3 D* @, f; g! i" J# Q
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: g1 |7 g4 B3 Q' e
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! L' \2 Y. H$ w, G* B  M, g
  478.       }
    ! D) l; J6 s( u: p& D- _* b
  479.       else
    3 d/ G& D0 T& ?
  480.       {
    . D3 Y' o/ N. t& r+ Y; U
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ Z) g" D3 t8 O
  482.         strRegsName=DEFAULT_REG_URL;8 [. W3 T  K- w7 x
  483.       }
    : j  ?! |7 K& X! _* x9 _: J
  484.     }4 k2 u4 }9 \7 W% Q! ?
  485.   }
    : V+ u4 J; U+ @
  486.   return true;! z3 x, ?* I" c5 s4 d' t. f: V
  487. }/ V! h+ {, g- A2 _

  488. 1 L$ M2 I3 q9 W; ^, d& A8 {' P
  489. #include ".\ZLib\unzip.h"( U* M# D" W+ p
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    8 ~1 G( N: A" w# m8 e, c
  491. /////////////////////////////////////////////////////////////////////////////
    . N; C8 A7 w1 ~3 m
  492. // CRevAppApp initialization
    * j0 t; ~: a1 }. D: c/ z2 w* @

  493. + d# X" f' x/ l7 z5 ?- Z
  494. BOOL CRevAppApp::InitInstance()
    9 i' [& X7 {6 a1 l* C
  495. {
    6 F8 C" i! m: K, ?: T4 s
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];2 g4 V6 N* y9 V2 b& l0 e

  497. 1 ~; O, D' P  w
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    6 E' ~' b. Y8 Y+ w" e
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)); W' K( B' V- R) ?& t
  500.   {  }$ f" X) @/ p' O4 k7 G
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");4 X5 |& x% n+ G! l
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; g0 S) \, a) x5 Q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    3 R, u( K9 i5 a4 `3 a8 t
  504.     {
    + H6 b+ Y! W; ?0 M
  505.       strcpy(szPath,szPathTarget);
    * C. I: V* B3 M3 I& G  h9 |
  506.       SetCurrentDirectory(szPath);
    9 q6 G% X+ q% D7 u* U" E4 h6 l
  507.     }, i% i; h* N1 X, \" A3 t
  508.   }3 P3 f7 c0 U8 c1 l% ~
  509. #ifdef _DEBUG
    5 R8 [* j2 f" I, L
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) {. s6 ]( _) N- W$ S" M& f2 W. P
  511. #else) `$ F, K; t$ E5 K* L% Q
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ C) _3 K& M: ^' _
  513. #endif! s, t, e: F# @9 g
  514.   {
    ! u3 |6 @: a$ U$ c( k" A% q
  515.     char tempFileName[MAX_PATH];
    3 X/ Q# Q% q" _( ]6 h' N
  516.     strcpy(tempFileName,szPathSource);5 r' J; ?" P& ]4 [/ Q/ Q8 P
  517.     tempFileName[strlen(szPathSource)-12]=0;
      p& _  s' E! d- P+ J
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    8 @, R5 ^9 n' s  f5 j" n
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);6 h8 A* P$ a* H+ b- g' l* q1 Q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    . l9 j( u0 x5 K3 d1 h1 _
  521.     return TRUE;
    . B/ j6 r3 d, Q$ g! ]& |! g
  522.   }/ T/ N4 ]( B+ g6 ]: U, }# j
  523.   // Nuke 0118: Delete run.exe
    % R5 h4 R- v3 F2 V& V
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );9 D  U7 R. S% w
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");, x  J* u! J) e- ]! h. o! b
  526.   if(!ReadCfgFile("Config.ini"))1 Y" l  _" r, e( Q% [' g
  527.   {; h6 C: H0 U, D  j! q7 m: H2 j6 M# v. @3 z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);: h6 J) V, D0 z: n' T( Y( N* L- w) r
  529.     return TRUE;
    % N. I! d1 F+ P
  530.   }3 B3 U: ?' I8 P" I9 b0 h0 C
  531.   HANDLE mutex;
    5 E. W/ L& b2 e# R0 D
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))0 N  f  }% _/ m% K; u6 h
  533.   {$ I6 X5 \0 p6 Z( E: ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)) m  _! {& J3 C6 @
  535.     {- r5 _8 a: _8 f7 n- J8 @; _
  536.       CloseHandle(mutex);: Z% o  N# t  M1 y+ O" S
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    : Y2 c/ y7 \' }% {. i) S
  538.       return TRUE;1 Q( c: L0 T8 c' A/ T$ P5 ?9 g  p
  539.     }
    8 ?9 w: n; k: ?  n
  540.   }  : I" _" h8 L# T7 p3 R
  541.   CloseHandle(mutex);
    1 w2 b/ p" Q- t: m) X. @; Q$ h6 j

  542. & v7 L6 X' I2 C' v3 X" x0 b2 j
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    $ e  q+ J1 p) c  w5 N( Y
  544. 4 n& \8 f2 W( o2 J* J
  545.         AfxEnableControlContainer();
    & T, J3 m! M! _. W! Z# O: b. I

  546. ) n( n6 w! p( n1 N% [6 z# G
  547.   bCanUpdate=FALSE;
    0 t) g' b' d) X; q0 a
  548.   dwStartUpSteps=1;
    ( H+ e8 W+ ?1 I) c+ ?
  549.   dwProgramState=AP_NOTHING;
    0 X1 ^7 ?- A0 a! _
  550. ' G( u# S% W  v2 k
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    9 P) `& A' V( W: H# u* R4 m5 L
  552. : ^7 p( M$ Z, _- B' k8 ]/ |
  553.         // Standard initialization
    , T9 F) H; p2 S) B; q
  554.         // If you are not using these features and wish to reduce the size& a; i6 V, b+ C2 H, S
  555.         //  of your final executable, you should remove from the following- i& G6 m: N! v& v- j
  556.         //  the specific initialization routines you do not need.2 f3 ]  Q+ l; H9 L% e9 A
  557. # a* y$ e  f" V/ v% |( |% h
  558. #ifdef _AFXDLL0 l9 ~' U- l. c1 v# S! e
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' x6 x1 `; `0 ^0 C/ l* V0 [5 {% H0 a
  560. #else5 ?1 ?5 s4 v/ n) H& O
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically& U9 W1 |4 m; f; i! Y, E' X7 {
  562. #endif' P. B* C2 I  n) m9 E1 |# M
  563. 6 i. r' c2 ^4 y: @
  564.   dlg=new CRevAppDlg;: M1 C' \3 q2 {2 U
  565.   dlg->Create(IDD_REVAPP_DIALOG);; `* b8 E4 D1 E
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
      h$ F6 N+ t" {% r( I. A
  567.   m_pMainWnd=dlg;
      ]- L0 i/ U6 p. q. k( `& U; P

  568. 9 E/ J/ h. _% o2 i% W- Z
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ! k; ~1 b" e8 Z: t3 A
  570. ( n4 a1 B8 s& B5 U$ o
  571. //  GdiplusStartupInput gdiplusStartupInput;8 [+ c9 z; s: B" R6 h$ o! n( c" ^3 ]
  572. //  ULONG_PTR gdiplusToken;
    1 O# b6 ~; A1 J! j  d6 v" X. y: g
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);9 {6 k9 v1 y: l7 V" l
  574. - l8 l$ V$ ^% n+ {2 f6 u2 t
  575. //        CRevAppDlg dlg;* W, h$ F: w; U+ I2 G* X* l
  576. //        int nResponse = dlg.DoModal();
    0 Z7 K) R; _' Y* t: N
  577. //        if (nResponse == IDOK)
      X8 ^% E7 x( s+ f5 D
  578. //        {% \1 ]0 B, U2 E9 W; p0 L7 j( D
  579. //                // TODO: Place code here to handle when the dialog is' F  w/ J7 p8 a2 Z* j# l. Y6 t
  580. //                //  dismissed with OK
    ; Z3 c" G. _: h7 a) K: D
  581. //        }: q( P( y: B# {, ]" V5 i' M  q3 e
  582. //        else if (nResponse == IDCANCEL)
    ' O& Y% E8 m& D& j& g/ M* e
  583. //        {1 M- t4 H& U/ K2 A8 q
  584. //                // TODO: Place code here to handle when the dialog is
    ( Q9 D. M; ]* K! d* v
  585. //                //  dismissed with Cancel7 V9 \) t0 R( P+ U5 F
  586. //        }
    & y) R7 r) o; o# J8 K) t/ z
  587. 4 x# x% A+ J9 P
  588.         // Since the dialog has been closed, return FALSE so that we exit the0 X. p% n# F& |$ P! k0 a
  589.         //  application, rather than start the application's message pump.  a4 z) Y8 E& {5 Y
  590.         return TRUE;4 Z$ N  T! z) w' {
  591. }
    / D8 E3 b9 u6 Z* R3 j  V5 W

  592. 1 w9 n$ K6 p$ R% z$ \
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    & j9 t# |, G; i5 v
  594. {7 A( v, m, H. ^) {" Q$ U; [6 I
  595.   int i;
    + Y& ]: i* T7 S  K! `1 U, D( z  ~* ?
  596.   char *szRet;, A" L4 O5 ?+ H$ A

  597. 1 ]4 [1 x4 k/ b$ W' |7 _% a
  598.   if(pSource) { itoken=0; sztoken=pSource; }0 H; ^- m3 b0 M) y, T
  599.   if(sztoken)
    , i0 l8 `$ w  m  Z
  600.   {
    / p; \5 a: Q2 M
  601.     szRet=&sztoken[itoken];
    ' Q0 G% X: V, d+ ]0 n
  602.     while(sztoken[itoken])0 v* c3 C$ {" r8 p; `
  603.     {; g4 g- @* ~- A- o" M4 T- I
  604.       for(i=0;i<(int)strlen(token);i++)
      ?- r( E- \: _4 W
  605.       {" x$ y; S. n  h& O2 B! ]
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])6 D$ [, T& k( R# }; f& I, o
  607.         {$ }1 W1 `0 o7 G
  608.           sztoken[itoken++]=0;" T/ ~% x6 m( T! }  T
  609.           sztoken[itoken++]=0;2 g1 O, v1 j0 ]6 G- C
  610.           return szRet;; ?6 N, K0 q  n+ l* A6 l& D
  611.         }6 n& s' w/ `$ B5 ?' {7 t
  612.       }$ q6 W3 S: b- t8 l$ z( S) ^
  613.       itoken++;2 H2 K8 |5 @# Z5 t( s: p; B
  614.     }- Z& j4 v0 D$ @5 ]+ U2 r+ z
  615.   }" h( o# `* J/ ?& S% y2 f
  616.   return NULL;
    ( e: O- a5 ?4 E2 ?. O' {
  617. }3 w9 s1 [# m6 F9 M6 ^- _
  618. : ~7 j# Y  Z9 p7 c$ G- S, T
  619. void ProcessProc(long Total,long Current)
    / M  m6 U3 |7 L& @; B* s3 m
  620. {
    7 F8 U8 `3 j9 g! `0 j0 d9 o( u5 o
  621.         MSG msg;5 g  n9 ~; e9 L
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    1 b: @; y& [9 @
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));$ U1 ^+ F; l' l
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))" V% Z+ \, g! g$ h7 }
  625.         {4 t- R; t: Z7 C& F$ }
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ; A* ~4 @- q/ b& m, b* ~6 }
  627.                 {
    + q9 X  s* I# n. u' m
  628.                         return;
    % J2 a! D, T- Q
  629.                 }
    5 F# z/ f0 w% h# m7 p& o
  630.                 TranslateMessage(&msg);
    2 c" g6 ?( |+ w5 {' V! N2 d
  631.                 DispatchMessage(&msg);- s* d9 }  _; O$ \
  632.         }       
    9 z+ {* o% d' \/ O0 ~) A, M8 L
  633. }
    # ?9 F! a: ~4 Q& w/ P

  634. 4 |' q* ?+ H" S& w- z' `, p
  635. BOOL bFirstChar=TRUE;
    1 ?: c. r5 W7 _0 o% e) V9 w

  636. 1 J1 Z: k) N7 R: W2 |8 d& D
  637. BOOL CRevAppApp::OnIdle(LONG lCount), H; m+ \! Z  C7 Z- X% h
  638. {1 y; q6 g9 G+ O( K) U& T7 E! y
  639.         // TODO: Add your specialized code here and/or call the base class
    7 V- P. ^/ F5 L) O
  640.   switch(dwProgramState)
    + a% X: a3 i" \
  641.   {" I  M6 ~( |5 @
  642.   case AP_NOTHING:
    0 K* d& S4 s2 D! ?, n8 R4 n2 E
  643.     switch(dwStartUpSteps)
    ! d, P7 y( d8 R) w0 s4 s7 L
  644.     {
    " Q: a' K5 o- j
  645.     case 1:* ?- q6 P6 U* h; T- X0 [
  646.       {6 B! R& R2 V+ M& N( f
  647.         int i;: b" W+ }, X0 N+ g: L1 q
  648.         CDC *pCDC=dlg->GetDC();$ K# I" l9 x  H0 E! L4 P3 A
  649.         HDC hdcwnd=pCDC->m_hDC;9 ?* d, y$ n, L8 k
  650. //        Graphics graphics(hdcwnd);. S9 g( i% {* A4 u- G; R" x
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");& V3 D4 k" f4 i' ~. U- T  O  r
  652. //        INT iWidth=bitmap.GetWidth();& r7 @& |+ T2 H+ ^$ V
  653. //        INT iHeight=bitmap.GetHeight();$ G5 g6 T0 \- P& v
  654. //        Color color,colorTemp;4 k0 }/ A# I" k4 V/ P& c) ~
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    , G5 N5 z/ J1 V  R% y8 c' s, l6 J
  656. //        {
    7 G( x$ f6 \( z7 L" F
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)1 {: J( ^+ K/ J* n! G% P. w
  658. //          {. I7 f8 d3 ^1 Q. y) W, |
  659. //            bitmap.GetPixel(iColumn,iRow,&color);% h$ m0 R5 p# T1 f$ Y+ I: |* Z
  660. //            colorTemp.SetValue(color.MakeARGB(! E! W0 Y) D" U0 F1 a9 j3 s# B
  661. //              (BYTE)(255*iColumn/iWidth),
    4 o3 d1 ^  d) C! K
  662. //              color.GetRed(),! d1 \3 T+ V( L# X/ g3 K/ h  K
  663. //              color.GetGreen(),
    . D9 k6 G. U  G" Q
  664. //              color.GetBlue()));
    $ ?- [6 i; |; _- T
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);% e, |* m: `( s
  666. //          }
    ! M5 ?. H. s% k* D# P7 t: `* @
  667. //        }+ E9 b2 H( K+ H6 `5 S
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 C6 g( g) o/ B0 @" W* @, H" T
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
      L  I" p" q$ M8 T( p
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");. i% b/ h6 U: ~2 K4 u
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . Q: f: s$ X" v# M6 Y( B
  672.         for(i=0;i<240;i+=8)
    9 e7 h; {# }' J/ w2 u) Z
  673.         {1 @5 d0 p" K' F! E, z  g5 E
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & ?, X; q, [/ y; @) q) t; h
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 Q9 F1 E: s3 m, w1 E4 M. B0 a
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . t! V, d" b- m1 r
  677.           Sleep(33);' g9 o2 ]- v9 j% \9 ~
  678.         }/ y7 N: B. w( c4 s' G& M
  679.         Sleep(1000);/ @) c- D9 q4 V# u# Y: Y
  680.         for(i=240;i>0;i-=8)4 G, X5 ?# H6 g4 h& x
  681.         {4 i- r' X4 F+ O+ V/ m7 o$ U# V
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 u1 k* X% I+ m' d
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 y3 o* y! P. h# d$ C& l) {! X
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! U0 L/ O0 h6 K! p  @+ j: S1 Q* n
  685.           Sleep(33);; X7 |. P9 V7 V0 c! C' C' m
  686.         }
    . E- S9 ]* q; B7 J
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);! k4 Y1 y9 a5 B! m
  688.         dlg->ReleaseDC(pCDC);
    , P" k4 _6 @7 j& C7 |; e8 ~+ U/ b
  689.         DeleteDC(hdctar);- s. W& Q3 b- a4 |$ D
  690.         DeleteDC(hdcsrc);! {' L* f% R% L7 J
  691.         DeleteDC(hdcorg);# X  V, {# q2 G; C! r
  692.       }
    $ d- X  b: `/ _& {2 D
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    $ d: _5 w! i2 O, ?1 E
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    1 D, A, a' C8 M# H
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    - y' u# i& S' ~& I( W( ~$ ~3 m
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( Z2 H; c8 i, [$ Y4 u  E( Y7 I
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 R9 F7 M9 o6 _3 m, M
  698.       if(!Dn.Connected())
    ( y6 m, l% R" T
  699.       {
    $ B+ h" j5 z/ B3 q9 e
  700.         dwTotalFiles=1;5 o# s$ O9 _2 A/ l) W
  701.         dwDownLoaded=0;" C) e0 |! x0 p; L
  702.         bSilentStep=TRUE;
    ; c. @& Q7 D+ ]2 m6 ]
  703.         bCompressed=FALSE;
    / Z( Y, R& @1 m
  704.         strExtLocal.Empty();, \) i6 L0 i1 I; K. r
  705.         strFullName="readme.txt";8 ^( i" Y% h. k, N& q; t& h' P3 w
  706.         dwProgramState=AP_CONNECT;
    . A% @* y- A. I' @5 ]; ~
  707.       }
    , F) V7 A' ?9 b7 z. \4 m) g
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();) w+ l. ]) Q  y) @! ]0 Y' W
  709.       dwStartUpSteps=2;. P3 |+ e. _8 a" U' t5 _
  710.       break;
    * D, q& o# Y' }  o' k9 O
  711.     case 2:8 U8 k8 ]2 P9 k( ~
  712.       {
    ! I, I* X* b; ~
  713.         int iEOF;
    * b0 f/ n8 {% Q& z- i5 F9 f
  714.         FILE *fp;
    " j! E7 f+ d5 ~, S: |: z
  715.         char szString[512];
    ; {; p: `/ r2 m4 y6 F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");+ }$ k* c  t+ I+ R8 l7 C1 I
  717.         if(fp)
    ) ~5 i" v; K- a5 {/ |2 X2 U& I
  718.         {7 g7 c0 Y- ?7 h3 y; H: }
  719.           do
    ! e2 X( m. D5 `6 @) V
  720.           {) M) [% U3 G3 S; o$ x# H6 i
  721.             iEOF=fscanf(fp,"%s",szString);
      r) K! S6 g- d; N1 P% S% O7 V
  722.             if(strlen(szString))6 A: u% }. b8 ]  \
  723.             {
    / n8 n( ?4 z* i# U7 {' x8 u
  724.               if(bFirstChar)
    : q( r5 t5 p8 z5 p4 o
  725.               {! N0 h# H2 ]! r' i
  726.                 bFirstChar=FALSE;8 J+ M  i9 E7 l* @8 t4 h& k0 c
  727.                 bConnectIsBig5=FALSE;* x; C) `0 j4 o0 e( c3 X
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;, }6 N+ _8 k9 \/ k. ~) i
  729.               }
    ! q1 _( {2 F! Z% }' B2 G
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    2 A1 j( `4 i# v5 U: E( T
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));+ z1 }+ j& U& Z' v- ^* U
  732.               dlg->m_ListText.AddString(szString);2 z* ^1 c$ K/ [' t; h6 y! J
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - a3 n! E: z, F1 @( q* {1 y8 [4 N
  734.               *szString=0;
    9 r0 v6 R) j6 O
  735.             }: e) ]5 ?8 e% L9 n% u( J
  736.           } while(iEOF!=EOF);
    : y- [2 C& ]% f# t- m' C
  737.           fclose(fp);
    % I$ u! |& x  m7 E
  738.           unlink(".\\DownLoad\\readme.txt");
    0 B, A4 g' a& J* q/ C
  739.           dwStartUpSteps=3;# S6 q* T1 K2 ?6 ~
  740.         }
    6 P) t" v& l/ D8 {0 {
  741.       }
    ' P1 L7 i8 O  r* r
  742.       break;7 i. O9 V0 Q9 d" o* ~( r
  743.     case 3:
    1 D7 B5 K% ?2 U# |8 J
  744.       if(!Dn.Connected())
    ) B6 W) B3 }' X8 n9 C1 e
  745.       {: h# ]  e* ]/ U0 h
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    9 G) @4 O- V! h3 Q
  747.         dwTotalFiles=1;
    9 |1 j$ N5 Q) Z  t* I+ q
  748.         dwDownLoaded=0;
    + A( J8 I0 D- r% L
  749.         bSilentStep=TRUE;" A) F7 b1 M) D$ i& v6 U
  750.         bCompressed=FALSE;, D; R3 K* l8 n9 L/ e- B
  751.         strExtLocal.Empty();( k- U$ X% Y0 e/ c) g/ U# }- W
  752.         strFullName="checkversion.txt";1 z1 s& r; M, v1 ?
  753.         dwProgramState=AP_CONNECT;0 M- A( n( l* ]! B7 m/ z6 T3 r
  754.       }
    " t& b! a. ]+ {5 K7 L, c
  755.       dwStartUpSteps=4;( R5 R' e& Q/ U
  756.       break;
    8 x7 t, j3 T1 J$ o, O4 M  Z# _  P
  757.     case 4:. E5 G* N3 F$ U( z2 Y* S
  758.       {% h% L% N9 i3 ^0 R
  759.         FILE *fp;
    : j" O8 G5 v; q
  760.         char szString1[128];
    & S1 w5 Z9 Y" u) S! \
  761.         char szString2[128];
    0 W* a: [5 N5 L* j# y# F
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    , M; e8 y- \2 C5 `1 H# k
  763.         if(fp)8 n8 j/ f7 g- Z/ z7 F9 h$ u
  764.         {
    + P+ r4 L8 d( h6 X+ b
  765.           fscanf(fp,"%s",szString1);
    7 `  ?# E$ B# \$ k
  766.           fclose(fp);
    " ^. b  K4 G7 s: E& |
  767.           fCheckVersion=atof(szString1);* k$ c- o' e9 t  B9 q6 P% P
  768.           fp=fopen(".\\checkversion.dat","r");
    : [  g  G; A' U3 b
  769.           if(fp)
    % Y; t! @  D" C6 E+ U0 H& L) [
  770.           {
    2 y. Y1 X; Q* e7 O5 a/ s; \
  771.             fscanf(fp,"%s",szString2);' {& B$ Z9 A# D5 Z5 G
  772.             fclose(fp);
    # B) @0 L2 A6 v6 f# i+ b% t
  773.             if(atof(szString1)!=atof(szString2))
    1 o$ C$ ^9 @4 {& \
  774.             {
    % U4 M- k( ]' v7 g8 h' b3 l2 z
  775.               if(!Dn.Connected())
    3 R7 Q7 g$ {) x9 H
  776.               {4 Z: |+ V# D  o: U& d" e' Y
  777.                 bFirstUpdate=TRUE;. |6 U5 t" C7 k7 Q* v
  778.                 dwTotalFiles=1;
    6 z3 D. o0 ^9 T  o7 y/ h* g; k; d" f
  779.                 dwDownLoaded=0;
    + r2 h" z  d$ @
  780.                 bSilentStep=FALSE;# n5 i- ~. I' H& d% C
  781.                 bCompressed=TRUE;
    4 g8 A& _# C3 R1 Z  J
  782.                 strExtLocal=".\\DownLoad\";
    / B6 a& j) \  ?% z
  783.                 strFullName="update.txt";
    # f3 v9 P7 n2 ]5 E: g/ Z
  784.                 dwProgramState=AP_CONNECT;
    " `9 x$ h, Q) X: M/ }
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 \, i8 F3 q; i  R
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - M: I$ I3 }' {8 R+ j
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");# t& ]/ }% z- \2 f: J- H

  788. " _5 i  ^* @8 P, \$ ^5 C7 m3 P. S  S
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& K4 n8 H3 n- ?+ l7 F) W
  790.                 unlink(".\\DownLoad\\checkversion.txt");6 V+ B2 F8 C( o
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    0 O4 q4 S, ]$ F; I) J  ~% Y
  792.                 {
    & K. ]4 K7 U$ X7 O# f$ a% G& e
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    - U/ ^) r0 \4 f) ?. O' C
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    0 z- |/ C& W# z, ^
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    % O9 A0 |  [2 ]8 ^0 a' |
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - b: K1 Q# f2 I9 m* \4 P2 E7 m" l
  797. % ^6 e. x# [, N: P7 ]
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    5 v; O. l* L7 [/ D& _, h
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 x$ ?( A! s; X4 W( M, r: v
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");" z' ^& K" T; h+ l% D( |
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: X" k; M( A( J3 G
  802.                 }* J  {4 K7 _; @: x) C7 c" p
  803.                 dwStartUpSteps=5;" E9 k. i5 F( M; O- g
  804.               }+ {5 d6 N5 j# m/ T. O: ~" w
  805.             }
    # Q7 e2 D/ b" I8 G! S! b0 o: w
  806.             else: D4 Z$ [' O+ v, m5 \1 k( A& V7 s
  807.             {% j' t/ p' H& f, O$ k; d& c
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ( w$ ~: z- L9 _* I! l1 n3 K8 y0 }4 R
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* B, D) s+ Q6 \7 {9 d5 F
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : X2 `1 I$ J( b/ H/ I& g
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    1 E$ G6 M' a. Y  T$ v

  812. " K$ @) F: m8 {! U2 b
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + \( t1 I6 T/ ^3 d5 D9 ], b% g) b
  814.               dwStartUpSteps=99;
    7 A! G* W. ^& a
  815.               bFinishUpdated=TRUE;5 O; j' E+ T0 d. z5 Z
  816.               bCanUpdate=TRUE;( d1 ?) T5 G4 l" Q: ]
  817.             }( Z/ M! u1 R* M% Z
  818.           }" j" z1 ]) r' A' L* s9 z. ]
  819.           else
    ' n0 `8 z7 J1 {# \- A: f) D
  820.           {& d, Z! m" l8 h6 ^
  821.             if(!Dn.Connected())
    ! @/ R2 ]" |4 d" R: A# O6 }' k) m
  822.             {
    " b& |9 @6 m- m3 E
  823.               bFirstUpdate=TRUE;; C- W, y5 b9 [( u7 E) q
  824.               dwTotalFiles=1;
      ?( K+ o4 y9 L  F
  825.               dwDownLoaded=0;8 b  D7 b6 `& D& m
  826.               bSilentStep=FALSE;8 W4 g, Y9 [7 @: A. X$ s+ B$ ?
  827.               bCompressed=TRUE;; W* u( w1 h7 V* F: R0 Y$ X
  828.               strExtLocal=".\\DownLoad\";8 L3 q0 |3 |, j% [6 D) ^! D) z+ G
  829.               strFullName="update.txt";
    ' {! f' v/ f) f$ l% M3 ^& x4 g
  830.               dwProgramState=AP_CONNECT;
    / Y" J7 B/ g/ D0 e' D% T+ O. k
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 x$ E8 e2 P) L6 ^  w9 S( @1 K; v
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");6 t; Y5 j6 X& b1 ]' n; W
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * r) B2 p% N2 a" `) R9 T
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% {0 ?! T) M. d
  835.               unlink(".\\DownLoad\\checkversion.txt");
    : \4 D/ S* g& |9 b
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    3 V% p8 @6 Z5 T# O
  837.               {
    7 B/ k; p5 ^3 o, x2 K0 l
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");' c) H2 g: u2 Z; S! a! x+ ~1 x& U5 Z' s
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ! z4 [% x! s9 `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    8 }% \9 ~# T7 D& V  s: `
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 m$ S+ `2 n7 |" y& @' n6 z' \
  842.                 4 h0 L7 n, m5 C9 W. _# }
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 a. @( |9 \1 ^/ A2 w; k
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 i) U$ ^/ }4 s3 _; N( l
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");# M/ e2 C" L( r2 |0 z. H
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / w( j8 g7 o9 _' a# J" K% j
  847.               }
    % F8 |# v' c; i& d7 C. D; |$ |+ t9 S
  848.               dwStartUpSteps=5;
    + |' k9 W+ P- W- _8 z: X/ p
  849.             }% k1 u$ K4 \0 A) N; k& ^
  850.           }( a5 D6 {6 a, }" z" i
  851.         }
    6 ^+ V  K, k4 A, P1 z. |# X
  852.         else
    9 ], @" N: }5 M3 r1 T! g3 N
  853.         {9 j1 \6 X( U5 m% O+ ]6 {
  854.           dwStartUpSteps=3;+ Q( ^' _  Q& e6 N$ W
  855.         }
    + W5 C$ D: P5 I+ i* R( k( |& _$ S
  856.       }
    1 ~' }# n0 e% C$ O! W6 ~: s" U
  857.       break;
    ; n$ Q; Q% O* C  l2 V- ]! c+ v
  858.     case 5:
    6 M9 H2 F7 R3 _7 j( ], l: p
  859.       {/ w4 x5 R9 y' m, v7 G
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    8 s* x1 m: q& ]! w0 e3 q9 ]# d
  861.         {5 |5 X$ ?2 v* {3 C3 o4 X, [, M$ _
  862.           int opt_overwrite=1;
    ( q8 x# @1 j/ g0 D  G8 \; m3 ~
  863.           int opt_do_extract_withoutpath=0;
    % w1 \- W$ f  D" T) j* r/ W) J  |
  864.           unzFile uf=NULL;6 ?4 U: g& B+ Z* U- z/ c, Z

  865. 8 \( ^) |( F3 J' n+ f
  866.           uf=unzOpen("Wsa.zip");
    ! r: [" q0 q5 _  o# V
  867.           if(uf)
    * U! N0 M6 D. b: [4 b% V( {% J( h
  868.           {0 `  n6 t; }  H% p# w
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);1 I( Y0 Z4 y, p6 R
  870.             unzClose(uf);
    8 n+ r4 O9 D4 M
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    . q; m( X0 w4 h' s
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");, s, W! S: P8 k7 T& a- B8 ]% x! n
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");. O( q  Y* l1 |5 X) s
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 M" F4 ^0 |) v, Z0 S: t
  875.           }7 R) b+ `) x  d/ r5 m7 t4 g
  876.           DeleteFile("Wsa.zip" );
    # @0 F* Z8 _+ ]
  877.         }: J; {+ R5 q$ L  z+ A! m

  878.   A4 }' {6 [3 f# }2 J
  879.         if(CheckLocalVersion())
    $ d/ Q( `; q' z5 Y8 M$ s$ l; {; [
  880.         {" \, Z% T, T% n1 s7 {# K
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");9 [' }# ?. X( V: f1 W
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");; Z+ b, h9 t) a. T- W
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");9 G1 Y! t% @* c1 n( e% k; }
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: N$ h. U4 O5 {+ x! @& U  d
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);8 i2 O0 ~, y* T
  886.           dwStartUpSteps=99;
    3 a& t% X% U5 w  ~$ k" o7 Y6 P
  887.         }
    " y" ]8 B& C( Q) N2 j
  888.         else4 K, S1 a; R3 t4 ?# s; g
  889.         {
    : _& F8 C- v! l: x
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ |4 z& a/ e& [  u/ T
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
      r" Y4 C+ Q/ E& J. }
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");) m1 R7 v; @9 o  D) X% G1 `6 L

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-12 21:06

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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