CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
2 h: k( ?. n. ^2 o# J
  1. / RevApp.cpp : Defines the class behaviors for the application.' z" h7 A8 N: _& l3 e+ R
  2. //$ X$ w3 g% ?' P8 O) @2 P
  3. ' F& ]: S1 w% H  v
  4. #include "stdafx.h"4 g2 |) x8 J* N9 K- L* k

  5. : P7 N. }1 S& z
  6. //#define UNICODE
    ' _' `8 ^/ e/ T  V! y
  7. //#include <gdiplus.h>
    ) m5 L. n: y: x5 r3 f
  8. //using namespace Gdiplus;
    ' l, t+ d( ~  U
  9.   o2 t2 V. T& {$ w) i8 r
  10. #include "RevApp.h"+ M' h, {- ~, V- D' y/ U2 y2 c
  11. #include "RevAppDlg.h"
    ( @4 m$ h4 q# W3 }/ ~# b& X

  12. ! ^, ~5 R; G5 O1 s' D5 M% `
  13. #pragma warning(disable:4786)& l' Z0 _1 F) ~+ R' x; I
  14. #include <map>, Y! m1 c, _' e9 n
  15. #include <list>7 r& a% c; @9 H3 m: h
  16. #include <direct.h>
    3 I9 a) B9 Y7 c  p7 ^2 x3 l* b
  17. 3 e+ q( }: f! i: Q4 E, R
  18. #ifdef _DEBUG
    " a* O4 @, U0 p6 ?, v3 F3 f) U
  19. #define new DEBUG_NEW2 F& u+ ~& c6 X0 G
  20. #undef THIS_FILE
    , u3 v$ ~, h, [7 b
  21. static char THIS_FILE[] = __FILE__;
    # v  Z$ h. P! A! K) G
  22. #endif
    4 r$ V( U5 t$ j* \2 Z. L
  23. #include "SkinResDef.h"+ `5 `) u, V' i
  24. #include "ChangeBG.h"
    0 A# V2 B3 ^3 }& z6 a: V
  25. #include "AFXINET.H"$ N8 s; h$ C) s/ x
  26. 7 K, l# ]8 x) b; ^
  27. #define TRADITIONAL_CHINESE 06 S8 c' {( J) y, K# o
  28. #define SIMPLIFY_CHINESE 1  e! P! K1 \7 w3 [3 r! ^  j
  29. #define ENGLISH 2
    - e% A9 P# C9 J" T! g3 i
  30. int m_iLanguage = ENGLISH;  _6 S2 Y$ [7 G: _
  31. /////////////////////////////////////////////////////////////////////////////  A, F! C. C) k$ G
  32. // CRevAppApp# j. r* {8 \: t5 w  f1 w
  33. $ H. }& J" j6 o% w6 c" ]( b- P. ]- t1 f
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)- R1 v( v: H4 ?( W, l1 }
  35.         //{{AFX_MSG_MAP(CRevAppApp)% |' R! [: x& s- ?
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ; l8 ?! N" A1 Z4 l1 h
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    : s0 x! `2 G* u) Y
  38.         //}}AFX_MSG4 p3 n# @% B: [" @- U3 Q! Z
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)9 |5 f( U2 T+ X" V! d9 T- d4 U6 y
  40. END_MESSAGE_MAP()3 ]' w& h; H9 p( X2 E, X
  41. ' L# u+ J) s. A: Q
  42. /////////////////////////////////////////////////////////////////////////////. l! P# _# ]9 `  u* R+ b6 P% f
  43. // CRevAppApp construction/ J& A* a/ y) x) c3 R( q$ W
  44. 9 u6 N8 b5 [$ q) G9 O0 ~2 `  v" |. S
  45. CRevAppApp::CRevAppApp()1 g, Z2 `' j, |7 Q2 Z& x1 i
  46. {6 f- m8 b5 q( y. o
  47.         // TODO: add construction code here,
    ) u  ?$ l9 m& O% \
  48.         // Place all significant initialization in InitInstance( m; L# U* g! c( m6 k
  49.   bDisplayIsBig5=FALSE;
    8 \) a: f# ^, h# x
  50.   bRestartUpdater=FALSE;
      V) n0 [$ _/ k( i$ P( f
  51.   bFinishUpdated=FALSE;/ R$ N4 ]4 p; [/ Q7 G
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;# j  X: A/ F+ S$ p
  53.   InitChangeDataBig52GBKS();5 A. _' A8 e* X6 B; E* o
  54.   InitChangeDataGBKS2Big5();' Q2 d0 L  {& B. S/ B( P) z& D
  55.         //
    ( `: G2 h' z) H2 C
  56.         bClickRunExe = FALSE;9 d3 x, Y! {1 I7 N8 ?- [  a9 f
  57.         //4 S, R% U" g* t& j0 |: z0 u
  58. }6 B& r1 g  ^. [

  59. " ]$ T0 m( O* Z. s% s4 D  n
  60. CRevAppApp::~CRevAppApp()
    . N; G* [8 B( f) ]4 \2 H
  61. {( l% D1 h. A' s
  62.         // TODO: add construction code here,
    & B+ ~8 _  R: J% z. h1 y
  63.         // Place all significant initialization in InitInstance
    7 L; l) s# Q  ~4 I. R
  64.   EndChangeData();
    7 o5 u% P; I1 G
  65. }
    6 `" \/ v: p' M; H

  66. 7 D9 z8 L- B7 ]
  67. /////////////////////////////////////////////////////////////////////////////
    0 K' Z3 B0 f1 R4 t* j0 }0 d% J
  68. // The one and only CRevAppApp object& W' `3 y& ^1 G

  69. 0 _; s0 l) e' _" [3 ?8 e, h
  70. CRevAppApp theApp;
    9 O0 N3 q$ q7 x. d2 ~! ?0 r

  71. / B1 b& E; Z& H
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 M1 t" F! p9 F
  73. {
    7 l2 [: j! H8 v; t2 m6 Z" n
  74.   int iEOF=0;& f8 ?7 ~2 S9 a6 M8 [4 I8 ~/ D
  75.   char szTempName[MAX_PATH];
    ( [1 p; d7 S$ t+ r$ N  Z' |7 \5 e
  76.   *szFileName=0;
    ) J+ P; ], [2 b/ ?3 u0 [$ z9 O1 r
  77.   iEOF=fscanf(fp,"%s",szTempName);
    : A  e* y: ?7 j4 f
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')( o8 F5 H5 [: o; N( W' b- N
  79.   {
    ( m) R& [: G* g, E- C, d9 J& v8 Z& d! h
  80.     strcpy(szFileName,&szTempName[1]);$ y6 {# }* F" m* S; t) ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 Z4 `/ J* B( ~4 t" \6 X
  82.     {- P% y$ }: \; ]: m2 [
  83.       iEOF=fscanf(fp,"%s",szTempName);
    8 h: |$ V6 F, F$ k
  84.       strcat(szFileName," ");
    " {! f( y# X* w" ~( i, X" R% D2 c
  85.       strcat(szFileName,szTempName);
    5 }  m8 O& r  ^
  86.     }
    ) X0 n3 S  E5 B* ~
  87.     if(strlen(szFileName)>=1)
    6 q, p" `4 [8 t1 g# e: G
  88.     {4 W! \8 z& K& P2 _/ ^
  89.       szFileName[strlen(szFileName)-1]=0;
    ) h+ ^' u4 p& u" `" m
  90.     }
    ' m6 k/ u! M, v. h, Y% a$ w2 h
  91.   }
    / o- k  I. A; T; r9 H
  92.   return szFileName;
    8 k5 t" d- N) g: V  h! V+ R5 a
  93. }
    0 Z+ S6 z/ x& C

  94. ) Z$ ~8 F# `  U+ ~  g
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    7 G4 u8 m/ U% S% D. x
  96. {0 D0 y! u# T" z, _- P' z6 t2 F3 B) }/ {
  97.   FILE *fp;
      e$ K8 e$ _) h& ^4 [. g
  98.   char *key=NULL;- y& c. f6 Q' y0 V, a
  99.   char version[MAX_PATH];
    & d6 _9 S7 t/ ]: }  i) H) }
  100.   LPUPDATEFILE file,olds;" n: ]$ s6 a' Y/ Q5 D+ G  k2 C& ?
  101.   std::map<CString,LPUPDATEFILE>::iterator p;3 d& o5 s. q; G

  102. & w5 Q3 J& c8 Y' x- n( \8 i0 G
  103.   UpdateList.clear();
    3 @7 D/ K$ y' H3 U$ I
  104.   UpdateFile.clear();* w. f9 d9 G. M5 @/ w0 v7 u$ h
  105.   if(GetFileAttributes(filename)==-1) return false;
    3 m; b2 f/ U3 v. s
  106.   if(!(fp=fopen(filename,"r"))) return false;  I) t% t) K0 `9 i
  107.   fscanf(fp,"%s",version);
    : C( Y; `1 I8 D# L2 u) L2 R
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }9 t5 v' e& E$ P. l6 f
  109.   while(fscanf(fp,"%s",version)!=EOF)
    . |) }4 s% a% P4 w- a
  110.   {4 y- g+ v; ?2 W. G
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 b5 Z* u- E- ^2 R
  112.     fscanf(fp,"%s",file->path);
    ' i: x  Z+ l9 Q9 |
  113.     ReadFileNames(fp,file->file);
    $ Z+ ]( H1 P7 s$ \  x/ v# l/ @8 d* K
  114.     strcpy(file->full,".");: ?9 H4 m9 x& a8 s5 ^
  115.     strcat(file->full,file->path);; R% A  d/ \% @
  116.     strcat(file->full,file->file);
    : Q9 ]: f7 S' Q, q+ n3 V- l" j! ]
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- m2 {+ X  O; f) o( F
  118.     {
    ) Y$ @, l" b$ R6 }0 V1 |
  119.       file->vers=(float)atof(version);# J$ F0 n9 l% [- u5 J+ o  M
  120.       UpdateList.push_back(file->full);
    0 C: F, s$ ]2 {! t2 a0 q" u1 h
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    " L2 v) f8 p6 ]1 y9 C5 R
  122.     }
    1 z0 d1 k6 Z; l2 ~! D5 u" T
  123.     else
    ( L8 N) h! i9 o
  124.     {
    % G$ H7 G3 T8 o; k5 ]
  125.       olds=(*p).second;
    9 j; d& \0 h. H( t$ r
  126.       if(olds->vers<(float)atof(version))9 p$ k( @) v9 L8 P1 z
  127.       {
    3 _. h5 H% g/ d: I# u$ v
  128.         olds->vers=(float)atof(version);8 @# \; M3 r2 l) y
  129.       }
    7 u1 L; s" j/ E. v1 a( @
  130.       free(file);
    ) p! I0 a' O% q" X
  131.     }! `# @) _; K% t! L1 _% D
  132.   }7 T$ Z- h- v# r8 N/ j
  133.   fclose(fp);8 N- n( n; p5 r2 i8 S8 B5 Y' ]) q4 V% {
  134.   return true;3 L! _# ?7 s3 X$ \/ j4 ^9 _
  135. }( A4 G8 l( T# J' m/ j
  136. 0 N" |0 p2 w3 q5 z, |- d
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)- X! U- E4 _! \% M" ]  r
  138. {
    + }  ~9 [# u* Z. Z
  139.   TCHAR  szFull[MAX_PATH];3 y2 y2 e# B& R  N, V0 S7 `
  140.   TCHAR *token,*inter;, Z% Y' x3 ^! E' `: D3 D
  141.   *szPath=0;  q2 U0 P# ]( y7 N# c, r8 i
  142.   strcpy(szFull,szFullPath);; ~4 _3 Q+ A1 _: t
  143.   token=strtok(szFull,"\\/");
    # ^) E! u1 i% G! j6 J
  144.   inter=token;
    ' J- T9 L7 v+ E+ Q' F* z
  145.   while(token=strtok(NULL,"\\/"))
    0 M5 ^- K0 Y7 k: J2 W, J4 {
  146.   {
    % G+ P8 k5 \5 i0 ?
  147.     strcat(szPath,inter);
    3 H+ l$ h: D1 z  G
  148.     strcat(szPath,"\");
    " n- c( ]& m- b2 |
  149.     inter=token;7 h4 p# ~# Q6 u( P# \+ \
  150.   }
    ( y: ~5 Q2 V' N
  151.   return strlen(szPath);  D1 \( `  Y! o7 f5 P. {
  152. }
    / ~. G. Y3 B1 T. z

  153. & \$ c4 `  s8 ~8 n6 `* H
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)* \% @4 F9 J( z
  155. {" `( Z# a; H8 z
  156.   DWORD attrib=GetFileAttributes(Target);# ?' U) C# E9 X) A; ?0 U
  157.   if(attrib!=-1)
    8 s  a! W6 d! [' _# q/ o
  158.   {9 h$ G% n( v' ?+ |- K- K
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))2 Y9 K* n+ d6 ~* B: L
  160.     {
    ! s2 A/ {4 t4 j/ ?
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);% |4 z/ j! n4 f' l( B7 I8 j
  162.       SetFileAttributes(Target,attrib);1 B9 Z* u) G" I7 O2 M: I" p
  163.     }
    : }( C' i& I% _1 E1 |; L$ m9 S! N
  164.   }: w) ]5 Z1 @0 L% w) N5 U- W
  165.   CopyFile(Source,Target,Erase);5 Y. Q# z8 {! K. m  |
  166. }' T8 I7 q  h: ~8 O! M+ l. h5 `: d
  167. ! u5 f5 _% l- }; ~
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    6 A; a5 f' _- N+ N- @4 h' A$ Y
  169. {. w  ^& W# q" D( j
  170.      FILE *fp;/ u. Z7 B: q5 g% Q/ e( o: K0 x
  171.      char  szBuffer[8192];
    : p- e; S: T$ ?# x. r2 N* f
  172.   va_list  argptr;
    0 v6 ?1 o6 t# x! f  g: F1 D$ u1 @0 `

  173. ' J3 x8 k# H6 p  d7 X* k2 ^
  174.         va_start(argptr,message);. \( v9 E8 D9 }. I4 V5 t  U
  175.         vsprintf(szBuffer,message,argptr);6 }7 ?$ j, N. y
  176.         va_end(argptr);$ A) m" P+ t( ?( z
  177.   fp=fopen(FileName,"a");
    + R: r# ]2 Z" f% A
  178.   if(fp)
    4 d) W; q8 w2 Y: L! L8 v# @1 \
  179.   {" f3 I, K( r# P5 _* E6 I
  180.     fprintf(fp,szBuffer);3 @8 V. e& J! ?
  181.     fclose(fp);# L# Z, d3 G6 O6 N$ g
  182.           _flushall();7 c: i" d3 l1 `# o! Z
  183.   }
    ! y0 ^: ]3 V; d
  184. }
      y. h8 V/ G! C8 h# A* O

  185. . Z- l. d! V  J5 \' A+ I
  186. BOOL CRevAppApp::Fclearf(char *FileName)+ r, ?2 ^& J, }2 m$ Q% j
  187. {
    6 D1 F: E3 {1 n4 p" m# d
  188.      FILE *fp;- n* D  y. @3 ?
  189.     DWORD  attrib;
    & x- o9 d# S1 J  e: i. g, U4 {
  190.   attrib=GetFileAttributes(FileName);
    / k/ k8 H" s2 s1 J
  191.   if(attrib!=-1)
    / {% K. L4 Z* o, x7 M8 s
  192.   {
    : v5 G9 {! H1 Y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    , }; M2 a7 u% ~
  194.     if(!SetFileAttributes(FileName,attrib))3 S9 R* W$ I7 @2 b
  195.     {# n8 @8 d4 H- B
  196.       return FALSE;
    : o- z  y; u( q% T4 o* h7 O
  197.     }
    # d* l) e' Q0 L2 D. }  h; w; K7 t
  198.   }  d6 ^* h; {+ p. u/ N' Q
  199.   fp=fopen(FileName,"wb");7 M! |9 D/ y( C! j. e) f& L
  200.   if(fp)
    : k" ?  Y2 t  D$ f7 Q. B$ N
  201.   {
    * z- R8 j2 N8 q4 x) G" b+ S
  202.     fclose(fp);
    + o$ k/ h' ~8 j* a9 ~. T' o8 R
  203.   }
    : a6 k( z# O+ B2 W2 |( T+ l* Y& F% V* j- ]
  204.   return TRUE;% \& }% j: y- d" _- d; _$ e) V
  205. }  Q% |9 Y9 P! M6 S1 t: X8 N
  206. : z1 R, j9 ~1 _5 F( s/ l
  207. BOOL CRevAppApp::UpdateLocalVersion(void)% c6 v' z' S) C+ d5 [
  208. {
    ( d2 h6 L4 h8 Y
  209.   char filename[MAX_PATH];" z; s" V) |/ c7 A% m
  210.   LPUPDATEFILE file,olds;
      X; j* N4 {8 K6 T" N
  211.   std::map<int,CString>::iterator i;
    ; c8 h; k9 \1 F+ |3 d+ n3 m2 v" v
  212.   std::map<CString,LPUPDATEFILE>::iterator p;' g& x0 U& t* c6 I
  213.   std::list<CString>::iterator l;2 D. D* s7 m  |

  214. 7 t/ N" s  k/ E5 d6 Q) k, H7 }$ f0 r
  215.   if(bFirstUpdate)
    1 b( T1 E# b* y" }& Q' m
  216.   {
    , m! i2 k* x5 g, }$ f* @5 V
  217.     dwCurrFile=0;
    ; `1 o0 k1 [2 P% {! @0 c% R9 E/ S
  218.     bFirstUpdate=FALSE;
    " r/ k( d/ ?! }. @! s
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 {5 h, w: D2 D  k
  220.     {
    1 ]% F6 x7 L# y
  221.       dwTotalFiles=UpdateLocal.size();5 P" k( n* d9 }. _3 |/ ~
  222.       dwDownLoaded=0;, H$ l; k( v! C$ Z% e2 |" u( P
  223.       bSilentStep=FALSE;
    6 `% B- c- y8 `5 I7 X" e0 W" Y
  224.       bCompressed=TRUE;2 z4 D1 u; g3 S, ?
  225.       strExtLocal.Empty();
    + p9 r1 b9 @: Q$ S9 A$ e0 w
  226.       strFullName=(*i).second;- M7 ?* R" C5 c) m- t2 M: l
  227.       dwProgramState=AP_CONNECT;
    7 g8 o% _0 n# [% V' d
  228.       return TRUE;" k$ S; U; a5 f
  229.     }
    5 F5 s/ m% g$ _5 g7 s, u
  230.   }/ S6 }. B: `& C1 c8 D( \, J* Z+ v7 @
  231.   else if(bRestartUpdater==FALSE)4 m1 Z  \3 H# E- U
  232.   {7 R' S( @" g/ M! R# @7 @1 }
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ) a+ W6 ]+ L* f5 U
  234.     {& \. E' m* \& x# u4 k0 d) a
  235.       file=(*p).second;
    ( m/ z- B! B. k" a
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    6 g. X* F. D# i* y- Q2 v/ ~
  237.       {3 n2 Y4 M6 V, O; A
  238.         olds=(*p).second;% s7 F5 r& @5 C* K5 B: F, A
  239.         olds->vers=file->vers;" E! U2 S/ j" z
  240.       }
    * e3 Y# b1 v4 Y# j7 q$ i. y& v
  241.       else
    6 O9 o$ Y7 ^+ D, G
  242.       {  b; V- ^  {3 L+ d$ y6 S4 I. U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ g/ \4 y0 C/ Q9 K
  244.         memcpy(olds,file,sizeof(UPDATEFILE));% S/ a9 o+ f8 r) r- Y/ K. B9 \  Y
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));/ ~# L  I% Z( z0 w, t
  246.       }
    ; s/ x* s+ _# |
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- Z& A; o1 f9 \4 x
  248.       sprintf(filename,"(%s)",file->file);4 U9 H( P; C5 U; ]+ O
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: U! {+ n" k2 d* O7 l  L% P
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }3 y7 |- W# f2 X9 q7 U* s: A# X
  251.     }
    7 `5 K% n6 C, L  i6 e' v
  252.     dwCurrFile++;
    . N6 |1 m$ [: ?( i. y1 A
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 _5 W0 u! n* v9 z: U
  254.     {
    ( T8 V( x1 U' A. u! f/ z6 e% y
  255.       bSilentStep=FALSE;6 |% Y1 W# G% ]6 P2 A
  256.       bCompressed=TRUE;  ]& C3 _5 U6 h, e% b" o# m2 T
  257.       strExtLocal.Empty();
    , @3 H: X" X  _! \5 P, e
  258.       strFullName=(*i).second;
    9 Z7 f! v# W2 c# X
  259.       dwProgramState=AP_CONNECT;! v0 @" R) B8 u$ H% n+ b
  260.       return TRUE;
    9 Z% E/ c% C2 r. N  c; A+ z* z) D
  261.     }
    $ y# ]: `4 j* G- K; ^; t) o0 Q
  262.     if(!bRestartUpdater)
    - a2 u' {% ]# m% h+ l7 e
  263.     {9 x& I6 ?; W* T  A& G; Q& \
  264.       int iCurrSize,iFileSize;
    # q$ C. e# V% m9 _; T( _
  265.       iCurrSize=0;4 _* g7 N& u5 ~5 k
  266.       iFileSize=UpdateList2.size();
    3 L! q0 ~+ `' a
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");* J" {. @, L/ u2 j& j4 ]
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");+ s: ?+ E/ S6 X4 y  u/ s7 L
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
      H; h; g% j  g% V, u
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 P# h/ K0 m/ \1 e, G
  271.       Fclearf(".\\update.dat");
    0 L/ u  E) l- L% y, Y3 b$ ~
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    9 d4 N3 ^/ o$ C, b6 ~% Z
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ l- C4 X; D4 T* l* i
  274.       {
    $ d$ m) M- G( f* l6 }* F' V! \
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())7 a' u( j# A& Y( H$ l  V* q
  276.         {
    2 Z' u! Y! b! f2 ?; N
  277.           file=(*p).second;) K5 m$ J+ Z8 y2 ?6 f
  278.           sprintf(filename,"(%s)",file->file);8 l- N8 q6 d) R+ X
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * c7 e: D  N5 S
  280.           iCurrSize++;5 J: @  w8 W' u* P7 f' d- ?! W
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ! v, D( Q1 t% \  h  F8 d5 P
  282.         }
    4 k0 d' ]  @4 p, X% O
  283.       }; n. S  W- m9 v4 k) [  q
  284.       unlink(".\\update.txt");( `. s5 w* M* q! o" Y4 K' I
  285.       unlink(".\\update.tmp");
    8 f4 d$ c/ [& V
  286.       Fclearf(".\\checkversion.dat");: R0 ^, b+ F  _
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);9 ]* y7 P) q' T! c3 [
  288.       if(UpdateLocal.size())
    ' u) P( w; h% ?# i5 ^
  289.       {
    6 K% R6 ~# W2 G0 Z4 ]( @
  290.         UpdateLocal.clear();+ \+ {5 R  z. f9 Q
  291.       }' u& R6 z' p# `9 M5 p2 j& n
  292.       if(UpdateFile3.size()), r5 P1 O1 @0 `
  293.       {2 o, S. _8 }: x7 T% V
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 w6 w6 `3 X) y% g) l* N7 c2 O
  295.         {
    ; _2 P, c* S4 U5 ]7 V9 K
  296.           file=(*p).second;
    + r3 r% O& \4 S- C
  297.           free(file);& U$ z# ^$ ~- U. `; t5 z
  298.         }
    ( _' l" w* [) }& c7 \7 @" h
  299.         UpdateFile3.clear();. l9 f8 T  E2 F' h5 ~  ]9 P/ ^1 ~
  300.         UpdateList3.clear();) S1 |( l7 n6 F, x, Y, _
  301.       }5 o' D( p5 ]( h$ N# j, D3 y; y/ h. x
  302.       if(UpdateFile2.size())
    $ \% I. {6 q: Q. B8 F8 l/ k
  303.       {
    " W8 F1 n5 u7 Z3 W  [
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 m% N' i2 w* ?9 _& i" z
  305.         {
    ! h# j! ^8 ^$ \6 U3 x; t
  306.           file=(*p).second;) u) X, P$ o# U
  307.           free(file);% k5 a, K8 F+ l/ S( w, N' t( m
  308.         }
    $ Y; A" p% a! C  k9 J4 E0 ]6 u" h
  309.         UpdateFile2.clear();4 |6 F8 `4 I2 U8 g
  310.         UpdateList2.clear();3 C1 d" h" N" ~: _9 v, ?
  311.       }+ W6 j5 L* p; L- B4 B2 U  \& ^
  312.       if(UpdateFile1.size())
    2 G7 U% S* B; y$ r( q
  313.       {
    ; k- J( R0 l- B! Q, i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ {* C- c) B  Z
  315.         {
    # y, S- T4 r8 }( M+ V) a. x8 ?: e
  316.           file=(*p).second;
    , b  Z3 q/ _. _9 h* A; K( A
  317.           free(file);
    , K, @1 U. Y* ]" u5 V
  318.         }  C# r, O1 l0 }5 Y
  319.         UpdateFile1.clear();
    - a! x$ s* t0 f
  320.         UpdateList1.clear();
    7 R; f6 F5 G  s7 f
  321.       }; ]8 G9 u5 ?7 b: C# m; T/ i
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ( G9 J! b- Q0 t/ @" |- v% Q5 Z
  323.     }, U+ }- Q) F2 a: q: `5 k# l% `7 L+ y
  324.   }2 P  J$ H6 B2 T  T  S' U+ H; l( B
  325.   return FALSE;: |* Q5 Y$ R6 F+ o1 g) i7 g
  326. }5 L# k% A& A% C: @" O' e5 }

  327. 5 |- E! \: {& d6 d$ k* J! ?) i* ]0 D
  328. void CRevAppApp::ClearAll(void)
    * e" Y+ m1 D7 k; x% V9 u( n
  329. {. R6 D+ K! A. M' z$ R. q+ X
  330.   LPUPDATEFILE file;
      I' {- _0 ~: a8 W& s1 g6 {6 F2 N
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 {# C6 U* l; `( o8 y  ?, X

  332. 6 `8 f: v2 R7 v
  333.   if(UpdateLocal.size())0 t/ V# [# a, v2 S& a0 P
  334.   {
    7 Y( k3 \3 M+ u& M/ @9 f
  335.     UpdateLocal.clear();8 u4 ]) f0 q- H6 T2 H- R9 w
  336.   }: b1 i/ n, k8 z, X6 m/ {
  337.   if(UpdateFile3.size())
    : q1 J) |$ h0 l" `
  338.   {5 J  _: i0 ~9 Z! v
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 G) x$ p9 p) J  P
  340.     {
    0 ]# x% m. e" _, \* [
  341.       file=(*p).second;& V" q; z- O0 N
  342.       free(file);$ [! }0 T* ~; C5 B$ D. a* p, P
  343.     }8 L9 O5 y. `; Z( N1 @
  344.     UpdateFile3.clear();
    - t3 R8 o- M3 j/ Q
  345.     UpdateList3.clear();
    $ Z6 m0 j$ f" W  c7 C  [# w
  346.   }
    5 p% u8 u4 T% L) x) n3 f* G
  347.   if(UpdateFile2.size())
    , y6 X, ~( v3 d
  348.   {$ X- z( ^2 A1 h( @% M2 e
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* B* B- H& X1 P! _. M
  350.     {
    $ f1 J: ^' H" }  E9 i
  351.       file=(*p).second;0 _& P9 n3 ^, I* K: n
  352.       free(file);/ l6 U8 h( o! ~$ ~: [! N0 ^& j! S) v
  353.     }
    + v) D5 U. \! ^- `. v( d: A
  354.     UpdateFile2.clear();5 Z: }( U& W8 c3 i8 Y3 _
  355.     UpdateList2.clear();+ h) \) D+ T/ K! S8 c
  356.   }# y9 L+ ~/ T: H3 B
  357.   if(UpdateFile1.size())
    7 m, W8 J! Y. j( G# g1 f
  358.   {
    * N% T5 ~; E- X  O# e
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 [# z& j5 m% Y# Q5 J7 p4 \$ A
  360.     {0 `" {+ A/ e5 m" i5 I$ j
  361.       file=(*p).second;
    1 G8 |/ }5 ]7 E+ Q1 l
  362.       free(file);
    & ^# V" W& r" P2 l: T) R/ o0 x
  363.     }
    $ e; p! W( f7 A3 i& g
  364.     UpdateFile1.clear();3 ~' n! x# [( l
  365.     UpdateList1.clear();1 R; ^" f+ U" V- Z* Z
  366.   }
    ' k, n& G8 z( a" w. `& ?
  367. }  
    * M* ]3 F( x$ B2 s( m' r
  368.   
    ( c1 i8 D& c. B' e0 F( m
  369. BOOL CRevAppApp::CheckLocalVersion(void)5 D7 Q$ e2 {% Z3 l2 Z
  370. {% }4 x7 X% m- V
  371.   int c;' Y4 p0 J8 `) s1 i. i% D. I  z
  372.   LPUPDATEFILE file1,file2;' h$ N% F# h2 q' C' D
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , }  ]0 A2 B) F0 y* e, B2 r( \
  374.   std::list<CString>::iterator l;; W6 S/ T. ~1 a0 S
  375. 9 G8 S1 q% [! Q2 z. P
  376.   UpdateLocal.clear();
    % l! Q& c$ \/ a
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);0 G3 M, c( A1 n' o' N; a4 y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);  O8 ?3 ]8 l# S
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    % a5 }) t  P8 c, E- o
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    $ r+ b6 r6 f( r0 ]' s5 W7 n! ?
  381.   if(UpdateFile3.size()): P: Q# ]' a% R# D& H9 e
  382.   {
    ; j' S" }; o- i0 p
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)  D$ y8 C0 m' U( S2 O8 u7 U
  384.     {; a) e1 P+ r% [5 G/ P8 Q$ C' @- W
  385.       file2=(LPUPDATEFILE)(*i).second;
    2 i4 U$ M- l% t$ g- I
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 W$ @0 H# W- t3 p% D' e
  387.       {% b" _: K  X7 O- X9 Q8 B1 u
  388.         file1=(LPUPDATEFILE)(*p).second;* t/ _; F* z% q2 k" W7 O
  389.         file1->vers=file2->vers;
    ' _9 ~, a$ C0 h* j" S' {- O& \$ p0 n
  390.       }
    + S5 z8 z- |# W( f" A
  391.       else
    0 _: q5 g9 e6 X: X$ u
  392.       {3 ?- F- o& `  p. c
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . K# z! N" Z  d! O
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    " O" \8 E+ A% f9 o! q
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));2 G% W: k! Y; L+ w
  396.       }
    8 k) N' J# c" a
  397.     }
    ; s$ a  Y% K: Q  W6 [
  398.   }' \5 `2 w/ Q: e: R$ z. Q6 \- `$ t
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++): G4 W" K' q' f% f; O
  400.   {7 w. O* x  d% L' |$ A) k
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())* Y9 n. n/ w/ J& d" Q
  402.     {
    0 z1 M5 s; R4 V& ]6 t5 b
  403.       file2=(LPUPDATEFILE)(*i).second;2 Y! B% I) P: ]% b7 N2 Z
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + R& b" Z9 c2 f8 H4 h6 F
  405.       {
    ( i. C. {8 h9 V/ P; {/ k+ G* b5 R# I
  406.         file1=(LPUPDATEFILE)(*p).second;
      `6 t: Y1 [+ B- p1 N+ Q
  407.         if(file1->vers!=file2->vers)
    8 o' w0 \+ Y8 F: O& c* y
  408.         {
      R9 n/ D* M( l! M8 V
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, |; V# A# n' M1 V" ~0 k
  410.           c++;
    * X) L6 P3 u3 F: m, s7 C% h
  411.         }6 S, x: {0 i% z
  412.       }$ g# X8 R, ?5 u* G0 R) s  |
  413.       else
    9 r% `! j( k  k' x. L
  414.       {
    0 ^. P/ X( y1 t" d! X
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & e8 k7 J8 U  O  M
  416.         c++;) F6 ?1 G" E0 N* l/ V
  417.       }$ p- e2 x5 _4 D8 Q2 \6 n
  418.     }
    # a7 t$ \: Y% Q
  419.   }6 s' d* r0 }& n1 n8 O) a2 h7 K" J
  420.   unlink(".\\DownLoad\\update.txt");: F" b9 {3 T" h* Q3 c! f
  421.   if(UpdateLocal.size()) return TRUE;
    8 d5 d6 e6 H0 K& @( Y
  422.   else                   return FALSE;
    " \, p( Q# C1 F
  423. }
    0 P# `- g; N9 {. a" O% [/ P: d
  424. & r' a9 E& b9 C+ v) b6 h( f
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"0 R3 S5 `& `9 p4 g/ b
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    9 i' G; l1 D% |- l) x  F
  427. 4 [# T+ L3 d5 b3 R+ |
  428. 8 e. v2 C- I& n' n2 n+ f

  429. $ y5 T; f9 S5 C9 q+ j
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)4 v$ x- p% H( w5 f
  431. {  M3 r2 _% k, H8 _- R
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    8 L. F" k  J9 @, M* n
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 f' ]6 r2 l7 @+ T
  434.   {
    5 u( `7 E7 q/ D( Y! x9 Q
  435.     char szLanguage[50];
    6 n( g; o' p( }/ C: U; G
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; y/ K3 }$ q  K; b: \
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" |# t- ]3 Y5 Y8 d' s. F3 E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 e& [4 c* A- z: V$ g7 s  e$ Z
  439.     else                                   m_iLanguage=ENGLISH;* X% }( d, B$ m- G$ x( M& c
  440.     char szRegister[100];
    " V- i- y8 C9 W9 b0 e; \
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 M. A$ A) p, D
  442.     strRegsName=szRegister;' m5 l/ b! D3 w0 U* t' B6 y
  443.     char szPatchURL[100];8 `0 r- x0 C: Q$ I1 h+ @0 l
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 p# g+ X; s) v% V  Q, y( X0 M! [0 Z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ P8 G' @% _3 {* N
  446.   }
    & y# m' q1 C+ G1 n7 v8 }/ h
  447.   else& r$ b" l! o9 u0 ]2 A
  448.   {3 j6 m2 l3 x* M* m- p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + H! T. b! E% e& b- ]" z
  450.     strRegsName=DEFAULT_REG_URL;
    0 I! M" E; D& h# {& `7 i3 ~+ H) r7 r3 w
  451.   }
    " X6 N" J* ], o! s# E5 c. W+ M: S
  452.   if(GetFileAttributes("hosts.ini")!=-1)
      n% \  H1 e" D9 U% F5 U
  453.   {( I# b: {$ }+ l9 n- Y( k7 s/ @
  454.     char szIP[50];
    / M% w# J: m, A; ~
  455.     char szDIR[300];
      p# t3 K3 d% K0 a) u3 X- C
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))' z2 z) X( h% J$ P
  457.     {: i0 L, w3 B% ~9 t1 r# m: d2 E
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");3 m) O/ l! @5 y4 d
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    9 X; ]% b1 m' B" |
  460.       strHostName=szIP;
    " m# P# e! x8 b
  461.       strHostPath.Format("/%s",szDIR);
      b8 Z! l; Q8 H& N- S, C% a
  462.     }2 z3 X+ C/ E' Y/ p
  463.     else- U8 G* D' R0 f0 }4 M; Q
  464.     {
    & S% }: F" q' |  w! _( O( t; J5 X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 c& o5 U, r1 t  ?# q
  466.       {0 ~; m" @0 ?( [. J+ o9 c
  467.         char szLanguage[50];
    9 B3 }8 V9 Q4 u4 O6 @% H( w
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    0 d+ d9 ]0 ?+ \: l
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 p7 Y0 F' t" ]' X) z3 j  I
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 ?3 ^* d4 P  M, r
  471.         else                                   m_iLanguage=ENGLISH;5 m# E4 }. L  ~& G
  472.         char szRegister[100];
    4 S* j6 Q+ k  o! K2 y% N, M9 f
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ m6 y  e& _- X
  474.         strRegsName=szRegister;
    $ g8 V% l2 R; d+ E+ H  a# H0 x
  475.         char szPatchURL[100];
    / L+ m: r4 n8 j4 H# F0 [
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 ~2 r, t1 P* X, i4 N
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # V3 x  ~1 N6 s, `$ e
  478.       }
    - w0 {% B: S) Q
  479.       else) G. N. c: T. ~; A) \
  480.       {
      P1 p/ O9 X% C6 |
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ _4 B- Z8 l# K. S% E
  482.         strRegsName=DEFAULT_REG_URL;
    0 v: I# @' L0 R2 r
  483.       }# l9 |& {& o( z& K/ b" P4 V
  484.     }- |4 g6 t; J7 f* }6 ]# E' ?
  485.   }$ n5 U7 \; E/ T  O% B! N+ F9 {, S
  486.   return true;& U( U( w5 F% M3 s
  487. }4 C' ]6 Y5 v# l* c

  488. 7 o" ]  ^- n, Z+ O
  489. #include ".\ZLib\unzip.h"* |% w" ]$ I; a
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    * c$ y* }' w# \" Q) K
  491. /////////////////////////////////////////////////////////////////////////////
    8 r# {  N: J  V3 X( w. V) \
  492. // CRevAppApp initialization
    , T% e% E1 w2 e. j5 y' n
  493. 2 R3 ^8 S( @. N3 Z# y+ H9 F' |
  494. BOOL CRevAppApp::InitInstance()6 g# p- Z- i/ Y; @( j; l3 Z# a
  495. {
    4 E% w1 j7 X0 p8 @
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];$ p' l: I; d" }5 p( j8 y( Q3 k
  497. 8 s4 @7 m: M+ Y, r8 R  i
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    % u! T; Q- ?* A3 F( Y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))" `9 ?9 c2 d% i; t4 ~
  500.   {7 v5 d! A. X8 i- k7 t# W9 v# m
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");, k3 ?0 N) G2 M8 @+ P6 @5 i; k: N
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 D# l0 v& z- H: T* D9 z: t9 b
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))1 e6 W2 t9 @$ w0 x$ g6 X* _
  504.     {) u& Q$ b& Z# A0 ^* P- a
  505.       strcpy(szPath,szPathTarget);8 C2 M" \) M  X, @$ ?
  506.       SetCurrentDirectory(szPath);
    & e; R& W& @+ y$ M% m7 |
  507.     }( T. }4 C! H2 d% c
  508.   }9 L6 @7 r) l* P0 O* @5 I) ~! Q
  509. #ifdef _DEBUG2 M0 G! b; e" f4 S! C
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( M6 D; k( c$ a
  511. #else5 i0 K5 Y9 `) ?2 {/ B$ ^
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / b' |$ v) m! N; e) W
  513. #endif
    3 Y( z- S) |) m5 |& ~6 ?3 Z5 A) m
  514.   {+ ?$ j: R, x7 ?: k) g
  515.     char tempFileName[MAX_PATH];
    7 `' g, C5 y3 a( ^) K& s
  516.     strcpy(tempFileName,szPathSource);
    % \& ]5 D8 R# N  n# o
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 N, v8 ^6 W( O+ o  ]% ?4 n
  518.     strcat(tempFileName,"\\$CSUpdate.exe");; v- i3 d* s# _5 b* `  g( @
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    5 ?* X6 c3 R  f7 M( {
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    / |9 E7 f2 m+ O
  521.     return TRUE;1 \4 k  P  G" G% e3 L2 K; R
  522.   }  A. A' G9 l' i: T
  523.   // Nuke 0118: Delete run.exe4 y- @$ D+ z3 e4 T+ k; v
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );7 Q) {0 U) h  ]$ R
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");/ m) [8 [. L& h3 I
  526.   if(!ReadCfgFile("Config.ini"))2 r7 `! v3 ]5 _/ C
  527.   {
    & _5 ~- H3 U& b) l, d9 @) Y- q
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 J! N+ J3 j+ V; j7 d0 O8 z6 H
  529.     return TRUE;# V5 _! }, c6 y$ {% h3 e/ o
  530.   }
    5 a: G6 \, P$ K: n
  531.   HANDLE mutex;: l/ g9 ^' E2 q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")), V7 v# W6 w$ t
  533.   {
    ' B- x: ]/ B& G6 @& }3 M
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    % b' W. L& y/ p  T
  535.     {# K" p3 c, z/ M/ w
  536.       CloseHandle(mutex);: M( J! U% Y! P1 U1 c9 {
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);% @: ^- W& g# ~$ [5 F
  538.       return TRUE;
    . j# l1 X8 a& k: H
  539.     }
    5 n+ X. D5 A! ]$ E( x
  540.   }  
    7 D; Q5 I% Q+ T- W$ D" J) ^: c
  541.   CloseHandle(mutex);
    7 ]8 H- ^; E' |( \/ ?) Z

  542. 5 g9 ^5 N- m& Y/ a) D
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    / X) Q: z( L# t- w3 Q  Z
  544. 2 ?: ?+ e8 y7 q5 q
  545.         AfxEnableControlContainer();
    4 F" u* e- B7 ^) B7 e/ `  s' ~
  546. 4 ]2 c. l- m2 w" }% V
  547.   bCanUpdate=FALSE;( N' E  B9 p, g( k
  548.   dwStartUpSteps=1;" ?8 n/ S. d  q$ F6 @) `
  549.   dwProgramState=AP_NOTHING;' Z0 L) J9 e/ T( Q7 d' F8 ?; a

  550. 1 m- L2 A) q8 d& h  e6 _! Y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);) s: a7 w+ I# |6 X9 d

  552. / G) E% E) Y# M. z
  553.         // Standard initialization
    & e, l9 q% }! }1 d9 F+ ]4 D
  554.         // If you are not using these features and wish to reduce the size
    $ e( b# E) \' }" l' N6 n
  555.         //  of your final executable, you should remove from the following' B! a% y" O$ }+ f  t) {" u
  556.         //  the specific initialization routines you do not need.
    2 b1 G: H2 r, A) b7 i

  557. $ q9 v% g' L8 x3 X; D; z+ C6 r
  558. #ifdef _AFXDLL, C$ G8 @  T9 u& |
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    * ?" {) V! h; s
  560. #else
    6 {+ o7 t& U4 L# Q. {
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 ?2 E  c% ]- ^+ s  v  @
  562. #endif
    ; q4 U% {8 P7 y! {  o1 D5 u4 P

  563. 1 I9 m, ^$ x3 m
  564.   dlg=new CRevAppDlg;
    ; n+ L+ k% a8 z6 h6 h
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    5 {. K. F" K+ \8 ]( U( Y9 n
  566.   dlg->ShowWindow(SW_SHOWNORMAL);( e2 S  `, K) p, j
  567.   m_pMainWnd=dlg;
      O; B3 _0 D# P

  568. ! M5 E4 q" j6 c" ~  z& c( P. ]
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);8 u1 ?1 q$ v+ o" `( C' ]# C9 x
  570. . o% t6 u, ~8 T3 g- [
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ! A8 B) Z9 @0 X' z( H" W7 `) ^
  572. //  ULONG_PTR gdiplusToken;
    ) w) D' b; V6 d, x) W( ~
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ) g! U% t2 U6 M9 H4 `  e7 Q" F) g
  574.   E, r" r7 T% w! K* E: `$ l8 z
  575. //        CRevAppDlg dlg;
    2 b- C4 f8 I8 E% G
  576. //        int nResponse = dlg.DoModal();
    4 @/ X) I) A" P
  577. //        if (nResponse == IDOK)
    2 J' O: d3 X& D+ o( f7 N
  578. //        {) U& r4 I# L- \
  579. //                // TODO: Place code here to handle when the dialog is. l- t4 t5 `3 B6 S6 F$ }% D
  580. //                //  dismissed with OK; P$ Y/ f1 k) |  A# X
  581. //        }
    , a) M; S) X# i0 L1 \
  582. //        else if (nResponse == IDCANCEL)
    . s! o; k: ]& N# A) w& L
  583. //        {
    % @6 X6 Q  Z( J) z
  584. //                // TODO: Place code here to handle when the dialog is
    " i4 M2 e$ ^8 ^
  585. //                //  dismissed with Cancel
    3 b# B/ _" C7 l  G+ ~
  586. //        }9 f4 u$ ^5 I( i8 w* d. ^0 U$ F* l/ J
  587. ! B- }. p- o. C( Z9 Q
  588.         // Since the dialog has been closed, return FALSE so that we exit the8 x5 I3 B8 b! N
  589.         //  application, rather than start the application's message pump.& c) ~/ ~& o) }$ L* K+ h7 I; K" K0 P' ]
  590.         return TRUE;
    ! q  @" V9 d* j! F
  591. }
    - W2 U, }3 O; K) c& e0 ?
  592. ! k2 p$ L- h- o, k7 h* B5 R5 J
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
      u2 n7 t! P5 N$ c2 L, a! [; `" x
  594. {, [9 c2 R! M: K. B3 ^: |! j
  595.   int i;" y3 {$ }$ Q; B  _
  596.   char *szRet;2 d/ A5 |' d- B1 z7 `) \

  597. " x2 ^# D* s6 [  p, Q+ q0 r0 v
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    - q( a$ T* O" V' S
  599.   if(sztoken)
    % j% \! Z, u; \5 F7 v, p2 c
  600.   {
    ) e2 \+ _  J1 f2 g4 E0 H& C
  601.     szRet=&sztoken[itoken];
    4 ?7 C7 b1 x, l! _, F' g
  602.     while(sztoken[itoken])! D2 \3 u2 A) w# U
  603.     {
    ! W$ i9 c1 A6 ?4 W" M
  604.       for(i=0;i<(int)strlen(token);i++): g; k) v$ ~! X- I  B
  605.       {
    , F& ~5 W" y" B9 u
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    " B  @: \1 q6 ~! [3 R7 o3 B
  607.         {0 @) B" M! d: \: ]' P4 |
  608.           sztoken[itoken++]=0;
    * ]% p/ d  C) E- W. u
  609.           sztoken[itoken++]=0;
    . g  q" f9 {. i
  610.           return szRet;
    1 Y- C! a" L7 K; B! ~
  611.         }
    * C( g  @. |2 t: z* Q  M4 \( s+ O
  612.       }& j- k+ [& E! l& ^1 j' Z
  613.       itoken++;
    8 K- U8 I+ r" M6 _" G
  614.     }& c, u4 V; y5 }; @6 T7 f4 n
  615.   }9 b, \. q9 J( E6 q
  616.   return NULL;
    ; d5 O* O+ m5 r8 S$ L. e* Q
  617. }
    ' e* u) ^3 `; @+ ]
  618. ( I0 S& B* \' H8 h
  619. void ProcessProc(long Total,long Current)
    3 G  g+ F0 M6 |1 @6 H* Y! i
  620. {6 _/ `2 w7 W2 c0 C2 g
  621.         MSG msg;
    7 v! k6 C* o6 n
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " p7 Q4 m* I8 [. u% W- X% p
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' [) Q. f" ?1 C1 W' J, `" ^" F3 Y& l
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))$ i$ q  _; n: g- {7 W: V2 e% \* Y$ q
  625.         {: t- @8 z/ {0 m) b: n
  626.                 if(!GetMessage(&msg,NULL,0,0))
    # G* J, ~+ S7 S
  627.                 {$ F8 ?6 q8 f+ \8 R
  628.                         return;6 S) w+ y; M4 N7 ?2 c
  629.                 }6 q$ C6 J% s) m% x+ c0 c  L! X
  630.                 TranslateMessage(&msg);
    " ?$ ^' d& U! F* a
  631.                 DispatchMessage(&msg);. J! b6 c( B) @% |
  632.         }          [# _8 O) U' l- u2 t. X& t9 \
  633. }
    2 l7 N- k" U7 j) S6 J6 i6 h: R

  634. 8 ~+ {, Q/ W7 T: U; r
  635. BOOL bFirstChar=TRUE;
    9 s! ]9 ]2 F1 ?7 F4 \; ^
  636. ' C/ w& p- T: @* {+ b
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    2 y' T( Z+ ]6 a( M$ s1 _
  638. {( m, e; [$ \, T( z6 x+ \
  639.         // TODO: Add your specialized code here and/or call the base class
    ) A# K5 J' P/ Y1 a# s7 [
  640.   switch(dwProgramState)& T$ i$ I4 C- b! X" N  k. r
  641.   {& k3 D9 I$ [( a: t2 y
  642.   case AP_NOTHING:
    6 [+ ]% l# F. v2 r
  643.     switch(dwStartUpSteps)" o, g. C" Q2 T1 M; o
  644.     {0 {' X% k9 y1 [* ?. x: _+ l* i
  645.     case 1:
    $ v7 @$ q/ r' X/ e
  646.       {9 }* z9 ?: ]$ P2 S. a
  647.         int i;
    $ k5 d! h2 G0 R8 n
  648.         CDC *pCDC=dlg->GetDC();- A1 g" Q# V" f6 ?- D; L
  649.         HDC hdcwnd=pCDC->m_hDC;
    % [0 d: b  C3 F
  650. //        Graphics graphics(hdcwnd);/ S% P9 e+ z4 C$ E9 x. A6 e+ @
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");/ }+ Q' G1 A  I4 [. c+ D1 U
  652. //        INT iWidth=bitmap.GetWidth();( g* z0 {' W) G
  653. //        INT iHeight=bitmap.GetHeight();
    * y6 W6 A3 Y9 v- U: u# J# B
  654. //        Color color,colorTemp;# T2 N4 v0 _: i7 E
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% Q; V8 w% t0 U7 D' K" f
  656. //        {
    ; B& A/ Z6 |1 p8 i+ V* ?4 N
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    0 Q* ~4 X2 d7 _0 g: Q0 ^
  658. //          {
    1 x. G; \3 {  ?+ M. T! {* x% K
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    # Z6 J! Z* U. y3 N
  660. //            colorTemp.SetValue(color.MakeARGB(  u9 s! R" ^2 Z
  661. //              (BYTE)(255*iColumn/iWidth),
    8 ^8 |) I& Q. ~% k
  662. //              color.GetRed(),/ p, ]. N* l2 |6 N
  663. //              color.GetGreen(),: S2 ?9 R# a; [, K8 D* m. E$ P
  664. //              color.GetBlue()));- f  B6 y  T, m: N
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);( N5 q% i+ m) _
  666. //          }
    6 D, D" x  w/ {6 L9 p5 H( Y$ H
  667. //        }- [3 ]5 T; f% R" p) N
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);) y1 R) o/ M# d; o( \  e- D
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 N- h* u  L0 c% l  B
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ x# a; Q5 w. K! N5 c3 X" s! S. ?
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. w& e& M6 o5 Z) U; [, G2 ]$ k& R; ~
  672.         for(i=0;i<240;i+=8)% e1 ]8 @! i; m" U. i
  673.         {
    " N% H3 |1 t' F6 o  _+ k
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. Y, z$ z5 x) Z; ]9 @
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 Z6 t& M1 B* |3 Z; D/ z3 y6 g
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + H5 g% X& K! p- \/ k
  677.           Sleep(33);
    " d1 r- O  D  A5 \! l1 E4 H
  678.         }
    : T5 _1 X  U! W8 F
  679.         Sleep(1000);
    9 j2 [% l2 {# k
  680.         for(i=240;i>0;i-=8)
    - o$ S* S& E/ T' x( T
  681.         {
    & v" Q, j4 @7 v; |% J+ ^/ m  S# `
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 s0 q5 b, P* p. \9 J3 E% S: k) y
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * Y4 d$ B9 m( F, a$ Y1 T
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 W. O: I2 @; o3 R3 a2 o# z2 x2 D
  685.           Sleep(33);
    ' f' y; o' f! ]% r) P
  686.         }2 s: b! n* q  v5 \8 l
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);. F9 @' ~% x" g& ~; A8 i
  688.         dlg->ReleaseDC(pCDC);
    : M( A- O/ V. Q
  689.         DeleteDC(hdctar);
    ) X: [" z! m/ t( W2 M# v1 w( Z
  690.         DeleteDC(hdcsrc);1 ]+ x- U* S6 q5 K& B8 h: M# i$ P# O* t
  691.         DeleteDC(hdcorg);
    3 Z' ]9 o: T4 G
  692.       }
    7 g" g# w& h5 L5 H# w
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    + F2 r" e8 h5 V# q9 V! X
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");* q$ g& t1 b0 L  n7 M
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ( L- G) }. ?% K3 B; X/ |
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- N- H; b8 T  ?9 u. H
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& e6 N0 j) g$ `. t# i0 p' q# C
  698.       if(!Dn.Connected())
    . X" Z" `9 F+ E! \
  699.       {4 N/ i& |) v- `, V0 ~; G) N
  700.         dwTotalFiles=1;
    ) p' B: z9 `  M) J1 K3 O0 k; B6 Y
  701.         dwDownLoaded=0;- I# k) A/ z) |- A( d& _; [
  702.         bSilentStep=TRUE;
    % Y% G1 _/ O* s8 r# L& O, ?
  703.         bCompressed=FALSE;! ?- E/ A( y7 e) X8 F+ m) s2 v
  704.         strExtLocal.Empty();
    8 F# s$ v- M) X# s# H' a, L
  705.         strFullName="readme.txt";
    ' O# a/ O( c0 C, L& ?$ k
  706.         dwProgramState=AP_CONNECT;# ]. A! ^* D, k
  707.       }! J8 W# p: o  T4 ?/ d
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();3 {$ Q, l, C" r
  709.       dwStartUpSteps=2;
    $ B. W/ w7 [% h. r5 i9 T
  710.       break;2 O. s" O, o4 M6 q, I; j
  711.     case 2:
    # T2 }' ~' e4 J
  712.       {" V3 \9 q, v8 ]
  713.         int iEOF;
    7 N. l0 z8 Q* }; N; I. m
  714.         FILE *fp;
    ; D- R& _% {) D7 n( }
  715.         char szString[512];
    - q& E; d8 T( [
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");$ f. f; z5 y# F# y: F% j. v9 P
  717.         if(fp)6 l8 h6 U5 P3 u& I% M- b, V7 ~+ \- `
  718.         {, f' {( ^( ~5 _
  719.           do& z# F1 w9 `7 d2 u9 R( P: b0 X
  720.           {  B+ |2 I1 l9 u; m+ n$ h) @9 f
  721.             iEOF=fscanf(fp,"%s",szString);1 [' U. ]. ]8 Q' |: G9 F% c+ e8 c
  722.             if(strlen(szString))
    ! ?' ~% ?+ r. H
  723.             {. E. n# W, g2 O5 h) [  K) d
  724.               if(bFirstChar); U4 {5 ^# \1 X. L) U: \$ ~( v  t0 x7 i
  725.               {
    - m! ~3 C- [4 c, z8 I3 S( ?
  726.                 bFirstChar=FALSE;
    % z9 M# d! y( u% i3 @" Q
  727.                 bConnectIsBig5=FALSE;1 E5 @' _6 a5 v
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! }; B8 B- n5 t
  729.               }0 [4 w/ U/ \& q0 }% X. S4 v; G
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));6 E3 a4 M6 e$ M8 Y% Y
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));$ f  }! |* s% G4 x# F: G2 x
  732.               dlg->m_ListText.AddString(szString);
    + O+ H% U8 e6 w  O
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( A0 S) F) L% {0 }$ e
  734.               *szString=0;
      [1 F  G( }) b3 q% F1 B* \
  735.             }: v9 k# Q& m' h1 b
  736.           } while(iEOF!=EOF);3 H' l0 _8 z7 q2 b( `; h5 z
  737.           fclose(fp);8 K  C7 C1 R& C& w
  738.           unlink(".\\DownLoad\\readme.txt");
    ( K' a& R- Z& U3 y4 u) @' X0 ~
  739.           dwStartUpSteps=3;0 K  Q1 R9 R4 ^% ^: E+ a1 j" m
  740.         }
    4 \1 i0 |1 o% y, x# k
  741.       }  R; J) Y5 }' @) v, f
  742.       break;
    ! G) c3 A7 T% i' n/ F) X9 w  e
  743.     case 3:" {( f! ]& S" l  `& M6 A. C
  744.       if(!Dn.Connected())! T3 Y7 W. m. V  V5 @' N. n
  745.       {! h9 t( ?7 B) x! A% e  T( i) U
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);6 F# _( O. O! h$ F1 u% y2 A
  747.         dwTotalFiles=1;
    ' a0 Y  J) v# i
  748.         dwDownLoaded=0;- ^. g1 n' H) w4 y6 U; D/ I! C
  749.         bSilentStep=TRUE;
    3 d; q: X1 x* Q  B
  750.         bCompressed=FALSE;  B! J1 S- @/ c/ }
  751.         strExtLocal.Empty();
    4 q% E( G% G5 M0 D
  752.         strFullName="checkversion.txt";: }# k' ~) Y7 z2 |8 A
  753.         dwProgramState=AP_CONNECT;+ g; _( R; `  S/ `( Z
  754.       }
    2 s# U( I- a* |' x
  755.       dwStartUpSteps=4;
    ( N/ s, o7 J/ ~6 J. T; x! t5 d* r
  756.       break;. i' ^7 P, B, Z0 |  J; X! h/ O
  757.     case 4:3 @% f8 g& h3 X
  758.       {6 u3 {( P) B; c9 ?. v* K
  759.         FILE *fp;' k: ~! s* x& H# q/ @9 \/ t- F
  760.         char szString1[128];
    * a) @3 B% p& s6 z3 @) Z- f
  761.         char szString2[128];; D3 i# \+ k! b8 g
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");! e, i; [3 D. j) ?: C
  763.         if(fp)
    : o; C: b) Y& M: v
  764.         {6 Y9 x. F. s: O1 K" _" P- u& J
  765.           fscanf(fp,"%s",szString1);2 X% q& z" c" k8 W3 y4 G; J
  766.           fclose(fp);8 ^! Q6 N+ |& C: e; T+ f
  767.           fCheckVersion=atof(szString1);
    6 J  U4 K5 s! |( `$ e: c) d
  768.           fp=fopen(".\\checkversion.dat","r");4 k3 K: x/ `+ [; ^0 g) C0 o
  769.           if(fp)
    & X- D( M& O5 n
  770.           {
    , K; {# r- Y% S$ ?5 _' Y# L
  771.             fscanf(fp,"%s",szString2);
    " Y) f4 z0 L$ A4 Y( @
  772.             fclose(fp);; L% L5 d9 F% [! j+ a
  773.             if(atof(szString1)!=atof(szString2))
    # K' e2 l0 ~- v+ L# r5 `  {4 y
  774.             {+ O9 R: ?& Y% }8 e% H
  775.               if(!Dn.Connected())" Y3 }: `# O5 z8 O& q7 F$ P
  776.               {
    ! V, q: ^! y6 h6 B! r; c* h0 f
  777.                 bFirstUpdate=TRUE;
    3 P3 s) t5 D' }# L
  778.                 dwTotalFiles=1;" G9 j7 i. S  Q
  779.                 dwDownLoaded=0;
    . A+ k6 \+ L! O! _5 G
  780.                 bSilentStep=FALSE;
    ) H0 v- N# P, V5 x) s
  781.                 bCompressed=TRUE;
    / h+ W0 i8 ^, @/ y- D6 }- v, [* D. y
  782.                 strExtLocal=".\\DownLoad\";& ?2 y9 G4 j. s8 V! J
  783.                 strFullName="update.txt";
    8 l, I7 W- [( q4 g9 O
  784.                 dwProgramState=AP_CONNECT;1 Z6 Q2 ~4 h- q$ f6 p% p9 a- e# f
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % _& R0 ^5 p, ]
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  D: h  m" Z+ X
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & q9 d* I) _) I

  788. 4 e7 x% _5 I4 g) m; v
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: z+ X) ]+ _+ R0 w1 V: W
  790.                 unlink(".\\DownLoad\\checkversion.txt");1 W! E# O. n6 |- E5 L8 v$ l
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1). X  G# `, x# F5 i! n' `7 K
  792.                 {
    1 P! k# Q( K6 w
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");" w/ y/ ^: }) T" E; I$ T
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % H0 |. O8 J% v, _
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    + |( E/ x* k3 c) ^4 A* l( b
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 j) u, O& I0 w
  797. ! L8 y& b) f6 H" b, r
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - ~  I  l& @* F0 ?1 v& E
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 ~: [8 n0 E) X
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    1 Q  b7 Y* b( m. ~
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" _" U/ Z' |+ x5 Y( l
  802.                 }
    ' ]. R8 S/ i' M# s: L: X
  803.                 dwStartUpSteps=5;) L3 V0 m; O, |; f- Y3 d
  804.               }. k) T- ?7 n1 U, I9 e7 P
  805.             }
    + m3 ?3 Y* P* O% s: C" e
  806.             else3 i& `3 O8 T, v- s% L9 e
  807.             {6 ]& A0 P% A2 _
  808.               unlink(".\\DownLoad\\checkversion.txt");
    . z6 X  p3 h2 h+ [% F- D
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  @3 L" f2 q" y$ ^  ]9 |: X  _
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");; V7 _$ ^; |8 W  d
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 W" S6 ?' n: O+ ]/ L$ p) E

  812.   ]2 y7 Z+ l; G3 F$ W: p
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' D; V6 o. N- E
  814.               dwStartUpSteps=99;. Z/ \) `/ c) `8 ^" _  U6 ]
  815.               bFinishUpdated=TRUE;, `( w- g1 r( N1 b' F3 v* Z4 i
  816.               bCanUpdate=TRUE;
    4 c8 h7 s  k3 R6 s- |  j" M, ]: B
  817.             }' [7 s8 U0 [2 o2 w
  818.           }
    3 Q; }8 M4 B  G0 p; n4 V/ m% I
  819.           else) ~) c7 u% X4 n7 w0 x
  820.           {
    - s0 A/ ~7 w' Y1 l) u" e
  821.             if(!Dn.Connected())+ D0 h/ y  y/ @! R) z+ Z" v
  822.             {( l0 }1 a2 C( x1 _; o' U) b% m
  823.               bFirstUpdate=TRUE;# z0 U  C: O/ j2 b
  824.               dwTotalFiles=1;" T+ s/ ]# i+ i; R4 M
  825.               dwDownLoaded=0;
    " O; Y' p! h- L% z4 n0 |5 n4 W
  826.               bSilentStep=FALSE;
    ' h8 x: \) u9 m5 Z( J3 @
  827.               bCompressed=TRUE;
    ' U" _  @" z% a0 _
  828.               strExtLocal=".\\DownLoad\";* ?4 _$ ^( g! g  `/ ^8 e
  829.               strFullName="update.txt";& r* t/ g, t7 B% u& v; t; [) i
  830.               dwProgramState=AP_CONNECT;4 C5 t- n* e$ _( H& R8 X
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # c3 L5 K) i# p* [0 w: B
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- V& J2 i4 s; ?* ^
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");) y  y8 c, T/ I3 {- W
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - _) ?* d5 e. u8 N; q! x+ X
  835.               unlink(".\\DownLoad\\checkversion.txt");
    , {: Q) F+ O3 C0 L5 j! ^: t
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)+ Z3 S3 ]  n6 a: i* |) V( d, U8 C
  837.               {3 H1 w$ ^/ J% U# x
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");! F( m( S3 `! P  ~) M& J4 T
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");: V+ e) m) Z! {, n" e0 `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    " `& P7 G1 s; N8 {/ I) F3 I
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) f, D& c8 ^- y- P3 s  h5 t* _  g
  842.                
    ) v1 |' G: K1 n' t2 j( `5 d
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( @. m( i# M4 t1 n; T; O, [
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & P# C* ^' v2 U  Q9 Z1 C. x1 O
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");6 V1 V1 A& v/ w
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; E4 H1 C8 S. U+ o- t' A: ]5 G
  847.               }
    5 O. ^6 ^( S7 {3 F
  848.               dwStartUpSteps=5;& E0 |; D7 w* f5 o
  849.             }7 j  a  V8 j* _( n4 ~5 {) D! |2 a, x! Z3 B
  850.           }& t# V& x6 X+ w; t) Z
  851.         }
      v/ P* B' C7 ~: v- ?; x' P
  852.         else1 o6 o9 _9 x% Z# z
  853.         {
    9 g0 o( F% m6 s$ U  t
  854.           dwStartUpSteps=3;
    1 s$ p% L- Q1 K" i  q2 u5 o
  855.         }! s4 k) c2 k* \/ `: |0 N4 I5 a- D
  856.       }" z! E% g$ E+ |' j5 ^; e
  857.       break;
    8 C3 i) ?% y- z; a
  858.     case 5:! [6 ~1 ?: _: Y
  859.       {6 r6 ~# I. m6 f/ s+ g
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    0 l9 p. n: K& z
  861.         {- y, r7 E4 P  I  K
  862.           int opt_overwrite=1;$ z' _4 o) d+ ^! T4 S- {4 S0 H
  863.           int opt_do_extract_withoutpath=0;* Z5 B. R9 Q( q
  864.           unzFile uf=NULL;
    5 [' u8 {: @* Q+ C& W  K  ^

  865. 7 I9 x0 ?$ S- ^" s3 p
  866.           uf=unzOpen("Wsa.zip");$ K6 {4 H1 `) @8 n0 g$ N% F2 T
  867.           if(uf)
    % @- x8 B# {$ P4 v# h
  868.           {# y+ F3 q, A1 G' n* b, _
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ( }# T9 P2 z* c6 L
  870.             unzClose(uf);% h* |" d5 l- M. m) P( y9 m) X
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");5 I# z: ~7 q0 k, Z7 G
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    , N7 i: m, F; \: C+ ?
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    + b/ j6 g: g2 f4 i
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' |' O- Q8 R' y/ m; B$ z
  875.           }
    / Y! D! n0 Y, h3 W7 |  P
  876.           DeleteFile("Wsa.zip" );8 \) C0 l1 F& w6 g- ^$ x) N
  877.         }
    ) g( Y1 T1 J. Z% o. G: t8 F

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

* `0 n/ M! g; _6 y4 I6 Y. b6 A3 b
, ?# h$ |3 |  [; b3 X/ r1 a6 B

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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