找回密碼
 立即注册

CSUpdate.exe源代码

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

: d5 f$ X  l8 B
  1. / RevApp.cpp : Defines the class behaviors for the application.
    4 x/ |& `, G% e( X5 {
  2. //
    1 S5 `5 t0 z4 V5 W- E* q; P! W4 W

  3. ! Y. n0 E9 S; g
  4. #include "stdafx.h"
    ' w( J# V8 F0 I& B

  5. / h% \! V( E) m/ U. i
  6. //#define UNICODE, j5 p! r; W, @5 w
  7. //#include <gdiplus.h>
    ' P2 A" |( j9 p' r; a6 j: O  m9 U
  8. //using namespace Gdiplus;
    - d  T! ~( y/ e

  9. 2 v2 P( q% r2 R: n
  10. #include "RevApp.h"
    ! C# ?) E& J& W) M
  11. #include "RevAppDlg.h"
    # Q0 L  [# J- o- s% x  K. h
  12. - w8 w. L. F+ f7 ~+ H, _& E
  13. #pragma warning(disable:4786)' E2 j) h  O1 K! j2 P5 L
  14. #include <map>
    0 I1 e  K0 |, ?0 O
  15. #include <list>, T, _2 k9 s1 ~6 y9 d6 U  u
  16. #include <direct.h>
    % S; f; U# B2 f4 C% ~  z
  17. ! F2 i: Y5 i4 Q& h; @* T
  18. #ifdef _DEBUG
    2 P( J) d4 w! z2 c% _
  19. #define new DEBUG_NEW" a+ Q! A+ Q& {6 X* Z8 L
  20. #undef THIS_FILE
    # Q; Z4 j1 }4 q2 c9 ~
  21. static char THIS_FILE[] = __FILE__;7 b% J: ?5 ~7 ]: w
  22. #endif+ ]8 c* o+ I* T
  23. #include "SkinResDef.h"3 O) T) H- y1 ~& ?
  24. #include "ChangeBG.h"6 A( }5 e) N+ G% q
  25. #include "AFXINET.H"9 W2 V" S6 s1 i; Z
  26. ; a. H' O7 f& t, s: D3 h
  27. #define TRADITIONAL_CHINESE 00 e& d- l. w: C
  28. #define SIMPLIFY_CHINESE 1
    ( W, x2 S( [: F+ G8 ?$ S6 O4 b0 ~& w
  29. #define ENGLISH 2
    : V+ P% N! ?# c
  30. int m_iLanguage = ENGLISH;
    0 T, [  o8 @% H- h( f& k$ F3 x
  31. /////////////////////////////////////////////////////////////////////////////
    - U$ h; y$ }3 J. ^; `& d
  32. // CRevAppApp7 X% |( l3 A# f

  33. ! ]. i  G! J& Q/ A4 v
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    5 A, L. s! R9 O  U
  35.         //{{AFX_MSG_MAP(CRevAppApp), n6 f$ E) p4 ]0 x9 h5 y& W
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    1 T% h! X6 L3 H3 c+ x  {
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!& G, A  G5 A& u8 S) \1 Y9 j5 s
  38.         //}}AFX_MSG
    . z3 t/ f  w8 {+ y; G, p" j! @- }
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    0 G: s; p, Q& i, _7 M: f3 g
  40. END_MESSAGE_MAP()* @: d! Z2 X! s& F6 k
  41. % b* W0 p  x+ A
  42. /////////////////////////////////////////////////////////////////////////////! o0 Z2 l0 C% K, }; M2 w0 V
  43. // CRevAppApp construction8 H8 w9 d! W+ a  ^" l) K: w) I

  44. + ?# I7 _2 n% |. ]0 b+ u2 F3 W
  45. CRevAppApp::CRevAppApp()  |% {5 W8 G: X% p% O
  46. {) H( C, [! p; F8 C! B# s) o4 \
  47.         // TODO: add construction code here,/ J- B5 B) `% h* z9 F
  48.         // Place all significant initialization in InitInstance5 z3 v4 T/ r, q/ l& R
  49.   bDisplayIsBig5=FALSE;
    / w  H; l( |( [; D  }/ z% n  \
  50.   bRestartUpdater=FALSE;
    + Z- A4 s6 E2 \! f7 Y; }5 R
  51.   bFinishUpdated=FALSE;
    : J9 T* ~- E6 h$ X
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;/ x" [3 O- }! i( Q
  53.   InitChangeDataBig52GBKS();
    ! G! ], n. H, r& e7 k
  54.   InitChangeDataGBKS2Big5();# T) ?8 K+ `% h# t/ X. h7 u
  55.         //7 l7 E3 g1 \0 {  j- ]
  56.         bClickRunExe = FALSE;) B9 T2 N. ?# g; _
  57.         //- k' ^, }) [  e
  58. }
    2 ^4 e* p5 ~, q
  59. " K, v+ C9 I* ^; s6 p6 O/ H
  60. CRevAppApp::~CRevAppApp()
    $ ?: p2 z3 }) J
  61. {7 n+ W! l3 G* i3 m
  62.         // TODO: add construction code here,
    7 |: ]" V# m9 Q! b5 V: s' v+ j
  63.         // Place all significant initialization in InitInstance
    ; L, T+ j0 o' L- I9 g4 V. n
  64.   EndChangeData();: i2 ?( U% s: B# ]) v; ]
  65. }6 w# r+ o9 P: h7 K
  66. 2 H6 L2 C; J, G7 {' t
  67. /////////////////////////////////////////////////////////////////////////////
    , h/ Y! \/ j. w; \6 m+ y' g: `6 ]
  68. // The one and only CRevAppApp object/ N+ f6 U% @! d2 R

  69. 6 _1 @0 j: ~$ b
  70. CRevAppApp theApp;
    6 ~9 U& ~, h2 T/ D
  71. , E' K( v0 ]: Q2 X* f+ Y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)" A# p0 _4 K% a; S* h8 F; L' v1 ]
  73. {% i2 C" V. @; F9 h* v; d
  74.   int iEOF=0;
    " u, B2 W- ]  I6 r3 L3 _
  75.   char szTempName[MAX_PATH];
    0 I+ j. l/ p, o# Y# k
  76.   *szFileName=0;! J" X' v* \; G
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ) N/ q) s0 h, a* Z: ]3 w
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ) |, |" \5 B: E: L
  79.   {* Z+ _2 U* y7 q" H. f
  80.     strcpy(szFileName,&szTempName[1]);
    3 J' h% `: T) x2 d* v; }
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    : b" s+ d$ {+ z' e& \2 t6 r$ \! y- V! h
  82.     {+ V+ W5 w3 o1 k) _; k9 _6 |
  83.       iEOF=fscanf(fp,"%s",szTempName);0 U% t" X, m% z4 ^3 \5 |6 O
  84.       strcat(szFileName," ");2 b: y! F. ~3 z
  85.       strcat(szFileName,szTempName);
    ' ]( F# L* s( i9 m) O
  86.     }
    7 j1 |# C$ Q. t
  87.     if(strlen(szFileName)>=1)
    5 O$ N( ]4 Q# C
  88.     {
    2 P* O2 e! h; S* t
  89.       szFileName[strlen(szFileName)-1]=0;
    # V" @8 {0 s4 b
  90.     }
    : ~; ^) o4 I6 b: x) E, _) Q
  91.   }
    / E7 b0 x) e4 f% W5 x8 E: C$ d
  92.   return szFileName;
    8 F6 {0 p  n  p: X2 y9 {4 a
  93. }& g. H% c$ A$ X  S( _# Q
  94. 1 {  W& E+ z1 |( O
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)% @2 D; O8 [& z3 }, S3 q) C
  96. {
    4 s! F* s4 [% w: `' p: Z4 R
  97.   FILE *fp;
    $ ?2 _" y0 m5 O$ Y+ S  N
  98.   char *key=NULL;$ n4 ~/ p. `2 q
  99.   char version[MAX_PATH];
    ; V3 T9 {7 |, P3 B0 E1 X
  100.   LPUPDATEFILE file,olds;# H# v* r& }1 O/ @, u9 o3 B
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 t# Y& F; {6 C' }4 H
  102. $ ^6 N& r& z1 b
  103.   UpdateList.clear();6 n) N! Y+ B3 ^2 w/ V' O1 v! N7 X
  104.   UpdateFile.clear();
    % B) a/ X$ J2 `- K. e
  105.   if(GetFileAttributes(filename)==-1) return false;4 h: b* ^; Z7 c  |) L5 K# w2 h* l
  106.   if(!(fp=fopen(filename,"r"))) return false;4 m9 Z: [  D  V% X) ^
  107.   fscanf(fp,"%s",version);2 B9 r1 H0 G- e( O! [0 C
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }3 @1 j1 `5 y+ W  O7 r
  109.   while(fscanf(fp,"%s",version)!=EOF)5 z4 y: H; O* u4 ^- m6 `% j. C
  110.   {
    3 H1 U4 Q- j: o/ j$ I- ]
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . g* q7 c+ l* `/ w+ y/ Y% Q( w9 ~
  112.     fscanf(fp,"%s",file->path);+ O* z4 \  w, Z1 Y  e7 h9 s
  113.     ReadFileNames(fp,file->file);- @2 K2 q& l  u0 g9 a9 _/ q2 P
  114.     strcpy(file->full,".");0 E+ ?6 r0 L. V/ B
  115.     strcat(file->full,file->path);+ z6 j, O" X0 {# o# @
  116.     strcat(file->full,file->file);
    / Q- e& j  u, Y" l& r1 N% s4 \
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())$ k& C2 x, t/ q6 B
  118.     {1 r# `% z1 X- ?5 E  a/ O! t0 ~
  119.       file->vers=(float)atof(version);, h" p/ u. ]0 `, J4 q, ]) ?
  120.       UpdateList.push_back(file->full);
    5 o  D$ y* j6 |- K: r9 o! j7 o
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    / ~+ ~. _8 Z* A; H9 C
  122.     }" u) ?3 y! G, T6 M: ~, l* D5 T3 l
  123.     else5 Q* O5 \5 F, k: l4 I. b
  124.     {
      i6 ~! x! F* v0 K# T0 b+ p, e
  125.       olds=(*p).second;
    - w; `' s7 _+ w2 @  E
  126.       if(olds->vers<(float)atof(version))2 e' {+ H! Z2 I( S" `) }
  127.       {6 x% |1 v" Q  c
  128.         olds->vers=(float)atof(version);
    + f9 ]' K2 S2 i5 |% p& v. ]: }7 Z
  129.       }) c1 Q9 O3 y- h, U( Q" n
  130.       free(file);
    - p6 E5 c. e# O( R
  131.     }; Q/ `  t7 c& G+ C+ v% E
  132.   }
    1 b& r& l! E: O: ~, [& R9 f) W
  133.   fclose(fp);
    & ]: j, m5 R8 T' b' g
  134.   return true;
    ' j2 L# ?# W  n  K  D
  135. }3 W/ o- z0 y9 p& f

  136. - M) A5 t) ^! X  Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)9 S* [- U0 C8 e& ^/ e
  138. {/ ^$ p3 ?+ v& c- x; I# ]
  139.   TCHAR  szFull[MAX_PATH];
      p" C# W1 ]# Z6 J- @+ X
  140.   TCHAR *token,*inter;2 P; e1 r3 N% L1 l6 \
  141.   *szPath=0;
    % P, a! }' G( N+ ?
  142.   strcpy(szFull,szFullPath);
    * Z1 V7 u+ M/ K5 V% i3 c0 I. w' Z
  143.   token=strtok(szFull,"\\/");7 p* N1 \2 n6 E5 Q
  144.   inter=token;
    * i) W1 D' o0 h$ b- K
  145.   while(token=strtok(NULL,"\\/"))8 b7 k# \5 R0 U5 M* T- R3 Z7 l# n
  146.   {: u, ^1 s$ `: u4 o3 ^
  147.     strcat(szPath,inter);$ I6 V' T0 J! u# F  f& @( i6 [
  148.     strcat(szPath,"\");
    6 g9 n" q% t: v4 v7 n
  149.     inter=token;
    % W* u, y$ \2 m7 j  }4 y% O! `7 L
  150.   }
    - U) O/ _$ b' d5 s
  151.   return strlen(szPath);
    ) T5 F: }" s" v6 X- v9 [
  152. }: j- g* s  l5 z0 w, C% J4 U; G
  153. 8 Z0 U" i3 k' M* A  Q. o
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)2 T9 u9 _3 h  }
  155. {
    % c" x5 i: Y# W
  156.   DWORD attrib=GetFileAttributes(Target);3 A) T, Z0 V. n# @
  157.   if(attrib!=-1)/ i0 W& `4 q) h. W6 ~
  158.   {# M: r4 s0 _4 Y3 x1 v
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))( W+ ^6 O/ C, N0 \% N/ w+ ~
  160.     {' P# [. X. B5 _8 q  D7 _" A
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);: W' k4 Q- u; T
  162.       SetFileAttributes(Target,attrib);& O, l/ x, p$ T' Z+ V! }
  163.     }
    4 h, \% q. u/ X; U
  164.   }
    - }2 f1 _- i8 a! p- e5 \
  165.   CopyFile(Source,Target,Erase);% K# n2 Z7 m# M/ f2 G7 V
  166. }+ P% a: [* h6 C& o& b0 ?$ l$ b* |) H. h

  167. & w- U4 w' _& J& n5 v1 H
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    6 u' G1 h, b# J% _6 m7 U4 a# |
  169. {
    ; }  A# T/ a2 s# |- U
  170.      FILE *fp;2 H% H+ L' P* ^. Q: Q
  171.      char  szBuffer[8192];
    . k: I8 ~/ M5 ]  R7 m6 B
  172.   va_list  argptr;
    8 z7 d% J: M5 J! B( s! a
  173. 4 P; F5 X, x% O6 j
  174.         va_start(argptr,message);
    : z$ J; y. [+ o
  175.         vsprintf(szBuffer,message,argptr);
    " W$ Q. \: V1 T3 Y+ G
  176.         va_end(argptr);6 F: p, ^: o; r+ t, J$ r
  177.   fp=fopen(FileName,"a");9 r8 }* g: ?5 d. S" T  C# ~
  178.   if(fp)
    2 c3 w, \5 B" ?3 L+ }4 G
  179.   {& P/ G0 N2 I+ a6 Z6 b2 u, G+ J
  180.     fprintf(fp,szBuffer);
    4 \# l- P* B) z
  181.     fclose(fp);7 B2 V" |2 W# |  O9 z' k% @% l
  182.           _flushall();7 f! T" U! a- [) T, f: K
  183.   }
    * F! ?. f2 x3 o! y% O& V% r
  184. }
    8 z1 G# ^% D" T% B9 U

  185. 2 t% r+ V/ f" i6 Z
  186. BOOL CRevAppApp::Fclearf(char *FileName)6 P: h9 Q, |. w. n
  187. {8 Q9 h: m4 K% Z5 T
  188.      FILE *fp;9 ]6 b+ c" H7 ]+ ?/ D/ H
  189.     DWORD  attrib;
    $ e0 @5 S! C6 i4 {3 ^+ ]
  190.   attrib=GetFileAttributes(FileName);4 D2 r' i9 z& x( s/ \& R3 V
  191.   if(attrib!=-1)
    : u; r* t! w+ p
  192.   {
    1 g) U; z" E2 @" @/ A: ^
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);7 n/ U- U* d: a6 C1 h- {
  194.     if(!SetFileAttributes(FileName,attrib))
    + Y0 \+ Z( }! T' `
  195.     {5 F' A5 r8 W# P/ v6 k. p/ y
  196.       return FALSE;
    8 x' J: S; g: Q1 B7 B; Y' C6 S; h
  197.     }
    , n0 ^, `& N4 S) M: a
  198.   }, q  H+ j! Y, d# D
  199.   fp=fopen(FileName,"wb");
    ; t' [% Q( N0 b
  200.   if(fp)
    ' B/ D1 s5 R9 C1 ~; a
  201.   {. z. `0 L" o4 ~) I$ @
  202.     fclose(fp);. E5 m8 \3 P! ^8 N: z
  203.   }: a' S3 u6 e  {/ Y9 @4 ]! R
  204.   return TRUE;
    1 }$ T" ]& ~, o# [4 o: ?
  205. }( p6 |$ W/ V' X; M
  206. ) E; e; Z) V5 e) y$ j4 y
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 s3 u+ v. A1 b) k; f+ l3 [8 F
  208. {
    3 S4 [- B8 Q8 l) q6 i
  209.   char filename[MAX_PATH];
    + `: F  h& H/ h- q7 d
  210.   LPUPDATEFILE file,olds;, r, Y7 c+ \& y: V# k
  211.   std::map<int,CString>::iterator i;
    0 }; ?3 m/ M9 T) z. Q- D3 T+ N
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 G; L9 d  I  g% n. c& E. y
  213.   std::list<CString>::iterator l;1 I" q* x' K. v3 r8 P
  214. + [8 \# F0 i" D& I1 J6 ]
  215.   if(bFirstUpdate)
    6 x+ X. ?; `' t
  216.   {. ^+ \# i9 E; J' F$ b' E
  217.     dwCurrFile=0;
    / ~& T) T3 ~; I1 o" o" Z
  218.     bFirstUpdate=FALSE;0 M  h* B3 \# Q/ M
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# _) }% {1 y! @* [: z& R
  220.     {
    ) ^9 H6 \% R: O/ F
  221.       dwTotalFiles=UpdateLocal.size();
    , ?+ `; U. M% C: G
  222.       dwDownLoaded=0;
    / g7 g- v& M- K7 t; a% N
  223.       bSilentStep=FALSE;
    $ V2 U$ O0 T# r, d0 K; y
  224.       bCompressed=TRUE;
    4 M5 T$ u0 `; o. ^+ ~2 t
  225.       strExtLocal.Empty();7 r; i, H- u% P. s2 j  I
  226.       strFullName=(*i).second;
    - D& z8 I) h! s5 y% s
  227.       dwProgramState=AP_CONNECT;
    6 x* a, A6 b0 j4 V% F3 {
  228.       return TRUE;, v- [( Z% A5 U$ v- x- e
  229.     }
    % B0 ^. l* _. ~$ O
  230.   }$ z* l# p- P: A& P! O
  231.   else if(bRestartUpdater==FALSE)9 v5 ?; I( P4 Q/ s7 Q6 {
  232.   {" t+ P* s$ \" l" Q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()). }7 _. b% M' v" X9 t
  234.     {
    + b6 p6 X  [2 D9 ^
  235.       file=(*p).second;
    ' S: b* X- a- f+ A0 h2 d. c
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())3 T7 n6 @" t$ r$ K6 H
  237.       {
    " t) N" q) X( K5 c# a0 Y2 j
  238.         olds=(*p).second;& {( L  K& R; i' S9 [8 X) K
  239.         olds->vers=file->vers;
    - g1 e/ C5 I9 Z# K. J8 c
  240.       }
    ! @+ d/ `7 p1 i
  241.       else
    8 U, M( w0 N, n
  242.       {7 X3 G0 w4 _: v2 a
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# ~" r6 }+ \, S; p! U/ L$ h4 p$ P4 K" s
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    / i. m0 r2 e) n3 g( w2 H% Y. X$ R
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    $ g, [' }4 \! ]! \9 M# x& w
  246.       }6 I9 @- c8 E* q5 F% {' ~' w
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    2 N$ l& G" \7 A3 E/ o) E2 E
  248.       sprintf(filename,"(%s)",file->file);
    ! [0 H" d( h/ b& V7 |) M' D
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- i+ V( ?3 X- H7 v8 d4 w  m5 w4 m
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    4 @9 b6 o3 \9 X" ?
  251.     }
    % ^6 X( T5 v, y. a+ ?( D, b. B( X  v
  252.     dwCurrFile++;, ]0 q3 ?. m% b/ c& ^
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' g, f3 G1 X0 K0 q1 R7 u
  254.     {
    - J' e2 F1 i$ e7 q7 g4 l
  255.       bSilentStep=FALSE;
    * I$ e! Y* s# N
  256.       bCompressed=TRUE;
    3 L" N9 {; x- }8 [, V
  257.       strExtLocal.Empty();
    $ p, x* x6 c  F
  258.       strFullName=(*i).second;
    8 F& `/ W0 b: W3 v' I% v
  259.       dwProgramState=AP_CONNECT;
    . z5 `& }# r# R" E; U/ e3 F' u
  260.       return TRUE;2 T- y" p) r& v# W, e* f9 I
  261.     }! H7 w/ g; ]: ]( x/ d5 g
  262.     if(!bRestartUpdater)4 }4 W  @" `: e# g: A
  263.     {3 A1 d& V: l5 F. K7 E
  264.       int iCurrSize,iFileSize;' T, F9 x& w& J& r5 \
  265.       iCurrSize=0;
    . ]5 h+ Y  u7 ]/ o; `' e
  266.       iFileSize=UpdateList2.size();
    8 W* \( Q2 I7 c, G# C
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    - ]1 E0 P9 S- s; R6 m* ^1 x
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ; U; m* }0 @/ D' c/ {8 L: L
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    . m  s; {3 U/ ]- y1 w
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- d8 S# J) k, T, X
  271.       Fclearf(".\\update.dat");
    1 W4 x* w) n0 W: g0 R
  272.       Fprintf(".\\update.dat","Bloodyf\n");; _1 @( r- u7 f% m+ ]; v" G
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)& N4 u, C3 g4 H0 f7 M$ R. z
  274.       {' y5 s. r! Y7 p$ D  \; t1 N
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())+ U3 l# I5 C* l: b5 ?' @
  276.         {
    3 i8 I2 g  U  x2 Z1 a6 l4 b8 n+ Q& o
  277.           file=(*p).second;
      f+ N1 a7 h+ W& c& p& D! d) [
  278.           sprintf(filename,"(%s)",file->file);. M8 u; J! P) f, O4 J
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 ^, J* a" K  g
  280.           iCurrSize++;! s  E2 `( ?# `3 }# v1 y# g1 A1 y$ I) o
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));" \# }+ V0 a  R/ @5 D0 s
  282.         }' d% J1 j& M: l, D3 o& s+ |
  283.       }
    2 g$ z- }* @  [% b
  284.       unlink(".\\update.txt");
    % L& c0 o9 ?8 ]- `0 [& U
  285.       unlink(".\\update.tmp");
    1 \9 b1 m- }& L2 a
  286.       Fclearf(".\\checkversion.dat");
    $ {, W  _3 r5 J0 z/ o
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);7 g; S' o8 I3 c  [+ T6 }
  288.       if(UpdateLocal.size())
    + _. q5 K1 X9 u6 C) z# W
  289.       {
    ! W5 B: }. o: E6 x# O
  290.         UpdateLocal.clear();
    / c# a1 v& T/ ^7 Z) ~! w! u
  291.       }7 }1 W& V# t- P
  292.       if(UpdateFile3.size())
    2 y# g  O4 [7 N2 J9 d2 l
  293.       {0 m7 `( B9 B. e2 t
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' X: C( ?* }: @/ k. i9 h7 c0 w5 d
  295.         {% }9 L7 j0 ^5 y4 X
  296.           file=(*p).second;
    / [# f% r( m( R4 \
  297.           free(file);
    5 S2 \: ]5 _7 J& K1 Q
  298.         }
    0 x# p# F1 g* @/ P
  299.         UpdateFile3.clear();
    0 r0 G9 A" {- D1 f  I, _
  300.         UpdateList3.clear();
    2 g9 Z3 M7 @" ?9 E
  301.       }. d1 e3 Y2 n% A9 K8 ]+ p
  302.       if(UpdateFile2.size())& k% _2 D2 [4 c% a- `6 ]7 `4 }
  303.       {
    * ]: s: y! {! I+ @; l& a% j- m8 a( N
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & V. h. Y3 ]* x  D6 j4 f
  305.         {
    " F4 R: ?. [) Z) c. m
  306.           file=(*p).second;: \5 J; Z. J0 o) y$ T
  307.           free(file);
    ! g- D; ^" m6 L" a. t' ?
  308.         }
    ! Q( Q# l/ Z' t* [/ X# s7 i
  309.         UpdateFile2.clear();
    2 X  B& B' P6 P- D$ ]
  310.         UpdateList2.clear();
    . r: r  c9 Y! Q: X8 f; x
  311.       }0 b2 ~+ s! M+ C; N) f- c% o) W
  312.       if(UpdateFile1.size())! c/ |, t/ h, g( W
  313.       {
    $ l7 a, Z+ k+ v: l5 D4 y7 c
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( ~2 Z8 \6 w1 K3 `% f) ?1 E
  315.         {
    , G1 t5 O0 l$ @/ J
  316.           file=(*p).second;; J% a5 b& u2 H  s% O0 V( O
  317.           free(file);7 m4 }9 ^" z+ \; I" O
  318.         }3 O* Y' e% ~0 S' R5 Z% F. s7 K# K
  319.         UpdateFile1.clear();
    3 C+ e; O, s8 U3 I1 Y+ I/ e. j
  320.         UpdateList1.clear();: l" G1 g" E; i  J; g: b5 i$ ?
  321.       }% R" E1 k8 ^! A% p8 g( \
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));" {- d4 f# l# j& @
  323.     }* \- y" G" Z) l
  324.   }
    2 g2 K7 i. B+ [4 n- y" K
  325.   return FALSE;& L1 n' O. ]3 ^1 L% s3 [& ]' B
  326. }4 f5 W$ x3 }; l$ ^8 }2 X" n6 ~
  327. % Z& C9 \8 x8 m6 j7 H/ l& W& r
  328. void CRevAppApp::ClearAll(void)+ n) L* [# E" q( U: C
  329. {( ^4 b! j6 C1 B2 M% q4 J
  330.   LPUPDATEFILE file;4 |+ T4 m3 G/ J# G& b% K, ^9 }
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    . Z3 S0 A* m  V9 ^$ z4 K$ e$ I

  332. * y) g$ Q9 a3 O6 E
  333.   if(UpdateLocal.size()), Y6 q1 W0 L* H9 V) p# Z, n, ^
  334.   {6 h: a+ d, ]9 T% G: N
  335.     UpdateLocal.clear();
    4 P& a9 c6 r- h2 l2 O
  336.   }
    % g" {4 W9 t. i. J, `: D
  337.   if(UpdateFile3.size())7 f5 C% O- F8 f6 l! T2 \* F
  338.   {
    # J8 s% m* S$ o2 K& e
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % D* a& F+ M# b" Z
  340.     {
    ! b& Z. e7 O* e$ l6 m
  341.       file=(*p).second;
    % m. ?- j' q1 o4 }% X
  342.       free(file);
    , G% Z; w( R$ P! e" i; H" p! g
  343.     }7 E2 {4 ?  F7 Z# ]! n/ l
  344.     UpdateFile3.clear();
    0 f7 v) k* ?7 i% N
  345.     UpdateList3.clear();
    9 [. H, t% Q: |! P4 ~
  346.   }
    & q. N' X4 @1 b3 f* m# J8 o
  347.   if(UpdateFile2.size())
    ' A( \, W0 ], R
  348.   {
    ' L" Y2 R7 S( C- o) @9 E6 Z( }
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ x; c" y, @; L) Y0 F, L
  350.     {& n7 }8 E# ~, `6 e
  351.       file=(*p).second;
    8 K) h) r% a6 L; @
  352.       free(file);9 Y1 I' ]- ^: `" P
  353.     }  C8 f& p% a: Z) Q8 ?4 W9 }
  354.     UpdateFile2.clear();/ g: d1 L1 W  p, e5 s, k1 Q; A8 W
  355.     UpdateList2.clear();
    4 v7 ?4 ~5 B) O+ H4 W
  356.   }7 N) ?! I4 M1 i. X" H
  357.   if(UpdateFile1.size())
    7 H% [8 N9 P* n  K1 |- I
  358.   {' N' x. x0 X0 F( z" Y. d8 J  [8 O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    9 g" y* |4 a  }1 F
  360.     {
    9 a+ w7 u/ J* E3 |' T
  361.       file=(*p).second;
    2 N3 O; `# S" s; A5 F2 ~3 f8 D1 x
  362.       free(file);
    ! J1 @" W& @' w5 z; K, a  I
  363.     }; |0 Q% i4 n5 z
  364.     UpdateFile1.clear();
    3 g/ G; h0 d" A3 f0 k. j
  365.     UpdateList1.clear();
    % d8 b# ]6 t4 v# s: Y2 h
  366.   }5 B, B: M5 r  g
  367. }  5 b% e9 t- G+ @
  368.   
    1 a! Y( q# C( {4 l& E
  369. BOOL CRevAppApp::CheckLocalVersion(void)2 N$ S: l3 j6 S3 y4 V; l9 a
  370. {
    5 \' S. D4 h' [2 D1 ]* L; s
  371.   int c;
    " v8 v, I. B$ u! `
  372.   LPUPDATEFILE file1,file2;
    , b1 h( R, y- {: A. R8 o  k. E( p
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    : e+ R! A1 a2 c& E1 T5 H1 H, u5 A
  374.   std::list<CString>::iterator l;
    4 P; Q. h, B& G1 j

  375. : Q2 ]$ [2 L+ F
  376.   UpdateLocal.clear();' P+ Z2 D+ v, V. `+ w; K  @
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
      N* K5 s# e! `! d2 N2 I5 t
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    * B2 P, k4 X( ~3 y" ?
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);" O& ^% Y0 X4 v5 @/ b
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    * S- M5 }6 u! ~9 \4 G
  381.   if(UpdateFile3.size())/ r( e$ i! ^* E# Q
  382.   {
    # a6 I, N; Z) d1 r! \1 J
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)5 y" C0 Y: w! K2 Y- H, Q* W: V. {
  384.     {1 A# {7 j/ A; U- w! B
  385.       file2=(LPUPDATEFILE)(*i).second;
    8 a) e& Y6 D0 z! w2 f
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 e( ?- v9 G% c) v# L
  387.       {1 o! G/ w* N  w/ N. b$ C( ]9 t
  388.         file1=(LPUPDATEFILE)(*p).second;
    " u/ r; {$ q( G/ k6 C# b! k: C
  389.         file1->vers=file2->vers;& f5 [9 s  g# m9 }3 Y
  390.       }/ L4 ]1 r1 M0 L4 n5 J+ |9 J% u( \
  391.       else) N2 [! ]: Z5 Q- y% N$ R3 c
  392.       {
    : \; J( Q/ ^4 _& r1 b  h
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & m, E# x5 C# A8 x
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));+ A( R; h, r- j5 A1 ^7 _
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ q, P: {3 K4 S7 k( W3 Y% _$ Y
  396.       }0 j% u: y0 @' C* W5 E6 Z: N$ _+ x: b
  397.     }
    - t2 z' C- g) R8 Y
  398.   }/ }7 @6 u& o) _7 A
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , ^% o# y& [: _& q1 r  U% h
  400.   {
    " P% G. |6 w) I3 D& s; V
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    " Y" Y6 M8 P" J, B( R$ I
  402.     {
    9 T! U9 h& ~8 J' c+ }! u
  403.       file2=(LPUPDATEFILE)(*i).second;
    ) A" J# q0 x+ o/ ^( E. k) o
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 @% B& `6 h+ m* T6 h' e: z
  405.       {
    " s0 s9 O8 y7 d! {
  406.         file1=(LPUPDATEFILE)(*p).second;
    / h% c* E& N# ~1 H. G9 u" ]
  407.         if(file1->vers!=file2->vers)! `/ q- `7 c" a, l, a" X
  408.         {
    1 w. I# A# T0 V) b2 {
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: P5 B/ Q- R$ J2 x0 Y
  410.           c++;0 ?# t; a0 z& O# u7 ?% |: w- c
  411.         }8 i* X# _6 [% V; V% x. d
  412.       }
    , e" ~! P  t$ u/ m
  413.       else* z, y- [! j: @- R. h) h
  414.       {
      k1 z: o. M# P7 f
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# Y* y8 g! b7 s
  416.         c++;% g4 k, P/ D9 Z; w8 g
  417.       }
      q# w" J$ H/ l: E8 P9 S
  418.     }+ R/ n6 Z7 g: c! L4 u6 y& \. h; L
  419.   }
    : X' u+ i+ m8 D
  420.   unlink(".\\DownLoad\\update.txt");# D, @( k1 J; ?
  421.   if(UpdateLocal.size()) return TRUE;
    & _- X+ P1 _9 \+ o
  422.   else                   return FALSE;
    / _) j$ m% B$ x
  423. }/ M# {/ \5 Q  T4 m2 j

  424. : ^" J1 c% q( T# J
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"% V) F0 ?6 }1 B0 z% E% P2 y+ @
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    4 B- I4 B" y3 H

  427. 2 q8 @* f$ t. B; i9 R" ]

  428. * c5 f6 c, `  D5 Q& |) ]+ n; k

  429. ! W- {, b% O- y( M, r
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 a0 [- B- q0 g. u0 f* O
  431. {
    ' ~# p) T+ S1 I) j5 x/ _& }9 p' s# Z- H
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;- F! u% T% H% i- Y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( Q( S& ~+ w, _: ?9 a% _
  434.   {
    + b8 \) {1 C; J  L
  435.     char szLanguage[50];
    / Y2 A/ E, N& M) X3 B
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 z9 A$ b3 K% v4 R
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 |) @" c; x# `7 S( Y- Y0 U* H
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ s; y: u( Z" [% g0 e5 |" S
  439.     else                                   m_iLanguage=ENGLISH;. |4 l/ R3 u# \6 J% ^2 F  G+ a
  440.     char szRegister[100];" ~9 H' a' i/ O$ i4 V) F8 ~
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' P/ z7 n! H- E9 ]8 P8 I+ h9 W
  442.     strRegsName=szRegister;  J  k' A( e5 ?% t3 O6 \
  443.     char szPatchURL[100];* @* x# I7 s: C$ l5 E8 W
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% K9 x' G& H# N. r5 a& U
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - x# F* A' P' R% R2 Q. E! ^- p
  446.   }( d, S9 E+ I- \( h0 A9 f, M2 e
  447.   else: Y) _! V  q4 P5 S/ x. ?$ @5 `) [' I
  448.   {
    " ^& M, P0 u6 r0 P
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 N: V$ l9 Y3 K" p: l4 d. z; W
  450.     strRegsName=DEFAULT_REG_URL;* J8 f) G  d; y/ T5 U. M
  451.   }' M" X  g# ]: N! `& L
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    - D3 Z2 H6 l; ?) A" w6 j% X
  453.   {# _, L0 @  Y0 V# b
  454.     char szIP[50];
      c! S3 ?' T6 {9 b9 O* x  X1 \1 g
  455.     char szDIR[300];$ X) l0 A: D# ?7 ?
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")); P) s; @& H8 P. a8 M) t
  457.     {
    1 n& m$ D, Z$ z/ Q5 `1 q' C
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");6 C) b2 Y0 f$ ~2 @* e; Y+ w
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
      N6 ^4 G  T$ P, B$ H& Q9 r+ F) p1 Z
  460.       strHostName=szIP;: O4 B# n# c9 c
  461.       strHostPath.Format("/%s",szDIR);, H# M4 v1 a7 p& @1 O& w  R$ k
  462.     }
    ( K7 z8 M5 _) G9 ?. {/ d
  463.     else( m1 s2 h! L* [% B! @% }
  464.     {$ J& Y  I  G; N1 R  Q# p- U+ V
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)5 `4 g$ O9 @) S9 `: g+ K
  466.       {1 h& B8 k. }- J, \" `, L/ @
  467.         char szLanguage[50];' z# x% h2 U# y$ d
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");# F. \2 f$ r5 r* S
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    1 a. o8 e- W+ q. ~$ T: f
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; h% ]6 I# ~+ v# x. O9 M) m
  471.         else                                   m_iLanguage=ENGLISH;
    4 w) v6 u  J: V! c6 x
  472.         char szRegister[100];5 ~- o3 T$ c- s4 G; @, {  `* b6 Q
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  d. }6 z! @- m1 A; C# w
  474.         strRegsName=szRegister;
    9 a5 D; ]5 E% m" E4 C+ y
  475.         char szPatchURL[100];
    * G: k! M" |, `1 b
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) ^+ a' c# f4 }) }
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) Q5 T6 b( w3 P4 A* ~* s4 v8 _! i7 h4 G
  478.       }6 k+ E6 S7 S6 q/ Q2 \: X6 Z
  479.       else
    ; t, K! C. M- i$ \8 ^4 X  V
  480.       {
    3 Y( j- o9 j7 C. k: G* g) p/ Q
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( m% b/ ~  g7 a: y& R; G
  482.         strRegsName=DEFAULT_REG_URL;! S6 ^; J* R' m
  483.       }" o5 \+ C, ]- o  z8 w) j
  484.     }
    ' E" ~% R' ]' N  v9 O
  485.   }
    & \& M  v  A  t: p
  486.   return true;
    $ n, W: v" z4 K( A/ M' E) J! P
  487. }6 n( }# N8 k# i4 w" J2 v3 V( f) l

  488. ! p) k: s$ J% ]! G5 v
  489. #include ".\ZLib\unzip.h"
    - _) M5 B$ w. p" P( z0 I# O0 X& N' ?
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);) k- j- ?6 T4 \9 v- [$ ?
  491. ////////////////////////////////////////////////////////////////////////////// d4 H# J+ Q9 {( G% F
  492. // CRevAppApp initialization9 A6 b6 {- j# E
  493. 2 R3 H& Q" D" M; j6 {' \
  494. BOOL CRevAppApp::InitInstance()7 |3 B3 u  P$ Z$ g! y/ w( X" y0 w
  495. {
    8 H; t/ V0 I8 f
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];) e$ }  i# h+ m7 p' G  T( Y0 R

  497. 0 a! c* f( J, f% b& s
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    - D' U. p# h% R) r4 s# }6 l* ^4 s
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ' p9 S. Q; u& _) M
  500.   {
    # ?& f; h0 y) c" z/ F3 i
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    - X! F: @$ K; O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    " }# S8 m% w1 C8 a' Q9 u8 W9 S
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))  D8 q9 K" H* @; s+ I3 ]9 d
  504.     {( |4 S8 `3 h" X4 t
  505.       strcpy(szPath,szPathTarget);9 w5 f/ `( G0 Q
  506.       SetCurrentDirectory(szPath);9 J$ k2 b# i+ O( J
  507.     }7 X3 g4 c% y* J7 J6 {! m
  508.   }
    & B3 R- I6 B/ y1 w; I
  509. #ifdef _DEBUG
    ( ?+ c1 z/ d: \+ U1 T. g
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" ~2 K% d, C2 ?  S0 Z
  511. #else
    9 H4 F! o6 ]6 z1 r/ V' A
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 h# [' v! `* I' c" [
  513. #endif0 c$ x6 R. n  \( g7 u" Q/ h
  514.   {
    3 g# \- C+ l/ k7 I# H8 U+ Q5 G: Y
  515.     char tempFileName[MAX_PATH];, x( f: G; U* l2 F6 [, A' Z
  516.     strcpy(tempFileName,szPathSource);4 }- V2 M7 V) U2 }% Y
  517.     tempFileName[strlen(szPathSource)-12]=0;* L! E5 F) p- t% [( K& N
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    # v$ ]; O) V" E$ a
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);9 ~* {. _5 B, P7 S1 M" V' i
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    + P' d% c! ?/ ^% V
  521.     return TRUE;7 O8 C# |2 ]  g) l8 p$ _& d3 I
  522.   }
    : r/ S" t1 o' X2 s# `3 V/ Y
  523.   // Nuke 0118: Delete run.exe3 U5 F: {3 |7 i% c4 N
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    & p" F3 `& e  d# I. L
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    , |9 U' I/ u& D. E! J* T! n( ]
  526.   if(!ReadCfgFile("Config.ini"))
    + A  Q6 @4 ?! d9 A
  527.   {& k" K* Y+ ?2 ?+ A+ d, ]* n. ]. n& B
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);  Y7 s, u- [" I5 V
  529.     return TRUE;
    7 l$ R+ E, z2 V* I% X
  530.   }4 l! w0 O$ r" J6 c5 A# K5 H! `
  531.   HANDLE mutex;
    2 X; u2 k3 h9 w4 J7 @  m+ r
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")): a" ^9 W1 [, _& k0 \) A0 Z
  533.   {
    - E, M; T8 l4 a9 C  W9 P
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    & a7 M: @9 h" L5 F/ ]
  535.     {' v! l9 C& ^* ]! o- o- Z
  536.       CloseHandle(mutex);' }- y; f( U8 Z) J2 M+ w) s
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    1 q- K2 t1 U: k  x# V
  538.       return TRUE;2 S0 \8 o- Y8 q
  539.     }
      Z: w; z$ ?- E/ V& C" v' w
  540.   }  
    & }- N) u& r$ d* m: G
  541.   CloseHandle(mutex);: k0 k3 x, \8 i) b7 x

  542. $ {& f6 m; E5 k7 f2 N5 P0 |
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);* E0 a. i3 E) F% |
  544. ; t9 L# B' n& `
  545.         AfxEnableControlContainer();7 ~2 B; C3 m6 R  N: J! z

  546. , H( @' l+ b! u; @
  547.   bCanUpdate=FALSE;, U! V/ V* ~2 k
  548.   dwStartUpSteps=1;" P2 B. k! T$ G* g# K. j$ }
  549.   dwProgramState=AP_NOTHING;" a) [" \* \6 @9 `, S! n2 P0 I
  550. 7 C- M& {2 L* N& l" |' [6 d
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    % {) ^2 c" f  h! a' F9 ^8 Z
  552. . q3 u# F, q+ y5 P2 t; L5 a5 {
  553.         // Standard initialization4 \* v5 O8 l4 S* R# J
  554.         // If you are not using these features and wish to reduce the size! i2 a5 G7 X( L/ W
  555.         //  of your final executable, you should remove from the following
      K% T! ?) t( b. A3 _
  556.         //  the specific initialization routines you do not need.
    ! z: V; F" Y$ ~3 X
  557. 9 d. h- `; b0 V8 R* ?1 A
  558. #ifdef _AFXDLL
    6 m2 E6 r1 F8 W& a" l. f1 W) U
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    % {9 \/ U& \% p& C& h" ]
  560. #else
    8 r7 ?! U' t; I$ k+ H9 B0 u8 F
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    7 H7 c3 @% P! f+ _8 R) {1 B, [6 s
  562. #endif
    % P0 s: X: l7 @9 O- R6 a* ~

  563. / m2 O4 J% e8 |" ?/ N, I5 l6 ~
  564.   dlg=new CRevAppDlg;, w2 I1 ~' Z, u5 i  \% ?
  565.   dlg->Create(IDD_REVAPP_DIALOG);- h8 N) u' M3 F
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    0 R/ N$ m) O+ i1 L# Q/ @% R% z
  567.   m_pMainWnd=dlg;
    / `' c7 w9 j" u2 [0 i8 _$ m% D
  568. & |7 {) N4 c8 q3 T3 K, @& k, H
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    / Q/ i3 o3 {1 Q! g9 E; _% n

  570. 1 N1 G* j9 \& J3 F  F5 ]  }/ S
  571. //  GdiplusStartupInput gdiplusStartupInput;# s6 ?5 k1 }$ }/ F
  572. //  ULONG_PTR gdiplusToken;9 u; e% ]5 _/ u2 S
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    0 `4 y, q: G- W" x% l5 b# o9 Y
  574. * q+ L6 I- b) d$ X- [6 N! Z
  575. //        CRevAppDlg dlg;
    3 z# _2 t/ ]& M
  576. //        int nResponse = dlg.DoModal();
    0 Y: T, ~+ P& H8 |# Y8 k3 V
  577. //        if (nResponse == IDOK)
    * G) x- O+ I9 @* r7 g. l
  578. //        {# l9 I- k3 q" N% G1 I* |
  579. //                // TODO: Place code here to handle when the dialog is' J. D& Y4 Z0 J4 a' ]
  580. //                //  dismissed with OK
    $ F: A( N0 Q8 v' R
  581. //        }
    * L8 P2 Q, ]5 D& W
  582. //        else if (nResponse == IDCANCEL)8 L: Z" b' V+ m. g
  583. //        {9 Q! {& R2 x2 m5 }- y
  584. //                // TODO: Place code here to handle when the dialog is
    & l: k* p; R5 x" @( Z3 c; }" n! `
  585. //                //  dismissed with Cancel
    + U! b. a  e8 O& c' U1 T
  586. //        }
    ( A; I6 W; A: N5 [2 ]
  587. ' V3 N* [* m$ G- |% d6 e
  588.         // Since the dialog has been closed, return FALSE so that we exit the; m2 F' G. a) s9 ]' m6 Z
  589.         //  application, rather than start the application's message pump.* O! B6 Q5 e& ^* A) m
  590.         return TRUE;
    2 Q  C$ j0 ~, n( [
  591. }- t& I) H' t& w; q6 T; `
  592. + z1 L% e1 E1 }' N8 ], f- M
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    2 O) l. {- b: _& Q* f
  594. {
    * l/ i* c$ e; i# C# j
  595.   int i;
    & v6 r8 G; w2 c1 a9 F! ]+ _
  596.   char *szRet;
    ( t6 [( ]8 V$ G' A

  597. , F+ L8 ~' q0 b0 V8 C$ d) N
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    1 }! w9 g+ w' c- t' V  f
  599.   if(sztoken)+ ^$ ~8 g/ O8 {4 k3 C
  600.   {
    + P" `# r$ T! i
  601.     szRet=&sztoken[itoken];
    9 i& c2 \; `9 @' l5 E" W
  602.     while(sztoken[itoken]): g. [: |# r% D5 X
  603.     {& a9 ^! \% q  y
  604.       for(i=0;i<(int)strlen(token);i++)2 l, |) L- r! P  `: w- G
  605.       {
    0 F& r1 T9 H; [
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    1 {6 d) Q6 ?; T( |2 w# ]4 j
  607.         {/ E7 r' V8 `" A" X
  608.           sztoken[itoken++]=0;
    3 O7 L: y* J2 T9 ]5 g1 ~
  609.           sztoken[itoken++]=0;( ?* u  E/ X+ g3 X5 O
  610.           return szRet;
    * {0 f  _# `- d& s; Y! n
  611.         }4 G4 o+ ?1 l! G
  612.       }$ ~8 j) s# G2 Q! i. }
  613.       itoken++;* o& T& b. o. ^/ Q+ A/ E
  614.     }
    " j! H5 s. t" E. `8 j. E4 s; O
  615.   }2 D: ~- c4 J! s
  616.   return NULL;$ d( P2 y# E8 a& G" I# O; H- J
  617. }! d0 _+ _% i4 B, p5 r( w
  618. 6 `: C" m$ G3 E8 D$ z
  619. void ProcessProc(long Total,long Current)
    0 Y! E0 z# V( I, u1 |0 b
  620. {0 W! z9 K4 @; H( L
  621.         MSG msg;
    ( j$ g1 B4 m. q: d& m7 h$ [- Z" |
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);5 u5 a$ @* ?9 y) T) ]
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    $ ?0 b( {+ b6 \4 U) P2 \: W1 o0 D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 H7 B) Q0 \/ `2 H" s3 s# `8 l0 M
  625.         {5 k3 g' i3 [7 {. T  X( ?
  626.                 if(!GetMessage(&msg,NULL,0,0))
    7 s! h% q- r+ W" G3 T
  627.                 {4 C9 {" p" p; T/ g* W! ^
  628.                         return;
    ' Q1 N6 {& ^; E+ r6 u( {+ x
  629.                 }
    . Z) Q" l4 [) H
  630.                 TranslateMessage(&msg);* U+ s9 a* d7 m6 q  x) G' Y
  631.                 DispatchMessage(&msg);3 X, U" i; P& M5 Y0 K" }
  632.         }       
    " J. W- e# B0 ?: S" s% k  i
  633. }
    * u! u6 r: Z5 U- p
  634. , W6 f" I* `/ g4 k6 z3 L8 o5 Y
  635. BOOL bFirstChar=TRUE;
    . e7 D; B2 p+ X. @

  636. 4 x6 f0 K' l1 w, D
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    4 X% z3 Z# K! i: P) C* N1 H7 J5 Z/ O
  638. {' r9 }% b7 v8 }) K: Z9 B  ?, d
  639.         // TODO: Add your specialized code here and/or call the base class6 t( u9 Q1 W$ C: }
  640.   switch(dwProgramState). O0 y' }) o0 F( u
  641.   {' x) ]$ a: ?$ H
  642.   case AP_NOTHING:3 ^7 J0 V; p1 {& j
  643.     switch(dwStartUpSteps)- ?' ]9 ^0 o* a6 ?6 w
  644.     {; Y' e4 g; I- w' Z) q1 ?- o
  645.     case 1:) N5 g: d; h. _
  646.       {& R, V+ O7 n( v, W# A6 D3 [8 v- P" I0 y
  647.         int i;
    4 a* k3 K; u, d
  648.         CDC *pCDC=dlg->GetDC();
    7 a& e  k$ E9 m/ o
  649.         HDC hdcwnd=pCDC->m_hDC;
    $ b9 H( y6 W: c
  650. //        Graphics graphics(hdcwnd);
    % c- x* }* f0 _3 x
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");8 [* D+ h: F, J! W, [
  652. //        INT iWidth=bitmap.GetWidth();
    7 B% M+ k" Q( O3 `  C* Y! h
  653. //        INT iHeight=bitmap.GetHeight();) J. v) P; m, H6 w" S
  654. //        Color color,colorTemp;: m0 O* H% c# L" {- I6 S
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ' d* E/ \* G" a# t$ p9 e
  656. //        {& T/ x3 @6 ^/ z, B, ], c3 ?2 [
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    9 P8 ~4 |0 G2 Z% h% k# W8 J
  658. //          {) e6 d5 @* P3 i6 {# Q
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    , d" }# D5 @0 E) j/ @
  660. //            colorTemp.SetValue(color.MakeARGB(
    ' B% @% K. f& U1 l" N
  661. //              (BYTE)(255*iColumn/iWidth),: [2 d$ o  v5 N  b
  662. //              color.GetRed(),
    ; g- t9 H; m5 Z- ]
  663. //              color.GetGreen(),# T; }/ }9 N* v: J+ V5 S) b" H% n. W
  664. //              color.GetBlue()));
    6 \% s& W6 D, A7 L" u
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);1 n: ]- u; U; @
  666. //          }
    3 q0 R4 K3 C8 b+ h/ `' i& ^2 c0 r
  667. //        }/ W  S+ }9 C5 u$ o, P2 n
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);, G" c6 C2 E5 P5 ^
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) T+ g4 S4 P; s5 B( Q8 c) u/ A
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
      @+ e9 Z9 _0 s3 N9 I% x
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");) o  |  K) ]% H3 I7 p' `
  672.         for(i=0;i<240;i+=8)0 s6 x7 v+ M" Q# |$ b# x
  673.         {
    8 ?9 s( ]6 w" z& n* A. y' i
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 g& Q1 o& u) G. A8 w( M
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" N  q: X8 x, D) e
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      V6 v" ]7 }0 _2 c
  677.           Sleep(33);
    ' M4 R( w' U$ e& v
  678.         }
    4 ^7 f$ o" S3 e; X9 ?9 R# N2 M  F9 w
  679.         Sleep(1000);
    , x7 t+ r2 p9 f4 E7 v( w) k* Y7 m' a6 K
  680.         for(i=240;i>0;i-=8)
    1 M1 B$ Y' x% }" j9 z0 n( e
  681.         {1 H! m- r1 T' X& ?: L: }# m9 [  v
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ P0 J/ \) M# v3 o
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( M+ o; b- ^4 t# Z, o
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; {; a5 M! K2 l6 Q% U" F6 H' Q/ C
  685.           Sleep(33);
    - b9 T4 W; R& C* R
  686.         }
    . I$ e3 J! a) M4 P6 W  r
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ; `# \6 D  C7 A# {' R, F
  688.         dlg->ReleaseDC(pCDC);5 O  [( B. }" w% ^, J! E
  689.         DeleteDC(hdctar);7 ~, T2 U6 C( V. J$ R
  690.         DeleteDC(hdcsrc);
    ( d( p# [8 `! m+ j: G* d9 ?
  691.         DeleteDC(hdcorg);9 a8 [  a& e; B$ }/ ]3 U
  692.       }1 P1 t) O3 {# T3 O, U
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);* M$ d3 X1 m- z* ]- t
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");7 }/ o6 S: W& g" P& G' _/ M
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    7 X: p- d, q6 l1 G- s
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");: K* q! @! U+ v2 E8 g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 M  k! k, p2 P( n; G1 x% Z
  698.       if(!Dn.Connected())
    ( f9 b/ n8 H$ z
  699.       {
    8 N0 z5 D6 f- \4 D2 y1 |& u8 T
  700.         dwTotalFiles=1;$ Z8 s1 n% g  o! N. q% ]+ Z# U2 A
  701.         dwDownLoaded=0;7 {2 R+ p! S" Z2 l
  702.         bSilentStep=TRUE;) p) \  f+ g( p+ G" H% B/ r- U
  703.         bCompressed=FALSE;
    % L$ g8 a, s0 i. m
  704.         strExtLocal.Empty();( J; u4 v  |; I5 a) a
  705.         strFullName="readme.txt";% {  S+ o, {! E
  706.         dwProgramState=AP_CONNECT;6 G. a  q. z  o8 k
  707.       }
    8 b9 `9 |) X  M: @
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();% P5 l5 A  ^8 `3 p. N' m" j
  709.       dwStartUpSteps=2;
    & Y6 i4 g# ^$ i' o" G  ]
  710.       break;9 l$ s& w# t7 J
  711.     case 2:
    9 h9 I1 W1 g* y; a" k) c
  712.       {: P8 q  B# y( W! D0 u+ s. o
  713.         int iEOF;
    ' H. T% W9 x  J$ y* t/ ]
  714.         FILE *fp;: ^6 p. k6 |0 W& B5 z* X, {3 {
  715.         char szString[512];
    8 f0 p# L' b* M! h1 ~! ]' c$ s
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ( ]7 i  G+ S6 c
  717.         if(fp)
    * H2 [" }) Z# ~# k
  718.         {; x6 K* S, A! M* H$ x# S/ J8 p
  719.           do: S) f  G$ |( b2 o( T
  720.           {
    . J7 X5 [$ Z7 A2 r( s
  721.             iEOF=fscanf(fp,"%s",szString);
    0 l# u) j6 l6 u( d! K
  722.             if(strlen(szString))( Y* F  I7 T0 O1 \/ U2 z
  723.             {( \6 q7 H/ j% ~' V" l* }
  724.               if(bFirstChar)1 f4 [" e. }5 I, O* X$ o2 {2 O
  725.               {, D  v2 s. K) ?( K' t' e# z% ~
  726.                 bFirstChar=FALSE;
    7 l8 Q$ L$ H: N# Y) T
  727.                 bConnectIsBig5=FALSE;
    + C) M5 V/ n; F; H
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;+ `5 F2 @1 k1 u1 X* }0 U) }
  729.               }! |- }! B: L* f
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ' z; p& B" Y9 r1 S1 o
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));: I0 q" u7 U( a' v5 {
  732.               dlg->m_ListText.AddString(szString);2 q& T' w" l6 U. j6 b1 U! C
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 V: l* O7 q% f4 l2 _2 ]# q
  734.               *szString=0;
    - \& Q+ l: H$ q+ a$ A$ x& h1 F( F0 O
  735.             }
    8 O( f  W8 _$ W. {# I; s
  736.           } while(iEOF!=EOF);2 R- ~+ h4 B1 t; \+ R6 s" j
  737.           fclose(fp);$ n( @. h3 l0 p  Z3 v
  738.           unlink(".\\DownLoad\\readme.txt");
      R9 t  Q+ \& e9 g8 v- y8 }" b; ]
  739.           dwStartUpSteps=3;
    1 v; P6 }$ Y: y. ]5 L
  740.         }
    / ]! I' U# m' Q& e
  741.       }
    $ L9 e3 _' ?, H5 s4 J
  742.       break;' p0 p, f* `# o- S; L* a
  743.     case 3:
    5 M# O% b5 ~  |' L' p; I1 p
  744.       if(!Dn.Connected())7 Q' U( G2 F6 v% a' _( T3 k4 j" e6 ]
  745.       {0 D! V: \0 @, e: V. p/ [6 k/ c6 D
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    6 V8 E0 m' p- K! |, C) B
  747.         dwTotalFiles=1;* n0 y, E/ J- e; [  P. ^- `5 U
  748.         dwDownLoaded=0;
    9 @9 u. Q- c- g5 f0 s+ M3 z
  749.         bSilentStep=TRUE;0 X7 Q+ ?4 O8 H7 l$ c% {6 D
  750.         bCompressed=FALSE;
    ) V; N7 E. N. e, L' b
  751.         strExtLocal.Empty();3 z, k% X, E4 f9 k7 {
  752.         strFullName="checkversion.txt";
    + Y+ U7 y1 a0 B0 P
  753.         dwProgramState=AP_CONNECT;
    0 q/ ?4 ~& D7 B* ~
  754.       }
    & q1 A  y7 O, T( a) K* J, Q
  755.       dwStartUpSteps=4;- \0 m# J  i; m4 m6 R5 Q. n
  756.       break;! {: E8 q5 Q. t
  757.     case 4:
    3 _; a& T2 f1 V- [$ y
  758.       {* P; r) N3 @; g- |: u) {
  759.         FILE *fp;
    ; w- C+ w( D9 r! q+ v
  760.         char szString1[128];
    : y5 x7 |- G: C7 c5 r6 s" h
  761.         char szString2[128];
    6 `* D# f7 Y/ Y4 K5 s2 R
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");7 J* b, D9 q" I/ E$ A
  763.         if(fp)1 W$ L( I* k  \& |. o+ W4 G
  764.         {
    * Y( Z9 m+ C0 k
  765.           fscanf(fp,"%s",szString1);
    3 e( G, ?, s( @# n/ r: G% A9 t' Z. Y
  766.           fclose(fp);3 R8 d0 R5 I' x- H
  767.           fCheckVersion=atof(szString1);
    1 E/ m  Z: l1 P9 N; k! L
  768.           fp=fopen(".\\checkversion.dat","r");
    6 T, F7 V1 N* N3 t
  769.           if(fp), r/ M3 E" }/ V. Q
  770.           {" v5 X/ K. I7 t& D" M
  771.             fscanf(fp,"%s",szString2);
    . L& A# R- ^; ^3 t9 i- S
  772.             fclose(fp);
    # R# R% i$ p$ S" R# Z
  773.             if(atof(szString1)!=atof(szString2))4 h' M1 j) F, ^0 B, \
  774.             {
    ! n& m) F1 K* d/ N5 U7 a
  775.               if(!Dn.Connected())
    ; |* E2 L* o) O0 g! M5 r$ B2 ?
  776.               {
    8 j; E: }; j+ _+ t/ G! `- w
  777.                 bFirstUpdate=TRUE;
    ; s4 M, y9 i. }: T
  778.                 dwTotalFiles=1;
    . c' ], L9 e1 Z
  779.                 dwDownLoaded=0;
    1 W9 j0 n" {& r
  780.                 bSilentStep=FALSE;# Z2 j- _! t( X( K4 M: t3 ]2 P2 g
  781.                 bCompressed=TRUE;! ?3 B! K; A7 M; T0 C
  782.                 strExtLocal=".\\DownLoad\";
    8 M) b4 ~. Q3 B$ ^
  783.                 strFullName="update.txt";
    , L7 C* z/ F( O3 N8 `9 j) @
  784.                 dwProgramState=AP_CONNECT;
    9 f$ U; d+ o; P, y" J0 t% ?
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ r% E% s2 m" U) V% h
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 t* r! S$ ~/ f% O# Q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % Y$ Z1 V; m, Q! G, \7 x7 Q

  788. $ J( _$ y- y/ G; Y$ k4 @5 c+ i
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " P- j+ P/ j' P' l: H+ }* A
  790.                 unlink(".\\DownLoad\\checkversion.txt");8 k( F5 L# k4 b; V* b2 s% ]
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    0 C  ~( J/ O1 }% Z' {& f
  792.                 {
    % W. M! t5 u) e- w. B5 _
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
      ~& I$ e) w8 {, D8 Q3 c
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    $ Q4 F2 w7 t0 W" Q$ t2 P  x% v7 F
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");3 j0 n3 n4 y: n, _% n" N
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 x" S& a) x/ E7 i2 I
  797. % l, l- j$ U& `, Z% c  f1 Y/ @, N) U3 p9 o- h
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, s  D6 o4 c5 Z9 U) y  n* x2 Z
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    3 Z( a9 L# R) g) F4 W  O
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 M  ]$ H* l- o( i! u- t( b7 S
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , B. ~8 C4 B8 l9 k7 D
  802.                 }
      D# y$ Y" _8 [2 u
  803.                 dwStartUpSteps=5;
    * I. f: S5 U' q5 y, f
  804.               }
    3 ?+ E2 @: ]9 o
  805.             }
    3 D/ r( b1 H5 d: R, C: g" m
  806.             else* g/ m; @) w6 ]& m9 J( {
  807.             {
    ; n5 x: R5 h$ b- b0 D0 y
  808.               unlink(".\\DownLoad\\checkversion.txt");2 L% V2 f5 O# Y5 @
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    . {! F# M1 F0 |: p% Q1 C$ Q% g) f
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");, k5 j/ }$ S( w( O
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    1 T3 Y0 T8 `; @3 g& N9 A$ F! t6 h
  812. 3 C! X) h: o( t
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" j1 f9 ~7 ?) Q/ F
  814.               dwStartUpSteps=99;1 `* ?7 X( K% ?9 T0 u* T; O' N$ Q
  815.               bFinishUpdated=TRUE;
    / Y( A! ?! a9 k- m8 o* q9 Y  T
  816.               bCanUpdate=TRUE;
    + T, w; _' q/ O8 V" e- P
  817.             }4 l$ [; U6 J  O  y' c. K
  818.           }& T# }* T5 x/ S9 l( d2 `
  819.           else& H7 ^# |' R& V1 |; z# H4 @
  820.           {
    - t/ Q/ M/ d7 M+ M6 U
  821.             if(!Dn.Connected())% z+ L  L, d) o. `
  822.             {" Y1 P) H" E7 n  l/ d$ {
  823.               bFirstUpdate=TRUE;* ]( r9 X/ X' e8 D' n% O  }) d
  824.               dwTotalFiles=1;3 g  |+ [% H3 {! f# V$ B
  825.               dwDownLoaded=0;
    9 t4 o2 T6 X2 l7 O$ f
  826.               bSilentStep=FALSE;! m) z% H0 C( c& Z0 e$ q3 C
  827.               bCompressed=TRUE;
    4 N9 q5 p9 e$ u0 g! [$ x
  828.               strExtLocal=".\\DownLoad\";* @3 }3 S9 W+ v  J9 M
  829.               strFullName="update.txt";, ]3 g9 E' Z  s$ d- u7 B
  830.               dwProgramState=AP_CONNECT;
    + @( |+ x: c' o
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 l6 ~) C+ H( L, ]7 k9 W6 S- `
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; \4 S% i3 P* m# ]: |/ A
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , b* |$ e9 y/ F9 W. V6 c1 V
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 T5 b$ c1 C& r2 }
  835.               unlink(".\\DownLoad\\checkversion.txt");3 P3 b5 k  d2 j2 T  g7 _2 g
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)+ R# Z/ |% w2 ?. L0 o6 C0 f7 S- j
  837.               {
    ; h2 E: n& L" q% b3 w; y9 ~7 X; I
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");6 f1 P2 I- a; P' I/ g" G" O" Q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");' w5 B6 }; D: T/ f8 f% i( [
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");) V4 b' T$ y2 T  s/ t: m
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' x% f; u1 L) l' z% {
  842.                
    / K6 v6 I5 l3 G9 g  k
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 e3 T8 ]6 y3 b+ ?7 o  N) e; ?) z
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 H# r0 B$ h# `2 e% G
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( T$ N) A, h) U/ K/ A" ~
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 ^. l1 C- |# F3 F9 ~
  847.               }7 T& |5 |3 R, ^% V
  848.               dwStartUpSteps=5;3 g& a1 {( b1 R: V6 {# V
  849.             }' {+ Z, R7 i/ m0 s4 H3 C
  850.           }
    8 M' u" ^, H9 l& a
  851.         }
    / D" c" P( v' h) ^
  852.         else2 t  O1 j$ s" S) O# b
  853.         {% I% G, }* Q' x
  854.           dwStartUpSteps=3;
    . }2 N! U  }: r. Y9 Z, ?
  855.         }
    6 i# L% ~9 n/ C, M6 ?
  856.       }6 [+ A% w. |+ W) S" ?# z( P( ]& D
  857.       break;
    8 |1 }+ E: @6 e* j
  858.     case 5:. r4 W4 M7 [" ]% A) ]
  859.       {7 R  u1 }! a" B- G9 V
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)6 J. l2 l! W: _' n, f. @+ x( g0 [
  861.         {
    " u, F4 W4 h  H; h
  862.           int opt_overwrite=1;
    5 d/ ]; g* I, \1 z2 u
  863.           int opt_do_extract_withoutpath=0;7 N3 H9 V7 g/ q' B
  864.           unzFile uf=NULL;' p6 E, I# E/ A' y& ?( J* p5 p
  865. 7 h# q6 z0 }) b% N' ^$ _! V3 z% g
  866.           uf=unzOpen("Wsa.zip");
    1 X2 R( q2 x$ I- @
  867.           if(uf)
    5 o0 A* E6 [4 U0 {1 ^
  868.           {  B2 l4 T! e2 C8 ~9 O2 B+ ?4 ?
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    9 {1 Z0 D3 u- C4 @1 ?. u# S' `
  870.             unzClose(uf);0 _2 v5 f/ c& [6 K/ @
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    9 A' \+ t# [8 V2 p# P) d, A6 C; a
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");, |# G2 t0 o2 E  p; `$ H6 A
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");0 E/ ?  s( E- o% Q
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 x- T- r* B, N" ?
  875.           }$ f9 T/ S: O# f1 g9 y( {3 @: H
  876.           DeleteFile("Wsa.zip" );
    8 L( K: z; F  g- v7 e& V$ Q
  877.         }
    & x7 X9 P1 p/ X7 }& t4 K+ V

  878. ; ^9 ?+ l/ `7 s/ E, @3 g6 `
  879.         if(CheckLocalVersion())
    $ l7 F: Q( t' Z) K! a
  880.         {1 ^6 P9 d$ I: d6 b' s5 N
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");4 W" J6 k2 P! m" G) i5 n1 |
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ! i& N9 q! z! d# n  G& X
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    9 X- R2 n2 h7 c6 y* D; e
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; [) R  r3 y/ M8 E" G0 _3 _5 e
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    + x# O; {* ^) P6 E" s/ d+ k
  886.           dwStartUpSteps=99;5 |0 i& W$ l( s
  887.         }# `- c" m0 J1 w1 S
  888.         else
    % q# v: Y$ i. L9 O$ U* R; y# ^
  889.         {
    0 }' o: n: P4 o% p
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 ~9 z4 |3 V$ p9 ?4 q
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    7 ]3 o4 w! N2 Q2 h* r
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 f6 n$ i0 b: u( }

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-18 02:09

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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