CSUpdate.exe源代码

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

  V6 Y' _8 U$ X& D" I8 b4 F
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , O' W! F: ~  F! q& x& x; P; _# F
  2. //
      F( h/ [8 g7 b5 _! }0 m

  3. , f  d) C$ e& v6 n  D* H
  4. #include "stdafx.h"
    7 G; D; n- D8 \8 ]

  5. * _1 d2 b2 {" a
  6. //#define UNICODE
    & |  w# x$ v' O2 S6 g0 b1 q7 J
  7. //#include <gdiplus.h>
    4 ?% A  [2 C# ?! J( j* M; c% {
  8. //using namespace Gdiplus;
    2 e3 h4 s; F6 |( n) g
  9. 4 I; P# O" A. O
  10. #include "RevApp.h"3 z) X2 E' U# U" ?5 M! p4 A6 S1 t# M
  11. #include "RevAppDlg.h"
    $ u% |5 {$ K' v
  12. 9 w3 k8 b! [) R" j0 ^
  13. #pragma warning(disable:4786)# m5 v8 Y* p/ c% ?! t  x  f
  14. #include <map>: Z5 M/ f/ A  p1 ~1 `* H. G( j; b
  15. #include <list>0 Y' Q; P0 R5 G1 O( {/ d
  16. #include <direct.h>
    , n8 o5 n+ @1 C! {  l0 X: Y

  17. 9 `7 N5 b3 ^" P3 ?/ p6 S6 y( h5 ~
  18. #ifdef _DEBUG* E# X" o1 {2 {$ N/ I' e! V
  19. #define new DEBUG_NEW' ^5 i( h0 I  A* C" t" i
  20. #undef THIS_FILE
    0 _% w$ {5 l$ i  Y: H  w9 P3 L
  21. static char THIS_FILE[] = __FILE__;: d/ L. R5 I) c$ N( u9 j
  22. #endif9 p! c) l0 e, b" V
  23. #include "SkinResDef.h"
    ! i6 F" N# e* d7 b- p1 ^7 l
  24. #include "ChangeBG.h"
    7 |; \% x; I, F3 a8 n: ~8 A# @
  25. #include "AFXINET.H"
    . C! j1 U7 h5 M. C  v

  26.   A8 X4 g" S5 C0 t6 O* ~1 k" k- l
  27. #define TRADITIONAL_CHINESE 0
    ! S% I: i( O- k* i( V
  28. #define SIMPLIFY_CHINESE 1
    / ], U% w3 ~( C$ q9 o. c& N: Y' p
  29. #define ENGLISH 22 B: ~0 _% }- B
  30. int m_iLanguage = ENGLISH;  z  w5 ]& m0 n6 L  X- ~/ u' _
  31. /////////////////////////////////////////////////////////////////////////////  |, v4 _' m- S% ]
  32. // CRevAppApp3 d5 @0 v' a  l# @9 C: b
  33. 8 Y6 m2 r7 _6 N) J
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    6 _% p- P) H# O& L" e
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    : m& @5 F) ^: _: Q- b9 {6 P
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.$ ~2 ^- e' l% B( C9 N2 H; `5 T
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ' z+ {/ u3 w* ?
  38.         //}}AFX_MSG
    3 v7 ?, I/ F: K7 J- T5 m& I3 N* F
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ( W- z8 e/ g7 s9 E  K# [' L
  40. END_MESSAGE_MAP()+ n3 t4 \8 J; q6 V
  41.   v. [2 K5 g' i% Y2 V" h
  42. /////////////////////////////////////////////////////////////////////////////
    . f8 q4 h/ ]3 E& I8 |
  43. // CRevAppApp construction
    * }/ V/ T! v4 N* F9 u! Z

  44. $ D3 U  a% W. z& y! O8 Z: v
  45. CRevAppApp::CRevAppApp()+ n6 z2 ]0 L1 f: E3 O
  46. {
    8 J' I# F+ ^/ C. k  F
  47.         // TODO: add construction code here,
    4 q. e0 Z3 X- L$ Q/ W
  48.         // Place all significant initialization in InitInstance, A8 a3 C6 M- [0 \. q, [
  49.   bDisplayIsBig5=FALSE;
    ) N% U+ f& V6 u* t7 U: i  k4 B
  50.   bRestartUpdater=FALSE;/ j* l/ r6 a, c7 L: g
  51.   bFinishUpdated=FALSE;
    # [% T( B' \1 ?
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;0 L, J) J+ ]7 Z, k& {5 W- n0 E
  53.   InitChangeDataBig52GBKS();
    & b+ z, ^- x, h( N* P/ j
  54.   InitChangeDataGBKS2Big5();# \* f: d2 N7 e. s" N- j
  55.         //5 p* V/ l2 Y" T- i
  56.         bClickRunExe = FALSE;
    ' P. [9 v) _5 @8 a, w  i' [
  57.         //
    + o. ^( M# |3 x# h
  58. }
    3 I1 C# M, d. v6 }. \" ]( b
  59. 7 ^/ G) s% j; c8 ]/ t1 e2 D' u
  60. CRevAppApp::~CRevAppApp()
    : V% j& r0 \/ j9 h
  61. {( w+ ^# Z4 S) Y$ h9 L9 `
  62.         // TODO: add construction code here,
    / z0 ~0 f( T) Y
  63.         // Place all significant initialization in InitInstance" `1 [' x# E. r( X+ i* k
  64.   EndChangeData();3 m" `2 h) T4 ]2 r+ v6 k
  65. }' A4 f: W, a3 Q( L

  66. 1 y( R3 L) f" s$ E
  67. ////////////////////////////////////////////////////////////////////////////// B( ]8 M/ j4 K8 G/ K
  68. // The one and only CRevAppApp object
    : }3 m3 C4 s/ [5 u

  69. 8 ~3 ^2 @6 x* B
  70. CRevAppApp theApp;0 B) t/ i3 F; g0 O$ T' b9 l

  71. 3 U0 I& s& m/ o- e; ?2 g- _: x) u
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)' Y# T8 E! w: d6 X/ n6 w
  73. {) G7 `4 _% R0 M3 y+ ]" W0 z1 `
  74.   int iEOF=0;! X: W) k0 b8 V! d* V: S! g
  75.   char szTempName[MAX_PATH];$ Y) r. M1 }: b5 s
  76.   *szFileName=0;2 j& s; Y7 a4 G( X/ ^8 e& Q
  77.   iEOF=fscanf(fp,"%s",szTempName);
    1 V2 r$ j* d6 a% H$ C, C
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    : m' W2 s3 q. A1 P
  79.   {% Y4 d! w# y1 i: V0 f* T# s
  80.     strcpy(szFileName,&szTempName[1]);
    ; a! N/ R0 b' x6 o, x
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 |3 F" t5 k! T0 r4 e4 |
  82.     {: [; [9 Q7 q% M1 ]( l- F9 [
  83.       iEOF=fscanf(fp,"%s",szTempName);
    2 x# {% Z9 C0 g+ m
  84.       strcat(szFileName," ");
    . Z6 _, U7 a/ ?, |, t
  85.       strcat(szFileName,szTempName);- N# {, I+ \* I/ l4 Q2 x7 j
  86.     }8 O5 i& I* R6 P$ B4 k
  87.     if(strlen(szFileName)>=1)
    8 H3 E0 j/ i+ E- j
  88.     {
    2 o) t, M2 L- a9 j
  89.       szFileName[strlen(szFileName)-1]=0;+ m- @* g3 [) e! K( X
  90.     }
    2 u- q& s7 X$ `0 B
  91.   }9 C/ i; p" [/ }0 ?% D
  92.   return szFileName;
    6 Q: M  Z4 ?) Z* N. k( k
  93. }# i4 A8 E4 e8 M/ r% A
  94. * U- [% s8 Z, R- M; d
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    % K4 y' u3 i' S$ }
  96. {
    * w/ X4 V4 i3 y
  97.   FILE *fp;
    1 O7 M' `% b; E( |
  98.   char *key=NULL;
    + a7 t% d" R4 |: Y' ]; K
  99.   char version[MAX_PATH];
    3 V6 Q4 Q# T9 H% c% t8 W
  100.   LPUPDATEFILE file,olds;
    . k$ t3 P* z% O) H  f- m
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 F7 I* y( ^: d& G+ Y* o

  102. $ u9 d, l. Z8 o$ _
  103.   UpdateList.clear();- \# L( r2 @( b
  104.   UpdateFile.clear();
    . \* M: N% H1 f
  105.   if(GetFileAttributes(filename)==-1) return false;
    . o! ^$ M4 F9 I0 m0 K% p7 u2 S
  106.   if(!(fp=fopen(filename,"r"))) return false;. S, {1 T) `* B/ X6 k
  107.   fscanf(fp,"%s",version);/ L8 F) ]% W$ k* Q* W" [3 \
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    # W& f- I, T- U  B8 ]! s# ?% l9 R
  109.   while(fscanf(fp,"%s",version)!=EOF)
    0 G3 r9 N  T# [6 h9 _' D$ c$ Q
  110.   {
    9 q9 P8 @+ j- g7 a; m# z2 e
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 {* z5 m# X% U' C' j4 ]
  112.     fscanf(fp,"%s",file->path);
    8 f1 A& K1 f7 T
  113.     ReadFileNames(fp,file->file);! J4 z" F$ `! O/ l1 U
  114.     strcpy(file->full,".");9 {4 V1 [2 b. D( B
  115.     strcat(file->full,file->path);+ j0 z/ ?$ {$ @* E
  116.     strcat(file->full,file->file);
    7 s. N, ?: O6 R
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())5 F$ s  d# b; e: z! c1 i
  118.     {
    ' {2 C/ t7 R/ \$ h
  119.       file->vers=(float)atof(version);
    $ {# _; |7 m; Q: o% z- K
  120.       UpdateList.push_back(file->full);$ `+ U2 `7 r' s; ~
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));7 [; r+ r* W% [; N' v  u
  122.     }
    ; X) d8 P( {1 x2 q# i) Z, [
  123.     else
    9 W# }& y9 e+ J" `# o" a9 H% o7 m
  124.     {8 F4 ^6 j% T8 v5 z" `
  125.       olds=(*p).second;
    3 w! X8 S- E5 G6 }) f1 c4 V: K
  126.       if(olds->vers<(float)atof(version))7 t: I* k- g, x- |1 l. r
  127.       {
    ' [' j6 X( u0 @; p
  128.         olds->vers=(float)atof(version);
    " [/ L2 |$ z8 p& p' O  z
  129.       }! N2 I# A# b" A( n0 |5 G
  130.       free(file);
    " q- D2 J+ u. ~8 s# W8 ?$ n
  131.     }
    7 |0 V* Y( q6 b$ B( Y! @* ]5 ]
  132.   }3 j' [: m3 f1 W: ?$ Q0 ~
  133.   fclose(fp);( w' ^$ }' E( p4 r+ W
  134.   return true;* J/ C  T+ k' f( l$ Y" E) W
  135. }: V6 y! l$ t  C2 ?
  136. ! T8 ^/ A$ g: |; B
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)( }: n# m, [& A1 e8 k# V+ W1 a
  138. {* I( R* N: B; h3 {" C8 c
  139.   TCHAR  szFull[MAX_PATH];3 p; G* w1 Y6 V( B+ E
  140.   TCHAR *token,*inter;$ c6 ~( @5 q9 i# Z+ i2 D* J
  141.   *szPath=0;
    ) C- U# w; f* [: O3 }
  142.   strcpy(szFull,szFullPath);$ V9 P$ u2 O$ Q4 x3 h% Z
  143.   token=strtok(szFull,"\\/");% n  `1 ~7 u! R. M  H. b
  144.   inter=token;8 a& @$ |8 R' I8 E, [/ S
  145.   while(token=strtok(NULL,"\\/"))& v5 w: G3 ^& O1 @/ x/ @4 n
  146.   {: y! \+ h$ X  F3 p- \' b. S
  147.     strcat(szPath,inter);- }: Q  h) C$ G3 C" O
  148.     strcat(szPath,"\");$ W( w  n6 D% V8 @( k, Y# V7 f! y
  149.     inter=token;
    0 e4 ]9 h% Z# D& q5 v
  150.   }1 u1 X( b& ]" k
  151.   return strlen(szPath);
    3 [0 ^, i! Q0 Z) j1 W% z* G- R
  152. }
    3 P: d5 k7 A  E- u8 Y5 i5 y! L5 w
  153. # {( p  \+ F! D
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    + L: y+ S" @: C' T- x$ S
  155. {; K+ k# V3 u: o
  156.   DWORD attrib=GetFileAttributes(Target);% C. ^/ y* s5 t: v6 O
  157.   if(attrib!=-1)
    0 M( t& T6 {1 ?0 R5 y  P
  158.   {
    5 V7 E+ z8 X/ a1 o- z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , _# @1 B* a7 m, Y) m& o4 |9 x3 q0 ?0 z
  160.     {6 I  G2 A/ G2 ^  ]( Z5 @6 b% {
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ) [4 `$ O# W* ]- W; |
  162.       SetFileAttributes(Target,attrib);+ b; q5 f2 E5 B# @8 H4 M+ H
  163.     }
    1 D! y  g* l( e1 Q
  164.   }% }3 x9 w* w8 w* ]# Z4 ~6 ?
  165.   CopyFile(Source,Target,Erase);
    * n- f$ W! q+ s* l: e
  166. }. L, k9 y" x7 x  W! X0 k

  167. 7 n5 S1 O' s' n% z' s( @$ W. r
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)9 a' M. g; L$ q/ \! z. k
  169. {* l! R6 n  o' a
  170.      FILE *fp;3 e! B3 @5 C+ |; }( M. `
  171.      char  szBuffer[8192];
    8 q0 j, R% G: [6 v2 @1 w8 P: I
  172.   va_list  argptr;7 u7 b. P1 S- _$ A% E
  173. ; z, D6 f* @$ U4 r' D) g/ G$ R
  174.         va_start(argptr,message);
    - t! F( l, t4 R+ T6 n+ [; Z8 A
  175.         vsprintf(szBuffer,message,argptr);
    2 D+ |1 d  {3 P; H# I; ]) v
  176.         va_end(argptr);4 X" u7 z  S$ u+ w, w+ K) `
  177.   fp=fopen(FileName,"a");
    9 t, C% o: @. u
  178.   if(fp)
    . O2 y+ Z/ t* U4 O
  179.   {
    ) B# x0 K) T. P* Z) s
  180.     fprintf(fp,szBuffer);
    1 g  Q5 w5 ?: i( V( d  F
  181.     fclose(fp);3 M8 n: ^1 [: H8 [
  182.           _flushall();
    : ?) I; Z* k6 E0 e- e  p
  183.   }& R, ~' ]# K  r( y( D5 d" N' l: E
  184. }
    4 [/ `( w1 q9 T( J( H4 n, u
  185. + ?( S" D9 |& s% T" n: ]! ?
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    9 M+ v/ H4 I5 M* I' X
  187. {1 e: {* L. e. ]
  188.      FILE *fp;, o6 v: e+ z- t5 C! c
  189.     DWORD  attrib;. V7 G8 e4 G4 r/ d
  190.   attrib=GetFileAttributes(FileName);
    : h1 n" v1 L  q  b
  191.   if(attrib!=-1)' r' V) G# ~5 x) t- {* h1 z
  192.   {
    , D% i& L+ ^) L. u, M' l- T$ _
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    4 t/ Y- J4 v* ^% N, Z5 r
  194.     if(!SetFileAttributes(FileName,attrib))8 Z1 Q  K5 n% T& R: N
  195.     {
    ' k- h" s2 {3 I# W0 q2 h
  196.       return FALSE;& ^( t( s0 @* v- I/ }- c
  197.     }
    5 I* [/ m" k8 S: z4 A
  198.   }9 y, a  k1 ]% \: |# _9 q; f
  199.   fp=fopen(FileName,"wb");8 c. |% b* R% N- J  ]
  200.   if(fp)) h: e; Q! d( d5 C
  201.   {
    4 k  N$ G' A% a9 T
  202.     fclose(fp);
    8 V5 V  S+ J7 c1 ^
  203.   }
    ' w: h- F6 a8 i# \- ]
  204.   return TRUE;
    * @! i& Z7 ~$ b! M
  205. }/ M- S# Z7 h- Q# _: J

  206. : V" L% |' B0 ]3 c
  207. BOOL CRevAppApp::UpdateLocalVersion(void)( c0 f( A5 M6 s, j
  208. {: ^( o# W$ D3 s+ q; E  R$ i& q
  209.   char filename[MAX_PATH];
    . U" i; L# H1 p
  210.   LPUPDATEFILE file,olds;
    1 K1 {0 S& v/ ~7 B: t8 `/ T* j0 v1 N
  211.   std::map<int,CString>::iterator i;
    7 g1 w3 X9 A, E/ m
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 i2 o, w  g% ?! e# B
  213.   std::list<CString>::iterator l;: k9 f* v6 D6 k4 p' v4 ?5 b3 b
  214. 3 d4 |! a' D# K9 n
  215.   if(bFirstUpdate)
    " U3 u5 d/ K: }" w; r
  216.   {
    9 P" ]3 Y% M0 Z! |
  217.     dwCurrFile=0;3 r9 G; [4 {$ Y4 P7 y# g6 }% a
  218.     bFirstUpdate=FALSE;. C7 h6 g; M- N" H+ q; H  ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% O4 B4 }* S& Z1 t2 y
  220.     {
    9 H/ w6 J: _0 Q0 m
  221.       dwTotalFiles=UpdateLocal.size();
    & T* H$ n' y+ T# n& ^
  222.       dwDownLoaded=0;  a( E5 O" a+ P" `
  223.       bSilentStep=FALSE;
    / h* Y7 u) t* v
  224.       bCompressed=TRUE;5 Z) u7 _% E; Y0 h
  225.       strExtLocal.Empty();
      E/ \% b# K$ |7 S
  226.       strFullName=(*i).second;& X# B! G7 v7 W: q: e
  227.       dwProgramState=AP_CONNECT;
    4 ^) v7 p; r+ w. N$ X" Y
  228.       return TRUE;; j2 g. `5 Y; h3 I% y
  229.     }2 r; J. C* |9 i9 h' ?/ C; o
  230.   }
    # j% w5 v: [- {2 R( Z) W* V7 @
  231.   else if(bRestartUpdater==FALSE)
    0 L% U1 _5 j$ N! @& J0 X6 ~- A4 A
  232.   {/ z; D+ @- X2 r0 R; Y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())0 t& r9 m( ]9 @5 U* B
  234.     {" \& d. u: r& N# Y
  235.       file=(*p).second;# I% M; L3 {" J/ T
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())) U5 n5 [% E4 ~% {4 Y+ f- }' v
  237.       {3 Z  o- i9 W* W; g- T6 K0 Z+ p
  238.         olds=(*p).second;
    $ V& w% `! j7 A  ?2 m* Q, Q
  239.         olds->vers=file->vers;
    0 m( _3 i; T* _7 ~) N2 u
  240.       }& [& ~4 T$ F3 F& h/ ^& u
  241.       else% u1 h3 q: M- F  X5 C0 ]0 D# g; D
  242.       {6 r0 L, j% N; O7 ^# X# \
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: e$ x8 p. Y* d- f" \% O; Y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));0 P: W6 N- ~$ w0 x
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    1 R. x% {# U! d! h* O7 h7 I+ e
  246.       }) m' [, z. o. ^8 E
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    & [: x- M# q/ o' ~, w4 z5 j% K
  248.       sprintf(filename,"(%s)",file->file);- C% H6 @5 Q, n" m- Y% h$ P
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- B) H3 G+ |3 j( Z0 g: M0 x
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    , d! g1 _% T6 q1 ~
  251.     }
    5 P( @2 c4 Y  Z
  252.     dwCurrFile++;$ u! ^0 z$ p* a' H. Z3 y& ?6 ~" @
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # Q+ O3 r, w6 B3 I
  254.     {
    7 I; p$ X3 y- I. v8 v7 _
  255.       bSilentStep=FALSE;/ g; G% S# z2 N) q% _, H
  256.       bCompressed=TRUE;9 p# N: k& a+ K7 p; `. V3 a& T* |
  257.       strExtLocal.Empty();: G. D$ g+ L( d, v+ b6 ~1 Z( x
  258.       strFullName=(*i).second;
    9 o& B8 \" o% E$ H  k) [+ n, f
  259.       dwProgramState=AP_CONNECT;
    + W/ W% T' J5 i  w% S  k' h
  260.       return TRUE;
    ) z5 h! b2 y% z# A2 C
  261.     }
    ' ^& T( @% V7 t$ m0 {
  262.     if(!bRestartUpdater)
    - }6 f' a8 a5 W4 J0 Q# w  Q
  263.     {
    . b/ x; [0 \4 r& |8 T
  264.       int iCurrSize,iFileSize;5 \1 c/ y* E% d( g1 {+ r9 F
  265.       iCurrSize=0;
    8 ]5 [: U- A9 b8 ~. ^5 E) t
  266.       iFileSize=UpdateList2.size();/ _+ H; b0 `3 Y, }/ p
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    7 T( ]$ L9 _; y* G' W! ]
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");$ [# `  @! N" P6 H+ Q( F. M: b% ]
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    # L1 ]# H1 Z" S! \
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. V' e6 Q2 P' s* g/ W+ l
  271.       Fclearf(".\\update.dat");  F$ T- u+ n6 U( s/ i# e: B
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ( g" W3 D7 |! M) g* ]$ N% C
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ' ]# h; S: s% M
  274.       {
    5 t* W$ _0 L. r# x$ Z* c1 }- W
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ; v1 L1 Q2 x( O; F. V6 ]
  276.         {9 t& M, f% _" ~
  277.           file=(*p).second;
    . L/ ]3 ?+ ]$ A3 A& s  T% F. ^
  278.           sprintf(filename,"(%s)",file->file);
    8 W$ M* O7 r" l/ K6 D3 T/ }$ u
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & B( K) @: n7 e( o
  280.           iCurrSize++;7 h0 ^( V/ h3 l9 w+ w
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));3 u  q7 L1 h" h* T/ b3 u- }
  282.         }
    5 p5 g8 e' c; ^
  283.       }
    3 B0 p4 m" c! o5 v
  284.       unlink(".\\update.txt");
    : m+ o  p; `5 R4 E# L+ |" n
  285.       unlink(".\\update.tmp");$ h) g7 I8 @2 _! ]* O0 f, R
  286.       Fclearf(".\\checkversion.dat");
    8 G. L9 c7 E( n! h
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    0 D  m, k* x5 p
  288.       if(UpdateLocal.size())6 K3 [9 C# G6 Z6 \0 n
  289.       {
    ( M+ d. f+ n/ p: o5 r/ d
  290.         UpdateLocal.clear();3 l7 Q8 O$ P7 I! G  X9 g
  291.       }) U. e1 T8 K8 J# P. M& e
  292.       if(UpdateFile3.size())- E% O6 l4 ]+ l: V" d4 E/ z
  293.       {  i9 q0 J$ U) W/ c- G
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); s3 n- p( q* ?& ~, }. _3 J
  295.         {9 G1 N6 ~7 R- d2 h& u- s
  296.           file=(*p).second;
    , j- d' {' I8 \) z  v% s  @
  297.           free(file);
    4 J1 k; t3 ?: v' ?. |  _
  298.         }
    $ b6 V' i, I3 C, p# \" @
  299.         UpdateFile3.clear();6 A9 e/ i+ n; I0 z7 x- o
  300.         UpdateList3.clear();9 E2 D- O3 [  p; U
  301.       }/ `$ Y. o& ?. j. |6 T- Z' R
  302.       if(UpdateFile2.size())) u) z4 c0 n2 T( t
  303.       {- v* ?( W6 n# f. U# u3 l% U
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , L* J! [2 P4 o/ \. [4 C
  305.         {, O, B, y* M: ]- v
  306.           file=(*p).second;
    0 R& ?; b& {* k+ L; m% Q9 T3 v
  307.           free(file);
    0 ^- Y% W' y0 H5 A) n
  308.         }
    5 q; e: K1 ]3 i9 m' M, Q
  309.         UpdateFile2.clear();
    : l) C3 j4 Q" B9 N: `4 o% B
  310.         UpdateList2.clear();
    - _8 O4 G( M9 w: Q- e
  311.       }. W8 G  `9 C' y& }$ i2 q
  312.       if(UpdateFile1.size())8 t% C" k0 m! G: Z! l
  313.       {' v7 Z$ P* B% M0 d5 @- s3 Q, M
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). j# k$ f" d+ u+ f
  315.         {* _$ h) }4 x6 f, C, A
  316.           file=(*p).second;# M5 u4 A( U; F' c! l3 u# T7 ]
  317.           free(file);
    1 L/ l& D4 v& S3 e: _6 f9 Z
  318.         }
    9 z' p3 w9 A' J$ K
  319.         UpdateFile1.clear();
    # ^. T  ?& L- b7 a0 O) ^9 Y; b3 T
  320.         UpdateList1.clear();
    : l- }+ F/ ^, ^9 f0 h( _+ G. z6 M6 T
  321.       }
    : Q  Y  _% @3 J& F
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));" ^( e! m; Q$ B
  323.     }
    & w  ^; j: d9 D" i. Y$ A
  324.   }
    9 D( A- L; X: w7 k9 r
  325.   return FALSE;
    4 _7 D) M; E! `8 u: `
  326. }9 R3 V3 C7 [7 ~9 S8 P& U# [

  327. . m& |3 s( b& |5 ?& D: V4 m. d
  328. void CRevAppApp::ClearAll(void): B6 A, P" ?/ s
  329. {
    7 V# r* j4 g5 v/ D+ }+ x: n  m
  330.   LPUPDATEFILE file;
      r/ y2 b+ Y9 O  f) n
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% x7 M5 S, n) s; Q) s
  332. ) l% x6 ?: E+ H1 i, F
  333.   if(UpdateLocal.size())+ _2 N4 M9 b9 H: n- f# V4 Z$ _
  334.   {, v! z1 n; I2 l; O
  335.     UpdateLocal.clear();
    ( T& a$ w, z$ X. o! Q
  336.   }  ^- t+ ^; s, I/ i! _& T
  337.   if(UpdateFile3.size())% E4 @/ r" P0 W: a
  338.   {
    & ^# t9 d0 z( b
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 Y! a9 H+ l5 t& C6 z" k
  340.     {( w9 r. E8 V1 Z/ g7 b4 @
  341.       file=(*p).second;
      W/ q; j* f3 A- _
  342.       free(file);
    % G. k2 G# F! Q- J: V
  343.     }4 d8 G, ?1 _: Q6 |$ a* n
  344.     UpdateFile3.clear();8 a, s/ [! Z1 ]" E/ @1 W# N3 [
  345.     UpdateList3.clear();
    / x  W# J$ ?. W1 T
  346.   }
    * k6 M7 o, y) O# q  V
  347.   if(UpdateFile2.size())
    ( K% R) L6 T! @: T( y( O) ]
  348.   {
    % k  M8 d6 X8 |3 t* C
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 G* ?. L5 F  A4 d8 h3 b' G
  350.     {" K7 |. @3 P% Z
  351.       file=(*p).second;% h8 q! c6 ]) [" g2 X
  352.       free(file);* S1 k3 F# S9 [$ m- V* X. l
  353.     }
    % a" }* [: J# n# r, p
  354.     UpdateFile2.clear();3 A. J( B& @& J9 k( Y5 H
  355.     UpdateList2.clear();! p! L- {9 S; I' F1 i# o1 S
  356.   }
    ( B) v( ^* {3 [  A
  357.   if(UpdateFile1.size())
    & @- z, D) u% M& ?
  358.   {
    7 ^% N! F; u) \$ [" a  Q
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ @- ]% t" b& y0 I
  360.     {7 p+ v8 G& d, x1 k" B
  361.       file=(*p).second;- j& y6 L8 z% s6 r3 y; W% G
  362.       free(file);' A) F/ \8 D: r, Z! @" C- E
  363.     }
    / q" e# {! r) s  K7 T' c
  364.     UpdateFile1.clear();5 b# o5 g, U; Y( d. i* S+ o4 V
  365.     UpdateList1.clear();
    4 L$ H4 ?+ Y; Q, [. k! F$ i0 s# i% r
  366.   }
    + S) P8 X1 `5 W+ x0 q8 S
  367. }  
    ' m9 O$ T# y5 O9 w1 C
  368.   $ A, L( g: U4 T& d
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    . b; {6 t" P" q6 s  O/ R& s  i9 A
  370. {
      l0 L, R" f9 T! Y3 b/ N
  371.   int c;6 ^! f# B- h$ O2 ~' q" x$ n; B
  372.   LPUPDATEFILE file1,file2;! z& d1 ?# V5 [
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;4 F1 f8 e4 t' ]3 N" a/ ]% I
  374.   std::list<CString>::iterator l;
    2 i3 G* O6 X$ ?! B' X& X

  375. & m2 J8 D' f) \5 ^
  376.   UpdateLocal.clear();6 m7 {, ^+ Z" q  Y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);- {; N) D, v9 v2 g3 C( T6 N+ z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);" B" |# t! N' l4 G2 p
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);/ r  o3 O! l8 C1 L
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);" `' o* t0 m& a9 T% V! v2 p. f
  381.   if(UpdateFile3.size())
    ) s+ v3 ?( u7 t* W% t
  382.   {/ U! l  G: P4 J3 N( j0 L+ {
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)! i* {& h, v" F
  384.     {, I. T7 q1 V: T" f; j( P  d1 _
  385.       file2=(LPUPDATEFILE)(*i).second;
    6 J2 Z4 \1 E2 R* K" N# N" t$ H
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( @: ?0 J+ |4 W& a! u' ]2 I
  387.       {
    8 V, S0 }9 T! [3 u$ Z
  388.         file1=(LPUPDATEFILE)(*p).second;/ i( Z, l& n, D" |
  389.         file1->vers=file2->vers;/ g* y4 r, H8 w* S
  390.       }" q0 Z; f7 \" k3 s& Z( y! M2 N* l
  391.       else
    - A+ x% ]0 I" p% r2 K: Y1 K. ]# `2 o" f
  392.       {; V6 f( W9 h) K7 K1 d
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. [0 x0 Z; j; `3 L) u
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    . }8 e! h5 M6 f. E: D
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));$ \6 q+ n& G- c" S1 B
  396.       }
    ! N/ B+ q4 i6 M# y
  397.     }
    # C8 z" ]! O2 x/ S& q8 |
  398.   }
    ) m) \: m9 V# F7 r; q. s
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)  g1 O1 v: n4 e( o0 X& u
  400.   {, j/ u: J- H  q: v
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( l* Z; a9 e3 X$ ]& M& R( w
  402.     {3 K. k  f& n0 ?6 }' C/ }
  403.       file2=(LPUPDATEFILE)(*i).second;
      B3 q0 F$ E- m
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  }, o/ e1 @/ ]+ ?6 q: M" T' w
  405.       {) F  w1 ]: l5 y. m3 R' P
  406.         file1=(LPUPDATEFILE)(*p).second;% z6 b' M: o. K3 d9 K
  407.         if(file1->vers!=file2->vers)
    - W" ^% p  s/ x9 l5 W2 d
  408.         {
    + ]# X! `) u- _8 [
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, \) }! o. v" U( M5 X
  410.           c++;
    5 w' k& M& z6 x' P
  411.         }  D9 {0 e9 |, W2 ]" W  [' m- G1 g& b5 E# o  D
  412.       }
    : R! v) w: V, z' ]2 P
  413.       else
    8 k3 M# w* P9 E. d% P
  414.       {
    * Z6 a0 P% k- J6 x3 D( |2 w) i
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 F0 m' _4 z3 B+ P" Q5 a; T
  416.         c++;1 d: g2 R2 @+ |4 b' o
  417.       }
    5 \3 _( A( D& g% z  B* ]
  418.     }
    , t1 e; q6 _6 h4 j. }/ ]6 f
  419.   }9 Y2 W9 X7 e5 g
  420.   unlink(".\\DownLoad\\update.txt");
    ! x8 D9 v$ H* }; P* E+ q" m
  421.   if(UpdateLocal.size()) return TRUE;' m6 r* E% H- q2 P7 N2 Y
  422.   else                   return FALSE;, }# i5 n3 n9 e% \% r
  423. }
    # H4 h9 |4 X) l; L
  424. 3 ~) t4 b. {8 Q; x- H
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"6 Y" q6 @3 h/ Z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
      L* z! h3 f- L. F- N: F
  427. 8 {3 ]7 Q, U* m- l* K% e7 x3 S

  428. ( k1 u, O9 m! }7 v
  429. " J- R2 p6 ?7 p5 m/ M7 R, D0 O
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)% H* i8 d6 O+ P3 Y
  431. {9 Z* ?+ s- i7 K! I, I+ J; N* w
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;$ z5 T- ~! o- o* p: x- c! W
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 }# k! d4 S. R4 D0 W
  434.   {
    9 w2 f4 I# Z4 ?. o
  435.     char szLanguage[50];* C3 ]: r9 N& m
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! M2 P) J8 G- F6 \9 U
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 C8 p8 ^% A1 B- Q/ E& H
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * F+ u1 W- n/ V3 A1 r: q
  439.     else                                   m_iLanguage=ENGLISH;
    : E% k$ {5 |& t; Y. Y; A
  440.     char szRegister[100];
    " S& G7 D% a& a1 H' ~
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 T; s3 s3 _# E% {+ z
  442.     strRegsName=szRegister;# y* ~# I1 w3 s5 K! q& i9 g: `# W
  443.     char szPatchURL[100];
    ) t) y4 ~& a# m2 `4 V
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 J5 g6 Q7 y. D( l7 ]& Q, q* [3 L
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 E, @7 N7 V  R' j
  446.   }
    % t2 K' @1 L& \" |  c3 \
  447.   else1 K" Y2 ?) O+ n6 o/ y. d
  448.   {; `- g/ a9 f& J# j# Z1 y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! P) G- h7 ^7 X
  450.     strRegsName=DEFAULT_REG_URL;9 B9 [2 o6 y0 M, c% v3 D9 S6 Q# I
  451.   }
    $ K- h; z3 ~5 D4 C8 ~% R* ~! ^
  452.   if(GetFileAttributes("hosts.ini")!=-1)1 e0 u$ h! f% k& F% q& O( e9 {
  453.   {
      |& f- C; N0 z2 I
  454.     char szIP[50];5 ~- g% G( n; \7 E4 G3 k7 J
  455.     char szDIR[300];
    1 m, f3 ]/ b3 ]; I: i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))2 u5 \! T- B+ Z& e3 W
  457.     {) ^% U& @7 o# Y5 Y" O+ |- L
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    " o1 g/ h8 k+ m4 D9 {
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");0 a6 p/ L7 A4 \( a1 D
  460.       strHostName=szIP;
    3 J2 c) h% c8 S! g7 e
  461.       strHostPath.Format("/%s",szDIR);( E& j9 ^( }: ~5 p$ x
  462.     }
    / @* I; ?" n& O$ T  B/ K
  463.     else- c2 `! T# {" p
  464.     {4 T4 i' z9 B3 i8 y4 {% J0 e9 D
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 M7 C- K9 P6 S; v5 Y5 [
  466.       {
      ]& Z, i: R: `' r+ K
  467.         char szLanguage[50];
    # w# ^9 h9 Z! H" L6 a/ A0 T
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ a5 }3 m; L+ {) N! v
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 Y4 b& _7 o, e: F3 [( ]
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ X% ~2 @3 V, f4 D& D8 P# Y
  471.         else                                   m_iLanguage=ENGLISH;9 r( l/ F' ^5 }& K
  472.         char szRegister[100];
    1 e7 b: m4 ?2 s( [+ @- u7 D
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) l9 \. d/ U8 J6 |: A
  474.         strRegsName=szRegister;( q3 s: v+ M4 a& V7 y$ [) c
  475.         char szPatchURL[100];: K7 i6 U" Q2 X% l! a* t
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 h, }4 p% \# m, F! A8 ]" l4 m
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( r! I% P' A7 R& Z8 \$ f
  478.       }" M% a, ?+ o3 s. j+ V
  479.       else; a8 g+ |& _  \* s  m
  480.       {
    0 G$ E3 q5 c5 A! B, a! g1 d7 w! X
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , Q6 u2 U& T5 m0 r; `" D7 n
  482.         strRegsName=DEFAULT_REG_URL;& q' Q0 w, |# l: p
  483.       }
    0 ?4 n: C7 F8 A; T2 h
  484.     }
    ; q' _$ K& Q/ x2 _
  485.   }
    4 _, t- ?5 P% s/ N( Q9 b( l
  486.   return true;3 s* c! `2 w3 ]& }
  487. }
    6 D% V# ]! p1 L* C2 B/ y
  488. " d+ D6 D9 E' |8 E
  489. #include ".\ZLib\unzip.h"$ |# r, w! e* r5 U: I
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    : p2 N7 d: g, @; J; z" N: o$ q$ q4 a
  491. /////////////////////////////////////////////////////////////////////////////. o# Z* q5 m/ k  b! e) s
  492. // CRevAppApp initialization* B2 a' g! V7 \1 x$ K
  493. + F0 Z! x! {8 m* V2 q
  494. BOOL CRevAppApp::InitInstance()/ y8 R, u6 l: a  u2 f
  495. {- B1 t$ e5 Z/ ]8 U( J! ~
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];- h. `2 z6 a/ Y3 g  w
  497. 2 F- `; X( ~( h5 A7 t
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);; t8 \% b: G9 {4 I3 }. U
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ; g4 s' W! S% J
  500.   {
    0 v5 d) G- z8 ]* F4 @( I
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");2 q6 b% U5 U- D; E1 h
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 {! c1 l2 ^! `2 R3 T& `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    + t- S' @# E! @0 @( {$ a( C
  504.     {+ ~/ N* h5 N0 F) y& s+ F9 k
  505.       strcpy(szPath,szPathTarget);
    ) i" ]; b) E  j, p
  506.       SetCurrentDirectory(szPath);
    # T! A3 z7 o7 v2 w& B
  507.     }
    ) o4 O* B5 ~! j; `2 V1 Z+ S- Q
  508.   }; P. Y; ~( z6 o
  509. #ifdef _DEBUG3 f7 V2 T7 d6 I: Q, i
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 y& K3 E: n+ l  `6 a
  511. #else5 |  J4 L: g5 z) ?+ t: a) l% x
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& z1 D; K1 W; W+ \/ g/ D
  513. #endif
    ' t" |3 P( ?8 ?( ^1 S- @
  514.   {2 z  v5 E; Z9 ~6 H! X, A, a
  515.     char tempFileName[MAX_PATH];/ F0 R4 u" j  J8 J5 C; y3 l+ U
  516.     strcpy(tempFileName,szPathSource);8 N) x. u; \& @0 y$ J
  517.     tempFileName[strlen(szPathSource)-12]=0;
    2 N2 L3 K5 w9 W0 D( e6 _
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    0 W( ?0 `7 ]5 L
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    + D+ V, l# s' B6 n8 K, {" P
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);) _# |4 q( s, S2 D
  521.     return TRUE;7 r& G8 y! H+ F1 J
  522.   }
    4 @7 N/ L$ Z5 o7 j! v) o
  523.   // Nuke 0118: Delete run.exe& \1 s/ L# p# m
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    7 u9 ?- @( p3 X/ U- c
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");1 D. J; p* y( [& h4 h
  526.   if(!ReadCfgFile("Config.ini"))
    ; z! q! i4 N- I+ f
  527.   {6 D* v3 _4 K9 V
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
      i1 M4 R$ P$ L3 c4 z  Q& v
  529.     return TRUE;
    , h) ?; g8 }* g& v! u& V5 l
  530.   }
    7 K6 ]# j5 s8 X  D3 D
  531.   HANDLE mutex;
    ! C/ x$ j) d" g9 J9 D. C/ E1 K
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    4 W* _) {; M/ O7 g' x9 ]; ?
  533.   {
    / N( N, @6 E' A- s$ L  t9 s3 V
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ) {# D3 J  d* |6 V" |6 w5 g
  535.     {
    . {- G1 p! Q7 Y, ~% E- |1 X
  536.       CloseHandle(mutex);- A" j+ J; ^$ z# J+ E, @: h
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);: L! s3 L9 R9 i9 t$ h# S' C
  538.       return TRUE;6 \+ c  b2 x$ d% ]' D
  539.     }
    * G. z% L8 B1 Z
  540.   }  
    4 {. V. r8 f1 H( [( _$ B3 U
  541.   CloseHandle(mutex);
    7 U3 `0 k  I$ e# `0 ?

  542.   H: B  G' k6 {* |7 E9 m
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    / W: V9 a; V/ Q! z- e

  544. 6 L; p( l5 T$ H* p
  545.         AfxEnableControlContainer();
    0 h" H% ?9 ]7 [! k- Y0 F

  546. + |3 l& V. }, d* p1 i/ c( W4 I
  547.   bCanUpdate=FALSE;
    % m9 g5 B  G% S) m: F- [0 V8 R0 n
  548.   dwStartUpSteps=1;( p' x9 v: e* Y% f5 ^
  549.   dwProgramState=AP_NOTHING;
    2 S' [) z  y6 P5 J0 F) G/ g
  550. 7 Z9 _1 @- W1 p# t( F  w, J4 L0 A
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);4 z) g) `! g; j) J# s5 l
  552. + `6 D9 ^* t# u5 N
  553.         // Standard initialization
    * ]7 g9 Q& A/ y5 _
  554.         // If you are not using these features and wish to reduce the size
    + G* h0 C3 X" V: n9 Z! U
  555.         //  of your final executable, you should remove from the following$ x$ n- ]+ J* g7 O
  556.         //  the specific initialization routines you do not need.9 E" |0 `5 b2 u+ @( C6 R
  557. # a6 t  ]2 q2 }: h% m
  558. #ifdef _AFXDLL
    ) l; }' |0 Z6 S- Y3 q( ^8 y+ ?
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ) t; ~& x1 i" q1 e0 F8 Z6 |
  560. #else
    & g9 P( U. D0 a% P
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    " |( ~: C& Q& n- N" S" r; j
  562. #endif6 H1 X  c2 M5 `/ [# |
  563. , j% x6 H4 n% M- y1 {( i
  564.   dlg=new CRevAppDlg;9 `6 _0 D2 E7 {
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    / Z1 G9 c* n2 B' `+ }) [
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    , @' N% m& _, [, c7 N9 r- q
  567.   m_pMainWnd=dlg;
    9 O: k9 [, V( q+ {# O& h
  568. 6 R% [5 C! x* v" r, ~+ D3 n
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);" ]3 ?6 Q- d/ S2 I# K% `

  570. # F6 Y$ [& W0 Y; l* O1 U
  571. //  GdiplusStartupInput gdiplusStartupInput;
    + u, z: H2 c$ t
  572. //  ULONG_PTR gdiplusToken;
    1 W( B7 V4 I( M2 T9 v
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    " C6 ?5 w+ K2 j+ _
  574. ( g' V% M) H' \+ B& {. ~
  575. //        CRevAppDlg dlg;
    ' O3 j3 F" d4 c" a; C# _
  576. //        int nResponse = dlg.DoModal();: G' B9 x4 `* J( t2 H  v. n
  577. //        if (nResponse == IDOK)
    ) c) ?) T/ h( m9 s
  578. //        {
    " j& x0 _/ H( F9 l3 z$ J
  579. //                // TODO: Place code here to handle when the dialog is
    9 I: R' X& j% ^% e
  580. //                //  dismissed with OK
    ) x% J$ `! D- q2 ^  R& L/ d
  581. //        }$ ?# }2 ?! W- T. Y
  582. //        else if (nResponse == IDCANCEL)
    # C* [. R% w1 ~5 n& U
  583. //        {+ t4 I7 V! B4 n- g" L
  584. //                // TODO: Place code here to handle when the dialog is
      T0 E' b4 S" c% E6 b; T
  585. //                //  dismissed with Cancel
    + J" X5 n4 X3 w2 I) \* e
  586. //        }
    8 Q% Y; v6 g0 o! W! I

  587. 5 f) Y* {, l2 d/ m9 z5 F: {( {$ H
  588.         // Since the dialog has been closed, return FALSE so that we exit the9 `- y& }0 [/ v( \7 G% i
  589.         //  application, rather than start the application's message pump.
    $ D+ ^# n5 }6 X) O
  590.         return TRUE;1 d3 `" e. u# G# L  Z! C7 h
  591. }
    7 w9 a& ]0 l8 x+ f
  592. 0 K3 u6 s- L; N/ }) O2 D& W
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    7 d6 l7 o9 n0 g
  594. {2 Z* w# m0 X% ]5 M' Y/ M+ A
  595.   int i;6 F* S: f( D+ S1 g& h) L* ^, j
  596.   char *szRet;0 x8 L) Q! ]% Y  U. j

  597. + r5 G1 i8 Y: Z$ z& {; k7 s: u
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    0 A+ V- e; ?. L1 U* j
  599.   if(sztoken)8 D& b' u" v8 ^  Q, W2 N% O7 D
  600.   {
    # V; S: s9 R5 ~' w; ^8 y3 K
  601.     szRet=&sztoken[itoken];
    4 }* z3 Q- {% b* b% E' ^3 v
  602.     while(sztoken[itoken])
    / L$ ?0 z/ j8 t9 \
  603.     {
    2 k& C: J7 E6 B
  604.       for(i=0;i<(int)strlen(token);i++)! ?6 j9 g: c; N" @
  605.       {
    . h& }/ F' q, b' ?- K  W+ ^) x
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    0 W- S- i/ p+ V4 x! g" U; d
  607.         {
    9 \- B% w( _/ d+ e4 g' N5 D
  608.           sztoken[itoken++]=0;
    2 T, Z8 v9 P0 {0 r+ l
  609.           sztoken[itoken++]=0;
    - Z9 o+ K- R, s- r( Q# i
  610.           return szRet;& D8 \& a/ d7 i- ~, r# H/ q! x
  611.         }
    8 e7 b7 n8 [; z$ k
  612.       }
    6 |9 x5 y* @, _7 j3 o! f
  613.       itoken++;* _2 V- h0 H' k" S
  614.     }
    # P4 p3 p9 U7 S5 l0 L, f: _
  615.   }( u  b. T8 u& M4 {
  616.   return NULL;5 X# Q( v  X4 C& J; i: P& {
  617. }: J6 S# N8 \# k$ c* Q4 @0 v5 }

  618. , A9 r9 x/ t, S. p2 K; U5 ]3 r! l/ d
  619. void ProcessProc(long Total,long Current); J+ m7 g) B+ H/ i: }
  620. {# A2 W1 Z0 J6 H+ ?4 x% X8 V3 D- x
  621.         MSG msg;6 r- z, B" L* a
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    8 W6 w7 u- ^# A# F0 y0 r0 L. z7 P
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 |- C; m% O% }  W9 L/ \8 d
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      Z5 C' {9 N- e/ t6 C( g
  625.         {, o& e) B# t) e8 l9 n1 m7 I& E& j
  626.                 if(!GetMessage(&msg,NULL,0,0))/ a# H3 Z% [) K: f3 O1 d% P
  627.                 {
    ' ^4 N% S9 E( I: V; @  G
  628.                         return;1 q4 h: c$ T! R
  629.                 }
    - d# [6 ~: t' K" Y* K2 }6 `; V
  630.                 TranslateMessage(&msg);: ~" E$ Y9 T8 c4 C' @( @
  631.                 DispatchMessage(&msg);5 H- j* S; ]! @5 Y' w9 v
  632.         }       
    " W" ^/ D0 l6 v  }; ~4 }' r7 a
  633. }
    . h/ H, W% ~+ E' `) c* `

  634. 0 {6 k1 O; c0 ]% E
  635. BOOL bFirstChar=TRUE;7 w' {3 ^$ d* H8 P: E8 f4 j' i: K

  636. $ i3 x  x( r+ Y$ l, \7 M
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 D0 T9 H0 ], c' F$ f- t% [$ i+ K- E
  638. {
    7 j- r3 p, a2 n" H% }  Y6 Q" `
  639.         // TODO: Add your specialized code here and/or call the base class6 m! b7 n7 }  R) I2 m
  640.   switch(dwProgramState)
    % d0 c, O. W; x5 b" \
  641.   {0 z. w4 i9 W) x8 B( D( i
  642.   case AP_NOTHING:
    2 c% K9 R4 w; u. k2 x
  643.     switch(dwStartUpSteps)
    ' _5 [/ H& k6 L% i
  644.     {
    8 }9 \4 x4 e" K+ }. q
  645.     case 1:
    ! @; U4 L" j/ ^7 ~/ L( ?- ~
  646.       {- s+ N* W9 j5 j) c0 e/ v) U
  647.         int i;
    7 T) U) M2 u5 o. l
  648.         CDC *pCDC=dlg->GetDC();
    $ m: l9 D: a6 ?5 {3 b9 r6 \6 `
  649.         HDC hdcwnd=pCDC->m_hDC;
    / ~9 E, B4 `; r. |
  650. //        Graphics graphics(hdcwnd);
    # D1 }9 y& L) ]* O
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ' [" n* `, k1 P& v
  652. //        INT iWidth=bitmap.GetWidth();# V! O. u4 X, }& p" |  ]2 d
  653. //        INT iHeight=bitmap.GetHeight();- l5 H4 I  R" \' k
  654. //        Color color,colorTemp;
    ) x1 d9 B: `! ^" I% w
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)+ M9 V* g9 Z& h7 m! x3 q9 T5 T: x
  656. //        {
    ' q, f& M' T, G* o( b
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)8 a8 E$ e  K# M) V7 M; K7 n' I
  658. //          {3 ~% i- K' }, D! }. {
  659. //            bitmap.GetPixel(iColumn,iRow,&color);( b" a1 X  b( R- L4 I; m
  660. //            colorTemp.SetValue(color.MakeARGB(
    # G" e" z! `, ^" h# L
  661. //              (BYTE)(255*iColumn/iWidth),
    - P( V- U$ B4 q  {7 k$ o, \  F
  662. //              color.GetRed(),
    ! j# z) c3 u, o0 u) J$ E
  663. //              color.GetGreen(),/ J0 C9 G+ c& m6 d; d
  664. //              color.GetBlue()));: }+ W, r/ I( P3 W+ S: ~* Y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);. R$ v7 a2 \# d' i
  666. //          }1 _" {" z4 ~2 V/ O4 E* D! i% X
  667. //        }; _. m% R# @5 R$ C
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);/ }. a7 b" o9 P1 f6 Z* \
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( z8 P. l+ {9 V
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");. A2 N3 X5 j0 I
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 N; x% v" J* `+ U9 c
  672.         for(i=0;i<240;i+=8)) Z! P" ?' t$ t7 Q3 O% w! b1 ^  C
  673.         {
    7 ?( a0 N" O; c% T8 N
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% i3 M- \5 j/ G5 \  Y5 @; f3 Y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & Q+ g8 J" C( S: }
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# l- a- E7 Z2 h- t
  677.           Sleep(33);/ r# ~/ P& U/ a7 p$ b1 h9 u+ S
  678.         }
    $ A% J& `% B5 X% B5 W3 N# ?; X
  679.         Sleep(1000);
    - g! z! g: T7 d- d3 l* g8 Y- r6 S
  680.         for(i=240;i>0;i-=8)5 R; ^; L# I5 B2 R2 Z$ T4 d9 m8 j
  681.         {
    * j7 l- ~" V' w: A0 a1 A
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / a; H* O9 ~# @6 L4 a5 B% T
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + }! A2 w2 }( K  f& q, J+ n
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" r0 t" x- Y) C4 V8 \
  685.           Sleep(33);
    . C5 C, l4 r! b9 `. |# q
  686.         }
    , l/ B2 Y2 H& T) ~  {* Q1 q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    5 r/ g# D7 H$ X
  688.         dlg->ReleaseDC(pCDC);( `, z, G  @9 M# l6 ?
  689.         DeleteDC(hdctar);
    , x8 ?1 R$ a4 @* A/ m! |
  690.         DeleteDC(hdcsrc);; l& R7 }4 B- \% c; W
  691.         DeleteDC(hdcorg);
    + i. u) L7 ?7 \! B9 f& q1 z
  692.       }+ f1 @% c' L; @; R4 x& q" }
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) d& O* K* L& u' p
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    2 J" }# [9 g5 Z# O
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ( J# \8 z) p# a2 o
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");0 ~6 b' |8 f* o9 l1 Z1 s" S* u
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' S6 c3 |$ s3 Q5 b1 m: G! z6 ^
  698.       if(!Dn.Connected())
    " X; L/ W. o) x$ c
  699.       {% d% D* C+ t. A. i/ V
  700.         dwTotalFiles=1;
    . J$ s, @; [2 X' T; u
  701.         dwDownLoaded=0;& a6 l& l% L# K) S
  702.         bSilentStep=TRUE;
    0 }8 g$ u- L2 n' i& Q4 Z4 v
  703.         bCompressed=FALSE;/ e! i. r3 t, i, s2 o* d
  704.         strExtLocal.Empty();
    $ }- }8 P0 ]3 V, P3 ^( m% A( N8 j0 A
  705.         strFullName="readme.txt";
    3 ]' D! R. l9 }, f
  706.         dwProgramState=AP_CONNECT;
    / N! k: x' o! [6 V/ n
  707.       }
    ! O- u( C$ L4 k% q" }+ p. l
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();$ z8 Y. Y: N- }, P5 V8 A
  709.       dwStartUpSteps=2;' n6 D, S, s- F! B
  710.       break;* r8 x% M) A9 X9 H# n" E3 G
  711.     case 2:) J! y6 i. `7 ?1 y. C1 ~2 u
  712.       {( G: {5 p9 x9 `) c+ V" @
  713.         int iEOF;. D* o7 W! m2 [, D. }
  714.         FILE *fp;
    1 l0 g& _% L( k: M2 R
  715.         char szString[512];! C/ d( k+ E7 ~$ z9 b/ O( V
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");4 T+ b1 d9 s! _: X/ ?/ K
  717.         if(fp)
    % W0 f& D) p& ?
  718.         {6 y* n) n; q% c! ^
  719.           do$ }' s+ P& R- c. N/ S
  720.           {
    % @% Y  t7 H8 i
  721.             iEOF=fscanf(fp,"%s",szString);% c1 s' o& S" S* E9 z& ?2 I
  722.             if(strlen(szString))1 p7 l7 J! y6 L/ ~% L1 K
  723.             {3 P% ]) j, C4 O( q7 N
  724.               if(bFirstChar)
    2 x0 R$ {5 U! z. B
  725.               {
    . O: }! S* t6 r0 v" k+ i9 i- m( R* K
  726.                 bFirstChar=FALSE;
    " }) D/ m# d+ F
  727.                 bConnectIsBig5=FALSE;
    2 R0 g" V, |2 }. w; d
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    0 C( X1 z% c* Y9 I- U7 {
  729.               }
    3 h- S4 d& F$ [2 v0 O3 u2 }) I
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 f" @) v  S+ ~# ?7 A
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));3 Z1 `* [$ S" _1 C6 U/ J/ a6 m
  732.               dlg->m_ListText.AddString(szString);: a$ n. V3 r$ V* Y! h/ O
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# E+ G: i# ~- A$ ?
  734.               *szString=0;
    + V: B# I/ R1 L
  735.             }7 u% B6 M  r& {# |# q; ]/ g  ], ?
  736.           } while(iEOF!=EOF);) X, z+ O! `" i2 W& H) m( v, v
  737.           fclose(fp);
    4 q- p# L3 S( Q; [0 o6 d/ v
  738.           unlink(".\\DownLoad\\readme.txt");) ?; _' l! f( g/ x
  739.           dwStartUpSteps=3;! ~$ G9 o% t, d, b7 B7 e( S
  740.         }) s# T- c/ b! b, j
  741.       }* C6 _! K2 x: r- N9 @
  742.       break;' X3 L  n6 y; l, ~% B* f
  743.     case 3:5 [% _% C# @# H. N3 z7 s
  744.       if(!Dn.Connected())4 s1 q- o+ K" q; n
  745.       {
    5 o) C5 Y9 W' T) [7 o" X+ a$ u
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    # J" _& n2 B7 s( _) Y8 W4 y
  747.         dwTotalFiles=1;7 R4 g* H6 T: o
  748.         dwDownLoaded=0;5 ^4 b* J! P) }+ |1 G3 M
  749.         bSilentStep=TRUE;
    : q8 K. G/ B+ I
  750.         bCompressed=FALSE;
    0 [! q' q+ T* B! ?- [  F- V
  751.         strExtLocal.Empty();
    # ?7 w* \4 r9 }0 r2 b. r$ s+ ]6 m: Y
  752.         strFullName="checkversion.txt";
    ) L) F8 n* k4 v- e  @
  753.         dwProgramState=AP_CONNECT;
      K9 t. ^# l. `, c. ^1 ]; s
  754.       }
    ( l+ u! c+ r! F% R: S% j3 m
  755.       dwStartUpSteps=4;, a/ y4 C! V& R: x, {' z9 @
  756.       break;
    & S1 ^- ^( {- a* |+ e
  757.     case 4:5 S' \' |+ {2 I4 v1 ]4 E
  758.       {
    # W# @: w1 j" ^0 p& t
  759.         FILE *fp;
    * o2 y, _, I% p( {+ v
  760.         char szString1[128];2 i  G$ ~8 O! C, D9 D
  761.         char szString2[128];4 @4 k& I" C4 C1 v) z, S  P$ w1 k
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    4 l3 R7 G1 _8 C- x7 m0 q0 R' G
  763.         if(fp)
    3 m& _0 l4 ~; h, Y( E! t6 F
  764.         {
    . p6 z. u  R/ b% k  m
  765.           fscanf(fp,"%s",szString1);! f5 A. G0 e2 e
  766.           fclose(fp);
    0 J+ U( u4 d3 n1 T- ]4 z
  767.           fCheckVersion=atof(szString1);
      i; {( \1 ~7 A$ f; ?
  768.           fp=fopen(".\\checkversion.dat","r");
    ) |) x3 g' O' z# H$ x3 h8 Y
  769.           if(fp)$ U& Z8 i* f3 y: o3 L
  770.           {. {7 _" t3 P: h% U. K; n0 t* y; O
  771.             fscanf(fp,"%s",szString2);' t4 r. B" L* U; W& ?1 X2 |9 x- O8 x
  772.             fclose(fp);$ |( y4 S' ]+ Y
  773.             if(atof(szString1)!=atof(szString2))& a; d2 Q6 h3 C5 W: \7 T# \
  774.             {/ h, B3 _, ?! Q; M/ e9 p
  775.               if(!Dn.Connected())& F4 x; N5 d0 D9 S6 R
  776.               {' p' h. N0 g5 u2 n( |
  777.                 bFirstUpdate=TRUE;' y3 O( R- Y8 G% u5 M, Y4 q, p$ j7 R
  778.                 dwTotalFiles=1;
    4 M' Q( X: {2 b. |- L! A
  779.                 dwDownLoaded=0;! `% n) |) ^) {7 h* C5 i- F
  780.                 bSilentStep=FALSE;! u- R4 e- |' ~
  781.                 bCompressed=TRUE;
    + ]/ j% B3 U! m: B. @
  782.                 strExtLocal=".\\DownLoad\";' H3 G% Y" u4 d' O
  783.                 strFullName="update.txt";
    0 v" a- V* {. D! s( k( Q2 l
  784.                 dwProgramState=AP_CONNECT;9 W3 {5 x9 D4 ^" l' F' x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 M' ^9 K: |4 Y2 x
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ g) |: l4 B' I+ J0 o
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - ~  ~9 L1 D# C% [6 o( Q8 D
  788. / f# J$ d2 `) W+ h7 w
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 `( x: |- P  M& W3 C
  790.                 unlink(".\\DownLoad\\checkversion.txt");  e8 v4 Z0 d( r1 ]( e" D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1), _4 w( [9 t: _0 m
  792.                 {
    7 i3 k! U" b+ ^- N1 {; e6 ?
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");% \0 Z& C& ^$ A7 R1 \
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % f. H0 `4 T2 e- z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    2 O3 k1 J/ S4 C* L
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 |/ i7 C- q+ H5 J8 o+ B! ^4 [

  797. # ^" O4 Q( Y9 g' Z# }* h9 M
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 U- G2 d* V6 i" _3 Y  S
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 Q# D) ~5 D% D, x+ c% Z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");$ e9 n2 o: D) n- f1 a; X# G- s
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ n% I- ]* S+ X% S  K4 i# P* J
  802.                 }) p$ a) t- p5 x8 m- b6 X; [' l0 a( W2 s
  803.                 dwStartUpSteps=5;8 J, C" \1 r2 `% [& }9 {
  804.               }
    ( U6 m& ]1 e- C  O3 C. X, ~- |
  805.             }% S5 y! r0 @. I  y' o3 f
  806.             else
    2 P: A4 e, u, A, P
  807.             {6 c5 e' D# I1 F: E8 O5 N; i
  808.               unlink(".\\DownLoad\\checkversion.txt");
    # p" I8 n' k) F) q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# {; P2 h. |' A
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' @8 \* u/ s$ X& U8 T8 o/ L# c5 M0 O0 K
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");; b2 p2 _% P9 Q) E
  812. . j4 `  v4 J( k! l# L
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ ]3 y& Y2 Y, c% k! J8 U
  814.               dwStartUpSteps=99;
    ; U& ~8 |# `) R% t( H* E4 n
  815.               bFinishUpdated=TRUE;
    - U3 w* s# j: _7 T
  816.               bCanUpdate=TRUE;: I9 n, X. K6 b) }& n% p. c
  817.             }
    + m3 Z3 B- O( E9 s
  818.           }
    + s4 B9 M6 \. X3 S, [/ S: ?
  819.           else8 C/ k9 ?7 J% `+ y. r  g% \6 @% E
  820.           {
    $ K: n" v3 p* t- c
  821.             if(!Dn.Connected())
    ( ~) X- ?8 s9 U% Y  w
  822.             {) w( M) G/ P- S: g
  823.               bFirstUpdate=TRUE;2 z% v- d! n1 Q" Q, t$ \( X
  824.               dwTotalFiles=1;2 y  M3 h! l0 Y
  825.               dwDownLoaded=0;
    . l* M1 C( J0 Y7 M' ]# d
  826.               bSilentStep=FALSE;6 Z/ C  Y2 k( W; v
  827.               bCompressed=TRUE;% X. E2 u* @; f' @2 A
  828.               strExtLocal=".\\DownLoad\";
    # D; \  ^0 b  L) ]7 }
  829.               strFullName="update.txt";* v- ]7 \  i4 j9 `9 L
  830.               dwProgramState=AP_CONNECT;
    # ^8 g( P/ e# j. I. A- u" ?: ]
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    : S5 e2 n& x$ y* t2 R
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 @. H- }. S; R5 }* \# t
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ( F& X9 F2 I8 h6 V7 d0 a8 k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 y$ D. F/ q5 t" Y6 I
  835.               unlink(".\\DownLoad\\checkversion.txt");
    6 U1 J/ ?% [' F' i
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)5 W4 d) k5 V) m4 t9 v
  837.               {$ U2 I3 x" {" l$ O5 x8 [- `
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ! ~6 v2 @' i8 |
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    # e0 ~4 w6 P# i( L7 F3 x) \
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");( A8 A) \% e7 j. Q7 K, K1 X9 c: S
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / n( ?2 [) O9 m" q2 P
  842.                 ; \" D; M6 E) A9 a" M6 ]0 `
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 w3 R- B7 i; g- L7 r# a; k
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ `+ D) R5 R" O; `6 C/ U
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 g, j- H$ Q/ G' d, Y
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( \8 a/ j- h+ m! I9 A) `
  847.               }3 W1 l" W. }6 H: q1 H
  848.               dwStartUpSteps=5;- S! m9 p8 C" J; a7 E
  849.             }
    : y* o3 h3 K7 F  i
  850.           }
    3 D, \) ?: {' v6 D4 x
  851.         }" G7 U6 F9 A9 F& i" R
  852.         else! ?  ]6 K, S1 S. v
  853.         {
    9 n' s3 M2 L! ]
  854.           dwStartUpSteps=3;% y% h7 k* v0 a- x: p8 D0 S
  855.         }5 m  F1 Q& r! }2 A
  856.       }
    ' b3 W: y' X9 |3 q
  857.       break;' x0 T" E! g; m# o  _
  858.     case 5:6 I) X+ [5 b  _9 f$ ^
  859.       {( O& n# o3 o% T) M$ D( P
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    / X( d$ G' f  |2 {3 c9 K
  861.         {
    ) }0 g& O" A2 _
  862.           int opt_overwrite=1;
    1 G0 ~0 G" n2 a  `3 v5 ?! _
  863.           int opt_do_extract_withoutpath=0;
    - ^" ]/ b) e+ w" f5 i! Y5 l6 D
  864.           unzFile uf=NULL;
    & y; l6 T) w9 i' I
  865. 2 F8 r3 P* }; |
  866.           uf=unzOpen("Wsa.zip");4 ~! M& e! S1 k  r, p" O/ b) m) I+ r
  867.           if(uf)
    " E  o( O/ v' ~/ @# X
  868.           {& w9 f5 e$ a( j- ]1 K
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);7 K& a1 E  d9 ^  I
  870.             unzClose(uf);$ g( [# ~8 y: a; S  O5 c1 V
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    2 m( {3 a- G& P' _. W$ I, d
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");9 _0 Z  M# F5 i
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    8 q3 J# j* k+ M: g3 f" o& F' ]+ R
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % I; @0 O$ N# e
  875.           }8 f7 _' \7 |- y$ r# h. D4 t; x) G
  876.           DeleteFile("Wsa.zip" );* l# o% n9 Z: Z3 y; }0 E4 y- P
  877.         }5 H3 M9 {4 g, Z' N$ u; T" \* C

  878. 9 K9 |- a8 ?: |: {. z4 X
  879.         if(CheckLocalVersion())
    ( ~$ @  I4 \! o
  880.         {! M/ j7 k- V2 }9 r( d; O/ c  R1 [
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");. _6 r) F, L' C) t
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");' S. h6 ~  M8 X. j- e
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    4 s. W5 Y5 j4 x( O3 [/ ?! ]
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. [+ G$ \3 V7 R% ~  |
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ' U0 _* f: H% M  l& n
  886.           dwStartUpSteps=99;2 i, k+ G9 X& a+ q3 E6 a7 _- x/ u( R
  887.         }
    ; N4 @& B) |% \! x  Y) r+ @+ @% b7 W
  888.         else
    2 q+ t) _) B7 g/ S
  889.         {  r' L$ ]/ Y/ L6 n6 u+ l* f4 S: a2 p
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 T' W) p! @  i, G
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");9 O9 P4 L; d' L, I. }
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");! R; u2 ~2 [2 X8 z

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

3 P" g$ E: ^+ T( j- m3 ?( m5 q" n, _: X! I

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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