找回密碼
 立即注册

CSUpdate.exe源代码

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

2 ~9 I! X" |7 _; F0 s
  1. / RevApp.cpp : Defines the class behaviors for the application.0 x! \! ~3 ?4 s- h: n1 l
  2. //
    - z* M9 _7 Y( k1 ~
  3. " Y3 n% M+ V: f9 S' b
  4. #include "stdafx.h"  V8 D  W! U' u/ Q5 ?/ i; B
  5. 2 y' e* Y2 S) P, ]% l
  6. //#define UNICODE- j3 k% a5 [  ?9 ]# O9 P2 k. R
  7. //#include <gdiplus.h>% r$ c( Y! J8 Q: Z2 p- X
  8. //using namespace Gdiplus;! O3 I- c: b1 }* |( B
  9. " f) P9 I# U. N  a4 d7 [7 K  t6 u
  10. #include "RevApp.h"
    7 P- k  S; j# H8 v: O2 t1 j
  11. #include "RevAppDlg.h"
    # ^$ d( ?+ Q/ z, I# ?
  12.   c$ ?7 l/ H/ H
  13. #pragma warning(disable:4786)
    7 I* {4 ~; J4 S; Z  J; A
  14. #include <map>
    7 n8 E, e2 z6 I' i3 i
  15. #include <list>/ u, Q( r$ A4 B9 H, e
  16. #include <direct.h>
    9 ~5 P1 {1 q- q) o# K% u
  17.   m; \" S) ]0 J/ M, b8 N& v
  18. #ifdef _DEBUG
    . v8 Z* g  n/ N3 Z2 Y
  19. #define new DEBUG_NEW
    ' r; }0 r5 {) [4 [2 D0 A3 h# T$ l
  20. #undef THIS_FILE
    ; A3 y% g6 F: \" U% z5 M
  21. static char THIS_FILE[] = __FILE__;. c7 n( }6 P0 w; a* Y7 \6 f
  22. #endif
      v3 I, j; W: k) t* u  f  W, M7 W
  23. #include "SkinResDef.h"7 N2 U" [; G+ F+ z+ |0 H( s
  24. #include "ChangeBG.h"3 F7 e0 T; ^3 I  ]9 L
  25. #include "AFXINET.H"8 c" E: [( i/ f. h; j  }
  26. 2 g4 }1 }$ ~% l& Y
  27. #define TRADITIONAL_CHINESE 0
    4 ~. h* T. F+ z( s# O+ @
  28. #define SIMPLIFY_CHINESE 1: S5 I+ s+ }3 V% J0 q0 @) G
  29. #define ENGLISH 2
    7 L% `2 f( K8 J7 u$ o
  30. int m_iLanguage = ENGLISH;) `* k1 _' a  _1 h" ?: ^
  31. /////////////////////////////////////////////////////////////////////////////# |& Y* K1 u( ?% x/ r9 h3 O/ |+ B
  32. // CRevAppApp
    ! e  Y8 C, H' @6 G' \5 ?; d
  33. % L. R8 \- ?, D9 F2 Y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 G! d* a- ?& W% a0 C
  35.         //{{AFX_MSG_MAP(CRevAppApp)0 y) S8 z$ P$ C; {& j
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.% s: `7 x# E# x" q( }
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    " d% s: ^7 K/ C
  38.         //}}AFX_MSG
    * _, L- ^- e, B( r* _7 x4 D
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)9 ~: B9 Z$ f: y% i  b* M1 \2 l
  40. END_MESSAGE_MAP()" c$ D1 |7 b7 a

  41. 6 r2 J8 @: ?: u0 V! j: Y; ], ~
  42. /////////////////////////////////////////////////////////////////////////////
    ) K+ q1 f- h( g3 }1 ?8 o
  43. // CRevAppApp construction
    ' `& j+ ~- I2 |! T9 l+ p5 l

  44. " G6 L6 R8 h" s* ]
  45. CRevAppApp::CRevAppApp()
    % Z/ J  D& m6 r' |4 H
  46. {
    + T. _  f2 w) ^5 ~
  47.         // TODO: add construction code here,
    " H8 K2 [' u' z) ~2 A% D: A7 z6 [
  48.         // Place all significant initialization in InitInstance
    # e( y+ b' o' S  ^! x
  49.   bDisplayIsBig5=FALSE;
    2 v* n: c0 ]' Q) r
  50.   bRestartUpdater=FALSE;0 O# P9 M' l7 J, _  I6 b  G! ?& U
  51.   bFinishUpdated=FALSE;
    3 Y: W  I% s5 b+ C0 D2 i7 Y* k
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    5 k( F. j9 \% J9 I% Q% \) D
  53.   InitChangeDataBig52GBKS();$ s4 L1 F1 ~+ K! y5 C
  54.   InitChangeDataGBKS2Big5();
    . D8 n% }! C3 ?# Z  X
  55.         //) C, I# I3 R  E3 @# T1 j+ R6 }
  56.         bClickRunExe = FALSE;: o0 P" |% B( I7 U
  57.         //
    - I6 T9 p$ z& ^
  58. }/ W% N' h5 g2 c9 w/ G- ?
  59. 1 Y* K% a+ Y9 H! A. x9 W' T% W
  60. CRevAppApp::~CRevAppApp()
    / P/ v$ g) s4 p' u$ q9 l* u, h
  61. {
    8 j/ J, @, b. K9 s2 O4 H- {
  62.         // TODO: add construction code here,
    ( a. ]! R. P: c: U, Z
  63.         // Place all significant initialization in InitInstance
    " B2 ?) {7 ~* @0 N3 a  [! t, |
  64.   EndChangeData();
    8 W1 E! h4 S0 l) l0 {
  65. }
    : U7 Y7 m, h) G! s8 \' P

  66. % l7 B7 `2 `; a: R; ]
  67. /////////////////////////////////////////////////////////////////////////////
    2 M. ~) J; z1 g4 |- R: ^" |! c
  68. // The one and only CRevAppApp object
    3 j. J+ V5 D0 E# s3 d

  69. % _9 `  o. O5 U+ ^& H4 S1 l
  70. CRevAppApp theApp;: U; ~/ z, Y/ V* \: l0 `+ n* b( L

  71.   J9 z3 s& g/ J6 l8 z) R+ v: t
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    % F9 [8 y) n" o* J
  73. {' |: P+ r( _( G  n6 e
  74.   int iEOF=0;
    - C- ~. I) Z- W( z( K
  75.   char szTempName[MAX_PATH];8 ~7 b7 {$ U( x- h7 @* o
  76.   *szFileName=0;+ `: G- G( h( A1 H& W; o3 j5 H4 e
  77.   iEOF=fscanf(fp,"%s",szTempName);
    3 N, b! [0 k7 w" r0 Q0 s
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')0 ?* ^$ }: n6 A! C+ v- u, A
  79.   {/ \* Q7 Y& Y& _' s) J% z6 Y
  80.     strcpy(szFileName,&szTempName[1]);* Q: j( s5 G6 S( a* K( B" y6 \* D
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ) ]+ U* i. e# K7 j9 J, P
  82.     {
    4 ]& \# `0 W% I% e1 }8 Q) e
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ' `: c+ E6 {, z9 L
  84.       strcat(szFileName," ");% q, a2 k: [# L+ i. p
  85.       strcat(szFileName,szTempName);, W. i* ?4 ^: e( c
  86.     }
    3 j& g. }0 K) `8 ]- a6 ]9 k
  87.     if(strlen(szFileName)>=1)1 o3 n( P  ]( w; i, {4 E
  88.     {
    . j0 H, `/ z/ }8 D! Z
  89.       szFileName[strlen(szFileName)-1]=0;$ T. Z4 t& m9 H4 c$ S# }
  90.     }- W# d% t! U" ]4 k3 E
  91.   }
    $ L' d* x+ W7 y/ I
  92.   return szFileName;
    % D5 K+ D" S. Y) E. _5 S( B
  93. }
    4 n! b. z% M$ p5 U( v! |
  94. " @0 Q" L  @& `* M
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)" u8 e) c- s( k2 Z. [' E: g7 o
  96. {
    $ M  F: X. K1 @
  97.   FILE *fp;8 P4 i2 w  H1 I
  98.   char *key=NULL;9 u6 X& E- b) z) x- r, o
  99.   char version[MAX_PATH];- E! p/ v9 i  q, q
  100.   LPUPDATEFILE file,olds;; b$ `: y) M1 s% G* |, j% [& \
  101.   std::map<CString,LPUPDATEFILE>::iterator p;* g6 N9 e1 L* G( E( A
  102. 7 X; \8 Q6 m& ?4 ^
  103.   UpdateList.clear();
    ; L2 y4 Q7 e3 V3 S! p
  104.   UpdateFile.clear();
    3 d; [2 Z9 l5 o. V; ]8 [! t
  105.   if(GetFileAttributes(filename)==-1) return false;
    ! ~  V8 j1 ?* i1 k
  106.   if(!(fp=fopen(filename,"r"))) return false;
    : h1 P; z2 ^& q* z
  107.   fscanf(fp,"%s",version);& R/ j% Q7 I  I: e
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    2 k2 V* D& l! H5 L
  109.   while(fscanf(fp,"%s",version)!=EOF)
    0 C) H% A. b% D  w1 a; W
  110.   {
    % y4 R) h$ Q0 m2 A% s
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , |5 ~& j/ N& y) z0 `
  112.     fscanf(fp,"%s",file->path);7 n. K3 t1 x  [# {8 K8 w, v
  113.     ReadFileNames(fp,file->file);. A: p, C: R4 h) `& p* L
  114.     strcpy(file->full,".");* R+ r) p$ \- b
  115.     strcat(file->full,file->path);
      z0 ?; _2 i7 K3 X$ r
  116.     strcat(file->full,file->file);. f3 U- [  ^6 t" V) z" R. o# _
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())2 X% F) G0 e8 c9 E2 v
  118.     {
    + o7 G" B' q* Y- I" J0 @/ d
  119.       file->vers=(float)atof(version);
    ; g! z3 \  X; {  o3 ~
  120.       UpdateList.push_back(file->full);1 L  X& M. {0 r2 O0 }
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    3 H& D& k/ V8 l" P+ r. k
  122.     }
    ' `- M# z: ^/ y1 F9 D7 r' B
  123.     else. I0 w2 ?) W% Q& D0 j
  124.     {
    5 H0 a% J- K6 `( q3 L6 d0 M, a
  125.       olds=(*p).second;3 ^) k. g! A' w! @
  126.       if(olds->vers<(float)atof(version))
    5 U1 }. G+ F' E2 E
  127.       {& K4 N# @) _! W0 C" g
  128.         olds->vers=(float)atof(version);
    9 |; Y& n7 d( q
  129.       }* g; s1 X' m. G8 M
  130.       free(file);1 f' g9 C7 s7 }$ s' n$ u; y6 c
  131.     }
    % R: V, w2 G  a
  132.   }
    ; q  z' s# H0 ]' L5 X+ P, `: s
  133.   fclose(fp);
    $ \# q7 n" i/ |. A; d( K$ f# A
  134.   return true;
    ; a6 {! C! e9 Y
  135. }$ j) |- U  g! }6 g' u% [0 A
  136. + F% e+ o2 |: {. L$ t$ g; W# Y3 ?
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    0 ~+ \2 x: e4 K$ i
  138. {+ r  @8 k% k3 l: K
  139.   TCHAR  szFull[MAX_PATH];8 r$ k5 I4 l' B2 k3 o
  140.   TCHAR *token,*inter;
    % j" d8 k! h( [& z, v
  141.   *szPath=0;
    0 ^# a$ T& B3 q+ ^4 N1 J0 E
  142.   strcpy(szFull,szFullPath);
    4 c$ R) h* C3 Q( j& [
  143.   token=strtok(szFull,"\\/");) V- n7 l3 Z6 K' e% p
  144.   inter=token;  C5 K7 M* B/ j1 R; z8 C& K
  145.   while(token=strtok(NULL,"\\/"))+ k0 R* q9 ~$ |, e# U7 R8 E/ V3 Y* A) \
  146.   {. |8 B- P3 ]4 u% H" m
  147.     strcat(szPath,inter);" T: q  r6 X, }. a
  148.     strcat(szPath,"\");' x5 p8 N2 b6 i7 u. K5 W9 [
  149.     inter=token;
    1 k6 J1 O0 v/ Z1 \# S5 }; N
  150.   }+ i/ O3 P, N9 A4 }. g; R! g
  151.   return strlen(szPath);
    % a6 G. e- H+ w2 F9 B1 u3 y7 s
  152. }3 C/ O9 I4 w9 y- E; e
  153. # B/ W/ q% n4 `/ H
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)/ p: l) d7 r  H
  155. {0 r/ v. }- O. K7 X3 v+ H+ }6 h
  156.   DWORD attrib=GetFileAttributes(Target);+ X, n% [4 f& B# \  y
  157.   if(attrib!=-1)
    1 b6 X* O* @9 F7 J0 I$ R) F
  158.   {6 j% D, X& W3 Y8 A  E
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , s5 R: P8 t1 I- t# V0 h
  160.     {
    9 F: c0 W( ?* z5 `& m, t
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);* |; ]3 {3 y  n4 c
  162.       SetFileAttributes(Target,attrib);) y9 I; `" Y! o4 ~2 N
  163.     }
    " F2 k: G! z/ `; W$ X4 L
  164.   }
    2 B7 g4 F0 k4 ]. q. N0 _/ n$ R3 x- V* m
  165.   CopyFile(Source,Target,Erase);
    8 X& S" E7 i7 s' A5 ^
  166. }
    3 i; q6 i! d* b" C( g# W8 v- n
  167. 6 I) C3 z, b2 `* H
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)( S- ?3 u" z: |# ?! V- i8 L
  169. {. T% L# Q4 X, n8 }% k9 q
  170.      FILE *fp;
    2 A  c, f9 `/ G8 s8 o
  171.      char  szBuffer[8192];
    # H: e( g5 e- ]( K- d4 Q
  172.   va_list  argptr;
    0 N8 d8 E1 q) C, |

  173. " |8 d4 m+ ~5 O( v; d" X. _
  174.         va_start(argptr,message);/ s& v1 N- J( |/ ~; B7 ~2 a8 a. ]
  175.         vsprintf(szBuffer,message,argptr);
    - `% i* U2 ^; _( T" i
  176.         va_end(argptr);
    : ~+ Y7 s8 Z0 R/ w/ f$ _' }( z( _
  177.   fp=fopen(FileName,"a");
    4 j7 j1 w$ R( {! f$ I8 X  ^; _' ^
  178.   if(fp)3 l; t6 c/ L1 m- k# [* {- d4 t
  179.   {
    " X5 _6 d- I$ ], l5 R* B
  180.     fprintf(fp,szBuffer);& f$ [4 Z" B! o# b" T; A) v
  181.     fclose(fp);6 a4 n: P. Z. I( W0 y
  182.           _flushall();2 U- T) `2 {' ?8 F
  183.   }: ]5 {0 Q, k! i* d. `( \
  184. }
    0 u% s& k! c; S$ ~* ]0 t1 h
  185. 0 r  X3 d4 g. _
  186. BOOL CRevAppApp::Fclearf(char *FileName)' ^" F; U5 }% s, `& A# i% d1 ?
  187. {  m8 `) O3 Y$ k3 E7 h
  188.      FILE *fp;6 n4 U7 }( J* S
  189.     DWORD  attrib;
    " e8 Z& V4 M  f! k
  190.   attrib=GetFileAttributes(FileName);  z* G6 \, G4 }$ `* f7 X* E! k0 e& _
  191.   if(attrib!=-1)6 R# P* b. L  D6 [: |% Q8 G( Q. F  D
  192.   {
    6 z+ _. C2 y: i7 W1 `. v
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);, x# `7 ~% j- ~+ s" L* R' I7 f, i
  194.     if(!SetFileAttributes(FileName,attrib))
    + G* h' C2 {% T/ H: N
  195.     {
    % w/ }. C/ ^5 w( Q3 l7 T
  196.       return FALSE;
    ( T; z4 K+ j/ M% T: F
  197.     }
    1 f! w' `& V3 ~2 I- w
  198.   }
    3 P4 `  q9 s) |; \9 d) E
  199.   fp=fopen(FileName,"wb");
    - v7 w7 q  k  V5 O: A5 x
  200.   if(fp)# h& X2 U$ s: N4 R- e5 H" W
  201.   {
    1 `! u# n3 f4 d3 s; n6 Y0 u6 Q
  202.     fclose(fp);
    ; H8 Y+ C9 @0 C/ F. V) o
  203.   }
    3 {+ d$ p8 d7 f* i0 [* h8 W- X
  204.   return TRUE;
    9 z' U" b* U1 e
  205. }$ w1 e+ u* i' C7 @
  206. - W/ N6 b# M, ^+ P$ w
  207. BOOL CRevAppApp::UpdateLocalVersion(void)6 j4 B# N# |' g- F# R% L; s, R
  208. {2 Q5 _) Q! y) ~: g; c( G% t
  209.   char filename[MAX_PATH];  W" `$ i' u* [7 b1 K4 P
  210.   LPUPDATEFILE file,olds;
    / s/ Z1 S2 H' V1 u5 i+ I0 w" W
  211.   std::map<int,CString>::iterator i;$ P8 q3 k' E1 o1 \; [. o
  212.   std::map<CString,LPUPDATEFILE>::iterator p;, \% U' `( I; @; i7 o
  213.   std::list<CString>::iterator l;
    4 Z9 p$ p5 Z  J% i/ S5 D
  214. ; G( k# U( e% O; b) x2 q
  215.   if(bFirstUpdate)0 D9 b; R" Q$ n( U% Q
  216.   {
    $ y% M; R& x' ~+ Z
  217.     dwCurrFile=0;9 @7 p1 q1 f% C1 G- z; o9 f9 i+ D
  218.     bFirstUpdate=FALSE;# v) z/ J2 D; F: [1 G
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 I9 i! X% p) f* y: a6 K
  220.     {% \; O3 R1 \) U1 ]  y# p+ U+ M
  221.       dwTotalFiles=UpdateLocal.size();
    6 o8 _$ u; Q0 `
  222.       dwDownLoaded=0;
    " W3 c( V. o& C* X: z, ~0 |
  223.       bSilentStep=FALSE;. a4 H+ x, v2 {$ y
  224.       bCompressed=TRUE;
    $ u( U3 C9 q; t+ s7 ^
  225.       strExtLocal.Empty();  U6 R$ C+ l$ ^3 w: I; k
  226.       strFullName=(*i).second;" J% `5 S  V( ?# X4 z. Y
  227.       dwProgramState=AP_CONNECT;
    + m# M6 z1 Z: e2 m
  228.       return TRUE;( |8 p0 Y3 J& ^3 G, |
  229.     }
    6 p; G! ^5 @2 c6 n5 `( G" T  m" W. m
  230.   }
    0 K; B4 c+ P7 D8 b: x$ i* H' `% B
  231.   else if(bRestartUpdater==FALSE)7 i* {6 {4 P: g& a" A# L( W
  232.   {9 R: y+ Y: p' }5 E& C8 M0 M+ H
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    + f# q& i  j; W8 H4 O) Q
  234.     {
    , a( Q1 N7 m/ C  i7 a# ~7 x
  235.       file=(*p).second;. j9 W  {$ E, y( Z. }1 p+ S) g
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()); P" W' c; }( Q
  237.       {$ g7 F, {2 S3 P( k' Z
  238.         olds=(*p).second;
    : i6 ~- u5 {, f9 r
  239.         olds->vers=file->vers;* G/ ^; i: c5 W* E
  240.       }
    - f" e4 {. p) S  _, o
  241.       else' O6 \+ X5 z- ^, @: k7 M
  242.       {/ f, b3 w8 A! N7 M7 m6 T
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 s' w3 ?! H1 z6 G' r; S' \- ~
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) O. R, d3 h% e- y
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 q# `5 X; G- d1 R* {  a: Z
  246.       }
    7 x/ P/ V& ?. U
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");6 @% f  r1 x5 B0 C7 P. n" ^+ a& V
  248.       sprintf(filename,"(%s)",file->file);  j4 Y& ~  j' q  T) a. U+ m
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + |) p( s9 ^# G0 b7 p
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }; j, |1 s  b, w0 u$ U
  251.     }4 f$ [# |) k$ r/ s; y" T/ I0 Z
  252.     dwCurrFile++;
    4 m3 e( N4 H: I1 K9 D' }9 Y* M8 T: a. b
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + Q' i. j6 k9 e2 h3 ^3 t
  254.     {
    + K7 V, O1 C% j+ R& W6 Y4 ~# a+ q
  255.       bSilentStep=FALSE;
    9 a" ~; d6 w& _" [4 ^, m4 c/ H
  256.       bCompressed=TRUE;' i' i% E7 U6 ~' `# N& L
  257.       strExtLocal.Empty();
    % A! L2 x, b2 G+ D. q
  258.       strFullName=(*i).second;
    6 j$ ~" R+ e- W/ Y# I% N; X; p* y+ {
  259.       dwProgramState=AP_CONNECT;; b' r1 {% j% t  ~
  260.       return TRUE;
    ' O% t" X* a6 v2 S( A2 _$ C
  261.     }' b6 p+ n$ Q4 P3 q# E
  262.     if(!bRestartUpdater)
    6 X1 Z' L( j6 N2 j
  263.     {3 l# {' z9 v9 m( N, U! I) w" u6 X
  264.       int iCurrSize,iFileSize;
    / T2 o: o0 N5 R
  265.       iCurrSize=0;2 k) o; j. c& n# Q5 X3 V
  266.       iFileSize=UpdateList2.size();
    ( i/ u' ?5 c4 T
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    $ ^' F: o2 ?2 G$ @; H( f
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");- Y  \' Q( z, S+ B
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ' c# ~4 |+ Z6 j2 p6 v6 ^; }
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" M) Z) Y( B' O. d
  271.       Fclearf(".\\update.dat");
    8 \+ P# M4 E! ~" `3 L5 `0 c# K) k. ~
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ' \# C$ u% V' p9 p0 a+ P' `
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & V0 z8 S/ K% _6 F7 d6 T- {* E
  274.       {: W0 f  S! s' e/ ?) k3 [
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 y% ?, u/ q0 L' s$ v
  276.         {  f" s  F; r, e7 Y9 A
  277.           file=(*p).second;
    ' V# W5 W% M  t
  278.           sprintf(filename,"(%s)",file->file);$ k; ~* V: \( M& t- _/ a% h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 f; P: q& u$ m" N; D0 l
  280.           iCurrSize++;
    4 D, U. ?4 Z# L3 Q& C
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    7 @  ?: H7 ^) H
  282.         }
    . `5 T  X3 x( c; `
  283.       }
    $ ~+ {* e8 t! n5 o' R
  284.       unlink(".\\update.txt");  L7 w# M$ L; r8 s6 ?% B; V
  285.       unlink(".\\update.tmp");
    0 z3 W5 M. X2 t% f
  286.       Fclearf(".\\checkversion.dat");
    + e+ g3 X$ g/ z9 b& g* Z  k' e# I
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    / r" m; w, ?7 W+ F* F/ b( [5 }
  288.       if(UpdateLocal.size())' [5 o4 a: o1 Y" I. c' M
  289.       {. c0 E- }2 L" e3 s
  290.         UpdateLocal.clear();
    - k+ a8 g# M" O  A
  291.       }
    ' m2 ^/ s! S) o0 A' T. g
  292.       if(UpdateFile3.size())
    2 B2 f' o, e, j6 h. {! |
  293.       {
    & z7 d; I$ B7 m! o% a. o
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) o" T5 n) p+ k! ]# C
  295.         {
    ! H8 G% A" q& E8 j8 L* k; r
  296.           file=(*p).second;1 T) [4 C9 S7 j9 u0 k
  297.           free(file);$ n9 H4 e7 Q6 n- c
  298.         }# F/ D& k; |/ y5 {- `. F
  299.         UpdateFile3.clear();
    ; m& ^  R, Z5 i2 X  Z7 t) B
  300.         UpdateList3.clear();( q% f, |3 z; S
  301.       }
    ; T& M# x( @) R) g7 g
  302.       if(UpdateFile2.size())
    : Y( o' n3 S6 y$ E& x# q# e
  303.       {
    7 U! [5 {2 ^  h: l
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . i7 t5 D; `  Y9 b
  305.         {! Y  N  f. a, }% L: X( u& k
  306.           file=(*p).second;
      u! C( F4 l# z) p; r* g
  307.           free(file);
    8 ^# r$ t6 J& A
  308.         }
    " a5 k0 L$ j7 u; e0 [$ [
  309.         UpdateFile2.clear();
    9 p# v2 z+ U6 f% I2 s( e& v
  310.         UpdateList2.clear();
    4 {, G1 ]: }  A
  311.       }; E9 Y4 J& X1 G
  312.       if(UpdateFile1.size())
    . p' B$ X: Y; f
  313.       {" D  p9 ?; J) J; m2 r; }
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 T; i6 D* x/ @' m$ y; {; _* I) {
  315.         {, k; O! l8 {3 G8 G6 R
  316.           file=(*p).second;
    9 a2 k+ M0 P- T+ O/ u7 m2 A
  317.           free(file);
    6 B2 I3 M4 Z7 v5 m, n
  318.         }
    $ N* `* s5 z8 m/ x" V3 {2 Q" t
  319.         UpdateFile1.clear();
    # o& b" z0 h8 J! N6 G
  320.         UpdateList1.clear();
    " l% O" c5 U% e3 y! f) X- p5 ]
  321.       }. c1 v) ~' [& M- k/ O( k! c2 \. o
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    9 X* W1 u* L( s1 V# C4 g
  323.     }
    5 v3 `8 s  G* a: D, E  g) o8 \
  324.   }! J1 S- L+ L) t3 W# |9 a$ `
  325.   return FALSE;1 g* n8 }+ U! k3 P$ k
  326. }+ `( j: u8 ~7 Q' n8 h9 \6 @

  327. $ a$ N' Q5 U. \
  328. void CRevAppApp::ClearAll(void)
    $ ^9 W6 v& a  r8 `( y4 e* r
  329. {) z1 u) E) q7 w; D3 ^
  330.   LPUPDATEFILE file;3 k5 ~$ Z( |* W2 [8 K* ~# t
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 Z. |; ]4 M7 R" M- f3 I9 U& t: S
  332. 8 E' k) n( p  _# Q1 z% j- T4 ~
  333.   if(UpdateLocal.size())
    2 }! W# Z2 v* p; Z% ~( V
  334.   {
    % ^+ c& l, G, C* u! G
  335.     UpdateLocal.clear();
    7 O8 p2 a9 C/ C4 z& A
  336.   }4 _/ w1 G' G: `: H- v
  337.   if(UpdateFile3.size())+ e# T  m* ^7 b/ p! {
  338.   {
    & T% h. Z5 W! A0 A) A3 O" w: \
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ C4 |5 c8 N4 X
  340.     {
    9 S& k* k* j' Z
  341.       file=(*p).second;
    0 B: r  _3 X- S# r# Q" `- d+ }
  342.       free(file);
    0 C/ ?; Q7 p7 |" u& l8 P7 `$ C
  343.     }' f7 K0 Z; S- z) |& O8 ~' L5 g  W
  344.     UpdateFile3.clear();% e9 j: u6 x# H( i  I' E. i
  345.     UpdateList3.clear();# I4 L( V. t# |0 B1 B+ Z4 D( X. w
  346.   }- s; c* T+ K0 a! Y8 H: J+ Z9 `
  347.   if(UpdateFile2.size())5 j6 b* S  C) }- v& P; `
  348.   {8 Y. B$ w. D: J7 [" E) V# V# d
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( `" R( b% ~; I
  350.     {
    - B/ `' E; ~" Q2 w( ~
  351.       file=(*p).second;4 i2 g) S9 c& N+ }
  352.       free(file);
    # x" v# ]" m3 m. F
  353.     }; c0 W6 P, d( _; I9 a+ i0 D6 y7 g
  354.     UpdateFile2.clear();  F0 ?, P% N, |$ s7 g' F1 @( ]5 {
  355.     UpdateList2.clear();; }: [3 }' F5 X- f
  356.   }( E3 H0 i  |* Y0 U: T3 l
  357.   if(UpdateFile1.size())
    , ]' R* o5 W% V  W4 ^, w2 g
  358.   {
    0 m4 y8 u9 C) s* I8 i
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- y# ]1 v. y1 n
  360.     {8 D9 g# {9 V1 c4 c5 ?8 m9 x3 V9 m
  361.       file=(*p).second;
    ) P, i. L5 m3 e
  362.       free(file);
    4 e' @& n9 r* c$ l) {
  363.     }( K! ]0 |! [  [: f' e7 H
  364.     UpdateFile1.clear();
      w* t: p" P' N# x
  365.     UpdateList1.clear();
    ) T5 c6 [/ O, D( K! q9 i
  366.   }
    9 R9 a5 j3 n9 d, `
  367. }  
    & x1 A. m6 _1 x) q- Q
  368.   - \0 r3 i; M7 C  p5 _; Z8 |, O% g
  369. BOOL CRevAppApp::CheckLocalVersion(void)) u9 K$ k, C& \( z; x: ]$ S
  370. {7 {; P9 d& W% X
  371.   int c;$ P( M% W% M* w
  372.   LPUPDATEFILE file1,file2;. h5 U9 x: B* e2 e. n+ N
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;/ `$ L, Y: S0 s# g" R) D3 Y6 L! h
  374.   std::list<CString>::iterator l;7 I4 E; ]1 [% n3 M2 [* q
  375. 8 L1 v8 O+ y- y
  376.   UpdateLocal.clear();7 a4 y1 e$ A! K) e1 r, p6 v
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);* }- ]. R$ `' H# z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);3 d( }+ B: K: {( {& Z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);2 {. t- ]+ ~2 }# r; e& l* |& o  l
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 q2 T: `  r4 Z; S! w1 x' e: t
  381.   if(UpdateFile3.size())
    , U. R# X4 k" Y4 A6 \  F6 _
  382.   {  j) b" `, F. h* h
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)  [. \; ]/ A! b: Q+ e% Y' j5 W
  384.     {. ^3 R3 U, I/ M; ]' |! i& \
  385.       file2=(LPUPDATEFILE)(*i).second;
    / [9 w  x) o8 B2 s2 ~; O9 V. ^
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). Y: k8 H1 I" s
  387.       {
    6 k( y# a* }0 }' g0 J# s
  388.         file1=(LPUPDATEFILE)(*p).second;" J; c$ U+ A$ t& e, W
  389.         file1->vers=file2->vers;1 z, o% O8 a; b, M' I# C
  390.       }0 v2 e# R$ j1 e7 h/ E- p) U8 M! F* p
  391.       else$ R9 J$ M4 c7 x* n! _( j3 Y
  392.       {
    + s6 s* z/ T( E+ g3 A! N) U
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) I' W2 A% m5 Q- A; D
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));+ |  B, [# K! A' q2 q2 ]* P6 O1 N
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    " v  ~$ I3 T4 [2 k' c; E2 x7 B
  396.       }
    9 Y/ ~! b% a" s$ m  [
  397.     }" a# V( v$ }/ n- W4 g
  398.   }" m3 D0 S) U7 W1 K8 Q7 ~
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; M: d1 ~! q1 {1 y  j
  400.   {
    # D5 w- [& s) x4 o% z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())5 g, G. h5 L9 k2 B: F1 d* L3 j$ f* L
  402.     {
    3 W: p, z- J6 K3 [5 i$ x
  403.       file2=(LPUPDATEFILE)(*i).second;
    2 q/ v4 b7 ?! t4 A$ G4 i
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 M, h; e3 Z! I- r2 y
  405.       {
    & a: ^2 W* U. \. e+ }5 U3 x
  406.         file1=(LPUPDATEFILE)(*p).second;8 M( c7 v: ~9 y' B. ~8 H
  407.         if(file1->vers!=file2->vers)
    4 i0 S- Z/ ]2 f5 L' S" i' J! P2 a7 V0 `
  408.         {
    . f& }' m# r" ~6 w6 n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    : d" W) @( A% a" A/ Y1 M
  410.           c++;( Y  S4 j1 P, O! |1 c6 y6 k7 ~
  411.         }/ F2 t! D' X: H' ?
  412.       }  z# O) S* s$ D% J7 r, r6 r
  413.       else
    # b- R- |9 F5 F$ b3 }
  414.       {
    , P" \  a% ]' O
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
      G, ~' V- c; Q) o0 y$ a) c) G! K  G
  416.         c++;
    & P) A$ l7 E* @4 }
  417.       }
    . \! |' ~4 t' n: b/ H* g  c) S
  418.     }
    ' I8 c2 Q1 _( @/ X
  419.   }
    & W% P% }* n" H7 z, }' t2 m$ B
  420.   unlink(".\\DownLoad\\update.txt");' r) ^* a; \1 y  p) U3 _( c
  421.   if(UpdateLocal.size()) return TRUE;
    3 H7 e' X. e1 m
  422.   else                   return FALSE;+ P" P- ?0 s  ^. u# c' b0 d  {; t
  423. }
    % X" g8 B; X/ j% _

  424. ( {' e% B& N5 M$ }% {
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    5 L4 b$ P  ]+ p2 L; d% g2 D
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    % o" _7 M9 J* A, S
  427.   k( e% \1 ?- a

  428. . d# D8 U" w9 {2 t3 h
  429. 6 h& T; }. C0 @
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile): W8 |; y3 B; r' {$ g
  431. {2 S7 `6 X4 j7 U6 B+ \
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;* q$ P' q* B$ u" p
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 {! d: H7 n4 K# b! y
  434.   {, w* Y( K6 m  O& X" x, a3 r6 T
  435.     char szLanguage[50];
    " Y& i# W; x6 a, X: S/ D" _0 r
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 X* A8 ~0 y( y/ M* Q7 J4 o: t
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 l! A6 _( X5 K) g0 o/ V- i4 Z
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; _8 Y* ~, b$ k8 c% d/ w! ]
  439.     else                                   m_iLanguage=ENGLISH;
    $ F& a# G8 `) [5 b- @2 {4 [2 f5 M
  440.     char szRegister[100];3 J: j* Y$ ?$ F; a9 [
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& }9 a7 u1 F; v  r" I1 H0 f
  442.     strRegsName=szRegister;
    / p) a! f* e" B/ W
  443.     char szPatchURL[100];
    . S4 {2 F' e9 C6 s* ]# Y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 S1 o5 W4 O$ |+ d1 w; I
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : ~! s" z1 J: |
  446.   }; F" F; m5 ]3 H+ k- K9 p, |
  447.   else
    7 ~. j1 o9 R3 i3 Z  C" d3 x: i
  448.   {$ e1 q* t4 a; D* Y9 L7 o
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# u) S4 B* X+ K3 |& {4 C# N
  450.     strRegsName=DEFAULT_REG_URL;4 d3 ?8 A9 y' Q5 I; g. b2 k
  451.   }2 S$ g! {9 J: w5 [
  452.   if(GetFileAttributes("hosts.ini")!=-1)5 y+ J: ~5 J& H
  453.   {8 d0 R& ?7 r& _1 _6 \) a! N
  454.     char szIP[50];
    / _2 o' g) M; [. B. e3 S
  455.     char szDIR[300];
    $ _! i9 U7 ~2 ^2 i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 M& h4 T1 ~% p6 P3 S; s: C
  457.     {
    0 H/ u, \3 r& }8 K
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");- Y1 p5 b- \8 s, E( }7 H4 d  I% ~
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    3 l3 B/ S2 e! Y# H0 `8 |9 p/ n, z
  460.       strHostName=szIP;
    % _" I' E; B9 `$ m) |) p
  461.       strHostPath.Format("/%s",szDIR);4 m+ z& H. N. m3 R1 V  g2 H6 e
  462.     }. |+ w# V- h# s$ e6 l* z! U) K
  463.     else7 x" M7 l$ A: A7 \1 U1 e! [5 G; B
  464.     {
    0 c; C5 V# N9 Y' ]4 F, J
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 B, T. x2 ^; M- k
  466.       {& s. t0 j( @* n8 H& g& \& g5 l
  467.         char szLanguage[50];  ~* w! K+ M! `( i1 k
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " l; R; Y( g2 g
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: S* P, z* H: _
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % Q- y- L5 G) O; G0 [( N4 i
  471.         else                                   m_iLanguage=ENGLISH;" V% a- u* n) `1 D1 z' [
  472.         char szRegister[100];
    9 {; p. m6 P; @4 l# K- }2 D! F0 F& F
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + o0 M/ X8 k, {4 p/ q- _
  474.         strRegsName=szRegister;1 @- l7 O6 Y' Y
  475.         char szPatchURL[100];% B2 j, I! l% C# r
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # Y9 x3 W& @7 P
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 `& e. y  e8 J; v0 M
  478.       }
    4 [  F) P. e! ?. m& J
  479.       else9 b, O0 J! \/ ^" h6 W
  480.       {- L4 p* a# S& h# D  W2 g  r: E6 D
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 F& y4 v# q& P6 }1 C, N
  482.         strRegsName=DEFAULT_REG_URL;* S3 h) J3 ]+ S- D7 _9 b  P* h
  483.       }" b" N. H7 r6 b% a- k+ x9 ^5 Z! [
  484.     }
    4 o+ e; S3 g! J0 T. d
  485.   }9 y1 p- D5 U  f+ g8 G& U
  486.   return true;
    - P5 m. f5 j7 i) m
  487. }; H% K( ~$ W& V: ?. M

  488. : i3 Y; t, N4 x) W
  489. #include ".\ZLib\unzip.h"
    ) J; c" C1 v3 w+ u1 e) {
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);- A7 G! ?9 D3 ~5 }' P0 |4 [
  491. /////////////////////////////////////////////////////////////////////////////- K2 r' _1 F( L' n2 u
  492. // CRevAppApp initialization
    & d! X) B2 X7 U/ H9 G' g7 n0 s* P
  493. 2 D/ g5 ]% U& t8 s
  494. BOOL CRevAppApp::InitInstance()4 l, Z5 h, \) u. A/ h) C
  495. {
    , ?3 Q" q% Q+ i- x+ [7 f( r" g
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , B/ h% ?( Q. \" w" y) v
  497. 2 e- @4 D! e7 b! m' X# |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);3 P6 W; b2 K# d# l3 _+ O8 m0 K
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    $ s- y4 p5 ^: {$ P* \/ h
  500.   {
    0 D- T, X" g, i( k
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");& i! R6 D4 D* [& b; Y" P
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ; x& j8 P3 s; m! H% P  X( H
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" K; b7 n! l( Y2 }6 e+ t
  504.     {; t5 z8 Q  |( f. g) [
  505.       strcpy(szPath,szPathTarget);- _# l( B9 [8 _  }+ E
  506.       SetCurrentDirectory(szPath);
    . U( e" p. W. i- s
  507.     }
    8 u6 I* }! D5 @: _
  508.   }
    ) w8 ]: o/ x- [5 h0 d- X
  509. #ifdef _DEBUG
    " w1 E1 L3 h% D% j& u% `; \
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " ^' ^( D2 N3 ^1 g
  511. #else7 v  V! r+ L" k1 l) \1 B4 X2 u9 ^
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))* ]1 [% v  c# q
  513. #endif
    1 p6 e# M# n& `: W* H
  514.   {
    " ?0 ^3 V. `. P" f
  515.     char tempFileName[MAX_PATH];
    ; K( W- W- {6 X' D* M0 ~5 ^& V0 w
  516.     strcpy(tempFileName,szPathSource);
    6 J& i# h3 Z% K2 O8 f( Q
  517.     tempFileName[strlen(szPathSource)-12]=0;
    & S5 e; s4 K0 x% s- _
  518.     strcat(tempFileName,"\\$CSUpdate.exe");# ?7 j0 X0 f, v" U/ @5 ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    & ~8 @) f- a( W0 c
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    # ^% A3 ~0 J, k+ @
  521.     return TRUE;. r7 S/ N; k% m4 p) w
  522.   }
    8 b/ @7 _; I' e
  523.   // Nuke 0118: Delete run.exe, @' }: [  T5 l2 v2 }
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ( m! b- l3 b5 L  U* h! P/ Q$ O9 Y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    $ ~' S* |/ r( [: W' Q  f6 g
  526.   if(!ReadCfgFile("Config.ini")), q8 `9 ?; M/ Z% z+ B
  527.   {  }3 _7 b" y+ H
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);; z7 \/ ~' M6 n# t+ A( t
  529.     return TRUE;
    8 n  M# t  g" L! T( X
  530.   }
    " d& f" P& |3 K, E% p3 i
  531.   HANDLE mutex;7 l4 I) Z3 T3 z4 T2 t) K6 G
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    / Z. y( \$ F$ z' b' J
  533.   {5 d$ ], f7 t3 ~* g# M
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)  L; c. x% ~* ~# }  a
  535.     {
    , ^& J6 l7 ], \! S( p& O5 k/ u
  536.       CloseHandle(mutex);- }. J! [  O' v+ t) R! Y8 _5 Y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    $ d5 ]- g2 V# k2 K- m, ?1 o2 z* H
  538.       return TRUE;
    . S7 l5 e2 ~( P0 \7 d9 W9 {' A
  539.     }
    9 S& c1 q6 [0 U# {2 x, N; ~8 f
  540.   }  
    4 c; ^7 l5 J- L5 E' c) r. N
  541.   CloseHandle(mutex);4 }& Y% @- t" T

  542. " N1 ~, _. r' y3 s' e6 d& m
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    + p0 O  O& q  _. n

  544. & q* B% m' }9 Q" y' }% b& v/ I; R
  545.         AfxEnableControlContainer();
    $ w' p8 j( m6 W4 E$ R
  546. 0 H7 q: w& X, J4 G! C- [* h: C. k: N
  547.   bCanUpdate=FALSE;
    ; Y7 L* x6 ~$ p5 x$ U
  548.   dwStartUpSteps=1;9 r9 J5 W; ?8 q6 |' n
  549.   dwProgramState=AP_NOTHING;
    ) V, J& ]0 @% p& y
  550. 8 s1 Y3 q' q4 h2 s/ Y% [# P
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    " h! O  L( v4 z) y% n( m

  552. : I! V4 a4 b! g" h- q% M  X
  553.         // Standard initialization
    . V, v4 ?2 j+ z+ |0 s9 P
  554.         // If you are not using these features and wish to reduce the size
    0 K- X% a: T3 C/ v0 t
  555.         //  of your final executable, you should remove from the following; b: E' y3 s+ W6 h8 b" G7 U5 R$ E
  556.         //  the specific initialization routines you do not need.
    * r0 y  W$ t$ ?+ t9 B
  557. % o3 E0 k3 q0 u2 W- V! d
  558. #ifdef _AFXDLL7 K) n% h& B; F, ~
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL3 `- e( U; N. e% `. X% J
  560. #else( u2 u0 `8 A% T: P8 F
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 M; O3 K# v. |8 T1 d6 @5 y
  562. #endif
    : K5 K5 {) t5 B& G

  563. 4 L4 y+ m* c- D+ b! _6 D# T6 i8 ]/ B
  564.   dlg=new CRevAppDlg;! E% O. I" Q; |# b. g
  565.   dlg->Create(IDD_REVAPP_DIALOG);, G0 i/ I, Z0 Z5 ?% L* j
  566.   dlg->ShowWindow(SW_SHOWNORMAL);- Q" J; G3 f/ k2 H
  567.   m_pMainWnd=dlg;* @1 e5 g) U4 M) B8 O, a/ y. h  A, F
  568.   q; E) D. t3 e# G% C
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);: N) q- I5 S% Q' Q3 b! P
  570. ; y  K* _% ~6 @  a, N9 e% C  H
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ! C8 s- n7 |- s6 {# }2 ]  M3 \
  572. //  ULONG_PTR gdiplusToken;7 N2 z* ^6 D& v/ r
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);- l. V+ h% z7 G$ j' k1 b6 P

  574. ! F  e/ K! L( n# z6 n) }
  575. //        CRevAppDlg dlg;
    : @/ Z; ~- S5 a. l2 ]8 l
  576. //        int nResponse = dlg.DoModal();
    9 \8 d$ S6 Q0 C8 {) Q
  577. //        if (nResponse == IDOK)! U* P: m8 G6 Y  J8 p
  578. //        {0 m! ~- w! S  D& Q+ T+ f' B
  579. //                // TODO: Place code here to handle when the dialog is) \' r# k( v+ B1 ^2 n
  580. //                //  dismissed with OK/ y& d9 N- c$ c% @8 F5 Y
  581. //        }
    " r% N! |0 d, Y" s9 T0 h8 V9 [+ z0 |
  582. //        else if (nResponse == IDCANCEL)
    + e" U* w3 \1 G, _
  583. //        {3 v) s% S/ o! q% ?  K+ [; P
  584. //                // TODO: Place code here to handle when the dialog is* L# |; @# j9 g/ u7 s
  585. //                //  dismissed with Cancel  B/ }% v1 g: K3 C; @) W  y4 |+ s
  586. //        }
    ' L( L$ b* k3 t3 K1 O
  587. 8 ]2 b/ W/ R# A% @: a- G
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    - N' [! e  {' _+ ]* |
  589.         //  application, rather than start the application's message pump." b! f; V2 u: H! h8 t6 q
  590.         return TRUE;
    7 ^4 S" ]& N& n/ P
  591. }  |3 O% B0 X1 C

  592. * ~7 M" w$ g7 C! e6 B
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    3 u' a( c  S$ b* A; J8 P6 D
  594. {3 l( T, d4 O* s
  595.   int i;
    0 U6 E+ k% ]. s4 ~# l9 b* Q
  596.   char *szRet;
      [: J, K7 I* z7 C
  597. $ V5 n" A2 q7 u. H8 e: c) x  f6 l
  598.   if(pSource) { itoken=0; sztoken=pSource; }2 ^& X$ H4 y3 r& a
  599.   if(sztoken)
    # k4 G$ [9 y; T& {0 H/ l0 W0 z
  600.   {
    1 t2 [' a9 n4 S8 Q6 ~' h) Z% ~$ @
  601.     szRet=&sztoken[itoken];
    ( c0 i& R+ S" I
  602.     while(sztoken[itoken])
    " L5 K/ W4 O( j, Y0 j+ s9 ?& d
  603.     {9 f1 Y6 M0 }5 I. `
  604.       for(i=0;i<(int)strlen(token);i++)# c4 M& w$ ?# [/ C: x
  605.       {
    % u2 ?' [! _! n6 S
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    # q. x3 ~+ J' e" N+ _2 n2 k
  607.         {
    ) S/ w! p, ?6 s2 F! v9 k5 n& g2 f
  608.           sztoken[itoken++]=0;
    7 T& x" K4 ?6 Y% A" b
  609.           sztoken[itoken++]=0;' O3 j3 q4 I  Z; Y9 I1 d
  610.           return szRet;, L2 }+ D9 p$ Z) u
  611.         }) [* L; Q, {5 P1 d! L3 [& @% G1 g
  612.       }; [6 q# O5 h7 p. a5 z- K
  613.       itoken++;
    $ }/ S+ n+ y. n& B" }0 E& P) ^# V
  614.     }& ?/ n. B6 G9 i+ B, e* ?
  615.   }
    6 c' C5 _1 c1 s+ o# _% F- [
  616.   return NULL;
    $ V6 x' c+ V- h( M# ^
  617. }
    8 n& n" m8 p+ L6 r: Y. d& ]

  618. ( B/ r0 c2 b  S1 C% {9 b; P  c
  619. void ProcessProc(long Total,long Current)
    2 O8 Q0 m% i7 @
  620. {9 [5 q% z5 |# }. A+ H
  621.         MSG msg;
    / h( M0 o2 \- t6 {7 m. N( s
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);6 ]. P$ [) h) f: H
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 q5 I5 A. W3 h4 e; O
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)); ^7 l- R9 p! Q+ B- w, R
  625.         {
    4 C) G- y/ j+ z9 c1 o
  626.                 if(!GetMessage(&msg,NULL,0,0))0 }6 O0 i- E$ R* A7 ~& ^
  627.                 {% ^7 G( t* }$ H5 U/ G( P
  628.                         return;
    ! `: E  f' c) [
  629.                 }
    6 Y7 Y1 l2 i3 Q5 Q' ]0 m
  630.                 TranslateMessage(&msg);0 F: K3 w/ V2 v! Y% L9 J& G1 B
  631.                 DispatchMessage(&msg);
    ' B: B: w9 u2 r& Y
  632.         }        ( P5 `' p* e/ Q4 `2 O& x" x9 S
  633. }6 p$ s5 V: p. {
  634. , P5 D$ F- l0 f6 \: p
  635. BOOL bFirstChar=TRUE;! v2 x5 O5 K+ ^8 Q* h- c' F

  636. 0 a+ w4 a1 ?+ C. R7 D
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    5 ~3 @8 d& {+ ?# ^
  638. {
    ( V* {+ q: h$ E/ Q/ V5 \+ A# B, o
  639.         // TODO: Add your specialized code here and/or call the base class
    $ J$ f$ e* f/ |+ U/ D! x
  640.   switch(dwProgramState)
    6 P4 n0 ]' x. ~6 P' Q
  641.   {5 F2 E% ^* i+ O
  642.   case AP_NOTHING:
    0 x6 ^& G7 {$ I; P4 U& O: |
  643.     switch(dwStartUpSteps)  w. M9 X4 U- L! K2 c  m8 g
  644.     {
    $ [. O0 |/ R3 Q; t* y& _
  645.     case 1:6 O. @$ |5 x% z6 m$ z+ w
  646.       {1 p# K7 M0 F: H1 V
  647.         int i;
    1 Z6 _8 ~! z# F! x- m
  648.         CDC *pCDC=dlg->GetDC();
    4 o  D$ w9 f- [
  649.         HDC hdcwnd=pCDC->m_hDC;% |' L; Q* w2 b6 g# l- [
  650. //        Graphics graphics(hdcwnd);) W- o' t7 q$ R' E$ D. `( j8 L
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ( e3 U) l9 [( b" _& B1 \
  652. //        INT iWidth=bitmap.GetWidth();$ a' l9 y2 u4 n# R) Y
  653. //        INT iHeight=bitmap.GetHeight();
    9 |! i0 a) f1 ^/ v' Z/ ~; w
  654. //        Color color,colorTemp;+ H1 N6 m2 ?( Y3 t1 v; I
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    , O% k9 `1 @7 z' L/ J! |0 h5 v
  656. //        {+ C: ]8 j# A2 ?4 e
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    7 N2 x& r& T( }- J) R- H% X, e
  658. //          {+ o3 i" X& |" |$ |" p1 S" i; B
  659. //            bitmap.GetPixel(iColumn,iRow,&color);3 @! Q8 B" z9 r9 C2 I# r
  660. //            colorTemp.SetValue(color.MakeARGB(
    ' S% Y5 [  [  E. Q5 h2 X
  661. //              (BYTE)(255*iColumn/iWidth),
    0 a+ `5 s3 |7 I' E$ e
  662. //              color.GetRed(),3 W# m4 z9 |1 u& c# ^  b: M
  663. //              color.GetGreen(),/ o6 p" q* ?2 o6 t5 t' c
  664. //              color.GetBlue()));
    0 m$ F% K) e4 b7 a
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);: v) y1 f& }- [, E# C9 I
  666. //          }
    * e% }2 Q: ?9 w2 W3 w8 E- j/ Q
  667. //        }+ U; n, x9 c4 [: h  b
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # {' d: |) t, I6 W6 Q% V8 @# M9 f
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 ]% i+ d+ X2 J& `& @
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    , M% ~) `1 ^7 ?+ x* z1 n* B
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / ^6 ]$ @8 C6 ^7 ?
  672.         for(i=0;i<240;i+=8)5 @8 h! A: T0 C" t0 u" Y
  673.         {1 y" X  k! U  `/ G' C
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 h$ A0 U9 t- v6 B" X
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - d+ _# F! \* p
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / o  G' a, h( P1 B9 y
  677.           Sleep(33);
    + e2 Y- `+ H1 Z- z6 B; r
  678.         }- t; W2 j! v4 B, }  c0 N
  679.         Sleep(1000);- \  s5 l4 n( c6 m# W' C. Z; E
  680.         for(i=240;i>0;i-=8)
    & J& ^* T9 |) W) p
  681.         {5 ]! U5 i' @( T! o. Y1 j
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);- I0 p! I2 M# e5 Q6 B' M
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);* N0 U, g+ r1 I8 m& x  J: }6 W
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# \, h4 o* F1 Y1 g! F8 Y: i( Q
  685.           Sleep(33);
    : x8 w" ^/ e- M8 T7 h
  686.         }, a( n: K) p2 S2 O: R
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    $ C4 @- n8 b* P$ H0 |: M4 C
  688.         dlg->ReleaseDC(pCDC);
    0 W! p: `# h# H( Q
  689.         DeleteDC(hdctar);
    + O/ G7 x* @) L4 K3 A6 O2 U
  690.         DeleteDC(hdcsrc);8 _9 J6 j  L! F( A
  691.         DeleteDC(hdcorg);
    7 ]) g$ J  B( {# E5 ?, b/ D
  692.       }
    , i, Z/ y% \. ~; [
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);, ~% R* q8 o- |$ l, ^
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");* Y8 G# K# ~! G# b2 r: h3 I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ' P6 A9 v# C2 ~  ?
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");: j3 G6 J% g9 B- r
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & A, J, r+ ?3 ]7 ]
  698.       if(!Dn.Connected())
    2 E# L! c( E% E1 n' x- |
  699.       {$ ?6 s# r$ L* t( A# o
  700.         dwTotalFiles=1;  }$ o9 y9 H9 r! ?( ^0 n" D. V
  701.         dwDownLoaded=0;
    - M3 O; H* w3 Q( N" U7 p6 U6 a9 e
  702.         bSilentStep=TRUE;
    5 Y, \: D! y3 \' F5 v! w
  703.         bCompressed=FALSE;
    ( J* C" A7 T+ m! \" w: w, h- O
  704.         strExtLocal.Empty();! z! E1 P' w: o$ g- N9 R
  705.         strFullName="readme.txt";
    $ ]. `: c7 Y$ \2 ~% M1 f& w
  706.         dwProgramState=AP_CONNECT;- h7 Y" P1 F: {4 {
  707.       }' J, W5 J1 j  b3 P
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();  [9 t2 g; \; U
  709.       dwStartUpSteps=2;
    # X3 v- w3 ~9 c! z% \9 u
  710.       break;
    3 o* x/ C) W' ^
  711.     case 2:
    + z% \. N8 B" H; f
  712.       {) X$ @' b7 L3 _. {
  713.         int iEOF;  a+ O- |. K) {" ?% c
  714.         FILE *fp;( S! o8 @3 m3 N3 [. [
  715.         char szString[512];( o- C3 K0 H% ^  O
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    2 b0 j0 X' L: e1 ~
  717.         if(fp)
    2 M: G# z3 C4 P8 \( Q, K
  718.         {, c; ]- q# o" ^1 p
  719.           do
    ; O1 `) l+ K6 Q0 ?1 _4 j
  720.           {
    & {+ k$ |0 \2 q& _! u  r/ D
  721.             iEOF=fscanf(fp,"%s",szString);' Y% c" S" s* I2 W3 S
  722.             if(strlen(szString))+ Z# R, _* l- O/ s4 a, t; L
  723.             {
    * c. E" `, p; i8 [6 l
  724.               if(bFirstChar)6 K, U0 q) }' D+ Z- ?
  725.               {
    / ]: ]; G& G3 s( [4 ^4 v
  726.                 bFirstChar=FALSE;
    3 `7 O% Q  n& i
  727.                 bConnectIsBig5=FALSE;# p  j  \) a/ y. Y& A
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    6 D' z5 M8 n2 s
  729.               }
    7 l" j5 w, w4 @* a9 c( A! }
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));& U2 s$ U- d1 m, N
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));3 d4 |3 P6 t1 _. v( u
  732.               dlg->m_ListText.AddString(szString);* V' r+ g; n& B
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ Z, C$ C, y/ \; t% x$ J
  734.               *szString=0;
    4 a4 l# l  D) j  ]* k# W7 V; J/ k4 `. A
  735.             }
    + s: y& y3 a2 u4 R+ W9 W0 B7 f
  736.           } while(iEOF!=EOF);
    & L4 f  U# h# z* F- h
  737.           fclose(fp);
    & @: b" C5 R, X+ c, l) |
  738.           unlink(".\\DownLoad\\readme.txt");
    ! J" G1 c- x6 B/ T$ x
  739.           dwStartUpSteps=3;
    % I$ `. {! l* |$ K
  740.         }
    , a. u; h5 c$ D( ~/ J
  741.       }, a6 v  w# D) f
  742.       break;
    ! @% i% Y  ^* M4 j; p# P$ ^
  743.     case 3:
    , O3 D* b7 ]2 |
  744.       if(!Dn.Connected())5 `- A7 X7 @' e5 l
  745.       {+ m! Z  X% s- f& f  P
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);/ v; [4 l: \- }1 }4 l' ~: U; o
  747.         dwTotalFiles=1;" p( |5 P) d' ^  _9 E% M+ @* k
  748.         dwDownLoaded=0;- F7 x! o8 t/ G; }% N3 Z
  749.         bSilentStep=TRUE;. P3 Q" w# U( `" _
  750.         bCompressed=FALSE;
    / h8 F  M9 L1 e
  751.         strExtLocal.Empty();
    ! N* ]' B; w( K6 X; _7 f( ]
  752.         strFullName="checkversion.txt";5 g9 p4 v) Q3 n
  753.         dwProgramState=AP_CONNECT;: ?( v2 v* {( c
  754.       }+ `4 w5 A2 Q" q( `* d
  755.       dwStartUpSteps=4;
    6 [2 l+ Y/ ~5 G2 \
  756.       break;( N, E* R/ u6 C* ^1 f0 L( r8 [
  757.     case 4:' B2 ^& D2 a6 h7 _2 ]( m
  758.       {  }7 `3 `: P! j5 M, G, O
  759.         FILE *fp;0 u+ X/ A" c4 F' I1 g
  760.         char szString1[128];
    ( J' `/ z  b; b6 [
  761.         char szString2[128];
    . A# |3 M3 \$ d$ l/ c
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # t3 M, h8 T* C) A5 b
  763.         if(fp)
    ' N9 J1 R$ ^. [" v# X2 z
  764.         {
    5 |' Q& D3 w% r. s" u- j( m+ Q
  765.           fscanf(fp,"%s",szString1);, \5 F0 B4 w- w6 t6 Z* U
  766.           fclose(fp);& Z+ R! h; z1 M6 k* y
  767.           fCheckVersion=atof(szString1);) Q4 D) ^2 o& ~( H; I
  768.           fp=fopen(".\\checkversion.dat","r");
    ( `% O3 k# j! H: g
  769.           if(fp)" y% H( Z/ ~: R) l  R5 E
  770.           {
    3 E0 O; K! ?- o( d/ R2 T; s# L* N
  771.             fscanf(fp,"%s",szString2);
    " H& L9 P3 ]& {) i- t
  772.             fclose(fp);" v6 O: B) S# I: f
  773.             if(atof(szString1)!=atof(szString2))
    1 w. K: q; e0 n( s7 d5 m( ?
  774.             {9 V* f6 ^1 O0 o# B' C6 g2 V9 P6 K
  775.               if(!Dn.Connected())
    ; g. r! |0 P! d+ Q0 C. j, {
  776.               {. H' I. _+ \5 G/ D7 x
  777.                 bFirstUpdate=TRUE;
    5 c4 l3 Y" W; W- L
  778.                 dwTotalFiles=1;' u# K3 c, z7 u4 ~
  779.                 dwDownLoaded=0;# t2 _/ _7 m( J, A2 S) u+ c3 H4 p
  780.                 bSilentStep=FALSE;0 Q* J6 p7 L8 g7 [' u. u) b; E
  781.                 bCompressed=TRUE;7 N, N% l$ P* U0 H& G. ~1 K
  782.                 strExtLocal=".\\DownLoad\";
    / w2 Q9 q7 Y, x' k
  783.                 strFullName="update.txt";
    0 Q& i; y. Y& A7 i+ h
  784.                 dwProgramState=AP_CONNECT;
    1 t4 v& i5 z5 @5 S) s6 g/ @1 W
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! |4 \4 U% w" C% e) L
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. O. e+ p9 O  Q) X" ?8 _! n: n
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : Z/ |/ ]- y' C! t4 M
  788. ! \: T/ M, \4 i8 D
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, N+ ?. A) W. z5 S  x3 M
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ; I- ~! y2 q; t/ ]+ z. h: S$ L
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    6 F: g$ H" r! Z$ t% X! l
  792.                 {
    : e& H1 T  \( P; N% B4 c
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");4 R8 X. o% |8 M* r) V- y% C
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    4 f0 e4 x# F) H* ~) u& c! c
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");* Q7 B6 k7 n* ?& j9 ?& X0 C9 |* d
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% \3 M! T3 N) R
  797. % g5 v/ f6 q( ~6 A
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) Y4 h/ Q2 N9 @7 g9 l# O
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ) c+ _- s; D% S& W" ~
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");6 ?" q, |1 t9 j- Z' x3 _% k* }& s* q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ L4 f2 N7 Q' Y9 y
  802.                 }
    2 `+ I7 ~# Q% t( a1 J7 i+ Q+ K
  803.                 dwStartUpSteps=5;2 w0 w) Q9 X2 ~! w( \& G
  804.               }4 Y4 s3 z$ H4 J2 _
  805.             }: y/ M+ L1 m8 a: n/ K2 G6 k$ ^+ Q
  806.             else
    ; e+ G& [6 T, y" O8 T7 b
  807.             {; v  c3 s8 z' L" g1 V/ c' z
  808.               unlink(".\\DownLoad\\checkversion.txt");( b# A+ E, b) Y6 R" W
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    3 s; }  j* O4 G  Z" w
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    " s; W' l1 w, \0 Z5 t4 s
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ) P* l8 R5 ~4 K
  812. 1 b9 s- J6 S+ ]8 R1 k. m+ S& x
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. P& ]9 O2 N# @% t0 ?8 {5 @
  814.               dwStartUpSteps=99;
      w6 N, n, {$ s' _4 w& a' R) _. u3 ^
  815.               bFinishUpdated=TRUE;
    - ^- m! j0 A$ a4 a
  816.               bCanUpdate=TRUE;
    + v& W& t( Q; e- h- R9 _
  817.             }8 Y. D6 n6 @5 ~  _: z: ]; F* ?
  818.           }
    5 G0 _& o6 C* c0 q9 s. X2 p8 d
  819.           else0 y. i, b1 k7 U2 G2 s! d
  820.           {
    0 }+ |9 @1 t9 F4 G5 b6 K& v$ C  n
  821.             if(!Dn.Connected())
    1 ~& ~: }& x3 G  C9 j7 S6 x) j4 P
  822.             {
    7 j; I& Y/ v! u9 \- I- p
  823.               bFirstUpdate=TRUE;5 ]8 y0 W! T) R4 ~6 s7 A9 Z1 G5 ~
  824.               dwTotalFiles=1;
    3 I2 H9 l& O8 H6 F
  825.               dwDownLoaded=0;9 `$ }0 n: e5 u! y3 ^; s% ?
  826.               bSilentStep=FALSE;3 a* {7 m) c2 o& r5 q, W) |, k
  827.               bCompressed=TRUE;, s# i0 f0 g2 J6 O& d
  828.               strExtLocal=".\\DownLoad\";) _8 t4 W$ ~. R0 i3 U: S0 b  k
  829.               strFullName="update.txt";6 I9 z3 S7 _) L3 z& e4 r
  830.               dwProgramState=AP_CONNECT;, {0 Y  g5 j  Y3 s& s- K
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 ^; T& \+ M$ {4 f* O8 L: K& q! C
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) |% x" I# r/ a+ m
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : l  e/ |4 C: d6 l) X' X
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 d- m% v; t" b0 T+ j" J
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ; v8 p- y1 f, G1 v0 ~6 X/ G
  836.               if(GetFileAttributes("Wsa.zip" )!=-1); E; T0 f$ J5 v8 v# P0 A  y6 h
  837.               {
    , D% w- B, V6 @9 A. }3 y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");, U7 Y# v- j6 H% i) Q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");9 g: C2 S& R3 P) Q2 x) Y0 L  i
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    - T8 }% K+ b# V; z5 X
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& R8 A9 L- W2 W7 T
  842.                   L! ?8 ]* U, K& p
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 z7 Q& ~" W/ F9 d
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    1 T/ z) H( H) q7 |
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");# y8 {1 d% O+ `. }
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- t! \8 \" _) C% z6 e4 H1 C/ R
  847.               }
    % _8 w( u( o: S) y4 e
  848.               dwStartUpSteps=5;) ], [  R/ o) v* y) u* p
  849.             }' F. V* O9 m( p: V, G
  850.           }
    2 i& Q8 R: B6 z; P+ p
  851.         }+ Q6 p8 T8 p8 }6 }" }
  852.         else; p, C9 R, S; y$ Y" X
  853.         {5 |! F' }# w0 `( @8 m. t: A
  854.           dwStartUpSteps=3;
    : I9 L/ `; b$ \1 N7 |% o: E3 g
  855.         }! I$ {, s3 S* W, Z/ ]& C
  856.       }
    ; Z1 t% @; j% E5 S4 _$ T. o
  857.       break;
    3 L; d. \0 M. j- U: Z' g9 C
  858.     case 5:# r6 Q/ N3 e  w
  859.       {
    1 I6 L, U, }. i  N8 s. |
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)4 d: T* _" B( L% a$ D/ b5 v
  861.         {' Q4 P% ?) ~( [
  862.           int opt_overwrite=1;( u) n2 Z+ ~& V! n! g8 R2 G
  863.           int opt_do_extract_withoutpath=0;
    3 B; M5 L( \) ^/ ~" l4 ^! L
  864.           unzFile uf=NULL;0 e8 ~. Y% Z7 n" {  i" Z: k

  865. 2 l. Z8 A" S, B  s7 G1 C7 W
  866.           uf=unzOpen("Wsa.zip");
      ]. u. ?6 [' Z. [5 {
  867.           if(uf)
    5 V7 Q! \/ Z; Z/ P( ^0 U( Q
  868.           {
    2 M) X$ F8 |$ s8 |' E! v
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);' {& [9 q, n" Z) q
  870.             unzClose(uf);
    , x- D7 Y9 ?! r3 j
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");  s0 J, X0 M* Q/ e( {4 q8 f) V
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ' v4 _. x2 v, X6 H. N0 M3 G  d# _
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");3 A+ r' Q8 F: s  L1 K  o  l" D
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; f5 ^  M. X7 V4 q
  875.           }" D6 T" Q6 }) U4 j8 c0 i
  876.           DeleteFile("Wsa.zip" );* H! ]3 H5 ^" S; s% G
  877.         }! d6 ?: U  X( N( D; O- P

  878. : N; m* |) h' ^  G( b9 d8 ]
  879.         if(CheckLocalVersion())/ Q: Q. y9 Z! V
  880.         {. i! g% @! s# v8 w
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
      k/ A& @+ ^) g) ]
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");4 V1 [+ y% q# ~
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");8 ^  M% {3 }* n7 e; U) F
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- m4 c  n' g9 c" v0 i
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ) ^1 p+ _8 X  M! i- ?. f4 L
  886.           dwStartUpSteps=99;: F+ ?# L: ?! J3 }+ D$ v+ ~0 o; E6 Z
  887.         }& k+ Z1 y* J4 S3 l5 ]$ @& l2 w
  888.         else
    + Q) Y/ [& \( w3 x( F. _
  889.         {$ D- u# Z/ r' e, {# j" \
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 Q- V, ~' [( l( o
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");* j. e& Y8 T) Q- x* v
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");- h0 `5 W( a7 Z1 G+ v3 X7 H

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

% v9 {$ Q# W) V4 F) K1 h6 H; d( t& m2 _

評分

參與人數 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-28 06:16

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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