CSUpdate.exe源代码

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

* ~) j( h, x7 g; A+ y* l
  1. / RevApp.cpp : Defines the class behaviors for the application.
    / x  F' s1 `+ D' L0 q. B" T, r" a- p
  2. //
    ( `9 {/ s5 l; `8 ~; x8 e

  3. # _6 s: T& n2 R# B1 A
  4. #include "stdafx.h"1 r# @4 E3 i0 D9 t. {

  5. " c3 U! }. T& m8 m
  6. //#define UNICODE5 Y3 f' K0 |+ ]8 J) w; _' G. L
  7. //#include <gdiplus.h>
    ! [1 ~/ }2 c$ i: {  j
  8. //using namespace Gdiplus;
    % E' c$ G& G" c$ I" |

  9. ' e0 D. o* Q2 O" b
  10. #include "RevApp.h"
    $ [. |  g6 F& w
  11. #include "RevAppDlg.h"
    . J/ y# `3 L% {8 }. q

  12. " K& B' E; B) E% S! @# q7 u7 o
  13. #pragma warning(disable:4786)
    8 c. Z6 i: E" K; ]& C0 m
  14. #include <map>
    4 q/ C% y% S+ a( H( k7 R7 y( U, R' x
  15. #include <list>
    / g# V8 L) Y6 B  Z0 ^' O
  16. #include <direct.h>
    1 h3 y1 s: x3 T+ T

  17. 2 A+ N0 E0 j  t  c
  18. #ifdef _DEBUG
    ( e- N0 e0 k; o' R5 Y6 n3 M
  19. #define new DEBUG_NEW
    $ v9 u5 |  E: X3 z$ {
  20. #undef THIS_FILE0 j3 h6 o+ a1 R, O8 E. e6 |2 W/ K
  21. static char THIS_FILE[] = __FILE__;
    " r( T1 ]4 Z( n4 J
  22. #endif/ G) E1 S% c$ E+ \& j9 `
  23. #include "SkinResDef.h"
    9 }) @$ l' o  i, H1 L' q
  24. #include "ChangeBG.h"  |, e+ Z4 M" J  ?4 v
  25. #include "AFXINET.H"
    5 C, L4 T7 p. U$ u

  26. 8 Z0 s) ~* e+ M( W$ g) S
  27. #define TRADITIONAL_CHINESE 0
    ( u2 p5 T/ N' ?& c5 l2 D  _
  28. #define SIMPLIFY_CHINESE 1
    5 O; g, ^9 z1 p- h5 k( |. N, r% b
  29. #define ENGLISH 2
    2 C1 o# B- B/ I6 v- @2 d! L  v% P( \; ^
  30. int m_iLanguage = ENGLISH;
    + _. Y" r0 Y5 h! ^6 d: G$ y1 r# B# J
  31. /////////////////////////////////////////////////////////////////////////////4 }+ F  I7 g0 w6 V" h& i
  32. // CRevAppApp7 ]& y; V- T3 z% {
  33. + i& B! _2 z% {2 _5 w8 g3 K
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)* i. m& @+ P2 ]3 Z$ Y
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    1 L3 N. X% F. j. R1 t. E5 Y
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    + \) G7 p2 L. ^8 O; r" r
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!& Y9 ?6 w& o; {7 m+ n
  38.         //}}AFX_MSG
    0 z# J! Y+ B; }, o; T$ }# L
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)1 s# H! Z5 a0 [+ x6 j% g
  40. END_MESSAGE_MAP()
    1 p' e: Y5 [" Q$ \" }, Z
  41. . s6 D8 B, h  c% O- H3 {
  42. /////////////////////////////////////////////////////////////////////////////6 v% @' R9 n  T; v7 r5 Y) e
  43. // CRevAppApp construction
    . v" d3 @. Z3 Z" p3 U
  44. 6 D% Y( v" U8 W
  45. CRevAppApp::CRevAppApp()
    2 |) n1 I( }& M
  46. {
    ) t' ]# `- V! Y/ e# Q: c/ v
  47.         // TODO: add construction code here,
    ( U. M' \' ]4 t' l) r" S; {
  48.         // Place all significant initialization in InitInstance0 |/ L" k0 x* E8 d5 o7 P- M# b
  49.   bDisplayIsBig5=FALSE;! W1 P7 ^! y3 |! b. Z, N* c
  50.   bRestartUpdater=FALSE;
      g3 G( p& Z$ f( U
  51.   bFinishUpdated=FALSE;
    0 x7 U! ]# D4 \" Q/ A1 j6 d  A
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    7 \* C# A) V. O0 m+ |. Q: ^3 |
  53.   InitChangeDataBig52GBKS();3 W  p1 w# G1 Y6 H2 m7 O
  54.   InitChangeDataGBKS2Big5();: w0 D, O1 ~- ^$ L5 {9 U0 q
  55.         //7 ~+ v- C1 ?* g! N6 h
  56.         bClickRunExe = FALSE;
    2 q5 l& t3 |+ ^; L$ H+ q  U
  57.         //' p; k& [3 _' z# h: S' z* T5 {+ f+ }
  58. }
    7 U7 u, d3 E0 U/ C! ^

  59. 0 k/ D+ K$ `  s7 ], W
  60. CRevAppApp::~CRevAppApp()
    # w- g3 A" z# {' [5 f5 O- t
  61. {
      A8 m5 t0 t- G6 ]) Y
  62.         // TODO: add construction code here,! e6 e+ K) |: j5 v/ t* C2 ~
  63.         // Place all significant initialization in InitInstance% [3 ^8 h4 ]' Z
  64.   EndChangeData();
    2 }' y) t  }+ b! s; I5 W$ d
  65. }# m* I% r/ }1 y7 |
  66. / X" c. c2 S1 ?+ g8 H0 N
  67. /////////////////////////////////////////////////////////////////////////////
    & H# T2 Z# R6 m7 A+ d9 y
  68. // The one and only CRevAppApp object
    6 G( I- J! L# Q' o3 r" z
  69. - e0 z% p* E1 O6 q* O
  70. CRevAppApp theApp;
    1 R* R" x0 L: O# k! _" t0 A
  71. 8 V! b5 I% {/ q4 D' s7 G
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ! J! O2 Q! {; O* q
  73. {" o: b) n8 j2 V) |6 F* @- A
  74.   int iEOF=0;
    ( G' w, @7 i# S3 M7 j, O9 d$ p
  75.   char szTempName[MAX_PATH];
    " e1 O9 D- g2 a/ @
  76.   *szFileName=0;) |# I3 M. ]9 E& p0 M
  77.   iEOF=fscanf(fp,"%s",szTempName);
    9 }" R* F( S+ Z3 a  @$ N8 D
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')# D" i4 U+ r. B4 Y# a% ~/ h
  79.   {7 F! c8 @9 l! K) r5 P* i
  80.     strcpy(szFileName,&szTempName[1]);
    2 l) }" N" K& B+ T& ]4 g
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)$ s+ ]/ a7 }6 `/ K$ {) j! B# v
  82.     {
    ( [# I0 s; c* n: T" V+ g
  83.       iEOF=fscanf(fp,"%s",szTempName);2 V1 P& n0 J- a; e1 J
  84.       strcat(szFileName," ");: \5 M- T% o8 B1 j: _# w+ s
  85.       strcat(szFileName,szTempName);! T$ C! g0 N1 P" I# h: L: q  G
  86.     }
    & j6 u" @4 L6 x& x3 f. D
  87.     if(strlen(szFileName)>=1)
    * s5 F  r4 X: f% k. @
  88.     {
    & ?. ]4 ]$ B# ~9 b# U- l
  89.       szFileName[strlen(szFileName)-1]=0;
    + s6 B9 N# O+ Z
  90.     }" o/ @" Z- v* S# k
  91.   }& t# l/ H0 B; r( `* z3 c5 v- t9 q
  92.   return szFileName;
    * J6 ^- b% X6 f" C" U1 t
  93. }1 \$ ~% n+ D0 D( ]+ }$ q

  94. 9 V4 {  c" E/ i* n$ p7 \5 ]  c
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ! p3 v$ E! Q& v" ?
  96. {
    - P: V: x6 A% C' z
  97.   FILE *fp;
    % p$ F# f/ P2 {3 e! r
  98.   char *key=NULL;
    " v8 v5 `/ S; d2 `  {
  99.   char version[MAX_PATH];
    9 i9 d8 w9 @: p
  100.   LPUPDATEFILE file,olds;9 _" g4 ~- U+ Z2 s3 U% i) T
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & C6 z$ w  C. \8 T: b
  102. - q% l6 H0 {* a) L
  103.   UpdateList.clear();1 ^; E; Z4 E; Q- B
  104.   UpdateFile.clear();
    ( @* H+ X; G9 j) f6 V5 j) `+ X
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; O* g+ h& N- k4 |: v# N6 y
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ; f. n) V; x" t0 w. C
  107.   fscanf(fp,"%s",version);4 Z  g" E0 n2 r% H0 Z1 T
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    # d8 ?- x/ c$ l3 q7 ]" z' Z
  109.   while(fscanf(fp,"%s",version)!=EOF)
    8 E& p& q* B- S- e
  110.   {
    " u7 |5 I: {$ ?2 O* O
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 D% o# l. q- ?1 r) j) x0 Q! @
  112.     fscanf(fp,"%s",file->path);/ Z4 ]( U, `% u  @! f
  113.     ReadFileNames(fp,file->file);
    8 ]  k( E! P/ b% q/ u. l* j
  114.     strcpy(file->full,".");' m3 Q$ t# s# h& Y9 T
  115.     strcat(file->full,file->path);+ _0 }  r) }( Q
  116.     strcat(file->full,file->file);
    4 K, T( O8 z$ x2 ?6 \5 X
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    . U" X" T- X' V5 c1 V
  118.     {) [" d$ X3 L5 w% c* m: v* P
  119.       file->vers=(float)atof(version);
    ) s8 R: g% M, l! V- D: x$ @
  120.       UpdateList.push_back(file->full);
    6 a7 J( ~  P2 e6 T8 j6 g* L
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    + |* p0 }& C  F9 }
  122.     }
    % o+ i( s3 [/ e9 A( l/ l$ D( y
  123.     else
    / {) r3 L  a+ O7 E) I* ?4 C" E* z
  124.     {
    5 N1 z% H4 E4 b$ j
  125.       olds=(*p).second;% b1 s5 t  q' e% \
  126.       if(olds->vers<(float)atof(version))
    - Q& z9 A% J$ V: U8 _/ @6 Q  F) z* T
  127.       {2 j3 p8 X& O  C- j7 `* w1 p
  128.         olds->vers=(float)atof(version);0 V4 b7 Q$ o( r4 a
  129.       }
    ' ?6 F, n  Q+ R. v
  130.       free(file);) B3 O9 W$ a% b! S. m
  131.     }
    # M$ w, D3 T$ i" Z; R
  132.   }# _9 \9 \0 ]6 i4 s/ f
  133.   fclose(fp);
    " i) y1 y9 z6 j( I0 L2 E$ X
  134.   return true;
    # C# C1 v1 N6 s1 n
  135. }
    6 A! J; w5 `3 t0 y: |) m
  136. " F% Y9 s: g* {2 d$ Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    : ]) q2 N6 B# d, Q
  138. {
    : q: j: d; v2 n9 `! ?
  139.   TCHAR  szFull[MAX_PATH];$ T1 _  m9 k' j' e$ I6 b0 t
  140.   TCHAR *token,*inter;
    7 L6 U  I. U$ V9 H: ~6 S
  141.   *szPath=0;
    ' B! t0 n! B1 T0 S0 \& f! ~
  142.   strcpy(szFull,szFullPath);
    $ B' z5 j2 r2 f' R
  143.   token=strtok(szFull,"\\/");/ W8 A( v+ p3 Z2 X0 Y
  144.   inter=token;
    % b1 h2 |5 w; K! ~
  145.   while(token=strtok(NULL,"\\/"))! `; C$ x% q- o
  146.   {8 L5 ^6 s: R. v: S4 j" X/ t+ F
  147.     strcat(szPath,inter);
    * n5 z5 V9 Y+ V$ s& V
  148.     strcat(szPath,"\");
    1 c4 Z- u  {: ?+ `
  149.     inter=token;' v0 o7 z- r- z! l$ X
  150.   }
    ) n: J3 U9 K4 N
  151.   return strlen(szPath);2 ]/ x) H  `# v/ p. }, [6 W( K' d
  152. }& W; e) [8 g& K* @0 A3 |8 B
  153. . i% }8 O( T- v  g
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)! F1 [9 E3 }* g/ I3 t4 |: D  Z" ]
  155. {
    3 G( ~) S- m. L
  156.   DWORD attrib=GetFileAttributes(Target);( p7 G4 i3 z, i
  157.   if(attrib!=-1)( u- Q" r( G6 l4 c- N" f/ C. P: V1 c3 w2 I
  158.   {% _3 `! l" D/ v. c
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))3 B, k; k* s8 F. r' a6 T
  160.     {1 [* J! @% u, e2 l' p; T5 q) j
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);; O( w( c; a5 K! i  h7 ^
  162.       SetFileAttributes(Target,attrib);' l& N& d% b, S) L# v- y- R8 H4 U
  163.     }8 m8 H: I# {' B7 _/ D# V
  164.   }1 w) @8 {) X+ }4 h3 S
  165.   CopyFile(Source,Target,Erase);8 I" ?' d! ~6 x% {; p4 v6 q
  166. }
    % h0 S2 C0 E7 v8 E/ f
  167. 7 S6 k7 A* Y$ \" x( r! ^8 r2 ^  W
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)# ?8 ^! h4 S$ c8 C. U, I% e: j4 F
  169. {
      |- I, Q. Y( ?
  170.      FILE *fp;4 g( Y# S& p4 r' J
  171.      char  szBuffer[8192];; p; z4 Q2 r( y0 S- D+ ]
  172.   va_list  argptr;
    ) I: e; k& I3 W2 U& `! Q/ v9 H

  173. 5 {5 |* J; ?, z. |  C
  174.         va_start(argptr,message);
    # `2 v- D& R4 m0 Q
  175.         vsprintf(szBuffer,message,argptr);# D6 I1 P# u7 g2 U6 q
  176.         va_end(argptr);) @: a# r9 P5 x/ r
  177.   fp=fopen(FileName,"a");+ m0 @) |8 P3 \0 s1 W
  178.   if(fp)$ R+ r& G" `: z% f' k, a
  179.   {4 f6 y- p4 T' ?, t
  180.     fprintf(fp,szBuffer);( [3 |/ ]7 c: \8 A4 j7 L& Q/ @/ L
  181.     fclose(fp);
    , T% c4 o0 \3 L/ c* N( F
  182.           _flushall();% U6 @1 U: F7 b
  183.   }
    * I7 u* z  i& r' e. g* d! b$ f2 l
  184. }
    1 q. S1 _4 v# X6 _+ z
  185. . X4 Q$ z& K( E
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 R, I% M2 Q' V! n6 b, r
  187. {
    8 m. y( [; e2 n3 f# z4 N; w
  188.      FILE *fp;
    0 o6 Q+ J& J$ g7 v- x* q
  189.     DWORD  attrib;
    8 H# U% l- ]# J
  190.   attrib=GetFileAttributes(FileName);4 x) W4 V/ A! C4 H, x+ A8 E- e
  191.   if(attrib!=-1)) O/ @7 L' @, m- u, L% S& }1 {  N
  192.   {
    7 T% J) K  C8 y6 Z5 U7 O
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);' O4 O0 r' U# V
  194.     if(!SetFileAttributes(FileName,attrib))- x3 @6 j" C( v# v: f& a% Z  i
  195.     {
      z5 {' M  N7 i2 P( j4 ~1 C
  196.       return FALSE;
    : X6 A; ~6 v( h: r2 J
  197.     }
    ! B2 T: `( t$ Y4 k  n! l
  198.   }
    % `1 v+ B) v! S4 D% n9 d
  199.   fp=fopen(FileName,"wb");
    5 j4 a. o( b9 H. a( ^9 a0 U% G( U
  200.   if(fp)# ]/ m$ h! D+ b4 D2 s7 l0 t/ A/ z
  201.   {
    % y( U8 p; x. g, s
  202.     fclose(fp);
    , x* Y7 n. h7 u' [# l' n
  203.   }
    : k) _/ Q+ A5 z1 k$ e! W  ~0 |
  204.   return TRUE;/ e0 O( b* h# L& ]) ?
  205. }
    ; C8 D6 a9 q" H5 j3 D8 q# ~) f5 t, x
  206. ! I* g) [' {6 a+ p4 D, t2 h- \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)/ `  W! V5 g5 o( ]9 W
  208. {5 f3 F; N0 ?  c* P
  209.   char filename[MAX_PATH];: p! E; \1 \# @! C
  210.   LPUPDATEFILE file,olds;" v5 G) z/ u3 f% g6 R
  211.   std::map<int,CString>::iterator i;
    ( i$ }# D2 Q5 _3 i" m
  212.   std::map<CString,LPUPDATEFILE>::iterator p;* w) _0 k. x5 h7 m
  213.   std::list<CString>::iterator l;
    & `  @; D5 X! A, u+ n

  214. 5 O/ j. X! b  P- J( r: Z9 ^
  215.   if(bFirstUpdate); E4 k' ~% `( u. T
  216.   {# y7 x  k! S2 C
  217.     dwCurrFile=0;8 T/ V! G% V2 j$ p; r
  218.     bFirstUpdate=FALSE;& `: M: E; O& R/ z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), Q3 G& T2 U9 T3 D6 n% G6 ~0 ?/ q1 Q
  220.     {( t1 d  L' u0 _3 o9 B! g2 Q
  221.       dwTotalFiles=UpdateLocal.size();
    ( Y7 W# I5 Q1 f
  222.       dwDownLoaded=0;0 K4 `. ]! _  g
  223.       bSilentStep=FALSE;
    # v: G. K) u1 L) i5 n
  224.       bCompressed=TRUE;) g# p; Y# Z* A$ S6 I
  225.       strExtLocal.Empty();
    4 U* m/ C8 B7 N3 L) s
  226.       strFullName=(*i).second;
    * @- T0 }& s" v* k2 m$ w/ X
  227.       dwProgramState=AP_CONNECT;
    ' b, n5 }! z. Y
  228.       return TRUE;
    1 q, D8 B* C/ Q" ?$ u: W
  229.     }  l. ^6 G8 q$ f
  230.   }
    " l0 r. m' B% {9 v8 k, a; G3 l
  231.   else if(bRestartUpdater==FALSE)
    $ z$ v% L  ?9 o4 d( _0 c! A- b
  232.   {5 G" v4 b4 T7 q& x
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())3 e% i/ j+ n" M: W/ d2 Y" b  ?9 d" `
  234.     {
    ! z, }% p, j- a8 @6 U& f! `
  235.       file=(*p).second;
    9 Q! @) g; A. t) ?3 q3 H. }* u
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())0 `. o8 @' j( `5 ]& y" ~
  237.       {
    0 R1 a, }! \  z0 J
  238.         olds=(*p).second;
    & n+ R, }9 q! f* M1 I; v- d2 t+ m
  239.         olds->vers=file->vers;' g6 a) s: i  z" R
  240.       }$ |" u% g$ P) W) u6 x2 m5 @' L  `
  241.       else6 k; ^& e4 }# N9 g! ~! ]
  242.       {
    " e! M/ G! `. G. g* l
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : f  m: f0 L. g! K% [
  244.         memcpy(olds,file,sizeof(UPDATEFILE));: h# |' b7 c8 V+ T0 U
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));& Q+ Q* Z" g$ d; j3 u" ~
  246.       }. }! m: y- f/ g; k$ S. y" c1 N7 d
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");' c0 d% L/ b3 x; r4 N
  248.       sprintf(filename,"(%s)",file->file);
    . V; V' Z) U+ O& G6 T# q4 c
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # x) [' S! o0 @& A& |' A$ d$ [
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }& @) [5 M0 X% O: Q2 y1 z7 `  W
  251.     }
    9 h+ P$ n% i: G
  252.     dwCurrFile++;
    1 Q1 `* |( N6 d: S5 z* S
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 H5 I! V2 ~* x7 E$ r3 F+ a, W
  254.     {
    3 r) G7 g* L% ~8 F
  255.       bSilentStep=FALSE;
    4 K: D9 S  Q& e' A$ ^9 R
  256.       bCompressed=TRUE;
    / r) H# G+ t1 J+ S5 e
  257.       strExtLocal.Empty();
    3 F/ T* |  o1 W+ Q
  258.       strFullName=(*i).second;1 I) E: y* K) _+ A1 T
  259.       dwProgramState=AP_CONNECT;+ |/ C- A( r/ m" Q: @+ I
  260.       return TRUE;
    5 B" b( w; b9 D. n
  261.     }
    ' c0 \8 @0 N0 t' i: D, r9 S
  262.     if(!bRestartUpdater)
    % t. r- F1 Y% ]- k( k: P
  263.     {
    0 u; x- d% f/ `
  264.       int iCurrSize,iFileSize;
    5 H% `6 S# Q: W% ]4 f- p$ }1 e
  265.       iCurrSize=0;2 ?, b$ |# f; ]8 w- v
  266.       iFileSize=UpdateList2.size();. ?! A" P' }# w7 ^4 I0 }
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    : n/ f! Y$ h: I, K  O) q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    3 G  w% b, v0 t$ P
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 l$ r* t% B( ?& h: M
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- U6 _* d/ D3 W% r+ r. f; i
  271.       Fclearf(".\\update.dat");
    1 F) c6 X  o. O/ w/ q
  272.       Fprintf(".\\update.dat","Bloodyf\n");2 k6 N  I! D' T
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
      o' x2 c2 S. m" ~
  274.       {7 v% H# |+ L) C! i4 K. p# t
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    " C# I* b- l  r8 [
  276.         {7 d" G8 w# Q% r0 T
  277.           file=(*p).second;  u) p8 G2 R  l5 [
  278.           sprintf(filename,"(%s)",file->file);
    # ~% l+ e$ N% o2 y" I
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* M$ i5 I' ~2 I' \5 ~
  280.           iCurrSize++;
    / P+ v5 S$ W( Z5 U; z. {
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
      L0 q# W2 k7 Y4 x
  282.         }) S; k- ?1 q& n; |0 b0 E
  283.       }' Z- R& ?- J; k- i1 u; Z
  284.       unlink(".\\update.txt");) h/ v: e4 J9 a- j) ~5 s
  285.       unlink(".\\update.tmp");
    2 F' F' w2 ]7 X( u& Z2 C
  286.       Fclearf(".\\checkversion.dat");( h. z5 n0 u# _' w
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    % S8 ?9 U' s/ p/ {" r0 G
  288.       if(UpdateLocal.size())7 O0 Q4 N4 a$ X6 D  k* s3 b
  289.       {
    / F' I1 \5 P: {7 a+ T6 ^. S
  290.         UpdateLocal.clear();. B! s2 d- W3 D; |9 t1 ?
  291.       }
    , g" C& e- Q0 m7 _" B% N, M1 k% I+ r
  292.       if(UpdateFile3.size())( ~4 K( z4 D* v) L, E
  293.       {3 v5 T1 }# O! W, G& T) w, w
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 w- L) f/ H+ U  |& h/ j& H
  295.         {* n: P% j/ ?. [5 l
  296.           file=(*p).second;
    + S/ |1 y( e" n8 ?# C1 T' x
  297.           free(file);
    - D( T3 w/ M  B7 N
  298.         }
    & D5 W$ [. Z% l; `# k/ N
  299.         UpdateFile3.clear();
    . d- g0 {9 ]! _2 `" ?
  300.         UpdateList3.clear();) }/ b8 @$ Y4 N2 ?6 K7 b
  301.       }
    ) F- H% |" b- O; v" D, Q% S
  302.       if(UpdateFile2.size())
    ( ]3 H. o) @3 E: n9 U8 V* J
  303.       {" Q# r3 j7 n; h( n% {) E: T, N
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    3 Z: {+ J( g/ o4 N
  305.         {
    2 ?, x* N; O8 W9 c. q' ]* s  \
  306.           file=(*p).second;1 _# U0 O  Y- q* W
  307.           free(file);/ C0 B3 V6 s5 c, p( P: g/ e  E
  308.         }
    7 F7 g/ p( ^( q/ U
  309.         UpdateFile2.clear();5 m& Y" P, T3 P  x5 B7 G9 t
  310.         UpdateList2.clear();
    4 q9 i% o* k. k( T4 S- ~* c
  311.       }
    : A3 @. x0 G1 l6 B! {# g9 c3 \
  312.       if(UpdateFile1.size())
    6 [( W/ i) J: {& {4 @
  313.       {  C9 x- @7 @5 c# r2 ?+ o
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 A* `8 y' }% L& F2 e
  315.         {
    4 `- J2 m/ T6 f4 \1 [# a
  316.           file=(*p).second;( X  A2 n) l, b6 H: |3 _
  317.           free(file);$ {* S, e8 ?' k' d4 n
  318.         }) T0 C- {2 g' I- S' K$ s
  319.         UpdateFile1.clear();; t/ ~4 u1 M+ E3 o
  320.         UpdateList1.clear();, @+ n2 J* W; _4 Y* @+ c
  321.       }% y! g' M6 e! J$ Q* y) w
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));7 ~9 t9 Q! Q9 R3 ^0 Z4 i/ ?. h
  323.     }
    - d. }5 p  h+ N4 a" I
  324.   }, \% Y* d0 H: [. [& Z& M, a
  325.   return FALSE;
    - p; G" V$ e0 {, z( o4 x& ], |
  326. }
    ! L" V: a! w$ C' A" T3 Q! w

  327. , p, w- T  E) \) q9 h
  328. void CRevAppApp::ClearAll(void)
    ; u4 c- d8 b' a4 K8 Y
  329. {
    ! G) h6 ]8 r" }" @( X9 A' s0 t
  330.   LPUPDATEFILE file;3 @% W6 K2 W/ }7 O" ~
  331.   std::map<CString,LPUPDATEFILE>::iterator p;) x) i, D  `6 M) e1 R' L) X2 D

  332. . z6 r. @$ F) `9 K% f; V7 a
  333.   if(UpdateLocal.size()), I4 _  x+ X  F- }  l9 o+ s! L  [
  334.   {
    . ]! p" }! `+ O/ r6 T
  335.     UpdateLocal.clear();
    $ r) s1 N2 `5 d/ b/ _, ~3 V6 C$ K
  336.   }) ]% X9 v0 Z( j8 w
  337.   if(UpdateFile3.size())
    $ i) @' F) g' I: v
  338.   {
    ' W, G+ k2 _3 m) p. Z0 b
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    / x! C! W! B0 {2 a6 D9 q
  340.     {
    # N$ {2 P( `; ^- |$ @, [" \
  341.       file=(*p).second;
    & Y! Z/ `6 K  j0 J  F9 D" O; `% p
  342.       free(file);
    , e% Z0 \* J: b  k
  343.     }7 C% S9 H/ s; R/ f$ h
  344.     UpdateFile3.clear();
    : M" x! B  V/ }$ w& w# D
  345.     UpdateList3.clear();9 T/ E+ I: i% K: [. h
  346.   }
    6 N, K* H; d3 g* ~& P, z
  347.   if(UpdateFile2.size())2 G, {4 L% [$ D) [! i
  348.   {
    * S+ f% ?& U+ y/ @8 A# a& p$ B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      f: k4 V( i( v% @4 {8 D! t
  350.     {7 m6 p5 }/ ]& u; }7 M1 \  V& Q7 o
  351.       file=(*p).second;+ F- T6 n+ Y3 f6 m5 f. @5 l
  352.       free(file);
    # O; Y# A7 p5 q; v7 S' P# _, ~
  353.     }: n8 T0 {$ }7 U! M9 X
  354.     UpdateFile2.clear();8 D/ O4 Q5 [6 N+ [$ t! S: }
  355.     UpdateList2.clear();
    ' }5 b- r- z1 s+ U- _. @) \
  356.   }. ]. n& c$ r4 V4 R
  357.   if(UpdateFile1.size())# g% \7 {, j5 r  ?. g
  358.   {
    ( B* Y5 _1 K8 R; ?( X5 ^
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), x# _. R$ p# x0 z+ _% C
  360.     {
    2 l! r3 M0 V. j- \! p" D1 t
  361.       file=(*p).second;7 G/ G" E- S( P( `7 T3 G
  362.       free(file);1 v! L% Y; N6 h4 Z+ v- k9 D. y
  363.     }
    5 y1 H8 b/ `$ D! S# J: i* M
  364.     UpdateFile1.clear();
    9 Q/ _5 S8 C' f& \0 o  _" [
  365.     UpdateList1.clear();. C' p# R* m( Y" m
  366.   }
    + L5 _+ T+ N' v
  367. }  
    # B/ z2 J7 Y) [7 Q9 F- w0 h
  368.   $ ~6 U" l1 K! c( f$ f7 C. e4 ]: D
  369. BOOL CRevAppApp::CheckLocalVersion(void)) v7 B4 P' P3 M, |0 z
  370. {
    ) U- \6 x5 T- G& L
  371.   int c;
    # s1 i" c. x: d& f0 J
  372.   LPUPDATEFILE file1,file2;
    9 _' H/ @+ u! B: p
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    " y# t! h$ b% A$ [
  374.   std::list<CString>::iterator l;
    8 T2 d' _: Q% g

  375. $ v# R3 p8 |9 u0 y6 j' Q' u
  376.   UpdateLocal.clear();( M- p& d, G' e; o( _
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ D9 ^: m/ P, U
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    , l4 o1 ^4 v4 s2 y  O
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
      O  t8 y( ?! \' f
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ) {( }: T# r" W5 e
  381.   if(UpdateFile3.size())
    - F: `. ^* H( \
  382.   {4 N# d  [9 {" C& C
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); x6 L1 j  S5 {8 e; H) j: _
  384.     {
    ' K+ G* J, }# Z9 ~7 a6 v, E: T
  385.       file2=(LPUPDATEFILE)(*i).second;
    " x) ?' h/ }% z, s% l
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : l/ y; \+ l3 [/ x5 R5 l
  387.       {
    3 [; i1 p! e6 v/ r% W+ w% L: X
  388.         file1=(LPUPDATEFILE)(*p).second;
    7 E% y9 K0 C) Y' ~+ }, p
  389.         file1->vers=file2->vers;; @; h9 ?1 G4 ]! \. I
  390.       }
    3 Y! E% ?6 k4 k& n8 {; g/ z
  391.       else
    9 ]$ f/ ]/ \. o1 F
  392.       {
    . w" q: w0 }' w9 Q- D1 L) l
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ b  W4 z6 R* o8 p& K
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    # z* ~# M# C' d3 y: v1 z4 i, x
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    2 T9 N0 Z  S2 A3 E% N
  396.       }
    2 U7 h  w9 z6 l" F
  397.     }
    ; L$ b/ J5 y! D, Y! D- p
  398.   }2 ]* s' P( U( p2 h. T" T* ^5 \
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)" i- ]5 Q5 `- s1 b% Z( @6 p- _
  400.   {
    9 p" h2 T; |8 b
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()), c1 m* b& Q) e
  402.     {
    % q- K& H! C6 o$ l7 g( L* Q
  403.       file2=(LPUPDATEFILE)(*i).second;
    0 ]4 k( e; p8 R6 S  r
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())2 k; _7 S7 b0 E* ~2 n0 q& k; `1 Y# m
  405.       {
    " h+ z4 H, m: X! ]7 Y, P6 Y8 G0 I
  406.         file1=(LPUPDATEFILE)(*p).second;* E2 \! e* Y- J- Z6 Y
  407.         if(file1->vers!=file2->vers)
    : v8 U$ ~1 W/ G5 a" J! P- e" S! Y
  408.         {
    - ~9 t! E7 E2 ?0 I4 O: r3 E6 T
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # ~+ }5 A7 K1 v* V# t
  410.           c++;. n, A9 k: r7 b+ v+ z2 Y: E. n
  411.         }
    : n; H4 Z" M. W1 [% {
  412.       }
    - V0 d8 f3 e( ]+ a: ?+ [( O: f* M& \
  413.       else  h, O8 k' ]  K' e, I
  414.       {
    ( `/ F# Z+ s/ g& n( ^
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + A4 J) V& N' O
  416.         c++;
    5 G$ u' R$ X; ?) |, y4 s- l) I
  417.       }
    1 b' }' i' u4 b4 u
  418.     }( h& n" L+ n7 M+ a: @) i
  419.   }
    , Q* b1 S* ?* o4 Y8 w2 U0 K
  420.   unlink(".\\DownLoad\\update.txt");
    $ ^9 X- e  f2 d# [: F$ F! m# T# x
  421.   if(UpdateLocal.size()) return TRUE;
    ' d/ T& c" ]: V$ M1 Q
  422.   else                   return FALSE;% C' t1 |4 u/ r  H6 T9 S; k% b" F) P
  423. }3 ~) n) {% F6 l! w& N
  424. 8 O9 Z! @6 L! f6 n' m  w+ \+ R- A8 x
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"0 I4 v9 N* ?' D5 B- ~
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    & X6 @* _' {- N, V

  427. $ ?: H. S9 S; e7 t: V( c
  428. 7 f2 B1 F3 ^" c, t
  429. 3 m  k# J/ `+ }6 M8 A+ @7 {  i
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)) [) F5 P4 g8 o
  431. {
    $ f/ I: s5 @# P
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
      n1 x% D- u1 e0 I( |
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( k. m9 @7 z5 o" k
  434.   {
    $ h3 C7 B( T' s9 y
  435.     char szLanguage[50];/ {' ^4 d0 N7 A; D
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 T5 b( Q- R1 F* q. B
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 o1 ], i( f! n3 W1 L8 f
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ U$ u: ?: \! m$ H9 A
  439.     else                                   m_iLanguage=ENGLISH;2 Y0 S/ Y% E8 E
  440.     char szRegister[100];
    / Z1 E. |! D4 ?; ^6 M; n
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 N. e6 m" i4 J0 k4 p0 C" b+ F0 ]
  442.     strRegsName=szRegister;$ I. \$ @4 E* i: ~
  443.     char szPatchURL[100];
    4 j, c7 Z' F# n2 F9 T6 ~; W5 u" E
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' q' [' M9 O. i
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# j: ]/ r. E8 b$ O
  446.   }
    0 ~( e1 U2 p# z& _  V2 y$ v7 m
  447.   else# ~& u& L' S7 \' c+ h7 [6 h
  448.   {
    + u( k+ v+ q3 U' m* g5 h) `9 S6 L6 A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    " w6 f/ Q) M" g
  450.     strRegsName=DEFAULT_REG_URL;
    % o1 L- Z% ^9 z* J2 n( M
  451.   }
    % G5 z+ D8 N6 L6 K. G: A4 r$ L1 P
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ; b& V( M( h/ K- Z% _  Y$ P8 W0 N- U) m
  453.   {
    7 W9 b# X& o$ R  E9 N8 @) f6 K/ M
  454.     char szIP[50];
    6 e( E/ j+ X& [! O4 A' O8 A* X
  455.     char szDIR[300];
    8 U$ o: H7 s# X) H  t) z, K
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    $ v( _! p; U: x$ B! P
  457.     {
      p6 ]. D, _1 l7 |+ r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    4 [0 u, K! ^# |' z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    " z6 R7 ^1 e& D- G8 O
  460.       strHostName=szIP;
    5 h% s3 O, s0 N" i* t4 o( k3 |
  461.       strHostPath.Format("/%s",szDIR);
      a! ?! X' o$ e' c# z( o$ i
  462.     }
    & o) S: T2 K$ l
  463.     else
    * L4 E) _$ A: q7 \; J) W
  464.     {% L) Y% _4 g; n
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - {8 R6 u/ W  p8 a. I5 S3 l
  466.       {
    ! J. l1 J7 a. b, T% ^* J) J3 {
  467.         char szLanguage[50];* k) y& V5 U5 S4 D* U5 |" }$ b( E
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 U2 A/ @3 M% v* O, u$ N9 v
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ w5 p4 t5 N0 W! X# V0 }( v
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ( N# ^" \- E6 B5 y4 h0 k
  471.         else                                   m_iLanguage=ENGLISH;  p3 V( Q+ u# |
  472.         char szRegister[100];
    " s5 i% g) C; z' ~
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  \4 _! g6 x  C  y( k
  474.         strRegsName=szRegister;
    + b; x! B5 n4 a& A% f
  475.         char szPatchURL[100];
    * D9 x$ M! J' N- Y+ i. Z1 j
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 `% r, f3 I. h9 s0 ]2 v, l4 h% r
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. L% C# c1 W9 ]/ n; Z" C
  478.       }
    ( _/ `+ q  u. I1 E4 F, t
  479.       else$ b" W+ K% R$ N/ I& I7 d  b
  480.       {
    2 D7 S. p% F6 _! F4 d$ R1 ]
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . R- Y3 ?; R; ^9 ?
  482.         strRegsName=DEFAULT_REG_URL;3 z; r9 N' v5 J4 {" f1 o
  483.       }
    * G2 f; K0 h4 n
  484.     }
    / p( Z6 c& [2 h$ C; L7 w2 W
  485.   }
    3 r8 ?' i( e( ]
  486.   return true;
    * ]0 Q" h$ @( s1 Z' |* I
  487. }  g4 @: v. x# l; f! L
  488. 9 q; ^8 y+ x% _0 M( [; l% P
  489. #include ".\ZLib\unzip.h"
    * `0 ?7 c: J& h9 v' i/ W/ U1 S
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 S2 W# Y! H6 V
  491. /////////////////////////////////////////////////////////////////////////////
    0 q4 e- ?; @2 E
  492. // CRevAppApp initialization" G0 d9 v" S* V, J" h, _% L
  493. ' J" ?3 s  s# Q' h1 c, `- }) C* E) c
  494. BOOL CRevAppApp::InitInstance()
    & r, E% \+ E5 S  R
  495. {
    1 M+ L0 R% {" r. j
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ( E% j/ F% B3 }$ Z: H1 a
  497. + z2 t& M3 y6 C1 m
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ( c5 R# [  p' Y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    & i8 K, o  A, p9 d
  500.   {1 _/ Z7 Y1 ~- A2 G! I/ |2 A
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");+ s; T5 [$ @: [+ D) Y; H$ L
  502.     GetPathFromFullPath(szPathTarget,szPathSource);5 o' H1 r6 x' `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))), m  B1 R' e$ C2 m% Q
  504.     {
    1 N9 b) k8 G5 e8 ~6 c
  505.       strcpy(szPath,szPathTarget);
    . W; C7 e$ |7 q( {7 [" H
  506.       SetCurrentDirectory(szPath);
    : c" M: o0 \' ^- @
  507.     }
    5 I2 U( v' J2 M  f$ g
  508.   }
    9 B8 e1 t* b8 m" j8 v4 E! _, [
  509. #ifdef _DEBUG9 ~/ y0 x% I% o& \5 B  c: x
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" `) p: x. L7 u; U/ t
  511. #else
    & E3 F; V5 n6 U9 r% V7 u
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 ~& k, d* j- M" N0 b9 H: T! d
  513. #endif
    $ E" @+ u9 x2 c  n9 g; \
  514.   {0 [) W9 }  e: ^& w
  515.     char tempFileName[MAX_PATH];0 T* G8 p' r! ^* p
  516.     strcpy(tempFileName,szPathSource);
    , v! @, I) c9 }, A" B
  517.     tempFileName[strlen(szPathSource)-12]=0;
      [9 Y' s5 K7 e; j4 u3 ]$ D1 b
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
      O  U$ t5 s5 W
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);8 b7 R; g, K$ |
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ) c. {" F$ I3 G8 c. ~8 }! T
  521.     return TRUE;( q0 r6 K# _: u# h  T) l" s0 m7 J
  522.   }, ^  A( Q. n; T6 q5 G
  523.   // Nuke 0118: Delete run.exe
    . N- X. ?6 o. V9 l- J% `  A
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );, v/ R- S7 ]+ H' g
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");8 M; j- c0 b# ]2 j# V, i
  526.   if(!ReadCfgFile("Config.ini"))
    4 ~# p4 w6 G. Z4 l# N
  527.   {
    2 A- ~  `9 S! g! z  i/ Z4 V
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);% l! H+ C3 O+ g4 V
  529.     return TRUE;* d$ }7 M/ o3 V+ X% G
  530.   }% \$ w9 ~- N* ^* q0 b! _& Z6 o4 q
  531.   HANDLE mutex;+ \6 Q& P8 |) o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    & w4 A- _! P, v9 A: \$ ^- _; w
  533.   {
    * W  D# |8 B" M& D4 Q0 g
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)) t& F6 Z4 C4 L' v. s& `* A7 t" B( d
  535.     {
    9 ]& S5 T# d5 v- y# i
  536.       CloseHandle(mutex);
    ' w: o# J  ~" k6 K$ \1 N
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! |$ ^3 k5 N2 b: t# [6 V! I
  538.       return TRUE;
    * w; o) k+ g  L
  539.     }
    8 @+ f$ c' y# p2 i! V" o* Q# A
  540.   }  + e2 H$ h+ G; f' k8 t
  541.   CloseHandle(mutex);
    , o6 C0 _$ F. x- L: X* B' I

  542. 9 E, @% y! S$ i$ {6 _0 S. R; o+ d
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);; Z! X# Z  u" j4 }

  544. - K, G( l: T3 `6 c
  545.         AfxEnableControlContainer();  Y( `- m( d2 z5 h5 O3 d) Q: y

  546. - P9 x$ C% G1 M' }
  547.   bCanUpdate=FALSE;
    ) i% @1 M6 h. q
  548.   dwStartUpSteps=1;' ?2 X& d* k" h& v0 H
  549.   dwProgramState=AP_NOTHING;
    5 b- a" u  G# h. k4 O7 l; }* D

  550. & o; D# i9 g7 {: V5 ~# j
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ( g5 \# u1 {# k" k5 B( {' O
  552. 2 l: h8 s( K- `) F
  553.         // Standard initialization
    ( G# J, V- J  i1 f
  554.         // If you are not using these features and wish to reduce the size  |1 g9 D# @; N7 r- A8 \' ]6 Z
  555.         //  of your final executable, you should remove from the following
    # N: J  w+ K; P. ~2 p. M; S
  556.         //  the specific initialization routines you do not need.
    6 l0 w. S$ ]4 e5 Z1 Z
  557. 9 F. d, U- Y3 f3 }/ Y% _
  558. #ifdef _AFXDLL* R0 M+ @' W- b) q) e: W8 E, i
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    , C" j+ S! Z6 h( J+ E+ w3 W6 F
  560. #else
    4 Q" T( E0 z' {+ \8 u4 C- L
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically& t& I: N4 c1 H7 l4 ?+ l
  562. #endif. _5 p/ O1 H& t
  563. 1 E0 v% I( R9 n( S
  564.   dlg=new CRevAppDlg;
    , F, {  D4 z1 I! E, m
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    & e6 J) S, i* V# X
  566.   dlg->ShowWindow(SW_SHOWNORMAL);  V/ V. k% Y7 U+ Z& H
  567.   m_pMainWnd=dlg;: ^( v: z* ]) _& u
  568. * z0 b: B* k/ |$ a* n
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    4 I. ~9 s+ d+ Z: |7 c

  570. 8 s# W) @. @6 f6 O
  571. //  GdiplusStartupInput gdiplusStartupInput;
    + x7 f" J6 D3 }' n, c5 G- u+ b
  572. //  ULONG_PTR gdiplusToken;) T' G- k& k( R; H  F5 t
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    8 _# r1 H$ E! r3 }! Q+ r
  574. 2 t# X" V1 W# i9 h  O2 }" ^: h- L
  575. //        CRevAppDlg dlg;
    8 e7 z2 c8 k4 ~8 x5 p; }! J  g! E- O
  576. //        int nResponse = dlg.DoModal();
    % A  T7 l: E7 |
  577. //        if (nResponse == IDOK), {9 p4 ]& |6 i, {" u+ |5 M
  578. //        {1 O% S5 Z) e) r  Q7 b; A
  579. //                // TODO: Place code here to handle when the dialog is8 q2 p- ^4 q+ I$ |7 `; I
  580. //                //  dismissed with OK" |8 w3 I" }" h, J! y8 T. u
  581. //        }
    9 a, L" w) L# s
  582. //        else if (nResponse == IDCANCEL)
    0 A& W! {- h0 V( j- i' y
  583. //        {
    2 M" _7 e4 i' U# {, n% \# [6 s
  584. //                // TODO: Place code here to handle when the dialog is
    & q% w% b4 ?7 F  E3 q4 V7 Y
  585. //                //  dismissed with Cancel7 O( P) O& X& F9 x1 \, @" A
  586. //        }+ u9 ~0 x, d6 b: ^! m% A
  587. % q3 }, F( Y) H3 b: ?- l
  588.         // Since the dialog has been closed, return FALSE so that we exit the7 c& @7 H; g, q& k* ~5 s
  589.         //  application, rather than start the application's message pump.& v/ K8 N# A. ]
  590.         return TRUE;, J" g( {6 Y9 L# ?
  591. }2 B+ v5 O& o1 P0 m

  592. 2 _! F* l; e; P
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    $ h- r4 {6 W- L$ M* l9 \9 s* k
  594. {& m  k: {3 B- ~$ m' t, D$ W
  595.   int i;
    1 U& y" H4 h' H- q9 e) G
  596.   char *szRet;5 d0 }7 A* e/ T1 A' u! S3 I* A

  597. # V5 Y, e/ T1 o9 e3 o$ @, n
  598.   if(pSource) { itoken=0; sztoken=pSource; }4 B" X. x, I: {  k
  599.   if(sztoken)
    7 }$ S  Z! C. E$ W0 p; v7 `
  600.   {
    , D% P- ?8 z; t/ u* Y- p5 P
  601.     szRet=&sztoken[itoken];
    + a' T2 y5 J8 v' T( l; |5 ?1 {) \% ?
  602.     while(sztoken[itoken]); w5 o8 H, k8 x0 b
  603.     {
    5 Z5 [% [2 e) X3 z7 D. v/ v( x
  604.       for(i=0;i<(int)strlen(token);i++)
    & U$ V4 ~: w( W
  605.       {2 q  p! C1 {4 a- [5 k
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]). h5 Q9 }9 J0 ?& f/ y
  607.         {8 W( H, N/ R  D4 N
  608.           sztoken[itoken++]=0;0 i/ w( S  W9 z- ?, v  k
  609.           sztoken[itoken++]=0;
    ( c# w$ t8 |1 [, V
  610.           return szRet;8 F$ m3 V/ O4 ]& X! B* v8 w
  611.         }7 w; H$ N# J8 P  x
  612.       }
    1 P' y; e- O6 ^' c. O
  613.       itoken++;
    ) Q1 D3 \; w" e' |
  614.     }
    . V: b% a$ u' V  w7 h3 E
  615.   }  K5 M/ a0 S& Y8 j7 Y
  616.   return NULL;
    - W/ {2 {" m% H5 Y* Z8 o, }
  617. }
    7 V3 R, b% W$ H9 f* ^3 H

  618. 9 D$ q  P9 ~  a  ^# v
  619. void ProcessProc(long Total,long Current)
    5 K1 M  \4 e6 j  \
  620. {- j% H& W0 m5 @) k9 q
  621.         MSG msg;
    3 r- d# r1 v! H* v1 Y
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ) s; i- v9 q) R) E0 \- V
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));4 }+ O0 \3 s$ W; q6 V
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))( ~, s1 F8 }# W1 f% S$ n
  625.         {
    . V: |/ J+ J3 l. `2 n5 u
  626.                 if(!GetMessage(&msg,NULL,0,0))# c( Y4 p; Z( C  A  \( |8 X# N. G
  627.                 {
    7 B9 \5 Q1 W0 V5 W' `* L6 U
  628.                         return;% }, N: X- }" {1 h2 f4 H$ r# w+ @
  629.                 }9 N- u, B/ l2 D
  630.                 TranslateMessage(&msg);
    . Q' f3 A" i7 p& I2 H
  631.                 DispatchMessage(&msg);; T( e6 S9 c' E7 Z* g; h
  632.         }       
    7 X4 ^$ Y, s" W5 h8 ^1 S! d
  633. }9 D+ |/ L' u6 s3 j/ n- \$ q

  634. 7 ?+ J8 j; v) |4 ^
  635. BOOL bFirstChar=TRUE;' g& K3 R& D5 ^' F# \

  636. + o7 b. ]# C* N9 @) y' o( V4 Y0 N
  637. BOOL CRevAppApp::OnIdle(LONG lCount)0 ?9 J+ W4 j5 s: W3 n7 W9 f
  638. {
    , ?, F) a, B& Z* D& l! c- q# P' C; S
  639.         // TODO: Add your specialized code here and/or call the base class
    * V: ~2 y/ T. C
  640.   switch(dwProgramState)
    & ^6 W7 F+ E* ], T5 H6 \
  641.   {" A- X- g3 _( J1 L4 O: j" _
  642.   case AP_NOTHING:- f2 V0 e9 r3 ]/ O0 Y* Z+ B8 S- d
  643.     switch(dwStartUpSteps)
    1 k5 w3 C# f% b1 l0 J
  644.     {/ c8 y( q3 `2 p- d7 b
  645.     case 1:) d& P% o! R6 ^' L! z
  646.       {& w1 w. H- Q4 h1 j; g) L  |
  647.         int i;: x) x  q/ n, k3 Y" Q9 J
  648.         CDC *pCDC=dlg->GetDC();
    / Y+ @5 B& T+ Z8 u4 h
  649.         HDC hdcwnd=pCDC->m_hDC;
    5 |# y( W( j9 T4 q$ b
  650. //        Graphics graphics(hdcwnd);; W6 x5 v) [9 W9 p) F
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");, ]$ h6 G% @2 K' U
  652. //        INT iWidth=bitmap.GetWidth();
    4 H5 J: F! u+ k9 d( x! S  p1 h8 z
  653. //        INT iHeight=bitmap.GetHeight();1 f  z1 ~3 E- x- }* [! ~
  654. //        Color color,colorTemp;
    ' [$ }( @& O  C* N7 h; c
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)3 Q/ ?0 H3 u% S% _- b
  656. //        {
    8 Z. t" S5 w% Q2 p% q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    . b/ o  r6 O; ?, p
  658. //          {6 a- M9 S7 z; _( l9 u  Z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    1 r- R8 r/ T3 c4 H! [6 h+ z# p
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 b/ V: E: V1 A) Y/ N* J5 g" u) Z
  661. //              (BYTE)(255*iColumn/iWidth),
    & H! S# o3 W- N6 D
  662. //              color.GetRed(),9 Z+ b7 W& `" o/ e3 b. Y
  663. //              color.GetGreen(),
    # G9 M) {/ }% C* u3 b7 b1 p8 e
  664. //              color.GetBlue()));% S2 ^& ~4 U9 g2 Y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    " o" |' m9 N* Q! `5 f; C
  666. //          }$ S% r+ }. {( M
  667. //        }& u' B5 J9 X& `5 F% a/ a  u- v
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ) P. s# U7 Q3 w& B
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");, w) I9 H0 F8 b4 {4 p
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    3 o6 c& V$ r  Y% p% A: M( B! Z; u
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! I0 X& R3 _9 L+ {: E
  672.         for(i=0;i<240;i+=8)5 h& d* U6 d. R/ k. r' f
  673.         {8 X9 u1 @* N, S  n0 n) X2 H5 l
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: R% ], V# F$ ]- e# b7 G+ B5 m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - r) E) k8 C3 [5 C8 z
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : u4 E; V) h6 S! [' Z
  677.           Sleep(33);# ?' P; {- q, a
  678.         }6 z* U5 H8 ?' v$ B
  679.         Sleep(1000);, K6 b3 t  Q  V5 g3 U
  680.         for(i=240;i>0;i-=8)
    " q+ s6 a$ ^! e. b& m* p
  681.         {
    8 I6 r; X. q6 y2 |' A0 T- x
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 D5 n% E- `# p- V- |" O
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# M6 n8 {; C, e# A
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 E4 `, o% X2 X) Q
  685.           Sleep(33);
    5 I; ]" p/ G% M
  686.         }
    ) {; V" T) Z1 M; K! h# B2 v
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    4 |! E# C$ V4 U: l* I' j$ o9 a8 M
  688.         dlg->ReleaseDC(pCDC);/ w, M5 ~0 A& B9 s( u
  689.         DeleteDC(hdctar);2 i* O4 a' g+ S" G0 V- y; z9 M) t
  690.         DeleteDC(hdcsrc);5 h7 H6 N9 h6 t$ i; p9 B4 k( _
  691.         DeleteDC(hdcorg);
    / R# C' @% T3 G  \" a# C. `7 {
  692.       }4 G% [) a; j9 A& q2 N# G- ?
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);  n% \6 [# I( s7 m* p
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");2 @! p! V! M' T, p0 c
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    8 t8 F* y3 N# q% x1 s
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");# S: r) Y, G: z/ R
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' W) X# j5 e1 w# ^
  698.       if(!Dn.Connected())
    # T9 y/ O$ L  I# ]2 o
  699.       {
    ) c+ j, P& f. k, i  d
  700.         dwTotalFiles=1;% \! t" B" G1 W0 N
  701.         dwDownLoaded=0;& _0 w, ^# t7 O' S1 p
  702.         bSilentStep=TRUE;
    # ?0 P5 v7 v: s
  703.         bCompressed=FALSE;
    5 R  o% T$ P* u% j/ f& h/ n
  704.         strExtLocal.Empty();
    1 l" a0 L9 A6 m  s! j
  705.         strFullName="readme.txt";
    ) F4 _# Y  k1 c, K$ L
  706.         dwProgramState=AP_CONNECT;, Z% v* }: p( I7 r1 m  M- Z6 g; h
  707.       }
    , c1 j- k# R! i+ K
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    % E9 E/ P& Y5 w
  709.       dwStartUpSteps=2;
    . O5 ^. ^0 w% W7 s9 |
  710.       break;6 _4 g$ G" W- g& N+ r: q7 q
  711.     case 2:
    # w1 I* Z0 o  U  \3 t% y+ e
  712.       {
    9 }  c" B5 n7 l7 u% l% N/ O0 z
  713.         int iEOF;1 n. D& T8 N6 V9 V
  714.         FILE *fp;
      `; r! D; |2 R7 v
  715.         char szString[512];
    4 ^5 Y7 P9 M. P8 M8 R9 t; Y! S
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    8 T  \+ F0 H' e5 }' L0 V! z
  717.         if(fp)
    2 d! e7 |; U. j8 b7 K, O
  718.         {
    " J( P# |$ p( W9 a/ u% H
  719.           do3 [- h  u) v. U1 |/ }7 ~8 I' G
  720.           {' O3 h% g- d5 q6 v( `# t' a6 ^
  721.             iEOF=fscanf(fp,"%s",szString);, a$ W- @9 ], x8 Y( Q3 f7 d
  722.             if(strlen(szString))( ]8 t6 `! m4 k
  723.             {
    0 C6 c) p& q. a4 n
  724.               if(bFirstChar)9 I1 Z; r2 V1 R, z( {; L6 z! R
  725.               {
    ) g  Z- {9 D7 m9 v) t9 T. w
  726.                 bFirstChar=FALSE;. ^( O  u! p$ c" `3 j2 W8 I
  727.                 bConnectIsBig5=FALSE;
    7 Y( i3 Y' F+ i) B( X" t! j( T1 `
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; M6 K: M# E$ I# U1 J
  729.               }# y# O# S  l, f( t
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));/ R5 c( z6 L  U6 W2 ~; m
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    6 }: C" S2 Y6 B
  732.               dlg->m_ListText.AddString(szString);* ]$ ^* @' ?4 A8 _
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 Z- `8 m& G+ N$ @- ?
  734.               *szString=0;
    : d, n* K1 D+ V7 x- O
  735.             }. S" m: ~! t! J) t6 J" U' Y2 `
  736.           } while(iEOF!=EOF);
    6 E: m8 S- V  g: y6 V7 p1 @
  737.           fclose(fp);. U% X" y9 I7 F& U- q' H# }
  738.           unlink(".\\DownLoad\\readme.txt");
    , S: i, v7 Q8 T
  739.           dwStartUpSteps=3;8 y- a3 j/ v) F% G: ~
  740.         }
    " d; N( r+ V1 E3 Y# A9 g; i
  741.       }
    1 {! g' z4 }& v; w# V6 m/ R  ]
  742.       break;+ j) V- Q2 k6 Z: G0 {5 [
  743.     case 3:
    2 p- ^  b' u% t' b5 j
  744.       if(!Dn.Connected())" ^* \# ^4 Q) T) m7 [  N6 M
  745.       {
    # x7 f2 V0 k: V. D: n' g7 d
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);% H! q# @9 Z) h
  747.         dwTotalFiles=1;1 [( P2 R4 i  U% e: l
  748.         dwDownLoaded=0;% `8 m, i5 W1 w
  749.         bSilentStep=TRUE;$ a* V2 T9 z; w% ?+ z" T2 t
  750.         bCompressed=FALSE;# Z2 K7 f/ |/ A4 O5 ]+ x/ C
  751.         strExtLocal.Empty();' m* j0 M  W5 o$ a& U% i
  752.         strFullName="checkversion.txt";
    7 n) r5 [- e% Q; h! ~& u
  753.         dwProgramState=AP_CONNECT;
    . n# N+ v% r: H  v4 m2 H
  754.       }6 ]5 b* `1 S5 Y& c- G8 D3 i
  755.       dwStartUpSteps=4;
    & l3 l  f" b) t3 _4 j7 d; s
  756.       break;
    ; @! d0 F( j$ ]7 \, i. x
  757.     case 4:
    3 a& t1 ]# E  \; a- s
  758.       {1 H8 \5 u: x) J6 Y0 f
  759.         FILE *fp;$ O% v+ {5 G6 A7 |/ j  ~0 i# D  _
  760.         char szString1[128];
    ; `8 ^" r" @* d$ Y/ s" X4 x
  761.         char szString2[128];
    6 A; W1 t6 r0 \' w
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");9 O, U: {5 a* Z1 }$ s3 K1 A7 k( J
  763.         if(fp)0 h/ N, U& x' J5 A# ?( S6 Y0 v( `
  764.         {$ F# @! `: d. d% _
  765.           fscanf(fp,"%s",szString1);
    + q" b0 K" R3 ]  x& D- @, A+ A+ `
  766.           fclose(fp);
    + q' |3 K( V8 r! B# E' [6 M: N
  767.           fCheckVersion=atof(szString1);
    0 t4 L  p& j4 n# o
  768.           fp=fopen(".\\checkversion.dat","r");
    * r' s. \! ?3 Y
  769.           if(fp)' q. K: ~6 w$ t+ B& T
  770.           {3 E3 o2 h/ B  a" u9 i9 [! U
  771.             fscanf(fp,"%s",szString2);
    ) I# B* i) z8 C. @$ w3 C: t: |
  772.             fclose(fp);
    " L/ y" H5 O- [( X% \  [; s7 e) Y
  773.             if(atof(szString1)!=atof(szString2))1 A6 f' [- H- R3 r1 t; X
  774.             {
    * d. K6 {9 ~2 ~: p8 p
  775.               if(!Dn.Connected())
    # T" g8 ^  g! m4 J
  776.               {0 P$ H, |( L- Z
  777.                 bFirstUpdate=TRUE;
    + ]" J! I/ ?8 V0 R
  778.                 dwTotalFiles=1;" `% R& j5 ]; t9 v- }2 W
  779.                 dwDownLoaded=0;
    ! ~1 A' f4 x& C5 B) L; b9 V
  780.                 bSilentStep=FALSE;
    4 J' c! W4 v( T
  781.                 bCompressed=TRUE;
    / n: Y% q+ y) d" N
  782.                 strExtLocal=".\\DownLoad\";
    2 T3 }. P9 C: `9 i
  783.                 strFullName="update.txt";
    + D# \+ E) v1 z
  784.                 dwProgramState=AP_CONNECT;
    1 B8 G: I& k4 e. m. c7 V
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + A# k& x/ J; ?' t2 v# g
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 i1 R7 l& V# l: I; z. p0 H* @
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");, D# U; w6 l, @7 w; N* M
  788. : {' C6 ]" q' K8 U- A9 I( D
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * f* E1 l( t5 p$ e: X
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ! ?) a8 g( u2 C, |4 E
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    + x; z5 p9 n3 _4 A4 |) {0 ~4 W, C
  792.                 {
    7 @& P! J3 r( E. T- R
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    1 n, g3 n% _  }1 l: q& m
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    * ?3 j- N  P) X5 R$ A7 V: m1 z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ' h2 Q) a* E8 u& N6 }
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 Z; i  u5 ^2 R4 ^9 f4 J0 y- ]% n

  797. 7 Y$ [. d# d0 i, v
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( e; r3 Y! S+ d8 h( D
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  e6 t  ?# H, N' N1 H$ A& d
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! z- f- M. f' z' \8 ~, g# N
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 q# P% P! v, F% w7 s
  802.                 }7 X& J7 H2 I1 `8 P5 ]/ s
  803.                 dwStartUpSteps=5;5 D4 g2 e7 c7 v6 [1 R
  804.               }
    , @' c. Y: ^% D8 h" l, p1 s
  805.             }2 \# Y& v( p% U: ^1 ]5 M
  806.             else
    9 ?) M" o* J  X5 e! x  P
  807.             {
    + b& q' L% A6 q. X/ S
  808.               unlink(".\\DownLoad\\checkversion.txt");! w, T" ~* N8 ?' m. F! E$ N
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 H# A8 y9 ]; l( O0 b
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- _: `! g, u3 ]% [0 e' E3 I
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; F  e- b, b. ^9 S3 r
  812. 6 M3 b% O7 ~( |3 W6 {# U& J" b
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + m3 R9 ?! S& M. W3 O5 X
  814.               dwStartUpSteps=99;
    ' |- E4 R9 Z$ a$ a% e$ Q
  815.               bFinishUpdated=TRUE;3 y; I5 p: ?/ p# L
  816.               bCanUpdate=TRUE;
    9 Q. ]' f/ L2 a% E) C( }
  817.             }
    0 j7 d$ T$ @# `/ z6 m, h& Z
  818.           }% A3 N6 r. K/ ^3 `; w% A, J
  819.           else
    / y3 y8 ^+ y4 P: Y  e! J5 W) u' ~: y
  820.           {' n& L& B0 N1 [0 Z7 H
  821.             if(!Dn.Connected())
    + j. d+ b2 [8 G& N2 G- G  S
  822.             {
    % r% E* @2 [- X) }
  823.               bFirstUpdate=TRUE;
    ' O& v" v& \, K
  824.               dwTotalFiles=1;
    2 U4 z0 R# Y$ K: B. [' W
  825.               dwDownLoaded=0;5 e" X2 S. V2 r5 Z6 I
  826.               bSilentStep=FALSE;
    - ~2 d. E( R* J$ o
  827.               bCompressed=TRUE;
    $ \# X& v/ q" f. T
  828.               strExtLocal=".\\DownLoad\";; g: X1 v6 H. D) w
  829.               strFullName="update.txt";
      l& }! F6 e! G  @3 r1 ?$ ~
  830.               dwProgramState=AP_CONNECT;
    / @3 `% e0 m7 V/ z# j$ @  E
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 _  F# g5 i4 x* F4 [
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    : k+ a* d: I: D+ F+ y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");; {1 \9 x1 S" F4 x3 s/ H# S0 M
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. l4 M$ I9 N8 X1 H5 \' `$ z
  835.               unlink(".\\DownLoad\\checkversion.txt");9 P# [1 ~( H3 s, V: k
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    9 c5 |% d! A) _, b3 g
  837.               {9 ~2 G) Q: T, N7 P: E: y  x9 Y; }
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");, d' U* |# C  ~. J1 A
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    + {1 E/ D+ p' \. E- f# ^
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");% z+ ?* }& b, a) v( }" c
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 \( N! Q7 I8 K. r* Z
  842.                 0 \; W7 g8 A% H) }$ n3 n1 e
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    5 }# x- p" O5 M& G
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- l" |9 m1 t' N6 P$ \3 Q
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; L7 K1 M1 p/ ^6 E6 E
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & V* M6 S  A6 m) q
  847.               }/ ^8 \$ i: c( a: x' p( o
  848.               dwStartUpSteps=5;
      j5 L. B' {2 P, _
  849.             }: Y/ u( |4 p+ `
  850.           }
    6 H; E! T4 e: G: K; s  r
  851.         }4 A2 C- B+ `- k6 e6 O
  852.         else% K7 K! i( r  `5 D0 `5 `4 [
  853.         {
      a, @5 b# @9 s
  854.           dwStartUpSteps=3;
    3 o, U% A6 w4 H
  855.         }% K% E' }2 l4 P" N, O8 T
  856.       }
    2 X* R! r, c# u8 i" }7 y
  857.       break;$ Y$ d( {  T4 d* x1 a
  858.     case 5:( Q9 F. p- E* M. f' v0 F) B* g; Y3 J
  859.       {; G+ ^3 G% {. ]
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
      H$ i  P: p* j1 H
  861.         {3 w7 N, E9 q% I4 o/ }: T- i
  862.           int opt_overwrite=1;
    % s$ m* K, U) j2 W6 M7 E/ ^
  863.           int opt_do_extract_withoutpath=0;
    0 `- T* g3 S7 v8 k( U8 X
  864.           unzFile uf=NULL;+ W  l% B# ^  n/ Y( I/ O

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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