CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
/ i- L( U! x0 w2 n6 o6 Z1 O
  1. / RevApp.cpp : Defines the class behaviors for the application.
    1 W) b5 o, V+ r" E! Y0 R  X) h
  2. //  A& D3 s& K, J- G( D6 t
  3. ; w4 k0 u3 _  C9 l$ h, U
  4. #include "stdafx.h"
    , H) T- y% ?2 @. Y0 h6 O. ]2 u

  5. . K3 k5 p! Q4 e* b
  6. //#define UNICODE! r. v! D' r) x" U8 h$ b
  7. //#include <gdiplus.h>
    3 F2 }+ \$ z4 {
  8. //using namespace Gdiplus;7 k0 H, l+ l% d

  9. : |+ ^( C3 Q5 p! u
  10. #include "RevApp.h"
    9 ]1 M; ^, {  g1 T- j
  11. #include "RevAppDlg.h"1 y( S1 z5 R* W' ]% A
  12. / X- Q" |! o, C* Q3 I/ n
  13. #pragma warning(disable:4786)
    + K. Y+ {; e# ^) p
  14. #include <map>
    6 o2 ?0 ^9 ?$ a, c+ a, w' j7 \
  15. #include <list>
    ( P% |5 ~# l7 x) ^+ }
  16. #include <direct.h>
    ( v7 ]6 o  A0 L% `3 u
  17. ' D$ A! W7 n3 L3 ^, p) `
  18. #ifdef _DEBUG! t3 X, W2 ~4 S, M$ {
  19. #define new DEBUG_NEW
    4 L& i) c/ B! l. D0 y* S: o9 I
  20. #undef THIS_FILE# h! W: Y3 X7 \4 J7 i  a
  21. static char THIS_FILE[] = __FILE__;; K) t" X# _: O. F1 C
  22. #endif# M, r& g/ m' u1 Q2 K1 o  y
  23. #include "SkinResDef.h"8 h8 r0 v# r4 w# X+ `& q5 @
  24. #include "ChangeBG.h") R% ~$ L% G& W5 m! d' g: l7 b* H
  25. #include "AFXINET.H"
    3 o' t8 x: y  y# R9 {6 U$ ?

  26. 2 `$ X+ C9 @; ?3 k! C+ c7 ~1 S
  27. #define TRADITIONAL_CHINESE 0
    + l5 p+ V  _2 a7 |; n
  28. #define SIMPLIFY_CHINESE 1" B. F- ]8 J/ G& N
  29. #define ENGLISH 2
    8 y6 i7 h1 C3 w% c* K
  30. int m_iLanguage = ENGLISH;  \$ x  O. a# d. f/ b9 n
  31. /////////////////////////////////////////////////////////////////////////////
    ) \7 C. I5 _5 k3 n! l! C7 m" r
  32. // CRevAppApp; p! S  |, p* G$ i
  33. ' n/ ^% g3 R2 n, y$ j' a4 }; J: `0 Q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)+ F. V8 D; v: X7 \
  35.         //{{AFX_MSG_MAP(CRevAppApp)! P6 T! [# k7 |+ I5 m6 J( z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    5 L  p/ P* F& H4 N+ v; P" O
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!: D) {3 U+ @& b; Q
  38.         //}}AFX_MSG* W  N3 h& N0 c4 B# d0 W7 D! P
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)& H" @! |1 Y5 t" [8 c/ a
  40. END_MESSAGE_MAP()# B+ e6 L# V& y& N
  41. 5 \. P+ X; q; _9 Z8 ]
  42. /////////////////////////////////////////////////////////////////////////////
    $ @5 O  k* [) x$ P( m: z4 {) D
  43. // CRevAppApp construction7 V1 Q- |9 u) v% A

  44. 4 j6 K) l0 P. j) \; p7 q
  45. CRevAppApp::CRevAppApp()
    2 _, J4 s7 `; b2 Z8 \# i4 k
  46. {
    2 v8 l0 I" e1 c: L* T0 d! P! y
  47.         // TODO: add construction code here,
    , O" |/ K& s( ~$ o, H$ W8 M
  48.         // Place all significant initialization in InitInstance9 S+ {# w' i* {! K" S, p  D
  49.   bDisplayIsBig5=FALSE;
    1 l7 m, K" J; D( e* @$ ?8 P" j
  50.   bRestartUpdater=FALSE;, {; d% }, l; t
  51.   bFinishUpdated=FALSE;$ S  s8 n5 L1 A! N3 K
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ; L9 O, H( L6 q( [9 J
  53.   InitChangeDataBig52GBKS();
      P9 h( p7 f) z! N
  54.   InitChangeDataGBKS2Big5();; _) ^( V( Q7 C' `' o3 L) K: ~. N! B
  55.         //
    0 J, v+ O% i7 T& ]9 g& a8 g
  56.         bClickRunExe = FALSE;
    $ ~- `1 i  `0 O1 [0 t
  57.         //
    8 A  C3 Z7 v* [) \
  58. }
    1 t0 u6 t- R7 _( \3 F7 u
  59. # i/ c; w9 x+ n3 D8 O5 J
  60. CRevAppApp::~CRevAppApp()/ E, e% }5 W. H  H# Z4 `
  61. {
    & K, h( u% Y* x$ b# n# N
  62.         // TODO: add construction code here,* Q  A' w% I- S- m$ t# ?
  63.         // Place all significant initialization in InitInstance
    " b2 P( ^! \5 B1 b
  64.   EndChangeData();
    ; \% L+ j& i6 ~. S- l* j! c
  65. }
    5 D; P/ h" S8 L( K; n( p
  66. 4 ~. d' v  E: q
  67. /////////////////////////////////////////////////////////////////////////////  c8 Q& h3 X( Z+ R/ \
  68. // The one and only CRevAppApp object
    : w- o3 W# T. e9 y( b& g+ @
  69. " o3 \7 E4 @$ U( i* }7 g! e
  70. CRevAppApp theApp;- l8 {. c' H; B; }

  71. 7 ~5 Z% l! ^! q) C
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)1 M- s- }3 M$ G  N$ q' p
  73. {4 T8 B6 X9 e2 s" c- a' d1 C: i
  74.   int iEOF=0;. L' G1 J: ~0 Q: P# u- n! a. s
  75.   char szTempName[MAX_PATH];( X. X7 W- X  w* N+ {' g
  76.   *szFileName=0;3 ^% P: {) }+ p9 O2 {
  77.   iEOF=fscanf(fp,"%s",szTempName);
    8 o: B8 E1 Z, n
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
      A& }3 e+ N8 u6 x! t
  79.   {* O, h8 M- V' t# p6 F7 W
  80.     strcpy(szFileName,&szTempName[1]);
    . _- t. f. ]  s4 U
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & o$ l2 h! y* n1 l' Q
  82.     {" G7 o! Q' q3 ?7 |. D% G) p& \# u9 m
  83.       iEOF=fscanf(fp,"%s",szTempName);
    2 S" Y0 J+ E* p- `/ v; S
  84.       strcat(szFileName," ");5 a' r& T% i: N& l$ x( w4 n8 v
  85.       strcat(szFileName,szTempName);" V  @9 P4 ~, [3 z3 z
  86.     }7 Y: z/ \& v# ?# `& f! j
  87.     if(strlen(szFileName)>=1)
      A9 I- [% Z5 e8 f
  88.     {
    ) l" o! L+ t2 d4 Y, u
  89.       szFileName[strlen(szFileName)-1]=0;+ L5 s$ I6 b  B' l
  90.     }
    2 f! Q! r' t7 _# X. j8 s
  91.   }
    3 q3 l/ a( F# @  f$ j3 ^5 k
  92.   return szFileName;
    * q% e2 o3 C0 O& g; F# e
  93. }4 b: i2 I5 @) n( O. H
  94. ! R) U; B0 q; {0 `+ M+ U
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)+ F8 |: z) q/ I, c6 R( b- a  G
  96. {6 Q- \5 K1 u2 s% j6 C0 [
  97.   FILE *fp;
    / x, V) y2 x& C0 q7 R
  98.   char *key=NULL;
    3 ~2 C1 G$ R! a9 Z1 V/ H
  99.   char version[MAX_PATH];5 b" u% p4 b. Z& K% X
  100.   LPUPDATEFILE file,olds;& R- y+ f& R1 i/ H2 ?
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    # ?& g/ a3 Y6 u6 E

  102. 3 W$ O- F8 l+ p+ c6 L( G; F: ?# V
  103.   UpdateList.clear();
    9 v( @# F5 Z) w3 E7 _9 }; F
  104.   UpdateFile.clear();' b9 @" p4 [" z* p* h
  105.   if(GetFileAttributes(filename)==-1) return false;" \# j0 R9 R' d' d. a3 J
  106.   if(!(fp=fopen(filename,"r"))) return false;: {" d* E% h4 b# z
  107.   fscanf(fp,"%s",version);
    % P% v1 S6 x: ^
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    * e* u4 K9 L/ h: S( \% `
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ! E3 j2 P* Z8 w, i( z
  110.   {& E) c( A4 l: K) I4 l
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 Z5 S- a2 i7 |% P* F- I' ?6 J) M; I
  112.     fscanf(fp,"%s",file->path);
    2 z% I1 F- }* Q8 h3 l2 Z( H+ _
  113.     ReadFileNames(fp,file->file);
    - v: [1 g+ S7 t2 A. Y& B/ K- z7 z4 j- W
  114.     strcpy(file->full,".");, Y: o) N! B9 m/ Y. O
  115.     strcat(file->full,file->path);
    + C* S- f% K. [/ S
  116.     strcat(file->full,file->file);
    1 ?$ C9 D! G9 t( T6 g
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    2 v# [  d/ v. l, u0 |$ O
  118.     {/ U( Z: H, F7 O, j
  119.       file->vers=(float)atof(version);2 D! A# A3 B% X9 U0 a
  120.       UpdateList.push_back(file->full);! @" F* F+ R" S. n- p% o$ N3 v: d1 f
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));' N# g0 J) n5 {. y9 E. ?' w
  122.     }. d) ?4 Q$ j! S' r
  123.     else
    + r4 T1 ]4 b- q. o- T
  124.     {
    1 x* g/ c8 R+ A) K
  125.       olds=(*p).second;, q4 P. ?  T: P' x/ s& W
  126.       if(olds->vers<(float)atof(version))
    9 x  k' H* Q4 L. c. ?
  127.       {
    5 d7 _. f2 @" e% X0 Z- i, s7 H
  128.         olds->vers=(float)atof(version);2 i: e# F( M  F+ }
  129.       }
    ' \9 x0 d6 p/ k% O$ X
  130.       free(file);
    % Q$ I4 u# ?( A/ Z+ K7 c
  131.     }
    5 u  O4 `. e. {% h# e- T
  132.   }* I9 V% M2 [4 A7 d1 ^( T" ^
  133.   fclose(fp);
    - l$ H% D4 A2 [* O! g+ {( ?4 R
  134.   return true;
    $ K3 a# A1 ]3 S' o( ~. t7 @
  135. }
    ! {! p' L* l/ V* Y4 }5 i  E

  136.   X1 H7 a) ]1 z' q) q
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    7 l3 ^. l0 A0 c- r
  138. {
    1 k2 E# z, B. _: U( h
  139.   TCHAR  szFull[MAX_PATH];, m1 k% Q4 T6 p6 \
  140.   TCHAR *token,*inter;7 w) B7 L7 h( R4 Q, H+ c& t
  141.   *szPath=0;
    ! m  A2 U2 v& p7 p3 }2 l' h
  142.   strcpy(szFull,szFullPath);
    3 _1 b9 |2 Q0 _! O! o: W  i5 ^
  143.   token=strtok(szFull,"\\/");
    4 V: N5 i: b4 i
  144.   inter=token;
    : T- Q7 T! H8 B9 @" @4 w, o" G
  145.   while(token=strtok(NULL,"\\/"))  t4 L* X  v$ b5 [2 @6 v
  146.   {( ]1 |% m6 h6 `0 ~# j
  147.     strcat(szPath,inter);6 m- T4 }$ Y& V6 j8 _3 t( @# }: p
  148.     strcat(szPath,"\");
    4 a: Q& G6 U) v7 k
  149.     inter=token;
    6 f7 l* r' W4 w2 Z
  150.   }
    7 Y  G) z3 `" p  L0 l
  151.   return strlen(szPath);
    " j2 Z% j: d* ~& g0 A- y
  152. }4 x1 l+ o2 r/ K
  153. * p% C5 q) K% A
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)/ A, a9 D, p! Y' @  t: q) `
  155. {! Z- a  u- v! u% Z
  156.   DWORD attrib=GetFileAttributes(Target);
    3 A& A) f6 B' ?
  157.   if(attrib!=-1)
    ! x& N! m/ G3 g4 T
  158.   {& z/ h+ M1 ?+ n
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ ]9 v* E+ ~. u
  160.     {
      Y+ p0 u" h! d2 q- m' E. M4 S
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ) u4 M( K& b) N( u/ u$ t9 J
  162.       SetFileAttributes(Target,attrib);
    ' v- C' p3 `, I9 W, ~! X
  163.     }2 T/ E# w" U6 j; F6 J# Z  \
  164.   }  [0 a' j% B& ], J( H, m8 }
  165.   CopyFile(Source,Target,Erase);: B* d& `3 Q% r: {
  166. }
    . i/ f* m7 [4 L" [- A

  167. & m( p8 x% j. A9 k
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ( A/ X# [! u$ N0 x; ^
  169. {; ^8 g: T* f6 S4 C* {! g
  170.      FILE *fp;
    % D) t# S5 g$ \$ a5 ], }
  171.      char  szBuffer[8192];8 H% e, K( [7 s4 R
  172.   va_list  argptr;% i$ V( f; V5 o& l& i/ g* _% L
  173. , |. l; O3 p/ s4 J, z3 s, f/ J2 ]6 _
  174.         va_start(argptr,message);6 B$ m  T; N4 n
  175.         vsprintf(szBuffer,message,argptr);' V# k5 r! O% |
  176.         va_end(argptr);
    8 A$ i" E% U1 P8 k; g' K- |
  177.   fp=fopen(FileName,"a");
    . Y, p- K: j3 T9 W# B: w
  178.   if(fp)2 \4 H9 k) H' h8 C, @; z4 w
  179.   {: c9 I8 \$ U, z1 ]4 K
  180.     fprintf(fp,szBuffer);
    4 ]  M, i# T4 p- X8 e1 g, w
  181.     fclose(fp);2 o' a/ l" V2 q+ s
  182.           _flushall();3 |1 V6 s: P. ]- g5 y7 z- Z# m7 X
  183.   }
    . j5 n' v- `6 J3 z2 R
  184. }. N7 F4 Z3 K( U: N) b
  185. % z- n! i, K4 d# I, b* \
  186. BOOL CRevAppApp::Fclearf(char *FileName). p; b% I6 F9 \5 [) M
  187. {& z# f: \& u+ K: T' l- c
  188.      FILE *fp;
    # }' W, K& |3 Z) K3 D; H( x9 L
  189.     DWORD  attrib;
    ! ]# k- c" V6 m& R
  190.   attrib=GetFileAttributes(FileName);' ?& }7 S% G. u0 [  H' H, K2 J
  191.   if(attrib!=-1)
    # n$ D2 B: b" W) u
  192.   {
    7 m% y8 a+ ^9 R+ Y8 ^% ^
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);4 b5 c  I" |/ p
  194.     if(!SetFileAttributes(FileName,attrib))
    # q+ h8 B# @3 }  f+ d" o$ a( _- `
  195.     {
    9 d6 ?$ z1 M* B
  196.       return FALSE;) R& a( Q; ]5 t( n2 O6 Q2 j3 `# \3 i
  197.     }
    ! Q7 u( z5 X, Y
  198.   }5 x: R# W: g5 \. e- O4 e
  199.   fp=fopen(FileName,"wb");
    3 W1 ~! U- D8 b2 ~
  200.   if(fp)& x0 @1 R$ S# n
  201.   {' }& x- e- i2 p" {; B2 N
  202.     fclose(fp);
    + `  n$ R! h2 Y/ R/ E( P7 H3 s
  203.   }
    # _, z+ G1 v9 C
  204.   return TRUE;6 m4 \' M8 C% A$ y
  205. }
    ' m! ?) }9 P( {" |; a6 |

  206. : Q- {2 c+ }7 E; W# Y% R3 T
  207. BOOL CRevAppApp::UpdateLocalVersion(void)& k- b: x0 u( a; F9 T& C7 f
  208. {2 U7 F3 X. p8 m4 K- ?
  209.   char filename[MAX_PATH];
    ) V  V: B% U1 P, N, N/ R- k
  210.   LPUPDATEFILE file,olds;7 _0 S7 e7 }) N' s
  211.   std::map<int,CString>::iterator i;
    4 `* C4 U' `$ x6 e( J
  212.   std::map<CString,LPUPDATEFILE>::iterator p;9 y: R, x) U6 t, A2 a
  213.   std::list<CString>::iterator l;
    . P# m, I. E: O9 i
  214. - k) e- m& y. W$ {
  215.   if(bFirstUpdate)! w: B% e8 I) n$ F1 T  g( A
  216.   {
    , d4 H7 u# l) N( x, n  A$ j" q
  217.     dwCurrFile=0;; s$ q7 u% v; X& H
  218.     bFirstUpdate=FALSE;8 u/ u; m- c7 Z$ ?; j. e' M% d  m
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 G+ e2 k" A/ D# X9 O/ G3 s
  220.     {2 [- e$ S" r! L4 ?# M
  221.       dwTotalFiles=UpdateLocal.size();
    * g5 ]0 W; p) `# i
  222.       dwDownLoaded=0;/ y  W4 b9 _; h9 n# Q2 b: m, ]
  223.       bSilentStep=FALSE;, j% v1 j( f3 v* U3 S. G
  224.       bCompressed=TRUE;
    * d; {' P6 ^* p+ U
  225.       strExtLocal.Empty();. y5 R* \* l1 k2 @
  226.       strFullName=(*i).second;2 d* A5 T( A# v
  227.       dwProgramState=AP_CONNECT;( J: s- B$ E+ Q& x% x6 _
  228.       return TRUE;
    + m+ F* H3 N$ Z
  229.     }! w- q2 i3 X3 w% J% ^
  230.   }6 H+ P5 D- @8 m. z" K) V
  231.   else if(bRestartUpdater==FALSE)
    - a: {& X8 O: S
  232.   {+ U, z0 h. R( P0 n8 P" Q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      m0 ~% j+ p4 e/ L* x
  234.     {' z8 n; \* v5 f0 E$ V" a
  235.       file=(*p).second;* l- g1 m3 M- N. ~% }" h
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    5 P% a/ ~2 _2 [8 x8 [1 Y' @
  237.       {
    2 I- }7 n& n! O
  238.         olds=(*p).second;
    . Q  D4 v5 Z. B' n0 S% R
  239.         olds->vers=file->vers;
    - m  T( [, `) r2 a
  240.       }
    % I+ d# ?, p) p' i5 C+ k! M
  241.       else; M8 ]( B/ Q) e
  242.       {. u* N4 n- U; W& o, ^4 x3 p
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, m9 G  b' X: Q) N) s( o
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    $ z$ [6 E3 ^2 q6 A
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    & w5 _% G8 z/ n; D5 L6 v5 r
  246.       }' S' T9 \5 c' Y$ m. s% o
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");9 \  u# |! C3 w. q, D
  248.       sprintf(filename,"(%s)",file->file);; A' [* V/ ?; [' k
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # f2 t  D$ h$ t, {5 |
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ) d" O+ ]* S! d' W4 g: ]) g
  251.     }
    " p' P, {6 l# ?! F( ?  n
  252.     dwCurrFile++;( g2 J4 A3 X5 D. B9 U: D! G# M' I
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* w1 Q" M- }/ q# d& k* E
  254.     {
    ) v) A  \# r' [1 p7 D3 o5 j3 M0 m
  255.       bSilentStep=FALSE;
    8 p* X# q2 v& q- R; c
  256.       bCompressed=TRUE;
    0 H' t6 r$ [7 \* C% s/ F3 X, a3 F
  257.       strExtLocal.Empty();1 r( Z! Q9 T+ t( C9 E+ S9 e
  258.       strFullName=(*i).second;, A/ @: m: w' X3 `4 O. q8 F
  259.       dwProgramState=AP_CONNECT;
    , {7 r/ f( ?4 V- z' u/ L5 C
  260.       return TRUE;+ N  z* B! ~& Q/ u! p! g: S
  261.     }
    4 m( z. a5 d0 K, |/ b, M( n' y
  262.     if(!bRestartUpdater)+ c- u* u  t' D# a1 q* t
  263.     {
    ! w1 j; H  o+ `% T7 e. Q
  264.       int iCurrSize,iFileSize;
    ; S: y2 R1 B2 H) o8 L7 N$ P* j
  265.       iCurrSize=0;
    ; ~' m6 r& U- F8 r- F/ S' r% s( `
  266.       iFileSize=UpdateList2.size();
    . S: ?, ^0 J$ M
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");6 y  n, u- z0 m- N0 ^# D! y! D
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    8 ?, R7 C+ a; P; H2 E5 O* j5 x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    - P0 y9 o) z  w  i. [2 c
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , k9 V. r/ S& e, V! n
  271.       Fclearf(".\\update.dat");
    ) c; [5 V/ v  w: g- b2 a
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    1 C; K5 m0 v  H$ ?0 T# C" m/ V  a: \
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++): R$ g' }( e7 O) a+ x' M
  274.       {
    " U) g& S: g9 e9 M7 [
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())' @6 O9 @( y" g5 i6 t( t. }
  276.         {
    , k' b& I% t, p+ a
  277.           file=(*p).second;6 Y) I  ^8 X2 W6 C6 h+ x# V0 {
  278.           sprintf(filename,"(%s)",file->file);$ }! _2 E. ]$ F- g' G; Y' A
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      j; e; Q- K1 p( t( `
  280.           iCurrSize++;
    % a1 ?6 b; _; K+ g$ \5 }5 v
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    0 P! c% y. W5 r. p5 H
  282.         }  V. @7 n, ?& U7 u7 O1 E/ A0 |) Y; [
  283.       }/ V+ X6 }( ]% l
  284.       unlink(".\\update.txt");( J& `% c6 q  T6 e; a% w
  285.       unlink(".\\update.tmp");. \; j, R: z0 n% `" x" z6 g
  286.       Fclearf(".\\checkversion.dat");# Z8 a; f2 {2 r! S% y
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);: N2 F7 p0 w* S% N
  288.       if(UpdateLocal.size()), L3 B" H$ T: x; t2 O1 b: O# d6 i4 m- S
  289.       {' g1 T, ^. y8 g% q; s; X# t) j7 }3 u
  290.         UpdateLocal.clear();
    0 g  z& n! ^# A3 |; r# D
  291.       }  X- v/ }' ]1 s! [# ]5 d
  292.       if(UpdateFile3.size()): J" n" f3 Q* h2 \8 A0 C8 e- k  N* d
  293.       {4 R* L( ]; S4 m) ?1 f
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 N' O; a6 {  B* x; ?/ V
  295.         {2 S% Y1 y! A* d2 u
  296.           file=(*p).second;
    2 A" V( a2 e4 v# `) L/ a& G4 d1 H2 F" h
  297.           free(file);" L4 O* {3 y9 t3 B
  298.         }
    4 z. s) X; k: Y8 V$ U8 m' H0 G
  299.         UpdateFile3.clear();
    , q5 b& X( q; j2 q
  300.         UpdateList3.clear();
    . `. e1 n, l$ b7 Z  p2 ~3 i
  301.       }
    ' X* |( ]+ A9 O  M2 g9 o$ a0 W
  302.       if(UpdateFile2.size())
    # W- J3 S' d) Q% j( Q
  303.       {
    5 b$ Z/ V; O: q! s( [
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , A- W& R1 q! e7 X; V% W
  305.         {/ |8 c, K# j$ L8 t
  306.           file=(*p).second;: S5 |& [7 M8 i  g3 L1 w
  307.           free(file);1 x( U9 Z+ S( g( j
  308.         }9 w/ U( O1 `6 d
  309.         UpdateFile2.clear();( V( y) ?  S4 o- D1 j3 ^
  310.         UpdateList2.clear();/ x2 P  O7 x- S& q% Z5 v( B
  311.       }
    2 _: n" u3 t  c) s
  312.       if(UpdateFile1.size())( x- e# f' T! G7 P/ G4 P
  313.       {) c& S! k" f% V' d( y1 R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 O; H" ]( {2 W2 A0 B
  315.         {
    . ]3 E0 w7 Y4 Z4 y
  316.           file=(*p).second;
    " s3 Z% E% @8 W4 d3 L
  317.           free(file);
    " R$ x, Z5 ?; T( G! K) R  F
  318.         }
    & L% g6 k* g& Z0 `3 q6 ?1 j' y
  319.         UpdateFile1.clear();: I& @! Q' C4 e: T/ [" X5 S) K
  320.         UpdateList1.clear();7 T4 l( T" z4 g$ K0 F
  321.       }( \1 T0 ?: d9 s9 t( P2 ]
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ P' E( |) D8 e, @
  323.     }8 U: w8 v& d" H! s9 a7 i
  324.   }8 Y/ k( a! d2 }' ?, q2 \  M
  325.   return FALSE;
    # I% l5 d) o) E' k! u
  326. }% f  y" f( p! Z* p7 ]: F7 _) a

  327. & ]. L( v% A+ x
  328. void CRevAppApp::ClearAll(void)% j, N) w$ P3 G4 ^% H, o. A8 ~
  329. {
    ; ^1 A) b7 k- L; A2 i- p; E
  330.   LPUPDATEFILE file;
    . h  w2 X; L' P9 \5 K
  331.   std::map<CString,LPUPDATEFILE>::iterator p;- t$ I! m7 _6 t3 a
  332. 5 `7 F+ I% Y1 ~! c# L: w7 H% C
  333.   if(UpdateLocal.size())
    5 C# I7 l5 C5 x: g) E  G( s
  334.   {
    7 y% M; e, n3 c4 Z3 D3 h
  335.     UpdateLocal.clear();
    3 w& Q$ g1 Y) I% K; @' d. Y
  336.   }
    " O7 R+ N9 U5 p
  337.   if(UpdateFile3.size())
      D" ?) C+ i# z6 E
  338.   {
    1 k6 u* o$ B; `/ l# v# @5 J
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- r) y5 ?8 s+ W+ C  M5 o' @
  340.     {
    ' K- c2 t  l3 |
  341.       file=(*p).second;8 P$ `! W1 I1 [
  342.       free(file);
    & r' x) d% B6 g4 Y$ X  X- h! X- M
  343.     }% X; Z9 y$ E5 h; C1 Q1 ]: D
  344.     UpdateFile3.clear();% l5 s, ^$ j5 v5 x' E& h  y" ~
  345.     UpdateList3.clear();: A3 @  @' {8 C  V% X. U1 ]; y
  346.   }% b. Y- W; r' |9 B
  347.   if(UpdateFile2.size())
    5 q3 b( g2 ^/ x" K& G2 H: E
  348.   {
    ) z& z/ V$ ?- K; @3 ]
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    2 J: J6 M0 Y) H% d# O) D4 J$ y3 G
  350.     {9 V+ v( V5 E3 u, H; O7 G2 @
  351.       file=(*p).second;
    5 G3 N9 O9 M0 ~' H- `
  352.       free(file);
    % v$ p( [$ m) C: k  D
  353.     }( K1 @2 g9 K3 K) x0 A+ R
  354.     UpdateFile2.clear();
    2 e' R" A- I# I1 b( n4 z
  355.     UpdateList2.clear();
    7 Y3 J* y1 ~1 e; X6 ^  `) _' B7 }, W! p
  356.   }
    . M* C& V6 C1 o" p
  357.   if(UpdateFile1.size())" E. c1 k, S3 G
  358.   {
    ! p: r, k# Z! L
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) r! U9 J: [3 F+ |) l8 O. y
  360.     {9 G( I9 s8 b# x8 s6 j( w2 a
  361.       file=(*p).second;' q. d. q6 M. s) Z$ N$ ]
  362.       free(file);
    ( x3 ~5 B  f2 |; r$ w6 G
  363.     }
    ! J, K( ~- V" l! `/ L
  364.     UpdateFile1.clear();; D' C$ n- A0 K' d& ^# Z
  365.     UpdateList1.clear();* w+ s1 @; B. o6 d
  366.   }) @! E, n5 W+ y' b8 U
  367. }  $ A; V0 f& `; T: X; H6 B3 W
  368.   $ D  ?  W6 m9 r# J2 @
  369. BOOL CRevAppApp::CheckLocalVersion(void)* ]8 @; I& W- }
  370. {
    - z, P0 t. ?+ G) ^6 I  T7 {& i# ^$ G
  371.   int c;
    & h4 p+ x8 {$ e
  372.   LPUPDATEFILE file1,file2;; y8 a5 j* C, ^
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    % J; u! V8 ]% \5 @+ f! P4 O0 O
  374.   std::list<CString>::iterator l;
    . n8 {/ M  U3 D1 u

  375. ! Q# I6 I, l5 D5 Z8 Y/ C
  376.   UpdateLocal.clear();
    ; n4 Z* d) @4 L* D8 k
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);) U4 o) c# J% a5 z4 X
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);& E9 m& A9 ^% p" a" e+ O
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);% D  r8 u' V. J7 R, z. {( l
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);4 e' ~8 I5 I$ j$ z. B  T! Y
  381.   if(UpdateFile3.size()); {# K! Q) J0 C# ]; d% H6 ?
  382.   {) r: Y& N0 Y( W9 T% o
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    % K% [5 F& X3 u+ `' l
  384.     {
    5 a' }% n& P; O1 s
  385.       file2=(LPUPDATEFILE)(*i).second;5 Y7 d  ]3 I& `1 t+ v9 H9 K1 L$ h
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 z2 K4 I4 L( e- L+ C
  387.       {
    5 m4 w8 d" c. z4 K; O
  388.         file1=(LPUPDATEFILE)(*p).second;4 t$ |; \! C; z. H: D  I; g
  389.         file1->vers=file2->vers;" w4 ]- `, K2 X$ j! o( x
  390.       }' r, v, K# ~$ z2 ~! d
  391.       else
    - o. _! |: j' t, ^: j& _: a
  392.       {" ^+ C# S- D. d$ l, p1 u
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; e# F9 t1 W$ a4 Q& E6 l
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ' i+ O% `2 ]+ e& h* ~  x
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));! y6 ~8 z, a2 p
  396.       }+ ^8 r+ K4 ~; h* ^8 U5 P0 [
  397.     }0 t+ N" ?! Y6 X5 n
  398.   }1 B0 d; z3 t$ \+ p; n2 O
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)0 @/ X; c0 @! j: u* r9 U1 }: `
  400.   {) l3 [* G: R$ f
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())# s1 I8 w+ \6 R! c! F( N
  402.     {
    ( \9 S8 M+ Q, E6 S$ W" \+ c
  403.       file2=(LPUPDATEFILE)(*i).second;" u# D7 ?( M: K1 W( v
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' B9 H4 M- W6 [
  405.       {
    + M# h. N0 L7 H% F( D2 N! l# W5 P1 K
  406.         file1=(LPUPDATEFILE)(*p).second;  b3 e" I/ j( ]# h  K
  407.         if(file1->vers!=file2->vers)2 _7 q7 V; d- O; c& [. A5 F
  408.         {
    ; l) g% Y8 |# Q. l  _) @" Q) h1 n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ ~3 S0 k% v9 {. F$ g6 b3 d
  410.           c++;
    - T0 `5 N. e) M
  411.         }
    8 s' o- i! Z- E1 H+ H. `/ [; a
  412.       }- u9 @& }6 \3 E" B
  413.       else
    3 d$ ?) }; J& F
  414.       {4 {, j5 D5 Q$ ~5 z7 h- Z
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * d8 _$ k  x+ X2 A! O) a7 R8 p
  416.         c++;9 [  `2 @' W( P5 T+ o& ^
  417.       }9 n8 a2 Y- W; |
  418.     }- D$ s) z* o1 d: C: d
  419.   }+ _# R( l. c* J* j) y  ~/ J& X
  420.   unlink(".\\DownLoad\\update.txt");
    0 ]* }7 Q5 Z- l6 F, Y) G& ^
  421.   if(UpdateLocal.size()) return TRUE;
    : c) h% o; ]% f' U
  422.   else                   return FALSE;' D. n" x6 I( A; M6 v
  423. }
    : b- A$ K' v2 b5 r# D7 q8 u: M

  424. & F- [2 S  b: w" i5 h; H% p
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"; V" Z9 B- q. m+ B  R
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    $ b5 j. o4 X! S. Z4 z4 O

  427. 6 N8 i2 d/ ~6 a) E6 ^
  428. ' f; i4 u9 X1 r5 E6 X2 A0 [
  429. ; A* o9 j% T+ m) g! d/ l' E
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    , V6 N4 l! H; H9 `! D
  431. {1 n" y6 z# s1 E/ B
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ' ~' o$ v/ b& P# W5 Q! @3 [! c
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)) D' r, M$ @% Y
  434.   {
      m& t: w$ \% d3 A
  435.     char szLanguage[50];
    3 O  O5 a$ E2 |
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! @6 J2 k4 z& n% [7 z
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) I" ]" @7 I6 h" D' u% @
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ y: K* q+ j5 H  F3 U
  439.     else                                   m_iLanguage=ENGLISH;5 x/ R3 h& p# t9 O9 P/ ^8 H* e
  440.     char szRegister[100];! f1 G' n9 V) W8 u2 V
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 n6 M" U; c" \2 s  V
  442.     strRegsName=szRegister;
    " a( g8 D" A# |: g! S% Y- e
  443.     char szPatchURL[100];
    9 [0 X9 c. m$ I4 @0 A: N
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " U$ ^' G- |$ F: E( u
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' ?: G! d( u5 }( l* }3 k5 _
  446.   }
    9 B& n: Z: M; f' V
  447.   else' @5 l$ v2 ?: p* Q+ E
  448.   {/ g9 E/ ?/ h, K' l, [5 S2 V
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . L" \# V- T: o6 U# }; a' X
  450.     strRegsName=DEFAULT_REG_URL;/ m# c' j/ J2 c
  451.   }
    ) n9 ]$ M9 h; W* h; B2 n
  452.   if(GetFileAttributes("hosts.ini")!=-1)! B1 K' g* Y( @$ g9 ?
  453.   {
    * [, h9 l1 n! t5 F
  454.     char szIP[50];3 B* p+ K9 `' h
  455.     char szDIR[300];3 r: K1 @: _* s" Q8 a
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))+ x) u/ O+ A: B
  457.     {
    7 M1 @: p+ y; D" h0 e- h% B
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    4 E, ^8 z  _! x9 R, k
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    , A5 V( B* T+ X6 E, _1 H/ `
  460.       strHostName=szIP;
    3 v% Q$ ~0 Y" k2 `4 M4 z- K* _
  461.       strHostPath.Format("/%s",szDIR);
    ( }! m( D# p. _9 P* e
  462.     }
    $ Y1 L0 z3 ^5 ?2 K, W
  463.     else
    0 x# L& u4 r7 S- U4 \' S2 u
  464.     {3 U, ]2 S) W7 y! M( X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 ?4 O2 B# T0 r1 b5 E
  466.       {1 Y9 ]+ W- q" ~. L: l" Z, p: o
  467.         char szLanguage[50];3 b. N* o) M+ ~# E; [% g- k
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ V3 F5 l: N/ Z% y6 j/ j! L
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) J7 G0 f& b3 e* q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 O4 d5 n# @2 V$ a
  471.         else                                   m_iLanguage=ENGLISH;
    ( k1 A) D7 Q8 B1 x
  472.         char szRegister[100];5 T- H, s8 {# V# C, ]4 d' F- r
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. `. u# S. @4 Z; ~- H) }
  474.         strRegsName=szRegister;/ V( m, _7 j8 A4 w) `. u
  475.         char szPatchURL[100];6 t0 W  a% O0 _' G7 y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % x" e, q/ Y( d/ v. {+ i
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  A) m* B) H0 y2 q; G4 [& y
  478.       }. j9 ~: K4 I" c! P
  479.       else
    7 x1 k7 ^  P9 Y" P6 N5 ^6 j& G
  480.       {
    0 j" c' r' o  q! P' ]% J! z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ m& P5 f2 j+ _: [
  482.         strRegsName=DEFAULT_REG_URL;
    8 {$ y0 m+ Y% J+ t
  483.       }; a2 q: k! o* j& F6 w! F) }( M
  484.     }
    7 U% q, o" f) W# Z7 X. a% Q
  485.   }
    . @# s1 q. X. f! f
  486.   return true;4 e& r# m$ Q6 L% B/ ?' [. q
  487. }
    2 K+ u( @- R2 b

  488. ( B/ U4 W9 r3 J' }$ c$ L
  489. #include ".\ZLib\unzip.h"
    5 i- h( i) T$ p8 u" I6 t+ s% A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);& I& [2 a! f2 }8 _  C/ L4 T
  491. /////////////////////////////////////////////////////////////////////////////# ^+ q* ?. O4 {2 }
  492. // CRevAppApp initialization; c6 |- d5 [, h  o% Y
  493. , |/ H, ^6 _8 [; t
  494. BOOL CRevAppApp::InitInstance()) g# V2 e. O0 w7 }1 k$ M6 b
  495. {  y( K8 C  C. y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    0 X& N8 \3 V  \3 j
  497. ' c  o0 U( `- D2 e0 Y( H
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    : O, L  I7 a8 h; {/ o* g; g/ {" Q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    0 d% Y, _6 o* l0 H# J
  500.   {
    8 P9 y1 C( f; b) w% V0 K, b
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    5 }4 H' t7 h- z9 N8 f. H  o
  502.     GetPathFromFullPath(szPathTarget,szPathSource);! F% e4 {: {4 }" m, d+ }+ l. a$ [
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    3 j+ ^0 m8 u: E! T5 u
  504.     {
    * b& W8 `$ c8 \! C1 u( D1 k, w
  505.       strcpy(szPath,szPathTarget);
    , j% T# S% u) v6 P
  506.       SetCurrentDirectory(szPath);; G5 Z( P+ ~. F, N: g
  507.     }
    % {; @3 l6 p7 k; w6 M
  508.   }+ t" q4 i0 F% y" S5 G1 n; J& _$ F
  509. #ifdef _DEBUG( l8 H3 z7 z4 h) }# m; c
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 ]& z* t( H- L
  511. #else, ?' X7 \6 h, q4 [: f7 O( u
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& h5 F& o8 I, A( C3 m" P; {5 z
  513. #endif, P; K$ D- Z6 o6 \) C
  514.   {/ K/ l( Q3 I) d2 f& I/ ~- ]
  515.     char tempFileName[MAX_PATH];  K0 M% O% N! b9 C9 N
  516.     strcpy(tempFileName,szPathSource);; x1 k5 E6 N+ j2 u# V( N
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ! {4 ^9 H* m* m. h- E' Z5 F
  518.     strcat(tempFileName,"\\$CSUpdate.exe");4 |7 \6 c$ c( M- Q1 z, J# f
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);: l3 {. @# p% H/ [9 y' z. Q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);- F5 Q1 V2 _3 b0 y: `
  521.     return TRUE;! _- \9 z" ?/ G/ F* u8 Z2 C: A
  522.   }
    2 X& y+ [& y# I. a
  523.   // Nuke 0118: Delete run.exe" `! ^. y/ ^, U/ \/ {7 |7 t3 Z
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );: o  N  R5 ]- P
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    7 r" @' w9 R8 c0 y2 O: W
  526.   if(!ReadCfgFile("Config.ini"))8 W/ M+ R3 I4 C* o3 }& M
  527.   {
    3 i9 `  ^3 W& x  U3 h  K7 n
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);# z& F1 a# v, d/ v
  529.     return TRUE;
    7 r1 x7 f: K$ K4 N
  530.   }0 k; ], x# a/ D: G  K2 _$ S
  531.   HANDLE mutex;# V+ m' n1 ~) M$ U. O) V
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ A% H) M. q" J3 T% m9 L
  533.   {
    # I! K! a$ s9 e7 n% i) M8 G
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)4 j0 ]3 ~3 h1 K* n. n* D7 B
  535.     {
    ( f; Q( x! C' y( n* C8 P" O/ r
  536.       CloseHandle(mutex);
    , t! r; R( @  D6 e9 i' [6 k
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);" x  z7 k3 V) r
  538.       return TRUE;6 i  r8 D* H; V: H5 J; B( Q; X; t7 Q
  539.     }/ h# S3 k" _* S; E
  540.   }  
    % U+ d7 N8 M/ A
  541.   CloseHandle(mutex);- D0 P8 S' ~, m
  542. , A% M4 G$ Q4 L$ ~; x: Q
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    2 ?4 H0 N- l+ o

  544. ' |; R9 I; |" ^
  545.         AfxEnableControlContainer();2 ?% L1 D* y4 g0 P2 m' d, a
  546. / m/ }/ _- F+ u  {/ k$ ~9 k; E
  547.   bCanUpdate=FALSE;
    7 j6 o/ h0 E3 f/ A' W  m& I/ W. F
  548.   dwStartUpSteps=1;
    0 D" ?: I" u' ]1 z+ c$ l- }$ z
  549.   dwProgramState=AP_NOTHING;6 {9 z5 d7 k( O7 T; b7 c4 I  R+ f, X/ U& e

  550. 3 k5 T, z$ J/ e. A: \: V% v
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    9 l5 A2 v* K, y( I9 l. C* z/ s( f9 F

  552.   W( c# E, s6 z+ P8 ^1 X
  553.         // Standard initialization2 ^: ?+ f2 H1 G' T4 F5 y: i; ]. |
  554.         // If you are not using these features and wish to reduce the size4 t7 c+ @# u5 o  f- D/ f
  555.         //  of your final executable, you should remove from the following' c: D6 f5 q" u" w
  556.         //  the specific initialization routines you do not need.
    " \; |. A5 t1 F2 Y$ F( [9 z
  557. . _6 Q2 H: ^0 `) c* s1 G
  558. #ifdef _AFXDLL9 v. p6 d- v  j
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    3 i1 Y) |) f6 C
  560. #else$ V4 W8 H$ a7 D" ?; Y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ {& Y% a: N. Z0 ~4 C. j
  562. #endif
    ; h, k+ r) ~, Q' v* O
  563. 8 b$ K5 [, ]$ W& z* [5 b
  564.   dlg=new CRevAppDlg;% d) r/ t" E; b: {8 p
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    2 n4 R, ~- K; s2 Y
  566.   dlg->ShowWindow(SW_SHOWNORMAL);' l1 e) ?6 h& V5 ^* P8 G8 k/ w1 W
  567.   m_pMainWnd=dlg;! ?# j2 f. g* z$ ^, F% n; H6 g

  568. 6 \9 ]. r2 @7 ]$ s; e, u' W
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);6 N4 V& p* ~, D- R2 A  @
  570. ; R/ x5 j, C, e# d+ i) ^
  571. //  GdiplusStartupInput gdiplusStartupInput;
    , P3 V4 B; R' ^$ f# o
  572. //  ULONG_PTR gdiplusToken;; N: @2 C" D8 B# z2 ]  d: l
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    + `1 F! z5 ]3 e1 s/ e! p& ]

  574. , Z: _, D  r1 ?  ^4 h; K
  575. //        CRevAppDlg dlg;( X. H: i7 [# D' T( f) G
  576. //        int nResponse = dlg.DoModal();
    : G# d, x- W" k0 ^
  577. //        if (nResponse == IDOK)5 k5 O$ B' v6 B" t3 w8 w2 W3 q" ]+ `4 j
  578. //        {  O& X1 ^, X3 n! W
  579. //                // TODO: Place code here to handle when the dialog is
    1 n/ @8 w7 R$ C
  580. //                //  dismissed with OK( I* b* Z' ?. ~# ^2 C! l
  581. //        }
    9 H+ r7 \" _! W6 Q
  582. //        else if (nResponse == IDCANCEL)
    0 y* @& Z4 o( F! E7 t) W
  583. //        {
    : l% `' e% \8 h
  584. //                // TODO: Place code here to handle when the dialog is; f6 I$ M' G1 Q
  585. //                //  dismissed with Cancel
    3 a& U7 n1 C" D+ \
  586. //        }
    ( R7 c/ ]' m. Z$ J3 a

  587. 5 e% F. r3 e6 b6 y: L. Y" w
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . `9 R+ Q+ i3 D  n: Q. R# h
  589.         //  application, rather than start the application's message pump.
    , [- @6 b0 l0 ?( ?( R
  590.         return TRUE;2 i! W& D5 m* K
  591. }
    0 _" ~* ]* j- k3 X# y' g' z

  592. 5 H" V5 ?- V- m, `. }& ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    $ L- y2 q; O+ O( E! P
  594. {4 S9 i& L. g" l2 P; l/ O6 b
  595.   int i;! F' }5 r* C3 z4 ?0 X$ O
  596.   char *szRet;8 E7 Y& o2 F9 }9 B

  597. & P/ C0 ]7 e4 J2 |; w# B
  598.   if(pSource) { itoken=0; sztoken=pSource; }  S! O1 l# S8 a" y' H% E" `
  599.   if(sztoken)
    # r5 K1 ?2 R! V+ n
  600.   {
    0 g# @/ F. {8 I. m9 U2 u
  601.     szRet=&sztoken[itoken];
    * y0 J5 n7 q, j3 ~2 p
  602.     while(sztoken[itoken])3 C, {( W# N, {$ m% l% A+ g
  603.     {( _0 g+ e" _6 T* i: N5 |! ^$ Y7 A
  604.       for(i=0;i<(int)strlen(token);i++); A8 v0 l* N0 u  x; `3 `
  605.       {; x1 j) C5 N% ]
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])) r) J  v+ l- G) W$ s$ B& n% ]- ?
  607.         {
      K0 {( E2 x4 y4 |0 d& w
  608.           sztoken[itoken++]=0;" I' X- j. h" K5 Y
  609.           sztoken[itoken++]=0;  \" O6 x, g4 ]6 u- r% N8 y
  610.           return szRet;
    * M: t, Q& ?6 z0 Q% b7 T; ~% C
  611.         }* h2 G+ ^  b! {  m& A7 w
  612.       }$ k4 x+ y5 Z2 c8 U4 Z, ]
  613.       itoken++;
    - _- }3 P/ Y" l3 ~) Y" Z, h/ b: ?- |
  614.     }
    1 I! u4 i: l/ Z9 `1 b# r, a
  615.   }
      f) L7 X* ^5 N9 o
  616.   return NULL;, d/ ?- E  E% W; L* v! ^
  617. }
      A. M7 D/ V# U. S
  618.   o* C( `7 X( _% D
  619. void ProcessProc(long Total,long Current)
    1 [" g% S2 R- i7 c* `8 n
  620. {0 D5 v- F) \+ {
  621.         MSG msg;
    : W  C1 E+ d8 i4 w# I% t
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    . y- x/ f6 T7 j8 h- {
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));" g* h( R# v$ y7 H+ W
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    3 ?" j6 G0 O1 w3 A! E: o1 m! Q
  625.         {% b% p6 s, B  ^$ ]
  626.                 if(!GetMessage(&msg,NULL,0,0))) C, j8 Q8 v% @1 j, Z2 Y
  627.                 {+ B* S! ?3 \1 E7 r
  628.                         return;0 M1 O( V/ `  v8 X" E/ z  Q
  629.                 }
    : E& ?) }' ?; _$ r2 H
  630.                 TranslateMessage(&msg);
    5 \. ]2 Q( e1 k2 D$ V# [( V
  631.                 DispatchMessage(&msg);
    2 f6 ~. c, c& M" t7 U. D3 Z
  632.         }       
    1 f! y! I- E. G+ W. z
  633. }' L/ K3 k7 C& \- s5 o

  634. - T& J; b1 Q( i/ ^
  635. BOOL bFirstChar=TRUE;
    8 O% i, l% y8 K3 U

  636. 7 V. t* R, H! F! b" j+ Y
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    * n5 m5 M9 h: A& j7 Y
  638. {
    4 U0 q8 J* R( v
  639.         // TODO: Add your specialized code here and/or call the base class
    $ _# n; B7 {. E( m7 m; W
  640.   switch(dwProgramState)
    2 C/ k" t4 `# `7 h4 h6 u
  641.   {( B, {$ h$ ]) g: v, m3 G
  642.   case AP_NOTHING:9 r' q  a( k/ }' ?' c% H1 r
  643.     switch(dwStartUpSteps)
    * M" U, U( p4 J6 G, j9 v/ |7 M; K
  644.     {
    6 g# d2 _# p, A- p
  645.     case 1:
    % I! s9 |! G! a7 [# o0 l
  646.       {, i" u6 f& S  F  r9 D+ ]9 C
  647.         int i;
      C# \  ~' x6 b
  648.         CDC *pCDC=dlg->GetDC();
    / S- m. o7 s5 N3 ]& c  v* D' A
  649.         HDC hdcwnd=pCDC->m_hDC;  x+ E  K2 e" `5 Z& z2 i
  650. //        Graphics graphics(hdcwnd);8 w4 d0 d/ o9 g' L, U
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    3 K6 Q( j/ M9 v& k# E0 ]$ w; U
  652. //        INT iWidth=bitmap.GetWidth();
    ; n" r. r0 T+ @$ ]
  653. //        INT iHeight=bitmap.GetHeight();
    ! B5 n) }" p; T0 r
  654. //        Color color,colorTemp;5 m1 S  L" {! I& e. {
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)- X- A0 `. C. |2 V- Q8 a0 _
  656. //        {( y# E3 K( s4 P6 {  q  M( e
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    : o" s0 o5 A  J) m
  658. //          {3 z3 H& q' v" z' `, {: e- S$ c$ D& k
  659. //            bitmap.GetPixel(iColumn,iRow,&color);( @; U7 r: O% D3 r/ x1 m/ @- B
  660. //            colorTemp.SetValue(color.MakeARGB(
    8 o! m9 J4 q( l- v1 H* z6 f2 O
  661. //              (BYTE)(255*iColumn/iWidth),
    & |0 |$ C! g" q9 |( d
  662. //              color.GetRed(),
    0 k$ E1 c. b. @! Q) b& f5 i2 E" C
  663. //              color.GetGreen(),
    8 q, t* I' u: M
  664. //              color.GetBlue()));7 }- v# E& Y* P! O/ f+ t7 u7 ?
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- a2 P- ]9 `' i' W9 Q8 y% @( r0 M! L
  666. //          }' P5 B: R5 Y5 J: j
  667. //        }
    ) y2 r+ ~* b7 D- ~; }' `
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    4 E1 @7 N( j) ]9 c+ A: c- `% e( k" J
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- J+ X" u) M  w
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");) J: S3 `, ?5 y
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 m/ D$ Y( t& c9 p
  672.         for(i=0;i<240;i+=8)! \3 z8 Y9 z0 i8 \* |
  673.         {
    5 j2 o8 Q5 h2 f
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) ]/ Y, ^5 \5 V4 x4 |5 E7 q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 Z8 L3 |$ o" L6 |& j" I2 i! M
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # X7 C/ E& `5 o& X
  677.           Sleep(33);
    + s2 y* o" Y) M! t* W
  678.         }' t; L# P+ [( S8 P4 i
  679.         Sleep(1000);7 `. z! S6 v4 W# K
  680.         for(i=240;i>0;i-=8), _# g  E/ K5 c) Q' `
  681.         {& i' U9 u8 c8 u$ L* C- G6 n
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ A/ I! X7 s$ F9 V, G/ {6 D
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 P; `# |& x6 C
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 A0 `6 E  P! N
  685.           Sleep(33);
    & b3 d: [4 [/ u, C
  686.         }. G. c9 c: @  @
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);! R6 u$ l8 ~* Z  U7 f* y  r
  688.         dlg->ReleaseDC(pCDC);8 x- O7 j' h2 J. G8 a5 }- B: X
  689.         DeleteDC(hdctar);% N* f/ J( A1 L0 k; B2 _
  690.         DeleteDC(hdcsrc);
    ) a/ _6 H: D$ P1 Y5 \! U
  691.         DeleteDC(hdcorg);; v; n+ n/ u2 p  g
  692.       }
    + y. S6 |7 u) C) c; G0 Q4 C
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 C& W. p8 t1 a
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");! `' X4 O: b7 q  D, d
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ) D  L: G0 I' T: `  w$ j6 f
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    # y4 g) \; ^. ~$ w
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 E) [2 q! X2 t' T. ?) t* n3 C
  698.       if(!Dn.Connected())" y' d( x+ E" ]1 o9 l3 I
  699.       {" p4 T8 [# q$ p- o" n5 N  g
  700.         dwTotalFiles=1;
    ; k  o+ w7 D2 i9 G5 f
  701.         dwDownLoaded=0;
    $ {7 F" c% Q$ v" ]2 G/ F
  702.         bSilentStep=TRUE;. [2 A3 }* d. K8 T) Z% B2 g
  703.         bCompressed=FALSE;
    9 n% @+ Z+ A* Z! V, w4 }# t( |
  704.         strExtLocal.Empty();
    & r, c. ~. z  \
  705.         strFullName="readme.txt";
    - H5 z# b( c: b' v- O
  706.         dwProgramState=AP_CONNECT;' D% u0 L: B4 g! ]5 i! m
  707.       }
    : |4 F& E# Q4 }4 d; B3 k! {
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();7 [7 m& C0 j, U+ q
  709.       dwStartUpSteps=2;5 ]9 m& A; G2 _) r% k
  710.       break;
    $ i1 j4 U! _2 [" R1 ?  A
  711.     case 2:
    " k0 u/ H! |4 P  N( y. q5 k
  712.       {( y; @* v; l4 t" ^3 v4 t
  713.         int iEOF;
    - l( N% P4 T4 x8 v6 D7 N/ {/ z5 }
  714.         FILE *fp;
    * `7 c& {6 v& B% a
  715.         char szString[512];
    8 M1 v& u0 }/ A. G( f- ~' e
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    1 C" V( d1 T' z0 V3 }
  717.         if(fp)
    . d# T5 z: Q4 r
  718.         {: b, z1 L+ W% Y+ d4 b0 C
  719.           do
    & p2 Z& F: C- b5 G( P
  720.           {
    ! G/ U# @* f% `
  721.             iEOF=fscanf(fp,"%s",szString);5 a+ T' M* k! c& n* j1 B& z  M
  722.             if(strlen(szString))( [$ T& N7 M3 w+ l5 A' {
  723.             {
    5 V4 k* W, |3 H- P+ D% t* h
  724.               if(bFirstChar)$ M+ B8 a, }! }. [% `
  725.               {" R9 q: b) E6 |; E, q7 U
  726.                 bFirstChar=FALSE;7 _$ Q% K2 N6 k+ \
  727.                 bConnectIsBig5=FALSE;7 e9 O$ A: f3 g$ H% M; ]( C
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;- s3 L* b$ A* @5 J- L
  729.               }% p; Y) f8 i+ q3 F9 a
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    : w# Q: q, Y5 A: u  C8 w
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));9 x+ S, A+ c( J8 I" M7 T( k7 M, G
  732.               dlg->m_ListText.AddString(szString);/ w1 k3 W8 J4 a
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : V* [5 [& i& b% O* y2 x, c# I
  734.               *szString=0;
    2 T/ w* l. g- ~
  735.             }3 M5 b) y' ~9 }# S! V
  736.           } while(iEOF!=EOF);* \, S) @6 U# }& J3 v  U
  737.           fclose(fp);% N0 S& A4 E2 y( _
  738.           unlink(".\\DownLoad\\readme.txt");
    ) r8 M1 ~/ V8 O1 m; v2 e
  739.           dwStartUpSteps=3;0 i1 J! e  j" e; k1 U
  740.         }
    0 y9 m- b% f1 W
  741.       }
    ( L5 A9 ~, p2 n/ d6 R) d# I5 X
  742.       break;
    6 e$ D. X9 z7 K* ^
  743.     case 3:
    / |: a7 a- J. {9 ]0 ]; o
  744.       if(!Dn.Connected())/ O7 k7 E+ [7 h  [( K; y! ^
  745.       {+ L- V' F9 @2 W+ `! C, b( K' ~
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);0 C% ?" Z+ r$ H
  747.         dwTotalFiles=1;
    1 N% A  x: E& R( M2 y: b% w: a5 H
  748.         dwDownLoaded=0;  ^2 G7 i. [$ V1 ~# b! f
  749.         bSilentStep=TRUE;
    " I! V$ v* K7 z! R4 S
  750.         bCompressed=FALSE;
    7 {% _+ n" O+ \! C! p
  751.         strExtLocal.Empty();+ H1 t7 f+ s- \+ h4 N4 U8 s
  752.         strFullName="checkversion.txt";
    3 Y! o2 @8 e" L
  753.         dwProgramState=AP_CONNECT;
    / B8 p$ y, `1 T( q* n: ?3 x
  754.       }( N- K* P% O3 e; F8 R; Q# O3 v
  755.       dwStartUpSteps=4;& Q9 A% B6 q$ K. ^8 G' [3 r
  756.       break;
    4 E+ y+ n2 r7 M' k; j% }
  757.     case 4:; R: h; b5 l! F: _
  758.       {
    0 J& {. u# v! Q5 y# Q3 j1 t
  759.         FILE *fp;4 c& w& ?4 o, `5 P
  760.         char szString1[128];
    % z- ~0 V) r( P9 I
  761.         char szString2[128];7 d- L# B5 ?; s: F/ _; P
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");. Q: p& C6 |1 k( C4 a0 i& y
  763.         if(fp)6 N: f/ ?. w+ }" `
  764.         {, p- B- W4 e' P' Q$ N
  765.           fscanf(fp,"%s",szString1);  g! Y! R- c5 c9 _% E. S( _
  766.           fclose(fp);
    " @2 e# E- e& R! ?+ @7 v
  767.           fCheckVersion=atof(szString1);0 ^+ I3 X4 a# c( ~* m0 T8 E5 ]  ?
  768.           fp=fopen(".\\checkversion.dat","r");4 C4 E3 L. @8 F
  769.           if(fp)6 R* h6 [5 F' L3 ?
  770.           {" q3 O$ N2 G$ E2 m1 n6 @
  771.             fscanf(fp,"%s",szString2);3 c9 T! H4 R1 m+ x5 m2 V
  772.             fclose(fp);' |" g/ u& |7 d$ N7 p
  773.             if(atof(szString1)!=atof(szString2))
    2 J$ N- R& ?* [2 R5 F$ ~
  774.             {
    5 l3 [* H! Q% y6 n
  775.               if(!Dn.Connected())
    ; n- L* m2 y* r& [9 c1 e6 q
  776.               {
    ( c9 }4 V+ {6 m' k  V
  777.                 bFirstUpdate=TRUE;
      Q5 B0 }. K" [& Z
  778.                 dwTotalFiles=1;: i4 B. k6 ^% D8 C) i/ n
  779.                 dwDownLoaded=0;0 C* E9 E$ B. F( |$ \; L
  780.                 bSilentStep=FALSE;8 q% Y2 v  D1 L. C
  781.                 bCompressed=TRUE;
    3 o7 Y8 }8 M; ]1 {/ R2 `) H! |
  782.                 strExtLocal=".\\DownLoad\";$ a! Z, Q% q# I0 N$ S% s
  783.                 strFullName="update.txt";
    9 \: G+ M4 |3 ?! }  u
  784.                 dwProgramState=AP_CONNECT;9 _* v5 [4 }' f: A$ I
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 g# i9 L" b& i: m
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" D2 ~; z; B/ T0 T& m2 S9 \( M
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 q9 f" S0 r0 {6 j% T

  788. % Y" B& f& X9 ~
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 w0 c  ~1 E" L) X
  790.                 unlink(".\\DownLoad\\checkversion.txt");& h$ X' C+ \6 q5 `# b2 y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    , Q3 ?6 ]8 c/ _  ?% U7 g/ X
  792.                 {) K( }& `' Z" S) m# z7 R$ H; |3 S% }
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    % d& M* _7 G+ q' T" ~2 s# e
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");4 x1 n9 r+ l$ }
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");/ n. U/ ^6 h( Y+ r& F# v, i
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / z" Z: V! p! x/ I/ _: L
  797. # e, g: ^: O8 S& E* q1 B
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) A- r" G: X5 J
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' w% P# Z- o5 g1 q/ c. V0 Q9 n5 i
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");, w2 y9 O. l. j6 ~- [7 }# M
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + `3 i2 n$ W3 K* n; v
  802.                 }+ ]& a( X/ A9 Z8 [
  803.                 dwStartUpSteps=5;# u8 x1 E+ N4 F0 v, v/ E/ ]9 |
  804.               }
    ) B" @& p. C1 Q2 M3 j0 j; W
  805.             }2 P. C, E; `" m" h1 I& D
  806.             else4 |8 }' ^2 X9 J% m3 J5 q9 j' P
  807.             {
    7 @( ^8 N" |8 c3 [% Q
  808.               unlink(".\\DownLoad\\checkversion.txt");
    1 X, f7 _. q1 C, I
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    * A$ L. p) a2 P2 l- w& D) d# C
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    6 J! o& |/ R& g- }9 i
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");* ~0 L3 Q* u2 U9 }7 ?+ d+ ]$ d( ^& V

  812. % V/ F9 ~& S9 N6 {
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % ^9 q5 Q( V: J9 f
  814.               dwStartUpSteps=99;) v9 k; j$ Z+ Y' g6 G
  815.               bFinishUpdated=TRUE;
    7 H2 }/ M  j8 u$ e. Z
  816.               bCanUpdate=TRUE;
    ; f7 K& g7 w. K  K
  817.             }
    ( {& ?4 h  j6 ?& r3 y
  818.           }
    . W( c9 V8 n: [. l' \, t" i2 ]# Y
  819.           else! b9 r# E, ]. y* G9 h
  820.           {% m6 g# S* `9 Q
  821.             if(!Dn.Connected())
    & Z! `& J6 B# Z9 c3 j0 t! H0 O
  822.             {
    $ x9 G& A5 w# D! R, u# ~" T- ]
  823.               bFirstUpdate=TRUE;4 C, K0 @, S/ |0 _3 a
  824.               dwTotalFiles=1;
    & E) T% w% I  d
  825.               dwDownLoaded=0;
    + w4 L# {. c! |/ Q. i0 \3 z: \' X
  826.               bSilentStep=FALSE;
    / \9 \" u' P! O3 H0 j" m
  827.               bCompressed=TRUE;
    " c/ Z# o8 b" A8 [9 h3 T7 B2 q5 Y
  828.               strExtLocal=".\\DownLoad\";! k. p$ Y& V. \' V; A: }$ }
  829.               strFullName="update.txt";
      a6 G8 u* o: p* v/ n
  830.               dwProgramState=AP_CONNECT;. B! S$ z0 S7 \) Z6 m3 T) x  @* U' g. x# _: Q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + i' j/ X( B; T# Y7 u( J, g
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ @+ j# R! U6 h8 o6 U
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 ]4 C0 l  H$ H8 H$ _2 h
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / @' C7 d6 s8 X+ _* h
  835.               unlink(".\\DownLoad\\checkversion.txt");
    9 e% x+ I/ F( {
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    : E. ^' x) w: a) o( V0 Y# D
  837.               {" j, f9 a6 ^& B8 X/ g6 O
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");  [- P( ?1 T+ W1 s
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");/ @0 n% `* x: z+ o+ J1 Y8 l0 Y0 I
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");. I3 J) z5 Y; X  h, j
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, p' T" C- f' x0 g' G0 \
  842.                 , `1 d, I: {0 E4 [& F4 v
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % w" S- \. ^( z. f
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : o/ o0 K  ^' k$ @9 l
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 P+ L& W3 [# L# E+ C
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ K2 b! q+ f5 W0 t
  847.               }# m% N; I) I1 H- T, U& I
  848.               dwStartUpSteps=5;4 D/ D9 t  N8 m$ @: K
  849.             }
    9 M3 W& u) u" P4 b  o$ Q& n
  850.           }
    6 V, ?4 [. t9 y+ ^
  851.         }3 K$ T) Z0 j; f+ z5 i7 m
  852.         else- w; T/ m- m  x4 W3 |" H
  853.         {
    6 ?1 s) p8 W' a' Z- {
  854.           dwStartUpSteps=3;3 |" E5 B( Y" L  x8 u: x1 E. m
  855.         }/ A, i, X* ~9 h$ E+ w
  856.       }
    - F) u4 K$ j$ y+ e" i( w
  857.       break;2 }/ I( ^& n% |8 C2 Z
  858.     case 5:8 \2 ^0 J8 `" ~. G, V# K
  859.       {
    . i* A- n% x% n: M, T! ~- l+ p: J2 a
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    & Y( v* ?0 C/ i8 Y$ |( X
  861.         {
    ( R! m" U2 b2 ~8 B) k' d7 `
  862.           int opt_overwrite=1;* b4 h3 |7 B$ [% o! r" W
  863.           int opt_do_extract_withoutpath=0;3 U9 |% c7 o3 O; c6 `
  864.           unzFile uf=NULL;
      S. Q6 ~" t" G$ ^7 b) y% {
  865. 0 y- ?/ ]$ ]- n& ^( J$ q
  866.           uf=unzOpen("Wsa.zip");
    . P$ @& t' ~/ C% [$ r0 l) k9 u
  867.           if(uf); W( z: [9 `3 A5 _
  868.           {
    - I' m( E, f# ^3 v- x
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ) w2 a1 X0 ]5 S5 N& `
  870.             unzClose(uf);
    8 F' j0 q: i" N. U+ U& E. s
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");+ |/ \3 M7 g* M. `
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    9 j+ ~5 \+ L& c$ }* |6 s! P! k4 T
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    . @! C. @! J8 q  u1 }
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 Y; U( W7 I+ F3 w/ I* X' z( v6 i
  875.           }
    0 W" s2 n- d( e4 k3 H* v0 t/ B. R
  876.           DeleteFile("Wsa.zip" );/ L6 ?$ K/ w$ w3 n  h  z) T* ^
  877.         }
    7 v8 j! c% z2 _/ X2 k0 X
  878. - Q; H* @* }; ]. {
  879.         if(CheckLocalVersion())# Y8 ~) ^2 a! d9 P
  880.         {
    ( L* x9 d! \6 c' m! ^& z* f
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    / Q3 H3 [4 o0 f8 e
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");' m5 X2 e: \) v. q" J3 u
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");% }' b- ~6 i8 S+ J
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 q& p& x8 f9 v
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    . V1 ^) p1 \4 h2 Y* r
  886.           dwStartUpSteps=99;
    6 p5 S& Y$ G; K, L$ p
  887.         }% A9 a$ R* @" G9 h/ {' T) y5 N1 E
  888.         else) w' W% w- ^) f- s
  889.         {; Y* W7 j: J* b3 [$ F& @
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 K. k( v2 p0 |
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    * p: a9 i/ |2 ^+ C- H5 v4 \/ p- |
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    $ T2 j6 v  \' l; \$ |

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

6 v9 |; y% c/ |2 _% {
; j. a+ q  u* c* z0 T3 Y- M) w

評分

參與人數 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客服返回頂部