找回密碼
 立即注册

CSUpdate.exe源代码

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

) A  o/ ?9 r' }2 l
  1. / RevApp.cpp : Defines the class behaviors for the application.
    0 y* q/ t" l% w7 v  O  m. ^, R# E
  2. //
    6 b3 W2 K+ d. ~( O+ w
  3. ; U3 U& l6 j8 v: E
  4. #include "stdafx.h"9 G+ K: D; E) l$ Z( A% K

  5. ) U6 k4 O+ U8 S( z" B
  6. //#define UNICODE
    9 R1 r8 S, R7 H6 c! }+ j' h  Q
  7. //#include <gdiplus.h>
    ( q" G% `% m2 Q
  8. //using namespace Gdiplus;
    + ^3 R* R5 k( A, T: {3 N

  9. ! p  z' i( ]% e) q( z3 D; h
  10. #include "RevApp.h"
    + T. |2 K% T) b0 b8 r: M" Z
  11. #include "RevAppDlg.h"
    " P- j- \- [3 g* x) L
  12. - }5 q/ U0 P! `! {3 n3 I
  13. #pragma warning(disable:4786)
    ' u$ v/ g8 o+ W" _+ d8 C
  14. #include <map>8 @! ]9 Y0 _, w$ r2 q7 q9 c
  15. #include <list>- D4 p! H8 j3 ^! Y" h( p$ N
  16. #include <direct.h>
    + i" E6 V2 H- i8 B5 k
  17. & w) M2 W  k2 O9 t' O
  18. #ifdef _DEBUG
    & n: x" p* O& O/ y8 A3 S
  19. #define new DEBUG_NEW) R0 e* Q$ n* y% G
  20. #undef THIS_FILE) ?" r+ R, w" Y
  21. static char THIS_FILE[] = __FILE__;0 D- s  V% e  @; P, H
  22. #endif
    6 B6 k1 i( H% B* [1 v6 `
  23. #include "SkinResDef.h"
    0 f# Z0 q. j( `; \6 Y: [& S7 S: F
  24. #include "ChangeBG.h"
    ) ?* s" a0 }1 U7 o5 ?
  25. #include "AFXINET.H"
    % X6 x+ c! g  z) d" X
  26. & ^* k* H' U6 H7 @5 p0 K. A$ U7 v. S
  27. #define TRADITIONAL_CHINESE 0
    # W/ B$ i" ?1 J1 H+ [/ R3 s
  28. #define SIMPLIFY_CHINESE 1
    9 o2 C) k9 B7 G
  29. #define ENGLISH 2
    " {1 n8 s5 H9 m2 w; {
  30. int m_iLanguage = ENGLISH;7 L! h! p7 k. K
  31. /////////////////////////////////////////////////////////////////////////////9 T8 H; M, N( E0 K' b
  32. // CRevAppApp
    1 p5 f/ \! ]+ w0 b5 _

  33. ! y9 y* T( v% `6 R+ k2 X: U
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    8 {* [9 X: t# p- `" j8 o
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    1 L' M! j) Z* b8 }) s: b
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.9 _6 x% m2 a- N% t3 U
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    9 x/ `3 j; k( N7 `( S; W
  38.         //}}AFX_MSG
    9 Y/ }6 I: L# z: U# X
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    / y& h: E% n+ i3 i6 B
  40. END_MESSAGE_MAP()  c* H. ]! u5 ~
  41. + y& E  {6 k4 r0 j5 I& s
  42. /////////////////////////////////////////////////////////////////////////////" p% ^7 |# O# \- l1 `) a0 H
  43. // CRevAppApp construction2 X! U+ w! {2 ^) N3 k9 b

  44. * P; h* Y& Q5 j2 r  _2 v' Q
  45. CRevAppApp::CRevAppApp()
    4 u% `+ ^/ ?  B/ k4 x7 e
  46. {
    ! }/ l! y+ x$ s) R& @; G7 j& U
  47.         // TODO: add construction code here,7 q" e5 \& t& v1 F, m2 x8 @8 \( W
  48.         // Place all significant initialization in InitInstance
    2 t7 f4 v2 N8 l* r0 _$ E# e- F8 v! O
  49.   bDisplayIsBig5=FALSE;2 Y4 S5 e3 Q5 [
  50.   bRestartUpdater=FALSE;; w* y) C. p) h! z. p. Y9 e6 e
  51.   bFinishUpdated=FALSE;
    8 F3 o) ^2 u* D1 Y. X# q
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;. a7 H  g4 A4 A; z8 C* }+ z( f
  53.   InitChangeDataBig52GBKS();
    5 o7 d. p8 e3 E+ W- q
  54.   InitChangeDataGBKS2Big5();
    2 v- w# [2 |# Q7 N! L1 B
  55.         //7 ~  }7 v# D# P) {$ O% h
  56.         bClickRunExe = FALSE;
    ! {4 |0 {7 z( E
  57.         //. O( I: }9 L' ^3 s+ A- T
  58. }* B( {  U" ]) m- v. h

  59. 4 h( `: L# ~) Q2 H# l
  60. CRevAppApp::~CRevAppApp()
    / V4 w. ^4 F6 U  L9 C
  61. {2 i. T1 K: X  I  f: M# w, ?
  62.         // TODO: add construction code here,/ \4 f' b; M( V- W
  63.         // Place all significant initialization in InitInstance. [, v; N# l" \
  64.   EndChangeData();
    ( k1 |6 \6 \; j
  65. }
    . O' R( }" C, i# Z- q! ~2 ]
  66. / l9 _9 L! m& R. g) A; I! t
  67. /////////////////////////////////////////////////////////////////////////////
    0 a1 F8 @7 v1 ^9 m6 j
  68. // The one and only CRevAppApp object
    * [% T' A* t" k. q! [# v0 R

  69. 6 @. q% |  c/ `, S( R: Q
  70. CRevAppApp theApp;
    + W2 T' n% b# n. L

  71. . z) [/ [' }* x6 g; T0 H/ K" Q0 }
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    % P; B# t' C1 W6 e
  73. {
    / f, M$ _( D$ W: A/ ~8 t
  74.   int iEOF=0;
    2 a3 ^3 K, W9 _7 o1 b) K$ r- |
  75.   char szTempName[MAX_PATH];
    ( H0 T; n; [3 ~" ^5 G
  76.   *szFileName=0;- J5 m8 b; H8 @) |4 W( X
  77.   iEOF=fscanf(fp,"%s",szTempName);
    % @$ J: C9 v1 E( D0 G) A7 a
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # |: X% h8 A. w
  79.   {7 l( X0 q  o$ @# A- l& P
  80.     strcpy(szFileName,&szTempName[1]);7 l" T  q4 ?+ @# _) Q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)  o2 g5 p! n, T  u% h
  82.     {
    1 q! o, Q) V* y) }. h( t
  83.       iEOF=fscanf(fp,"%s",szTempName);  @' o! E- B) r+ a6 k* @/ H/ F7 ~4 L
  84.       strcat(szFileName," ");: W5 r# Z6 L, g: e1 Q/ D
  85.       strcat(szFileName,szTempName);4 h2 E9 o$ H8 s7 y- j7 q
  86.     }( _1 q. |- G5 C* U) l: Y6 k
  87.     if(strlen(szFileName)>=1)
    : \7 `5 i; [" k3 Q4 C6 D# ^) x' M
  88.     {: j( X) d$ N/ ~( V: S5 j
  89.       szFileName[strlen(szFileName)-1]=0;9 `; O; b5 x: M) J4 p2 b3 L
  90.     }
    & J8 T' `9 N0 `0 [, k7 F0 W5 e
  91.   }
    / v8 Z% o6 @5 t. v( `( S# h4 ]
  92.   return szFileName;
    : j) y6 `7 q# y$ r% @0 l3 \
  93. }
    1 h; }) `/ V3 R  z
  94. 2 F9 R) W4 S* q; F1 g- v& m$ Y/ P
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    0 @# |" p3 |/ F5 D- G: N# Z
  96. {
    ; x9 m. ~. z% S: Z( Q5 x+ B) @7 o- F
  97.   FILE *fp;
    7 T: ]3 N/ u  M8 d3 A. R: M* J1 E
  98.   char *key=NULL;; x4 j+ N& L/ s( J5 g
  99.   char version[MAX_PATH];" }' H/ U' e, f
  100.   LPUPDATEFILE file,olds;
    7 F8 F+ A) X7 D+ p
  101.   std::map<CString,LPUPDATEFILE>::iterator p;. q+ S" Y7 P" K
  102. " Y6 a. Y3 E% G  d; y4 I' s/ u. o
  103.   UpdateList.clear();
    " x& H2 b2 y' V$ u  k
  104.   UpdateFile.clear();
    " g* d- C; w$ ^/ V
  105.   if(GetFileAttributes(filename)==-1) return false;
    - F! T1 V% {: U8 E& d  Q
  106.   if(!(fp=fopen(filename,"r"))) return false;6 j* @2 ?6 J0 M
  107.   fscanf(fp,"%s",version);9 W( i# N6 z4 z3 o9 H, z6 h& Z
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    8 V" y2 V+ w. v! d$ P
  109.   while(fscanf(fp,"%s",version)!=EOF)
    2 w$ F; O# o: w4 G4 u
  110.   {6 t: H  X. l/ z& T- H
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 V$ V2 R, `5 F  N# |0 O
  112.     fscanf(fp,"%s",file->path);
    % |& t' _4 m: ^* r
  113.     ReadFileNames(fp,file->file);* {. N5 @. q. [- |* A4 D' ]
  114.     strcpy(file->full,".");
    % v) F; f* o5 `7 [  |3 e
  115.     strcat(file->full,file->path);
    - j+ ]( A( O) B+ x; r6 P6 I# u
  116.     strcat(file->full,file->file);
    ! p$ W+ e4 A6 Z; M  u% x( J5 J
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()). s) n7 g7 m; O5 N' ]' @# @  s
  118.     {) V4 K- T- q7 u' O
  119.       file->vers=(float)atof(version);
    9 ^" H& j. W. F7 X' ?
  120.       UpdateList.push_back(file->full);/ ~, a6 z$ F1 a4 N! \
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));3 V9 @+ W6 T) a; q9 M8 b
  122.     }+ e7 M$ s1 _5 v' p" i5 ~( H- b
  123.     else5 _/ m- r8 \. U0 E% t8 ~1 j% c
  124.     {; M& w; [" }0 C, I4 @& T5 L' H
  125.       olds=(*p).second;
    4 j) c( E. h, ]0 W$ E8 |; K
  126.       if(olds->vers<(float)atof(version))
    : O% H1 W2 v2 c+ C
  127.       {
    6 J% l2 D1 Q5 w+ F& V; T( `
  128.         olds->vers=(float)atof(version);
    8 G5 Y5 B# s0 Y: p
  129.       }
    3 Z, }6 u; ~5 Y
  130.       free(file);' _8 P7 b0 \/ i( O9 x+ K' n
  131.     }
    + z: [# n7 ?* h6 r8 {6 W
  132.   }+ F. K, |/ c* Z# i. Q' S
  133.   fclose(fp);9 D: ^: Z$ q6 G
  134.   return true;, g: g; Y! n) k& O% J8 N6 o" ^
  135. }
      H/ ~! q; W. [* {# ?: B/ h4 P
  136. + |7 E! I1 {" Y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ( P+ P* t. N* Q  D7 k6 ?
  138. {
    8 r9 m& C5 h  F4 A3 C6 T7 k
  139.   TCHAR  szFull[MAX_PATH];' d2 f; Y7 Q: Q- m4 r( T
  140.   TCHAR *token,*inter;
    : i- c4 `2 h: c+ P
  141.   *szPath=0;9 z! N9 q; s4 O
  142.   strcpy(szFull,szFullPath);$ z% }0 X" z- E' _# t" P! r# v- U
  143.   token=strtok(szFull,"\\/");9 v& j% R" I" K6 H) |: Z: L
  144.   inter=token;
    ; y* g* t: w! _0 V+ _
  145.   while(token=strtok(NULL,"\\/")): Z0 ]( Q) j( O7 f7 b
  146.   {
    * P: P& {9 \# t4 p, i- R* @
  147.     strcat(szPath,inter);3 w2 y1 A% _& D' C* I1 C3 W
  148.     strcat(szPath,"\");( \( ~1 H& G, z* E
  149.     inter=token;
    # X! Q" V. M: M6 Q
  150.   }
    1 @- i% u  L( m3 ^( h- o, r4 o
  151.   return strlen(szPath);
    8 X: C+ O" s# i  g* _
  152. }
    # |% C; x3 R$ S% l, G

  153. ( B3 J$ g! D4 u# J+ S1 |
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase), y9 z' ^' ^+ n
  155. {. i1 W8 ~* o' _/ M9 I& j" {. f
  156.   DWORD attrib=GetFileAttributes(Target);
    . Z% {3 B( H% ^1 J* h8 g: J6 |
  157.   if(attrib!=-1)* R9 N' c5 ^8 I2 f' Y
  158.   {
    4 ~4 `) m- J* T" r- S( U, e+ v: v
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))5 |4 A8 I5 T1 S0 d& `8 O
  160.     {
    % ?  P; P  W  w% `
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
      [6 w- I" H( ~, F( s3 d- x
  162.       SetFileAttributes(Target,attrib);
    ( f* N/ a3 Q8 A# @7 `% k' S
  163.     }
    ) C5 l% n; t% h8 I
  164.   }( `# r/ ~# \5 Z5 e3 _, a1 i, O
  165.   CopyFile(Source,Target,Erase);
    5 W/ S1 X6 g! w7 \+ l& Z
  166. }
    7 E2 F0 h1 I! u% D) n- @
  167.   R6 m5 r$ A; Y; {% `* n" w, h" R
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)* {- K" u1 f9 _/ }  T
  169. {! r: p0 ^4 d4 b. N
  170.      FILE *fp;
    1 O1 V1 J6 ~8 z0 m1 x2 }
  171.      char  szBuffer[8192];' r8 _% u# d3 y4 V
  172.   va_list  argptr;, l6 |1 c. L' K4 ~
  173. 2 ^: K6 F) [( {9 B( @2 \. p
  174.         va_start(argptr,message);4 }# U' A2 y$ u
  175.         vsprintf(szBuffer,message,argptr);
    ! a/ R3 c) L. ^+ B; X. ~
  176.         va_end(argptr);
    ; w+ u2 c- C! _5 G# N( w
  177.   fp=fopen(FileName,"a");) Z9 q  w" h) M! F9 `& }# ~
  178.   if(fp)8 }$ D3 `9 b' c4 d! a# S: U
  179.   {  s) l4 \) ]3 }, @3 |( [
  180.     fprintf(fp,szBuffer);
    ; R* Q" q4 I3 E+ x
  181.     fclose(fp);
    0 d6 w, Z/ T# ~+ E9 ~
  182.           _flushall();
    & }, N- Y4 F* ~( w
  183.   }' z0 [) a! O, [# w4 S
  184. }7 R! a8 h0 I0 `

  185. % p5 K, Y; A: T9 Z. @3 C" ?
  186. BOOL CRevAppApp::Fclearf(char *FileName)- x, _$ b, [9 @1 J7 g
  187. {
    ( V9 w6 _  p. D9 p0 x+ }
  188.      FILE *fp;
    , T' z; _# q6 v
  189.     DWORD  attrib;
    3 X& \/ g0 |4 B$ a! Q! H
  190.   attrib=GetFileAttributes(FileName);4 D9 {- i6 T( u. i: r3 x9 o8 I
  191.   if(attrib!=-1)) \: q8 W1 f- S2 w; l
  192.   {
    % r$ k  N0 t* x5 k
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);! X( {( l  K- u% R& W- ?
  194.     if(!SetFileAttributes(FileName,attrib))/ I8 B2 ^: G9 J. J/ k
  195.     {
    : e: O' B/ n8 t  F5 R* b# ^1 j) _
  196.       return FALSE;
    ; m2 d9 }0 `4 _& C) h& h0 c
  197.     }
    ' N4 J9 E  D* d  q3 J
  198.   }! _, P% m7 y" H6 |; z
  199.   fp=fopen(FileName,"wb");
    6 x$ S8 y* G6 D( j( j
  200.   if(fp)/ M+ ~1 ?! ?( v8 I
  201.   {7 ]! _9 W0 g! W/ w3 d
  202.     fclose(fp);
    . q- C% W8 E% L/ A' x  a% y
  203.   }
    # V1 j2 C4 w+ j! M  O
  204.   return TRUE;2 @4 X3 F/ i7 m3 M  d! b# V
  205. }
    ! U7 V! R0 W$ X) [* a) Z8 U

  206. / s) [; m. Q+ L& u+ d+ P! ~
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    4 X7 M* n& M/ z" Q
  208. {6 Y0 l& d  l/ r
  209.   char filename[MAX_PATH];
    5 b7 W# n' {9 t# G4 B; ]) R
  210.   LPUPDATEFILE file,olds;
    6 w$ J' l+ R+ r9 u! l# _- N
  211.   std::map<int,CString>::iterator i;5 e: G/ [( D5 t0 P9 O+ |
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) W. x  b& h5 h) a
  213.   std::list<CString>::iterator l;; y% k3 T7 ^+ T0 t( i/ P& B! I
  214.   y8 N* \: c6 t( Y
  215.   if(bFirstUpdate)
    ( j4 K, ~  d; N& n7 I/ ^, y
  216.   {: r' d: v& q/ v' L/ \2 ~! e
  217.     dwCurrFile=0;4 k" k& m2 A  q9 p; Q# `# a! V
  218.     bFirstUpdate=FALSE;
    7 G6 y( f- {5 H+ |; q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 X+ c9 R- g6 r& `
  220.     {" a+ v- G0 j; ^( U. q
  221.       dwTotalFiles=UpdateLocal.size();+ P. Q3 q% Q; B
  222.       dwDownLoaded=0;
    2 B: s* T8 ^. Z# v( T, d  T6 A
  223.       bSilentStep=FALSE;6 N. \) d! l" p' J' t
  224.       bCompressed=TRUE;# r+ V* A/ E. P2 \
  225.       strExtLocal.Empty();
    - y" J6 ~+ w+ M: c; F% z
  226.       strFullName=(*i).second;
    % c: X- O  Y% n+ t0 ^3 z
  227.       dwProgramState=AP_CONNECT;
    ( q" r4 @! A8 l& x0 |3 r' t
  228.       return TRUE;
    " A4 K+ P1 q$ x" s
  229.     }
    , O) h- M( h1 y, t
  230.   }! l" }2 H, i- e# O# H2 R- l- a
  231.   else if(bRestartUpdater==FALSE)
    # R/ @; N& P7 D$ h0 P, Q
  232.   {
    ! i# Y0 X/ t- s* ]. z7 n0 B1 M
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    1 V, g% g6 c; M# |* ?5 |3 w
  234.     {& Z- ?2 q* N; i1 ]- R
  235.       file=(*p).second;$ [) o) L, E3 R; U( d0 C
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()), H2 u+ M) K4 {+ U
  237.       {
    7 X! q( K5 a+ u+ P1 K9 O. H9 z( C2 F
  238.         olds=(*p).second;7 W" @! x/ x3 n" |# d7 v7 k( ~
  239.         olds->vers=file->vers;
    # q/ t" x8 T  t. `  @0 [& S
  240.       }7 }6 V- _4 D0 }2 _
  241.       else: t+ Y" I: ?( k. \% [
  242.       {7 `4 c+ [5 F" j
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 V2 g$ ^# s& y! }- z+ @/ Q
  244.         memcpy(olds,file,sizeof(UPDATEFILE));0 B8 N( Y& ?$ x
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));) d& {! G3 j; u: p( _, z) L
  246.       }
    $ h( z  u: R4 v6 U
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");, @  P6 M2 g0 B
  248.       sprintf(filename,"(%s)",file->file);
    % a. g/ U  z! a
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      M. ~! K0 r7 d( H$ n) U& ~* r
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }- g$ n/ _5 R/ G5 d5 `( T: S% Z
  251.     }! F- G; r) U: K; c3 J
  252.     dwCurrFile++;, W, X$ C" f) Z8 a
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 ]7 p9 _* ?" {' u4 U/ L
  254.     {# d+ v1 ^2 G" _& e' S/ Y
  255.       bSilentStep=FALSE;9 c9 y4 k8 E7 h2 A+ x* t! `0 P
  256.       bCompressed=TRUE;7 O6 B" }& t, x9 |# N. X3 @2 @
  257.       strExtLocal.Empty();( P* @0 e* m2 w/ E& Z
  258.       strFullName=(*i).second;( c& u9 L  ^" D1 U( @6 X
  259.       dwProgramState=AP_CONNECT;) V6 o5 Y/ ]/ S, r9 v8 Q/ k) t
  260.       return TRUE;
    1 ]+ N: F+ x# f) g* z% }
  261.     }
    - }3 I; _, k4 \" R# P
  262.     if(!bRestartUpdater)
    0 i3 W, [  c/ ?  p* F( m5 N
  263.     {$ C) Q6 M  A# t) `$ N! k# ~- a
  264.       int iCurrSize,iFileSize;
    0 s8 s- v; e8 q: K' [' u; \
  265.       iCurrSize=0;% e0 H0 ~& G/ \7 i1 }! B/ T! T2 ]
  266.       iFileSize=UpdateList2.size();
    . V  V% H1 G7 r
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    4 Z9 w7 `, X# u( S$ i/ ^8 O+ D
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    1 s+ _: j0 t6 j# u4 c, a2 r
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    4 K- _" `" k/ {
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  v8 n( g! v0 Z. h- ~4 J5 V5 N
  271.       Fclearf(".\\update.dat");2 X/ R( G# @. K* h: J, I
  272.       Fprintf(".\\update.dat","Bloodyf\n");4 P% W- V# P: a( V& f$ e1 a# t
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)  G3 ^/ k  I. x% b- m4 T
  274.       {% D4 Q0 k2 s% E8 z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())# n+ G1 C+ }" \* y
  276.         {
    7 g- O; G5 j5 E! a" ~  e
  277.           file=(*p).second;
    ) L, f+ i" \( m' B4 X
  278.           sprintf(filename,"(%s)",file->file);
    ) M4 p8 w) n, [, y, c2 A1 W
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 Y/ f; B" `/ R! f1 s; u% h' b
  280.           iCurrSize++;1 }3 i; q3 T3 B+ s* H
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ( x( _( l% i- S  n7 @; h( D1 F! i
  282.         }
    $ X* ~- a1 Z/ ?# O
  283.       }' |, K4 u  N: @9 }0 ^' p* V9 U; [
  284.       unlink(".\\update.txt");2 Q, x- e2 t& k3 v+ y/ o9 x
  285.       unlink(".\\update.tmp");
    8 u+ e; e8 r* B4 ?; z! L
  286.       Fclearf(".\\checkversion.dat");. T! y' ]' D4 V& T/ Y% l& I  R; t
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    - ?; Q: j# _4 U6 n9 V. t
  288.       if(UpdateLocal.size())2 H7 ]8 h  ]3 w4 ~7 A2 u5 O, [
  289.       {
    + v$ Z2 Y# F1 r- ]! M  s6 ?* }$ S" ~
  290.         UpdateLocal.clear();
    $ g! D- p& H9 S0 s7 I
  291.       }. ?# Q  |& B# n, [
  292.       if(UpdateFile3.size())% q; {, h& }" @' E6 e
  293.       {# x( u' [/ p# q5 y0 v/ B
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 S& W; N8 ^1 _3 Z& ~( ~& M
  295.         {5 ~, p9 H/ `: {! T0 A+ y
  296.           file=(*p).second;
    ! p$ _  c+ j4 \2 y
  297.           free(file);
    % m) i9 q* M( L" D; B; \+ B3 k( j
  298.         }
    & S3 |. J! C- S- J$ C; m, t& Q4 d$ Y
  299.         UpdateFile3.clear();( Y7 X. @4 V$ }, Z
  300.         UpdateList3.clear();
    6 w+ [/ P% @& K" P+ W) k
  301.       }
    # R2 S5 p2 h+ p! Q- I
  302.       if(UpdateFile2.size())5 ^! c3 M$ r7 b2 r, ^4 S9 o+ q1 O
  303.       {1 O/ j: x0 I0 g. ~7 {, X$ y
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" A  q; n- y  Y4 y+ N/ x/ L
  305.         {
    + v' f+ l& f7 U! u
  306.           file=(*p).second;& e+ Y% O* h! S0 T/ {, V& _( R  m
  307.           free(file);
    5 i; ?4 M2 K8 \' r8 `
  308.         }
    . e7 }( ^8 p7 {: c0 L7 U0 V9 \
  309.         UpdateFile2.clear();
    : J0 Q! c* k% D% F( {, A
  310.         UpdateList2.clear();
    - i/ ~+ @) [% e& N# J/ u7 P
  311.       }
    : T: s. E3 ~! p* Q# A/ \
  312.       if(UpdateFile1.size()), [' t% \4 S. w% I# _" K
  313.       {4 j' f/ M3 ^* j( E& _6 |) X# D* c
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" ~/ M; {; Z$ o( j# G
  315.         {
    ( g. d4 Y& K: s! w4 |5 f: Q9 h
  316.           file=(*p).second;
    / O% _  O8 l7 @* u
  317.           free(file);
    + b! X/ D+ ?: f5 F
  318.         }8 F7 c# ^8 U2 ^8 H2 W! B! ]
  319.         UpdateFile1.clear();
    $ G: l+ ~; m" m: M, H
  320.         UpdateList1.clear();8 x  v. b9 H0 m$ g; T5 c
  321.       }
    ; J' e7 m, k: V; h. G# ]
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));% g+ k5 [! K2 W
  323.     }2 S: K( F  ?1 v
  324.   }
    / u9 c- s6 e" I/ u6 L5 i- f
  325.   return FALSE;5 E2 a: ^, _/ a( O
  326. }7 a, o8 e/ x7 q6 k4 s

  327. $ a, P# N  M2 L' Q# S
  328. void CRevAppApp::ClearAll(void)1 s0 X# u3 y/ W" H/ F' Y9 V& c
  329. {& ~$ R* _: g- l( Y
  330.   LPUPDATEFILE file;" z$ Y8 |4 _; c4 E' y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
      G2 ~7 D' `( N! \
  332. 5 ?; J4 O, U* y* j) n3 @: J/ b5 A
  333.   if(UpdateLocal.size())
    # X" \5 e/ d; u
  334.   {
    & `: f3 j) s) P' U' V! \. j% u, M
  335.     UpdateLocal.clear();
    " y1 M8 F0 ]# `4 Q
  336.   }* A; [) q5 h+ n3 z  ~3 p3 g
  337.   if(UpdateFile3.size())
    7 a+ U* ]6 f7 J% a7 u
  338.   {
    ' Z6 f1 I8 W4 z
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 x% U( p& ~$ v+ p" F9 B% y
  340.     {) T& A3 t% V: N$ N5 L6 Z: |
  341.       file=(*p).second;: ^2 n* [3 n$ w% O8 \# V
  342.       free(file);
    4 q0 m) l8 R0 Y1 u0 X
  343.     }* M5 S% a- _: k" |5 o
  344.     UpdateFile3.clear();! U* _( ?' l# U( t
  345.     UpdateList3.clear();
    1 {1 m& r# k6 b. J" N, u
  346.   }6 ^  f4 P4 l! N7 @$ N. R
  347.   if(UpdateFile2.size())# R- w( i. d( I( e7 ]
  348.   {
    ) W6 E+ P4 c2 j1 v% B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    2 B: y4 |" c/ u
  350.     {
    , K3 d' ^% i# \( N4 y
  351.       file=(*p).second;( c4 E* R  T7 t) i0 _+ c
  352.       free(file);" X2 m* q/ Y& E: k/ r6 H6 _+ j# Y
  353.     }
    ( h' |+ z6 D' k7 x; c5 O" C
  354.     UpdateFile2.clear();
    # j# h/ G( @, o7 S9 P% g- j! W
  355.     UpdateList2.clear();% ?: t% [2 s, `# \/ n. O+ e+ v$ _* D
  356.   }7 ?+ ]" I- R& `  W" U
  357.   if(UpdateFile1.size())
    9 c8 X. x; T) x& K- M
  358.   {
    ! o) L: D% F' C: f) O3 ^/ |
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    % N- R! v, x1 E' K7 T
  360.     {
    ) p6 Z4 L3 j% R9 x6 N: v2 j
  361.       file=(*p).second;8 P+ s) k& d) g7 R9 K7 D
  362.       free(file);) O/ E. V# c: V
  363.     }  @. i. D! h- @, Z: \) m
  364.     UpdateFile1.clear();
    ' ~$ I; |: V$ l! U, r# L6 g. F
  365.     UpdateList1.clear();3 N. M7 r# F6 L- Q3 Y: L
  366.   }
    9 E; }) \1 ?& l- W2 J  _- q
  367. }  ( l  y, E& f3 X' `. G( x
  368.   
    , o  K9 a5 \5 w/ x  s6 h
  369. BOOL CRevAppApp::CheckLocalVersion(void)- ]0 m$ h" D" C: S3 j# f7 V
  370. {
    " c* F% _9 F3 T" v
  371.   int c;: d! K$ G' x) Y
  372.   LPUPDATEFILE file1,file2;
    9 q9 N3 p3 C" H* H! x% S8 }* u
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    . u( P, }( @; O1 t' _
  374.   std::list<CString>::iterator l;( g) P- B; R" {5 a# M6 x+ J
  375. / }* D& n2 t) J, _" I; u
  376.   UpdateLocal.clear();7 O) U% D+ y. }& n$ W2 k
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);% I7 C" h: L$ ?- A2 w8 ~1 _
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    0 F. }; P2 ^, w- l: l
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    3 ]0 N; `) ]! d
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ' n( K! U; h& e! }7 q( E8 h' i
  381.   if(UpdateFile3.size())
    & E( x0 O0 K7 z( N" e
  382.   {9 t( X% l% z* _$ C, E; C8 z& Y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)- H9 T4 Y3 P6 K- e8 F  \% [
  384.     {
    + d$ ]$ M8 }6 K2 i
  385.       file2=(LPUPDATEFILE)(*i).second;
    , D, r# S8 ~  o- J% a; M
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* q# h7 l/ D7 j2 m4 @' s$ {
  387.       {; G0 s# F1 f9 K0 G- O
  388.         file1=(LPUPDATEFILE)(*p).second;
    + v1 r1 `8 E8 O( e& {
  389.         file1->vers=file2->vers;
    0 u$ n3 a4 R9 j
  390.       }) h" t' p" f5 Z! L7 K$ p2 d$ |
  391.       else
    9 R4 T& {2 l8 _' e7 g
  392.       {( i. @& l$ o0 W
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) Z) C# s- r3 g; u7 G
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
      U& D: P) v) L  Y$ d
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    % d. ]8 P# [) V+ _
  396.       }7 a5 \6 k! ]8 R
  397.     }0 M  b8 o; c* i8 H6 _
  398.   }
    8 T8 l- p6 b3 Y- S0 F1 g4 b9 ?* s
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 p4 Y. q: R9 X1 ?9 H: a3 ~1 I! B; i
  400.   {
    . p$ C7 y0 U6 o# C. K. k  D  x
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())! k2 G8 M* ^1 S9 q
  402.     {
    % y* b; p3 D3 k, o1 P( `
  403.       file2=(LPUPDATEFILE)(*i).second;2 f$ l0 t2 _0 O/ D  I" N* V
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); U% Q( t/ z5 U4 e$ X1 O6 y1 |
  405.       {* F+ e* T8 P# `3 l4 ?
  406.         file1=(LPUPDATEFILE)(*p).second;
    1 a! M9 P) |6 u% z
  407.         if(file1->vers!=file2->vers)
    ; ~. S3 T1 Z8 w# d% J& u
  408.         {* C! D9 _) X# {# D4 x* J" K
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 S$ y' s- n/ b5 \7 a! e! q
  410.           c++;
    7 j$ p( r# R* Z
  411.         }
    6 e; y9 G2 N! V7 Z& }; f( K
  412.       }  U  N# ^) o+ i; @
  413.       else# n3 p  V2 z6 n& ]: S
  414.       {
    2 f& }" W- R- n! i" R& N$ D% f. L' v
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    , A6 b% _& E3 ~5 m0 l, B
  416.         c++;% b. Y" i2 ^9 N4 x' u- A* r
  417.       }: V7 s6 X6 X5 i: z
  418.     }9 s' D; ^0 q9 N$ P: G/ k* K
  419.   }
    % p! B' ~" F" t6 Z. ]# d  |
  420.   unlink(".\\DownLoad\\update.txt");
    3 Z6 V( B9 ~$ N. E
  421.   if(UpdateLocal.size()) return TRUE;. V/ Q3 z2 H& @' l7 o3 d
  422.   else                   return FALSE;
    ) }2 ~; _. {8 A0 v8 }+ J0 d& w
  423. }
    6 E0 n% r' t$ v. X
  424. & x% K# n4 j1 u8 g3 V) ?
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"  Y" V4 {* K% s- B& m, c  Z: K
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"- L$ h( ~) h3 N2 ^  Y7 P3 g2 Z

  427. 9 _- Q* ~7 J7 K; V  j
  428. # R( A7 s% m$ i  H' i( I- h9 ?

  429. $ H4 `& R6 Y0 M1 @( @* r. e$ o
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)+ Y" i: h" l& G/ X. \9 X3 [
  431. {
    $ Q( g, I- X+ I7 v8 ~' b
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;7 W1 x6 p0 v- f! `% H
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& m+ A" `5 Q: `+ \& R, y
  434.   {
    . f0 U! S0 G- L0 s: W# m
  435.     char szLanguage[50];
    5 ^- X- e  n  C# {5 w3 X% D
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + P& u7 Q- u& e* B5 r
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 L. a+ F& T; x0 g7 v
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) y- N# h2 Q- l6 m8 S6 K2 ^
  439.     else                                   m_iLanguage=ENGLISH;6 J8 m/ q2 ~  P  Z: O- N0 e
  440.     char szRegister[100];
    ( h  {& C9 N/ I) N. m
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ S# V5 s$ q% e% y8 j( j6 J9 W2 g
  442.     strRegsName=szRegister;; q! ~7 S' ~) h
  443.     char szPatchURL[100];
    ) z  x$ E4 c! F* o2 f$ ?% f4 Y3 n+ W
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 k& x# i3 D/ J0 Y9 q" _+ t5 Z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 J6 L, S; ^* R# h
  446.   }
    # U' l, i* r- T. @8 \  U' H6 O. g
  447.   else
    ) c3 r. b* l- t3 u. c; G
  448.   {* `0 G( b# `* D
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # v# p3 E: ^: c; C
  450.     strRegsName=DEFAULT_REG_URL;
    . h; s7 ^% o! j. `  s, ]) x3 c
  451.   }. W/ f. J, l" C: F% ?
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    5 [4 ^" ]# i' i$ a
  453.   {& Z' C# R* A- A( I4 @& D2 B) e
  454.     char szIP[50];# ~: z5 G9 l% P8 ], Y! S
  455.     char szDIR[300];
    & ~( [2 B# n5 q
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% @! s( c" n( m; A# m
  457.     {" H1 _# g+ t* {" I( B; o  N
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");; \0 P, ~) O; P- D% E$ c* B5 D. N
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");) x+ w) v2 S  f
  460.       strHostName=szIP;
    8 x# @1 u, q& }7 l! R3 s
  461.       strHostPath.Format("/%s",szDIR);% w- s) W$ q9 g: ^3 n
  462.     }. p' k) e8 `8 X9 M+ H' j
  463.     else. k, w" s5 `' e1 ?1 ?
  464.     {- E& n7 }9 Z2 Q% N1 S) u' q% H
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ {& ^9 R  u2 j0 ~
  466.       {! f) D6 C; I% z. _
  467.         char szLanguage[50];+ C9 X8 D" @* X# z' P* j' y) J
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' q5 D$ Q, v8 W3 Z, H1 O& l& R
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 N- {- |' L& F3 w6 G
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - S: s6 k/ J: h5 U' X/ v
  471.         else                                   m_iLanguage=ENGLISH;% h& \/ t3 N+ L' Y
  472.         char szRegister[100];
    : |, N8 }8 s( g
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 p6 q3 o; R) X0 k5 |
  474.         strRegsName=szRegister;
    ( i/ Y1 w& ^/ ]" C
  475.         char szPatchURL[100];; I+ n4 ~  H( V: k1 k$ ?0 t$ F4 Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . v  J" v& s( N+ T/ i; j
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 h/ J/ X1 N8 O
  478.       }' j, l) F, i! z$ P
  479.       else' [+ {. `7 D, v* }2 `0 i* U
  480.       {1 p3 a: Q6 e: X$ {. C; t1 m" Q2 J/ a( r
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 e4 d! c7 H; u4 k: F8 M% V8 S1 @
  482.         strRegsName=DEFAULT_REG_URL;- [: s  U! v0 Z; l7 q! ?! E
  483.       }
    7 ?1 J- }4 u% d8 J4 K
  484.     }
    4 c1 Z/ Y: Q% I6 c
  485.   }
    3 t, P7 |4 u0 }  v; p% V: B4 Y
  486.   return true;. z+ x) V9 A  g
  487. }
    1 ?' X6 X! U4 D% W9 t; R: Q8 s

  488. 1 a$ v9 g& w+ b# P) E
  489. #include ".\ZLib\unzip.h"
    / h( B+ Q7 A: U# \5 z: ^
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);. _2 @. H; d# V: t* x0 U. I
  491. /////////////////////////////////////////////////////////////////////////////
    $ n+ T. W1 t: B
  492. // CRevAppApp initialization
    ; m  X  r0 P+ w1 {/ w- s! ^! L: K
  493. 3 J# i# f& B. \  d0 c0 @* X* n
  494. BOOL CRevAppApp::InitInstance()
    7 Y0 E0 m" Z$ Z3 k  \. v6 {
  495. {
    3 N, h7 `) G" ^4 \3 G: _
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];; E8 }8 a* q& I: Y5 ~
  497. 7 \4 D6 v( g  D
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);" W( l4 [# l( o
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))" l1 w9 }3 G0 P* a( e- y
  500.   {
    7 ]2 @  c% y" B: P
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");1 I$ y& x, p6 e% @* h+ J; y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    9 [+ n( h3 S* K* U
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))1 |0 h" R7 S; Q  c
  504.     {9 W" z  u9 d6 a# Q# L0 J" U" b, Z( e
  505.       strcpy(szPath,szPathTarget);$ j- h/ O5 b; ]. o( r* S6 }
  506.       SetCurrentDirectory(szPath);/ e/ w# G) O1 x2 J: V0 i
  507.     }
      r- f$ a+ m! s1 K
  508.   }* v* D  `# m# o( U" D9 ~& {
  509. #ifdef _DEBUG
      N$ o* \! M- y) w
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% ]5 Z! u- a" _9 T; K6 Q3 K6 ]
  511. #else8 R* W- A7 p9 b& g
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 X6 `$ Q0 m; A9 O) p
  513. #endif
    : p9 ?" [/ V& v. r
  514.   {% `0 S# g5 ?6 q5 V! x$ M
  515.     char tempFileName[MAX_PATH];
    , H  I( N7 ?5 W4 {
  516.     strcpy(tempFileName,szPathSource);
    ; r7 W7 @8 `4 J0 L2 k
  517.     tempFileName[strlen(szPathSource)-12]=0;9 c2 A# j1 H! |) B: o5 H
  518.     strcat(tempFileName,"\\$CSUpdate.exe");! \, F+ H$ |7 C1 I0 q* c8 P  {% ^
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    - T& M" j/ |' S. `) P; p/ V* i
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ( u$ z. U1 c2 p' b2 p6 ~9 N7 b
  521.     return TRUE;' U. @9 G3 Z: I: m
  522.   }
    " t% v9 U& h9 e  L6 Z5 u; E# c/ e
  523.   // Nuke 0118: Delete run.exe% C; i( \2 W/ M( ~) O
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );# Y2 r* |& K6 |
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");2 L, g1 R: }6 Q8 ^
  526.   if(!ReadCfgFile("Config.ini"))( s1 q' G9 U2 G- N6 p9 w3 i$ K! Y
  527.   {8 j4 }) ~" S; a
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);8 m: |" k2 I$ R: d
  529.     return TRUE;  U3 b& ]5 ]# p, R8 ~8 `
  530.   }2 ^" Q; h: N) O  I9 k6 @4 z# Y, [1 v
  531.   HANDLE mutex;
    * c9 I+ n0 z5 P" U
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))3 Z& G6 `4 J) X+ U" \2 {
  533.   {2 c: R, m8 s0 S, q7 m( |9 b# l; F
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    $ Z2 [2 `0 h% ?" m
  535.     {
    ) k: R/ B6 _1 p* Q+ B  L. F
  536.       CloseHandle(mutex);9 Y  X  _" V. G/ ^7 g/ P' v
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    : |4 D/ h' ^2 X/ T# `8 k8 A6 ?
  538.       return TRUE;
    " d4 g& `/ Y* ]
  539.     }
    % L' ^# H5 H. @) S6 L1 @
  540.   }  
    1 q/ M5 E. ]. s' y5 A; _
  541.   CloseHandle(mutex);
    5 F; D8 _( D, {9 O8 \, E6 r
  542. - {% a; M! Y; M% }+ X7 Y8 B( h
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    8 ]* ?2 o; A) X* f4 t

  544. 3 B. ^$ q0 @& ?% i3 Q5 Y5 P  }0 S
  545.         AfxEnableControlContainer();4 ~! B  \$ F4 O1 k
  546.   i' q3 ^: K" Q$ k. d6 x  k7 g5 H
  547.   bCanUpdate=FALSE;$ ?) C7 ~# f/ j6 ]  k! T( ~
  548.   dwStartUpSteps=1;
      L& O" b1 W+ a5 i- ]
  549.   dwProgramState=AP_NOTHING;4 z# B) |- C4 d; x$ d7 Q" F

  550. # q! z3 ~, j$ O4 h0 _. G
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);) c, f: D; m3 m% D3 O

  552. 7 ]1 W" K% B. p1 x
  553.         // Standard initialization0 K. p. Q: R( R" [0 P: E
  554.         // If you are not using these features and wish to reduce the size
    0 h" A5 p* [% X8 F2 T  O6 t7 H9 E
  555.         //  of your final executable, you should remove from the following
    & [* T/ D5 w1 U! d1 X
  556.         //  the specific initialization routines you do not need.
    - K) e9 o4 s% x' m- o9 m7 Y
  557.   ], S4 m% u6 j2 o9 V. V
  558. #ifdef _AFXDLL
    + N/ M7 L3 O9 k+ S8 V
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL/ v. N; N  G. g& J! a
  560. #else
    & e. w$ \+ T+ c/ X: I6 q! Y2 M
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically  j; ]8 W6 i; X
  562. #endif
    8 E! O. \6 f( s, w

  563. 7 T3 C% k. V( J& n- k- ?
  564.   dlg=new CRevAppDlg;
    & _- d, w. ^4 I. s, P
  565.   dlg->Create(IDD_REVAPP_DIALOG);! _. p' Y6 \# t& o( G/ S
  566.   dlg->ShowWindow(SW_SHOWNORMAL);, ~( ^- X1 O' y, c
  567.   m_pMainWnd=dlg;
    & q% K1 K& H( j) b

  568. . m( K/ d& y# \* N
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    1 C# h  v0 b2 P( O5 R' D4 a5 B

  570. 2 U6 [7 A9 C' I1 E' k  i
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ) J* O' d% _  A) Y# R
  572. //  ULONG_PTR gdiplusToken;
    4 e( \- N+ {$ h& h% y9 \
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
      H- ^9 z9 ?* h* y
  574. 9 x3 P0 v2 E# A- `) H
  575. //        CRevAppDlg dlg;
    ( T. W: E- ]# L, {
  576. //        int nResponse = dlg.DoModal();
    6 w9 Z8 ~7 Z+ E4 Y) i
  577. //        if (nResponse == IDOK): y+ v! V& I7 V: f
  578. //        {! B" h7 ?6 z! F9 R9 N
  579. //                // TODO: Place code here to handle when the dialog is
    ( ~( H; a8 t- y/ N* H+ ?; a/ f
  580. //                //  dismissed with OK8 r# z. D: B- z7 R) K
  581. //        }
    # o( F2 h: Z% p7 a3 x4 c; E, V$ B
  582. //        else if (nResponse == IDCANCEL)8 n: o; X  O: ]5 k6 e
  583. //        {
    * ?' M2 s4 k$ z
  584. //                // TODO: Place code here to handle when the dialog is9 g: d: ~# m4 G* A
  585. //                //  dismissed with Cancel- f5 U6 K% Y  C3 H4 D' I, G
  586. //        }
    ' H) _* }: q: A
  587. $ x# s- [) r8 Z# x5 @, |+ g' W6 g
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    1 O" D. R9 r2 X9 T
  589.         //  application, rather than start the application's message pump.6 `2 X9 k6 S8 Z2 O! L, m
  590.         return TRUE;
    / v) m& B( O/ d# L
  591. }
    0 l# n/ _6 c, L0 o9 a% o

  592. # w  J+ R/ ]( b% b+ k
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * w. ]0 K, }6 g& V
  594. {
    ) r/ I* v5 u; G* V. g
  595.   int i;# F2 h, `1 m9 m& j7 [) H
  596.   char *szRet;
    4 J1 g6 y; U& T# g  R8 k+ E+ J

  597. 4 M# ]7 Z, N( L' b( v0 b1 E
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    4 ^/ q2 v2 m  ~# Y$ D2 m* A6 m* E
  599.   if(sztoken)7 c7 n! I9 _2 [* F8 ^, X
  600.   {
    2 C" b. J% R: [$ \  U) ]* |
  601.     szRet=&sztoken[itoken];
    $ p* c$ s+ {1 O- D( _
  602.     while(sztoken[itoken])2 @* r9 Y; p! `) {% m
  603.     {
    - S9 F. t* q1 F' f* U4 h
  604.       for(i=0;i<(int)strlen(token);i++)
    0 F% P% G$ W$ c# Q
  605.       {
    9 z" j- r+ o: ?3 z( E
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])* m3 _& v- j. i" u" I. B. _" k7 n
  607.         {
    ) j8 `; Q; X" X3 D( x
  608.           sztoken[itoken++]=0;
    4 ~: |4 b0 p4 n+ V% O# g
  609.           sztoken[itoken++]=0;
      f; \- E8 v- m0 H5 L( L0 K
  610.           return szRet;
    / ^$ e& J" C: o# O* P
  611.         }
    : B$ c5 @9 s- N- l, F7 }8 z
  612.       }, z! ?1 ]% Y' b; Q/ h
  613.       itoken++;
    " p/ X4 [" b! e: J
  614.     }- h* {) e& h, W) {. }
  615.   }
    $ V- B$ Y; e, s! K: N7 M  g
  616.   return NULL;
    ) r; n7 w/ Q+ U2 \: E7 x
  617. }4 L% v$ C# o9 r3 U) H
  618. 6 ]5 Y+ ^" ^' i% I  q
  619. void ProcessProc(long Total,long Current)
    , W0 A& q* i* X9 ]3 T
  620. {
    % p4 t7 y$ I$ B5 h( I
  621.         MSG msg;- E# S9 t4 S2 q; x* {+ S; f6 g' K/ m
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    # \6 u: t' i5 e, o
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    0 r% F. g) q7 _3 y5 S; R
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ {9 v% S6 T2 A8 ^3 N9 g9 V4 @, @
  625.         {
    $ r+ b$ \! c& |3 v8 z8 {6 N
  626.                 if(!GetMessage(&msg,NULL,0,0))
    3 J% b% Z( d8 w. h
  627.                 {
    ; h  E; C( W9 M
  628.                         return;4 q  P7 ?; b% s' R8 e# I
  629.                 }
    # F; @; U8 G" }( p6 m
  630.                 TranslateMessage(&msg);9 _2 f; @7 i5 ~/ A
  631.                 DispatchMessage(&msg);
    7 @6 s) M# r# d" R' X
  632.         }       
    ( F0 b% n. q3 e5 @0 i
  633. }
    2 o- Z: j6 L5 m! Y9 Z5 O+ ^

  634. / _# F" d5 n9 ~% W. |1 G
  635. BOOL bFirstChar=TRUE;  C1 v7 f& i! l% v! b! d3 v- T4 \
  636. 3 l( k8 V2 x5 m) c
  637. BOOL CRevAppApp::OnIdle(LONG lCount)# H# k* p0 r0 q* I, c6 K
  638. {
    4 v! Q0 G& t& M+ y! T4 h( f
  639.         // TODO: Add your specialized code here and/or call the base class
    7 b6 T1 B# L- k( y" G2 Q4 V
  640.   switch(dwProgramState)  ?4 O5 \/ A' k
  641.   {
    9 m' t! M# p" \1 H  E$ g
  642.   case AP_NOTHING:
    + K5 ?8 J+ m8 [2 T
  643.     switch(dwStartUpSteps)- U7 d- N& u: c4 w& C. T
  644.     {
    ! p+ ?3 x7 j1 \3 O- j( X! y! ]
  645.     case 1:4 A4 s5 R- N0 ^6 U; k7 g9 e
  646.       {* ], x8 O0 j3 h" ], F6 s* e
  647.         int i;+ F- Q" f) e: a% G% P
  648.         CDC *pCDC=dlg->GetDC();
    ; \" Q" d" T4 W# L/ V
  649.         HDC hdcwnd=pCDC->m_hDC;2 Y  h3 k( D/ w
  650. //        Graphics graphics(hdcwnd);
    8 A* }3 D, k4 t" V1 [, k
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");" h3 ]$ C8 _5 \/ d$ l7 ^
  652. //        INT iWidth=bitmap.GetWidth();
    7 ]' J( U8 T+ o5 T# F4 u
  653. //        INT iHeight=bitmap.GetHeight();
    2 [1 f" q3 H) @3 }. i% w
  654. //        Color color,colorTemp;
    . N% O2 D* N9 D. o! L5 q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)' w5 X/ G. G. l$ r6 ]( b$ ^6 s
  656. //        {
    ( K3 h8 t( k& Q) t
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)4 V4 U+ A: @% B9 X4 u- s1 G
  658. //          {) F, q7 h3 l9 Z7 S. T. U
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    : O! d3 ]+ E! Q! M5 s+ k
  660. //            colorTemp.SetValue(color.MakeARGB(% I/ @  z& d" Z) D3 g. j
  661. //              (BYTE)(255*iColumn/iWidth),
    2 `8 J/ d! M9 L& H$ Y. c
  662. //              color.GetRed(),
    - q7 r% J* c' R2 F, B
  663. //              color.GetGreen(),
    ' n, r2 K; D0 [1 f
  664. //              color.GetBlue()));- A0 D4 C# Q6 y/ _
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    " p7 C. g# Y  G6 z
  666. //          }9 y) z" g. S% E: w& S& [# k" f
  667. //        }
    * B+ d: d( Q$ l5 l
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);. `5 y4 l3 }2 a; \7 \7 \% [
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 g* B8 B8 V' y1 N# G
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    / A: d0 c, k+ U0 {. q- l
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: q# y+ K' g! ^+ d
  672.         for(i=0;i<240;i+=8)
    " s) z( x# k5 E$ c$ y6 o
  673.         {
    2 Z8 ]% ^4 Z: T* l* c7 h
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 t# s4 j0 h3 k; i8 y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - J8 k1 n) x, O% q
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" V3 K0 i7 _7 k% t/ y$ p. U
  677.           Sleep(33);( S! y0 J$ l, b4 E8 F3 ?
  678.         }
    : O: J. Q1 f0 f
  679.         Sleep(1000);# F& d1 @& @" O4 O+ F
  680.         for(i=240;i>0;i-=8)
    $ H, \4 G+ k% Q% q0 t
  681.         {+ ~8 Y2 z& R$ K+ N7 g" a. L
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' u" l8 j# @: w! ?
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' x( n! U  S& u! T' h( I
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 n7 C/ P& w, u& _8 R
  685.           Sleep(33);. ]( z* O- Z1 \8 `4 [: \
  686.         }2 @8 f; S- |4 @- K7 L
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    " Z  d$ k( l, N9 N  A" S8 U8 h! r2 `3 d
  688.         dlg->ReleaseDC(pCDC);3 D1 N4 s2 D( X  _; u$ `0 e. E0 S
  689.         DeleteDC(hdctar);: ^! ~$ B3 x! Z& F# T8 ^
  690.         DeleteDC(hdcsrc);6 n9 J! p1 ^8 D
  691.         DeleteDC(hdcorg);
    5 k  \8 ~& K& q" P* Y" J% i2 P$ a& m% ?
  692.       }  Y9 e0 @9 w8 o' ^, _
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);" T, \& ~" f$ s( F4 p4 w! q; k
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");- v5 B$ q, n  ]% @. T
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    4 T; R: p; D% X5 f$ a3 n
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    , T3 N$ F4 u! m; p. z8 a
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      f  |+ F7 [3 a+ {# \. ^2 C0 P
  698.       if(!Dn.Connected())
    - V: L: S4 o+ D/ `5 Y2 H9 _
  699.       {
    / V4 V& J7 }0 o) ~8 A
  700.         dwTotalFiles=1;
    , I+ x+ `, P8 k: e1 [
  701.         dwDownLoaded=0;7 |6 e2 b" Z) G( _8 y5 x# c! Z
  702.         bSilentStep=TRUE;/ n0 ^# {# X& H+ L
  703.         bCompressed=FALSE;! W1 P/ s* m3 E4 A
  704.         strExtLocal.Empty();  n# K/ b/ J+ H$ E
  705.         strFullName="readme.txt";$ s2 ~0 p) G5 L" S3 e
  706.         dwProgramState=AP_CONNECT;9 ]9 g5 e3 X9 N4 F. b+ F/ F
  707.       }
    2 d+ o6 ]2 W  Z9 v! ^
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();4 ?0 |& ]& a. T
  709.       dwStartUpSteps=2;5 y; Z% O% }0 F/ g& x- E* r
  710.       break;0 n& q* u3 {5 s9 o
  711.     case 2:( o) l1 c- y+ X6 f
  712.       {0 x. [9 z9 \2 h* Y
  713.         int iEOF;( N$ r+ m. V' g3 Y
  714.         FILE *fp;
    * I5 O: h4 a6 [9 k, c6 {7 g8 s
  715.         char szString[512];
    ! k! E2 f- c' S( Z' g
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");, U" c9 r, z& F: O+ Y: U, }
  717.         if(fp)! j- D" R/ u4 M7 _2 x# @3 L8 f
  718.         {
    % P6 I# h7 r6 o1 ]( A
  719.           do
    & T- S' O  N  r, F  h0 ]; J
  720.           {. x1 i/ Z$ q* b' o
  721.             iEOF=fscanf(fp,"%s",szString);
    9 c( ~0 ^$ w& ?
  722.             if(strlen(szString))
    ! ]! M8 U1 R0 R4 y
  723.             {: P: }: X0 d$ \) F6 |; n7 b
  724.               if(bFirstChar)7 e& f& i) Q1 O# P( v! ~: d* b" E
  725.               {& G: I( E) [+ X+ D+ g6 t. \
  726.                 bFirstChar=FALSE;
    5 o% K% t$ \; A* A; P
  727.                 bConnectIsBig5=FALSE;
    6 w6 i% E3 w9 a- F% H2 X& M
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ( X% I" m1 [2 y, L8 j
  729.               }
    6 h' ]) k) b) a" k. Q8 D
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));5 I1 a, L3 h$ j8 }
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . v" M5 ~! q9 P
  732.               dlg->m_ListText.AddString(szString);
    ' Z/ C. S+ j' {% r9 O9 S4 C1 c; Z
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ q4 }$ _: q1 G0 J; r
  734.               *szString=0;
    9 T9 i7 v% N6 c7 p  e
  735.             }- Z8 C- u2 ], i; `; d& A( k. }
  736.           } while(iEOF!=EOF);
    3 q, K. \7 u/ c8 x: [( _- x
  737.           fclose(fp);7 Z* u# D# U& w: D! y2 |8 S
  738.           unlink(".\\DownLoad\\readme.txt");
    0 x! `% f, {% q; j6 P  q3 j+ C
  739.           dwStartUpSteps=3;
      O$ z! S+ H* k  e: Q" U- y
  740.         }
    % e" s  T, f" Z# `/ e
  741.       }; u8 u; q$ }4 f+ V7 {* g% x
  742.       break;
    , M) O: S$ b$ i2 ^8 ]  x4 m% ]4 l
  743.     case 3:
    : M6 u( V" ?3 g  w
  744.       if(!Dn.Connected())
    1 ?. t& C0 P+ J$ {- F- q* B  W  o
  745.       {8 [# }) {3 n: W$ ~% e$ ~% r3 d
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);5 ^; r$ i3 U9 M0 x3 i6 y: e5 }
  747.         dwTotalFiles=1;; x, X, q" X2 S0 H' d- L
  748.         dwDownLoaded=0;9 U' G; a7 k5 m8 a. k
  749.         bSilentStep=TRUE;
    2 A$ H& F* K1 `  a$ s; \" C3 ^
  750.         bCompressed=FALSE;; E' {8 C" Y* R' l$ L
  751.         strExtLocal.Empty();
    3 J6 S. D8 b) `  C0 |
  752.         strFullName="checkversion.txt";
    ' Z0 _2 r1 X7 Y( `" W
  753.         dwProgramState=AP_CONNECT;
    ( ?$ b4 c, [3 F4 E# T9 _* K& y- r
  754.       }
    6 I0 h9 ~5 p, C$ T  c
  755.       dwStartUpSteps=4;  l( L0 A+ D- O0 n
  756.       break;
    % D2 l( O' z+ t
  757.     case 4:9 \7 U, j- Z/ I: X
  758.       {2 Y) o; R1 b/ I' W* b  S# A
  759.         FILE *fp;9 N9 Z0 w5 W$ X9 P. ~
  760.         char szString1[128];
    7 r9 n2 b0 \/ D2 |9 t% d
  761.         char szString2[128];
    6 V7 n9 X5 c* j
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    % D% ?1 O0 y! T" ?+ D
  763.         if(fp)
    6 I5 T! h8 m: [
  764.         {
    & Z- m6 N. P& r( \  b0 d5 z; Q
  765.           fscanf(fp,"%s",szString1);1 O' M" [. J: H
  766.           fclose(fp);/ ~. t( ?7 M7 R
  767.           fCheckVersion=atof(szString1);/ Y6 V4 ^! f. h1 w) ]/ u
  768.           fp=fopen(".\\checkversion.dat","r");0 D. _5 G$ \; y! T3 {( @
  769.           if(fp)
    3 u* J# ]. O& E3 S2 X# c5 O
  770.           {
    7 T) X2 [" m: p: B4 B  m7 _
  771.             fscanf(fp,"%s",szString2);
    6 r$ ]. @4 M: Z1 j$ G, M' Z: x8 h
  772.             fclose(fp);* {; H5 @7 h6 k% ?5 U
  773.             if(atof(szString1)!=atof(szString2)). F# N7 z2 q" f: P$ M8 b& \
  774.             {
    ( x$ `$ d/ B$ |% ^8 O( `9 s
  775.               if(!Dn.Connected())- o; ^8 Q4 a2 T5 y1 x( V9 b
  776.               {
    3 U+ d9 Y5 F* P* |8 D
  777.                 bFirstUpdate=TRUE;1 w# L& F0 L) o" ?
  778.                 dwTotalFiles=1;0 E7 C( n1 j; Z7 F6 v% M
  779.                 dwDownLoaded=0;
    + u9 \' D$ l8 T4 q
  780.                 bSilentStep=FALSE;
    . M/ k  X2 a3 [
  781.                 bCompressed=TRUE;
    : E/ Z7 I, r1 B4 [) s: G/ n" b4 A
  782.                 strExtLocal=".\\DownLoad\";& P/ j! p0 L$ d! d4 B
  783.                 strFullName="update.txt";7 a  p! q4 F3 v! z& G; Y
  784.                 dwProgramState=AP_CONNECT;
    7 m- U+ g) ]# z! `" v0 @2 c- J
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & @7 ^/ ~- m. V  V1 ~
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    % I0 |$ R+ i. t" t/ n5 o9 Z
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 z1 _! p* s! L

  788. ! u) n2 m/ Q% p; C; ]5 m6 D8 G" x
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - s1 E5 T$ R4 ~6 Q
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    * @( T# k; e1 V; y3 m7 L
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    & K0 m7 K  R7 s% c; V" _4 }+ w
  792.                 {- H. A! ]5 m3 k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    6 l1 _3 V! ~6 X* u  {
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    - p' E: ?0 E8 C' q, P( y, R8 v% w1 Q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");) n8 D/ P( U3 q  \9 \" @% r- ~
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ S4 N  Y9 Y# {* j& d( k  s. W1 a
  797. 5 ^: [$ ]" g# |. Y' Z+ D  ]; ?9 k
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 C8 F: T1 d0 ~9 \" j+ E9 }6 z
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # M4 B. m3 H+ P( p0 q: |4 V
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' h# v; I; R7 c% ?  p% `5 m% K7 n
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' R' N0 K* W- }; k  d# q; B$ x
  802.                 }
    : N) R# }6 b4 _
  803.                 dwStartUpSteps=5;* ?$ w6 Z0 o+ @* ~+ [4 j) H9 P
  804.               }6 u& U' f. ~! t. K  P0 f) K: k
  805.             }
    7 Q) Z3 _- g' A
  806.             else
    : m4 w* H. k0 U3 d, v+ ]
  807.             {
    - D: o' t: U1 Z4 ~3 b5 Y
  808.               unlink(".\\DownLoad\\checkversion.txt");# \0 ]: L1 R4 N, I1 B
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    5 J; W0 ]* I# t- I% H
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");7 C, l7 i( `* |3 a+ w
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");8 n% X& ^  z' E" S+ w

  812. ( b0 w/ `+ V; Z- o2 W9 {
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , e+ S1 R0 C  ], @! X3 b4 y
  814.               dwStartUpSteps=99;
    # p, k' h. e! B# {# o7 s3 S
  815.               bFinishUpdated=TRUE;  f! F3 ~0 E5 `( Z
  816.               bCanUpdate=TRUE;
    / D6 p* L) _' b/ J8 ]
  817.             }( C4 a& m- t9 t' [
  818.           }1 }) s- M" A6 i, b4 C
  819.           else- M2 O. e7 X% z, ]5 }8 L& [& r
  820.           {
    2 i# W# Z( Z2 b% M+ q# ?2 [$ A
  821.             if(!Dn.Connected())0 t1 d. P% ~" [( D5 v: n! p% O
  822.             {( }& B6 ^4 X6 B; Y' b* B0 U) J
  823.               bFirstUpdate=TRUE;
    1 ?4 V9 ?) D' B8 ?' ^! z
  824.               dwTotalFiles=1;  G) @9 Q0 B3 _% t: z) x8 }: L5 v
  825.               dwDownLoaded=0;
    - n3 W" _8 F* N& k2 c8 z
  826.               bSilentStep=FALSE;
    $ j7 u. W6 a. [! i' K- \7 d
  827.               bCompressed=TRUE;
    8 y* a/ J' i% a  W1 S* N5 z0 F* f
  828.               strExtLocal=".\\DownLoad\";2 [5 @7 G8 }3 L  ?" q
  829.               strFullName="update.txt";
    6 k; E: t4 o3 z* V3 H. ?( ?* K
  830.               dwProgramState=AP_CONNECT;
    - T2 V2 U: K7 |4 j" R: L
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" h) @& u3 Q! r0 g* _
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; \: z- N2 J2 b8 [3 x3 j! U. `: ~
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");% u7 Y1 n2 |' G* V9 N
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ y+ C; N; W, Z: A! N
  835.               unlink(".\\DownLoad\\checkversion.txt");6 z( ~8 n( t* V( z$ s; N% \
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)- ~: _0 X3 e/ e/ z+ u
  837.               {" F5 d. b9 P- l+ [
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    # d$ g8 K  v  w
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");& \" G) B: u  ?$ m
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");# I1 }3 t* b, b9 g( {
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 G* T9 V5 M& e3 D9 S& I
  842.                 9 q" \' b  g" x  P( y& N
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! I1 T( B3 f$ o, A, t
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % p! R# r+ P: f' K  H
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    % i' O7 s. [# e) i  k, @6 ^, B  `
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' B4 }6 w% p9 w' H2 o
  847.               }/ n6 G2 ]' X3 p$ L( X4 N
  848.               dwStartUpSteps=5;1 H5 w! J. I% e: @" W
  849.             }! I& m4 J' a5 _6 F1 @) P/ I; C
  850.           }
    # Y2 P/ [6 R" J2 C5 w
  851.         }3 _5 U. w2 e, I$ [7 c0 f1 e1 Q
  852.         else
    " E6 A( ]$ `4 B$ R
  853.         {+ R0 N( P* h- Z
  854.           dwStartUpSteps=3;
    % {" ~2 [: ^9 i% \6 t& X& c
  855.         }
    9 ^# I8 E9 e* b
  856.       }8 ^# H7 i; k* l* i# G  O! c
  857.       break;- `9 T8 W7 _3 ?- u$ ~4 X
  858.     case 5:" n/ T! N; ^, c5 |
  859.       {
    2 y$ a, o, D6 k0 R% L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1), A" p5 z% S0 _: O  o+ Y( n/ W
  861.         {+ L# L1 X3 D8 t
  862.           int opt_overwrite=1;
    & ?  t; |6 q& J  \) H( n
  863.           int opt_do_extract_withoutpath=0;
    + J8 j3 t% q6 w
  864.           unzFile uf=NULL;0 q: u$ [5 c/ e9 y$ T; }

  865. ' r6 s) P. {$ K
  866.           uf=unzOpen("Wsa.zip");
    1 u. f# p. N: o+ N
  867.           if(uf)$ i% R. p' W( {% s
  868.           {
    ; b# R3 V. ]1 Z# f: o6 z
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    # A) |/ F5 [5 J; ]- _
  870.             unzClose(uf);
    & ~- z  P( e& W
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");" K7 i+ S( }# J( A& B! l5 Z
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");* k' y+ ]2 z" e" Y4 F% q
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    & _$ a  f1 p5 l& q# g
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % y9 Q/ a, [  M) }% l6 [
  875.           }" w' x, I( A  H& Z
  876.           DeleteFile("Wsa.zip" );9 n! Y; Z: p0 `9 ]' _3 ^
  877.         }
    ( f/ ]; I# x$ V
  878. ! H! J! W; O" q
  879.         if(CheckLocalVersion())5 A/ l5 i# S* L  ~% `
  880.         {
      V) o: k' R6 {! `
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    4 C& x& `% p' q5 T2 N) r
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    $ t  A& u5 G7 t) |! x; {5 ?
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    / ?! s( w# @( q6 V
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - Q/ \1 r* Z& L! O$ x/ \! @
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);- S. b' l2 H& o+ P8 g
  886.           dwStartUpSteps=99;1 @# L/ g% F: J2 L
  887.         }
    5 e" v6 F; R  `8 _, X7 D: H
  888.         else9 h- {# A, @9 l
  889.         {
    , w$ K1 y" \4 y% E% i0 |( H' T: R& e
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");6 s) {& R! x" `, F# [
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ) F: _9 X3 _$ B( j5 z5 O$ ^
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    $ P& Q$ O0 b: p8 Y1 s

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-29 17:18

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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