找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
5 A/ X4 |! c; m1 W6 B7 J
  1. / RevApp.cpp : Defines the class behaviors for the application.
    9 M: t" h- y1 G' R
  2. //
      P* _7 _: b( K$ O

  3. 6 g0 M) u/ i# t% T" m+ d' y! U
  4. #include "stdafx.h"( P# O2 _9 d1 V8 K. s* g$ ^
  5. 9 b- S% M! G& X% E7 `2 j4 i
  6. //#define UNICODE; O+ A* }3 X; U- ~8 ?7 v- S4 A; A
  7. //#include <gdiplus.h>$ t) n/ Y  a% y( r
  8. //using namespace Gdiplus;3 r0 W& r8 g+ g4 H" q
  9. ! j, n$ \( A% c( q( z; @
  10. #include "RevApp.h"
    0 l0 H! L2 [3 t( _) ^. G
  11. #include "RevAppDlg.h"
    6 u1 Z) \& v. j( V: l# F# |0 m; ~
  12. / F7 ?' O+ m' u* q
  13. #pragma warning(disable:4786)
    . c1 H& l3 j8 |/ ^
  14. #include <map>
    ) M  K2 Y3 b* P; o- \
  15. #include <list>
    ' X; }+ T8 S8 A( f
  16. #include <direct.h>
      @8 e: m/ _2 w0 Q8 y
  17. 8 T8 j. R1 J4 F% `# g9 l
  18. #ifdef _DEBUG
    5 v$ P$ E6 i& m& {, j/ l) Q
  19. #define new DEBUG_NEW6 C+ v$ l" t& F
  20. #undef THIS_FILE
    & a- k& ?4 x9 F" }
  21. static char THIS_FILE[] = __FILE__;
    # A- _" P, O) r6 d+ P( R' w  S
  22. #endif2 ]% Q4 X# S) Q9 L) S5 o
  23. #include "SkinResDef.h"% @" e2 }9 g1 G
  24. #include "ChangeBG.h"
    # L) B2 L" e9 o
  25. #include "AFXINET.H") |. W8 x$ e  X  P7 a

  26. - W# @0 G( S+ B6 V  s2 X: k1 W
  27. #define TRADITIONAL_CHINESE 0
    ; Y9 X+ @' Y9 Y6 J
  28. #define SIMPLIFY_CHINESE 1* A: S$ [/ s: u
  29. #define ENGLISH 2
    " Y& i- n: _/ {6 {
  30. int m_iLanguage = ENGLISH;% k% }# |6 R# b$ P
  31. /////////////////////////////////////////////////////////////////////////////
    " a/ }  f: c0 X
  32. // CRevAppApp7 }& R3 [! ~* H" n

  33. & e4 j9 D2 p: H( F' j
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)0 ^( g, Q% Y. C
  35.         //{{AFX_MSG_MAP(CRevAppApp)) g* E" y. Z% Q: f$ g5 e% C
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    # v( k& O# \* S1 ~" g5 v
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!0 U! L5 @8 v+ E% `! t5 Y: E
  38.         //}}AFX_MSG% o. ~1 I& U$ h3 z+ q
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)! N0 D9 u0 O  E) [
  40. END_MESSAGE_MAP()' g, x: h1 b& q( C4 p% u

  41. ! ^, {4 U/ h" W; Q
  42. /////////////////////////////////////////////////////////////////////////////
    4 B) }: e, _) b1 j1 C& @
  43. // CRevAppApp construction
    ( M# A/ R1 ?& \6 `8 s" {
  44. ; V( V- I. N; W
  45. CRevAppApp::CRevAppApp()
    6 \. L, ?5 F% H! K: Z. r
  46. {
    , ^6 ?5 R4 i' {/ m
  47.         // TODO: add construction code here,
    5 b8 M! `6 [, F! U* Q
  48.         // Place all significant initialization in InitInstance
    0 v* C# ]! y4 D- d/ \8 v" u& X
  49.   bDisplayIsBig5=FALSE;& }% y' K* u6 V6 K( n. Q
  50.   bRestartUpdater=FALSE;
    . h1 F" c. X/ B3 q8 v: k4 b
  51.   bFinishUpdated=FALSE;8 _& w( A8 l9 Y, X
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;! T0 ]7 N0 k+ l& ]7 Q1 f0 j2 y9 n
  53.   InitChangeDataBig52GBKS();7 s$ B  x+ N" p  ~, G) s
  54.   InitChangeDataGBKS2Big5();1 B/ _) O0 l4 Q+ ?1 a
  55.         //
    , F# N' W2 p/ n8 A' v
  56.         bClickRunExe = FALSE;, ~4 W: b4 ~4 U* M( O% h
  57.         //
    1 p* p0 O% j( x7 X, {
  58. }
    : G& W9 m5 o5 `3 o, Y7 m# B
  59. ) h% A; O- ]* x. N9 F; s
  60. CRevAppApp::~CRevAppApp()
    + @" Y1 i/ W8 y. E. k
  61. {
    ; W+ V& ?) q1 ^3 l4 s
  62.         // TODO: add construction code here,
    ! k3 r4 k6 b+ [  p- v* C
  63.         // Place all significant initialization in InitInstance
    ) @' Z( Q, _  K) x
  64.   EndChangeData();
    4 f4 n7 D! \8 q5 L* A& H
  65. }
    % \  U5 t" ~8 ~3 J+ u3 l
  66. ! x8 Z) @& ?5 B
  67. /////////////////////////////////////////////////////////////////////////////4 `, ~( W. G8 {! L
  68. // The one and only CRevAppApp object
    . R- i  b: ]; G; }( h

  69. 4 `5 _5 l. P+ U( v5 n, p
  70. CRevAppApp theApp;5 A/ ]* {$ t. A) b9 w4 H
  71. . E. S- ]; v* a/ F' A- {+ B8 @- P
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)4 l4 T, `# e( |2 Q) [* U
  73. {- R4 m& ]* Z( C/ o
  74.   int iEOF=0;* ]# ?1 e# ]6 {
  75.   char szTempName[MAX_PATH];
      x8 |+ S. `* V+ g* N
  76.   *szFileName=0;1 `% N$ ^0 ]3 l) N
  77.   iEOF=fscanf(fp,"%s",szTempName);
      w9 e0 O4 C7 r
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ) ?5 a6 \& z. q+ V' Q8 k2 J
  79.   {
    0 ^( v+ m4 ^+ }
  80.     strcpy(szFileName,&szTempName[1]);, p  \9 A' D5 ~; }
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) B3 a+ |8 L# ~$ |& F/ @% x. L! W
  82.     {1 @. I8 p8 v$ C6 H6 f. V6 o
  83.       iEOF=fscanf(fp,"%s",szTempName);! ~7 a4 ?& B& _& Y; Y, T' d, ?, O+ e$ O: y
  84.       strcat(szFileName," ");0 {2 ]2 a/ W1 n  N5 ~
  85.       strcat(szFileName,szTempName);
      b% i7 s# r6 b, P
  86.     }1 f# G4 m* j7 N8 y0 x
  87.     if(strlen(szFileName)>=1)
    . Q* n0 {" W# f7 b( s7 v1 _
  88.     {- O$ g8 k/ I0 L; U
  89.       szFileName[strlen(szFileName)-1]=0;9 o* \! r  ]# L. p
  90.     }/ x0 Y' F4 J; N9 e+ z8 Z* S; J5 e9 N
  91.   }( M4 @, k5 e! X
  92.   return szFileName;  S9 S1 _9 q/ U6 l$ d
  93. }
    : {/ v$ `( n8 h% w$ S! ~$ x& V

  94. + g. @2 c5 ^* z; s" ]
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)3 z9 }/ j5 i7 N0 ~7 i! _1 Y6 `
  96. {5 D: G5 X' E7 C) |2 y
  97.   FILE *fp;/ g2 V5 B# E" Q( L
  98.   char *key=NULL;
      i& N5 X5 x, u% H6 e
  99.   char version[MAX_PATH];- w, F6 r# c7 p$ U
  100.   LPUPDATEFILE file,olds;
    9 X1 g9 B1 W; ^, [5 I
  101.   std::map<CString,LPUPDATEFILE>::iterator p;/ Q$ q8 {+ Y4 l; G, ?# Q

  102. : r0 i4 D) e3 c/ u
  103.   UpdateList.clear();
    : u: p' j; J' n
  104.   UpdateFile.clear();6 Q. c% {8 k7 e4 n/ }* U  i
  105.   if(GetFileAttributes(filename)==-1) return false;
    . C$ k$ H( ]4 P5 t4 u
  106.   if(!(fp=fopen(filename,"r"))) return false;
    * H+ e$ [* w% D6 m8 z  a
  107.   fscanf(fp,"%s",version);- @5 B% }  R3 j$ H) ]7 D
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    # A$ c9 J  m- A
  109.   while(fscanf(fp,"%s",version)!=EOF)3 V, o" r- H# w
  110.   {' C2 x) e' f) G! U1 D2 n
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 }5 L  ]( j2 `5 J3 L
  112.     fscanf(fp,"%s",file->path);
    ( @8 @5 W& c# G7 W4 z2 R4 m
  113.     ReadFileNames(fp,file->file);6 H4 H( r4 g* J/ q4 b
  114.     strcpy(file->full,".");
    7 ?1 m5 c* ?1 i: B
  115.     strcat(file->full,file->path);
    5 c( ?! `( \/ X; k
  116.     strcat(file->full,file->file);
    - f$ T3 A5 C! X6 {, H
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ) s) D* o3 F  a% A3 `
  118.     {# q4 Y, M; V0 @) p5 O/ h+ ]
  119.       file->vers=(float)atof(version);  x. ~& u  b( y
  120.       UpdateList.push_back(file->full);
    2 Y0 F) J0 v; N, \* L% R% d
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));9 ^  @- e, d# B3 p6 m
  122.     }
    ! \3 C) E3 E* Q+ i4 d0 [
  123.     else
    ( L8 X8 k/ |4 s4 x" _0 L
  124.     {
    ' b$ C( Z6 o$ J
  125.       olds=(*p).second;- r7 s% c1 }8 h
  126.       if(olds->vers<(float)atof(version))
    # f! g8 k2 N: \" n: F
  127.       {( P& W9 ?/ M8 R8 w
  128.         olds->vers=(float)atof(version);) ~! {  W  u- _0 U7 w$ x% T
  129.       }
    / k' P9 u% q' b$ C" v+ W
  130.       free(file);6 m+ }- }8 w/ K$ f/ {
  131.     }
    & e5 f3 G8 S( \" z5 ~2 _- G
  132.   }2 i) j1 Q: B0 |: t$ U- S, |' g
  133.   fclose(fp);
    , M7 a/ ]  V6 ^0 D8 [$ v7 K
  134.   return true;
    9 n& B- a7 z6 R" B7 k
  135. }! V% j) W5 t) a/ h

  136. ) A3 [& j8 W" W6 h: u/ a+ V6 a
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)5 j8 F+ }; A' A9 v" [
  138. {4 r* N! O1 N! [% w6 C) K& i
  139.   TCHAR  szFull[MAX_PATH];
    4 K1 v, k) H; m' _  \& J
  140.   TCHAR *token,*inter;# n/ E4 g* g3 I- n
  141.   *szPath=0;
    ' m6 q2 H2 n8 z/ d$ z
  142.   strcpy(szFull,szFullPath);
    ' }/ J9 _3 J( C9 m3 e% h" U
  143.   token=strtok(szFull,"\\/");
    4 |* g# U. @1 z+ o5 c
  144.   inter=token;
    5 x1 ^! O- }6 N3 m: \
  145.   while(token=strtok(NULL,"\\/"))9 l7 {7 F4 z) z  R  z
  146.   {
    * F, G0 I# H# V% v7 G# G7 h5 X
  147.     strcat(szPath,inter);4 g# {1 E' i# s* u) \
  148.     strcat(szPath,"\");$ ^' D0 f5 l8 t: j" g' P
  149.     inter=token;( Q# T5 K3 J6 q" `
  150.   }
    0 \) P! a& _# l' u6 Z- o3 h3 M
  151.   return strlen(szPath);( n' y8 X/ E2 i- t0 l
  152. }  K% l* \: j$ \6 V. v. w* ~/ T' `

  153. 0 U2 L$ t$ H% y; \' M! B
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    3 O7 }& w. p# `/ F% b
  155. {
    ! O2 O( y4 K; V" |
  156.   DWORD attrib=GetFileAttributes(Target);
    5 p7 Z) v4 }& P
  157.   if(attrib!=-1)8 T2 x& o6 U4 X9 J# M) Q  S- p! ]
  158.   {8 o* Y2 p% T$ N% R& y7 \
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))# Q" b  c; k' a. E1 ^# V  N
  160.     {# a) q5 c4 J2 ^  K9 V5 G6 ~
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);6 X9 ~; Y1 b: _6 ]
  162.       SetFileAttributes(Target,attrib);
    3 |( U8 X" e, B- t. \! ]- Y
  163.     }6 j" c, `8 d3 \3 W/ j4 H1 z( B; ^9 n
  164.   }
      X0 ~; r& v. @
  165.   CopyFile(Source,Target,Erase);( K: l3 e6 j' s$ j" {& f1 C
  166. }4 `; G% p3 _  i3 P  V7 ]  {7 J

  167. & \$ |# u# m0 z( t* t8 w
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    # I3 M' T  V' P( a. u3 h
  169. {
    ) U; F& m# b2 W" r
  170.      FILE *fp;
    8 X- F7 ?" s& ?2 f/ I( r+ s
  171.      char  szBuffer[8192];
    8 z2 X2 e0 c4 O0 {6 L5 _$ ?
  172.   va_list  argptr;
    & Q$ G& p+ `! Z5 {3 l
  173. . i- n; M8 |) j! I$ W
  174.         va_start(argptr,message);! C$ y/ [( t& F8 M
  175.         vsprintf(szBuffer,message,argptr);
    - a. ?5 g" [1 ?/ C- Q1 V0 b
  176.         va_end(argptr);5 E+ S+ g, J. @6 j8 a, H/ P# E% S, Q5 B
  177.   fp=fopen(FileName,"a");3 R8 v' G& D. X* O
  178.   if(fp)
    ' L8 \. p3 z2 X/ I- V: s" a* e' q
  179.   {
    + J. ?5 i& q! R& ^2 l  x
  180.     fprintf(fp,szBuffer);. [! b$ f- j8 H2 n! Y' `" J
  181.     fclose(fp);
    6 S4 V& G5 W( o) W' G* W
  182.           _flushall();( H$ u+ Y" m' \* v! c: c
  183.   }
    2 e: b% a, f5 p, w
  184. }9 N: R& U! |% r6 l8 i" d
  185.   I/ N/ t" M  a( N. g
  186. BOOL CRevAppApp::Fclearf(char *FileName)0 F8 Z1 ]8 F) v
  187. {6 q  @* G" ^( w9 V! {; F
  188.      FILE *fp;) w* N* ^; h+ a7 `& @
  189.     DWORD  attrib;
    : u' T7 K: E' |
  190.   attrib=GetFileAttributes(FileName);; Z/ t3 J/ e* r  k8 W* b. r6 A' \
  191.   if(attrib!=-1)0 `/ w7 L  {2 b  y# ^. r
  192.   {" J. t3 \6 Y! p9 L
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ( B$ a4 E9 G* ^2 V* R5 L
  194.     if(!SetFileAttributes(FileName,attrib))2 ]/ }( P4 E; r9 Y- X' a7 O
  195.     {
    " Z! M0 l" J9 s7 A9 l
  196.       return FALSE;+ K* e( u& I( o  I5 {
  197.     }
    + C/ t( j4 a: {/ Q" A8 E+ k- Q0 n' v
  198.   }
    % B, x% y& V; E( ^% V+ E
  199.   fp=fopen(FileName,"wb");
    ) V+ r0 u  F1 B; c+ k
  200.   if(fp). ?6 l% H* J! b$ n
  201.   {
    / ?" G0 l% r* o: X) A
  202.     fclose(fp);- O5 ~* B# v6 R
  203.   }8 E8 _8 Z2 x6 X6 s9 I* ?; e4 l
  204.   return TRUE;( g5 q  g+ _* d3 V4 M
  205. }
    1 B9 U" C( k) {: c
  206. / f2 V1 P, R; [6 g
  207. BOOL CRevAppApp::UpdateLocalVersion(void). @1 `9 e( F- X/ T$ n: _
  208. {2 R; w- y! ]3 z5 k9 e# G$ T
  209.   char filename[MAX_PATH];3 ^8 R8 v4 `& O3 p3 m' D( M9 A+ B: E
  210.   LPUPDATEFILE file,olds;6 X6 o$ n+ v9 g5 U- c1 a  x$ s
  211.   std::map<int,CString>::iterator i;" z3 ]# o) x; H, M& H$ C
  212.   std::map<CString,LPUPDATEFILE>::iterator p;4 ^# ^% x: u$ d9 m* U9 U4 z- g
  213.   std::list<CString>::iterator l;' H: Q% @; t- @% d
  214. * G5 ~" }0 A$ \1 j
  215.   if(bFirstUpdate)- b( w4 I3 X1 B
  216.   {
    . s7 @* [- C+ a/ Z* c$ r0 {
  217.     dwCurrFile=0;$ z$ ?# a$ L/ g6 j
  218.     bFirstUpdate=FALSE;2 I3 N7 r9 g' r" B7 _
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 t. s6 ]) `: S% _
  220.     {$ n. A2 N0 [+ \2 H
  221.       dwTotalFiles=UpdateLocal.size();
    1 c, `0 r0 k$ C' h9 a
  222.       dwDownLoaded=0;
    5 M% s8 ?: I6 r2 T' e6 T9 @
  223.       bSilentStep=FALSE;$ E5 y+ _9 l3 N9 g$ h: ]
  224.       bCompressed=TRUE;. l# Z) I% {4 ]" u# Z
  225.       strExtLocal.Empty();" m$ A! Z' e  c0 Z4 m$ v
  226.       strFullName=(*i).second;
    3 j) L+ t/ N+ x# _0 ^: a
  227.       dwProgramState=AP_CONNECT;
    3 A  h% h6 l3 D1 u- R; O
  228.       return TRUE;" O- _9 N8 M7 i' u+ P1 P$ s4 Q
  229.     }
    % |9 d+ q; E- X" @( q
  230.   }& Z- v. _# L* L" @
  231.   else if(bRestartUpdater==FALSE)
    ( e( h9 I3 N- m" F: [9 D
  232.   {
    1 x; d3 X2 N+ q9 g4 ^- Y1 `. D
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()). F+ I$ n, b# D) Y& G! B- c" |
  234.     {9 c* m- U. J; W
  235.       file=(*p).second;
    0 p* @! n: W$ \- w) g
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    $ P( T+ g! Q/ B: C7 j7 g0 k7 [
  237.       {2 o- r: w5 u( ~  I, k8 n& ~
  238.         olds=(*p).second;5 l+ O; i- \4 F' u) B
  239.         olds->vers=file->vers;
    ' t2 q& x0 c5 J. R: @4 p8 q
  240.       }
    2 u# Q4 [- [0 [. ]1 F* A  a1 f
  241.       else
    # T+ Y0 |' q0 Q" X+ L1 G6 d$ y
  242.       {
    4 m! h; z0 G8 F& ?) o5 G5 I
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 }: f* n' {) i. J5 P
  244.         memcpy(olds,file,sizeof(UPDATEFILE));( h& S$ q: O1 B( K
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));) j3 A- v3 h6 m* R. U
  246.       }
    : N$ d; o( M* W% D- d
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    . e+ K8 B% F& L* r" o$ h
  248.       sprintf(filename,"(%s)",file->file);
    3 D. j4 C/ ~$ z% x; A1 ^& M3 y, h
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% [8 [9 [; x' @
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }# f5 K/ J. Y; ~. @0 a* w) N  P- l
  251.     }4 o+ K3 C4 T7 z& Y' A4 c3 B# _8 @
  252.     dwCurrFile++;
    % q4 n/ r+ }7 k' |
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ X, x9 _- Z! i: l+ e$ g5 M( h& e# t
  254.     {/ s) w0 T0 z& K4 |# q1 ^
  255.       bSilentStep=FALSE;$ t  G' t1 x4 o) Y7 R
  256.       bCompressed=TRUE;1 m0 v( L0 W8 q2 ], ~' s
  257.       strExtLocal.Empty();1 r) q4 Z4 s* l2 Q
  258.       strFullName=(*i).second;
    5 C( w- w" y1 C
  259.       dwProgramState=AP_CONNECT;
    + v5 W% A2 c2 u% [: t1 Y
  260.       return TRUE;4 T0 P1 [5 U  N5 i( s# D
  261.     }" ~5 [1 X2 E8 X  M9 r
  262.     if(!bRestartUpdater)
    ! y/ o1 {! y- a9 d  e5 f# [
  263.     {0 E' z2 e2 G; j4 T
  264.       int iCurrSize,iFileSize;9 Z2 @' \1 D4 i: T: p' ?
  265.       iCurrSize=0;
    * r$ u$ Q/ {' i- f8 t2 ^. \( F+ I
  266.       iFileSize=UpdateList2.size();
    / l- Z1 k& @0 F5 R
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");, A2 |( {- [# ~
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ! k! H% H$ C0 M' R
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");! A6 L! O6 k; S/ u
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  N9 P' `) N6 u
  271.       Fclearf(".\\update.dat");
    6 E1 c& S# m9 f; T
  272.       Fprintf(".\\update.dat","Bloodyf\n");: T/ B4 m  m( w! F% o4 A) H) [& ~
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; k$ u; y+ C9 W/ f
  274.       {
    % ?5 o  b0 o$ |! g0 ?
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    * L3 _2 ]- `# f/ v% P
  276.         {0 c: F7 ^7 r# O/ j9 n! [
  277.           file=(*p).second;
    $ ~% J2 p) D2 f* j- h0 X
  278.           sprintf(filename,"(%s)",file->file);
    7 ^8 J7 ~# o1 O% A# Q# N7 z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* I' V8 H6 z/ @
  280.           iCurrSize++;
    9 C5 ]% ]4 D/ q, ?# S& e1 ]
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    6 ^1 a3 h' s; \7 G! p2 [
  282.         }% m( Q" n# @4 f# s
  283.       }
    9 L2 P( t( A0 I# A# F
  284.       unlink(".\\update.txt");
    # J# B  r+ f9 H5 A) `$ ~
  285.       unlink(".\\update.tmp");3 X7 G* i- B% H! A9 y7 O" w
  286.       Fclearf(".\\checkversion.dat");
    4 M3 _, G7 }- Y6 @+ _; _
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);* B) d+ Y0 B* e9 d
  288.       if(UpdateLocal.size())
    ' c6 c$ |( S4 `. W* Q8 a
  289.       {
    ; b  V  N' X. L4 t4 x/ m
  290.         UpdateLocal.clear();" E- F3 O  ]( B" s# W+ L
  291.       }+ v, {, `3 p, b! Z+ M& c
  292.       if(UpdateFile3.size())
    & Y1 k, G) d  T
  293.       {
    & z7 ^7 Q, N1 a$ O, h& c6 g0 D# m
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 s# i9 H$ f; a6 _  X. V% ]
  295.         {1 O1 ]) F/ C$ X# R+ }
  296.           file=(*p).second;& I6 h2 f- F" q& U: }- q0 D
  297.           free(file);. L/ J- A$ I% q6 }
  298.         }$ O" i9 ~: o3 L1 b4 V  R
  299.         UpdateFile3.clear();
    4 E5 c" }- Y' W
  300.         UpdateList3.clear();; b' |# z) r6 B- W7 A/ H
  301.       }
    - F, K# F; n9 T% c  n+ ~5 K
  302.       if(UpdateFile2.size())
    * t6 V% ~  u! ~2 \  s% S: x
  303.       {$ d; `; a9 w4 K8 M7 l6 F
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ U' Y5 J1 g5 m+ m
  305.         {0 O: a3 X8 K( Z4 d4 o$ w; u
  306.           file=(*p).second;
    1 T& R( i2 m5 u+ P
  307.           free(file);
    2 V' m. f4 e0 N: m. N
  308.         }5 K9 N1 Z+ b: V4 m3 {3 k* C
  309.         UpdateFile2.clear();
    ) O" ?% I& ?6 Z% i" v
  310.         UpdateList2.clear();
    ; ^) r4 m* [0 m0 X7 k5 P
  311.       }: |% d% U! I  Y$ I( |
  312.       if(UpdateFile1.size())
    & s( q6 S# m4 C
  313.       {7 ]. B5 ?# e# n! T- f
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' X9 f; \8 h' n' N6 m0 U+ |$ _
  315.         {& e8 W& _: @2 t& X
  316.           file=(*p).second;* V8 `% N6 f, I* i9 p
  317.           free(file);1 G$ f: x( A; q5 j" l% n
  318.         }. }4 ~, G2 g: W, {' l3 y* h8 y
  319.         UpdateFile1.clear();
    : B0 J7 r+ Z- v( x. E5 ]$ _
  320.         UpdateList1.clear();( j' S. q' s4 Y+ w
  321.       }/ K9 S( F% y* N% k+ s/ [
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & ^4 F2 \, S* C1 N
  323.     }
    ; E" i+ N( a$ w" }+ a, P; R
  324.   }& y" E2 G* q: ]! v. v3 `) b  |6 k
  325.   return FALSE;* l- x2 D9 r2 s/ X  {; [6 D5 {
  326. }
    + i% y; L- E; N8 D
  327. . D) i! D( [4 v5 A. q
  328. void CRevAppApp::ClearAll(void)
    # R7 ^& C+ S8 `8 n
  329. {
    7 P/ V- G* S4 O: G% y
  330.   LPUPDATEFILE file;5 E+ P* ]. {7 C
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 F- a- T! P2 ?3 e$ E2 u
  332. % {' e4 I6 P8 [
  333.   if(UpdateLocal.size())
    9 N- W( U/ j8 R' K' h
  334.   {
    ( O4 M3 J: L- I! t* y  c
  335.     UpdateLocal.clear();7 `  B4 P6 m! {) L
  336.   }
    7 _/ }& I% d0 N: o5 @5 o
  337.   if(UpdateFile3.size())0 w, j: t9 H# e# L* ~2 z
  338.   {* w$ X2 X  ^0 {
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): X9 t/ K/ V9 P- L! H+ ^$ ]4 c
  340.     {5 V* h; g- M* Y' W- }: x
  341.       file=(*p).second;7 x2 n; D4 t* v: y4 ?
  342.       free(file);$ t0 B7 b& r4 ^2 O
  343.     }
    5 k% c# I% ~9 ?( L8 y$ D
  344.     UpdateFile3.clear();. w8 b  O: s: d
  345.     UpdateList3.clear();$ S: {: g( w6 x; K) o( t$ _
  346.   }; Y( k* ?/ h" D! \7 M$ N
  347.   if(UpdateFile2.size())( `# E/ ?  v/ C$ `9 E6 X
  348.   {! r, z# N, P* n! b7 V& J8 i2 \
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 v1 e4 f0 _! M( p$ D
  350.     {
    % j8 p4 z1 G) F/ Y. g9 j
  351.       file=(*p).second;
    3 v! z$ b8 h% J! y0 t- O
  352.       free(file);( ~% Z, N% A2 e
  353.     }
    ; c  u& x0 R& s% E) `$ v
  354.     UpdateFile2.clear();7 t0 B" [5 @2 i" O3 s- W5 r( |
  355.     UpdateList2.clear();3 J5 G. S! F  z' c  u1 G
  356.   }, D  J: S4 N8 U" N9 ^
  357.   if(UpdateFile1.size())1 I: L. g5 ~4 R: H" F, v+ ^
  358.   {
    3 w7 M; n/ H; {( ~9 U  }3 _
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    5 m& F# y8 [) L: C+ D3 |
  360.     {
    ( V! `, @  P) t$ p# O8 G5 ]( A
  361.       file=(*p).second;- y* Q, i/ b$ i( ^: ^: Z' J# B7 T
  362.       free(file);
    + X5 `# A- U/ g0 X' m+ F5 x5 e
  363.     }4 G, ]) `$ M9 Q( ?( _
  364.     UpdateFile1.clear();
    2 m6 K4 v9 x  T6 j3 e8 r: N& i" D$ j
  365.     UpdateList1.clear();
    1 |5 ]. o1 m- m, C# k
  366.   }5 o0 q) ?* e; I3 j8 ~2 b, a- e9 K# c
  367. }  ( n* m$ s0 B7 k& V
  368.   
    2 ~  w: ?  N' t# G
  369. BOOL CRevAppApp::CheckLocalVersion(void)! ~# i2 t$ m8 p
  370. {
    & V, f/ c( ]' g* r
  371.   int c;: A! J, _: L/ O# I
  372.   LPUPDATEFILE file1,file2;- ]$ Y* U; I7 ]1 P$ x; M. d( Y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    * j: ?+ g) _4 c5 Q8 H2 x
  374.   std::list<CString>::iterator l;! k) }' y6 y' `+ L) ~
  375. 0 j+ \) H, y/ }- |7 A9 `/ Q6 {; g
  376.   UpdateLocal.clear();
    + D/ D+ m: X, x& N1 T' s8 e- g1 r
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);; e" u: d, k$ C, e6 d
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    $ k3 l- g1 H3 o4 R
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);( F* q8 H5 U; I8 U% k% N: A, Y+ n
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    . W% V3 H& n) [' X
  381.   if(UpdateFile3.size())  J5 Z( V+ r9 {9 i( K
  382.   {0 |5 {5 ?( A- g; c1 s9 u
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)3 S5 u( s( P. t) }, Y; Y1 j3 @* Y" \
  384.     {8 D* a* o- u5 k3 B6 x1 @
  385.       file2=(LPUPDATEFILE)(*i).second;' {- S. W2 A+ `0 p
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      [" q6 q. }  l: v
  387.       {
    & R2 c( a& z9 L0 E
  388.         file1=(LPUPDATEFILE)(*p).second;
    : Q3 o: ?, B/ q0 ~: C
  389.         file1->vers=file2->vers;
    * I2 z: U- v9 L6 c9 O- M
  390.       }- I( ~) m6 R8 Y6 p, Z' S6 f/ A
  391.       else
    $ O& m( A+ n/ r, y! c8 K6 F" X
  392.       {
    0 a: w: E; [7 t; R* B
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: L3 ^& J/ P  K6 c  ~) \1 S
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    $ w; T/ n5 }3 y( Y, ~. \
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));* D0 @0 D0 R8 b% W. S. c
  396.       }
    - S9 z; w4 V! G) u* F5 [
  397.     }- c! k5 O- L* O
  398.   }0 r/ Q' \5 g5 s+ h. B
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + i+ J# C  g/ b) X+ F0 h5 N
  400.   {0 v/ u; O; u% @, p; d) K
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())! r/ I9 I# D6 @
  402.     {# Y2 G( Y) F, |: p, i/ G& a& r
  403.       file2=(LPUPDATEFILE)(*i).second;, L; S- c5 }8 B  z0 F4 n! p
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 b% K# L4 P* N/ Y
  405.       {
    / ?6 B' z* F* Z! f; A& s9 p5 G2 N
  406.         file1=(LPUPDATEFILE)(*p).second;7 m2 `' y) n: c5 X) j
  407.         if(file1->vers!=file2->vers)
    5 k6 M& ~4 ?$ {  C3 q( i8 v
  408.         {. H  b8 M/ l, t0 S7 y7 a
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% @  T' ?9 v+ l
  410.           c++;+ K5 I7 G6 u6 i- ?! q* b, e: i$ ~
  411.         }
      {6 w, ^# o. l2 a- c
  412.       }
    % [* {4 U: B2 k& v& }; a& T1 [
  413.       else# _/ G1 b' g6 n" u* m
  414.       {! r4 U+ H6 U& w( h1 D" ^: s, @
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. T9 j1 b) o8 e1 Q. h; o. Y) `$ |: T
  416.         c++;
    4 K- v2 O3 K6 N4 \# x( M" I. t
  417.       }
    $ x% r! ?$ n' U; Y% t' P
  418.     }
    3 K9 c( u0 V$ Q) z
  419.   }1 q% a; D) g( W# X, Q* I
  420.   unlink(".\\DownLoad\\update.txt");6 z" J' N1 C' W
  421.   if(UpdateLocal.size()) return TRUE;
    - ?; r- V  U6 n6 F2 F
  422.   else                   return FALSE;
    / V* d/ R! _% k/ }
  423. }+ K+ i/ e0 E7 O

  424. " H% ?3 ^( I* J# O& q' E* a! L
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"* E9 c2 f& G0 P5 j7 u( O  v
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"4 w' C5 R* m% A4 `" j0 p* r
  427. 6 @2 z/ f" z" `1 J7 T
  428. ( T8 j1 ^5 W/ g/ {9 y4 T0 `1 h
  429. 2 T# I, }: \; Y+ |! \
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)4 f3 e% U0 m: ?1 P
  431. {2 R2 y( U- F% @2 M% C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;; k5 q# w1 _# P, m& P
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 P% O" V5 `9 L' d- e/ ?
  434.   {9 Q- `1 H  D3 i, J: V
  435.     char szLanguage[50];" c( @4 \/ i7 C' A% B
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . I* |+ S; H0 O0 n  \3 K
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # P% i3 U+ P7 P. b* Q0 \6 w
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; y$ Y- b6 s$ {! x+ s
  439.     else                                   m_iLanguage=ENGLISH;
    - u- H! x% x  c. V; q5 G$ L
  440.     char szRegister[100];
    ; x1 z3 j" k( k' W; x
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& s: p( m. n. s9 G% m
  442.     strRegsName=szRegister;3 h! m, Q& N2 u# S6 [9 K4 j+ v& i
  443.     char szPatchURL[100];# K' L" W' ]9 z$ F
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 O* X/ s; ]9 w! s0 f7 e
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 `; ~) k, L# H$ d
  446.   }# X1 m4 d1 r! H3 k: K; M
  447.   else
    2 B8 S* T2 Y5 k7 ?6 S3 W
  448.   {, Y9 l5 T2 w+ m7 F  ?
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , X( {/ R+ e% z! D7 \7 M" \
  450.     strRegsName=DEFAULT_REG_URL;
    * o. [0 [1 X0 h2 f
  451.   }
    / Q+ u( t( [7 r) J1 c
  452.   if(GetFileAttributes("hosts.ini")!=-1)% V4 }; _8 `9 ]
  453.   {
      r2 X- t, u( W5 {% D$ K& C7 e0 h
  454.     char szIP[50];% Y) b  W" d1 o+ f
  455.     char szDIR[300];- ?6 q8 e" s; }* x' m
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    7 z& O9 W( k& Q: c  U# c
  457.     {! o* B0 y! x6 N7 h& ?+ f
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");9 v  z2 b6 P/ f/ P, R0 A( g% q! D
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");2 {' U) g8 X4 k3 T" f% r. M
  460.       strHostName=szIP;
    0 J' v( M3 ]2 W$ e) t  t
  461.       strHostPath.Format("/%s",szDIR);
    . X: m* Z! ?5 p3 o
  462.     }. j  K. B) Z9 N" A
  463.     else
    6 d% k9 S8 V. I' S6 K, A
  464.     {( Y  Z% X% c& L5 A0 v
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 W/ R+ [7 `& Y* ]& L9 l
  466.       {
    + E6 E/ H- l- _2 S' b" k
  467.         char szLanguage[50];
    # A/ ^" h, L; P8 @( V# O5 \, z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 _7 V. j( e+ H* r3 ^& q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & `9 x: P9 \! d3 b' ^# K; E4 {  o2 B' S" V
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / @2 y7 n0 Y$ }+ k
  471.         else                                   m_iLanguage=ENGLISH;' Q8 G% d4 Z0 z7 h' v) u
  472.         char szRegister[100];
    ; P& ~+ I- d5 B& R
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 x  P( m% d, M
  474.         strRegsName=szRegister;
    $ z3 R# n, B( H& z; _4 c
  475.         char szPatchURL[100];* M4 w. R' @$ {
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");# _$ h8 O, |' X. s
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - M* w4 n2 n2 n; g/ p& L  W
  478.       }
    3 J/ D1 |2 E/ r' Q" b3 e8 @- ]
  479.       else
    # L; \5 Q9 F! i- c% C
  480.       {
    ( Q* K- B8 N! ]' V- O
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# E8 U6 X, ?) w3 ~
  482.         strRegsName=DEFAULT_REG_URL;4 b% y- C2 d) S
  483.       }
    3 p+ y0 D; l' ^; h+ v6 \$ c
  484.     }
    . a& {+ q$ b+ w5 o
  485.   }" {% U7 b" _( A+ C. d* x% C& A
  486.   return true;
    ) H' t5 J5 O+ k, P
  487. }
    3 Y4 a- V! u% R' S! U* b1 F' R5 H
  488. ! s: Q0 @" S( s2 j) L
  489. #include ".\ZLib\unzip.h"6 a! c9 a6 f' u3 Q) D& X* o1 Q
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    6 s/ m. \1 G1 h! t- T# T8 [7 J
  491. /////////////////////////////////////////////////////////////////////////////
    $ T- U; }) \1 g  g  {1 S9 i, W0 d' S/ s
  492. // CRevAppApp initialization: s3 M9 H* }5 M& J4 e

  493. 7 t* Z3 A1 V  z7 n
  494. BOOL CRevAppApp::InitInstance()
    2 a0 Z' F9 y9 n: M
  495. {/ D" t4 v! L% l" S: H7 Z* q# T; [
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];2 L) e1 \) s# t
  497. - t  n0 \& `2 m' x& A; }
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);9 u; i& p# o$ h; M' V
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))0 }5 e* R, V: K' i8 I6 t
  500.   {, i# M6 E, P1 }4 f
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");: U% f: c* C! A3 ]5 J: h- d
  502.     GetPathFromFullPath(szPathTarget,szPathSource);8 }1 |% _+ g; U  O- r0 n8 X0 T
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))8 k( n) U1 A* Q2 D5 x
  504.     {8 l; h9 m% p/ x3 c) d' b
  505.       strcpy(szPath,szPathTarget);( h) [$ U! P( O. z# |9 q
  506.       SetCurrentDirectory(szPath);
    & S6 I6 k" @+ h# i- `
  507.     }4 |0 b, v" a3 V' H2 D% o/ E0 U
  508.   }
    3 d; a+ v4 z* h2 Q
  509. #ifdef _DEBUG# Y! e/ x" ~* r: Q, G
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! c" R1 ]: D- G, |
  511. #else( W( O4 b/ }; s6 w8 M
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ' b6 k3 L/ K# g! m
  513. #endif
    * Q: F, K# ^+ l' P7 R8 v  j3 R% n; A
  514.   {
    # o6 o/ t  k* w: W8 q/ ?
  515.     char tempFileName[MAX_PATH];
    9 N* K+ @: Z% Q( p. D1 g7 e9 Q
  516.     strcpy(tempFileName,szPathSource);9 _* @; T  P& J, |
  517.     tempFileName[strlen(szPathSource)-12]=0;
    6 }5 e" A* [6 z1 ~' {' D6 H1 _
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    . {6 y! n8 w# O1 B0 x* x( j
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);4 P' r# g; i8 d; c  |: i
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);9 m1 A3 q/ Y( H/ t8 O0 c0 J. b' [
  521.     return TRUE;
    ' b$ p1 ^5 U1 {4 D/ y" {
  522.   }
    $ P0 T. Z2 Y( L' N4 D" i
  523.   // Nuke 0118: Delete run.exe9 S/ _  k( e( L4 z
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );3 h! i9 ^- q! n* l' N5 k! |
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    $ n; M5 l( P6 l! ~9 Y
  526.   if(!ReadCfgFile("Config.ini"))2 V8 b6 b7 ]4 X+ y+ i9 k0 t
  527.   {
    ( e6 {! S6 O& p0 N
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    9 ]0 F$ {) a+ l9 B3 s
  529.     return TRUE;
    , D9 s2 [6 c5 D  y: G
  530.   }
    ! I/ X& @. H% P% P3 ~8 A
  531.   HANDLE mutex;
    ; ~: c3 B$ W9 y1 O
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))( X$ c# _6 `5 r7 p
  533.   {9 j( B2 c6 V6 h8 l4 l3 ^6 q5 @6 R
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    5 o3 k: s. p; i- F# z/ P7 m0 Q
  535.     {
    ! ?3 G, i% p/ H# N! x6 y" \* x- u
  536.       CloseHandle(mutex);9 @& Q6 ~. b( H1 Y: S* {( e& @6 h
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);5 }7 y6 R5 F, x+ T* K
  538.       return TRUE;  Y  |  D$ H+ Y: M3 J
  539.     }+ Z" k, ]0 L1 b
  540.   }  
    4 w; h# Q4 I6 V+ S8 ^7 t9 }$ z
  541.   CloseHandle(mutex);( s1 X1 V5 l( |8 l8 U
  542. ) K* Q8 }6 T' c! z6 T9 _
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);9 f5 y- f& y. Z; @. H9 ~

  544. ! e% O8 r- g( c- m* k$ t' M. }# H, o
  545.         AfxEnableControlContainer();
    * D+ s1 Z2 [' l1 ~. E
  546. 1 J# X* I) H+ z' K+ e
  547.   bCanUpdate=FALSE;
    8 o2 p' g" A% V
  548.   dwStartUpSteps=1;# s9 Q/ y8 T2 |
  549.   dwProgramState=AP_NOTHING;
    3 B9 Z( M0 U4 l4 d+ E: G  f, m
  550. 0 w' n7 d' v# s0 \
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    " ^1 i$ e# l' G7 C0 @  [2 V
  552. " t( q5 e7 n3 a9 u0 e0 U
  553.         // Standard initialization
    ' M( L& \5 B4 _  D, L6 M
  554.         // If you are not using these features and wish to reduce the size
    ; S0 o; l9 [+ }+ g
  555.         //  of your final executable, you should remove from the following
    0 S5 C" h7 k) n1 d
  556.         //  the specific initialization routines you do not need.
    7 w8 ~0 ]% l9 b
  557. + i$ m( F$ f3 s3 Y
  558. #ifdef _AFXDLL
    # X) e' {  B3 i7 y! ~9 _
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL# L( Q$ ]) y6 K& R( p3 w4 }  f% `
  560. #else
    * ^. _6 R5 W$ S% ?. _0 `9 ~: `
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically6 Y% Q9 u  u8 H
  562. #endif
    : ^! [) z% k$ J8 S
  563. 4 t" ]0 q! z( c  j; h* L! h
  564.   dlg=new CRevAppDlg;
    . E  a( D" f* \$ P$ x4 i
  565.   dlg->Create(IDD_REVAPP_DIALOG);3 ?. B) x$ _; ]& a& R
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + I: o' a! k: v( s6 H+ O! m4 b
  567.   m_pMainWnd=dlg;
    1 N4 M* M! R6 u4 [% W8 Q" D# S
  568. 9 g: W: J# M; j( F1 u& w) {/ f
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 {5 J. D* G! s+ w
  570. * y- L% `$ U( {. p# b, D  o$ g/ K
  571. //  GdiplusStartupInput gdiplusStartupInput;# s& L/ d1 G0 ~$ d; F
  572. //  ULONG_PTR gdiplusToken;7 P2 R+ E, O2 N' X5 G' f4 W) E( ^
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    5 ?  V/ N3 O; R' h  l( c  S

  574. : P5 U0 |! F- d
  575. //        CRevAppDlg dlg;
    ( ^0 C2 n$ E3 S/ j" D: ~  ?6 v
  576. //        int nResponse = dlg.DoModal();
    ; f& B6 A3 O$ i5 @* ?% W
  577. //        if (nResponse == IDOK)
    7 e! r: B2 a; l) x  b
  578. //        {0 O+ [: @. B: B+ S3 L
  579. //                // TODO: Place code here to handle when the dialog is8 s' b, Q1 A9 u* @6 Y
  580. //                //  dismissed with OK
    # B1 a! }! c) Y
  581. //        }
    9 B# m: A: f! K
  582. //        else if (nResponse == IDCANCEL)
    ' G5 J* q: M( R% N3 Q
  583. //        {
    8 ~+ z2 {! l8 H( g0 g- n
  584. //                // TODO: Place code here to handle when the dialog is6 k9 N/ Y7 K. ]# e$ ^
  585. //                //  dismissed with Cancel
    ( M: U; U2 M+ n
  586. //        }: A; m9 G3 u4 ?8 w' t& L
  587. - z3 X% ^% M9 g- V1 @% h" @2 j
  588.         // Since the dialog has been closed, return FALSE so that we exit the- \/ M7 V* Y* W2 f$ K5 q
  589.         //  application, rather than start the application's message pump.  B, t% T5 W  m
  590.         return TRUE;
    2 d; T* \5 d: P# C
  591. }
    8 ?; H5 b4 d* [

  592. $ e. L: N6 ~' H  ?* P
  593. char *CRevAppApp::strtok3(char *pSource,char *token)$ A! g$ q3 a( T- P8 W. Q. s
  594. {) I2 c6 y; q  ?# |7 H+ ]6 Q
  595.   int i;$ U1 j. m' h$ ?# z' S0 k
  596.   char *szRet;
    - S2 h9 [. c; }

  597. 5 ]2 ^' _: N* s/ f' `6 S6 v- A
  598.   if(pSource) { itoken=0; sztoken=pSource; }( i# b3 i9 p5 A6 W* N
  599.   if(sztoken)
    0 ^, x0 Q: o. L' d) K5 Q
  600.   {% k* Q' A% k: Z+ O( H
  601.     szRet=&sztoken[itoken];, d2 n# H; l1 S* Q+ P5 l
  602.     while(sztoken[itoken])3 _" ^4 ?+ }; v& y  m
  603.     {. d! D* u! I+ k* h+ ^
  604.       for(i=0;i<(int)strlen(token);i++)5 R. g8 ?- @% j+ ?& L
  605.       {: X/ f/ F1 C6 z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    6 h* _9 R- S" T0 U# q) L) n
  607.         {% q5 U1 J& t5 a' G2 i
  608.           sztoken[itoken++]=0;5 I! Y' O: a4 L  x6 [9 R$ O: h
  609.           sztoken[itoken++]=0;: H( ^& c. X1 D5 v9 w( X7 F
  610.           return szRet;
    4 @/ D: b( V( c. W5 q
  611.         }$ Y" {* A5 G# ]1 i) ?1 N
  612.       }$ ]) P+ g3 P: s5 z
  613.       itoken++;
    : E8 t6 d8 [# u6 B" H/ E
  614.     }5 |; s% w" o: J; a6 N# x( s
  615.   }% K7 h' e% N7 G  y/ X0 E
  616.   return NULL;
    $ `' `( _  l3 B) K
  617. }
    6 y& z$ K% U, M9 N: k

  618. + B& R' }+ O% n4 q* r
  619. void ProcessProc(long Total,long Current)
    * m. X3 e  M- t& H9 L: t4 |
  620. {
    * }4 v, v" _3 z: ?& p
  621.         MSG msg;
    # q( h, K4 ?1 ~3 T; c1 c3 f/ T. R
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    / k$ c5 ]" }4 D$ _: ]! ^2 {
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
      {$ V8 n' o; ?" D6 k6 k
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))' A+ C, e$ Z, g
  625.         {
    . [' a1 B3 ^, H8 z* s5 P
  626.                 if(!GetMessage(&msg,NULL,0,0))
    % h/ J: h( ]9 N3 ~; B3 V: c
  627.                 {
    ' S2 V0 ?6 k2 Y
  628.                         return;7 p: e. ^$ z) h( t- y
  629.                 }
    + H, k1 Q. {/ L8 J: M+ t  \
  630.                 TranslateMessage(&msg);
    , p  L2 `/ c) M0 A
  631.                 DispatchMessage(&msg);- a2 z: s" E2 e, }1 y% q" G; k" j1 Y
  632.         }        5 p, p, r1 T$ R/ `% b- }
  633. }4 K5 w1 ^+ W2 o' b& t
  634. 3 Q* t* ~$ @  J
  635. BOOL bFirstChar=TRUE;' S- n1 x) l$ x) V) p! A
  636. - N7 D3 \- Q1 \6 C
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ! Y, ]+ e' G6 K% u3 q
  638. {
    1 A& @% N+ t! G% F
  639.         // TODO: Add your specialized code here and/or call the base class
    * W" l- x6 B) W3 ~. z8 F
  640.   switch(dwProgramState)6 V5 e% V+ \5 C; T! Q7 A
  641.   {- e6 ?7 X$ m# M. X5 A4 K
  642.   case AP_NOTHING:: A, @6 r+ U7 D& p7 Q6 \
  643.     switch(dwStartUpSteps)0 {0 r2 G4 \2 R
  644.     {
    : g2 S3 r) p, N; i0 D0 Z
  645.     case 1:
    1 O( x; ~2 C  `6 `6 }6 j
  646.       {
    , d; C" `& ^; R3 a. k: S
  647.         int i;, V" n2 m( p4 f2 }$ r5 P  f+ \' ]' C
  648.         CDC *pCDC=dlg->GetDC();
    1 W. v% _# a0 O4 T- x
  649.         HDC hdcwnd=pCDC->m_hDC;
    * B1 G* V0 X; D4 x' S4 ]) j6 C; l
  650. //        Graphics graphics(hdcwnd);0 q7 B( H9 l  @, c; _% u6 T' y% G# n
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ; e8 e* k& U& o8 B
  652. //        INT iWidth=bitmap.GetWidth();
    3 m& [$ m* ^: U# n& J# I; w: J! V
  653. //        INT iHeight=bitmap.GetHeight();
    / I0 I$ v' o& }, u: I
  654. //        Color color,colorTemp;( N' y: g& y% X9 B  F: d
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ F2 G: A- `8 W8 V5 Q4 T
  656. //        {
    # M% s! ?1 v' {' Q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ; o" C2 A, T' d$ S* U9 ^' O
  658. //          {
    / ~4 G7 A3 ?+ y5 u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);8 m# M- s/ a& g0 o, _3 v. c
  660. //            colorTemp.SetValue(color.MakeARGB(
    ( }6 _6 S) m$ w  |' S; V4 g' D
  661. //              (BYTE)(255*iColumn/iWidth),. [4 L" Z% `' E; a
  662. //              color.GetRed(),
    9 L3 k$ h- x) m
  663. //              color.GetGreen(),
    : f( {7 _& o; r/ M7 l1 {# d
  664. //              color.GetBlue()));
    3 I4 f7 t2 i$ l' K8 s# a) l
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' `5 D! x) U3 ~( s/ F$ D& J
  666. //          }0 f: G: M% g$ H; ^; y
  667. //        }
    + @. b+ D, y0 b/ r& l. Q+ ?
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);) z5 m5 l# q4 }' K8 {
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 Y  V0 O) E( n: _" X* v6 {7 a* j
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    1 n2 q* S" Y  L: B
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; R% K+ p  r; W" g/ K" r
  672.         for(i=0;i<240;i+=8)
    % ]$ q( v- h2 r3 F5 F) A' @+ d
  673.         {. B2 b+ ?/ R: c  f
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) K/ w# J- M4 ]* c9 j
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 W- \7 K; U; \* y. T0 R
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( @9 q+ M7 d* u3 m
  677.           Sleep(33);
    4 Q! I  @( D$ r! z( h+ t, Q
  678.         }( J" Q* q7 Z& c9 m6 P
  679.         Sleep(1000);
    * I! f1 B8 z1 M8 b# F/ Y% R3 e- R
  680.         for(i=240;i>0;i-=8)* w( T( i* B$ w1 V, `0 K
  681.         {- d, X2 [6 y: ]1 q$ [5 h
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);* |- n1 _; c0 k4 @6 `1 q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , P  d$ c- y: U) B, i! f" U9 G
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . n/ R/ z6 ^2 ?0 y2 u; n! u7 L
  685.           Sleep(33);4 m. y9 s' A0 j  |& `$ t
  686.         }, s& Q" a5 d1 e% e% l+ f
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 N/ O# b+ P" x- Q7 D, R
  688.         dlg->ReleaseDC(pCDC);8 @5 w0 s, E, z
  689.         DeleteDC(hdctar);& {- N, {; E" B0 c7 c" f
  690.         DeleteDC(hdcsrc);8 x+ h. _) ^5 |% s* w: [( F
  691.         DeleteDC(hdcorg);7 J7 o: e) k8 M+ v
  692.       }+ O! ~& W7 @7 Q4 I: k2 S, O: {
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);, a! D2 ~" F1 ^+ K' }
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    2 e* t* d5 l8 G# a
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    6 {! ]! v! e- Y3 ]  n8 k
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");! N3 B5 C9 c. g' K4 x, h
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + H4 ^( e% }' ]5 d; N- V
  698.       if(!Dn.Connected()), b) u! A- w# N! U- x5 Y2 u
  699.       {
    ; }/ `0 D% C, s6 L  \+ i
  700.         dwTotalFiles=1;
    : O( Y. l6 d8 t8 @# y5 e
  701.         dwDownLoaded=0;, r. N( O# t! I' F6 U. Q
  702.         bSilentStep=TRUE;: T$ @9 [  V- \+ ^* m: v
  703.         bCompressed=FALSE;
    0 b5 t; |0 ~: _: F; r
  704.         strExtLocal.Empty();
    - n& h0 F8 X6 R9 g! e% v# |
  705.         strFullName="readme.txt";
    # @. D, D3 h5 {" x
  706.         dwProgramState=AP_CONNECT;8 z+ c+ {8 ]" O7 i5 l
  707.       }# V) a/ Z7 U- i) B& q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 v$ T) G. l( p6 @  H
  709.       dwStartUpSteps=2;& H  b7 T; \( Y! t  h
  710.       break;( Z. z! d2 }$ ?2 m
  711.     case 2:
    . ]6 A+ P6 o, S9 e) Q* q# B
  712.       {0 E, i; v0 Z7 \. H( \- }" y
  713.         int iEOF;3 ?+ }8 r- z- B" O8 n
  714.         FILE *fp;# U5 a+ m/ y% n4 z8 d) L
  715.         char szString[512];" S1 w" m/ h( |; a  u+ M
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");/ y5 t( V0 c: C, T% m2 }. W1 q6 c
  717.         if(fp)6 p) @/ L# ?$ |  E* t$ ~' V; a
  718.         {  @7 g, w# n* p/ u7 P
  719.           do4 x* C, w; {& O2 V! s' M' c, k+ G
  720.           {
    - y5 S% ?3 a* C" Z
  721.             iEOF=fscanf(fp,"%s",szString);
    ' b( `3 M! B6 M9 [8 E
  722.             if(strlen(szString))+ i; Q$ v7 e% A) C/ J
  723.             {
    5 @$ R6 T0 k. j6 i% X1 t$ @
  724.               if(bFirstChar)% ?" B9 r0 s% T# {' A
  725.               {" E% L, \7 T; j3 Z7 q; \
  726.                 bFirstChar=FALSE;9 y( Q* f! R4 Q) _
  727.                 bConnectIsBig5=FALSE;) ~! g" o1 [# D* M
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 P( c( G1 S! h+ G: w
  729.               }
    0 T/ l2 k0 }( N; r
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));: h/ r0 M1 }' L" \% x& R/ g+ d
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));& d8 \9 q8 r4 H$ I- v% O
  732.               dlg->m_ListText.AddString(szString);1 q, r/ @; M2 x5 i
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * x& R4 _1 r$ Z2 ]
  734.               *szString=0;6 I- J, N6 Q3 ?4 D+ s+ n' ^4 O
  735.             }4 I- \! K# a3 |
  736.           } while(iEOF!=EOF);
    7 R$ [2 M' ]" u. \6 ]. A
  737.           fclose(fp);% S4 K4 s: P% U$ B' i1 k& g
  738.           unlink(".\\DownLoad\\readme.txt");
    ! D& Z3 ~4 ]2 J# y: ~
  739.           dwStartUpSteps=3;0 j" s4 l+ `! E$ c! X1 E) J! q( L4 }
  740.         }
    0 \- c7 Y5 G5 v2 o: k5 b
  741.       }2 B6 \! O5 x, J8 j/ b
  742.       break;3 I/ t. s- F$ s% J* g
  743.     case 3:8 q7 g/ `2 ]: O1 H+ x& H3 J& J
  744.       if(!Dn.Connected())2 v" K9 e: V* E, E1 E3 i; h5 \
  745.       {
    & J* m% W5 v2 m  t3 Y0 d. r. D
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    8 d% `6 A% {4 b( j
  747.         dwTotalFiles=1;- H! [; q8 s3 w% A
  748.         dwDownLoaded=0;. I$ y) h) a. z7 M
  749.         bSilentStep=TRUE;
    1 Q$ J8 S8 N) B; w
  750.         bCompressed=FALSE;
    1 }6 _5 j2 H$ ^% H
  751.         strExtLocal.Empty();- N( z5 ^. a8 c* B5 w7 y
  752.         strFullName="checkversion.txt";) b% M: ?2 x& N9 d* G/ L
  753.         dwProgramState=AP_CONNECT;
    - b5 F! M, }4 b: w/ ~/ \5 A$ h% g6 `
  754.       }
    % K' z7 X4 }4 k
  755.       dwStartUpSteps=4;
      X8 L/ m! _+ L7 \
  756.       break;
    + k% c7 |& o- A! o. H" F6 C
  757.     case 4:
    & |4 O$ N! |3 Y
  758.       {
    5 {! |. P1 T0 [2 x5 D
  759.         FILE *fp;
    . a; e$ h# l+ X/ u7 y& z- M: |. y
  760.         char szString1[128];, M$ \3 X" l2 u6 Z
  761.         char szString2[128];
    / s# S, {5 ^7 |; W6 [6 w* |  P0 j
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");, x! w* A) g) N3 v6 I% ?
  763.         if(fp)
    : d& E, b' t& B- V4 ]
  764.         {0 E. I% ?+ R2 q% q" F
  765.           fscanf(fp,"%s",szString1);; A4 `$ K" V* }9 ]5 K9 o" {9 E
  766.           fclose(fp);
    - f/ }* e% h+ r
  767.           fCheckVersion=atof(szString1);' B. f  `7 E2 S7 G  v
  768.           fp=fopen(".\\checkversion.dat","r");
    ' t* o$ Z5 l) c$ s! M: M
  769.           if(fp)
    $ p! }9 _/ g( d; U, G
  770.           {0 S$ i2 c: s$ Y8 s
  771.             fscanf(fp,"%s",szString2);8 R* B9 ]$ |: |' E
  772.             fclose(fp);9 C0 {+ N) N1 [5 M' L
  773.             if(atof(szString1)!=atof(szString2))& y2 e$ [  B  \$ G
  774.             {
    $ t8 P, l# b4 ^8 m8 e
  775.               if(!Dn.Connected())' Z, d+ {7 ?8 s8 c
  776.               {4 r, D8 ^6 V. J5 I3 R4 M' @
  777.                 bFirstUpdate=TRUE;
    4 }& q$ C( \* X
  778.                 dwTotalFiles=1;* U1 H6 i2 Z$ `0 |7 E
  779.                 dwDownLoaded=0;% @2 ^9 w; r$ ?7 ^3 P9 x
  780.                 bSilentStep=FALSE;8 }+ G; L+ f0 C, l$ m. Q
  781.                 bCompressed=TRUE;/ ]2 J3 N* L; S  C7 v8 v8 H
  782.                 strExtLocal=".\\DownLoad\";
    " R/ w! p) v" k& o, S) ^
  783.                 strFullName="update.txt";5 {; N. w% |" Q& D/ o! w
  784.                 dwProgramState=AP_CONNECT;9 z$ G2 c* R# L& D! R4 f9 \
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + I5 N: z' O! Q" U
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");+ o9 Q. J0 i1 E% k; _3 T3 P  O
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 p9 b1 u4 y( U: i- j6 l1 S+ b/ v
  788. - U/ X7 x4 D: J; Q) K* l* m
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 u2 m6 l3 i" S7 ?- [
  790.                 unlink(".\\DownLoad\\checkversion.txt");2 P" }$ P+ X1 |, I/ V* t5 X
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)( h: D& ^3 Y9 u( t# t
  792.                 {- Z5 Z) n6 S6 M- Q/ l1 A9 G$ O
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    * d9 r4 R% F* f9 B; i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    + j+ ~3 P# X" U' {& g* g& v
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ) i( c; V5 ]+ u
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. N& D. L, U) `# s+ N( h
  797. 2 E0 Q( Z. Q6 ^0 X% P9 Y
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# l0 B$ @4 H( U
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 u7 |4 P. x3 y: [# O5 }3 Y. D1 L3 C
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 d0 L( u) r$ j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 _! z" C" o, o6 T' _1 E- z  h0 x
  802.                 }; w  Q8 @! b+ V& {8 R; b! B
  803.                 dwStartUpSteps=5;
    - Z7 {- ?9 O* b* o: E6 X: G
  804.               }
    ) S6 Y8 u  s+ M. b: X* _& \" z
  805.             }3 |. [  W- }8 w9 i
  806.             else4 X3 M8 j5 g6 K  c* c
  807.             {
    * Q4 E. d3 [3 `" A; o
  808.               unlink(".\\DownLoad\\checkversion.txt");2 l. J3 C2 Y0 E8 t6 Z" i
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! {* _- o3 ~' \) O9 Q4 d
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    # T3 L3 R, j+ K& y4 ~& s4 N7 P$ e
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");. R" m7 B, D5 y2 c6 P
  812. $ p; N1 ~0 v; O; q1 s  P
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ o$ ^1 i" x# K. z7 P% r
  814.               dwStartUpSteps=99;- e6 {8 ~$ t4 @5 s. j% d
  815.               bFinishUpdated=TRUE;
    - q9 v5 o. c7 C  O! i9 g
  816.               bCanUpdate=TRUE;
    1 [5 }4 W, b; U! D: H
  817.             }8 H. L" u: I# N" R7 W
  818.           }6 E' y9 N- a- i0 Y3 n3 r# i# U* M: s
  819.           else
    7 v. ^+ y# e! K' h
  820.           {
    . u, l( j4 y1 `; c8 [: K
  821.             if(!Dn.Connected())
    ' ]' g7 ?- O1 l) N) X4 u
  822.             {( Y/ R; A: v. i7 W$ y+ M0 @
  823.               bFirstUpdate=TRUE;
    ! l: j6 D, A% M; S  \2 L; o$ J. D
  824.               dwTotalFiles=1;" D, }4 b+ L2 Z$ t* U$ x
  825.               dwDownLoaded=0;
    6 U) Z8 H9 m% a$ V6 {, Q
  826.               bSilentStep=FALSE;
    6 f6 c: B* H6 k1 h9 Z
  827.               bCompressed=TRUE;1 `* w5 U+ m2 R
  828.               strExtLocal=".\\DownLoad\";
    8 ?% l5 }$ h% m0 ]
  829.               strFullName="update.txt";% m9 f9 }9 g' p8 ~( B
  830.               dwProgramState=AP_CONNECT;
    : o( q9 B. a; V9 @8 n
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ P) `! Y, v: U: c0 a+ i
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - X" L) T! Z4 D, c, P
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : p: D8 ]' T) X; R! V' _7 Y
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 Z$ w5 B/ I, `( ]5 J# x8 B  N
  835.               unlink(".\\DownLoad\\checkversion.txt");
    0 X, V6 s2 f6 r2 _8 E6 T! C! V
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
      P$ s. L0 V( s( {5 b
  837.               {
    , H; [# y7 Z3 E4 O
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    3 a. }/ d8 e- I/ m3 ~
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");/ E, e; F$ ]  \* h4 h2 I/ e
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");: P+ w* H, F) Q; Y/ d2 Z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  H+ F0 }! V! v: [/ \+ Q
  842.                 7 D: Y6 ~- I) C2 ~9 _& e6 _
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");+ p1 E. z  H( R: M. E( ?6 E
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");# o: b! i7 U* C, c
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");0 b" \: l9 ~; {9 \- |: G" B6 K, {
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' T1 |. U9 [7 i. e9 d; }
  847.               }
    ! @) X) k4 v" K  O9 d: \2 D
  848.               dwStartUpSteps=5;
    6 T$ E8 L2 z) t. h" v  A/ C" u' z, ?
  849.             }# ]" L' C8 P  h, J3 y$ A8 L
  850.           }# m4 ~' a" \# b& z2 k
  851.         }  G: N) O! u' ?* e! T
  852.         else4 k1 W4 Y. Q+ s3 |0 Y9 s! b
  853.         {0 u3 n9 S/ e8 j
  854.           dwStartUpSteps=3;
    6 G1 g" O1 d, ?6 H
  855.         }9 i+ D9 F% h2 P9 Q3 i/ _; N& y) t1 y
  856.       }
    ' t% G8 w3 {; c) Q: w4 Q: L, f& w/ V
  857.       break;
    - ?( [$ f! _- n$ L& V  v; e
  858.     case 5:& i! t( [$ O- k2 Q" H, D
  859.       {! N, a- g  H4 S6 o' f- ?
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    : A+ w' [- Z) b4 Z- @- \5 ?# g
  861.         {
    " f$ }4 e9 p- ]
  862.           int opt_overwrite=1;
    - P& f) q% N! F5 Q4 y* G% q0 I7 r
  863.           int opt_do_extract_withoutpath=0;. l! s2 _+ n7 Q: O- G. O( `9 p4 ?
  864.           unzFile uf=NULL;7 f! ^# D* x" v( f
  865. * @1 }+ t+ n8 P1 ^0 _
  866.           uf=unzOpen("Wsa.zip");$ {# s5 b4 |  Q* ?) w" J- }# |
  867.           if(uf)$ W0 c, N! D$ y- r' u% d: k
  868.           {1 P3 S' h' N& Z& H* \5 M8 [
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);0 k: |# \- P$ F% G( Z
  870.             unzClose(uf);6 y  ?( }7 t5 o: d
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    , }9 ^: F1 Y8 b$ ]" x* F* h
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");/ \  D5 l% v. T9 e8 ~: d1 X$ E- V- q
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    1 Q" x1 L# ~  k& m
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) @: Q1 x! }: Z8 e
  875.           }
    # l8 U" |4 m! s9 H! S. r& h
  876.           DeleteFile("Wsa.zip" );, _8 o& h, G7 j( `4 c
  877.         }
    % p. Y8 n% c  z; V( E3 o! n

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

% v2 M* }$ u2 w7 l; v3 g) V; O

評分

參與人數 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-18 00:26

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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