CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
1 I, q/ F" K! C6 Z2 x/ _
  1. / RevApp.cpp : Defines the class behaviors for the application.5 L) q. z: {0 t
  2. //
    0 a; a. _- _& i: B' S* J2 Y4 W

  3. 9 c2 h8 _! R3 z3 {/ j  ~
  4. #include "stdafx.h"
    : B3 U" _0 `2 c/ y1 b6 ]

  5. 3 [1 g* j$ R% x% n  a9 O
  6. //#define UNICODE
    3 _1 M$ }' q8 X/ K7 l
  7. //#include <gdiplus.h>
    . t8 H7 |# ~0 f1 a6 _4 g7 q2 |
  8. //using namespace Gdiplus;9 Y# o9 ]( s! M, s0 @: F. g7 x
  9. # V" g) z8 \  W
  10. #include "RevApp.h"
    * i/ R" B+ I$ @4 E. Y3 p
  11. #include "RevAppDlg.h". z: `( G) [6 w3 O1 o# {* R
  12. 8 Z  z! t. ?% y- y1 _( p
  13. #pragma warning(disable:4786). _" z" u( A# g) B3 @: @
  14. #include <map>4 {: Q8 J5 j  t  `
  15. #include <list>% y6 t5 x# \; E: `4 W
  16. #include <direct.h>
      u, v9 A2 y+ f7 \! |  E& I7 o( t5 e
  17. 1 a% D- G  m1 D( _
  18. #ifdef _DEBUG
    * E: V( }; y+ p8 S8 a/ L2 W) Q9 u
  19. #define new DEBUG_NEW
    + b2 z5 ^8 v# b
  20. #undef THIS_FILE6 s8 t' K$ q: e) d" x6 ^
  21. static char THIS_FILE[] = __FILE__;3 Q/ x* V& c# H( ^! N
  22. #endif) g8 B3 {) E0 S+ ~! p
  23. #include "SkinResDef.h"
    . Z& V& z1 B/ ~* e8 {
  24. #include "ChangeBG.h"; I8 x8 s: ~3 u4 q/ z4 z8 K
  25. #include "AFXINET.H"
    " p# D9 p! ^2 Z9 E

  26. 8 i: A0 \* V- h
  27. #define TRADITIONAL_CHINESE 0% I: Z3 P* r# j$ @
  28. #define SIMPLIFY_CHINESE 1
    ( Q: H4 Z! U3 j" w+ r$ q- U
  29. #define ENGLISH 2
    3 {. E) z/ q$ j& P% p0 _; C" M
  30. int m_iLanguage = ENGLISH;, x' j5 `& B8 d8 C; E; X: h
  31. /////////////////////////////////////////////////////////////////////////////, W& h- \3 i8 R" x5 G
  32. // CRevAppApp7 e2 d- X8 k* ^' e; I. n8 S

  33. 8 t! Z) \' B. j8 c, d
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)( H9 X2 {! t' ?" G: x. A# U$ S
  35.         //{{AFX_MSG_MAP(CRevAppApp)5 b2 b  h! b9 e+ v) d% C
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here." n6 b3 r5 L  n
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ; C3 w1 b( E8 j* c7 a* q/ H1 E
  38.         //}}AFX_MSG
    # y* S; l( l7 m. F
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    " X& I9 g5 n  B- p, Z: d) h9 B
  40. END_MESSAGE_MAP()
    + y5 _: F1 _8 y

  41. 5 |* K6 ^* X( M3 p6 _7 m  q5 H
  42. /////////////////////////////////////////////////////////////////////////////
    ( |  M+ f7 t$ V1 S. x1 x! _7 C
  43. // CRevAppApp construction" p2 w. q9 p2 R& L' X8 q

  44. # O* r4 z7 j3 x; \0 @. G
  45. CRevAppApp::CRevAppApp(), M& i  |+ Z; E* i' d7 ^7 x
  46. {
    % s; ^" i: e3 s8 {8 e
  47.         // TODO: add construction code here,
    8 c% h' @2 x. d
  48.         // Place all significant initialization in InitInstance( B% v2 Q: E- V$ ^/ r5 Y
  49.   bDisplayIsBig5=FALSE;
    - c# k4 ?) J0 M" o% y) b
  50.   bRestartUpdater=FALSE;1 q* f  \' i2 m/ f3 U
  51.   bFinishUpdated=FALSE;( _  I4 F- B; w: ~1 P$ d
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
      a4 B/ o- Q! i7 f; V# `! j, W" M
  53.   InitChangeDataBig52GBKS();
    0 ?, q! r; l& @4 h
  54.   InitChangeDataGBKS2Big5();" J, Q/ S% V' O3 ?; d/ _% X0 G
  55.         //
    / K+ }& `9 a7 V) _1 u" E
  56.         bClickRunExe = FALSE;8 z- X& v+ Y' x7 E  ~& u
  57.         //
    : y3 b! R" |5 z
  58. }
    2 l/ C5 r5 a% [2 P1 b

  59. , j$ K& I* m, R: B- q
  60. CRevAppApp::~CRevAppApp()
    2 ]4 x7 {8 F: e1 P  h3 x( E) O$ e. L
  61. {- R3 S! I* ?; d7 [& P0 r8 g
  62.         // TODO: add construction code here,& H  e# {+ c, @) p
  63.         // Place all significant initialization in InitInstance
    . x* W7 B0 u$ V5 q
  64.   EndChangeData();- ]7 T3 t/ _+ U* [  ]8 S4 m
  65. }
    6 y9 V5 K, m: D) g/ ^5 H7 e$ Z. F
  66. ' E# e* \3 C) W) h% z. [
  67. /////////////////////////////////////////////////////////////////////////////
    * r; R3 s, A7 W: _5 Z" `
  68. // The one and only CRevAppApp object, R+ u+ I. A9 x
  69. * U/ h& D0 b: `1 N& K6 J* Q
  70. CRevAppApp theApp;
      v) |4 D! D0 ^7 i: s+ D
  71. 3 b& u* |  s% e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)' k  _1 {8 A3 f& ^/ `$ U, f% ?
  73. {, i  X( t" ~  F# P: a. F, p! a
  74.   int iEOF=0;/ v# T% d# R! p
  75.   char szTempName[MAX_PATH];
    ' e, g1 e1 E  Z! R, |6 c
  76.   *szFileName=0;" ?) U1 @+ D. _3 m4 I8 Y
  77.   iEOF=fscanf(fp,"%s",szTempName);# T; [7 G1 B" I1 T" M9 S! {
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')8 Z* n# G7 p: q0 v7 u, T8 a
  79.   {  w1 ^7 U' `: C
  80.     strcpy(szFileName,&szTempName[1]);
    + y7 X8 A, ~  Q' @2 h
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)" i! T$ P9 G" I1 t2 V, z
  82.     {( N& j8 Z& N, l3 P" {: P! G. L
  83.       iEOF=fscanf(fp,"%s",szTempName);
    7 W' m1 [( Y# A7 C& p- y
  84.       strcat(szFileName," ");
    9 Y1 u% x3 ]. A! K
  85.       strcat(szFileName,szTempName);' O; S, V+ J( e; K; N0 n
  86.     }
    * b' q: d" ^1 p9 q
  87.     if(strlen(szFileName)>=1)+ Z& \$ O# w$ f2 j1 q
  88.     {) a& I2 c0 e# u
  89.       szFileName[strlen(szFileName)-1]=0;0 d8 U$ c6 I0 @6 y8 r
  90.     }/ j8 y" ^0 Q( }$ M+ |6 x  l! x
  91.   }8 Y; p0 N; l; u- s& U+ F: {" D3 ^. P
  92.   return szFileName;
      t, Z4 y" C1 c' X5 `% K8 G9 C
  93. }
    + [" V0 G) I  c: @/ \
  94. 1 ~  B2 D  E% l
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)+ b, W& w: f& i  Y, b
  96. {
    3 ~" f  d+ a  Q& b
  97.   FILE *fp;
    # Z' h+ q$ C8 Q/ U' ~9 v' U/ D
  98.   char *key=NULL;
    6 O1 R( y/ i) g/ Z
  99.   char version[MAX_PATH];
    4 N/ E/ \) d8 R( s3 |
  100.   LPUPDATEFILE file,olds;
    9 D0 _9 H6 t* u7 t. f( o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 p# i6 n, t1 b4 @

  102. ) u; N! }6 E0 ^$ M2 |! t
  103.   UpdateList.clear();
    7 A# m. S2 L1 o6 @
  104.   UpdateFile.clear();
    8 o/ m4 J" O/ S7 I; y- _
  105.   if(GetFileAttributes(filename)==-1) return false;+ }1 X2 l: k; h+ X" Z
  106.   if(!(fp=fopen(filename,"r"))) return false;
    3 y6 K$ Y* ^0 [
  107.   fscanf(fp,"%s",version);
    5 [# m; m% E* M( y& o
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }1 w) W( t: N$ G$ R: g
  109.   while(fscanf(fp,"%s",version)!=EOF)
    1 L( I2 m: S" e" f- }  p3 o
  110.   {3 z% S8 |/ w0 {+ b1 e( P$ b
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; n! V- f- l$ M$ g0 }
  112.     fscanf(fp,"%s",file->path);* F1 W  l( p/ r- Q  i
  113.     ReadFileNames(fp,file->file);0 _2 U6 t7 N1 H. T. B
  114.     strcpy(file->full,".");$ P0 }6 j1 s( O, W2 f, j
  115.     strcat(file->full,file->path);, N& t( y* Y" b3 }1 F4 l2 V7 l
  116.     strcat(file->full,file->file);
    1 Q* h( J' i- ?. ?% h
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    0 x1 J! u$ s5 @
  118.     {
    6 d4 w1 ~" |1 `: q
  119.       file->vers=(float)atof(version);
      f6 c$ ~/ K4 d- \0 ?: r; q
  120.       UpdateList.push_back(file->full);2 Q9 _& z  n* [$ I3 o2 \
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    1 Z* \7 _5 }5 N! B
  122.     }( C: i  F6 x& Y9 B/ R' ~
  123.     else9 a' V: H. G5 x  A) m
  124.     {# ~: \& C  P( l
  125.       olds=(*p).second;% \( h! \6 Q/ _
  126.       if(olds->vers<(float)atof(version))- H( i1 X5 T! C0 O% t) \/ K
  127.       {  J/ o. J- E* P
  128.         olds->vers=(float)atof(version);3 J( p1 P* H* A# S; L7 v
  129.       }
    ) ^) n  |8 h3 i5 ~
  130.       free(file);
      [1 f$ |$ x) a4 ^% y# {
  131.     }
    " g+ u" Q2 f. c3 ]% L3 |
  132.   }2 G* R, o4 U0 C- _9 K
  133.   fclose(fp);
    3 ~% P$ b& ]2 o' T3 P. }
  134.   return true;
    4 U0 a! \$ Z0 L; m: L6 ~
  135. }, ~! r/ w0 z8 M3 s' i, u1 i$ ~

  136. " I- O% R. U$ n& _2 |2 W
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)" v, u$ m% p0 t, h! V+ T& X3 d
  138. {
    # Z2 \& r; I) f+ Y$ ?- \
  139.   TCHAR  szFull[MAX_PATH];. s: z3 G: n" j; \1 P7 x
  140.   TCHAR *token,*inter;
    , A, E& K/ A0 T
  141.   *szPath=0;/ H  U/ z1 S! B2 q8 m) L
  142.   strcpy(szFull,szFullPath);" ~( t4 o4 [& z  y/ ?( ^6 Z
  143.   token=strtok(szFull,"\\/");5 z+ @! a( S: L6 E
  144.   inter=token;
    , g; H/ N& l9 M! k- B5 c
  145.   while(token=strtok(NULL,"\\/"))+ x% d# d; C* ]% Y4 X* \
  146.   {
    5 r; e' |* y" b) `
  147.     strcat(szPath,inter);. t! A/ U3 L2 @5 D& y
  148.     strcat(szPath,"\");
    2 _9 C5 Z5 c8 H: f( I( b% l8 k
  149.     inter=token;$ ]9 r( L3 b7 ~( h2 L$ S
  150.   }: l; C" e( b7 ]& a1 D8 H
  151.   return strlen(szPath);
    3 V5 ?; F! m2 S0 U2 w
  152. }
    , j2 ?. x  ~5 k  ]2 Z% ?* o& s: I

  153. 7 |) |9 f! F- {3 C7 O) \. a
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 q: ]' Z& X+ V! {! A
  155. {3 K# ]7 a7 m8 j6 y
  156.   DWORD attrib=GetFileAttributes(Target);
    7 F! x4 ?* ?* i0 z9 k' C& ^4 C
  157.   if(attrib!=-1)* u- A7 d, y. N6 {5 |! b
  158.   {
    6 E( _+ X( |' E/ }
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    / o  U: X& E  t# e
  160.     {$ T9 v. `2 D, C! ^! f
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);& _7 S8 q0 O0 V* q# [6 [
  162.       SetFileAttributes(Target,attrib);% y% d! O- p! {2 K
  163.     }! a  p3 l4 ?+ C, [# t0 D/ L0 x
  164.   }
      N3 U( S. k; a/ ?1 F) {
  165.   CopyFile(Source,Target,Erase);
    : B5 {% o, B. \3 U' [% L
  166. }* N. a4 z0 ?+ Q6 s, B
  167. 9 `  E8 G/ t. w% G
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)5 Y8 J- @# ^4 O2 L
  169. {5 }) p. i9 [: a' K) t
  170.      FILE *fp;
    - t2 b4 ?9 D% S( ~
  171.      char  szBuffer[8192];6 Y2 K4 y) x+ \/ X
  172.   va_list  argptr;
    ' {( L: e2 x. b8 Z

  173. 8 T. t8 i# g( B2 c8 C2 z  S. C. ~% u
  174.         va_start(argptr,message);
    1 ~( O) [) K; @! b& H+ d% B# J
  175.         vsprintf(szBuffer,message,argptr);
    / X+ E* m) |+ p+ Q* U; I
  176.         va_end(argptr);
    ; |1 D' e8 a7 r# N3 Q5 z' g3 [+ v2 d
  177.   fp=fopen(FileName,"a");# L. \6 \6 |) a1 m4 ^
  178.   if(fp)
    " S0 Y" z0 e0 f* \; A4 m. {8 R8 ?
  179.   {
    + u/ p4 H/ F  v
  180.     fprintf(fp,szBuffer);2 U1 k4 ~) B- ^+ h' t* L8 W
  181.     fclose(fp);
    3 Z0 P8 q; H' s- V4 ~
  182.           _flushall();
    , V6 P3 O' m4 V0 C( x5 F5 S0 \
  183.   }3 b. Y$ ]" Q& E- \2 }$ W6 ^! ~
  184. }
    $ _$ t! |" k+ J; n- a1 E
  185. # b% h* t, f8 ?, d
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    1 s; W, P! o7 `
  187. {) f. P4 c6 {2 E/ F( X6 T
  188.      FILE *fp;
    / {0 C- T2 [' N" \& g2 N2 i
  189.     DWORD  attrib;& H5 S# j; E' H6 ], r$ {5 X
  190.   attrib=GetFileAttributes(FileName);
    # _- D! h& h& H1 `
  191.   if(attrib!=-1)
    8 {  o" M5 x2 }; d5 _
  192.   {& G+ {# d! s/ e
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);4 Z$ W# k) R" X" a
  194.     if(!SetFileAttributes(FileName,attrib))3 d0 P+ I6 w2 p% E7 s: g( g
  195.     {  O' {$ }8 ~, g  E
  196.       return FALSE;
    $ L- g! v3 y# a2 r: L
  197.     }! I- P5 W* |4 }; @+ r
  198.   }! n7 H$ J0 K: E0 y
  199.   fp=fopen(FileName,"wb");, @& a! h1 o/ p/ s" w$ l
  200.   if(fp)" I7 h$ _# |3 I: r& {6 R% i6 s, M; T
  201.   {
    : z7 |5 X- ], A7 X, G2 P+ @  x
  202.     fclose(fp);
    : A/ Q, a, j3 k: f
  203.   }# o5 H; b- U: C* n7 y% j; i2 F: y
  204.   return TRUE;. C; u& h1 Q& s, e" C/ }$ [
  205. }
    # }" X' x2 c' |/ u

  206. ! \- b) k$ {  s( U
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ L1 Y0 N1 \6 k  ~# g. w, s2 D
  208. {* I$ y( D* _5 A0 j5 t; u0 N3 |
  209.   char filename[MAX_PATH];
    ) Y7 x6 U* v+ e" d- Y& n
  210.   LPUPDATEFILE file,olds;3 W" Z  A4 w+ t, ~3 r- k
  211.   std::map<int,CString>::iterator i;
    . M# h3 {3 L+ \) ^8 V5 X
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' r& R" K( C6 c. b: t- J2 `
  213.   std::list<CString>::iterator l;( [! U  o$ ?# m9 x2 d
  214. - C. j; r$ F5 ~8 a4 M1 F+ J* ~
  215.   if(bFirstUpdate)# K& o% }1 ]9 K
  216.   {
    : ~% V0 `. A+ ^4 l# `
  217.     dwCurrFile=0;
    # ^% n( m  L) H7 R) f9 w) Y2 `
  218.     bFirstUpdate=FALSE;. Z# W( l! }7 T$ n
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / L& K$ x& w. P6 Q8 Q) `
  220.     {. l# d0 E9 L$ f' O, ^  Z* v9 k! M
  221.       dwTotalFiles=UpdateLocal.size();$ V+ V  f) W6 M1 [5 E
  222.       dwDownLoaded=0;+ r. h0 D* |; q3 ]1 p
  223.       bSilentStep=FALSE;4 G5 N! ?7 Q8 l. H& h
  224.       bCompressed=TRUE;4 `  c8 b8 D" Q' w* }/ L1 L
  225.       strExtLocal.Empty();
    . C7 d, c1 z' o5 V: f
  226.       strFullName=(*i).second;; _- z, x& I( w; b
  227.       dwProgramState=AP_CONNECT;
    : R6 [, M8 l: n/ ?, V( N* ?, y
  228.       return TRUE;
    ( ^1 X- L+ n# \6 s* U9 e& T6 ^& a
  229.     }" z$ A2 g+ s5 g- @3 u; F. Y# s
  230.   }
    " l: D+ @9 b8 ], p$ g" `
  231.   else if(bRestartUpdater==FALSE)$ l. v, _" U, T+ g6 m! e1 Q
  232.   {
    6 D+ N2 W4 X3 I% ~- t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())) g  v/ O( h9 `& Z) J
  234.     {
    & `: _9 Y* s5 [6 J- F
  235.       file=(*p).second;; r; I9 G& H5 ?  B3 R
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())& K1 b5 t3 K: o6 X
  237.       {
    $ t; A2 ?" w* i. H8 L# i' e1 k7 k
  238.         olds=(*p).second;
    4 F# P+ E% |& X* F2 c' o
  239.         olds->vers=file->vers;
    7 `% n6 e) P5 M" ]3 p
  240.       }6 X3 O3 r' F3 y6 L* y" M: f. n% X
  241.       else* ?2 k+ J# ^( \% G1 X
  242.       {
    1 c, N2 L( v; K3 u" p7 U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & g% R+ y) k. n2 U. r! k
  244.         memcpy(olds,file,sizeof(UPDATEFILE));2 u0 ?' ~+ C$ H; d$ A0 d. K& A
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));5 M! h" n2 H! M6 g
  246.       }$ b2 E7 A. W( B: r; L% a# R  g) @
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( B! Y% D6 Z2 x) f6 V
  248.       sprintf(filename,"(%s)",file->file);( o* J5 N/ _4 E9 G/ Y* k
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 m# y) ~4 O2 b! v/ {3 X
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    3 n1 ]2 U; Z* I
  251.     }
    2 W$ L8 p* Z0 u% P! ]% W
  252.     dwCurrFile++;2 y$ a% G) A' R8 k9 [7 m0 O2 ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) L1 \: a- y. |- H8 m; A# `; Y
  254.     {
    % \8 _2 i2 x" C5 V) [
  255.       bSilentStep=FALSE;# O' G1 v6 @3 y& f% Y- r! b/ b
  256.       bCompressed=TRUE;/ G3 i$ h% ~: V0 y& u. i
  257.       strExtLocal.Empty();) n3 @8 d+ a1 s  a& F4 q- F
  258.       strFullName=(*i).second;
    & S. Y0 @3 U* i7 X
  259.       dwProgramState=AP_CONNECT;
    ) j! X( S- w9 B
  260.       return TRUE;
    9 ?" I" }0 t, C  @, w1 z4 N- {
  261.     }9 R; B3 U8 L" S# B' A+ g/ [6 b3 t
  262.     if(!bRestartUpdater)
    + z- q1 b& z9 A
  263.     {, k  _- y  {3 [2 H
  264.       int iCurrSize,iFileSize;
    9 \  \9 {9 `0 I. @$ H. E
  265.       iCurrSize=0;
    6 f: C8 _. C  s1 ~" Q
  266.       iFileSize=UpdateList2.size();
      l1 I+ u9 _+ u/ z( z0 m5 ?
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ( @5 d1 {+ m: x. k4 k
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 R6 V: h- N* `  R) O
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    8 t, |4 i- N2 `7 Q+ E! C% |
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( J4 q+ T7 T2 F" M3 n
  271.       Fclearf(".\\update.dat");
    9 l4 t/ n( X/ V
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ) [8 w. J8 Q+ j  x, H' N0 y
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)% f; ^0 Q9 j: w2 X5 o4 N0 L' @
  274.       {7 {( _+ S9 s* U- U# I& D4 X
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    5 G! q& S1 m5 p
  276.         {
    ! w! b/ v; A$ y
  277.           file=(*p).second;
    : o2 X9 o5 @' i* b
  278.           sprintf(filename,"(%s)",file->file);
      R8 M+ l) r6 _  k
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 C: D" G& Z" G' }# ~
  280.           iCurrSize++;
    ' A8 ]+ w5 f" M2 d! T
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    6 {& O. a7 ?. |- _) h5 e) e# p
  282.         }/ u" }2 M; `1 q
  283.       }
    9 J' z8 @4 J. r0 B/ Q8 a
  284.       unlink(".\\update.txt");
    6 [, R0 G/ L. p" S( M
  285.       unlink(".\\update.tmp");
    / x5 D6 d) j1 `- I6 h
  286.       Fclearf(".\\checkversion.dat");
    / m' O* V9 [; A: I3 \
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);6 v7 c, l6 `1 h: v1 ^. [, E- L
  288.       if(UpdateLocal.size())8 Y" @# W7 ^- \8 C# f
  289.       {
    ' q% q. u: d- |  q0 n0 X& L
  290.         UpdateLocal.clear();, f9 {1 v0 @1 O: h6 y
  291.       }
      i# q' Y3 R/ s" s( j7 f, W# m* r
  292.       if(UpdateFile3.size())# o' {" }, k# I4 v8 a9 e
  293.       {1 o1 `2 N" U, q, s* i
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , w; s" W0 B5 p, Y7 E$ A& @
  295.         {
    & X  y8 J4 ?: P) b( l$ z5 U
  296.           file=(*p).second;5 K% Z5 h* R0 p- m0 E% Z
  297.           free(file);
    ' i7 ^, H' A& e& j
  298.         }
    ( I$ s$ ^8 ?( l( ^6 g+ T
  299.         UpdateFile3.clear();
    1 a: P! g3 ~4 P* t2 }4 x- N
  300.         UpdateList3.clear();
    4 c0 c0 ?' o( Y3 N$ ^1 A7 n
  301.       }- b  ~3 q; X% {
  302.       if(UpdateFile2.size())
    . E$ i; S; G- a* h) ~
  303.       {
    ; f; S. w' F/ R$ b: A2 W
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 |' G$ Z! B$ {9 A
  305.         {
    ) i; \% |& j. A! y" i3 t/ c
  306.           file=(*p).second;
    5 W" g; v6 M* f" X' X
  307.           free(file);2 `/ k3 i8 x% g9 G
  308.         }
    ) E7 }  s' \# P. X
  309.         UpdateFile2.clear();
    & p4 \5 Z# n; V, v* q; Y! U
  310.         UpdateList2.clear();
    , ]9 S; w: }$ r+ p
  311.       }
    8 P5 O1 l' f+ V. S/ Y4 n
  312.       if(UpdateFile1.size())
    , e, V: T8 b' ^
  313.       {
    ' m3 N5 i3 a( e0 D
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& E  d! Q* }3 }' Z# V& {% [- u! }
  315.         {
    - e+ W" L/ `, `0 o+ S& P0 j  \/ a7 Z
  316.           file=(*p).second;- r5 H3 \: [  \  E2 @2 Q  b' @5 P
  317.           free(file);5 d% M7 y3 B) B& {9 `% h* q0 F
  318.         }
    # P: I# v8 ^% E6 m# O
  319.         UpdateFile1.clear();
    / l; K% F1 ~( {  I
  320.         UpdateList1.clear();( O: }, ~5 x* F& _, w" k. ?! t
  321.       }
    0 V" F5 a1 B3 V0 y/ ^( h; m9 k1 R
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 ~% T" ^+ a2 S; e" F3 b- j  Q: j
  323.     }
    & `4 ?0 H' l! q* x# z; F3 B
  324.   }  N" S5 ^! y$ o9 N
  325.   return FALSE;5 ~% L: F" B( v; N! \
  326. }
    . F7 A6 N) T) T- K5 I

  327. ! I1 K7 ]6 N7 I' x9 J! s/ d
  328. void CRevAppApp::ClearAll(void)7 n4 O+ _8 e) s0 n
  329. {* s% A' a9 L' _1 e
  330.   LPUPDATEFILE file;
    + a1 C! e+ _  w5 d+ R
  331.   std::map<CString,LPUPDATEFILE>::iterator p;, ~; J6 v# a2 E* ?- c0 B4 O0 o. x

  332. 3 N8 @" J$ b8 {4 W
  333.   if(UpdateLocal.size())/ A/ z/ v" U0 n# ~0 N5 E
  334.   {
    & w/ J6 L. L" Z$ h4 T) P$ {
  335.     UpdateLocal.clear();
    % D5 [3 ?4 P) Y3 B8 t
  336.   }
    6 a; q: B- H4 Y/ g7 B- ^
  337.   if(UpdateFile3.size())# ], `# w( }! f' n' L
  338.   {4 b6 x" Y' |) v7 A: s# N8 w2 @
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# i# N$ w4 Y, [" [: ?2 ?+ P
  340.     {
    # n5 u( S: G, T# n
  341.       file=(*p).second;
    % q6 r( }# Q  E9 }4 n
  342.       free(file);: {/ J1 I+ J" m  G8 y
  343.     }
    0 g5 K, N# b0 V3 K( B0 D+ g; k" U
  344.     UpdateFile3.clear();1 _% C* F+ ?) {; s
  345.     UpdateList3.clear();
    & x7 x6 V, z# J( M' y. |8 \
  346.   }; v1 I" ~0 W% N, ?% |
  347.   if(UpdateFile2.size()): M9 O$ k+ Y3 F
  348.   {
    * @; o, ?! I/ w4 F* n+ G
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 }) l9 ]  n; ]: B, M
  350.     {$ g( V4 P# f- M
  351.       file=(*p).second;: y, V' ]: {* }: Y& @; ?6 s
  352.       free(file);
    - x8 O% ^5 u2 V  V
  353.     }9 J3 _  O8 M  x- K1 W+ a* d3 |
  354.     UpdateFile2.clear();6 T' U0 l4 B) p- o; z$ y: I3 s
  355.     UpdateList2.clear();* C, r) d- X- A& u8 D6 H( q; [; h
  356.   }4 `7 _8 @7 K3 q2 p/ d! ?% o/ g
  357.   if(UpdateFile1.size())3 r6 T0 H: U+ D! ?0 [; g! t# n
  358.   {
    # z" f% t$ _6 i% O  A) S
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 Y  d, V; C: a2 _6 Q4 a' B7 @
  360.     {
    : C+ H$ ^' M# l- Z$ d
  361.       file=(*p).second;
    * U4 j1 X7 Y  K0 X) D
  362.       free(file);) o6 s5 D( f* `8 `% j
  363.     }
    - J: \. ]# y- j2 h# h! h
  364.     UpdateFile1.clear();4 Y4 b5 d: v! R1 I
  365.     UpdateList1.clear();8 i% u* i- {' Z
  366.   }( N* j6 J: c9 k$ T6 W0 U
  367. }  
    3 F( c8 E& z" u" r* ]
  368.   
    0 `. z5 w  z- I/ ?2 O2 Z* n/ D, k
  369. BOOL CRevAppApp::CheckLocalVersion(void)" V% Z4 e0 `/ f# _
  370. {
    ' x: n: J0 i; B# j
  371.   int c;, a& }* [# ]4 ]7 |% U2 k% c
  372.   LPUPDATEFILE file1,file2;
    % K$ h" ^9 G4 W
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;5 y/ p1 L1 n0 [% T( r. Z
  374.   std::list<CString>::iterator l;( h) D2 S4 m7 R. o) F
  375. % R+ }+ Y6 }8 d1 @) E. k* J. `
  376.   UpdateLocal.clear();# P/ E7 d8 f5 _
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ( U5 P& g0 F1 I; h
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    . c; I* q/ x% F9 d6 J( Q4 m) s
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ) f+ D/ x& \- I' @1 N
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);0 T, N5 F) v# }) p8 Y8 a( u4 M
  381.   if(UpdateFile3.size())0 V& z  I6 J6 ?' c
  382.   {
    ; |% Y$ z6 Q( t+ u7 u
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    7 |1 j! X" F6 f
  384.     {0 B0 ]4 K% M+ q! G4 m" ?" ^0 ]
  385.       file2=(LPUPDATEFILE)(*i).second;
      H- I5 t5 j8 s& r6 a
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())2 X, R, N$ p5 W" B; ]  f$ K
  387.       {& u4 G& R* R. K; H' i  Y0 P/ S
  388.         file1=(LPUPDATEFILE)(*p).second;
    : l% ^% v4 Q4 }  P0 t
  389.         file1->vers=file2->vers;
      t, H4 n6 j  m3 I( P, m* k3 G
  390.       }
    2 n" ^1 L5 ?8 Z: {5 A
  391.       else2 z  H' h: y; \: N0 F/ O
  392.       {
    , ~6 i9 o6 r8 c1 }# m" C( d
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  W- {% D* s- V9 L
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! z2 ?9 V  t/ X9 v0 {5 y
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));6 n/ G( B& j+ R0 Q2 [8 E0 ^
  396.       }
    ) S- W. n/ \8 P
  397.     }8 I- n! l# Q; l' p) F
  398.   }8 G% o! R/ I0 N6 _
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & ]6 A* |/ o$ V/ Y
  400.   {) @* \7 i* m! _5 T$ n) l. \% k
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    - L: r; a: o: }& H% V! n6 f7 f
  402.     {
    1 t. d1 w# R6 A7 \
  403.       file2=(LPUPDATEFILE)(*i).second;
    3 R  p# H2 r' |+ |* H2 \
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 `# G& [) `9 E1 d' j% Y; ]
  405.       {
    ! M7 }( A  J: z
  406.         file1=(LPUPDATEFILE)(*p).second;
    . z' N2 V# \+ _
  407.         if(file1->vers!=file2->vers)
    2 v/ P/ J6 h9 ^. S) M
  408.         {
    * P& x& w! {% N/ d+ A: \) C
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    $ a& N; y; L$ R. P+ r% a
  410.           c++;
    $ k2 d: P) H- ?0 c; v: z# A
  411.         }
    ) |% ]0 d* t  e
  412.       }
    6 a) s2 W( w# n
  413.       else
    7 _1 q, [; f. j$ x
  414.       {
    1 t  G0 \& ~; u1 t1 F+ K# b
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. F& C: e+ C' H/ h, R% y7 [
  416.         c++;
    6 Z; L/ C) @% }' F; Y
  417.       }
    8 B/ \1 e4 x( k& G% L: m9 w$ Y
  418.     }
    ! [5 K4 ~& @4 W/ |: F( W9 L
  419.   }
    # i6 I7 s' F/ H! ~& U3 A; V
  420.   unlink(".\\DownLoad\\update.txt");  }) h9 w7 |& z8 h) g" l& J
  421.   if(UpdateLocal.size()) return TRUE;/ m0 X, B8 ?% P- c9 _9 @
  422.   else                   return FALSE;2 q( w3 m. Z+ [+ a
  423. }
    , \5 V/ p) N+ h- i) U, I
  424. " N0 n, V8 C; X( _; [$ y  S
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    2 {5 h  m" w* v! R# b
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    + @) {: [" ~" E  Z5 P1 m
  427. : e8 {# @# K3 |  _2 _
  428. . |. [9 o/ Y/ E4 s+ D8 A+ F( @3 B$ J

  429. & B: ~+ z0 d$ j. K/ ^
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)0 @* b, F' Z7 v0 f% r
  431. {+ [+ w: q( }* |7 I  u/ x8 ~* Z7 g
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;. ^5 p: J# T8 {1 b$ c( N! j
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 j) r3 N" ]1 @5 z8 v
  434.   {. u2 Z# C5 ^2 V' ~$ N, J. i
  435.     char szLanguage[50];
      g/ c9 G$ _* ?0 p
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( W$ `3 m5 g7 `" |2 k, _# n: Q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % d1 b7 k4 }6 I9 v' X3 G' ^$ ~
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 g  n: e+ }5 t4 ?2 [
  439.     else                                   m_iLanguage=ENGLISH;7 U5 h, p6 f: k5 z& O' _
  440.     char szRegister[100];, J3 U. h: k% L6 c4 {
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  K7 \& M7 G7 d! N; @5 Z7 H
  442.     strRegsName=szRegister;5 K/ c0 J$ T2 [' s0 [
  443.     char szPatchURL[100];+ I% d$ l6 G% w! T8 j" j: a
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % A9 j3 h  j2 [* k
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) u/ e$ R2 t$ m, j. q+ s
  446.   }9 }3 C' X& }% i% X& S
  447.   else" n' K+ ]; V# y! G
  448.   {" t0 s, W+ _# D( L& n
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: ~* t1 w" @6 s/ S
  450.     strRegsName=DEFAULT_REG_URL;
    & r$ D( [% b$ b2 Y/ \
  451.   }4 l) x/ H8 c4 X$ b+ O0 F
  452.   if(GetFileAttributes("hosts.ini")!=-1)2 H; e9 n5 |& G( S% e, [
  453.   {4 o$ ^$ N" H5 h& i. q# j
  454.     char szIP[50];9 q: y8 s! P* m) `1 \8 Z, ^! e
  455.     char szDIR[300];
    & @, o0 g5 x! H, d
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))4 [, Y6 b: _: S" c' g2 v0 ~
  457.     {/ I/ O& l  l, p
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    5 n. t* t( k6 M$ \' ^* h4 o+ K! Z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");; e' Z& ^2 {; ]' P' n% X$ ^1 ^
  460.       strHostName=szIP;
    + A& Z! w+ \  ^1 K6 u* S( C4 i
  461.       strHostPath.Format("/%s",szDIR);
    2 F$ ~$ |1 |' |1 C5 y3 E; f
  462.     }3 ~8 D/ R. V) x9 A* f
  463.     else/ r2 P1 K' j8 J3 I' V* ~# Y
  464.     {, |; t& a6 f" ~. Z3 a
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' ]! M8 S& D3 a$ u$ Y
  466.       {) G, F/ O& r6 ?3 h/ X2 i9 O
  467.         char szLanguage[50];
    8 U; M1 t# C/ P9 J4 r1 I) E
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 H$ l. ~, T$ T: y7 C+ C+ @/ o
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; ]' H+ \' I* r8 v1 ^: j+ x
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# ?* T; i; y/ |0 s$ T, u
  471.         else                                   m_iLanguage=ENGLISH;0 @1 h- B! n9 r
  472.         char szRegister[100];2 {5 t  D$ V& m5 ?
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");0 U% V$ E9 N* a0 P& d6 e6 b1 W* b# E
  474.         strRegsName=szRegister;2 P, j0 s6 O) V" Z8 I
  475.         char szPatchURL[100];
    8 s/ Y( U7 ~+ T1 ?6 a0 J& }. M
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 \( b" I0 [) o# a7 D
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : f8 o' e2 r% `2 m4 X5 ?
  478.       }7 H! ]% k$ y6 p; U3 [8 k
  479.       else
    * N5 L+ r7 O5 {2 d8 x
  480.       {
    7 a/ }9 {( R+ V0 r9 x
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & f, C- L+ ~) ]% J- H  F0 \, ?$ I
  482.         strRegsName=DEFAULT_REG_URL;' w: [4 t6 C' T: I( T( P) b6 k- ^9 a
  483.       }
    8 H5 m6 c3 N& D2 u0 h& x) E+ v) k/ S
  484.     }& G6 }2 A! S2 W3 B
  485.   }
    : e1 G& t+ E9 `  s2 z: D, I
  486.   return true;- G( q( d. D/ k5 T. U5 w
  487. }
    8 M5 e, \" P. {, a
  488. 3 f, {+ L& D# |( Q" }' z
  489. #include ".\ZLib\unzip.h"
    ' P& S& }& h7 B) {: w4 E
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);1 V9 ~& G: U" b$ y& o
  491. /////////////////////////////////////////////////////////////////////////////
    . v, P" Q2 r" q$ y) E0 f- X( W; F
  492. // CRevAppApp initialization6 J) Y6 x# V, G/ f( |4 O3 k$ W

  493. * B0 ]- [/ L( ~, T5 B
  494. BOOL CRevAppApp::InitInstance()0 ~0 q) i3 m/ ?! J
  495. {
    7 @5 n8 ~# F% Z4 s! _7 W
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ; x! p& g( U/ {1 L8 ]
  497. ! y& P$ s" v- V, }2 p  f2 ^7 y  m" f
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    4 ~  c1 Z, z9 m% K# [; n$ r# T
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)), U2 g$ t  |* u! w* Y) \
  500.   {3 _2 A; d% @3 ]. v0 v& R
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");( E9 C) Z+ z! L8 d. T
  502.     GetPathFromFullPath(szPathTarget,szPathSource);) e6 t2 y* r% Q6 `. }5 R' O( d
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    # g' v6 `* v& i9 I' k
  504.     {6 \7 a  \3 y4 \' I, [0 F
  505.       strcpy(szPath,szPathTarget);# L# G5 }1 m8 ~1 F- G) f) m( Y
  506.       SetCurrentDirectory(szPath);
    ' ^$ a' ^% u1 k$ L+ v
  507.     }
    ) E/ S& X: U7 ?
  508.   }' R+ k: y' p9 k
  509. #ifdef _DEBUG
    : t& J9 J* i; }3 [, z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . ]/ m1 g8 o2 h7 c* J  `8 D
  511. #else
    & G' ^$ K8 s% O% h% }7 k
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 n4 [3 f' H- J$ z8 c0 N$ `
  513. #endif, v. r& Q$ E; {0 Q9 u1 r/ S
  514.   {) f4 m" l0 B, K4 J4 j
  515.     char tempFileName[MAX_PATH];
    ; ]" b; U1 H6 I! J. M: g9 G' t
  516.     strcpy(tempFileName,szPathSource);' Q6 X/ k- q( n
  517.     tempFileName[strlen(szPathSource)-12]=0;
    : y2 E' U6 t. r- C7 R9 R
  518.     strcat(tempFileName,"\\$CSUpdate.exe");1 h+ t3 A* ~' G
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);% A! ?% F3 x. `& h
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    # Q7 }) a8 M$ c7 \. ^) f9 o
  521.     return TRUE;3 d* V1 m5 Q- _5 W7 f
  522.   }5 [- R, Q! r8 y+ \% D
  523.   // Nuke 0118: Delete run.exe% x/ z. S3 [/ d/ X( ^
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );& m! c; C+ p$ I! V. L* }
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");% B0 V8 E  S, p" [& M# T+ c1 j' Y# {& c0 ~
  526.   if(!ReadCfgFile("Config.ini"))! y% \! q9 g/ J3 u
  527.   {9 D$ ]6 l/ q) U  k
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);! ^' H7 I2 o. U6 O0 H) Z
  529.     return TRUE;- ?& r# ?0 {4 s9 o
  530.   }
    , n) @  z; H7 J5 V; ?# z
  531.   HANDLE mutex;3 o, ^/ |, j0 k1 [/ e: L$ M, J
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))& i& c( M, C3 }+ a2 R
  533.   {
    0 P) O/ w* b$ @6 w8 T
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)+ {3 ]' G8 C2 c+ g% {$ N
  535.     {
    8 \0 A3 z; a6 y# F9 O
  536.       CloseHandle(mutex);
    # h& T: w( M: ]) h9 U
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ( W) z' @0 v+ ]& h
  538.       return TRUE;$ O5 E, ~0 \/ `& J" F8 V9 |
  539.     }+ i; {9 n" q$ Z6 b) v
  540.   }  
    $ r6 ]- z3 t3 Y, C* x; W/ R3 X
  541.   CloseHandle(mutex);
    + I1 j" W# a" y/ w
  542. 4 l) }% d/ |1 v
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    / a5 q: Q/ ?3 j, b
  544. , Y1 y! B* v+ C3 G9 l
  545.         AfxEnableControlContainer();
    9 }4 w4 ?* D! G3 x5 o* C- v: f
  546. 8 o/ S% U7 @) s. P& b% F# m, y0 R
  547.   bCanUpdate=FALSE;
      Q0 g, p) d- i" O: s
  548.   dwStartUpSteps=1;9 l9 f) W( m) y/ ^% J( l) z
  549.   dwProgramState=AP_NOTHING;
    5 h5 `: C3 l8 c- ~, G, j$ A
  550. & j" Q# ^" b) }0 Q! @- X
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    1 v: u) @( q" m+ Z) V$ Z
  552. * y+ j6 T! a4 Z
  553.         // Standard initialization! Z* c* |/ F% Q7 c* y8 i
  554.         // If you are not using these features and wish to reduce the size  _2 `- ^: j4 b! W1 c0 p. s
  555.         //  of your final executable, you should remove from the following+ Y& g& S; e0 A; I$ k" c
  556.         //  the specific initialization routines you do not need.
    ' u6 R! ?7 d# @9 _' p# L$ F

  557. ( s, Y+ k( y' K! D% E$ E
  558. #ifdef _AFXDLL
    7 C5 ?9 ?7 i# o3 K
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 ~( Q- T' P/ x% s7 j2 t# P
  560. #else
    ; X2 m* Q1 B# b7 z. ]9 \3 z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically: v0 a* _8 E' o% K6 g6 T
  562. #endif
    - y3 r  M/ ]% e+ V9 v4 V0 @. I

  563. ; S4 Y4 C6 D' w2 u5 t
  564.   dlg=new CRevAppDlg;
    2 O2 S6 B( c' p5 S8 l
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    + U1 x& w! \" H6 z7 I$ f# c9 u; I
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + `) S; V  P! A. h
  567.   m_pMainWnd=dlg;. t: I! l5 R: P. ^: P! [7 h
  568. 5 [6 `3 P1 w, c
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);, L/ w4 X" L. ]( P, Q

  570. 8 D8 I/ G( {4 j2 U* i+ o- ~
  571. //  GdiplusStartupInput gdiplusStartupInput;8 r# q2 W! L* O5 H
  572. //  ULONG_PTR gdiplusToken;2 f; K* c. i+ g3 w4 i
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);9 r2 p" t9 a9 L" V& O

  574. 5 J8 V$ O. a7 z9 d( j$ }9 ]  l1 p3 u7 r
  575. //        CRevAppDlg dlg;1 F% _( k8 N; x8 d  V! m
  576. //        int nResponse = dlg.DoModal();6 L- t9 G) s( D' H7 t
  577. //        if (nResponse == IDOK)! Y- I( h" ^7 O& l9 C( p- {
  578. //        {
    6 i. t; g& _4 C" T$ K1 q
  579. //                // TODO: Place code here to handle when the dialog is
    8 Y7 }9 ?; ~+ B" s- k  |+ r) M8 H
  580. //                //  dismissed with OK
    6 S" m9 |+ }8 E" P8 N
  581. //        }
    : X" f- Q1 G8 l/ ?- N
  582. //        else if (nResponse == IDCANCEL)) o; y( z# K& s, y
  583. //        {0 l/ t, U; Z* r8 v8 K0 w4 x7 V
  584. //                // TODO: Place code here to handle when the dialog is
    , X2 f  }; s, s! `$ e
  585. //                //  dismissed with Cancel% {; p! `% t1 i
  586. //        }/ ^* |' J/ e/ q! \8 ~+ {
  587. % f! P4 L- b. k4 w! H$ i' b
  588.         // Since the dialog has been closed, return FALSE so that we exit the$ [% u5 X7 k% A. T* {# Q
  589.         //  application, rather than start the application's message pump.
    ! w6 A! H. o2 ~0 b8 T. M$ W
  590.         return TRUE;& ~, C: {: |- {
  591. }
    ' _& X1 l/ w4 W& n' h( o3 q; g
  592. . k5 V) ]" |9 M0 C+ c
  593. char *CRevAppApp::strtok3(char *pSource,char *token)5 T% O+ Y. K6 q3 o
  594. {
    & `% w. L& H; K  f* U2 P
  595.   int i;8 |3 t1 q- K. c
  596.   char *szRet;* d6 f/ Q: [' C( h6 z* s  p  p

  597. 5 ^9 ~0 Y, O* l" |
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    $ q/ i2 k/ [9 |, j2 d6 s( Z) O
  599.   if(sztoken): W2 S. H; e( [2 e3 }8 a
  600.   {  P/ M: r: I9 M
  601.     szRet=&sztoken[itoken];
    5 L$ ?7 H! z* Q7 L8 ~: V# d
  602.     while(sztoken[itoken])8 a" S4 r  f' t+ _
  603.     {& B. x: S5 x! H' g$ J6 U
  604.       for(i=0;i<(int)strlen(token);i++)
    9 ^3 X+ W+ V' L3 J
  605.       {  j" m! K1 P9 B5 }8 M  @' M
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])  v; j  z& d# D# b
  607.         {
    7 z. }8 W+ Z$ i/ @( F: Q
  608.           sztoken[itoken++]=0;
    / J& P7 q: Z; M3 h" c$ w
  609.           sztoken[itoken++]=0;
    # K, H& p; T0 \7 k" O
  610.           return szRet;! W: |' L" v/ O2 U' [% W% Y
  611.         }2 o& V, Y+ y4 K" _% r1 y
  612.       }1 m. W" w5 E; U% O' G0 ?" ]* W; u; t
  613.       itoken++;
    - z$ l; b. [# g7 r6 ?2 U. h4 r2 |
  614.     }# A# s( N& P* g8 I( Y0 N4 V
  615.   }
    ) H% w/ C+ z/ |$ |  U- I# h
  616.   return NULL;
    0 ^5 M5 s5 ^7 D# G% k
  617. }
    # I. a* A  g7 a$ _0 b; ^
  618. 5 D8 F6 n$ G& w* |
  619. void ProcessProc(long Total,long Current)! `# T1 c# f/ R- j# q1 ^' x
  620. {3 c) n6 p5 A! ?& M7 _
  621.         MSG msg;
    ) u: h7 j2 ~' V8 ^
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);- _9 @, T' r$ J; y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));. Z2 H( M2 k# m. [5 q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    $ ?, s$ @" o7 y, Z' F
  625.         {
    ) }2 f4 K  y  z* a9 y
  626.                 if(!GetMessage(&msg,NULL,0,0))1 J4 @  y' J9 z. Y; c% L
  627.                 {
      Y3 {( ^5 t' A2 h6 K9 x
  628.                         return;# t. ]4 A; `5 t6 d' l8 S
  629.                 }( {/ I# b4 m/ Q# s
  630.                 TranslateMessage(&msg);4 `0 e' p7 f5 b; Q$ c5 r
  631.                 DispatchMessage(&msg);
    5 d3 X5 \- ]+ r, I# E
  632.         }       
    9 [, \9 H7 L/ p: C6 i, D0 @
  633. }
    ( q+ w" Q: s& n$ X) I9 G9 |" H
  634. 0 y! _! \. b$ Y/ {8 |' p. }
  635. BOOL bFirstChar=TRUE;
    % g! d) N6 Z9 c+ b) m3 [) t

  636. ; J) o4 i( r. y' M% _' w- n+ M
  637. BOOL CRevAppApp::OnIdle(LONG lCount): ?- m# s" Y3 Y: L. R
  638. {" _4 ]5 n/ ?+ T$ i' q5 N' G
  639.         // TODO: Add your specialized code here and/or call the base class
    1 G" a( b. ]: h" y
  640.   switch(dwProgramState)
    6 @1 P% E8 q8 ^6 |# r6 F  K5 D
  641.   {
    9 k. o+ N. \6 b# `: R9 Z8 Q6 b
  642.   case AP_NOTHING:
    + w; X  i+ Z* n5 ]6 Y. s
  643.     switch(dwStartUpSteps)
    $ n' A- D- ~8 c) M6 |8 U' ~+ D
  644.     {
    0 J: w: S/ r( ^
  645.     case 1:
    0 J- }; J: L8 Y. j( g* l; y. C/ f
  646.       {( L0 u* f; Q# D) x9 ~6 o( m' _
  647.         int i;# g. M" I, H3 o3 R
  648.         CDC *pCDC=dlg->GetDC();4 c; f" ^+ |( R9 [& j1 X! ~4 I% ]
  649.         HDC hdcwnd=pCDC->m_hDC;
    % i; H% H! U: Y. e
  650. //        Graphics graphics(hdcwnd);, v9 }& _$ M- z! `2 H
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");& n5 _/ F" S. q5 h3 s+ @+ q. Z: `
  652. //        INT iWidth=bitmap.GetWidth();/ _4 Q  X# K) Y* \
  653. //        INT iHeight=bitmap.GetHeight();
    + `! E. |1 J% X
  654. //        Color color,colorTemp;
    ; |/ g" d& F, g6 {6 t+ D* Y2 E& f
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    1 g7 f. m4 Z! ?$ Q  h
  656. //        {
    9 ]1 j/ d4 e) R/ \
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)  P$ [" p: t# y& X
  658. //          {
    % p$ L5 D2 u; ?9 Z& e7 ?1 G
  659. //            bitmap.GetPixel(iColumn,iRow,&color);: G' q  `$ M8 m) s/ \1 H% W
  660. //            colorTemp.SetValue(color.MakeARGB(
    ; b; X) h$ b) P9 t$ H
  661. //              (BYTE)(255*iColumn/iWidth),, \9 |3 V6 w. X8 p
  662. //              color.GetRed(),& a; c) A9 i7 z
  663. //              color.GetGreen(),$ R3 J2 P2 `2 F* ]6 c& s
  664. //              color.GetBlue()));4 X* a/ p6 Q' d
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);  {1 g3 L" A+ K2 B* `
  666. //          }$ N9 q; b: V! H9 ~1 L7 Z
  667. //        }4 Z; ^  G$ a% o9 C6 }" d
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);; S4 k# m) g2 W/ z' T
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 D% o, y! N2 x
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 y1 ?. x! [4 s4 V4 Z4 t2 ]' ?
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # p& q: O  s& D5 Y# w) M3 x# ~2 @
  672.         for(i=0;i<240;i+=8)( X* ?1 ?- [* }0 {8 m3 z. X
  673.         {
    8 S% ]; Y3 M; y. p: m4 j3 u
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ z, |# L1 I: x. i% E" u
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( _; B6 r0 B5 b
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 Y5 L3 j: \+ i9 ^
  677.           Sleep(33);
      b- i7 t5 l# m$ m: [
  678.         }
    ; M/ q% N+ I) N# H, o3 f7 ?% I' D
  679.         Sleep(1000);0 p) z. f/ ^" f! R0 L5 y
  680.         for(i=240;i>0;i-=8)0 I! N" X, z2 u1 O; j: {- ?
  681.         {
    2 J# i. _+ b( q: j! {3 X
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ `1 v  N0 t$ m# |1 i
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' U) V2 `4 \* m
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ |( i9 b4 ^; _% }
  685.           Sleep(33);
    , R  U9 e5 Z9 r- I% Q2 i
  686.         }
    , H. t: F6 K- o9 G$ `. l- l
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( ~0 Y/ P% _0 t, Z! i2 S* X
  688.         dlg->ReleaseDC(pCDC);2 R: o! I0 I- O& \+ t9 E2 n, ~
  689.         DeleteDC(hdctar);, Y; G6 @2 P* Z
  690.         DeleteDC(hdcsrc);
    8 \2 d: a1 b6 c( a: E, k4 K
  691.         DeleteDC(hdcorg);
    2 I4 _/ i9 `2 k4 U# P
  692.       }, d" Z6 K7 [  ^& r, C1 [4 }
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    8 Y( [  Q  G# t) ^* Q  D# A
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");6 ~+ N) L0 M& E
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    1 F7 W3 U( g& W8 [" `4 V
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ( B6 \$ a! |* R, p: i- p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 z4 C" L% Q; ?0 a  ?: {
  698.       if(!Dn.Connected())
    5 @  V% S/ m( Y+ K- Y& @: E2 L
  699.       {3 C9 S6 G8 B! P5 m; S( c" W
  700.         dwTotalFiles=1;& g+ [/ Q' }: X  B+ f0 o) b! k2 |
  701.         dwDownLoaded=0;* g+ ?+ \8 S( F) q5 h1 \
  702.         bSilentStep=TRUE;0 ~/ K; g" u! x
  703.         bCompressed=FALSE;
    / _- z2 G) A* C$ b" u" o
  704.         strExtLocal.Empty();" Y" G+ D+ M" e2 {( e2 J2 I8 D& I
  705.         strFullName="readme.txt";- E7 g; k$ _% _7 J1 U
  706.         dwProgramState=AP_CONNECT;& b  f6 q6 e9 [4 E5 q% v
  707.       }
    + j/ a5 Q: O* [" C+ L
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();1 X! R; a$ q9 A3 ]
  709.       dwStartUpSteps=2;, [6 R; e% w$ \" ^, D
  710.       break;, H. z. O6 Z7 D8 ^8 c2 p. }
  711.     case 2:
    2 O. O: g- Z8 m2 F0 l/ p
  712.       {
    : O8 ]8 @; C  c0 u) [
  713.         int iEOF;
    1 q3 Y: W% Z: m% W" h4 p  X
  714.         FILE *fp;
    , U1 Y: {+ A) f; A
  715.         char szString[512];
    ) m7 H6 \! A0 l& u3 e5 W) w) @4 W
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");$ z, F5 w: `3 ?3 w5 M
  717.         if(fp)6 l/ W. x' j3 M! G4 [6 }6 K4 D
  718.         {. O% {* u4 c, B0 \0 p. x9 X
  719.           do. S3 @* Q- @& I; b  ~
  720.           {" L2 S+ h, ^: M# b# q6 t
  721.             iEOF=fscanf(fp,"%s",szString);
    ! F3 R0 D" D8 w) ]5 S! L. A! `
  722.             if(strlen(szString))
    " N8 F) g& D* D. q# n' {: G
  723.             {
    1 B3 b$ W- Q+ N9 X
  724.               if(bFirstChar)2 ~( p$ {, j" J4 R6 s" z
  725.               {: N" L( d1 I7 e0 M- z$ l, q
  726.                 bFirstChar=FALSE;$ V1 W  |0 x, E& s% O& g7 a
  727.                 bConnectIsBig5=FALSE;; Y7 Z5 ]" F, ~, y+ }  q
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    0 p, W# ^* _+ L1 _
  729.               }
    2 v& T* q; a; s2 V/ s9 E  M6 G" g
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    3 L# T, ~! o! x9 \$ ?
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));# A5 g" f8 i6 ^, }
  732.               dlg->m_ListText.AddString(szString);6 T, u! p$ o) H9 Q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 m* P$ L: B4 k2 F8 G  X- K$ Y
  734.               *szString=0;
    ) L. h' b# ]  R1 a
  735.             }, v( A$ ^  _  A' U6 x+ a  a' x
  736.           } while(iEOF!=EOF);8 _! J* t, k3 Y
  737.           fclose(fp);
    * o2 N  z; \4 L5 l$ q. Q& M
  738.           unlink(".\\DownLoad\\readme.txt");
    4 l" h, ?! O5 X- {
  739.           dwStartUpSteps=3;
    ! ^1 c6 J$ L  W  |
  740.         }
    ' v! n) M# m+ {+ |+ y; n- |  e+ C! Z
  741.       }! V% R1 A% W7 ?2 D1 g4 w
  742.       break;
    * o" W. ]$ r% [, H7 W
  743.     case 3:) A, o! z- ?8 z0 e0 E& B
  744.       if(!Dn.Connected())! S4 J1 [' T0 c5 Z0 H
  745.       {) P# a. {3 |6 x/ k
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    9 h) x6 M8 W) D
  747.         dwTotalFiles=1;0 y0 f" a+ H1 g. N# W1 K8 d8 D
  748.         dwDownLoaded=0;; X0 t6 A- }) h" p, I( j
  749.         bSilentStep=TRUE;
    ; j+ _2 i5 }3 o; j( ^+ {
  750.         bCompressed=FALSE;
    3 h2 O# K; p7 E, D/ q" e
  751.         strExtLocal.Empty();  R3 M, \, C  e2 Q) ]/ W
  752.         strFullName="checkversion.txt";1 d' ~( s, ?' n7 f, f! z; ^2 Q
  753.         dwProgramState=AP_CONNECT;
    5 h6 d# D. [+ Q1 s2 h
  754.       }
    6 z3 J$ s+ q/ C3 N5 u
  755.       dwStartUpSteps=4;
    7 [! J" S' h8 a% p
  756.       break;9 q. @# h$ s+ Y) U1 p" g
  757.     case 4:$ B9 p6 R( u* X/ O
  758.       {
    # n" d/ n8 `$ f& ^
  759.         FILE *fp;4 @# P4 [2 p! ]
  760.         char szString1[128];
    : Q' H, j9 z+ h* {
  761.         char szString2[128];
    0 _, q, ~8 A* `: r; h
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    9 V7 p9 |* {* ^
  763.         if(fp)9 c; Z$ Q) W- M# h
  764.         {5 _# S* _8 {4 D" r- A; x
  765.           fscanf(fp,"%s",szString1);
    & o1 W$ N3 D' f* a% k7 ^' @/ d/ _
  766.           fclose(fp);
    : v; A8 x1 j- L
  767.           fCheckVersion=atof(szString1);0 r3 f7 L! J1 f$ T- Q4 Y
  768.           fp=fopen(".\\checkversion.dat","r");" w, o3 I( i& q3 h" ]
  769.           if(fp)
    & t' e1 Q7 @7 _/ w
  770.           {4 s  f( J) Z  x* E- |
  771.             fscanf(fp,"%s",szString2);
    % X& r" Q4 `/ w' r5 W8 z
  772.             fclose(fp);$ ^! T! h/ ]& `8 W! A. e$ ?& X
  773.             if(atof(szString1)!=atof(szString2))
    . |7 i$ o9 s1 k* `# S% `: N' q& Q
  774.             {
    9 W  a* B; ]! ^5 A7 M
  775.               if(!Dn.Connected())  s7 X9 u8 \. X) s, \/ ~
  776.               {3 @- D; O: S& S$ w, W
  777.                 bFirstUpdate=TRUE;
    + o0 ?1 Q: P+ s" g) Q
  778.                 dwTotalFiles=1;
    5 \; Y& X! L+ F, o; j  h
  779.                 dwDownLoaded=0;
    5 i9 Y4 a8 v, w& ?7 d% o) |& O
  780.                 bSilentStep=FALSE;
    " T3 y6 e5 a0 C: c% K% W# w
  781.                 bCompressed=TRUE;
    2 w2 H* F. b5 U  @. y# z: Y1 a7 y3 P
  782.                 strExtLocal=".\\DownLoad\";
    - @* P8 K! q- m" d& j8 [
  783.                 strFullName="update.txt";
    * ?3 A# j* {( z6 n: @3 S# J
  784.                 dwProgramState=AP_CONNECT;
    ! t+ P3 C" L4 Z" b8 B' D/ N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" x+ `( a) h* t
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 w, z% [: s- t: g5 E0 ]  y1 ~
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");$ G3 C5 ~+ g, i" D2 A6 [5 R$ W
  788. 2 e! ?/ y: l0 H* }" k5 r; p
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 b5 y/ p! @" T4 V! G: d9 i
  790.                 unlink(".\\DownLoad\\checkversion.txt");2 L* }' R/ o7 s+ S( D' ~2 u3 f
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
      C. A4 G6 u  T, P
  792.                 {' h: L/ X7 a3 t! i: |0 h
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");0 R" G# p/ X" x" K# I+ `: ?; s
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" t3 P8 [9 [! r2 ]& L5 e) a7 Q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");. l' _% B# y' o/ V# b' T
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' `7 k2 T( V! q; W$ C# B: I" Q
  797. 9 ]+ t5 o4 p$ Q5 g  l( D! B
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % D6 ]0 l; n: n/ d
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");( J% e/ n' F% J$ M
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");: I' V6 t$ E' I  G! ^- n# P$ b5 Q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 e% ]. Y2 m4 Q5 W* K; O# l& i; L
  802.                 }  e( w* G. F3 s
  803.                 dwStartUpSteps=5;2 ?9 G3 G* m8 M/ Y% g+ g. ]# h
  804.               }+ j7 P6 t& `- t% N- F& A
  805.             }  m' |' n4 W: w/ p1 M( o
  806.             else: \( r- n* R* g7 U+ |8 x; ?
  807.             {
    2 [% o2 g* Z1 ^/ J
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ' p3 N- K5 Q) v
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 Q: i: v- }  F0 e: d: M
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" [2 J! w$ w: G& b7 k6 }
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    + U( B# }0 ^% m

  812. 3 G' x& ?; u5 p9 g  q2 D. \
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) W  p' _( c* I; p. X! T. r
  814.               dwStartUpSteps=99;
    ( w7 ~3 u  {  \, U6 g, V3 i0 n) T
  815.               bFinishUpdated=TRUE;
    1 z9 i% @) B/ o, D2 B' H
  816.               bCanUpdate=TRUE;
    8 @' B$ f! q: ^& b
  817.             }! V& p0 x( s1 T: o, ?
  818.           }
    ' P8 z+ n* a9 t& o! @* V4 _: v. p
  819.           else- L8 |/ ~! o: ]) ~+ b5 N
  820.           {% Z7 B# F# t' r, {" [- Y8 x, @
  821.             if(!Dn.Connected())
    / [% q( ~5 {3 D- Z2 ^0 x
  822.             {  w4 f" x4 H0 j/ E" a" G
  823.               bFirstUpdate=TRUE;
    ' x" v) a9 n; h5 [- E2 m8 `
  824.               dwTotalFiles=1;2 Z4 Z& V; ?$ V2 F
  825.               dwDownLoaded=0;  V" d' m- t- N' ^
  826.               bSilentStep=FALSE;
    9 w7 k) m( w/ K: a2 c( c
  827.               bCompressed=TRUE;( w/ a0 l& ?6 s
  828.               strExtLocal=".\\DownLoad\";: N7 K3 y8 F* a' J7 Q- W
  829.               strFullName="update.txt";1 h9 |+ Y5 z$ `" }' j  g
  830.               dwProgramState=AP_CONNECT;
    8 Q0 S* s3 a2 w  H$ ^
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 I5 @% Z1 J$ H6 u2 `5 m% L6 p
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: E1 a0 l. Q5 @$ T8 E
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " @* U0 V; B6 l! c! c
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % g3 h& W+ h& U9 Y/ x# l9 g5 c
  835.               unlink(".\\DownLoad\\checkversion.txt");
    : v5 g9 N. z! L' K
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    5 D8 D" q$ O( d7 p) |: k- P' i5 i, u
  837.               {( j0 r8 R/ o; `
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");& q0 v& n- M% j
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    & ^' ^; D5 Z" [/ G% V8 L7 z5 `* A
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    2 t3 |" ^# ]8 x& V8 |; z" c
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) }" Y2 o$ D* j5 @5 W
  842.                 + p1 z: [6 L  S/ [  o) l
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / P/ {; R4 j" {& K+ U4 w- S; Z: v
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ y( ^+ @6 W5 h9 \
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");$ \: g( Y8 x3 E
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 T3 ~! q% X6 j2 f2 l4 B
  847.               }
    0 U- {" H8 a' {4 i7 S% C. t2 ^
  848.               dwStartUpSteps=5;
    , Y# V5 A/ e5 `2 @* P7 ^2 D
  849.             }
    9 ^6 K7 K& l8 z& b
  850.           }
    % J+ p& P# P9 K' B* t6 N5 b
  851.         }9 g) `  P1 j: t
  852.         else
    ; G0 N1 a3 w4 ^8 F* S& X
  853.         {
    * C& r5 `5 E; w* Z8 \
  854.           dwStartUpSteps=3;  e8 @' w& D$ n: m7 _- F
  855.         }6 D) l6 q& t/ Q: X2 P0 q- B' j
  856.       }
    ( l& q" F9 t* i: P8 v
  857.       break;2 j# }5 f* `6 l
  858.     case 5:
    . r3 x; T5 W% n7 [% \1 W. P
  859.       {
    : g2 u% U# H. ?1 m: g0 ?5 ]
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ( u7 D1 r" P% ?6 P2 u5 `
  861.         {% ?9 C& ^/ I+ p& B3 t
  862.           int opt_overwrite=1;7 y, x; x: ]6 I& {( Q4 k" q
  863.           int opt_do_extract_withoutpath=0;2 J! u8 H1 q* x* c2 c: `
  864.           unzFile uf=NULL;# p1 m9 q& n! x7 c6 v& D3 ]6 c

  865. # w2 a- u* r# o# x& t
  866.           uf=unzOpen("Wsa.zip");, n/ y* _9 A% j- n- C
  867.           if(uf)
    $ u( t& ^/ a& o, P
  868.           {
    5 s! a/ q: [$ N4 s* b1 W1 T2 ]' {
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);) A8 N0 a9 Q1 b/ t4 R8 G+ z
  870.             unzClose(uf);. g. T% }2 i4 U- B7 L5 d$ \
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    5 g3 _1 i2 f( _: |! R  {
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");1 \9 x8 ]7 ?  j- f1 l3 {/ \
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    + n# T- @8 H' v" _( ]8 u6 P
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ K7 j9 o! W+ }1 U1 M5 B# D
  875.           }) S# K" I8 Z7 m2 C+ W( Y% Y
  876.           DeleteFile("Wsa.zip" );+ o$ Q2 q5 q: }+ k# a0 L; f5 _
  877.         }
    - L/ T, y# ^. o# A
  878. 0 B) g8 H3 G; M0 d% L7 i
  879.         if(CheckLocalVersion())
    " g# \1 u2 F( ~) i' X
  880.         {
    / R2 t# H- y8 X+ Z! r! J) {1 U2 l
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    9 r) Y/ o* s0 f/ n- `0 q2 \
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");. ^) @8 t1 B# f: j7 a3 [8 O
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    * O$ r- ?1 p# J. e1 ?: D
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * l8 U3 A( o9 Y1 ]. ?
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
      z7 e. F( g0 L3 r: f
  886.           dwStartUpSteps=99;( W% G3 y  o7 a6 x1 I
  887.         }
    . w$ |9 V& z) d. \
  888.         else- X" ?6 x9 q! c1 z* y$ A
  889.         {
    9 k# {' E0 Z7 E0 a' D
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");. Y; g4 f% s7 E6 W& S* Q' D3 S
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : Y- Q- ^' A- S3 F( o7 B1 `$ y
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");9 H5 \2 n0 p- N" }* G/ _3 p

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

( j' G5 l+ {0 q2 `3 T( w) q% I+ t$ M  v: M/ X& [2 l; V+ k3 E$ W

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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