CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
! a+ b  U  |, q4 K$ a
  1. / RevApp.cpp : Defines the class behaviors for the application.9 o- ~9 D& T! B
  2. //) z: O. X! [8 B, V! ]4 P

  3. - _( R0 M3 o. t
  4. #include "stdafx.h"
    & e* ^" b5 q+ n! \9 ^0 |
  5. $ ?% ?$ Y9 W: o& C' A& R8 ]3 ?
  6. //#define UNICODE
    * B& H. D% W; z8 i
  7. //#include <gdiplus.h>
    2 _( j7 N6 ^0 |3 _7 v7 \5 @! Y
  8. //using namespace Gdiplus;
    * A* ~/ ^1 E+ e2 C. V2 k* t
  9. # z" e+ e0 Y3 }; Q$ u
  10. #include "RevApp.h"+ @9 P6 |" }' l: Q
  11. #include "RevAppDlg.h"( _3 R) ?  Y% t* V6 m/ F2 g

  12. 3 }, Z$ X+ G' A* Z1 F8 `
  13. #pragma warning(disable:4786)
    $ @1 ^7 g( j( Z3 A
  14. #include <map>
      Q8 _$ V6 C5 _( x, O
  15. #include <list>6 t' P% H1 i4 G1 N
  16. #include <direct.h>
    8 Y) h* Q" u2 r. s, L! a

  17. ; @0 ?  A  H+ ]0 m
  18. #ifdef _DEBUG
    & Z) v" \  e7 w# ]
  19. #define new DEBUG_NEW
      ~3 z: V( S" e* Z
  20. #undef THIS_FILE
    7 z& E& l4 L" g3 p
  21. static char THIS_FILE[] = __FILE__;0 X, D8 o5 q) [) o, n
  22. #endif
    ( F3 {5 R# w% y' p/ A; s
  23. #include "SkinResDef.h"- e3 i: d" z# y
  24. #include "ChangeBG.h"
    * O. y" Q9 I* I) O% f2 J) C
  25. #include "AFXINET.H"" ]: }$ A9 U# L4 b
  26. 4 g; r+ t  B9 c6 X, y9 \% Z: K
  27. #define TRADITIONAL_CHINESE 0
    0 T8 z% L7 k( M
  28. #define SIMPLIFY_CHINESE 1
    ) q. X* g% O8 ]. U. R( L2 c
  29. #define ENGLISH 2
    & q9 d- m5 b# C/ s
  30. int m_iLanguage = ENGLISH;
    7 r6 j4 Y7 W: ?( j) O+ ]- D/ G
  31. ////////////////////////////////////////////////////////////////////////////// `, ?, Y  L7 L0 j, ?
  32. // CRevAppApp" F" z9 o& F/ n6 G0 g

  33. * ~4 B  k- f+ ^. v5 s6 D7 g0 U
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 {6 y+ Y  J% k, n
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    4 |) q" Z: y0 A! W) v* K5 z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    6 L7 k* D4 p9 ~  F# C* l& n' q/ P
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    2 \. O0 w' _) `
  38.         //}}AFX_MSG$ T, B- [7 w0 \" V! `
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)* x3 A9 P3 F/ F: d: f
  40. END_MESSAGE_MAP()
    * f4 p* K& m- Z  j& f, b

  41. + n  y$ i* I8 U+ J8 t7 C
  42. /////////////////////////////////////////////////////////////////////////////
    ' X0 g0 K. N. \0 Q
  43. // CRevAppApp construction
    $ n& p, o1 @0 l7 _) X5 d, k. K
  44. . ]! f. \8 W$ v0 z) ^$ |. U  ]+ k
  45. CRevAppApp::CRevAppApp()
    ) i+ e  F1 t' S  Q8 M
  46. {+ T6 g# }0 ^6 V
  47.         // TODO: add construction code here,$ j  o1 V. t7 h. z. B: t
  48.         // Place all significant initialization in InitInstance
    9 A* |. Y/ c  {! h: e4 p% U
  49.   bDisplayIsBig5=FALSE;
    ) W8 U' l/ H1 d- a
  50.   bRestartUpdater=FALSE;
    ( t/ r+ n3 V. S) ]- F% v4 |% L
  51.   bFinishUpdated=FALSE;
    5 Y: w/ Q4 a( B% g  T8 M
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    , u: Y# r. W) ?
  53.   InitChangeDataBig52GBKS();
    . m4 t+ i9 s6 ^) q
  54.   InitChangeDataGBKS2Big5();# d3 h8 w* o& g
  55.         //
    ) y$ }, e, D; h* ~  v, v8 I
  56.         bClickRunExe = FALSE;
    8 o/ q% t# o3 B  p
  57.         //3 {* `3 q/ c+ }4 n# o4 T7 f& L2 i  d
  58. }8 v( H( {! Z! l/ Z9 ^! w

  59. ; O7 F, o, s. S2 R' o8 S
  60. CRevAppApp::~CRevAppApp()
    . P5 I8 u& q3 \; q
  61. {
    4 I6 t# @1 \8 s, h# D% i# Y& h
  62.         // TODO: add construction code here,
    ; i1 S' @( t( s4 b
  63.         // Place all significant initialization in InitInstance4 W3 Z6 \  F( v
  64.   EndChangeData();( x' V/ h* P2 d$ {/ @5 v1 {
  65. }' f* x- \, ]  ~

  66. 4 ]& @0 t2 N1 E, @
  67. /////////////////////////////////////////////////////////////////////////////9 L6 G! R& b: A" |
  68. // The one and only CRevAppApp object/ {8 v* C# F- w8 h; `
  69. 2 K) y' i  R- w$ }7 J
  70. CRevAppApp theApp;% t4 k+ z9 o" @" `
  71. # ?, [( Y. R6 Z, p  I
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    3 V) s" ?2 f) z( @
  73. {
    1 p* @1 ~8 A) g/ W; T( V( S7 D
  74.   int iEOF=0;
    + w7 ~$ e  @- ?4 T2 ~5 l" v
  75.   char szTempName[MAX_PATH];0 J$ r5 p* v3 ~! q
  76.   *szFileName=0;
    0 ~) ~! X. t. g. Y$ ]
  77.   iEOF=fscanf(fp,"%s",szTempName);
    + o: e( g* K) }8 ~* o
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')# L& L8 c% s5 y) D- }" q
  79.   {
    + Y6 u+ l7 b' U: s$ k4 v
  80.     strcpy(szFileName,&szTempName[1]);  M: @. N; s. ^/ A( E8 X( J
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)' P/ x2 z2 q' s: K
  82.     {
    4 P" e8 N% C- w0 O* V# M& ?- o
  83.       iEOF=fscanf(fp,"%s",szTempName);6 ~3 T. W2 d- N) P9 n
  84.       strcat(szFileName," ");
      E% H6 M' d5 s3 ^
  85.       strcat(szFileName,szTempName);' h' a! D* _6 J
  86.     }5 [7 g" t( U3 O/ w1 C
  87.     if(strlen(szFileName)>=1)
    " {' E; S9 j3 n5 D7 ~. u
  88.     {- ?# y. |* P8 N/ l8 g5 H8 r
  89.       szFileName[strlen(szFileName)-1]=0;
    - }" I5 T0 b, s, ^# w
  90.     }# Q2 J  {9 p5 _% w# q( R# V& H
  91.   }% I5 G3 b4 s& i
  92.   return szFileName;
    8 L# y1 m! w4 [, i' h
  93. }; ^5 O' m# d) \  v

  94. ! ]5 |5 ]/ I2 S) U# p
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ' y/ ?- A9 O0 V7 A9 |2 H
  96. {( P! N: C2 M( w6 N
  97.   FILE *fp;7 e% D+ s3 D* U3 G9 z1 B
  98.   char *key=NULL;; D0 d4 e+ T# C$ ?9 Y
  99.   char version[MAX_PATH];9 [7 I: V5 V# P- B3 n
  100.   LPUPDATEFILE file,olds;
    8 L# P- {9 m) X$ J8 q
  101.   std::map<CString,LPUPDATEFILE>::iterator p;! q. N0 J4 O3 n, D
  102. : l1 I4 V0 c; p) J/ y
  103.   UpdateList.clear();
    / o- T( c5 k( [" }) s2 B( G* W7 j
  104.   UpdateFile.clear();
    ' x! h) Z* H8 H- }3 w
  105.   if(GetFileAttributes(filename)==-1) return false;
    $ D& Z0 X0 q# m; J; r) G
  106.   if(!(fp=fopen(filename,"r"))) return false;
    : o' ]: E9 t/ Q: x- y' C
  107.   fscanf(fp,"%s",version);
    1 T4 j( X8 a& |3 L
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }0 Q6 P& o/ p( O8 O! O0 O6 ?, |
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ! k9 w7 I! }! D) B) o2 s" `0 o
  110.   {
    3 O1 N% |! E* d/ j. s$ q
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& ^: T3 ^- L; L8 S$ i
  112.     fscanf(fp,"%s",file->path);( _" r* l4 O# i+ m  @7 A0 Y2 `
  113.     ReadFileNames(fp,file->file);
    9 S, B" @# L/ N% x( m
  114.     strcpy(file->full,".");
    8 t7 Z/ v3 U( b$ Y* I! Y8 q6 ~
  115.     strcat(file->full,file->path);
    + }4 c1 \7 `4 G* T# e$ ~
  116.     strcat(file->full,file->file);
    ) d6 _( z5 o( ^6 b/ L! m
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ) h9 z( p' e8 P$ e
  118.     {
    8 _& J6 F" V4 P
  119.       file->vers=(float)atof(version);- J2 I% l  @9 n8 T: N, t* A. `
  120.       UpdateList.push_back(file->full);
    & S$ w; j  T5 q1 I; q- F# l2 t+ i
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));) ~. ^; B7 P+ g+ P$ y/ w
  122.     }
    + h9 `; k. ^. y( g0 M
  123.     else% ?: E+ k7 b5 x7 y" w7 }. j9 {0 n
  124.     {
    : y9 A' ^" ~% N
  125.       olds=(*p).second;, Z7 v2 e4 s# T+ m
  126.       if(olds->vers<(float)atof(version))
    # @+ i/ Z5 J) y/ i0 Y
  127.       {/ Q: t* u" q/ G+ f
  128.         olds->vers=(float)atof(version);9 W+ x1 b8 G+ m" h, r) R
  129.       }
      {1 p. |; F  L( k* Q8 j& p9 j7 t0 r
  130.       free(file);
    - N; T0 K# P$ ~
  131.     }
    , a6 E5 I8 w5 T" K
  132.   }) z( ~  a% e2 t$ U
  133.   fclose(fp);& L) ~) B. {4 T) c. c
  134.   return true;: \& N4 H6 c: o/ s
  135. }  B& ]0 h+ c4 r: r, n8 g% G

  136. ( V6 a  V, R. W  ^3 X3 ]) I
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    2 y. I( Q! A& p: Z% B1 n  p& l
  138. {( }+ W  S% v: m. z1 R; [8 C
  139.   TCHAR  szFull[MAX_PATH];+ ^% |9 z2 ~/ q( a1 Q& g
  140.   TCHAR *token,*inter;0 ^1 w* T& Q5 `, _8 |; M  H- N- E
  141.   *szPath=0;: N7 E  M  T3 O1 N4 Y
  142.   strcpy(szFull,szFullPath);0 T  F# O! t2 m' H
  143.   token=strtok(szFull,"\\/");* [7 x' U( c; ~1 o9 W) v
  144.   inter=token;
    - k( Q; P+ p9 V$ m' z* U
  145.   while(token=strtok(NULL,"\\/"))
    / d% V  H# X& C# ~3 e
  146.   {+ @6 g% K' r1 v0 W7 Z4 K
  147.     strcat(szPath,inter);
    & `1 Z0 p5 B; A4 A7 b5 e
  148.     strcat(szPath,"\");
    7 c: E) f  x: q8 I
  149.     inter=token;: ?0 K- }; `) k3 v5 D
  150.   }
      c0 l0 U7 F" r! B. ~9 o# E: }6 S% T
  151.   return strlen(szPath);- ^/ b5 u: x# e# f8 h  y
  152. }3 V1 s$ L2 `7 T; p# h# Y
  153. ! q* c  p2 I  }& {
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase). `$ c9 h1 w; i1 ^8 g# z3 I
  155. {% W8 P- E% T! b/ _
  156.   DWORD attrib=GetFileAttributes(Target);
    2 s2 W, V7 {3 x, s' r1 g( x. c
  157.   if(attrib!=-1)
    1 M0 ?4 i3 i8 v* _- l- U
  158.   {
    5 L/ M; x1 _9 @: A8 l/ z$ t2 B
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)), z! E9 U* Z' L% s
  160.     {
    ) j/ U6 a8 |8 E" @
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);. M/ V; I0 n0 e0 d5 c
  162.       SetFileAttributes(Target,attrib);
    ! I1 }2 t7 c9 a* k. ^8 J8 d
  163.     }
    3 N  g; {$ z: H1 v. ]" g* c
  164.   }
    $ N# S- [. g8 M* R/ F
  165.   CopyFile(Source,Target,Erase);6 Z1 c/ n" U& q$ Q0 E: a4 Y' @
  166. }" F5 Q5 R; @3 N6 j' {2 j2 G  _: t. K
  167. ' s! o( D" I8 O# c3 I5 U
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    2 H; ]! Y& W) v3 J$ p# s# o6 R2 C
  169. {7 Y* w5 b4 k/ N, f
  170.      FILE *fp;1 j+ ~' |6 l/ S3 j. n! U7 ?
  171.      char  szBuffer[8192];
    8 t; P" f+ t4 d, |8 T
  172.   va_list  argptr;
      }- a& D0 k6 J1 ?, X7 B$ V
  173. 9 j% N0 K0 x4 w9 V' x$ ^$ d9 d
  174.         va_start(argptr,message);5 R" Z" U, w+ B+ W( A
  175.         vsprintf(szBuffer,message,argptr);
    # J# k. O1 U0 n8 Z: c) I+ W
  176.         va_end(argptr);
    9 N! C/ q5 G1 R( y
  177.   fp=fopen(FileName,"a");
    / j( H3 J5 ^2 P( b
  178.   if(fp)
    4 B: a3 O1 D- f9 c8 w: X6 X' d( r1 c
  179.   {3 ]4 f: v6 I, C
  180.     fprintf(fp,szBuffer);  [2 L3 ]7 O: R
  181.     fclose(fp);
    7 P  @0 x; U( k. i. ?  R9 j
  182.           _flushall();/ g7 t$ n1 S4 C3 o# ]6 y2 A7 C6 v
  183.   }$ g: b" L  |8 F$ j3 q, b
  184. }3 e8 e9 b* @- g% f# Q+ N/ P. L$ F

  185. + w  R* C# ~' {8 Z: e& p
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    - x! }% s, [) @% ~6 j
  187. {$ S# e2 A* Z" d3 v: v
  188.      FILE *fp;
    & A3 q. w9 F3 ~" e3 L2 |
  189.     DWORD  attrib;2 _7 b" o  N; R: L
  190.   attrib=GetFileAttributes(FileName);
    ) R; J5 T: R) |" m! F
  191.   if(attrib!=-1)' O- C- g9 R! V' S: V4 _
  192.   {& ~/ X* a  Y9 B9 I
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);6 e* U" y" m0 e1 p
  194.     if(!SetFileAttributes(FileName,attrib))% s; ~  ~7 m$ X- H- J- B- z5 Y0 K- K
  195.     {  ?! `9 f& q3 a5 o, \9 |
  196.       return FALSE;
    5 ?( z4 p" R; ~3 @! k
  197.     }! k$ D7 w4 S; O) ~
  198.   }& O1 p) }4 Q) c& t9 q
  199.   fp=fopen(FileName,"wb");! m$ ]7 x* b+ q( e6 S( [4 e
  200.   if(fp)
    : I) U% H4 y4 P( z: i
  201.   {
    - H! s  q; i. {' t7 V& V( @$ `
  202.     fclose(fp);+ f8 |1 h; a( Y- v" b& s7 y
  203.   }9 B: u/ t/ f) M
  204.   return TRUE;& ]% P2 r& f& W: Y1 `
  205. }
    7 L6 D4 _  s) \7 M2 z

  206. ) |! R# Y" m% A7 ?
  207. BOOL CRevAppApp::UpdateLocalVersion(void)  L4 Q( y5 i2 v5 y: @# f! }2 i9 _
  208. {
    6 c1 ?( X7 m1 s- F4 M
  209.   char filename[MAX_PATH];: K& U' v# Q% R5 @: k" O3 h( q
  210.   LPUPDATEFILE file,olds;
    $ t/ m% G# J+ d( j
  211.   std::map<int,CString>::iterator i;1 i- [! l: j9 M% G* H0 Y1 X% w6 \
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( K- O7 `9 I/ i4 @* s! |
  213.   std::list<CString>::iterator l;
    $ \: `2 a# D3 Z4 `
  214. 4 S4 _0 W. k' f9 U$ k
  215.   if(bFirstUpdate)' A/ }6 }6 g' j2 Y4 o+ p2 J
  216.   {  _  s5 v, A! ~& c1 G) A
  217.     dwCurrFile=0;
    2 S7 v9 _4 ^/ V
  218.     bFirstUpdate=FALSE;5 y" @& h7 f/ S& A8 W# R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # o1 w/ {6 N) u
  220.     {: m: D- B$ s5 A* U
  221.       dwTotalFiles=UpdateLocal.size();  V/ W  H' E* a- V; _  I+ U4 r
  222.       dwDownLoaded=0;6 [/ O. B, D4 t8 q$ i. x$ P
  223.       bSilentStep=FALSE;8 k/ A+ t2 I) P5 ^. h: s+ i( X
  224.       bCompressed=TRUE;3 t3 e2 D& v  o9 P. r
  225.       strExtLocal.Empty();1 o  D1 m4 [  g0 E" d
  226.       strFullName=(*i).second;) J3 B; v; E- Q2 _$ I
  227.       dwProgramState=AP_CONNECT;
    1 ?0 V; X3 i+ q8 a! A9 ^3 B: Y
  228.       return TRUE;$ g3 ^  _9 R: }. |9 m# E7 G# C+ N
  229.     }
    / ^/ H, D# T# c1 r* C
  230.   }6 D+ Z. w, d0 d
  231.   else if(bRestartUpdater==FALSE). E5 u/ n2 F) `2 X5 s) ?3 n) }7 o2 O+ E
  232.   {1 W; `  Z4 I+ a. _. W# k% {, Y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    3 y3 L# }4 {) t: W9 \! K' G. Z
  234.     {, a+ y' \# i8 |; D5 J
  235.       file=(*p).second;
    ; h3 M6 x. e+ {5 F. i, ~# a
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    % r  _& {( x4 S# D, Q! T& {% Z
  237.       {
    , u( s/ T3 i* E/ {/ X6 X
  238.         olds=(*p).second;9 _5 Z( M& R/ F
  239.         olds->vers=file->vers;7 x5 N8 E( f- F
  240.       }4 n0 w0 T& T! F% F6 \
  241.       else
    ' p# Q" M- P' B8 T# j& K
  242.       {
    4 p  M: G; j4 x2 H2 `
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ G2 a4 a$ I# Y6 i
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ) L- O! \( `6 y1 w% j
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));* e  c$ E/ H* l" H
  246.       }& G+ C+ _* C5 Y# n" n/ E
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");4 F/ K$ G; y4 |
  248.       sprintf(filename,"(%s)",file->file);
    9 i9 V$ ^- R- ~+ U; J) x
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 n$ I9 B% ^* W* l4 U0 g4 X
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    7 x5 v$ H: M& ?+ @8 t  k% w
  251.     }
    " E5 E# K9 X* u' G0 p( h  ^; \
  252.     dwCurrFile++;
    , E4 x3 P( R$ T7 G5 m3 F8 t! U
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . T7 K( H$ e  h5 Y  @1 E$ Q
  254.     {
    * c) r" a3 o, f
  255.       bSilentStep=FALSE;
    8 O* q9 x8 v1 b/ k3 c$ X
  256.       bCompressed=TRUE;
    1 u4 j/ A2 ?$ Y3 J8 I. u
  257.       strExtLocal.Empty();
    4 S2 U+ H1 D) w7 n3 M" m
  258.       strFullName=(*i).second;
    3 i3 e0 ^$ H' q3 X& L2 Y1 P4 H
  259.       dwProgramState=AP_CONNECT;
    : c' f( {" }! R! I
  260.       return TRUE;8 v! d* O. P, t, Q3 y- j" z
  261.     }9 V5 h! B: U6 I5 a" ]) s
  262.     if(!bRestartUpdater)$ S" j1 S  D& y
  263.     {
    ) s4 j. G( G9 B5 T* N
  264.       int iCurrSize,iFileSize;% O* m* O. [5 t6 d6 r* V
  265.       iCurrSize=0;. o0 f2 x. x/ d: P1 G
  266.       iFileSize=UpdateList2.size();
    6 [, b( D# }( h# x. U
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");9 X4 R8 v6 J- i1 L5 W; p
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");) [$ A: x& |* \; U; c: v/ i
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ! m. J3 ?" a' R: b7 r% I, F) [; W2 U
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 i' e# d( \. B1 W/ Y  o! V
  271.       Fclearf(".\\update.dat");0 ?: w5 M% `+ t+ G5 w3 k1 R9 I
  272.       Fprintf(".\\update.dat","Bloodyf\n");1 u7 q8 z7 I; c. n3 o9 d
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 n. h0 o* F! R2 |7 G8 w
  274.       {
    - V5 {& E( P3 }+ o6 m  K9 D
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ; h  p; R7 |. b# N
  276.         {
    - n# Y6 ]1 e2 [  z4 m
  277.           file=(*p).second;
    : f" O! C8 [5 m
  278.           sprintf(filename,"(%s)",file->file);* H" N9 l3 ^* X2 g! W* r
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);2 R6 x' y0 S: F9 t) x( Q. t* q
  280.           iCurrSize++;
    ; s2 d8 {" O( A! A3 U5 `6 {
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    3 [* ]8 C8 S" f- d
  282.         }0 r2 p" g+ i7 v% h3 @1 O2 L
  283.       }' z; s- N0 [# O) l
  284.       unlink(".\\update.txt");7 l/ _% [! G  C
  285.       unlink(".\\update.tmp");6 f, R" a4 ?1 ?' ~7 J
  286.       Fclearf(".\\checkversion.dat");& f# H: d. g  v/ B4 y# ~0 }6 s) `
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( y. E$ L) `9 N9 i7 k
  288.       if(UpdateLocal.size())0 i/ C0 D5 I' u1 r
  289.       {
    ) H. m" B) ?* g% ^( H
  290.         UpdateLocal.clear();
    0 L8 `2 E/ J3 d& n! s* E3 J
  291.       }( R+ D+ F: g( Z: g! g; `/ |
  292.       if(UpdateFile3.size())# p& \' ^' p' }- [
  293.       {( a' X' D" d& Z# Q8 d9 [8 P
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * C( ~/ ^7 j8 f- o
  295.         {
    % n7 }# P6 ~7 w; l7 N
  296.           file=(*p).second;
    / R7 u) q; P. F- I+ n
  297.           free(file);2 E/ W4 v7 j& H, P3 c& ^5 |8 g
  298.         }7 E  J9 P# E! p$ D$ u6 C
  299.         UpdateFile3.clear();# H$ S. `1 u$ ], g* i
  300.         UpdateList3.clear();
    8 e/ e2 x& ~% t$ S+ e* [
  301.       }( D- E1 `! o& S1 D5 \! o/ M! i/ ~. Q
  302.       if(UpdateFile2.size())
    & Z* M& p- ?" g4 f& ~% S# M
  303.       {
    # r! D9 y; [1 [
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " t$ q' C5 ~3 V2 u
  305.         {3 E2 A; g9 M- L: w3 k1 a
  306.           file=(*p).second;
    : B6 j. t4 t6 b2 a4 G  j; W" N
  307.           free(file);
    ; K9 ]# o4 E9 x
  308.         }
    1 V; l" E$ v  B# P$ K" Y: W( ^& c" e. O+ f
  309.         UpdateFile2.clear();
    3 @% o% ~: Q/ ~9 u
  310.         UpdateList2.clear();
    & C8 s; k* L  H5 K  n+ U, ~5 w) b4 f
  311.       }
    1 I1 A9 I' R' F& \; f5 S; q. b
  312.       if(UpdateFile1.size())
    & E7 s1 h9 X/ F$ E' n
  313.       {+ g; \" m( {# R! \7 L
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # B1 I3 \- G4 S( T# k# L7 k. S
  315.         {
      `6 _4 C& d0 z5 {
  316.           file=(*p).second;' c" Q1 c+ H) f. a2 W# z  c) |, ?
  317.           free(file);! C+ P8 |! ^6 r1 {5 M' J
  318.         }
    % ]# _4 V. z" W- B! u4 @! F1 k
  319.         UpdateFile1.clear();
    1 s4 z* P5 U# M
  320.         UpdateList1.clear();
    5 i$ H+ h3 y8 a$ n9 D
  321.       }; H2 ~% _' v% p& u( f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    / m' v" S/ L3 @6 D. }2 M& V1 k/ [
  323.     }
    2 c& x9 g( G& B9 m2 {8 E( \  _
  324.   }: [+ x6 E3 t; m+ \
  325.   return FALSE;7 Q" q- r5 O. r6 B) K& z1 ^3 Q
  326. }. _& s8 O% E+ c- I5 u
  327. 7 w" p0 }, n" }4 a  R
  328. void CRevAppApp::ClearAll(void)
    % b$ G' E, P5 t! T
  329. {
    ! ~$ @+ F; i: e2 u
  330.   LPUPDATEFILE file;( y0 _. V6 E9 I- C6 K
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 O  G; J# z5 s, L

  332. 9 Y3 u- R- Y; r8 z* e' H. ^2 B
  333.   if(UpdateLocal.size())4 a! E# e$ ^! q* k* {4 N7 f
  334.   {8 F+ o5 `$ i; U" h) D
  335.     UpdateLocal.clear();) V$ h0 E+ X+ R( Z3 M; A1 g
  336.   }
    3 A6 z3 [! T; H7 U# J6 [
  337.   if(UpdateFile3.size())8 f" B4 U" j* B% ~
  338.   {
    & U5 p2 ?% [3 j2 e2 f
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " z) m9 a% P" X/ Y3 T# X, M! h0 d
  340.     {
    , k8 p' K% M8 O$ S0 M1 c6 r
  341.       file=(*p).second;
    3 ]$ [) _( q$ ~1 }
  342.       free(file);
    ; Y6 `# Z; C, R1 f7 a. [6 L
  343.     }
    2 @% W8 b. `4 a, u2 i1 |: c
  344.     UpdateFile3.clear();
    6 t$ h" d$ x  I' |- |8 p: i% z
  345.     UpdateList3.clear();# w9 X' D+ g, i. G& r8 p
  346.   }
    & E+ f5 o- R( c% R7 J5 X
  347.   if(UpdateFile2.size()). e* d5 Z- @9 Y) W( K
  348.   {
    1 c. N. h0 _( V/ `
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " {" C& e0 o0 X
  350.     {
    7 K; {2 T/ j. f; @+ Z! L& _4 W
  351.       file=(*p).second;8 l& k" K4 \( ~9 e# h* g
  352.       free(file);
    2 A1 \6 r$ Z. J* [5 a
  353.     }
    ( Y  J% M, U# |0 @# F, T( w4 [' a
  354.     UpdateFile2.clear();
    ( A: x+ U, \/ F, U
  355.     UpdateList2.clear();
    8 ?# W  N3 `& o1 j8 @! w
  356.   }
      @7 j5 z% l( `' c6 R  |) j  W( u8 C$ @
  357.   if(UpdateFile1.size())" v! }7 n8 r) e- ]0 \. h
  358.   {
    ( X' f% ?2 C6 Y) \0 m
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* ]+ ]/ d: F  W& t
  360.     {
    . T7 f1 K4 C4 D" @
  361.       file=(*p).second;
    8 z; y7 O. }3 g0 z! U" |' ?
  362.       free(file);, `9 s4 B  o( O  E7 g& Y
  363.     }$ }6 t  o  z1 c) t  s
  364.     UpdateFile1.clear();& G+ P# z- o+ A; o% ]' S$ i
  365.     UpdateList1.clear();$ Y$ }. a8 W) I$ ^# ]6 |& T
  366.   }
    9 d5 j& r2 K! L; s
  367. }  
    # P" f2 ^1 q- U: K2 @: Z! Y
  368.   
    3 n4 {& ^1 d9 t$ B5 }8 R/ C
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 p4 b$ Q9 B8 U  b
  370. {, z. ?3 k+ u! g
  371.   int c;: _! R( l) k) s( T) o9 p
  372.   LPUPDATEFILE file1,file2;
    2 u9 Q( V3 n  C; T  e
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    % {5 B! A: {  |% i7 v- o; z
  374.   std::list<CString>::iterator l;
    * T1 z2 ~& ?0 N+ s* j, ?/ Y

  375. - C' m8 l+ ~; K( Y3 G: }
  376.   UpdateLocal.clear();
    9 `5 c4 d( E2 j# @8 C
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);8 U3 y- V7 X) ]% f& p
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);( u; z0 k3 V2 y: x, {$ B) G6 E8 E
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    - I7 S) m  ?; c' c+ ~1 g
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);7 X# Y9 u- a3 k- o9 g6 L0 }
  381.   if(UpdateFile3.size())
    * F7 z5 {  @( |. u+ Y+ E
  382.   {
    8 N/ ]) h3 g0 @- z  z
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)- \1 t' t- e* F
  384.     {
    5 F& H+ E3 ^- o7 G5 H5 f5 e, U
  385.       file2=(LPUPDATEFILE)(*i).second;! B8 @, {* E; h, c) q8 q6 O
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 n, J$ ?/ J: ~6 @) _
  387.       {7 H' m9 N2 y! J2 o  o
  388.         file1=(LPUPDATEFILE)(*p).second;
    ; y2 Q9 q. ^1 O; Y+ h) C
  389.         file1->vers=file2->vers;" f: _$ Z6 P% X& }
  390.       }: g& W& y  U8 b
  391.       else
    7 B4 d4 X# x6 _+ k
  392.       {
    8 f+ |; H1 e8 Y* L3 k- {3 _
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* v# X9 B1 n9 U0 s2 b
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    0 b, r- A) Y% W: P' ]
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    " }- z% r( N0 @: N) a
  396.       }$ S5 c# Y- R3 _, m% ^/ a
  397.     }
    $ J0 U. o5 B. S# |
  398.   }- Z( H) i9 I$ y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ' }1 F0 {% I! q  |6 O
  400.   {5 ^- r, I! ]6 N8 k/ d( Y
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()); T/ E# w1 q& h7 F
  402.     {
    # x5 C) P: X( C/ T/ o6 {$ ]
  403.       file2=(LPUPDATEFILE)(*i).second;
    + |* e* R9 G0 ?, f! T/ T5 a0 Q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      V( b$ Z# C- K6 l
  405.       {
    ( F2 Q0 X. {# T# T# d
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 |5 m6 B+ a9 `" @& n7 n6 {
  407.         if(file1->vers!=file2->vers)
    ( d* U# @8 T! C
  408.         {
    # H  G, I1 y& Z/ a1 Y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / \! f8 B# u1 i5 u* |( l
  410.           c++;: |! ?( v9 N# ?- K$ m( g* U
  411.         }
    2 F' e# j" b' {
  412.       }
    " S- a( M9 ~- k4 U
  413.       else3 G) N7 b  D5 ]5 j
  414.       {
    9 f. j# ~( X" [3 m, _) q
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # @  S0 ~( V4 {3 D$ {7 A& B
  416.         c++;# h9 M7 G& z7 f, s6 F
  417.       }
    : C; u# l- |% K3 q" m, ^# t) ?
  418.     }
    ) b  H* f0 v2 _( J+ E$ I
  419.   }' v3 i6 |0 Y- R# w
  420.   unlink(".\\DownLoad\\update.txt");( {1 j/ s, Q1 @
  421.   if(UpdateLocal.size()) return TRUE;
    ) z+ l9 J# J* \; d) n
  422.   else                   return FALSE;
    7 U# i5 N" J5 `- {  P7 \$ |$ _
  423. }8 \+ k/ N/ i, R

  424. 0 w+ M8 v8 N0 j: [# P
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"- A& p8 I" ]5 U  h
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    1 r, ^$ }% z% ?$ Y) G% _' t

  427. & v( [8 X. O: \2 X* y

  428. ) E% C  `, a3 M9 s
  429. # {9 }# p/ Y& v2 Y% |
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    5 p* L' A# y7 ]1 b0 j
  431. {8 f( K2 V8 _* ?4 O7 c" q6 ]
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    . ?+ J! R& A5 J
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 j$ g: f( C) f6 F
  434.   {
    3 @1 l- c+ i+ J3 ]' n+ f' e+ R
  435.     char szLanguage[50];6 h1 K, b4 @' Z) E8 x) c; q: \. h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 e: M# S+ Y7 ^. i7 x& O/ T" O
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, N; }; J& R. N9 x6 k" O" R
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# z$ C( i2 v+ t) l" c% }
  439.     else                                   m_iLanguage=ENGLISH;5 p  E5 W9 S# }2 q' _  T( q$ T) Q
  440.     char szRegister[100];) _1 U: N! @9 \* \6 i' d) K
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & d# o1 A: r! _8 g% ~
  442.     strRegsName=szRegister;% z, @, f) f* p$ Y+ E0 J$ D& E
  443.     char szPatchURL[100];/ P8 K, f  [! R5 g/ O7 O$ w
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" S& ]  N! l4 }5 g5 G
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  |9 e& R2 C7 Q0 k  o9 O
  446.   }8 v9 e& y0 D3 X, L! g, D- N" H
  447.   else
    " X+ \9 v; P+ |$ _! j; ]
  448.   {
    - F7 I1 v% y6 Q2 [" V
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + }1 N1 v) u; Q' q) p; x2 u
  450.     strRegsName=DEFAULT_REG_URL;$ s3 C3 C% @" u7 E+ w% p
  451.   }0 {6 x& t3 H) U; Q7 q
  452.   if(GetFileAttributes("hosts.ini")!=-1)- j  Y3 U5 l1 R" H* _8 c
  453.   {' Z6 E" d. n) p3 {5 q" \& w
  454.     char szIP[50];
    , I0 l. ]. K8 ]7 ^( A( f% M
  455.     char szDIR[300];  p% X7 b( z+ `
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    : R; a' k% g, z3 d' S! L  H% M' K
  457.     {
    : x3 f+ A/ O: u7 W9 {0 \
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");7 I  E1 C3 h5 m% R6 z  Q$ ?: V
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    7 {2 h7 _2 M6 r8 F9 l" Z" ~
  460.       strHostName=szIP;* W. C- }5 Z, Z# x# j- e! m
  461.       strHostPath.Format("/%s",szDIR);
    & f1 V6 n* G3 n" t2 `$ ^' D
  462.     }
    , c: U% R  c5 m# W; `* k) L
  463.     else- j" Z* }* t; R& {
  464.     {( q7 }- b6 q6 o1 B3 y8 e! `2 U! K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& C; h6 l' l3 D! I2 c  ]
  466.       {
    9 {4 e) ~. H2 {" `2 }
  467.         char szLanguage[50];6 |0 g8 c4 p0 Z4 h1 h2 D: E7 Q* i/ Z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 s+ K; j. n& I% ?1 Z
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ( w4 g' ~8 A  {  }& w" |
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' J7 Z  |+ `+ W7 C, r! g2 R* @' ^
  471.         else                                   m_iLanguage=ENGLISH;
    # S' b7 {  Q' O7 Z
  472.         char szRegister[100];2 Q$ [7 o$ @- O0 U2 z# c2 z8 o
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");, a3 r' Y+ k  V/ T1 D! {
  474.         strRegsName=szRegister;
    : ]( v8 [; u0 Y8 V) e
  475.         char szPatchURL[100];
    * j6 w/ L9 j9 s- X
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ! a4 [6 E. p! Z& F+ ]9 i7 ~, @& L
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 Y5 \; h& g/ U% i0 C: t2 n0 Q6 ~
  478.       }& H5 q+ B, q) ~# G: K
  479.       else
    . d0 c5 I5 j  b0 o1 ]% B
  480.       {: h& s4 B9 y" ^2 n1 l
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 f) F, R" z+ }" S7 S- ~3 V; G
  482.         strRegsName=DEFAULT_REG_URL;
    & @: R/ q2 l( z
  483.       }. Y8 K; a& y2 X* }4 |  n" d1 ^
  484.     }
    4 W0 M8 A) c6 o2 |3 |, p
  485.   }% s( M+ s) L: ~5 x6 T1 o
  486.   return true;
    / d) m. @( |7 l
  487. }
    ( t: }6 I; g  u' B4 X4 R/ P

  488. ) w* P2 h, n9 _8 d* B/ p- a
  489. #include ".\ZLib\unzip.h"
    4 W' x! |# u  P# N4 g& j
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 p* @( F9 W7 G
  491. /////////////////////////////////////////////////////////////////////////////+ Y3 V% s- k& Z3 P
  492. // CRevAppApp initialization
    ! j! K& ^8 \5 a- D; K

  493. 0 _4 j. q0 }) M% u
  494. BOOL CRevAppApp::InitInstance()6 Y  o2 a+ @2 O/ l
  495. {% G* t+ M6 @/ @2 i4 T
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];; a9 `( t' V& V/ Q. V) a

  497.   X5 C# o  s+ T( p$ O# @
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 Z) @( u+ [0 o2 [! t4 p1 p
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    $ T$ x( M  f2 E+ s; x
  500.   {
    + o0 F" T, x2 N
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ) q$ H5 l0 J2 ^' y6 G1 O+ h
  502.     GetPathFromFullPath(szPathTarget,szPathSource);# O0 ~3 [; M5 D5 V- Q4 |  X
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))0 @0 ?2 z3 Z  K) w6 ~5 q
  504.     {
    . _. p4 ]- Z  C: ~) U
  505.       strcpy(szPath,szPathTarget);9 a6 x+ I1 ~! d3 Z/ s0 N
  506.       SetCurrentDirectory(szPath);
    1 r6 E/ b# Z5 Z, a! p8 `6 i
  507.     }( j" C9 k" j( d7 v
  508.   }' X. J& _3 z5 \' e' H0 b3 c- `
  509. #ifdef _DEBUG
    & v( u) s" p: N3 D& l$ }5 c# }' j
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 D4 v/ x; S9 U. F! h
  511. #else5 c3 a) [0 t$ \
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / y, r  K9 ^6 ]% n% ]
  513. #endif9 R4 H# V  u  z' e! [; ?
  514.   {0 ], q$ a  r) W! e( j7 @
  515.     char tempFileName[MAX_PATH];, n; i( p4 O. ^9 B2 g# i0 A+ i4 J- Z
  516.     strcpy(tempFileName,szPathSource);
    5 ?7 u  S1 H1 A5 p
  517.     tempFileName[strlen(szPathSource)-12]=0;
    / l4 L; u; ?$ ]8 O8 `
  518.     strcat(tempFileName,"\\$CSUpdate.exe");7 \& t) W3 ]- y2 N- h% y- T
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);& q& ]: v; l( _7 j
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);5 o+ B) [0 W2 D* ?
  521.     return TRUE;
    * h. X+ t+ l& {+ q, K
  522.   }
    % c9 v1 G) a1 e2 b1 U' s- o& v' p
  523.   // Nuke 0118: Delete run.exe8 R* T' K; @% |' y
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );9 z* l* O) F, n2 f+ T: m
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ) ]3 R4 F4 N5 ~; n: n0 f
  526.   if(!ReadCfgFile("Config.ini"))
    3 a/ \% R5 w2 t7 Q  L& }
  527.   {
    + S2 [/ r2 t) }9 F
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    * a( C2 `5 N& `# i- r& f
  529.     return TRUE;/ j* i9 c, W3 r. f/ D4 x2 L. a) ]/ k
  530.   }& ~. [/ O' {6 F, L/ D
  531.   HANDLE mutex;; @" R& d  k4 n9 z3 e$ _1 D
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    6 R/ Z# ^) X: \& b. V1 l+ D# Q
  533.   {
    1 @. J8 ]& U3 q* j7 m
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)2 @: D  b& O% z: _' z) M. p8 Q
  535.     {
    ! b$ J. Y  c! N: Y* }0 R+ }( s
  536.       CloseHandle(mutex);  A; ?( C; _4 M; q0 ^
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);' p9 ?. B. t( p) o1 R
  538.       return TRUE;
    6 m+ H7 p4 Q; q  d
  539.     }7 p6 @- `' B" F+ r
  540.   }  5 N' R5 t0 Z% i* N( K
  541.   CloseHandle(mutex);
    0 Q& K: q& [7 P$ @8 Y: [

  542. ; H" e. F5 S0 `& k/ D' Q
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    0 W  d( h0 t) P* S- J1 ]: e
  544. - S/ Q9 V% n8 x) v2 q- I- T# [2 a
  545.         AfxEnableControlContainer();; {% B5 }; T" m9 z

  546. 6 A* M: A5 H/ J# z8 K
  547.   bCanUpdate=FALSE;
    % _- V# l+ q) D6 P
  548.   dwStartUpSteps=1;
    6 c8 Z+ O8 E& I( w# h
  549.   dwProgramState=AP_NOTHING;
    / K, q8 A+ ?8 T) j

  550. 0 d) K5 Q, T+ R1 ]$ X; u* |* W
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    $ T- }/ G2 R2 Z2 b: X9 Y% p9 }( O
  552. ' z" L$ t! E0 m& n3 U! P
  553.         // Standard initialization
    ) f& v% m& H  _* i! m5 ]) ~
  554.         // If you are not using these features and wish to reduce the size% I* N& ]) n7 Z5 ~/ c/ m
  555.         //  of your final executable, you should remove from the following) L8 L( ]* I8 d# |! {" F0 z
  556.         //  the specific initialization routines you do not need.! ?/ Y! {; @$ P9 q4 u
  557. 6 M+ O9 q( O8 `# ]1 B8 S
  558. #ifdef _AFXDLL$ {9 P- G# j' G; d6 P3 @
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' ]& P5 I: b3 ]6 F5 [6 N. G
  560. #else! h# u% m$ w5 C0 z% x5 t
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    . O5 i$ {1 V; w
  562. #endif+ K. ]$ g9 q1 f

  563. ' O, G* n+ [# L! D8 z& P6 E5 Z
  564.   dlg=new CRevAppDlg;& c1 {( {4 X' r: d  ^2 J
  565.   dlg->Create(IDD_REVAPP_DIALOG);6 Y8 l" N& {+ C0 `
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ; x$ N# G4 p- [
  567.   m_pMainWnd=dlg;
    5 K8 o. b: f6 a4 N. r- K- [% r1 z

  568. . \) J, l7 U3 C2 s
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    0 Z! e$ i& G6 B1 Q0 l/ o- s* z

  570. 2 c; q- N9 p1 n& Q7 [' b2 ?
  571. //  GdiplusStartupInput gdiplusStartupInput;% X' |& [. i; A6 D. \
  572. //  ULONG_PTR gdiplusToken;# g$ O9 M8 u+ |4 O( ?- p
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    9 B% q! _2 d9 p, j. P9 r2 b
  574. 8 g6 s8 ?' c" T1 i4 Z& f- F
  575. //        CRevAppDlg dlg;
    1 x  q2 [( }8 e# L
  576. //        int nResponse = dlg.DoModal();
    % u2 K4 T( J  v$ `5 g- n1 n- w/ A# D
  577. //        if (nResponse == IDOK)
    ! j( ]; l$ Q+ `0 I$ ^
  578. //        {# {) ]0 m7 g! Y1 g  @% f$ T
  579. //                // TODO: Place code here to handle when the dialog is& f5 E9 Q& V( K4 V9 }8 }4 @
  580. //                //  dismissed with OK0 z+ n- W, a! ^. i8 o0 U
  581. //        }
    & m  P6 M2 B! \
  582. //        else if (nResponse == IDCANCEL). [* v4 @. q& g
  583. //        {
    , u  \: _. x# _9 k7 p& p
  584. //                // TODO: Place code here to handle when the dialog is
    2 s0 J9 }* Z: k- m
  585. //                //  dismissed with Cancel% q. _8 V4 l+ V" R! m- b
  586. //        }
    ) H( S/ f: [0 j8 B& l2 g

  587. 8 B! u$ h# |- Q. ?! O' L
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    - N/ ?" L; k9 p7 d- t# `
  589.         //  application, rather than start the application's message pump.6 `5 U/ A7 U8 m' ~, J+ q/ c
  590.         return TRUE;% E# [0 Q% m. P- W, z( }& r+ D
  591. }
    . {( M: \8 F- x# N& Y; `7 _$ j
  592. 9 k* u& u3 D6 h' I; e
  593. char *CRevAppApp::strtok3(char *pSource,char *token)( b, {4 w- P( B: w6 ?( S, D% K$ v
  594. {3 N0 }  \$ X4 T  V& g+ l& q, Y/ J
  595.   int i;6 `, O! v) R! j: M* L
  596.   char *szRet;+ g! ]" T* I. y7 v6 ?& @

  597. 1 {7 C1 K% `  M4 h
  598.   if(pSource) { itoken=0; sztoken=pSource; }% t6 Z$ s7 I! E
  599.   if(sztoken)- [. q+ J1 n2 W" {( Z
  600.   {
    ! ]9 d9 f* O% U! S! v/ ]  x7 g
  601.     szRet=&sztoken[itoken];. Z9 ~6 t3 Y& N
  602.     while(sztoken[itoken])
    0 m7 E& l# x) A
  603.     {
    $ P+ `6 O( {2 q, D$ `, ]9 t
  604.       for(i=0;i<(int)strlen(token);i++)5 E, h: ]2 @3 N# y; _- {( J
  605.       {: v7 Y- n( z+ s
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    8 h$ ]; c. M  Z  M7 H
  607.         {  W( F  Y( g, j# C8 \
  608.           sztoken[itoken++]=0;5 b  K/ b1 N) w' f" q4 \
  609.           sztoken[itoken++]=0;
    6 K5 {5 ^* u* l5 w: V# p+ r
  610.           return szRet;1 @2 s6 v, p4 u$ a
  611.         }
    0 ~, q. @/ c! U/ I* m
  612.       }* m2 F6 F5 ]' y( p
  613.       itoken++;% \- z" j# f0 [' n% o
  614.     }
    ' ~# D! ?7 [3 r$ ^: r9 l) s
  615.   }( S  h; d) }2 Y- \2 \, u) f! J' W
  616.   return NULL;
    # w* g. f0 H6 n8 R
  617. }
    ' h/ c& F5 ^1 |' \1 [* c
  618. ! o' I  Z- v' \9 U# J; |, y
  619. void ProcessProc(long Total,long Current)4 \3 @% \1 E7 {, D; Y5 T' G
  620. {$ |3 B0 i8 q1 {( t8 E1 n( m  J
  621.         MSG msg;
    8 b  i' ~8 v3 E7 J+ K
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    : O3 U2 q; w% ?( f+ D. D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ) H% [0 j9 c# D$ N7 X- V$ @; ^% t
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    0 S, \/ U( Z4 T8 C/ m( h- Y
  625.         {
    0 I' K$ ?3 t) \. @) A' V
  626.                 if(!GetMessage(&msg,NULL,0,0))
      ?( V0 `& [( N+ c' F7 s
  627.                 {  Z8 p. I8 T' T& E% [2 C; Y
  628.                         return;
    + b6 Q9 m! J) B: ?6 C
  629.                 }
    ' ^- y6 w& C( _+ E; n' f
  630.                 TranslateMessage(&msg);: |  s- i* g' J8 y( |9 g
  631.                 DispatchMessage(&msg);& w; t6 ^: @% v% {: v* f% I' N
  632.         }       
    8 a' W  F$ w1 ^% f0 e* ?* ~
  633. }
    , p* @  m7 @8 G6 A) b, k% W
  634. 8 p9 H* S6 Q5 \: {8 E
  635. BOOL bFirstChar=TRUE;/ g* Y/ T4 D% q1 s* ]
  636. 9 `8 ?7 h' P% O& O( D/ S
  637. BOOL CRevAppApp::OnIdle(LONG lCount)7 i  [' R. i* Z9 Y; E) p
  638. {
    3 j' z* R; d3 W5 ]0 i
  639.         // TODO: Add your specialized code here and/or call the base class  W! k0 i9 N' ~! M& c1 }  t
  640.   switch(dwProgramState)4 E2 a  }; v3 h
  641.   {/ `6 d7 H; ]' y- z/ V$ q. M+ u
  642.   case AP_NOTHING:8 ^3 h" g& _+ E% O" _& T8 ~) E
  643.     switch(dwStartUpSteps); P6 _( J: J  L
  644.     {
    * M3 }. K* x5 v0 S0 @
  645.     case 1:( O( n* l6 B' B" q
  646.       {5 ^6 h3 [, H% u5 V/ j
  647.         int i;
    # t( G1 ]/ K8 \) p/ _4 w
  648.         CDC *pCDC=dlg->GetDC();
    . }# @' h1 x8 ?' `; H
  649.         HDC hdcwnd=pCDC->m_hDC;; O8 [0 u0 o; o" S) h6 l0 V
  650. //        Graphics graphics(hdcwnd);1 m- o/ K( v* [, L- ?$ C9 a" I
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    * I) k) O( D8 A. l% {3 e1 w
  652. //        INT iWidth=bitmap.GetWidth();1 w  W+ ?3 Y9 r) M. F6 ~# _
  653. //        INT iHeight=bitmap.GetHeight();
    ) E1 q3 B$ B, \( ~: _/ I
  654. //        Color color,colorTemp;" _. ~' b7 q7 k8 @' k
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)) }( f' g( P& u! I
  656. //        {
    8 e8 w* f2 w6 W+ H' J5 {
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++); C; i$ y0 e& o/ e8 Q
  658. //          {9 M# S0 D$ n& y; H& q
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    9 I3 F& }/ R9 [& Q- ^" X$ @" r
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 e5 y& j( N$ `, ~. N6 B* T
  661. //              (BYTE)(255*iColumn/iWidth),/ U: ^6 }, a1 g9 W
  662. //              color.GetRed(),
    2 {8 @7 ^) K* _3 I  ^" n" g: o6 t
  663. //              color.GetGreen(),
    # G3 D+ C0 o, z) I' T- N
  664. //              color.GetBlue()));2 d1 @1 ^6 M& i( d9 c) f
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' o' j; P( o% U$ R9 n7 Z- k0 Y
  666. //          }
    ! N0 b0 r$ U0 S+ ~7 l( |! g
  667. //        }/ S6 b# F; D$ @
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    1 v# @$ I7 \: e- C% A
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' w8 q3 f! a4 ]% b# h
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");8 k; j' C5 b! a* Q* X: h7 s
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 _: I  V/ d" I8 {. V0 W
  672.         for(i=0;i<240;i+=8)- H3 d; `- U% `) `# A: m
  673.         {9 `$ E3 W9 W9 h* t5 g
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - M: }* w" j, l0 U& w' a$ t
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 D& V' ~2 J' l/ O
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      g' [6 Z1 |% v7 X7 b
  677.           Sleep(33);
    3 E2 x1 V5 D9 ]9 j' K
  678.         }
    $ q$ C4 ?9 P. n) V
  679.         Sleep(1000);7 @2 |$ v2 R/ e
  680.         for(i=240;i>0;i-=8)6 @! Q1 U/ D! o% v' z( z& X
  681.         {3 E+ `0 q1 D0 H' c& V% U. w! W9 Y
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 p4 \' t  Q& u0 v6 w$ j- }
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 C  d% g. C' S- m3 C) q9 f1 F% o( ?
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);, E, z7 \: ^: `+ ^; ^* S1 r; w$ r
  685.           Sleep(33);
    / y2 ^/ }$ r2 C
  686.         }
    + Q8 j% x" ~& P  F
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    0 C  V8 }8 g$ z8 f
  688.         dlg->ReleaseDC(pCDC);! i9 Y4 n2 M% n
  689.         DeleteDC(hdctar);
    - M3 G8 r0 R, ?. Z8 ~; x( J8 d
  690.         DeleteDC(hdcsrc);
    , O& f3 T( }" k. J8 ]
  691.         DeleteDC(hdcorg);
    9 m( w" {" K% H6 j& R: ~
  692.       }
    , M$ G  J* i3 }
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);& N' n7 e! o+ j! l$ B3 r) u
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");4 T6 I4 I; c9 ~. a9 J5 R
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    0 t  K6 h$ x9 X( ?# w4 o9 ^
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    + l% ]0 U- s4 ~
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 [) K0 d1 y2 c3 M/ @
  698.       if(!Dn.Connected())/ F* z! ?/ J5 Y3 @% ?. h
  699.       {
    . Z: `. Q, R  P0 c' o. ?
  700.         dwTotalFiles=1;
    ' |( }$ L' s! o
  701.         dwDownLoaded=0;9 |# E, K! u. n6 R6 x
  702.         bSilentStep=TRUE;) z5 N# r/ H% d4 |4 h. w+ g
  703.         bCompressed=FALSE;! ~) D2 \5 O) x! g6 |
  704.         strExtLocal.Empty();
    ' E  E. q! J3 ~7 Q9 T/ n
  705.         strFullName="readme.txt";
    ! w9 K- A2 q. k* ]
  706.         dwProgramState=AP_CONNECT;
    ) D' P* P6 P6 O0 ~
  707.       }4 w( E$ X4 H$ ~6 f
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();* Q9 |: P, K& {3 P  s
  709.       dwStartUpSteps=2;
    ; F0 x, F4 D  x
  710.       break;
    ) y! E  x0 a( }/ `  @# [# f4 Z- S
  711.     case 2:1 X1 E5 n4 |) @+ b! f& ?( d
  712.       {7 c, n2 u- o- o% P) X# v( a
  713.         int iEOF;
    $ a) h3 A" y+ U
  714.         FILE *fp;9 h; `! y8 L, A+ F
  715.         char szString[512];3 w" ^, S- L$ I, v" Y- Y6 \, \  y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* ^" N; L6 Y5 j3 ?) h
  717.         if(fp)
    . \2 {. K- [- P/ ^% N5 G0 @5 c+ U
  718.         {. n' O! Z( ^0 i4 e+ ~
  719.           do
    7 q/ D( t2 {: P7 Y! o
  720.           {
    ' Q: R% R/ k% ?* j, H  |
  721.             iEOF=fscanf(fp,"%s",szString);
    3 f% ]0 f- }- d9 y0 u
  722.             if(strlen(szString))" e8 m# A. U0 D3 e4 e. w/ n3 u
  723.             {
    & z9 W9 k! q! u, _2 L) [
  724.               if(bFirstChar)
    * i# @8 z& G2 w! h) u, E
  725.               {
    3 T7 F9 T) `; B& T5 W
  726.                 bFirstChar=FALSE;
    . A! a. v8 j* }* S" o
  727.                 bConnectIsBig5=FALSE;
    5 y0 Q" t2 O. q
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    6 d3 T. N8 S' z
  729.               }
    * R0 H: l* c! {  I% M8 k
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));/ F0 A$ o% v$ K5 g6 h
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ) O% H2 g! z5 C4 d
  732.               dlg->m_ListText.AddString(szString);
    " E& ?8 q! Q4 t# T
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 j/ T3 S# p! o
  734.               *szString=0;
    4 ~" G" x) ~% r* N' o- J
  735.             }- z6 M  ]1 A1 E; p
  736.           } while(iEOF!=EOF);* W% L( J/ t; U2 L  z! @; V9 ]+ u# w5 a
  737.           fclose(fp);
    + r7 Q3 ~1 h7 B7 k  u! d
  738.           unlink(".\\DownLoad\\readme.txt");
    6 o8 S; g4 ^8 l. P4 X6 @
  739.           dwStartUpSteps=3;
    & N) p+ \  {' O5 \0 s
  740.         }5 K3 m+ N: Z8 _/ U  Y
  741.       }3 q: }% @8 s+ D& g( f" N
  742.       break;* m. n# |3 N, A/ |5 Z
  743.     case 3:
    ! W5 O5 R  a' ^0 X
  744.       if(!Dn.Connected())" I) j& u7 X: T7 {* ~
  745.       {- N+ W7 q& Z5 ?. T
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);( L1 Z; d) o1 E
  747.         dwTotalFiles=1;
    : N8 O- |; j# n- ^) g% K- Z
  748.         dwDownLoaded=0;8 i) C' S7 R: K6 Z
  749.         bSilentStep=TRUE;
    % d0 y# c: P, i1 ^3 y) ?
  750.         bCompressed=FALSE;, w2 f7 a  m2 p5 k/ j# X6 D
  751.         strExtLocal.Empty();
    : G& Q' G4 j6 b. m, h: L
  752.         strFullName="checkversion.txt";+ f0 i  i* j/ y) R! L5 e
  753.         dwProgramState=AP_CONNECT;. N# [/ R8 a7 r
  754.       }& Q! ~" Z4 L0 A. D* ^' z$ h
  755.       dwStartUpSteps=4;
    & s8 D) l& q. A. O) D9 l! _8 |
  756.       break;
    , A. F* p6 d( D- D
  757.     case 4:
      A  m6 G- J" [7 U0 m6 w; p
  758.       {2 i, `+ k8 ]+ G4 s
  759.         FILE *fp;( W( G- F; l& {
  760.         char szString1[128];6 t' n/ `# L  G6 \/ w  U
  761.         char szString2[128];
    9 \, g! T% U" M% T  `% g$ _/ c
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    5 `7 ~% B$ l+ g* F, z
  763.         if(fp)
    9 b' |: H: T/ x* A- z; ?, m4 Z5 b
  764.         {& z  s1 C  T/ H5 E0 V3 T6 V+ u
  765.           fscanf(fp,"%s",szString1);
    ) L5 X0 z3 D. @2 o- J) O% g$ Y/ z
  766.           fclose(fp);6 u1 M, }. y; s+ x' E3 S! s( E
  767.           fCheckVersion=atof(szString1);0 y! J! c6 s4 e/ \9 K* g3 m
  768.           fp=fopen(".\\checkversion.dat","r");
    8 I; s1 l& t( t* s$ p5 N
  769.           if(fp)4 M9 p9 u- q7 F* M0 A7 m
  770.           {
    , Y+ q9 C6 F0 K7 f, o+ u+ @0 n- c5 H
  771.             fscanf(fp,"%s",szString2);
    / L2 ^# m) N; b2 ?# n7 m
  772.             fclose(fp);" M& {1 t8 l5 p! |# Z/ G
  773.             if(atof(szString1)!=atof(szString2))
    " Q" q) W. \+ @, ~9 C+ ]% p- W% u
  774.             {
    : a5 h. }$ `$ _) h8 M) H4 V3 n
  775.               if(!Dn.Connected()). V7 n% J( \5 I. U. r. T5 j
  776.               {6 ~+ @  L3 R7 @- V7 b6 G
  777.                 bFirstUpdate=TRUE;
    $ q' |/ S6 i, @0 v+ K, K& R
  778.                 dwTotalFiles=1;8 r; ^* Z1 k& s- I6 ?
  779.                 dwDownLoaded=0;
    + ?8 j) i+ z  Z! |* c4 v( s
  780.                 bSilentStep=FALSE;6 a1 M: O+ g& O9 D6 B1 I
  781.                 bCompressed=TRUE;& `1 A- ]5 Z, t# w: Z; |8 P9 I
  782.                 strExtLocal=".\\DownLoad\";" T( e. p+ w& _
  783.                 strFullName="update.txt";
    - e$ x" P; N- r
  784.                 dwProgramState=AP_CONNECT;1 J6 n: x7 }9 V! H* c  J) x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 y! b5 r/ ~1 ~) S! U# L
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 h% }. V6 v2 v, e+ n
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ ]# T7 }& k. l0 s! Q
  788. , F" A4 I/ b8 f' q$ S
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( d  s, F# ~4 w( Y
  790.                 unlink(".\\DownLoad\\checkversion.txt");" u2 i5 u* y& X8 p
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    . @5 I$ h, h2 s' C' L! _4 m
  792.                 {
    $ k# i* w& X& o. }  G3 |+ o
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");1 M4 `" }) I1 \
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");2 c' [0 x! Z1 q7 ^# s: n
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    * }2 e: U8 t+ X
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " S' u% q) _5 c5 |

  797. # O. h, y9 z# w' c1 Z% j/ Q
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 E( N+ e& q8 P1 M" F' a/ f
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 |: v# h& p9 `# ^; V: ?  e
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");4 f  A1 Q+ \' o  E+ A- X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 Z6 Y- ]# L. l0 N6 T+ E
  802.                 }
    - L9 G5 e( x, S* F- a
  803.                 dwStartUpSteps=5;
    . |& p$ w2 m/ X% A
  804.               }: C6 l) X* K% K0 K4 h# T2 a& t
  805.             }' @* q" t/ Y# [. G- H6 f% B* h
  806.             else
    ) J. R6 |6 J% W+ B/ [$ ~/ M
  807.             {
    : l* Q' n* l$ j1 m, _
  808.               unlink(".\\DownLoad\\checkversion.txt");
    - U1 G1 P- m. s% _' N0 s
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");' n2 H+ L. T* a! t: G) ~
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");2 [) n4 e! U! a" \) d( k
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    " i3 s. @( w/ j. Z

  812. 6 m# n0 s. n% R. S1 e4 {$ ]# B5 ~
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 V* k4 g8 P9 g
  814.               dwStartUpSteps=99;
    * R$ G* J7 J. M1 z
  815.               bFinishUpdated=TRUE;% _5 W4 L2 j+ t  [4 ~& |" F
  816.               bCanUpdate=TRUE;
    ! ^8 T& j+ a+ \7 `5 {6 t( H0 `
  817.             }0 J" `/ i" _( n7 L6 h, T
  818.           }: f. \3 v6 f$ K8 U/ |+ Q5 z
  819.           else
    ! c$ l1 f5 J0 y8 {6 _0 T, t' G
  820.           {+ h* k  d+ u0 u. {- U, L/ g; u
  821.             if(!Dn.Connected()), X6 ~8 Y8 ]) f( w8 O
  822.             {
    6 w8 C! Z) K6 z7 v0 }
  823.               bFirstUpdate=TRUE;3 Y. J7 g8 ?) p3 ]7 V5 L- S
  824.               dwTotalFiles=1;
    ! X# |$ ?, T* x6 E) y( y, |; S/ r( O4 [6 j
  825.               dwDownLoaded=0;' w2 D( v3 u; K8 [" ^8 l9 Y
  826.               bSilentStep=FALSE;
    4 x7 Y1 O  a( J6 B. n& P+ h- T
  827.               bCompressed=TRUE;0 U; Q* ]6 T/ w+ o6 U. Y
  828.               strExtLocal=".\\DownLoad\";4 ~3 A' d1 _3 x; L" X9 |7 y
  829.               strFullName="update.txt";5 `) t% E$ p' I4 o
  830.               dwProgramState=AP_CONNECT;
    ! `. S3 o1 ]4 s+ f6 }) y: {
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( i8 r0 x+ s1 a! l1 |% R/ W( p' v! Y. }
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");1 T. g* h1 n! Q& `2 L1 z  A
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");9 [, T* ]1 k5 ^0 k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 S: b" e  J$ N4 j3 {
  835.               unlink(".\\DownLoad\\checkversion.txt");6 R+ I/ x5 v  F, F6 ^6 G
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    $ ~: u6 a& M1 H8 H. C2 A8 ?  B0 g# y4 M
  837.               {
    2 C+ n" E3 X( B1 F4 w
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");2 p: {& A, ^+ u) Y7 u1 M! Q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    : g" |; _4 I6 i# ^; m
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    6 W6 x0 A* m6 T8 S; U. c+ M+ |
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* N- E3 g# Q8 ^. H3 V1 ?1 @+ ?/ @
  842.                 3 I$ n0 d6 F. Q  V
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 y2 X% q5 z- _( I* [" e  z
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- Q: W- w) X/ M* L
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");& s/ K* c. p8 O% G  ~; F& E
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + u& m/ u+ U* ~& Q* x1 E" p2 y: x
  847.               }; P% c7 f; `: N$ ]0 }# G
  848.               dwStartUpSteps=5;( v7 f7 }7 r% M: ~( P
  849.             }
    - d8 D; x9 y/ U
  850.           }
    9 i! O  y9 \  {1 o7 y3 w5 t6 P' [8 X
  851.         }- F" Y0 q+ E* |
  852.         else
    ( ~6 x+ L0 l9 u
  853.         {6 a# K" S# y1 T5 ^5 l% x5 Z" i6 K( J. d
  854.           dwStartUpSteps=3;) R) m2 n' A8 U: F& t% d
  855.         }
    8 J/ [; g" T' ^  w* l' F
  856.       }+ f9 y: n1 |2 v4 c( m
  857.       break;4 p; @- q6 F9 L) t* Q0 r
  858.     case 5:: i. n" V* O! B, E1 L  S
  859.       {' b% n6 J: }% Z# U$ h" W' q6 h
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    6 Q. z+ @( Y6 k4 V9 O
  861.         {1 P* F8 A4 }+ R- c  u9 G" \* G
  862.           int opt_overwrite=1;3 O& i: B# s9 Y7 J
  863.           int opt_do_extract_withoutpath=0;
    ( X: `* X/ j: i0 d# K
  864.           unzFile uf=NULL;7 K8 o4 Y3 W5 S/ M2 K+ Z) O4 U
  865. 9 t& y4 l) W6 o7 C
  866.           uf=unzOpen("Wsa.zip");3 o+ [! E. ^3 ?; `& |$ y
  867.           if(uf)
    4 q) d& h+ [2 {$ o: g2 g; X+ p
  868.           {2 a5 |' [: S; P4 _2 x' O  o9 s
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);! _) s7 ^( v: y! i  K1 n
  870.             unzClose(uf);2 P+ u# S8 m* m% i: R& N+ k
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    8 f  D& c' {7 c- g: K1 k! E5 ?
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");% ?/ [& i) R$ e+ Z) g9 k
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");0 }1 `7 ~" y8 p; N  q; d
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- R& ^; F3 P! e/ o
  875.           }
    + H" M* i4 J6 _/ |9 Q
  876.           DeleteFile("Wsa.zip" );
    0 r2 O6 x% y- `( W
  877.         }! m" z2 R# M7 @+ _. \, ?5 f
  878. & }; z- p$ O4 d9 c$ L  j
  879.         if(CheckLocalVersion())3 ~) J9 K3 R0 @5 `8 P3 ?' X$ c
  880.         {
    1 L6 e) z$ k$ p4 [0 K3 B! ?
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    * u: d+ A; V9 {! f
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");; v1 g" [7 k3 p! Z- Y' x
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");. R; Q$ z5 N3 k% S
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 `' O8 s# u% m/ G% [7 p4 \- v
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    + R) _  C7 C) W* O: Z& Y/ _
  886.           dwStartUpSteps=99;8 x+ |7 m0 r1 k
  887.         }- Y9 z8 z% ^6 q' u; M0 B; R
  888.         else
    + b& b: D  `8 G% X. v1 D
  889.         {* f# I1 ]+ b6 j3 t
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");4 f" }. Z1 a6 E9 K
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % _) |1 |0 C* J- W" P
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");7 L0 k. O' |, c- Q4 }& Q

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

評分

參與人數 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客服返回頂部