找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
/ D' t) |3 x( J$ ^, Y
  1. / RevApp.cpp : Defines the class behaviors for the application.9 M  O6 q) g# O! N" _0 O0 E
  2. //
    & v0 ~8 I' Y& u3 f0 m2 I0 C. M
  3. + G$ d9 d1 _+ h! t' V( s) F7 Z
  4. #include "stdafx.h"; d9 F2 B$ g% X
  5.   s( E, k5 T0 D' e
  6. //#define UNICODE$ Z8 g8 r9 }% l7 t( f
  7. //#include <gdiplus.h>+ i9 o9 B& n' o& ^1 q
  8. //using namespace Gdiplus;- `" J# z; Q1 Z2 V$ _5 S" P
  9.   ]) T/ e8 F$ {
  10. #include "RevApp.h"; K' I+ Z0 l# Z* z3 ?
  11. #include "RevAppDlg.h"" Q/ `7 P# s- B: A  t9 Z
  12. 0 z7 o+ c* r& ^! z* j6 R
  13. #pragma warning(disable:4786)
    - I* X; o* n4 i, i9 p, N
  14. #include <map>2 ?, o) \7 ~, O, D( [. J
  15. #include <list>
    5 j" M. M7 y8 y( x' s; N
  16. #include <direct.h>3 G# _; r  c7 m8 n+ o) x" r

  17. 5 p+ h1 L- a' S, _9 f' k5 u3 h
  18. #ifdef _DEBUG
    ! g# a. m: e* q0 U, k7 Q* G/ F
  19. #define new DEBUG_NEW4 F- E  b5 i. `& |: ~% D. s+ O
  20. #undef THIS_FILE
    8 X& t! I- ?* H, |+ H# \/ \8 ^& H
  21. static char THIS_FILE[] = __FILE__;
    $ x7 p/ J# u; P
  22. #endif
    / s: Z' R; `8 }; Y$ {6 p
  23. #include "SkinResDef.h"4 S/ ?* C8 Z% v& k- P& v) e8 h
  24. #include "ChangeBG.h"4 a8 i9 s% a! z, h
  25. #include "AFXINET.H"# n8 ^% S$ _8 Z" y- v# ?$ W
  26. - b: K0 E8 X9 u
  27. #define TRADITIONAL_CHINESE 0
    / l% u2 N1 B: ?# P; q  g3 {# U. X0 F
  28. #define SIMPLIFY_CHINESE 1
    / c' ]" h( k# Z: Q0 O
  29. #define ENGLISH 2# o" X$ u6 P. c& r: E! [
  30. int m_iLanguage = ENGLISH;5 V* T" N6 w+ l9 q3 ~) c* R
  31. /////////////////////////////////////////////////////////////////////////////  m; @- t; z% t
  32. // CRevAppApp- _. G& G  C# U4 K& C+ ]# x

  33. 6 s( A9 k* s! |, e9 h
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! V2 w5 j5 w. t0 n
  35.         //{{AFX_MSG_MAP(CRevAppApp)# v) M) j2 m* E3 _  |' V) a: q/ h
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    " n1 ?- E- G7 A. [
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    4 X% L- v# m6 U
  38.         //}}AFX_MSG
    9 n  ~' {) [% y; |% H' b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    , R/ o7 E- Y& r5 E+ n
  40. END_MESSAGE_MAP()4 M! X4 z) f2 E0 M

  41. ) q: U; R8 T( z6 H: X0 b
  42. /////////////////////////////////////////////////////////////////////////////
    4 a2 |) P2 i/ H/ x9 l+ L0 C
  43. // CRevAppApp construction4 R" C5 p+ |3 V* w$ A( c- s3 n

  44. ' E$ V8 Y  e- K
  45. CRevAppApp::CRevAppApp()  N4 H( _" l* t9 w3 \9 N/ |
  46. {
    / j2 m: S* R7 {0 T5 E3 A
  47.         // TODO: add construction code here,
    : \2 Y# L. u  H, d2 E0 P
  48.         // Place all significant initialization in InitInstance; J& i! h* I9 u4 ]& E$ m% R
  49.   bDisplayIsBig5=FALSE;
    * q4 `$ X+ a. N3 E: g
  50.   bRestartUpdater=FALSE;( e+ y+ ^0 T2 B6 j" M8 W
  51.   bFinishUpdated=FALSE;
    , w8 P4 d$ s  e! {( s8 H
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;" g) H. s- e5 ]0 |8 N
  53.   InitChangeDataBig52GBKS();
    ' e) a: C0 B9 b- g9 o/ R
  54.   InitChangeDataGBKS2Big5();
    . x: W) t; S- n. B
  55.         //
    , ?( g, ]% d- @& p0 s' z5 P+ e$ Z
  56.         bClickRunExe = FALSE;
    . M$ V/ C, y: L( b! Z. C
  57.         //
    , k5 U% s9 @& z0 F
  58. }
    " j* [2 {# e; |4 J. t4 J$ z% W

  59. 8 ~0 `4 H9 |: l1 _" b* b
  60. CRevAppApp::~CRevAppApp()
    ) G# U1 M1 p& U+ ?: m7 C6 ]
  61. {! d* x4 H* w* n$ R" V2 {5 G
  62.         // TODO: add construction code here,  s3 @/ k/ t2 v9 ]0 P* e* ?* `% @
  63.         // Place all significant initialization in InitInstance
    : n$ P+ r  i# C; _
  64.   EndChangeData();  A( J0 j* s9 }- C
  65. }
    - _6 L% `& s1 L+ m+ ~7 v+ M( g

  66. % v+ \# ^& o4 k& O# f. I* d+ X
  67. /////////////////////////////////////////////////////////////////////////////& o, t/ x/ I7 t( [
  68. // The one and only CRevAppApp object
    1 v. q7 |" }; w5 Z) f* O  C

  69. 6 f4 j$ ^) ?( @
  70. CRevAppApp theApp;+ ?5 w% e* P+ O1 j# o& t
  71. 6 v, R% @8 x+ A+ C0 k  H
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)4 S  k- P) s5 |$ T4 M4 H
  73. {
    . b  i7 k" I' _+ [6 Z, q2 q9 T
  74.   int iEOF=0;
    9 ^9 Z/ e/ k: E  z
  75.   char szTempName[MAX_PATH];( p( t* w& l5 ~: _: {
  76.   *szFileName=0;
    3 n" M' E# Y" [& V! A% n% |
  77.   iEOF=fscanf(fp,"%s",szTempName);
      ?2 C5 w9 W7 B  g  I+ R% o
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    3 G! S0 z& {, n3 T
  79.   {( A) |* ?- T, O, S' P' t% v1 i
  80.     strcpy(szFileName,&szTempName[1]);0 {' k' f& l/ q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 B3 B1 O! T. J% ]0 M/ l
  82.     {" c' _# o9 `/ M7 n
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ! U( v3 C7 L+ K; H. G; U1 L7 y" a/ g
  84.       strcat(szFileName," ");0 p" j' [" Q2 t8 Y6 @
  85.       strcat(szFileName,szTempName);
    ' \  s3 H1 ^/ D; s; Y8 k- h4 U
  86.     }
    4 l* B5 F, c: J, d9 _/ R; o4 H  [
  87.     if(strlen(szFileName)>=1)6 V8 Z. d. g# \- Y6 \4 S8 ~, l
  88.     {
    # z  e# p/ U3 e7 v4 b! h8 p
  89.       szFileName[strlen(szFileName)-1]=0;) X9 \$ ^" j+ p+ o2 Q2 W
  90.     }8 h( P. N, A8 C# {/ e1 A
  91.   }3 [/ E& j/ s+ y! ^4 r
  92.   return szFileName;
    * H7 o8 x6 q' C* j- k3 X  D9 Z- Q4 ]
  93. }% S' q: e' ?/ E  J+ t: _" K
  94. 3 M8 v7 ]& W1 v" k( i
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)+ T0 `$ n/ k3 ?
  96. {
    1 y  `$ ]7 w# W7 i4 {6 n7 X% R
  97.   FILE *fp;
    7 V  i+ O  ]+ O0 w$ {2 b: I+ m
  98.   char *key=NULL;
    , s6 Q7 W% _: c9 Z8 h( A9 m) D
  99.   char version[MAX_PATH];
    / q1 k4 y" m% l) }9 s0 @' O
  100.   LPUPDATEFILE file,olds;7 |( d; x  B6 a/ f2 z! v
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    + V( U! S, v4 Y
  102. 7 |1 ]6 i" y2 S2 T' ]/ r
  103.   UpdateList.clear();
    : B8 Q0 S- j( O$ q' g) [2 ]+ y" U, @$ A
  104.   UpdateFile.clear();
    . \* u% {! ~' `6 E' |0 }2 \
  105.   if(GetFileAttributes(filename)==-1) return false;4 ^, Z& _; g; G, ]$ S; i
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ( {6 N2 i- u1 n( A+ J
  107.   fscanf(fp,"%s",version);
    1 E3 w/ g- V) E  y( Y& h
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    1 _5 v! n$ u6 ~" Q% n  I
  109.   while(fscanf(fp,"%s",version)!=EOF)
    0 c5 T9 B! I- M2 D& W
  110.   {3 e% F1 T5 s: a
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 `* y' j  @! X& Q( ~7 U  f4 Q
  112.     fscanf(fp,"%s",file->path);% [0 S) s9 m5 ^  i; `& h6 N  r' \
  113.     ReadFileNames(fp,file->file);
    , B2 h( Y, n2 N6 a, W" W
  114.     strcpy(file->full,".");
    ! ~+ X6 p( R9 \2 `2 S4 y! t
  115.     strcat(file->full,file->path);' ?% A$ c/ W+ @! r9 I4 _5 B
  116.     strcat(file->full,file->file);
    & n& X* x! X! D7 }/ R4 `; _
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())5 m( a* i$ i0 f7 k2 a1 l# a; {
  118.     {+ A# h0 n+ S' ~) F* Q% r. b
  119.       file->vers=(float)atof(version);: r" l5 g6 v+ S; n8 p% p) f. e4 @
  120.       UpdateList.push_back(file->full);
    6 ~+ h4 Y8 [; }
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));0 d. K2 Q% g  q6 z
  122.     }' v7 u7 O& }3 D
  123.     else; Z$ J" y  C2 ?6 a
  124.     {( h% Z* O! {; {2 T8 M
  125.       olds=(*p).second;, E* f. b6 J' \5 X4 b" X- a7 y
  126.       if(olds->vers<(float)atof(version))9 z& z9 j4 g( M+ j7 N
  127.       {
    & |0 @6 Q( N( U: t
  128.         olds->vers=(float)atof(version);1 f. f  Q/ y7 m( ~6 F5 T
  129.       }7 ~, a/ p1 _$ O+ x
  130.       free(file);
    # T* q& n. g! C
  131.     }
    # a2 |6 p' Q3 ~3 d! }; w
  132.   }' N: Q% F% [$ f+ _4 O
  133.   fclose(fp);) q! U# ~% r" T! m$ {. O
  134.   return true;
    + h4 B. X& c; Q# n6 V, Z# A
  135. }1 M6 Z( {' }+ n% s( b5 ^8 X
  136. 6 a. e+ U  {1 q! k
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)6 K& I& w. u1 n1 u7 Z( r) r8 _
  138. {* J. r" z# I- f+ v( b
  139.   TCHAR  szFull[MAX_PATH];$ y: M1 z2 |: O
  140.   TCHAR *token,*inter;* x: q; ]1 M5 T! h5 d1 L; E
  141.   *szPath=0;/ q" p0 u" Z; E6 ], M. \1 M
  142.   strcpy(szFull,szFullPath);4 Z; [0 |: q$ l' |
  143.   token=strtok(szFull,"\\/");
    ' [9 k& }; M5 X; ^* Q3 \3 W
  144.   inter=token;
      e% o3 D' z$ U+ g% W3 N6 I% y+ b
  145.   while(token=strtok(NULL,"\\/"))
    " n. G9 A4 G. @% d& K
  146.   {$ a: x; q/ L: O
  147.     strcat(szPath,inter);
    . o1 T4 {; }' @- J0 Z& p# a
  148.     strcat(szPath,"\");
    + S" P, y9 Q6 G3 H5 K; Q
  149.     inter=token;
    + b5 D: f6 p$ N. p. ~/ u/ c1 a7 j
  150.   }( e: n: k- D1 |& R% Y
  151.   return strlen(szPath);
    8 i% K  o* Z; N3 A2 T) r" I
  152. }" c+ a$ V! O/ e+ v2 Z5 U* t% b

  153.   i1 _- G$ T% `+ a+ v
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    # ]( O! S4 l' z7 Q' R/ _( ^+ ^8 \
  155. {1 W0 \5 ^( a8 Y! J& r
  156.   DWORD attrib=GetFileAttributes(Target);
    1 w$ [0 H  f( s8 W& T& F' a
  157.   if(attrib!=-1)8 b4 a( d5 s$ u1 d! d9 ^4 _. C: P
  158.   {# k" S- ^0 }" x$ G
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    / f4 M  L# ~8 e. y* N, m
  160.     {) \, M( k4 ^$ p6 T5 _/ _
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    - d* N0 [! N* g: ?0 B1 }& f
  162.       SetFileAttributes(Target,attrib);
    0 a) A+ y+ l' \8 E7 y6 K
  163.     }" a& z/ J! U2 v) o' o; G3 @" O
  164.   }6 U! d; A8 t7 ?0 s) d
  165.   CopyFile(Source,Target,Erase);9 G; \$ v! S" v/ E
  166. }! B, O8 z; {1 t( T$ ]
  167. : _- N0 P; @" [8 Y/ o! e0 [
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)% i2 A+ h* b4 {3 N/ X
  169. {
    9 F. m" _/ U) v2 ~5 R# U5 P
  170.      FILE *fp;
    ; |& z2 X: s7 s
  171.      char  szBuffer[8192];
    * J- s! _, y) W) F# t# G
  172.   va_list  argptr;7 |, z1 b. k- }+ {
  173. 3 y4 r) Q' |* h, K+ u" v3 J
  174.         va_start(argptr,message);
      ?( Y; I5 S. P+ s2 ]( Q
  175.         vsprintf(szBuffer,message,argptr);
    % N1 d- U" C* t, K) B% [
  176.         va_end(argptr);
    4 p, W: A6 X% t  ]
  177.   fp=fopen(FileName,"a");
    & n! S9 A+ x# j4 ^9 p( `8 |
  178.   if(fp)  _$ ~2 r" h6 _
  179.   {5 M7 U, L+ |8 D4 w# L: ]% Y5 x9 X
  180.     fprintf(fp,szBuffer);0 s" M- c  W8 b/ m* T) v
  181.     fclose(fp);+ t6 k7 Y) @2 b
  182.           _flushall();+ v& f+ Z0 z% J' j8 [& t
  183.   }
    ) ?) n  g2 U' {) `5 _2 ], l  M( r
  184. }4 F1 x% ^% e/ F3 n
  185. 8 |! _) K! O: p0 ^
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    6 m9 \& g7 o( N: h
  187. {
      K' b2 s2 J2 h: U8 |, |, y; S  |' ?
  188.      FILE *fp;
    $ b% n3 C" N6 ?& f
  189.     DWORD  attrib;
    ) G  I% r) h* i2 ]
  190.   attrib=GetFileAttributes(FileName);$ `8 p" w: I6 S! J/ \& [
  191.   if(attrib!=-1)
    1 J% X) Q+ [) U9 ]" M. H# w
  192.   {+ p# E& _3 @1 J
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);2 h6 p( G! K* k7 D2 \3 \
  194.     if(!SetFileAttributes(FileName,attrib))
    7 M- W3 N/ H6 t6 I* v1 v9 f$ N+ `
  195.     {) x% h$ {$ ^7 z4 [8 D* g5 A
  196.       return FALSE;
    / [3 {* J) m* H4 p# S- I$ J
  197.     }
    & A7 [. ]- E+ u% C# g$ |/ \" {
  198.   }
    ) t+ b3 f: D& B9 [) m9 [6 v5 @
  199.   fp=fopen(FileName,"wb");
    1 }6 l+ H' a" b2 Z
  200.   if(fp)" @0 {& E  Q, e- \  ~9 q' p8 w
  201.   {, c& J3 V& O5 e7 l5 `2 T5 Y
  202.     fclose(fp);
    $ X9 ]" j5 P/ E  `
  203.   }
    8 g% ?* {8 ?2 m4 B
  204.   return TRUE;
    7 R9 m: |+ q  b& M2 g, v' q5 c) [
  205. }
    $ c! l2 R4 m# b5 p

  206. 6 z9 b. O  ]* b! b2 @- Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    9 n. S; t7 j! \% b1 \0 p
  208. {
    4 m9 @  W4 m+ ~$ Z3 ^, I6 Q
  209.   char filename[MAX_PATH];, T2 y- |  ^6 i; i# v4 V- r5 Z
  210.   LPUPDATEFILE file,olds;
    + @- V1 h9 [# ]/ Y- P' P
  211.   std::map<int,CString>::iterator i;
    ! I8 M3 p3 @3 N- H  V2 S
  212.   std::map<CString,LPUPDATEFILE>::iterator p;5 L0 B% j. t7 U  G6 `% |
  213.   std::list<CString>::iterator l;
    4 e  W  Y/ x8 X, z+ p

  214. 4 `/ t% O6 Y' U* ?2 p+ J
  215.   if(bFirstUpdate)  B9 a) V0 v+ ?" k1 X% `4 ^
  216.   {
    ' d/ n+ I7 {  t# [: [
  217.     dwCurrFile=0;
    3 W) ~1 b4 n" u9 v7 Z8 n% B
  218.     bFirstUpdate=FALSE;% w" t0 D% i5 g
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    6 P' E- s: l8 j
  220.     {
    ' S: r2 O+ k2 ~5 d$ J9 U
  221.       dwTotalFiles=UpdateLocal.size();
    ) [: e" j" a$ d; a
  222.       dwDownLoaded=0;
    ' W0 {6 ~  Q" ?) k# R/ C" u& W
  223.       bSilentStep=FALSE;. T0 I2 o  U# e* @; C: E% d; B# i
  224.       bCompressed=TRUE;
    $ b1 K* `& A. z
  225.       strExtLocal.Empty();
    4 H. D& n. D5 f. }* s0 Z
  226.       strFullName=(*i).second;
    7 U. z& u7 U- v+ J1 i: I
  227.       dwProgramState=AP_CONNECT;
    # r% v! {' x2 O9 U3 e% G
  228.       return TRUE;
    : t& I; f9 h9 ~6 S4 L. Z1 N
  229.     }
    + L+ W' s, U# g& `, w/ N& t  j
  230.   }7 |% m$ N" y) S5 y4 x/ m4 n
  231.   else if(bRestartUpdater==FALSE)
    7 J3 u7 Q$ z+ L% A) o: V4 X
  232.   {! p7 @9 ?) u3 A, d- s7 Z7 i/ a
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    1 C0 l* [8 y; B3 ?
  234.     {2 D" l& J. D9 M
  235.       file=(*p).second;! j! x6 m# y& E/ y; g
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())/ S% y4 }; b) G2 V' [! S; B
  237.       {1 i! S) t" X5 I" O) t' p
  238.         olds=(*p).second;
    7 x2 D/ y' s- R5 e; ]; J8 E
  239.         olds->vers=file->vers;
    + W! Z# b/ X. s) A
  240.       }  N0 U$ q2 P! u- @# V, A' p
  241.       else( y8 w2 d  {& Z
  242.       {
    ) V( k' ?, B. f; w
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 u8 G, {1 X' i% S  n/ D1 r
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    9 t! A5 _2 D7 Y
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));' O' z1 r9 @6 i8 }- h3 p
  246.       }5 V* O2 S9 }, l5 c) G( D
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    . |7 W$ W; l- m" S
  248.       sprintf(filename,"(%s)",file->file);2 ?1 T# w( R* r# @
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! j7 t5 g8 R$ o# {! X. q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }; }4 m0 a- p' `) X, C9 t( t7 U
  251.     }7 f) n; p4 I9 u. R
  252.     dwCurrFile++;
    % ~0 ^& n% M3 N
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 ~8 d4 G* @3 ^
  254.     {
    4 A( k8 q: [% t0 y
  255.       bSilentStep=FALSE;
    # z$ U9 A2 q  |9 f( m0 i) @
  256.       bCompressed=TRUE;
    - j9 f; q0 F* p" L9 e
  257.       strExtLocal.Empty();
    4 ]+ Q4 r+ b: V+ i$ E+ C% U5 v
  258.       strFullName=(*i).second;+ @! t$ o: G& N
  259.       dwProgramState=AP_CONNECT;6 ^1 F; ?6 w( `! C( Z
  260.       return TRUE;
    . u2 J7 n; T  @
  261.     }5 B- A9 r8 K; F: M% P
  262.     if(!bRestartUpdater)* p7 G, A9 O: H; k. O2 [
  263.     {8 i/ e" b3 l/ O: E- G0 R
  264.       int iCurrSize,iFileSize;
    + |- }! n# W2 D
  265.       iCurrSize=0;' C; A+ a0 s& Q" T5 t9 |; B
  266.       iFileSize=UpdateList2.size();- \1 |0 c6 s" u" w8 i* L
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");9 W5 Y0 E! \" N, f3 X6 V
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    $ Z; N! S1 k; _( ~. K
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");5 {4 |& N) ~8 _( ^% Z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , e' t# t8 M! s
  271.       Fclearf(".\\update.dat");
    2 C: Z- c" Q( ]! Z  B$ `1 ~/ O
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    7 }) Q5 G* n" w* J4 w# J5 ?; E
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 d" d- m2 P& s3 u
  274.       {
    $ s- {' A7 K" S
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())" x0 |& u9 u+ }
  276.         {
    $ c% _% g) O1 g1 M- ?7 L% T
  277.           file=(*p).second;! B9 I1 I, J7 C4 d0 f! M
  278.           sprintf(filename,"(%s)",file->file);
    ' N: b  P$ a9 r$ w; [, P( Z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % d1 M; u3 j# ~# @# k# |4 W$ e9 O
  280.           iCurrSize++;4 \8 P  Q1 b' w7 v' p0 |2 e& O
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    & R1 o7 V7 t/ G; x6 M5 }
  282.         }
    ! u8 A5 ~. B4 \- k- r
  283.       }  c5 ?2 v4 v4 E/ f6 I
  284.       unlink(".\\update.txt");
    . T# H* i3 ^( q" G& ?
  285.       unlink(".\\update.tmp");
    1 b1 s6 I7 L+ n( C
  286.       Fclearf(".\\checkversion.dat");
    ' X* F) g# ?% o( H* g) f5 O
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);% s9 @+ L: F% H6 ]7 v
  288.       if(UpdateLocal.size())
    $ M( I( T* i6 O2 g! p4 O" M
  289.       {
    4 V; G' m! s8 w- k8 v
  290.         UpdateLocal.clear();
    ' r$ o/ p7 }* m) \, y
  291.       }
    # f) Z% h! M$ \3 h& m, y. W+ a
  292.       if(UpdateFile3.size())
    ' `9 n" A, Z4 z  u' |: U
  293.       {
    ! ]0 {8 m( o) ^( H% ^$ f
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): [6 w4 q/ d; Q1 H
  295.         {
    / X* o2 F: @- w, R$ \& |% S
  296.           file=(*p).second;* I+ ^/ I% M7 g( I- i0 P9 A
  297.           free(file);
    * ]8 Y- N2 E6 L+ B# z( n4 X5 t
  298.         }' P7 p0 b5 M% R& V" n
  299.         UpdateFile3.clear();: M$ ^  {7 ]" @/ [$ F) ]
  300.         UpdateList3.clear();
    - N6 g9 r+ W, L% @6 ~
  301.       }
    ' S( t) y5 O% K' W4 o* n
  302.       if(UpdateFile2.size())
    6 F2 e! u. q$ ^& x" L
  303.       {9 H$ y- r( R+ }& f
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - c" H7 i& H( G( {  e
  305.         {
    & p( v. I5 w  z, j
  306.           file=(*p).second;+ }8 |# F) O: c$ }
  307.           free(file);, V2 ^2 k7 [( r) a
  308.         }- `# `, a7 H7 F( K  Z- f
  309.         UpdateFile2.clear();( m  @0 q+ f0 y
  310.         UpdateList2.clear();
    # h- T. K1 B' g7 a' p1 E5 k
  311.       }
    8 y5 j. e" V& b7 h5 k; x0 `2 s; r
  312.       if(UpdateFile1.size())+ s* V' S/ o" @; d6 I
  313.       {
    8 k9 R, m  e2 k, i5 G9 w
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / K( o- y3 D; y6 `; d6 z$ O
  315.         {
    ; A) K7 l  P, m( w% q3 ?% O
  316.           file=(*p).second;
    . B3 ]) @( l9 b( _. Z  L. N0 v
  317.           free(file);+ E' I1 m( {1 |6 Z4 V/ X
  318.         }
    ; Y; _! d4 w0 S& k
  319.         UpdateFile1.clear();
    3 o1 S: {- t: H' r: n3 K5 K- E" R
  320.         UpdateList1.clear();
    9 P2 i3 j! Q7 y/ q& N; x" v
  321.       }6 [: C. e- q/ n
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 N' c6 `0 ~7 @; J: G) H
  323.     }
    ) y8 z: f" s4 Z( |/ `
  324.   }
    1 B2 O0 m( t. R' C. p$ k
  325.   return FALSE;+ d9 O! o* \9 A# `& `. O
  326. }
    9 a- \2 e3 n4 n

  327. . r: n! S/ g$ X( L/ }6 W
  328. void CRevAppApp::ClearAll(void)
    ( l* `, w% s" H2 K- D5 _5 v' e
  329. {+ u& f9 f2 A# q" L
  330.   LPUPDATEFILE file;: I  b; x* t0 C# w- \
  331.   std::map<CString,LPUPDATEFILE>::iterator p;* `4 Y6 Z- L: U4 K  y& U

  332. 1 D- ]; z# B. g- i* M
  333.   if(UpdateLocal.size())
    9 Z; S& a0 V% J6 n; O; k- {' s; r7 ]
  334.   {
    ' e: A4 D+ K' V6 x/ R3 d# M! ?. J
  335.     UpdateLocal.clear();, S! O8 j$ h3 X* w; i) b) J7 [
  336.   }
    & S# |) i- A9 ]1 k
  337.   if(UpdateFile3.size())' ?. n) D2 n. d* w
  338.   {
    3 L% `9 x9 {! {7 n/ j- g/ I
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * o/ w) Z! ^5 e8 \* ~7 |. W4 Q
  340.     {0 L8 y3 K8 e. Q  N
  341.       file=(*p).second;% H) H  I+ {  U% d+ o
  342.       free(file);( a3 E! ^3 ^7 ~
  343.     }* E7 M$ s2 n' E2 P. F  Z- R/ A
  344.     UpdateFile3.clear();
      r- }) e. O3 P# X0 R/ R( G. D3 D
  345.     UpdateList3.clear();
      P4 U, ]0 u. V8 E/ [
  346.   }( P$ m- D) o- f# h; |7 L
  347.   if(UpdateFile2.size())
    $ n. g' m/ N) x3 I! A7 _8 s
  348.   {+ V; i- a' u+ x5 A  r) z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 y1 L7 ], H# i! m6 B
  350.     {
    2 P* W0 s* x& o- D$ _( x
  351.       file=(*p).second;
    1 E2 K- j7 `) V
  352.       free(file);- }, j. O6 ]/ f8 y
  353.     }4 B( k4 G3 T% z1 T: E4 w# X& g
  354.     UpdateFile2.clear();
    , ?& R5 ~) }) k2 u
  355.     UpdateList2.clear();
    , G, q( H5 x" @$ e
  356.   }+ _  G: n* t; T$ N5 W
  357.   if(UpdateFile1.size())3 _; R3 c8 L( b2 ]  h
  358.   {+ U0 S2 c) Q* T
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++): e9 G& n4 m* {
  360.     {/ b6 l7 p9 p+ i4 W
  361.       file=(*p).second;* G$ r  W! T4 P; u& R- K$ l
  362.       free(file);
    ! a( ~& p9 |  ?4 j7 T8 ^) ^! e
  363.     }9 \% h7 o4 L8 @+ K- A
  364.     UpdateFile1.clear();
    , ?8 k8 ]" B, J: z2 V- T
  365.     UpdateList1.clear();2 r  a! _) u, x. g9 V
  366.   }2 _- i9 r- V" l. J8 J! l; p" Q2 b
  367. }  
    3 R3 J& R/ M7 }9 O: n6 Z
  368.   0 y( F% M! G9 J6 X4 b
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    6 Y/ S, T% r: ^- K! C& J
  370. {
    ( w# `' D2 {0 [- S1 R
  371.   int c;
    + A2 B, ~7 C$ j1 i( B
  372.   LPUPDATEFILE file1,file2;' W$ O4 R0 C* @( \- ]
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 X7 O& M  S3 [: `" Z
  374.   std::list<CString>::iterator l;
    $ C0 F, k8 z; E/ \% k
  375. ( @: ~( p" ~- f8 D) \, F  Z& g
  376.   UpdateLocal.clear();
    ; [5 E- a  N0 q3 ?8 b  j
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    - }6 |! H2 c6 {. p
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    # ^$ ^, r- E) n
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);( M; d4 l4 t& O/ k4 }
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);, n$ O3 o4 e* y1 H( Q2 H* S
  381.   if(UpdateFile3.size())1 {* U8 P/ n( N# C1 X  X
  382.   {
    ( J$ m2 X6 p9 P4 t
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)9 t( b, Z; b6 R% e7 g) }/ \
  384.     {9 D& ?% Z+ }4 j* \! r( F# v
  385.       file2=(LPUPDATEFILE)(*i).second;/ o9 o; g& W5 L7 U' x& C" ?, n6 j
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). s0 y% e- t) R1 m  u
  387.       {" j/ G! |+ Z  W; w
  388.         file1=(LPUPDATEFILE)(*p).second;- H) P( P# {$ A+ n
  389.         file1->vers=file2->vers;. M- t8 U* T  N- {" H) m# s
  390.       }- s* f+ q2 g' k9 Z
  391.       else% z  N1 `/ q3 \3 R' n
  392.       {
    3 U& y. X* n  U9 Y6 [5 H- K
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" S# ~; l4 H3 Z# P3 v1 Z* n/ b
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
      X/ V. j) W6 D$ [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    2 V& t* N) Y( f0 X/ N
  396.       }
    ! ?6 I) |8 {. }# }/ E+ q
  397.     }8 A2 ]7 f& R3 g( r
  398.   }
    # J  W- f$ ~: k/ X; V
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , j0 E6 D5 m  x6 [: p+ N
  400.   {
    6 f, O# x0 X" m9 {6 T5 l6 h! l8 u) n
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ! j% Z& Y4 I9 O2 Z, J* b7 F
  402.     {
    ) p3 V; F  H3 R" h  {& F
  403.       file2=(LPUPDATEFILE)(*i).second;/ t& }0 @8 @- P$ b4 K7 q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 [' G3 I  Z# q( d
  405.       {" _! i' a) k  P" r: Q; H% _
  406.         file1=(LPUPDATEFILE)(*p).second;1 ^2 b& ^# m  e( h2 f( ?* g, |  F4 e
  407.         if(file1->vers!=file2->vers)
    6 h/ H0 r9 a. @0 ~' X# u) J4 X, x
  408.         {4 ?! h2 Y& Y% T- M7 r' r) {9 Y% q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% Z. I2 \" s, @
  410.           c++;
      Z  I& @+ H  c8 U
  411.         }
      O( X* t. X( x  T
  412.       }* v+ h7 F( X7 q4 P! j: ~0 K
  413.       else0 a* w' a1 X/ _' B
  414.       {4 ]- R/ [  U7 }: s  ?
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 Y3 Z/ `6 i" ?
  416.         c++;
    1 @7 W7 v% A" H& t0 A: h: E, v9 _
  417.       }  K" D8 ~) |9 x
  418.     }7 }3 y) G1 }! t' Y6 D, C- a
  419.   }
    : d) d$ X- |# u6 O
  420.   unlink(".\\DownLoad\\update.txt");
    9 e- ?/ n$ m7 }% b2 B% H
  421.   if(UpdateLocal.size()) return TRUE;
    4 |9 W1 S0 B* p
  422.   else                   return FALSE;7 J3 u6 u2 W. F
  423. }; v  K2 Y8 E3 f! c+ d
  424. / z' o8 D9 h1 T6 x3 z; h5 T& q
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"- e4 r$ W1 }8 \% l/ I
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    5 U( b- ^0 c/ V% d4 ^( U6 U

  427. * b0 E; J8 s, h- F
  428. - f9 T; Q6 Y) m; o( t! E
  429. ) j# y- W# l! x' C5 S# [- |$ @
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)# y' M" r  C( O9 c( z
  431. {4 x1 Q0 \3 Z  z+ f: n% W+ V- |
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;) o- `) N" c7 |
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" a" T1 C1 z+ H) F: x
  434.   {
    4 h( P3 o+ C7 V: x! G) t2 p
  435.     char szLanguage[50];3 N- e! e/ X1 J* O$ Y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ r: @# p$ p& ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- Q# p2 O; i' }; B) F+ O% D
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - l+ P9 j  G  x7 R
  439.     else                                   m_iLanguage=ENGLISH;% G" O; P) n3 ^$ p" E
  440.     char szRegister[100];; F3 {4 c' `# {
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - D  P5 J! k" R- Y
  442.     strRegsName=szRegister;
    . D$ _$ Z. H2 s6 e4 Y$ e3 P
  443.     char szPatchURL[100];
    # X6 Y- E' q$ R$ u0 K( Z3 c
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * \. |3 s3 a9 P, I8 A; P5 |, R
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# q4 P& S9 V8 k+ O
  446.   }1 E1 W! E5 t$ k  K2 g
  447.   else
    / }1 m" V2 [3 _- ]& ~& D1 F3 F4 ?
  448.   {
    0 G, y1 t! t4 V, d
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + r; ^/ G& r' C8 r" ]0 {
  450.     strRegsName=DEFAULT_REG_URL;
    : Q, e$ t3 u* I
  451.   }
    9 A5 s6 l' W) u+ p
  452.   if(GetFileAttributes("hosts.ini")!=-1), p1 x; Y. y! U# s( u
  453.   {
    9 w: v5 Q9 h, t: C0 F" p- w
  454.     char szIP[50];2 n* B7 j2 I' Y) X" d. {
  455.     char szDIR[300];
    8 I4 r" I% g2 g; Z: ^6 |& V
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    - k" T0 k' |8 {! t- [( [" k
  457.     {8 k- |; c& M# n2 v
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");+ n# Z1 e: [( L) \1 W% W' g1 j) f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    , F8 r/ k% x8 u. A% z  ~# a
  460.       strHostName=szIP;
    8 ]6 u3 M+ m$ E
  461.       strHostPath.Format("/%s",szDIR);$ k' \* T: E' i7 u: f5 i: {  V
  462.     }
    7 i! J" L7 o% \) E% a
  463.     else
    5 U+ r( T6 s5 ?
  464.     {
    ) ^7 s/ x! w- V
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)/ t" p( K; R0 {% Z4 ?4 y
  466.       {  D7 l# k- a9 S. g2 a" [
  467.         char szLanguage[50];
    ( }4 x9 D9 ?6 @% S8 W* Z% v" N; m
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " \4 @9 _; Q$ J6 j3 q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: l, x3 F; W5 R- |- |
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & N' R1 M) n. ?/ G- h
  471.         else                                   m_iLanguage=ENGLISH;
    ' j9 H* m/ m- Z! h
  472.         char szRegister[100];5 t& o5 S5 p7 r8 D
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");7 o' \/ T3 F( v! ^! Q+ I1 h
  474.         strRegsName=szRegister;
      v4 o' x$ O" C2 C3 N. E. v
  475.         char szPatchURL[100];3 o! [$ C. b& p: F6 i' z
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 }4 e9 n/ T% }" e' _) k/ T4 j8 K) F
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : I$ v& g- X, O; {; F, f
  478.       }
    8 `# L. {' h3 [
  479.       else
    3 Q# y- @2 a) E" j
  480.       {
    ( h* r# g+ U* N. I- g$ m) z. R6 k, z% s
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: [  V/ s1 A8 ?6 P9 b: Z9 {8 H
  482.         strRegsName=DEFAULT_REG_URL;
    7 r9 [" W6 H" r/ l
  483.       }* Y2 D4 E) |: V% v3 w. H
  484.     }
    $ \# n, V9 F, X! U% a
  485.   }( L% h$ f( s. @" {9 o8 ~6 z# n
  486.   return true;
    4 x3 N/ l: R! g
  487. }3 e4 T+ n1 p  ^+ q1 v6 j
  488. 2 K/ E# T- |# Q6 p: H: U$ Q- i
  489. #include ".\ZLib\unzip.h"
    6 c( Y5 X/ [5 C
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);5 p1 a! I/ O, y) S' u2 O$ R
  491. /////////////////////////////////////////////////////////////////////////////$ K8 d$ l+ |7 Q4 ?* b% o! _" u5 K* \
  492. // CRevAppApp initialization- l7 \; [6 \0 T4 A/ `2 p8 @
  493. ; h! t+ m0 M7 }1 m+ O
  494. BOOL CRevAppApp::InitInstance()0 d. W' l: ]5 W" n4 q$ {- L5 l
  495. {& Z+ B9 f! ?' I9 G! J
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];3 Y) |6 k! `! s  \$ i) {5 {. ]( j/ I
  497. , G+ I( L) O* v) `7 A
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    " n7 o2 P$ T( K8 b4 C
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))/ \; Z5 M) W* r1 T6 ^
  500.   {2 x8 Z, V( C+ Q0 O
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 [. v) |4 _' F( l7 z% S8 E
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    9 y8 \: Z: o/ J0 E" v
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    * O+ s- z: r8 ?& J5 r
  504.     {8 C( e" T) U( k+ v" N* H
  505.       strcpy(szPath,szPathTarget);8 H4 m) Y' w& O% h; r/ m
  506.       SetCurrentDirectory(szPath);  R7 I4 J8 Y/ T1 V5 ^6 o/ t
  507.     }
    : i8 v* J0 O/ Q5 N9 S. o
  508.   }
    ' t7 S- I  p5 l9 x
  509. #ifdef _DEBUG
    9 n  P( K2 _6 R4 i, t# j  J/ F
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    7 T: R0 R  X# O# k  m- O8 p, E
  511. #else6 o1 n# C. i3 L( L
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - q: V, F6 `7 \. I! h- J3 e
  513. #endif2 ~  y2 C* R( n: z
  514.   {
    & U% A/ b/ f+ Z- i) |3 Q5 q5 Z
  515.     char tempFileName[MAX_PATH];
    0 h+ R, ~$ J1 f4 u$ \
  516.     strcpy(tempFileName,szPathSource);
    4 i0 v, F, f8 T+ ?9 R7 P
  517.     tempFileName[strlen(szPathSource)-12]=0;
    : H7 f9 F* T8 V: m1 R$ K
  518.     strcat(tempFileName,"\\$CSUpdate.exe");8 `4 d' K1 {1 A2 X+ d( D
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    % N! x2 r& e: w, X/ |9 O) U
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    $ v' J3 r7 H! Y) N
  521.     return TRUE;
    : g# {. }7 [* R. U5 U- O9 Y
  522.   }! @7 U3 j9 j5 R) Z) ]2 W: q' L
  523.   // Nuke 0118: Delete run.exe$ {" d1 `& p  |, _9 V/ t
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );! o9 i3 H, ]6 l# i9 S( m
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");3 N4 b9 d( B9 N- p: v
  526.   if(!ReadCfgFile("Config.ini"))4 z/ F: _+ v/ `+ I& m5 P3 ^2 O
  527.   {
    " _% I4 V; ~/ `2 g8 {
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
      @; Q7 {" o6 t  v% s
  529.     return TRUE;
    $ L- \% j5 c  N- G; j5 K& I6 `
  530.   }
    8 n% o) p( J  h  ]  H& l' q  Q
  531.   HANDLE mutex;
    ( b4 w3 a, D6 g8 h# X, I3 O
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    # I/ r, `6 Q' g4 |
  533.   {" }  m. T) z. K" f1 A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ! D8 h( C: B/ o, ^
  535.     {2 w* V8 l, \9 m2 Y' X
  536.       CloseHandle(mutex);
    ) F4 o% T' ^+ Q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);& W* o8 y5 W. R, K' B, ?
  538.       return TRUE;" x% p: l$ O8 l% v5 r
  539.     }
    7 L: N( X  Z9 ]* ?8 Q6 M' }
  540.   }  - R1 {7 }8 K1 d9 C5 V
  541.   CloseHandle(mutex);# M% n( e0 ?3 k5 E7 n

  542. . L' n; i6 R0 c6 |
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    + Z$ _, P; d3 i, i6 ]: k8 B: k& ]
  544. ' s" L! [! [: U5 j3 a7 f5 v; f
  545.         AfxEnableControlContainer();  ^! ^/ g8 `* u, ^0 O! g  `
  546.   l8 I/ O) y/ P( D' G
  547.   bCanUpdate=FALSE;+ W! e( @9 d3 D8 P  E) J
  548.   dwStartUpSteps=1;: Z  T; w$ {" F
  549.   dwProgramState=AP_NOTHING;9 f, X+ b( V$ Y# s# p6 a/ i

  550. % q6 F4 L: K  f
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);/ X9 ~" [. X6 a, y* ~2 k
  552. 9 w/ I* @* a' ?" v, ^
  553.         // Standard initialization
    ) O( F, x* P# m7 i9 u
  554.         // If you are not using these features and wish to reduce the size
    8 {/ N) V2 K; h$ m, q0 X$ k# r
  555.         //  of your final executable, you should remove from the following7 D* {- @( J( Y  S  [1 ^4 N. ^9 [
  556.         //  the specific initialization routines you do not need.
    * `: A; l' ?6 O
  557. 2 G/ f- C# p3 I! ]$ X2 b
  558. #ifdef _AFXDLL5 }! m3 W; w6 z" I
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL5 G6 s6 a/ C! ?
  560. #else
    : T. S+ V. _7 C& x
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    0 T9 ]; x2 ^. U6 N$ I7 d2 u
  562. #endif$ r" L/ m8 X1 O* |/ j0 I6 T

  563. 7 A/ j, i9 u$ r/ M
  564.   dlg=new CRevAppDlg;
    ; E! x7 @6 T) z
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    * \1 a+ z4 }5 w, r* [. y, @, S. n
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / f, v1 w; B: A  L+ T) c
  567.   m_pMainWnd=dlg;; m* G& e) T* O  U- {' v7 |

  568. & l+ _: v- r! y. c9 D
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);! A* w1 I$ H' B$ R! Y9 f+ ^
  570. ) N; ]! T. [* r$ k# U; q. C1 s
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ; S: E7 f2 h& F% i% V
  572. //  ULONG_PTR gdiplusToken;5 [. n) C1 w" _: d. d; p6 M" \5 Z" d
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);+ j4 z. K/ w9 h5 p( r4 h

  574. 4 v# x0 R: ?' P( P8 _; g. Q
  575. //        CRevAppDlg dlg;
    ' O% j: z# R  L
  576. //        int nResponse = dlg.DoModal();
    : I6 N: n# a' s; u% t- Q  Y
  577. //        if (nResponse == IDOK)4 G# n$ n. G- ~& K* T1 ~  v1 J
  578. //        {
    . Y' K: c  V* w7 U9 r( K& k
  579. //                // TODO: Place code here to handle when the dialog is; p7 Z( R/ B8 V: y* F. Z
  580. //                //  dismissed with OK0 a1 I' v6 C4 l" I
  581. //        }& P1 H, k# X  Q$ B% N" E
  582. //        else if (nResponse == IDCANCEL)
    & I4 j* P, o; [. h6 L
  583. //        {& Z4 }" F! j7 E( j1 c
  584. //                // TODO: Place code here to handle when the dialog is
    ' d$ b' `9 k9 v7 r# m+ J
  585. //                //  dismissed with Cancel
    " c* H% Y3 N+ c) V7 p
  586. //        }
    7 k" ^+ h9 n  b$ y! i
  587. , A- S$ m! G+ ~5 E* Z' C9 ^
  588.         // Since the dialog has been closed, return FALSE so that we exit the( `6 `% C1 t  }4 F$ _) w
  589.         //  application, rather than start the application's message pump.. x/ t/ e$ u+ x! z3 t8 R: e
  590.         return TRUE;" ?, F* }5 u! x6 M
  591. }) E1 b% i" `, F) [, |0 Q* y: N
  592. 2 J0 l6 `) i' Z' F" U/ _
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    $ ?/ P, k6 r* T9 u4 h" i1 t" B
  594. {
    2 t* b8 a9 `' w8 [
  595.   int i;
    3 p9 Z9 L% T" W; h! Q& y3 J4 \( x
  596.   char *szRet;" u/ A! B6 ?" n  U% s4 n" `  p1 z, y

  597. % }0 b  U2 e9 c
  598.   if(pSource) { itoken=0; sztoken=pSource; }* u2 F6 e7 g3 c# }; E, D
  599.   if(sztoken)
    % ^5 r4 n8 Y7 k8 C( a
  600.   {
    , O* W' F3 N9 l( U
  601.     szRet=&sztoken[itoken];
    ) m9 C7 Z9 [; o7 e4 m6 |' p6 i
  602.     while(sztoken[itoken])
    5 D* t1 i) p" n) f
  603.     {
    9 B' H; C; b& I0 H) ^3 T# h6 y
  604.       for(i=0;i<(int)strlen(token);i++)" ], q/ r9 B% d6 @- m: f
  605.       {6 j- e: h: ~" w  Z7 {7 C
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    & p& y1 |. m0 v- r7 W1 g$ E
  607.         {
    1 H! r9 H4 P$ y" f, H
  608.           sztoken[itoken++]=0;
    9 d3 h+ N, i' a1 I4 j
  609.           sztoken[itoken++]=0;3 g2 W# ?/ R, e
  610.           return szRet;* x' F7 Y" Q( m- z- i5 M
  611.         }
    + b8 k. [/ H5 U+ d
  612.       }
    9 _7 ], I# h; z4 R- B9 g- f7 Y
  613.       itoken++;
    3 R) l4 U/ x5 l. ]; z
  614.     }
    ' Q1 [1 h3 \. K. W* h
  615.   }
    . n8 \6 ~' z4 v$ N& Z
  616.   return NULL;
    8 G0 g8 S, q5 C
  617. }' J1 n: k6 L" y" |* E

  618. 4 b2 `' c& h+ m6 G) H! [1 G
  619. void ProcessProc(long Total,long Current)
    1 ^! [& x# t$ B/ f1 h/ T# Y; w
  620. {3 U8 J" e' ~+ U% @* g0 M
  621.         MSG msg;
    ; P( ?! E) y3 [( r" L1 J
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ; |/ @7 n7 ^4 z2 |# K0 W
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));, R9 C* v% }' o" v
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)); I3 B5 i7 l6 q7 o
  625.         {5 W1 D' p+ ~6 P  W/ X9 ]0 v+ Y
  626.                 if(!GetMessage(&msg,NULL,0,0))
    " k& _$ T$ J/ w0 G4 S3 t, p
  627.                 {# ^; L4 [7 l! x
  628.                         return;
    9 {5 ^& [# a7 v( Y( W5 E" m3 U9 Y
  629.                 }
    4 L0 [4 L; _$ R5 E( p7 b
  630.                 TranslateMessage(&msg);
    ! [2 Z6 k, _, O; I0 s* o* M* a
  631.                 DispatchMessage(&msg);& ]: z7 W7 a4 K* T2 _
  632.         }       
    ) t; s) O( Y: f/ [
  633. }
    1 S1 F+ M2 ^( \$ }
  634. 8 {4 T5 V( F- I8 h! B; c( e: w
  635. BOOL bFirstChar=TRUE;% e1 O& h1 h0 R) z
  636. ! E9 h6 ^. K+ Q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)- F3 @2 ]3 y, d7 V- Y: r5 \: y
  638. {* t& l  K: f3 ?+ X1 v
  639.         // TODO: Add your specialized code here and/or call the base class
    1 H" F* d- E9 y2 b1 W  p
  640.   switch(dwProgramState)
    & w# A8 {: n1 T! @! q: q
  641.   {5 z, P1 H+ f/ ^# Q2 |
  642.   case AP_NOTHING:  A  h3 S  m% @! I  a' Z
  643.     switch(dwStartUpSteps)& s4 Y+ f) Z9 f# f0 \
  644.     {
    ( g1 I$ V" I" q. H
  645.     case 1:
    - Z+ M* K9 U# l$ z) M# V0 r
  646.       {, H5 @- l' X+ J7 K0 o0 B: N+ k, ]5 {4 U
  647.         int i;
    + E$ \& r- v/ b
  648.         CDC *pCDC=dlg->GetDC();
    : B- m% T- P( h
  649.         HDC hdcwnd=pCDC->m_hDC;
    0 m5 L3 K( e& o/ X
  650. //        Graphics graphics(hdcwnd);' s; C8 I, M# \2 R
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");' @6 @! o4 Q) B, e, }
  652. //        INT iWidth=bitmap.GetWidth();: n/ N; @- ?; s
  653. //        INT iHeight=bitmap.GetHeight();9 i, U5 h: \  r( A! O
  654. //        Color color,colorTemp;
    & z+ g& a& w* s; C
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)4 p& m: m3 y% X  F" G  W- q
  656. //        {
    6 q! d8 B( u4 `  o7 r  X
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)# t3 w* _& Y; v& Q6 Q
  658. //          {
    7 ^& E7 L, P4 O) V& D
  659. //            bitmap.GetPixel(iColumn,iRow,&color);  Y; ~- b; {0 C* _$ M. C, O) S
  660. //            colorTemp.SetValue(color.MakeARGB(0 `0 N& V) [% J  ^
  661. //              (BYTE)(255*iColumn/iWidth),/ `2 w, X' v4 a% l# O, T
  662. //              color.GetRed(),
    5 M1 r2 Y; W% R9 s5 a' s
  663. //              color.GetGreen(),2 A0 E' u6 a/ i/ b4 t* f
  664. //              color.GetBlue()));
    $ p1 S$ D2 c0 }8 j1 m  Z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    5 D" `9 T9 V7 ^! y- s) g0 u
  666. //          }
    ( v, k, m  j4 m( j# Z6 |
  667. //        }
    : j& Y# R. n) _+ S# E: i
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    0 k+ k6 x5 v  E$ q3 S5 i4 C! I
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & U; \2 |( ]" x% H6 Q
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    8 b3 o/ y& r& `+ K6 x
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; x% B$ t+ Y( h
  672.         for(i=0;i<240;i+=8)3 J! R! s9 }* `0 N1 d9 V  Y
  673.         {& h7 c& q1 T- q1 F
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% R4 o) f9 l9 p( s: a2 K8 \- a
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);( k3 R% {3 ]' @. i
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ {, g' L5 D; ^8 q$ H3 K3 V% I& |
  677.           Sleep(33);
    0 B7 _* u% t- x3 {% x' I& ^% x6 R: E
  678.         }( j2 w" q% j. V. F7 x' k) Q1 l; N
  679.         Sleep(1000);( e$ K, D; r% e% d& |9 {
  680.         for(i=240;i>0;i-=8)
    % i& d0 v$ W" ^
  681.         {0 f( N. C5 R+ o8 w% E3 m
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( L  S" z& ^+ b8 W
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ m3 w( K/ K/ ]! b9 K' V! s
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - v& g! M8 o9 }% }/ @# k, u6 b( A
  685.           Sleep(33);
    7 k5 L2 w  G/ S' T) O3 m
  686.         }+ x4 x3 t+ `* X
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ! v& H6 P  L9 s6 R
  688.         dlg->ReleaseDC(pCDC);
    4 O8 b5 D) [$ }8 I2 g( F' S% M# @* ~
  689.         DeleteDC(hdctar);4 x, S  Z! C0 {. I
  690.         DeleteDC(hdcsrc);
    6 U/ x# C3 f1 ~5 k
  691.         DeleteDC(hdcorg);
    1 [! x, g& |% ^, A
  692.       }
    * C8 e! l2 H. B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    2 R3 i% _" p7 d
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 {! w  V/ R" K/ l6 M* U3 F
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    4 |/ ]. Z+ H9 Y. V8 G! p
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");8 u4 T* O4 U2 E. ^: M3 j) `* l
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  u7 c" U0 ?: j$ ^8 u3 K8 c6 V
  698.       if(!Dn.Connected())
    3 I2 l  X8 [1 l" q) T7 c
  699.       {
    " K2 d( {& V, i$ E( v! {/ [# l: k7 _
  700.         dwTotalFiles=1;
    ) o0 R1 P3 t6 \  K; F
  701.         dwDownLoaded=0;
    : p4 i' q- R* M6 \3 W
  702.         bSilentStep=TRUE;6 [8 ]. t( p& p( j
  703.         bCompressed=FALSE;5 _! {8 j; i$ P& @
  704.         strExtLocal.Empty();4 g9 g8 z6 Q; F
  705.         strFullName="readme.txt";5 C- _" r; G5 W. _) ?& W
  706.         dwProgramState=AP_CONNECT;
    ; t# V2 \. v7 b
  707.       }
    - J- N- R( l" j+ p; s) I
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ! P: }' V2 m  K7 y+ H, m
  709.       dwStartUpSteps=2;
    4 {9 F/ {& a$ r
  710.       break;' t7 I! [! f+ a) c1 w5 d, v; Q
  711.     case 2:
    : c& G  r! u- O& K& a- ?4 N4 n
  712.       {( o/ W- Y' C' U& s2 ^
  713.         int iEOF;4 x$ P( n& Z0 f. B1 s3 r
  714.         FILE *fp;
    # Z0 n0 t( l! c5 f/ V
  715.         char szString[512];
    3 V" D* v6 ~/ ?; B$ [! }( j) F# O
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    4 j  h) H% x# G+ g5 J5 B
  717.         if(fp)
    * b9 N7 Q5 n0 @' N! z
  718.         {
    : Q3 f6 F) h! X' a
  719.           do
    # o& t! F1 F# G4 W
  720.           {. T9 j1 }+ j2 v: i+ n
  721.             iEOF=fscanf(fp,"%s",szString);- b1 M0 Q7 G2 }2 U! s! W% B' ]# v
  722.             if(strlen(szString))/ c# ^, @8 l# @  L5 X
  723.             {
    / y1 ?+ G5 k/ R9 r0 n: ]2 D4 ?
  724.               if(bFirstChar)
    * X9 g! R3 A+ G) r
  725.               {; z2 T7 D8 Z9 I% u
  726.                 bFirstChar=FALSE;
    % H- [( T( N6 S  _5 E, @3 d8 Z2 _
  727.                 bConnectIsBig5=FALSE;0 B: \  ]$ S( \& f7 H, G
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    + C1 ?9 m0 @; {6 p: Q
  729.               }
    * C& ?; W  Z' P3 @
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));  }$ w  E- L' e3 Z6 V$ d  k  P/ [
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    7 D* t1 {7 n4 X5 H
  732.               dlg->m_ListText.AddString(szString);
    / Z+ G" i* h+ i9 O: v
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ o8 G" z( l' s, b' S5 m+ y2 u7 |
  734.               *szString=0;5 c/ l! }& [2 T; R8 i2 V
  735.             }
    4 ?( T& [; O' K9 q% @# F
  736.           } while(iEOF!=EOF);) C- ~+ X$ \$ A2 V* c
  737.           fclose(fp);
    4 ]6 u. ]2 d: U3 c6 a9 Q
  738.           unlink(".\\DownLoad\\readme.txt");
    2 ~0 h' G* I! _8 a3 E
  739.           dwStartUpSteps=3;
    6 A7 E2 Y! H. L# r( v
  740.         }/ e. L* L) s' X) i3 i' y
  741.       }
    + o  I" Z4 S% v+ x
  742.       break;9 R/ o/ T6 L- j7 S! V
  743.     case 3:
    ' q8 Y! n* _  s( {3 G7 O
  744.       if(!Dn.Connected())
    ( \0 D# t+ a; |& r' ~! F9 ?4 @
  745.       {% S) i+ N& U. e1 h7 z' g2 U
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);. C$ F/ I/ e3 a
  747.         dwTotalFiles=1;
    6 u/ G+ k0 ?; R0 G
  748.         dwDownLoaded=0;% i; V, i2 W5 L) T3 b
  749.         bSilentStep=TRUE;
    7 V, J2 U, y, l# c1 l
  750.         bCompressed=FALSE;4 ^/ N; h  B# Q6 p3 \
  751.         strExtLocal.Empty();1 G0 Q9 K4 `9 S7 ]
  752.         strFullName="checkversion.txt";  |, g, \/ M" I1 n
  753.         dwProgramState=AP_CONNECT;9 T* i8 `" t& u& ^& m: E, L' F+ w
  754.       }/ X3 Y( R6 w1 L5 l- Z2 Y3 s- k9 j
  755.       dwStartUpSteps=4;
    / @1 s0 r; z- P' E. j, k, Z; `) s
  756.       break;7 s- T0 ^9 S& L  ?! `0 _4 G1 M
  757.     case 4:
    % s0 z: J) S/ x7 N6 W, F0 }
  758.       {
    / _# S* |( @0 |! F3 Z- I1 k+ Y( g3 N
  759.         FILE *fp;
    , R, E/ g- ?. g* x  M5 @; J
  760.         char szString1[128];
    ' f5 j3 m* i6 i. `6 |* O$ i. ~' Q* |
  761.         char szString2[128];
    ) _0 N* z- N7 f; D2 r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");! d$ K- c8 g7 n8 y. Q
  763.         if(fp)
    ) E0 L! _; ]+ Z- Y. F7 q
  764.         {2 W. `' L/ o8 U8 n0 Y0 M. H( J
  765.           fscanf(fp,"%s",szString1);. r! P% @% P7 B! m3 w
  766.           fclose(fp);
    2 n! H& E3 g) M6 {/ E
  767.           fCheckVersion=atof(szString1);
    9 n- d* i- E, `
  768.           fp=fopen(".\\checkversion.dat","r");
    # T0 E/ N+ Y  ^0 \2 ~' W- i
  769.           if(fp)
    + `$ Z+ ^' V6 ~9 H9 F, M
  770.           {7 c- i3 J( @  Q
  771.             fscanf(fp,"%s",szString2);
    6 n9 f3 B5 P5 e4 k9 V: Q
  772.             fclose(fp);& _) [# ]" b, {9 c% Z6 j6 a
  773.             if(atof(szString1)!=atof(szString2))
    % T+ N- L* n5 Q0 f/ u$ k3 Q+ M3 w+ S5 C
  774.             {
    % o2 Q+ ^, w" ?9 r
  775.               if(!Dn.Connected())( X+ }' v9 i# E8 v
  776.               {
    / h+ \1 k9 I. x; |6 u
  777.                 bFirstUpdate=TRUE;
    7 ]: `5 ?# `( [. _4 M' I  z
  778.                 dwTotalFiles=1;
    ' Q) z+ r+ }9 X4 ]/ Z$ X- k  n
  779.                 dwDownLoaded=0;
    1 p" _+ R8 c2 p
  780.                 bSilentStep=FALSE;0 I: N. u2 I, J/ f% j* j
  781.                 bCompressed=TRUE;0 \7 G( @/ S5 N- ?
  782.                 strExtLocal=".\\DownLoad\";# Z% S# N4 E2 P, p' i! [' Y
  783.                 strFullName="update.txt";* `6 O; y6 q; T
  784.                 dwProgramState=AP_CONNECT;
    1 Y8 `  ^; `0 `& ~8 W" c! M  e
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      c6 R$ e, M/ N4 J8 J% `# m
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    # A9 g4 X# ]8 H( w2 Z" _
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");) ^) I2 T6 {+ K& m

  788. 4 M  [# e" L( N4 L8 ^
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  h4 j1 \$ D: Z7 C! i0 T; z, [$ W
  790.                 unlink(".\\DownLoad\\checkversion.txt");) n0 Q0 A2 p: I" W
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ' \/ c; ^6 R  x
  792.                 {
    2 l# c: q" y6 U: k2 m
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");# d' N8 ^4 p5 ?; Q1 u
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ( ?: e7 n$ v9 y5 {  K8 u% \* z  A
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");2 Q/ G  j+ G2 l/ u7 s! J" [
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & ?3 V, `, s' N  z$ p# W

  797. " I& ~& P& `% ~* q+ j6 ~/ k
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 E4 b7 Q% t0 i
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 C4 {- k' P$ O1 C
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) J3 }" K* E+ C- ^6 `  b) Q, G
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % \6 g/ {4 x3 a$ X+ P2 B0 g
  802.                 }$ b4 b, `0 i6 O6 T" Q2 O! D! Y
  803.                 dwStartUpSteps=5;
    6 W! H4 u2 F0 E2 B
  804.               }, D' R+ K& Y( P/ c" J5 w% _
  805.             }
    / n2 J' t% Y3 r' D
  806.             else
    8 N1 U  h! r- q8 _5 C; u. q
  807.             {
    ) q4 D) [: J+ ~
  808.               unlink(".\\DownLoad\\checkversion.txt");4 u/ _* [5 I4 F/ w' {' U
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: y1 V. K7 V& E# f! J3 |% W/ o( G
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 m7 N1 M$ T; f$ o
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 k; _1 e! x! t. X& n! b

  812. ) X/ b3 |% o2 z7 M8 `  f6 _9 j* |4 l
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( o" H: ^* k+ w% }+ {
  814.               dwStartUpSteps=99;% o) X+ ]6 O; @# X9 y# I! L4 X  Q
  815.               bFinishUpdated=TRUE;
    # S' `5 u8 t% C$ _; k$ L- C* {
  816.               bCanUpdate=TRUE;
    . s0 R4 v% A0 J) `: w+ c: \: n
  817.             }
      @; ~- z$ [% I2 z( S: R8 O# \
  818.           }: N! t0 e+ |3 j
  819.           else4 p8 B4 K* x- A: ^: O2 K7 b% H
  820.           {, O* T" {- k/ {: _6 z, H7 Q
  821.             if(!Dn.Connected())" F9 q. R  b- u  H
  822.             {
    4 X; Y* R- B+ Z/ _
  823.               bFirstUpdate=TRUE;
    5 c) _! H0 I' s/ h, }8 ~
  824.               dwTotalFiles=1;3 w2 f- R8 S' B  @: P
  825.               dwDownLoaded=0;2 O0 K7 i. I, H2 n7 a& `
  826.               bSilentStep=FALSE;% }4 m2 Z# L* B# K
  827.               bCompressed=TRUE;
    + F$ Q# a. \7 B' Z3 s8 E7 ~% U
  828.               strExtLocal=".\\DownLoad\";
    ! y# ^( ]7 ?5 l2 f) A
  829.               strFullName="update.txt";
    / I( X1 c& \5 M1 h7 I  T0 G
  830.               dwProgramState=AP_CONNECT;
    : X$ p. l# i3 z% t( ~
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 e# q' l. m/ p* H; e& E7 W& X
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 m; V2 L; A5 ~0 u7 i  W# e8 q
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");; X8 l! M9 v6 y; t
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 d; Z, Y8 S( |$ c& I
  835.               unlink(".\\DownLoad\\checkversion.txt");
    3 I1 g( @0 E; L8 u0 O
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)* Z* |) O2 d6 l0 E
  837.               {
    $ d- S9 {8 H) a) O
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");+ R/ b# g1 F$ j1 N" c
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");  X6 m0 X2 }0 m7 l; P
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
      q1 _- D- ?7 o4 |# ^
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* ?7 s9 a- j) w3 q2 S1 ?& m% E+ f
  842.                 & i+ d# }1 g7 H5 J$ _6 X
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( d. @% C# _4 g* [$ C  o+ k1 S
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- |& `. u; Y. l
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");' D" G* F% f7 \- R) j7 U$ R* s
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 L( u) z# t  f6 c6 i
  847.               }" J- a' Q2 j5 w2 s. Y
  848.               dwStartUpSteps=5;3 J; a5 L1 r$ M$ b* d5 F& e  H
  849.             }4 m1 h- U3 u* {$ ~
  850.           }& I( X  a+ W1 s9 k+ x) D
  851.         }
    1 w, c/ w. u) i; t7 j
  852.         else8 z+ N% w& z9 ~
  853.         {
    7 @& [0 P/ _4 m! }
  854.           dwStartUpSteps=3;
    0 X# c, ]) b* q6 W; J4 |
  855.         }
    ; M0 @/ j8 W' E/ v! a6 m. D
  856.       }  W8 o. d7 e* o* q) P! `
  857.       break;+ W, H: A( Z2 I: p( J3 ^
  858.     case 5:& c% f4 N5 n- T1 e+ X# y4 L
  859.       {' q" V& D' W( E+ A( e
  860.         if(GetFileAttributes("Wsa.zip" )!=-1); F. K2 f$ Y; D7 ?
  861.         {
    ! u& |2 w+ s* r  b% \
  862.           int opt_overwrite=1;
    ' N+ O: }, h- E- S) _/ E$ _
  863.           int opt_do_extract_withoutpath=0;" y7 z: T& s0 `# v
  864.           unzFile uf=NULL;
    9 n  n& j: G% \2 a/ `

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

& n2 U  n/ `! Q8 G' w, Q) w
8 F# t/ j3 ], B" p( `  r) w+ e

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-1 07:22

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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