CSUpdate.exe源代码

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

6 _" m1 u: F; |" H& d) ~
  1. / RevApp.cpp : Defines the class behaviors for the application.
    2 M7 M, D( P$ Q. _7 B" F! o( m
  2. //5 s. U3 t/ w- [6 P3 f) c# Q

  3. % X& i6 q7 Y1 }
  4. #include "stdafx.h"9 k+ R7 E, H) _1 z7 _5 D5 K
  5. $ a. R2 V! I9 }) `  k  _
  6. //#define UNICODE9 w' ^9 c' Q" j1 T: H/ V
  7. //#include <gdiplus.h>. D; l1 u% O$ v
  8. //using namespace Gdiplus;8 V  t; T7 M  e+ g7 [5 M

  9. 9 `0 h0 V% v* V
  10. #include "RevApp.h"
    5 v* u8 p. D  l2 ?7 }- ?
  11. #include "RevAppDlg.h"( Q  [+ Y4 H; v  X: E+ Y
  12. / Z& u8 f% M5 V- @, W- t$ N; Q
  13. #pragma warning(disable:4786)' N" N" V, l$ G$ X  m& v2 q5 u
  14. #include <map>6 e5 K+ n( y! Y4 Y: i5 H
  15. #include <list>
    3 I" y+ ~4 ^! f* o( r
  16. #include <direct.h>2 |, r. W) |  M4 G2 E- o+ M* x

  17. 8 y& s; h4 n! h3 g, f; o
  18. #ifdef _DEBUG
    4 n1 }) |5 I8 c- w! q
  19. #define new DEBUG_NEW) V7 a4 _2 t. J) o, e2 W9 {
  20. #undef THIS_FILE2 T$ K1 g5 |6 x) ~; Z. K
  21. static char THIS_FILE[] = __FILE__;
    9 w9 K( {4 g  J- \+ Q
  22. #endif
    # C: q0 n9 |- p: ?" x
  23. #include "SkinResDef.h"3 j. Z9 U8 T+ ^
  24. #include "ChangeBG.h"( D9 b& [& t& l/ n
  25. #include "AFXINET.H"
    : z! c" D" v9 n  E& u/ Y" E
  26. . d2 ^, U$ ~4 H  [8 D5 R% \
  27. #define TRADITIONAL_CHINESE 0
    4 T0 O/ S2 L' m+ j& I. w7 [6 t1 b
  28. #define SIMPLIFY_CHINESE 1/ f4 Z" }& h, @% l: a
  29. #define ENGLISH 2
      ~$ e4 @. s% G, \2 L9 p! P4 V" c
  30. int m_iLanguage = ENGLISH;! G- K% W. P5 X
  31. /////////////////////////////////////////////////////////////////////////////2 y4 C% b, f; k6 U; |1 ]8 q+ ^4 p7 ~5 M
  32. // CRevAppApp
    ) l" i0 }- k6 v% y
  33. 7 V; V! [& ?- C  F
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! |' g; Q; R9 `" k
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    6 h5 d* n( w' t5 O0 {2 [
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. m' t( L1 q* `
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    9 O+ V" O2 ^6 ~$ T# _2 t
  38.         //}}AFX_MSG
    , j2 T) @! t! @) K% J1 b6 y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    8 y' B: e4 V9 W* Q+ v
  40. END_MESSAGE_MAP()/ p" |& m3 O' O* {, M
  41. # W: M! g1 E% W  b3 t4 P
  42. /////////////////////////////////////////////////////////////////////////////
    4 j. N3 O1 D! |6 K  F8 D, n
  43. // CRevAppApp construction1 r% A$ [) _5 W. ^1 q( g

  44. % J7 ^6 h+ q$ P% i* o2 E6 G- e+ \
  45. CRevAppApp::CRevAppApp()0 P2 ]5 n  [+ @0 n1 f. y7 b7 {
  46. {
    4 A- \- U  o+ P1 G; X
  47.         // TODO: add construction code here,* G' k/ B: n: |  N
  48.         // Place all significant initialization in InitInstance$ H9 F1 y& g& }& y+ ~+ o
  49.   bDisplayIsBig5=FALSE;0 M4 Q( q/ b4 R) Z2 v( \
  50.   bRestartUpdater=FALSE;
    - C7 T8 I: K8 S8 X
  51.   bFinishUpdated=FALSE;
    7 X0 q' W7 f% v8 `% m) I  r: S/ K
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    . U' t" Z6 u5 Z8 t1 i) O
  53.   InitChangeDataBig52GBKS();
    2 y& z: o* X7 P( b5 v+ E
  54.   InitChangeDataGBKS2Big5();
    * K$ l/ f" O# B- U! \$ D
  55.         //
    ; @/ I" [# R# e( F; q. Q, P
  56.         bClickRunExe = FALSE;/ g& f. F& }* v$ v) C1 `! j  c" o* B+ S
  57.         //
    1 x. T* Q4 M& G5 N
  58. }
    1 R; @1 k" g- B' n
  59. 0 H2 ]. Q5 R2 D$ y$ W" a# |
  60. CRevAppApp::~CRevAppApp()4 W7 W: ?& j' F2 X
  61. {/ g) F4 |) l1 _0 G- H
  62.         // TODO: add construction code here,
    ( F% N! v8 D* ]; G; L
  63.         // Place all significant initialization in InitInstance
    ; z! G$ M0 q1 X2 V' f& |% P& M
  64.   EndChangeData();4 ^. p: b% M+ j  `4 E5 g6 @
  65. }
    ) _/ A5 T6 i0 p0 D/ s
  66.   {: D! n6 M+ [% G. r* |5 B4 w
  67. /////////////////////////////////////////////////////////////////////////////
    9 [2 o5 S* q& d1 b* w, [
  68. // The one and only CRevAppApp object
    5 q* B0 |: @+ N  x

  69. % J1 O# X7 q4 ?7 A2 {( ^! D
  70. CRevAppApp theApp;
    1 O# k! v/ m  l1 E9 U- r

  71. ; \4 F( e# p) Y# R) [1 \
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)) t5 M' Y0 a' Y/ _3 ^
  73. {
    9 J7 c) a$ q" }, Q4 J  x; e
  74.   int iEOF=0;
    3 w1 u. {5 X  s+ `6 F
  75.   char szTempName[MAX_PATH];
    " B4 W  m' Q5 A6 f- X% g
  76.   *szFileName=0;
    - ~: L4 N! x4 J# M1 O: K% u
  77.   iEOF=fscanf(fp,"%s",szTempName);
    $ Q* J4 V9 Q( {
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')6 b6 g& O. s/ g4 I* j1 F2 W1 q
  79.   {+ i% {) F+ a" H  ~  E& i
  80.     strcpy(szFileName,&szTempName[1]);4 U% ]; P# s& g9 J1 S& ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & o: @# w& X* z
  82.     {
    3 A: ^0 S0 s1 w2 J# V
  83.       iEOF=fscanf(fp,"%s",szTempName);
    8 u+ a6 N; u! T% ~3 A
  84.       strcat(szFileName," ");
    . K; h# N3 ?" D0 U% Q
  85.       strcat(szFileName,szTempName);0 K) h! {' F+ K1 R# k, ?
  86.     }
    ! B) b* p, A0 E& x, M& M; s' J2 \1 p
  87.     if(strlen(szFileName)>=1)2 P' m3 @; T; c, Y- u# b
  88.     {: i! ~) }& S% U  E$ x8 ~5 [8 W
  89.       szFileName[strlen(szFileName)-1]=0;: \6 C* S5 u& p1 P5 }" r
  90.     }% B8 t  ?+ q) a# {- B
  91.   }
    * A8 q% P) D9 h: [( p9 H
  92.   return szFileName;5 f; h+ a4 a+ L8 Z7 S* D  i& ^
  93. }- M1 D2 a) e5 |& H. @
  94. ) `  O1 e, H4 d% ?
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)- Y7 Y3 [8 L% a2 C9 l9 g0 }; Q
  96. {
    - b6 R  }1 Z! @' |5 U. e8 s2 E
  97.   FILE *fp;
    . O' \# a( ^) S4 V0 k5 ?% e: H
  98.   char *key=NULL;
    5 [  t$ W# t( U; y7 C% w$ L. b; |
  99.   char version[MAX_PATH];& H/ p$ j7 H6 x. U/ c
  100.   LPUPDATEFILE file,olds;8 S( T# G: R$ N/ ^' _) _
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ P' j2 g; B1 I( Y" A) c# P  p2 a1 l
  102. : {% [/ m+ I* }. ]8 X
  103.   UpdateList.clear();
    ) h  E9 S9 j6 d, o" \( ]" X# O, l
  104.   UpdateFile.clear();
    2 `, m( X" c4 @4 X' N, D5 F
  105.   if(GetFileAttributes(filename)==-1) return false;. D) o+ G  B8 t9 N0 \
  106.   if(!(fp=fopen(filename,"r"))) return false;
    3 ~2 I: D# o+ ^" j' V! Z7 m
  107.   fscanf(fp,"%s",version);
      S6 c- ~+ K, @5 J+ e2 D" n' V4 K
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }" @8 }4 e& U3 C3 `
  109.   while(fscanf(fp,"%s",version)!=EOF)
    # J7 V/ b+ w$ Z9 Q/ M
  110.   {! ?) L( P7 t9 n& s  k
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - x# T$ L" F3 H: g+ R
  112.     fscanf(fp,"%s",file->path);
    9 H! ^% B  d' Z9 r+ C! _, Z
  113.     ReadFileNames(fp,file->file);
    % i: \7 w. ]' S( c0 v: L, ?
  114.     strcpy(file->full,".");# |7 o' W7 b  O4 S8 H
  115.     strcat(file->full,file->path);8 E2 y, G5 G% o2 E% H+ k
  116.     strcat(file->full,file->file);
    ) Y9 q' E5 Q& Z! A
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()): L9 O9 N/ P  u" ?& v. J0 J% E
  118.     {
    , W5 M8 w! C9 G2 m. c
  119.       file->vers=(float)atof(version);1 a3 T# o. E, R: G: i. L2 S
  120.       UpdateList.push_back(file->full);
    & A5 h2 F( N$ V5 W
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    # S, X' I: t* Y( h( f1 g4 h
  122.     }; `% W* |# y* Z( j! b1 y3 d6 l# w- x
  123.     else. ]/ Q& c+ t1 l
  124.     {3 y- c) h0 G# Y; z1 T/ F2 y
  125.       olds=(*p).second;
    " N* P% L( Z7 x9 a, h
  126.       if(olds->vers<(float)atof(version))
    " m" o& l6 I* M" H
  127.       {
    * q  I( K! u  g
  128.         olds->vers=(float)atof(version);/ j. z) C2 M( W- m2 f
  129.       }
    , C6 o  l+ t* f# ?
  130.       free(file);8 i* J. N- }( S% I) t, @
  131.     }6 n$ X! u6 F2 B; @
  132.   }4 _& ?" g% p: F. D6 L
  133.   fclose(fp);
    ! \6 `3 P7 C8 [- v
  134.   return true;
    6 K! d; A- p1 y
  135. }
    ! [, `8 q, V. T( G9 W8 ~4 Y
  136. + \) d7 ?: Q# b
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    5 k8 {  B7 Y2 F8 n
  138. {# F# }! F" d4 b' C$ s
  139.   TCHAR  szFull[MAX_PATH];
    : d# B, I0 o) c: ^
  140.   TCHAR *token,*inter;! z; m! G- \: P% ]; D* D
  141.   *szPath=0;- t# g" ^  y* {7 u2 x0 J
  142.   strcpy(szFull,szFullPath);
    , f8 a! z( g$ e8 d& j
  143.   token=strtok(szFull,"\\/");
    ( u4 G1 Q9 ~3 A' Z0 ^) K
  144.   inter=token;
    * N* Q+ c% ^& z" J0 `' I
  145.   while(token=strtok(NULL,"\\/"))
    ; Z0 J8 F/ A6 O& B8 h+ I3 V1 @
  146.   {
    $ X0 p& [% `1 b. T9 A  c
  147.     strcat(szPath,inter);3 ?# A" q. ^: Z- s
  148.     strcat(szPath,"\");
    ( r1 ~7 S( t+ e# f  r3 g. v1 v7 E
  149.     inter=token;
    7 s$ {5 s% C$ c6 Z& I% B
  150.   }
    / w) V# v/ f7 u$ x5 ]
  151.   return strlen(szPath);
    * @( q3 p! o& A. g& k
  152. }
    7 m, v$ t8 B6 k3 `/ l

  153. & y! Y/ ], o- ~" U
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase): t5 U& ^% m+ p. @
  155. {
    7 _3 `, `3 E# W6 H" W
  156.   DWORD attrib=GetFileAttributes(Target);
    + H  t+ J  B9 M( e2 p& c3 T
  157.   if(attrib!=-1)4 W( D% j% p* }4 W! k% \
  158.   {. k. A+ C: k: ?- b+ t  p
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))/ X) k7 Z% F( G" i8 b& }
  160.     {
    ' y4 q6 w+ C& J- L
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    % L. w# O4 j, k$ r
  162.       SetFileAttributes(Target,attrib);
    $ F5 n! r4 F6 ?5 q" F7 k
  163.     }
    " |! C- N, e! J* {
  164.   }
      w# U; t+ e* v6 v0 H; a
  165.   CopyFile(Source,Target,Erase);  y5 B3 |* k3 }4 h  [; t& Q7 @
  166. }" V0 }* D- E6 L! |

  167. 5 V0 ?8 Z5 d$ e0 [% f+ B1 \
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    0 c- C4 G8 I, _. y+ s1 [2 ~
  169. {" w: v: ?+ ?1 _. _0 R' L! r$ k3 l
  170.      FILE *fp;' j: U6 J$ \- }$ c, [# j
  171.      char  szBuffer[8192];
    : O; ~8 G& S+ R5 {- x
  172.   va_list  argptr;+ d2 ~5 f% r& G+ L2 I5 `6 S

  173. 3 K; z. u# `0 z, j/ w7 @$ u3 M& [1 |
  174.         va_start(argptr,message);7 l0 Z9 J5 Z9 L4 B/ _
  175.         vsprintf(szBuffer,message,argptr);
    7 m8 G1 e& h# |
  176.         va_end(argptr);
    ; o1 J( [: m- g" ]6 `
  177.   fp=fopen(FileName,"a");; g" q  ]0 j9 v
  178.   if(fp)( d5 W* u) D; {) v3 y$ x9 b1 I
  179.   {6 M6 ~( `- p/ b
  180.     fprintf(fp,szBuffer);9 ~) j! M. j- z* W1 S3 L
  181.     fclose(fp);
    8 {' K! s+ c' j
  182.           _flushall();
    - K9 [% l4 [* g
  183.   }
    " O: i$ v/ {: ?8 C# Z& r8 G; X
  184. }
    . L# Y5 D2 U' ^* X  _

  185. ' `- h3 b/ z& U2 b* i
  186. BOOL CRevAppApp::Fclearf(char *FileName)* R8 @; I, d' i. X/ D5 x
  187. {9 w& n6 V! _) T2 g9 Q1 d3 w8 X0 ^
  188.      FILE *fp;" ^4 _4 _6 m& h5 \! h( H( z; s
  189.     DWORD  attrib;
    # n8 [4 j8 V! ?6 R  z
  190.   attrib=GetFileAttributes(FileName);
    + F* m- o" g! y' i6 W! Y- A
  191.   if(attrib!=-1)# @; N9 U9 s5 _! t8 n: I
  192.   {- q% s" u; h( |
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ' ^4 d/ D" T- [5 R" l, d- X& @
  194.     if(!SetFileAttributes(FileName,attrib))
    # ?" [! J$ S! i+ t# \. B7 ~, K
  195.     {& ]$ m1 y9 P3 ]7 }) m
  196.       return FALSE;5 i/ P, T4 Z3 c. \3 ?1 u1 G: y
  197.     }
    5 ~) E3 p% E4 t4 b; _
  198.   }
    3 L) I5 Z9 l) q# |
  199.   fp=fopen(FileName,"wb");
    6 `! R) l# q1 V4 I; ]( C
  200.   if(fp)7 i9 `1 q8 J+ G& p+ C+ Z
  201.   {
    $ o' L+ `- R8 q+ L2 u; g. l# \6 j
  202.     fclose(fp);
    7 R5 A3 K2 F% P6 I" L3 ]7 ^8 a
  203.   }
    0 Y0 W1 v+ Y; a1 e8 _6 ?
  204.   return TRUE;
    ! w& w! t, o/ p
  205. }% V8 j! [/ B% y' C6 h/ b. K
  206. ; h. t5 f, L0 f6 R* \% W
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    8 H6 r$ x/ }: `2 \) p- J  |
  208. {& o  N) ?' {# r4 r! f
  209.   char filename[MAX_PATH];
    8 {; t) w  S, a3 `6 P
  210.   LPUPDATEFILE file,olds;
    0 c$ G- o) F  v1 Z4 X) _: F
  211.   std::map<int,CString>::iterator i;
    + r$ P/ c0 o2 g5 R$ ^# A% s& u: {7 W
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    - k2 r  k$ M. T$ i! }
  213.   std::list<CString>::iterator l;
    * c9 N6 x) K3 g8 S7 S

  214. . U. ?/ B; u( g( o9 }* Y
  215.   if(bFirstUpdate)
    3 V7 p/ g+ ]% I. S% W8 O
  216.   {4 [1 ^$ S$ Q' A8 g. g
  217.     dwCurrFile=0;' t9 L1 n9 A! M! P4 F
  218.     bFirstUpdate=FALSE;- w; B0 p  S  R- t" V; A8 D
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( [7 n8 ]& e6 u
  220.     {
    7 x" F5 m- H8 e, {
  221.       dwTotalFiles=UpdateLocal.size();
    + D5 g/ L4 ?; K+ @
  222.       dwDownLoaded=0;& q2 {8 W# L& w+ N9 [* T
  223.       bSilentStep=FALSE;
      Y& y2 n0 s' z, G0 n) Y
  224.       bCompressed=TRUE;
    $ `) f. R- ~6 \& _$ v* e
  225.       strExtLocal.Empty();
    , E: v( F! \4 m$ K
  226.       strFullName=(*i).second;  \; b' {) b" ~1 G3 @
  227.       dwProgramState=AP_CONNECT;
    ; w7 z" s  W! x% G  f
  228.       return TRUE;- B. E6 q& G  b7 p2 }; a- J
  229.     }- f4 X# ]2 Z$ o4 M7 I* F9 I+ W
  230.   }
    1 E; e3 d6 a; [2 e. W
  231.   else if(bRestartUpdater==FALSE)
    4 G; T8 t9 r; d9 `
  232.   {5 G6 ]& A6 k8 S8 L; d. D" ]( x
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())$ q# _) I% S6 W7 `4 I% w4 \
  234.     {
    8 M% y. O, V( z& Z, x% c
  235.       file=(*p).second;1 G3 Q' U5 ?' h
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())" B3 S' o& T+ M) D( }7 L/ @  ]
  237.       {
    5 z: j# U5 o: n7 l3 \% H
  238.         olds=(*p).second;% [" R' t/ q1 j# I' k: A" c
  239.         olds->vers=file->vers;
      q6 x; ~5 d& Q- J8 l7 d( M
  240.       }. d  ^! t: N* k6 C# y* \: J
  241.       else& _. k; M! ^) k3 w# x
  242.       {( ^% ~$ C  F$ \1 `1 ]+ N* U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" F% n, `5 |# W
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    * x8 K8 @7 E7 ^0 j% ~# g: b
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    0 ~* `( P1 P" D& x" F
  246.       }7 q. A. J7 S, b: t) ?3 h9 m
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");4 `: T" A* A, B0 P8 B' l* _' S
  248.       sprintf(filename,"(%s)",file->file);# E& ^3 y( D* l0 s; {8 ?8 g
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 F, `: i0 v% }) z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }- R" S# Z( K  ^  ?4 }, X
  251.     }
    6 j) q6 p7 ]2 N; _  b
  252.     dwCurrFile++;9 l; P# a1 j  H( ]/ c
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())" q' q* \3 p3 I& o. Q2 b: d3 `
  254.     {2 d% Y) i8 T, l/ @
  255.       bSilentStep=FALSE;
    9 I, r( U" J! g% u9 q6 C$ X$ A+ q2 X
  256.       bCompressed=TRUE;
    & s, d6 p- |7 N& |- Q8 z
  257.       strExtLocal.Empty();
    ! b# l8 @1 |1 w% V+ n" B: g
  258.       strFullName=(*i).second;
    + {  }+ N) l" `" U0 f  a  i
  259.       dwProgramState=AP_CONNECT;
    & U6 e- X1 N# i- b
  260.       return TRUE;: f% Y4 w% N4 {6 {' p
  261.     }
    0 C9 R8 V, X$ e: K( }6 O& t4 T& D
  262.     if(!bRestartUpdater)
    - O* F6 j7 I4 \
  263.     {
    9 u2 o! p5 s* l' B% R' Z
  264.       int iCurrSize,iFileSize;
    ' p4 W9 U! I5 R3 z/ Z9 x4 H: O
  265.       iCurrSize=0;
    ( n& W3 U) a, i0 c  i8 D
  266.       iFileSize=UpdateList2.size();
    * ^; [4 O5 `1 }
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");5 y, g/ ?7 G5 V6 i- o
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 M$ [" J1 ?4 r7 Q. U) z; K( `
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");3 _: k: s, i+ |5 w. k7 G& q; q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 b2 ]& \! t' e
  271.       Fclearf(".\\update.dat");
    ; l6 Q& P$ P; |
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    7 t) u3 ~  F. ]( q$ z3 \$ o0 r- ?
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)! n2 `: f- k7 I# W6 ?: v
  274.       {$ ^: E3 ~" {: L# M
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    : E# K8 S& H, K1 V
  276.         {) C* [! K+ R" r: F+ @. r
  277.           file=(*p).second;; `" q& v' O8 Q" Q6 e3 \; B. t; M+ \
  278.           sprintf(filename,"(%s)",file->file);
    % S6 y( ?! x: w6 f) q/ b
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. {$ N# [( Z: U- p
  280.           iCurrSize++;
    - Q; j8 u: k8 \2 [
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) |- K3 y9 l# C
  282.         }! N) `5 m6 `3 X0 b
  283.       }
    + m+ y+ E7 W: D) B, R9 K2 h3 @* F
  284.       unlink(".\\update.txt");
    ' R6 V; _) y. O3 Q
  285.       unlink(".\\update.tmp");9 A3 C, S/ ~- |  d' _
  286.       Fclearf(".\\checkversion.dat");1 `! `6 h# Z; I+ ?0 R8 v
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    4 d* p% ?9 Z4 O& d
  288.       if(UpdateLocal.size())
    9 t& s4 `9 p5 z
  289.       {
    3 @( u4 Y: V) I9 F  n
  290.         UpdateLocal.clear();  k& K' O* i) \7 m
  291.       }8 c& b. c- N" X4 H: m
  292.       if(UpdateFile3.size())
    4 h! U8 @6 J  b8 a8 ~1 A
  293.       {
    & X" E) S  T+ v
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), S' D* Y6 w7 s/ g
  295.         {6 X* P- p; x3 }) ~/ u: Z8 k
  296.           file=(*p).second;" V0 g! ?1 s  v# O$ Y7 ~2 F
  297.           free(file);9 G7 w1 ]6 H7 z  _
  298.         }
    + q5 ]5 @4 h) O* A1 o/ `7 |9 h9 f
  299.         UpdateFile3.clear();
    ( ^3 H' B# Q6 U* T9 a* I
  300.         UpdateList3.clear();
    5 w4 Q- C! k& J! r
  301.       }
    & y% h. M) \8 f/ R# N: [6 B/ w
  302.       if(UpdateFile2.size())$ `2 _" t+ y, B- u
  303.       {
    3 l- S! U: l! {) V+ p# x) a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # e& y! b* D1 j7 U4 M  ^0 I! A
  305.         {, m2 q/ m1 X. v, @. R  l
  306.           file=(*p).second;
    6 U# z  M! I1 _
  307.           free(file);) _4 h: ]+ v* ~/ w# J
  308.         }
    , T7 u% W6 |2 f8 k
  309.         UpdateFile2.clear();' }. M* B3 Z& v  \
  310.         UpdateList2.clear();
    / ~5 [; ]! y8 a5 r, O" V
  311.       }
    * g# s$ Z+ o, g* X: m9 M6 C
  312.       if(UpdateFile1.size())
    . B2 J7 \. L) w+ H- `! _; u
  313.       {
    : \1 |: a( }" p* a  F% o
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 ]& P# M& a# m" P
  315.         {$ f1 r: W! |, \( c8 [
  316.           file=(*p).second;
    $ R" K6 w8 r, c6 J
  317.           free(file);
      _3 ~& L7 ^6 X( g4 r- \$ y! O' A
  318.         }/ N0 O6 ~* l; ?& k
  319.         UpdateFile1.clear();
    / I( o: b- L7 @2 S
  320.         UpdateList1.clear();
    % P3 i' O8 Y9 b7 }- D
  321.       }) C$ @( d/ [" a0 i' A
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % R1 v. h# t/ B3 h( S$ d
  323.     }
    9 |  {/ @$ W) X! W
  324.   }! A% N3 z7 J* D
  325.   return FALSE;
    0 a' y% K5 P5 k1 C3 [# A
  326. }
    2 s5 F5 B3 P- d  a

  327. # h, u6 E  }3 X  n
  328. void CRevAppApp::ClearAll(void)2 r& [- r6 U# ^+ ?
  329. {5 W: b3 [2 {5 {) G3 m
  330.   LPUPDATEFILE file;+ ?$ ]& [9 \3 D) Q6 b) }
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    : R6 L6 G0 N! ~

  332. , e( J7 M/ f; K! e& s+ ^
  333.   if(UpdateLocal.size())
    # f- c+ J: s& w  X$ X; g
  334.   {
    * O8 _% s+ F* c; Y$ N! B# \
  335.     UpdateLocal.clear();3 W- G5 o  X; L7 R' a  \$ ?' a
  336.   }
    + A5 F8 G8 z$ b& [+ T1 |
  337.   if(UpdateFile3.size())7 @9 M2 W6 \/ t+ ^
  338.   {$ [! l/ P% O  m; b# x+ G( g; R- h% J
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    : `* L- u* j, B9 f2 ?$ ?$ ?
  340.     {) s9 F/ [5 U- z- |, |: t' k
  341.       file=(*p).second;
      p. R' d# x! _
  342.       free(file);
    1 _5 f; Z. G4 B1 E9 Q
  343.     }
    0 b) v: E/ {! r# I7 i
  344.     UpdateFile3.clear();$ j# d: g* |" l' ?. R* E- O
  345.     UpdateList3.clear();
    " G" A" Z' F3 u  P
  346.   }, ]% j$ r/ m+ x6 C, b/ x& B; e
  347.   if(UpdateFile2.size())0 m: w: U, z! X2 a' k
  348.   {
    7 P1 O. ~& o( g' K: O4 d5 o
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 l. v- `" o, s- ^/ g  T4 z+ G
  350.     {0 T6 n8 A% m# P
  351.       file=(*p).second;
    ; D# G9 i" `  Z7 t
  352.       free(file);1 J2 d, V2 M3 ^! O
  353.     }+ T6 h6 F5 G& L* T* H- B9 d3 i  N
  354.     UpdateFile2.clear();1 K+ h! U/ V% r
  355.     UpdateList2.clear();; }5 H/ P7 o9 u+ D1 t* f
  356.   }
    5 R# o8 i0 ^8 _( l1 d- T
  357.   if(UpdateFile1.size())) y1 m- t' |0 r0 g6 |
  358.   {# b! E1 _$ P, T8 j4 t9 N
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 [) _% ^  h; |2 T  y
  360.     {
    5 w+ X. [% h& M1 ?$ Z
  361.       file=(*p).second;
    % e! p/ _  E2 z2 ~/ t0 u
  362.       free(file);
    * T- [  R9 n  g+ Q. N# r8 F# V
  363.     }
    / X4 D" g) l* n3 D/ @( w6 I
  364.     UpdateFile1.clear();* F; [2 c" n8 y; B4 y
  365.     UpdateList1.clear();3 X2 k+ B5 u  [  H7 G! T
  366.   }* P8 L( m* F: F! |8 V0 i
  367. }  / W- r0 E9 W/ K5 N; U( u
  368.   
    & c1 |1 q$ @# U! T! l
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    # r' n+ J+ n# p% `. H+ _+ N
  370. {
    & j5 G7 }* P' Z! `' v! w0 Q8 D
  371.   int c;- m& `1 i8 i1 H- D0 ^% R
  372.   LPUPDATEFILE file1,file2;
    : Y& ~- S9 K) q" _% e; j
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    & V3 N/ Y- J/ \  d" N
  374.   std::list<CString>::iterator l;# `+ B  h$ e) }. h

  375. 5 H5 @- m2 s2 W' A3 Z+ r! W, N/ `
  376.   UpdateLocal.clear();
    / p$ [! `- e- C( x% t6 s* }
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);, z2 }) v/ B7 x! m1 k6 W6 g1 l
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    4 a" W, g# {, X4 Y8 o7 X
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    , q' B+ X2 ]! V
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    " D5 Z9 C6 S  [9 J$ j
  381.   if(UpdateFile3.size())
    # u4 r6 U$ T) Q! F
  382.   {. z7 c- K" N7 N  C3 [7 s
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)& ]5 F; O' }/ y7 }! p3 g
  384.     {
    ' Z+ |2 g9 J! x3 Y6 i- E" A
  385.       file2=(LPUPDATEFILE)(*i).second;
    5 ~2 ~) [3 N% R. Q9 F- }+ T
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " q% r5 }+ Y! W0 m9 \/ q
  387.       {
    * E8 p, ~1 Q  [. Y
  388.         file1=(LPUPDATEFILE)(*p).second;0 {3 [9 R; U+ z) k/ B* r
  389.         file1->vers=file2->vers;# s7 {* u; M& `# D* O6 |
  390.       }
      O$ W% W1 p5 t; v+ L' ^' Q9 F
  391.       else0 n4 G; P- E' ]
  392.       {1 u+ k( [' L) E6 @/ K
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  A9 D4 P: [! K+ Q' X+ H
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    6 t( u# i1 d8 r% e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    * P) \1 B# i- A& O( T
  396.       }: x$ B  F. p, j3 B9 ^
  397.     }
    6 Z$ N* |2 @& ~) f
  398.   }7 ?/ s& |+ h. W( S, G' @8 w, t
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)! u+ h+ \6 H4 J0 A3 m
  400.   {1 ]; e2 o3 [6 U
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    : P. G- d5 W# W4 C" a
  402.     {& F' W8 @3 v8 t1 O5 v# m
  403.       file2=(LPUPDATEFILE)(*i).second;: c/ i5 {# a4 }0 G
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ p4 i+ O( @4 _8 O$ G0 _) e
  405.       {
    9 ^+ J" k) q. Q# [6 N& ?/ v
  406.         file1=(LPUPDATEFILE)(*p).second;
    2 @6 S+ P$ O% G, |  P0 P% [
  407.         if(file1->vers!=file2->vers)
    5 w+ Y! X* V' p1 w5 a, j
  408.         {
    3 O) g! D1 N- _% t
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ r: v' D, L* E; }4 T+ k, ]
  410.           c++;* P  _( Q3 @& f# O8 N
  411.         }& e  K$ A& [3 l- P- Y! `. }
  412.       }9 l1 z% s5 |1 H
  413.       else
    9 k) _/ E9 i( X, D
  414.       {' _9 q$ k" m  r3 r4 V- M
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ R# p: V3 D1 C, E' y% R( |7 ]
  416.         c++;
    ) `2 G( M3 F9 A4 Y: I" Q3 k( h
  417.       }
    - ^  C/ y- Q0 e  [
  418.     }" S7 j! q2 d* j) ~
  419.   }. F: Y6 }% ~9 C1 X/ |* S% }  K
  420.   unlink(".\\DownLoad\\update.txt");
    ; z. `8 ?% j& `2 x( G/ x) U. l
  421.   if(UpdateLocal.size()) return TRUE;) o7 k) ]+ I1 O
  422.   else                   return FALSE;
    $ v) V( \% B* D( {, x4 ^) ~
  423. }
    * v9 R( r" }) {  V) h# J

  424. 4 x2 \6 ^) C8 S, ]" J
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"+ }8 v) y; X3 T& k! h
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - C0 i) G6 l* }2 a# g

  427. # H) ?, y- p  g3 n4 e
  428. 1 D( u* }0 X$ U

  429. " o* y& V, n0 T
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ I- [9 j) p1 `5 A3 W+ t
  431. {! V1 h% d" g$ i3 p
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;% S: C+ ^7 M. V% ~) f- U, @, z
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' D9 r8 Z9 @  U6 g
  434.   {
    ' r/ F# I# e5 Y
  435.     char szLanguage[50];
    4 `  C1 D5 Q- k* I
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");  {( \% ?4 m1 e
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. X' ~9 F$ O# b7 s
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 o. r6 D3 x5 `, O8 b
  439.     else                                   m_iLanguage=ENGLISH;0 c6 L6 h! S) h7 u7 B/ }
  440.     char szRegister[100];& G2 e8 G* z+ \( {, }( {3 A
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 s' r- U) x5 P5 f5 ^
  442.     strRegsName=szRegister;. N& g& Q7 Z9 Z5 n
  443.     char szPatchURL[100];
    & o5 w0 e9 F2 E1 V
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - n3 \/ p' m1 G* V; h# ~# ?1 v
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, x* z; ?" }# ^; C' z9 V( Z: U- J/ ~
  446.   }
    # j3 i! S; b6 u
  447.   else; o  F5 I+ w, i0 y, ~0 Y* m3 L6 {* D
  448.   {" {) R# j5 y2 z0 G6 f3 V) o
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 V. k, S  l# ?0 d* K$ u6 t
  450.     strRegsName=DEFAULT_REG_URL;% q) D$ @  q; ~7 U/ ?# w
  451.   }
    ' f, J. C  ]! R$ g
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    . j9 Y9 A/ N3 {* `: u6 L
  453.   {( r" g  j( R, g
  454.     char szIP[50];! Z$ {) e6 Y( l; `. M' W
  455.     char szDIR[300];
    ' [  S  i0 v2 J1 a: O' P; J
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))8 |! w8 n# J" s. _* b/ R
  457.     {1 p! U* m  I5 G: m9 @
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");. o5 O6 H, c4 m3 l
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");' l0 p0 `" f3 c* l1 Z+ r
  460.       strHostName=szIP;1 n1 M  s* {* Y$ i! m. B9 C  ?
  461.       strHostPath.Format("/%s",szDIR);
    - O% t6 q  x4 F2 f
  462.     }1 W- `% t  K. j1 H; d
  463.     else
    ' m3 L' [7 e$ a8 |' k; s9 ~4 R! t
  464.     {. {; L* T# M0 v2 y9 V
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): t, c8 h1 u4 P2 F* `
  466.       {2 G* W5 S- W5 p
  467.         char szLanguage[50];
    + {9 T8 x1 y8 N1 a4 E8 v$ v$ B
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" k( ~* j* Q2 N4 b0 f
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# @, G+ {8 \9 U4 a" R6 s
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    4 c- a, P/ M0 a+ w: O: O' R
  471.         else                                   m_iLanguage=ENGLISH;
    6 B1 m# z1 o/ e  B0 ]7 r- x
  472.         char szRegister[100];1 {1 V; M' ~" P2 Y/ a7 x, m4 L
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    * M4 I9 x; F2 k9 O$ c" W# L. }
  474.         strRegsName=szRegister;& B- o7 u# x- j& k9 O- e
  475.         char szPatchURL[100];
    : k: ?5 W) F+ a
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( v2 Y! \  `" G8 V* G9 y; Y
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 {; j5 ^7 X* t5 c: _- ]2 q" \# w
  478.       }5 e& _$ ?5 E% P) f
  479.       else' L  \3 J- |. k5 e. R  g; D3 x
  480.       {+ p) M  ~. x3 W2 R" P
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 k" \2 X! s, W/ Z: C' l) m% b
  482.         strRegsName=DEFAULT_REG_URL;
    2 L2 n5 ]) ]2 ~; C
  483.       }
    - r) E' B' ^+ V9 `
  484.     }
    ! o  P7 }6 Z. f: w' P! }
  485.   }# g8 _2 |$ q' H4 B  y) X
  486.   return true;
    , ~6 y, A8 F! R" D# \( s% U9 R, l2 }$ X
  487. }
    2 Q+ P" }7 E7 W6 J0 s

  488. ' L9 j+ w7 K2 ~7 C. d4 ]
  489. #include ".\ZLib\unzip.h". u. o2 h7 q2 u8 X& |9 g
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);5 d, J9 `7 a, M
  491. ////////////////////////////////////////////////////////////////////////////// E+ C9 i9 P  N# P0 ]2 I/ o: I
  492. // CRevAppApp initialization
    % R2 [* L; K5 O9 \' r

  493. - }8 m" P8 T1 @
  494. BOOL CRevAppApp::InitInstance()
    . A% d5 M+ m% }( ~6 [
  495. {
    3 k7 R3 q& f" }3 l% s
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    . x& F* Y5 D  r8 e+ |" q! g/ a
  497. 1 j3 f4 o" |! s' w! I$ \9 i
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    & x4 R7 Q! w+ N/ v  ?- q4 T" ^
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    % \3 F" a/ z8 O/ b
  500.   {+ r; m0 ]' e" {. B) k
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ; ]# Y. A$ S/ R  v8 H; z' G
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % q% A6 [$ k' B/ x) B
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    / l" h: I4 d/ s: B
  504.     {& q( c2 e" \- G1 m3 E
  505.       strcpy(szPath,szPathTarget);! H8 `& n. S. B9 s! o& s
  506.       SetCurrentDirectory(szPath);
    2 O. Y$ W( H: f
  507.     }+ h4 m; H( {$ g
  508.   }) P* m9 v0 K9 `+ n2 l
  509. #ifdef _DEBUG' ~# d5 R4 M6 S7 ?; G
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 ~7 h4 Y4 E" v
  511. #else
    2 b2 w, d8 K9 ~* n& l1 o8 z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 V, P1 {4 r8 ]
  513. #endif
    ' }, M0 A/ d# i& t# `
  514.   {+ {* X3 f+ k; A4 v$ W- A
  515.     char tempFileName[MAX_PATH];
    ) B! n/ F1 ~" ?8 v) f- a) _
  516.     strcpy(tempFileName,szPathSource);
    " `! m5 W, E' U
  517.     tempFileName[strlen(szPathSource)-12]=0;
      Y$ ~  A! G6 c; C/ p
  518.     strcat(tempFileName,"\\$CSUpdate.exe");" p0 F+ {, S/ P. U
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    # y9 c$ G( F7 P; q# ^6 L( l$ e% }
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    4 e6 [% g& e; n: w0 X7 _
  521.     return TRUE;: [- n! b# B! D/ Q  p
  522.   }
    1 I0 `' l5 H) U/ T
  523.   // Nuke 0118: Delete run.exe
    - p! A5 x( T. ]* ^$ K% V$ w
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );- Y+ D3 [8 W% T% m: V1 G+ C
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    2 A- ~! f! K* }# ?5 l% M
  526.   if(!ReadCfgFile("Config.ini"))  a, M! a/ }8 O7 a
  527.   {; @8 W! K* h' e( Y- `
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    * r* l1 h6 t7 N& e
  529.     return TRUE;
    % o$ t6 w) A3 i' P
  530.   }
      [) ]8 q1 W# N* n2 y. ~
  531.   HANDLE mutex;3 M( `" _& Q4 \2 N+ U
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    , n8 _) [& b) \+ ~! w% U
  533.   {
    7 v' `4 P1 g7 g" d% p" S/ w; J
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    : g9 W6 T5 f7 `6 k( X( j, G
  535.     {3 j8 P, u& I) T7 D/ ]( |$ P2 ?
  536.       CloseHandle(mutex);2 w* H$ k* Z' }" e
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " }; D; g  ?; ^) p% ?( o. v. l
  538.       return TRUE;) p3 t- R: ?+ {: O
  539.     }
    ! |# C+ ]9 ^0 D# l) B& u, }( P
  540.   }  5 F8 g) z  ]; M& ^, Q1 i4 u+ E! ?
  541.   CloseHandle(mutex);
    6 R- K7 R. g" _5 r
  542. ) X; @* ]( L8 p9 e% ]& ^* V
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);, c# m) `9 G2 j, j, ?4 x$ P# Z' c
  544. - |8 S2 u0 c9 z5 N5 Q4 |
  545.         AfxEnableControlContainer();
    ' l, y4 I3 {  }; u
  546. 7 @/ J: G  {5 A; c# s
  547.   bCanUpdate=FALSE;
    : B% F! P' W4 Y4 J5 B) E
  548.   dwStartUpSteps=1;2 D6 _* N  C: J( Y: H, ~
  549.   dwProgramState=AP_NOTHING;% j* |4 Z( C* t+ y3 d4 ^

  550. - W- x' A& o/ C0 Y' K
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);' s6 C# }/ J7 K7 m
  552. 0 @8 ], b0 U" D
  553.         // Standard initialization
    * V; V$ ^1 D3 e- v
  554.         // If you are not using these features and wish to reduce the size
    % G6 P$ }" T8 [5 y$ @5 x
  555.         //  of your final executable, you should remove from the following' y2 \" |, M* M+ u# N
  556.         //  the specific initialization routines you do not need.
    + S9 f) U* ~& X% H

  557. $ ^2 E9 f+ t3 L2 f$ K) m7 u
  558. #ifdef _AFXDLL
    . ~0 Y, f* n4 @
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ) m  k# I" k8 V* q
  560. #else
    " {) \$ r. H  U" w5 j
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically3 C* K; I0 @: Q2 r$ P6 K6 U
  562. #endif# U" ?) J8 m% ]9 d0 B) j; J
  563. . I7 P5 e" m$ N  C5 h4 {. A) Y
  564.   dlg=new CRevAppDlg;* r1 B- u% s2 H( M* w
  565.   dlg->Create(IDD_REVAPP_DIALOG);$ ?- P& j  r5 K, I; i( I1 }0 h
  566.   dlg->ShowWindow(SW_SHOWNORMAL);" y$ n8 z+ Z) s7 U  ?5 H( B
  567.   m_pMainWnd=dlg;% T' B# O8 I7 `) w" Y. d- Z. A" @
  568.   c# B3 j# {: }* ?9 O" E
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ' R( Y9 `7 n7 L
  570. & I: F# n( y/ P: z) ]9 q( T
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ! Z/ x/ S+ N- A. N# m
  572. //  ULONG_PTR gdiplusToken;
    # K( M# q" T* [3 K4 O( _
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);  u2 A' A$ n- d& u. S# U
  574. " ?0 b& \0 A% D, ?
  575. //        CRevAppDlg dlg;: z$ k$ D9 t4 |6 m' }
  576. //        int nResponse = dlg.DoModal();) r8 A4 L$ Y& U
  577. //        if (nResponse == IDOK)
    ' D- X. ~( C7 H8 j, z. C: _+ k
  578. //        {
      p% ?( u5 ?# `! |7 v  m, A
  579. //                // TODO: Place code here to handle when the dialog is- _0 G" T6 y" P' i0 J7 x' [
  580. //                //  dismissed with OK! U" C8 ~; b$ P# J
  581. //        }$ y+ r  D" z5 Q
  582. //        else if (nResponse == IDCANCEL)
    . a7 X: Z( m4 l! U- K
  583. //        {
    9 o2 Y" g# [0 x
  584. //                // TODO: Place code here to handle when the dialog is
    + B5 O6 U( k" I& o  C$ M4 h7 s
  585. //                //  dismissed with Cancel
    8 Q( q& e4 k2 m& P/ ^  u
  586. //        }$ Z3 G2 b' S0 s& D
  587. / D" Z. X3 S9 E  j6 S7 Z
  588.         // Since the dialog has been closed, return FALSE so that we exit the9 r* V. S# d' `: Z
  589.         //  application, rather than start the application's message pump.* r1 u! U, O7 X" l: H6 C
  590.         return TRUE;
    & F7 K+ }6 a0 u9 `4 i3 Q; ^5 r( a4 w
  591. }% U9 A( X, s$ e7 L
  592. " n# |  I$ f7 o. s# c, Z
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 M; i1 Y2 i$ s1 @" ~. ^4 m
  594. {& E$ T& n1 e3 B5 i+ L6 q. e
  595.   int i;; Q' c+ K9 e: p, L# Y
  596.   char *szRet;. s- R9 j: l* B4 p5 i

  597. ; K( M& e1 w3 u5 x- u( @: K5 ^2 n# `
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    : i" ^" r1 d: b- l  q; E5 _' N
  599.   if(sztoken)" C! V/ t4 D- y
  600.   {: p' C  K: o/ q9 _& q
  601.     szRet=&sztoken[itoken];3 O+ \( {' ~( o+ k
  602.     while(sztoken[itoken])" f7 S% A+ y1 Z+ q/ P5 e5 X6 P
  603.     {
    7 c9 j: q' c- y' A) c
  604.       for(i=0;i<(int)strlen(token);i++); G, O+ a( ]! L: n
  605.       {
    3 q6 r) \9 ^+ _2 h
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    5 j! u2 y' z" v; A( B
  607.         {; a* V+ s$ _# L+ l/ _
  608.           sztoken[itoken++]=0;" R! ]! }; L, M" l  E9 T7 G
  609.           sztoken[itoken++]=0;- c8 O) {: U/ O# \+ L6 y9 O
  610.           return szRet;2 t8 Y9 s6 \1 ?! p' V, s
  611.         }
    . U" `& r5 @7 o- D+ C; ^( o
  612.       }
    ) `6 K% l" N& o' k7 A
  613.       itoken++;
    $ s* N% u  t' I  I3 m8 z
  614.     }9 e# J* `- ]' }8 R2 l6 ~0 ^! u+ y
  615.   }8 Q, h. J7 I+ Z/ y' r5 p
  616.   return NULL;
    + ]- @0 i0 ~7 |  E: [6 \
  617. }& q% \; e6 T% ^" y# E4 X0 L
  618. & n3 R5 |% ]# x& ]7 s2 n& e% v
  619. void ProcessProc(long Total,long Current)5 x' A" E; \9 K$ v$ D  q& ?4 ?
  620. {
    8 G, ]9 j6 w+ p- h' J0 G
  621.         MSG msg;* ^3 O, }' K' }* ~( p
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    2 d* Y& w) ^: g* V5 W
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    " x! K) m) A8 z& C; u
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))! I' y% Q2 F$ z
  625.         {3 M6 r( g* S4 ?4 a7 d' Z
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - P, E0 z3 O' O( g& G/ y
  627.                 {  R$ V, U8 b8 S: }
  628.                         return;
    ; A2 T% E" b' F1 |9 U  b
  629.                 }) X: o$ k. V) k+ T! \. b' ~% i
  630.                 TranslateMessage(&msg);
    ( b5 Z( T7 e( T4 P
  631.                 DispatchMessage(&msg);
    % j2 t3 O  `: x1 E7 j
  632.         }       
    7 W* Q4 b( Q' _4 v( ]5 M
  633. }9 _9 r% V3 l5 u3 n! I, L5 w7 m
  634. 9 S9 i; D6 X+ R) @
  635. BOOL bFirstChar=TRUE;1 n# |% I, D- c1 D+ J* L/ n7 B

  636. 4 C% f+ b. [5 F9 K0 D6 f( s, ]) f
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    # O+ x' h( w7 Z7 Q+ _6 L1 K
  638. {
    3 O# Y1 {; v: l9 }' g  K
  639.         // TODO: Add your specialized code here and/or call the base class
    4 |9 n! w; o- W. ]6 \# F
  640.   switch(dwProgramState)
    . Y. c  T5 P, k7 F
  641.   {
    5 ^( P1 B- c+ M" X
  642.   case AP_NOTHING:1 h7 |% I7 P" j1 d9 T* S
  643.     switch(dwStartUpSteps)
    1 x; L4 R3 F: H! d3 C/ _: Y5 N$ I  Q
  644.     {  v6 r3 y1 n) H0 u4 \3 w
  645.     case 1:
    5 e" W9 T! K% _% h2 L% @6 [
  646.       {1 f. R5 ^. J2 Y9 p: s  ^' m
  647.         int i;6 r  V5 Z$ N% x+ b: Q: l! T& C
  648.         CDC *pCDC=dlg->GetDC();
    " A* E2 P- i* z8 x
  649.         HDC hdcwnd=pCDC->m_hDC;
    " L1 M- Y  [# m( S1 F$ V. S
  650. //        Graphics graphics(hdcwnd);  }  X" s$ M3 v; K# ?" d, c' k: K
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");& b8 u9 a2 H* g3 ]; E
  652. //        INT iWidth=bitmap.GetWidth();
      g1 u1 j8 T7 j& n
  653. //        INT iHeight=bitmap.GetHeight();
    3 L3 f; U) b) r. ^8 U& d
  654. //        Color color,colorTemp;
    8 p! X! T( g9 @7 M
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    + t/ q8 O+ b' N+ j& q) A
  656. //        {6 g3 k% _# l" n  b
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    - U6 K  m. U0 S3 ^4 G+ \- e
  658. //          {) L/ h3 N6 S8 L' H" i6 \
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    : E3 o6 N# U6 a1 c  l- G) s3 ]5 A* `
  660. //            colorTemp.SetValue(color.MakeARGB(
    ! ~# ^- _9 z9 D3 v4 z) A' D
  661. //              (BYTE)(255*iColumn/iWidth),* B3 q; b: C2 u* f7 z* a6 @$ A9 H
  662. //              color.GetRed(),
    * y0 l, @; c9 q) Z, {5 T
  663. //              color.GetGreen(),
    1 N' D7 [, ^  \# D( j0 d& Y2 o
  664. //              color.GetBlue()));5 s! n+ j. I' ]2 A# h4 D5 V
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' z* G0 ?! U  @/ F- c2 @5 R) G
  666. //          }" {; A& F" l0 {2 c' O3 C  y
  667. //        }
    & f. C) u' G4 X% X  S
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ; e+ c+ E; Y' X9 Q3 M$ J
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! c' c- z% W; g- c
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    * Z( _0 N% w( F8 T0 a9 y6 h* U3 D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 p' h) {6 r9 H- S
  672.         for(i=0;i<240;i+=8)
    1 ]5 H& W: O! b. m; Z$ n% n
  673.         {
    : q9 Q7 x+ T9 ?, l
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);+ J5 j* D2 d5 L9 W* F4 e
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' s( A! A5 d1 {! r( `( ^+ |+ [% {( f
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 y- H4 t" R6 ?. E* Q
  677.           Sleep(33);0 c& W9 s# r0 n' C: ^
  678.         }) j, N" Q; v( |9 f; s
  679.         Sleep(1000);
    9 X1 U) }% m$ O* k! m! B9 ^! A  F" w# k
  680.         for(i=240;i>0;i-=8)
    1 H7 Z2 \: O0 V
  681.         {: _0 {; U% O6 T1 O; ^9 N) N: h
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);- B5 {. K$ w+ {- @9 n$ J1 Q1 H
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 u$ P" Q+ q) w+ d+ U
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( S  y2 d) d0 h* q& T  R* B
  685.           Sleep(33);, i2 [4 ~* w/ [. Z2 m) A/ N
  686.         }3 I# y6 K' m! S0 J8 Z  U/ w8 R2 X- u" ^8 ]
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);0 s- d; f: s/ u! U
  688.         dlg->ReleaseDC(pCDC);
    % g( C8 B7 M- m' n2 l
  689.         DeleteDC(hdctar);' ^/ }) ^6 _, \3 f& ]+ y! ]/ [+ Z* S
  690.         DeleteDC(hdcsrc);
    + ]2 m6 w3 {& P* h7 f
  691.         DeleteDC(hdcorg);
    ( s$ _8 q3 n7 m& H7 ^3 }: P, x
  692.       }* ?5 @: t7 Z9 A* Q2 ?% }
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    + W3 b5 i2 f7 }3 C7 n0 A  a
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' @2 m  K8 g/ a* X% ~
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    9 l) V" t, M' d( X1 H' o/ @
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    . a; O6 ^1 ?% ^4 q1 U5 \
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & B' z0 x; K& @2 j7 C
  698.       if(!Dn.Connected())
      X) c9 |* R0 C
  699.       {
    ; a: C4 l; l1 J
  700.         dwTotalFiles=1;2 R' M5 F# h/ C5 ~6 A8 k
  701.         dwDownLoaded=0;: s" d. [6 ]: v
  702.         bSilentStep=TRUE;8 d6 F, x8 z# a' X% J/ F6 j
  703.         bCompressed=FALSE;
    " \7 c# d3 C1 B. L; _
  704.         strExtLocal.Empty();
    7 X) z# ?0 q' y1 h( b# |" i3 b
  705.         strFullName="readme.txt";
    $ i( _1 t! A6 G. M
  706.         dwProgramState=AP_CONNECT;
    % i3 t; m$ p( A
  707.       }
      c, j! F2 Y4 V9 B) w3 h* h, T3 @
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ' w1 b! R9 u' l
  709.       dwStartUpSteps=2;
    2 M* Z$ y2 l" _; Y, m$ v2 S$ p
  710.       break;% e$ W! o9 p1 {* @# X+ x1 N8 j# I2 ~
  711.     case 2:
    8 M0 P8 Q: J. F8 [/ {8 e
  712.       {
    6 e6 i" c6 N4 p! c1 I
  713.         int iEOF;* b; l8 o, B& Y& H
  714.         FILE *fp;
    1 Q  l3 K" Y8 `2 O1 D' A- m
  715.         char szString[512];; ?/ k- c% {' W
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");) Y  E3 T9 i/ P- r
  717.         if(fp)
    3 x- h: ^0 J8 L8 g
  718.         {
    0 n) l0 O& C/ K& o7 `$ V: D
  719.           do
    4 }* T) L8 k6 r, D3 h' ~/ f) N2 B
  720.           {1 d( H0 E/ _& Y- e; d% ^
  721.             iEOF=fscanf(fp,"%s",szString);
    1 B$ Z/ r5 V  G. ^5 N* z. D
  722.             if(strlen(szString))8 _; F0 x  S; ~, J
  723.             {/ }, C8 \  F/ w7 B9 a5 a
  724.               if(bFirstChar), ]+ z) v% F& Z, T
  725.               {( b) b1 }- w% t+ h# A) y8 I3 t
  726.                 bFirstChar=FALSE;+ Y) v) W1 D+ H5 V
  727.                 bConnectIsBig5=FALSE;
    8 K% E# b) `- c% g: r
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    + X7 U. m2 r4 U2 L: M
  729.               }5 `" @4 U" O7 F/ f
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ' a! ?, d( p) F6 g  f$ g& r
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    + n: G) B$ j2 E; O9 `% }+ J
  732.               dlg->m_ListText.AddString(szString);7 E0 ~5 E. q3 I: q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 @+ @' v8 I, Z' |& j- I% w
  734.               *szString=0;0 G0 A- m% G1 @# }
  735.             }
    0 j3 w& g) I5 M
  736.           } while(iEOF!=EOF);5 @7 U1 R- W6 k5 T0 I
  737.           fclose(fp);) T& [8 k+ ~7 C) G
  738.           unlink(".\\DownLoad\\readme.txt");' `1 m. R5 s* X; A, o
  739.           dwStartUpSteps=3;
    - @6 Z$ ^9 z3 J% `
  740.         }
    2 o5 g  K  P& ?8 P* ]/ l
  741.       }
      S: L& O0 l4 f6 b
  742.       break;
    " b+ @% y1 N" X' `' E9 m% L
  743.     case 3:
    & e. |: B  r, }" N. H% Z4 i
  744.       if(!Dn.Connected())- a; Z5 V9 {2 s9 C% ]5 `
  745.       {4 O0 a' g5 ]8 Y; ?% b8 p
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);7 o: k' {1 M( C2 N) B/ [
  747.         dwTotalFiles=1;
    2 Q7 Y; W7 I* [8 U
  748.         dwDownLoaded=0;' s/ g- v. h: f2 z
  749.         bSilentStep=TRUE;
    + h* [; ?) B; p$ L
  750.         bCompressed=FALSE;# ^4 n$ y  f0 ~6 `" |6 n
  751.         strExtLocal.Empty();
    ) \# C7 Q- i. v, S. N! ~5 B7 ~* P
  752.         strFullName="checkversion.txt";
    + `: E6 Y/ U  a9 B/ K1 s
  753.         dwProgramState=AP_CONNECT;
    8 D: I/ @& {! Z$ q" U
  754.       }# }2 Z4 n9 l' ~/ m3 S4 e/ ]
  755.       dwStartUpSteps=4;& n! N5 Z. I& u" C8 U# L
  756.       break;' V' i4 q) _# d
  757.     case 4:
    0 s3 C% D; S& a( U1 |! ?
  758.       {) L) P5 E" }( Y& w5 T! b& {' A
  759.         FILE *fp;3 D' c, g( H" W& O6 y0 S* ]
  760.         char szString1[128];) i. c/ R" Y0 F0 O& I6 i
  761.         char szString2[128];: ?5 v( }' {$ q4 Y6 P3 v2 u8 ~
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");) T. ?7 ]9 T6 o: a! `4 h
  763.         if(fp)3 c. R0 s) V) K) e) m
  764.         {
    % Q, N3 S( d. l$ P8 E* S
  765.           fscanf(fp,"%s",szString1);, |# ?, k& v2 M# g/ H! G
  766.           fclose(fp);
    * ]) \  M( I( l4 H; K
  767.           fCheckVersion=atof(szString1);* X& ^( M9 L% o2 ?0 I
  768.           fp=fopen(".\\checkversion.dat","r");
    3 ~# _: R, z  i- A
  769.           if(fp)
    $ F  U7 P8 C' U3 f  A
  770.           {! c. a# g3 P" q0 j0 l
  771.             fscanf(fp,"%s",szString2);, [( `: [% T0 c/ [3 r8 K
  772.             fclose(fp);2 k* ^( i( A7 g5 B
  773.             if(atof(szString1)!=atof(szString2))
    ( [6 I: o3 _$ C. p
  774.             {( R6 U+ H" t; r/ {% ?* R4 b
  775.               if(!Dn.Connected())2 [, X' m0 a. P, L" K, K+ o# V
  776.               {
    6 J" D, o6 B: _4 C/ m, x% I
  777.                 bFirstUpdate=TRUE;9 B; R9 H, T# N6 _
  778.                 dwTotalFiles=1;
    1 `! H( V( f6 W
  779.                 dwDownLoaded=0;
    ! u! I1 o+ H0 q$ x  ^7 D
  780.                 bSilentStep=FALSE;
    ( v$ D2 n- J' |8 b
  781.                 bCompressed=TRUE;
    ; u# X9 l! ^( f( }7 N# a3 x% _
  782.                 strExtLocal=".\\DownLoad\";
    - P' z  X4 h+ C  D7 T
  783.                 strFullName="update.txt";
    - J2 o  f. |! Q6 n" H
  784.                 dwProgramState=AP_CONNECT;
    - D- ?/ Q) ]3 s2 o- h
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 B6 |0 H7 x9 C
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");+ ^, F. e0 D9 X. v* g& Y9 W
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % }# f- Y) G2 O6 y+ q
  788. , d& o# M7 P# U+ o6 q( Z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& Y& D- A, F" t( Y* C3 F
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    + F7 c- j0 g6 c# k
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    9 d9 U" K$ e" n! Z" ^  Z- q4 _; K
  792.                 {
    6 ~5 s. i' Z) Y# s/ T# K- q
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");# i6 i: r( y7 Z
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");4 y$ r% h- o# A
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");- g, D1 H% ]( j3 M, d$ g: C
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 q, c6 v- ]# f" w% e9 q* L7 W" o
  797. ' \9 k) ^3 U) u* g; w. @) a6 O
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ; k& T/ R; i! a! [
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ Y9 N  I. l  A" S+ S  E
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");% u( _9 {% e  \1 t( x
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! v" s  L$ Z0 F7 U/ l" k
  802.                 }+ X; `3 p' e$ F6 B6 }
  803.                 dwStartUpSteps=5;
    ! t) q  Q2 t  g5 E" S) q4 C+ t
  804.               }
    5 K& G1 U4 l# @) _
  805.             }
    ( l2 l0 x& f& ~) D6 B! @
  806.             else
    : @* ^  @% Q1 ]4 t( }
  807.             {3 Y$ I( f5 _) _; c6 f
  808.               unlink(".\\DownLoad\\checkversion.txt");
    6 z+ ]. W  Z8 Z7 X. h1 z6 I! ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ( E) C! A9 B! R
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");/ C$ F3 i8 ^  z1 {6 `; O2 p
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    : ~" @) _5 Y# H; j- U8 ~3 |
  812. " G! B8 `: q8 m0 e+ R; j7 G2 z
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- `6 ~- `2 g: a' R4 q
  814.               dwStartUpSteps=99;
    % H2 }, }3 |: [. t1 ^/ a6 c
  815.               bFinishUpdated=TRUE;
      _2 \5 q0 K& ?
  816.               bCanUpdate=TRUE;5 m4 A2 f6 T# p' ^: C2 w
  817.             }
    ( f; W# @* K# w
  818.           }6 e* S. ~& M$ K/ J/ t0 a
  819.           else
    5 e/ {' _+ |4 |8 a9 W: r
  820.           {8 G+ R1 g/ O6 }  i: O
  821.             if(!Dn.Connected())
    & b5 W* k; M9 `% J3 X/ N9 `
  822.             {
    % N7 |0 y: K/ N8 `  W
  823.               bFirstUpdate=TRUE;
    7 u9 ^& O% A% W% N% [6 F2 v
  824.               dwTotalFiles=1;
    % @/ P" {$ B; k8 p4 ?/ F  Q
  825.               dwDownLoaded=0;
    4 D/ V! q: h! \+ }! _5 t/ B! S* ^( K
  826.               bSilentStep=FALSE;7 A, ?7 I) Y' u; R9 g1 g4 I
  827.               bCompressed=TRUE;) Q. E, W/ T; m% d- O3 m! W
  828.               strExtLocal=".\\DownLoad\";
      v1 \$ T* L3 K& ?! R3 I
  829.               strFullName="update.txt";
    ( _/ Y. ~2 n9 e$ v& M
  830.               dwProgramState=AP_CONNECT;9 {0 r3 {( q6 A' N# g: F1 C) Y& B
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 j3 V6 f6 L$ r; a7 e
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 P  _0 {9 ]$ k" j
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . `: N7 N7 v! R8 @( m5 k' M* x1 H
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 P# G% @% P' q
  835.               unlink(".\\DownLoad\\checkversion.txt");
    : i! i; f3 N( Y% r, q. S' _
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    - B* |; l8 v" G8 }
  837.               {( j0 Q: c7 ^1 ^- ^$ |
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");# b$ ?' M8 y/ T+ V5 [& M
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");8 n$ Y$ N. ~, ?1 W$ ?
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    7 o+ }& ]) E+ m/ ^' f( ~$ K
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' i  F/ U: J7 }# b
  842.                
    ' k8 q. b( H6 g$ b& O
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 O4 c$ J( G- c- _
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & q+ u# O" o* w" o  ]
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    * ]: }* G  `0 D0 R* h
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      B0 d! A- ]! n, z0 p7 @
  847.               }
    9 m- ?' ]" D% F4 @  i
  848.               dwStartUpSteps=5;1 b& v% x9 a" c( k. R6 p
  849.             }( S( i$ C0 [3 H- P. n( s
  850.           }
    " n6 _7 r3 D+ _9 \* o! j# O
  851.         }
    , t7 @8 `6 h& J2 u6 K% `
  852.         else8 o- i, A5 l7 }
  853.         {# }# i0 U2 D0 Y, Q3 W# _* k
  854.           dwStartUpSteps=3;
    2 j% [& R3 j5 j5 w" h
  855.         }" Q2 p/ I  b$ Y) J# D' Y
  856.       }" O5 N$ i! n$ Z4 o3 L! R. }
  857.       break;' p7 Y# {9 c2 M- @; O( a
  858.     case 5:  ?9 r4 D. C( g2 x0 S7 }6 ^
  859.       {
    1 u$ L. W7 ^$ |4 O9 X
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)2 ]1 A2 K- X8 U1 d6 l
  861.         {
    9 g5 }6 Z- [: G3 O5 T
  862.           int opt_overwrite=1;6 h7 c/ G2 U1 D+ ]- `, p8 n( E8 {& @
  863.           int opt_do_extract_withoutpath=0;
    + y. s' K# C7 V: F. w, M* ]! n
  864.           unzFile uf=NULL;' w: w3 |( M& w  x! k: A
  865. 6 s; t9 h( X, i4 P' J
  866.           uf=unzOpen("Wsa.zip");
    0 k, q# C( p4 z/ M* |& P
  867.           if(uf)! B( I9 U6 z6 D$ {
  868.           {' W; Z! C' Z" w* e+ c, p$ r
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);- g# |8 h$ m5 Y& K
  870.             unzClose(uf);
    * ?, `- l' |0 i2 v/ V" X
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");  L& R. b- m6 {
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");+ P7 Z" D9 p0 S) j1 Z5 t( y
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    3 h" B' d( y0 A7 c9 l% E. K7 Y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 f  j/ U. G1 s
  875.           }
    * Q0 L0 k' z" c# U# [7 s4 d
  876.           DeleteFile("Wsa.zip" );
    / P; b, v3 }, N$ X0 s% {
  877.         }
    " H. s- a, Y) T0 k7 v  G% {

  878. & p5 t1 c$ E6 b* L2 s2 D
  879.         if(CheckLocalVersion())& V! x+ \/ S' }3 W
  880.         {! y+ H5 j. @8 H( j/ O) m
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    : j0 |% n# O1 `. u- j
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");+ y$ e0 n/ U* M5 G& W
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");% L- Q$ W7 Y0 l. s( c2 h1 u
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % e* s+ j& L- @6 S0 H# _% T$ ]
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);5 q. o7 P: ~3 e! W. o7 v% f
  886.           dwStartUpSteps=99;% l9 q" S, z7 G
  887.         }; L, ~' u6 L6 g* [
  888.         else
    / M, A- |' Z" o6 g' @
  889.         {8 c! \) b+ S9 e. G7 B
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");6 l* B* J; X9 x
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % D  a6 p5 H" X4 l( P  v1 Q" k
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");/ {( N  d' e7 ~: h2 W

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

+ B" L2 G1 A/ y  l" I

評分

參與人數 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客服返回頂部