找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
! R9 ~- C3 {1 ~1 K0 p0 _5 H$ H6 q
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ! i( l; c5 j; Q4 \
  2. //. a" M2 s% k- V' H: R

  3.   b- N7 e8 n" I/ {9 I
  4. #include "stdafx.h"
    " z8 O2 j  _. V; C6 s' K1 J

  5. % b" I* l2 N. B" t3 l
  6. //#define UNICODE
    8 B5 N' B: I$ C% @# g- N! M
  7. //#include <gdiplus.h>8 ^3 {/ H9 y& i" u0 t
  8. //using namespace Gdiplus;- V/ P- D5 q. c7 W6 g. e
  9. + D2 S' S( f- D  Y. z& @: [5 R1 z
  10. #include "RevApp.h"
    ( d7 a5 A. j; L$ L5 w7 N
  11. #include "RevAppDlg.h"
    : m" p( \% `+ ~0 w0 W0 Y

  12. 9 z; z% K* M' S
  13. #pragma warning(disable:4786)$ H* I  x3 n8 y/ q5 k; Y
  14. #include <map>
    / ?1 C2 @! ~2 R* W$ x0 L
  15. #include <list>
    ! y1 x6 }) C! n' M
  16. #include <direct.h>/ j/ j4 k0 S3 c  `7 i
  17. 4 ?5 Y0 L$ R+ I5 }9 ~" r4 u" o
  18. #ifdef _DEBUG4 k- B: n" K9 ^
  19. #define new DEBUG_NEW
    * K* h) q9 {. R/ ]3 @
  20. #undef THIS_FILE, r% Y  z. c3 ~9 ?( Z9 K
  21. static char THIS_FILE[] = __FILE__;% B: h- m: \" }# K/ o5 ]
  22. #endif
    & I5 o) J3 P0 Z, t. z' @% ^
  23. #include "SkinResDef.h"# `" C  D' L2 g; ?' _& L3 h
  24. #include "ChangeBG.h"
    ! K6 v- h: \& ]% t+ ~
  25. #include "AFXINET.H"; V4 p& g6 Z+ m9 O0 X8 ~2 D
  26.   U' l0 ~: h1 W4 Y
  27. #define TRADITIONAL_CHINESE 0
    5 {# A6 u  z1 Y& H! n  I/ @
  28. #define SIMPLIFY_CHINESE 1
    ( f' p3 D" n2 S2 V
  29. #define ENGLISH 2, X6 e4 `) q  v9 u: c+ J, d
  30. int m_iLanguage = ENGLISH;5 e$ G" a! k9 p  S3 e% Q
  31. /////////////////////////////////////////////////////////////////////////////
    $ Y( Z9 H! |8 J) j! W' N
  32. // CRevAppApp
    2 D$ M  p3 I; W7 Y! G  f4 N
  33. 4 n; D& T" p9 v& `: s( B8 r! m4 l
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)( L& u7 ?: p0 p2 R& ]
  35.         //{{AFX_MSG_MAP(CRevAppApp)  t; E2 W) A4 o# [! s! h( j
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.( @6 w% l+ q4 {0 `
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    , @* Z' L8 B! m
  38.         //}}AFX_MSG
    " ?/ t/ F5 J2 O- R; a. G+ ~4 E
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)+ p/ x/ r3 A4 x! a2 s
  40. END_MESSAGE_MAP()
    - J& S. A% l) V/ |. b, U; b1 D
  41. * F4 B$ e3 ]+ w& z% Q$ M
  42. /////////////////////////////////////////////////////////////////////////////
    0 W& H- I8 q3 p- d# a3 v
  43. // CRevAppApp construction
    9 g: F& \' f+ @+ c3 A7 U6 @  ~! K
  44. . h% u) F+ B7 I4 S
  45. CRevAppApp::CRevAppApp()
    . n2 P. p( G! ^9 Y4 H- N
  46. {
      e0 V! z) o0 u; u* a$ y. c
  47.         // TODO: add construction code here,
    & a, i, l# F  m7 ?6 U7 c" A" ]
  48.         // Place all significant initialization in InitInstance. A+ \) S- N0 S+ [( e9 B) u
  49.   bDisplayIsBig5=FALSE;
    ' X# s+ M: Q+ r- k
  50.   bRestartUpdater=FALSE;
    + ]& F% j- U; j+ i
  51.   bFinishUpdated=FALSE;  q- F4 f8 R$ S. i1 |. l' o5 ]
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    8 z, P" W& c! t8 F" K. g
  53.   InitChangeDataBig52GBKS();
    " q# A( m) }2 x& r4 A$ C! ~
  54.   InitChangeDataGBKS2Big5();
    & I9 Z2 ?" W& j% j
  55.         //0 V1 O  O/ L5 o* g5 n1 C2 c! S
  56.         bClickRunExe = FALSE;
    ' v6 Y! w/ \; m/ u8 r  X& w  l
  57.         //( X% ^. F6 ]" B3 ]: Q
  58. }7 x  P  I0 y6 c% K$ t: t0 J8 j
  59. / F% P& G/ k9 N6 ^6 y) ^0 K
  60. CRevAppApp::~CRevAppApp(), ?) k9 T* ?" h1 u! k
  61. {" Y3 X, `7 r: l/ ]8 G
  62.         // TODO: add construction code here,& `: h1 [/ o5 o
  63.         // Place all significant initialization in InitInstance
    . n) z6 w- \! d" q# R  s
  64.   EndChangeData();
    0 B: J4 K! |! m4 y2 z* z$ Q
  65. }
    5 T2 c6 e3 e8 p5 Q" G

  66. / w! Q/ ^2 M- n3 H8 W
  67. /////////////////////////////////////////////////////////////////////////////% c; s8 }* j2 p$ @
  68. // The one and only CRevAppApp object
    1 E! m0 Y, D, a* ~) C

  69. 5 G7 ^' T$ W+ ^, f. }( R
  70. CRevAppApp theApp;
    / Y) [2 l+ D7 s% a4 ]  |# L/ @! k

  71. 3 b9 O& L2 ]) @! q  l' r! a
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)% n- S; I' G' }6 S
  73. {& c/ U( y8 S1 K( r7 f3 S
  74.   int iEOF=0;
    3 Z5 d# {' }" x2 T0 W  m. q3 i
  75.   char szTempName[MAX_PATH];9 M4 U  s; [0 N4 t: y# H; q
  76.   *szFileName=0;. k0 C# v1 Z9 }! y) l$ B
  77.   iEOF=fscanf(fp,"%s",szTempName);* I% v( n6 z0 x* b
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    . p3 j( m5 H' [
  79.   {
    5 F1 L! m% d* c6 Q# m
  80.     strcpy(szFileName,&szTempName[1]);. R7 f& V9 t7 d( q: R* |
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    , i' P4 F- h1 q3 p" w4 q: E
  82.     {
    ; }  l8 ~2 O. }2 V( l5 U& z
  83.       iEOF=fscanf(fp,"%s",szTempName);- F  l+ b0 B* N( R
  84.       strcat(szFileName," ");6 M/ }3 e# c! H/ R' ?5 |
  85.       strcat(szFileName,szTempName);
    2 Y9 O& l7 i, t* k" ~8 R' S
  86.     }5 T4 B' k9 V2 W+ Y- [
  87.     if(strlen(szFileName)>=1)- ~3 r) d& c8 U" D5 |" i. c! ~
  88.     {
    2 f) Z# Q5 w( J
  89.       szFileName[strlen(szFileName)-1]=0;
    ( |+ j: y0 N4 W7 {$ O. n
  90.     }+ n- V8 k& z! J+ V+ I* `
  91.   }
    4 ]- ]) B$ N4 e, D8 e, }# c
  92.   return szFileName;
    . [9 [7 a; P! d) \1 l1 i; v
  93. }# v1 ^! x4 m  |) G

  94. + _# _" p7 t8 h% X. x& D  H7 u3 {
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    + \$ S6 |4 V+ N
  96. {, `* ^, q: \+ U1 ^- j
  97.   FILE *fp;
    # H( R) b! i4 Z* o7 ~+ ^, U6 Q  Q$ o
  98.   char *key=NULL;; j1 [: ~0 D& ]: b  N6 J# p$ Q' F
  99.   char version[MAX_PATH];* z% d) y/ H  ~/ _. }6 l- m
  100.   LPUPDATEFILE file,olds;2 n! c# @2 n( [, ~0 h  r/ G4 q) n+ K8 t
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' q/ y0 G) z6 m( |

  102. 1 Z9 c# w( z$ b* V. d) x
  103.   UpdateList.clear();
    & h, _  {" O; F2 A; D' p$ C
  104.   UpdateFile.clear();. r4 ^$ t' g2 p
  105.   if(GetFileAttributes(filename)==-1) return false;2 C) B( T+ i' Q6 H2 g/ r  T
  106.   if(!(fp=fopen(filename,"r"))) return false;
    : b5 `5 S$ u% L  t  W: b1 M0 @
  107.   fscanf(fp,"%s",version);
    ! o7 o! T+ G1 K4 j
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    3 Q& O& B9 l; f- E
  109.   while(fscanf(fp,"%s",version)!=EOF). W  W8 Z9 W- B+ D
  110.   {
    ! k0 q! P2 n) Y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; I) }6 N. K1 U8 M) @
  112.     fscanf(fp,"%s",file->path);
    % C$ h0 s- U9 c7 t  W
  113.     ReadFileNames(fp,file->file);9 ^9 D* F3 B5 L( k( c% E
  114.     strcpy(file->full,".");
    2 s, m. R+ V) s3 A/ X
  115.     strcat(file->full,file->path);
    ) m# ]" n& ]8 o
  116.     strcat(file->full,file->file);
    % G1 ]) s$ {5 C+ K( g' t; c& B
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())4 X0 |% W! w. Q' }' b
  118.     {
    $ o! z8 k4 I) ]
  119.       file->vers=(float)atof(version);! q' [- \/ `. }" U$ [! z' ]
  120.       UpdateList.push_back(file->full);( B! n/ e$ w" |- E" w3 e; c
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));2 J5 e! P( y3 L1 G$ f$ E
  122.     }4 o9 |9 l( w4 X) \! p
  123.     else7 T! Z( ~' c5 G: q
  124.     {, B7 w6 {1 y$ ?: k+ M
  125.       olds=(*p).second;
    & d9 Z! f* u9 C- `' D
  126.       if(olds->vers<(float)atof(version))
    / X8 G! @; r  f2 G; `6 Y8 i
  127.       {
    4 {+ b/ o9 L2 t% T* [
  128.         olds->vers=(float)atof(version);
      L' z4 ^& o* X" _: O  F" `
  129.       }3 @, [7 A6 r. e- k4 P( K1 ]7 C, A
  130.       free(file);7 p: [) L6 J5 j1 z1 d) \
  131.     }! `$ `7 ~$ Q! J" U& `/ }
  132.   }
    8 u% s9 Z  X9 I1 ^( x, F2 s
  133.   fclose(fp);+ t7 g7 j/ l& |9 a' I5 p& `, h' U
  134.   return true;
    1 C  J% o; Q0 V. @2 ~
  135. }" K5 g3 a1 d; @/ \3 C5 b
  136.   h5 B' D2 R1 j4 F2 I
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)0 o4 O4 k+ a1 ?3 |+ b
  138. {
    0 u+ Y, P; L! t8 M. h4 a3 o
  139.   TCHAR  szFull[MAX_PATH];' W3 F; O' F. [
  140.   TCHAR *token,*inter;
    - N& m1 V' t5 g3 S! \) w
  141.   *szPath=0;  i9 F8 O# F3 R1 d8 z: z
  142.   strcpy(szFull,szFullPath);( v; u$ \- d0 d0 C
  143.   token=strtok(szFull,"\\/");# Q0 _, H0 F, b( }3 s3 C* y
  144.   inter=token;- a5 |/ {3 i! [4 e% J
  145.   while(token=strtok(NULL,"\\/")): L8 G* Q2 x0 E1 s2 L! O
  146.   {
    ; l/ `+ b5 w4 `, h
  147.     strcat(szPath,inter);2 H" G) R- A! k! z& K; U6 b0 U
  148.     strcat(szPath,"\");
    ' p' A3 A* W( e! M. G2 y
  149.     inter=token;& ]; v7 \2 y  Q& Z( V. p
  150.   }; Q- m$ y- l. T) m. i# M5 z0 F5 W
  151.   return strlen(szPath);% |1 B) w( T% c  f8 X' w$ s
  152. }
    : S7 o; I! b& t! B
  153. ) O$ k. D2 [3 l2 ]  V4 a, a6 F
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    4 ~- L; ^$ z0 f- K7 l0 V# N
  155. {7 r& I3 A3 T* R( `" Y' m
  156.   DWORD attrib=GetFileAttributes(Target);7 X% y! ?* D. E$ {
  157.   if(attrib!=-1)$ w& Z2 d( u' C$ R& v  t& m, o% ]1 m
  158.   {
    3 x  A+ |9 v3 K* N! ?# k
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    * W6 {6 ?+ O1 k! J( [; Q1 M
  160.     {. o" Z+ {+ e6 ?! _+ h
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    0 d0 \% a0 r# s9 }: \; {8 ?5 Y
  162.       SetFileAttributes(Target,attrib);
    $ c, [2 R1 ^- M/ u) G$ [7 A  C1 w& _
  163.     }: G: @& r4 U* N" r  ~! T: @+ w
  164.   }; z. D/ ^: i8 ^6 y9 I" p( [% l
  165.   CopyFile(Source,Target,Erase);
    3 L+ S8 U5 p( i
  166. }
    5 q$ F0 v3 m+ G* R6 @; O

  167. 3 J2 J1 p0 d3 f; W% P5 x' V
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    + E1 P; H4 S5 y. u, }2 j4 t
  169. {$ P+ X8 i: p0 ]8 Y" U
  170.      FILE *fp;
    * E1 ^. c# x  X, B5 e8 I7 W
  171.      char  szBuffer[8192];% ]( X0 ?; C7 D2 d- Y6 K7 @
  172.   va_list  argptr;
    ( P5 v* t0 l/ ~! B

  173. 6 M8 @2 z6 T& g. m2 {* ]1 f' s8 n
  174.         va_start(argptr,message);; v* S0 e: |9 f! Z
  175.         vsprintf(szBuffer,message,argptr);
    9 p) Z' G* Q9 U$ N
  176.         va_end(argptr);5 t$ J* @- W4 K2 r7 v  U/ W: M
  177.   fp=fopen(FileName,"a");
      C# _" G! v( i  i9 {2 {9 {
  178.   if(fp)( v7 ^8 y4 T/ R- F: @" \; N
  179.   {9 b4 }0 H% F& f- K& y
  180.     fprintf(fp,szBuffer);
    6 u% v+ `! c" z! b
  181.     fclose(fp);  E' T4 I4 p) O* W
  182.           _flushall();  g+ i$ O! r! {/ q7 k
  183.   }7 p, I$ K) K( f9 t# Z( O' C: G
  184. }; |! A  I- F' U; `# N% ~
  185. ( T7 W5 w6 P: k" G
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    6 |5 E* r' N$ Z" ~4 G6 E: |# ?
  187. {4 m  _  {7 N$ Z. l
  188.      FILE *fp;
    5 |- y. G+ P6 m) x* X4 r( p
  189.     DWORD  attrib;. F5 R- Y% V2 `- K9 `
  190.   attrib=GetFileAttributes(FileName);% }8 o. X# ]  b+ G! X
  191.   if(attrib!=-1)* P# a3 `, A6 N2 e  i9 z3 O  m2 w
  192.   {( c: Q2 @2 l4 U% P' U- Z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    4 @/ O0 _2 M  d
  194.     if(!SetFileAttributes(FileName,attrib))$ F4 {- c' j4 v+ N  y
  195.     {0 |8 V1 E' ~  `7 J8 I
  196.       return FALSE;
    7 F2 g* _9 r& \# a0 O% c% M
  197.     }
    ! ~7 F) V* d1 w+ J* {# T  N
  198.   }0 H+ k+ \& ?- z* l: V4 T
  199.   fp=fopen(FileName,"wb");
    $ N% `  D6 W( }6 ~' g$ t: \
  200.   if(fp)
    9 H  v, F+ \2 d6 d
  201.   {9 x  a2 q1 X- G; y( K6 i! V, _) Q
  202.     fclose(fp);
    & x  a2 {7 |4 k9 z2 t6 U1 R
  203.   }8 B. |% B% I/ y/ H; p. O# h
  204.   return TRUE;: z$ z( e, V9 [; `/ D
  205. }
    ) _" [0 X; u+ P; y: a; T, r- P+ X

  206. ; W: o# F2 k  b4 u
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    0 p, Z& ?( n- k- M" c# V
  208. {2 Y' ~5 a2 m  i" X
  209.   char filename[MAX_PATH];
    % c: e0 E3 n2 K) H! g; P3 g
  210.   LPUPDATEFILE file,olds;  G% R% I1 O. @3 M
  211.   std::map<int,CString>::iterator i;
    3 N  b/ G2 K1 E9 l( \
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    . L5 _/ L) W% T; C' C2 P
  213.   std::list<CString>::iterator l;: r& r% u5 Y# Y4 [' p- y  y

  214. + l+ I* J$ U9 h1 L7 c
  215.   if(bFirstUpdate). x# u2 ~* u: E% h: C0 `
  216.   {
    * }6 ~) X" s0 i% H3 ^2 w
  217.     dwCurrFile=0;
    : t! k* \5 ~. {# ?2 j5 k# N, M; X& g
  218.     bFirstUpdate=FALSE;
    ; ~. v/ M3 g& D" f* l$ S- \
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 a+ ]  _3 w2 ~
  220.     {
    + P, m) b; R3 T, g2 X
  221.       dwTotalFiles=UpdateLocal.size();
    ( t- S0 X/ P8 A+ N# i; l
  222.       dwDownLoaded=0;+ ?' W/ X. O0 _9 b4 Y% `/ R
  223.       bSilentStep=FALSE;
    + ]5 R1 T( h. u. t
  224.       bCompressed=TRUE;* L7 n2 y& S- c) n4 A
  225.       strExtLocal.Empty();
    5 M& G" ?" ?- I1 F2 |
  226.       strFullName=(*i).second;: t  `' c( y" u8 T  x( N1 A
  227.       dwProgramState=AP_CONNECT;
    2 ~7 {5 o# E6 I3 C: s& X
  228.       return TRUE;2 G7 ^; e/ f( ]" {2 o8 v
  229.     }5 R) I  B. R$ X: {
  230.   }4 b7 @. Z! W: s, R' o
  231.   else if(bRestartUpdater==FALSE)
    $ Y" U7 o/ O; N) t4 O9 E5 f
  232.   {
    8 l# c8 a3 v) N9 g% U
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ) C" |+ M  y! p. _: @- Y! R1 k
  234.     {
    ) c/ ?9 _9 J. q5 O! v+ v1 i. X
  235.       file=(*p).second;) r- Y" y, w/ E0 j0 d, Y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())# L; v; n* X% `* H$ K2 }
  237.       {
    ( b6 k( G$ d. x4 S
  238.         olds=(*p).second;
    ' _4 p7 y5 y) z7 J. k
  239.         olds->vers=file->vers;
    ) {' l4 {! d. y7 x  [5 W( }
  240.       }% T" u& x0 ?/ w: {, C8 {
  241.       else" G  U' k1 j5 b" s
  242.       {6 o' J- y. w8 c- d9 f' R& Q
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : v0 X: @- `% c3 k
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    4 z  }8 ?% v% u- @6 f$ o& h
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));) [" d+ d% ?+ w  a7 u( I. Z' f
  246.       }
    3 x3 l8 M. C' ]0 W
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    & N4 g( r: D( b
  248.       sprintf(filename,"(%s)",file->file);
    & Z2 h( Z- j! @# [, l
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( J* M2 S3 M" ~& w# n3 x; [  w. f$ ^
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    9 p5 I% w6 P- g. j: K9 @' x& j
  251.     }  g; c! z2 a" D- J) l
  252.     dwCurrFile++;
    ; G) @/ l9 Y# z9 T" a2 o5 T
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . L: u3 G6 A0 A& Q7 G% g
  254.     {
    4 X! I+ a+ A0 V2 f
  255.       bSilentStep=FALSE;  C" ~' R$ t" \9 j! \
  256.       bCompressed=TRUE;* F( p3 L: v+ M- Q  b8 |$ I/ d% |9 U' U
  257.       strExtLocal.Empty();. ?+ V$ y/ F5 ?+ w6 x* ^
  258.       strFullName=(*i).second;+ k' S" H* y! e  S: V- q
  259.       dwProgramState=AP_CONNECT;
    / G; v" z' N' T  ^8 k, e5 C
  260.       return TRUE;, F. V  k* v4 x7 C& x2 X0 Z/ {
  261.     }& H; ~8 s; b( l
  262.     if(!bRestartUpdater)
    + u1 g4 X2 v  O0 W
  263.     {
    , v: T! f& I) |/ A3 y
  264.       int iCurrSize,iFileSize;
    ( D- n2 N0 z) U/ e! Y* R/ p. n
  265.       iCurrSize=0;# e( l6 E+ W1 i. i0 ]" i* [- N
  266.       iFileSize=UpdateList2.size();) C4 P. P4 l! y3 W: B
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    : `, t$ O, d4 {+ f
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");0 f- O/ N5 B/ ?. O( k3 }! r+ o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    8 v. d, J, _& S) A. v4 R9 }
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + e9 o, m% \1 @; e/ r, G7 }
  271.       Fclearf(".\\update.dat");
    . Z; M9 h, {. w
  272.       Fprintf(".\\update.dat","Bloodyf\n");8 W9 E1 d  l" _9 i' J% s
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)7 b( B% _! @/ |$ ~" \- o: ]
  274.       {. \( s+ b. J. a( c+ K
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())* W0 D6 q8 z  z* s
  276.         {, f4 }4 M' O; R' i1 j
  277.           file=(*p).second;" @4 A% D: E( S/ ?2 X( @8 Y
  278.           sprintf(filename,"(%s)",file->file);- v  o: W4 X) i; X# F8 U
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);2 c- }1 l8 k, I+ x% B' q3 ?+ t
  280.           iCurrSize++;
    5 J7 n% X# k0 _0 d* _/ k: M/ n
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ( t% E0 D" O8 f0 b
  282.         }1 p! r) z0 L4 }0 Q  R
  283.       }- d2 A7 e5 i( F% ]2 [7 X
  284.       unlink(".\\update.txt");
    ' C$ {5 f2 J& F& N. P5 g/ e2 J0 [
  285.       unlink(".\\update.tmp");# Y, `% v; f7 N' i
  286.       Fclearf(".\\checkversion.dat");6 n. }% ]2 h* w; i1 G: E
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);/ M+ \- S( e3 L% y
  288.       if(UpdateLocal.size())+ V, v) d% B# |) R; j  r9 [! a1 g$ O
  289.       {1 K) J9 P6 l7 y0 b
  290.         UpdateLocal.clear();% S& v5 R2 T* y  Q  E- ^
  291.       }
    " n6 j4 }. o. h8 C, ]8 g0 A8 F9 D
  292.       if(UpdateFile3.size())
    ' y8 C( i/ S6 `! l- a( k
  293.       {
    4 W# c2 Z2 @) ?' A$ ^
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 j' Q* ^& o( j. y& p
  295.         {
    9 p; {: e1 t: ]9 E2 ]
  296.           file=(*p).second;1 Y- z' j- @# ^) a) x0 C1 M( @
  297.           free(file);. y, ^5 V2 i* J
  298.         }
    3 ]& y* P. d: i% J/ l
  299.         UpdateFile3.clear();
    1 G) _9 p, }, ]& L
  300.         UpdateList3.clear();. v2 Y" Y3 o) g: }) ]
  301.       }
    % z2 ^% J2 A, ~7 B# `
  302.       if(UpdateFile2.size())" `# z* a/ |3 m0 b; }
  303.       {
    : S* r4 m' R% k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++): O: z9 O: l1 V% y
  305.         {
    # P7 `. X* i  d5 \
  306.           file=(*p).second;" I3 {0 e3 K) {; W! Z! L
  307.           free(file);: @9 a0 S5 Y4 s) u) d+ `
  308.         }
    2 f9 \6 l( d6 |" I% {' m- x* ^
  309.         UpdateFile2.clear();% _* s: K! a9 E  [* [
  310.         UpdateList2.clear();
    - G, {/ M3 m3 N/ J! w$ ^0 N
  311.       }
    3 ]9 q6 Y2 ^. v5 e; U, j
  312.       if(UpdateFile1.size())
    1 W# @: j! j  r( ?& N7 q
  313.       {
    + g% T/ A' @  M. q: R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 u: N+ K3 S; y, Q( }
  315.         {
    : O! f6 j8 ]& q2 E/ @. @
  316.           file=(*p).second;. V5 f) T, n- s3 `
  317.           free(file);
    + S8 u: F: {3 d5 m8 b
  318.         }
    8 I; B% n4 M. \; m
  319.         UpdateFile1.clear();! z' J8 v& I" t0 \& X1 _  l& g
  320.         UpdateList1.clear();
    1 s& Y+ ?: L1 v& x& t, Y2 J7 B
  321.       }3 J" ~+ n: k5 |2 _8 ^/ ^6 n7 S
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    : x) H6 R! r9 c9 e! }# `. v9 `
  323.     }
    9 K* t+ V1 `  z- X( G5 Q2 E* _
  324.   }
      E. H5 s& X' `* E) `- Z. n: q
  325.   return FALSE;# R4 k  h% b7 t
  326. }
    / V5 w% h& ], A# [3 g

  327. - b4 }5 m+ v. m. c
  328. void CRevAppApp::ClearAll(void)
    9 N8 e7 b/ N8 y1 u2 h
  329. {
    $ V. v( Z! P: u# N2 m5 _3 k& \, \
  330.   LPUPDATEFILE file;
    / y! o' X/ \( x
  331.   std::map<CString,LPUPDATEFILE>::iterator p;$ K4 v" ^& M% F( K
  332. 2 Q* G6 A4 q& ^2 d- }
  333.   if(UpdateLocal.size())& [1 R: S5 G  y0 Z$ j; A
  334.   {: V6 E5 ?) z. ], C, j" `
  335.     UpdateLocal.clear();$ {: [, I' S* a( p- h6 r
  336.   }
    / N. g% W9 P# Z. Z- U/ \5 d# M) Y
  337.   if(UpdateFile3.size()); {8 [$ ?$ U0 t/ ]6 I
  338.   {
    ! f" K9 d4 r: [. k. ]8 f3 Z/ I
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 a/ f1 \: y! a; W" O$ b: o7 o6 U% T
  340.     {# I# @9 @+ x/ D6 a
  341.       file=(*p).second;
    3 G' A( Z( o) L: `$ G; _
  342.       free(file);
    " j' I# s$ l- |. \
  343.     }5 C9 g4 D9 M3 E- p- G5 J8 `
  344.     UpdateFile3.clear();
    - G" w8 {& O' j4 K: \- S) q) t: ?
  345.     UpdateList3.clear();
    4 u, \) S6 R4 p0 b- c4 k" u5 R
  346.   }
    " g# Z0 s" O2 Q4 N
  347.   if(UpdateFile2.size())3 f0 e! N0 l8 K8 D
  348.   {( U4 J; N! f/ {: F3 L
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 ^+ D+ X# ^  J; a! h
  350.     {. v( g( x1 s" E% d
  351.       file=(*p).second;9 |% B/ p% N/ @
  352.       free(file);
    : Y, t! a6 r$ d
  353.     }+ U8 T& e. J7 w1 `
  354.     UpdateFile2.clear();
    5 _8 I9 |+ Q- G  D$ M) W9 X
  355.     UpdateList2.clear();
    - ?8 k6 V8 @& J
  356.   }5 g. r0 f: j$ {) v/ Z
  357.   if(UpdateFile1.size())
    9 B& u4 o3 q" s$ p' n
  358.   {7 Z9 F# _" N! {- ]2 u; }% O, ~
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( k( C/ m. D  M
  360.     {
    9 Q# Q$ w5 q" `' X- W4 I
  361.       file=(*p).second;4 n9 S, e, p& @+ M7 Y
  362.       free(file);4 A( ~3 y3 g7 r0 m. [
  363.     }
    % e, V6 }3 o0 f# H. V1 z/ A- Z, G
  364.     UpdateFile1.clear();
    ; W" P- W- J$ d0 O1 r( A
  365.     UpdateList1.clear();
    . E2 \- P" n3 ]# i/ h
  366.   }' O/ @. P5 n% O. ]9 u
  367. }  
    ( K3 c  v1 }' z* M
  368.   
    : h* n) E+ k( E: n! t8 b4 y
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    . E4 P7 Q: W- P+ k
  370. {
    ( d& l; X/ I: o6 ~+ G' w5 j) l9 H
  371.   int c;3 t$ z9 j5 y. ?
  372.   LPUPDATEFILE file1,file2;/ ?+ x( \$ g# d6 s8 Q. A
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    * p; Q) Y* s3 e' n5 z1 ^# L! z
  374.   std::list<CString>::iterator l;
    1 A& n6 S/ _- e7 z) K& Z/ O; E( }
  375. 4 l7 M( j# A+ C+ h6 I: \
  376.   UpdateLocal.clear();2 i5 V" G7 _7 i- |8 l! t, R8 j
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);' p, r& |$ W6 e' ~4 w; W( T! f
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);  I' V9 R* V  g8 a8 e
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ; Q% c! \7 Z% N/ x8 U4 g2 ^# j
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    2 ]6 [) \/ p8 j- _! b6 R: v+ X6 M4 I
  381.   if(UpdateFile3.size())2 J0 O9 f+ a' B
  382.   {7 O7 O' [' k0 U. W; l
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)8 x+ [; a/ F( Q. A- x. Z! t4 T& R5 `
  384.     {
    2 T4 g, e2 n( f1 c/ j& Q9 F
  385.       file2=(LPUPDATEFILE)(*i).second;7 b8 @+ _5 J2 @2 I2 m2 \
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 I( V; [: u6 \! Q# m2 U+ v5 M
  387.       {& D/ {( E; Q& D. c
  388.         file1=(LPUPDATEFILE)(*p).second;  ]9 k: {$ x5 G5 r5 j! Z
  389.         file1->vers=file2->vers;
    7 U3 a' [, e) z+ U! r! Y% R) W
  390.       }
    0 |- N8 t! ]) h' A
  391.       else+ b7 G) w) M) y2 X- g$ Z: B% E
  392.       {3 x, I6 h5 }, k6 R7 K
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ l& R4 s' _6 e1 x
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 a9 X, \1 r4 V* t9 V$ v6 W2 T
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));) g( t+ s% t% S% x
  396.       }
    2 p/ n7 j# u% M1 I9 \
  397.     }3 d( {: P( |& N/ F0 t* o' A0 ~
  398.   }) B$ ?2 W# S  \: [) g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)  C: n- X7 s& _
  400.   {$ i9 x' {& I8 F+ }5 o+ ^! F
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())0 e' Y, x3 P, f& n: L0 m7 [  W, b
  402.     {& [- `$ {5 u1 J5 E
  403.       file2=(LPUPDATEFILE)(*i).second;1 e  K) U/ Z* k( z1 I) H
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()), F3 d# v# L! r/ E% a
  405.       {2 d- {' z1 ~: S. ]1 R
  406.         file1=(LPUPDATEFILE)(*p).second;- N8 x! h/ P  d+ d2 o% l$ f
  407.         if(file1->vers!=file2->vers)( v+ G- R6 e# R, e) k
  408.         {# m, e- N1 y' g  u% d! W. `
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 }0 `3 H( ~) d" C
  410.           c++;
    + _( K) j6 j6 z- z1 z1 F$ B
  411.         }
    : U  n# ^" w/ Y7 F. n
  412.       }
    4 D$ I  V0 b+ C& p& {3 n4 h
  413.       else
    . e/ K: B1 P) Q  _  q9 h
  414.       {9 [, ~  d, P' R" H: T  e
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & u( ~/ _4 n0 L& h+ C
  416.         c++;
    ) q- O" m, x0 b3 B4 P+ Z
  417.       }: l6 R9 N% \# c  e( f
  418.     }6 x0 c3 J7 s; b! x" J
  419.   }9 T; V8 Z( w1 a3 i. p# W# j
  420.   unlink(".\\DownLoad\\update.txt");
    ' Q% {$ u/ O. v- k1 U8 `9 L8 ^% l8 S) T
  421.   if(UpdateLocal.size()) return TRUE;
    - b8 E3 Z2 l( J3 B6 u, x1 X
  422.   else                   return FALSE;/ ?# K& Q$ j: F
  423. }/ _5 S8 Q, n% y( {

  424. 3 Y+ V1 u; P$ R- H1 e
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    # B2 U1 L- \' V+ j* V0 T# c' c5 ~# L" U9 d7 i
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"- J0 A" D0 V0 }1 f' J
  427. : W8 k" N- l1 P7 K
  428. + o/ i0 L' C- L5 T

  429. 6 C, i! c* a" ~8 _
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ( l5 Q2 m5 J4 G  h( S& a) X; Y4 s0 F
  431. {" J" A- M/ ?5 H8 \
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;8 t4 w/ \' l# U2 l5 s) c) ]. d
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , D* N+ ^# Z1 h* J( v$ q
  434.   {
    + n6 k3 |1 @$ ], u/ e( `) x
  435.     char szLanguage[50];
    2 c, f. {0 D8 O8 ]* a) f
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : e& A3 v1 Y0 n! V
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- ]+ x" u5 H( J0 F3 Y' b* B1 h
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 J! x1 f! j# W9 R
  439.     else                                   m_iLanguage=ENGLISH;
    * G. ]5 {9 k0 i0 Z: E5 M+ n
  440.     char szRegister[100];, V  v& {- V3 C
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 M( @# W/ i9 u; J3 {! {6 ~  G
  442.     strRegsName=szRegister;
    ( A' b/ w4 q4 [8 I# ~
  443.     char szPatchURL[100];& v+ I0 G1 _# w. Z$ O' x! p
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + @4 F3 i8 a9 `/ }( T; v0 F5 H
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: o+ z8 G6 [; L* I6 }, G
  446.   }7 m( M" ]/ G( w# V4 [
  447.   else8 B* S  p3 r) e, [% c# U2 u8 ~
  448.   {
    0 b/ }, \. l- O7 J2 E! ]
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    5 h: R3 {( |; a, m; N  e
  450.     strRegsName=DEFAULT_REG_URL;! c% m$ a0 u9 l: p( w9 p  M
  451.   }) }) H& Q9 r, u. L1 j1 n- K
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    , x+ Z' s# Y8 y5 b2 B! m* i9 z( e
  453.   {9 S7 B3 t! ]/ `, A+ ?' y6 c
  454.     char szIP[50];
    7 M9 q+ _- w$ o: R
  455.     char szDIR[300];% a/ O  u' q2 M3 H) E; {( }# d
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    7 D& |) x9 a7 K" R: A
  457.     {. u% Y4 b/ \1 c3 [
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");/ L- B- P9 M7 W- s
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    : l, q- Q% F7 ]  K! b
  460.       strHostName=szIP;9 U8 C* [0 @6 @2 _+ K8 ^$ B  E
  461.       strHostPath.Format("/%s",szDIR);
    1 M" T$ G- z6 h) w& N' f
  462.     }' r# [7 @* G2 I% E: a
  463.     else
    / P3 G1 w% Y+ i( [
  464.     {
    # H' |* n+ x* G
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) p1 F* \6 G) e  o1 n
  466.       {  z  K$ ]  Q4 H: C# @
  467.         char szLanguage[50];
    / s( H- I" n) T# i7 q7 T4 D
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      Y" U3 g1 p- [4 f- y5 Q7 s7 s) q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 q7 j# o: e3 z# }( k
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;( h  F* {$ O1 t: B% r+ |
  471.         else                                   m_iLanguage=ENGLISH;
    2 N: K$ y- Y" b( @/ Z! \
  472.         char szRegister[100];
    # V6 K5 H, ^6 D$ W" U8 _: I
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 u4 Q8 ?8 P$ y1 b( @3 }$ P
  474.         strRegsName=szRegister;. O& I, ]  r9 V# w
  475.         char szPatchURL[100];
    . i  z  x$ y" l1 D) B( Y8 D+ n, ?
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 j* m1 m* ]: m! J+ H
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # W8 }: D, |' c& w2 a6 ?" m% ~2 P
  478.       }
    * G! H& @* L0 y+ ^" N  J& x
  479.       else
    & Q4 _$ B  F9 B% B4 |2 j9 S
  480.       {
    / S# B( U. d- s* z% N5 c) I" X
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 N4 p9 ~) p* R) P  f: v  Z
  482.         strRegsName=DEFAULT_REG_URL;: E8 k2 {% d8 j  d* P
  483.       }. |* y: [! [  Z: d( I0 B% G, o
  484.     }4 o* H; q7 ]0 F% J/ J" t
  485.   }) }! n6 K1 V" |2 S) G: u" W& Q
  486.   return true;8 O, @* S6 f* [3 a% G
  487. }
    1 A9 D. _2 g  V. _7 P' a$ |. ~
  488. " O" I; ~" D7 a( q1 q' e* j
  489. #include ".\ZLib\unzip.h"
    % F7 g( m" }$ w* T. t
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);" |( i. F& S2 R. z' v4 \; G
  491. /////////////////////////////////////////////////////////////////////////////
    % z' }- ~' W! q" p) J0 \: X
  492. // CRevAppApp initialization
    8 O; Z) \7 L# f$ r4 z2 v, s6 L+ U' k

  493. # A# B( H  U6 Z" ^6 Q; L
  494. BOOL CRevAppApp::InitInstance()0 }  B" \# d: X' e/ ]
  495. {
    , a) X( Q) p+ |- {) x
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    & e- T  y8 P; a" {' r' N

  497. ; e- r8 M3 e# U: z/ [3 h
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);2 }9 e: N. E6 ~
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    , v9 s- Q1 N% P# T; K8 A
  500.   {
    1 C$ i" W; o; C5 K( s
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    9 a3 V+ d( m$ o6 |3 L
  502.     GetPathFromFullPath(szPathTarget,szPathSource);' m, A1 o- [0 z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    / M/ \  b: p( B( r
  504.     {4 h9 y" X7 X8 q$ N1 ^
  505.       strcpy(szPath,szPathTarget);
    ! i, A1 {4 U% p
  506.       SetCurrentDirectory(szPath);6 X7 [: s* G- \: q. S
  507.     }
    4 o, P5 p6 L) l; L9 r! r
  508.   }. F# m. S8 f1 S% Z  n% c! W
  509. #ifdef _DEBUG
    $ s  J3 t- g6 A" z& F" n
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 g; f4 `! f" y7 s* s
  511. #else6 d/ Y- M& Z" N: {' x# F- K
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ j! V/ r/ \& j% O) i
  513. #endif
    % D& V) z& I; s5 i+ d0 J. _( T5 j
  514.   {! O9 r5 W: I1 i& w7 R9 ^
  515.     char tempFileName[MAX_PATH];
    * |3 a1 B' ?5 L$ ?) M4 v5 x1 N' q
  516.     strcpy(tempFileName,szPathSource);& W  s, {: |% i4 _5 L/ a; Y
  517.     tempFileName[strlen(szPathSource)-12]=0;; M& x$ v  h7 d, J3 N4 k
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    0 M9 J. C# p, j# a( {4 H! J
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    / ]3 V+ i9 v2 ?' I( @
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);  a/ `# s. m- _: C6 M2 ^
  521.     return TRUE;7 n& c  j8 T6 S( A# ]( |
  522.   }( m7 S% |. |6 q9 g
  523.   // Nuke 0118: Delete run.exe
    % x8 a$ o4 @7 F' O( m) d, b
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 c3 d7 K& z# o5 ^/ H; }. k
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");! J6 \% C6 X5 P# R8 ~
  526.   if(!ReadCfgFile("Config.ini"))
    * j4 Z* x7 O, c0 V
  527.   {
    ' r' r" A2 l& F2 Z* v
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);/ v  @' b6 m( C9 g3 O$ Z6 ]
  529.     return TRUE;; B* o: o5 A$ b0 N
  530.   }
    8 Z: D8 Q# X" _6 J& Q) ~
  531.   HANDLE mutex;$ X; K' ?- m7 {" ^5 v$ Q/ w
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")): y' C- d# o: C/ X+ h6 n
  533.   {1 Z2 Z8 j: M/ q0 [
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 }# H: A3 i! k5 \& J
  535.     {
    1 w) O+ K6 z, D  J
  536.       CloseHandle(mutex);: B! o2 ^, J* b2 C. e* @
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    % K8 o# L$ q& q  w, U
  538.       return TRUE;
    ( H3 V7 \" Z* Y0 Y3 z: Y$ D
  539.     }. q. e6 `" A9 I, i8 W  Y
  540.   }  7 h& A! u" k) G" i
  541.   CloseHandle(mutex);8 G8 c! P' m1 B2 V" Z* _, B( s

  542. ' e6 Y& a- |; f) N
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    3 t! p' m$ D& `
  544. % R. ^+ z. J+ N
  545.         AfxEnableControlContainer();# {6 Y+ ]/ U7 a% A  H; u4 N+ y

  546. . \$ c2 J8 g, D3 i: D
  547.   bCanUpdate=FALSE;: f* b% m  z! I- K) L) {0 o' ]% u, Q
  548.   dwStartUpSteps=1;2 d. g6 _5 L) ?" ]. {3 x
  549.   dwProgramState=AP_NOTHING;6 n5 j5 _% M1 f8 e9 _+ e
  550. # [- z! {9 x  l  G
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    6 y2 ^" U0 H; U7 `! b$ M8 t/ ^; K
  552. 0 A8 {( I5 J6 i3 l, l6 x& H. T. S4 x
  553.         // Standard initialization
    8 D2 v, i; c" I$ ]/ }
  554.         // If you are not using these features and wish to reduce the size  B" C) ~6 j- ^7 W
  555.         //  of your final executable, you should remove from the following- S( T3 l7 G" U* A
  556.         //  the specific initialization routines you do not need.
    + h( [/ V' ?7 u# [. o+ I

  557. , S' w4 }! q0 I8 g* Z1 @
  558. #ifdef _AFXDLL
    ) l* W' a. |) X( |" I
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    . k0 B8 n/ f* T2 t6 f4 X2 T! [
  560. #else
    ' f  D. l6 L9 N' ]) W
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically, N4 _# |2 G+ u
  562. #endif+ R- z! `& |' p* d& a
  563. , g. S; a% F& L) M4 _
  564.   dlg=new CRevAppDlg;
    : q$ D# O, C1 J+ [
  565.   dlg->Create(IDD_REVAPP_DIALOG);4 w. q* Z+ v/ n+ m  X
  566.   dlg->ShowWindow(SW_SHOWNORMAL);0 T1 R5 |: }6 S/ w0 b
  567.   m_pMainWnd=dlg;5 z2 E$ r) ~5 q6 C
  568.   X( o) W3 w* g* G. R1 m
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);+ v: v- b/ N( {" V& s2 u; y
  570. $ u- _& a2 l% n' r5 y
  571. //  GdiplusStartupInput gdiplusStartupInput;  B% `. X# u# c2 j8 K  v
  572. //  ULONG_PTR gdiplusToken;1 c8 m% v, Y% q+ H8 f( i$ ]
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);) Z7 A6 `: N4 ~& D% M: X
  574. ( m/ b5 r+ W; X" J! Z
  575. //        CRevAppDlg dlg;% j; l! b7 R5 F( N, X
  576. //        int nResponse = dlg.DoModal();  P, L: B* X& Y: ?4 r7 p
  577. //        if (nResponse == IDOK)9 p% |$ |" m' X2 y- ]5 m
  578. //        {
    # f0 w' R4 z6 }3 ]  K
  579. //                // TODO: Place code here to handle when the dialog is- d6 O4 L1 l% L9 y2 X$ p& x1 ?
  580. //                //  dismissed with OK
    ( N5 U0 b: a% F3 l( R+ W# r
  581. //        }
    8 n( a: Z3 ~* c9 p
  582. //        else if (nResponse == IDCANCEL)
    8 e5 R0 ^, m% S* _; m
  583. //        {
    . Y. T5 X, K. M; W7 a
  584. //                // TODO: Place code here to handle when the dialog is
    ' J' p$ O. k9 Y
  585. //                //  dismissed with Cancel
    ( I8 ^: }- J7 Z3 k$ J/ Y# ]2 P
  586. //        }1 N( l: l# s9 H5 m' P' G: @

  587. 9 b+ R2 ~5 [/ t' H+ J, f8 c
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . Z6 K; ~1 K5 L
  589.         //  application, rather than start the application's message pump.
    * ?1 b: t" g  N" m
  590.         return TRUE;
    0 t* Z9 B' f$ x5 |( M
  591. }
    ; D6 g( k; p, I, s3 G

  592. ' I: U7 |- `! d* Y, {. `
  593. char *CRevAppApp::strtok3(char *pSource,char *token)) I( W! U5 A$ V" Z: f
  594. {
    ; f6 `7 w9 W2 w  `  ~0 @
  595.   int i;
    & e+ [& ]. u$ a0 D4 v
  596.   char *szRet;! A6 f7 \! s9 f. ~5 v' U% k- C% P
  597. 1 N  j+ h# B! }! o( h
  598.   if(pSource) { itoken=0; sztoken=pSource; }7 e7 ~% d0 l+ {8 a, @: Y
  599.   if(sztoken). R* G0 {! [5 J2 N
  600.   {; \% f7 |8 b6 J
  601.     szRet=&sztoken[itoken];% J$ A8 P  \7 {3 d2 \0 r
  602.     while(sztoken[itoken])+ Y1 P9 ?1 y# U3 d  T0 t% O  {
  603.     {
    ! D3 Y6 S0 m/ \, n6 X
  604.       for(i=0;i<(int)strlen(token);i++)" E3 B. w- R* S6 {) H% T5 m% _
  605.       {8 L' i# y. t! `
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])+ m4 ?8 \' u0 @6 O
  607.         {
    ( [! S5 K7 `. ]
  608.           sztoken[itoken++]=0;# d2 M, }, s! d( }& E( S
  609.           sztoken[itoken++]=0;
    $ _4 {* R8 b% t; l+ z/ w/ _
  610.           return szRet;
    " i4 X! _* C, J7 Q! Q% f
  611.         }
    6 ~1 X6 \' H$ E& J' p
  612.       }
    ! ^! Y: h( [9 P1 M! S: L
  613.       itoken++;, w5 I$ V3 |; M! J, O. `- P/ ^1 k
  614.     }
    $ x# @: z- Z9 g' ^. L% E" X* L" S
  615.   }+ X. d/ h0 Y; n
  616.   return NULL;
    3 k% p% \3 e8 Y( X
  617. }
    $ C0 B9 y3 X# l
  618. 0 L' T" b0 V- Y' o) C
  619. void ProcessProc(long Total,long Current)7 p9 b2 {6 M5 s" a2 M- ~. Z
  620. {
    $ @3 L* i( l& ]" N
  621.         MSG msg;/ {) Y; ^/ E  ]+ E( h
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
      V# Z3 T5 {* o/ x
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));4 c8 e& ?# J. r$ O
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))' F/ `; d5 l7 t5 s
  625.         {% [* W1 E0 P/ d+ F+ f
  626.                 if(!GetMessage(&msg,NULL,0,0)): Q' G" }7 H; Q% P% W
  627.                 {
    . a3 d$ z. E/ ~2 z" K, ]
  628.                         return;
    5 b6 {- i5 v% j! p% |% b
  629.                 }
    . Y2 f) i( C7 m& Q# L
  630.                 TranslateMessage(&msg);7 S1 |1 b( c; T( h& f- T3 v
  631.                 DispatchMessage(&msg);
    $ h! s, P0 J* Z* c6 l3 j
  632.         }        ) f: D8 U6 c. e/ T" j! }+ l8 o) r3 y
  633. }' H) c+ q; ~, H: \3 P- m; @

  634. ; D  Y* D" Z( a# F) M, o5 T* j
  635. BOOL bFirstChar=TRUE;
    1 _& ?% t  x) h: x2 X4 l
  636. . c7 j" ?& m/ u' o
  637. BOOL CRevAppApp::OnIdle(LONG lCount)6 M8 S  a: D( ]+ b
  638. {5 p, j! ^- d0 O  g0 D
  639.         // TODO: Add your specialized code here and/or call the base class" ~6 T0 Q  J& l; X
  640.   switch(dwProgramState)' R$ L' ^3 D% t+ ^( w
  641.   {. Y- f& V3 x5 V8 r) W) A$ Y
  642.   case AP_NOTHING:
    8 q9 u2 M) \, p) p3 X0 I- J
  643.     switch(dwStartUpSteps)
    ) G9 D9 C6 i# \7 r1 M9 {
  644.     {& L3 P  E& b' E- l, N6 S, q
  645.     case 1:
    - _$ O" ?3 x, C1 y6 F
  646.       {: [8 P7 K, Z2 {: n& |2 u
  647.         int i;
    , K) K4 P$ G' G# y3 d8 e
  648.         CDC *pCDC=dlg->GetDC();
    4 Q9 d7 @4 J3 h
  649.         HDC hdcwnd=pCDC->m_hDC;7 S. T6 \, j, c
  650. //        Graphics graphics(hdcwnd);
    2 }6 N5 z+ \3 l: S: C
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    . j! X( v0 g# n
  652. //        INT iWidth=bitmap.GetWidth();
    # ]# R+ V1 C2 w
  653. //        INT iHeight=bitmap.GetHeight();8 }2 l" J/ F: w& U0 A
  654. //        Color color,colorTemp;
    ; p9 h$ ^3 t- Y  J5 ~
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    " Y+ X6 h& c& W$ p7 u
  656. //        {& C% m2 G/ ^0 z5 N! U
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++), q. u/ k4 {. I1 e/ Y. _8 a
  658. //          {1 @8 `* Q- Y. u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);& ]& ]4 F8 L4 j6 i
  660. //            colorTemp.SetValue(color.MakeARGB(8 p" [( p& Z# g$ |$ _; Z7 i
  661. //              (BYTE)(255*iColumn/iWidth),3 m% X, X, ^* I: o1 n: L' I4 k
  662. //              color.GetRed(),, z; `# A: Z* @, b- V9 |8 e
  663. //              color.GetGreen(),. b  C* K5 W+ @, v8 b# Y" A
  664. //              color.GetBlue()));; Z) c" K* K. ^# y% g
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    : }" d/ v: X" Q9 T' E5 \! ~
  666. //          }
    4 t1 A" q/ }! ]' r
  667. //        }
    2 X) R+ l1 h# v& V0 I* [
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);: S! y: T; D/ t# b4 R
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 `5 p1 [" R' n1 j, d0 A
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");, X2 @0 [) T2 ?, D3 ^7 l  |9 t3 G( \3 z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ l" j, L7 c6 m
  672.         for(i=0;i<240;i+=8)
    : @: ^+ t% L" J" g7 N, I7 ~
  673.         {
    . H/ ?- i% n1 k/ B0 Y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);+ _$ m) }) Z& p1 X* p, F
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; ?8 Q( E$ D& ]8 t$ }! T  G# b4 t
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 Z2 H7 T% h, t7 ~9 Y
  677.           Sleep(33);5 g: w0 ]0 g0 {3 S- }* @
  678.         }
    2 `& b; H4 E* A, r: s& N* W$ y
  679.         Sleep(1000);0 W& a$ s  M  G. B
  680.         for(i=240;i>0;i-=8)% K$ o# K* p! U: M* I: ]0 {
  681.         {) d8 T. W. A8 z# o" _7 i
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # X) M; u  n* D' T
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 j/ K' Q. z$ \/ Q" O' _4 o
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 G" I5 K0 h$ g2 N7 X
  685.           Sleep(33);
    " Q$ K0 E2 ]7 S0 s" I: L5 O' W& i+ B: I
  686.         }
    " L4 Q" A) `) O9 o/ @' `( |! i) _
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( G) K4 I8 a. x, B5 g2 G! Z* m
  688.         dlg->ReleaseDC(pCDC);6 V! V5 `5 l. t6 o7 z; }" q
  689.         DeleteDC(hdctar);/ i! n. z* T1 L6 ?
  690.         DeleteDC(hdcsrc);2 q- H) h/ u" J  V4 ]8 c% M& M" d
  691.         DeleteDC(hdcorg);
    ( |% A% e$ i: m4 ?" n+ E
  692.       }( P0 e* u' f9 x9 t" I# }7 `
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);: X, ]# S- m; d; S; U
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ( d7 _/ n8 x" O: H& l
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ' n" C  _' y  r3 \; i6 ?8 s# `
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    : M3 x3 U2 R- ?7 ]: s
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : w) j0 P7 j( x
  698.       if(!Dn.Connected())
    8 g: J! ^2 S7 m* m( }
  699.       {) d# ?  o" C( r2 e, x5 Y
  700.         dwTotalFiles=1;
    . @5 c# s& }# `  c7 B
  701.         dwDownLoaded=0;9 f& Y5 A( J* V3 T
  702.         bSilentStep=TRUE;  p2 W0 q. Y) ]5 w
  703.         bCompressed=FALSE;( L$ T7 E* H  J$ S6 q3 b: [+ I: K
  704.         strExtLocal.Empty();0 y5 h/ ?& r* N; I+ S
  705.         strFullName="readme.txt";2 d. M% ]2 ^; [# n; l
  706.         dwProgramState=AP_CONNECT;+ f9 a- G8 ]! ^  ^
  707.       }1 w; f0 p5 Q0 d* B+ U, F; L! i
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();# R  n1 y5 [( \  v! k6 F
  709.       dwStartUpSteps=2;$ F  c4 U* w% f& t4 R
  710.       break;: L' Y$ C6 {4 }* d; L6 ]  x8 s5 X
  711.     case 2:- \4 @6 @% X/ L$ ~3 H8 |
  712.       {
    % C  a4 q2 K6 z: S  i
  713.         int iEOF;0 x: F( N7 a  j$ _* X/ C4 ^
  714.         FILE *fp;: V" h7 n; P  S
  715.         char szString[512];) v) }# H7 |" o0 w. t) a! d9 ]
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    4 K9 g9 O/ Y+ _& I; r
  717.         if(fp); G9 z: F1 F0 \# M5 x
  718.         {
    + `* N6 g$ I7 ^) y. C' v( D& m+ F
  719.           do  h, P; O# a9 C0 C& `6 v# i7 ?. B) m
  720.           {
    $ z. b; s: Y' E% ^, K" G6 j
  721.             iEOF=fscanf(fp,"%s",szString);1 [' |# c: W4 o6 n0 v( F% I, b/ Y
  722.             if(strlen(szString))
    9 ^6 {" R6 z5 P/ i' J3 @6 Y# B
  723.             {% Q, L/ x7 N# e3 D8 D3 G! s( g0 P
  724.               if(bFirstChar)" `' C9 B8 A7 O3 F" U& K+ p6 d
  725.               {5 `2 }& n& Z) D( N: @$ v) Q  b
  726.                 bFirstChar=FALSE;# `, ]* E' L7 w2 C) ?$ Y  H
  727.                 bConnectIsBig5=FALSE;
    6 L8 [4 D+ ?$ q0 X, j$ `4 D8 p
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;4 k* ^' k9 Q4 n8 c5 `; }5 @
  729.               }
    2 ~8 S) B# U5 q3 j9 L8 J, b+ m5 \
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));! R* V! _( e7 M9 o3 A0 K
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));7 a% N: X; X! q
  732.               dlg->m_ListText.AddString(szString);/ H0 f# T3 k/ M/ T! @
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 {. ?; c2 B: t8 T9 Q
  734.               *szString=0;
    / w5 T6 ^9 Z# {6 |# r8 S; z* F
  735.             }5 D" j  v1 }9 Z) A) Y
  736.           } while(iEOF!=EOF);
    ! a8 P0 Z* }" j! R2 @$ a
  737.           fclose(fp);! i8 J4 }) w. S, F5 J* f' z$ [
  738.           unlink(".\\DownLoad\\readme.txt");
    : ?% a) z' C+ ]6 E% S1 N
  739.           dwStartUpSteps=3;
    + G0 s7 f9 d! w7 z* O8 s. L5 Q
  740.         }5 }& f0 v  j" Y0 Y, V
  741.       }
    . l' a5 {4 x: g  U
  742.       break;
    + d& ?" a# a- S) T0 M& a* [. D
  743.     case 3:
    8 D6 ?! C( J& Y" D
  744.       if(!Dn.Connected())4 G- T% o7 a$ s5 a; v, n/ @7 c* a
  745.       {$ b4 a7 z; |. H9 W  G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    + k" u, r$ D! \- v3 M7 L
  747.         dwTotalFiles=1;1 R5 a/ s. Y' d, f1 R9 h: C
  748.         dwDownLoaded=0;
    & V! B# }  v5 C3 |/ x
  749.         bSilentStep=TRUE;  b. w4 Q3 f% m9 @$ @0 T/ F  @) p/ s
  750.         bCompressed=FALSE;+ x7 M+ b2 Y8 M
  751.         strExtLocal.Empty();
    ' M. C) W# {' G3 `4 q
  752.         strFullName="checkversion.txt";
    ) \! [* Z6 N& e# g6 m9 m
  753.         dwProgramState=AP_CONNECT;; ]0 |& l/ |; m' R  a
  754.       }
    # _5 B( q# m& H4 W8 S6 d# ^0 v1 }
  755.       dwStartUpSteps=4;1 {! G3 V# l9 H) p; I  K( z9 G
  756.       break;3 s. q' L$ a% Y
  757.     case 4:
    # |7 y, x' r1 A) P9 W! ~5 O7 I  v
  758.       {, H. `7 d+ j: P2 v
  759.         FILE *fp;
    8 d7 S+ u" H% \1 ~( }: Y( q
  760.         char szString1[128];3 u1 Y. b4 I5 y1 \6 {* ]1 ?
  761.         char szString2[128];1 f0 X5 B" U2 E, Y, s# ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    1 Y2 X$ b8 _$ [
  763.         if(fp)( m% W. C" s$ _
  764.         {
    7 x( j* W  V. t, e8 P" N& O2 D
  765.           fscanf(fp,"%s",szString1);
    ! G' T: ~! A& v! c& \' i
  766.           fclose(fp);
    5 f) @4 _. l" k$ x, D1 R. I* j
  767.           fCheckVersion=atof(szString1);0 T# K( f/ H9 O5 u
  768.           fp=fopen(".\\checkversion.dat","r");
    ; J" ?8 H2 C# \$ G2 ^4 C) L) k' ?
  769.           if(fp)
    7 D9 S" h" ?! a: L6 w/ M
  770.           {
    2 |* @/ f5 Z5 j% g# `: B. K
  771.             fscanf(fp,"%s",szString2);4 f$ }; z' c: v+ N7 z' T; L
  772.             fclose(fp);0 _0 Z3 T8 ], P
  773.             if(atof(szString1)!=atof(szString2))
    & D8 N0 {9 R7 _! ?: \
  774.             {
    ' S  N' T8 }( b& L- \
  775.               if(!Dn.Connected())1 e  T! _3 _; J! I" t
  776.               {- i: n( q7 B5 o/ W
  777.                 bFirstUpdate=TRUE;; d: H- @7 v: U6 |- a* _
  778.                 dwTotalFiles=1;/ i. B' `6 Z% L  B7 K: p  Z+ z
  779.                 dwDownLoaded=0;' P4 E- b3 K- m2 A0 u( S- z. K8 x. M$ ]
  780.                 bSilentStep=FALSE;
    " m7 |9 v9 g+ \0 ^- o( L$ q
  781.                 bCompressed=TRUE;
    6 s3 r- {) f- G+ F/ R
  782.                 strExtLocal=".\\DownLoad\";9 A% Z# e; k0 s" m' o
  783.                 strFullName="update.txt";
      j  Q; ^* C5 {% o8 e3 t
  784.                 dwProgramState=AP_CONNECT;0 i& o" {- j- v! U+ s; X4 ~
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . F1 }7 b. X, ~  Y2 e
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 }! e% Z% g" z+ t: D
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; ]/ a5 M4 I2 }) R0 v
  788. " J) V: \- u: A$ Y- q5 i- l
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * Z8 k$ _5 \; g. J' j3 O. L$ m
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    : z3 F- _! T4 ]; u* B$ D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1), `' C9 y9 Y9 N1 F5 P
  792.                 {
    : M) d* _8 {# f. ^! _  E  P
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( v( A* @3 Q# ?9 D1 {" o3 u
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    7 ?# N. O6 ]1 `+ Z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");' P: T. a8 N/ e3 {  d
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 f% |" j, z5 O

  797. 8 }# B/ x8 M1 N
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 n6 q, `3 B6 H- X: ?  C
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & {7 M6 {4 M) I+ }1 q# U2 Z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 w8 S$ d- R- |/ y: w8 j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# {. |; L" n; I, g/ }' Z$ R1 \
  802.                 }/ f% D+ }& e- u; R  I& [$ q1 j& D
  803.                 dwStartUpSteps=5;- L7 F' a9 E) S; c) F! t
  804.               }3 J. C2 I% R) s4 M
  805.             }
    9 q# e. `9 D9 }
  806.             else& {0 g9 L2 {  a
  807.             {
    $ s% y5 s1 V9 A1 c, n5 p( h
  808.               unlink(".\\DownLoad\\checkversion.txt");3 p; ~: \6 Y2 D( Z: L6 S
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! K8 I2 k4 u  s3 L2 H' E. [9 ~. c
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    1 \6 s3 d! x' r6 m
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");3 a# M/ c1 t) {# b

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

. b5 s& @, y! ?. v3 V9 `0 E5 Q

評分

參與人數 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, 2025-5-22 20:58

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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