找回密碼
 立即注册

CSUpdate.exe源代码

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

! V( L  X! v% R* O' D5 u8 w  s
  1. / RevApp.cpp : Defines the class behaviors for the application.9 W+ m4 j- h( _! c/ B$ N2 k4 c0 A' `
  2. //7 m" V7 O% L3 [* d! h2 P
  3. : Q, `- z9 f" q# \: d& F
  4. #include "stdafx.h"
    # t4 [2 W/ s& m, B0 M

  5. 6 G) o5 n2 y: K  l" U
  6. //#define UNICODE
    0 {; _1 u4 u" D6 Y# X( n+ V
  7. //#include <gdiplus.h>
    5 I' K! \7 \8 W* K5 f# W
  8. //using namespace Gdiplus;4 L$ s* i4 y. P8 J1 S; {# N

  9. ) T5 v5 `- r0 J0 y5 y& x# {
  10. #include "RevApp.h"
    3 R& k9 v  b5 X' T$ ?
  11. #include "RevAppDlg.h"
    ! g5 _3 J/ f- N$ k' Q1 k. y
  12. % T" |/ [/ T& S7 _% v
  13. #pragma warning(disable:4786)
    0 a, O( a( y6 e1 S/ X: L
  14. #include <map>
    & n! Y- W. p& j% N
  15. #include <list>
    1 R! x3 r# v) s, o& f8 A0 C& W8 o
  16. #include <direct.h>
    9 n9 K; j2 Q/ z+ k( H- i
  17. 2 D  x4 j7 Z! b/ @' b5 ]1 D2 Y" {) Z
  18. #ifdef _DEBUG
    : Z/ E& v% a2 ~# ~- j
  19. #define new DEBUG_NEW
    5 I7 P# v7 I- k
  20. #undef THIS_FILE
    " a! N  I) \' T! g
  21. static char THIS_FILE[] = __FILE__;+ [. A3 o% D0 ?2 X! ~
  22. #endif$ {9 }  y. f% F1 D1 |2 W
  23. #include "SkinResDef.h"# [9 ]# J2 y: f; V& T: R6 Q
  24. #include "ChangeBG.h"
    & Q  b9 u* ^. M2 B2 [/ O
  25. #include "AFXINET.H"$ V# H5 r  D& o1 V1 R- O& o
  26. 8 C" V- d( h- v+ h: s$ U
  27. #define TRADITIONAL_CHINESE 0
    8 ~6 c# o! f( Z3 n& U
  28. #define SIMPLIFY_CHINESE 14 L% {( w; p7 O% b1 M
  29. #define ENGLISH 2( T& G6 {: c4 z
  30. int m_iLanguage = ENGLISH;
    ; V8 F! Z1 c3 C  W+ O
  31. /////////////////////////////////////////////////////////////////////////////
    " S8 T2 E% D: n: h
  32. // CRevAppApp2 @4 J; l% p) L8 k9 v$ m4 ]) h
  33. , |8 @1 E  U9 [9 s0 h" D2 y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    : u" x; S! p1 O+ N
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    2 o  X2 _5 i2 k
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    / d' }5 ^8 \9 y2 ?! }( c
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    9 K% F& k; K' ?' h5 I
  38.         //}}AFX_MSG7 T$ `$ R. g6 c+ F5 ?8 T0 z% M
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)( u. d! A8 ~& q1 a' Y! U+ R
  40. END_MESSAGE_MAP()2 i) J! _4 e; ]0 @3 C+ D/ F
  41. - d8 V9 R0 @+ [: |6 u
  42. /////////////////////////////////////////////////////////////////////////////. Y5 g! q1 B% Y
  43. // CRevAppApp construction
    . t/ q: ^2 n! P9 m2 g

  44. " M, c3 ]0 l9 o
  45. CRevAppApp::CRevAppApp()8 q  o: j) X. D2 y
  46. {
    8 M& N+ S1 `8 R  B
  47.         // TODO: add construction code here,
    ( y6 p6 j9 X: j7 C& Q
  48.         // Place all significant initialization in InitInstance
      i. h, r  E5 L' h6 Z
  49.   bDisplayIsBig5=FALSE;9 k" B) b$ ]9 `9 |0 X; _
  50.   bRestartUpdater=FALSE;
    % V( z. C3 v/ P
  51.   bFinishUpdated=FALSE;) P. S1 ]5 x- {2 M: q2 G
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    & v4 N' B/ Q- a. X/ M
  53.   InitChangeDataBig52GBKS();
    6 L- C0 X; L9 K1 e
  54.   InitChangeDataGBKS2Big5();
    + E. ]: [  m" Y( t7 p9 |
  55.         //5 D6 ]: |' r5 I" i! O2 t
  56.         bClickRunExe = FALSE;* u5 y+ A) Z- l
  57.         //
    ) i6 z' l" K3 v' D. @4 @! l
  58. }
    9 D) e: C: Y& H: s0 Y
  59. 9 s% p6 O3 p* x) d% _% Q
  60. CRevAppApp::~CRevAppApp()# E0 W' E/ ~. A2 A4 z$ ^! O
  61. {- @% C2 N+ X2 u/ o
  62.         // TODO: add construction code here,8 r. q$ h* a9 V/ T; B9 W
  63.         // Place all significant initialization in InitInstance
    ' D5 T( H: J7 P& F
  64.   EndChangeData();
    5 a% v+ g1 c+ ]. A. m
  65. }
    4 f, _! X2 c7 e; {- {
  66. $ b; ]3 B  |" r  C- s
  67. /////////////////////////////////////////////////////////////////////////////
    8 D% g6 p- Q8 M7 D
  68. // The one and only CRevAppApp object
    * ]# e7 B9 b1 ^
  69. ! @! x3 E/ L4 J! y; e  M2 ?
  70. CRevAppApp theApp;) v9 I+ a( k* Y1 Z4 w
  71. / r7 J: h' U) ], |  s% `
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    % o/ I1 g. R  U- I5 U5 ?% t
  73. {5 |' N3 ~" I9 d- \; o, f
  74.   int iEOF=0;' A- Q! [9 z7 O, i
  75.   char szTempName[MAX_PATH];
    + P; q- o) d% {/ J$ w* X# B
  76.   *szFileName=0;) ^6 B! y& h2 h; ~+ ^* Y
  77.   iEOF=fscanf(fp,"%s",szTempName);  P- {; U  I7 n0 ?( d4 i* {
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    6 l( Z, M( y; y# F/ v; A# z
  79.   {$ ?9 o+ E+ G& d, M6 t  z
  80.     strcpy(szFileName,&szTempName[1]);
    # B* k8 c* N. I: Q- P& k
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    3 A- _2 D, C5 B8 T
  82.     {
    " q' D6 K- u3 I. Q+ f* H  d9 r
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ' i% a8 c. O6 O5 Q- j
  84.       strcat(szFileName," ");
    / g# Q, p: c# E+ V: O7 C; X- p  c6 T
  85.       strcat(szFileName,szTempName);% M9 H" |: j4 ^' H: H; c
  86.     }+ M5 M9 @1 g5 z" g; N' t/ L
  87.     if(strlen(szFileName)>=1)
    # S+ w8 w5 {% _$ o  F5 Z
  88.     {
    8 x* J" V! {( u) `& t
  89.       szFileName[strlen(szFileName)-1]=0;
    $ G: j8 W% t2 ^/ n; O
  90.     }4 R2 g4 D5 f9 ?: R8 [
  91.   }
    ; r0 i' l9 E- U" \( o0 I
  92.   return szFileName;3 U1 h( w% f# G
  93. }0 z4 e6 y. V; i3 O: k
  94. % S5 @& r7 L( H. g7 m2 K& F/ H4 S
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    * _& _" G+ G# y: u' c+ Q
  96. {& |$ R# j3 A" _' h3 x6 i; n
  97.   FILE *fp;
    . o+ I" ~7 _3 V
  98.   char *key=NULL;+ m& B0 }1 I1 m% ], I( H* D5 C. l
  99.   char version[MAX_PATH];" _6 V9 s$ v( t) _% \" o4 u
  100.   LPUPDATEFILE file,olds;
    1 N2 A7 o" B0 v/ b# c0 q
  101.   std::map<CString,LPUPDATEFILE>::iterator p;( @1 ]# G& V/ ?6 }. r* y. f
  102. * P* d% P! Q9 T( j5 D
  103.   UpdateList.clear();
    % M! a* M+ d" I- |
  104.   UpdateFile.clear();
    + Q$ j$ \+ Q' D4 U' \
  105.   if(GetFileAttributes(filename)==-1) return false;
    " u2 S  {4 ^+ z+ t! D) F* J1 D0 g
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ; y* c% v% T4 F/ U9 x, S; [
  107.   fscanf(fp,"%s",version);" ]1 k; H+ O' n: v6 d* b; ^
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    : r2 C) P/ C# y- b6 Y' o( I  K
  109.   while(fscanf(fp,"%s",version)!=EOF)& Y3 L) C/ d6 g, U9 d4 |
  110.   {
    + X% X9 u4 z' ?# \' e
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 b2 N9 V* J" ~  m# ~2 |
  112.     fscanf(fp,"%s",file->path);' e" k/ P0 C! _6 O* N4 L9 y! s
  113.     ReadFileNames(fp,file->file);6 g& O9 ~9 n/ i# o8 u
  114.     strcpy(file->full,".");
    1 v& H. \/ y5 N) }% s' q) m2 o. F
  115.     strcat(file->full,file->path);
    1 U: o( K* n7 S% W( G1 a& |
  116.     strcat(file->full,file->file);) f+ J* N9 t9 W* a
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ! K+ l6 V  `8 G6 r) o8 H
  118.     {# B  y# T5 i& ~# P( ]
  119.       file->vers=(float)atof(version);8 U8 w  ?: a! Z# h) i$ j4 p8 E% z" X( m
  120.       UpdateList.push_back(file->full);
    ( D( v% g: ^9 s! v* q
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    # M/ i% U- L) M3 ?& @# C; b, |
  122.     }
    ) W, `$ p5 J- }4 n4 P4 u) y  \
  123.     else
    0 X0 p& R7 e! |* e
  124.     {
    5 C% b0 f# ?% c/ z
  125.       olds=(*p).second;% L0 L: u/ a5 O& B2 j
  126.       if(olds->vers<(float)atof(version))' L" R+ N; B& S8 O, p2 ]
  127.       {* u8 W, ^5 [, X! }
  128.         olds->vers=(float)atof(version);
    , q3 n9 g- l6 L2 m5 P- q: y# o% g
  129.       }
    9 z6 {$ ]2 L& U; W+ k4 Q
  130.       free(file);/ j1 ]5 \; N: C& z- l
  131.     }
    / K- v4 d. H- q6 K# c5 a- x
  132.   }1 o9 o% H8 e4 h
  133.   fclose(fp);( }5 v# C! T& |( F% E& }* F: G
  134.   return true;8 G! [; e" L* ]& g& s7 \
  135. }+ ]  m6 x  {0 {$ m( [) J
  136. ( J' j& f2 p- c
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ) Q' r. f8 ?* E
  138. {4 P1 u( R, f/ n7 E) ?* p
  139.   TCHAR  szFull[MAX_PATH];
    8 j$ M- ?9 W, `' U% i- p) K
  140.   TCHAR *token,*inter;2 t2 w* ]5 o8 i( J0 n  J( F
  141.   *szPath=0;* z) a+ `7 y" Z+ x5 ?
  142.   strcpy(szFull,szFullPath);
    ; @0 n6 |0 @3 d1 c* R! A! y
  143.   token=strtok(szFull,"\\/");
    # C* {( }) a+ I! T  O2 L" \
  144.   inter=token;; _3 j* z# q% N: K& t5 R
  145.   while(token=strtok(NULL,"\\/"))
    , [) e, k+ X- }% P' A: ^
  146.   {, S; x9 x* M% C0 e! X5 v
  147.     strcat(szPath,inter);1 P9 s6 G5 w# ^+ V$ ~
  148.     strcat(szPath,"\");' Y* }# y$ ^* N: U3 E) l
  149.     inter=token;
    6 Y1 `+ {0 R3 v0 [7 L' h
  150.   }7 S5 W5 D4 _. \2 i1 ~8 q' l
  151.   return strlen(szPath);  m9 a4 F4 w: p
  152. }9 V" F2 B' r; G3 Q/ d4 ^

  153. + }* O! l  e7 g% x$ `
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)/ h% b1 {7 w, u5 m  _& q" x
  155. {
    9 J5 x6 `6 s4 d- x& b' `( \
  156.   DWORD attrib=GetFileAttributes(Target);7 X* P3 @  w( z) k( `4 H
  157.   if(attrib!=-1)
    - n7 a) B- j$ c
  158.   {$ ]7 C, e1 \: S! n. V( q! r
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    + L. x8 G6 p$ q
  160.     {( h  y' R: q. o) S$ {
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    + {/ p  A$ r2 ]0 F. T/ `* h
  162.       SetFileAttributes(Target,attrib);
    ) K/ }* P- u+ [5 S. P2 W% Z  T
  163.     }
    4 P% R/ ^0 j) _0 @, G0 C9 u
  164.   }7 i# U2 l+ t( U  T+ l# ]4 V% c
  165.   CopyFile(Source,Target,Erase);
    2 L, m& {# e- D
  166. }4 ]: e8 M' R) p

  167. 5 b  ?& c0 A: u& b: R/ d2 i
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    # \/ B+ O% I$ S) B6 }
  169. {
    1 p; I8 {; z* d0 Q/ `6 W6 V$ s& D
  170.      FILE *fp;
    ( n; h3 @; `5 s" F
  171.      char  szBuffer[8192];
    ) _) v# m: @* v, h/ o# [
  172.   va_list  argptr;
    * B7 M. g, w, \2 Q) I& U$ B2 K7 B

  173. ' @4 v* N0 E& r7 F6 L
  174.         va_start(argptr,message);
      q9 y& S! c# D- t1 e* c; `3 B
  175.         vsprintf(szBuffer,message,argptr);$ T1 ~3 |' n# W2 W
  176.         va_end(argptr);& \+ M) c: x; [) }  ~5 y
  177.   fp=fopen(FileName,"a");4 ?+ M$ p$ {& D: R1 \# ?  k
  178.   if(fp)% _4 g9 T% ]) S& Z2 I* n
  179.   {) z5 f9 V* ?3 U1 _
  180.     fprintf(fp,szBuffer);1 W' R. q# l2 ~: N, A) n
  181.     fclose(fp);
    ! u, O) g% A% Y4 V( s7 \
  182.           _flushall();
    8 h2 _/ B8 r7 I. [
  183.   }
    ( u+ M) H* J$ f( I, o' [& C! P4 l
  184. }
    . T5 c+ B* V! Q4 g( d

  185.   k: a0 Y- a3 z. _7 c
  186. BOOL CRevAppApp::Fclearf(char *FileName)
      E& A+ i1 C) a- H
  187. {
    - [9 w3 S' l( V' a
  188.      FILE *fp;
    9 a6 q  D1 R( z, U) E4 d
  189.     DWORD  attrib;
    . R, ^. @4 ?+ x" }
  190.   attrib=GetFileAttributes(FileName);
    : f0 A( x. v# G* l. l& r# s
  191.   if(attrib!=-1)
    ( z6 Q3 b2 @& T
  192.   {( o4 f4 \5 p) v; A8 Q6 T' S
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);7 o5 X2 x* ~5 r+ o8 A3 X# a
  194.     if(!SetFileAttributes(FileName,attrib))/ `* z! l2 R6 V; ^% s; X  S
  195.     {4 L1 ]$ c: w2 t; D, n
  196.       return FALSE;4 J  l9 h8 L) k$ U& z1 p
  197.     }' i) C: M% W0 n: C5 X# o
  198.   }+ A/ I- k& }. Q4 ?9 ?7 k
  199.   fp=fopen(FileName,"wb");
    " Z: M( |4 x. z. p/ H2 h) z
  200.   if(fp)
    + c/ l6 [- j; c% `. I' Q, t: k
  201.   {% k0 X; Z) w8 n! ~6 L
  202.     fclose(fp);9 U5 ^/ b# u. P8 f- ~/ H
  203.   }; J- e) S0 v% a  `% l0 H8 S
  204.   return TRUE;
    $ z' x, D9 R6 u7 E! w& W( p
  205. }
    ; f6 H& m8 i8 F% S* A# n2 L. g
  206. 6 }: b4 b/ ~) c% [
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ! N3 b* g6 l' u6 t  j7 S7 ?* J
  208. {
    # w& [$ B) d- S+ S% A
  209.   char filename[MAX_PATH];* }. d  `' g# T4 j3 ?+ \
  210.   LPUPDATEFILE file,olds;
    ) M- ~5 [# S! ]1 G2 {
  211.   std::map<int,CString>::iterator i;
    * N! }. c7 o" R
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 z- S% s  g% o: f# s. q" Q
  213.   std::list<CString>::iterator l;. \2 k6 \5 G& w2 x, A

  214. ! D3 f  M$ s7 B2 E7 q' c
  215.   if(bFirstUpdate)
    ( C7 d! L/ K% R" e
  216.   {
    2 w' k) I6 w4 w7 W$ X# D. v) i% T5 z
  217.     dwCurrFile=0;
    0 R: B9 ]% S) G- I* s4 \& w5 `; W
  218.     bFirstUpdate=FALSE;  O  }: M3 ?" Z+ D
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 ?' G  n$ u% v' ^/ N
  220.     {$ \' a' o' w; g% j$ ~
  221.       dwTotalFiles=UpdateLocal.size();) C! e+ S, ?9 `8 }/ p( o2 r
  222.       dwDownLoaded=0;
    : W  u% _; o8 P# a8 ]$ g
  223.       bSilentStep=FALSE;0 B  M# F# q2 R0 U) i- t/ b3 B3 k
  224.       bCompressed=TRUE;
    ; |% f6 _* N; U' T
  225.       strExtLocal.Empty();
    . p- V  v3 R7 [3 K
  226.       strFullName=(*i).second;
    % N3 M( J3 a; P7 J, B* v
  227.       dwProgramState=AP_CONNECT;& y7 c* v- r' w* f3 N) o7 e% q5 v
  228.       return TRUE;
    ' b8 j# p! t) |+ w# R( s$ O
  229.     }0 t! S- [  _2 q/ @5 B6 ?$ |
  230.   }& A6 T; E4 l% `5 k4 r4 M: J
  231.   else if(bRestartUpdater==FALSE)
    9 D9 D+ Y/ {4 o
  232.   {
    & g* C2 }4 R/ k( J& U6 u9 @9 }6 N
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      q  j) S' ]& Y" ?
  234.     {
    . m! z- j) a  c3 G, w+ C; V9 s- f
  235.       file=(*p).second;: u" P7 p2 x" v; x
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    / }9 h9 f' s3 a4 s: j6 h6 W
  237.       {
    - B2 V# H' L/ q
  238.         olds=(*p).second;
    0 A1 V0 Y0 s+ Z' s2 t
  239.         olds->vers=file->vers;
    ( {9 |7 B, l0 {$ e( b) N, }( B
  240.       }7 w. q9 I2 P3 m6 a
  241.       else4 W9 L" ~9 a7 v- g5 O- [
  242.       {
    6 y3 X' v  M. q& l+ O$ M% B
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 ~4 K$ ?% ?! t$ u
  244.         memcpy(olds,file,sizeof(UPDATEFILE));& O8 m1 b) e2 `- y
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));0 e! S# e* q2 E
  246.       }
    : |" ]' g0 p9 I* X
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");9 E* [2 w: s5 n4 S9 }" z0 x; k0 c, ]
  248.       sprintf(filename,"(%s)",file->file);
    4 {& @( F3 i; s3 ^7 @+ o! l. M5 m
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  J- D7 z' N/ b; T, `7 S# b
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }  o7 B' I9 P2 s% `5 `
  251.     }! F( y' E) X& H( N' z7 L
  252.     dwCurrFile++;. N- C; i$ T# V% u5 ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 F1 K; j* H! L7 n$ V" J
  254.     {) X' ~; @1 A3 W; d
  255.       bSilentStep=FALSE;
    6 G# a5 V8 |. s  [
  256.       bCompressed=TRUE;1 V- T. w- V) L% N! [$ P
  257.       strExtLocal.Empty();/ {* G) b( q9 a" B! h$ U
  258.       strFullName=(*i).second;
    & C2 `9 w- M( ]9 [& e1 p
  259.       dwProgramState=AP_CONNECT;
    : x3 Z( q! \4 u4 W7 B
  260.       return TRUE;
    3 N) L8 A; g7 W* B9 y! @
  261.     }, N. b, o7 w! o4 y$ l. q: L7 w
  262.     if(!bRestartUpdater)+ i% P8 G" d$ p
  263.     {
    7 r& x/ V% v0 ^, h3 A
  264.       int iCurrSize,iFileSize;6 L/ m2 t0 A- i& w$ C$ }
  265.       iCurrSize=0;
    / N; L" @( r6 y6 O' @4 d0 Y: L
  266.       iFileSize=UpdateList2.size();; W3 \9 D. _' i' ]6 W
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");* _" r( h+ A9 x) O  l
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 U: ?( d8 I) c9 d4 r
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");1 P9 l' A  u9 `( g' z! s
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % O1 m' }" ?# ~% @
  271.       Fclearf(".\\update.dat");
    , S4 w" E( Y; z
  272.       Fprintf(".\\update.dat","Bloodyf\n");  R; k/ a( j( F) s
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " n# Y7 o$ l' a0 A/ }
  274.       {
    . `9 M/ n/ V: X, Q
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()): p* z+ h* H; y6 ~  K# o. K
  276.         {5 ~1 a8 t1 g  {1 H, T# Q7 Y
  277.           file=(*p).second;1 {" a' m' e" t
  278.           sprintf(filename,"(%s)",file->file);* {" P- D$ O$ w& Q% K% @7 R
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' ]- M5 K& ?) o' F$ I
  280.           iCurrSize++;+ @6 e- |3 V8 s5 w& F
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    1 Y2 w1 K7 A- e, f6 @
  282.         }
    7 W; [7 s% e2 \1 c
  283.       }
    . r% L* f& g8 r+ O4 [: u, U1 W7 I& J
  284.       unlink(".\\update.txt");$ T5 e& G' v: L; e7 W2 G3 `
  285.       unlink(".\\update.tmp");6 i! u$ N1 D1 a$ o7 J" c% N9 _- n0 W
  286.       Fclearf(".\\checkversion.dat");
    " o; l/ V+ s. Q) M0 i. X) s: }
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    # ]; j0 ~/ M2 `, M
  288.       if(UpdateLocal.size())
    ' A- h9 c" a4 P  O4 t
  289.       {
    4 m! A9 [, @* J9 ]: h
  290.         UpdateLocal.clear();
    6 n+ a! a- U. g; q# N% m5 S2 d& Y
  291.       }& o  ~) |! O# y  D
  292.       if(UpdateFile3.size())
    * S/ x: Q* ~6 A
  293.       {; |0 W- t: w& o
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' ]) f1 ]) Z$ G/ O: e
  295.         {/ A: W8 t  l, K" _" f4 a9 H( K
  296.           file=(*p).second;! O" S/ i' D( \; {% c
  297.           free(file);1 }) U" O2 ]4 R) J! o4 j* h
  298.         }9 d: Z0 l- Y/ V( P
  299.         UpdateFile3.clear();  Q5 r* r  Q! \4 f; _$ ~
  300.         UpdateList3.clear();" k! }6 O8 S3 q& e, n# `2 Q% X
  301.       }
    2 c4 n" v2 b) F1 V, N
  302.       if(UpdateFile2.size())
    4 g1 x0 N* h, \  z* a5 U. _
  303.       {
    ; N; ]& Z: H, M7 X/ y) e4 z) C
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 _2 C' g( Q" T
  305.         {0 s7 L, H, s% i6 E0 ]' c
  306.           file=(*p).second;$ D- U; A5 L" f% e8 X4 z- f
  307.           free(file);% W6 a2 Z- }& O; R/ Z& Q: m
  308.         }
    / i' V( b* z; R! L
  309.         UpdateFile2.clear();
    2 S& h4 d) |4 k4 Q3 a3 E& J
  310.         UpdateList2.clear();
    1 Z# [  m; G7 R% ?" i
  311.       }
      B  f' v! j4 b* d  V: G1 U# j
  312.       if(UpdateFile1.size())+ Q2 N& L+ I. O0 I1 {  F  n1 F, S
  313.       {# E3 I, ]& s1 K; R' d6 \0 s
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( h, v9 ^4 _- s5 q
  315.         {( E0 o+ d" H/ F' h3 ^3 c
  316.           file=(*p).second;# I# k6 I4 D7 e$ R: Z
  317.           free(file);
    4 o- k5 l5 {* [6 H0 C; t
  318.         }
      P+ y: ?! {0 V% K' v
  319.         UpdateFile1.clear();+ v# h# ]" `7 e  R
  320.         UpdateList1.clear();
    * C$ n5 A2 J, k( B+ x4 Z
  321.       }
    0 t) f6 |: Q/ e4 a8 p. M3 F* Z
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));0 {2 A- W- V$ m+ t# l
  323.     }5 ?: Q. }" \, c% y
  324.   }
    ' E' T3 l2 P: ~
  325.   return FALSE;9 G2 i; b. p9 K, W) c' O* }
  326. }
    " `5 J$ |/ ^9 R9 F
  327. ) B; n4 N5 r7 I1 Y" z& q
  328. void CRevAppApp::ClearAll(void)
    3 v* {* A) j% B7 H% |7 _
  329. {) f# U1 p2 F$ N8 A6 W0 [
  330.   LPUPDATEFILE file;  y0 _3 k5 i, w0 v7 o4 o3 E0 L
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 J% A. R- r- I  B2 F( ?& m

  332. + Z8 f$ T) I3 B9 M( V
  333.   if(UpdateLocal.size())( x( n1 U4 G8 j1 \- ^
  334.   {
      Q- a) E7 [" T# d
  335.     UpdateLocal.clear();
    % {- A0 V3 }% I; ~
  336.   }; o7 Q, C+ {% J. H: N. m( y+ I
  337.   if(UpdateFile3.size())
    " ^1 x3 e. Z& d  h
  338.   {
    , M* H/ J$ Z( N9 @, s" t
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% _7 v- L8 W) p6 ~6 G$ f
  340.     {
    ! Z' ?* Z6 V7 h* e/ q
  341.       file=(*p).second;
    8 q4 [' I" O7 P
  342.       free(file);" Z/ H4 M! J6 K% V5 D
  343.     }& k( Y& v2 c# L3 w0 ]) r
  344.     UpdateFile3.clear();
    ' w; J# l8 o# Q% R( N
  345.     UpdateList3.clear();2 y7 F/ j0 t: M2 y  W
  346.   }: g! p- Y$ L2 v; }- q: G. N
  347.   if(UpdateFile2.size())! Y& H# k: M. T) h* ?
  348.   {
    1 P. E+ S- x0 h0 `5 ]9 o' S# q+ n9 p
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 U3 J( x) t  T9 J5 Q( E* P) E" p
  350.     {
      m9 r2 n* y' d( z! }
  351.       file=(*p).second;4 N, ]$ o# s/ B5 |5 n
  352.       free(file);9 \- i' Z, c, i% W7 w
  353.     }
    # b, M: @/ K% @3 }% h
  354.     UpdateFile2.clear();
      z. k- x0 H3 x0 M8 j1 e
  355.     UpdateList2.clear();
    3 `. j  j( H9 f( G: g
  356.   }
    4 _; u9 e: X, [1 r+ y/ f# c/ J
  357.   if(UpdateFile1.size())
    4 w% O5 D8 O2 l2 w$ z( [/ g, a
  358.   {& ^2 y8 X1 {7 k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 ^% i& t: v5 F
  360.     {% K' F' J1 U4 G- c' T* w
  361.       file=(*p).second;
    : H7 `% n0 ]' v" V% P* [
  362.       free(file);
    & g: E/ a) T9 a* _( d" a
  363.     }' @8 {) w: R2 x2 G$ U8 L
  364.     UpdateFile1.clear();
    2 {  n. t# y  o- C6 g) V# e
  365.     UpdateList1.clear();
    - E, p; b% i* X5 ?# z
  366.   }
    , w2 x3 y; H& n7 c' }+ K7 ]
  367. }  
    2 u" G  N; x, c( t
  368.   
    - U7 i  t7 F2 s* t/ ]8 W( [3 k- ^
  369. BOOL CRevAppApp::CheckLocalVersion(void), i. o; _8 [, K3 w
  370. {
    + d( x3 G* M5 S' ?9 X/ r3 S
  371.   int c;2 M0 z2 {0 h4 i* L* W8 P
  372.   LPUPDATEFILE file1,file2;6 J5 Q% _2 ~7 N' _
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    . A, P/ G. d1 i) ?
  374.   std::list<CString>::iterator l;+ j  l2 v" t5 l& l# c
  375. - l( U% Z. y8 \- s
  376.   UpdateLocal.clear();. X4 N1 A& V5 ~; {; D' X/ e& U
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ; h8 B4 q1 N7 x3 _; b+ y! Y, O( o
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);- `  M/ ^( p2 T4 q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : u! k, I  q: O7 w$ e( {) c, M
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    3 K7 G$ U7 v( a) N( n
  381.   if(UpdateFile3.size())
    4 Q0 M  f' [  ~$ N
  382.   {
    2 s+ i( N2 }2 x0 P. k  {
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    6 A4 R! o0 d+ z+ g% C0 h' n6 Q: \
  384.     {
    : L: Q) M9 L6 c3 ?9 u7 ^8 c# P, W
  385.       file2=(LPUPDATEFILE)(*i).second;) C! Z9 h# P% R: {
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * J/ o" Z; C- Q5 n
  387.       {
    - W* S+ x( l7 w1 m
  388.         file1=(LPUPDATEFILE)(*p).second;
    6 P, I- f% o: Y4 H7 h  z2 g5 P, Y
  389.         file1->vers=file2->vers;
      a" D+ g0 K9 u3 y1 P
  390.       }% U6 _: e+ k) J6 v$ A$ I& J
  391.       else9 J4 Y: K6 S- z! k: K6 w" ?* j$ l1 P
  392.       {# a+ x/ H* V- I0 A7 P) f3 p
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 w  e8 h: ~. Y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    / d1 [  A4 T% q  X- X# g, V3 ~7 i
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
      k! s5 w% t/ E3 a% c* [+ Z
  396.       }
    4 ]0 C5 M3 p3 O  N* R0 v* @; N
  397.     }) L. a% d; A5 b0 {/ t* Y
  398.   }
    9 a3 `& j& \9 I1 ~+ C" u6 {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % }, L  g; _5 o, h) z/ N2 d# j" R
  400.   {) i- ~, T* T' x2 R+ ~, e+ }' W6 x
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    2 a2 m! o. P  D1 D5 u& w
  402.     {( e3 @4 C5 B4 v6 n) c5 n& Q0 A, Q$ J
  403.       file2=(LPUPDATEFILE)(*i).second;
    6 V) `# x5 d$ B: `7 a
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) e% h7 C' b8 b
  405.       {5 Q4 R4 u4 I' T/ v, i+ _& D
  406.         file1=(LPUPDATEFILE)(*p).second;$ y" K! m1 W4 g& f  d
  407.         if(file1->vers!=file2->vers)& y9 {0 j  {( c: m  O0 c* ]
  408.         {1 j% A/ g$ Q# \! u' S
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 j5 n. o( u' F/ E/ E
  410.           c++;! c  i; D; Y' B) R% A+ }; ]
  411.         }5 ^7 f+ S' o& D% v* R5 Q6 x
  412.       }. G) p3 t6 n' ~" f( u  O8 c# T
  413.       else
    $ k2 ]  x' ~) N. c- m% q+ D
  414.       {* [0 V8 T" [! Y% L0 [7 l
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 G2 w9 R! V, c& K
  416.         c++;
    / o0 B5 A! [- }4 a% N$ C5 ~- w
  417.       }
    1 v( {5 O6 A( o5 w' M: h
  418.     }& Z" C: ^7 q" K3 d
  419.   }, K/ b7 |: |' ?* ~
  420.   unlink(".\\DownLoad\\update.txt");
    ) _0 Y! {6 P% Z% Z3 N6 l
  421.   if(UpdateLocal.size()) return TRUE;
    ( o' z8 z  ~! P9 `: f8 e
  422.   else                   return FALSE;
    ; _* P5 T; {9 j2 @- g4 b0 `: h4 U5 ~
  423. }7 T+ s% y* A6 \- g. G

  424.   [* {9 I5 U6 j! l- i# g- P
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"# b: p) v- Z! l% @. \5 M( J7 g
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn": |5 _: w& ]# n- w) H) [* {

  427. 9 B' R# q5 @+ S6 |& }

  428. : q- x: ?; a" z, B1 X% h4 S0 i% U
  429. 8 r1 G; L1 _3 V7 B! f& a
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    + w( A# x2 ~/ Q: h- _# k" v
  431. {0 k3 u0 d7 j5 y, F
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;* X* p! Y3 U: G& H5 [- s6 d
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" n0 O( e! Y) W8 P6 m0 t
  434.   {; x: c# \! ~" ^. J
  435.     char szLanguage[50];
    ; C/ I5 i4 t. m) f/ M8 b: z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 B$ A$ X5 L! k7 _- t7 h+ @
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ ?' O5 u1 k+ S- G& f4 I% J
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 s# a& o! S. P3 i6 i
  439.     else                                   m_iLanguage=ENGLISH;
    # q& G( Y( `$ Q) @5 e3 u, B
  440.     char szRegister[100];
    + V2 ^5 I5 X, \9 P
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ A. m, ?9 U$ a& I, p4 Z- t
  442.     strRegsName=szRegister;
    2 L" G1 |2 g8 F' |! C
  443.     char szPatchURL[100];
    4 x: i0 _# x9 _* @
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( ~% n8 k" ?; m( @0 ^
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# u2 U5 G3 C0 p
  446.   }
    ( L, Q, m6 N) N9 E+ c/ A; {& B
  447.   else8 L$ G% N; t; t8 h, K: b* n
  448.   {
    % Q$ f# c* t: m
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ; F9 ]% R6 S. p7 R$ g; Z2 l" R
  450.     strRegsName=DEFAULT_REG_URL;
    3 i! |, T' g8 K6 s+ e" @0 B8 }
  451.   }
    " N7 l- H( \1 L% `
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ! M8 k5 f* `% z: ~- i
  453.   {2 a; y6 `! Q# o2 p2 P, N8 K
  454.     char szIP[50];
    . r  m3 b" g, }# r, L/ t# \; e$ U
  455.     char szDIR[300];3 d; G) N, ~% f( R; A$ c7 v! X
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    7 S( c. S3 }. z9 K6 d
  457.     {) m2 D" T- Q3 E( g7 O% A+ p$ v, U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    1 T. w# v& w0 e- N" r2 U
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    % O7 g! M. q% m& v2 N4 u9 V2 G
  460.       strHostName=szIP;1 Z( h) |  z$ e3 @6 ?0 L$ n: L
  461.       strHostPath.Format("/%s",szDIR);& K/ z! ~; o2 u' B/ S
  462.     }7 s4 r$ l' M% S5 ]% I8 W: u; v* I: e' F" I
  463.     else; W  J* _. P4 R; \( _8 k: l
  464.     {/ r5 l; ^4 p! [7 i
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), b) F/ ]/ E" e& |4 z7 {. @( E
  466.       {2 B* K$ ]6 l' T0 |* c
  467.         char szLanguage[50];7 t' n9 Z/ G6 u* P! V
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( X7 H* ]/ _$ X3 d/ `% i+ R8 H! y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 M) [7 D. N8 Z. @+ ^9 i7 v) d
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . W: f( _2 z, j' k6 m8 T/ A
  471.         else                                   m_iLanguage=ENGLISH;
    1 J* V8 P6 k( \0 W
  472.         char szRegister[100];
    9 `7 K3 g$ Y6 c6 h5 o5 t
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ ~" J* a% D5 L' k( p
  474.         strRegsName=szRegister;
    % J: n- J+ S& A; c! d% j% V
  475.         char szPatchURL[100];
    * h& e* O# ^% S6 g+ t
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! y) \( K. g  t4 t* P
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 p5 r. D5 S0 F5 P1 j
  478.       }
    ' e! g9 L( g4 W8 f" g# d
  479.       else- K5 w5 O1 t% q# N- C
  480.       {
    ) H/ u! O! g! i
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);+ [' `* {( e2 ]& X  @7 J
  482.         strRegsName=DEFAULT_REG_URL;
    6 h1 S7 h: _2 K( c8 O9 {" p* e3 ~* w
  483.       }; O( Z; r- W" m' i
  484.     }( w8 g$ M$ ]0 _% S4 H- o9 y
  485.   }
    6 ^6 x! R. Z! X7 X
  486.   return true;7 }. ~! S4 E. u* T3 H
  487. }
    & \; A  d) T+ d$ Q4 N5 r

  488. 5 F. o# B  o+ c1 Z. z
  489. #include ".\ZLib\unzip.h"" A5 f+ E! z% t# Z
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    / i" I. q4 Y; [9 K
  491. /////////////////////////////////////////////////////////////////////////////, o- J) [7 f$ j) k% a; g
  492. // CRevAppApp initialization, O. t+ L1 q& d, C8 x/ u
  493. 3 i% ]1 B/ _' B
  494. BOOL CRevAppApp::InitInstance()# m$ F3 {- c- y) j: d+ ~% V6 r, S0 e7 x
  495. {
    ! c* D- H" Y' _1 p# r$ R2 @
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , J  q7 j! C1 i5 g1 y' J

  497. 5 P" b+ k7 E  e+ [3 @; z) n# S7 e  y
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);8 U" u* q6 D8 j8 P! T
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ) I0 }4 F; i; h# i2 S8 D
  500.   {
    / ?" K1 j1 z/ z4 a. B) L. v7 j
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");8 l7 c3 @% n9 K- w. W- k" u% x* U
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    1 p# p0 A7 ~# w! c5 f4 m
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))9 i7 y& X* w4 v5 ^; r' `: N  [3 X
  504.     {  t" D* u& c' T  ~+ F3 t
  505.       strcpy(szPath,szPathTarget);8 k2 v( K: N/ }# V
  506.       SetCurrentDirectory(szPath);5 A  r  t. s+ x) A8 `
  507.     }8 p+ _& z$ O- j9 s! ~
  508.   }
    6 m, \6 p( ]/ R
  509. #ifdef _DEBUG- x, _( g: x, ?' B& w  c: n
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " K& Q! r( }7 o( r1 L5 w$ P' z% r0 ~3 v
  511. #else
    & t! h4 w' w: L" o
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 G6 B4 C8 A, V+ I8 Y' l: y/ b
  513. #endif
    4 Q' k: q( m* s! l( L3 F
  514.   {) ~& A0 X1 C( `2 i1 p8 D" H
  515.     char tempFileName[MAX_PATH];
    7 g7 M5 r  J5 C: a( `  ?
  516.     strcpy(tempFileName,szPathSource);
    : _" p3 M: \! U
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ' ^5 W, U: i: d1 W& r" ?
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    * t, @; H0 {' U: k2 ?+ V
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);6 B3 U9 Q: y9 y8 X. P) ?/ x- z/ L
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);- [  t& N2 k3 |$ c' L9 w
  521.     return TRUE;
    5 q9 V" d) Y4 H: l, Y
  522.   }4 A1 \1 h/ E" {- I
  523.   // Nuke 0118: Delete run.exe
    3 ^: B/ e7 x9 h& ~) s1 b
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    * M" [3 l0 I. w- f
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");; P& j- w8 e0 y! @) U4 G/ `# C
  526.   if(!ReadCfgFile("Config.ini"))
    1 Q. j0 g- j0 C' U& [# R
  527.   {6 y) X( q+ _9 [# x, d) f3 J0 m
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    4 f4 n$ M7 F* \3 s0 r1 B
  529.     return TRUE;; m/ g! I: G, d2 n
  530.   }0 B9 w0 A# L0 v
  531.   HANDLE mutex;" e; [8 u$ `7 }8 c
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ |( P1 g8 x4 b$ M
  533.   {
    ! [8 r& {. \: L* ]6 B- W" c; M
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ) ~/ R, f2 o! D- e2 }6 A: V
  535.     {8 T' O& t+ G: T: j& }0 \6 ?8 @6 G
  536.       CloseHandle(mutex);
    ; w' v$ ~; p% q' k* f/ M0 }2 y) g
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);: x2 x4 w$ X5 Z* g( `6 v
  538.       return TRUE;/ m- [: b" l3 B3 ]
  539.     }! @6 J9 X9 l3 X: g
  540.   }  " H2 t6 h! X! e* P5 b: {) ^) i; R2 W
  541.   CloseHandle(mutex);9 Y# H8 s; G( X' G5 o
  542. + \6 n/ Z0 J2 ~- h
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    + h! \( A* n) q1 l! q/ c

  544. 3 c& S' W* z  Z4 z2 z
  545.         AfxEnableControlContainer();
    " n% ~! `" M& t4 {

  546. : v5 w  _0 k) ]+ R4 O
  547.   bCanUpdate=FALSE;8 Y0 S% x# Q" z2 _$ j- @
  548.   dwStartUpSteps=1;4 a/ q+ @( U- e* E- P  ]/ }* X
  549.   dwProgramState=AP_NOTHING;" B$ Q" d* [6 d% G' i
  550. / a  h* i* G$ B& K: a3 ^* Z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" x& b( G# n8 ~, K8 s

  552. & U( O  ]" p8 r% ?' P+ z# M
  553.         // Standard initialization
    $ v2 M7 C" q7 Q
  554.         // If you are not using these features and wish to reduce the size6 t0 h, U+ ^' C
  555.         //  of your final executable, you should remove from the following" E& W( Y; ^: {. {9 @
  556.         //  the specific initialization routines you do not need.: I6 w) `& P  s& V; o4 H9 W

  557. 4 k! V  P7 D$ ?$ x! S
  558. #ifdef _AFXDLL8 A0 f* T2 s- m' A4 O4 u
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    0 x% |7 s8 S) j" @( j$ n
  560. #else
    ( [' {4 t' u' u7 ]7 f% ?
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically6 \' w6 y1 J! ~4 Q) }# }# d
  562. #endif
    " X5 E- q2 U/ ]6 V/ i

  563. ; i$ K7 s% N7 ^7 q: B
  564.   dlg=new CRevAppDlg;. ?0 Z1 I, g0 w0 N. y
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    . U8 F! y- {) Q# [  j
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    1 {/ V3 G* y: V7 ?6 N0 D
  567.   m_pMainWnd=dlg;' {! z( Y- T' R0 q# L

  568. 3 Y. q; d; m3 d0 l. C, V$ h0 m
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);, m" ]/ [7 i0 h/ H# \+ \7 K+ F2 O
  570. , E  y/ A( K% M" P% J( _
  571. //  GdiplusStartupInput gdiplusStartupInput;% |9 c" S5 u' n
  572. //  ULONG_PTR gdiplusToken;, f; O! S3 _& X. X
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    + }1 D2 G% A6 r
  574. : e, t* r5 Y  }: F, ~& l
  575. //        CRevAppDlg dlg;
    # q4 p7 O3 b2 g
  576. //        int nResponse = dlg.DoModal();
    0 M) g6 Y/ l4 K" O0 X
  577. //        if (nResponse == IDOK)
    9 q8 W) {" u& J$ U8 P- @
  578. //        {9 e5 S' G# G5 ~, N  W8 f
  579. //                // TODO: Place code here to handle when the dialog is
    8 X4 l# t% F  {8 m
  580. //                //  dismissed with OK$ y; g7 L% R! l- \" Y
  581. //        }
    8 T6 O/ ]. u( `% B
  582. //        else if (nResponse == IDCANCEL)
    ; b( O( y, L9 z1 q
  583. //        {
    8 u; E8 G( _' q* p' F% b+ N* r
  584. //                // TODO: Place code here to handle when the dialog is6 F/ A  w/ o" i+ @( d+ E" I
  585. //                //  dismissed with Cancel
    ! z; n( w+ W# D3 n. t
  586. //        }
    # u8 p& e$ f$ ]$ E9 a% T
  587. # z. Z: B# U" h. {5 L, T( i
  588.         // Since the dialog has been closed, return FALSE so that we exit the- v* g3 v: ~! X( R/ U0 l1 W0 G6 e
  589.         //  application, rather than start the application's message pump.
    3 ^. g$ h2 Y/ l# F
  590.         return TRUE;+ K5 m# x3 j# S+ d
  591. }  `6 C$ g2 [: Y" R6 ~
  592. 8 k: M  o# d5 K; d) b; Q
  593. char *CRevAppApp::strtok3(char *pSource,char *token)3 {, }  Y, `; _) b
  594. {
    : Z- `. @' f; C) q  k# N9 {
  595.   int i;
    5 V9 T, s; C4 E+ Y& m
  596.   char *szRet;' y% x- m! W& P- ]

  597. % ?$ I& P7 Q: r: t5 @
  598.   if(pSource) { itoken=0; sztoken=pSource; }. F, m3 {+ ]) \* y( S
  599.   if(sztoken)4 V0 ~. C# h/ x$ [( n. I. a6 I
  600.   {
    $ X! t+ s' M) e* A* b$ T7 V
  601.     szRet=&sztoken[itoken];% q$ k( q  O9 D1 j- U
  602.     while(sztoken[itoken])6 L% e( ~# d' S
  603.     {$ h' M* i  L0 Y) |# c
  604.       for(i=0;i<(int)strlen(token);i++)5 M- O! _8 [4 m6 E  ^
  605.       {  V; t! c% ?8 a/ `9 J* W! g. I- m; ?
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    / d' G; a. E4 A1 v' s, l/ w& y
  607.         {
    ; s! V2 T7 E  _" M7 u7 I5 }' I  j
  608.           sztoken[itoken++]=0;
    * C8 C- b! o% w2 l
  609.           sztoken[itoken++]=0;
      a/ _) o9 y) d
  610.           return szRet;0 F! ?5 ?. g% y9 ]* j
  611.         }
    * e* T9 \8 y# C! k$ t, U
  612.       }
    " v& c6 [. A; Z3 S! a7 _
  613.       itoken++;8 c" R3 E* ~2 X  A
  614.     }: X' g& [4 u7 }; i( o+ Y
  615.   }- }" j$ F  H3 A+ L
  616.   return NULL;4 [& e9 q) `% t
  617. }4 Q8 l5 s( H& e
  618. 6 g, Z* r% _/ T+ q$ w1 F3 }
  619. void ProcessProc(long Total,long Current)
    ( I7 }$ m0 a0 w7 z& S
  620. {2 l& t1 O) o$ ?. O5 j& Z
  621.         MSG msg;( b, y3 f0 ?( S8 s/ D
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    3 L# S/ I- h) g. t! b
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - M- I+ p' Q* D7 B6 V1 N4 Y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))+ E- q- A. u0 Y) S
  625.         {
    * a5 e- A  M+ E6 x: \9 f; i
  626.                 if(!GetMessage(&msg,NULL,0,0))/ ~5 v( G: v- w# W2 t! T1 f
  627.                 {
    ; l; u/ O% O6 k: o( ^& x) o
  628.                         return;7 y) _# N1 P( a. r: t
  629.                 }9 n( o6 T4 u+ z' m7 C9 k
  630.                 TranslateMessage(&msg);, [9 b$ u$ ~' w% w" E
  631.                 DispatchMessage(&msg);7 G7 r$ G, M3 r: r) W0 p' i
  632.         }       
    " ~! t" L' p4 P) Z7 Y! ~+ Q
  633. }  o0 c3 d5 ?$ P: V: \+ a

  634. 3 J# U2 I6 U; U( j; F
  635. BOOL bFirstChar=TRUE;
    ( r+ g& S! A* H% O/ A1 w( l$ \2 D( j: L
  636. 4 a6 o% l* z" O* x* r% L1 ]" q9 L0 `- o
  637. BOOL CRevAppApp::OnIdle(LONG lCount)  Q! p" K- e* d" ~
  638. {
    - b# A/ D: a; A5 _
  639.         // TODO: Add your specialized code here and/or call the base class
    0 w  D: i% g3 {7 J& c8 \9 X
  640.   switch(dwProgramState)4 x/ O8 W; Q6 \
  641.   {
    1 o; h/ s% w+ [# k
  642.   case AP_NOTHING:
    4 ~4 E: }8 x" y# L/ A
  643.     switch(dwStartUpSteps)
    5 J6 K( [7 U' w6 [
  644.     {& q1 d8 E' C- ?& R6 \: Y, m# w! _
  645.     case 1:! |) ~5 @5 Y2 Z  d3 x
  646.       {$ ~8 `9 Y1 h$ X8 Y$ L: t5 P! ^
  647.         int i;
    - ]! A4 Y; F; ^. p- K
  648.         CDC *pCDC=dlg->GetDC();
    2 b1 E. N5 ~6 s0 \  S, j
  649.         HDC hdcwnd=pCDC->m_hDC;- N9 B+ Q' w, V" _
  650. //        Graphics graphics(hdcwnd);& J& L1 u* n; P# f7 x0 B) D
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    3 t+ \6 V: N- D7 Q* }4 T: P  g
  652. //        INT iWidth=bitmap.GetWidth();
    : s! v+ u! _' ?9 R
  653. //        INT iHeight=bitmap.GetHeight();
    0 ~$ E7 `6 E: x
  654. //        Color color,colorTemp;; t' _( V8 x3 o. C' U0 P: b
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ) E9 P  l8 z$ r& J2 R+ s
  656. //        {
    & {1 }0 k# \! g1 X- u; ?" q1 O
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    1 E) U1 y# s7 q& k/ v! p+ j
  658. //          {
    9 M: c' [( T" d/ w3 \6 x0 F
  659. //            bitmap.GetPixel(iColumn,iRow,&color);: l5 {" s# ?+ Q, Z$ {* G$ ^8 A
  660. //            colorTemp.SetValue(color.MakeARGB(
    % l& W# X2 s# u! d5 c' P4 a' A! x! ~: Z  j
  661. //              (BYTE)(255*iColumn/iWidth)," C/ J2 g# `+ h8 _1 f
  662. //              color.GetRed(),
    + u* F" @. \1 ?8 T4 d1 R3 X
  663. //              color.GetGreen(),
    ( Q7 V: c4 m5 Z, R; v
  664. //              color.GetBlue()));
    ' y/ I3 y2 t8 [# |) c+ [% S0 J
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' K7 R% a0 C* i! q
  666. //          }
    . \2 y( ~8 q# V; k7 u, q
  667. //        }
    ) `/ X& S  [' k+ b2 }( y6 t& h% v
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
      R  Z! c- y3 h
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 [) a1 s/ l, k. b
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");. @2 E* L1 v$ t- X
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , T2 y. h( ^! @) n8 G/ K
  672.         for(i=0;i<240;i+=8)
    ( l; ]9 w2 w, j3 B4 E# u4 x  F7 i
  673.         {
    . H/ u- N  U9 [5 g1 j
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # {, m- I" L. }8 h" D
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * f, \" V- B0 \% F+ c/ E
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & k# I" ]9 B  @1 m3 I3 h( z
  677.           Sleep(33);/ }, l4 P4 S3 Y/ |" K$ g
  678.         }) S/ ?9 \6 t. H8 e7 r# n- h) W! y
  679.         Sleep(1000);- K: k& I& g/ J9 n; A+ c
  680.         for(i=240;i>0;i-=8)" l7 t. R' H. u' \
  681.         {" r6 @4 h* W' q' e1 U
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 ]/ O" [: u9 f* G) C. e: U
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( u: i, Y6 k0 J) p" `+ [. \
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) |+ D8 r+ A/ F) Y
  685.           Sleep(33);2 b3 T  e- |* r
  686.         }
    9 U; I- N8 o- w3 Y$ N* c
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    5 L2 k6 ]- j$ O9 K8 U6 |
  688.         dlg->ReleaseDC(pCDC);
    + P9 S2 x- g2 E% k
  689.         DeleteDC(hdctar);
    # \7 |+ l8 y3 n# Q* r( f2 F
  690.         DeleteDC(hdcsrc);
    2 ?' o# h7 k; G6 N" I
  691.         DeleteDC(hdcorg);
    ' [, ~* }. m3 e8 Z/ h$ Q
  692.       }
    3 t: K# F! o* w1 p: T  M' o, {
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);' p9 v8 E5 }' A- p! x" v: Z
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    + O; Z4 ^0 Z' R) K% I$ q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");  g3 K' N, G) ^1 a+ S5 h
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( b0 G- R& \4 ?: c; l& E5 m
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" @) j- F' w0 w: L/ T
  698.       if(!Dn.Connected())$ Z9 c# w% f" z6 v
  699.       {
    3 V8 o8 C1 d) `7 f( `/ p, P# ~0 g
  700.         dwTotalFiles=1;
    1 V% P5 u3 f' S( {% x$ M
  701.         dwDownLoaded=0;' K4 [+ X% I5 @8 G5 I' V( s+ \
  702.         bSilentStep=TRUE;0 R3 F& ^& q9 V
  703.         bCompressed=FALSE;
    - C- c, {9 \8 ^5 o# ~
  704.         strExtLocal.Empty();
    2 p1 k2 Q+ Y- x/ B
  705.         strFullName="readme.txt";* c9 o. Q& S3 l9 O8 i
  706.         dwProgramState=AP_CONNECT;
    ) y% w0 Z4 ^" T% K* j3 r4 |# V: |
  707.       }
    # T1 B8 `: L$ P2 y, I/ m
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();! K+ S. @6 i& E9 p$ K
  709.       dwStartUpSteps=2;
    ' I& E, M* P- G' k; p6 [3 t
  710.       break;
    ! ~1 v4 Z: G5 K3 ]% r, }3 }6 L) `
  711.     case 2:! ?2 _- U4 z! ^
  712.       {
    / E6 p, q0 F9 a
  713.         int iEOF;: ]% D5 i1 e' A" t! z9 H
  714.         FILE *fp;% k$ d5 t$ i/ O  e% s. }
  715.         char szString[512];
    $ k5 _# m. c0 R  W
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    8 w# C) ?! I; ]2 G; w* G7 v8 z
  717.         if(fp)% Y! T8 l$ Z8 m7 b9 N" E
  718.         {3 L9 q7 I+ d9 E: ?1 e/ l
  719.           do
    9 P! p: y7 I4 c6 N1 l0 T
  720.           {
    3 o, u% o/ F" G
  721.             iEOF=fscanf(fp,"%s",szString);, s! n/ E  q4 n2 E1 G, d
  722.             if(strlen(szString))
    ) s. E) s+ l" x% E9 M. |* C) E& J
  723.             {/ \5 ]8 |4 W6 `( l# P
  724.               if(bFirstChar)$ ]9 W. C6 L$ k4 u/ u" A
  725.               {. a5 {0 i6 ]( \6 r% ~' {) M
  726.                 bFirstChar=FALSE;
    ; F2 _  N! M9 ~0 L
  727.                 bConnectIsBig5=FALSE;2 |, d( M; M0 n6 H2 l( z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    4 e, K% p: c2 I
  729.               }
    1 V- n: s2 `* Z0 |1 q/ _
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));: X) |2 w2 [: o: E# d7 V- x* m
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    $ f2 Q0 ~2 x5 L1 _, S& m
  732.               dlg->m_ListText.AddString(szString);! S  ]1 }. n4 J$ S0 d; _$ j' B
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ }/ U( Z/ q4 J8 m! d% b
  734.               *szString=0;
    " e. u, {1 Z0 k' b
  735.             }
    0 H- b; g2 z( ?0 m, M) B+ ^
  736.           } while(iEOF!=EOF);  A$ B0 i; Y, u1 a5 R
  737.           fclose(fp);( ~, K8 E& k5 ^9 {6 c
  738.           unlink(".\\DownLoad\\readme.txt");
    7 {/ F- X3 m, ^" K1 R% J
  739.           dwStartUpSteps=3;4 ~% }) V) A8 [: X6 _7 l
  740.         }6 F. Y( j1 g" }8 s
  741.       }
    - R5 ]" c# K, j1 _; i- L4 C' O$ e9 v' }
  742.       break;
    ( I3 r4 x- a4 U1 R- |* y4 s9 R
  743.     case 3:1 `  p! V: Q/ _! Z6 G0 N! w
  744.       if(!Dn.Connected()). {' i3 Q- X# K$ b
  745.       {3 E0 c& z' r* d+ }2 r
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    $ i. s; y% O, w- m+ o7 s# g
  747.         dwTotalFiles=1;5 U; x! ^: D1 e- x8 j9 I
  748.         dwDownLoaded=0;
    9 e$ W/ ~; r. O
  749.         bSilentStep=TRUE;1 [3 N' n6 s9 O* Z4 X
  750.         bCompressed=FALSE;
    . K$ p$ _% h' B- K3 s
  751.         strExtLocal.Empty();9 w" W( r. K& o
  752.         strFullName="checkversion.txt";5 [1 w' }3 R1 W9 M
  753.         dwProgramState=AP_CONNECT;* j  @& u, e) b4 O  X! F9 J
  754.       }' `: p  g$ `% a6 z/ l( H9 e
  755.       dwStartUpSteps=4;
    ) D5 x9 [# {- u# C( |
  756.       break;: P% {/ M6 f" S
  757.     case 4:6 W3 h+ |5 ~/ ^8 h+ \4 o
  758.       {2 L7 N7 Z  [6 p& j" u/ |' i
  759.         FILE *fp;6 Z2 z: p* y0 M
  760.         char szString1[128];
    # y* f. p, l3 ]1 r4 \! b9 I( s3 z
  761.         char szString2[128];. @4 R0 I1 t3 }
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    6 J; x( Y, V. [# @1 _
  763.         if(fp)
    9 c, J& g% d% c
  764.         {* M0 g2 ~0 o& J9 Z* m# T
  765.           fscanf(fp,"%s",szString1);
    ) o, ?$ L  `7 i3 q& @) l
  766.           fclose(fp);
    " X* c: \1 {, Y- i2 N' ~
  767.           fCheckVersion=atof(szString1);2 H* S3 p+ A( N" X0 U
  768.           fp=fopen(".\\checkversion.dat","r");; w6 P2 W" w5 f. l* t9 j1 S
  769.           if(fp). \- H. [: A& y* R
  770.           {
    5 W$ T3 U% F# u: K8 Y* e8 G
  771.             fscanf(fp,"%s",szString2);7 U' b; j" X) U9 T" }: ]' p
  772.             fclose(fp);% S+ A3 I% R- ^& v- R7 {) s# f
  773.             if(atof(szString1)!=atof(szString2))% k( S2 n% {- d3 \
  774.             {; d7 Y# Q6 j/ P. W! n! l
  775.               if(!Dn.Connected())
    # r" t& M* r4 n! k
  776.               {& x* n2 u+ J" V9 i" n. m1 z
  777.                 bFirstUpdate=TRUE;
    6 |+ b, o' q) u& @. }' z3 t! U( w
  778.                 dwTotalFiles=1;! B7 i+ n, N4 H7 E. \. U; h8 T- H
  779.                 dwDownLoaded=0;
    & p) [5 _5 O: U( S' e
  780.                 bSilentStep=FALSE;
    ! A( E/ ^' [/ G2 |
  781.                 bCompressed=TRUE;
    ) b) T' D, n# S' A
  782.                 strExtLocal=".\\DownLoad\";
    $ b6 W) F0 i8 z9 J/ v% P
  783.                 strFullName="update.txt";2 c. P! z7 W2 x* q% g
  784.                 dwProgramState=AP_CONNECT;2 t1 G6 v" ~8 N1 [5 c9 K
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 e. [0 J% U: A; }
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    # d& _. A: f) Q4 }" t
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");/ g6 e$ Q' x; s) @9 {8 o- {
  788. ) x) v. b) V4 q' b& ~! V2 K
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . o0 J6 L3 G. ?, T) r+ T% g" W' s
  790.                 unlink(".\\DownLoad\\checkversion.txt");8 p$ d2 j3 O' c0 m' T3 s# E
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)) z) T$ L5 w: L5 [9 j  N% ?9 M3 D
  792.                 {0 S! G# e& @/ P9 n6 b( M+ S
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    $ @% Z8 G! @/ P5 F+ @/ D. k
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");) P+ I( ~4 u4 R" [$ H% F1 l2 @
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    " z* x( w' k7 `2 y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ ]+ }; W. c, H5 C& }* H

  797. ) B/ E8 y5 V% D( T7 f' n, B0 P
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 V" g, `( s- J+ v2 r
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . M7 p/ R( J: Z7 U+ v
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");- g* d8 [! _; F- m* q5 X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  W7 H  y6 z& M  d
  802.                 }( k) G1 J1 y# q6 J1 l. B4 _& I7 J
  803.                 dwStartUpSteps=5;2 F3 C( [: L0 r" I/ a0 t1 u
  804.               }8 v5 s# I: i2 [! |+ Z# r
  805.             }
    ! T8 Z6 l+ @/ k* F0 _
  806.             else
    5 @/ x  u; ]" m5 W' J
  807.             {
    / h# F  x' p9 p. F
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ; I7 r- e( l* X9 l$ K5 N, b' _! S( [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");' X, p; e- W/ G5 [
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");% N! i" B- f6 W/ H6 |1 x
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 Y8 W% n& H; i' a

  812. % B4 d" t3 E# ?  @
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; s8 q% @' g: s5 i1 a3 a
  814.               dwStartUpSteps=99;! @! ?" C1 g6 {( h
  815.               bFinishUpdated=TRUE;" J6 Q) l8 y7 f3 L7 ?
  816.               bCanUpdate=TRUE;
    " {. Y* B2 w$ K
  817.             }
    2 K/ D* a0 ?: C) f
  818.           }
    ; r* B% d) W% I# B# u" T# Q5 T
  819.           else5 E- j% `8 n: S) b4 Z: F
  820.           {
    2 ]  L; Z0 x; n" y' x
  821.             if(!Dn.Connected())
    : v" D# A; c/ Z9 j3 @, @
  822.             {+ v/ z0 Z, i4 A1 A, d
  823.               bFirstUpdate=TRUE;
      Q# P" q& A) E- P
  824.               dwTotalFiles=1;
    1 B. j2 P5 L+ d  x8 _0 q
  825.               dwDownLoaded=0;; ]% E; r/ ~0 j, Q: M
  826.               bSilentStep=FALSE;
    0 s% g. L- R( H  ]" p  D: R: m* `2 q3 o
  827.               bCompressed=TRUE;
    ' t/ k1 w6 O' `7 H
  828.               strExtLocal=".\\DownLoad\";0 m% }6 f. Y2 w% u) [, B
  829.               strFullName="update.txt";
    9 b$ r& Q! @' g* Q
  830.               dwProgramState=AP_CONNECT;
    7 `* d0 [' N& a- ^7 P
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 c, E: m; L3 h# y6 Z4 }. Q
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    $ m( N7 j. Y, r+ U
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");- h" {5 T& ~+ F- |! Y+ P
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. ]8 K2 h; q, n5 m$ q% |
  835.               unlink(".\\DownLoad\\checkversion.txt");1 M/ ]# {1 L+ M) y0 C
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ! z. f4 A4 Z) j" `
  837.               {
    ; \4 S+ B! h% T3 r, V: D# p0 ~( |
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");; |2 W- p" \: \, Q7 m, y- D
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    9 n0 b: k. p/ e# S  \8 W7 }% M
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    0 s# H0 A' T% [) H- ]8 A( e
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ B' i+ f( j, A  j0 ~
  842.                
    / Y" _- R+ V, D& A- p
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 p/ S& Q+ o- l
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ x6 X( ?" H5 {8 i0 `2 W
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' E5 |) p( @/ G; L6 V9 N9 I2 V
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! O/ N  u  m1 W2 V, Z
  847.               }8 e$ B% y" R6 u2 g, M4 }6 U: d
  848.               dwStartUpSteps=5;
    / h; J2 o7 C8 L! m$ Z
  849.             }1 X7 {1 C  E5 m. M; L
  850.           }2 W, s% Q5 ~2 |  S8 @# r3 R, F: W
  851.         }0 ~, t- Q% R  {0 I
  852.         else5 j( L/ k$ ^* R0 O: e
  853.         {
    - ~: Q* b& ?  Q$ a# Q
  854.           dwStartUpSteps=3;
    7 v# M0 \: K* l- ^1 I; X7 u
  855.         }
    , k% A4 O1 v( e5 f5 R" t9 X
  856.       }
    + ~) i  ^7 y3 s/ t
  857.       break;( v3 |' B# h* g! m
  858.     case 5:* i3 O- V* }1 P& P* O
  859.       {
    " k$ E4 a9 U5 M5 P( }7 j6 b
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    , |' C* E( J) Y( `' E
  861.         {
    / @! |1 J$ U  {% h" |/ e( E
  862.           int opt_overwrite=1;. d& k$ A0 u1 o' X! i1 c. w
  863.           int opt_do_extract_withoutpath=0;! C4 g, R: C! Z! f* U5 E+ V# l
  864.           unzFile uf=NULL;/ p5 g# o( m6 C8 q" \5 S. c; R6 d

  865. 5 ]( t" q5 r, J5 f7 p  A( D! `% i
  866.           uf=unzOpen("Wsa.zip");
    + R/ J  ~  O2 \) I, n# U
  867.           if(uf)
    , E" [# U& V" y; R& f; J4 T1 f
  868.           {, A3 T* p% P, d1 Y; n
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    / ^# P5 b/ l& c3 |1 Z
  870.             unzClose(uf);* P0 J! `7 H3 T1 B5 g
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
      J* t) H) Y; k8 P7 g1 f9 c
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");5 T0 R* {) |* |. a2 T( T
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");' j* S5 M* D6 Q) u0 t1 ~& F
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + S' y4 d" p% r
  875.           }0 j1 A% m) h6 Z% V
  876.           DeleteFile("Wsa.zip" );
    / b5 \( W: E# G0 O9 R! E' j4 C
  877.         }) l- f" D1 o& u: E- B
  878. + z: Z% Z# q% {  Q. _
  879.         if(CheckLocalVersion())
    " F  B7 R+ X% Z. C
  880.         {
    + e5 k7 N0 o) ~1 l* p/ C7 O( `
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");5 S- x+ t2 ~9 b: ~) W! q
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");0 n. U" h$ T* a1 ~
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");! |  c( D% z5 F" k5 z* @" R6 y
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% {& v; N6 B: @
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);" t5 {" N+ c( _% x
  886.           dwStartUpSteps=99;! |2 y2 M6 d# Q% b0 Y
  887.         }
    ( J/ W- o; H1 @# A
  888.         else. w+ d3 l7 F# \
  889.         {
    " d; I/ i4 G, n- k. v7 ]
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    9 B, F6 d& C; a2 o) z: j
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");' M1 n# b, J. p- b8 \4 P# }
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");3 c" [$ j! Y2 y8 I7 P

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

: Z+ M2 b! Y+ K0 Z  o, H; x& |
9 Q; T$ ?& T/ Z8 _# G; x. y% Y6 g

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-3 23:10

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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