CSUpdate.exe源代码

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

2 L3 A% M  l0 w7 Z" O4 g1 `2 n
  1. / RevApp.cpp : Defines the class behaviors for the application.
    " F5 j- x  ^" A8 L# o  L$ _3 s
  2. //
    : v$ i. n/ I) H

  3. 4 O2 u: J6 j+ [# j
  4. #include "stdafx.h"; y- j% c3 s4 f: A! R" W( w5 E

  5. # C& C% S' i0 `
  6. //#define UNICODE
    : @+ Z  C# ?/ O
  7. //#include <gdiplus.h>
    : p  v- c4 Q$ p8 ?, Y
  8. //using namespace Gdiplus;$ P0 D3 ^+ G7 ^+ I& X/ i

  9. 6 h: G8 ~* a! U# k7 C) l
  10. #include "RevApp.h"- a: f. N2 ]+ ]7 N6 e3 Z* u
  11. #include "RevAppDlg.h"
    ' w! w5 w4 r, Y$ }; ?3 l
  12. 8 h  }) K6 U1 `3 }  d$ A- o! q
  13. #pragma warning(disable:4786)1 N4 |% H7 c; v- d& J
  14. #include <map>
    8 k9 b' C# T7 @, w
  15. #include <list>' e$ b5 p% B  m. w9 G
  16. #include <direct.h>
    ) Q  ?' F5 Q0 W
  17. 2 s1 J  l: ?3 w- z$ j( B% ?  h
  18. #ifdef _DEBUG+ F/ @2 K  W7 Z1 ^% f
  19. #define new DEBUG_NEW$ V; D7 j! ~9 a, u* A. ]
  20. #undef THIS_FILE
    ! o4 o" f4 T% v5 \5 T
  21. static char THIS_FILE[] = __FILE__;5 w  p- I, K# s7 I, i' Q9 |
  22. #endif, W4 h* B+ X5 ?+ R
  23. #include "SkinResDef.h"
    / I& g  n. k6 ?2 i7 E
  24. #include "ChangeBG.h"
    2 u2 u# M% b2 }" L
  25. #include "AFXINET.H"2 v, x+ L3 @. M* G7 ~% Q4 U

  26. 4 ~* `) }. U& P2 Z- i
  27. #define TRADITIONAL_CHINESE 0, i- ?: N4 X, o% s
  28. #define SIMPLIFY_CHINESE 1
    ! u! e( n5 ~$ P, P8 S" H
  29. #define ENGLISH 2
    % v2 F) L; h) y9 ?: \) m% N9 Y
  30. int m_iLanguage = ENGLISH;
    3 F+ O9 k8 D' w) _* ~% o# h& w
  31. /////////////////////////////////////////////////////////////////////////////2 p4 L3 f9 g* V( n$ `6 g
  32. // CRevAppApp7 i* K% h3 O7 R0 P
  33. 5 r" l) j0 K# ?2 n* I
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)8 ^: q+ f% c! A
  35.         //{{AFX_MSG_MAP(CRevAppApp)% i. J' o, S- t, B- [
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    5 I7 N2 ?/ D1 E' O0 M4 {2 c
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!5 c2 m( [/ |+ M. ]
  38.         //}}AFX_MSG8 K: r8 d6 W. E1 w9 b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)7 n- H2 C0 ^+ c( t
  40. END_MESSAGE_MAP()
      H6 q5 E6 G2 Y4 Q" m  |* {( H

  41. 2 J, z% ?2 ~0 V5 x5 M( ~/ y! J7 x
  42. /////////////////////////////////////////////////////////////////////////////) I9 ^/ X+ C% T5 Y2 {" v
  43. // CRevAppApp construction9 B! ~" o' b- x$ t
  44. 4 ~% J. r- s6 f0 u0 c4 x9 V# q
  45. CRevAppApp::CRevAppApp()
    7 a& p/ c  Z: K  q- b) P$ h/ K( Q
  46. {
    ! z% z7 t) O7 q, i$ T! q% \
  47.         // TODO: add construction code here,$ b6 q: Z" A% ]* t2 C6 C' E
  48.         // Place all significant initialization in InitInstance6 m8 L) `& I6 n6 d' n8 G
  49.   bDisplayIsBig5=FALSE;' e. ]& V# s! U# q4 E% e; [1 i9 L
  50.   bRestartUpdater=FALSE;
    3 O% Y# j8 u- \1 g
  51.   bFinishUpdated=FALSE;
    - F; H; Q% v/ u$ V! N
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ' q+ J5 U4 g) g3 N0 n
  53.   InitChangeDataBig52GBKS();* c3 k0 U* x4 f7 |: B/ e2 O( E" u
  54.   InitChangeDataGBKS2Big5();
    ( O( t; b) h, Q  {- H
  55.         //+ q/ G/ \" y4 i  B$ [# ?
  56.         bClickRunExe = FALSE;
    2 h4 R; y: c6 H1 S4 h' P
  57.         //! I/ o! |" z  ~! j( r) d9 I
  58. }  e1 X! y9 v  N$ c8 A" m9 j
  59. 5 K, _9 r9 W( r3 u% H( X! y
  60. CRevAppApp::~CRevAppApp()6 U" X  b1 U! x+ |& l
  61. {
      J; r% \. n# \: N
  62.         // TODO: add construction code here,
    ) X8 W( R( P1 Y+ ^- {+ s4 M( p
  63.         // Place all significant initialization in InitInstance
    : m4 l* i# K; ?1 @& G
  64.   EndChangeData();6 h; c$ _( G; R
  65. }
    * R. I  j& D$ i% r6 T7 b

  66. # z% \( ~( u; Z3 K
  67. /////////////////////////////////////////////////////////////////////////////
    1 r5 z3 ?. x( k$ u
  68. // The one and only CRevAppApp object
    9 w) ?+ P2 W: w' g. _* W- K
  69. ! o$ m' ~( y2 }! j! _. @4 n
  70. CRevAppApp theApp;1 n8 J- F" F( k* u

  71. ; H( b( I: t5 B+ @
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    * F; ~# p! o; @) I. D( N
  73. {6 B1 I- M! e6 u" t
  74.   int iEOF=0;
    4 p3 ^: Z8 |  ?6 n/ E
  75.   char szTempName[MAX_PATH];# K' M8 C- K9 \
  76.   *szFileName=0;+ q* z0 F( j: {5 [$ S/ f9 ^
  77.   iEOF=fscanf(fp,"%s",szTempName);2 w' w6 _- \' e/ x" u% i
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    , S- ?! x! w8 j$ a
  79.   {
    . O8 v9 ^& |6 P6 {
  80.     strcpy(szFileName,&szTempName[1]);
    8 U5 N2 c3 V5 G9 W4 F5 F
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)3 Y. l, ]1 {: z/ M: r- {
  82.     {
    / c% P* b8 [5 X+ O0 Y- ^5 R
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ( N2 {$ F7 G5 `0 S8 z
  84.       strcat(szFileName," ");
    & Z. ^0 C8 H* V/ v
  85.       strcat(szFileName,szTempName);
    8 t1 [, }# e0 I* B: ^
  86.     }" _7 {1 f5 v7 C
  87.     if(strlen(szFileName)>=1)$ v$ y  V% |4 ~$ |
  88.     {
    0 U$ |* z& y6 P- P
  89.       szFileName[strlen(szFileName)-1]=0;. P8 z: x( y; c. o" j. d' d( n
  90.     }3 Y3 ^) g$ e1 \. H1 d
  91.   }
    6 P; t$ o1 ^6 Y9 x4 p
  92.   return szFileName;. N( a6 n# |8 o! \: {
  93. }4 @( o+ Y& R+ }7 t8 O. A% ^0 _9 P
  94. 7 B5 E- K) w6 x' I% l
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    2 |! Z2 ?( t; b- R
  96. {
      D6 B& ?- d- |, C( Z
  97.   FILE *fp;
    5 b" y5 [+ o# v
  98.   char *key=NULL;
    & W- x5 i5 M* ^# A9 c8 T' B
  99.   char version[MAX_PATH];- b, C* E  C* I1 Q! Q4 O
  100.   LPUPDATEFILE file,olds;
    ) A. I6 {% }( y+ D% M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & f" \& b: ~  x" H- G

  102. 4 u* M4 W5 V# n9 [; {$ W  W
  103.   UpdateList.clear();
    , `- E2 N) ~3 f9 V1 k' j' y
  104.   UpdateFile.clear();
    . ~; e5 ?2 ^6 v# q$ w
  105.   if(GetFileAttributes(filename)==-1) return false;6 _$ F" T: H0 m4 v" b2 _
  106.   if(!(fp=fopen(filename,"r"))) return false;9 B* Q, f8 T' a0 i! V+ C. A) f
  107.   fscanf(fp,"%s",version);
    ; Y, ^8 F6 o8 S$ {0 P5 k
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }# O3 R; W) z6 l
  109.   while(fscanf(fp,"%s",version)!=EOF)
    " J! Z" a/ D! i. S- l: j
  110.   {
    " O* ^9 k( g% K& R" ^, \6 z0 k
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( j: G, i/ P) A- S
  112.     fscanf(fp,"%s",file->path);
    5 G. o: t( }+ G3 f% C
  113.     ReadFileNames(fp,file->file);
    - v2 d* Z% E" F
  114.     strcpy(file->full,".");5 F7 L% f* T, Q% P5 e8 F
  115.     strcat(file->full,file->path);7 r4 Q, Y, u7 s' D( p2 u, a
  116.     strcat(file->full,file->file);
    # ]% o3 b) K% A" l2 {, F) j! ~* C1 A
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    . i' r1 o8 x" G# |
  118.     {
    ) F7 [0 b6 r% z* Z
  119.       file->vers=(float)atof(version);: E5 L- ?  f: Y, \  w8 a
  120.       UpdateList.push_back(file->full);# ]5 p! A( T! b9 d) z5 ~& p  a
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    9 x2 {; A: P) s
  122.     }/ _3 Q9 b3 M6 \1 i3 V" u/ S. P! I
  123.     else
    ' Z' B) A3 A4 J! x. L% b- H' T
  124.     {
    " L. ]5 `% i" d
  125.       olds=(*p).second;5 E2 ?. N) \9 y
  126.       if(olds->vers<(float)atof(version))- ?' g# J8 ], B' E5 ~; L
  127.       {
    ; V( W! M0 I: U' n( M
  128.         olds->vers=(float)atof(version);
    5 B( c% n7 `& s" ]; l0 a) K/ a
  129.       }
    ) x; C: g2 ~+ \4 r$ l: r8 ~, H
  130.       free(file);
      j4 p) z- @" H' s
  131.     }
    ) c$ I4 T( D" U# g% O- G
  132.   }
    3 K* `; q4 m0 l
  133.   fclose(fp);9 t; }% e: L- z$ e4 o; e
  134.   return true;% Z* i5 x7 a& _( ^2 [
  135. }9 E" }  r* ?' R0 m  M2 f: X1 l

  136. # {$ M" [' g- p/ m
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    9 a  k' P  P; @; p( x) y  m$ i2 B
  138. {9 x* n: g: @6 l1 p
  139.   TCHAR  szFull[MAX_PATH];; b/ _! t- y; g. S+ o6 G5 @' u8 V: O! o; n
  140.   TCHAR *token,*inter;# O. J( i1 n; t# A( w1 s% Z! P) o1 t
  141.   *szPath=0;
    - g- r& ~! Y/ L: n
  142.   strcpy(szFull,szFullPath);
    9 ]& ?) k1 K, K5 C3 V5 S
  143.   token=strtok(szFull,"\\/");2 C; ?) r1 y2 K3 Y
  144.   inter=token;
      ~  @# l/ H* d2 i' i$ d& B
  145.   while(token=strtok(NULL,"\\/"))5 T; \/ Q( G5 f. V$ C
  146.   {% a5 }. t( d- a0 ^
  147.     strcat(szPath,inter);
    ) a0 ]: q% q, D& L' u. u
  148.     strcat(szPath,"\");
      A- X$ M; ^8 h, r# t
  149.     inter=token;! a2 l) A/ D* |6 i/ ]7 {8 B
  150.   }6 C  l0 g5 `, E- w
  151.   return strlen(szPath);- C4 d/ B. d" V
  152. }% u2 Q( C1 b, V  z4 @7 s
  153. 3 ^+ v0 W, A! i+ C4 k! G
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    8 w# J. O) L3 w' c$ ~3 Q% y* p
  155. {
    ; ?+ ]* Y6 x" i: b- u
  156.   DWORD attrib=GetFileAttributes(Target);" \, [( h* n+ y  v3 r  N2 `
  157.   if(attrib!=-1)& }& P: v& ^( g, w) k* v3 @- ^. A) j
  158.   {; y0 Y$ e2 W& C
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    9 J( {( B( m/ g% {3 T
  160.     {* v% Y4 h' f" q# S% M3 {
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    . U" q2 m' W. F2 F" J1 C& z
  162.       SetFileAttributes(Target,attrib);3 j; b) b/ `8 b/ W  }
  163.     }& H9 K7 a3 ~; k2 Q
  164.   }$ P/ u( R. o# ?1 H5 r; [; @: ?
  165.   CopyFile(Source,Target,Erase);
    . y& B9 e/ `4 S, Q0 k
  166. }
    ! S2 d" A' }( p" o, D& V

  167. - F- g2 W, t5 R6 c3 ~$ V
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)$ V9 D1 n8 |; x; q. t& l" M
  169. {
    / O4 N4 m0 c7 `' K0 v4 R
  170.      FILE *fp;8 O; h" O+ E* L  f% h; t8 u$ U
  171.      char  szBuffer[8192];9 K% e6 F- H' @- @6 n3 E
  172.   va_list  argptr;
    : L# q: Y/ w/ ^& r0 V3 O5 q

  173. * q7 D( @; s! I
  174.         va_start(argptr,message);
    % q/ D+ X7 D0 l
  175.         vsprintf(szBuffer,message,argptr);- F  f. M# \7 ~6 I
  176.         va_end(argptr);
    ( D% @$ o% t9 t4 E
  177.   fp=fopen(FileName,"a");
    , j4 y1 d) h% D. b1 y2 T8 L
  178.   if(fp)3 h" ~" B0 b2 ]! N
  179.   {
    ; a3 _, u# Q& i+ Z
  180.     fprintf(fp,szBuffer);. Y; O. d, p- o4 `4 e. z# N
  181.     fclose(fp);% `8 O6 ]# E1 c+ v
  182.           _flushall();9 Q& v; \4 s: M# a' Q) W, x
  183.   }, b' g/ [- @7 w
  184. }3 {4 ~4 Y7 K, P& i3 x) V

  185. + X  B. L' \0 s, K
  186. BOOL CRevAppApp::Fclearf(char *FileName)
      W+ g: u' y, J
  187. {
    2 _9 _- v; B0 H" G$ }6 S
  188.      FILE *fp;
    3 z; w) o" R4 G, ~: h# W: M
  189.     DWORD  attrib;6 m8 c; d  g( w0 Q
  190.   attrib=GetFileAttributes(FileName);
    ; |$ Z: e* y) Z( f! r
  191.   if(attrib!=-1)
    3 F5 o8 @9 k* U: H, a' u
  192.   {
    * P( C# \( T' A$ v
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);8 V; f/ I. a% g# \& F
  194.     if(!SetFileAttributes(FileName,attrib))
    0 h/ y5 g5 B: u
  195.     {( T1 E% a& [$ x# R
  196.       return FALSE;
    . u# e! L/ P% e( t. A9 I, S
  197.     }3 J6 z7 Z1 f+ Q" ?0 o/ G" F/ u2 }  l
  198.   }
    , ?+ g' |" P: I6 j0 M
  199.   fp=fopen(FileName,"wb");0 I1 n9 b  @2 q5 H9 r- m5 T2 H
  200.   if(fp)
    ' v* R: J) ?% y: O$ h; C
  201.   {0 \* f4 A6 K: f
  202.     fclose(fp);! m& j! Y( b4 l- o; Y5 C/ ]
  203.   }
    1 a9 f$ C; W7 K
  204.   return TRUE;
    ! R4 e! r: ?' [, ^
  205. }
    + z/ F. q& g' Y/ O9 l/ p

  206. , D% M% R) a8 m! e2 f. _
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    7 \1 C( q) Y% P5 G, p7 v# F
  208. {
    % P* f; M1 s, c6 J
  209.   char filename[MAX_PATH];
    % o4 l2 S, h) r( {: c1 l
  210.   LPUPDATEFILE file,olds;
    * j  ~& n7 V) i6 v& G! a% s
  211.   std::map<int,CString>::iterator i;0 B& @$ U8 e+ e! M. q$ e2 h
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 d" l& M1 H. K
  213.   std::list<CString>::iterator l;6 J6 d8 K$ _$ L  U( o
  214. 4 R. h, r" v( Q2 T
  215.   if(bFirstUpdate)
    3 n& S9 T1 f& X9 C/ b" P! G  {5 y2 H
  216.   {
    ! b! T8 M9 p$ K& }$ i8 z
  217.     dwCurrFile=0;+ K+ y* a$ S% }. @1 s( a
  218.     bFirstUpdate=FALSE;: K* f5 ?% s* k" Z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : H1 {4 Z8 n3 g" Y( m
  220.     {- L+ f9 R6 j$ f
  221.       dwTotalFiles=UpdateLocal.size();$ O( O' h  N1 Z# u" y: s
  222.       dwDownLoaded=0;$ Z0 @8 u" O9 X6 P4 a/ N
  223.       bSilentStep=FALSE;+ G0 K& x4 ?" |4 A
  224.       bCompressed=TRUE;
    / C3 H! W/ E; C% n. f( N
  225.       strExtLocal.Empty();
    7 r5 M8 p1 x) K8 x) h# n2 V8 x
  226.       strFullName=(*i).second;
    3 p9 T; B7 ?) K# G# Z
  227.       dwProgramState=AP_CONNECT;
    ; z, Y& v7 U* ]( f6 o5 U( I
  228.       return TRUE;
    ! z7 d1 f* J4 k3 j- D- k
  229.     }' s% |" W4 `0 c& m( X7 s
  230.   }
    % ~: y' {) z6 ?  C0 G
  231.   else if(bRestartUpdater==FALSE): E. [+ R9 ~: x5 F3 B5 j) E3 x
  232.   {( P) j$ ~3 n5 R& [0 P! ^
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    / `  [- k% J, t5 K% C9 v
  234.     {( d) ^9 N4 G: H
  235.       file=(*p).second;# q4 j; ?* M& [1 y' a' j" D
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())& A  V/ r" Y6 `% \2 g
  237.       {
    ( w' X) j2 R1 B, c. A2 |1 s# i
  238.         olds=(*p).second;7 A  X- G8 F" Z
  239.         olds->vers=file->vers;
    5 v3 O8 J0 z& L) u' S% J
  240.       }
    6 y8 p, k0 \3 _( \6 o5 i
  241.       else+ N$ o4 n. B$ i' F' Z" ~  G$ k( m! \
  242.       {
    , i: _5 y' q  E! s$ P2 R! [
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * a. f% [$ x0 I- ^- A% M- p
  244.         memcpy(olds,file,sizeof(UPDATEFILE));$ \- l7 d) t/ i  y9 ]  R1 B
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));! `: r3 L; Y6 \4 o( _( Z$ J8 t
  246.       }
    ! A6 u3 Y1 R% j% [) |5 X
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");6 F; r' @; e" j9 k
  248.       sprintf(filename,"(%s)",file->file);9 o2 Y0 @, n( q6 U8 P) j! n! W4 M
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' ]' R* A% a# N% r. p
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }# U/ W$ B4 H+ I( c; H& N7 [7 ?' f
  251.     }9 `1 m" U% v9 S+ r. h) B: u
  252.     dwCurrFile++;
    4 r6 r8 ^& w& |) O
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- r1 c+ {  Y: x! j% q
  254.     {/ Z' L) b4 M* m8 t& d, l6 k! I
  255.       bSilentStep=FALSE;. P: @- u! Z8 z
  256.       bCompressed=TRUE;4 f- R5 J4 }: Q$ i+ }2 I
  257.       strExtLocal.Empty();
    / ]" }( V0 w+ z
  258.       strFullName=(*i).second;
    9 h" _( _  |/ j+ r# v7 _
  259.       dwProgramState=AP_CONNECT;- X7 Z# C1 ^+ _! x  I* J" ?- A5 r
  260.       return TRUE;' T8 R9 Z  m" B" U/ V
  261.     }; J$ i+ X* j! m  l% N
  262.     if(!bRestartUpdater)
    3 I  o5 Y% Q" y2 Y
  263.     {
    % B+ _* Y: X7 ^* U; Z  t
  264.       int iCurrSize,iFileSize;, c, }- a. {9 h+ ?+ L4 ]
  265.       iCurrSize=0;
    . G+ P2 ]/ e. |% D: p, v  l3 K. [4 T
  266.       iFileSize=UpdateList2.size();
    8 I3 C, s7 Q3 S2 C; w% v: G4 a' g
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    1 P1 n/ Z7 K4 V: K+ K
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    7 z3 g" o( e! ]; Y; s: O( Y+ C
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    9 T, c7 k/ w$ u8 {
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 Z9 n4 ^+ K* [0 X% o9 }2 a" d
  271.       Fclearf(".\\update.dat");% W, n7 g* P; _3 K1 M0 i; g# e
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    # G9 A2 c9 h( Y- j% `8 ~, k4 Q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)/ r9 r: s2 Y7 i, G1 A0 n8 {. b
  274.       {8 {* i4 K2 W0 A
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    : E  a$ @# B/ [
  276.         {
    ' H( m1 Q4 m# M7 d
  277.           file=(*p).second;
    7 x# ~2 J: s# h/ n2 o( a
  278.           sprintf(filename,"(%s)",file->file);
    % g+ R/ f- [# a/ O: q: v& F$ }% m
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);/ }+ @9 n- Z: }  x- o/ l6 E  k
  280.           iCurrSize++;. a/ U: p+ I# R- v5 ]$ b
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ' h# B! B/ n! `, b
  282.         }
    0 e6 C- n4 |& k
  283.       }) y3 h6 c/ `& w
  284.       unlink(".\\update.txt");
    4 P6 o  M8 H. n+ q. G
  285.       unlink(".\\update.tmp");
    ! [( [) X" I; q
  286.       Fclearf(".\\checkversion.dat");  ~! r2 P# ^% T! \* G
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    / ?$ _$ l' H2 D$ C( x
  288.       if(UpdateLocal.size())* `- c+ d0 r/ |7 e" y0 D" n
  289.       {
    + l  h7 D: M8 ]1 R9 S9 q4 z
  290.         UpdateLocal.clear();
    4 u: d+ w5 Z6 E' E3 @! ?( |
  291.       }
    ( g0 e  @# T2 |# T; q0 \6 p$ i: X( A
  292.       if(UpdateFile3.size())
    1 F/ }7 J# I0 ?$ h6 W! _
  293.       {
    + n- f, t% ^# i- H& x4 Z4 |; Q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' D) N8 I: {8 c. a
  295.         {
    5 N; H8 v. X  K8 u& `: b1 u
  296.           file=(*p).second;
    5 m6 {6 A( s2 q  [& m
  297.           free(file);6 V/ H% ]. K, s" ?; M2 ^& g
  298.         }8 y+ m0 B1 ?7 T$ Y
  299.         UpdateFile3.clear();
    5 d; q1 E& [$ [! k% N5 m" z
  300.         UpdateList3.clear();0 _4 |6 T% K  p
  301.       }
    7 I  z) }0 }* B: ?8 e; s) l% }
  302.       if(UpdateFile2.size())
    * H2 g% Q/ `) \+ a$ g
  303.       {
    * W8 M6 v' c( {4 L& p8 k+ F
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 ~9 n! e8 }9 D- ~
  305.         {& {' H- P+ d6 e8 _
  306.           file=(*p).second;
    : ]" h5 h; ^" b; Q# T2 q
  307.           free(file);
    & C: h6 W* A) K. u' l) \
  308.         }( ^1 I! M6 C+ G  q9 m- E: _2 u
  309.         UpdateFile2.clear();& F, O) W1 X$ s" t. R1 }
  310.         UpdateList2.clear();
    5 g+ V6 y8 b' a0 W
  311.       }9 c9 B3 |' q& y
  312.       if(UpdateFile1.size()), I9 z. N1 w9 |6 c
  313.       {
    2 y1 u) I. R$ S: z: K: Q# X) \
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 K; p+ w3 U9 C- w6 e1 f  |+ ?
  315.         {
    7 Y7 E* z5 Y" A: U
  316.           file=(*p).second;8 U8 G  i, L' v% e- s% ]
  317.           free(file);
    7 u  i4 D! D& ]9 i) L
  318.         }( W$ F, V  |: N4 I+ j) [: z
  319.         UpdateFile1.clear();
    % M7 ?1 L3 a1 ]3 ~
  320.         UpdateList1.clear();
    ( F* ?: b. j/ k; H/ W0 n- ]; @9 u) Q
  321.       }/ }2 s% g* _; G; A
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ q' {1 E" S3 _8 _9 a3 z. u
  323.     }% O4 x  E# g+ T" W4 [1 y
  324.   }
    5 r0 }1 x& d: c- z
  325.   return FALSE;
    6 [* b* g8 h$ C
  326. }
    5 f/ h! Y/ v0 k' y
  327. : A" g& A. B% m! k# {; [2 ?& F* w5 l
  328. void CRevAppApp::ClearAll(void)
    1 c5 h+ c/ n5 y& O" I. k5 Z
  329. {
    7 V3 M; b7 o$ Z; D: n0 C
  330.   LPUPDATEFILE file;, X: c7 ]3 ~7 Z1 y. Y. ?; ^
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    - `' _$ Q5 i/ F

  332. 2 D& J/ Q% y5 R: V  a/ v% G
  333.   if(UpdateLocal.size())! ~9 q' D0 y- a
  334.   {
    # n6 |% x3 I: A) [) m
  335.     UpdateLocal.clear();
      `: S0 ^# m$ Z, n2 A
  336.   }
    * U8 V5 N6 q( _& d+ }, d
  337.   if(UpdateFile3.size())
    ( _# V- ]8 z1 d4 D/ ]. ~* P- M8 p. L
  338.   {
    7 @7 B0 d9 C7 ^" q. A
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 w" h* N/ z0 c5 S4 w
  340.     {5 l- B) A6 z* H- X4 H1 E
  341.       file=(*p).second;
    1 e$ ~0 {* {7 z) c4 n
  342.       free(file);  T5 l8 H+ b1 a" Y- L/ s* t
  343.     }5 m) T& G& v& ~1 r3 V
  344.     UpdateFile3.clear();& h# t* H1 ~# v: _) z- }
  345.     UpdateList3.clear();9 W, O  u0 `" a3 i# ?9 y  A
  346.   }
    ; ]/ z* Q" U2 B- U4 S' p. H$ R' K2 r
  347.   if(UpdateFile2.size())
    ) Z. e" y& ~7 l! l' c4 W6 c6 N" n7 w
  348.   {5 ]2 h( r2 L7 N- Y& `, r9 x& q
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- l/ S( u! d3 x8 x% R1 Q
  350.     {
    ; r$ e' J: c5 V) c% m  g7 e
  351.       file=(*p).second;
    6 P2 U% C' q' c8 M9 Q
  352.       free(file);7 C# K0 E8 S7 D9 J
  353.     }
    8 ]; G& A' S1 L( H# c
  354.     UpdateFile2.clear();
    ! I) }- }" c! q
  355.     UpdateList2.clear();/ L# A4 A5 v3 Z( G
  356.   }
    8 e+ R: c# N; [& T. {% d
  357.   if(UpdateFile1.size())
    . x4 ^- v( ~7 r* p1 \4 A  q
  358.   {
    $ F% n8 J& \3 _4 ~1 v. h( z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), V3 f( D/ n& g5 `4 i9 R
  360.     {" N# f. ]$ q4 p
  361.       file=(*p).second;5 I' f; i. O2 d/ q4 N
  362.       free(file);4 t- k6 y8 {) P  H
  363.     }# w+ c8 N, X- B! h; H7 X
  364.     UpdateFile1.clear();
      j, v$ d! n4 @. d
  365.     UpdateList1.clear();# [& _' T4 S; r( z# i+ ~
  366.   }5 Q, `3 [* Y% p- U1 Y% U+ x5 f, c
  367. }  ; p1 d! b) l+ I2 Z) N  o, w+ G
  368.   0 U* A' R2 `7 c6 I) n
  369. BOOL CRevAppApp::CheckLocalVersion(void)1 u7 `  p* g. ~$ ?- M
  370. {& g; u7 t- j6 x; d
  371.   int c;0 Q1 H% t! o) Q& V+ o
  372.   LPUPDATEFILE file1,file2;, s" H9 \, g% y' J
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;: C  T- [+ x# K! s) q
  374.   std::list<CString>::iterator l;: k; V: C' i$ U% c
  375. 7 G5 z6 U' [6 @
  376.   UpdateLocal.clear();
    9 X! ^  ^* z' b1 X" W
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);" n8 g$ ^2 [* {! Q% F# B
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    $ Y) i# g0 l) U+ f4 @0 z/ X% B
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    1 s0 c; I! _# }; I' f3 j& h4 n9 ^
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);: d4 n8 z' l5 o- ^
  381.   if(UpdateFile3.size())
    ! t( C7 M( l: J5 O0 V( Y
  382.   {6 Z4 z0 K5 g# B/ H7 x. k4 \
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    6 U* h, ]8 P" {1 j( R" V1 q
  384.     {
    1 N: ^2 Q: r" Q
  385.       file2=(LPUPDATEFILE)(*i).second;1 S) k( W9 F' \( d. T- i
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 Z6 {# }: u$ k% j& H
  387.       {, ^0 u3 L* i% `- R2 k, Z
  388.         file1=(LPUPDATEFILE)(*p).second;! U! k: e% b9 L3 p9 I
  389.         file1->vers=file2->vers;
    , d& s5 G0 S2 N1 N' o
  390.       }
    ' d, [$ p$ j  X# h  n" C
  391.       else
    1 n6 \" z" \7 v5 E
  392.       {
    % H, T1 `" d$ z- h4 K  i: K& \
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( a$ G2 p7 |7 I% a
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ; d) k0 B, o! ^
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    + k1 N1 P& p8 K7 g4 `2 W  |
  396.       }
    ; ^" {: a0 G6 K  T
  397.     }
    8 |9 {2 Q2 w  \4 m- n$ c
  398.   }$ I  ]$ r- _7 K6 K# p+ ~
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++), m8 }* Z, H& _: [- G/ U* Z% D
  400.   {
    1 _" u; o, Y7 z$ w* k9 d9 s3 q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())6 B0 l: D5 i7 X/ V' F" ]
  402.     {! s- ~# \4 }, k2 P
  403.       file2=(LPUPDATEFILE)(*i).second;
    " p' Q5 ~2 t" l  \2 u* G# A4 g' H
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 w( _& F0 o9 d1 T
  405.       {+ N0 [/ Q$ l( m6 Y9 N/ e, @5 r) d
  406.         file1=(LPUPDATEFILE)(*p).second;
    9 r; J* k$ ^7 n, i# Q0 \
  407.         if(file1->vers!=file2->vers)
    + o' F- h* x% P$ J
  408.         {. \* Q# ?2 l- W' [% [
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 n# ]- c+ Z0 d
  410.           c++;5 V# o0 N2 t9 {' Q# N" ~4 i" H
  411.         }( k! a3 L) D! `% o
  412.       }
    ! U; U/ {& L5 Q; Y4 l
  413.       else
    8 g: i, @! v' l2 }
  414.       {" I1 L9 h4 E+ ]7 o& V" e- d  R: n
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  u) H3 d* |. j: U$ Z( D
  416.         c++;; @# T! h! Z8 a" |+ X3 m
  417.       }% K$ {$ n& U1 H* J
  418.     }
    7 i* V% {% j. T: X2 e  U) \
  419.   }
    3 N0 i4 a2 s2 `$ [" z& k9 _, Q! e% Z
  420.   unlink(".\\DownLoad\\update.txt");
    % ]5 ?9 k+ x/ r4 R! S5 u
  421.   if(UpdateLocal.size()) return TRUE;2 o4 ^3 _4 W: X+ }7 l
  422.   else                   return FALSE;* I' p4 {' H$ ]% {- A: d
  423. }
    3 X3 I( O6 a* [7 n% ^2 c
  424. 0 V& Q3 g  j! x
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ( s1 V9 g/ c$ e1 Z' Y7 ^
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"' V1 Z# E' d: w$ o: D
  427. 7 B) r: ?3 M1 f5 o- Z* y( F' f. ~
  428. 7 ~' b- q& }% T% K7 ~1 H
  429. 1 ]. _& N5 m! S! x, w
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    2 P; o" H1 i( i3 Q
  431. {: y* K& j, p/ y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;* f; U: z1 e' q& _% F0 H
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); y8 X4 Z- q9 J. P, W1 X$ o$ ]
  434.   {
    ) {& s7 l# T1 O( g3 B; A) e7 Z
  435.     char szLanguage[50];4 l) r5 Z7 |8 s  U% F8 @/ ^" n; h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 k5 g2 P4 c: v: e
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 F( ?3 C  m8 O: \& W: c) x( |
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 i7 \" B  S5 q$ l- p4 z, _$ g8 m. {/ s
  439.     else                                   m_iLanguage=ENGLISH;
    ) x; Y1 T6 Z" s! f" f; g# R
  440.     char szRegister[100];
    ) x! I; O* ?# a+ a% s' N
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. `1 h( G/ B7 }" u/ f- h# ~
  442.     strRegsName=szRegister;( V, w  X# c/ [1 d4 u: k# }. Y
  443.     char szPatchURL[100];5 F% \7 l: w! I3 i3 U  B
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");, p6 L' o0 D2 g9 @4 K2 L, G
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. b+ V' e: c0 V5 f3 _
  446.   }( C9 H% G, G; h+ c
  447.   else- z/ ?. C  w3 I( w, h9 r0 c6 {
  448.   {9 T: J  t2 P- E
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 h/ Q1 w: q1 A/ T, `
  450.     strRegsName=DEFAULT_REG_URL;' O/ a/ C& r$ d- F
  451.   }
    7 ~& c5 {/ w) _
  452.   if(GetFileAttributes("hosts.ini")!=-1)/ n8 p; F5 {) H: x
  453.   {* H5 G4 D& a/ R. O
  454.     char szIP[50];6 |+ ]1 x' s( t; D' h
  455.     char szDIR[300];! Y; B5 k  {" O
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    2 y! ?; A5 I& y( V$ c. M% a' r# K
  457.     {
    # Q. D! s; i1 x! V  P% {
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");& L6 K/ q: L* ]& V8 C
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");2 E% q3 r- G6 y; A/ g  c
  460.       strHostName=szIP;' z# a$ n/ [. o: k% x# _+ k
  461.       strHostPath.Format("/%s",szDIR);
    $ Q6 n  `& v1 a; R- Z8 s
  462.     }
    * E, k" _9 \4 m
  463.     else
    " R2 R6 g) j6 }
  464.     {' L# E' m/ \7 m. v: z4 ^# V
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " _4 W- p6 ~# V/ Q- A5 {- g
  466.       {
    4 S2 ^6 A) Y2 f2 P" x; \" h: `
  467.         char szLanguage[50];
    & |! L& n) m7 `# \3 W
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    7 h! @  m7 \2 ^# b  @3 C
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; t; H0 C3 H- `! f
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      E, ^. O* U4 u( N: M8 Z
  471.         else                                   m_iLanguage=ENGLISH;" k0 U1 [5 P6 M1 t; }
  472.         char szRegister[100];/ g6 g& o& i% Z
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 S" B4 E. f: Z; e$ `0 L
  474.         strRegsName=szRegister;
    9 p! W6 o) n3 ?6 P9 {" I+ w: v' V
  475.         char szPatchURL[100];# {1 d/ X% u4 t) p0 V
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % G3 q& T! Z  x7 a
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : Y/ P; P! a; P/ E' T0 i+ ]
  478.       }
    % p$ b! a" k/ Y" w
  479.       else& f! b* w& e9 q# L/ I2 g
  480.       {
    : P+ y, U. A& {+ S
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( I, Y6 ~. K/ x& f
  482.         strRegsName=DEFAULT_REG_URL;4 I) D7 H4 T" `$ u( u2 h
  483.       }
    - k( I9 w  P0 F  g& m
  484.     }2 T# ]; w8 ^0 C: W
  485.   }
    8 J$ o! ~6 w7 z
  486.   return true;
    + J3 L. ^0 s  h, ^
  487. }' Q7 R- F' R& \0 c. e: j* P

  488. & N4 L1 z+ `, J- X( q1 P
  489. #include ".\ZLib\unzip.h"" D6 u; w1 {* ^, O+ G
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    8 i' F2 N) ~/ I5 w8 I
  491. ////////////////////////////////////////////////////////////////////////////// ?+ V) c* z4 l; d( g! x3 D" ^& H8 P
  492. // CRevAppApp initialization) j/ {$ d) h; a' _9 S. A7 G

  493. 9 f2 p- Q7 G: [6 X9 _* U
  494. BOOL CRevAppApp::InitInstance()2 C5 U  F% S$ n  E
  495. {2 q: _1 d/ o2 g+ R
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , u# a9 U' c& M8 n5 G& D, ]- F! A
  497. 8 n  j3 i% y; v! g
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    9 Z# M0 l5 H; L7 R
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    + P, ^8 e7 m' U5 |, A3 |+ {
  500.   {
    4 c* D8 D6 g; M9 t3 R6 u) M
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    6 p$ y! a6 D6 a2 G: x7 n! \
  502.     GetPathFromFullPath(szPathTarget,szPathSource);# D7 J. t% W5 T, Z+ h; L
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ' @1 t! r6 E/ ?1 C* ?; Q
  504.     {
    & V& ^# l6 M, A# Q
  505.       strcpy(szPath,szPathTarget);
    - p; K3 ~6 i! A& K' }
  506.       SetCurrentDirectory(szPath);; k* b1 T4 @! t
  507.     }. @, m0 R- K) q' J/ _- {
  508.   }
    , J2 Z) k* x4 O+ f& i8 s4 x3 X8 _
  509. #ifdef _DEBUG
    ' B5 @" O7 X' b( I& k
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 p4 A) t* k% _
  511. #else2 ?. H8 }+ p8 r' b1 V$ ?& D3 {
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! F6 J" H) y! y
  513. #endif
    " }, D/ f8 `3 `# |" G
  514.   {
    % W/ S6 n5 W3 F/ N
  515.     char tempFileName[MAX_PATH];
    ( V" r1 N6 n3 W9 a! w" k/ O; `
  516.     strcpy(tempFileName,szPathSource);
    - D  _. u3 p+ p& Q- B$ I! }) k8 F
  517.     tempFileName[strlen(szPathSource)-12]=0;
    - W! ^! G: q! S: \& B0 U; y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");; \# h2 _! ?% ?+ |3 n; c/ h) v
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    7 L# f0 X* U* b' g/ Q# F) i5 s* Y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);# R5 t+ V$ ?! q* N
  521.     return TRUE;/ a* H' L5 g- R- `( y3 s
  522.   }% f, ]% D, k- L9 H: A
  523.   // Nuke 0118: Delete run.exe
    ( Y1 A  w) x8 m$ C  V
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ; ]' b# I- Q3 }
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    1 e7 Z0 Q- s# ?
  526.   if(!ReadCfgFile("Config.ini"))  N% L- P( A% V/ F0 w
  527.   {6 D+ ~' }2 i( w+ x! {7 e
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 p, D+ O, @& U. c. c7 n# f
  529.     return TRUE;
    ; W. ]- q& v, g
  530.   }
    + `/ p* f, _8 W1 q; O' T. G8 D
  531.   HANDLE mutex;' i0 P. G( q  L7 i) Q4 z+ g
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ) p6 n/ F$ `) A; M7 a( M
  533.   {3 }' J/ j2 T0 h
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)1 a: W# A; \6 l4 t, y1 U( F9 Z4 T
  535.     {
    , D2 u: o1 H& i
  536.       CloseHandle(mutex);$ X& Q  E, r6 N1 U6 X' K7 D
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    . `( w5 W! M! j# u: c
  538.       return TRUE;7 V* E. \( `" X/ D/ a  @
  539.     }1 _$ @6 Z8 S; D# E/ E+ j% T
  540.   }  
    1 ~  b( t+ m8 Q. L1 C
  541.   CloseHandle(mutex);5 t3 y1 |, I. L! k; e. @& |8 [2 n
  542. 5 x: ?, H0 E& Y% d0 I7 ]/ @
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    4 E) ]0 {( l: J' `8 a9 H; D
  544. ( W. ~: h+ o# e+ Y( Q; m( g" P2 i
  545.         AfxEnableControlContainer();
    7 W# Z5 S+ Q* t$ r8 C3 R! N8 d9 o

  546. 0 g# _$ `' f1 [. p
  547.   bCanUpdate=FALSE;
    5 s- o4 z2 n8 u" t+ @" E" R2 C9 H
  548.   dwStartUpSteps=1;
    ' K, c5 D% W, _6 y
  549.   dwProgramState=AP_NOTHING;* y$ ]9 O4 v8 ]7 v
  550. + V' l7 c0 U* V5 o# a
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);/ P& J  P0 k+ l
  552. ( w! c) a9 c3 [! |9 ~/ C
  553.         // Standard initialization5 Z" z7 U" [5 a' b
  554.         // If you are not using these features and wish to reduce the size
    6 ^8 S' I: i+ m! {& s
  555.         //  of your final executable, you should remove from the following* ~/ u) H& d1 C3 _3 z
  556.         //  the specific initialization routines you do not need.
    4 r9 D0 T* I8 L" e2 Y1 u

  557. / t* }9 q6 P: T; W' z+ t
  558. #ifdef _AFXDLL2 {/ E* Y0 o2 T# _) _
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    7 m2 |: j! G' n
  560. #else
    0 J+ b5 s! W- r- R' [7 g' Z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    - |- S  {7 f; {4 ]8 @7 U4 H
  562. #endif
    : z; W% i' B5 G- x4 v" F

  563. ! p8 M3 J4 J  M$ U4 H) O
  564.   dlg=new CRevAppDlg;- D5 \1 D- T+ s. I
  565.   dlg->Create(IDD_REVAPP_DIALOG);2 F6 p/ A8 Q, v# V  g
  566.   dlg->ShowWindow(SW_SHOWNORMAL);# a! z* j9 u1 j& E. r3 l. x
  567.   m_pMainWnd=dlg;8 Y. _' M6 ]% y' H

  568. # b* [5 ]1 O& `$ X4 N
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 K9 U" i4 d2 s/ E( U

  570. . M- I2 o8 h- v5 q% O. w
  571. //  GdiplusStartupInput gdiplusStartupInput;4 [+ _% J4 y% D) @5 i
  572. //  ULONG_PTR gdiplusToken;  F3 e8 Q8 G6 M7 B/ i- o- z
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);( q( e* v* ^/ n# ?5 S8 U3 t

  574. 4 A3 P% I" z- L/ }5 h
  575. //        CRevAppDlg dlg;% L9 k- l* l+ R' |) P2 h; B
  576. //        int nResponse = dlg.DoModal();
    ! _/ _4 f% A& a- q; M; a
  577. //        if (nResponse == IDOK)
    6 y5 }* j4 K, F0 ~& j
  578. //        {/ A$ M: i) d9 L  w: `2 r
  579. //                // TODO: Place code here to handle when the dialog is
    4 k7 P; F, o/ y, _/ |. Z
  580. //                //  dismissed with OK4 v$ v9 r2 J  ~# a% [
  581. //        }4 ^3 k1 X' q2 {! D3 T& m
  582. //        else if (nResponse == IDCANCEL)3 }9 ~  K7 T5 N
  583. //        {
    , q" [$ @2 r0 d- ^$ W5 }! o8 p
  584. //                // TODO: Place code here to handle when the dialog is
    & f4 h/ V: W' y% d; ^
  585. //                //  dismissed with Cancel% d* P7 }: K: `
  586. //        }6 }1 X& e/ O0 j/ N+ y5 W
  587. 8 p0 t+ `: G  M0 G
  588.         // Since the dialog has been closed, return FALSE so that we exit the3 Q7 V% F$ d! B! q  ?( [* V' s
  589.         //  application, rather than start the application's message pump.
    % F; U( C/ {7 D4 Z4 S2 ~( b
  590.         return TRUE;
    ; M1 E, w- d% z* \8 k2 ?3 F
  591. }4 o0 o9 R9 z, H, a( s

  592. - E' \# @. D5 |. H0 m
  593. char *CRevAppApp::strtok3(char *pSource,char *token)4 |3 U' n* D7 C! Y! R* ^
  594. {
    # q& J+ Y5 _* T3 Y( ~
  595.   int i;
    ! _. V+ l2 H; |
  596.   char *szRet;
    * M% [; |+ s' i8 }; L
  597. & ?9 N# q0 G0 s9 k5 Y
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    6 i6 @7 S: \! A" ?- f2 N) U! \  q
  599.   if(sztoken)' p7 Z9 b8 Z' |+ R
  600.   {1 t  `- p. n% H, |
  601.     szRet=&sztoken[itoken];- x) {+ o5 c& ]
  602.     while(sztoken[itoken])" ^3 t5 r7 T# z
  603.     {  z. {6 _4 c/ }& _5 L) S+ {, q8 E
  604.       for(i=0;i<(int)strlen(token);i++)& Q) W. u9 L( J1 q* [6 S
  605.       {
    % M: G6 q- m+ ?
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])" w; j& S  L. k/ |
  607.         {
    8 l6 `0 F+ m- R
  608.           sztoken[itoken++]=0;
    & D5 G' s: w' t' C4 f2 s$ K4 D1 ]/ c7 r
  609.           sztoken[itoken++]=0;9 ^$ X5 u' d. |9 `: H5 a
  610.           return szRet;, m% \' L. E8 ~$ ?3 d! Z2 @) D
  611.         }; F. G4 {) ~" \
  612.       }
    ! }, R# L( \4 N
  613.       itoken++;7 [: F' o: ^8 a
  614.     }5 y) Q7 _+ }$ h' L8 D1 L2 J
  615.   }  V0 v5 {% E5 O- H* }3 p* p
  616.   return NULL;5 s$ b- S# L# `8 ]* @
  617. }2 b; {- x- s  b( C! @5 W
  618. 2 G+ ~- W4 y2 o
  619. void ProcessProc(long Total,long Current)
    * X$ T+ i! i" Y4 E, p! D7 o' J
  620. {" l0 S- S6 Y/ c! ?2 B1 F& P
  621.         MSG msg;( i. L1 w7 Q- g5 p+ n
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    - n$ E. [% ^2 [! S2 F1 q1 D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));, f" w+ k$ |3 H# Q2 Y2 B. ]1 k: @7 F8 e
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    4 ], ]% Q2 r4 [7 e- O4 e3 n
  625.         {$ Q6 f- Y( r8 l  G0 h! e2 w6 v# k
  626.                 if(!GetMessage(&msg,NULL,0,0))
    9 d3 E  }: s3 i3 }
  627.                 {
    5 Y( f: i5 u0 g$ U$ y) O- K/ W
  628.                         return;0 ]  Y1 n8 m* r* @( p3 Y
  629.                 }4 ^2 B3 B. i: M- x# f6 Q5 W
  630.                 TranslateMessage(&msg);  k) ]- ?. D4 m4 w; _" i3 \
  631.                 DispatchMessage(&msg);6 L5 G. T; S. W  G0 f% w
  632.         }        6 F- T1 G/ }+ L+ q7 {$ U4 L- {6 A
  633. }7 G8 A! Y3 n2 S3 @( ^' o

  634. + d& z$ u" T" ?; b* i0 y
  635. BOOL bFirstChar=TRUE;8 U! {6 K2 r5 \- p6 f& n
  636. : k4 G" s; n9 B
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 Z8 u4 E: Y* y5 C
  638. {, ^  K& e. v4 y9 T9 e( w
  639.         // TODO: Add your specialized code here and/or call the base class
    $ j- o+ A: F. h3 z
  640.   switch(dwProgramState)& \1 K  {9 G9 r! f+ N
  641.   {' N# D& W0 B, g
  642.   case AP_NOTHING:
    $ k! g; K% K9 V5 W* z$ I
  643.     switch(dwStartUpSteps)
    , p( Q# B/ m- i  g0 M& e
  644.     {
      ^. q7 K/ B+ O+ B4 A% J+ a
  645.     case 1:
    4 Z; a3 Z0 {5 h
  646.       {& N  s5 _) S4 u( E
  647.         int i;2 x5 A6 Q9 W. p
  648.         CDC *pCDC=dlg->GetDC();; ^  S! J1 p$ W2 j
  649.         HDC hdcwnd=pCDC->m_hDC;
    ! N" }( Z8 J, d" \+ D
  650. //        Graphics graphics(hdcwnd);  r5 P5 s' s( i+ P
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");+ Y9 {6 `) b4 t" E7 Q. ]0 X+ s; L
  652. //        INT iWidth=bitmap.GetWidth();
    / B. g, A  N6 W3 C/ ?' f& V* M
  653. //        INT iHeight=bitmap.GetHeight();
    " X( D% _" Z0 _4 g
  654. //        Color color,colorTemp;
    $ a9 L( d2 h3 N5 J9 O
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    , a/ g1 L. B' o* l+ a) Z! v, P
  656. //        {5 K, |5 s9 A2 W5 `
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    $ F' g: ~" k3 G) }2 w. j" H  E
  658. //          {- l5 O# P1 M  P! X6 y/ W
  659. //            bitmap.GetPixel(iColumn,iRow,&color);$ C, ?, s% C: h# `; `! q3 @" n( {8 b: w
  660. //            colorTemp.SetValue(color.MakeARGB(
    2 D% O* e9 k' O# u- ~& W
  661. //              (BYTE)(255*iColumn/iWidth),7 A& E3 Y' c( S. a& ~8 m
  662. //              color.GetRed(),6 @, i6 |: |4 n/ V5 l: m. d
  663. //              color.GetGreen(),- Q; R# R: O2 a- n: N9 [
  664. //              color.GetBlue()));  ^% O7 D0 r8 n5 Z( ]$ l
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    8 F3 n# X& O( G
  666. //          }
    ( A/ W' Q& J$ ?/ V0 y
  667. //        }
    0 f# L, ^* S* Q! Y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);7 |! T# Q. a3 J+ h. ^5 F9 X
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 |( E9 L" u! e& N" F: T
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    + a, F; N. [5 W# Z2 E- [" f7 P; o
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' J9 t8 T0 o( `7 C, U# r
  672.         for(i=0;i<240;i+=8)) l* S! ?! a6 h& R
  673.         {
    ) i& e% X& X1 X) E! [& T) g
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 v+ v# U1 o8 E3 e  r
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 M$ G4 z; M) j2 m5 @6 r  K
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);2 I  ^) B6 r" |# o
  677.           Sleep(33);
    % f! t9 L- B) T: G4 i/ D9 Z; m" Y
  678.         }% D8 |8 H4 Y4 K1 Z5 p1 F# A
  679.         Sleep(1000);9 r  R" f* F8 M
  680.         for(i=240;i>0;i-=8)
    " X  X1 M/ ?7 w1 j
  681.         {
    8 ^; a9 |% z2 c
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 r" r+ a* I+ `' s( `
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# s9 p3 l9 e2 S, m/ b" r" ?
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - T1 r0 {! h: ]# o7 w3 c  X* L
  685.           Sleep(33);* B4 W- P' ^* O4 d8 O
  686.         }' N( L! B, W' b( g2 U, ^
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    . E6 _" S6 k' u+ b6 R( }
  688.         dlg->ReleaseDC(pCDC);
    / |) H- w; a+ t" w' g0 Z* E- [
  689.         DeleteDC(hdctar);- e/ {- h/ U* r
  690.         DeleteDC(hdcsrc);
    ) |' O- x; |3 E% U' N
  691.         DeleteDC(hdcorg);' }7 N' @6 Z! z1 q5 z! P
  692.       }2 }0 J1 W" W) M
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 |/ M, _# L  ]+ `! W0 P. J
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    & Z4 p; E0 M0 z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");0 d+ d  c: B( k6 q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ' N3 G2 M& B$ A" s5 @( c+ z4 A
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 E0 d- a4 B$ V3 a3 [+ k
  698.       if(!Dn.Connected())
    ) \# Z) j2 s6 `# }
  699.       {
    & q/ r2 p; w0 g) W( e5 d
  700.         dwTotalFiles=1;; |: S2 B( s6 o$ H$ n9 }
  701.         dwDownLoaded=0;
    + g7 }- O- P# h2 z
  702.         bSilentStep=TRUE;
    0 A# F- V8 U! z% Z* N
  703.         bCompressed=FALSE;
    , u8 c. @! `/ x- t5 p& X
  704.         strExtLocal.Empty();
    & c9 V7 V" F  S* r" \
  705.         strFullName="readme.txt";$ o- n, g' z- m4 @9 j% `
  706.         dwProgramState=AP_CONNECT;
    . {! ]3 V$ Q* M" ]
  707.       }
    $ y% a  A; Y& [# Z
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();, [4 S5 S- c# |8 T3 ?: `' ]
  709.       dwStartUpSteps=2;; v5 J7 C! N- S+ \$ Y# C
  710.       break;4 Z' @4 o4 ^+ j$ Y- J( P8 I
  711.     case 2:+ U% w% i+ C% E
  712.       {' c* j' ~0 x8 o8 Z
  713.         int iEOF;
    " I( F4 {( \( y/ g
  714.         FILE *fp;
    % k1 ^; h) ?8 j. u0 _* l
  715.         char szString[512];
    & k3 r0 r, f& I& J
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");- a5 W; \) G. @/ q
  717.         if(fp)
    , s& ~/ _' C2 r: B
  718.         {9 X3 O3 `8 L5 t6 U7 A( W" U
  719.           do) s; B) Z) L2 D: p4 z( i) c# p
  720.           {
    . t  ^' y) f6 b8 \7 G; Q) R7 C# k& H
  721.             iEOF=fscanf(fp,"%s",szString);- v7 `0 S) \$ X) L  ?
  722.             if(strlen(szString))
    , h( E# @/ ^# G
  723.             {8 u! ?) x, _* g4 C+ D
  724.               if(bFirstChar)
    3 V' R3 X$ T; f, e7 M+ D; P8 }
  725.               {
    / G# O+ t4 d, p% s6 H
  726.                 bFirstChar=FALSE;
    * X! o' C; x7 N& n" s
  727.                 bConnectIsBig5=FALSE;
    - b* J7 L7 q1 [  K
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;4 `/ K9 o  n7 F# O; m( ~
  729.               }! f* S5 }' V5 z% }3 N: \& l# [1 l
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; Q. x( P& P' D, f; A
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . E3 J7 D4 k! z6 c# \2 i
  732.               dlg->m_ListText.AddString(szString);/ p3 ^3 I0 ^: o+ L9 x& y; \
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # Q/ x& p8 r$ p
  734.               *szString=0;4 @8 d) }  E; S8 l) S) b  @
  735.             }+ l4 K5 a  g3 J5 Y! {7 {
  736.           } while(iEOF!=EOF);  E8 W, d% t( {9 E) g/ F  i
  737.           fclose(fp);9 [8 S- n" \2 V7 G* L) J
  738.           unlink(".\\DownLoad\\readme.txt");& g6 P" j4 x5 r- a
  739.           dwStartUpSteps=3;
    5 U0 v( |4 {3 F7 t6 S# ^1 M2 m6 r
  740.         }
    / o- W2 B7 [) m
  741.       }
    - l7 P1 w3 Q- O9 M
  742.       break;% {- h4 V/ ^, _$ I9 W
  743.     case 3:' u- S+ J# |$ T' T) E3 T
  744.       if(!Dn.Connected())' R7 s! u  g/ b8 q4 t) S* T$ S! ?
  745.       {$ e0 x7 \- i8 O* W3 K
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);* v- h& Q2 [" a% c
  747.         dwTotalFiles=1;& z9 U+ u/ H( r- w6 A/ I
  748.         dwDownLoaded=0;
    8 O9 Z3 \+ m: Y. e
  749.         bSilentStep=TRUE;
    . a: d3 {' ~& t
  750.         bCompressed=FALSE;
    ( ?9 R5 g. i: o
  751.         strExtLocal.Empty();0 r2 j: G! c& J+ K
  752.         strFullName="checkversion.txt";
    ! p& ]& m' n4 {* w2 t: a
  753.         dwProgramState=AP_CONNECT;
    ) g# F$ q' r3 _) K( [  p7 m
  754.       }" y7 i* Z3 T; {# ^2 a
  755.       dwStartUpSteps=4;% J; L0 k; A7 {. G2 f1 _0 A
  756.       break;# }0 c6 d+ |+ d3 ^' V3 O4 g
  757.     case 4:% J* I4 U4 u+ ?8 c- U1 v5 w
  758.       {# s# C5 ^0 {* U. b* C, c9 H2 A) F* m
  759.         FILE *fp;1 v  `2 Z% d# y: }
  760.         char szString1[128];
    " P  A3 p% l" B0 y
  761.         char szString2[128];
    % }: w) c& D3 Y  F  O
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    9 l# l8 b" ?$ C6 C1 E: ?! L
  763.         if(fp)
    8 c. B! W$ n1 |( `& T" |& h3 k
  764.         {
    $ ^( g$ t' u9 K' ?& |+ F9 t
  765.           fscanf(fp,"%s",szString1);" {2 d% \: J3 M# }2 k5 J
  766.           fclose(fp);
      U3 n: }% \# V' C
  767.           fCheckVersion=atof(szString1);$ Y+ b9 x# `0 T# o: I5 A+ N" z! K
  768.           fp=fopen(".\\checkversion.dat","r");
    2 L1 i  M/ `  ]3 y0 `  {0 w" ^
  769.           if(fp)9 ^$ t6 C: z+ j* a8 ^( F3 [
  770.           {
    # t* c6 x- J5 f
  771.             fscanf(fp,"%s",szString2);3 [( [) }$ O4 y& S" Z
  772.             fclose(fp);7 V) N  S+ r& z  H
  773.             if(atof(szString1)!=atof(szString2))
    . q0 o1 A5 {/ Z4 ^  Z* G/ `4 u- I
  774.             {
    9 k: u8 t! v3 |0 c! V9 ~* _" T
  775.               if(!Dn.Connected())
    & C  `0 Q' _# N* c0 ^0 X, U
  776.               {) U: e1 e0 r7 b' y
  777.                 bFirstUpdate=TRUE;5 j4 |# w1 P, d
  778.                 dwTotalFiles=1;- L3 B% N- R7 d
  779.                 dwDownLoaded=0;; l/ [- l# {( z! D
  780.                 bSilentStep=FALSE;
    4 V7 Y6 \8 q1 b+ y/ }* C
  781.                 bCompressed=TRUE;
    - C: K& \# n  a+ D- `- J; o7 N
  782.                 strExtLocal=".\\DownLoad\";
    . H# |% D& ^0 H6 d
  783.                 strFullName="update.txt";
    ) ^4 }; ~, ~/ m" |( h- M7 d
  784.                 dwProgramState=AP_CONNECT;/ q2 T7 \1 t8 F7 B1 v, O, X! {0 G1 G* Z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 n! ?* d7 t, w! C( @* X
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 R! w2 M" q) D* P2 }( g+ B; Q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");* ?+ e& n& l1 X2 o/ K  V
  788. 0 g) p  U. u( _4 R
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 Z$ P1 V1 }1 h0 b; d
  790.                 unlink(".\\DownLoad\\checkversion.txt");7 R3 g8 z& \2 m1 C
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    - L/ x* P0 F% i7 B4 K
  792.                 {$ l) o; J: T: \, s8 T1 U& s
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! H" q  F  @# m3 H: T
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % e) V+ w8 Z  t8 l" d7 v
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");0 l" _" Z  H! ]7 h
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ u4 Z  L: T7 m% I1 i
  797.   s1 M& x7 ^. Q/ [% U2 Q
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, K6 G$ Q/ e3 `5 l! ?
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    3 N8 K9 \4 X6 Z5 }/ E
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");: [7 `# h# C) ?, L. s! F, {
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 Q! A8 X; y. g0 |! z5 N
  802.                 }
    4 `+ S8 g+ U: {& c  n9 L  E
  803.                 dwStartUpSteps=5;
    ) i. U: S  T& p
  804.               }( x' d: A, ?' O. D4 M/ l" O- [. V
  805.             }0 m; v/ d' m9 v2 |7 k, q
  806.             else* _, i- R; s" p$ y  Z& i  J+ a3 @6 O
  807.             {
    ) q  K, u( a) s3 p/ C8 G
  808.               unlink(".\\DownLoad\\checkversion.txt");
    % L" i1 N8 U8 h' K
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    & r6 ~( V) u1 H* i( Y; z+ s
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ( |# W1 E" i* w$ S/ p6 G4 F( l
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");/ h+ q2 C( T$ V* q

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

2 K  [' v4 X8 c5 w0 Z

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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