找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
2 X/ Y/ n3 ?& {$ S
  1. / RevApp.cpp : Defines the class behaviors for the application.
    : n$ b1 j- A5 J* s% V
  2. //+ h, ]* |! |% u7 g3 W
  3. / M: X4 Q  j7 Z7 e" d- J1 k% I! x8 B/ L
  4. #include "stdafx.h"9 {3 b( O1 ]' D1 x
  5. + Z4 C( N' n- Y" v1 U3 ^7 k
  6. //#define UNICODE
    & y" h1 I/ |. K+ \7 L- t3 c) O
  7. //#include <gdiplus.h># e. J, n/ b! z# I5 y
  8. //using namespace Gdiplus;+ S) j0 u- w% N3 c
  9. " O, ?5 ~& m8 n7 E) K9 R
  10. #include "RevApp.h"6 N# D0 Z; e+ q: J9 J( \- o
  11. #include "RevAppDlg.h"* n2 G9 c1 U5 z- B+ [  Z! M! W
  12. % u, Z* s2 Q$ F% h; v8 S
  13. #pragma warning(disable:4786)
    0 `' B" ]5 V: C$ P* K3 d, e
  14. #include <map>4 F- B* t6 J! k( ~- W! t# E3 D
  15. #include <list>
      b% ^; C3 X! @# v* t; b
  16. #include <direct.h>6 c  |$ Q- z( d; n" n

  17. . c( T% p' j! C# k; y0 v. Z
  18. #ifdef _DEBUG$ O# a& ^: z1 ]6 Q; R  y! r
  19. #define new DEBUG_NEW3 D3 L/ ]4 ?: s( A- Z+ ^; i
  20. #undef THIS_FILE5 I6 w: Z. u: c/ X
  21. static char THIS_FILE[] = __FILE__;
    * d; ~1 W1 q" _% I* ]
  22. #endif
    ( K& S) H' c- E! r7 U
  23. #include "SkinResDef.h"2 `/ D$ ~2 U& o9 Y% F6 T0 z1 f- A
  24. #include "ChangeBG.h"2 v+ w. g+ s( K  c6 f
  25. #include "AFXINET.H") A+ y7 T  l- D

  26. 6 r9 T, ]# g, t, w
  27. #define TRADITIONAL_CHINESE 0" ^3 e. Q( d  k  o& m
  28. #define SIMPLIFY_CHINESE 1
    2 c+ X7 q6 H5 j1 ~& k9 h
  29. #define ENGLISH 2
    2 d0 I' h6 }5 [* J" {
  30. int m_iLanguage = ENGLISH;
    - {, ]$ Z" \' y" B! V
  31. /////////////////////////////////////////////////////////////////////////////9 x& l3 n7 }% ^$ C
  32. // CRevAppApp
    3 U( H6 N4 R) l) g; W3 l

  33.   T" ?8 l9 W5 f" a
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)6 q( O6 R. R! W
  35.         //{{AFX_MSG_MAP(CRevAppApp)' u) x% g2 g) `) s# u( u
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    / v. }- f6 ~) g+ m
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    % `- n/ _5 |4 ~, k, C
  38.         //}}AFX_MSG
    % R2 w5 G3 k3 V# k0 o
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp). r1 D4 H( \2 ]; O: x
  40. END_MESSAGE_MAP()
    9 _9 D& D: M3 D# N; f' ^1 B* T; s# D

  41. ) Q! H! y2 v# R
  42. /////////////////////////////////////////////////////////////////////////////
    " y6 E  a" z" g) S
  43. // CRevAppApp construction7 K5 J5 O9 T2 r8 L

  44. - Z0 o, z, X! u' y, ~& q" N
  45. CRevAppApp::CRevAppApp()
    7 g5 \. Y8 B3 N( L/ x
  46. {
    & j1 a% N) }3 P. M
  47.         // TODO: add construction code here,
    ' u* x4 P4 f4 ~0 z
  48.         // Place all significant initialization in InitInstance  f0 b: ]! d' B2 D  j! [; @0 k* d) k
  49.   bDisplayIsBig5=FALSE;
    - [9 f+ Y5 ~: s
  50.   bRestartUpdater=FALSE;
    6 p4 _2 l9 |% w. _" j2 N
  51.   bFinishUpdated=FALSE;% Y% a) w' T; t" T
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    / j( ~, X0 f# K6 g, `& c- ?
  53.   InitChangeDataBig52GBKS();. p1 d4 ?  L! o- Y7 [5 w
  54.   InitChangeDataGBKS2Big5();. T4 a' F- n* f' `. E1 w4 p2 s$ {
  55.         //
    4 {' |4 ]8 ^/ b8 ^" D' M4 \
  56.         bClickRunExe = FALSE;
    ! N# b/ g* X- f) ?. H
  57.         //: `! S; v0 ]4 ?$ x: S
  58. }7 A$ L7 n. L) e9 G* ]. @/ ]

  59. ) R7 L1 a1 z2 [2 I
  60. CRevAppApp::~CRevAppApp(); |8 {. d* }! M" x. B
  61. {& t& S5 ?7 c" s. u9 w) L
  62.         // TODO: add construction code here,( l& n' ]$ O0 c( Y* b) m
  63.         // Place all significant initialization in InitInstance
    6 [( F0 S; }5 y, M4 f! q/ w
  64.   EndChangeData();
    " o9 u" {2 S8 f3 J
  65. }
    # R9 L* C5 V" |

  66. ' `8 q. a. P3 ?0 W- `
  67. ////////////////////////////////////////////////////////////////////////////// r# ?/ m" r2 y* S2 e  Q. R1 [
  68. // The one and only CRevAppApp object- |  k/ I& {! ?. a6 `
  69. , b% o  x0 t8 q* b$ w" P, R
  70. CRevAppApp theApp;3 e" p1 d# @0 t" }8 T8 [
  71. ( o- v" t/ G0 c4 J5 {! o  j
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ' h0 e9 {9 j- S: q1 u2 d* C0 Q: c
  73. {
    % u4 n$ f/ x: u( f) \
  74.   int iEOF=0;; N; {+ `$ `- a- b# f, b
  75.   char szTempName[MAX_PATH];) }, B, N' D8 N& F0 E% n- a* ?
  76.   *szFileName=0;
    7 [# d/ i3 V/ b5 E9 r7 ]
  77.   iEOF=fscanf(fp,"%s",szTempName);+ B" f; N/ D. y: L- m
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # A2 _9 {. \- p$ L& e0 A
  79.   {7 R$ a7 n3 g$ Z9 r# n
  80.     strcpy(szFileName,&szTempName[1]);8 Y- G7 L0 x1 l, n4 u+ }# Z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF), b  f5 l8 G" M8 t9 A- N& x
  82.     {) j2 u4 V3 {  y+ I5 w
  83.       iEOF=fscanf(fp,"%s",szTempName);& @& i) P- d/ G1 W1 R/ l
  84.       strcat(szFileName," ");
    5 m( `/ U6 ]1 x( Y7 M
  85.       strcat(szFileName,szTempName);
    , u( \8 V8 t% I* S; t2 U1 |
  86.     }
    ; A3 [% {% v% \, i
  87.     if(strlen(szFileName)>=1)
    " W: L& A3 C( E! H% r
  88.     {( G3 A  b; y+ @% Z; @
  89.       szFileName[strlen(szFileName)-1]=0;
    : x$ J3 A) X. y3 A' f  A
  90.     }
    . L* j0 c" M$ k( j) Z
  91.   }
    - f6 c5 D, f# o2 o/ Q1 H
  92.   return szFileName;& Z+ d1 D# G/ ~, [3 {5 b+ j
  93. }
    7 ^0 G9 _+ P8 m% F; Q7 H( X  h: L

  94. $ s( W7 s. M& _* P# ^% r
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)& S, A5 h: n! }. E+ w, z3 w2 ~
  96. {3 E5 V. @" f1 q" |" `
  97.   FILE *fp;( L. T; ]; z* r# ^1 V9 ?$ Q  S
  98.   char *key=NULL;" ^7 {- S, I, ?* \
  99.   char version[MAX_PATH];* L. y# k. U( ^) a' i1 S; S
  100.   LPUPDATEFILE file,olds;2 }1 [3 p0 S, B" s* t/ V: e
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    * ~, q1 Y* K+ b

  102. . M# Y' K" `. h% s8 D7 B0 U3 d
  103.   UpdateList.clear();! A" P7 B5 @7 j6 \3 s
  104.   UpdateFile.clear();
    & E' G7 h6 E- ?2 n9 U$ ~
  105.   if(GetFileAttributes(filename)==-1) return false;( g  b* C" d! X4 c6 a& t9 X9 A
  106.   if(!(fp=fopen(filename,"r"))) return false;% O1 a8 z7 R) J2 Q  {
  107.   fscanf(fp,"%s",version);
    ( l, c. `8 K" y5 l% }' K6 E, F
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }0 Z/ u/ J, M- D4 u
  109.   while(fscanf(fp,"%s",version)!=EOF)
    8 [6 T2 `7 Q6 ?) T; f$ U4 ]2 u/ X
  110.   {, G7 S& U" z9 t, L  Y: w. j9 O% s( F! S) a
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ N- R; n: {# l( H' y
  112.     fscanf(fp,"%s",file->path);% Y: X4 o! |: ?
  113.     ReadFileNames(fp,file->file);
    + F4 [' u; j( q
  114.     strcpy(file->full,".");
    # S; f# M4 T0 S, u/ Y
  115.     strcat(file->full,file->path);* G# m. x; M: U) B
  116.     strcat(file->full,file->file);. E6 S4 P9 F8 m* X" ?% ?5 J
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())5 K9 z. Y$ u8 F# |4 _; O$ X
  118.     {) ~* ^8 C6 X6 u+ c6 R4 G
  119.       file->vers=(float)atof(version);' B+ \9 I3 _. j, z3 @+ S
  120.       UpdateList.push_back(file->full);& N3 U. N* f, m8 K' L$ ?
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ) `5 |8 A% |/ a. x$ C
  122.     }
    4 C2 H* V# X5 n( z( c; c  d
  123.     else
    3 W& |1 R7 ]/ O& B  P3 A" J9 {
  124.     {
    8 n- {- ?0 u0 c/ J) x$ b
  125.       olds=(*p).second;& _/ A/ B1 l1 @- O6 S4 z
  126.       if(olds->vers<(float)atof(version))6 ?# T( T" P2 k7 B! g+ q
  127.       {1 v. u4 w* X3 H1 I
  128.         olds->vers=(float)atof(version);& v& A) a0 m8 @8 ~. H! d4 s
  129.       }2 D  \5 y$ d$ ^! b5 P* i
  130.       free(file);5 Y; ]- L/ Z3 e5 ^* l2 [- r% ^9 v
  131.     }
      f+ R# p* t  z7 S6 j8 L
  132.   }
    9 C) X6 h8 M7 v: C
  133.   fclose(fp);- C  q9 V5 B; m$ o
  134.   return true;! e8 H, A! b& {# [; ~5 M, T; p
  135. }
    . l+ S- c) A" r' z

  136. " {' R1 J6 m# y( j, ?& a
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! `; _0 d2 ]. f, @8 _+ l
  138. {
    2 Y. T8 x# u4 h8 Q
  139.   TCHAR  szFull[MAX_PATH];; E; d! q& Z! N
  140.   TCHAR *token,*inter;
    ; k; y, C1 f6 g  Z# h6 p; H
  141.   *szPath=0;2 M% S' O5 @: ^: ]% D/ S  o, b: V
  142.   strcpy(szFull,szFullPath);  J$ b' E% a& I/ I4 b! a! d* n
  143.   token=strtok(szFull,"\\/");9 k# \/ \5 u* ~: S4 s8 K- {
  144.   inter=token;, X4 Z9 T) H; g
  145.   while(token=strtok(NULL,"\\/")), s- d" Q4 A4 @9 j, Z( y
  146.   {
    $ d! |$ i  i7 }, ~
  147.     strcat(szPath,inter);
    0 u$ D, w: W: s$ J4 E# ^
  148.     strcat(szPath,"\");( ~* b1 T9 h4 j) C# |8 `+ J
  149.     inter=token;
    - F' b& ^( ]2 D" v. K' g% G. S
  150.   }
    1 B) M5 n* m" L
  151.   return strlen(szPath);/ A4 |) r# P2 ~
  152. }
    * c8 e& V( v$ N8 Y# \/ e  c
  153. + c% m  Q/ F) J/ I! [) W  p3 a- @' E
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' A' X0 n. r4 l' U' |
  155. {$ \2 P6 ]: B. P; F6 ~* v9 @
  156.   DWORD attrib=GetFileAttributes(Target);
    * v! D. `5 O5 R
  157.   if(attrib!=-1)! Q3 @8 `) u1 j& `- L! ^3 S
  158.   {
    7 [( {" k2 \( |8 m, V
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ' j/ {( p( M" G1 o8 c
  160.     {$ Q/ o5 W- Z# N5 K! }; c. h
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);' A$ F% a( }$ \1 C: y
  162.       SetFileAttributes(Target,attrib);
    : G) l5 B- J4 u; S) F8 F9 p2 N) \9 K# P
  163.     }
    + h: p5 m: |& Q+ ~( G' U
  164.   }
    ' _$ ^0 P( [5 q  H
  165.   CopyFile(Source,Target,Erase);
    % r' `5 z5 \) y7 T, H( A7 U
  166. }
    . n( P5 F% n9 a$ M9 f
  167. ) ?. f* z2 k/ z% V
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    5 \# A' X% X2 d# H: l
  169. {
    5 ?( r. H4 |: `/ l" B
  170.      FILE *fp;, l& o% |  b6 Y; }
  171.      char  szBuffer[8192];
    ( N% d  A8 r' K/ |- W$ G/ w
  172.   va_list  argptr;7 r* ?  U: \4 k7 Y8 c; s
  173. ! x! X6 J5 l" s8 d
  174.         va_start(argptr,message);
    $ v6 B, w2 z- C9 P, y$ C" k! P% r
  175.         vsprintf(szBuffer,message,argptr);
    , i3 |/ J- D" I' c
  176.         va_end(argptr);
    , k$ I. P5 `3 J" J) j9 M
  177.   fp=fopen(FileName,"a");, |0 [" y: a0 S  Q/ J  c' R3 ?
  178.   if(fp): M7 m% u& J- h* j
  179.   {% ^. o7 u3 L2 @
  180.     fprintf(fp,szBuffer);! \+ [# Q- q/ s5 H3 }
  181.     fclose(fp);
    / j5 A( m5 Z( y: Y3 q
  182.           _flushall();6 V& t& Z6 ]9 ~4 b, e
  183.   }
    ; }; b0 ]1 x; I8 N# A1 Y
  184. }
    6 u2 X( \$ a1 `  D: J) J0 n

  185. * L5 {; ~4 G9 C
  186. BOOL CRevAppApp::Fclearf(char *FileName)' m$ n5 i& `) n
  187. {+ x0 C5 k' U/ \* P/ W
  188.      FILE *fp;
    2 q5 S9 R2 ]1 o4 s  p/ c4 }4 W# j1 N+ R
  189.     DWORD  attrib;
    9 F  [, ~7 h8 L3 R! u, ^
  190.   attrib=GetFileAttributes(FileName);
    / \) m- N* C3 j+ L, I
  191.   if(attrib!=-1)- ^+ \/ ?/ F4 E2 R( n8 N1 e5 K5 I
  192.   {
    # ]9 _9 P$ x# _0 m3 H" V2 H
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);; a) Z  [- h( F, r1 r( k3 |
  194.     if(!SetFileAttributes(FileName,attrib))3 B+ G1 x# \# r
  195.     {6 R- U, N  P6 D$ {) R1 Q/ Q; p1 k& P
  196.       return FALSE;
    3 N* R( p: a$ X+ t
  197.     }% U0 r6 ^! N/ R$ a# V) I
  198.   }
      T1 I! y. M1 S% P+ ^( m7 V% {
  199.   fp=fopen(FileName,"wb");
    ; J. r* v2 ?$ a  N0 x- z- _9 \' [" e
  200.   if(fp)" e, G) ^7 b1 q1 |
  201.   {
    4 ^. N/ Q1 |+ [9 z" u
  202.     fclose(fp);; U: M6 H* V$ ^; A9 t+ A* ~
  203.   }
    6 [: F- y8 e5 g/ `6 N
  204.   return TRUE;: q2 e/ b2 v9 H$ e# e& l4 O
  205. }6 U; g# e% y0 u9 z0 w: L

  206. , U- Z/ ~. _' G3 _
  207. BOOL CRevAppApp::UpdateLocalVersion(void)5 U+ _+ E. l4 l# v
  208. {
    & l" k) X- t6 ~' G9 P0 S2 m
  209.   char filename[MAX_PATH];
    $ B, ^; x- J  n7 X8 K" d
  210.   LPUPDATEFILE file,olds;
    3 P6 U7 f0 i$ z) n
  211.   std::map<int,CString>::iterator i;6 z8 w% c: n2 n$ o% m& e
  212.   std::map<CString,LPUPDATEFILE>::iterator p;& k! N6 Z0 ]3 j% ~" M+ E1 d
  213.   std::list<CString>::iterator l;* A9 o4 j4 m) U0 U
  214. ! y9 }" F8 w8 @' h, W: }
  215.   if(bFirstUpdate): o% p9 [6 B, u% Z( M. P; t  a
  216.   {0 h6 h7 l8 N% h; y5 t0 N
  217.     dwCurrFile=0;: s+ i4 q: ]% z! q
  218.     bFirstUpdate=FALSE;
    & B; N7 Q5 I2 K9 O
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ V2 P+ P8 [9 Y* ~5 \4 R
  220.     {( k  e2 ^' ?& @
  221.       dwTotalFiles=UpdateLocal.size();( q% C: A$ e5 h. y8 [
  222.       dwDownLoaded=0;: j0 k' Y/ m6 x4 \. v6 |! z
  223.       bSilentStep=FALSE;
    / i2 J, \2 {. u
  224.       bCompressed=TRUE;
    : M4 e% e) N! S
  225.       strExtLocal.Empty();
    ; ^/ Z' r3 p3 R  X. W5 T5 `
  226.       strFullName=(*i).second;
    $ s: N! g7 H9 s: C: m7 N
  227.       dwProgramState=AP_CONNECT;. Y* u6 s% F! r
  228.       return TRUE;$ e5 i6 @! H8 I0 Q
  229.     }% k0 r# O- S) N" p
  230.   }
    / P; \, V( c! @
  231.   else if(bRestartUpdater==FALSE)0 e) H3 _& w2 a8 j& e2 p" u, C
  232.   {
      `* X# f( ~8 k
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())5 h  c& ~( d9 k9 z* B
  234.     {0 p" w2 K1 o9 _+ V3 H0 c
  235.       file=(*p).second;- n- r% _3 U% s
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' o: l. B2 |4 l0 E
  237.       {
    0 V* B% W7 m! ^9 k& r/ M% G. Z7 @
  238.         olds=(*p).second;# [2 `* n& Q# M% C" F
  239.         olds->vers=file->vers;
    ' c! G9 m" f0 H4 l* R
  240.       }
    ! w$ a/ @) I( c6 P  A0 _3 i
  241.       else
    ) e; ]8 i" h# X6 L4 L# L$ T
  242.       {
    0 g1 P  V3 |3 u! Y8 I
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% K! F2 h- M4 z' {) C% R
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    6 S+ T% d% I$ W6 f/ F* I! @0 Y! X
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));, y4 |$ F; v8 x+ @) |0 n% J; D
  246.       }1 G3 l) ?! A  g4 p/ w, m* }
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");' ]. J/ Z; n" F0 x2 N; \
  248.       sprintf(filename,"(%s)",file->file);
    ; ?  r  M8 g. m
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. |' P+ F4 ?! ?  F
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    3 L+ c: z1 R" C; J/ ~& t
  251.     }
    0 M% [* a- F$ P' \  g1 P% ]+ z
  252.     dwCurrFile++;9 M/ ?+ H2 n& |$ y1 ?" S. i
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- [0 R! u# r9 o' J" q- n
  254.     {' p: P, Z0 x/ i9 e  M
  255.       bSilentStep=FALSE;# r0 }1 R& _% a! Z& W* i: k
  256.       bCompressed=TRUE;2 X- A8 A4 K. s# _: k
  257.       strExtLocal.Empty();! m/ O# t9 B: C" M+ F
  258.       strFullName=(*i).second;
    8 z( i' q4 L, J! y% u5 l6 d
  259.       dwProgramState=AP_CONNECT;
    # K$ o; w  b! u7 O& p' O* G; [6 m7 y8 U
  260.       return TRUE;* i2 g8 V6 b4 _  x9 A" w3 e
  261.     }0 B  W4 J1 h; E5 p$ Z* ^* M
  262.     if(!bRestartUpdater)
    / [9 p3 T2 @3 o2 @# L2 v
  263.     {; V4 }* p. w2 y, p6 D$ f3 r1 Q  g
  264.       int iCurrSize,iFileSize;% k6 X. ]0 d2 L0 l: Y
  265.       iCurrSize=0;' R2 n$ g. B0 }' \5 x  `" E4 o
  266.       iFileSize=UpdateList2.size();  |# n( U& O, s. o( e7 W) |! y
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");6 ]& C% x; [: X$ b, x
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    " W$ E: i+ c# g
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    $ X% Z4 k: @- h$ m: I
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 e! O( S8 `8 w% S! ~  A. N: Q
  271.       Fclearf(".\\update.dat");+ a: j0 q. H5 y) g, N
  272.       Fprintf(".\\update.dat","Bloodyf\n");4 I6 h: l- j  h
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 u: z1 I4 r, g1 E* T9 D9 q: `* g
  274.       {
    . `" W4 m6 H1 b' G: l
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    : t' X$ K; D: R8 d$ {# a3 ?5 Y4 h" @
  276.         {8 A% x% k( W( Q
  277.           file=(*p).second;
    3 [$ ~7 o5 o2 C. T+ \1 X
  278.           sprintf(filename,"(%s)",file->file);
    6 j4 S; {' m3 E& m) ?" k" l0 |0 q
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , {7 d4 W. K: m
  280.           iCurrSize++;
    $ b! T9 X4 W  _% B" X( t
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));* O3 S9 j  _- ^
  282.         }! U' d6 v" D  J( J: d
  283.       }
    ( u# A: o" i, `$ N
  284.       unlink(".\\update.txt");
    1 _- G4 o' E, P
  285.       unlink(".\\update.tmp");
    / C- i( J, E" X9 l; q/ R
  286.       Fclearf(".\\checkversion.dat");
    2 w6 c/ }- \* z% V2 |
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' l( S6 ~9 I/ _
  288.       if(UpdateLocal.size())
    - U8 O+ G  I- Q) t, P: ~; f
  289.       {
    7 E' v/ v+ l$ c6 A1 p
  290.         UpdateLocal.clear();. v/ d* u" Y3 b
  291.       }
    3 m0 C2 f. l& b$ \- ?" @, [
  292.       if(UpdateFile3.size())
    6 w# y" L' p/ k3 x
  293.       {- V' D' D0 v8 k6 f
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 @! b# [" ^5 p/ N0 x+ ~
  295.         {* P) _) a- @$ a' V% F
  296.           file=(*p).second;6 c/ |1 \, S7 `
  297.           free(file);
    8 I/ s6 T' l* ?, [' I  @
  298.         }! P( H$ \, v) O9 x& a# u# C
  299.         UpdateFile3.clear();
    * }- w* z4 J* M  G3 E$ S
  300.         UpdateList3.clear();" Z) ?3 H. J9 W" Y, b/ X& k8 O5 H
  301.       }
    9 Z# z5 |( c6 a- G% w$ {1 C
  302.       if(UpdateFile2.size())8 Z$ C1 F8 V; |0 _! r# c
  303.       {
    3 v, L5 e! g/ h# e; L8 ^
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # @/ {5 D& p) k0 l0 P& M' q; s
  305.         {
    0 x" w. v/ a# ?. S- E/ w  V
  306.           file=(*p).second;
    1 f1 O6 C/ H! T4 M: v
  307.           free(file);0 ~: p5 P$ @  f: U2 C/ o+ A/ z# ?
  308.         }& `: T0 C6 L. d6 g
  309.         UpdateFile2.clear();( N( \. j4 i1 O+ d* C
  310.         UpdateList2.clear();) V/ u% y* V7 d; [
  311.       }
    . |8 o" @5 I- H- `
  312.       if(UpdateFile1.size())" p! u' o/ y& l/ V2 r
  313.       {' ^3 `& {  V. z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 g' }" u' h- `2 w+ i; l9 s9 z
  315.         {
    ; C4 f! [2 S) p: \: T9 m
  316.           file=(*p).second;
    # s/ d0 X, {# r7 l9 f
  317.           free(file);
    * {' g2 p0 q7 T: V0 B2 @
  318.         }
    0 |& Z/ O9 E& ^& a& D- W/ y; @
  319.         UpdateFile1.clear();
    6 |- P) s" ^0 }' U8 U! N
  320.         UpdateList1.clear();
    1 ^, t& P- b9 [
  321.       }" F. O- q$ f! T# q# y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    4 J' w5 E# x- E! U1 h3 A; R" Y3 N
  323.     }. m- N7 w) T/ e
  324.   }
    $ G) B2 K) E  H, t, g
  325.   return FALSE;
    0 o3 o1 a& I' U& m6 V6 V
  326. }( N4 N: S$ K; ^( v
  327. ! z. P* x4 ?$ P+ c
  328. void CRevAppApp::ClearAll(void). F( I' O* v* `) ?& O6 F% [$ z
  329. {2 `% R3 P( x: V9 ?( b
  330.   LPUPDATEFILE file;
    # c  b  L; L5 x' x2 z5 D
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) Z4 b" P6 z$ Y' }: C, A
  332. . I8 T+ v( C  J) t- m8 X) R
  333.   if(UpdateLocal.size())
    0 Z8 h6 |1 J- n  B
  334.   {
    / N! ^$ A: ?" L0 ~% C( _  j% b
  335.     UpdateLocal.clear();
    # L8 C; m6 x& u4 u7 Z, k) V
  336.   }
    3 @1 f6 x9 v% h
  337.   if(UpdateFile3.size())
    9 o8 ]3 h* I! ]$ m, P% n1 z& r' \+ p
  338.   {/ e% z$ q$ T" \; s' g
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' ]4 I7 t, S( H
  340.     {
    - C% X# @: i4 g5 l4 J
  341.       file=(*p).second;
    6 A. o9 j- h2 F$ D' ~- l
  342.       free(file);7 [* y' h/ \" p) K& ]
  343.     }( r$ U8 \& d6 C. E$ n3 H) y
  344.     UpdateFile3.clear();
    , U1 X' w0 r7 T- J  Q$ B
  345.     UpdateList3.clear();4 S* _, N. V- ]( o- P* Q
  346.   }( R4 e) B' u; D  z
  347.   if(UpdateFile2.size())% R. h) ?5 E2 l  f! D' B
  348.   {
    / u  e% U) b/ l3 m3 E$ \
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - ~. F8 c6 L. j& P7 N
  350.     {. p) }4 d( `! G
  351.       file=(*p).second;# y+ u: D5 U" K9 R4 B
  352.       free(file);
    & b  c9 B6 s6 K" S7 ~& v- }' f
  353.     }
    $ n$ k+ c' N; ?: C9 G# V" }
  354.     UpdateFile2.clear();4 c3 D9 n; [# j% T
  355.     UpdateList2.clear();
    6 _2 b8 A6 N! R. s: c% w
  356.   }
    / p: c, T, I5 u0 O" l: V" M- \
  357.   if(UpdateFile1.size())
    ! d8 `& x" o6 o; U
  358.   {- t& T) p! e. D! _/ c) W
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& P) J7 D  n6 D* ^0 X
  360.     {
    ; }2 O- b8 [* Y/ H
  361.       file=(*p).second;
    6 T0 l0 m/ t" O. t! x! y
  362.       free(file);2 W/ j' V/ Q/ |  N
  363.     }
    , |6 ^9 B: j- y8 C
  364.     UpdateFile1.clear();
    ! N/ N) @1 P' L$ R
  365.     UpdateList1.clear();1 s: p: u) A; F
  366.   }
    # e4 N2 s: _2 s8 c. O, t% g* l
  367. }  8 ?0 _$ e& R& j, ?
  368.   
    5 }6 R4 \  I; A) Q
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    & H2 s1 v  d* |
  370. {
    . ?9 {9 y3 H) Z# b) |+ t4 y! S
  371.   int c;
    4 E' T: L3 c7 l5 k
  372.   LPUPDATEFILE file1,file2;; B( Q$ ~* \, V# t
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;( l' r. T0 h9 X# A- a4 j) i9 v0 F- x
  374.   std::list<CString>::iterator l;, M) b1 M: W0 b( v
  375. * E0 k4 z- M$ i* d1 [) ^. v
  376.   UpdateLocal.clear();
    ' N/ n. b/ O& W% Z/ r  K- \+ l, g' f
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);; g8 w. I3 Y- A3 |4 x
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ; H) j+ K6 U; s- ^/ w
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    1 @+ M& K+ h& _* |' i7 M7 e
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    8 H( t8 R$ T3 l# ^. E6 P) t
  381.   if(UpdateFile3.size()): l; t$ j/ O% V8 ?
  382.   {0 a& I% q( F1 _+ t- G/ E' m6 l
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ' I3 B. |/ D# f/ w3 j5 v
  384.     {% e) u& `8 ~# A. @8 o
  385.       file2=(LPUPDATEFILE)(*i).second;
    5 t/ L; @' Y/ J
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( y. [" x$ Z! L- ~7 [
  387.       {
    % E# k' o( @' T9 X
  388.         file1=(LPUPDATEFILE)(*p).second;* Y! V8 w) g6 x, B0 s
  389.         file1->vers=file2->vers;
    ( p5 R' Z5 J! q) x% a$ F3 V
  390.       }  t8 H7 K" \4 }3 x
  391.       else
    ' _  n4 c$ ~3 w6 E2 s5 r& N
  392.       {
    ! I; V$ g* o5 V* u4 R7 [
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ R9 y+ h, k( L% m! {3 D
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    2 n* X. R$ X% K+ X7 Y
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));; ~5 Z0 V8 P$ G7 P9 m% K
  396.       }
    # f1 R6 r" k# U" v
  397.     }% V" ~6 H* r$ g
  398.   }
    ; K7 `6 X- o; n/ d
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " P) T! o2 Y+ K! ]1 T" t. z
  400.   {; p& z( r# {1 N+ f- w. F: c
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- Y  @" k' J6 n! _% ~5 }8 q; R
  402.     {* S. k9 |' i8 k" I6 F8 z- x
  403.       file2=(LPUPDATEFILE)(*i).second;
    2 Y6 f" ^; s* o& {
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  c6 [9 I  U; `$ O( {' Y+ r' c
  405.       {/ _. E' h& b; p- U
  406.         file1=(LPUPDATEFILE)(*p).second;- [1 a. M( {: k  N# n
  407.         if(file1->vers!=file2->vers)1 I! E6 M9 g& |" U3 t
  408.         {* i& B" E# G& }$ p* k
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 J3 C7 y% k; w8 A0 N
  410.           c++;
    # v  Y$ ]+ p6 w% L7 E; C
  411.         }
    & {/ `4 _1 W0 ]  W/ ]* k
  412.       }. L# U! Z, @; i1 A% U7 a6 s
  413.       else7 ?4 h4 s( N; V* }
  414.       {
    3 Q# z% I2 H2 |/ [
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ d5 m8 s1 r+ ^
  416.         c++;
    4 }/ _: ]: H" ?8 R0 g6 a
  417.       }
    9 n" J2 O# C( A7 U- u" l
  418.     }  p  Y- I+ K) Q
  419.   }
    $ U1 B3 w0 U. Q$ Y4 F; k
  420.   unlink(".\\DownLoad\\update.txt");
    4 @( w' I0 H, s- G# \8 v5 Z
  421.   if(UpdateLocal.size()) return TRUE;
    ) q! L" Y8 v) D+ }/ E
  422.   else                   return FALSE;
    , U: E" ~6 Z% ~# ~% G
  423. }
    " v) o, j7 _0 x0 X  p& F* n/ \
  424. 2 W- p- {6 r3 k! ~- a6 |7 q+ ?
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"$ g! Z& ?3 v! U5 X
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ! w& x. Y: {' B# ~
  427. + k; Y+ H. ~" N: X
  428. 8 r% O4 o3 m# _& S$ n: w! W

  429. 9 [6 F0 E! u" S) A" |8 B$ c
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    + Q# K/ e- K0 ?4 e1 T( M/ v: l
  431. {( h! p/ k4 K$ B+ ^- z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ! u, J) G* X! m) V, f
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 T, |2 s; L7 c$ Y
  434.   {
    0 n, D0 I8 H) _/ a8 }* G4 `* O
  435.     char szLanguage[50];. i, l5 Z2 P# i& ~% ~5 ^
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" p- U$ z  Y2 o3 m
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 h+ G) p# y- [
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ s2 w$ ]  _9 O# C
  439.     else                                   m_iLanguage=ENGLISH;3 L- z% K5 h* c% D/ ^# c6 c
  440.     char szRegister[100];1 D" Y1 r. ]) n  x
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- I# h3 h, o2 s( @, _
  442.     strRegsName=szRegister;
    ! V; F$ H$ h0 p
  443.     char szPatchURL[100];
    , U8 H* R3 P5 k# h" g! ~
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% M  `( m: u4 k" U
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 Y9 i; P# y0 G# R
  446.   }; G# U$ |8 G- h" {
  447.   else
    / _$ p6 ?8 t0 _$ b: `
  448.   {3 O; N9 X1 r) y! n, `# G# q0 A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% A; `+ U5 @1 g6 F
  450.     strRegsName=DEFAULT_REG_URL;
    ( ]2 c. l6 x/ p
  451.   }
    8 Y6 }4 P% N8 v# T" ?  x
  452.   if(GetFileAttributes("hosts.ini")!=-1); K% h" e' X1 ~4 l
  453.   {
    - e) O( D8 B6 {( \- c2 B9 c8 q
  454.     char szIP[50];$ }' k  {9 ?8 w+ U7 t
  455.     char szDIR[300];
    + u; z; S' S0 H# q' r' N3 `
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    3 p) ]4 L" @; w6 o! S# ]
  457.     {! W' a/ h* x9 J* D+ x0 H) x0 i5 p  I
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    # ^+ Y( N! ?. g" J+ H) d
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    9 b* \- c& T' w4 m: C
  460.       strHostName=szIP;  B- e5 @. _/ g4 S! X
  461.       strHostPath.Format("/%s",szDIR);
    - Q' Y5 E$ V& O4 ^! n1 ]. g
  462.     }
    2 x9 o* _( E% W" [1 f5 c- O' d
  463.     else1 w; K' \- c% f' c9 ~$ c6 `
  464.     {# M9 B; q1 V6 S- }& I( Z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)6 Z0 s, X& w: A! L
  466.       {
    9 r& E  d( F- C! o' v+ @4 ^
  467.         char szLanguage[50];3 S$ d& c- t9 e7 `; u2 l
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 l3 w! G9 e1 l; _
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , @" T0 N. n! W9 b
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 X( ~5 Z/ H4 j
  471.         else                                   m_iLanguage=ENGLISH;" X8 e. n: i" `, P& ^! z6 m
  472.         char szRegister[100];
    7 I8 D4 A0 k1 l, i2 _- Q# s6 @
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");3 g/ d4 A! a/ C2 x# h' _& P
  474.         strRegsName=szRegister;
    . Z' Q/ `) E* p# B/ m
  475.         char szPatchURL[100];
    + w4 l- F* S" u6 Y1 H
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 E' i8 ^* Y& R. K8 {
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - c0 Q, x& T3 s. {
  478.       }8 `/ c: I! @# g* }* i8 c4 s
  479.       else
    " a2 h$ r2 N% V- I' g0 d# f( l5 w( U( r
  480.       {
    + j1 R) l" M: @9 w8 N) s: P* ~* }
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % o4 j6 @* s$ |) ^7 o. Y
  482.         strRegsName=DEFAULT_REG_URL;
    3 V( B8 T6 N9 a
  483.       }
    - i; w* E; L: d4 k. M2 Y& f2 z5 `
  484.     }
    : c3 ]; c. B2 m  Z& A: d* f
  485.   }
    9 r6 ?% C. c, Z' m1 B  |; g
  486.   return true;
      Y! r% N; z2 S3 A
  487. }6 M/ z/ {5 ]$ j
  488. + t; t4 G  O7 ~1 ^2 }8 |' A
  489. #include ".\ZLib\unzip.h"8 g" V# {, `. |$ |
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    4 G* y* X; a! E0 O! v7 |$ a8 K- o
  491. /////////////////////////////////////////////////////////////////////////////  ^/ b& K3 z9 ^) @+ ^9 o
  492. // CRevAppApp initialization
    + T! h( R! C) F. c4 R6 J2 a
  493. 3 S, l. H5 z5 q
  494. BOOL CRevAppApp::InitInstance()0 c8 i! G/ h1 Q6 ~' `. l. b9 f" ~
  495. {% G' x( {! q: j
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];+ \9 n/ R4 ]5 s1 p5 S7 K( u. z

  497. * [% m' I6 c5 H4 N
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);& ~- P! P" v0 w- n! H* j
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    4 ]9 Y! ]' f/ m2 @. \. i
  500.   {
    ) |; q. _+ J5 }
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");" q+ U! E1 N$ e! |
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    & o# {! v! o; U
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))7 C3 a8 n) m0 \& r, T
  504.     {
    8 H: b1 T& q% H! N
  505.       strcpy(szPath,szPathTarget);4 q" u; t! r% v$ g+ I# p
  506.       SetCurrentDirectory(szPath);
    6 p  m2 D4 L/ g
  507.     }8 R# z% C1 E4 w! k9 L5 J/ R
  508.   }+ G: ?2 H. p3 z5 x# ~
  509. #ifdef _DEBUG0 }! H+ j" [& `$ ]& k8 `
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ Y, b" j1 |; U4 N
  511. #else
    5 I& f/ [' S7 A8 ?% h: o+ }
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 m/ G) ?/ F1 {
  513. #endif
    8 ^* F. o/ Q6 W, y0 M+ t
  514.   {
    ! j. |+ h5 r! Z$ ]
  515.     char tempFileName[MAX_PATH];) {# x, z/ b, W* I4 z% t
  516.     strcpy(tempFileName,szPathSource);
    6 E3 z8 B+ V% V" E- D
  517.     tempFileName[strlen(szPathSource)-12]=0;
    % C4 K1 J8 V7 D: v, C8 k& y! A
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ! W3 Z" s/ Z" ~- O3 U
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);2 R' j6 Q+ E5 b3 Z7 ~+ e
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);9 r- X4 t) @3 l) r+ c! T7 f' Z" K) T5 m
  521.     return TRUE;
    & F$ k3 h6 }6 O% j5 v: c6 o
  522.   }
    5 q: z) W7 a+ X& I8 G
  523.   // Nuke 0118: Delete run.exe, p! u/ k7 d0 L5 D
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );! E: j( `) Y& x9 u, L% Z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");4 s2 b3 a2 y! C/ x! \/ L, _
  526.   if(!ReadCfgFile("Config.ini"))6 j; X7 o$ q- k" C6 P
  527.   {
    % b  L; j+ i4 r  v
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    0 t% `1 {+ V: A1 w" d* ^! B1 g
  529.     return TRUE;
    9 n7 `8 ^* |( G+ X( ]* [0 `) K
  530.   }
    # |* J% H# d. g2 I; A! i& N
  531.   HANDLE mutex;
    : M6 v: }5 |2 A- ^' ?
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    % i4 {! E9 G+ H9 f
  533.   {) ?. A" F" S" r3 v( k/ N
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    : B/ E. R* Y- Z- |  y5 h1 _2 M! C
  535.     {+ C$ S& Z$ @- b9 v; h4 Q" s
  536.       CloseHandle(mutex);" H! _7 }/ P$ o; H( C. M5 y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    8 Z2 w' x! E. @3 n; `
  538.       return TRUE;8 k; t. l; c$ x9 {7 `
  539.     }
    : m, A3 s/ ?5 o/ i3 J8 Y' ~) p
  540.   }  3 o' l$ d0 p5 d! [# ?# T
  541.   CloseHandle(mutex);0 X+ s  a, r6 T& h. T9 G; f
  542. ) q  c  M; o" T5 O
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);2 u" [7 d. D( }4 l, o  n3 r( z2 _
  544. . ?, q7 ?2 i5 [* q3 Y' }
  545.         AfxEnableControlContainer();
      T+ c# K1 v8 [5 z

  546. ) P' W2 [& K* D
  547.   bCanUpdate=FALSE;  J2 |" r7 f: M) c  G
  548.   dwStartUpSteps=1;
    3 g! |0 b& [4 O8 I
  549.   dwProgramState=AP_NOTHING;/ W- Y: I3 {* N# p6 n; a

  550. 9 z# L$ p7 o# r0 N
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);( U% O7 F' q; K6 m9 r. X& G* k

  552. 9 E$ H7 Z* `( U3 o
  553.         // Standard initialization5 ~0 m- H8 s( [- O( O8 F6 ?
  554.         // If you are not using these features and wish to reduce the size
    ) t/ V- A( g2 a2 |
  555.         //  of your final executable, you should remove from the following
      d3 W1 i; o$ d- w# W7 I, x  _
  556.         //  the specific initialization routines you do not need.3 w2 e) O: \" Y- _3 j& G0 P5 H
  557. 0 \2 ~" c6 [+ `- h% n4 i5 E9 i
  558. #ifdef _AFXDLL
    " O5 n/ h4 p! u
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    . t# G" _# I( j8 N# B& e
  560. #else3 E) }. W* }4 `
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    7 z( g0 F) H1 O* Q, s8 `/ x
  562. #endif
    - m: A* j: ]/ I$ {

  563. 5 G% Z: L+ k# C
  564.   dlg=new CRevAppDlg;
    0 O. @$ P3 C/ f6 n* ?9 F
  565.   dlg->Create(IDD_REVAPP_DIALOG);7 p" q7 t1 m+ N7 u. P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ) g  W" C! _+ s- J
  567.   m_pMainWnd=dlg;
    3 T# t/ U8 _) V. N  Q
  568. 3 x( m0 H& j, x1 B6 B' U' y. J
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    2 Q: G* b0 n) ?0 t) m
  570. 0 V$ L* U4 q1 B' u) q  G- P  n
  571. //  GdiplusStartupInput gdiplusStartupInput;. E# o+ _& f4 V" S6 n7 [% y" r; D5 Q/ c
  572. //  ULONG_PTR gdiplusToken;+ O" n! }- h, [# E2 F
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);. P# k% i9 F9 n( S- I7 k: L
  574. * I( d+ N; ?. S
  575. //        CRevAppDlg dlg;" k* }# A! ~; L- `/ y7 a+ ]
  576. //        int nResponse = dlg.DoModal();3 o0 @* x" v6 q( y7 K* k6 Q- s
  577. //        if (nResponse == IDOK)
    / @, U5 r1 ]& F2 h
  578. //        {: [8 r  g" _! u' s+ v/ Z0 Z
  579. //                // TODO: Place code here to handle when the dialog is
    " p  S7 m% V, W
  580. //                //  dismissed with OK
    # T# P- N- Y% N
  581. //        }
    $ y* r4 B1 w+ z9 B: o+ r  v# C2 {2 S
  582. //        else if (nResponse == IDCANCEL)( j  w0 E* o& H- O
  583. //        {
    * h7 T  S0 T: d  y: C8 i
  584. //                // TODO: Place code here to handle when the dialog is8 h, v4 `. ~, [& A2 j
  585. //                //  dismissed with Cancel3 m  ]5 t$ X! F: G5 Z9 E
  586. //        }
    ( j7 t1 L$ c' i5 Z% F$ l
  587. + H. C* S# k+ b& @0 J
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ' B9 @* l- o1 T$ z' y
  589.         //  application, rather than start the application's message pump.
    2 j  n+ w: [# w# X
  590.         return TRUE;
    " B7 O1 e) `1 ^- ]
  591. }; _) }& D4 J& r' \' B! z% X
  592. ( M+ F" v- b9 A: E. n
  593. char *CRevAppApp::strtok3(char *pSource,char *token)0 u* u$ p4 D) S2 L
  594. {! ]3 j& _8 ^; g! e3 H
  595.   int i;
    2 O$ k: \: n7 b  z$ P
  596.   char *szRet;
      Q& h/ Y  k6 J, @: w
  597. 7 @, {6 z& ]8 I* u- D8 H
  598.   if(pSource) { itoken=0; sztoken=pSource; }; h. Z9 M- K% w" n+ A2 Z% w
  599.   if(sztoken)# V7 d% U# b$ }
  600.   {8 A+ i! z3 n: z% A
  601.     szRet=&sztoken[itoken];
    9 E: J; Z3 u& R# Q9 W8 M
  602.     while(sztoken[itoken])' J& u; o+ H  b+ P$ U( b' P2 ]+ ~6 L
  603.     {+ R- \+ l/ K* i; o$ N
  604.       for(i=0;i<(int)strlen(token);i++)
    3 o1 l; x6 }8 h% }
  605.       {
      y9 I' W9 [% n( T2 o: k" D$ V$ i
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 \0 Y* L# h6 F& r
  607.         {/ F+ S" X* `' r$ b
  608.           sztoken[itoken++]=0;
    ( d. @( c$ Y; i! E5 x1 O  ?
  609.           sztoken[itoken++]=0;. u1 M* q" a1 D- e
  610.           return szRet;4 y+ W8 l! D7 c5 R
  611.         }
    8 X5 x7 W3 n  H4 R3 H6 a. a4 E0 ?
  612.       }
    . D" E7 s; H7 ~
  613.       itoken++;; t) l3 F( W  _2 ~! z1 Z2 Z
  614.     }
    # f& r% B' x) l2 O
  615.   }
    " c4 T1 X- o( H/ M) q% X4 R3 Z
  616.   return NULL;3 \, ]5 L8 f0 j1 H7 c* X% C& X
  617. }) c6 e/ f& s) ~# F
  618. * Y" N" h3 Z& Y
  619. void ProcessProc(long Total,long Current)$ I' t7 y( Y! [
  620. {
    $ Q5 u7 g# Y1 r
  621.         MSG msg;' O0 a+ D5 r. {" J- _- r! S
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);" s( y4 l. q1 h7 Q$ \" F
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    2 D. L, `/ d0 B  \% @( C: G
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))4 p& F1 [" [( \
  625.         {
    9 v, K) e0 z# o
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - c1 s0 ?* c3 X' M- N+ s; t
  627.                 {3 G2 R* V3 f4 D5 g2 N5 H0 x7 _% W
  628.                         return;1 W  F6 k1 F. U  _# R
  629.                 }# z8 q3 l: O9 w5 g+ D
  630.                 TranslateMessage(&msg);. x" |4 ]- M5 n
  631.                 DispatchMessage(&msg);2 V( n) z  t! x. t; b: v5 {
  632.         }       
    8 j/ p% ]5 r# g4 a  ?
  633. }8 _! Z0 b$ |! B9 a0 {' `0 s! d2 ^

  634. : F2 E9 w9 z9 D( ], U% F
  635. BOOL bFirstChar=TRUE;
    % z) P- N9 c7 N% e7 l$ d2 }

  636. : S1 c, B1 r) O" J% J+ s( b
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ' P) F1 ~$ k2 J" M" e! v# K! F
  638. {
    , U5 Q% e8 |% }! m# L8 s5 S; y" u
  639.         // TODO: Add your specialized code here and/or call the base class$ o* Z! D; b* w* l; J
  640.   switch(dwProgramState), ~) T5 C" f1 c" X+ g
  641.   {
    1 t3 m. V4 y$ S8 X) a# L; G* Y
  642.   case AP_NOTHING:
    5 V: f2 N; z- @9 x$ D. o& E6 A: }
  643.     switch(dwStartUpSteps). b7 ^- s, l$ E' A
  644.     {
    & Q9 H. ?4 K, _: X+ j
  645.     case 1:. Z' h- @  h' e4 k
  646.       {9 _; D. v. V" i: r
  647.         int i;- ~* [# X; r8 m# n
  648.         CDC *pCDC=dlg->GetDC();
    5 L. }" w8 o" N" F6 v) x6 u* {
  649.         HDC hdcwnd=pCDC->m_hDC;7 @& D$ }3 G/ ~# k0 W+ G" d
  650. //        Graphics graphics(hdcwnd);
    1 i, L; u7 E9 x' b. C+ `/ ]
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ( }$ W* m% `" Z
  652. //        INT iWidth=bitmap.GetWidth();
    ! f2 ?; h! c$ W" _9 _* K
  653. //        INT iHeight=bitmap.GetHeight();
    1 x  W6 B7 _( K& b' ]7 F: S3 v
  654. //        Color color,colorTemp;
    / v: H; T5 i9 o) U: c6 v7 C" i
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    3 ~* c! C1 D7 J! f
  656. //        {
    ! v. J( ]7 ?4 M/ W3 a- O5 k
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)- z. o2 I2 Q$ x  C8 A, C
  658. //          {# I! x' C( R3 t# G7 a# h
  659. //            bitmap.GetPixel(iColumn,iRow,&color);1 j" I0 L, _* ^# x, w  j8 A7 w
  660. //            colorTemp.SetValue(color.MakeARGB(0 z; ~3 P# j4 U
  661. //              (BYTE)(255*iColumn/iWidth),
    # l/ H* e# y+ N& ?7 v
  662. //              color.GetRed(),
    ' S2 Z+ c9 W* z2 h2 q/ A
  663. //              color.GetGreen(),
    1 f; H" g$ H+ \# H1 w4 ?8 J
  664. //              color.GetBlue()));& i7 E6 S8 J) L+ {6 [+ Z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    7 J! |* Q  P1 l! |" P# ?! Z& A; X6 `6 l
  666. //          }( y# q4 y" q! f) i: O8 x) R( ?
  667. //        }
    2 v" p3 I4 y& i2 ]) w5 d6 \
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    & d# u: ~$ e0 X; L2 {+ a
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 D6 n. N  k( W4 {! H- h
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");7 ~; g, ]/ c( X
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");! T" v. e. O0 \9 }& @
  672.         for(i=0;i<240;i+=8)1 B1 ]" x, \( e; b) x; D" L2 U
  673.         {( n9 O7 b( c" ~. \& d
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ x) F1 T" |# W! n# Q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 z- Q0 G1 |, S0 C% c
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( j- ^3 K) ]3 P
  677.           Sleep(33);) S+ o. g2 f3 Z. \
  678.         }0 t- e3 B  x* b/ Q, {* x% M% B
  679.         Sleep(1000);
    . z8 P( P4 s5 j+ p8 Q
  680.         for(i=240;i>0;i-=8)
    & |" E% H0 J5 y' W* p
  681.         {
    ; i' t$ x3 A0 h' ~, E" i
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % R+ _: ^2 `$ c
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + r" p. c% K' {$ k# ~( A  n
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 H3 G# I. H: R4 |  u) }
  685.           Sleep(33);
    2 H9 h0 l2 I' u7 u
  686.         }
    ) v" I, L. O" P2 ]
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    0 H/ q9 Q1 F7 E' z
  688.         dlg->ReleaseDC(pCDC);% z+ Y; g! s$ w2 I# v5 f4 j* x
  689.         DeleteDC(hdctar);
    3 x/ `, ~+ J- s8 p$ \5 ?
  690.         DeleteDC(hdcsrc);: @. n8 G& L) c. q/ H* {0 n
  691.         DeleteDC(hdcorg);
    - x0 z/ \: m/ ?. F/ A4 O+ |' r
  692.       }
    % E& R. b2 S7 v; a
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    9 F+ h2 F; t: M, P+ X( L
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");* b7 w# e9 E: J, v
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");6 J' b. b% B7 j: \
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    , x' r* Y; a7 g. `# K, l/ d6 Y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & j( ~9 r  l, M$ _5 A! i" Z* X' u3 L7 K
  698.       if(!Dn.Connected())8 g' m3 P8 @5 _" ]3 B8 H
  699.       {/ O8 T# n5 v+ B4 `, Y& W  j8 d
  700.         dwTotalFiles=1;' R2 M) j- X, m2 L8 r0 ?
  701.         dwDownLoaded=0;
    , c- G# }& m) O8 K/ O& H
  702.         bSilentStep=TRUE;4 M6 x  A8 v% [& P' y5 y; I1 w) l
  703.         bCompressed=FALSE;1 g: ^1 s9 D4 R, \
  704.         strExtLocal.Empty();
    ! Z$ q4 O( u" U# q5 s9 m0 P- U
  705.         strFullName="readme.txt";
    2 a3 b. a& y* A; @3 u4 M
  706.         dwProgramState=AP_CONNECT;
    ; v6 x6 B/ _; t4 o1 A* ]
  707.       }
    4 B9 B' e  h9 ]0 M5 R2 M
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();6 p/ X+ J: B* @" m7 Z
  709.       dwStartUpSteps=2;# `' ^' z# ]0 u" a
  710.       break;
    8 y1 {0 N$ N! D0 y
  711.     case 2:% w1 E# Q7 @  c- Y0 E( C
  712.       {
    ' s3 p0 t! B3 w
  713.         int iEOF;
    7 J3 k; h8 E7 s* |
  714.         FILE *fp;
    + p8 |9 L* A- k! B  r
  715.         char szString[512];# Q' Q! A" B' x: _1 p
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    6 n, U" a+ A, _4 |1 p0 n
  717.         if(fp)
    - T, j2 [( T6 d" `+ s0 u4 O
  718.         {
    . C/ t5 T! g& O$ C. @0 A
  719.           do
    * h, Z+ T; {  P) R3 Y! a3 u
  720.           {  H5 o& D1 W4 J/ i$ x* N) Z; o
  721.             iEOF=fscanf(fp,"%s",szString);$ @( {: T$ \! T3 ~2 j% z. q# ]
  722.             if(strlen(szString))
    ' D1 U+ R2 j: J- v* g" x& a6 [8 s
  723.             {# p2 v/ O+ ?5 @; H# I/ M
  724.               if(bFirstChar)
    0 d" r4 k2 N" T
  725.               {( e: A+ Z$ c+ J+ `
  726.                 bFirstChar=FALSE;/ ]- Q5 u* B1 ~7 F  D7 s
  727.                 bConnectIsBig5=FALSE;6 H  L* L$ \' }1 ?, U
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;: l/ A2 `7 V& b% i) f
  729.               }$ ^& L# b8 X9 \) g% L$ M
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    " I$ P/ @+ p) T) C  T. D9 Y
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));1 e8 b* ?1 A- O. A9 ^$ S/ E
  732.               dlg->m_ListText.AddString(szString);/ x& e+ p. ?+ N  h8 S! C
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* P' z( M5 K5 M* H) y
  734.               *szString=0;
    . R2 @2 c0 p3 ]; ]8 w9 Q
  735.             }" Q$ o+ ~7 [+ m  ^. S
  736.           } while(iEOF!=EOF);
    * K+ ~0 Y* \9 P  P2 I  M( K
  737.           fclose(fp);
    # ]$ F1 a& T$ O; U- o1 U% Y9 a
  738.           unlink(".\\DownLoad\\readme.txt");
    / a" ?. D* o: f9 @- D9 F) }! `
  739.           dwStartUpSteps=3;" e3 Q0 X( ?4 I* R8 @
  740.         }
    7 L# Y, }5 x4 S/ n1 X4 e$ g
  741.       }9 }" z2 \9 r9 P, `2 d
  742.       break;; x8 }/ h4 F" z1 F8 Q# R
  743.     case 3:7 d( s( K- D* P( K& v
  744.       if(!Dn.Connected())
    ! _3 W. Q/ r6 H( q/ ?: }2 e
  745.       {
    0 r7 g; Q& N9 F5 R5 \
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    . Z) O3 w6 k# f/ q% e3 `: k
  747.         dwTotalFiles=1;- a3 Z# u8 A1 j0 C0 Z- P5 y
  748.         dwDownLoaded=0;8 g' _1 M  V  W4 K! J/ |; B- ~' \
  749.         bSilentStep=TRUE;4 Q% S! E6 f- @( i$ p" W1 r
  750.         bCompressed=FALSE;5 R! i$ \6 N+ @
  751.         strExtLocal.Empty();9 L  \4 F5 R) p
  752.         strFullName="checkversion.txt";6 C( W: M7 o  M* V, _) e7 u. \
  753.         dwProgramState=AP_CONNECT;( C! y& }, P9 k" d) g' ^
  754.       }' h' J% x& g; t7 E5 U- d/ Y
  755.       dwStartUpSteps=4;; r# Z) k/ C2 K
  756.       break;! m1 S) y0 X5 q4 K
  757.     case 4:0 J6 M7 R* X' U1 p) {) u
  758.       {, I+ ^0 v8 Z- F) k
  759.         FILE *fp;. [( Y1 h3 v" k  L$ w' p* h
  760.         char szString1[128];+ J* e9 F/ t7 }, h9 N1 V" q
  761.         char szString2[128];8 q1 P  J( U- X5 h' t, b
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");5 {) M0 n% Z1 o* I# j5 @- }- t
  763.         if(fp)
    1 [) @! r1 s( P3 I. l5 t
  764.         {
    . `2 w! M0 x. x9 }8 [, D
  765.           fscanf(fp,"%s",szString1);! M  p0 t' W& F/ g5 ~# N
  766.           fclose(fp);
    ! f' R( |1 H  [2 S6 p. T
  767.           fCheckVersion=atof(szString1);
    9 W: l. h! n9 Q% S! o5 v" B( L
  768.           fp=fopen(".\\checkversion.dat","r");
    5 u  I. T' N$ j4 T8 W  a
  769.           if(fp)
    # G1 m0 v- g* [; `
  770.           {9 ?6 r6 C8 \! W: |9 n$ L
  771.             fscanf(fp,"%s",szString2);
    % F( H. K; m* t0 c- d
  772.             fclose(fp);
    : O! W/ ~  b: F& `1 B. q4 e5 n
  773.             if(atof(szString1)!=atof(szString2))
    % b0 d) ?1 O& d' t: l
  774.             {
    . V  R' A5 X; F
  775.               if(!Dn.Connected())
      z: Y6 Q" w8 w2 j- f: c4 k
  776.               {: A3 F' t: r9 H9 n% B: r
  777.                 bFirstUpdate=TRUE;
    1 @, S7 g) Q2 z
  778.                 dwTotalFiles=1;# l+ J6 [+ ]- S5 n/ |+ p
  779.                 dwDownLoaded=0;
    $ ~% J$ u7 |. t) x1 H" o
  780.                 bSilentStep=FALSE;* X" R( t  N& p. X- N9 G
  781.                 bCompressed=TRUE;- i3 l# p7 B5 I5 V: \. M
  782.                 strExtLocal=".\\DownLoad\";6 ]& v0 s4 q$ H: ?% k; z0 Y
  783.                 strFullName="update.txt";
    + t% E9 I7 f7 _& z4 G$ a* I% H8 G- q
  784.                 dwProgramState=AP_CONNECT;2 z) Q8 I2 c) _4 N" p' I9 X; }
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 {$ i5 E) b3 r
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");* @: |/ o1 q& l% U
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");& f- [+ w1 k+ X/ I, e! O1 r& d, D
  788. 8 C: Z9 b4 E+ w4 W3 Y$ h, a
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 y$ s6 R; V: R3 @  y; S# a
  790.                 unlink(".\\DownLoad\\checkversion.txt");4 m" _: h( x# @7 X) p
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)3 X. [8 V# D# |4 R% F% f' }
  792.                 {/ C# |. _' Q$ ^# Z0 F6 a
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    7 r% `, I4 b* A- n( I- F7 z- r& P, F
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    , n) {* T5 R6 y' K! K$ \7 q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");: s+ Q0 H1 M. K$ |) I) Y- e
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 S3 V% ~6 o; o3 _0 r) c. S6 ?
  797. 3 ]2 t# ?, S" f- M- A: W1 z8 y
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");: X5 ~  l4 v9 [& J1 o# E
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 i5 ?! \) b/ }1 N2 V
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    % v, X7 u4 R; N; G
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . i- {: L8 a  V  v4 P7 q
  802.                 }9 j. L/ Q1 q5 I" ~6 N
  803.                 dwStartUpSteps=5;
    3 o1 s; A: l1 n1 r
  804.               }# Q: [# L3 @2 i6 a  B$ [
  805.             }6 v& h0 K! G. e
  806.             else
    ; ^, D4 _  w& v& J8 L
  807.             {
    - ~$ p4 V  ^7 I- j) B
  808.               unlink(".\\DownLoad\\checkversion.txt");
    9 ~# B% g  U& t, e, `
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - W/ c3 z; k- z8 D0 P9 X/ h
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 b! C) L$ M% Z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 H1 z' @5 X1 d6 Q" c

  812. 7 K% w8 p1 p9 ]; T/ [7 Q/ I3 f0 p7 @
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ \# r; M/ K" N$ \; Q; U
  814.               dwStartUpSteps=99;6 Z) V3 ^# o2 z+ }
  815.               bFinishUpdated=TRUE;! m2 a: u3 v$ C# k$ w9 A9 N, H. K. ?9 o
  816.               bCanUpdate=TRUE;
    3 i0 Y. a/ S6 s( \0 H) t
  817.             }
    6 ^# T% I5 M6 S5 o% Y
  818.           }
    : i  b5 w3 L: U7 R
  819.           else
    $ q! h6 O0 f& V, }& M' ^
  820.           {  L; ?' K8 t+ `2 f. s
  821.             if(!Dn.Connected())7 o. B& l/ G5 C
  822.             {
    ) u) v+ d  |; ^! p
  823.               bFirstUpdate=TRUE;
    7 ?) t5 j& G7 Z' W# C" a5 v
  824.               dwTotalFiles=1;
    7 \2 ]8 H- j% X- O8 m
  825.               dwDownLoaded=0;
    0 T* O, v+ W* P7 C
  826.               bSilentStep=FALSE;
    3 M, O# h' C4 z" n2 Q3 R& q
  827.               bCompressed=TRUE;9 h  y# j7 W* ]! A" L% v( s# U
  828.               strExtLocal=".\\DownLoad\";, [/ _# X' `; j9 w& Y# }% F
  829.               strFullName="update.txt";" G) K0 D7 h: P: r$ g, i! R+ I
  830.               dwProgramState=AP_CONNECT;
    # C: v5 l6 o5 _$ g' W
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      Y5 i9 b$ ^0 k; R7 ?& M# `5 f
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 A0 `' O. O/ w- R
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");1 x$ A* `  S/ ]. [4 l  x; O
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 T* m5 d& t- ]: k
  835.               unlink(".\\DownLoad\\checkversion.txt");5 H4 a6 a2 p% H" l8 D8 B
  836.               if(GetFileAttributes("Wsa.zip" )!=-1): d* P, s" ?" I
  837.               {
    / c0 {; e* e# X, T, z* `
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    : ~# W/ _" L$ n9 E& E9 n0 z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    & z- I2 K- O! w+ S2 q7 l
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");& d& C8 h7 c  ]3 ^! G( D' u/ r
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' G8 I% y+ T, K. ^1 p" e
  842.                 # D. o" ~2 @' d( L
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / K$ Z$ T  k* i; M
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  k/ d) P* u8 r$ ?: G; [
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");4 Z8 l( T1 q- g/ x7 ~6 Y8 A* P
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 I' }7 z/ D$ f" ^
  847.               }
    1 w3 E, c. f6 ?1 K. c
  848.               dwStartUpSteps=5;
    " Y& _) ]8 A8 i
  849.             }8 w! [- G# g3 Q1 l, c
  850.           }* w: i1 a1 \8 e6 a/ o
  851.         }
      F# X5 l! ?# \/ ?* G  a
  852.         else3 l2 G$ d7 Y+ H) n* I
  853.         {
    ; }: p; P& f& Q7 v
  854.           dwStartUpSteps=3;
    4 I2 w, I& J. N0 P: X; D) J
  855.         }4 S9 M$ x- S% s
  856.       }  S6 C2 Z: ]0 d
  857.       break;6 Z  R5 A4 K1 `" @2 d
  858.     case 5:# W9 z6 K6 x  O
  859.       {
    . m# \$ z0 p; D" b' C, ^
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    8 l1 {7 ?: @- f+ O5 B$ ~" b
  861.         {
    * h# p# k7 {% Q8 C9 ?
  862.           int opt_overwrite=1;5 \" h: B% S# t# S9 V$ A" I& x7 C7 L
  863.           int opt_do_extract_withoutpath=0;
    3 T+ X9 S/ b+ g3 h: G% u
  864.           unzFile uf=NULL;9 v4 N+ d+ Y. X/ f# j1 c" {, ~
  865. 2 x* S- e+ O7 K
  866.           uf=unzOpen("Wsa.zip");; Y) J+ K0 H4 R* G8 @
  867.           if(uf)7 _! N. C$ o9 s
  868.           {. E  @- [0 V+ G& v4 @0 O: \; v
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);) p% G, ]0 O* }/ Z
  870.             unzClose(uf);
    ; Q, t' e- D4 {! q& \( B7 e, O
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    1 ]" L( h6 q9 t( g
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    9 t; [. d8 G1 C& h
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    6 b. a3 l3 C9 }+ q2 l) x' M
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " X# R5 q  d; E, s: G6 `
  875.           }8 f( R  X+ k5 k  k' Q6 m0 a7 W
  876.           DeleteFile("Wsa.zip" );
    , p9 K( O1 P6 {
  877.         }
    9 c/ P. z* H1 K, y/ G$ N$ U

  878. 3 Z7 d  X2 F6 O' p; _
  879.         if(CheckLocalVersion())  m7 I, d# P9 D3 c
  880.         {
    - l& }, ~2 M% ]$ j% y7 [8 `9 L
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    / w& e0 _# ?+ Z1 H% b% c
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    * X% V3 L7 `* A" @/ b4 S4 W
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");6 ~$ T* b! D- y4 s) i; @1 k
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) K3 `! a# H( G! r0 v
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    7 N) F- v! w* }  \% o+ K
  886.           dwStartUpSteps=99;% m! p. \, d; Z) V3 d4 ~4 r2 y
  887.         }7 C3 p5 \5 Y, d
  888.         else
    $ s1 U0 A1 F0 j4 R
  889.         {' b1 Z# A7 R, B
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      ~0 f2 z- Q& @
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ W0 `% M% ~* z& a1 @
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 f  k8 ?# P& f  N) i* [) Q# a

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

! R  Y4 Q* `$ {6 s, C5 T

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-17 11:46

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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