找回密碼
 立即注册

CSUpdate.exe源代码

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

7 E0 s! a& J0 {% R/ @; e0 ~
  1. / RevApp.cpp : Defines the class behaviors for the application.
    0 {; R# n5 F" a/ f  \! u
  2. //
    / n% S" K8 k5 {$ t; x6 z
  3. 0 d1 ]) z6 t! x' o
  4. #include "stdafx.h"
    6 a5 i# \0 f" z% \% ?% S
  5. # z7 ~0 R& [) G7 j; l7 k( R
  6. //#define UNICODE
    + e9 p$ |2 W6 z+ l/ [
  7. //#include <gdiplus.h>
    5 X/ a* K% @# O" O! ~
  8. //using namespace Gdiplus;
    1 u/ s2 [2 `, Q& }& b

  9. 5 D  Y/ g/ E# s1 D. c4 S9 l0 {
  10. #include "RevApp.h"/ g/ Z; w# i* N6 X0 b' \
  11. #include "RevAppDlg.h"( L- Y+ I9 s9 n3 R
  12. % B# c2 Q% A! J; x% R$ \
  13. #pragma warning(disable:4786)' {0 Z/ \, h+ Z9 G8 u
  14. #include <map>$ q/ t+ U" W& @3 O2 i. Y; H9 S
  15. #include <list>
    / f2 G- x+ r# s$ L, t
  16. #include <direct.h>$ S+ E7 Z2 d9 X  K) m
  17. , k, R( q: R5 H( A- Y$ _$ |- ^
  18. #ifdef _DEBUG
    ( v6 y( t; X) I  R% Q$ o9 G
  19. #define new DEBUG_NEW
    / f/ S, p5 m, F* ^( S& X
  20. #undef THIS_FILE* Y! ^: N9 B# n
  21. static char THIS_FILE[] = __FILE__;
      m4 J9 [$ C) D# |5 e/ F( r6 X
  22. #endif
    , J7 J8 w* ^% C3 P2 X/ [) u
  23. #include "SkinResDef.h"
    9 X3 u4 l5 M% Z  [) V8 |6 d2 q* _2 z- l
  24. #include "ChangeBG.h"
    1 Q1 q- \; F% {' s) {' V% f# O* B  c  q( A
  25. #include "AFXINET.H": e! F: C2 m/ V' H) z

  26. $ f' s% F0 [7 ~, E+ x, J) o6 c  O
  27. #define TRADITIONAL_CHINESE 0" \1 D5 `& b4 w1 }+ Q' x
  28. #define SIMPLIFY_CHINESE 18 M$ F3 E6 N4 f2 O2 m
  29. #define ENGLISH 2
    8 X1 ?$ v# k' L6 i( e/ H  n
  30. int m_iLanguage = ENGLISH;: h5 l/ V5 {4 _9 [% j: [6 C
  31. /////////////////////////////////////////////////////////////////////////////
    7 E! u3 @* `7 G$ u, ?. W$ ]  c
  32. // CRevAppApp' ~6 t3 Q% k  o( O0 o3 ^6 o% {

  33. : p! `3 ~& Z$ n& r# E1 Y4 @
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    + z2 k% o8 g+ e5 _: A: c  M1 Q
  35.         //{{AFX_MSG_MAP(CRevAppApp)& }0 A1 K3 c# L
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ' `  w5 k* F$ c% a
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ) V6 y8 O+ D) t% x0 n! w  e  {
  38.         //}}AFX_MSG  \6 h. K. N) Z( w7 w2 l
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)" {+ O) D/ a0 }! F; L- |( o
  40. END_MESSAGE_MAP()$ J# A/ D0 a7 }( m$ D
  41. / l! c1 u' ?; S; e2 C
  42. /////////////////////////////////////////////////////////////////////////////
    ( b! o" O/ I' A& ?
  43. // CRevAppApp construction
    & G8 V0 M) S/ K5 V1 }/ A

  44. ; t0 w6 P7 M& h
  45. CRevAppApp::CRevAppApp()/ m1 o! D3 n3 W! T: S$ t
  46. {9 F2 _- b. G4 \+ g
  47.         // TODO: add construction code here,/ y! F; r6 M2 J# y; O( V; y4 J
  48.         // Place all significant initialization in InitInstance; ]' K- I* |( |# y
  49.   bDisplayIsBig5=FALSE;3 G( y# d6 |. R
  50.   bRestartUpdater=FALSE;
    - D" g$ ?3 j7 {+ ^7 B9 A4 f
  51.   bFinishUpdated=FALSE;
    ! k' E. j) n1 B8 P  ^  V# D
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    3 C9 p0 |9 I9 n# Z- @) l
  53.   InitChangeDataBig52GBKS();3 y( |3 c' l& p4 n8 I
  54.   InitChangeDataGBKS2Big5();
      C7 H" F3 E; K5 L
  55.         //
    9 B; ~( N8 \2 n) u6 h( ^
  56.         bClickRunExe = FALSE;# G' M; i6 K/ y7 V9 u
  57.         //
    / Y" x8 ?8 V! z5 L
  58. }- ~0 f( d% K* b9 s) s' j9 b

  59. 5 H+ z) G# e+ X& v* x
  60. CRevAppApp::~CRevAppApp()- D' R6 Y( l2 g
  61. {# G% R* K: Q0 ^) E# ^+ [7 }; W
  62.         // TODO: add construction code here,
    5 |3 ^  g2 N0 V( ~# z$ t
  63.         // Place all significant initialization in InitInstance
    % X/ ?1 ^+ o. n
  64.   EndChangeData();
    ' O; K5 v2 e3 y# h3 L# V
  65. }
    8 W9 S" s, J2 _& U! n9 I' ~0 e

  66. ( [5 c6 n; w% P; D, J3 b  Z% ]
  67. /////////////////////////////////////////////////////////////////////////////4 |: u1 k8 e: h& @0 |
  68. // The one and only CRevAppApp object
    6 @! I9 Q; k- e- D  b
  69. 3 F! B6 H+ e7 S/ F, L8 o2 Q
  70. CRevAppApp theApp;
    5 s; |( _: a/ m8 V

  71. 1 n. l! d$ _/ E) u/ M
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    - q) g9 \3 U- @" N# _
  73. {
    ! j  x. G- ?  @& q7 w* Q2 M
  74.   int iEOF=0;
    1 T' ~* U% d% F; w
  75.   char szTempName[MAX_PATH];* o" O- U/ c7 ~  P: N- i9 \1 O
  76.   *szFileName=0;5 O/ o! p) K2 ]
  77.   iEOF=fscanf(fp,"%s",szTempName);3 ^3 p0 D  }$ h; {) b; R$ r/ P: C  f
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')- N/ c7 ]: K# l, u: Z" s* h
  79.   {9 V; h! b0 v6 h8 R* Z) F1 q
  80.     strcpy(szFileName,&szTempName[1]);5 u2 v% N3 ^; s8 p; [% B, }0 g# p
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
      f7 K! M  v5 K) r/ l$ i
  82.     {
    $ ?% r- ]+ n" ?8 R
  83.       iEOF=fscanf(fp,"%s",szTempName);
    # c& G- x8 G' c3 ]
  84.       strcat(szFileName," ");
    0 p6 S$ m0 e* y6 L& c" Q& |
  85.       strcat(szFileName,szTempName);
    6 ~& f, I1 I; W- _, F
  86.     }
      H! _$ [1 E/ Q1 R) t
  87.     if(strlen(szFileName)>=1)9 I! B; ?6 X4 x: Z
  88.     {3 b- N* @0 A) y, n
  89.       szFileName[strlen(szFileName)-1]=0;
    " u& Z! U2 l3 k( m2 ~+ h% Q
  90.     }
    5 ~+ f2 |. ^4 f# l" v
  91.   }$ }/ ?' w4 u' p7 [( b7 p) u
  92.   return szFileName;3 f6 m" I9 L1 L# W0 @
  93. }
    * ~7 S  U( \1 m. ~7 p7 ]

  94. - M9 Z+ G' ]8 f3 @" @
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)) W3 V( S# S6 f
  96. {1 B4 u( Q/ l- h3 T
  97.   FILE *fp;4 _4 T& B4 C- Y! C9 e! I
  98.   char *key=NULL;
    # Q" X9 f" J* t! ]9 M
  99.   char version[MAX_PATH];( c/ P, k: c/ \& F9 `1 `
  100.   LPUPDATEFILE file,olds;6 B  W- K" ]6 T9 |/ M( j
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 F' B2 D7 H' r8 V4 H
  102. / p3 ^5 A+ t+ T
  103.   UpdateList.clear();
    ) I8 r. b* N( g- n, X5 u+ O- k
  104.   UpdateFile.clear();! y8 v& d4 I$ k1 X7 d$ S) D
  105.   if(GetFileAttributes(filename)==-1) return false;( G3 H6 }! O! l0 Q2 H5 k
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ' o: @7 }5 G/ f6 G
  107.   fscanf(fp,"%s",version);1 S5 q( z1 _* _' z
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }5 q, e. R# X. C
  109.   while(fscanf(fp,"%s",version)!=EOF)
    1 g: L+ K; i) V5 i7 V. I
  110.   {; l% \* d  G( X" S& a. m9 S& p
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, Q8 L: f  f( a! ~3 _' R' x( \
  112.     fscanf(fp,"%s",file->path);; l; b6 {6 N; F6 h% i/ U
  113.     ReadFileNames(fp,file->file);
    - I3 K6 y) B, d) y9 d
  114.     strcpy(file->full,".");' o" F: g- J8 E3 [* J
  115.     strcat(file->full,file->path);
    , |7 G- p; W0 N2 [8 w9 \6 i. {& O
  116.     strcat(file->full,file->file);
    ! o, a7 |: v% T: H3 ~& ^3 x
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())+ R& W1 q5 Y* ~% s
  118.     {
    6 z$ C0 L$ Z- |( G9 ?$ M) H  b5 K8 @
  119.       file->vers=(float)atof(version);
    5 k6 B6 w3 p& h/ L  o" o5 C7 J' `
  120.       UpdateList.push_back(file->full);8 e( f* S, `# k0 f/ ?  M
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));9 e1 p' }5 z5 n+ T( T! D$ Z9 D) i9 J
  122.     }% F6 L! O  Z7 A3 H( e
  123.     else
    8 D; M  E( p$ E( @
  124.     {: \. D3 y# U% X1 x' {4 Y
  125.       olds=(*p).second;( b3 v$ |) T3 n6 L. l; M( ?8 _% t
  126.       if(olds->vers<(float)atof(version))
    0 q: F4 n: T. b1 v
  127.       {
    ' Z' M; G. F! I2 I6 n1 s
  128.         olds->vers=(float)atof(version);+ a" }3 O" h5 c. j% W5 j
  129.       }
    5 g: r. I: C7 i6 k, @$ @9 ^/ Q
  130.       free(file);
    - j! M: W+ B7 P2 W2 T/ ?
  131.     }  T( N# d3 }1 W+ U
  132.   }
    # g# B7 S$ n- O! r+ b1 Q0 k
  133.   fclose(fp);
    7 t) o" |; U& G: c
  134.   return true;/ }- p! W* N" X' Q4 o0 c1 X
  135. }  ~) c6 G, E7 y. X2 T! F/ b

  136.   k9 w: }3 G; J- i. k
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    + |- n; Z& w( C' `, b2 _, n
  138. {
    3 [9 R( ]$ u; l  _: B0 D; w
  139.   TCHAR  szFull[MAX_PATH];
    * J, p+ _* U4 T( T- I8 ^( Z
  140.   TCHAR *token,*inter;
    ( B6 b4 `. A# C1 r( `: P( s
  141.   *szPath=0;
    9 y! J3 e& Y- F: S( G2 X5 P
  142.   strcpy(szFull,szFullPath);
    / E5 d2 ]  N) C) i7 [; {& C8 |
  143.   token=strtok(szFull,"\\/");) I$ [( r2 A7 |0 H
  144.   inter=token;/ ?) |1 z9 }/ r- D7 n: l
  145.   while(token=strtok(NULL,"\\/"))
    / w1 q. k) d+ u+ R
  146.   {9 d0 Q6 |' ]  M% n2 F& s9 u  m
  147.     strcat(szPath,inter);
    " ]& f" J) C6 A# A, N* g# P: ^
  148.     strcat(szPath,"\");
    ( i6 t3 L: F( N. |. a/ v' K
  149.     inter=token;
    4 j5 c# e8 v: L1 e& G
  150.   }4 C' k# y  m& c
  151.   return strlen(szPath);
    - ]/ t2 [- z+ R
  152. }: ]( j+ ~+ J+ b, c: i3 Z" v; l

  153. # C* G0 T- E  s) f% I9 x
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)) g3 _" H3 \5 p8 J! K# f: b6 \
  155. {5 j; Z. `+ S" Z  Z3 f
  156.   DWORD attrib=GetFileAttributes(Target);1 M- P* b9 q' b+ ]' F
  157.   if(attrib!=-1)- C- o% v% f1 ]% u0 [/ X
  158.   {
    + Q0 }9 Q1 J2 t* Z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))6 L7 t  V+ t5 b, h% C
  160.     {
    1 D' i6 u; B5 t5 d$ ?5 J2 q
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);8 M- ~5 L3 J; _% M: ^4 t
  162.       SetFileAttributes(Target,attrib);
    * a: ]3 H8 ^$ R# o% h% z4 O5 y" [- G( p
  163.     }: [4 X0 {1 |8 \$ g$ w* \
  164.   }
    6 q+ T6 g9 J+ m( P* P0 {- q
  165.   CopyFile(Source,Target,Erase);
    ) ^  u2 F* N/ }- q, `" ?
  166. }
    + B% I1 k# O, S, W, D
  167. # C- K/ U7 q' \) w5 E6 m; D$ H
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ' o9 ]6 R: v0 O" k
  169. {( V6 B1 ~9 @2 z" R! m
  170.      FILE *fp;. ^$ a% s2 M  f$ N) T
  171.      char  szBuffer[8192];5 _6 e" ^/ u6 T  u# ?
  172.   va_list  argptr;
    ) A. X+ Q1 ~) G, B& y
  173. $ A/ _0 @3 D; y  C& ]
  174.         va_start(argptr,message);! h9 q: u; Z# V' y+ ]
  175.         vsprintf(szBuffer,message,argptr);  U& Z* K5 B( l5 |5 r* V
  176.         va_end(argptr);2 x% N" r3 y8 N# C6 i
  177.   fp=fopen(FileName,"a");
    # O+ m0 L$ A! M& ], ]
  178.   if(fp)9 s0 x4 s) }+ \& Q( p4 V6 m5 _
  179.   {: L. k6 Y8 x# T0 q# X
  180.     fprintf(fp,szBuffer);
      ^8 _( U$ x+ P( C5 H9 U
  181.     fclose(fp);- n4 ]* ^3 b. F4 k& D5 Z
  182.           _flushall();; d$ t- J, H, ^8 d" y
  183.   }/ o5 k# Z1 q( L) ?4 H4 E0 r& I
  184. }
    : d& X1 [( W% C7 H

  185. ' U+ r! r4 @) a5 L( m2 }( C
  186. BOOL CRevAppApp::Fclearf(char *FileName)6 W3 \0 i( J9 d8 G% Y- c+ A
  187. {
    : a' c0 }& \2 S% N
  188.      FILE *fp;8 U  f( F0 a& W% D" b
  189.     DWORD  attrib;3 q* c, g7 G) A. t3 z2 r; [
  190.   attrib=GetFileAttributes(FileName);( r9 G/ y& o) b* h4 L  Y
  191.   if(attrib!=-1)) q, ^; O7 G$ K* }
  192.   {  F/ ?: u6 {: t! u& i
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);2 D4 U  S/ r3 f2 D. a7 v
  194.     if(!SetFileAttributes(FileName,attrib))
    , O' |5 X8 {9 I/ h" x
  195.     {& C/ b8 l) \1 M, r# I/ H( h. h
  196.       return FALSE;* |8 {; I& J% ^* y* P/ {
  197.     }
    2 x, [. C9 o# z3 g2 F8 s. o
  198.   }
    4 U  g# r' P* ]
  199.   fp=fopen(FileName,"wb");
    ! r3 r5 h/ D, P
  200.   if(fp)7 _) B- J/ C/ h* i" }
  201.   {" x9 B' U  ]( `5 ?# H) c
  202.     fclose(fp);
    $ P+ u$ Y9 _9 x0 W" b9 v2 D# T
  203.   }; \+ D3 s6 Y: {) G% ^7 J/ N
  204.   return TRUE;
    6 `/ f* y7 }- s6 g
  205. }  x3 l0 n! M8 F$ y; `
  206. ; V" o# z3 _( b; W
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ) r1 `$ X2 ?1 h! L1 i
  208. {
    : O$ L" A. \' r. @
  209.   char filename[MAX_PATH];# b2 v( A5 ?% ^& ?$ s1 `
  210.   LPUPDATEFILE file,olds;
    * ?  Q1 L8 a1 \( n* k' a7 d
  211.   std::map<int,CString>::iterator i;0 ~; ?9 T  |* |$ p+ Q& u+ w
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! F8 m" Y  a. A9 }1 g
  213.   std::list<CString>::iterator l;
    ) s1 O0 t, q2 w. Q- x
  214. ! s! L* y* ^  d) `) y" `7 U
  215.   if(bFirstUpdate)
    : I( f% P8 A% {% G
  216.   {4 ~* K/ E. ^9 w# t! [2 W2 M
  217.     dwCurrFile=0;
    $ M1 a9 f) ^+ ?4 D8 _/ b) l
  218.     bFirstUpdate=FALSE;4 s) x+ _  Q8 ^8 }
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 F( Y# f' N( |
  220.     {  A4 K4 P& T. E
  221.       dwTotalFiles=UpdateLocal.size();8 x8 D+ H% o% E: d- c/ n
  222.       dwDownLoaded=0;% J0 a, l3 ~; d8 {* c" I
  223.       bSilentStep=FALSE;5 D/ ?4 h5 T  `% u
  224.       bCompressed=TRUE;: f. T: u/ N9 J5 |8 o/ i, H
  225.       strExtLocal.Empty();
    3 x  B4 H1 r' f  n! D2 p) {
  226.       strFullName=(*i).second;* n4 d7 \( C/ v% t8 C1 q% k  Y- t2 {
  227.       dwProgramState=AP_CONNECT;
    ! q$ m3 C# P( `% U/ @
  228.       return TRUE;$ i. [% x3 ~1 ]- P8 O( x/ f( w
  229.     }
    4 P7 w+ x$ ]; _2 S: g  Y
  230.   }* m6 J1 Q2 z# Q6 L: K0 y9 l
  231.   else if(bRestartUpdater==FALSE)
    . `; t# N; `" s* j: A
  232.   {
    + G+ t) F* L$ _8 h7 d8 _. E
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    0 Q7 I$ I% B' ?
  234.     {, _0 _) ]* D: f) K6 w
  235.       file=(*p).second;8 J1 W. ?. p$ A# K
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())3 A* y7 G% n- r) m
  237.       {$ ]+ p2 y& x+ J( l. {) b$ W
  238.         olds=(*p).second;5 {- [) m6 c  z7 K3 `' g% r1 D
  239.         olds->vers=file->vers;
    ; W5 q1 g& C. y( r+ k% c
  240.       }
    2 L: M( u5 l0 G# n% _: h) B
  241.       else1 v2 H! L8 ?  y! }  q
  242.       {
    ( K9 {- \. S8 v8 n0 S
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + c5 B% K! g& v" E9 G5 p
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ; p5 q8 v+ R& P7 G, n+ w7 K+ b
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));, o) ~; L# n1 H6 F9 W; G7 d
  246.       }
    3 e+ Z) C- j5 J, ^
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ' g; H# {8 t  P0 K* o
  248.       sprintf(filename,"(%s)",file->file);
    3 ^2 f$ @; s: K  |5 D. v6 e
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. s8 X2 m' d* G" z# ]$ u
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ! \7 j, s& Q0 ?% k  k5 f
  251.     }
    , o' u" n  L, a7 A( ?  w2 l" c
  252.     dwCurrFile++;
    $ B; N' _  H- J# u! n1 j
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) c" {/ E) H' K$ u$ R& w
  254.     {) K: D' H9 u3 F3 i
  255.       bSilentStep=FALSE;
    ( ?- D, ^' f- R" f) J* y
  256.       bCompressed=TRUE;2 f+ N$ P5 {' I$ O5 m8 E
  257.       strExtLocal.Empty();
    5 y/ _, P  Z9 I- Z' o# q
  258.       strFullName=(*i).second;
    : D7 B  q) U8 k, W8 S, s
  259.       dwProgramState=AP_CONNECT;
    6 v) Y% r& |0 [8 c% L2 M4 q$ N
  260.       return TRUE;  u  `) |: o1 m  d' I( Z9 ^7 r- G
  261.     }
    ( q) ]7 h* G$ M$ e
  262.     if(!bRestartUpdater): T# g: l3 ^- U+ N" @6 `- d
  263.     {8 j% s* W0 F% }4 X2 p8 C$ ?
  264.       int iCurrSize,iFileSize;
    . c5 [  ]0 c/ ~" q& M# H/ W
  265.       iCurrSize=0;
    ( s) Y- R& V# R; d3 d" w! d
  266.       iFileSize=UpdateList2.size();
    7 k! T' y6 o- ?, x
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    & l+ _6 Q1 S* M. @- [/ S9 |2 R; i
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");/ t  G& A4 b4 a* c% q7 y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    % M) c% S% r+ l0 V& u+ s3 M" E
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 R+ I) V, [$ M- e6 E$ p, Y
  271.       Fclearf(".\\update.dat");
    , T  _( O' O4 d4 V, h8 l; B
  272.       Fprintf(".\\update.dat","Bloodyf\n");$ k$ J: z0 ~3 O( s
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # ~' \& E( s- g4 x# j1 S5 U
  274.       {
    6 V% T5 D" S6 e( G5 r$ c
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    + t1 b2 x* m' n5 T5 g" K7 L
  276.         {$ Y- x: X; m! ^: s/ b0 z& P
  277.           file=(*p).second;0 B; g: b0 o- p4 }6 j; e
  278.           sprintf(filename,"(%s)",file->file);. x1 g, b& n" p3 A8 ?
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);5 ?, Y( r7 P. M0 N; q* U# p
  280.           iCurrSize++;- u" e" P: c& N6 Q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));- T  n/ W* _3 ]* t7 P, U
  282.         }- ^( l) Y  Z! O2 {5 Q8 ^! Y: _
  283.       }% w# l* ^  V( Z5 D- [: h
  284.       unlink(".\\update.txt");
    4 ?8 R  Z! u1 `/ I) ]8 r+ P& g
  285.       unlink(".\\update.tmp");: g) ^4 R- O3 \1 F# C
  286.       Fclearf(".\\checkversion.dat");# C; @2 o% I+ J- ^* {
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);$ d1 i" _; g- D. Y5 M
  288.       if(UpdateLocal.size())) ?8 c; f- B2 r8 p4 r# Z0 f
  289.       {
    ' D8 I4 U' B! u8 a5 V- \9 E: a
  290.         UpdateLocal.clear();
    # @  K. U- V& j3 r! @# t6 w, T, y
  291.       }
    " A. l7 B" C8 p2 Z
  292.       if(UpdateFile3.size())6 o8 S" k/ K1 n) J8 P
  293.       {
    1 b9 _- x  \0 a" p9 R7 R. k* M+ q" i
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! s1 K9 ~3 X3 S6 M
  295.         {
    : M  S) Q5 I5 A
  296.           file=(*p).second;0 H4 x! k$ |$ y  |
  297.           free(file);/ t( ~+ L1 y3 f1 m( D
  298.         }
    0 Q" x: y' `  ?  m2 [! _' B3 X. L
  299.         UpdateFile3.clear();# o, x/ q4 q- H. C. \: a
  300.         UpdateList3.clear();
    1 j; h( H5 d( ]# p) G6 W' l
  301.       }
    & \! {% K, J( ^& F
  302.       if(UpdateFile2.size())
    : ?( I% _" @, s; W0 L. E) U2 z) j
  303.       {0 t; _+ {; z1 W+ H, R
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)5 U3 X7 G0 A7 W+ D; \
  305.         {( S" o7 P) b* `; h$ w: i
  306.           file=(*p).second;5 z* L# N# D% T* H+ ]% F; X
  307.           free(file);
    + `! A" h* S* ~
  308.         }5 ~( ~  F2 `  O
  309.         UpdateFile2.clear();
    9 @; A: `2 I3 a" S; k
  310.         UpdateList2.clear();3 c& f1 H* Z3 C% r+ Q
  311.       }
    1 V9 y; l7 x5 Y0 E! h
  312.       if(UpdateFile1.size())5 i3 E! }' {. K2 t+ L$ @
  313.       {: ]0 j# T/ J( O! S0 ^- s4 G
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++): l; J9 t4 m, n; o( L  z
  315.         {1 a' F/ u, F' A3 n* |* h
  316.           file=(*p).second;
    % N- @* D+ w( V0 O/ `9 Z' d% t
  317.           free(file);
    9 b2 {$ s' X% x- w
  318.         }
    , B% U) @$ I8 ]1 ]# \+ E
  319.         UpdateFile1.clear();
    % g" L: Z; {. w/ \3 F
  320.         UpdateList1.clear();
    ; i3 Q: X& T# E
  321.       }
    0 R$ m$ }6 ~6 W; J2 G( V
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));5 y  c- g- g. n0 A
  323.     }) i1 v/ U. V7 @7 N6 Y; z* I
  324.   }
    % i9 z! X9 u" x. b( h" }: f
  325.   return FALSE;
      r" d' S- y7 K6 }9 V
  326. }
    9 ]& k7 z: q+ N# E% o, t8 z

  327. 4 \% H* q4 K( S4 x7 q+ F
  328. void CRevAppApp::ClearAll(void)
    5 Q8 X- F, H5 a% {1 L9 Z1 f
  329. {
    & X, V$ N' r) F+ m3 @" @; s
  330.   LPUPDATEFILE file;
    * f; q6 ~, b9 ?
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' W  R& W+ `0 A/ C; c0 C, t9 ?: d

  332. " M* z! W6 W, G+ H7 {
  333.   if(UpdateLocal.size())
    " M7 g, g: L4 ]$ a8 q: i
  334.   {/ c7 `, a! B' Q7 Z" }  o0 X
  335.     UpdateLocal.clear();: N* X2 ?5 ~7 x: ]
  336.   }
    * b, O8 E7 q7 V# |7 I! `7 X
  337.   if(UpdateFile3.size())% N# P# e6 J1 B  u
  338.   {
    / z2 l0 t# Z2 [/ t+ r: D
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    $ P) p* S4 Q1 S$ d* {" d
  340.     {
    ; G0 l. r* `7 K" ^% v. Q
  341.       file=(*p).second;: `& M6 U5 d) Q* N
  342.       free(file);
    0 V% _! U2 s5 M4 ^3 @0 T! y9 M% _) l0 d
  343.     }0 [  b# C9 D3 a$ I6 k
  344.     UpdateFile3.clear();' e3 C0 s2 e- r* b$ T9 b3 S6 m+ _6 _
  345.     UpdateList3.clear();* L8 E* w5 s$ D7 A: R
  346.   }
    ; L! Z3 n: w( z4 v( X" S& Z" {) G6 e
  347.   if(UpdateFile2.size())8 i/ u) w; G/ ?( v1 H! d% t1 G2 ^
  348.   {( U3 b) c" Y9 J
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 {* O) d3 i# q( l  W4 d# |
  350.     {
    ; B. ^5 o- ?! W9 H& s- s
  351.       file=(*p).second;1 N. ^7 P' @% m% R# B8 q
  352.       free(file);
    ( d$ h! W/ W2 ~. q9 }3 Q
  353.     }
    , t/ q$ M6 [+ B
  354.     UpdateFile2.clear();  t) f/ _& f: W% K' z, Y4 l6 Q
  355.     UpdateList2.clear();
    - n. X0 m0 r7 W6 D9 ^: d$ E
  356.   }
    * e( ]! W- e* G
  357.   if(UpdateFile1.size())5 b' V" k5 V& I* a
  358.   {
    2 y, i+ N5 [5 }  w  P1 v( y8 Z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' }/ Y0 B4 ?) |- ]
  360.     {
    + b& G' T) i" y0 l# \% f+ |
  361.       file=(*p).second;# _5 y1 d. m0 M% E. n/ m
  362.       free(file);  G0 u; `+ N. `" _
  363.     }8 `6 w# z* q: N/ ]9 S
  364.     UpdateFile1.clear();
    0 [1 W: C3 R! g6 r, E- v; ]1 g! T0 H
  365.     UpdateList1.clear();3 U" r7 Y- J/ b# d/ O3 M
  366.   }
    & v& B; \0 a  S' @
  367. }  
    , f' O  \9 s* ]
  368.   8 r9 o; o2 D7 u7 |3 a
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    . X- C2 }$ n2 l# _8 i9 F
  370. {; m6 ?; h" g0 M
  371.   int c;
    / X2 m& ~6 @* x
  372.   LPUPDATEFILE file1,file2;
    8 K: g9 M& j6 [. J: S* ]
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ' ^1 ^$ g# |. O/ @1 ]0 u) ?
  374.   std::list<CString>::iterator l;
    0 c# e; [: ]* t1 X
  375.   u% Z! F; B! e4 `
  376.   UpdateLocal.clear();* x/ f# [4 n, @$ d" \$ M
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
      T; }3 ~9 l$ _6 s
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);0 u" T& ?9 C/ H2 u1 J" g
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);5 P& u# Q5 \6 z6 b6 [
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    # [) n4 G6 ~! w' |" ]  x6 x, v
  381.   if(UpdateFile3.size())9 u) [  {9 R, e6 o5 I" `9 Q7 U; H
  382.   {; l( ]3 [' h0 U
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)$ }  N0 B0 x! p7 m) x
  384.     {
    & ^- k' R9 s1 s$ v/ i+ w; e
  385.       file2=(LPUPDATEFILE)(*i).second;
    0 Y, {9 r# u5 \( R0 B
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      K  C; V. O4 G" q; w; S0 i
  387.       {
    ) D( m# b. C( y2 e
  388.         file1=(LPUPDATEFILE)(*p).second;
    ) O2 v8 u' y6 U4 {9 J: ^0 m& [
  389.         file1->vers=file2->vers;
    5 h0 n2 d' Z( b$ C1 I0 e5 x
  390.       }
    ! @) |6 J- c" @* g" v
  391.       else
    & I4 S4 M* v$ Y2 w* y+ Y' F
  392.       {: k  V( a: e2 Q7 U4 ~6 i
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 a( j! O$ l0 A5 \) U! j
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));+ W9 V" W6 \& |3 M3 }
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    3 \' i5 H  z7 L
  396.       }$ n0 ?% Q- I& h4 Y0 x
  397.     }
    : e8 j( L6 r3 F1 q
  398.   }
    $ S' Z8 P% g; w' S; o2 n# Z1 G
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , `  O7 x# l" d8 U' B# {
  400.   {
    ) d, Q* w* B) Q# s4 I1 g) E" D
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())' ?1 E* n8 E* P) ?2 e3 L
  402.     {5 }7 R( x; [6 Z8 Q0 R5 e
  403.       file2=(LPUPDATEFILE)(*i).second;
    3 S% y5 z) K0 R3 i" Q" Z
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())- m: X  J0 P/ [$ G9 m! l& A1 O8 [
  405.       {
    % u, h3 g5 V/ S/ r5 w6 Q, s
  406.         file1=(LPUPDATEFILE)(*p).second;
    + z" `6 g9 x, D- p$ j* X# A+ |/ S$ @
  407.         if(file1->vers!=file2->vers); I* q* h" }$ o3 r0 O
  408.         {: u+ S! @6 b; X3 o( U, s5 W) r; v
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 Q3 S+ s9 y! I" O
  410.           c++;) ?% L7 C8 ~6 A; t# n$ c+ h: i
  411.         }) {* V& @# S/ f' f1 M0 r8 c6 B
  412.       }
    7 j% k7 j5 U: ^5 |
  413.       else8 d3 l) N5 ~6 _$ i6 H+ |
  414.       {
    " f( K8 E5 y* X/ A
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 s7 L, d! n) F! p9 G) P7 k9 v
  416.         c++;
    0 w; L/ l8 {4 H- j
  417.       }9 O; \( k6 x/ E/ N! B0 p
  418.     }
    : I6 w9 W6 Q$ ?7 k
  419.   }
    # u7 {. o) f' i( U4 _( M# e2 y
  420.   unlink(".\\DownLoad\\update.txt");7 m9 ~9 e" U9 p
  421.   if(UpdateLocal.size()) return TRUE;. m7 @* V0 x: g5 f2 b1 K1 Y
  422.   else                   return FALSE;
    / t/ T1 X( K7 o7 r. H+ q% t
  423. }, }6 y; i; z. C0 D% K  d* L0 U

  424. + g0 h2 O' u2 z9 N
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ) `$ C9 {. n; R
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    + O. U# |4 m3 E

  427. + _: ^4 q+ n: ]4 v+ _+ H

  428.   ]# f+ D/ d2 T; s' d1 O0 J0 X8 o
  429. 8 s8 m4 i9 N# G8 c
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    + K# W9 A! \% Y. P
  431. {* ^) _: L! s5 g  ?: i* L0 h0 ^9 _& s
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    - I% O* K/ }" N9 G0 M6 f. T) B
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 x1 x8 A- x( P, {! q+ {0 v
  434.   {
    # }( E# m9 {# m4 U9 k% j" k
  435.     char szLanguage[50];" \8 c" X2 G$ t% ~
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ ?! B( D5 F3 S( \
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    / t5 I* ^, f% Q4 T; [2 N5 s+ y
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# I6 {9 d, k; |9 V2 l
  439.     else                                   m_iLanguage=ENGLISH;' ~& N% n4 O( y- ^, t; D: ?9 Y- V6 |
  440.     char szRegister[100];+ E6 N0 O) `9 w1 d- g) \! U
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");# W2 y+ M8 }/ r
  442.     strRegsName=szRegister;
    $ c1 T& w* l( F8 \3 a& b2 K
  443.     char szPatchURL[100];% s& r! \5 g5 z& }- e6 |
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 l" d" U7 i. e, J' Q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      A3 k1 h% g/ Q5 j0 s3 c" Z
  446.   }: _8 i! Z) v2 ~, X8 N/ C
  447.   else
    - n" I! j5 P6 i' U9 O- l
  448.   {; a! A8 A/ _0 y  ]% G5 m
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ [: @7 }$ X7 S6 J2 T& N2 X
  450.     strRegsName=DEFAULT_REG_URL;/ B& ]; X0 w) {) y
  451.   }, U% e* f/ H+ X
  452.   if(GetFileAttributes("hosts.ini")!=-1), g( x; Z. w& G1 Z8 O: t& c
  453.   {
    4 i! t5 Z/ s2 j, G% e: q
  454.     char szIP[50];
    / @% `8 W6 `4 C. T, @' ^
  455.     char szDIR[300];
    5 [7 `. x8 P- u3 g0 y; n, K4 M
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))3 l$ ~6 K7 m  S7 n. }1 b
  457.     {$ C6 g, i) m7 O' K3 J. o
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");/ T5 R4 J* r, q; z, `6 @
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    6 G  Q6 P8 I; V
  460.       strHostName=szIP;/ l& o6 s/ x. \+ |. w6 [- ?
  461.       strHostPath.Format("/%s",szDIR);
    ) l. ?6 h. [8 B. I
  462.     }: j. H0 r7 v6 B6 F6 o, B& ^
  463.     else
    8 Z4 U- @& e' N3 n* ^- N' U# L
  464.     {# N* |1 D9 y2 x% X& e
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % _9 V- P+ Y0 Q% X
  466.       {$ H6 {# c( m3 T4 S
  467.         char szLanguage[50];6 }/ }/ U, S. }
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 S( h9 B1 x4 F  J7 W4 w* D4 b3 t
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 p) N( p# [( n3 ^7 Q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. l& J7 D9 e2 d8 ~& C) Q& ~
  471.         else                                   m_iLanguage=ENGLISH;. Z' `1 b7 m' w
  472.         char szRegister[100];% k. w; H: R: O; Y; i
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) x& r1 {; v, G! U5 G, R1 \
  474.         strRegsName=szRegister;9 D: D' o, a2 A* v! y; g
  475.         char szPatchURL[100];/ k, k9 ~2 o7 Q5 c7 l8 n
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . G4 o5 L5 p* y  [
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- `8 l& y  x) y6 f5 v& l
  478.       }
    7 G; e/ C' J7 x# M: @5 [. b! y% B
  479.       else; N# d/ Q" T. ]1 G$ \# W
  480.       {8 o9 f: X# Z6 n$ z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 H- s3 }: i7 c+ s2 b
  482.         strRegsName=DEFAULT_REG_URL;% k, b# O  |0 W
  483.       }- t$ ~% `' }% x$ P0 Q
  484.     }6 h% @/ `* Y( Y: I
  485.   }
    7 z- X2 N3 B& T7 F7 M. M3 ]
  486.   return true;4 }" w- |) F7 p: j  h% Y- }
  487. }
    $ j4 c( J' |5 p6 F( [! u; N, Q
  488. 0 F5 M  c" [! b
  489. #include ".\ZLib\unzip.h"
    ) K, [7 _. n! l* b* u9 b7 L9 b5 c
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);" u/ C* q5 O2 G# K, I
  491. /////////////////////////////////////////////////////////////////////////////! ]) Y9 i0 H& _
  492. // CRevAppApp initialization
    : R, \0 t2 M# k. M" `/ H: |

  493. ) k. d7 F% I0 j, X, p  D
  494. BOOL CRevAppApp::InitInstance()5 _' ~- K$ i$ v
  495. {
    6 D* ~; k- X# C# Q" n& M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ; l  ~& u/ g8 V6 N1 J4 Q9 r

  497. - K$ h2 _( h& t# n9 R% [
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ' g* [1 A. t2 K- H1 I1 `' r
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))* s& C, V! s4 e. s
  500.   {
    4 n9 s9 @2 v6 M; f+ b
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");5 M# c/ ]; U6 Y5 P
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ( H/ U$ t: ?: u1 {
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))8 O4 C5 O$ _, q" G
  504.     {
    1 e0 `' Q/ g- D# F0 r' E
  505.       strcpy(szPath,szPathTarget);
    5 `) r  f( z0 Y6 @1 q4 R3 e
  506.       SetCurrentDirectory(szPath);# @1 G& }0 K8 a1 C/ `5 l
  507.     }
    $ y# I- b5 h  @/ F7 g" r4 k
  508.   }$ n) D/ ]# @6 U/ l# O4 C
  509. #ifdef _DEBUG( c8 T" Z6 T6 W; D2 |5 m
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! W; r! D8 ~7 w4 S4 E
  511. #else1 W0 z; e4 i$ f" H! h
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    : i3 }; A* ~) ?; n% U, G
  513. #endif) I' z' G- M  C- o2 o9 Q
  514.   {% I0 p  l5 J' ?# H; |# A
  515.     char tempFileName[MAX_PATH];1 m9 b- i9 E5 n  i& F2 x' k
  516.     strcpy(tempFileName,szPathSource);* W6 \2 D: h3 l, W3 d4 r& A
  517.     tempFileName[strlen(szPathSource)-12]=0;
    / A- m! f/ Z6 |% }0 r6 {
  518.     strcat(tempFileName,"\\$CSUpdate.exe");& ]! e6 Q6 P- d
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);$ o. T2 o7 k- d. z
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ( H9 P! u& Q3 J
  521.     return TRUE;. P2 x. v0 z. |" K# g1 L8 Z
  522.   }% }: k' F5 Q! Z! b( i4 b1 Q
  523.   // Nuke 0118: Delete run.exe
    * Y6 X$ J# b/ E
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    1 B9 M( D' I5 V+ F' j" }
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    - \2 }+ ~7 s, H+ y+ g9 u* x/ w7 {
  526.   if(!ReadCfgFile("Config.ini"))
    5 w0 j3 X6 q8 E+ g" Q" {" m, p
  527.   {
    ) y* E7 E! D6 q- m& l/ U8 s/ T
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 i4 k% a7 [* J6 B. w' n0 o: K
  529.     return TRUE;
    1 |; X! T. q2 M! Z
  530.   }) C7 T/ B7 x3 P9 ^
  531.   HANDLE mutex;4 _3 m9 t) P/ j3 U8 Q3 x! G- `3 M. L* W. ]
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))+ z, T7 [' C% v9 N1 V! H
  533.   {# J4 u$ C) A" p
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)* E6 \! S- U8 N/ F  Y
  535.     {
    ! |: T* W1 f! `6 a7 G1 D/ d
  536.       CloseHandle(mutex);( e/ E! ]2 ?( e; y' m8 j3 V4 b: n
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    % o# M0 _7 O4 H: s
  538.       return TRUE;
    2 c# ?( ~$ i% ]! D0 ^% z  g
  539.     }6 W3 B) o0 [( V
  540.   }  / U" A3 B0 v: r# }  r1 G
  541.   CloseHandle(mutex);
    . b7 {, R2 l# M, y6 z1 h
  542. ( ~  M- R  z1 j& A1 e3 k. B& J
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ! s" |* K8 \2 B$ K/ N% _$ b
  544. 4 Z  D3 _2 i4 ^" P1 H/ [2 y
  545.         AfxEnableControlContainer();& H; H6 q# S- V1 s8 g. T5 |: u

  546. - B+ N7 B: l* _" e" v1 Z+ K' e0 W/ }
  547.   bCanUpdate=FALSE;& j# O: W" K$ D- v7 O
  548.   dwStartUpSteps=1;
    7 o4 _' J; F' d& w% j# W% F
  549.   dwProgramState=AP_NOTHING;
    2 o3 r1 Z4 H  S
  550. * o# z% J8 D4 e" E- G
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. W% O3 |, l$ f. _# g& G
  552. & ?& r6 ~% c! |) w
  553.         // Standard initialization
    5 z8 l# D" e3 I: i  c& x% D
  554.         // If you are not using these features and wish to reduce the size+ r# s( m2 K+ n. C6 U
  555.         //  of your final executable, you should remove from the following
    5 H# f+ _3 j8 v" Y+ A
  556.         //  the specific initialization routines you do not need.
    ) n: C$ }4 @* Z0 h6 w- `# O

  557. 2 _1 Y* K  Y# ]" k; ?
  558. #ifdef _AFXDLL
    * O+ n; x8 j& @) m
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    8 n/ i: ?" t' {$ e4 m( R( Z0 x
  560. #else
    & Y  i. N  i0 L/ A* _
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically/ I) A  D, Z( H( V
  562. #endif- K2 u* a- r) x% g0 H
  563. 9 N: ]7 k! v9 a
  564.   dlg=new CRevAppDlg;
    : H& Q+ k0 [+ h  e
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    5 M' W! b, E2 x5 F
  566.   dlg->ShowWindow(SW_SHOWNORMAL);+ ]1 P) Z. R- o( N) P
  567.   m_pMainWnd=dlg;
    ( z0 L9 D% Y4 k) C

  568. / ]( t7 d2 D7 u3 s& i
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 @+ g/ J' a, @8 W6 _2 g' y

  570. ! w6 ^* C3 q" E5 _7 b8 E1 F3 m
  571. //  GdiplusStartupInput gdiplusStartupInput;
    7 K; C" v& K% m- \9 M+ G; A
  572. //  ULONG_PTR gdiplusToken;6 r6 S0 \2 W! `: s* }
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    2 X# J/ p1 v2 Y( t5 @

  574. " ]2 r6 P9 x3 o" b0 Z/ ^
  575. //        CRevAppDlg dlg;
    ) R7 C0 M$ w- R% o* `" y
  576. //        int nResponse = dlg.DoModal();  s. ~5 F7 n6 T+ V
  577. //        if (nResponse == IDOK)) O3 L: E) o7 {0 v, l6 j! K
  578. //        {# R9 \! i6 @9 V; i% I- s$ z. \
  579. //                // TODO: Place code here to handle when the dialog is
    9 A& W1 f* W" x1 O  s
  580. //                //  dismissed with OK
    9 ~' t; ~: W/ M7 i* D2 T) F/ y% r
  581. //        }+ G5 {9 D/ M: A( R
  582. //        else if (nResponse == IDCANCEL)) X; _* g; `4 D; C& K
  583. //        {7 c3 _' q3 ?, c$ f
  584. //                // TODO: Place code here to handle when the dialog is
      o7 Y" n; S8 w$ [0 L- K/ D4 ]! ]: S
  585. //                //  dismissed with Cancel% T( [" z! R# K/ M5 G
  586. //        }7 k0 b( {# x: x; A3 U
  587. 9 _- R7 R! w  t, T0 ]) g' l* J! P
  588.         // Since the dialog has been closed, return FALSE so that we exit the' }+ _- r, K" |: d
  589.         //  application, rather than start the application's message pump.4 y; z( g8 }- }( ?5 v$ ?
  590.         return TRUE;
      R) j2 L( M$ D  R# _- J4 E
  591. }
    ' o6 U* `9 i% b  d1 B# L
  592. - z' i+ H/ e# @1 B- H
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ) |9 j: h0 p  W8 F  t
  594. {
    ; N! H1 C$ W( f
  595.   int i;
    4 k4 \; R( y1 J6 k3 X
  596.   char *szRet;" M' V  ^) w( Y( s+ t

  597. ! w/ H: g3 m: m2 j
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    * Z& Z! k) X- }. [
  599.   if(sztoken)
    3 B2 H3 t1 J  [1 J  C$ }* s
  600.   {5 _  q/ k& H5 c* X7 `4 }
  601.     szRet=&sztoken[itoken];  h# c3 ?; u7 \, L0 ^4 G/ B% \: r
  602.     while(sztoken[itoken])4 N/ Q; @3 O; E5 w, G: ~! m
  603.     {
    4 I/ ]& |+ _! q& S" W0 H# v
  604.       for(i=0;i<(int)strlen(token);i++)
    $ y: {# j- w/ V, t* F
  605.       {0 W; o2 j7 X5 x, L+ l, m" s& `
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])% o1 h) l1 U$ M
  607.         {4 S  z3 p1 I$ {* o# p
  608.           sztoken[itoken++]=0;; q& L; X3 y+ r
  609.           sztoken[itoken++]=0;
    5 S* n) |! R/ N4 ]
  610.           return szRet;1 N* ^9 I3 ?# ]- W) \  {7 l
  611.         }
    - k0 s' E8 ~, M  ?" r! Y: I. N5 x  t8 g5 }
  612.       }
    3 X1 m+ O9 e; J
  613.       itoken++;% H; x8 H% @9 n: m9 H
  614.     }; S0 k* O8 a. j, \* R
  615.   }
    ' [: q3 g" X9 D' I
  616.   return NULL;
    " T0 o. _( {0 C% |9 d
  617. }
    % r) N3 t9 o& N  P
  618. % U7 }. _1 n" p6 x
  619. void ProcessProc(long Total,long Current)
    * x4 H' k; r: z
  620. {6 p1 L' e$ s! G8 Y! ]; ?! a7 K# v
  621.         MSG msg;
    4 }- ~0 E* z4 l, O
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    . i+ `/ Q' W& w% h+ A: ?  R
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    8 |( a8 F! |( r* G! P3 i
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    * [* r' {( h0 I1 j5 J
  625.         {
    + ^9 Q" B9 R/ r" o1 b- I
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ! R- R+ C+ X5 G8 n: j2 C3 N1 V
  627.                 {( h5 P1 v+ e! l* i$ y) y1 _0 R2 l
  628.                         return;
    : X$ J, I) P9 ~/ x/ j( Q+ u$ a
  629.                 }
    2 D7 a; u& F7 p3 \6 ]
  630.                 TranslateMessage(&msg);
    + B( t' t% x) H9 t/ @
  631.                 DispatchMessage(&msg);
    : s/ m! `$ f( R1 ?  g' G
  632.         }       
    + p9 V% g5 ?& _5 A( ]: ]
  633. }
    5 O" _' s- h2 U+ ]8 m4 z
  634. 8 h8 f6 H6 L0 `2 q- m' z8 E# W
  635. BOOL bFirstChar=TRUE;
    & @3 b: m. w* H& Q
  636. * T" u" k! d! o, C. e+ ~( a- R$ L
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ( Q; Y$ R( P6 |3 a5 j- L% K' b# U
  638. {% {9 W2 r: r; a" W1 y6 e
  639.         // TODO: Add your specialized code here and/or call the base class6 }; h8 q; b  W- s
  640.   switch(dwProgramState)$ \3 ^- G+ @, n' r
  641.   {  A1 V8 O) |3 r  c
  642.   case AP_NOTHING:  O( ^, b/ e% c2 A+ u2 |% P
  643.     switch(dwStartUpSteps)) z$ @4 _2 e6 }" V6 Y! w# d
  644.     {0 _$ y! T0 v, s/ F  O
  645.     case 1:
    / I2 v9 f8 G0 r, ^
  646.       {' S# h6 H) @" ^; T9 e
  647.         int i;% W+ ]( ]1 b: m0 j1 I
  648.         CDC *pCDC=dlg->GetDC();
    ; A. ]' w% l# X* a/ T) f% y: c! C
  649.         HDC hdcwnd=pCDC->m_hDC;
    # g' }7 _& c8 I/ {
  650. //        Graphics graphics(hdcwnd);5 o. h, H: r% ?! c6 Y4 p3 n
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    1 s; s5 l, F$ T% t/ T" G/ j4 [
  652. //        INT iWidth=bitmap.GetWidth();
    ; C1 h5 {! q$ ^/ E9 k2 l% a7 c
  653. //        INT iHeight=bitmap.GetHeight();: Y) b2 R! ~( g  S2 o2 n
  654. //        Color color,colorTemp;
    ! h7 ?% z+ t1 R2 F! N  p; L% c% }
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)" d: W& h0 v, R: |" X; [# Z0 }( c
  656. //        {
    0 }+ \/ v5 A( T3 i  |2 ?
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    0 @  V+ l7 f# Q
  658. //          {% @& f% _4 \" @/ ^% a# m$ b
  659. //            bitmap.GetPixel(iColumn,iRow,&color);* W5 i$ a; N% V2 Q
  660. //            colorTemp.SetValue(color.MakeARGB(8 a2 [5 ?& n3 Z- U$ X
  661. //              (BYTE)(255*iColumn/iWidth),
    ' c1 g1 K0 p, P7 p6 o$ L+ S
  662. //              color.GetRed(),
    + s9 F) n0 J. n" v3 R( R3 i
  663. //              color.GetGreen(),% L0 J- E" i% W/ P/ L; W7 a
  664. //              color.GetBlue()));
    . [) i& D# c' K9 M1 B' }
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);* {: e3 ?( }1 A! u$ f7 t% s
  666. //          }9 n" Y  h/ J  U
  667. //        }5 ^5 x9 }, `6 ]( g# C$ ^
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);) E- {9 h( P5 R/ |( ]7 x; d+ V+ U
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ o  H) L7 k0 K+ s" j
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    9 Z! v3 x3 h$ v% d6 d  g
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 b. z- G) U5 h0 J) |* T2 |2 F
  672.         for(i=0;i<240;i+=8)
    2 Y5 u- v3 o' q
  673.         {
    9 r2 f4 z3 @! `2 A" _$ d$ z
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 M9 g$ R! M5 Z6 M) T; l
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    # A! X: |3 d6 y: O" l  |3 b; j1 v
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 A0 ^  o  D  l8 c) c* M% H. R
  677.           Sleep(33);+ ~6 ?$ ]+ R. N$ Y* g/ ]
  678.         }
    " y( p. U2 |) z
  679.         Sleep(1000);3 t* @2 R. Q6 r* l
  680.         for(i=240;i>0;i-=8)5 {1 J9 a! G& F6 }1 F1 ?+ x
  681.         {
    1 e3 q, x' |# [  J( R
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ N# }% T2 [# ^
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);* o& K& F4 c. @  ~, x
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- G4 Y( v/ `+ _( S. y  v% M
  685.           Sleep(33);
    8 Q( Z0 h* P& |; [3 Y6 Z
  686.         }8 @. m* a, {1 ~
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);6 G; ]& Y' t; `& Y4 C! K" s2 u
  688.         dlg->ReleaseDC(pCDC);
    9 j. i/ o# G1 l2 H* @4 Y
  689.         DeleteDC(hdctar);
    ; z9 J: |: h# q
  690.         DeleteDC(hdcsrc);
    / M; r+ ], q5 I% F
  691.         DeleteDC(hdcorg);
    ' \) I: f0 Z! M0 l+ f; U$ M
  692.       }
      V8 j2 V% i! B7 p9 ~2 C" E
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 u$ \4 f5 y# W. W% B. d& W
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    0 P- P1 T, K" U
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");" {/ `2 m# o1 z: s. ~7 V
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");+ p5 M/ Z4 a+ j+ |+ y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 g& O7 U! v( p4 n/ a4 ~
  698.       if(!Dn.Connected())
    / j, I  K# [0 o  m7 a2 S1 R' }, g
  699.       {- U2 k1 {* E5 Q- ^/ n3 ?
  700.         dwTotalFiles=1;1 a% ?) L: X1 J
  701.         dwDownLoaded=0;6 v) w2 O- I! \/ w
  702.         bSilentStep=TRUE;0 m+ w- |# I- p0 Y
  703.         bCompressed=FALSE;6 X: p  ]* a# v* b9 q% Q' d
  704.         strExtLocal.Empty();8 X* g/ I8 k5 i7 P( u0 J
  705.         strFullName="readme.txt";6 [& [* T9 `4 g: _7 d; p$ {5 Y
  706.         dwProgramState=AP_CONNECT;
    6 y; ^1 I7 M+ B/ b& H- e# `# u: e' L
  707.       }1 W; A& \0 [- g9 x- g9 `
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    - h+ }7 I4 z  P9 u7 p1 m) l. F
  709.       dwStartUpSteps=2;' V9 y1 x2 T" y6 b1 q5 X9 n
  710.       break;
    3 T, O" v0 Q) T5 R
  711.     case 2:
    / O. }% R+ |: |9 N' A
  712.       {
    9 ]2 E4 Z, I  W" G4 H
  713.         int iEOF;
    * i! n5 h% j4 W, A# }5 l
  714.         FILE *fp;/ [& p; I' M* z0 @
  715.         char szString[512];! T0 B- l) L6 B1 k
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' R' @8 t& {7 U# u
  717.         if(fp)" u) y6 ?8 q3 `4 \) a. Q: h2 }
  718.         {( [% l1 L  H6 f
  719.           do
    2 z# y8 k/ P) a/ A( k0 Z
  720.           {& v3 W& e" F4 h1 T" o9 w5 f
  721.             iEOF=fscanf(fp,"%s",szString);2 Y# S: d* d; n. a! o0 P' \) x
  722.             if(strlen(szString))0 y* P$ Y) Y! O
  723.             {
    4 F* T7 M  d+ A+ b& ~( q( [
  724.               if(bFirstChar)
    $ l, R) O2 \. Q; b$ C' z* D
  725.               {
    , `7 Q# F* R% E4 ~- m5 H) l) J7 ^
  726.                 bFirstChar=FALSE;
    ( R- R( z, Y) `( B. J
  727.                 bConnectIsBig5=FALSE;! l' o2 C' F3 ]3 Y* B7 V
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    8 a1 |' b" P9 N! [8 f9 ~/ J$ p
  729.               }
    , V, e* T: A7 `% u8 B7 `
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    8 ]# l! I' }' w5 r
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    / V  k% ~& Y1 }( ?
  732.               dlg->m_ListText.AddString(szString);5 v* i3 V! Q0 n' k) x8 @! k$ Y  U
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % s& Y; [6 O& `/ K* |5 n5 P
  734.               *szString=0;/ ?' b/ ~% k/ ^+ X8 l+ c; s& |
  735.             }
    ! V3 n+ M% E# ?2 Q  w; z! s# l* r# Q
  736.           } while(iEOF!=EOF);
    & _5 J5 p- l$ H% \* Q3 n/ `
  737.           fclose(fp);/ n& p* q/ `- ?" W& K. Z
  738.           unlink(".\\DownLoad\\readme.txt");9 j9 F) K; t+ d; S9 I2 `" c2 s" y
  739.           dwStartUpSteps=3;
    4 d' E7 f  N9 A& c6 U' V
  740.         }" W  Y  a1 Z- ~" X% K0 b( J
  741.       }% ^9 |4 ]/ v8 ?: U
  742.       break;/ c: U! S3 y# [3 K- Q, C
  743.     case 3:# _; _! O- K5 I- e  T& p$ D" k
  744.       if(!Dn.Connected())4 X0 y6 l2 W. {; m8 E
  745.       {& ~1 I  d2 ~) e+ |5 e; E
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);; s7 w3 J4 H1 b- n! Q& Z
  747.         dwTotalFiles=1;! m  Z; z! M. F9 D# ^6 e
  748.         dwDownLoaded=0;
    - q) C% l* ?: I  R4 M9 ~2 {
  749.         bSilentStep=TRUE;$ e9 D* Y' k5 Z
  750.         bCompressed=FALSE;
    ' z/ b# I6 X  s" X$ v2 t
  751.         strExtLocal.Empty();, ]$ s( V* D4 b! m  m4 H. e
  752.         strFullName="checkversion.txt";1 _, @0 ]8 j) l, ^7 m
  753.         dwProgramState=AP_CONNECT;
    ! r+ @( \! A8 z, l" c3 F
  754.       }
    # m0 u/ p( `. c  r4 o
  755.       dwStartUpSteps=4;
    7 H% \8 y! K3 B) |
  756.       break;
    3 V- t1 C- S% P0 I) P: \1 g% J; m
  757.     case 4:
    6 {& P$ P* A6 S1 V- c( ]
  758.       {
    + E) o6 u; w( _  ?
  759.         FILE *fp;
    % }: u& f1 P& g3 b: O5 `
  760.         char szString1[128];
    1 ?" W* F# |' e: {2 ]# ~9 p, p0 D$ \5 C
  761.         char szString2[128];' b8 G/ }  ]* G) q* Z/ S  r$ M
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");# J7 q9 i4 a' Q5 e: _
  763.         if(fp)* J! L' z1 R. u- i5 x) m
  764.         {& c" o- T1 n+ k  w
  765.           fscanf(fp,"%s",szString1);8 ?6 ~: R' t: ]9 M  u
  766.           fclose(fp);
    5 l# s" D8 [: I# ^( C
  767.           fCheckVersion=atof(szString1);
    . H* D( v- f; `6 ]
  768.           fp=fopen(".\\checkversion.dat","r");
    : w& a9 o5 Q/ G5 W% Y8 l8 N& i$ Z
  769.           if(fp)0 t7 q! y6 i; ~  h3 [" U3 o
  770.           {+ C  c* W$ e' \/ f- Q4 w9 s
  771.             fscanf(fp,"%s",szString2);
    5 o" a  u* T, v5 P0 c$ ^1 ]
  772.             fclose(fp);
    1 t& }" p4 t$ C3 N3 ~
  773.             if(atof(szString1)!=atof(szString2))
    + h2 l) V3 m; h6 h( R
  774.             {$ B: }) f7 B+ s8 r# i4 s
  775.               if(!Dn.Connected())/ L5 [' I% ?4 M: q% f
  776.               {
    7 q$ w8 p8 X# c( e$ n
  777.                 bFirstUpdate=TRUE;: R& j; X/ b5 m" R
  778.                 dwTotalFiles=1;
    1 ~6 v  I. x: {% K' K0 m7 }- |6 S1 Q
  779.                 dwDownLoaded=0;
    ! V$ h4 K1 e. `- q
  780.                 bSilentStep=FALSE;
    / m" I( M- v, c$ E
  781.                 bCompressed=TRUE;
    5 ^1 G' y( m& A
  782.                 strExtLocal=".\\DownLoad\";5 J& w* `, N; Y' V* n8 E9 l
  783.                 strFullName="update.txt";
    . O% e6 k& D7 i, S9 k8 [
  784.                 dwProgramState=AP_CONNECT;4 X8 n7 p3 [  g1 k0 T
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    : Y( j. s7 o# Y$ n; V  W. l$ I
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: Z9 m5 y& x3 s  L3 O  w4 B
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");( `( t; U  f* L& A( o+ ]- Y

  788. ' ]; G- m% H" g2 |# F: S! X
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 N& o7 R$ G/ U. S( R
  790.                 unlink(".\\DownLoad\\checkversion.txt");1 o& T/ h: B' }2 N  u3 W+ ]
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)3 S- f9 c( O1 J
  792.                 {9 I0 n; C$ g2 @! _$ m* i5 G
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    * }/ S3 A# ^8 F: I
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");8 {8 o) ?6 m4 l) l, T0 l
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");* v2 S) B0 a5 m: G7 y$ y- ?" o5 a
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) R( y+ T  L0 ~& q" X& y
  797. 3 D$ M# q0 A5 S
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ }8 f2 A* ~# v& L8 m1 t
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: I$ `9 n" |! L! g) G
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");% M# g! y6 x* o% U1 k2 ^% R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  @, C' H, Y7 @: P% E3 N; X3 O8 J. |
  802.                 }" _9 F0 i5 I0 _( c6 _; ~
  803.                 dwStartUpSteps=5;# W! t2 ~2 z2 \6 x9 B% |8 v% d- }) E3 Z
  804.               }+ W0 J. ^/ |# I
  805.             }
    - t) k; t4 |; a, e2 U
  806.             else7 }2 h+ b, S$ B. S5 O7 n
  807.             {' \! N  Q3 D2 w" H
  808.               unlink(".\\DownLoad\\checkversion.txt");
    / y' y5 }6 E( p, J+ V% Z
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");1 e& @8 W4 c1 L% ?
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ; |4 U; \7 e9 d4 {4 T1 \% d
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");# M# x. c# Q: x- }: d0 |: G: F

  812. # L: k; ?  t& X' x! P& n
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 K$ e7 K  K1 Z% Q, J. j( y
  814.               dwStartUpSteps=99;! E7 }3 a7 m2 \( K( j# k! k0 y
  815.               bFinishUpdated=TRUE;5 d" X2 ^/ C* P8 |6 q
  816.               bCanUpdate=TRUE;3 e, U& W4 }1 l( l( W
  817.             }( ~9 G: g/ c, j( R7 Q
  818.           }6 A0 e% J5 U' x
  819.           else
    . H" T8 n+ C) [% H, s, [
  820.           {
    / s6 ~, }( [* X7 Z8 W, o( ]
  821.             if(!Dn.Connected())
    " g8 S2 `2 e* H; c4 V; H- I
  822.             {
    7 R: r, @# x# {$ R0 c# \+ m- w; M* w
  823.               bFirstUpdate=TRUE;6 |" Q+ p" x" U" |
  824.               dwTotalFiles=1;
    6 A4 \! `! g2 b5 P
  825.               dwDownLoaded=0;
    5 d$ ~! T4 Z: E0 I& \
  826.               bSilentStep=FALSE;+ Z# A, }% q  v( B
  827.               bCompressed=TRUE;
    3 y6 T2 I. C# Q) Q2 ^2 y
  828.               strExtLocal=".\\DownLoad\";/ i% j4 A2 d1 E+ x
  829.               strFullName="update.txt";% R& H+ L+ y) F  L2 p% j6 \
  830.               dwProgramState=AP_CONNECT;
    1 }. }: N: z1 Q1 J$ D* J; \
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 v% i" f. P4 y. a7 Q9 z' J- D
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / O6 w, B. [  O
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");& w' V; H$ x' Q, g0 \3 v
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) w" [3 h; i! ]; D+ ~, I
  835.               unlink(".\\DownLoad\\checkversion.txt");
    # P8 E% U/ x! f- g0 W7 c- {) j
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    - @# G$ d" f" v4 B- g9 N# f
  837.               {
    : V- m6 B5 H! h# y0 L: q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");; Q+ T  _& Z, Y5 B- |
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");& X) s5 q; B8 I9 {5 O1 j2 y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");2 {& @) g+ J6 A# e! Z: w: M. b
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - p) E9 i3 L6 k
  842.                
    4 N0 V8 ~+ G& `' k% B% n
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");: c5 E. E! V  |( B
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& w& G: _7 T0 z* @+ @
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");  J' r( |9 T" v/ T. z+ K9 G
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( U  S/ t  }8 {& D
  847.               }
    + o- b+ P- P9 f7 ?8 V. F' @
  848.               dwStartUpSteps=5;. S% l6 r1 c5 i& n+ f4 s' y
  849.             }
    ! D1 f* V) h7 C4 K1 y6 A
  850.           }
    3 m0 b' H! ~; e
  851.         }
    % F. [% _4 f' i, ]& Z1 f( k
  852.         else
    $ O  W  ?5 l" O1 i9 |* d, m
  853.         {
    ' n; t# G7 q4 J. G1 W3 R+ X6 \% S
  854.           dwStartUpSteps=3;
    + ^$ m/ @' e, G( y
  855.         }
    / t2 n$ x9 z) v5 @  w# l
  856.       }
    9 y' w) z$ e+ f' Q
  857.       break;
    7 h9 B8 k; e- _% Q; N7 W* x
  858.     case 5:
    ( R( L% o6 a2 Y* n
  859.       {; a2 D% d* h0 @: v; I2 G$ F# g$ \
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)( W* U0 ]1 S! I) s. ]
  861.         {
    ( p1 M6 Q7 {! b9 I9 c
  862.           int opt_overwrite=1;
    , @# H1 d+ ], A- i
  863.           int opt_do_extract_withoutpath=0;
    9 }: J) z* V. Z" M9 p. J0 s
  864.           unzFile uf=NULL;, h; A/ B: k0 s# C
  865. 7 b1 X" E' n2 j
  866.           uf=unzOpen("Wsa.zip");& r6 l8 d4 `2 w' W' Q# A& {
  867.           if(uf); h( J* x! e% ~
  868.           {  U5 R5 g$ c; B: w5 m% W1 B; z
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);  p7 p- y. M  l. U7 h$ B. Z! T
  870.             unzClose(uf);
    4 B4 i# n, i* J0 G/ U
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");6 W6 }+ K& [! P9 F" Q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    & v; V' v" j. I
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");6 i2 @3 W& X% ]8 W" W2 @7 T
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' ^+ a) c+ o+ v& A( w2 p7 p& |
  875.           }
    7 k) X  d; }5 C" B; r
  876.           DeleteFile("Wsa.zip" );9 W& F  Q; A0 j+ D4 h1 ?! N. f
  877.         }; g6 _4 B; |+ B

  878. : q2 l* O; r5 _1 i; b3 P
  879.         if(CheckLocalVersion())
    & C9 Q+ B4 N) `. a- O- u
  880.         {0 J& ~- f/ D  i1 t
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");4 ?1 C' a% D0 s1 r
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    & K5 Z# w3 \( T2 P( _# ?
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ( e2 F0 I% e& d, T# l8 @& Y
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 p4 H' m  Q* p; E5 ]3 E' N% [2 ^
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);+ v; Q, J' N- s* K5 [$ }) n
  886.           dwStartUpSteps=99;
    , B3 H  J* A  S& m! F8 V/ U+ ~
  887.         }
    2 l9 r( p- k; \$ t/ A! g3 f2 C
  888.         else
    & m+ k/ h9 {' }6 `
  889.         {' S$ H# Q$ i  R' G; K: m
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    9 w+ B! n  y$ ?  k. J
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' B$ t  _7 p& z$ c' ]1 ]: W$ H
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 z9 V8 E% `; [, U* n

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

$ r% R( g' J. P% i, t" |9 w& ?8 r' Q- n0 V' h6 y/ v' 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-12 03:10

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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