找回密碼
 立即注册

CSUpdate.exe源代码

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

  C, f. O! g6 r/ k4 h
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ' |' W/ Q4 I, K" Y
  2. //
    , S( s. N& P6 c# G2 }1 R
  3. ( M8 X# ]1 x( |: D  D
  4. #include "stdafx.h"$ y9 E0 `* s4 n$ r3 D" o2 V- \: [
  5. ( Q# L/ `7 a, F9 j9 C9 S% I2 ^
  6. //#define UNICODE
    6 w; a, f# `6 T# D, V* }- q5 \% \9 v
  7. //#include <gdiplus.h>' E- J/ s1 g, j/ I
  8. //using namespace Gdiplus;& M7 J/ W  l8 ?4 z2 O

  9. . s$ o2 z; N; w' F
  10. #include "RevApp.h") q8 ?1 t/ _' a5 S+ X1 q- ]
  11. #include "RevAppDlg.h"
    * N; t& a) l( y/ Z; i" N

  12. ( q/ d( v! k6 O+ A- K$ Q$ M
  13. #pragma warning(disable:4786)* Q: f, i2 M8 _3 S" ?# Y
  14. #include <map>" `1 `6 A/ m$ p3 w- Y
  15. #include <list>+ \7 Y/ C2 y# \$ {: O7 K1 m
  16. #include <direct.h>2 N% P' r# p6 P, o/ C

  17. " [/ o: e- O, D% _/ f0 h
  18. #ifdef _DEBUG
    $ \0 ^4 V- X$ w( Q8 g# p: V
  19. #define new DEBUG_NEW) Q/ ^: D5 m' Y# q- B& Q
  20. #undef THIS_FILE; t) S/ ~' P; F) G! q2 C) e+ G
  21. static char THIS_FILE[] = __FILE__;
    . J  a! V: |/ X- O& Q
  22. #endif
    ( N% w! H- _# K* z2 E
  23. #include "SkinResDef.h"
    # }% n5 O% a  k
  24. #include "ChangeBG.h"
    ! y! I) Q% z! @0 f, h+ H: K1 v
  25. #include "AFXINET.H"
    ! |* V5 ]* Y0 Y- `5 C
  26. 1 O0 S$ j& ^6 M" I
  27. #define TRADITIONAL_CHINESE 0( U& \1 M6 U. P: u8 {: O
  28. #define SIMPLIFY_CHINESE 1: y; y) \* D9 l8 Z& O: t
  29. #define ENGLISH 2
    ; x$ y! [' P3 N$ U; `! r
  30. int m_iLanguage = ENGLISH;6 z8 V* o8 L  @' s* K
  31. /////////////////////////////////////////////////////////////////////////////: k6 |3 A7 ?- M% Y1 X( N6 X
  32. // CRevAppApp
    6 M( S& k  Y! Q# }% A7 T
  33. ) J% ?  y7 B0 o6 w, y/ I& u* u
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! M* s7 p: {. S( M- N6 e
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    + z5 {$ s. X4 L" ?) x
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.$ j0 {; S1 O7 E: W/ g- I) \/ s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!7 ]; Z+ [, f$ \: C: j
  38.         //}}AFX_MSG! A, g5 d* l! Y4 U, _2 L( O
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    * _# k5 e  d8 R8 t
  40. END_MESSAGE_MAP()( x% k3 h' [/ O, ]+ R$ U4 Z+ ^: |

  41. 8 H, e7 Z* G( A! d, c
  42. /////////////////////////////////////////////////////////////////////////////
    . h& W) F' \) N
  43. // CRevAppApp construction
    4 a" P) E* C/ d0 P

  44. 6 C2 B. U. q1 n$ h7 }
  45. CRevAppApp::CRevAppApp()
    ; d" u4 j5 W) g, h$ ^2 Q" Z
  46. {
    7 R& N" F: X. H/ q
  47.         // TODO: add construction code here,
    & a) h. }% d* P/ Y
  48.         // Place all significant initialization in InitInstance
    6 b9 t, v( [* @$ N3 c
  49.   bDisplayIsBig5=FALSE;
    % P- J+ H$ A. L  _/ @2 y5 N
  50.   bRestartUpdater=FALSE;& {& X- |) W# j  R; o  e
  51.   bFinishUpdated=FALSE;: z( {" X; V5 Q
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    6 F3 k0 Q7 Y3 i0 s0 r8 L
  53.   InitChangeDataBig52GBKS();# U8 B" E. t7 Q
  54.   InitChangeDataGBKS2Big5();' M; A3 y: v1 r3 u9 \. K7 B* b! d
  55.         //4 I% T* K4 _( M' d& d
  56.         bClickRunExe = FALSE;
    . C/ \$ ^+ p+ L9 y
  57.         //
    / T: p9 s/ {% z& Q+ {
  58. }
    . M) \2 b. N/ U
  59. ( m+ V4 ^/ q9 v$ y3 C& }
  60. CRevAppApp::~CRevAppApp()
    4 E2 Y- \* W3 S1 F5 N
  61. {
    5 \  D4 v1 u. {  g
  62.         // TODO: add construction code here,6 A  J' r- X, f. ?5 |
  63.         // Place all significant initialization in InitInstance
    # `, p) f( u, G* Z1 r
  64.   EndChangeData();
    2 [% b2 t% I6 B- A
  65. }
    6 @" W9 [& C- W) Y% {8 C

  66. - m/ ^, a* a0 R) V0 a$ i
  67. /////////////////////////////////////////////////////////////////////////////
    " f/ Q9 S( c, U2 V0 m3 P. A
  68. // The one and only CRevAppApp object9 h- V% w& `& t

  69. ) @# s# T, B5 z
  70. CRevAppApp theApp;+ n5 m2 o! R1 ~% n5 `" q4 ]$ x2 h
  71. . ^- X; S* x% f# B6 M* o% T
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)3 @' K' S& G- k2 d* n- x
  73. {
    6 V2 y& T, V3 K# f% ^, i! V) f
  74.   int iEOF=0;" t8 Q1 E7 _9 |' m  }* ^
  75.   char szTempName[MAX_PATH];
    2 T* y, B( P  h# _3 l+ e8 Q0 \/ c
  76.   *szFileName=0;
    ( p7 q( f, x5 w
  77.   iEOF=fscanf(fp,"%s",szTempName);6 k* k8 Q  `# p7 S; ~7 n8 y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    / s/ n, D3 W8 a
  79.   {  E  ^) B- `, C
  80.     strcpy(szFileName,&szTempName[1]);
    4 t* n$ O' n% q% e( p  s3 @" B# r
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)2 c" ~* o: N9 O! I' h# L2 c
  82.     {- t! ]4 B, h1 }: w" t5 _! {7 f9 R3 Y" S
  83.       iEOF=fscanf(fp,"%s",szTempName);; D8 Y  ]- H$ w, z
  84.       strcat(szFileName," ");
    3 P1 R+ e* j* ?" z0 B# l0 I
  85.       strcat(szFileName,szTempName);- N2 A. Q. \- ]9 ?  M
  86.     }# n7 V: I+ T1 b) H
  87.     if(strlen(szFileName)>=1)
    9 B' ^8 {! x5 v3 f
  88.     {2 p* H" `% f5 `$ |- g
  89.       szFileName[strlen(szFileName)-1]=0;& W" ]3 x+ @- u  F% u
  90.     }  _/ U; A- n" }+ z5 o- z7 x
  91.   }0 V3 k* }# \3 w
  92.   return szFileName;
    # G) I0 e( R8 }: t1 _; U, N6 o, u
  93. }
    + S& h9 Q: |4 P6 C5 w) f

  94. 1 [& k  q( I& y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    3 v1 Y. f5 V% F6 E- P0 d9 ?
  96. {
    5 \3 h  o  h$ O6 A4 R
  97.   FILE *fp;
      n: G6 d1 y4 J2 w! _" t* a# j
  98.   char *key=NULL;
    4 U2 Y2 c0 v7 K: o; H( `
  99.   char version[MAX_PATH];
    0 W5 D7 R- i9 h8 A  q) u: V7 R1 Z
  100.   LPUPDATEFILE file,olds;
    + Q' x4 L8 q. S2 ~5 u
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ f* E: y* ?6 u& i

  102. 3 o5 a1 u0 K+ x& R  |
  103.   UpdateList.clear();
    8 d& u) _. L- g
  104.   UpdateFile.clear();
    6 U) K8 _- J' Q
  105.   if(GetFileAttributes(filename)==-1) return false;: P# x4 w( \5 h) F* @4 M
  106.   if(!(fp=fopen(filename,"r"))) return false;# Z# i% U3 K& I5 R: V+ I" C- A
  107.   fscanf(fp,"%s",version);0 A$ P0 L0 n% g: y& ~
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ; S$ Q& d- L& C
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 }* _, \! J- g7 O+ ~" {# H
  110.   {
    $ @1 R" X, D, [/ H
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 v9 T, ]# g6 k1 P
  112.     fscanf(fp,"%s",file->path);
    % J% B/ a+ D& J5 @/ c* E; U7 ~5 R
  113.     ReadFileNames(fp,file->file);
    # E' |8 l8 Z4 V9 U9 \
  114.     strcpy(file->full,".");
    , |5 ~/ K. X, {# S) g3 F
  115.     strcat(file->full,file->path);# x) h0 p& e' x3 ?9 m4 n
  116.     strcat(file->full,file->file);
    3 {$ w8 Z2 D$ p# T
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()): h9 ?9 e0 S! j$ L
  118.     {
    + M& y3 _3 _  R8 E+ J9 i" j& _, |
  119.       file->vers=(float)atof(version);
    ; A% V% N4 |: \! \
  120.       UpdateList.push_back(file->full);# E* d2 Z- p) y# S
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));& B  G0 n0 f9 V
  122.     }
    * g( |2 ~# \7 J" b9 b) @
  123.     else
    1 [3 m! }+ h! ?* S/ v7 Q4 ^7 C
  124.     {4 i0 k) Z- }) ?$ H) m$ R
  125.       olds=(*p).second;
    1 p% N2 u, j1 x1 O+ j* d
  126.       if(olds->vers<(float)atof(version))3 B1 }% q8 i% y! W, a2 j  T
  127.       {
    ' m% E/ A* @$ W% Z3 F$ q
  128.         olds->vers=(float)atof(version);
    8 \1 i6 N& W: J5 y
  129.       }. \" J- w' a$ X, @- q8 S
  130.       free(file);
    ! y8 h* y4 J9 {) E0 v/ M
  131.     }
    + Y  \, X) Z9 l1 w' i, q1 g$ O
  132.   }
    + a; B  b) @3 z- J4 @
  133.   fclose(fp);1 P$ _# t5 f2 n$ P* I
  134.   return true;
    , d/ T% e( q, f" ?! r8 @
  135. }
    & e: o+ {, M+ T7 C: \* c# u* f

  136. ' H& u& P" O! m2 s$ X, j
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    4 L3 x9 ?( }1 f8 }3 F% W
  138. {. A! F% a7 v/ {5 _
  139.   TCHAR  szFull[MAX_PATH];
    ( z+ O/ F% \8 d4 O2 c+ P# t
  140.   TCHAR *token,*inter;
    9 d& |9 ?# M3 v+ W( f
  141.   *szPath=0;
    & U% Y% _4 v  `2 _+ B, `# Z
  142.   strcpy(szFull,szFullPath);- ^9 R; Z# E$ U2 B3 c1 `& i6 q
  143.   token=strtok(szFull,"\\/");
    # `; g; m0 V; t, `, d
  144.   inter=token;! ^: k3 r8 L+ i8 u5 c3 i
  145.   while(token=strtok(NULL,"\\/"))
    3 ^# {* \% k0 D8 W0 [' Q
  146.   {
    7 U' P- E/ A5 }% w4 O3 u  U- x
  147.     strcat(szPath,inter);6 `. z/ z5 [! g! c1 B
  148.     strcat(szPath,"\");3 Q. K/ B) K1 ~! w" Y$ v
  149.     inter=token;
    & e2 R) v5 l# q7 k7 n4 B
  150.   }
    ! j! p7 f/ r0 v4 Z. Y! d6 n
  151.   return strlen(szPath);; D/ ?% ]8 O: Q  D; u" I7 `
  152. }& j$ T/ S; N0 j, e3 h

  153. 4 S- z3 _. t) T: d' F
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ) h: G* N- w7 R7 k" E3 T! o
  155. {. ]2 I1 o/ ^! q3 x+ _1 ]
  156.   DWORD attrib=GetFileAttributes(Target);: `; ?0 Q. z: |( l3 K9 y5 u
  157.   if(attrib!=-1), l5 _8 O0 F4 y. X
  158.   {
    . I7 L- [; w3 B0 f' d0 s
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))8 U+ F# ]! Z1 o2 Y
  160.     {
      N3 z8 ]9 H: u0 B6 l
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ! o. @3 K7 [: c$ `
  162.       SetFileAttributes(Target,attrib);5 F- m3 |. u% X. m
  163.     }
    ; L* C# r( t1 Z+ q) O% @
  164.   }7 G9 s- H6 Z5 w, }
  165.   CopyFile(Source,Target,Erase);+ E/ _6 z7 _4 m. w: g& z
  166. }+ O, M% j7 o; _3 n0 i

  167. : g0 c7 l: {1 _; F
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)* _. q9 c3 u; z& Y4 K. h
  169. {
    % k. R' N9 n9 A. m
  170.      FILE *fp;
    ( v9 E8 s6 `, i/ g. s1 W
  171.      char  szBuffer[8192];
    6 W$ i! [# g0 S, h6 k" \
  172.   va_list  argptr;; L1 |, k, c" x6 o1 U
  173. + K/ R# @0 ~/ n3 _5 y
  174.         va_start(argptr,message);
    3 p0 P; H+ o  t0 G: o  I
  175.         vsprintf(szBuffer,message,argptr);
    ! W$ S. ]5 z1 E0 {" Q) p
  176.         va_end(argptr);
    ) \1 I& U' O7 P- |5 @$ u: \8 w, s, I0 k1 w
  177.   fp=fopen(FileName,"a");' J4 F& `, n4 `5 ^+ d* G1 v
  178.   if(fp)6 W: Z' \# _' R9 ~0 U* C
  179.   {
    5 p; V/ {5 W$ O: N4 z7 Y
  180.     fprintf(fp,szBuffer);
      N5 n  U' q0 g& Y
  181.     fclose(fp);( l. n; Y8 q4 e0 H0 Y+ F
  182.           _flushall();
    0 o2 H# @& L# Z$ G/ f' H6 Y6 m1 v. g
  183.   }- S6 T9 x9 M+ X. D
  184. }
    % v% U2 {* w3 J+ j' b; }+ D
  185. $ ]) u; X* j3 R; s7 k
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ' v3 J# k. i2 P; M
  187. {0 _6 v& ~* d$ Q, \
  188.      FILE *fp;
    ( ~5 m( a6 O3 C
  189.     DWORD  attrib;
    - H. x; Y9 t; ~  j
  190.   attrib=GetFileAttributes(FileName);
    0 M; U; F% u" x8 p
  191.   if(attrib!=-1)
    , m, e# Z3 a) ~4 H3 z
  192.   {/ u' N: k2 h( E" F4 G- p2 c' D* m* W- ~
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 Z: J; G" y6 L" |  T/ S* W' ~
  194.     if(!SetFileAttributes(FileName,attrib))
    : j* v2 z7 i! ~) L1 o3 Z( u- s
  195.     {
    3 |7 D+ Q! a8 V! @! ]. E# a$ k
  196.       return FALSE;
    / W# A* D4 b* q3 s
  197.     }1 P. l( G, h) ~+ R
  198.   }
    ' s' [% X% k5 F1 K+ K! X
  199.   fp=fopen(FileName,"wb");9 Q7 h, l3 U( j. g* `4 I
  200.   if(fp)
      w- a  P3 C1 N9 K/ p  [
  201.   {
    : }$ t, L8 Y( C3 S1 M* F& q
  202.     fclose(fp);
    # l! K: C3 d9 j  y
  203.   }
    1 M2 ~: E. S0 p/ k9 P. l* U/ i
  204.   return TRUE;. V' ^9 p8 o1 i% q( i: V$ L$ A
  205. }% y3 d6 y. b1 O  ?

  206. + L- h! J: m9 H' z4 i- t+ B
  207. BOOL CRevAppApp::UpdateLocalVersion(void)# r( s( }! J3 e" n+ B
  208. {) w. o. ]3 G0 I$ B
  209.   char filename[MAX_PATH];
    7 H9 O) o; U' o! O
  210.   LPUPDATEFILE file,olds;% @  n2 f  a+ F! a# v- @
  211.   std::map<int,CString>::iterator i;
    ; w& ]7 R; z! j/ j
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
      Q8 w1 q, u0 [
  213.   std::list<CString>::iterator l;3 T$ F7 ^5 G7 Z8 x+ O
  214. 4 t- ?; d; w4 [4 m9 P
  215.   if(bFirstUpdate)1 t% c& }$ h5 v( S, V: c1 s" B
  216.   {
    2 J5 E. A: W: a* k; q: P
  217.     dwCurrFile=0;
    ; C+ |6 Q8 ^+ c& e3 v% i
  218.     bFirstUpdate=FALSE;" t; K: _; |& D+ V, |6 P
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! P' D) F7 X& s% {9 i+ E/ F; }1 I0 b2 y+ q
  220.     {8 d5 P& h/ Y0 S2 d
  221.       dwTotalFiles=UpdateLocal.size();1 o! p' {$ M9 ]) X) w
  222.       dwDownLoaded=0;9 }" X, A6 ]# H& b5 F6 ~7 ^
  223.       bSilentStep=FALSE;
    0 F5 O% f+ K4 U( S0 S/ ]9 i% O# q
  224.       bCompressed=TRUE;* [( X/ u( D' l- M9 F; A
  225.       strExtLocal.Empty();2 N+ l$ Q6 @% j
  226.       strFullName=(*i).second;
    : g5 R& A6 i9 |9 O7 u
  227.       dwProgramState=AP_CONNECT;* p* R. R( E" c& q& e
  228.       return TRUE;
    % I0 J0 u; R$ |- W
  229.     }4 w1 c9 H. @  q% N- R
  230.   }1 t6 g/ o6 R8 M! f
  231.   else if(bRestartUpdater==FALSE)
    9 O7 [) s$ A% Z" P
  232.   {5 {1 e) I' J3 M, f
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())" o1 B' b, F+ B, ?
  234.     {
    3 z9 W- ]# x$ W5 k' j
  235.       file=(*p).second;" w4 s& J1 v( _+ c
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    # J. K* [) z7 G2 W+ X
  237.       {  U/ {( ]7 E# b1 }
  238.         olds=(*p).second;$ R" Z, ~3 p/ S+ X0 D! Q- K
  239.         olds->vers=file->vers;
    ( v, Q, C  U6 Y
  240.       }
    8 c$ g3 i, p, y/ y- n
  241.       else
    , N5 [4 P- s: ?& {6 k7 x+ w  Q& b
  242.       {  C: L  J. x1 v/ f3 ~
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 K. P8 ^* G% ~8 u2 n5 I0 l* B3 ]
  244.         memcpy(olds,file,sizeof(UPDATEFILE));4 J- n9 C. ^3 L* {- o; _) k* ~( m
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    0 n/ E' Q  |, E2 o% Z5 c  e# h
  246.       }
    # t' t% J. I# N5 K4 {. e. I
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    * W8 B- C1 I# G9 @6 u
  248.       sprintf(filename,"(%s)",file->file);9 B/ I& E" z& h2 P
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ) s; X1 C% Z+ W5 R
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }% p! U+ ?3 n1 G' A  }+ F5 H( D
  251.     }, s6 G; d6 F" q1 D7 w! {
  252.     dwCurrFile++;6 F' R! c+ z# N8 [
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ e  l' I5 P2 }7 M
  254.     {" X9 D3 W* ?4 y, A% b- K& ~4 W
  255.       bSilentStep=FALSE;
    5 n% s: Y- H2 z  L9 i6 V) j' W
  256.       bCompressed=TRUE;
    ) P+ v# K3 m1 J, H& M
  257.       strExtLocal.Empty();& P8 ]$ S3 @3 D
  258.       strFullName=(*i).second;4 o( ^! Z( x$ Q# U% B& W
  259.       dwProgramState=AP_CONNECT;# N5 ]4 Y) f1 I
  260.       return TRUE;8 u2 P+ ~2 c0 r$ I0 ]% }) t
  261.     }' |5 V" v" w& e9 J0 J! _5 Y' a1 _
  262.     if(!bRestartUpdater)
    8 ^2 Y0 T) F( I8 }. B
  263.     {5 T4 V4 p  V( R4 U3 ?* \5 g9 ^
  264.       int iCurrSize,iFileSize;8 {& E5 _8 e0 Y" f! K
  265.       iCurrSize=0;
    , ^1 X9 I, W: C$ i9 z% T
  266.       iFileSize=UpdateList2.size();( t; ]3 w) m7 p/ ?& P( E; S
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    5 n% o( }3 r6 V1 J; r- W8 q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");& }) z9 i5 H2 i
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    7 L* d3 m. ]+ L/ g$ _/ K  j6 y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! \; P9 A! v$ Q; p
  271.       Fclearf(".\\update.dat");
    9 E5 u% V6 F6 ]
  272.       Fprintf(".\\update.dat","Bloodyf\n");% `8 i0 R4 D8 f' d5 z; S0 C
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 g5 N8 J  L" F) Y
  274.       {5 v1 D. j% i: C
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())# d9 |% e: G0 B! P( i1 W
  276.         {
    ! |7 E0 H( }, l3 r# G
  277.           file=(*p).second;0 W& U/ C0 I5 ~0 I- W+ L1 A& C
  278.           sprintf(filename,"(%s)",file->file);* p2 E+ a8 t# L3 g* ]: y3 T
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# s% v0 m  O' g# ^" u
  280.           iCurrSize++;
    . Q, ]3 _4 K# z7 h
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    0 ]( e3 z6 R9 r3 M1 W* F
  282.         }
    ! O* v3 V& o0 I  N  j6 B2 f: u+ K8 R
  283.       }
    ; I& Q: N# x# g* J: l$ R8 D
  284.       unlink(".\\update.txt");
    0 I9 I! C6 ]/ g+ w
  285.       unlink(".\\update.tmp");
    ) o% s; L( s9 {2 O8 J
  286.       Fclearf(".\\checkversion.dat");
    8 {' l3 s% \; D/ ]: R
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);7 V2 E6 H& x0 m, B
  288.       if(UpdateLocal.size())7 V& L6 h! c6 [) S# ^0 I
  289.       {
    0 ^* k* C4 C* Y8 i5 N0 T1 m
  290.         UpdateLocal.clear();
    6 v( Z4 R& @4 m4 k1 g
  291.       }
    - |, o3 h; D+ O% G2 f0 g& c, [
  292.       if(UpdateFile3.size())( Y5 W/ }( D$ g& s
  293.       {
    : q9 g. e) @  I) N( Q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)1 n/ H6 n9 ]" Y" b
  295.         {
    - D$ ?% U& e+ m5 p
  296.           file=(*p).second;
    / q. W6 }  }" M: c: W4 g
  297.           free(file);
    0 a& v, e; f6 _8 M1 G4 O
  298.         }* a1 L7 n2 w1 q% X* I6 o
  299.         UpdateFile3.clear();4 Y0 l9 |1 e( @' r% h6 r
  300.         UpdateList3.clear();3 J/ ?/ V8 ~% g2 ~5 ?
  301.       }, g- K( g; [) Y- w4 ~0 w
  302.       if(UpdateFile2.size())
    # v) p$ d  Z* T( \( C# X
  303.       {* I4 c: i3 G5 y* e
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 }0 x/ ^$ c1 E8 P4 U2 c& t, M0 _3 a
  305.         {
    % ]( m+ g, d' z  P+ O! z, e; S
  306.           file=(*p).second;
    3 Z. p0 ^' K$ w5 l+ R$ `
  307.           free(file);. s& A0 M8 n- P& E" _( {& s
  308.         }* T, ^' S: l; d/ {
  309.         UpdateFile2.clear();
    2 [4 }! L$ a9 ]7 ]( C
  310.         UpdateList2.clear();
    + c4 t3 T( Y. T
  311.       }5 Y# r0 D: ]8 z
  312.       if(UpdateFile1.size())' ^% v3 O9 D. W7 k4 M( i
  313.       {
      x; p# [0 ?; T9 t
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    1 n9 R" J+ Z+ O6 K1 b: C* V
  315.         {: m! q  z4 b/ X' B; L
  316.           file=(*p).second;
    8 j" b4 s8 i2 \1 w7 @3 L: u
  317.           free(file);" M* u! n3 |/ g* v- s
  318.         }
    0 i2 O  i9 ]) A- a; N& m. I( _- X
  319.         UpdateFile1.clear();' G% z% U" k  \# P- ^6 j
  320.         UpdateList1.clear();
    ; H3 R7 ?& S! ?. I4 z
  321.       }3 z+ e, L; F! d, k2 @/ b" U( D
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));2 J, e$ S1 e6 L6 N4 {, b
  323.     }
    % R* T$ z2 J6 F; s$ X. C3 \! u
  324.   }" n6 Y5 U6 G( S; B# Q8 _: r
  325.   return FALSE;
    : f' V7 K8 v" v: H; Z' E, }
  326. }
    : Y4 a' \! h/ i: O, C2 [: s

  327. $ b- d& |* O$ n8 r% a
  328. void CRevAppApp::ClearAll(void); T) p. b. a8 Q. s* `7 A6 M
  329. {
    4 s5 ^; R! w# M6 T/ L& B3 ~# ^
  330.   LPUPDATEFILE file;/ u4 p  U( O5 m: V2 i) u# K# R
  331.   std::map<CString,LPUPDATEFILE>::iterator p;: X3 Z0 _3 K  f2 _
  332. 3 \  h' J& n7 I6 E: a% d7 Q
  333.   if(UpdateLocal.size())
    * ~, }& B8 U7 J' S- p% Y9 I
  334.   {! L# P7 I0 n2 ^* P2 \. \9 c1 J- r* E
  335.     UpdateLocal.clear();* |3 l7 H, s* K2 l/ S' j" t5 E% l; d
  336.   }
    ; e0 ?; U1 k3 Y" M
  337.   if(UpdateFile3.size())
    2 ~0 i5 Y$ f# {9 ^; o' r$ ^
  338.   {: S" W. P5 Y% }- M& f. T
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! B& S3 x$ e' s1 [0 ^$ _# @: z
  340.     {4 H- L* X! p' J  ]: S) a
  341.       file=(*p).second;3 A1 C# g/ A4 t4 F9 v, p6 V
  342.       free(file);
    2 G: c- E7 {) |+ Q) \
  343.     }
    ) Y6 G7 P) _8 G
  344.     UpdateFile3.clear();
      \" q" ]7 O! i. r8 J) o
  345.     UpdateList3.clear();/ G5 d; z, c" C: B& q
  346.   }6 b5 p, ]( O9 R- u! |, |
  347.   if(UpdateFile2.size())
    1 \% @) T/ P6 T; `3 z; t
  348.   {
    / P, e6 r( v' @( Z: M/ r: R( R3 z0 E
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - ?1 F) l9 C- d) v# ]" p! F; U
  350.     {4 e1 a% f2 {% b' e
  351.       file=(*p).second;
    : J% E: U! ~* ~; D1 c1 R( `: @) @- t
  352.       free(file);% u# k4 j0 G9 W8 e# |9 S
  353.     }
    7 S; ^: B, b9 _' }7 B9 e0 n/ \. t6 ?
  354.     UpdateFile2.clear();
    5 w! K4 p' z& f  U9 {3 K: H! Z5 E6 \
  355.     UpdateList2.clear();  l- k5 H. n2 R! c8 _
  356.   }
    8 \- L, A( ^; f: C
  357.   if(UpdateFile1.size())# ]! g8 w/ q. a% m/ _
  358.   {7 i0 a7 T3 C" L9 O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ O3 d7 i- {1 |5 A
  360.     {+ ^: N8 z" b. \. ?5 L9 [$ z1 Z
  361.       file=(*p).second;* F- c2 l; i' D8 B4 c# Z# }2 c
  362.       free(file);4 p5 C" Q% G. W$ J
  363.     }" i3 w. O" t3 O- x
  364.     UpdateFile1.clear();' H6 P5 r  |  c
  365.     UpdateList1.clear();, [5 L3 `' Z4 _
  366.   }/ E& m/ ]0 k0 \7 K8 o% U' ?7 n7 F1 e
  367. }  # c) g7 T; y" \0 ?  H
  368.   
    0 Y! I# w# ]; R" ]' i
  369. BOOL CRevAppApp::CheckLocalVersion(void): u& Z3 E* n' z; N/ Y
  370. {: C# Z. n+ g/ p6 K/ E
  371.   int c;
    6 U9 H, ~8 q" U
  372.   LPUPDATEFILE file1,file2;1 Y" D0 Y1 u2 \: n% y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    $ `. S& l( W0 S; V8 {* F
  374.   std::list<CString>::iterator l;
    : T3 N: a" D. m% p' k5 v
  375.   I) e# Z, f7 J: z6 o9 K  y/ T1 l9 W
  376.   UpdateLocal.clear();
    + _; U) S$ V8 P) `% P( C) D
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);# P" V' G" a, K* z9 ^% o
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);  f1 q2 F, {) R/ W: M
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
      p5 S+ J2 G7 l1 c
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);9 s7 _. ]; ?" q- c
  381.   if(UpdateFile3.size())4 ~" s+ o6 a  H# P, J8 ]
  382.   {9 V! d# _: T0 B7 e0 u
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    : B) l- K7 \! L! J6 H8 Y9 d7 T: `
  384.     {: s/ o# Q. i+ N& i/ }
  385.       file2=(LPUPDATEFILE)(*i).second;2 T0 V+ L5 I% w6 V# d. U
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 K$ I. f- c. G, k$ o
  387.       {
    1 O8 u! R1 z' c! I
  388.         file1=(LPUPDATEFILE)(*p).second;9 A" z# B4 [: E% r  o" B  k6 X* h8 U, T
  389.         file1->vers=file2->vers;
    , }- N( l/ D9 F: U, H0 A
  390.       }" N6 c! u: X. A. J
  391.       else1 [# ?& `" `5 {- m3 T5 J. m, u- A, }1 i
  392.       {
    ' H5 B6 ^  P: N+ |; M. u: P
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ B' L- K: l0 q& l% Y. P/ L+ C
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));1 {6 ~- u0 {# Q+ e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ Y3 F0 G, i  ^! ~; ?0 [$ F
  396.       }  }- D7 D9 ~2 h( W. ^
  397.     }
    % d; q. D! ^' ~
  398.   }9 ^9 C8 E: a& k) I% Q% e: n* I* b9 A
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)7 z$ ~; S3 n6 ], ]8 w% G/ b
  400.   {
    + o* y  X  W3 I. i2 s- Q& V
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    4 H; H! ~& g$ I
  402.     {
    6 m  E" z6 U) W. o3 e
  403.       file2=(LPUPDATEFILE)(*i).second;: W. D$ F$ G0 O- G0 N
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' e; f. B0 u6 j6 B, e
  405.       {& b! |8 h! L; g& s3 z0 D5 r; ?. i( ~
  406.         file1=(LPUPDATEFILE)(*p).second;
    3 _0 b$ X2 i( \( n- a
  407.         if(file1->vers!=file2->vers)- t& o$ K, G( l9 m# I% D  p" {  q
  408.         {
    . V$ H5 u& G! o, A: l* C
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));8 l6 z0 J, V3 R9 l& a8 _
  410.           c++;
    0 o& V* i0 M1 i
  411.         }/ h% @& r) ^8 D" Z  X$ |+ D2 Q9 x" w
  412.       }; O/ v/ a7 h7 `; Z" X' H# Y5 A
  413.       else
    6 y* q  G8 B- [) u: S$ l
  414.       {
    ' x' \+ i$ a, |
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: F4 u/ r8 v% k! ?- b# Q
  416.         c++;
    0 ?% O) X5 a; C* i/ E
  417.       }0 U  p; _# P$ U
  418.     }
    8 I, E1 o: z5 ?/ l! B: S
  419.   }
    6 y) M* J& w. k8 [) o
  420.   unlink(".\\DownLoad\\update.txt");$ L2 U! |& D2 ]/ M9 X2 M" q' l
  421.   if(UpdateLocal.size()) return TRUE;5 y, _: L2 n# x* z6 i; |6 r
  422.   else                   return FALSE;8 e  q4 e+ S) w! u' `
  423. }
    2 \! X1 l  Q( S# }% ^, H# Y% k) `

  424.   f6 A$ b" i6 P2 c9 i1 e9 J: |5 x
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"& ]  e0 X, K/ z! _) `" g, z7 D& B
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ; j9 l' k* B8 X3 l
  427. ! c" ?3 O1 a: {8 p! l/ M" T

  428. 5 Y4 |4 ?7 {2 C6 k  x# W

  429. 1 q3 l; b6 V6 o3 U8 ~" }
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)7 f( l; P, O7 q$ y
  431. {! ~  t& V% F0 H7 L6 h1 ]/ O2 l
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;' w( g' n) _$ J- d  Y; F' J1 Y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 h# H* X: l/ z6 L
  434.   {
    $ n1 b+ Y6 L5 ]  E5 Z" T
  435.     char szLanguage[50];' z( g' t4 Y0 o9 u1 S, M! Q5 X4 c# I3 x
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ) G, _9 t* _  Y+ J
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # [$ ~5 ?" B1 k) E0 c
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    , I- r% I! t2 u/ V% E5 a& `
  439.     else                                   m_iLanguage=ENGLISH;
    6 ?' a- O6 V7 j$ z. w
  440.     char szRegister[100];4 r# d1 ^, ]9 i7 }% S
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- M9 t" I) u' p/ _: k# Q
  442.     strRegsName=szRegister;7 V6 S1 I- q: q6 [# A' z
  443.     char szPatchURL[100];' I) h0 b- |- C1 s/ v
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * F% N. C9 _# D
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' `: f; j8 K4 n
  446.   }
    8 I2 y- N- Y, h8 y, r6 O
  447.   else
    * J4 G  j9 X: B4 K
  448.   {% d% m5 I! r( N3 \
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& e. {" A" D) l
  450.     strRegsName=DEFAULT_REG_URL;
    - e9 [+ d! p) M/ T- V2 J
  451.   }
    ! b7 W; Z0 ^7 N) Y8 A0 t
  452.   if(GetFileAttributes("hosts.ini")!=-1), i+ {3 Z7 V" Y' o4 t+ |
  453.   {
    # e2 t" J! h3 @4 \
  454.     char szIP[50];2 p' l- u! X+ Y' J7 r* X; p
  455.     char szDIR[300];7 f* s0 }+ Y! l8 E: {' M1 m
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))1 Z5 K; d0 A  o
  457.     {
    & Y3 l0 Z5 P0 _% I  r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");. r# _( p! S3 e+ U6 y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");' G$ [7 \  t' N, K4 F0 y
  460.       strHostName=szIP;1 m- q7 d8 t# I6 a+ ^
  461.       strHostPath.Format("/%s",szDIR);
    1 ~6 Y& ?( h2 x4 f, q& x
  462.     }
    & k- G" ~" k5 i) N3 l+ [0 t
  463.     else. K/ l. u; N/ W! j) ]$ w( C
  464.     {1 c* X% F' w4 n. j0 K4 I
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) V+ w* v6 M8 B6 K; @( \  [
  466.       {: G$ O6 ?/ l  r0 v& v- f
  467.         char szLanguage[50];
    0 s, m8 n, m4 g) ~: [. m
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 d/ S$ y: i, ~# Y9 P& `
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 \; F; F; G2 m  p" Q# d
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;7 o: R2 a1 _6 C% r
  471.         else                                   m_iLanguage=ENGLISH;% y1 G& h9 g) a$ k" k% f
  472.         char szRegister[100];5 H) x3 G7 X8 F- I6 e/ E- m
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 L. U! R! C  \! t
  474.         strRegsName=szRegister;
    , ?/ j5 R  Q# D* @7 o2 I' F
  475.         char szPatchURL[100];
    # P- B, p# \. D# J1 ~
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 B( S9 X5 W6 t  r: w
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! U( g) ?  N0 ?: l7 m6 w$ o
  478.       }! _% b6 b; ?7 b
  479.       else
    6 W+ G3 U, s; I7 r- K) D, I( x! y. }
  480.       {( I, y/ O2 x1 O% G
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 s; Z, A$ e& z
  482.         strRegsName=DEFAULT_REG_URL;
    , d3 [$ V. f' z+ R& I+ B" \9 [
  483.       }& W- B' I8 c; g! n
  484.     }
    4 w3 @/ G: _5 \1 X% k: @) _; C
  485.   }
    . i1 ~4 |8 B! O* D; a: |2 {
  486.   return true;5 Z! q. U& ]! q- a$ R. l! f
  487. }
    + K6 k2 _2 K# H6 r

  488. # @$ f/ o( B  `  \8 q2 o; e
  489. #include ".\ZLib\unzip.h"
    6 Q% ]* u8 M; }. K: c
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);1 v4 m1 @8 a  b7 G, \8 h( J% j+ s
  491. /////////////////////////////////////////////////////////////////////////////
    ! f: P* C' \6 u9 ?. N
  492. // CRevAppApp initialization) H8 d( F( ?; v/ E/ V4 g0 U
  493. " t& [. g, {! z+ v( ^1 p
  494. BOOL CRevAppApp::InitInstance()
    % v3 o( K, p1 [. X$ m3 O
  495. {
    8 h6 \: n  `$ B# Z  ]0 W( f- _0 _
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];5 ?; o6 E# {+ R

  497. " I# F* w$ y0 o3 w3 I" I: j
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    9 N% Y+ x, w' L2 B' L% C
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    . C# t6 i0 q# ?2 ^
  500.   {
    $ z' q( e3 j; q" b
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");2 t7 h( e$ Y; G; |1 d2 S6 v5 F
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    + M/ F/ ^* y8 E* `# m5 K- U
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    & @2 ?! B$ \# M
  504.     {6 D( _6 ?( _8 K" I4 S
  505.       strcpy(szPath,szPathTarget);! r0 O* [! K7 n# `
  506.       SetCurrentDirectory(szPath);; k  K  |5 l$ j5 I+ i: l
  507.     }- N1 Q" w$ h7 l$ ^
  508.   }8 a' _5 l) ~/ Z- Z$ L" h
  509. #ifdef _DEBUG
    ' w. r8 g  ]# ^- H
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    : C8 j0 c- D- w& N
  511. #else1 D# F$ @- E7 t
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 R. |- c9 I& `) k+ C0 S( G
  513. #endif
    + x( O: I+ L. {* ]# y2 r
  514.   {' P0 i: [# t" P
  515.     char tempFileName[MAX_PATH];
    5 W& d( N* {$ R% x' f4 Q
  516.     strcpy(tempFileName,szPathSource);
    0 K& s3 N4 z& q, X
  517.     tempFileName[strlen(szPathSource)-12]=0;
    , Q8 W8 S$ T5 a$ Z0 _
  518.     strcat(tempFileName,"\\$CSUpdate.exe");# {+ T% ?" N6 i* \' ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    , T/ `- Q! S7 f& ^* _  t
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ( l; ^6 T5 `& ~. x  x. I' e
  521.     return TRUE;' T* U, k; C4 }! a, C
  522.   }" e$ i: X2 e+ [6 P
  523.   // Nuke 0118: Delete run.exe! i; }1 S0 R( F$ U
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );! l2 ]3 h6 d0 i  A/ b% u
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    3 [1 v" g) @3 Q) t
  526.   if(!ReadCfgFile("Config.ini"))5 f' i. D% Z. w$ y0 w. j
  527.   {
    1 B3 o# H7 }1 v" o6 }- J
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);  o% `6 m4 a  ]: ]; I9 w9 F
  529.     return TRUE;
    ' q9 ~, |9 Y* o; `
  530.   }
    , w7 |* H, v3 Z
  531.   HANDLE mutex;
    ; ~6 Y2 S8 \8 e1 u+ S9 r
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))- X+ ]; |' {# }
  533.   {
    $ L+ X! C9 v7 n
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 z7 \& D$ n( t  L2 Z
  535.     {
    1 N0 a' u' S; {3 _1 t
  536.       CloseHandle(mutex);
    ; ]+ Y3 J1 F, x; f' z& e$ u
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    # n/ f: Q: I  q
  538.       return TRUE;# Z; o4 Z- X$ ^7 L
  539.     }+ C$ i( a: {& G2 L* U
  540.   }  ) @2 l  L7 j; e$ T: \7 F
  541.   CloseHandle(mutex);
    3 ]8 K7 i$ t4 [; L; c8 ^; T& U" ~" W
  542. 8 O; i3 g. b5 u+ O  @/ E
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    - r/ ?0 d% r0 [
  544. 0 e7 |9 i; R( h7 a4 z* T
  545.         AfxEnableControlContainer();
    8 J% s6 M8 l! j
  546. ( C' @8 b5 M; m& k( y  x
  547.   bCanUpdate=FALSE;
    ) t7 B* u1 g% L- B/ @2 `
  548.   dwStartUpSteps=1;9 L& A. A) v3 E+ G
  549.   dwProgramState=AP_NOTHING;
    3 i9 l$ j8 P  T) y' m
  550. ' I) D6 y' \6 Q
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);- h9 U$ I3 C% @, F: A9 j2 Y" l1 {, x
  552. & C* S% E, @: u8 K/ ^; M
  553.         // Standard initialization: Y% G# H% u* R6 ~$ h2 x
  554.         // If you are not using these features and wish to reduce the size  \- |- `2 C0 D; Y) n- n
  555.         //  of your final executable, you should remove from the following- P" b) O! v, Z& D4 U  }
  556.         //  the specific initialization routines you do not need.
    6 K' o- {% w  i* _3 B6 t4 k- q

  557. ) V/ c* W% D% {( R8 m
  558. #ifdef _AFXDLL# R9 r4 r# T" f  O# F( j; L. S
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL8 u: c$ B1 F% I$ W% Z. J. d  p
  560. #else- W5 c$ l; c1 ^. C
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically& e5 r6 n% J( P' T1 ]6 h8 D/ M! @
  562. #endif% F* i1 `$ S8 d, M! t  ?" l/ h
  563. ( k% a  }' `& X3 a7 G
  564.   dlg=new CRevAppDlg;
    ' u; A% s0 V6 N; _% Y
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    8 \, w/ X6 W* b
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    " f7 Q$ m/ c1 b
  567.   m_pMainWnd=dlg;7 ]$ j. h) u+ o0 l, _

  568. ( q8 |- C* k+ h: {0 f. N
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    1 ]6 G" e$ T# @3 X' T. d" G4 q) y

  570. * ?, \8 H; H+ b) E
  571. //  GdiplusStartupInput gdiplusStartupInput;
      V; r7 f9 w& A6 O8 i
  572. //  ULONG_PTR gdiplusToken;
    . y  Q1 g2 J$ W4 f% l, s, p  q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ' ?" c. v) r; y3 q

  574. ! q, M! X: M- _4 i& h; r  _
  575. //        CRevAppDlg dlg;
    ' Y( }9 J# h0 `% v7 C1 D- ]
  576. //        int nResponse = dlg.DoModal();
    * ~2 y3 c9 P1 W8 B/ f) Q/ O& d
  577. //        if (nResponse == IDOK)
    9 H4 C! C# }6 n2 D; F
  578. //        {1 u0 L  @! [2 q! D+ W
  579. //                // TODO: Place code here to handle when the dialog is/ A4 k# A" F5 D& l4 b
  580. //                //  dismissed with OK/ l. |; U0 P: y: Z( U* R0 w6 U
  581. //        }
    4 y& }4 Z& y" o" i  W
  582. //        else if (nResponse == IDCANCEL)8 ~0 g0 F: w$ ], r2 [: U
  583. //        {
    + _5 a$ J% e1 W$ L
  584. //                // TODO: Place code here to handle when the dialog is
    * M+ I( e  a% B. l
  585. //                //  dismissed with Cancel% m( n7 @: W0 h( P: m
  586. //        }& W( b) |& p4 Z( E0 d! R

  587. 7 d  V/ c4 K$ P! W
  588.         // Since the dialog has been closed, return FALSE so that we exit the* m, _  d/ I; K) I  F
  589.         //  application, rather than start the application's message pump.5 `# V7 W4 o0 N$ `  Z
  590.         return TRUE;
    4 \0 q) q- T( ^. |2 }
  591. }$ Y5 z6 Q" I) T9 S9 [$ A$ G4 d
  592. ) p: a: H1 W' S# g. I
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    + f! b  |5 G7 X
  594. {+ T+ {+ N& }9 f& l
  595.   int i;
    9 C- f  ~* [, j- m' g8 U
  596.   char *szRet;
    ( [, l  ]" {7 l4 I

  597. $ j) o/ Q' \4 ~" F7 R1 r5 T1 L
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    : X6 E5 \: l; a0 E* e
  599.   if(sztoken)7 f6 y+ \( U* V6 r- u/ }: Z
  600.   {7 k' j* G/ ^- F3 Q, P7 c
  601.     szRet=&sztoken[itoken];
    . l$ S/ D" R+ y( E+ u
  602.     while(sztoken[itoken])2 T: o& G7 A5 ]: E4 U4 {: [
  603.     {
    " G) K5 D: B0 i( p' l+ g( z
  604.       for(i=0;i<(int)strlen(token);i++)
    2 M0 B) ~  n5 w* ]
  605.       {" u3 z# g. k1 U- V/ g
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])$ T# C( d7 G0 u2 [8 E  n- o$ T$ W
  607.         {
    , L- I8 F% T5 \# k  t5 O
  608.           sztoken[itoken++]=0;# |8 `9 }$ C& w4 s
  609.           sztoken[itoken++]=0;* f. N: C# F6 w8 M
  610.           return szRet;& T" I& d1 A1 \! j( e! W" p7 n2 l$ j
  611.         }2 Z5 f, O( q6 v
  612.       }8 D* }$ a7 C9 o9 P. B3 \9 m
  613.       itoken++;! z- K) o  c- ]+ Z" r
  614.     }' g* O' C8 o0 u( d( F) M" L0 z3 E
  615.   }( ^- m7 E0 a5 t$ a2 k% V6 V* Y8 F6 e
  616.   return NULL;
    # ^7 ?& }3 _# Y/ N
  617. }0 A$ h* o  A! S8 t" O) S5 P8 p
  618. * U+ R7 R% E2 H/ f
  619. void ProcessProc(long Total,long Current)
    / n4 k+ Y! A  a* W4 _; f. q
  620. {$ m  q  k& Z# U
  621.         MSG msg;2 w# Z1 X1 V% X9 ^
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    8 s4 E0 t7 d. }) ]' e5 I
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));9 V& J! J2 l! J2 L
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    $ ]* e1 z6 i( M+ g9 p1 T0 [
  625.         {
    $ E2 l" Q; a# A0 d- L! {
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & o7 T' p: a8 F: f  ?" l3 B
  627.                 {
    : d- S# y$ D  J) b1 T6 Q
  628.                         return;* [& ?9 M2 |) ]$ _* R- U
  629.                 }
    9 `3 L! d7 L  M' U( ]) P
  630.                 TranslateMessage(&msg);
    4 C3 ]+ n$ {* N: u2 s
  631.                 DispatchMessage(&msg);
    $ [; z0 R/ A0 h2 E8 h+ m  ~
  632.         }        . R& K' I' X3 U' E0 g8 I% J
  633. }" ?. h# N' {5 k
  634. 4 w9 A) ~" F( h9 t- c- X9 P% {1 ], o
  635. BOOL bFirstChar=TRUE;) N4 B" m1 z8 d' P
  636. & {- t. \  {( j3 a
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ( N& P3 X$ O) r& }8 Y7 P$ {
  638. {- O/ c# P9 `& U  w5 Y
  639.         // TODO: Add your specialized code here and/or call the base class6 |$ P% a# y/ I: ~
  640.   switch(dwProgramState)
    6 I, [4 k# M6 Y4 C8 J$ O
  641.   {( `. Z" a& Z) n5 W
  642.   case AP_NOTHING:
    , ]2 Q. Y" o8 J
  643.     switch(dwStartUpSteps). K( \# c5 A: Z+ P6 ~
  644.     {( R% H6 i' B/ A) J
  645.     case 1:7 ?4 f/ `$ f3 r" f+ C- H3 y
  646.       {! I# S" C6 m) L% o
  647.         int i;
      ]' E1 F% y- d) t" R
  648.         CDC *pCDC=dlg->GetDC();
    % z( |8 Z" {( x7 k
  649.         HDC hdcwnd=pCDC->m_hDC;
      S: n3 M! }7 D0 L2 ?/ l, x3 F( M
  650. //        Graphics graphics(hdcwnd);/ Z, o  L1 T% h9 }6 Y& Z* x6 `
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");' x1 Q9 o0 D: X
  652. //        INT iWidth=bitmap.GetWidth();9 ^7 o" ]" m- e! o- d
  653. //        INT iHeight=bitmap.GetHeight();4 v/ L' e3 [, s4 O
  654. //        Color color,colorTemp;
    4 L% v. E; {' U
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    7 N1 h" A) Z7 y+ E& Q# q1 S# M( s
  656. //        {0 t' W8 [" ?" O% \+ `$ a) g
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)9 x8 x, E, W, W, O7 j
  658. //          {, |2 u& V; U# ^" R9 T  i+ D
  659. //            bitmap.GetPixel(iColumn,iRow,&color);: [2 T5 d6 I; _- h$ U
  660. //            colorTemp.SetValue(color.MakeARGB(& j3 ]9 g$ E8 k# _1 d6 w/ |
  661. //              (BYTE)(255*iColumn/iWidth),- D9 [9 ~/ p2 v1 F
  662. //              color.GetRed(),; P4 d4 Q; a* ^
  663. //              color.GetGreen(),
    ( V6 _' v& q& p- f4 p; X# C
  664. //              color.GetBlue()));( Q) X3 _8 H/ }) J, A
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    8 H4 T/ L" n/ G
  666. //          }
    : e  ~6 ]7 a- P% T$ X$ B8 h
  667. //        }
    . ]. Y* K) R0 }! R* i
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    8 E9 d" b% U+ G$ q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % |  [& z: E# G  @: Z- g$ q$ _; ?0 Y2 R
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");) t8 k1 |" n& `5 `. X5 w! k
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ A0 I- t6 d& }8 w) C) w
  672.         for(i=0;i<240;i+=8)
    : [" u* I' b+ q
  673.         {
    1 y( i8 R$ o) M
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& E0 X$ h8 R1 K! W$ u, ]
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 X8 G; ~, w, c+ d3 }) k6 J
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% }4 K9 I; y$ f3 m
  677.           Sleep(33);0 k) Z5 C/ f9 m1 f5 T/ B) Q
  678.         }
    1 v: d) }/ u- A* ?% L  _
  679.         Sleep(1000);! c4 l' {0 y. U& Y1 e
  680.         for(i=240;i>0;i-=8)! E: l) H4 ~9 ^" Q. Q
  681.         {
    + o1 \9 U# \2 \* q5 K: ?
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . h" d* p8 m9 @/ u
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- j+ {+ ~8 S# P7 V' f
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* Q: n: d' s& U& M
  685.           Sleep(33);5 N3 V2 a  t5 \# _
  686.         }
    : M5 c5 d- h. H9 N( K9 c
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);- S9 Z3 Y, ]' E9 ^7 }( E
  688.         dlg->ReleaseDC(pCDC);
    ) _1 f3 Z) r& b9 h
  689.         DeleteDC(hdctar);
    : J- L* g4 c" [- J- _  b  J* ~# O5 U
  690.         DeleteDC(hdcsrc);: M7 @5 A. Q5 B2 _4 a$ y
  691.         DeleteDC(hdcorg);! \8 x6 G& B$ E; H: T- Z
  692.       }
    " V; m# A: a6 R
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    9 c2 z- N: ?; G( {/ a
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");+ ^+ N  _5 m' z+ P$ G8 D
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");8 z* z9 C& d. X. N0 h4 |( i
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    / L( ~, k! x2 m5 l1 ~! d. U9 T
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " }  q+ q, u, F- t1 Q
  698.       if(!Dn.Connected()); V& |6 ?* r5 U2 F1 i
  699.       {
    7 z; [. x1 u6 A- v
  700.         dwTotalFiles=1;6 Y. u- D5 n$ d; |
  701.         dwDownLoaded=0;
    * \2 t) z9 c4 w& w! G: X8 ]) k9 \
  702.         bSilentStep=TRUE;" W' \% g; O( x/ @) [+ Y. O# ^
  703.         bCompressed=FALSE;
    . P4 s: K9 i/ L- h
  704.         strExtLocal.Empty();
    3 R7 W1 m0 b2 V5 ^
  705.         strFullName="readme.txt";. r+ H2 X; M, c: z$ @+ K' V
  706.         dwProgramState=AP_CONNECT;
    ) q& u! c) d! X8 r2 y0 I/ @, u' ]0 H  U
  707.       }
    3 ^" n4 ?- V: H/ a" `, Y! n$ O
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 }  }8 Y1 ]2 [: l
  709.       dwStartUpSteps=2;+ ~3 j& _1 i7 I+ P* {! {' T
  710.       break;3 W& n' x5 t, Z: m! P
  711.     case 2:/ W! H8 }! B# C7 o
  712.       {
    : j1 c6 i2 l9 `5 u
  713.         int iEOF;
    ; v0 A0 P/ b: v
  714.         FILE *fp;
    - h4 ]6 o, H0 f8 d0 L
  715.         char szString[512];
    - k- y3 D! i; H, F% P
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ) ^  A8 Q) v# `% o# C
  717.         if(fp)' y& v+ T2 R7 k8 V% Q
  718.         {
    ) R9 |: E1 ]2 R' t! L& r9 E
  719.           do; Y7 m# e, w( K, a+ S& z7 [
  720.           {
    % x8 ]' x/ h2 j0 K7 d; J
  721.             iEOF=fscanf(fp,"%s",szString);9 J2 h* I- O3 f# Y8 V, X
  722.             if(strlen(szString))' W% M: ?2 S8 F
  723.             {
    & F4 U# _; t7 I
  724.               if(bFirstChar)
    + O( r1 v- x9 `  ^
  725.               {: V- Y. [( t) M$ k4 Q2 m/ r5 F
  726.                 bFirstChar=FALSE;7 F0 j; Q5 g. S, _1 l2 Z) p7 T4 F
  727.                 bConnectIsBig5=FALSE;
    ' M+ W" l7 I& W, O( g
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;3 {& _0 a8 }) U( {
  729.               }, L6 X& i& f/ w$ o2 c: K! X
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));3 x$ o& I3 p% m: E$ ?
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));; @& _- P6 b+ f7 }$ E  V9 m( n, ~% |
  732.               dlg->m_ListText.AddString(szString);
    # C  Y% A% P$ r8 o
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - y, c+ Y% n. @' ?. n* f$ A. H
  734.               *szString=0;
    ) B2 S. @  x% w2 g0 o4 n/ ^
  735.             }4 K3 v& }  Z4 K' z. Q+ |
  736.           } while(iEOF!=EOF);
    & c4 k5 ]& k4 ]* Z! k+ x) e
  737.           fclose(fp);
    1 Q# T3 t; [, H; C
  738.           unlink(".\\DownLoad\\readme.txt");
    ) Y- ~& |$ e" s1 [% t1 v
  739.           dwStartUpSteps=3;7 H: D* e. J# {' x4 A
  740.         }
    6 a( F8 c$ e9 F% [  {& a
  741.       }
    & x& _+ `* H/ Y% E* f  R5 g/ S
  742.       break;, R, F% L1 N$ l# d. {
  743.     case 3:8 T; ~2 `2 S/ X" z
  744.       if(!Dn.Connected())
    3 `9 |) @0 {2 ?6 n+ c+ s7 n
  745.       {
    : |: |0 ]3 p+ o. y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    : ^2 u1 z6 N" d9 `
  747.         dwTotalFiles=1;
    , m& v0 M5 D8 z* X
  748.         dwDownLoaded=0;
    ' g1 ]; U* u6 C0 r6 Q' H" R# G
  749.         bSilentStep=TRUE;
    4 h7 T- Z3 n5 u" p8 r0 x- f
  750.         bCompressed=FALSE;( d& k9 F5 W  O/ @9 {6 f$ Y& Q
  751.         strExtLocal.Empty();
    3 [, r1 T% M& q
  752.         strFullName="checkversion.txt";- M5 b8 n# l" ^
  753.         dwProgramState=AP_CONNECT;7 `! k* [8 X3 j: d3 y; w& c
  754.       }) ^" C) d. M1 y9 j
  755.       dwStartUpSteps=4;! O% R3 S3 d* x
  756.       break;
    6 B. q# W; w, W; B  W
  757.     case 4:, y  P) D3 c) n  }
  758.       {
    ; X: y( I# b( g" r
  759.         FILE *fp;
    ' B" Z: f5 C# W5 U( j
  760.         char szString1[128];3 y! m- C7 x/ T1 x
  761.         char szString2[128];
    0 m$ Z5 m- i% z* V, x" ~+ i
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");0 u' a5 a( k! j5 I$ c6 t
  763.         if(fp)
    & ^7 q7 M8 i* x8 P, v
  764.         {5 x4 ?& s* }" D+ [  p* @8 Y+ M
  765.           fscanf(fp,"%s",szString1);! R- R2 U9 Y9 y7 b! T
  766.           fclose(fp);
    . z( l- z0 o4 X) X3 |6 K% a2 l* Q1 N
  767.           fCheckVersion=atof(szString1);
    2 |3 z9 t* R2 k" l! k- m. A
  768.           fp=fopen(".\\checkversion.dat","r");
    7 L5 c* @. e9 W8 D
  769.           if(fp)
    8 V6 }) |3 E5 U+ D0 D3 p( N
  770.           {
    / t; L: I9 ]  m( Q( |
  771.             fscanf(fp,"%s",szString2);
    1 r( E& p9 n" d7 V# Z
  772.             fclose(fp);
    / B/ R$ u2 t- n
  773.             if(atof(szString1)!=atof(szString2))" x( y; |0 U/ @0 E$ g
  774.             {
    3 F+ Q- n" @  D/ e
  775.               if(!Dn.Connected())
    & `7 c, p" M' N' M* H/ f; \
  776.               {& t  t' x; a2 U! F! j' m
  777.                 bFirstUpdate=TRUE;
    . {' F0 |$ a8 O: W
  778.                 dwTotalFiles=1;5 F$ T: X5 c; H$ I- O
  779.                 dwDownLoaded=0;5 d6 j& A9 n' Y% C+ s( R: ^& p  u
  780.                 bSilentStep=FALSE;
    + R' P; N! s7 _9 G. J9 k
  781.                 bCompressed=TRUE;
    5 I! k6 e) I7 T1 p. c/ r
  782.                 strExtLocal=".\\DownLoad\";( [5 P. z9 N- u- w& I" n
  783.                 strFullName="update.txt";& M3 ~8 S0 }& X" k5 f$ O- X0 {
  784.                 dwProgramState=AP_CONNECT;: t, {5 ]% Y; n4 q# {* ^
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 \3 i4 Q7 c! f* C2 P
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 ?. ]/ Y7 P9 b! Q, D% w
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; u7 I% }# J, I2 P& p) P, ?

  788. $ C1 x" z4 i2 d3 P$ d
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 a' h3 ]" }( a: l5 d+ k
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ) ?( E6 ^, v, {1 {2 L
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)- h4 h5 M) u& k
  792.                 {, k0 K6 Z1 Y  O; z) Z1 w( M& g
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( H" z/ J% P. ?+ q* c
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" L# ?+ ~# D; g4 Q5 c
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ' U8 q' I! a5 a1 k  R7 d
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) d" F6 c0 F4 p) O  T+ w
  797. * ^" A% i" i4 j. H3 h
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 Z7 D$ W6 z2 I  M$ W
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ( R; c$ U* Y! _' D
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    : h' }4 e+ V% K; G
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 k# \3 T0 j% g& r
  802.                 }
    6 a8 c: b: w" k
  803.                 dwStartUpSteps=5;5 c5 G% R7 n( g- M5 W2 U
  804.               }
    1 D' H$ B. j" i; W- C0 a7 U2 o
  805.             }
    2 X9 w: Z* P! k/ j- @
  806.             else  p: E$ T- J9 u3 F1 `6 [7 c+ z
  807.             {/ a1 h  u/ D6 r, }: N' f
  808.               unlink(".\\DownLoad\\checkversion.txt");% I: V& a3 v: C$ M9 N6 J; J
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# F) i& M& N! Y$ Q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % A, t3 I& @- S% }% l$ Z- b
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    - Y' k1 U+ Y# V: W! N7 s0 m

  812. , q1 E0 o3 Y  E9 p* c  z5 a6 _
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & V. _+ V; j9 U
  814.               dwStartUpSteps=99;
    + m* T& Y7 g) H& s( ]1 V
  815.               bFinishUpdated=TRUE;- w) i% C, }6 b# L
  816.               bCanUpdate=TRUE;5 n/ @3 K- _7 _1 [8 g
  817.             }, `7 s; L$ v0 F7 R) I
  818.           }
    : C) ^7 D+ C2 x3 ]4 g4 L* o
  819.           else
    ! T6 f: K4 `. i: ^* j: n
  820.           {
    $ w9 u  ?: D, ~: x  N1 ~' R
  821.             if(!Dn.Connected())4 K7 [* k! q0 j  f- Q) U1 E
  822.             {. `  |7 D+ E& r8 s# {( i6 K* N
  823.               bFirstUpdate=TRUE;
    - }9 n1 M  E1 T' u& X
  824.               dwTotalFiles=1;7 G' V! F) Y. ]3 I
  825.               dwDownLoaded=0;# V# `( G5 t+ q9 F( K. e
  826.               bSilentStep=FALSE;
    & W/ i& L0 p; ]
  827.               bCompressed=TRUE;
    * S7 v& o1 U  ~. K, d
  828.               strExtLocal=".\\DownLoad\";
    - @% Y1 R, A  @! C2 `
  829.               strFullName="update.txt";
    6 X1 T. C4 i# w- T) E/ X
  830.               dwProgramState=AP_CONNECT;! v4 X: q- p5 I# t
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ j! Y. B9 x6 @1 g$ n# O* Y
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , R4 J1 H% R  E$ ]' y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");8 x& x3 ]5 ]  Y8 ~
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * |% O4 ?/ F4 x) V, l
  835.               unlink(".\\DownLoad\\checkversion.txt");5 A% K' y5 i% p
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    , k& X" N- c" C6 |5 `- Q
  837.               {& K# n2 p' A! w
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ) m/ o! r2 V1 O4 |/ g, o" p
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    1 L2 b$ |* R  V" n5 w2 \: z% p
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");1 t7 X% ?% k& W# h0 I( V
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# x6 A  Q1 d4 _, z+ m
  842.                
    4 {6 f1 U7 i5 }5 `: o9 f9 W: ^
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    2 b2 f/ v1 e. y; O' ~% S1 z5 h( H& ]
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ Z* Y) s( r2 ?& T$ P+ @
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
      c6 Q& ]0 F! j3 {
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- c. E* v; C( k0 ?
  847.               }
    0 d# [1 }/ g7 E8 W  y& \# b
  848.               dwStartUpSteps=5;0 W& F  S2 }+ G2 T
  849.             }0 P! |1 x2 J) |0 @
  850.           }# o' t) ^* q) R; s) W4 V! M
  851.         }
    * Z5 G% L# e  w! i' z& w
  852.         else
    7 W; ]: {9 N6 A/ i9 `- }
  853.         {
    & l3 Y" V1 U* q
  854.           dwStartUpSteps=3;6 g0 i$ [; a" m
  855.         }: d' K3 ^* i& ^) L! q% Y
  856.       }% j( Y- u4 ^  n, x
  857.       break;6 r- [" @8 _- q! z8 G$ {2 F
  858.     case 5:
    ) u1 `; f& Y, U" N) R+ [- x3 A  H
  859.       {: |# z: s& a4 B( l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)2 E; G. P- O0 U5 O0 f9 k
  861.         {0 c4 J% G7 [% `
  862.           int opt_overwrite=1;' j, u5 b: I- p6 M
  863.           int opt_do_extract_withoutpath=0;
    / w$ \4 r: k1 l! }( S; T5 }0 \
  864.           unzFile uf=NULL;
    # S6 C2 ~) G  ^: [2 s. Z
  865. # `1 p' U) Z. n/ Q0 b) L; c. u
  866.           uf=unzOpen("Wsa.zip");# p% G3 ~% I3 l) N
  867.           if(uf)
    # _0 d) ~; j! k5 @: H
  868.           {" l4 t7 {7 ^' Q) E5 c
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);- M% t/ J% k% y3 @& Z4 l, A& x
  870.             unzClose(uf);
    9 o3 a& N3 v: b
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");  j9 `5 N& b' C" _% K
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    3 A& P* f8 \$ r( k% V
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    . @* J$ `/ n( l, }4 k4 O
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; z. ]+ W6 h2 p! C2 s" X" C1 R' ~
  875.           }
    , R$ O+ w0 F( s  C5 U- Y2 M4 ]
  876.           DeleteFile("Wsa.zip" );
    . ^* E8 T# E* \* Q' t9 Z) n
  877.         }5 j2 U- V) Q2 v6 W2 ?9 r- j7 G3 W& |: N

  878. : m. `( ?, m8 H3 i! E5 |+ v. C0 x
  879.         if(CheckLocalVersion())4 v: J. Z6 s0 j& T6 v9 P
  880.         {
    % x" U" k5 \( ^
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");3 L* i- r- U) Z
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ( o  J' Y9 R/ m. p1 E3 M0 T( a
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");1 t1 {: M8 ~$ P. Q, @
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) t& b3 f" c; c7 h+ Z+ }
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);7 s# X; w9 d7 F. F; U( y0 B
  886.           dwStartUpSteps=99;
    - r3 `; r7 u- W, o9 ]  H
  887.         }# v! L2 W; o. h' t& z
  888.         else7 U" U7 g6 {' F4 d7 R  Z/ q
  889.         {: v- v" o3 p5 }6 o) I8 R
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ W% j: K. `3 C" m1 F# c# k
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");, G/ i! B. \# M2 g  l5 I
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 z5 A+ t7 M7 j

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

# t! @( j( ?. P
5 Z' n6 g0 v/ T4 A4 U

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-27 00:55

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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