CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
+ v( f8 a& p& t
  1. / RevApp.cpp : Defines the class behaviors for the application.- \3 i9 q6 J, ~+ e
  2. //6 R7 B. M$ H+ @* Q3 M
  3. , N" \+ E+ k( M: r6 C( q* I
  4. #include "stdafx.h") I, a1 x% [7 Z7 ]8 ~4 L
  5. , R2 y7 N2 d) k' t/ q/ l
  6. //#define UNICODE
    " l" ?$ y. X$ k- g9 V
  7. //#include <gdiplus.h>3 S3 S0 v/ S- s4 i6 T3 k: `8 }+ G
  8. //using namespace Gdiplus;* s  G: ]% ~# {% f/ y+ F
  9. ' P* a4 h. d+ t' n
  10. #include "RevApp.h"3 S/ G3 z* X$ h# z) G/ ?; E9 c
  11. #include "RevAppDlg.h"! E/ `8 q" p8 [) @; s1 ^4 b
  12. ( |$ ?# N+ x0 R- s6 B- T! C
  13. #pragma warning(disable:4786)& L8 O6 ?7 a$ c' T& B
  14. #include <map>; t3 t$ i/ E6 h/ H$ ?! T6 a) _- R
  15. #include <list>
    ! s( I% E2 e, y0 v. Y3 Q
  16. #include <direct.h># T7 v  W9 `- p) s

  17. : K& S, w: m' O" O2 }" t1 D1 S
  18. #ifdef _DEBUG
    - }' J/ j" o/ l, _5 k6 ^4 d
  19. #define new DEBUG_NEW
    + ?% L; p. b$ f( D5 U
  20. #undef THIS_FILE
    0 h0 E& d* J% \1 Q
  21. static char THIS_FILE[] = __FILE__;
    - q3 |  o# r4 M4 \
  22. #endif
    ( Z/ @: b; D" ?
  23. #include "SkinResDef.h"
    5 }8 ]0 E' ?2 R9 Z/ A  l
  24. #include "ChangeBG.h"% u0 c4 x9 ?. O$ c1 ^* _
  25. #include "AFXINET.H"+ Y  T; G% R6 y  ]

  26. , N$ z2 P$ a: l# c) U# R. u
  27. #define TRADITIONAL_CHINESE 0
    5 g2 C, C9 p7 ^2 a2 a3 i
  28. #define SIMPLIFY_CHINESE 1- b( G9 s* {$ U4 m3 p# ~) `
  29. #define ENGLISH 24 C; \* _2 }- \* x, c% p
  30. int m_iLanguage = ENGLISH;( Q" n8 u: ^+ u. [
  31. /////////////////////////////////////////////////////////////////////////////# ]$ m9 S4 s4 e% ^6 v) h3 H4 c8 k
  32. // CRevAppApp
    4 o# [1 s) N+ R. a  A
  33. % r# v9 K1 Y+ C0 j6 @
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp), T* ~2 p, K/ j9 _. r' {4 \# D
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ! c5 C- d; J4 L& ^* G5 B
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.  H# l' s) r  N+ A6 i# ?! h8 ^
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    + g6 G' q) N1 t) d
  38.         //}}AFX_MSG
    * m- D2 Z8 ~1 z$ a" C8 Q
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)2 B4 d9 g9 D& d1 x
  40. END_MESSAGE_MAP(): b4 y9 w0 ]" g; F
  41. - {# O/ p: A" A
  42. /////////////////////////////////////////////////////////////////////////////; q0 }* U$ s# q- R2 S% v- E
  43. // CRevAppApp construction5 _, C/ r/ [/ d/ p$ _; ]! e# L* ~! {

  44. 6 H' o6 u2 E- x( \
  45. CRevAppApp::CRevAppApp()0 `# z! h% c2 _. c
  46. {
    , e! `: {* x% S7 G3 b$ T& E1 k
  47.         // TODO: add construction code here,
    0 y* d0 l/ y$ h% ^: k
  48.         // Place all significant initialization in InitInstance
    7 w: a( U0 ^5 i; i* F% y0 Y
  49.   bDisplayIsBig5=FALSE;
    3 |" i& z6 p6 f8 o# K+ \/ c
  50.   bRestartUpdater=FALSE;! l( D  }) N% p! n1 c! X
  51.   bFinishUpdated=FALSE;3 D- d, k6 J# x4 R% g/ I7 b
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    # V& e& K- h! g" S  w6 G
  53.   InitChangeDataBig52GBKS();
    8 V5 w" o# I. R
  54.   InitChangeDataGBKS2Big5();
    ; d/ S) M* G* E" c4 O( _
  55.         //
    % U. g& P- i" ^! a
  56.         bClickRunExe = FALSE;% X1 A' M! J# ^1 J0 ]
  57.         //! \9 \) c6 C9 i+ U; R
  58. }. k0 F" m0 {4 X* y6 v* w+ Q

  59. . E' B7 U! S8 X0 w7 Z6 y9 `7 x
  60. CRevAppApp::~CRevAppApp()
    ' n9 y. D4 E: [. _) V
  61. {4 {  ~: {3 x$ y" R* H: O2 a
  62.         // TODO: add construction code here,
    5 \' b& H$ O2 y. D) D
  63.         // Place all significant initialization in InitInstance9 x/ J' m* X+ l" ~* X
  64.   EndChangeData();
      @) ?( L: ~( r: X
  65. }% p- p# n1 I  D* h2 _

  66. . T/ Z8 R" k( h/ m7 ?( a, u
  67. /////////////////////////////////////////////////////////////////////////////
    6 s9 H' H/ e. l8 I' y
  68. // The one and only CRevAppApp object4 i" F  r# u' _* B+ h% S+ ?

  69. 4 R7 A* i. V) K1 K, L4 S$ T- U6 ]
  70. CRevAppApp theApp;
    ) F/ P3 d1 V$ C# T' Z& s. [
  71. ; U5 g# ]7 ^1 j$ J5 d1 P. y+ y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    + m- h0 ^& U9 n" S
  73. {
    ) y; E4 H. T9 L+ A! t0 @! h
  74.   int iEOF=0;
    9 k* y6 G8 m/ _0 K, E$ Q$ n: T
  75.   char szTempName[MAX_PATH];+ n! P; B9 l% G/ b1 e3 `7 y- q6 |
  76.   *szFileName=0;
    # M3 d8 {; r8 x# t" Q& w  I
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ; e3 F- A& ^7 Z0 L9 I. P: y6 E2 s% K
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    , C3 U( Z, f' b0 ~- m
  79.   {8 X$ b( p7 x( ?/ q9 z5 G
  80.     strcpy(szFileName,&szTempName[1]);
    - r7 @* U$ y1 y9 Q  [) ?: L8 w
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    7 M( Y+ h9 l7 t/ ?1 [' V! V
  82.     {: \3 O7 Q) W- |; F
  83.       iEOF=fscanf(fp,"%s",szTempName);
    % l" n0 ^& k* U+ ]+ F9 ]3 t
  84.       strcat(szFileName," ");
    % p) w% p$ B0 t( e
  85.       strcat(szFileName,szTempName);
    * F4 P+ T* ]- z$ Z
  86.     }
    1 d+ W+ x: E0 ~/ k/ s
  87.     if(strlen(szFileName)>=1)/ M+ s; V/ Z1 l6 k- n5 R
  88.     {5 S/ P% k4 z- G2 W2 ~9 d' s
  89.       szFileName[strlen(szFileName)-1]=0;6 W7 h  t7 J# h+ w
  90.     }  c; i% o* j8 r/ B2 |% ~6 t# Y
  91.   }0 m* V; j: M  E# O
  92.   return szFileName;4 h# X6 b, d4 x0 C2 `+ K2 M1 L4 n
  93. }
    " ?7 `; ^! k# |

  94. 3 I! i" B, j  Z  }9 _2 Q  {* K! V
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)& S5 l* m8 X0 E0 H6 c2 Q
  96. {( G* K: |" G% j; `+ Q1 Y
  97.   FILE *fp;
    / Q5 R7 n8 S: a2 `% W6 z- H
  98.   char *key=NULL;
    0 z8 \" J+ _  g( T
  99.   char version[MAX_PATH];7 u* e: ~' }, c* V: u
  100.   LPUPDATEFILE file,olds;9 W, O' n$ H- S9 `) F
  101.   std::map<CString,LPUPDATEFILE>::iterator p;9 i2 N# v+ ?( ~% ~
  102. ( V# U1 Z) S2 u! _9 x2 O
  103.   UpdateList.clear();
    ' X( U% c4 _% l1 T- i
  104.   UpdateFile.clear();
    6 R" M4 L' a& \4 l2 S
  105.   if(GetFileAttributes(filename)==-1) return false;* Z1 p. J. j1 ?% l8 Q
  106.   if(!(fp=fopen(filename,"r"))) return false;$ @5 E6 Z/ \; w0 c  h( p
  107.   fscanf(fp,"%s",version);
    $ t& V) l5 t7 `3 v2 a
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }9 ^9 b3 D1 a7 A1 H; Z: L  j
  109.   while(fscanf(fp,"%s",version)!=EOF)
    4 P0 A! o% O5 H3 W  c3 G% I5 D
  110.   {
    : }+ `0 v2 f$ m1 J% ]
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & Q' |* }5 @" D4 X& P
  112.     fscanf(fp,"%s",file->path);/ P7 @' H3 U8 h+ Z, y2 D
  113.     ReadFileNames(fp,file->file);
    - T, S! I  W, y: t, x$ N4 W
  114.     strcpy(file->full,".");
    3 W: g' b0 W7 ]  U: ?& f) a
  115.     strcat(file->full,file->path);
    : J# k5 L3 F  e5 H# G3 [: m: f# e
  116.     strcat(file->full,file->file);: W4 n+ f8 Y+ U) s; f$ O" Y! u$ V* H
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    + K3 \% B. z' h0 a: Z3 n0 K
  118.     {0 r7 K1 j$ R& e" x  u
  119.       file->vers=(float)atof(version);- d. \. h; z3 {, B) g
  120.       UpdateList.push_back(file->full);
    4 l" k8 _$ _5 C0 M' Z# Z& W3 t
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));+ }: {$ j$ ^( S% ~$ a- O3 c
  122.     }
    9 W0 p4 q% Y' p9 @. [$ l9 S: y/ h; n* H
  123.     else
      V% H' Q. o, d# b- B6 h
  124.     {
    * k2 T- \2 `( f& n9 P' }
  125.       olds=(*p).second;/ ^3 f  C/ V& ?4 g( a
  126.       if(olds->vers<(float)atof(version))
    9 |. `8 y$ n+ E1 f) A
  127.       {( o8 y% d+ V7 B* R$ _1 P
  128.         olds->vers=(float)atof(version);
    9 F- t* o: v8 L' U0 a4 h
  129.       }( B+ J0 Y" s6 Q+ |: p- E
  130.       free(file);; L/ ~! ~  o0 T, q8 h/ d( _' v7 _* x
  131.     }1 a5 n" p) k# ^" W: U5 j$ z! c
  132.   }% f+ X- i2 ^4 e. w! L) M
  133.   fclose(fp);
    $ r; ?+ x/ ]. }# B
  134.   return true;; x) X% E% b* X+ I5 G6 z
  135. }! a# [2 d' ]1 E0 ]
  136. / u/ J8 S% K  s0 C( X+ u8 ]
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)5 |8 ~( Y0 F6 [
  138. {, U5 K: Z7 a& v& m2 W4 P7 t
  139.   TCHAR  szFull[MAX_PATH];+ R0 T; j! n6 I& c4 q1 z# J( G2 b
  140.   TCHAR *token,*inter;. c6 @! n% ~3 \2 r7 r
  141.   *szPath=0;8 x5 g% O+ J+ Y* a  t
  142.   strcpy(szFull,szFullPath);+ m6 F2 L( g5 S
  143.   token=strtok(szFull,"\\/");
    3 T# z! N, _( g9 N8 `" }6 x
  144.   inter=token;1 y  ^2 u$ T) b2 ~! G  n+ g
  145.   while(token=strtok(NULL,"\\/"))
    - o+ q% t! C. Z* F1 l/ i1 ]
  146.   {8 t" h6 R6 _2 R
  147.     strcat(szPath,inter);
    4 N6 X2 E6 P& J- u' e
  148.     strcat(szPath,"\");
    * F& Z1 g/ `# x- n7 Z: x
  149.     inter=token;, \2 O; h8 X6 g- Y
  150.   }
    ; q' J0 d- \5 d7 i" Z1 q$ R
  151.   return strlen(szPath);+ X  U! T5 O. r0 ~# V4 S# F, m/ t
  152. }3 ~' K& i- o0 L* k0 H/ v
  153. 3 L' |2 U' j" Q7 j3 `8 Q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    7 T  l6 D* N5 F6 u
  155. {( h9 y5 U/ w2 d1 D7 @
  156.   DWORD attrib=GetFileAttributes(Target);
    5 q' ~, o2 G( I% D+ c1 n( ?
  157.   if(attrib!=-1)6 a* q7 q: x% r3 T  u( l; {- ^
  158.   {
    4 J/ k/ T( X& x
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))3 \& Z. \& m! u
  160.     {
    1 \5 p; u* g& p: k9 w  H9 D9 z
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : N' a# h/ o: p
  162.       SetFileAttributes(Target,attrib);
    . y5 d+ ?0 \1 d7 X
  163.     }& o% z/ ^; ]2 a- J9 U
  164.   }
    9 _- h) H% f+ n. {) T' @+ p
  165.   CopyFile(Source,Target,Erase);$ w$ K7 {8 g* U9 c  A
  166. }5 B8 e/ T8 d& K( ~

  167. 9 Y- t% }/ A1 J2 \0 G% |
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)# ?7 k. p* x  Y! C! R  [
  169. {
    3 M) `, h$ ]. ?$ V
  170.      FILE *fp;
    ) X$ ~; b- l0 }4 g1 U: i) N) d
  171.      char  szBuffer[8192];5 o; {( O; y' t) ~( w* K! E' ?
  172.   va_list  argptr;6 o# n& X8 a( C
  173. + }( g( c2 k) f6 ^
  174.         va_start(argptr,message);
    + q5 ^- E4 e0 q: t' |4 a2 g* z
  175.         vsprintf(szBuffer,message,argptr);
    0 ]; P! d8 e+ K% Q, e( r/ m
  176.         va_end(argptr);9 Q& X  \, x) s. x! c4 J
  177.   fp=fopen(FileName,"a");
    # K# @% `/ s$ G1 d; n$ T  R
  178.   if(fp)( z- i5 K6 O, U1 ?2 l" q
  179.   {. p0 L) S5 E9 \1 N
  180.     fprintf(fp,szBuffer);% \0 T0 e# P% U" A5 R
  181.     fclose(fp);- C3 h% L1 }/ Y. ]! S7 G( z2 ?  a
  182.           _flushall();
    0 P) x0 N* X& e5 E3 ?" v
  183.   }* Y8 ^' }3 W( V" q7 @8 D
  184. }' @) i# Q7 ?; i1 c

  185. & `' S& M( p* `2 F) ~
  186. BOOL CRevAppApp::Fclearf(char *FileName)
      }5 Z+ E  T: H- t
  187. {7 ~( F% K' i7 G
  188.      FILE *fp;2 g& Y3 x5 Z$ e7 Z
  189.     DWORD  attrib;) \8 C  d9 W7 c7 @! V  Q* p
  190.   attrib=GetFileAttributes(FileName);' B& h& A9 _  G  ~
  191.   if(attrib!=-1)( v7 v& y% W' V# @4 H- ]$ Q
  192.   {
    % T; U# g; H% K; J% m( a* c+ i& n
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ' o+ Z# Z! R: Y  v& G* F7 A
  194.     if(!SetFileAttributes(FileName,attrib))
    ) h9 i- x6 e! H  U, Y3 a1 X) s  z
  195.     {' ~9 B) S# C' G" I
  196.       return FALSE;1 d1 r7 V' B  P* w
  197.     }
    ) H- m0 p. K% e5 O, d6 j* T
  198.   }
    3 V) q( _/ j( T& ~
  199.   fp=fopen(FileName,"wb");2 x+ X6 c* A8 l! }! g3 i
  200.   if(fp)/ h  z/ U8 b- D1 m/ V$ M
  201.   {
    0 |2 E- v! N/ L. b. d/ I
  202.     fclose(fp);5 k* X* P1 k) T$ L
  203.   }) L! ^: J  L9 r' P% ]
  204.   return TRUE;3 t3 L& I* ]# t) C! Q- B
  205. }! E4 @) ?' u; o1 }" h
  206.   J# C% _0 `9 o8 o
  207. BOOL CRevAppApp::UpdateLocalVersion(void)6 R/ G/ S0 U0 ~  G2 U6 l. g
  208. {
    9 w4 O$ C: R1 B, \
  209.   char filename[MAX_PATH];
    9 U! h) j4 _/ L: A1 H; T
  210.   LPUPDATEFILE file,olds;7 Q7 ]- o! O4 d8 N) Q
  211.   std::map<int,CString>::iterator i;9 E* o. g+ @' B4 K. E! E
  212.   std::map<CString,LPUPDATEFILE>::iterator p;2 N; P/ m2 I* G4 M  G
  213.   std::list<CString>::iterator l;) z6 \9 o2 L) g* |# |2 \  \& v: c
  214. % ~! e' o0 _& H0 Q) Y( t
  215.   if(bFirstUpdate)
    ( G5 j" d# _- b; |/ z
  216.   {
      |, I' ^5 }7 c( a
  217.     dwCurrFile=0;
      A0 L. ~) D% @3 f& P+ ?
  218.     bFirstUpdate=FALSE;- I; F) V4 P* m5 r9 c
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 e4 P! n0 y4 \7 L- v4 M- k/ n
  220.     {
    / t$ B7 Z9 T. w, _" ~7 D# |
  221.       dwTotalFiles=UpdateLocal.size();* |5 t( x* o# k! g! {; @3 R
  222.       dwDownLoaded=0;
    ( n6 N+ j+ a5 R. X, `9 j
  223.       bSilentStep=FALSE;
    / h" Y0 e5 `: C; X7 Q8 B
  224.       bCompressed=TRUE;7 e5 O: \  O/ U; \- X7 ~* `
  225.       strExtLocal.Empty();, \0 g( p- c. k- D0 g
  226.       strFullName=(*i).second;! \$ \' o  z0 n6 k
  227.       dwProgramState=AP_CONNECT;& b+ N1 G6 @( V2 g! ]
  228.       return TRUE;
    + C% k! P9 O( \* n0 e7 z1 n
  229.     }
    % Q4 x7 ]4 N! Q* i6 @5 Q  C
  230.   }
    $ z- n: ^. ~! B8 p( I
  231.   else if(bRestartUpdater==FALSE)
    5 j5 [7 f0 ~& b2 f- w% }1 z/ N
  232.   {  w3 x  c* @$ a. ~
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    8 M) T$ @; a0 ]
  234.     {
    8 O: J2 T3 i0 l+ m1 `) a
  235.       file=(*p).second;8 f; b) x" f+ @$ ]5 \9 J
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ; m4 B8 P5 P& _9 Y+ a5 q# @
  237.       {- P* v- y! E) A$ a
  238.         olds=(*p).second;
    ; p: g# a( L  j$ O
  239.         olds->vers=file->vers;
    9 ^9 [. D/ `. e3 l
  240.       }* T! Q- q* C3 ]( z% @) T1 e& v
  241.       else
    % B" ^4 a% n) U% ]2 [  [) G
  242.       {2 X% K' T" B. O2 M
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & N8 |4 i4 }+ ?: b9 U
  244.         memcpy(olds,file,sizeof(UPDATEFILE));/ Y4 x$ I7 C9 ]5 X% a+ U
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));4 |0 V& A4 j3 P9 I  L. ~( y
  246.       }
    : x( m8 |0 _# e& j
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# h5 `5 Z! p+ x3 d6 O) j& B9 F  e
  248.       sprintf(filename,"(%s)",file->file);+ M; k' e) Z. g& F8 G9 |0 v# p
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 P- @4 x9 N( ]  n3 |, s/ B
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }2 K! c. z5 S( N% }2 ~. Y+ T8 F9 b
  251.     }2 G2 D7 ]! G( u  P  d+ k' G
  252.     dwCurrFile++;
    7 D3 R+ p+ g( q% r
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 V" o2 C1 |- z$ ]7 X
  254.     {
    ) q: O( ~$ T" H) W
  255.       bSilentStep=FALSE;
    ! L2 q8 N; W  a, B5 J3 `, q, d0 u! T; K
  256.       bCompressed=TRUE;; T8 r- Y# q. x. G: W6 L, N& w$ s8 |8 W2 F
  257.       strExtLocal.Empty();
    % a1 q# d3 b3 y0 h; M2 ?3 l
  258.       strFullName=(*i).second;+ W8 B0 O/ q) r8 ~
  259.       dwProgramState=AP_CONNECT;
    * j) y& b! t3 y2 U# z- A! I
  260.       return TRUE;
    1 Q  N" Z4 y  p. W. j. z$ ~" G
  261.     }& f% M: t$ k) m* b
  262.     if(!bRestartUpdater)
      U8 S0 i+ L/ X$ {3 l- W4 b
  263.     {$ y7 O6 C8 e+ ~9 v
  264.       int iCurrSize,iFileSize;4 G$ K% F. {  |& q
  265.       iCurrSize=0;
    * U1 m. R. p$ k6 X& Q. x  F
  266.       iFileSize=UpdateList2.size();
    - h# |. i/ `% ^2 z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");4 ^6 M* K4 v$ l' ]6 [$ `! h
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    & V) D) t4 C2 Y  u' U% C  X  k
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");0 g( \  ~! j- z% P# K5 [  x
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 {9 B7 _; N" Z: M
  271.       Fclearf(".\\update.dat");
      k- B1 k" |. L( H/ v$ K# n
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    - n, d# b3 T/ F; ^
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    : s% D4 z9 Z' N  ~2 I  R" z
  274.       {
    ) ]$ x; n7 ]" z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())1 L# B# T: X6 E1 I
  276.         {
    0 Z! y! K7 K# }; _% q' `' {
  277.           file=(*p).second;
    * G% z. E, a: |# j1 ?, a
  278.           sprintf(filename,"(%s)",file->file);! K2 k3 Q6 o$ ^- e- g, y
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / c( x& z1 `, h: G# D% o" D7 v
  280.           iCurrSize++;
    : {( O  e) I8 K" a4 n) `
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) `: \. Y) d8 Z6 t2 J
  282.         }3 ~6 G$ B5 X4 _8 m8 F; O
  283.       }/ b+ v6 a, v8 Q* i: V* b6 P
  284.       unlink(".\\update.txt");; u$ I; N! R$ }# O/ A
  285.       unlink(".\\update.tmp");
    - @2 ]) C" d6 t4 f9 Y8 b
  286.       Fclearf(".\\checkversion.dat");! Q, b7 v, Y0 ~) T0 H3 q! i7 @
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);) |' w/ n; G2 v% k3 }: N" D
  288.       if(UpdateLocal.size())( e3 j4 @1 ^' D3 ~
  289.       {0 O  ~  E2 p5 O- o5 Q! y& A# }% H7 m
  290.         UpdateLocal.clear();7 x3 ^1 G: C! N- g7 f6 F( [  u
  291.       }4 z) f0 j' s5 ^" f
  292.       if(UpdateFile3.size())
    4 J" Z8 Y4 T. X# _; T, u
  293.       {
    % a6 M& \& F) l  u
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ I( p% `4 {/ R  w- [3 W
  295.         {, j" l; v; i7 F: d  t3 j. r
  296.           file=(*p).second;5 v6 [2 ^$ a$ c
  297.           free(file);
    * O5 n5 p. P8 A) k+ ^
  298.         }; O" H  I. q/ S  C& Y9 D
  299.         UpdateFile3.clear();
    . _) i3 m) q  x. c& t' c" o' m& \
  300.         UpdateList3.clear();
    3 L4 e3 t$ v* H4 g, P$ U
  301.       }! u' a" Z( @1 }2 K: w) h5 y9 p& G
  302.       if(UpdateFile2.size())/ a( ^5 E/ X5 d* q; F+ L( M
  303.       {/ }' q- Y1 Y' W, V1 D& k6 ?
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' i) X7 I( R; @$ Y+ n
  305.         {
    * J3 N* Q& g0 T1 E7 @# c
  306.           file=(*p).second;
    - v: d1 e% X5 t9 Y; G; m
  307.           free(file);
    - c6 u; }. y+ A% p5 k1 Y3 s4 l/ N
  308.         }
    1 Z7 W2 t& U4 }4 o! I0 D
  309.         UpdateFile2.clear();# N8 W/ T6 o0 Y) Y6 N+ U3 _5 j
  310.         UpdateList2.clear();, z& u, ~, y1 \+ o$ w/ E  ^( }  q7 S
  311.       }- u# j3 G, V0 J3 C! ~  Y
  312.       if(UpdateFile1.size())
    * T3 M! y/ p. s" d: B) d* I
  313.       {
    1 q: _# l* m0 V% K* p
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 R# R0 S# @9 o, G. S  q
  315.         {: g3 y3 T; }6 ]) c$ w0 Z$ ]
  316.           file=(*p).second;
    " X" Q/ ~5 {% D: a8 D5 c* b
  317.           free(file);
    0 x( z( P9 P7 X- @1 L
  318.         }5 s3 I. N4 b  ?
  319.         UpdateFile1.clear();9 n+ a- V# q" W0 [" y: G( X
  320.         UpdateList1.clear();
    1 x' O' m$ R1 L; Y0 i5 {) f5 l
  321.       }
    ; Y" Y- ]+ V; y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));7 w; P7 H& x; [2 p! Q2 e. S
  323.     }$ L2 k; c1 {3 {/ S5 F
  324.   }
    " _2 c; O7 y, u0 m( \
  325.   return FALSE;7 g6 A# \5 L5 n, F
  326. }4 O; I! O  p8 M; p
  327. " n% h/ Y- S4 K% u% f7 ?$ i' K; x
  328. void CRevAppApp::ClearAll(void)
    * O( {7 W  B+ ]& b; j8 P
  329. {0 @9 i0 P8 [7 z& b: \8 e" T
  330.   LPUPDATEFILE file;
    2 J, k, K8 g7 `& U
  331.   std::map<CString,LPUPDATEFILE>::iterator p;# w2 A0 u- l  O' f& I! q

  332. 2 I5 E8 F$ i, m1 O: d
  333.   if(UpdateLocal.size())
    2 [/ q  \6 L$ o5 X5 v
  334.   {: ^- x( R# N' _* U
  335.     UpdateLocal.clear();- A/ y% S) z* x9 P4 x
  336.   }
    ! P6 ~7 c6 f% T0 b
  337.   if(UpdateFile3.size())3 U' h6 k) [! D6 j1 L
  338.   {& Q: Z5 E6 s! e
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , y  O/ z5 X, o) Y* Q% \$ @) H1 X! i  V
  340.     {
    1 p, Z7 s- [3 o  w5 T  B
  341.       file=(*p).second;
    9 k1 f6 N( W  N+ Q" x
  342.       free(file);
    5 M2 L& J7 ^) y& ?* b$ P/ o, N
  343.     }
    2 f: u4 Y$ U% n" ~
  344.     UpdateFile3.clear();* C1 c; \; R5 J  E. v8 G
  345.     UpdateList3.clear();& @+ ]* ?4 D# K% Q
  346.   }# W3 t) M' k5 J) o7 w( b: r& E
  347.   if(UpdateFile2.size())2 K4 f/ Y3 A4 \* z, l
  348.   {
    + @* o! T  w7 @' c& h
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ n: c' x# @' v& J
  350.     {
    5 u; V7 @) ^" x( ?5 Q+ ^
  351.       file=(*p).second;
    - z4 m! R4 n  e* O+ h4 y0 _
  352.       free(file);8 Q1 ]& Z4 p: e+ l
  353.     }( I% c6 U3 D- F7 c4 f- P
  354.     UpdateFile2.clear();2 Q7 }8 c/ x5 {- Z' h/ J" X
  355.     UpdateList2.clear();8 B( O: F$ z+ z, q( v7 x
  356.   }' b0 U+ F3 p' H; y5 ^# v! W
  357.   if(UpdateFile1.size())/ v; X& T0 \" g4 o  q9 l
  358.   {& \& b& `2 a% F- `* w- O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- n# L6 M0 {$ ]
  360.     {
    ; C* j' Y* x, Q- P& M
  361.       file=(*p).second;
    , O5 o# C. X1 M
  362.       free(file);
    4 R3 ~! G1 i! M0 f
  363.     }0 ?% w" f' |6 {3 V5 X5 X, F2 |/ J( S9 G
  364.     UpdateFile1.clear();7 X' R# n% Y- p
  365.     UpdateList1.clear();! H! Y% x' n! F4 B, U* z1 ~& T' x* W
  366.   }
    / ]  s4 O, B1 `2 s) w/ b9 i& I$ j
  367. }  ( A) d+ V+ {+ S  ^, Z# m
  368.   
    + c: A' p1 e& d' P- g  \( v
  369. BOOL CRevAppApp::CheckLocalVersion(void)9 v4 \. C$ }6 o7 G' [  |1 }
  370. {
    6 H2 f" O$ V# n% s, t  R9 W
  371.   int c;% K" w' U! X& z  i+ G1 W: `
  372.   LPUPDATEFILE file1,file2;( R. x! Z& Y7 b  t9 B
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    0 L( ^& n3 z+ m1 Q
  374.   std::list<CString>::iterator l;! @) {% t5 z7 H1 B3 G9 R0 X
  375. 2 R8 L+ W9 r. W7 H( Z+ W
  376.   UpdateLocal.clear();
    7 Q  g! U, L! u. c+ c" ]# |; }; T5 t
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    1 P; a8 Y% m( f$ V0 T  C' Q1 R
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);$ V' p4 ], v% a, E4 [
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);# S9 Z, Y7 {- C. c8 ?* Y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);/ m2 S. `! A+ Q2 n% _
  381.   if(UpdateFile3.size())
    ! C- @! }' _/ t7 z+ Q8 I+ C
  382.   {
    # ]0 d  Q* R" o
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    # Z4 H4 N& M7 d9 S& t4 }: y
  384.     {* i  I9 ]  Y) l8 W& [( Y8 D
  385.       file2=(LPUPDATEFILE)(*i).second;
    / j" A3 G" S; l" V
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 k+ T3 A6 v$ \: I) m: O- U8 n+ I
  387.       {! ~4 h$ x. z( [
  388.         file1=(LPUPDATEFILE)(*p).second;
    , j+ c7 k: J; \$ s# p3 q1 n
  389.         file1->vers=file2->vers;
    5 {* v6 T. _5 `: G' W, _4 p
  390.       }8 V. `2 B0 F/ \- {% Z
  391.       else$ a* T2 @% x+ U! w# S, l. d
  392.       {
    4 e+ D4 |. y  \
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 Y4 v, o! N' F3 m4 X2 R9 w
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ' |9 M4 r" ?# i4 P0 h2 n
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));4 w0 E$ G7 B$ C
  396.       }
    2 Q( i3 Q! i0 {; _, B/ l
  397.     }0 Z$ r. U5 f; a; `. C
  398.   }+ j, K- c7 [! e: G
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 R) ^, A; V$ a
  400.   {
    ) s) a* N9 R! |  T$ H
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())& Z# k+ s+ l1 \' D7 W& l1 c, t4 ?2 r/ R
  402.     {
    + Q, O/ s$ c4 |# m0 r3 Y7 r
  403.       file2=(LPUPDATEFILE)(*i).second;- x8 `: h6 g$ s6 n& m! ^- V
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 _6 i' h" E- J* V# o# K9 c9 f/ ?
  405.       {
    6 w+ m% w" @" l% \2 Y
  406.         file1=(LPUPDATEFILE)(*p).second;# Z) e  {7 M$ ]4 K# K
  407.         if(file1->vers!=file2->vers)4 m$ B. W# V5 }& N
  408.         {
    4 ~' }  _" b# D8 w( i
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! l  h1 C" N0 U/ K" }* R
  410.           c++;4 m3 M$ z5 X; |. q% M
  411.         }
    ) N' K8 ?# Q' g
  412.       }0 j! V3 H" |3 h; v* o& P% c
  413.       else( n  w/ o  r9 N' K2 e
  414.       {: z7 w5 G( Z/ r) z& m
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 j/ i4 Q9 w, d7 {, M# k
  416.         c++;: E( o6 z& W! X7 L8 i5 ?* P/ c
  417.       }
    ( R/ s0 ]) k" f! w: [9 q5 U
  418.     }
    ( l* r9 z, S- b- ]* H# u) A: J
  419.   }
    6 y2 T" F* R% ~1 z1 b; x5 y
  420.   unlink(".\\DownLoad\\update.txt");. i; `: a' h; o  ~7 O5 x9 c" _, ~. h
  421.   if(UpdateLocal.size()) return TRUE;
    5 Y- f- M5 ~! i8 b
  422.   else                   return FALSE;/ p3 z9 P* \4 w0 R
  423. }! n6 q2 f, c0 _& v5 `- r/ I; I, P

  424. $ G  v7 z: L5 M& _
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"- R+ J- H9 }' a. [% w
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"2 Q9 `) N# g2 t+ q+ D3 [' P8 {
  427. 8 y2 L+ }6 J! j" O" \" o2 f3 H

  428. # R8 t! l: _4 z/ S/ [9 F

  429. ' b( X  V; [$ P, {, Y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    , B$ ~% Z& G5 J- L& G2 j# W
  431. {
    4 [' @& l# z% N9 ~
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;4 H5 n) C# m+ L4 ?* n0 N
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : c  G! _1 m! f* }
  434.   {
    7 V$ v' \, p. \" r7 U9 r1 D
  435.     char szLanguage[50];
    2 T+ b/ ]7 P5 `0 E* f1 [( j& |
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    # u7 V* e; S) e( W: B% h
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % h' d5 I5 s, v$ U1 K1 n. Z& E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;: l  B/ g$ ^# D; D
  439.     else                                   m_iLanguage=ENGLISH;1 z4 k/ e* l& w! K; l! S
  440.     char szRegister[100];
    : Y$ n$ x0 F  @9 b" D* ~5 @
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");, q/ E' k$ t. H! U
  442.     strRegsName=szRegister;
    # X0 f5 R0 |9 f2 ^. `
  443.     char szPatchURL[100];8 Q8 l4 y, e5 n; \7 E+ t5 g
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , y9 d. C) G8 I; ]) Y; ~1 d9 f( |
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 y9 ?9 J$ X1 K' @' H
  446.   }' v0 m4 m% g( D, I4 n2 i
  447.   else8 a7 p& D# f; s" M+ ?
  448.   {- _7 R( l! }! G. p: E! t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 X6 D+ I) \9 b9 B7 U# U! `0 H! i
  450.     strRegsName=DEFAULT_REG_URL;- E! X* D4 n  q! n! H' H
  451.   }
    # Q4 n4 h. Y/ M4 ~# G
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * X2 K/ Z9 C- S6 j
  453.   {  C" l$ o( A9 r6 U, X
  454.     char szIP[50];1 A$ ?: M0 w+ L- v$ {
  455.     char szDIR[300];' Z' Z8 b' p0 W/ X: t$ W
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))/ A: L  l& t0 V8 \. n0 t
  457.     {
    ( @- K+ g1 ?# b8 Q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    0 p% @+ A, J$ I  v, s
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    " o3 u9 x9 s! }
  460.       strHostName=szIP;. M: N7 `+ |# n' U1 p
  461.       strHostPath.Format("/%s",szDIR);2 h4 k  [' J1 }4 F( l, X  p
  462.     }* u' s+ H5 ?7 }( {% g7 B' ~
  463.     else$ H" i. n* w4 [6 o
  464.     {. ]) W) u: g: b4 y1 {' [
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 N5 S( z) u* N: i& n, ?
  466.       {6 U" m: P7 j3 v( i) m5 Q9 Y
  467.         char szLanguage[50];
    ' k: H. v) i; L% B  M
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ J$ \0 h7 J; o* L0 Z1 r5 J7 c
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; ~5 g5 @0 r$ d# g- {
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- @3 h( p3 y8 l: H  e  P8 N
  471.         else                                   m_iLanguage=ENGLISH;
    3 Y+ i" f: c" w, o
  472.         char szRegister[100];3 \# ^$ M. T9 M. j# C9 ?( S
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) d/ T/ i$ e) l* Z0 m; ]' R
  474.         strRegsName=szRegister;" v) E! z% i4 D+ a
  475.         char szPatchURL[100];2 k& X5 c! s3 ^, P! n9 G
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");2 r. K. s$ q+ y" u3 I
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! k# r: t; E* t8 l1 B! d
  478.       }
    % l5 w0 C* m9 s8 v* {. x
  479.       else1 e% ~0 ^3 q7 Z# O* ~; R
  480.       {
    ( ^$ `9 z8 R, i3 N& m' N6 \1 F) w
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 i! m# ?* k0 d* o2 f$ K$ Z
  482.         strRegsName=DEFAULT_REG_URL;" A! v. o6 e7 A* l1 [: W
  483.       }
      [3 G: _+ L( J( Z
  484.     }, s5 C  C. O$ k. ]6 K5 v
  485.   }
    1 ^1 e1 `2 d) w
  486.   return true;8 w7 t4 ^) f6 }  ^5 r$ M
  487. }9 @! M* Q3 l5 ^" l& {
  488. ; S0 E9 J6 C3 ~1 R  j- |
  489. #include ".\ZLib\unzip.h"
    , ?& Y, }# P" _: R3 Y5 p  B4 o1 v7 A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    $ _' O0 }! E2 _; m# t; g7 I* h
  491. /////////////////////////////////////////////////////////////////////////////6 ?  J! n8 r6 F! i' w4 E- `) G3 e: ~
  492. // CRevAppApp initialization
    3 g* E# }# a7 ~, I9 X

  493.   }) h8 s- Z, c2 C* f5 z/ y
  494. BOOL CRevAppApp::InitInstance()
    . Q. K- J$ @7 X! |' C- A
  495. {
    ' ?+ ^' L3 Y8 u* A5 o8 I6 a
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    1 P. f7 H6 @; R* ]4 n

  497. * C" a3 T0 z' f# A# ]8 W
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);% X7 c8 O5 i1 N8 V
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    7 R, s4 C' d7 w& `
  500.   {, W; I1 f8 n0 @, a
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");" z- _/ l2 A( F1 |/ i
  502.     GetPathFromFullPath(szPathTarget,szPathSource);' m, O% y" @( w) S- ?( u1 C9 K
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    & t( _, q# P' }! \* k8 I
  504.     {
    4 R1 W1 e! O9 L, E
  505.       strcpy(szPath,szPathTarget);
    / A6 t6 P* g6 y; ]
  506.       SetCurrentDirectory(szPath);9 p  `7 p1 f* ]5 G
  507.     }
    ! _% H( ^% o) }
  508.   }; U# b/ G* I/ ?. d
  509. #ifdef _DEBUG
    * Q4 H& X7 l) A
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) i% \/ u: _- s, |) N
  511. #else7 ^% n0 I' m3 ?# k' R9 U6 y( S6 p
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + \1 Y! l6 H$ v( v* y
  513. #endif
    6 Z6 j. l) U5 }
  514.   {
    ; X0 i) t. j8 R8 w
  515.     char tempFileName[MAX_PATH];
    - f$ ^/ W2 c( M# a6 q) |
  516.     strcpy(tempFileName,szPathSource);8 Y  w2 \! w. B
  517.     tempFileName[strlen(szPathSource)-12]=0;9 q* `( j" b% }2 f' ?7 B
  518.     strcat(tempFileName,"\\$CSUpdate.exe");( V/ W8 j* d0 e  L' _
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);9 c$ ~1 `/ ~- L7 M) c
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);4 c2 w/ R6 |6 E$ a- B
  521.     return TRUE;
    , z7 |+ p3 j7 @! K5 d- d5 e) A
  522.   }6 K+ E$ N+ O8 C2 D3 n4 f
  523.   // Nuke 0118: Delete run.exe# y* T- p& T: [9 C2 Z
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );" {& S4 e+ ~- U6 I
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");0 Z) `4 {& [' H+ @7 Z+ p9 @5 L" Q
  526.   if(!ReadCfgFile("Config.ini"))
    0 ^2 F6 }- X! w- R1 P
  527.   {) m4 x) D  Y5 t7 x  S+ e
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 y# ~# G/ X" O' q( y! N
  529.     return TRUE;0 t. L% E7 Z. t; x, w# X* W$ y) f9 B
  530.   }
    0 o2 Z+ W- h0 B
  531.   HANDLE mutex;1 W9 d0 j$ f2 E6 u- N
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    8 a4 H0 A6 H5 c% V* G! W* M
  533.   {
      |# E9 S7 V' q" `- F0 Z" j% P
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    5 _3 s& ]) F% p2 h' C- \
  535.     {) a2 u, |( |  i# `: P) S0 r
  536.       CloseHandle(mutex);& n6 g+ G$ S, \/ G
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    , `4 P! _/ c3 N: W
  538.       return TRUE;" P7 r& F; t$ y
  539.     }$ R+ }3 [" W: f. l- h
  540.   }  
    1 ^4 Q/ B: |+ q$ v: H7 l- p  u; y
  541.   CloseHandle(mutex);
    5 K' d$ S5 u5 S) f" c( e8 Y( R' l( o

  542. . _2 ?# e( h, c) w9 }6 b7 [
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( k; J+ h2 f, ^4 [1 Y

  544. ; U8 n5 N/ U% O) v! q, q# \1 p7 l
  545.         AfxEnableControlContainer();
    7 ?. z3 e8 H7 w

  546. 7 l5 [  `2 k2 _* r1 S+ t
  547.   bCanUpdate=FALSE;7 J/ U. K! A# I5 p  M3 {5 a
  548.   dwStartUpSteps=1;/ \7 A7 a3 z! R
  549.   dwProgramState=AP_NOTHING;
    4 e8 \( v8 I7 d' k$ u7 J  h
  550. ! q7 N. }, {: F( \
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);; P3 [: e5 L( Z9 x  E
  552. : Y/ S* X4 A* c, i( M& m
  553.         // Standard initialization
    0 n7 P  R- R/ N) S. ~
  554.         // If you are not using these features and wish to reduce the size. s# }& k0 M6 O: j* V
  555.         //  of your final executable, you should remove from the following. D" t, \0 c( Y
  556.         //  the specific initialization routines you do not need.7 Y3 y. l* S) U

  557. ; x" V0 w* s! @0 l5 k% s
  558. #ifdef _AFXDLL
    . Y/ \' m/ D, V+ b, @& c* U" e* b
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    0 F' R' g) s; L" I; K) e1 N
  560. #else
    3 r5 @9 v. C5 a
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ C; y8 I  o- u2 J* I  a
  562. #endif3 B, w5 e2 j4 l% |

  563. * U- U) R+ I( U9 I" W) r; T- B
  564.   dlg=new CRevAppDlg;2 G6 y6 B( E8 B5 a
  565.   dlg->Create(IDD_REVAPP_DIALOG);8 M/ Y5 }2 [3 M7 _: O7 b' [
  566.   dlg->ShowWindow(SW_SHOWNORMAL);2 V. E+ B& T5 s* S5 Y& }: ?: g
  567.   m_pMainWnd=dlg;
      y0 O: w: c! W! p: ?! v4 B

  568.   \9 z, M2 w. y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);2 k+ ~, B  H0 }$ s

  570. " p+ f% i5 a: v$ T/ v, j; L3 U
  571. //  GdiplusStartupInput gdiplusStartupInput;) n' f/ n  t0 w/ B1 I; p# r
  572. //  ULONG_PTR gdiplusToken;
    ' p2 X5 y3 m- Y0 r0 `. l3 j. S! L
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);7 f7 y! i7 d: y# |/ ]

  574. , B1 w$ _  Z& K( ]
  575. //        CRevAppDlg dlg;
    8 N& q6 F- G; ^3 T% t7 ^% I2 Y5 M
  576. //        int nResponse = dlg.DoModal();' N. b$ J; Y0 w! D  S. G
  577. //        if (nResponse == IDOK)
    4 q/ Q. V4 T& G/ }1 L. [4 S' x
  578. //        {
    0 P( e" R; x; `/ F8 T6 w
  579. //                // TODO: Place code here to handle when the dialog is- v5 ~) |, |; A! k
  580. //                //  dismissed with OK& l: L6 n6 n# Y' Z
  581. //        }
    * T2 X9 L! k# f/ \% z! h. q
  582. //        else if (nResponse == IDCANCEL)2 w& J( _- N# D% h7 r4 o
  583. //        {
    - E% O/ G/ h; r+ |( ?
  584. //                // TODO: Place code here to handle when the dialog is9 ?/ w7 N9 }7 p' h. ~0 ?/ }
  585. //                //  dismissed with Cancel  Y6 }3 i. _4 F; {  \% \
  586. //        }
    ; v0 L$ R# H1 S5 u: ~

  587. 9 O& Q& y6 r6 [: n
  588.         // Since the dialog has been closed, return FALSE so that we exit the0 K2 q% `) S- ^! D' I* q* y8 M
  589.         //  application, rather than start the application's message pump.
    7 T+ A7 q# \, K
  590.         return TRUE;
    ; I! F  V" d: {: `- ~+ Z
  591. }
    ! d2 ~* e2 E+ `* J, P# _- w
  592. 4 d* P) c3 F4 W( v2 I8 ]) m. Q
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    & G3 C% ^0 b& s; @- a; J- G
  594. {, q; U1 K  i0 g& v2 k6 Y" d9 i
  595.   int i;
    ; ]/ v! v+ m, K) o  V
  596.   char *szRet;
    & X3 U& @4 a- q  G$ m

  597. & o0 G/ p8 R- }
  598.   if(pSource) { itoken=0; sztoken=pSource; }! z; N+ Z' I  W3 h
  599.   if(sztoken)
    1 @1 F, J$ `' N( {# O, B& a9 |
  600.   {  U( D# n3 ^+ {
  601.     szRet=&sztoken[itoken];
    ) _5 c% S1 X4 v% n; l1 d5 |. H
  602.     while(sztoken[itoken])
    : |# y* @) g/ Y
  603.     {) T* ~7 q7 u/ S' N1 S
  604.       for(i=0;i<(int)strlen(token);i++)+ `6 X0 K9 \% P) B
  605.       {' {' b- ]. f( F  f% ?* _, G
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]); w- t; c( o4 L* q
  607.         {
    2 ^+ G6 N% A) O4 U6 C% v" E
  608.           sztoken[itoken++]=0;( p3 d1 D9 u! X4 T/ R
  609.           sztoken[itoken++]=0;$ @8 ?/ S. j4 z* z8 @& R
  610.           return szRet;
    8 b" k  c) M: {' S% o
  611.         }
    3 w5 y9 S2 V! }0 W" F
  612.       }
      F5 A: }2 P+ y' E: ^
  613.       itoken++;! v- s- c1 U9 ?7 M
  614.     }
    % \: L6 n0 E# b$ u  j& p2 O
  615.   }
      p, p8 G9 Q  `, q. [! r
  616.   return NULL;
    : _6 Y# @: b- n( J; }
  617. }
    # e4 z# a0 _( W& c

  618. ! R  B. p/ s& f; G; s  V; M( x6 @
  619. void ProcessProc(long Total,long Current)2 b3 G/ t& j; x* @" b+ n
  620. {
    ! k$ d) Q+ F0 a
  621.         MSG msg;
    & r' R8 u1 i+ b0 V, l4 \7 H
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    # t9 x. k2 x+ c  Z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    . g+ G) Y! o' T5 z& d" U5 c
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    - \/ [5 v3 Q' C6 P# u
  625.         {
    0 \) U0 n1 q0 V* C; U. B
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ! a5 x2 _  e  M
  627.                 {
    3 t6 z' K0 p1 n. j4 U
  628.                         return;& I1 _' A% D/ W# V$ ~2 I7 D
  629.                 }* Y# b, l# M5 R* E0 c; L0 T9 d, g0 @
  630.                 TranslateMessage(&msg);
    # X+ n# h* `' o& z: Q3 Z
  631.                 DispatchMessage(&msg);
    ' M$ n: ?* F6 M$ c7 C9 K
  632.         }       
    : e7 J# l* N; H5 z) t+ }
  633. }
    3 @+ J5 l, N1 a7 u
  634. . C9 T; P' |" @3 T. L4 _9 s
  635. BOOL bFirstChar=TRUE;
    / y0 h* Y4 m  i& C+ W# m5 u
  636. 0 Z4 d5 r& [1 ^0 o9 c- a
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    " Y' v3 [% r6 h9 @* g6 N- f
  638. {
    ' |1 v" \2 s* Q% c6 F  i
  639.         // TODO: Add your specialized code here and/or call the base class
    ' U/ m0 Q! W7 b( V
  640.   switch(dwProgramState)
    ' ?! ~) `4 {+ r2 R; B0 {/ K& i
  641.   {& v0 R: Z$ y; h, f8 I3 y
  642.   case AP_NOTHING:% ~; x1 ^; l) ~6 z/ ^9 @5 T
  643.     switch(dwStartUpSteps)/ Z' f( E* J. q( C) b5 Y: T
  644.     {
    1 B  E% G7 a2 l0 @. W' k1 e
  645.     case 1:# K6 ~4 D6 n" g! u+ N
  646.       {/ t8 [# d, N2 z* a, a' S
  647.         int i;
    / h/ B; l% n7 B7 z. |) h4 z$ y; c
  648.         CDC *pCDC=dlg->GetDC();. ~$ Z, e+ G: u. Z( t: W8 x6 y
  649.         HDC hdcwnd=pCDC->m_hDC;
    " |+ f& |' T- H( V
  650. //        Graphics graphics(hdcwnd);
    4 o! Y7 |6 a- a) |2 Z6 N
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    6 U" a7 C/ @2 P/ n& x( ?5 h
  652. //        INT iWidth=bitmap.GetWidth();" F$ C0 K/ `5 f$ L
  653. //        INT iHeight=bitmap.GetHeight();
    6 j' D8 r8 k9 a1 P! [
  654. //        Color color,colorTemp;
    . g  a3 V: P) M- L; P! x6 |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    # b; P$ m0 Q1 Y! G9 e3 Z, ]
  656. //        {
      x3 C# f) g3 X/ I% u
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ! \# V4 n0 T# G9 i: c4 ~
  658. //          {. p, n6 z$ n; |. y# `* ]
  659. //            bitmap.GetPixel(iColumn,iRow,&color);! Q+ ~9 w- H: A3 M1 T$ L
  660. //            colorTemp.SetValue(color.MakeARGB(
    5 U  Q3 i( `4 D3 j) |- J
  661. //              (BYTE)(255*iColumn/iWidth),
      a/ @6 B0 v$ B4 g2 G, }3 g
  662. //              color.GetRed(),
    1 s0 E9 N+ Y9 V* d1 w# H
  663. //              color.GetGreen(),7 c; O* {' D, k% }+ R8 ]  d
  664. //              color.GetBlue()));3 B! w, _2 a; h' L# X2 G
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);; J# d, j* s8 u9 C/ V
  666. //          }; E9 {3 l" ~& V7 p$ X* u+ z
  667. //        }* |" e3 ]/ X! ?( [& N5 W
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);5 f, V: q" C' L  B* j) c- M2 T  [
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 d2 m4 y. |6 S  y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");1 p6 s6 }; y& h- n2 a
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " _' n' t$ q: l% ^! x
  672.         for(i=0;i<240;i+=8)
    5 K! \: {" F- g8 |. ^* p1 z
  673.         {8 }5 D9 ^5 w9 ?7 w- Z1 r
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 {# C+ X- r' O% k) `
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);) h& U$ Y/ `* O* Z6 M
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) y" P6 ~  C& u9 }, i7 ^- X+ _
  677.           Sleep(33);
    6 B/ i3 X0 ^- Q) p
  678.         }
    , w, L# i5 |$ ^5 S! D0 s
  679.         Sleep(1000);) I$ g- E$ ]. F
  680.         for(i=240;i>0;i-=8)1 v2 T) ]* w2 q
  681.         {; A5 b& E) ~$ h. C( s/ `$ i4 V& \
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  f6 L& `$ h# S$ b2 T" L. U
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- _( y/ o2 A. H- r5 Q6 z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : h. e" u. ~+ a% Q+ Y. i$ r8 w
  685.           Sleep(33);6 r" l, W$ i& e) ^
  686.         }
    # d2 O: `) e# L- ^7 h3 l
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    3 _/ {, @" a* C5 a/ m/ V! i' o
  688.         dlg->ReleaseDC(pCDC);
    ( q0 N- b! S/ ?8 F; \
  689.         DeleteDC(hdctar);0 m* W/ h  R9 J, D- x0 O
  690.         DeleteDC(hdcsrc);
    ( q6 q  z  D* q+ a3 o# f  Q1 D
  691.         DeleteDC(hdcorg);6 C) e  Y5 X( R" w
  692.       }: a* c; n2 P+ ]
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);! @* u. G7 R  v! H- B2 U
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    6 V7 T5 k% y+ O6 G2 }" Q7 `
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ; v: u0 a9 A( \/ a9 u
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");6 F% e3 s! F' p4 p  `& b" ^" E$ @
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 z/ P3 f% @3 M2 Z% A5 u
  698.       if(!Dn.Connected())0 ?6 s5 l4 w* w$ p1 u2 E5 O
  699.       {8 o3 c! }$ C; C. d4 j' b+ c
  700.         dwTotalFiles=1;' X9 `; M/ g0 Q$ p+ S8 O% a
  701.         dwDownLoaded=0;/ m0 Y0 O' W$ C- S6 g1 p
  702.         bSilentStep=TRUE;0 {) v- z' \; R0 A) e  i3 U' @
  703.         bCompressed=FALSE;: U9 r5 n4 w0 O
  704.         strExtLocal.Empty();- ^- R% Q# g8 E% H1 z* z- y% B
  705.         strFullName="readme.txt";& F; ?- [( D9 K4 M1 W$ J7 B
  706.         dwProgramState=AP_CONNECT;
    $ R9 F6 Q, }9 h5 L2 K/ z0 w
  707.       }
    # K& O: V# {- y- g* @' v' L
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();" T, {. z" {7 `
  709.       dwStartUpSteps=2;, d/ Y  c& x* E; J, ?; K/ B  k( j, b
  710.       break;
    . A% U# k% k7 |- w) a9 k
  711.     case 2:* I1 d* A, ^# c  t+ R+ O5 l/ f
  712.       {( v) h& I9 E: w  n+ l# z" O& `
  713.         int iEOF;8 D8 @( x' T- T1 n' B3 G
  714.         FILE *fp;6 H" t' Q$ G, h
  715.         char szString[512];
    , U0 f9 \+ l' n: ~5 P5 n& u  B
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    3 m" g$ B' @/ W0 x9 t
  717.         if(fp)
    ! M& c" r2 ]$ R5 U0 e9 g: r  K1 G
  718.         {& i- w) X5 _8 E# M3 }: _( Z7 v  n
  719.           do! D; X" ]7 _: r/ m% c) M& j
  720.           {
    ; c7 K$ m3 u/ M& _" t
  721.             iEOF=fscanf(fp,"%s",szString);! c7 t, p7 @" A& V$ g
  722.             if(strlen(szString))$ W( x4 i' f4 c
  723.             {
    6 C( Y/ \3 w; h1 w1 {! Z0 L
  724.               if(bFirstChar)+ m* N$ y) f4 `
  725.               {
    5 S! v8 ~, D, K% A  A% k
  726.                 bFirstChar=FALSE;0 T& |" X- ~8 v4 F1 h- {8 W
  727.                 bConnectIsBig5=FALSE;
    / G# K: D; t( i
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    7 S  {8 a2 {* }. f4 o+ B( c# y
  729.               }0 c! Q/ I- j- Z& {1 O. w  V
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    , t& A0 K$ n. G$ N/ @0 h, W+ w; n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));2 }9 S5 h! {( e& J1 ]7 {
  732.               dlg->m_ListText.AddString(szString);6 W( j7 [1 \6 s: V( j
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * s3 e  K* }5 s+ y
  734.               *szString=0;
    ; V9 p: o' B5 u4 p
  735.             }( n6 t) F2 K7 V' W$ Q
  736.           } while(iEOF!=EOF);
    3 R& {, i/ r2 a
  737.           fclose(fp);, X% `+ x- E3 ]# z. }% b+ f
  738.           unlink(".\\DownLoad\\readme.txt");1 O/ H. g- Z1 }
  739.           dwStartUpSteps=3;
    + W' s- i, r0 ?5 x
  740.         }
      k) y( r, b( @3 @7 p6 L% v' [
  741.       }( }/ I8 b$ x9 y1 q# I$ J& B5 [( N
  742.       break;6 J! _$ ?4 Z* ?* k# N7 b8 b
  743.     case 3:0 j: i2 C% ^* R9 M" ^2 I
  744.       if(!Dn.Connected())0 T9 Q8 t' b; [2 I, N
  745.       {* b" S/ d/ B* d) Z4 ^( {2 f7 i
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    , @% p& h+ F# a# @* X! c8 r
  747.         dwTotalFiles=1;$ ^/ e8 z$ k/ h/ j8 q- U
  748.         dwDownLoaded=0;+ O" b/ p8 D  d
  749.         bSilentStep=TRUE;
    4 h2 v$ |& f, J, @0 |5 P
  750.         bCompressed=FALSE;+ B0 v. K! O+ g* ~8 `* w5 C
  751.         strExtLocal.Empty();
    $ C. U, ]' l5 y- L9 O0 L
  752.         strFullName="checkversion.txt";
    ( U, G! V9 o6 O. J* f# }5 Z- C
  753.         dwProgramState=AP_CONNECT;4 W! q4 H& P. M) k
  754.       }$ l6 }2 w) F4 W4 j: C+ Y
  755.       dwStartUpSteps=4;
    / P( {% p$ S  l0 v; S4 v
  756.       break;3 N6 b/ f8 N0 \& s3 W. B" ^' P* ~
  757.     case 4:
    ( f; [# N1 Z1 V: n, u; h
  758.       {- Q( U+ \1 m, x, l, v9 f
  759.         FILE *fp;# {3 w" I" }8 }# Y, c' ?! \
  760.         char szString1[128];
    $ K% s2 e3 `$ u+ c9 R* I* c; b& l; n
  761.         char szString2[128];2 {: H8 {  w$ V  u. ~
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
      z# Z7 {. a! }7 b0 {) X
  763.         if(fp)
    2 M# B4 Y. T) {- s( }
  764.         {
    # \! a" i" T( u0 B( M, ^' K8 x
  765.           fscanf(fp,"%s",szString1);
    , j3 \5 S2 J# \) Y7 n1 T. ~0 Z0 o
  766.           fclose(fp);4 V4 B% }# y6 s+ V
  767.           fCheckVersion=atof(szString1);$ l0 a  F& [1 Z" k
  768.           fp=fopen(".\\checkversion.dat","r");
    8 g; T1 {' j& n: B/ c+ |
  769.           if(fp)9 x2 X  K$ c) z/ D0 |' \* g
  770.           {! P6 }& {- m4 b
  771.             fscanf(fp,"%s",szString2);; G! {+ {; l- n! d
  772.             fclose(fp);
    1 A& v) \6 ~7 h
  773.             if(atof(szString1)!=atof(szString2))
    : Y! [/ n% j% h# z5 U
  774.             {
    5 }& @$ H/ N! G% r& P) O
  775.               if(!Dn.Connected())2 ^6 l, L2 a& T! e7 ]% ~
  776.               {; C2 e2 P1 c2 o, b  o* P: R
  777.                 bFirstUpdate=TRUE;
    & \# r1 g% O( W9 a
  778.                 dwTotalFiles=1;
    ' @3 }  T7 p2 v8 }6 j; e: H0 J
  779.                 dwDownLoaded=0;
    4 I# F  ~' b1 V& x% i/ J
  780.                 bSilentStep=FALSE;- L1 ~5 s$ L5 A! W/ l
  781.                 bCompressed=TRUE;
    ; v+ M; _2 K( Y7 l' }
  782.                 strExtLocal=".\\DownLoad\";
    6 a2 ?5 g' L0 e
  783.                 strFullName="update.txt";
    8 c- x, [" D0 ]
  784.                 dwProgramState=AP_CONNECT;, U+ j, s) L$ B9 L
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");8 k- V/ W6 N4 S3 a9 y& M# r7 h) T. C
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");$ {) A! L; E. @2 b- M3 ]
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");' v: i( p+ u/ H$ E0 z/ _
  788. 0 ]+ Q6 ]9 ~! l, \# P/ Z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' Y' T# {* @) A- e# q; W% P
  790.                 unlink(".\\DownLoad\\checkversion.txt");8 @( c; L; R3 \$ e/ [/ `
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
      C2 g0 {+ U3 y" |6 [6 j
  792.                 {
    , c4 c5 C; H* i; B5 J  z1 D
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    + l# |. m' o! w' p" p
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");# O" d$ [2 z% R& v# \- V* t) f
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");# a" P' }( t  S9 I
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 |& Y8 R( {5 D( h. ?  ?! c
  797. 6 P2 M  ]0 u9 x- b" _
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 R. z8 m! d" C3 x3 j6 ^9 [
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");; k8 Q; H# v. u( O
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");6 c5 Z6 U0 p4 }& S
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" ]( d. f, n: }! h4 V, ?$ }7 L* y: l( q
  802.                 }# Z5 B) C- r( J( v! ~1 k3 C
  803.                 dwStartUpSteps=5;
    ; C9 L, g+ f8 C' R6 j4 ?
  804.               }
    ( V8 O3 @! Z7 B; [6 f$ Q7 o) Q5 G
  805.             }5 Q2 |# i" ^8 }1 f% i
  806.             else
    ) Z0 e1 D5 W' h2 c9 O' {" G
  807.             {
    + Z" B7 H' F7 P' a
  808.               unlink(".\\DownLoad\\checkversion.txt");8 m5 m5 `& j+ s9 O
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");% L# w, F; q+ D1 L1 u' `( c9 m
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");: x. E* ~: w4 G; g8 o* s* d8 r# n
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");, E0 t, u0 F6 g' ^

  812. " H+ f7 @' K% l# ^8 I- V2 x0 z& H
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. |# H& l5 A) n1 ~- A1 t3 B
  814.               dwStartUpSteps=99;. K, C, H, T/ M! j+ f$ J/ ]
  815.               bFinishUpdated=TRUE;
    # C4 K* C8 }3 C- |$ @2 ^; X8 @  P
  816.               bCanUpdate=TRUE;3 M8 X# @: A6 H
  817.             }' }5 g; S# n- g' J7 c. f3 y
  818.           }4 a* n) g+ U. V+ i* ]
  819.           else' |7 e9 A9 i/ r& P; V
  820.           {' B  A! R, w% l' G/ p7 @* P  \
  821.             if(!Dn.Connected())
    1 f# X0 ?/ J# L& i( K
  822.             {! q6 z9 Z$ z' M
  823.               bFirstUpdate=TRUE;
    - z1 p& o; D0 E* a' w6 c  m& @
  824.               dwTotalFiles=1;
    ' N. i  p; f" Q8 m' }+ R
  825.               dwDownLoaded=0;
    ) I1 x- Q0 E# V+ I* h9 }1 v
  826.               bSilentStep=FALSE;% ~2 t1 [' K( _# F4 N. E
  827.               bCompressed=TRUE;
    ' \2 H( r; @, A( @5 n* Y
  828.               strExtLocal=".\\DownLoad\";3 E& z0 W# i. U
  829.               strFullName="update.txt";
    - a7 ?# Q$ t+ J5 O8 B* G
  830.               dwProgramState=AP_CONNECT;* z% {- l0 p4 r8 X/ A' s
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! J2 R( b1 m; t9 a2 c( ]: p6 C
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) f$ I7 R0 z5 c" C4 [4 }
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    9 M2 H! S6 Z# _! _+ I2 E/ z
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 O( O0 _6 b( F: D: S  u- r% n1 e: C
  835.               unlink(".\\DownLoad\\checkversion.txt");
    . t, c3 I' h$ E6 i4 ?& q& T
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    4 p7 p' w# @6 D7 V1 a) \
  837.               {/ S8 g* e  _: s) T" E- h3 j/ K
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");$ u4 U+ w+ x( {$ U5 ]) l  ^8 V
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");5 A, T+ c7 w1 u+ `/ m
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    9 V" u& Q1 A8 Q0 @' T  h' {
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 n) d" N4 T8 `$ q# O
  842.                 ! p. Y5 j+ ^% h( I8 A
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ ?0 `) \1 v5 y: L
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& Z. @. T" J  g9 m6 l% z) X$ T
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");4 P) ^/ w! M# n" B7 d- u! m" P! R
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ s% ~- U3 \8 j& @) m; _
  847.               }/ g8 ^% n5 A0 t# B! m
  848.               dwStartUpSteps=5;
    / l: H9 W2 w. h  e# X' q+ @) A
  849.             }  s3 Q; D" X# U# Z2 P, u
  850.           }
    . e% k8 j+ }; u  I$ W  Z$ [7 p
  851.         }; }* `+ g9 M! p6 e
  852.         else" N5 W! L" |' y2 ^1 B6 h
  853.         {
    " U( A- y6 N7 s, g; {
  854.           dwStartUpSteps=3;+ r/ J7 W, O6 d' c, Q
  855.         }  J' r# |6 t/ d! |5 P) H- ?1 b
  856.       }
    7 n$ Y) c* i% R. ?. e6 e
  857.       break;
    5 t' y/ P* i2 r0 e' h
  858.     case 5:! ~! i+ Q. Z; e, Q& I
  859.       {- D2 k( u. g1 K( q: m* a! r6 b
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    2 O( F; {, n4 S0 y3 M; T6 ~
  861.         {
    * s9 x' ]7 n4 r) A) o
  862.           int opt_overwrite=1;
    $ N% s$ Q5 Q$ r0 R% M+ i
  863.           int opt_do_extract_withoutpath=0;* F" E6 d9 K& q$ z+ r+ E
  864.           unzFile uf=NULL;9 g7 q: F) y/ f: R2 H
  865. 2 j. w/ |: K) K! ?, V9 y5 ?
  866.           uf=unzOpen("Wsa.zip");
    & X' @; d8 R# z8 j1 a3 b
  867.           if(uf)
    / T6 U# a- {, ~4 H9 h5 N! h
  868.           {
    ' Q% B  s7 ]3 g  q
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    % j2 v. g5 b3 h( D& Z5 k1 v+ M" N
  870.             unzClose(uf);5 K3 J) d1 G* C  {5 P+ ]9 d+ l+ L
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");+ B& E% c& J7 J# U
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    1 W5 V  P/ {  o$ w7 }: K
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    5 n1 C* Y! p5 D
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 q. _  x9 A4 D4 H( {: g( ]3 Q
  875.           }+ t2 {1 O  A% j% Y
  876.           DeleteFile("Wsa.zip" );1 p- B5 I, n4 X) ~/ i4 \
  877.         }
    * [7 i: {  P2 j' S% z8 a$ R" k! u
  878. ; i1 D' G8 R& X$ G/ Z$ H, H
  879.         if(CheckLocalVersion())
    ' w, P1 q9 V; H* h3 h% `3 X/ p
  880.         {9 s. C% ?& T/ I. C' Q4 T- C
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ' F3 z$ M2 _" V9 K" ~3 N" m
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    , \2 K% }! @5 t6 z+ ?, v3 c
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    " t1 p! |$ j# w: i9 ~9 \
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ T6 L# Z8 ]- y6 n" E
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    $ D" a1 |/ n! H- [) m
  886.           dwStartUpSteps=99;, {7 M! k* ?) _6 E; q- o5 G
  887.         }" ]5 k8 c5 Y) H& C9 o6 O" c
  888.         else8 \9 X! H7 m% F! L7 {  K" |
  889.         {+ T! A0 ?5 J  ?9 E5 [
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' K6 n# ~: B/ ~2 x7 }, r7 a- z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    " Q# ]% F* Y3 y7 l% _
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");0 T5 A$ D/ F) e$ Y( ]

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

1 V9 b! `. Y/ a5 n  l) ~) _
& J' x7 ?! _, R: t/ \8 ]3 h$ R6 |1 {& |

評分

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