CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
9 r+ n, t+ B  s( ?2 i0 b
  1. / RevApp.cpp : Defines the class behaviors for the application.
    5 Z( T+ L4 {- \* D2 S0 G
  2. //
    6 u# X( W7 h9 z7 w- y. |

  3. # }* T% j2 O+ @5 w6 i
  4. #include "stdafx.h"
    , j& K; v1 N7 \- ~' Z" h( O

  5. 9 q- E# p5 v9 Z$ \# W+ n: a
  6. //#define UNICODE+ |8 @3 P' E# P) S6 Y$ ]
  7. //#include <gdiplus.h>
    # a/ Y& d5 m% S7 B1 C/ m, y
  8. //using namespace Gdiplus;( _4 W2 e. s+ e, `- l1 l9 `/ S* C
  9. ; u& ~! s- b# P* a/ k
  10. #include "RevApp.h"
    ( c3 D  h' a) y; B) {' E
  11. #include "RevAppDlg.h"- h: k5 F1 t) z( i3 Y" Y

  12. 2 `$ E6 X- N* H
  13. #pragma warning(disable:4786)
    8 s0 P& Q3 n8 ~) D
  14. #include <map>! \6 @' D3 I2 U& |( L
  15. #include <list>
    & g7 \9 w% v" j2 h
  16. #include <direct.h>
    + G" T3 [; e1 Z4 Y

  17.   G0 ~. K& g7 [  S
  18. #ifdef _DEBUG
    5 [( h& }) P+ Q8 m# }0 @" M
  19. #define new DEBUG_NEW" a5 `0 y" o, x
  20. #undef THIS_FILE/ l4 e9 R  x% {6 c
  21. static char THIS_FILE[] = __FILE__;
      w, |" d8 C5 t6 P7 j
  22. #endif
    7 L, H* S- F. d; Z) K
  23. #include "SkinResDef.h": C! ^) u4 R) |1 z4 F) z
  24. #include "ChangeBG.h"! W0 a6 A8 d  r3 d
  25. #include "AFXINET.H"
    5 ^6 W0 j1 g) j- K0 v% u- ]5 f5 K0 g

  26. 3 W$ n4 D" w9 O0 j( t2 K+ Z
  27. #define TRADITIONAL_CHINESE 0) v2 H/ W  O$ k& P* X( X
  28. #define SIMPLIFY_CHINESE 10 k& t6 q8 o  C: ]' k. e
  29. #define ENGLISH 2
    % r6 x% J7 Q9 z7 u& M: J
  30. int m_iLanguage = ENGLISH;
    ) [, x7 H7 @+ K6 o2 |- i/ J
  31. /////////////////////////////////////////////////////////////////////////////, q; w. n! V! O) K% S* h4 Y0 S
  32. // CRevAppApp
    2 L5 }' i1 D% ~3 i
  33. 9 y% p% C4 E0 D9 _: J
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)' ^# N9 i  x% k3 }3 @, `) c
  35.         //{{AFX_MSG_MAP(CRevAppApp)$ B* c. L  P! b" P! B5 ^7 L6 E- d
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.* q) H& ?4 [8 Y( F
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    0 ^+ o" z  y. J
  38.         //}}AFX_MSG6 N: y5 t' R7 t) R
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    - P  T% O/ Q1 [5 F3 R5 C
  40. END_MESSAGE_MAP()
    2 o7 R! x- z9 d( o  H, @
  41. + }9 q: Y. M0 C6 \8 c, N* s% i
  42. /////////////////////////////////////////////////////////////////////////////) D5 [1 F& C; E1 J: J
  43. // CRevAppApp construction& |- f5 ~, ~4 z: c8 E* O) C
  44. , j! p$ v1 e( t) Q, [+ U4 ?$ {2 h
  45. CRevAppApp::CRevAppApp(). z# h6 ^0 z3 b0 \
  46. {
    " Q1 O  U- I: x+ o$ H% \
  47.         // TODO: add construction code here,$ y7 s7 V/ W9 e/ k1 O
  48.         // Place all significant initialization in InitInstance' E. d. t  Y& [) Q
  49.   bDisplayIsBig5=FALSE;$ M- O2 E/ A2 [4 ]3 b3 D1 R
  50.   bRestartUpdater=FALSE;
    & W7 w3 F! m3 B) V/ T, h
  51.   bFinishUpdated=FALSE;+ l. h, _* N. @) k) f- t' r  W
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    * V+ o! D8 n3 G9 i7 _, [
  53.   InitChangeDataBig52GBKS();  D( V$ X; ~6 M1 ]
  54.   InitChangeDataGBKS2Big5();) f0 ^& F1 A7 Z4 X1 w/ B
  55.         //
    ; W9 B6 @: V1 c. ?
  56.         bClickRunExe = FALSE;
    ( T- P% x  Z) F, [& r
  57.         /// Q; ?/ d/ J' a" L5 F) B
  58. }7 U8 D5 G9 q* o& I+ h7 g9 v
  59. " b* C. l* ?+ c
  60. CRevAppApp::~CRevAppApp()
    ' m+ z3 C( k  k6 u( r- E# X9 X
  61. {
    - I+ j6 I; M; x/ @4 A1 a, H
  62.         // TODO: add construction code here,  w5 n! {7 X; C4 G6 p. o
  63.         // Place all significant initialization in InitInstance
    & p- D1 @3 `- l1 k4 [
  64.   EndChangeData();! C( x" C( I4 ~6 G# W
  65. }2 M) j2 o3 y, s, u9 H/ Z

  66. ) D. y  e8 E. w0 {, l3 i1 ]
  67. /////////////////////////////////////////////////////////////////////////////
    3 K/ ^& J: Q& G8 K! A9 o
  68. // The one and only CRevAppApp object
    % Z2 [. v1 a/ N$ L% p; y
  69. 9 \, z! U6 \+ }& T7 P, o6 \
  70. CRevAppApp theApp;# S2 ^% ]0 {0 R
  71. 0 \/ j1 B) [7 f% [; A
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    " J+ O, T! g5 p( g
  73. {, f9 `+ s, {7 B* C( |, `4 C
  74.   int iEOF=0;
    * v+ t2 \; h/ a/ b! C0 @
  75.   char szTempName[MAX_PATH];3 b& y, A. z( |; x# ]" l$ j
  76.   *szFileName=0;
    2 z$ B  K1 k7 f6 a* n6 e
  77.   iEOF=fscanf(fp,"%s",szTempName);
    5 M- q6 V# {! P8 q& h/ `3 c
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    % D% S- j9 @- b
  79.   {
    * J) J- i# z: n5 l. ^
  80.     strcpy(szFileName,&szTempName[1]);
      m. A5 s6 G4 l& @9 P
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    7 `- c$ O' f6 a- a
  82.     {
    , }; C" V+ P* y! p0 Z1 u+ _+ ~
  83.       iEOF=fscanf(fp,"%s",szTempName);
    , s8 v  v; V8 l1 {6 {& H
  84.       strcat(szFileName," ");
    * A" y0 u+ F2 H8 M0 n  h0 c
  85.       strcat(szFileName,szTempName);
      H9 p$ N% Y+ z: h( i) L6 k
  86.     }
    ' y. ^: i2 r7 y
  87.     if(strlen(szFileName)>=1)8 t, b! P8 M# D% S( r# ^& E7 n) c
  88.     {
    ' \% L3 G. `/ J$ u! d
  89.       szFileName[strlen(szFileName)-1]=0;7 w3 l- L8 Z2 a( I- V
  90.     }
    * N" a# _( y' J
  91.   }. Q. t# T/ e  T: H; Z0 R
  92.   return szFileName;8 r6 a5 r4 o! ^% ^3 N
  93. }0 X$ ?6 j! V. }2 y: O

  94. 3 N# M9 _9 w0 b9 W
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile), h) `% e6 q6 I# _- N
  96. {
    + h  |4 P0 r4 p" C& y6 I
  97.   FILE *fp;
    1 P, K( Z* R$ \/ J
  98.   char *key=NULL;
    ) O/ D6 d' h; Y
  99.   char version[MAX_PATH];. n8 s0 ?) i6 H; W  ^
  100.   LPUPDATEFILE file,olds;7 Y6 s$ S9 w( R9 Z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' |2 g0 v! |' J+ `- U

  102.   T/ T4 ?3 @+ z( z9 T! \
  103.   UpdateList.clear();
    3 Z! S1 Y+ T$ t2 w5 A( m
  104.   UpdateFile.clear();" n: y- ]8 R- _' g6 x0 [
  105.   if(GetFileAttributes(filename)==-1) return false;/ v/ Z1 Z) p1 |$ J
  106.   if(!(fp=fopen(filename,"r"))) return false;
    $ B3 ]1 ?7 D9 {2 _: M
  107.   fscanf(fp,"%s",version);- K& t7 j$ o: a1 e2 ~. y0 I: u
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . w4 S. m. D& g
  109.   while(fscanf(fp,"%s",version)!=EOF)
    + B8 B8 r3 H3 Q" J; l
  110.   {- i5 s1 b  u3 a5 _- s
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ L2 `( {* S9 d( V
  112.     fscanf(fp,"%s",file->path);
    ( I  O2 \; c( ^
  113.     ReadFileNames(fp,file->file);
    % f1 j' _! D  ]- q1 M
  114.     strcpy(file->full,".");3 {. t1 ?6 x3 |+ I4 Z/ ]! q
  115.     strcat(file->full,file->path);. p5 |* [8 \9 U( m+ X
  116.     strcat(file->full,file->file);, B  L4 H! o, |4 @2 k6 l* B" Y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
      ?  f0 p6 I+ p( z6 b
  118.     {2 g& s; A: o; a( ?
  119.       file->vers=(float)atof(version);
    1 ?  j) I- S5 s0 t; m
  120.       UpdateList.push_back(file->full);3 {, ~$ ~% O- p" p+ P% a7 w) Z* {
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
      S1 V$ G, p+ Z3 l9 _5 h: s% a
  122.     }+ b8 T9 Z" e' P% G3 Y0 d9 S
  123.     else. y  o5 E+ l: k2 p: f
  124.     {$ F, ]7 J" h4 @( ]
  125.       olds=(*p).second;
    # r3 }: A# i, |0 m6 Z
  126.       if(olds->vers<(float)atof(version))
    " c( {4 E. }: t; p. g6 h4 q
  127.       {
      o+ \4 Y" \) Z8 d9 ~- H# c9 u" m
  128.         olds->vers=(float)atof(version);% ^+ w5 e% {) B
  129.       }' g( w" Z! s$ z  d
  130.       free(file);  J4 j  {4 i8 V% a0 j& v- R8 q/ T0 |
  131.     }3 [1 n  K: E# D
  132.   }
    ( }/ h0 D0 G; l& c  w8 t
  133.   fclose(fp);
    , l9 U0 c5 \+ o- Y
  134.   return true;
    & q$ h, J1 c. e' v
  135. }" |, u' @8 G: @' E0 ~# N4 c  S
  136. ( o( r8 N+ [2 g  B
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    5 y4 x  a$ ]- o' T4 L$ s- i# x# ]  H, K
  138. {
    * n7 i$ [3 o0 V  V8 b/ E1 ~
  139.   TCHAR  szFull[MAX_PATH];
    8 U& ^+ e  V2 V( s# j
  140.   TCHAR *token,*inter;) s' @/ n% [+ \5 `) p- a
  141.   *szPath=0;' q1 n" a3 ]+ S( P& x6 i& s  Z
  142.   strcpy(szFull,szFullPath);
    3 N* U" o) t8 j, A3 U1 l* b
  143.   token=strtok(szFull,"\\/");! F/ }3 C4 _+ |0 E, s0 Z& s6 Y
  144.   inter=token;) n' ?/ U4 M; M. @3 z
  145.   while(token=strtok(NULL,"\\/"))
    ( h$ r* W  [& i0 A
  146.   {
    % V3 D+ w* W$ i. ], E! `6 O
  147.     strcat(szPath,inter);& V4 B& e* Y3 y5 \
  148.     strcat(szPath,"\");  w7 q2 s3 r1 H1 d) T
  149.     inter=token;
    - @$ u2 @# a! h2 v# Y6 |% I: `: L2 d
  150.   }+ p; o0 i$ x1 T3 S
  151.   return strlen(szPath);
    9 ?% o* D8 g$ Q. w" j9 S
  152. }
    - p1 R- Q! i( {- o" l. ^8 x

  153. ! T& S- T6 s) Y' A; V
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)6 l) K  j0 o+ h6 x- ^
  155. {8 V: d& \! m. ?& }. K, u  j7 T
  156.   DWORD attrib=GetFileAttributes(Target);
    0 `2 d9 ]  N3 o. T5 {! x# z$ A8 A( X
  157.   if(attrib!=-1)) J% K( J4 s$ s# `( N/ F
  158.   {
    ' @2 G" p; l3 O& s; Z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))+ i+ @/ u$ Z' P( V: a/ L/ f" L* l+ s* G$ {
  160.     {4 ?( P4 i2 E1 {4 L
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);+ y& T5 l3 l- }/ O) ^* ^1 }
  162.       SetFileAttributes(Target,attrib);
    5 f- H! ?0 B5 v/ v' \% a
  163.     }
    % _0 @9 C- q  a- l/ l
  164.   }9 N$ N' ]+ C3 n
  165.   CopyFile(Source,Target,Erase);
    # C. N* g; L3 Q& ]% H
  166. }) I5 E- O4 A; z+ Z

  167. 6 T& _0 f. _% }
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)$ t* P" m  |- d  U4 \
  169. {3 ~# x7 u# U0 \7 y  M9 a
  170.      FILE *fp;2 \; L4 H/ {( P5 d
  171.      char  szBuffer[8192];0 i3 S* p% m5 T# Z- a- V
  172.   va_list  argptr;7 m/ {, D3 u4 C9 u$ i# h/ l
  173. 4 _9 k3 ^8 P% r6 G/ n8 a
  174.         va_start(argptr,message);/ b% ?( A4 o/ L: {7 l
  175.         vsprintf(szBuffer,message,argptr);
    & r' L" V/ L5 c6 v3 V; |
  176.         va_end(argptr);2 r+ K# T$ v- N: V5 A. B- r2 K9 ]
  177.   fp=fopen(FileName,"a");
    ) s7 N6 l6 e  Q) `
  178.   if(fp)8 d( H9 ~' i. d; h8 J
  179.   {
    $ H9 c+ ?3 E# K9 M/ Z
  180.     fprintf(fp,szBuffer);3 s0 R( Q( b! e, A
  181.     fclose(fp);
    ( e2 j9 u- P; _" ]) F
  182.           _flushall();
    2 P! l* g% L' }
  183.   }
    ! z3 x; L, `; r1 T# b2 y; a" O7 L- f% O
  184. }+ o: c  X) K0 E) O2 e. W& O

  185. 6 U* |3 L' u8 n( I
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ! A- N" D3 Z7 X. Q
  187. {
    % a" g( h$ q! L) B! @
  188.      FILE *fp;6 O3 o5 Z2 Q: V  L/ P
  189.     DWORD  attrib;
    + w5 V4 j. {& E  s( B7 @
  190.   attrib=GetFileAttributes(FileName);- a+ S. k) `, E! \- I
  191.   if(attrib!=-1); a7 R6 S* M- z. u, F( x( N# A
  192.   {; ]( {# ?' L* d. G' [8 V
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 n. Y8 w+ e# `9 W$ x$ x
  194.     if(!SetFileAttributes(FileName,attrib))
    2 m' f/ l9 ]7 q! {% Y7 `
  195.     {
    / ~- B( {' L9 _# u, X3 _
  196.       return FALSE;1 {$ O6 b* M0 _( E% o3 ]9 m1 H
  197.     }# w- h( p7 q4 \$ I/ T) c3 C7 I2 L
  198.   }7 G; s& g; J! n
  199.   fp=fopen(FileName,"wb");
    * l: x/ r" u* V% s; h3 K
  200.   if(fp)+ ], Q: {6 S$ N* w* m0 C/ \7 l5 E
  201.   {$ f; ^& f' _9 A9 i2 Y% L! K
  202.     fclose(fp);5 i" X* W2 W) _2 s" g
  203.   }
    # P5 f8 Z3 l2 f3 V- ^
  204.   return TRUE;
      K0 ?' |: y; g% W. R
  205. }/ C2 w/ l/ s6 O. B5 N# |6 ]2 U

  206. 7 `* F4 X  W3 P- I3 W
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    6 t' E1 q7 ~0 c
  208. {
    # n2 B* D7 Y, h% o
  209.   char filename[MAX_PATH];
    / K/ }7 {0 n, i2 H
  210.   LPUPDATEFILE file,olds;
    ! S9 N5 D" b, f0 B( P% G
  211.   std::map<int,CString>::iterator i;- b+ i. p9 h( v. J' Y. [$ [$ ^& t
  212.   std::map<CString,LPUPDATEFILE>::iterator p;9 k4 {, Z, r2 j2 o7 i
  213.   std::list<CString>::iterator l;
    / U2 t& E% g/ t  X# Q6 P' H6 e+ M
  214. 4 K1 M- t% q9 c
  215.   if(bFirstUpdate)
    3 @! b" c$ M5 G& }8 T
  216.   {
    - s7 J1 M2 M6 M7 L" N: G
  217.     dwCurrFile=0;
    # B) x6 ~1 n! P  t! ^4 k
  218.     bFirstUpdate=FALSE;" L7 r9 Q- v" B# ~+ A9 _
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 c4 m3 _5 Y# L# ^& O$ w+ f. j
  220.     {7 j# }9 M; X1 D" c
  221.       dwTotalFiles=UpdateLocal.size();
    / G) l# S& `' _% O, i
  222.       dwDownLoaded=0;
    ) U9 Q! ]8 Z% w4 T
  223.       bSilentStep=FALSE;/ i+ C# d9 ^, ~: G  }
  224.       bCompressed=TRUE;5 c% g: G: s3 \, a3 Y& ~7 n
  225.       strExtLocal.Empty();; m% `# _: A1 F( z
  226.       strFullName=(*i).second;( R, Z) T: s- Z2 S) N# p7 s) U* X
  227.       dwProgramState=AP_CONNECT;+ ]5 l" \2 g9 K0 Y4 K7 |. A
  228.       return TRUE;  n9 i2 i* I* v
  229.     }* i+ ?: d8 k  t1 g
  230.   }1 b$ t- @+ Z( n2 l# D
  231.   else if(bRestartUpdater==FALSE)9 p/ V+ B$ i  |2 w$ [- o
  232.   {2 l$ b4 O- T" s
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())1 l% n7 Y. p) r  _; Q
  234.     {" F, \! D; I& A  ~7 E  O( R! o9 ~
  235.       file=(*p).second;0 t- e5 e- r9 Q5 W* Z
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())" G9 I: D) J" o7 p/ |; L; c! }' c
  237.       {
    ' Y8 d$ `$ F) }, Z0 d+ Q7 u
  238.         olds=(*p).second;
    , T: g0 ~! G7 O2 J
  239.         olds->vers=file->vers;1 v0 x4 R  p9 L! [- R# ?
  240.       }
    & r( n( A9 ^3 M
  241.       else
    # _0 E- ?* S( A$ D; t  f$ T
  242.       {6 M( W7 @7 r+ b5 {/ [0 t2 U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 w. M) j! w2 [% u! x
  244.         memcpy(olds,file,sizeof(UPDATEFILE));  s7 @5 B4 b% Z% X
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));9 i- c2 `7 U' O5 D+ N5 ^4 P& _2 W
  246.       }7 X! j# i' H, T
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");, G- a  c8 F9 X3 X/ B0 [
  248.       sprintf(filename,"(%s)",file->file);! L8 ?/ t/ s5 Z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % L+ V8 b' r' e# J
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }9 i8 O- A: X1 j; X
  251.     }- d1 ~- L  d2 f2 S& C9 G: n
  252.     dwCurrFile++;( Q5 @+ C3 h0 E* w: C1 i
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # B& f" C6 e+ t9 G) s1 j1 M& p) o
  254.     {8 T4 R; p# A- I. u# h0 Z( t
  255.       bSilentStep=FALSE;
    4 t5 g: |) {' T9 e& D; W
  256.       bCompressed=TRUE;
    ) S+ c# T8 c; V. l0 o& b& B+ V
  257.       strExtLocal.Empty();
    9 u8 ~  \$ |3 o+ I
  258.       strFullName=(*i).second;
    ; r- D1 [% ]6 G4 F1 N3 y* R  s: m
  259.       dwProgramState=AP_CONNECT;
    # O+ U2 x& Z8 _  w1 G/ H7 U
  260.       return TRUE;4 X) e9 h6 C9 j9 V* s; O: i+ o! X
  261.     }
    # i, o2 |( O" v3 I9 o
  262.     if(!bRestartUpdater)+ |# R8 z$ A8 E% O1 U# S4 F
  263.     {& q( d8 B, K( R( u! v& C
  264.       int iCurrSize,iFileSize;. C& E9 u- s( G- H' X. q
  265.       iCurrSize=0;
    - f  {) M2 r; P, S$ K7 ~
  266.       iFileSize=UpdateList2.size();
    2 e* U% f7 T0 a* r/ s$ b
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    5 b0 c3 g. B# D, K
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    : o1 b" \& k" T0 ]
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");7 p- i; o& i3 T7 F9 w4 `& o8 ^
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; J% x) L; p! S/ c* x1 s' d6 ]
  271.       Fclearf(".\\update.dat");
    : L/ z* f0 x. f. _) n" p# E' O2 A
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    " U! X% _8 Q) H% [" c* a/ j- i) S
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 F: m  K6 `4 K* R& x. D
  274.       {  G" {; M8 u5 N3 ~3 H7 G+ i
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())" B. L2 K4 z, p7 D& I: [8 z
  276.         {
    % ^" }+ P6 ]# {1 b
  277.           file=(*p).second;
    ( T( e! ]% O" g: L% Z
  278.           sprintf(filename,"(%s)",file->file);% R9 {$ L5 R2 |9 s% L- B
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% _8 U  X; p. P8 X
  280.           iCurrSize++;
    3 Z; x& \5 H% U5 o# i9 B
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    * z% y  Q% r0 @) W# r7 e
  282.         }9 L3 a1 |, _! H7 _8 N/ _
  283.       }+ g2 R9 @1 }; Y. y8 P" e/ T0 C+ w
  284.       unlink(".\\update.txt");
    ; v6 o& D  |: z5 D
  285.       unlink(".\\update.tmp");
    8 i1 n5 l' `5 |
  286.       Fclearf(".\\checkversion.dat");
    - o( g. N4 k- N, B" r+ k
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    * Y3 t7 p6 X: l7 J. h$ N, S  v
  288.       if(UpdateLocal.size())" }7 `1 v# P  O* r/ k& p- Q
  289.       {6 G& x2 y7 N$ s" S& O
  290.         UpdateLocal.clear();) F  f6 I$ d- w/ ?
  291.       }
    9 q9 i7 Z+ j( m3 b
  292.       if(UpdateFile3.size())
    # |; l7 r& D6 R; O# D+ q5 K3 K3 L
  293.       {
    3 D( I, @' R2 i2 X
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 m' \4 r( [! U! @) B: Q# {
  295.         {, z3 l9 t7 i8 U+ ^* n
  296.           file=(*p).second;& l! `, F% }5 [
  297.           free(file);
    / B# J: J9 \& d& R) M
  298.         }+ c5 h, x/ \4 E9 D3 r! w( d
  299.         UpdateFile3.clear();
    / h6 K! `/ |2 H: j
  300.         UpdateList3.clear();0 r0 N1 Z5 @; `5 ]! S+ A
  301.       }
    % u9 J  [' N5 }  a! X9 ^" h
  302.       if(UpdateFile2.size())6 i+ N4 `; s. f( d: j* ^
  303.       {* l7 [- m+ C( w$ _3 |
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 K7 F6 H% X/ W' x7 k
  305.         {
    1 ?, }- ]" Y1 Q, o- N' Y
  306.           file=(*p).second;
    . Y2 J* n. z% k0 p' n+ f
  307.           free(file);
    1 n, D6 E* i5 ?- W. r" f  o
  308.         }: ~2 i+ I8 z0 w' Y- }8 k0 n" r& p  R
  309.         UpdateFile2.clear();
    % c/ v! [' m! k. f9 `
  310.         UpdateList2.clear();3 b( F( q( s# H/ a; Y5 z
  311.       }) T; X0 c0 x/ c
  312.       if(UpdateFile1.size())# s# W! l: h! G
  313.       {: W: I6 O! u! I( V
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# @( O: U" ^2 t5 ?
  315.         {2 y$ U2 m. y7 I+ [! N4 P
  316.           file=(*p).second;5 I) I) `, f3 ^  d5 X; K3 W
  317.           free(file);4 L( C3 N' J& ]: g' n4 Y
  318.         }
    9 l  X, f" g, z* K
  319.         UpdateFile1.clear();% p% R1 }4 q$ H+ T  ]0 J# A
  320.         UpdateList1.clear();0 W" l0 W- V# \( s3 N; ^; d8 e3 e
  321.       }# ]  B. @2 {  n# T: p0 e
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    9 x3 ]4 x* K5 n, s: ]  o& {
  323.     }
    % _6 v. @6 h& ^* Z
  324.   }
    & C* s0 I9 s: T: N, |! e/ ?
  325.   return FALSE;6 A9 m' L% B. ^: U  g
  326. }9 f' Q: g1 m) {) l4 q9 J. I' _: P! J

  327. 2 K9 x, k% \; F- ?2 ]4 L  t3 q
  328. void CRevAppApp::ClearAll(void)% {) T" Y9 P; P" g( c
  329. {8 n/ ~2 C+ K( ^4 F! f
  330.   LPUPDATEFILE file;  T: J3 G# N# X, E; E  C& v; H
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    & l  r' I* J, L1 @& v

  332. , a+ V2 ^) h' W5 w8 V7 p- t- t
  333.   if(UpdateLocal.size())
    3 n5 ~. @7 g- a# ]$ t7 ]% h
  334.   {
    6 S; x& _4 Q6 a! s$ e8 d$ f
  335.     UpdateLocal.clear();
    & r! U, l: m% P8 Y
  336.   }
    ! }# C' k% {+ T# w! e6 v# B; b
  337.   if(UpdateFile3.size())5 ~4 q  n2 Q9 Z! R& k8 N$ q3 a6 M
  338.   {# x! |  z- ^3 Q, k. D
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 Q- n- R" i% w" u' H3 t! X% F5 }
  340.     {
    2 C1 I6 f% ~3 q: n3 l9 k
  341.       file=(*p).second;8 M- i1 f- s) U: G; g* ^& v; z
  342.       free(file);
    ) ^' n* W0 z) [; w' m
  343.     }
    # {( J. e1 u7 w! z& B; p
  344.     UpdateFile3.clear();
    ! Y+ ^1 ], N: B( c% Q$ V* A
  345.     UpdateList3.clear();1 p! A+ v0 S* Q
  346.   }$ O+ V+ b. n3 e0 l: b- J* j* @
  347.   if(UpdateFile2.size())  x7 Q- \+ h# X9 N, H2 t) ~& h
  348.   {
    + i8 g+ a( J- C" ^
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & t+ `1 z( l2 D6 s' E# n3 V
  350.     {
    " T+ f1 l  G. x2 ]7 p* c. ]
  351.       file=(*p).second;* u4 |2 X7 {) n' g) E+ G
  352.       free(file);/ U; p9 G7 {( _
  353.     }0 ~8 Z: d* h1 W# G6 W/ n7 `0 t6 H
  354.     UpdateFile2.clear();
    ) I: B5 D7 |: n  l
  355.     UpdateList2.clear();! I: z5 C6 v- W5 [' D9 @
  356.   }2 k8 ?, V8 W# s& J
  357.   if(UpdateFile1.size())8 O- U4 X% C/ P) F
  358.   {3 O* r9 W8 Q' m1 T' L  r
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( L9 U$ g5 W1 q# [
  360.     {
    + {+ x- J3 E" P  F( k8 w
  361.       file=(*p).second;# P0 D( o7 V8 G% ]/ t0 s; m
  362.       free(file);
    6 Y9 ]; l% E- ]( P4 N2 b
  363.     }8 p# B; e/ O+ d5 |
  364.     UpdateFile1.clear();4 e& n4 ~0 H* k1 U
  365.     UpdateList1.clear();* s1 C5 U; r# R. k; @0 I
  366.   }! r4 b; W7 W* l* [* G. P
  367. }  
    & \/ j- T' f; O8 a3 G2 D4 ?7 `' Z
  368.   
    # V9 T; [  w3 o4 W2 p+ R& u
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    8 ]1 x( j3 \5 o2 d( A
  370. {
    : b$ }) C( |; {! `6 ?: d9 ~! b' Q
  371.   int c;
    6 F  c- L8 k3 K* f
  372.   LPUPDATEFILE file1,file2;
    : F% {5 t" U" E! I5 \: ^1 D; d
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 Z$ ^) V/ m; Q
  374.   std::list<CString>::iterator l;
    3 w& V( i6 e0 I9 B
  375. 0 N) w4 ~! e7 l5 C
  376.   UpdateLocal.clear();
    8 o' C7 t* ]+ J5 C  Y* S" N2 S
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    # U; i; t; I; @/ E$ r! N
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);4 C1 i+ [2 Q1 |) i
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    * q+ z* ~7 d8 c! J
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);9 x3 `& o% U$ Q7 I( B" N5 P
  381.   if(UpdateFile3.size())) t" O' a% r; ]
  382.   {: L4 s; ?3 m3 i
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    , }2 A6 A8 i- j0 X8 f) k! T
  384.     {
    " W9 F1 g8 P6 T$ }4 |! _( V6 \8 ^. z7 i
  385.       file2=(LPUPDATEFILE)(*i).second;# t4 q4 A4 |7 i4 W" h. \
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# T4 }- b4 N7 w6 D4 A' w, @
  387.       {  t+ ?/ d+ `8 T2 e+ i; T9 v
  388.         file1=(LPUPDATEFILE)(*p).second;
    ! p. P0 J+ M0 l2 z
  389.         file1->vers=file2->vers;
    + x4 C! C* y% ]/ p
  390.       }& q% E' ]( a: G# i+ h
  391.       else" w4 N% d; N. n
  392.       {
    . @: f; I5 c2 l( I' P, h7 V5 H
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 Y; O) K) }; Y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( f/ ?2 w" B7 H0 N4 ~: [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    " F+ V0 ~6 w" E! j9 }$ c2 w
  396.       }
    1 k+ Y( x& |/ O. V9 s5 A6 [
  397.     }
    , `( R. k6 k1 ]. Y
  398.   }' b4 ^/ R7 M, R# X9 O
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 O  G! y9 d8 O- l
  400.   {: S/ b6 P" r5 X+ M& U4 [
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()): t8 _2 m( Y' Y- E
  402.     {
    0 Q: K4 Y$ V( |+ k, z& m+ W" b
  403.       file2=(LPUPDATEFILE)(*i).second;
    ; ~) Q1 O1 Y3 d  `3 c, `9 ^6 K
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  s4 B* J: U$ l. s& `
  405.       {
    ! s7 r$ M8 M2 {7 L8 Y
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 x3 f3 V5 Z" K/ e( Z
  407.         if(file1->vers!=file2->vers)
    ) P5 g2 P  k3 x  ^& y
  408.         {9 J* K- t* a* C7 j
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ; ]. w; C1 Q' R4 `
  410.           c++;& T  \! n% V4 d4 \  E0 Z
  411.         }$ {3 `8 F- x" [' @  f% G/ O
  412.       }
    " Q3 d2 C+ B2 _0 j4 _
  413.       else
    8 ~6 n0 n0 W9 `, H) o# v) h2 M
  414.       {8 \( [8 P* T2 s8 M# u7 P6 K3 S
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( K# i$ W3 g, f7 u, ^
  416.         c++;
    . D& E6 x" U; o; \2 |! s
  417.       }
    2 z% K& y7 i# k) p
  418.     }
    / G! Z3 G: |$ u' d$ x- D7 p/ B* L
  419.   }
    ; X: H" q  ?1 a) O) K4 m: P
  420.   unlink(".\\DownLoad\\update.txt");6 P, `! {5 D. k# m! b: D
  421.   if(UpdateLocal.size()) return TRUE;8 T: L# C0 E. T  }+ R% w
  422.   else                   return FALSE;
    , M9 B" _! o. c( e
  423. }& e: D7 J; [& |9 j5 r- K* r! O+ F

  424. + E, u) I0 m, D. s/ Z: l
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"1 `; u' |$ v1 f: U8 U
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"  D' S; ^) \1 l  Z- S: `: a" _- n

  427. - l" D4 j! A4 ?2 T/ m0 w: r
  428. . F1 `/ \8 D. r" N2 p, ^

  429. 9 V$ H: _  r0 d0 B
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    : i0 \, l* ^6 N  E
  431. {: g% {8 P7 d4 C! r8 R
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ' G2 ~( C& K  R! P, i8 @+ [
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 M# Q3 g1 O3 \# C+ K8 ^4 ^
  434.   {( x# _9 p9 {$ N1 M+ @' g  h
  435.     char szLanguage[50];  l5 O. h* n: [, ]5 e
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' m/ m$ ^. t8 h5 @  a8 [
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# R6 Y. x0 P9 u% w/ S1 \
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& \7 o4 d1 @7 S" H
  439.     else                                   m_iLanguage=ENGLISH;2 Y0 T8 n) J4 d$ d: i8 O
  440.     char szRegister[100];& B. \8 b% u) ^+ x, D; @
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    * S' D8 ^# f9 M4 ]
  442.     strRegsName=szRegister;
    ( e) \+ r) W- H8 C; B
  443.     char szPatchURL[100];$ {  R' Y8 K0 D  g4 q7 T% |
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 Z" }" ~7 G! a% G
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 a3 i: {1 y0 N: V& D9 \
  446.   }8 K% P+ G- ]. W# m2 }. y. }
  447.   else6 L# l- P& j& ^9 G
  448.   {4 B% o( D4 c$ W% a$ M
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% ^5 _0 J/ I4 ?1 Q
  450.     strRegsName=DEFAULT_REG_URL;5 _& f8 y' x" C% u* j5 H
  451.   }4 G1 D" q, u6 A
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    " W% c- e( V4 ?
  453.   {
    ! m' |* R  m/ W" ^( ^2 G
  454.     char szIP[50];9 T( _4 b! V. h
  455.     char szDIR[300];" x  Q) _9 e: n7 O) `
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ( }; S( e3 V: ]. d
  457.     {
    # }/ V: ^$ U/ s& ^2 t' e* b, n1 B+ D
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      W  q3 _) e& ?7 z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    : M" U1 }# c% U( M% F7 R6 D
  460.       strHostName=szIP;# D, ]) `% I1 {  B9 R% t
  461.       strHostPath.Format("/%s",szDIR);
    ! A$ ?3 I3 G+ S; M' T
  462.     }/ ]0 k6 h! O8 S- C7 g3 }
  463.     else; x, C: ~* _1 |
  464.     {
    , |* _; Z( u0 B: q3 f, |
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . e- Q7 N0 G7 D5 q# ^
  466.       {7 R, Y4 R8 o& M& y- o( p
  467.         char szLanguage[50];) I5 U# Y: l! f0 ~! s" ]8 l
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ g. v$ |5 Q* z: i. o8 Y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 _; {4 u6 L$ G* O9 k7 c
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ y+ p5 w7 B2 C+ r. c( Y7 b2 }
  471.         else                                   m_iLanguage=ENGLISH;% u( _7 N& \. q$ C) @: i
  472.         char szRegister[100];
    + M$ j3 z8 `6 \: Z7 T' `9 \, B, S7 X
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , _; @( z! @" ?5 [' H1 f
  474.         strRegsName=szRegister;4 m+ w( h: G+ H0 s4 p
  475.         char szPatchURL[100];
    8 {5 Q5 _4 `% L& b7 ~& l
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 I1 W; |- m7 `4 d2 h. G) w
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ Z  M) I$ S, n0 g: z2 k' f8 I; p
  478.       }# ?2 s2 J) @% W0 b" R
  479.       else
    . j" ?; R5 c/ p' U
  480.       {0 ]7 C7 f' q9 n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; n8 v4 M+ ?: S0 t
  482.         strRegsName=DEFAULT_REG_URL;# Y9 |# D, n9 f# V% j
  483.       }+ J- r5 `0 C/ s6 g# r  {) K# t" s8 k
  484.     }
    ; g' s* {8 D6 [- `% q
  485.   }5 {; o( A6 V3 P" i0 E
  486.   return true;
    ! K  r) e0 P3 m. `$ x# }8 c0 f6 @
  487. }
    ' v/ z: ~) q4 O3 F0 D

  488. 7 p- G& p+ @! ~: K( u
  489. #include ".\ZLib\unzip.h") P- u. E; p, O
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( o4 o9 _# ]( T1 c0 E5 A
  491. /////////////////////////////////////////////////////////////////////////////
    6 M# C& r* I' F# Y! H9 g
  492. // CRevAppApp initialization
    5 Z1 j0 Q' |! z# `

  493. % C& O) N4 n3 P; ]
  494. BOOL CRevAppApp::InitInstance()
    5 y4 m. g0 b. p7 L( h5 D1 b
  495. {
    ( Z% |% E! L2 N  M9 q, R: ^) F
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];1 ?) B9 r: D7 n0 L) N# Q. I
  497. & e! C8 |4 h" `5 p5 S5 Q
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);  T: ^4 M! T$ ^
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))7 j; y- T$ f8 v- N' }
  500.   {+ i5 |) @' s+ F: d. C
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    3 w3 _: o& q( U9 @/ G0 u
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; i# [6 l" T1 s" u9 z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    8 n: T# V  X' M0 L3 v. w
  504.     {
    9 E- V' V# p5 W$ [6 O
  505.       strcpy(szPath,szPathTarget);
    ! e+ u% P- j) b4 e# \
  506.       SetCurrentDirectory(szPath);
    6 K" w8 k" n  }* K8 c) ]
  507.     }' M( e7 D5 A3 u; t/ W
  508.   }
    / n* Y/ s. n) L, ]7 ^
  509. #ifdef _DEBUG
    7 b+ Y1 m! ?2 F" H8 R& z4 t
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)): k5 @2 Q/ B' C; K/ ?+ ?. ]
  511. #else1 k8 q' f: Z) v  s- S
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- `7 D5 A/ _6 l# @' a9 |( {9 E: O) \
  513. #endif
    ) U0 s6 C* p' [
  514.   {
      T( V; Z. n0 a  X) M; z  F% a
  515.     char tempFileName[MAX_PATH];
    * t+ e: x% O; ~& C
  516.     strcpy(tempFileName,szPathSource);% c) H+ j  H( K7 \$ E$ v
  517.     tempFileName[strlen(szPathSource)-12]=0;) K/ f9 t2 J* [
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    5 e* }( z+ s4 D3 p
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ( Y8 t% ?3 i4 k  R) r% T
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);* L, G$ q) T4 m3 U/ `& X
  521.     return TRUE;
    2 ^/ o; ^; U5 O6 [0 }& w. [
  522.   }% R7 [" ^4 P9 u( Y
  523.   // Nuke 0118: Delete run.exe9 U/ ]1 [) ]2 z5 P
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    + l7 L. L0 H+ S/ c5 ]- z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");% [" }3 k" |% a7 U) ~% R
  526.   if(!ReadCfgFile("Config.ini"))
    + q6 a3 p3 z$ v: }: {3 H' m
  527.   {
    4 E8 {* [. u5 b! Z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 v9 e. ~6 |; H4 _2 L3 U* `5 e
  529.     return TRUE;
    & v) q+ u, o: s& [* ^# z3 T
  530.   }
    / k2 I* |# R8 G/ ~& z' Z8 L
  531.   HANDLE mutex;
    7 M0 S8 \9 @/ w4 b3 Y3 ~0 h9 P
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    $ [' E2 p2 e; s8 K+ l, G! N
  533.   {
    ' h8 I% C$ w3 w- j
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    5 I9 m: P/ Z6 J' X
  535.     {
    3 m% O! i, s3 ]- b1 y' i
  536.       CloseHandle(mutex);' k/ Z! x  A( [# E1 t
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    6 J; |$ \4 D: |  h
  538.       return TRUE;
    8 o' }& ]( R8 y# j6 t; @
  539.     }
    ! {+ q9 Q' m5 }
  540.   }  ! G3 m" L. n$ s+ ]: I4 J; R$ ^
  541.   CloseHandle(mutex);
    8 S4 ?# q  ~5 M/ D; W9 O6 ~7 z2 r
  542. 6 u* ~7 _: \2 `9 D4 O) e9 L
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    5 @+ z1 U8 o+ [: c5 [1 a% n
  544. ! M4 Q" {3 g8 w
  545.         AfxEnableControlContainer();
    * L# p4 }0 |$ s4 v9 x) b# i' ^
  546. / z! [; `1 s  S( T, H) X5 [1 f! e$ h
  547.   bCanUpdate=FALSE;
    5 h: h% D3 b+ M- P
  548.   dwStartUpSteps=1;# s# q1 |) D8 X5 O
  549.   dwProgramState=AP_NOTHING;3 Y# F  _8 j, x" N% I

  550. 3 x1 G" x1 ~- w2 n4 _; P
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);  c. H& R$ I' [4 R/ i' R

  552. % U$ f7 a2 B2 S* H8 i
  553.         // Standard initialization
    : M! E; Z' K  w# x* I
  554.         // If you are not using these features and wish to reduce the size
    * O# C. e! R0 O  M# ^/ H
  555.         //  of your final executable, you should remove from the following
    & K9 X. Z! W8 Z' j" f9 W: |+ l
  556.         //  the specific initialization routines you do not need.$ p- z$ f# S. U1 }$ t) m9 g5 W
  557. ! o: P7 ?; F  Q1 R0 E0 \  H
  558. #ifdef _AFXDLL
    ' k. Y9 q3 O5 K5 r0 s9 e
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    9 i1 C* i8 T! p" r4 u9 L) f- ~
  560. #else% ]# g; \$ `# S, N* }: E. e
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically% P+ b, E6 G  g' Y
  562. #endif. {) K( Q8 R# ?
  563. 1 n7 o$ w* v, _" f! o0 w) [
  564.   dlg=new CRevAppDlg;& V) ?$ a: Z. [
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    " }4 A5 G& A6 K3 e) S' O; h
  566.   dlg->ShowWindow(SW_SHOWNORMAL);0 E' D; p; X  U: V" W. e- y
  567.   m_pMainWnd=dlg;2 r$ a: H4 K$ b, Q
  568. 7 {, v- `- w( |1 \2 N, x) n
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    # t! T+ m$ a5 e/ g

  570. $ z. q6 \0 t+ t) P& v% O# V
  571. //  GdiplusStartupInput gdiplusStartupInput;) W0 @% D2 H7 x- s! \
  572. //  ULONG_PTR gdiplusToken;
    : e. }$ w8 X, \" V. [9 c' ^
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ' M9 ]% n. r0 m% c% ?7 C
  574. % ]( e- J/ b" u* F# M  o
  575. //        CRevAppDlg dlg;
    + N, r' {) ]' D+ O
  576. //        int nResponse = dlg.DoModal();. g: ^, g4 K- D- ?
  577. //        if (nResponse == IDOK)
    ) B- H4 L, z. ]. y- x
  578. //        {* _% G. y  o3 W: G% S
  579. //                // TODO: Place code here to handle when the dialog is6 ~$ D- j. Q, B  ^% k- A# ]
  580. //                //  dismissed with OK; ]. f1 T/ D2 p2 K0 L3 B1 k. u! g
  581. //        }
    ! c  l; q) O& N1 a1 p4 j" d
  582. //        else if (nResponse == IDCANCEL)# g8 f; y" ]  o+ W) f7 T
  583. //        {  J. [3 v/ ^# k) u
  584. //                // TODO: Place code here to handle when the dialog is
      M# V4 `" u. h2 f3 @+ E
  585. //                //  dismissed with Cancel
    ; Y4 l  t) ?7 ]. x) k
  586. //        }( u; h% B3 q3 y: x2 u( @3 O' h
  587. : G- D+ k* N5 f% X
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    % z3 I% [! W* ^8 w
  589.         //  application, rather than start the application's message pump.
    1 S" {3 M( X) Y: a, B7 _; h5 T+ K- r
  590.         return TRUE;0 l' ~! H6 V0 C
  591. }
    ' p% t; F, Q  w, t5 |8 U

  592. 9 O8 Y" Y- f9 A
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    & R8 L1 u8 U5 f& ~
  594. {
    * e5 m* p3 w" R' H* Y5 u: a
  595.   int i;5 ?6 O& K0 y8 Y' L* ?
  596.   char *szRet;" R: T7 N# A% \' e1 M

  597. 8 z% `; }& K  c5 m
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    6 M6 f- Y9 x% p8 L/ c6 q5 U, w( u/ {, `
  599.   if(sztoken)
    4 o; Z2 g- `: z0 X% {
  600.   {6 V1 \9 W# ^  C8 l* g
  601.     szRet=&sztoken[itoken];, x8 H6 U) b5 f' i( H9 ^; b1 z
  602.     while(sztoken[itoken]); F# E, B8 }! I( o
  603.     {
    / _2 s# L& c0 h# i5 j* q
  604.       for(i=0;i<(int)strlen(token);i++)* j1 ^* n4 r% G7 w8 h3 z
  605.       {
    9 x3 d3 j: c+ u9 c; J" @2 R
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])% }- e" `" k/ n7 ?* t
  607.         {1 [- }9 M$ U) W2 B, G9 G9 g% N# l' [
  608.           sztoken[itoken++]=0;
    7 N( M2 k, T2 }+ w2 G
  609.           sztoken[itoken++]=0;' c4 N0 E0 H& l
  610.           return szRet;( w& n% c, L/ a" U
  611.         }- w4 `% z7 ?: b0 y4 u/ s$ e! C
  612.       }* c$ H: o% u; P6 n7 B" `
  613.       itoken++;4 U% I$ V. K9 q) U$ k! D$ U  \
  614.     }
    4 A4 D/ g/ a: @: M' |
  615.   }
    3 j, @. |- E& C' \0 G9 \- ?
  616.   return NULL;
    / S- ]7 D! M% p; r9 l& N7 k
  617. }6 U  h+ m- Z0 h  e

  618. 7 D  i( p, C* h' l
  619. void ProcessProc(long Total,long Current)5 g/ @, Y. S) h4 G6 S( c6 Z% z
  620. {
    & V! C/ T6 H2 ^: y# k) \) `; [6 G/ q  _
  621.         MSG msg;. z# O. ^8 k" c/ e* \
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ d6 @7 ~! Q9 r  ~+ }4 ^# J5 ~
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));2 `1 ^& r% j/ _, \
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    4 U! \* J- u9 @% _
  625.         {
    " ^7 J5 x& Q: _9 A+ _
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ! L; ?1 ?$ C0 e& j, v
  627.                 {, c0 t) V+ ~# ]% W! M$ L
  628.                         return;
    # }" p7 ~( w0 X9 B
  629.                 }+ \  r% V" H& f) ^6 x
  630.                 TranslateMessage(&msg);4 p7 ^1 v) z) k" K+ G# T
  631.                 DispatchMessage(&msg);
    % P4 Y( \; P1 N5 v7 E7 _: D" ]
  632.         }        # X/ \1 {9 Q9 N1 Z( f  L
  633. }
    & K* d! T" d  d5 Q2 U7 J. Z

  634. " K7 V6 v) J: x1 V( @
  635. BOOL bFirstChar=TRUE;
    3 G; B" T! U. X# p, w( H7 }0 _8 ~
  636. 4 N% Z: c7 ?  {2 x
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    / [( h# P. t  {# }- L# [: R( c8 T
  638. {/ d5 \8 ~, J7 S
  639.         // TODO: Add your specialized code here and/or call the base class: j; Z8 F% |1 c5 N1 t9 b
  640.   switch(dwProgramState)' X0 X; W& L3 |- b
  641.   {
    1 y/ _8 y# d' _5 s6 `5 S4 |* G
  642.   case AP_NOTHING:
    - }, s2 |, s5 k2 b
  643.     switch(dwStartUpSteps): P# p6 z; c; f' L' [# g
  644.     {6 `- ~5 ?' f, |, \! H+ S8 w
  645.     case 1:& A/ \% r+ A- p4 b
  646.       {5 i! K# w' s$ m
  647.         int i;
    - k% _1 [  @1 u6 [. K
  648.         CDC *pCDC=dlg->GetDC();
    7 O2 k& s) o9 M8 d: Q  v
  649.         HDC hdcwnd=pCDC->m_hDC;7 O; L8 y1 R% o8 G- h
  650. //        Graphics graphics(hdcwnd);
    2 d; M  Z& u2 I* A
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");6 R, W2 s+ V/ I; e& M/ A7 U0 A# q
  652. //        INT iWidth=bitmap.GetWidth();3 F( u4 |9 Q3 n# O" V( v/ |
  653. //        INT iHeight=bitmap.GetHeight();8 w- X# O: P4 a' o9 D0 b4 e
  654. //        Color color,colorTemp;
    0 i6 V  b9 A9 J: }+ b& F3 r9 k
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)' t1 }6 s' k8 `8 j) k7 l
  656. //        {& r( n/ G- j; N2 r- w9 j& J
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)  y: Q& l- _  G# \8 u" e
  658. //          {
    ! M) F0 i( `2 x# w
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ( }3 h) a1 _6 m4 N" a  X
  660. //            colorTemp.SetValue(color.MakeARGB(
      v, S8 r5 B; o7 o+ C; r0 c8 e
  661. //              (BYTE)(255*iColumn/iWidth),
    " c! {5 S- [; R% P# I( h
  662. //              color.GetRed(),' f. U+ o& {; L" W
  663. //              color.GetGreen(),) @6 t# q, x/ v2 A
  664. //              color.GetBlue()));5 q) t6 t* C$ o0 q% f( f8 n
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);: C4 h; J. e3 J, U1 ]5 z: [) z
  666. //          }
    1 V2 }- Z) _& x
  667. //        }
    $ m/ K1 R/ @0 o+ P; c
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    1 }& [. Q3 W+ R' Y9 I
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 A$ `- i( l- K
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    3 F% E4 }8 V: f: O
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( R# W, c* B$ R0 L) C
  672.         for(i=0;i<240;i+=8). ^$ r. N; ~1 r5 v6 H" h
  673.         {9 P9 D: ?2 V5 b; V' L7 i$ u
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & C+ B7 p) @4 u$ {9 ]. P
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% o' y, T: k, |$ G$ f+ P
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; X) U- q7 y* w7 C
  677.           Sleep(33);
    7 i0 _2 W) S& f3 F: `) {$ O
  678.         }6 r& F5 y/ p0 b# `  K
  679.         Sleep(1000);
    . Q5 d) M) s7 z8 @
  680.         for(i=240;i>0;i-=8)/ y# _+ [! a/ b& j3 ^" D5 L& w
  681.         {
    * W3 N& p) e6 C6 J& o! T: u
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; W, {+ r9 E& z2 M( J
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 _2 M0 b: f: Q3 {* d& G, Q6 I
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" j/ u9 ?( P( \( \7 ~# m- t! l7 I* {
  685.           Sleep(33);
    , a3 X8 S- E- E4 m& B# i9 g4 {( u' J
  686.         }0 G: E# r) M/ o0 J
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 x' k& t( g, z) w
  688.         dlg->ReleaseDC(pCDC);/ m+ {9 A) }4 Y) u1 M( ^$ L
  689.         DeleteDC(hdctar);9 j# j. t4 Z4 u2 o, j
  690.         DeleteDC(hdcsrc);
    ( L( [. V2 Z  U4 o4 ]5 ?
  691.         DeleteDC(hdcorg);
    : R4 f& |4 `; z. @
  692.       }4 h; j+ y1 C2 ]
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 \+ ]0 n" u0 d5 G: Z. s8 r
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");9 w; _$ U/ `9 U% z& H/ k8 w& Y
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    1 W/ E2 J- J$ z9 f0 f  W* C1 f
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");% E$ ~. R- |/ A$ A0 T/ q) M
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  ^# z) V% o: O
  698.       if(!Dn.Connected())
    6 |& X+ T% m  [2 R. o, \7 g3 E* H
  699.       {7 ^8 e2 ]( _3 p" z
  700.         dwTotalFiles=1;' `: h+ J. a& f3 T3 M2 B( Y9 O6 M
  701.         dwDownLoaded=0;, @$ g6 I. T. Z/ m. W  d# X
  702.         bSilentStep=TRUE;) _; u$ h" a/ e) j; c' ^
  703.         bCompressed=FALSE;) o9 |3 T/ l! i* S
  704.         strExtLocal.Empty();+ _4 ~; N/ p, e' Y3 \
  705.         strFullName="readme.txt";
    ) H% B+ R% E! Y8 ^) _. T0 m
  706.         dwProgramState=AP_CONNECT;
    7 ]. V0 \5 m$ a8 i  Q# C( A
  707.       }2 f% l+ @0 {9 t# ^  P& @
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    + v* K% S" A9 ?, w; Y
  709.       dwStartUpSteps=2;* g6 T, S, c" r
  710.       break;" }3 L2 T( |. @" O
  711.     case 2:/ W' h' l( L# a! }  ]
  712.       {( Y4 p4 Z3 m$ o6 e4 \
  713.         int iEOF;
    ' R: E% w! r" d2 X# y& p
  714.         FILE *fp;
    $ j& A, U1 W3 x2 C  |5 }
  715.         char szString[512];
    ; r+ [4 Y  _) R/ J5 o3 A- c" h! M
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 T% ^' X% c% ]  I, T
  717.         if(fp)) Q( a- C. |4 x% V& O
  718.         {( b# d2 h1 i, E! r
  719.           do& b' x& k5 J, C8 ~: x( D) f
  720.           {
      Y3 t5 k8 B9 B+ G/ k
  721.             iEOF=fscanf(fp,"%s",szString);7 r1 H* G7 W- f+ Q
  722.             if(strlen(szString))
    - O' f& ?$ e7 _5 D8 Z+ C
  723.             {
    1 E2 ], W) V1 p" |3 }0 i
  724.               if(bFirstChar)& Q( \0 K( M( P' E
  725.               {
    . s+ y6 l2 l- t- l6 ?( e: y8 ~! C
  726.                 bFirstChar=FALSE;
    0 ~0 S, ~! ^1 t) v* ~
  727.                 bConnectIsBig5=FALSE;
    4 M% l, C& m* s2 b7 D
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;& Q) m2 z9 o7 e! {" L  q4 j
  729.               }
    / q5 H: w/ N3 T+ A) q# D- g
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    1 }" C. N9 V: Z3 v) ?/ Q$ _( W
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));7 \- W( i3 `4 \1 D. F2 s! d0 o5 w
  732.               dlg->m_ListText.AddString(szString);% D( e, d# h* a( h0 Y) L
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; Y$ L: `" Y8 I. k* p0 @- y( B
  734.               *szString=0;. f& H/ H& v1 b/ ~
  735.             }
    3 n+ L9 ]) m" c' w- u) o
  736.           } while(iEOF!=EOF);) t# N8 q8 S9 g* x& @2 M; j+ O
  737.           fclose(fp);
    2 b' I  P; b! r9 I0 b+ ]$ O
  738.           unlink(".\\DownLoad\\readme.txt");
    ; H& p8 z8 n, r" g2 ]
  739.           dwStartUpSteps=3;8 `5 P. x/ O8 }4 L5 t
  740.         }
    0 f7 N# n) P! D6 C
  741.       }6 s2 g6 C! I: ~- N! Q
  742.       break;
    ' L  m. `" b( F, I7 D* e
  743.     case 3:* ]( I9 m. _% u7 `4 M
  744.       if(!Dn.Connected())
    4 v6 q4 t+ r1 G# _/ Y# G
  745.       {: T" x5 e# P# J5 {) b/ c6 ]5 h3 Q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ! C/ v2 Z3 i1 i% G6 ]: G$ C" N4 F
  747.         dwTotalFiles=1;
    2 N7 x& N4 f" Y5 C, ?# o6 j
  748.         dwDownLoaded=0;- [; G5 F0 B9 V5 u0 E' l0 b% }
  749.         bSilentStep=TRUE;
    8 g4 z/ S3 T" p1 _5 ^
  750.         bCompressed=FALSE;
      [- m9 U: C2 j0 q  ]2 @  q
  751.         strExtLocal.Empty();
    4 U8 e% }  c! D" o5 A
  752.         strFullName="checkversion.txt";
    9 G8 T0 w1 B4 L5 _. o# O
  753.         dwProgramState=AP_CONNECT;6 X- ^4 m& A8 \3 n1 X% u' R& U
  754.       }6 X0 J8 S9 Z, q3 ?; A
  755.       dwStartUpSteps=4;
    : `4 }2 E2 m8 }2 `
  756.       break;
    , P# W5 g, m3 M, \
  757.     case 4:2 r& n; q. _/ z3 c3 ]2 O
  758.       {
    # B3 ?" D& i5 k# t! {+ f
  759.         FILE *fp;) s) @0 S" j; }. \" j* \; P
  760.         char szString1[128];
    : C! I% j; d# v. V$ ^
  761.         char szString2[128];
    , B# N6 O4 g6 M" D( P! N
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");; P0 j) n' J2 a6 l; l0 Y/ P2 i% i
  763.         if(fp)- o( y- ~+ ^: ^3 w( v. Q
  764.         {3 k5 `) K5 _0 K2 G( e% [
  765.           fscanf(fp,"%s",szString1);
    ! R* ~: u8 T" Q$ r
  766.           fclose(fp);
    . H3 |' I! _! G2 x0 v0 O
  767.           fCheckVersion=atof(szString1);
    1 X9 m- y; @: u9 O, X, T
  768.           fp=fopen(".\\checkversion.dat","r");
    9 _5 V; a' M. X9 N4 h8 Q
  769.           if(fp)
    % a" C: h" i* q2 o
  770.           {& B. X5 z# Y7 J: k( _4 T6 G' ^$ z
  771.             fscanf(fp,"%s",szString2);
      h  C6 D: n, C4 K
  772.             fclose(fp);
    0 Y2 R9 z3 e2 e3 c/ e+ P! \
  773.             if(atof(szString1)!=atof(szString2))
    - r* ^; Y- ]! e$ [" U
  774.             {$ U8 v( R' p4 b# x% K
  775.               if(!Dn.Connected())
    $ Q& q* G! `7 P
  776.               {
    7 \0 h! _: A5 w0 n7 S' w' r
  777.                 bFirstUpdate=TRUE;8 Q- N* T7 P3 }) R
  778.                 dwTotalFiles=1;
    5 {% p8 ^7 u& ~7 h! m% R+ }7 ]
  779.                 dwDownLoaded=0;0 w+ X1 Y% D" X2 p
  780.                 bSilentStep=FALSE;' N) z1 ^0 W7 F5 C$ V3 t% @
  781.                 bCompressed=TRUE;4 ~5 ?8 s. Q3 z& Z  u- ?
  782.                 strExtLocal=".\\DownLoad\";
    4 l8 S. G8 x  ?5 v4 D. O6 u8 i( P
  783.                 strFullName="update.txt";: B. c# J$ L. ^3 M, ~: u4 U
  784.                 dwProgramState=AP_CONNECT;
    ; C) b* [# y5 y. U! p
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % ?$ ]. J& H6 w$ Q$ b
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) A! g3 q, T/ ?6 S9 t
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");! K, p$ @! A; @8 N. {
  788. 3 o7 y, [9 x, a: J  \: W; K
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - o" D" N5 M$ D5 i$ }6 o
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ; j5 h. W. L( Z+ h6 x
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    8 [9 ^  ]% K1 S# `0 @" v
  792.                 {  y( L+ ?! M) O- _, h/ r7 f- y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    * O4 n7 K6 i+ o0 F. u/ D) R
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");6 k; {. O$ `" k/ B
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");1 j2 o" s) V; t! m& X, q9 \" h
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& G; o3 r3 s  d
  797. + e1 H% X  U. G% K1 z0 e/ X  v
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + `7 U, q* g9 e9 @- A# z
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    / h' q  c; o% ?/ g9 q; q
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 x+ ^7 V' o7 \
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# c# k: F! {9 W) p( |0 ]1 f
  802.                 }: D" n3 k5 M9 T) D; J3 X
  803.                 dwStartUpSteps=5;$ V  \$ z. m7 e
  804.               }
    # R( @4 {2 a0 y9 p( p/ ~: p
  805.             }
    3 N2 r& V* v* q
  806.             else# O$ o" C3 P# [2 r7 B- v( h6 h
  807.             {
    ' P7 P2 X( m4 r& e- }2 w
  808.               unlink(".\\DownLoad\\checkversion.txt");
    8 _1 T& }0 K/ W0 a2 Q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    + z( b+ Q8 \3 `# }: l- g
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    8 O. ?- q% z. j- n$ T
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    5 b- F0 a, a2 {: O
  812. & o$ Y4 B- K) r& x' N7 j0 W
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, f# w& ]) ~* _; `
  814.               dwStartUpSteps=99;' M( g  |$ P+ d! O
  815.               bFinishUpdated=TRUE;
    # f. _+ b+ D1 X2 ]; d
  816.               bCanUpdate=TRUE;
    8 U" I6 {% O" b; I+ g
  817.             }
    / z6 ]* m% i/ T; M- o# P
  818.           }( o6 R& m5 d. `6 u% w! J) a9 @
  819.           else7 P. q7 O' a- R9 S: ~
  820.           {! s; J: y& i# S+ |) Y
  821.             if(!Dn.Connected())
    " V( Z! f% m7 M2 U. o# A
  822.             {
    " E# Y1 J3 E! W5 ~0 Q! p/ B
  823.               bFirstUpdate=TRUE;" q3 w) ]2 B7 u( L8 v
  824.               dwTotalFiles=1;
    2 B1 e; |, O; q# Y1 v; `  U
  825.               dwDownLoaded=0;
    ; t9 r( E0 l; Z1 t
  826.               bSilentStep=FALSE;
    2 R: Z4 x3 D3 V% t0 d1 n+ r
  827.               bCompressed=TRUE;& w% z9 f# X% a+ J
  828.               strExtLocal=".\\DownLoad\";8 h) R2 a! n+ A; {$ k( c3 }
  829.               strFullName="update.txt";& l  n' Q7 ?6 p1 C% ~8 y4 j2 i2 ?
  830.               dwProgramState=AP_CONNECT;& t# C$ b: J. r, v; x
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! z! B8 `2 `+ L( M+ m# T
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / D( `' ]7 Z% }4 |: l9 E
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");7 G! V  w0 x: M$ C( S/ a  y
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  G* E( u% V& N, _5 @3 E- z
  835.               unlink(".\\DownLoad\\checkversion.txt");0 j7 v: @5 v6 K# H& a
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)2 d6 l; \! Y! k' ^1 x6 t* y8 L
  837.               {) i4 d  P, F4 H1 r) e
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");! _4 I$ U1 I. j  `% @1 o3 X: M9 P
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");/ G9 j% x8 c6 f) h- L' H
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");3 y+ x! ^$ p& [6 W- R  ]9 S
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 N( a2 @+ L6 L, \; P$ ?; t
  842.                
    . m5 V4 V2 \1 I$ l! W5 z! Q7 c
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " u- Y0 {6 e3 S  d( ]
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  M% g$ O9 M# B( F: c( W8 ?
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");. g2 i6 ?: N* |4 t" Z5 ^
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ O2 U# T/ K' B( R8 {- r3 l
  847.               }' ^+ w  _$ q0 a$ z9 N3 O( i5 i
  848.               dwStartUpSteps=5;
    9 P! F4 a% j' J4 ?$ H  P+ R
  849.             }# B$ S6 O- W/ ?/ `
  850.           }
    3 V: [) F$ A4 c2 e8 v
  851.         }
    5 z( {! \5 r+ R' U. x8 ~9 i& d
  852.         else
    7 V9 e3 V( `: p
  853.         {
    % T- t2 }5 {% I% |
  854.           dwStartUpSteps=3;
    7 x3 ~: H6 O5 b" Q. z
  855.         }
    - X  k) F. h% q7 b8 A# F6 u9 ^
  856.       }
    / @2 ?5 t# _! S+ |- E( _' `$ n3 ]
  857.       break;
    # w, Q& M7 e$ f3 L; e" z
  858.     case 5:9 |6 r( q9 H* x; ]5 P$ r& D. c1 i6 @
  859.       {
    7 j3 `8 `$ n: h3 Z/ z
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)0 p* x- ]+ l7 P. f. v5 }
  861.         {
    2 |! R2 G! p4 t0 p! K# j" v
  862.           int opt_overwrite=1;! e7 C: T/ B9 C$ `
  863.           int opt_do_extract_withoutpath=0;( \8 y, T3 \- `* L, {
  864.           unzFile uf=NULL;4 o) A3 g# s4 V  j2 m2 v' X: R

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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