找回密碼
 立即注册

CSUpdate.exe源代码

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

0 W1 C! p7 W- }, W! X
  1. / RevApp.cpp : Defines the class behaviors for the application., {" y9 |3 D( C' ~$ A! G
  2. //
    6 z$ D" H9 L, I6 F

  3. 0 `% l/ }% M  i# Q3 z! `- \( N
  4. #include "stdafx.h"
    # B, R$ i5 V  t( A7 b

  5. . J( _8 K" C9 m
  6. //#define UNICODE
    6 |- y* z# l+ X  {: h: N3 g
  7. //#include <gdiplus.h>
    5 B4 n5 Q+ a1 J+ [' j4 C, v
  8. //using namespace Gdiplus;0 ]) k/ ^; x" n; F. R- a- o

  9. ' M) a. |- k! x- g7 |
  10. #include "RevApp.h"
    & s! D3 D7 a6 K% e3 _
  11. #include "RevAppDlg.h"8 s: F5 n0 g# a# p6 x6 h

  12. : ^3 {2 r2 W9 Q# I4 j" t, t1 y; N7 s* |
  13. #pragma warning(disable:4786)
    % x- @. b6 E. O, F3 g3 ^
  14. #include <map>
    7 T# g; J8 O! s& g: ]9 v5 z
  15. #include <list>6 C7 Y/ D$ l' p# B
  16. #include <direct.h>" U' n3 u: |3 w2 @6 L" \& a/ V- A

  17. 1 P, g. J; [& a7 g4 {
  18. #ifdef _DEBUG. v/ q# `+ y/ e( {) D; F
  19. #define new DEBUG_NEW3 v+ R) O0 V1 g, ]+ g& {
  20. #undef THIS_FILE
    + B4 M# w% ~  d" `
  21. static char THIS_FILE[] = __FILE__;) R9 p9 k  P/ u& Z( J
  22. #endif/ D, W4 i, d; |9 H" N
  23. #include "SkinResDef.h"
    . t/ {& y2 q7 o# ^
  24. #include "ChangeBG.h"2 y- D1 L* v+ O) m' n$ C
  25. #include "AFXINET.H"
    - q' |! q: ]' j. e5 {" y# m
  26. 5 t: ~: O; n2 e, L5 q
  27. #define TRADITIONAL_CHINESE 0
    5 f7 b0 t0 y0 x6 X8 t
  28. #define SIMPLIFY_CHINESE 1
    5 ?5 J) }7 N  W% N
  29. #define ENGLISH 22 ~: ]) k1 V4 U  P
  30. int m_iLanguage = ENGLISH;
    4 ?+ q* ~* C& G  r8 X8 p; z/ d3 k# R
  31. /////////////////////////////////////////////////////////////////////////////) n0 q4 \8 B8 X& V
  32. // CRevAppApp
    6 u* T6 w" ~9 W+ T1 B" }

  33. ( H/ ?- i9 V( I' v& ~  }
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)* K( b1 |/ D' y
  35.         //{{AFX_MSG_MAP(CRevAppApp)+ M  R. j* ?$ T; O* F
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.) Q/ V* I+ K/ s( F
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    / _( Q, S; Z! g# e9 O# _8 o
  38.         //}}AFX_MSG
    " A' E  I4 _! \! ?
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ! _4 k, b  z6 C: G; I5 I6 @
  40. END_MESSAGE_MAP()7 `# J" n$ h9 N4 S

  41. * }5 z" y" |4 r5 P# D
  42. /////////////////////////////////////////////////////////////////////////////
    7 G- ?; w: r+ \! R; O# o
  43. // CRevAppApp construction
    " Q* U# a6 U$ N/ S

  44. & W. g5 B, x7 _
  45. CRevAppApp::CRevAppApp()6 S5 J% e7 h/ Y+ ~: ?% G1 U
  46. {; I' H1 d0 @2 q) B5 Y
  47.         // TODO: add construction code here,
    & M2 ?7 n* M8 T2 \* g3 F$ L- l
  48.         // Place all significant initialization in InitInstance
    , s) B; e% H& e* y* R9 @3 \
  49.   bDisplayIsBig5=FALSE;- H, Y7 [3 |9 C. I) [+ r
  50.   bRestartUpdater=FALSE;
    : I, K& N+ x/ z. z  b" s
  51.   bFinishUpdated=FALSE;
    % ~- ~  }$ |, `' O& q( x
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    " ^% B- t2 b1 H( m. L1 z
  53.   InitChangeDataBig52GBKS();0 E6 W; ?# t! B8 u! W! j
  54.   InitChangeDataGBKS2Big5();
    # U6 T/ r7 x9 l# ^+ C$ O1 T% z
  55.         //
    / N4 i/ E; L: }! N5 \6 f
  56.         bClickRunExe = FALSE;  y* H8 G. Q( E2 \5 r6 R2 t. {
  57.         //
    % h* t6 l. l: x3 d6 R: o: U! I! o
  58. }8 p4 `7 m  M4 b& `" T
  59. ; M* w$ l- N$ |" P
  60. CRevAppApp::~CRevAppApp()
    , _3 O/ u% e$ g
  61. {
    # h6 H  V0 A) y8 t" t
  62.         // TODO: add construction code here,1 e$ x$ m" g. t  @6 r- @- V
  63.         // Place all significant initialization in InitInstance
    8 a# K6 w; L) \# s0 w8 |
  64.   EndChangeData();8 X3 |' Y- P# h" b* L% w+ H
  65. }9 C- ^4 A# [3 c& K3 d

  66. & ?9 `/ C- w8 m! E
  67. /////////////////////////////////////////////////////////////////////////////
    $ d6 [0 j# V2 x# X- m9 K
  68. // The one and only CRevAppApp object/ v; g, r' s  K8 J
  69. 4 `/ U! F  G- ]: W, R6 }, P
  70. CRevAppApp theApp;6 I7 ?9 z2 R  I
  71. 7 d6 E/ h$ N$ ^  Z7 G
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)+ Q7 ~+ J$ s/ d- O+ k- }9 \
  73. {
    ' J% \, W% P: f
  74.   int iEOF=0;
    7 E, E% P. p4 [1 @  M* x( E
  75.   char szTempName[MAX_PATH];
    * E3 d* Y* j0 a9 `0 J2 q( V
  76.   *szFileName=0;4 p. o8 ]8 L- X3 v1 Y
  77.   iEOF=fscanf(fp,"%s",szTempName);
    $ @6 W% X' y2 C
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')- c& c8 d8 z- w
  79.   {
    1 g  p) b: U1 y# a% n
  80.     strcpy(szFileName,&szTempName[1]);
      j! P$ N. _' e& S; A( k
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)' [* D8 K% s1 T# T1 {3 L5 h
  82.     {
    8 X1 N" O# F5 z9 j, N
  83.       iEOF=fscanf(fp,"%s",szTempName);
    8 e2 d& @; n- |' s- Y
  84.       strcat(szFileName," ");
    ! R+ t$ V; M, }0 G& E
  85.       strcat(szFileName,szTempName);
    ) M- G. R9 N2 B. E& F
  86.     }( A% A# J. N) C; t
  87.     if(strlen(szFileName)>=1)! i7 ^- ?$ _+ H- m$ n: F
  88.     {5 R/ f8 u' w  M% x" x
  89.       szFileName[strlen(szFileName)-1]=0;
    , L/ u, j# V" F1 c8 L1 Z0 n  Y
  90.     }
    & ^' i! A0 W& E
  91.   }
    - f2 y3 B5 F& J" y6 b0 m4 y# o
  92.   return szFileName;) z5 g0 ^  K1 v8 N. B  z$ o
  93. }# {7 x* V4 ?+ _
  94. / r! o) W! z- G# b3 m' Y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)2 M% g" H# g4 U7 h; e$ o8 Z
  96. {0 T. l6 j+ |+ y- \
  97.   FILE *fp;
    5 L! J; s2 J9 `7 e
  98.   char *key=NULL;
    ( f# W2 w' v$ U4 P
  99.   char version[MAX_PATH];( a8 o3 e6 ]8 C
  100.   LPUPDATEFILE file,olds;! X2 B% o. r% A& B
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    * G4 z9 h! v7 D7 O$ i# V
  102. ! H" G8 v' b- s+ n2 ]
  103.   UpdateList.clear();* D& F8 \( O1 u' @
  104.   UpdateFile.clear();+ x: o! e  k8 L- z+ g
  105.   if(GetFileAttributes(filename)==-1) return false;
    . S" K/ J3 u# w1 F! m* q  Q5 {. Y9 h
  106.   if(!(fp=fopen(filename,"r"))) return false;$ |6 J) N( \2 C, C: W/ I3 e! t
  107.   fscanf(fp,"%s",version);
    - f! u$ y0 c" i6 |
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }8 v3 @+ Z9 e2 Y& R4 f$ y3 M8 S0 H3 p7 S
  109.   while(fscanf(fp,"%s",version)!=EOF)2 x: a3 z' q' F- E) w- L
  110.   {
    " J+ _1 I+ z6 E0 n. {0 V, h
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - ~, n7 I# T# Z1 O: J6 a
  112.     fscanf(fp,"%s",file->path);
    . L& {/ e. k9 S5 B3 ^5 D7 A
  113.     ReadFileNames(fp,file->file);+ r* A& \5 a5 J+ {* w
  114.     strcpy(file->full,".");) M/ K, G( p! e1 |. R% F2 G
  115.     strcat(file->full,file->path);" E* {8 |# U7 |# V" o
  116.     strcat(file->full,file->file);5 n" {2 k9 S& R# d- L0 W
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    " _) K& g9 I% l( k9 Z- r2 i
  118.     {
    9 w0 q5 D$ N8 G  l# _' n
  119.       file->vers=(float)atof(version);, i5 H- l2 {: R: N" t1 ?  G( S
  120.       UpdateList.push_back(file->full);) ~# l+ c% q7 r2 s( P0 O! ^
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , k% k/ A; b$ p1 K, n
  122.     }
    & ^. b( N- l  P& _! L" Z+ d( M
  123.     else
    ) c; V9 V& S0 j* {0 j% `5 p: A
  124.     {
    : L$ M1 v. x( w0 [$ S
  125.       olds=(*p).second;
    . ]- A/ r- y# m9 U* ]8 Q
  126.       if(olds->vers<(float)atof(version))" x. q' T$ b, r3 H& L$ |
  127.       {
    . X7 M; U) T! X
  128.         olds->vers=(float)atof(version);# J. r* K! p1 m2 Q( I& ~
  129.       }
    6 c  Q0 ]$ R2 \: O1 I& B
  130.       free(file);6 C$ b4 N3 p* O$ T
  131.     }
    # d: k; a* r0 F
  132.   }
    * L6 v7 |0 k# c. `1 Y. N3 X
  133.   fclose(fp);6 U4 l( b( G+ N, T( ?0 F& u
  134.   return true;
    ( Z. l$ |# l; s. P
  135. }
    $ p( j$ _, \$ E. v. f; x& z2 Z

  136. + C* A6 `" ^$ i* v" D+ t( s
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)1 P* c+ U! q; A8 h' n! x
  138. {
    / t) @  q* l. A2 o/ |8 X7 c6 |
  139.   TCHAR  szFull[MAX_PATH];6 v. b0 j" E, Y6 q
  140.   TCHAR *token,*inter;2 Z7 H' H$ b- i, b7 g0 E; w
  141.   *szPath=0;# N8 @% @  w: Y& R% @* k
  142.   strcpy(szFull,szFullPath);1 q" T. P7 {1 {% f' T+ A. |6 _
  143.   token=strtok(szFull,"\\/");
      n/ W- {, g+ T$ X& Z/ ~- S
  144.   inter=token;1 y% `1 O( B+ N8 G1 l
  145.   while(token=strtok(NULL,"\\/"))
    2 x* v$ c0 \4 J9 h* g9 b
  146.   {
    : I2 e* B% L2 Y  W1 C
  147.     strcat(szPath,inter);  N( l8 @9 j1 o# X
  148.     strcat(szPath,"\");8 @( ?5 m5 X3 I( l- h; @
  149.     inter=token;$ O( p8 R+ z# _  [4 ~* {
  150.   }
    : @1 s( h) Q( h0 [8 Z
  151.   return strlen(szPath);
    ! T" {, Y0 r7 z) g
  152. }
    / b8 H! i8 t4 V7 @1 T/ `

  153. + m7 G* ^6 A& a% t8 K1 z, A
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    $ d, D/ N0 d+ Y* i6 t+ V7 X  K8 v
  155. {2 K% t# N4 U0 U& ?$ p! P
  156.   DWORD attrib=GetFileAttributes(Target);. N9 H+ C' v, I' ^$ u
  157.   if(attrib!=-1)
    3 v' O: h$ w$ |, x, T9 L
  158.   {
    5 r+ @( B9 c/ W4 ?
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))4 C9 J; i5 b7 w$ i9 W# S0 W
  160.     {
    : ^* j- ]6 u$ h* |, y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    2 w5 k; f, H7 g5 Y; S
  162.       SetFileAttributes(Target,attrib);
    , s8 O6 m9 ~3 O# `
  163.     }
    " C0 a  s5 Z2 q* K3 T3 ]+ {6 l
  164.   }
    ( H5 O0 N) E( c$ d: h9 k
  165.   CopyFile(Source,Target,Erase);' ~7 n5 U. J5 _$ ^
  166. }* I. ?! y$ ^2 x$ l
  167. $ F" i) r5 b2 A3 c4 }) F5 ?8 T3 H1 Z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    , J# W: C" y8 q
  169. {5 t% q+ s. m. N6 @5 `! n# }0 r# d* [' F
  170.      FILE *fp;
    $ q$ m) b, |3 w7 d
  171.      char  szBuffer[8192];
    & C) m. T* H1 N) ?
  172.   va_list  argptr;  T8 ~  W1 i4 M7 f$ X
  173. + V% r9 x* q! [! _
  174.         va_start(argptr,message);
    $ J+ S. C$ f+ [
  175.         vsprintf(szBuffer,message,argptr);: V0 v' h! h" }6 I
  176.         va_end(argptr);4 ~" H) G3 u* ^
  177.   fp=fopen(FileName,"a");
    ' }  e& I( q$ y& m3 a7 Z, L5 b/ w
  178.   if(fp)
    % j/ p4 _; j6 j$ L4 L+ _% K2 j
  179.   {9 g( d. Y* s  M" n6 D- e
  180.     fprintf(fp,szBuffer);
    $ J' H8 l, A9 G. t9 J+ O
  181.     fclose(fp);. i. t# P$ f0 y7 s  Y
  182.           _flushall();* O9 [) N! C: M* i; O
  183.   }
    + s2 u6 ~& N4 j
  184. }
    1 L/ b2 _; L' x) ?4 i' s
  185. % q/ O5 U# K; v
  186. BOOL CRevAppApp::Fclearf(char *FileName)# o! K6 p% W7 d
  187. {1 q. m4 q% s2 {1 M6 i+ b
  188.      FILE *fp;' Y7 k, E3 C+ y. u+ I
  189.     DWORD  attrib;
    : C1 ?7 t$ @3 H* Q
  190.   attrib=GetFileAttributes(FileName);
      y3 }+ x2 j/ e  b4 _
  191.   if(attrib!=-1)
    & H7 t9 f* G" m; t' D3 I
  192.   {
    $ x" T5 q! ]6 L# h& {  U( H
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    , \9 m6 E, L/ A  I0 ~& x/ k: Z
  194.     if(!SetFileAttributes(FileName,attrib))
    % h8 j# d+ ]7 t! {9 m# `4 N9 m! w
  195.     {
    # m1 o* ^! H+ ?' ?1 T4 C" S
  196.       return FALSE;
    1 \& g7 t8 u8 H( a2 W' u3 l6 r
  197.     }
    # F0 R3 u6 l2 s6 r# F" l* O, K
  198.   }( j4 \0 e/ }, f
  199.   fp=fopen(FileName,"wb");+ E& @; d) u& y6 @  w6 v
  200.   if(fp); B. B! {% v* p% U4 p5 I0 a! ?
  201.   {
    2 y) Z6 p* N$ ~# {: M# P3 D
  202.     fclose(fp);
    : H" o+ }% p- @) f! m4 Q
  203.   }' X7 ?$ i' d& W5 ]$ r/ k
  204.   return TRUE;
    / g+ L0 Z  _4 f- U6 w6 E
  205. }* y, m: W; X; K3 F, S

  206. / d, }% d0 N- v4 {/ w+ f8 o
  207. BOOL CRevAppApp::UpdateLocalVersion(void)+ L  N* ?" m7 y5 H3 ~
  208. {
    8 }1 l; z( w1 _: m: L
  209.   char filename[MAX_PATH];
    ; H# x; E* p/ J' F+ H1 _, c
  210.   LPUPDATEFILE file,olds;
    $ n: G2 z/ b3 K0 G( s. j1 g+ h
  211.   std::map<int,CString>::iterator i;" ?! z3 A$ R- H) P+ t5 `8 d0 r
  212.   std::map<CString,LPUPDATEFILE>::iterator p;* i2 F' d8 ?. b: `1 Q
  213.   std::list<CString>::iterator l;+ g+ ?' P  x: }3 P  v4 M; x

  214. / a, d) l! p$ h
  215.   if(bFirstUpdate); T- n' H( K" e8 G1 M) h2 H
  216.   {. s" U) ]: V0 `  a) t
  217.     dwCurrFile=0;! A' s( B8 Y5 {4 r& j* l
  218.     bFirstUpdate=FALSE;- y% u4 B3 m1 v$ k, r# X6 h
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 o& k" T' O% R
  220.     {7 }/ M' B4 N( A' E* T
  221.       dwTotalFiles=UpdateLocal.size();
    - i4 T9 v. D" p1 U
  222.       dwDownLoaded=0;
    & l! C- A& T! ?9 E: \* L- F
  223.       bSilentStep=FALSE;2 Z: O. g: ^& e( u6 H+ s) g
  224.       bCompressed=TRUE;) J  _2 @+ e  ?3 P7 ^$ L6 @. `
  225.       strExtLocal.Empty();$ ~* H% g  t  Q6 C9 a2 M; L& g8 N
  226.       strFullName=(*i).second;& W& N* [5 ^1 L* D6 M9 j
  227.       dwProgramState=AP_CONNECT;
    , ^  W3 Y5 ~+ V" y# w+ ]
  228.       return TRUE;$ o6 a3 W0 d7 X% S' o" L
  229.     }
    ; j9 w( ?  {; w6 ^% K3 g# @/ q2 r
  230.   }
    : e) v& I0 x9 f7 ]+ o. c
  231.   else if(bRestartUpdater==FALSE): C, \+ v$ {, p- {
  232.   {, f9 Z. c  n" b! k
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()): P  m  q! @- K5 t
  234.     {/ I, B& {& E+ I  ], g
  235.       file=(*p).second;3 T7 E: ?5 i. U% O+ S" P+ g) f7 F/ Z# V
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())8 X3 v7 y5 Q6 F+ Q$ P
  237.       {3 y5 p2 ]) i% F
  238.         olds=(*p).second;% M7 t4 X+ L; X) O
  239.         olds->vers=file->vers;
    $ i- h, k# T7 {9 H8 S5 l: U' i
  240.       }
    & t  |- B2 n1 \- P. n" {
  241.       else- S# [9 Q+ k) ~3 N8 V/ W
  242.       {) o1 F9 {# U/ S8 W2 Q, v
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 e6 |# Y  g+ L: o# `. \" J
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    6 p5 N9 E' p, E9 c% m1 {9 {
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));7 x4 u3 X4 x! z4 m
  246.       }2 Z( U3 f  [6 u7 m, D
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    , I. w- m7 m! j# v0 J
  248.       sprintf(filename,"(%s)",file->file);  D9 K! m# g% c4 x
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 t9 F6 \/ l1 p* J% i3 O
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    6 w6 Y0 h# A4 q5 _3 r8 e0 |
  251.     }
      C' G! c! a- k+ B% m( h( V
  252.     dwCurrFile++;
    9 z, n( u5 A+ R/ ^
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 e5 k$ }. k# _' v; S
  254.     {9 N& T+ C8 n# u: T
  255.       bSilentStep=FALSE;" i$ c1 W& H& |' a* m% |# p
  256.       bCompressed=TRUE;* F' s0 i5 l( S+ T
  257.       strExtLocal.Empty();' P3 s" S3 h2 r2 `9 F( D# p
  258.       strFullName=(*i).second;2 }8 N+ S3 F# A& C
  259.       dwProgramState=AP_CONNECT;
    , b0 C3 ?6 Z+ }: k
  260.       return TRUE;
    & F2 Q' i$ F' U, g" N! J8 @* k* B4 j
  261.     }1 x3 k& ^" N' Z
  262.     if(!bRestartUpdater)* `& G9 z7 h8 m9 k: Q' H: z
  263.     {8 `5 t3 R. r# B; C
  264.       int iCurrSize,iFileSize;
    ) H) y% G- F7 j: u! j
  265.       iCurrSize=0;
    0 l, n1 a) @( m: A! b& U
  266.       iFileSize=UpdateList2.size();
    & U, `6 I0 v' v/ l4 p
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    9 K. r1 }: {( t" {
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    : w( S( l& ~* {
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");! g: }; y, u, P% `# U$ m5 D
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* }5 V: Q; T4 a2 r
  271.       Fclearf(".\\update.dat");
    6 }8 B: s; A8 a1 _  T
  272.       Fprintf(".\\update.dat","Bloodyf\n");% {7 |! v- o( Z! N- _/ ~
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * F% ~4 m8 H9 B& j% z9 e' z
  274.       {
    : h! R0 }8 Z3 T% u; e' V% J0 O
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())3 h* @5 S- X3 m) [
  276.         {
    4 Z) W# H6 I% m+ J( u
  277.           file=(*p).second;6 S5 c3 b3 _3 w& _0 F
  278.           sprintf(filename,"(%s)",file->file);) Z) A7 @5 s) O/ S6 E' w- s! w$ S
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 v% j9 G" \- J7 ~" |' g
  280.           iCurrSize++;
    : D& I% y1 I) d2 c2 ?% S( u, q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    : E8 k* d# D! F
  282.         }9 Z  L# Z& K" U5 X" U$ l" _# G2 g
  283.       }
    9 {, q( G! i  ?. c" @( X
  284.       unlink(".\\update.txt");
    # O6 g% @5 M0 a8 M" t) j/ H
  285.       unlink(".\\update.tmp");& i6 M! _5 ?) z' g) i1 O
  286.       Fclearf(".\\checkversion.dat");
    " K. Y3 O' W' _% b1 y! x
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    & }" g' m1 P: v( B0 I6 s3 t
  288.       if(UpdateLocal.size())! ^7 r9 j) D* d8 A) r2 A' M
  289.       {
    + @6 o7 }4 w/ b7 ?# @- a
  290.         UpdateLocal.clear();
    1 E1 K7 C3 M% M5 C- ~' t
  291.       }( A& J% B4 L! p0 q/ W
  292.       if(UpdateFile3.size())* t$ `' Y! ^% p9 J# V
  293.       {
    6 J, ?$ ?2 V5 C. j% C: X- x! \
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 E$ F* c* _  n: b7 W6 ?
  295.         {
    - a0 ^" d+ H' x8 C/ o$ _& Q
  296.           file=(*p).second;
    7 w: k3 F( I# r8 X, T
  297.           free(file);: b. g+ D- `) x
  298.         }* l# g: P8 x" h7 ]
  299.         UpdateFile3.clear();
    4 j: R3 L' ^0 H% [" Y5 m
  300.         UpdateList3.clear();
    + N9 Q8 S7 x- ~: U* |- Y
  301.       }9 o. y" K6 o- a
  302.       if(UpdateFile2.size())8 A& U. {8 @& j. [) `4 U5 N, i
  303.       {; H! v' w( f8 L
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++): C" p' d7 V6 Q! l0 F; E$ F
  305.         {
    . q8 Y/ s5 r, S  @& ?" U: l
  306.           file=(*p).second;* z* |1 K+ p4 f: C# V( [1 L
  307.           free(file);1 u6 V  `* c1 X; ?
  308.         }# l( b! \+ Y+ ~  K. X1 `
  309.         UpdateFile2.clear();6 E5 d  h' k/ M& A3 H7 y/ c
  310.         UpdateList2.clear();( h/ Q% Q, o. B2 S& D7 G4 P
  311.       }
    , o6 w. k- E3 }  u) Z
  312.       if(UpdateFile1.size())
    ) X2 L2 R8 a- Y: o" I1 C* h
  313.       {" S2 Q! x- e" _; b9 N3 A6 ~* m# ^$ ^
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    * h9 B) z! Q7 U: K$ I5 Q$ M0 Q
  315.         {
    9 ~0 T" E4 b( B$ `  V& V+ W
  316.           file=(*p).second;0 A- t0 S& c6 l/ C' L& v- O2 c8 _
  317.           free(file);; _- j4 f* R( h- H  N
  318.         }* M  n5 r$ L0 Q" h' R- J
  319.         UpdateFile1.clear();
    7 _! p) D: G) \* E2 l0 F
  320.         UpdateList1.clear();
    * _7 U3 d# ]  \! {
  321.       }
    2 v/ j& ?0 e2 o4 X( [, }% V, k0 N
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));9 u7 s/ d7 `3 c4 o9 H9 t
  323.     }
    ) O- B9 x1 [. ?& @: H
  324.   }
    ( y/ J: U8 n) O4 t( p- m
  325.   return FALSE;
    2 s: }" {% B, u7 u6 a/ D1 z9 M3 M
  326. }% Q* ]& {3 O3 t; s9 z# \
  327. 9 e+ Z# }! P6 r7 ]* v& ~
  328. void CRevAppApp::ClearAll(void)7 [+ B. k! R4 B0 H$ ?- x' q
  329. {0 R- J. Y" ^( A) |3 Z1 E
  330.   LPUPDATEFILE file;, |; o, N. L  ?. P' o; a
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    . f7 ]6 E3 C( i& {; _
  332. 4 ~% W) O1 D8 N
  333.   if(UpdateLocal.size())
      B5 E' ]. j- A  ]# G" F6 x
  334.   {+ W2 O% k2 p: I; G8 F
  335.     UpdateLocal.clear();- J# D3 L" l. e$ a: w5 }2 p
  336.   }
    . B5 e3 X' ^8 S2 {. \
  337.   if(UpdateFile3.size())
    0 G! A! g/ X. v4 I
  338.   {
    0 S8 u" S/ ]* _3 l$ j
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" D( P. k  ~& ~7 J2 k  s0 K0 A1 L2 t
  340.     {  u; J1 A- U# G5 v
  341.       file=(*p).second;" W$ Y7 E5 n% n' q1 v8 E# }( f; U
  342.       free(file);) O2 p) W; [. J
  343.     }
    ' ~5 t2 `6 i( _2 P$ S6 j
  344.     UpdateFile3.clear();
    ' n0 R. V# I& f
  345.     UpdateList3.clear();
    5 R" {2 V1 b& l4 a3 h# i
  346.   }0 m2 g* K. l7 \  A! G8 T' U% `
  347.   if(UpdateFile2.size())/ [( Q2 Q) B/ {5 r* b0 f. \" y) r
  348.   {; Y, y$ ^& q+ F  V; R% T" \5 w
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    9 m& J7 J  H! w7 O' N
  350.     {4 J4 i& O8 z, [" W# b# i  y
  351.       file=(*p).second;. H1 P5 `/ f6 Z, o
  352.       free(file);
    ) _! w! h0 I6 @$ @
  353.     }
    3 ?6 D2 m* W: ]
  354.     UpdateFile2.clear();9 o' Q7 ^5 V6 F& _% \1 F1 O( r
  355.     UpdateList2.clear();
    2 J) K% i6 M) D- c8 ~* p
  356.   }
    % N" \& _+ T8 Z7 Z) B& T/ ^. j
  357.   if(UpdateFile1.size())0 x& n" c& E2 ]4 v, Z# w
  358.   {
    4 J( x; g; |- V+ g8 E
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 P7 k$ a0 @8 v- t  x
  360.     {6 m& }+ v6 d/ ~
  361.       file=(*p).second;
    $ v, c" ?  R: Y2 ]
  362.       free(file);
    * D. M7 u) y8 i' ~
  363.     }; |/ H3 ]0 x2 t5 \  g" ~& I
  364.     UpdateFile1.clear();
    3 D. G" p& R7 U
  365.     UpdateList1.clear();: \) r' z  c  ?2 D7 S0 y0 Q: i- ~9 b
  366.   }
    6 I; y7 T, n- B% j4 k# c
  367. }    \8 X' G$ ~  E2 v7 u
  368.   5 D9 Y/ b) i* D+ W- t$ W
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    + @. @3 W; e" T7 i. M2 L
  370. {/ V; q' E7 T$ {$ a
  371.   int c;3 ]  k$ B  H( i) R# {2 l0 d7 ^
  372.   LPUPDATEFILE file1,file2;
    5 a. Q6 f- {9 S
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    1 r% [1 D3 ?0 \" o, A
  374.   std::list<CString>::iterator l;
    - q5 K  c# d/ U5 F8 |; L, b/ K

  375. 7 r, W" G9 |' y- w* V& Z# _6 i. d3 M
  376.   UpdateLocal.clear();, O2 s( h. e5 k2 }0 s1 U4 a
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ) ^. o/ U; V4 }; ?8 _8 y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);6 e) G( i" M8 ]! M6 c: z( `& J+ n' h
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);# u. {$ j# d2 @1 f7 G
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);& ?* e( @& }% e& O
  381.   if(UpdateFile3.size()), r/ [7 K6 P3 ]- n8 \; R% J) [* f
  382.   {4 \& f( Q* ^8 ~, t6 N2 q$ b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
      A8 V# e( G0 O( h! D
  384.     {
    7 p8 h& Y8 \. v) E2 F
  385.       file2=(LPUPDATEFILE)(*i).second;
    . n6 z$ M4 Q8 b% B0 `' q" s
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 w) L% @' K& m  _8 W4 I
  387.       {
    $ q" d1 b# d& W$ X7 c' n
  388.         file1=(LPUPDATEFILE)(*p).second;
    5 g, x; `; C/ f4 i8 f0 V
  389.         file1->vers=file2->vers;
    8 j: c- A9 N/ J% p* l2 o- T1 D9 k
  390.       }/ O$ t/ R5 S' d3 D. ^7 u" Z! k
  391.       else
    & u1 q8 n$ J8 \5 g
  392.       {
    % Y8 U* r/ f, V
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" ~1 \  }* V  n! w" C  B8 C1 m
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));' r5 u# P- s' ~' C: L
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ; p$ ~- P( g' O" }
  396.       }( j  M+ I8 Y7 o3 z  l2 w( ^4 F; ?
  397.     }  x1 g- L7 |% u0 J
  398.   }3 z1 N+ H* t, a4 u5 A& \% Z
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)$ v# N: B; Y7 b- R
  400.   {
    9 d3 b4 k$ k* N- c! K" y( |
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())0 w7 y5 J% ^' s; c' h' R) q
  402.     {3 g* {- R9 S; a8 i9 d
  403.       file2=(LPUPDATEFILE)(*i).second;
    . K% A$ o: z  k- P
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ C7 j% q# q1 D- \& Q) `; K! `
  405.       {
    8 t! u% F* J- x% s2 ~# `& l! J
  406.         file1=(LPUPDATEFILE)(*p).second;# q# J& i; w" [) g$ W, s0 r
  407.         if(file1->vers!=file2->vers)+ S; B: _0 @$ A( c0 K2 |
  408.         {
    - m9 F6 T' Y+ U  U. W* ?
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 H9 j/ `- p/ l& b
  410.           c++;2 u# }; D$ A3 W, j' n
  411.         }* K0 J; g: d9 H: k
  412.       }
    ) H' y, l+ {9 f, P" h0 F
  413.       else) N2 C* f3 d( U7 g
  414.       {2 v2 O0 k" N+ P2 J2 \- {8 n# A
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; h& H* k" G& |" K9 A
  416.         c++;
    , j% {9 r* y9 ^/ _) X' @
  417.       }- |+ E7 V/ b( f- Q, Z
  418.     }
    3 o- L8 o/ J5 S; S( S
  419.   }' c9 ]0 \- K2 [# F2 r6 K! z: {$ E# K
  420.   unlink(".\\DownLoad\\update.txt");+ s* i5 |: V9 u* o
  421.   if(UpdateLocal.size()) return TRUE;4 q! k6 o# t3 c; h  k" ]
  422.   else                   return FALSE;
    6 W/ k' l/ w7 O# Y5 r' h$ q
  423. }- R7 K0 a0 A$ x2 e& Y# j

  424. 8 j- G1 g/ G# U5 h+ u
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"1 R. e% A% [1 H" N# s+ M5 Q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn") F% o: H0 G) m' p% a  e0 N
  427. 8 |/ V3 D8 g; z& P

  428.   A3 ]# k: N2 |+ w# K; Q2 P( c/ M
  429. ' @9 X( }0 h7 l, a! v/ ^# p2 w0 Z* \
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)+ l/ X/ b, q5 H9 S: J% w+ ~
  431. {' `3 _: u8 T) {+ Y, S# e+ x% x
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 P/ K8 y7 ~+ @. ~: x
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ U  E/ P. p3 [8 ^2 L
  434.   {/ Y0 d! ~7 j' f" a9 F
  435.     char szLanguage[50];7 n8 d- n" O- z" l# T3 a
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! f, A9 w+ w6 D  z" y  \
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- f2 `! \+ L1 K, l! P* }' x
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 @5 E0 Y+ y  K3 p
  439.     else                                   m_iLanguage=ENGLISH;; J: Z2 S: E7 d& m6 \1 d, \
  440.     char szRegister[100];
    , y& {$ E# Y$ s& r  k& `0 d
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 E: x0 t4 ?/ t9 w
  442.     strRegsName=szRegister;' m% ~* I/ B9 T; i( \6 k, b' L, W
  443.     char szPatchURL[100];) \6 q" W$ w: k' b
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * d8 {1 |$ }+ s# {6 q& i9 e& K
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 }4 Z3 P% ~& @" P0 Y# ^. M
  446.   }
    8 \0 J; F$ |4 J, R
  447.   else+ H# A4 |8 t3 i$ @  {* y/ _$ {+ `
  448.   {
    4 e! N3 n1 b: P$ t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      [5 n- P1 R7 i/ D$ f) Y
  450.     strRegsName=DEFAULT_REG_URL;3 n" c  V( {) u
  451.   }( k$ Y) o* Q2 {2 `: J( _- {! A9 E/ u
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    9 f, o0 |% o* E1 {
  453.   {9 v3 R5 F/ i; o
  454.     char szIP[50];
    ' w8 K  N8 V% t) M
  455.     char szDIR[300];3 Z, ~2 x( e$ ]8 E) I6 O
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    $ b: U  ^9 V; x9 N! f; S) h/ V
  457.     {
    , x; v# [3 L( X/ I
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");7 ^: `6 m1 h- ?# A8 m
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: t; T4 B' M/ {; g2 k
  460.       strHostName=szIP;. G3 q5 [  Y4 X  f- G, }
  461.       strHostPath.Format("/%s",szDIR);
    4 W6 x6 S* r5 h
  462.     }
    3 S. d4 O: O3 E5 Q
  463.     else
      @/ j0 a! t0 O5 {2 T
  464.     {* n, p) K1 r; |% Z/ t; U  \& X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 w) L2 P/ j; e7 x0 b
  466.       {2 d7 f2 ~8 l# Q5 P8 l- B
  467.         char szLanguage[50];
    ! W! J# W% y# `% P
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; p+ s2 S" {: n# B/ L$ {* B4 N, C
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
      O- D- }& i+ Y  }
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 }& f! J1 z% `. U& m) |0 f/ a; X
  471.         else                                   m_iLanguage=ENGLISH;: U3 r" V9 o$ i2 y4 ^
  472.         char szRegister[100];
      A1 p( W8 |% h# N/ s2 S5 x: Y, [
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 m  ?8 y  e. o5 _$ S3 }) }
  474.         strRegsName=szRegister;
    : c: e* G" j& _+ k( ?! W* d2 s
  475.         char szPatchURL[100];( @% r8 k: Y6 {& j: R6 P7 X0 a
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 J! o! N. Z7 Z, r% n* u
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 M. c! V9 ~: U2 Z5 C! l3 j- L! N
  478.       }
    7 Q2 ?+ f9 M0 W, q. Z
  479.       else1 ]. r  R7 l# `( C1 D
  480.       {; X" j  u, U) B8 h' c
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);0 }8 |0 G  T& _
  482.         strRegsName=DEFAULT_REG_URL;
    * C: M4 B3 h6 p
  483.       }
    3 ~- j0 j3 @5 j3 X6 D/ R0 Z
  484.     }1 u6 s7 ?$ I# t- ~% Z; W+ d
  485.   }
    / e. C0 \8 u! M2 e4 O5 R
  486.   return true;
    ' [$ q$ Q8 b7 |2 b" j  T
  487. }: ]$ ]& K  |8 z7 {% b8 `4 N; V9 w. [/ \

  488. $ ~" N8 Y9 A$ k* f0 G6 A+ c: j
  489. #include ".\ZLib\unzip.h"% R' h6 S5 i7 z" f' g( f- k
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    " G+ z  t$ E6 |5 L4 M
  491. ////////////////////////////////////////////////////////////////////////////// b7 _* ^1 T+ G  }% v/ p! h4 A
  492. // CRevAppApp initialization
    8 e* }( `$ O  M1 E

  493.   R/ [) ?2 [6 u0 F- D& ?1 F7 a
  494. BOOL CRevAppApp::InitInstance()3 `1 q+ H4 l* I* q. {
  495. {  J4 ]/ d# O& V& U: Z; a+ Y7 l
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];6 P1 g# w+ l% \* v

  497. 5 W7 i) k0 Q$ h! y
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    " \' ~/ V2 L- B  z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))) i& a" \% @/ s
  500.   {: s# F* c  m5 ~  d7 Y* U  [% y4 S
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");: m; t6 T5 f% m5 i' f5 H' F
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    6 _1 F) O( y0 l- u( w* Z, c0 `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    & K; ?( M2 F, f4 H
  504.     {7 |; }2 m8 _( {5 X
  505.       strcpy(szPath,szPathTarget);
    0 D7 V( [9 b+ V5 i
  506.       SetCurrentDirectory(szPath);9 t; @3 Y8 Z, Z* e
  507.     }
    % k/ d, g5 l5 I4 o2 B2 @
  508.   }; y2 `: W( l& f$ O" x
  509. #ifdef _DEBUG
    7 }. ?0 G! z( A, S" I9 Q: G% k/ `7 _
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . k7 h' J1 ^. T! `/ _( p0 B4 r
  511. #else* {0 |( S$ c& c8 I
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / U7 i8 Q: S+ e( P, `
  513. #endif$ w( P0 }3 `4 L3 Z5 D6 [
  514.   {
    , P0 u; E+ K  X: ^/ A8 }
  515.     char tempFileName[MAX_PATH];
    8 o# E' ?& r0 a) T2 p0 Z3 `
  516.     strcpy(tempFileName,szPathSource);
    7 k* ^6 o- S* i* R! E1 k
  517.     tempFileName[strlen(szPathSource)-12]=0;; p/ y/ _4 L* P! y. L# Z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");& D3 S% ~$ i# N( F
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);6 m" ?9 B. H) J! Q% |1 }1 E( q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);! b- p1 w$ q; M. @8 p
  521.     return TRUE;
    2 I/ Z0 M) b& {) P5 g
  522.   }
    6 y& s3 z+ l/ p2 _! h/ @4 y
  523.   // Nuke 0118: Delete run.exe4 S" \0 q$ Q. i3 L3 U
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );3 C: q5 u# E2 [. o1 ?
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");6 Q* s# ^3 [1 F7 _; ]' t3 h  L# Q4 ?8 u
  526.   if(!ReadCfgFile("Config.ini"))
    8 I% j, B+ |' ]: G$ t$ }3 \  R
  527.   {% n+ ]; b0 C: @2 h* T1 c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);; b! W1 \0 V! S4 b+ s5 \  ^
  529.     return TRUE;
    2 T5 ?/ z0 e' r7 Q- A* W$ J
  530.   }" X  I5 l$ l  f1 a- |. p7 }7 k
  531.   HANDLE mutex;8 M/ Z, p) U! b7 F2 p
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))& s  A/ r' I* H0 b) a
  533.   {
    " T# V+ ?' d" \7 ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    & V( I0 p8 U! a5 D& L0 [
  535.     {" E- m8 f( E' @6 T6 p/ a" @
  536.       CloseHandle(mutex);9 c0 r, ~) ?) A5 @
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);& n4 ^5 y! J" [! F( }
  538.       return TRUE;9 g$ M4 q  z, h
  539.     }  Z, |9 p9 C6 s3 ^% L6 d# }/ F
  540.   }  
    0 E/ j: `- `5 h# n
  541.   CloseHandle(mutex);
    ) o% D  Y7 g2 a  ~  r
  542. ( ^9 i6 f. @, |4 C) ~* H* |
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    # f4 G7 |7 Y( H( [) p' n: z
  544. 0 I4 p: J6 [- ?; \4 `5 d2 @
  545.         AfxEnableControlContainer();: ^0 F+ M& }6 ~7 q2 o- N% g( V
  546. ; _' X7 ^6 |8 x
  547.   bCanUpdate=FALSE;
      M" A0 K1 v' k5 r7 K9 X
  548.   dwStartUpSteps=1;
    . Q3 Z8 Y7 x2 O: Z, u5 m3 T
  549.   dwProgramState=AP_NOTHING;
    ; Y) ?& Q! S4 u/ n

  550. 7 m+ [' b& w3 i- I# T# U
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) I5 U5 l! k* U0 z/ W; D/ U

  552. " D) ?; E! k& S! G# O3 q
  553.         // Standard initialization
    8 y3 J! G. l- y5 {4 q8 ^+ O
  554.         // If you are not using these features and wish to reduce the size  x$ ~4 q) [9 {$ B# `. z4 X
  555.         //  of your final executable, you should remove from the following
    $ T8 E( J9 o) g/ n
  556.         //  the specific initialization routines you do not need.) ^9 d- a$ F) s5 a9 m1 f; Z

  557. # ]( ^: l$ l- R9 ^! I
  558. #ifdef _AFXDLL; S; q! q, W) U# q2 D) z7 I
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL5 |: x4 m" N! F! Q3 |, N
  560. #else
      x4 f* S% \% L" `" c3 K  J
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically9 `" z- n# a# F( M% s5 Y
  562. #endif
    ) Z+ P( K: f3 \' g& m" L
  563. 1 ?- e* M+ L( b+ t5 Q+ i
  564.   dlg=new CRevAppDlg;! Y& d) t5 i5 V+ ^
  565.   dlg->Create(IDD_REVAPP_DIALOG);/ s& j5 O( a, ]8 D9 \. k
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    0 |7 P8 P# ~0 K; E( L+ T
  567.   m_pMainWnd=dlg;; H1 ]; }: l- v5 W" U5 {( E2 @
  568. * s- `- x/ i  m( I
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);) U' Y" F# F& z- N/ i2 B
  570. / ?: X9 _$ ~' O" U+ u
  571. //  GdiplusStartupInput gdiplusStartupInput;+ B  K* q7 |, T" N
  572. //  ULONG_PTR gdiplusToken;
    ' q) W; C9 F3 D5 V  s9 a
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
      _( `) B$ p6 }9 `7 _" P
  574. % D' e' a# P4 B* g, q
  575. //        CRevAppDlg dlg;& _5 D& b! i2 r% d1 Q
  576. //        int nResponse = dlg.DoModal();  C: _+ X* w; I- W% I2 N. s, r
  577. //        if (nResponse == IDOK)6 n, l0 i# H1 t2 F5 o3 c
  578. //        {
    9 R. Y& J- [" Z2 `$ h" v
  579. //                // TODO: Place code here to handle when the dialog is
    0 ?& ?( o$ J1 L9 Z9 Z; ^& V+ w
  580. //                //  dismissed with OK1 e3 Z7 f% @8 R0 k/ l
  581. //        }
    " ?. Q' ]% Z: B) q
  582. //        else if (nResponse == IDCANCEL)
    / B. r: y) Q4 `* `
  583. //        {
    ( ]6 a2 `6 d9 }2 d2 p: r- U
  584. //                // TODO: Place code here to handle when the dialog is0 n9 _2 O  `8 W( K) p
  585. //                //  dismissed with Cancel
    ! B" l9 x/ r  T
  586. //        }
    9 Z6 T$ V8 F  ~7 f  Y! y

  587. 4 H! V3 h' s8 y* l" m+ C
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . u7 {; c7 r/ V6 o4 ~/ b( B
  589.         //  application, rather than start the application's message pump.
    4 s- t8 @* {+ b9 ~
  590.         return TRUE;% c$ f1 Q$ \& Q( T- t
  591. }
    0 H4 y& k+ ^% n
  592. . F+ g& p- e# r& x, b' }
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 K1 C) k. B+ \+ x
  594. {* S7 O$ D$ c- F$ }% j
  595.   int i;" s: m0 y% V2 w" w% s
  596.   char *szRet;8 w' r2 J7 y0 o" }; p

  597. * m- g+ u) _6 N  a- o5 U% x
  598.   if(pSource) { itoken=0; sztoken=pSource; }7 c* v; E: f' z$ `2 z
  599.   if(sztoken)
    0 L8 u5 J7 I! j+ S# E4 n+ l
  600.   {
    ' v) h( {) U  v  Y; m, D7 Z
  601.     szRet=&sztoken[itoken];" W# u6 G% J/ R' f4 O
  602.     while(sztoken[itoken])
    " a+ U( E6 f" ^
  603.     {- W: P6 n7 u# D, H' M6 i4 z4 S
  604.       for(i=0;i<(int)strlen(token);i++)6 F' g8 |2 B- I9 C- K
  605.       {
    ! o: N7 p: Q$ V, Q: @" `% T0 k
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]): G3 y6 v  G$ V1 P* H% |
  607.         {
    # i3 `3 R' S5 g. A2 Q$ G2 e" r5 ?
  608.           sztoken[itoken++]=0;
    1 v( g4 [8 b0 a* ^2 O
  609.           sztoken[itoken++]=0;
    9 }- ?  ]# {4 B! c! S8 r) f1 i" b
  610.           return szRet;
    1 r+ Y3 r2 p" y2 O1 k
  611.         }. L) u, {/ }5 B* I# s7 U
  612.       }: d+ M) p% d, H' n! Q' M
  613.       itoken++;" J/ F. o8 a' E1 O# t. m
  614.     }$ \* Q6 M3 g2 r9 ~
  615.   }9 a4 I, r+ k$ p! r* |
  616.   return NULL;
    ) _+ p$ }+ e7 ~# l2 Z2 b! w
  617. }
    2 o) o  q+ D3 J" s- M: Y2 r

  618. ) g, u! R( k' W. W0 m$ D
  619. void ProcessProc(long Total,long Current)
    % s0 l8 v8 b7 l% Y: E) v$ e
  620. {
    & n9 \/ k- u, n8 T
  621.         MSG msg;
    , p, }3 _& j. W8 \
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " J* {- M$ O. L1 b
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    5 W5 U+ D: v8 N+ z
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    9 E$ m- k, C8 `
  625.         {9 t& ^* p1 Q+ S$ q5 H# t: T7 }$ k
  626.                 if(!GetMessage(&msg,NULL,0,0))0 i; F; I0 H( I  c
  627.                 {4 \* Y+ a5 \$ N1 j4 o8 v7 l2 N
  628.                         return;0 b" O$ y7 S6 `* s) W& }
  629.                 }
    " W: e( _8 k! T& n+ L0 p& t
  630.                 TranslateMessage(&msg);
    " ~1 i/ M3 O+ I9 r; C1 J
  631.                 DispatchMessage(&msg);! U! \/ A% E6 E( ]
  632.         }       
    9 f* u/ q7 r! U; G! o/ N
  633. }
    7 c& v* r/ }! M- J0 }4 w5 p! l# J1 G$ b
  634. ; x7 m% ^: M) X) e% `8 t" t
  635. BOOL bFirstChar=TRUE;7 G4 e9 O: p, a

  636. 4 _8 Y4 M1 @# w0 ?) h8 i4 v4 t! n
  637. BOOL CRevAppApp::OnIdle(LONG lCount)2 i5 j8 y0 \( \
  638. {
    ; e* z0 N- B/ b! ^6 @1 T* B1 d# [& m
  639.         // TODO: Add your specialized code here and/or call the base class
    & l4 c2 N5 F9 C9 O3 N1 J
  640.   switch(dwProgramState)  J& r' [; H6 Y# R+ Q
  641.   {
    % R' L# e5 s6 z" Y
  642.   case AP_NOTHING:4 c1 z$ y- m& ?' e0 d  A
  643.     switch(dwStartUpSteps)
    0 C/ e# T0 `' M0 C7 @
  644.     {
    ' }+ s7 Z7 Q: n
  645.     case 1:" ^7 }0 o7 ]- c3 ]: M4 p! u- Z
  646.       {
    $ R8 j) W& K& r- R* R/ T. o6 d  s6 X
  647.         int i;6 n% F% q2 b8 n' r& T
  648.         CDC *pCDC=dlg->GetDC();  h1 t2 E3 d3 ~
  649.         HDC hdcwnd=pCDC->m_hDC;% a0 P) v2 t% M1 u  s
  650. //        Graphics graphics(hdcwnd);
    % U* w; R8 E, L2 ^6 ~! g, C
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");7 w. n, k' _( z+ @' y+ ?
  652. //        INT iWidth=bitmap.GetWidth();% A& P6 W8 x5 B) ^- n( b
  653. //        INT iHeight=bitmap.GetHeight();
    7 H% a7 z" }' V) z! y% \9 [! e
  654. //        Color color,colorTemp;
    8 j8 z8 R2 s9 o
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)  [; f  k1 q; f" `5 G2 _/ U8 g/ p! ?; n
  656. //        {8 h3 u+ }/ l  d; N, h  o5 ^( t
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)5 y" A6 S+ R% t6 I* i4 K
  658. //          {, x' T* |' u) h8 u3 N
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    7 r6 E; L; l8 B. b4 Q4 n
  660. //            colorTemp.SetValue(color.MakeARGB(
    , u  {; M$ G6 h1 V* ^% _. k; R6 P
  661. //              (BYTE)(255*iColumn/iWidth),# d& |! a! p9 @. Y7 i+ S
  662. //              color.GetRed(),4 T5 w& W/ G3 j5 Q( w* O4 I' j
  663. //              color.GetGreen(),5 H4 Q' L5 F  z& z0 @' O
  664. //              color.GetBlue()));
    6 V% l1 b/ u/ D8 o
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    0 r. A; R! ^% q% e; o8 E
  666. //          }
    7 N8 V* a  I% E& W) Z5 g5 z
  667. //        }
    ; H( G7 z' V3 o4 Q. L: F) Q5 v
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    5 Y* ]9 P9 R: ~" I! o1 z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , h  Z2 W% T( M) {2 n
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");: [  \# R2 t. s- T
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    8 ]) |9 e) }8 O
  672.         for(i=0;i<240;i+=8)
    " H* b# i. K) X4 m* k9 i' p3 `# |
  673.         {
    % \, `. }8 n6 \6 x7 l* K6 V2 H
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);* h; X: W& K4 E+ c
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    8 {9 ^' p1 q( p# V
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # M2 n4 p& D9 N7 Z( T8 D; f9 K
  677.           Sleep(33);
    1 K( i7 O: h: f' m" B5 _7 O
  678.         }# G  }5 l! a: D. j" O9 [3 w% I, p
  679.         Sleep(1000);. _+ W( x  E0 R: ?
  680.         for(i=240;i>0;i-=8): {; f2 R# O! p+ _- ?0 p& ~& g
  681.         {2 |; q% ?# D' y: p9 T5 [
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);3 d8 g- U" `9 k8 d! W
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 x8 a0 V5 S  ]. v, `  t/ D
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# n1 o2 |) e3 v. k8 ]  i: w
  685.           Sleep(33);
    / a( K9 s& Z! F: ]( P
  686.         }
      a* k; `3 V+ K3 F# s7 F) L
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);& h, q: t' @) F, y1 e5 g* u
  688.         dlg->ReleaseDC(pCDC);
    2 U9 `$ B/ b4 {9 }
  689.         DeleteDC(hdctar);  Y* |# s9 t% T
  690.         DeleteDC(hdcsrc);
    4 `5 K* u- r$ d! `' W& H
  691.         DeleteDC(hdcorg);
    ' x0 s; s* d, z' D+ _  C2 i
  692.       }' g# H& f) l/ Z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);1 k5 c" p' M+ P% ^, h
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");6 t2 R! \/ [7 i
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    " U5 h! W/ Y$ L9 O6 m: k) v
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");' ]( h4 K2 d0 o% X/ F4 C, X: N9 B
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  }1 I2 j! e  y; _5 t" n
  698.       if(!Dn.Connected())
    6 j' \3 h% S' Z) c3 u
  699.       {0 U1 U; q+ o: J9 X
  700.         dwTotalFiles=1;
    8 U# O9 C$ F& G7 D
  701.         dwDownLoaded=0;- M4 E4 D% {4 K; |4 }7 r
  702.         bSilentStep=TRUE;
    ( S. ?9 Z, s+ S; {$ ?0 N8 [
  703.         bCompressed=FALSE;
    8 c9 A8 e( M  }6 N& w
  704.         strExtLocal.Empty();
    % Q: L3 s4 g4 ?. W+ C
  705.         strFullName="readme.txt";
    3 T) z+ H4 T" ~2 Q$ I2 `9 b: j% X
  706.         dwProgramState=AP_CONNECT;4 m. Z3 g" k" ^3 O: d, t7 t3 W
  707.       }+ n* ^7 m# n/ x  y' {
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    , v  i% d0 e) O: E
  709.       dwStartUpSteps=2;: J" |$ E# R6 Y( B
  710.       break;
    4 n( O: w) c1 S. s# F5 \* B
  711.     case 2:+ X: M" m% @. E# ~. \/ u
  712.       {
    / l& A8 P: w9 o6 `# P/ H
  713.         int iEOF;
    " p  ~/ O5 `4 f/ m3 O5 H, u4 H
  714.         FILE *fp;
    ! M+ @5 R% u; G0 t/ q" F$ j# s
  715.         char szString[512];" r' A$ E8 Y' w3 J, o. q2 N' C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");2 T4 H. o( ~  v! B, @
  717.         if(fp)
    ; F8 V' f1 ?! E# Q
  718.         {
    + t) f- h, ~2 m/ r! h& p2 e- B
  719.           do' b% S' g- F' G  A; S" a
  720.           {
    1 ~; ~/ q, h! ]. V8 Q& W0 ^0 q
  721.             iEOF=fscanf(fp,"%s",szString);( g4 k0 o- n( D9 F0 g+ H6 H
  722.             if(strlen(szString))
    $ B1 _2 ]4 y$ n6 V7 d
  723.             {* m; i/ F1 }+ J- x. A/ o1 A+ [6 @
  724.               if(bFirstChar)
    : F% D7 J  [$ Q$ W0 }# H3 @/ a
  725.               {9 x' f) W/ A& k; p5 C+ c
  726.                 bFirstChar=FALSE;$ j' A6 o8 W5 `4 a0 R' ^" J1 x
  727.                 bConnectIsBig5=FALSE;% w- m( [5 f( y* P5 |
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
      u: g9 Q7 |0 @5 d8 p
  729.               }
    2 L7 h; S; F5 @
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    + A' v8 E$ b0 a$ O7 Z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));1 j' J$ O/ p( T" c6 J  M: s
  732.               dlg->m_ListText.AddString(szString);
    4 p" }# y; f# L0 A1 u
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 y* I9 @" o1 r0 V2 k3 i
  734.               *szString=0;
    * j* R) d# k3 q% V9 v7 a
  735.             }
    ( |) E0 P; @" j& d+ |- [
  736.           } while(iEOF!=EOF);5 ~$ b5 p/ k, ]% E$ A% e& P
  737.           fclose(fp);& C7 ^: _& f5 f. |5 _, l" o# v' t
  738.           unlink(".\\DownLoad\\readme.txt");
    * Q: N6 L- v. c& I% E6 Z
  739.           dwStartUpSteps=3;7 Y' V/ f. N" Z& Y! j3 I
  740.         }
    ( Z! j& H8 V! e$ w) h+ `& e
  741.       }9 S, R( r/ K9 |9 g% \
  742.       break;# @. N4 j; V" E  s5 V  Z
  743.     case 3:/ \: s) V6 W6 v* q( D, l9 ?! m2 I
  744.       if(!Dn.Connected())% ]- y5 Z- ?+ _8 c, s$ f# F
  745.       {
    2 E8 _/ D, t( T! r9 a# Q( Y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    0 M" r* Y2 S  m" l! _) D) m
  747.         dwTotalFiles=1;1 P7 \/ P5 b/ f0 m, L8 e" G1 F: L
  748.         dwDownLoaded=0;
    $ U/ ~! Q7 [/ v/ `6 M
  749.         bSilentStep=TRUE;
    9 Y+ y& J) x4 }( {0 _
  750.         bCompressed=FALSE;) P2 L# }& y2 ^0 s) ?! |
  751.         strExtLocal.Empty();
    , W" `7 N$ F0 V2 x. s
  752.         strFullName="checkversion.txt";
    ( D* H9 f6 i3 C: v& s3 `, A
  753.         dwProgramState=AP_CONNECT;5 U0 [  A8 Y8 w3 l3 d" u. p
  754.       }
    6 r  ^8 Y% B% q6 D( ]1 R
  755.       dwStartUpSteps=4;, e& S; s& Z8 T" v
  756.       break;7 X# [9 J, s8 G6 g  c0 W
  757.     case 4:: `$ }% \, _0 f7 F& {9 R
  758.       {. B3 w" J3 Z! U, W3 n$ n# T3 |1 f
  759.         FILE *fp;
    ' Y& y4 H6 ]* p4 f# p
  760.         char szString1[128];
    / {' F) v% A% ?. q* {& I: P! z4 c% e
  761.         char szString2[128];
    2 U+ [( ?: [  v( b( x
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 z( F* H  A7 c: I* {8 V
  763.         if(fp)( Y( u! r' y) I2 f+ ~1 @
  764.         {1 V; u! k) i- n( X2 o. J, g
  765.           fscanf(fp,"%s",szString1);7 q  P. G3 C5 O- f* D, C# S
  766.           fclose(fp);
    1 C, T9 D  ~' O% u) {
  767.           fCheckVersion=atof(szString1);( \- @% j/ n: c$ M3 {
  768.           fp=fopen(".\\checkversion.dat","r");
    + `5 Q+ e& X- L$ h
  769.           if(fp)  {( _" X* \. A$ q! a: h3 u
  770.           {
    0 \- e4 b6 D; W5 ^; a; ]
  771.             fscanf(fp,"%s",szString2);3 M, t+ Y8 A0 R1 M3 f5 x
  772.             fclose(fp);$ g$ s! B( |+ k+ @2 [& n
  773.             if(atof(szString1)!=atof(szString2))
    7 z* G9 s4 j9 q4 i% G9 M/ A: C$ i
  774.             {
    ) ~' e5 r; R  C- h% B0 Z& O* g  h9 u
  775.               if(!Dn.Connected())2 H2 g' c) L8 O) g$ T
  776.               {
    0 T5 \5 d3 A. G( p% {/ z
  777.                 bFirstUpdate=TRUE;
    0 s/ ^7 L" O6 O9 _: W7 z% i
  778.                 dwTotalFiles=1;3 V) B8 `9 V7 |/ G6 ]3 E
  779.                 dwDownLoaded=0;
    2 ^6 C; z' W6 K$ d) o5 `! _  Q7 s
  780.                 bSilentStep=FALSE;
    3 K( j$ j: v+ s" B8 w
  781.                 bCompressed=TRUE;
    ( z, q/ ]# y3 ~
  782.                 strExtLocal=".\\DownLoad\";
    * I5 s2 L4 L# Z8 H
  783.                 strFullName="update.txt";
    8 e6 @  E5 X% ?
  784.                 dwProgramState=AP_CONNECT;& p% [% W- g  F3 z- }. x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / b% q& E3 V- \& S
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 J! R( d  e; W" r% j
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    / V! s2 d5 t- Z; \6 Y/ |
  788. 1 m% `: ~0 f5 V4 e4 \; B7 P
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # S' \5 @& w( T3 j/ Y
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    + i6 m, S$ K# G
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    9 t8 w" F% L$ b; t* K1 i
  792.                 {# Q$ @, n$ P' L4 W2 j6 S" [; L
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");6 f# b! ~( P/ ^& s% W8 U/ y  P
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    : O5 A  m6 c1 |
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");2 i' [1 \2 s' a
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, {' q; j- s$ ^1 d) A, v, E+ u1 K

  797. * u7 _+ Y3 y0 O1 q9 }3 e0 d7 e
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");/ Q4 C- Y0 A1 q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% @8 s3 J3 {0 Y2 ?: I: K! c
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");  S+ U6 {1 R  Y4 m3 x
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / D* h: M9 Y0 F
  802.                 }: z: z( _! J8 v( S, X2 Q
  803.                 dwStartUpSteps=5;
    ' Q% ]9 m& e( A& a7 L: q
  804.               }
    . |, n$ H8 a. y- `# O7 i
  805.             }
    - n7 G2 X) x! N/ \7 T
  806.             else
    ) L! N5 _4 R8 I9 g
  807.             {% @2 e0 s, m$ r; p* l3 V. Z
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ) K% x. q- y2 \" R4 B# ~, [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ; |5 |5 ~4 s1 l- K' Q, J
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - ~: X' S$ b6 `) ~/ ]
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 T# c- E; |& k
  812. ( D5 W6 ?+ e3 g& {, a, C/ M  C2 \
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 g" m8 c1 c3 y3 a
  814.               dwStartUpSteps=99;
    4 F  |% _. t  ?/ o$ g/ V
  815.               bFinishUpdated=TRUE;
    . h% x  W% E7 c. a" o/ }
  816.               bCanUpdate=TRUE;
    ( G9 x, Z4 b1 o; h6 O
  817.             }3 w2 x* p) R: t$ e; P! Y/ S
  818.           }5 [# r6 h4 _+ B" I0 [- H
  819.           else# v1 u& K) L: u" `0 N
  820.           {
    3 ^% [8 S' i% w. i8 O
  821.             if(!Dn.Connected())' J7 I; @  `- A; a7 Z8 M. E
  822.             {! t0 X+ L, P2 C  t
  823.               bFirstUpdate=TRUE;+ g" {) \/ t" G8 r4 Z/ i" a' \
  824.               dwTotalFiles=1;5 Q* p1 Z4 w( }2 |7 B7 ^
  825.               dwDownLoaded=0;* W8 r$ {$ H/ P  Y! Q
  826.               bSilentStep=FALSE;( K2 Z$ [. i) q% d! v6 ?! k$ e
  827.               bCompressed=TRUE;* e) Y% X  ]( L1 H
  828.               strExtLocal=".\\DownLoad\";
    0 @' H1 C1 ~6 V& F* X. x4 L7 _' O
  829.               strFullName="update.txt";
    5 q' m, Y8 [9 P  x- s1 s  B
  830.               dwProgramState=AP_CONNECT;
    % u2 S( \$ Y4 Y/ d* ~! a; ~6 G
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    6 g6 m8 b! T' {) j8 N7 X
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    : H3 ?  }/ e% e4 B/ A% B
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & p( }+ k, x3 _0 G' `2 G
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" E- e5 n7 R1 `
  835.               unlink(".\\DownLoad\\checkversion.txt");) y8 _8 d% N4 ]8 W2 L" y1 j
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
      n8 v/ @$ O; U$ t# T
  837.               {
    ! A. \! \  F! w4 q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    $ p3 R( e. V0 k
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    7 f0 ?# u  @: Z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
      ]: D5 _  q  p9 ]/ L, V" c' @, f4 H# F
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 M( [. C2 B: v# \
  842.                
    " K  X0 x0 G: A; V/ ^, l
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, m) B! ^6 X5 B& G! y. ]
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 c( O& l$ W8 {, A3 S7 l3 w
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    # q2 t6 W  n3 p6 _# k8 \
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 w) J: P/ J$ W
  847.               }9 {$ p3 F% }4 `% [* }7 C' |% b
  848.               dwStartUpSteps=5;
    : [: a& a% B  W8 j6 @
  849.             }1 y# N* R6 c& n3 B- T& Q
  850.           }8 t% G% q4 z6 _. ]$ a- N; @
  851.         }
    6 g/ [* L. c& h/ @6 }; B% ?
  852.         else
      @9 d8 E# P' k6 x! ?+ M- S1 U
  853.         {5 W9 S, z' D1 u
  854.           dwStartUpSteps=3;
    # g; g: b' p7 I2 |$ e& _* R' u% ?' b9 M
  855.         }- o3 c+ n3 ^- k( x! R6 y/ ^! W
  856.       }9 s; s, Y& I: B) M! a
  857.       break;
    % o$ v7 H& H: O! ?
  858.     case 5:
    # a2 @+ }$ H- `- m0 s
  859.       {4 d: k1 L& `4 `- z: c  D
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    & i% H! @+ c/ K) s! `2 Q
  861.         {
    4 d- W9 q( p9 g4 U; u1 ]& g
  862.           int opt_overwrite=1;
    ) Y. N* S! s3 h  A* h! L: X
  863.           int opt_do_extract_withoutpath=0;
    4 i, R& ?1 [; j) r5 x) V! x& J
  864.           unzFile uf=NULL;+ n+ x* o( r: `2 x! b

  865. * Y7 C$ d6 u/ O
  866.           uf=unzOpen("Wsa.zip");
    9 _5 O% \( j& Q0 L7 B( c5 n
  867.           if(uf)/ y8 |7 ?: W( L$ K4 L+ D; }
  868.           {' D, k8 u3 X+ t+ y/ j. x5 t
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);0 L: l4 I, g$ c
  870.             unzClose(uf);: ^- M7 \$ _) ?! \
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ; s4 o" @$ p; Z2 z. i
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");7 U) [% N% H, T" q, d( ^
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    9 ^+ h$ i. @8 C* q8 D  T! x
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + ^7 N! Q/ q6 {2 ^! f7 U2 x" Y+ B
  875.           }
    # Z* B, X  O3 J/ p
  876.           DeleteFile("Wsa.zip" );
    + `* a5 i* D! L! D1 Q5 `+ s
  877.         }0 Z$ Y) Y3 T1 [+ |6 n$ B

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

評分

參與人數 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-2-12 03:15

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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