CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
& |) K. [# r2 P8 Q% Q# @5 B
  1. / RevApp.cpp : Defines the class behaviors for the application.0 ^1 u, D" g7 y: _6 K0 X: K* T
  2. //% i4 v/ r: v9 L+ X  p3 E

  3.   g: H$ a1 {" `3 M
  4. #include "stdafx.h"
    8 v9 S5 \4 V6 k: Y: L3 r

  5. % f/ \' M) Z7 F( H! n; i. R& e
  6. //#define UNICODE+ Q9 n' u; c; d  }
  7. //#include <gdiplus.h>8 U  }' p: }; n2 m& E% b/ Z/ i7 ^. J
  8. //using namespace Gdiplus;
    3 K5 E3 b' j8 {" N7 W! K; {* a$ f

  9. " M+ r/ ?' I" A* J
  10. #include "RevApp.h"6 q+ X% L, a5 C1 F! \/ ~
  11. #include "RevAppDlg.h"* {" m; p4 y/ y5 I

  12. ; J' v% f# V! r8 }1 j) k  H( {
  13. #pragma warning(disable:4786)
    7 r: j- `; B5 D8 w! I' P* p
  14. #include <map>" Y5 {9 X4 y3 A( n2 W6 U) Y
  15. #include <list>5 v  o! Y* P) e: v7 S
  16. #include <direct.h>& U8 v( y* w) m4 V3 t% [( M

  17. * S; K; g+ z' L7 l) P0 u+ c
  18. #ifdef _DEBUG
    0 }2 ?$ J0 d9 s0 h! H- |* d3 l! ]
  19. #define new DEBUG_NEW
    # q8 s, G8 e7 Y! w: z7 G& K6 ~
  20. #undef THIS_FILE. ?( J! ~" P0 o8 M8 T! J
  21. static char THIS_FILE[] = __FILE__;% u. n  k( P% w8 {
  22. #endif8 u0 e" M+ r# f& T. X, z4 N
  23. #include "SkinResDef.h"
    7 r) L. c6 e( |8 X( ^8 ]" Q
  24. #include "ChangeBG.h"; X& G# R5 f- A. g4 ?
  25. #include "AFXINET.H"
    1 R4 f9 D7 ?( n) _5 }4 r6 Y1 ?5 o

  26. * w0 Q- m  J' K- \9 s- _* e
  27. #define TRADITIONAL_CHINESE 0
    & G4 B8 @& s3 f8 @. T+ Q
  28. #define SIMPLIFY_CHINESE 1
    . [' U; ^% k" u5 A  r6 q1 c
  29. #define ENGLISH 2' l- l7 q2 \% @! k
  30. int m_iLanguage = ENGLISH;
    $ h2 Y7 n& n) s# ?/ G
  31. /////////////////////////////////////////////////////////////////////////////
    8 S( Q$ F  J1 Q5 m) J. [" N8 B
  32. // CRevAppApp" Z) r+ F. c" q7 i( Q; x. ]/ ^

  33. ' L% s6 s% l, {% f" Q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)) ^6 Y" T# |5 I- C
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    9 u+ S& {/ s* b3 e# t, R
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.3 ?$ |  v- C" z4 h+ a% T7 l) o) o
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    9 ~5 Y3 I: r2 ?5 }; L/ D& `" j" ^
  38.         //}}AFX_MSG) |' y2 ]% ?" ~5 T  p' G
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    0 ?8 a9 G6 B8 C# N0 R* {
  40. END_MESSAGE_MAP()
    ! s2 z6 r+ U( w3 J  V  u

  41. 4 {$ X7 M# O  N+ a* T0 x
  42. /////////////////////////////////////////////////////////////////////////////
    7 X) P( }: ~' S) v8 |; \# k
  43. // CRevAppApp construction
    8 n& g  ?5 k5 s
  44. + n& _6 T+ }$ S  G  S! `. n
  45. CRevAppApp::CRevAppApp()
    1 r, K( R: j' x3 {0 z/ s
  46. {; h9 f; _# O1 ?5 F
  47.         // TODO: add construction code here,
    ( q% A5 w! L1 h0 d! B/ w- E. H7 N
  48.         // Place all significant initialization in InitInstance  O2 L; W  C0 n" X7 d
  49.   bDisplayIsBig5=FALSE;& \+ a! Z. V( f- B, I. O" s: [; L
  50.   bRestartUpdater=FALSE;$ ~5 z4 @; ?1 X+ x: E0 U
  51.   bFinishUpdated=FALSE;. ~3 a+ u( z0 h- ^+ ~
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ! N) @$ B% Y. R: J: i" z
  53.   InitChangeDataBig52GBKS();
    - w( F: E6 z& d" m5 ~# c
  54.   InitChangeDataGBKS2Big5();
    , H. ]  z  M* V5 t' z( E) q
  55.         //
    / T2 C0 d* }' V$ _$ f
  56.         bClickRunExe = FALSE;& }% Z. C) x' L; \
  57.         //4 R9 y% b2 e5 P) \$ m
  58. }
    ( V& u! K% l3 {  S8 V* ^
  59. % p6 Q7 L2 @  n6 H+ l
  60. CRevAppApp::~CRevAppApp()8 y$ Z: X9 c" A( y4 N% d  b$ v) ~
  61. {+ o, P* d" ^  ]1 @( e/ R3 Q
  62.         // TODO: add construction code here,
    + ]  a% a4 L& F0 v3 K( K$ c; d, F( m
  63.         // Place all significant initialization in InitInstance( @+ G& _' Q# ~  Y! Y4 f. |
  64.   EndChangeData();
    # d, d  p- D6 {) B; r% C0 g: W
  65. }3 M1 D  B  ^: q0 H

  66. + H2 X) i& O( p2 H1 [$ }$ X& B
  67. /////////////////////////////////////////////////////////////////////////////$ L- u: |5 m0 q9 M5 w
  68. // The one and only CRevAppApp object
    , X: n# n/ v3 _1 r7 L! ~/ I

  69.   i7 a; }- w9 ~
  70. CRevAppApp theApp;( j( `# q' {6 B2 {
  71. 6 M5 b+ Y8 S6 A) q; r0 B
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)% ]( \2 T- |' Y8 j8 N2 v! z
  73. {1 ~1 \* [& p6 q& \! M; H' _2 _
  74.   int iEOF=0;
    4 |  d' F' ]- G* i; Y( ?
  75.   char szTempName[MAX_PATH];4 k7 s0 j* Q1 ^. t: U
  76.   *szFileName=0;
    1 x! Z, y5 l/ r0 H' v. T' m
  77.   iEOF=fscanf(fp,"%s",szTempName);- z% `9 ]) `8 ~* `8 i" D! k
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    + T6 ?8 Q9 h# N# V+ u' l
  79.   {
    * h" S: I8 J7 `( l2 z: n0 h
  80.     strcpy(szFileName,&szTempName[1]);8 W$ }5 Y! _, e4 C" r. S. K
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    7 Q2 m- r1 C1 i2 `" j4 Z! r
  82.     {3 x; x( c- k5 ?( w+ M
  83.       iEOF=fscanf(fp,"%s",szTempName);! U) J7 V) }7 I+ b( e6 m
  84.       strcat(szFileName," ");& V1 b2 J6 N) H0 i
  85.       strcat(szFileName,szTempName);2 p9 k+ X6 k' r( V
  86.     }+ B" z9 ^& L! z5 A2 \. l! R
  87.     if(strlen(szFileName)>=1)
    ; `+ I9 f* y3 [  U; R* x
  88.     {2 n9 |# b0 Z. t3 W, F
  89.       szFileName[strlen(szFileName)-1]=0;
    ! X! c: ^' k3 y7 H
  90.     }1 n1 t8 X1 q% s2 }7 v& x" d
  91.   }4 q! [/ q& D& d: d- ^
  92.   return szFileName;
    0 G; F* I: J7 j" ?: V
  93. }: T, U1 R- h& o9 `6 F
  94. ; `' u3 }6 d# F4 [6 }1 D+ ~
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ! B+ a" l: G: S* a* q% Q
  96. {) h; q( v$ r8 J% K' y1 D. p
  97.   FILE *fp;
    . F+ T1 V2 g$ x9 k/ i0 {* e' ?  S  A: Q( t
  98.   char *key=NULL;$ @' c2 Y* k1 ?5 f
  99.   char version[MAX_PATH];( S4 b* v3 M" S; @6 k* T1 S& X
  100.   LPUPDATEFILE file,olds;+ @4 j7 r! ?. p2 R  c% @+ y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & i& U6 ?# L7 z8 Y. C7 E( ]

  102. # t) r; ]6 J0 V; c, [7 v
  103.   UpdateList.clear();
    5 z& c+ R1 e! A
  104.   UpdateFile.clear();) w- I! Q7 l( j& R4 O! m' d( m3 @
  105.   if(GetFileAttributes(filename)==-1) return false;9 B2 I+ u7 s$ n" N" {
  106.   if(!(fp=fopen(filename,"r"))) return false;
    % z3 P6 c: q( V/ Q$ _$ M9 O8 C$ S* V
  107.   fscanf(fp,"%s",version);
    - R6 ?! t9 u$ v5 j
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    3 b- i) @" s8 p5 ]* x2 V
  109.   while(fscanf(fp,"%s",version)!=EOF)( ?1 T! s' f- l) p
  110.   {. G4 j* s9 O( Z  J8 C( A) O3 E% E# E
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  w) s6 V3 `! e5 z! m- ?
  112.     fscanf(fp,"%s",file->path);
    2 u: ~  ?9 e3 x
  113.     ReadFileNames(fp,file->file);
    2 Z, T9 H/ X) e( R5 ]: B
  114.     strcpy(file->full,".");4 S! T/ z; B' s- U% ?9 e
  115.     strcat(file->full,file->path);; }3 F# T1 f( ]+ f- x3 F4 x5 i  M
  116.     strcat(file->full,file->file);
    " S3 ?: e5 K( u& T6 L) f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    . `" K4 g3 S' _1 Y% n7 {
  118.     {; u8 @  r1 A) b8 o9 a8 t
  119.       file->vers=(float)atof(version);+ L0 q/ ]( c8 ?
  120.       UpdateList.push_back(file->full);
    , q( i9 F( @1 Z6 X; @) j% V$ s8 L2 c" e
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));. n$ v" {' y. U8 v
  122.     }# R8 w* ?* @& d" p* [, {
  123.     else- _5 j+ K) J+ A3 G
  124.     {
    ( v5 M5 j4 I$ u& F
  125.       olds=(*p).second;
    9 t0 w" s2 m+ _/ [3 E' C
  126.       if(olds->vers<(float)atof(version))
    % T0 u- M  O; C# L, A6 X& M
  127.       {; \6 B  u0 f  B# |) A$ A1 Y
  128.         olds->vers=(float)atof(version);
    - U9 ?1 q$ i2 h
  129.       }$ p3 p# P& e! L! O# G5 g
  130.       free(file);( J9 L, k! w+ ^/ ~, k' _
  131.     }
    , A# T) ~8 d# p* f) ]
  132.   }
    5 {# j( J& M& p; A
  133.   fclose(fp);3 n! [6 M$ l& `$ u8 E4 @
  134.   return true;
    : m9 t& o( Y% D5 n  U& q  I1 w
  135. }7 }- Y$ B' R8 `, z
  136. 2 j7 Y  q" T4 d/ Z7 j, B# u' n
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)* b' \* w$ J& d# G( j  N% e1 y
  138. {0 _& ?# W, h0 X* x
  139.   TCHAR  szFull[MAX_PATH];
    3 _4 M7 x0 m3 W- S: w9 Q- h
  140.   TCHAR *token,*inter;
    1 W- l# V. t& {# J# ?/ J" N
  141.   *szPath=0;! M6 n4 e* W% a- a" j+ |
  142.   strcpy(szFull,szFullPath);
    % Z4 Z: ~5 L; m% t+ @# u- n9 Z& w
  143.   token=strtok(szFull,"\\/");
    ; F+ J7 S" j/ v+ m( X
  144.   inter=token;$ U9 @7 p6 ~4 z% ^0 V$ `; U' I
  145.   while(token=strtok(NULL,"\\/"))
    6 M" V1 y! @7 G! {
  146.   {
    2 V7 W9 m" K$ C' J* ]
  147.     strcat(szPath,inter);
    9 W1 X( g+ m# P7 I2 B8 }4 u
  148.     strcat(szPath,"\");
    ( V, y; j  k# ^  c
  149.     inter=token;7 r( q/ B4 R5 M. L; R7 b0 e
  150.   }
    3 c' b9 D% S4 B2 [7 ~( A; ]
  151.   return strlen(szPath);! \# W! _% x. ~  I
  152. }# x9 s4 ~  a; X/ {
  153. 4 E4 `3 p) d2 V, B% U7 T" Q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    " [8 b. e5 E4 o0 d/ H; S5 L7 l
  155. {
    2 v" j' G/ N. Z+ x0 @8 Y6 j
  156.   DWORD attrib=GetFileAttributes(Target);% Q$ T% D, @4 d( ^3 w
  157.   if(attrib!=-1)  s; z( Z" m  d6 Q* }" m) X
  158.   {
    , P/ }/ E# E; B* R
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    / o9 f$ }" `' q( T. o- B) @
  160.     {/ Q4 P; e/ A+ {/ R$ n9 F
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);! A: I  t1 `% n$ i" P& M  q
  162.       SetFileAttributes(Target,attrib);9 \$ d7 G3 W' n5 K
  163.     }
    % _; t1 A8 A0 r" v* V# g9 E
  164.   }0 E" g8 u2 h0 l# ?
  165.   CopyFile(Source,Target,Erase);
    $ k, J, G, B( {$ Q& e3 l2 c
  166. }
    1 Y, C: o* v; ~- G

  167. & [  b! R/ e' }# I4 ^
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)* ^7 j  n# k' W% {0 l) C
  169. {$ c  E: ?" H- V% X* }# Q
  170.      FILE *fp;. Z- t5 Z" {: x
  171.      char  szBuffer[8192];
    $ F% k6 M# i: T
  172.   va_list  argptr;  A; Q6 O1 Z; c6 X' |, P
  173. * N  `* G1 [6 k5 S- r
  174.         va_start(argptr,message);
    ! m! F( q2 A- k* ~) Y  t
  175.         vsprintf(szBuffer,message,argptr);
    $ Q0 b- U# E0 G; g- K
  176.         va_end(argptr);
    # {& ?/ b% Q7 ]& D$ i
  177.   fp=fopen(FileName,"a");- H& d" o* [4 ^! L
  178.   if(fp)2 A; [' v  N$ @* z  {, e; B
  179.   {: a3 O( G3 o$ O* H+ z
  180.     fprintf(fp,szBuffer);
    + p  L, l3 ?! P! ~+ F; H- ]
  181.     fclose(fp);
    & ]3 w# F' m0 s* z8 \
  182.           _flushall();& l7 O5 |5 P2 U- m  Q+ i
  183.   }
    5 E8 e, ]6 j. F8 d
  184. }1 m0 v# f$ o6 L! S7 K9 ^
  185. 2 x! |' \1 W3 T1 {4 M) d9 W5 V
  186. BOOL CRevAppApp::Fclearf(char *FileName)) y0 z. _: T, V# T" w  v* L
  187. {8 G7 j. k; D, p  y; g  `# y
  188.      FILE *fp;
    ; q# E* o; b2 o: W1 |3 H
  189.     DWORD  attrib;
    ) ?; h; L7 s& o/ `1 S/ M+ `
  190.   attrib=GetFileAttributes(FileName);
    , s/ B( ~+ z. j. R9 D, q2 V
  191.   if(attrib!=-1)
    $ J7 W9 a% S9 }) O- `
  192.   {
    $ o  O# c4 x5 k0 p
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    7 V) f' X: J% o/ M4 t) O: M' N
  194.     if(!SetFileAttributes(FileName,attrib))4 f2 j) ?# y: i: h( N& M# y, L
  195.     {& V/ l& u& h' {5 G
  196.       return FALSE;( O9 z1 w; P" L" @5 p. q& r2 ]( ~' H
  197.     }
    ' p' l, e4 b% k/ n- R) c/ b. q0 ~
  198.   }/ T0 d! B9 D7 @7 Y3 g/ C6 l) L, O
  199.   fp=fopen(FileName,"wb");
    ) F) ^" ?3 C5 w5 d/ C! n4 N! K
  200.   if(fp), y6 o! I% k5 k0 s0 I. F
  201.   {
    , Q' K6 o  Q, K% c  k9 J
  202.     fclose(fp);# X; e- m6 V. |
  203.   }
    ; K$ K* \  C" d  M! q5 b+ I
  204.   return TRUE;
    # M7 E, c' Y' g: \6 R; y& {6 S
  205. }
      f2 x8 _2 Q; {' U# g: k  u9 C% X

  206. & f1 H+ C6 H' l% }/ }5 x
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    $ E, P. U9 Z, Y7 D
  208. {" a+ m& g+ J: J4 T; U0 C% A
  209.   char filename[MAX_PATH];
    , k! v/ D3 @/ D- W
  210.   LPUPDATEFILE file,olds;* E6 ~- b+ S9 }) k! o* U: Y. F
  211.   std::map<int,CString>::iterator i;+ V3 P# ~; m! c2 a
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! L* t6 p% k$ U, }- M
  213.   std::list<CString>::iterator l;+ _2 |& T7 _3 t# J

  214. ) {( z9 P( N9 @' J- @& Z: j2 r
  215.   if(bFirstUpdate)
    " l. i3 e& z0 X+ [  R
  216.   {
    , G6 @; m; M4 E! c: i! c
  217.     dwCurrFile=0;
    8 b, M, D# b6 L, i$ i6 R) H
  218.     bFirstUpdate=FALSE;  c8 J! d3 L; G# D8 D
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( G% I: T9 X9 R/ F* J6 e
  220.     {
    - z+ }, z$ s* q1 j* f# f4 p
  221.       dwTotalFiles=UpdateLocal.size();
    / p6 o  }2 M* g1 v* c) q
  222.       dwDownLoaded=0;
    0 R4 p6 R. t2 ~# k1 n
  223.       bSilentStep=FALSE;/ f. r3 K& M. p. W
  224.       bCompressed=TRUE;
    2 B  Z# s& i& c2 {% B5 T8 _( r
  225.       strExtLocal.Empty();
    5 s1 \& `3 h; W6 ]7 ^8 N9 u# q2 I
  226.       strFullName=(*i).second;
    ' J/ m- R9 Y" Z1 u
  227.       dwProgramState=AP_CONNECT;5 @# k/ k4 E3 d4 b( J/ \
  228.       return TRUE;  L+ L  T2 j9 `, O% H& N8 _. I
  229.     }
    6 N; D- ?1 ^1 W2 i
  230.   }- q% k) ^, R$ ^% e3 V- N* `
  231.   else if(bRestartUpdater==FALSE)
    ' K# O# V3 |; y3 Y( p! c4 W
  232.   {4 J4 c! e3 V6 e3 z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    3 ~& R, r$ i) H  S! V* \4 a$ a
  234.     {" A9 l( J# e* P* B
  235.       file=(*p).second;( s! G# ]* p8 G+ R+ F2 W8 V: ^0 D
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    1 C, l8 S* I: U  @
  237.       {
    ( H- y2 ]' d6 O0 r2 o
  238.         olds=(*p).second;- C$ w2 A$ J, a- L- B' O9 \% K
  239.         olds->vers=file->vers;+ W; h. S1 g' `; T+ V, n8 K
  240.       }9 b+ z: g% e% m, u  w
  241.       else
    7 n9 w! o1 Q$ \' v
  242.       {
    ) }9 _/ l; g& E4 L$ z9 a  B0 m
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! J# W7 r& u, H1 g' s9 G
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    4 w& ~3 Y5 R3 y
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    , W# h, [  O7 K7 F
  246.       }  g9 X& e' E8 S+ \: _" [
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");/ y  F7 D$ K& y
  248.       sprintf(filename,"(%s)",file->file);5 o: J! @% W3 }
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: G& p4 K. y3 z, w  \* Q* V3 i
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    8 s8 w* s9 [& `; y
  251.     }8 m( u6 z' m* ~0 l' F& [
  252.     dwCurrFile++;7 f5 Y0 ]& @, U
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())2 a8 E4 E2 J/ N% N& ?5 ]+ ?
  254.     {+ O" {) K7 A5 i) \$ {! g* z: `3 X
  255.       bSilentStep=FALSE;
    . d1 U3 w1 ^3 W
  256.       bCompressed=TRUE;. N& I) y' [: Z3 B: D5 ?
  257.       strExtLocal.Empty();3 F0 w/ U9 I% D6 K; U- O
  258.       strFullName=(*i).second;& Z4 F( d+ x/ f  f7 M4 y
  259.       dwProgramState=AP_CONNECT;
    $ \. Q  s4 q! _) k+ [$ g' J
  260.       return TRUE;
    # ^* |6 H3 T4 q) v
  261.     }; B9 ]: a- ]' z' B
  262.     if(!bRestartUpdater)
    , O8 b, r3 E& j4 m, @0 ~
  263.     {
    ! J2 w) a2 [6 _) _0 c
  264.       int iCurrSize,iFileSize;
    9 u, M/ E* E$ Y* ]
  265.       iCurrSize=0;( m  K% ~; M: h
  266.       iFileSize=UpdateList2.size();7 p0 G0 k# y- R
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    3 W3 B% V9 @6 W) ^  B  n0 V% b& x
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    + F9 q" C& h. l1 P8 X* g- u, h9 M
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    . o* U' n; m8 c
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 R7 M, p3 e$ K( ~' p7 Y3 m
  271.       Fclearf(".\\update.dat");0 N- K: q9 s' T3 X- N$ s! \
  272.       Fprintf(".\\update.dat","Bloodyf\n");  ]- U6 Y- y; H3 T( }5 r
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++); _3 R5 G$ y7 a' B" T6 K" C: n. z
  274.       {
    * R3 b7 g4 L7 b/ @' q; F+ J
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    - G2 `& P3 n6 y7 E) }/ ?& E! O
  276.         {5 @3 a+ q+ g' i" }: Q
  277.           file=(*p).second;  E8 V' X1 N1 t5 z8 g& Z% t8 X
  278.           sprintf(filename,"(%s)",file->file);; T5 g$ S8 U- [- Q* U% s
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 r0 _% s4 ~! N9 t" z- W
  280.           iCurrSize++;. b6 p9 [7 U  w: `* y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));- L2 J9 q# m5 J+ S
  282.         }
    * R1 h& [" I1 ^% p
  283.       }
    6 x: ?  D8 m! D
  284.       unlink(".\\update.txt");
    7 k% x' {8 ]5 ]" r2 k$ T& g8 X
  285.       unlink(".\\update.tmp");$ y* c9 \7 x/ x+ z7 n+ P7 O
  286.       Fclearf(".\\checkversion.dat");
    $ s/ D! z. \- n( \  u& R
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    $ ^4 e# ~: ]) k, C( N6 b
  288.       if(UpdateLocal.size())8 ~: _  ?: N1 i  k: ]
  289.       {+ Z) \: n# r2 b5 p4 l  K
  290.         UpdateLocal.clear();8 d7 S1 S, w; O( b! j3 S- ^
  291.       }, h$ `1 e: g& v: t: s- h
  292.       if(UpdateFile3.size())
    7 |5 A' U& _4 a; n- {7 v9 e
  293.       {2 ~+ M5 h' S* |3 K2 ^& F! f$ f
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ z9 w& d7 ^+ y: `( G% e
  295.         {
    " B, q$ N; L; _( A1 ^' D
  296.           file=(*p).second;
    * o! a4 c+ x" m9 R, F/ p# Z2 A
  297.           free(file);
    # e; K3 I/ Q" v0 |, g9 `, X! m+ x/ ^
  298.         }
    0 i3 G* B$ a7 {- V3 t2 f
  299.         UpdateFile3.clear();8 {4 o# s% |5 c# R/ N3 o, d5 [" P( i2 d
  300.         UpdateList3.clear();
      o- q$ y8 U% @# S' f9 o! T
  301.       }4 R+ B3 A3 w" F0 |# U9 }5 c2 U
  302.       if(UpdateFile2.size())4 d# f% l5 u; s0 c
  303.       {
    ' S2 S! y6 m5 J& Z" z( z! F1 p+ p
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' T& Z' t3 s+ a6 L
  305.         {7 C- G. j+ o  ]
  306.           file=(*p).second;
    6 H5 w7 U  ~9 k  M+ _% X
  307.           free(file);$ }/ }9 P% ]$ @
  308.         }3 {3 n1 {4 V: z
  309.         UpdateFile2.clear();
    2 L0 t( R- H1 w& D; \& g7 |$ Q/ w
  310.         UpdateList2.clear();
    0 K3 x0 v0 T, U9 [. Z2 a
  311.       }9 o" z% Q  O/ N9 H& u
  312.       if(UpdateFile1.size())
    0 A' x& W5 N. O
  313.       {/ P. \2 h) G+ Y1 }
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    2 A3 k5 b  ^. i1 P  a" }8 [
  315.         {
    ' T, y5 d+ n5 E4 @
  316.           file=(*p).second;  {  N% H: W& I4 H
  317.           free(file);/ k* N# h5 U; V& U# D* c- h: B/ Z
  318.         }
    ) G6 m) l# D4 Q6 ?
  319.         UpdateFile1.clear();
    1 D, P: I5 m: g& }& E  m3 [
  320.         UpdateList1.clear();
    9 F. K9 _- u6 Z% {/ X$ d% C1 g" V
  321.       }2 T6 B& y) x2 e5 f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    8 ]% g2 k- m/ i
  323.     }
    3 E+ v! k0 i$ i& E! Q- P$ c1 W
  324.   }9 |# j- ?6 h! D. j
  325.   return FALSE;/ J( i! K$ Y+ E) [: l$ m: @2 c0 T
  326. }8 r4 z( v: v+ U

  327. & \8 x9 U3 u+ f
  328. void CRevAppApp::ClearAll(void)
    ! \/ E+ H8 u2 q* m3 }# o
  329. {
    , Y% Z6 L9 _4 v0 s5 P
  330.   LPUPDATEFILE file;2 l  U/ H. [: Y# E: ]
  331.   std::map<CString,LPUPDATEFILE>::iterator p;0 p- h1 D* [4 ~- F5 Q; r) d" U

  332. 9 N; ]8 n8 [( c7 n% d9 [
  333.   if(UpdateLocal.size())) `+ _0 u) A0 h' @6 g
  334.   {
    : M* z" Q# D& p5 r% `, x
  335.     UpdateLocal.clear();
    % r4 U( j" U9 ?6 e5 X' J2 x  W
  336.   }% W+ w8 d& Y" H% H
  337.   if(UpdateFile3.size())
    $ k# s9 f5 [# P/ f7 _  Z
  338.   {
    8 K8 y& C/ c4 B, ?8 ]$ I! s% g
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 Y! b5 m9 F' T- `7 i3 Q* w
  340.     {! h0 N- X6 M0 m- H3 F/ {
  341.       file=(*p).second;
    ) J: v9 w: @3 @4 {6 I
  342.       free(file);/ x1 l& X  D" ]1 R
  343.     }
    9 Y" s6 ]1 O6 f7 I( j! K
  344.     UpdateFile3.clear();% Y. o. r" u: }/ S: S1 m/ W
  345.     UpdateList3.clear();
    8 V8 P9 {+ l6 E# P4 [
  346.   }" u+ h+ C" t8 I! t" L3 {
  347.   if(UpdateFile2.size())
    5 e! ~- j* o+ m2 F
  348.   {
    : z$ Q8 d% i$ u6 ]6 H
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 r" h, P/ m5 {$ G) y  P0 {
  350.     {
    * D% I* s3 i) }5 [& t
  351.       file=(*p).second;9 ~. ^; ?& R$ Z) Y
  352.       free(file);9 J2 W) N' n, }
  353.     }
    9 b( M9 \; n2 @( y
  354.     UpdateFile2.clear();
    : v2 E; S. u. H1 ^! f' x: o
  355.     UpdateList2.clear();2 L! r( O6 ]- v% L* g% S
  356.   }
    ' y4 U4 G$ e7 `  K8 Y6 B3 ~# X8 E
  357.   if(UpdateFile1.size())
    8 B- C" g5 {0 }% F) X3 o, W
  358.   {
    5 p0 S; B7 K. f# x' z1 j
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! O; v+ L0 D! a/ W
  360.     {
    7 t. _1 n2 W' O4 F7 r
  361.       file=(*p).second;
    3 Q# P: d7 f5 g; H  M  w  p+ T
  362.       free(file);0 `/ y2 I3 H* ~; ]% R2 _
  363.     }
    2 Z& f+ d7 e4 w" ?" C& M7 t
  364.     UpdateFile1.clear();
    + f7 @) H, G7 l1 i% O$ ~$ L5 e: G/ B
  365.     UpdateList1.clear();
    ' V( i; v' C) W2 I) l
  366.   }/ X: ?& D! ]' S0 w' f. V
  367. }  
    7 T% q7 n; w3 I; Z: D" {2 D
  368.   
    " O4 b+ N! F3 a4 r
  369. BOOL CRevAppApp::CheckLocalVersion(void)' ~* _* d  ~* v; ~9 G
  370. {
      n; L9 W: I2 ]3 Q. @
  371.   int c;
    5 k' E2 C+ i- x4 q: v7 v& U" F
  372.   LPUPDATEFILE file1,file2;7 j3 B7 e% l+ j, T% M5 ?
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;; E& I9 U/ E9 {  J) w0 a
  374.   std::list<CString>::iterator l;
    * I( E+ v' `7 n2 }; N. n8 Q

  375. $ A$ ?2 T7 H6 w3 M* s$ b3 c/ ~
  376.   UpdateLocal.clear();% P+ d2 C$ w$ {1 }
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ; g6 i: G# Z! ~5 X% b/ M
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    0 j0 D( N9 E" Q* ?  t
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);7 x* ^% z# `- }: E5 {) ?
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);2 F5 V- J% B: a8 _+ x" G2 E* l
  381.   if(UpdateFile3.size())2 R4 e' @4 N5 J: l  D+ J) w4 G- o
  382.   {! M# u' ?- P1 x
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    * t% o& O8 S- s; D
  384.     {1 h3 y8 t1 w- k2 w6 B
  385.       file2=(LPUPDATEFILE)(*i).second;! O- x! J0 |" B1 C, ~# |; d
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). S4 \, j+ ~8 J2 D. {0 I  g
  387.       {
    5 J: D/ P  N. X8 X
  388.         file1=(LPUPDATEFILE)(*p).second;0 z( ]3 x7 {- Y* ^
  389.         file1->vers=file2->vers;" A1 Z$ p- U7 z6 c% J: M8 O
  390.       }; T6 b7 s3 \. |* t+ X3 F* ?- h4 n. l
  391.       else# h+ B: \) q7 w4 Y* x" G" H7 H' l, M
  392.       {
    ! h5 G7 x  H: r4 I' T4 w- Z
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 y6 ^) N+ e5 G3 m- p; J& g
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    & o6 ]. g. V+ _9 @4 U7 I
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));8 w  T: n, _" l5 e
  396.       }
    ' M( L- w. {9 U& Y6 u' t
  397.     }
    5 b; X' m0 w" r  y1 H+ G
  398.   }. o- O$ \: s! A- b
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)5 V6 n' t  @: N  b' R7 q
  400.   {
    7 k6 |: s8 A& h( u
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()): s' m( A' N, `& M; [$ ^
  402.     {6 A* f4 L/ ^* _, W- b/ m' l) O
  403.       file2=(LPUPDATEFILE)(*i).second;2 M% Y2 s" A8 \; J' z3 O  ]. f
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 f5 c6 B3 Z8 x% u0 m% N  ?
  405.       {
    8 F1 p1 |% w1 R2 o; s7 H$ J. `! }4 l
  406.         file1=(LPUPDATEFILE)(*p).second;9 _+ o% |  E9 I8 l6 K4 I* y2 D
  407.         if(file1->vers!=file2->vers); ?) j4 D7 \. v1 ]/ d
  408.         {! u- |1 T7 B6 `- g, n, n& k
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # O  V' C$ \# B' C+ E; }, o9 B
  410.           c++;) F  A) j) V% L/ ^2 p
  411.         }/ V6 C4 g$ l6 C7 F: s& R9 w% L
  412.       }
    8 H+ E# \! O, r6 H; B- t3 t
  413.       else
    9 i! ?, w, l# M4 j* {' m( C
  414.       {! T; T+ C' m/ O9 y  W
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / t% x$ q& k& D. r! y9 E' Y
  416.         c++;- s+ K/ d- k( @+ n+ W0 c
  417.       }8 \. b# M3 o. _$ E- ^% n! Q
  418.     }
    9 }$ W% W$ d. b& c8 G  h6 E
  419.   }5 v1 ]8 A/ ^8 e; C4 m4 h
  420.   unlink(".\\DownLoad\\update.txt");
    2 q. s6 c5 v) l1 J7 Y
  421.   if(UpdateLocal.size()) return TRUE;
    2 F7 ]/ w2 F0 t! k
  422.   else                   return FALSE;: F9 U. O3 [& W& h6 O' j4 |
  423. }, M8 C6 R0 B6 A8 A: l

  424. 2 k, B' o+ t( o
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/": Q( E5 k8 l& M) Y+ N
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"5 ?7 [* ]6 l+ r* I; E/ n

  427. " _" o' j- q0 E# g

  428. 0 V. l3 P( }( k2 }/ T% g
  429. + v- `; H9 C7 o  s4 r
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    - B. d6 |  l9 E6 ]
  431. {3 n9 i/ c# e  ~5 b8 W+ V
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;# n9 \- L8 c6 s5 H) [; w; q/ B
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), }- x7 t* o' ?- X1 q: n
  434.   {$ f  q) `, j& \, n
  435.     char szLanguage[50];: J0 M+ {0 F7 X. j2 w
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& p4 i: A: o* e! {
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 O4 h2 X2 M8 Z& D( u& ^" R
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' o; }8 A; \6 n" F5 J& ]
  439.     else                                   m_iLanguage=ENGLISH;
    $ n$ o( G- m7 i* p* P2 K
  440.     char szRegister[100];4 S. ]" J* e' S3 _2 n
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! T7 H) O: y  ]" F# n; G6 N8 K
  442.     strRegsName=szRegister;
    # @+ g4 K4 L3 d. M; q+ r
  443.     char szPatchURL[100];
    # z# m3 ]0 P% h% n0 c
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; Q1 h3 g: i" f% O1 H
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    % |0 F: l+ J) S8 D. B- t
  446.   }+ n7 c% B/ E; r( z0 R. C5 ]. G
  447.   else3 c% `+ Y0 Q+ l$ o/ R
  448.   {
    ! J9 g1 u+ x; @
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% s3 Z4 g9 X8 l3 |! \+ B
  450.     strRegsName=DEFAULT_REG_URL;6 Q+ G' i7 e" Q" b. ~7 p. l( l
  451.   }* f" K' x# Y: E8 Y2 u
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    . H% I3 F* M: W( W4 b: u
  453.   {
    & d0 f4 s  k" c
  454.     char szIP[50];
    ; @- x2 O3 Z1 [% l+ s. y) K
  455.     char szDIR[300];
    . t" p& a9 X2 ]# m8 M
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))  G8 Y9 N5 Y' u! U/ }# \: E1 G
  457.     {
    9 \/ p8 ?0 g. l! _
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");9 u+ N  d( y- ?5 ~8 @  u
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");" V+ s( y2 m9 j+ ?
  460.       strHostName=szIP;4 Q7 a1 I" n9 R9 |% ]  o7 B
  461.       strHostPath.Format("/%s",szDIR);
    ) e! N% g: C4 J  D/ Y
  462.     }1 H3 |6 T0 X* c3 Q% u% v; r, V
  463.     else2 ?) M2 Z) f* ]4 x
  464.     {
    4 v  S& r6 A" G. M7 z5 ]; B
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - z: {  j+ d; @7 v8 ?0 T6 z
  466.       {
    , y3 n  I8 o# @- P
  467.         char szLanguage[50];/ \( K. z9 F2 W. F/ B1 C
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 O5 ^8 _' s; Q" E3 ^
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
      z$ V- }# ^! ]$ q6 c5 q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & H+ C/ `) G8 q" h# v3 j8 Z2 U
  471.         else                                   m_iLanguage=ENGLISH;
    % r+ ]. f0 [# T6 N( }. F, T7 W
  472.         char szRegister[100];
    , ^% t4 H% I% f3 d; j( g. y% t' N
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' @+ R, G' l: T
  474.         strRegsName=szRegister;- T& t$ R* L5 |- O6 k' s5 w
  475.         char szPatchURL[100];8 ~/ f7 g0 y4 `1 e+ u; ^
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. @( I5 m' z5 k: {
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 u3 t7 q* ]- d2 H+ ?
  478.       }
    ! M3 X" w5 t4 I) x4 E
  479.       else1 }' Z2 x0 g7 S9 r! p# N" k
  480.       {
    ) ~0 S0 C3 _" U8 K
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 w& K0 P4 y# Q/ o. `& w
  482.         strRegsName=DEFAULT_REG_URL;- U$ s" a3 q7 h& V0 T0 V
  483.       }
    ( m! M' y4 K. r8 ~" D. S. o
  484.     }
    6 ?/ M: i# e" l2 C) e( Y
  485.   }1 l. C5 k7 a! J; d; {9 d/ m2 D
  486.   return true;4 e3 C; `6 w7 \8 G% ^6 m
  487. }* ^8 N2 A" b1 |  u+ g2 v
  488. ) Z  U" p( w7 O$ |: E
  489. #include ".\ZLib\unzip.h"
    + k6 |3 ?3 w8 s7 g7 F
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);* X0 u; G  D- q- I. M/ f! N* ^
  491. /////////////////////////////////////////////////////////////////////////////
    , V  O3 E$ e; t6 k4 ]- B! P9 N3 F
  492. // CRevAppApp initialization4 Z% w- i8 V9 {& v
  493. ' N( W5 k3 W1 W9 a9 O% I
  494. BOOL CRevAppApp::InitInstance()! I* p, l- f5 q& C
  495. {
    - a! q- v( D* i$ h! o2 B& u) f4 J
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , \0 Z8 b) n2 K

  497. $ Y9 E7 e& _7 [5 n6 I
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    9 j0 ?2 _) w, A$ |/ y* }
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    4 c* V3 l* U8 W4 H- q: U3 ]
  500.   {7 C; e) N  b8 @4 E7 r/ y
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    5 x: ^( I! X& V9 `
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 c2 o4 x8 k' V8 I+ n8 `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))5 C+ ^# J4 Q1 w7 a# r7 F7 F" y
  504.     {
    " h/ F0 O/ B; X; Y5 [
  505.       strcpy(szPath,szPathTarget);
    7 A2 y8 O( E8 Q$ j
  506.       SetCurrentDirectory(szPath);
    1 D/ S( M- A4 b: f8 I. `1 T0 h* I
  507.     }- L' ]2 g5 ]5 ~0 X2 |# O
  508.   }$ K4 l& q9 `9 b+ u
  509. #ifdef _DEBUG
    # \1 w4 {. Q2 |4 O
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)), T! z' W0 o8 Q. d
  511. #else
    % U! p. o0 w7 P5 ]' E1 M& ^
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 w5 V6 S; w$ A  o
  513. #endif& e( }8 ?0 A( b. W0 z9 q# s
  514.   {
    % r$ P, g) c' ^0 @2 ^" A6 x2 D9 Y
  515.     char tempFileName[MAX_PATH];
    : X+ i$ N9 n3 f3 m% G) L! A
  516.     strcpy(tempFileName,szPathSource);
    1 R/ q, U7 G- Z0 A
  517.     tempFileName[strlen(szPathSource)-12]=0;
    2 L' }4 @2 S$ f7 x+ j' c
  518.     strcat(tempFileName,"\\$CSUpdate.exe");5 U8 U  _; |8 m" ~) }1 t+ ^
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);( _! c1 _) r. i2 n
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    % g5 ?4 U" V8 A$ U7 A5 ]
  521.     return TRUE;0 [0 r- j! P2 P1 P+ k0 c& a; Q$ B
  522.   }
    & R2 u% K8 z& P! M; O8 {- K
  523.   // Nuke 0118: Delete run.exe
    3 a( ?& T8 F# b; H& v- L' a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );( r& ~7 J0 ~0 H2 O; g8 b
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");: [3 f8 I4 b7 o: u2 p  d
  526.   if(!ReadCfgFile("Config.ini"))
    * m6 x+ J$ s; x" r: w) `- L
  527.   {
    . a& ]/ z  a3 C# U6 _5 m" P
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);+ ?- [$ o  P( {1 d: h* r
  529.     return TRUE;
    $ r0 |  M6 X% x- h# k" d. `( G
  530.   }8 `& `: u8 s# Y" W. D) B
  531.   HANDLE mutex;# f( l9 p3 k' F3 j7 z1 A$ |3 D
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ; q( o6 y. x+ q/ t, [
  533.   {
    4 A$ h. J8 N) i% O1 z3 D6 C
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS). V  A& m7 Y" H, G, z2 \- j
  535.     {
    $ s8 G& _. f' h4 I: }
  536.       CloseHandle(mutex);
      ~' q+ G  D+ N
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    6 X2 `7 U. P; R) p& M* z/ C
  538.       return TRUE;! h9 }* @  c3 H2 C( }8 {
  539.     }
    % J! b* O: i  W$ N5 {$ ]5 S
  540.   }  
    / y# z; m3 @2 J1 h4 V- E
  541.   CloseHandle(mutex);
    " r* w6 T6 }& s% V  ~
  542. + Q, p4 W" u- n2 J) Z  G
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);, m# w8 f0 p1 R$ ]: B0 D
  544.   \( x8 p3 f. {5 Y" c+ r
  545.         AfxEnableControlContainer();# }% r. g! x' J. i- D

  546. - J& Z7 ^  R. F& B. T, ^8 H" w
  547.   bCanUpdate=FALSE;
    4 W+ J5 g+ Q8 |. {
  548.   dwStartUpSteps=1;. T. q. \% w6 C
  549.   dwProgramState=AP_NOTHING;
    % {1 O9 w; V" W- d$ i) E
  550. % H: r/ p2 F6 Y* J3 e$ \9 K
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    0 I/ Q" m+ m3 Q+ Y

  552. # l& R; v0 `+ c0 U
  553.         // Standard initialization
    6 i0 v, _) x8 K' E* g
  554.         // If you are not using these features and wish to reduce the size
    , @% q; x6 ?+ B3 Z. L) m
  555.         //  of your final executable, you should remove from the following& }0 d1 m" M/ s! w( x- G4 k
  556.         //  the specific initialization routines you do not need.
    * l% E; u: U+ R5 h* {1 p+ L" O
  557. " P9 s% X- Y) j
  558. #ifdef _AFXDLL
    , N( L% R* z7 o2 E9 f7 I
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL' a& w4 b" u6 ~8 I
  560. #else
    2 \) R+ z' ^" A
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    7 E+ J6 T4 S  x# W+ E& h$ y+ |
  562. #endif% g: v' Q/ d4 l, Q2 `
  563. & f: _, C1 P, Z  _$ ^; O& r
  564.   dlg=new CRevAppDlg;. a7 u, Y$ n& ]7 |0 T
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    / a. v6 p! w' Y0 R. n! R, r% I
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    * w, @5 J" {* g, Y
  567.   m_pMainWnd=dlg;+ C5 n* r5 i+ O
  568. : R2 B: J; O1 B; [/ v9 @4 d
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);9 `6 b9 g3 |" k/ v

  570. 9 u% k* j9 p* j; l
  571. //  GdiplusStartupInput gdiplusStartupInput;
    + ?5 F+ f* Z  i' B, _; K
  572. //  ULONG_PTR gdiplusToken;
    8 i. O) r& l8 O, _
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);, C# E8 u7 z3 _
  574. 3 V7 d  ?& f& \2 e9 c3 K
  575. //        CRevAppDlg dlg;
    . C) B# L* _* T
  576. //        int nResponse = dlg.DoModal();/ u, Z. W- G, J, s  z
  577. //        if (nResponse == IDOK)
    : V3 x9 r9 f* C8 X0 N- o4 A. O. |4 H
  578. //        {( ?6 z/ T3 L9 l6 t: {9 ~( a
  579. //                // TODO: Place code here to handle when the dialog is
    & a5 M. H7 x4 j& L0 T
  580. //                //  dismissed with OK
      y9 g: p& U/ C5 e+ V9 {) A
  581. //        }9 k  o% F9 N! H0 z! w
  582. //        else if (nResponse == IDCANCEL)1 l, ^9 V- m8 c4 t  Y
  583. //        {
    7 c4 {9 |+ V: O' ]* D5 g
  584. //                // TODO: Place code here to handle when the dialog is3 e& S4 E* y" t) }9 _
  585. //                //  dismissed with Cancel; C0 }( B' E! J" z  z+ i9 d
  586. //        }
    2 B) {# h% n* t' q8 C. C9 F6 U& ^, B

  587. ! I6 z2 R3 F/ U4 t( `. U& M
  588.         // Since the dialog has been closed, return FALSE so that we exit the9 @( S) T' Y7 q/ ]' B# B9 u
  589.         //  application, rather than start the application's message pump.
      i, q. i+ n5 \& s: ~8 T
  590.         return TRUE;8 J) P1 N9 E) |, o
  591. }
    2 r' r. M+ B. V, y+ i
  592. , \# B  E. Y' T
  593. char *CRevAppApp::strtok3(char *pSource,char *token)& o) X. F" S  d9 M' w( ]
  594. {
    ' Z7 _' ~/ m% G3 ]6 H  B
  595.   int i;
    % v, j1 \6 _) r* E9 @6 c
  596.   char *szRet;
    & h) q( x7 q+ q. X9 r" [& R, s

  597. ' y: Z' v8 J( a4 d7 t
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " V7 P, K- A1 b9 V) Y4 r
  599.   if(sztoken)
    % Z+ t5 U# a, {! |9 f+ j. |7 h3 k
  600.   {
    5 T! R# O: ~9 N  I
  601.     szRet=&sztoken[itoken];. @, D7 n$ w" E; D4 s- `
  602.     while(sztoken[itoken])) c) p/ |3 J$ G1 r, |
  603.     {
    6 t. ^2 X  D5 c0 K
  604.       for(i=0;i<(int)strlen(token);i++)& V0 F8 H; ]6 ^9 N% p, c
  605.       {
    2 U- W0 l3 K3 ^2 U: J! v1 }
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]). H- F* o' I0 c
  607.         {
    % ?0 }; @. B1 N- R' N
  608.           sztoken[itoken++]=0;
    3 }8 r( u0 x8 e: Z8 Y; S
  609.           sztoken[itoken++]=0;! L3 D* X$ T; O: }1 e# S: z7 J
  610.           return szRet;# y  p0 x# Q6 [; k( y0 I) O' |# w
  611.         }
    # D" `* G/ ~- T& _, O' U0 o& S1 `* P
  612.       }6 A- J: O. g$ _  n
  613.       itoken++;: X3 T! T# \. x; |8 N2 d* s. i
  614.     }+ W5 ~2 C& [$ d
  615.   }! n8 [/ q1 i( [9 ^# _
  616.   return NULL;; d- |' Z" `0 N, C7 O
  617. }  Q, l) \) o. A- P

  618. $ T. I5 Z2 g1 U; ?
  619. void ProcessProc(long Total,long Current)
    . [) z" O. B. I1 V
  620. {9 o/ o8 c* @- h/ L% c  R
  621.         MSG msg;% j( ]# b+ W. M
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    & {3 s2 a" d9 Y; a) Q3 Y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    " l- Z% h+ ?8 }, j
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)). B- W# g9 ~. e7 d9 L
  625.         {0 O6 F+ w1 E% V
  626.                 if(!GetMessage(&msg,NULL,0,0)), y, k; n3 G. D) i
  627.                 {$ t' x2 r4 X& v1 I
  628.                         return;4 d. T# ^" {& E1 n
  629.                 }% Q9 q! @6 \7 X; c" X/ K$ f
  630.                 TranslateMessage(&msg);$ I+ b, N! ^( y, h6 J# P+ Q3 w7 K. y
  631.                 DispatchMessage(&msg);6 N& B4 Y8 \; g
  632.         }        + M' ]6 L3 u& }5 `5 b
  633. }/ c5 E% B3 z/ F% g1 q5 v

  634. * G$ c" I# B4 Z, E# Q# O1 \
  635. BOOL bFirstChar=TRUE;  K! G. B2 ]0 i1 f
  636. , s& Q( ^7 S& Q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    * p: Z! i, X' d3 U1 R9 e
  638. {
    % F4 A7 @$ o" g& E& x  p5 B. O
  639.         // TODO: Add your specialized code here and/or call the base class
    6 F, p9 v$ O; H; Z8 N5 ^
  640.   switch(dwProgramState)8 e) k0 y; L1 O
  641.   {/ |- Z  p' |( K, a% x* s. ]
  642.   case AP_NOTHING:2 a' U. K& p% \- A" N% q
  643.     switch(dwStartUpSteps)
    $ q! \& O. M; [! @) z5 f5 Y
  644.     {  t. u' y% [" @: I1 @
  645.     case 1:" g% h9 U. \4 Z+ {% @6 L/ Y
  646.       {/ [0 v. n8 ]6 ]9 @. e; R
  647.         int i;
    * M' H8 p* W/ @% t8 E6 o7 e
  648.         CDC *pCDC=dlg->GetDC();
    8 Y, Y( p0 z- G0 o% ^* ]
  649.         HDC hdcwnd=pCDC->m_hDC;4 Z5 \9 _3 N1 X
  650. //        Graphics graphics(hdcwnd);) r0 Z0 i) r7 ?5 x1 O
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    & D/ \+ ]" `" P, t2 P5 L) |
  652. //        INT iWidth=bitmap.GetWidth();5 d7 K* e# \: K
  653. //        INT iHeight=bitmap.GetHeight();
    0 V; N6 W+ w- ~# j9 w: z4 g
  654. //        Color color,colorTemp;
    $ I# x: X3 G) F2 U7 \+ [( {
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)3 O) z$ B: \6 \( L  l
  656. //        {
    ! |+ n# Z" N) ^& d* }/ A  V
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)' l( W, l2 b" \6 k3 H' h3 R
  658. //          {
    * K2 _2 C2 K0 T3 T4 A2 ?& p
  659. //            bitmap.GetPixel(iColumn,iRow,&color);2 k+ S! O$ }( ~* R
  660. //            colorTemp.SetValue(color.MakeARGB(- N& `+ a- c) ]4 G$ G( j
  661. //              (BYTE)(255*iColumn/iWidth),
    / G" P; v6 V) [# [7 {/ P
  662. //              color.GetRed(),% o  h" e: ]) v
  663. //              color.GetGreen(),. L) S7 z. ^/ t( H0 ]
  664. //              color.GetBlue()));2 T, l5 G( W! b' W1 S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);) s  a( Q' _9 o0 e$ {5 l4 Y3 A
  666. //          }) e. K4 g9 @9 Y" X
  667. //        }
    " Y  [# ?: h* J0 e/ r
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    6 u, I! U0 t2 [4 {3 Q7 g) J- L- g% }
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : }8 F. j# [1 Q% V4 g
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    . b1 Q2 t5 c* ^" q2 q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 ]* `. @5 g/ m* k
  672.         for(i=0;i<240;i+=8). \9 `# Z1 C0 g3 A4 @/ M- p5 H) X
  673.         {5 V$ N! Z5 q* n9 C
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);3 B& n' T$ q# f, V- r
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . s, @9 z& P8 I  d' ^! k
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 ~/ n" ~8 w& [3 ^0 G
  677.           Sleep(33);
    ! \, v1 B; |5 M3 f6 z6 u
  678.         }7 p7 m, |+ T! }- L5 f; `5 G9 Q
  679.         Sleep(1000);3 T0 X; v' H8 C  b
  680.         for(i=240;i>0;i-=8)" ?" e: i6 B- C1 @4 G3 R2 h& }
  681.         {( c. x4 g/ e1 w. j; g
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " B& ^$ m/ r% g5 S) x# z: J' b
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 a; P; l3 s% \! O. u( Q+ d& [3 a+ w
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , b% v4 T7 M3 B! I
  685.           Sleep(33);$ V4 _1 R! ]  I8 ]
  686.         }
    ; z: o/ G8 G5 C% C! J  O9 V
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    # Y! F) C( u! N# H& H% f
  688.         dlg->ReleaseDC(pCDC);  d" r1 P% v/ R/ R8 V) s
  689.         DeleteDC(hdctar);4 K3 J0 V  t/ T# D/ o+ B
  690.         DeleteDC(hdcsrc);; c/ g0 U9 Y' f
  691.         DeleteDC(hdcorg);
    ; j- v# G. A. o; q' j
  692.       }
    " H) X8 C5 W' @! n1 y4 u
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ) |; q8 e1 y6 I& k3 m4 p
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");+ j, ^* _: ~) D
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ; U3 U3 g' p* C
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    # H6 P* }. R2 V2 e# |
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 q/ V& P- N, {2 ?0 E
  698.       if(!Dn.Connected())0 F( Z# z" |1 ^; U# ?4 F* s  q
  699.       {' P6 T. N3 o+ Q% E  u4 K+ |
  700.         dwTotalFiles=1;
    ; _" [2 Y! S8 T( I* q7 [9 g. I
  701.         dwDownLoaded=0;- \6 _# b# y' r% l' C: e
  702.         bSilentStep=TRUE;
    9 J0 A4 t( h3 N
  703.         bCompressed=FALSE;
    : z5 Y: @" M% d( t% D
  704.         strExtLocal.Empty();3 P7 u+ H; }. A# M: n" t
  705.         strFullName="readme.txt";
    : [: g2 o# c0 [/ i) i: ?  i
  706.         dwProgramState=AP_CONNECT;+ @& L9 ~4 M9 c
  707.       }# c6 G7 W% z9 [8 b+ s
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();: x' W9 t  p1 L( C* e: o
  709.       dwStartUpSteps=2;
    , h- u$ `- U9 I5 a5 u
  710.       break;
    ; U. }" ^5 M$ ^5 H& v5 q' G- j
  711.     case 2:
    ; [9 B/ ^8 k9 M$ z, F3 E3 t' q( n, D
  712.       {
    3 u1 M7 A2 @3 Y3 Y" v/ _3 m% x+ X% O1 b
  713.         int iEOF;
    $ w3 ]8 C) h2 k5 G6 q% {  ~
  714.         FILE *fp;
    6 m5 T" F7 R# k3 `! q9 D4 S& O- N
  715.         char szString[512];
    # ]2 _9 |9 s5 r* X9 X
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");( L$ ^3 K# i: P$ ^3 P
  717.         if(fp)' N: q( H2 {) [: K
  718.         {, z& c( C" n+ \. U# b
  719.           do1 A- l5 q+ C; i* `4 d) T- ?
  720.           {6 x" N9 }' J/ U# h
  721.             iEOF=fscanf(fp,"%s",szString);
    , ^: C# C4 Y9 O" n
  722.             if(strlen(szString))
    ( v+ O7 b$ G+ F1 X& O" [4 F' [
  723.             {0 i+ n8 I' t, [$ e/ ^/ H7 {
  724.               if(bFirstChar)! H7 \6 k) e7 u$ E( f# |0 y, }: Q
  725.               {( m* i! v/ _3 X( x& o! R- P
  726.                 bFirstChar=FALSE;
    5 W9 S  g7 j7 b) m- v1 ^& u
  727.                 bConnectIsBig5=FALSE;
    ( C2 ]6 j! {( c: n. e( ^# h
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;) D& T3 `7 F, g( p/ R& Y
  729.               }0 I. P  s5 D  h2 O5 K
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    : V! s* K1 i) K" z/ |% f4 X9 e8 j
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));/ Y5 q# T1 }7 Z3 j2 g. e& Q' y/ a  n
  732.               dlg->m_ListText.AddString(szString);
    ) V' ?8 X$ i; M! D5 q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 l! @+ G- B* {/ p8 X0 E, ]0 A7 I
  734.               *szString=0;- i3 K! z' [' P, }8 V7 G. U
  735.             }' O- h! n2 ], w8 V0 c  ^4 B4 [
  736.           } while(iEOF!=EOF);# a0 W; q# m  G& n
  737.           fclose(fp);
    & z" @) Y) E* h/ m! I
  738.           unlink(".\\DownLoad\\readme.txt");8 `2 Z9 T3 t( f  U
  739.           dwStartUpSteps=3;$ {* B! {2 e( T2 m2 W% w* c
  740.         }
    ; N! V. a, [; D% _2 A
  741.       }
    ' l; \/ L0 [" K
  742.       break;: |9 `* o% p! _' G3 M
  743.     case 3:
    ! e- ^+ V: ^' @5 C/ B+ T$ k. v
  744.       if(!Dn.Connected())
    5 J4 p4 k$ w1 n' |* {; m& ~# Y4 z
  745.       {) J8 o/ f* s; g! a. [* U
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    " c0 b" p" f  ?) u4 Q$ q/ A
  747.         dwTotalFiles=1;- e  N6 A" [5 O6 b; e$ x" g
  748.         dwDownLoaded=0;
    7 J( }3 Q; k; N  Y, k: k5 l$ o' B
  749.         bSilentStep=TRUE;& G1 f/ k; T0 _* c4 T" i$ I2 T
  750.         bCompressed=FALSE;. u0 O! j+ y6 v& w3 M
  751.         strExtLocal.Empty();
    / N  l  t  f/ B
  752.         strFullName="checkversion.txt";6 y, J! x1 F! ~& _7 l! l
  753.         dwProgramState=AP_CONNECT;8 ^' _0 A$ d8 _; F
  754.       }5 |& s' Y: W. S/ j. K; p, Q6 ^
  755.       dwStartUpSteps=4;
    3 {1 z$ z' x: q2 D9 {& ~
  756.       break;
    5 ], y* a) n  _
  757.     case 4:
    / T2 Y  u+ ?4 }' |5 L0 ^
  758.       {: y4 w9 ]. F. \8 d
  759.         FILE *fp;1 l; f& ?7 N9 S, G2 \& V
  760.         char szString1[128];
    & Z3 Y) x& c- R. I# i
  761.         char szString2[128];
    7 a, q% N- W0 a8 }, }
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");1 i6 V# C$ Y& |4 q! n9 }% t+ n" {
  763.         if(fp)
      Y- y, j; l- d& [. o) o) s
  764.         {" g- n' c( Z. m& a1 W
  765.           fscanf(fp,"%s",szString1);: q  p* F+ v) {
  766.           fclose(fp);
    $ _, S0 ~' W- l+ y3 D! W& t
  767.           fCheckVersion=atof(szString1);- u$ z% q" s) d/ K
  768.           fp=fopen(".\\checkversion.dat","r");/ x% a- E& w5 |' ^2 h1 X* q+ t) \
  769.           if(fp)0 l% }& m1 M. O0 ~$ J. p3 ~
  770.           {  q4 O; x9 U, h3 U1 @
  771.             fscanf(fp,"%s",szString2);
    - F# |) o1 u/ I- B! G% |
  772.             fclose(fp);
    ! b* o, J$ ^1 v) @8 H# y7 Q
  773.             if(atof(szString1)!=atof(szString2))
    ; _0 l! d& e) M: M7 z/ h
  774.             {+ Q: r1 X; J9 ~  I! Y& z7 e
  775.               if(!Dn.Connected())/ }4 B# A4 f5 Y2 k4 w3 D# [
  776.               {
    + y2 h! {" ?$ U1 @
  777.                 bFirstUpdate=TRUE;/ E! |- H# F4 v8 u
  778.                 dwTotalFiles=1;, X' X9 n' C. s) l
  779.                 dwDownLoaded=0;
    ' `  \; P* {2 O
  780.                 bSilentStep=FALSE;9 x/ r8 y% e7 B# V
  781.                 bCompressed=TRUE;
    / z& K2 H: m" v, T
  782.                 strExtLocal=".\\DownLoad\";
    - m2 g% V( V* ?" V/ }
  783.                 strFullName="update.txt";5 W# r7 v% C3 R- }* g4 t' a
  784.                 dwProgramState=AP_CONNECT;+ z" c2 `4 _, X9 N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! \2 j' {- f, Y- w; I
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: p" Q/ ~: W2 u- |, y* V5 s
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");0 Z- L2 R: ]! o8 t
  788. / t! l6 q) L6 }% T% r' d
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 F+ J0 I+ [6 K* P1 w: }: L
  790.                 unlink(".\\DownLoad\\checkversion.txt");) r3 s2 {3 _( |, P5 {0 ?+ V8 Q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    7 B( @$ R& m! S0 C: o
  792.                 {  P2 k& a& j( `
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");- n& J3 D" n( I6 V6 |3 X5 Z6 Y
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ; H4 B3 e+ M! V, G: R- \. K
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");% s5 O: F/ @, a4 U  V
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; M/ E  j/ e& j6 A  K
  797. & o  z: d2 z8 G: }5 L) \
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, m1 ~  Q+ I3 O8 c% c, @1 P. `/ d% @
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 T: F, Z+ v+ |+ Y* D8 Z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");; E- x7 C9 x3 f7 f
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) _* f9 i8 w4 w3 q! J
  802.                 }
    - r% V% w  }% T  n5 L1 M
  803.                 dwStartUpSteps=5;+ A* w' |1 g5 v- w
  804.               }5 s- m( V9 ?" r2 T% `6 Q
  805.             }
    7 q. y- P: Z% p  e0 N
  806.             else5 @( u2 a5 e( q' @, Z
  807.             {
    , ~% f9 y! O) p4 @
  808.               unlink(".\\DownLoad\\checkversion.txt");
    7 D% i6 P. @" @' `; `
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* K# w  V5 K$ S, ?
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    . x/ M% k! ~2 C2 ]! p7 o
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 t7 @" H5 ~: \* `

  812. / l- ?- }( c8 Y3 y: [
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) t$ {8 y, W* R$ `+ i, s1 o# K
  814.               dwStartUpSteps=99;
    # [3 ~% C; x$ N4 H( z
  815.               bFinishUpdated=TRUE;
    + n% O/ m; l: L! W8 h% H* M! i
  816.               bCanUpdate=TRUE;
      t$ w  `* V4 z: k
  817.             }( J5 ?2 t* k# q2 N
  818.           }" i& ?( p( G) q% F5 ?- R$ Q: t
  819.           else
    9 o9 R3 d- Y3 S: r: B! W
  820.           {
    9 W& e& }. f% {1 B1 J- n
  821.             if(!Dn.Connected())
    & k5 h! m+ r5 J: t
  822.             {) U" u. j9 W: y+ h; U; K6 D% v6 B
  823.               bFirstUpdate=TRUE;* A7 A* C  J: `9 m9 i2 A$ h
  824.               dwTotalFiles=1;
    $ ]8 e- H! r6 ]# S, K+ Q% w
  825.               dwDownLoaded=0;0 _# E# f2 a+ U/ J: A5 w4 V
  826.               bSilentStep=FALSE;+ R$ F9 W& w5 O
  827.               bCompressed=TRUE;
    % b+ I/ F" r' |) ]! L; d8 N/ d
  828.               strExtLocal=".\\DownLoad\";
    8 |" P1 b; u  n4 K8 N, N
  829.               strFullName="update.txt";
    7 \4 k9 G* j- @  [" O
  830.               dwProgramState=AP_CONNECT;  a3 t  k, ?. C
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- v9 \1 b% }, M6 N, C
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      i! N: b8 D; |5 q! k5 n$ K
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");1 F  D1 B8 b1 Z! p
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 S" h8 W7 B# P/ W9 b7 z1 N6 Y! ?
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ! A" k4 f- `, c5 J& u
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    , X0 g; e. M% }& M9 C: F# b
  837.               {" V$ I1 n1 M) V
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");. W) _- o- B, I; @1 U
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");/ j! f4 n: R& s3 |9 J7 F
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");% V) o% y3 P( H5 O& Y/ J+ U
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # V1 K  E2 f) M" d
  842.                 : ~! h) ]  C% J+ k! i
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");* s: V! G# h* z4 |1 F5 T
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      E5 N, D! U% x' {1 A# q$ h
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");2 M3 j! H0 w2 R. w5 T2 z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 Y, O% f: S3 s0 Y
  847.               }. o6 U8 R, i% J9 Q
  848.               dwStartUpSteps=5;, ~! W% K3 y1 C& i- K8 I
  849.             }
    7 U8 k8 X6 t+ |0 ?; {
  850.           }8 @% q$ J* j; _* t* j
  851.         }) n: k; h9 `9 ]# O, R1 [
  852.         else& b! P# B# l# M0 G1 q& E( R6 v! Y
  853.         {
    7 e0 T# H3 C5 U8 [
  854.           dwStartUpSteps=3;  F+ ~- I2 x/ F- c: r
  855.         }
    6 L; _- J+ {2 ~9 t+ f8 p2 C
  856.       }
    - K  U  h5 F, H
  857.       break;! R$ E/ q, }# q5 ?( w7 V
  858.     case 5:
    2 x5 l3 i: t" e  n- o# w7 g1 c
  859.       {- k3 _. d& u% `/ j, ~0 J* x  I! W
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ) j' U# J& K4 U. G% x3 Z: Z
  861.         {
    . }6 K7 k9 `% `; @2 Q+ s6 R
  862.           int opt_overwrite=1;
    . S" m9 A! c4 c$ K) B/ r
  863.           int opt_do_extract_withoutpath=0;
    % F; L0 E! n6 ^; T" u9 T
  864.           unzFile uf=NULL;. A2 e9 y: X/ P* r" f

  865. 3 v; L9 \! w  G  }
  866.           uf=unzOpen("Wsa.zip");8 W6 T  |. |1 K7 N0 S
  867.           if(uf)( ^, Y* B8 s; Y# c3 b1 w
  868.           {
    0 k, O8 X+ M3 A0 {) D
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    1 Y& l" Z* t/ q5 m
  870.             unzClose(uf);
    0 ~1 e* b: ?3 d6 F1 v# ?6 i
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");: W* G9 G& d0 \
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    $ [' L( s# q5 p+ ?8 u# ^
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    5 X. X5 I5 N* A; j6 i
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ i0 r/ b4 C' f# H1 ?& b- b
  875.           }5 U# j! F& Y) Z& M5 ?
  876.           DeleteFile("Wsa.zip" );* a0 ]" {$ _8 @& M5 W( G
  877.         }6 Q! T- h' Q1 L' L5 u9 \; {/ R2 J
  878. 5 m2 K9 B$ i. J5 s( L1 u
  879.         if(CheckLocalVersion())
    & O/ X7 F. s& c" D/ T8 Q$ q* }$ B+ k
  880.         {
    , s+ q$ l4 {- z4 K/ `) m; q/ o$ e
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");$ L+ D7 o3 l: @0 O5 K3 A7 X. e
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");. Y( b* s  u+ F+ j
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    5 f  ^7 Y: o$ U- H
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 N& M  h9 E& V
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);& ?5 ]" M1 c! B2 P# r! n( j
  886.           dwStartUpSteps=99;
    ( @0 L) P* E2 u& Q- J
  887.         }; r1 b0 N: Z) R- U6 _
  888.         else
    ) M2 k, P' E) R$ O
  889.         {3 s) ^6 @: o' C7 {, R, {
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - I0 T1 I8 C3 r7 V+ ]( G
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& k1 D9 H3 [* ~, D
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");$ S, |; }  [: @

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

2 |- j4 h4 u0 ]( C. x- E0 W* _; V. D; `; r$ Q9 D

評分

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