CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
% W+ ^( h" U4 S  c+ w
  1. / RevApp.cpp : Defines the class behaviors for the application.$ ~- c) P6 U, p5 W
  2. //# ~+ P4 {) ?8 f1 _" {: q
  3.   \( e+ H; `0 B" R& o; ^
  4. #include "stdafx.h"
    3 R" q, V. o5 X0 B& }$ h
  5. ! p7 c8 q& j5 {% G* w# `; Z+ ?( O
  6. //#define UNICODE! ^9 s' O: X0 P. O1 X+ h/ }+ H9 k
  7. //#include <gdiplus.h>
    ) U3 p5 ]) n8 G! s# ~& |% c
  8. //using namespace Gdiplus;
    # w4 v8 f2 u! W8 o5 b) d
  9. 4 a. H$ p' r$ |3 S
  10. #include "RevApp.h"
    ! x+ c. P( `5 @3 h# r% q4 D
  11. #include "RevAppDlg.h"
    7 a) G) g; f8 s
  12. ' }7 `$ b: g) U  _
  13. #pragma warning(disable:4786)+ _1 C+ r2 G' L9 p( Q! U/ H
  14. #include <map>
    : I! C4 L. E" w" Z, c# h( u$ B
  15. #include <list>
    & _2 i$ X+ I5 j  M% [9 l3 d- o, C
  16. #include <direct.h>& ~0 H$ I' ~, M; j! F* [

  17. * h( v: x# C" x8 O. q$ I9 L# w
  18. #ifdef _DEBUG
    * Q8 U1 S& Q6 V. ]( x& b6 _
  19. #define new DEBUG_NEW, V' i+ v) E4 w: u- T" q
  20. #undef THIS_FILE% C$ `8 ^( C+ R7 b& D
  21. static char THIS_FILE[] = __FILE__;. g& C* W1 ]8 T9 w. I6 s# m8 l/ ~
  22. #endif
    # m1 z/ E% V2 y0 J/ d1 p
  23. #include "SkinResDef.h"
    - L* w- b3 T, z$ ^' ~# x
  24. #include "ChangeBG.h"3 }; n) w1 P9 v1 [
  25. #include "AFXINET.H"& ^9 S/ U% ^# R" R

  26. 0 W3 |7 l' l7 E# `0 W5 S$ Q5 d
  27. #define TRADITIONAL_CHINESE 0. C  g, `; t" y! M
  28. #define SIMPLIFY_CHINESE 1  O$ V( P& Q9 T. Q
  29. #define ENGLISH 2
    ' ^9 k5 {& K) x4 J/ V5 H* c9 Y
  30. int m_iLanguage = ENGLISH;
    7 j' a+ [: e! m; e( e/ r
  31. /////////////////////////////////////////////////////////////////////////////
    % ]! }; ^) Y! i1 ]! I  O
  32. // CRevAppApp
    , t2 Y& R2 n  l* \$ g" ?& T
  33. ! {- x4 n# m! @: y% d/ P6 D2 w- j
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    + M. O3 ]8 m8 W1 n
  35.         //{{AFX_MSG_MAP(CRevAppApp)- z% C! d6 Q7 M- U4 K$ L6 u" k
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.8 X: ]  ]( {4 U5 @6 W) P
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!& b3 n9 w) ]- D3 l
  38.         //}}AFX_MSG7 W, P- x: K6 [  ~3 C+ l
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)3 H& o. k0 |3 s1 e
  40. END_MESSAGE_MAP()1 s) z: p  {6 k9 y; c4 r  {

  41. 4 I& P1 `" i7 I
  42. /////////////////////////////////////////////////////////////////////////////
    7 X# v) p$ G/ F) {+ B0 b* ]3 o7 k
  43. // CRevAppApp construction
    4 T& I/ }  o$ D3 U: H& m  ^% b

  44. 8 ?# k1 m% {& ?$ _
  45. CRevAppApp::CRevAppApp()" j4 }9 F: X: q$ N8 Y% U4 R
  46. {
    / b* g/ k" @  V! x3 p
  47.         // TODO: add construction code here,5 A- `2 f! l* a" `6 D  V7 P+ ?
  48.         // Place all significant initialization in InitInstance
    % U3 I' z5 A' L- U' ?9 E& U
  49.   bDisplayIsBig5=FALSE;) n  \5 F2 X9 V
  50.   bRestartUpdater=FALSE;
    2 J# S% p, {, \- M) W3 Q4 o) X
  51.   bFinishUpdated=FALSE;
    + e) r! z) b  L' ~
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    7 G% o# M+ N. B: m) E3 P
  53.   InitChangeDataBig52GBKS();' F7 V; m5 s9 A9 r% a1 _
  54.   InitChangeDataGBKS2Big5();) n: P- V8 f- e' y/ G
  55.         //; D) g$ F5 R1 l' i- a# @
  56.         bClickRunExe = FALSE;9 H( h6 @# R5 f. s4 f/ J+ Q
  57.         //
    / m, H3 d6 I9 V* V( m1 s
  58. }
    7 b; g, j# ^4 A+ B) X

  59. 7 w) P! m, \; q
  60. CRevAppApp::~CRevAppApp()
    4 F+ O7 r/ }0 ?" |& @
  61. {
    . s6 F3 t' X5 `2 C# E" g; `
  62.         // TODO: add construction code here,
    9 f4 X/ U4 ^4 s& B. L
  63.         // Place all significant initialization in InitInstance
    % b* g$ I9 a7 r* F
  64.   EndChangeData();
    6 n; I5 G% G6 _0 R
  65. }
    3 y8 ]7 J! v4 n6 s* J! D

  66. 4 S1 z& x  i* a/ w3 Q3 y; Q  Y5 U
  67. /////////////////////////////////////////////////////////////////////////////2 C$ O/ U' W& }1 [. Z4 O2 N
  68. // The one and only CRevAppApp object+ i2 x+ G8 m4 g, ]4 P- C
  69.   E* I3 t. ^5 Z# z+ Y$ d3 Q6 F
  70. CRevAppApp theApp;5 U5 p# E0 d0 O, j  D
  71. ) g9 }- L. B+ H: d* o
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName). ?( B: j8 Q4 D
  73. {) K4 @6 ~4 r0 V- ]* t* T
  74.   int iEOF=0;1 \5 \" O' n  b2 w# `5 ^% p- Y: D7 P+ n
  75.   char szTempName[MAX_PATH];
    & \4 {1 a  O6 X+ g& n
  76.   *szFileName=0;( ~; H* M% ~9 p% W; |/ Q
  77.   iEOF=fscanf(fp,"%s",szTempName);7 ^( [% R! C2 U& ]  W: A
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    : h  ~0 r% B. a* C, p
  79.   {2 w6 c' U; Q, O5 f% q
  80.     strcpy(szFileName,&szTempName[1]);1 {+ n- O+ W/ f' K  W
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
      ~" q) Y3 ]8 j  c1 C' Y
  82.     {9 ], ^  Q7 F! r! c5 B
  83.       iEOF=fscanf(fp,"%s",szTempName);" i6 K8 I. {+ x0 O& o8 E
  84.       strcat(szFileName," ");
    * Z, U0 U) X+ V7 [% n* r5 U
  85.       strcat(szFileName,szTempName);. m  v! W$ f. I; n+ @9 h- N
  86.     }; @8 X! J0 E8 P& Q1 g
  87.     if(strlen(szFileName)>=1)
    8 v$ X& G% b3 D; g' w- D% f( S6 e
  88.     {! v. C9 Y. N" }/ x8 t1 c9 C- ]2 ^
  89.       szFileName[strlen(szFileName)-1]=0;6 t- A0 E( Z, y7 v7 `2 b
  90.     }" \) t: o! l9 E
  91.   }* K$ D  X1 |4 ~! h, ]( ~- M
  92.   return szFileName;
    ) a0 }$ d* d) s) R. c
  93. }
    # ]5 h' W5 z0 e, I& T$ c' a

  94. 0 W6 H3 O9 i8 T
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)9 C$ v2 a. J+ M% }" G% Y
  96. {
    # h' p) o6 V% y' N7 }$ E& S$ {
  97.   FILE *fp;+ i; z! {5 |$ g6 r
  98.   char *key=NULL;) S- P; T2 p( s) \; f
  99.   char version[MAX_PATH];
    : K' t9 T; I5 f& `
  100.   LPUPDATEFILE file,olds;$ `1 J9 T4 h& _/ @5 x3 M4 o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;7 M" C, {7 }$ G# _

  102. 6 d4 u) \6 v- x4 p0 t' p: i
  103.   UpdateList.clear();
    % N) p9 B  r" W" h& i0 ]' [: B' M
  104.   UpdateFile.clear();. C& q+ d9 l/ O: c# \$ h8 f
  105.   if(GetFileAttributes(filename)==-1) return false;' I" V) c, ?7 Q
  106.   if(!(fp=fopen(filename,"r"))) return false;0 x6 t9 I; n+ i2 j! K5 \& p
  107.   fscanf(fp,"%s",version);
    / V5 G3 ?* Y: ]" D% V2 p0 k
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    9 b7 T6 T; n5 c* S' c
  109.   while(fscanf(fp,"%s",version)!=EOF)
    : a- t. K! l1 |, i4 M' i$ a
  110.   {4 q7 \) s" _1 |  [! `. x+ y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 r8 u0 L+ P  p0 d; O  T/ {
  112.     fscanf(fp,"%s",file->path);
    6 E" {2 d  M2 l( v+ d; r
  113.     ReadFileNames(fp,file->file);" u/ {3 j1 E! ^& }( p
  114.     strcpy(file->full,".");
    6 h8 m- @: s8 i9 f6 H* T% ^
  115.     strcat(file->full,file->path);, C  r* z) u4 p2 n
  116.     strcat(file->full,file->file);+ a! B* |- Y4 b8 R$ T" I9 K
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())# l. T) n( _  x. [# E& H
  118.     {
    ! \5 l* u; n3 H5 G: j8 {' X
  119.       file->vers=(float)atof(version);. j) b9 Y) t& k- T+ }7 s
  120.       UpdateList.push_back(file->full);3 ^3 R; l5 I. l! S( P1 g* a
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));- \  N6 R& a# b  t$ ?( j4 ^
  122.     }
    - g: s* l7 o$ T) a% h: z
  123.     else
    0 {. ^- u2 ?- O& G7 Y  p4 u% W8 o
  124.     {
    6 v- @$ o+ w% T+ |- i
  125.       olds=(*p).second;
    1 Y$ k3 v7 S& a4 E. f; c3 t
  126.       if(olds->vers<(float)atof(version))  ]0 z4 t( H0 ?2 b
  127.       {! S& r7 S- s# n8 k9 G
  128.         olds->vers=(float)atof(version);
    1 Z% b) e0 n7 S( i5 e! f( X0 @
  129.       }+ W4 ?# _9 I, v. z4 H" @5 M: U
  130.       free(file);
    # h+ D' {. r- E2 B! g9 V
  131.     }3 h9 z. E- M3 X5 q4 Q( `1 D
  132.   }
      {3 S( I: ^% _% \
  133.   fclose(fp);
    * c' u& ]: e( p5 s  t/ M
  134.   return true;9 _# c( ^7 q8 n  U* q! {
  135. }- F. k, t6 h! f( M" K4 N, h
  136. : ^6 a) x- U4 j: j, A' J% ^1 Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)4 ~: H1 o- T/ v4 Z7 {% E9 I
  138. {/ Z7 G( h! _, H2 t2 u1 N
  139.   TCHAR  szFull[MAX_PATH];) ~/ a; Y+ P1 Q) V( K7 `
  140.   TCHAR *token,*inter;
    * j! D/ {; t" e5 @% k- }
  141.   *szPath=0;. X  q3 g/ k2 Z* w
  142.   strcpy(szFull,szFullPath);
    6 B/ W4 l! j4 W! p- Q, F
  143.   token=strtok(szFull,"\\/");
    + V' ]4 z- u) ^+ p+ b
  144.   inter=token;
    4 \! Z* ?- x1 u3 H/ C
  145.   while(token=strtok(NULL,"\\/"))
    $ n. v+ X! k* X
  146.   {5 r. r5 u' B1 U3 Q
  147.     strcat(szPath,inter);
    ' {  K9 ^" H7 _
  148.     strcat(szPath,"\");
    ) G- L; e% N# G$ @8 @' ?& P9 I
  149.     inter=token;3 R9 c1 ]5 ]+ s
  150.   }7 W" I! X/ ~; F1 ~
  151.   return strlen(szPath);' E1 a7 W* r1 W4 g
  152. }
    2 \9 z! s. d6 [7 q: M

  153. ; x3 r1 K; X: x. S& c' n
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); N8 E2 \+ h' B5 {6 _
  155. {
    - i& U4 G% `. i4 w% M3 W
  156.   DWORD attrib=GetFileAttributes(Target);
    ! n- T! F+ y4 b8 @
  157.   if(attrib!=-1): c0 v$ C% F/ l" o' T6 t
  158.   {
    % s; Z" h! u$ n. o- G1 t
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , m9 @6 |; z* }# ^9 S
  160.     {) Q* X0 A( d' n3 h
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);( Q1 x& F$ E. o3 m1 \2 ~2 \8 b
  162.       SetFileAttributes(Target,attrib);
    2 Z' w" B6 Q# i1 s3 e6 |% A4 ?
  163.     }" q1 D3 e0 Y' S, {  S* ]/ m2 Q
  164.   }
    ; Z3 K' o6 k! _  g7 _; R; [
  165.   CopyFile(Source,Target,Erase);
    . k' a/ x, b. L$ P* z1 J
  166. }
    : F( r3 s; [' \) x# \/ X  c, `

  167.   [9 T1 k/ [9 C# L" j+ }
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)8 z2 ~; c( y# ?
  169. {
    ; B3 `+ U. b1 G; V5 p1 N' |# z
  170.      FILE *fp;: k8 u* a5 Q0 @- \. Y& @  x- X
  171.      char  szBuffer[8192];
      H8 O  B5 S4 K9 t) j
  172.   va_list  argptr;2 A! a% Z5 c+ S# ?, N& Q* D
  173. ( t0 y2 S: Z# r6 U  M$ Z
  174.         va_start(argptr,message);) f3 Y/ O# \& j( q3 }$ _
  175.         vsprintf(szBuffer,message,argptr);
    3 _$ Z: J( M% P. t1 k
  176.         va_end(argptr);5 b) \$ a8 g+ K
  177.   fp=fopen(FileName,"a");6 a, P+ u5 A/ v" N2 y: f1 D
  178.   if(fp)7 I# Y( u9 D9 O1 b
  179.   {# L; f0 U7 q9 `! i* m/ n' [9 }
  180.     fprintf(fp,szBuffer);
    1 m0 k/ f% Q2 n7 {5 b# P1 |
  181.     fclose(fp);
    0 D$ M" C- O4 |- P# c) c: Z
  182.           _flushall();
    & L5 [4 Z" R- J% i
  183.   }( z0 a" w; [% V2 n+ S
  184. }
    & [, K: ~9 U, L# e  g
  185. " z! u1 j3 P: Y' k9 q7 D. W
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    , ?& {' Y3 n3 L* p4 z. s7 M
  187. {
    $ V9 ~5 Y5 L0 @: U' m+ {3 a5 {! \
  188.      FILE *fp;
    , }; h4 Q: T' D
  189.     DWORD  attrib;( \4 j2 f: C* W0 `8 O$ }( T9 k
  190.   attrib=GetFileAttributes(FileName);
    - B  o' W; {+ A' y8 N
  191.   if(attrib!=-1), D# \- {/ L0 C' I2 z
  192.   {0 T4 V6 H# a0 U0 Y2 N+ Z  g
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);  C( Y, u) l9 s; J" D  b
  194.     if(!SetFileAttributes(FileName,attrib))( _) ]: J2 C5 y+ V" W+ i& L3 j& H5 M
  195.     {
    . {2 E$ ^, ~; y) U+ g3 ?( j
  196.       return FALSE;
    7 C4 A$ u, V# x5 k1 t7 V+ I
  197.     }( z- N& {2 E  M- q0 ?
  198.   }) I5 D6 O6 x5 `9 K' `3 o
  199.   fp=fopen(FileName,"wb");# @5 l6 F! ?- o& d
  200.   if(fp)4 U: U: t: w$ x9 |4 X
  201.   {
    2 \! i  f( s" _0 ]3 I7 p; [5 C
  202.     fclose(fp);
    * @5 A6 s' v7 H4 T) q$ [% P+ U$ ^
  203.   }
    ( U* K7 a/ l4 i( q) ]
  204.   return TRUE;) Y  U8 H0 f# ?# _' {
  205. }: H- P' A& T9 `

  206. + p  g7 S: T  m8 N( x% M7 y1 z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ( F0 L- W: [# y. U. V9 H4 G; U1 r
  208. {
    . j: c# p( O: u( i
  209.   char filename[MAX_PATH];
    , n4 o4 D1 o1 D" ]' T% g- C
  210.   LPUPDATEFILE file,olds;0 [2 d9 z' Y7 p9 M* L5 v
  211.   std::map<int,CString>::iterator i;
      j% C# Y1 ?+ n; O" K
  212.   std::map<CString,LPUPDATEFILE>::iterator p;- |' d8 @6 Z0 ]0 E6 I5 ^; B* b
  213.   std::list<CString>::iterator l;8 ?7 p7 H3 H! {  a, w% T0 h1 A7 S2 Q

  214. 7 u9 O7 p. s6 v. ?: j( h
  215.   if(bFirstUpdate)" b: s0 n: t% k
  216.   {
    $ R: R0 T. ?2 l% @
  217.     dwCurrFile=0;8 L% v6 A7 U( ]) Q6 H
  218.     bFirstUpdate=FALSE;. M$ }/ {: T5 R. G7 R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())( @/ t6 o" X! n. e4 `1 `: ~
  220.     {7 k; \6 z) u" f9 ^3 O( p2 f1 i) {6 _
  221.       dwTotalFiles=UpdateLocal.size();6 J# d$ y- }/ t
  222.       dwDownLoaded=0;" C% j: y- F$ m7 E' }  A
  223.       bSilentStep=FALSE;: g( M8 Q* _) `
  224.       bCompressed=TRUE;+ y8 }& l: x0 q3 O1 q; \
  225.       strExtLocal.Empty();
    ' M# B) q7 G. g8 s
  226.       strFullName=(*i).second;
    / K8 M  o; ~9 m3 K* `
  227.       dwProgramState=AP_CONNECT;
    . T# w4 c' i: A
  228.       return TRUE;
    , R9 Y0 f8 N3 d3 F" X/ R0 o
  229.     }6 E1 |. C4 e6 C2 C
  230.   }
    , \4 \' F. j( O8 C& u
  231.   else if(bRestartUpdater==FALSE)# L: X8 I0 s/ K- Z6 G- Z+ x
  232.   {
    4 J' e+ y1 i. a0 ?
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()), \2 j* b& Z( @/ c, Y( {" o3 x, W
  234.     {- Q% F" {5 g, R/ @- b
  235.       file=(*p).second;
    ; C; z$ i4 w7 H( d4 S* H
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    8 N) l, Z/ v: p; O9 V) _
  237.       {
    $ E! D2 m! `" s
  238.         olds=(*p).second;
    - T+ m# Z8 c  j( K6 ?
  239.         olds->vers=file->vers;. i; y) ]  ~1 |- ]/ f
  240.       }
    6 d$ d# B' W' x4 [( V: m
  241.       else) r% L/ k, `! ~! n6 \
  242.       {
    * o# A2 d; A4 q; g& W! K/ t
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  V+ a# Q) E, s
  244.         memcpy(olds,file,sizeof(UPDATEFILE));9 A9 x# v2 W' t# \/ j* Q- Y
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));- @1 s& i6 ^* g% U% t' f
  246.       }9 f8 W( k7 o: n( F2 h  R: s$ g: x
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    4 a! d  G1 I" w! i- N/ W
  248.       sprintf(filename,"(%s)",file->file);
    : \! C  F3 @$ Y4 c
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& c( p  h- K% q; [+ L7 g, Z' ~
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    % x6 U/ p) j7 C
  251.     }- \' Y5 {! y% `, ]# p
  252.     dwCurrFile++;% u: Q" D2 \& J. o0 ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), q4 V/ p1 t4 ^) D. O
  254.     {, ~" i, {& B* V7 H6 D
  255.       bSilentStep=FALSE;- O5 d+ y5 \" K6 D) n0 O& R" ]
  256.       bCompressed=TRUE;. R  W+ S$ y2 L  M
  257.       strExtLocal.Empty();
    : B& Y  p( ]# G9 }; ^% t# m
  258.       strFullName=(*i).second;+ J4 }" U: r  m+ R7 B1 K
  259.       dwProgramState=AP_CONNECT;) ~8 k/ C1 {9 m  @0 {: {! y9 u
  260.       return TRUE;* r2 W0 q1 J  n" ?$ _" o4 ?6 T
  261.     }
    ! u  n: O4 K( n5 S
  262.     if(!bRestartUpdater)
    : H6 U  f# G' o9 M0 ^1 L) t
  263.     {7 ?; [  ]3 r: U) P: U
  264.       int iCurrSize,iFileSize;( h; c- |; z( n! S3 E
  265.       iCurrSize=0;, s& A9 Z( X( x! f5 u& K2 l4 u
  266.       iFileSize=UpdateList2.size();
    ; \! C4 Q" p- R( ^1 W. K3 |' m$ C
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    9 `  j) ?1 J& E) J
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");% A3 z) K5 L! l; H9 ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");- z+ T2 t# {1 A1 W6 E
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, K" T# b) T9 v: q3 a* W
  271.       Fclearf(".\\update.dat");
    " [6 Z; V( u2 }, b  A
  272.       Fprintf(".\\update.dat","Bloodyf\n");6 L3 g- H2 q3 J! W0 _; P5 q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)& G3 s% W: M5 M" C# ]) ^" C0 q
  274.       {2 d8 g' C, q  n* W
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    * X0 X8 \, P7 n
  276.         {* k$ q4 O  i  N) a! y# _1 B
  277.           file=(*p).second;" B3 h6 p7 \, x$ }4 T& @5 H
  278.           sprintf(filename,"(%s)",file->file);
    " s+ A! Q2 K/ @: [
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( D/ Z& p9 Y& T, X, n% s: }  A
  280.           iCurrSize++;
    ) T5 L" e3 s$ ~1 R* g' p; A8 J
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));# s; X" D/ o$ y* e
  282.         }. i# W; ^0 |" I
  283.       }
    ( y! S" o* c1 }
  284.       unlink(".\\update.txt");
    $ u# {8 X: m& N: m
  285.       unlink(".\\update.tmp");
    ' ]! s; F8 L& Y8 `2 f
  286.       Fclearf(".\\checkversion.dat");
    , T2 o' Q3 b( C
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);9 c& L" Y8 B, v/ J- A* o
  288.       if(UpdateLocal.size())! Y: \: H1 N3 D' [! U$ V8 O  ?. A
  289.       {% m, P' F4 E. V, @
  290.         UpdateLocal.clear();& w5 r0 ~1 V" G, I5 l- A
  291.       }
    1 o) k2 Q. r4 H: C  Z4 Q
  292.       if(UpdateFile3.size())
    . b0 ?$ G  E& w
  293.       {9 D- p: ?. q  b" e
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" z4 k- h& q9 M  j
  295.         {( p) d$ \0 m+ @$ {6 O
  296.           file=(*p).second;
    / H, w1 t9 O- [; [4 A9 B
  297.           free(file);
    7 P$ r+ s, g* C6 Z$ |) }% ?' e4 f
  298.         }
    / }! `; O$ h4 C! t+ |
  299.         UpdateFile3.clear();
    ! j; j% C4 A% ^: b
  300.         UpdateList3.clear();- J  }  z& F% h5 T5 O" V
  301.       }. S- x2 S( q( S+ P
  302.       if(UpdateFile2.size())7 y* j, ~: a  m
  303.       {4 z4 s) e' }2 g- x: `, E- ~
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * P! n- B2 O/ i2 M. k/ [9 O
  305.         {
    $ v. B% F' g) Q; L
  306.           file=(*p).second;
    ! |) E' E  b' c) V1 {/ k1 J% o" r% \
  307.           free(file);
    + a9 S+ h8 N* ?& h. @: e' [, `
  308.         }- s2 g0 D1 \7 |( O+ r
  309.         UpdateFile2.clear();
    1 ?, F7 a1 @5 `3 v8 C* E7 u6 J5 k
  310.         UpdateList2.clear();2 h9 s3 J7 E+ k7 t  L5 ]
  311.       }
    7 a2 @3 _# }. O; R- Z
  312.       if(UpdateFile1.size()): R4 e8 W$ W; k( F' k- ?# ^
  313.       {, e; m  N" F6 |- k; Z8 t* C8 s
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # B  G: {: ~9 U* F- ?* B8 r
  315.         {
    4 I) w  m, ^+ X6 T! h1 S' x
  316.           file=(*p).second;6 s1 G2 _, ]  ?2 C( Q
  317.           free(file);3 [. X) X5 T( y3 }( V
  318.         }
    $ S' n7 f! ?5 o
  319.         UpdateFile1.clear();# z) @, {: T. [5 G! `) o2 a$ n! Y8 M
  320.         UpdateList1.clear();+ X5 N$ _& i$ m  i, T/ R2 C3 G
  321.       }2 M1 [" n1 }* {) S
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));7 a8 }9 i$ }  W! O' ?# @. t
  323.     }' ^5 B2 t8 c4 _$ K
  324.   }
    ) u  A0 o- y3 v, R
  325.   return FALSE;( Y6 S+ w0 Q8 i! B
  326. }/ P! s! P$ w5 d' K0 x, n3 Q) ~2 g6 G

  327. ' Q: o+ x6 Z% ?0 z6 N; B1 w; ~
  328. void CRevAppApp::ClearAll(void)4 R7 J' x) b9 f- i- m/ l
  329. {- z3 R; ~2 k2 b* M
  330.   LPUPDATEFILE file;9 Z) x! Q* B: A: Z  x/ [( {
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    , O' G- C& o" R/ p" O6 I  J
  332. " T. j+ |+ l0 M
  333.   if(UpdateLocal.size())
    1 E. m9 L) t" X1 R
  334.   {
    - i/ A# y+ q9 ]& h" _
  335.     UpdateLocal.clear();9 z  t: r* S7 E! A4 \
  336.   }! F* \0 n, T9 ^  J; Q
  337.   if(UpdateFile3.size())
    & Q& |6 l# k  c. V
  338.   {' G8 J2 n" I" n5 c  v
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . ]8 A/ u1 j3 ]+ F, [( J  R
  340.     {1 p5 G: T" P, q: f' ]
  341.       file=(*p).second;
    ( N* A: C9 b3 P& m
  342.       free(file);
    5 \3 D! E' O' t: |( y: a# V( _
  343.     }
    - w) c% P5 `9 ?7 W( ~
  344.     UpdateFile3.clear();
    3 x9 O+ @# v* Y2 n% V
  345.     UpdateList3.clear();2 a& R# \7 x: K: T8 x
  346.   }
    1 \% L# c/ \+ c; Y4 T$ T% T
  347.   if(UpdateFile2.size())' j& l5 `  w, Z2 ~7 A
  348.   {+ v% x& x; K# [8 ^  C
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* p+ K1 G1 J5 V. t% y
  350.     {7 S# |9 k, j- y" k5 C
  351.       file=(*p).second;% }) e' {5 j% c0 v! O, X9 q* @, q
  352.       free(file);2 l. H' P2 X7 w7 k# T8 ?
  353.     }
    - X! x5 Q# J7 Q* S9 G
  354.     UpdateFile2.clear();
    % ?. m% o( C4 j6 H/ @) f
  355.     UpdateList2.clear();& [) m7 G0 ^( ~# T; k2 p1 U( W
  356.   }
    ) ]. V" I4 Z4 ?, }5 [
  357.   if(UpdateFile1.size())
    " W# x1 K: |' U8 H& I5 }
  358.   {. [& r9 Z; f3 G2 E" N( O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' p2 m! ]. F7 M( N- ]( `  Y
  360.     {
    + t, q" V* Z% T; @  h6 m
  361.       file=(*p).second;+ F; f: g" K8 u& b) D# L
  362.       free(file);
    3 m' \" e! r+ r2 l! ]( w8 d+ w- E
  363.     }  }2 G+ V- @; Z/ O5 P
  364.     UpdateFile1.clear();
    8 `8 I7 E1 a. a, }2 ?# c- N* e
  365.     UpdateList1.clear();
    - S' z" a- }; Q) v$ ~
  366.   }, C; z1 n; R2 X
  367. }  
    1 |9 S. X. o# S5 f
  368.   - X2 A1 B6 |* ]* b
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 t9 B9 \7 f0 C
  370. {
    0 r9 q( g. T* n# {
  371.   int c;0 e3 ^! f' m- |* ~
  372.   LPUPDATEFILE file1,file2;! p' A, ~6 T  o- K5 D; _
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    8 G4 d# B4 [, b6 \: Q5 n1 m
  374.   std::list<CString>::iterator l;/ {) l8 x2 E9 ^9 b# h

  375. 5 x- T4 w( Y7 ^  P3 R3 H
  376.   UpdateLocal.clear();# I7 V: }( ?; T8 C# O- v
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
      ?4 z% G8 ~# p& K' }' w$ Z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);% H' n4 h3 o9 ^$ i) h) l9 U
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);* c8 e4 z) u) [  A4 U( `) }* N
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);( k+ ]6 ]; Y3 u) M- n6 v9 A/ O1 X
  381.   if(UpdateFile3.size())
    ) z6 B, t- g4 e1 J# I8 r
  382.   {
    2 P3 l: O2 w9 K, q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); V/ G) i& l: m" V. M, j
  384.     {
    4 j6 ]* i& W: }( [
  385.       file2=(LPUPDATEFILE)(*i).second;( I2 d7 {$ x2 S) _8 X
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 |1 r. ]2 g& l2 A! U% H2 r/ F( O
  387.       {
    ' j% \6 v" z# ~5 H' p: z$ F
  388.         file1=(LPUPDATEFILE)(*p).second;; K# v- L5 Q+ v5 p* w7 J2 b
  389.         file1->vers=file2->vers;
    " Z6 y$ l1 [+ R
  390.       }1 N+ Z. k1 `0 f% O! @" i' ?
  391.       else
    4 j$ B% W9 G. |
  392.       {3 v+ j# L$ [) k2 ]8 t
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# }$ u; y0 M% ~2 `* B/ N
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    4 F8 r, S, ?; ?4 y
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    8 \. X+ X  L4 Z  }6 ]
  396.       }
    2 T# K! N1 h* n1 {. O# F1 ?- s
  397.     }
    ) R. F- s5 g. `4 @, v
  398.   }1 a/ V4 _4 d, ^$ B, _- ~
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * B  K2 G* S5 N) N3 ~5 v, d
  400.   {
    * f# m+ e$ q1 k  Z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    . T  _, Y3 h) e, ]
  402.     {7 p4 z9 t+ G, _/ `  P
  403.       file2=(LPUPDATEFILE)(*i).second;! S) _: N. H) u1 H1 _- Z9 f) J) U- _
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* T$ Z0 r  L1 K' J' Q
  405.       {+ L# W9 \8 C; M6 a6 P  q& e
  406.         file1=(LPUPDATEFILE)(*p).second;: K$ ^# V9 G, x& X4 b
  407.         if(file1->vers!=file2->vers)
    3 F; s8 `4 |$ I
  408.         {
    $ H0 j3 v+ q& k4 @
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
      `+ s0 Y$ W% u3 t/ M0 b- Y
  410.           c++;
    ' y' s0 M- r8 A4 x- j2 X& p) i
  411.         }- J7 M( j; K& ?; v
  412.       }
    : l9 M+ P1 M# n" J/ {
  413.       else8 ]) n- V& t9 i  A0 P. ?! G
  414.       {
    , y% h$ m- G/ k. ^4 d* U
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 W* X; m6 c% A( |- T7 R* F( F8 R
  416.         c++;' c% v3 l6 y; K3 }
  417.       }0 g4 i5 M% E: a$ U, C/ V9 M# I
  418.     }0 t! h) g1 z& E! d
  419.   }9 x8 Q. P- w2 S; J
  420.   unlink(".\\DownLoad\\update.txt");
    , l, O' E4 X3 \) D4 K: k3 g4 v
  421.   if(UpdateLocal.size()) return TRUE;/ X( Y( ^( w8 q. ]3 a
  422.   else                   return FALSE;
    : ~9 S9 ]3 s9 N8 H# n; B1 ]
  423. }
    4 N& M" t. O' S

  424. 3 `  C/ d; ?" `2 u) o
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"; \# D* J+ p5 e4 I- l* D' w' ]8 F
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn") ]3 i; W1 Z& S7 B; ^" m

  427. , K% F" x7 h; R& r

  428. / c/ U7 V2 z  M7 a/ L& I2 G

  429. * ]! G6 e5 l) {% ^- [! [3 M3 D
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 w: w  y+ }2 b% Y! n0 E
  431. {. I, q1 A% ^* K( y6 T9 m# z* o) _7 W
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ; o3 w% M' @* M& ^. c/ [3 Z
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' _" q" t3 J  O* N, d
  434.   {
    * }3 {$ m- u  E/ ?7 ?% ]
  435.     char szLanguage[50];5 U# l8 L7 f7 V- j; O
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 R0 x/ F* f* ~& X" E. m3 Z( W
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 @! }& Q) @' [. _: T
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ `/ e! }1 u2 d; C' {
  439.     else                                   m_iLanguage=ENGLISH;
    ' F% P  @& k% o6 z$ l
  440.     char szRegister[100];- M- X3 r) X0 j! h
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      M* g  H+ n/ X- o6 ~3 A6 \5 e2 ^, h3 F
  442.     strRegsName=szRegister;
    4 w& A3 C! G1 {( w  e) Y9 l
  443.     char szPatchURL[100];3 S! a' e. j, t( o& B# A3 e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 u0 x8 d5 L) P' K
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);8 {2 ?7 c6 |3 i
  446.   }1 ^7 f. t3 c7 m3 {
  447.   else
    ) B2 e- S0 u8 ^/ {+ B# A
  448.   {9 W+ Q6 x& K4 m2 P5 ]; f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ; ^7 D- L+ w2 `# Q, J0 _& Z
  450.     strRegsName=DEFAULT_REG_URL;
    " I8 m* r5 t5 u4 J: F! A' `; n
  451.   }
    + y( u6 L- B- Z5 C) w8 B& ^* C
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 l4 U' B9 b4 T
  453.   {
    ' J8 ~6 a$ v; G, Z  b; Y
  454.     char szIP[50];
    , D% N; O6 A& u  M+ m0 U$ J
  455.     char szDIR[300];
    , e' c* [3 S7 b- V
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    " N" h7 r8 k3 t* A* ?# b
  457.     {( I/ y; F5 o& a! o6 o
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");. o: N: D- d5 N" z" }  e- c
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");9 M5 V1 Y# s! i, M' P% [5 g. s
  460.       strHostName=szIP;% K7 r; f* B8 r
  461.       strHostPath.Format("/%s",szDIR);
    6 y0 c; R) m2 k7 H
  462.     }
    / {" F$ m' |2 Z8 T- M
  463.     else
    2 |! K3 ?* G- w7 g
  464.     {5 s) D. V' E" e$ a# X' d
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 m  `* x( P2 [/ e2 ]0 t. y. F
  466.       {
    + I/ E- A' m# O. m
  467.         char szLanguage[50];6 L4 Z% b+ ^6 T- ]" Q4 a
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      I- Z' M- `3 t% {  Y! `
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & j* `" D" G6 w1 t
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' Y, y. U4 V% {" ~  z
  471.         else                                   m_iLanguage=ENGLISH;; ^: ]3 q7 Q+ Q  U+ u9 T
  472.         char szRegister[100];+ I% M- g& u* g  h
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- V6 t' o" F3 h
  474.         strRegsName=szRegister;
    ; ?  Y7 y6 u; a& t3 r  g4 k
  475.         char szPatchURL[100];6 x0 ?4 I0 Y. ]+ a# w' l4 v0 d
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , R, F( [4 r7 v( w, p( Q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 F, I8 D( ]7 ^
  478.       }
    % u$ `& d  U# y6 i$ I
  479.       else
    . h9 O$ i5 w) ~% h) _, @' k7 k
  480.       {
    . C/ r$ n' t/ r/ s
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % k3 v1 s1 m+ C: {% a2 h# ?
  482.         strRegsName=DEFAULT_REG_URL;0 S0 T7 I, D# O! X0 B
  483.       }3 d, D' g* |9 l9 ~, k
  484.     }
    , R/ z9 a( D5 m8 d
  485.   }$ N* q* r% v5 A9 `5 m+ b  i, e  |
  486.   return true;' f4 l, q/ D) ~! X
  487. }
    8 q# o) t/ m  Q; V% e! F3 S4 u
  488. 2 ~; U* K& x4 D  t$ b: T
  489. #include ".\ZLib\unzip.h"
    + D9 r; M9 T" W3 b1 n9 O; R9 w/ n8 ~
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);) ]' x4 R( n1 W$ Z' U" e* Z
  491. /////////////////////////////////////////////////////////////////////////////
    7 P1 b  L- V3 S6 i1 c. w
  492. // CRevAppApp initialization" p& o8 M" d: m+ a, V

  493. 0 z0 z6 ^7 A% Q
  494. BOOL CRevAppApp::InitInstance()6 B# `, B! x% s. c8 H' N5 v( R5 t
  495. {. f) R+ E" z5 }# j2 b* D' u' ~
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];! T. F$ d7 j  S( x

  497. # B8 {: B$ }( U/ W7 \
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    1 m# ?+ s# |' ~- I' |! C1 @8 q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))8 N1 b( o' H# |9 e# y
  500.   {
    1 L/ l$ W, B: N# e( ~( X5 Z$ a
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");: z, [7 i/ A7 t  v. u& c
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: G6 C- j/ F* a1 |
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))( _- _: Z8 r; T! _* J* p! C0 E
  504.     {: j" L, R  m) ~2 C" A
  505.       strcpy(szPath,szPathTarget);
    6 `# G% M! J' m$ Q
  506.       SetCurrentDirectory(szPath);
    2 B. e; E# @0 d9 H5 W4 m1 m8 `! ~
  507.     }
    8 Z: X% ~: E% ?; |% d
  508.   }0 j3 h( H: l) e& [
  509. #ifdef _DEBUG
    5 G% N* _  \! T2 g
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& m1 A/ ~% [& e; q6 q" e
  511. #else
    ; X* D' \* u1 Y4 p& h
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( ]( c% {/ L( v. T$ L$ b/ Q3 v; N
  513. #endif
    7 C9 _* L' @, G
  514.   {2 o1 F$ k) B. F6 Q% c2 r
  515.     char tempFileName[MAX_PATH];
    % m& h  q, m6 t1 p
  516.     strcpy(tempFileName,szPathSource);& e" w' ?3 A, S9 |7 ~! }! V
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ; b& N% q& N$ j
  518.     strcat(tempFileName,"\\$CSUpdate.exe");0 R7 H5 r( T! |# g
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);5 H; z" f! u  q- |+ Y7 C
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    + q7 a1 C! Y; h3 z1 t* ]$ B1 V3 L" S
  521.     return TRUE;
    + W, o, b/ _+ T: `* f+ U2 Y- x
  522.   }
    - ]% \( {" A% q' ^5 v5 S. n2 T3 e9 _
  523.   // Nuke 0118: Delete run.exe* z: v1 y8 A" U3 `: B
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );* h% z+ i, ^0 l9 _/ I7 I/ g
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");5 B) N' P# G9 m- T5 ~: {: R1 D
  526.   if(!ReadCfgFile("Config.ini"))0 t" E, `! i- [1 [" ^
  527.   {' I; Z0 f) O. m3 r
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);- Z. u" L$ ?# O& S4 Q" z
  529.     return TRUE;
    ( l7 @* [& Z* \8 @9 G
  530.   }
    : ~4 i# H+ ]$ V1 \3 L0 {/ t2 ~
  531.   HANDLE mutex;
    + O& _& N9 O6 i0 X& l8 Q! j. n
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))5 E( L1 I' f* i( h
  533.   {" }" G4 l: c& K+ b7 S6 o$ Z- t
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    6 h0 c4 Q! T9 }; n
  535.     {
    2 L, Z  W+ O% p/ J9 o, y
  536.       CloseHandle(mutex);
    . Q, V. X1 \$ a- @
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* z# V# F, a! |% R
  538.       return TRUE;
    . U( t% a2 S& r9 g2 B4 G! v, U
  539.     }
    3 h/ h2 E/ D' }$ v5 N- d
  540.   }  
    + P5 ~& h5 a. Z
  541.   CloseHandle(mutex);4 z9 F. A/ t% ^( Q0 V2 d

  542. * O: U4 }; \6 u% K# W* `2 v
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    : O9 W& b1 b. [( O4 s

  544. ) @8 F6 o: d* ^& R
  545.         AfxEnableControlContainer();/ d' d( P" T! `& b

  546. ' K- u+ U' A8 X! w
  547.   bCanUpdate=FALSE;  M4 c. B# j5 X  t/ s
  548.   dwStartUpSteps=1;" m; O- M2 y! W0 _& l! F6 T
  549.   dwProgramState=AP_NOTHING;. z0 E& \3 V& o

  550. % e) ]" z+ j( j1 ?: A( y3 h' Y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);% k+ |! B1 {0 r0 y+ N* b1 D
  552. " B& b! Q! b! P) B7 Y
  553.         // Standard initialization1 d4 k- ~3 n; l4 T5 `
  554.         // If you are not using these features and wish to reduce the size$ O" D3 v9 a9 `
  555.         //  of your final executable, you should remove from the following
    8 M, n* D, L6 _: `7 e. e& D8 I
  556.         //  the specific initialization routines you do not need.
    8 M! X$ Q/ O  t4 s* L. l" s
  557. ' n6 q8 Y/ q7 L" d
  558. #ifdef _AFXDLL
    $ C$ b% f6 D4 N1 x2 s
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    8 n1 r- D2 B7 e' H1 \# X
  560. #else; l; W0 |4 ^6 p, K: ^, _
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    % z. R6 \  S* {& B$ A+ B( X9 _  W
  562. #endif
    , N: E/ X# ]5 W) d6 |

  563. 5 j/ D( y3 O- r/ L2 b: s
  564.   dlg=new CRevAppDlg;
    + z& J2 s4 C) G+ r3 _
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    + f. b# ^; j( K9 X
  566.   dlg->ShowWindow(SW_SHOWNORMAL);! R% I3 d4 v; {4 s$ h
  567.   m_pMainWnd=dlg;
    % y/ P/ X' V/ u2 m( S! C
  568. 6 D" J5 Y7 ^0 Q4 {1 [* P) c  N
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);% E% P  y: }- ^* l4 r
  570. / n" W$ ?9 c/ t! v& W" X# l, z
  571. //  GdiplusStartupInput gdiplusStartupInput;- J$ N- G& R" v! ]/ y3 Q8 u
  572. //  ULONG_PTR gdiplusToken;
    6 g7 e7 X8 B2 D) d! u
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    8 b! {+ g; n, c

  574. - f; V6 ^' i& E5 _- Y5 y% k! a6 i
  575. //        CRevAppDlg dlg;
    7 V; r9 }- M6 k3 C2 d
  576. //        int nResponse = dlg.DoModal();0 Z8 T7 X5 _: p0 v: H7 _
  577. //        if (nResponse == IDOK)
    8 V5 S* p/ S" l
  578. //        {
    , [$ F4 {0 j; ], d1 e& t$ u% z) K
  579. //                // TODO: Place code here to handle when the dialog is
    6 }! a& J9 i( ]0 `* \/ d% W5 n  n) \
  580. //                //  dismissed with OK
    % \" n9 L$ c/ {# W
  581. //        }; C4 S' _* ~$ Z# F( ~7 q
  582. //        else if (nResponse == IDCANCEL)" b1 w# n6 U) V7 d/ H9 r( p
  583. //        {! Y7 H' A$ v, w6 D
  584. //                // TODO: Place code here to handle when the dialog is
    2 j2 o, t& W- j
  585. //                //  dismissed with Cancel
    $ b- R+ I& \) k8 [
  586. //        }
    0 [* W+ b. B6 V

  587. 3 R0 H. L/ E5 S
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    0 D. F; t% B: H1 a1 ~6 G2 C
  589.         //  application, rather than start the application's message pump.
      I; a0 v0 m1 E. O4 W4 q
  590.         return TRUE;5 o: {2 o' p# P5 m) r
  591. }
    / h! I& Y5 |/ o$ g3 i. a2 p
  592. & j5 d7 l1 X8 U  P/ _
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    3 R  M& X; p/ X$ ^; @
  594. {: |( f! |- }4 Q
  595.   int i;
    2 J- W! Y( f, e( c$ x+ I; Z
  596.   char *szRet;
    ' n4 U: g$ P% M  Z" ~: i
  597. 3 G! z, {6 {9 Y2 N
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ; a, D+ j# Y8 j* t0 Y& i1 D+ ~9 l
  599.   if(sztoken)
    : B9 g1 A) s5 A( a* E" I! Q* Z
  600.   {$ G2 Z8 H* N8 N! ~1 r: M% {% S
  601.     szRet=&sztoken[itoken];8 A. J  N2 p5 g7 [5 O1 p- C0 i
  602.     while(sztoken[itoken])
    # i- t* t) q& Z7 _( R
  603.     {" H; a- L: X" ^  |' Q
  604.       for(i=0;i<(int)strlen(token);i++)
    6 a* Z' [3 `  t
  605.       {
    5 v) A+ |; t( y" _
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]). U+ b- b- o" ~
  607.         {4 X0 O  S% N+ y+ m" R0 G
  608.           sztoken[itoken++]=0;" Q+ l; S" d/ M, q2 {, n5 E
  609.           sztoken[itoken++]=0;
    , T6 X; n4 D: x5 x, o1 [% m
  610.           return szRet;
    . f2 k) O5 i0 Z3 W9 M9 ]
  611.         }
    ' m& Z7 Y' e8 f( T, A
  612.       }
    0 M: c& p( d2 J) q( K5 R
  613.       itoken++;
    : k. }' h3 P! J& K
  614.     }
    ; w! D9 V' n; @. Z5 c4 x5 Q* V$ w/ G
  615.   }6 u' l+ l/ D+ }
  616.   return NULL;
    4 o) W* h, F6 g6 m1 u1 }
  617. }
    - A: X( m& P: V: Y

  618. 4 r6 U. W0 ~* r
  619. void ProcessProc(long Total,long Current)
    * G* \# [' O, a7 D( i
  620. {) k6 {! x+ `7 S9 B1 x
  621.         MSG msg;( Y1 L# L+ p: J9 K$ o) X' K! j
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    $ ]3 _# F% Y2 y, a" e
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    4 U+ o8 y/ \) x  N% Z( u, j" l% l
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))7 u/ T6 {8 @5 e: c4 z6 O
  625.         {$ r; g; {& Z5 |9 l5 ]' m: J+ T! k
  626.                 if(!GetMessage(&msg,NULL,0,0))
    # O* K1 w+ I# ~, j; S5 w  G
  627.                 {8 z. Z1 G1 F# P% r8 d5 w9 \9 [
  628.                         return;/ J4 I. Y& f' o( o( Z
  629.                 }
    5 n* s. I6 o. O4 B
  630.                 TranslateMessage(&msg);
    ; W# I: h( k- j" M0 s
  631.                 DispatchMessage(&msg);  Y7 y- K: C3 A2 ?. Q& I4 C- g
  632.         }        6 W  r+ C4 P( }3 m1 N* ^
  633. }* v( x( l/ _+ E. S# L
  634. . q2 J/ x# W0 E8 F- _! h5 d2 d
  635. BOOL bFirstChar=TRUE;6 s. l1 S1 j0 o1 n8 }

  636. - ?+ k! x& Q3 r. s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    9 E# s: k: J+ G! t
  638. {- j- j7 w+ B1 L8 a7 A7 x) r1 e
  639.         // TODO: Add your specialized code here and/or call the base class
    ! b) Y7 J. b' s+ A$ Z- x
  640.   switch(dwProgramState)- y; Q! F; Y# x6 z6 N
  641.   {; O$ }% Z* m: `, K& q: p6 ~; B
  642.   case AP_NOTHING:# `1 r+ D/ I. m# b- y2 Q" C) O' s
  643.     switch(dwStartUpSteps)8 ]+ _0 G2 a1 F0 `2 w
  644.     {
    4 z0 ~! k: B4 n. ~* `
  645.     case 1:; `0 Q# U/ J8 L/ a* \( [% m/ |
  646.       {
    ( J5 A% i: {' t1 |
  647.         int i;' h* ]4 |3 @2 e+ n5 o, H. p
  648.         CDC *pCDC=dlg->GetDC();7 V: e% Y# \3 B" J* Z+ f. W
  649.         HDC hdcwnd=pCDC->m_hDC;
    + E8 }9 N( z9 A* [3 J" |) p
  650. //        Graphics graphics(hdcwnd);
    & P0 Q$ L, O4 N) l, I- U6 T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");9 E5 C( G9 S7 Y
  652. //        INT iWidth=bitmap.GetWidth();# T8 Y6 _0 A' _& W* q3 f6 ]
  653. //        INT iHeight=bitmap.GetHeight();. n) k! D  |4 _; L( e* J
  654. //        Color color,colorTemp;5 f2 b5 P5 l7 H/ |/ b  E+ I* }
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    # m; ?. W5 |: ]
  656. //        {
    / H* ]) z+ c. c
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)& c$ I/ E4 h9 k9 f, b
  658. //          {( k# v# p( W8 y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    # F/ T  V6 |  m: Y7 {: Z
  660. //            colorTemp.SetValue(color.MakeARGB(' E* o3 c+ ^. V& f. E. Z0 k
  661. //              (BYTE)(255*iColumn/iWidth),, b! U4 N; w/ U
  662. //              color.GetRed(),; A) t6 k0 v4 C/ R! P
  663. //              color.GetGreen(),
    * g' n) D% O/ t, p
  664. //              color.GetBlue()));0 ]0 B0 n3 z' T: H# |
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);6 s7 }# B5 C) ?
  666. //          }
    8 G0 C" @! }# e% ~
  667. //        }2 W$ B+ ?7 X" g: r+ o$ m/ Y, A
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);- Y8 v" ?# Z9 X: y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; g# w$ h0 a" E8 ^
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");- r) B& h, A/ I9 s, l7 C& n
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 ~4 x+ D$ c' S' }1 v1 U* K
  672.         for(i=0;i<240;i+=8)( M. a! u2 A2 A2 B; I* l' D
  673.         {
    ( \' P% Y. M0 A" }+ [
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! l+ \* a; z1 {4 H& {
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & q9 N5 @0 C7 w- `1 j2 l
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 o" l) M! s* B/ Z
  677.           Sleep(33);
    , P3 I7 A5 F4 B. ?7 w9 m+ d4 A. W
  678.         }
    - D2 y2 W' j. z; j7 j) A
  679.         Sleep(1000);% C8 l) K6 x  J- m3 e, B, O
  680.         for(i=240;i>0;i-=8)* m2 W( Y# K% }
  681.         {
    ! K. f0 U, y# e% Z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ ?" {6 I. Y+ L: b' M" E
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 ~" L+ \2 a9 m/ q9 P8 c
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; f$ B: B0 Z" F4 I/ c
  685.           Sleep(33);! A. X6 L! o% Q+ |
  686.         }, j$ r% z& q# s3 n8 m
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);$ E1 N  V4 b' @4 a0 S" e/ F' w
  688.         dlg->ReleaseDC(pCDC);
    + Y* Z4 [1 o; k3 W+ w( M0 v
  689.         DeleteDC(hdctar);
    : R/ g" `# c3 p- |
  690.         DeleteDC(hdcsrc);: E6 Z9 a( Y: O' U
  691.         DeleteDC(hdcorg);& X5 G5 S$ u: ~7 \/ d3 ?
  692.       }
    - `7 y$ a, I/ Z/ c# d+ B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);7 g1 c, t& C' M$ }$ E8 d9 W! q5 S
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");0 r8 i" o, Z; l, k. n' R( K
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");. p) q1 Q9 s- K! T
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");+ S3 p& \( N, Z. e* c
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 T& L: q" h; W% Y7 P7 w
  698.       if(!Dn.Connected())
    & f. w# Q: G- `, ]4 e
  699.       {# e0 ?* ^, F4 h2 P$ H
  700.         dwTotalFiles=1;# `: y8 Z; Y3 V" |$ P( e. F* c
  701.         dwDownLoaded=0;
    + \) J7 r* i6 S4 k
  702.         bSilentStep=TRUE;
    # L- n- V/ w, S% t+ W' v# q
  703.         bCompressed=FALSE;" \: Q, v7 P. `2 s5 d. j
  704.         strExtLocal.Empty();
    + {' v% V& Y9 D! \9 z
  705.         strFullName="readme.txt";
    6 \/ H) ?; P+ S4 z# g% y2 Q
  706.         dwProgramState=AP_CONNECT;
    ! z& E* A$ c/ H4 _4 r; H, d
  707.       }& W8 _0 X2 s9 f( K
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    3 h5 j2 y+ \3 L/ X7 _
  709.       dwStartUpSteps=2;
    ) r/ d( O* L9 q4 U( D* U
  710.       break;0 S' \! j' L! Z. h4 i
  711.     case 2:
    2 I  N1 t: j8 g+ d2 g. g
  712.       {
    & T' Y! i. u4 ^, V8 l- r
  713.         int iEOF;
    - \) c2 ^4 w* Z$ w1 a
  714.         FILE *fp;4 G9 c: c& r4 _7 k* B5 c
  715.         char szString[512];6 @3 k" \: r: f
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* I, K1 A, P) V9 N& X! [1 o. S
  717.         if(fp)
    7 E9 p( u) A5 f5 d6 G. b1 R
  718.         {7 n9 E$ y$ Y* `
  719.           do
    9 O2 q2 x* @- s1 v; k
  720.           {
    ' K, {2 u, X: Z
  721.             iEOF=fscanf(fp,"%s",szString);# X3 D2 ~; ~) A8 `6 y
  722.             if(strlen(szString))
    1 k( L3 h, {9 ]* I6 j$ C
  723.             {& k: y( C2 |% L) }- b" V$ o
  724.               if(bFirstChar)% {0 D) M1 h: y- o- _& K& }
  725.               {
    3 s2 T0 s, T! F+ l& N
  726.                 bFirstChar=FALSE;
    " v- }: g1 N% v3 H2 J# r/ p% }
  727.                 bConnectIsBig5=FALSE;# V$ O: d0 J7 m
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;4 ^# u0 g2 D5 x5 w0 y8 u/ t, y* _
  729.               }; {+ \( Q6 s  l3 e% `
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));( ^8 i( a7 w) U1 }+ n- ?9 {& q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));7 S% b* c5 C0 `5 T# r1 f% G2 b9 d- r
  732.               dlg->m_ListText.AddString(szString);
    ; C. i% u1 M* K( K. ^0 z1 G
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ K$ t) a$ _2 r& r7 q5 l
  734.               *szString=0;  ?2 D, g3 I5 z! p& F7 o/ s% s
  735.             }+ T+ |' y7 c& t; c0 @
  736.           } while(iEOF!=EOF);
    ! Z! a/ l( |' W% ?) c% B4 B- l
  737.           fclose(fp);9 b, }8 t0 x# @4 s- i0 @$ o* r- C
  738.           unlink(".\\DownLoad\\readme.txt");
    * V: s$ L: n# d. O7 s3 Z
  739.           dwStartUpSteps=3;# {1 @! h% @5 H( M
  740.         }
    3 r" X1 J8 Z, d' y0 D. ^; l  q( j
  741.       }
    & k  `* x4 ], y7 [# f! p, E
  742.       break;4 ~5 L8 @4 U1 K, y" l) y
  743.     case 3:9 G, s9 X, T" E" T6 W2 w( P
  744.       if(!Dn.Connected())6 i# }% q6 m) |, _, W. v% J. a
  745.       {
    & D; C! Y# ], ~5 {
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    , [& p# t; w: ?4 _) H) F% i$ I
  747.         dwTotalFiles=1;
    7 ^0 v3 k" `6 P3 b  Q! [
  748.         dwDownLoaded=0;
    ( s) R7 Q, @% n! c3 P) H  N7 Q/ P
  749.         bSilentStep=TRUE;+ V4 M5 N+ I5 c' G6 `
  750.         bCompressed=FALSE;: r& h7 L1 B, d/ v9 W
  751.         strExtLocal.Empty();
    ' }' I: o2 C' F
  752.         strFullName="checkversion.txt";
    + M6 c9 i) @7 @/ L/ p$ H% G
  753.         dwProgramState=AP_CONNECT;6 {" x" u/ V% {, I/ G
  754.       }
    + z% c, H7 k6 m& w) ~2 J
  755.       dwStartUpSteps=4;
    / x2 s. z8 A0 Q/ f; y; N' E
  756.       break;
    3 s/ {0 Y$ g" z: u0 J+ Y- S  M
  757.     case 4:6 u' f0 q7 o# i2 J- e3 L
  758.       {
    ' D" L0 r: G- {0 U+ s
  759.         FILE *fp;$ N" Y& Q" g& t5 Y
  760.         char szString1[128];
    3 v  O# y2 @6 ]/ y, T. H
  761.         char szString2[128];
    : Z( H% h0 t0 Z; V: |) [
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    % N+ S. M) O1 @+ e8 \, {4 i
  763.         if(fp)9 L4 `  ~, C# ^! g3 |2 x5 C) e
  764.         {  K0 P" U+ M3 R" ^& Y
  765.           fscanf(fp,"%s",szString1);
    $ |* d; X# @1 D4 }6 c
  766.           fclose(fp);
    : M. o! {& _" b
  767.           fCheckVersion=atof(szString1);$ u9 X* u2 _. P# f7 y, X
  768.           fp=fopen(".\\checkversion.dat","r");
    & Q. v' Q) H- {2 E; ]" o
  769.           if(fp), y9 i, ?9 }! z! y+ j; O/ y
  770.           {& F+ Q/ R/ ?+ j. J
  771.             fscanf(fp,"%s",szString2);) n- C! v! W- m
  772.             fclose(fp);% j" o3 Z9 a  b" ]
  773.             if(atof(szString1)!=atof(szString2))! Y1 ~+ q6 q8 p. S. ]- O
  774.             {
    # s/ _4 U* W  _! M0 X
  775.               if(!Dn.Connected())+ P4 q& d( i3 L& E: j6 L1 a  @, Y, N$ ]
  776.               {4 F) y- P' L* k0 u% s
  777.                 bFirstUpdate=TRUE;
    , J* N- ^- d' u; A) z
  778.                 dwTotalFiles=1;
    + z# s8 w& @* t2 [
  779.                 dwDownLoaded=0;
    ' V. G  l# h- f% e
  780.                 bSilentStep=FALSE;: e# Z! B1 w2 \6 U0 C! E& m+ u
  781.                 bCompressed=TRUE;2 `6 A" T" Q( ^. ?: @; E
  782.                 strExtLocal=".\\DownLoad\";9 v3 o" {* A& q4 j" U
  783.                 strFullName="update.txt";7 A6 C+ t1 D) \( ]/ m( F  q9 m
  784.                 dwProgramState=AP_CONNECT;- i* v) y" m- [3 }9 X( L
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 F) e6 ^5 _' N( P
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");$ k: F( ]: e! o# x
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");. u; x+ M- l) Q  @! X
  788. - E' X- d7 B2 `( S1 Q7 a
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 M' r: _8 D$ G3 v! f* J* K
  790.                 unlink(".\\DownLoad\\checkversion.txt");& I4 [  o1 p! v  P! s) B) R
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)% J6 g1 O$ d) Q" ^
  792.                 {
    8 B& E" }. y% j$ m
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    " G5 l' V8 |! S0 p7 M5 N4 y
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    , k/ n) r" \/ \# i$ |- h
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");7 D8 }1 p# ]1 M
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 W* e1 L2 P8 b/ C' e0 J
  797. 4 h6 N9 r. Y& a
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, C% b" S; o$ \! w6 n9 p- a$ g& z' x
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! {3 o3 z  b8 I% v; g0 K3 ^
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");) F) l  D& s. e! N3 P" A
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 Z% ]1 A$ f- s8 ^. o2 \
  802.                 }; j4 \4 a( N) m
  803.                 dwStartUpSteps=5;
    8 `/ f" p* V/ I4 }; G
  804.               }* n; |4 M5 I0 U+ m, v. m
  805.             }
    , @$ b$ c" O& O) l8 Y- }( D. q
  806.             else# {* Q& Y) I: f: y) H
  807.             {4 E8 m/ I" [  d+ K% N/ V- y
  808.               unlink(".\\DownLoad\\checkversion.txt");
    & V0 y* p  j& A$ |7 |- w  ]
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ z8 \& z- p8 _- T/ h; n  N$ N! n
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");* X6 X3 A* Z) g5 e/ i9 r
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    " x' B2 l/ N5 g

  812. ) T9 M9 L* W* R# {
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 l5 e0 t$ i; M" d6 l
  814.               dwStartUpSteps=99;& f4 {/ [- A* D4 e& U
  815.               bFinishUpdated=TRUE;  j' b5 V% Z# ^' Q. Y& h) s
  816.               bCanUpdate=TRUE;
    3 [) K$ E% H( @# j- H+ X! Z3 {5 v
  817.             }0 N% J. T8 E7 j' C
  818.           }' m) o; R! i8 i+ \0 L' @8 C
  819.           else
    ' \* P( H2 C! R8 j0 f1 f, v
  820.           {
    ; F, p+ @* i$ ~5 i2 k+ a
  821.             if(!Dn.Connected())
    ( Y. L! Y2 {; u0 V
  822.             {
    ) g, K) s1 _* e1 C
  823.               bFirstUpdate=TRUE;
    : I4 M  q# T" V( s& J: E  d
  824.               dwTotalFiles=1;
    1 A. w1 Q6 p: c7 l. c# r
  825.               dwDownLoaded=0;
    * Z$ _, ^. L4 `0 Z
  826.               bSilentStep=FALSE;
    : L2 `  [% y* K$ K$ e) S8 V  H
  827.               bCompressed=TRUE;
    ( ^4 F! q' \2 F
  828.               strExtLocal=".\\DownLoad\";
    ' n5 ?- v) V( e4 @0 ~  e
  829.               strFullName="update.txt";
    2 B" X. o' T' ~7 H) I
  830.               dwProgramState=AP_CONNECT;. z. k7 z, ]% V' O( p. e* [& b
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    3 H4 M5 I4 ^" e: f* r
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 ]+ I0 ?! T+ b) l2 z' g& _
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");! z# v* i% E0 N% y) a6 \2 h
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 x: a, v7 F+ [% }) k8 y/ c$ |
  835.               unlink(".\\DownLoad\\checkversion.txt");' @- `8 U* Z( L! K7 `  n- Q
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    4 U& Y$ p6 Q% b5 @2 m
  837.               {
    0 M2 t3 T9 W7 u
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    5 _) X2 v* ~8 B9 J! H
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");  R! W+ T5 T$ @6 f3 i8 q/ d
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    , l7 W+ p+ x! p- H& Z8 ?! |; M
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% I% ]; A# m, j+ ]
  842.                 , R; U* f& ^& j
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      F8 w) V. b* A5 w
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % A1 u' ]7 _; R8 M
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");. }9 V3 h3 V7 X
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , O- n3 E+ l9 W6 |  z
  847.               }
    1 t! d6 o4 R1 \8 }" F
  848.               dwStartUpSteps=5;4 ~% [! m8 @7 j) \8 `' h  ^6 ~) K% I
  849.             }
    9 a  Q; B' P; w% M. M- N
  850.           }4 W$ `! D  d1 v; c
  851.         }
    5 E3 [& s9 @1 v% P% N4 e' p
  852.         else. |9 h+ [) p/ g
  853.         {8 s. @4 L% w" D) j& g# p. ~% Q
  854.           dwStartUpSteps=3;1 {$ G' x# k7 n+ C* ^  a: K$ B5 U
  855.         }( W% w3 j3 m5 S  ^. z4 H$ V$ N
  856.       }7 p0 G2 j# i+ |9 W7 p, m2 M
  857.       break;
    / Y$ _9 Q9 W# p
  858.     case 5:9 N  L& v3 r# R+ ^2 j( s
  859.       {
    - A3 }( V, A8 t& L+ P/ c) x5 l" r: G
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)' H. V% G! `+ X6 }2 @+ @
  861.         {
    * G0 ^0 P! W2 `7 q& H9 [8 z; W
  862.           int opt_overwrite=1;2 W$ r3 X4 S3 E, Q. S' X& A  z% A
  863.           int opt_do_extract_withoutpath=0;
    . X# p' p. D: L. _& W
  864.           unzFile uf=NULL;
    1 z/ w$ d- z4 I8 q7 s/ i# w' [

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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