找回密碼
 立即注册

CSUpdate.exe源代码

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

/ u& H9 K) ?# S+ V+ |
  1. / RevApp.cpp : Defines the class behaviors for the application.3 }( z2 P" f: J. P1 {
  2. //
    ( m" t0 x; v: H7 ^7 r
  3. + R# Z- O) o2 n% y$ P( T( q
  4. #include "stdafx.h"
    * t' G+ a4 _3 @$ `( g1 T0 `
  5. 3 z5 |8 z2 K  v
  6. //#define UNICODE
    9 B( B. a5 M% u* n4 A% j6 |& o: W
  7. //#include <gdiplus.h>: v. f6 @4 z8 ?1 \, ^' R" r6 E4 z2 M
  8. //using namespace Gdiplus;
    2 s# k" G  t7 N$ s
  9. , x+ l+ M6 z0 [& ^' G
  10. #include "RevApp.h"
    % U7 S  {. ]9 U; x: x
  11. #include "RevAppDlg.h"
    / ?) L0 f2 r, _  S9 D1 l2 \6 z

  12. 2 }7 r" l0 z# U& g0 {+ S
  13. #pragma warning(disable:4786)
      o( U" L/ D8 z* q% G$ p. U  F3 O$ T
  14. #include <map>: x3 C4 l% [' d
  15. #include <list>% \7 O  c+ o/ y
  16. #include <direct.h>6 J$ r9 z) |; [: j- l
  17. ( |! l2 D4 V* ?
  18. #ifdef _DEBUG, Q3 y- b2 F* F+ f, B
  19. #define new DEBUG_NEW1 k; G8 t2 g+ ]" V0 R
  20. #undef THIS_FILE7 [4 b6 ]: g; K( `- O6 j, o
  21. static char THIS_FILE[] = __FILE__;
    0 k) R# Y! V* i- n
  22. #endif7 G7 n+ y- d+ i8 J' w
  23. #include "SkinResDef.h"0 \: g. f$ H, v" W! J1 Y1 q
  24. #include "ChangeBG.h"
    1 d# V* X- b( E
  25. #include "AFXINET.H"6 V/ d6 o! l4 b4 \7 d

  26. 3 F) Z" q1 A) O* H9 i+ a. D" I
  27. #define TRADITIONAL_CHINESE 0
      ?. z& Z; b6 ]
  28. #define SIMPLIFY_CHINESE 18 x3 k& ^2 S6 {3 t, m! u, H
  29. #define ENGLISH 28 d) y$ y, N) D/ {* E6 [
  30. int m_iLanguage = ENGLISH;. g7 g  u' u  G$ x
  31. /////////////////////////////////////////////////////////////////////////////4 m+ p1 I% ^1 g. n5 c& u
  32. // CRevAppApp
    3 T. _# r8 v; y. C2 X

  33. 2 R4 O) j4 ?6 l* h# j( S2 b( S; ^2 F
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)' U8 w: z1 \. }6 Y$ k: z( L
  35.         //{{AFX_MSG_MAP(CRevAppApp)# K4 T6 ~  ]. G. c9 \
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    + A9 _0 @; B2 l+ ~: f' D2 ^
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!6 M5 p+ e5 s/ X: v/ G
  38.         //}}AFX_MSG7 c. v9 m* N6 X* E& |
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)6 B/ C  H$ g* g% E; H+ f. Y
  40. END_MESSAGE_MAP()
    , @/ f: B& C" I% K/ ]

  41. & z  n' `+ r: w) n, b1 [
  42. /////////////////////////////////////////////////////////////////////////////
    ! Q3 \; R* ^8 D# I% N1 T& \
  43. // CRevAppApp construction
    $ m/ L( {3 F- B8 A: }( f  v
  44. # h4 Q1 a9 j( Z1 Q' U
  45. CRevAppApp::CRevAppApp()
    % }# l  V$ ]0 n# f( R" x* a
  46. {
    % _, d0 x5 S9 H, G6 q- k7 k
  47.         // TODO: add construction code here,$ g" \( W" C8 M& c+ F3 C6 h
  48.         // Place all significant initialization in InitInstance0 }2 p  Z) c" G, W  D3 V  h
  49.   bDisplayIsBig5=FALSE;" u+ C  h& M$ |# E. M5 }
  50.   bRestartUpdater=FALSE;
    9 _6 A* P1 H% {! \+ u) _
  51.   bFinishUpdated=FALSE;  ^- j6 ?* b8 c$ ~; p. g& q
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;7 G) P9 S  w2 ~  w6 V" H4 ^
  53.   InitChangeDataBig52GBKS();: Y  ?& m; W9 G
  54.   InitChangeDataGBKS2Big5();0 j6 l+ k8 x* A: ]: N" A2 `
  55.         //
    9 P# ]* j: k( F3 H/ T! J
  56.         bClickRunExe = FALSE;+ b" o# m* G3 u" u
  57.         //
    & [$ C# M( D, K) I
  58. }! h9 {# ?! W: R' {& l+ @
  59. : X5 L- @4 r, n7 e
  60. CRevAppApp::~CRevAppApp()" u9 d- I: Y- t* a: F$ D+ i0 X
  61. {% P' i7 y. |7 Y6 V
  62.         // TODO: add construction code here,
    ; p0 x7 T) o& m" \) j& O
  63.         // Place all significant initialization in InitInstance% |4 Y' g) X. e6 c
  64.   EndChangeData();' d, ~4 K3 \* [$ U  u
  65. }9 V$ o% n, \% ~( ^3 t2 {/ o$ |" c

  66. % c4 L/ |- T" \% n/ e
  67. /////////////////////////////////////////////////////////////////////////////0 z0 Y9 x+ _. z6 [, Q% ~; ^
  68. // The one and only CRevAppApp object
    & D& _) }; d& b# C: g& {

  69. . |6 V5 [% A0 m8 G. ~/ L7 N
  70. CRevAppApp theApp;* J" k6 G5 n1 d% Z6 m( y8 |" t

  71. : F* S0 k; Q* g  j
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName); \7 X$ X' ?9 m" F! r" E3 E
  73. {
      z1 @9 Y7 \% O4 ]/ e, h* B5 a
  74.   int iEOF=0;& f) v& y8 T9 i2 R
  75.   char szTempName[MAX_PATH];; J, j: u1 Y! I4 J
  76.   *szFileName=0;; C. O, z! J  \' f: i: V- w4 B
  77.   iEOF=fscanf(fp,"%s",szTempName);) A. Y1 v9 \( H$ Q
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('), b& _9 v* f9 E# {! U5 H* C
  79.   {' @& q) n9 a6 S& w& Q
  80.     strcpy(szFileName,&szTempName[1]);5 G* g, T  O1 E3 g3 p$ C7 x  e
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    * x" @, R2 i! b1 ?9 z. b7 N1 w
  82.     {" k! y. k7 c: Z- _7 X3 b9 ^4 |1 d5 ]
  83.       iEOF=fscanf(fp,"%s",szTempName);
    : S; s2 q& z) f) e- c+ Z
  84.       strcat(szFileName," ");' b3 g* E8 N6 c' Y. \
  85.       strcat(szFileName,szTempName);
    ; J! Q* c) n* E- K) y
  86.     }7 n" F) G4 A" r8 w7 X. I  y3 k7 s
  87.     if(strlen(szFileName)>=1)
    5 B, z( D% x3 _
  88.     {- E+ k- i9 E4 A# @  k
  89.       szFileName[strlen(szFileName)-1]=0;
    * J2 ]- _7 u) {/ f
  90.     }
    2 u# @% u, @% e
  91.   }
    7 ~; ?- S( p) l7 T. |5 v
  92.   return szFileName;
    : l3 w6 ]3 b' y, X* [
  93. }# q/ M/ n% L' ^3 z& S

  94. * B# A9 ?3 |" s
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    9 A2 r( z0 t3 H
  96. {2 f0 ^2 i5 i- R* T9 p
  97.   FILE *fp;
    6 Y' U7 U: r( W  s( j' ~" W  u1 l
  98.   char *key=NULL;
    9 J( Y- n5 _& u
  99.   char version[MAX_PATH];8 u, ?1 Z) _+ q" Z0 m% q+ g
  100.   LPUPDATEFILE file,olds;7 M5 P' ^, Z7 A0 T
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    . R1 K7 E+ m9 y6 g; O3 Y

  102. $ q4 _# `- K& G5 H/ c6 _" z
  103.   UpdateList.clear();
    ) r& L* u) P$ S* H- @5 Z2 B
  104.   UpdateFile.clear();$ v! q; k8 f. R5 b9 Q
  105.   if(GetFileAttributes(filename)==-1) return false;
    . r6 H: M! {7 C4 s& }
  106.   if(!(fp=fopen(filename,"r"))) return false;
    9 k- M! u' H7 W! n
  107.   fscanf(fp,"%s",version);6 m' q. a. _3 Q& D( G& Y, N
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }9 c! {  A, q- x9 A3 K4 C  V* v
  109.   while(fscanf(fp,"%s",version)!=EOF)4 ^) Y0 v6 z7 W# v( Y" K
  110.   {
    8 a5 v1 ~( C7 P$ O4 i4 X. B
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 _/ W2 [4 s. g( {$ m/ O2 M
  112.     fscanf(fp,"%s",file->path);
    * T" W' u$ q' Z' U- C% X5 Q9 N
  113.     ReadFileNames(fp,file->file);: g" Z/ y* s" A. Q
  114.     strcpy(file->full,".");0 [: t( f' G% K
  115.     strcat(file->full,file->path);
    4 y- I, i& s) S  Z, `: }
  116.     strcat(file->full,file->file);
    # u- U, T- O0 p( _; L( ^4 q
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    0 M( Q, R$ w+ q8 ?7 F4 x
  118.     {
    $ y. g" G: u* E& P2 ~/ E* j' b+ g
  119.       file->vers=(float)atof(version);( y* p; ^7 b6 M% [4 ?; a
  120.       UpdateList.push_back(file->full);) a9 k8 J$ v5 c& c
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));9 P% ]3 o6 }7 t2 [
  122.     }
    8 ^, p% V& J2 e. N) ^" ^$ ^
  123.     else
    & C/ }" m& o; v+ [  B9 o" U
  124.     {) \$ z5 n7 j+ O1 }- D; }
  125.       olds=(*p).second;
    2 U6 O, E% U2 _) V! Z6 m( l
  126.       if(olds->vers<(float)atof(version))
    / p" W- v5 ?# X0 {5 D
  127.       {
    / I( }7 D5 m+ {& {4 _
  128.         olds->vers=(float)atof(version);- m, f0 j9 }% ?  ?6 c: S
  129.       }
    ! D, h9 I/ b8 r: O9 }
  130.       free(file);
    ) c+ @9 |% J! L/ l5 Y: x
  131.     }
    + I4 i; b2 p2 Y$ Y+ p! p0 m3 {- e
  132.   }3 v  j1 I7 d: N# @2 z+ y
  133.   fclose(fp);( H' M9 ^: _& S& K
  134.   return true;
    % g; t- U" [. b( `' O: Q0 P/ P
  135. }
    & b1 P0 P% E8 u2 c9 a* r" X+ b% L3 p
  136. 1 E! z! {$ S8 L
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)$ V! Z) D. p2 k' z& |0 D2 k5 ^0 E
  138. {1 T# |6 P) u* o0 j6 ?7 k  i
  139.   TCHAR  szFull[MAX_PATH];
    * M3 z/ c- U( Q$ G1 k
  140.   TCHAR *token,*inter;
    ! f' F' @. {) N& Y2 O. ?) j
  141.   *szPath=0;
    % Q% }7 P& s4 @! r  u* P* r( J! O; N
  142.   strcpy(szFull,szFullPath);8 E! c: l- r  R* t* ]! ]# g
  143.   token=strtok(szFull,"\\/");
      T0 G$ H) [* E: H9 a. A
  144.   inter=token;% Y  x- ^1 R* V, m, r$ V
  145.   while(token=strtok(NULL,"\\/"))
    % F- K8 s5 W- d6 C4 V$ X+ L
  146.   {
    5 O/ H: b$ z: o4 ~  r
  147.     strcat(szPath,inter);
    3 j7 j9 T' f) I% U/ J
  148.     strcat(szPath,"\");: \: w; R' S0 `. ]8 s4 L  O
  149.     inter=token;
    , h2 [: y9 x$ H) |
  150.   }, `) m5 B& q3 L: t
  151.   return strlen(szPath);& C) Q6 G! b; M" h
  152. }
    ; s# K. ^9 l4 o) n$ h

  153. % w  z0 D: s4 `* a! \& K
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    , B# i* Y2 h  y
  155. {% D/ c3 w' b# G5 V( Z. v( c# n
  156.   DWORD attrib=GetFileAttributes(Target);$ R& G: ?2 e* T( ~% ^# n/ }5 \) B
  157.   if(attrib!=-1)
    4 B( f; E6 ~! ^% \8 Y
  158.   {
    + b8 p# O1 ]* E( l
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))/ ?! [8 `* B3 R7 V% p
  160.     {
    . P# H2 \, e2 i; E
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    2 d6 ~, F" X$ |* x4 L- p
  162.       SetFileAttributes(Target,attrib);
      g& y$ L- |  A7 `
  163.     }
    2 x. j, H3 y0 \8 K+ E5 b- J+ j
  164.   }$ b+ q9 b- Q) o$ h+ v$ j2 y) X
  165.   CopyFile(Source,Target,Erase);9 ^5 R, @) m% A
  166. }
    4 T# g4 B+ [. T' P! ]9 D' f+ k

  167. 9 _% }. P- O9 V. [! f
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & r9 X5 J. N6 S" m4 Z* K* N$ U
  169. {
    ( z4 h. J( q' g% \. h) e
  170.      FILE *fp;
    & l+ o3 U0 C0 e+ {) [/ A
  171.      char  szBuffer[8192];
    4 f' \7 |7 E) h' q, h0 P5 \; `
  172.   va_list  argptr;
    ' Q+ Y+ M) F  ~) f  Z/ h7 \
  173. * @# k. s: Y. @# O2 W
  174.         va_start(argptr,message);
    2 ]' t  b; ?" \" Z) W
  175.         vsprintf(szBuffer,message,argptr);
    * i4 e" z7 m2 n! s/ p
  176.         va_end(argptr);3 C- W9 K! N6 s4 @0 m: ?9 H8 u" L$ |
  177.   fp=fopen(FileName,"a");
    % y/ ~6 q( b/ ~
  178.   if(fp)
    , y$ C1 v- y# |4 ~! g5 i" S
  179.   {
    * ?3 w/ d' f7 y7 L
  180.     fprintf(fp,szBuffer);) X  _+ ?, L& q* G
  181.     fclose(fp);& ?( o" k' L! k  L: c1 o
  182.           _flushall();
    $ o! c1 s8 f( L( J* E2 r8 {: z
  183.   }2 r" r1 P! L3 R. T* ?% X3 T
  184. }1 G$ V4 o4 ~2 t& s* y2 X% o$ _
  185. 9 n0 i; T  e9 I) x
  186. BOOL CRevAppApp::Fclearf(char *FileName)" \& @% D! |5 X: i- M" Y' ]
  187. {5 @1 ^( f/ P: P
  188.      FILE *fp;
    $ ]% h0 W) G* y( |9 V: b
  189.     DWORD  attrib;' U# |7 ~! m- g2 u6 E( e# r+ g
  190.   attrib=GetFileAttributes(FileName);2 m! J% Z; z5 p6 ]4 |" `
  191.   if(attrib!=-1)3 p1 k: I) p0 @5 J. c8 {
  192.   {
    9 t* X6 p& j0 M. g! b' ]
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    . e0 g& c1 d6 K% j6 t! m
  194.     if(!SetFileAttributes(FileName,attrib))
    8 h6 S3 S" Z0 _' \& S/ r" |
  195.     {7 P9 H/ R  G# ?2 l& o/ j' P
  196.       return FALSE;
    ' q$ j3 N/ Q7 n9 D7 F9 Z2 m
  197.     }
    5 I- X# R  x, J7 c
  198.   }. o/ O) h. }( l0 n" F# P7 w/ g
  199.   fp=fopen(FileName,"wb");
    : y' w  s& }1 m& n5 w
  200.   if(fp)
    & Y7 a! c" {, ]* o
  201.   {: H/ A4 n' Q9 t/ w: S
  202.     fclose(fp);0 m1 I1 z; e: N5 N
  203.   }
    " D$ X) e& `6 e/ R1 j
  204.   return TRUE;3 _; G/ ]0 F0 u9 v
  205. }6 e3 R( S3 N  }1 ]  m

  206. : ?7 ~, Z6 Q- w/ l  ]1 `
  207. BOOL CRevAppApp::UpdateLocalVersion(void)( f  ]5 g: d6 s- C8 g
  208. {
    ) |+ G- F( l+ F" }& o
  209.   char filename[MAX_PATH];
    + Z0 @9 Q; s: \$ @4 x$ \# |
  210.   LPUPDATEFILE file,olds;; g9 |( [, i9 Q" i0 Q
  211.   std::map<int,CString>::iterator i;
    4 L# I( l6 b& p! R" A2 _: T7 |: C
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    : W1 i' s/ t9 `0 R$ M7 g* @% r; ?
  213.   std::list<CString>::iterator l;
    0 c" f7 n3 e; w; y

  214. 9 d5 N* y: _. Z8 b3 ?
  215.   if(bFirstUpdate)* ~% f/ F+ u' g5 w" n
  216.   {
    + t- L8 c* P0 M) v, ^/ t
  217.     dwCurrFile=0;
    2 I/ t* z4 j' |% \4 h* ]3 X6 j  \
  218.     bFirstUpdate=FALSE;; k1 V6 g2 s' g( _
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), |( x4 ^+ E( X" b" }5 b
  220.     {2 m5 p, ]3 P7 ~& v: d
  221.       dwTotalFiles=UpdateLocal.size();9 p2 [6 Y, p2 d$ P* P: M8 V4 u" P- B
  222.       dwDownLoaded=0;9 E) H# d9 e3 S/ N, D# z3 f$ {
  223.       bSilentStep=FALSE;
    3 ^. b) `8 z1 T% z# w
  224.       bCompressed=TRUE;
    3 J% W  I4 h& e, I7 ]& }. H2 m
  225.       strExtLocal.Empty();5 a& [3 t. l3 e5 X% ^
  226.       strFullName=(*i).second;: \: n8 G2 R' t, [
  227.       dwProgramState=AP_CONNECT;
    ' W+ e% q9 J1 r! n: N
  228.       return TRUE;
    - K: q6 j' y7 n/ c9 U( i! H
  229.     }% i% T# @1 n% D/ e
  230.   }
    , V  T* M/ \* z  b1 ?
  231.   else if(bRestartUpdater==FALSE): N1 \* D( O5 {. k7 u# @1 x: o2 A
  232.   {0 D* t* o3 d6 Q4 Z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    2 l' i) c- R. G: h) ]: k
  234.     {. n( m4 W7 F% M! M  K$ m  }
  235.       file=(*p).second;3 w% P- B" i  P  ]
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
      P; B% V5 n; P; q& _. q. d
  237.       {' [  Z! z! o. p6 s
  238.         olds=(*p).second;) H4 m4 a6 y- ?: T
  239.         olds->vers=file->vers;
    & l- a6 f3 e+ k9 w
  240.       }: M  Y" E' j" Q$ I
  241.       else
    % f+ P+ U4 ^- u) A' r
  242.       {
    0 f+ z( R7 e; Q6 o" \
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" F& c; s/ b0 N3 h
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    / w: l4 ~6 {" M  E" Y' I
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ; z+ }' `, d) a
  246.       }
    ' `% O2 i# s0 W$ U/ b* C9 ?
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    % H7 y2 f4 f4 g" N5 O4 [6 s
  248.       sprintf(filename,"(%s)",file->file);% k& X7 d2 M- v1 H: n1 ]% g
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      \5 N- |) g7 {: H9 d  U+ {
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ( J* ~% H  X2 ~
  251.     }
    ) S9 w4 d) ~9 M; `" v
  252.     dwCurrFile++;
    ' Z. [! M# ?$ `# y/ ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 d1 {9 N& M$ O3 `
  254.     {7 s7 W, ^( V. _- x
  255.       bSilentStep=FALSE;; _) E0 M9 H* w0 d& w& i
  256.       bCompressed=TRUE;) h7 S5 a" `) s1 _2 t5 P
  257.       strExtLocal.Empty();
    0 C, i) ^# _* Y" Y, g
  258.       strFullName=(*i).second;
    8 a) l. g# l) ~% k  Q& y& e! x1 H% f
  259.       dwProgramState=AP_CONNECT;' C* w4 y. D( Z0 o3 p
  260.       return TRUE;3 X. d7 \3 R3 B( o! n
  261.     }
    " c3 I" h. [) W9 ]2 d; ~
  262.     if(!bRestartUpdater)& c0 V* j/ T8 x* H1 Q4 [8 F
  263.     {/ y/ S+ k  z9 }) V6 M4 V/ m
  264.       int iCurrSize,iFileSize;# J1 c- ]7 o8 j  j" u& q% t
  265.       iCurrSize=0;
    % C2 F$ Z& k) ?; j
  266.       iFileSize=UpdateList2.size();' _2 q! ^) X" D+ E5 q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    : f9 n8 T! _; n/ n
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    % v$ B' l' Z# o$ V& h) M- o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 B  b$ y; `: [
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: H* o, ?) a0 u1 {% C
  271.       Fclearf(".\\update.dat");9 ]& H; v" y& [/ s6 U/ @, I
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    $ K/ m! U6 ?+ B6 `8 _# w* u1 A4 q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 L5 u! Q3 x: ?: I
  274.       {2 d  y( o, F: ~4 ^8 B
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())- ~$ |# Z: T# y! D% h! z
  276.         {/ Y/ f, T* P; E
  277.           file=(*p).second;! a% \& ^9 A( c6 Z  N( J
  278.           sprintf(filename,"(%s)",file->file);7 i1 x! i- w+ {9 D/ ?
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 ^# z9 K. _4 |7 \4 j( K$ a
  280.           iCurrSize++;
    . O7 s; d- X9 n! l: H
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    3 s/ \  S# |  D
  282.         }
    ; v$ w7 i  y0 V+ h
  283.       }
    . [. C$ k; X4 h" c% C8 d8 p4 h- C
  284.       unlink(".\\update.txt");
    0 c1 N% m- P3 \/ q
  285.       unlink(".\\update.tmp");
    5 e; ?- Q' B" N* _1 v4 N$ }
  286.       Fclearf(".\\checkversion.dat");
    7 i8 B9 ?5 I# c( _, \7 ^
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);  [* y+ ?# v+ w  D. z# e
  288.       if(UpdateLocal.size())
    + @7 j4 e5 u# H  `( d
  289.       {
    ' s0 [) c/ E0 C# T) m2 z
  290.         UpdateLocal.clear();
    : M4 ~6 c/ o/ D( I; Q3 z, q9 ~
  291.       }
    & U+ _: K8 S# n4 q" b. V( L
  292.       if(UpdateFile3.size())7 o  s- Z' a5 H- c0 t7 V1 p
  293.       {
    ' l9 [- [+ A3 D- D7 E8 X; Q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 s% C& A* s3 i
  295.         {
    ! s& g: x9 n' |* B2 h
  296.           file=(*p).second;
    0 ?* e6 n$ \' Q5 d! d3 g
  297.           free(file);
    0 o: j) y" D1 l9 [8 s1 a( v
  298.         }, _8 e, {: c7 Y
  299.         UpdateFile3.clear();
    $ c" ^: p0 w: L  D/ s% @* i
  300.         UpdateList3.clear();9 _- z$ I" R/ `. z
  301.       }
    ; @* q* {/ D+ M* ^! L
  302.       if(UpdateFile2.size())( L$ a7 f6 g) |
  303.       {- l7 s8 k# J0 c5 m2 k! ~
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' U+ @. \" B7 j4 W
  305.         {
    9 `/ v( J) M& H" g* q" l7 D
  306.           file=(*p).second;, Y# c4 s; A! ?/ Q4 x2 W
  307.           free(file);+ m" e1 X0 |( b! j- g6 X* p( h
  308.         }
    ! m1 N" S/ f* r+ P! X
  309.         UpdateFile2.clear();
    7 b, G# V1 ]+ p& ~- ?+ E
  310.         UpdateList2.clear();$ M  z' d* g! ]4 m) K
  311.       }
    ; M4 v/ d! y( }+ S  f1 q3 c, R
  312.       if(UpdateFile1.size())
    ! E' n2 `4 L1 A
  313.       {' X5 G% X7 m5 P5 k- j
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). j8 F$ }: U& B7 @6 G6 b5 u
  315.         {
    6 h  ?; J. b6 f( L% V
  316.           file=(*p).second;4 v# R1 S0 W" I9 F( B
  317.           free(file);5 P9 s! o8 Q4 L$ i8 {' y" L
  318.         }
    2 ]# |- I: C6 y9 L4 A/ r- j* P
  319.         UpdateFile1.clear();
    3 Q+ V2 C8 C' \( u
  320.         UpdateList1.clear();# N1 p0 m4 Y% p4 E$ \4 l6 o; R4 z# U' _
  321.       }
    . o! s' B9 w0 {: V1 g( w
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));+ O. ~+ D9 a9 u) Q* u
  323.     }
    ( t! E+ D& r- A8 y
  324.   }
    6 G7 `% a% Y+ O  J5 e0 h  z
  325.   return FALSE;' t( I" {4 i2 p( u/ n+ M
  326. }
    3 ~# `; ~' z7 i

  327. - M4 C' [6 L. D1 P7 S
  328. void CRevAppApp::ClearAll(void)
    0 s$ k! J) v4 `5 `7 m6 Z
  329. {
    , p) M# u4 R# _' I
  330.   LPUPDATEFILE file;
    $ w7 m- ?) W: s. R; U. h0 E
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 P* v* W+ T* s) h$ C

  332. 1 l2 n, E1 s6 m+ U6 ]) ], u% r- W
  333.   if(UpdateLocal.size())5 d( V' _- }4 P- B4 g" l' S
  334.   {2 H6 b2 o: N* S+ L/ ~
  335.     UpdateLocal.clear();6 P# |7 @& L2 X, g9 x
  336.   }. [/ F5 O' G0 q
  337.   if(UpdateFile3.size())
    1 @- c, X  g. O* X) ^" r
  338.   {
    ; D6 d5 [# N4 W: [
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ @7 s% Q* m5 p' ^5 d7 T
  340.     {. h4 w0 T9 F0 ?! J
  341.       file=(*p).second;# ]# ]' ?7 z9 R& w) I: L
  342.       free(file);
    6 e9 k* ~3 x! p0 u. y1 @$ i
  343.     }
    0 v9 k& Q+ `* ^# q. q7 O5 R( g+ c/ g7 Q
  344.     UpdateFile3.clear();, g! O/ j# a4 }, [6 O
  345.     UpdateList3.clear();
    6 M2 h' k5 O, i
  346.   }) _* {) [5 C* s1 s3 A; N1 v( i
  347.   if(UpdateFile2.size())
    5 ^- j0 Y7 d$ j- n+ d- i* e, {& F7 ~
  348.   {0 R$ a. G( h& c7 P) z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - `7 E9 y3 d2 j2 j3 a: N+ @4 N
  350.     {$ H% d0 G* Q4 U3 {9 s/ T" y# o2 ?3 b
  351.       file=(*p).second;
    * ^1 M% |, ^+ H4 ~4 ~# i* i3 u" Y* J
  352.       free(file);# X8 k' T  d; z% O$ M. r
  353.     }
    7 j! H5 d6 J- ?! G$ w6 c
  354.     UpdateFile2.clear();0 s/ e/ m7 `0 @
  355.     UpdateList2.clear();' }1 W6 p3 p+ b: c; b, A- ^
  356.   }
    # W' V( F) i2 ?# R, o
  357.   if(UpdateFile1.size())
    2 F. l+ B7 k2 t' J! d6 f& [
  358.   {7 t& d6 K1 j. Q! o7 ~0 ?1 ?
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ G. o5 z2 F8 }( r5 S/ M
  360.     {
    4 ?$ M/ n4 E! I/ S* p
  361.       file=(*p).second;
    0 e9 U) ]1 v9 ]5 W, {% s  H, x6 G
  362.       free(file);7 b0 C) X) B( h0 q% N, b
  363.     }
    4 I4 l( k+ K8 ^! H$ ^
  364.     UpdateFile1.clear();: T% n: {: t- d7 T
  365.     UpdateList1.clear();. ~1 W8 ]9 y5 `- H+ E# G
  366.   }2 F1 X- E; R, q2 G: o" {
  367. }  " g+ W* _0 W3 z( U! d0 s
  368.   
    * E) |% }+ w6 \1 R. C; S, N" J
  369. BOOL CRevAppApp::CheckLocalVersion(void)0 X) m. H9 c( _; L% B. r
  370. {! ]3 w% c) u; G& U7 `
  371.   int c;& n1 c% p9 T' ?! y8 m& t; G2 L3 d
  372.   LPUPDATEFILE file1,file2;
    6 C2 d, c; {4 q- W( ]( H
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    3 X+ Y9 I$ f& c( X+ `( _
  374.   std::list<CString>::iterator l;
    4 x4 v7 ?6 D* n4 T" ^+ N9 u
  375. 0 {9 {" s: I2 t* d8 ]
  376.   UpdateLocal.clear();' y, C1 W; }8 ]
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);3 i& Z& }( ^+ L) t1 D8 E! U5 E
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);. `9 g" W& G- ^2 r9 H
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);: P( ~& _# L5 c
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    . f+ _+ d6 {, r/ y( J9 c; X4 K
  381.   if(UpdateFile3.size())
    8 H4 @# u6 C6 T& K7 ~
  382.   {
    # r# n) F- z0 P3 b7 }' l
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
      P. B9 r) E. G0 ^& w/ L/ S
  384.     {
    0 D. O/ h, Y2 e
  385.       file2=(LPUPDATEFILE)(*i).second;
    : ], B, L+ i. K. d8 ^) _/ ^
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 P: \+ Y' c6 A9 J
  387.       {
    9 [5 d0 K- A* l1 ?) Q" Q4 v
  388.         file1=(LPUPDATEFILE)(*p).second;" |0 k" ?/ Z. I7 O! l- N8 c
  389.         file1->vers=file2->vers;
    1 V/ L% X) I, y" c) B
  390.       }% R, V% ^6 [, H4 Y9 \
  391.       else7 }5 `1 F; m1 H/ v' r
  392.       {
    % z# H( R" k/ f# c; o
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. f& i! }1 ?+ L1 U7 `
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
      u- `! X+ E/ w: b+ R4 M* w
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));5 e6 }' p; S; k2 O- Z
  396.       }
    5 I( n1 v/ r% j7 V( R+ C! B0 w
  397.     }' R9 T$ z1 {6 l: K# L
  398.   }8 V6 k) Y6 v( K& @8 ?0 {+ M% y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; n& j# E8 R' y8 w" `' T' y
  400.   {$ j9 T- ?8 ~  s  B4 Q$ i8 q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())  V, J* F. @- j# G, m& w
  402.     {
    + u- R. c& j0 |# @6 P' g( c
  403.       file2=(LPUPDATEFILE)(*i).second;
    ; [2 k" f  l: o! H9 T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 i" H, e! D% p& Z
  405.       {
    1 H8 M3 l. M* V  m5 [' O* J: k
  406.         file1=(LPUPDATEFILE)(*p).second;0 X" k+ I9 U, x# A- w% r& Z3 A
  407.         if(file1->vers!=file2->vers)" a$ q0 ^, F: w1 c
  408.         {' q* g* n" W1 P" \
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& S/ Y( k4 C8 D% p
  410.           c++;; ~3 W% P/ R- c& h6 B7 ?: i  W
  411.         }
    1 `2 \' g( s9 A. j7 h3 [  o& r6 i2 |
  412.       }1 S* z* _8 C8 m% _5 V
  413.       else
    ; w. r5 {0 S0 E9 V6 r) }: f
  414.       {
    - O2 f, v  ]7 t: N. t
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. F. D4 s; s2 O6 i
  416.         c++;
    4 E! e, @; K! Y- ?; H2 F
  417.       }
    ; P  Q1 N( {5 u" y. W- z4 U+ }
  418.     }
    * [6 ]$ B6 g: Y2 V- H
  419.   }: s7 X# w* v3 u( s, s* [/ B5 q3 B; F
  420.   unlink(".\\DownLoad\\update.txt");
    1 M3 v! [. I% |' K: C" U3 M) B7 g* m
  421.   if(UpdateLocal.size()) return TRUE;% d4 N& |5 J6 M; R9 j, G( W5 F6 f- ]
  422.   else                   return FALSE;
    / ^7 l2 F# r1 \
  423. }
    + ], x" \$ y& h6 j+ d
  424. 4 M) y, x/ d2 }: d
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"! |) B# c/ v0 B7 m1 M
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    . b: ^) |+ B+ H' L

  427.   W/ f) S$ |& i' I" d. R9 V4 _7 N" R

  428. ( _# O4 j$ e. ~2 {1 Z* p: U
  429. # z; x% p; u* {: Q9 U
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)' H0 |8 J! O) @
  431. {
    * f, E: r5 f" X- W! f) h0 K
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;, C+ w7 X& b2 c/ q1 e
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 a8 Y& ?4 d) B
  434.   {9 r$ r& ]7 `* M% y. \  h
  435.     char szLanguage[50];. K* v3 u7 u$ Y3 w
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 @6 `+ S' ]9 E
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 |+ u" l/ ]) [3 H8 _1 b# @. E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 L# f1 s) d" E1 B
  439.     else                                   m_iLanguage=ENGLISH;% M5 U3 l2 ]: t) ^2 \& u* ~
  440.     char szRegister[100];& D( ]2 t+ e4 N* {! \1 ~2 z6 v
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 q/ Q6 p  w& M( {8 p/ q
  442.     strRegsName=szRegister;( C' K( K  f! c
  443.     char szPatchURL[100];
    . H: p. G3 M( b) k& N
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      q+ C8 {7 X8 |, ~
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* c/ W' ^; Y& |6 ~" K0 b8 u6 X
  446.   }
    7 C8 d, j8 f( F
  447.   else. z! I0 o5 C3 v. c- _3 N8 j0 b) o
  448.   {1 N1 @+ p- f/ I, ^# h! J7 z# k. _% @9 e
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);" Z  k+ p; D' b' Q5 n3 m
  450.     strRegsName=DEFAULT_REG_URL;
    $ @- o5 F5 C; S' C7 ]- [) S- U
  451.   }# j3 e( W7 L0 H0 W& n( e
  452.   if(GetFileAttributes("hosts.ini")!=-1). i4 a) S* D  X
  453.   {
    3 h* S# N$ K) U! B) n% N" j8 Z
  454.     char szIP[50];
    5 E( e5 n* T# T) x0 I, y& ?8 E
  455.     char szDIR[300];
    2 @! H6 e( D) H/ e  X9 c3 A% K
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    - n; q) c6 O2 @( M# B( Z/ g' z8 w
  457.     {
    ' Y- T2 L7 v; x5 g
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    6 p8 }7 o! m$ W; @" d6 r
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 o9 e  ^1 w$ F* T
  460.       strHostName=szIP;
    ' T/ v  y' _8 g% Z1 n# R+ r+ H
  461.       strHostPath.Format("/%s",szDIR);
    , K3 x' p9 z: {) U$ t7 m% X+ a
  462.     }% M; T9 e& n9 ?- d- Z- q  c- C# [
  463.     else8 k; @2 d# y; c4 E
  464.     {
    : a5 F1 p" }; ]4 ^
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)5 `4 y1 W: F; v) ]$ k( Y4 p0 b& D
  466.       {
    0 @. z8 I/ t9 [9 q
  467.         char szLanguage[50];3 {' N( C. e( p) D) L4 B' j8 ~
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& n1 H) @3 a" `2 J
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    - s7 J& ~% F! ^; e7 U* G' t3 h( U
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& U  i$ A8 }' \' e
  471.         else                                   m_iLanguage=ENGLISH;. `( r" I3 B: g! R
  472.         char szRegister[100];
    7 l8 G. x0 o) D4 i
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 O+ ?; H3 A8 v% K- e: M
  474.         strRegsName=szRegister;
    ' A( b! ?; y4 |8 L/ y7 T, }
  475.         char szPatchURL[100];
    $ R! _% x: `: h- p) @$ K- P
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : P3 `& a0 V( Y) i
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 U+ V) L" \3 R" m, N3 }
  478.       }
    ( M8 p1 R  u' }- O* n' c- v
  479.       else/ a* n6 G/ t+ l
  480.       {6 K; X5 \  W( `( ^! k
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . H3 @3 }5 L0 F# }. W
  482.         strRegsName=DEFAULT_REG_URL;
    ' p* g1 U+ I3 u
  483.       }
    % D/ n. j2 S; e" F  V( ^, w4 K/ A
  484.     }
    " K  b4 F* X1 Q% e. y1 s1 A0 Z
  485.   }
    ! B+ c; b' ]* k- K  L+ \! y( ?
  486.   return true;
      Z: ]" |6 K8 M; D9 g
  487. }
    & _+ h. J! U7 w

  488. / j" u6 ^& i1 u) b. |
  489. #include ".\ZLib\unzip.h"
    - L  k; h3 |+ y. ^, x
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ; S3 d  z6 X9 ~
  491. /////////////////////////////////////////////////////////////////////////////' ?! ]& S/ s5 c  s: q: k$ Q% s
  492. // CRevAppApp initialization) ]# r+ J9 |. d% A  R

  493. 9 V  Q/ ^: l  M, t
  494. BOOL CRevAppApp::InitInstance()3 M$ m8 U+ a, d1 O* \' E6 O2 @0 D2 n
  495. {
    & I4 W5 j& h9 H! p& L
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    % [! @/ Y) I8 [3 @

  497. + P: g/ Y0 r& M- [6 U& ~
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);2 D/ A& e9 {( A" }# X
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))% l) R) o8 o8 `8 g& Q
  500.   {' A, Y0 R. b3 S" Q+ A! y4 W
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");+ |* q5 ~+ n7 y, d2 S# D
  502.     GetPathFromFullPath(szPathTarget,szPathSource);/ r1 i9 _% g3 |* [) N7 u; e! ^
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))) p: n% W. a' ~  _8 j3 L3 `& k9 h
  504.     {1 ^5 Y3 O6 q- t; r' ~3 v+ f% }. p
  505.       strcpy(szPath,szPathTarget);0 ?+ \' D" |( I7 F/ Q
  506.       SetCurrentDirectory(szPath);' R  _9 ^& F& ~+ d# \6 m* j
  507.     }9 b$ S6 |- S1 Z4 A- O& C
  508.   }: x/ @& S( l, a+ \, F; A
  509. #ifdef _DEBUG
    $ t: T7 y2 z3 f8 B- o9 m
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 w( H1 g3 \! b
  511. #else( y' `/ y) ~* f/ _
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ B7 @. ?2 w7 |. g( [* G8 Q  K
  513. #endif$ |0 i" f% ]0 i6 E
  514.   {7 d7 R3 R( V' ^) Q) R9 e' _
  515.     char tempFileName[MAX_PATH];
    4 }5 k7 g/ J8 ^$ h' b, }2 {4 m
  516.     strcpy(tempFileName,szPathSource);
    5 a6 `) K: M" Z  a; \
  517.     tempFileName[strlen(szPathSource)-12]=0;
    & V: W! V; G" K1 Z! c
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    + E  C( |% s2 _2 R3 S
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);; }) L* U" ]9 C
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    9 V" m8 L7 l" g7 I% u$ b
  521.     return TRUE;
    $ Y* r0 _3 L+ H2 x
  522.   }
    , l0 G) G) z1 Y# D
  523.   // Nuke 0118: Delete run.exe# h; [5 ~0 V$ g! {! k
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    , |  E) }/ i+ x# a; ~4 t! w
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ! L) Q& s& `' x4 c6 g* [
  526.   if(!ReadCfgFile("Config.ini"))
    6 k% l' E' t$ Q: b1 P0 W
  527.   {7 s" X' m9 Y! b+ q* X' q+ @8 u
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    , r5 P1 y. n) w
  529.     return TRUE;
    % s, n& C1 Q% e% a% K
  530.   }, J' E4 u' Z8 {# i& T5 I8 N
  531.   HANDLE mutex;
    8 i" I( a0 f0 [
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))8 T, t" Q5 q/ S8 E9 H/ j2 P
  533.   {+ P/ D$ x# N' A  `" w  X
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    & F) t; g8 L- F7 w' N8 b
  535.     {( m: V% `. g3 t, ]' x
  536.       CloseHandle(mutex);4 k6 T0 a' e/ `  f  ?5 z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* M7 R) |/ @( J7 ^
  538.       return TRUE;
    7 @! W6 f4 k# Z- |
  539.     }
    . \& t5 D: q3 q
  540.   }  
    6 h  b  Z- S# c% i/ n! s# E
  541.   CloseHandle(mutex);
    ) }) n* L2 @8 |/ [
  542.   [( ~  U2 S% m# y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);& Y0 {7 W) {# f: F6 K& K
  544. , t* }) W1 C& d# `; ]6 a; v: o
  545.         AfxEnableControlContainer();5 e. {7 f% Q3 Y/ b

  546. 5 U' q' g" |1 n! b5 f
  547.   bCanUpdate=FALSE;/ b8 D, a4 z; d/ o# Y# s6 {
  548.   dwStartUpSteps=1;9 q1 l1 H2 d2 t/ o
  549.   dwProgramState=AP_NOTHING;5 X  i; ?. i# I9 N+ n
  550. 8 L4 N  C3 b/ F
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);+ S1 G2 c9 j* p; ^% v4 q
  552. 2 K: V7 G& A% Q, V7 {- m
  553.         // Standard initialization( D1 k* S  m* c5 l( }- v
  554.         // If you are not using these features and wish to reduce the size1 y2 W  ~6 L4 s$ ^
  555.         //  of your final executable, you should remove from the following+ A  G( |- @; d. q
  556.         //  the specific initialization routines you do not need.
    # I* @  n. j6 |, p
  557. , F0 T7 `9 Y  ?
  558. #ifdef _AFXDLL
    ) i9 ^2 Y% M6 r
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    $ A% c% }$ c9 U# l
  560. #else, U* B+ l5 B# v) p& p& B5 L9 c
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically* v" n' F$ H1 l8 P" R
  562. #endif9 d" O* T# B& H0 o, N/ U% M8 E" r

  563. & V" k! D4 _  t
  564.   dlg=new CRevAppDlg;3 T9 L$ d. e  `* w; T, u
  565.   dlg->Create(IDD_REVAPP_DIALOG);6 _! ~4 [1 E0 l" B: [8 ]
  566.   dlg->ShowWindow(SW_SHOWNORMAL);5 K/ }$ E% D- M" Q. R; y
  567.   m_pMainWnd=dlg;
    - Z3 A/ @3 o" i$ u

  568. % o2 A; a4 R3 ~1 p" E4 D8 w5 z
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    0 ]; v1 Y& y: w: {* ~7 }0 D6 |

  570. 0 y" ?: B. v9 C% T6 a6 E2 h
  571. //  GdiplusStartupInput gdiplusStartupInput;- `" t  {( S( g7 Y8 e, ?6 ?, y- h
  572. //  ULONG_PTR gdiplusToken;
    " S  g* S' G- t- p9 B- G
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);. `- y4 [& \  h& w& [7 H2 ?

  574. # l5 {/ \  K3 O- o4 F: w
  575. //        CRevAppDlg dlg;
    . T# P4 Z- N! a  J& j
  576. //        int nResponse = dlg.DoModal();; J3 X% l8 }1 e. A- M7 E
  577. //        if (nResponse == IDOK)
    , T7 M2 t4 I# X& _3 B- ]5 |
  578. //        {
    + Q& k' M4 G' u9 w$ F* J* U
  579. //                // TODO: Place code here to handle when the dialog is
    * `# r5 u( j; }: y6 T  l' A1 r
  580. //                //  dismissed with OK
    $ W% m. v% @6 e9 _# c8 p
  581. //        }
    2 d( t3 j  D2 G. `" F
  582. //        else if (nResponse == IDCANCEL)
    1 {) Q  M2 D% j7 ~+ X
  583. //        {4 i0 T1 v6 w4 k$ P( D
  584. //                // TODO: Place code here to handle when the dialog is. |# e! D5 j/ }9 H5 \
  585. //                //  dismissed with Cancel
    ! G% A/ B% m, R7 L+ T) L
  586. //        }, b/ t6 K5 d* a" F& w& C' j" C  T$ E
  587. 9 o& m4 t) ^8 n+ {& i6 T& Z
  588.         // Since the dialog has been closed, return FALSE so that we exit the" p6 X; m) a: w" @
  589.         //  application, rather than start the application's message pump.
    ( y( B7 E, ]8 Q* W
  590.         return TRUE;- h+ l2 X' Y) j& L4 a
  591. }$ r& ?% O* t* t: |$ U
  592.   b& a; Z$ [$ s, C# W! r
  593. char *CRevAppApp::strtok3(char *pSource,char *token): p/ u  j& i3 L
  594. {
    " h' Q' c5 e, w/ n
  595.   int i;$ N6 D% v7 f7 f( y4 o
  596.   char *szRet;
    : p) \6 N+ {: U4 ~8 I+ b- Q
  597. % w+ w1 L" ]" \* v9 m- V5 o  A0 ?) a
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    5 Y/ s/ G; s! O" G1 z+ }" D' g
  599.   if(sztoken)/ t% j* a; G: f  [# `
  600.   {
    ; B8 \# k+ _; @& `- ^: D
  601.     szRet=&sztoken[itoken];
    $ n/ ]+ S9 g' o/ {" l
  602.     while(sztoken[itoken]). _' I8 C$ `) u# T) k# b& `! u" a" o
  603.     {! U" \3 f8 p( l1 t, K
  604.       for(i=0;i<(int)strlen(token);i++)
    1 z, g' X# k$ `0 d, y! g4 p
  605.       {
    ' R9 f* N. R' T$ i' _+ `
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ; D% I* o1 `6 ]& C/ L! S
  607.         {, A0 y9 j# U( z3 x; o+ M3 Y
  608.           sztoken[itoken++]=0;
    6 G" s3 N4 [/ l, K
  609.           sztoken[itoken++]=0;, G" ]' F! y. o% E; H; T
  610.           return szRet;
    + j! A& r( U3 w0 X8 {. p
  611.         }
    / U! q& L& D# d
  612.       }! q1 F3 t- O" w" Q$ S" @. N
  613.       itoken++;2 p, {! j8 N' ~& ]: `
  614.     }
    , @' U+ P0 y' p: s0 v0 x; f
  615.   }
    8 ?9 m6 q' X2 F' J* X
  616.   return NULL;
    3 l" b. ~, \- O- ]
  617. }
    3 `4 ~& _7 e9 w: r& b! ^) K9 k

  618. 2 }2 z/ }) G: b2 g- w9 W3 H! }
  619. void ProcessProc(long Total,long Current)' f" f- G7 X/ O. p
  620. {$ e9 i# o  e0 T8 o, f, w* Y8 E
  621.         MSG msg;
    5 m8 v( X9 x! A, x( u4 o
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
      F& W9 I9 Z/ s5 k% c* v) h
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 f& R  R# y9 R! O) ^: `- M& z1 x
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))8 ~5 Q  a2 \' b+ _$ s
  625.         {4 V1 @+ Q4 D2 E- l
  626.                 if(!GetMessage(&msg,NULL,0,0))2 j2 W- O0 v4 M- D5 S. T  t4 J
  627.                 {" B! E( U  J6 X# o3 @8 g  E
  628.                         return;* h; p0 r" j' \3 J5 @
  629.                 }
      m  Y( E) g6 n. V! ?  a
  630.                 TranslateMessage(&msg);
    # I# f; _  l9 Z( t2 f
  631.                 DispatchMessage(&msg);3 [+ y( p' I& I; Z8 R% }; u0 C2 W
  632.         }        : x+ j4 n! A% U! s
  633. }
    1 N" x1 ~1 t& @5 M1 X2 ]5 K

  634. / E3 v$ e! ^; z! A5 }+ s
  635. BOOL bFirstChar=TRUE;! p& @+ @& K8 f9 m. O, i
  636. ; m6 L9 H6 b+ u* E# ]- C5 S5 |. h
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    , \. `3 `; H) e
  638. {  |; s$ ?0 H* T( l1 D# N6 h# e7 o/ k
  639.         // TODO: Add your specialized code here and/or call the base class
    : g2 {! y  d, P4 z1 E8 r/ s
  640.   switch(dwProgramState)( B0 G- T8 X+ k3 }2 H+ i
  641.   {# P) S7 J/ g. h
  642.   case AP_NOTHING:
    . ~( O& Y/ ~2 h
  643.     switch(dwStartUpSteps), l. F% z# K& G" H/ I( ~. o! x$ }
  644.     {
    % m/ Z4 C6 m% k# t8 |1 f; j( U
  645.     case 1:
    % v( m  C# f. @
  646.       {
    9 k% a$ \( v) |3 a6 \' U
  647.         int i;& j# i' B1 _) _3 Y0 H$ i& l3 A; v7 K
  648.         CDC *pCDC=dlg->GetDC();
    ' @) ?9 f( |+ t( @$ x
  649.         HDC hdcwnd=pCDC->m_hDC;
    * a: ^  J' R& x" t6 T. \
  650. //        Graphics graphics(hdcwnd);
    3 T9 n5 ?% u, Q0 W/ o  o3 A7 `
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    & a0 u# ?6 b) |7 ^' ?8 ^
  652. //        INT iWidth=bitmap.GetWidth();2 M9 j) L$ V2 C6 ]$ j
  653. //        INT iHeight=bitmap.GetHeight();
    + `  B' @. h8 F* ^# z/ ]6 `8 ]
  654. //        Color color,colorTemp;
    7 d  f% l+ F; R) [8 D" h
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% v2 Y1 f$ S2 {' }8 R. y# O
  656. //        {
    2 n: @: O$ I. h/ J7 P
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)" |' ^! t( O  n! e$ l
  658. //          {
    / ?1 D( b$ x% J* G2 p! V3 N/ R4 F8 r  D
  659. //            bitmap.GetPixel(iColumn,iRow,&color);4 u5 P& }/ V4 f1 d! a, H
  660. //            colorTemp.SetValue(color.MakeARGB(
    - t& C  H! N4 o1 _; v6 |; z
  661. //              (BYTE)(255*iColumn/iWidth),
    , `  B5 }6 h' r3 z0 C/ t
  662. //              color.GetRed(),2 t0 A( O3 I3 y9 S
  663. //              color.GetGreen(),; y7 X. m/ Q- M2 F& ?
  664. //              color.GetBlue()));
    7 ~' E# o1 E0 E
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # a. f& A, A  o5 r) Q9 d6 Q4 H# y
  666. //          }' C2 d& @6 |8 o  e% D/ J4 s, Y6 G
  667. //        }
    , ^9 N! P$ G# X) z9 h
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    5 w: e" P6 R# s5 b
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");, {, n# c) k* {
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    9 k+ e4 L+ m2 Y+ C3 @& B
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ P/ P2 J2 d( [' k
  672.         for(i=0;i<240;i+=8)% I8 |; w8 L* \3 c7 e- n$ @
  673.         {3 y5 z0 p5 n) W4 V1 x2 e
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 p! s0 r) n6 ]( G& k
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ t" \- c1 r# s% s1 `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ H8 `/ E1 ?0 O1 d
  677.           Sleep(33);& f+ O6 c/ M! L) x3 U
  678.         }
    9 Q, @6 G9 R2 |" W0 ]" u
  679.         Sleep(1000);8 q( x4 h1 S8 H3 E# D! I
  680.         for(i=240;i>0;i-=8)
    2 ?! [0 t( {( ]# c7 _5 c
  681.         {
    7 [7 j) P% x0 K* }( F4 G8 ^: \$ |+ d
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);, N3 [" s# w' m  x8 L
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 Q$ R8 m& @6 J
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) j* b5 P& X% r$ e
  685.           Sleep(33);7 s5 l# r$ @6 ^3 y( m0 u* }0 \
  686.         }* s* W& O; O5 J% e% H$ a
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);  B" Z: o, S& [3 p
  688.         dlg->ReleaseDC(pCDC);% R4 W6 i' G  L% `8 {/ l
  689.         DeleteDC(hdctar);$ o9 S6 Y( s. f1 U/ h  Z+ N
  690.         DeleteDC(hdcsrc);8 P* x% u! b/ d6 E" B/ v' V9 S) N
  691.         DeleteDC(hdcorg);% ^: S( n. s1 ~1 f2 W0 [. z
  692.       }
    ! A( m. z- M" E1 e6 I
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    % J1 t2 h4 Y8 r6 K6 W
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");" w, S& n; g9 K/ ~$ d
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");! m. r" u  K; G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");' H, U/ ]/ v4 y6 M! a( X
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + k0 D! l% c7 i3 J$ j
  698.       if(!Dn.Connected())
    ! u( s3 [' I; R7 {
  699.       {& S# y7 D# y+ w# q, B6 I
  700.         dwTotalFiles=1;
    5 m$ f) d/ y8 {0 b4 i$ c3 z
  701.         dwDownLoaded=0;
    5 G; o6 B( I, U- Y
  702.         bSilentStep=TRUE;; V% \# p8 T" K; e3 h( Y) t5 B1 L
  703.         bCompressed=FALSE;7 c% n) l$ K: ~6 K
  704.         strExtLocal.Empty();3 j' ^, X! d6 Q* |4 }
  705.         strFullName="readme.txt";: g. Z: z" M7 g9 h( Z5 u: ^/ `
  706.         dwProgramState=AP_CONNECT;
    2 u1 u5 Z9 T" L$ H4 V! G1 a
  707.       }
      d4 j  m, j- U0 B% H
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();( v/ A+ S+ }. i7 u! |
  709.       dwStartUpSteps=2;4 O( L, M. e3 @: d- \+ w+ \+ \
  710.       break;) |& g' X4 G" x9 _
  711.     case 2:
    1 A9 B# {* d, v; L3 `; U
  712.       {; n4 l6 [: G8 n/ P- ^
  713.         int iEOF;
    * Y1 P! v# e0 V  D0 R+ X1 [/ a* M
  714.         FILE *fp;
    , O' H7 Y6 e% H: w8 {5 S
  715.         char szString[512];$ t/ I4 y$ g1 i
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    # t# k' F3 p) Q% y& [$ o
  717.         if(fp)
    + A# e2 g; T$ _/ H5 L6 }
  718.         {
    3 r! S6 t. i9 w" ]+ s0 h
  719.           do
    # B, l6 r! l$ i9 z; S( C
  720.           {0 o% t( u* s7 j7 `0 z% c
  721.             iEOF=fscanf(fp,"%s",szString);
      p2 V" l# m) d9 o
  722.             if(strlen(szString))* E% f/ }4 n$ t, J8 H/ @
  723.             {% e; D  `( p" w$ R& j
  724.               if(bFirstChar)
    " u, {% |. W9 B6 F
  725.               {
      X7 r% S: H  T" n1 f
  726.                 bFirstChar=FALSE;) B/ i0 M, O/ T  a; P/ L
  727.                 bConnectIsBig5=FALSE;; V& I  b) [* M2 ~9 y( a) n
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;8 g( s- n9 b( ~4 B
  729.               }$ y& ^$ _& i: a- s* S$ p* X. O- a$ z
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));5 r$ J# E- f* `, M
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    , j$ ~2 Z% V$ T) Z6 f
  732.               dlg->m_ListText.AddString(szString);
    " u* V! n3 J# a6 m8 P
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 T" j$ d- j+ v2 F" T
  734.               *szString=0;2 A0 X& G2 b0 u  q: T2 k9 l
  735.             }
    0 E$ n+ V% Z& d) ~% x( D
  736.           } while(iEOF!=EOF);- P. Y+ j: @8 |/ l- [7 ?2 z* Q# R
  737.           fclose(fp);! M1 v  k, r/ ?; A
  738.           unlink(".\\DownLoad\\readme.txt");
    9 i2 p+ M+ Q: M" w( C
  739.           dwStartUpSteps=3;
    # _' _9 W! O& s% Z+ }: R1 W
  740.         }# A0 C3 l( u& u+ q, b& z) P7 c
  741.       }
    1 V# \  L9 J" T
  742.       break;0 J* Y: x) R/ n. x! P
  743.     case 3:* R% y$ G$ E1 |
  744.       if(!Dn.Connected())
    - L5 C; J9 y6 m; P2 R( e
  745.       {; r9 b# c2 M$ c; _: y! t
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);6 v8 G. h7 O' L' N! w( j% g8 S9 |
  747.         dwTotalFiles=1;
    4 F3 [7 _/ r+ r: r* B* L- }
  748.         dwDownLoaded=0;6 \" c5 b% ^* y: X5 X
  749.         bSilentStep=TRUE;
    7 o+ Z$ l- p* [$ }
  750.         bCompressed=FALSE;
    % K7 Z$ o- v, x8 P' _
  751.         strExtLocal.Empty();
    2 ]6 F+ s- |5 E& |+ m% O
  752.         strFullName="checkversion.txt";
    ! W/ u3 s9 H; ?& T
  753.         dwProgramState=AP_CONNECT;
    - A0 F1 a4 _$ {* i( x  w
  754.       }
    9 c1 D3 p# u- Y- d& r- g' v
  755.       dwStartUpSteps=4;
    , \8 }6 Z: @6 Y
  756.       break;1 Z1 C% m3 G& Z0 m& K
  757.     case 4:
    7 M' I  n; [# H- h3 [
  758.       {/ z% m* g5 r4 z5 r8 I& O
  759.         FILE *fp;! l- Q. |( i. b' t( J) }& o" A
  760.         char szString1[128];
    . K) @3 ^1 O1 k5 D! W$ j
  761.         char szString2[128];
    7 ?& E/ q8 i& _7 \4 Y# S1 Y$ g
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");: [! j: F* s" q1 k0 P
  763.         if(fp)
    , G& s  ^- V. B$ s+ I
  764.         {/ p$ H* S+ @* b* u( ]
  765.           fscanf(fp,"%s",szString1);" Y) d- t0 |/ c. c
  766.           fclose(fp);. k  E3 ?5 D% n2 @
  767.           fCheckVersion=atof(szString1);) ^3 b" ^) u/ d  R
  768.           fp=fopen(".\\checkversion.dat","r");! k9 h, U, o4 p! G
  769.           if(fp): U' O) F. v8 d) |* h9 p
  770.           {7 H' k, \6 k2 x. y0 u
  771.             fscanf(fp,"%s",szString2);
    % ^. a+ [1 L( n: r
  772.             fclose(fp);5 w" X! c" g) N$ S- R& \
  773.             if(atof(szString1)!=atof(szString2))+ w# @  P: j5 a8 |6 [. o
  774.             {0 ?; C6 _+ z2 v4 m7 }  n
  775.               if(!Dn.Connected())
    2 h( }! d$ {+ ^) N. d1 E. {
  776.               {
    9 t* J$ B8 a8 l. V
  777.                 bFirstUpdate=TRUE;) R3 ]/ k; @: V
  778.                 dwTotalFiles=1;
    5 t, v. l+ I$ _: x7 ?* y; D, c+ f' [
  779.                 dwDownLoaded=0;
    5 w7 ~2 X+ J% v" |& o
  780.                 bSilentStep=FALSE;
    " Q, i  Q) M- n+ q6 G
  781.                 bCompressed=TRUE;
    9 _* {$ }' v( ]% I9 L
  782.                 strExtLocal=".\\DownLoad\";8 \% N, H8 `! Q+ e3 E
  783.                 strFullName="update.txt";% g  }8 k" }9 A5 S
  784.                 dwProgramState=AP_CONNECT;
    ! v5 h7 t$ R/ b3 [  ]8 f
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( {1 y, y7 g# J# ~
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 X) r# j9 Q6 t/ L  s& H0 B
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 G8 G8 Z& |( n5 z

  788. 3 s' V" b, X' i" R/ B
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 H3 O! ^2 t+ M# P! {6 C
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    / y4 U* |# q# @+ S
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)5 g6 y* n" R# @, b  c
  792.                 {
    6 X8 J- z) T/ T, p7 M/ z; t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");% N% \% C: _: ]% f3 i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ) `- ]0 ]5 \3 R4 V' R3 z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");9 I1 L1 a# R7 W! _- I
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! U' S0 ?$ X! v9 S' H- R( G  I

  797. 0 v# s$ L' G$ B5 n
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- o# I' m  L4 _' f0 a2 i7 V
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! H% v" @2 G7 P6 j% f- v3 Z0 G
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");9 F# ]5 X6 q% i# J
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ J$ |$ z4 Y5 z. p4 x: a+ p3 I
  802.                 }
    & c' Q/ k: |1 o" r6 W- L
  803.                 dwStartUpSteps=5;
    # f) k# ^, q7 u- s6 L& m
  804.               }
    * J  n) {1 d/ a( L2 ?
  805.             }
    " Q! R( {7 M, a  |
  806.             else
    1 Y/ F+ [2 u) V- p% a
  807.             {" @$ @# o9 s4 q+ x0 `
  808.               unlink(".\\DownLoad\\checkversion.txt");
    $ _: W0 m8 G, r# j; X, O
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! E% \5 t" o" j# ~+ v
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % E4 W  D2 E  U/ {" S& u
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");- D) n( `& M2 l. Q: S/ T1 d3 H
  812. : k( q8 e; R/ Z: X6 q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# T- x1 e. C9 q) m; r  v
  814.               dwStartUpSteps=99;) n1 X; e. s! a9 X3 n
  815.               bFinishUpdated=TRUE;
    * u1 ^1 u4 [' d# \# D* E$ G% ^( d
  816.               bCanUpdate=TRUE;& T- u9 M; j( t2 H$ T
  817.             }  \0 `+ L3 {6 i8 I4 P0 ?
  818.           }
    ( r& r% ]+ w6 \( P) ~& x
  819.           else: |/ F0 f$ C) v% {* l& `! y
  820.           {. H. S9 S2 t: O4 c
  821.             if(!Dn.Connected())
    * \7 z7 p. ^5 M6 W/ @) h
  822.             {3 u8 {6 q7 r/ r7 p
  823.               bFirstUpdate=TRUE;  N' U& v1 A+ V9 h( E) u
  824.               dwTotalFiles=1;* _6 S9 \  @) G2 x7 h5 J/ S
  825.               dwDownLoaded=0;1 R% ~/ b0 [3 j7 n
  826.               bSilentStep=FALSE;
    5 M% ]+ H8 n, ]6 J# x
  827.               bCompressed=TRUE;8 K1 J$ y8 Q) u( X2 _
  828.               strExtLocal=".\\DownLoad\";" M2 L4 }' Y" a  E" k; l8 @1 v
  829.               strFullName="update.txt";
    " H9 F8 m$ y/ J1 o  E9 e6 J1 c
  830.               dwProgramState=AP_CONNECT;* u# Z+ ]: Q) L9 t  l6 C7 t
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 b4 q: i" h5 ]3 R
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");& ?# f' Z! ?* S$ U+ x) N5 z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' C. E, |- K4 `' B
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) l  {" q( J! `- q
  835.               unlink(".\\DownLoad\\checkversion.txt");$ S, X- T# I" @% }7 T- D7 e8 l
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    $ ]( D4 Q- m% X' w/ ~: v( Q
  837.               {* I& X# }+ @8 }; P- E7 X8 B' a8 S/ H
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    0 d6 Z# v2 z1 U* e" K& J" g* _
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");4 w- P0 Q' w# h0 E0 E( G3 {
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    2 ~) t3 y" D* w$ c. @
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' w( Z9 O5 O# {8 K  Q2 i
  842.                
    7 a4 v/ c  r( X
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : v- k+ K3 d0 V) |
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 e* M  K7 S. M( z+ C
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");8 b2 t0 f$ T0 T# q
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 N  h2 S, _. g& S& P4 j
  847.               }7 I& Y+ O- u! U7 Y! b$ e6 S5 t; Y% I
  848.               dwStartUpSteps=5;
    / y; H- u! l3 V$ C4 k3 W
  849.             }, r8 Y) \4 m# x
  850.           }
    . s; h2 C; L9 I) X: @6 |) F
  851.         }
    ' v/ I; \9 _' u$ O% P& ?
  852.         else0 U# v2 ?+ F* p7 i, t
  853.         {( A' M9 ~# u( @% U9 B
  854.           dwStartUpSteps=3;
    6 t: [1 M$ `7 J/ U8 y1 C7 J
  855.         }
    ) n. y$ m% g; T3 B* H  a4 g  I
  856.       }- {  P2 q% e& D% X- z# p7 W9 a
  857.       break;
    , p" _4 ~4 Z9 [7 a+ y; s& k! p3 g
  858.     case 5:7 }) E- L( y8 e
  859.       {
    4 M- H0 W( {) y- A1 Z+ V
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    5 m: W  ~1 H5 A3 q+ m) u
  861.         {, \, b0 k! C3 ?# m3 x  \" C1 J
  862.           int opt_overwrite=1;7 |2 f4 ^4 P. x8 ?5 m
  863.           int opt_do_extract_withoutpath=0;" N+ Z$ v8 X0 V
  864.           unzFile uf=NULL;- F$ a# d! A6 y4 _4 q4 Q

  865. 1 s  B' u7 j1 E6 Z4 e. h0 y
  866.           uf=unzOpen("Wsa.zip");
    ( i3 P$ m. A: l
  867.           if(uf)
    * u4 ^; }4 k+ u+ G3 R# j
  868.           {4 L. B$ Y/ e1 }8 ]; X
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);  y# M4 Y! ~& S# y. Z
  870.             unzClose(uf);3 S6 A' F+ k& `3 a+ c* j. D+ u4 |
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    - x$ a* Y5 G  B: w
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");0 z& c$ }6 L, }
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    6 Q* Y3 h% j* Z3 d* h: Y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - ~! Q9 _; W0 {8 u# z
  875.           }
    + s  U% v$ V: ~! s0 P
  876.           DeleteFile("Wsa.zip" );
    - U* T5 Z' d4 k2 L5 l' @
  877.         }- X2 ]1 n* W  R+ c( N* z

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

" k7 ^5 x2 J1 m6 Q9 S8 D" R& Q; H( x4 M

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。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-12 17:40

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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