找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
( ~  m0 W# R0 ]: W- }0 w
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ( m+ r  F& U! C
  2. //$ y: ?% _- o; F/ Q) n
  3. & G0 T# N  R" i& e$ k
  4. #include "stdafx.h"
    : s' w# }" o- k. @
  5. 2 ?; K; O) D1 n5 f8 f
  6. //#define UNICODE
    ( S/ V8 V# I" _5 L4 C, ^
  7. //#include <gdiplus.h>% H7 ]1 |' W$ t) [' g: _
  8. //using namespace Gdiplus;
    * p5 l- q6 z6 _
  9. + K+ R& F+ g8 t
  10. #include "RevApp.h"
    7 L  L2 ?( S2 G$ j& l5 D5 ~$ B
  11. #include "RevAppDlg.h"2 L3 B5 A) Y9 F0 K

  12. , P* ^" R( a& G, L5 y1 H0 k) M
  13. #pragma warning(disable:4786)
    ( ]- e. g# c' J& H6 l8 ^
  14. #include <map>
    * r- c; P4 x% u
  15. #include <list>
    6 {0 U# D8 w3 A
  16. #include <direct.h>
    . q4 @; u7 Q) F+ p5 n

  17. 8 x) l% m" ^2 L4 q) O: K9 b
  18. #ifdef _DEBUG
    0 N( j* |) y: ~9 q) H# k1 U0 m
  19. #define new DEBUG_NEW* j% [7 P3 T, r: k. c# o" m
  20. #undef THIS_FILE4 n+ s* I* f2 ~
  21. static char THIS_FILE[] = __FILE__;4 Q' _6 z1 G/ i4 v, @
  22. #endif
    . |3 Z3 U% x3 q! M9 n9 n2 ?% j3 h
  23. #include "SkinResDef.h") d' W8 ^# J; c; V
  24. #include "ChangeBG.h"# `; D- _8 A+ Q8 ]1 @
  25. #include "AFXINET.H"& Q6 |& Z9 _7 J6 M

  26. 3 q: b9 n' N: ^5 F
  27. #define TRADITIONAL_CHINESE 0  a: @# S2 i9 X
  28. #define SIMPLIFY_CHINESE 16 A- R; Z/ F# m* b% J* g4 R$ u2 Q
  29. #define ENGLISH 2; k1 _: I; |: C5 E
  30. int m_iLanguage = ENGLISH;
    + g$ R) r$ m3 _& T- u- T
  31. /////////////////////////////////////////////////////////////////////////////
    : i6 V9 C6 c( l1 _
  32. // CRevAppApp# O7 Y. h& {; k. }. X1 Y- V( B8 I
  33. $ B4 I% X7 D7 `4 G9 u" j
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    8 V% B+ ^5 V& n9 O
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    " e5 K) a7 _+ z) C; i. S  Y! {
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    , ~. b( Q9 Y3 M! B; j
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!( i! y3 i' \4 U* B, ]( K
  38.         //}}AFX_MSG
    ( ]# s; U. b8 i( G
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    # m2 P0 D) c* j* `) v
  40. END_MESSAGE_MAP()
    " c- n5 q' Y( N7 K: l. R! J* ~3 y
  41. 9 T; L& l, ]# @& _
  42. /////////////////////////////////////////////////////////////////////////////
    3 \5 A9 H6 ]% a
  43. // CRevAppApp construction
    ( L2 F" `9 f  O& e( E9 o

  44. 9 I8 d* M) G. V6 \4 r2 S
  45. CRevAppApp::CRevAppApp(). C8 x" C1 z- m3 a" `0 X$ u$ J
  46. {2 Y/ j7 F9 o" r- w5 r5 o1 W
  47.         // TODO: add construction code here,
    0 {8 m% J' `' S( b9 I
  48.         // Place all significant initialization in InitInstance( Z! \9 m6 l! g
  49.   bDisplayIsBig5=FALSE;
    ; l  Y3 K2 D  X. T5 p( K# D
  50.   bRestartUpdater=FALSE;3 K! {3 A8 m' }7 m6 M
  51.   bFinishUpdated=FALSE;
    7 P% y+ `' B' @) \2 ~
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;& o! V' T( T$ R# m) K
  53.   InitChangeDataBig52GBKS();
    6 L3 o* n& e$ b( f
  54.   InitChangeDataGBKS2Big5();
    6 j, Z: t7 C+ d8 k; m" V$ w0 T
  55.         //+ O# s6 H1 X; Q2 l
  56.         bClickRunExe = FALSE;7 O. `4 W0 X# D, Z5 o6 z0 A4 {5 A
  57.         //
    ) R* Y" B3 q4 n  Q
  58. }
    . G1 |; O9 O2 W* g& d5 z8 \4 z4 B; [3 z
  59. - W7 n& D! H9 ~2 g& k8 b
  60. CRevAppApp::~CRevAppApp()
    ) O  u; u2 P- B6 \$ ]8 f/ J! U1 ?
  61. {
    + V- I8 D5 J2 {3 r
  62.         // TODO: add construction code here,0 `6 G1 u9 m! y+ S# r
  63.         // Place all significant initialization in InitInstance
    ! s6 O7 w8 x$ c, U/ M
  64.   EndChangeData();
    1 c( N5 O+ X) Y8 b# I# X6 e# W5 u
  65. }
    - @$ K; O9 o# e; f
  66. - N$ j# L5 j  v- a3 O8 [
  67. /////////////////////////////////////////////////////////////////////////////
    4 X% `+ C: k5 P: F1 o
  68. // The one and only CRevAppApp object
    8 p# i) z) C8 x- c! A6 \4 L' _
  69. + R" I8 I- {9 i  K3 D
  70. CRevAppApp theApp;
    4 r8 ?$ Q1 l& V" G

  71. 6 h# j% w$ A2 |; v
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ' {2 ^( ]# F6 h2 w7 C" G. e, D: k
  73. {5 }; ]0 j; o& v! O# F; y
  74.   int iEOF=0;
    * i; X& o1 ]: O! `
  75.   char szTempName[MAX_PATH];
    " c- g& a7 k" G7 H; |( V
  76.   *szFileName=0;% Q3 S7 M: d9 x$ e* G1 m3 r
  77.   iEOF=fscanf(fp,"%s",szTempName);
    1 G% }& f3 g0 V7 `% W
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    3 U: G' U5 \% I  l
  79.   {9 M/ G0 w( ~- m8 w, b3 d
  80.     strcpy(szFileName,&szTempName[1]);/ [& ^, B4 m6 l: _
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & _) X0 p0 y- n" m8 Z
  82.     {2 ?! N" X* v8 k
  83.       iEOF=fscanf(fp,"%s",szTempName);3 t. F% s! Z& K  I  I
  84.       strcat(szFileName," ");
    : f& D5 ]7 I' X9 `, k9 }
  85.       strcat(szFileName,szTempName);
    # t0 I1 {0 \# A+ v$ z' ?5 J
  86.     }( d2 y, I3 A2 U9 c7 ]
  87.     if(strlen(szFileName)>=1)
    . v, B  i* J" G6 T
  88.     {
    - G/ C! w$ m" s2 U4 T
  89.       szFileName[strlen(szFileName)-1]=0;
    9 ?: k; u8 [8 q! T2 q8 L: O* S
  90.     }
    : n3 y* Y2 }& @6 p. ~/ C8 O5 a
  91.   }0 t6 o8 k1 V- Y/ \$ m) G
  92.   return szFileName;% O: o+ j  N5 y
  93. }
    : _0 p% |* j( I( u! T+ t+ @
  94. ; K& I: [1 i! l9 b/ j$ E: B
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    % u/ U+ n$ l, b! F0 O( B) b. s4 x
  96. {3 {6 w9 m8 }: u  p
  97.   FILE *fp;
    # r: Q" i7 V1 X4 I$ d# {) C
  98.   char *key=NULL;
    + d' e" s+ ?0 \  \* V
  99.   char version[MAX_PATH];
    + z  Y& V' X8 _# d
  100.   LPUPDATEFILE file,olds;0 C, ?) i& M, b6 V0 T$ {
  101.   std::map<CString,LPUPDATEFILE>::iterator p;4 E" e) I  m3 J7 _: C( q# r

  102. ! R. b4 b) ]- D! V: D4 H
  103.   UpdateList.clear();
    ) m& Q0 v0 A" w* @) Z+ o# M! x
  104.   UpdateFile.clear();& |" d# O% p* k8 c5 ]! v
  105.   if(GetFileAttributes(filename)==-1) return false;
    9 D& u1 K9 K- Z1 i) j
  106.   if(!(fp=fopen(filename,"r"))) return false;
    3 t7 G; v) ]6 t& ~
  107.   fscanf(fp,"%s",version);
    . d5 K; s: C3 I# U
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }. q/ W" s# N# p9 N0 ?/ U7 h0 ^, B
  109.   while(fscanf(fp,"%s",version)!=EOF)
    1 O5 U: P' q% t- U1 E& X' ~
  110.   {- ]! E, [1 \7 L6 E( R5 S2 ~! D# b
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# S. d) Q' \4 d1 G/ `6 L
  112.     fscanf(fp,"%s",file->path);( R" g: {( B( o; g: j
  113.     ReadFileNames(fp,file->file);
    . G1 T! u- ~! G# F0 k
  114.     strcpy(file->full,".");* ?$ r4 [+ P+ n1 M" U
  115.     strcat(file->full,file->path);
    / D9 y. x/ g5 B) r# ?
  116.     strcat(file->full,file->file);4 Q3 C+ c% k" a; M. F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()): p- [3 t7 ^, u0 v- N: O* O
  118.     {
    $ ]' X* H! K, e: W/ e
  119.       file->vers=(float)atof(version);
    ( h7 _" H' }, |! @1 G* q- o& W
  120.       UpdateList.push_back(file->full);6 I3 g$ z& _$ s# X$ V  w  K
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));8 W% D* j& t$ Z0 R* {/ Z( ~8 n0 b
  122.     }# q% N! ^4 D+ L1 @
  123.     else* T- |! v) x5 R8 g4 `( h- I
  124.     {
    . E) r2 Q6 n* p' r; I. ]- g
  125.       olds=(*p).second;) R( E: s, Y# Z' Z
  126.       if(olds->vers<(float)atof(version))! R7 _) E! R  w- @
  127.       {
    7 R. q  B& u, @4 k. N) z0 x
  128.         olds->vers=(float)atof(version);
    ' I$ O7 |- k2 }0 G+ V0 P
  129.       }
      L# A+ p7 g. t: r0 C) {' S7 Y, {; n
  130.       free(file);4 `2 P# X/ ~% W- q
  131.     }
    4 `5 v) W) w! q, ^% M
  132.   }
    & e: y- Y! W7 b* K
  133.   fclose(fp);
    6 _0 |. x: W5 d0 g' H
  134.   return true;
    , O$ ]1 i7 s* l! Y! N2 X' E
  135. }% |" V* }) d: c1 p$ @, k
  136. 4 d6 Y# p0 H' H% X5 D& b
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)% d. k5 n5 w% R+ I  E& t3 \' J
  138. {6 A! L+ V9 y8 F$ H8 q  Z+ q( |# b
  139.   TCHAR  szFull[MAX_PATH];6 F/ q1 P9 i" W+ u) {1 ^
  140.   TCHAR *token,*inter;
    ! Q) u3 h5 _9 W- y3 x: C2 g
  141.   *szPath=0;
    7 j1 d+ O7 F7 R' _  f& x/ g
  142.   strcpy(szFull,szFullPath);3 g- M1 E- V  \
  143.   token=strtok(szFull,"\\/");
    ; K; l5 l# F" a7 C7 p( L
  144.   inter=token;
      o# a# Q3 U) I  U7 \
  145.   while(token=strtok(NULL,"\\/"))9 Y* S% F4 q8 M  ^& {
  146.   {
    ! U/ a) O' m) K/ m7 |! ^2 ?; o
  147.     strcat(szPath,inter);
    ; \6 y: k/ ?/ v5 A  e
  148.     strcat(szPath,"\");
    2 B! K0 C, q( W# }7 ^
  149.     inter=token;
    ' O+ \9 q! V& [0 P9 t" `, b" G* Y
  150.   }9 J$ t! ~2 y$ l+ p
  151.   return strlen(szPath);; ]5 g, B' N, H! R% H0 g7 d
  152. }
    2 q$ D+ G) ?: r3 k- Z3 Y

  153. 0 J* ~6 {3 n: O/ f# J
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    , q) {) e- r7 B$ t
  155. {
    2 A8 V7 r. K$ a" ?
  156.   DWORD attrib=GetFileAttributes(Target);
    , M' {' p. C: _2 M  N
  157.   if(attrib!=-1)- N8 K2 i* n8 {8 U" r8 S6 v, o' {
  158.   {
    - Z2 M- I5 J; R- x+ r+ b
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    5 z1 u  K- t2 G) H5 R& k" c
  160.     {
    0 W: D" o% ^! D
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);( g& z% u" J6 C& C
  162.       SetFileAttributes(Target,attrib);: C( o$ d- `. j, d
  163.     }/ [% R; m2 z" I
  164.   }1 f2 D' m% C0 z+ y- [1 `
  165.   CopyFile(Source,Target,Erase);
    4 T. \0 U2 y" b$ Z3 A/ |
  166. }" T4 C+ w7 |. A

  167. ; D8 e( y+ M5 O6 G. ]# S9 x4 q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    4 ^' t" u3 E$ R# b8 e* L
  169. {
    ( V% i" o+ ]5 f2 h
  170.      FILE *fp;1 m6 z% z) E+ Q* S
  171.      char  szBuffer[8192];  v# Q4 {8 I' Q1 w
  172.   va_list  argptr;
    ) T, P4 J8 c7 X  p; a0 r( G

  173. ! |! r! r. Q- \( _' _" p# w! L3 U- G5 r
  174.         va_start(argptr,message);. ~2 w) ^2 i) f. ~9 ?- v
  175.         vsprintf(szBuffer,message,argptr);
    , H# i" C) Z, K8 y/ o3 i
  176.         va_end(argptr);
    8 S5 A6 b  J  @0 ]' \
  177.   fp=fopen(FileName,"a");
    2 {- P$ W* E+ l% }- z
  178.   if(fp)) @& U: R  l3 d& C* B, N
  179.   {
    1 x4 \4 m9 ?: V4 K; K4 {
  180.     fprintf(fp,szBuffer);' s" h7 ?" Q9 M' G3 J- k; A
  181.     fclose(fp);1 u5 _0 K9 z. L4 j) ]7 s+ R0 \
  182.           _flushall();
    1 E; X. u  O) M
  183.   }) [- n. E% V$ I, C4 j1 z* A
  184. }* z& ~1 i/ s! j

  185. / }/ H3 L& a. X! N
  186. BOOL CRevAppApp::Fclearf(char *FileName)/ _/ l) d  e  m5 [  U6 M+ Y
  187. {
    : e( ^" H$ S8 w( R+ C) I
  188.      FILE *fp;  C! a! o" I) q5 }- C! W
  189.     DWORD  attrib;1 C8 y7 F) q" b1 H& F; _" Y' {
  190.   attrib=GetFileAttributes(FileName);' @+ q/ R+ G, h7 t3 @; l7 y8 p
  191.   if(attrib!=-1)/ a) _( N* H, L+ m4 }% c
  192.   {
    2 {) V" V: p& m6 y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ' C1 M0 K- U: l/ K' ~! U# Q
  194.     if(!SetFileAttributes(FileName,attrib)), }& T% I# y: Y' d) l& o) e) {! A6 P
  195.     {- r2 [8 j6 k: o9 F/ f& o8 O9 z" L2 e
  196.       return FALSE;4 ~; B! }! g% w; T, }6 d  y1 z
  197.     }
    2 u5 n1 Q3 ~+ S9 w  m% T
  198.   }
    5 K0 x% n3 n% {& q
  199.   fp=fopen(FileName,"wb");, X4 J/ D( q# x1 X  b" d+ m; E
  200.   if(fp), h1 |$ L1 y4 L6 V& N
  201.   {: @( N9 D+ a+ D( |4 i: _( M& h
  202.     fclose(fp);
    / T3 S" T/ v: u* j& A3 P
  203.   }/ N0 f( b7 f- V6 ^9 \! w
  204.   return TRUE;+ c" A: {6 @3 y: L
  205. }
    - t) ^9 L7 E) h

  206. - w( X/ N* \* [' R+ N: a
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      W# m, q' `4 E- w- l
  208. {4 h5 n; b" K& n' q9 C, C9 e
  209.   char filename[MAX_PATH];
    , @& g, r" y4 s0 ^* B  T& L2 v
  210.   LPUPDATEFILE file,olds;
    9 U* X5 S* S+ {! l" ]4 N
  211.   std::map<int,CString>::iterator i;# c0 q/ [0 C! S3 J% r; r' r  k
  212.   std::map<CString,LPUPDATEFILE>::iterator p;$ Y( X" w1 S8 q) d9 R+ M8 D1 @1 D
  213.   std::list<CString>::iterator l;; X/ l9 q, X1 C* [, w& n5 Y6 y. z" n

  214. ; c0 j# [. }3 t( ~) ]) u# y
  215.   if(bFirstUpdate)  |' u2 ?! p' m( G( H; m) M
  216.   {
    $ n: p" n* f* ?% x/ M" l, w
  217.     dwCurrFile=0;) }$ T1 T7 g4 K& `
  218.     bFirstUpdate=FALSE;8 M% w# o  p+ n- u4 R" h% }
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 x) d7 [/ Z6 F. h1 z1 }0 v" W
  220.     {# u! T  v" ]$ L9 L) v* m
  221.       dwTotalFiles=UpdateLocal.size();
    " u/ g' c7 r* V% e! f
  222.       dwDownLoaded=0;' u9 o' D) ~0 j. T8 z; ]
  223.       bSilentStep=FALSE;' T2 X5 q6 r. R; O" E) H& h, h
  224.       bCompressed=TRUE;9 y" N, S1 j9 R* j# C0 W
  225.       strExtLocal.Empty();: ?/ t2 b& i9 c7 Y9 l- g
  226.       strFullName=(*i).second;
    & M3 c5 v: h+ J$ F" X
  227.       dwProgramState=AP_CONNECT;( i% b; }8 D; T, @! S' ~* R. ~+ f
  228.       return TRUE;
      _& j( ]0 S) U* s
  229.     }
    ; p$ N. d9 v0 `" K
  230.   }) X: ~5 ~! q- C; V6 H" M" I
  231.   else if(bRestartUpdater==FALSE)# T$ b. I+ ?  n: ~
  232.   {2 L1 m. B- O/ d% m
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    : B0 V8 c! j6 G+ _3 z, F6 O+ l
  234.     {
    / a/ B3 f0 \: a+ h( B
  235.       file=(*p).second;: s3 J, o+ j# n# Y) ?# q- G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())1 n& x- Z8 Y) o5 y9 y
  237.       {
    0 y1 H( l5 I4 O  a2 A
  238.         olds=(*p).second;) S* w6 b$ ~; E- x
  239.         olds->vers=file->vers;+ A: C1 l  k+ l8 `4 p1 v& f
  240.       }$ n, D3 i* X# G2 E2 |
  241.       else
    7 ]4 b8 l5 ^% j+ n- k% f: I# Z+ c
  242.       {
    6 ?; L& d! ^" B3 {
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . t# C5 @6 K# f$ T
  244.         memcpy(olds,file,sizeof(UPDATEFILE));  }' r3 G* j, V7 K  ~, }
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    3 z0 g  g/ h: D, \5 Y% Z) x
  246.       }
    ( e* ?8 p  n4 ^6 S, K
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");: l6 p# C* }5 C/ k& D
  248.       sprintf(filename,"(%s)",file->file);
    ' w- P! t5 }' N* I# r' Q# l/ T
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " `2 p7 X% |) ]1 U3 r
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }1 A! m2 W/ A2 K6 E! ^
  251.     }
    1 x, L: v% \1 G, _6 {7 o" V& p6 ~
  252.     dwCurrFile++;- ~  g- b; ^, U5 f
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    9 J# {2 }) P4 t6 b: a* X' ~
  254.     {
    % c  h+ W7 j. n3 o
  255.       bSilentStep=FALSE;. [2 b* Q; G1 @$ v# A( s
  256.       bCompressed=TRUE;% a2 s" R6 [6 ]% V" p
  257.       strExtLocal.Empty();
    " X; k" ~. T6 S1 ^9 k
  258.       strFullName=(*i).second;
    5 ?! y7 b7 o( a. K( }
  259.       dwProgramState=AP_CONNECT;
    3 t3 a/ t  D! Q5 u
  260.       return TRUE;
    5 o. N( O5 T. C1 u3 R; N8 N) ?
  261.     }! \. }% Z9 I- f  W% l1 X
  262.     if(!bRestartUpdater): |' L) ]+ E$ H5 l+ r9 E, [
  263.     {
    8 D4 b( D, @; w0 L2 P  O
  264.       int iCurrSize,iFileSize;
    6 e: U2 A4 A% b: D' e$ ^9 C
  265.       iCurrSize=0;7 t7 g0 Q6 y9 {, C4 [; E) X2 b
  266.       iFileSize=UpdateList2.size();
    : C1 U- I9 q5 X- D3 d( f- |5 B$ c
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
      I  m7 E5 l7 A$ q0 h
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");  q$ ]' x7 d( I
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    $ K) p8 I5 M0 i1 [. i3 m( u. ?4 j% M
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & v. J6 Y+ X  m* q& x: D
  271.       Fclearf(".\\update.dat");
    8 v( d* S( I( I2 I1 h$ F
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    9 _% ^0 G! y, r9 j* q7 w
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 x( U5 p* S( J, a2 z, d
  274.       {- V0 F. R) S# G  z& ]; u% q1 D& }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& l* G. P; t" _3 |' H- C& e7 R; o. j4 t
  276.         {  r! l% ~' ^- r6 L' M& O# q7 z
  277.           file=(*p).second;2 {( w" y4 u( z) o9 u' h. W9 A
  278.           sprintf(filename,"(%s)",file->file);
    $ B/ O- C1 T! ~! E9 h, a$ s+ e& A
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 J, W  l5 J3 R( Q
  280.           iCurrSize++;0 N2 o6 ?' n7 d8 N9 I
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    4 C& A3 S! |; C
  282.         }0 @5 Q0 Z+ W* ]1 ~6 E
  283.       }4 k& V+ i; Y8 g; i" s
  284.       unlink(".\\update.txt");3 x3 ]7 F' w) L' z3 p
  285.       unlink(".\\update.tmp");
    ' M+ L0 P7 w$ ]
  286.       Fclearf(".\\checkversion.dat");/ r7 @0 i( ?4 \& E# _
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);  n1 y9 K1 A' o- V6 u
  288.       if(UpdateLocal.size())
    4 a7 @+ G$ N& G
  289.       {) a: G" e% |  H  M. Z
  290.         UpdateLocal.clear();  K& c9 ~/ z  l3 Q
  291.       }) X: D" r6 r6 V
  292.       if(UpdateFile3.size())) {) q4 l* L) X: \: b
  293.       {/ O$ h& q8 ?5 F& L
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # V: A0 m, U: `3 r5 {- M
  295.         {
    - h7 O% v' o* K1 W6 q
  296.           file=(*p).second;
    : T' m1 P) F; A& @* h
  297.           free(file);$ L4 |2 W' Z  n6 E; z* t9 j' a
  298.         }6 c+ q: p- |" a5 q* ?" t. C4 V' b
  299.         UpdateFile3.clear();6 R. Y, P0 e% n, c7 ~/ m2 N, u
  300.         UpdateList3.clear();
    - P5 _4 ]2 `1 b3 a8 [
  301.       }4 T* e8 {% w5 f# u) n; x3 N
  302.       if(UpdateFile2.size())  P5 m  E5 A2 N
  303.       {
    + i3 V8 r! r, _( m( m
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)4 @) L) z7 `# M; B" E
  305.         {
    , M( i, \5 }" B: B
  306.           file=(*p).second;6 O% D& R! a! v" H+ W
  307.           free(file);" z$ l7 e# Z  Z
  308.         }
    - H4 B) o4 f& j& d% F5 h4 ^7 C
  309.         UpdateFile2.clear();2 x! `& M1 o% }- x: s
  310.         UpdateList2.clear();
    ) w7 c( y6 n6 Q/ U$ I
  311.       }6 t4 @0 @: u* h4 A( T! U. u( @
  312.       if(UpdateFile1.size())
    & k" c; w+ q. n) H' f! U& n. n
  313.       {
    , Q% d) ?2 B6 E1 ?  I$ V; o) k
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . C+ d! J; Y& @2 G
  315.         {3 S5 e7 v: `8 M& t. J
  316.           file=(*p).second;
    $ |9 }; }0 `' I3 x4 R" f: Q
  317.           free(file);
    3 a( x3 \' V  n0 ]3 O8 b8 z. v
  318.         }. K* i7 B  H$ a1 U! Q
  319.         UpdateFile1.clear();1 p6 B7 g- I( \; v
  320.         UpdateList1.clear();1 V. S0 l3 \! Y- r! @5 n
  321.       }5 S: C( O- g$ u0 k  Y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    8 n3 n& B9 y9 X/ S. S$ Q
  323.     }; J% f7 i* Y! S1 N, B3 m' r
  324.   }
    ) W) Q$ k6 l/ ]7 w% S, M) R
  325.   return FALSE;
    3 N8 k- y! V+ c4 _
  326. }6 B. o; M$ K0 e; x# n
  327. 1 S4 n4 F( Q$ j7 q( d: `8 Y
  328. void CRevAppApp::ClearAll(void)
    7 X0 s, U7 ^- D/ P- J
  329. {5 o5 z9 t' ?* X2 t& z
  330.   LPUPDATEFILE file;
    & l$ c3 I" r. D. ^% e2 M, v" ~
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( j  A1 x. }5 ~; D
  332. 0 \( {9 _. x& Q5 g' t6 v
  333.   if(UpdateLocal.size())3 N* D' Z( v4 W8 q) l; t5 W" [) h7 M; G
  334.   {6 |' P# k( Z0 ]; I7 h
  335.     UpdateLocal.clear();3 O9 |- @6 N1 ~, n  q
  336.   }
    , ?2 z4 F# s# ~' S& u# J
  337.   if(UpdateFile3.size())
    ' k3 X9 n1 e6 H0 c: d
  338.   {: u+ Q! K  O) d3 Y' X. w& e9 m
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)& R! `. _8 W& ^5 Q8 S  M
  340.     {- x4 _+ t6 h8 K$ j
  341.       file=(*p).second;; ^8 Y9 m% E5 L% s" ^4 n
  342.       free(file);2 f/ D. @4 W4 o5 M4 V2 p& k
  343.     }( M% i5 y8 l4 \2 X$ [6 o
  344.     UpdateFile3.clear();9 P$ l+ G( b9 M! X5 n1 w/ x" q5 f
  345.     UpdateList3.clear();7 e* z) c7 d+ C' s# `! c
  346.   }& n& C3 g; x* T  v+ A4 D
  347.   if(UpdateFile2.size())
    6 r; K; r* l; w. u: x
  348.   {
    % @2 n5 ^; i+ \- p! J5 d
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 x% l7 ~. o4 V& d! G
  350.     {/ f1 T  D- D& L. Q" a  j3 r+ o( @
  351.       file=(*p).second;
    - F1 p# r0 J2 Y0 d2 w' e5 h: a
  352.       free(file);
    " a& y! ^& y. y
  353.     }
    8 ~7 t3 I5 I; c4 V  L
  354.     UpdateFile2.clear();. r4 g1 ?0 S. b+ `1 e
  355.     UpdateList2.clear();) Q* f6 g/ \2 F8 j- B4 s) x
  356.   }7 i/ v/ C9 j  W0 n
  357.   if(UpdateFile1.size())
    # q* \4 S- ^  a- ]$ p
  358.   {* }" U% I$ C$ J- M1 m1 w
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 B, ~; M6 F6 x4 I! l
  360.     {
    6 @- r: E% _+ z- @+ z( [
  361.       file=(*p).second;
    , @) N1 p. J8 x
  362.       free(file);( a8 R- l1 R) i5 i" @* ~! m
  363.     }$ V# z& H4 c+ Z$ \
  364.     UpdateFile1.clear();! ?, `/ q3 Q' _: W5 a
  365.     UpdateList1.clear();
    - }6 R6 {5 d( Q, L2 l9 Y
  366.   }
    " u( m+ R& w+ Q$ m& f' M' n
  367. }  & L, R2 g; Q% |9 h
  368.   
    & I1 e) c) R9 R( ]9 s) Q
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 _4 V. m/ }6 `" `" s/ U- I
  370. {
    3 u: u! |$ z8 c" f- K
  371.   int c;& R! l- O4 A0 @5 J$ |  {& w
  372.   LPUPDATEFILE file1,file2;
      M9 b7 @- a1 w0 P
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    9 n$ P/ b; R5 Z: D* E
  374.   std::list<CString>::iterator l;$ G& n& u: [; K# [1 ?% \9 w

  375. 4 h* Q+ Y$ K* y! x3 i  o( v
  376.   UpdateLocal.clear();; |6 B6 @" D' v* d# e
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);/ `7 \0 |" g/ ^: m6 x0 e  J$ j% D* H
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);; L( s7 T% E+ ]* b( n% c3 r2 N4 K
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);3 T$ R+ ~( W5 X4 i; c: n
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    - \- T8 V2 M0 U4 ^* ~  r  E
  381.   if(UpdateFile3.size())- R: {7 g( |# `/ N
  382.   {
    ! I9 {6 U0 J' R* ~3 F. x
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); ]9 `. d: |  }. F
  384.     {: S3 A( V8 R9 q/ l5 R* s
  385.       file2=(LPUPDATEFILE)(*i).second;& |8 K4 E* m! ]% W3 W3 O
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())% z& ^+ {# ^+ m# o8 ^: g2 a# l
  387.       {9 F4 |, E  a$ V2 m
  388.         file1=(LPUPDATEFILE)(*p).second;4 A3 l; x% P3 {+ [
  389.         file1->vers=file2->vers;
    * s3 S" h0 [5 Y' Q4 j. b3 o
  390.       }7 Z7 k% i. {# ?& M( ?% w+ c
  391.       else4 ?3 E6 [8 ]4 D; e. [: o) C8 Y
  392.       {0 J" H- R- d/ a6 T7 D4 _
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 h1 ^( G# M* P! ~! s4 p
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    5 \1 B& c+ T/ Q- J- l& e3 E
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));8 X8 S' k' B0 v3 f
  396.       }% `3 w" }; K6 c$ H% T! x
  397.     }/ J9 C2 L3 ~( h' v
  398.   }( f5 M) j5 u7 g8 ~% F
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)' b/ V. f# e' Y5 D. Y' A
  400.   {( h5 S' w+ W) J) g' R
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())  z; ?9 }5 o, F/ d; k! d& E0 F4 W
  402.     {
    / t6 M" W+ j8 T% i6 p$ R0 x
  403.       file2=(LPUPDATEFILE)(*i).second;& w+ E+ T: I4 S
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 ?$ \9 a0 N! Y6 N1 C
  405.       {4 k5 V1 C' l; e0 y
  406.         file1=(LPUPDATEFILE)(*p).second;4 ^& X! [, _& J, l/ M9 k) u' w
  407.         if(file1->vers!=file2->vers)
    ! P7 E) O; N1 o) g, k
  408.         {- L( @. S# J$ w8 M; b
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! e2 B" H4 @5 y7 s: r' N5 O( T9 }
  410.           c++;0 f) S5 N. S1 c) k
  411.         }
    $ P- @  M+ [3 \' i6 }; O. t  I
  412.       }: E: C) |0 v7 K2 a6 r
  413.       else
    3 @' r2 P+ O& B* k* v0 Q& L' @
  414.       {
    1 H1 j, W+ \( V* p6 G  x: r
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % }3 A# f" m7 d% X! s: u0 F8 k/ H3 l9 o
  416.         c++;3 x! T' q6 X$ A6 O6 }
  417.       }0 ?/ [0 {9 v) o- G
  418.     }
    : c+ g. Y% ~1 ?* E& s
  419.   }
    8 U/ {* y7 ?# K, |* s+ S! n8 z6 ]
  420.   unlink(".\\DownLoad\\update.txt");
    / T. U. X# I; d4 ]
  421.   if(UpdateLocal.size()) return TRUE;
    + L# A& m( Y+ T: J8 ~0 i
  422.   else                   return FALSE;# k- z5 i" m: ?7 A- Z
  423. }
    9 \2 t' Z; ?6 v) u) x, ?

  424. # P& n) ~7 {  `: o) ?% B
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    % D/ l4 Y% N  k; b3 U& B6 [
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    8 ^' |- w6 u0 v7 y# L! Q( k# I) X
  427.   w% N4 o" z: n4 ^
  428. . ?4 v2 [8 {5 _9 I# }; T9 K, E
  429.   \* O) i0 E% }1 m$ m7 z+ m" n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)$ d# j+ D+ v: F' Q! J
  431. {$ {4 X/ d/ e+ G- P2 a! v
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;1 ~2 a* ~8 V4 A) h
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* j7 |- u: [" l9 N- H( o6 q4 p/ o
  434.   {  O3 M; e  q+ c- n7 Y% `
  435.     char szLanguage[50];
    4 s+ z1 Z) t7 K' s/ f% c& m
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; q0 M4 J" B5 m4 C8 m
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + L* c0 Y' L! H) P5 K
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 V: A# [- T$ t0 I* @7 M
  439.     else                                   m_iLanguage=ENGLISH;7 n  Q) r! K# d- f; @4 \8 g
  440.     char szRegister[100];, w# x$ H6 D) `0 i# {" q0 F. W
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ `  W4 P! e1 q" c$ _
  442.     strRegsName=szRegister;
    $ _5 ]& w2 V& w: P
  443.     char szPatchURL[100];& y0 G! z# k* t5 f- D
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 z* u6 `9 o% q5 C! l7 ]
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + g. ~4 R9 ~7 y" X" k: \  X
  446.   }7 R" F& I. `! Y* d
  447.   else
    * E) J/ ^% _# W% {
  448.   {
    " V$ L+ c6 R+ M. [1 w" G
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  s0 E) k( Y" U1 @! G4 o3 a! b
  450.     strRegsName=DEFAULT_REG_URL;
    ( T" v1 M" I" M) F! M3 b2 n7 d1 J
  451.   }; N% ~/ p% q/ j2 X
  452.   if(GetFileAttributes("hosts.ini")!=-1)2 u7 c' b2 o5 m6 U
  453.   {/ c; P! e* l! d
  454.     char szIP[50];' k: d# d/ K, l( j" i9 E
  455.     char szDIR[300];$ p8 O3 Y' l- Y7 U. H1 H
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))/ X- Q% b& I. F9 _
  457.     {$ E6 j" T  R6 B" K5 d# S: }
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    % V0 U* m* J, M: S$ ~( e
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    7 J& L0 Q) o3 L( P- F# {7 P
  460.       strHostName=szIP;! G7 o8 K4 Z2 A# \; z
  461.       strHostPath.Format("/%s",szDIR);* A) Q& x# l+ Q
  462.     }
    ' ]6 [, H1 p4 r* e
  463.     else# x" [; B" `* p2 ~9 N6 `
  464.     {8 p! c" Q' d9 t2 v% y+ c
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 [' z+ ?2 o9 h- C' A* [, @" n( O% N
  466.       {" c2 K" ~! E  o  D% O
  467.         char szLanguage[50];4 ]: g5 ~% a9 o* l
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 ~" g( |3 G$ J' r. u6 t6 o$ I
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + b# a* [2 H% C( l% {
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ {1 |2 ~% Q" S8 }) Z' z9 F) O, ?
  471.         else                                   m_iLanguage=ENGLISH;- W8 Q7 M3 ?: v! y! ?% H+ x
  472.         char szRegister[100];
    & |' S& F) r. j$ v+ L
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ W  }% ?8 m, j+ _% Y
  474.         strRegsName=szRegister;; h2 U+ `* S' E0 A! ]( I
  475.         char szPatchURL[100];# [3 c4 [: ]9 F6 \0 v' c* r
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) I7 }% m3 _1 t' I) Z) |  `
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + D0 {& \5 A" p6 ?8 U* J8 K
  478.       }
    1 ~" }7 M& h& Q2 `
  479.       else2 F' @6 I: x& R3 N
  480.       {/ M% R$ i; Q8 ?5 t
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);. j5 f; q7 t' s: P4 c
  482.         strRegsName=DEFAULT_REG_URL;
    1 P) i& q/ v( Z$ i- s, }) x
  483.       }
    ; e" y  J  o0 }) C9 W- J! I( ?1 [
  484.     }
    4 H- Z" ]$ E3 M6 q2 C. w
  485.   }' U) o1 I3 f1 }0 K' W8 R
  486.   return true;
    ; ^( C! E* I, {& w) ~
  487. }
    " h* E; x, \9 `2 q7 ^% t

  488. 6 f# w+ g( x' r. A8 v0 f$ q
  489. #include ".\ZLib\unzip.h"
    % y8 G" j4 t" u. C  H
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 i8 V7 d3 \9 @! L# d( E
  491. /////////////////////////////////////////////////////////////////////////////% _  Q/ f( I9 ^8 F' j7 r+ X( h
  492. // CRevAppApp initialization1 ~  i) ~- n6 a8 e! n6 B

  493. 8 t% ~5 c  z; f/ l1 A
  494. BOOL CRevAppApp::InitInstance()
    * P* _7 I. W0 j0 \8 i
  495. {
    ; k& L( V, C5 S# B& D% r9 V- U
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , P4 [$ _/ O8 L

  497. % r' B' L% g0 n. M$ x) v9 B
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);3 ]% y6 `+ a. R  m1 s: i) ~: [
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))( @; ]+ K2 h) l7 W, V& [# U3 [
  500.   {
    , [$ U) t: _+ S3 X, p
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    " N/ Y5 H7 m( X
  502.     GetPathFromFullPath(szPathTarget,szPathSource);& Q  u# S7 z+ z. a& j% L2 D* t
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    " B$ f% a2 b) @% ?
  504.     {% C6 T; e( P/ S- l; [0 |
  505.       strcpy(szPath,szPathTarget);
    * w; E. o. i9 x- B& k# @0 R9 {. N% b
  506.       SetCurrentDirectory(szPath);
    1 x! N7 I% G4 ]
  507.     }
      U3 z& w+ D& Q5 _8 G
  508.   }8 x! N$ e/ V4 x. g- s, ]
  509. #ifdef _DEBUG
    , e8 e/ b8 I) b) V$ z2 p% {
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% K# X" g, L1 ]$ v4 a2 k  Y+ [% F
  511. #else
      R# l6 Z7 \* V& @* B/ M
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 j7 J$ c  p3 Q9 H, c
  513. #endif
    9 W0 E% O! ]" M0 V" `* Z9 Q
  514.   {
    ; Q. A0 T- g+ b- O7 J* [  |
  515.     char tempFileName[MAX_PATH];
    & {- j  }* ]! J2 K( N6 x
  516.     strcpy(tempFileName,szPathSource);
    * {7 U0 b: d( y0 T, \8 V4 l
  517.     tempFileName[strlen(szPathSource)-12]=0;3 K# G' g: g# ?4 r% y! I
  518.     strcat(tempFileName,"\\$CSUpdate.exe");! V# C! o5 K. z' M, s* A
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);' I- Z% V" Y3 }! R% z% K
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);. h. {  X% q3 c! S: Z; C
  521.     return TRUE;; c* P$ O9 m4 `6 m; q% L9 P. E
  522.   }
    8 F% \: T: ?1 v
  523.   // Nuke 0118: Delete run.exe1 e& B# _4 E2 c$ h
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );8 X* ]6 ^! G8 E( U" V  J. y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) w$ R" g9 w/ W" O# z
  526.   if(!ReadCfgFile("Config.ini"))2 M8 ^9 N( V0 a$ X( h" L
  527.   {
    & l- ]5 a( P) }) I- ?2 {3 q7 C: f
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);5 G; E, K" F+ o3 Y) a: Q2 g% v
  529.     return TRUE;
    ! ]! l) g, @1 Z
  530.   }! E# P* a( `+ k$ h8 s
  531.   HANDLE mutex;
      C- i% x* I% F! B) w* u
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))  m) p  U; P7 y( X5 T
  533.   {
    4 {4 _& [' V. F/ T
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ( I0 H0 [( [& V* j* n
  535.     {' h  G3 l, M( L) A+ G3 A+ x
  536.       CloseHandle(mutex);" M( a8 d, S: p4 U- `
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);; v! ~% k/ t* L  m- N- f
  538.       return TRUE;% V- f0 f$ y. a$ X& ~
  539.     }2 g8 w8 Y: e* Q
  540.   }  ' V" W/ R0 \# A% `/ M5 m
  541.   CloseHandle(mutex);
    " {1 [# s* s& S& ]6 h) p6 G

  542. * t8 k9 P7 N2 C
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    " e& L$ t# X# Y4 E! g

  544. . Q4 I& j: n+ v
  545.         AfxEnableControlContainer();& C0 T; \5 J) u" U3 w

  546. 7 K2 x6 f2 s, A! i; _$ A
  547.   bCanUpdate=FALSE;9 z6 T' @6 U6 F+ {
  548.   dwStartUpSteps=1;$ m6 |1 t2 Q2 d6 ^
  549.   dwProgramState=AP_NOTHING;
      D/ f2 I, _2 [, T6 ~

  550. 6 I: }/ N5 S5 p0 J6 [7 H
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);, N7 L2 y  y# y+ o$ v2 T
  552. " ~  `7 ?! n! H" D0 r* V5 K8 ~
  553.         // Standard initialization
    5 \/ z. D. K. g! @; l! r( v% ~  D- |* p
  554.         // If you are not using these features and wish to reduce the size
    9 o4 u! |9 d8 ~  l3 \
  555.         //  of your final executable, you should remove from the following
    ( O7 z9 @* B+ L8 r1 I; K4 G( b
  556.         //  the specific initialization routines you do not need.! U2 f$ ~& _; E; E- n' X- w
  557.   x2 s2 Y7 H1 H; }- e
  558. #ifdef _AFXDLL3 i, a; q3 h  F; T$ ^, B
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
      l" P5 W- L5 ]/ ^7 o
  560. #else
    9 }: j3 O" K* g, O% O3 K9 [
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    * m' i1 [* I+ n3 J- _
  562. #endif  E3 J; {' v8 l# j6 `! G6 n5 Y( ]

  563. ! Y- U/ C4 l+ c& z  i/ J
  564.   dlg=new CRevAppDlg;( F: ]/ z' q9 ]. @2 s( Y& t
  565.   dlg->Create(IDD_REVAPP_DIALOG);8 n6 C4 L5 O  o5 O
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    & X: o; t$ W6 i) F; t3 {) t( |2 `
  567.   m_pMainWnd=dlg;  N# C$ l# w8 @$ S0 r5 O
  568. , g, z. v' f& A
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 ~' p5 ]* @0 ?+ a
  570. ( Q: x) @- A5 T) V% }6 ~
  571. //  GdiplusStartupInput gdiplusStartupInput;% h5 e  K: \* J2 e2 F' Z% W
  572. //  ULONG_PTR gdiplusToken;
    8 {% Z4 o# _# e2 R% ]9 x# |. Q" C
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& i* |' f5 [: u- U
  574. 4 g# O# F5 ~6 H1 k
  575. //        CRevAppDlg dlg;* ?' O' P8 L4 ^: H& I, Z
  576. //        int nResponse = dlg.DoModal();8 y3 y$ Y! n& _  u
  577. //        if (nResponse == IDOK)
    2 }5 z2 [) c; m
  578. //        {& j$ o# L/ s9 c9 ?. S: f7 e9 f: V
  579. //                // TODO: Place code here to handle when the dialog is
    6 P8 G& k. a4 p- s
  580. //                //  dismissed with OK
    : K# a5 X% Q7 k
  581. //        }
    3 C% q% q: L7 V, m$ H# f* C# a; W! z
  582. //        else if (nResponse == IDCANCEL)# }! Z! D/ h3 h6 V8 M
  583. //        {4 o' z* J6 f! U0 ^& e
  584. //                // TODO: Place code here to handle when the dialog is: p8 @& T! t* [( v
  585. //                //  dismissed with Cancel
    $ e; ?6 R  P7 C  I2 G7 v
  586. //        }
    0 [( I! }7 x4 x

  587. - P. P& ^1 e3 @
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    2 ]+ F; @* d# p% q) e
  589.         //  application, rather than start the application's message pump.+ a3 H5 F; M( ?: f! B3 \# F  ^9 o
  590.         return TRUE;& g" X: p1 u9 b( `. _
  591. }
    ! l; s: [+ _) s$ z( ^3 N5 d; @
  592. 3 _9 Q4 |  z0 H" F" T, F) V
  593. char *CRevAppApp::strtok3(char *pSource,char *token)& M$ b$ x) ~3 B, {
  594. {3 D4 l7 g8 {8 z/ t# Z. }
  595.   int i;4 Q! l2 H* q7 @2 ?2 |" l& c
  596.   char *szRet;& q1 ]" T. i6 u$ ]8 j4 D$ Z

  597. 2 q* ~+ ^. X' F4 ?
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ( C$ P4 V% L' F1 R: V6 t; j& C3 [
  599.   if(sztoken)
    * v. s* H4 r5 @
  600.   {& Y8 H1 m, ]) B2 D
  601.     szRet=&sztoken[itoken];
    & G; Z3 g3 Z, k! t3 M
  602.     while(sztoken[itoken])
    0 i& s4 y, _. V: W
  603.     {5 b8 P. W9 F( h8 ]1 S
  604.       for(i=0;i<(int)strlen(token);i++)4 M  \8 \+ @/ b! h8 s, V: E& H' V
  605.       {3 @- ]1 i8 r; i
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])+ @$ V1 k2 s) ?  f9 H; ~5 `; M
  607.         {" |$ A3 m0 T& k. d1 p
  608.           sztoken[itoken++]=0;
    + }( O  G  O+ \  X4 M7 Z; ^  C
  609.           sztoken[itoken++]=0;
    4 ^  N1 V  n% O
  610.           return szRet;
    # @1 ?  Q& n1 \+ z' B5 ~& ~2 B
  611.         }
    0 `# s. \1 I* s$ q
  612.       }
    * O- [+ f8 U: m
  613.       itoken++;9 g% d5 S" y/ z
  614.     }
    / A: L8 k+ h( Z3 I" t2 o
  615.   }
    3 M+ Y; v5 ~# ?$ g' p- I! E
  616.   return NULL;- Z  N- Q( S  }# m8 P  R9 l
  617. }
    3 k7 ~' `7 T' h' L, O1 \3 v
  618. 0 `( }" d. l1 G4 \8 |) n# Y$ c
  619. void ProcessProc(long Total,long Current)  M* F' y  ?# G# r3 Y5 [
  620. {
      a* x9 @& n: n
  621.         MSG msg;. n& v2 J& p! F$ g
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);) W/ C6 s9 C6 k. [/ A: p
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));3 z; I) _, S/ [% [
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    % I' F# V- [# i
  625.         {
    & r2 K5 J/ Y0 p  L' Q1 @1 k4 l
  626.                 if(!GetMessage(&msg,NULL,0,0))
      Y3 [$ m0 ^3 m% r5 `/ c1 @
  627.                 {  [6 R+ C3 ~9 }% c% ?! c
  628.                         return;
    0 l: F, ?6 @! a
  629.                 }4 z# g5 ^% d% i  v' H
  630.                 TranslateMessage(&msg);
    4 I$ X2 T, p& z6 T0 d. ?
  631.                 DispatchMessage(&msg);
    , `8 R3 }5 @3 S1 G' p# c4 Y
  632.         }        : |5 N/ z, M/ V& r- L
  633. }
    * H2 A0 A+ ~# ?3 K
  634. 6 i4 h2 r, j: Y
  635. BOOL bFirstChar=TRUE;
    4 j$ [. y# `; ]
  636. 2 H: C# H) i. w) y" V
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    # F4 w# z2 w- j( I' j7 B
  638. {
    + c% `& \2 j0 @# Q1 o3 N
  639.         // TODO: Add your specialized code here and/or call the base class
    / h4 m" ?& E% x
  640.   switch(dwProgramState): I$ |) _; V$ C8 V- [3 P2 Q
  641.   {
    / O8 E1 u" [9 M1 d4 n5 I
  642.   case AP_NOTHING:, ?9 |! X% j8 I% G1 _& _2 s
  643.     switch(dwStartUpSteps)
    ! M! Y& ^7 e; _3 V1 w9 c* x
  644.     {
    & |/ C" x  Q, }7 d( H% ?4 C
  645.     case 1:
    ' [$ U. k0 \* G/ G7 M
  646.       {
    : u2 h. n, u; [, o; l8 W
  647.         int i;) @1 \5 u, H0 e
  648.         CDC *pCDC=dlg->GetDC();
    2 n& w8 D' Q% F$ h/ e" s7 H
  649.         HDC hdcwnd=pCDC->m_hDC;' C1 C' P! i2 Z# E! {3 `
  650. //        Graphics graphics(hdcwnd);3 r) j, I% H1 i
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");6 S( j! P" h! s3 B
  652. //        INT iWidth=bitmap.GetWidth();, ?% w( E! ?# }9 {; o
  653. //        INT iHeight=bitmap.GetHeight();8 A6 s2 \8 k% ?- ~! n" s
  654. //        Color color,colorTemp;- u2 L8 i: Q- q: G5 k4 k3 O
  655. //        for(INT iRow=0;iRow<iHeight;iRow++). W/ _4 D$ x" k  u
  656. //        {0 v% {# P% v1 }' ]: `* N
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    & i7 [) q6 S% j8 T3 o/ E4 K! [
  658. //          {
      G8 a1 r2 k2 [: Y  N' ^% H
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    % [7 H6 ^" O( I4 x: M
  660. //            colorTemp.SetValue(color.MakeARGB($ c$ p# n6 `1 v( i0 F; A/ a
  661. //              (BYTE)(255*iColumn/iWidth),
    5 B. s6 T4 H2 r
  662. //              color.GetRed(),# _/ M# p) I5 L& u' n
  663. //              color.GetGreen(),  S# M* u7 M7 [5 ~
  664. //              color.GetBlue()));
    : ?% U+ o7 U' _: H1 f
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    : m# M% z" R: z) k8 Q" h
  666. //          }- I  y5 x+ w$ H' U% l
  667. //        }
    9 ]% A8 w  ~' D# S. r# ^
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);8 ^# R# Q% R9 l! I. }- B  i
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 J9 k* {$ ~, ~, ^- r% J! F+ L% `
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ' N, L( r6 [" d
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; q( Q* f* f4 f- ]1 u- Z
  672.         for(i=0;i<240;i+=8)
    6 o# J  M# Z9 B  z
  673.         {
    + K, c3 @6 c- z" G  }( @
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: a% e" G! t* q4 `- m; C) `
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      f1 W! O' {1 ^6 _2 B9 J
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % b0 F6 p8 d. R$ o+ w
  677.           Sleep(33);& |) {( y9 k$ w( ^  T
  678.         }  h7 E" g! B: V" _1 l% T
  679.         Sleep(1000);
    6 J% p8 z2 _8 \5 h+ j7 o
  680.         for(i=240;i>0;i-=8)
    , v5 {' C8 j% k+ h
  681.         {
    / R, r) O: K5 I# Z1 P, |
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ D6 T" k  n/ i$ _5 n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);$ i# ?' C( Y# W* q4 \
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / t/ M' V4 g2 M7 h
  685.           Sleep(33);: \9 A( R. P+ a. u
  686.         }: w2 h5 W+ h' f
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
      L8 T- G5 Y5 \, f; N) F: M# c
  688.         dlg->ReleaseDC(pCDC);
    2 p# M# s1 [' S, ?. T% v
  689.         DeleteDC(hdctar);
    5 @! X! P3 b: S3 D) ?; M+ _
  690.         DeleteDC(hdcsrc);
    + V" j- W" ?3 R
  691.         DeleteDC(hdcorg);; }3 {) a# f( R( ^+ C5 p' T8 q
  692.       }
    / B8 Q. {, k2 S' s
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);6 C$ e6 G6 w% e( E; R
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");9 ]9 n# F) e, K+ r* d. Z* k
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    " h, z1 ^+ C% Z* @/ E  t3 x2 \
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
      r) x3 ^: O7 K! g2 C- B
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * B3 h& F9 k. ?9 V% u
  698.       if(!Dn.Connected())
    ! M# }' O, Y1 }, D) \* c# j" K2 t
  699.       {2 O; b9 `6 A, w( {% ^! P; B; _; h2 @( C
  700.         dwTotalFiles=1;/ k& N/ Z+ g7 L) r( a
  701.         dwDownLoaded=0;
    3 r" n% M6 [/ \. y: y7 L, E
  702.         bSilentStep=TRUE;
    . ?# \. P' V8 M5 f8 N' A8 t" W
  703.         bCompressed=FALSE;
    : O& \7 q3 |4 g; I& E, K, M
  704.         strExtLocal.Empty();
      E0 C! k9 [) ]2 O; q+ O
  705.         strFullName="readme.txt";+ x8 e. u4 Z+ i' o2 M! j; p( l
  706.         dwProgramState=AP_CONNECT;
    7 N/ ], A, G+ V: e) a
  707.       }
    6 P( b  ]9 O, V% i3 L0 L. X
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();1 L* H+ s1 {& n9 t, D* t1 D4 |
  709.       dwStartUpSteps=2;5 N& z, \7 x5 n( j3 E) F% D
  710.       break;
    6 H/ \! K* j9 d* f! g( L  r0 ~- b2 ~, s
  711.     case 2:5 y8 j8 }7 W- @/ F" h
  712.       {/ e, }2 k& }' F- f( N
  713.         int iEOF;
    5 k: b2 M: z; Z0 ]
  714.         FILE *fp;0 l$ h# X5 G* ~/ `
  715.         char szString[512];
      T. s. D1 R# v. Q
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ) Z# _/ q  h2 l
  717.         if(fp)3 q- O% |+ k  e; S% Z; _0 d+ U3 F
  718.         {
    3 `3 O$ T# C! V
  719.           do  z9 Y: c5 m; N% M0 ~9 S) M) V+ a& Q
  720.           {% Z6 L7 g9 H, q- n( F
  721.             iEOF=fscanf(fp,"%s",szString);
    ; N0 S7 k9 H' N+ S' Q
  722.             if(strlen(szString))
    1 }7 x6 T% t. j3 m
  723.             {
    1 r: Q, X. X4 X# M" t: ~, z$ h
  724.               if(bFirstChar)5 m) g& j5 d, C
  725.               {0 d5 S" k7 K  q5 O
  726.                 bFirstChar=FALSE;
    2 y6 Q6 o1 d* \& h
  727.                 bConnectIsBig5=FALSE;
    * B" F& v9 y7 E
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;: M. ~3 E# |" a8 i. {/ ]" t
  729.               }6 g% ?" L  w/ m9 a6 ]7 o3 }
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    9 w+ |- |8 |/ R1 g* c' j" b' O
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));# @  w% ^4 |2 q9 Y* W; O
  732.               dlg->m_ListText.AddString(szString);
    2 C, R. y  O/ ]2 Y0 h7 {. J. L' J
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 s5 H  O. [: Z2 z
  734.               *szString=0;' a8 k# }4 h: U0 d0 K; e$ [1 W
  735.             }5 P0 \, Y) U/ y$ x# \
  736.           } while(iEOF!=EOF);2 e& e4 ^1 A7 n/ `* ?% D4 B8 r
  737.           fclose(fp);
    2 E- s3 M) Z3 F0 V! W& Z8 U$ z+ ?4 X
  738.           unlink(".\\DownLoad\\readme.txt");" ~5 x  Y# t3 S: q, R3 p
  739.           dwStartUpSteps=3;
    2 W5 P: e  E/ D; b% q+ A0 L
  740.         }
    6 ]& S' h9 v& N2 M  M+ t$ q& B
  741.       }5 W2 l9 V, E, a' h5 a& H, L
  742.       break;
    ; X! a1 s/ D& R" e5 {3 s
  743.     case 3:
    0 ?! z7 [' C. a
  744.       if(!Dn.Connected())8 `. t& i# |8 n  F
  745.       {( u9 w( g( E& `7 q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);) T( ^* @& m- L7 w+ s' F
  747.         dwTotalFiles=1;
    ( P! S4 E5 S8 Q" j
  748.         dwDownLoaded=0;
    ; q7 t, w% _  ]4 r: o
  749.         bSilentStep=TRUE;. r5 C2 Z3 y. ^! [4 d% ]
  750.         bCompressed=FALSE;  q" q" T: Q3 s. d8 f, K) ^
  751.         strExtLocal.Empty();
    4 ?4 ?* b% P- r; l
  752.         strFullName="checkversion.txt";
    5 G2 }$ d1 P' m, Z# j
  753.         dwProgramState=AP_CONNECT;1 K! d# v% C6 P# G  y5 q  P
  754.       }' N+ p) z0 {! ^
  755.       dwStartUpSteps=4;
    # L6 n) I" W" q5 A: Q( J8 q& b
  756.       break;) o" h4 r  n, N5 b, ]
  757.     case 4:; u+ w+ R' w2 ^% B) Q3 x9 g! H
  758.       {& ^: ]$ F0 ^: K! v- Y% {2 v5 c
  759.         FILE *fp;
    ( G1 ?' X( e. I. `  Y# T
  760.         char szString1[128];
    7 @- Y: d, M% V  L" H
  761.         char szString2[128];
    3 v% c. N. q& Z1 b
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");+ }3 Q. r6 N, O! M/ D/ c5 t' j+ ]! K6 w
  763.         if(fp)" l1 H/ H6 \! [
  764.         {
    " H6 L# C) C+ C8 u
  765.           fscanf(fp,"%s",szString1);, V+ W5 k% J$ F; f( ^- X
  766.           fclose(fp);
    7 f+ q$ |3 J3 K
  767.           fCheckVersion=atof(szString1);/ i* W7 }' @% ?( M7 x1 u
  768.           fp=fopen(".\\checkversion.dat","r");: ]- y1 d: |! k# C( e
  769.           if(fp)
    * t! a6 v, O1 Q4 K" G" ]
  770.           {+ p# O" G2 _6 v7 c# m, P
  771.             fscanf(fp,"%s",szString2);
    0 W* M8 W6 r' m8 f# R
  772.             fclose(fp);$ q1 E: E. n: o0 W- X8 X8 I" L2 V7 J
  773.             if(atof(szString1)!=atof(szString2))
    ' q0 E7 u* S* R" a
  774.             {2 L- E3 Q' s6 M) i8 y6 B
  775.               if(!Dn.Connected())
    1 I" N/ O1 C4 n% {4 O
  776.               {* _7 S6 ~, H  P& _8 Y. w
  777.                 bFirstUpdate=TRUE;) g& G3 T+ p) C1 w  W, n* Q3 A
  778.                 dwTotalFiles=1;, K' A, ]& F$ q' A4 W0 R6 B! a) ^( K
  779.                 dwDownLoaded=0;0 G: C1 \0 t* D4 l6 c4 r5 u
  780.                 bSilentStep=FALSE;+ ]4 B+ C- N6 n; O' V) i. k
  781.                 bCompressed=TRUE;9 Z" f% ~# Y/ V1 u: P
  782.                 strExtLocal=".\\DownLoad\";
    7 R0 f8 C" @3 U
  783.                 strFullName="update.txt";
    9 Q/ F6 ]5 O* `) y
  784.                 dwProgramState=AP_CONNECT;3 V; a% u; B8 X, h  ?+ o1 z. A- W
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");6 d. Q9 a- X) O+ q  U
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 A& g; C, |- p. @6 i
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");8 x$ K, j2 D* a+ }

  788. % c$ K$ j& q6 A8 v& U  j7 {
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 r) p. L2 ^/ ~# p; m% Y. m
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    9 i6 E" v$ l7 z
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)( B' }9 q* r$ G: w% F/ `
  792.                 {; L8 c0 q; w0 Q3 G. E% V/ Y; t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");: G" F6 ~; d; E; v0 u
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    + ?$ l. X& r+ X, @' V. ~! z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    * o0 Q. o; ~) E: n) O
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ B1 M0 I6 E  y

  797. ; q& d" R$ p7 j. k6 [# C& \
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' N1 [, u5 `0 ?
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    5 M0 S& M- Q4 \
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");8 f6 u! e9 f$ z; ^
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 X9 H4 |) g0 Z- J! d
  802.                 }2 z( D4 w3 ^! p, R. M* r: f* k% @$ ^
  803.                 dwStartUpSteps=5;4 f/ U) A; Y* H5 Y! F7 Y4 f
  804.               }: x  i) Z7 Z, \3 @
  805.             }* t8 x& _3 i: C6 r4 K
  806.             else
    $ ?1 ~/ t) D4 A  @# n0 F% q& C
  807.             {
    + l1 F1 n! y1 j3 o$ y" B1 E
  808.               unlink(".\\DownLoad\\checkversion.txt");
    7 c7 C5 D$ m8 j% x& g* h
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ t: u9 ]" @, M! t' h! q5 Z/ |
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");2 G5 q: T& `2 j- C1 [( u
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ( r* Z1 R; y$ K5 x0 D, D2 P& e: _
  812. 6 S3 ^! Y( z2 x
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% E3 F" q. n9 t5 v1 j( I* J: n
  814.               dwStartUpSteps=99;
    $ t& i4 Y4 y) F  r
  815.               bFinishUpdated=TRUE;; i; h6 j- M3 h; W6 f2 u! T7 h
  816.               bCanUpdate=TRUE;
    ' z% r5 O3 W9 Q# t
  817.             }. C5 v7 @5 |1 ~$ _. I4 {8 T2 M. @+ @
  818.           }
    4 j8 y+ J! ?, g! b/ j! T, w
  819.           else8 E# [# ~/ J6 s1 Q
  820.           {
    - j, ?; R+ C8 O1 h- h+ O* F/ m
  821.             if(!Dn.Connected())6 M+ |/ E) f6 Q9 B
  822.             {
    $ V9 W2 F) w# |1 J
  823.               bFirstUpdate=TRUE;  [3 C6 Q7 u7 S' [5 Z6 X
  824.               dwTotalFiles=1;6 B. E% m* r9 l
  825.               dwDownLoaded=0;
    * O. |* M5 D) I9 p; i
  826.               bSilentStep=FALSE;. \( }7 Q& i# ^) W' j
  827.               bCompressed=TRUE;
    # t- `- F! e( D
  828.               strExtLocal=".\\DownLoad\";8 V7 e. ~2 I1 e. B* M& b; R1 B
  829.               strFullName="update.txt";. C. d) j1 V( L% t3 \8 y1 l- c
  830.               dwProgramState=AP_CONNECT;
    / O, C/ o1 X, U# S( v6 D! |! f3 K
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");. }& K6 k- y7 c( k- i; s
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# j/ v$ y# z  N
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");/ u! H  k4 y( I$ k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; ?3 Y. V; A# p3 k7 g7 {" }1 g
  835.               unlink(".\\DownLoad\\checkversion.txt");, m  ]; W2 Y, B/ q2 K5 _+ H
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)- e& A* i$ E% e$ v
  837.               {
    4 f4 v4 ]' X# {: O# ~/ n# P
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");$ y% f7 h5 G9 N# _% P
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");7 ?0 z" V& ]* s
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ( e# O. k% v) b  f
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 v  q+ J$ P2 @! D" O8 P
  842.                
    . |. ?  v2 B5 k" M& l4 H
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 v3 L# h) v3 u& G/ W5 }/ T2 U
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");8 W+ _0 B8 N- k  v; h# g
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    * B1 ?- R9 U. W; i
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# m+ i% W2 ^$ n; Z8 f5 J
  847.               }
    * B# `- x' Z$ ^9 L- m
  848.               dwStartUpSteps=5;! I2 A9 D, C- f) ]
  849.             }% l% |* ]7 v# _9 ]6 C
  850.           }" g) P4 d/ u9 a- i( i: w; g( e$ P
  851.         }
    9 v( {0 p( e% \  [7 c+ w- c
  852.         else
    5 c6 U, n, Y# ~. K9 k. Q' E! Z
  853.         {
    , Q: V4 Q, m! y- u; W  v- t# S( k/ M
  854.           dwStartUpSteps=3;$ f5 h6 _, ^4 I7 Z+ \" p% B" Z# J+ o
  855.         }
    ! Z& `1 }; N: c
  856.       }, {, t# P9 b3 d& ~) h6 @. b
  857.       break;- g9 F9 v! L/ L2 s" O# h
  858.     case 5:
    & P# F6 Y, z6 T$ @! ]- E5 l+ y
  859.       {( Q) f, w# H# [
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ) y. x2 p' t1 C0 `: U- a
  861.         {8 a1 F3 Q# @6 [3 |: a0 M. B
  862.           int opt_overwrite=1;+ i7 _  _: L* Y3 a
  863.           int opt_do_extract_withoutpath=0;
    ; a2 r4 u0 i) c; L) O# Q- `
  864.           unzFile uf=NULL;
    & _/ p+ R( w: b
  865. % b4 g; k4 ^: v, F  w2 |0 f
  866.           uf=unzOpen("Wsa.zip");
    ' _4 C$ @5 C- {% p
  867.           if(uf)
    ( {* W" @/ D1 i9 f4 a
  868.           {
    + A8 _9 H# l- N% ^/ ^8 q$ k
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);  J; J- z" y4 I3 M% a
  870.             unzClose(uf);
    " t/ g7 n& O* I; P( _2 P
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");6 o# P" Z- S) v3 ~
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ' F9 x$ l$ A- n) ?) `
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");% M0 n' K. z; Y$ U: O
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # J% X- N# w% b  y
  875.           }
    ' |- @! [: \* r8 r! \- ^
  876.           DeleteFile("Wsa.zip" );1 }) U6 X" C& C6 _" W
  877.         }% D, I3 x7 V/ i; t8 t, Z( z: ^
  878. 4 }' [, C. M- B8 b% I
  879.         if(CheckLocalVersion())3 I, x& {7 e4 s( E
  880.         {6 q5 j9 N( Q4 I  |+ d' `
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");% x* n/ b! s, z: v
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");7 U4 K, S& N' |
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    " z0 g1 V: T* k; N( w
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 u! J/ g  u+ }: L4 B6 ^, ^* b
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    9 @( x( C1 U1 [5 [& G
  886.           dwStartUpSteps=99;
    + C! D1 L5 I: v% {% Y
  887.         }2 p/ y# C7 w+ t8 p. M8 n" `! {
  888.         else
    # v# O. `$ v( |! d" Q
  889.         {1 @1 ]1 A; a, F! c6 s& Z1 q! E
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* p" S1 N2 ^/ ^
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 P7 P/ ?# I/ f% B1 S% w, d6 ~3 ^( ?
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");* Y9 X7 ]+ P7 z' G, J

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

3 x. i( g$ ~* y

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-20 08:54

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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