找回密碼
 立即注册

CSUpdate.exe源代码

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

. z5 ^! G; ~& L% v' W( @' n7 u
  1. / RevApp.cpp : Defines the class behaviors for the application.
    $ r% w7 A$ T9 \! s
  2. //* [+ [  I3 U* M; U' H3 _/ X

  3. 4 U- H0 k* y2 @+ \3 u5 V6 ?; r  A
  4. #include "stdafx.h"
    5 l& ^1 I0 h6 j+ ^9 @
  5. 2 A3 W% z5 N/ l' E* }7 w  ~
  6. //#define UNICODE
      _! Z, c) E$ V, p; o
  7. //#include <gdiplus.h>
    9 }* \. j9 E+ c; B, A1 T
  8. //using namespace Gdiplus;
    5 C1 }/ C' Q9 U

  9. ' h* F4 S, I, L" r0 ]$ U
  10. #include "RevApp.h"5 M: f$ G; n5 h( Z6 C% C
  11. #include "RevAppDlg.h"
    ) I2 L/ Z2 Q* }1 K8 S
  12.   D' B# g. o" x7 m
  13. #pragma warning(disable:4786)
    % }2 ]7 r/ \9 F5 y
  14. #include <map>& H) T2 k" F* T7 n' a' q
  15. #include <list># u( y  z2 M2 k& u0 _+ T/ @2 g
  16. #include <direct.h>( f$ E% j0 R" L% a  W
  17. ; d$ O& O% X& s* o3 H( T
  18. #ifdef _DEBUG
    + \+ P8 s  k- m: M- }, q* u8 w
  19. #define new DEBUG_NEW  M+ {1 ]$ W3 u2 ~7 @
  20. #undef THIS_FILE+ w& o' _8 l$ g. {( o
  21. static char THIS_FILE[] = __FILE__;
    & J0 J: U+ z  Q
  22. #endif
    $ r" H5 s+ E9 `. _( a5 V" b+ w
  23. #include "SkinResDef.h"
    9 u: r8 Q: R2 p) t2 z
  24. #include "ChangeBG.h"- E" H8 A  v! }: j
  25. #include "AFXINET.H"
    5 X2 I+ z. s9 L+ t# X8 x

  26. 4 L3 [; V' z5 X  d$ C: r- O" o
  27. #define TRADITIONAL_CHINESE 0
    $ }: U' ^  u+ Q
  28. #define SIMPLIFY_CHINESE 1' B( {4 j8 T* C% ^6 v# l6 z2 i, G
  29. #define ENGLISH 2
    ; _$ o1 R: \" ]2 G
  30. int m_iLanguage = ENGLISH;& j" ^( k. Q4 B: Q% i% d
  31. /////////////////////////////////////////////////////////////////////////////2 C! n% e6 Q5 j0 L" |( V
  32. // CRevAppApp7 U; _  p) a2 V1 V; a7 Z1 c' k
  33. 4 {2 m. s7 X$ r0 i" P" P
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    " M( V8 [6 l: x* I- l" L2 V) i
  35.         //{{AFX_MSG_MAP(CRevAppApp)9 I( F. a" Y8 t) G" k) H5 @  s
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.3 X$ \" ~# v4 P9 ~0 ?
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    . r+ P7 c2 y6 O1 D0 {3 V& i
  38.         //}}AFX_MSG% x9 k& Z1 R; G8 I0 E+ B
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)' N) H* n( j9 k
  40. END_MESSAGE_MAP()
    - x1 V7 |) g  h0 ^
  41. ; j0 d- D' {8 e: B6 S6 T
  42. /////////////////////////////////////////////////////////////////////////////* B1 l0 t  f4 _2 k" x  H
  43. // CRevAppApp construction  H& b9 h: g4 O6 H( a

  44. 9 v, U9 A5 U1 x1 H
  45. CRevAppApp::CRevAppApp()4 [0 b( y# @* J+ Q8 M. ~' u4 u
  46. {" E% i* Y7 b  v
  47.         // TODO: add construction code here,
    ) q% \# B: Z. P5 r9 }+ z  R0 G
  48.         // Place all significant initialization in InitInstance
    * r' G: O% r* a9 k9 `4 o, r
  49.   bDisplayIsBig5=FALSE;
    * E1 C$ m9 ^+ ]" u: u9 {
  50.   bRestartUpdater=FALSE;
    3 E( j; r& K( V9 t1 ~6 {( u
  51.   bFinishUpdated=FALSE;* f0 M, o! E( o* C4 f
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;7 ^) s: x3 `$ ?* a
  53.   InitChangeDataBig52GBKS();
    0 X/ c4 M8 ~1 D( c/ U- y( {7 Y1 u
  54.   InitChangeDataGBKS2Big5();. t$ y2 X9 q1 A* R. u
  55.         //& s; M" ?/ I4 ?1 Z* J$ Y% l
  56.         bClickRunExe = FALSE;  X2 j3 L5 Y, l% [: F9 a
  57.         //
    5 J# @2 k$ Z/ U8 E0 T( N6 `' r5 \
  58. }8 S5 Q5 T( ^3 J, j! U( k- C% r
  59. # @7 H4 \9 J" t! j3 G# J& f
  60. CRevAppApp::~CRevAppApp()+ E& u! a2 X" ^! c/ J# P! _
  61. {
    ' k, n: X  `- G, k0 @/ j4 h' P( f
  62.         // TODO: add construction code here,& x  J/ d- L6 [* f: b
  63.         // Place all significant initialization in InitInstance* o' |2 k: [1 m
  64.   EndChangeData();
    ' |9 r  ]. T* y6 P1 R
  65. }1 w2 A% x; h5 w7 H- `+ z

  66. * L; R6 A% w$ q; f. n1 B3 e4 D
  67. /////////////////////////////////////////////////////////////////////////////
    ; V. e2 Q" C$ p  G
  68. // The one and only CRevAppApp object" t& R6 Y! M, U

  69. 8 W7 L2 |* n; E4 X3 l' r/ f; N
  70. CRevAppApp theApp;3 k& N5 x) |  n: M" Q9 e
  71. 5 ^+ z2 ^: j/ }; ]: H. Z9 i# Z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    9 S2 P. {# O' R: x5 L6 |: {
  73. {8 h% N6 k0 R+ w6 q, E. P
  74.   int iEOF=0;" m1 X9 ?* x; C& T1 B4 e5 `. r# Q$ m
  75.   char szTempName[MAX_PATH];
    6 H5 F9 M  f4 B2 k5 a" Q  T
  76.   *szFileName=0;9 C6 k* _; c1 ]8 H6 t% t! r% f0 `
  77.   iEOF=fscanf(fp,"%s",szTempName);
    6 B, a- O2 ~" ]( n
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    - K, P# R9 D) {( d( F
  79.   {. M1 A) J$ P! b, q# k/ u) k( y6 y2 @
  80.     strcpy(szFileName,&szTempName[1]);
    0 V/ U' e: U1 z4 F* |+ t, w
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    - T: W8 V; }" C- n# I- B
  82.     {
    $ ^  P) {( X! L# M% L/ W& w5 W' I# e
  83.       iEOF=fscanf(fp,"%s",szTempName);
    1 x9 a3 G- U' e1 O* J& B3 q
  84.       strcat(szFileName," ");( ?  O- ^. Y4 H) T1 ^0 O
  85.       strcat(szFileName,szTempName);9 G6 ^. w+ T& b, ~  W9 V" w
  86.     }* K9 E2 Y  w4 m; f( W0 p
  87.     if(strlen(szFileName)>=1)
    . P8 C6 s0 W% j8 ]" l
  88.     {! q2 R5 r/ ]8 n9 f+ S3 S
  89.       szFileName[strlen(szFileName)-1]=0;
    & l; [/ e8 S2 |& Z
  90.     }
    / Q- Y; z2 y6 k# p
  91.   }
    ) o" S8 O& c+ p
  92.   return szFileName;7 v" |) L( r6 _# L/ v7 Z! e8 U! g
  93. }
      v! c" K$ B" w2 U% v$ {" b* B
  94. ! e" F) J. c( t4 K
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile): y$ X8 g) c, b+ x# I' E
  96. {
    + q) }3 s% o( ~; l  v4 n. j+ x
  97.   FILE *fp;, |7 }" p1 b/ ]
  98.   char *key=NULL;
    " W5 U, i1 ~6 e6 @
  99.   char version[MAX_PATH];
    % v3 U) N1 V4 h- x
  100.   LPUPDATEFILE file,olds;
    ' ]- D9 \7 X* M$ `! n4 k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;& Z* k/ v0 L- m
  102. ; A8 }; I& a0 N4 H7 f# f; Q0 }5 ]
  103.   UpdateList.clear();. m1 g. t* @2 t2 i- B
  104.   UpdateFile.clear();' {4 x' A/ F2 X2 e2 K
  105.   if(GetFileAttributes(filename)==-1) return false;# C+ I& r- _! \) P
  106.   if(!(fp=fopen(filename,"r"))) return false;9 L7 y$ x- a, W9 R
  107.   fscanf(fp,"%s",version);
    2 q. @: E: a: Z* w
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . |( [8 g* t0 @' k  I( ~
  109.   while(fscanf(fp,"%s",version)!=EOF)% p; q* E; F' l0 H- M1 t) \2 ]
  110.   {
    ' E- t% H5 @' a* c, C* x  H& H/ g) h
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 u  s8 ]# ^0 o0 Q  U
  112.     fscanf(fp,"%s",file->path);
    1 n6 v# q9 X% f3 a- _
  113.     ReadFileNames(fp,file->file);
    + M! j8 Z/ q. f8 I3 ]/ J0 v
  114.     strcpy(file->full,".");
    . E" [, G& G1 b8 [& c' t. z
  115.     strcat(file->full,file->path);$ H5 b- f6 f0 K* y' y
  116.     strcat(file->full,file->file);! z8 L# J7 t* r0 q" ?2 R7 t
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- c" Z' V( x5 k$ P$ o) t
  118.     {
    6 h$ t9 a0 }" |  ~4 B( a
  119.       file->vers=(float)atof(version);
    3 r3 x2 P4 p: I! {) M1 t
  120.       UpdateList.push_back(file->full);& y, }% a$ H; d0 q
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; ]1 c- r4 @1 E6 I2 M- R% l  u; l
  122.     }
    7 i# b8 v' Z% i2 D! r" g
  123.     else7 B# o; i& r! T( j
  124.     {  y& V3 T4 }4 U4 m. L2 }
  125.       olds=(*p).second;7 R' O6 o& l8 J1 g. i
  126.       if(olds->vers<(float)atof(version)). L3 `5 j. z& K
  127.       {
    " a% r: u; X" x
  128.         olds->vers=(float)atof(version);  F' ?- m1 Z, j. r6 G5 q
  129.       }3 }  _) n- i6 V, N: E4 I
  130.       free(file);6 U  x0 w3 H$ V' f4 _2 [$ ^+ q4 Q% N
  131.     }
    2 @. x% ^7 W8 p0 Y4 l. @
  132.   }7 X  t5 e+ U- C) p. v( [$ l
  133.   fclose(fp);
    3 E% {( k# A; D+ C! F
  134.   return true;' ~! _9 |# ]/ `
  135. }
    & Z' ]' x, q/ Z: H; X) {2 b

  136. + e! h6 x# G" M+ ]6 {! Y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! m4 p! k+ w7 o; Y; q/ `4 f4 \  w3 g
  138. {8 e8 B! r2 B, T, M0 R7 R$ s
  139.   TCHAR  szFull[MAX_PATH];& H9 g9 [2 V) H" j  ]& }& u
  140.   TCHAR *token,*inter;$ m7 ~; r5 i) I' _  f
  141.   *szPath=0;' o; B5 S& @5 d6 d
  142.   strcpy(szFull,szFullPath);! L9 |- G* P, n8 h( _6 N: ?1 X# t
  143.   token=strtok(szFull,"\\/");/ R( M* M6 E0 U' y( I5 {, q
  144.   inter=token;
    ' ?$ K: t. N# O4 h! V
  145.   while(token=strtok(NULL,"\\/")), B7 F" I/ ?. J& s3 C) P4 c
  146.   {7 Q. M- K1 N& L+ |2 Q/ `
  147.     strcat(szPath,inter);; V6 S; w+ [4 C. v4 x
  148.     strcat(szPath,"\");: W3 m6 G. q# U- W, ?5 t
  149.     inter=token;" r1 X: O6 ~+ ~' Y
  150.   }
    9 u; c# s2 W8 j, X) ?
  151.   return strlen(szPath);
    ! Z4 U% C) i5 K6 O/ `
  152. }" |1 D6 x3 c) f9 V! O, ]. d3 @: G

  153.   r5 q$ d1 c% P# E/ y9 z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ; ^: T1 a6 ]% O4 s7 R3 R
  155. {. E2 o: C2 t/ l2 K' }
  156.   DWORD attrib=GetFileAttributes(Target);! _+ q( k' g; g
  157.   if(attrib!=-1)9 D9 C- Q) \4 r3 I5 B  ^
  158.   {/ N* `! f- N6 Z  z* Y9 c8 W
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))9 p* \$ M$ I/ Q1 N- D3 S. J& }
  160.     {( ~7 P. ]8 E2 q1 {& }8 c9 o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);2 [' |1 {+ ]  Q' X' \- ]
  162.       SetFileAttributes(Target,attrib);0 a3 q* ?0 g& C" h* k
  163.     }
    9 v# w3 f3 N/ b$ B
  164.   }
    8 g9 _/ U( @: |+ v% l
  165.   CopyFile(Source,Target,Erase);
    ( o( E1 [- [# V: `
  166. }$ q7 k( z$ Y& E5 p# |( z

  167. & L6 u8 J* Y7 u" M3 J7 h/ ]0 G6 P+ ]
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)/ _% S& c+ N& c% u# c. v
  169. {
    , K7 `2 s$ K  \8 |5 k9 I
  170.      FILE *fp;
    ' b0 `4 \8 C5 J& {6 D
  171.      char  szBuffer[8192];. _3 r8 j4 @5 l8 c
  172.   va_list  argptr;4 r" B7 F3 E% R$ z" o  T  M
  173. 7 Z0 a  K  g1 \$ B) f) F/ b
  174.         va_start(argptr,message);
    " G& q; e% p! U, R& t
  175.         vsprintf(szBuffer,message,argptr);
    + {9 Q0 H6 A! O! {  v3 t
  176.         va_end(argptr);
    * a; I4 n3 F. `
  177.   fp=fopen(FileName,"a");4 U- |3 \; k1 i/ g) b# c, p. Z
  178.   if(fp)
    1 j  `7 X+ Y- q! v+ X& D( E: N! ^
  179.   {2 s+ \1 {0 g4 u/ e% g$ H# G
  180.     fprintf(fp,szBuffer);
      [" }6 J1 ?; B# o$ |
  181.     fclose(fp);# Y# Z0 Z0 B- Z6 j: p
  182.           _flushall();
    7 t9 o- K/ b% c' X+ {- j7 j
  183.   }0 N" l: {( m) }! U6 V5 ]5 O
  184. }) |0 T3 v  n; j# l/ w
  185. ) M. b' L7 n& U$ W, o/ D8 x4 f
  186. BOOL CRevAppApp::Fclearf(char *FileName)9 U' e% G) p' b$ v
  187. {
    ' f; C! |# w! T* P$ O% T$ l/ }) p
  188.      FILE *fp;! L% e; m% G' |8 ]$ Q. G2 \
  189.     DWORD  attrib;
    " H) X* Y) E/ l- Y
  190.   attrib=GetFileAttributes(FileName);- v: a5 K# t$ r3 B' V
  191.   if(attrib!=-1)6 K4 e8 @  ]  p( o; z3 M
  192.   {# I' z" o3 E2 C  u+ e6 S9 J* O4 ?8 m9 p6 `
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);8 K! u  r6 ~9 o8 H0 ^' X% j, B
  194.     if(!SetFileAttributes(FileName,attrib))
    . i: w2 W: r; l; S8 e
  195.     {; `; s: ~% G4 i( {7 f
  196.       return FALSE;
    * Y' _4 l) Y5 O0 J
  197.     }
    ( R% A2 I/ S( ~, b
  198.   }
    . l$ \* [6 a+ ?9 E6 D
  199.   fp=fopen(FileName,"wb");  ^# U7 K% U6 d5 T3 q
  200.   if(fp)
    ! H0 n* \" A5 ]0 X' w
  201.   {
    2 o' O/ F* J' D
  202.     fclose(fp);  X$ B0 m8 m8 f1 z) s
  203.   }/ [( R) M' _8 q- \: t" I6 m- p
  204.   return TRUE;
    ; J5 K/ ]% v  B
  205. }4 \3 D* u8 Q+ ~2 j5 N8 G( @
  206. 7 ^) A% A. h/ K$ p
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      A3 o3 n1 Z! t
  208. {
    . ?  e( ]$ Q2 J' ^' ^# G
  209.   char filename[MAX_PATH];9 p3 H( E( i" U1 e
  210.   LPUPDATEFILE file,olds;
    * y4 I  V4 y, @8 Z8 I( A) q
  211.   std::map<int,CString>::iterator i;
    ' \5 v" t! |* P
  212.   std::map<CString,LPUPDATEFILE>::iterator p;8 h% c, ^8 x* X3 u: X! u! z
  213.   std::list<CString>::iterator l;. D% S2 |, K' g$ c. N
  214. + c# {! D. ]% _/ v( r# ?
  215.   if(bFirstUpdate)
    % F6 h4 ^5 h/ {
  216.   {1 i. b5 i% ?5 i
  217.     dwCurrFile=0;
    ( q6 I& _0 _- Z
  218.     bFirstUpdate=FALSE;2 S& U7 @9 I, y- y. Z8 e
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 d' ^2 K& X) d5 s3 Q/ D$ n
  220.     {$ c+ I4 ^- B  S& v
  221.       dwTotalFiles=UpdateLocal.size();& X7 b5 T# l2 F: p8 e
  222.       dwDownLoaded=0;
    ; [/ W7 J3 a# y8 F
  223.       bSilentStep=FALSE;
    5 J- t9 R& T* j
  224.       bCompressed=TRUE;
    # O! P2 V2 w5 W, B* q7 h% K* Z( L
  225.       strExtLocal.Empty();& q0 K1 U' p9 m8 l  ]
  226.       strFullName=(*i).second;% o& o* v( c/ j- f7 j: ?; e0 V) F: S
  227.       dwProgramState=AP_CONNECT;! I( L/ Q: Y7 F
  228.       return TRUE;
    8 B- C  V# V( U2 I  |
  229.     }
      ?2 I( P( J: o3 T! ^$ |) d
  230.   }
    : y/ ~/ s- H3 |" E% \( P
  231.   else if(bRestartUpdater==FALSE)# G1 w& K6 p4 ]% s9 Z* l) P- U
  232.   {2 C4 S+ T4 \0 m' Y6 j: Y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ; j, u" M) n: c" x
  234.     {! O( ~" o+ n7 ~/ l! E
  235.       file=(*p).second;6 U8 A' M. X# L% m% w
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    & m; ~/ G; l. }) |
  237.       {
    - @+ l+ g! x4 I. e$ V
  238.         olds=(*p).second;
    0 z- D4 j8 X# m/ U% C, i8 d3 s0 z% i
  239.         olds->vers=file->vers;: N; Y5 A8 L. m0 B. V
  240.       }
    + x0 Y. z3 ^, G; Y+ N3 m% h9 }2 x' t
  241.       else
    3 D1 h3 U" C0 q
  242.       {$ V6 ]# E! D. P
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  {2 p. ]: ]% C
  244.         memcpy(olds,file,sizeof(UPDATEFILE));( Y4 T! U7 N1 i6 H/ M0 a6 w
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    0 e8 n/ T1 ?) c$ [2 [5 w$ n+ p
  246.       }% C0 h8 z) V# N
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    8 D& e5 n9 o$ d4 b
  248.       sprintf(filename,"(%s)",file->file);0 g1 T/ }% v0 m3 `& x
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) F% ?( ^& @2 m; u5 m6 m
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    . ?% ~/ D* y) ~* ?! Z+ Y
  251.     }
    $ |- s7 d% S0 I: _$ B' X3 D/ k
  252.     dwCurrFile++;
    ! E, q  F5 `6 K- C
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ y5 o- k) D9 ?* Q
  254.     {! @, S4 x( M  m9 L  R) s
  255.       bSilentStep=FALSE;
    3 w, I) U; |/ P
  256.       bCompressed=TRUE;
    : r6 q5 o9 s  [& A  a+ }8 Y
  257.       strExtLocal.Empty();
    1 B* W* s, B9 W- E: c1 {1 l# ]! T
  258.       strFullName=(*i).second;5 ?% k( u- U$ C& T  R) \8 n8 H6 l
  259.       dwProgramState=AP_CONNECT;
    8 B  o( r3 H* I$ J" E; L* k% w
  260.       return TRUE;
    3 d7 H; b! F: }5 n! {, W
  261.     }
    ' h) Z+ i; ]0 g1 ~# z6 Q
  262.     if(!bRestartUpdater)' B* M) }! x/ w/ _4 v
  263.     {5 B1 k8 Q: V& t) Y9 z
  264.       int iCurrSize,iFileSize;) L% F: z7 e, i- J9 E. K
  265.       iCurrSize=0;
    7 i. |  Y! h" o/ C
  266.       iFileSize=UpdateList2.size();: L* X6 G' M$ d+ f; x& ~$ R
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");: ]9 d! Q$ G- r8 g+ z
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");& U0 ~: R2 g) q0 \4 E
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ( }) B7 ?. w$ ~( H9 C  z$ c, W
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 ^- }7 }9 y" @
  271.       Fclearf(".\\update.dat");1 v; }0 \4 e2 Z
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * x* t- X( f8 D9 X, @) w
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # O7 L1 m1 p( T, E0 ?& M. g, |  o. |
  274.       {
    * B+ C" R  X5 [: u7 ?# _
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    % W: x# Z2 k4 s; g0 `
  276.         {  N& \2 B4 f( ~4 v7 m/ E% s
  277.           file=(*p).second;$ A. C9 e  ]1 y# |
  278.           sprintf(filename,"(%s)",file->file);
    " U0 S+ v1 Z( I5 D" w* N
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / ~/ [) r/ q( J* r
  280.           iCurrSize++;# u' d' t1 b8 ]" P, f' w
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
      Y# v0 y8 ]( H% Q- V' ]3 V
  282.         }" D$ ~; L$ T5 q- _
  283.       }
    % d" k6 K& A' u3 Q
  284.       unlink(".\\update.txt");/ V! E7 N& a, E2 d0 {' V3 K# f6 s! X. }
  285.       unlink(".\\update.tmp");0 h7 ]. j! J9 J/ G; l
  286.       Fclearf(".\\checkversion.dat");2 P, J; \: z) ~7 a/ l. b  N
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    7 @! B$ T/ }- e* m4 m8 N+ C
  288.       if(UpdateLocal.size())' l& z8 @4 \9 O0 ^$ t" S
  289.       {; |7 P) f  J$ j/ L) s
  290.         UpdateLocal.clear();7 n2 B1 G2 j4 I4 ^! `9 I
  291.       }$ M; O! H0 p, ^' C: h0 v0 t
  292.       if(UpdateFile3.size())% }& o9 Y8 d0 q' r& }
  293.       {
    ' M  T3 r6 V/ u+ {" [1 ?& f3 h
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- D) i5 `; |9 n0 M- o8 i6 h
  295.         {! p0 ?! T  W, E8 k' d
  296.           file=(*p).second;
    " O/ M! _; G7 |& C) l  }* u0 X
  297.           free(file);
    0 }7 l2 V+ ?% N9 h1 X/ l8 h
  298.         }
    + E' r) c& h) |- t7 p% V
  299.         UpdateFile3.clear();& M5 ^8 W/ S' t3 Z% h9 F! u+ T# M
  300.         UpdateList3.clear();
      R$ A2 z" x5 A) b$ l* b, V
  301.       }6 I8 d& n: r5 i" M8 E- ^0 h
  302.       if(UpdateFile2.size())
    0 g% w. U" @* `! ~2 v
  303.       {
    ! E. z' U3 ]6 F- V, J1 r# O9 P- V! {4 f
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 z8 D, C9 l, d& ^. D
  305.         {: y5 o5 [' K! f' {
  306.           file=(*p).second;
    & F5 j6 k  ^( {1 e5 C& t& |
  307.           free(file);+ Z& w1 n5 P8 g
  308.         }8 h% H# Q% p) X3 o
  309.         UpdateFile2.clear();* A+ y% @) g$ w  ~
  310.         UpdateList2.clear();
    7 n6 X% ?' T2 ~& ^. [* f: Y" u
  311.       }8 h0 j& n# C) [, E; m
  312.       if(UpdateFile1.size())2 C! X  X+ y0 X; y4 m. F) L
  313.       {
    : S( H4 l8 E) M: Q% Q3 ^# _: |
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! |, Q; L: g) y/ T  h8 a
  315.         {* X3 L9 n- O/ `- B
  316.           file=(*p).second;
    # r# `; A" T  R9 @4 b) H0 |" ]
  317.           free(file);+ d* z5 X$ i! }2 w
  318.         }4 W6 L7 p% L" U4 @
  319.         UpdateFile1.clear();
    / \' P$ |# l. X1 @( [& [0 P0 W
  320.         UpdateList1.clear();
    9 ?2 i) T5 i$ |9 ?1 Q9 {6 O2 F+ u( `
  321.       }
    + Q* u/ A( b( K0 p; J
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));5 o3 _9 N8 W4 c5 }
  323.     }, g7 W; S  p2 R' Q# ~
  324.   }
    9 B9 R2 M! h4 S0 J3 X9 o
  325.   return FALSE;0 I! {5 S$ P& Q- J1 W* Z0 Q
  326. }4 ?0 \0 t! E4 N0 h* v

  327. 9 D+ O5 i8 K) h" d' S1 k- W# B
  328. void CRevAppApp::ClearAll(void)
    / M: H" [9 q( I: B4 _- |# ?
  329. {" i; e+ ~9 j" v% R
  330.   LPUPDATEFILE file;
    3 ], ~8 d0 P$ X" Z" M& q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;8 o3 X/ _3 @2 j* [$ @
  332. 8 }# g: w0 o/ \7 c
  333.   if(UpdateLocal.size())+ X" F  q" N; ~/ V+ M
  334.   {. a0 M4 p# ^9 Q/ q
  335.     UpdateLocal.clear();
    . X5 ^. W/ X2 [) _7 p
  336.   }
    # t, U1 s- }3 K/ W! ^
  337.   if(UpdateFile3.size())
    ! h4 ?2 o( P2 {! ^, C  E3 _3 b) Q
  338.   {
    ; _, E8 U' m! {. u
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! W4 M9 ?" P# u* o/ T2 o$ A
  340.     {' G* B7 w5 v7 y( G( ^5 z5 m$ f' M+ t
  341.       file=(*p).second;4 ~) d7 B7 t; Q& o  ^
  342.       free(file);/ H+ E/ j) g% L" L+ M2 J7 z
  343.     }
    1 b: V* B/ s( D# F& x
  344.     UpdateFile3.clear();
    ' g9 P2 Z2 c/ T- o3 `. K
  345.     UpdateList3.clear();% M. M; g1 x# l0 G2 A+ A- a7 N8 y
  346.   }
    2 o9 G9 D; R" t( @
  347.   if(UpdateFile2.size())
    0 u% v8 R7 u  O$ q( I
  348.   {
    9 q- m' R. Z2 X! H6 H# T3 t
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      Y, P5 f- F) k& m2 |6 J# y
  350.     {
    6 G# I6 X2 U" Z& Z; j, K
  351.       file=(*p).second;
    " ~! `8 e4 a2 {1 ~2 I  [
  352.       free(file);
    $ i' y- H( |0 A- Z: t) p. C5 ^: x
  353.     }
    ( q; a+ a; t4 w! s, S7 q
  354.     UpdateFile2.clear();0 v, f, |0 B1 d7 w
  355.     UpdateList2.clear();
    , X, p9 l0 l1 G/ {- r
  356.   }
    8 K6 s/ n' N1 k) ~! R4 P5 R
  357.   if(UpdateFile1.size())6 @/ F; E- V; @- F- i
  358.   {4 v2 \. F/ y" D
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    9 @& R1 i  @! C# S# L
  360.     {
    $ b5 V6 W0 S' H; }9 V3 [# @; m, O
  361.       file=(*p).second;
    . B9 k  c" H$ u8 y
  362.       free(file);
      ?) u- t, [0 @4 r4 H, p
  363.     }& b- o6 L: ]- j# D
  364.     UpdateFile1.clear();+ b& j! s( p2 e
  365.     UpdateList1.clear();
    8 E$ t, I& J$ n8 n- a
  366.   }+ b+ d* z1 b% }2 _# M: p" S
  367. }  ; Q$ f+ ]) I) Y" `' h
  368.   ! M7 [1 d% d* _
  369. BOOL CRevAppApp::CheckLocalVersion(void). S7 Z3 H) c0 c: _5 A% D6 L" f
  370. {
    1 J. u5 k; {* x; B1 d0 `" T! b3 F. u& G- i
  371.   int c;
    5 a3 h, P9 U! z1 K4 ~
  372.   LPUPDATEFILE file1,file2;
    - N6 `9 O3 k+ w4 C, _5 K) b
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;+ O2 c. T% u; Z0 S2 a1 k
  374.   std::list<CString>::iterator l;
    + S& v0 y: d  M( f
  375. 0 u+ b' v$ f' o# G
  376.   UpdateLocal.clear();4 e" f- B( d  m+ Z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);- i# G- y/ o+ Q0 s* F: Q5 q2 w
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    8 L# D! A0 |' h6 ?6 o
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);0 V4 [" i( E" f& o9 d
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);& `  o6 S! q% B2 f$ M' ^  q9 I. G
  381.   if(UpdateFile3.size())* f; s, o7 t4 Q- u5 \% R/ F, g
  382.   {: ^; A6 E0 O( ~4 T
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)2 T$ J; j! c7 D1 g2 L$ S6 r; w
  384.     {
    * A5 i: Y- F' Y, _  w
  385.       file2=(LPUPDATEFILE)(*i).second;- i8 I* |9 V) j  s/ k1 I
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 P: W7 B" ~4 B
  387.       {( y. D3 v' [0 h1 N" \8 ~
  388.         file1=(LPUPDATEFILE)(*p).second;6 ^3 \/ U0 t' l+ Q1 I
  389.         file1->vers=file2->vers;
    & J7 g! V6 f" j
  390.       }
    0 f5 K# U! r" Z3 l
  391.       else
    7 l! W, ?: [; u8 l( ~
  392.       {
    ( P- H: w* o- }( N
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ A% P5 K! Z1 y& e
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    6 K& |. K5 @; L1 ~) Z
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));8 b0 ]% E* @8 f# P. J
  396.       }+ j/ U  G. G1 t+ `
  397.     }& g, W# v# ~/ a3 X4 E
  398.   }$ L7 }" [# h3 g! r' D
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)  T6 H& U; ?" y6 C' D
  400.   {
    , b. {( ]8 |% N5 Q8 L" ?
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())$ f- l' e( S6 u
  402.     {4 H3 [* F7 @" I9 g# t  h
  403.       file2=(LPUPDATEFILE)(*i).second;2 ]4 V% Z/ w3 s! |! O! S  G" V
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ Y+ |  h1 Q" |1 Q' G. _' R6 C! F2 x
  405.       {
    / ~1 x1 B1 e7 d* ]. o  A! U4 e1 }0 x
  406.         file1=(LPUPDATEFILE)(*p).second;, m* z& H# Q9 {5 [; P8 @
  407.         if(file1->vers!=file2->vers)
    2 ^9 t  E2 W9 m1 H' N! b- ]
  408.         {
    0 E% }* G0 K8 N- f7 ?7 u6 U
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 L3 K- o# q: x  I
  410.           c++;- L/ r) q' j  u; T- v
  411.         }' `/ i) e3 v0 f! u# r9 Y* @$ M
  412.       }" {- j/ f+ y7 d+ Z; |
  413.       else7 n2 N7 G3 n0 k9 C4 p& z& S1 k
  414.       {; Q" {2 t; e0 G) x: r: o$ d' b
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 k6 M+ O0 B4 B6 ^+ t, B2 I: {
  416.         c++;
    8 x2 M  M& o$ I" r
  417.       }: U6 c% J, O3 ~5 l9 m( e( _5 C
  418.     }
    5 O3 U) J7 N' w" L
  419.   }- @& ?1 F/ M% Q2 w) l
  420.   unlink(".\\DownLoad\\update.txt");( V! n* n+ x6 A; C
  421.   if(UpdateLocal.size()) return TRUE;8 T% E" @' w) N' I
  422.   else                   return FALSE;
    , h2 ]; R' l1 {% {3 D
  423. }" z9 E* K# m9 K# M) u( c
  424. & g  I+ n# B1 N
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"! v3 N9 h3 X' x8 t: j% K
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    2 f; V/ Y$ `; N$ t/ C% B/ \
  427. 6 Z: B& e/ _6 J$ n$ V6 E# ]! f7 ]

  428. 7 |; L# v4 a# K5 W( l

  429. 4 `% g) N2 C& Z4 A5 n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)& i+ s5 a5 H% B+ O, \7 G/ d
  431. {! x- T9 J7 c! j+ G$ j$ D/ |
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;, i) N7 C# X1 C% x
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / e6 k0 [# ~+ u4 ^3 s. M
  434.   {! g6 l. n  r# q3 R2 I% x7 b
  435.     char szLanguage[50];
    ; Y" _; @" y5 W( b
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 U7 X  T6 P* [5 ?$ H
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ J' \2 d6 |" O9 Z, W) V
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ }/ i2 ~$ j) Q" b2 Z( l
  439.     else                                   m_iLanguage=ENGLISH;
    / N3 G) R) i1 c! u
  440.     char szRegister[100];
    / @$ y2 K- x; l8 |( z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  `9 p' F- O: O% x, I
  442.     strRegsName=szRegister;1 u1 L  l- q9 E3 i' A
  443.     char szPatchURL[100];
    2 ~. ]0 d+ ^' s% d9 r$ X
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ M5 L- Y% t8 O4 L9 R  ?& W
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ q- J% j3 e( m% ~) T3 f5 b
  446.   }
    8 T/ H& o: U* `& Q' T
  447.   else
    ) T/ D8 o# b( k. Q. U
  448.   {6 e( B3 ?( E; k1 p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 Y, K6 m% t) t/ s* o1 H
  450.     strRegsName=DEFAULT_REG_URL;1 c( W% i4 g  O3 t3 R  O, |
  451.   }  `# v- m1 o: u& ]
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    , c1 Q8 u, V5 k( d
  453.   {
    0 ~6 ~2 ]* v' \$ D& ~# w
  454.     char szIP[50];
    ( R  [" u9 d5 i3 g/ R# \
  455.     char szDIR[300];% d" A- k" a2 l( ], i  N4 ]
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    8 |2 m1 _* r8 Q8 u. }2 C
  457.     {
    ; c3 U3 q8 r* X- E0 y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");0 @2 _2 T& [1 q4 W
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");( \2 m0 y, J: A
  460.       strHostName=szIP;
    + H3 O8 R3 F/ P
  461.       strHostPath.Format("/%s",szDIR);
    , m5 ?1 y/ a* o; }' S! |4 T- j
  462.     }. Q6 x+ i  P8 B
  463.     else( X. Y' B- B5 k' e0 T
  464.     {9 P! ~* m0 p- z9 _8 @  T
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 u8 K# M1 k! i* `1 b9 D6 x$ j
  466.       {' X) `& q* y! [9 V  e/ [
  467.         char szLanguage[50];4 w, N& x& t) h( b; _
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 U: K" u7 w! q7 u
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    6 p) w6 u  R6 c# e: V4 ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;7 y  G5 h* s& s
  471.         else                                   m_iLanguage=ENGLISH;: {' {) ^9 o1 H$ R* m7 O: p
  472.         char szRegister[100];
    % h. C- o" ]4 n: Z/ F
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . a9 b+ x, ~, P) P! k0 |* r
  474.         strRegsName=szRegister;/ e5 A) S. N" A  e. X
  475.         char szPatchURL[100];  o  m( V3 a& k5 ^6 B1 m
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 ?  s7 ?. ~( _  x* ~: ?8 q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( a& e& L: p7 s7 L3 n& r1 J
  478.       }
    - [& b6 `8 U4 d" x! g
  479.       else
    3 |: r1 x" T4 x
  480.       {
    ( h) B. O3 I" {$ r! r2 x
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 Y2 x; V9 b4 e( ~1 i: i
  482.         strRegsName=DEFAULT_REG_URL;
    + F/ @8 m7 x# Z8 E. ?
  483.       }
    4 F  b: \2 \! J" ^5 ]2 y8 P
  484.     }# x- L4 H3 u9 A; @$ G8 c( f! G+ n
  485.   }/ u, \7 p4 c& F2 q# T& L  ~
  486.   return true;
    ! V, J4 A  y  H3 \$ _# m
  487. }
    , {2 K1 \2 y: Z

  488. ( ~2 l7 A% i' o) D
  489. #include ".\ZLib\unzip.h"& }8 P  e6 d, n0 E1 I6 J
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    . _: t- h5 h: R: ~# s( R9 `( d' V$ E+ d
  491. /////////////////////////////////////////////////////////////////////////////0 s, R* ]7 _' K: O( ]/ }& a
  492. // CRevAppApp initialization& C9 N& d0 l6 U: b. s& u4 g# j

  493. # N& g( `; h0 Z( j. L; Z& J0 H
  494. BOOL CRevAppApp::InitInstance(). [3 J! I# e* K6 h8 g) Q4 @
  495. {; r7 U" L1 {& H7 _! q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    & X0 q  c7 H% b+ p
  497. 2 _: k+ M& m4 ^/ g6 x; V) U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    7 Y# m( o4 }' `
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))* h/ @) k% a6 d+ h, `0 Q% I" K
  500.   {& D4 b  @" W2 l' }- ]
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");  ~* A/ v7 h4 R
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 c; O8 u" C- J
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))% P( }! |- C) O* k! ?
  504.     {
    ! H7 p; T, U# ?% ^0 \2 _2 x
  505.       strcpy(szPath,szPathTarget);
    5 r/ {, M7 K8 Z* G0 J3 a% J: n. ~
  506.       SetCurrentDirectory(szPath);
    % R# G+ {% P: G6 v* R# z/ i
  507.     }
    # i# C/ z! ?- m  E2 X  d
  508.   }
    ! n5 A+ t2 p. L: S, c
  509. #ifdef _DEBUG3 A9 J) Y  Z, I6 V) k% `5 x
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! |% l5 M4 q! W, n' C4 Z3 C
  511. #else
    7 f/ v' P. b. S3 I- p) z3 V
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)): G. x7 R$ ?# F
  513. #endif
    5 z$ V& s% M  r& S
  514.   {9 W8 ]. v$ n' R! R$ _( ?
  515.     char tempFileName[MAX_PATH];
    5 e% D( j6 }* j- o. q3 L
  516.     strcpy(tempFileName,szPathSource);& ]2 i6 U- G3 r$ @
  517.     tempFileName[strlen(szPathSource)-12]=0;) W' ~! h4 x  i7 L+ n
  518.     strcat(tempFileName,"\\$CSUpdate.exe");1 i% j7 a8 |. K9 }6 k8 A
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);  N7 ]/ U  n; y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ K, L1 z: h5 z2 @* S4 A
  521.     return TRUE;
    2 m* C: D: g8 c  i
  522.   }
    $ \  P5 W2 W/ M$ y! A
  523.   // Nuke 0118: Delete run.exe$ z: b. t0 V4 Q7 R0 `. x/ k
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );) E- {" K% k- L0 |# X' X6 `
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    6 D0 f/ i0 C' e1 Q+ K, e
  526.   if(!ReadCfgFile("Config.ini"))
    5 L2 U! c+ w3 A8 p
  527.   {% }2 ~0 T& c, t% c! h. p0 A7 s2 F" D! F
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    3 W/ M% U8 m9 [. P* F3 S
  529.     return TRUE;
    + k( ]2 r  T2 D. A
  530.   }4 r4 a' f7 |: _1 w; o
  531.   HANDLE mutex;
    + r1 c5 c( |. w" T& c
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")), z2 v4 N. x# B& m; h4 ]
  533.   {
    7 r3 k3 R5 E6 d
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)& x* v8 ~2 x3 B8 P
  535.     {; Q/ @2 r% u2 M/ b+ m% c( t2 e! v
  536.       CloseHandle(mutex);- Z; @* Y6 |. t. D
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);# N+ ?0 f3 x2 \" [- }7 J
  538.       return TRUE;. U/ \8 Q* P9 C/ z5 D! R3 O
  539.     }2 f# T4 v( V' R  I* x2 l2 a8 B
  540.   }  
    # L* B) R+ Z1 a
  541.   CloseHandle(mutex);( u: B$ R( B, v# P4 ~* L

  542. 7 |; p% g( [9 I: F9 R2 S5 M
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);% z  b2 J7 g( b5 l

  544. $ D/ q) F  y6 O& I6 ]1 Q
  545.         AfxEnableControlContainer();
    6 P6 M/ o# _8 T8 ?  h

  546. 3 `8 B$ d  T% K. ^4 g. l/ e
  547.   bCanUpdate=FALSE;
    $ @8 l# A2 W  P- Q( C' [9 J' A
  548.   dwStartUpSteps=1;
    ( Y- i% V% p! \7 Q
  549.   dwProgramState=AP_NOTHING;" t+ Q- j+ ?1 c) ?* \! b$ m
  550. % Q9 v) n+ b: C
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    " U, T0 Y' L. a

  552. + m  J  Z7 H9 T, Z
  553.         // Standard initialization
    ) d! w) Z, m, W" Z, Y+ f
  554.         // If you are not using these features and wish to reduce the size- D- [5 R  |# I* g% ?
  555.         //  of your final executable, you should remove from the following# M5 g# W/ f: ]1 B; U4 |
  556.         //  the specific initialization routines you do not need.
    3 c; M' W! Z% }+ G& U/ U; d) j
  557. 8 q" H0 c# u' @1 m' C6 \6 r
  558. #ifdef _AFXDLL5 |8 \- K  ], q( W
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL: g# h9 N: y) [2 o0 y
  560. #else
    - `4 Y, }$ Q' R9 O
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically" W9 m7 r& Q- T6 G  z  a  `
  562. #endif
      ^- A% z0 |5 p" \% S: e$ }' b

  563. $ j! ?8 t; ^3 |7 P+ t
  564.   dlg=new CRevAppDlg;
    ! s8 s' T6 _. q% p( y9 b  j
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    3 E* C, v/ k0 Q$ n$ H0 {
  566.   dlg->ShowWindow(SW_SHOWNORMAL);, I, M$ w. z9 J
  567.   m_pMainWnd=dlg;
    ! l6 t" d* o7 G) Z) ^, T- X3 L, e" ]

  568. - i/ L# k4 R0 [' M' z/ j1 j/ X
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);7 }. m9 I5 u8 I" A
  570. 4 \: R9 O! h  r+ P4 `
  571. //  GdiplusStartupInput gdiplusStartupInput;. k' B# a5 M. z( r) J; M8 g: P
  572. //  ULONG_PTR gdiplusToken;7 a9 _" m9 c. L' I
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);# t, x, K. |! N( r/ @

  574. 3 _9 Z$ f, t/ O1 h6 p9 A/ L. E
  575. //        CRevAppDlg dlg;
    3 x! W! L1 d" T0 j! k' V+ K1 a
  576. //        int nResponse = dlg.DoModal();
    ) J& `+ F1 b! P/ A0 W" t! n
  577. //        if (nResponse == IDOK)
    ! ?( b1 ]8 E" M. X# C" M2 V
  578. //        {
    * H9 e4 a& P& u5 O
  579. //                // TODO: Place code here to handle when the dialog is
    ! V( t& D  @+ e* t7 Y
  580. //                //  dismissed with OK  Y2 \- K3 u/ ]' l6 B5 o
  581. //        }4 D5 q! H' N2 c+ R1 Q$ T
  582. //        else if (nResponse == IDCANCEL)
    7 H  x4 q/ r. f0 S$ I. @* D
  583. //        {# R! K! E2 {$ a1 Z
  584. //                // TODO: Place code here to handle when the dialog is) ?" G# d6 H- e* r/ b
  585. //                //  dismissed with Cancel
    + W; A$ _% q" g$ ~7 h5 E9 \5 w
  586. //        }* u3 M0 x2 t" |9 C2 P7 `) Y

  587. * g6 k) X3 r- _
  588.         // Since the dialog has been closed, return FALSE so that we exit the+ E* ]% \* E- j1 {( D3 w7 N0 Q
  589.         //  application, rather than start the application's message pump.
    " ]& a/ D& K5 A; o0 A0 d2 ^0 H! q3 w
  590.         return TRUE;
    4 Q0 Z$ g8 L- Y
  591. }
    / q( z! R. }0 b6 v6 s% M) p6 w1 N
  592. ) f9 i& t5 t  Z' A9 {0 A1 r; U" Q
  593. char *CRevAppApp::strtok3(char *pSource,char *token)1 d8 W0 B9 Z" L# Q. K8 C  q
  594. {
    * Q, }) F" p+ ^9 s
  595.   int i;! y3 S, X* M2 p7 `- E- ?- {0 K1 |
  596.   char *szRet;- J+ M7 k" Q: b) _* F# x: G

  597. 1 o( S$ b2 V' G7 t: P
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    % K& t  g4 P! E9 n
  599.   if(sztoken)  J% U8 i7 O! }0 u2 u& t: N0 _
  600.   {
    + ~( E' ^) z! [. ?& I( B8 u$ ]
  601.     szRet=&sztoken[itoken];$ w9 [% Z& p. x7 z8 v# h
  602.     while(sztoken[itoken])
    ! }' ?2 U" j# b
  603.     {
    ( x7 X6 O7 f: G6 Q. C
  604.       for(i=0;i<(int)strlen(token);i++)5 a% I7 Y) _- i# h; j* V
  605.       {& l% \! s( p5 p  a/ }
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])/ K7 I# Y3 W& C
  607.         {7 X6 p: Q, R! X: K9 V& d; T
  608.           sztoken[itoken++]=0;
    8 ?( Z  M' ?, k3 p% ]
  609.           sztoken[itoken++]=0;5 z5 W& F0 m' `& n" R- R0 t+ i
  610.           return szRet;
    # M) s% H( _4 T1 R
  611.         }
    . Y9 I8 w0 J2 H3 f6 O
  612.       }
    $ N& p7 A+ c4 w0 G
  613.       itoken++;% k- c6 r, N& ]( F3 `. J0 y
  614.     }* o! R$ p1 i+ d' N9 C, _* K
  615.   }
    : e' |! t4 H/ n. D) _1 K  D9 Y
  616.   return NULL;) X  |% ]  T6 y
  617. }
    # J) |& W! P( r# x

  618. 0 W# v+ ?) C" o9 l, p
  619. void ProcessProc(long Total,long Current)( R2 M0 ^8 l0 h7 x' B5 f; h
  620. {
    9 r& w5 ~4 i( }2 O% c2 ^2 I5 t: g2 z
  621.         MSG msg;, y  m4 @# Q  F+ w# s( ~
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    / B& N5 w# T. b3 E, R8 L
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ' a4 L6 c- o6 ^1 |
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    : a" Q) s. m! D- x7 l5 }
  625.         {9 h4 i- }& F0 |" r
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & Z2 r/ d0 E+ b6 H
  627.                 {
    ( ?3 f! j5 X9 M) G& i. m5 l
  628.                         return;$ F# \3 w  N7 C$ N3 W1 z
  629.                 }! Z3 X7 d% a4 F. M1 c
  630.                 TranslateMessage(&msg);
    ! f9 c# X0 `3 X. _5 h1 e2 Z( i% Y
  631.                 DispatchMessage(&msg);
    1 i( L3 h7 P  s
  632.         }       
    - h, K: ~0 Y2 c4 N5 P, _9 C$ D
  633. }
    / {! \9 n0 \, c
  634. - w: R$ u+ G  p( m
  635. BOOL bFirstChar=TRUE;
    + A5 N" \# S8 |/ y0 P' ]" G

  636. 5 u2 k5 P( \$ Q% g( ^
  637. BOOL CRevAppApp::OnIdle(LONG lCount)' Z( J5 a0 N5 l) f0 b
  638. {
    3 b( @9 @3 g  g
  639.         // TODO: Add your specialized code here and/or call the base class
    ( r# U* F6 }2 \& S0 Z+ G+ D
  640.   switch(dwProgramState)( I" a& X. Y' N. e
  641.   {
    3 @; d$ `2 }# I0 p1 F; Z6 T/ d9 t$ R
  642.   case AP_NOTHING:/ l4 S5 K% u6 H2 R; a( l
  643.     switch(dwStartUpSteps)/ G) ~' `1 }! O. T6 N5 d6 `$ s
  644.     {
    / R" Z( g' F2 i5 {- H' Z
  645.     case 1:2 N1 O4 |' u8 M% n) Q
  646.       {
    ( z2 D/ `3 K1 A) L* u; G0 J
  647.         int i;, i% p; ], t" O  S# C8 m8 I
  648.         CDC *pCDC=dlg->GetDC();/ e7 d% Z; b7 P# }3 J1 |
  649.         HDC hdcwnd=pCDC->m_hDC;
    6 ?+ M" [0 g5 a$ f; R! ~& W, E: l
  650. //        Graphics graphics(hdcwnd);* y+ Z' W2 z0 V; w- W7 r, F
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ; r! C# D# G" q% L' u2 m; ]
  652. //        INT iWidth=bitmap.GetWidth();. Z/ D. p+ o' s7 }+ d3 u
  653. //        INT iHeight=bitmap.GetHeight();
    / @% ]0 C) O! N3 l8 P# N
  654. //        Color color,colorTemp;
    9 o' s7 J0 N' s3 O
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    3 H7 g. n. I  b
  656. //        {7 Y  [9 s; U+ k  Z' Y0 U6 g" t
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++), {6 C6 `+ E! W1 g% r3 K5 ]5 s6 _. Q
  658. //          {
    - U5 }. s( V. ?6 N% z  H  C
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ( e* f8 K+ I2 R: D- J" R* K
  660. //            colorTemp.SetValue(color.MakeARGB(: N! D3 e& z  t
  661. //              (BYTE)(255*iColumn/iWidth),
    0 p: u) `4 h2 Z) K9 R7 L
  662. //              color.GetRed(),
    8 k7 |* a; c$ {/ o( Y; C# C. x2 O
  663. //              color.GetGreen(),* }/ c% o! p$ r2 u: r+ Y
  664. //              color.GetBlue()));$ p+ a( ?4 T" S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);9 t- K) Z0 ?* T& H, z! U4 ~
  666. //          }* U# c# `  ^" z
  667. //        }8 W6 W: I! s4 l) W: t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + W0 N3 k; n3 Q3 u& g, j
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 U! ?. |8 p* E6 B4 B
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");! I+ u! u( _7 \! t; I
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 l" d7 _* I9 O" c9 H
  672.         for(i=0;i<240;i+=8)
    3 l+ \" ]' L2 f) h1 r, Q: l
  673.         {7 S$ c7 A8 n8 g8 r8 b
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; b! o. a: E  e7 `! W
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ D' ]- j' E! {' j" h. H5 O
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" [$ k5 u- F( _) {/ _" N
  677.           Sleep(33);
    # f) h4 O. \$ O4 R. N( s3 O
  678.         }
    3 n( g6 r4 P/ O5 z. J2 {; \7 u
  679.         Sleep(1000);
    6 S( r  v0 B6 m2 h
  680.         for(i=240;i>0;i-=8)
    1 d% w1 l8 [+ j" g0 L* Q
  681.         {
    8 A9 U6 v& X( r  ^' B% |$ A2 w
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 h  y3 v6 E+ ^- f2 ^
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( P: X/ p  e/ c4 a, _0 e8 N
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: p6 p2 O" M$ T. h9 _- t4 S+ Q0 v
  685.           Sleep(33);
    7 A3 w3 v( C; f2 v, c' V6 Y
  686.         }
    , `3 k6 R5 T. i/ }5 ~+ z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);0 \! o/ N. W# G3 S
  688.         dlg->ReleaseDC(pCDC);" G1 f4 ?: N; H7 a: y+ v" E6 |# r
  689.         DeleteDC(hdctar);
    ; R; r1 r" R0 T; g0 O5 k4 q
  690.         DeleteDC(hdcsrc);* v  g* t: u# S! Z' I
  691.         DeleteDC(hdcorg);
    0 C* d0 q3 [0 N6 `6 \2 H
  692.       }
    : q' k' [# X5 ~0 H8 t
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    1 b2 j5 c+ d: G+ E* R6 g! x8 G: |: x
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    % f2 B8 \: s% C; f/ {" f
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");. n+ Y+ Z$ k, y3 b* s9 L- r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    2 H8 c3 F7 x; F! Q9 E* a
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 `! T/ S( A5 Z, r) H, u
  698.       if(!Dn.Connected())
    : p3 f/ D% W4 r' }; k
  699.       {
    1 N% \: y) E- T/ k- x) P
  700.         dwTotalFiles=1;& v3 h/ Z, o- \$ u* a
  701.         dwDownLoaded=0;
    % H" w. Q* X2 g. {+ X
  702.         bSilentStep=TRUE;) R. x$ i( ~% h1 l. z  x
  703.         bCompressed=FALSE;. M, k; H! O0 ~$ k! s6 H) Q7 s2 l2 C
  704.         strExtLocal.Empty();
    % S+ \; r% E( {, x6 X
  705.         strFullName="readme.txt";/ [2 f9 x8 U8 `6 B9 v! f
  706.         dwProgramState=AP_CONNECT;% q5 O( O4 t, f/ A$ @) C( ^
  707.       }$ h! V9 i2 r8 G# s8 ]
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    4 }4 h, H" r/ Z* Y' D/ _6 a+ a: u. \  G  p
  709.       dwStartUpSteps=2;
    $ \5 }) ^+ y6 _' o' L
  710.       break;
    ( `: ]0 M7 a# E6 p8 P  d. r2 x
  711.     case 2:
    : ^1 V. H, m+ C* B$ s7 S% X& Y
  712.       {  W: |" e4 |  N. g/ P$ }# x
  713.         int iEOF;# y$ I3 T3 F8 Y( U
  714.         FILE *fp;: @0 U. k3 x7 x- d# ?, k9 v8 X
  715.         char szString[512];
    ( E) Z) N# f# g  p6 ?
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ! M# e- {% C5 X. Y  {. Z
  717.         if(fp)
    9 o, I2 i) i; b9 _
  718.         {
    - Z4 P- X0 a7 J# ^6 t: N# L: I
  719.           do
    ) c* u, {& Q7 z7 d
  720.           {
    & Q+ t9 i% x8 D
  721.             iEOF=fscanf(fp,"%s",szString);5 x, d1 l8 M6 v( i  H, l* C; d
  722.             if(strlen(szString))
    8 k, H6 g" m& i* r
  723.             {7 v* N: n5 f  S3 @9 f( g' z! B& z5 W4 X
  724.               if(bFirstChar)" {5 p/ B1 z) X$ q7 b& t
  725.               {9 R1 r$ b& j- v5 G5 E: E
  726.                 bFirstChar=FALSE;! L. I! D# r; Z) O8 }4 {
  727.                 bConnectIsBig5=FALSE;
    + d# f/ T$ @4 L$ h/ Y8 R  t
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! m+ d& |; {7 |/ w8 e: {
  729.               }
    2 \8 ~5 O" q+ \, \; b' [. J
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));  Y2 b' V% Q+ V3 O4 n# ]
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    0 Y' c4 k- F: Z
  732.               dlg->m_ListText.AddString(szString);/ u8 Q8 v2 g1 d2 T  J, ~
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & i* N0 o0 Z! f" }1 P9 o
  734.               *szString=0;
    3 C/ V* G7 y( e! B9 [  H4 ~
  735.             }- G% E. B7 n1 h
  736.           } while(iEOF!=EOF);
    0 v% d' N8 U: o% u
  737.           fclose(fp);
    8 {9 P( ?; L; w
  738.           unlink(".\\DownLoad\\readme.txt");0 {+ W) a% F6 R2 ~% Z1 h! q/ v
  739.           dwStartUpSteps=3;" H8 r! q# m2 Z
  740.         }
    ; [- Y0 `0 `  C! Q* a0 }* I
  741.       }- ?0 P* D8 c, R0 Z2 G
  742.       break;- N  `3 W$ |: c# i7 w8 u. Q
  743.     case 3:. y4 \% F1 a! U, s1 s5 j; M
  744.       if(!Dn.Connected())! R* ]0 X, a. B5 A1 y" |' y5 G
  745.       {: k& s4 O9 I, B4 d
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    " @) l! _9 f+ V4 [5 b
  747.         dwTotalFiles=1;
    9 M" |% t4 r% q( Y, c
  748.         dwDownLoaded=0;: J  y7 y( `1 k7 P9 ?4 N+ A
  749.         bSilentStep=TRUE;
    : y$ h& q, b0 {. H$ @
  750.         bCompressed=FALSE;5 O% \6 Z, l, ~2 ?9 C: s0 F# p  J
  751.         strExtLocal.Empty();. M/ n6 t/ B$ J6 ]: W1 \; k
  752.         strFullName="checkversion.txt";8 J( S; R9 ?* L  m' C0 X, X
  753.         dwProgramState=AP_CONNECT;/ I1 S1 y. ~2 l  R# p" D' n! I, \$ h5 ]
  754.       }9 Y7 |; \0 d: n
  755.       dwStartUpSteps=4;
    9 p. W- ?! G! p: z
  756.       break;& N5 a* e, d, C) k, m
  757.     case 4:
    $ N# ^7 K& U8 P
  758.       {
    , c% J; ^, o1 v! `/ k
  759.         FILE *fp;
    ; z( l$ o0 F- G4 q4 C. _9 u# m
  760.         char szString1[128];
    4 E8 w- I0 X! h+ W% K
  761.         char szString2[128];3 K5 b8 g8 f* w! A8 B
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");2 z* f2 x/ y- m5 E& F
  763.         if(fp)& M% |- g1 I; H0 Y
  764.         {
      f/ g, x, ?8 p, P# M
  765.           fscanf(fp,"%s",szString1);
    1 k  H4 U: w# _5 v
  766.           fclose(fp);: X) [, h! h) e/ L2 y
  767.           fCheckVersion=atof(szString1);
    4 o* K; G2 ?) n+ W9 ~) N! f
  768.           fp=fopen(".\\checkversion.dat","r");
    8 u( U, d0 b, y* z
  769.           if(fp)
    4 G2 i( D. n5 a! C* B) A7 m+ ~9 d
  770.           {1 I* M/ F! M6 j) a1 i
  771.             fscanf(fp,"%s",szString2);) d! t" h0 ~( h
  772.             fclose(fp);
    2 r5 K2 l- W9 I
  773.             if(atof(szString1)!=atof(szString2))
    + x4 P  b5 E$ f7 p* t4 ^
  774.             {
    7 m# C9 a  h1 r
  775.               if(!Dn.Connected())4 @6 e5 _- N9 {
  776.               {
    ; A7 u9 ~' u  F0 V$ v+ |7 }) K( v
  777.                 bFirstUpdate=TRUE;
    9 l/ ]: g- h6 A3 W2 k, [5 A! ]
  778.                 dwTotalFiles=1;
    8 u0 j0 k/ k6 j5 W, @5 l/ P
  779.                 dwDownLoaded=0;
    8 S) B! J1 N4 D
  780.                 bSilentStep=FALSE;
    " `% h5 q. R7 h9 Y, q$ {9 P8 h/ q
  781.                 bCompressed=TRUE;
    $ `* ?* R% T, k* F# d7 M) Q
  782.                 strExtLocal=".\\DownLoad\";
    , N" `: D, ^1 u. x/ f3 h* |0 p/ g
  783.                 strFullName="update.txt";3 K5 [( N: j' z
  784.                 dwProgramState=AP_CONNECT;
    4 ~! _0 b& W! O% z7 |
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");6 C6 Y) ?/ t9 X
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( F$ \# }0 r# k$ v8 @3 ^% e
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");' R; O0 }+ X  ~5 N% a
  788. 8 M! i: @6 p4 I
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 x4 o) W3 j( f' b% f
  790.                 unlink(".\\DownLoad\\checkversion.txt");. \% |* b& r* D' x
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1), g7 T5 y* x; L" E
  792.                 {
    0 M/ U& p9 Q( T) \; v
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( T8 j/ P9 Z8 M3 X
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");: S' w1 G; n2 i
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");6 C8 u# s5 A% i; }$ r
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 _) g* z' V* e0 I$ n

  797. 8 j  v. [* T' Q  ?( Q! {
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    8 U$ ^- r3 X) {  x& I
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! G) y, ]2 Z8 [$ q8 x& `: C
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    7 _( M3 U% M( z9 r7 ^" @) I+ x$ Q, i
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % c8 N% _8 Q; g9 w) b7 ^. s3 ]
  802.                 }
    5 F: J+ H# \, q- o
  803.                 dwStartUpSteps=5;
    7 b- ^7 _. v, Z+ A
  804.               }, y: l/ U* R- u. m& u5 b. ]
  805.             }
    , g+ B: A, F2 q, W
  806.             else' K6 }& f8 H- f; x
  807.             {
    ' m2 W/ b/ H9 m9 k) _
  808.               unlink(".\\DownLoad\\checkversion.txt");
    0 N  o- o! K3 g9 |, D' t
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    + B! N, a! \" u7 q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");* G  V' B0 B  u* t4 O: ]( G
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    8 E( p( S1 w  M  n
  812. - ~) C9 f, p; X8 L9 ]
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( q7 o7 m2 }! k- d6 n' j
  814.               dwStartUpSteps=99;# _3 U" k5 G- P" b! s/ H) w2 j1 Q& r
  815.               bFinishUpdated=TRUE;
      Q8 n; ?, O- w# F+ h* |
  816.               bCanUpdate=TRUE;5 r3 o# N1 E! J1 M+ N4 C
  817.             }
    ' v. P& J1 D8 L  t5 ]2 b
  818.           }/ N) ]! Z8 x8 K) ]! Z
  819.           else
    - i8 c  P3 b# g7 V1 `
  820.           {) V" e- B7 H8 y0 M0 B
  821.             if(!Dn.Connected()): K. N( S5 E" O( Q8 \; d
  822.             {/ ~- j/ e% h5 [6 O  C
  823.               bFirstUpdate=TRUE;
    5 y+ u/ e9 l$ R' B% a
  824.               dwTotalFiles=1;) T& ]/ L% r# U0 y5 H0 Y
  825.               dwDownLoaded=0;
    3 X% R6 C6 D  E0 h3 ~: r
  826.               bSilentStep=FALSE;* E' Y& \* L* p( R( x
  827.               bCompressed=TRUE;; b3 o8 D. e) H, }( d% w9 |$ F- c4 l* K
  828.               strExtLocal=".\\DownLoad\";0 L% U& R, J9 K8 f, f3 j, p/ r
  829.               strFullName="update.txt";
    " A9 q2 y2 e  i; F: q
  830.               dwProgramState=AP_CONNECT;
    - a' y" D* b; X# @
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! }0 B0 E$ t0 b: r! o) W* x+ }
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");1 ]- \2 F2 @3 l- m6 e) f$ [/ J
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 j" k: J' R; [- }( @
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 a) B: N* Q- [! h, M: Z) N% F+ S' w% ~- j
  835.               unlink(".\\DownLoad\\checkversion.txt");$ p' D8 C$ y6 a# Z4 `/ i4 Y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)) v! t  D7 k2 V5 @% T, u2 e
  837.               {
    2 |  k! t: l$ J" m- g" r# Q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");* ]( G- B$ b: J# s
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    & R0 w  Y, s" y- V  Z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    # l" C% U. J' d. U0 p) |
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 [  t6 J9 M. z6 W' E
  842.                 ( y( c, }# |/ m" e, S5 [
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . L% B  W( B, W, j6 @
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - s% {4 |( T6 u" \' J
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 ^: T' \4 E" b1 [& ?  }& `! `- v
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! V' K; `/ w5 d& q2 p
  847.               }. w, r) E/ Z/ x) y/ i
  848.               dwStartUpSteps=5;
    9 Q1 P8 K, j! Q; M) v
  849.             }! f: ]8 @/ H) S5 }- I+ w# F
  850.           }
    4 w; N5 E, m. {2 E7 |" V1 `. w
  851.         }
    # c* \( u- f& H+ ], T. }
  852.         else
    ' o  ~: R4 T; M7 h( X" f/ _6 n3 P
  853.         {5 H; ?) o+ h) ~+ p( s
  854.           dwStartUpSteps=3;3 {( u6 L9 J0 H/ }% ~
  855.         }. m$ P& p- \2 N
  856.       }
    % M% S& I% L2 j% w3 E: q( M1 t2 u
  857.       break;$ \- E  u3 I  O  Z9 ?  r
  858.     case 5:: F2 s; K% [, c8 s5 e/ a% |8 ]/ r
  859.       {" f" v1 l% U* n0 F- l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1); \4 @1 n: V! N1 d2 {
  861.         {: a& M' x2 B% a+ P
  862.           int opt_overwrite=1;
    " u% `+ M( X: F' H) d
  863.           int opt_do_extract_withoutpath=0;2 ^3 _) ?5 S5 A9 ^  q( j
  864.           unzFile uf=NULL;
    % m: t7 D  o: e- X
  865. 6 A. O" F# ~2 b! ?( Q3 U; f! b2 ~
  866.           uf=unzOpen("Wsa.zip");
    ! K1 r/ q1 X& [# p: V+ Z
  867.           if(uf)
    - l$ F: N! a; V) M/ R7 P
  868.           {9 b7 W8 G& |8 W( p; N: E& G
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    , t, l0 |7 |5 a+ [4 [
  870.             unzClose(uf);
    0 y+ N. a# q% w+ G
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    - w0 C7 ^6 R8 i: C
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");7 K* ]& r' v3 {4 D# s8 I8 ]* @) C
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    , P. }; P+ F0 v1 n7 |0 A
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ M6 K" ~1 U. o, }+ o3 g. s
  875.           }
    2 p9 Z0 f( @0 ]
  876.           DeleteFile("Wsa.zip" );
    1 G- V8 }& }$ }3 M
  877.         }
    4 H# u3 b3 C- y
  878. ( S: x" p8 n9 e5 L- M# H! N* L
  879.         if(CheckLocalVersion())
      X7 Z1 f) ~. g" [
  880.         {
    # o/ @# H# p* s
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ! ^/ C8 w- \3 ]+ C+ C
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");7 A& n% X5 s; f: n! ?
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    : L! C& q/ I6 x
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 K; ^- w; ^2 _# b
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    9 Q, l% ~. C  c6 q" Q) M0 O
  886.           dwStartUpSteps=99;/ B( R: U! C: ~; z+ {
  887.         }: N0 O& g2 s( N7 w6 d. y( ^
  888.         else
    6 x( M' x- y9 P/ }2 t3 P
  889.         {! T4 ^3 c" n. T, ~% O" A# I
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      g: G. ?8 X" q5 f6 ]9 r. o9 A/ K% k4 Z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");/ H; l. d2 q) c8 j
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");! A1 w% A, z3 }' L" c7 I7 i7 K

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

: O/ a# g' @% I6 u8 f

評分

參與人數 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-28 12:35

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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