CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
% K$ T' n; `# ?
  1. / RevApp.cpp : Defines the class behaviors for the application.
    0 x) V% h8 z2 D$ `
  2. //
    8 d+ @  V8 ~% X) m" |9 K  l

  3. ( `/ h! M5 i# x5 L+ s
  4. #include "stdafx.h"
    8 f5 B  l$ s' F: j
  5. ) d0 q8 y* B9 I; q% D9 `2 g8 G
  6. //#define UNICODE" z- }6 R0 f" F) I7 u
  7. //#include <gdiplus.h>  [1 y2 H6 X3 j5 J5 b
  8. //using namespace Gdiplus;
    2 k: ]$ L! {3 Y, v! w9 q/ r

  9. . _% v. }: O9 T: y# \& E  L  c! e: @
  10. #include "RevApp.h"4 v$ ~- q7 S4 k0 ^; [: B
  11. #include "RevAppDlg.h"
    5 U0 R, C6 V2 i2 Z; F) G

  12. 1 R3 w( _; k! v- ~$ _( H  J
  13. #pragma warning(disable:4786)* V  h% m* I  @  D$ Z9 ?: X
  14. #include <map>% l% o8 R" K2 c/ K7 K
  15. #include <list>/ T+ k& [7 Z$ }: Z5 e
  16. #include <direct.h>; ^0 k2 y! k9 t, N7 e
  17. ( `. \/ f$ E: a
  18. #ifdef _DEBUG
    . {3 V7 x3 Q" S$ Z) S$ ^) ]- M2 O' |
  19. #define new DEBUG_NEW! u* O6 V. q  X$ A
  20. #undef THIS_FILE( V% T1 ~* V7 G7 d
  21. static char THIS_FILE[] = __FILE__;
    * F  V5 h' u: O# X% p2 ]
  22. #endif6 }3 d3 ~/ @4 G- o4 ]- E5 }+ K
  23. #include "SkinResDef.h"! q! w% @  ]- N% Y) ]$ S9 H" d* |
  24. #include "ChangeBG.h"& q: u3 |, t' a3 A4 v/ o* D, }+ }  |' R' j
  25. #include "AFXINET.H"+ A5 c, H7 a9 n4 Y0 O( J) H

  26. ) J  L/ R% |, n& N# \
  27. #define TRADITIONAL_CHINESE 05 d: A/ f9 P" R5 F+ ~
  28. #define SIMPLIFY_CHINESE 1! S- [" K1 p! O- A  C9 u- v2 a& d
  29. #define ENGLISH 20 u# F+ Z* Q3 A) q) C4 _3 ]* O7 p" g
  30. int m_iLanguage = ENGLISH;
    ! k1 H- S) V3 a
  31. /////////////////////////////////////////////////////////////////////////////
    * F, f4 o# `! q
  32. // CRevAppApp3 q4 _5 a1 O! ?
  33.   w- }9 {" S- I8 s& D$ E
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    - x" ~, ^" E! q
  35.         //{{AFX_MSG_MAP(CRevAppApp)/ E0 Q2 X% \9 J
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
      j: t! |1 Y, J6 q' p2 b% j
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!6 D: H) k3 V6 e, v3 }) E2 B/ K
  38.         //}}AFX_MSG
      k& O2 Z9 p+ M; B: @6 k  F; [/ k
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)0 {3 G6 \; M6 t( D. A( b/ b
  40. END_MESSAGE_MAP()
    , M9 v/ q: x( s3 Q3 e
  41.   C8 g% r; g* A
  42. /////////////////////////////////////////////////////////////////////////////3 m5 \+ C" v3 R9 H' }: j
  43. // CRevAppApp construction  q' r6 t3 v/ ?6 t

  44. 9 p! M0 t9 j0 B. l, d
  45. CRevAppApp::CRevAppApp()
    - `4 l7 g4 Z) F/ j4 i, J4 T& S
  46. {/ D0 J; |% ~! e
  47.         // TODO: add construction code here,
    - E9 [7 r) W  R2 k3 W
  48.         // Place all significant initialization in InitInstance
    " Q5 }& Q! T7 e* Z6 d5 X1 c. D% A% N
  49.   bDisplayIsBig5=FALSE;7 }' B, I4 I. _3 ?/ g$ |, [
  50.   bRestartUpdater=FALSE;4 a0 b, Q1 J/ X' Y. u
  51.   bFinishUpdated=FALSE;, j* {* e: U- f$ v  z" Y5 z; E/ w9 X1 |
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    2 K5 ?: e/ D$ ~4 T7 M
  53.   InitChangeDataBig52GBKS();4 G0 s6 A+ ?4 ?0 v% o, }
  54.   InitChangeDataGBKS2Big5();0 T% h# `+ _% Q6 G$ m  B( C$ z) [
  55.         //6 s' ]4 e6 j8 ]
  56.         bClickRunExe = FALSE;& @* @; r2 y" c6 T
  57.         //' H8 T1 V0 I$ t% @( T! K
  58. }
    * U$ n& [0 e. s9 D. M
  59. 7 `! h6 ^! V1 Y$ e( u- w- U9 X
  60. CRevAppApp::~CRevAppApp(). w# q% h8 m7 {% l& u
  61. {
    0 l$ ~4 \- w$ v
  62.         // TODO: add construction code here,
    0 l. u& [" l' M- g& r* k& V& V
  63.         // Place all significant initialization in InitInstance
    : y" J% K: |3 |0 E* E: D
  64.   EndChangeData();
    - F* j1 M- s; L* ^' [
  65. }
    ! }9 x- {- [- t- P* P" ]' u
  66. , V  z5 V: t  g% C  ?$ `4 v
  67. /////////////////////////////////////////////////////////////////////////////
    4 Y. ~" M5 ^5 d
  68. // The one and only CRevAppApp object
    & M: q0 h* m2 }! W

  69. # g9 ]& i7 D9 f4 k+ v1 p
  70. CRevAppApp theApp;
    8 W) @" E! E& L9 t6 N1 {6 P& ], d& w3 V

  71. 9 n% n; R3 J! K4 I6 g
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    - A) ]$ A5 U$ A2 G# J
  73. {
    " F+ F% b; Z! f( P/ I" [  g( Y
  74.   int iEOF=0;
    8 V1 x# z0 q: N2 t% T6 |' A
  75.   char szTempName[MAX_PATH];9 Z& x. V+ k# j- q$ {6 ~3 j; ~6 I
  76.   *szFileName=0;
    0 e' Y, `9 C+ `/ Y: U, h4 Y
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ' c3 k+ k  T- D$ \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ' D, o) z2 J) }* h6 S$ ~* s
  79.   {
    & Z, A4 ~: Y( {, M" h, O. T
  80.     strcpy(szFileName,&szTempName[1]);, d% r% L+ ?: e5 V' t: d! x
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)" p  ?( k$ ]3 \8 l" @& K& A( a$ H* ?) [
  82.     {
    ' ~% K  h# ~' b& F+ @0 l
  83.       iEOF=fscanf(fp,"%s",szTempName);
    " r7 Q! b  {& i! C* ~. g. U
  84.       strcat(szFileName," ");  M2 s: m$ A* o; \% R
  85.       strcat(szFileName,szTempName);
    ( S5 T( Y9 M! E& x
  86.     }+ ~! O0 y, ~" \* s1 Z* ]- F$ v
  87.     if(strlen(szFileName)>=1)
    2 r+ ]9 \2 _; M/ [, ?' S; i: y
  88.     {
    ' P' P5 {7 t* {( Y% \
  89.       szFileName[strlen(szFileName)-1]=0;
    7 F; s8 r& v' h0 S7 k
  90.     }' N% x6 e6 S7 G, \* a4 V
  91.   }
    3 L: |4 p( j8 c1 k
  92.   return szFileName;
    : \  A% P4 W* x* n
  93. }
    / z7 k) H4 r7 D0 I

  94. : J, G: F% O4 V( A* H
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    * R+ s  E# T6 k% A$ {  ?( G
  96. {
    5 p5 f3 Z  {4 X7 M$ p* ^
  97.   FILE *fp;
    3 Q0 r( y9 o: a, {* ]) b
  98.   char *key=NULL;& F3 J, J4 R" W! S% T7 S
  99.   char version[MAX_PATH];0 k2 y% w; g+ j/ O7 m
  100.   LPUPDATEFILE file,olds;
    + \7 u8 u3 L# y, T& z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;0 z7 n) n/ v3 |" M. I( v
  102. 1 d/ i) W& [+ ^# r  c
  103.   UpdateList.clear();3 ^% e  T: w1 ]4 n5 T2 W# x. V( m
  104.   UpdateFile.clear();
    ; U, v7 z: a! S- H7 g' Y
  105.   if(GetFileAttributes(filename)==-1) return false;. s6 x7 [, m" b! N7 J5 O) O9 O
  106.   if(!(fp=fopen(filename,"r"))) return false;
    8 Y' b$ f# L, p- H) ~9 Z4 K# V
  107.   fscanf(fp,"%s",version);* @+ h* f( ~( b* u& [0 Q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    + F8 Y8 ?- L& c% R( I
  109.   while(fscanf(fp,"%s",version)!=EOF): P5 X& [) z( z! S
  110.   {: E3 E) L) x8 |! @0 G, Z2 Z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 w1 {# ~" y7 h. E" P/ t! z
  112.     fscanf(fp,"%s",file->path);3 E$ i1 P( @/ J
  113.     ReadFileNames(fp,file->file);8 V' E. _9 _" f4 G, Z
  114.     strcpy(file->full,".");( l; ?7 q  Z2 z6 t2 T
  115.     strcat(file->full,file->path);
    $ m8 a, s& p( I, W
  116.     strcat(file->full,file->file);' W0 K3 H9 f* V& n* t
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- ~+ C/ {1 Y4 c9 D
  118.     {
    5 [' ^0 M9 \6 I2 s; E1 n
  119.       file->vers=(float)atof(version);% Z( \# y! j! K
  120.       UpdateList.push_back(file->full);" V' x* H7 T. G! j, ?
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; u9 O( [4 t3 B
  122.     }
    & U. ~5 k" b1 i( q% @
  123.     else
    9 V0 r0 m7 F3 m) T
  124.     {. ~0 M3 g9 B4 U) z
  125.       olds=(*p).second;
    ( D5 B2 r: l- [" ~" l: F
  126.       if(olds->vers<(float)atof(version))
    , Y/ }9 q6 L, F/ L( W5 p6 x! w
  127.       {) N$ Y' ^" Q% a9 `2 |
  128.         olds->vers=(float)atof(version);
    2 v3 W( z: ?0 Z9 T5 O0 w
  129.       }
    . `+ Z( ^& K( I1 J, x# I; R
  130.       free(file);
    - V7 i/ z* v. _6 ^- m" ?
  131.     }
    : v+ i5 `9 [6 d- {! I
  132.   }% s) j) u/ W% t9 F- H
  133.   fclose(fp);8 h  c# n2 m9 e$ p: x) z
  134.   return true;9 s' C& k) E1 N
  135. }) z9 V4 ]8 d  |' U4 n3 q1 E# l

  136. % C$ Z# z7 @+ p
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)3 c7 C. V3 A% u  I# `0 R7 L
  138. {5 e0 b0 F+ D1 x3 z% c
  139.   TCHAR  szFull[MAX_PATH];! }2 a0 R1 H2 U% G/ c6 o
  140.   TCHAR *token,*inter;! o. A2 m" S. ~& T
  141.   *szPath=0;; x" M4 y  h- h! R, ]: \, U
  142.   strcpy(szFull,szFullPath);
    6 S# R' Q4 D; e% C1 c, E
  143.   token=strtok(szFull,"\\/");
    " N8 D9 h0 c9 D
  144.   inter=token;
    5 }8 m* z# M/ {  X9 l+ \; e$ j. f  }
  145.   while(token=strtok(NULL,"\\/"))( _% i- B7 h$ l) d
  146.   {
    : i! \2 a0 V4 W5 y- X  t/ G
  147.     strcat(szPath,inter);3 X' w, k0 o- L; H1 z5 G
  148.     strcat(szPath,"\");
    # l9 I% a; X& z: F4 F" N
  149.     inter=token;5 k0 P, u& t6 S7 x
  150.   }" [2 l0 [7 Z4 p; \3 k$ F. q7 n* E1 @3 q
  151.   return strlen(szPath);4 b+ }1 g( Z/ }0 G
  152. }
    ; p: W* l  r! a# [  p+ t

  153. : k( y# z. N  u& }$ x
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    7 h! I* h9 @& A# q4 `" f6 B4 l, b9 c
  155. {
    - h$ A! n6 s, H/ C- l2 p* k6 q8 {" W
  156.   DWORD attrib=GetFileAttributes(Target);( L( S( A# c7 x* |  ?6 G; _
  157.   if(attrib!=-1)
    4 T$ ^7 I: w7 u, D
  158.   {: ?9 t1 y2 `  f- G
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)); K' v' s/ K, n/ {3 `) s9 j  N6 ]
  160.     {; D5 {' C9 Q: t1 `  f
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);, W8 X  Z1 d7 S$ }  l( I! ~, q
  162.       SetFileAttributes(Target,attrib);# n( D0 {( g8 X
  163.     }- q5 z4 u& }4 c" b- X, a+ q
  164.   }
    6 }% O. `+ c% I3 W' u0 W3 Z2 N
  165.   CopyFile(Source,Target,Erase);
    9 |9 T+ T5 P) J/ ^
  166. }
    / }: O9 X: @( @, i  |4 U' F" R

  167. 9 a2 o( r% x, c8 {6 @
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    7 {- c' t$ a  A& U
  169. {
    2 C) \/ k( m/ V6 N
  170.      FILE *fp;
    # @+ b. ^2 I+ D4 U; [9 m
  171.      char  szBuffer[8192];- x7 x) E- L5 l
  172.   va_list  argptr;- |) A% ?& X. c" o
  173. ! B8 |6 s4 f5 s; c" j: {
  174.         va_start(argptr,message);  s" z) r6 L( D/ w, \% h3 |) ~. f
  175.         vsprintf(szBuffer,message,argptr);8 z1 K; f% R' s, w5 E6 I* u
  176.         va_end(argptr);
    7 X" {$ p, k- J( O& p
  177.   fp=fopen(FileName,"a");
    8 w0 y8 {+ W- z. B
  178.   if(fp)
    9 m4 D& n" v, w' r& M
  179.   {
    ! m! c! w) }1 s0 b# Q& p
  180.     fprintf(fp,szBuffer);
    ) X9 L0 V; ~2 [; g
  181.     fclose(fp);  _) Q) x# k) H( Y) l7 p4 J
  182.           _flushall();
    / B, R. ~' S  L% t, u0 t
  183.   }
    0 \6 ~, u/ o- e; K1 v
  184. }% ]& b* l* T4 h" `' Q5 ?: d

  185. ( k4 b/ n- A9 X
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    $ l$ t5 x, b: S) [# j5 |8 o
  187. {
    ( l5 ]) J7 m, ?6 U2 N- g1 R+ Q
  188.      FILE *fp;
    ) O. G3 @! V% n5 D& n
  189.     DWORD  attrib;1 N& `. Z# o$ f! f/ w
  190.   attrib=GetFileAttributes(FileName);
    5 _$ _  x* S8 {8 Y# u
  191.   if(attrib!=-1)6 g% Y3 x: c5 S# W: J
  192.   {( w1 V8 I  H7 ~1 p# U
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    . v+ {' F6 @0 y
  194.     if(!SetFileAttributes(FileName,attrib))
      ~- A, w" Y# S( n0 v
  195.     {
    # v& Y1 u, w, W
  196.       return FALSE;
    5 K. a% u0 W4 r! m1 J
  197.     }1 R6 @% k6 \/ A: F# X- \4 K* ?3 c
  198.   }/ o6 k' F9 e9 z/ ^, P
  199.   fp=fopen(FileName,"wb");' e& g5 w: [- B& K2 s
  200.   if(fp)
    : I2 J/ n) y1 |& V$ i
  201.   {
    & u) }( g9 d- j
  202.     fclose(fp);7 ?% K6 }( D, i) V, w
  203.   }! {% s2 \2 L  c% y% g% l
  204.   return TRUE;) P' V) m+ o( L& n. m# o8 V
  205. }
    . ]8 c/ \  U" K" w
  206. ! r7 h6 {! f6 w8 R  c
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ( O. e) J" g% Y, J# n
  208. {6 R5 E& S8 A. e* M
  209.   char filename[MAX_PATH];
    " `1 h# `+ a4 }$ B* W; j$ M1 |
  210.   LPUPDATEFILE file,olds;$ e. e% e" G/ \/ ?7 k
  211.   std::map<int,CString>::iterator i;( x3 X5 g4 t" o% Q  |
  212.   std::map<CString,LPUPDATEFILE>::iterator p;& k3 j2 G1 K4 K
  213.   std::list<CString>::iterator l;+ Z$ g; ]7 U' W) [6 t7 ]

  214. . ~0 v' b# I- P: B
  215.   if(bFirstUpdate)
    - [- e! o/ T$ N; |8 F2 M0 Q
  216.   {, x5 Q1 g. L2 h
  217.     dwCurrFile=0;
    ( \$ ^6 q1 j, Z2 J6 |# `
  218.     bFirstUpdate=FALSE;( B/ A; z4 M7 g# N4 i3 W) E
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 E* @+ K/ l* }. q4 p: Y7 k3 u
  220.     {
    : X  e# r" G+ ^
  221.       dwTotalFiles=UpdateLocal.size();, A+ S+ V$ t! g0 k4 p2 K+ i; K" m% x
  222.       dwDownLoaded=0;
    * i% d# a* z& c1 x6 O6 W
  223.       bSilentStep=FALSE;
    % n+ V- Q2 V% Y
  224.       bCompressed=TRUE;# C5 B% D5 A8 z) V- S
  225.       strExtLocal.Empty();5 H# r. S; k: u  I- `
  226.       strFullName=(*i).second;
    # ^- A  c( L' I1 E" P
  227.       dwProgramState=AP_CONNECT;% Q9 b! I/ g( n0 ?" K* r8 y& X
  228.       return TRUE;# o* m/ D+ e- S- Z
  229.     }8 E, {1 A1 V" o" l9 O4 c
  230.   }
    1 _3 d% V5 d2 q8 \" E2 M/ A
  231.   else if(bRestartUpdater==FALSE)! [. V9 ?, y* U; r) D
  232.   {" k/ g5 `: B  H
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    5 _, \' f4 V  ]! t
  234.     {
    1 s, a! k9 P) O: l; Z; M
  235.       file=(*p).second;
    ! E, F* m& e0 w0 {9 o* P
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())) d/ m* A! U9 z. F$ R/ ?+ }
  237.       {
    4 g% Q! w* l6 }2 K7 q2 F, w
  238.         olds=(*p).second;
    & i5 W- ?4 @5 g# W3 I3 O2 W
  239.         olds->vers=file->vers;
    % w. n4 {' r1 ^! R5 T9 l6 E
  240.       }/ P4 x4 S2 y8 Z: {, ?
  241.       else; U; M! c+ A7 Q; t
  242.       {
    2 \; G3 e& q% t/ g
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ ^3 [( b# `+ i$ G6 B' F
  244.         memcpy(olds,file,sizeof(UPDATEFILE));/ e6 P. M2 g3 P8 e( n9 q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));, O9 {* J8 D6 w3 L8 V7 t
  246.       }7 y+ L$ q8 n: y; `
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");* w; L' t4 T8 C, a
  248.       sprintf(filename,"(%s)",file->file);
    ) Y  p, }6 r. p4 V# G0 L
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 Q5 h8 K5 ]* G! k1 ^2 M7 J
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }$ ^, e- F4 K2 V& n& A
  251.     }" E; ]' t" T* @( Z: v/ s
  252.     dwCurrFile++;
    8 o5 V: r6 @" r! b" k
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; b/ i* a! U2 n9 ?, l4 [. U
  254.     {
    ; k& |8 j3 h( d
  255.       bSilentStep=FALSE;2 S; A& |  L4 E; |" y  n: b# l/ l1 J
  256.       bCompressed=TRUE;. ^- ]9 b0 d* @# Z/ O
  257.       strExtLocal.Empty();) R% a8 E, [( g
  258.       strFullName=(*i).second;0 a5 l+ q7 p; g( {% Y
  259.       dwProgramState=AP_CONNECT;9 ]' D  D4 S# h2 P, y8 t6 a% m
  260.       return TRUE;* w% G5 X* c) r; W+ J3 N; o0 Q
  261.     }5 [/ h& a7 M- P; ^" Z/ e
  262.     if(!bRestartUpdater)
    9 C; O! {3 P# ^( c. j  a
  263.     {
    ! q- g% i1 `' _1 b! c
  264.       int iCurrSize,iFileSize;3 P' K$ f1 ]. o/ s; Y1 h
  265.       iCurrSize=0;! v) ?7 p% t! {9 h$ P. V) N
  266.       iFileSize=UpdateList2.size();9 t) E: Q& M1 e* n5 L4 l
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");" [8 @0 {( R: O/ W5 F4 U" A0 w- r# j
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 y7 g1 I' [+ u1 ?3 y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");3 m5 B9 _% y. S
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) Z: n( K, ^, v/ t/ n
  271.       Fclearf(".\\update.dat");( P0 B/ V/ `) l- K$ p$ n
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    # x( Q) l# T! g0 A/ U
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) L! b  q  a. v) y
  274.       {- B3 _, d. ~* ^- u5 V% {1 a. |
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    + F+ ^; K' Q3 {' s3 G( ^' B( s
  276.         {! F$ r9 P' o* B. I, Q, n
  277.           file=(*p).second;
    ) i4 M9 u: ~9 x; Z
  278.           sprintf(filename,"(%s)",file->file);
    8 h' ]  l! ^3 N2 l# T
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 n$ C! @6 n1 y* o; B0 }% u" r' D0 V
  280.           iCurrSize++;& K8 i+ \* X1 o9 F4 F
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));6 w. S0 N* a$ z- n
  282.         }8 {. Q* T: a( i7 C' a( i
  283.       }
    1 R  i$ O/ R& i  A( j
  284.       unlink(".\\update.txt");
    & \, k" e: S" y5 J3 w
  285.       unlink(".\\update.tmp");5 M/ y( T) h' q' G1 N  s8 ^
  286.       Fclearf(".\\checkversion.dat");
    " z) B$ A( t  _+ i' e. R% c
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 M4 g$ k8 R' r" Q. E6 |( n
  288.       if(UpdateLocal.size())
    % u# V  G& {# G/ `
  289.       {
    ; q4 u3 Q! V) F) `" x
  290.         UpdateLocal.clear();2 V' P  \0 Y- ^7 ^: E: J
  291.       }
    : u9 S* f/ W( t: ]( X" j
  292.       if(UpdateFile3.size())) c3 u4 Q  n; r
  293.       {
    8 Z& ^" o# H+ s& z8 O* U/ U
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)2 i# P$ p9 S, `8 @. D* D
  295.         {
    ! J/ {; X, T& g. T6 K: w. L
  296.           file=(*p).second;
      D2 t* G, W' Q2 f3 v
  297.           free(file);
    % v+ a$ V# B& _8 X) T; X6 M  s
  298.         }% ~& |0 r5 r" l# d$ }# v4 r, l
  299.         UpdateFile3.clear();
    : V% |% I" Q- v, E0 j; D
  300.         UpdateList3.clear();
    : Y9 f7 M% }! d- X" i; m
  301.       }
    ; c1 _: s0 a9 r
  302.       if(UpdateFile2.size())5 W& w' x& a! f; X6 Y" P# O
  303.       {& T0 a! @5 {: f/ v# @, O; N" x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    9 a! N# U  c5 G, w  _
  305.         {
    * t/ ]. R+ _' A. A$ n1 ^
  306.           file=(*p).second;
    - N# \+ o' |0 g3 C2 t
  307.           free(file);
    7 Y$ O8 Z0 n" W
  308.         }
    : m) s  i1 K$ C# t5 X, t" U
  309.         UpdateFile2.clear();: {3 w2 `6 V4 G8 u
  310.         UpdateList2.clear();
    * c# b3 b+ s6 M: O. d1 v
  311.       }
    4 L3 w7 D- _( e+ I1 X" e
  312.       if(UpdateFile1.size())- y1 j7 ^5 r# y
  313.       {) \& u) J2 j4 H7 }+ j9 s
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 m& ]6 B3 @8 G. `$ _/ I/ i
  315.         {
    8 Q& W" t9 s: y* ^* }& n
  316.           file=(*p).second;
    3 q9 `7 o( K# w- D  F, W$ U
  317.           free(file);+ R9 \" ~3 Z; ?1 }
  318.         }
    ; {2 a# C4 a1 p% p0 [
  319.         UpdateFile1.clear();
    " Y: ~6 x9 k9 t6 C3 G3 l5 c
  320.         UpdateList1.clear();. _  k+ E0 v/ V; ?: g
  321.       }
    % _# P9 l& E6 U$ \) w1 h
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));$ V, C3 [% ~' |
  323.     }
    & Y0 }1 x: W# S+ F! ~
  324.   }* C, S6 Q" B9 h3 j# V, t
  325.   return FALSE;
    " r) P9 Z% d  k& R
  326. }
    % i& J2 P, I) o0 H: P! l$ U' i& V% E
  327. - I* G" E6 x+ a8 Q; D& i5 Z! a
  328. void CRevAppApp::ClearAll(void)
    9 A, l, T% @* y. Y% M# V  b1 I
  329. {1 x# a: b/ U1 q! n
  330.   LPUPDATEFILE file;
    1 s" k+ M) F3 v, t1 |6 ~1 o/ i
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( s% J& B7 w7 k0 {

  332. 3 u5 Z) X# p& s2 S7 C
  333.   if(UpdateLocal.size())
    - D! l! d- d) @2 m9 n
  334.   {" S- Z7 V* _& y7 m. e+ ]
  335.     UpdateLocal.clear();: r3 E6 B- U# u4 ~. z& K  R8 y* F
  336.   }- m( I# V/ x: S1 b' b9 k* g
  337.   if(UpdateFile3.size())
    & q3 M' V4 L+ c2 g4 X
  338.   {" p9 G! |4 @( I5 S
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 q4 U1 u) o  p- A1 e) h
  340.     {
    - p9 P; Z$ y% `9 _; x. b/ l
  341.       file=(*p).second;
    1 K% l. v+ x( P: t- j9 D6 Y
  342.       free(file);
    - W( o" ^& x- C0 }& V. G* U
  343.     }  ]4 F9 n4 y% V/ Z2 x
  344.     UpdateFile3.clear();
    6 _& W8 S: i+ J8 X
  345.     UpdateList3.clear();
    6 [, |# l/ j1 m% Z- t* a
  346.   }
    % ?$ U1 g4 u# u8 g# S
  347.   if(UpdateFile2.size())
    9 o8 j. ^1 Y2 e, k6 C1 v; I
  348.   {
    * ]' H% [! ^  \1 [! x
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 g9 j" R2 v; W; M# `% ~
  350.     {
    : T' N$ V! X7 O2 ^
  351.       file=(*p).second;
    9 a: Z( B3 Q' J3 l  F. j) v6 D( x
  352.       free(file);& {( k6 F6 J' D5 i3 y7 |5 M. Q* w
  353.     }
    ; }& W" ~- J/ T) P! A! x
  354.     UpdateFile2.clear();! v3 g, t3 Q# v' j2 h+ p' Q2 L
  355.     UpdateList2.clear();
    2 d/ S/ C% H' u
  356.   }9 R9 P/ J% G$ N0 t; t
  357.   if(UpdateFile1.size())8 g- G. ?1 \7 G" g' c
  358.   {1 ]0 j0 g$ Y3 o& J
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 t* q2 u8 p' U! C* V, W
  360.     {0 T! a* d8 T8 i' ~& z* K
  361.       file=(*p).second;' ^% U6 N% q- W+ O$ g' H' K3 H8 x
  362.       free(file);
      {. L6 I0 y. P0 B
  363.     }
    6 p* J6 g; m0 w5 B
  364.     UpdateFile1.clear();
    ! S+ n' T; r! x( x& J
  365.     UpdateList1.clear();5 A9 {& F- ~% o: G) P; {) z6 o9 ~, {
  366.   }, w. g+ c2 g, O4 `7 H
  367. }  
    & M7 f+ V; f! K" {' N
  368.   
    % F) G- K# h9 X3 M$ D& Z# c4 w% R# o, p
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ) b' [& O8 f' n. S) X, c
  370. {
    : p* D. S: U% z1 a1 C, Z( X
  371.   int c;- Y- @5 @) ^- k
  372.   LPUPDATEFILE file1,file2;4 A9 U4 ^# A" F7 C( s" a. ]6 L& F3 S5 G% m
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;& k5 x5 }( T6 ^
  374.   std::list<CString>::iterator l;
    7 R3 H# D' s5 `( j! v8 g

  375. - Q1 j! H2 H: x) u; k" a8 p0 x
  376.   UpdateLocal.clear();7 U0 ]" O; l3 M7 J' [. T4 Z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);/ l& {* E- ~+ l
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);' ^" `# ]7 W- m& b& _8 a$ @
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ' J% h8 z8 @1 I3 v& u
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);* j5 v0 Y! f0 q( j. u7 {3 H
  381.   if(UpdateFile3.size())
    + X5 s& w- o9 J: U) J) D  v& t
  382.   {+ D, O+ s; v' I3 u- U0 w& ?
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ' o# B& {( f0 e, e# [# R
  384.     {
    $ j# B; j: F: s) {$ ?
  385.       file2=(LPUPDATEFILE)(*i).second;% C" E& r$ H$ e! U; R
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! {( q0 u! M2 v& X/ [
  387.       {
    " I0 j+ u! M% @. C
  388.         file1=(LPUPDATEFILE)(*p).second;
    ' F+ }) A' x" _
  389.         file1->vers=file2->vers;$ q! l0 u( b3 r3 R
  390.       }
    ' j5 W8 W6 t; Y/ D1 u  p
  391.       else
    ; `* i( W- E" k( O) q
  392.       {
    $ f# k! D: k1 k+ y- e
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ K6 n2 U& O- M1 G+ W2 y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));6 i  ^' z/ z6 ?) w3 m' H% Q. Y
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ; u8 C" P- g. I8 x' F7 \
  396.       }
    2 d6 d4 X7 n, m  }
  397.     }  L2 {% T* V# P8 J9 Y# U1 h
  398.   }
    ! l6 W( }. W7 r" G
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)' ~1 [8 h* L+ N0 |: d0 a
  400.   {
    * [: Q: L1 P& ^% \4 t4 Q% @
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    + _. l. o1 o8 m5 r
  402.     {
    5 b5 X, Z) _, l, f: Q% Z* J/ B
  403.       file2=(LPUPDATEFILE)(*i).second;& W7 U  ?( E0 T, P
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ P* k* `/ |1 m3 \( @. H
  405.       {
    : r3 L4 {, b9 }+ e" g
  406.         file1=(LPUPDATEFILE)(*p).second;  x0 }( F) |: M3 Q  C2 l
  407.         if(file1->vers!=file2->vers)
    4 P% Z2 I% ]! l' r9 X8 x. R# {7 Y
  408.         {
    9 Q4 e: ]% G2 Y" l) V+ }8 ^
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& d. D4 n5 t& i) h( d* Y
  410.           c++;
    7 \3 V. f+ f% O
  411.         }
    6 F/ f; x3 s2 m5 S6 k; F% B
  412.       }
    - h, i1 c2 q8 U! j. `
  413.       else2 S4 R- o/ R% z
  414.       {
    * H; _0 L' U/ W5 y# i
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 A. R' }- G' f# C1 S6 P
  416.         c++;
    8 H$ B; {: {. z7 p- \
  417.       }
    ! \! U: N# e% c. ]! I4 R& Z$ f) g
  418.     }
    6 r; s: @2 y5 P& Z
  419.   }+ v# F; D; b9 h+ t2 v+ |
  420.   unlink(".\\DownLoad\\update.txt");' [# x" y" s. t' z8 h
  421.   if(UpdateLocal.size()) return TRUE;  q' j2 r1 t' B" a. p- D- g2 p
  422.   else                   return FALSE;
      V) v9 r" a: d. t' L
  423. }
    ; Q, N8 S5 C( ^! }( F: J

  424. 0 [. v: o5 H% i8 g: [- `: T0 y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
      r5 z! [1 L7 w' y5 N* R
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"! Z1 i( L) @6 z2 \, C. e% S0 h! L

  427. , I& F$ B5 u$ `- }+ g' X
  428. ' d6 p8 S  e, j# v- M8 C# z  x! C! N

  429. + `4 C; F) o/ M4 B6 T! e
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( ]$ c# |# S( S0 v
  431. {/ D) y+ q% U% L8 E4 D4 p
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;! o9 c, r) k& k4 v8 a; S5 t
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! D* Q4 h$ C7 t  y4 w
  434.   {
    $ W4 G0 `) T/ F; i
  435.     char szLanguage[50];9 l/ |+ D+ ?7 `' l. v
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 l" c, S% V) C  |
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ H+ b. Z, f; j
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 H* O" A  @1 o1 f# E
  439.     else                                   m_iLanguage=ENGLISH;1 B% R/ a, k) ~# u/ y4 u4 V2 M( c
  440.     char szRegister[100];! M4 w, U6 O) I! r& T
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 j4 O* J  @0 b. X3 a) G: C
  442.     strRegsName=szRegister;
    $ V, s; B# ?) O& H+ @
  443.     char szPatchURL[100];
    " j  J; s; h/ v# P
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " F: z7 m2 F! T9 |5 E* s
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( q+ Q6 m/ K& S7 ]1 @5 ]/ B
  446.   }6 f+ F9 D  b  W" S
  447.   else/ |) ]  Y  l# k
  448.   {( }& a* J! A; t- {8 T1 w* F
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - {5 }1 n$ g( q4 `* P
  450.     strRegsName=DEFAULT_REG_URL;# i$ }" [- t, o& Y& a9 ]8 ~
  451.   }: Q, U; u7 ^$ R2 [
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 ~: O4 ]; p- {$ L2 M$ h2 Q7 v
  453.   {
    4 m4 U( G) q" Z+ M2 S
  454.     char szIP[50];
    : p- {( E! h+ Q; o
  455.     char szDIR[300];# z, U# R! F, Q- {
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    : E0 B2 {; `; g+ J/ Z5 d
  457.     {9 k' K. P2 ^( y- H9 n6 L& @
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");( ]& m) q% d# ?5 p& P- |
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    8 _5 K8 s" \/ w
  460.       strHostName=szIP;5 P0 G1 J4 q. {3 Q) U
  461.       strHostPath.Format("/%s",szDIR);( T2 h, h- U; V  G4 q
  462.     }! U8 E) o7 j- j/ i$ B, O
  463.     else: g4 }0 {8 u! ^4 z" M' x+ s
  464.     {% B5 X& I8 [& \
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* m+ a* G+ g. I
  466.       {9 m# }2 u# X: r1 ~! B
  467.         char szLanguage[50];
    5 F+ s. O  k  Z- r0 i
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ U- s/ D+ j$ _! E* N: c
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' w% ]8 m% R, R5 O. M" c
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      c* }5 X! r: L0 F& G6 @
  471.         else                                   m_iLanguage=ENGLISH;
    / x8 |; H2 u; R% n/ g
  472.         char szRegister[100];1 c0 x: J1 }$ R+ D! O2 c8 H6 F
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 k5 ^! ]8 Q2 l1 B
  474.         strRegsName=szRegister;# n3 i# i! l! @# B
  475.         char szPatchURL[100];
    3 J8 Q! D0 |. |; H
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' w9 e( ^& Q' Y# t/ m0 m
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( D1 S' v  p1 s8 \& W8 E+ b5 {: F
  478.       }- E1 _+ r- f/ U! n* [: c
  479.       else
      b9 j7 [2 \/ \( F  E: y
  480.       {0 O% N- J4 Q6 s; d4 q+ f- b" B
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 @+ W; M8 s: e; O, e
  482.         strRegsName=DEFAULT_REG_URL;; H& A! G7 x( }2 V9 S1 o+ R& ~
  483.       }
    ! f4 ^5 w# a! `6 r
  484.     }
    % l! s: o8 }: V8 W' ?& k- {% `
  485.   }1 x" h2 R+ N0 Q, y
  486.   return true;
    5 O( Q) Z$ j  Z; Z
  487. }
    # G9 x5 s, g" u( b8 N8 d

  488. ) X$ [0 o2 `7 t% U! q6 Y
  489. #include ".\ZLib\unzip.h"
    2 N0 k- z0 }/ A9 {2 {$ H
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);+ }0 E4 d) P% \& \* \
  491. /////////////////////////////////////////////////////////////////////////////1 s) P+ ]; `8 T8 n
  492. // CRevAppApp initialization+ c% W  @8 I0 S4 r* h

  493. + A6 W9 t# p- V) E# L) o) P
  494. BOOL CRevAppApp::InitInstance()
    , Q& `, |( K) U" z
  495. {
    + h5 |  }* A1 o
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];5 _% R% S7 P/ P+ L' l% h

  497. ; ?6 x5 b8 X# J. c& N2 [4 V  @
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    6 v5 _5 h: x) P: N
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)). J1 }9 i, @1 R
  500.   {9 v! Z5 G) o$ ^) b5 a% Q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");6 G7 r' p, t0 m) a3 W) G( J& G
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % ~5 c( R- Z; n4 x7 H; w7 |1 j
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ; u2 `9 P. V, [; P+ d% p
  504.     {
    # M1 M& K' L+ o
  505.       strcpy(szPath,szPathTarget);
    0 [5 }: q2 O5 [4 o% E% f( \
  506.       SetCurrentDirectory(szPath);8 i( M  o( p6 |9 F3 A2 t
  507.     }3 O1 \9 n6 u0 h. f) _
  508.   }/ S: Y- F9 f1 r6 S3 W
  509. #ifdef _DEBUG
    ( R) C' E0 `5 }: Z2 ?& D) n
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " D; ~$ ^+ q5 z4 c& u! ]
  511. #else+ B! z1 Q5 ?- _- d6 G
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 g$ n+ X! K  b9 @/ C$ E
  513. #endif
    ! v. _2 M1 @0 K- {1 }3 I  V( w
  514.   {: L. z) o) B' `; E# J
  515.     char tempFileName[MAX_PATH];4 G$ H  Y  s1 _0 a
  516.     strcpy(tempFileName,szPathSource);) k* `0 c& z- Z8 Y9 w. }
  517.     tempFileName[strlen(szPathSource)-12]=0;" u" K8 b" k. b3 l
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    3 _" P8 |: c/ _. K1 X" l8 [! X
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    & a- g3 O0 s4 Y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    9 B% f$ c" c' T2 k+ I
  521.     return TRUE;
    , g& M) q. z: d
  522.   }$ q7 [5 c% \! t, t. v6 }, d
  523.   // Nuke 0118: Delete run.exe; w" z% t9 i/ f2 @& F
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );% g: S! ~0 S( B, m
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ' Q3 d1 X5 `. x9 s* i
  526.   if(!ReadCfgFile("Config.ini"))8 T2 q# f: {! E7 F; O
  527.   {; X+ X" S% t' t6 L0 k
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);( A7 ]& G/ S* ^% d) s- E: `
  529.     return TRUE;0 `2 y! A7 N0 @3 `
  530.   }# H8 `! d1 E8 y- u7 ?/ s
  531.   HANDLE mutex;
    6 u* Y8 ~( N' U
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 Z/ Q( L1 Z! @5 ~$ s
  533.   {( {: z+ m; f9 F; J3 M" G0 M
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ) j9 ~2 z. C- Q' f
  535.     {
    " l5 p6 a# S, E5 a1 e, V8 K2 ~: m4 O
  536.       CloseHandle(mutex);5 U! `* D5 L3 |: y/ F
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    0 g: l5 X1 W# G* H, p
  538.       return TRUE;
    : y) M4 L; D$ }; r2 x
  539.     }/ b* r* }0 {3 n
  540.   }  
    3 v' o) s1 j% L2 u' I+ c
  541.   CloseHandle(mutex);$ B( E! |9 B6 z' n7 [2 y. k2 D! @
  542. # e# L! n. U0 C. C. M9 \( g/ z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);+ r1 b' s% R; I- c9 t/ \, l
  544. ) U/ f1 d& _7 O6 y: l  [
  545.         AfxEnableControlContainer();
    ( e( {7 O$ k6 S  W. R9 h5 O
  546. 8 c1 i# o& E) V, K: L8 Q  M
  547.   bCanUpdate=FALSE;. {3 n+ C7 w, O9 `* ?4 T" Z( h
  548.   dwStartUpSteps=1;
    $ I! n) K; Y5 B2 |3 L
  549.   dwProgramState=AP_NOTHING;) r/ @6 q6 J, Y7 O+ u

  550. : V( ~6 g3 L5 T9 C, [8 m4 E/ C1 \! R
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 r0 B/ h& g# H6 V, R3 q

  552. 1 _  Q% E! m1 f* ~
  553.         // Standard initialization
    " ^5 t3 ]+ }! y, `# E* F- `
  554.         // If you are not using these features and wish to reduce the size
    1 H6 i) \% K  v  f* x' n
  555.         //  of your final executable, you should remove from the following/ |# x, q. y& O( M
  556.         //  the specific initialization routines you do not need., j) o# }% B5 t  J+ N

  557. 6 P6 ?) M2 O  q4 x9 T
  558. #ifdef _AFXDLL
    % _. N9 x0 v8 ]5 R
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    + y% q$ a0 s0 x7 L6 P2 i
  560. #else" z/ M8 E/ q" F- V$ @" j8 ~' S7 ~+ B
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    $ m' e, {) e' J% q, y3 g  z
  562. #endif: ~0 M* i# X* n. V# b; l, }
  563. % v4 }# w" W4 M
  564.   dlg=new CRevAppDlg;& ^- E6 i* h/ ?% j+ q4 O& M9 k  k$ Y& l$ R
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 u3 a6 d7 c3 U
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    2 M8 d1 q, o+ w6 r
  567.   m_pMainWnd=dlg;
    2 F5 F* w4 F, ^( s8 d
  568. : D$ s$ g2 b! d0 J) @; I
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    * B9 g- U/ h- y" V( o) ^
  570. . T+ t" M) O! q% C& ^0 D5 U
  571. //  GdiplusStartupInput gdiplusStartupInput;. t# w" o4 O& p* \  V; x. B
  572. //  ULONG_PTR gdiplusToken;
    / |+ w& ]9 v/ i& |
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! t: V4 G; M6 b3 r3 o, ~2 F0 V$ T
  574. 3 F, `5 `- U: n5 M* {" W
  575. //        CRevAppDlg dlg;
    " p6 W; G; t$ p% _% `. ]
  576. //        int nResponse = dlg.DoModal();
    7 j3 i; `3 K2 P7 \# u' @
  577. //        if (nResponse == IDOK)$ ?. @! S, G: x( O2 N
  578. //        {8 I( U+ w7 c) G- C" }
  579. //                // TODO: Place code here to handle when the dialog is8 o9 z* m& M  @1 z' q
  580. //                //  dismissed with OK
    0 c/ a2 ^. h. U
  581. //        }
    ! O' l3 D; u- \% g
  582. //        else if (nResponse == IDCANCEL)
    " E5 q5 W. P" o5 T! n
  583. //        {
    , w& s+ |: v; Z
  584. //                // TODO: Place code here to handle when the dialog is
    - b8 y4 V8 [( h$ g
  585. //                //  dismissed with Cancel9 w: h, N& J7 b' L: }9 g
  586. //        }, s  v' |0 Y9 r& X$ [: ^5 `" G
  587. : B; e6 T! {: Z  ~! Y
  588.         // Since the dialog has been closed, return FALSE so that we exit the  F8 S+ J! \6 H5 R# R* C: @# i
  589.         //  application, rather than start the application's message pump.
    . p1 F. }) [, x' J# \- \0 Z$ M
  590.         return TRUE;
    & J3 g/ F$ L/ r4 j0 U2 }+ I# t
  591. }
    3 K5 {4 p6 S# c  i1 a% t/ }
  592. ) s6 o" j  Y/ C
  593. char *CRevAppApp::strtok3(char *pSource,char *token)8 k5 a) s8 F6 s0 w4 j
  594. {7 L: }4 A, D! J9 z4 [; g
  595.   int i;! B6 U2 x, y: S$ \5 o9 F
  596.   char *szRet;9 U  ~# S/ f3 v, W: o) [

  597. 1 ?! i6 m$ x& [* l) \0 E  o
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    6 e' _( G2 I* X6 b
  599.   if(sztoken)4 [8 y& b6 v* p+ O& z+ w' H6 i1 ~. s
  600.   {: v# B! D' p0 x0 L
  601.     szRet=&sztoken[itoken];4 C) l1 n' r; Z. W# ~" u  I
  602.     while(sztoken[itoken])
    - c* y6 t; @3 m% n; a
  603.     {
    ! n& a/ M9 X  F
  604.       for(i=0;i<(int)strlen(token);i++)
    ) Q% [& I; \2 s* W) q: ~/ m
  605.       {% X! |6 Q$ R3 y( c- _; a
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
      t% [+ L9 v. P; d
  607.         {) K0 Z: M5 w. K& A( x. _
  608.           sztoken[itoken++]=0;( v! ^8 N' l2 ?5 N
  609.           sztoken[itoken++]=0;
    7 i% O, y7 `' f- B- T
  610.           return szRet;
    % g$ J. A  I3 D! u; |7 c
  611.         }
    6 X4 q8 x8 M* ~0 U- C; K- A
  612.       }
    ! H2 M- \0 Y: G/ ]: x/ ?
  613.       itoken++;
    / Z' R! Q  ^# k: X. }2 {
  614.     }! @# L- g% ^9 f6 k2 F" ]
  615.   }' }, U0 ^" \/ Y% ^/ h" Y
  616.   return NULL;" G; R$ \0 P8 q$ a' U
  617. }4 \; R, V  ?/ l; m- b

  618. 6 `! o/ H, Z( e' C+ p
  619. void ProcessProc(long Total,long Current)( K0 t' T% p, P( E
  620. {3 C: n. {3 ~# @1 J; P2 P
  621.         MSG msg;" G) l9 X9 x7 a- U/ b" i& M
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    - n" m4 V( z: @" a) E1 K( M
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    3 q5 u, @% H* Q: ?
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ; D) c" S# w4 q' t0 m4 g2 x2 g' R1 }) X
  625.         {
    - I4 r* ]5 P, k# \% B/ o/ n
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ( H: B% f7 ]* _3 [- F9 N
  627.                 {# [6 A  V' F$ ?% B
  628.                         return;+ A. w# t6 Z. m: x- ?% U1 Z
  629.                 }0 C( b: |: ]: O# `. c! h
  630.                 TranslateMessage(&msg);9 \2 \) N4 N$ K  o- c: l
  631.                 DispatchMessage(&msg);( |$ d5 l0 }7 C
  632.         }       
    ( _: k! `- ^6 b3 k( `7 [% G
  633. }/ ^$ o! W3 e$ h
  634. 2 c1 X! o+ {; N, `& H
  635. BOOL bFirstChar=TRUE;
    8 j5 F$ P4 f1 |- L; t+ v; S9 h' w0 I

  636. $ v4 B1 q' Q$ T
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 r! u3 H) `: _! I! `. N1 K
  638. {
    . S. Z* ~$ B( e0 b/ g
  639.         // TODO: Add your specialized code here and/or call the base class4 W, Q8 _7 d4 F0 h* C
  640.   switch(dwProgramState)6 G" ?$ o9 U* |
  641.   {) I3 s. \# Z5 j# j$ |9 S; v
  642.   case AP_NOTHING:
    # c; [2 L& s" W5 x0 s0 h: e, f% ^
  643.     switch(dwStartUpSteps)
    1 L7 w. }8 F, h/ e& _) F
  644.     {
    4 S5 A$ w# B4 S* u) H  e3 ], |
  645.     case 1:
    # B. s' p: ~; \
  646.       {  c) w0 A, R* y+ V- i2 g6 H
  647.         int i;) O- ~' o% g% j' P2 V* ?
  648.         CDC *pCDC=dlg->GetDC();
    - `4 u& ~3 H' J. S& e8 q
  649.         HDC hdcwnd=pCDC->m_hDC;
    9 L+ z8 @9 h6 I2 a* f
  650. //        Graphics graphics(hdcwnd);
    + v% F* A7 S% g8 F! l- |
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ! g( V: H8 g1 K2 N% V' O  Q, C2 h1 _
  652. //        INT iWidth=bitmap.GetWidth();
    8 t- v* I1 K- v' V% A4 `3 f" n
  653. //        INT iHeight=bitmap.GetHeight();8 h/ L0 C8 f: P# Z; S! F, q( X% v
  654. //        Color color,colorTemp;7 e/ m8 x. ?  r6 E
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)4 J! C- u) H/ l& x# ?
  656. //        {8 L" V4 g( A+ y9 H2 n# Z# d
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    4 ^* g4 e5 o* M. [+ ?5 f
  658. //          {
    ' D$ F4 ], W1 z# g
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    1 Y+ j8 L. w  }7 {9 @
  660. //            colorTemp.SetValue(color.MakeARGB(
    / G3 x" k) T6 G' o2 y: {: @3 i
  661. //              (BYTE)(255*iColumn/iWidth),
    ; T- |1 K) Y2 X/ F& f- P. A. b0 i
  662. //              color.GetRed(),+ f/ `" V7 l( q; M) @; T
  663. //              color.GetGreen(),
    + K" O6 ?8 @, A$ t9 r3 [
  664. //              color.GetBlue()));4 Z! Y" g7 E* y  n3 l7 W: I$ Q1 d) M
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- Y. n( c5 L0 K
  666. //          }1 c4 k* v: e! E% E7 V; j
  667. //        }
    ' X/ [+ p* k+ i5 d
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);/ \: t6 B3 |) r% U3 t
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . E  y" ^3 s' e0 D
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ! v6 X1 D0 ?! S5 a' F6 C' a' |
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& h* d, F% O: [6 c2 _% P& i
  672.         for(i=0;i<240;i+=8)
    , D) \! V) {1 a. R" F
  673.         {. K0 R2 ]& Z4 u, w
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) s( R6 U9 I0 N8 G* B5 v, |
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 l  a( V, R+ u
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 Y+ J% o  ~4 b# B7 T4 i7 S( D
  677.           Sleep(33);
    6 n8 c+ P. }: z( B
  678.         }. X, e, D- S5 @
  679.         Sleep(1000);& `9 \% ?% a" `3 _
  680.         for(i=240;i>0;i-=8)  E; [" O7 m8 c# J: D: ?) p) \
  681.         {+ P4 e6 [# [, X; z& L2 j4 w
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);8 _- _* P/ G( w( B' z
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 _1 Y) o1 U% c+ `1 N7 n
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);9 g; ]* C: u! @3 H/ _8 b$ v
  685.           Sleep(33);
    6 H" _% C5 j, W
  686.         }% k5 }  N1 }0 e7 s  r0 V( G
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    6 K2 ]; ?. \  R! W
  688.         dlg->ReleaseDC(pCDC);
    , Y0 D' P2 O' h5 d
  689.         DeleteDC(hdctar);/ I4 j8 T7 J  S! M* n3 F6 m# C2 T9 x
  690.         DeleteDC(hdcsrc);7 Q$ U9 A7 e# i4 @' f
  691.         DeleteDC(hdcorg);# l! x& d1 w9 R& `# n
  692.       }
    . H, A: H/ h$ \- E1 h
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);+ i9 ]& t/ ?% X7 H, g( B$ b
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ! t: \9 L; `; n. j8 Z8 ?/ p& R
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ' Q, |# A' K, N7 u% B
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    9 p7 I' a! h& z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : }7 b. B& K3 `" P5 E
  698.       if(!Dn.Connected())* O, p# N+ k' l6 A7 n/ W
  699.       {
    ! G1 ]" k; [0 E2 k; Z: Y* x. S
  700.         dwTotalFiles=1;' l0 e  ?. E$ a7 E, o. {* J
  701.         dwDownLoaded=0;1 ~  N, x  c2 H* ]5 P( M) G  {
  702.         bSilentStep=TRUE;) N% Y# E3 ^, ~8 l& F% w
  703.         bCompressed=FALSE;3 v5 D0 R$ p$ O" Y9 [6 u
  704.         strExtLocal.Empty();
    ! A& u( h. O6 K  I
  705.         strFullName="readme.txt";
    + y# N1 E. j% R' e
  706.         dwProgramState=AP_CONNECT;
    9 q$ Q. ^/ H/ h2 N
  707.       }
      p0 |+ |: W6 s1 y3 a( y/ a
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    7 `' q; t. ^+ W* D" q3 p
  709.       dwStartUpSteps=2;' v) N6 I( ]* Y
  710.       break;3 k1 z( I, m2 e4 j& m$ l
  711.     case 2:
    * _* k: J" M! u) [" g
  712.       {
    % x; O! V( W; U' g1 H
  713.         int iEOF;
    6 @' K0 O/ S6 S: w8 E9 e
  714.         FILE *fp;
    4 t+ H7 |- B% J1 U
  715.         char szString[512];( {" @" ~5 A  j+ O( m
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");0 y2 v: f" i3 l( s
  717.         if(fp)
    6 y! Q4 `1 @0 I$ m
  718.         {# w1 [5 h5 z) p1 D; Q
  719.           do# ]& O0 i, g9 K( c; O
  720.           {
    2 d  B9 z3 b0 S% U. {/ w
  721.             iEOF=fscanf(fp,"%s",szString);
    - s' ?- w: x. |0 I- V. m0 A$ p
  722.             if(strlen(szString))
      f1 m1 j" V" e8 z; o* O& d( L% v
  723.             {
    $ A0 F4 W/ D6 e0 o$ U$ o/ D: ^
  724.               if(bFirstChar)6 l* Y4 s3 G* n2 s9 Z; N" K' `
  725.               {& s1 u" K/ p9 k& ]3 }7 D
  726.                 bFirstChar=FALSE;
    ) W% S" F6 B9 D% n! G
  727.                 bConnectIsBig5=FALSE;! Y; \6 M% b  L/ n: {! h. U$ q
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    9 o! }# b3 x7 z. V% ?" A
  729.               }
    6 q) R+ `  `. t4 ^8 `9 ]
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    5 \- e1 p1 B6 A1 [6 e
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    & D8 P7 ?$ S3 o* T7 k
  732.               dlg->m_ListText.AddString(szString);4 Z' O8 q* U6 E, q& X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( q: \% ^$ x; u. v0 a; B
  734.               *szString=0;" R3 n: i, U; z( x4 q
  735.             }8 m. n7 d0 B+ z- z
  736.           } while(iEOF!=EOF);
    . S4 i9 C; @, ?$ o6 A
  737.           fclose(fp);+ x2 n5 c: h6 l7 t5 K" e
  738.           unlink(".\\DownLoad\\readme.txt");
    $ G2 [9 Z1 {  i$ _3 Q
  739.           dwStartUpSteps=3;0 ?+ b& ?, f) E) l3 M" G
  740.         }' p4 x. {! _4 T6 V6 h$ U
  741.       }* t, b+ A; v7 i. G; m+ D: O
  742.       break;0 ]% G$ y; Z2 U+ G4 p
  743.     case 3:
    7 e1 L, }" y9 ~/ l& V
  744.       if(!Dn.Connected())
      M5 ^7 y3 I. h
  745.       {* o+ U; E/ R. L& k' r! x
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);* {, j6 g8 c/ N+ w/ U7 n' C7 X7 }- F- c
  747.         dwTotalFiles=1;( s- B, l& y5 o$ j! ^
  748.         dwDownLoaded=0;3 q  J: {1 Y" H' e3 A% a
  749.         bSilentStep=TRUE;
    , G2 b/ J- M  Y# D; T
  750.         bCompressed=FALSE;
    7 g+ K/ {, k( ?! [
  751.         strExtLocal.Empty();
    , G& W5 }- N3 ~3 z
  752.         strFullName="checkversion.txt";) R8 M, S$ }8 `3 O9 K& @- U
  753.         dwProgramState=AP_CONNECT;
    ) w4 h9 g7 L& ~/ E! ~) X. Q1 z
  754.       }& }, e- |: t! t9 S
  755.       dwStartUpSteps=4;
    * ~+ l3 f9 T# D5 J7 T; U
  756.       break;+ r6 U) ^6 H0 _' T) j- e, b
  757.     case 4:
    + T& p. ~9 Y5 R. h# q0 ~
  758.       {  G3 V5 L! z; _& i9 u# W9 s/ H
  759.         FILE *fp;
    ) R% v/ B1 K3 X5 l. f- p
  760.         char szString1[128];) s* r5 {: a+ Q+ d
  761.         char szString2[128];
    / m2 _) r8 k1 C2 o
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");. E; [+ g3 ]- y- E& n( Y
  763.         if(fp)$ |8 e6 ^! s4 \. n3 u+ c
  764.         {5 u  F9 X4 q4 S5 t* o
  765.           fscanf(fp,"%s",szString1);
    / }4 {0 B' V9 u. r, J
  766.           fclose(fp);
    # Z( _5 d5 x# [' i
  767.           fCheckVersion=atof(szString1);& C: ?. @* r5 D
  768.           fp=fopen(".\\checkversion.dat","r");; s) H8 ]* [' a( \* b
  769.           if(fp)
    # H6 O6 q0 T: l% I& o( A
  770.           {5 I( z  f) q. {
  771.             fscanf(fp,"%s",szString2);* ~9 m: }3 }' Z8 {2 J: X7 c) `
  772.             fclose(fp);. |" n0 q- C4 O
  773.             if(atof(szString1)!=atof(szString2))! t7 i4 G9 @" Y. o/ g1 L2 p) U0 I
  774.             {7 ~- o0 S+ D% n( B; C
  775.               if(!Dn.Connected())8 n( f3 P: o0 t0 C2 D+ v3 I
  776.               {
    % A1 P, o0 X8 r' S( f. J
  777.                 bFirstUpdate=TRUE;
    * g2 x  o8 L# A& Y- q; Z+ L7 L
  778.                 dwTotalFiles=1;* N8 ~& f6 I% t* @
  779.                 dwDownLoaded=0;2 E- D( ]% k& \, V  J
  780.                 bSilentStep=FALSE;* k- ^3 e% N7 Z- f8 M- O8 b, I+ K7 r
  781.                 bCompressed=TRUE;. B$ G4 A4 _3 H
  782.                 strExtLocal=".\\DownLoad\";
    / F- C) M: l4 M+ T# I
  783.                 strFullName="update.txt";5 E; e, R( X6 }$ J" j
  784.                 dwProgramState=AP_CONNECT;+ @/ V* T/ ~+ I  g7 A3 N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! z; J8 h, D1 j3 {
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 I3 ]7 T7 ^, h' ]7 J9 V- `
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");6 ?9 b1 ]( P1 A

  788. 7 Z4 j; q* b! Z- j$ {# g; @$ n
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 q0 H, Z, s. h5 \1 q
  790.                 unlink(".\\DownLoad\\checkversion.txt");- R0 D9 X8 d# h" q+ I
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)7 t  x3 B. g& a8 b5 m5 o0 K
  792.                 {9 t* e4 `# y( O4 C7 W9 v) C0 Y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( A; I8 ]5 k/ Q* e# ?7 I- s
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ( R% l* e' J5 [" z& {
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ' d4 Y( m$ ?: `- k' g& h
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# B2 W3 |: w) m  S

  797. " c% E! B$ D$ ~* b* i$ c, l8 _
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & N8 I1 P5 z# F
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % i5 ?9 r# D& J. r
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");$ C  [2 y$ {8 r# @! f( x% v
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : ~8 b$ }7 v$ j% q* C4 V6 A6 i4 M
  802.                 }
    * U6 m: b. C. o
  803.                 dwStartUpSteps=5;, R7 j0 g9 W6 V
  804.               }
    . y  K) ?8 D0 ^9 p9 [. l- p5 \8 W
  805.             }
    3 z8 A5 B; ~- Q$ d. V7 _  g
  806.             else
    7 w! {5 N1 V8 s: L
  807.             {
    8 M/ R9 w: A  v8 t
  808.               unlink(".\\DownLoad\\checkversion.txt");' L9 A& ]. ?/ s0 s3 T0 q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / k4 U" C( u7 F- z; P2 d0 I
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");1 }; U2 ?9 R$ D2 ^
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");/ C$ S5 r' g* }7 z5 n2 T

  812.   ]" e' _8 k: H
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- @$ g# T. l, Q! J+ M
  814.               dwStartUpSteps=99;; v7 A9 W* p# H; W. k& O
  815.               bFinishUpdated=TRUE;$ i4 p3 ^* B( Y4 m
  816.               bCanUpdate=TRUE;& H3 Y, M6 l& k3 Y7 x# ?5 d8 C4 I
  817.             }2 F  y2 d7 V8 V6 E5 X0 t
  818.           }$ r/ G; }: W2 ]0 A$ Y3 `, S% u
  819.           else
    1 n) ~, N' `6 U' V6 M( t& {( h
  820.           {/ G( t, t9 ~5 w9 W( J
  821.             if(!Dn.Connected())! d9 y$ E+ I; _- h
  822.             {
    $ x# \- P- L; z! D7 n6 V: [
  823.               bFirstUpdate=TRUE;
    & w3 L5 p' j/ A( ]  c/ ?- U9 [
  824.               dwTotalFiles=1;
    / M/ k4 A# e5 ]2 y& g
  825.               dwDownLoaded=0;
    ( @; o3 q$ j7 y( ?$ ]6 p
  826.               bSilentStep=FALSE;3 n0 g+ G" [! Y4 F9 l( {* P
  827.               bCompressed=TRUE;; v. S, M2 M* [& \/ ^% ^
  828.               strExtLocal=".\\DownLoad\";
    2 c$ M: ~4 s* Q# N" a! h, F
  829.               strFullName="update.txt";
    + w1 u4 H, r" U( X. M" [
  830.               dwProgramState=AP_CONNECT;
    1 ~0 u: Y3 r5 |1 J3 ~
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) a1 l2 a8 i! g3 I3 V' P9 p7 m
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");$ U* O7 [5 ?- `
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");# [- O1 K( Y/ @2 L+ q: X
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ N6 g* r1 s* a8 e) l' D
  835.               unlink(".\\DownLoad\\checkversion.txt");8 s8 {$ |  u2 U+ u4 G
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)& J- k+ R" R7 B6 t
  837.               {# o* d9 M" S! h! A% u4 n) D
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 ?: h' g: f" f  c: [
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");- ]9 l6 ^9 g- D" Y1 H2 Q
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");4 l$ n% N* p+ e4 |4 U/ j
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 B6 b' |9 l0 g1 R
  842.                 4 t7 F4 A9 R( ~) E
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");" m# m: Q( `# \  J% L
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. l, w1 c/ v) y+ }* {
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 T  @, r: W0 p6 M: X
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - a6 _4 T2 R; S
  847.               }
    5 R" V/ ]2 z2 ]. V: o
  848.               dwStartUpSteps=5;
    + q; v/ h' ~: r
  849.             }( O6 y3 ~% U/ b! t9 t* ~3 X3 k
  850.           }0 }/ T" b  h* o- T! V1 ~; Z
  851.         }  Y2 B2 v  Q! u$ y. X
  852.         else0 e! j- b4 D  V0 f1 ]
  853.         {
    8 @- A+ W" z# e. b' V( G% s
  854.           dwStartUpSteps=3;: o" q/ I$ L6 E3 o) y) A) o* [
  855.         }
    % x0 O5 R6 t% Z8 j9 I
  856.       }/ M" x3 ]( D8 ~; D3 p
  857.       break;
    3 W- o) k! a; }3 U! Q0 M7 ?
  858.     case 5:( k  _: X0 Q6 m% T/ l; g
  859.       {) g. B0 Q/ \$ K" x$ `+ K% c$ m
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)" \2 ?7 r- b% o
  861.         {
    * C/ m/ |, C/ Q+ X2 ]
  862.           int opt_overwrite=1;2 D$ t; L' B* I: p, f: ]& `  h
  863.           int opt_do_extract_withoutpath=0;0 _; N0 g" `& `) H
  864.           unzFile uf=NULL;
    3 z: G' z) ]% @+ r. K1 M- _
  865. " U! ~8 W- `' B1 |$ E( y% \1 a( m& Z
  866.           uf=unzOpen("Wsa.zip");0 {. n/ k+ [5 M1 t8 Q" b, x1 J
  867.           if(uf)
    3 W5 u) W0 }# n; B7 v
  868.           {
    . ^& D1 W+ G1 @4 G
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    7 o# H# `/ p- C) _! j
  870.             unzClose(uf);
    ) p: U/ \" k5 y2 f9 F
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");' j9 P+ X0 o! K! g, |) g# R& v
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    8 v. Q% J( P4 _; L* J
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    $ Q. I3 c" D( L/ |, k  n4 q
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( {4 \- U. k2 z0 ]7 n
  875.           }
    6 A. L! D: _- R9 R9 v6 Z) R
  876.           DeleteFile("Wsa.zip" );* f4 I4 P* M2 e* v( i. U
  877.         }7 ]0 r( |8 u; t& K/ {$ P3 d$ o

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

4 m# `; j) ]+ d

評分

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