找回密碼
 立即注册

CSUpdate.exe源代码

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

! E7 v0 e  _. G/ y5 g, U
  1. / RevApp.cpp : Defines the class behaviors for the application.6 h% v. e3 R& s1 M$ L2 v& H; y
  2. //; L; r! v& I2 m% \
  3. - \/ \" b! g1 ?8 @4 I8 F& z
  4. #include "stdafx.h"/ ], W7 h5 r: ~# Z, C+ |; Y% f2 J4 r

  5. ! a# z. n# P, D, L/ M8 F# I$ r2 B
  6. //#define UNICODE
    / d& E1 o9 n* j1 {" y* d
  7. //#include <gdiplus.h>0 [0 d. L% I. S4 j" I4 x2 I
  8. //using namespace Gdiplus;
    1 o  M5 w: y! O2 C
  9. / H8 U( T# Z& H  \# x
  10. #include "RevApp.h"7 Y. C" S; v1 f, `) c
  11. #include "RevAppDlg.h"* H0 i* n( E$ p: m5 ]
  12. 8 f: |" b5 k/ S  F0 K! B; t) f/ ?3 V
  13. #pragma warning(disable:4786)
    ' r' z- C) a& j$ h2 Y5 ?
  14. #include <map>$ b. A* Q5 J4 y* x
  15. #include <list>) m) f% }+ }4 H+ _  j) ], z
  16. #include <direct.h>2 A; I* t0 U3 j- w

  17. 0 S4 G' q; J+ O
  18. #ifdef _DEBUG
    ! c5 k; ^1 S0 y! H2 r6 I& D
  19. #define new DEBUG_NEW5 X8 J$ z2 ]& m, p, [+ ~
  20. #undef THIS_FILE
    $ d. {5 z3 V% C  M( k, V- l( H, O) b
  21. static char THIS_FILE[] = __FILE__;% @  [2 i, J; p& x5 P4 h: H. K* q
  22. #endif; K/ N: p5 L8 i4 T% F3 O& J. V9 a! z' U
  23. #include "SkinResDef.h": ]8 d; {. U; y, \' X  D7 l& T) `4 G
  24. #include "ChangeBG.h"
    / }. d4 B# O9 Q; S1 O
  25. #include "AFXINET.H"* z& g' u/ v) f; }* g

  26. % R; ^* C7 I' o
  27. #define TRADITIONAL_CHINESE 0! d$ L3 H9 b) l" p
  28. #define SIMPLIFY_CHINESE 1/ t; _" V* J; t  s, a8 e
  29. #define ENGLISH 2
    3 B- p* \( O) n, G2 h: a
  30. int m_iLanguage = ENGLISH;
      J/ W# y1 P/ w6 p( Y
  31. /////////////////////////////////////////////////////////////////////////////9 S  l! Y5 s5 ]$ Z/ s, z
  32. // CRevAppApp
    7 e( {! O( \% k
  33. % j$ ~1 E3 l; ?* L( B$ _
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)7 }( _, Q& i* b
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    # u1 s( i3 H' w: O! L
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.& N0 V' |; M0 p* Y! z+ B
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    1 C/ V7 V, U# z6 s3 C/ S2 Q/ o
  38.         //}}AFX_MSG# }  O) Q+ ]& j1 G7 n1 d$ ~- x- \
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)" S/ k$ T6 L0 |- Y. U
  40. END_MESSAGE_MAP()5 S: ^7 X& x2 e2 A

  41. 4 A* J7 c9 K  Y$ e1 o. P
  42. /////////////////////////////////////////////////////////////////////////////
    * d. t# M" ?1 A" n4 V; G
  43. // CRevAppApp construction
    ' ^6 f" y. m; Q& r/ c7 [

  44. 7 I7 _! m7 \* H+ _6 g( B
  45. CRevAppApp::CRevAppApp()) b$ I& \, @8 [
  46. {3 I" J: k1 r9 ^7 r6 U- A
  47.         // TODO: add construction code here,
    5 J* [6 r4 _( X/ o2 O* @
  48.         // Place all significant initialization in InitInstance+ W1 \& G! z$ k& b, ?, {$ h
  49.   bDisplayIsBig5=FALSE;9 }6 n" ^5 g! b' w  s  U
  50.   bRestartUpdater=FALSE;
    - K( B$ a- v  t5 B1 R1 d
  51.   bFinishUpdated=FALSE;. t* {+ k7 e! D0 M5 R% L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;/ G+ J9 K9 t! z0 Y0 I! Q
  53.   InitChangeDataBig52GBKS();
    3 V9 q( _9 b6 O
  54.   InitChangeDataGBKS2Big5();
    , }  ~+ ~- P  T$ H0 Q) J) [6 Z+ ~
  55.         //
    8 `4 H4 }) w: `5 Z
  56.         bClickRunExe = FALSE;
    + P- K3 ^* h( H: E0 T# [
  57.         //' h! F; n% g" w; M
  58. }
      R$ ^& v0 O( w! h* T2 g! F

  59. ( |4 w# Y- k' r
  60. CRevAppApp::~CRevAppApp()9 E* J' Q. u8 P% t
  61. {4 c3 e6 Z7 A* k2 R1 b' K  B- C; T
  62.         // TODO: add construction code here,- ~4 s4 m+ f7 z
  63.         // Place all significant initialization in InitInstance
      ^( r* U4 ?) ?, k# V* i; j
  64.   EndChangeData();
    ! n2 ^8 A+ m5 X. W/ a9 P
  65. }0 r% X. h0 U7 Z  d
  66. # q+ W2 k6 w/ i
  67. /////////////////////////////////////////////////////////////////////////////; I7 K* B8 F; a; r- a( R
  68. // The one and only CRevAppApp object
    " {7 y% L6 U7 g& H+ j& k
  69. $ f; i/ J% W( F$ Q
  70. CRevAppApp theApp;
    ( J, v" n8 u% w$ j; v/ C
  71. 9 Z0 ^9 c5 s' H2 j) k
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 \5 Q7 I* K# \( r- i' h
  73. {, a- ^8 g; Q  o3 K7 z; T  B9 b
  74.   int iEOF=0;
    : H, Q- p2 {$ f9 E$ ^1 g! d
  75.   char szTempName[MAX_PATH];$ N3 j( `: _$ x( [/ J
  76.   *szFileName=0;. n* V+ @# B  {/ V
  77.   iEOF=fscanf(fp,"%s",szTempName);% a$ S7 E4 K. y6 W
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')* P5 d# P; p6 O1 ^
  79.   {8 ^2 Q$ r) \5 m7 w! x3 Z) c) T1 e
  80.     strcpy(szFileName,&szTempName[1]);: ?. K+ r% q, v0 G2 L
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)+ k0 m3 U) W/ O2 O  o9 g% X0 d
  82.     {, U$ L/ E  {( Y6 a! p
  83.       iEOF=fscanf(fp,"%s",szTempName);
    1 ~1 E5 v+ i; {0 I, S9 y$ x
  84.       strcat(szFileName," ");* Z5 f3 a: h5 i
  85.       strcat(szFileName,szTempName);! H4 K* K* C9 ], w9 P& v$ a3 M
  86.     }) R. H+ I- A; j# j
  87.     if(strlen(szFileName)>=1)
    , H, T; k* X7 z) p4 E
  88.     {
    ( x* z6 y3 W9 ~7 }# P" q, h
  89.       szFileName[strlen(szFileName)-1]=0;& V' A7 Q/ W- f$ U! ~# \
  90.     }* `( k$ l& H: V
  91.   }) w" v( V- m/ @. j
  92.   return szFileName;
    & y( k3 q1 e; S
  93. }
    ( l' q0 v8 U* q1 q

  94. 2 L' Z9 @# p# ]) ^' ^$ U/ E
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    2 u$ x& K$ E9 C" I( f- `( K
  96. {# P$ u1 J* ]* Y( }. Z
  97.   FILE *fp;
    + M8 v1 |; K5 w$ k
  98.   char *key=NULL;+ M4 I. L: _/ Q# a( }
  99.   char version[MAX_PATH];& f, a3 c9 Z9 `+ M( ~
  100.   LPUPDATEFILE file,olds;6 {7 d: o! I; X  N6 ^1 f7 d9 T
  101.   std::map<CString,LPUPDATEFILE>::iterator p;4 E- j# n& z& P7 ^  ^( s
  102. " n; Y8 @' Z" p5 n8 U/ I8 D$ P
  103.   UpdateList.clear();! `1 q. K6 Y" S! a0 ~
  104.   UpdateFile.clear();
    " q, a- j5 V" M$ v
  105.   if(GetFileAttributes(filename)==-1) return false;
    3 q2 R1 ^+ ]8 _7 A
  106.   if(!(fp=fopen(filename,"r"))) return false;6 e& t/ G, D0 H  l$ W3 [
  107.   fscanf(fp,"%s",version);7 f/ T( _+ c# u* b! P' H: r& o1 s
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }# U% }( |- |+ t
  109.   while(fscanf(fp,"%s",version)!=EOF)
    " B" O6 W' X- a/ P' q6 K
  110.   {
    8 c0 R4 \. i( J8 y/ q
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& a, ?/ k4 v; b- u8 P" y/ s
  112.     fscanf(fp,"%s",file->path);
    % }2 ?  U9 |  s8 F6 k. Q
  113.     ReadFileNames(fp,file->file);
    # o' p; Y% J; U1 x' h& e
  114.     strcpy(file->full,".");
    # q- l( _  t  k: W+ z+ x
  115.     strcat(file->full,file->path);
    $ G! b& a+ }6 W# K* |. S, Y+ o
  116.     strcat(file->full,file->file);7 ?' n! _8 K0 Y2 Z; O
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()), ]4 L& D8 w8 L; A& c; b( m8 m
  118.     {
    & j$ e! H. _6 ~$ ^, @
  119.       file->vers=(float)atof(version);0 C9 d. m9 T+ Y4 }
  120.       UpdateList.push_back(file->full);0 W) V2 g: l, ^
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));: N2 {& a- K; D8 d
  122.     }" L: |/ i6 e. ]# @  }' C/ I
  123.     else
    $ y8 T0 c8 _2 Q0 h
  124.     {
    0 {' m3 t. A* y! w. `
  125.       olds=(*p).second;8 d! l+ k4 e" n& v
  126.       if(olds->vers<(float)atof(version))  X( h3 G2 z2 H# d
  127.       {
    ) c, F+ M4 w9 t) V. }5 C% `
  128.         olds->vers=(float)atof(version);' d, q  F2 \$ e$ n# q. u; [4 n/ P- Q
  129.       }
    ( H- E+ e" j* _% B9 ^
  130.       free(file);
    " M+ y% x6 t1 I! `3 I/ m
  131.     }
    1 T0 b" s9 K" t1 i$ U9 h. J6 ]9 J
  132.   }
    ; }+ p% r; Z1 v' Y9 }8 n
  133.   fclose(fp);3 Q# l3 F+ ~2 [8 h. m% A- Y
  134.   return true;
    * ~( s/ h3 a/ w1 g
  135. }
    & V' r/ W1 B/ ?5 Z6 M9 B

  136. 6 Z4 E. M! r' m6 z' c' D+ i2 u2 e
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! \+ t. X' f; g' R# b7 P. O! g; {
  138. {
    : V7 a; L7 T0 r4 h% Q$ a4 y+ \
  139.   TCHAR  szFull[MAX_PATH];: o$ ]! _( M+ y! D' V7 ]6 x" L+ [4 T+ S
  140.   TCHAR *token,*inter;( N  X# u2 i7 J- h% p# f
  141.   *szPath=0;
    : p4 O' j5 B; n. {& z
  142.   strcpy(szFull,szFullPath);7 J  _' F, Z. m9 ?1 Y+ _
  143.   token=strtok(szFull,"\\/");; x' `6 O9 O8 ?$ z0 J/ R/ }( m* j
  144.   inter=token;
    : r$ S6 H8 t# H
  145.   while(token=strtok(NULL,"\\/"))
    ) ^6 G! }. p- y5 M5 D; J
  146.   {4 y6 U' j  C9 o9 H2 {
  147.     strcat(szPath,inter);
    ) A8 H; g/ m4 J1 H+ c9 V
  148.     strcat(szPath,"\");
    ) t/ d. y1 h1 m0 M0 S3 L
  149.     inter=token;
    . f# Q3 A' j. V) k( ?: {# w3 k# l
  150.   }4 X' o1 O8 {" k% D
  151.   return strlen(szPath);3 k9 E4 o1 I9 g/ z
  152. }
      f. d3 r5 K4 ?! |7 |) T8 k
  153. 9 k2 ^5 R, d9 T1 W
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    % a5 M( {  _0 f4 W9 G+ v
  155. {# c$ ?$ E2 d' V0 M+ C0 J6 f
  156.   DWORD attrib=GetFileAttributes(Target);
    0 n  `0 E( b. j" |' }
  157.   if(attrib!=-1)
    ; O% ^. E2 R- X
  158.   {
    - o( j5 P) p' D0 u) P$ Z" P$ ?  ]
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    7 t% p' }* W! N- E, o
  160.     {/ @" ~, G, |' ^0 o5 U# [. M  s, U
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);) G  \7 W. N2 ], I) q" _  z/ L
  162.       SetFileAttributes(Target,attrib);) @7 v6 D9 a  o
  163.     }
    5 `+ [9 q1 K4 F( H
  164.   }" f/ [4 b' U4 j
  165.   CopyFile(Source,Target,Erase);! U: F$ @" N3 Q  g  \: z7 e
  166. }9 n2 z3 J. a" d" k9 d4 }
  167. 2 c+ U7 D- u  B1 G
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    * `7 U# C* u4 o. T
  169. {
    . s& C5 o; g1 Z, G  Q; c
  170.      FILE *fp;
    1 ?6 Z1 Q, H4 H- ?- J- q& _
  171.      char  szBuffer[8192];
    : t" y0 ^* ^! R, I  C# ?. T
  172.   va_list  argptr;. s7 B2 u% _/ z5 W1 B& A! ?

  173. ; ]9 l( c( W' c! B: a& Z9 f
  174.         va_start(argptr,message);. n, L& J3 G0 w5 Z# F8 {
  175.         vsprintf(szBuffer,message,argptr);
    4 [1 K3 J9 z6 x. {# I. V, M
  176.         va_end(argptr);% r. L. o: l# _. T1 S
  177.   fp=fopen(FileName,"a");
    # M( c+ o4 }8 H8 n
  178.   if(fp); x, U0 A# U. K4 ?5 _
  179.   {
    $ R$ K: s# J: H( R. y
  180.     fprintf(fp,szBuffer);
    6 T) ^# A  Q0 i( j; T# A% q
  181.     fclose(fp);0 L& K, f, z5 `, ]
  182.           _flushall();
    " i, C/ n+ B1 m& ^7 b
  183.   }
    + h" z4 h. t6 j7 Y! l9 ^3 T
  184. }' c9 S. W  j$ T4 C: ^: M  Q1 G* g7 Z% x
  185. ' y7 y$ v8 T+ @1 k3 P% Q7 V0 h
  186. BOOL CRevAppApp::Fclearf(char *FileName)6 O  l! k7 Z/ z% ~0 o% a/ u
  187. {, `) B; W6 i$ {' B" }7 E: }% n
  188.      FILE *fp;
    9 Q+ o% E4 C2 W  p' B# w
  189.     DWORD  attrib;
    + O  u  @1 J& z: h
  190.   attrib=GetFileAttributes(FileName);
    ( m: g- J- g* k
  191.   if(attrib!=-1)8 ?8 o/ n4 P1 m6 v. }  e; G
  192.   {- k9 r: ~( H$ Y  H! h: C
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    $ H: w+ q8 \+ ]$ d
  194.     if(!SetFileAttributes(FileName,attrib))8 E; r5 z% {. O; a# P
  195.     {
    # D2 m( L8 u, y: }, s( C5 _" r
  196.       return FALSE;
    8 h8 S# \( |' j- q& t
  197.     }
    2 K8 x) k! X! j/ X: |
  198.   }
    / N  G; S9 o1 |
  199.   fp=fopen(FileName,"wb");! ?; K8 @+ b% D8 r1 S' O6 z
  200.   if(fp)3 m. Y5 z' @$ v5 b4 v
  201.   {
    2 u0 r1 ]( X# z% z; u4 p# B: E' r
  202.     fclose(fp);- @1 }, S  [: O+ L$ g3 O! M
  203.   }  o2 O3 q* u/ n$ m
  204.   return TRUE;
    ( I' H8 P/ g2 {/ u& X5 y' q
  205. }
    + g: a5 ?; C; U9 d4 J2 i
  206. ' E/ [, a5 t6 d8 W
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      u% T0 K4 d% Y) v$ W7 [0 T0 s
  208. {
    & _! J* I& v! I
  209.   char filename[MAX_PATH];& i. x' A, w" j9 M$ N
  210.   LPUPDATEFILE file,olds;" ?' \! t3 c7 h4 R& T' J
  211.   std::map<int,CString>::iterator i;- E* m( ^( O& V, ?; F7 G- P! O
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 E2 I* `: r0 X% I+ ~
  213.   std::list<CString>::iterator l;
    ' |) ^5 x& l5 v; c+ ~
  214. ; M6 E9 g; N* n5 l4 |
  215.   if(bFirstUpdate)# k  A& G2 t( I& ~: r3 w
  216.   {' Z# b- L" Y7 s- U
  217.     dwCurrFile=0;
    3 r* T# y0 [9 O/ Y
  218.     bFirstUpdate=FALSE;6 o. u5 Y# G6 H6 C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    6 ~/ W3 V3 s7 I4 C( z# L  U. V7 d
  220.     {# R  q) d7 H7 s9 a5 Z& a% S
  221.       dwTotalFiles=UpdateLocal.size();
    9 Z9 g  Z3 Y( T# U6 \, P* Q
  222.       dwDownLoaded=0;& |( {. ?- [4 s
  223.       bSilentStep=FALSE;! Y! E& o8 M) Q* r% s. O: b3 k7 i
  224.       bCompressed=TRUE;$ W0 J: F) A6 g. W; s) ~3 Y8 I; z
  225.       strExtLocal.Empty();. F1 b- D, q8 \7 p
  226.       strFullName=(*i).second;
    * k' x+ K7 u+ _3 q
  227.       dwProgramState=AP_CONNECT;: a7 r' `, v& V. s- ^
  228.       return TRUE;6 E7 q& _: T7 r6 |8 Y
  229.     }+ O( R- R  @) x0 q
  230.   }& E) H: Q! z* I: r2 [
  231.   else if(bRestartUpdater==FALSE)
    0 a, p& T5 @4 g$ L% d: s
  232.   {' X3 q9 L: l+ {4 {" L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ; E, o: A) B( g
  234.     {
    + K  Q* ~( @' S- X8 g
  235.       file=(*p).second;3 K' t: d4 f0 E' i5 i( K( b
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    # V" _+ j/ Z2 p6 g3 \. w8 t- H5 T
  237.       {
    4 j7 ]3 B7 ^1 D
  238.         olds=(*p).second;
    2 p  l: Z1 C: Y; i/ ]8 Z
  239.         olds->vers=file->vers;9 v" K  p5 E% H1 L* e9 d7 R
  240.       }
    ' M% x0 v* ]3 b0 v
  241.       else2 i& G5 }8 d5 f
  242.       {' E# q( a/ s' t  \
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 n# u$ P6 q1 K* q/ \+ t
  244.         memcpy(olds,file,sizeof(UPDATEFILE));& L+ M) F1 N. \) ~7 Q. B& @2 p
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    / C, ?7 j7 |5 N- h( ~
  246.       }! g3 g  A0 ~! g; N0 ]
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");& L5 r) P7 K* V  b7 L" B
  248.       sprintf(filename,"(%s)",file->file);
    / X- m3 T7 g8 P9 q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 h! }% i3 p8 _9 K' y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ; Q/ Q' M0 w, j$ }- e& F4 V
  251.     }
    ( S$ K, j* d7 g6 G. k
  252.     dwCurrFile++;
    ; C7 U( }; Z% N  k2 I4 m" H
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) S: d) I1 t5 {9 w- U
  254.     {
    ) x: z1 [; o$ w% ]5 K. l' j
  255.       bSilentStep=FALSE;
    1 r# P& |. R( H( y) E3 M  G9 _4 Q
  256.       bCompressed=TRUE;- K9 s2 }+ d5 ]; y2 S! x; Q
  257.       strExtLocal.Empty();
    ) P; r; T3 \' u. d6 Z% [/ Y6 L
  258.       strFullName=(*i).second;
    # T2 ?8 w$ p* T3 {5 Z4 `+ z& P
  259.       dwProgramState=AP_CONNECT;
    6 G1 O0 [9 e3 W9 F% d8 ?# |+ Z: h) A
  260.       return TRUE;
    * |, L7 X. c( W
  261.     }
    & f5 `, j5 Z" r9 u
  262.     if(!bRestartUpdater)7 w( j- s: m1 y7 l: X" x
  263.     {2 v& l) t$ d6 U8 c6 Z
  264.       int iCurrSize,iFileSize;! ^/ q, q5 W, _; [0 }
  265.       iCurrSize=0;
    1 j$ m3 \- ]/ Z" l, A+ Z. l% |
  266.       iFileSize=UpdateList2.size();
    3 P  ?8 F9 ]4 ~& E0 ~- K1 N( {. o
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    $ k1 [; }" E) }8 o- `
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    % K" r9 c& l7 I1 y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");3 u1 v' q) N& v& A; I( h& I0 c
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & d9 @: [% @; N! v9 g% A' v
  271.       Fclearf(".\\update.dat");
    * |$ [' G3 f! f* W& u. F
  272.       Fprintf(".\\update.dat","Bloodyf\n");- N7 k* Q7 c+ _+ p* [) v) m
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)3 a) t) Z7 X- P
  274.       {) j. L, x9 W& p% z9 X* c1 Y5 ?! W4 E
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    5 J, z6 J3 \3 r$ l8 T
  276.         {
    ( G( ~. }  N6 D" q  `
  277.           file=(*p).second;  Z8 Q7 f. U2 G  Z
  278.           sprintf(filename,"(%s)",file->file);
    7 D6 T. d! u% k% M7 I* h( Y2 _  E
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. ?" X8 I# T& `/ m7 {
  280.           iCurrSize++;% ?) H+ c4 @4 i5 a7 C
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));7 U# G3 m: d# g4 \6 n6 Q
  282.         }7 M; N  C: y% y0 L8 L$ H+ A# a
  283.       }4 ^# X; Q; K6 C9 p* _
  284.       unlink(".\\update.txt");
    4 A: l+ i: p$ J6 X$ m  [' w
  285.       unlink(".\\update.tmp");
    0 u, M! j9 p" |* [
  286.       Fclearf(".\\checkversion.dat");
    6 w1 Q1 d+ W5 P' J% [- b. z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);, f/ i+ ]% H4 E, ]# ~
  288.       if(UpdateLocal.size())
    % K- D# s3 S! p3 W' e1 B3 |& [
  289.       {4 o0 k9 M) a0 P3 w. V$ O: V
  290.         UpdateLocal.clear();1 j  Q4 r% i  \6 h3 M, P/ R# K
  291.       }! `' U  x& y% c& W9 m7 @8 n7 Y2 O
  292.       if(UpdateFile3.size())
    1 s/ j( x$ U7 X4 R5 `$ `% k; F
  293.       {1 Q. O* s% l* Q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    / N5 E  f7 v8 Y; e: r
  295.         {, [" ?6 R! i7 W& x6 D# a2 I
  296.           file=(*p).second;  T0 N; h/ O: f5 L1 Q$ L& ]/ q/ i
  297.           free(file);
    * {8 A7 @# E9 e. s. L7 `9 ~
  298.         }& l/ Y& t3 F7 o- V0 Q
  299.         UpdateFile3.clear();: u& y0 _7 T8 @& n6 }2 ?
  300.         UpdateList3.clear();
      G( R" K6 t* h! E* _- h" T7 E
  301.       }
    + m4 _0 S$ a, I+ F& N' p
  302.       if(UpdateFile2.size())
    * [/ U' l; w, o: W) o1 C, _
  303.       {
    2 q' G7 ~8 m& k1 b0 _/ f
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 C' f9 @, x4 U9 X+ j6 G4 x. A2 C
  305.         {
    * M$ D& i# c* a3 J' d
  306.           file=(*p).second;: h' U* K2 Y- X
  307.           free(file);, y" P0 O# n9 P) g
  308.         }; H. ~* x. S. I, T5 t5 {! a+ n
  309.         UpdateFile2.clear();& x  c6 t$ M6 w: U
  310.         UpdateList2.clear();& Y5 P9 a5 A0 A9 d
  311.       }
    ; g& e. Y0 a% H- a
  312.       if(UpdateFile1.size())
    * w/ o7 C5 @9 R- Q% ~
  313.       {
    8 r# l2 @( Q3 A0 H2 D
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - G. X! }4 M+ O' T' Q9 l
  315.         {
    2 [% l! M: b$ Q; l: U' N* _
  316.           file=(*p).second;% L7 [3 N. ^7 R8 i2 W% _; r
  317.           free(file);0 H+ ~, j4 Y* X1 p. }
  318.         }3 \8 H8 F; Z, D2 {0 J+ o6 q
  319.         UpdateFile1.clear();( {6 B1 g5 e; @( a
  320.         UpdateList1.clear();
    ' h# n; u6 ~" D0 A* e# _
  321.       }# U! R; D" {7 f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));, V2 F, i9 h/ L* V+ ~  v
  323.     }+ [1 f7 g0 E& ^1 Z: o; I9 g
  324.   }
    5 U) g9 h9 H2 o7 h/ g' m% H" z
  325.   return FALSE;
    $ F! l/ z, G# {, D' _; |1 b
  326. }: k! {3 E1 X: e( D$ x: W8 A( \& `
  327. & e( |. u7 ?' t# q9 u! H
  328. void CRevAppApp::ClearAll(void)
    ! t# g8 r0 E! Z1 f) n
  329. {2 C6 V$ V3 T. U8 }2 o+ \' @* H# H
  330.   LPUPDATEFILE file;, |) z* P4 L/ s, ?! J9 `' N; y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% a4 x- N) r6 ~  ~. _, S
  332. : z  e& e/ _( q. e3 ?7 Q5 m
  333.   if(UpdateLocal.size())
    . d* h7 C; ~( C
  334.   {
    $ K& I2 C9 I8 U8 h: D9 d
  335.     UpdateLocal.clear();
    8 ~$ i5 m4 C+ ?' {
  336.   }+ y) p+ B. [# n+ f& t
  337.   if(UpdateFile3.size())
    + Q+ R* P. g  t7 L7 z
  338.   {
    ' v' G# s! u0 t9 B( ]" K
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    : A' q4 R+ ~- ~* V+ z3 P! a( V" H
  340.     {2 W" B+ }2 K* E; |
  341.       file=(*p).second;
    ' a& U- P$ q7 ?1 v! N2 ?
  342.       free(file);
    ) e  Q7 ~' R1 u4 W8 v8 [
  343.     }4 o, x! x" X: e) H" W& T& h
  344.     UpdateFile3.clear();, I8 ]. Z+ w& }2 N# }
  345.     UpdateList3.clear();: ]+ [7 R5 G  h& s
  346.   }$ h6 |  {7 |# l- y' r% Y% I+ Q
  347.   if(UpdateFile2.size())" [$ V8 k0 ]4 W9 r. i0 v8 u
  348.   {7 C1 _; @! f! P* f
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' T7 z, o8 N  H; _6 S% ~  J
  350.     {
    ' j& Y, Z$ t3 _8 p; F: X
  351.       file=(*p).second;
    4 C; x: N4 W" y% w/ [
  352.       free(file);! n5 g; p2 k# v- B1 f0 e! H
  353.     }; @( M& J" Y$ a. s; v' i5 ]/ Z1 r. W
  354.     UpdateFile2.clear();) a  p, i7 |& @: I% G8 D9 U& O
  355.     UpdateList2.clear();
    3 j- b. z, U. N# |; N
  356.   }& G4 b, z2 E; R' L5 }0 `3 C" J
  357.   if(UpdateFile1.size())  k" S- T. b! u  x& t/ E
  358.   {. x4 f6 v0 l/ A' g" ^
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ m) u9 y/ N0 r
  360.     {
    1 C* ^& m8 L! [# ?# ]
  361.       file=(*p).second;7 y' P& v& `2 P' ?
  362.       free(file);" z% C& A  w6 Y' ?; x/ O
  363.     }" t: [4 ~0 S# ]( k
  364.     UpdateFile1.clear();2 ]. {3 q; }. V& o4 y" |2 u, O
  365.     UpdateList1.clear();
    , r# J. _) Z& [7 x" |. @% G7 D
  366.   }6 w# g# e( a; n3 m' b3 L7 H! m: o
  367. }  
    6 |5 g7 l$ Z* @6 Q  `9 |5 m
  368.   ! x7 H( W6 x& m. S9 _( p
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ( k9 I% \* U# ]
  370. {
    ( f( C/ y$ F& W7 b& l, s
  371.   int c;* g8 K( P- K4 G- M' t
  372.   LPUPDATEFILE file1,file2;
    ! z( ]3 t- N* Z( H: ^- z. U
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;0 e% D4 D, R- y: U" U5 Y
  374.   std::list<CString>::iterator l;
    9 G  E2 Q! \6 k; @
  375. ) \5 ~7 I2 H1 G. ]% J& P5 m
  376.   UpdateLocal.clear();2 x4 }4 {9 z, ?' `' Y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);0 j& I8 Z  c3 m4 [0 A2 X
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);9 P  d9 N4 X; p+ t- c1 e8 ]
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    / e: s. N1 W2 V8 X
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);% R9 Y3 `) i3 Y) t5 q( d
  381.   if(UpdateFile3.size())
    2 m. t2 O( q$ M% z) v
  382.   {
    5 z+ V" l0 a7 R7 ]
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    . y# H7 e( l9 o! O1 J3 J
  384.     {
    & I; b' g0 B9 s0 j( U$ b+ F( a
  385.       file2=(LPUPDATEFILE)(*i).second;% z  F  j& ?2 |5 U2 a' }+ U
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 N  Y% q, f& L7 r
  387.       {
    4 F8 y  N" X8 {6 c7 I, U
  388.         file1=(LPUPDATEFILE)(*p).second;9 |* A  X% x! r, ^! L+ p
  389.         file1->vers=file2->vers;- T) L5 N( z& T$ v
  390.       }
    , R  s7 p8 f3 Q$ a: _% m
  391.       else
    / v8 J: P/ O6 R  |. t! b! `
  392.       {
    0 ?- w1 |& i3 l  Y" X% `
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , ]( V2 c# l  x9 Y9 ?5 ~& R0 K
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ! q6 X6 i. M1 c8 P% x1 o" m7 q
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    4 b$ l' `- t, |4 Q' [1 P' g
  396.       }
    / W' |, U7 _; v3 [3 I' S! B
  397.     }# V5 ]3 F3 j7 u
  398.   }! J8 ]/ X  z' B6 I
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++): N, Y" P/ ~# T0 }# H
  400.   {
    2 N  H' g8 Y" g0 s
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ' j9 e( K+ R3 {: T. M8 y
  402.     {
    6 j$ r0 M; S7 ?4 [* s& y. h7 j% t+ o7 Q
  403.       file2=(LPUPDATEFILE)(*i).second;
    " [7 d4 G/ P. g5 g
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' r# r& f. F8 o* p2 L% J% |
  405.       {
    8 K9 P# a3 [& F& W9 F4 o8 |
  406.         file1=(LPUPDATEFILE)(*p).second;
      a+ w/ R; Y; @( t, F$ |
  407.         if(file1->vers!=file2->vers)
    # A/ h+ r6 A: w7 K3 w
  408.         {4 j3 e0 q9 ?3 s7 H
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));8 N* x9 o6 W0 k+ D! [9 ^6 \  x% k# r2 n
  410.           c++;* U! b; y5 u; V' a1 B* a: _
  411.         }
    8 @/ P' ?8 }! h' @, _% f+ T) I
  412.       }
    8 h9 _2 Y* B2 @+ y! m
  413.       else
    * `7 _9 f; |$ j! M  y
  414.       {
    9 `' \1 d5 d, @1 f. X, c6 P, t
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! D- Q+ h! u. C% M0 }6 e1 \
  416.         c++;
    / I# r8 Z2 n; D+ }1 a% C% N/ Q
  417.       }
    9 @1 b! e  q  a" j# m8 ]* g
  418.     }- @( `  {3 L) k0 H2 M' Q
  419.   }# \9 t5 Q5 l8 b8 \( ?$ w
  420.   unlink(".\\DownLoad\\update.txt");
    , w' n2 Y7 H% T
  421.   if(UpdateLocal.size()) return TRUE;
    " {4 z7 s8 ?; L2 t, T
  422.   else                   return FALSE;
    . z7 ]6 N1 d% t3 @/ R) }
  423. }6 \$ H$ L' m8 z+ i3 h
  424. 6 @! w, w* V& a3 j5 T
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    4 m+ W. y) B" ?! r1 K* e" m4 W3 M
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ) y) P# |+ y! x( W% f/ g& K

  427. # V. f1 @# h) ^2 [2 W7 ]
  428. 0 Q$ O# ]& S4 ?; |) F8 j4 s
  429. ; M, k( B$ T( |  p* b( H( l
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)! E% M( y& t; C9 z  x' X- M/ Z' P
  431. {
    " H- k7 z. `! k) U# E
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;9 ]5 c0 \9 ~9 a
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 w1 F* I8 [5 x- y) E* \7 m
  434.   {
    % O% G" E9 v; e9 x# l( U9 H
  435.     char szLanguage[50];+ i& t: K+ O- V3 X) x
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + U( c' Q# r- p
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" n1 Q  {: \9 p- l
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 H9 ]8 G0 e% ~7 E' t: @' m
  439.     else                                   m_iLanguage=ENGLISH;
    6 a* T* p5 M6 Z, D' b  o- g/ B
  440.     char szRegister[100];
    ) ^/ G: b4 X" S) ]
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");, v6 Q# c4 G0 Q/ I2 s
  442.     strRegsName=szRegister;
    3 ^8 c7 c! m# c+ |# p  B2 Q- }& C
  443.     char szPatchURL[100];' G) G- k: j- N: Q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) l/ ~  W: i+ z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , Z# f; [9 P/ z( j1 C
  446.   }* s9 t3 k  h1 d2 i5 Z
  447.   else
    . ~& N* e2 O9 J& e
  448.   {
    * `0 P6 \$ @+ t6 T( Q+ D) o+ P
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% J+ g: P* Y1 v8 C. A2 E
  450.     strRegsName=DEFAULT_REG_URL;$ b: G- {+ v/ v$ R1 j
  451.   }
    0 z# W- O4 R4 U& f
  452.   if(GetFileAttributes("hosts.ini")!=-1)  J% Z% {9 H7 ]
  453.   {+ s8 ?2 a0 v2 @( q/ ?/ ?/ X
  454.     char szIP[50];) `8 ]$ P, S# p' ?+ @3 A
  455.     char szDIR[300];! q+ S7 K& w5 p
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))8 y. [4 K" R( {4 [7 G/ _% v
  457.     {
    ( l0 e8 q" n$ G2 V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");7 x$ w* ^1 u" |* p! S+ d; n& P8 y+ I! Y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ! W5 r. h) f' m" D- U# B
  460.       strHostName=szIP;4 \5 ^/ T8 f' A! H4 P1 R, M7 U$ P
  461.       strHostPath.Format("/%s",szDIR);' W( V4 w& g) A+ F" O. E$ L/ a1 y
  462.     }- h) F# M& m2 n* n& ]; B3 Y
  463.     else, h& m* \6 S/ o+ z
  464.     {  X; u- b; p$ m+ G- q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * {: W5 F7 ?0 s; N6 i
  466.       {9 f! `4 n) V/ R2 |
  467.         char szLanguage[50];! z2 g0 i# J. ]  K# d/ Q* L/ F  ^
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    % F$ J/ g: |& l$ [, U
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ Z/ h6 e& G5 z" e9 j$ o4 J
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. h' a% z8 T! E3 z' `* z9 z+ \
  471.         else                                   m_iLanguage=ENGLISH;
    ! k; b1 B6 M' ^$ e
  472.         char szRegister[100];$ K2 f7 ~7 N7 k* ]' Y8 k
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . \+ b# o: F8 M0 f& c  I
  474.         strRegsName=szRegister;7 F* I6 _% t+ Q! t- D5 R, u
  475.         char szPatchURL[100];
    & L8 g1 o. P, H+ o8 S7 F7 A: x
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # j/ W" W. v! d
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- v) j: f0 A7 @
  478.       }. I/ E0 E- X! ], ?( h# S/ B1 a
  479.       else
    ; S' b9 q; V$ X5 ~8 {
  480.       {7 [# M: A4 k0 P6 J2 }% x; p& u
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 W+ ^; p' Q( X' L( P
  482.         strRegsName=DEFAULT_REG_URL;
    ! Y/ L  W* w& u6 N7 S. D/ M: X
  483.       }
    ; K+ |! S+ U$ R4 c
  484.     }! @& f# d1 i0 K' U3 ~
  485.   }
    0 [# I7 E8 t+ p
  486.   return true;7 H! M4 h0 P" X& e8 Y
  487. }
    / s8 K9 s7 X2 R/ B+ g( b

  488. 6 Q) N5 V+ ]3 x# ]7 [# @
  489. #include ".\ZLib\unzip.h"! l( x5 x4 T: N8 F4 }. M
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 s9 C- R6 z9 Z( U/ y2 v
  491. /////////////////////////////////////////////////////////////////////////////
    / `3 n( V8 J7 j
  492. // CRevAppApp initialization7 j& V' ^. _7 G9 B) a; |: {
  493. . I# P: w& I1 ?- m8 D2 Z
  494. BOOL CRevAppApp::InitInstance()
    0 f7 N& L2 H7 M4 M* X3 w$ d6 x
  495. {
    ' J; L8 \4 ~, E5 R9 s- r6 D
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    / e9 j# d) E% Q, \  B! Y( X' J

  497. " I  n  v6 y1 [6 X. {9 X
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    9 E, P4 Q+ b2 }3 t6 T
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    9 [5 A6 ?4 W( ^, D& }. B
  500.   {
    8 \. {% U$ I* C3 D
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");, Q5 Q' c/ v( g
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ) _$ T7 E# [4 B, O: x9 B* d; n
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))- Q, ~# g  E8 [- b
  504.     {
    7 h  }5 ~" R8 f* {: ?8 }, ^$ s
  505.       strcpy(szPath,szPathTarget);. @: o& w, V( M" O& o( i
  506.       SetCurrentDirectory(szPath);; I' Y0 @; l; M0 z" k& @6 n
  507.     }
    " q4 H6 w% l! q. N* n
  508.   }
    * B. Z0 M) m$ K  w8 O2 w2 K' n3 Y
  509. #ifdef _DEBUG+ }! b0 j( |( x, J  ?; S% y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 e' g! `" ~3 b. c% C& j% s4 ]
  511. #else3 [  f9 ?: F) R* P' P
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; x5 D# C: h4 D0 Y
  513. #endif
    + \" R( I" X, ~; }4 R1 A6 F
  514.   {1 }6 @' F$ L, U" V7 p/ R
  515.     char tempFileName[MAX_PATH];
    3 n2 C+ |4 U; K9 g+ \0 D$ H" q
  516.     strcpy(tempFileName,szPathSource);2 R8 k1 n" ?4 ]4 ~3 L
  517.     tempFileName[strlen(szPathSource)-12]=0;
    * H6 U! n/ ^% ~  [, j
  518.     strcat(tempFileName,"\\$CSUpdate.exe");/ p; L( T+ }' n( `6 L
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);! }! i2 j, |; v2 g* _1 B
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    2 F3 w, R! O4 Q' t& d' L  a
  521.     return TRUE;
      w- D3 |0 \% w; j  h
  522.   }0 R+ w) E2 ~4 C6 |5 g7 ?; Y
  523.   // Nuke 0118: Delete run.exe* a8 T# w, Q6 ?1 \
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 x* C* C. o: ^5 [5 {4 L* u! K4 @
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");  h$ k* r- ?1 T* b- \- ~7 g4 J
  526.   if(!ReadCfgFile("Config.ini"))& K3 f' `, ?- E5 H! G) j  P6 S5 R) E
  527.   {* p3 d% v4 j: o9 a( L' h
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 p' _  d! q- Q) d& R
  529.     return TRUE;8 ]6 K5 B* L: ?- l
  530.   }! v9 k* s) e; @1 Y. R( M
  531.   HANDLE mutex;7 y5 a2 p8 U+ J0 N2 v+ _
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 d8 e# `, Z7 b; V/ C+ Z" F! h9 f
  533.   {$ P- s6 O8 Z7 C# h: d
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ( U5 m* g. J7 |
  535.     {' s$ D3 K7 |1 x/ W
  536.       CloseHandle(mutex);. P/ x, T, i; |; E
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ! f+ X+ _* L7 f& F9 s5 g9 z2 ]
  538.       return TRUE;, I3 p+ v3 }* u$ n: E  Y8 K
  539.     }& L. W0 i3 ?2 p
  540.   }  
    ' y# K( v8 @- J8 X$ c( d
  541.   CloseHandle(mutex);3 J* x+ c& F) o4 O& R6 j& S
  542. . i( F) x( ~9 f& e+ R
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);' c# Z2 M; A3 c3 z) n! X- g/ O
  544. 5 ]7 {" r. _1 `' A5 C* c8 c1 g7 h$ g
  545.         AfxEnableControlContainer();5 w: Q& ]0 l. \0 p/ S3 g4 r

  546. * J5 r- |3 i8 u4 _5 L4 P9 u( t1 D
  547.   bCanUpdate=FALSE;1 `6 d9 T) N8 \0 o/ u
  548.   dwStartUpSteps=1;. g9 c7 T! I1 w
  549.   dwProgramState=AP_NOTHING;) J3 G3 \* n$ i& O! S* t
  550. 7 O* a; Z' F8 |# S1 p) R
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);$ e6 J8 Y8 Z! [6 t
  552.   [4 O, Z7 D5 j  e- p: x
  553.         // Standard initialization0 e, e0 w  w& s( i& L) O
  554.         // If you are not using these features and wish to reduce the size" L+ s* F* x; P& k3 R( h
  555.         //  of your final executable, you should remove from the following+ v9 \6 y+ U# n3 W/ n
  556.         //  the specific initialization routines you do not need.; R% A  i  L5 c0 H& E) F. }
  557. 0 J- h7 z0 }# c( }, ]" b/ S3 V5 B% G
  558. #ifdef _AFXDLL
    & R1 F% C+ I' z& n7 H2 X) l
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ! n1 o- s" m9 \  V7 [5 T
  560. #else! K2 P  k6 O& o) `+ L& s
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( c- f7 k9 v- w7 n9 O2 A: p
  562. #endif. r. J. p8 x; B. ^* k

  563. 1 X7 {; ?  N( ?! i7 @2 @
  564.   dlg=new CRevAppDlg;4 H, j8 H7 N  y0 g) g
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    2 U% w$ D: D  {" x- U; p$ P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    $ D* V* P2 T5 ?* G
  567.   m_pMainWnd=dlg;1 k2 A) s0 x4 s; ?5 b

  568. . \& M* [; O& Y9 [7 ?8 F1 v7 l
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    8 F$ \5 f( x3 I5 Q2 J

  570. ! E. X) a) p: J, Z+ r$ R6 C
  571. //  GdiplusStartupInput gdiplusStartupInput;9 c7 u7 [& @  ]
  572. //  ULONG_PTR gdiplusToken;; o7 c8 y. C$ u3 }
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    * f+ i- }4 Q. C3 ]5 _) R
  574. - ~1 Q# K8 h0 C
  575. //        CRevAppDlg dlg;
    ( U2 }9 D% Y4 K; L8 k6 V! f# [
  576. //        int nResponse = dlg.DoModal();; P, ]3 T. q$ e; n' V, S
  577. //        if (nResponse == IDOK)
    7 a! t& R; x( r5 W8 e  Q
  578. //        {9 ?" Y5 y; S3 i
  579. //                // TODO: Place code here to handle when the dialog is
    ( N7 y$ S5 m8 X% a8 z
  580. //                //  dismissed with OK
    # h6 ?5 G  k  i, x
  581. //        }
      ]1 e* E) z- E; L- }1 L& [
  582. //        else if (nResponse == IDCANCEL)6 ]& e1 F* S6 Y, p3 n
  583. //        {" [& B9 W+ a# U8 e
  584. //                // TODO: Place code here to handle when the dialog is+ K& j- j+ M+ ~; ]  n
  585. //                //  dismissed with Cancel) X) c0 @1 _4 e) ]4 R8 j
  586. //        }. J4 r6 |% h- W' Y( O$ d) x6 D9 M$ z1 i

  587. . u1 j, K: J' m" V; O
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    8 b9 U- N/ h; K8 A2 x# [
  589.         //  application, rather than start the application's message pump.
    1 u$ \: `/ w: M1 V  X" u; g% q
  590.         return TRUE;3 z/ r: {0 j# O& P
  591. }+ q8 b4 i3 }: g$ u* X8 B
  592. . V9 m. M) ^* ~* I! A
  593. char *CRevAppApp::strtok3(char *pSource,char *token)  v% ]: N2 k4 o8 M7 h+ l; j
  594. {  K( R9 x& W5 h9 K* _+ ~
  595.   int i;
    * p; l0 A0 f# \& W9 K  H! f
  596.   char *szRet;
      S2 z+ s0 r, _. _! j7 v1 C

  597. 5 U9 A  x0 O  X7 X. [
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    0 M, |% V0 F* t
  599.   if(sztoken)
      D7 D! _5 K9 T5 f
  600.   {8 i6 _$ ?4 _8 h
  601.     szRet=&sztoken[itoken];8 C/ _( n- ]) i
  602.     while(sztoken[itoken])
      L, o& q9 N" |3 a: q0 J
  603.     {
    0 s* V8 a5 F) U5 ^9 h- _
  604.       for(i=0;i<(int)strlen(token);i++)/ g& h/ n1 S, J- X" B; x2 b6 K0 U
  605.       {
    5 Q& O% I+ L6 s& e" j8 K
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])8 r6 j6 j2 I3 [: i1 p* R
  607.         {
    ; Z0 E7 Y8 @7 ?% a( `% x; Q
  608.           sztoken[itoken++]=0;
    " }3 t' D; m( Y* W) T, @5 Q# t
  609.           sztoken[itoken++]=0;6 q5 _$ V+ x: s/ {
  610.           return szRet;
    ) |& C, s3 X0 G7 I
  611.         }
    ) [8 f+ ?8 |: e6 C& T; K$ Y2 a
  612.       }9 l+ ]5 q/ v7 |
  613.       itoken++;
    3 T( _  l% C  M, h" i9 M- p8 a; X
  614.     }3 b1 i: _2 ?% z9 Z1 z( T0 P
  615.   }
    , m. s$ c; ^9 ]  ?* G
  616.   return NULL;
    4 K* `3 x8 z& p& u
  617. }  F5 n7 d6 @4 W6 H2 p2 p, \

  618. , Z, h/ p: m: S1 r, L* |
  619. void ProcessProc(long Total,long Current); A7 k, \0 B  q
  620. {9 X0 a% G/ ]8 n: i6 p: U" n
  621.         MSG msg;2 X7 e2 ~4 z) j2 m8 y7 Z/ a
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);1 w2 x# o$ a4 p; G7 Y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));& Z. j) F% |8 j" O1 D$ m/ V
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))$ w! C2 O) n: [5 W" {. r9 R: D
  625.         {& F7 J, h/ Q! R0 v/ N3 H
  626.                 if(!GetMessage(&msg,NULL,0,0))
    0 C) w4 }0 d: \  {, {) b. o( h
  627.                 {9 r* O+ }. U; F0 w! |8 j: K
  628.                         return;$ n4 t" `( y" \, j2 a5 J
  629.                 }  O6 t+ }: O* O7 B( J9 N% O/ S5 K; i
  630.                 TranslateMessage(&msg);
    9 ~! h4 C% \  R+ W2 ]6 L
  631.                 DispatchMessage(&msg);4 F1 ]. Q$ n& }5 y
  632.         }       
    1 S; b5 A+ X" {3 t6 Z9 W) }0 x4 \, F
  633. }
    2 e! k0 Q* ?- \
  634. $ G( C' j2 l$ g
  635. BOOL bFirstChar=TRUE;) l3 h2 K5 _$ H2 Y- Q

  636. * T( f/ E9 s; i; b; N0 z
  637. BOOL CRevAppApp::OnIdle(LONG lCount)% Z$ B4 w3 m; o& M. }5 e
  638. {
    - y, D, v4 l! p0 }
  639.         // TODO: Add your specialized code here and/or call the base class
    0 x$ D$ q& F  }9 q( q% L# x9 H" a
  640.   switch(dwProgramState)1 [' C: V  n2 Z; T& v2 G7 a, M; e
  641.   {
    2 z4 b4 l6 E% N" ?' H/ b
  642.   case AP_NOTHING:$ ?, ]1 ^7 A! Z: C# y
  643.     switch(dwStartUpSteps)8 L1 t: e! O+ v7 a! M7 ?
  644.     {+ L& d: C4 w+ M
  645.     case 1:
    ( c! [0 f! p* A0 D, f0 s
  646.       {% U8 }, s/ n, ~3 q. t0 V0 L
  647.         int i;$ h0 o' W" `9 l+ R+ I- ~
  648.         CDC *pCDC=dlg->GetDC();) N1 Y2 n, _. w! Q4 n- ]
  649.         HDC hdcwnd=pCDC->m_hDC;& q; X+ D, o+ \0 ~' A6 A& I
  650. //        Graphics graphics(hdcwnd);9 P  P9 ^- U" C: N6 p/ \+ v% u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");& _9 U8 a& a2 J* T
  652. //        INT iWidth=bitmap.GetWidth();$ k  ~+ o* y6 v$ U, J2 x
  653. //        INT iHeight=bitmap.GetHeight();
    % d* n! T3 W* S6 n+ h
  654. //        Color color,colorTemp;
    5 ~5 z7 I& \1 ~  K
  655. //        for(INT iRow=0;iRow<iHeight;iRow++): J5 N7 Y; Q2 Q- Y3 v$ }
  656. //        {' U! _6 {1 E8 `7 @5 ?" S
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)8 C6 C) r- I: F7 S
  658. //          {- h6 J6 S$ g) k7 N) n4 H6 e0 m
  659. //            bitmap.GetPixel(iColumn,iRow,&color);8 O. m% Z! z+ Y+ |
  660. //            colorTemp.SetValue(color.MakeARGB(- T5 P, r" e! j: b3 w
  661. //              (BYTE)(255*iColumn/iWidth),( ]0 s( }9 a6 X% C: g" x" R; g- `
  662. //              color.GetRed(),5 S7 O/ H* q/ Z$ U% N2 e6 h
  663. //              color.GetGreen(),
    ' f. z7 @1 p% O5 d3 l1 Y/ O6 `
  664. //              color.GetBlue()));$ e* G" M8 m: G( Q. ?( Q6 u
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) }; W5 U% Q. m! q0 b9 y& v# T
  666. //          }
    + E$ @( w6 z2 _9 W. s( f
  667. //        }
    * q5 o$ [% `! G4 t. C
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);$ l+ `" K: _8 Y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");, z6 v. W) P0 j2 V# y: Z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");4 u; f& J: V* H2 n- X/ ?
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");! H6 b8 d9 r- C1 e2 q! ^" n
  672.         for(i=0;i<240;i+=8)
    ! p. |% a, I9 Y* t9 c# ~
  673.         {1 X8 p- Z6 f  a. W+ [7 o" i4 j
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& ]' W9 \1 y* k- s3 r6 J* r8 b
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);) @0 F9 w. L, u; H; d3 h& d
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# `( N( Z* L9 I* B+ N. {8 n
  677.           Sleep(33);- w! [. J' R% Q! z8 ?$ a' `6 x5 f% q' f
  678.         }
    " U) Z6 F' H6 K
  679.         Sleep(1000);
    , c% A9 @# e) p! a$ I9 {' T
  680.         for(i=240;i>0;i-=8)
    6 Z  W7 Y( F/ a- G# l$ G
  681.         {  V$ a) ~# _" l" G4 v; Q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 Y2 V4 g7 C  @8 a- k
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % T0 O. D' t. y, g
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 H" `! p3 p1 ?+ l, V4 N9 r) l1 ^
  685.           Sleep(33);& {  x0 b& l- ^' s
  686.         }
    8 o5 k5 \( {" d) X! F  S$ T- X
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    / W. ~  D7 k6 v7 b1 o
  688.         dlg->ReleaseDC(pCDC);
    ( ]3 k: L3 k% y5 w; a* o; k
  689.         DeleteDC(hdctar);. z& z8 L! \( l# I: a
  690.         DeleteDC(hdcsrc);* r' `9 B# i* V# b1 }9 S
  691.         DeleteDC(hdcorg);8 T; B- K. y. [5 B* z
  692.       }
    2 Q$ e. c7 x, X: d+ X& Q' m
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);% s. Z5 M: `- r4 M
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ! N* D8 L6 e) `
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");# N" P' |9 U) d3 ~0 Q: X9 H8 p
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");: D# |- j, e# k/ @
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 M( ]9 ~9 f* R  |! d9 w1 b
  698.       if(!Dn.Connected())! D) k1 y5 V. q& s) _
  699.       {
    5 m% X% @5 i0 X4 Z
  700.         dwTotalFiles=1;5 C4 D1 h6 J9 z4 P
  701.         dwDownLoaded=0;
    / |4 @8 q3 [* R5 C4 W  W4 N
  702.         bSilentStep=TRUE;0 S$ |; ~' [% h1 L2 _4 a( }6 N
  703.         bCompressed=FALSE;
    . B# r0 s, t4 h/ H- B( ^
  704.         strExtLocal.Empty();
    1 Y4 ~4 u, q$ R) d) ^" ?
  705.         strFullName="readme.txt";
    $ n* E( @* U, j# k% f8 C! V, e
  706.         dwProgramState=AP_CONNECT;. F1 v1 G4 O' A' a9 T1 O
  707.       }* c0 Z! Y( w) ~; q% [
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 k1 _1 [0 |' \& w! ]; E
  709.       dwStartUpSteps=2;0 B7 V; n7 I* h
  710.       break;3 P; I! n# Y' O% W
  711.     case 2:
    0 ~9 @, @' Q2 i% K" M# t
  712.       {
    " B# R0 `, P  C2 U
  713.         int iEOF;! C# V4 ^9 b& p0 R9 Y% Z1 e' q
  714.         FILE *fp;
    / e8 R6 s$ j  x
  715.         char szString[512];
      s) H" W/ P* a( g3 i  c9 m
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");" m0 F- `0 U/ c! K# X
  717.         if(fp)
    $ ~2 {) K( I, a1 q  e5 p5 V
  718.         {( I7 i6 s* L- E
  719.           do
    8 m: T0 a, v! o/ [
  720.           {
    . D% ]1 S1 j1 @9 p& F4 M
  721.             iEOF=fscanf(fp,"%s",szString);, P  J: V. y; J3 L; E
  722.             if(strlen(szString))
    3 G# F+ \1 s2 X7 h. K1 q
  723.             {: n- n/ e- o% ?& `# s$ @4 X
  724.               if(bFirstChar)+ Q& j/ o/ r# ~
  725.               {! _( k. t* P0 y0 E( y$ `" Z
  726.                 bFirstChar=FALSE;
      s; S* |  G( g/ d) j8 a6 f
  727.                 bConnectIsBig5=FALSE;/ k! b+ Q1 `3 c+ ^0 U& D. Q
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;/ [# N5 J" c7 b3 d6 C' G
  729.               }* S) u% m  Q( w% C
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    % s4 Y& o. x* \) X
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));+ a, z2 ]8 ~7 P6 a) \) V
  732.               dlg->m_ListText.AddString(szString);! W( l' U$ Z, J) K# T
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 c, n# u% v' J1 o1 y+ a
  734.               *szString=0;! D3 _8 N/ {5 h2 p  Q) a7 o
  735.             }! v# F7 X: _  s6 {
  736.           } while(iEOF!=EOF);
    ! V( x0 P+ F4 p
  737.           fclose(fp);
    1 E1 m7 e& Y9 [+ K8 _. }: w
  738.           unlink(".\\DownLoad\\readme.txt");
    + i9 l) b3 Z3 x, u
  739.           dwStartUpSteps=3;& c% l  S! N" h- P
  740.         }
    ! q" c2 y8 L9 t' X% ?* T
  741.       }- m  F; C" Z/ |; e# t+ B
  742.       break;7 Z2 k8 I7 |2 @1 f9 S
  743.     case 3:, E4 o5 {; j! ^( ~
  744.       if(!Dn.Connected())
    $ m# m$ V" p% }: ?! a
  745.       {
    8 o4 d0 r6 i8 m# r8 `$ w
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);( `9 k& H$ ~. h% t6 F& ]
  747.         dwTotalFiles=1;
    4 l# G4 @; m6 ~, V9 j
  748.         dwDownLoaded=0;
    ( G4 A2 n; w! x% a" B9 {
  749.         bSilentStep=TRUE;
    - O' z2 a  @, x" |# g7 x
  750.         bCompressed=FALSE;% X/ ~3 r, H- x/ e# h  n( Q# ^& D
  751.         strExtLocal.Empty();
    / ^3 \0 K9 `: W' Z, B
  752.         strFullName="checkversion.txt";
    & F1 E1 E) N, C* P% R
  753.         dwProgramState=AP_CONNECT;! @5 W9 A' h  l  T
  754.       }
    . P3 E) g# l5 E+ b. `# V$ I
  755.       dwStartUpSteps=4;
    1 y/ n: L. a4 U; ]; S  {
  756.       break;" a6 L# q) r  p$ }! Z" P
  757.     case 4:/ L# P# x. f" V* S7 X3 v- n
  758.       {
    ; T" Q2 F6 P& q% [1 W
  759.         FILE *fp;
    3 m$ R: P3 J! G
  760.         char szString1[128];
    # f3 V1 u* `: T
  761.         char szString2[128];+ ^0 Q; J, o! P, S+ X! k1 a2 I
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    3 A* b8 g4 V4 [
  763.         if(fp)0 j) _3 J. `* Z  W( s. n1 ?9 H
  764.         {
    5 g+ p0 y9 b$ L: m4 |5 Z
  765.           fscanf(fp,"%s",szString1);, Z. Z. S4 y7 l% y) u9 v6 O6 ]# I
  766.           fclose(fp);
    0 Y% @+ V4 Y$ g. P: a4 ]$ q
  767.           fCheckVersion=atof(szString1);
    * U. F: P0 x6 @0 n; h" X
  768.           fp=fopen(".\\checkversion.dat","r");0 g- P5 d  C; M* C, ]& J
  769.           if(fp)7 @$ g# e3 z- r7 [1 k1 p' }
  770.           {* s% r* d7 Y' x2 C; c. e  [
  771.             fscanf(fp,"%s",szString2);. Q$ F7 V- n5 Y- o
  772.             fclose(fp);% p* u8 n5 E5 ~/ ]! }7 s+ p1 n
  773.             if(atof(szString1)!=atof(szString2))5 u' {( ?: w$ y% ?7 z( M  n5 a
  774.             {0 y0 Y4 s% N% Z6 F% \  y
  775.               if(!Dn.Connected())7 T& ?- w  n1 ]; Y1 e9 [, N
  776.               {' z' A" P. {! `& R# ~$ G
  777.                 bFirstUpdate=TRUE;: ?. d, b9 y& z! ~5 }' T, U
  778.                 dwTotalFiles=1;
    . z. [% U/ k) ~
  779.                 dwDownLoaded=0;9 |$ P- M6 \3 O1 U( n
  780.                 bSilentStep=FALSE;
    ) r2 ?) y7 y  v- M9 n% q  L/ T
  781.                 bCompressed=TRUE;7 d# J; x1 N, l9 M  g
  782.                 strExtLocal=".\\DownLoad\";5 Y# B* c+ Q+ U9 v1 u
  783.                 strFullName="update.txt";
    5 ^! P/ J9 |' m7 n  Z
  784.                 dwProgramState=AP_CONNECT;8 J4 f$ t  f% m$ w; l
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 i3 I! s$ E, j6 F9 l
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( C4 Y; _9 v" c" ^4 B
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) t; B+ c' A! n2 ]) ~6 B

  788. 3 G2 z$ z2 h' }9 h
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , B% ]8 O! @  z" i
  790.                 unlink(".\\DownLoad\\checkversion.txt");, w) o& k# ]! P3 L% k5 g
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    2 u/ J, c+ n; [- g
  792.                 {( Y; N# m" u- l+ @4 ~( @4 p- l
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    9 j! |! J( r4 |! k7 d8 T1 M+ u' K
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    5 l8 t, K" Q" @0 e% P. s
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    4 o1 f" ^1 w* q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& v. [3 m3 b: N4 Z

  797. : S( F5 i! I  l  ^: p
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : Q; @# F  B+ R# s' v7 X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* j7 d" s! y/ I& N! c# w5 Z! W4 j% y2 L
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");: c5 D' Q2 ]6 _1 _% y  I1 s. P
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ g; H5 J& h7 p& C" n% y0 c( i
  802.                 }
    . y* \: |# _- f7 c, i
  803.                 dwStartUpSteps=5;
      \! r9 H6 O% x
  804.               }( e6 ^3 w  b+ F  w2 r8 u
  805.             }
    : [+ F3 B7 Q, L' c
  806.             else, g6 B: M7 ^4 l% D4 f
  807.             {
    ' K0 R+ l0 q5 t# l. M# G+ Z
  808.               unlink(".\\DownLoad\\checkversion.txt");
    % f0 }/ O! f) G" j9 D# q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' s9 n3 q% u7 T) Z& Y1 w, z0 m
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    5 W1 n+ z, u7 A( W3 p4 G
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");) l9 y) w9 o% B1 w* n

  812. 3 l8 T' @2 Y% x
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% ]; a0 B1 j3 x4 f$ n& U1 Q
  814.               dwStartUpSteps=99;
    : N, \% d& M4 U; C
  815.               bFinishUpdated=TRUE;
    # k; z, m' `0 c' n- C; K
  816.               bCanUpdate=TRUE;
    4 e0 ^, G3 m4 ^( w
  817.             }* {& e* ~0 i0 S  o3 h
  818.           }; n0 s) X9 _# m& \" X7 {- ~7 F
  819.           else
    , |$ f; |" D- ]9 K" h9 {
  820.           {8 ^* w* b+ |3 y( M, z* n9 }
  821.             if(!Dn.Connected())
    # z4 b1 F, G7 f! B/ o" j* L& N
  822.             {
    / `9 {, y6 B% I0 ^+ v2 G" w
  823.               bFirstUpdate=TRUE;! g% J6 b+ A5 p
  824.               dwTotalFiles=1;/ Z4 y. q3 k; O! ^
  825.               dwDownLoaded=0;2 r' l! |, k( M% Z# _
  826.               bSilentStep=FALSE;
    ; ]% |9 f& C6 o+ |4 P# p/ a
  827.               bCompressed=TRUE;: F' h: i6 |- f: e. q8 ?
  828.               strExtLocal=".\\DownLoad\";" c) R1 \5 s# c0 w( _, h! e
  829.               strFullName="update.txt";
    : u) |7 k( ^9 I) [. I
  830.               dwProgramState=AP_CONNECT;
    / `, L* J$ Y! E/ p
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ c% s9 U9 |! B% y( `
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) a3 L$ m$ H' ^2 ^" K
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");' p2 t& T* x; \6 h' D
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* X+ ]( W5 _) R& U$ S
  835.               unlink(".\\DownLoad\\checkversion.txt");
    " _3 \- g& p6 x- `/ z
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)8 o3 V! v3 G: C/ {( j7 x
  837.               {+ y0 |1 Z' }0 L  W+ n
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    , V  X5 E! m" n
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    4 U, }/ \, ?9 Y# c( W
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");8 e) A$ r* _/ s9 C) O. ~2 s
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# U7 e; H& f8 ]4 \
  842.                
    ( J% f1 `+ c. X6 G0 p8 _
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");" S0 }7 Z" ?6 P' [" e* {
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, J2 t1 x. x( d" a4 U: h; v+ s
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");2 b, A$ n# b6 R6 F( Q0 [0 {# R
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 U4 L5 Z. }+ J5 F: o0 k
  847.               }! f2 z3 l3 Q* P2 S9 v
  848.               dwStartUpSteps=5;
    4 {7 B( R: r7 C2 W
  849.             }  j% w9 `. E- u4 U
  850.           }- V* W; Y' w* X" N
  851.         }' f/ k7 A) _/ [, p* O
  852.         else
    + U8 o7 p; y4 o+ t) O
  853.         {
      x$ [6 @) O" q
  854.           dwStartUpSteps=3;* ~* Q- N. L3 a7 @  A/ f, n) n) J* N! C
  855.         }
    : D- z3 H3 V6 @& b- P: V
  856.       }
    % H8 H! ]* ^3 n+ B( F
  857.       break;
    % J& P1 y3 N/ Y2 _7 l3 ~# z
  858.     case 5:
    9 A/ r; X5 A' M& U9 M2 q* c* l
  859.       {
    $ I/ w( k9 b9 i5 Y; u' A2 ~
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)' H5 \- G  w( J% T8 q3 v9 J8 B
  861.         {1 W/ ]( ?& `: B' H# j
  862.           int opt_overwrite=1;) ?  S: `* L; b, Y' F6 h+ h" }
  863.           int opt_do_extract_withoutpath=0;# g* I+ @7 c# m2 I. T
  864.           unzFile uf=NULL;- V4 E6 o' e( G5 c
  865. 5 u& O( y. A9 A. w' z# G1 ]
  866.           uf=unzOpen("Wsa.zip");
    , `: Z3 ?! M* H% X. x  e: g
  867.           if(uf)
    ' ~: X: G/ Z0 [4 `' w
  868.           {
    ) K2 D& o  c! A' f: t7 I
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);9 }; g  b7 l' ]
  870.             unzClose(uf);
    & L+ R# z+ K4 i, q1 e
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");, `5 H4 ~# _( f6 p' d/ s
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");( T* |/ @  z% `3 r( ^& o2 F6 H( ^
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");% C* G5 u0 r- h1 S: f8 b
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & j) S' _0 s9 d+ S: Y% N/ X
  875.           }
    ; g% Y( j- a7 u/ @+ ~' Q0 N  F9 h
  876.           DeleteFile("Wsa.zip" );
    2 u  ?, w. w$ _; b
  877.         }/ Z4 C& f, L$ F! [
  878. , Z6 q) f3 Q3 l8 g% g
  879.         if(CheckLocalVersion())
    ; X. x1 Z4 P' d3 u6 c% P7 `3 G* |
  880.         {
    * E. ]( x- P# o
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    " @/ W) |; o0 g4 \% x
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");$ m2 ^6 x3 x2 C7 d
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");; q$ G6 V" B5 D  M3 j9 @8 ~# W' R
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      a/ Q/ y% \- d" t
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);- ^! o+ [  d3 \; F. {; o# Y
  886.           dwStartUpSteps=99;& z: a" P/ T& l) r& @- k1 i- M
  887.         }
    7 k0 w3 T) t) s0 {  L
  888.         else
    2 W$ Z7 }6 k; k6 S' H7 n
  889.         {5 c0 m! }- E3 k8 `: ^6 ^
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");) X3 Z7 p0 x5 o: u# D4 k7 w, j% \
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ G( M" Y  |: c- ^1 J1 D
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");8 _1 W  [. P4 w/ b4 ]3 F, |8 \) @% X

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

3 q5 P: k) e" F, G9 z0 g0 A( ~) R, h  ^+ R

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-1-17 06:00

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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