找回密碼
 立即注册

CSUpdate.exe源代码

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

7 C! y& t4 ^3 B0 {
  1. / RevApp.cpp : Defines the class behaviors for the application.4 T, v" h2 G# _8 o6 E
  2. //
    ; b$ q+ b8 Z1 h
  3. 3 |" |+ ]  w) d8 ?7 B
  4. #include "stdafx.h"
    % a3 {3 Z5 O- A- x; e: j  ]$ L3 K  l
  5. ' L+ p) I4 {: q: D1 Z
  6. //#define UNICODE
    # ?6 R1 l( c/ |+ _0 k
  7. //#include <gdiplus.h>% H- }' g4 L: b- X! N: v! Z9 b# g0 X& M
  8. //using namespace Gdiplus;7 G( `5 b! S0 ^# J

  9. 6 T8 i; N, p& G$ @( q
  10. #include "RevApp.h"& f; U7 D! G1 p
  11. #include "RevAppDlg.h"
    3 G- v3 r" O0 N* l
  12. 8 ^/ c+ n7 {0 \
  13. #pragma warning(disable:4786)
    # C  X. i5 y2 H( ^5 b
  14. #include <map>
    9 Y# i, w6 t- _5 K3 S$ L
  15. #include <list>
    7 N* o: X7 n- t  b
  16. #include <direct.h>% u6 G6 d8 c4 q, y6 m/ s

  17. + S: C$ L" h' U* r0 h5 V) H, A
  18. #ifdef _DEBUG
    " I# g+ h+ k8 Q! k- s
  19. #define new DEBUG_NEW
    8 Z) i& Y/ ]: f
  20. #undef THIS_FILE
    : _$ L% L+ u9 J
  21. static char THIS_FILE[] = __FILE__;+ J2 }& i4 X5 W$ ^& X
  22. #endif2 t4 c0 O$ I+ @4 l
  23. #include "SkinResDef.h"% C; t# \' I) P, i/ b
  24. #include "ChangeBG.h"
    4 v8 ]- z1 L+ h. E% a
  25. #include "AFXINET.H"- x4 G0 Y- a% S2 a7 H% [( O
  26. + w  R# ^  U3 H" p
  27. #define TRADITIONAL_CHINESE 0$ B7 ?+ q- ~- \* e
  28. #define SIMPLIFY_CHINESE 1, Z# ?& Q! ~8 [. w& Z5 B
  29. #define ENGLISH 2" R8 ?' t7 J7 v& W' s
  30. int m_iLanguage = ENGLISH;
    ) a( \9 J& D) K0 A
  31. /////////////////////////////////////////////////////////////////////////////
    7 i# z+ v7 w0 S* j, L, ?6 D' T2 {* w
  32. // CRevAppApp
    ; j+ M8 f& @' {! P( w4 T, B6 }+ F) s# u
  33. + J3 K" s; z  |" H# J
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)0 j$ s  M( x- ~/ B  u
  35.         //{{AFX_MSG_MAP(CRevAppApp)/ o, l: O0 m* N- j5 ^: }
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.& R: U: ?0 c9 B% `
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!, e4 q- l5 q0 p. G' \& p* }
  38.         //}}AFX_MSG
    0 g' u  c' D/ @9 B$ U) T+ V3 V- B' }
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)9 Y4 K) o8 e/ o4 @& H2 _- l
  40. END_MESSAGE_MAP()% P" c3 a4 ^9 J" S

  41. 2 D# X8 F2 K4 v% ]# a. ?
  42. /////////////////////////////////////////////////////////////////////////////
    5 H) z% P) x  }/ U* F
  43. // CRevAppApp construction
    * Z+ s1 d8 m+ N8 R2 G  X

  44. , i$ H3 A7 E; o- _. K8 |5 F( z& l
  45. CRevAppApp::CRevAppApp(): k- R, U0 F. o5 Y2 D
  46. {
    / M* J4 J3 R9 |8 y
  47.         // TODO: add construction code here,
    & u* P1 U+ \+ o
  48.         // Place all significant initialization in InitInstance
    $ o/ ^9 h5 O  h7 Z9 u. K( _
  49.   bDisplayIsBig5=FALSE;
      c7 y% |9 E7 D3 s7 T8 m! {
  50.   bRestartUpdater=FALSE;
    6 Y6 q, \2 Y  A. N6 {
  51.   bFinishUpdated=FALSE;8 B9 Q3 p$ h( m; t7 W( v4 `0 p
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    3 b  y+ b0 P2 k, q. V3 V+ k8 \
  53.   InitChangeDataBig52GBKS();
    2 J, L1 n4 q! W. g, e: B  o. F
  54.   InitChangeDataGBKS2Big5();: t+ P" b# [: D9 B
  55.         //1 `7 C6 l, ~% i# S7 J
  56.         bClickRunExe = FALSE;$ S$ R4 E* G: w1 A( n6 L
  57.         //0 D; X7 \7 w% v' y
  58. }
    9 o% w2 Y2 x* I- ~9 u( C4 F  k

  59. 5 z. `5 a3 E8 v
  60. CRevAppApp::~CRevAppApp()) y% ~2 C; K: ]; ~
  61. {" ~& S. w- E1 z* z" z2 F! L
  62.         // TODO: add construction code here,
    - ]* U# l: J3 p- S2 ?
  63.         // Place all significant initialization in InitInstance7 Z' p: W' G& B( H' I
  64.   EndChangeData();! ?2 q+ y, j4 `9 `# f; }" ]6 b
  65. }. U' g9 w$ n/ C  z& o

  66. 9 v! c, z1 h5 T! z$ {
  67. /////////////////////////////////////////////////////////////////////////////
    0 \& Z4 w$ ]+ o% m
  68. // The one and only CRevAppApp object2 a4 a: o( R/ t0 k
  69. ) G! u$ @  r# m9 Y
  70. CRevAppApp theApp;' i9 L- J/ @  S1 W& {

  71. - m# ]; t8 w2 \' ~9 d  J. G
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : C( @" @9 y$ d+ U
  73. {. g  d  Z: A' O( r8 c( p
  74.   int iEOF=0;
    + N* a4 g4 p1 W- O
  75.   char szTempName[MAX_PATH];
    : f" r( a7 E) ]4 Q' L- i" q4 i
  76.   *szFileName=0;. j/ |: F' t9 m/ ]5 a8 q
  77.   iEOF=fscanf(fp,"%s",szTempName);  J$ y% A: C2 z) g
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')1 q$ v* Y  s. o6 }* T) z4 {
  79.   {
    ( d9 c4 |" J+ ]0 \, z( _
  80.     strcpy(szFileName,&szTempName[1]);! a* }  Y( B1 ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ' M. v  y+ Y4 m  I/ r" H* ~
  82.     {/ H6 D! d- z  q, J! H- ~3 {
  83.       iEOF=fscanf(fp,"%s",szTempName);2 f# n5 k6 N: z: D& N4 Y# z
  84.       strcat(szFileName," ");& c+ I0 U- v% K' d
  85.       strcat(szFileName,szTempName);
    & S  y+ I0 K; B' }# a
  86.     }
    ' G" w" F. u7 |" ~
  87.     if(strlen(szFileName)>=1); R0 P  H  [: y/ H' O6 X
  88.     {. A  ^2 n4 _0 Y" ^: l
  89.       szFileName[strlen(szFileName)-1]=0;# C7 I) c8 H6 [) n8 J* U! x
  90.     }
    % b! M2 m3 m- ~4 z% Z
  91.   }0 s) f4 D6 W/ G: ], Y
  92.   return szFileName;
      G1 W( Y2 X) r" o4 ]0 C3 G
  93. }
    , u, K! q, N- N$ i, c8 J

  94. " X5 N, N: F' U4 C) E5 l& t7 A' w
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)2 f8 W0 E5 \7 H: h
  96. {
    ' y3 \3 _. u1 J# j5 R2 T, V
  97.   FILE *fp;4 P) B0 }5 k0 e1 Z; w
  98.   char *key=NULL;8 t" Q5 `( e$ i
  99.   char version[MAX_PATH];
    ) w3 o* [4 J, a+ [4 P
  100.   LPUPDATEFILE file,olds;
    + f9 J3 ?- m% F& t5 |+ U7 K
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 e5 t& L4 T# O& q$ k
  102. $ a2 f- b6 w! Z
  103.   UpdateList.clear();: t  l6 Q' l; W* d; L/ B
  104.   UpdateFile.clear();
    $ d) p/ c7 D% A, L3 J5 B3 V
  105.   if(GetFileAttributes(filename)==-1) return false;
    " k8 u- e: M% ^6 K3 X( q
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ( U- [: H* a8 @3 o+ t/ F. o
  107.   fscanf(fp,"%s",version);" E' F  R, N0 \! M! e  R3 }% v
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }- K! F/ R" M/ k) Y3 j1 K( E6 N
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ) n4 V( k5 I# F; ^- O6 F; S8 H: X" r
  110.   {: ?7 l3 j7 U. G3 j7 I7 t3 l" V
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 c8 ~  [! A% }" h# L% q: O
  112.     fscanf(fp,"%s",file->path);
    ! @/ M( y2 c# A9 p+ _
  113.     ReadFileNames(fp,file->file);$ |' q0 X9 z/ S5 r
  114.     strcpy(file->full,".");8 Z' |6 K) J2 B, r; l) e) S
  115.     strcat(file->full,file->path);2 j- M( C4 q0 ?' Q  U- N
  116.     strcat(file->full,file->file);: i, t( l7 d  [- g; o
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())( K4 O0 Y; ~# ?: P) R
  118.     {
      X' H6 Y+ i+ Q$ w' Z/ g2 N" C
  119.       file->vers=(float)atof(version);& J+ ]/ A5 K( c6 x7 _- d% c5 h$ C
  120.       UpdateList.push_back(file->full);
    ; q$ i- R" F: l2 p- T
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));/ H: h: ^% u7 J( J  M7 m. C7 C! u
  122.     }
    8 t4 Q# Y( o0 V6 ]) ], i
  123.     else' b6 E8 k. M# e
  124.     {3 b0 S! M3 r- I  f9 {
  125.       olds=(*p).second;
    ' L/ F+ E; `! J4 n4 ^$ l( G
  126.       if(olds->vers<(float)atof(version))
    ! Q* @. a. e$ A, s' R
  127.       {
    $ f# `! t1 x" ?- F6 p( w
  128.         olds->vers=(float)atof(version);
      H4 S: j) b+ o2 A- |( }) V3 a
  129.       }( ~3 _' b7 F+ T4 T% D
  130.       free(file);
    " M  H6 h2 v$ F) l, c( [# Z
  131.     }) D+ W8 p7 D! E
  132.   }
    3 B& b3 T2 e0 g6 }2 K
  133.   fclose(fp);
    7 l) @: i" o; A( ]. f
  134.   return true;
    % p5 q* h' R3 `! G& v$ g
  135. }( f) y$ s& o# Y' u9 \
  136. ; ~0 Y- U2 M% i6 z' x( R1 D
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    8 m' U6 F/ r; `$ }" e4 E5 \4 K
  138. {, ]8 V6 a' D3 e( K
  139.   TCHAR  szFull[MAX_PATH];
      T3 ~' a+ g- U* S6 S5 g! o
  140.   TCHAR *token,*inter;' E% ^8 h/ v' t: F# J9 I+ h
  141.   *szPath=0;0 e3 E# ~3 p! u( v
  142.   strcpy(szFull,szFullPath);
    : p& @1 |' o6 l7 a* k$ q# H; j( S
  143.   token=strtok(szFull,"\\/");
    % @1 e7 ^! W+ B
  144.   inter=token;
    & J8 u+ s% i$ S
  145.   while(token=strtok(NULL,"\\/"))
    4 U% Z9 Q, d4 v1 S, s6 m+ K
  146.   {
    / e( Y/ T  e; N/ n4 z
  147.     strcat(szPath,inter);; y2 v' C  e( z8 a( [& ?
  148.     strcat(szPath,"\");
    8 ]' l6 I7 ^: S/ V4 V9 i+ s( R
  149.     inter=token;' |2 d, Q% z9 i1 w" @1 }( A
  150.   }
    . g' U5 Z+ b( B! f! r  S
  151.   return strlen(szPath);
    % ]8 M' A7 e% r' Y; o6 D& W
  152. }0 ~0 r+ m1 K% @! V# M. e
  153. 7 t  ~' v) [) q' t
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ; P  |3 c1 a3 s
  155. {
    9 L! b1 h8 e9 e4 a
  156.   DWORD attrib=GetFileAttributes(Target);
    / N1 w, N# W/ U& ]" U
  157.   if(attrib!=-1)
    ! }) ^6 i% \4 m$ o9 j! F
  158.   {
    " w# z! {- ~0 m; V
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    1 l$ d' W7 D8 Q! k+ ]. p
  160.     {7 Q( `9 R+ m; J
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);) ?" E+ I$ g3 \" f
  162.       SetFileAttributes(Target,attrib);
      w* C" |6 L5 w6 D0 z
  163.     }
    ) s6 ^; e" v1 x
  164.   }
    5 X# L8 ~8 J! w  E7 a; a4 R
  165.   CopyFile(Source,Target,Erase);
    & l7 }3 C1 M$ K( ^; ~5 H! X6 M
  166. }3 Y& S, w  W$ S
  167. $ N; e* S- m: S; a: z- k1 [0 F
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
      H; s  ], N. t3 }0 m; u6 J. z8 t
  169. {
    * y4 e/ J8 T5 q
  170.      FILE *fp;
    * m& |% C; }0 y& R1 L" ~
  171.      char  szBuffer[8192];' G! A, s9 L! D" G! Z
  172.   va_list  argptr;: P8 {; r) e, i4 y" G) w& V. n4 D
  173. / e+ n, i9 n7 L, Z
  174.         va_start(argptr,message);
    1 d% F2 r; A. a
  175.         vsprintf(szBuffer,message,argptr);
    $ G: {" ]( b/ r# l) p  t# Q7 z
  176.         va_end(argptr);# m# x; R# H( |5 D" }
  177.   fp=fopen(FileName,"a");' D+ ~% T8 e0 N* a, e; q# A
  178.   if(fp)3 D& J* \# X0 R6 V5 k" R5 W+ [; j
  179.   {
    1 ^4 q- i/ o" B; d- c& c4 E4 t: L
  180.     fprintf(fp,szBuffer);
    ' K+ k8 h' P0 J; O
  181.     fclose(fp);
    6 J1 n' O& R+ d$ Z# C* i* E
  182.           _flushall();
    2 |4 Y9 Z  l: ^
  183.   }
    + E) j8 e5 `, X( ]
  184. }
    4 o6 \( v1 H. b
  185. 9 J9 _% i$ e  V$ @1 G) ^( Y( ?$ U
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    * z" B/ ~* f1 Z' C3 e* N5 A
  187. {3 A4 r. X' @; c# t# z+ W
  188.      FILE *fp;
    2 O9 s9 w1 O6 @  p3 R, `6 ^& l: N2 L
  189.     DWORD  attrib;6 m4 f; l7 ^; ~! p) E/ K
  190.   attrib=GetFileAttributes(FileName);5 U/ c3 M3 _" h$ W! T! D" `
  191.   if(attrib!=-1)
    5 e% t2 g0 i; r7 L
  192.   {
    # {, G2 x  e) ?1 w9 P& W: @& M/ U
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);( P* Z& q4 @4 o1 \
  194.     if(!SetFileAttributes(FileName,attrib))) T+ m; u! r3 O  H; Y( i- D1 {. B
  195.     {
    . l2 z' `% Y4 u$ |1 U3 p3 |
  196.       return FALSE;
    6 a0 l' O8 t5 J0 H, j( N, t
  197.     }: I& g& i% s$ L! |
  198.   }
    5 g" _# [  p, W: F5 y
  199.   fp=fopen(FileName,"wb");( g- V* F7 t, U
  200.   if(fp)
    . o1 Q; K# U1 L" j
  201.   {
    7 ]7 ~. C  O) Z# i2 D, }
  202.     fclose(fp);2 a. L( O6 D0 O* J
  203.   }
    9 _$ D6 W8 g/ \/ I5 d% w
  204.   return TRUE;
    ' I) m' C; Z, Y. ?+ P
  205. }3 Z9 H/ z: ]1 c

  206. " d8 z! x( A) [% \+ S* k- `
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 c. L; e) a6 n! ^1 y& J6 U: q
  208. {
    : X& m4 c% t7 t  m
  209.   char filename[MAX_PATH];
      C, [, j: c/ E7 g- v" s; e! C) @4 S
  210.   LPUPDATEFILE file,olds;. k% Q6 c6 `* q; H' S2 I
  211.   std::map<int,CString>::iterator i;+ C( l; k# P( j  H: K+ a" Y
  212.   std::map<CString,LPUPDATEFILE>::iterator p;. I" n) X% z( M! R2 b' a* I
  213.   std::list<CString>::iterator l;$ o! W9 M+ S; W7 c0 o; `/ N! p- [
  214. 8 E  ?. L5 ~* y  E1 v$ W% i4 Z
  215.   if(bFirstUpdate)' H0 B" m$ f  u" l; U) G
  216.   {4 g( F: Z3 c. }, }, G% c
  217.     dwCurrFile=0;- u7 S: C+ ~, U# J2 ~
  218.     bFirstUpdate=FALSE;. x5 B9 h! K8 R% |( `5 k, d3 k5 n
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ B9 Z: I( Q; w$ U- q7 b
  220.     {% B# q# {4 l' \/ Y9 @
  221.       dwTotalFiles=UpdateLocal.size();
    7 J) t7 d- ?1 V: b
  222.       dwDownLoaded=0;
    . c' R) f) M# D. v1 W2 X* Y
  223.       bSilentStep=FALSE;2 S6 O. |; O" b% G/ g! m6 ^
  224.       bCompressed=TRUE;
    ; Z9 J  ^' O9 L) G. q7 j: o1 h
  225.       strExtLocal.Empty();5 [4 s5 N& s' W, V* S: x6 w' s* s0 d
  226.       strFullName=(*i).second;% k6 t$ T; X% o' J4 P: K3 F' o
  227.       dwProgramState=AP_CONNECT;. a* e" ?/ X: r# y  f9 b7 x
  228.       return TRUE;1 n3 q- ~1 R9 \) ^" V
  229.     }' W! H6 I  {) m
  230.   }
    ! a( ^' x. L! V9 A$ M/ q3 t& H
  231.   else if(bRestartUpdater==FALSE). c  F0 I" ]9 w% l, q% w& r/ F" s
  232.   {4 l! b( x4 b# {2 \
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    . D% p# d/ t; Z& t  l# s
  234.     {
    0 m* F6 ?9 G$ X$ T8 o& x
  235.       file=(*p).second;9 t7 j$ L' O- j; [8 l0 {* D* N& V* @
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()); l+ ^3 W7 w. w+ T
  237.       {% b" f3 O. y" \0 s
  238.         olds=(*p).second;
    9 q5 m/ N% s, c" z
  239.         olds->vers=file->vers;
    ) {6 Y" g5 [0 l6 o0 y
  240.       }
    ( M6 |9 K4 o- a' [' O
  241.       else/ o; |8 a1 e1 b' V7 G" i1 f, P1 ^
  242.       {8 X% ^! Y' K$ U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! E; _9 h7 y0 o( Y- m$ Z$ T
  244.         memcpy(olds,file,sizeof(UPDATEFILE));; |6 E* n0 \4 H  p& v" d
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));! G, D1 k2 Q; i$ L
  246.       }
    4 ^( }! g3 m+ ]- I( r7 v) A, L
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");; ]) k( Q) b8 a8 F# x3 G1 i
  248.       sprintf(filename,"(%s)",file->file);
    * k& {" O: L  c- t  @
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : v" l  O" D4 B+ a
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }$ ^, f/ w" m. ^6 V9 y
  251.     }" y+ S( C) H( I$ k) ^
  252.     dwCurrFile++;. D- P. r& U) E  F! X" F2 j
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- T& N9 V) ^/ @7 W) }- K
  254.     {3 w8 H5 c* |8 m4 }
  255.       bSilentStep=FALSE;/ c" R3 [5 c5 A. E" ?! |! q% u
  256.       bCompressed=TRUE;
    ' J) S$ {% R6 l/ P; q; p
  257.       strExtLocal.Empty();" m5 R6 L1 q  {% T
  258.       strFullName=(*i).second;
    # P) u- t8 n) w/ r6 o
  259.       dwProgramState=AP_CONNECT;
    , o( N5 S! O' E  p& x2 g) G* C8 S
  260.       return TRUE;7 _- S& b+ M$ ~, r& A
  261.     }
    ' G# G; m# v4 C, b$ t6 p- y
  262.     if(!bRestartUpdater)
    2 \+ ]: Q, {; [" t3 i3 W! |
  263.     {
    + q* ~" U2 m; _8 `' r* m: Z
  264.       int iCurrSize,iFileSize;2 F/ J' {8 _6 f3 x
  265.       iCurrSize=0;
    1 L4 a" }# u8 X. |4 A8 ~
  266.       iFileSize=UpdateList2.size();
    # \# ]5 ^0 t, h, y5 P8 Y$ f6 K' ~
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    * P' ^9 b! P- Z/ Q% @4 s2 L+ s
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 |  d3 m) E# }. R) @+ m: ~5 d3 {
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    4 x9 w6 [6 b2 g8 C* X2 f! l
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. W2 ]  V+ y5 F0 Z+ \$ h/ J
  271.       Fclearf(".\\update.dat");1 U, r5 n0 ?$ [, Z
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    & g7 _6 {+ B1 G* f' O# r
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 |: \. n: F2 U5 O3 G6 W. ]5 z; j
  274.       {) O" a7 P$ i0 k8 g/ S$ \, h* H+ M9 \
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    $ [, ]8 Y+ h9 y0 L; }/ ]
  276.         {, i  l( i' B% e8 z' o- Y- h
  277.           file=(*p).second;2 W0 T' @+ C9 x4 S# [& m( [
  278.           sprintf(filename,"(%s)",file->file);
    6 n6 t! q: \# r4 D/ R4 w
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);2 f9 n  u4 M% q( h$ ]) _
  280.           iCurrSize++;2 u' S2 `4 r# _/ ]; C
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ; j( z$ V2 }0 ?' a' e2 M7 X& B
  282.         }5 V9 i( K$ J0 w. H' Q
  283.       }
    , q0 y0 ]. u. Q) d3 x
  284.       unlink(".\\update.txt");
    * D& G( h% ~8 Q
  285.       unlink(".\\update.tmp");4 J" P) q0 T% s. Q- |
  286.       Fclearf(".\\checkversion.dat");
    : ]7 }: L! X1 `2 I
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);0 `; c8 M5 Z+ y1 n3 ?
  288.       if(UpdateLocal.size())
    $ X7 M. P' p7 N* ]. r  B
  289.       {4 n1 O# Q; q1 U3 H
  290.         UpdateLocal.clear();
    ( r+ o; i1 I5 A" t4 z' J- I
  291.       }, a  \* l" K3 C
  292.       if(UpdateFile3.size())
    / ]! Y' V0 |/ c4 K( k
  293.       {
    ) ]& l% ~4 a# \& C
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)2 k0 a& N: X3 `7 o& s& O
  295.         {( m1 x" U6 {* |/ Q: n( i- v
  296.           file=(*p).second;
    ( d, `- Y9 e+ Y% o; \% F
  297.           free(file);
    - N3 b) C# c( D6 F( y
  298.         }
    2 n4 K% c( F+ F2 M/ A5 V3 c
  299.         UpdateFile3.clear();
    3 @7 p' j6 S& F# l
  300.         UpdateList3.clear();: C; k+ [5 f2 M  s4 \
  301.       }
    ' G$ c  V# W+ R! E/ P
  302.       if(UpdateFile2.size())
    % V0 ]# [' i' E4 J
  303.       {
    9 e# g- M4 r+ Q: h4 \/ F
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : }" Z8 d+ v' A# t
  305.         {
    8 {2 z9 G8 a# e, u9 y% W  [
  306.           file=(*p).second;1 ^: F9 t9 A9 e: u" J6 ~
  307.           free(file);% G; R; {5 P: Z# _5 a
  308.         }1 p" o1 H+ _5 ~
  309.         UpdateFile2.clear();/ k4 ^2 d2 A9 E0 t7 C' g' J
  310.         UpdateList2.clear();# M: K) Z) J, A# [3 E/ P. K
  311.       }3 A' b6 {. K) Z8 Q9 e9 H, w
  312.       if(UpdateFile1.size())
      j- m) W+ W* V5 ?8 J
  313.       {
    ( w! e* o5 Z8 C5 A
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    " a6 h( p" P, c! I  `$ H. u
  315.         {' b' J) ^' I+ z% s' x
  316.           file=(*p).second;
    " F: O' |8 g( ]8 z# k3 f: k
  317.           free(file);- I0 j* m. r! Q* G2 J
  318.         }1 h: R6 E8 U2 V3 B9 M' h
  319.         UpdateFile1.clear();2 e4 }) c- z# B' G0 R2 S
  320.         UpdateList1.clear();* x4 {1 w5 s+ \0 \6 X
  321.       }
    , i/ T, C+ o: R3 f7 Z+ e9 [
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    5 p: u& E" Z1 Z* N; s1 R" `3 R1 {
  323.     }/ Z( [; r, S1 s& N1 O% ^
  324.   }
    7 G. x) r* e6 g6 y, Q: ~' H
  325.   return FALSE;" L& ^4 K& M# ]+ }# W% P
  326. }
    + S" P) L5 y$ {" j8 X& N( D
  327. + p% T+ e* r7 u
  328. void CRevAppApp::ClearAll(void)
    / q/ B3 c/ A2 m# b3 c% O
  329. {8 H$ o8 i, l' F% D$ S
  330.   LPUPDATEFILE file;
    2 _) i& L: l6 ~# z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * Q* _7 }: g: ?3 U  }2 g4 [1 Y

  332. - i7 C" e& V# G7 K2 E
  333.   if(UpdateLocal.size())3 z- D, F5 C% k" z
  334.   {
    4 a8 X7 f& p0 x) _% E
  335.     UpdateLocal.clear();2 r1 N0 ^) b; T
  336.   }& j1 J% y/ {: H2 N
  337.   if(UpdateFile3.size())8 L- r8 Q- R# \$ m" m
  338.   {; G7 R- W: f; v& q' ^' s! v+ `
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + g" H, V2 t, n' ]
  340.     {
    0 z' B! J( B  w0 i' k" E* C) w: Z# x
  341.       file=(*p).second;, b! A  ^% N. H
  342.       free(file);
    2 f  Z. Q, v5 d
  343.     }) }- o1 S' Y- b2 e6 Q  z
  344.     UpdateFile3.clear();6 K; b. Q$ ~1 n9 t3 U
  345.     UpdateList3.clear();0 j# C! L# U( I5 |9 G! E6 G7 g
  346.   }- r6 w5 U; f$ `$ G
  347.   if(UpdateFile2.size())
    * d7 @, C* ~6 }9 N: Y% m2 ~
  348.   {* {3 [1 p3 y$ h; w  ]8 v( S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 {  j: C$ P/ q7 W# U
  350.     {2 W* D" E/ K. l2 W
  351.       file=(*p).second;
    ; c& `" E* \! M6 g5 V& ]
  352.       free(file);
    1 s- M% T% M8 ]2 R
  353.     }& q! V) ~5 i9 T- c! b% ]
  354.     UpdateFile2.clear();
      M& `+ q7 M: G4 D& f1 V
  355.     UpdateList2.clear();! U& U. x7 r8 `% f
  356.   }
    9 n& I5 s+ k. g3 [; S7 V
  357.   if(UpdateFile1.size())
    ! R7 Q6 G1 W. R* @4 E4 B
  358.   {. u8 x, |0 \7 M8 s# X* e
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++): w4 v7 Y  P7 a! j3 f
  360.     {
    - h2 Z3 P, X9 e8 C$ Z8 Z
  361.       file=(*p).second;* u/ e# Y8 [$ Q4 X
  362.       free(file);; ?* L) E, d+ Q" p
  363.     }( Q8 ^4 S0 h# m$ K. n1 V
  364.     UpdateFile1.clear();
    2 `, P% }  {% A, ]4 I; H( Y9 N
  365.     UpdateList1.clear();9 w; g- f* n- }$ g4 j3 c
  366.   }3 }- P# d5 |% R  Z
  367. }  , I  X5 g8 X; W, Z* g
  368.   ! q; w8 {/ J# g8 I3 r
  369. BOOL CRevAppApp::CheckLocalVersion(void)) u5 _- }( [5 ?7 F: M! F
  370. {
    9 j# }2 o. y. L; i3 r' _
  371.   int c;
    + O1 I" c$ }+ [$ F3 J  t2 s
  372.   LPUPDATEFILE file1,file2;
    . T4 R/ i: y. t7 R8 e# z. E
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;, k% n( p$ ^7 |, r7 z7 K  S
  374.   std::list<CString>::iterator l;( b; z2 a: t7 E) `7 F' i

  375. 1 j. T- ?: C& f, W( X# l# c- s
  376.   UpdateLocal.clear();
    # F3 `8 f8 ~3 `
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    + t! s  \7 T6 I1 N( v
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);2 |- O; l- @0 C! h# Y$ W! K5 Q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);. F* N8 k- Y% I- p4 g
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    * K8 m( B, J, j" q- ^
  381.   if(UpdateFile3.size()), R1 Q0 v) ~$ f  u9 }
  382.   {
    ' ?/ {$ ]1 x5 C4 h& A" k. {4 }
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)) N6 Y. E1 A1 o6 Q
  384.     {
    , D$ k, P. N1 b' i0 N3 F
  385.       file2=(LPUPDATEFILE)(*i).second;- d; e2 b. n$ v2 s* e
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 l1 `8 k4 |! t3 H8 e' W1 `1 }
  387.       {7 p9 \. ^' @0 i
  388.         file1=(LPUPDATEFILE)(*p).second;6 G8 l0 \" [/ Z' j; |) W
  389.         file1->vers=file2->vers;5 [/ p) q: B2 m" r, d6 ~
  390.       }( m8 P- e8 s6 Z* `% g1 W. m
  391.       else
    ' g" t0 Z+ H) ]1 N. f: e
  392.       {7 w( j  x/ M5 F, C% T/ L" a
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & @5 D6 U  Z# M0 @
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));/ X3 B% T' {- L+ v
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    6 a0 d; @/ G5 i& `
  396.       }
    . h; j2 I; S2 d/ q
  397.     }
    4 j* ?9 J' C+ m5 j4 b
  398.   }
    - @5 g, [& s" k- p* v( r
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)( t2 H1 Y. G! g
  400.   {
    . j7 E" t" @# s& Y/ H6 l3 X# ]. }
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    $ ~' c4 f+ Q) V
  402.     {
    8 K1 G; a( f# j; @
  403.       file2=(LPUPDATEFILE)(*i).second;
    + O4 C1 k, W* H3 t7 K0 N) V2 V
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; U/ W0 s3 i5 j" L0 T5 [
  405.       {
    7 w2 d. E$ m9 O$ a3 s
  406.         file1=(LPUPDATEFILE)(*p).second;$ x: \; ?% l, t9 H, f0 q6 k. \
  407.         if(file1->vers!=file2->vers)
    ( Y) X+ ~/ r3 a  L
  408.         {6 k' G* E7 x( x! N$ {- H* \0 _- }
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    . t, m0 b9 G1 F3 ?
  410.           c++;
    6 q0 k% q  j) y) m
  411.         }. L# |. L9 _& p
  412.       }4 Y- t- m2 I) _5 _* R
  413.       else
    # }6 k& e- b/ p
  414.       {! p) h2 {5 F! q& @% ?4 D
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 t7 f3 X0 o' v0 B/ W/ }
  416.         c++;
    * ~5 m* J, }8 P' \0 z7 R
  417.       }
    . n/ h* A: i$ \+ V; z8 K
  418.     }; i2 X% W0 o  K, {1 a2 Q' I) s& U
  419.   }
    # Q2 C1 H$ A  E, y/ t
  420.   unlink(".\\DownLoad\\update.txt");
    . C% Y7 h' A. I% ~# w1 l- k0 [
  421.   if(UpdateLocal.size()) return TRUE;
    / U9 t5 |% }2 I# d* U
  422.   else                   return FALSE;
    ! p1 o" W  ~- X1 D
  423. }
    3 f$ g5 L- c2 a4 H# k
  424. 7 N' Q7 b- ?1 a/ r, x6 D6 B& w% x
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    7 i9 y2 f, R+ v& ]" S
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"! o" N+ O3 W- D) m
  427. & {" q9 E- u& v' P* @  s$ ~6 @
  428. " M# C, \  v& W9 z- e1 U" r

  429. : x" |# s1 p, b6 x) F6 b: d
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    % e. E7 P4 |3 Q. J3 Y4 o. V9 ?- d; S
  431. {( D0 p! B' M$ H# d. w
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    9 \* X# ^/ I' t( N  {! k5 }1 n0 ^
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( O3 x6 B" o  @& e
  434.   {* o; N6 @3 Y* v
  435.     char szLanguage[50];8 H9 {6 P. u" r: k
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 [  j8 h, i/ e% h$ @
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    - |' x, D. `& W" Y/ e% V$ z
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' z5 V2 D6 E1 Q* A4 v* @' M
  439.     else                                   m_iLanguage=ENGLISH;$ u3 n7 ?1 I9 M! w+ p2 J+ G
  440.     char szRegister[100];0 a2 i& t* K3 z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 Q7 s: k% A, Q" [
  442.     strRegsName=szRegister;. m$ r6 W! w( q5 x3 h& Z
  443.     char szPatchURL[100];: w! _$ F9 w6 z8 O
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 f) n) d2 o8 Q9 a2 ?0 @- U
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  x3 N6 M$ v# ]4 O& s# S
  446.   }
    1 w1 _# {6 ?+ P/ P! \* I) \! @$ `
  447.   else
    3 b0 T1 y. o3 B( _
  448.   {
    % j, p$ \4 b$ A7 u6 l" ]
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) h& e. }  T7 Y- z5 O" C
  450.     strRegsName=DEFAULT_REG_URL;/ V9 r& I  g4 F
  451.   }2 J8 _4 d7 o3 k( [: t3 B5 N
  452.   if(GetFileAttributes("hosts.ini")!=-1)5 b2 G+ q! p" L: [  l
  453.   {# x$ U0 w8 v! }
  454.     char szIP[50];2 y! `+ j8 d6 O; R/ V
  455.     char szDIR[300];8 h9 b7 B4 Q) c+ E" d% b
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))7 A) g+ h# b8 K) Q( u; f: o
  457.     {  k$ p7 X8 x5 I+ L( [0 R
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");# C" W, N3 e; e, G& h
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    4 S( p6 H( d: g1 @# C
  460.       strHostName=szIP;
    ! Y9 a! G1 f: _& h$ s0 h5 V
  461.       strHostPath.Format("/%s",szDIR);
    * G* C1 Z: Q% u5 s8 c. P
  462.     }
    " H! J" ~' o* C6 ^; C, w
  463.     else
    . V0 @% R  n7 I! }' `' V
  464.     {
    . I; v" v% [' I6 V9 U
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : T6 q2 R7 h% {, N
  466.       {
    ; m: d. M5 d8 S/ z: `7 D/ ^
  467.         char szLanguage[50];
    , P3 p. d! v* T- V
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 k& p* F" h) Z+ E
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # E3 }5 ?' t) H
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ \5 [8 R! r3 K- S
  471.         else                                   m_iLanguage=ENGLISH;
    ! G0 d# \' M" T( o5 u
  472.         char szRegister[100];
    3 W9 `7 J+ ^1 w% g; W9 R1 Y5 L+ l5 m
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , W0 g: U. G9 w0 `
  474.         strRegsName=szRegister;3 q! W5 p2 e. e, h% G; _7 V" r! V$ M" v
  475.         char szPatchURL[100];
    3 u! q1 |' {% ]% l. M  _: k- B
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ Z+ @0 x9 X7 W1 z6 g  n, p
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 O8 \  {' d. j% M
  478.       }  R9 }/ \! [+ a% W4 x0 |
  479.       else
    1 s8 E7 w0 ?& l3 w! r" t& T
  480.       {! ^. k9 E0 ~9 u
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 U1 W* y6 F1 `4 [
  482.         strRegsName=DEFAULT_REG_URL;
    4 F3 ?/ W% @1 d. J" D0 p9 g
  483.       }
    3 W- J- U9 V( ]( j5 h2 |
  484.     }
    ; L0 O" s4 [  K  t+ N
  485.   }" l& `4 a5 l9 X5 A
  486.   return true;
    * H8 m% z* z% J, [1 s- }8 I8 y
  487. }
    5 r* F1 X! B: S; ~* U1 T; a/ z
  488. * X, P" i9 _, Q  t9 R1 N
  489. #include ".\ZLib\unzip.h"
    ( M( Z0 ]+ D( K9 m0 d  t: a. h
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
      j: y2 W1 f7 Y' I( O
  491. /////////////////////////////////////////////////////////////////////////////: |* u/ r; [2 }
  492. // CRevAppApp initialization1 _5 w* G$ [% }. s) N. `, t* d5 e

  493. : A9 P6 q; ]& v) l; i+ f0 G
  494. BOOL CRevAppApp::InitInstance()3 B1 R" x& h" E6 j: R, r
  495. {
    8 n/ Z- A5 W+ f3 i/ \" I2 P# g: {
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];8 V" C& w$ \- n- b$ T# v

  497. / Y$ m7 m9 ]0 Y5 b6 O  Q" x
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ! H7 f: f) v% g
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
      D( z" ^/ U0 Z1 R2 L
  500.   {8 Z" k& _" K, k3 Q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    , W: `0 \  b" m" q: @+ E( U
  502.     GetPathFromFullPath(szPathTarget,szPathSource);+ G! C% W0 q3 q) w) G. J
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))& I6 G2 s. b, Y  w
  504.     {
    8 T# x' y8 m% Y) g/ l" A2 O& _
  505.       strcpy(szPath,szPathTarget);
    6 V+ J+ a. r1 R' n# i
  506.       SetCurrentDirectory(szPath);
    ' d9 k' ~- Q. K( g  e
  507.     }/ X& N/ i1 G8 [
  508.   }) B; Y! S/ K4 I+ l' r  J. c
  509. #ifdef _DEBUG
    ! }6 R1 X2 q. M
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 t' r/ `, o8 c& m! m
  511. #else
    ( j5 v# y- t# u2 G0 ?9 y) P
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); W( T  L; i0 x
  513. #endif4 m  S! H9 z- P
  514.   {$ p2 u1 }" P( |- N+ Q2 d( [9 A# }7 F3 Z
  515.     char tempFileName[MAX_PATH];
    3 ~! c3 z% \# r& N4 N0 m& Q; |
  516.     strcpy(tempFileName,szPathSource);4 ^- S: k$ g. q6 r* y
  517.     tempFileName[strlen(szPathSource)-12]=0;
    * |( M/ U% @  E; O- V6 l; b
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ! n# X% A0 t2 s, c& X0 }
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);5 c7 _+ q6 R+ Q( I9 B- V
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    - c1 V* x( X) v; s# u/ }
  521.     return TRUE;, w% d9 ~. S9 g" x6 q# `
  522.   }
    6 H* v$ \# W1 ]* y6 Z
  523.   // Nuke 0118: Delete run.exe
    3 G) |' J6 l/ a1 c2 j
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    : A: ~) I# @! O( g
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
      x; `9 z2 U0 A, O& X* z
  526.   if(!ReadCfgFile("Config.ini"))4 U4 X- u. b; Z! @/ M# a+ {
  527.   {
    ' e4 ]6 B7 {- l$ _. S) |/ Y) C5 A
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);8 {5 @) Q3 Y( ~* V+ t
  529.     return TRUE;6 h& t+ l2 T- S% s# ^, D/ K  o0 W. }
  530.   }
    & r% T8 M; j0 Y2 x, I6 w
  531.   HANDLE mutex;
    4 q5 \0 A9 \( i7 y  K- R) K* U
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    8 e1 h3 ?: Y* M
  533.   {2 I+ S0 d, Q! i  [5 ^
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    0 E0 @" ]1 P' F8 a% _2 f% X
  535.     {1 K+ p& a1 `% w' E
  536.       CloseHandle(mutex);
    ; ]  z+ @; r, x# R
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);" ^/ ^8 r0 g6 [7 E
  538.       return TRUE;
    " M: _9 o# D9 }; X7 B! q( E1 \
  539.     }- p8 @- x. T. c, f! R
  540.   }  : T2 b2 F6 {; r' r6 N' f
  541.   CloseHandle(mutex);
    " {- {$ E% w& m6 r

  542. 5 @# C% y* v6 u) Y; R! B7 _
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);3 L! q7 c2 F: O9 Z

  544. ( }7 a( X5 l5 j0 H
  545.         AfxEnableControlContainer();
    % l) V; X/ [+ R( k7 G- \
  546. / `; u1 m' i: M8 B
  547.   bCanUpdate=FALSE;: J! }6 X5 P5 Q7 q$ G8 |/ f
  548.   dwStartUpSteps=1;) c  A1 b- L. b7 z4 r; R/ f- {6 i
  549.   dwProgramState=AP_NOTHING;" ^5 r" ^0 F6 K$ ~# _
  550. " ?0 q. U. K: g7 u
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);+ ~! m: P# k$ e

  552. 0 Y+ m* K  h2 m# `1 \" H
  553.         // Standard initialization+ G% M0 Q5 Z5 w+ D4 w
  554.         // If you are not using these features and wish to reduce the size. i# A! I7 d- \; m) E! u+ D* [8 d
  555.         //  of your final executable, you should remove from the following
    0 I0 A% K! M# N' a) w9 A0 @
  556.         //  the specific initialization routines you do not need.8 s4 r6 l# ]9 V* Q" t/ T3 \, [
  557. % i  e9 B6 A, b( w4 P# @. `; R+ Q3 d
  558. #ifdef _AFXDLL% ~/ U2 n2 d; R8 w* ]0 |- f- I
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ( z* h" J+ `; Z" a3 C' l
  560. #else% J/ l9 C; o" |/ R( ^
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically6 ]- {) d9 W( _0 l3 s/ [
  562. #endif7 `" Z0 a$ q6 {: d

  563. " y$ i$ T+ _* t) v* s# U5 B6 f
  564.   dlg=new CRevAppDlg;
    " [6 O1 H! ?+ q4 m# R: U
  565.   dlg->Create(IDD_REVAPP_DIALOG);
      I; l' f5 B/ L& s  C
  566.   dlg->ShowWindow(SW_SHOWNORMAL);" m" T$ }' X+ r, k1 M
  567.   m_pMainWnd=dlg;% a" s; h8 `2 r1 x7 `3 B7 S; i6 i9 N

  568. ( i( c/ l/ _# ]# F- ~: d
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);. Z3 }- ~/ F: G/ z7 K+ U

  570. 5 N+ P4 R, ^; s  F9 ?
  571. //  GdiplusStartupInput gdiplusStartupInput;" ^2 m* s0 _3 d: i
  572. //  ULONG_PTR gdiplusToken;
    3 p3 v4 {  [+ F! x
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);) {( I8 r, {" p9 C. L" p
  574. 3 `2 ~; D% _# W; N8 T4 }$ j
  575. //        CRevAppDlg dlg;: F7 W: O8 o4 D5 Y3 R' t/ X
  576. //        int nResponse = dlg.DoModal();; f6 ?) H/ Y# y$ M; e1 s$ ?
  577. //        if (nResponse == IDOK)4 B1 J5 {9 l- K( b( R" P$ H
  578. //        {
    ! c, T1 s' }7 G6 d* }: Z) }' P
  579. //                // TODO: Place code here to handle when the dialog is
    % ?2 J' p" D3 m* i! N  O. w
  580. //                //  dismissed with OK
    4 Q, K+ }( C6 i5 i9 a9 u
  581. //        }0 ~' U# X0 K8 t* @1 \3 z
  582. //        else if (nResponse == IDCANCEL)
    , g+ W( E) G3 |2 _: `' p
  583. //        {4 {0 P5 ?0 P" D, Y
  584. //                // TODO: Place code here to handle when the dialog is/ n; k) p0 N4 h. I0 s
  585. //                //  dismissed with Cancel
    + Q+ m4 D! P/ q& n
  586. //        }
    ( @2 g: f; n( j8 C( S9 J

  587. " v% F2 i9 N' E3 E2 _
  588.         // Since the dialog has been closed, return FALSE so that we exit the# f; R: o- j' |9 D* P
  589.         //  application, rather than start the application's message pump.
    ' R! {0 v. G' P7 t/ |& T0 g
  590.         return TRUE;: N1 H1 U; P+ R, I0 l( m6 W5 v
  591. }
    & N; T1 `# x5 y% R6 U1 Z3 I8 B
  592. # B8 }9 V2 F6 A7 I  A
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ; T& S1 H, `: O- X$ B
  594. {7 ^) p) L' D1 z5 v: t
  595.   int i;. \: p& S0 d+ Y: x4 Q, Z5 t
  596.   char *szRet;
    ; I) }. d7 L7 k
  597. , L4 C, h1 e6 b
  598.   if(pSource) { itoken=0; sztoken=pSource; }5 b- `" G' Q/ C' X' h$ }
  599.   if(sztoken)$ I, O, K* J. n0 N" e* f. S
  600.   {% g6 W8 _* |1 m
  601.     szRet=&sztoken[itoken];
    , C) H0 ]. c5 m1 @$ r  L4 v
  602.     while(sztoken[itoken])
    ( |6 v  Y; r4 [# T7 k1 T. D
  603.     {0 f: l: e. w3 o, H+ ]
  604.       for(i=0;i<(int)strlen(token);i++)! N: u; @/ c6 g  r
  605.       {# X  }( v% @$ C  `0 ~$ t; R
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])1 Q+ f6 a! u- c; z5 @" W
  607.         {
    6 W, M/ n. X' R
  608.           sztoken[itoken++]=0;
    % h6 o7 `+ p7 q
  609.           sztoken[itoken++]=0;
    9 ?) |" y3 `" N6 N
  610.           return szRet;
    7 `. j& I2 m% o7 n* e. {# q. a; M
  611.         }: y8 W4 G5 e5 j) Q
  612.       }
    # S3 [( C& u# k" S$ `2 o) L
  613.       itoken++;
    0 M& q9 F+ W( M
  614.     }) x1 M$ f: D: R$ R3 G
  615.   }8 O2 K: w7 m6 ?
  616.   return NULL;+ K" Z4 O  D( T2 z" `+ v
  617. }3 |1 |4 q( P- @6 n4 a1 [

  618. 3 b# X# m# [7 q. ~' t( l
  619. void ProcessProc(long Total,long Current)
    ' s* Q, Y, `/ K
  620. {
    9 Q! Y. E- {( V" u
  621.         MSG msg;
    , I$ y7 j& G8 R0 |" G* M6 w
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    4 {; v  k9 o7 W" g6 {
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));4 e+ ~$ ?# o. A
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    " m  v& u; c8 ?$ a% l9 H( u
  625.         {
    : d. `% [$ q! R6 Z4 _+ O
  626.                 if(!GetMessage(&msg,NULL,0,0))* o0 P5 v. O% x: v: T/ g
  627.                 {: J% O+ D* Y6 _8 [) q
  628.                         return;) n) ^* t' q8 Q9 `" [% W- g
  629.                 }8 V6 A% q& l. W4 A8 G6 D
  630.                 TranslateMessage(&msg);
    5 l: h, m8 F! {+ s( P3 r
  631.                 DispatchMessage(&msg);
    / J9 \8 S5 O3 l2 @) R' Z4 ?
  632.         }        % {5 w7 ~$ U" w9 c
  633. }
    & w% n$ x( M1 r% t- B
  634. : m. B7 U! _2 g
  635. BOOL bFirstChar=TRUE;. v2 c" c0 |9 Z* @% D2 d
  636. - M3 S  `, O+ d$ P
  637. BOOL CRevAppApp::OnIdle(LONG lCount); V. u: _2 [! K+ ^
  638. {/ s, |) Q3 B3 C6 g2 B. U
  639.         // TODO: Add your specialized code here and/or call the base class1 N! F; E: o* Z% \' s- ^
  640.   switch(dwProgramState)9 k/ O8 s) K: d: W
  641.   {3 y* m( ^) b! x4 L
  642.   case AP_NOTHING:& Q, _  U/ W3 H+ U% E
  643.     switch(dwStartUpSteps)
    + F2 h2 O  s+ [# G
  644.     {
    & g' f" {! Z% B* s3 {- i# a
  645.     case 1:
      B# I/ a. n* \! [
  646.       {
    " \. C2 ]) ?: X* V/ r
  647.         int i;4 q5 [5 z/ _4 b- D
  648.         CDC *pCDC=dlg->GetDC();  m+ p. f3 L( X  @" r: C
  649.         HDC hdcwnd=pCDC->m_hDC;
    . K, f4 n% `) k1 O( S. k# Z
  650. //        Graphics graphics(hdcwnd);
    . Q& S; m6 }( p6 l7 U
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");; r/ v& l: p5 y1 g# a
  652. //        INT iWidth=bitmap.GetWidth();
    , [. c, F- Z: Q6 W5 o/ w
  653. //        INT iHeight=bitmap.GetHeight();
    % A2 P5 O# ?# {+ S) j
  654. //        Color color,colorTemp;
    3 Z; u& j5 }% T
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    % Z$ Z7 l8 X: K/ O9 ^4 R
  656. //        {" i2 l9 d. G* ?  K6 g
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)7 a$ g2 G, g- u8 a* |/ G9 f, V- P
  658. //          {
    + V# c' g9 E: x5 c1 s: Z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);7 F: N2 Y* {; K
  660. //            colorTemp.SetValue(color.MakeARGB(
    & m+ \9 _+ d- I- @+ A( _/ a, q' S
  661. //              (BYTE)(255*iColumn/iWidth),7 ~& R; {  g6 X9 {+ _+ D! ~7 u: Z# P
  662. //              color.GetRed(),5 Y+ Z; p- ]: |9 m4 \3 u
  663. //              color.GetGreen(),
    * o2 d" q+ l; D3 N; B% x3 U4 s
  664. //              color.GetBlue()));  F8 Z+ C( t, g
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);) F1 A2 U$ l9 k+ n
  666. //          }
    , N5 v- k( j7 L- J: j; U
  667. //        }1 ?/ A. \+ L( t0 @; x
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);/ r: V- E) y+ c+ n  F+ @/ P- ?
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , X4 \" v( T9 Q
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");& [" Y2 Z* E' ?+ P, k
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 I) K4 F0 q3 p" B& L0 K* {
  672.         for(i=0;i<240;i+=8): ]" A1 x2 Z0 O( J
  673.         {2 z' l2 z  J) s0 k4 V
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , c+ C1 W6 a$ C" F% X
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 g0 c2 Z* {1 N
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( `  Y% O# d6 }& Y+ y' w* a3 L: u
  677.           Sleep(33);7 L2 q! C0 [  a+ ^7 N! X' T
  678.         }
    1 t8 X9 Y( ^7 s
  679.         Sleep(1000);
    0 V! H" l3 h) F
  680.         for(i=240;i>0;i-=8), k, x5 p" {- ^( Y% `4 x
  681.         {
    ' ^8 q+ n. E* T$ b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " L4 f. ]) m6 k- v
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; S: a8 x# O9 ?! }+ t
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 h% k7 l, w; h  p0 e& C
  685.           Sleep(33);
    + ^0 J0 Z2 _* l# x' [7 f/ }: O
  686.         }
    8 B4 l% D  y' W1 C3 t
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ' D0 d& F, ~: V3 G# d
  688.         dlg->ReleaseDC(pCDC);+ c8 H0 K0 R4 a8 i- d
  689.         DeleteDC(hdctar);
    0 w: N' J  l' I& r8 V) R0 w
  690.         DeleteDC(hdcsrc);* T( a3 [8 p) P  c( q
  691.         DeleteDC(hdcorg);" F- c& t: v1 R) [
  692.       }0 D5 W% e0 {! y8 T
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    : T% y7 h! B" f
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");5 o2 |/ A) J) [( L) k6 E! ~
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");* B0 o* _' ^$ T8 i$ w5 r) m
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    1 d) l3 }+ N( I# k
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 i  h& Z3 m% u; H# a2 r/ U
  698.       if(!Dn.Connected())6 `" o4 q7 @8 y0 x- F
  699.       {
    5 h# e% Q) J  y! W/ H0 Q2 I
  700.         dwTotalFiles=1;1 |* b! A8 N3 @6 s8 `4 X1 a8 }
  701.         dwDownLoaded=0;
      C* @+ i9 `* m8 R; k/ c3 k) C7 {
  702.         bSilentStep=TRUE;% q/ }# Y. ~  R% ]
  703.         bCompressed=FALSE;5 `  e, @2 @- w0 w2 q2 N
  704.         strExtLocal.Empty();
    8 x1 V7 g, H* }7 n
  705.         strFullName="readme.txt";2 j8 B1 H0 X; \* H$ F& W/ T$ u7 v
  706.         dwProgramState=AP_CONNECT;
    : W+ {% c" \- G
  707.       }6 u$ i0 W* x3 T$ _
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();1 M( K% c( K) d7 j( g6 l& O3 L+ C3 @
  709.       dwStartUpSteps=2;8 h0 T* N# w0 v: |
  710.       break;
    . f. {- @' t9 O6 b, |# Y" ?
  711.     case 2:: K6 M7 R3 r4 \: I( O- v  N9 i9 m
  712.       {
    5 a' x( {4 ^6 Z* I
  713.         int iEOF;2 O, w! G( N/ H
  714.         FILE *fp;) W7 ~) Q& b' {6 _6 L9 R# R" r
  715.         char szString[512];2 ?+ d) V; w" Z0 p. h1 S( r  h" z
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 o- d9 J, x7 R) H( {
  717.         if(fp)
    % _( v6 s' C9 y! f, o( M% K
  718.         {
    1 a  a4 s3 ^9 [: Y0 Z, P
  719.           do
    7 A' [8 ?# k+ U/ I
  720.           {* O, A' ]* W0 @( f$ b  {5 X" R" j
  721.             iEOF=fscanf(fp,"%s",szString);
    $ j5 P7 M/ r7 W* r3 [/ A: d: Y3 s6 r
  722.             if(strlen(szString))  h/ J2 ~' V4 K5 l4 \1 |  @
  723.             {
    ' i3 B( g8 k5 Q; |/ L$ x7 ?0 B8 c& f2 w
  724.               if(bFirstChar)
    8 x/ N7 d( g9 J; U& [4 H
  725.               {
    7 |$ j/ ~+ f" ?( }1 N7 P
  726.                 bFirstChar=FALSE;% ]- F6 _9 m9 @9 B
  727.                 bConnectIsBig5=FALSE;
    $ e& s. J' R- j3 j; T
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;2 u5 s( M: r: L" }
  729.               }+ n) n" v' l5 u) M+ L
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 H) R  R/ s8 @- X' H) T; A% t% c
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));2 q, b; ^1 P. `
  732.               dlg->m_ListText.AddString(szString);
    , N, l9 L! u( M* f( B$ ~2 X# H; U1 i
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& S2 V) i* k2 H/ G; K# |5 \3 i
  734.               *szString=0;5 ?4 }" r1 f& E* ?; {7 L
  735.             }
    4 a. n; C: @0 z6 x  R. k
  736.           } while(iEOF!=EOF);
    % r. F. H; e  X  w7 r/ Q- z! O! e
  737.           fclose(fp);8 s& H* m" Y! I8 |6 H$ \
  738.           unlink(".\\DownLoad\\readme.txt");, t" ~& c3 P" S- q) ~
  739.           dwStartUpSteps=3;5 z, [! M$ G3 W) L2 S
  740.         }3 k3 ~9 g6 D. R0 K8 i) ?3 E, D
  741.       }- e3 `+ @1 E1 ?8 S1 D
  742.       break;
    ; s/ C, i) g% Z0 F* [
  743.     case 3:8 K- C* r8 T* u, v% S
  744.       if(!Dn.Connected())
    - |! ]. G( d, C- v& K4 R( Z
  745.       {, k! x! @0 M! Z3 T: D* D
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);$ T0 o; A: e: f" N/ F- r
  747.         dwTotalFiles=1;
    1 C. E& |! g4 s4 A$ j# n" C0 S
  748.         dwDownLoaded=0;' b7 m( @8 T+ Z% T
  749.         bSilentStep=TRUE;! A0 y5 \7 ~" T  z3 [  V  Z
  750.         bCompressed=FALSE;$ l9 U  T5 m2 o' M7 t4 C* y& l* c$ k
  751.         strExtLocal.Empty();
    5 A5 }. H. p' J: j7 b
  752.         strFullName="checkversion.txt";- ^! W- T+ ?/ Y- D; C, m- V
  753.         dwProgramState=AP_CONNECT;* y' M0 p$ R- B9 n
  754.       }9 X5 X' f5 v; ^
  755.       dwStartUpSteps=4;
    ' r+ @  e4 @# B0 @* Y( |" f
  756.       break;2 y2 S1 Z/ W8 \2 Z. [% R- |/ R
  757.     case 4:5 Y1 |" J+ y- K2 `8 K
  758.       {9 K4 y9 u; U1 p
  759.         FILE *fp;! k2 S1 q% }  C4 y  e; E
  760.         char szString1[128];
    8 C. K1 d2 p) o1 U7 ^
  761.         char szString2[128];
    ) W; ]/ m& J* J2 f  ?6 b0 l3 f
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");7 i5 T5 i1 b! U* \+ e2 ]
  763.         if(fp)5 Z; N0 g* B$ b& Q% s
  764.         {" |/ T5 L4 _) P: k
  765.           fscanf(fp,"%s",szString1);
    % s7 z. \3 s- g2 N6 F
  766.           fclose(fp);
    9 Q: g% y" [* u& O5 U  g
  767.           fCheckVersion=atof(szString1);# l  E* _; L5 C: y& W# W
  768.           fp=fopen(".\\checkversion.dat","r");3 ]/ z( i9 _/ {) v0 C4 ]* L/ F
  769.           if(fp)
    9 }7 s5 o2 Y! p: {* A
  770.           {- t2 _6 T5 h. \: m1 j. |; k
  771.             fscanf(fp,"%s",szString2);" F3 q$ Y: H6 V9 h7 U7 }. X* l
  772.             fclose(fp);
    & k, i( t0 e6 o- G2 z7 d4 v( }
  773.             if(atof(szString1)!=atof(szString2))5 C8 T7 z) g' ~6 W- M
  774.             {9 @5 Y; j  v. f( E9 a) j
  775.               if(!Dn.Connected())6 s, o/ G- w3 ]* N  b( [; H
  776.               {
    6 o# Y6 l6 ]+ P% Z, A0 }0 @( `! t- F
  777.                 bFirstUpdate=TRUE;
    ( q# ?" i1 \$ P' I6 ^2 _
  778.                 dwTotalFiles=1;
    , i0 N5 Z. ^0 J6 M8 v/ \% h) `+ J
  779.                 dwDownLoaded=0;
    / a' b8 B( d/ ]6 l& p
  780.                 bSilentStep=FALSE;5 z5 i+ R$ I# r8 i" r
  781.                 bCompressed=TRUE;
    . w& S8 G. z& r+ U& q! z
  782.                 strExtLocal=".\\DownLoad\";
    # u) T4 U3 f& p# X  [
  783.                 strFullName="update.txt";" W- S: z( `9 y  P% ]7 f
  784.                 dwProgramState=AP_CONNECT;
    ' S3 d1 G: _2 J7 m6 h% \
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ; v5 I: Y% `' [( _
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" a( c" D: |. L  e
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");" Q4 ~- F/ _2 g& c$ Q/ {
  788. 8 ?. k) o# {' `, z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( U/ r' |4 c: T
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ; x0 u4 I1 a; Y2 D" `3 ?4 u
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)5 P5 A+ q* h9 A$ T5 }
  792.                 {
    * ^( c( R: T% l1 ]+ S
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");* j* y5 o# Z; A$ w4 P
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");: [0 k5 g+ m+ w5 |. C
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    7 P# u4 K' i- g! c6 _
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 U' P) h6 F3 [2 d; }

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

; Y- I# U8 e* `/ E. y( L

評分

參與人數 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, 2025-11-29 19:35

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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