CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
) x8 v2 n( h2 h+ M+ R( I$ z6 o
  1. / RevApp.cpp : Defines the class behaviors for the application.. m/ W; P' g6 v8 A
  2. //
    * a9 s8 j% V1 n
  3. , q8 M( I" @' O/ G! M( `
  4. #include "stdafx.h"
    - x1 }0 A6 N5 B* f- F* B5 V
  5. : D' f1 [. `+ F! f/ B
  6. //#define UNICODE& {5 S6 c" p! K. w0 N9 q. D1 q$ D
  7. //#include <gdiplus.h>) S  Z) `; ]2 C
  8. //using namespace Gdiplus;$ z* v) z7 H) A) P4 O

  9. 1 E0 p; @5 {2 p' {8 I1 Z, E
  10. #include "RevApp.h"6 ?6 \2 K8 j: i' T; e& G5 _# i
  11. #include "RevAppDlg.h"
    1 R3 O: ]' V9 b1 I2 }, F! U( B9 S

  12. 5 ]& D4 @7 ^  N! g1 U
  13. #pragma warning(disable:4786)" q% g, F* k2 Q0 P5 b0 `: P
  14. #include <map>- y  h# L/ h& D$ C
  15. #include <list>
    4 J% W" s# f  @2 S) K' F( @: ]
  16. #include <direct.h>
    / Y/ \+ W, r* ]( k
  17. % }* J9 F) \' g( @5 m: W
  18. #ifdef _DEBUG) C5 O) ]) r, E" `  {
  19. #define new DEBUG_NEW: [" j/ x- \3 _$ m
  20. #undef THIS_FILE  o1 l) n6 O+ |0 @/ ?
  21. static char THIS_FILE[] = __FILE__;$ K! f6 z5 \' F
  22. #endif% n' L* f; j" k0 `, v
  23. #include "SkinResDef.h"
    5 c* q2 M1 N& ]% k
  24. #include "ChangeBG.h"
    ; |  J& w1 H  C+ d
  25. #include "AFXINET.H"6 r' }5 U0 `4 p$ c  q

  26. / ~2 R+ U0 Z  v6 \' }; e
  27. #define TRADITIONAL_CHINESE 0
    0 l% e4 K, N, m" h% q  L6 b' w+ k
  28. #define SIMPLIFY_CHINESE 1
    ' p  Q- t0 r: j( |( O/ A7 x
  29. #define ENGLISH 2
    # v! D) F: i" j' c7 B" v( A
  30. int m_iLanguage = ENGLISH;
    4 t# y$ o  |7 ^; x5 S% C7 y
  31. /////////////////////////////////////////////////////////////////////////////
    % ~- G. ]8 v! Y3 h0 \& T7 E
  32. // CRevAppApp
    # h9 f* H1 e. Y. Z: U4 B! a2 S

  33. 6 j! g0 W5 z+ Z8 ~, z& U) J2 _/ C8 N
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)( G9 R) [& q, I
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    5 C/ x; A+ ~: b
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    / E% g3 Q* a% g' T, @, O% E
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!- ^6 t7 D0 T5 {! R9 T
  38.         //}}AFX_MSG
    - w: D0 x8 q. |. M. H- i
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    0 w* N+ ]  N# l9 u! N
  40. END_MESSAGE_MAP()2 J0 I. t, l' T  ?: u: g
  41. ( w! a( g! p2 y
  42. /////////////////////////////////////////////////////////////////////////////
    ' U) |0 A6 R* s% F4 X
  43. // CRevAppApp construction
    # l$ R+ t( ?! Q" V- H3 T4 A

  44. 4 i9 Y$ w0 Y2 i0 x+ m6 H( p
  45. CRevAppApp::CRevAppApp()
    9 h$ K2 H+ P; c
  46. {7 X5 p; }7 _" Q, u2 }
  47.         // TODO: add construction code here,
    - ]3 W* S% w$ L. n% ~2 g8 h: {. Q7 g
  48.         // Place all significant initialization in InitInstance3 j  t' r) }  t" ]' X
  49.   bDisplayIsBig5=FALSE;
    : i& ]( K1 _( j6 h- P  T7 F3 H& `
  50.   bRestartUpdater=FALSE;' o# [2 q  |8 S$ i0 T% P( T4 E
  51.   bFinishUpdated=FALSE;) X: i/ j- j# q& n  }" D. }
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    . O& d; ?& q# O" q
  53.   InitChangeDataBig52GBKS();
    ) K3 g: m; t8 h. B, I7 M6 _+ p9 Z
  54.   InitChangeDataGBKS2Big5();, N  Q) R  [/ w  z3 E
  55.         //1 X  F  |( m+ [
  56.         bClickRunExe = FALSE;
    / z$ c% |9 j7 l# H% x/ [
  57.         //
    " J9 H; ~# X8 R- g" [( \5 C. g
  58. }
    2 h( ]5 \/ I+ d! x( w9 T" B
  59. 0 N/ a, L4 |: A' \
  60. CRevAppApp::~CRevAppApp()2 f$ r* n2 G4 E* ~. Z
  61. {
    : j) n1 A2 E- G+ e. U
  62.         // TODO: add construction code here,
    / h& D4 B4 ?8 N$ `0 h7 H; v; m; C  Q
  63.         // Place all significant initialization in InitInstance
    + \5 }/ J- g+ h3 O2 _3 B
  64.   EndChangeData();2 O+ u9 P3 E1 n9 w
  65. }' u6 C- k% ~3 T* H  d
  66. 3 @! |$ }) @9 S0 W; Z% D
  67. /////////////////////////////////////////////////////////////////////////////
    : O# Z! ~, R/ @  Y% y- N2 U
  68. // The one and only CRevAppApp object5 r; V( W. q$ W& _% L7 ]9 w# ?

  69. 0 X9 Z; K$ }& Z
  70. CRevAppApp theApp;9 F" j& k( l- w9 Q6 _$ c

  71. 7 \, S- N  ~3 h; Q- _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    1 i( \& Q) ~# B, R
  73. {
    . l4 c+ u; B, Q" e2 @3 v3 `, Z
  74.   int iEOF=0;
    4 x) |/ g% x7 y# Y5 j
  75.   char szTempName[MAX_PATH];
    . y; b* F8 U5 Q' ]0 e( v( L. d
  76.   *szFileName=0;
    0 n1 }" h2 [% w- ^2 P( y" x
  77.   iEOF=fscanf(fp,"%s",szTempName);
    + `& C/ Y8 I5 Q( `5 [
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    3 d- ^# n- g, ?6 |. Z0 T$ H% l# M
  79.   {
    . ^# U$ v* p, [2 m1 Y& \! Q
  80.     strcpy(szFileName,&szTempName[1]);
    6 @1 z2 i5 B% k% C
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ! b1 v, a  b! }
  82.     {
    & Z) o2 @) |5 n. Z7 k$ U
  83.       iEOF=fscanf(fp,"%s",szTempName);- |: v4 K6 n/ @. [) A  f( M
  84.       strcat(szFileName," ");" r- n8 j' U" r8 U/ w; m5 N5 m+ u4 u
  85.       strcat(szFileName,szTempName);4 O( C& ?% z3 ^8 f
  86.     }
    ; c2 @; S* r$ T0 m3 I7 p3 Z( f- c
  87.     if(strlen(szFileName)>=1)
    : @* d( X+ J: y- z3 u
  88.     {% I" R& E/ E6 R( i6 J
  89.       szFileName[strlen(szFileName)-1]=0;3 F& R" x* i- S  G  k4 G. I! s2 M
  90.     }
    - o  e4 p4 e/ m5 r  W3 Q: s8 E. d
  91.   }
    - _) F; B" j& M5 W% p2 l
  92.   return szFileName;0 r* ?. F% V) L/ K3 g% ]
  93. }
    ! _- |, ]# ?! t/ b& w
  94. ( b9 E7 b( b$ C' w2 p1 @
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)6 J+ o# k5 T+ z/ Q/ A# q
  96. {) @4 E% u7 ]7 |8 \6 c# Y
  97.   FILE *fp;  X& m. |! I, J# c
  98.   char *key=NULL;. r' {: ?& P2 F  X2 d; ~
  99.   char version[MAX_PATH];
    : i; U, O* _& ~/ X8 S: k- P
  100.   LPUPDATEFILE file,olds;& x2 Q4 x" c& C* F1 e" }1 p0 Q
  101.   std::map<CString,LPUPDATEFILE>::iterator p;8 Y  x+ `; @5 K& ?0 h, P2 W/ j% N

  102. ) w. H& h8 S0 u8 K4 ?
  103.   UpdateList.clear();
    ( [7 K; l1 W9 h
  104.   UpdateFile.clear();
    3 B) f0 q  o: Q; X$ u
  105.   if(GetFileAttributes(filename)==-1) return false;+ |; B) s: i% E$ P* B8 N
  106.   if(!(fp=fopen(filename,"r"))) return false;
    % G. M# o; H- ~" Y" ]( t  c1 G
  107.   fscanf(fp,"%s",version);
    6 r, h& W+ g' |1 b
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    & h$ o* A  ^" L5 H- r
  109.   while(fscanf(fp,"%s",version)!=EOF)0 p% V) ~. |) O
  110.   {" }; P" ~* }! {% O1 F; X
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . q; k7 Z4 g' i* U" n
  112.     fscanf(fp,"%s",file->path);# |6 u! f+ ]4 t6 p$ Y
  113.     ReadFileNames(fp,file->file);/ t" @1 {' f4 L0 U* M6 e* U& c
  114.     strcpy(file->full,".");5 L5 E/ _+ _7 n. z$ n& s  B- A+ N
  115.     strcat(file->full,file->path);; {/ [) [& z/ y* q
  116.     strcat(file->full,file->file);
    : m6 `$ o: ?6 W; o( W( V" D0 E
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())) O$ `1 |1 a( ^' p$ F$ q4 N5 z
  118.     {
    4 M1 o! K& M) O, z
  119.       file->vers=(float)atof(version);
    ) E/ b1 i1 J7 H  Z
  120.       UpdateList.push_back(file->full);
    , H* x+ V6 w/ r
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
      D9 }) |2 J1 k" I% u+ t! j
  122.     }" [5 W# o' H. _% _4 U, X
  123.     else  d1 }, s( m' i/ s. y6 c6 _. [
  124.     {
    8 m+ L+ n! c! ~4 C* C: v) U
  125.       olds=(*p).second;3 t7 [, X; D) @& p& R5 _2 R: `7 }
  126.       if(olds->vers<(float)atof(version))
    ' C; G6 B" }2 H  ?$ N
  127.       {
    ! N" a% ^  w, ~5 ^
  128.         olds->vers=(float)atof(version);" P6 x# i/ ^+ {) |9 X- D! y) K6 l
  129.       }% ?6 H# ~7 s( ?; R9 w' `
  130.       free(file);3 A4 M6 U. W) @' p
  131.     }1 J; a8 [, B4 s- _
  132.   }
    6 k5 Y  V, Q. j4 y' V. ^
  133.   fclose(fp);
    . g" U' }' b: T- @4 m3 y2 U7 W
  134.   return true;- P, r$ j2 }! o# _) ^$ k: ]( B
  135. }7 g9 d0 `$ e- ~( ?- P  u  j

  136. & z0 a- w# h; M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    2 D# D' W! C0 H( s" O( j: I( s
  138. {
    ' u) V& u2 D0 X# Y% O% U
  139.   TCHAR  szFull[MAX_PATH];( |2 E2 ^( E+ o9 z5 z* O0 [
  140.   TCHAR *token,*inter;7 k9 F& `: Q- D) _* V
  141.   *szPath=0;
    2 D  E9 i% Q$ h+ m: _- ]
  142.   strcpy(szFull,szFullPath);
    - _; F' s; F+ a& s* p4 ~3 r. m+ M
  143.   token=strtok(szFull,"\\/");; c- q! V6 ^0 t0 W1 Q
  144.   inter=token;6 t; _% A  r" K
  145.   while(token=strtok(NULL,"\\/"))
    . e8 X5 v6 B- ?' ?" C6 |6 Z6 [6 x0 y( R
  146.   {2 D0 \$ x- V8 K5 l" W3 ^
  147.     strcat(szPath,inter);" t1 {& W. }6 R, U" P1 Y
  148.     strcat(szPath,"\");; H3 J" ~/ m( n5 A# j$ K9 C
  149.     inter=token;
    . i; R, N3 T+ w6 T
  150.   }
    ! q0 I3 N' s% |7 Q6 h& C
  151.   return strlen(szPath);+ U6 ~% y! O7 E& j4 i
  152. }  W2 _( R1 q. o

  153. & d6 h9 L$ C9 q7 r2 B* q9 [
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)- l/ e. r1 `  R, g! A' x
  155. {9 F8 n2 J& l2 W5 c
  156.   DWORD attrib=GetFileAttributes(Target);7 _) q- Q# k' V5 \+ k
  157.   if(attrib!=-1); w$ I/ `9 |+ B; J$ x1 a
  158.   {5 E2 [& k' [! v7 M* O, P
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))9 U8 u. V: k0 V" t. Y9 E" z
  160.     {# ^1 f" G$ S# \3 C
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    / n3 I4 D$ x7 r1 V' \0 R
  162.       SetFileAttributes(Target,attrib);- D6 P* L2 D# ^
  163.     }
    2 o& v; w& p! e9 l/ F8 Q
  164.   }
    - |, ]' Q: g% [8 j$ l
  165.   CopyFile(Source,Target,Erase);- J& K6 B7 `2 y: P2 N6 g
  166. }
    ' u/ m8 S6 W+ v" F
  167. * B- R% x" p1 v6 A! z& v8 A
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    # m% l4 g7 x  G: R. ~
  169. {* F  [& C; f) L% b  D
  170.      FILE *fp;
    * W' ?% _# C/ r* P: M
  171.      char  szBuffer[8192];
    8 ?2 j* @2 M5 ]
  172.   va_list  argptr;* ?. J% d6 V( Q
  173. ( \3 _3 f& A& ?
  174.         va_start(argptr,message);' J; W; k9 j& V/ v+ E& e. Z" V8 a
  175.         vsprintf(szBuffer,message,argptr);: z& z3 W$ Z3 h( u& H/ {
  176.         va_end(argptr);3 G4 d- V- k3 ^9 q4 E# O2 b+ f: _
  177.   fp=fopen(FileName,"a");
    9 k9 L3 m; P% W- F; n
  178.   if(fp)! i$ @# r, T, y+ u3 d! S% k2 D
  179.   {
    , c/ R( Q/ l# z2 K
  180.     fprintf(fp,szBuffer);
    % f0 u$ I1 p# O% H9 P. R6 M4 {
  181.     fclose(fp);
    $ i# x  d, c- C
  182.           _flushall();
    ' D0 r8 _* u% F: ?* m4 q
  183.   }; Z) A! J4 X% p- _
  184. }9 L) V0 H8 }) ]( \" {8 v" h( _

  185. 0 {8 E: R# v  n; _- d8 o3 ^
  186. BOOL CRevAppApp::Fclearf(char *FileName); P2 B  h' L3 ^4 B, l6 f' D
  187. {8 Y: p- P( a, K2 ?5 L/ h0 M. `' f
  188.      FILE *fp;
    " s0 R& w% d8 k' R: q8 z3 D& C+ j" y
  189.     DWORD  attrib;
    4 n8 D# Z* V9 t$ I( g
  190.   attrib=GetFileAttributes(FileName);; F  ^) k5 v/ Y% D4 J
  191.   if(attrib!=-1)
    " i+ Q+ h0 U% S7 O  b! }5 y* t
  192.   {
      K0 U6 @- m6 f# v; N' \% {) [7 v
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    / D2 Q1 U( B: q- R$ E# n" t6 s1 E5 O* y
  194.     if(!SetFileAttributes(FileName,attrib))
    4 P/ J" x4 t" }5 N3 h# g% l% k, d
  195.     {
    0 L9 b# q* Y& [% M! Z
  196.       return FALSE;
    / J# Q! s. T3 N4 I# a0 n& G
  197.     }
    1 k7 t( ^( r' o6 z! Z- V' m( N
  198.   }
    1 `+ C/ Y2 H: V# Y5 H% L1 {
  199.   fp=fopen(FileName,"wb");
    " L; k/ O4 n1 Q$ I
  200.   if(fp), W- c+ R8 }5 I
  201.   {$ Z' B  [: T% W
  202.     fclose(fp);
    5 r! {2 i- N7 l8 n
  203.   }% `2 I2 E1 x1 V3 f
  204.   return TRUE;
    4 M9 q9 d$ l. L
  205. }
    " e, v( O* G2 V" j
  206.   \4 E( p2 E7 y9 B( m7 w
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    9 S8 m" ^( Z* X( G3 Z: I/ F. X
  208. {
    , b9 a6 B- H3 P, S
  209.   char filename[MAX_PATH];
    0 ^+ T) t5 B0 c
  210.   LPUPDATEFILE file,olds;
    : E# y; w$ d% J9 v# O: K) D
  211.   std::map<int,CString>::iterator i;
    # q" M0 C, N* _8 ~! q" v6 z- B! ^
  212.   std::map<CString,LPUPDATEFILE>::iterator p;& [1 \" I" c+ N( r7 |9 M
  213.   std::list<CString>::iterator l;, b" x0 d/ O; m. U2 Z
  214. / O/ P$ `8 L4 \. d! F/ Q* U. f
  215.   if(bFirstUpdate)2 v, [5 k$ }, v" \+ r; l( E% g4 m8 O* K
  216.   {5 W' ^* |5 z$ q+ d9 E) O
  217.     dwCurrFile=0;
    : i5 B" T% s1 V! `+ Q
  218.     bFirstUpdate=FALSE;
    ) r. O5 f0 [0 ]& ?
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    % {! y2 g# G7 w9 u' v
  220.     {0 l( O8 f& ?& O) h2 U( x
  221.       dwTotalFiles=UpdateLocal.size();
    : G+ U. [( \$ w; g
  222.       dwDownLoaded=0;9 W" ^5 t' _% ~# p
  223.       bSilentStep=FALSE;9 e' y( h$ ]# }0 [7 U8 }. ^& s
  224.       bCompressed=TRUE;% v, ]& U) z! E5 C8 @1 R
  225.       strExtLocal.Empty();
    : _+ n# x3 `  y# w; }8 X/ K
  226.       strFullName=(*i).second;
    - F3 ~  s$ R# {7 N
  227.       dwProgramState=AP_CONNECT;
    $ y/ |7 Q" e! M
  228.       return TRUE;
    " L0 I( F& h. M9 `: s4 H+ z
  229.     }
    : i9 U* n% u. z) O. p( s* d- b
  230.   }
    # I4 ^; v8 U" t% r) [* y
  231.   else if(bRestartUpdater==FALSE)
    4 R$ M1 q& C( c+ I
  232.   {' p2 o5 t3 j& A
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())) V% R2 K5 _+ a9 S* _
  234.     {( a! ~2 q  z/ S
  235.       file=(*p).second;; @( ^6 d. w1 e2 [
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    3 s& r# l; @4 B5 i6 q: x
  237.       {) a7 A) b( \+ p* O+ L3 d4 s; o; V
  238.         olds=(*p).second;8 g6 ^- J8 K5 p
  239.         olds->vers=file->vers;
    1 O  K0 }1 [2 {0 A
  240.       }
    / q" ?" q: c% J5 E/ s4 G0 i& ^
  241.       else
    + l1 s5 Q9 c" ~, O
  242.       {7 l" W( s$ D2 H& L1 `) ~) d$ v. p
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 W8 r  `1 }: L+ Z' l: \+ H, R
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ( l7 L! W) k4 z- o+ }+ R
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));2 m$ ~! q4 D2 ]  Y" E. w
  246.       }3 u' O/ \8 A; P: L5 @" [% |# o
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# s" v# I& ?5 N: l4 a
  248.       sprintf(filename,"(%s)",file->file);! J0 G& J1 k+ v% S' |! p
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);$ O, _3 p4 C( e. Z+ p
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ' a5 f" }- G0 p2 O8 X  T, a  L
  251.     }* D6 [) R$ F0 m( K+ L
  252.     dwCurrFile++;
      J# k5 N- S' ^- l$ Y, E
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! x& n$ h, r2 Y- j/ S
  254.     {
    2 u! M' ^/ |" s& e, |" D0 q
  255.       bSilentStep=FALSE;
    $ b) J! E0 C( P1 Z9 _# B3 V' V9 R. K4 ]
  256.       bCompressed=TRUE;
    + I3 {0 B9 o/ f' M7 L) F4 b
  257.       strExtLocal.Empty();  }2 ^1 S. K; L$ E% ]/ {
  258.       strFullName=(*i).second;
    $ {$ y3 i+ R  H: e7 Y
  259.       dwProgramState=AP_CONNECT;
    $ f: S6 |  j/ J& K6 K4 u
  260.       return TRUE;
    " c% i1 e6 ?4 X4 K( q
  261.     }
    ! b, l" c7 Z( q$ f0 ]8 ^$ F2 l" J" h
  262.     if(!bRestartUpdater)
    % m7 r9 e- M+ o+ H" F
  263.     {" |; s+ n, U9 x9 I( \
  264.       int iCurrSize,iFileSize;8 G7 h9 ?) t' e) n# L; g
  265.       iCurrSize=0;
    % |" t: h: l2 p' K0 M8 R0 @6 M
  266.       iFileSize=UpdateList2.size();7 S0 P4 s6 k2 p/ _; V- |
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");1 v$ d8 n5 E  B$ f) v6 L/ \
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
      T4 E7 H* T1 M
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + B2 S" i. |3 l9 Y( A
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" L; F& f2 [$ w2 z9 A% n2 M
  271.       Fclearf(".\\update.dat");% }5 u7 U7 z" _! |
  272.       Fprintf(".\\update.dat","Bloodyf\n");$ E7 t# Q# \+ F" o" L0 l# U% V
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 H  U) ~) I. L! w3 K
  274.       {2 A4 z& x9 F, A* q3 o
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    $ X4 A' ^4 q# D/ g7 N+ {1 J
  276.         {
    3 P$ X! W; c8 j6 K" s4 Q
  277.           file=(*p).second;+ c( X5 V0 p4 k: M9 K
  278.           sprintf(filename,"(%s)",file->file);' d0 l  H( v. Z) Y; E. i8 G' h) L
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 ^% ~. u7 i6 E2 `. H& P
  280.           iCurrSize++;% n  l# C) h; [1 u
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    . a2 D- N. O% u* i7 u( V  n
  282.         }( w) K  d) h; b- C$ L: h' o2 `
  283.       }+ a8 c+ t% e, x. |  h. z  {$ b
  284.       unlink(".\\update.txt");
    ! Y$ J9 \7 {+ [9 h) |1 O
  285.       unlink(".\\update.tmp");
    . V2 O. t# H* X" X/ _2 o
  286.       Fclearf(".\\checkversion.dat");
    + [0 e& y& X1 K
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);" E' ~* V  j+ ~9 d
  288.       if(UpdateLocal.size())5 D; }# _! u: a: }8 K1 a
  289.       {
    0 M1 X9 f. t+ i/ F- t- D
  290.         UpdateLocal.clear();
    . m& J* q; h1 L0 _0 `3 H& `
  291.       }
    * M# y0 H, g- U, ~
  292.       if(UpdateFile3.size())- i* e1 o7 k" R+ g; G
  293.       {
    $ ^- q1 V' r0 v; [0 a) C# z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- r5 Q% l6 ^( o' i1 m
  295.         {
    8 D' ^! _2 Z8 Z( \
  296.           file=(*p).second;
    " o7 N: i$ T, Y$ M) @8 M& W
  297.           free(file);7 a# b0 b# k% P! }8 w
  298.         }
    # u, l& }2 _( N; a
  299.         UpdateFile3.clear();7 M) A2 y- a. M/ F9 X
  300.         UpdateList3.clear();* \# l$ j: z% [
  301.       }9 Y8 f. U1 `/ o  @( Z& |1 `' k- a
  302.       if(UpdateFile2.size())
    , i! ]$ ^) `" ?
  303.       {; h! O1 F1 R) |: c
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % C, |8 o9 j; P6 I" K( L- C' B
  305.         {
    - q: @" h# c4 j* z# Y* |
  306.           file=(*p).second;3 l4 x8 ^+ V& c; U
  307.           free(file);" s& f: @" m) f4 O8 ?
  308.         }
    + U  ]5 H) d3 P) h( e1 t# [
  309.         UpdateFile2.clear();4 n$ J# ]' U5 A
  310.         UpdateList2.clear();
    + ^" K8 @( ]" K
  311.       }7 p3 p# v* q5 Z7 Y) S% `
  312.       if(UpdateFile1.size())- K' V$ Y& o& _! G" o
  313.       {
    5 Y3 w4 K( ~: l8 d6 h
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + Q0 V) @( N; Y% a' {
  315.         {& R" v6 e0 F5 G  W+ O
  316.           file=(*p).second;4 w. @; H$ }+ N( F* u
  317.           free(file);& R$ {* u0 a1 _8 O
  318.         }
    ; I: {0 q' f  q' L$ e/ {: f
  319.         UpdateFile1.clear();
    " L# M- Y: I, a6 H, k- y
  320.         UpdateList1.clear();8 e+ ?  u7 y% Y0 m) X5 g) }. t
  321.       }0 I* ~. Z  A4 T" Y3 G
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));+ L. a+ n9 F" g+ i) j
  323.     }$ V1 a# b( R) ]/ }
  324.   }5 j" \8 n7 W+ \3 q# Y" Z
  325.   return FALSE;
    8 A3 A! \* k# T9 @% K
  326. }
    / U& B, w' R% i6 c8 D
  327. $ K6 Z& F7 z$ v9 P0 P
  328. void CRevAppApp::ClearAll(void)# |, {2 `0 {, _- f& Y
  329. {
    : B& a- t# {' f0 a
  330.   LPUPDATEFILE file;
    4 i* D& S( Q% t6 c: f: b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;" ]% M) J1 i/ U# V( r" W
  332. . W  m% L, w6 X1 Q/ B# R; V
  333.   if(UpdateLocal.size())2 w# {6 N! k4 u3 ^$ e/ t3 V
  334.   {, i# T; p0 o( m: G6 l$ b: k/ V
  335.     UpdateLocal.clear();, e* A+ ]8 Y; j2 G
  336.   }' p' [1 F; N: u; b* ]- O
  337.   if(UpdateFile3.size()). R+ P& ^/ `) X! U
  338.   {. d4 I" R, {! I- w$ i% P! X, o
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 L9 q, m4 K* A5 x: a
  340.     {
    6 \* f; n$ S4 I/ w
  341.       file=(*p).second;
    3 ~; u4 ^0 a( O+ g* d
  342.       free(file);5 V/ l  w- V/ @$ j5 {
  343.     }) F, b! C7 w1 q) Y  c! H' F
  344.     UpdateFile3.clear();7 q7 Q! {" q: ^5 d4 N$ K
  345.     UpdateList3.clear();
    0 e) g6 e, a7 i: n6 A
  346.   }! s3 F# L( s9 |4 ?5 [
  347.   if(UpdateFile2.size())
    " l% p. H$ ~' C  F/ Z' V
  348.   {3 H5 o' b! o/ V; y# C+ X; g
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 e6 e* Y8 X, W) C9 G, @
  350.     {# E+ [' p' j+ h* |: @
  351.       file=(*p).second;/ i  [+ s: A/ o' t3 \
  352.       free(file);
    ) j* f# e9 s$ G) l% L' z4 p
  353.     }  K/ S7 _: z6 h$ D- O1 L5 }
  354.     UpdateFile2.clear();- ~7 u6 P+ `% v- E
  355.     UpdateList2.clear();9 L1 y9 K# R% R# Z# i2 Y  l
  356.   }
    7 P$ {& C; e$ ^( T+ L! d
  357.   if(UpdateFile1.size())
    + F7 T, {6 R7 C
  358.   {
    ) F+ W+ }6 Q, C  Z! Q# A$ G+ u  @$ W
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 R% [& W: o; \
  360.     {9 ^: Y' r: t7 G
  361.       file=(*p).second;
    8 ^! o' Y/ H) j0 I1 N
  362.       free(file);( J: o+ x$ a8 C, h; U& r- p1 |
  363.     }
    6 ^  q6 |4 v6 c1 h& P- j' ^! @
  364.     UpdateFile1.clear();+ ~: S8 w/ c1 h, t( B: \
  365.     UpdateList1.clear();
    . h1 a% y) q. V
  366.   }
    : F/ s) V7 i5 f  d2 @* v
  367. }  8 w( }' {3 _, ]/ Q* J7 m$ C* ]" u9 k
  368.   & @9 o( s0 M6 h1 a4 C$ G; x# l
  369. BOOL CRevAppApp::CheckLocalVersion(void)3 x: H: ?( t! X
  370. {. {: o" {9 X# z5 @/ l) Q4 Z0 F: o" z
  371.   int c;
    * s6 L2 \4 M7 v2 \$ s3 C5 k5 e
  372.   LPUPDATEFILE file1,file2;
    8 a4 K9 Y3 X, a8 J& ]8 d
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;5 C1 @3 k4 U. ~
  374.   std::list<CString>::iterator l;6 B  `5 C1 }4 f6 h! C
  375. 7 t' M9 V! L0 s4 f; j; D0 V
  376.   UpdateLocal.clear();* r2 x4 R! x8 Z/ \, O, k% N5 b
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 x4 ?% K' v  d) T+ `( y3 s- X, C: g3 b
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ( ?8 g( S7 L- Q1 D3 [
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);. y3 o5 `0 {; E0 D4 r4 C1 r
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);7 G# |- U8 `# U  t
  381.   if(UpdateFile3.size()); u& @/ j" G2 m1 q8 y# R8 o
  382.   {
    & J3 l+ u, l6 N: N: y" S3 Y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)- T) S+ y' c- R
  384.     {2 z7 |3 @) C( a% {9 y
  385.       file2=(LPUPDATEFILE)(*i).second;4 [% }: ?- W0 t: {) z1 W
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 u+ N9 {9 n0 m& H3 b( B( b4 Y
  387.       {
    5 I: u9 k7 `0 O
  388.         file1=(LPUPDATEFILE)(*p).second;
    - a+ G" s9 M" _1 C  b. h
  389.         file1->vers=file2->vers;
    5 E' `  ^# Q' T7 s+ T! z, t  d
  390.       }8 T: z# ^+ `0 \  T
  391.       else
    8 @& C* I0 Y5 \! d
  392.       {0 ~1 k) L0 a9 b
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- o- o4 x2 ]/ k8 C8 k
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - z" ]0 `5 ]; q0 n
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));2 |0 B( f& F& b2 Z1 o3 W: S
  396.       }
    5 ]* v4 y5 g* s. E  m& _
  397.     }5 C* u! s( f3 U: q# [% q
  398.   }( B5 ~4 Y8 D: y+ ~- w: y* \
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)6 T  q4 b0 n# q7 I2 N: f# j
  400.   {
    5 ?/ C( |) u" |& R! d
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- T# ?8 {4 r& {( E: R
  402.     {
    ; F6 Y4 J$ b5 N
  403.       file2=(LPUPDATEFILE)(*i).second;
    - a: B$ ~7 L; _2 H% H0 d2 }
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 x- Z. M; d5 [. W
  405.       {+ F' t3 L3 D. o, P+ W5 p
  406.         file1=(LPUPDATEFILE)(*p).second;
    + b4 r& C& `$ e& n  ]. H* b7 M
  407.         if(file1->vers!=file2->vers)) S5 ?: p: x( C7 U6 ?; d
  408.         {! a  m0 J  h5 J
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 b: c+ ]( P, [& X# x' Q
  410.           c++;
    & g4 M# C: O% Z7 @
  411.         }
    ! e  p( z' o' o- Y
  412.       }7 ^2 @& `& }# ?
  413.       else
    ) S; f: |+ E9 P
  414.       {8 s+ W8 u3 u7 {2 @. c  z
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 |* O+ o0 l& S0 E: Y! T, o. A
  416.         c++;
    8 K0 `. M4 p' h" s# O
  417.       }
    : t0 i& d1 Q; C$ g- x) X
  418.     }0 Q- `  s0 Q% `6 {- p
  419.   }! G; v* M4 m& e
  420.   unlink(".\\DownLoad\\update.txt");2 E( `  E* d( V9 d
  421.   if(UpdateLocal.size()) return TRUE;
    8 r* u& b8 z: g+ E
  422.   else                   return FALSE;" x9 }0 m- e* V3 q. _! X* z
  423. }. O  F* Y$ X- o; O8 t

  424. - p$ k* k. E% a& ?
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"% q7 M0 s$ G4 U
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"3 r- V2 C$ @  u, H5 w) F' b. I) \
  427. * W& f! E) L1 R
  428. 1 s" Y# N# B2 {  w( g" l& u

  429. * ]: E$ V( d9 C+ }+ n0 `5 S
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ u8 H2 D; Q9 ^! P& d4 H6 e
  431. {8 Q7 a. Y( d$ n$ \4 R, e
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;1 z" |4 s- @0 [3 j4 q/ M# E0 G
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& K5 `/ d8 A: z) e
  434.   {
    ; `7 _( O+ ?" y( [+ K9 B3 H5 A
  435.     char szLanguage[50];
    . i0 |- [: D' L% k1 v! U+ d' U! h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 |/ c5 H0 r9 e
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) j+ k' W& p2 s
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) F. P) k4 X" Z6 [
  439.     else                                   m_iLanguage=ENGLISH;
    $ C% O, k4 L% L4 k/ ~
  440.     char szRegister[100];
    * D* k- P. [1 ~: O
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");3 w" b; I; G7 D7 x
  442.     strRegsName=szRegister;8 z/ a: \* T3 G7 I& p% t
  443.     char szPatchURL[100];% {& y& e! e& W; d/ j+ _
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - V$ |$ ^2 F- W# P
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- Q9 P5 B2 N# ~, W& U# P: |
  446.   }
    $ _0 y; @6 {  |6 t$ t3 ?. Q4 H$ Z
  447.   else7 a& v- n$ e4 R4 E. I
  448.   {" ^8 P( O- B- O, }: r1 _, L% w/ R- S. l
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 t, B0 W$ d' R4 x* B* m
  450.     strRegsName=DEFAULT_REG_URL;
    " I# f0 E: W% z; @- K  I! S5 y9 [
  451.   }* V, \: R) P# V  m- _
  452.   if(GetFileAttributes("hosts.ini")!=-1)
      _$ S6 A/ c  a# F% ?
  453.   {% z2 M- c6 f3 Q" r: n  z# k/ U
  454.     char szIP[50];
    9 a( V: N, e4 S3 Z$ P1 C* w
  455.     char szDIR[300];, D+ J4 E7 m2 L1 I& }) P, X# s3 |) [
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    + M6 q; I1 O6 U  i2 z$ L4 Q
  457.     {4 ]1 |# ]" r8 D5 b$ i
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");" M1 f; }! z" o9 q) G; _
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");& Q! S8 E/ u5 i8 C( z: i
  460.       strHostName=szIP;% J3 T$ R4 V# \! V: V
  461.       strHostPath.Format("/%s",szDIR);, c- n8 o( I" _2 G/ C
  462.     }5 _: o* D# d& n& F! X1 k- T
  463.     else6 _0 ~. {# J/ T6 P4 y
  464.     {/ [* x4 e/ p- Z' R
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - V. q2 H+ H; }+ I
  466.       {
    0 f5 m: L  l; d  W- L
  467.         char szLanguage[50];
    6 H( `6 @  a% I9 @4 o
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & C7 Z5 P6 ~7 M( b1 t/ ^7 i7 V* X
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# [/ Q- K( u# A; @( D3 Q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " Z# W( I# b3 a9 X3 o4 Y8 h
  471.         else                                   m_iLanguage=ENGLISH;2 u8 k, `# B& D4 m" f% j
  472.         char szRegister[100];" |! i1 z2 B, y4 V) ?; d$ I9 q# f/ X
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% A6 a4 R3 j$ }) q* S4 e
  474.         strRegsName=szRegister;8 l, u2 M$ v: i# U
  475.         char szPatchURL[100];
    , U: u0 O$ l; c5 G
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , O0 F$ ?. c* d% N1 h! |
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , M$ ?/ ?/ C3 A5 F* n3 w4 x
  478.       }
    0 v) |. n2 X) S; ]4 c
  479.       else
    6 P3 Y0 e# Q, ^; K6 H. ~5 P+ ~
  480.       {
    ( p% f7 Q+ O+ Y3 Z) i( C
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ U) Q& [/ l4 Y
  482.         strRegsName=DEFAULT_REG_URL;. `4 x  Y" a) R5 M7 }6 J6 m
  483.       }
      f9 D. p9 @  k2 B
  484.     }! y/ |: T; ?; B' h/ Z6 L
  485.   }
    9 a& ~- s5 s9 C% k
  486.   return true;
    $ a' r! c! _! }6 U* Z
  487. }
    . Z, q# P. z5 g0 e0 m

  488. " U6 S# l- G/ r7 H$ o
  489. #include ".\ZLib\unzip.h"- z( \9 J, [* E/ d
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    " `7 G! D" g* u- F0 ?$ ^$ V7 S
  491. /////////////////////////////////////////////////////////////////////////////
    ; m( b$ q3 o4 F; a3 }9 Y6 N
  492. // CRevAppApp initialization3 H! M3 ~( t4 A

  493. & i5 K, ?6 A3 O8 ?- y7 T8 b5 ^
  494. BOOL CRevAppApp::InitInstance()
    5 A5 H/ Z8 e$ W5 O8 D: `5 j
  495. {. \% J& d; X) v* U4 D
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    # k, M  R9 S0 ?1 ]
  497. * e0 j; h! O% D
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    & w/ a- F3 Z) n0 i
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    1 d! H; }, [1 N) g/ N7 j
  500.   {
    7 P, |0 t, @% @: S' e3 I
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");3 k* O$ l' U% {7 i7 ]' X
  502.     GetPathFromFullPath(szPathTarget,szPathSource);9 W6 U1 k  p7 s" ^* N
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))+ V2 T$ D* f8 w1 ^
  504.     {
    . h5 t; O$ K' D, x, d- C: T
  505.       strcpy(szPath,szPathTarget);- A" _6 ^6 y2 n& r
  506.       SetCurrentDirectory(szPath);8 J9 e( J4 t( p1 g0 e  S
  507.     }
    " G; Q& O( b, \% @  N; }
  508.   }
    5 y8 K/ e+ f" R+ ?, N0 z$ c1 }
  509. #ifdef _DEBUG
    ( K1 ?% P4 ?2 F; }
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! O( W# X" Z* A' ]: g% I2 _
  511. #else& ]  ^# a: Y8 _- Q5 V
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * `1 q. p/ Y' O
  513. #endif0 D3 b7 M0 w6 k, W; I
  514.   {
    * C3 k& }, ?& C0 S, n5 v" N
  515.     char tempFileName[MAX_PATH];: X  h! D3 U) p4 }
  516.     strcpy(tempFileName,szPathSource);0 k. M, S8 }+ w; c2 E% J" x
  517.     tempFileName[strlen(szPathSource)-12]=0;
    + Q. \- ]. Z- H$ P( h% ]* ]
  518.     strcat(tempFileName,"\\$CSUpdate.exe");% D5 G5 ^7 P; n, x2 w4 _
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    - a+ m8 q  E, D9 X
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);* {; u: e( {, S6 S
  521.     return TRUE;
    4 D. I0 k2 V! i1 P' w
  522.   }. k' [: |( H+ W8 Y( D+ @- ?, \" F1 V% Q% \
  523.   // Nuke 0118: Delete run.exe
    " i6 C% y3 P8 e! t
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    0 U2 B6 U6 s! \1 ^
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    & P' m- x2 i  r9 i4 z
  526.   if(!ReadCfgFile("Config.ini"))
    3 r0 E( ^5 y: L
  527.   {9 @+ u( \% O/ j, f
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    6 p) y& T; m- c- V# [* l
  529.     return TRUE;
    / ?. G- y/ O4 j6 r
  530.   }
    0 z) Z9 o8 d# e: o
  531.   HANDLE mutex;) b$ u7 ^% [% u( m' }1 a# q0 f. x
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    6 S' I: A/ Z0 @' U* m2 ~
  533.   {
    8 i( w  {8 e$ u: o8 q1 l
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 _* n3 B9 w4 X; w0 W
  535.     {9 Q2 b' k, P3 r- l
  536.       CloseHandle(mutex);
    / K8 @: U3 \% j+ L( \8 _' X
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);$ ]% r$ c) L$ b
  538.       return TRUE;
    / r$ u4 ]* {- Z& Y& u, N* l
  539.     }
      a' c2 D. b9 j  o7 W2 K" {' [
  540.   }  
    ' Y- Z+ ^# w1 Q. D  s" y4 q% S
  541.   CloseHandle(mutex);
    3 f" y7 I9 {" E, }* @) f* a2 F
  542. 9 W, x! \# v! m
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    . u$ [& C5 X+ E  E$ s! }6 p
  544. + b: b" I7 D* [
  545.         AfxEnableControlContainer();% S# s5 I. s" i) S1 W" C0 l
  546. 0 i/ L! z$ j+ d5 {
  547.   bCanUpdate=FALSE;
    ) [: G8 g9 a$ S2 @/ u6 a1 Y
  548.   dwStartUpSteps=1;
    3 L1 F& [! @( o4 F/ q" G' c) W
  549.   dwProgramState=AP_NOTHING;1 I5 @% o2 j! W, Q

  550. 6 n% E6 c1 `& i4 R. T" O
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);+ H7 t% {) C5 E

  552. 9 L* {6 H8 z0 T# C& L+ J$ A, F
  553.         // Standard initialization
    ' j8 J) B) S6 p" V; J8 B" B
  554.         // If you are not using these features and wish to reduce the size
    % X0 M  F9 L0 M5 D& w
  555.         //  of your final executable, you should remove from the following4 E4 ?' j, k9 I% D+ t6 Z7 D1 r
  556.         //  the specific initialization routines you do not need.
    ! `, d: j) K; ^
  557. . ^6 d3 m* k* c9 o# G
  558. #ifdef _AFXDLL  c7 G+ u) I1 }" Y5 ], A, P
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL+ j3 b! @* E( t; F2 B
  560. #else' {' U6 a+ _+ ^9 h9 p
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically5 P* z1 n* C2 I; m( O- r
  562. #endif
    ( n% x, a! v* D' y: |

  563. 2 m  t  a+ E) K6 k5 p1 A+ _
  564.   dlg=new CRevAppDlg;
    ) P. m/ ?) D/ O1 p, q
  565.   dlg->Create(IDD_REVAPP_DIALOG);/ I' r/ W$ m1 @# j* o; h/ C% c
  566.   dlg->ShowWindow(SW_SHOWNORMAL);/ m& H  r: m4 N0 g# J, j% }! e
  567.   m_pMainWnd=dlg;
    : |' i$ A" m& @0 ]

  568. + i3 C3 ^; ?6 l1 t  J
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);) g; h9 `" b# r7 S& Z. |7 H# u3 v/ X

  570. ) X; e( s- K* d% ?+ S2 K
  571. //  GdiplusStartupInput gdiplusStartupInput;
    % c# S6 `/ H- T
  572. //  ULONG_PTR gdiplusToken;6 o" A7 B9 r1 J: G: p
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);+ w% K8 O  c4 y( r! q6 s

  574. - @5 p1 y# m/ u* O% d
  575. //        CRevAppDlg dlg;- X; j  D4 j9 T0 b, t- j
  576. //        int nResponse = dlg.DoModal();. a5 n% I6 U; L6 J0 ?/ I
  577. //        if (nResponse == IDOK)
    * V% F3 ]6 A3 v# ?: w; h
  578. //        {
    & e5 {; r& ~0 {% u: ]( z. f
  579. //                // TODO: Place code here to handle when the dialog is
    6 B: _/ b1 `! k* S0 r1 s
  580. //                //  dismissed with OK
    2 d1 d, b' K( u. z
  581. //        }3 S+ F5 q, B% [. j- o" o! B) e- \
  582. //        else if (nResponse == IDCANCEL)
    ; g3 |6 }9 H! }
  583. //        {
    : Y( m/ B0 `6 ^% ~
  584. //                // TODO: Place code here to handle when the dialog is
    7 g/ s2 n& ~8 T" L! c- C
  585. //                //  dismissed with Cancel
    2 W( b/ o% v- E: h
  586. //        }
    6 x9 @/ Z2 V" Z3 O
  587. ) h2 R- v" ]1 Q- R& q- w
  588.         // Since the dialog has been closed, return FALSE so that we exit the2 j! o: q1 s% D& K! F/ l
  589.         //  application, rather than start the application's message pump.
    ( F. V! B# j  o5 R
  590.         return TRUE;
    % ]5 G! P! v. Q2 |
  591. }
      m: k6 O6 H- i& I4 h- V: h

  592. 5 j' Z$ S8 W. V5 P
  593. char *CRevAppApp::strtok3(char *pSource,char *token)# X8 Q. [+ l! j
  594. {8 [6 {) l! s  N
  595.   int i;# M! r3 E: T2 ]. {+ A9 k7 l
  596.   char *szRet;
    : t# v  m' F5 |5 x

  597. + \! r" N4 Q; B: K( b: ?
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " a" O( w" A7 V2 x, G  {. k0 e
  599.   if(sztoken)/ d& I( V( ]  Y: P- A
  600.   {
    7 m" ~# @( K4 [. d  S$ M7 z
  601.     szRet=&sztoken[itoken];
    ! W% y- ]% ~. K; T1 E; X! b
  602.     while(sztoken[itoken])! G2 W% G: S! D9 j' N8 U- m8 `
  603.     {
    & a- _# N, [8 p' |2 u/ v
  604.       for(i=0;i<(int)strlen(token);i++)
    6 ]  W( z, ]1 v2 l
  605.       {" ^$ c4 ]  k7 K: f/ q
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ; p2 g6 k. W- _0 e1 S. K; M6 `
  607.         {% g. I5 l# t) [( [9 X5 z
  608.           sztoken[itoken++]=0;
    8 S2 h  m( ~5 I( ?% a
  609.           sztoken[itoken++]=0;
    " Y7 O. T; A/ g8 j0 P
  610.           return szRet;
    2 B  v$ L: J% O% ]; C# S, n
  611.         }
    , [1 U- r1 ^! y1 p' I
  612.       }
    $ T0 l2 _& S8 I! m$ `* X3 p1 u
  613.       itoken++;' P9 w0 ~  U" }% s4 z
  614.     }9 Q9 I, j9 b$ M: s  u
  615.   }( E) q, F, E! p  f1 Q8 l! z2 d
  616.   return NULL;
    . @: ]; Q* [9 V; Y8 T
  617. }/ U1 {5 g3 R, P  b

  618. 8 u6 W2 J3 ]9 d  w
  619. void ProcessProc(long Total,long Current)
    5 }/ ]8 A' Y' t( D. p* Y
  620. {
    % D/ z: h# H  B- H$ m( f. u
  621.         MSG msg;
    ( e2 Y& I6 s9 U5 X( q" M3 Z
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);3 E% c( @3 e* H# @) a6 B9 {0 _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ' i( m* _" d- G/ j* i) w" W+ @
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    6 a, E3 o0 G) k
  625.         {' K4 K& z/ Q/ m+ P
  626.                 if(!GetMessage(&msg,NULL,0,0))
      @. m" F% Z" @3 u9 a4 d
  627.                 {5 I6 F+ Z; V" ]; J
  628.                         return;
    + R4 z" [, _4 D4 G4 R
  629.                 }( ?. W2 e7 l9 \
  630.                 TranslateMessage(&msg);$ y2 B$ e. p! k. ]0 ?
  631.                 DispatchMessage(&msg);
    * V: T) s- s$ {; \" L% Q
  632.         }        / D9 B: \- ?9 ~
  633. }
    / M0 B( Q/ |2 A1 V3 O7 e4 k
  634. & X0 }; h* r, `, w& G6 e, f- e3 s2 ^0 j
  635. BOOL bFirstChar=TRUE;5 y- T2 z* p8 R- l$ D3 @/ h

  636. 3 ~. _: F8 F) W
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ! L& y7 p; `: r5 v5 o+ t- V
  638. {: F& j; h5 i" h! L- r" \8 F
  639.         // TODO: Add your specialized code here and/or call the base class6 ?" j8 G$ }2 w0 j5 m: J
  640.   switch(dwProgramState)
    % \4 ]5 y$ [  K) W
  641.   {! J8 l# D. ?/ i. L. I
  642.   case AP_NOTHING:
    5 V. l2 h2 r2 ?8 G/ D3 L
  643.     switch(dwStartUpSteps)
    9 F) S! q" e' E
  644.     {4 k# J. S. Z$ l) C+ P
  645.     case 1:$ `/ ]% w2 q0 \
  646.       {
    ( }. m. O5 j0 b0 R2 H8 f
  647.         int i;, I1 D; n/ v2 w7 m+ E1 B& a
  648.         CDC *pCDC=dlg->GetDC();
    & k: U6 `: ?: m) g( W! g
  649.         HDC hdcwnd=pCDC->m_hDC;- |4 n* c3 |9 C* e, W
  650. //        Graphics graphics(hdcwnd);
    % O% M; J! d; `9 K; T' n
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    % U8 ?2 C7 U' c6 R) {
  652. //        INT iWidth=bitmap.GetWidth();
    # Z/ [% x9 e. u3 Y$ O* J
  653. //        INT iHeight=bitmap.GetHeight();* G  e, j; [# |# m; D  j
  654. //        Color color,colorTemp;
    - @# p+ `1 J4 e
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)+ X* ~/ b/ j; }, i
  656. //        {
    1 h# \; n+ E/ i% A' d3 Z8 Y0 F" `4 j
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)5 A6 g* |3 d; `
  658. //          {
    # Y4 m! R% T- }
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ' v" t$ d" W0 t! J$ _* @7 ~4 W
  660. //            colorTemp.SetValue(color.MakeARGB(
    ' c: f0 p( ?4 S; I$ t) q
  661. //              (BYTE)(255*iColumn/iWidth),
    " H7 K& E3 u5 S6 A* _# F' c
  662. //              color.GetRed(),7 K$ V1 H* m6 G+ L
  663. //              color.GetGreen(),
    * O; f9 O+ O- C) ]
  664. //              color.GetBlue()));! E4 X+ D; {0 m- ^# f
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);, i$ k0 n% X; s: S/ P  d' r( E
  666. //          }
    9 \0 @( j' ?/ u. Z) Y: X
  667. //        }
    $ u& A; A  D  _% `0 e" u
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # ~5 Z$ N9 r9 _0 |' z; d
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; V+ K, y3 X; w, q9 C1 y- Q+ ?
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    + n$ `9 T$ p7 x! W4 }2 C8 A* i
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- X, T% W) m' J& u4 c9 L: f+ e& y
  672.         for(i=0;i<240;i+=8)1 I2 p% [$ p1 u4 D* z' j8 C
  673.         {
    # T1 D3 a/ v! m/ D
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ f$ Z# [- V7 |, a1 ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 _: B8 n) _4 M% d1 T, H
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 v3 w* t: d5 `& M
  677.           Sleep(33);" m: T. r7 s: ?+ y# {9 Q6 _, t; [3 R
  678.         }# b$ |' j& M' H5 S
  679.         Sleep(1000);
    9 o2 X$ ]8 H. s% _/ I8 h: X' Z
  680.         for(i=240;i>0;i-=8)
    8 V4 S3 ^; B) g9 f
  681.         {
    2 F1 p% C& u9 A. k
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 ~4 n9 H! ]% y
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 F- D0 Y0 J1 [9 P6 Z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' ?) N& F- j8 s) _6 W
  685.           Sleep(33);
    ( Q6 ]" l6 s1 i$ e  c+ Q" K" z
  686.         }; C& u$ N9 ]  e/ ^, C* Q( e
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    - ^1 C2 J: {3 r3 t
  688.         dlg->ReleaseDC(pCDC);3 d) l2 f" `( ]* |9 Z& F6 J" C
  689.         DeleteDC(hdctar);
    / F/ ]+ R" x9 Q6 ]3 h
  690.         DeleteDC(hdcsrc);; i9 T; G0 T6 T4 c" i! G$ U9 C
  691.         DeleteDC(hdcorg);6 a+ W1 K" ]  E% B! i- [! c
  692.       }4 ?6 E1 t1 ?* w
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);, j) J1 Z7 ?  [9 i2 ?
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    5 e3 Y  S- t  ~+ b5 Z* A
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");/ X# |9 x6 S9 m  V
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");' `6 c$ z+ ^. u# N
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 F1 _1 K) ~- P. ]- K% L( H
  698.       if(!Dn.Connected())# \& s: {& A; ~9 u3 u$ q# h( I/ j
  699.       {
    ( J0 U/ G1 P6 o( D% G+ ?
  700.         dwTotalFiles=1;; u' |  @* F4 L/ `) }: H9 r" T) G' t
  701.         dwDownLoaded=0;
    + O; e" k. C; _  K! G
  702.         bSilentStep=TRUE;
    , v. v& I$ G; ?
  703.         bCompressed=FALSE;
    ; g) E4 X: e+ P3 y% s0 S
  704.         strExtLocal.Empty();4 a/ |; \0 \7 O/ A) E
  705.         strFullName="readme.txt";9 O8 D. J! T$ ?8 v) b' h
  706.         dwProgramState=AP_CONNECT;8 Q: j6 r6 S- ~1 f3 D0 n
  707.       }5 m6 x) U/ s- w7 B
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();; \1 C4 `4 |7 q  u$ p6 j
  709.       dwStartUpSteps=2;
    5 R, Q6 D( }8 F1 b
  710.       break;
    ' x4 b% x# [" `
  711.     case 2:
    4 C7 P3 Q: y6 e1 A  [
  712.       {5 [2 K. k% v# z+ e! ]
  713.         int iEOF;5 ]/ m& O( g' c3 Q3 s
  714.         FILE *fp;
    . Q* W, ~5 j/ w! c, B2 u: S
  715.         char szString[512];
    # C0 [3 B0 X+ g) ~/ I
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");2 I+ ^, D: I6 k6 b% M; b9 O
  717.         if(fp)
    . f3 v5 _" c* {1 d
  718.         {  H) |* T$ _- ]$ t" F% J
  719.           do; e1 X& V1 x* W
  720.           {9 g+ s- g; K8 K$ d% P" C
  721.             iEOF=fscanf(fp,"%s",szString);
    6 L$ I( `2 D  C* w5 X3 ?8 K) h
  722.             if(strlen(szString))( q$ B2 n2 Y+ ]; N$ b2 r; f* n  w
  723.             {
    ; Y* R, d; Y# s* a/ w
  724.               if(bFirstChar), k& u6 S4 S& F) ?$ p
  725.               {: i5 m- I' Q: K9 `- U! ^- Z  o
  726.                 bFirstChar=FALSE;: R* r2 T" M6 D9 E# ?
  727.                 bConnectIsBig5=FALSE;
    + f, C( M3 X5 K  }1 r% S) F0 D
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    & c6 D/ l  @) {* C) l
  729.               }( L: f2 ~1 {7 z4 P
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    0 @! `2 o) `; x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));( [  [. P' b! }/ l; l' `% I
  732.               dlg->m_ListText.AddString(szString);- M' N' t% x0 {7 ~) R
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" s3 d" ~- b0 l- ?/ t
  734.               *szString=0;  L$ c* s4 D+ O
  735.             }
    ; s9 N' s- n; ~" J! M
  736.           } while(iEOF!=EOF);$ ?9 w3 c% n' k4 ?
  737.           fclose(fp);$ N4 E2 S+ |$ D' ?' F4 f7 e
  738.           unlink(".\\DownLoad\\readme.txt");& ^, a! x, d3 h" ^# A, z! p
  739.           dwStartUpSteps=3;+ z# H2 l+ D- j2 H0 J% d
  740.         }; h$ e' U6 n; Y* f8 T& A/ `! s
  741.       }+ i/ a0 e2 w6 ~0 ^; j. X
  742.       break;
    ! W" E, I/ Y# ], O' T
  743.     case 3:( }7 L% v3 x; R5 B7 q' h" Z5 @
  744.       if(!Dn.Connected())
    7 O" ^- Z/ }. S% H! K0 w- _3 u
  745.       {
    4 z6 K: [8 ?1 ~6 T
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);$ Y, k, A3 ?8 W- y$ F7 L. `
  747.         dwTotalFiles=1;( _" G/ _: \) ]  n9 l1 R6 |
  748.         dwDownLoaded=0;: S% K. t+ d3 i8 n* J
  749.         bSilentStep=TRUE;" C2 l2 J; |8 o* A
  750.         bCompressed=FALSE;- f7 _0 H, q! S. l7 _3 f. C) C
  751.         strExtLocal.Empty();
    1 D2 s9 f. C+ G$ _3 v4 l
  752.         strFullName="checkversion.txt";
    & o8 d/ w* b7 w; g
  753.         dwProgramState=AP_CONNECT;6 u+ u* Y* c9 A' I* a, ?0 r" `2 K
  754.       }
    / X9 O' Y+ D" `) V& ~# @8 U( Q
  755.       dwStartUpSteps=4;
    6 v' P3 }' ?- i1 @& R
  756.       break;
    $ J$ ^$ I  a5 U4 \# S
  757.     case 4:( K0 l7 o( e5 F& ]" |9 m0 \3 P
  758.       {
    6 Q8 U; T0 s, C" p: X
  759.         FILE *fp;; m! S( P+ i/ `
  760.         char szString1[128];
    # ~7 ~- w6 G0 ?' E1 h5 @" Z
  761.         char szString2[128];1 u0 `- H8 G* }1 g
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    7 V4 o& E3 o9 J, J
  763.         if(fp)
    1 Q. P0 x1 {. f
  764.         {% @5 G4 t- s  U' P
  765.           fscanf(fp,"%s",szString1);
    " Q/ B) ^8 {5 u8 S5 c' R5 K% _
  766.           fclose(fp);0 M1 g% v7 _1 S. g4 C0 P/ M
  767.           fCheckVersion=atof(szString1);
    * Z6 U( }5 a# D1 h0 {* Y
  768.           fp=fopen(".\\checkversion.dat","r");" X1 ]( I* @4 G3 ^8 M/ u1 F
  769.           if(fp)
    ( x. n; [- \& L  G5 X  R; N
  770.           {
    ; u0 A2 \" A  N8 a- o6 S- q
  771.             fscanf(fp,"%s",szString2);0 [7 d- `4 Q- I; t0 Q7 V/ H
  772.             fclose(fp);
    4 P* m6 b7 U2 g' F; ?
  773.             if(atof(szString1)!=atof(szString2))+ x# H5 M$ o( t4 V2 t; J
  774.             {  y" i1 l4 Q8 w* o1 ]+ h& P1 H
  775.               if(!Dn.Connected())
    $ o# F8 X' t9 P$ S, ~# w
  776.               {
    3 Z: P+ }5 m' U* X1 Z. R( L" H
  777.                 bFirstUpdate=TRUE;
    8 M& t# C8 y: J1 {2 p# [7 j! l
  778.                 dwTotalFiles=1;
    * c4 {9 x: w! C
  779.                 dwDownLoaded=0;, ^& G$ S" ]2 a. ?, @
  780.                 bSilentStep=FALSE;& Z# Q9 `+ i, r/ X5 R1 n# _
  781.                 bCompressed=TRUE;/ z4 T* D; z. a
  782.                 strExtLocal=".\\DownLoad\";
    $ ?! ^& o" A+ E: `# x
  783.                 strFullName="update.txt";
    : C) y- a$ K& X1 q  R: X2 Q) y0 A; P% P
  784.                 dwProgramState=AP_CONNECT;! {# V% w5 K, c* w% d* X7 g
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 Y0 _$ V9 I9 T
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  u. ^: ]* F- n1 M) \& b
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");: R- r* Z6 s: u- {) ]) d

  788. & D* J# Z0 J% p
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 ~8 e6 s; I+ d- R9 ^0 j. X2 m
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    1 o. h1 Y# T: z0 Q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' U: _3 D# G3 Q, b
  792.                 {7 @1 G2 {8 V/ c& W. r. I
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");# t7 E- M% J7 q& N* D" [
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");! [- w- Z; n% N0 W
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");7 N8 o# t  ]% L
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 ?5 S" v8 E  b# K7 H3 z( c

  797. # f2 X& {' ]) Y/ J
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % K1 q% N, I! u0 z* n
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    5 k# j' C0 f& x0 f- ^  T
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");1 l2 u7 }6 w8 a- j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / k, ?# T. W( e  r% E7 h
  802.                 }
    # |/ |! a- _3 R5 C
  803.                 dwStartUpSteps=5;
    ' o/ m  I9 q& k& C4 ]9 r2 }
  804.               }
    8 T# a' M2 }4 y
  805.             }
    4 c9 B- C+ {6 z% T
  806.             else5 ?( ^% i3 \1 D: m$ w
  807.             {
    * Q1 a- h. X2 s  {# v
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ( ^: Y9 R# D0 `) f' Q5 M
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");& v% {. A$ F' t1 o- h) j4 V  V1 ~
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" r& F2 d! }+ u4 Q, d
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    . V+ f; k' k  H2 a( s
  812. 6 C2 I( w& B* _( P
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 [* j' i* d# `5 F. [, ^
  814.               dwStartUpSteps=99;
    9 Z5 [% K7 Q+ V% H7 h4 V9 I
  815.               bFinishUpdated=TRUE;
    & t, D2 H; d# i
  816.               bCanUpdate=TRUE;
    1 o% d3 z7 d! f
  817.             }; z1 w0 v& Y5 I/ }* I/ K2 k
  818.           }+ U7 V; g5 R* \+ h- U$ a, t
  819.           else
      p5 [! k! y& k8 g' a# @5 ^" y
  820.           {
    4 \. W/ ~9 T, S1 s9 Q5 ?
  821.             if(!Dn.Connected())
    8 W- ?) b  V# h& `
  822.             {- y8 D: f" h4 z4 R2 ~
  823.               bFirstUpdate=TRUE;
    * ?! R# A1 S# b7 Z
  824.               dwTotalFiles=1;( K' R7 C; f, G+ q$ ^2 j
  825.               dwDownLoaded=0;/ Q5 u" C) t: y
  826.               bSilentStep=FALSE;
    / R( w3 X) }- a0 e" `
  827.               bCompressed=TRUE;
    # B1 n8 F. O- K5 N' q0 E  m
  828.               strExtLocal=".\\DownLoad\";3 i7 s5 A' |. z% W/ Z- Y
  829.               strFullName="update.txt";, C0 T( L* ~' P6 w: ?" J
  830.               dwProgramState=AP_CONNECT;: a, m% j2 W% _% c' w7 n
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    6 Z$ N3 G* g+ I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");1 v3 K9 `. t8 b
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");% d8 i: a. @) z1 {1 s% M' v
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 ^. S( O, ~6 m4 Z, W/ O
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ) R, f/ K: r' d
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)0 @3 |3 `5 u2 l0 c$ p7 a# n
  837.               {, ?8 u1 f5 \& w
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    4 b6 ^) K! V1 q, R
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");! f3 z& d2 T; e& ?4 O
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ( V( X# [$ p0 g7 Z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( q9 |5 h, Q2 q4 {. d: F8 Y
  842.                
    ; }- x/ `/ i3 g$ V
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - g- W1 B! ?4 R" p
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ E: z) D! x" O3 P
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");4 n4 {, B, [+ |2 G  ]% I
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % _2 O, c' a0 i& P* F7 G+ Z
  847.               }
    ) }7 F0 f! a7 y5 [
  848.               dwStartUpSteps=5;
    ( G  l8 |/ U) a! K- ^( Q
  849.             }
      H8 a' N! a8 \
  850.           }
    - K4 i* d# C. w8 O! n
  851.         }* {$ c; y( G9 g2 N. N
  852.         else
    ) W, |* `# V! B8 C! X+ b
  853.         {
    ' `/ _* H2 ?- I
  854.           dwStartUpSteps=3;
    4 Q8 a' L  w) y' i; u
  855.         }
    - w' |1 j* i; S8 R
  856.       }* f- A/ k' _: H! |
  857.       break;
    $ S. n% N/ i& o1 O  _. C8 Z/ Z1 D4 @
  858.     case 5:5 y+ h" {! H" P5 W4 i- P' v
  859.       {6 X9 u, o; q2 J$ u# k* a
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)& j6 o. \4 I2 e$ ^1 o
  861.         {
    ; Q) D3 u# M+ r: ^  K/ }; u' y7 `" ]
  862.           int opt_overwrite=1;" e1 u. A$ |3 G- A6 h) y& A0 O9 e7 `
  863.           int opt_do_extract_withoutpath=0;
    ; e; q* S, x: p( T- N
  864.           unzFile uf=NULL;& _  W  y1 j7 W' b; M

  865. 9 l- d2 X9 U, o( K3 Y. F1 H
  866.           uf=unzOpen("Wsa.zip");
    , ^- F4 U* p7 \8 n; J. p" ^% Y
  867.           if(uf)
    # L! u; d* S" E
  868.           {
      H* l( W7 {& j
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    $ e9 P7 t: |) U
  870.             unzClose(uf);0 F! x# H$ B2 x% m& f+ ~' Y9 M+ G
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    " Y/ \/ {  L: f* `6 o. B
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");7 N( ]: p3 g5 F/ S# h
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    3 G8 I  y' x# U1 j; u
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 }6 f: g1 i: Q  C" o+ e
  875.           }
    4 K  i  x; U' t: s- W3 Z' K
  876.           DeleteFile("Wsa.zip" );) x& B( q% ~# f  b7 d$ X3 X  }5 v  p
  877.         }
    4 c* L) ?; m5 Z- T6 v5 G% o, d4 r

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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