CSUpdate.exe源代码

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

) k; i  g( A# I  e3 j0 q$ V
  1. / RevApp.cpp : Defines the class behaviors for the application.
    - z6 N: n9 Q8 H. b( R- J
  2. //
      G$ c' E7 e' @* M5 m' K* Q
  3. ( F& M, a3 r9 L4 T: |4 T# G
  4. #include "stdafx.h"3 \6 E- N9 I- `0 ^' t( T+ f; a1 T# A
  5. % L/ G  Y( A$ j/ k
  6. //#define UNICODE2 w5 `4 R2 e: V5 `, I
  7. //#include <gdiplus.h>
    / \  ]/ [% ~  B
  8. //using namespace Gdiplus;
    7 F; K0 W( N+ E. K/ U9 O+ K
  9. - p- }' b3 }& {4 S- ~  M
  10. #include "RevApp.h"* l4 j0 a0 s2 N
  11. #include "RevAppDlg.h"
    9 i& c: H+ t0 A+ e4 A+ r

  12. 4 B# ~, h2 H: g) B3 {
  13. #pragma warning(disable:4786)  K0 D( L8 m9 M5 K; `6 F7 K+ s
  14. #include <map>
    * y5 g6 c& c! z0 q" ]" L. q
  15. #include <list>3 _) E. b( ^7 O4 s$ q4 {2 F" {
  16. #include <direct.h>8 [6 r4 W1 g/ I3 a8 g! L
  17. ) H' R8 `* P/ z. I
  18. #ifdef _DEBUG
    7 G( R! l7 Z: N& A0 x# y
  19. #define new DEBUG_NEW* w+ {: l. i: F6 [# C, \
  20. #undef THIS_FILE- \% m/ z/ ~1 j2 v; {- X
  21. static char THIS_FILE[] = __FILE__;/ h' e  W: }4 f' E+ x' ?
  22. #endif' T% w! [8 Y! t7 \7 d7 L' H9 C2 w
  23. #include "SkinResDef.h"
    9 \% W+ U2 @& ]% E; Q
  24. #include "ChangeBG.h") V& b; ~) i" O9 }- _
  25. #include "AFXINET.H"9 V: V- c* d  f: k
  26. 8 g2 z3 ], S$ g* O/ P
  27. #define TRADITIONAL_CHINESE 00 e2 y$ i: w# [+ \, u1 ?7 o
  28. #define SIMPLIFY_CHINESE 1
    0 d7 M  ?0 V6 y, N  ?6 f0 r7 j
  29. #define ENGLISH 2* [" L/ `* h) ^) v* k) ?6 S
  30. int m_iLanguage = ENGLISH;
    ) s  b3 o0 I* ]& t& u
  31. /////////////////////////////////////////////////////////////////////////////
    ( t7 a- s* e0 L1 b) P) U2 l, e+ ?
  32. // CRevAppApp2 W2 m* A( y' b

  33. % G8 j4 _" D9 B# }( a% Y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ) r: l% s6 w, k# P$ S% ~$ d3 V) Q  w
  35.         //{{AFX_MSG_MAP(CRevAppApp)* T1 ~  U' F; Y: I5 d7 `
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.) Z1 W# \! h. w
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!6 R0 c" v2 f4 `) y& L
  38.         //}}AFX_MSG, ~2 A, X" E7 t/ l, d$ K5 T
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)0 O0 D6 F8 k4 p' x+ ~% ~/ v& j
  40. END_MESSAGE_MAP()
    $ m- {+ y2 C& ?. L: N" R

  41. 7 L' I4 i/ n: u
  42. /////////////////////////////////////////////////////////////////////////////
    4 J- b2 {" U2 L
  43. // CRevAppApp construction
    8 O7 ?- c& [/ W( @" ~2 F7 H" }" p* a+ p
  44. 0 w5 O( j: n0 F. B: m
  45. CRevAppApp::CRevAppApp()
    ) M7 i) Q) Z: m) l
  46. {( }9 r3 [. C8 V  @8 Q! V
  47.         // TODO: add construction code here,3 s# b* g5 X( D" Q1 W+ w3 g
  48.         // Place all significant initialization in InitInstance
    - x+ c( r" P1 U3 ~: K) _7 N* c+ ~
  49.   bDisplayIsBig5=FALSE;$ m% s) j+ n. _! o
  50.   bRestartUpdater=FALSE;: M5 g: z' w: d; G( L
  51.   bFinishUpdated=FALSE;- v6 r+ ~: `8 e! F
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    + i% ?) Y4 ]' w; f2 M3 r0 [
  53.   InitChangeDataBig52GBKS();
    / ^; `4 a7 L4 p
  54.   InitChangeDataGBKS2Big5();
    ' }1 g6 y4 L& ]) m3 i) i5 G4 a
  55.         //& r$ M* h. e3 m) l7 r5 @5 N
  56.         bClickRunExe = FALSE;
    , p. @+ e  w0 e3 u* {, R
  57.         //
    0 }1 S2 S2 V- X' p
  58. }, _1 C! Y6 b1 M# T: V- V6 g$ Z% G
  59. - }3 V4 |5 j' z' @# a( o
  60. CRevAppApp::~CRevAppApp()
      w  K- b1 o( P8 d/ B! L9 x
  61. {& k5 O; V5 w, a% x+ g5 U7 c9 u( c
  62.         // TODO: add construction code here,
    4 h9 B4 ~2 {$ y, [! q# H- o5 z
  63.         // Place all significant initialization in InitInstance) l: P7 T% N( p- c
  64.   EndChangeData();
    , h, G+ w; D# Z; X
  65. }# d7 s% `; |: n- d2 _

  66. 0 [& X: u, W3 m6 o0 y/ j3 \5 [
  67. /////////////////////////////////////////////////////////////////////////////
    * b/ I+ g3 i4 \' J& n
  68. // The one and only CRevAppApp object
    5 H: I2 g8 u8 C5 S

  69. . M! i0 A; N3 X! G1 ^
  70. CRevAppApp theApp;  \3 P& h. `0 z9 |0 @! u( V
  71. 6 Q  ^  Z! @: O6 M' l: A" E6 w- M
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)1 O$ u* O9 N; Q
  73. {
    5 g4 u. A8 B9 E, l+ O; b
  74.   int iEOF=0;8 g5 x' @5 G* N: a# ^- K
  75.   char szTempName[MAX_PATH];
    - P' ~0 {9 ]8 G( J. f
  76.   *szFileName=0;0 {6 B: J9 u+ w) {4 F" S
  77.   iEOF=fscanf(fp,"%s",szTempName);
    " p; T, l& z+ |/ n; K, @  f
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')" w. i- Y/ [5 {. B( p# q
  79.   {
    6 A9 x+ [( s) w/ {
  80.     strcpy(szFileName,&szTempName[1]);5 ^! S% o$ {1 e* }) W" ]' {, b+ f
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    % v* l; R5 W5 c! n+ {
  82.     {
    ! J8 ^) J5 F' N2 e7 M- a
  83.       iEOF=fscanf(fp,"%s",szTempName);
    3 q$ W: V, w' I
  84.       strcat(szFileName," ");/ C  [' P9 @5 G/ q- }3 q4 \% _
  85.       strcat(szFileName,szTempName);
    9 }3 M$ |3 p2 z# @* F
  86.     }
    $ E! W1 k3 K4 X* M
  87.     if(strlen(szFileName)>=1)% V) U3 Q7 N8 f8 K! p$ K
  88.     {
    5 Q* d, N8 t7 [* X
  89.       szFileName[strlen(szFileName)-1]=0;# I' d7 r7 ]$ x9 O8 m
  90.     }
    7 z/ L: B: W: c! {* Z+ b! q
  91.   }) S6 M9 r7 a' [% j+ v- f4 u0 Y2 i2 K
  92.   return szFileName;
    1 C) A8 R' c4 E/ ?! u  s
  93. }4 g* q; S! e9 n% O' k
  94. * R! F" T) w  ^# e8 `
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    - b+ C) c# E  Q4 w6 k( q
  96. {
    9 |/ ?& ?3 \1 O* Z, E- j- S
  97.   FILE *fp;, |" k( I8 [- M& x
  98.   char *key=NULL;
    + h7 Z- v) }6 l, H' R" m; u
  99.   char version[MAX_PATH];) c$ x1 ^0 s) l1 F6 R  W
  100.   LPUPDATEFILE file,olds;
    7 \! z" k. o2 ~3 s' I
  101.   std::map<CString,LPUPDATEFILE>::iterator p;+ Q4 u1 i( _# W2 x# Q! m

  102. 3 V6 |% F6 R/ y, l! t, t4 E
  103.   UpdateList.clear();1 L  Y0 N2 W) x% D
  104.   UpdateFile.clear();; ^/ e' ^0 \- M$ P! J
  105.   if(GetFileAttributes(filename)==-1) return false;, P' b' m" E$ X* ~
  106.   if(!(fp=fopen(filename,"r"))) return false;& K1 {7 j' Y1 f( C1 T$ y; w
  107.   fscanf(fp,"%s",version);
    * o7 T) J9 ^: u% a
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }1 r% N# U" y" E% t4 y! m
  109.   while(fscanf(fp,"%s",version)!=EOF)1 X3 ^& B/ s9 h* `
  110.   {
    9 O. ]8 |" n) c1 W2 `
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! u. v4 ?* d- V) C8 L. s$ P
  112.     fscanf(fp,"%s",file->path);2 s+ `8 X' P) r9 [, ^! @0 @
  113.     ReadFileNames(fp,file->file);
    / g% k: L  Y0 Z; p7 t1 E+ `" J
  114.     strcpy(file->full,".");& I9 F4 ~. h/ T% y& ^! e% n+ a
  115.     strcat(file->full,file->path);
      _' g& k6 ~) f7 Q2 d4 Q* R& {
  116.     strcat(file->full,file->file);1 ^) S/ n) ]# \9 N' r
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())( m( n+ O$ {& D3 {# ~0 p* A/ L( z1 S
  118.     {
    & b: D$ \% f: c0 }( @
  119.       file->vers=(float)atof(version);. C- ^7 s; z1 f% |! ?7 K5 Q2 u
  120.       UpdateList.push_back(file->full);6 W( A- }! C+ Z2 X7 t
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    $ ]8 O. P( j( w  M; S. }2 _& G( b% |7 v
  122.     }
      b  y# s# h; C) x0 ]; n  c
  123.     else* S( ]5 R+ z3 n( J, e5 m4 q  e
  124.     {* b* C2 K+ {7 _  y# D
  125.       olds=(*p).second;& i2 F/ f5 x% \- Q$ Q" [. G
  126.       if(olds->vers<(float)atof(version))' S6 w+ |$ a4 [6 l
  127.       {
    5 y; Y* H! S' F5 L
  128.         olds->vers=(float)atof(version);
    , I6 T. x7 D- \" i% Q' m
  129.       }. u6 C8 v7 d- `% R. T1 d2 l0 U4 k
  130.       free(file);
    ( x8 M, P/ c) [( g0 ]
  131.     }( s& p/ W6 Q$ f& a7 X+ W
  132.   }! X8 ?) q7 K. ~7 g7 q
  133.   fclose(fp);
    + m; Q' F+ P$ t3 t, S3 T4 S
  134.   return true;
    3 ^/ Y& I. U+ E1 c$ l8 R4 v
  135. }" n4 v5 _- N2 y0 B: C# r* w9 J

  136. . s  L- P/ M" \4 ^+ E3 }$ T
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)( U" Q( M. `3 Q4 D2 w$ V4 @+ d
  138. {
    : w# G1 B0 j+ I2 \" m& \) N1 S0 e
  139.   TCHAR  szFull[MAX_PATH];
    - d8 I& P  X- K6 x# f+ s
  140.   TCHAR *token,*inter;
    , O1 d9 R0 Q4 K& M& E9 U4 b! D. C
  141.   *szPath=0;
    / A# s& b9 ^) K- G3 B& f4 F
  142.   strcpy(szFull,szFullPath);" A) g- o3 P) H, K' m2 R
  143.   token=strtok(szFull,"\\/");
    . x: F* b5 O; r: F" H" t
  144.   inter=token;7 S8 f/ k  S/ @
  145.   while(token=strtok(NULL,"\\/"))
    ! E5 D9 T* n$ x# H3 X' q
  146.   {  ]3 l* t4 I  Y- _2 \
  147.     strcat(szPath,inter);9 E8 E1 E7 D# Q" Y5 m. t" E
  148.     strcat(szPath,"\");
    ! \3 a' U' J+ X6 G
  149.     inter=token;
    1 D7 ^/ u8 A6 J! |
  150.   }( S! f% i) ?. D+ e8 j; `6 s
  151.   return strlen(szPath);
    2 ~! E* U. v$ y5 D( b; v1 z8 b
  152. }/ e: h8 u: d. K6 o2 P
  153. # N% h5 j. z/ ]1 X  n8 ^
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' y4 w& X4 V! h  d+ W
  155. {
    1 i! V7 o* t1 V
  156.   DWORD attrib=GetFileAttributes(Target);
    " d. H( O) Q& b1 D4 ^+ a
  157.   if(attrib!=-1)/ @3 W6 P8 E5 w4 y: O" h  q
  158.   {+ K4 e5 ?: E7 O0 f1 w, I0 d
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    2 ~) ]. Z" t+ f. |( p( }+ m
  160.     {. ]: O4 o8 g! }  ]
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : d4 J! H! h+ t8 G) @
  162.       SetFileAttributes(Target,attrib);- D6 Y- D% f/ g
  163.     }) s* X; F! r- G# S* B* O; j
  164.   }
    7 f3 J4 M9 j6 ]+ l$ h
  165.   CopyFile(Source,Target,Erase);8 F& [- O' H7 I7 X9 u1 S2 P  _
  166. }: t1 s. g) {+ C" r

  167. 0 u& z7 q& ~2 A# r4 Z* |1 I1 I
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)' J1 H& \: `5 ]! v
  169. {
    0 J6 e  A: }: {% Y  Z0 t) p5 Z
  170.      FILE *fp;
    5 H: m( Y. E0 Y" {
  171.      char  szBuffer[8192];
    % K7 _- `4 Y% z/ ^+ l& ]6 Q$ \4 H
  172.   va_list  argptr;
    ; s2 \/ W6 m; L

  173. ' T' C) A3 \! g# M' _
  174.         va_start(argptr,message);6 V* O4 _6 n$ j) m- B
  175.         vsprintf(szBuffer,message,argptr);
    ) M. n9 C( L, F$ ^& P7 H
  176.         va_end(argptr);+ ~, u- N& J# r# X2 o
  177.   fp=fopen(FileName,"a");7 q% |/ y/ w9 F; L# I8 b$ S, q  Y, H
  178.   if(fp)
    % ~7 m$ S, I+ c9 P/ B- c
  179.   {0 j3 i0 ?" |% K! @. ^5 Y" |5 r2 ?
  180.     fprintf(fp,szBuffer);4 N1 ~9 L* r1 g' `
  181.     fclose(fp);
    ' q5 i9 y+ G* K
  182.           _flushall();" u" c; f9 [7 a; b; P
  183.   }
      E; z6 u  C7 v" d
  184. }
    ) C% g/ z' |* m- U( Q/ K' S

  185. ) Z( q) @2 E/ G+ g" u1 ^
  186. BOOL CRevAppApp::Fclearf(char *FileName)* w! ^( \. u9 l: o& J0 u
  187. {
    # L( N* h: d* T5 Z& H! F
  188.      FILE *fp;
    6 d/ _# ^6 `1 f  `3 c& I
  189.     DWORD  attrib;3 L/ v  j' H! J3 I* D
  190.   attrib=GetFileAttributes(FileName);; \! Z0 ?/ H( k* R0 t3 a6 \; I2 _
  191.   if(attrib!=-1)
    ; j0 J" ^3 V/ Z: g. z0 R
  192.   {- Y- ]/ Y: t' H$ \/ I, W8 N8 s
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);6 C2 I3 M/ ^. U2 o% c
  194.     if(!SetFileAttributes(FileName,attrib))
    ) `6 C9 G4 v9 `. o( z
  195.     {0 ^5 C& z4 w- X* g, m9 o
  196.       return FALSE;
    5 |8 Q7 n7 p2 m( A; ]
  197.     }, l& |9 w/ Z2 @9 B
  198.   }1 G; a9 ]! A' ]+ Z1 S& `. b" W+ Q
  199.   fp=fopen(FileName,"wb");. F, L5 y2 V  x8 ]" @
  200.   if(fp)( D6 A0 c- E+ ]- C" D% T6 R, n
  201.   {
    8 x, Z" v% w6 _) z# z0 j
  202.     fclose(fp);
    . ?% A9 w5 u& r. Z
  203.   }5 _$ X; w1 o5 Z/ s6 V+ s6 y
  204.   return TRUE;
    6 F: z/ V) E& s# z: b
  205. }9 E: y; }7 w$ i3 E, w9 p2 y
  206. 2 e/ ^% }' |0 \, a/ f
  207. BOOL CRevAppApp::UpdateLocalVersion(void)( U& o$ A8 M- e5 ^, u
  208. {
    6 B5 [$ S* ]& ]
  209.   char filename[MAX_PATH];: N- [7 H; H; j" i8 j
  210.   LPUPDATEFILE file,olds;. @: v) k" Q; ]7 k7 G/ `
  211.   std::map<int,CString>::iterator i;+ ~! r1 K4 _' q  N) }, X
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    / S( C% n" `8 u" X
  213.   std::list<CString>::iterator l;6 C4 m- p" Y8 m  I, f% h

  214. , N& r8 ~+ h0 F) c& w
  215.   if(bFirstUpdate)
    + R% Y1 M9 W7 J, h) s$ v" k
  216.   {
    . Q( e  y( ^2 F# h- z
  217.     dwCurrFile=0;. u3 y7 j! a; d+ s4 a7 J
  218.     bFirstUpdate=FALSE;
    " `* B( t8 \4 S# _+ ~1 ~
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 N$ E7 r9 v7 P& E" H7 Z
  220.     {( t, ?( X+ D5 ~% j% E. H" r
  221.       dwTotalFiles=UpdateLocal.size();
    9 n! F% o  V9 ?& Q; y& B6 Q
  222.       dwDownLoaded=0;. G$ R) a+ q% I. X
  223.       bSilentStep=FALSE;0 W6 A* M  s# w- C
  224.       bCompressed=TRUE;
    9 S( n* p/ r% U3 B. l
  225.       strExtLocal.Empty();
    % o' \& x- D+ w  C% N% ~2 L, S
  226.       strFullName=(*i).second;0 z( O* f& i* _/ n3 d2 m% F( c
  227.       dwProgramState=AP_CONNECT;
    2 B5 n& ?; \& j+ }# {. D; W
  228.       return TRUE;* [" ^1 |0 _+ q* N: a1 D' F& e
  229.     }, p: c' r; l" p+ V' C& ^+ M
  230.   }; u4 M) Z" S  Z9 W  T$ b
  231.   else if(bRestartUpdater==FALSE)% x. A; w- |* ?3 }4 M
  232.   {
    ) n4 y1 R/ U* t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- v/ L( I" @; Z0 t+ k
  234.     {
    7 p3 T  U4 ^% j- O* L4 t
  235.       file=(*p).second;
    4 L  w! P$ c0 d3 v
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())( o" T  T* r' Q2 x
  237.       {
    & y( x1 L. D0 f6 z0 P, w+ f6 D/ Z) @
  238.         olds=(*p).second;
    " d$ Z2 {5 d) V8 V) u- e8 L8 y3 U
  239.         olds->vers=file->vers;
    ! W8 h& |: Q6 g( A
  240.       }5 f8 b+ d9 R8 f- c" O' C
  241.       else: P; Z1 X9 W& p
  242.       {
    % ]$ h- F1 V/ K% L. w  D1 X- f
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* U5 h7 j1 K- `& k; ~
  244.         memcpy(olds,file,sizeof(UPDATEFILE));9 ^2 {1 ~$ x. J, o
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));' O6 |' z+ N% W7 a# p% L6 \
  246.       }2 E' {/ M1 u! f1 a# W' {, T
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( f8 ^1 ^) v2 P0 A
  248.       sprintf(filename,"(%s)",file->file);
    - E& o/ e! i1 C& U: y. z9 k
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ( r. z7 o- U3 Q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ; j0 x" r. W$ L  T5 F& m; [5 ~4 I, U3 f
  251.     }% o- u$ c$ T2 D. A9 l
  252.     dwCurrFile++;
    / j3 ?+ h, Z& O9 D; q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())( ^9 m% X3 L7 b8 |0 S* V. c
  254.     {% h3 b5 s; W9 _5 g0 a5 @9 k. [
  255.       bSilentStep=FALSE;
    ( r$ B2 i( @& G, m
  256.       bCompressed=TRUE;
      L9 l3 U$ E! ~4 \8 n, W7 M% V
  257.       strExtLocal.Empty();
    + S# Y- M2 G9 u" y
  258.       strFullName=(*i).second;
    6 ^  I9 A2 z  |: [
  259.       dwProgramState=AP_CONNECT;
    8 z4 d- E8 l+ H
  260.       return TRUE;
    + m8 m$ b* k1 h) X
  261.     }
    : A) O& ?, v( y. m
  262.     if(!bRestartUpdater)
    : h5 u) V5 x: g% T, p& V& T, d
  263.     {
    $ E' y0 A# o. O2 b
  264.       int iCurrSize,iFileSize;
    , A( P3 A% T/ F* W
  265.       iCurrSize=0;* s9 F, v: N9 X" L3 x; Q% P
  266.       iFileSize=UpdateList2.size();6 E* ]" i' ^, [3 m4 k, f% H7 R9 p4 e% o
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ( w3 `6 a" Z; r" R% M7 }7 d
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 L( @& M4 q: n0 ?6 a) {
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");6 `8 q/ G9 J- k4 R/ Y! D
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. b* N) Q0 n* B: i1 T2 W6 @( c
  271.       Fclearf(".\\update.dat");
    : X/ R; a7 r7 d  s5 f  G
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    5 z4 q- ~1 T+ T
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)% A' E$ [8 Z& U4 Y! n
  274.       {; b* y9 O/ d7 k+ s8 O
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    1 `5 t" J& p: J- a* K% [" f
  276.         {
    0 e  k/ G& K( n
  277.           file=(*p).second;
    , C( x; U; v( j' @/ V7 s. L
  278.           sprintf(filename,"(%s)",file->file);
    ; E% q- L1 v* K$ x: X  P
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % i+ i8 N; }4 K
  280.           iCurrSize++;
      y3 ?, M# e) }+ a. X2 B
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) k& ?( w  X8 j" |% `5 n% X& G
  282.         }1 u5 B0 v; g. ~. H/ ]3 A
  283.       }" r0 P; Y- ~* S& _: _; M7 @( e
  284.       unlink(".\\update.txt");
    6 U. D( _0 J. x! a
  285.       unlink(".\\update.tmp");) D) H% R$ j$ K" T8 W6 w. v
  286.       Fclearf(".\\checkversion.dat");
    : w8 a$ b* ~. Q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    # {8 z- Z) z( |+ g% p' o' ~
  288.       if(UpdateLocal.size())+ ?: s' q) ~- G; U" P2 U' T$ H
  289.       {
    2 b0 @5 k! U2 J. M# H# K
  290.         UpdateLocal.clear();
    . J, {2 b6 Q' S* Y# l4 M. h( B
  291.       }
    ! U2 u4 ^% x4 G. C: w8 @
  292.       if(UpdateFile3.size())
    3 E0 M- r  D. X- e9 C4 \
  293.       {
    & ~: c+ u3 L5 r* o
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) q9 y5 O/ ~3 M7 A2 a
  295.         {
    1 S9 F* L/ X; y% b$ s
  296.           file=(*p).second;# r2 d8 f; R7 r
  297.           free(file);
    , L6 Q2 |2 g; L4 r3 F; `
  298.         }; Q+ u. W+ F+ i0 k. R. f
  299.         UpdateFile3.clear();$ v  L2 Y, ^6 C! ]' F( x
  300.         UpdateList3.clear();
    - x3 i3 I: q4 S8 \) X6 h
  301.       }
    , k4 O1 g) ~8 _: V! u
  302.       if(UpdateFile2.size())
    : p  r/ w* k8 \' p$ a# `! p
  303.       {
    * G9 Q0 F. S0 E( x. A  }) `
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / o' ]' S6 L7 E( G2 P& n' g: p
  305.         {
    . @2 z  u6 z* ]7 P! Z9 [5 ^8 b& Q* ]
  306.           file=(*p).second;
    $ ~4 C/ u8 U7 ?& o# k$ {+ p
  307.           free(file);
    . U0 U$ I. H4 \3 @' W  o# ~
  308.         }
    . k3 d& a* \4 d& V6 Y" m/ N+ ]
  309.         UpdateFile2.clear();
    9 Y7 f' z8 W, O3 @/ F$ U* H( X
  310.         UpdateList2.clear();7 X) N& a7 V0 \
  311.       }7 a. K7 z! K3 ]: N' _+ G
  312.       if(UpdateFile1.size())9 c( C& \+ ^% r! O
  313.       {, H" j1 `6 m' a" N! p
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ K7 b# S/ C- b3 H
  315.         {
      e) r2 M, o% c: z6 P/ [
  316.           file=(*p).second;
    7 N  }3 F6 P/ M
  317.           free(file);; @( b3 r5 [) Q( J, H
  318.         }( m, R& E6 I- G8 b' _/ C
  319.         UpdateFile1.clear();
    5 M; K7 }1 d) C7 f, Y8 d# A
  320.         UpdateList1.clear();( a, V1 E$ _: i! h3 z2 P' @
  321.       }
    ) W7 T7 n, A0 M  v" V0 U
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! l2 ^# b8 p  T7 [, k0 `3 E( }
  323.     }& h' e; W) `' V# O2 a  ~
  324.   }& @2 V8 F- [0 R* g7 Y
  325.   return FALSE;
    8 q7 R/ @/ `4 b. q9 \- d
  326. }
    ! Y9 V# K) U! X1 E
  327. , E+ o, [. ^" p1 H& ^: Q
  328. void CRevAppApp::ClearAll(void)
    $ \0 e  }8 H- ^5 H
  329. {
    9 e( i( {, b* d0 _% k
  330.   LPUPDATEFILE file;" H" d% a8 n+ y) s: d& r
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 {  F0 K0 [5 u' ?: i; L5 j

  332. , r1 B, P* J# [6 o, J1 \6 V
  333.   if(UpdateLocal.size())* K+ z+ c- L& T! u" o  M3 ]3 i
  334.   {* Z' O# k' R. R5 v9 x( x: U8 O
  335.     UpdateLocal.clear();0 I( z5 j) ?$ _
  336.   }8 C$ @/ w+ I' `" ~+ ]
  337.   if(UpdateFile3.size())7 P) P% D4 {/ ?% X
  338.   {
    5 o; u9 [5 r) a' B
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , _) ~! D; \2 T
  340.     {/ w0 M$ v0 W. S! h9 r
  341.       file=(*p).second;& z" j) x0 H; _* R$ x3 L
  342.       free(file);
    $ d& a7 V; E. y' v( j1 `
  343.     }4 l/ S# k1 c- l( G- G
  344.     UpdateFile3.clear();
    " c" G/ A* g; T
  345.     UpdateList3.clear();
    * ]! N8 H: b$ [) N# `# t) [
  346.   }
    2 U2 m) e0 x4 ?; O7 a
  347.   if(UpdateFile2.size())
    0 `8 B% a* ]& `" ~3 e3 }
  348.   {* I' q8 r$ _- |; I: D  e" C9 H: z# Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- f9 O; F: w0 \( T- f1 D
  350.     {0 S. C/ P1 o5 L2 `4 u; n2 w+ c6 W
  351.       file=(*p).second;/ }4 e. C! K9 G2 C! \5 r- ^0 O
  352.       free(file);
    ' R& S0 D6 }2 H, j
  353.     }
    6 ]; @' r! E" G/ _
  354.     UpdateFile2.clear();
    ; V, J9 d  R  \7 R0 c
  355.     UpdateList2.clear();4 ~( e) h" e0 Y/ U7 q: f! o
  356.   }
    * E3 S9 E8 r+ m' Z; X* P
  357.   if(UpdateFile1.size())5 W/ n. M; ?/ p* [0 p: r
  358.   {
    0 i6 N9 `+ q+ W. S1 `
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ A2 P+ `4 r6 `# u- n
  360.     {
    ) `6 n  {" C0 ^, L
  361.       file=(*p).second;
    : Z% P7 b& H7 \" J8 [: S
  362.       free(file);
    $ a/ e2 p& ]* {' d( S
  363.     }
    ) X/ Y& U3 a. @+ x( J" @' K) v" G- I0 V
  364.     UpdateFile1.clear();' h4 n( r6 o. p5 k4 c/ ]3 B' N$ B
  365.     UpdateList1.clear();
    : t; Q8 r* \6 e: m& I- K
  366.   }' I9 F. y0 a4 t' l% ~' j: Y2 n" H5 V: c
  367. }  
    0 G  |2 j5 J/ `: P' K
  368.   3 m$ b8 `2 x: C
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ( Q! g4 p. K. G; R. S
  370. {
    / J$ Y6 B( |. V/ J2 s! D$ N& [/ C
  371.   int c;
    + O9 x. a) i. v
  372.   LPUPDATEFILE file1,file2;
    1 F& A7 w+ ?/ H; o
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    " V* a8 T8 d0 h! T2 A8 o
  374.   std::list<CString>::iterator l;7 ~1 s9 n& l2 u' x  d! G

  375. 2 h7 d- i- _9 T- i. c4 [
  376.   UpdateLocal.clear();
    ' S" M! q$ }7 d/ v5 R. W, I  Q! c1 T# [) y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);' v& f, I, O* s  ]
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
      E3 n, `# t+ A/ O# w# y, a5 g6 J3 r8 T
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    9 p' a' G8 K4 g
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    % E2 b; Z' \( W+ \; w7 K
  381.   if(UpdateFile3.size())( N& O2 f) O8 @- }' w# \" A1 n2 `
  382.   {3 q" ?8 ?% c& v% c) n1 |
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ; r# n1 }5 e+ l" u+ }( v
  384.     {
    - s- g, M4 h8 c- M! d4 I
  385.       file2=(LPUPDATEFILE)(*i).second;* \0 U% b4 a, K6 k, ^: k! J; |
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! j& r: m. u2 I4 j) @' q  q
  387.       {3 v, q2 k, M1 w$ f, J: o6 D
  388.         file1=(LPUPDATEFILE)(*p).second;
    ) C9 D' H! m& z9 i8 S' p+ Y4 u0 h
  389.         file1->vers=file2->vers;
    ) g. }( V. G& m4 Y4 r. E
  390.       }/ M( @6 ~3 F9 p% v% q0 B3 j" z+ }
  391.       else
    : n- Q. n/ S) {9 `3 g6 }) N1 m
  392.       {
    5 `+ @, x( B+ I$ n
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 i6 c5 m' [& _5 Y2 p
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    . e0 G/ e* a0 r- n3 B
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));+ p4 F' ~- w/ d) T7 x+ L. o9 [
  396.       }
    : H4 J% m. y: P  U2 Q
  397.     }' o, s( V$ W  `, x+ T, ?
  398.   }8 q0 b6 q- u$ k- Q1 y/ E9 W
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , j( O2 m& t, [0 ?1 m, Y8 X
  400.   {- E% W$ u  k4 B; S) A+ {3 s
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ) }& f' @8 V  R* ]+ a  n8 I" W) l( S
  402.     {
    2 }9 N/ m7 q0 ?( B9 {& c( Z3 S
  403.       file2=(LPUPDATEFILE)(*i).second;: o" c3 @3 [9 ?- E3 X
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ Z* d% A/ y' z5 V
  405.       {
    $ U* R+ l8 c  k8 o
  406.         file1=(LPUPDATEFILE)(*p).second;" M6 L7 t$ v- m5 @* w$ R
  407.         if(file1->vers!=file2->vers)
    ; w% D8 Q+ ~; n  ?6 _: j
  408.         {5 D$ S9 D& P  |) p: a: w6 s" g
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 e0 Z: A% p+ W$ d
  410.           c++;
    9 J& R3 M$ `  l# ]8 H
  411.         }
    ' `& c4 g1 z) Y) }0 H1 F' b8 O6 ?
  412.       }% P/ x! q/ d3 U0 f. h
  413.       else% u5 o5 O) d; C
  414.       {
    * [- C  R# O; k3 S% C
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 c- z. u/ T! W! y
  416.         c++;3 R- E6 L" E( S- G( J: D4 b) k
  417.       }) v5 x: u6 }3 X7 L+ d9 O7 F; a5 u. u
  418.     }- |5 s2 s* u; |( J  T/ N
  419.   }  e  F9 G3 n5 U) }
  420.   unlink(".\\DownLoad\\update.txt");
    , i) ~$ r" A; Z) r3 x8 z
  421.   if(UpdateLocal.size()) return TRUE;/ M$ s3 p- @1 Z9 @- }% o
  422.   else                   return FALSE;  D$ C* ?) Q6 N( C
  423. }
    2 K2 Y0 r' y4 z8 {! S" A& r
  424. 9 y" z! y2 V* d/ ?6 t& o3 M+ u7 `
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/") g1 D+ ~3 f! L4 r7 G
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"6 k% T/ i5 {" S6 j! N; L' C7 o
  427. # R/ Y* j. r9 ^- M

  428. 1 @. g! I, `; P, v
  429. 6 \% G* Q2 ]+ k3 F: l2 D; b
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ g- M$ F7 k/ g: D. o7 l5 C5 P& `
  431. {
    ) X) z# x. X6 W+ T- A0 O+ z0 W
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ; M4 l7 W5 A, Y+ {0 ~  d( M4 R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : K3 V1 }; b+ ^* f6 D2 ]+ G8 b
  434.   {; J5 b( ~% K# n4 d, L
  435.     char szLanguage[50];
    5 q* z7 a  T- X$ ?. r0 Q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, N) \, m3 _* X2 e2 n; E
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 [3 m; h; ~# f' m0 B" u+ b- B/ k# j
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % R' b' f: @; n
  439.     else                                   m_iLanguage=ENGLISH;# J! C/ V3 B  d) q
  440.     char szRegister[100];
    * ?, `! s5 v. N; `
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ Y4 _0 p& y( Q/ _
  442.     strRegsName=szRegister;0 t  W' Y9 ^5 D$ [4 {9 N6 T  K. l7 d
  443.     char szPatchURL[100];
    ( y5 R% N/ K, M6 U9 D
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 p2 K5 c8 H5 V* R  l
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 ?3 d3 R8 ?; n0 h5 n
  446.   }) A# @. `8 }: G; d9 h% u
  447.   else; {  m1 v* J3 \5 x* p6 C& Q2 R. e
  448.   {  T& G9 l9 _- `4 }4 M4 k1 e
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);. F7 [3 g3 M# I9 l
  450.     strRegsName=DEFAULT_REG_URL;
    # H( s8 x* }. Z/ O1 p
  451.   }# `$ Y, c( W/ M
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    & I; \. p, \# H
  453.   {9 V! ^1 v/ q/ H
  454.     char szIP[50];7 \, F/ V& T, M( y+ `$ W- W6 |
  455.     char szDIR[300];! e" q6 V" v; v7 r
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))2 }6 V  s, `: A: ^' E4 A
  457.     {
    1 a- m+ ~6 O. ]/ D+ A, P# v
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");$ Y3 e! @# n- B, J
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");, W. [  M5 I1 l+ ?
  460.       strHostName=szIP;3 l, r# p3 P2 t2 s* V* b
  461.       strHostPath.Format("/%s",szDIR);
    0 Q( `* }' v: I5 U5 l4 f2 l
  462.     }
    ; h  i# c  W- ^' L5 B* Q( b% a
  463.     else
    - w& q5 Y" F0 ^% r, ?% J+ {  Z
  464.     {1 |7 ?4 d5 t2 Y
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) w2 [) g1 r4 ~, n7 h- y" ]( s! r- K  m
  466.       {
    & G1 ^" T# U1 P, E. E+ H* o
  467.         char szLanguage[50];: Y3 z& M- v& t+ X
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 H+ ?) G! A5 u8 W2 N
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ o0 Q0 M! _* t5 V  M, q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; r* w! i" E  j. ^
  471.         else                                   m_iLanguage=ENGLISH;
    9 {7 Z" R; ^( Q
  472.         char szRegister[100];! G! j( v0 T! [$ Q6 _2 y
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");0 P9 z- z) w1 B" z% |
  474.         strRegsName=szRegister;$ n, c: z3 d% m8 ]
  475.         char szPatchURL[100];" ^2 `' d7 C/ a% c- ?0 Z- {
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    & I* ^: T! J4 v% S1 W  ]% s$ A5 ]
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 w$ r1 Z" b5 {
  478.       }$ `, _+ [+ O+ M1 a+ t- b
  479.       else
    1 N1 W1 N; g( q; ]3 r) e+ E
  480.       {+ W- w' t0 s* K& O/ k0 o! x( T# V. D) w& T
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 D0 B/ b4 h7 u; I( d
  482.         strRegsName=DEFAULT_REG_URL;4 h( N! |: a! n  k
  483.       }. e2 {. q* x( Y
  484.     }
    , H( h% N* e0 I3 @  q
  485.   }
    % z0 W6 b$ T9 b' U2 p
  486.   return true;
    . {; F$ [( E/ n8 l
  487. }
    " F, q  J3 i5 j5 }: e7 M& ^

  488. ( n% d. q0 i( I* P0 I
  489. #include ".\ZLib\unzip.h"
    ; |' J% s0 ~# E! P1 M* L4 ]3 B
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 ~) q0 F, ^7 y% e4 d
  491. /////////////////////////////////////////////////////////////////////////////5 B( h) ~: v; t5 C- n& q
  492. // CRevAppApp initialization
    ' O+ }3 Q* B; L" X% t

  493. 1 w; N1 G4 C) h: c8 G2 n
  494. BOOL CRevAppApp::InitInstance()
    ! o6 C" n: J/ E( Q3 X
  495. {
    & X+ X; i8 N3 F6 |" P! a
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ; u; w7 U1 q9 Y0 L2 B. q+ g. _) O
  497. $ D, y" {  m4 D' w! {* P4 ~
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);  u- P9 g! R0 @0 c8 c
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    9 H0 d/ W  F' |# W; q) Q# s, }
  500.   {
    - j; s& B) b& `) r
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    . P5 U* w* d& q/ [
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % \, z& f7 b9 U# S( c9 x
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    , I+ ^" |9 @# x: S. o
  504.     {
    ' _9 f! O8 F* F* b$ m
  505.       strcpy(szPath,szPathTarget);5 B% i# @2 l5 P% _' z1 `
  506.       SetCurrentDirectory(szPath);6 ~: S- P: Z9 W5 r7 s$ z3 i
  507.     }
    * M" i* `2 B5 v, `
  508.   }
    * c4 U* m. A, ~3 j( t3 \, ~/ }
  509. #ifdef _DEBUG4 z4 w$ y8 N- ^% ^. E! C3 v
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . e1 [1 J0 r! k9 v
  511. #else
    , r2 s; X0 C" m/ y. ?% Y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ A) T+ g' c6 |; P
  513. #endif  |+ f! w  s' Y" _
  514.   {, t' x2 B' Q+ q! ]
  515.     char tempFileName[MAX_PATH];( p8 U$ Y  T2 v$ x  K8 m
  516.     strcpy(tempFileName,szPathSource);
    & w$ ^5 x- y) e) a4 g
  517.     tempFileName[strlen(szPathSource)-12]=0;" ~4 k6 E/ l4 r2 i% U- ]# M, j
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    0 y* }7 Y" `8 K' W
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    / n  M* ]- e8 P
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);- o9 I+ i( \6 w; `! N
  521.     return TRUE;) `$ `8 v$ L5 A% b. b. w" h
  522.   }# e' [( j: R* y/ t
  523.   // Nuke 0118: Delete run.exe
    , f; `) O) R9 b' m/ W: d/ r
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );$ P' P$ b  g) f. Z& v8 m6 M% K4 Q
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ) D- Q7 ^) a; v; E* Z- R$ ^" h
  526.   if(!ReadCfgFile("Config.ini")): F5 q. K3 c- m+ F4 C
  527.   {
    ( ]( x0 J2 @6 L1 H; B2 g
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);- \* n( U6 G- e
  529.     return TRUE;
    1 S% r3 u. h6 ?: r% l% h6 g
  530.   }
    4 b% t% p' R5 Z& |  q* \6 Y
  531.   HANDLE mutex;
    : z1 d5 R  m, d' u5 w" s
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    6 `8 y7 I3 K; B' t0 U% j7 z) V
  533.   {
    # `8 C! p( e) v  F  \) U
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    2 K; b1 G" r0 x: v. b
  535.     {
    1 r: F1 h) }3 E6 O+ q
  536.       CloseHandle(mutex);
    6 ]. r9 t4 S0 O. }' D6 R7 [
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);% S, J) x0 C& h/ q
  538.       return TRUE;
    7 U; O) H6 V. g9 \( ?
  539.     }
    * v* ~2 E6 [& {. _3 x+ |1 H
  540.   }  * r3 B; n- t+ t; l0 I' @$ P. x
  541.   CloseHandle(mutex);- a- q* X7 q5 y% a2 A) c

  542. & q, H/ S9 G6 T8 C
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
      T8 L( g4 O! a9 s/ s9 |; B
  544. 3 B1 _6 @# F# ^  W0 o" R
  545.         AfxEnableControlContainer();, a. f/ H# K0 }  d
  546. ( N' ]0 P  q1 @& l4 M
  547.   bCanUpdate=FALSE;8 v* L* G+ u% J3 |) R; m! j( v
  548.   dwStartUpSteps=1;
    2 s* _0 ]- ^! L" m8 i. \7 v# g
  549.   dwProgramState=AP_NOTHING;
    6 g6 D2 F3 Z4 O0 G( w. p
  550. & p' c, W" V+ \
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) ~! _2 N" Y2 I* }1 m4 [
  552. # O5 U+ T9 z4 y2 }$ K: r
  553.         // Standard initialization
    / Q* m: X  B9 l- ~2 `  ~
  554.         // If you are not using these features and wish to reduce the size
    9 z- T4 U) W) {
  555.         //  of your final executable, you should remove from the following* ?' W2 T& L5 H0 d5 ?5 D
  556.         //  the specific initialization routines you do not need.
    5 c) @" p) D  ~! G; g
  557. & `' B% f) V$ }) M" A, e
  558. #ifdef _AFXDLL
    9 f+ E5 L9 y/ ^0 l/ N
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL5 H8 e/ |6 c6 R& |0 b2 |
  560. #else
    ) Z$ ~4 L" V4 y4 Z+ w
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    $ Y9 l7 q* U& k( l
  562. #endif9 g+ N  h  J* a0 {
  563. 6 e; x7 P# T/ H% O6 @  L
  564.   dlg=new CRevAppDlg;6 h$ q. I1 \, v( M
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    * x$ g0 ?* Z, r4 c$ |8 ]
  566.   dlg->ShowWindow(SW_SHOWNORMAL);" I" j# T7 d7 [7 Q9 X6 m
  567.   m_pMainWnd=dlg;$ H* I; q, V. u+ w: E. w

  568. 5 S9 E) b7 j2 B' r
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 D* A+ z0 |) |9 d& {9 k

  570. / A1 Z# P) z& B" p# u& @
  571. //  GdiplusStartupInput gdiplusStartupInput;
    * T! y! {, D- ?3 N; x
  572. //  ULONG_PTR gdiplusToken;$ ]# U% K' y; \5 Q3 ~7 k% _0 J) C
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    . U0 t+ n2 M/ U; u# W2 d
  574. 3 V4 h! c# K- C2 f$ H
  575. //        CRevAppDlg dlg;
    : H: f# s/ D5 U/ \/ `8 p/ u
  576. //        int nResponse = dlg.DoModal();9 @: v; H- a3 _. ~6 \. \
  577. //        if (nResponse == IDOK)
    . a! I# ?- N+ `# F* u, K
  578. //        {
    0 K. E( R; w/ A: @; b" o2 }" u
  579. //                // TODO: Place code here to handle when the dialog is4 Y, _% P4 T$ ]3 x- k7 u4 y
  580. //                //  dismissed with OK
    ; K- i% D; w* x
  581. //        }
      I& a7 Z. t1 x$ \$ I
  582. //        else if (nResponse == IDCANCEL)( r* n" |6 M0 h& K
  583. //        {
    - N5 u% }9 d$ }# m
  584. //                // TODO: Place code here to handle when the dialog is
    3 D- G' f1 V; n& `2 k6 Y
  585. //                //  dismissed with Cancel
    ! U8 _3 p% O' s0 e; \; y$ N: Z0 R
  586. //        }
    1 V* Y  L" f2 E1 q- {- b: n

  587. 8 D9 N3 P( a) r7 E1 W- Y6 t
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    9 X7 `6 t* [- d$ G. ?& e
  589.         //  application, rather than start the application's message pump.
    * {4 ~2 v6 {$ K# o* v! M
  590.         return TRUE;
    6 z2 Q( G5 j+ ]
  591. }
    : Y1 p4 g: }3 d6 \( h  |9 ~- E& Q
  592. 7 ~3 g0 a* n; v0 O; f5 i1 H# V
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    " d. N- V0 P% P5 r
  594. {
    - C' Q9 F# B+ `
  595.   int i;
    ( u) P6 q* a! s/ l! |
  596.   char *szRet;- k8 Q$ s, w6 `1 @- Z& r, ~
  597. 4 ], _! o% b: E9 H6 o/ h4 x
  598.   if(pSource) { itoken=0; sztoken=pSource; }1 s# }$ z8 S' F( ?0 h+ d! ~
  599.   if(sztoken)2 ~6 U$ x: u3 C" f
  600.   {
    * S& p9 V7 v0 e5 K( c8 K- e
  601.     szRet=&sztoken[itoken];& @7 e: e$ e, a0 X- h
  602.     while(sztoken[itoken])
    8 H9 B$ U& p; |
  603.     {
    ; [* ?7 j8 S% ?1 q0 w& y  V. Q
  604.       for(i=0;i<(int)strlen(token);i++)
    ( i0 O, b( k9 k3 J! u& b
  605.       {6 z5 d' y; N& ~$ f+ p
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    3 _8 b9 D3 M6 c
  607.         {
    & V; v2 z' @+ v
  608.           sztoken[itoken++]=0;
    - ?% J" H0 h2 n
  609.           sztoken[itoken++]=0;7 V- _8 h0 N$ d
  610.           return szRet;6 Z7 N. D- X% M  l3 c0 e
  611.         }
    9 a* R& t* A$ A1 w# z7 q
  612.       }
    " {2 I  o0 D9 \
  613.       itoken++;
    & O* Z9 x* ^: Z: s2 y# F; l
  614.     }
    $ j3 V/ W: \2 w; e5 S' ]0 }
  615.   }
    2 N+ d3 V0 Q; I1 f
  616.   return NULL;2 Q+ {  ^' p3 `9 v! e( g% M
  617. }! @8 ^1 ^  a. g3 F4 t" F" g' j0 z" M$ H
  618. . l0 i5 M" Q8 M# e) Z5 ~
  619. void ProcessProc(long Total,long Current)
    2 N* R/ m7 m& I. @& V  }: d
  620. {! d+ C1 U+ m: d3 S; H( ^' v8 d
  621.         MSG msg;$ n4 F- ^. g3 R0 _1 Z0 `
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    , ^# Z2 j# J3 y6 w
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));( g! @  y/ ~. i& S! k
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    - f; J3 d) r4 I% W) b# c* Q, K
  625.         {1 j$ n/ f4 g/ S3 R2 G2 q4 L
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - @" n: Z# A) c+ r0 T: p& B: n- C
  627.                 {
    , f+ o2 I9 a9 ]8 ?
  628.                         return;* R( [( ?: `9 N6 @# @
  629.                 }1 s0 [. y- Y5 z+ g& ]# X
  630.                 TranslateMessage(&msg);2 I& |! S$ c$ P: L
  631.                 DispatchMessage(&msg);
    $ `" i; m/ f; y' @0 M* j  H: h
  632.         }        / E$ E8 {! s' p* v2 W# h5 K
  633. }
    - {, r8 g: t) H' Z, M3 z
  634. 0 V. U% x/ u  Z8 s) @# ^# W
  635. BOOL bFirstChar=TRUE;4 Y% {; f$ b* e

  636. 6 v6 v# k, K4 x! d& {# B) C( K
  637. BOOL CRevAppApp::OnIdle(LONG lCount)3 f" G$ e. x4 ?4 N
  638. {, B/ D$ `) X) [% F+ R
  639.         // TODO: Add your specialized code here and/or call the base class
    * y( x, J  C. x: h/ ]9 G& I
  640.   switch(dwProgramState)0 ~6 g/ O5 }- ?4 r& I
  641.   {4 |( ]0 m: G  ~
  642.   case AP_NOTHING:
    # h4 {0 x/ I  n& ~1 G" {  v  D- M
  643.     switch(dwStartUpSteps)
    2 p/ i* s) @- [# i6 O/ @
  644.     {
    9 `( V% W( _) u
  645.     case 1:
    $ c1 X5 e5 p8 ]* l# n$ H: X
  646.       {
    7 g* ]" }8 C- O: h& w
  647.         int i;
    5 @& X; t2 i; w. Y$ K
  648.         CDC *pCDC=dlg->GetDC();
    / ]: q* a: P( m
  649.         HDC hdcwnd=pCDC->m_hDC;
    9 A  ]* M. n. ?7 t" n: D3 y$ S' F& g  g
  650. //        Graphics graphics(hdcwnd);) n" F% V; c" M) m) t  l
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");' g9 D4 e( ^4 c& I
  652. //        INT iWidth=bitmap.GetWidth();
    9 N' G& i# y. U: ?
  653. //        INT iHeight=bitmap.GetHeight();& [& y/ k( x( U& C6 t  D3 `4 d  D/ p7 S
  654. //        Color color,colorTemp;
    2 f& q5 S2 h$ Z' g) \
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    9 c, j# B: z/ d$ T/ r5 i
  656. //        {! l# y7 h) S! F) b
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)4 |! G/ i% G- C; W! r3 g/ b
  658. //          {
    2 N# d  a' [+ X- I
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    1 t% {9 u9 F( q8 b. k
  660. //            colorTemp.SetValue(color.MakeARGB(
    $ S( x9 }' d: D
  661. //              (BYTE)(255*iColumn/iWidth),9 Y0 V% e. K- ?* [: b4 S9 O
  662. //              color.GetRed(),: a9 }! `1 G( O
  663. //              color.GetGreen(),
    : b! z6 ~  ]7 ~" p+ H, W7 N4 m
  664. //              color.GetBlue()));
    5 E) Q- S, L! W  c2 }/ S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ! H8 g7 [2 c$ m* G' H2 G
  666. //          }( Y8 P! Z& |  X6 l8 A/ U: O
  667. //        }; L. q6 N. P* i% _3 q
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    " l. O$ \5 s* I
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 v2 u" z/ ?! j9 U
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    # t, J7 w- d3 O7 u; I' [1 f
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 C; t3 w' z, |  j% }$ P
  672.         for(i=0;i<240;i+=8)
    % m7 p- d9 E* [7 d0 h% V( a
  673.         {
    & c! i6 |9 q1 u: ]" S
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  d) r+ E$ o" J
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: C, E0 M, d% Z7 I- u6 _
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 z5 S/ f$ K0 Z
  677.           Sleep(33);
    0 f4 C  P. k, `7 c9 N* ~+ P- F; Z
  678.         }
    , S8 q9 F- w2 d7 W% @
  679.         Sleep(1000);3 f: m* q: ~) K9 U
  680.         for(i=240;i>0;i-=8)
    / y5 Q  \6 W' Z: _- z. }
  681.         {
    * ]' r9 }# E& l+ y4 R
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 r) d7 s' f1 C# ~% |2 H4 m
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 L' }& o1 s& f  o, Z5 _: R# e
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ `% e- A; `/ d
  685.           Sleep(33);
    4 r7 _) W  J9 _6 H; o
  686.         }3 r8 r0 q8 ?- l0 Y2 y- Y) P% A( J- ^
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    4 d1 q7 o- a$ ^* }: i
  688.         dlg->ReleaseDC(pCDC);
    ) u0 ]2 w' Q( f& ]
  689.         DeleteDC(hdctar);3 s4 m, e3 R3 G
  690.         DeleteDC(hdcsrc);, F' A" D$ V! d) q0 [$ R, g
  691.         DeleteDC(hdcorg);; P  M8 B# j! k2 f# S4 A  j8 P7 @
  692.       }
    & l+ A0 s; h# Z% B6 o% ?+ A
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);  \$ o( t' I" y9 u: N
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  n( C" N$ s/ u# {: v  S9 p6 u; J
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 c6 o, n: U. I+ P# j* g
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");. u: B& y6 o6 U- _+ L2 g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, R* P0 b, w" h7 v. `
  698.       if(!Dn.Connected())
    % n9 n+ e. Q  J8 U' H9 \
  699.       {3 Z; L+ }- t% R0 Q9 u2 R
  700.         dwTotalFiles=1;0 k. i, U3 C+ U& o- }* M3 Z
  701.         dwDownLoaded=0;$ s/ K4 V6 H& D8 V; l
  702.         bSilentStep=TRUE;
    0 r) S7 y; q% Z1 T$ O9 r
  703.         bCompressed=FALSE;
    8 j/ t/ I' x; w+ L8 ]# d$ a
  704.         strExtLocal.Empty();
    # z" {+ _$ S" }1 L: r0 C
  705.         strFullName="readme.txt";& y/ f# Q! B; }
  706.         dwProgramState=AP_CONNECT;( Y7 P7 U' Z5 H" r& h
  707.       }
    7 j; l- u* {. i0 s/ p
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ! R$ `' ?5 x* b9 ~0 P
  709.       dwStartUpSteps=2;$ u0 F$ w5 ~7 S& {7 ^
  710.       break;
    $ N/ z  U$ S/ Y7 t  w! n3 g
  711.     case 2:5 J, \% w9 z; W0 X+ {" x9 G
  712.       {
    . O, f8 Y, C; R7 g
  713.         int iEOF;
    3 j: ?0 Z4 }( f$ P2 u. C) E
  714.         FILE *fp;* ]+ d8 b1 u. W
  715.         char szString[512];* }7 }- ~9 S5 a% J
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    . e2 Z0 q  }& W, l( ]7 j2 L
  717.         if(fp)9 z% G- l+ _4 t, m5 ^$ B0 H
  718.         {
    0 d# m$ g" R6 {$ ]+ x6 C
  719.           do
    * Y) j2 z2 r9 X" b* z0 o2 M% k; h( u
  720.           {# ~8 N( W. w* u$ t
  721.             iEOF=fscanf(fp,"%s",szString);
    * W, [  f- U9 y, d; b/ A
  722.             if(strlen(szString))+ O  q4 }* ?& ~4 ]7 [! S4 @
  723.             {$ P5 W; `) n1 s* i, ~
  724.               if(bFirstChar)! x6 Q; p7 C# e6 c% \$ F/ g
  725.               {+ U& T: i0 N4 \5 l4 ^# {1 [
  726.                 bFirstChar=FALSE;
    . O- ]) |" P) f/ o% S6 t
  727.                 bConnectIsBig5=FALSE;) G5 g) l6 Y( i! l+ }3 T
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;! p) n; v- J7 m
  729.               }) I" q, @0 q* y, b2 f
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));! }& J* @) J) |, F5 K! v. k
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    9 w6 l- A4 K" N5 s: Z6 n" r
  732.               dlg->m_ListText.AddString(szString);. f8 R5 s/ X& M! ]
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! W3 r1 Y9 j" Y' c
  734.               *szString=0;
    / {0 L5 f+ h( s7 B9 D
  735.             }0 h* s  y' D+ F# ]
  736.           } while(iEOF!=EOF);, {3 Q% d! r8 [9 C; l0 G1 G2 F
  737.           fclose(fp);
    ) l' ~% K& Z. P
  738.           unlink(".\\DownLoad\\readme.txt");% G- M: c5 v/ {/ v
  739.           dwStartUpSteps=3;
    1 _# p7 L: A- `6 H6 x
  740.         }6 L/ }  u! \5 X3 T. @. _# |
  741.       }$ \8 J" K; x3 l! R, d2 O
  742.       break;0 _: V) s! U: ?; N. V1 }! k' A1 a
  743.     case 3:+ j9 m: \+ i! A8 \4 y  h( X$ r+ Q6 Q5 L
  744.       if(!Dn.Connected())5 W; D. n! i+ @9 z8 W" x
  745.       {
    * R9 r% l  u  G' K
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    4 g- t3 ~) s% b  B/ I7 U. k
  747.         dwTotalFiles=1;
    2 ?( r8 G5 _% _: u0 p
  748.         dwDownLoaded=0;
    $ q1 `8 T6 X4 F/ l# w
  749.         bSilentStep=TRUE;/ A4 X6 _# d, D6 o# R% y
  750.         bCompressed=FALSE;
    - W7 Z8 Y- V: Q2 h0 b4 d- O
  751.         strExtLocal.Empty();# u+ o' N/ ?0 f* W
  752.         strFullName="checkversion.txt";
    , s; E9 \7 A2 k1 F6 ?& I4 o4 m
  753.         dwProgramState=AP_CONNECT;' A7 s5 y& ~: ]- w# R# S
  754.       }
    0 k  |' e3 g: G' Q' @+ D; P
  755.       dwStartUpSteps=4;
    4 r$ n* f& j# A9 n4 e; H5 a% c
  756.       break;) I) ?3 L" n' T% E3 ?. h
  757.     case 4:/ k/ K5 Q# c/ l8 r
  758.       {- }+ D' Y) h+ B& I7 H6 _2 l  e3 _
  759.         FILE *fp;8 h4 s( I2 \, F/ [! e, m( W7 D
  760.         char szString1[128];
    : {: S  N$ Y# B% ^  s1 Q
  761.         char szString2[128];! s$ f, P5 _% L+ F
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");+ m7 u5 _% m$ J1 |/ o7 Q# W2 k* q
  763.         if(fp)1 K: {% i- @( o
  764.         {2 O) V: \# a% k
  765.           fscanf(fp,"%s",szString1);
    ; j+ s- a0 N: Y: D' ~
  766.           fclose(fp);
    , M; {- y% o2 K) B3 c/ X8 K9 D0 n
  767.           fCheckVersion=atof(szString1);
    ; W3 ?; p- d8 u1 v3 r
  768.           fp=fopen(".\\checkversion.dat","r");8 b) I8 R: O8 A% X
  769.           if(fp)
    , A+ ~; n8 H( e2 d. s+ t
  770.           {. Z5 c! p- O2 m) ~
  771.             fscanf(fp,"%s",szString2);
    0 J; @  P, H, }1 w
  772.             fclose(fp);5 U+ [  p. I  R1 e# }. _6 h8 y$ h
  773.             if(atof(szString1)!=atof(szString2))8 R  N$ a, ~" l
  774.             {7 G) Q3 g! E, c/ d% v& @. w
  775.               if(!Dn.Connected())
    $ t4 n0 k# I1 e8 [
  776.               {
    3 s" N3 \' a% L5 d" d( B9 _
  777.                 bFirstUpdate=TRUE;; D' j8 _2 z: x+ K/ @) t8 i9 q
  778.                 dwTotalFiles=1;
    7 ^0 c$ J) e8 K* L/ {
  779.                 dwDownLoaded=0;
    0 Y; e" M! c  N% ^3 }2 h
  780.                 bSilentStep=FALSE;0 I9 c" H* J4 }' v) s' u
  781.                 bCompressed=TRUE;* Z: Q1 ^9 @8 w$ T
  782.                 strExtLocal=".\\DownLoad\";! I1 m" ?0 T+ T8 X9 r
  783.                 strFullName="update.txt";& s: z" m; m" L* O. _' \
  784.                 dwProgramState=AP_CONNECT;
    4 U0 j3 D/ O& b6 n3 k8 @8 `9 |
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + [3 q3 k, o! t: W1 d  @3 A5 {
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " M3 n. f) F; u; {9 v. Z* d+ d
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , c1 L1 O- H2 f" W0 S
  788. , M' B5 m' t0 Q0 v+ }! O# r* h
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # r0 x- F, L, o2 V* @; d
  790.                 unlink(".\\DownLoad\\checkversion.txt");2 `. X' P; @2 X& f  K
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    " f& a) _7 A7 I  x
  792.                 {; N( H. q5 |4 E( u0 f2 l2 j
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 I  W, D, L6 ~
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    - H! p1 P9 O% _, W  r3 a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    & P+ Z+ X4 @4 I& J  D; ^. `! Y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 K( B! r0 }  |9 H
  797. 6 R& h6 u; T" e6 r5 L3 f( w
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 D# l' j3 J2 e+ H
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- H9 C8 @- ^% d: R1 o
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    # u0 V' ~: N! U' E6 r, N; d3 Q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. e+ m- {* D- C8 M
  802.                 }
    ! z$ N* x6 \- E8 W
  803.                 dwStartUpSteps=5;7 P+ d7 _. n' Q! c- z* H: E; E
  804.               }
    0 w5 l' Q6 b. l7 {6 T2 o* m* p
  805.             }( H2 x" I. n) S( J/ n
  806.             else7 }* _1 o, l5 r1 e
  807.             {/ L2 L. K" `' i1 N
  808.               unlink(".\\DownLoad\\checkversion.txt");" @2 ?% X9 i: D; n$ j  J
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 _: U( f8 ~. i; j( Z) j& {
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    8 y6 K3 W7 v( F0 P1 O/ Y+ n
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    # z$ z0 F5 |8 O5 x7 f' M
  812. 8 I7 e8 Q; x% o9 Y7 v+ }( y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% \( L$ s: ?$ W8 M
  814.               dwStartUpSteps=99;
    - [+ p  Z& t4 S. ^5 [. K! k4 f9 Q3 ~
  815.               bFinishUpdated=TRUE;& N0 p# e' l: e$ l) L3 f$ g
  816.               bCanUpdate=TRUE;& U. L+ p% n9 }6 u$ ?: c- k
  817.             }; u. R* Q' }4 Y6 T2 Y7 x
  818.           }
    ! ^5 P, ~, l9 M
  819.           else# X0 I0 _% H2 ^8 E* v+ e1 `4 T4 d2 v2 N
  820.           {. J9 _4 S1 h% G! A$ D
  821.             if(!Dn.Connected())
    " I0 U$ v- A# d0 \. }3 H
  822.             {
    * ]0 |3 v% G! h( I7 @' h/ I
  823.               bFirstUpdate=TRUE;# Z4 v, y+ N: t, g7 J
  824.               dwTotalFiles=1;9 `4 M# W& X! v7 j* ]# X5 a9 D: f# C
  825.               dwDownLoaded=0;/ o9 {8 X( ?" M7 v
  826.               bSilentStep=FALSE;
    5 b& O/ b4 S8 z  T% f8 i
  827.               bCompressed=TRUE;: z4 [1 i: e) n+ Z1 }# v
  828.               strExtLocal=".\\DownLoad\";) h) O/ D* \- v. i
  829.               strFullName="update.txt";2 H* a1 }" Q) O3 R
  830.               dwProgramState=AP_CONNECT;, I1 P5 Q4 L; S( O" q7 q. ~
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 n$ S( x5 }. m" ^4 ^
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 y( Y; {% ~5 F2 ^
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 L& W/ v1 F# J. Y9 L5 |+ L
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# L" g2 J7 e) A! R7 C8 J
  835.               unlink(".\\DownLoad\\checkversion.txt");& b* s% s* F; Z# R
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    2 P: Q/ H+ D2 ~9 t
  837.               {
      G( T  f) S) L( J( B
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    : E; z6 J# j  O
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");' r" y0 g) X* V2 \+ ]% h6 y3 u
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    0 D) Z6 n# h8 Y- e, G0 }7 @! m0 `
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 q+ E; J% V9 m: P6 l0 o
  842.                 " w* k$ l/ G5 K
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # \+ p+ w3 t* B1 }9 a9 s/ m
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");9 F$ ~4 A* j, H4 x/ X  p" z* g9 _) J
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");; t: h# ]. s; u1 w+ N/ F
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & D% z% {' `, s& Y
  847.               }+ O0 U1 V$ ^8 @/ P# m
  848.               dwStartUpSteps=5;0 i+ g3 t, [/ _$ W
  849.             }7 y  \6 N: Y! i$ o2 V! a& w* c  ?7 z
  850.           }
    + h( c/ F! |; W" T/ r% X
  851.         }
    * e/ H2 X* u. t3 q& H3 l
  852.         else) a7 l2 `$ U8 ]. L
  853.         {
    + g6 ~9 N) C4 R# v! v. c4 I; c
  854.           dwStartUpSteps=3;
    - H, e. I2 k0 f" B7 F. o1 i8 r5 G
  855.         }
    / z) B$ e/ n# E8 d4 t% Q: g. k  B
  856.       }
    7 u7 i5 ~! j2 I9 P
  857.       break;# ~! T+ t+ F9 r  A6 Q0 _5 E7 h
  858.     case 5:
    # B0 M3 G. P9 ?+ x8 ^, D2 T6 t
  859.       {
    6 q! Y5 b  j( ~9 b% X3 Z; L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    1 Y) q9 M0 p6 x7 Q5 a7 n  l4 K" Y/ M
  861.         {
    ; T( H8 c8 t8 \" }* x
  862.           int opt_overwrite=1;
    ( d1 \* {. S+ @: T# J0 V" c: E+ E
  863.           int opt_do_extract_withoutpath=0;
    $ f9 z. O* N  N+ R) v3 O: t. V& X7 D
  864.           unzFile uf=NULL;" Y+ _/ }% I" Q' `! \7 n( l4 q0 l- q

  865. 3 F8 @5 s7 k* z. i
  866.           uf=unzOpen("Wsa.zip");* J8 r. P6 o# s. T6 M* E
  867.           if(uf)% a( I( g! T* I: f& r8 n8 a) n
  868.           {
    * \9 B$ s! F# q; I$ ~  P' s
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    # W1 s6 ^# |  E' J) b2 ~: l
  870.             unzClose(uf);
    6 F3 X5 L5 J: e- H: P+ O
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    + L& q/ N* T' A: g# N; w
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");- g$ t. P4 i+ j! c# U, {6 _) y8 z* d- _
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");7 P5 S+ t$ M1 K% A* q
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) H2 m. P- W1 J( g* Z  W
  875.           }
    9 i" ?4 E7 t8 X+ L) i
  876.           DeleteFile("Wsa.zip" );
    % v& A  I6 t- [
  877.         }
    ( i4 p! a* ]! x( B3 e
  878. . k- Y' W8 O% r' {* O6 Z1 D
  879.         if(CheckLocalVersion()), a# @, p( G( N" m, _0 ~; N, n
  880.         {
    $ E' N) b6 O9 K" A0 O
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");! M. x5 F* L4 h) a) {5 w5 H3 O7 M
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    / q) W7 X  X# T) q+ [% M1 o) m5 x
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");, M+ s& d  J. a
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : n% a8 `: I! p( i5 t* G
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);: x( W, P$ A6 D, S. ?
  886.           dwStartUpSteps=99;
    ( o9 c$ p) |# ?/ F
  887.         }
    , ?1 {( F! p1 Z( p% O( ]4 ]0 U: \& X
  888.         else- `- {, g: Z4 d5 s  Z7 O# v- X9 w
  889.         {9 q% o7 p$ f, n
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / A3 m! K% P; {$ @  f
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");' m" \& f3 N6 e0 d0 B5 h& j5 ?" V6 K' y
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");( G+ |+ f6 ~, n% Y& g0 `# M

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

* L1 C  A) ]1 U% T/ D2 L6 Z( h

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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