找回密碼
 立即注册

CSUpdate.exe源代码

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

' P3 a1 t+ X" t  h1 L, o5 J5 G
  1. / RevApp.cpp : Defines the class behaviors for the application.+ m; r" m% `5 ]" t* Z' E9 O
  2. //
    ) x' v4 d: x6 d8 B- m$ I9 |% b

  3. + A2 R& G( N1 p. a% f# v8 u
  4. #include "stdafx.h") U2 s! \7 ]- d; a
  5. ! X; Z9 f3 N* `2 B/ X( x
  6. //#define UNICODE
    ' @2 _0 X4 s3 j( F+ s8 c
  7. //#include <gdiplus.h>
    & Q% u1 b& [! t7 R
  8. //using namespace Gdiplus;1 p0 S6 \7 O/ [, z% }* S4 u1 [

  9. # \7 L* y4 d" y4 E! [  [
  10. #include "RevApp.h"
    , d) a6 ]) f# ~4 A5 n) Z
  11. #include "RevAppDlg.h"
    & Y. @8 m, i0 o' ?  M% C5 d# j

  12. $ g* m; }+ [+ F5 }/ P$ ?
  13. #pragma warning(disable:4786)5 I$ T8 G, v4 U# j4 ^: o
  14. #include <map>
    % Y- w6 U; }) v4 ~( ~. b
  15. #include <list>
    0 ]( T6 ^. g+ F/ k0 C5 W
  16. #include <direct.h>
    # q" B# C$ K! I) w

  17. 9 E- B) L$ r8 {( |7 D
  18. #ifdef _DEBUG
    ' ?+ y8 k$ X' D( U/ Y: t) O
  19. #define new DEBUG_NEW
      X+ @6 r; X; L
  20. #undef THIS_FILE. ]# K1 c- M7 m1 l
  21. static char THIS_FILE[] = __FILE__;
    + `$ w2 K  p0 B9 Z
  22. #endif
    3 K) `4 G3 J  r
  23. #include "SkinResDef.h"& J: K8 s+ [; S: ^# L6 ?
  24. #include "ChangeBG.h". T- H* B4 M0 Z$ V6 q0 R5 U
  25. #include "AFXINET.H"
    7 w8 @! Q2 A5 y% z/ r* l

  26. 3 V0 M$ I+ \; z! [9 m3 U
  27. #define TRADITIONAL_CHINESE 0: R& E$ N8 I7 n' i9 s% s
  28. #define SIMPLIFY_CHINESE 1
    7 `) z" ^9 M0 p/ P+ F" O3 r; Z8 _% [# G! A
  29. #define ENGLISH 2- g' l) e3 ^% o- q
  30. int m_iLanguage = ENGLISH;
    9 r; I9 e& @4 e6 @4 w) I* X
  31. /////////////////////////////////////////////////////////////////////////////$ O3 H# l& }$ E7 h
  32. // CRevAppApp) K2 ~% s* n  `! H
  33. 4 r" [( }0 g5 O. y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 R7 D4 D: j/ \2 {
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    / s( l% ~" O2 N- U0 r" S7 t* e
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    9 |; F: ~' c5 }& J2 J7 p
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    & w1 o- f( x6 {* S1 Y. Y, m
  38.         //}}AFX_MSG  }8 ]5 ~" M" Z; L! K
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)$ G7 I; r7 Q. X$ d
  40. END_MESSAGE_MAP()& n; _  K; p( @- O' ?$ E) f1 W
  41. ! c% L# H4 V/ ~1 x2 @+ R' d
  42. /////////////////////////////////////////////////////////////////////////////
    * ^7 r$ h6 |) C" q
  43. // CRevAppApp construction# N# l1 }/ V5 [2 D7 `  g
  44. 3 Q5 U8 C6 ~( |9 s7 d8 N
  45. CRevAppApp::CRevAppApp()) p. U* E! P3 g9 v/ Q
  46. {
      v* h+ m/ K6 M, Q
  47.         // TODO: add construction code here,9 D7 U! _2 v1 L
  48.         // Place all significant initialization in InitInstance# v8 M- [# e3 ?) X
  49.   bDisplayIsBig5=FALSE;7 C( \, I* }! N
  50.   bRestartUpdater=FALSE;
    ' N5 T2 U! @5 A, i9 v6 C
  51.   bFinishUpdated=FALSE;; `7 ^. A9 a+ ~8 u) c4 [
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ; g- T6 p) b4 a4 @6 j
  53.   InitChangeDataBig52GBKS();
    8 I6 @* n3 g# \% ?4 P  S
  54.   InitChangeDataGBKS2Big5();5 m- T( \& x0 X+ z
  55.         //3 ?" A# N5 w5 v9 V8 n3 L! U9 u
  56.         bClickRunExe = FALSE;- s: p5 R1 {, G$ W
  57.         //
    / k$ ?  C9 O/ Y7 ^: T
  58. }; h; K! f$ ~1 G/ X. I: W, q$ k

  59. 8 J, H$ Z0 ]4 C- |1 `. [. ~3 }! G
  60. CRevAppApp::~CRevAppApp()% ?% e4 L' D' `9 i/ p! {
  61. {% Q5 b* E' @) [. G% @: U
  62.         // TODO: add construction code here,
    . F- W0 T$ O7 x7 Y( ~# m
  63.         // Place all significant initialization in InitInstance0 l! R% Z9 d: ^; m* `: H2 l9 }
  64.   EndChangeData();% _- l  T% x4 l; {* s; ~: h6 F! ]* L
  65. }( m0 z" \7 G( U- Z* y

  66. # A, c1 i. [5 B+ i/ J
  67. /////////////////////////////////////////////////////////////////////////////
    9 _! D; N8 j3 ?) ~* }4 f
  68. // The one and only CRevAppApp object
    7 e4 v: S% ]9 _& S% n: u6 @

  69. 6 G& g" V3 v5 I5 @
  70. CRevAppApp theApp;+ \8 l# J2 V6 I4 t. E, p

  71. % C. c4 ~# G) P6 @2 a9 ?, Q$ G
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)6 U1 _+ i% r( W) x$ O* A$ I
  73. {8 B1 @8 h# T, S& U) w0 {2 K
  74.   int iEOF=0;
    $ x- l) P! k- D, G9 g5 _, J
  75.   char szTempName[MAX_PATH];& }0 G$ Y( ]% e- I( ^3 A
  76.   *szFileName=0;
    * y5 ^- b4 O( M; M1 N
  77.   iEOF=fscanf(fp,"%s",szTempName);
    + K5 I  ^$ p! O" A; }
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')0 L  u( w9 H+ j( x! T
  79.   {
    " S# B  ~' d# E6 d
  80.     strcpy(szFileName,&szTempName[1]);
    0 |& C* v# \, G( m5 L
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)7 I' n6 h, s! g# W( X
  82.     {
    8 K; S6 Y! E& l6 r2 b1 V/ y
  83.       iEOF=fscanf(fp,"%s",szTempName);+ O, g3 y% O" z4 q2 q
  84.       strcat(szFileName," ");
    . l& ]5 M$ g% N6 |! g4 |
  85.       strcat(szFileName,szTempName);
    ' z3 [3 x4 a% s4 _
  86.     }
    % |: j, h7 H( }3 R9 `8 c
  87.     if(strlen(szFileName)>=1)
    ( l# u# e. D4 ]: Q) ~6 m$ X4 g8 m
  88.     {
    , ]9 C1 r2 t: M, n7 K1 @
  89.       szFileName[strlen(szFileName)-1]=0;
    , U/ _7 X" X& }$ C7 n0 Q
  90.     }8 N( _9 k" J: ~) U
  91.   }  Q) U, t  y6 i8 u1 L
  92.   return szFileName;  S& o* y6 Y# d0 ?( ]7 H" l2 G  C
  93. }
    0 m  _3 K+ k, C
  94. " e4 C$ g/ ~5 T
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    & r5 Y. @' m' C
  96. {
    . k. x6 g' C0 F0 \- o  N
  97.   FILE *fp;" h8 }% ?# A& W+ m6 m
  98.   char *key=NULL;3 y- a4 D" ?5 m+ h! s* z: P
  99.   char version[MAX_PATH];3 c3 d0 `  c/ J: w
  100.   LPUPDATEFILE file,olds;
    3 @1 \; c5 M* m2 F- y3 y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;/ V7 T% b9 h: Z% x9 `

  102. 6 [, Q1 ~# v3 D) `5 ?
  103.   UpdateList.clear();
    % z1 V+ g, J: C- P
  104.   UpdateFile.clear();
    + B  Y5 g6 c/ b
  105.   if(GetFileAttributes(filename)==-1) return false;
    5 G2 Q  A6 u1 F4 k' y2 w, t0 ~
  106.   if(!(fp=fopen(filename,"r"))) return false;7 Z$ I. n# ~* v( w7 S
  107.   fscanf(fp,"%s",version);
    9 D5 S& l$ a# l
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }1 s5 \) x: G$ P7 G& S
  109.   while(fscanf(fp,"%s",version)!=EOF)! F9 |& N' P* M' c& l/ U1 a( R# u
  110.   {# Z+ E% N) ]6 F+ f6 E# J3 |/ x
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " G# f+ t/ |9 L8 W2 v
  112.     fscanf(fp,"%s",file->path);' R5 K* q4 h8 _6 F: U; [
  113.     ReadFileNames(fp,file->file);
    0 B* b+ F& ]- e3 K; x
  114.     strcpy(file->full,".");
    ' W. c- V+ ?- u6 k6 a& m8 }! P& ]
  115.     strcat(file->full,file->path);
    9 a2 S0 z$ `: A6 ~. O0 C
  116.     strcat(file->full,file->file);: `- l& l+ S3 i4 D+ L9 Z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    1 k. C$ T9 v4 c4 O: V2 x% T" m
  118.     {
    * E% m' ^% @' t" X! I0 [
  119.       file->vers=(float)atof(version);
    9 ?% y( [! i) {/ T
  120.       UpdateList.push_back(file->full);
    * ^& f1 ~+ C* X0 S, s- C( C: L
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));3 j- D0 t+ @# I2 t, K$ N2 w
  122.     }$ A# t; x$ b/ m- Z
  123.     else
    4 e" h: D, c) R' y, p
  124.     {" x" ]/ R* ^* [! n. R
  125.       olds=(*p).second;' ~" l) J/ K) G- G% _  V8 {9 p
  126.       if(olds->vers<(float)atof(version))
    9 a  b) P, [+ W2 C9 e) P7 J
  127.       {4 K( u1 L$ M8 o2 L. V6 ]
  128.         olds->vers=(float)atof(version);
    # a0 \7 f" b# k1 o0 }
  129.       }4 }0 @& P* O0 T1 g8 A
  130.       free(file);
    9 r5 S  d  `  X( s) N
  131.     }/ J( @1 f3 p5 Q# n, x! K
  132.   }7 ^9 Q/ R. N% J8 t4 N: H
  133.   fclose(fp);
    0 W. }6 x: s/ U
  134.   return true;
    . Y% o9 {& E- ]
  135. }
    # Q* @) l3 h; `# N6 E

  136. - ]9 K2 w/ C! j3 c* L/ }& |
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ' Y! x$ l, g4 y% G. D9 |
  138. {
    : |3 H3 [% {' i6 Y' }, }7 b
  139.   TCHAR  szFull[MAX_PATH];: r* `  \# _( X! G  `
  140.   TCHAR *token,*inter;
    5 G0 }. A+ `- n& O0 t' Z# Z
  141.   *szPath=0;: [! h4 U- i. O# p, _' [0 v
  142.   strcpy(szFull,szFullPath);
    4 r* u' h2 z( ~0 g: y5 m- K; c
  143.   token=strtok(szFull,"\\/");
    : ~, s5 e+ l' @- z% G% ?
  144.   inter=token;, Q: x) Q0 K1 R# N( b% w
  145.   while(token=strtok(NULL,"\\/"))- c1 _6 i' Y9 Y& c# C  L
  146.   {
    2 D+ z) J- h9 b/ G
  147.     strcat(szPath,inter);
    3 b9 c, t$ h$ ?+ b* {9 g& o
  148.     strcat(szPath,"\");
    - N2 r( [. g. b
  149.     inter=token;
    & ?/ c% [, S8 J
  150.   }
    9 `2 f  c# g6 P$ _' y6 E2 y
  151.   return strlen(szPath);
    " m* m* U+ o/ K% _
  152. }
    ! K! U( F$ h5 y" m
  153. 6 }& e6 v; \( X, H; o; |
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)) i" s* D/ G9 O
  155. {: O  o" A/ V6 S( I  `7 f, }4 N" ~
  156.   DWORD attrib=GetFileAttributes(Target);
    $ M2 X$ Y! N. B" D" }6 l# U
  157.   if(attrib!=-1)- g+ u8 D2 W$ E. e$ |% K
  158.   {
    4 g1 v9 p2 ]3 O# q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    & b6 ?! Y: [$ k8 G
  160.     {; W  @. ~: V& G) |! h
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
      n8 Y4 P1 j' b4 k+ L
  162.       SetFileAttributes(Target,attrib);7 L$ o% X1 H2 \# g: k  Q
  163.     }
    . h" G# E. e7 c; t5 g! t- E, Q$ R
  164.   }5 r6 ~" E7 Q' _+ E
  165.   CopyFile(Source,Target,Erase);
    # g2 x% `. G8 Y7 x7 E
  166. }7 ~  J3 W* c. J6 n

  167. ! ]  r. U( ~6 Q4 n
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . R1 Q: ^8 A# a! j3 c
  169. {5 `+ i: S2 Y4 w; J" s' l4 P/ X
  170.      FILE *fp;
    5 K3 j- i. x# `2 C: C4 H
  171.      char  szBuffer[8192];
    ; W% u. I" S2 i- r) l+ o4 o
  172.   va_list  argptr;
    ; N! B) k9 S( q/ J) e& J: @' Q

  173. ( X7 ^4 R& [* x/ s
  174.         va_start(argptr,message);9 f7 E2 {9 u1 O8 m7 C! J9 ?
  175.         vsprintf(szBuffer,message,argptr);
    + r  ]0 k1 `/ M8 X# _+ f
  176.         va_end(argptr);0 o6 n8 i2 @5 i
  177.   fp=fopen(FileName,"a");+ x, g8 Y8 l& Z' a1 b7 m
  178.   if(fp)
    8 x( _: q4 @0 G7 s& Y. ^% f; h
  179.   {
    ! _# |2 ^! k( A8 ^# z9 b- q4 s
  180.     fprintf(fp,szBuffer);9 ?/ _8 J  ?1 N( I% r
  181.     fclose(fp);9 k1 k' E8 v5 h! H3 d3 q
  182.           _flushall();
    + T# }& w7 n/ w8 G0 J# q
  183.   }
    & z6 l' [/ n, O( {
  184. }
    3 p# H5 f* ?: B

  185. & A4 E( c( F1 ^( R. X
  186. BOOL CRevAppApp::Fclearf(char *FileName); B2 }& t1 z" i4 g; |' n
  187. {
    . ]! Z3 r6 l; U  V7 o  H
  188.      FILE *fp;
      Z/ M  X) J* x' P6 |/ f+ V* E
  189.     DWORD  attrib;
    + Z- k" Y; G8 i7 u9 S
  190.   attrib=GetFileAttributes(FileName);% _6 T- w  V7 T1 \; d* C
  191.   if(attrib!=-1)
    3 {3 a+ i3 c4 ^  C+ @
  192.   {
    $ P1 R8 [$ U- Q" t' _; R9 n
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      v. q4 w( g6 Y6 ]: |
  194.     if(!SetFileAttributes(FileName,attrib))6 P$ L9 |- J. X8 A
  195.     {
    8 n! F- M3 t$ P* w! c/ a
  196.       return FALSE;* ~! d. P7 t/ K: \& U$ V/ O
  197.     }
    $ z2 E9 i3 K( R- g
  198.   }
    $ _( y; v. A; \' G7 G
  199.   fp=fopen(FileName,"wb");
    * Q6 a) E# l6 V6 H0 C5 s! L; {  F* N
  200.   if(fp)& G, R1 F( @) H
  201.   {/ D" t. v9 `, `5 O& s/ n
  202.     fclose(fp);
    % e: J+ T3 C% x- {( U
  203.   }
    ' @) R2 q8 @6 X: f
  204.   return TRUE;
    9 s) L0 A  l- ]& k: y( R+ u
  205. }
    5 C* x6 \! D  L$ _

  206. 9 L2 u8 Q% _; [  i( N
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    " X: y, w: x9 c2 M9 B
  208. {
    ' Z  W  t& M$ y/ p2 w4 u
  209.   char filename[MAX_PATH];) h+ a2 I$ s& b( m: b' H3 b
  210.   LPUPDATEFILE file,olds;
    # ?0 u- R  j7 a, j) B) Z
  211.   std::map<int,CString>::iterator i;: J7 S. q1 s. v/ \/ [6 x
  212.   std::map<CString,LPUPDATEFILE>::iterator p;' @8 ]7 i5 Q2 k
  213.   std::list<CString>::iterator l;0 b, T2 d( X7 y- u3 l
  214. 2 O4 S4 T8 ~" ]2 q
  215.   if(bFirstUpdate)
    2 {: l: a3 C$ h  X" r
  216.   {8 ~( Z, i' `, E% [. K
  217.     dwCurrFile=0;+ t" W/ n9 n* b- }) Y
  218.     bFirstUpdate=FALSE;/ _9 Y  k4 W. {# Z( p5 s9 M5 V
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), z- V& Y! z" k: M
  220.     {
      w/ T+ r$ @( u' P
  221.       dwTotalFiles=UpdateLocal.size();
    8 |. {! g1 }& c& j  O5 i/ j  H4 t% b' `; u
  222.       dwDownLoaded=0;
    - g# C  u! j$ {
  223.       bSilentStep=FALSE;9 d  B) F- G' k2 `2 x+ G/ K
  224.       bCompressed=TRUE;, {7 N4 Q- {5 y; }
  225.       strExtLocal.Empty();
    9 R& p" G  X1 s0 a% y
  226.       strFullName=(*i).second;2 _) ]# ?7 E0 r- X1 _0 p6 T
  227.       dwProgramState=AP_CONNECT;
    / E( g+ g+ k  z, G  Z) I( n/ ?
  228.       return TRUE;- N# Z6 C3 F( o$ i6 ~9 |
  229.     }
    & X7 k  o3 Q8 y) \" G+ D$ i6 M
  230.   }8 D7 y) f% E3 w* O- y
  231.   else if(bRestartUpdater==FALSE)
    # `1 ?& `" _( ?1 r# r# W
  232.   {$ m; S" u7 B8 c, a+ k# T3 C
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    & n! G2 [; b% k& l$ O( ^) p) u
  234.     {( R$ |+ j! F8 R; r
  235.       file=(*p).second;
    6 b4 P5 z' O0 l- C  z- J! b* D3 e4 T
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    2 p4 t5 Z( K) W9 h( I. K. L  q0 f
  237.       {
    ( I( R( d+ ^, e( _
  238.         olds=(*p).second;9 H" n5 P4 y( T3 J0 I4 y- c; c: l
  239.         olds->vers=file->vers;
    ( x' \+ E" D: u' S+ q9 ~0 @
  240.       }
    , J6 u, m7 I+ l3 b
  241.       else
    7 F! e6 C# @  w! `
  242.       {" g+ l. V* \$ I2 z# s+ W
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " x, P, k# R- d7 v. h( R# n
  244.         memcpy(olds,file,sizeof(UPDATEFILE));, k; e3 B$ O$ o: ^; E: x
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));6 p/ A$ l8 T2 ~7 W6 O1 i( n
  246.       }- j0 D+ v7 y2 F9 o2 L
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    + l0 d) Q( p$ m" f, |- B
  248.       sprintf(filename,"(%s)",file->file);
    8 p0 Q$ b% U# F
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. n  D+ m3 D4 p$ f0 J
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }9 O: H# o( J7 b5 J
  251.     }! O' m4 Y0 g& `" N8 p% W4 \
  252.     dwCurrFile++;( ?* r/ G4 h9 k" Y
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 T4 f1 v) e! m+ \. L! U4 w3 ?
  254.     {
    : \! r7 J6 B- x! }
  255.       bSilentStep=FALSE;$ t( g4 Y$ b! Y7 N' U
  256.       bCompressed=TRUE;3 M2 d8 P$ `* a0 ^
  257.       strExtLocal.Empty();8 \4 {1 q) N: D, _  s9 O9 T1 [; i$ b
  258.       strFullName=(*i).second;: z7 z, w% A6 \8 ^
  259.       dwProgramState=AP_CONNECT;
    " S5 E+ r, K% I' ?7 C) z
  260.       return TRUE;
    0 |  \* B; ]" }" y  E/ C1 l
  261.     }
    4 c; Z  j- P; |+ o
  262.     if(!bRestartUpdater)1 j( u9 t" P$ I* I. n
  263.     {" T- F9 H7 i" ^; {" H/ i
  264.       int iCurrSize,iFileSize;$ n7 {* n7 k% \# Q
  265.       iCurrSize=0;: y5 a' N- T3 D# S+ H: \: E
  266.       iFileSize=UpdateList2.size();
    ! F) g* _, y4 S+ b
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");% h# R9 n4 n& C9 M
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    0 V/ }# |! z3 }, b
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");6 B" F* T  D1 A+ s/ E
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& l" K( u1 f2 k/ o% K
  271.       Fclearf(".\\update.dat");
    & E4 [9 Z4 i- E9 t6 s4 m
  272.       Fprintf(".\\update.dat","Bloodyf\n");, Q5 H) C) K6 t$ @: ^# f
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)8 o7 g% z9 |5 w" o; K. @' z8 o
  274.       {
    - v" l% ]$ o6 X- E8 A
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    7 V9 h7 Q/ I( \$ \
  276.         {) i0 L7 ^7 s; y6 A. e; D# ?7 h! R+ A
  277.           file=(*p).second;; p- w! G8 l6 h& H6 n1 q3 Y
  278.           sprintf(filename,"(%s)",file->file);
    5 a3 g. w) P% d1 D
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 E2 @5 R  Q; v. z0 h" I
  280.           iCurrSize++;1 p! @5 h! ^& |; x
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));% _& I6 @6 p: A! @
  282.         }& M) q8 P9 U+ D3 G; `
  283.       }& e; O- q3 A8 C9 I4 Q
  284.       unlink(".\\update.txt");
    # H; x& y9 r+ e+ k/ ^* R
  285.       unlink(".\\update.tmp");
    ! Z; L& Q9 G# N
  286.       Fclearf(".\\checkversion.dat");
    0 c8 p8 H2 n, d8 K5 V, }
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    1 ~/ [0 ~3 h% w7 s% }4 T( J5 V
  288.       if(UpdateLocal.size())
    ' D$ K) V& o7 c5 R
  289.       {
    / E$ |% z3 G, F' T5 F' N& z7 B" Z
  290.         UpdateLocal.clear();% H. c, q# g& b- H7 C
  291.       }: f) f0 P& a2 \0 A) [, m, f
  292.       if(UpdateFile3.size())
    & Z* n8 o9 J" i8 z1 @6 }: U( E
  293.       {# \1 ]' r) s. m
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 ^2 K- R: m: R) a5 p; E3 L) y5 m/ \
  295.         {! q, _. |2 j8 ^! @
  296.           file=(*p).second;
    3 y" S- H2 ~( ~$ c
  297.           free(file);
    0 m  h4 [$ Q0 \% x
  298.         }
    ; o& f4 b! h* v% I6 o6 }7 [/ }/ `
  299.         UpdateFile3.clear();3 S3 v; c$ {1 w- j$ x
  300.         UpdateList3.clear();
    % A9 x; q) `5 R# n  z/ H  U: D
  301.       }7 G7 Q) t! V. T3 F8 [0 K7 w3 s
  302.       if(UpdateFile2.size())
    - h# N. U1 J( J4 `
  303.       {
    ! Y5 F* ~% X+ I8 }4 A+ t: P7 T
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & _1 C' b% K2 u+ v  {& x$ [
  305.         {( z, H. j8 r+ [% r
  306.           file=(*p).second;# c, r) ^) u" g* d" @* @8 @! p
  307.           free(file);% c2 F% ~% p: k2 O
  308.         }
    - m% _$ L4 m! R) g7 x/ |
  309.         UpdateFile2.clear();! R* t; @" {" k3 u5 o: ?
  310.         UpdateList2.clear();
    # b+ t8 P: z: p. }
  311.       }4 A" }- ~, ^; S7 I/ M. T8 v) S
  312.       if(UpdateFile1.size())4 F  a/ k) \" f. v7 N' V1 z
  313.       {
    ; u. n0 Z6 P: _1 L2 F* x
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & }5 G8 X) l7 i! n, {
  315.         {1 Q2 x# o% n. k
  316.           file=(*p).second;
    % a( {! t& m5 E2 L& s4 M
  317.           free(file);
    : [' z& ?$ o8 H' z
  318.         }
    & b8 f& v8 W- E
  319.         UpdateFile1.clear();. L$ z1 P/ K* P+ f# p. E; ]. O5 U  Y
  320.         UpdateList1.clear();+ D2 t6 U, @" a  ^; `
  321.       }
    6 R1 h1 c, ]7 D
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! ^1 ^) T! j" ~3 J
  323.     }
    9 d, F- g' q8 Q7 J0 t* ]* n
  324.   }
    ) o1 n( N! @5 n1 m
  325.   return FALSE;" w; H; J! ?4 W
  326. }% G! X) A! R: q8 n

  327. ' o7 g% ], _$ e  w
  328. void CRevAppApp::ClearAll(void)) A  T+ B$ y! q( C- l' X
  329. {, x' X' A' ~2 n5 j. {2 p
  330.   LPUPDATEFILE file;
    , g& ~! K8 p7 @  a: d$ j; w
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    - U) J, y; D$ M, [: h6 o

  332. # S- |. ]/ n# W$ s4 d$ C
  333.   if(UpdateLocal.size()); L7 T) q- v0 H+ `
  334.   {
    . t! Z# b- s6 v0 o" \
  335.     UpdateLocal.clear();
    , z! c- M. d8 f3 P+ {. X: d; d, ]
  336.   }
    . c6 o! {1 B3 X' M
  337.   if(UpdateFile3.size())' |) L, w& R9 e! \0 a6 v
  338.   {
    / c. o4 {; L' q8 x" C
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  H. ]) x( [" r
  340.     {! H' E4 a% y% ]( t. g8 j
  341.       file=(*p).second;7 r3 P  E9 I7 U( x  w3 l* c& c0 y
  342.       free(file);5 @8 q* V+ O/ u: E  d
  343.     }$ G' w! h/ ^% X+ F1 p
  344.     UpdateFile3.clear();
    " T# I( x( Q' ~/ _+ I  `
  345.     UpdateList3.clear();
    8 p8 q+ \7 N7 f. A" h- `% N8 X
  346.   }& i8 `( R' G, u9 g0 _& P
  347.   if(UpdateFile2.size())( T( ^0 Z; V  f1 V  [# {8 k
  348.   {' R7 h- [: ^6 l* M- T+ S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! ?3 I6 l( l: U" D
  350.     {
    * T$ J0 k" j. v  I. V% O  D1 ]
  351.       file=(*p).second;
    + Z$ w# O& @# h7 g3 Y
  352.       free(file);" S4 B' k" V* v. }7 D9 `) q+ C
  353.     }
    2 K5 B$ e% {& G* y5 y5 U0 V1 l0 y
  354.     UpdateFile2.clear();1 @. I/ S% Y8 X4 R0 L8 l% s
  355.     UpdateList2.clear();
    $ z% F4 @$ ^" X' x0 O/ p
  356.   }( d0 v' u+ N- N
  357.   if(UpdateFile1.size())3 M9 y& [' ]4 x/ J0 ]* G
  358.   {; o! b8 D$ m- Z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# }# e, g* L7 U0 F
  360.     {
    # w6 s2 `" c4 t
  361.       file=(*p).second;9 J% @$ B. G- L0 ]2 g" {
  362.       free(file);
    # w7 T6 d, |" [: _, \2 Z6 k4 u9 }
  363.     }' A6 K+ `5 u1 E  U. N
  364.     UpdateFile1.clear();
    " Z4 z6 f) s& i
  365.     UpdateList1.clear();( {* o& C. J- H# h' u3 A
  366.   }
    3 f4 Y+ N/ x, j$ }  j5 w
  367. }  % K5 E- y( R# t8 o/ F" N# ]
  368.   3 d4 ^; X$ C- e. [4 E
  369. BOOL CRevAppApp::CheckLocalVersion(void); V: \& c' ~/ r& [: \
  370. {( y$ ?; ~, f2 ~: U, E' T' R
  371.   int c;  q- j+ [% ]+ R+ q9 j
  372.   LPUPDATEFILE file1,file2;
    9 I' k: O$ G$ z( G
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    " C6 s8 v/ o& V" y4 J
  374.   std::list<CString>::iterator l;
    $ ~. k# J& `4 N" y' C: a1 g/ l& _
  375. 7 H2 C6 |6 C* j/ k- `, Y$ r& ~5 [" P
  376.   UpdateLocal.clear();* g+ k) x4 ?3 x- V" F
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 r6 B- e/ N- Y. ^* [. M3 R
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);/ U) F1 F- o8 Y6 C" W7 I
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    " h* i* T4 h3 Y/ G+ v$ U& F$ J- h
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    . }0 V7 G( O$ e! _6 o
  381.   if(UpdateFile3.size())6 I# e& y" D! G% D6 l
  382.   {
    0 @" i  c8 u* g2 r
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    : g6 S+ w% T$ r9 q4 }
  384.     {2 J3 k$ X% M% b% e4 T5 P5 }
  385.       file2=(LPUPDATEFILE)(*i).second;
    0 Q) i; [; T! r0 n/ N6 f
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; m, w; b: u" I4 f7 V  V1 O0 Q- V
  387.       {5 T% u! N. J. A+ [5 `4 \
  388.         file1=(LPUPDATEFILE)(*p).second;
    ' v. g' p* q( ]& F
  389.         file1->vers=file2->vers;
    ; K) v7 A4 [: U- O
  390.       }3 m" @# [0 b) ]- `
  391.       else
    7 l0 [8 k6 ]6 _( h$ X
  392.       {# O# l1 l) W; g6 ?
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 k0 N3 ~$ u8 P! M
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));; N2 L7 c1 Q7 t8 L6 y
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    1 ?) \0 }7 b/ q9 B& z  h) [- I
  396.       }
    - ?; g+ m9 @2 z1 q
  397.     }3 M' }; h- w' H! R3 s
  398.   }! c: O$ e' n! e* S6 D
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 P; m9 U' b" }
  400.   {
      s" s/ `* R4 r* x7 M5 R' X
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()). M  q, l- k1 ~' |# Q$ o
  402.     {
    ' Q$ w1 z- S7 V' F7 }
  403.       file2=(LPUPDATEFILE)(*i).second;3 |8 p' `# ~8 A3 m) V
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); k7 |( I' [8 J2 e( z* k% }
  405.       {
    * s2 K: O. y$ a6 q- @& l5 Q$ o/ n
  406.         file1=(LPUPDATEFILE)(*p).second;
    2 w' U( @: r5 b" T  s3 G: z$ W
  407.         if(file1->vers!=file2->vers)  d5 a  i) P! S& ]! F! v1 J
  408.         {' }2 I. Q3 e5 _
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    . a# a/ Z' u1 y- h- ^
  410.           c++;
    ( J: k$ S0 @+ g
  411.         }
    * L+ R  C/ K" a! F4 a; c
  412.       }
    + |$ f# v+ I  \+ g* M0 s9 b
  413.       else
    8 y6 N  w3 W$ J7 B8 ^
  414.       {: j0 y2 t+ n* G' h/ W2 b
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 w7 Z. G/ j+ _8 c
  416.         c++;
      R0 ]0 o" ^9 W, v; W
  417.       }! _, X# q0 ?8 A, f" g; K5 r; h6 e
  418.     }
    ' ]( O& f& B" m/ ?3 l; I
  419.   }# @( u2 i1 V- Q6 u4 M% U( I6 m
  420.   unlink(".\\DownLoad\\update.txt");: C1 C7 B$ w1 d# b& f6 e; L: W
  421.   if(UpdateLocal.size()) return TRUE;6 C& R8 J5 m$ p( _4 U* _
  422.   else                   return FALSE;) g5 z$ x# v2 t) ]( o
  423. }
    5 J7 H. t6 h" A/ M8 |
  424. 8 u/ p6 U6 h$ x2 p
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"$ X) v# r# G& ~5 t7 @2 m% J
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    + p8 ?& ]7 K/ A6 b/ {- S

  427. % c0 Y4 j- H7 J/ F9 `- ^" q9 ^

  428. 3 k. S! E8 n" r7 Z  d% U
  429. 1 g" ]3 ^4 }% h$ w& Y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)' R4 N+ u& s& Z& P% k
  431. {  O; E0 X$ d" x& N1 s
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
      z2 |0 r7 |/ x
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * _! M/ E; @+ {& ~; q- M4 m
  434.   {" S% r: ~! D7 s1 u) }+ R" y
  435.     char szLanguage[50];$ U9 i8 @6 h5 Z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ C8 K) F8 w9 G0 g- T1 S' {
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 l  E2 w" f& V
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; S% K( S  [$ J0 T
  439.     else                                   m_iLanguage=ENGLISH;4 h) @  r# Z4 S- M2 B' L
  440.     char szRegister[100];2 K9 Y. w7 s) n& o$ \& g
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % f6 \) h2 I9 I" r& ?% h# X! p
  442.     strRegsName=szRegister;
    9 R& Y1 k! S3 k0 d8 S$ B' g
  443.     char szPatchURL[100];5 o) B7 k  e6 e. I/ z, H& r- F
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; B& c( {% |, }; Q7 p  z* [
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( L4 v& y2 L/ {
  446.   }
    ) t$ d3 z6 m/ ]& o4 f# a' U
  447.   else# x7 q/ T9 |0 O- ?' ~
  448.   {( ?, U6 ?+ W/ J9 a2 o% ]7 I; F. }
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; K( q  ?+ k9 G3 [. G+ H
  450.     strRegsName=DEFAULT_REG_URL;1 o  t: b8 }1 z6 A" U4 A7 h
  451.   }
    ( v/ o) M/ Y: o+ ?& f! ~
  452.   if(GetFileAttributes("hosts.ini")!=-1)& n4 t- I1 u9 Z. G4 y
  453.   {& C$ K! l- u! e8 N+ ~: b+ P/ d6 Y0 h
  454.     char szIP[50];8 `3 p' C; l" w- v, o2 a
  455.     char szDIR[300];5 }* x: n8 @# r$ q# x
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))# V7 g2 p) }2 H* j8 P# q
  457.     {
    0 I5 l! D" |  F! k( @* l
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");. h4 k' h+ E4 H) z4 F7 V7 \* y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    7 q% {1 ~5 _  {+ h  u8 g4 t
  460.       strHostName=szIP;% E% h" ~, Y0 v$ H1 L
  461.       strHostPath.Format("/%s",szDIR);  L- S1 t4 p4 K
  462.     }" S3 T3 U) E8 `4 ^0 |
  463.     else5 v5 |) T) g9 v: W, W
  464.     {( }2 c  m" m! j, @4 x* j" D2 U
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 S$ {! H9 O$ V' G" D$ O+ Z3 t! t
  466.       {
    3 c8 j2 W/ b0 L# \
  467.         char szLanguage[50];/ ^9 U! M8 D6 e3 T' |7 {& d
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 p* i; ?$ S/ H3 ^9 }0 @* a5 J2 d" t
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. z- H' H# f4 N% Q' t$ g' O* [: L
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ I' O4 C/ V' n/ ?/ i' e
  471.         else                                   m_iLanguage=ENGLISH;3 g0 _4 S7 e4 `1 X9 R+ m  b4 M9 ]
  472.         char szRegister[100];+ ^0 L0 _2 s6 F" I) @; U, L
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 ?. q( L) \2 }# T* D- G- g
  474.         strRegsName=szRegister;8 c& F( i  J: w' w
  475.         char szPatchURL[100];
    2 o5 f5 G7 G, A% a" ^9 _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / E2 R8 Q( F# ~3 S9 M
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);& n+ f* C! g# ?- e4 V" G/ r( B
  478.       }
    ) ^0 `) M. _" S# a+ K. k
  479.       else- h- f, n7 }' ?9 ^5 G. y
  480.       {- f. J7 d0 u5 t  m% s
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);* q6 e8 a% u" w
  482.         strRegsName=DEFAULT_REG_URL;
    8 s* N% ]4 K. e7 U7 b
  483.       }% o- a7 @" o  c
  484.     }
    + Z# ?2 ?2 s6 y$ X$ T9 C2 l0 n
  485.   }
    - x7 f$ V2 Z$ Q. h7 N
  486.   return true;9 a9 K3 S  m. X7 _7 O+ r# U% h0 L8 h
  487. }8 m# S0 q: |4 M
  488. 5 p9 Y$ {  F  ]1 @2 o6 \
  489. #include ".\ZLib\unzip.h"
    6 l) c  s* Y, ]
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    & h: Z/ q" A. s+ m; S+ ]$ ^
  491. /////////////////////////////////////////////////////////////////////////////6 b+ r% w7 H. \8 Q8 q
  492. // CRevAppApp initialization" Q3 V  ^1 y& |2 r# V& q+ g
  493. 2 z& r! R  W( Q& V
  494. BOOL CRevAppApp::InitInstance()
    + e  g- Q, c+ f9 o8 O& j$ i$ \
  495. {
    4 c" _) [( _0 ^4 F7 J, D+ A
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];+ s1 T( U( M3 Z4 U& Q1 ?+ |
  497. * E$ F) k/ T. s/ F# E, I; q
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);& Y, W/ K) H) R9 P0 B( k1 x
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    : g7 A" R3 l3 \  i
  500.   {
    , Q9 I. c' r  m( s) _
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");, i% G% s- T; h# i/ Z# `0 r
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 h; x5 w. C2 [
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))), K" n) J4 A( H9 `
  504.     {& g5 _0 [% @' u
  505.       strcpy(szPath,szPathTarget);
    + ?4 x  G! x, `' t0 q7 v# [) J5 u
  506.       SetCurrentDirectory(szPath);/ y" J0 w/ o6 A2 k: P7 \, ]
  507.     }  T3 w- U( q! b. m
  508.   }
    ! p' R% R4 N- S! q8 I2 i
  509. #ifdef _DEBUG! P3 w7 }: x# a) U
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 R! b: s. \9 p) }4 v0 d7 P* I9 U( c
  511. #else9 B( _7 Y# X- F! k( @( V
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ' y# k' d5 z# `5 y
  513. #endif
    ; Q9 {  w7 ~4 a- p5 r
  514.   {7 ?5 W5 j, V/ m2 `. F
  515.     char tempFileName[MAX_PATH];7 U0 y# L. T9 i7 Z
  516.     strcpy(tempFileName,szPathSource);7 k' K5 ]" u+ T1 j* I- h
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ' `4 k9 u& V0 r8 A- H( l
  518.     strcat(tempFileName,"\\$CSUpdate.exe");+ z# H  e0 Q" F, V- I% e  g5 q
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);. g, S' u6 E' M" }
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);4 d- O; M* p" P& c8 n' a7 _
  521.     return TRUE;
    2 q0 z* J( U' m/ Q
  522.   }7 f+ g' T9 I3 J' @
  523.   // Nuke 0118: Delete run.exe: g& E" Z" y: ?" ~5 k# A
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ! @5 ?$ ^% g# _/ Y2 t; {3 b" d
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    , }  J+ k( L. K) E" Z- P( {3 U) H5 G
  526.   if(!ReadCfgFile("Config.ini"))
      G4 A  G) r2 r0 [1 g
  527.   {% e9 m) A5 {) n- o3 \
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);& k; D& N$ c/ ?! m7 E1 z. v; w+ K
  529.     return TRUE;5 h9 }! x) a* B3 r9 H. s0 X
  530.   }
    ! u+ a% x; a- r/ c$ I% y; U; y2 Z
  531.   HANDLE mutex;
    $ z  P! p2 Z. h3 z# k: _
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))# ]* [8 t7 v1 X
  533.   {1 q4 a* X9 p. P  i$ s2 ]
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)8 c2 Y( y+ k& s7 K" |  z+ _2 @
  535.     {# l( e  M/ v' z, Z8 p5 P
  536.       CloseHandle(mutex);
    ( f/ A0 p' c% @& t
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);% F0 H- N* N$ C9 s4 D, k" a4 t
  538.       return TRUE;
    - a' W- S' Y0 j- X/ o
  539.     }5 @, p- T2 q" n0 n( k
  540.   }  
    5 o0 X7 g* r. A" b9 y- b
  541.   CloseHandle(mutex);
    . U4 E* z, v! _- k
  542. ) S; L+ R: M% _. A7 {5 f. N
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);7 n+ {1 r( n' J' m9 E

  544. ) a+ h/ Q. k7 E; A7 y
  545.         AfxEnableControlContainer();: P4 z  ~0 z" G! B3 u6 B9 V# J! ~
  546. ; p$ ^) p, o/ |2 N3 r) h
  547.   bCanUpdate=FALSE;
    ; R' x% N& d% B3 m
  548.   dwStartUpSteps=1;
    , q( k/ s+ ^) P8 c- Q3 U
  549.   dwProgramState=AP_NOTHING;9 z: y0 F4 I! T. I3 r5 M

  550. 2 V6 Q& I) v0 z' e( L. a" p4 v
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);* l8 q. N- B* R1 A. \3 e
  552. ) C1 X5 v" q$ {) V; m
  553.         // Standard initialization
    - w# W- W" p. W0 H. `' X4 [
  554.         // If you are not using these features and wish to reduce the size
    4 B5 z3 }$ r7 Q
  555.         //  of your final executable, you should remove from the following
    - Y  u) o6 y5 H3 S
  556.         //  the specific initialization routines you do not need.
    * I2 i* a6 V+ {/ j: I

  557. 9 ~, e0 F: I  Z  f5 m% H
  558. #ifdef _AFXDLL
    8 ]" Y9 }+ x6 h9 I0 p7 Y; }" N
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " q* _) |4 `# w; x7 i1 f( {
  560. #else+ D* f8 p8 k% e8 ?
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    6 A7 K9 A5 t2 s: \
  562. #endif
    ( W# q  R* I  d& R2 D7 E7 p
  563. 7 O% ?% o% J$ x- D3 _/ ~; S- E' P
  564.   dlg=new CRevAppDlg;
    ! j; T9 z8 w$ f, _# t9 f( b; J
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    # j& f% `8 G# e+ P3 S
  566.   dlg->ShowWindow(SW_SHOWNORMAL);2 x& Y6 S" Q4 a4 F" J# r3 D6 `
  567.   m_pMainWnd=dlg;
    $ s+ b+ y/ a" V' f9 q) |

  568. " O: w" N, j5 _
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);8 c: |9 w3 k; C: I2 f3 A. S
  570. 5 o/ F) h8 c3 |; E# l* }8 N
  571. //  GdiplusStartupInput gdiplusStartupInput;% Q2 k5 h) j5 j  h# O& F
  572. //  ULONG_PTR gdiplusToken;: i8 n; U, Z& E
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ) U% X. {# W2 {* k/ v# m2 Z
  574. : n* K5 T# p! ^& d: r+ f8 g4 Q) p6 c
  575. //        CRevAppDlg dlg;
    ( t7 {7 [& _4 {
  576. //        int nResponse = dlg.DoModal();* J- c% m9 [; |% v7 C+ R
  577. //        if (nResponse == IDOK)3 e) z( P, S  l8 T
  578. //        {
    * k. l8 c+ D- F* G
  579. //                // TODO: Place code here to handle when the dialog is
    6 |/ o( c* B9 d! u
  580. //                //  dismissed with OK
    ! S) m  Z* x3 }2 G8 g5 Q
  581. //        }
    ) |; \' L! m: J2 N
  582. //        else if (nResponse == IDCANCEL)
    * \8 ~4 g  V" U" L" u% I) w
  583. //        {: k; O. V# d" s$ L
  584. //                // TODO: Place code here to handle when the dialog is6 f0 q1 e( x. R, m- A
  585. //                //  dismissed with Cancel
    1 z9 Q2 m& d+ M, L; M
  586. //        }+ O/ ?/ _$ c4 C

  587. , S. ^' V6 f3 G1 |' U: h& I1 C; g5 Y
  588.         // Since the dialog has been closed, return FALSE so that we exit the3 }) i1 ?4 y5 D/ Q: t
  589.         //  application, rather than start the application's message pump.9 s# E6 p- T4 P5 v
  590.         return TRUE;5 i# b( D0 R8 D
  591. }
    $ b/ S, c4 }. t
  592. & u' S5 D. g) E/ P, N
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    + Q' ]* o, @/ c, ^+ H  F" X
  594. {
    & `$ D" U. v/ k, _9 o( ^9 s$ X
  595.   int i;
    , T' q1 Z; {5 {" i5 u
  596.   char *szRet;
    $ m/ I7 Y( O  P9 Y" [% ^

  597. . w. d5 b: l5 z2 K4 Q3 x
  598.   if(pSource) { itoken=0; sztoken=pSource; }- v: X' U1 w5 C
  599.   if(sztoken)
    . h* k2 L% r9 U( P, U1 }
  600.   {8 z3 n" o2 P; M: d, [0 |7 R
  601.     szRet=&sztoken[itoken];6 [4 e+ k! e3 V7 x9 N# J9 K
  602.     while(sztoken[itoken])
    " F% |( e4 i2 S( y0 D
  603.     {
    # w4 n8 t7 _. i! ?$ [* P1 ]
  604.       for(i=0;i<(int)strlen(token);i++)
    * Y: c/ W2 ]9 c2 a1 R: n
  605.       {/ n+ W% S. o. Y3 S" z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]): [. L0 \. C" j: U
  607.         {8 n. F, b* i/ K
  608.           sztoken[itoken++]=0;
    2 ~8 ?; H: W$ J( X5 ^
  609.           sztoken[itoken++]=0;$ ^2 y/ M$ O% @
  610.           return szRet;% J, V# M' ^! A+ X+ Z- T" X9 ~
  611.         }
    4 E1 s3 |" `0 c) ]: @+ B* j
  612.       }5 H' a: k% H& q
  613.       itoken++;. g4 ]( [% \# }' O" Q# |3 C, S0 D
  614.     }0 T$ ?- o; T8 F2 K4 ]8 \2 g9 \# j+ }
  615.   }( W$ D3 d- j: V$ b7 z2 r
  616.   return NULL;
    & t$ r+ l1 P5 k3 W- v( n& y
  617. }
    ! @+ P; V( r# L- ^: Z3 v9 I

  618. * a/ b0 g  i4 ^& W& r' L
  619. void ProcessProc(long Total,long Current)( @+ d: N* s' O9 J5 S
  620. {' M5 n6 Q$ k: S4 L: o% [1 @
  621.         MSG msg;
    ' i& B5 N+ [, q4 i2 R
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);4 y  D% m. a, l% Q' ?' }) @9 i
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));" j' r9 }- L" D& C, W7 O! g0 l
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))8 N& C! G/ j) k% i0 k# P
  625.         {
      Y0 |  p; f+ z* u; |0 Y
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ; S+ F0 ^( k1 i. W8 L
  627.                 {* S0 F; b9 P$ z' S: r' _" F
  628.                         return;4 f) x$ k8 v6 x0 t0 \
  629.                 }' q1 d' q5 k' _7 p2 ]4 c4 w- ~
  630.                 TranslateMessage(&msg);
    6 x7 p* {' v) [  r! f8 H
  631.                 DispatchMessage(&msg);% R8 r- t- n0 R/ X* _
  632.         }       
    1 D/ |, b: M" c9 Q7 Y3 N0 x9 V  z
  633. }4 {0 [  B+ l. Q- f, K
  634. ! m/ F; O& u* [0 q( Q
  635. BOOL bFirstChar=TRUE;; S% m! h6 ~7 W# X0 I

  636. 7 F5 H6 y+ o! M
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    + B! T5 u0 G  p+ P. w
  638. {
    / J- i9 Y* \. |3 O7 ^! ]* ]4 X' u
  639.         // TODO: Add your specialized code here and/or call the base class) h: t* D1 U  L' X
  640.   switch(dwProgramState)7 d  R! j0 d' Q( k5 v7 a6 U6 w/ Q# [
  641.   {
    ' ~0 m, j9 l) {) M7 i
  642.   case AP_NOTHING:
    8 X! x2 I  m9 H9 M7 Y8 B
  643.     switch(dwStartUpSteps)2 x! t  m* _8 }$ V
  644.     {0 v4 _# p5 u; t
  645.     case 1:% E; b5 [; k3 O" ?  z
  646.       {
    8 X7 E  ?% H. c) |  P7 j
  647.         int i;
    * ?! d" k# E/ z- y& u7 R; e
  648.         CDC *pCDC=dlg->GetDC();# n$ ?3 Z" F' a7 f
  649.         HDC hdcwnd=pCDC->m_hDC;( Z8 p+ _. B5 M
  650. //        Graphics graphics(hdcwnd);/ Q) w% O& |4 ^. g) L% X/ N
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");) {) x3 m- k+ g6 k
  652. //        INT iWidth=bitmap.GetWidth();
      s2 |$ ~, M( q& j' B! y. q; M
  653. //        INT iHeight=bitmap.GetHeight();
    " k4 D7 @+ g/ s( Y  z( G
  654. //        Color color,colorTemp;) f" I# M0 b7 `# F: g$ B
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% R. t( A% t  x3 r' P, L
  656. //        {
      {" {% `; M/ Y7 p$ W: Y
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)) h4 x9 i! S0 k+ Q, f* n
  658. //          {: u' f3 X0 ~! y' h
  659. //            bitmap.GetPixel(iColumn,iRow,&color);$ \6 p* _, A; `/ Y& {0 s( \
  660. //            colorTemp.SetValue(color.MakeARGB(1 H7 r& l! r9 E2 A2 Y" j( D/ t* F4 G
  661. //              (BYTE)(255*iColumn/iWidth),
    1 E# Z' G1 y2 [  M( ?
  662. //              color.GetRed(),5 i6 t+ |- N7 @- R5 }7 W
  663. //              color.GetGreen(),6 t8 v9 @/ X5 \
  664. //              color.GetBlue()));% Y5 w& L6 I! ~- V3 b
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);, I! D0 I% [$ d7 s# X) L
  666. //          }
    6 |. g6 |) Z) v) {# T+ ]9 n2 A
  667. //        }: f8 ]3 ?& K* S. k: `# _
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # j# u2 [! l" v8 s$ [, [  Y: f
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . o2 ?* O. `/ `$ V2 X. x
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    5 Q" W* T- a; h) k+ [
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " w* q# y2 V# U- |2 t" ?5 t
  672.         for(i=0;i<240;i+=8)) v* H9 j; [- u# u/ I; C% A4 f
  673.         {2 f5 x: n5 |: Z4 ~
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 B* ]! h3 Q! l$ l1 J
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, l2 U+ E2 K% h" Y6 O* w
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 y& S0 r7 @& |) k
  677.           Sleep(33);
    4 C7 Y' n& m) r
  678.         }
    * ?: q2 e+ E; i5 I5 w& y. I! t
  679.         Sleep(1000);" t1 e. o; x- `$ l9 @7 _$ g
  680.         for(i=240;i>0;i-=8)
    + i+ B2 T3 p: b6 e* O$ a
  681.         {6 W+ h6 H0 ?% x. l3 O6 N
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " p7 G: d4 I* N* A9 V: K; ~* `7 t+ p
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; F) u2 v1 I/ n$ V
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' _; B( T7 C8 [% w2 r/ @6 O$ H
  685.           Sleep(33);9 \% Z# X) F: R! e
  686.         }
    + N, J$ y( y( p) z3 H" ?
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);) }5 D0 }. @/ W1 I7 i
  688.         dlg->ReleaseDC(pCDC);
    ' M, X) H- d( {  K1 M6 ]
  689.         DeleteDC(hdctar);/ {: V# G; Y  [: q; j8 q4 O* c' ^
  690.         DeleteDC(hdcsrc);1 R! Y& ^+ y) V( i  T- z
  691.         DeleteDC(hdcorg);* c& [# o( h$ q
  692.       }
    5 y- {" [5 l' T; e+ H" C% O! c1 l' J
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);2 H) h* w& e/ e3 H0 z; ~/ p- b
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    - p# c: A" {: z) Q5 p9 u- K/ d
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    % M6 F" t# o- t+ z, b9 Z6 A: B! x; C
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");0 B9 Z2 W% U6 o  T) ^
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & @- ~8 R" o2 }  }
  698.       if(!Dn.Connected())
    9 k0 c) z# ~0 Q
  699.       {
    7 `: B* n- T7 E: E& R( _6 e
  700.         dwTotalFiles=1;
      b4 M) d$ ]+ }& D7 S/ l
  701.         dwDownLoaded=0;/ m( j: w# p1 \6 v
  702.         bSilentStep=TRUE;
    / J6 v* x/ }: G9 y$ K
  703.         bCompressed=FALSE;
    $ L9 `4 X5 f) |/ |/ A: F* Q
  704.         strExtLocal.Empty();* n; `+ Y* j# V* M
  705.         strFullName="readme.txt";8 }- B) Y6 m* c# [. u+ h! X' {8 c
  706.         dwProgramState=AP_CONNECT;
    0 \) Z* X) V" y6 f
  707.       }
    2 l6 j! Y) N/ l! W, N
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();" M6 n( B* |* c: _9 {1 c
  709.       dwStartUpSteps=2;8 t# U; b7 y5 I
  710.       break;
    + A4 d1 _/ g# l: ?& W  G( T( O
  711.     case 2:
    & F/ M0 @8 _: h0 t; i
  712.       {# Y. i- v; [- o6 N2 N: Z
  713.         int iEOF;
    , ]+ c; v! x: j! u3 K& D' [# m
  714.         FILE *fp;
    7 c5 m: V5 c6 O3 L9 J
  715.         char szString[512];
    ) p% M1 E1 D* V( C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    , W+ x6 X  k! p2 q# N2 R: i7 t
  717.         if(fp)9 h  W% C  v  `- K$ a2 r% {
  718.         {; K4 L! o# E6 w# O0 l% A3 V, O
  719.           do
    ' ]" j: E7 \; Y/ o
  720.           {
    ) \) V3 j8 B  h. y7 \$ u0 _/ Y+ F
  721.             iEOF=fscanf(fp,"%s",szString);
    % B- a* L( b7 }1 @% `1 [0 Z
  722.             if(strlen(szString))8 y+ o9 ~; ?5 @% D' Z) _
  723.             {" W2 Y, Q9 C' g6 Y
  724.               if(bFirstChar)! y1 l% I8 j- ~1 \) K
  725.               {
    7 D9 F2 |2 g/ n0 n4 X6 T
  726.                 bFirstChar=FALSE;
    : L! I. \2 [7 E, A1 \8 w$ d6 }
  727.                 bConnectIsBig5=FALSE;! S5 B- V4 k7 D- s$ _' ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ; m) F4 X, _- E+ b
  729.               }
      E. [% L4 z7 J3 F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    1 J  g' r* x+ v
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));0 t& ]- T% \; A( X* W( H) x
  732.               dlg->m_ListText.AddString(szString);2 k  k+ m7 B8 R. e9 O
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 d- X6 L2 p* W0 h- b  q
  734.               *szString=0;
    , p# C- `" Z, j$ R
  735.             }
    0 a1 o  _& F3 X, c
  736.           } while(iEOF!=EOF);4 f8 V9 w* p' c/ d3 U1 o
  737.           fclose(fp);
    ( ?' @( W6 `9 d  d9 n% ~/ h
  738.           unlink(".\\DownLoad\\readme.txt");) }! w+ B# Q  [. R' @; _  z9 S
  739.           dwStartUpSteps=3;3 T" V& N& z0 ^3 W6 D4 @; r
  740.         }, J' \8 y" g; V) \; g8 s$ Y7 i/ C  R
  741.       }
    * @; n3 Z' ^+ v" z
  742.       break;
    # e3 O+ N# `  ?
  743.     case 3:
    ; m/ I: e; f& c; e' k% f
  744.       if(!Dn.Connected())9 c* C: @' e: b. l/ u
  745.       {( P/ C* [  g, W; g2 h/ F5 b
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  I- h; Q  ?  p8 q+ ~
  747.         dwTotalFiles=1;: y* q: V; C+ b6 W& M
  748.         dwDownLoaded=0;5 O& C2 O2 y! E$ s# N6 @3 ?- }/ b2 n
  749.         bSilentStep=TRUE;
    ) y8 h8 R' V: K% I9 r: k4 y
  750.         bCompressed=FALSE;
    ' ?, C' e( u4 b/ g+ t
  751.         strExtLocal.Empty();2 g# p2 S6 h" q( }' F$ F  V
  752.         strFullName="checkversion.txt";
    " @) h% H( v: X; Z7 G
  753.         dwProgramState=AP_CONNECT;3 C0 n" _* C+ m9 F
  754.       }  \) q/ j6 a! L; I: }
  755.       dwStartUpSteps=4;
    " E" q+ e- f  L
  756.       break;
    ) g6 c& {0 H* b5 ^
  757.     case 4:1 ?3 m. q' I; c! b
  758.       {
    ( L0 Z8 s* w+ l! C
  759.         FILE *fp;' q3 Q: N: i$ v: K
  760.         char szString1[128];( L% L1 d9 @3 S% ?
  761.         char szString2[128];
    7 d& F. @4 W5 G
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    % h7 j9 F4 X$ i  ~" L
  763.         if(fp)
    2 N$ l( P3 \9 k6 q7 P2 w7 [1 N
  764.         {
    4 {! k& d6 y$ C! J5 u
  765.           fscanf(fp,"%s",szString1);
    ) V+ W/ Z( W. e+ q# H- l6 I* C
  766.           fclose(fp);$ ]$ N3 ~3 ~8 ?  r  T# I8 o, n( z
  767.           fCheckVersion=atof(szString1);
    1 H+ |  I- q3 g8 E6 F& i
  768.           fp=fopen(".\\checkversion.dat","r");
    / o0 ^% Y; R' d
  769.           if(fp)
    ) b8 v( }: M& h* N/ C* X
  770.           {
    ( \/ Z6 F/ d5 Q: D: i2 W
  771.             fscanf(fp,"%s",szString2);6 w& |% F: k& w% U! _" p
  772.             fclose(fp);
    ) K" M9 b1 M1 ^
  773.             if(atof(szString1)!=atof(szString2))/ |1 Q' w4 h% t& L/ {
  774.             {
    6 l8 U  s5 Z5 _$ m9 ~7 }6 v5 O
  775.               if(!Dn.Connected())
    : W% c7 r! z! u
  776.               {
    ( s9 ~, _4 p) M# |+ V/ r
  777.                 bFirstUpdate=TRUE;
    . `3 l8 U' N& F
  778.                 dwTotalFiles=1;$ V, u+ J$ V! X) g1 z* w  F9 [0 A
  779.                 dwDownLoaded=0;7 x5 c: ^& k* S5 f$ h6 I
  780.                 bSilentStep=FALSE;
    ! G0 l2 E4 R" r. C
  781.                 bCompressed=TRUE;
    8 W2 w& V5 i5 Q- ^$ k3 J  z
  782.                 strExtLocal=".\\DownLoad\";
    # T) E( k3 A3 Z( }" ^4 h
  783.                 strFullName="update.txt";
    $ i# J& W& [; R/ b" U+ ?. l$ O
  784.                 dwProgramState=AP_CONNECT;8 X; e  W3 l$ S
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% R. Y; Q. W7 H' [$ o
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 @$ F$ |0 X5 H5 Z( \$ v' n5 b
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    7 e! f' p3 G9 f7 t, ?3 S
  788. , E0 r8 n& r2 r: {* x
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% \- y  Z1 j3 g
  790.                 unlink(".\\DownLoad\\checkversion.txt");# j/ i/ C* z: U( h
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)4 d) k4 l' m! ^; ^  b
  792.                 {6 Q; B# s4 N$ C2 D  k8 k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");" R  v2 D# Y! r9 T/ [% d$ y
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");/ i! A3 U5 A9 {/ @* p
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    8 t  J' g7 w- i/ N
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " |  o- h( T% f: I4 o
  797. : _- m/ {" [3 H* `9 k
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# }& k  D, h) a1 S
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    3 E1 X% ^' k; C2 Z* [  c+ p; L" H
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");7 _3 S. l$ ?  u7 C7 h4 g/ d
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: r1 n- k( [# Y/ M4 y& N
  802.                 }5 }! U0 g9 ]# K( B+ z7 s: i5 T( A0 K
  803.                 dwStartUpSteps=5;
    ' i0 v3 @& T( n. h* I0 V8 l
  804.               }
    , D# L; \- w  s9 h: U
  805.             }; M3 J7 J1 G0 H
  806.             else
    ' L, b3 p, P2 E
  807.             {
    ! I: u8 F' d( V0 ~* V
  808.               unlink(".\\DownLoad\\checkversion.txt");% e: {6 ~' b3 ?  v/ _- V
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , C* d) A9 T0 O+ m: [
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");1 t/ D. B" [" l
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    - S% t" g9 \0 \0 i9 p; \1 t
  812. 1 y  U& z% e% k4 n- v. `9 W* Y  G
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 {% }' K& Z  C! j2 T
  814.               dwStartUpSteps=99;
    7 m  J4 r  E& J# t
  815.               bFinishUpdated=TRUE;' L  `5 p7 W) [0 v+ h4 a
  816.               bCanUpdate=TRUE;
    - `" m' \8 t4 {6 F
  817.             }
    & ~' D$ M' n; z9 L
  818.           }% P& \& K7 g* ?" `# }  ^& F
  819.           else
    ! q3 n2 V! i4 C1 O0 |8 J( s, \
  820.           {
    6 P0 F: z6 ^" ^% I* x% p+ M
  821.             if(!Dn.Connected())
    5 P8 j& m4 \2 }, }: v
  822.             {
    7 U5 j2 F5 Q' h1 ~
  823.               bFirstUpdate=TRUE;' s: `8 S9 A7 g, ?' v* S# m
  824.               dwTotalFiles=1;
      j* w. g9 Z1 c9 Z) _9 O' b; f. V
  825.               dwDownLoaded=0;% x; {8 w% H0 i/ S
  826.               bSilentStep=FALSE;, L8 P% S, w( u; q
  827.               bCompressed=TRUE;. s9 c; ?; B) |9 R5 o- J7 N
  828.               strExtLocal=".\\DownLoad\";
    , |- u- \* y9 q0 [+ r, P) ?
  829.               strFullName="update.txt";6 n' X) P0 F, R6 G7 ]) A' n
  830.               dwProgramState=AP_CONNECT;
      `, J* H$ n3 `' s' Z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 i  j6 I9 h! `2 D- C6 A( ~
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( I% b- x9 d# z" `: I# |
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");" L! {/ X  @8 D$ N, f' H3 t% U
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( N! K: z* a$ ~" S6 o- [2 I- ~$ P
  835.               unlink(".\\DownLoad\\checkversion.txt");
    & Q7 w' g, O, Z, ]
  836.               if(GetFileAttributes("Wsa.zip" )!=-1). Q. z7 L3 ^8 R! O$ g  Z
  837.               {( O% ?- S$ G1 c0 @7 [
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ( U$ k- p* Q0 D3 X' x6 R8 m% O
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");' U6 K* H  N) b1 [& U5 n7 L5 v! y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");# R9 ^' P* _" N! S' V
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ w* n9 O5 C4 r, m% ]
  842.                 $ `( Y& b" G' K' U$ w' D
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    6 m# j  m! D$ ?" @! K
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, ]6 M0 I& v0 r$ _/ V, k; o' M
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");9 V# {6 d8 Y3 P( `6 ]7 P
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! i# f$ i, _; d6 ^( f6 {* D' v& G" v
  847.               }
    ! w: h" w! o4 J0 d
  848.               dwStartUpSteps=5;
      s$ p3 z: O. y6 N" A! o$ x
  849.             }2 i0 V9 `4 G* |8 B, J
  850.           }
    4 k( n) v/ S2 P( c1 w  c
  851.         }
    3 X/ k+ g" W" m: w' D0 D5 r
  852.         else% q0 C, E: N3 i: u* x% m7 O
  853.         {# P9 }2 O/ y4 r9 c& b. g
  854.           dwStartUpSteps=3;3 {+ \% L7 K# A( l" V
  855.         }4 C# x# H" D2 d* K+ r+ [
  856.       }
    0 b- m2 z' s( P  e4 U$ O. B1 q
  857.       break;
    " I" L3 W2 r& [" n& y
  858.     case 5:
    7 @  I- B' C" t2 \7 V
  859.       {4 h' Q5 {/ ?4 \+ i
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)& {2 Q( n. W' j2 e: L; g* w* [2 |
  861.         {
    ! |+ s2 e2 @& `" K
  862.           int opt_overwrite=1;
    " p0 y+ Z& a, m# f3 x* C+ C
  863.           int opt_do_extract_withoutpath=0;
    : K/ _& m( ~1 n+ R3 b6 a
  864.           unzFile uf=NULL;
    6 E: d' U1 D" C$ k
  865. ! e( Q. z" C# a+ s5 {: [; f
  866.           uf=unzOpen("Wsa.zip");* O) s" O# C/ ~8 i+ x' h& a6 S
  867.           if(uf)
    # J5 r  X. M, I5 k
  868.           {
    $ @6 t; F. y- x. U1 Y) z
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);- l) M  _. {( l8 X: t# U
  870.             unzClose(uf);4 {/ L2 s5 V, Z! o" G5 `. h
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");7 w: A; R! V* L1 ~: c4 S$ d
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    8 v. c/ s: j1 N/ R
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    0 L8 N& t8 m* v5 c; g
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 G" L( ^) z5 ]8 N* h' F2 K4 e# v
  875.           }  o# q! S4 e  `0 T) b$ Y
  876.           DeleteFile("Wsa.zip" );
    # N  q5 x( i, T2 r
  877.         }; {/ p0 q8 v7 f  w; U- S
  878. / K: A& F; N' r' f
  879.         if(CheckLocalVersion())
    8 ^6 a1 `4 g( N: W% Y
  880.         {0 X2 W$ V( y. G
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    & P7 y. |1 O9 Z6 o+ v  \+ z
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ' `3 |/ L! U/ x* h! g, C( d& z
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    2 R8 a4 j2 ^. v1 e8 f( `, T
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* [" K6 G2 R/ u7 i+ x' p* l3 F. u2 f4 ~
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);& w/ U9 Z" k/ X+ k+ ?7 Z4 X0 L; w
  886.           dwStartUpSteps=99;
    8 W* f8 J, T4 M# M* H
  887.         }* Y; w" R5 X0 Y3 L$ F
  888.         else
    % t2 B5 T4 K/ w; d8 G8 T
  889.         {
    3 Y9 r6 x% @# R! r+ E- a. ?0 T
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : A% {- r) w0 C) S& O  F) A
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' Y" E9 W2 @( E. K9 I; C8 J  v
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    " F: H* b6 `" N8 x5 K% d0 C9 b' F, W  ?
  893. $ x- p2 Y1 ?) ^9 e3 j3 q
  894.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& ~( n; M7 o: T- Z4 \! F
  895.           dwStartUpSteps=99;- k" s: n5 W8 I! `0 G" q
  896.           bFinishUpdated=TRUE;
    - n( O2 [3 M# {+ R+ |* S* a8 D
  897.         }
    - Z# w1 s% `2 w' r9 ^! z/ `
  898.         bCanUpdate=TRUE;
    , n4 Q2 P8 G) P" |  U7 r/ ?# K
  899.       }
    6 a; L" y/ h, M. {& ]( t8 k
  900.       break;
    0 ?4 Q' e! p/ g/ }
  901.     case 6:* }8 B7 }' t1 v( m% H( T
  902.       {
    ( g( g3 B- ?% u4 e2 b+ l' c
  903.         if(!UpdateLocalVersion())( m% E1 G. T" H. u
  904.         {
    ( i% h- p3 f, \+ X8 L8 O
  905.           if(bRestartUpdater)
    . x5 J5 D% P1 n* M  }0 j6 @
  906.           {, X* e! \6 l% p; g
  907.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);7 x5 D0 t  Z" V  g0 _% d$ u
  908.             else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
    1 ~' q1 e# P* A: q+ g, B
  909.             else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);
    # b- ?: K+ t4 [' q0 U
  910.             DestroyWindow(m_pMainWnd->GetSafeHwnd());
    - v' J5 f% Z# @2 ?
  911.             dwStartUpSteps=99;
    7 T# [% U; g( w9 ]! F5 c8 [
  912.           }
    6 p; e2 S' d+ N9 ]
  913.           else
    0 i% P# c2 `3 ^( [) B0 j, h
  914.           {( V/ T5 J; ~" p4 B6 q" T6 N* G/ p
  915.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈竒ЧΘ.....");+ k2 E7 j, Z& {3 {) b0 h
  916.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新的资料已经完成.....");1 F# r) k8 n3 {
  917.             else                                                      dlg->m_ListText.AddString("updated file ok.....");
    " o$ N: Q/ y. U5 j
  918.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & s4 d$ [3 O: ^; c+ S: ^0 ~& g
  919.             SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,0,0);
    " Q- [/ d# Z: Y0 [2 D( O$ b, l
  920.             dwStartUpSteps=7;
    - D$ y3 x" P7 `: G7 W
  921.             bFinishUpdated=TRUE;! V4 u5 ~7 \5 a: p0 z" q
  922.           }; s% f1 d" Y6 D* D
  923.         }; x2 l1 I+ F0 l3 E( I
  924.         else- m' |. Z, |* L
  925.         {1 ^! y! t6 M) s# f) |4 a$ y$ B
  926.           if(bRestartUpdater)+ y9 Z9 E8 U: T/ h& C4 c
  927.           {3 ]7 E5 z7 M6 ]& F6 r7 i
  928.                                                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);5 \! L- ?, |) a4 ~
  929.                                                 else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);$ F+ U+ _# Y$ V: g. M  l
  930.                                                 else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);
    4 g# X( Z  h5 N+ T; |
  931.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    8 R' m* v; U  _0 r6 y4 \5 y
  932.             dwStartUpSteps=99;  m$ [( d% h. m8 {6 q
  933.           }: X: ]5 N& G% i& B
  934.         }
    . p+ j# i/ q. v& j& I% ?5 s
  935.       }
    ) s& K9 p' A  R. Y$ N7 W; l# i
  936.       break;; O4 n2 Q! M& k. W; I# e; _9 m$ M
  937.     case 7:1 c/ b* Q% Q" X# w( z5 V" \
  938.       {5 g3 j1 w0 \3 q" ]/ |2 o0 b6 d
  939.         char szExecuteFile[14]="Bf_Client.exe";
    ! |8 h5 ^6 Z0 |3 u" p/ ?/ x
  940.         if(GetFileAttributes("Run.exe")!=-1) strcpy(szExecuteFile,"Run.exe");9 W; M' F1 x1 q
  941.         if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);
    " m$ I% `: l0 s1 L
  942.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated2",NULL,SW_SHOW);
    0 n- [3 K! [2 C1 F5 x
  943.         else                                   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);; @, V9 ]8 b; m9 y
  944.         DestroyWindow(m_pMainWnd->GetSafeHwnd());
    ( _, u1 ]2 g7 i$ M
  945.         dwStartUpSteps=99;
    - i( F# A/ v4 S* D3 L: O$ I& A7 [( |
  946.       }
    / T  u: A! ~7 N: b
  947.       break;
    / m, r1 Y# }/ [0 v- W+ G& D
  948.                 //add by cece9 [0 ?; ~' H$ i( ^* @7 Y
  949.                 case 8:
    7 P0 G& ?( i  b' G& K/ n
  950.                         {
    9 o0 @0 K9 v# a: J6 m0 [
  951.                                 if(!Dn.Connected())
    ; X1 o  I4 G, C5 I! H2 l+ U' _
  952.                                 {
    / c3 R7 v2 R6 T' E
  953.                                         dwTotalFiles=1;' B/ {) I4 _  }# h5 i) k$ v; q' C
  954.                                         dwDownLoaded=0;
    5 m* X6 `. v8 Z
  955.                                         bSilentStep=TRUE;
    + M& |; p9 ^2 ]2 U( ~- E
  956.                                         bCompressed=TRUE;
    - r/ ]) \- i4 l# B8 T& u( U
  957.                                         strExtLocal.Empty();6 ~1 J) a4 R* T# L
  958.                                         strFullName="download/CRCTable.txt";
    8 q" r% A0 w' J  i9 w- m8 Q' \
  959.                                         dwProgramState=AP_CONNECT;. a2 u3 D) G* z' L7 i
  960.                                 }/ J  L+ l3 w. ?! v/ N/ p
  961.                                 //
    , E2 b8 W8 j  P8 d. H3 A7 [
  962.                                 dwStartUpSteps = 9;( ^8 O7 B; g: |8 X
  963.                         }
    3 v$ A! S. X( b/ `
  964.                         break;
    4 x, G( G  r7 U
  965.                 case 9:7 Y. i# N$ Z9 L; k
  966.                         {, O% r+ h5 e. \1 q9 e' D
  967.                                 if(!Dn.Connected())4 z& l: L6 |, g9 `( g
  968.                                 {
    0 e8 @0 Z1 q0 S6 N9 H0 T. d# y) p/ G
  969.                                         dwTotalFiles=1;
      j; r3 w, [- K" ?' s4 S8 k" _
  970.                                         dwDownLoaded=0;
    7 S' R( G3 k3 x  n
  971.                                         bSilentStep=TRUE;
    ! W4 L% k& x  l
  972.                                         bCompressed=TRUE;! X- p# |" h) v  d2 k5 E9 w
  973.                                         strExtLocal.Empty();
    ) L2 ~  b% M" ~7 X) ~! o: T
  974.                                         strFullName="Run.exe";- F; t# N" ^) Z# v
  975.                                         dwProgramState=AP_CONNECT;% Y* b5 X! S3 Y: Y! p9 b, a) k
  976.                                 }
    : ]+ C( ~! K3 Q& V& }
  977.                                 //
    0 [0 m5 j& x3 U. k5 y/ r
  978.                                 dwStartUpSteps = 10;
    ) P4 D8 [' ~0 W
  979.                         }
    , s  }) c! e6 R7 Q6 A9 L8 I
  980.                         break;
    ( T# s* J4 X% O& _( g! k
  981.                 case 10:$ K% ^% ^- L! ^, |5 G: K
  982.                         {
    ( z! p9 S6 j! A
  983.                                 if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);) X8 k* ~- M( x, g+ z$ e
  984.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open","Run.exe","updated2",NULL,SW_SHOW);
    , v/ B* r+ `8 O' u, W# M
  985.         else                                   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);
    % B) g+ E* [" u( |
  986.                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());7 u" g. k3 C% E! b  l
  987.                                 theApp.bClickRunExe = FALSE;, F, V8 C: i$ e2 y( s
  988.         dwStartUpSteps = 99;
    ' Y# }8 ~$ ~- Q/ I  C
  989.                                 //0 I4 ^9 }, D, U% z2 i" Q% }2 z
  990.                         }
    2 U1 j0 G& s  G
  991.                         break;
    3 L* ~9 ?: ?: q( x
  992.                 //% `0 o1 Z( W* J9 f7 }0 D9 q" M
  993.     }
    7 J+ A& ~8 H! c4 w/ i. u
  994.     break;* U4 l) G" T$ E; ^' ?! l9 V
  995.   case AP_CONNECT:
    $ s0 e* w% L  V8 e6 `# C5 {) ?% E
  996.           if(Dn.InitNWSSock(4096,4096))
    . l6 N. @/ t) P; b* I+ ^
  997.     {" _& i$ v: c' ]4 k5 `+ i
  998.       char szPathName[MAX_PATH];% e  @% g& G) q  d8 C
  999.       dwLastSize=0;
    ( i+ }- j/ E% o# e) U% n
  1000.       GetPathFromFullPath(szPathName,(char*)(LPCTSTR)strFullName);7 e+ H4 Z* Z% K. d* [
  1001.       strFilePath=strExtLocal+szPathName;, O/ n1 P  X0 b. I
  1002.       strFileName=strFullName.Right(strFullName.GetLength()-strlen(szPathName));9 |& _/ C% L0 k
  1003.       dwResumeNums=0;1 W$ u, {# r8 ^3 a
  1004.       CString strTempName;7 I( w! ~' W! ?/ \
  1005.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);
    + Z( {3 J2 p: P
  1006.       CString strCountData;  k) M0 e8 j  x1 k4 m
  1007.       strCountData.Format("%d/%d",dwDownLoaded+1,dwTotalFiles);/ a0 E, ]) o: x, A
  1008.       dlg->m_FileNumber.SetWindowText(strCountData);
    " R/ e; n3 Z9 f& G4 h
  1009.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ) B+ }' b" W3 O- {7 r& K. o$ x! d
  1010.       if(bCompressed)
    ! y' s' w3 K, l# g; `6 P$ c) v
  1011.       {
    ; o0 y5 B) h. m, {% D! S  e( B
  1012.         strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);* M5 r6 v# l% p1 X  D4 G! f- G: ?
  1013.       }
    , e6 D' r! ]. f
  1014.       else
    ! j) [3 n! `+ a
  1015.       {: f* ~, q: I: c( a, A
  1016.         strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);
    8 `5 S! |  C# O1 f& B2 i
  1017.       }  I( f8 m$ k9 D. U8 ]/ {+ j
  1018.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);, i% v' x* o9 `0 X
  1019.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());) |+ ^# a) h7 }& W! _* X0 N
  1020.       LastTickCount=GetTickCount();
    9 X) m" m! n. Z. P% a5 l
  1021.       dwProgramState=AP_SENDING;
    & u" Q& N) K( @4 G* u& J0 i: l: r
  1022.     }
    # `/ _$ a! y8 U" L0 Z4 U
  1023.     else
    7 m% H) {' b$ F: k" j7 x
  1024.     {: e" Z) _$ Y& s0 S. `) T
  1025.       Dn.QuitNWSSock();
    # p6 {( o( @3 q% h, P+ I
  1026.       dwProgramState=AP_NOTHING;9 o% W9 I7 y0 c( k0 @0 @7 }8 N
  1027.     }
    9 O" _, m4 V! H' H5 e% y
  1028.     break;2 l3 J& f4 V& G+ k: G1 i
  1029.   case AP_RESUMED:
    ' c; S: W$ \# g2 \+ ?( K$ i! A1 b
  1030.           if(Dn.InitNWSSock(4096,4096))
    * t) w. F/ A9 e9 F
  1031.     {% `( S$ t1 @0 z) d
  1032.       dwResumeNums++;
    . e3 o" U9 ^% s+ L2 |# ?
  1033.       CString strTempName;
    6 y9 L0 Z- Y* Z# F& s
  1034.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);
    : W& k$ x0 b$ T
  1035.       CString strCountData;
    * ?  @1 r3 E/ I. u. I
  1036.       strCountData.Format("%d/%d",dwDownLoaded,dwTotalFiles);
    0 X9 f  d; Z& W. [5 Q
  1037.       dlg->m_FileNumber.SetWindowText(strCountData);
    6 Y2 w5 o# Y5 w' d5 Q, _. \; `
  1038.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    * \2 o- E4 q1 C- }4 A
  1039.       if(bCompressed)# w( {  \0 R* X' |& H
  1040.       {
    - j9 E' Q0 K2 c) d# \$ a3 x
  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);
    ( Z0 K7 o6 w. |) G
  1042.       }
    : T- b- O0 ?, w6 \8 W
  1043.       else
    4 H2 l; H% D+ M
  1044.       {
    9 a6 ]7 a, l8 T' _/ I4 t" X
  1045.         strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nRange: bytes=%d-\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName,dwCurrSize);
    6 d$ h1 B; b: E9 F, K2 p0 Y" v, Q4 r
  1046.       }
    8 {( U" v/ F2 h* Q
  1047.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);
    - x! S: H4 ]  k& I& k! Q
  1048.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());
    3 I# I$ p1 x0 }/ B) ?7 e2 k) J# o
  1049.       LastTickCount=GetTickCount();/ j- Y; y$ k) B& z9 C$ V9 e0 a
  1050.       dwProgramState=AP_SENDING;6 s& J% l3 ~- V, \$ w9 {1 M( ~
  1051.     }0 V% c& b* X% ?0 R
  1052.     else2 c3 c* s9 p1 x7 M6 l8 t5 ^
  1053.     {# b( ?" ~' e" j, i! c+ W2 R7 c
  1054.       Dn.QuitNWSSock();" H+ T, H( G! [' J0 j( t! }
  1055.       dwProgramState=AP_NOTHING;
    5 U1 S/ M. n4 L/ }3 t. x
  1056.     }# Q1 q: X; y2 _! d! i4 Z
  1057.     break;& a. ~4 B4 O) V' |
  1058.   case AP_SENDING:
    . `% Y3 i7 q% @) q
  1059.     {3 B. R) H8 J; r2 D& S
  1060.       DWORD RecvLen,SendLen;6 c* F4 f& x0 C4 k$ L
  1061.       if(Dn.NetworkLoop(RecvLen,SendLen))* F) U" W2 D+ G3 X+ R1 l/ G/ j
  1062.       {! }  h$ M2 C& K0 k
  1063.         LastTickCount=GetTickCount();0 [  V( x, N- C, Z" I* G" y
  1064.         if(SendLen)
    - a/ \. A% w, R
  1065.         {0 H" u+ t: s8 {1 ~" u+ X, |
  1066.           bReadHeaders=FALSE;
    + s* j1 m& J" l  j
  1067.           dwProgramState=AP_RECEIVE;+ i, l2 M5 T* E! R
  1068.         }: ~! h) L( D- O" z9 d/ C
  1069.       }
    ! \  E) i% D) ^' x6 o
  1070.       else
    ! y6 y. o; I2 H" D
  1071.       {
    4 o* Y2 i. E. ]5 V
  1072.         if(GetTickCount()-LastTickCount>3000)- v' Q% ]% ?2 B" Z* ^
  1073.         {! {2 u0 H+ b8 d9 S
  1074.           Dn.QuitNWSSock();
    * m- ~( V0 b$ S( [& F
  1075.           dwProgramState=AP_CONNECT;
    , J2 m5 _$ F  n- S; u. D
  1076.                                         //
    . y( s; H" E1 n
  1077.                                         static DWORD s_dwCount = 0;
    - i0 K. p# |8 Q# C" L
  1078.                                         s_dwCount++;
    2 A6 q$ X' z* l7 C& K
  1079.                                         if( s_dwCount > 10 )
    1 r, c4 A! M) M- s. \
  1080.                                         {. z+ v' b! l' s5 q- t( X/ P" I
  1081.                                                 if(m_iLanguage==TRADITIONAL_CHINESE)   MessageBox(GetActiveWindow(),"硈钡穝狝竟ア毖叫浪琩眤呼蹈砞竚   ","Error",MB_OK|MB_ICONERROR);6 F; z5 }6 x; L  ?
  1082.                                                 else if(m_iLanguage==SIMPLIFY_CHINESE) MessageBox(GetActiveWindow(),"连接更新伺服器失败,请检查您的网络设置   ","Error",MB_OK|MB_ICONERROR);( F2 J/ A5 ]0 \  Z$ {
  1083.                                                 else                                   MessageBox(GetActiveWindow(),"Connected Error, Please Check Your Network Status   ","Error",MB_OK|MB_ICONERROR);
    " b) E6 K/ X4 o
  1084.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    ! j! K3 f! f7 [' p7 e
  1085.                                         }" l% R1 j* v7 E3 R2 ^) o* k
  1086.         }
    % |4 ]8 s) Q4 G$ r
  1087.       }
    . Q1 Q$ \/ D1 y6 H
  1088.     }4 A, ~( H6 M- z, M0 [# c( I/ r0 M
  1089.     break;
    - s/ @# s3 o2 t, Q: A; D
  1090.   case AP_RECEIVE:( j& Z8 F# {7 x, U4 H) r
  1091.     {2 }9 W" h# ]& I9 ~; D1 G
  1092.       int Count;# d# ?# N5 _+ a3 p8 d5 v
  1093.       DWORD RecvLen,SendLen;
    9 K: y5 s6 j% b4 U3 x7 F3 s, W  s
  1094.       if(Dn.NetworkLoop(RecvLen,SendLen))! J* i1 Z9 L8 j) p8 }" q
  1095.       {
    ( b- s# ?) g; Q
  1096.         LastTickCount=GetTickCount();
    4 b/ O  F, z) P8 t
  1097.         if(RecvLen)% j' l3 U, F. @2 J" J9 g5 f0 v: [
  1098.         {
    : T% |  a- W9 W( h1 n
  1099.           if(!bReadHeaders)3 m9 ~$ |( d4 T; s: F' N/ H
  1100.           {  v2 P4 u  y4 v9 T
  1101.             char *token=strtok3(Dn.szRecvBuff,"\r\n");/ O2 }+ v( R: J& x' C: j2 I8 t
  1102.             if(token)' ~# j2 D# n) }
  1103.             {6 N! T! q% n9 e) @, f; a
  1104.               dwFileSize=0;5 h) v' }# t- ^: i
  1105.               for(int i=0;i<(int)strlen(token)-3;i++)7 W8 C; D) a6 Z
  1106.               {
    9 |( d% W4 r& o% }' P/ \
  1107.                 if(!strnicmp(&token[i],"206",3))$ k; W# n& H; w1 [( b  a
  1108.                 {
      ]0 {0 I9 l# D7 j4 w
  1109.                   if(!bSilentStep)
    * r- @  b9 Q. O4 k0 Z7 }' B- O6 M/ r
  1110.                   {
    5 @4 d" G* s5 y& q2 T
  1111.                     CString strTempName;
      d. I  ]& x; ?, i) _
  1112.                     strTempName.Format("%s.....resuming(%d)",strFileName,dwResumeNums);
    % V3 f4 z. f+ @: t! e! W/ u: M
  1113.                     if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);7 Z) N6 H9 V9 _! Z6 ?
  1114.                     dlg->m_ListText.AddString(strTempName);
    $ l6 r/ n( l* t9 K8 g% H: g8 ~
  1115.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' B/ g! N6 Y" o- ]4 M8 s5 f/ X# d. Q
  1116.                   }
    4 S( x, D  B. O: E( r9 C
  1117.                   bReadHeaders=TRUE;, |+ J' D% A% E' B( L1 l
  1118.                   while(token=strtok3(NULL,"\r\n"))
    " N, w+ q' U4 |9 ~7 o% ~/ m1 Y
  1119.                   {2 C2 S3 G; F% i2 h+ p' D4 x
  1120.                     if(!strlen(token)&&dwFileSize)
    6 a7 y* f6 v# @7 l' A" Z3 P
  1121.                     {8 Y& k5 P; f9 J7 [
  1122.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;) I4 Q  g3 X+ M0 \6 h0 I* ^
  1123.                       if((int)Dn.dwRecvLeft>0)7 o/ L% z  t: }; [% t6 [$ f
  1124.                       {
    2 ^6 P2 G7 m& }- ~6 w  a9 [+ c
  1125.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
    ( m( a2 @. H" `, z+ _# r
  1126.                         {
    ) }3 q! ]5 I; H2 L. G3 R
  1127.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
    $ D' u4 X, _' I$ T5 c( Y
  1128.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    1 Q) u) _7 N. u. l- [
  1129.                         }) M: A+ K) J: n" Z9 P9 E5 r# H
  1130.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);1 g/ h2 r5 I, E! L
  1131.                         dwCurrSize+=Dn.dwRecvLeft;, k* y) v3 L; |6 v$ A" g- ^
  1132.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;7 u  Y+ l( w7 ~& w3 ^4 L7 h6 J
  1133.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    3 T9 V" N6 G: j4 {9 g1 U0 K, y  l
  1134.                       }
    3 I  A" }- f. u: D
  1135.                       break;
    6 Z0 G% C0 v" B/ g' N& t5 x7 u% s
  1136.                     }1 p2 }8 R' n6 ^
  1137.                     else0 E- d# a7 n& H5 [
  1138.                     {5 g! R' I9 }* |) q1 \/ R& Z0 M
  1139.                       if(!strnicmp(token,"Content-Length",14))
    , U; G0 s6 ^1 t7 k5 T. w
  1140.                       {
    6 a' w, {. i6 c6 I
  1141.                         if(!Dn.szCompBuff)0 P) J& U5 n8 O  p% s4 j, J/ [5 P" B1 q. J
  1142.                         {
    0 G3 t8 s- _, ^2 I, z0 p' Y
  1143.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;
    4 k( W2 E0 f; W1 `7 }6 R' D9 `
  1144.                           Dn.szCompBuff=(LPSTR)malloc(dwFileSize);+ H) i& u9 s. p) O2 B2 e
  1145.                         }
    - o0 T8 H* b& J; s: F
  1146.                         else if(dwFileSize!=dwLastSize)4 q1 U! u" j/ l: c
  1147.                         {, p. S+ Y1 G0 \$ y  Q
  1148.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;& _7 s' E) \! I* \1 o) }
  1149.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    & h% K$ q# q6 K; ?) D! Z, h! R
  1150.                         }! E; V/ s6 n& ?0 H. P  p3 U1 l: ^2 ]
  1151.                       }
    ) }4 {7 b: Q! {/ Q6 S" ]
  1152.                     }
    / i$ {+ q6 @0 Y3 M0 h
  1153.                   }
    4 ~6 {8 U" P  e: m; g! ?
  1154.                   break;: i% m" o. Y9 x$ N
  1155.                 }
    3 a: F) C* R7 {
  1156.                 if(!strnicmp(&token[i],"200",3))8 {6 W; O4 Y* M& v! L) x
  1157.                 {) c# ~( F) ]! V2 z) Z/ p
  1158.                   if(!bSilentStep)
    6 F& I. g! o( E; S$ J
  1159.                   {, h9 j/ C1 P2 y2 p
  1160.                     dlg->m_ListText.AddString(strFileName+".....downloading");9 I* w* L% o3 i- t0 _
  1161.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- ^- ?# Y( o* A  t+ w: l1 r
  1162.                   }
    * l+ G# {- z" s4 I
  1163.                   dwCurrSize=0;
    / e8 x$ X% Z' s4 S( H
  1164.                   bReadHeaders=TRUE;
    , J4 M, h9 i; \9 ]- f, G7 J1 b
  1165.                   while(token=strtok3(NULL,"\r\n"))# G4 B- R4 R! |' T/ g
  1166.                   {  i0 {  Z- Q4 n/ q' X- \6 I
  1167.                     if(!strlen(token)&&dwFileSize)) j3 L1 \* w4 Y
  1168.                     {$ h+ M( o0 f+ a% ~
  1169.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;2 L% N) Y0 E$ V7 Z
  1170.                       if((int)Dn.dwRecvLeft>0)8 q5 N6 v. J& C: o+ T
  1171.                       {& Q6 h$ Y* k$ x+ ?
  1172.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)' T6 t. E" M! y/ d! {/ y
  1173.                         {
    % w6 S4 v2 |; h
  1174.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
    2 Q6 x; ]7 ]  ~0 g
  1175.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    $ u6 a5 g3 W- I# ]* |
  1176.                         }) U& u; c4 S) Q' [+ K+ [
  1177.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);# @& U& Z; `5 M4 T. G7 t% S
  1178.                         dwCurrSize+=Dn.dwRecvLeft;
    & J" j4 L( x, ^; ~! X
  1179.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;9 M7 m5 Q( s9 i2 M/ v$ r
  1180.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;1 N2 t  }! @6 M7 E% D/ ]; G6 D
  1181.                       }7 Y& }  M$ @% Q( \& d( p
  1182.                       break;
    * Y# y+ p* H- g% `
  1183.                     }
    " p: o+ y" [0 k/ Q) Q
  1184.                     else& V0 ~& V: k, r4 e0 B; X* X
  1185.                     {* Q. U3 q( f/ f) _( T
  1186.                       if(!strnicmp(token,"Content-Length",14))
    ) p4 @8 n' d, w4 F3 i  h& Q
  1187.                       {
    " H  T' T8 \6 G' Q# G  ~; r
  1188.                         if(Dn.szCompBuff) { free(Dn.szCompBuff); Dn.szCompBuff=NULL; }- i2 ?" C8 ^" G3 d- h4 x
  1189.                         dwLastSize=dwFileSize=atoi(&token[16]);
    * v! ^6 X9 f0 O' \% g
  1190.                         Dn.szCompBuff=(LPSTR)malloc(dwFileSize);" e% V& G# D. A5 {
  1191.                       }
    7 O$ k' B2 [6 }+ D4 b) g
  1192.                     }, b* v+ v0 x( q0 ?1 e8 T% k
  1193.                   }! m0 D: G, S! P& A. [
  1194.                   break;1 s. H9 t. z, j) h3 P, F7 E) X
  1195.                 }
    0 k  _. y% U5 r8 P
  1196.               }9 }- k% K8 R' `; n5 M3 r. L
  1197.               if(!bReadHeaders||!dwFileSize)  T! K0 O6 f1 L$ _
  1198.               {
    5 C5 R+ Q" ~' C. ]) l
  1199.                 // Wrong Header or Reading File Size Error3 J+ J9 U, J' G9 F6 ^! A
  1200.                 Dn.QuitNWSSock();
    " ?2 J5 G& W2 C
  1201.                 dwProgramState=AP_NOTHING;' Q8 F" d3 i% b  ~! U* Y
  1202.                 CString strTempName;
    ( _# l* T( E, w! s) |
  1203.                 strTempName.Format("Navigate %s File Error !",strFullName);5 b8 s& f$ Z6 n% B: P5 V: S8 i6 W
  1204.                 MessageBox(GetActiveWindow(),strTempName,"Error",MB_OK|MB_ICONERROR);* N6 x) T/ Q1 T( \4 r/ v. E' I
  1205.                 bRestartUpdater=TRUE;
    9 v, U8 q- B6 o; ^5 z! \6 Q
  1206.               }' [! d+ V) a) |2 [% H, I
  1207.             }
    9 k- M4 u. Z6 Y. E/ ~! a$ ]& r0 T
  1208.             else
    2 _# v# B4 W; @) M. s) U5 W1 N% }
  1209.             {5 c) |3 }  n$ q' D
  1210.               // Have No Header
    ; N% v+ ?+ j8 O# Q$ D; x
  1211.               Dn.QuitNWSSock();$ R& I$ C; Y1 E; T& `' X* \7 \
  1212.               dwProgramState=AP_CONNECT;- C* s: E0 w  T
  1213.             }
    9 b! Q6 q: J# P4 s5 {5 s5 L' P0 m
  1214.           }
    ) r1 f* B. P; c) t/ }. E2 O
  1215.           else% z8 I9 [3 s% S" J; |
  1216.           {
    2 J/ ]7 O  N2 e/ `# o* k& C: w5 A
  1217.             // Reading File From Web0 _' x, ?  k6 [3 ~8 D
  1218.             if((int)Dn.dwRecvLeft>0)
    ) o6 x' d9 c! K3 |2 M
  1219.             {
    + n& b% l0 ]  v4 A; M4 u
  1220.               if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)4 [& a1 @, \" S
  1221.               {
    + l- U$ {; f2 G3 x( w" [/ b
  1222.                 dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;$ x( a0 q& O' ~6 t
  1223.                 Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    1 K* Z  |3 {* F) `% c! o8 Q( l1 r
  1224.               }
    5 t0 t( `. {8 j  a: ~. |
  1225.               memcpy(Dn.szCompBuff+dwCurrSize,Dn.szRecvBuff,Dn.dwRecvLeft);+ w$ R. `  `- y4 ?- ~
  1226.               dwCurrSize+=RecvLen;
    , L3 R) d9 U% X9 W" ^
  1227.               Dn.dwRecvLeft-=RecvLen;# @0 s3 ]7 B& l4 `1 r
  1228.             }9 B, s9 t9 g% @" Z
  1229.                                                 dlg->m_Process2.SetPos(100*dwCurrSize/(dwFileSize<=0?1:dwFileSize));
    . n& A8 w, z" P% q1 C/ i! t" N
  1230. //            int iRate = 100*dwCurrSize/(dwFileSize<=0?1:dwFileSize);
    : c- U1 Z( c2 L5 d) L$ x4 C7 @
  1231. //            dlg->m_Process2.SetPos(iRate);! X' A. i9 u8 `2 Q
  1232. //            if(iRate < 0)   iRate = 0;+ j$ {3 ~9 o* [. h% u) O+ o, |
  1233. //            if(iRate > 100) iRate = 100;' \  Q* Z! Z8 R* ^
  1234. //            char szShow[5];
    0 X6 Y+ N0 }- _" Z( U& S
  1235. //            sprintf(szShow,"%d%%",iRate);' }6 E- j; x" l' P5 g" `
  1236. //            dlg->m_SingleRate.SetWindowText(szShow);1 Q3 b0 [4 M, W/ A% x) b/ k
  1237.                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;5 j. G4 s% I% P+ |1 v& }
  1238.           }
    ) v" m& w4 y1 g6 W' f( |. u8 l
  1239.         }1 |: y. o2 \- O$ ?& ]3 |' I* V
  1240.         else if(dwCurrSize<dwFileSize)$ m$ y+ u3 y: r& f2 n6 I# H0 }
  1241.         {" t6 m3 Q" q" @. P; _; v, M6 t+ s
  1242.           // Disconnection But Size Error! q: S/ b: i, ~2 }9 F5 k" a  C4 K- L; w
  1243.           Dn.QuitNWSSock();# l6 ]# {8 L" F
  1244.           if(dwCurrSize) dwProgramState=AP_RESUMED;. p0 X: v/ S. M* [! d  V4 f; s& V
  1245.           else           dwProgramState=AP_CONNECT;
    % Q: ]: i; i: p5 J
  1246.         }; J, W; `; L4 b/ t3 S3 B; D. B
  1247.         else6 V) K0 s  L3 ~( N
  1248.         {$ J6 l& B2 ~% h/ p3 O% f7 L
  1249. SaveFileJump:
    + z. v+ R  E$ n: L! J4 h
  1250.           // End of File and Disconnect! O- X. o6 o* r% M8 c
  1251.           FILE *Fp;
    4 _2 r  G4 s9 P  p/ o$ u; M, d
  1252.           char szTempName[MAX_PATH];% ?  A! q0 g; f1 [1 d
  1253.           strcpy(szTempName,".\\DownLoad\");
    - [- C: j- E7 V" E0 H
  1254.           strcat(szTempName,(char*)(LPCTSTR)strFileName);
    1 Z; }! G# @5 b' S( ]8 d/ ^
  1255.           if(bCompressed) strcat(szTempName,".zip");3 Y0 B/ k# i" l( u
  1256.           if(dwCurrSize)& |. O& \" `0 S8 f( Q! ^- V
  1257.           {6 J7 `7 ], x* Q6 H! ?
  1258.                   Fp=fopen(szTempName,"wb");
    1 n1 O2 e& j. n
  1259.             if(!Fp)! r' i  ^5 t3 O) `; V. ]4 F
  1260.             {
    2 x) V# {( [+ a! e( V
  1261.               _mkdir("DownLoad");
    : @8 p& N/ l. s
  1262.               Fp=fopen(szTempName,"wb");
    ) f2 M& _# P; Y
  1263.             }
    7 q$ L; r( D- J3 W3 w
  1264.             if(Fp)
    % U" ~  W3 p5 B' ]( A" B% V0 J
  1265.             {7 s( t# u: y7 K: y/ ]
  1266.               fwrite(Dn.szCompBuff,1,dwCurrSize,Fp);
    & {: l8 V; D9 C. X
  1267.               fclose(Fp);
    + l  N: C2 Q& d# w- d, t
  1268.             }1 Q7 h/ g" ?5 l& s
  1269.           }
    ! a! `6 I3 X) c" e4 z
  1270.           if(!bSilentStep)% e1 w% \# {& T# [
  1271.           {  n% R/ T" N3 \2 D* z
  1272.             if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);2 c7 i' o4 t) y% a. w
  1273.             dlg->m_ListText.AddString(strFileName+".....saving");
    ! V2 K6 k. D  o0 W4 D5 J8 O& X
  1274.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 M& g- e* B9 f& J6 [' x
  1275.           }$ G4 P6 I- n4 |. f$ x0 @
  1276.           if(bCompressed)
    7 D4 D% m* s# M: q
  1277.           {/ D6 @# S0 e- N/ Y) v1 ]' b
  1278.                    int opt_overwrite=1;) P; {8 J. e+ h9 x
  1279.             int opt_do_extract_withoutpath=0;
    ' k' m4 K* `" N$ Z$ I
  1280.                    unzFile uf=NULL;) w' ?0 q: ~3 M/ `
  1281.                          uf=unzOpen(szTempName);  `; n5 Y- ?8 ]! c% D* L6 M
  1282.             if(uf)( {& w: `' i1 t) Z' C
  1283.             {
    / m3 S, Z" ^  n3 j# {$ @- @
  1284.               if(!bSilentStep)
    % w: ~8 C( X- p! j9 x
  1285.               {1 a2 f* w8 m* T6 P! S3 x6 J, f" G
  1286.                 if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);4 N& S$ Q1 z' A$ i0 H
  1287.                 dlg->m_ListText.AddString(strFileName+".....extracting");' p1 C+ t5 d) W- R& ~
  1288.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) k3 e6 J2 z! d  X+ I6 ?# K
  1289.               }
    # |' t0 }5 Q* q8 w: j: e$ T  K! q
  1290.               if(do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,(char*)(LPCTSTR)strFilePath,NULL)==UNZ_OK)
    2 M/ |) _& k$ }! I" _& \6 h
  1291.               {
    * D9 a9 O9 Z& x; n3 H. C4 M* t
  1292.                 if(!bSilentStep)
    . Z! Q& Q8 z1 z1 A: T4 s8 w
  1293.                 {
    % q  Z9 J8 _- e
  1294.                   if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    1 E+ U* Z& M  E- ~
  1295.                   dlg->m_ListText.AddString(strFileName+".....done");* V( G* M9 b3 `& y/ R" X# H
  1296.                   dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  [7 B1 T! ?! N8 A
  1297.                 }8 m) z2 n! ~+ C0 d+ N& ]* X5 P
  1298.                 dwDownLoaded++;" m% ^5 f. X, u
  1299.                 dwProgramState=AP_NOTHING;1 J& k9 G& H0 Y* ?. s2 N: J
  1300.               }
    0 v/ n/ m) O) r
  1301.               else
    5 p5 I. j/ d" X+ {
  1302.               {( Q; K" a0 ~' x  T$ w( |
  1303.                 dwProgramState=AP_CONNECT;: O. d8 Z1 C: K& W  K
  1304.               }
    7 M( x7 K' L. G
  1305.                     unzClose(uf);
    ) s; y2 h# n7 K) b
  1306.             }- e. P) [" l7 s1 X
  1307.             else
    7 O' O/ s" z! H1 G
  1308.             {
    " ]( P4 ?1 F, n, V, C: S1 R2 |
  1309.               dwProgramState=AP_CONNECT;
    8 Y! X4 R' E4 G) e0 f( w
  1310.             }
    2 B8 R# y6 Z# o, }, s* U; E8 e
  1311.             unlink(szTempName);4 V1 Q- @- U7 h* d" g
  1312.           }, z2 B3 t! H& C( x6 {( c
  1313.           else$ D. E% e' u' C! g7 g' v
  1314.           {3 A( P! h9 F6 F4 ~4 k1 D1 W
  1315.             if(!bSilentStep)
    8 W9 i6 C4 j/ ~
  1316.             {
    1 ^7 j6 Y2 ^. b$ t) _- s- ~% |; Y
  1317.               if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
      b8 |& q- b2 I6 t* r
  1318.               dlg->m_ListText.AddString(strFileName+".....done");
    - H, J: H2 D  u, f
  1319.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 o4 g7 Z! z3 u+ G# C& p
  1320.             }
    ' U& t+ K( d4 F, Q% z4 ^; Q4 ?3 ]+ n
  1321.             dwDownLoaded++;/ w, b5 _- C6 j6 M! b
  1322.             dwProgramState=AP_NOTHING;
    7 A' r0 p& ?3 Y' P; ~; J0 \
  1323.           }
    . C1 I8 F9 W3 V4 @& Z/ r
  1324.           Dn.QuitNWSSock();8 \3 q: c( i9 o6 ^9 K
  1325.         }; X! F: @- Z5 r! G/ J$ {! V
  1326.       }
    & y' m7 `) O) m$ b0 f3 W
  1327.       else
    0 h$ \8 Z1 F  v' [+ `1 p
  1328.       {# F& j/ h: r; w, L: `4 p
  1329.         // Connect Timeout
    - \. A; Y/ I# B! W  r" ~9 }5 |
  1330.         if(GetTickCount()-LastTickCount>30000)" q% e7 {+ Q1 Z8 `) L6 x# {5 q
  1331.         {3 E: p/ U8 U6 u, l5 |
  1332.           Dn.QuitNWSSock();* Y2 }' e3 q  r6 k5 C' w
  1333.           if(dwCurrSize) dwProgramState=AP_RESUMED;
    " k' m; T% C0 @
  1334.           else           dwProgramState=AP_CONNECT;: q6 L7 H0 |) K  ^
  1335.         }. X6 G  H, i9 i4 U3 E/ f
  1336.       }
    & W1 u" s  }0 X3 D: Q* V
  1337.     }: r" N" p+ h8 i% V
  1338.     break;
    * g  \# d2 c& v: _* t" `
  1339.   }/ \' K/ k) V$ X7 [$ d  q
  1340.         return CWinApp::OnIdle(lCount);4 r6 T7 H1 N: \9 l
  1341. }
    / B2 K; n' @' ?, C
複製代碼
其实登陆器也就是这么一回事儿……
7 c7 x& l8 f2 Y9 S! L附件有编译教程和源码
- Y% d9 g- J1 S1 K! _
遊客,如果您要查看本帖隱藏內容請回復
) H% f) E2 z' r3 y
+ H. Y5 N( w  |7 m" l5 l

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-30 01:03

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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