找回密碼
 立即注册

CSUpdate.exe源代码

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

  e: a# b  v$ Z
  1. / RevApp.cpp : Defines the class behaviors for the application.( x) S* L6 ?8 P# K. M
  2. //
    2 q. Z7 M: U; R# p
  3. 6 r. z& m7 z4 k8 I3 C
  4. #include "stdafx.h": K1 R+ M1 r- R3 j. x; Q! s

  5. ) B# F" I' M. Q
  6. //#define UNICODE) B6 I$ n9 y1 v' u
  7. //#include <gdiplus.h>; H0 U' T; |5 o' b
  8. //using namespace Gdiplus;
    1 F" j) W) B; L  W1 G) g0 i2 k

  9. 4 V, {) L& m3 J: [
  10. #include "RevApp.h"
    , Q( \+ O' r2 g7 Z' r
  11. #include "RevAppDlg.h"
    % f! \  D7 F& v

  12. 1 ~$ g; P1 ^) P/ P! H0 P: w- m
  13. #pragma warning(disable:4786)# f- `! |0 y/ a9 U
  14. #include <map>
    , K0 K' g5 ]# \0 K& j: e
  15. #include <list>
    : d" Q# k3 t7 o' h, @( b0 ^) v! v
  16. #include <direct.h>9 p1 O! f9 H6 i* D
  17. 9 ?( o0 Y# U. s2 M7 a1 M$ p
  18. #ifdef _DEBUG1 U9 b/ P/ c6 y
  19. #define new DEBUG_NEW
    ! M( ]2 T% B' M5 m: Z& z  m+ u
  20. #undef THIS_FILE( k8 y' ^; x. S0 S
  21. static char THIS_FILE[] = __FILE__;
    2 P: q0 j4 X' x6 D- B8 a, u% o
  22. #endif
    ' S! j5 t& S6 d3 o
  23. #include "SkinResDef.h"7 W, l8 k) h* z: w3 d# ]) y
  24. #include "ChangeBG.h"
    1 e' s, |1 S! v' _- g
  25. #include "AFXINET.H"1 ]/ ~; u# E* _9 m  q  E

  26. # y! Q! W0 H% ~
  27. #define TRADITIONAL_CHINESE 0/ r# t4 j" I/ x4 y( V9 h' Y* i' O) u3 E
  28. #define SIMPLIFY_CHINESE 19 Y! ?6 x9 C& N* W" z, m
  29. #define ENGLISH 28 z9 j$ L$ J9 m5 G
  30. int m_iLanguage = ENGLISH;
    5 Y9 x9 K& N4 W6 l8 B: B  t$ u
  31. /////////////////////////////////////////////////////////////////////////////5 O( {, ^1 M& Y$ q4 t2 a! ?! D. M
  32. // CRevAppApp: t0 \: b$ [0 [) j

  33. & Y5 i1 X$ [3 W- k3 L7 ?2 v3 k: E
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)/ I! E, q6 Z# c8 t% R5 O% [& }
  35.         //{{AFX_MSG_MAP(CRevAppApp)0 T2 ^( n) A) \1 ]4 ]$ }- q  ~
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. x1 M4 o. m/ ]' ]% I1 `
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!5 z5 \0 u8 N) C0 r& o& f
  38.         //}}AFX_MSG
    4 H& u6 K0 t- F! ~/ T2 @) @
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    $ ^) a& p* r# A4 S" Y
  40. END_MESSAGE_MAP(), P0 ?/ Z& L. C8 Y1 p0 y' D8 ?
  41. + @4 g: V3 T# ^
  42. /////////////////////////////////////////////////////////////////////////////
    4 ?, c- v' p" ?' U
  43. // CRevAppApp construction
    - ~) c& j" Q2 }& z8 v5 v3 P
  44.   m. U# g0 D! Q
  45. CRevAppApp::CRevAppApp()
    5 N+ G' e7 A' L/ g
  46. {
    & X2 {$ |) L$ M9 G7 Q8 n
  47.         // TODO: add construction code here,, r+ A1 H9 z9 v: a9 r9 _- N. o
  48.         // Place all significant initialization in InitInstance
    & |' q7 E8 o* z8 a1 Q  e  k. {9 N6 |
  49.   bDisplayIsBig5=FALSE;4 u5 t- }/ H6 V, S* e
  50.   bRestartUpdater=FALSE;. D5 J) h- m; W4 D, m( q# r4 F
  51.   bFinishUpdated=FALSE;
    - L. i- M& u. G$ h
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    - L* N" o0 I- n8 k
  53.   InitChangeDataBig52GBKS();
    9 V( Y' k2 O6 m' u
  54.   InitChangeDataGBKS2Big5();" `8 m) H& @6 d2 C
  55.         //
    - B& A2 w% e) Y" U: H
  56.         bClickRunExe = FALSE;+ E( Q8 ^0 F( N" t3 s8 a" m
  57.         //4 x6 L6 X- m" G+ T: h
  58. }
    9 f4 X* l# V. J0 z) f5 W( T* x' J

  59. 0 D) b  h6 c# y/ I6 s' D
  60. CRevAppApp::~CRevAppApp()
    3 a" p9 X# c9 T2 l0 j) J- \& v
  61. {5 v2 G& l( @4 }' t
  62.         // TODO: add construction code here,: G6 P- y0 H! A& N
  63.         // Place all significant initialization in InitInstance- U3 {2 d  t! a
  64.   EndChangeData();& K! I2 f) }( Y
  65. }1 g2 w) E1 R5 \- ?9 [
  66. ! f3 M) M* k: u
  67. /////////////////////////////////////////////////////////////////////////////% N) B" V8 D# {/ f9 T4 V
  68. // The one and only CRevAppApp object
    + X. N: y- V" ^
  69. ( ~! u2 ~( b, G% {- Z  S; h6 k0 C
  70. CRevAppApp theApp;
    8 z* U# ]( g; Y" }. H( N& g
  71. 7 `: f! e# p) Y1 R# j; p# ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)/ l  X; f" t0 x/ H
  73. {& V- K& K  \9 {! H$ t# g% ?
  74.   int iEOF=0;
    6 O* A/ Q! c' P: n/ |
  75.   char szTempName[MAX_PATH];( ~" ^  Y& r4 g( t6 b
  76.   *szFileName=0;
    + `1 {3 n+ ]/ K/ h
  77.   iEOF=fscanf(fp,"%s",szTempName);5 }# n/ w; t3 \. R4 H6 J) b) g% l& e5 }
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ! b; g& E) P) E* [
  79.   {
    - |% E/ x  {6 P$ V  e8 m' v
  80.     strcpy(szFileName,&szTempName[1]);
    / ?0 e) l. b. Q/ |
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)7 X' W( ]' T0 b& {  }- r
  82.     {; Q3 q" b" M0 p5 u
  83.       iEOF=fscanf(fp,"%s",szTempName);! p8 p# [7 d+ }- k+ V, V9 c
  84.       strcat(szFileName," ");
      N' g6 {9 H7 q( f4 U: H( z  z% Z
  85.       strcat(szFileName,szTempName);# Z) z$ B8 [% e9 B% B* P1 p
  86.     }
    3 v- n( a% I# s3 C; d/ T/ N
  87.     if(strlen(szFileName)>=1). K% \1 C, Y! N6 Y& S+ F% Y8 p
  88.     {. A5 k9 x9 D6 U% N
  89.       szFileName[strlen(szFileName)-1]=0;
    : a* ^5 t% z, }5 A. u, J3 X) P9 T
  90.     }
    0 S" D0 N  B, y5 n5 u; d
  91.   }9 a1 w4 R4 b) v8 h- c
  92.   return szFileName;
    * w$ W1 D# J* k0 a& C  e9 |! Z& P
  93. }- t9 _; s3 Z3 X* @

  94. 6 ~4 p, j7 s  m2 l' Y6 l0 @
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    % h2 K5 p; y. X
  96. {
    ) \' E. A6 }+ D: `- z
  97.   FILE *fp;1 H1 q0 K2 I, r/ B  O
  98.   char *key=NULL;
    & x2 Q! l2 W; a; \. ]* ^0 `% F
  99.   char version[MAX_PATH];2 Q) T% F+ ]! y7 k2 B4 G
  100.   LPUPDATEFILE file,olds;6 H5 ~' a& H5 f$ D$ ?
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    % w. x7 B! I1 Z1 V! J

  102. 9 l- k) m4 N+ S/ p( _
  103.   UpdateList.clear();
    1 S* @# u" E( R; m
  104.   UpdateFile.clear();; r2 [, z8 F' K. V
  105.   if(GetFileAttributes(filename)==-1) return false;+ @' t5 X5 N3 d  e9 V
  106.   if(!(fp=fopen(filename,"r"))) return false;1 c, Q" J4 w0 b* T3 L% Z
  107.   fscanf(fp,"%s",version);
    , H3 M3 I+ A( n$ [
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }- _( a+ [8 y6 K0 ?' w5 ]9 E( t0 H
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ! A6 F2 b# D2 `( @, a' q0 @
  110.   {; y( w! w5 F! P
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, T& Q, c6 y* C- z+ o' j$ k" g
  112.     fscanf(fp,"%s",file->path);
    ) i- Q0 q4 w6 U# r) n
  113.     ReadFileNames(fp,file->file);
    # C( M) _3 m1 k$ r( l; j2 T" M
  114.     strcpy(file->full,".");2 R; u. ]1 V# X
  115.     strcat(file->full,file->path);
    ; H; z+ G. Z3 t. t
  116.     strcat(file->full,file->file);
    " T2 O/ t  n% P3 ]- P* x' O
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    4 s6 ~3 ]- a  b3 J2 k
  118.     {
    8 m5 E' x: n' h1 g7 B& k
  119.       file->vers=(float)atof(version);' ]9 R0 e7 v% S2 t# Y: |0 u
  120.       UpdateList.push_back(file->full);2 _4 N7 n) E. o% }5 x7 g
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    2 T, g6 s8 r0 N7 _8 @
  122.     }
    3 ~7 Y7 _8 K. ~$ U4 ^
  123.     else
    9 Q/ ^% \$ I3 @5 ]( p
  124.     {) A, t( ?3 Y! X- h
  125.       olds=(*p).second;" P' l1 ~7 S+ x4 N" d( ?1 Z
  126.       if(olds->vers<(float)atof(version))
    : ?' [/ H& d& I0 T3 s
  127.       {
    " C0 |5 i- R6 @
  128.         olds->vers=(float)atof(version);. G! o! R% n0 p- O, N/ `; C8 u
  129.       }5 C+ h* D; n$ \! z7 e- M
  130.       free(file);
    4 S* _( F/ w/ F  F/ U( c  Z" A6 V0 `
  131.     }: R! u6 {4 a) G* W" w
  132.   }0 k" z5 J5 F% U8 ~
  133.   fclose(fp);/ ]& V: k; G6 [* W1 Z
  134.   return true;
    4 L/ |" c. k2 s' N9 `) P5 K
  135. }6 u! u9 H9 K( T4 D7 ?5 L/ a: S( I
  136. ( O" X) D- g3 j# e' |
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath); |+ I  n: `7 K, H* O
  138. {
    ) [3 g9 m9 j& ^7 ]: y- a1 E4 E( m
  139.   TCHAR  szFull[MAX_PATH];
    1 `0 A# ?8 A! D! F
  140.   TCHAR *token,*inter;, X" }# v+ ?7 I+ e7 f
  141.   *szPath=0;4 T' A) c4 F; C- U$ [0 J! m
  142.   strcpy(szFull,szFullPath);" i1 d3 f& D4 S3 W' T; a: r
  143.   token=strtok(szFull,"\\/");
    5 u' c7 R; u6 w+ ~0 o2 F
  144.   inter=token;
    * g) X7 l" S6 C4 Y
  145.   while(token=strtok(NULL,"\\/"))" v1 W, ]1 ^; W: q
  146.   {; }& e) E3 ?$ b8 }, v# ]( Q
  147.     strcat(szPath,inter);  h5 R* J; g1 L, X
  148.     strcat(szPath,"\");( v( g: k2 e0 K/ z0 [
  149.     inter=token;! [, \- ~4 X4 w% f
  150.   }1 C8 Y# Y5 U- j  C* I
  151.   return strlen(szPath);6 B; o$ `; }$ G4 b& ]' c
  152. }
    ; s& ~, G# _7 I5 [" R% z
  153. ) U/ ?; F- h# o0 U, T
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    3 E( `4 ^9 x" e& F, p
  155. {4 v' i$ t$ T" m4 w( S
  156.   DWORD attrib=GetFileAttributes(Target);
    & F- y! R: ^) w7 y* y
  157.   if(attrib!=-1)% h8 g' G) ?7 S% c7 ^& ^6 L& d
  158.   {
    7 L) S6 }% J/ E# I: c+ B
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    2 I/ B) b' w2 z8 t6 l
  160.     {- c! C% `' l3 ~0 R* L
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    * {6 \" ~' S: S4 k
  162.       SetFileAttributes(Target,attrib);- D# Z5 |9 ~* W! _) t( D3 m
  163.     }
    3 f. h% J" S9 r; D8 ?: d1 r
  164.   }( t3 ~5 ?- G' q$ |
  165.   CopyFile(Source,Target,Erase);
    6 [$ ?7 R' t% `, j4 f
  166. }
    9 D% w5 j& ~8 Q$ V" x6 Q" x& B2 c5 W

  167. * q. u. n, ]5 g" t5 p5 Z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! N# N) P0 ~- }7 g7 g# `
  169. {" Q+ n* N( u$ F# o8 X" S( e
  170.      FILE *fp;
    3 J/ t3 U$ A# i; J" O
  171.      char  szBuffer[8192];
    7 q1 H8 r7 q, q
  172.   va_list  argptr;
    # a" E& a- W& F2 E+ z! J! T

  173. ; W# N5 x( C* a" E! l8 `
  174.         va_start(argptr,message);' E' w  Z1 m$ v' J
  175.         vsprintf(szBuffer,message,argptr);7 Y7 ~/ w* d$ Z: n1 J$ H
  176.         va_end(argptr);* v) S8 D5 V, b' a
  177.   fp=fopen(FileName,"a");
    $ P0 j/ x% F/ A6 H. \
  178.   if(fp)8 R. D$ N- I3 t8 k
  179.   {( V' S" L! d- c# W- t* h
  180.     fprintf(fp,szBuffer);; o$ o& W+ G# Y- }+ {
  181.     fclose(fp);
    9 I3 d8 {0 O5 n
  182.           _flushall();0 c! A' [- a* o+ W) i- Z# Y( G
  183.   }8 q- [& I8 ^: }4 |5 w
  184. }, G$ F; B$ w+ i- y
  185. ' ]# |4 H" |! ~. |
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    , C' C: e4 V- E3 K
  187. {
    0 ~' l7 {, K& e* N1 s: `! Y
  188.      FILE *fp;
    ! [4 X% U) X- r0 v) A# K. w3 V0 m
  189.     DWORD  attrib;; Y1 J1 A4 h1 e+ N5 k  ~0 i1 H  i
  190.   attrib=GetFileAttributes(FileName);
    # `/ y4 ]; Z* M4 i* C- L: g
  191.   if(attrib!=-1)/ m& G# U7 Y* z3 ]
  192.   {
    ; Q+ x- F$ Z5 z; {
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ! ?4 D2 z7 p+ b8 a* Z
  194.     if(!SetFileAttributes(FileName,attrib))
    8 T9 Y, h; }/ y: n1 f, I0 T# k
  195.     {
    0 x/ K% e6 [8 J8 \
  196.       return FALSE;, z0 c( ?/ R, I9 I, M
  197.     }. \& s( w. G  V8 w* M
  198.   }
    * @$ @" o" b/ f2 C0 J
  199.   fp=fopen(FileName,"wb");
    " U( Q  N& Z$ p  G" B! }( P% Q
  200.   if(fp)/ Y( ^% N! G$ \) A5 L* P) a* {
  201.   {* E' G* _0 ~% B" S8 t
  202.     fclose(fp);
    $ A% e( `! _( V" A
  203.   }. ~: d( O$ T& a! Z, x' z
  204.   return TRUE;  f( Y$ U7 Q. ], Q
  205. }
    8 M4 g7 n6 m' I' _) E4 V4 C
  206. " X3 S2 u: c1 j0 @8 q
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ! c! x4 B7 L+ Y) B) f* J3 Q5 s
  208. {
    $ z/ u( K$ {3 l$ z5 W2 L) b
  209.   char filename[MAX_PATH];
    ; t. r4 c5 W. e& M0 t3 T
  210.   LPUPDATEFILE file,olds;
    6 ~4 [5 t- P" h5 u
  211.   std::map<int,CString>::iterator i;- H- ~) H% `) D
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    - N0 g+ V3 J$ p4 |5 R
  213.   std::list<CString>::iterator l;+ R$ e/ U3 S- X: `, [& Q) d. @
  214. 8 l  }% g3 i/ R$ Q. P9 T
  215.   if(bFirstUpdate)
    6 a: E! a1 p7 h% }; o
  216.   {
    8 z: Z3 C- u. P
  217.     dwCurrFile=0;
    4 s  }" `5 r& M$ @' Y( ~! z: B5 _
  218.     bFirstUpdate=FALSE;
    ) I* C' H4 o" F) L
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : ?) o4 Y; A, }; _7 L
  220.     {0 {) V/ c# d$ O
  221.       dwTotalFiles=UpdateLocal.size();8 \6 x% Z% g/ D6 u. m( S
  222.       dwDownLoaded=0;: `4 S3 {2 |# p% y0 i" I
  223.       bSilentStep=FALSE;
    : u; }4 C3 ~6 x2 Z
  224.       bCompressed=TRUE;: s; M3 ]/ b1 ^! |4 X% w- w) ]
  225.       strExtLocal.Empty();$ t. \! m0 v0 T) o3 k
  226.       strFullName=(*i).second;8 v- P# B" F" G
  227.       dwProgramState=AP_CONNECT;
    / z) L7 ^: q: C: {
  228.       return TRUE;
    " Q( p6 m+ S' W3 I+ s. O
  229.     }/ w! Z+ v5 }$ Z4 X; G
  230.   }
    : Y: @2 v! s: a2 G* f  \/ |6 G0 I. C
  231.   else if(bRestartUpdater==FALSE)8 y) S  t: X9 l, _, W$ V3 y# o, A
  232.   {
    " e) _+ @0 G" W) [8 X
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    8 [. L4 C1 s  y3 h3 o$ j2 T! F
  234.     {, T, O7 Y' s" h6 n$ V- A6 ~
  235.       file=(*p).second;
    , i  I" {2 f% D: A7 @
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())4 v0 F, E, ?) }; `3 `
  237.       {+ B+ f/ H, v! ~7 i' Z. L
  238.         olds=(*p).second;
    5 _3 E4 U4 P8 g* F
  239.         olds->vers=file->vers;/ R: i! ?) d2 s! R7 p0 Y. W
  240.       }
    % @5 B0 a( |% w8 B
  241.       else
    : Q$ k- U* y: x4 \1 C$ t5 u. y& l
  242.       {
    ! ]5 ^* G6 _* P8 }  _
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! O. ]: p! l2 x3 f5 S
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ; I( j0 |. r8 ^
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    * h8 C# x7 b7 D/ R
  246.       }: |" t. q' @0 ~, d7 Z( e& l- h( w. f/ S
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");* _& a5 y0 h+ N3 g8 j
  248.       sprintf(filename,"(%s)",file->file);
    3 `$ \% {! P+ i
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( b) B' Z% L" }  g8 H9 k5 g! R
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    & z+ `1 W( u( a0 r0 j; z" e
  251.     }& Q" g0 a2 b5 K2 L0 I4 S, c2 D2 |
  252.     dwCurrFile++;
    " y$ w* U# J3 Z2 |
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 {( N: n4 C6 F
  254.     {
    ( x& C; e( ^8 z/ L2 F
  255.       bSilentStep=FALSE;
    - l2 d; i1 `- m, J+ U4 v2 _
  256.       bCompressed=TRUE;/ s! I& m; O" v% V, n
  257.       strExtLocal.Empty();& w; a7 y0 U4 o! x. L7 l9 k
  258.       strFullName=(*i).second;
    . E' @8 R5 B& Q7 m- f
  259.       dwProgramState=AP_CONNECT;1 e! _- G$ M2 w' p' ~* {
  260.       return TRUE;/ X3 K  k: b# P+ y$ q2 s6 V
  261.     }. `+ C7 h. X: {  s+ o
  262.     if(!bRestartUpdater), Q$ t2 U! w6 C1 ]: j6 [7 c" Z
  263.     {$ C1 l# r8 B1 W, X1 W
  264.       int iCurrSize,iFileSize;
    1 z  ~9 j+ Y! j$ o9 n
  265.       iCurrSize=0;0 x& d/ a3 @2 s6 k$ Z% f
  266.       iFileSize=UpdateList2.size();
    4 L, b' {3 b! z. M
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
      i9 r2 T+ w' ?  Y& h8 K
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");" a, a6 X3 z+ V* w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");( S$ a" F" c3 d5 M+ y8 w8 i- S
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 L7 ^) K2 a+ |& [' S8 L8 m4 \
  271.       Fclearf(".\\update.dat");! @4 p) r5 Q$ O  l" F: k$ m5 |, m
  272.       Fprintf(".\\update.dat","Bloodyf\n");- L. m6 }( ]( K# F+ n
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)5 e  i, R0 E* {  n6 O3 J' _
  274.       {' t$ ]# G: ]# V. {& w* X- C# Y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    1 F& R' D( o9 [! S
  276.         {+ I6 h  ?# Q+ S: ~" G
  277.           file=(*p).second;
    ( R1 l: x- ~% ^% A' A& `* m( H
  278.           sprintf(filename,"(%s)",file->file);# T+ t( I8 i) R% t
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! Q2 U6 f! ^: ~1 O, E  L
  280.           iCurrSize++;
    ' D& r9 x% Z* K5 ~# a  O
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    % k  L! F4 t2 @7 o
  282.         }
    # U- b" P+ A' K9 c, s! w% g9 m: t
  283.       }% ]# [( J  s1 t6 K+ B  e
  284.       unlink(".\\update.txt");7 P! e+ X9 g( F& w( `- j5 d! B
  285.       unlink(".\\update.tmp");: u1 p, n8 k. v9 o6 n* b9 s' Q
  286.       Fclearf(".\\checkversion.dat");
    2 c& O2 |- n6 B& U, S8 [% Y1 G
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    0 O' t/ S. w7 x& B3 M7 S
  288.       if(UpdateLocal.size())- x) T5 K8 _2 M. U  V
  289.       {
    - y% O$ ?& y4 H. i. W
  290.         UpdateLocal.clear();1 i4 r" n& |. v1 \( b5 B8 W
  291.       }" ^, r6 V# G; B5 C8 W$ c: u
  292.       if(UpdateFile3.size())
    ! x" Y2 _: j/ a/ Z2 C
  293.       {
    & F7 D/ z0 I% s% C1 y: C
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - l: z9 j% F+ V6 p
  295.         {
    - D4 l- d8 j( O
  296.           file=(*p).second;
    ; [( `# I/ M. U6 \) k) {
  297.           free(file);
    ' D3 f; X+ l# g) }  M( X
  298.         }
    % r) V" w3 P$ z: w! X
  299.         UpdateFile3.clear();& ]' u4 p+ w8 z6 p/ k
  300.         UpdateList3.clear();0 {5 ~9 _4 I; [* T( ]# `
  301.       }
    : X. C5 |' A8 R# e6 E9 h- v
  302.       if(UpdateFile2.size())
    " z. ]- X+ C9 D. ^3 y
  303.       {
    ; s# N2 j% ^3 M3 r1 t
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % X4 A( C+ S  U: f* n
  305.         {
    8 R5 z4 {& \+ c/ P4 k9 ?
  306.           file=(*p).second;4 n" ?9 c1 d; ^* \4 |4 ~6 I
  307.           free(file);
    * r/ A: E3 {1 @! M9 d  K3 S
  308.         }8 p/ x, @; _2 @1 T) q) P* S( S
  309.         UpdateFile2.clear();# E: Z; Q9 l- ~5 }  `8 k( q
  310.         UpdateList2.clear();
    + u6 l: K- y% B$ F/ t
  311.       }" T$ D' m/ f7 K- L! n
  312.       if(UpdateFile1.size())
    ! R4 [9 u8 H! e6 z
  313.       {
    6 i0 D' {: a. i: y+ f" G
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 Z9 `7 S) {( m1 c% Q  c9 m7 l
  315.         {
    8 c+ X) ~1 i2 }+ W6 R$ E
  316.           file=(*p).second;4 ^( Y' k& X9 J( z7 Y% [
  317.           free(file);
    " H' w8 n% g4 G& ^! k
  318.         }" F2 Z* }  A; [' J0 \1 F1 f4 r4 W
  319.         UpdateFile1.clear();4 ^& C$ F) G* D( Y2 O
  320.         UpdateList1.clear();
    ( w5 j: V+ N% K6 r
  321.       }
    ' C2 z+ W' p% q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    . m6 h5 I5 e, N; Q7 u
  323.     }! {0 H# T2 V! ?# U# W/ f% C
  324.   }! M$ P; ~* O6 _. H& c+ D* L7 J
  325.   return FALSE;
    7 i2 Y; t# W; Z9 U' [8 b
  326. }
    5 k$ V$ H& U% b, g

  327. 3 v% J+ Q( V3 l
  328. void CRevAppApp::ClearAll(void)) Y5 x6 B0 X: Y9 K0 |
  329. {  ~$ p' k. ~& Z* n( c# f$ k+ Z1 i
  330.   LPUPDATEFILE file;
    # O$ i. W# G; `6 K' E- I9 @
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    " l0 Q3 g! `7 `5 f- E
  332. & m7 k% m- P. n9 @
  333.   if(UpdateLocal.size())
    ) f" J  m7 J! c, H) Y* p$ h
  334.   {% m' L' J0 A/ B
  335.     UpdateLocal.clear();+ Y) @  Q. o+ D+ {4 y% i1 z' \
  336.   }+ Z) e3 L) {) C" w6 e
  337.   if(UpdateFile3.size())) U1 q! G, e- P, k* N' q
  338.   {
    0 u8 S- H3 V' B6 R
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 M! ~4 N( t% k0 a; N
  340.     {" I( Z0 W& V) L( l0 ^
  341.       file=(*p).second;4 E/ t  \3 A" I) {, P3 W7 D
  342.       free(file);
    0 u1 {0 x% V" V- a( _2 O; T
  343.     }
    ( n" U' ~, t$ l- ^+ R0 P
  344.     UpdateFile3.clear();1 d* I2 i$ V& ^5 d7 |
  345.     UpdateList3.clear();: ^3 ]7 Y% J* o# N. a1 ^
  346.   }7 I- H  v9 T5 m1 O2 y
  347.   if(UpdateFile2.size())7 b0 ~  E8 R" ^% d9 Q: f+ H
  348.   {' ?2 l5 ]; |% a- V. S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & b; ]7 x5 I9 `$ ]7 i% p8 L' L4 r3 s
  350.     {& Q* W1 _8 e) A4 r
  351.       file=(*p).second;% S1 k+ K! g0 n. F. T; S0 J: Z/ w. V
  352.       free(file);! x3 Q# `8 n# J: O) _& d* h
  353.     }  x2 I) s" }& `) E) D/ l; t, K. y
  354.     UpdateFile2.clear();6 z2 F/ @8 Y1 s  \5 u6 ^
  355.     UpdateList2.clear();7 o/ @& a! Q! i5 s9 S
  356.   }) |7 ?* Z/ M6 E1 D2 G
  357.   if(UpdateFile1.size())! C9 p# p+ h0 U" _2 z$ ~
  358.   {1 m6 l% T/ v6 }% ]) J7 H0 E* K
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' |- K) e. ~& s3 E. i7 Z4 p& w
  360.     {
    + j3 D" y: `8 A' O% n
  361.       file=(*p).second;
    $ a5 ?) s; P$ y  m
  362.       free(file);1 `& n' w, z& B$ X  ^) b4 j
  363.     }
    " i& a& V7 D( V, z
  364.     UpdateFile1.clear();
    / o" C$ L& ?" V1 u5 Y5 v
  365.     UpdateList1.clear();% ]- K  Q7 A0 M" m
  366.   }
    0 }% s- f& P9 d) ]2 c
  367. }  
      Y& |( [4 g4 l( \5 c6 B
  368.   4 @# Z# I- s6 q, ]" V: q6 K
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    + T# b$ {& g# {$ c/ b, `4 C& D
  370. {8 {8 y: E% h3 q, e
  371.   int c;$ p- f/ ?" ^/ ]; Z
  372.   LPUPDATEFILE file1,file2;
    , W$ Z. @) ~% r5 i6 I
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    0 z! I! Y2 e3 Z
  374.   std::list<CString>::iterator l;. P  K2 T( P4 O# \

  375. # _2 d1 _2 ^  h; L  T
  376.   UpdateLocal.clear();
    ' s: h2 _6 i% u* o% L  ~6 E% g
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    + U* h# b2 x0 p0 M# H1 z# p0 v. ~+ F
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    , X/ v+ K6 c* I1 }; O
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : N. y+ Y4 N. L# Y" k
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);6 E+ o0 \& j$ I2 T# E
  381.   if(UpdateFile3.size()). I' m7 h4 L5 P# ]+ z
  382.   {# t; M& x, N+ c8 m) i
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++). V" x. m! O3 o5 t2 Q
  384.     {* `& c& J; j8 ?2 s/ R
  385.       file2=(LPUPDATEFILE)(*i).second;
    8 \7 M7 ^' K" e' n# D1 m; W
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). Z! {9 c1 C; l4 O2 v4 K
  387.       {
    , M; \! Z6 x- \* O" G' u" S' |
  388.         file1=(LPUPDATEFILE)(*p).second;+ f$ C$ Z8 V5 }3 F0 S) y- T
  389.         file1->vers=file2->vers;* E# ~( ?1 S5 t% P7 m
  390.       }' D$ }' d9 s7 l- W1 ]- \3 G
  391.       else$ p5 C6 M9 u7 a1 ~- w
  392.       {
    ' Z/ C! O' b, e2 z0 O
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 H- U4 {4 O! I+ e# ~
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));- o8 v! g% K9 u5 o& v: M
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));* C( a) M9 l, f: V
  396.       }$ M7 \0 ]7 T$ W% B5 ^; p% U
  397.     }
    ; O% r" k* t, u
  398.   }. B% e& r6 a3 z$ s2 |
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 M( u$ {; U$ a) @4 i8 Q9 n
  400.   {7 q8 o0 ~8 i$ s/ m) V" a4 I; `
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- M1 V* i& l' e8 g4 u8 Y) E1 J- u5 o
  402.     {$ k: [1 ^! M. z4 l/ s. `
  403.       file2=(LPUPDATEFILE)(*i).second;& h! f( h" v% X, \
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( L8 `4 S( p: f% {, J% B  U
  405.       {
    , a1 i7 s0 D$ K& E
  406.         file1=(LPUPDATEFILE)(*p).second;
    $ b) A; i2 `9 `; Q
  407.         if(file1->vers!=file2->vers)% I% L' p4 {7 K& {9 K# a6 {: _
  408.         {
    ( V5 ~& ~% O% w$ X5 y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 f, P  i! ?4 f2 @) C
  410.           c++;$ y; a6 G  @; P3 [. d
  411.         }
    6 C& q2 Q! Q  A  S( N
  412.       }* l3 c2 l2 h- b# o, j+ f4 V( B
  413.       else
    6 s5 `! g1 K- U, c6 F, [" t- ~' G
  414.       {! I+ b& a% r8 p
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" h# v1 S$ ?6 F* z2 L" f
  416.         c++;3 H0 e) }5 L  F  ^. s+ d$ N
  417.       }
    , m* F: `; }" K& p
  418.     }" s6 D: {; H) ~9 L' g8 b% X7 ^* F
  419.   }, p' T; Y+ y3 \* ~6 b
  420.   unlink(".\\DownLoad\\update.txt");- O, \( ]5 b# T0 E) `7 o6 J
  421.   if(UpdateLocal.size()) return TRUE;2 L! n: h  X9 Z3 D* o. s- @5 Y
  422.   else                   return FALSE;3 Z. y; z  q3 ^6 E0 C! }" p
  423. }# k4 [2 g6 ~) X& n

  424. 4 U2 C! b: Z9 ]. L! O
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    0 C4 [, i/ E% w. O9 t% z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"' ]% ~% |9 \3 c5 ?/ \" b
  427. . J& I" I# v" ]/ `. z6 Z* @

  428. 8 E( n: U- e" d$ Y$ `/ I+ h. @* V

  429. % N1 y: \  S% ~% ~
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    5 w& l; H1 g5 `1 u: o; Q
  431. {+ n$ M- o! t# G, [$ Q+ T7 r
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    $ }$ X8 _! I& x8 p
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ! D, \+ r- o& j
  434.   {7 e9 @0 @- t9 b) L& g
  435.     char szLanguage[50];
    1 [( f5 c2 u$ R$ E6 ~# O1 j& T
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 `+ G8 l" O! ^) D6 Q# C
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : B0 X4 @0 G# b- }: p$ ~
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) V' h, @( X7 R" J" ^
  439.     else                                   m_iLanguage=ENGLISH;
    9 c; H% p2 W* z% f8 Q" j
  440.     char szRegister[100];6 ^% Y! x/ w, N4 g5 f
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 R" y: M  T% a( E
  442.     strRegsName=szRegister;1 P4 T$ `$ F6 ?  Z* T: p/ o1 T- m
  443.     char szPatchURL[100];" H% W/ k. }. W
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");, q* V- ^& r* ]- t" \( k
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 s3 y1 Z/ j5 ]
  446.   }) X% z* u" `1 d( J; D+ H8 `+ P
  447.   else
    8 U* A% y5 w0 S3 r
  448.   {' @: k2 B& j, R( O. W4 ^
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , V  d4 E; ^' I8 N: d
  450.     strRegsName=DEFAULT_REG_URL;
    ( e6 f$ a$ F4 r
  451.   }
    $ x6 g! e+ ~! z! p6 I
  452.   if(GetFileAttributes("hosts.ini")!=-1)& _9 i! Q) l0 L4 w& R
  453.   {
    ; h+ E( J; O4 b" {( T. `: u
  454.     char szIP[50];0 c6 C9 A. s1 \
  455.     char szDIR[300];, H& w/ m) W4 c, c  k
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    - n9 Q+ \3 t; j; B5 n, t5 O/ ~# w( V
  457.     {
    ! P- L: _& n  V) k! [7 F7 O
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    , ]$ j1 U) z$ n* F
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");' ?$ ]+ f+ \* C$ H+ z
  460.       strHostName=szIP;
    # D9 X: y2 E3 ?+ i
  461.       strHostPath.Format("/%s",szDIR);1 i/ w' h2 p% m0 ?% n6 b* a
  462.     }
    3 W# n- w" N1 R; A
  463.     else* C  i8 C& o/ h. m  c6 S
  464.     {
    2 w( t- Z# s! u8 S  q2 t, M/ Q# e
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * N, }$ z( N  H! M/ ^( j, W) I! L
  466.       {+ A% L* I3 x0 r7 r. _
  467.         char szLanguage[50];9 ~9 H. D* x& y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 s4 g; Y' C5 z; u2 }
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 x: x" f8 z8 i( ]3 h. f
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ B) ^2 K8 W% T
  471.         else                                   m_iLanguage=ENGLISH;
    5 ]5 {  K$ X5 T" B% j0 N( r
  472.         char szRegister[100];
    5 B" {, `& k8 a7 d/ r# ^& d
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 b: T& U9 @" ~* D! m8 A
  474.         strRegsName=szRegister;4 D( h5 {- J" D& k# a" [6 S* @
  475.         char szPatchURL[100];
    - l& Z0 r- o* @  Q, I3 }! ?
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ v0 w' N8 p5 a0 T
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 A" v) J5 Z3 q$ W6 R* z# P
  478.       }
    0 _' k& T. a- a
  479.       else
    1 `# F7 Y& t% V: G
  480.       {
    9 _' U* B3 V2 E. R* n8 V
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ Q7 z8 O% ~6 s$ {- j# m
  482.         strRegsName=DEFAULT_REG_URL;
    ! Y& K% K& w0 m2 j
  483.       }
    . S) m, `/ W/ w* K$ L& l; `" F8 j
  484.     }
    * W& K8 x; i4 h2 O: P2 Q* E. o  i  T
  485.   }. B  N7 |, z5 {1 V
  486.   return true;
    ' t. a, o9 k! w: p$ L
  487. }6 i- f8 }# [  d0 J) D& o' |3 B" n) U
  488. : i; m7 }) B  c2 |; a) H' c( X  D: Q8 T
  489. #include ".\ZLib\unzip.h"
    ) M2 x' w! h# [
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);  b* _: M+ z/ E4 h& J' U( h9 Q
  491. /////////////////////////////////////////////////////////////////////////////) D* T( T  ~0 O9 O% J3 a) H3 N% C
  492. // CRevAppApp initialization) r& V/ a$ D5 u: y& w
  493. * c4 |# q/ K% }4 T$ R, K: D( o
  494. BOOL CRevAppApp::InitInstance()
    : E) F! [2 J6 b1 ^- |6 H# p& n( G
  495. {2 q. S& \2 P6 I
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];/ J0 }8 G8 D: ?; t( O
  497. " F3 ?6 d8 `5 Q
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    4 a! r3 v1 B  v9 i8 U# q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)), P- x9 R1 Q/ S0 n9 m$ U* {+ [
  500.   {
    0 e8 I. u  P' p. q+ c- J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    . O* \9 m- p" a6 R( w
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    + Y/ S$ A+ o( f3 _2 Y1 I9 a/ e
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" c+ P* ^# k! n& \
  504.     {
    $ e8 X. ]  v3 {& Y! ^  Q* z& H
  505.       strcpy(szPath,szPathTarget);
    2 u* g# a! T; K. h2 N5 O
  506.       SetCurrentDirectory(szPath);
    2 E6 d4 [4 o( \0 L
  507.     }
    + g. m# D0 A4 z( K. M' G
  508.   }9 g* K- B4 ~! L& C+ \1 B  y
  509. #ifdef _DEBUG
    6 A" f. B% I# C; [! O* V8 K
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 b1 n/ x3 r+ S
  511. #else* \2 L0 L0 U+ C) _! {' `6 {& X' @
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      F; X- z8 I4 F
  513. #endif7 l' \3 l% w# W- {' t
  514.   {
    + w" B: g& z7 j: _0 A: z
  515.     char tempFileName[MAX_PATH];' H4 f$ `& `6 ?* I6 _% h* N0 ~- R
  516.     strcpy(tempFileName,szPathSource);
    ! B: F7 {0 `* w/ R, L2 P
  517.     tempFileName[strlen(szPathSource)-12]=0;1 H2 k! }! ~9 u; e. m2 t, S
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    * ^; p2 z2 ?( k  `2 k
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    " ^2 b$ [+ \& j/ ~% z7 j
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);$ j* F3 C7 W) O$ a" p, U% |
  521.     return TRUE;3 d: X) R+ d7 C$ r
  522.   }! R) L; I' q) A; w. l% R( q% w1 T
  523.   // Nuke 0118: Delete run.exe; t0 \; P3 i" K% A5 \
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ' M7 O+ Y0 Z( N8 K1 d8 ~, X
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    7 u% Q# |( z, Q% z$ X* O5 `
  526.   if(!ReadCfgFile("Config.ini"))
    " F+ x- L+ {/ m4 b" }
  527.   {
    ) g, h( ^2 t* S% n  L
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    & h$ Z  X+ R2 a6 s2 D( n
  529.     return TRUE;
    0 i; ]6 Z3 Z, y; ]* [3 B1 v
  530.   }
    ' R2 ]) X# }" ]: {
  531.   HANDLE mutex;, n& I* `! z+ A; \2 F/ r- K7 Z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))) h1 ^& |  R" u) M" k, n9 u* i
  533.   {
    % ?+ D4 {9 J( o! [+ ~, S5 \- m
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS); L& D, x7 J: d9 l0 ]
  535.     {
    ( c8 d1 }" E+ A- [
  536.       CloseHandle(mutex);
    ; s2 P/ W% ~/ ?, \  b
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);6 G% f, c( }; {' @: u0 }7 n
  538.       return TRUE;
    5 }' |' r& `8 s% e8 I# t0 [# @
  539.     }" _/ o! B8 B0 s: o6 ~+ V6 v
  540.   }  
    - K; A& S" O+ L  `0 }( `, T
  541.   CloseHandle(mutex);$ r4 h4 \4 _0 K% S, U( A
  542. ! z9 g/ I% w/ `% }2 L* }% n4 m' q
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( g3 w( |, l$ W# [5 ]! ?. Y" l
  544. , W: {, `. \) L$ v  ^( E
  545.         AfxEnableControlContainer();
    4 V/ L, C1 z: t5 B5 D6 t* e& _

  546. ! y2 B9 p# Q3 K1 `7 D( B
  547.   bCanUpdate=FALSE;! j0 {) x3 }% A* C& R$ C; s4 V
  548.   dwStartUpSteps=1;
    4 q" N% C8 H/ G  d
  549.   dwProgramState=AP_NOTHING;
    / o! t4 E  V1 h. M  s* [2 @
  550. 1 d1 u5 t& a( y: M% [" F$ c
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 u* K7 ?4 A, U# U

  552. ' {- H" L6 ?/ j0 \+ E
  553.         // Standard initialization
    ( Q( K0 }+ R. v6 Z; v0 }# y
  554.         // If you are not using these features and wish to reduce the size, S  f0 ~7 x% n0 X8 c
  555.         //  of your final executable, you should remove from the following- g5 T- ^; i/ G, O6 v. Y. ?, l
  556.         //  the specific initialization routines you do not need.
    0 B, [2 R7 J+ d6 X* I, o
  557. " ]: J: @5 U4 S
  558. #ifdef _AFXDLL
    ! P$ \; J6 X5 v. D  @
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " \1 R' ]* f. ?( e9 e0 R# ]; F2 ?
  560. #else+ q/ t$ ^- E1 b, s: G& @% _
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically9 P. [, e9 W5 u3 _4 |6 _# I& p/ |
  562. #endif
    ; z3 t6 i, U  N5 G, T1 e. R
  563. . z& _" E4 i" L9 r
  564.   dlg=new CRevAppDlg;
    8 {8 [1 E4 y6 h$ m
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    . S( a: ~, \  v  E1 {* m- O0 {
  566.   dlg->ShowWindow(SW_SHOWNORMAL);7 K0 a1 r( m4 r" X* r! |
  567.   m_pMainWnd=dlg;
    9 ~; h# J2 {; Y' g" Q
  568. ! s2 k& ^( E6 _) V1 t
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);, z2 k5 |, F$ [0 z: Q: f0 o0 b; u

  570. 9 L2 I" _: I7 g8 d4 L8 T, Z
  571. //  GdiplusStartupInput gdiplusStartupInput;3 N( ^5 l8 R* m- }
  572. //  ULONG_PTR gdiplusToken;
    , L% O5 U# |6 t' u
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);; Z: K1 j$ K" i) G: i

  574. ; l7 F# L- q& ^$ M/ o
  575. //        CRevAppDlg dlg;
    0 o! i9 s/ V% g! ^. k
  576. //        int nResponse = dlg.DoModal();
    8 l9 a0 g" W+ T+ `' g% ^
  577. //        if (nResponse == IDOK)
    ; l( }% I3 j9 ~! O
  578. //        {
    ' Y% w* m, _+ m6 \+ _0 R# W
  579. //                // TODO: Place code here to handle when the dialog is2 G* y$ K4 j4 K9 Q9 u  ?
  580. //                //  dismissed with OK$ t! {" S/ p9 u7 i- f
  581. //        }
    7 {* A, ?6 J4 `- q. G! \
  582. //        else if (nResponse == IDCANCEL)
    ( |6 ~' Z) x. W& V2 e
  583. //        {4 G: @2 {# a* w: D
  584. //                // TODO: Place code here to handle when the dialog is$ D' Z  y4 F( f1 Y  n! n7 g
  585. //                //  dismissed with Cancel
    # P) E" f  P" h% t8 Z
  586. //        }9 o; O. c+ B6 F" E1 o1 b+ A1 `+ q

  587. : l' s+ ^+ m& o
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ( Q+ u# F# E+ `
  589.         //  application, rather than start the application's message pump.
    * |* O5 N3 g# G& a" V, ~0 J
  590.         return TRUE;# S8 S/ z" F' G$ h
  591. }
    ; {2 Y; [7 o" t) }. I- q1 E

  592. % d6 r$ G% T7 Q6 m
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 T( m; W% \  P3 G
  594. {* _1 A8 P) T+ z, w( s$ _
  595.   int i;
    $ m0 ~4 G4 r, ^: e
  596.   char *szRet;
    / w/ o  z* j5 \2 b7 A* M( o

  597. , M  L( v" U$ j* O& J" M7 `  P
  598.   if(pSource) { itoken=0; sztoken=pSource; }) d2 X# O5 f+ ]; |2 H( u2 B3 P
  599.   if(sztoken)
    9 r7 M/ {& c9 e9 j4 }6 f, U
  600.   {* m4 p1 j  q4 `+ y; C6 W4 A% m
  601.     szRet=&sztoken[itoken];1 ?0 h" [4 q8 g) |. h( A
  602.     while(sztoken[itoken])
    4 i5 o+ ~7 m4 R3 s6 H: O; \
  603.     {% `/ ^1 R1 E  H; i4 j1 F1 |# M6 T/ E
  604.       for(i=0;i<(int)strlen(token);i++)
    + A4 H2 K& G* z9 |
  605.       {
    ( D6 w1 O! O& o! H
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    0 F# t9 s( j: T% m5 P. h
  607.         {& m% n0 h9 U, b
  608.           sztoken[itoken++]=0;
    : i/ u  n6 w* u7 P# q
  609.           sztoken[itoken++]=0;
    : Y/ T* I4 {2 M
  610.           return szRet;
      B2 {, ]- Z. T& Y8 g0 A) j9 |# {
  611.         }) x5 m8 O6 b% [& `
  612.       }% D3 F7 e9 _! R! N8 K7 e
  613.       itoken++;' [. E* Y( M3 f; m
  614.     }
    8 m7 x4 u. J5 r2 O6 q. }* ?- q
  615.   }
    % p- Z: K/ C! J! {9 z1 G& Q' v; E+ ~
  616.   return NULL;) \& S0 l7 P; C% g2 ?# C$ x2 c
  617. }' c$ g! P- g0 \( A/ x$ M  H: h4 N  v

  618.   N5 |1 \1 p8 I0 Z: }! |
  619. void ProcessProc(long Total,long Current)& o( J- V4 P8 h' ^
  620. {' S' _7 k- S+ n2 B
  621.         MSG msg;/ g% m! _& Y* c( g( H. _
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);9 U/ f2 |% y& T+ y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    + f0 f/ g: A7 h! @
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))2 V5 `% l; D& N+ c; s1 I4 f
  625.         {
    ' C% ~# g3 I9 E9 t) z. I
  626.                 if(!GetMessage(&msg,NULL,0,0))
    8 n( h. Y8 [2 ^- c9 k8 |+ f
  627.                 {6 ^$ x  r1 p9 t, |) s) k; V* i
  628.                         return;7 ?* R7 [6 `& b9 ~
  629.                 }6 a" [  Q2 u) f& N; W9 ]9 i
  630.                 TranslateMessage(&msg);
    8 \. u- n" C4 d: p. g# s) X( K' y
  631.                 DispatchMessage(&msg);
    ) S5 j0 a; U( s( g6 ?
  632.         }       
    4 |4 A" \4 d  r: X$ ^- g
  633. }
    $ ?% r: m1 T# B% v3 t
  634. 4 O5 h% q: c3 p: a$ U  i/ A* F
  635. BOOL bFirstChar=TRUE;
    & n( |6 t3 I2 ]: U- _' }) @. }- _0 K
  636. * I# ]2 U3 S/ N6 x+ w8 }+ U
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ `8 {6 W: F4 L/ Q% H0 d
  638. {6 e! |( z8 r: C% j
  639.         // TODO: Add your specialized code here and/or call the base class
    ) H3 W" v5 q7 i
  640.   switch(dwProgramState)3 X$ }/ Q/ Y: V& y  ?
  641.   {1 v2 t. H3 [6 I, i7 i. S4 y- D. V6 i
  642.   case AP_NOTHING:% P1 r# r4 {1 e! e. b
  643.     switch(dwStartUpSteps)
    + N; t* {, n* L( j6 w
  644.     {
    4 o) V8 L! \* T% A
  645.     case 1:
    9 K  I% n8 R  l; w$ t, `
  646.       {' G/ \" b' u# W) k. ^. a
  647.         int i;2 E. {: _( |1 B2 _6 b" G) p+ t
  648.         CDC *pCDC=dlg->GetDC();
    : C) ]7 m8 C( G; y; u  H2 d3 t
  649.         HDC hdcwnd=pCDC->m_hDC;2 P' h2 \: i4 R  ~2 q- z
  650. //        Graphics graphics(hdcwnd);! A( a. [5 k- b' I; z" v
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");( O$ n7 W: `* I8 i! o- c  U$ i
  652. //        INT iWidth=bitmap.GetWidth();* P) B3 h: I( X8 }+ v, l' p7 E
  653. //        INT iHeight=bitmap.GetHeight();
    0 N# j. I: S5 t# x+ ?, R/ O
  654. //        Color color,colorTemp;5 D9 a% M2 M  [2 x5 ~# p
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    8 F- |: O( k$ C4 I9 \
  656. //        {
      Q- k" `1 Q1 I+ S
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ! h0 l0 w9 a4 M  V# F$ U  t$ d9 ~
  658. //          {. s- j0 J/ \( b: G7 W* z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    2 k  c, L, A4 I* X" _3 Q+ ^6 D% V
  660. //            colorTemp.SetValue(color.MakeARGB(  Z" r5 F2 M0 K
  661. //              (BYTE)(255*iColumn/iWidth),
    % l+ o& m% _: s. ]' l
  662. //              color.GetRed(),* x, W: U* ~# a& S/ }5 K' V
  663. //              color.GetGreen(),
    * m6 K- k* [; T. P, Q5 u
  664. //              color.GetBlue()));0 x! H9 Y+ T0 w* ]) |( P# S) }( v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # W  E! ^, x) U. i
  666. //          }
    5 g6 A0 V$ W0 T5 ^' S+ j1 a8 ^
  667. //        }
    7 S& K% S! L2 A$ h# g- X
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);- G& q" j0 B9 ~+ c4 p, V4 t
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , G/ j+ t& |0 I* t
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    $ Q* r+ w) }% U9 ]7 V3 ?1 @
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 |3 m3 N, N* g* w
  672.         for(i=0;i<240;i+=8)6 w! s2 \4 \8 D% Z# d
  673.         {& k% L0 b2 F8 d6 {
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " M; B" `8 ~1 k, G# \" K! y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 j. _+ `5 R& C
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 I& [+ Y6 a2 w+ n/ ]
  677.           Sleep(33);2 |8 G1 u  H& U" z
  678.         }
    , [) x+ Q! I& |$ p/ X' x: H, _& r
  679.         Sleep(1000);- j3 W, }  K. N# t3 U2 j
  680.         for(i=240;i>0;i-=8)
    * X- P) |- `. M! ^; Z0 c* A
  681.         {  O- u5 b7 H/ V/ K
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' h3 F6 w9 m' [! N; p4 D+ k8 K
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . A8 O6 k& u0 J% D  l1 X& s3 m
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , ~: n; i4 z; _( J% c" m, I; X4 K
  685.           Sleep(33);
    , b2 T$ @1 A- q9 k& V5 j
  686.         }8 J3 o1 S' a9 }% C
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);* s; s% y' L/ o# b1 `9 j7 T
  688.         dlg->ReleaseDC(pCDC);
    # Y, r# i  N7 O8 T
  689.         DeleteDC(hdctar);
    ( r" g/ K+ U. f, [9 {
  690.         DeleteDC(hdcsrc);6 t- y: ]  u+ t
  691.         DeleteDC(hdcorg);
    4 V$ y& a- R, t5 S* c
  692.       }
    ! U7 h; l5 ?$ g  l9 p
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    , ^. d( {9 t: u; i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");1 B( U# j1 W" o
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");) V3 x, i) D. I+ U' x8 b$ i  g
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ' [6 l: f  N- _( M0 h+ o# B7 K/ s
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 o/ \& l  s" Q
  698.       if(!Dn.Connected())
    5 @$ S; X) B  r- c1 g$ k9 O* G
  699.       {
    ! D" D3 ]5 ]' ~3 O1 G6 F' T, `0 F
  700.         dwTotalFiles=1;
    ( ^8 p! e# P( ]
  701.         dwDownLoaded=0;
    % n9 z, ?8 R1 Z* N$ X  [' ?
  702.         bSilentStep=TRUE;
    , }3 Y. ^/ B; h% Q7 b  I3 Q+ R
  703.         bCompressed=FALSE;
    * C; I! {3 j+ ?* a
  704.         strExtLocal.Empty();
    9 {+ _! \  E/ m0 n  r: F7 A. V
  705.         strFullName="readme.txt";( [# W) c9 y, w
  706.         dwProgramState=AP_CONNECT;
    ! I) N7 {& z7 k+ ?, F) [0 I5 p
  707.       }$ N8 }  F- w$ q) P, D
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();) l8 S' n, o  {8 l( S( J2 U' ~
  709.       dwStartUpSteps=2;* ^* u+ l# C) `  k; k2 u
  710.       break;1 R4 d9 a* {+ I
  711.     case 2:
    8 L6 K! d% w" }& D
  712.       {
    8 j! a; t1 n" d
  713.         int iEOF;( |- `" B& ~1 g1 Y( a
  714.         FILE *fp;( L- L- W% Q8 J5 Q
  715.         char szString[512];* x4 Z, r1 c* B& F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    * m2 a7 K4 |8 k: _' {
  717.         if(fp)
    1 C  U' E- C5 h$ \. ~/ w6 m! H
  718.         {
    $ ?, d. c- o3 q9 C# y1 }" v
  719.           do
    & \' U- U, _6 G9 g3 \7 `
  720.           {
    " i9 ^6 Z/ _! P/ V
  721.             iEOF=fscanf(fp,"%s",szString);
    1 |; q& c. [: _6 H, c+ s; ^
  722.             if(strlen(szString))
    , @6 h4 y. j0 p
  723.             {& L+ W6 F* T" d0 a! P; G9 Y$ m
  724.               if(bFirstChar)- p0 \) V! m5 z
  725.               {
    . r# g6 t' u  _0 |
  726.                 bFirstChar=FALSE;0 I6 }2 D: s2 r  z
  727.                 bConnectIsBig5=FALSE;
    * L4 D/ r* [" O* [- q1 c$ T
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    $ d. P3 J6 D4 T8 T# e- ?4 ^
  729.               }7 w8 R/ ?& d( y5 k& ~0 X7 O/ N
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    % L: S4 N9 a# J; o
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    : A- ?* z$ e1 u( E8 u
  732.               dlg->m_ListText.AddString(szString);0 z% a; A6 s' B0 F
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% L! r" S5 O: L( O% ^, q3 d
  734.               *szString=0;( T( P* w* t# E3 x1 @3 a
  735.             }
    + H( f# W% C7 M/ v4 u% @' v# r/ n
  736.           } while(iEOF!=EOF);: E% y2 Q' U9 D+ c" `- x
  737.           fclose(fp);5 a, f3 M( Z: X" D( z
  738.           unlink(".\\DownLoad\\readme.txt");
      k- S, O" i, o9 A
  739.           dwStartUpSteps=3;8 v+ S: }) l/ Y9 g0 Z0 M
  740.         }
    $ p- S& C( ]. ?6 r! W0 k( [
  741.       }8 q; C3 [: U  F$ B; g. u9 E2 R
  742.       break;& s1 g2 v$ X4 u4 H( d
  743.     case 3:
    ; q; {1 G$ a+ f' q
  744.       if(!Dn.Connected())
    ( v: t* e. n' z1 `# u5 I
  745.       {- p  ^% P/ x6 t4 [
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);; D) M$ U% y" D/ @4 [
  747.         dwTotalFiles=1;
    * B- x$ |& d4 A. G1 Z
  748.         dwDownLoaded=0;
    ! b. l- C, p" U+ Q# _9 t
  749.         bSilentStep=TRUE;& y7 [' ^! S: ?: ]' m% V  [) [. X
  750.         bCompressed=FALSE;
    ! K/ m, t- ?4 I) t9 {1 B! B; `
  751.         strExtLocal.Empty();
    8 \- c5 C# [( F" M" N, j# C* Y; e
  752.         strFullName="checkversion.txt";  M% D+ e% F2 v
  753.         dwProgramState=AP_CONNECT;
    " W) [0 O1 T( m/ a3 `  I; n
  754.       }
    5 T' j$ q+ x, ~; E9 {& k9 s5 ^
  755.       dwStartUpSteps=4;
      s% B$ U$ i- |2 v0 a( _
  756.       break;
      D/ A& x0 F- W
  757.     case 4:
    6 l( _! z) a" F( Y* P
  758.       {2 _3 O8 D0 q# A
  759.         FILE *fp;' j3 ?: s8 \  ^! [5 L/ e
  760.         char szString1[128];
    0 F' o3 X8 \; B
  761.         char szString2[128];
    8 q  _7 ]$ T) d# Z( A# o" [% o) X
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    * N0 h! N  j3 L& k
  763.         if(fp)  H3 @( h* P- J5 v- E
  764.         {
    $ w/ g. r1 Z9 A7 J' A
  765.           fscanf(fp,"%s",szString1);
    & s- R5 I1 f$ ^6 L. L/ e
  766.           fclose(fp);
    & U& h4 g  @& i6 f+ }% H- r
  767.           fCheckVersion=atof(szString1);
    1 t0 w( b; a: c0 e
  768.           fp=fopen(".\\checkversion.dat","r");
    / G5 V: Q+ K/ o
  769.           if(fp)
    * Q' h- [6 ]0 A0 I, @/ D7 d
  770.           {8 u5 j: n5 i) U3 P3 ~
  771.             fscanf(fp,"%s",szString2);
    # S3 L$ H1 Z( J& _, \2 K  l
  772.             fclose(fp);
    3 Q  |  M' I, h9 g
  773.             if(atof(szString1)!=atof(szString2))/ ~) X% I( {' H1 L! t  h4 W3 k
  774.             {  Y& g1 c3 Q2 _$ a6 R
  775.               if(!Dn.Connected())* z; I1 V& ^  K0 o1 I( r
  776.               {5 m  N- c& F4 G* ]# D1 \6 v
  777.                 bFirstUpdate=TRUE;1 e3 s' Y0 ]$ L0 L8 P: ]% _% W& S
  778.                 dwTotalFiles=1;
    0 W+ D/ f) b9 f' U2 j
  779.                 dwDownLoaded=0;
    % d- ]  p) j# l7 f( e  k
  780.                 bSilentStep=FALSE;
    0 E5 h3 O  P7 _2 D; Y4 f: v
  781.                 bCompressed=TRUE;  d2 |3 z! Y) m" F
  782.                 strExtLocal=".\\DownLoad\";
      P+ P5 @: n- W6 L+ L! |+ p) T/ T
  783.                 strFullName="update.txt";
    9 h. @: @7 C+ X0 b! z- A, z  j& S
  784.                 dwProgramState=AP_CONNECT;3 R5 Y, J6 Z! a" Q# M
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* _$ w" p6 B; R
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( a7 `" y# M( d5 t
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");; d/ b" e# x; z8 D: p

  788. ' x# I6 V3 O: U% U: T
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 \" p3 M' k2 q; C4 J
  790.                 unlink(".\\DownLoad\\checkversion.txt");) c/ l4 @/ X2 o3 m" l) a
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1): E" [) a9 K9 @# M% f/ q
  792.                 {
    1 {( P7 d/ z+ P7 u
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    0 u- n2 b$ @% E+ H8 c! U8 p
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");9 b2 Y: p0 ?, `5 {$ X7 M5 c
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");# K! j. n$ m* I" e
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! @+ n9 e  O% _: G. P
  797. ! _- j$ j7 O1 |+ v) L* T
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , e/ t/ \* J5 |7 x7 ^3 ^
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    8 b; j; C; q! G# }
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 w, a& D* r: C" @+ Z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 r& e  ]4 ^2 m0 J
  802.                 }7 {/ a3 e# |2 ~# R) m. ?+ v
  803.                 dwStartUpSteps=5;
    : n# e9 r9 G6 `
  804.               }
    . l) c& [1 {. P7 Y" h( }( G4 f
  805.             }
    8 Y- N& K9 w7 A0 z
  806.             else
    . x. Z% k/ \8 X$ R3 ?
  807.             {
    8 U, G: |/ t- H' b8 v* X, m1 N$ A
  808.               unlink(".\\DownLoad\\checkversion.txt");
    $ J4 [; I" c  }. L
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , J  ]4 h8 c0 V
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");: m! r$ Z, a7 c' V, B9 E# [
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");3 t$ z6 j/ I; u  r5 j

  812. 5 ]/ N: m0 e8 u  [
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( i" r  _2 C0 g6 D/ r6 u
  814.               dwStartUpSteps=99;7 g  P" X  _- d8 n
  815.               bFinishUpdated=TRUE;6 V6 v6 h- b# V1 ~2 C
  816.               bCanUpdate=TRUE;
    # r! h2 b$ q, B
  817.             }7 c" ~: G( `' W0 O% U
  818.           }
    % C' }3 a" X; _- u5 i
  819.           else
    : K  M: H7 {3 f0 w. M% m* U
  820.           {
    + s7 i4 g4 T9 s' p/ s- V$ a% K
  821.             if(!Dn.Connected())% v" _) P% n( l( Z+ W, l
  822.             {
    * @) u# u! f# ?) D, J- c5 E
  823.               bFirstUpdate=TRUE;
    , R, w/ q8 f, h1 W: |
  824.               dwTotalFiles=1;" D9 q: u, W9 R; p' t
  825.               dwDownLoaded=0;! s6 K, r( c0 B, k+ P# W# {
  826.               bSilentStep=FALSE;
    1 R9 f5 b3 {( ?2 y2 W7 H
  827.               bCompressed=TRUE;
    * o6 Q0 y! }+ a
  828.               strExtLocal=".\\DownLoad\";% k$ g9 Z% b; y$ n
  829.               strFullName="update.txt";9 `! K$ R7 m' H! Z5 h
  830.               dwProgramState=AP_CONNECT;
    7 ]/ b; W; l/ d8 s
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " J% _5 d$ N5 L5 }. [: @
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    * q$ }  X3 k$ Y7 a8 G/ C
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % }: U: x* B( o* ?. ~; l; j% @
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 @- X- V6 E7 D. E$ Z7 H8 E
  835.               unlink(".\\DownLoad\\checkversion.txt");
    # L! p% l( j/ n3 g
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)- C7 T. F; B& t
  837.               {
    & w) x1 B4 K. p; d
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 S! x+ F8 I& B) p  n0 b
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");8 L, a: }/ p0 l  x
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");' k% k5 q- {+ L; K
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 i" R6 w' F5 b8 K/ k) F4 y& z
  842.                
    1 `. q+ V4 t% X- E# Y& A) ^
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : X7 Q$ ~) d$ }3 b6 h
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    9 {9 R6 a5 i# A8 d" ~: q
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 C' ^. ^  m. ]1 T
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- t2 W0 E7 n2 b" H
  847.               }5 @3 H  N8 V) v2 I6 t3 a4 `
  848.               dwStartUpSteps=5;
    % z. M: H" t0 T$ k
  849.             }
    2 z- d1 y( \$ _7 J& C! b% T
  850.           }
    0 s9 f# v6 w  h/ j1 H2 U' s+ F: ]
  851.         }$ s6 J* T# X9 d+ W8 s* J2 G; P
  852.         else
    * \. a0 q, j( S, D% D$ |6 U
  853.         {- S( e" u  F7 {2 K2 C' L
  854.           dwStartUpSteps=3;
    / i: i; E5 n6 a8 H& J
  855.         }
    5 D2 V, P7 C" n. Y
  856.       }
    : Z6 _6 I$ p5 M/ m
  857.       break;
    $ J4 _8 Z. _! t" _9 o
  858.     case 5:
    . \+ ~5 j' `5 E* C- D
  859.       {) i# h& K" y$ S3 L2 W4 w+ Z: q
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    5 h% s, `2 x9 K9 C  n0 y
  861.         {
    , i3 L: Q9 ?; ]( [& n" l& X9 D
  862.           int opt_overwrite=1;& {9 b3 o. x9 y  ^8 C0 G; t+ e1 z6 `5 J
  863.           int opt_do_extract_withoutpath=0;
    & B5 `0 i: S1 ]6 i; I- f& D5 [
  864.           unzFile uf=NULL;
    8 X# c, y0 a% k4 I

  865. ' J; ?. r, A! o" \) q
  866.           uf=unzOpen("Wsa.zip");
    * q  N# L7 d3 @% [" D& V- |
  867.           if(uf)
    2 M) V! z4 O: L) t/ H) b
  868.           {
    ) Z: f. z  @; g; @; y8 i7 v+ s% m
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);! g( ?& Z1 r  A) G
  870.             unzClose(uf);) A0 c- U  |  `( A2 s
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");3 l7 a0 }& E. c$ L  C
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");: r" ]$ B$ ?3 U+ t( \9 |
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    7 Q% u; U& k/ `, A% b( J
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) l3 V7 L" }6 U2 x
  875.           }* s+ ^) B' h: x) x! E( F
  876.           DeleteFile("Wsa.zip" );
    4 F9 v6 _- S( k  t3 o! f# I
  877.         }
    6 o, u% U4 k1 |+ \! c3 E
  878. 1 k1 i  w. V. u; V2 x% `  a& M
  879.         if(CheckLocalVersion())) C* b- D9 x' Q$ M
  880.         {9 w! x9 m& \. v  d2 j" F* f/ ]
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");/ b, N# _0 C2 V3 N8 S! g
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    : S8 ^+ X/ ~& G- N* F0 K8 J) E
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");  }9 r' _9 Q" h$ Q3 I
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + R3 X! h2 N6 S, `
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    0 O0 l8 Q( @( j) j; |! C* O
  886.           dwStartUpSteps=99;+ \% W/ o) `- t; |8 T$ v8 r4 T
  887.         }
    , z+ B. }0 R; U. U- @
  888.         else& L& Y  H! X& R; f4 Y$ ?* c/ j
  889.         {
    ! h9 A4 ]' H5 T4 U
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    % M* |2 W* T' Y& O0 j0 |
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 h. j0 X+ x6 o
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    : z+ h2 {, n( \0 {

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

. e( Z0 P+ [) U+ A& v; c' X0 s5 t

評分

參與人數 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, 2025-10-19 11:35

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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