CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
4 T+ e: I- O3 ?0 L9 o" D
  1. / RevApp.cpp : Defines the class behaviors for the application.2 r0 d' p$ c* U( N+ X
  2. //! |) t/ [3 M4 W
  3. : y$ w( f+ k5 i0 i
  4. #include "stdafx.h"
    ' g" p3 {& X  U( m! \9 {
  5. ! {5 l* I3 }3 L, b1 {' c
  6. //#define UNICODE7 m7 _7 D, e; l  u+ C4 Q2 B
  7. //#include <gdiplus.h>
    7 S: v' B# n4 ]4 g0 J9 d+ c; F2 W- l- Z+ Q
  8. //using namespace Gdiplus;
      i/ S/ w0 K3 n

  9. " x- G  M+ `/ z$ l8 F0 o
  10. #include "RevApp.h"9 \0 Z* w) s2 {
  11. #include "RevAppDlg.h"$ t$ o$ W' }. J- s; d8 Y
  12. % i) J6 r! n9 ?, |1 j: ]
  13. #pragma warning(disable:4786)7 d8 X: j) h  Z
  14. #include <map>
    1 b6 A; H; T& b$ ^* m3 T
  15. #include <list>
    ; F$ u$ x) {% p. S7 o3 E
  16. #include <direct.h>1 J* f2 B" c' A* ^- O# u$ i

  17. 8 g( w; X) R; u' `! |: T$ E$ N
  18. #ifdef _DEBUG
      o( B8 `) x$ c- ^1 O3 N
  19. #define new DEBUG_NEW! J. T2 C! }+ q0 K+ [- j
  20. #undef THIS_FILE
    0 ~. o; Q* W3 s7 f
  21. static char THIS_FILE[] = __FILE__;
    ) J  M4 W# g$ a: r0 D: ]
  22. #endif
    2 k$ v4 i# P& j
  23. #include "SkinResDef.h"( S% a; h0 j" s' E
  24. #include "ChangeBG.h"
    / s5 E* U* @8 c  r
  25. #include "AFXINET.H"
    0 ]9 v  ^" ^( t$ H. w5 [

  26. & w! g% Q! m& v
  27. #define TRADITIONAL_CHINESE 0
    ( y6 S0 k" ~5 r3 h; ~2 C
  28. #define SIMPLIFY_CHINESE 1
    # W4 M8 {  m! @! G6 n4 P4 o
  29. #define ENGLISH 2
    $ u# H! Q' H: ?& I
  30. int m_iLanguage = ENGLISH;
    ) X8 z; ?- V' p5 l& I& n: m
  31. ////////////////////////////////////////////////////////////////////////////// W% w/ F1 N& R; X8 q) @
  32. // CRevAppApp( g  y+ M. P4 ^, c9 I* q

  33. + C+ S6 Q- @3 Y6 [1 Y* X& k
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! h& i# ]& }( z7 w
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    1 w7 y! l  G8 ^5 Z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.0 v, t% M* s/ I! Q) U( L
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!% w/ g: m. ^" _
  38.         //}}AFX_MSG
    6 E4 B8 k& \# }/ G/ [" G+ ^
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp); k7 i/ E+ V4 M8 V6 a% V" S
  40. END_MESSAGE_MAP()
    0 e+ T! U) V7 t* S. [$ K5 I

  41. " ]5 l8 D, J1 r; T
  42. /////////////////////////////////////////////////////////////////////////////: Q4 Q, R1 y& b- m
  43. // CRevAppApp construction& p/ N  u( O3 F/ g

  44. 4 x2 Q7 ]: M6 R9 T
  45. CRevAppApp::CRevAppApp()# a8 p5 O4 [% }" R7 q
  46. {
    2 V- K7 E! e! E5 U( A# n  v
  47.         // TODO: add construction code here,4 E2 }. p- F1 s4 m( E! D
  48.         // Place all significant initialization in InitInstance2 v# w; x( Z7 V& |! g  N
  49.   bDisplayIsBig5=FALSE;. C! p3 r+ y3 s6 o- p
  50.   bRestartUpdater=FALSE;0 `6 ?& _$ d9 M9 Y& j0 X+ f8 c
  51.   bFinishUpdated=FALSE;
    6 t9 C/ |" c4 i/ r# {9 Y: }
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;" ^0 m, M$ K: |6 }
  53.   InitChangeDataBig52GBKS();( k; S( I' y7 g
  54.   InitChangeDataGBKS2Big5();
    % }0 n1 u  y* }/ g1 V) M& k; M/ F
  55.         //
    ( ~, t( ~. j% K8 a( \) n8 x
  56.         bClickRunExe = FALSE;
    : q4 V' ]0 X* ^3 f
  57.         //
    ! U, G! h$ j0 m& i7 ~4 J  \# s! B
  58. }
    ! \- v. M' ?, v# U% y2 ^% x
  59. ; P# l( g5 P9 c5 x% C) M; E/ ]
  60. CRevAppApp::~CRevAppApp()$ A( n% |) h( e, S/ v, O* ]* T0 \
  61. {
    1 H: e6 q$ C5 E& C0 M7 U. P
  62.         // TODO: add construction code here,  }7 Y5 h2 w) r/ r4 d# h
  63.         // Place all significant initialization in InitInstance
    ' C: b% x  S( W) c: Q# s2 {
  64.   EndChangeData();0 b  ~+ D  J! S) g" j2 @
  65. }
    6 K2 R2 R5 T- U6 e
  66. 0 b4 j' L- F  i
  67. /////////////////////////////////////////////////////////////////////////////  z; A  ?3 K% S2 i. _; A
  68. // The one and only CRevAppApp object
    , i& r& h* X$ ]" W1 o7 M' Y
  69. - H+ E1 t4 A- d8 v: T% a
  70. CRevAppApp theApp;! a" J- ~$ N' @. ?# H* ]

  71. # g8 H' z& m1 k6 G
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ' K; o9 m- H: C6 \% N* Q
  73. {
    4 \; h8 H9 x  B5 p% \+ s  \# g
  74.   int iEOF=0;
    : U2 e/ a% \2 P
  75.   char szTempName[MAX_PATH];
    : _9 O- [7 O- G) C; H& l
  76.   *szFileName=0;3 e+ }) x7 `6 D1 L  t6 h5 m
  77.   iEOF=fscanf(fp,"%s",szTempName);. S2 [9 C. X# d8 ~; J1 a
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('); ^9 f) v$ O/ h; x$ i$ U* Z  T
  79.   {1 W" R& [7 q0 [2 o# s) ^+ }: J; h: B
  80.     strcpy(szFileName,&szTempName[1]);
    3 V. n. s( e6 `  S" s6 {/ W$ Z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): F7 H( ^  h6 Z7 J" Z! n
  82.     {
    3 N% e% ?. L- o# U) Z0 c1 M
  83.       iEOF=fscanf(fp,"%s",szTempName);
    # w! o& [5 r9 L3 V- h4 Y8 v% u
  84.       strcat(szFileName," ");
    " Y0 W5 G% s, |8 L, q
  85.       strcat(szFileName,szTempName);& d4 t* Q" [& ]
  86.     }
    * ]! w0 V' F8 o, t
  87.     if(strlen(szFileName)>=1)/ Z+ ^+ R; C' q6 k  x3 D3 i2 Z6 t
  88.     {& y. l: N4 L) L$ _
  89.       szFileName[strlen(szFileName)-1]=0;. |5 H" Q- P8 a! v) o
  90.     }1 E3 D: T0 `/ x: L: A9 _* d' f/ Z
  91.   }
    9 D( D  y" A8 E: H' d- z
  92.   return szFileName;
    * a3 ]0 R2 G/ F% C
  93. }" {: n( A. j: o# Q3 J/ m/ a

  94. / G$ N0 D! }" K2 A0 s, y. Y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    . F5 T# ]% r' ^4 Z0 a! P. |, _; D& p
  96. {  Z# c7 m* \& f7 f6 F: G
  97.   FILE *fp;
    ) M& _% U! ~5 d0 P: S
  98.   char *key=NULL;
    0 ?( W2 \3 ]; O, p0 n: z* \; [, N7 U
  99.   char version[MAX_PATH];
    9 i2 T2 w; h, Q+ r
  100.   LPUPDATEFILE file,olds;. y0 O! t. e3 b& e3 B
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    , W: |7 e8 g, V" ]  l

  102. ( S; h4 H% J. F% E/ |( m% L
  103.   UpdateList.clear();! c7 w1 F: ]2 }. X6 C; W
  104.   UpdateFile.clear();5 k5 @! u% \. L4 R
  105.   if(GetFileAttributes(filename)==-1) return false;1 H' u$ k% a3 C, ?# i' [! L- l
  106.   if(!(fp=fopen(filename,"r"))) return false;
    " A/ y2 H0 V, V- i4 N9 @
  107.   fscanf(fp,"%s",version);
    9 E& W2 C9 t/ g8 j' R! @: Q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }' S* i$ d5 k( _" K  {/ e, u. r5 z8 e
  109.   while(fscanf(fp,"%s",version)!=EOF)
    - K% w: E+ K$ U) r
  110.   {9 D/ l4 b( o0 X
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; E6 k2 l! f3 g
  112.     fscanf(fp,"%s",file->path);7 Z$ |) B5 }$ `7 r; p: a! T
  113.     ReadFileNames(fp,file->file);
    5 d; q0 |+ n4 u1 r$ Y; s5 a) [
  114.     strcpy(file->full,".");
    * f( G: @  L7 u9 ~0 @! C
  115.     strcat(file->full,file->path);/ }' s7 d( c; [# \& ]* ~3 J; }
  116.     strcat(file->full,file->file);. c  j+ B$ b( S+ Q: O. e; b
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())1 S/ ?* T5 u6 i/ D# O) [! \% C5 ]
  118.     {* D8 J" P" J9 e+ f% G. y( b
  119.       file->vers=(float)atof(version);
    / x5 k0 t4 t1 E- v8 A- Y+ U- }
  120.       UpdateList.push_back(file->full);
    5 _/ v* t7 P% W0 j' W
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));2 \2 |: d0 [0 n1 t+ t5 u
  122.     }4 Q9 E! f7 T% B7 z) `7 E" n' U
  123.     else. i! U9 {# b* s
  124.     {
    ' G* `9 @, E5 @- s) j" a9 W) f" `
  125.       olds=(*p).second;* p5 f- o: e% F$ q1 B2 S& [
  126.       if(olds->vers<(float)atof(version))$ [- x, I& a& o! P9 u5 u3 h( r: O
  127.       {
    1 K* [/ `3 S+ c+ ?
  128.         olds->vers=(float)atof(version);
    1 |3 P! y. i& _$ N  H
  129.       }- I$ x( S3 |; g- l( N: r
  130.       free(file);' ^* s" w- b8 H# Q) ~
  131.     }+ k. Q- m& V; @1 j/ G
  132.   }  b: O( B6 @9 o' y9 [
  133.   fclose(fp);6 h- ]. R: r- T0 X
  134.   return true;) i$ {3 H  e% |; h& L& r
  135. }
    $ x# Q& V  h, m# m# C9 }+ K4 \6 q
  136. 3 [- A( n; u, h# p0 q/ ~
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    % i4 N( X% Z) v) M, j
  138. {, S. y! P% `3 F9 u+ Z
  139.   TCHAR  szFull[MAX_PATH];
    2 x5 D& A; M$ q1 K# e% c7 J  S& r
  140.   TCHAR *token,*inter;' {" J7 S3 F: E/ J: m2 f5 K
  141.   *szPath=0;: m# u) J" c/ e, ]5 S
  142.   strcpy(szFull,szFullPath);6 k- [2 ~$ j. A( M7 C1 |
  143.   token=strtok(szFull,"\\/");) [& o' P5 `+ T6 z2 H, ^
  144.   inter=token;
    2 C) H; q; g: v' ~4 @
  145.   while(token=strtok(NULL,"\\/"))' [8 F3 g/ `  l# q/ [0 G, P
  146.   {/ X1 ]$ a2 {6 M: ~: M" B: ]6 w2 j
  147.     strcat(szPath,inter);
    / P# Z( m3 o/ U9 O1 G
  148.     strcat(szPath,"\");! Y* Y$ p) F6 G4 [, Q
  149.     inter=token;2 R" J9 a% @3 y$ v
  150.   }) }* v6 U5 J& T. p6 }
  151.   return strlen(szPath);9 ]* G7 b% Q. v/ A- ?( A
  152. }0 U" y+ [$ u" N
  153. , F& `" d) s  Y' B5 E
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ R. J; q) u  e4 l1 E" ^
  155. {; O0 N, R( D3 s1 v. I) s! x1 m
  156.   DWORD attrib=GetFileAttributes(Target);
    % ~% X1 h4 @& j! r  f* [3 l
  157.   if(attrib!=-1)
    4 S# k/ T6 T1 K
  158.   {$ E9 l* I# s3 h- F5 W1 V
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))  t3 T/ E, ]9 u2 s# U  X
  160.     {- ^. Z8 B2 N& u4 ?
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);) _( a# R; U' M1 c
  162.       SetFileAttributes(Target,attrib);
    8 T8 \% p  c4 ^6 E/ L9 Q
  163.     }% D0 m4 L. K  O- b9 r' ~! P
  164.   }
    5 P, d! _6 a& F7 \7 Q5 f$ Y
  165.   CopyFile(Source,Target,Erase);
    5 g. ?2 b. L; w( `9 z* W) z$ a& h
  166. }
    4 n. E) `, Z7 V# D  n8 ?% R* T

  167. ! Q" V% r  M/ g" O" S1 K
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)9 z/ x' f. m! J  a5 o6 u. d9 k
  169. {
    9 D* S/ h" f0 w, F
  170.      FILE *fp;  K7 g( x; ]; J, `6 Z! H
  171.      char  szBuffer[8192];
    + u2 T- J5 E" O/ h6 J. ~8 d
  172.   va_list  argptr;
    $ M# t7 u3 e% N3 I. {2 t2 ]; i
  173. : \* p! n* q/ d- `; d# T0 ^9 J: M
  174.         va_start(argptr,message);9 @0 k8 W) P& _* W, g) m
  175.         vsprintf(szBuffer,message,argptr);
    ' W$ t' J4 F& b3 }4 c+ w/ N
  176.         va_end(argptr);  f: ~8 S6 V5 n* k% ]1 X) Z
  177.   fp=fopen(FileName,"a");1 k& U0 R0 z* f1 f
  178.   if(fp)
    5 y6 _& I- m# v4 \$ @: a
  179.   {
    ; j( |: @2 p7 B5 T) ^
  180.     fprintf(fp,szBuffer);6 J( c$ b; u. H" T
  181.     fclose(fp);
    , x) S0 f8 a/ ~1 w1 i: K
  182.           _flushall();
    1 C/ Q6 {0 Z9 s9 U. ]1 f. k) @
  183.   }
    2 ?. ]$ X- ]& w3 _9 W; z1 R
  184. }
    & W4 H! b% O" l% Z& Z. i

  185. + g, \3 X% F4 S2 F  E$ h
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    6 X* N6 R# C2 v; c1 b+ |( [
  187. {/ e" [; l) ^% ?( U6 F9 j& z4 Y( _
  188.      FILE *fp;
    7 m, f6 M: K( L+ j
  189.     DWORD  attrib;
    ! \" A  y5 C( r6 f2 R, m7 H6 h
  190.   attrib=GetFileAttributes(FileName);
    " \6 d5 |. K7 J% o8 d4 Y
  191.   if(attrib!=-1)5 F$ F  j2 P: Q0 C, b7 U) ~1 q$ q
  192.   {
    6 H4 V5 n6 H4 D* U$ l& z: j: C
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    3 H, ?& n$ j: z3 k
  194.     if(!SetFileAttributes(FileName,attrib)). V+ r* J: c+ B" |
  195.     {$ w8 u' x  e0 [$ i" S2 }% h
  196.       return FALSE;9 F1 h* p8 Q9 H( Y0 G! `4 }" V
  197.     }9 G. ^- A. p8 H3 v- i' \# o
  198.   }
    ' s! M, j  ~6 F' v7 T3 T
  199.   fp=fopen(FileName,"wb");. S) n' H/ T( _8 \( A
  200.   if(fp)7 \0 h, u5 q% @" U- T+ o
  201.   {. p' e  J2 {" K. j
  202.     fclose(fp);
    3 u2 p) w( J$ ^
  203.   }
    9 j, c! t! \9 U9 k0 X1 y
  204.   return TRUE;
    ( Y, I1 M  G2 x- N
  205. }/ U# y7 @- Y' c, l- E
  206. 4 C2 d/ W; @5 I2 C2 U: l: u
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    / |: [! |2 u; O; V
  208. {& _( a- I, t- B7 |
  209.   char filename[MAX_PATH];
    ) Y/ v  b& B$ A9 x6 M5 O& c& p$ i
  210.   LPUPDATEFILE file,olds;7 ^7 T1 S  F) @. X  V& j* R- A
  211.   std::map<int,CString>::iterator i;
    : b  l) }$ @# n6 x. \/ Q2 _8 A
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; H/ K; V! T. T8 c) D
  213.   std::list<CString>::iterator l;; n' e0 T' H6 v* w
  214. / ~+ h+ W0 F0 L2 c0 ^, w
  215.   if(bFirstUpdate)
    2 `+ k3 h% P# Z( f
  216.   {
      Q! g$ y0 I0 ?4 q/ x& i4 i
  217.     dwCurrFile=0;
    % v. W3 O4 s: T
  218.     bFirstUpdate=FALSE;
    , v" X: W3 i; @' E3 J% q8 }
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + Z& |) l; n7 q
  220.     {, F$ y$ E1 V+ P$ l+ }+ x
  221.       dwTotalFiles=UpdateLocal.size();0 [' z/ }1 Q/ n1 A
  222.       dwDownLoaded=0;7 f: T$ I# x. ?4 j$ O! ^; K
  223.       bSilentStep=FALSE;% W% j# ?; G1 u/ s3 E( l9 a
  224.       bCompressed=TRUE;
    : N4 D4 H6 {$ R8 z8 |# n
  225.       strExtLocal.Empty();
    # ^; G" O4 a( T0 S9 a: N6 K
  226.       strFullName=(*i).second;
    & b0 z0 B* b" y/ c& s* Y' a
  227.       dwProgramState=AP_CONNECT;
    5 b. x0 t5 R" U
  228.       return TRUE;/ D! S( c+ i4 A  b& U
  229.     }, {* a% O+ r3 d4 w( s) s
  230.   }
    * o+ f, v- h1 P8 T9 b* F
  231.   else if(bRestartUpdater==FALSE)
    5 F# T1 b% z6 v6 X; a4 i8 }1 ^
  232.   {4 s: r& I4 P# c$ O& f
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())5 C; b5 n$ I6 j( P9 x
  234.     {5 E" c+ S" M$ [  L( Z$ o
  235.       file=(*p).second;
    . V1 u+ h/ b% b' ?. m
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    9 S7 |9 @4 S3 q
  237.       {
    ) K' n$ }8 L7 R2 b0 \- q
  238.         olds=(*p).second;( R  J/ R6 K  o% H! i8 g+ O
  239.         olds->vers=file->vers;6 C6 W/ H9 N; L1 e* X# s! h7 r
  240.       }# q+ K5 [7 M8 T/ A
  241.       else9 f3 h7 u  @' o" T) ?; q
  242.       {2 _2 A; w/ L3 U( V) T
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 |/ Y0 ?/ d) ]# z/ d# n
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    . \1 d( `: P$ t$ q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    0 K+ G* [0 \- M+ ^0 v3 @7 P
  246.       }
    - O, k( C/ \! ?. @) H5 f+ {
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");6 R) \% R7 ]  }0 a
  248.       sprintf(filename,"(%s)",file->file);
    ' N7 _* K4 X9 ^7 \3 m$ Q) M
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, o7 {$ V! Q/ \9 X. P+ Q) l- s* \
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    6 N$ \8 P) ^2 l  e/ n5 q
  251.     }8 q( H8 X; H0 m4 f7 T
  252.     dwCurrFile++;
    3 K2 \7 f) A6 Q; Y: `& Z
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! }- n+ l; ?* Z2 o
  254.     {7 V* a2 H3 ]+ B" e
  255.       bSilentStep=FALSE;( |$ e2 Q. t2 R
  256.       bCompressed=TRUE;
    4 c2 s  q  H9 e
  257.       strExtLocal.Empty();
    ( X! F9 U: _& z8 ^( H3 Y
  258.       strFullName=(*i).second;0 a! d/ y- h$ b
  259.       dwProgramState=AP_CONNECT;; a7 K& Q$ q/ p2 B. o
  260.       return TRUE;
    - B/ T! e3 Q. C7 }
  261.     }
    / `3 }6 M+ S5 E4 u
  262.     if(!bRestartUpdater)
    7 O, y' [" ?3 w, w$ x: ^
  263.     {
    , P$ T% `% N4 D4 d% M6 }
  264.       int iCurrSize,iFileSize;6 Y5 w5 ]9 l" y0 E" T
  265.       iCurrSize=0;
    5 z9 b0 @: Z# \% g1 [0 Q& Y1 ^- G
  266.       iFileSize=UpdateList2.size();5 t  V/ G- I2 }( W
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");8 l; X+ ]0 f& ~3 x7 t/ ~$ C3 ?* J: i
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    & f3 w+ C) [2 @  S  P
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");  L3 m/ b! p0 K# ~/ `% Z" y& w- Y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : H" i3 X7 u& U  e- r" z, W' `
  271.       Fclearf(".\\update.dat");
    + Z7 h* v! S9 o% _4 Y
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    . u4 i: c: q& s8 q& w; f- M
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 z: c( p, y. ^/ [( H5 X* X" n
  274.       {& {1 S0 Z" e  q0 I9 ]% H
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& j) I9 E2 }2 y, W( |% o
  276.         {! W/ p# J' F8 ]7 i
  277.           file=(*p).second;
    ; F, v; ]% B& h2 i  G
  278.           sprintf(filename,"(%s)",file->file);- @) r+ L. |$ C1 E; R2 m
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + w) z: f6 \8 U9 G; }( P
  280.           iCurrSize++;  M, T4 ?; W  f9 l( _: O8 ?; v
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));* k. w) ]6 }. K4 V; X+ L
  282.         }7 v; u, A5 L: P, ~5 ^  ]
  283.       }
    + u0 l+ O5 I# N5 d# N
  284.       unlink(".\\update.txt");) U4 N! b& G! J- |- P1 h, C/ f& _
  285.       unlink(".\\update.tmp");
    5 i9 q1 o. r& j( N
  286.       Fclearf(".\\checkversion.dat");; Y5 A: q; ]2 M* `
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ' `& R( A: b8 d; i
  288.       if(UpdateLocal.size())
      W, l# L9 T6 r
  289.       {
    : o4 Y7 Z  |6 F; A" a$ ]- A: M
  290.         UpdateLocal.clear();
      U; e; F& n' r, ?7 A
  291.       }5 p, {  N9 @3 g: X8 n
  292.       if(UpdateFile3.size())4 }6 E0 R' w' h0 [( P# U
  293.       {
    * u7 c7 ~' b7 @' w. K6 t
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ m. p/ h5 x! O% \$ S; N
  295.         {
    , g4 U4 m( Q; y( S8 T6 `! s/ U
  296.           file=(*p).second;$ g8 A5 T% _/ j; y
  297.           free(file);
    * a3 d+ C; Z3 P
  298.         }
    7 v  L7 C) W# w. j" e+ g  u
  299.         UpdateFile3.clear();6 r+ Z* z- d* ~& J& T' p1 O
  300.         UpdateList3.clear();
    . {$ N! X2 E* P+ [
  301.       }
    1 Q9 ~( R) r2 M! T# ^
  302.       if(UpdateFile2.size()); N5 G, t1 Z9 A
  303.       {
    $ |" `: h' A3 v0 U7 x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( D4 t* F/ m/ O+ G* {3 |
  305.         {. V" d, M2 u! u( \) D6 E) A
  306.           file=(*p).second;3 _" @1 [3 Y+ B) _/ d8 U5 s1 U
  307.           free(file);  p8 T& y* _2 W% Q& \8 y3 E# N
  308.         }
    " z- ^; b: O# ^7 x7 Z, y. t
  309.         UpdateFile2.clear();
    6 a  W2 O5 \7 |0 O0 ]; ^
  310.         UpdateList2.clear();
      ?& ^9 M* B2 j  h0 `& L; D
  311.       }( n' n1 P8 Z0 V0 m* v
  312.       if(UpdateFile1.size())
    - B1 F" x" x3 b1 i/ }6 {
  313.       {
    ( u1 f5 Z& i1 p- g" B6 O
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # C' \" y+ w  V( t; D0 z
  315.         {9 b, X. B- r# o' j5 U, s
  316.           file=(*p).second;
    : j: M3 c3 u# B
  317.           free(file);
    ( N6 J( S) a& K1 ^
  318.         }
    ! v0 d4 z0 m+ b/ l1 _3 ?  O
  319.         UpdateFile1.clear();
    5 u4 y2 \: h0 b, A/ p* e
  320.         UpdateList1.clear();
    0 R9 c1 d* k1 P1 u1 |$ {8 E9 E' H
  321.       }2 }: B7 U( i# X7 M6 u/ U. x
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));- `% p# S/ n$ u4 q5 U( ?& n2 v+ l
  323.     }7 Z6 F# T) L2 o* U. I- ]
  324.   }5 W9 R; O* f+ e/ J
  325.   return FALSE;7 H6 x8 n& _  K6 k3 y
  326. }
    1 j1 ]9 _. p8 r, R  [' f2 Z! L; p

  327. * f+ X" M; c" W6 ~# ?! t
  328. void CRevAppApp::ClearAll(void)2 u* k: t$ k0 w3 x  ~3 ~
  329. {
    : Z) |6 v; [# l" b
  330.   LPUPDATEFILE file;% u+ D1 E$ E7 ^
  331.   std::map<CString,LPUPDATEFILE>::iterator p;! U/ n4 L: Q0 E# D0 E
  332. 8 [3 t% j  z& F) u; F  h
  333.   if(UpdateLocal.size())
    5 h  N& u( r9 I) Y
  334.   {9 [7 y( d" z- h  w% G" y
  335.     UpdateLocal.clear();; I# G: [4 _/ V7 m
  336.   }  _' A8 j1 H5 o/ T" v) F4 N$ J
  337.   if(UpdateFile3.size())* y5 D7 W$ x' O% S
  338.   {
    . ^( M! o, g, D0 `
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" ^: J; `% R9 Y! I8 \! y, q
  340.     {2 F# q) ?7 E( {: |) b* W+ z& X% h: y
  341.       file=(*p).second;
    0 s8 A1 z# i% ?8 Q5 `
  342.       free(file);0 W7 F2 j! Z6 k$ `+ L" V; v( U
  343.     }- F( t3 B; W1 U; Q+ {
  344.     UpdateFile3.clear();
    * T1 S& T$ R( x- S1 \5 s. k: |: o
  345.     UpdateList3.clear();
    9 ]* X% u6 x2 m
  346.   }. r' k) N4 [9 ?7 n
  347.   if(UpdateFile2.size())3 X7 z7 m  A3 B
  348.   {1 [$ i3 a, w0 S# q5 s1 r! S3 d
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      M; ~  s9 E, k- h: ?# \9 U1 h
  350.     {
    + @( j, U# L- F2 f, O
  351.       file=(*p).second;
    4 D" ]: X/ l1 N9 d7 F3 P
  352.       free(file);! C2 N# h, B$ z$ v4 d; i
  353.     }
    ! m0 k; O% J, G3 v/ }$ I
  354.     UpdateFile2.clear();
    - [  z3 v: U( G5 j
  355.     UpdateList2.clear();- `0 h, R- q8 U1 @0 `; h. Z! B
  356.   }
    ( H& e) S( L) S5 F! x; Q" H4 [
  357.   if(UpdateFile1.size())
    4 ?' e( U: N" _, J( z
  358.   {9 L2 {7 k- P1 Z% g
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* E' z8 y% s7 C& l9 |# `* q
  360.     {
    ! c  H' {7 ~% D- M0 d5 k
  361.       file=(*p).second;
    8 l* c4 [' ]0 ^! F. r# G7 T& F
  362.       free(file);" O7 G: c9 R+ E) p$ a5 R
  363.     }# \1 S2 S9 L! A7 [& J7 a
  364.     UpdateFile1.clear();
    ' S& j1 |# i+ G4 O
  365.     UpdateList1.clear();+ q0 m4 O7 P  P! T; x# X) ^
  366.   }, ^2 m$ @3 r5 L0 c$ _
  367. }  
    ! Z8 `, O9 `; }6 `
  368.   0 [5 k& s8 }: d) b
  369. BOOL CRevAppApp::CheckLocalVersion(void)+ B. i8 L$ Y. Z% c; v
  370. {
    + B  P6 {/ b/ O; o* i+ O% e
  371.   int c;7 ^8 d! c0 x- j) |9 t7 z( ~
  372.   LPUPDATEFILE file1,file2;
    5 q9 Z7 \" D/ k) h8 t( R+ J1 o9 G+ w
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;% _9 P' U8 Y( e& s2 G
  374.   std::list<CString>::iterator l;9 T+ r1 @( P: _5 X' r1 i

  375. . ~9 O1 U  k- E2 u9 H
  376.   UpdateLocal.clear();3 E5 _8 u9 g& T( o6 L
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);4 j, s+ |6 w9 ?! Q7 t/ G/ H
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);* R4 Z1 I" k4 _+ T) o1 o% E( H. s; m' p
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    % Q. M1 T2 P/ ]6 i: H6 o5 Q& b
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);6 p1 Q7 c9 W- ]; h
  381.   if(UpdateFile3.size())/ w3 ]/ Y( U& S
  382.   {
    - z0 U2 p! T7 p$ U6 p; M5 {( Q6 v
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ' n2 ?3 A; U# X, V" D1 _  |' `; J
  384.     {
    # l4 Q4 {8 [; i$ Q
  385.       file2=(LPUPDATEFILE)(*i).second;9 v3 C9 m: a" p* ]( N; Z5 n- N
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ o( Z# h! [/ E
  387.       {
      c. T  B+ L2 m4 L9 `4 B2 E2 W! u: c
  388.         file1=(LPUPDATEFILE)(*p).second;8 a$ A6 b' D* F$ i# a* C
  389.         file1->vers=file2->vers;' H' h. j) h) D$ v2 Q
  390.       }* U  m. F! ?; ^3 }8 T
  391.       else! ^6 X' W5 @/ S- e' ?9 |5 x) f, h
  392.       {  }" [& R! C* j9 c8 ~6 S: a
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 b  N8 P% q1 G. A& ]
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    4 f" M5 J3 A; T
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    , v; y: o/ k7 ~- \' S
  396.       }
      b7 J4 F3 s; x* j* w* M: J
  397.     }" z* h* U9 j+ G8 w  U
  398.   }, E5 ~8 U8 I% j( T# a& {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 e, v2 M! o( z  C5 K
  400.   {* [- w# u- M" I" C! i0 e+ h9 W
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())0 f3 L# C! w9 r7 ?. A# M' B5 U
  402.     {
    " z- L6 `- K5 d) Y# V7 M( w9 q0 O/ D
  403.       file2=(LPUPDATEFILE)(*i).second;
    + L- d9 a8 j* j+ S* T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  l9 A" ?' k" I, D9 |
  405.       {( F( T& o; z3 M. X( }, L
  406.         file1=(LPUPDATEFILE)(*p).second;. G% `. {; F2 k9 t4 }4 ?
  407.         if(file1->vers!=file2->vers)* Y; e" w/ u2 I/ A6 g
  408.         {- O+ W7 A6 e7 V' B& l
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    6 m: v8 x9 W: R! ?# {% ~+ A
  410.           c++;* S, W# m! @/ r/ ?$ ~% m
  411.         }
    $ x9 M# r# w9 t5 h9 [3 x# Y# P. P
  412.       }: t% x+ E+ h: P$ n3 D) U; f& Q
  413.       else" Y8 P# Y" e. ^) P
  414.       {
      R* k- q7 \1 [3 L' U4 L0 b( ?& O
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( I7 ], L# a, O0 ~
  416.         c++;
    ! V# X0 s2 U1 N
  417.       }5 p4 ?, r2 h$ u! e; G
  418.     }: s# }; \/ X! k: y0 C
  419.   }
    9 W8 r+ A  h  w
  420.   unlink(".\\DownLoad\\update.txt");3 r) X( \, j9 u
  421.   if(UpdateLocal.size()) return TRUE;
      q9 x+ p/ ]! k1 T" l; q8 W
  422.   else                   return FALSE;
    / N% U( N* f4 U7 z2 ]9 a
  423. }
    ; k7 Z2 ]; ?7 ~
  424. 4 A. v3 t) _; R% V& C
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    , l, Z, U* H/ ^% d+ D
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"3 c! y& T8 G6 }# j. |1 @5 n( a

  427. $ A9 c( V+ t: g, j. E

  428.   {/ _( s3 k3 u
  429. 0 j6 i. L$ c1 J) V' g7 y8 a
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( N# Y; V( d1 H( A3 }/ w
  431. {
    ; y# @9 w7 {7 c" v* W. v9 a6 X
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;/ }4 o1 w) S9 T
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)/ O+ h8 _; c% E# i! ?
  434.   {
    9 C0 k5 T+ c. O4 ^+ n
  435.     char szLanguage[50];6 K4 S" ^0 e8 w
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 `& B+ r0 q' f
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. S( t& Z6 M. B1 y3 Z7 x
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) S, ?/ C6 X! H0 h
  439.     else                                   m_iLanguage=ENGLISH;- D) c- m  E! m
  440.     char szRegister[100];- V( I: D, N5 H8 p
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 d: z2 ?& A2 q; U+ q$ A4 V! G9 X8 [
  442.     strRegsName=szRegister;
    % [- D; I2 T$ p; k4 r  C  z, U
  443.     char szPatchURL[100];
    3 s+ r  f6 t! X  Y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 W5 N  y3 t; n) ?
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 D. }: s4 r" w+ B+ g) A, o6 p4 Q
  446.   }& A: F' M' x2 I1 D- h
  447.   else( f: L: J; n4 G1 J1 X; A, j& K; r
  448.   {
    , [, b4 e# F" L7 V
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ ]: q: e9 d( k7 h+ A
  450.     strRegsName=DEFAULT_REG_URL;' K  o/ s% D! {( Z; E0 y8 M
  451.   }
    , y5 }- q5 @" P; G6 s7 _  O
  452.   if(GetFileAttributes("hosts.ini")!=-1)8 f9 Q. l! C4 v0 H7 l% f: a
  453.   {
    # u: ^5 P+ {7 W, B% k7 d% _
  454.     char szIP[50];8 m! {' e. Q' o3 R' `
  455.     char szDIR[300];
    # g4 U  [$ C; F. ?# t8 u( l
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))! D+ p' W: w9 |3 s& H
  457.     {9 Q1 c& c3 n* p/ {7 w' E# r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    0 {5 T, w2 i0 R: I7 _5 }( Y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");( g, a8 l0 N5 @8 l( r. i( n
  460.       strHostName=szIP;: y  T1 A( N* W5 m/ p8 }, _
  461.       strHostPath.Format("/%s",szDIR);
    : c# X, e: C! ~0 P( f& x. b
  462.     }, j! t" f+ @( X* s
  463.     else7 z) F7 S2 F' _4 x: r/ s1 {: D
  464.     {
    4 Y1 A  s' b4 ]  U' x5 T0 X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % T3 S( z) s0 O0 e6 |
  466.       {9 O  O; ]  P4 W1 L
  467.         char szLanguage[50];
    7 ^0 s' q+ T0 S" H" x- R
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 T; |; R/ ?0 H* W8 d+ \$ g
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 ]. B) H, m% k/ g; k1 ]% f
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 l  t# f- E! c% n2 O- y$ _
  471.         else                                   m_iLanguage=ENGLISH;0 m" s. j& i) {' m
  472.         char szRegister[100];2 z1 o3 j' A8 s/ `+ ~- T
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: Y( ^3 R7 w* O% g1 v. S
  474.         strRegsName=szRegister;. F9 Y8 P9 {  @; A8 Y* X% v2 L
  475.         char szPatchURL[100];2 H- \4 ^+ ^& y& ~" b
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . }6 R% V/ y' A! J6 h
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + l* g, ?9 I" q1 Y% v" g
  478.       }
    : l' ~, L# O3 F5 [
  479.       else
    . l  [2 k2 C( z8 C! y! v* g$ p" X
  480.       {
    . X7 `3 S3 i1 O" _) G
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : J+ S3 z# i: O" I5 c; s2 J
  482.         strRegsName=DEFAULT_REG_URL;
    / B0 q8 L2 m5 _3 S3 O% T
  483.       }- k' f, p9 z6 E! ~( G2 M# i- h. d! n6 t0 ]
  484.     }
    : M8 }7 _/ |7 V0 c- ^0 r0 h
  485.   }
    & t( z- ?/ p# j% r4 B
  486.   return true;
    % ^; v2 S2 \! @9 @6 Z
  487. }
    & N" N6 I2 H6 n/ O& `  b7 x

  488. + n8 i/ p. m8 ~* b! m- W
  489. #include ".\ZLib\unzip.h"2 b' K1 Z& R7 v3 D& U8 u! s
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);9 @( U7 N3 Z+ p% B7 P9 E
  491. /////////////////////////////////////////////////////////////////////////////  D+ e4 c3 a7 \4 c- J2 O1 u
  492. // CRevAppApp initialization& \+ e5 C# L) ?1 _' ]; b' ?: B7 R1 P
  493. # {" s: U/ D/ X9 a8 C$ T
  494. BOOL CRevAppApp::InitInstance()
    8 E2 K3 S8 V% N! g( ^
  495. {: I2 v  h: G3 \% F0 N
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];& V- W6 E% s& [- A. B9 n! E, n

  497. 4 C( }  ?9 Y1 o& N# R- J
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);4 Q2 ]0 I/ j( J7 q( k% P3 q6 C
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))7 H7 a: I9 h8 p$ V: A& F( M
  500.   {- b) A3 `0 e$ G' I, T
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    , z/ D3 h- v; g8 ^0 \
  502.     GetPathFromFullPath(szPathTarget,szPathSource);0 j- d- Q& I+ M( N
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" R. m" k, s! K7 `6 \
  504.     {( R' ^; N7 S* ]4 w# P: \% H, m1 S: z
  505.       strcpy(szPath,szPathTarget);
    3 ?6 b4 p/ s: {6 g) \& A4 s
  506.       SetCurrentDirectory(szPath);  F$ Z$ V9 \4 h" `
  507.     }
    ) j8 g% F) ^( U
  508.   }. o% `2 o+ h  a, t/ C
  509. #ifdef _DEBUG
    1 ^# ~; ?6 ?8 c" f! O
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    : q5 r/ ^* h9 o% K
  511. #else
    ) V$ y4 y5 X7 i
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ y+ w9 O( r# v& w( k' o
  513. #endif2 `) q( O: B- E# y) G
  514.   {/ d6 `# N7 d$ s& V
  515.     char tempFileName[MAX_PATH];
    + w0 r* f7 ~2 {0 t) Z9 Y
  516.     strcpy(tempFileName,szPathSource);
    # e, C/ z3 v; n9 j/ c4 h
  517.     tempFileName[strlen(szPathSource)-12]=0;9 m. P; S# b* R4 {6 |) f. @
  518.     strcat(tempFileName,"\\$CSUpdate.exe");( [2 J' [6 ~4 K/ J2 ^8 T+ Y! Q
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);! I* _7 D0 O- P) D& }5 \
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);0 c5 p6 W5 N) x5 p
  521.     return TRUE;& G5 b' o3 p( G) v4 g
  522.   }8 a% X' u7 o3 c8 V* I
  523.   // Nuke 0118: Delete run.exe
    2 F  r( v- t0 o4 M5 s
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ( p5 v2 Y; `- S# v$ Y, b
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    6 ^6 }. l/ Y7 `' F/ k/ R1 O3 V3 r. V! l
  526.   if(!ReadCfgFile("Config.ini"))$ E& t/ r! G# ~
  527.   {
    9 A: L# T: J( R5 s* z7 ~
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ( d* ?+ u5 p  J) H7 k8 M
  529.     return TRUE;
    0 C/ |- B9 N2 S# p$ N# {' U
  530.   }( j. s+ P- f  y" }5 n
  531.   HANDLE mutex;( B0 l! w8 z- ^8 P
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ) ~' S$ ]/ h8 k1 A
  533.   {
    % E* u' m/ k9 c6 j* |, ~. s
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)9 m# N- N* ~4 G, k
  535.     {
    # Q1 U( L# F& T5 L/ ^
  536.       CloseHandle(mutex);& Q: S; G* d4 b/ {+ d- H: W
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! c+ {# F* B* n3 s
  538.       return TRUE;! n& D; O. U4 m/ q- r2 H! S
  539.     }, O$ H2 o/ C& g0 ]# `9 {
  540.   }  
    8 `' H. f- X. {& x( g& o
  541.   CloseHandle(mutex);9 Q+ k' M( t/ ?( D) z' }7 S( I  p

  542.   ]% @2 w  _8 m+ A4 l! ]
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);  g0 Q/ @5 R1 z4 K% {# _+ y0 q

  544. ; I( e8 {5 s* |" }" J! ^
  545.         AfxEnableControlContainer();0 K" E9 R+ D8 `0 o
  546. & t. @. z0 s: B" ^5 O! f
  547.   bCanUpdate=FALSE;
    1 z7 i, l" I+ B( O
  548.   dwStartUpSteps=1;, J: r! O9 i/ `" f
  549.   dwProgramState=AP_NOTHING;" p' w# T" L5 N3 O
  550. 8 Z  s* d6 y$ G7 f) @3 P6 j
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);' w* u+ N" C8 _, F) q. z
  552. & w4 _3 e' ]0 b: r
  553.         // Standard initialization: ]# D3 B# w, h: @
  554.         // If you are not using these features and wish to reduce the size1 E' ]! f! \7 i6 ?- g6 O0 e
  555.         //  of your final executable, you should remove from the following
    # h" }: }; l$ \. e: {0 j4 q9 n; E
  556.         //  the specific initialization routines you do not need.
    , y0 w# J2 |" b" D9 N( X& L
  557. 2 ]: L3 ]% j' M
  558. #ifdef _AFXDLL
    " h5 N7 E/ ^; L" k5 v/ ~2 U
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 A6 r' ^6 r& N: I3 l8 c* B
  560. #else  a8 v7 L/ _5 l% ~! A; \
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 @) s& U+ a1 B* B: @
  562. #endif
    : x$ B/ Q. N4 X0 g+ `# m3 {% {
  563. ( C0 Q+ W9 e/ O% D8 p
  564.   dlg=new CRevAppDlg;3 M$ Y3 k# n7 O9 A
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ( s: I3 y. O$ j' E
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    $ N3 q) x3 i& ~7 h4 s
  567.   m_pMainWnd=dlg;! n9 z2 @, a. O0 e5 h0 g5 e$ g
  568. , M; D2 M9 B, H' y) k/ K5 f
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);8 E, P! |& y) y5 P  _( j8 }
  570. + }% \4 e; {5 t/ l4 y$ p3 R: ^  G
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ! E1 H) d6 M1 W3 o1 a% Z- B1 F
  572. //  ULONG_PTR gdiplusToken;
    ; N/ l" P* K2 D9 x0 d; H
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    1 [* F1 u. |+ m6 \7 Y; G

  574. & e# p# ~9 h* S, M* Y  ^& x6 f
  575. //        CRevAppDlg dlg;
    ( x' _- j5 `7 f, y. I) b
  576. //        int nResponse = dlg.DoModal();( s& b0 p+ J2 h" \2 ^
  577. //        if (nResponse == IDOK)3 p6 P8 G3 \" C. j
  578. //        {% W& ^  h% b! E
  579. //                // TODO: Place code here to handle when the dialog is
    9 y$ g3 E6 b/ v( U8 c
  580. //                //  dismissed with OK' H, b9 E0 f! |+ q
  581. //        }. M$ K0 f" H% d6 D) h
  582. //        else if (nResponse == IDCANCEL)
    ' w5 a4 Q7 {' s' L! ~; t; q$ P
  583. //        {
    # a$ p6 f( d1 m* E' Y: T; `; i
  584. //                // TODO: Place code here to handle when the dialog is8 t. h2 Z. f6 K4 @0 p/ |
  585. //                //  dismissed with Cancel- A/ L) h* h8 [8 V4 M4 N, B3 u
  586. //        }3 I# b% k8 D- K- H/ |

  587. + f7 Q/ ^7 }! N) [) F4 Q
  588.         // Since the dialog has been closed, return FALSE so that we exit the2 d# z' h5 N1 h! n
  589.         //  application, rather than start the application's message pump.
    & Q& P* @5 t& V/ ^- M/ W
  590.         return TRUE;9 X. U& R3 w$ }6 L4 k+ H1 y+ P
  591. }
    . _7 l  z0 x2 @! z
  592. 9 ]6 l) O# g& |  `5 V6 \- e
  593. char *CRevAppApp::strtok3(char *pSource,char *token)* ]8 Z& D" `, o
  594. {
    ; C9 E' F1 ?. V* }. v4 r, v7 ?
  595.   int i;. S0 J% U( A6 \  n/ w1 [9 k8 R4 y
  596.   char *szRet;
    2 b# y% p% |& R  H  D$ e/ O

  597. 0 Z' a! c! u" b
  598.   if(pSource) { itoken=0; sztoken=pSource; }& e$ X2 P9 s; R$ x
  599.   if(sztoken)
    ' B/ E9 i8 j; |( @( _
  600.   {3 H( Z  |0 p$ [6 v; f
  601.     szRet=&sztoken[itoken];- Z5 h4 q; K" c9 X' s/ p
  602.     while(sztoken[itoken])
    3 N) Q! a- W* N- O8 ?- M* {; r5 `
  603.     {
    % n+ Z: `  Z1 i6 ?7 U! |
  604.       for(i=0;i<(int)strlen(token);i++)3 ]& q' K; n# E) I
  605.       {
    , ?; a) M1 X' D+ r. j
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]); q, H8 ^5 j8 A
  607.         {& S2 W/ m# ~+ ?+ [, Q2 J
  608.           sztoken[itoken++]=0;
    * i- i: ~7 s' F4 _- a3 T
  609.           sztoken[itoken++]=0;
    . g) J- V( }- Z- ~' z% h) `% b
  610.           return szRet;
    4 J7 H9 J6 C3 a9 B" V
  611.         }) O$ i" E( R; D5 O( O! |
  612.       }: R! V6 n2 V4 {% j, O: P" I5 X; u
  613.       itoken++;
    7 Y7 \) j; i9 P5 i& B
  614.     }
    3 m* N$ l: v9 N8 Y* E2 k2 I" n% }9 ^
  615.   }
    ! t3 m2 U# L- U# w, }
  616.   return NULL;
      J) p( i: S1 _5 r3 W# z+ D
  617. }$ w9 m" Z) s; M$ ^+ w
  618. ( b- G/ D" i* W6 U
  619. void ProcessProc(long Total,long Current)2 Q7 ~6 }# c% V' v9 R; ]+ t0 F: ^, r
  620. {' \" `! j( O) {! u" Z) n5 w& X8 j7 I
  621.         MSG msg;
    & g) i% h- j9 t) |" l
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);+ {' g' L+ `/ d
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    , ^- d, @5 @4 h* z: N
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      U1 @# q: w4 V) @* C- t9 |
  625.         {, z7 d6 S) x4 c  d8 b4 j
  626.                 if(!GetMessage(&msg,NULL,0,0))
    6 {& h& A; M* i$ J% w
  627.                 {& }6 c6 h7 S" [! T
  628.                         return;; F! L8 k+ z  m+ {4 s  t
  629.                 }. ~( q: Y; T5 |, T6 U* z
  630.                 TranslateMessage(&msg);
    ! v+ u* r! S# {$ E# T3 T6 L: q5 d0 B
  631.                 DispatchMessage(&msg);+ v7 j7 Z+ e- J$ o" O9 {
  632.         }        6 `0 j/ }& O$ c
  633. }* l1 w( S9 G9 P9 f! x! v' d
  634. 1 s7 j; k% F. T% q; V8 H+ S; V
  635. BOOL bFirstChar=TRUE;, j" T+ u+ Q; r3 z+ e7 s
  636. # y* i6 J7 e$ q: t1 o
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    4 N, u; I& U& U( b- }/ A2 u
  638. {1 r3 L/ w! {) l$ z. W$ h2 d/ Z
  639.         // TODO: Add your specialized code here and/or call the base class
    . R& S( ?: u6 \) E- {2 ~) L
  640.   switch(dwProgramState)2 Q0 @9 A! y- {1 A1 V
  641.   {% Y9 _2 x' d' c) d+ D0 `& d" N
  642.   case AP_NOTHING:4 _3 z; \) A. v/ F
  643.     switch(dwStartUpSteps)6 k, B5 B4 W$ S  X8 d, k( ~
  644.     {  p' t2 u2 b: u  ^  }
  645.     case 1:1 Q3 i& M- r( A$ T6 T" D
  646.       {
    ; J* y( B0 D) W! _1 l. r# F
  647.         int i;
    : }9 ?$ {5 ]7 f# k8 |: R+ m
  648.         CDC *pCDC=dlg->GetDC();- |; }2 _; v& T: i8 B: }7 w
  649.         HDC hdcwnd=pCDC->m_hDC;
    , ^  i+ U5 E8 K
  650. //        Graphics graphics(hdcwnd);& U  ^. n9 b( P& X) m) ^4 P8 f4 o
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");! m1 s# n: |7 U3 s" n
  652. //        INT iWidth=bitmap.GetWidth();
    " ]( g: w  i8 F
  653. //        INT iHeight=bitmap.GetHeight();
    * a( {  x2 K* \+ ]" s, s
  654. //        Color color,colorTemp;: i2 Q$ T- Y7 l( ]# M  n' K+ B: U
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)' Z2 r3 T  o! i
  656. //        {
    ! ?! n" o& |' e2 o% y% D! J( r$ v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)! Q  Y/ |, z8 X: g3 t) }' z
  658. //          {
    ( b6 }" K. U& p  S( E) B  E
  659. //            bitmap.GetPixel(iColumn,iRow,&color);" k- S  h3 K% w1 [8 T& o" a& _
  660. //            colorTemp.SetValue(color.MakeARGB(
    0 \) t! s% N7 \8 u: a% Z
  661. //              (BYTE)(255*iColumn/iWidth),
    $ Q: @: d5 W9 ]. m* _  |
  662. //              color.GetRed(),
    * ]* M9 _9 L4 d. G, i! w/ |
  663. //              color.GetGreen()," q' n. t) F; z/ S
  664. //              color.GetBlue()));. l% ?' M+ @/ l1 I
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) F1 t' q+ p# G" r7 K9 Z1 @; J7 m
  666. //          }
    - L2 K3 j+ v6 Q6 N
  667. //        }
    . I6 [) _/ f( L8 |/ x$ p6 L' {5 _
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    " D7 R3 n& t5 h  T# N) H
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 q6 }5 q7 ^- t6 S3 p
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ' ^! d4 S1 n( n; |# N
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. _% f( ^" r: x
  672.         for(i=0;i<240;i+=8)
    ! J5 }3 D' {7 L# d8 g
  673.         {! L* f% l8 u3 C  x- Y9 w
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 A/ U0 \! `, F. B
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    2 h; o% v' G/ Q5 Z% c; Y4 ?
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; w2 _6 H" T! ~9 d; u
  677.           Sleep(33);2 e* M( t. N0 f3 c; P
  678.         }
    : Q' N+ o) d% j9 \
  679.         Sleep(1000);
    $ I2 ]2 g1 b1 D4 ]
  680.         for(i=240;i>0;i-=8)3 T5 z) y6 o$ o  G( i! Q7 \
  681.         {
    / g$ @8 k6 _) O4 g/ T" g; g
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 c% x; z' D, i+ S* d
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 D0 Q. r  Z5 v7 w
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 ^$ Y. X- i- y- N; F* L7 ~
  685.           Sleep(33);
    ! P% Q9 x1 V& S: g! u
  686.         }
    8 h+ j4 L) j, A2 A: t" v
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    * d. ~% u* y, G/ `0 v0 |% j+ n: y
  688.         dlg->ReleaseDC(pCDC);( c8 n. B: u$ ]# N. |+ }
  689.         DeleteDC(hdctar);2 s# q2 y' z8 x7 C
  690.         DeleteDC(hdcsrc);3 s) P1 I* c) ?' ?
  691.         DeleteDC(hdcorg);
    ! @) ?8 ?2 D: u
  692.       }
    8 _7 L8 t4 J2 c4 S9 B0 z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    6 z" t0 F& Z( J# F0 P
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");6 d. D) ^) Y" x6 O# U  Y* s
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    5 |6 i0 [- J0 n9 d5 Z& H- ]' W
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- v+ B) P2 [/ e6 I1 R8 F
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % `' t1 P7 j6 F; U; O" r
  698.       if(!Dn.Connected())
    1 {% n7 S2 R. O  J# y+ ^! e+ s+ q1 f8 W, q
  699.       {
    ) f* t  @; {3 _) L( Z8 L
  700.         dwTotalFiles=1;
    5 x, r' k# f0 x) F& @! J1 q1 Z3 S& a) K0 J
  701.         dwDownLoaded=0;
    " u  P- g$ h, Y7 |% ^
  702.         bSilentStep=TRUE;
    3 U; Z3 G, k& S
  703.         bCompressed=FALSE;
    4 I2 o7 s6 c' d: N
  704.         strExtLocal.Empty();* T3 r+ p+ X* w, f. E
  705.         strFullName="readme.txt";4 i- o' i2 q, d$ _0 x
  706.         dwProgramState=AP_CONNECT;
    9 Q' m: `$ S3 }  M
  707.       }
    0 i8 G( d# N; _% h
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();! K4 c2 e: b3 P! ]4 X! w
  709.       dwStartUpSteps=2;
    ( t' j) L4 k8 B# ?
  710.       break;3 \) c1 H# _+ a/ b+ R" S) O
  711.     case 2:. h. O4 Y. ^7 s3 T) R
  712.       {7 F+ s9 a9 z, |& V3 x* W
  713.         int iEOF;0 O: W% t4 `" z; c8 I) X
  714.         FILE *fp;
    % S1 b1 x8 U4 A: o8 `
  715.         char szString[512];* x3 s2 y9 \0 I. t- u( s4 ~- ^% J) ~1 O
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 I8 \+ g8 y6 x! R8 N$ v: H
  717.         if(fp)
    4 n% y, H$ d1 M+ Q3 D" H6 ^3 X. E3 I" M
  718.         {
    8 W5 t. p- o  u1 U# d
  719.           do
    : w( z$ U* }+ j- b
  720.           {# u3 `9 A+ l6 e1 I4 c8 w+ J% B$ \
  721.             iEOF=fscanf(fp,"%s",szString);* E* Y' f- f5 i& S3 g
  722.             if(strlen(szString))( I" a8 [9 [5 X
  723.             {. w; S7 A, e3 [. E! n! J
  724.               if(bFirstChar)
    ( Y, t+ h8 v/ Y, B5 L6 y
  725.               {4 V  G" y) C. }9 ^
  726.                 bFirstChar=FALSE;
    ; l2 B% X: {; t: N9 J# \: |
  727.                 bConnectIsBig5=FALSE;
    ( b* R/ ^( Y, k8 [! Y
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; i1 h8 ~, {/ V  I0 k
  729.               }
    + c3 i! D) e0 ~. y- M3 v' a
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));" _% T1 Y* P4 r' N+ V
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    : Q( z6 J! T7 V% @& i
  732.               dlg->m_ListText.AddString(szString);' h, |; [* b" P/ L% A$ \: [
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / p) T( R! ]$ V6 z
  734.               *szString=0;
    6 k( s* \$ h8 ~+ z0 d0 W" S
  735.             }1 y1 G  e# r8 M0 I/ d2 K
  736.           } while(iEOF!=EOF);' m/ k$ z; P; {
  737.           fclose(fp);7 T( i9 b  g) u0 m: Y; ~" d1 ^2 `
  738.           unlink(".\\DownLoad\\readme.txt");2 f# y$ L- }7 Z- W
  739.           dwStartUpSteps=3;
    ; m, t& D# I, A( m) }/ ^( X
  740.         }% l  k) E! Q1 d# Q: n
  741.       }8 t# w8 f7 n4 B( L# C% n
  742.       break;
    2 K/ G. n& H! C) |
  743.     case 3:# g8 v7 @8 ]8 S# i$ ^8 G
  744.       if(!Dn.Connected())* _: S$ N, q. A) _* E" F
  745.       {
    5 @! U: R' ~9 W& g2 s
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);0 G% r' s# N: ?" X# o
  747.         dwTotalFiles=1;
    % ?' h( k" t8 a! m
  748.         dwDownLoaded=0;
    1 t1 L$ m( W5 N& x& V0 C
  749.         bSilentStep=TRUE;# j5 B( l' R: t) L! i
  750.         bCompressed=FALSE;
    + `3 }  F1 r- T3 Z1 h
  751.         strExtLocal.Empty();
    , N, W6 i. V) W/ V/ |( c$ @
  752.         strFullName="checkversion.txt";
    2 }* W8 K) W- I6 L0 W
  753.         dwProgramState=AP_CONNECT;
    , a  u2 u  E: s  l, d. t( N  G  j
  754.       }
    ; `* E7 f" b! g) z! }7 `; n
  755.       dwStartUpSteps=4;- f: _+ F9 R1 p" {$ c: k, d) R
  756.       break;/ R/ L: h% p8 a5 G2 v
  757.     case 4:, Z1 e5 E, N$ v: b0 l
  758.       {
    9 ^9 Y. k9 ^( u8 ]+ D
  759.         FILE *fp;
    : f7 a0 Z! _! `' M. i/ K* X6 K
  760.         char szString1[128];; D& |; X, x9 k: M9 m7 u% Q
  761.         char szString2[128];+ _3 _' M& P7 m) n* p! F
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");  u/ w; O8 A  b4 _2 l) F9 b) \( X$ r
  763.         if(fp)$ p3 Q: b1 [/ i8 J
  764.         {
    ( ]% |6 r1 E6 V% g7 o0 M
  765.           fscanf(fp,"%s",szString1);- [$ `! L8 S8 K* c; W& \6 L
  766.           fclose(fp);
    # m( p( w, F# g# {' g! F$ Y
  767.           fCheckVersion=atof(szString1);2 K% X. [6 ?3 p  y( ?
  768.           fp=fopen(".\\checkversion.dat","r");
    ' W! O5 Y( j4 ]0 @) R
  769.           if(fp)! k7 {# b: p3 D! @) e1 c; k8 [/ ~
  770.           {
    ; u( c4 }0 [1 s% N6 v" X
  771.             fscanf(fp,"%s",szString2);
    # ~- L2 |$ M9 ]! g7 _/ Y9 i3 p
  772.             fclose(fp);
    / p& j' \9 H% ?. B
  773.             if(atof(szString1)!=atof(szString2))2 W( e! M# x2 z7 ?
  774.             {
    9 x9 j& F2 q, U. V( e" A5 c  H9 [
  775.               if(!Dn.Connected())
    ' ?% a4 r) P. D) l. ^
  776.               {7 n4 M. D4 s8 P( `  h7 b; h
  777.                 bFirstUpdate=TRUE;
    . g. O" f% X$ Q5 G
  778.                 dwTotalFiles=1;  c. }; ^0 A. k3 m; @# W! x
  779.                 dwDownLoaded=0;
    $ O7 G% y. S# ]3 T8 T5 ~2 v
  780.                 bSilentStep=FALSE;
    1 c4 M1 Z5 r7 i' j6 {
  781.                 bCompressed=TRUE;
    - w" C& B$ s6 c
  782.                 strExtLocal=".\\DownLoad\";
    9 d: \4 }- Y# N% G4 n1 y
  783.                 strFullName="update.txt";
      q# n8 C; W( |# n3 M# l
  784.                 dwProgramState=AP_CONNECT;! K& C9 y' H) i5 J2 O' k  l) A! l
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: F+ e2 ~6 q1 m, F; N
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 r0 f% X8 ]. S- ]5 P  h
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! J# G6 A2 V0 ^2 L" O6 B
  788. * l! R4 \3 l! r. a' F3 s' v+ s
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# @" w( z8 o3 h  z
  790.                 unlink(".\\DownLoad\\checkversion.txt");- m" g+ p9 }, v( [0 Y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 l$ E' s( a- I3 b7 E, u
  792.                 {
    6 @: F" x+ g" T. Y$ d( ~! ]8 t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");9 ~; p( C$ i2 z3 z
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");) m) B3 f4 W' r0 R0 A2 q& f
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    6 `- d  C! k' w
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 E! o) @: L/ Z' X* J
  797. 9 k* I% y' x/ P* V
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 L, B- r; N; E3 s6 C
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # D# R7 Y! D5 ]
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' e. ^* ?8 u6 e! ]+ f
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" Y  f* _) u; n9 d) y7 e; O
  802.                 }
    ! {7 G5 \$ n0 f0 f9 W: z4 q
  803.                 dwStartUpSteps=5;1 N3 ^" `: N" L" C" U8 D% Z/ U
  804.               }
    , @* o: Q9 H* I% H  O: J
  805.             }& ]/ T- t, j! w5 |
  806.             else% P7 M( B/ o. N" ?1 C5 }6 f
  807.             {% G: \) e$ H3 o5 ~2 J
  808.               unlink(".\\DownLoad\\checkversion.txt");8 q' c) x3 y" `( |6 d$ n/ p
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");0 J. l7 P" j0 z! g% ]9 u
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' r; D) C8 b' t0 z* l6 Y
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    5 S* u3 H" d9 Q! F# s

  812. , `% u) ]+ h+ F$ E1 i/ ?/ q& G5 m
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # r  H$ E# y7 D. X
  814.               dwStartUpSteps=99;
    " c* j1 t, O2 ]% P
  815.               bFinishUpdated=TRUE;
    : B8 a! Q+ E9 x; d& H2 P
  816.               bCanUpdate=TRUE;
    ' X6 |) T, _$ y
  817.             }7 W! Q' W. m. \  q
  818.           }0 _2 M# x9 M* I: P8 v
  819.           else1 B1 l/ A. K! r
  820.           {( y7 L2 y, e( d) N1 t
  821.             if(!Dn.Connected())
    9 F. S6 h; J8 H: e" Z# ?( e
  822.             {
    8 O9 K8 w; U8 H
  823.               bFirstUpdate=TRUE;
    " Z$ }2 o5 ^' |3 m% i
  824.               dwTotalFiles=1;/ z, l) `0 m9 J+ L# A
  825.               dwDownLoaded=0;8 L7 M1 F5 n# W& |! g" n4 o& f
  826.               bSilentStep=FALSE;# n% M1 i+ b+ F+ P
  827.               bCompressed=TRUE;& o+ O! x/ L; u1 ?4 c! s
  828.               strExtLocal=".\\DownLoad\";- ?7 }( N* R5 s" H, H
  829.               strFullName="update.txt";
    . @7 h: k8 c% r' U
  830.               dwProgramState=AP_CONNECT;
    6 C" z7 f* \; g
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ {' G% |. ^+ x  c$ Y' w- P
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: W! g% r% i8 D- _( Z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " S; p6 l# f! ]" x
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 X: e7 {7 U# l9 O6 ^0 Q1 l
  835.               unlink(".\\DownLoad\\checkversion.txt");: P; Z/ q9 Z7 N  H# \
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)# D$ }; V! F# Y* C4 ~& Z5 K5 e
  837.               {5 v) e* l. o& r" O: S; w, s5 C3 J( j, Q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");# M1 B0 |$ T; |7 }2 N5 z" y  ~
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");" e, k# d1 F+ F- g9 @6 u
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    : V1 L3 y% c1 X( d4 n' d
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( ~  U) k. y3 q/ x
  842.                
    7 p# f; T0 O9 h! ^- h( S2 g
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  v4 M) X6 h7 T) W* S6 }5 y$ c' Z
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 E- [0 J# |2 G/ R- T
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    & {" `! M6 r5 L0 ]& E
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * E' _! R+ d4 T9 L0 a" j
  847.               }
    ) q' f1 ?9 [  g+ E
  848.               dwStartUpSteps=5;
    + @" G& L$ X) L. c  Z) Y
  849.             }
    ( ]* X( M2 O$ k3 r
  850.           }
    9 U( p* W' r5 R+ A; [/ i
  851.         }" l  L( B& X3 u; H$ G  m
  852.         else
    ( ?5 J% [! E) y: g
  853.         {6 u- z8 J, D" B. ]1 d
  854.           dwStartUpSteps=3;% R* r7 L, i' W
  855.         }
    3 q$ [  G; f% o# b
  856.       }
    5 s1 r: s, ], A, [: }$ L3 q7 Q
  857.       break;& F. u+ Q! l' U- g8 D0 A
  858.     case 5:
    / L3 S6 @5 _' V- |. f
  859.       {7 B- N8 B6 s6 _/ i$ i% |- T( _
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)5 a9 e0 a7 x0 Z5 U
  861.         {+ v5 f9 j$ m0 q
  862.           int opt_overwrite=1;+ C4 V4 i3 b  G& K
  863.           int opt_do_extract_withoutpath=0;
    0 ]# Z  O1 I! V9 ^
  864.           unzFile uf=NULL;3 v5 S1 F8 a$ n+ L
  865. 9 a/ K- O: [7 F1 [+ F
  866.           uf=unzOpen("Wsa.zip");
      o' F) V  ~7 g$ ]) e- |9 w
  867.           if(uf)! [) ^3 z4 i8 `1 D+ q& h, G2 ?
  868.           {! P+ Y1 E* R! i+ M3 o- Z
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);4 f4 R+ O& F) M! }: {0 V6 x
  870.             unzClose(uf);, a" B$ ~. a6 k, X
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");$ Y& y3 k7 u# d% V/ w
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");5 c5 {0 e5 K# t- C) |
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    " J) ?( v+ U( r( r% c, B- z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 n" y9 Z* U+ k+ I
  875.           }  _0 _( m1 ^: T; c# |
  876.           DeleteFile("Wsa.zip" );- M5 W$ Q# p& i, z, O' I
  877.         }* [$ h1 ^! ^2 Y* W0 p" h( d* W

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

2 P  b* a$ y8 x8 D  s6 s  v3 N9 w2 Q! P% I( o9 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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