找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
+ T2 B; n0 x- v! L& M
  1. / RevApp.cpp : Defines the class behaviors for the application.5 E, o. i8 L3 L
  2. //* ^) Z( @( r2 D$ |
  3.   C' Z( a, m8 P
  4. #include "stdafx.h"4 w4 @6 W; W5 `1 w$ ?" Z0 |1 Z& ?

  5. 6 y' R# A, m( n) A! s1 m; K
  6. //#define UNICODE
    ( ~! A/ h! N& i# f* z
  7. //#include <gdiplus.h>  \% A. R$ b" B
  8. //using namespace Gdiplus;
    3 p6 s: b1 k7 I$ q
  9. : M5 r% N: f: t8 ?) q3 `0 \; W
  10. #include "RevApp.h"+ e& G0 r3 Q- G) l, y. R
  11. #include "RevAppDlg.h"/ x4 q; S. b: ~" w1 \- O' X
  12. & P9 z9 E) t: V# B" ^, x/ P
  13. #pragma warning(disable:4786)7 Y7 \& `4 X$ F; u
  14. #include <map>
    ( e) f/ j5 i# B
  15. #include <list>$ f9 Q* G; N5 B! Y# z5 `
  16. #include <direct.h>6 r4 o" ~5 T6 F  C
  17. ; s% _7 f7 a/ P. C6 G
  18. #ifdef _DEBUG! a7 M4 n4 e' t2 z% [* k
  19. #define new DEBUG_NEW2 |! ]4 C9 j  {7 P3 j
  20. #undef THIS_FILE
    , m* ^4 H+ Y- m) s; U
  21. static char THIS_FILE[] = __FILE__;* k9 w: K( }; o7 }* d( T
  22. #endif
    7 X) B' X) J8 V- P9 [0 N
  23. #include "SkinResDef.h"
    6 u0 M  o5 t% W, R% F
  24. #include "ChangeBG.h"" e6 B: t: n  u
  25. #include "AFXINET.H"7 A% V4 p1 M+ j6 W2 X

  26. 0 U* l8 p, y# O4 ]/ h
  27. #define TRADITIONAL_CHINESE 08 m! b5 X/ E' ~: P- l- Z
  28. #define SIMPLIFY_CHINESE 1
    & B1 S  D' Y& L2 j  E# h
  29. #define ENGLISH 2
    % l8 c5 q% B7 u& X) C; Y
  30. int m_iLanguage = ENGLISH;" L7 P  `, r9 X: i1 G
  31. /////////////////////////////////////////////////////////////////////////////) O" ?" Z* N0 I. K) \
  32. // CRevAppApp
    % C/ b7 Y0 K2 C0 A. U" Q  C
  33. 8 W' X- w6 r/ w0 e) L% w
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    * S* p, l- r' C2 e1 d# D# j4 ?+ h
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    , C" z+ y* w' @& ~4 b
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.3 j$ S& Y+ k$ {
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    - C1 f% k* d6 i3 z$ }
  38.         //}}AFX_MSG
      s8 ~! U  ?3 }( ~. x
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ) n& f0 ]' r4 Y5 `+ \4 Q
  40. END_MESSAGE_MAP()
    * d1 ^/ f! k. ?
  41. ( N+ _) E' P6 c& [6 d: \; Y0 j; \
  42. /////////////////////////////////////////////////////////////////////////////
    1 y6 j1 r! N" l6 i  m' C
  43. // CRevAppApp construction2 a7 b( B2 S  @" h9 a
  44. * G' v0 e' E5 h/ C$ H+ N
  45. CRevAppApp::CRevAppApp()
    6 w# p  E" w" s7 E2 g, t# q
  46. {6 S5 c" S* b/ A1 N5 k% z
  47.         // TODO: add construction code here,: k3 \+ d8 I' x$ Z  [$ |
  48.         // Place all significant initialization in InitInstance: m% i; c  X) p/ N, D1 \$ U! K
  49.   bDisplayIsBig5=FALSE;
    7 c1 F4 |2 W4 {  }1 s/ P( x4 a
  50.   bRestartUpdater=FALSE;
    5 ^/ j4 X( n. [4 T% j4 O9 w% G, z
  51.   bFinishUpdated=FALSE;/ K7 B2 d) p7 h
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    $ h# X' F4 w% J/ b: I' c. v
  53.   InitChangeDataBig52GBKS();
    9 j) v% l8 w7 [( g+ ]0 r
  54.   InitChangeDataGBKS2Big5();9 c7 j7 F. q2 o
  55.         //
    ; m6 P# T" A# h: q( g
  56.         bClickRunExe = FALSE;
    9 g( g9 v) g9 v8 P/ i" w) J
  57.         //- w# _" V/ C1 ?, k& ^7 J
  58. }
    # P( j; V9 l/ P7 r, P$ t

  59. , M$ Q+ P- v" D3 E9 z
  60. CRevAppApp::~CRevAppApp()' f, p* s6 r4 C( m$ l) X0 b
  61. {  z" d7 E" j+ t( V1 u4 V
  62.         // TODO: add construction code here,
    3 T! j: a  U0 }( C  S% i5 w
  63.         // Place all significant initialization in InitInstance( o! N" E! P- a7 E1 D4 F
  64.   EndChangeData();
    * c4 a, }' O5 D  z
  65. }
    $ O2 j2 M0 }9 ]/ O5 f( D
  66. $ X3 t: R. @' [
  67. /////////////////////////////////////////////////////////////////////////////
    # s( A) o5 b# R# F$ g9 F
  68. // The one and only CRevAppApp object% F7 b$ X1 s) a  [! L0 D9 W

  69.   O6 ]5 V$ L1 q! q1 Z/ ^! L
  70. CRevAppApp theApp;* Y7 ]& x+ S6 e3 ]* m
  71. 6 `2 Y' a5 m; R
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    3 x9 V5 R0 B7 d3 V0 a% G2 A. K' `
  73. {
    $ B* r1 b3 }: x# ^0 `- L; N" N, I8 M$ {
  74.   int iEOF=0;
    - k3 A( ?. _7 U, }0 `: f& C
  75.   char szTempName[MAX_PATH];, n0 _; T5 F& l6 v2 Q7 y
  76.   *szFileName=0;
    ; z- u# S2 P0 k) j1 o- e  o, \
  77.   iEOF=fscanf(fp,"%s",szTempName);8 T9 e' B3 W+ q$ o8 \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    2 y  E4 h* i3 [, [& Y( L! H
  79.   {
    % C/ i3 h+ W, H
  80.     strcpy(szFileName,&szTempName[1]);
    / L9 b, G. X% M2 Z' S, h
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF); I* H! }- w4 B: U6 x
  82.     {
      r( ^2 C2 ?3 s) q
  83.       iEOF=fscanf(fp,"%s",szTempName);+ Z- J& \9 B( u% _, A2 b  Z
  84.       strcat(szFileName," ");+ ]3 \: j  S. E* {, O" u7 H9 @
  85.       strcat(szFileName,szTempName);
    4 k; A# T: p5 k5 f
  86.     }. z5 ]7 s( h" Y5 L4 x# x
  87.     if(strlen(szFileName)>=1)6 B: f* _1 \. S/ W* l
  88.     {
    0 y& t. x" R  V& b0 c6 P; H
  89.       szFileName[strlen(szFileName)-1]=0;
    + w+ {/ y6 o2 E8 f
  90.     }
    , }3 x( Y5 E; `; {/ E) O
  91.   }
    5 q& C7 G4 l+ k
  92.   return szFileName;; u2 I. M3 h5 P, Y% h
  93. }
    ; T4 r, a  A+ i7 z1 J( j7 J0 Q
  94. - h( g$ V8 V7 S1 D
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    $ r: V1 i2 _# T! b, J( Q
  96. {3 Y2 P% V8 }+ Q2 a2 O# k( ]
  97.   FILE *fp;
    1 w6 U: Z3 A% {+ ^" d8 k
  98.   char *key=NULL;
    5 w" P1 F; ]; k. B
  99.   char version[MAX_PATH];
    5 v: y% V, i) V8 p
  100.   LPUPDATEFILE file,olds;
    , }9 a0 \- A7 t, J( M: \
  101.   std::map<CString,LPUPDATEFILE>::iterator p;1 K* @) z$ s  v
  102. ) ?8 U9 E, `& }- C, v
  103.   UpdateList.clear();
    1 o# A' K% N& y! z5 t! p
  104.   UpdateFile.clear();
    5 p" E! N+ p2 }  V# |
  105.   if(GetFileAttributes(filename)==-1) return false;* k; p3 O1 e3 O+ Y
  106.   if(!(fp=fopen(filename,"r"))) return false;
    & ?1 Z5 F- R" d( `, e  x
  107.   fscanf(fp,"%s",version);& y+ h( t; p. `" H( J! O
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }* F! c0 A; J7 W3 j' B/ R; c8 R8 o
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ! ~) T' p/ p* G
  110.   {
    9 O8 `, P" ^9 I! J& ?
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ r! j: U) @6 @: [! t- x4 b
  112.     fscanf(fp,"%s",file->path);) X* {3 z0 v3 T) O2 F
  113.     ReadFileNames(fp,file->file);
    # ?& ]# y: F% b; `0 w- m  Q( \
  114.     strcpy(file->full,".");* q' z- h7 G: N
  115.     strcat(file->full,file->path);  b( y& j# V7 t
  116.     strcat(file->full,file->file);0 u& G4 N" d: U2 i3 ?
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()): F2 e7 I5 |: h0 J) t. O
  118.     {( g  p1 n. N  |# }& f3 @% C- D1 n" L7 e
  119.       file->vers=(float)atof(version);. O, W+ v: Y' p4 w: q: [9 k4 _2 L
  120.       UpdateList.push_back(file->full);2 m$ R3 i9 B3 n- I
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));& ~5 m/ T6 Y! @6 I7 ]8 ^4 ~5 I5 D
  122.     }
    ' z: q5 Q, f$ N/ T3 ~7 x5 S8 A  T
  123.     else
    5 ~# L, `0 V* n  B) m
  124.     {+ Z3 p# W" w0 ?  Q: |
  125.       olds=(*p).second;
    9 s- `' v& V( J4 q7 D8 H$ d5 N
  126.       if(olds->vers<(float)atof(version))
    9 c4 }5 M# r/ r9 H/ ^
  127.       {
    $ j* Q1 a  q' J7 C5 \  N
  128.         olds->vers=(float)atof(version);" |- ^- F, B" C6 u4 i& o
  129.       }
    9 }+ j, n+ S8 r. j: G9 Y
  130.       free(file);
    4 A; m7 ^- P* q; U
  131.     }
    7 c- Z- \* a, ]2 N' V* H
  132.   }
    0 g2 y2 ]% ~  S" d3 Z& c: ^5 E) k
  133.   fclose(fp);
    7 o7 H- Q% G. k7 a( _* V! K
  134.   return true;& B: v8 t. l3 h" B( c1 x& J
  135. }  {, ^# {, V& Y; \; @' Y
  136. 1 O) ~- G7 k5 B9 W+ W9 G' J
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    : k( x+ g% {' I9 G( ]6 K3 g
  138. {* Q0 f0 A9 H& I& V- Z
  139.   TCHAR  szFull[MAX_PATH];
    , {: }/ h6 i6 K9 Z2 ~, j
  140.   TCHAR *token,*inter;
    ; R7 S& o4 l( ?* {6 {6 ^* L9 B
  141.   *szPath=0;
    0 h% L8 q% q; w* n/ O" |1 l! z+ ?
  142.   strcpy(szFull,szFullPath);& [' G" y" T0 Z, O9 Y1 d- f
  143.   token=strtok(szFull,"\\/");
    + K; ^( v; `' x: \
  144.   inter=token;
    6 V* F7 m4 K0 _
  145.   while(token=strtok(NULL,"\\/"))
    $ f' k3 E) U* n
  146.   {
    & S4 m* S8 x6 C/ i! B
  147.     strcat(szPath,inter);
    7 B/ @3 o1 T/ _: R- Q& G' `
  148.     strcat(szPath,"\");
    % E/ r4 ^7 l. G3 m, a: X! k
  149.     inter=token;
    7 N  g% g4 W7 j; I$ q  G- `
  150.   }# A1 Q- `6 y) c( B$ Q
  151.   return strlen(szPath);
    1 i+ {" o1 @; l8 t! {4 Y4 h# `
  152. }5 z+ @- I+ [2 l4 S3 O  \7 l- j

  153. 9 K- k+ }4 \/ D/ V9 q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    , T7 q; o$ ?3 k7 P2 a+ x# D  F0 L
  155. {# m) [( S& k0 V" G3 o" u# v
  156.   DWORD attrib=GetFileAttributes(Target);
    # k0 ?& J, c" w4 p9 H
  157.   if(attrib!=-1)2 }8 v$ H' u# Z! x' B+ v/ U; z* x
  158.   {* y5 \' I( v5 }
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))  E% q1 }6 M0 o4 l
  160.     {3 i4 \% l3 Y% n
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);; R+ L$ O5 u: N* x
  162.       SetFileAttributes(Target,attrib);$ l  G/ Z5 ~5 a
  163.     }
    3 S+ S. n/ m3 c, v7 x- y
  164.   }1 D, T/ m% H  a' e! B2 d2 V
  165.   CopyFile(Source,Target,Erase);' H/ [5 e1 ]. _6 Y: @! Z, n! @) n
  166. }
    8 D# n9 ?+ B+ [2 N# W1 ]6 ^

  167.   N% N/ _2 N4 F1 M2 o8 ?
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    $ x  o# j  y/ l! b( _# @0 D. ^7 @
  169. {  u9 Y+ x; p3 ~0 \5 W6 u
  170.      FILE *fp;
    - J, ]! j$ s4 D) B4 J1 j$ e
  171.      char  szBuffer[8192];2 ]+ i+ U; r7 p" R
  172.   va_list  argptr;
    + y3 o$ c. t# z; h

  173. : y) O8 T8 [4 A, B( ?  B
  174.         va_start(argptr,message);- S- J* D& q2 ]+ I7 }* E
  175.         vsprintf(szBuffer,message,argptr);
    5 Z# p# M. t) K2 G- c+ L
  176.         va_end(argptr);
    3 t5 p  ?/ s, i2 p0 n$ J8 M
  177.   fp=fopen(FileName,"a");
    ) u; t6 G; U, j+ g2 L" O
  178.   if(fp)
    ! X& T* C! f& K1 k$ @; }# e
  179.   {
    ! Z4 {7 ~' K& m
  180.     fprintf(fp,szBuffer);4 t6 d' ?/ M2 E$ N
  181.     fclose(fp);) D1 x( o$ v8 u) a
  182.           _flushall();3 q7 X) s% I9 T' |) R
  183.   }
    % i0 I  u5 ^: H  C* f9 j4 K
  184. }
    $ J  _" z0 m2 T) z
  185. 7 w9 {0 B* \' A
  186. BOOL CRevAppApp::Fclearf(char *FileName)# L" i3 f  t+ d+ a6 U$ G
  187. {
    * E) b% h9 J0 q+ H/ \  c
  188.      FILE *fp;  @: r0 U& g% y. E4 j" c
  189.     DWORD  attrib;5 s: p& `2 P# Y0 J# f) L
  190.   attrib=GetFileAttributes(FileName);
    0 Y! a% Z" q4 q2 M: C1 k
  191.   if(attrib!=-1)
    * n/ J! }6 K- a  ?1 k
  192.   {7 H+ E, X) ]6 b( ~
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    9 {& _0 i8 }+ Z  @. C( u" D4 u
  194.     if(!SetFileAttributes(FileName,attrib))
    + U' K' E0 P% [
  195.     {1 ]' @$ b% J/ _0 Y2 E+ _: Y
  196.       return FALSE;
    : h& C9 |  A* f" {3 A" k
  197.     }
    6 {7 t! a9 B6 U/ {8 r7 K; Q" t
  198.   }
    % b0 p- r0 R) T4 N% q) M
  199.   fp=fopen(FileName,"wb");
    4 U& S* ~) x/ }: o' M; K! X
  200.   if(fp)
    . s: u/ w6 p2 v1 z) o! k1 T1 P
  201.   {$ G( T- v) \# |9 L3 p$ O! Z8 q
  202.     fclose(fp);
    ' y5 q, i: o8 q2 J  O! a3 @
  203.   }
    * V5 Q9 H& I6 W
  204.   return TRUE;9 X- I7 d+ {3 w
  205. }
    ! F8 n' F, m' V& O
  206. ! P- \( m4 |7 l
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ' V+ ]' j. X1 z$ T
  208. {
    # i& m/ M6 D6 a: E- V! j
  209.   char filename[MAX_PATH];5 z& W( [+ |  V
  210.   LPUPDATEFILE file,olds;
    : z6 r( r6 V# L" r* Q' o
  211.   std::map<int,CString>::iterator i;
    / |# @) l  x% o% l9 T1 S* n
  212.   std::map<CString,LPUPDATEFILE>::iterator p;  x0 h+ z6 g, i4 X  g8 M
  213.   std::list<CString>::iterator l;
    4 x2 t  w/ d$ Q$ N& [& u8 a; w
  214. / y1 L' c/ [, X5 {9 x7 C% D
  215.   if(bFirstUpdate)
      S7 v3 T# r* Q; L- X
  216.   {
    0 S! g- t2 N. z: P- p
  217.     dwCurrFile=0;' x# R5 O3 E* Z
  218.     bFirstUpdate=FALSE;
    + ]" q" `$ t  O2 K# u1 C. ~+ S8 s: V3 p' y
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 v$ P0 z- \! H+ s
  220.     {
    1 G# l2 p# ?. N
  221.       dwTotalFiles=UpdateLocal.size();
    5 K" m$ U! k+ ]9 K& k; r- b
  222.       dwDownLoaded=0;* G/ W$ D. B" S, ~4 G
  223.       bSilentStep=FALSE;) s3 a& O, U4 b* p
  224.       bCompressed=TRUE;. }) `* O* U+ \2 _1 }' U
  225.       strExtLocal.Empty();
    9 [* S, L: I( r
  226.       strFullName=(*i).second;
    " H0 {, \) G& w! d
  227.       dwProgramState=AP_CONNECT;
    , \  t; D. U* v3 m9 N* m- k# L6 X
  228.       return TRUE;. t' f+ O$ k4 Y
  229.     }
    5 y8 ?) e% s" H6 Q# w+ I4 E& \
  230.   }
    7 J, Z4 W' f1 s8 a
  231.   else if(bRestartUpdater==FALSE)
    ' s0 f7 y* U( `  ^3 x% P
  232.   {
    8 M% h. h: N; L8 `7 r
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()). o2 K. |' Y$ F5 J3 K+ Z
  234.     {) q  m3 R/ J: s! o* [" D7 @2 P
  235.       file=(*p).second;
    2 \6 f9 U* u+ P0 ?6 u) g. U5 n) j" i
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    6 P; Y7 ?( h1 D5 T8 c8 F
  237.       {: X$ X  L' b" s2 S4 {8 Y
  238.         olds=(*p).second;6 x* t/ r1 R' Z/ e" G! r/ X
  239.         olds->vers=file->vers;
    + P% v* @* a) k. i( O5 x$ v
  240.       }8 b0 j. u1 b  J+ M1 N0 m
  241.       else/ z5 e% N: c7 O) o+ _; |
  242.       {- v! i. R! n! r( y7 M9 m
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # H6 R; g) [- |5 o) H2 l. z1 j
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    : `/ `/ g: ?( ?1 d& {( k
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));+ L& `; b  @- X. G7 E" r3 i- J+ R5 `
  246.       }
    $ s0 n- N' B1 x7 q+ c" l9 X
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");+ M& j/ ]. j3 l# l3 B' Z, q& H
  248.       sprintf(filename,"(%s)",file->file);
    6 P. Z" u" L: z3 w
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ) g# n. Z7 k/ H3 R9 e) V
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }# P4 ?/ O& r( j* c
  251.     }
    ) s+ ]; }2 c  t) w# }5 o
  252.     dwCurrFile++;
    : b( C/ u" k' [: H9 L  x
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# Q% @# W' R9 R' g& y: i! C
  254.     {6 g# m6 K7 p7 D& a& Z
  255.       bSilentStep=FALSE;; R) @1 T9 R+ _$ X
  256.       bCompressed=TRUE;
    " S8 b% r( v6 |: L% A1 y
  257.       strExtLocal.Empty();
    . p9 a2 ^$ n! D, z. J9 k- p
  258.       strFullName=(*i).second;
    0 y( q9 f. H6 O/ H
  259.       dwProgramState=AP_CONNECT;
    " k1 x* S: \+ F
  260.       return TRUE;6 O* p0 g% e7 o# q
  261.     }
    7 f" U) _8 J1 `! Z4 p0 d# b
  262.     if(!bRestartUpdater)
    % R3 |$ i7 o, ^. I0 p
  263.     {9 [. w# {7 b: t/ g6 K
  264.       int iCurrSize,iFileSize;* g& m: n4 k5 t: X- a
  265.       iCurrSize=0;; o* {3 x7 B. u, D& B& H
  266.       iFileSize=UpdateList2.size();
    ; q* N% R2 K) {0 u: m/ N+ [- \
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ( }, y6 \5 R4 J% m& _; g
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");/ c4 H+ v' q% g  ]8 H  c9 M
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ( o8 t5 P  c& v& W6 c
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 f* }! K& Y( c5 u/ W
  271.       Fclearf(".\\update.dat");* r2 T& F/ r9 Q8 E
  272.       Fprintf(".\\update.dat","Bloodyf\n");/ I8 @- z" I# T* T1 g
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . o# ?4 Z- w/ F0 j! ]/ i! i) }* B
  274.       {8 K: ~) @; g: }6 M
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())  x  G) S. |5 D6 S+ R
  276.         {3 A' j1 R; O7 a2 V
  277.           file=(*p).second;0 p1 ^) Y) c7 J
  278.           sprintf(filename,"(%s)",file->file);
    : B' \; I" `2 g- I
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 t: N5 K& F) w2 [; k
  280.           iCurrSize++;( L2 U6 y0 E5 C3 ]* \
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));2 x8 Q  X+ v" v
  282.         }6 e2 L- f2 q2 u5 r* n& \0 r4 t
  283.       }: ]9 J) m1 X7 h: I: P
  284.       unlink(".\\update.txt");
    # \3 w# c/ G0 E6 E
  285.       unlink(".\\update.tmp");! Z/ v# @* }$ q9 [4 ^) ~
  286.       Fclearf(".\\checkversion.dat");
    2 u( m5 ^0 D  r& q" X
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);2 W) D7 n! q  i( q3 |
  288.       if(UpdateLocal.size())1 I* P& T" D0 h
  289.       {
    7 Y( Q9 Y0 T* E
  290.         UpdateLocal.clear();
    9 l1 f+ M3 W$ H- H2 A
  291.       }9 D1 b" E6 C2 N# _/ }2 o7 }0 k
  292.       if(UpdateFile3.size())7 Q7 u. t! j' n+ G, }* Y7 K' K; W9 g
  293.       {
    ; F( w; C$ V3 t& W
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# Q5 r4 t/ \: u- ]  R) h
  295.         {7 s! u/ |% i! s6 q- R4 l9 w
  296.           file=(*p).second;: o) A2 i9 A3 `2 C; z
  297.           free(file);1 |: h# y# N# g' z. _
  298.         }- Y& t  ]2 R4 w: i
  299.         UpdateFile3.clear();" F4 {+ e/ ^( A! T& j8 s
  300.         UpdateList3.clear();
    ( t% O* T& {# ^6 T% `& M
  301.       }  S" ~; t0 x4 Z9 B: h
  302.       if(UpdateFile2.size())  t  H; p3 F  z' D& u7 g
  303.       {, X( ]& F# m3 _6 A; J8 c0 [% C5 U
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)0 s4 F- {4 r, Y$ E! O, h4 }
  305.         {- R2 s! c, Y* `5 n  K
  306.           file=(*p).second;& }6 b) r' g! L( N% k- q
  307.           free(file);
    0 s, s( @5 g/ w* N& x2 n, y
  308.         }0 v* a2 k& L9 Z  Q) ]
  309.         UpdateFile2.clear();. k- s3 Y& \0 V* e1 i- a
  310.         UpdateList2.clear();
      M8 @  w% I( I& C- R* u
  311.       }: C# A4 h4 R0 r7 \3 U6 d! B" T
  312.       if(UpdateFile1.size())
    * @5 z" S8 O& M8 A% Y7 t
  313.       {
    $ p  f0 z+ d8 b, a
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ h4 p1 a0 l# o# E3 v! \
  315.         {
      C: H! _  S9 ~* ]; M& k/ T
  316.           file=(*p).second;
    ) H% b) T* D, ?( m. T* b; u
  317.           free(file);4 d) R* I; U& ?3 ^( n0 B
  318.         }
    * {: B% F( f' a; ~& u7 V
  319.         UpdateFile1.clear();
    3 @: k- f/ C+ b
  320.         UpdateList1.clear();
    : x& V/ o6 z; m. e5 ]3 x
  321.       }
    , q6 P- R2 w( X9 x, g
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));, Y& U+ `( j$ }# e. W3 _) Y* M, d" t
  323.     }6 y: Q" \( K) p& G
  324.   }! K" @/ E5 N  ~3 {" i; i
  325.   return FALSE;
    * a3 ]2 ~" b% p
  326. }' w  ?  J; b2 S

  327. ; M# O1 i4 l7 N% T4 ~0 k$ q
  328. void CRevAppApp::ClearAll(void)
    7 ]- g+ U' d; V9 s" R6 D
  329. {( m% a: j3 A/ O
  330.   LPUPDATEFILE file;
    " }7 E& X" R8 N& {
  331.   std::map<CString,LPUPDATEFILE>::iterator p;, @6 _: d# U; u: }/ a
  332. - W& c8 P. j; x2 j; b7 x$ }
  333.   if(UpdateLocal.size())
    " d* T2 e# ^2 q+ p. z
  334.   {
    2 {, g1 J5 r) {$ {* S1 }
  335.     UpdateLocal.clear();
    5 W7 d3 y9 k% y* ^: [3 P
  336.   }, _! j3 b1 q! S
  337.   if(UpdateFile3.size())
    1 @5 Z/ Q* X" B, u
  338.   {8 P- C0 F+ \' R5 |3 j
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- n1 ~! K7 v4 A- T9 K
  340.     {7 l3 V4 P' @2 _: Z2 k5 \
  341.       file=(*p).second;. J$ [, ?" w2 f0 M% Q
  342.       free(file);
    5 Q. |4 H1 R# b  x# t, l
  343.     }
    5 r/ g" M( P4 Q3 g' m, I% i' n
  344.     UpdateFile3.clear();  {5 D" a9 f$ z: r) {2 c: l
  345.     UpdateList3.clear();
    . c. l" x% M* X- I( W  T! x" |
  346.   }
    " T' N; V2 t% c  y* x" [4 W
  347.   if(UpdateFile2.size())
    # m, d+ i$ `9 V+ n, T- L
  348.   {7 R' a) h  O1 c4 H
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 j& ^7 \8 [  D
  350.     {$ m4 x- f( i+ Z" B4 D: b
  351.       file=(*p).second;6 ~6 Y+ |* A; }5 X- a
  352.       free(file);
    2 `2 X6 ?3 t; ]! ]& R, i4 x4 n
  353.     }
    5 [% a' n1 l+ }! K7 h; ^
  354.     UpdateFile2.clear();- N5 n) }" s* W2 k7 @! S2 l0 @
  355.     UpdateList2.clear();- L: R. r6 E- g
  356.   }
    : m6 Y8 W% d6 I) y4 j, l+ ]# R
  357.   if(UpdateFile1.size())
    : O. p0 j- x4 y# a: o
  358.   {. e1 T/ T9 |. n" g! w* ^
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    2 j8 r) e' u4 q
  360.     {# ?# B: `( l! n
  361.       file=(*p).second;: G! S' Y8 I  @
  362.       free(file);( b7 s& F9 {# m( s2 z
  363.     }
    2 M/ l6 Y4 A" z
  364.     UpdateFile1.clear();
    & `2 A, C* C2 j6 [
  365.     UpdateList1.clear();6 M0 H  h' O3 T7 I
  366.   }
    3 M! _" ]; v9 e4 U- i
  367. }  ; i# M- \5 g. G0 O
  368.   
    ' l. ], `: i( v& W- l9 v
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ' I5 [4 j( Z9 N, N6 E: Z
  370. {+ n& d; R' c/ o$ ?: U
  371.   int c;  k3 o- d9 }6 v# @& H
  372.   LPUPDATEFILE file1,file2;
    % D9 `& r/ L. F9 a/ w; I/ C
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;  r5 l4 d5 }7 J  K  ~+ y% ^  i
  374.   std::list<CString>::iterator l;: _9 f9 j: ~+ a, }+ m

  375. # K7 F) i3 A  `5 v- s
  376.   UpdateLocal.clear();6 f& G. F) k( b8 w- Y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 \) |  T1 {- ?* w$ ^
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);' a) v6 c3 v+ }+ H4 J: O
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);9 X7 G. A8 V  m. e- g2 a
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);- L% q6 o, I" D" x+ h' ^8 _7 E! s
  381.   if(UpdateFile3.size())6 |4 D  V# L+ C* g" m
  382.   {8 q& `1 P$ D  a/ n1 |
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ' O, N6 {. ^4 r; z
  384.     {
    6 O3 [9 P# h2 B2 z: z7 M
  385.       file2=(LPUPDATEFILE)(*i).second;
    : B2 u% J2 |8 W" L7 [- P; l
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 \& }* i: X, k2 Z
  387.       {, ^, t0 ?9 u! M0 A, V; B( R
  388.         file1=(LPUPDATEFILE)(*p).second;
    3 i) r1 n# e: @; ], d6 A" k9 \
  389.         file1->vers=file2->vers;3 T/ Q2 r# q2 r0 W
  390.       }: q  J( y% O( d; P
  391.       else/ ~3 ^  z2 n# w9 K
  392.       {$ z7 O$ u, e# I
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: b" L1 J4 N+ e- w
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ( W% T3 ^- V( P+ @! g" F: _. d
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    , S- s: n: Z' b( B9 w, I. O
  396.       }
    % P- i- M2 }) h6 D% l' V+ a
  397.     }4 ]1 l( R& r) o- W9 ~! W: ~- M" [
  398.   }7 b! S3 q5 `. Y$ |9 y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)9 a5 Z2 _* o; @9 }( Q0 g
  400.   {
    $ b4 ^: U4 U3 m: B5 z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())7 {/ Z; x& p/ ?' F# ?" r
  402.     {
    8 _) _" u6 [, y: c
  403.       file2=(LPUPDATEFILE)(*i).second;8 J! d5 P% G" f+ H% e
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 G/ [) U8 g, `9 |6 Z
  405.       {2 {% Q& O5 [, G. ?0 C  W0 \
  406.         file1=(LPUPDATEFILE)(*p).second;
    % i. ~1 [& @" i* n+ s
  407.         if(file1->vers!=file2->vers), @% }  L3 t  W! G; S1 j5 P! I
  408.         {
    2 I/ {# Z, D, A1 P. g
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & w3 A/ K% u& I/ p* T
  410.           c++;
    + k; J% }6 o( t
  411.         }
    4 @% b% e& Y& [
  412.       }% ]7 u5 r8 u/ P5 w( r
  413.       else( c0 x; c% D0 G" M% `
  414.       {
    ; ?& j: l- z3 w) v: V
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 D! K5 W/ o! ^1 L
  416.         c++;5 C' a$ k/ c& a1 \
  417.       }
    - @+ {) K5 R) |$ ]8 X; K
  418.     }
    7 R2 T, k6 n* R0 L1 g% n& P
  419.   }
    , H! O1 R8 @  e% ]& C% F" Y
  420.   unlink(".\\DownLoad\\update.txt");5 I/ w4 I! J+ N. F. {! a; g
  421.   if(UpdateLocal.size()) return TRUE;3 P2 A: B! q5 p2 C2 a
  422.   else                   return FALSE;, M' z7 J! j! m* K6 G
  423. }: H: F9 S) X, q. G* V6 ]

  424. $ ~* c+ L* ^% [+ R9 [7 L
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"& f  Y) X4 @# G1 [$ [4 r0 [: c, V
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    & o$ j0 ~7 R6 ]2 |/ @+ u

  427. ; I$ S; J7 w, J; }1 T
  428. # g4 y7 i- E) {  l( W

  429. 9 k$ \+ S- T/ {' d
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ) T4 I6 W$ s! [. Q- v
  431. {
    6 r% e& l0 z1 c  U6 ^
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;9 C) ~: |0 g$ W& }9 Q
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    + V3 a! X# l; ?- A. Q% K! u2 h& L
  434.   {) ^2 G# }+ j+ m! U: w& n! o9 v
  435.     char szLanguage[50];
    + d4 H+ `8 a: X
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 d* V7 _$ c! O; l8 @
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 Y2 e3 R; J) q' F6 ?
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 @0 t; l9 Z9 H  R2 v" ^
  439.     else                                   m_iLanguage=ENGLISH;! N# M5 C: |. v$ `8 R
  440.     char szRegister[100];3 y7 m7 z6 i% i8 X; L) l% Q* O  u
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 s( ?( A/ ^4 M/ R8 U2 p- g+ c
  442.     strRegsName=szRegister;# M$ U4 I% u+ r1 Z7 v2 P
  443.     char szPatchURL[100];& y7 _" M( e% u  o, p0 v) E9 G. Y6 q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ r6 m: ]  L- q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    . n1 f, t2 `7 V% P0 V
  446.   }
    ; |: A& a7 `/ E! O9 Z! P% W: e7 S
  447.   else
    ! c9 v8 t' }, H) C5 V
  448.   {9 @! W- F# f# x: A. C
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);! P* [. V2 E/ ?0 e5 v% t' _
  450.     strRegsName=DEFAULT_REG_URL;
    4 S+ i) D! W6 {' s" G
  451.   }
    0 C) @/ S& M9 {, D: r' ~+ w
  452.   if(GetFileAttributes("hosts.ini")!=-1)* J" A; }" u; Q7 c7 ~, u0 b# v
  453.   {, B1 _& y8 w: \3 k3 m
  454.     char szIP[50];
    ) ~. v# d" c1 r
  455.     char szDIR[300];
    ; N; V: _) m# g, y9 l+ }' A, H" k
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))) H# {2 w% D( F: F
  457.     {
    ' ^1 o  ?6 q2 w( T5 h' |* A
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ! D8 d- ?3 }; M1 }3 q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ! {2 Y0 r  y% {
  460.       strHostName=szIP;- O1 B! L) j( ^; M
  461.       strHostPath.Format("/%s",szDIR);5 \  N' X. E; e5 O2 B
  462.     }
    & Q1 u6 T3 G% f9 N7 w. {& f* r
  463.     else
    # ~  `1 C4 J& k! A. U$ p
  464.     {
    6 z6 p; m7 W9 o$ R! w
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # d3 T. C8 A8 B2 y
  466.       {! e* S2 Z- C$ ]
  467.         char szLanguage[50];( t9 c; X) D' Q
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    # ~" H0 E# n3 k6 _6 C) R
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;( }3 b5 v: y, r7 R( P
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& y0 Z6 M2 R/ H0 d" I8 y: A2 Y( V, h
  471.         else                                   m_iLanguage=ENGLISH;: B: s" ^1 u* }0 z+ b2 X9 T* T
  472.         char szRegister[100];, a) E/ c" B( o; c- D
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 s+ t5 c* B5 x* x$ R; ?5 ~
  474.         strRegsName=szRegister;
    * S0 I2 T# a  V0 m* }6 U
  475.         char szPatchURL[100];- A# q" ?3 e/ ?) `5 h8 `
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ! a/ T4 D% c( W9 Z; F9 r- F
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & H2 P+ Y4 I3 p- _
  478.       }2 B- x3 H: a$ {0 ?# F6 @
  479.       else
    ; _) V1 \+ H/ g8 ]! \  v
  480.       {! M8 K- z! A7 }0 q" a/ k' Z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);' Q" S) a6 m- f2 p$ k2 N% ~/ R5 M
  482.         strRegsName=DEFAULT_REG_URL;
    4 P9 ~" O# E6 i2 j
  483.       }
    % q, C& Y) t/ U. Y# Y
  484.     }
    9 A+ e/ s' p6 l8 J7 g
  485.   }
    7 _& f8 i) _+ S3 |
  486.   return true;
    # `* f% |( C  p2 \- G' s% L) W
  487. }
    ; Q  o9 c) _$ C# N9 o1 i* j' [6 i
  488. 4 d0 h( ?1 s6 ?' l1 C) C
  489. #include ".\ZLib\unzip.h"
    4 o! k. S7 k. [
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    # a! `( X- h" E+ T; S, t; C
  491. /////////////////////////////////////////////////////////////////////////////
    * i( f5 h( F9 L  `
  492. // CRevAppApp initialization
    $ t" g8 B# ]6 x# t5 n. ]) s+ x
  493. ! r3 C' t/ L' G- K
  494. BOOL CRevAppApp::InitInstance()
    * X2 ^/ W) u, N7 a
  495. {
    % |8 j& f+ |) @4 [3 b
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];8 U: K, d; n  V
  497. - O7 {5 Y$ _; v8 F) U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 \$ E5 e  k5 I4 [. v8 d: f
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))% v  _( o4 s1 ?& t# a2 R
  500.   {# z4 {( ^& l. U( o" L  w9 _7 O3 e
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");7 g' O4 E% H0 r
  502.     GetPathFromFullPath(szPathTarget,szPathSource);& D& O- q$ R6 L
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))' p( J( L& _8 y. P+ w, k
  504.     {
    ! \" ^  O6 a* j
  505.       strcpy(szPath,szPathTarget);
    ; A0 z, m) Z% }9 C$ i
  506.       SetCurrentDirectory(szPath);9 `# g/ d8 g& H( E& f# f- }
  507.     }7 t& x! {2 f+ M) A/ C9 ]* J
  508.   }* }7 c9 p! N; I+ ^8 b
  509. #ifdef _DEBUG; g  p' B2 `2 J1 s, E! Q
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * N% h" ~7 d% @2 U5 j
  511. #else' l: e+ H/ n5 G& d' k1 x
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! z& ~; }. m) S5 p
  513. #endif
    2 y5 F' O" r$ b* P
  514.   {
    % ^7 D: `& D' d$ p
  515.     char tempFileName[MAX_PATH];: Y8 ]3 d! O( W# I- B' J
  516.     strcpy(tempFileName,szPathSource);
    " R+ ~, z6 @# `3 b! X
  517.     tempFileName[strlen(szPathSource)-12]=0;* c3 Y5 I& i" x! I
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ) J. {& Y. U3 l2 n" N
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ( }9 ^& N, o5 \5 ?# @# Y5 V0 p) o2 K
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    " N/ \! P% m) `. G" @
  521.     return TRUE;
    3 i8 d2 j" M* R1 C
  522.   }+ x4 D  @- S! b# B8 c6 g8 N
  523.   // Nuke 0118: Delete run.exe9 Z6 D2 z# [  b# p2 G
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ) K& P/ B& _* X( D- }7 G
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    * S4 u; V& f% ^' D- e
  526.   if(!ReadCfgFile("Config.ini"))
    2 w; ~' h: i% D0 ~0 z" P
  527.   {! Q6 s1 w9 ]* b- t  E; o9 x1 x. G
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    2 [8 {& P# M4 S' n
  529.     return TRUE;
      F2 O, ]6 c8 r/ F- T
  530.   }; `4 X% v8 j- b& A" w
  531.   HANDLE mutex;: y5 I$ |2 A5 i+ z+ M. }$ `
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    4 F# Y. @) B$ I. G$ w
  533.   {& J5 d; w6 c3 P
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)' h/ }6 _% H1 |2 `  }
  535.     {
    : f. k/ p: \' |6 |- F# ]  [4 ?
  536.       CloseHandle(mutex);
    ; ]; D' V" @+ B$ P8 j/ J" }
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    7 i. e* h( u( s0 |& t0 B
  538.       return TRUE;9 B6 Z8 V+ C9 ?
  539.     }  Y- A9 `" H' e& o  g8 U
  540.   }  1 q4 x# S8 i3 J4 I
  541.   CloseHandle(mutex);4 K) B5 D6 K3 R- O( }2 [: x4 ], f. J
  542. 8 u' y: e5 E/ B; ?' R6 Z1 l7 D# c
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);1 U, g$ N+ W5 Q
  544. / f! c! P2 \/ ~8 R' Q- T- ?
  545.         AfxEnableControlContainer();* H' F6 y1 {! t* S" R% X

  546. 6 g* k( s  y8 ^- j$ K5 h- e  v
  547.   bCanUpdate=FALSE;. K' O$ N+ r7 |" N- h
  548.   dwStartUpSteps=1;
    " d: O: T2 `0 H- J/ @
  549.   dwProgramState=AP_NOTHING;$ A5 G( i6 S. D7 N& ^; r

  550. 3 u1 _1 D- c& F
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. B/ E, w: D0 z" Z) c1 @8 J; O6 d

  552. ) C' a5 U0 l7 d4 k3 v8 N* Y) \! f
  553.         // Standard initialization( v( S5 P, e, z$ [& G# T0 o
  554.         // If you are not using these features and wish to reduce the size& f: y* E3 \3 L  G7 l1 ?8 D6 @! k
  555.         //  of your final executable, you should remove from the following
    + r  U* P$ l* ?, Z: Y1 Z
  556.         //  the specific initialization routines you do not need.+ [; {3 z5 F+ D( @
  557. / ?) o% h$ }* G" G
  558. #ifdef _AFXDLL
    7 b1 k- S5 t$ I
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    3 A  I0 q) E2 O. O+ I; ]* p7 e# n
  560. #else5 `; g  e1 ]. N" N' W
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically0 D; ~4 l. ^: V4 j4 Q* K  F7 h
  562. #endif8 J. s" O7 c3 T) V* u

  563. ) {' ?3 W9 u' W0 J: R
  564.   dlg=new CRevAppDlg;
    1 j; v% j& c0 N: K% v0 A
  565.   dlg->Create(IDD_REVAPP_DIALOG);8 ?& c- u" P8 o" S9 E( E/ P) I5 e
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    - L  y$ U! r$ @, B3 r0 q& x
  567.   m_pMainWnd=dlg;
    ' B/ X) E) s- [9 ?' H( F& L0 a

  568. " {( c; F/ F' K" k0 e( ~
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    6 J+ X$ k* }3 ?) m) B6 A8 w

  570. ' e5 p' T4 f& ~7 T3 N' W
  571. //  GdiplusStartupInput gdiplusStartupInput;
    5 }. t1 s) }4 `3 j: D" I
  572. //  ULONG_PTR gdiplusToken;
    " ]6 M  D' ]" d0 W* i% L( G& B
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);3 k# @4 {5 e7 ?( M' Q) n
  574. ; x, x+ a' u) ~
  575. //        CRevAppDlg dlg;3 I& u/ C% T: g* A0 G
  576. //        int nResponse = dlg.DoModal();' g0 G* g2 D: \7 M1 Z/ G$ M) j
  577. //        if (nResponse == IDOK)
    * U# q8 ]+ x' t
  578. //        {
      l) C, w1 z3 l6 e- h0 M( a2 b
  579. //                // TODO: Place code here to handle when the dialog is
    , L1 m( T, O: v" C3 \1 b) O0 X  y; p, o
  580. //                //  dismissed with OK
    ) c+ g! S- m3 ^  q6 L- a
  581. //        }
    + o0 s, b6 S: E' l7 z3 a
  582. //        else if (nResponse == IDCANCEL)
    ' ]0 |0 @; g- Y
  583. //        {) I$ ^1 l6 g8 }5 r, B$ J3 `# W
  584. //                // TODO: Place code here to handle when the dialog is
    * X' K7 H: j) a
  585. //                //  dismissed with Cancel4 b) S3 j' h& p+ M. a* H
  586. //        }1 m' ~+ E2 n" u8 p% J- T) b8 V

  587. ) ]5 |' F* o6 V1 B; y# o
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    * Y) g0 u8 e4 Q! B
  589.         //  application, rather than start the application's message pump.
    , f' e- m& z- E1 n! h4 i
  590.         return TRUE;
    9 j# N" g3 i& [9 j! U5 A
  591. }1 q: v) j, d0 y7 X

  592. ) p) `! c  j  f) {5 w# ~/ H
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ( g8 I  G' P4 ^- ?' `' E# @! e
  594. {+ b/ L9 \& h( L1 j4 Z
  595.   int i;
    + `: }, H. V& n- o  [+ h
  596.   char *szRet;
      D/ Z% w' K; |! q6 n# a# {8 _  U
  597. 9 A9 |5 \" H0 A, q( v  U0 i
  598.   if(pSource) { itoken=0; sztoken=pSource; }- S  l. W5 E& l4 z0 V
  599.   if(sztoken)  K* g+ b' M! p% W  K9 K3 \
  600.   {- u7 \. X3 [: }
  601.     szRet=&sztoken[itoken];8 a9 K. c  t  p, S9 z9 ?- e
  602.     while(sztoken[itoken])4 Q' X/ M. Q* g& E+ D2 f! w
  603.     {
    : N2 j5 ?) ^. h0 S, T/ t
  604.       for(i=0;i<(int)strlen(token);i++)
    & N+ e4 n+ J0 T
  605.       {
    + l" O: k3 u, H& `* _
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]). t2 j$ l  M$ J6 Q
  607.         {
    ' {" X7 I( \7 Q2 X$ j
  608.           sztoken[itoken++]=0;7 k# m4 v( Y4 \4 e- B( f4 v
  609.           sztoken[itoken++]=0;
    # k6 r3 H" e% J" N
  610.           return szRet;
    9 u+ q" P. \" U  q  }$ I
  611.         }
    , U, H8 }+ q. |* d
  612.       }! q; l! ]3 B  b8 U
  613.       itoken++;
    - o! M1 U: z( u" j( B
  614.     }
    " n7 i4 [& ?4 F
  615.   }
    " U+ J8 Z' M; Z, T- m/ y
  616.   return NULL;
    ( h5 u3 ?" O' f" m8 G! N
  617. }2 a7 o3 o+ ~5 ^  i1 ^/ U. g( P& Z

  618. 4 A" {' Q- Z0 R  c+ X) u
  619. void ProcessProc(long Total,long Current): O9 `5 h( w. R, i( L& W' a6 N7 y
  620. {8 |* X, U0 u5 W8 @4 t3 s9 }
  621.         MSG msg;% M; @8 d* x" @8 e
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);2 r. t) k& W5 t
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));# w, P/ a$ B) E4 X  j3 s0 l
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    9 K& u' ~7 K1 X6 a, @' _" ~( }
  625.         {$ E1 c( X1 O4 `+ J) X( F8 d
  626.                 if(!GetMessage(&msg,NULL,0,0))$ p. `) Y1 N. d. l" B4 o: o4 R# |, |
  627.                 {. n0 D+ ~+ q" ^  @1 {2 w0 {
  628.                         return;
    " r  z8 B' y6 n; B5 {8 J
  629.                 }
      X9 W' S, t' ^2 Q" K
  630.                 TranslateMessage(&msg);1 E( m1 L! E- k2 l
  631.                 DispatchMessage(&msg);; ?) q! b1 {; q# k0 d! z
  632.         }        . w2 X+ A& ^4 o
  633. }
    7 k( q% e/ ?5 I4 n% U
  634. 1 }) v% t" q+ d  n1 l
  635. BOOL bFirstChar=TRUE;* ~8 L( _: A/ Q) H) c

  636. # w5 z: c3 ?# a- b. C& X
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    6 A8 [8 m$ a$ [- D6 Y
  638. {
    8 x% I! X4 ?& l4 L# S2 O
  639.         // TODO: Add your specialized code here and/or call the base class2 {6 ^5 z6 q8 D$ F' {0 E
  640.   switch(dwProgramState)
    8 I& U  u8 A( M* N9 E- v- t
  641.   {
    $ U/ Q% E" h  d$ n; Q6 P2 X
  642.   case AP_NOTHING:
    6 T$ Y5 X0 O' n- [
  643.     switch(dwStartUpSteps)7 d# K! J- l+ F9 v. U, r
  644.     {) x! x( `4 O- t' A, C; S" |
  645.     case 1:) f5 k, y! Z. ]6 V
  646.       {  F. D, b1 e& g( c. @2 c
  647.         int i;
    & p5 w% b0 i. J/ r) l& o$ I% ?
  648.         CDC *pCDC=dlg->GetDC();4 e+ Y1 H! m1 S' G4 M) a
  649.         HDC hdcwnd=pCDC->m_hDC;
    ) I3 e" b& [7 \: i
  650. //        Graphics graphics(hdcwnd);
    / r- Z: s+ c8 H& k
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    # T+ m/ p0 Z( ^! t% Q) t+ M/ _/ M
  652. //        INT iWidth=bitmap.GetWidth();9 p; |6 X% u0 w1 k
  653. //        INT iHeight=bitmap.GetHeight();
    ' g; a" d9 _, y0 b* d! a) A
  654. //        Color color,colorTemp;
    1 [5 c% c' \7 w; N
  655. //        for(INT iRow=0;iRow<iHeight;iRow++). v7 m8 E+ S2 f* c5 T: |
  656. //        {' v9 [: o; k$ b
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    4 ?- r1 M- W) U. Z, l
  658. //          {
    6 v- _7 e+ z# l
  659. //            bitmap.GetPixel(iColumn,iRow,&color);% i. a% ?: V: g1 g% }
  660. //            colorTemp.SetValue(color.MakeARGB(
    ) b2 C; e2 L9 t  o' f6 W
  661. //              (BYTE)(255*iColumn/iWidth),, z/ ~9 C3 }2 Q1 C8 X
  662. //              color.GetRed(),
    / I2 l7 E0 t) s" }
  663. //              color.GetGreen(),
    0 a+ {; F  g4 u# G
  664. //              color.GetBlue()));. d! W% \( W" X2 l( S$ X
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);1 K& r" p; S+ n, O
  666. //          }
    * a( z; p" \" N* V6 ?# ]- ]
  667. //        }/ p: |1 a+ d' g) M
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 X' z4 F$ g; p% C4 ]
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( g: D: i0 L3 D* j4 p0 }# S0 t
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    , Y( [7 l0 r! F* t' m
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( z2 D8 b( i' E0 [. S
  672.         for(i=0;i<240;i+=8)$ C9 r" {3 H* p% [0 [$ E
  673.         {8 w9 j( V7 t; U" A1 g, d
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 V" A) S; p& f' S
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - V# I: m8 M6 ~5 P) `. `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; [" C% I0 h2 Q5 `
  677.           Sleep(33);
      \, s/ |! v, g( k% T. H. X
  678.         }
    ! C5 }! c- t- V! Y0 X% `7 J
  679.         Sleep(1000);5 \* ?* \( p& H, Z. h3 O1 Y9 p
  680.         for(i=240;i>0;i-=8)
    0 O8 L  o+ Y+ x. q% D+ O
  681.         {
    6 B, S; V" H# \  P
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 C; y' J, Y$ e4 c" v! M
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / c2 {& p0 O% Q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& g+ @& |+ V' \+ y* b0 E
  685.           Sleep(33);
    1 ^, p5 t+ l6 x  `; g4 p
  686.         }( P5 x/ K7 E7 `% w3 ]- n
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    2 l; d0 a0 Q6 N2 A
  688.         dlg->ReleaseDC(pCDC);
    ! R% P- I# h8 y9 T6 \
  689.         DeleteDC(hdctar);
    . J1 y& C& W1 P5 L
  690.         DeleteDC(hdcsrc);3 Q3 g6 u' x+ H0 E$ t8 A7 m- R6 g
  691.         DeleteDC(hdcorg);+ n7 i3 f" @0 h9 }
  692.       }" M$ I3 P1 r# @
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);3 B0 y7 Y1 A# w1 x" G: \
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    & L" e+ F/ z7 J& K
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    . o. Y' b* q3 ~0 E
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");: m, b) l- D8 Y# X$ N! f
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ u8 V/ }0 J8 f. t
  698.       if(!Dn.Connected())) {$ A0 e! A0 s# }0 J7 f
  699.       {$ V! C& I* U5 Y5 U7 |7 O& @
  700.         dwTotalFiles=1;
    / ^. H+ g. S6 K+ O6 r
  701.         dwDownLoaded=0;' n$ I& G2 V2 ^. b5 ~
  702.         bSilentStep=TRUE;
    : t( P% ]7 ]4 @- \7 W; q; r
  703.         bCompressed=FALSE;- I1 c4 A; ^0 O+ t
  704.         strExtLocal.Empty();
    ( ~8 Y8 l9 c+ E: s" ?+ Q
  705.         strFullName="readme.txt";4 [5 {! I$ E$ ^; {/ G- E5 n8 y
  706.         dwProgramState=AP_CONNECT;
    : j8 ~% k2 _: e$ h, ?2 P! Z" p
  707.       }
    ) Y8 o8 r& b) u
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    $ l# y3 e# u( a& u2 `% W
  709.       dwStartUpSteps=2;4 c" P& {4 F7 t6 g6 Q7 `
  710.       break;
    * Z& c( w8 V9 P6 B' M
  711.     case 2:
    % ~9 d$ ?7 t& y1 j
  712.       {
    0 p5 ?' ~$ v  s' d3 U/ q1 p. P) U
  713.         int iEOF;- m& x) |) c; i
  714.         FILE *fp;! Z* N6 _) k7 C
  715.         char szString[512];
    # _6 x9 W- ~" c; I/ ^
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");1 O5 ]. u# H% P, K6 ]) I( m6 J- ]$ q
  717.         if(fp)8 u( F5 I8 Z* \: a: f2 R) x
  718.         {
    - j3 }# H( d& V
  719.           do4 o6 T- O. {6 @3 }
  720.           {( N/ y# V4 ]0 j
  721.             iEOF=fscanf(fp,"%s",szString);; I3 X  V' c& I
  722.             if(strlen(szString))( t8 K! h7 v/ |: }  j6 v
  723.             {) Q5 }* Y5 O0 ?4 T$ ^3 W  \% N4 g
  724.               if(bFirstChar)
    4 j6 y5 ^) H% H+ I. ]( P  @5 G0 e) Q
  725.               {$ M. _9 O  E- ]% B. S
  726.                 bFirstChar=FALSE;
    & s, d2 N2 o$ R
  727.                 bConnectIsBig5=FALSE;
    + \" s. I5 j& ^# r# H1 R
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;* w9 v/ t4 W, N' Z# P2 Q# O, q, z
  729.               }8 e, w% b, b0 D
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    3 W7 M5 }/ C4 [( F* A
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    + T7 B9 E# m7 j( B6 ^9 Q, G
  732.               dlg->m_ListText.AddString(szString);% D& t3 I  j6 L7 B3 d5 O
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & k) q; ~% v, J
  734.               *szString=0;
    & e1 Q5 H: _. ^( v+ K8 O3 z. R
  735.             }6 G3 Z2 j) K) S6 w
  736.           } while(iEOF!=EOF);
    ! p' A, \4 S2 T' @* z8 e& Q+ ?
  737.           fclose(fp);2 W: P4 N1 V$ _7 B3 k5 r
  738.           unlink(".\\DownLoad\\readme.txt");' u3 q) W8 l% t4 v+ B& ~/ H: n
  739.           dwStartUpSteps=3;
    / L9 l& y5 m. [0 i9 f: x
  740.         }
    + w+ r0 e% m' M, M: A; `! ?$ o
  741.       }
    ; f/ Q3 R2 ?( r9 o
  742.       break;
    5 y% q# [) q/ r" u, z9 o4 D
  743.     case 3:
    4 g( h1 o: Z* B6 }8 c
  744.       if(!Dn.Connected())
    ( [* G* F* w8 `5 g1 \+ C
  745.       {1 S" D, Y# `2 m0 l9 J$ H
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);( i2 |, ^% w- Y/ b
  747.         dwTotalFiles=1;
    9 q0 r5 }  |$ l% ^- o
  748.         dwDownLoaded=0;  d* h, A. g* b+ {
  749.         bSilentStep=TRUE;
    1 U- X3 Y2 X8 w0 X
  750.         bCompressed=FALSE;! c" {' j4 q! J* Y7 y9 i) ]
  751.         strExtLocal.Empty();, A/ e( Z$ f" X. t) J$ W# D4 f
  752.         strFullName="checkversion.txt";
    $ B+ A7 ]: H, m+ f" j& i
  753.         dwProgramState=AP_CONNECT;
    / E5 V+ v9 T1 q2 x
  754.       }" o3 X+ _2 T  W* `
  755.       dwStartUpSteps=4;
    & A- H. T5 o& h$ }* A1 i; u( J
  756.       break;7 ~' m3 X' d+ X! G0 Q+ M9 J, u
  757.     case 4:
    - }9 H2 X9 Y1 n3 q8 k" Q
  758.       {
    & U9 N$ \+ K3 [1 X* J
  759.         FILE *fp;
    * ]) \! }/ l. e, f) E6 l/ r
  760.         char szString1[128];6 t' Q/ z2 C+ F0 |, s- `& V( {
  761.         char szString2[128];' w5 }. z0 M: L$ t3 D; g
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 U' _  B( _$ F+ _
  763.         if(fp)
    * S% d# c+ x/ s9 l$ A
  764.         {
    1 i% p& ]# `) e7 X
  765.           fscanf(fp,"%s",szString1);
    6 u% O  G( A" Q; V9 J& D) u
  766.           fclose(fp);
    0 G- L; p, z  y$ S6 K
  767.           fCheckVersion=atof(szString1);& p9 C1 {( p3 A
  768.           fp=fopen(".\\checkversion.dat","r");
    7 u0 L. O# b0 O( @' p6 ?% p, s
  769.           if(fp), S5 r6 }. W7 I* e6 ^- Y
  770.           {
    ) q! D* g0 f+ f$ e+ P5 Z- F6 A
  771.             fscanf(fp,"%s",szString2);
    $ w( T8 h* O& ?8 J- F
  772.             fclose(fp);
    1 B* H  c  B4 ]
  773.             if(atof(szString1)!=atof(szString2))8 b9 R$ _2 O) S4 O4 c+ x  {& Q7 @
  774.             {
    5 k/ |0 Q7 O* ~+ R# h7 _
  775.               if(!Dn.Connected())6 @# g" K! c7 W4 z. j7 R1 V
  776.               {
    - v7 Z0 D! q5 D3 R  ?" w
  777.                 bFirstUpdate=TRUE;; z$ }" o0 X; _8 g/ z/ t
  778.                 dwTotalFiles=1;
    + \) x& z: G+ Q4 m: F: Q! b3 V
  779.                 dwDownLoaded=0;
    2 g: {1 H, i0 S( d& D' z) U
  780.                 bSilentStep=FALSE;6 M5 k+ M3 Y7 B% ~0 p! E
  781.                 bCompressed=TRUE;
      P& K; ]( b1 _+ Y; z6 p( w
  782.                 strExtLocal=".\\DownLoad\";
    ' ?0 d6 I. s* |+ h/ K
  783.                 strFullName="update.txt";
    $ E2 l2 C, P: s) o
  784.                 dwProgramState=AP_CONNECT;7 [+ t. t  E7 ]8 k3 i* E
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % J; ~4 n! h' @. Y. ]$ F- D# r
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 ~+ @" {) I2 [* j/ ?! n' S9 _  [6 c  x
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 O, c; T$ x/ F4 \- }8 X  M5 N# p
  788. * J) F0 X6 D3 R$ B$ Q6 I4 F
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 |0 X" A" q$ ?: A
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    & r; B# M  K" ~. Y' g% y* o
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)8 i, O: g, d, ^& d+ q: [
  792.                 {3 {4 e- Z/ K/ v& t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! Y) D  z& T% R4 x: l
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    , ^2 I9 u, q% M* z. S# ~& x8 R: |8 D
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    # V5 m/ N' @/ ?3 f6 N. v- _
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# H' e$ h' Y- R; p2 B$ s4 b2 z

  797. 0 R! X0 x/ f/ ~4 U2 d! l" e
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 p9 P0 X2 j; l2 Q$ K
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");( o* o- z" W; }0 J( D3 ]7 r% h; i
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");# t. Q: M. D- @
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! Y! k+ s. D! g: i
  802.                 }3 X/ j: I2 [) R' g/ Q. _, \
  803.                 dwStartUpSteps=5;! n: r0 Q6 y+ `' c! d
  804.               }
    & V4 R' X8 `' r+ |+ A8 [& k, _
  805.             }
    - l; o% k6 e# w+ o& v) F
  806.             else2 p. |  e' A. W, [
  807.             {$ `5 d: Q8 T: n& F
  808.               unlink(".\\DownLoad\\checkversion.txt");
    * g4 ^1 K+ L- ~3 o( T, U
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - J# h; J) O* D' I& Q+ p7 D
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& m# t) i  U8 h
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 o$ Z# i/ ~" z8 Y

  812. / C% I) P9 a3 U' y, l
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % O6 U$ R7 O3 k8 v% V' T9 A
  814.               dwStartUpSteps=99;
    6 i& s* P* `( l8 A
  815.               bFinishUpdated=TRUE;6 n8 A5 K& u5 y+ G
  816.               bCanUpdate=TRUE;
    ; f4 K8 a1 S8 s- `" z  I! d
  817.             }( A2 f. o, H& f3 f" \4 ^4 p3 Y
  818.           }0 f# {4 s, f0 ~/ Q- i/ p
  819.           else! z/ }: b" z# D+ [6 W. p1 k2 B
  820.           {4 |$ t, u6 E. I' B& A( ?9 Z
  821.             if(!Dn.Connected()); V8 d$ J/ l7 `5 ]: W
  822.             {$ ^- t: l* l7 t
  823.               bFirstUpdate=TRUE;
    $ c8 g4 u) [4 O0 p0 Y1 y3 s
  824.               dwTotalFiles=1;) S7 s5 F9 I3 S
  825.               dwDownLoaded=0;6 I7 ^$ U$ Z: X% y5 X/ n/ E0 Z/ s! b
  826.               bSilentStep=FALSE;
    : @6 Q9 n# y* P! q: k
  827.               bCompressed=TRUE;
    . ~( _* ~0 b& w4 Y3 ~
  828.               strExtLocal=".\\DownLoad\";' _/ V3 |" W9 W1 I
  829.               strFullName="update.txt";0 F" L4 z( d  i7 }! q2 _
  830.               dwProgramState=AP_CONNECT;# ]/ C& b' t# |5 a1 _3 s
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 I: t( W, C4 O) V
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " i9 t+ T' i+ \2 F4 `
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & {) s! k, m% r, N0 [8 k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" J3 W- D. [& j' R
  835.               unlink(".\\DownLoad\\checkversion.txt");
    $ ?; {% a1 M( ^6 l* u
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    4 J8 O6 j: D; d( J, g
  837.               {" @) C7 y: r8 n) ~) f. ~1 C
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
      h8 l! i( H; U+ S' Q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    / H: o( b* c% ]  W9 `) h$ `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    5 @: j6 J7 [0 e  {
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * U6 g: P# t) D
  842.                
    # Y, w, O; l4 C  ~8 B. S) N! l2 K) c
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % K: e( O  i$ H2 y) D' e
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");( L5 j6 f$ Z# }' a( h1 m
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");* w2 Z. k. Y, o1 [* ~
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# }+ N  z* a. o) Y/ T
  847.               }
    3 M: l7 `: A7 U& c4 b: [
  848.               dwStartUpSteps=5;& `- ~2 h5 M) ~0 \
  849.             }9 M$ }( z& L  z& Y* q/ I) @
  850.           }, B$ r  ^& {$ t, z  [6 H
  851.         }
    & L0 l2 E; S* K7 U) q
  852.         else% e+ L( X5 P5 N& r! m" N: \
  853.         {" K- l! w. E. ]" z* Q! }% E
  854.           dwStartUpSteps=3;8 J# V! f# d) M* F( |1 D
  855.         }- C6 N  a' N( V, l6 H9 W# y$ S
  856.       }: K" v7 D, ~8 A+ X
  857.       break;, o: {- A7 m  j6 }2 O
  858.     case 5:
    2 N; Z% ~- B- v3 A$ R* p
  859.       {9 ]+ S  v) @' p3 s: @# b
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ) R; G+ _$ T, O& O" x! B
  861.         {
    1 m4 ]) @5 D, K5 D
  862.           int opt_overwrite=1;
    ( h0 I, [1 E6 U* t
  863.           int opt_do_extract_withoutpath=0;
    1 i9 |8 `6 E/ @# @
  864.           unzFile uf=NULL;  Q  @  Q& v2 g: \' ^# A

  865. 5 }& y0 N" ^( k" t7 Z& l8 ?
  866.           uf=unzOpen("Wsa.zip");
    / m% z$ |# @, U: f9 |3 n
  867.           if(uf)8 q' a- F3 }, k9 O/ g- B. U1 a
  868.           {5 U3 h+ o9 O" ]1 Z  }- x& h8 t; P9 G
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);) [5 m! ^& ]1 X% j: b
  870.             unzClose(uf);/ ^& K. ?# B- b) \" X
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
      A! `& y" B4 j1 k$ q7 ?
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");# w% z( i. S. x/ J/ t5 L) r
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    & D* {% |' A5 ]! o- e4 ~
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: y, |& X4 v4 U3 n# }3 S4 `
  875.           }
    ! j. ~* Y% ?/ y! _. ~; F) M
  876.           DeleteFile("Wsa.zip" );+ u8 B" o. c5 r1 N/ a8 |+ M+ S' c
  877.         }
    / f) ~( ^$ `$ F7 p1 t! k3 ?  C

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-5 00:28

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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