找回密碼
 立即注册

CSUpdate.exe源代码

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

& R2 v( g6 \" {$ d! v) n% e' r
  1. / RevApp.cpp : Defines the class behaviors for the application." o- D7 M/ V% j) N
  2. /// @) b2 T5 m0 Z

  3. 7 G, r2 T' k, M8 p* V
  4. #include "stdafx.h"
    / ~/ r% [: J( @3 Q- u: K

  5. 6 a( r$ l( f: p, e# g: b) [
  6. //#define UNICODE
    6 K) {+ l0 |0 D4 y6 X3 S9 J
  7. //#include <gdiplus.h>
    * h# c# D0 p* ?# i" j( _4 W3 _
  8. //using namespace Gdiplus;( Y+ W+ H9 i: F  j6 d# M

  9. 6 i1 F9 N1 \% [# S3 l) \1 K* N# n
  10. #include "RevApp.h", v! C! M+ F% G2 Z/ |3 F
  11. #include "RevAppDlg.h"
    ) m; W7 l2 T# X7 P: Y

  12. 2 Z3 _1 @- ^# p! O0 P' m
  13. #pragma warning(disable:4786)
    ) @  S( h% t7 \+ Q5 F) G: i
  14. #include <map>
    ! C+ h; L% L1 s5 L6 s. k: C
  15. #include <list>
    / c4 Z/ m( e( Q* Q+ i+ L
  16. #include <direct.h>5 t6 t9 @1 o% ^  ^4 F1 r0 {5 f
  17. , o1 j3 C5 e' r* q
  18. #ifdef _DEBUG4 H7 t2 u9 b3 a
  19. #define new DEBUG_NEW
    5 N# A3 ^* w! j, }. `, @2 K( }
  20. #undef THIS_FILE
    9 e( g0 n3 a+ L6 c" \+ ^! q
  21. static char THIS_FILE[] = __FILE__;+ S, a: K0 x( ?1 `+ M" ]7 \, e0 \
  22. #endif; {. u4 m* L' x! \3 N7 s
  23. #include "SkinResDef.h"
    4 Q' n" n: q+ @$ ^+ u: \* `
  24. #include "ChangeBG.h"
    ( g& O8 m& Z, o; z' _, b! s
  25. #include "AFXINET.H"
    3 G+ @# g% l' Z

  26. 5 @7 W1 W  c9 E# y& s" S& b9 \
  27. #define TRADITIONAL_CHINESE 05 D  R; O; Y, [! s& y
  28. #define SIMPLIFY_CHINESE 16 A. c% a0 k& p( J% o8 _' e$ B$ K
  29. #define ENGLISH 22 M& D! z! z) k' }
  30. int m_iLanguage = ENGLISH;
    9 Q" v5 h- G& T0 R9 A' h( ^
  31. /////////////////////////////////////////////////////////////////////////////
    $ z0 I, H3 E3 W  P+ q. X
  32. // CRevAppApp& v4 V. p9 G1 g# u& W1 G$ q  H
  33. & c9 v/ M( `% Q6 z* o/ E$ k' C. ?' X
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ( ?$ u. n$ g* u4 f
  35.         //{{AFX_MSG_MAP(CRevAppApp)5 j8 |9 }3 i( {1 ]
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    * z# u4 B! W- f& ^5 X
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!' E! j" _0 J3 u# f
  38.         //}}AFX_MSG
    $ I( b5 z5 d+ S2 I/ S
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    9 [8 n4 e# y  Z+ @
  40. END_MESSAGE_MAP()$ T2 @- D& s" a2 I: `, D: j" b" |2 f

  41. ; x" S( N) M5 ?3 B2 p7 o: m
  42. /////////////////////////////////////////////////////////////////////////////7 z' }  ]7 a; l0 Q
  43. // CRevAppApp construction
    ; W9 J1 ^1 A( C

  44. 4 X4 R! U+ c% |7 K% [
  45. CRevAppApp::CRevAppApp()
    + r  E' r; c; T/ u8 j2 R
  46. {
      \1 l' b* M4 }; G4 {4 M) P
  47.         // TODO: add construction code here,, n$ b9 H/ a# i5 ~
  48.         // Place all significant initialization in InitInstance5 ?" u- F6 Y0 s% B. h3 O' f
  49.   bDisplayIsBig5=FALSE;
    ; s5 t$ M9 u" f) Q# ?) z+ d
  50.   bRestartUpdater=FALSE;
    % l" x9 p# X" G) Z
  51.   bFinishUpdated=FALSE;
    9 t9 u3 ?6 v1 Z2 n4 g
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;: L. j% j  \: O- O1 t
  53.   InitChangeDataBig52GBKS();9 _  W, V8 \8 e. V8 p
  54.   InitChangeDataGBKS2Big5();
    & @- B8 K( k' H
  55.         //: M6 D- Q# k5 H5 a7 G
  56.         bClickRunExe = FALSE;/ M0 N% f: B7 T2 L# E
  57.         //
    . U3 j, @6 `% r' g5 A* G" Y
  58. }
    ' k' V% m% H5 _8 N! k
  59. 7 T% D) I, p% k+ w8 j
  60. CRevAppApp::~CRevAppApp()
    4 w1 _1 K: M6 Q% o+ Y. B
  61. {& b9 G: ~, n% d7 J
  62.         // TODO: add construction code here,  }' U0 Q$ |; u4 \# q+ b9 Z) }
  63.         // Place all significant initialization in InitInstance! q% c7 @$ Q' }
  64.   EndChangeData();
    . t& r; L' a0 y2 I  L$ D3 ]  y' R
  65. }) [, z8 g" d- J* y1 M1 i

  66. , R( Z( u4 H: t2 e
  67. /////////////////////////////////////////////////////////////////////////////8 r- M+ o- b# d9 P8 p& ]8 ]5 @
  68. // The one and only CRevAppApp object: L8 p, U: a7 D4 H, k2 X
  69. 4 z$ Z- P2 S" t& }6 x+ G/ s
  70. CRevAppApp theApp;. ^4 ^- E# j4 _5 F1 t( |

  71. ' [( d# Q. l' k. ?2 P0 e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)( b% b# e$ l6 W6 j; `
  73. {
    5 h5 j* L# [7 J. [6 p
  74.   int iEOF=0;: L; ]1 L! y2 U3 P3 O0 |
  75.   char szTempName[MAX_PATH];
    % `) {% K0 }$ ]: C; r# M, F
  76.   *szFileName=0;
    * o* Q8 I4 G6 w* G
  77.   iEOF=fscanf(fp,"%s",szTempName);
    3 n# u) E3 C' F1 i9 P
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    / p7 G& f  C8 L' P7 A
  79.   {
    7 y. u* K8 T) t3 {
  80.     strcpy(szFileName,&szTempName[1]);
    + j+ I. m+ h% e# W4 C
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    3 Q5 V# U- s* u$ k* w
  82.     {" h5 n# h+ Y. ~* U+ ~) \- }
  83.       iEOF=fscanf(fp,"%s",szTempName);- i6 @7 I% Y: |% s! o
  84.       strcat(szFileName," ");
    : R$ \, p" E& \$ O" J3 _( N
  85.       strcat(szFileName,szTempName);0 U% \! w- C$ E0 u: ]
  86.     }
    ) i& }. o! r6 ^" {
  87.     if(strlen(szFileName)>=1)
    5 [9 `8 C7 D: ~
  88.     {
    6 E1 D$ H  w- O$ z! i# H+ z
  89.       szFileName[strlen(szFileName)-1]=0;
    1 l9 i& X* ^# Q
  90.     }
    + \& U/ N: I  A) D; g9 v  r
  91.   }1 n4 n" i( i: J, T, }6 b/ n
  92.   return szFileName;
    3 s8 s4 H" m" B' G0 ]
  93. }
    4 V; U& U# J; V2 j$ L
  94. ( s. e2 ], m) h+ B% u4 o" v
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( o& x: p/ }( Z7 {6 X! `; N
  96. {
    / y6 B' x% S( v2 ~* g, n, S
  97.   FILE *fp;1 }. h  R$ L7 Q
  98.   char *key=NULL;  ^8 [) U1 Z4 R
  99.   char version[MAX_PATH];: U: y2 R2 E2 X
  100.   LPUPDATEFILE file,olds;
    / U. s4 J/ v( v. d- J
  101.   std::map<CString,LPUPDATEFILE>::iterator p;- F1 U( ]0 R. q( n* P

  102. % S6 T! \6 Q. t6 \
  103.   UpdateList.clear();
    6 m) s8 U5 u, _4 c. h
  104.   UpdateFile.clear();# ]: r3 k& G! K" X" D4 i
  105.   if(GetFileAttributes(filename)==-1) return false;; r$ p+ f6 D+ `0 K9 Z
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ! z- n- {, z( ^
  107.   fscanf(fp,"%s",version);4 H3 t# M$ Q1 N# h: p# W) ?1 l
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    : g. Y2 G' ^( O0 q1 ]" a
  109.   while(fscanf(fp,"%s",version)!=EOF)) D& f/ X2 V% M2 L* S$ A0 [$ Q
  110.   {0 B: h% v% P1 P7 H7 a/ ?- R0 d
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! L$ m: L6 V2 i9 ^+ N# M
  112.     fscanf(fp,"%s",file->path);
    ( \, _3 s# W' h- K9 J3 m% {, O
  113.     ReadFileNames(fp,file->file);
    0 r) |$ M# x4 A5 f% G
  114.     strcpy(file->full,".");
    " _' W9 J  n5 F; r0 H# c; `# g
  115.     strcat(file->full,file->path);
    ! \+ D8 W. g( `7 |' \+ G
  116.     strcat(file->full,file->file);
    ! S1 w9 C! T- h3 p: H4 r& w# \( F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    8 w' r+ N) t& _0 B" G; d* t
  118.     {
    8 h, h; ^1 A  w$ q! a
  119.       file->vers=(float)atof(version);
    ! l; L% Q$ D- `5 w/ f! b
  120.       UpdateList.push_back(file->full);/ O5 G/ E+ T& X& C5 E  S
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    + |# M/ r: ?' ?, _
  122.     }2 g* l% o5 D( N2 t5 D; p/ P& ^
  123.     else
    * b" `( q( h# g1 x* A' U
  124.     {; d$ i# z( \% V
  125.       olds=(*p).second;, N$ o* [( v6 R) \, t& U. f
  126.       if(olds->vers<(float)atof(version))
    + q9 r3 A" U9 _* r
  127.       {4 d% M% G$ ]% G
  128.         olds->vers=(float)atof(version);
    # t7 G: U3 n7 _8 y) [. E
  129.       }: J" B7 ]( @* g- @
  130.       free(file);& r: W4 A1 s3 F' Q1 j5 d
  131.     }0 w  n' P  v. {3 i
  132.   }
    , f1 x7 Q* J! ~+ U
  133.   fclose(fp);
    * l: D2 j; _, X3 c* S& W5 Q
  134.   return true;
    - A" h9 a& z( M! Z; }
  135. }
    6 S% O7 E1 v+ u1 V$ j: U
  136. % X* O! T6 R6 z( `; U
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    , r% z+ R9 k& y# I
  138. {! b# _6 d' @$ }- B' s- N
  139.   TCHAR  szFull[MAX_PATH];
    , Y. o5 N2 p& k5 G/ |% d3 |
  140.   TCHAR *token,*inter;0 d  [2 A1 C/ a; ^3 o# w
  141.   *szPath=0;
    6 o- ~9 P* f' Z/ v) N
  142.   strcpy(szFull,szFullPath);$ ?" d* y1 G5 S' o! v  i. w
  143.   token=strtok(szFull,"\\/");
    # a$ p# m! a3 m
  144.   inter=token;
    " s8 v! D" A- n. _" s: K# q: j
  145.   while(token=strtok(NULL,"\\/"))" `( a; C5 O# C+ W  Z
  146.   {
      K% H% I: g0 \% i
  147.     strcat(szPath,inter);6 ?0 S* T$ L* k2 A
  148.     strcat(szPath,"\");- \- t; m3 G. d. P4 e
  149.     inter=token;
    7 \' `2 x3 k  @, [1 [. G
  150.   }& x# e" A  }$ _- P: L7 u* H. a- s
  151.   return strlen(szPath);$ p& z; ~% k: ~& L
  152. }4 m; j# _$ i5 J( _: N- a0 H

  153. # P7 X; E8 p( L: }. K7 Q1 [
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)* T0 M2 D1 Z- V0 j, }
  155. {% Y# j, v/ a( T/ i+ I& A+ w- l+ ^
  156.   DWORD attrib=GetFileAttributes(Target);( [) Y/ Z4 j) m3 t2 V
  157.   if(attrib!=-1)4 L! w0 Z: ^$ G' `
  158.   {& k# c/ C/ I7 m, h% R) j, B3 D
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))# j3 o. u1 j8 T8 b& u
  160.     {
    9 B1 `# V/ b0 h" B6 A
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);. I  r  f2 o; a5 y( P4 [2 q* j" K
  162.       SetFileAttributes(Target,attrib);
    8 {) |# `3 L, S7 J4 _' f
  163.     }
    : T) {7 ~/ Z2 X9 \
  164.   }
    ) E4 G4 r' i6 q$ l* ~
  165.   CopyFile(Source,Target,Erase);+ t  o( Q& Y; M% p6 e
  166. }
    : y& V' h% d& @4 h. m
  167. 4 M1 i4 l0 `2 O3 {0 Y0 k( @$ t- i: F
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    % S+ n9 @9 a! B  R
  169. {/ B* m1 w4 Q; B- U! U4 N& M
  170.      FILE *fp;' D$ h# M) K1 I2 [1 T: B# L
  171.      char  szBuffer[8192];
    8 h7 m8 k( K& b1 u: T0 z
  172.   va_list  argptr;/ h3 Q: }4 K/ N3 \
  173. * O8 E/ _; C3 f; N
  174.         va_start(argptr,message);9 t9 Z) c2 i3 @5 _7 g' S  u
  175.         vsprintf(szBuffer,message,argptr);$ M& y$ l) r3 _$ g
  176.         va_end(argptr);
    2 W" I6 l& W- l" Y- `
  177.   fp=fopen(FileName,"a");& A: K1 d) N% R" g% }
  178.   if(fp); l4 Z: F0 a) m& C! P+ Y  z  t
  179.   {8 `5 X. E. a# S2 `2 y
  180.     fprintf(fp,szBuffer);( J1 H7 J! b5 T& k% ]4 v" X
  181.     fclose(fp);0 g# V( F- E6 v% c
  182.           _flushall();
    7 i8 L/ F8 |0 {2 ?2 h; a
  183.   }* J9 W/ U0 g" h, i7 x9 u9 \
  184. }
    - D& P: Z* l! D; l3 g* M: n. e

  185. + g7 G- z! B, L" i+ ~: Y9 n
  186. BOOL CRevAppApp::Fclearf(char *FileName). k% v0 Z; c$ f
  187. {
    . T( t4 g+ E6 _/ G* R, s
  188.      FILE *fp;# n4 _$ x7 `; U
  189.     DWORD  attrib;! n- a* y2 X7 [$ l4 ~% }3 t
  190.   attrib=GetFileAttributes(FileName);
    8 ~4 g4 G: `. p, @( M. h, n
  191.   if(attrib!=-1)* C. P% Q& K5 {+ h2 T
  192.   {
    / j; r9 j6 N7 M
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 l; ^& l* O# G! a" d
  194.     if(!SetFileAttributes(FileName,attrib)), h) I0 t2 F: k  u" `
  195.     {
    8 [" @5 b0 \- r6 w. Q; B5 G
  196.       return FALSE;
    / J9 r7 u4 ?- ]% K  ?8 W9 ]* c" R
  197.     }$ @7 V, Z; r. ^( B$ V7 J# i
  198.   }
    / m; l4 x* d5 ^- I% ]0 D
  199.   fp=fopen(FileName,"wb");) n# f! D* y6 \  ]" g
  200.   if(fp)! l6 J2 O9 p! v2 t" |0 O
  201.   {
    : _; o# U# K( {; {' g7 F' G
  202.     fclose(fp);
    + @8 K; J/ g% o. e  Z2 v
  203.   }
    9 O; Q# }5 e3 S& C, G% f, c
  204.   return TRUE;
    4 e- x: Z6 B$ \1 w
  205. }( ^- |) m/ K+ s) l9 t/ p

  206. & x/ F7 f6 O& M6 |0 R
  207. BOOL CRevAppApp::UpdateLocalVersion(void)/ `+ S$ O* e8 N
  208. {
    % f* U! I. r7 v" M0 H
  209.   char filename[MAX_PATH];
    0 W  g0 _9 J, T
  210.   LPUPDATEFILE file,olds;
    $ b5 u' _9 ?) s  g, A7 x
  211.   std::map<int,CString>::iterator i;
    3 o! q5 J6 }" x3 a: O4 m1 N
  212.   std::map<CString,LPUPDATEFILE>::iterator p;4 W+ A5 y! S) g, a1 |. t* ?0 y
  213.   std::list<CString>::iterator l;
    8 ?6 l* u# K* T0 Z
  214. + I1 T3 W/ k+ L1 d) t  q
  215.   if(bFirstUpdate)# s+ i2 G# F; q4 d' m3 Z% s
  216.   {) h- y% p2 l: m% l" w! g/ N
  217.     dwCurrFile=0;! h- v7 Y) W, B' B$ ^2 R
  218.     bFirstUpdate=FALSE;
    ( r: [$ J+ c% _1 V: J& q" |
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())( w% Z5 F- I5 w1 V5 |
  220.     {
    # a* S  O8 g$ ^5 X- j
  221.       dwTotalFiles=UpdateLocal.size();# }8 [% e! F, P
  222.       dwDownLoaded=0;0 ~4 f& P- R- d, }% O0 y
  223.       bSilentStep=FALSE;
    , k3 y' e+ c; v  \% A2 `! D
  224.       bCompressed=TRUE;/ w" ?% e! H+ ~" }, l1 Z$ v
  225.       strExtLocal.Empty();
    * K9 v0 ]5 @& E; d3 {- N" o& ?+ |3 {
  226.       strFullName=(*i).second;
    . X. @5 R+ ~9 Q) z! D* }
  227.       dwProgramState=AP_CONNECT;7 M: M5 l/ G6 v/ u) L
  228.       return TRUE;0 Z* L: H& X6 q2 g1 {
  229.     }: F$ p( i5 ?1 o: f6 @8 N
  230.   }
    1 k% `  S' ~  [; I6 k
  231.   else if(bRestartUpdater==FALSE)& f$ y( v/ Z6 V$ g
  232.   {  t# k- Q8 Q3 L" i
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    $ v$ E7 |  ]' g/ z
  234.     {8 R; N  \5 \* _. r$ c+ H- r
  235.       file=(*p).second;6 b4 m3 _1 ~9 J" M: T
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())+ [$ R5 c  l8 I# z4 V, ]9 N) c0 ^
  237.       {
    7 d0 i, s% e) r. [# r7 H
  238.         olds=(*p).second;
    0 y; @- |' l+ v( a' i# f
  239.         olds->vers=file->vers;, E2 @$ ]6 W) N: L
  240.       }
    7 m: D4 \2 T% ]5 B  B( s1 `- o( s
  241.       else
    7 ~. l' v! g- T/ L- X: ]8 N
  242.       {9 I9 t$ O: j3 [* T' `6 ^
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - Y4 |% {6 B! g: x$ ?( E+ n6 o5 y" d& {
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ; Y6 E2 D$ `; h
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 V! h; r" O6 n9 \  T6 E
  246.       }# N4 o: g8 F! `/ g0 g: B4 D! c
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    2 ^( N- F8 U% |* s  w) j/ W! t: }
  248.       sprintf(filename,"(%s)",file->file);
    / f' V9 Y0 A: b
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 ]& ^( e( i  Z' L
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }8 ^3 G  X" j1 F0 `! M5 m
  251.     }
    5 V1 C/ ~2 O0 c# O# X& l$ `
  252.     dwCurrFile++;
    % d8 s! x0 a9 H+ k
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; {" ^1 r  a" r$ [, |/ z0 R
  254.     {
    & r1 {) ]; K4 M( p! {1 {+ D% F2 I
  255.       bSilentStep=FALSE;& D; c; X6 X5 Q8 H6 @
  256.       bCompressed=TRUE;
    # r2 k; r1 t9 }, G' ^2 Z
  257.       strExtLocal.Empty();; p3 m/ {# X' B' o3 S% \: T; b" Q
  258.       strFullName=(*i).second;9 J- a3 l6 B4 V5 \! r, ?+ I* _# ?
  259.       dwProgramState=AP_CONNECT;
    3 X. y$ S& Q% Q4 Z. u# }7 e
  260.       return TRUE;4 ]9 u5 j. q% w0 T: W2 U
  261.     }4 A* z3 c# a7 v
  262.     if(!bRestartUpdater)
    8 O' u1 x" X' }& i. Z
  263.     {* r" P. P' D& w2 k( ]) w
  264.       int iCurrSize,iFileSize;
    ! S5 N6 j* v& K( y9 `/ w
  265.       iCurrSize=0;7 I6 U! k9 K& {* I! T, O
  266.       iFileSize=UpdateList2.size();
    . R9 r6 l! h1 s% k: F4 J
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");& x" ?) c$ s6 N' B
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    % G- V/ P4 q2 c/ [/ V0 J
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    % q3 D! t& y# q7 D/ i6 M/ m2 o: E
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; l$ }! z+ C6 _0 Z5 N
  271.       Fclearf(".\\update.dat");
    6 X3 M3 L2 E6 I2 n/ Q; f2 _4 S
  272.       Fprintf(".\\update.dat","Bloodyf\n");9 p7 I8 q  b' v; p6 c/ `) [# [; j/ q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)1 ]; O2 k: M  [$ {& ?. s9 y
  274.       {: w4 `5 i. I9 q7 R/ X6 e# m# J
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& ?7 m/ i# n2 W% \
  276.         {
    7 q3 F" s4 m0 t( {' K" u( X; X9 [7 H
  277.           file=(*p).second;* ?% ^6 [  v/ F: N+ Y
  278.           sprintf(filename,"(%s)",file->file);
    , T' T( P/ v+ I* S6 n
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 S3 d- i) Y  X9 k  |
  280.           iCurrSize++;- i  @: Z2 G9 |3 ~3 y1 \
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
      \1 Y) H2 z8 `- |4 b/ z' D. m
  282.         }
    ; F5 w: I1 @) q: ~
  283.       }0 I) R7 B) B& l% f" o; M1 R. Q
  284.       unlink(".\\update.txt");
    7 g9 C$ f5 P4 ?; c( I
  285.       unlink(".\\update.tmp");7 t" B& e1 J7 a9 [
  286.       Fclearf(".\\checkversion.dat");
    ' R. G0 ~8 V: B! C
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);3 x  p! y, L& i6 e
  288.       if(UpdateLocal.size())  {2 ~" J% e, x4 @1 _/ c3 ]
  289.       {
      C7 O* G  S" b. o! e4 G/ D
  290.         UpdateLocal.clear();
    ) I' ]( V8 [! Q3 }' c  x% ?
  291.       }
    / z8 b. J7 [3 [
  292.       if(UpdateFile3.size())
    9 s! P- s3 A# k; a) Z- k  Q& u
  293.       {+ [# W! `) ]) Y$ Z& J: b
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ t5 x8 }" u) Q0 J- I5 b
  295.         {
    5 i" t% e1 h7 h% r
  296.           file=(*p).second;! Y  ^; k3 M& h; s) W
  297.           free(file);1 R. y# l3 B3 b% h% [, D
  298.         }% c1 Y- F) G; q' w5 J
  299.         UpdateFile3.clear();, u2 R3 A: f" D' C$ i7 W! b
  300.         UpdateList3.clear();
    3 @5 U9 _& r) y' H% t
  301.       }
    . g% P5 r* Y# Q- O) a
  302.       if(UpdateFile2.size())
    - X, o  N( N2 d; A1 ^
  303.       {
    $ T! \8 i7 S5 C: P/ T% N$ S; K  u- k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! |+ Y& V- H* M% M3 e
  305.         {) H8 B5 [. X' P! t% w
  306.           file=(*p).second;
    + V5 }; `+ e9 _4 H8 k
  307.           free(file);
    $ c: i3 U3 x1 q' H9 P  A
  308.         }9 E1 J8 D' U0 j: y5 _! D( I3 `# q3 e
  309.         UpdateFile2.clear();
    0 y: ~2 h  t  }
  310.         UpdateList2.clear();
    ) J& p2 z: g0 v# @( B  J
  311.       }
    6 _5 s* k0 W$ O; t
  312.       if(UpdateFile1.size())
    % x6 m. w' ~5 I  n. f
  313.       {
    3 H9 r: J4 |! G9 K( h: `
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    5 N8 P4 g. p1 O5 x/ U# J* p
  315.         {( F( o3 m1 z* C9 `/ M* Y7 }
  316.           file=(*p).second;
    , G8 l  G" c5 G: j% c  Z
  317.           free(file);
    " j5 r- A4 ~. J
  318.         }
    ' c5 i7 I" d& S% Y) J
  319.         UpdateFile1.clear();
    0 t6 V7 [( M7 {& T4 Y- W/ N
  320.         UpdateList1.clear();
    6 ?1 i- Z. Q+ G9 A9 G
  321.       }' }( t3 _$ }& [- f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));7 i3 |' n" k0 G) A% I; T4 T: ?
  323.     }( j8 G2 S: f- `/ g) n" G0 W
  324.   }
    & M0 M) b5 X& q8 w) T
  325.   return FALSE;
    , u" z( C$ G: x1 r& G- X2 y
  326. }
    % F+ K  Z; _5 W' }- E# ?. i

  327. 7 k0 j" h4 d* U* @# e; B4 X4 ^
  328. void CRevAppApp::ClearAll(void)
    4 O. N7 M, \! I( I8 W4 p( J+ n) l
  329. {
    + K- Y  F. Z1 A% J) l# d6 b
  330.   LPUPDATEFILE file;
    9 O: L2 R; \) c
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 m9 j! B* N- O9 P! F0 U
  332. ; w7 e% Q) `8 c: J, e( p! M+ \
  333.   if(UpdateLocal.size())0 E: K0 B, v! ^, D
  334.   {
    2 z+ M& j5 B- {1 z3 k5 l: A
  335.     UpdateLocal.clear();) E" q% {9 ~( }$ Q% }
  336.   }
    8 p6 M. F" c9 A3 r
  337.   if(UpdateFile3.size())
    ! P" `0 a9 o1 @5 S! g$ w* l4 @
  338.   {" {# c3 U8 k- c) [
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)& n4 X, P/ ~3 l; w: k. i
  340.     {
      i" ~% v* b0 C% G
  341.       file=(*p).second;
    3 N# w9 D2 M7 C3 w2 S4 l- A2 B- @
  342.       free(file);/ v, G- E, e  n2 J. I
  343.     }
      Q) w: e/ j+ M  z
  344.     UpdateFile3.clear();
    ) h8 u. z, J# F# j9 w. {. f
  345.     UpdateList3.clear();
    5 f7 h  F& p$ L  H$ M# }4 j+ V
  346.   }3 }7 q. t0 q4 S' T
  347.   if(UpdateFile2.size())
    3 h0 `2 L6 T/ {. G5 M2 R1 D
  348.   {0 r' p8 ^* {; h) C" i( M& r/ }+ z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ h( f2 {' a% T# U
  350.     {
    ' F) L# ~5 T9 E6 q8 G7 C, L+ M
  351.       file=(*p).second;/ l2 Y4 S: A; K5 ^
  352.       free(file);
    ) u! o: H( R) b: L
  353.     }
    + b5 h) [0 z1 H& @1 x( B9 }
  354.     UpdateFile2.clear();$ }. ]7 A; j: t  w9 M
  355.     UpdateList2.clear();2 f  @% U8 c1 b1 t8 M
  356.   }
    % y; _4 E) _' p3 L+ W6 G# w8 [
  357.   if(UpdateFile1.size())! W! O5 a+ |; ]0 U  L& [9 \
  358.   {
    7 w4 f* i9 {! F% B( z+ W
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 h) i# ~. `( r* L4 v3 T2 j
  360.     {
    7 [6 K* c0 H  ^; @9 X9 ^
  361.       file=(*p).second;9 _9 Q. _4 C0 ?5 d8 m
  362.       free(file);' o; C/ h3 M9 N
  363.     }% B% P- f0 T) w- j
  364.     UpdateFile1.clear();- ]* p- Q% ]' u) j' t0 V7 z
  365.     UpdateList1.clear();
    / U3 Y' R, U9 _7 Y/ M  }
  366.   }! H& K* S" c7 g' E6 S9 a! t: F5 a8 I
  367. }  
    2 C) }0 {8 y. b9 L2 t
  368.   
    ) h" A7 ?2 I! |2 H0 n  I
  369. BOOL CRevAppApp::CheckLocalVersion(void)  B/ z+ F# D3 l' X- m1 \% D
  370. {: I* P8 N0 T5 }+ W
  371.   int c;
    + }% k) s8 [; w% y" ?
  372.   LPUPDATEFILE file1,file2;2 R+ w. z! x# C4 e0 w
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 ~; B! Y# k1 ?# I
  374.   std::list<CString>::iterator l;  H; l9 R  e4 O5 w/ b. V: w

  375. % w3 l# q. l+ h* N  {7 l  H
  376.   UpdateLocal.clear();, E' i* l. P, S5 z9 ~/ O
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);4 @: w) j6 `4 m1 x
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);9 B7 i! k4 B6 Q, N1 ^& x
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);% @+ o2 k* y: h* w" S+ O
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);4 y, x& s( @# q% E; A  S% Z7 p
  381.   if(UpdateFile3.size())
    ) R( p% p1 E0 M- r( C1 w" h
  382.   {* R& Z6 i, ~9 z9 C) z$ C% L9 {/ s
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)" X! d/ i. Y( D9 b. i
  384.     {
    , D5 ?4 F) C7 P. T. _  e
  385.       file2=(LPUPDATEFILE)(*i).second;# @# z- z" `* B2 _' Q  A
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 H+ K  Q" |) r+ ?5 Y
  387.       {
    . \7 d/ P" |7 c& w0 K+ J) ?
  388.         file1=(LPUPDATEFILE)(*p).second;
    ! ?. d9 h6 f5 A; r, Y+ F
  389.         file1->vers=file2->vers;
    8 i8 q( M# c7 j2 n7 e$ m" L9 B+ Y
  390.       }
    ( T5 X5 Y) f( f! `  i
  391.       else; W+ n. [' G6 Z
  392.       {3 o% Q* m8 t5 y: W% `
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - ^  C& g: l' H: c
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));2 D9 Z2 u! R; W- w- g
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ c4 P2 _, w. G% q% O8 w
  396.       }9 ?) }4 x1 K: _
  397.     }
    2 V( m* z1 x% s2 Q
  398.   }
    ( x8 \# W( c1 [9 v* N/ o  w1 Y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 O# @8 W0 g$ t
  400.   {+ T) J- w; c/ A& C8 y
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    3 ~+ _4 M, k) ?2 u
  402.     {
    3 ]$ Q7 E$ }; J- j5 X/ b
  403.       file2=(LPUPDATEFILE)(*i).second;8 Z+ m2 Y' Z" q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 o9 L, |; L8 l! Y9 S# Z1 J
  405.       {
    " p5 x+ w5 \! m1 O4 a
  406.         file1=(LPUPDATEFILE)(*p).second;
    ) \5 s/ |4 l( E
  407.         if(file1->vers!=file2->vers)
    3 L! |/ l* t4 G. }8 V
  408.         {
    3 ^  a. u$ K. X% L$ j+ r* a6 o; l
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# A3 v/ c9 P) a
  410.           c++;
    4 ]3 h' [) {3 \' j" U/ W
  411.         }
    . C4 z' l; z9 G8 A
  412.       }
    ( ~# H; p6 H) f. p! e/ l: n9 n
  413.       else
    $ y8 Y( G- M$ Z; u  X9 v
  414.       {2 s" Q# b- q4 T6 f9 `- x
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 `$ X+ w" h2 J6 L2 @* Q6 ~6 l
  416.         c++;
    2 x" l4 U, @6 T- J, x
  417.       }
      s* ~6 W# F5 @+ K" A1 z
  418.     }
    8 u: o* H, }! G3 s
  419.   }
    0 n3 i. v( K* ~0 _/ |, u  s
  420.   unlink(".\\DownLoad\\update.txt");) Q+ l: j6 D  X0 r
  421.   if(UpdateLocal.size()) return TRUE;
      k+ f' ]/ A, V/ N, C$ m3 E: U6 T
  422.   else                   return FALSE;
    7 ]! |: x/ o) r* A; q
  423. }+ K* I3 n/ |! p9 u5 K

  424.   [7 ?% B$ t1 \: E
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"4 o& R4 o, k* u! p
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"' O7 ?9 E7 ^' t) B7 [
  427. 8 }$ r- t1 X: @8 \
  428. : Z+ ^1 I7 s: N2 p

  429. 1 |2 u9 V9 G& S3 a8 q7 w8 n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    % f6 m# g" [9 ~
  431. {6 f% F1 j: d; H
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    3 N. N  Z( d6 k$ m" g
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 |  B1 f$ b" ^0 F
  434.   {8 B: Q$ B0 ?" m( n8 [
  435.     char szLanguage[50];
    / n3 |: i3 u; o1 o
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 l, A% I7 e8 E& e
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 P) {8 P: T9 `/ a6 J6 d
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# X' F/ ]" C7 V' r/ g. N) H6 n  k
  439.     else                                   m_iLanguage=ENGLISH;+ G  S7 R9 v  x& d" I7 `& h6 ?1 ?
  440.     char szRegister[100];- s3 f2 o4 M0 V' p9 h
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & k9 l+ T% g9 a7 }  L9 @
  442.     strRegsName=szRegister;) Z- |: ]) B* f* h( X' x
  443.     char szPatchURL[100];8 z4 x3 i: i+ E5 I4 U
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 }) E: W6 |" _' L) H! p
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: H$ `) K( j; \  H3 r
  446.   }$ ~( m! h3 a  a+ q7 Q2 e
  447.   else
    ! e' V6 ?$ U. N
  448.   {
    8 B$ O* _1 x3 Y- f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);! C4 p5 Q3 c$ N4 N& y! {( c: x! d
  450.     strRegsName=DEFAULT_REG_URL;
    8 {2 p) {2 Q7 Y
  451.   }4 j# }0 E+ O/ x, g( f! i. P
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    9 |% \# Z) N8 Z! l4 w
  453.   {8 J% M: y9 q8 p8 q6 W
  454.     char szIP[50];1 n$ F1 `: m# r7 u! d
  455.     char szDIR[300];7 u. d# Y6 l9 k2 G  C6 E( I/ P9 L
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))+ q( T& R, p' U5 ?; `. R$ @
  457.     {) C' I; A/ K0 w3 T3 t& Y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");, U- j5 @$ V8 Z. D+ Y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");) r' f% I9 C; R6 f; v% u7 U0 N0 W
  460.       strHostName=szIP;
    + R2 n* u5 {; K- E, Z5 h% R2 H
  461.       strHostPath.Format("/%s",szDIR);
    ( S& F8 A) t; z3 I
  462.     }! _6 }" C. E% b( _5 r/ s1 k6 o$ s
  463.     else
    * ]# m+ T; ^1 e0 q5 o1 D
  464.     {# Q) m$ O; k6 ~6 R/ h6 Q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), R+ ~8 C' ^' S
  466.       {
    : c  l9 r2 ]& M& N8 K
  467.         char szLanguage[50];
    ' X1 V1 w0 f7 T; u' S: T" m
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; a9 \; F  |+ w; _
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 W6 R3 A! J1 ?! T, P  P. `
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * k7 [  K. T- E# H
  471.         else                                   m_iLanguage=ENGLISH;
    7 x6 B( A: S8 H1 }0 p3 x) o$ |
  472.         char szRegister[100];
    $ Y& _' {; H4 E8 |
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 I7 n$ G  z9 ~5 x
  474.         strRegsName=szRegister;  E4 {! e1 }3 P1 ^( S0 F+ H
  475.         char szPatchURL[100];
    / g! G7 t: o) a1 {5 t
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ ^( g1 D1 ~" E1 E0 ^, v5 T* E
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    * p# B, P/ W1 n
  478.       }
    ! \- h1 N; s! c7 B: H+ K; @
  479.       else
    ; g: K: _: k$ }8 X
  480.       {
    , b4 c7 }- g% U4 D3 ?- `' M, r
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 t% l0 t& N1 t: Z3 _* ?, a' L
  482.         strRegsName=DEFAULT_REG_URL;
    " Y) }- {; {1 y+ [' a7 s
  483.       }$ U- J3 o) z5 v
  484.     }
    0 s4 C3 H" w5 R. I8 O! \. X
  485.   }
    * M$ a: [! U3 u& V& b2 V5 C2 }! }
  486.   return true;5 q3 e, p* z6 ?! \# ^" V& H
  487. }( W+ A  j1 b# a( ?  l
  488. 3 u: o$ S' ?3 [& ^. O: n
  489. #include ".\ZLib\unzip.h"7 W8 z' P2 F% r' J& Y
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    0 q9 C+ {# D' H4 |
  491. /////////////////////////////////////////////////////////////////////////////3 _, a! s5 g2 z) l
  492. // CRevAppApp initialization# ]* O7 w2 J. t
  493. ! O5 ]$ g( }6 w- g- X( F
  494. BOOL CRevAppApp::InitInstance()
    & x/ o0 T+ b1 l" u1 e
  495. {# x* ?9 E0 ]) W7 H' j1 A) Y: `/ M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];/ ?( v) G7 q4 o6 u: ], q

  497. ) e. t5 p% u8 M3 ^: T+ ~
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ; E0 n) C# H0 g4 ]/ J- B
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))& P$ U- _* _* W5 j
  500.   {
    5 Y# A" s; h4 v6 v  p& j
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    % W7 p4 n4 C" u; r, j8 w! {
  502.     GetPathFromFullPath(szPathTarget,szPathSource);# Y1 r& N/ p9 ~% H% F
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))): }; f" [  ~% y. t
  504.     {
    $ i! x9 g: e9 p! u' s) l
  505.       strcpy(szPath,szPathTarget);
    " b/ [3 W; ~' W& f* K2 e. u; i
  506.       SetCurrentDirectory(szPath);
      ]+ U& b7 g1 ?$ z
  507.     }) t7 a$ ~, E- L7 S+ l2 h
  508.   }
    2 o9 }, ~8 F% M0 X& q
  509. #ifdef _DEBUG2 O( V+ T3 O; C) u, T* U
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)): L5 J+ k% e2 k. B" W. s
  511. #else
    $ n1 }' O- ~. r; U& }
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 d- U1 g. p8 `
  513. #endif
      B6 [! M) r# w% x0 a" R2 r7 a
  514.   {* m1 e1 K, u+ E! w: O0 `
  515.     char tempFileName[MAX_PATH];
    , o# q% I/ e- X
  516.     strcpy(tempFileName,szPathSource);
    : |+ |5 Q$ T4 }  W5 a; ?6 J
  517.     tempFileName[strlen(szPathSource)-12]=0;. Z. Y6 C% o9 [4 r1 |4 Q. T
  518.     strcat(tempFileName,"\\$CSUpdate.exe");6 R4 k/ {! ?0 [, c5 z7 k0 q" K
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    % L. x: V' i# ^9 T4 W2 K3 @
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ A6 `, `  h2 w- D2 ~# ^
  521.     return TRUE;4 u, _) N2 ?! @( n. H$ B5 Z  d
  522.   }+ j" [! B7 [! h# r
  523.   // Nuke 0118: Delete run.exe
    5 U# m7 h& t: w0 H9 I) B
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ; H# @  d. \# c, Z+ n  G3 l
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) z6 Y) m4 A$ ]$ Z3 Y; f, f
  526.   if(!ReadCfgFile("Config.ini"))
    7 A1 U1 O9 Q( u* X7 X6 A
  527.   {: O0 F: _& l! U  g4 ]) c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);6 s0 J0 l2 a/ X! q* s
  529.     return TRUE;0 g; |6 T5 u6 L/ H4 |+ H
  530.   }
    ( ^8 }4 k( N1 X2 M8 f
  531.   HANDLE mutex;
      M( j' I; ?" h- ?7 C& J
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    $ D2 K4 w5 V; a8 d  l8 x
  533.   {- t' Y- n. m$ k9 ], R! [* Q3 M
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)3 E/ x9 q$ s( |9 _
  535.     {
      t6 U& L: a$ |2 s+ W6 Z
  536.       CloseHandle(mutex);
    7 g! l5 m" O. I9 H
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    2 s6 ~9 [: I2 M# q
  538.       return TRUE;5 ]2 I: P4 ^' c3 j2 |; u6 c" h7 m0 S& l
  539.     }( }% }/ F+ L. A% V
  540.   }  " M; S3 p* M& Z& h. ]8 u4 X' c* X
  541.   CloseHandle(mutex);
    / E5 N- a$ ]  N0 @/ ?9 `

  542. # Q$ q8 D' O6 T% N
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);0 L0 [$ h/ N  |8 E" f# W
  544. ) v- {% K& F2 K  `7 V2 P6 N
  545.         AfxEnableControlContainer();" J% e- J3 {6 M- B6 l0 c; `2 G

  546. 2 ~3 b. f/ C( G
  547.   bCanUpdate=FALSE;$ ^( n2 W8 C3 Z$ w0 ~8 e! K
  548.   dwStartUpSteps=1;. X! C1 @: H0 m% h- S5 i
  549.   dwProgramState=AP_NOTHING;
    2 w* V/ r1 z; x* A! s

  550. ) Y9 `& a% A4 U
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);* V( K5 G' v" d0 H8 E
  552. 2 l3 c; U" K# r. Z" c
  553.         // Standard initialization9 r6 J- d+ q1 m$ p/ K' j
  554.         // If you are not using these features and wish to reduce the size  g2 q  z( H+ |, G
  555.         //  of your final executable, you should remove from the following
    6 Y0 Q1 K* S/ e; p
  556.         //  the specific initialization routines you do not need.
    5 I2 V% K- y7 k  n  w5 P8 T

  557. & w) U$ s% `3 \5 [+ w( w
  558. #ifdef _AFXDLL0 j( X! ^# a( ?* [
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL( o: R2 B. f/ _7 o
  560. #else5 z  a" _  g( @, k# W1 f# V% q7 _
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    % G% T% `& y* v+ L' ]- H
  562. #endif
    ! B6 i5 e5 P. E% ~0 Z0 i$ H
  563. , Z$ X2 F* e/ @9 z2 F. y
  564.   dlg=new CRevAppDlg;8 v. E0 v' S. ]5 C& C
  565.   dlg->Create(IDD_REVAPP_DIALOG);, e3 h7 y# E3 l$ K. B; B9 `
  566.   dlg->ShowWindow(SW_SHOWNORMAL);; H( Z! u* F# R# v
  567.   m_pMainWnd=dlg;
    2 Y8 [& a9 `- X% v: D
  568. # o0 _8 p3 h% z, z) b: K5 N
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);3 P  ~2 s- P/ [& j/ ~! V: t* |+ m
  570. & y  W! k3 ^+ y; v1 }# I( f1 q
  571. //  GdiplusStartupInput gdiplusStartupInput;9 n: S& {/ r; t. E( P
  572. //  ULONG_PTR gdiplusToken;7 \, }& @* H8 m7 `
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ; w! ^% W$ F9 q  e# k; s) \' D) G

  574. " l. i/ c, N6 c
  575. //        CRevAppDlg dlg;
    + ]  `1 ~' x# X$ X( Y( t
  576. //        int nResponse = dlg.DoModal();
    , [4 v; i1 w9 n, j
  577. //        if (nResponse == IDOK). c! U( q* Z/ q
  578. //        {% M  a) Z& J+ E1 {  F
  579. //                // TODO: Place code here to handle when the dialog is) R5 D% A" N0 p  e
  580. //                //  dismissed with OK/ u4 b0 e9 Z$ x
  581. //        }( x  s1 o# @* T4 g) d) [
  582. //        else if (nResponse == IDCANCEL)
    7 n. \; o8 t' [! |, S
  583. //        {* |4 [/ J& M, m6 O% Y
  584. //                // TODO: Place code here to handle when the dialog is
    # W5 \. J- u+ r: R' D6 o7 y0 Z
  585. //                //  dismissed with Cancel# W8 [7 v1 K# J9 v7 O
  586. //        }0 P* z4 P$ W! _9 f0 u6 H2 p; X- l
  587. * M0 y/ U& @6 S. g. V/ s
  588.         // Since the dialog has been closed, return FALSE so that we exit the" ]& H' Y6 @3 _/ D
  589.         //  application, rather than start the application's message pump.. M( o3 y; p' s" K- J' K7 E
  590.         return TRUE;
    5 B9 O5 V* d1 ]2 @0 X! z
  591. }
    # n5 Z, s. X3 i  I2 O
  592. / @: z" ^- g/ P! @$ d+ @' W
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 d4 n9 Q5 G" h0 c7 p) {
  594. {9 w* `& [' }4 K8 p: x( m. `9 D3 H
  595.   int i;; q: I% h& t" m3 M* b
  596.   char *szRet;
    ( I5 {1 T3 ]7 \8 C  h, `

  597. , Z0 h% Y, Q  T' U1 G
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    0 s" R0 J! Z) t* E7 c
  599.   if(sztoken)
    7 B' b. e# f5 x  k
  600.   {/ w9 R* Q/ I- t' j
  601.     szRet=&sztoken[itoken];/ ~) T6 I7 }* l$ }
  602.     while(sztoken[itoken])
    ! H' I  \) c- X1 j7 e- i" k
  603.     {
    - U/ z, ?' j( Z6 y! y. H4 w: u
  604.       for(i=0;i<(int)strlen(token);i++)
    1 B  X( ~6 ^* I+ Q% z6 N1 J" F
  605.       {
    ( a+ P# l; m/ N& ]
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' `7 Z( l# M- k/ e
  607.         {
    - F. I: \6 F% N
  608.           sztoken[itoken++]=0;1 R$ [7 G0 a  M% ?
  609.           sztoken[itoken++]=0;6 K) f1 J) o8 J- b2 u+ G% N. a; N! p
  610.           return szRet;
    * F( ~, e8 R- T9 ^
  611.         }: S& q; H* p; w8 g4 `- z7 ]7 t
  612.       }7 }( G2 G' e* o
  613.       itoken++;0 l( ?' n# `4 m9 s( ^
  614.     }* ]$ ?& x0 B/ p4 D
  615.   }
    ) l4 r1 R3 a- [1 H
  616.   return NULL;
    ' J5 z  e9 j7 m  D8 d! u
  617. }8 E3 x+ }! x9 r9 v6 a5 i! R

  618. ! E. P( M- d* A6 G9 i- F2 Y! b
  619. void ProcessProc(long Total,long Current)
    9 l9 }: q3 }; e6 L7 |1 Q
  620. {
    5 c9 V8 W4 x1 u0 Q/ u
  621.         MSG msg;
    : E1 f0 i/ l& x
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    9 V! @# k7 n$ K7 |! `5 W% w# n0 {
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));- y: u4 c. L5 i! x1 K7 |4 B. @
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))9 a! p" ^" }/ W  G8 Y
  625.         {
    " r  ]+ w, Z1 J. g: r
  626.                 if(!GetMessage(&msg,NULL,0,0))0 L$ x7 `2 U+ c9 E0 L1 ~0 K
  627.                 {, l/ {( _# A2 j3 `5 c0 e, n3 t
  628.                         return;& l% A- o9 n4 c9 ]0 ]8 t
  629.                 }, K; y1 S2 `- Z- o0 d) i1 Y
  630.                 TranslateMessage(&msg);/ D# q: J+ T; S  c6 R, Y
  631.                 DispatchMessage(&msg);) a% b$ b; [8 s9 R: S9 M
  632.         }       
    4 n( }4 T9 U& W" ?4 H
  633. }8 b5 I  V& T, ^6 a9 c& W

  634. 4 ?7 h% c. r9 b, `, B4 c/ a
  635. BOOL bFirstChar=TRUE;8 ^3 F& O+ z1 p' }$ L+ \

  636. / X" Q1 X3 K; Y
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    2 b. ~2 N& l$ v% B# F
  638. {* Z8 a  k( l) J
  639.         // TODO: Add your specialized code here and/or call the base class( x- g0 S, w% v6 p: }* {4 T3 s3 j
  640.   switch(dwProgramState)
    ( A+ _$ W6 Q/ J6 K  u4 Y+ N- x9 T
  641.   {$ f6 g( z5 I7 q
  642.   case AP_NOTHING:  B% n- X- C# }' W" Q
  643.     switch(dwStartUpSteps)
    ; S4 B  Y. y9 q6 e3 D( u
  644.     {' }7 v9 g% V  U: [, g: W
  645.     case 1:9 f0 _7 h. m. @& h- m; c8 j+ g. s
  646.       {
    & \4 m- H# f7 @8 G! R0 L
  647.         int i;; a$ b  U. m; V$ H( }, W
  648.         CDC *pCDC=dlg->GetDC();
    ) c; r1 x/ g/ t: |0 B4 e/ |% Z* P
  649.         HDC hdcwnd=pCDC->m_hDC;' S& _, }: U: F; m8 [5 B7 k
  650. //        Graphics graphics(hdcwnd);9 m/ E1 `0 J& v
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");/ V) ~6 b2 y! t, ?
  652. //        INT iWidth=bitmap.GetWidth();
    9 h7 R( [# m! E% E# }1 T* r* `
  653. //        INT iHeight=bitmap.GetHeight();' S& ?+ P0 A; j- l+ H" `
  654. //        Color color,colorTemp;/ ]" l  T' |/ t/ Q3 S( i
  655. //        for(INT iRow=0;iRow<iHeight;iRow++), {; [7 M2 D9 d
  656. //        {
    & e7 X" A  @& X% L  }' I9 k
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    # k2 |0 S% T$ ?9 N
  658. //          {8 ]; W% M" e, |( V$ z+ P; z& l
  659. //            bitmap.GetPixel(iColumn,iRow,&color);1 K( [+ B6 L7 A" k! X: k! x
  660. //            colorTemp.SetValue(color.MakeARGB(
    6 v/ s4 v0 g  _' Y- r! L
  661. //              (BYTE)(255*iColumn/iWidth),& @0 _2 G' I7 _* S9 T$ T1 T& k
  662. //              color.GetRed(),6 P) \' p- b% B; |
  663. //              color.GetGreen(),
    - b' S* t4 j- H
  664. //              color.GetBlue()));* S1 x! o0 s; j2 l
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);$ v% X# `* @2 S' h
  666. //          }
    ! D) l) C& ^0 F2 k9 Y" i7 ?2 e
  667. //        }
    / ]0 z& K" J. T) z3 @+ G# I' j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);* W# B* i; f2 d
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , O  x# @! F$ n* F- k- B
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");, |# s$ ]; u1 j0 t
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' Q+ `  ~; b0 M
  672.         for(i=0;i<240;i+=8)% d0 u3 r5 y1 ]9 S
  673.         {; g% u+ v, u- }
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " O/ C1 d5 q7 N% t9 L% _1 ?( g+ `
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - k! ~9 _# o2 Y# X4 W: O
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);, [! \7 ?% H: |' S) c
  677.           Sleep(33);
    " H. Z2 J1 F9 U3 o# T
  678.         }  B4 M" o( r4 k& k' x, b
  679.         Sleep(1000);
    $ L$ e0 ^& Q9 K) t/ S5 d& S* c
  680.         for(i=240;i>0;i-=8). ?- y& P9 K/ a3 X
  681.         {
    / l% j" F8 @2 {5 j: I- Q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 c2 C6 ]5 C& y# Z# W' q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; |! ?! s0 O9 G
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      d% @4 ]2 h9 N" [
  685.           Sleep(33);3 Q6 O5 f4 [7 O# K
  686.         }
    ( m) R! ^# ^% ^: h6 N) Z; H/ ]! p
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);: U6 u8 S: B1 y; a& p1 g2 _
  688.         dlg->ReleaseDC(pCDC);
    " n& Z! q" d7 s0 E- R
  689.         DeleteDC(hdctar);' q9 f% R7 a4 T3 J# i% z
  690.         DeleteDC(hdcsrc);) u# L/ f  `1 A% d5 s2 z) u2 Z9 z
  691.         DeleteDC(hdcorg);* R, H1 b0 v  J( P+ p
  692.       }
      m' S! g" a: S0 ^" J% q) N7 b
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);. M4 |2 ~" k4 ^+ C1 y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");9 m" g5 K8 R9 p, p( L" x$ u7 p
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    : z8 Y2 Q( }7 C: s% Z- S6 G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    . l! R. G( z2 Q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 o* ~( l, r/ P' P) l7 c4 r; ~
  698.       if(!Dn.Connected())6 B5 ]. G( J3 L, R- W
  699.       {
    5 `* a$ L* A0 b: }3 G7 k
  700.         dwTotalFiles=1;- [1 g, {' W' x4 z+ `& g
  701.         dwDownLoaded=0;2 u$ c( [* M8 f) J
  702.         bSilentStep=TRUE;
    4 T8 \, I/ n$ z, k
  703.         bCompressed=FALSE;
    / i" N; K: z0 ]4 U1 o
  704.         strExtLocal.Empty();
    / y1 i. N8 m# a6 c# c& \
  705.         strFullName="readme.txt";( ]9 h/ O' u6 l/ A1 w! Q2 s
  706.         dwProgramState=AP_CONNECT;
    ; L) n2 |5 ~4 A; O* _+ J% ~9 ?! y
  707.       }
    7 l! l9 b# f7 @8 j
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    2 g( a' E6 F, V4 ]: {" u+ b
  709.       dwStartUpSteps=2;
    8 N- ~# C, q- N! V: x
  710.       break;
      e; X; q/ u* z" {2 e& `- p4 a
  711.     case 2:
    + K2 m; N% m! V* ^; x% C% B- {
  712.       {
    # q& N7 C/ k1 [7 u, k8 X3 A8 k9 ^' G; `
  713.         int iEOF;& v' o4 ^0 n9 }. a& ]; S% Y
  714.         FILE *fp;; Z9 O& [. D+ ~+ a. R! M, S  C
  715.         char szString[512];2 ]( ?9 I2 @* A- `! `1 A7 H1 j
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    6 t9 f, b2 M8 x3 R  ]+ e
  717.         if(fp); ]1 I4 c% G, h! N, m
  718.         {; D: w& u' G" v, x9 A+ N. ]
  719.           do: e% i9 r6 B4 P# j9 r$ e0 b; y7 r8 D
  720.           {. {& {3 \+ w5 r# k
  721.             iEOF=fscanf(fp,"%s",szString);" C  C; F- X) G3 V: w
  722.             if(strlen(szString))
    9 s$ }- e$ j9 I8 G) g* p* k4 h
  723.             {4 o- n( u7 o; K' T. K( L4 ^
  724.               if(bFirstChar)6 V0 `/ G8 [( s' s  ]7 Y
  725.               {
    ; D/ F( H* |- ^; i' P
  726.                 bFirstChar=FALSE;
    $ R) }% s# E  v6 s* p/ C# z1 W4 m6 U
  727.                 bConnectIsBig5=FALSE;
    1 b2 b: T* d* y2 h
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;) w4 ^8 o1 x; z& E1 U9 r8 Z
  729.               }  A# i- b5 E7 X9 F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ( g9 n' G0 R% l6 f- W# @0 T
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - O" V+ [- M/ i6 f4 W' U: {$ \$ a
  732.               dlg->m_ListText.AddString(szString);
    8 U: e0 Q% s. u. X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  x% X5 n+ ~  I7 u8 a- \
  734.               *szString=0;
    * I/ ^5 L% X0 ^/ U% t, {) Z
  735.             }/ d/ M2 \  t# O6 P6 f1 P
  736.           } while(iEOF!=EOF);
    . v) I' k1 X  E. [2 q' X
  737.           fclose(fp);
    9 h7 ^& Q. t5 X& V' N  b. c8 V: u
  738.           unlink(".\\DownLoad\\readme.txt");+ w0 y" E4 `+ d, H. R' D/ s% @9 d
  739.           dwStartUpSteps=3;
    , `7 X) T6 V5 \' a: h1 Q
  740.         }
    ' w) F! G2 {$ G$ W: D; x8 u
  741.       }) G2 F! D" ?' @  z: a7 G1 r
  742.       break;
    9 q# w; F0 o2 K( ]; ?6 o7 y5 a
  743.     case 3:% F5 y. v+ i7 A9 e+ l& _
  744.       if(!Dn.Connected())
    3 B/ H% @' W7 A8 `
  745.       {$ }9 I% o5 y5 ^
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    , D5 O+ Y) M! w8 B# k
  747.         dwTotalFiles=1;
    : a  N4 J# h% P2 y
  748.         dwDownLoaded=0;( O2 Y& g  m' @
  749.         bSilentStep=TRUE;, M3 Y2 k6 B8 @
  750.         bCompressed=FALSE;
      ^5 l8 y8 |+ K
  751.         strExtLocal.Empty();
    9 T9 X( ]$ R. h9 K6 k# S
  752.         strFullName="checkversion.txt";7 b6 ~8 f4 n2 n2 W' q9 f$ t
  753.         dwProgramState=AP_CONNECT;
      J' J( n5 c1 R5 v2 S
  754.       }) B: x% `, U& B
  755.       dwStartUpSteps=4;  e  ^9 d4 u9 ^3 k8 p( I3 C
  756.       break;
    3 z  s. o6 s# M* ^& l
  757.     case 4:7 h# \! p, N' a, e  R7 h; g; k
  758.       {9 ?; o# |, \! I6 Z  d
  759.         FILE *fp;  w: m  l$ y3 m( n- q
  760.         char szString1[128];
    * V: U. n9 Y0 C" l( m# T
  761.         char szString2[128];' ?: B7 _) r1 D# ^, l) R
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    4 r+ h" u( p! @3 E  O
  763.         if(fp)' R( q- q( ]  N9 f2 a
  764.         {# |: H8 Y5 Y/ p0 k* Z
  765.           fscanf(fp,"%s",szString1);9 E2 j/ z8 H9 S) p) s' l: d0 u
  766.           fclose(fp);
    / b: a) g- z1 X7 l9 T# B9 G
  767.           fCheckVersion=atof(szString1);
    # `" \4 R* ~" l# o, W
  768.           fp=fopen(".\\checkversion.dat","r");
    ' e& c& D  `5 q% h, c
  769.           if(fp)6 K+ Z5 y( b1 d. T2 s; j
  770.           {
    ' {6 Q* h  A3 s+ s
  771.             fscanf(fp,"%s",szString2);  K% _' Y6 S3 p  s
  772.             fclose(fp);
    ! Y0 ~. n# h1 ^8 y  K
  773.             if(atof(szString1)!=atof(szString2))1 t6 N) {4 N7 e# H8 K: {' t
  774.             {+ R: p2 Q: U5 Z1 _- }9 d8 Y4 N
  775.               if(!Dn.Connected()), Q% P* a/ y1 ~! b. h( B( h
  776.               {
    & W( ^# a) w9 U( x- x
  777.                 bFirstUpdate=TRUE;
    ( E0 m* I4 Q" g
  778.                 dwTotalFiles=1;
    , J( A' o' g6 Y4 U4 }) V% \+ Y
  779.                 dwDownLoaded=0;7 m3 N: u, ^! ]1 H0 e! d
  780.                 bSilentStep=FALSE;8 r. f* u! t+ o" f5 `2 W
  781.                 bCompressed=TRUE;& @4 t' X0 g1 C3 h$ d. F1 z
  782.                 strExtLocal=".\\DownLoad\";3 b0 l) c  M7 s' Y: k
  783.                 strFullName="update.txt";
    ( @+ N) {6 e5 o# {# }4 c6 `
  784.                 dwProgramState=AP_CONNECT;
    & @/ c* t: ^* t  ^/ V1 E; T4 U
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");. S0 `- ?0 `" K2 z! o- R' N* b8 \; g
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- X' Q3 p; ]0 U% B0 i' k$ q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");, [9 F0 |' ], Z

  788. / k8 O/ H) V' \4 S! }2 l
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; }& f! N3 K8 x) y) L- J8 d
  790.                 unlink(".\\DownLoad\\checkversion.txt");/ H: V0 `" C7 `" u
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 h4 I9 }1 n8 N
  792.                 {
    7 b, ?$ H6 H* J- g* g. x
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! ^- y9 Z: z4 ~: u+ ~% k) d( a
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    0 Y  e) b! X! @$ _9 E& k, y
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ; x5 [1 h4 \# @# c- G/ m
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 N: |2 _9 m. l
  797. * n3 }4 V) |! B9 o+ v5 d
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 K3 G/ y/ u( }, P* d- {  I
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! @5 h% w& i- u8 w* z+ p! o( v
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' w$ f' S, a- [& `0 q2 I& U& e
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 L" ?  J$ z  ~1 d1 Q! J- a- K
  802.                 }
    4 G, H/ `2 h% g
  803.                 dwStartUpSteps=5;0 L! X: [+ G. Z( S6 t
  804.               }1 C& R- q- \1 g0 A
  805.             }
    ! Q# n( _5 O* V8 [% Y% d- y
  806.             else3 |5 e" Q9 k* y1 ~. y( T
  807.             {
    ) }( @: g1 b4 Y+ r
  808.               unlink(".\\DownLoad\\checkversion.txt");: y3 I# q. Q& V, o6 T+ V$ ~
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    8 O/ @8 O( E1 r7 G. q  S
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");3 [2 k6 g0 T" @% Q
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ) |' z0 D6 l2 w7 N; K  N
  812. 0 ^$ ^% V; v. e; z# B" |3 {6 s
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) J  G$ q) S# P. ]
  814.               dwStartUpSteps=99;
    2 Z+ ~+ G8 N2 G2 l( C* G
  815.               bFinishUpdated=TRUE;
    : E# z% B9 _" a
  816.               bCanUpdate=TRUE;
    ' y7 s7 g# U5 k4 B8 `3 P( K! c$ H
  817.             }$ Q! y$ O( N# A% M/ J; |2 {7 f6 X
  818.           }# u+ K3 H1 F, k* E
  819.           else
    3 ^& O! w& Q: U$ u3 v' Y, ^; K
  820.           {
    + |( B' l% w3 Y, Y  m
  821.             if(!Dn.Connected())9 x* x) d& C7 m6 {5 E5 {9 L
  822.             {- \3 ?1 C8 X; H8 Y; W9 A1 J
  823.               bFirstUpdate=TRUE;
    $ a$ |  M: ^* ^/ [& S) X1 n
  824.               dwTotalFiles=1;$ e2 y1 R. Z! U# W5 k
  825.               dwDownLoaded=0;
    2 w- P3 l1 j* b6 b; O, e( c
  826.               bSilentStep=FALSE;
    5 x' P& j1 p% e2 _% z
  827.               bCompressed=TRUE;! t* O% b4 C( \2 l. j
  828.               strExtLocal=".\\DownLoad\";- Y& H$ q, P  M# {3 @
  829.               strFullName="update.txt";
    ' Q8 w! j4 b- o% k4 d8 C9 P
  830.               dwProgramState=AP_CONNECT;
    1 E- g: ~! i% E" n" b" i
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 d, P  V  f1 q0 S
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " F1 W. l$ `$ c6 @: L% y8 Q; b
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");( e4 k, w4 D, X" j- q  [; Y: n. A
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # x% X% Z2 m$ z. n" v% l
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ! r$ u- @5 G0 h# g# q& C( ?
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)1 H5 I. ?) N2 c- Q7 _0 Q
  837.               {
    8 |- ]0 @# j* L: ^+ l# b& J/ @
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    5 B2 Z+ I6 q* a( |$ L
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    8 _# N- Q* \0 T+ I
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    : E$ Y) \9 c) `
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% c, D4 q' L. P5 `* p) X6 C
  842.                
    3 W, W; F( W+ l8 k
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 j2 H) N3 H( K& @
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) u' N1 G3 Q& L$ L6 ~6 J: f
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");. j( s& D- I8 X0 C3 Y# r9 d8 M
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " l/ ?! ^; D# S
  847.               }
      j5 Y1 g, H/ }- L: N6 b
  848.               dwStartUpSteps=5;
    $ g; U3 x4 ^' f* Y  m
  849.             }. W4 L  p3 G2 J6 l. c! X4 |
  850.           }
    & ^, u8 i8 G' ^& x, U
  851.         }" J9 }2 G0 j( l2 {# e
  852.         else( g; f/ k( \& F  L8 V: b. U/ D
  853.         {. G+ c8 i7 `( w* n
  854.           dwStartUpSteps=3;$ J6 M4 V9 \2 k; o4 q
  855.         }0 d) l+ v' b$ l% x: S8 |1 Q
  856.       }
      _6 U% e+ `  F4 M& x, s
  857.       break;4 [" p' K. ~5 a( _' a
  858.     case 5:5 n+ n2 p6 e4 v% L$ N% `" C
  859.       {9 ~, p0 I0 e, p# I
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ( U7 ^# T, I; H8 b9 z! ~+ p- L
  861.         {' {# r* q- S! D" M
  862.           int opt_overwrite=1;
    % j# U. a+ I, B! p! w# O& ~2 w
  863.           int opt_do_extract_withoutpath=0;( Y1 R4 N, L8 p% n. U( L
  864.           unzFile uf=NULL;
    . l( v0 }* ~# ]- N; i% [2 z/ j7 f4 J

  865. 3 u. V+ M- [$ u! {7 c& A( |
  866.           uf=unzOpen("Wsa.zip");' Y4 ~2 x0 @' S- q  }& q( ^
  867.           if(uf)
    & Y, X4 O0 A8 h; m" r6 a
  868.           {( g4 T% [- B2 d1 \1 C
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);& _1 c. g. w1 Q. s0 ]- O# @, U! K3 E
  870.             unzClose(uf);: U8 t' P/ j5 [0 w: G: [
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");2 T, d7 A" [; U, \* W
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");* z5 g+ e" E' A& ]& I
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");0 m, b5 F/ j( G. Z  W4 t. n7 e3 Q/ ~/ t
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; X' ?" ]! R1 [) c  q: u' e
  875.           }
    1 ]: @9 k5 s+ e2 H+ L8 I3 n6 M
  876.           DeleteFile("Wsa.zip" );* l( d  g! ~% @- K' W/ b1 m
  877.         }
    $ U0 }8 T! K9 z! S. |, H

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

評分

參與人數 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-12-4 17:02

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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