CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
# G9 X; e- ?; W! u, i
  1. / RevApp.cpp : Defines the class behaviors for the application.
    / m, O6 u8 N" X5 Q& R
  2. //# n/ Q% h1 H6 e7 t: _' l

  3. 5 a& [8 {8 `( x6 ~6 ^' i
  4. #include "stdafx.h"0 [' n# k$ I6 @* {
  5. + \0 A* E: w- y6 P
  6. //#define UNICODE
    1 ?% p8 K" ?% E
  7. //#include <gdiplus.h>* K" N$ t) }8 K
  8. //using namespace Gdiplus;( D* n8 ?0 z: G! `. O; g8 z
  9. 1 b0 W4 q4 d! s9 d4 H; v
  10. #include "RevApp.h"
    + q& J3 n* Q5 c& F: d
  11. #include "RevAppDlg.h"
    ; J0 ?) O  z; W& P  o: B- z

  12. / j5 e. n, I' R2 m" r! Z
  13. #pragma warning(disable:4786)3 p6 r, Q5 p- O8 Z( a( U/ n! ?
  14. #include <map>2 [: Q6 n" ~2 F7 a8 ~0 e
  15. #include <list>
    1 F& m  H* y8 r" L  I
  16. #include <direct.h>
    4 m+ R  G. \0 a8 `/ c; g- |

  17. 6 Z% Y& Z2 o8 n2 R
  18. #ifdef _DEBUG' m* n8 n2 ^3 X  {' y3 ~* Y- K6 ~
  19. #define new DEBUG_NEW& P, {% X! m' d4 {: k3 z
  20. #undef THIS_FILE7 b* A3 o- F- v- `8 o  k
  21. static char THIS_FILE[] = __FILE__;
    7 z: |; d! U, x  q
  22. #endif
    ! E7 z, d2 F, G; E
  23. #include "SkinResDef.h"+ p8 T1 E! c! t1 P( H- h5 P
  24. #include "ChangeBG.h"
    2 [* s; ^( }4 j2 o* e) U0 T
  25. #include "AFXINET.H"  y* s( C, w7 A6 i4 r$ U
  26.   U% U" O" w2 p, X
  27. #define TRADITIONAL_CHINESE 0$ s  S6 m1 F5 }6 d: v
  28. #define SIMPLIFY_CHINESE 1; u& I- D; W2 v* ]# G5 i/ `7 {5 P
  29. #define ENGLISH 2
    0 i( N3 `6 G5 @# A: x- F
  30. int m_iLanguage = ENGLISH;
    $ {1 S2 G5 s# F5 R& q
  31. /////////////////////////////////////////////////////////////////////////////
    % ^1 {3 L/ O& F% L9 c+ U
  32. // CRevAppApp% O1 x. j8 d# d+ |

  33. # ]" x6 u( F7 t  c1 T) [9 B! t) `' t
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    7 V8 {1 k2 N( M9 }5 K
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    & W. U+ d, F5 |0 G0 h
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    : O' ~/ i8 c; |" {" ]! Q
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    6 b* q! s7 m8 J' f
  38.         //}}AFX_MSG6 r* G8 x& z: i
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    * S; Q2 C3 g+ E7 W3 N" k/ \/ C
  40. END_MESSAGE_MAP()6 ^' t$ n" t6 `1 T' l7 W$ O
  41. & ?3 e6 L( i+ }. F* [
  42. /////////////////////////////////////////////////////////////////////////////( I! O2 h. j! l
  43. // CRevAppApp construction
    - L/ c; R9 h; X" c# J  a* i" `* E# z$ ~
  44. 8 M) s9 n- c% Y! Z0 t* r3 V' z; A
  45. CRevAppApp::CRevAppApp()
    5 F2 ^% T: o; |
  46. {
    - A3 N: D, q6 i+ J3 X6 @6 s
  47.         // TODO: add construction code here,
    ) C  N' N- d  d( O2 P% I
  48.         // Place all significant initialization in InitInstance
    " H& f& w  F" t* s* O4 A. e- p
  49.   bDisplayIsBig5=FALSE;0 E) X8 d) `. o- D3 j+ H5 }5 j
  50.   bRestartUpdater=FALSE;6 e, P% Z* C4 D6 J2 a; Q
  51.   bFinishUpdated=FALSE;, r1 i$ O( T8 `* U; T
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ; E: J" ?7 D( Z( u
  53.   InitChangeDataBig52GBKS();1 X1 e; T7 l5 I% s
  54.   InitChangeDataGBKS2Big5();
    9 P( S- G% j7 d. e: ^: b
  55.         //
    - J& t( X! U1 G9 O( |3 _( `0 u$ e
  56.         bClickRunExe = FALSE;5 R$ |2 J8 H  Z1 \
  57.         //
    3 O0 ^( `$ L  c" E) V" o% F. o5 T7 j
  58. }
    5 l' A' L5 V6 s7 {' L+ V
  59. , C0 `1 }2 M5 I' K( T# S0 I
  60. CRevAppApp::~CRevAppApp()9 H; J1 ?# i2 E' C
  61. {; e" R3 \" r6 h
  62.         // TODO: add construction code here,
    9 j; w0 L4 c( z/ c( y& s
  63.         // Place all significant initialization in InitInstance
    " v4 P+ T; q$ t; z/ Q# Q" y' K
  64.   EndChangeData();' b: J6 p1 d$ W# T% W% V
  65. }
    * W" g+ K6 N- `7 e
  66. & D& b8 p" t& w. G/ G1 i
  67. /////////////////////////////////////////////////////////////////////////////2 W3 i# ^' B( M3 {
  68. // The one and only CRevAppApp object
    ! Y# u+ X2 L) z3 j

  69. ; G! |  D* O2 H. c
  70. CRevAppApp theApp;. `3 ]6 N5 `- Y$ @/ _$ D" V: x

  71. 7 A& Q0 v, F' [. g1 F( g3 e: t
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
      L/ |7 l& I, P* r& R( l
  73. {
    ! s; d% e, e. _
  74.   int iEOF=0;
    ! P" n- Y# S) U
  75.   char szTempName[MAX_PATH];
    ) J# Z, F, B# {, J" n% c! Q
  76.   *szFileName=0;
    0 r$ N7 v3 H+ \' W4 Q; o
  77.   iEOF=fscanf(fp,"%s",szTempName);
    2 y  i2 M6 b3 Z, i: E7 g
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')* e; Q, u# Z9 o' @
  79.   {" P2 C4 [  y, q) O6 S1 |" d
  80.     strcpy(szFileName,&szTempName[1]);
    % F& H; H6 V& Z: @; [
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)% Y7 |. ~& m" q/ c: ]( b, z
  82.     {  a% c0 I( _# A5 q  \- W6 h# @
  83.       iEOF=fscanf(fp,"%s",szTempName);
    " q" B9 M7 ?+ ~" t! j
  84.       strcat(szFileName," ");; O2 b5 ?: D' F0 n
  85.       strcat(szFileName,szTempName);
    : _, f% R+ g: B
  86.     }6 W. u! j3 D9 e' F; c( ~- V
  87.     if(strlen(szFileName)>=1)
    ' I2 ]$ @- _0 z6 A( x: `
  88.     {* d- i" \" e6 s
  89.       szFileName[strlen(szFileName)-1]=0;
    " ^! A' I7 e4 t
  90.     }
    & v2 l6 @; t4 X+ V6 n8 F
  91.   }
    ) X% @* ~# i$ g& R) b4 T* L6 T8 C
  92.   return szFileName;% M7 X6 J# f8 l
  93. }
    ! `' s$ t6 S% {# S& h9 \( C- V
  94. % Z+ ]) ]% a: \" x- C
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)9 {2 C/ d: s0 Z% G. w! i8 Z
  96. {' ?4 P& z/ Y$ s0 z- s2 e
  97.   FILE *fp;, I: ^$ i5 Q: R
  98.   char *key=NULL;  r7 d' x9 n8 e( ~
  99.   char version[MAX_PATH];* e+ ~# y' p' z5 c: t/ `
  100.   LPUPDATEFILE file,olds;; u8 {2 X- E. i! ]
  101.   std::map<CString,LPUPDATEFILE>::iterator p;8 T- }. f  {' o: \1 m. i3 ^% O" w
  102. 4 F& d, h$ d! ?+ D
  103.   UpdateList.clear();; r) G: _% T9 l- d4 m: l8 r9 G( c: @' p9 n
  104.   UpdateFile.clear();
    : W& a) ]) q9 C& l- i) Y0 j
  105.   if(GetFileAttributes(filename)==-1) return false;
    " q& ~$ }  Q; N; f% L4 e: [
  106.   if(!(fp=fopen(filename,"r"))) return false;0 L, `# r- m3 i0 @% f; Y5 P
  107.   fscanf(fp,"%s",version);
    5 A2 A9 k3 ^4 C$ _
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }/ F, K/ y/ \' M0 y& a4 K& {
  109.   while(fscanf(fp,"%s",version)!=EOF)
    4 h( T& s8 }. c' i) w6 ?: Q9 h/ J$ H
  110.   {
    . `3 ~2 K# Q1 ?2 i! k7 f+ H
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 S; i% f: z: R4 R2 t5 e, q
  112.     fscanf(fp,"%s",file->path);! l% O( \' B% u- s" i# y% z4 F0 ?
  113.     ReadFileNames(fp,file->file);
    1 L5 N/ k8 s* e% e2 M
  114.     strcpy(file->full,".");/ W1 [5 C3 C! T
  115.     strcat(file->full,file->path);
    8 x5 M: L% R0 L0 [
  116.     strcat(file->full,file->file);( C) k; S, o7 ^6 D4 G% w( c& }! s% @
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())  Z& \9 a, U+ }8 ]
  118.     {* d2 X( g" D( F5 X1 {
  119.       file->vers=(float)atof(version);
    ( T1 [0 {8 c- |, f/ z; |
  120.       UpdateList.push_back(file->full);$ [' }4 X* [6 M4 U. y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));4 U8 }; h- r' G, _
  122.     }: J4 j& J% ?/ T# A6 r
  123.     else6 N, l0 L' V4 Z6 Q; N! g9 d9 Y
  124.     {& R1 D. S; b9 c# `. v
  125.       olds=(*p).second;" [# x! h: ~1 v) V7 P5 m7 F
  126.       if(olds->vers<(float)atof(version))
    7 l$ e* x' u5 |  ~, u( y
  127.       {& N4 G5 Q9 t2 H9 z
  128.         olds->vers=(float)atof(version);
    3 k7 S( j, v5 \  Q0 o  m' {; k
  129.       }! S( x3 `3 X, T
  130.       free(file);
    5 [0 P$ H$ [! ^2 t7 b
  131.     }
    4 X" e1 T( [" h8 ^- A1 c
  132.   }
    5 E* k  C" s# j$ Z. f
  133.   fclose(fp);! l, b* n3 P4 M; z/ _
  134.   return true;
    5 \( N2 A3 y1 h6 E
  135. }6 A! G& K# M) X6 g" ?
  136. / A: m: H7 W0 h0 {
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    " `! K: J# R0 @0 o+ E
  138. {8 z& u8 f5 ], r8 `: N9 [3 ^
  139.   TCHAR  szFull[MAX_PATH];
    & S( u" X- V& G
  140.   TCHAR *token,*inter;" T1 H9 z9 G, N1 q8 J/ A
  141.   *szPath=0;5 i( _2 u; B' ~5 D- g3 W
  142.   strcpy(szFull,szFullPath);
    / I. w; {$ Q, d/ ]
  143.   token=strtok(szFull,"\\/");' c1 A& Q: J2 u( n8 q3 ~
  144.   inter=token;" n" D2 I* x- p, [+ v
  145.   while(token=strtok(NULL,"\\/"))5 a. f9 M( _% j
  146.   {
    4 [7 l" H3 D+ s% T: q0 D8 y$ H
  147.     strcat(szPath,inter);
    5 D6 ~( e( |0 Q  e! o' \$ r
  148.     strcat(szPath,"\");
    ; p$ D9 V! W  }2 y; x6 u4 r' z
  149.     inter=token;
    8 S0 S9 S; T  I
  150.   }
    % q8 N: T. |& T# U0 q+ z
  151.   return strlen(szPath);$ [' m& l! n4 _
  152. }5 l% l3 C% i" A! O- f' p
  153. , q9 k% g3 i+ t& z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)% O# s/ O7 A  W: E  F" I! i% k
  155. {- E! k+ r( R0 o( j5 @3 e5 v3 _- B
  156.   DWORD attrib=GetFileAttributes(Target);  K! m$ O. _* T5 ^4 j
  157.   if(attrib!=-1)' ]# l) f( b6 G; r1 q# y2 v3 _9 z$ |
  158.   {
    4 Z2 }2 N  k( G: ~" N4 f5 q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))% O- U% c( n7 M/ A& M% z3 j! i
  160.     {3 o) i+ S) [# T. Y6 r8 {
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ( r5 ?; M5 ^; S4 r& u! ^3 y. T
  162.       SetFileAttributes(Target,attrib);
    3 ?+ R; S; e- q7 |
  163.     }
    5 L4 ^4 G' _3 E1 S+ \! P6 h2 @) Q
  164.   }0 u( Y- o- f! O) X8 f
  165.   CopyFile(Source,Target,Erase);) {! b( e6 ?0 B9 y$ G
  166. }
    " E+ Q% G0 s5 O2 Y7 Y1 c
  167. 0 I4 w0 v) M$ \
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)) }, A- F; ^* b+ D4 J, |% ^
  169. {
    9 L) o3 r: a" Q: k5 Z
  170.      FILE *fp;
    " D& G1 q9 q3 K
  171.      char  szBuffer[8192];3 D. j9 D/ E( }0 o  r
  172.   va_list  argptr;
    8 Z' y/ \6 M8 S9 R# A  U2 A0 R
  173. * j/ q$ Z% q7 Q) N6 Q  s% s
  174.         va_start(argptr,message);) ^# z. ]# V3 z6 ^+ T5 r
  175.         vsprintf(szBuffer,message,argptr);
    6 v- x2 e* ~% h+ }2 u
  176.         va_end(argptr);# V: ?, M  J, X! Z9 D; K8 G
  177.   fp=fopen(FileName,"a");& ~/ {; j5 ^& D* e
  178.   if(fp)) k( Z' H8 {# \# K1 h  }
  179.   {9 i( {( A7 C/ H% N* z- ?1 m
  180.     fprintf(fp,szBuffer);
    # ~: Q8 W+ H, \( i" A, s
  181.     fclose(fp);# O+ I4 z# l; S1 j  E
  182.           _flushall();- o/ v$ I0 K3 p3 m1 ~8 m9 J& r3 V
  183.   }) k2 m; Q4 z7 b2 X' p
  184. }5 d* T8 Q6 t1 H
  185.   y7 G6 [! i, x2 t3 z
  186. BOOL CRevAppApp::Fclearf(char *FileName)4 q: s- ^; p. r0 H
  187. {  Y, u, R) i: O9 T1 R+ i7 p; D3 X+ p+ {
  188.      FILE *fp;
    5 _0 Z8 Y7 {0 Y7 J7 `4 y7 |. N
  189.     DWORD  attrib;' S9 o. O* S8 s. l, r9 I
  190.   attrib=GetFileAttributes(FileName);
    8 x9 c/ p. }/ f) l9 `' h$ q+ [
  191.   if(attrib!=-1)
    ) l* w; O$ a1 ^" ~5 L  T
  192.   {
    1 G+ V3 Q6 J( M5 r7 b9 _% B* K) l9 i
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 g8 U& ]4 g5 E4 p& r. z
  194.     if(!SetFileAttributes(FileName,attrib))6 J. H0 \  S- }
  195.     {0 K, I3 p1 D: e) Z& M9 k8 @
  196.       return FALSE;
    ; g9 D. @0 K. e
  197.     }
    . N) P: b% M1 {3 s, n* Q' g
  198.   }
    ' ?' ?( ^* }/ d3 X! x, Q  u
  199.   fp=fopen(FileName,"wb");( O8 y( W! \) t' q/ U% A# j- [. q
  200.   if(fp)
    0 N: K4 {% v4 x. ?8 [
  201.   {: f& {8 V, z6 f  R9 i' I! e
  202.     fclose(fp);4 u" R; t# t) `3 z3 |& o! F' H3 y
  203.   }
    + [0 c: R& x1 W3 Q# S, |" g5 C
  204.   return TRUE;$ k2 r' f/ l! b
  205. }* `7 k5 q4 h$ Y2 I. P3 I2 O

  206. 1 v' R8 o' y- }- x  r" q% N" V5 ~  F
  207. BOOL CRevAppApp::UpdateLocalVersion(void). }! X6 x: V( h: D3 h/ Q
  208. {. N' ]0 `5 W- j: W7 J) }- ~
  209.   char filename[MAX_PATH];
    8 j( J, F6 V0 z! ]7 L0 K, x
  210.   LPUPDATEFILE file,olds;
    * e, Y1 a  f+ A
  211.   std::map<int,CString>::iterator i;
    % @6 l8 e  e/ y4 t+ f! B
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 ]9 x' d) }, [' @, z7 h7 L
  213.   std::list<CString>::iterator l;2 R5 r5 y: v1 D" c  z, a* z, O
  214. 9 ^% b/ f% c* a5 ]2 a/ c5 p
  215.   if(bFirstUpdate)
    / z+ c) z  Z* \5 b. x
  216.   {
    % [5 a9 K; w- t* |+ ^8 Q# N
  217.     dwCurrFile=0;. V( r) I& `9 N, |( d3 j
  218.     bFirstUpdate=FALSE;& R# W; N' \4 B- H' n
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 Q8 Z% D4 P5 c! a% y; j
  220.     {
    6 h3 Z" M  `0 M/ d" B) j' l
  221.       dwTotalFiles=UpdateLocal.size();
    4 h2 {* m+ t9 A( o5 [8 f, o1 H
  222.       dwDownLoaded=0;
    5 w! Q5 P+ o3 j. H
  223.       bSilentStep=FALSE;
    5 O* u' X1 V# [! K- i
  224.       bCompressed=TRUE;8 @1 c' y7 |# M
  225.       strExtLocal.Empty();& c: e* P* k7 _: l
  226.       strFullName=(*i).second;! F' u+ t- H3 |* c
  227.       dwProgramState=AP_CONNECT;# S# \  J) v: v( G% S
  228.       return TRUE;' a' F" n, N6 a+ L; {8 e/ P& E
  229.     }  w5 Y' y& x5 C3 C3 D) o/ [. P
  230.   }
    4 h/ _; Y4 C5 e; {
  231.   else if(bRestartUpdater==FALSE)2 c& M6 D  w! P( G% H% k7 O2 {
  232.   {; S! s* `. b  z( y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())# u, R0 a5 _: M0 U* E3 I
  234.     {
    0 i( C% K' m+ ?0 D6 m; a/ k- |8 E
  235.       file=(*p).second;
    # k# O7 d) a: Q' G# _* \
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())7 v9 d9 w7 \1 ]/ _  _
  237.       {0 ~, {3 @( H. }3 e
  238.         olds=(*p).second;
    ! Z& |8 y8 l% D% l2 @  s
  239.         olds->vers=file->vers;
    3 ]! D: ~  \% D4 X6 ^
  240.       }# M  X/ i+ R  R3 t6 b, `
  241.       else1 i5 ^1 U9 m6 l' T+ F) Q
  242.       {
    , F- `/ Q2 F5 _* [4 [' s+ r
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( o) y; N( k3 x7 x1 p. |
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    # ?* n) |& h, m4 _( N
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    8 Y- Z1 ?. E4 l# X% V
  246.       }  |6 \: }* k$ O' o1 h7 b& [
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    - U$ f% R/ d4 r+ S
  248.       sprintf(filename,"(%s)",file->file);
    ' w7 y, f2 k! c" Z$ c
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 q  U$ o, m  Z7 p, A
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }) _: U1 q, t" r. f7 |& B8 G
  251.     }/ g, w( B4 f* r# \
  252.     dwCurrFile++;9 a2 P9 _/ w: j- l( E7 ]! \$ C
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    * h+ F' q6 N4 H1 @9 \$ u
  254.     {
    ! e+ U3 N$ v( j! W# O" ^
  255.       bSilentStep=FALSE;$ d7 {* b3 p- e  Q) c4 Y
  256.       bCompressed=TRUE;6 a" P0 v4 {  B8 |0 |
  257.       strExtLocal.Empty();3 G! S, z: z# a* S' J7 ]7 q) j/ u! q, R
  258.       strFullName=(*i).second;# {" x+ R# A6 i1 z( L) k( S
  259.       dwProgramState=AP_CONNECT;* e3 f! v  b; _) c+ n; q3 n" \: `9 _
  260.       return TRUE;
    $ m! g) v2 \3 F* N
  261.     }. M) Y' m4 B- `6 E
  262.     if(!bRestartUpdater): a' v  F8 R& C7 V
  263.     {
    5 v  a6 V4 X& V7 r. }, G$ D
  264.       int iCurrSize,iFileSize;; G- v9 S& [# z  {2 u5 E6 @
  265.       iCurrSize=0;0 @' I4 ~. p- t$ E$ \
  266.       iFileSize=UpdateList2.size();
    - w9 v3 O& V5 E- b& O
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    5 X9 T+ z6 i. J' P, L4 _' l
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    4 T8 V" T7 k' |& ~+ a
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");9 U/ f. i; q+ o* {0 t5 B' e
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ B) Q: M2 S. e3 A! Z9 t5 Z7 L0 `
  271.       Fclearf(".\\update.dat");2 r# m% M4 h$ ]+ n6 A
  272.       Fprintf(".\\update.dat","Bloodyf\n");. P; @+ p7 r/ r/ F
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)/ b; \$ Z+ M5 F
  274.       {
    ' u  q) J1 S9 I' s. T- E8 B5 Z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())" [& S/ I4 R" R$ P
  276.         {
    2 P* u. h( T+ j7 d8 _
  277.           file=(*p).second;  f8 Q' P4 e5 v5 z8 o. g
  278.           sprintf(filename,"(%s)",file->file);4 w( m% j% Y; {& \1 H
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ) }# n* Q8 |: R% T' }0 A+ B
  280.           iCurrSize++;
    5 r7 d# ~$ k* f$ e
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / i7 p, }4 M1 P
  282.         }
    # D* k$ M1 {3 M! I+ V9 r' p: |3 G
  283.       }
    ! v" o- u- A8 C3 c1 U
  284.       unlink(".\\update.txt");
    $ L+ X' Q- f# D/ {0 X9 V
  285.       unlink(".\\update.tmp");
    & L) v/ ^7 v- ]" _* ^4 F# |
  286.       Fclearf(".\\checkversion.dat");
    7 K% W, p  n' b
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    & X. ]$ V: f" q; L& |" s  i5 g
  288.       if(UpdateLocal.size())
    & b+ h" k% d* K- f$ q
  289.       {
    # t# @+ f, F3 m: ?& w
  290.         UpdateLocal.clear();( ~& Y' _9 v4 x1 q* o+ Y+ M9 N1 y/ _
  291.       }
    ' ?( f$ ]  X. u6 q& Y
  292.       if(UpdateFile3.size())
    6 I* j3 n2 o5 r% U
  293.       {
    ) c! v6 K; I) E" E8 g
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 h4 x1 n; y" z$ _/ N" s& X
  295.         {
    ' i- g# ]4 [7 |, D6 P
  296.           file=(*p).second;
    3 T/ Y1 Y5 D5 N/ i: p: j& Q3 z) G, O6 H. ]
  297.           free(file);
    / ~- V2 A0 }' P4 H  _0 F
  298.         }7 O: c# i+ U/ ^( y! e  t) W' e
  299.         UpdateFile3.clear();
    ; z: T8 \2 n) _* `$ _
  300.         UpdateList3.clear();3 T# u* I* ^9 h0 D/ \0 O2 T9 C
  301.       }
    4 q" r5 _! E$ ~' z* V
  302.       if(UpdateFile2.size()), m8 {% B( O9 V) Z
  303.       {
    - S* i6 E. n$ C! v) w
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    9 U3 T: ]. ^7 _" w% w0 |( X# q7 K
  305.         {5 x, T+ w$ O9 w+ S
  306.           file=(*p).second;. D. S( v" A* {: I! {
  307.           free(file);
    ) i8 u- y  R# r9 B3 E
  308.         }- P- Y% \# k& [
  309.         UpdateFile2.clear();2 H4 I$ s  u2 u5 w) ]2 P
  310.         UpdateList2.clear();$ `' J* o7 j2 U! x# f
  311.       }
    5 f+ \7 M. `) E9 I' D7 V) |
  312.       if(UpdateFile1.size())
    8 m2 G! `, @/ P: }
  313.       {, |8 f$ G5 r6 M  c9 @3 X
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* I  j- D3 S, @! X) M5 Z/ B
  315.         {
    / H9 e+ K0 h9 s- }/ _+ o
  316.           file=(*p).second;
    . ~4 D: _8 y! ]
  317.           free(file);/ O0 W) ?: D) K# V
  318.         }$ B) C$ _+ l, m) |+ D! r7 {
  319.         UpdateFile1.clear();  ?$ M" U  i) f
  320.         UpdateList1.clear();
    + i/ c+ W2 Y4 x/ e2 n
  321.       }! X% w( z# F4 h/ ?& _4 Z1 y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' K2 y4 P4 m. Z) x) m* A
  323.     }
    3 |' a0 d3 C% ~7 F, V  K
  324.   }( ?. d" Y, H1 N' U- w0 D
  325.   return FALSE;
    - V4 W; {! ^4 X0 l
  326. }* F6 L( @5 m3 k& X7 D, E& {( n
  327. ( N4 L5 I2 D. Q& d0 S
  328. void CRevAppApp::ClearAll(void)% ^  @  S" h" E& y1 M, f6 }
  329. {7 z$ ?9 E1 ~7 T. c
  330.   LPUPDATEFILE file;
    " y7 B! k$ j. Q1 ?
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( P; l# x# l. a( D! K
  332. 9 w+ k7 H" ^5 j; l1 i6 s
  333.   if(UpdateLocal.size())8 Z  Y# R( r: o( \. Z
  334.   {) v3 m: N( [% L  x/ i3 I! B
  335.     UpdateLocal.clear();
    ! n( [# k& T5 ?1 K
  336.   }0 v4 _8 L- Y1 F% d) O8 ~
  337.   if(UpdateFile3.size())  i0 X7 E2 D2 y: ?4 o# N4 t& x
  338.   {
    * R- o4 T/ @7 J9 j" N! I( ~, o+ A
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); W6 ?; z" W, F) [" O) ?
  340.     {# h3 l& b0 V! Y6 r2 [9 M- C* Q
  341.       file=(*p).second;6 y% B& ~/ y1 i  X: Z
  342.       free(file);0 v' {  ?( l1 e% j( [& O  Y& L
  343.     }
    2 M  j) a' U! H8 {5 f% [7 R- Y9 q
  344.     UpdateFile3.clear();
    9 A: N5 ~8 C) w) s4 [
  345.     UpdateList3.clear();
    8 j9 t) }4 ?" Z
  346.   }+ I: ^# ^, W) v4 i8 P
  347.   if(UpdateFile2.size())
    # U+ e: m) X& @1 r( n( |0 n1 L4 K" V
  348.   {
    ! |( f  b4 q1 h  h
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ g: z  t. k0 |9 _/ C
  350.     {' f# O/ x& D6 K& J5 N8 v
  351.       file=(*p).second;
    . \4 I' T7 k% e7 h+ A
  352.       free(file);) q% w4 D& s4 k: B
  353.     }
    & P5 A7 P0 q+ c3 Q- C2 v2 v
  354.     UpdateFile2.clear();& T2 h  D; Y8 D8 h  q
  355.     UpdateList2.clear();# j9 S) k) K; [) R! p' e2 t
  356.   }
    0 E& f2 v2 V$ A& g1 ]( l
  357.   if(UpdateFile1.size())
    7 `% z4 h2 I2 u) r9 B) n& l6 I! ^
  358.   {
    " P0 I/ q: S7 q$ \9 g5 v( M
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    9 n& I) I8 M6 o% x# r* s0 P& B
  360.     {' v6 ?6 U( j; {8 g3 f2 {: ?4 o$ S' v% ]
  361.       file=(*p).second;
    % [' G0 S# j# |6 F$ {+ y. I
  362.       free(file);
    7 l6 U5 y3 U1 L9 x1 h8 Z
  363.     }- \' o0 n0 p( {( ^$ }3 V
  364.     UpdateFile1.clear();
    6 H! k$ N9 ?# g4 o" A- d
  365.     UpdateList1.clear();/ ~. [: q" F7 M) I0 n( @
  366.   }
    $ a- l4 k0 y) M/ r) \
  367. }  ( x0 |* M; z8 j& t( p# S
  368.   
    . N) N" T4 [$ c2 O1 t# H( O# N+ n
  369. BOOL CRevAppApp::CheckLocalVersion(void), E: q5 u3 F) \- \, h6 j" Q
  370. {
    3 e; n% H; d' `1 k5 L+ H5 Y
  371.   int c;1 J1 C( H4 L) {  {8 T2 x* I1 s
  372.   LPUPDATEFILE file1,file2;6 f. C  n3 f; A; q
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;- Z# m$ L* Z" f
  374.   std::list<CString>::iterator l;! V& o) t$ E, @" k/ D: {

  375. 1 z6 |! F4 I+ K! T3 h7 C) `+ B# D
  376.   UpdateLocal.clear();
    ; c/ K. S3 g+ ?# r5 C
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    + p$ s- C+ |( L( T- R% g" v7 }/ k
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    . l3 H' ]& M" k6 T7 E( J
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);# k% e1 m9 X( p* \
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    6 b( F# F( B! u8 n
  381.   if(UpdateFile3.size()); c5 m" x4 S2 c' ^5 X9 P( a
  382.   {6 p9 \3 O: k2 I0 B& _
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); m$ B8 D$ _; T
  384.     {
    3 B7 Q) A2 s0 V
  385.       file2=(LPUPDATEFILE)(*i).second;
    - [7 {5 f6 _( _( `
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 _; B9 W( x$ t7 C- g3 e
  387.       {
    * L- j" ^5 n! H4 J
  388.         file1=(LPUPDATEFILE)(*p).second;7 J+ J8 c5 U2 J
  389.         file1->vers=file2->vers;4 F( ]+ M, e; r4 Y7 a8 Y* F0 X
  390.       }
    * p% ^2 r/ N6 g
  391.       else9 y3 D3 P* P& |3 Q- f) z
  392.       {8 c9 @2 |  e" @9 W
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      @0 R( U+ [" E
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));8 s& t4 ~' N$ h5 A7 [+ ~5 X- r+ N
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    . Y, a4 H4 _/ [3 E, E1 k4 W
  396.       }
      }" Q& Y. M  p. C/ b
  397.     }
    3 N% h7 g& k# O
  398.   }8 a- o1 z& l; o+ c, @" z, j4 h  z- V1 |
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)8 G/ @) a! U9 p8 b. E7 z
  400.   {7 W$ C7 u6 K# A* Q7 X0 \5 G7 J& v
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())8 h6 S  D& L  }1 w# p8 h0 k8 C; X
  402.     {
    ! K( S# }1 @. B' ^4 _
  403.       file2=(LPUPDATEFILE)(*i).second;
    1 g& U( l) |4 i5 X) {) {1 n1 @
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())- d# K$ P9 {. x4 W5 K" d
  405.       {
    . k# C" S8 X" n0 M5 l
  406.         file1=(LPUPDATEFILE)(*p).second;
    0 B1 `" u- B( `- l) m7 G
  407.         if(file1->vers!=file2->vers)- C( B" p: F/ m& X/ Z
  408.         {8 \9 |' G6 K9 l4 a! j& x* Q* Q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* c2 W; u7 @( y. [% Z7 r6 m
  410.           c++;
    , z7 V0 ^) P% |  r: v8 M; F
  411.         }/ Y8 x# W. i. q6 N
  412.       }6 i1 J/ r9 i- Y
  413.       else
    * K3 q0 c* z4 s8 B5 n3 [
  414.       {4 u+ u" Z, a% N3 g" E5 n# N
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) I0 J3 Z& ^% Y
  416.         c++;/ k. t. i0 z: E' u& T% i5 g# h
  417.       }5 W# e7 w1 |/ X, F
  418.     }
    6 Z0 C: s: C# P8 _2 w7 {
  419.   }9 L! |, o. `; q# U+ u
  420.   unlink(".\\DownLoad\\update.txt");" f* ^+ o6 `1 d# A4 g+ s1 T! P
  421.   if(UpdateLocal.size()) return TRUE;+ I% `  h7 r: q) w$ m
  422.   else                   return FALSE;) m& g% l2 Y2 n( B" i
  423. }
    . Y) S8 R2 \$ I4 b7 G# G

  424. : Q  i' Q+ k9 ?5 w6 g
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"9 _. B2 @* i9 H+ m! v
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    8 S3 G- h: U2 a8 k1 ~. i
  427. 9 B6 W. n8 q) a  B. D6 k& \

  428. 4 E. B% V) R3 e4 ?2 y
  429. 6 D: |# b. c* \, }1 Q0 m. I
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    4 q+ i7 d% x$ r2 f) n' y3 z
  431. {3 \! z# t7 P5 S* _0 d
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ; a+ M* J# B* {4 U3 ^. w
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 `( R8 l- _  h5 B+ z+ _* k5 {8 J) _
  434.   {! L$ e+ Z1 R8 {$ c  q% c: _
  435.     char szLanguage[50];
    1 f2 q0 b8 F7 v1 j$ ]( q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");. V9 l3 G) V2 y1 }
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
      O- |. C. S3 M$ g2 n
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " a  G6 }, u1 o# P
  439.     else                                   m_iLanguage=ENGLISH;
    : K( B+ l& q( ^2 e. E
  440.     char szRegister[100];
    ( B, v9 A  S! ]6 a, a5 a
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 f1 `7 l3 }" E2 F$ r
  442.     strRegsName=szRegister;' ?7 O) t6 f* f" w) M. b
  443.     char szPatchURL[100];
    # B* i0 W4 i1 \: `3 U8 }
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) E3 H% w1 L5 w  Z: j0 ~
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : W. x6 p! L$ X( X/ {0 M6 U
  446.   }
    # {  j/ P* Y! @5 i5 x
  447.   else, @& m# V! d* ^
  448.   {1 |  S' M# ~+ D" j" f; i
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) Q, Y/ c& h$ G$ e+ @
  450.     strRegsName=DEFAULT_REG_URL;
    6 S, K: a0 n' q3 j0 Z0 {0 I
  451.   }
    " @8 S7 |1 z5 H
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * V8 |5 @& S! M
  453.   {
    : e7 R3 N0 {6 G3 o3 _
  454.     char szIP[50];
    : J) X( u% e- j% s' ]. f
  455.     char szDIR[300];! B. D/ o# v8 e$ P0 ]2 S% C$ [
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    8 o( M1 l2 c) e" G5 `7 q" P2 a
  457.     {- r# Z4 }$ X/ s* [, d( r3 p
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : \7 @! t/ ^* B0 N9 m* T
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    # d3 s$ O. k3 y5 |" O$ W& D
  460.       strHostName=szIP;. ~) z0 m- x$ Q) y! r+ D- ?$ a( W6 L) J
  461.       strHostPath.Format("/%s",szDIR);
    . B# O6 m) r2 L
  462.     }) `  N3 U. Z1 b0 z( s
  463.     else
    8 x) f2 S: D, l* Z4 q7 V
  464.     {
    ' S# \# w' h% w: _
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % F2 f# t2 N$ h3 i. m: Q9 q
  466.       {) c" Q% Q4 B: D3 H8 @% e" \4 m" ~
  467.         char szLanguage[50];
    4 r; C- w0 u, C9 l( ~0 s/ f0 o
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ l+ G$ e6 S# c: l' J6 }% `: p2 i
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 j" x- \' }) v
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 Q' c* d4 j1 I
  471.         else                                   m_iLanguage=ENGLISH;+ `9 D7 ~$ |) X: v: h
  472.         char szRegister[100];3 I2 ^- E- L& C) V& b- Z1 m% k) r
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / _( l0 D0 D: g
  474.         strRegsName=szRegister;) C( q% R, G2 |8 Z. B$ k
  475.         char szPatchURL[100];; S" }& @( }9 M0 H3 a
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: S5 i+ a/ j! t* [3 M
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # O/ {+ Z, l! s2 l  d
  478.       }
    - o4 |+ l4 z( @$ i
  479.       else
    % X7 v* l( y  _) z9 j
  480.       {# f$ S6 e, c/ X. J& `8 J4 {3 E5 L
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; u1 Y) O) a+ e( M/ C
  482.         strRegsName=DEFAULT_REG_URL;; d! L( ]. j! B! j0 S
  483.       }7 x& i! y9 b5 e$ W! D
  484.     }! Y6 A) @% J. g% H8 G4 r
  485.   }
    8 w* h6 @# c  E9 I8 g7 l5 M" S- g- y
  486.   return true;
    * F2 a# w; H' p7 L7 h8 ^- a9 j. H- ^
  487. }- i; p1 L- V' h& ~4 B
  488. " |9 S0 g6 v  v
  489. #include ".\ZLib\unzip.h"
    9 b, H  b4 s6 h4 S. p% O
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);, k0 l& ~- r3 w# F
  491. /////////////////////////////////////////////////////////////////////////////
    " L' k/ H1 B6 S, I6 x
  492. // CRevAppApp initialization9 L, G* u4 l; K( M- c

  493. 2 C" X  v1 F% G$ b$ \* f  v
  494. BOOL CRevAppApp::InitInstance()
    4 P! }) C& _2 s# v4 I+ Q5 H
  495. {5 e# S8 _4 P2 L% q& z: q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ' f1 i0 e! t, w1 v/ u) m2 _
  497. 4 G* W. x! E2 j0 V+ L: i2 i" G  Z. X* o
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    , @2 n' h' d$ ~  T5 l
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    - l% ]! d& Y% l- j" Q. w* z5 v& y
  500.   {
    & a1 o/ Q2 X; F9 l% ~
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");# @2 _3 C! H# \* s
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    $ G/ P0 Y: s$ Z+ t
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))) q1 ^, V. J6 p
  504.     {
    . |3 e! z: g$ H4 ^+ B3 ?/ p+ I
  505.       strcpy(szPath,szPathTarget);/ r. B1 P  ?5 N' O" s
  506.       SetCurrentDirectory(szPath);
    / ]( x0 x  Q! U0 R  a
  507.     }5 v; O! H) e8 H0 k- E4 t* {7 `
  508.   }
    ! U) ]5 i2 o7 u, i2 E1 j; d
  509. #ifdef _DEBUG
    : r4 o+ H4 U2 M3 a0 R4 Z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 ]0 k4 p. i7 K) j
  511. #else  n* G/ ?6 U5 \2 c" t6 F7 L
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , W% U, @" X; P: ?7 Y3 y
  513. #endif$ U6 F+ j3 M+ H( r& Q
  514.   {
    , Q/ @( K6 O( p% j8 o
  515.     char tempFileName[MAX_PATH];8 q1 Y4 P: `2 F8 u$ [
  516.     strcpy(tempFileName,szPathSource);1 q' Y; T4 \1 \' z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    2 h  V2 M. F! ^5 w$ q
  518.     strcat(tempFileName,"\\$CSUpdate.exe");& u$ G8 |5 V0 v" h3 q! ?
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    * \, ]! u( K& }* p( E
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);$ o! Z$ s; ?0 c5 \
  521.     return TRUE;
    , N8 H2 N/ u0 I( K% Z
  522.   }/ [% P6 ?5 u9 K! w7 ^
  523.   // Nuke 0118: Delete run.exe( [" R8 M: V( `
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );, R9 s* c4 I2 B4 o0 j9 I
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    * f3 W9 H3 K3 [+ W
  526.   if(!ReadCfgFile("Config.ini"))& L4 L. t% ^: X/ Q/ o+ n1 r
  527.   {
    : w* [4 P; V& r/ Y
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ) p( l, s- t4 n  x$ R, c+ u" a' j7 w
  529.     return TRUE;3 H) K, D0 D$ {/ p
  530.   }
    4 y% R8 K4 z/ u& Z1 N
  531.   HANDLE mutex;. I9 l4 `, o- V5 x3 e5 }2 q0 r2 d
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")), R3 a. Z6 O: M- ]# W0 A0 _
  533.   {
    ( \2 P* x8 W1 ~  I  Z) i
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)7 ?; G7 R" p1 r: |9 d
  535.     {. M' Q( e- f- }; f! z+ ^% J% f
  536.       CloseHandle(mutex);
    $ x$ Y* Z& S+ U& |7 \2 \9 l
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);6 [7 [1 S/ o- e# X
  538.       return TRUE;
    8 f+ I, z3 W, ?  f
  539.     }1 T+ \* {- w$ w3 l
  540.   }  ) M) r9 B% p& W
  541.   CloseHandle(mutex);" }1 k) R& }$ f* a% l
  542. $ W9 `8 V8 T. p( S- }; r7 y, Y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ' b; W/ O" U+ b) \2 R" N  D

  544. 7 p: Y: P0 ~" `! V1 S& s
  545.         AfxEnableControlContainer();
    $ I% ]7 h4 u5 x" u/ c
  546. , I. Q) \- p6 e- {+ c
  547.   bCanUpdate=FALSE;
    - T$ R0 }& U% W; ]  n& c# s' m
  548.   dwStartUpSteps=1;$ c: q+ B1 h9 f1 f$ u5 |
  549.   dwProgramState=AP_NOTHING;
    / `5 p/ C& B3 G8 f2 Q, f# J

  550. % s* Z3 z, e9 O; q. \0 s4 B
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);  Y: S% j7 X9 M4 [
  552. ) B" L0 E# a9 c+ \: P
  553.         // Standard initialization. o  W: a: j. Y% R: U
  554.         // If you are not using these features and wish to reduce the size
    + Y: g6 a* N1 e1 P
  555.         //  of your final executable, you should remove from the following; e6 L2 I/ \3 o: r
  556.         //  the specific initialization routines you do not need.
    ! r) X7 S5 y+ @6 s, |) R

  557. 1 q( ~% v# `2 K, n3 F
  558. #ifdef _AFXDLL/ D: w: l: A8 ]1 l8 e% B. U
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' o( H5 }" n5 J" _+ d
  560. #else
    ( S8 Q" N) a* V: d6 ^
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ! K2 _$ q: J7 P" O; ^1 f/ W; k3 J
  562. #endif7 s5 B( z5 n1 \4 r- Z- B
  563. 9 X; q! l6 w) f( C7 L, g7 y& u
  564.   dlg=new CRevAppDlg;$ j: h+ y8 I4 ?" e" f( }) D
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 @- U; `( L5 W
  566.   dlg->ShowWindow(SW_SHOWNORMAL);5 e3 y2 p0 R. w/ n% l( H
  567.   m_pMainWnd=dlg;
      @0 X6 C  ?. ~8 e) Q" Y

  568. * p/ v6 N% w) a* D) @8 L' n  d
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);% g8 q, z* B1 L# o
  570.   b1 q! ^, a  L  m2 G
  571. //  GdiplusStartupInput gdiplusStartupInput;
    - s. ^  L- ^; `8 R: {- [
  572. //  ULONG_PTR gdiplusToken;8 \( B7 _9 M) o6 h
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);- B7 X* C4 V/ _* S

  574. $ n) d6 B  Y4 [- b) Y6 p
  575. //        CRevAppDlg dlg;' J) T( p1 q# g6 C; O) v
  576. //        int nResponse = dlg.DoModal();/ q" v3 d, H- f$ J% L; R
  577. //        if (nResponse == IDOK)9 _4 A( U6 n; ~( r
  578. //        {
    + ^1 d0 ]& q$ w- w2 A4 x8 }
  579. //                // TODO: Place code here to handle when the dialog is
    + R' l+ F! e2 S9 x' i
  580. //                //  dismissed with OK
    9 G( P3 F; X* I5 t
  581. //        }
    7 w* @! Y6 j* z' v
  582. //        else if (nResponse == IDCANCEL)- ~6 ]1 b% Q5 E  q) J/ A
  583. //        {
      ?& O. j9 S% e
  584. //                // TODO: Place code here to handle when the dialog is
    ( H7 O% G( R8 Q7 V6 I7 e8 u( O
  585. //                //  dismissed with Cancel3 T  ~5 p) z9 w* _& N0 n
  586. //        }" t1 O% u' t# U* w# ~: z1 N6 Y
  587. . L  o8 x( M. N2 H. a4 ?, E" P) Y4 S: _
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ' l6 O$ u' l0 C, K, L1 t9 Z
  589.         //  application, rather than start the application's message pump.
    ) H2 l, N- p! t4 x" _" _
  590.         return TRUE;  _/ _, a) F4 X- V  j
  591. }& b% W% h5 n3 f" L! _* j7 C5 l
  592. ! Q- w  k$ w  P7 [0 s4 B& s
  593. char *CRevAppApp::strtok3(char *pSource,char *token)  c7 l. J/ ?* s: d; j! |
  594. {
    5 B8 D# k! u1 s6 P: ~# ~
  595.   int i;
    " @3 V" Y4 _+ ~& \4 _
  596.   char *szRet;
    * }6 W  [/ F/ }: N  a# b
  597. - a- s7 C2 D$ u) ]$ {( M% J
  598.   if(pSource) { itoken=0; sztoken=pSource; }2 b3 k6 b5 y2 V5 b4 L
  599.   if(sztoken)& x( h& V1 ~8 F7 r7 g; ^' n. q
  600.   {, ]( Q! O1 C. e2 n
  601.     szRet=&sztoken[itoken];$ B! y2 q- y, h% j3 }; _9 B0 r3 R2 D
  602.     while(sztoken[itoken])6 s+ `/ Z7 ^! U2 ?7 g( P
  603.     {0 d4 A, X, ?" _6 r, Q2 c& x
  604.       for(i=0;i<(int)strlen(token);i++)
    2 X$ \% r! q+ Y( u. Q6 F" _
  605.       {
    , M  E2 Z6 @6 S- W
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    : J. n4 j( t; j0 v  {: [
  607.         {
    % v2 r! t# X6 _. _, P1 q& |
  608.           sztoken[itoken++]=0;' v6 K1 J  s4 v6 _( N; ^
  609.           sztoken[itoken++]=0;
    / @( @% {; Y0 V; h% K' t! ]
  610.           return szRet;
    , {8 I5 c; H9 }  a0 N# S
  611.         }
    , K3 i' U! r5 s  Z
  612.       }3 z7 z0 t" ~) i
  613.       itoken++;
    8 X3 a4 W* w- [0 J
  614.     }
    & R, l* U1 P% k# o" U) f. B
  615.   }+ `- ]. {! Z0 m" Z. y7 e
  616.   return NULL;
    4 m8 \% Q3 ?0 m1 E( P" j9 V
  617. }& y) t/ }3 Z" X( K! M

  618. " W" W: h" C& w9 ]
  619. void ProcessProc(long Total,long Current)
    * u0 X. ^( [$ _! n8 E. \
  620. {: d/ q" P0 {/ v* y2 x/ O9 q# Q7 Z% o
  621.         MSG msg;
    2 r. V+ y$ o2 h; N" G8 b3 F  ?3 M
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ! F, ?5 D7 N- L! X' Z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    1 @+ A; Y9 I9 W4 f. v% F# X
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    * ?. A$ u7 Q. D& X6 f- B
  625.         {( F  D( ?  {/ E) K2 u$ Z) @6 v
  626.                 if(!GetMessage(&msg,NULL,0,0))
    3 w& \+ D- U& h9 u
  627.                 {
    $ ~6 E! N/ E! l4 J
  628.                         return;
    5 ]( x# a" N. _* ^& G4 Q4 n
  629.                 }
    ! F5 x* f' N& g9 t, t
  630.                 TranslateMessage(&msg);
    ( e. O! E; h* c. V1 F2 D; H
  631.                 DispatchMessage(&msg);: }" q1 H8 u; Y' W1 t* N. O' q" V
  632.         }          r, E) ]( Y4 {' H# b- k1 U; s
  633. }
    7 B- {0 |3 h( L
  634. ; t( t, ~: X( w* s* B* I6 u" V
  635. BOOL bFirstChar=TRUE;
    ( q: y8 N1 x6 Y% q% V/ X# p
  636. 6 \  A6 S8 i. u$ y6 s1 Z
  637. BOOL CRevAppApp::OnIdle(LONG lCount)/ e* Q. z& L1 Q) t7 f- H9 p
  638. {2 ~+ ^& N) i  u8 N1 F
  639.         // TODO: Add your specialized code here and/or call the base class
    ) J0 z* A5 o+ J: w
  640.   switch(dwProgramState)# i( H* _# O. Z! r# \
  641.   {# R; |# G& P# `
  642.   case AP_NOTHING:
    * _4 n* Q; k5 E& h
  643.     switch(dwStartUpSteps)
    2 z8 v* ]6 N2 e
  644.     {
    & x1 n8 T5 z- g: _
  645.     case 1:1 m8 ~) |9 k( y9 ^( _
  646.       {
    & _6 E. W6 D9 a5 `: }. J6 b3 }2 u8 [
  647.         int i;
    0 k* R9 c7 {8 q8 b' o2 i2 x8 j% F
  648.         CDC *pCDC=dlg->GetDC();
    - q$ J2 r2 P7 E3 u; T
  649.         HDC hdcwnd=pCDC->m_hDC;. L6 K& B8 @3 {
  650. //        Graphics graphics(hdcwnd);
    8 |' A' Z/ |$ g2 Y. K
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");0 H% Q6 G* Q( h" C/ r
  652. //        INT iWidth=bitmap.GetWidth();
    . i$ O6 u5 e, e* l; j: b+ ]1 u
  653. //        INT iHeight=bitmap.GetHeight();
    0 g$ D- D  Q9 O7 A4 L! b3 j# E
  654. //        Color color,colorTemp;$ v1 A$ b2 x5 F+ ]. j
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ! T  s2 @) H4 f, Z( O! U# K& C
  656. //        {0 Q2 W; v  {5 P
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % P' m* V6 l7 R; n) j# {  q* c7 I3 m, {$ v
  658. //          {
    - z6 m1 M/ f  T4 f- ^) z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    : s, m( W6 a' Q* ~. B9 \
  660. //            colorTemp.SetValue(color.MakeARGB(
    % Y, g& A+ R- u7 R+ o
  661. //              (BYTE)(255*iColumn/iWidth),
    * u" r9 b4 M- b
  662. //              color.GetRed(),
    ! L3 K; f* R4 W% ^7 S
  663. //              color.GetGreen(),
    9 I. M4 r( o7 P/ x& t$ M
  664. //              color.GetBlue()));
    - m% p. ?4 x, h
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);$ `% |/ T( Y, b
  666. //          }
    3 H! r8 D" G5 R0 U
  667. //        }
    1 l* K- x1 E+ S# {# ?( R! ]
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    5 E  C3 X6 c7 z: Y3 K
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ E  F* j4 v0 B+ z# ]. w
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");9 K$ k! B* A* w8 b1 o6 \
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 z, S# p. l  `, @0 @
  672.         for(i=0;i<240;i+=8)0 q# i" ?: [6 u' Y
  673.         {
      ~; {; I) J# ~/ A5 i* U$ i
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) f# m# J- V& o2 y. s
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 m2 d/ @/ w, o9 r) m9 M" ]6 c
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: T- n; W0 M; d* Q4 i
  677.           Sleep(33);/ y! R+ l1 M6 @
  678.         }# a8 ?( Z8 w' W0 B4 N0 _' R
  679.         Sleep(1000);2 z$ p& L/ ~9 o; o& F
  680.         for(i=240;i>0;i-=8). N7 A1 X$ g5 o' ^6 _! d; ]
  681.         {+ v$ ?( K. X' ~
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 g) O0 ]0 _, r
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & ~0 S% h7 x; Y  l; q& }
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      g2 C- |" K+ V1 r5 n
  685.           Sleep(33);
      H+ M1 r4 n( y% P; M
  686.         }* \/ W  L0 e. @: y  X  V
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);. ~9 `! O" D9 N$ M; H7 _1 q; }* i
  688.         dlg->ReleaseDC(pCDC);
    . y9 [0 J' u* V, S, _' C& z8 s+ w
  689.         DeleteDC(hdctar);
    , h) S6 z8 a- a( e
  690.         DeleteDC(hdcsrc);6 G5 \4 ]2 E: I1 x% E# {; n
  691.         DeleteDC(hdcorg);
    7 ?4 P6 R1 M: s* A
  692.       }
    ; J1 x) Y  ^+ G+ p
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    . d: ~3 v  a/ n/ `
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");+ \9 W2 u, |. j# `, x- L' S$ [! o
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    , f& j, u; r+ u! r  n4 M; U
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    : D  z6 i6 l9 H4 x: r
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( m$ ~3 q& M7 M+ y( ~! f
  698.       if(!Dn.Connected())
    , d* D% k$ j+ d% p6 |( K/ y
  699.       {
    1 x" v; r( h0 A2 h5 w
  700.         dwTotalFiles=1;5 z- F( c4 y7 ?3 u- m9 q+ G  L
  701.         dwDownLoaded=0;( D! _" I. s0 a  e+ D
  702.         bSilentStep=TRUE;/ m; A* F) S4 ?2 L: }8 g" [, K
  703.         bCompressed=FALSE;# x  B1 ~& q- p
  704.         strExtLocal.Empty();
    ( J' a2 r& F3 J& `& N
  705.         strFullName="readme.txt";
    5 m+ h6 T9 F5 y& T& k5 i+ d
  706.         dwProgramState=AP_CONNECT;; H% H  Z+ d0 F0 n6 q
  707.       }
    2 L  S' a/ Z: N# h$ Q8 n
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ! U, Y! M# ^2 m6 \7 D7 O* l: ~
  709.       dwStartUpSteps=2;9 r+ O; c0 e! I: D5 h8 z2 D( Q! b
  710.       break;4 l5 ?: G) c2 ]  F- W
  711.     case 2:) B7 _3 C1 \- {! @
  712.       {
    ( c- Q% [8 }$ i: ]1 d
  713.         int iEOF;4 f! [. K% ~4 }& e+ h( F- |- }# R$ \
  714.         FILE *fp;- `& v, ]; ^' F4 Q: |
  715.         char szString[512];
    0 i2 d; O8 |! p0 \
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");/ t9 z9 B3 {  s% r! _' H) g& Z& i
  717.         if(fp)
    % G% `% D6 M, |- M  P, z. `5 j. R/ M
  718.         {
    8 V7 N' T/ f3 S  n
  719.           do
    / h+ ^6 F* ~- M: u, k
  720.           {, |3 G1 p6 O" Y  L5 j- T
  721.             iEOF=fscanf(fp,"%s",szString);; Z+ V! C2 B$ c, x& p! C
  722.             if(strlen(szString)); e) @  R) e! W0 v9 [6 a% m; h
  723.             {
    : M; J2 J' e: s) N+ ~. C4 X
  724.               if(bFirstChar): i4 _/ I: l8 M5 j) k! i
  725.               {0 D: t( L. f4 P. ~$ t& i
  726.                 bFirstChar=FALSE;
    & t8 D6 H9 E+ P2 m) K
  727.                 bConnectIsBig5=FALSE;, ~) z# L3 L* I, k
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;% ~' @+ m  Y  \# A- `& p. N; Q
  729.               }
    $ o" H% [  o+ R, N; |3 B
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    - n0 F# z4 k0 ~; l, w1 R" d
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));. v# `% v# u4 T) }
  732.               dlg->m_ListText.AddString(szString);
    9 q0 q7 J+ ]5 e
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) J6 I3 l7 l0 n% C1 ]
  734.               *szString=0;! u8 `7 I1 Q2 a# i, X
  735.             }
    0 I+ x# x* |0 S/ S# y& d
  736.           } while(iEOF!=EOF);
    , J6 E+ R+ R) u; B1 B* Z
  737.           fclose(fp);0 W% G- L' O) b( m% ?# ^4 h
  738.           unlink(".\\DownLoad\\readme.txt");
    6 X5 m$ R2 U( f, H* c
  739.           dwStartUpSteps=3;7 E. _4 w! B1 N2 z/ _
  740.         }& `( }! L9 W- \
  741.       }
    3 x3 Y% a3 e4 X
  742.       break;
    ; c# g3 X) h) m; L: W
  743.     case 3:
    . d( {" h6 T7 W# m# v8 |) Z
  744.       if(!Dn.Connected())
    * D5 A7 s7 Y8 U6 h( H
  745.       {/ s( c# u# C4 D2 K0 Z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ) E2 I7 S& u1 X- P" x# r. v1 \" @: s
  747.         dwTotalFiles=1;
    9 \. z* B/ L" {3 _) N
  748.         dwDownLoaded=0;
    . g2 @- f! n5 m" L$ t
  749.         bSilentStep=TRUE;: y# Z2 P3 |9 `6 S, s! k
  750.         bCompressed=FALSE;
    " y* M0 D8 |- x
  751.         strExtLocal.Empty();
    ! |+ N& @; F. Q
  752.         strFullName="checkversion.txt";/ W+ i2 k7 W  P) ?
  753.         dwProgramState=AP_CONNECT;
    % x+ S/ Q+ Q2 M# d: _5 K$ }
  754.       }
    0 s* ?4 i# j4 @/ K& Q9 k
  755.       dwStartUpSteps=4;% t1 s. C# N- n' L& f/ A/ v
  756.       break;! Y# O8 u9 }8 t& G
  757.     case 4:2 F! b6 T: i4 X; r& _/ i/ H
  758.       {5 q4 _) a' v& m( U, W8 g
  759.         FILE *fp;
    9 I% E# O- I4 h9 _9 c3 h6 Z
  760.         char szString1[128];: a# A* c7 p( ~
  761.         char szString2[128];
    3 O3 C% p. G! p; \( T1 g
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");5 ]5 l/ h# o4 [- z  t0 C. d  Q
  763.         if(fp)
    , @9 H! K2 D& p+ v  b& h
  764.         {0 e$ E. X1 B( N+ |' n
  765.           fscanf(fp,"%s",szString1);& L& I' Z3 l7 H# A7 W$ X
  766.           fclose(fp);
    ! d0 h& a  d7 M. V4 C% U: B# q* `
  767.           fCheckVersion=atof(szString1);. g- ?: ?8 |5 r* A# B7 j( X" Y1 b
  768.           fp=fopen(".\\checkversion.dat","r");
    6 b6 }' x/ ^; \! O% g* T- m
  769.           if(fp)
    - V1 S6 h" M8 s
  770.           {5 Q, J5 T, V8 ?+ F3 `6 `5 V, o
  771.             fscanf(fp,"%s",szString2);- K4 B5 g. L( W' u* }5 L2 F0 c
  772.             fclose(fp);
    5 W% R$ _. f0 m6 m
  773.             if(atof(szString1)!=atof(szString2))( m1 g+ i' z5 J" q$ A
  774.             {& C& x; \' F, Q: j8 h
  775.               if(!Dn.Connected())
    9 q2 }) }: z0 H$ F2 p
  776.               {! X0 D. ?: N4 \
  777.                 bFirstUpdate=TRUE;) H) @* l! s4 i7 t. B+ W
  778.                 dwTotalFiles=1;
    ; v' }% z2 a2 b, O5 X
  779.                 dwDownLoaded=0;" t: S+ G. \3 M
  780.                 bSilentStep=FALSE;1 _1 l$ p( g' G% A
  781.                 bCompressed=TRUE;9 o  e7 J4 p, x8 w5 v" E7 s
  782.                 strExtLocal=".\\DownLoad\";
    2 l9 c! U4 S- S2 C/ F0 k, ~4 T
  783.                 strFullName="update.txt";: V! C# Y$ @% b; a
  784.                 dwProgramState=AP_CONNECT;, @1 n) f, ^+ P$ c( ?
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 l$ U  L/ V( u+ E# A' ^
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      S7 u3 i4 ?) Q4 ?% y1 p4 Y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - I3 q3 v' D* W* K
  788. ; n/ V* M, R1 i& Y7 W
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . G$ X) ~7 A# {# a; D
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    5 K' u2 g, y7 ^8 ^) @
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)( t4 o4 x# [+ @- @$ w8 W8 Z
  792.                 {' ]; [5 \4 G5 }
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");& N! i7 G4 p: \6 J8 D% X
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ! g4 p6 D" y$ b7 P( a: u+ `8 d
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");! v+ m$ C- ~% G: j5 j
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* X/ [2 E7 D+ }8 ]

  797. 2 h" O' t* u% ]4 P) o
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ l) U4 f0 ]% |! t) T! p
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. G$ [9 `" n1 ]% s8 }/ l; A) Y* F, [
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");$ V# f: X  W- ?& c  [
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  ~9 q% d* ^" m  a0 Y1 q
  802.                 }
    - C: P; i. q! h: q% B/ o% [: {# B
  803.                 dwStartUpSteps=5;9 t0 c& V2 m( ^
  804.               }
    3 |0 T- D, U8 L# v
  805.             }* r5 I6 N, X1 a/ w
  806.             else! J' i3 Z9 M7 ]4 B* n- w
  807.             {
    . N7 e+ f: H0 m/ W- J0 C2 }
  808.               unlink(".\\DownLoad\\checkversion.txt");
    * G" I! q, a6 W; B/ x9 h5 @) ?
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");0 Y1 R! n) Q" `5 K* w. W; F
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");9 y8 B# A" s: {3 h
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
      ]' O% _# _3 e! V2 y! v) t- l) `

  812. 8 z- e8 Y6 }; l. E- {
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# o" |5 P/ }" e( g& D+ D/ t
  814.               dwStartUpSteps=99;
    & E4 @5 ?1 h: `0 y6 e
  815.               bFinishUpdated=TRUE;
    ; B* o+ m9 u9 S, X/ h
  816.               bCanUpdate=TRUE;: Y1 H6 `) e- U8 N3 [$ E& D
  817.             }5 A5 m4 G  K- c7 n0 c  b
  818.           }
    % E5 I9 q  Z+ ~& I+ B5 _- M* r
  819.           else
    ( D& r0 {3 S$ ~7 M6 H
  820.           {" ]& ]1 t6 k& g$ K) V
  821.             if(!Dn.Connected())$ v( G% I  f( L' V0 }
  822.             {
    ) a. f. T! X3 g) ^
  823.               bFirstUpdate=TRUE;
    9 Q( T+ k9 F0 @% @/ u
  824.               dwTotalFiles=1;
    9 @/ @  O% a+ y# s& n8 C
  825.               dwDownLoaded=0;, o2 w2 ]3 a9 j8 s6 E. O" s
  826.               bSilentStep=FALSE;
    * v2 e, Q9 o0 i2 e' [3 w
  827.               bCompressed=TRUE;
    5 H0 i/ y) Z6 l
  828.               strExtLocal=".\\DownLoad\";
    & `) t3 x1 T- Z2 N$ j0 N, r
  829.               strFullName="update.txt";3 |8 ^. v" Z& k3 Z: C" u9 v. |$ R
  830.               dwProgramState=AP_CONNECT;+ [8 L9 _" B5 O5 ]! i5 L' V0 k
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " j. h& Q3 M3 p0 ^( e2 p
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; A; J: U) w2 m# S0 }
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 V# W+ U; T3 L' P$ @: a0 p
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 O; {. r1 ^7 M4 t0 X0 `
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ! I7 t  l6 x: v$ ?/ t
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    + q. K- D. r$ ~" D" T- a
  837.               {
    7 m- d8 j3 `- L' r: }) L
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");4 K4 Q0 [& }. F  u8 B
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    7 G9 b0 M9 `" [" U1 \
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");3 }3 M6 K$ P  D: A) S3 B8 {* h: p
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 S, Y* j1 V, Z7 F/ S9 o& _3 v5 l
  842.                 9 _5 E+ i8 j1 x) Y) U: {* a
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ [6 g" J0 q  r  Q1 v3 Q) h
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");# S7 e8 S  X! v
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( g0 A+ b2 \, h1 o' ^
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, w% Y* C; N5 D
  847.               }
    ; _1 t/ f+ }6 o; N7 l% `
  848.               dwStartUpSteps=5;
    0 H% U8 W/ R- R9 m4 L% g% f
  849.             }+ W$ [0 C7 c7 ^, x( _3 a. |
  850.           }
    2 N- z3 I2 F8 S$ \9 K
  851.         }  }2 H, T- S2 ?7 Q2 q
  852.         else
    ; g+ X$ w7 I4 F
  853.         {
    ! U+ Z/ e- x- l- |. g( Y' m
  854.           dwStartUpSteps=3;
    & F7 [1 w8 v- ^; z/ d
  855.         }8 p3 G, L5 e3 z
  856.       }
    - ~1 H3 z- U, F8 R: O1 ]' x
  857.       break;
    : ?& F* D9 M) D8 o, v; h
  858.     case 5:
    - w  o& P9 R5 F5 Q
  859.       {
    6 B! `& _+ T+ W3 m
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    8 \% P/ [# @4 D
  861.         {( i  ~& [% C" c( w2 E8 {
  862.           int opt_overwrite=1;. p$ |7 }4 F+ v% w& P
  863.           int opt_do_extract_withoutpath=0;+ L4 y  a: ]) n3 k; R, }! j
  864.           unzFile uf=NULL;
    1 W1 ^* }& t9 S& r7 ^. M

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

) u5 F: ]- {! u7 o1 q( q* u" {: }  r/ Q; l

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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