CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
5 O# e6 t+ K7 T# N( V. g' s
  1. / RevApp.cpp : Defines the class behaviors for the application.
      y; J/ c  b, D9 k0 h  r4 t- L- I
  2. //
    5 M$ [, E$ @" {3 y

  3. 3 D% J" F) k8 y0 A5 z
  4. #include "stdafx.h"
    2 ~$ `4 }  l8 C& m/ m5 X& }' }
  5. ; R' ~7 }6 H& \, D
  6. //#define UNICODE& }6 y8 k9 Y; Z4 o6 Y
  7. //#include <gdiplus.h>! y) y6 b0 K8 x4 ?$ ^8 Z
  8. //using namespace Gdiplus;1 X  \: w* g. g2 C( t) [# }. o

  9. ( S/ w2 X  i  M! K
  10. #include "RevApp.h"; c% u, v; i8 w, ?4 {9 j
  11. #include "RevAppDlg.h"3 d5 k  s; K* Z) {, ?- {

  12. 8 o. }: k5 J# q7 a, C- ^( T
  13. #pragma warning(disable:4786)
    # U0 H9 u" J$ E# ?& @
  14. #include <map>
    % w: S' n0 X& X7 A- @2 v* h
  15. #include <list>
    $ o) s0 r; ~* D; e! Y* f+ B8 Z
  16. #include <direct.h>
    - |1 P. ]  f  w

  17. & x' L- @' C; m1 A% |: Y$ K
  18. #ifdef _DEBUG
    2 _6 r+ U; W  k+ [' y6 w
  19. #define new DEBUG_NEW8 b- K  Y9 s: U5 L) {) [
  20. #undef THIS_FILE0 n) l( H: m/ \0 u1 ?/ O) q! U
  21. static char THIS_FILE[] = __FILE__;
    0 C' B/ B. h$ P' {
  22. #endif" O! y6 O$ w  ^; d# ~* @$ P
  23. #include "SkinResDef.h"
    - Y1 m9 b5 C* _. L
  24. #include "ChangeBG.h"( ~3 M% p4 O, ~; s2 I2 ?1 d1 C9 m
  25. #include "AFXINET.H"7 a0 U" f  W5 J- U* {2 w
  26. $ f, R6 V* c; ?
  27. #define TRADITIONAL_CHINESE 0  Y; z; e1 f! s' q" D% a/ g
  28. #define SIMPLIFY_CHINESE 16 l( Y8 E9 G6 m" G) v+ L1 [
  29. #define ENGLISH 2, I8 v0 j9 h0 l5 U( g* j7 y# ?
  30. int m_iLanguage = ENGLISH;/ M: b% E; D! ]% S" R) K% m' x
  31. /////////////////////////////////////////////////////////////////////////////
    ! f0 d* P7 s( t3 w+ [
  32. // CRevAppApp2 \$ a. ~" w7 f- K2 [
  33. 1 s/ j) t! @+ }2 H* y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    5 {: y/ |# R! x9 J$ X8 ?
  35.         //{{AFX_MSG_MAP(CRevAppApp)+ i& S6 _' v3 O, |" e# v7 c
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    " d0 t# t+ D, S( z' I
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!4 @" w4 X' `: ]' F+ I
  38.         //}}AFX_MSG$ d* T9 o8 i9 U! G
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)* a, v4 S; g& M
  40. END_MESSAGE_MAP()- L# P+ G" X  c. f1 h: M

  41. : M; Z) V  m2 o. I: M4 T
  42. /////////////////////////////////////////////////////////////////////////////
    7 v0 j7 n& ^( q! a
  43. // CRevAppApp construction
    3 E  x* A4 z! O5 I, N

  44. 3 e* ^& f6 M/ U- {7 I( b
  45. CRevAppApp::CRevAppApp()
    $ c9 u- n/ Q7 l
  46. {
    5 @& }9 u8 C$ n7 R8 l. M9 a
  47.         // TODO: add construction code here,, U. G$ H8 w( ?" b
  48.         // Place all significant initialization in InitInstance) r' p5 }, j* P% C1 `$ o
  49.   bDisplayIsBig5=FALSE;
    9 }3 H: H, h4 |8 |
  50.   bRestartUpdater=FALSE;
    # k0 M& a# J! C: C$ k) K
  51.   bFinishUpdated=FALSE;
    ! [/ s9 G0 j/ S6 ^8 z: q- K9 M& {
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;- X' K, Z# `4 i* b
  53.   InitChangeDataBig52GBKS();
    ( s9 N. |$ M7 |6 Y* l9 j0 v& V
  54.   InitChangeDataGBKS2Big5();3 u- I  }, R. @3 Y5 M5 C  W$ f: @
  55.         //
    % q( M5 U' w6 H! t
  56.         bClickRunExe = FALSE;- L4 T& o8 T' O
  57.         //
    - Z1 w: D: A7 |4 i7 P7 b
  58. }6 s- i3 W. W6 b. T) [% O- G% ?5 O
  59. + T0 o+ X0 s0 t: N$ h
  60. CRevAppApp::~CRevAppApp()
    $ v) U; f2 S/ s* K! v* H
  61. {
    6 k4 J2 \+ e  @$ F0 T& {, ?
  62.         // TODO: add construction code here,
    - |5 S' M. I, J0 _3 S( W6 p. n
  63.         // Place all significant initialization in InitInstance
    5 m7 y" {) W; A4 y3 l- l) J
  64.   EndChangeData();
    ! h% v* P9 ^7 a; G3 W% F
  65. }* x# B$ i( ?" h% g9 b8 N! y

  66. & p& l5 t5 o) H! ?# Y- J
  67. /////////////////////////////////////////////////////////////////////////////5 j/ `1 }5 a9 {$ Y( R; c7 O
  68. // The one and only CRevAppApp object
    0 O* i; e/ d$ `* g* K6 I$ ^( G: K
  69. : B  X& ^2 q9 ]& x; D. k
  70. CRevAppApp theApp;* V" K$ z; l! Z; C  k, Y

  71. " G" p% X% ~" h/ g9 ~+ e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    . V! s" I% i' t$ _- e- S5 p$ v
  73. {/ a+ V! J0 m/ l) l
  74.   int iEOF=0;3 _; S9 d8 o8 z; R4 n; K+ E; o
  75.   char szTempName[MAX_PATH];+ E4 {! F2 e& L! r! y
  76.   *szFileName=0;
    8 {9 R" h; C7 K# R# |* o" m% q
  77.   iEOF=fscanf(fp,"%s",szTempName);
    + F* m* N9 _; T. [/ q( @
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    * R7 ^; o" \: s8 D' b4 W! \
  79.   {
    8 C( r: B9 _6 L  V
  80.     strcpy(szFileName,&szTempName[1]);6 P. A5 ]! J  j. C$ o1 x7 I
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF); Z8 l% r& P1 ]. F( r% V
  82.     {
    % l5 {3 l0 j" k5 P- {* [
  83.       iEOF=fscanf(fp,"%s",szTempName);
    : Y9 V) H: t7 C
  84.       strcat(szFileName," ");
    + W* n8 e/ v8 n- Q7 f2 j$ i! T$ J
  85.       strcat(szFileName,szTempName);/ R$ f) u# n5 M: f
  86.     }
    4 W! O% E( M" E4 A3 N9 l6 z- G7 c
  87.     if(strlen(szFileName)>=1)
    # |/ Q8 h- D4 H. e
  88.     {
    2 _/ [1 L' \3 i! ]) g6 k' g4 z
  89.       szFileName[strlen(szFileName)-1]=0;3 ^" O; v; J8 E1 w1 d
  90.     }
    $ E9 y9 {6 O1 \4 P5 m6 E3 _
  91.   }# W6 H& V) t  r0 P
  92.   return szFileName;
    6 d" [5 v1 E1 o6 T( T: o1 O
  93. }
    % x) n) E, ?( w" d% t

  94. 3 [+ B  k, q9 b" a/ v
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)" h0 P* F1 a( h1 q  @" N2 ]
  96. {
    % m8 N6 h, F4 K3 ~% f1 _
  97.   FILE *fp;# R& R9 k$ |1 X: Z0 |0 D( X; j4 E, k
  98.   char *key=NULL;: X) J( e, c' Y' `# P2 v/ l
  99.   char version[MAX_PATH];. C4 J; D! z) U: S# L7 i
  100.   LPUPDATEFILE file,olds;' B7 z6 J; \4 x2 f
  101.   std::map<CString,LPUPDATEFILE>::iterator p;7 o+ a1 W( n2 W% Y4 y" b4 T0 ?
  102. ) T! i0 c7 {. V
  103.   UpdateList.clear();2 x( [; I  u4 J# C  \7 D. @2 c
  104.   UpdateFile.clear();
    ) G( z( ]7 X7 [2 i, c
  105.   if(GetFileAttributes(filename)==-1) return false;
    7 d2 n! Z, U1 q$ v
  106.   if(!(fp=fopen(filename,"r"))) return false;
    3 t; ?& d2 u- C
  107.   fscanf(fp,"%s",version);( s; K) w* Q( R
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    1 O" ^3 ?4 G' t0 r, u) a9 n
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ' J  _5 P, Z9 X% O6 R
  110.   {% M0 c( F/ S$ W5 F9 p
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' `% m- p- V0 E2 g# U+ }/ ]
  112.     fscanf(fp,"%s",file->path);8 k! v  f' l7 n4 _5 ]+ L. z
  113.     ReadFileNames(fp,file->file);( d, m- u3 _- {% Z- d2 Z
  114.     strcpy(file->full,".");2 l$ H# l2 u5 [. W, E
  115.     strcat(file->full,file->path);. Q' ~# Y/ r8 `3 T
  116.     strcat(file->full,file->file);
    9 V: ~9 r3 M% K3 F# }# Y  K
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    - F6 {9 `7 [8 j- N+ V
  118.     {/ A7 W% F, B. v$ X" h
  119.       file->vers=(float)atof(version);
    % _, |, k7 T" q9 }' t( {
  120.       UpdateList.push_back(file->full);1 c& f$ @$ n: Y. F8 l
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    1 ]% q- o) C# w" o
  122.     }$ Z- y/ z+ j7 E. ?4 Y
  123.     else" \% K' U2 x0 P5 u8 W* R
  124.     {
    & h: m+ x1 h# J% H: i
  125.       olds=(*p).second;
    2 S: e; Z  {) X
  126.       if(olds->vers<(float)atof(version))
    " n0 }( g9 Y  K6 b
  127.       {
    ; b  v  U% O, Q# q3 M& r
  128.         olds->vers=(float)atof(version);
    9 X0 E) ^( E: B0 x" @) V
  129.       }
    5 m9 Q5 ^+ b: H* {- s; Q: m
  130.       free(file);
    ! F: s/ Q9 @. M; v: }' E
  131.     }9 o. [  P. q7 G  a
  132.   }
    8 g5 {3 a9 A! d# k5 R
  133.   fclose(fp);
    0 y1 b3 Q) P  ~) v
  134.   return true;
    6 O- _" t5 v9 f$ i" |3 z
  135. }+ q% g  _0 W7 H& o
  136. ! @7 \2 X" s* w* r2 x
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  o* l/ b4 E; o/ t. p
  138. {
    & e$ m) e/ A3 X) L0 n
  139.   TCHAR  szFull[MAX_PATH];
    * k" ^5 N0 w4 J4 M& N9 [
  140.   TCHAR *token,*inter;
    ; B2 i* }: B. K. G8 s; K
  141.   *szPath=0;, T8 w5 d. w; {0 `7 r" p
  142.   strcpy(szFull,szFullPath);
    4 y" R+ r! p. }/ Q. @) V; u
  143.   token=strtok(szFull,"\\/");' G1 ^! c! F! N1 C) }* [$ K2 R
  144.   inter=token;
    % E2 J% d* j- x
  145.   while(token=strtok(NULL,"\\/"))
    5 k% K) r  a/ V* D/ l
  146.   {
    0 v1 g' _# H: F1 B9 e' Y% z/ E
  147.     strcat(szPath,inter);! ?6 J! Z' h) C+ g' G
  148.     strcat(szPath,"\");8 e8 g2 i( i- g  h( u
  149.     inter=token;! V+ t: w2 C, V
  150.   }# y6 [$ y% {$ q  s
  151.   return strlen(szPath);* o9 J1 I0 q/ s6 `
  152. }( f) {: V4 ]! c6 J

  153. 7 {& J7 G7 g* L( O. f  y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)* K/ G* v& _( I$ f& }0 t
  155. {& |% J9 S9 b* H" t
  156.   DWORD attrib=GetFileAttributes(Target);
    ; \% U8 [  I0 h) S* w3 J; w
  157.   if(attrib!=-1)# W" ~8 T) ?( ~
  158.   {0 @7 S: r! r0 z$ P
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , @: _5 Z! o& S' S3 i) d, j
  160.     {
    ' P" r4 A) F+ s4 Y5 o  K
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    & b- Z9 x3 U$ Z" p: H9 S
  162.       SetFileAttributes(Target,attrib);
    ; B- c0 q6 }. R! ^, M; b
  163.     }& D& j  _2 `" ]3 x; t9 o' d5 X2 ~
  164.   }
    0 k$ w% A) _( B9 }) e7 T2 D) j  T7 v9 c, p
  165.   CopyFile(Source,Target,Erase);9 Z- S% L0 P: [, k" z% r2 n
  166. }
    2 E6 _9 F# N3 q  f0 I) Y1 a& u

  167. 7 D( M, l. ^8 I" ?  ^
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)' a) o7 _: m2 ~
  169. {
    / h$ G% M, _! r
  170.      FILE *fp;
    + H* g* k+ `+ b: d( I
  171.      char  szBuffer[8192];
    $ ^- p0 l9 |  z2 Q. D0 ?
  172.   va_list  argptr;
    . g/ D0 j$ C+ b2 b2 d
  173. & g. D; ^, E7 {; d
  174.         va_start(argptr,message);/ B/ h5 U# |3 V
  175.         vsprintf(szBuffer,message,argptr);, t9 H$ P. ]# \' q% v$ n
  176.         va_end(argptr);
    " B5 Q+ y3 v4 c% [: e1 P
  177.   fp=fopen(FileName,"a");' |" z2 u6 s/ }( M& O! e2 y6 @7 E
  178.   if(fp)( b- U5 Y8 `1 J" n
  179.   {( }7 U0 T# ~: i/ P! k9 M
  180.     fprintf(fp,szBuffer);; \' g' Q' Z% l/ c5 r* E
  181.     fclose(fp);
    . A4 L8 G% u7 T4 \2 w
  182.           _flushall();
    4 e( b0 L/ u# ^8 w9 y* {3 G( m+ T
  183.   }( x* {& x* R+ T. s. m/ G8 M. b" T& F
  184. }
    0 E' G8 F5 q4 g& f* k7 S; [- R4 ^

  185. & ?* t- v3 Y) c0 a. K
  186. BOOL CRevAppApp::Fclearf(char *FileName)2 y6 n/ w4 }+ w
  187. {3 I( B" Y* m9 V, [
  188.      FILE *fp;3 ~) F, q! v. S& A% l
  189.     DWORD  attrib;4 ~7 F2 B* F, ]0 ]/ Y# r
  190.   attrib=GetFileAttributes(FileName);
    % J2 l1 F$ E5 x! {) O
  191.   if(attrib!=-1)
    6 Y# ]. u3 R, m& L* _: C
  192.   {
    3 A- u* ]: @& J1 u3 |. l  g, `
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    , t# z0 _6 p" K% S$ o' R9 y, w
  194.     if(!SetFileAttributes(FileName,attrib))
    ( [' p. |5 u2 D2 A' H
  195.     {4 \- J1 C: G0 W- X
  196.       return FALSE;
    " @6 x4 ]! b* @8 M' ~' w) X
  197.     }0 W  m: p" q+ C5 o4 i9 C, p
  198.   }
      c" C( o2 ?7 {: B# `2 v4 G5 k
  199.   fp=fopen(FileName,"wb");
      t3 _% t1 s0 _) f* w0 q
  200.   if(fp)0 p1 I( L! h' x1 V) W4 H7 M6 p* q' P
  201.   {
      N+ ~5 f4 K$ m4 k; Q
  202.     fclose(fp);3 o+ t" i1 k; @7 j( n2 f$ [
  203.   }
    5 x6 a1 ]# A. q$ M  o1 o0 E* H. P
  204.   return TRUE;$ Z4 A. q+ W+ n
  205. }* l  M, `0 @+ Z8 l" Z
  206. 6 k- W* a9 }; h# z) @- P! u8 F- m1 g
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    , e% X  a3 e% w! u3 F
  208. {% H/ U. X1 T$ V+ A5 d
  209.   char filename[MAX_PATH];! _/ b+ I+ B' p5 F6 ]
  210.   LPUPDATEFILE file,olds;
    5 ?; V! g; F. R' L7 {
  211.   std::map<int,CString>::iterator i;( S. k. G% ^  X, Q+ r. F3 K
  212.   std::map<CString,LPUPDATEFILE>::iterator p;+ K1 h1 `  Q* ~: M  u7 Y
  213.   std::list<CString>::iterator l;
    1 U) e6 D4 N0 o) u# z. a

  214. 6 k. G  M$ l5 D# T
  215.   if(bFirstUpdate)
    8 ~& S  s3 W9 ]7 }
  216.   {
    ; I% Q+ P* [+ [- |* r8 K6 G/ I
  217.     dwCurrFile=0;
    / W9 B' j6 D& i6 g1 T
  218.     bFirstUpdate=FALSE;
    * `4 M3 t2 p5 s6 D
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 K- E, m1 M' `2 j8 X& }- h( i
  220.     {
    $ }9 ]( u. z( g) b' M3 E1 O& g
  221.       dwTotalFiles=UpdateLocal.size();  B1 B& {  O6 {; R  m/ ^
  222.       dwDownLoaded=0;% v" C4 d; c' K4 ]
  223.       bSilentStep=FALSE;
    ' N! R2 o6 H  b. g
  224.       bCompressed=TRUE;
    * W2 d' I( K& u0 |- ~, W
  225.       strExtLocal.Empty();* Z1 }' }& S, P2 O% L6 Z' f9 Z4 t
  226.       strFullName=(*i).second;
    ; v6 r  u) h) P% u/ B
  227.       dwProgramState=AP_CONNECT;
    # e0 {- c( m! [) Y. t+ {
  228.       return TRUE;
    1 A5 a* T# O; r- B3 s5 P
  229.     }& U5 `& C; v# h+ V1 |
  230.   }' F" M$ u) M4 {0 o
  231.   else if(bRestartUpdater==FALSE)
    * F3 S; R& P. G9 v3 }7 ^; C
  232.   {
    0 j8 z& {  L/ l# R( L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    9 j* |  e8 ]4 Y
  234.     {; ~" o! Z2 Y( ^% Z; L
  235.       file=(*p).second;0 n8 g9 ?3 `( q! n4 V' h3 w
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ) S& Y  g, B2 m: _7 B& S
  237.       {* V4 N: }; C8 U5 h5 D% j/ n' Y" u
  238.         olds=(*p).second;
    ) I) |+ M$ ]8 `$ H+ r
  239.         olds->vers=file->vers;; f: I, Q/ x# }' Q- H, f: Q
  240.       }. d0 y7 x' X+ y1 b% F
  241.       else
    2 E+ l' K1 ]2 l, k  G9 m5 y  v
  242.       {/ _0 [' o+ g$ s6 }+ s
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! C% f, K  n( t& u+ ~6 B) a
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ w. D7 d$ G4 P
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));4 e$ J7 e1 {) n/ v# ?0 U3 j4 F4 L& E6 w
  246.       }
    - d  X# q8 n0 f
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    0 h# `  l& N8 q, q
  248.       sprintf(filename,"(%s)",file->file);
    ) g/ ]( j; O& B7 v- z. w
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ) m# \! L' G  n& Y0 `3 c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    : v: K- k& I+ Q2 x7 M
  251.     }
    ( \0 s; A% ~4 w$ Y
  252.     dwCurrFile++;
    3 G5 M! r) n" N3 O- k" F4 N
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 x# i# v1 b; `% @4 _
  254.     {' m! }# o: j: U/ _" j4 T, ^$ K
  255.       bSilentStep=FALSE;
    % a1 z, _5 X# m8 T8 l; X& C
  256.       bCompressed=TRUE;3 ?7 P# g; h8 q% h( l4 f/ r; }( X- ~
  257.       strExtLocal.Empty();
    ) T: L8 y$ S/ R8 t! A0 K% v
  258.       strFullName=(*i).second;
    , H( P# P( D6 |0 S7 o  U" l
  259.       dwProgramState=AP_CONNECT;1 Z; ?  ^0 u% K/ q: b
  260.       return TRUE;+ U$ |& \; c* X) Q1 p" X7 t
  261.     }; R% w$ }& I+ t  P- J
  262.     if(!bRestartUpdater)
    5 x: _- C1 ]7 j6 Z' f
  263.     {' D% b# o7 @7 O& j/ t
  264.       int iCurrSize,iFileSize;
    9 V* k6 Z6 ~. H: V) }: o* M
  265.       iCurrSize=0;
    : q5 x) n8 k+ T" W  @
  266.       iFileSize=UpdateList2.size();
    ( o, M/ ^1 c' B: F; |
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    , G4 h8 a+ S  L# ]+ X
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    5 Z% h( H& ]/ h; i- D6 x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");$ a2 K- n5 \! X4 y& [
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 o  `# G) V8 N- C
  271.       Fclearf(".\\update.dat");4 ^) M7 w6 q% v
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    3 a! \8 J' t# h* K6 X
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)- v. k2 T( Q$ L
  274.       {
    0 j3 B8 e: E2 J9 i  t
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    $ @: f5 k, F0 y! s* N9 l; \
  276.         {' _$ R! G+ e4 `; u$ E! v% c6 _* l
  277.           file=(*p).second;
    # x2 q7 y) e7 G- p
  278.           sprintf(filename,"(%s)",file->file);2 d2 w0 M4 s$ K9 Y; S
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 e8 m( c! _( L7 Q: X2 F
  280.           iCurrSize++;* h2 O0 E* v! m' x
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));+ |- j( A! D; x: W/ S  ]
  282.         }
    ! T6 R( t# L$ C- u* T, c
  283.       }: q* Y$ ^$ E; k! _) m* }
  284.       unlink(".\\update.txt");
    $ r# {1 s- f2 A& v
  285.       unlink(".\\update.tmp");1 F6 m& U$ G& t( E
  286.       Fclearf(".\\checkversion.dat");
    ( p4 ?* f8 [( J# ]
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    + y; K- F5 Q3 g' p6 A
  288.       if(UpdateLocal.size())
    . R  J. d  u! Y6 r: O
  289.       {
    / I% O0 x' h' M3 b& t4 u2 a
  290.         UpdateLocal.clear();
    8 G7 q8 U2 }( x2 n: k" o8 j
  291.       }  y* h/ R3 P1 V# a2 D2 P) D3 o* v# V
  292.       if(UpdateFile3.size())
    8 L& b  r" s8 K1 c, Q: [" A
  293.       {
    / j' c' _4 Z: `/ ^
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 U! n6 r' U* c: x( q/ z
  295.         {
    2 P: a5 W% F' [; i+ S. [) g9 x7 u
  296.           file=(*p).second;8 e$ x! M8 C+ v4 Y) F- ~
  297.           free(file);
    , x1 }$ ^4 c$ ~/ H2 @4 r
  298.         }
    3 w; ?7 d3 F7 @2 C
  299.         UpdateFile3.clear();$ J3 \5 m8 m0 E% N
  300.         UpdateList3.clear();% N( p( q! v7 {3 Z" K
  301.       }
    ! V% Q! |4 B; O, T; K; v8 {
  302.       if(UpdateFile2.size())- ?, h0 U7 E7 N# n- L" Q  }4 ?
  303.       {
    & S1 B2 W0 k' Z" Z  Q8 c  e
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 s0 y. @. @2 Q  O" V% |9 ^1 j
  305.         {# l- m6 _$ y6 I" d% F9 x9 |! {$ F
  306.           file=(*p).second;5 l4 C, Z' p$ ?4 e" `- h
  307.           free(file);& I9 q! j+ I  w" j5 q5 G
  308.         }
    * q/ m: J9 x2 A- I3 V& C
  309.         UpdateFile2.clear();
    2 f1 K! i8 p8 w* S0 _
  310.         UpdateList2.clear();
    , `" g; |3 f- a0 G9 m6 Z
  311.       }4 q9 G3 ]# ^5 m3 J
  312.       if(UpdateFile1.size())1 G3 i2 p% m4 C' B5 g
  313.       {  O2 j, K$ K) B! C( ?* N7 w- I8 i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  G# w. e. @0 q2 n* v& ~3 X+ c& \
  315.         {
    % n% r3 L0 Y. b1 a+ U
  316.           file=(*p).second;! P, e8 \6 L9 B- [5 j; U
  317.           free(file);) ^8 @7 P6 W0 ^
  318.         }
    * v. U& q! b& l& {% R7 e' B/ {
  319.         UpdateFile1.clear();9 m5 B* P  _" i: m) ~! d
  320.         UpdateList1.clear();
    7 [1 t( R2 N2 |
  321.       }
    ' I- K- d4 H2 b5 Y& U7 R  J7 W5 L
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));9 g$ N/ x+ R( Y3 ~+ M3 h
  323.     }2 o5 y( j% F+ D8 `/ y' m; y% W
  324.   }6 N( T: W. V% |9 C
  325.   return FALSE;3 ]( Y4 Z6 g% v4 H: k
  326. }; i) l# n* |8 e, y' f, K
  327.   Q0 ~3 }5 T; U2 j( N& `  a
  328. void CRevAppApp::ClearAll(void)
    8 [7 g2 W, ?7 ^, w5 U% ]1 u/ J+ `
  329. {
    # l, A2 C5 c! u$ t
  330.   LPUPDATEFILE file;9 c/ g3 m2 a- m, h8 R% d. s( T9 a
  331.   std::map<CString,LPUPDATEFILE>::iterator p;3 n, D: H& y) y' p" _
  332. 7 L5 O  B4 N* `4 a6 L- D( q/ p5 q
  333.   if(UpdateLocal.size()); n# _5 }$ }% ~1 P& J# a/ K9 T
  334.   {
    1 i) I9 h3 W9 ^, A$ _5 h9 g6 P& D
  335.     UpdateLocal.clear();
    4 @" s) B: ~$ Z3 P: b
  336.   }
    1 |) k; p: E0 Z/ u, V
  337.   if(UpdateFile3.size())
    + E2 Z$ [/ z* R' I# O
  338.   {
    3 e- i  R4 M. {  g. l9 `. ?
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 P6 U# [5 J0 w
  340.     {" o& W. Y: U3 K  h
  341.       file=(*p).second;
    + ?# ~( U% \* n) J
  342.       free(file);
    . J+ W1 ~" W4 g$ ?6 L1 c/ C4 x
  343.     }7 k% }$ U" h5 ^
  344.     UpdateFile3.clear();8 \( S& p6 o/ ~- X  e
  345.     UpdateList3.clear();* y8 u3 b2 Y" |, r) h  f
  346.   }! }4 _1 F# ~  x* O4 n7 p
  347.   if(UpdateFile2.size())2 i# G! }. i, j
  348.   {
    + C9 |4 n' w# a7 N+ t  A
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); z, _# b) G# ~* F4 o2 g" u  m- W
  350.     {0 I) t% h# {, Q) I9 K* t
  351.       file=(*p).second;
    8 G8 p( T  K0 p& i0 o2 _
  352.       free(file);+ a: o7 b* U6 _+ O0 b
  353.     }; q% c" q4 k; F( L
  354.     UpdateFile2.clear();
    9 q! x* [2 x6 P3 k8 c/ G
  355.     UpdateList2.clear();! a9 C6 @% F2 U0 c& O& S% c. D0 i
  356.   }- V+ Q$ _( D: m5 \% ?! k+ ]6 p
  357.   if(UpdateFile1.size()); N5 V+ S, {; J" I' E" U1 C
  358.   {( ~7 j1 Y3 y8 {9 F
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 J  {: P( W( f- c
  360.     {1 F1 Y) }! Q/ b9 [
  361.       file=(*p).second;
    8 z  ?' H" I* B' v4 p! O" J1 a
  362.       free(file);+ |" {1 j% y- Y" L
  363.     }
    + y  K" Q+ X4 S/ v' M
  364.     UpdateFile1.clear();3 [/ n3 f8 q/ z5 Z/ m9 `
  365.     UpdateList1.clear();
    4 \$ f$ L. g4 W* k% ~
  366.   }- z: \  k; V8 x# Y
  367. }  ) I3 I- r) N3 ~) z+ W
  368.   
    # p( q7 z2 @+ K/ P2 Q
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    4 V4 L+ n) r  i2 \) A8 o" \
  370. {# Q1 f- n8 J* `) _+ G* Z
  371.   int c;0 E: u( C- r6 V# U) E9 \* S' ?
  372.   LPUPDATEFILE file1,file2;
    ( \4 }& u% n. o! {: T
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;: y) w5 ?: I6 I( a! R% u6 ]% C
  374.   std::list<CString>::iterator l;
    + Z4 E+ {: N/ M5 P5 \9 v
  375. 5 E. L, B8 n' h- f
  376.   UpdateLocal.clear();
    * U) w. }( N" l1 T  \5 w! T& e, b
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 |$ v) V& F3 f9 @* n1 Q0 b+ i
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    % i: k! ]3 Z$ y4 S' U5 _
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    9 [  x+ g5 s4 S
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    1 D) n. ]* B/ e' j' C
  381.   if(UpdateFile3.size())  A& y; u) l& V7 E3 m
  382.   {
    ' c. D: a9 ]5 @, A$ `: f  B* l
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    9 u* o* N, e- J+ g* n0 K
  384.     {
    , b' x; z( L/ a( C9 P1 e. L" h8 b
  385.       file2=(LPUPDATEFILE)(*i).second;
    ) g: g% h' M  b! y, o/ g
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    . p/ w0 H8 Y# N0 Z2 q
  387.       {
    ; A: S) R7 k" H4 B- D6 d2 ~
  388.         file1=(LPUPDATEFILE)(*p).second;# i4 T9 F! M( e5 e
  389.         file1->vers=file2->vers;& o" n- a* _' a# Y
  390.       }3 P/ X+ t% {0 y5 y2 w2 ^
  391.       else
    - s- Q! N5 w3 I; c
  392.       {
    7 k5 G1 ]& W3 s4 Q$ v
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' y8 p- c5 N9 q2 y$ o
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ) v3 w7 y# t: O0 I0 h
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));5 _5 G5 @# B/ H+ U/ C. N
  396.       }% ^6 @" a, Q; F0 u
  397.     }, u1 \2 }8 |7 E$ g& i
  398.   }
    : O3 @. b5 u# A3 f7 b
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% ~& m$ n2 }8 R+ d5 R# E
  400.   {
    0 j4 @: Z% V4 L* F' l# e8 Q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())+ F% p2 a7 s$ ^: F
  402.     {
    5 h  r) N4 C$ }- F( T7 m
  403.       file2=(LPUPDATEFILE)(*i).second;6 U$ ~7 B  w" L8 @
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()), Q* @# N6 {: e7 L
  405.       {
    ! N& t0 X0 H7 O2 ]8 i! F
  406.         file1=(LPUPDATEFILE)(*p).second;
    ) X% i/ m. X/ f- E  K+ h0 v
  407.         if(file1->vers!=file2->vers)3 l: F2 m& \$ ]0 Q
  408.         {4 B$ I. |( H* @  J) ?" A/ Z* z1 C3 h
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 O" V- U6 \' G0 b+ s4 {  x) ~
  410.           c++;
    6 r8 _: Z: Z) y
  411.         }/ Y/ @/ m6 L6 j: e; ]+ _
  412.       }
    ! u3 ?5 T9 A3 }1 Q! ^  ~' u# O
  413.       else  `0 l- D) j, s4 D6 y9 y
  414.       {0 d" S* n" p; l* }9 s# b2 D
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' m5 O' J7 t+ v% L) b, R9 X
  416.         c++;7 V4 b& g* K: n% a7 C6 |( H
  417.       }
    5 X1 a6 U6 Z! e9 M0 D6 H
  418.     }
    8 t4 b) k& T; J0 G% {6 X
  419.   }7 r4 ?+ @! Z6 H5 ?8 Y8 i
  420.   unlink(".\\DownLoad\\update.txt");# Y4 D: u5 _6 C- q% v* A
  421.   if(UpdateLocal.size()) return TRUE;4 C4 A* ^- f) d2 Q$ y
  422.   else                   return FALSE;; j$ @: ?! u7 C& \2 Q8 R+ w7 I
  423. }+ W% P7 ^4 t$ K/ ^9 @7 w9 U

  424. % E2 a1 h, r& e7 b0 o" ?
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"* R6 w' I% Q& B
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"2 @0 f4 i- }/ E$ {

  427. & ~; b' v- X4 D8 z0 |
  428. % n* P/ p; a/ F/ Y  j( t. U

  429. & k; k4 H3 I$ w/ i" h6 D
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile). }0 z) I$ d1 g% Q1 K9 Y
  431. {% V; K. ~$ ^0 L4 [6 \2 G
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;0 `) ^  u" t7 A
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - t- ^+ B2 p  R; |% n3 z" W: W4 V
  434.   {
    # Z% k0 k$ v% Q+ X
  435.     char szLanguage[50];" z" v8 ^( q: A5 T! ?1 t0 k
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    $ i( T. k: P# |% J3 g, d, u
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; T; |; O5 p6 y9 X9 D# I( w2 J
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 E$ }5 c' W" c8 m) e: @) d! \. y
  439.     else                                   m_iLanguage=ENGLISH;
    . q1 e2 Y) W' m" [2 U
  440.     char szRegister[100];
    7 [4 u: F0 w/ l, L
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 d1 J2 E% }0 L. u
  442.     strRegsName=szRegister;2 T5 H% q: ?( }- }6 c* k
  443.     char szPatchURL[100];: \1 a/ m: z8 n* O3 ^, h1 c
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ; |" D; z: s9 D0 n
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , |) F4 p0 F: z0 d
  446.   }' G# t5 t! q5 m; Z( C/ u/ E
  447.   else
    8 l! l3 T5 t8 O, w+ `" F
  448.   {3 y1 ~' u1 P$ i8 q$ V" Y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);* ]1 a: p( A5 ?
  450.     strRegsName=DEFAULT_REG_URL;/ G2 g2 z+ s0 H4 t& ?, I2 [, {
  451.   }
    4 D$ k+ ]5 n0 {4 t. o6 x  Z& o$ h
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    , ]1 s- G0 M3 J3 n7 X1 u
  453.   {
    7 F8 q1 b& b8 x5 q+ M
  454.     char szIP[50];. x& T% F& A1 q% j" H( O
  455.     char szDIR[300];+ i0 v  W3 u+ l" I9 r/ ]0 q7 K6 U9 W
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    - o  J. Q, q0 M5 k6 m8 h
  457.     {: e" |& g3 B3 J2 I2 h* j( A, ]' m
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");  ]  E+ R: ]6 ]- W$ n
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");- [! ?4 I9 y% z2 m4 L
  460.       strHostName=szIP;9 B4 \; O: z  X- O4 g
  461.       strHostPath.Format("/%s",szDIR);& ]& k! M4 w: `  B
  462.     }7 V& u5 D4 l- A$ s, {1 v
  463.     else2 c! |& i$ k& [0 H6 A1 R
  464.     {
    6 h8 f) B4 l8 T2 _% Z( v2 p
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 @, c9 Q- L) W% z% L7 ?
  466.       {6 a. E& F6 \2 n- n. y* L% @
  467.         char szLanguage[50];* }1 |; E' O5 P8 `) H' `0 ^
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 E3 U7 w, x8 C: c- ~
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: F# v5 e# G6 }8 d2 @1 z
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' V5 _1 C. J: i, V. F$ G4 }6 ^
  471.         else                                   m_iLanguage=ENGLISH;
    5 ]) E9 h5 d/ _, O
  472.         char szRegister[100];) x9 m8 K6 z1 I) q5 S0 I3 C2 |
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% ]$ R. R/ ~6 @2 e# ]. a# Z
  474.         strRegsName=szRegister;! t8 w" ]& s* |' J7 p
  475.         char szPatchURL[100];2 d- F2 r: c) P
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 v, G' B; y& o' [/ ^' q" ]1 B  ]
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);! D7 Q( H8 ]. t4 |$ l; q
  478.       }) }  H9 @. o: W5 X
  479.       else
    8 o( Z# a! v8 V9 _- J) f1 I9 p2 {
  480.       {, i" n7 V% B1 P' {9 D$ G
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + Q) p  L# ^2 Y3 K  z: h
  482.         strRegsName=DEFAULT_REG_URL;6 o7 F2 n8 B' Q  I3 C5 u
  483.       }
    0 V2 l0 }! k- a8 M" \9 ?, a
  484.     }  A0 H6 K- ^: G
  485.   }
    ) ~1 B. K  ^- w
  486.   return true;$ @$ n4 g% f0 P. |, ], i
  487. }- B" P6 @& V( r) U4 z! x' u  A2 \

  488. # I7 c% `2 m% G! ^$ o
  489. #include ".\ZLib\unzip.h"
    " f4 d. X* A  V+ K6 N4 {; W
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);% U& s- B4 o1 n- [
  491. /////////////////////////////////////////////////////////////////////////////% M3 E4 W8 v$ f* [0 C" x; T
  492. // CRevAppApp initialization
    ! u8 ^) Z4 S# w) ?: K

  493. 2 J  Y6 [8 U; q5 c
  494. BOOL CRevAppApp::InitInstance()
    2 f6 K' E& H$ `: k2 ]0 h& p' r, C
  495. {
    $ Y7 S  u4 v+ `9 X6 O
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    8 n5 _+ ?0 _8 m: u

  497. ) ?, J9 Q0 @# L8 R
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);  q6 l% n- U* G- ~3 s$ C
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    8 r6 `/ o4 |* n7 C
  500.   {
    0 o6 U9 y+ V. e; R5 }
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");3 c, q6 @) {9 T, }: ~2 V
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    + ?. e) J+ H. S
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))) ?3 z2 r2 Q0 @. n( L- x0 ?
  504.     {' \9 n; t  l; P# I$ N/ g
  505.       strcpy(szPath,szPathTarget);
    4 b$ X, `8 [) _9 \7 C) g
  506.       SetCurrentDirectory(szPath);
    ' ~5 `) Z( p, v, i0 w; |
  507.     }
    * I% u3 X# \% Z
  508.   }
    5 s& \9 D: ]7 |+ d; \) f; _& m
  509. #ifdef _DEBUG; ~# |) J% Z6 ^7 j$ J; K
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 |6 E" y; S% H
  511. #else) N; r: g# l1 u3 e" O
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 e2 H; t1 Y& V& w5 J6 y
  513. #endif5 a, [+ i) G4 a( V- O
  514.   {0 L0 F) q. g6 F0 o( n- O
  515.     char tempFileName[MAX_PATH];
    / s' a) N9 R2 Y. O* A* X  y" [/ P
  516.     strcpy(tempFileName,szPathSource);
      [: f2 t6 C- P9 x9 {) a& l- N) y) }
  517.     tempFileName[strlen(szPathSource)-12]=0;
      B1 q7 d4 W" V: ?% p. i0 t2 ^
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    1 U( O  t: ]* Z/ ]& r. I* _' c
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
      f7 i: ~+ e5 O* |; p
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);0 [5 T" F) z+ R* x+ _3 j
  521.     return TRUE;5 a( K4 `4 f$ O4 I) ~1 B3 ?+ R& b9 g
  522.   }
    % e- @9 k# O8 q# `
  523.   // Nuke 0118: Delete run.exe- B: o" f* Q9 {( O
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );, t2 \9 k: v" l2 @' X; X" k$ {
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ' q+ N# J: _8 ]/ p
  526.   if(!ReadCfgFile("Config.ini"))
    + B+ v  j( l9 O' R. O! J
  527.   {4 R4 K$ H$ r% ]) H' a3 F
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    & [5 F+ X( z3 }6 ~% I8 q
  529.     return TRUE;
    4 w' ^- a& C* S5 W. E
  530.   }
    6 ^. Y1 q8 D' D4 X$ V
  531.   HANDLE mutex;
    / C9 a6 ?5 Q/ Y: S  x* _/ M% Z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    " z" Y, i% ?! H2 }
  533.   {  R9 B" m2 l, k* d
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 R# i. [/ i7 e  W; T0 w* H
  535.     {$ D( }% u3 v6 p1 _* ]
  536.       CloseHandle(mutex);0 C9 S" t) Q+ w
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    4 n) B) }3 c, _' [' r) s
  538.       return TRUE;
    ( M/ {7 @( W4 V6 n% r4 c, x+ u
  539.     }
    9 P8 K& M, L- b" z, b9 t) Y
  540.   }  : u4 E+ D% L! q: ~- }. q
  541.   CloseHandle(mutex);" Q) v7 E& @6 K% C- ~0 e

  542. , @, Z! a' Z; M6 H4 ^3 H! B
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    0 S7 A8 t& y( K, o

  544. , a! x; d& @! ~# ^% n) Z, q5 r
  545.         AfxEnableControlContainer();
    % G0 T) D! k2 f0 Q5 B2 I
  546. $ m/ C. {2 s/ o- i# C$ f2 L
  547.   bCanUpdate=FALSE;
    5 ?( L4 X, g2 L4 y
  548.   dwStartUpSteps=1;. Z7 C' {* S/ ~. b$ j1 a0 G, Q6 P
  549.   dwProgramState=AP_NOTHING;
    , g5 Y+ |! M7 w( I& }
  550. ( X+ H5 k4 e! }' s4 y6 A6 m
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    * E! ~; m1 U1 l

  552. / M8 {$ @3 m3 T1 l& u! R$ m, J
  553.         // Standard initialization, G/ H' l3 v, g
  554.         // If you are not using these features and wish to reduce the size! c1 j% c6 N( X3 |$ w; e+ ]
  555.         //  of your final executable, you should remove from the following
      F1 U8 d. q& Z" p8 K9 T5 Q/ ]; C
  556.         //  the specific initialization routines you do not need.2 {! B: I# g0 s# }0 X0 m2 H4 }
  557. 7 d- H5 s2 c3 s/ r* M- e  r0 D5 v
  558. #ifdef _AFXDLL( \. N7 A, z; R+ @: k& G% I0 y: M
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL. U; N" f# D" W
  560. #else6 \  N  F; B% L, Y" D1 `7 c
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    6 E9 p( F/ H; T& J0 e" b
  562. #endif: |' V. K; h0 V7 {$ y( g
  563. ' d3 o4 B) b% ]* U9 D$ d' \8 f* y
  564.   dlg=new CRevAppDlg;
    ( z  {! e9 b0 ?# i
  565.   dlg->Create(IDD_REVAPP_DIALOG);8 Y0 u9 `7 k" w/ B/ }$ m3 H
  566.   dlg->ShowWindow(SW_SHOWNORMAL);4 N  l: U+ H  A5 ?. J
  567.   m_pMainWnd=dlg;
    ) k3 K9 u( o6 b  f; w3 t0 n: K
  568. 6 P. K8 |1 q" |5 n, P% N, O
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    0 a4 S- D: C$ b/ U0 m$ K' _
  570. 5 w1 b6 t9 z* R+ F  w4 R2 \) M- I
  571. //  GdiplusStartupInput gdiplusStartupInput;- M" U) ~7 ?$ H, J3 D% J
  572. //  ULONG_PTR gdiplusToken;
    / d) V1 R+ W! b& Z9 n( ^% H
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);2 y- C' ]+ T9 j5 o

  574.   O/ K2 i7 j! p9 g$ ^/ T  m! P; j
  575. //        CRevAppDlg dlg;+ f0 j9 E) ^; A0 V
  576. //        int nResponse = dlg.DoModal();0 ^; G% b3 |! E. e
  577. //        if (nResponse == IDOK)
      m) s$ l8 ]% |* j6 I* ?
  578. //        {$ u7 n- V1 [3 M" x$ X* }- G
  579. //                // TODO: Place code here to handle when the dialog is4 w% m! }9 c) ]) c3 O, T! Q2 ^' }" r
  580. //                //  dismissed with OK- w. H* T1 W' M) |
  581. //        }- N# i4 ^$ q5 ^8 s, g
  582. //        else if (nResponse == IDCANCEL)3 c1 R/ \1 X& J  _1 z) u' q8 C
  583. //        {: ]* m0 i9 Y, R# Y2 c" ^& z
  584. //                // TODO: Place code here to handle when the dialog is
    0 ]: H( h  z, X/ T- [, J' C
  585. //                //  dismissed with Cancel) ]  q# E, i! u( m
  586. //        }
    , Y0 A& x3 [7 }1 ?
  587. ' p. m! O3 M/ J6 D% I
  588.         // Since the dialog has been closed, return FALSE so that we exit the/ Z6 k, M& e8 L; n. P' h' t
  589.         //  application, rather than start the application's message pump.
    4 ~4 X) V) E; p3 H
  590.         return TRUE;
    ' c7 p& G; }/ V9 t2 S1 r
  591. }' M% n  ], W4 c$ c! w

  592. 8 F. a+ G% ~. M0 `9 }0 S" w; Y
  593. char *CRevAppApp::strtok3(char *pSource,char *token)- h) A  y! ^6 U' m8 v1 L. a
  594. {! G6 N9 i0 b! q  E
  595.   int i;
    ) |% Y: N. I* Z) j. @0 l  M
  596.   char *szRet;
      e. {! k  D# z& K

  597. - d" D6 L4 x) H5 z# J$ p# d
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    5 }( F, P- x+ ?$ Z7 @; k
  599.   if(sztoken)5 R$ W. G. m8 O6 |7 k
  600.   {
    % N7 J  |% W% Y1 L* u
  601.     szRet=&sztoken[itoken];3 Z7 O" v$ u5 j
  602.     while(sztoken[itoken])
    : N3 S7 K7 j2 P3 x
  603.     {6 t( I& Q6 H, g) F
  604.       for(i=0;i<(int)strlen(token);i++)
    ) \5 u% ?: h" y4 _* ^
  605.       {3 ^% t9 @* n( e0 Z8 c2 m
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])/ |% D! b0 R3 e
  607.         {
    9 f; E  t( Y( ?9 b
  608.           sztoken[itoken++]=0;
    / ]3 G8 F$ N! O, q' F) b
  609.           sztoken[itoken++]=0;  }1 @. }$ p- U6 W" n! U& t
  610.           return szRet;
    % [# u$ d. P+ c, K8 D, N/ D/ s0 }( O
  611.         }3 `( ^8 j1 k- W+ M/ V7 a
  612.       }! E2 h* ]" w% _
  613.       itoken++;
    # i" {% P2 w3 |5 P5 C* E: R
  614.     }& _% E) L- W$ f8 D5 }6 d1 [9 s
  615.   }2 s/ _# X9 f6 j+ X7 I
  616.   return NULL;1 G) J% c* L+ J% X" M9 ^9 X
  617. }* W% ~: w0 M' x6 Z
  618. ( @9 S1 z( I7 i: ]7 [0 Z
  619. void ProcessProc(long Total,long Current)) g$ X; j) ?0 l% n
  620. {1 k2 W( _  Y- }, ], A
  621.         MSG msg;: U- G; Z* N# j2 v- ~" C( h+ C% M  e
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);+ O3 M& @/ {! [6 B( p9 i5 z& y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    # |3 s  Y; U, s
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + q1 G* o! O& P# M0 K7 V
  625.         {
    % Y) i$ z. O$ j% e
  626.                 if(!GetMessage(&msg,NULL,0,0)); y5 E3 J8 F' e: S3 n7 u  J
  627.                 {
    7 y% ~: z) M9 u; |
  628.                         return;: y& s. w% _. [5 f$ p
  629.                 }
    & g8 u, \$ p9 X% J: ^) n1 l
  630.                 TranslateMessage(&msg);. H: |. V0 U9 O0 M# E) \2 e
  631.                 DispatchMessage(&msg);
    9 p2 `9 T: u; r- y+ n
  632.         }       
    - i. Z7 r. F" B% |2 b! f3 M
  633. }5 w# P: c" k* o2 N/ n
  634. ; S% _+ Z: s* ]) I! B9 d; ?2 ?: O
  635. BOOL bFirstChar=TRUE;4 `  g' P& {1 }$ a4 T' H. n* N  F

  636. . H! C2 f' E7 J& x3 U7 q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    + \! h' e1 Y& b2 J3 a3 z7 E/ e  m: l
  638. {
    0 ~' p* _  R8 B# _7 b
  639.         // TODO: Add your specialized code here and/or call the base class" X4 n- e0 Z+ M
  640.   switch(dwProgramState)
    1 F7 K3 ~" {" K9 N' d, D! L2 K8 l" ?
  641.   {
    $ |$ T: h3 ^# o/ a% k9 K) b5 W
  642.   case AP_NOTHING:! r! l4 l% ]) U3 a
  643.     switch(dwStartUpSteps)$ B7 a6 |8 o, ^6 P9 T0 M# U% e
  644.     {
    + D' i4 t' A& W; t" F
  645.     case 1:! E& Z* [  W1 R3 g
  646.       {7 s+ P7 }  n, F
  647.         int i;& B6 w& [5 o$ b# a: C
  648.         CDC *pCDC=dlg->GetDC();  @6 x8 l: q/ I. r2 x1 b
  649.         HDC hdcwnd=pCDC->m_hDC;; _; H: e8 i1 R9 i( B
  650. //        Graphics graphics(hdcwnd);
    " ?" k( i, g* `, X- ^2 v1 o0 {! Y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    7 M2 P9 S) b8 u% ]6 H
  652. //        INT iWidth=bitmap.GetWidth();: e# a0 |! K$ @$ h* G8 D  I
  653. //        INT iHeight=bitmap.GetHeight();
      r/ |9 Y3 M7 `
  654. //        Color color,colorTemp;* A7 r9 Z" u# P
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    - f; b8 r0 F6 w( o( c% o5 F: u# O
  656. //        {# {* ~- u8 a3 I# W6 ^3 G: V+ u: k
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)" l6 T9 f2 Y/ a" }  N: K$ E
  658. //          {! E5 |0 a2 s, g9 J1 ]
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ! o( m0 M; U% p" a
  660. //            colorTemp.SetValue(color.MakeARGB(
    1 e: Z8 Q. Z4 y/ q$ }! k+ M
  661. //              (BYTE)(255*iColumn/iWidth),& m) \" U1 ], k* |
  662. //              color.GetRed(),1 f" J, U4 Z3 c; g$ K8 k9 d6 g7 l
  663. //              color.GetGreen(),# V' l  h0 R7 L% h! t9 S9 V0 f
  664. //              color.GetBlue()));. M' {5 \8 j# s
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    + q+ T5 @* i  c# p# V7 f: @
  666. //          }
    ' [# P4 z5 E  ]: u# J) ]
  667. //        }
    * s) Z* p9 z; M- L! v9 J
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);7 j1 p) b  b! j9 {
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & q7 J9 h  N5 X0 V! V; l) \
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");* k7 X% j6 r: f. A( }* g
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 u& M: I2 \  {! c" L- e
  672.         for(i=0;i<240;i+=8)
    9 R9 C0 S2 |+ Z4 E! m
  673.         {
    9 \" p1 v! `( l! n  K
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);4 q0 z# Y8 G: A# _* Z5 W) J
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . i6 Q6 r& s- i2 Q
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      L5 ^1 X0 y: n; S- j% E
  677.           Sleep(33);$ l3 k# k% X, Q5 b0 B. o9 u
  678.         }
    " n4 H3 j/ k6 N2 k$ m4 C: [
  679.         Sleep(1000);+ A- \& Y0 R( P
  680.         for(i=240;i>0;i-=8)9 j. R. s+ l3 ~; d( c5 F* n
  681.         {
    8 C7 f- w4 q+ X1 s
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; ^6 t" o: d6 t# \2 G
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# K- \( V8 W* Q7 Y. i1 }
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " @# X& \' |  m
  685.           Sleep(33);! c0 u4 R& O) _) E) Z
  686.         }
    - l) x6 x5 Q7 W# S8 Y
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);6 g0 N/ S$ Z5 r' w' u; j
  688.         dlg->ReleaseDC(pCDC);% q5 g% ]& |4 o
  689.         DeleteDC(hdctar);( \7 z' b, Q. Q, s5 N4 C
  690.         DeleteDC(hdcsrc);
    ( h# t6 f  ?4 m; b0 v5 x: C' t% T
  691.         DeleteDC(hdcorg);) o1 U/ M* T' N
  692.       }7 C* c9 Y5 Q6 O: |. d1 S) K# U
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);: q8 N5 V+ J* j
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' Z8 \' d1 `3 l% \4 x
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    8 ?; ]* t' y* H, i% C6 V% E
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 O1 p3 [" Q: n
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( l3 _4 ?7 j/ g. f2 k" N
  698.       if(!Dn.Connected())0 s; M4 q; f5 p: |7 T; f7 n4 E
  699.       {3 D- M4 j% U' `3 J# H
  700.         dwTotalFiles=1;$ A- H# \% J8 L% c6 T- J
  701.         dwDownLoaded=0;  @* _2 @5 |  {9 q
  702.         bSilentStep=TRUE;; O4 v: Z) A9 a# ?( e" |
  703.         bCompressed=FALSE;8 O! R0 O5 o' F* i- F
  704.         strExtLocal.Empty();
    % f% |0 x+ \) n( [5 }- \, x
  705.         strFullName="readme.txt";
    ! k0 _/ O& G1 }2 Z
  706.         dwProgramState=AP_CONNECT;3 n; r1 e- T& d, Y9 A$ N8 L
  707.       }
    ; n4 k# H1 _' a8 w; ?/ G0 t0 B
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    2 {, r3 N0 p& w, b# h6 G& k
  709.       dwStartUpSteps=2;7 B3 ~, C2 _+ \- i: h
  710.       break;3 _( L# v! J2 }; j
  711.     case 2:( r: ^( @6 S; o3 ^) P! O
  712.       {
    1 y; Q! S# M: b7 {! m' h$ p
  713.         int iEOF;
    5 n/ \4 [! R  c& Z) }5 O& a
  714.         FILE *fp;
    - J( x9 [2 {$ W  @! J
  715.         char szString[512];
    , e' d0 U  a: a  U! ?+ V
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ; O% c& P' R( E
  717.         if(fp)
    ' ]( j) B0 e+ t8 q
  718.         {* R3 [- P- Y" P) z' N( R
  719.           do5 L0 ?3 Y+ ]* W9 {- Y2 `+ ]
  720.           {
    , }+ Y( V0 o# K: d( {. Z/ i
  721.             iEOF=fscanf(fp,"%s",szString);
    * ?$ @6 s5 _% g0 s7 {, o+ C
  722.             if(strlen(szString))5 u: f# _% D7 m
  723.             {/ t, s; I, e' q' ?9 x; B' x' K
  724.               if(bFirstChar). d" w, h/ ~3 @( i$ a
  725.               {, @; n: u0 C4 M  H4 z
  726.                 bFirstChar=FALSE;
      p5 z: b  J1 n3 J; C" t* j
  727.                 bConnectIsBig5=FALSE;( ^; D- A3 T, Z( t2 U: v# O
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    . T. N- c3 u7 E$ p6 V& x
  729.               }2 z8 b! T0 C6 L; _% E; q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    , i% ^, s# G! L$ @* M1 g
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));- b; V; Z' i7 ?% d  u
  732.               dlg->m_ListText.AddString(szString);
    0 F' s' Y+ r7 g" ?& V7 H
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # S1 K) H8 P4 ]0 [3 C; A4 U, z
  734.               *szString=0;1 f1 Q, w" Y, v9 e# K8 R
  735.             }2 g9 D& ~1 G  l3 I* n5 L" }) y
  736.           } while(iEOF!=EOF);
    6 X, ~1 K, p1 g# V% n
  737.           fclose(fp);2 U: h' \5 h. a/ ?; q) m
  738.           unlink(".\\DownLoad\\readme.txt");
    . K7 h2 I( i: C# S, v
  739.           dwStartUpSteps=3;
    / H5 l2 r9 K) M  d
  740.         }& `* O5 x: N0 \9 {/ T, [7 D* {5 x
  741.       }
    # Z# F4 \9 i' f% y3 a' r! n$ E# k+ `4 l
  742.       break;
    3 F, a. ]) b) a
  743.     case 3:
    ) q2 K9 w; [7 A
  744.       if(!Dn.Connected())
    4 h. S3 o. D2 b. i1 m3 I
  745.       {
    ! {7 E4 I" m0 \$ M, D
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    / F- V4 J& W3 Y7 a2 O# M
  747.         dwTotalFiles=1;
    - N( n- R4 a6 Z3 z
  748.         dwDownLoaded=0;: M1 D5 N- B6 ]4 O9 G2 E
  749.         bSilentStep=TRUE;
    , t& u0 M* Y: N' [* h
  750.         bCompressed=FALSE;' t/ q4 P6 p- a  {
  751.         strExtLocal.Empty();5 A) V: }# z4 N. h' S8 u: ]
  752.         strFullName="checkversion.txt";# w; X# A8 V- }3 |& g: B: C. n
  753.         dwProgramState=AP_CONNECT;7 Y3 X. `- y7 G% ?8 y
  754.       }
    0 _) N& G" {  `$ y! O' R
  755.       dwStartUpSteps=4;
    ! d# S; N# F4 N: O
  756.       break;
    - V' s6 M0 X5 }# a
  757.     case 4:) G, M$ b% ~$ V8 P) b3 ~3 k
  758.       {
    ) Y8 Q  W2 A; p+ |: }" \  B
  759.         FILE *fp;
    5 D) z" ^& A* A; Q6 H
  760.         char szString1[128];, Q, m7 l4 V' L6 H' D9 u" v; E2 e" Z
  761.         char szString2[128];# ^) X7 Z1 Q+ h# Y+ M
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");0 \* w1 k* b, T$ z
  763.         if(fp)3 n" _# b5 M8 I7 r
  764.         {% B" [/ d+ v7 E: z
  765.           fscanf(fp,"%s",szString1);
    3 y9 B, S8 L4 ]5 G! f$ K
  766.           fclose(fp);! d. O( c' B5 j+ o- t. C% ]
  767.           fCheckVersion=atof(szString1);
    ; O3 j( Y+ Q& s6 G/ ]* u
  768.           fp=fopen(".\\checkversion.dat","r");  p; v* d' Y: v. M
  769.           if(fp)
    4 d3 J. R; P1 ?$ P4 f
  770.           {
    1 `1 a7 O* I  d: |1 Y
  771.             fscanf(fp,"%s",szString2);
    & s" [, D" `! K! F3 W, P# G
  772.             fclose(fp);+ U! [) p+ ?; B1 _0 [  Q& P
  773.             if(atof(szString1)!=atof(szString2))
    ) Y4 |/ r* J' y% E
  774.             {
    ' F- Q* Z  a" }5 N2 _: U- K
  775.               if(!Dn.Connected())
    ( C0 t! m! G/ L
  776.               {) i( h8 [* F2 H; N9 Q
  777.                 bFirstUpdate=TRUE;, F7 W# `4 L/ d' i; f* \& j
  778.                 dwTotalFiles=1;9 ]6 B& y8 C, V( a
  779.                 dwDownLoaded=0;
    + W9 v2 e5 _( h. S( j
  780.                 bSilentStep=FALSE;5 `8 ~) T# }0 h$ p
  781.                 bCompressed=TRUE;" \) W# V# f/ d5 Q& _/ M
  782.                 strExtLocal=".\\DownLoad\";) H5 c) F& O( B3 p7 {' s* y/ p7 S
  783.                 strFullName="update.txt";$ ]* N& _* S  {
  784.                 dwProgramState=AP_CONNECT;
    ( S3 T* a1 A: ^7 S. G
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");. V- w( `% B: W, M" G- n
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. V$ y0 |. J6 }7 ~: K
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");* x1 j- X0 d& A' @7 Z
  788. + p# M2 `3 x. N& [" k! v' |3 O* C' V$ X
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, s6 p. g5 z8 i0 ~
  790.                 unlink(".\\DownLoad\\checkversion.txt");. S) P" \/ ^3 N  l4 D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    & K8 v0 y  z5 ^; H9 x* n3 h; F& ?
  792.                 {& s4 z  p9 T$ R; s2 T) {6 F+ a. S
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");9 Q# j- q: }3 }' {+ C
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    , w' i$ M+ P$ r$ ^$ D1 ?
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");+ O, M+ f9 L/ a2 R+ \% S9 L7 Y! B9 n
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! }5 o* q2 b' D! {0 i& F8 }; v
  797. , o% ]) O; S. A2 l( y# c* F+ P0 `& [
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 ^3 K, p7 [; `  ?5 J+ A5 k
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  H/ A2 g3 n/ O  v* I* S% k
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");( m8 s2 L$ T# M( r3 L" m7 J5 |2 t5 Y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 o5 f. k3 H  q: c. }
  802.                 }  H  C8 P) E! W4 W9 k
  803.                 dwStartUpSteps=5;9 K$ ~1 S) c4 T6 L8 p
  804.               }4 ]" c# I* d) _
  805.             }& Q! e: ?4 [5 w
  806.             else; L& u4 b5 z" f) ]3 y
  807.             {+ a! U7 C- i, {: Y1 [
  808.               unlink(".\\DownLoad\\checkversion.txt");7 o$ n9 w+ j% C( E
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ p6 {: W$ d$ I
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / F3 v* a- e' v( E4 R4 M5 [- _4 r
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    , [0 w1 K# A( |" N% |- q( h
  812. ) N/ |3 F  ?: a* `
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 _# C, A& B' k/ T
  814.               dwStartUpSteps=99;
    ; G7 w, J5 T  h3 K* x; v
  815.               bFinishUpdated=TRUE;
    / u8 j5 o& Q: y3 p) R, H3 G( c. c& F
  816.               bCanUpdate=TRUE;
    $ W; ]6 L7 i) i: m
  817.             }
    9 y: u3 y) u+ Q& A. W. v
  818.           }
    . U7 w- I' S% Y! M, w3 q# |) B+ p
  819.           else# c9 q+ }/ g7 K% Y8 M
  820.           {) ~  x- ?% T' _& [) u
  821.             if(!Dn.Connected())0 G8 @6 J# c5 R) _
  822.             {
    2 `6 y% M/ C8 z9 S* n* [
  823.               bFirstUpdate=TRUE;. ~) M* t" W( a! ^! H
  824.               dwTotalFiles=1;0 {( r* o( m1 m- r# M, M1 X
  825.               dwDownLoaded=0;/ T2 ]7 l8 w! K7 z
  826.               bSilentStep=FALSE;( n' Z# r+ Y* f1 B
  827.               bCompressed=TRUE;
    * u3 A1 [+ n; p' k% L0 l8 ?% d
  828.               strExtLocal=".\\DownLoad\";; x4 Q8 e( Y" v! C# U
  829.               strFullName="update.txt";' U5 c- J) X6 B
  830.               dwProgramState=AP_CONNECT;% I) {, }8 p+ g$ ^, P
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, C; R8 V% E, n
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( t; l0 \' S4 P- g/ \+ H# B
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ( r) D4 w5 Z0 H: Q5 I  c
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, M* l5 s# J) W) i; }& C# P; z
  835.               unlink(".\\DownLoad\\checkversion.txt");  E6 ^; z8 d" G; n4 H8 W% `
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    7 m! @# s- o* \* Z
  837.               {+ ]: b0 u! C- ^
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");) v# B* Q; R. H! [$ b6 m$ I
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    % R! ?- H; S6 y. T
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    9 \  P" T, D) S6 H
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ {' o2 f5 V& P4 x
  842.                
    ) t/ z: N# q# `1 c; N6 J
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 _& H6 X9 n  W
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ( B$ y: ~; q8 z# x
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");0 X# \. y7 j' k6 b, E/ ~5 C: K0 b
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 k$ C' v# X) ]' U  }# \4 M
  847.               }  K! g: f( [9 w3 w
  848.               dwStartUpSteps=5;9 r* a. m+ C9 E/ v) V6 f
  849.             }
    " G# P7 w7 l2 E7 q( {, P* d
  850.           }  ~4 G( {' ]9 k4 e7 R$ H8 ?1 |
  851.         }7 ^5 l! U, K. a$ @% J0 S
  852.         else
    & ^- H1 ]2 u) s
  853.         {
    - U- C; v7 z6 v2 h3 B
  854.           dwStartUpSteps=3;* n" V: {/ y- g+ P7 r
  855.         }
    7 V) L; T" V$ C- R
  856.       }
    # z+ ^) r+ K% I4 ~5 B4 B
  857.       break;
    0 H+ L! ^$ A9 B3 j0 A
  858.     case 5:
    . }/ {& w4 F% z, G% E
  859.       {0 Z# r+ Q3 k' ]
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    8 m9 J  r  D, i& Z3 ~- e) V5 F4 E. \
  861.         {: ]+ w. {, F$ w. q. t+ i$ p4 u
  862.           int opt_overwrite=1;; p0 [  ~0 y6 {. w
  863.           int opt_do_extract_withoutpath=0;8 _3 l) O9 x8 v" t/ m) V/ ]1 n
  864.           unzFile uf=NULL;* A& d7 L# ]1 y# g' N

  865. + {( o5 }& Y- a4 t) R: a5 i
  866.           uf=unzOpen("Wsa.zip");
    0 Y0 d$ T" ?* K/ I9 [
  867.           if(uf)
    4 a8 c2 c2 ^9 n8 m
  868.           {) X' \5 q7 N1 U7 N
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);3 m' k5 e" a7 M; E1 o
  870.             unzClose(uf);
    $ [$ A9 D' T5 f( `2 [
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");3 }- ^! w- _5 I+ {5 E
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");. s7 }5 D+ N# m
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");7 n0 E/ k: m: Q. C. B0 B
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ Z- S& w2 ?2 ^6 P' A. ?7 x
  875.           }
    / v. V, g& B7 F2 Z9 Q2 F
  876.           DeleteFile("Wsa.zip" );" V3 W, c: F6 X2 x' ?3 }
  877.         }! S" K3 e) ?2 ~6 H

  878. 1 ?' S+ u5 F; e2 t. h) X0 s% p: z
  879.         if(CheckLocalVersion())
    # R  E" [- ?" b2 m. j; ^
  880.         {
    3 D! R" P) ~7 B8 M- _
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");9 }" Y" W9 v/ D: [- p% r
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    . _4 P8 c% d. r' ^/ \, ?% j4 t
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");6 X; p0 y/ ~7 S- X: a; K$ d
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 u# G2 r4 Z2 r/ S& M2 G- Q  O; u
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);3 _! z  x4 l* F, [2 Z
  886.           dwStartUpSteps=99;! W, P5 Y% W1 ^1 O. s
  887.         }; C+ j  K( f, r
  888.         else
    9 Z. O* D" C5 w+ s  a2 h. ]& e
  889.         {
      V  T: k0 z* I/ w& y
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");; B. O8 P: Z4 ]+ X2 x0 A2 u  S2 u6 l
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ @6 g4 N; R( L6 k
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");7 D; I6 Z4 W% Y) `' t0 C3 d( J2 f

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

評分

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