找回密碼
 立即注册

CSUpdate.exe源代码

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

7 K  ^! V! m* n) _) D1 P
  1. / RevApp.cpp : Defines the class behaviors for the application.
    / }4 S' B/ B5 x3 |- E
  2. //
    ( Y; G# o* H; |, X4 b( Q

  3. ! `' i; j) x" d
  4. #include "stdafx.h"
    * V' T5 t9 ~. V
  5. 1 M  \2 z4 P3 d3 O- N
  6. //#define UNICODE7 \$ D/ A/ {' l+ K: k
  7. //#include <gdiplus.h>; L$ e; e* N5 O' I& x( {- t
  8. //using namespace Gdiplus;
    4 L2 P% B+ @8 u0 ?
  9.   K  x7 t6 U0 t
  10. #include "RevApp.h"
    6 n) U& y( c" i: R
  11. #include "RevAppDlg.h"
    ' D7 D& N7 X% e* z  C

  12. , k4 ?; B! ~. F2 p
  13. #pragma warning(disable:4786)
    / L+ d, r, j( A: F
  14. #include <map>
    ( c2 Q& O* q  o' f
  15. #include <list>
      n+ u# P4 M. N5 ]; z# u$ K
  16. #include <direct.h>! r. B3 N$ l4 y7 V; C

  17. - K; G  x7 @4 |0 o: l
  18. #ifdef _DEBUG* W; n2 v1 G: v0 |- _
  19. #define new DEBUG_NEW5 Q, G5 k1 I* F' m5 R7 L
  20. #undef THIS_FILE
    ! Z' c0 o$ @2 s: f: _+ c  I) [, Q
  21. static char THIS_FILE[] = __FILE__;3 U% x6 c6 l, I, ~) X9 @
  22. #endif
    ( h- z9 \& d+ N
  23. #include "SkinResDef.h"
    4 u/ t- s2 `$ n$ O- Y
  24. #include "ChangeBG.h"! Q" Z  z6 d1 d0 R. j
  25. #include "AFXINET.H"
    . W1 k1 m4 G( ], ^* m/ Q) J" ?
  26. . Y1 g8 p0 `- g6 Z6 \3 y7 |( d; ^
  27. #define TRADITIONAL_CHINESE 05 D- P+ N. t9 r
  28. #define SIMPLIFY_CHINESE 1
    . l8 ~9 d- b" G( K4 K
  29. #define ENGLISH 2, l  a0 P5 |) d+ V  }
  30. int m_iLanguage = ENGLISH;
    6 ]2 L3 J: h, K& ?0 v
  31. /////////////////////////////////////////////////////////////////////////////' n; j  C( h. U
  32. // CRevAppApp) K1 N( z7 W. `3 l" g  \! d
  33. , f' Z$ H4 u  m7 j& a
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp); s3 w; }' U; z
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) U! O5 [0 a& j" O
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    . I1 d( b/ p$ l9 A9 _0 J
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!6 O/ ?7 k9 W8 V; Y
  38.         //}}AFX_MSG- e$ j" R4 P# O. y# |/ i0 ?7 N8 A
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    : K' g: R( ?: }
  40. END_MESSAGE_MAP(); i9 [! [' k* H4 T! C
  41. - k9 d$ Q% u- s0 y- s7 ?* n4 {- }2 L
  42. /////////////////////////////////////////////////////////////////////////////
    ( ?; o( M$ m1 N" M& N
  43. // CRevAppApp construction+ d; F5 x* O* D0 C/ o
  44. " Z$ z5 k9 z% }$ k  w* ~
  45. CRevAppApp::CRevAppApp()
    ) a; t$ E% m9 `7 D
  46. {
    ) w# P# d: b0 U& |) l
  47.         // TODO: add construction code here,
    + U. L6 ], ^3 I
  48.         // Place all significant initialization in InitInstance
    * X4 \8 r8 \" U$ `0 B
  49.   bDisplayIsBig5=FALSE;9 K8 h; C1 Z+ s) m
  50.   bRestartUpdater=FALSE;3 F6 W  l$ M% K* \) A, h! ?, W
  51.   bFinishUpdated=FALSE;
    # S: C: O+ R( w8 U% U- t  S
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;9 \1 {3 g$ S  [
  53.   InitChangeDataBig52GBKS();
    3 ?9 d6 |8 O) u6 Y6 h5 ~) s
  54.   InitChangeDataGBKS2Big5();
    ; ^+ u; [3 F3 {4 S5 N9 G
  55.         //
    % P& M; u8 K7 \" ]$ ^" _+ N
  56.         bClickRunExe = FALSE;3 \$ d  E. H) F* _* U( j7 V
  57.         //
    4 Y3 O# j. n4 c+ O" S8 W) v6 {
  58. }
    3 F) F, N4 E1 ^" _
  59. + {7 K" }0 o# v. Y1 j# }
  60. CRevAppApp::~CRevAppApp()
    : S. M' n6 R+ J! s$ Q
  61. {
    5 _* ^: c7 H& x4 _6 Q; d
  62.         // TODO: add construction code here,
    3 T! G- S- h  k+ a2 w! F; ]  @; T# O
  63.         // Place all significant initialization in InitInstance* J( I5 }' x. f  r
  64.   EndChangeData();# P( J  Z) j: D6 U  G7 W8 v
  65. }
    # X! `$ X' x! n& v2 M6 U

  66. 4 S9 r4 k$ `7 ?4 I
  67. /////////////////////////////////////////////////////////////////////////////' U1 X0 a% ^/ E& b$ O
  68. // The one and only CRevAppApp object
    # |0 d& y0 ]6 r, h; Y
  69. 6 u( d9 h2 o- `( v( D% c
  70. CRevAppApp theApp;2 J  q) A, x* f+ w& c% c$ \
  71. 5 A* Z! c( m( @
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    % t) |; X' k. U1 C
  73. {# U# x1 m, m5 H- e
  74.   int iEOF=0;) o. A  R$ N7 Z
  75.   char szTempName[MAX_PATH];/ I0 ^7 i4 y! {5 f7 c. a  T
  76.   *szFileName=0;! L8 Z& U! \+ o* m
  77.   iEOF=fscanf(fp,"%s",szTempName);
    4 f+ d- C" h4 r' g, Y1 }
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    4 [- j- `/ }: Z8 X' D# J( [" i0 X
  79.   {* O, j5 L+ x* J9 w1 l! R, m9 r( N
  80.     strcpy(szFileName,&szTempName[1]);; W. \, m' \; B3 z& G* m
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)1 J& d) {  L5 [6 i2 T7 \* n
  82.     {# }+ A( I3 d7 B2 @" {9 ]
  83.       iEOF=fscanf(fp,"%s",szTempName);
    0 u6 X) l/ ]; u' L. |$ y
  84.       strcat(szFileName," ");2 N  Q# t% B) d, B6 S! I1 l
  85.       strcat(szFileName,szTempName);* G8 b- d3 }0 ]- V- t& B2 G1 T) G
  86.     }2 k5 }$ R, Y0 t, T6 N0 ^8 e
  87.     if(strlen(szFileName)>=1)
    2 d1 |  X5 _+ H- O3 f
  88.     {: J$ l% H) p/ W0 v- ^
  89.       szFileName[strlen(szFileName)-1]=0;
    3 N. T( N1 |/ L  ?4 \! ^' y
  90.     }4 O8 @; t& [! f2 C* H
  91.   }1 b9 ~0 O. ^& R
  92.   return szFileName;
    " z4 l  R7 w  L' G1 @3 V
  93. }5 O  B( ?) t4 r7 g) }

  94. 0 I' Z) j# r4 g0 t
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)8 Z# c1 y1 `. c6 v! Z
  96. {
    / J. o3 z) ?' [& t
  97.   FILE *fp;
    ( r1 ]2 S# l  T$ M: \
  98.   char *key=NULL;
    . t8 F! O$ a$ r* ]4 e
  99.   char version[MAX_PATH];
    ! J9 s5 j* |" q$ f0 M& [
  100.   LPUPDATEFILE file,olds;
    3 m3 f+ l% o( E  y% R' U
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 O. m9 o5 n/ @0 Q: ^8 K, P( f

  102. : g# j" ~+ C! B% P% _# i
  103.   UpdateList.clear();5 o& v  D* k# H# X$ |9 Q
  104.   UpdateFile.clear();
    9 Z2 ~$ u! U0 V5 {" N
  105.   if(GetFileAttributes(filename)==-1) return false;
    0 e0 C, d) W: {7 C; V% d
  106.   if(!(fp=fopen(filename,"r"))) return false;# ?) G# z+ K- a: q
  107.   fscanf(fp,"%s",version);. l: A; w$ ]. ~  Z% G* U2 y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    + q8 X- U( ?( n. W
  109.   while(fscanf(fp,"%s",version)!=EOF)
    3 ?8 r- S/ s) \% g& s
  110.   {/ u2 t" c" O& M" `' c# u
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & j4 e! A: q  D9 f  m( `
  112.     fscanf(fp,"%s",file->path);
    & R/ k  l6 ^9 t  T% o5 p, f+ a
  113.     ReadFileNames(fp,file->file);
      e# e! L" ~' q6 U" g" o/ s
  114.     strcpy(file->full,".");1 M' C1 C' ?7 }# N8 Z/ i
  115.     strcat(file->full,file->path);
    + H- [+ n/ l% J( \
  116.     strcat(file->full,file->file);. D+ |: k/ Y8 `: C# V0 E- O
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())* Z+ f3 u7 P1 r* f
  118.     {
    7 ^1 x* x/ f$ U& D2 h  V. I9 e( _' G
  119.       file->vers=(float)atof(version);, J& ~% t- T+ c; E2 m) J3 H. ]. \
  120.       UpdateList.push_back(file->full);5 d' B. c7 M3 x5 U# `
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ( T/ c- c  u! O5 x+ y# _( _; l, r
  122.     }
    7 b+ v4 l$ ?, y/ Q% R: q) X
  123.     else  `7 s- \# d, `+ C" p- L% T! K  s
  124.     {* {: Y& J5 k' s; i
  125.       olds=(*p).second;
    , }/ Q. \/ ~+ I1 I: Q! I' g
  126.       if(olds->vers<(float)atof(version))+ K) r% A  [/ v2 ^3 V" A6 V& R
  127.       {
    & c/ r" @; b. Q8 p3 Y9 d# l
  128.         olds->vers=(float)atof(version);9 ?" I* p# a% E
  129.       }, K2 V2 B- `. P* v( {$ ?
  130.       free(file);
    3 X5 Z+ \0 A" A8 m( S: R6 U# ^
  131.     }. D& C: J5 D9 |% e% Z
  132.   }
    % J5 R, u  k# `8 e1 y+ |- Q
  133.   fclose(fp);
    ; o2 n; Q& F8 I7 h; i9 u( I
  134.   return true;. m! |5 Z; ], s: x8 b$ ]6 _0 b
  135. }
    % V7 P  Z6 N  p5 G/ Y. w, u+ l

  136. 5 G1 U! \; g1 K$ f
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    , J) D8 r2 o- c/ q9 W2 V
  138. {
    ' }  d3 v) t% b! p' U4 |
  139.   TCHAR  szFull[MAX_PATH];. ^. ?/ t' S% ?" u& X  K
  140.   TCHAR *token,*inter;
    ; w) E% @& d# M2 n4 p% a
  141.   *szPath=0;
    ; X/ ^$ V5 P7 B& c5 h, Q
  142.   strcpy(szFull,szFullPath);: B7 h, w7 g4 ]4 h. x. H
  143.   token=strtok(szFull,"\\/");! R- p2 ]& R, a& s3 T
  144.   inter=token;+ N* X1 P' C$ k" t
  145.   while(token=strtok(NULL,"\\/"))  W2 F. e% [4 C0 x0 D) g
  146.   {4 j) m" S1 H2 G+ M, q; \: T
  147.     strcat(szPath,inter);
    . E7 G7 d! N) e7 k
  148.     strcat(szPath,"\");0 V; ^) m% w' F; H$ N0 @1 G
  149.     inter=token;" l- f% c3 f' K5 R- f5 T4 t  i
  150.   }6 u( T' s- {4 C$ }; f  R" q
  151.   return strlen(szPath);
    % A- d* z4 ~/ B! D& C
  152. }$ e6 B/ R1 N( n( ^% `6 N$ n) Y

  153. 0 f' x) x9 I4 P1 e8 l
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    - |$ x. G7 B2 P6 Z
  155. {$ E! S6 m& X+ J
  156.   DWORD attrib=GetFileAttributes(Target);* R, x4 b7 x1 T" W: M$ s
  157.   if(attrib!=-1)' g$ J' D$ m, _2 q* {. b# s
  158.   {
    . F& Z9 ^- @: G( H" G5 S! M" q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))( A* c& d2 f* m* ]- {
  160.     {
    ) J( h% O3 g, K
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ( f2 N6 \" f* h! g& Z( q
  162.       SetFileAttributes(Target,attrib);, x" P8 J. i; @# Z2 n0 p% u5 f$ I
  163.     }# A2 C% t6 y, c: J1 h
  164.   }, B, o- o% Z+ |6 C3 _7 x& J! ^
  165.   CopyFile(Source,Target,Erase);9 _9 L& @2 S2 S1 s% |5 V
  166. }
    . ?7 M% E! d" @& i9 G- B, m
  167. ) y# K3 y# G9 p6 i: i: I- _! p
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    1 d$ s$ D  h) F$ [
  169. {
    8 y6 U) f& k  F
  170.      FILE *fp;
    7 m' B) B, C# k# t5 l3 h% Y% _
  171.      char  szBuffer[8192];
    0 m: ?1 K1 j, Q
  172.   va_list  argptr;
      x" k  w( M" n; q& v6 w
  173. 4 m5 h* G5 k1 r. k. j9 ~: a
  174.         va_start(argptr,message);
    7 L+ A8 [% i' h" f- C$ d# I
  175.         vsprintf(szBuffer,message,argptr);
    + e8 b" w6 f0 Y; V( k5 U
  176.         va_end(argptr);
    * n2 F; j2 E/ e+ A
  177.   fp=fopen(FileName,"a");
    9 p( k, d' r$ ]) O
  178.   if(fp). m" N- d5 s) P0 J# s9 S1 ^
  179.   {$ P, E# ~! ~5 N& Q1 g( O0 C
  180.     fprintf(fp,szBuffer);
    , z1 r4 V6 T/ S$ I, A# _
  181.     fclose(fp);3 r  H. g4 d% I8 s9 A
  182.           _flushall();& T/ R3 X% h$ d# r8 o
  183.   }
      l/ @; C- E3 p( _& P3 S
  184. }# [% T9 A7 E6 o4 A: x/ {$ _2 R
  185. 8 U& i/ t+ H8 O# f+ V
  186. BOOL CRevAppApp::Fclearf(char *FileName)5 w2 q5 i$ Q1 P0 i% M. b6 }9 _
  187. {
    % J0 ?0 V, O: ?) g
  188.      FILE *fp;
    % O7 z+ V' X8 E8 ~7 {# [5 H
  189.     DWORD  attrib;
    5 b1 i+ Q/ G" V# S2 M( O
  190.   attrib=GetFileAttributes(FileName);) K* t2 f1 M, V
  191.   if(attrib!=-1)
    - y* `8 k/ k# c; @+ }& Y0 W
  192.   {; Q1 `) [7 g6 O! ^; y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    % ^0 j1 m3 w, R' Q1 |% r" V
  194.     if(!SetFileAttributes(FileName,attrib))
      t5 Z9 x: n* {/ O; |
  195.     {8 ]& k' Y! Z# P5 R3 H4 H
  196.       return FALSE;
    * B+ g, _+ ~: `) p4 S0 A7 H2 P
  197.     }' ~$ }8 d. i( G1 v9 H
  198.   }3 E% z  l! N  S8 M7 v0 I
  199.   fp=fopen(FileName,"wb");7 G1 T$ _  t# J+ K1 p# \5 j
  200.   if(fp)
    ; K1 z; g6 m6 p1 b: {/ w; f% Q
  201.   {, Y- ~# Z& j/ i0 D7 \5 ]4 i
  202.     fclose(fp);
    8 X0 T' m; e6 L/ R) H$ p0 h
  203.   }( V5 }! g4 j/ y: d; `
  204.   return TRUE;) q. H: o8 Q. N- ^- w
  205. }- F$ \8 y: P6 f; ~) W  Q
  206. : N1 X1 G$ T- B2 x& g0 i
  207. BOOL CRevAppApp::UpdateLocalVersion(void)6 U2 @( P/ Z  f
  208. {
    ! H- H3 R' ?: K0 p. V0 d
  209.   char filename[MAX_PATH];
    # i2 R' _2 T& m. j3 s
  210.   LPUPDATEFILE file,olds;8 U3 r! f' ~( i5 y+ Z9 B, I0 V# v9 a
  211.   std::map<int,CString>::iterator i;8 [, T+ ~  E1 h  F# S6 G0 Q( {
  212.   std::map<CString,LPUPDATEFILE>::iterator p;6 U: Q4 K+ K! i6 U
  213.   std::list<CString>::iterator l;4 Q: V/ L+ W8 T! e
  214. : K. b) r: R" N# w. H7 G3 ?
  215.   if(bFirstUpdate)
    . X' G6 t) k3 G1 c0 K6 m
  216.   {9 M; l- G8 y2 q" r) r
  217.     dwCurrFile=0;
    . x* ]8 p9 I  z! I- I; ]
  218.     bFirstUpdate=FALSE;
    ) [$ n* W# c5 k- J. f9 R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())7 K( [* [0 Q: t; P! K. Q+ E1 m
  220.     {
      B5 _3 w# Z) D  p* R4 r
  221.       dwTotalFiles=UpdateLocal.size();
    # i+ a1 e" w5 p* Y5 |5 Q
  222.       dwDownLoaded=0;
    0 I; O/ {+ ]! B$ i$ p! `
  223.       bSilentStep=FALSE;. D0 D7 t( h7 j$ T, p3 X* g  _+ ~
  224.       bCompressed=TRUE;
    1 t1 h3 B. [0 U  |
  225.       strExtLocal.Empty();
    # ]" p; D& f& W) _* x. p& }# C3 ?
  226.       strFullName=(*i).second;( A8 j: y2 @- R9 `" E
  227.       dwProgramState=AP_CONNECT;
    4 x' T/ e; l2 T+ Z2 [
  228.       return TRUE;
    - u4 T: F. m9 e" X
  229.     }; \6 D- P2 F" I. H9 f+ ^6 u% w  ~
  230.   }
    9 k$ G0 f  O- q2 t
  231.   else if(bRestartUpdater==FALSE)) }0 X; Y" ]3 e! A
  232.   {/ i9 d- L5 F2 M! F- l$ \
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())6 x) f+ H6 R+ q8 K5 P! a0 q; ?
  234.     {5 @9 Y, r  j9 V- ~9 {( ~
  235.       file=(*p).second;
    ) S2 g; _% Q5 _
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    5 @' }% e. x. S: |6 k8 ]) Z
  237.       {
    / k2 K2 ]" ]! g# I7 N# x! n
  238.         olds=(*p).second;2 [. a: P8 ?! s
  239.         olds->vers=file->vers;+ @' }7 ]; J( @  `1 u% I* w2 x
  240.       }
    9 }& M( q0 f' D* F: a8 n( i+ D" k
  241.       else
    4 [* z/ y1 i. N$ X9 K8 A0 K# j1 c/ Y. M
  242.       {
    ' S5 R$ S, f2 d) K* p. g4 Q% t
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 q6 G* E( R6 ^1 Q6 S# F; T
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    6 q* B! F6 y/ L! b( Y
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));8 ]8 V8 S# H( G1 e+ z% Q
  246.       }
    $ ^6 `9 x# f& n4 _, R! Q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    - @: n5 ?" E# b
  248.       sprintf(filename,"(%s)",file->file);- }3 l# r! J2 B6 ~. U
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; d6 ^0 G$ P5 `: P8 e. f
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    % g/ n) J6 [  D* _6 }. {
  251.     }
    . _$ Z/ O. w, E3 T7 Z
  252.     dwCurrFile++;
    8 G& n6 m9 c' D$ E( }. n
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 v; _& s6 [" b0 r+ U6 V
  254.     {' R* D. L. R1 R4 T7 s$ _
  255.       bSilentStep=FALSE;
    " j( L9 O7 ^6 x, I6 W
  256.       bCompressed=TRUE;* j; I* j7 w: h* H; W
  257.       strExtLocal.Empty();" s  S+ [4 _, A' J: h8 z
  258.       strFullName=(*i).second;  N1 H) z" W- Z  C7 u- A
  259.       dwProgramState=AP_CONNECT;8 a! s0 O6 F5 }  A
  260.       return TRUE;  d8 r" J& b' _9 O/ c- e
  261.     }3 x; A5 v. Y) U3 n
  262.     if(!bRestartUpdater)) q0 U9 F1 N8 {( C
  263.     {* V# n) L% Y, u; ?  }, W( k( d
  264.       int iCurrSize,iFileSize;! ^4 x6 J. M( J$ l5 o6 q' I
  265.       iCurrSize=0;
    + N5 _0 H' E# D3 L* z6 b
  266.       iFileSize=UpdateList2.size();
    $ v1 c) d; L. O6 ~
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");% W$ ?9 u5 F+ p
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");2 L2 M$ s. y8 j0 R! d2 V: S; k
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ' @$ ~( ?: q: f
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 `  k/ X4 f7 W# O9 s, I% o8 W! i
  271.       Fclearf(".\\update.dat");
    8 M- M  [5 G1 _; x  }
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    , S. c8 T/ R2 \! b* a
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)" Q0 V% ~: \6 @5 Z: G
  274.       {+ {+ J0 n0 \6 y& }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())- {3 x) `+ A; p8 Z% E9 _( P
  276.         {
    4 k7 v2 G7 l) @  L* S6 @
  277.           file=(*p).second;
    : _9 a" s2 N! D$ D; c$ S
  278.           sprintf(filename,"(%s)",file->file);
    # x* V* o/ h/ G! C% i% T' ?2 d
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; V% M9 A. t. @7 K1 D+ a: W
  280.           iCurrSize++;, f! s9 ~1 \! S' s3 U$ H
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));" z5 B+ \1 I$ i2 J1 g# }" n
  282.         }! Q1 w7 L' q5 z! s, V' k
  283.       }
    0 v# S. K. l8 e  }
  284.       unlink(".\\update.txt");
    3 l2 L8 |/ M! T( e) d
  285.       unlink(".\\update.tmp");
    ! N( X( U0 l- ]; u; T2 W7 z* [
  286.       Fclearf(".\\checkversion.dat");
    3 F3 g: B  `5 t1 F7 N! ?
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);9 q8 O) ]- w# [! D/ c" z
  288.       if(UpdateLocal.size())
    3 A7 U* m/ q- o1 l7 `; n
  289.       {
    1 k$ n; z; X1 @4 I; D2 I% m
  290.         UpdateLocal.clear();0 M; b! s* A5 j9 H2 E# o
  291.       }
    ( B% K- U1 c: l0 r  ?$ b; I
  292.       if(UpdateFile3.size())
    4 F+ B. G. z2 j
  293.       {' C0 {1 y% o, d8 c8 e0 z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* h2 t, [8 v$ @" y$ l3 t5 ]* z# y
  295.         {
    0 C) X1 p. b4 S. ]9 A
  296.           file=(*p).second;
    # O# j% B7 }1 M, W5 j% `. E) j
  297.           free(file);
    . G$ W0 {6 d1 Z2 f0 b
  298.         }
    * _% r0 O0 {; j+ c
  299.         UpdateFile3.clear();7 D7 G9 H% M) `1 l, _. R
  300.         UpdateList3.clear();1 {- y" P( N5 F9 H! U  f; i: j7 D4 f
  301.       }# q' {: G6 \  A* e9 L2 k
  302.       if(UpdateFile2.size())* a0 D* O2 W4 @$ A- P. u" J
  303.       {/ I/ [) ?  j5 b) R" ?
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) w# ^. y! _4 |( y" D( ?$ }1 a( A, M
  305.         {2 d. q- f, R# D& t7 ^+ f
  306.           file=(*p).second;$ m# H& L! [: O
  307.           free(file);
    ) b# |& v' d4 C* s! p! [
  308.         }8 I3 C+ M0 k/ C5 s" N/ }" H" q
  309.         UpdateFile2.clear();0 p" U& W6 M. `) P
  310.         UpdateList2.clear();2 N% m3 [2 @, D- l& J5 `2 y
  311.       }
    + [: p# w* j: H
  312.       if(UpdateFile1.size())
    9 d8 [) X3 K; w& Z+ L2 N' p
  313.       {
    : J3 H+ O1 }/ [9 G
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! a: }6 b+ I% Y( E6 K: Z9 B
  315.         {0 A; c/ v. a1 v* j4 C) J
  316.           file=(*p).second;
    & ]- T; k9 ]6 ~1 T
  317.           free(file);
    2 c+ n$ ?% R2 @- Q' `  r- N! f) a
  318.         }
    ! R- c0 t" e/ k% g
  319.         UpdateFile1.clear();
    - ~  b4 b& L5 C2 i
  320.         UpdateList1.clear();
    5 i3 F4 U8 T0 j; F
  321.       }
    ! s, w. j# [' u) m8 h/ W" B
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));1 h+ d3 i6 G, C9 |- z* r* }6 R! l! B
  323.     }. p0 p  p. m2 w( T
  324.   }0 F4 m- k1 j4 x
  325.   return FALSE;- q" x- p: O1 A
  326. }. P+ V4 w- i6 g" Z* j. U8 V

  327. 1 B( K2 ~7 K- s: w: @
  328. void CRevAppApp::ClearAll(void)/ r5 z  F7 D( a7 a- y" Y3 V
  329. {
    1 K& e5 P1 P  X( f! Y3 \8 P
  330.   LPUPDATEFILE file;
    3 k( G; ^9 K  \) b) S7 _6 W
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    : Z7 q8 w, ?, Y( a
  332. % C. h1 Z6 d% D0 @
  333.   if(UpdateLocal.size())
    8 n4 q4 S& Z( B
  334.   {1 p' d3 B  A& s
  335.     UpdateLocal.clear();7 W: Y2 T7 b6 ?7 F" p
  336.   }
    $ x+ Q9 v9 p: J; R
  337.   if(UpdateFile3.size())
    / |* V2 \. {( Z
  338.   {
    3 y" @# x, B0 }/ u) N! L2 D4 R
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# V( Q. B1 i  K; n
  340.     {
    0 F' b, A2 L6 @* P7 [
  341.       file=(*p).second;, n! C6 W/ c6 H4 I" f. {! |; V& V
  342.       free(file);7 N6 q8 s' C7 h* B7 u
  343.     }8 e% J. j  t- |2 g+ r4 x' s+ @
  344.     UpdateFile3.clear();7 e+ _5 u) O2 U. E6 L' _
  345.     UpdateList3.clear();5 L0 U# l! e. O2 A; q! X5 S* d6 p
  346.   }3 \# o& e$ w2 y3 `- {! w) @
  347.   if(UpdateFile2.size())
    0 e" Z6 T8 n, l& [
  348.   {
    8 g1 r! D4 M* l  j
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! i' t# D3 b& `9 {  B0 k
  350.     {  l% s* h8 e7 e  A
  351.       file=(*p).second;
    . O+ {1 O- l) r* h
  352.       free(file);
    2 v, t: a7 p! J% e/ x
  353.     }
    ! m) C; X6 V0 p; h0 X% ?" |
  354.     UpdateFile2.clear();9 q" y( V* M8 v1 y3 ~7 b
  355.     UpdateList2.clear();. d: |3 Z$ F; Z* q9 {! A
  356.   }% ?: ?. g% {: }( B. N5 v
  357.   if(UpdateFile1.size())
    9 I% \2 R: A- R/ C
  358.   {% a; Y* \) M6 H1 f& a( t
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    1 k/ \5 b" Q- y
  360.     {5 U" `9 ^  W, r0 N
  361.       file=(*p).second;
    ; p* U6 |- K- S* i. H
  362.       free(file);5 ^9 N5 Y$ Z/ \% b0 Y" a: S
  363.     }
    0 l1 Y. D! _( }7 N3 l7 H
  364.     UpdateFile1.clear();% @* g9 ^9 U- ]! q" e/ S& _( B+ c
  365.     UpdateList1.clear();
    # E2 v+ j9 C' B$ R: F: i2 |; R6 U8 L
  366.   }
    % v, o* [! g' d$ V. N
  367. }  
      }0 v, X  N7 n# i8 o* I$ O$ J
  368.   % e7 ~# ~+ h4 O( G: \/ V5 a
  369. BOOL CRevAppApp::CheckLocalVersion(void)/ b2 @* p* n. p4 l: {, a; v
  370. {
    " q6 J* i, ?8 e. \$ _* w
  371.   int c;7 G6 Y/ l' @6 D$ e4 b3 z8 Q
  372.   LPUPDATEFILE file1,file2;
    : B( ]8 Q# f; o( u& F/ U# z8 W
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    8 k7 _* l; o& W" a0 c% ]
  374.   std::list<CString>::iterator l;
    % Z9 e* m5 _. i

  375. " m( S; }0 s; s/ }4 ^3 N. `
  376.   UpdateLocal.clear();% m1 x# R5 a# K& |
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);# |& o" x- k# W8 B; V; w4 N  d
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);7 M, X, T; M1 u' ?1 C7 F
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    3 U( E# ^! [; p2 A7 ]) ^& F! ?/ `
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);# C) j9 @; k8 w8 o! E4 S
  381.   if(UpdateFile3.size())
    - y( G4 R$ w: E2 f4 @
  382.   {$ [/ P, A7 L- p/ a3 w$ D5 ?
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    5 G; [* T. E0 Z" T7 t4 h
  384.     {- _' _; r- v3 n: Z* z, m% ]# g. `
  385.       file2=(LPUPDATEFILE)(*i).second;
    7 B1 K2 H& g7 x: x+ w
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 {' q. S! `; C
  387.       {
    " c* f, y' u4 b
  388.         file1=(LPUPDATEFILE)(*p).second;0 r; P! b+ }. \% T! _0 {
  389.         file1->vers=file2->vers;  M7 A4 C/ e! H; U1 G# _8 a
  390.       }
    4 ?* s8 |3 T$ A5 r5 o6 U- t9 C0 C
  391.       else# t) A3 f+ X% l; T
  392.       {6 v( A) m9 J$ U
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 W; l/ ], `% A% k% S' H9 p
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 ^# _, r' U- Y; I5 x! F3 k( @# S
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    $ X  _' S1 m4 `; B
  396.       }
    6 U8 j9 Y7 Y$ L# K# v% a% f
  397.     }
    * a+ u( ~: F/ [- e# F1 F
  398.   }
    9 s& i3 ~, q# v
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    - }6 z6 x+ m/ m7 C2 C
  400.   {: _9 C* A- e* ^8 h5 v
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())  s+ w, r( @. d
  402.     {
    3 q& ~# Y- V9 H* R
  403.       file2=(LPUPDATEFILE)(*i).second;
    0 K/ P- R/ p2 n( q- y% }/ K
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 ?2 g$ H7 {: b
  405.       {) Q6 n  L8 h4 K. R/ R
  406.         file1=(LPUPDATEFILE)(*p).second;
    1 x8 E( ]8 i5 j7 H4 B6 T, d
  407.         if(file1->vers!=file2->vers)% M# S, V# c  F6 l- |  T9 C
  408.         {; t- z4 l  d. H6 W
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' g- f& b6 t& z* y/ m; K
  410.           c++;
    3 K0 I5 [  _+ |- H
  411.         }+ U1 I2 A; |4 G% }$ w  h
  412.       }
    4 W; F/ S8 V3 w* P4 t: w- g5 i
  413.       else
    + A" \: R- T5 \  O5 @. E7 J  H
  414.       {
    ! V! Q+ a6 M7 Q+ A7 z! ?# |
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( p1 x: X5 P7 g7 d* ]# M( n
  416.         c++;
    # |$ B* N. P& U6 P4 O- c: y+ _
  417.       }% a+ y2 W$ u3 s$ j; F$ }$ `% U
  418.     }) X8 i) y7 m! q6 h: ^% _5 H$ }
  419.   }7 m' Q! Z* \. S9 }
  420.   unlink(".\\DownLoad\\update.txt");# R8 H# A0 K: q: }0 Y- h; I
  421.   if(UpdateLocal.size()) return TRUE;
    8 z* Z. T1 G9 s$ |0 ?% L  p
  422.   else                   return FALSE;
    ; R. e/ ^! F$ e( E& l( C' m$ s
  423. }
    * q/ a) H1 S5 y. S& a" U
  424. 2 i" w0 {7 n3 q
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 G6 x  [& R2 X! T! j0 B
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    9 [# P9 I( }, \% F
  427. ( j9 U/ F/ x1 Q+ \: t) q8 h
  428. 5 A$ s. E5 V! z: W6 l6 p/ Q* |" p

  429. + i/ L$ C( R9 @+ C
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ ?/ J) @. |9 l8 G
  431. {& h3 _; F9 S' e/ k8 x+ f! Y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;2 Z# t" J( Z0 n! a/ M- G8 K# r
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 N/ ^# Z/ I! w! S
  434.   {
    - _. [" ?7 M6 x: w$ E- P: I
  435.     char szLanguage[50];$ V5 ?7 ~: j% Y' z2 E' `
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 h3 t5 N# D  _  d
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 _, [5 P6 C8 a9 v5 r1 h0 ?
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    4 S9 o/ J6 p5 K! K2 C( B$ m
  439.     else                                   m_iLanguage=ENGLISH;
    6 O4 c0 I9 K; m8 p) \. Q% t. q4 k
  440.     char szRegister[100];$ l2 |' I9 s8 `$ X; Z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" x9 t& v, [5 y6 M- l
  442.     strRegsName=szRegister;6 F2 o4 c: \8 c/ a! e8 N: k
  443.     char szPatchURL[100];
    ) H; D! w+ Y8 B4 o+ o* e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 R% c# {' Z2 p, E# A, p; @" [
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 z9 H, P( [- N3 }. t* Q
  446.   }
    0 e) X* Q8 h- F  W& w* y
  447.   else
    ! m& B; H( G+ L2 U( b
  448.   {
    ) r" X( v3 m9 ]/ \8 W9 G
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 S8 L  \+ R  R+ G6 B
  450.     strRegsName=DEFAULT_REG_URL;
    ! D  U+ S# l- @! b; X
  451.   }0 v9 b. {% c9 I
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    - j/ N0 r/ f# N6 e9 M- P9 K
  453.   {
    ( d0 S9 N) R. Q4 M4 f4 U: M
  454.     char szIP[50];+ E/ W) o: M" G/ \- v
  455.     char szDIR[300];
    4 l* I% x" p  Z
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))( D% n4 D4 ^" p) i4 Z
  457.     {
    4 I. {( N/ z0 }/ ?
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");0 y  A* M( `! S4 Z( [) E- ^
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");0 C* d+ G7 Q& ^5 }  g
  460.       strHostName=szIP;
    3 Z. T# C/ y  q0 n+ h0 U
  461.       strHostPath.Format("/%s",szDIR);
    ! c4 b1 ~3 q9 U/ b" _# u( ~
  462.     }1 ], v5 ^& I8 Q
  463.     else
    / _* N3 N' b# h
  464.     {( x' l, B: h9 w1 \9 p3 G
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)) B: N; k2 \' i  R. p! s( H$ x
  466.       {
    7 T' [2 W; `2 g% ]
  467.         char szLanguage[50];+ @" O( F( ^- t; ~* r" Q- c1 N
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    # K) B3 d! N" R& ?+ A/ T1 E
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
      T. V  Z1 y. z* i# H( _! H
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & ~9 G* F; z/ B2 V5 F  z
  471.         else                                   m_iLanguage=ENGLISH;+ b7 u# i' ]) A; f1 W
  472.         char szRegister[100];7 a9 J; `' ?' l! W
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 n0 X( c1 Y5 Q
  474.         strRegsName=szRegister;
    , |4 b: u  z, f0 H5 @6 ?
  475.         char szPatchURL[100];
    3 `4 W+ O' J1 S+ g7 ~
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . L4 X, y+ B/ Q) c8 b) x4 Q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ Y1 ?0 ]7 J  d& x& r: Y6 Y. O# D
  478.       }  Z1 o! }. x' W1 N
  479.       else9 C9 g4 e! E+ D
  480.       {1 H0 u/ Z  x4 a; _) N/ G2 s
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);0 }# @" \# t2 x" {$ T7 m
  482.         strRegsName=DEFAULT_REG_URL;
      ^9 i0 W3 m8 y1 O3 R! G
  483.       }3 W: J  }4 c. v# d/ E" I$ C
  484.     }
    8 r# t- n. D  D9 m& r$ q9 |, f7 i7 H
  485.   }  l9 `4 U9 y& C1 Z) c
  486.   return true;: Q- I5 q$ q2 s
  487. }# d; @; @7 y/ a% y! r$ C5 l
  488. 2 R2 z5 P  ?" _1 p7 `6 u7 B
  489. #include ".\ZLib\unzip.h"8 i3 V6 S  k" P9 n# x& g  c6 L
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 C0 t* w! M1 b. G( \. F0 S
  491. /////////////////////////////////////////////////////////////////////////////4 V8 d; g6 F4 S% ?
  492. // CRevAppApp initialization" ?! m+ J: C) v' O( E/ O5 z
  493. : g# g! R$ {% Y+ Z2 o
  494. BOOL CRevAppApp::InitInstance()1 X6 I3 C; U, T8 D
  495. {9 r) X4 Z' y: C; P( J
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];" l4 j4 f( @5 ]7 m$ ~- o- l5 q
  497. 7 Y! ]  l7 B6 }+ B# l8 Z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ' E0 L; T+ G7 ^/ v: f
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ; P% P8 V1 Q* B& I+ Z  p0 ?
  500.   {
    / H8 ~% e( e1 H8 r, c' V" b
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    & e6 \) o" N4 \( n4 I4 R
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 k; y) D2 Y. B6 Q+ V# t
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    6 J& U* l* n+ U4 {( N0 X
  504.     {( i3 i0 B  U" E# N4 S
  505.       strcpy(szPath,szPathTarget);
    # o3 P4 M/ q& `" h6 s; P
  506.       SetCurrentDirectory(szPath);) ?" {0 A4 R' v; y0 b% S
  507.     }" p. Q8 r' J% I0 s4 A+ Z0 s- V! G
  508.   }
    ( _0 M6 [" |' `  O$ g3 }: e
  509. #ifdef _DEBUG
    & G4 B  |) l' F0 Q7 L$ A
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))* K2 t' K' I& V9 A8 [, C5 o
  511. #else
    & Q& X3 |! A% Z+ u4 a
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" q" T2 j; f& k+ H8 @- d
  513. #endif+ V+ n% s6 B9 B* p3 ~
  514.   {: U4 L* Q9 O3 S
  515.     char tempFileName[MAX_PATH];
    8 S4 ~# p+ P: e5 t0 l4 o; u
  516.     strcpy(tempFileName,szPathSource);
    4 T; S. E! _- W4 d7 v  `
  517.     tempFileName[strlen(szPathSource)-12]=0;0 i8 N. \/ o8 o- k& ?" `# W2 t
  518.     strcat(tempFileName,"\\$CSUpdate.exe");; T3 v! z$ j! Y- A) d3 ]5 J
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);' m8 p# X/ n- Q+ d) \4 `
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);/ s5 q# V$ B. i+ [6 R& ^
  521.     return TRUE;+ q0 l+ V8 G6 L' D: J
  522.   }% \) [$ Y- ]/ \+ ?: t% u
  523.   // Nuke 0118: Delete run.exe
    ' c$ Z4 s/ x6 B# P3 a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    & M0 {( Z2 g# ]: y& W  G) f
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");9 d; y. ]9 [: x# y( K- x
  526.   if(!ReadCfgFile("Config.ini"))1 A2 D7 j& C( h" H
  527.   {  G  X) r* ~* e: _
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 B3 Q- n: Y* J* H
  529.     return TRUE;
    / `) I' \8 n3 Z% u- A7 u& R9 c# ?' ]
  530.   }
    % N6 i! F/ ?& U7 G3 P
  531.   HANDLE mutex;
    ; [2 l, X$ y( K
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    $ L+ u0 f, U" @/ x; s% d, I
  533.   {
    6 T) }1 g3 l" ?' A- f# W; J9 A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    : r, P" e/ }3 U: }; C5 E
  535.     {# b+ q6 c  U% H
  536.       CloseHandle(mutex);" |- y3 M, `4 G5 _* ]7 P
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 o; U- a- t4 R6 u
  538.       return TRUE;0 R3 r6 F7 J% T8 B+ c5 s) ^- W4 j
  539.     }! r) T% g+ N+ j
  540.   }  
    ' T3 Q1 s' b  n& |
  541.   CloseHandle(mutex);
    7 W3 W7 Y8 Q& ]

  542. 1 @& v$ M6 z- v6 t9 {" F/ ]  y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    $ A$ V; C' N$ f% [4 |

  544. # I( u" C) u" C9 R8 `
  545.         AfxEnableControlContainer();
    9 H( r: l, z  J) R5 F1 W, _
  546. + \% D/ [$ [" a8 \" J
  547.   bCanUpdate=FALSE;/ V# o: p4 o5 G" N  A' l/ p9 v
  548.   dwStartUpSteps=1;* R" y+ G0 y" Q$ \3 B
  549.   dwProgramState=AP_NOTHING;. K. p: H# D2 `: P8 |! g

  550. 5 [7 [0 y) _( ~
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);& s  e: z8 n; d0 K) k; ^1 o
  552. 6 _$ w  j. {+ X+ d  C1 t9 E
  553.         // Standard initialization  w/ N  Y( I: i( {) F1 a
  554.         // If you are not using these features and wish to reduce the size( f3 n8 U1 \) v& H2 n0 Q/ E: V
  555.         //  of your final executable, you should remove from the following
    + c, K4 R6 `0 U+ [
  556.         //  the specific initialization routines you do not need.. H) e! M- d' X" e5 v* h  i, n
  557. + Y, n. U& a7 u- x1 a2 C
  558. #ifdef _AFXDLL
    ' z+ Z( b$ K) j& h
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    4 _1 G3 U. F! u
  560. #else
    ; O/ i4 M2 p  k) ?- {
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically; u# ^8 O8 f4 S1 ^& l7 r2 a
  562. #endif' d- H# \9 J0 h3 y
  563. * M/ I5 P3 t! f+ R; J( Q: B6 ^& `
  564.   dlg=new CRevAppDlg;
    & Y5 U3 Q/ d* C, Y
  565.   dlg->Create(IDD_REVAPP_DIALOG);) h# F% b+ |7 E. c, x8 m2 U
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
      C, P: S& n1 i, B. ~- f% y2 W3 \
  567.   m_pMainWnd=dlg;
    # x* d3 E* j* E5 X& w! u$ w

  568. " X- L) ~9 i/ M7 P. Y( x- I
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 g& {  A+ Y* K7 W- L/ E
  570. 3 q; P& @/ O/ u$ ^. G; i. p& }
  571. //  GdiplusStartupInput gdiplusStartupInput;
    & x, w" J9 E# U/ t' N6 k1 _: P) d
  572. //  ULONG_PTR gdiplusToken;
    6 u3 o) {. ]( x1 C. H) _
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    2 A/ D4 A/ W& D( u

  574. . X# Q4 }# k1 l2 y% K& V
  575. //        CRevAppDlg dlg;
    # X# w0 q/ B3 r1 n
  576. //        int nResponse = dlg.DoModal();
    ) c! j$ u3 T% b9 M; T+ t
  577. //        if (nResponse == IDOK)
    7 B, R3 ^3 i7 E& R' e- p/ V+ b" a. y
  578. //        {
    ! j, u" }! v9 X5 C. {
  579. //                // TODO: Place code here to handle when the dialog is
    # s% r3 o1 U; X1 i/ m9 G3 S+ a
  580. //                //  dismissed with OK# f, |' q, O3 s! _% K" e! R  f
  581. //        }8 P3 o% E1 O3 g' i) n3 T9 k
  582. //        else if (nResponse == IDCANCEL)
    , w' ]+ D& A# Z# h. U' w7 q4 g. F
  583. //        {) g4 G' T5 S0 t$ b; v' }# o) U
  584. //                // TODO: Place code here to handle when the dialog is. y' Z' }! K% F. I/ p
  585. //                //  dismissed with Cancel% [" H4 _* v4 I1 D% _3 `
  586. //        }9 P; e0 ~7 X* }- F9 h6 }" s! c

  587. & y4 Z$ Z1 F; ^* G$ H' z' N8 ^) L
  588.         // Since the dialog has been closed, return FALSE so that we exit the, B' l3 ~. M& L$ b( z
  589.         //  application, rather than start the application's message pump.+ M4 y8 q/ f, Z
  590.         return TRUE;
    ( z* @1 v7 u! Y$ X8 V- H1 p
  591. }
    1 h- |/ |  F9 t% @

  592. ' J5 a5 u& s1 p" {$ F
  593. char *CRevAppApp::strtok3(char *pSource,char *token)) k  Q' F/ z, D9 y( R
  594. {
    4 h/ i0 s% P: M( v
  595.   int i;  n$ U6 k7 F& i6 l
  596.   char *szRet;( F) o2 o/ K2 S7 ^" e7 f
  597. ' m% j' r  L9 L7 M5 y
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    - I1 b4 V' ]1 t
  599.   if(sztoken)8 G; f  |: _5 V3 |
  600.   {$ j& Z+ [. b: t6 M
  601.     szRet=&sztoken[itoken];- ~& y2 V) T4 ~3 b+ e) n1 t8 N2 z/ M
  602.     while(sztoken[itoken]): f, D  S. x% z& T% i3 G$ [
  603.     {
    2 X4 g- j- _: y7 w4 x
  604.       for(i=0;i<(int)strlen(token);i++)
    - X. y8 d9 K, u$ [
  605.       {
    6 C7 V5 |3 l2 H/ S$ N
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    9 B6 C# q& U8 A8 i8 N: o/ j
  607.         {
    ( L1 d6 m& U0 `# {8 _1 V- s
  608.           sztoken[itoken++]=0;2 \/ c/ t8 W- H) s5 Q8 B3 A
  609.           sztoken[itoken++]=0;- x; S  O1 A! r4 `; n6 q# R) O
  610.           return szRet;* K( f' d; X4 X, V" R8 _+ c
  611.         }
      n6 l! }  q- G; W
  612.       }0 ^2 d! y8 i/ ?- \
  613.       itoken++;3 v: U1 H5 a4 V; q* ?( |
  614.     }
    4 a' M3 U2 ^5 _/ |. K; w& L. ^
  615.   }" J7 `% q8 \: K# O/ U
  616.   return NULL;8 ^" I1 ~& W: i9 D1 I5 G- p
  617. }
    + O. M' U) G  T8 _

  618. 9 h" O. P9 r) s
  619. void ProcessProc(long Total,long Current)7 _: k5 b/ I8 O$ c- _
  620. {
    - m3 R# k" B4 b4 j/ `! y; [6 x: f
  621.         MSG msg;1 o# ~9 J* Z$ w+ a
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);+ Q1 n. T2 m* w" P+ o# J
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    2 U, b% u& f% g# g
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    6 T: {( \. \) ?0 }, E) s+ @
  625.         {
    8 b' _9 K6 [; h* ?& f2 I; h
  626.                 if(!GetMessage(&msg,NULL,0,0))
    / \6 ]% T  i& k+ d6 e& U
  627.                 {% f) v# L* x* \, B- D0 n6 B
  628.                         return;; T% H  f' }$ u
  629.                 }
    0 K8 O- z9 Y) M. y; t2 d' n6 b& H
  630.                 TranslateMessage(&msg);: @, c. P6 z7 a3 L9 V- }
  631.                 DispatchMessage(&msg);# k9 N7 S; a! B' e
  632.         }       
    : {4 ]/ [; s- N  `. |& c
  633. }6 A  K8 v4 m. F' I% d( z, m

  634. ' `% V! b( L3 E
  635. BOOL bFirstChar=TRUE;0 u; g0 |& P! ~
  636. 8 k) h4 ]0 _  x9 `, Y: p% X) V* @. K% G
  637. BOOL CRevAppApp::OnIdle(LONG lCount)7 b7 n6 \  I# I7 Q, h
  638. {$ C5 F) `  r4 R. O  C9 u) g; H0 ^
  639.         // TODO: Add your specialized code here and/or call the base class' \4 k3 {' B6 N3 B/ e' a6 x
  640.   switch(dwProgramState)
    0 L5 z- z8 l# C: n
  641.   {# `  s4 R+ J) q
  642.   case AP_NOTHING:
    8 g& }. L% Q5 X2 K
  643.     switch(dwStartUpSteps)
    & E4 |8 T0 B! _' B! J
  644.     {; v) C4 I9 ~+ |* ?, L
  645.     case 1:, k9 O& ]: k; J9 p  I' z
  646.       {9 }" Z+ n  R( b$ e2 J
  647.         int i;: l# `9 k  `# P  [
  648.         CDC *pCDC=dlg->GetDC();- F: L1 j5 J: S/ L# x
  649.         HDC hdcwnd=pCDC->m_hDC;6 N5 E' b3 _& x7 E$ B3 c
  650. //        Graphics graphics(hdcwnd);) X4 i. K2 V* D- G" T, [5 _# H, R
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");7 E0 f% f3 Y! p( Q# |$ _
  652. //        INT iWidth=bitmap.GetWidth();2 o9 {. H/ x) ~' H4 _
  653. //        INT iHeight=bitmap.GetHeight();
    ( O. `6 G  U  W% P+ g6 K7 t
  654. //        Color color,colorTemp;+ I( Y/ f( Y0 \: p+ H  ?2 Z
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)1 B; D% X& A+ n+ m  x" |
  656. //        {4 ^: I8 |- ~- s3 W0 g
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)8 {8 G: K) `  x
  658. //          {
    3 \2 A9 {" [' \$ l
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ) U" r1 I! @  ~
  660. //            colorTemp.SetValue(color.MakeARGB(9 S! d! o3 c( S- k8 b
  661. //              (BYTE)(255*iColumn/iWidth),: T+ j# c4 Z% i; n9 r
  662. //              color.GetRed(),
    6 ^3 J5 A+ k8 ^
  663. //              color.GetGreen(),
    + d( x( g, G' F! W9 i" b
  664. //              color.GetBlue()));9 v2 B3 Y9 D, m9 _- t
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);4 K8 \/ S2 y" x+ C
  666. //          }+ T4 S$ H" n+ @$ n& c
  667. //        }0 N6 L5 U9 j. ~! @/ P
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);2 X* D4 s* w8 n0 e6 |+ U
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & }9 }5 D: P3 O8 n. ?" }3 x
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");; w/ d2 `( b. z5 _. U: U5 h$ |
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ L/ _* g3 [2 _3 E  @8 I
  672.         for(i=0;i<240;i+=8)
    ' h5 n! y& @: b2 I, k- u* ~
  673.         {$ y* `/ E- m3 \9 c# T2 x
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 ?) w9 x; I- l, K, l
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 k0 e) `5 `3 B, U( P+ T
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" w/ k8 }6 W( Z" R$ f  @# Q. y
  677.           Sleep(33);5 K5 e4 w; v: g
  678.         }" C6 v0 E% U3 J: E: J! W
  679.         Sleep(1000);
    ( h' x3 L0 H! B" \1 r4 P; F0 X3 \
  680.         for(i=240;i>0;i-=8)
    % x3 G" m8 T6 {' A$ e+ s; |/ b
  681.         {
    3 ~8 T0 W% p' [" k
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      Z/ s& W. \3 t; b3 {, E( ?
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - ]' y2 S8 c/ e: ^3 |# u0 a
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' L& b1 N+ ^( {" I! k4 s+ i
  685.           Sleep(33);
    & T# `, ?) `. ~# t1 q
  686.         }9 T; o& s+ {0 U$ W* [  I
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    , s1 g9 o, w/ q) j7 Z
  688.         dlg->ReleaseDC(pCDC);. r8 }5 W. L- j2 N% P) a) o: b$ @" v
  689.         DeleteDC(hdctar);8 r! _" H( [# M. f0 C# l4 ~9 f
  690.         DeleteDC(hdcsrc);
    6 q* @6 D; c# @. n( q9 |: s
  691.         DeleteDC(hdcorg);
    5 `. e; F6 s/ ?4 T# p1 z; `
  692.       }) z1 `. _0 H4 c- c  w* W- K2 \7 Y
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);2 i2 x. b! s$ f; f* B
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' T5 C9 t/ R; W7 i) O
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    " @- ?7 b; u4 V
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 G+ Q/ k0 h  I7 ^4 u
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 |, r$ H( ?1 r3 C; j  z* n
  698.       if(!Dn.Connected())
    ; A, ^. j& w' L0 {1 h  W- n
  699.       {  ?1 R2 o$ U* _  X, Z, |' g
  700.         dwTotalFiles=1;
    0 J7 B9 d9 {8 w( p' H
  701.         dwDownLoaded=0;: @1 e6 c% J. H6 i$ R8 `' c/ w+ Y
  702.         bSilentStep=TRUE;2 Y, @& x; n5 ^- F9 B, v; p) _
  703.         bCompressed=FALSE;, M- B* k* p9 k# a# d$ P& A2 J0 t& k7 `
  704.         strExtLocal.Empty();& Q) E; T$ f- I9 f% K$ W# C! E5 }# w
  705.         strFullName="readme.txt";
    ( i! l, g$ o% [
  706.         dwProgramState=AP_CONNECT;
    + z/ a( C" C  U6 @0 o( x
  707.       }
    2 _6 h% ~9 i7 P1 ~3 \7 {
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();3 x- f7 o3 F- ~, l
  709.       dwStartUpSteps=2;
    / q4 c3 d0 j) R3 v% r
  710.       break;$ F5 j) j+ k9 U* w3 h! P
  711.     case 2:" q/ t2 g6 g8 R  U5 [2 [2 w
  712.       {: U2 [8 ?2 w' ^+ J8 H
  713.         int iEOF;# I5 e; [$ g6 h/ W* U3 Q2 z1 X
  714.         FILE *fp;
    . R" T4 s/ _; Q! w, ]( d3 c
  715.         char szString[512];- o4 k5 T/ R5 C! ^
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    $ |' F7 g2 U* L8 @0 W
  717.         if(fp)
    - d  S: C5 r8 L5 T
  718.         {6 B! m: i' T) t: [0 k0 I8 ^
  719.           do- Z+ q- N7 a% F- v
  720.           {
    3 g: w/ s8 A  t) Z: ?  t
  721.             iEOF=fscanf(fp,"%s",szString);7 |# z/ i/ B/ R6 V  @8 ]7 ^
  722.             if(strlen(szString))
    3 J/ b# R* c8 L1 `- X# S; d
  723.             {
    ) f% z, j6 P; ^9 V3 F/ x" ?
  724.               if(bFirstChar)
    & D2 L( D$ U$ c, s
  725.               {0 r6 l& t/ T: G2 M1 P/ C/ i
  726.                 bFirstChar=FALSE;% I  o8 g+ O3 N5 K4 {- b, l
  727.                 bConnectIsBig5=FALSE;
    5 L) b. Y7 z/ U* I3 j/ H
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    : D8 M' P/ i; h8 C9 v
  729.               }
    7 s1 Q* e, d- I  x4 r
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    7 d" n2 b2 O% b. W
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    : ]- c; t' u7 |/ n
  732.               dlg->m_ListText.AddString(szString);9 d* @1 m5 ~' w) k0 S# ^
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! X  k# F9 [! F0 r  v! e6 v
  734.               *szString=0;3 Y- d7 k& N: c: t! y
  735.             }  I) g% m. `4 q$ y9 D) |
  736.           } while(iEOF!=EOF);& Q1 W* G/ Y1 ^0 p$ [  y! F: |" L: w
  737.           fclose(fp);3 G7 U  {) u- I. m, _" R
  738.           unlink(".\\DownLoad\\readme.txt");5 Z3 K3 e8 |; }# b4 l
  739.           dwStartUpSteps=3;
    - q+ k/ t3 F. w5 |
  740.         }
      b, }2 I: p* F9 c$ p0 ^
  741.       }& n/ Z& B1 s, Y. L# Y
  742.       break;1 z$ A1 {0 |! j* D
  743.     case 3:
    3 o$ w& n4 g; T1 H( J
  744.       if(!Dn.Connected())
    ( |! @' i. K( A4 s; d" c4 \* t
  745.       {; z0 d2 f" @" K. d
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 O3 I# V) I( Y1 p
  747.         dwTotalFiles=1;$ _7 T! G8 _  F# ~7 ~
  748.         dwDownLoaded=0;" C6 f, X7 J6 }8 B3 c
  749.         bSilentStep=TRUE;- Z- Y% g8 q- r9 n. ~/ u/ P$ t' v
  750.         bCompressed=FALSE;( x: v+ o  Q1 P& U' F3 u+ p( k
  751.         strExtLocal.Empty();' M- Z. l- r! C0 C6 R7 t2 [
  752.         strFullName="checkversion.txt";' ~4 L3 z2 z7 t9 J% W( N5 t( i
  753.         dwProgramState=AP_CONNECT;
    ( g- C' l) U1 f" F7 q
  754.       }
    : J) |3 V$ u9 C1 ?# O# s* G& v, [
  755.       dwStartUpSteps=4;
    ! j3 j4 u- @& U* ^8 t# h9 I
  756.       break;( g% \( Y* I$ [1 O$ m( z
  757.     case 4:+ f( C0 ?& U5 t, ^! z1 k, v( w
  758.       {
    ' i4 d9 _- `& h5 c7 Y& p9 ^
  759.         FILE *fp;3 Q' O0 X/ j, D1 G( X
  760.         char szString1[128];- d6 |+ R" o/ j# z7 O* c) L
  761.         char szString2[128];
    5 V" a" D. L5 @2 r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");" j( t* d+ i8 L4 d* V" c, H
  763.         if(fp)
    ) `( ~  ?6 W# u
  764.         {
    + c) a" ~* t. ^
  765.           fscanf(fp,"%s",szString1);' f) h/ W& c% B& b$ I8 G
  766.           fclose(fp);4 D+ n' @% X6 B* o2 F( m
  767.           fCheckVersion=atof(szString1);
    1 ~# M" ]' f/ a( y+ ^- G  _
  768.           fp=fopen(".\\checkversion.dat","r");
    ! `. W' S- @; y3 y/ q/ z
  769.           if(fp)  J% y2 c5 u" g: y* a
  770.           {' |+ P& o5 ~6 u. `
  771.             fscanf(fp,"%s",szString2);
    2 G) @% _7 c5 i5 }/ B- Q: W
  772.             fclose(fp);
    3 g0 [6 ~# R$ |7 N) ]# M8 c7 O) H
  773.             if(atof(szString1)!=atof(szString2))* n2 e: w/ U# G  J4 h# I
  774.             {
    % a; e3 v  e9 g" i+ x
  775.               if(!Dn.Connected())
    - L9 g9 b  R. I& |; }5 Q% t' @
  776.               {2 k% u" F9 c. l' \
  777.                 bFirstUpdate=TRUE;( P- F8 D( d0 f% t) Q: @* @
  778.                 dwTotalFiles=1;
    - Y( g" f, @; A6 Z. E0 ?
  779.                 dwDownLoaded=0;
      A, s8 P: Q8 w- Q2 q
  780.                 bSilentStep=FALSE;8 q: z" I" G& S3 [+ S
  781.                 bCompressed=TRUE;8 Q( {" a  p% U0 L7 G
  782.                 strExtLocal=".\\DownLoad\";
    2 L$ S  Q5 P. s4 X! o( n/ u
  783.                 strFullName="update.txt";  U: i" [$ @9 e: G1 u( N
  784.                 dwProgramState=AP_CONNECT;
    9 C. Y8 P1 e: G
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( Q, O( n% r/ F
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 U8 D+ ^1 Q; g0 _" s
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");& ^( |- o( T! g3 b$ Z
  788. . M9 L' W; o) d. e' [/ @/ w8 i! y
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ {* _! _  l2 l2 B0 _& u3 y4 s
  790.                 unlink(".\\DownLoad\\checkversion.txt");/ K3 F: ]; n' B& _" F
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    9 y$ {* E1 q, ~# \% T
  792.                 {% W9 ]! Q( n2 a; w2 `: O3 e. X
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");9 j( h6 K7 j; @2 L
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    5 s+ O; x+ {7 c! ?$ \
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");4 ^# R+ x4 H. Y; x& k  y  ]
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # X/ {3 j- c* K8 n8 H

  797. 7 Q8 r$ |, J1 ^5 p/ ]
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      ^. K; p, l4 c% Y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. |2 p$ J# g9 F' C: l; M
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! e8 ~9 F8 h, L4 y7 E; v
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % l7 _* a+ w( u" K4 X0 f; }$ C
  802.                 }' d& n/ U- J& I; U2 k* w1 h5 f0 p. E0 m
  803.                 dwStartUpSteps=5;& l6 l/ B- ]. F2 V
  804.               }5 _3 b3 E9 W1 j3 J; S0 @& V
  805.             }
    ! q6 b. V0 y* X* E& T+ i; Z
  806.             else
    + a( x/ \; w( n8 B/ f, D0 ~
  807.             {
    0 R# V  v  h$ H; \# B9 \% P
  808.               unlink(".\\DownLoad\\checkversion.txt");& g- U8 R( u3 K3 l& P
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    " W8 V- V: ^" p+ B3 z
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ( L2 h( s6 @; v8 m2 _
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ) m% E- c- \! X

  812. ( }8 B0 N: ~/ {3 [8 z1 Y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( r( Z  L! z& a  u
  814.               dwStartUpSteps=99;
    0 T* ~0 {4 ^2 S0 g2 I+ c7 ^+ A) S
  815.               bFinishUpdated=TRUE;. s1 u% _! v  n/ j" W3 y: z
  816.               bCanUpdate=TRUE;
    2 I; {9 L1 S; \
  817.             }- s+ P9 ^! J; h- s  A1 o
  818.           }
    / e+ C1 k7 W4 I* q' U" Q! k
  819.           else) x1 d8 A* j8 p
  820.           {
    ( E, [0 f  M6 A; L# u+ j
  821.             if(!Dn.Connected())
    9 ^2 C2 z% E+ h; M; L) k
  822.             {
    1 W/ ^  ~1 D# m, m2 c$ ^- S
  823.               bFirstUpdate=TRUE;
    * E1 T" _; p- o" v4 P$ }
  824.               dwTotalFiles=1;* W" J( P# l- P$ B
  825.               dwDownLoaded=0;' [2 h2 ?" H* `# |
  826.               bSilentStep=FALSE;
    / E& y; Y" p( ]3 B
  827.               bCompressed=TRUE;
      R3 {! a) w2 L& x4 D  g* w
  828.               strExtLocal=".\\DownLoad\";
    5 F% N$ L+ u: d; ]/ ?0 R
  829.               strFullName="update.txt";
    6 e, {# i. f% ~8 s9 a/ |, i
  830.               dwProgramState=AP_CONNECT;8 m8 |7 a$ Q0 i2 n. F# O
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ' q: E0 o5 t4 B7 G
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    # T" M+ d" P6 Y, w. S; M* Q
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");) E4 d+ Y8 ^5 p
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 H% ~/ o7 ^: [8 q; P: N. Y
  835.               unlink(".\\DownLoad\\checkversion.txt");4 @2 z( h% R3 P3 a
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)5 |. A; ~3 Z# k" z$ \
  837.               {
    0 \4 H) [1 e; P2 h5 z0 u* `: \
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    - ^  u, J" c, a0 K8 t) {5 J
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");+ q; x5 W4 _; x% L
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    # M: N" d0 n' \/ J5 @% A
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & ]. z% g  R/ n; ?
  842.                
    + c$ Z: K/ k3 T  \
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# {3 T+ }# Q: }- u3 h9 W
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' Q8 w# {6 g$ d' _- |3 w
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");- S8 t7 D8 {" S; m8 Z0 p: C* T
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 Q! [3 \! x/ c) F* r9 [+ ~- }
  847.               }; S5 R0 P6 j. M8 C$ M* B( }
  848.               dwStartUpSteps=5;
      X* R. ]# @. a6 @& S
  849.             }
    3 |7 Q2 {3 o& i. m/ B, F9 U( [
  850.           }
    3 G; \/ G1 s$ q& g5 T
  851.         }3 g0 y3 I6 y0 @
  852.         else
    , q5 t. @" |, B3 p% q3 q
  853.         {9 r! V( P' S( ]6 c8 F7 p1 G
  854.           dwStartUpSteps=3;
    9 Q. s1 w  X+ B3 I8 L' Z5 Q
  855.         }
    ) |  ]$ ^: b0 C/ n0 Y6 O
  856.       }  p, y  R8 `2 V4 Z! w* ^+ ?+ k
  857.       break;
    & L! r/ L+ B! a; V6 {* |" c+ y
  858.     case 5:3 M+ x8 \4 J- v2 D6 y1 K) X
  859.       {
    5 L( d* h6 a' ?6 Q; x; |
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    , s9 f8 s# N* A5 l
  861.         {
    # q7 ]$ e: b+ K0 a$ P: d- V
  862.           int opt_overwrite=1;& V: ^& ^) C2 [2 a( x9 T9 k
  863.           int opt_do_extract_withoutpath=0;9 l! B. z1 R, y6 k7 s# Z$ i: Z
  864.           unzFile uf=NULL;% |' t+ h+ j" m  K" s* J

  865. % {3 C& c6 K! p9 o+ F/ b
  866.           uf=unzOpen("Wsa.zip");
    9 q9 |1 N) X1 b- Q
  867.           if(uf)
    + a/ L' b8 v( ?0 D4 [# w
  868.           {
    # T6 x" d2 b: q
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);- G' |) A/ P2 q/ M8 z' U
  870.             unzClose(uf);
    3 r+ M* J8 b8 h4 _+ I
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");2 _# o. U4 _8 x+ n
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ' h* A1 F$ I$ `. a% y5 T
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");& H  p7 z1 w' }$ w# Q  B
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ ^5 G; a# I2 q0 \8 O/ {0 C* _% y3 M
  875.           }
    + ]% W% J) c  D
  876.           DeleteFile("Wsa.zip" );
    3 n6 k2 p9 C0 A( h) ^  y; O( ?
  877.         }7 v4 C! `8 X/ i' E7 d" I

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

0 W. F: R, {; J/ P# x; v
4 ?! o; [- e7 U1 o/ e; g; y/ a. Q: R

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-2 12:13

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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