CSUpdate.exe源代码

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

5 R' z, }2 l. O1 t$ u3 r0 ?* \
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , [2 _; d* U5 o  B
  2. //
    . H5 [1 p: O" {5 e
  3. / b- ]. m4 {+ F' s, z4 n
  4. #include "stdafx.h"( A+ \- R% Q6 _/ L6 A7 S8 o5 E4 e$ @
  5. 4 F0 ]4 c1 X( t: K% V7 y
  6. //#define UNICODE& Q+ r4 V, r7 x" A# Y! \2 F% a+ o8 R
  7. //#include <gdiplus.h>
    , O9 V: E! c$ i
  8. //using namespace Gdiplus;
    + H3 `& X7 l8 ?! X$ g+ m# R* ]
  9. / R$ Y3 o" U  b) T' z  ]3 K
  10. #include "RevApp.h"3 r; A% `( c/ M( [5 v
  11. #include "RevAppDlg.h"
    " p* N1 c/ K7 Q' g* S7 T3 ^

  12. . _( d2 ]4 q8 x+ F8 v/ ~5 A
  13. #pragma warning(disable:4786)8 r& N; O+ g2 D+ v7 D
  14. #include <map>$ Y  J$ n$ Z4 e& K
  15. #include <list>
    8 |! j% P0 W' p% Z
  16. #include <direct.h>
    , N1 t; _* y  P" L- u3 @

  17. 1 N6 x! k# ]& ^- M$ C5 e6 ?  C
  18. #ifdef _DEBUG; w& u0 m3 e% }5 @, b
  19. #define new DEBUG_NEW
    & ~+ V9 R' ^4 N% r5 |
  20. #undef THIS_FILE3 v4 w8 a/ `0 k/ y% U
  21. static char THIS_FILE[] = __FILE__;
    3 l9 r, P2 B9 T0 ~9 O- |0 ~7 V
  22. #endif! |8 v- W, H- E; u) E) e1 g( `! T& `" v
  23. #include "SkinResDef.h"/ i: b$ s5 m* P* `- A% x  S
  24. #include "ChangeBG.h"
    + ~# v# E: [- m+ Q* V! Z
  25. #include "AFXINET.H") ~0 j+ o  ]  c

  26. $ o  \& @9 ^; E+ Q& X
  27. #define TRADITIONAL_CHINESE 0( F( s( `6 i1 z1 X. Q, d- b
  28. #define SIMPLIFY_CHINESE 1
    3 c3 F# F& k' u$ G+ ?5 g/ w+ y
  29. #define ENGLISH 2" o! J& H8 R+ ^" T& ~! a1 w. N% {
  30. int m_iLanguage = ENGLISH;
    1 }  b6 M/ X- m: \' W' z& m
  31. /////////////////////////////////////////////////////////////////////////////- Y3 [. ]. }$ Q& k( {+ g5 g
  32. // CRevAppApp
    4 O, c( S+ X5 z& D

  33. * x" M" ?3 V6 M
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)# J, u8 A; F$ I7 l4 a
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    $ J  j. ^, i6 _5 K9 ^
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.4 R, k  S) B9 L4 Y8 f+ _& o) g9 o
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ) h$ J8 S# {" P9 E# ?4 X) ~
  38.         //}}AFX_MSG5 `4 C. C; ?/ I% B( ?
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    3 M- r+ L; O5 M7 U3 S9 J. l, g
  40. END_MESSAGE_MAP(); z! {; l7 q* k6 C( A4 b& P
  41. - x: x. S( k* b1 ^% w
  42. /////////////////////////////////////////////////////////////////////////////  C  }9 d' o7 Q( T$ X, R/ V
  43. // CRevAppApp construction
    : Z" Z6 P$ s1 H) t& b$ l

  44. : t3 h) R5 q  D& b" j, y
  45. CRevAppApp::CRevAppApp()  V2 A, C: j) q4 Y- H; T
  46. {
    * }9 K# \1 }0 d/ }  q9 ?
  47.         // TODO: add construction code here,
    & Y9 g: Z1 Z8 A  v6 E
  48.         // Place all significant initialization in InitInstance: i* u$ i4 _. D5 c
  49.   bDisplayIsBig5=FALSE;
    7 O% w% v/ z! I$ A
  50.   bRestartUpdater=FALSE;3 F; P) ^9 b( R8 p, s5 N  y
  51.   bFinishUpdated=FALSE;
    1 k% R  x, ~( H8 V7 o
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    & Y7 l# w$ n3 u% {2 Z! E
  53.   InitChangeDataBig52GBKS();
    # c9 M9 F, H/ T9 ]2 n$ z1 K; ~) ~
  54.   InitChangeDataGBKS2Big5();) C' F1 }6 J8 b$ n3 z; L2 X6 N
  55.         //+ Z1 [0 ^7 ^, A+ x! O2 r
  56.         bClickRunExe = FALSE;2 c1 C2 @1 M2 m( T' n2 |
  57.         //3 B. w$ f7 R  s$ \! F7 q$ T
  58. }
    ' ]+ L2 O; @+ J0 l4 r& C! c; r2 Q
  59. 0 L6 g; p( k+ {
  60. CRevAppApp::~CRevAppApp()
    9 W0 g, ~3 g/ [+ I+ G' l  F* J* S
  61. {3 f- X8 `- ~  j0 X' p8 `$ ~
  62.         // TODO: add construction code here,
    4 G1 W* P* i( d$ q
  63.         // Place all significant initialization in InitInstance
    9 q! u7 J+ x( P3 R! E+ ]( x9 z
  64.   EndChangeData();
    6 c, p# D& p, M2 h2 O) Q0 \
  65. }2 n( d2 s  S. B- X; k
  66. 2 m0 m# @' P9 e# `
  67. /////////////////////////////////////////////////////////////////////////////
    & t) X; E( W# o* X, f, T  H
  68. // The one and only CRevAppApp object
    * B( K5 r3 S% E6 _' [8 B

  69. , X; v% ^9 L/ Y, V
  70. CRevAppApp theApp;4 Y' K4 R  v6 F* i: h0 f* D1 |! D

  71. 4 C' j1 n7 t; e2 A0 M4 h7 H% G3 }' _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 N1 \! J/ R6 r$ y" T
  73. {
    7 n: X! i# j" S/ s! M7 [
  74.   int iEOF=0;* T( p0 G$ e! X+ h; e  b6 V% W, P9 |
  75.   char szTempName[MAX_PATH];- v* L! ?- ^' b, Y1 N: P
  76.   *szFileName=0;
    " g) }6 m$ i3 V+ U) r4 n4 J
  77.   iEOF=fscanf(fp,"%s",szTempName);6 s( w) J) g# h2 ~
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')4 S" V, B1 ?) N3 B
  79.   {8 w6 w, e; M- a
  80.     strcpy(szFileName,&szTempName[1]);0 ?/ c7 F" l! W
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)7 J6 ?0 E4 x! O( H0 h* n3 o4 E3 v
  82.     {
    2 o! `0 e. |3 d0 S; u9 Y0 k# H/ L
  83.       iEOF=fscanf(fp,"%s",szTempName);1 R3 T) r+ U6 n9 _! |( N7 X: ~
  84.       strcat(szFileName," ");, \1 O; L1 h: k( a- h, O
  85.       strcat(szFileName,szTempName);# K' @- |0 z  A, U9 ?
  86.     }0 C9 {: ?% k  _+ O" v
  87.     if(strlen(szFileName)>=1)
    , O8 Z0 ^2 }- u( J2 r9 z+ E, H
  88.     {
    , s/ t+ `! S3 f! u. z
  89.       szFileName[strlen(szFileName)-1]=0;% q: \, p4 |, Y8 u# G( ]& g
  90.     }
    ( i7 O: N6 u9 Q" _9 g( l0 O0 b
  91.   }: R8 G, _2 [9 d) g9 ~
  92.   return szFileName;2 [. b% d  y9 {( U* A# i8 d% e% U
  93. }* B9 Y+ e7 G( Z6 \% t) g. w! \7 v- H+ s
  94. # l* s/ c! y! o8 w1 I
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    4 l. o2 r5 w* @% F  q$ u% Y  k! ~0 H
  96. {
    + u$ \. E; b2 k
  97.   FILE *fp;7 \' z& V' S3 h
  98.   char *key=NULL;* I% \4 Q( m7 ], S8 H; r( {6 u
  99.   char version[MAX_PATH];
    $ s* q3 y& s/ m' v7 d; E5 `
  100.   LPUPDATEFILE file,olds;) a5 T" S, L$ `; d" B
  101.   std::map<CString,LPUPDATEFILE>::iterator p;: W2 U( b5 U' b. D+ [# E
  102. ) s5 d# z: Q: x5 r' o3 U
  103.   UpdateList.clear();2 r( e$ ^6 z7 S- T
  104.   UpdateFile.clear();
      r5 B: q! V4 I- ]
  105.   if(GetFileAttributes(filename)==-1) return false;& f6 P8 p' ?" {- m+ g' p# x
  106.   if(!(fp=fopen(filename,"r"))) return false;; x- N, i$ S; f9 A
  107.   fscanf(fp,"%s",version);8 F& X# @' B9 ?9 e' w8 }1 R( S: @
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    " ~% W9 \7 ]0 H. L1 N5 l
  109.   while(fscanf(fp,"%s",version)!=EOF)/ U! c1 M& M7 m% p6 _
  110.   {9 R; q% C! T1 S. d
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& T1 d& F* z; A5 h4 x! n
  112.     fscanf(fp,"%s",file->path);' U3 E' w7 w) {8 t$ v
  113.     ReadFileNames(fp,file->file);
    ' {4 Y) _" T9 x" |9 u
  114.     strcpy(file->full,".");
    - i* l$ d& n: \1 C, ~7 Z3 r
  115.     strcat(file->full,file->path);
    8 [3 _' T$ Q2 t
  116.     strcat(file->full,file->file);
    % L+ a. I% v* m4 e, C
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    6 Q6 Y( A% M5 |9 W) x. @
  118.     {
    8 L' r% j2 ~& E% O* i" W. ]
  119.       file->vers=(float)atof(version);* N& {5 n  O$ s& @- F  Z. w5 k/ i
  120.       UpdateList.push_back(file->full);
    9 v: A9 R% Y7 c$ K) Q' Y. U
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    $ N4 Q: l* P8 @7 Y0 i8 E0 `0 q
  122.     }' t" f1 e& [' g, _8 k8 w8 R, R
  123.     else. B* y6 G" E& i/ M4 m
  124.     {& s7 r" O  n0 Y  \+ F) e
  125.       olds=(*p).second;
    " t/ ^7 [. ?# K: e* l
  126.       if(olds->vers<(float)atof(version))
    , e$ f3 ~4 S4 l) r
  127.       {2 J, L4 l8 n% y7 K8 K" J% W
  128.         olds->vers=(float)atof(version);
    ; Y+ p6 g, ^% F& e: X5 ]
  129.       }# U  t; j) k' L6 h
  130.       free(file);
    - S% j" ]' K+ s
  131.     }6 }2 b9 A8 }  u# R  n' Q7 a
  132.   }
    5 k  O% e0 C5 x- P: k' b1 j
  133.   fclose(fp);
    . F" M/ n9 \$ B
  134.   return true;
    0 y1 M# ^) S" U9 ]& I
  135. }
    6 _/ k! \- Y5 f% z8 w% e
  136. 2 H  j+ m' L2 t, Y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath): B; D6 C7 C2 R" A9 F" W/ u4 O
  138. {. ~+ p7 {" t8 p: C1 h
  139.   TCHAR  szFull[MAX_PATH];
      O" f4 @) H4 [. e* Y
  140.   TCHAR *token,*inter;
    7 g/ p6 z, m) Y9 A7 ]; W! d
  141.   *szPath=0;% Y1 u3 c0 u$ [+ z* i9 r8 M2 o5 `
  142.   strcpy(szFull,szFullPath);' y& u1 ]( ]1 X; x, v
  143.   token=strtok(szFull,"\\/");
    ) _& D4 D% i- p0 j' r8 h
  144.   inter=token;/ r% s3 R% n0 n" r
  145.   while(token=strtok(NULL,"\\/"))' j. T, `! L# b
  146.   {
      K; y: b0 @( @7 B" O) G
  147.     strcat(szPath,inter);6 L6 e) k& R' n% ^( v9 `
  148.     strcat(szPath,"\");* R7 [8 |8 T$ y; `
  149.     inter=token;
    ) o/ Y1 K2 A, D" H9 C
  150.   }
    0 Z' r% {9 T. h/ a+ y
  151.   return strlen(szPath);
    % d  ]* L" s. r$ u3 E+ U6 u- \
  152. }  o5 t( Z0 X) X  t- I$ p9 n: ~9 _
  153. & [3 ~! j/ T7 W- x
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 l* ^. h% T0 H. l* q
  155. {% ]$ V; C- T4 E4 e  P4 ]* O+ M. B
  156.   DWORD attrib=GetFileAttributes(Target);" m; O/ D* m: [. Q! l
  157.   if(attrib!=-1)
    ( ~( g3 f' b+ S4 V" D  _
  158.   {  y6 x' C" j8 x& J0 H& S
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , l! T0 y# M. |( t4 n0 Q
  160.     {9 o* w* j3 I. |7 O- |
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    5 @$ e  a( A6 j; R9 y
  162.       SetFileAttributes(Target,attrib);
    5 P0 O3 c6 ]2 P! @! @
  163.     }
    # I: U* B( b5 W
  164.   }
    6 k' ?" L: n, ^6 r1 q1 o
  165.   CopyFile(Source,Target,Erase);# \; f" b* b' M$ {! V( U+ |
  166. }' A4 ?$ Q3 I+ h; F
  167. $ U0 J5 q# B- n& }4 y( i& d
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)4 f( n6 H6 g  U1 ?( f, N
  169. {! }$ ^1 z" m5 \+ `
  170.      FILE *fp;) ?" a# A, O, z9 o
  171.      char  szBuffer[8192];5 u- m1 n) D& e
  172.   va_list  argptr;
    ' T6 N' \: L# }, q9 Z( h/ p3 N6 M( ^! Y

  173. # ], q+ b+ J2 F& I: C" u
  174.         va_start(argptr,message);, B0 n, C* g) M4 }& F( T: |5 O
  175.         vsprintf(szBuffer,message,argptr);
    $ o! f; r7 C( [3 _4 s5 w) w- ?
  176.         va_end(argptr);+ `) r3 ]! B$ R( C  B) V
  177.   fp=fopen(FileName,"a");
    4 Q) r4 w; J* W. q1 ^( \
  178.   if(fp)
    6 M( C: E) Z8 w# R  e
  179.   {7 l  w& z# [; w7 u; h1 G7 i
  180.     fprintf(fp,szBuffer);6 ?, q- a; V3 C7 N) F" y, u/ Y
  181.     fclose(fp);
    , d" s# a5 p. l5 Y  A( A/ T- }
  182.           _flushall();8 Q! \- p# d( r5 |
  183.   }* k3 o! W- `( ^; B5 C5 W8 b5 a4 Q; p
  184. }
    $ b) d+ n$ Q. R7 M$ P; M
  185. 5 b, `- M! H7 T0 }. q
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 n) z, _, {- D. m! M6 ?
  187. {" \. Y+ m1 o: _6 A7 {
  188.      FILE *fp;
    ) j8 A6 ?( N7 u) `
  189.     DWORD  attrib;+ l7 b$ J1 U3 i) z1 H5 o- w- n% k
  190.   attrib=GetFileAttributes(FileName);6 x4 |* ]' J' u& ]: p" T
  191.   if(attrib!=-1)
    + E+ r% w% ?' _* ]' q+ X
  192.   {
    8 g+ E9 I% ^. i) A9 O) q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);' T/ X# L. G) ~7 b* {
  194.     if(!SetFileAttributes(FileName,attrib))& F; R" G2 }# m) o! o: U' N; ?+ ^
  195.     {* F: t6 C: @, G/ L$ P# }' _
  196.       return FALSE;7 M# M  u6 b1 v& Z0 i5 }6 _9 }: a
  197.     }
    9 c" H/ B8 L0 A8 H4 G
  198.   }
    ' W1 v6 q( i6 `$ h
  199.   fp=fopen(FileName,"wb");
    $ m+ V) V2 ?+ T4 |6 X
  200.   if(fp)! ?; d3 f2 K# C6 p8 O+ L3 o
  201.   {
    ; G' f, m; M8 N8 v
  202.     fclose(fp);
    2 r6 a% I) ^7 ~0 q
  203.   }% b+ n4 Y( ]( e; Z& l
  204.   return TRUE;3 K  y% x! h3 k1 o
  205. }+ U  L2 m, y8 H4 W  s: |* C. `" Z
  206. - x" ]* O1 r8 u: _
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    6 O+ M- V# C2 n: [0 c
  208. {9 S8 c( G9 Y) x5 K4 ?: d
  209.   char filename[MAX_PATH];
    & K: J) H6 o; x& ]' x+ F  `
  210.   LPUPDATEFILE file,olds;; {3 u: g& P$ w- p
  211.   std::map<int,CString>::iterator i;
    / |. |6 n  I9 H3 n1 w4 s
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 e$ U8 q% S, a* F( }
  213.   std::list<CString>::iterator l;
    4 m: G3 `: W2 l. z# R% e6 S$ P! K
  214.   q& R' q/ |1 l( L
  215.   if(bFirstUpdate)2 h- z1 s3 o* u
  216.   {
    # ?; C0 A0 X8 ]( o" n4 f
  217.     dwCurrFile=0;* V7 J1 b7 n6 t( G& w# ]
  218.     bFirstUpdate=FALSE;
    / g/ g$ a$ |! n9 X
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ O2 W. @" n; g: r
  220.     {
    # B8 w, Q$ U7 j9 D% f, ^
  221.       dwTotalFiles=UpdateLocal.size();! j/ ]- G3 k$ I6 N& b3 a9 d  B3 ?0 C
  222.       dwDownLoaded=0;
      U5 ]4 Z1 \6 Y* l
  223.       bSilentStep=FALSE;
    0 R2 y( M/ E0 i4 w* S7 C* x5 I
  224.       bCompressed=TRUE;$ s7 a# ^% J$ s, ^$ B
  225.       strExtLocal.Empty();
    0 l, W" u. P9 c& m
  226.       strFullName=(*i).second;: d; Q" _, Q. E
  227.       dwProgramState=AP_CONNECT;
    - F6 ]4 M/ f. M! E
  228.       return TRUE;
    * }% l' r7 n+ Z
  229.     }+ w% [( I+ F/ H% \
  230.   }
    0 U3 P+ B9 T6 B5 _+ x% R: @
  231.   else if(bRestartUpdater==FALSE)1 C" J7 z, H8 w2 S% a7 v( }: G+ x+ g
  232.   {( f& x" E' v* b+ H0 i+ y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    0 M# ~# i& s+ G2 Y- T
  234.     {4 X0 O# @5 [. g. T) w/ ]& @
  235.       file=(*p).second;
    3 e% [1 U  p2 [" a) D- R% ?/ F  v
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    / I/ j: s7 ^, g. W- I& ?1 h
  237.       {
    ' x9 B; z. \9 X- \1 E7 b' Y
  238.         olds=(*p).second;  z  d* Z5 H$ k: u! r& I2 h3 ]( [
  239.         olds->vers=file->vers;
    4 E* d$ w0 v7 J
  240.       }9 g  P( @  f* W3 l  t) ^
  241.       else
    " r% k. `/ q5 T
  242.       {
    2 g! h! a- D6 C
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # W- A- c, J" _9 c. g/ U$ a
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    0 n. q+ ]( U) x( s9 a1 K
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));! r2 Z! M% B6 V6 z
  246.       }
    9 U8 T$ n! Z/ ^* E" H
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    6 |; s/ @% e) W! N. D& V
  248.       sprintf(filename,"(%s)",file->file);# K- X5 u$ G1 ~+ \& y8 d9 h/ K0 o
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 j9 W& V) m; }" K
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }- A' F2 b$ u2 P$ f( q. D$ e
  251.     }
    8 x0 k/ }* q+ B
  252.     dwCurrFile++;, G" ]1 I* I  g* V6 q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ G, A/ u# O( U
  254.     {
      y: G" {5 a8 s5 s- v
  255.       bSilentStep=FALSE;6 N2 l5 o3 H% }5 _; |$ S# D+ M
  256.       bCompressed=TRUE;- p9 C# S8 u+ |9 n( U: f% z
  257.       strExtLocal.Empty();$ k4 z: m" a# i
  258.       strFullName=(*i).second;
    7 P  w; i9 j" ~5 J5 ?5 \
  259.       dwProgramState=AP_CONNECT;
    % f" z  m* S; _' p% F
  260.       return TRUE;5 {: d; F# K' d  E! [/ ~0 V8 a
  261.     }
    6 @# H" H) H0 |4 E' ]
  262.     if(!bRestartUpdater)
    1 [- m' N) Q" D+ r/ u- P0 l$ a
  263.     {( g- Z8 E4 ~# Z# Z) u# V* _+ z
  264.       int iCurrSize,iFileSize;+ i/ v- n' V# _4 Q0 ]  G1 @
  265.       iCurrSize=0;- J# h" q- a% h% y& P" q
  266.       iFileSize=UpdateList2.size();: Q/ e0 y8 @0 \9 [/ f
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    / f; f7 U4 m' A  g( L
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");' ]* w3 P* E2 D$ w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");4 l% Z- n0 v- P7 E
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ M9 U5 L8 L; e  L' ]
  271.       Fclearf(".\\update.dat");1 Z$ M3 x% m8 C! l1 f' I9 K$ M. E- D
  272.       Fprintf(".\\update.dat","Bloodyf\n");4 z) t6 @5 ~: k9 l# i9 B$ F& w
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)8 [" d& ^, U2 i7 ~/ \8 F  {& _
  274.       {
    6 F8 I: V1 Q: ]0 m+ C+ T, e8 m
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())$ E% ?2 R% d: K; V- ^) ?2 \) f
  276.         {" ]! D) M' G% ?9 g) E8 r+ f2 K& X
  277.           file=(*p).second;; q/ V- P  j' h8 Y3 [3 M% x4 J
  278.           sprintf(filename,"(%s)",file->file);
    8 r" R: U! o; q, w
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& P2 E- D$ y# \) T* y
  280.           iCurrSize++;
    ! Y: }- l9 p0 a  q/ w$ z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    5 ?/ J) ]9 @2 }* d
  282.         }
      l) b2 j% h. Y1 N6 q7 P) Q+ j+ S
  283.       }8 Y$ b: h3 g# P, I6 K! @. k% z, l: X( B
  284.       unlink(".\\update.txt");- l6 D( o7 g# ^0 ^
  285.       unlink(".\\update.tmp");
    6 |1 j; d& j3 k
  286.       Fclearf(".\\checkversion.dat");
    4 u! P6 B9 I: S  j- ^. i/ p- X1 L
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    + K2 q4 c2 T/ f& ~( C
  288.       if(UpdateLocal.size())# N. j# x9 G( r  r9 ?, `4 G
  289.       {- U" s+ V: \6 D* ^: ~3 Q' t  r+ x: O7 {
  290.         UpdateLocal.clear();9 i* L* E( O3 h/ u
  291.       }9 D  R2 n$ e- |6 E
  292.       if(UpdateFile3.size())
    4 h, _) R4 V- [: Y4 h( ~
  293.       {7 Q, C) [% q. l! S& `  E2 p% l
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 w1 X4 t0 N4 Q8 Z, i' |; M1 n
  295.         {4 z7 n9 F6 O9 W2 N6 r- z% P
  296.           file=(*p).second;
    9 N  `; {, o2 `
  297.           free(file);
    3 T4 v4 q, Z6 g# b3 u- P
  298.         }! \8 r+ P% l8 r6 C( f
  299.         UpdateFile3.clear();) {# c( |1 i# |. u  z
  300.         UpdateList3.clear();
    6 e# z4 G  T! L" Q7 u! q8 l6 V
  301.       }# ~6 z* S) ^( T* J& l
  302.       if(UpdateFile2.size())
    9 f( t2 n$ ?* J* K
  303.       {7 V/ b4 K  ?9 h
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ; l7 c2 f& s5 x* s
  305.         {9 g& h5 s- c# F; F
  306.           file=(*p).second;5 c/ C* z6 z  F% W5 u! x
  307.           free(file);
    " F8 Y! l4 v, B3 o6 ?# D4 L
  308.         }# q: g, y! S5 V! q% I
  309.         UpdateFile2.clear();
    , y2 Y8 U9 l+ r# T7 p) t
  310.         UpdateList2.clear();
    4 [( g0 O  {( @2 z
  311.       }$ q) `( `9 u4 q% J- F: [2 @1 p3 W
  312.       if(UpdateFile1.size())
    0 a" j% i+ t+ D) e9 I
  313.       {: w( d; Q% R4 E/ e" q0 v
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 z/ b( X+ @0 W- k2 |3 K% }
  315.         {4 a5 x5 s" g, ]
  316.           file=(*p).second;
    ' K# t7 c# D6 j7 C, n
  317.           free(file);7 s* G) i' {; z# [5 k! e
  318.         }
    # \3 ]" ?. Y$ b& p% ~
  319.         UpdateFile1.clear();
    , O7 X1 @% p" b: z
  320.         UpdateList1.clear();
    ; ~$ J% I7 B1 o3 ~6 e
  321.       }
    0 i% M* E4 L; I7 M) N
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    * s$ K6 L  T9 A* p  }4 r( z1 b- v
  323.     }
    * Z( Z+ G9 z  N
  324.   }. `- N' k* x9 j" j" ]) K% x
  325.   return FALSE;* b9 V- p: v) d
  326. }2 k6 y4 g' x  K. m( c+ M; @

  327. ' `. C: v& l5 o$ D6 g$ N
  328. void CRevAppApp::ClearAll(void)4 s- V" b& \9 n  K' K2 ~& f6 M: q
  329. {
    4 `/ t  _" e* E+ Z" u' ?* N* a
  330.   LPUPDATEFILE file;9 E9 I: q, {; c' Y1 l1 A; q' o
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    + Y2 \6 h5 m0 \+ E6 D: |8 E5 E1 E

  332. & x+ y7 `. B  t% j5 H7 y2 n$ \+ ]
  333.   if(UpdateLocal.size())
    8 U' G/ z& B3 `6 B$ e
  334.   {
    + q9 n/ d+ N8 I; W( C# y
  335.     UpdateLocal.clear();! y+ {* N. g# C  V$ a
  336.   }0 }$ {' X% H) M7 W* D
  337.   if(UpdateFile3.size())
    . ^! Q" p/ w, ~6 i0 i0 ?: X
  338.   {' T" k# s' {1 ?/ [0 C
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ N, U# H% B2 A5 `& o/ G
  340.     {# K% U6 c. O' D4 j/ T( b! @! l
  341.       file=(*p).second;% c( U+ _6 y7 t, o( w, H3 c) }
  342.       free(file);! m! r6 g8 m. V  W" E2 K
  343.     }  j3 @; k" y! |9 y# \  N
  344.     UpdateFile3.clear();( L5 Q& f) W0 E: T- {3 k6 k
  345.     UpdateList3.clear();: p6 _8 ^0 o" c
  346.   }2 C$ |9 b! `7 k! Y# ]( s& H
  347.   if(UpdateFile2.size())
    0 B2 y' C0 e* ?- W  Y; m
  348.   {
    : n! E: i! J6 N( _) Z( L; L8 ]! ?
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 T2 U  T; Z- R1 ?, t& W0 ?8 J
  350.     {
      k# O4 E5 E# Z6 G- C/ J: Q0 L
  351.       file=(*p).second;& y7 A) K: z  H0 E3 K- O
  352.       free(file);3 j9 \% G  p& Q3 d" i1 K
  353.     }
    # S7 T6 W. m: [) P. A7 c
  354.     UpdateFile2.clear();1 M, X+ }8 {. X, |; o/ |
  355.     UpdateList2.clear();- M: m& d7 S4 W# M2 |
  356.   }6 ]0 `. h$ P" [% B+ K
  357.   if(UpdateFile1.size())
    1 g* ?& Y8 [1 n0 o; A% v5 S; a7 S
  358.   {' [" W7 B9 V3 s* d" f! [& [
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), w* J, B' b2 K* z  F* E: f1 s
  360.     {
    9 ~6 c& X0 L/ v7 x1 l
  361.       file=(*p).second;; u, W5 Q6 U/ L) Z
  362.       free(file);, C9 L4 a- D* ^' P' W0 J
  363.     }
    0 Q7 G6 \# q# t- C7 r# u
  364.     UpdateFile1.clear();+ ]" H) ^/ U7 W7 q- U
  365.     UpdateList1.clear();: n' p7 c- M7 Z  C% U+ m
  366.   }
    5 E; B* w8 \: E7 `! m2 j: \
  367. }  
    5 b; B! \  M( g) y
  368.   
    " J4 M! N5 x) F9 o% e: B$ M4 N
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 P! c9 ~2 M# H" `! z- M: i8 b3 {- l
  370. {: C- p- \9 \/ K/ M, v9 h* f
  371.   int c;0 _/ ^1 `9 g7 L% i
  372.   LPUPDATEFILE file1,file2;2 R* [# H/ m) Q- _
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;9 A5 D- ?8 v7 y& k  d% e, d% S
  374.   std::list<CString>::iterator l;3 _/ ^1 i) h! U8 Z6 p3 A6 O, A+ c
  375. 4 v- E$ Q8 ~* g& A
  376.   UpdateLocal.clear();
    ( p4 ]/ w9 |2 B
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);8 [! `9 R2 w$ Y. R8 q
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    * B0 s% Z9 W3 F2 X
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);6 H9 F5 F$ K! l% j7 k
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);( j! _$ c1 V5 u& I! ?
  381.   if(UpdateFile3.size())
    ! s  u) k0 N) @/ l# s+ l) G
  382.   {  L  ?2 c3 I/ ?% g+ l# u
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    # `! u$ ]0 X4 g; N/ y7 u6 C
  384.     {- x, x  W. g) a
  385.       file2=(LPUPDATEFILE)(*i).second;
    " `, @" a8 N( Q4 w
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 R& U" @9 O4 n2 d, z
  387.       {
      j# R- d& E4 n& K, [; g
  388.         file1=(LPUPDATEFILE)(*p).second;. R: q7 u, e3 ]# b1 [( X
  389.         file1->vers=file2->vers;4 d/ E/ O* S: r  Y; h/ z: T* J
  390.       }
    ) V' G; n' S. p6 X6 s
  391.       else7 p3 x7 u# u: U+ x2 J/ X. {
  392.       {
    ' y7 O# g3 [# w4 m
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 B2 [0 m5 F$ s& D( S: v( U
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));, l0 C7 e, {3 h& Q
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    / O& K- B8 D0 e+ D/ e( w0 W+ E
  396.       }& ^: u! W0 q9 J2 X  n0 h# Q1 `
  397.     }
    3 n2 G# k. C+ W) k4 l: p
  398.   }* B  b& T# q. n) g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 S& Q2 f4 S  [6 B2 d* H3 z. `5 Y
  400.   {3 |' U2 m0 p' M+ d+ y6 l$ h
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- [: M1 [) ^6 {' a) Z
  402.     {
    / X; L5 i+ {4 a8 b- m" k
  403.       file2=(LPUPDATEFILE)(*i).second;& M4 ]7 B# w9 s
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 _1 R) F  `; u- M, w& s' a" n
  405.       {
    ; I+ m- B+ y, M9 P
  406.         file1=(LPUPDATEFILE)(*p).second;: _2 C* ]2 ~! D' ^4 K
  407.         if(file1->vers!=file2->vers)6 b) t) H0 h8 ~2 L3 ?. v
  408.         {
    7 ^4 ?) J- `1 }( }3 g3 n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) h- m: T9 W. m$ {$ D5 ~
  410.           c++;) H  \- y+ M! v0 R$ c; e" f, G: N
  411.         }
    8 ^0 R) ^6 E) i; O5 i6 c: x% ?
  412.       }
    . M* b! R6 D& R. r, a
  413.       else) [" m, _- z3 G; `
  414.       {
    8 ]' r# m2 r- ~0 }8 R
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / x# ]) e& y% y2 ]" s
  416.         c++;
    + ~5 Q9 M+ s5 ^
  417.       }  ]6 }3 I7 V1 @1 ~3 r4 u8 K$ L7 X
  418.     }
    8 s7 r7 `7 Q, r5 t+ Z8 p$ P" f
  419.   }
    , Z. H! i7 k" m# q. U* K
  420.   unlink(".\\DownLoad\\update.txt");
    6 U/ ]2 d1 r& O0 c! o5 S) R% s/ {
  421.   if(UpdateLocal.size()) return TRUE;
    * j5 S- s0 r* Y6 h' t1 }
  422.   else                   return FALSE;
    ! r* t& O: T% a. \
  423. }
    ; w) [9 E, s) C  ?! _% M" H
  424. 2 b# N2 O* K7 G+ k2 }
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    # W  j  W- g( ]- K; c9 V
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"0 u" ?* P% ]/ v( x- U

  427. / |1 C) f9 p8 I- F, `! B3 A8 c- c5 I

  428. - q, D4 B  I) j0 e* x

  429. & ^3 }4 P6 s: C- Y0 k* O
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    3 \4 X" Z6 X% [! D/ o
  431. {
    2 y9 M' k* S6 e. v3 g/ f& [
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    9 Y# q- @0 f* K- L6 m+ l+ M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 V, G5 h. ^; x5 u  J6 W: H# n
  434.   {
    ! W1 l, z" d" p
  435.     char szLanguage[50];  l! {1 b6 `; E! K
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 z! [9 x% k  L( U: Z# @, U
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 k& U4 B# x& L# z  U) c4 w2 e
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 W# {* `+ h8 ?3 t+ D- }, Q
  439.     else                                   m_iLanguage=ENGLISH;
    : p4 q: t; F' V
  440.     char szRegister[100];
    3 s7 {9 e! C% @1 J+ A
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , h# g% ^. @5 `9 w$ \" [
  442.     strRegsName=szRegister;  _5 m- Q- n4 c4 n
  443.     char szPatchURL[100];9 x1 X) \0 J4 ]" _
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" Z( K- i, ~8 H
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 c& _4 R/ S+ L% U- r
  446.   }8 T6 K8 y3 i& E8 m! c% X9 h
  447.   else" j% B' w3 S* s  z" T. n8 h  f
  448.   {
    # p. x. B; w+ t3 o/ s( B9 N
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( N3 }: d4 T0 U$ I4 m# B
  450.     strRegsName=DEFAULT_REG_URL;- O( l  ~' R# ~4 ?; o  q
  451.   }
    & U! \6 \2 c  E5 Q) v/ M, T$ E' f
  452.   if(GetFileAttributes("hosts.ini")!=-1)7 ?5 f4 c. {) P/ b# |
  453.   {9 G) ^0 g& |8 H1 M
  454.     char szIP[50];
    7 U5 c/ q3 ?" f* [( R) b8 y
  455.     char szDIR[300];( i2 y. k2 ^- Y: w: C- L6 g
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ( a- v% g6 p4 w7 u8 K- E4 d* X. H
  457.     {' Z  j& n- T8 A  O# a: T" h
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    4 N( F9 G) Y  r* N# W1 E  |, o
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    3 S0 d7 @. {) j( ]% [3 ?- Q3 v
  460.       strHostName=szIP;: J# Q* A5 ^0 K
  461.       strHostPath.Format("/%s",szDIR);- y+ n0 j- D) [. \1 p0 f6 i
  462.     }
    4 K' `  }! u" M+ r1 j
  463.     else
    7 M- d/ a* {, x/ |0 n( X2 w2 D
  464.     {3 ^6 O/ C5 Z  W4 G. _$ t' I8 z& e; K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 b( c) j# F' x; }+ K" S: i
  466.       {
    ! m4 Z8 }: k3 g% U- g
  467.         char szLanguage[50];: O( L/ o; u9 i1 y, T$ d- ?
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) I$ ~* Y/ f- e9 s3 d4 M% p, A
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" Y6 q+ F/ ]0 \6 \$ G
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 b' Q- T0 r4 }9 K8 e. C  _  X
  471.         else                                   m_iLanguage=ENGLISH;
    ) l  R* Z2 U8 ^6 L# j# q8 `
  472.         char szRegister[100];
    : G6 _; Y# V4 k8 D$ v
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% R! D5 l) [! O; x1 H
  474.         strRegsName=szRegister;0 X4 p5 R5 _" t" W7 E
  475.         char szPatchURL[100];
    % g) E- v7 o/ N- Q. b+ n6 h2 j8 e& k
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");2 \/ l$ x$ }' V. S0 W6 c% Z0 K
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. e' Q& z) ?) K
  478.       }
    7 v1 v: `* d! R# i3 [4 R  h  ^
  479.       else  {2 C. n# N% |
  480.       {* H$ P  q( J6 h. ^+ k$ ?# B
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ ?; D. A9 n# A5 o8 W
  482.         strRegsName=DEFAULT_REG_URL;: _/ u. ?) R# j+ d! ?6 I  S- S
  483.       }
    ! v% Y2 d+ W0 ?, e
  484.     }: c' I  [! o: m9 t( V6 g/ \! F  V
  485.   }7 M1 r* V( X3 @1 B  _: v
  486.   return true;- u8 |- K$ u) X6 P. l% q
  487. }
    + L# [: |; ^8 |0 v
  488. : ?- N  k' A- f$ Z* \0 o, L6 c; d
  489. #include ".\ZLib\unzip.h"- w# g$ X! A  ]  }9 H
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( d& o$ p9 U' x
  491. /////////////////////////////////////////////////////////////////////////////
    % P$ }# N9 s, z+ X( @/ P* H) m
  492. // CRevAppApp initialization
    ' N- E( j5 R/ @; f
  493. 8 B1 F( p" Q1 P
  494. BOOL CRevAppApp::InitInstance()
    " H8 s% M0 K3 m3 w5 r
  495. {" J6 P: s7 P5 _9 [
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];% e; M) H3 [$ p5 F* J
  497. ! ~3 N% [- o: w0 K; u5 }
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    - g4 [$ d* l7 [) |$ J* @
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))# B. r; z' Q6 U9 o+ }
  500.   {9 A7 C; [1 R9 i6 Z% f4 A" n
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 g6 h; f6 z2 K' @' L
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    & r, K5 I( ]9 [" K0 M
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))1 ~% @8 e. u+ u2 |4 Y4 w
  504.     {
    : S. l# y* @4 @& e% c% B$ e% U  w
  505.       strcpy(szPath,szPathTarget);8 {$ m9 I) s% t/ [2 Q8 U
  506.       SetCurrentDirectory(szPath);* a- c7 r5 R3 n+ g
  507.     }. k" Y, e( G) v- Z5 u+ M( K
  508.   }
    / @4 |; o" y$ @5 `* l
  509. #ifdef _DEBUG
    % X5 j: t1 F5 e1 _& d4 T- {
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % `% w1 X4 t! U* T* K
  511. #else8 x9 l5 ^2 t7 x( Q
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' {- y0 e5 z; [2 n* P3 o" ]
  513. #endif
    & ]+ [! U6 q+ H# Z) O- l* s7 F
  514.   {
    5 X# |% D* q7 ]& P/ p
  515.     char tempFileName[MAX_PATH];
    . w, t6 M9 a/ x% L9 p" _7 u
  516.     strcpy(tempFileName,szPathSource);
    * K4 \! Z9 `: N8 `) ]) m
  517.     tempFileName[strlen(szPathSource)-12]=0;7 D) a) [, z9 @! R
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    9 ]/ D; P# o0 c
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
      i& R6 s4 ]4 K; m: j3 i9 P1 O
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ) |3 s1 A# L# n- N8 _" z% X
  521.     return TRUE;. n9 _1 p* c* l% Z" m; @# Q
  522.   }* A3 V- c- `. w& m9 B8 P# J
  523.   // Nuke 0118: Delete run.exe; c- g; T& n/ A) h5 A) z" P  I
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );- M8 F- m2 ], T, F, \
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");: R9 w. g4 _, k, \  F
  526.   if(!ReadCfgFile("Config.ini"))+ |8 F9 p: N# c' C5 a% S! P
  527.   {* T  G1 V$ G0 a- G( B* O, K
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    / ~9 D& D1 V, y$ g" E1 o' O+ `. |2 Q1 U
  529.     return TRUE;
    " ^( Y" ]. p9 [3 T& L7 X6 E
  530.   }
    ' E' C$ Q5 D5 |: I. }( Q
  531.   HANDLE mutex;7 v  E* ?/ x7 `2 Z# r, D. \
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))$ d! ]0 [% g  s, c6 [9 m/ t) B6 V
  533.   {
    5 ^* ?( O$ U9 l$ ~
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    & U) O$ S! t! X2 H) p/ N6 r
  535.     {
    , i0 k& u: D! K: [9 \; D
  536.       CloseHandle(mutex);" x0 G/ `: D! Z! @2 i7 ]
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);' Z" A" i, }  w: k
  538.       return TRUE;
    , L, Q" p* n: L( I
  539.     }2 j4 x; n% E- v& ?9 O* [
  540.   }  ; h" b" I" B( P+ A
  541.   CloseHandle(mutex);
    * B$ P# s: [1 [. U4 u

  542. . x% j, q7 ]) o: H1 S: D" z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    : A8 g. q9 z) y3 W; C' N, ^

  544. 6 B" F' C4 o" Z
  545.         AfxEnableControlContainer();7 a% d0 ^5 Y/ E4 {  U
  546. 8 N7 A! F/ s! Q/ K4 u0 a9 L
  547.   bCanUpdate=FALSE;! U3 Z+ g  C; W- L) Q8 G8 l
  548.   dwStartUpSteps=1;. l; _6 C8 x# }
  549.   dwProgramState=AP_NOTHING;
    9 `# ]3 p; Y( h. `0 P5 m7 t
  550. 4 [( K5 t, m. F+ j
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    - I  q+ n0 I6 G& ^2 [7 ]# X, S

  552.   @3 ~, [2 E! n
  553.         // Standard initialization
    9 K' ~6 n/ ~  l& ~
  554.         // If you are not using these features and wish to reduce the size1 `( {  s5 k! F0 L0 s1 s! L
  555.         //  of your final executable, you should remove from the following/ Z7 V. e4 V1 \# F
  556.         //  the specific initialization routines you do not need.
    / A2 Y5 T* n5 }+ j4 F8 y' X) H

  557. 6 |3 c' H. p7 K) E7 B$ @
  558. #ifdef _AFXDLL
    3 k5 t# G: A) S- v3 c
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL. z, p7 k/ a, T* o  w0 y9 \. d
  560. #else
    2 B0 {! `' b( E. e
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically! v  q8 B, ~3 D5 l- s* O
  562. #endif
    $ @. b6 y) a9 Y* @/ R5 o+ D
  563. % \" u! r' D% T) ?" X# }1 O
  564.   dlg=new CRevAppDlg;
    5 K* _/ S! _8 u" L6 C  T3 E& [1 N0 \
  565.   dlg->Create(IDD_REVAPP_DIALOG);7 M( e3 x+ V2 L8 Q  P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);8 h# Q1 ]! U! L9 f  p% E' v
  567.   m_pMainWnd=dlg;
    * F/ i9 h! O# _* j0 D0 b  k6 B

  568. 0 F" |/ I, F* x4 w) @- r
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);  Z4 {7 q4 |- r* m
  570. 4 l1 W) q% M5 t
  571. //  GdiplusStartupInput gdiplusStartupInput;
    # |4 J$ P2 ]5 H" y& c
  572. //  ULONG_PTR gdiplusToken;9 S# P8 n! R+ o& \' B) Q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
      |# L  g+ Y4 m% y9 ]
  574. ! o  w$ w! z. R; T- ^
  575. //        CRevAppDlg dlg;4 R- Z: j2 k/ S
  576. //        int nResponse = dlg.DoModal();8 v* [& F% a9 [6 E! z% x
  577. //        if (nResponse == IDOK)" m% i$ V/ u! P0 x$ k6 ?# a- c! A
  578. //        {' J$ J6 w* L8 N  L1 {0 Y
  579. //                // TODO: Place code here to handle when the dialog is, F* o. b& f1 J
  580. //                //  dismissed with OK  Z$ I5 I. R6 `# Y; c
  581. //        }
    3 h5 p. K& t7 ?- e: u4 Z- c- O
  582. //        else if (nResponse == IDCANCEL)
      l0 Q9 K* K8 O
  583. //        {
      ]  l9 P: ?; |
  584. //                // TODO: Place code here to handle when the dialog is
    8 O: \5 z/ a+ `" M, q
  585. //                //  dismissed with Cancel
    5 _% y# {( r* w2 w/ i% a  |; u
  586. //        }
    $ C8 E& l8 R% r
  587. ; y, s2 A+ |+ Y
  588.         // Since the dialog has been closed, return FALSE so that we exit the( a  p! u1 k* W2 [# V# ~* r2 j
  589.         //  application, rather than start the application's message pump.9 @+ b4 M, q1 l. z
  590.         return TRUE;- J3 O- C, v9 U3 o1 |6 I
  591. }% |5 X; D# d" K! _" H
  592. . m7 N- t$ s5 e) C& c2 r# C
  593. char *CRevAppApp::strtok3(char *pSource,char *token)$ i1 H  [6 v  x
  594. {
    ( ?3 [2 T8 l) g- N; W
  595.   int i;+ J5 `3 Z+ z7 t+ H7 c7 C, V
  596.   char *szRet;
    6 q! S4 i; y! K% @
  597. 7 k+ T8 q& ^8 I- M, |3 g0 C
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    % n/ x' u, V, M- ]
  599.   if(sztoken)1 t' \' T1 H3 L
  600.   {4 m# s; x$ L6 Y2 l
  601.     szRet=&sztoken[itoken];
    * F( O' I; t  v
  602.     while(sztoken[itoken])
    4 m7 a) p9 e7 F$ h& F, v6 {" p/ G
  603.     {1 I4 N$ w7 w# n3 Q, \
  604.       for(i=0;i<(int)strlen(token);i++)
      q" `% n; z8 S/ W/ s. ]) R
  605.       {) J6 B4 s2 b, u. V
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])% q) Y6 m. `, l- u: R, D
  607.         {
    ' A" a$ H3 X' L* ]
  608.           sztoken[itoken++]=0;
    4 H' a2 Y4 I8 E' `8 D8 D7 D
  609.           sztoken[itoken++]=0;
    ' L4 [$ K- g( L- _1 \
  610.           return szRet;
    4 {5 D7 \$ g: o+ O& p8 x3 z, t( Y
  611.         }
    & d7 p# H( z1 B% n: D
  612.       }% F, M  x: X+ X0 |" z7 [6 t. M
  613.       itoken++;
      ^+ t7 E* r7 ]
  614.     }
    , I( m: r0 _; h, ]# V5 x8 X
  615.   }) ?. O% \1 i0 `! O& q
  616.   return NULL;
    9 q' x* A" @/ C
  617. }) H$ W5 ~7 t8 Z/ W/ o( D

  618. 0 j3 t' n2 V7 v
  619. void ProcessProc(long Total,long Current)
    ! c9 `8 E) M: N
  620. {
    5 s6 V( z* C. \0 `7 {
  621.         MSG msg;, x  w. K: a' z, e( M9 S+ M
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);: ~' R3 @, t8 z! p# v2 W2 B
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    , b3 o! y9 `2 i" g
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))0 ~$ q; ?2 U: e
  625.         {* j" B+ c+ `+ F" d4 F# Z
  626.                 if(!GetMessage(&msg,NULL,0,0)); b4 J2 k9 Z7 a5 w; a
  627.                 {
    + t0 g7 Y  p8 V; E; y
  628.                         return;* Z- |. p- K/ O, F4 T
  629.                 }
    9 ~( V2 Q+ @' r, j/ v, |
  630.                 TranslateMessage(&msg);/ `& {" a$ r' e+ Q& I
  631.                 DispatchMessage(&msg);0 G+ u4 s5 n: S! I6 B# w3 |
  632.         }       
    9 n, o8 l7 {$ _% G! V9 B/ G) o
  633. }
    / O, C2 P0 l) K- x- m; m8 f3 [

  634. / o% U& f+ J& K4 s
  635. BOOL bFirstChar=TRUE;6 o1 @" M2 E- F1 w1 q, Y
  636. * U8 `/ P! c' m; P! C: R
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    * G4 o! P$ r3 ^* N
  638. {; k2 w8 h( x6 s
  639.         // TODO: Add your specialized code here and/or call the base class
    # A! Q; G+ ]* N! w1 h' R
  640.   switch(dwProgramState)" h. L$ }9 E( u. B2 F6 p
  641.   {- ]) h3 L% j7 p4 R/ O) @) |8 V8 k% h
  642.   case AP_NOTHING:7 ^! e, _- c- r$ z; b# s8 D
  643.     switch(dwStartUpSteps)$ m! z6 F" K% k8 N5 ?# V5 p$ J
  644.     {; m- d! d. C8 o% d$ h: |
  645.     case 1:( R0 L$ n3 }3 }: B% G
  646.       {
    / V: n; I6 L# [: w. R
  647.         int i;
    + Z' O) B- M, w4 ?, [
  648.         CDC *pCDC=dlg->GetDC();
    1 l6 l6 J3 ]9 e7 h
  649.         HDC hdcwnd=pCDC->m_hDC;8 s* Y9 a% q6 X$ _$ B% ^/ d( `* Z
  650. //        Graphics graphics(hdcwnd);
    * e) [$ U7 V1 ^! ^
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    & w6 A% y0 m3 t7 w) S
  652. //        INT iWidth=bitmap.GetWidth();
    # G& n4 h3 B6 n8 s
  653. //        INT iHeight=bitmap.GetHeight();
    / S% I% Z& |8 C7 D
  654. //        Color color,colorTemp;
    * |+ e5 L, e+ w$ w/ h% Y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)9 ~* b) Z: D8 w  f; J
  656. //        {
    ( H4 u; N: l& U7 z
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ; P7 f) Y' M2 w
  658. //          {& N( }% t, k) |
  659. //            bitmap.GetPixel(iColumn,iRow,&color);+ Z; l+ F: G9 V* ?2 o9 L0 h9 g" r' V
  660. //            colorTemp.SetValue(color.MakeARGB(
    . M5 i0 |/ p2 I/ B, `, }* L- d
  661. //              (BYTE)(255*iColumn/iWidth),6 x, X/ u+ ?/ A5 H3 J% {
  662. //              color.GetRed(),
    / r$ k& o6 ~3 R: H, R
  663. //              color.GetGreen(),# [, L% u0 l" `0 _( ~! w# K- s
  664. //              color.GetBlue()));4 y. S* Z& u) l) D" z/ F+ F4 T9 M
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    . I* F/ {/ W! s& z& W
  666. //          }! |- O) Y0 k+ x3 o" f$ C
  667. //        }
    # Q; a3 z5 D) m1 @, n8 x7 L5 ?* @
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    & k" o+ r  G& f9 c3 A* _' b
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 p2 p3 |, @7 ]/ O2 z  e
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    7 \( o: D% o+ A
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 E3 G3 ]: e# F/ G; W
  672.         for(i=0;i<240;i+=8)  B3 w6 T) S- q! l
  673.         {, R" f$ `# o, Y8 c& d. C
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);# G1 k3 i0 x; Q; l" i
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 M& M/ `( Y& ^1 g0 |  F
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ _3 i* b! ~. p1 ]
  677.           Sleep(33);4 ^7 O8 m0 s& A% T, @7 p
  678.         }
    8 Z  B) G; u3 J1 b
  679.         Sleep(1000);- \4 m" W- q" N/ h: _% D; k0 r
  680.         for(i=240;i>0;i-=8)5 j. O- p1 V& N% `* W* {
  681.         {
    . a; k4 J% H; C# B
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % `+ |$ W8 Q6 B5 V" L: \7 x9 p" W1 R
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  O7 d; K; s% Z8 w% |1 X
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 m" Y5 J) a8 l+ t2 k
  685.           Sleep(33);! C3 F- l7 p' q6 D
  686.         }
    " s  J4 K( ?1 u9 N0 A& ?& S5 U
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);; v; y) g" V8 o2 E, [! c
  688.         dlg->ReleaseDC(pCDC);& x, S/ {: V0 U
  689.         DeleteDC(hdctar);$ L( E8 d: K* e& K+ e6 c$ E6 ^6 ~
  690.         DeleteDC(hdcsrc);
    ; H& S7 Y. O% x. a
  691.         DeleteDC(hdcorg);! Y: g, N  u8 `: ~$ D7 C
  692.       }7 `& @+ s! {* `) z+ [- g2 W
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ; E* \5 y0 i, h
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    * Q9 ^# N, t: J# I$ m5 s* X& [
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");1 G/ C4 L5 C9 B; |/ o
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");2 y0 i) x) k9 V2 B7 }/ {
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 u9 }$ F8 S9 Z( I; b  J3 ?
  698.       if(!Dn.Connected())
    ( m  I/ J1 _3 r( |1 `
  699.       {
    5 Z, v* N. r" [; k0 v0 z" u
  700.         dwTotalFiles=1;2 y7 h- z- C6 K8 \, `- Q& D1 Y9 }. `
  701.         dwDownLoaded=0;0 V% t: H% u( N2 d0 w- ]( O
  702.         bSilentStep=TRUE;
    ) V% C0 S4 J8 T% b: [4 `6 f
  703.         bCompressed=FALSE;
    , a9 |3 s8 G& T0 e& M$ W
  704.         strExtLocal.Empty();
    / u6 r; g, n- q8 s- D7 P# N& `
  705.         strFullName="readme.txt";# |! e- ^8 t7 _; @5 E& u, B: w
  706.         dwProgramState=AP_CONNECT;; c) p( r5 M2 s* ~
  707.       }
    % G9 _. S3 W6 O0 v3 a
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    $ u( ]3 d/ p/ }  c( \/ B
  709.       dwStartUpSteps=2;
    0 v* d. I7 z1 a
  710.       break;
    ) ~5 U& k3 G6 r) t  @5 V  _' \
  711.     case 2:
    ; G( |3 [' h6 a4 Z
  712.       {
    ( v* p8 d5 O  _, `
  713.         int iEOF;
    1 O+ T2 \8 b1 Y2 t/ E$ V( E
  714.         FILE *fp;! S  \  C7 f8 U7 g# _) h
  715.         char szString[512];+ s; |6 O' K  z0 f
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");+ R3 I: q9 N& N8 ^0 d& K
  717.         if(fp)7 L, I) S& M' k0 Z! A; A
  718.         {
    4 l) c7 L: x- P5 ^* Y7 q
  719.           do* o/ R0 M5 H; O6 w' g
  720.           {
    ; M: ?2 n5 }- D( D
  721.             iEOF=fscanf(fp,"%s",szString);
    % W* A; g/ u# ]8 {6 I' D& w
  722.             if(strlen(szString))
    5 o0 S" ]& o4 y1 ^
  723.             {
    ; @" r+ G1 d9 B; D: {
  724.               if(bFirstChar)
    + A: m, `. |7 g/ V% {
  725.               {9 z+ g. V3 B* G
  726.                 bFirstChar=FALSE;
    : s" ^) {. g3 f) c5 P
  727.                 bConnectIsBig5=FALSE;
    ; k0 A7 N- I1 ?- E: W5 L7 P
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;8 k/ F: b: O: x
  729.               }4 X# w- d, I, G* _1 ^7 C
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));" V7 c  i& O. G
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));: i" }# m' C2 H# d
  732.               dlg->m_ListText.AddString(szString);+ [8 q. g: x( ~" Y( v( s
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , R6 }& I/ Q( r" r
  734.               *szString=0;
    % _& x9 N7 }- m7 {
  735.             }# [/ D) C# o  d6 H' `8 @
  736.           } while(iEOF!=EOF);
    " w6 h- L7 b( n" j
  737.           fclose(fp);' U# i3 M- u5 M
  738.           unlink(".\\DownLoad\\readme.txt");
    % L3 S( E+ ]( M1 h+ I+ Q
  739.           dwStartUpSteps=3;' c( u4 W' N: I
  740.         }. V, b7 m9 B& ~
  741.       }6 H1 U$ J; w. a
  742.       break;4 y* Z' R2 ?( Z, o
  743.     case 3:
    " G  \4 ~% a4 ~+ ?8 W1 V; q
  744.       if(!Dn.Connected())1 W8 [  i* w; O% W7 P/ \: T
  745.       {0 j( N# ^- B4 S, I! G& G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);- C* y) ^( Z$ J: ?. o
  747.         dwTotalFiles=1;
    + F- ]* s( Y9 i
  748.         dwDownLoaded=0;1 ^: v4 W9 j3 L* {9 H
  749.         bSilentStep=TRUE;
    1 f+ v8 P6 a+ I8 i
  750.         bCompressed=FALSE;& d, @' B5 o1 r4 {2 r4 A. O( f
  751.         strExtLocal.Empty();4 q4 g6 D2 \* Z  M
  752.         strFullName="checkversion.txt";6 O7 x: N5 ~7 e$ @6 n
  753.         dwProgramState=AP_CONNECT;
    0 W: W7 _  R+ ?+ O
  754.       }
    1 X& H& B8 o* s8 }
  755.       dwStartUpSteps=4;
    * w  s+ F2 @$ T8 ]
  756.       break;
    $ O+ c0 F0 l3 g
  757.     case 4:  q* L# Y  J: M, Q8 f2 E6 D+ d6 ], `. P
  758.       {: a0 ]/ I. B, Z- J2 ?5 Z0 ^
  759.         FILE *fp;
    ; P- [: g: i- ^* o& P# y6 B" }
  760.         char szString1[128];+ t2 }; ?4 j1 ?- A$ G6 T
  761.         char szString2[128];& ^7 _3 ~6 g$ H+ w
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # n7 b. F: V. h8 ]  m9 i
  763.         if(fp)
    ; l# B1 s8 j6 s" e8 y; Z5 ]9 [; Y
  764.         {7 Y' F5 D. t; j  t2 ^$ r! o
  765.           fscanf(fp,"%s",szString1);% B2 }8 r* {& f) P# g
  766.           fclose(fp);. s+ W; ]6 I" l
  767.           fCheckVersion=atof(szString1);3 `8 _5 o5 ?, [$ k1 @* m( G
  768.           fp=fopen(".\\checkversion.dat","r");
    * h+ X3 p, K! i' c3 F( H
  769.           if(fp)" ^  W9 ^4 K+ f: C
  770.           {  ~* s' p* B& u  Z
  771.             fscanf(fp,"%s",szString2);
    3 ?) x/ e% K# e5 K! k) }% ]
  772.             fclose(fp);! T1 _% t6 k7 [/ p( h5 S. K( f
  773.             if(atof(szString1)!=atof(szString2))
    7 b, [; e5 G+ ^+ O" ^
  774.             {
    7 o$ h/ \: j0 b% {
  775.               if(!Dn.Connected())& x' L3 Q1 a% `; c- d
  776.               {
    6 N$ M" ^) _! b6 {' e- B; T9 n/ F
  777.                 bFirstUpdate=TRUE;% E3 L) q8 f! l8 q
  778.                 dwTotalFiles=1;
    # j# D& D* z  q# V0 z7 \
  779.                 dwDownLoaded=0;3 z  v) [  V8 f
  780.                 bSilentStep=FALSE;
    * y1 O# e  h, A' m" R
  781.                 bCompressed=TRUE;
    # x' s, {: A! I5 E* B! p
  782.                 strExtLocal=".\\DownLoad\";
    2 y, A  T2 \0 k
  783.                 strFullName="update.txt";( b" H& l8 q2 p4 p3 r8 l! F
  784.                 dwProgramState=AP_CONNECT;; t7 T, o2 {- W6 U  ]0 n$ ]2 P
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 p1 Q( h. c9 Z7 [
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( F7 ^0 ~: [: B: z8 ^' `( l
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; E7 |  C1 f! c
  788. $ {: B* ~! i+ G) r: }; v! Z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  z; Z7 a! a+ l4 E5 T
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    % x7 g# V; b& {! d2 W
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)% R- U" q0 U- X; A
  792.                 {5 [' T+ P. t( G* Q* D
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    & r4 L1 Z' o" ]7 q' Z8 L0 Y
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    1 b" f6 V3 I7 _5 e4 H
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");& S* y# z0 C+ e. [; g; P9 Z) ]0 c
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" l' B9 |0 F) h2 K7 Z. {$ D, W

  797. 7 _% w" M) I. V/ s, b7 l: \: A% P
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ }  {$ b: i3 n0 u  s4 ?0 C
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    5 `8 H" ]/ v4 }0 q' Y! K) U
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 n) R0 ~6 N! h! S5 n) m- R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' p3 y0 A! B7 Y, p4 U
  802.                 }
    ) M7 Y$ u: t* ^% ^# a
  803.                 dwStartUpSteps=5;
    ' ]" u2 x0 P; R2 k1 f2 l
  804.               }
    1 D3 ]6 V& F0 d, M1 ~
  805.             }9 ^$ G" t  g2 H# Q
  806.             else; c" M. d2 L% e' l8 e; t
  807.             {
      ?5 G) x. Z: f
  808.               unlink(".\\DownLoad\\checkversion.txt");
    . G+ L4 W6 Q% ?) f
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      G, `( ?& T! |5 ~4 W& O
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    . u' V$ [# y2 m6 `
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    8 t8 s- W" O; w& ^, c$ q: G" {2 G
  812. # l9 L  R# D7 u+ n5 O9 W* N
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) H2 P) B" B) F2 }! c$ m8 C
  814.               dwStartUpSteps=99;; ?& w' G$ O( n" ^; o/ @* O
  815.               bFinishUpdated=TRUE;4 I" ~2 h  t" y5 g
  816.               bCanUpdate=TRUE;( V7 j  _0 W  x" u
  817.             }5 @1 p% X% B$ H  S
  818.           }
    ( T( _6 X9 y3 k$ ^4 L5 u/ {
  819.           else
    2 U9 B; ?" y0 U% o3 ^2 U
  820.           {1 o1 M9 a$ H+ K/ K% l$ T
  821.             if(!Dn.Connected())
    5 Q: \' C, ?5 w5 n
  822.             {
    - z+ V' i! S2 n% Y
  823.               bFirstUpdate=TRUE;* m9 ~  f8 [( a
  824.               dwTotalFiles=1;
    . K3 X' F+ J" @) h3 S
  825.               dwDownLoaded=0;) V5 S4 G( T/ W6 `- x8 I" Q
  826.               bSilentStep=FALSE;
    $ S% M) i6 S* m' o% R6 Y8 g
  827.               bCompressed=TRUE;
    % K& b$ Q3 j4 M9 X# Z0 B
  828.               strExtLocal=".\\DownLoad\";
    9 o# G* y, k* _' S
  829.               strFullName="update.txt";' N, [$ Y4 M6 R. D' d8 G
  830.               dwProgramState=AP_CONNECT;! \1 u& P6 x5 a% F5 z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - Q3 a5 F* x3 O( }' S
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" C$ G8 d) }0 B+ W. k
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; B1 E* \3 X7 }1 _: R. _5 ^
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' k- m5 h/ ^4 T: M
  835.               unlink(".\\DownLoad\\checkversion.txt");# x6 q- \. B& |% g
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)# w- F+ m& t, M6 k
  837.               {5 r. `' L* m1 C% t% R8 t7 U
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    * M! R  J$ I% [8 m+ w
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    / n" v  F$ Q. [# i
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");! O4 h" S8 \4 V0 _" e
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , Y+ d( K' r3 M' ]+ v" m. M
  842.                
    9 B2 c" u& p2 R9 U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 @, r# @4 f; l1 j
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    " G6 q; t3 n. r1 M
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 l" u- b/ {7 Y- f# S$ [
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 w  z9 Q# \" |7 ]+ Z  t
  847.               }
    ) M7 Z" s4 ^3 C) f8 B% l
  848.               dwStartUpSteps=5;
    & r. P+ t5 W* V8 T# R
  849.             }5 n6 d- O: D' }
  850.           }5 T& b% t- @0 v+ G, Y7 f2 d+ h
  851.         }: d8 {7 n: I- f6 s  ?
  852.         else0 D. U9 }4 Q+ Y' p" ?5 [
  853.         {
    / Z! R. ]# t* Y" \2 z" E. \; s4 C
  854.           dwStartUpSteps=3;7 \, p% j, f2 m8 s+ V/ H  d
  855.         }3 b: l0 S! w, _+ ~+ y2 h
  856.       }
    " }0 u1 f4 N+ O
  857.       break;
    1 ~/ k# s, j# g* Z9 H) r
  858.     case 5:
    % P- ^1 L3 m! z
  859.       {- `4 Z4 I" Y' A5 c+ t, ^2 X  S& K  w
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)9 v# H2 @5 J0 w6 s7 v
  861.         {, b, y# z' ]) m' ?" X+ @) m- a
  862.           int opt_overwrite=1;
    $ I! D2 i) Z6 H7 E
  863.           int opt_do_extract_withoutpath=0;1 |/ H; D  d. k' E
  864.           unzFile uf=NULL;" \! z8 j0 K6 g) B0 z

  865. / |, P! Y) ?& {: |( f
  866.           uf=unzOpen("Wsa.zip");
    : O+ M, v1 i% ]" Y' u9 g9 v
  867.           if(uf)/ T% I0 o# t1 D. A  j9 O
  868.           {) F' [! ~+ K- L
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 I$ m9 P# C+ X
  870.             unzClose(uf);9 f" ^& j1 w, }9 g9 c; x
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");& ]4 l1 w6 ^: A* m; f
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ; ~( X. ?" }( ?2 E# g  F  B
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ; I4 X1 v. M" A" V+ M
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; H' \+ {. @% L+ D2 S" u
  875.           }
    ( L. g0 L( r* r( M
  876.           DeleteFile("Wsa.zip" );
    , y) B- S8 i- C: R5 D  Q
  877.         }6 Z! q( g; a$ H# I- S8 V$ d2 h4 i7 N

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

! y  |& y: ?0 V" }

評分

參與人數 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客服返回頂部