找回密碼
 立即注册

CSUpdate.exe源代码

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

9 b& f- p; ]  L$ a7 D$ c+ X& g' p
  1. / RevApp.cpp : Defines the class behaviors for the application.7 ]! {  ~: a4 U4 w3 r8 x
  2. //% @. {) u% y1 |4 f. n! r) G

  3.   X$ o4 T! ?- w# s! ~
  4. #include "stdafx.h"
    9 ^4 |: g) o% C- w1 ?
  5. ; Z3 W! t/ F0 v6 ?! ?# w& R
  6. //#define UNICODE. }& s/ G( J, ~
  7. //#include <gdiplus.h>$ b' u! e) i! w0 T
  8. //using namespace Gdiplus;
    # l# l1 W0 M. h: x5 X, P2 b

  9. + w  g4 w' I- a6 ?3 ?) Q
  10. #include "RevApp.h"  d; i1 A: v' n, ~+ F0 ]% k7 s
  11. #include "RevAppDlg.h"+ i. c* [1 P& M  {2 G$ Z, _$ l! |
  12. 7 l0 w6 B3 d2 W8 T; z
  13. #pragma warning(disable:4786)
    - v6 ~# p* x# f4 R; Q* j/ y
  14. #include <map>
    ; f! |" Z6 ?' B3 b" I0 {; y
  15. #include <list>
    2 A$ z4 h/ p" o) [. D
  16. #include <direct.h>- V/ ~( }( R9 ~5 C- j
  17. 3 i- ]; T- `( I* a, ~
  18. #ifdef _DEBUG
    : L# h# |- h* |( w
  19. #define new DEBUG_NEW; r* t* _" ^% `7 h
  20. #undef THIS_FILE! B8 ?! F4 U6 Y3 G
  21. static char THIS_FILE[] = __FILE__;
    + l+ b8 j, B+ R. c2 s) u
  22. #endif2 j4 K/ N% ~% @* Z4 K; p6 ~& y: o
  23. #include "SkinResDef.h"
    5 A/ ~0 B0 h8 }- E/ V: x$ ~
  24. #include "ChangeBG.h"
    1 k$ [8 T3 F$ P1 z8 t
  25. #include "AFXINET.H"8 Q  \1 T7 w$ i- `7 t
  26. ; a! q! c+ u, f
  27. #define TRADITIONAL_CHINESE 0& l3 d, D& v+ d, x
  28. #define SIMPLIFY_CHINESE 1
    4 `7 H! S1 R8 z2 C! Y. [
  29. #define ENGLISH 2
    # m7 L! c$ P6 f7 w7 k  G
  30. int m_iLanguage = ENGLISH;2 v4 t# G) ?1 n$ |# s
  31. /////////////////////////////////////////////////////////////////////////////
    3 p3 d. C, O/ j2 d( L; Q2 ^
  32. // CRevAppApp: j: k! Z7 A/ q) X9 W8 y

  33. $ n7 _* G% x8 c  r$ |. |
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" \4 @: q  A  Q) R
  35.         //{{AFX_MSG_MAP(CRevAppApp)( ]$ V: ~: F$ T0 ]
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.4 G8 d% j& @  r
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
      o; o+ {. l* \/ R8 Y+ ]% E
  38.         //}}AFX_MSG
    " P% H* C( n4 w9 b# R
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)* K" U, j! i5 s7 V
  40. END_MESSAGE_MAP()
    7 y8 T. `* u8 j: y+ x6 U0 |- G

  41. 4 T# t- k% E* s
  42. /////////////////////////////////////////////////////////////////////////////
    4 s" @  T2 Q( E3 D
  43. // CRevAppApp construction+ s8 A  M* x7 c$ D, w

  44. 1 Q) f5 g  A; b1 m# A! q: D2 P# B
  45. CRevAppApp::CRevAppApp()# y9 u7 k- ~" a* r3 E2 N
  46. {
    $ t* }6 p; E3 k9 m
  47.         // TODO: add construction code here,& t& C7 i1 G! y$ J3 y! O
  48.         // Place all significant initialization in InitInstance5 _/ H$ t! d3 s+ T( e
  49.   bDisplayIsBig5=FALSE;; m/ L8 v7 O. H2 j" Z: ~! [
  50.   bRestartUpdater=FALSE;
    4 ]* I6 {' y$ W1 {  z, n
  51.   bFinishUpdated=FALSE;
    2 L# D3 m& p# _1 V6 `! o# e! S
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    % Q4 |/ f$ _4 j& m2 Z: `
  53.   InitChangeDataBig52GBKS();
    3 X  @4 N3 S  d/ z% g. s' ~
  54.   InitChangeDataGBKS2Big5();( L0 M0 T  u2 i$ a: W
  55.         //
    9 w" Z) J1 W* a/ P, Z! g( x, u! Q  g
  56.         bClickRunExe = FALSE;- Q. m2 ?  H; [. J, N
  57.         //
    4 f4 k) R0 J; N6 [2 I# g% @
  58. }
    # h2 p9 j9 _. i5 w; L7 z. x
  59. ! y0 f. \9 N: p+ O! i, H5 W
  60. CRevAppApp::~CRevAppApp()# ]0 [6 m; O( x* L
  61. {+ @  w- {) D; }) V* r9 R9 v
  62.         // TODO: add construction code here,* @6 V! T5 f1 S$ u4 }- e
  63.         // Place all significant initialization in InitInstance6 Y( C0 w4 d, P6 g4 @1 H; s4 V9 u
  64.   EndChangeData();
    , T: F2 E3 U# v) y5 E
  65. }
    & M% ]* W) c+ y& F& U

  66. 4 h# i7 b- s0 q4 |/ F  [7 I( x
  67. /////////////////////////////////////////////////////////////////////////////
    , p  x5 w! x/ S1 t/ @+ T: o1 i
  68. // The one and only CRevAppApp object
    * U  C- m' Q# V. i8 h5 x: ?6 x
  69. 5 h3 r, a6 h" S6 C( M! h
  70. CRevAppApp theApp;% Y/ k1 R+ ?8 o4 @

  71. & W6 \2 _8 }& `- `# ~( ?
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ! _+ f& f2 N& z+ q4 H
  73. {; N$ x! \0 |: ?5 V
  74.   int iEOF=0;
    . a5 C7 M6 q; t. B% B+ B
  75.   char szTempName[MAX_PATH];
    5 w9 l# K$ V& |
  76.   *szFileName=0;1 m+ b2 b' S# c, W( e# O0 A8 }
  77.   iEOF=fscanf(fp,"%s",szTempName);5 p+ j+ m+ @+ g
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    : d6 L  {) k+ T
  79.   {  ]9 a$ n3 P0 J
  80.     strcpy(szFileName,&szTempName[1]);
    0 O6 J5 o! Q4 s+ [4 ?* D
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    " G. z% R) z3 K( d$ \, Z5 i* p
  82.     {
    ) D* P- T, u( ?5 X& d9 x/ i
  83.       iEOF=fscanf(fp,"%s",szTempName);
    7 z6 O1 G3 }6 R/ O7 s
  84.       strcat(szFileName," ");$ e' J' Q. {" W; I- T0 a7 K. J/ _
  85.       strcat(szFileName,szTempName);
    7 A+ p+ ]) r3 m) d
  86.     }
    1 J1 I  A6 G- j0 B% o8 K  X/ S8 p' B
  87.     if(strlen(szFileName)>=1)3 L1 P' V0 A( t8 _8 c2 C1 d$ S
  88.     {0 C4 ]% ]- \# H2 P4 a, J. |7 q
  89.       szFileName[strlen(szFileName)-1]=0;. I0 c& i" A3 F# x) x
  90.     }
    5 P, C! m2 h* T! v  @
  91.   }2 ^( ~* @+ r- E/ D- w
  92.   return szFileName;+ B. N! g4 y* P- l+ _2 _
  93. }
    , ^' x1 T- z* x& L8 n6 O( F) q

  94. ) v% i$ Z" c- s' a$ ^% z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile). K5 Z8 h6 e" O: R
  96. {$ m5 _/ {, f* i& U3 v& }
  97.   FILE *fp;
    ) R! ~8 d" J' t' I' a
  98.   char *key=NULL;1 ]" `- _1 F- P' `4 A
  99.   char version[MAX_PATH];
    * d! ?& S6 d7 ^. Y% W* A( f( G7 K/ t% R% }9 H
  100.   LPUPDATEFILE file,olds;
    % U+ v& w9 q+ B2 M; T
  101.   std::map<CString,LPUPDATEFILE>::iterator p;2 E3 j* W# ^, q

  102.   y- |0 a! D" V1 H6 c, a3 k! f0 ?
  103.   UpdateList.clear();
    ; I. P1 Q0 `! i( g
  104.   UpdateFile.clear();
    ( O3 ]4 X. v- f# I6 m6 A
  105.   if(GetFileAttributes(filename)==-1) return false;( c. J! V6 z6 M2 X# |
  106.   if(!(fp=fopen(filename,"r"))) return false;
    - l5 _8 y- Y) N$ M( Y5 z
  107.   fscanf(fp,"%s",version);
    % _8 W- ]2 z: @/ c2 V9 c3 H3 D0 r
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }) H( M3 l9 _/ a2 v
  109.   while(fscanf(fp,"%s",version)!=EOF)# G" w' {+ G" ^& z
  110.   {
      a  X: D+ F( q: x: W  y% H/ T
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# ^) f; V& @. d  A8 X5 P9 @& p' L
  112.     fscanf(fp,"%s",file->path);0 T5 ?3 z  z9 P: ?( G
  113.     ReadFileNames(fp,file->file);
    ) M- C" {& S, i0 X
  114.     strcpy(file->full,".");# e8 f% _7 [5 D, z1 @
  115.     strcat(file->full,file->path);
    , V5 X4 ^) I  S, s. S5 P7 g8 Z3 [
  116.     strcat(file->full,file->file);# {4 u7 h) K" e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())7 W: Q# d0 a8 Q$ e& c6 F8 U! S5 i+ v$ `- _
  118.     {
    ( \6 H2 r+ @5 h( x& A5 ^3 ?
  119.       file->vers=(float)atof(version);3 n! |- q# j6 P
  120.       UpdateList.push_back(file->full);
    , a( b: ]2 B: h& \
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    $ ~! I' m- M( l2 t
  122.     }
    2 j* d$ Z  q1 T% A" h" y2 ?7 R
  123.     else
    , y: ^7 }9 L1 `9 ?
  124.     {2 t/ v) ^! z  i0 V
  125.       olds=(*p).second;
    7 k7 \$ @- P: v3 L
  126.       if(olds->vers<(float)atof(version))
    ' b9 C7 G! i5 m0 }9 v
  127.       {0 V' V% k; ^; z" S
  128.         olds->vers=(float)atof(version);
    + j* Y$ x: I) G$ l' W
  129.       }/ t) R/ N. H& x$ f9 ^+ m
  130.       free(file);
    & d# J/ R. S; ]7 n; u7 m  `( [4 W
  131.     }$ @' T3 h+ U) J+ I! G& `$ c; m( x. t
  132.   }
    ; Y2 j4 m8 `5 g* ^" g
  133.   fclose(fp);2 F  ~, Q2 D+ ^+ T) v& `. s
  134.   return true;6 ~) A) w" }; Y
  135. }9 c# s! X/ L1 v; w

  136. " W* b  d( n. }" x9 s0 x
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    3 I' B$ k4 v1 ?4 [1 f2 [6 [
  138. {
    0 P, b# O7 v9 ]) P, Q. x
  139.   TCHAR  szFull[MAX_PATH];
    , y3 ?  R1 X! ]+ T2 K) d' t
  140.   TCHAR *token,*inter;3 T6 u6 I- i7 M, C0 v$ h
  141.   *szPath=0;
      i+ u2 V  q5 ?, ^5 U
  142.   strcpy(szFull,szFullPath);! z, r9 N" v0 o, j' V
  143.   token=strtok(szFull,"\\/");
    6 L) R8 P# }8 W) T
  144.   inter=token;
    $ M, U6 i8 b# x* W
  145.   while(token=strtok(NULL,"\\/"))+ ]- O/ A% c4 R( @2 l
  146.   {( T- v: V7 l# s
  147.     strcat(szPath,inter);
    1 w$ Y( q5 d' _/ u) F6 L  H
  148.     strcat(szPath,"\");1 G- t6 u0 ]- V" D+ L$ a2 B5 I
  149.     inter=token;* J0 q+ l0 ~* T* \5 u& A
  150.   }5 l  W! m* ^' N7 }0 J
  151.   return strlen(szPath);/ s6 @, ]: P. \) m0 g1 M
  152. }
    ; O! I3 T% n* l3 ~* C6 O

  153. % R7 [  ~- E: i4 V
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)5 E' u$ ~5 q  H* S4 p  j
  155. {! j2 @- V! d: t- z# G! @
  156.   DWORD attrib=GetFileAttributes(Target);8 e/ r; R, V: R% ?( s& U
  157.   if(attrib!=-1)
    4 n" e- A$ E, G/ u
  158.   {' a% v, R2 i4 ^* K4 H
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))8 S  }5 C7 p1 V" F& g3 c
  160.     {
    # d' c- \( \( `, j& T
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    + y5 ^/ b4 O7 G1 g
  162.       SetFileAttributes(Target,attrib);8 r0 w/ n* o: Y4 _: b) d
  163.     }
    ' q6 i9 \1 a7 l6 Z% Y0 z1 o5 F
  164.   }# H3 |; J9 ~$ o# R) N5 p
  165.   CopyFile(Source,Target,Erase);
    7 h& o! q! ?& E6 P# B9 {: |
  166. }
    + V: M8 e% x! k2 q
  167. 9 ?6 p4 ?: w+ `
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    % Z2 J  x. u1 y- s# d0 \
  169. {* T$ \0 s* J! L" d  C% {0 q
  170.      FILE *fp;
    , y/ N2 L1 ~1 M5 R0 A) E( M3 h
  171.      char  szBuffer[8192];
    % z" m$ W4 O: d" h
  172.   va_list  argptr;
    $ J. d3 ?6 y+ z) S& g* W
  173. 2 v7 J1 `9 b+ V
  174.         va_start(argptr,message);6 f4 i  o3 v% @$ \% ?! k) l
  175.         vsprintf(szBuffer,message,argptr);) Q# m0 z4 P0 }
  176.         va_end(argptr);* P8 o1 j: J! F' g) b$ `& Q
  177.   fp=fopen(FileName,"a");
    & V1 u( b0 S5 m* i9 V0 b8 R
  178.   if(fp); _6 j. p+ V% _. p0 {) O
  179.   {/ P3 i) I' p7 {4 D9 V
  180.     fprintf(fp,szBuffer);
    0 w3 N6 [; ^1 P' X* ~
  181.     fclose(fp);6 V, R! o/ E* a1 }& U4 H( v$ D/ q) X
  182.           _flushall();. B) B0 i2 I1 a3 L1 d7 U
  183.   }4 I0 g8 r+ N7 f; L( e; r
  184. }6 ~  \+ v1 }# a; A: V. k: D

  185. 2 b* b% J( }1 J; j; d
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ; I% u# E. Y# V
  187. {  n3 Q* n6 {8 w2 z
  188.      FILE *fp;
    4 u) d. w0 P5 N' X2 ?/ W
  189.     DWORD  attrib;' h' B" Z' N" `' \
  190.   attrib=GetFileAttributes(FileName);2 o, ~' e+ q# I) i' _* Y
  191.   if(attrib!=-1)
    : k7 q4 Z2 a6 b. V. B
  192.   {
    1 O0 j& b/ x1 I- \/ R
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);+ L& a7 ]: A, T- p: [
  194.     if(!SetFileAttributes(FileName,attrib))8 P6 R$ t8 z8 x, B& A2 D1 D8 [* s& X
  195.     {
    4 V3 ]3 u' W" v' i' _6 Y
  196.       return FALSE;
    # w0 z  {- e+ s# E4 o$ ^
  197.     }
    , s$ L4 t' G3 i+ D& x
  198.   }- [; O! C+ T0 K9 ?3 v+ d
  199.   fp=fopen(FileName,"wb");
    2 {- t1 q+ W! P% N
  200.   if(fp)( W' c' _: d( ?3 Z( c8 i- A8 ?
  201.   {
    9 Y* U: U% L8 @6 i
  202.     fclose(fp);6 ?7 C) E1 _4 s0 C  x. [" p
  203.   }
    8 N* V4 F/ B( W0 n5 ]7 F8 |3 e
  204.   return TRUE;" N$ Y1 x4 V, }* C4 F
  205. }: i  k9 L2 t6 F* a3 s% k$ \1 `

  206. 8 j6 i" D% s: n; V8 A
  207. BOOL CRevAppApp::UpdateLocalVersion(void)7 q4 L" h& i! |$ L3 U& E
  208. {
    $ M% e8 b. |2 d; x5 O+ {0 d
  209.   char filename[MAX_PATH];
    ! j; r9 E8 b0 W1 E( }
  210.   LPUPDATEFILE file,olds;" }6 m( C# W9 K! L
  211.   std::map<int,CString>::iterator i;
    $ s( Q8 w2 s% f1 `3 |+ m
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ `4 x" R0 {( a0 L
  213.   std::list<CString>::iterator l;+ a0 ?5 z. T+ ^' r- P

  214. $ m: S0 k# X+ L8 H2 ^
  215.   if(bFirstUpdate)4 m7 P; s$ E2 G1 ~) Z
  216.   {4 G/ y* I! z& k3 O2 a
  217.     dwCurrFile=0;+ g; Y* U! N; F- x2 w
  218.     bFirstUpdate=FALSE;+ h& i! q, L9 D% i
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 p8 n7 Q' V$ G' I
  220.     {7 t  q! h  r0 L: l; Z7 t  R* ~
  221.       dwTotalFiles=UpdateLocal.size();
    . F  M. ~  _0 }% @
  222.       dwDownLoaded=0;
    4 j! j8 a& G8 y
  223.       bSilentStep=FALSE;
    5 ]: u. d7 F% z$ W
  224.       bCompressed=TRUE;+ G8 o5 ^$ w4 J: Z, l2 I) ]) ^" N
  225.       strExtLocal.Empty();
    6 Q: C9 S7 T2 {1 r* x0 e' B
  226.       strFullName=(*i).second;# c- h# f5 c0 G) y+ s6 f
  227.       dwProgramState=AP_CONNECT;
    , I4 {/ p6 a/ S8 U
  228.       return TRUE;$ M- m* R0 k" L" j7 m* X
  229.     }4 p# ~9 A4 c' @0 L
  230.   }' V8 F7 f3 a6 i, N2 l  c  {
  231.   else if(bRestartUpdater==FALSE)5 J+ v& b8 P0 n' ?8 C
  232.   {
    4 r$ r, f2 ^$ {- T: Q: x. Z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    2 @& Z0 h: f% t! x2 r
  234.     {
    * n& N2 g5 O5 E6 _; ]5 ^
  235.       file=(*p).second;( c9 K! w: n- C" ]9 c
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())- n" W. X$ F# w9 P2 U
  237.       {
    ( H% m* n5 d& d3 u7 l. a  d
  238.         olds=(*p).second;/ d& Y( Q4 W& n: y  {8 _: P
  239.         olds->vers=file->vers;3 s: R/ @7 U7 O9 R8 E9 J
  240.       }2 |" q' r# R  A* h0 W
  241.       else8 d1 U, M' g& T. d& a
  242.       {
    ' s/ w8 x* x8 E1 N: p! Z$ @1 A9 ]6 g
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& c! N7 _) y7 Q7 E& j+ `1 o
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    " `$ i7 ^# ~& l& h: i
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));5 a! y! s+ `2 c4 o+ x' h
  246.       }1 o% q: X: j7 W( X( Z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    4 k+ V7 K, A! p
  248.       sprintf(filename,"(%s)",file->file);
    9 s* |6 |0 \8 D
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! n! w+ d* L" A8 d1 l0 D
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }' P4 s2 \# @7 ]1 O
  251.     }+ O& H9 J+ {: r
  252.     dwCurrFile++;) l8 i1 H! D, |  U
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())' `' c( ~. x" C9 n/ l$ t3 ~5 _
  254.     {0 m% u2 F0 J# Q  E. U9 C! ?
  255.       bSilentStep=FALSE;, w8 L6 U: _( f2 J
  256.       bCompressed=TRUE;* [7 N3 o$ s/ N2 e
  257.       strExtLocal.Empty();: ^+ R" {: J' H  u0 U9 t
  258.       strFullName=(*i).second;
    , l7 [# o+ _) d. p
  259.       dwProgramState=AP_CONNECT;( }3 i+ K) M3 H" y
  260.       return TRUE;; f4 j7 K/ j& ]" K* M  k
  261.     }& ^& g" [$ K5 y+ Z
  262.     if(!bRestartUpdater)
    7 ?! Y% m, E% g: }
  263.     {
    " H8 h! g. _# L
  264.       int iCurrSize,iFileSize;& t1 P, w5 ^8 j! M1 {& S
  265.       iCurrSize=0;" Y# |2 R0 i" [! V
  266.       iFileSize=UpdateList2.size();
    2 C/ g8 t6 y8 m% q$ u4 ]0 c+ I5 f
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");( x$ d; P9 r) ~0 c  }
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");" H& T8 H, V+ n2 X$ H! c+ T* h0 o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");+ Q$ y! I% Q7 @; U. E
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 d* ?/ R8 @3 }0 n& b, o
  271.       Fclearf(".\\update.dat");
    5 o* }+ {% A- F, Q* F9 a& L' s
  272.       Fprintf(".\\update.dat","Bloodyf\n");: L" M: O, |- H% I4 h& S
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)0 O8 Q. G+ p% w% R3 ?
  274.       {2 I) e4 ~8 n* l) J4 R! h& C7 J
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())- m$ E" H6 }" k7 o" C* n
  276.         {' X  y4 c' i* f7 V- L
  277.           file=(*p).second;
    ) E) Q0 A2 g7 R6 n4 d
  278.           sprintf(filename,"(%s)",file->file);
    6 {' d. ?1 T5 Z4 g# T
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);" k  Y) D& ]$ |; H5 H7 e8 f
  280.           iCurrSize++;; I/ [  q2 \9 `3 Y$ V$ J
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    6 n) u! `+ }  [0 S  w
  282.         }
    / T, n) G1 x6 L7 I0 L3 V
  283.       }$ f5 R$ G" p+ @0 D% t
  284.       unlink(".\\update.txt");
    ) m+ R- F$ u+ t% a' p% s' v
  285.       unlink(".\\update.tmp");- T! X7 `. U9 R+ K
  286.       Fclearf(".\\checkversion.dat");
    9 P' O: C. o3 [5 C/ T" i) X
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    2 |; ]2 [/ s4 p% i- ?
  288.       if(UpdateLocal.size())
    - ]/ ^, I0 c9 b9 k
  289.       {4 ]  e# J2 [. x0 J6 u
  290.         UpdateLocal.clear();. B7 |1 S+ S+ D9 D9 U, M+ g5 ^
  291.       }- ~. K  k/ s( }1 P# h) W( Q# B
  292.       if(UpdateFile3.size())) i; R" z5 I+ B5 K+ X& H7 U
  293.       {
    ' `+ \+ F3 D5 [- T" e
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      p. k+ u7 p; }8 A
  295.         {
    , j* f2 k2 M7 P! s1 n
  296.           file=(*p).second;
    # o) w) u& Z, n! I+ D
  297.           free(file);2 r9 z$ J9 I7 b8 P4 R/ v, W
  298.         }' g) k  ^7 l' A  c8 u1 ~. j+ O
  299.         UpdateFile3.clear();
    * k) X- ~) n- D; {
  300.         UpdateList3.clear();( E  q( V) Y: V2 w- x3 ^& j
  301.       }
    - Q0 }: R5 R( |! ^0 b
  302.       if(UpdateFile2.size())$ \1 Y" J; |4 Q
  303.       {- ]: X4 ^9 ~/ U7 M5 O
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 P) a0 M+ @- C' w
  305.         {1 S) p& f! `1 P! i# Y: U
  306.           file=(*p).second;
    3 I0 o; D) i5 @7 G  \9 Z+ ]4 E* O# x* @
  307.           free(file);1 {, `" A+ d4 R) ~" e8 e
  308.         }
    $ [% V3 g, Q% I9 I
  309.         UpdateFile2.clear();0 y5 ^( H- Y  e. o
  310.         UpdateList2.clear();
    " G4 ~8 v: N' U* k2 A: K9 T4 R
  311.       }
    ' L% f1 s6 G2 W: {; M' |/ F
  312.       if(UpdateFile1.size()); e4 `6 k8 H& M( [2 ?. ^5 ]' j$ i
  313.       {
    " n5 u; L! i5 q" x
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 d- I# [$ w9 E, ~
  315.         {* t+ [, K  M  B) @
  316.           file=(*p).second;
    * j# t- t( M+ u, M, f/ }, E
  317.           free(file);, d' _( ?3 ]/ e7 T# A1 T
  318.         }
    - p) s; l& F2 K3 g: e
  319.         UpdateFile1.clear();
    8 _3 T$ d! Y4 O; u; s7 I; M
  320.         UpdateList1.clear();5 Z6 l  B: |" U4 h- G& `' s
  321.       }5 {, r4 r6 ]4 k
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));6 r5 v, N0 q) Z4 O
  323.     }
      ]2 Z2 ]3 i' x- L9 r7 \, ~$ p' Y
  324.   }
    - T, U6 U6 e) i0 P. u1 h
  325.   return FALSE;$ c1 c8 _- R. `- y
  326. }% F: p* D# k: Y
  327. ) j; Q# y9 ^7 z
  328. void CRevAppApp::ClearAll(void)9 v) j- d2 P. A, W4 r; x1 v* v6 u
  329. {4 U$ m% @/ _/ D9 {) `
  330.   LPUPDATEFILE file;% X/ ]* u7 z5 H0 d9 u
  331.   std::map<CString,LPUPDATEFILE>::iterator p;' K$ f1 x5 `2 {  Z* L  w

  332. ' X& m$ X4 r9 c( k& K' q
  333.   if(UpdateLocal.size())+ Q' H" {4 g1 b
  334.   {
    % ~" x& m7 x2 D) s1 l
  335.     UpdateLocal.clear();
    2 u& }% P4 W$ l% ~" H) ]
  336.   }
    ; M: M' r+ E& e! U
  337.   if(UpdateFile3.size())$ _' ^; m: w3 b, B& U( A0 V& p9 A% ~
  338.   {$ L) _( L' b0 ~" q, y$ t' c  v4 c
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), S5 A" _8 S- W) m/ ]7 _. u
  340.     {$ e- B+ D+ ^& O' @/ B. K
  341.       file=(*p).second;
    & u& e: Q  R- ?2 `0 o9 ^
  342.       free(file);
    9 L" N" B3 U" q  s0 O( h) D/ O
  343.     }3 y3 [& G0 W; J( X% j6 g$ Z/ v
  344.     UpdateFile3.clear();0 |1 r# A( m3 P% ]. h/ |
  345.     UpdateList3.clear();
    . Q8 W! m; ?) D1 r8 F
  346.   }
    % ~9 R# ?9 O( y+ e
  347.   if(UpdateFile2.size())& P/ S( M- \/ F2 E" g* N; B; l
  348.   {
    7 f" y. c7 |2 z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( g( y% Q2 j+ Q3 d! c& B) Q3 E
  350.     {7 ^& k9 }/ h2 _" E6 D
  351.       file=(*p).second;
    2 W* g- I% O' V
  352.       free(file);) u# s0 K* [3 m
  353.     }
    5 {' {- v( y8 e- q# r2 e: J/ [# P
  354.     UpdateFile2.clear();0 ~: o( z0 k/ J2 P. g
  355.     UpdateList2.clear();
    & i) {* W% `% g) J8 \$ H. C. x3 }
  356.   }
    4 e9 d; k1 f" K7 t
  357.   if(UpdateFile1.size())
    & q; G) A8 M  j  o) g
  358.   {( o* c7 m7 H; r7 b$ P
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ m1 y8 h5 `  R6 p8 n
  360.     {
    7 z4 H) D0 R0 y$ }9 c
  361.       file=(*p).second;
    7 V5 t% p' {! W
  362.       free(file);  y4 E) L& L9 |, ^7 B1 z! r( F: H; C
  363.     }
    5 y! e- S* j. {2 a
  364.     UpdateFile1.clear();
    & c1 I6 {5 P1 V2 h6 j# `. C
  365.     UpdateList1.clear();
    ) M! x, d) G1 b; U
  366.   }
    - O7 W3 K. Y5 C7 C' H1 l
  367. }  0 g5 B' Z% i6 y$ M. _( K
  368.   - N3 J% R- ~0 Z$ ~: ~* }
  369. BOOL CRevAppApp::CheckLocalVersion(void)' f7 w) |( _4 w2 r" r' F$ U
  370. {* e- z3 H6 I0 i: _/ c0 v9 }
  371.   int c;
    ( ^# s" |& B0 J& B3 `
  372.   LPUPDATEFILE file1,file2;
    " V: `! w4 Y& ^# L/ h* g
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 X7 O' `  O! L& I7 g; M5 }  {3 z
  374.   std::list<CString>::iterator l;5 T7 W0 |' K( G
  375. " f9 P; T: f! M7 o& ^
  376.   UpdateLocal.clear();
    1 P% r( J) D: A. Z7 T' j0 p- \4 y  P  c
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    # @- e7 E+ z4 H. x! I: _; E- k
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    & }: a" j: \4 l
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);: Q5 z3 f, S6 ^
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    - ?5 ~( I- H3 v2 m9 X
  381.   if(UpdateFile3.size())3 H6 E  |$ b+ Q0 }0 d  F7 q
  382.   {1 C. Z5 w9 [( G
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    8 \7 l" v" |3 N$ J1 F& D
  384.     {; F* w0 ?% V! z- A) z- z& v' R6 w
  385.       file2=(LPUPDATEFILE)(*i).second;: V. }$ v1 \, Y+ T. C
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( ]1 B' n$ R# r" H3 Z; J, z3 e
  387.       {
    ! O9 N% c8 c* p- S5 f. `! n
  388.         file1=(LPUPDATEFILE)(*p).second;0 u; M# h5 r! S1 H0 T# k! o# h
  389.         file1->vers=file2->vers;
    5 @3 ?- b4 O  J* k* h- i/ D
  390.       }" i% }5 Z1 L% {7 J7 e; r
  391.       else
    $ I+ v) p. }8 Z" r8 y) ^& v
  392.       {1 [8 z  f. y2 t  m  U; a
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& @6 i# x/ J3 B4 K3 ^
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    1 F' ~0 _5 C0 Y7 @% k( C
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));; J2 M1 p# O7 W5 ]; B5 G$ g/ V2 G
  396.       }  U# U% I7 [$ I0 r
  397.     }
    + e2 u1 W9 H" v# M( n: k" G
  398.   }
      ?, n5 }5 o4 q' m, r1 n" A
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)$ l- E& k6 Q" t3 h4 n% z: s
  400.   {
    / X4 }( b, m/ N9 n& }6 w9 a
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())! k' L) r5 p- A, S
  402.     {+ V- k" G: O$ {
  403.       file2=(LPUPDATEFILE)(*i).second;8 V9 Q: _7 o$ g9 y6 N! Z/ q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 V$ @7 h3 P* p" n, C' I# T% p
  405.       {
    4 F. r! }! |; p; f6 Z" a0 k% b+ L
  406.         file1=(LPUPDATEFILE)(*p).second;
    & l/ i) M. f; c8 a; w, @, a0 {* W) K
  407.         if(file1->vers!=file2->vers)0 u  S1 M" d" P0 @
  408.         {! f1 M. w" N( P& q* R6 d! Y  C
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 j& W) j6 K7 t# r; m2 z
  410.           c++;5 B: c/ e# O& R2 U( I
  411.         }* p6 e  d: [. V6 ]! T9 u& e$ Z
  412.       }
    ! t8 z. S4 h; g+ N9 `  W
  413.       else; M% h1 U1 |1 b6 ]4 r
  414.       {5 L/ g4 F+ T! z1 I1 _
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " C) l: z% j2 x' T. Z
  416.         c++;
    3 O: z5 h9 k& E0 \; n6 v
  417.       }8 O7 R. g( {0 z2 O! w3 K: g, D# G
  418.     }6 G; u, Q: _% V( P1 b* d
  419.   }
    & j* O  l2 q/ u. q) b
  420.   unlink(".\\DownLoad\\update.txt");  r# p" j7 {/ P$ ?+ V! Q* g5 I
  421.   if(UpdateLocal.size()) return TRUE;7 l1 j( E3 f& @  o. B# ?
  422.   else                   return FALSE;' _- a9 N6 O  a
  423. }; ]4 N" ]* E" r% c

  424. " V% Z2 m3 j/ h' ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    : ?3 w6 j; p' _1 N2 l
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"& {) G+ D* i8 t5 \* T& g
  427. ; R" I3 Z# d3 Y4 k1 l. u

  428. ' j' S) w, _! P- G% ?! d

  429. + z% h3 h' f& L5 h/ s* T
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 [" E/ T  u  A- q  ?
  431. {/ k3 ]  A/ j: j  y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;: R* W' \( K& w$ w4 }! d: _0 S
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 U# c8 u$ |$ v* ?+ Y
  434.   {
    . T8 [, A# B  H5 O$ ?
  435.     char szLanguage[50];
      d( |# {6 a: o' j0 D# ^; r
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 H% N6 O8 V% \+ Y7 k6 [4 i
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # K2 {3 C1 Q$ {4 i$ s
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 s9 N9 {$ o( ]; a: y9 V" z3 a
  439.     else                                   m_iLanguage=ENGLISH;
    ) |" n8 p9 b: t7 N
  440.     char szRegister[100];% U# A7 u" ], r1 t& e
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / @6 e9 n( H& n. [9 @0 x
  442.     strRegsName=szRegister;
    ( C* z. Q$ j5 I# T5 {3 _
  443.     char szPatchURL[100];, c9 x, y( F- e( W7 E, q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % `7 a2 j2 @  q! V/ }
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 g+ f8 H8 X) C8 P- y
  446.   }
    + @, L' C+ G6 Y
  447.   else
    : J. F% K8 |# m; V# |
  448.   {7 a3 M0 c2 e) Z  v2 B8 h9 H
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( `' u5 s' n5 n5 Z
  450.     strRegsName=DEFAULT_REG_URL;
    , P1 [! Y1 d! \( p
  451.   }. A  z8 z0 v0 r9 `3 @9 x4 j
  452.   if(GetFileAttributes("hosts.ini")!=-1)
      L8 b  _/ I% m5 Y7 B. I
  453.   {8 K/ r: E5 V* j' M. {
  454.     char szIP[50];( _3 A( r) U4 V: ]
  455.     char szDIR[300];
    8 C0 N8 R* p3 J3 b0 N" t% ~$ X( w
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    0 `: y/ y; P( G9 [0 V
  457.     {/ @4 ?% G" G% _1 T4 ]
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    $ v: T3 }3 e  Q; f: Y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    . F8 N6 y$ R& H6 c$ p6 q$ m( z9 L
  460.       strHostName=szIP;* |1 W2 a6 P/ y" j
  461.       strHostPath.Format("/%s",szDIR);
      I# D: K/ A( v, D  v+ S
  462.     }# o& v) _1 `/ y6 ~0 y% J
  463.     else
    ; g& _4 z  f% E, K
  464.     {. N: ]9 G9 k" j( }, i* w( V! g
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# N6 r. }2 o( d1 P, V/ M! D0 I
  466.       {
    , a7 R: x+ L; c: J6 o
  467.         char szLanguage[50];2 \- \& K- [9 A/ X
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & x/ b5 ~& _7 r' _, v; f
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " C6 Q% Z3 I; r% B: t) E0 S9 X
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. V2 s3 I1 d" y) y5 c  n" I
  471.         else                                   m_iLanguage=ENGLISH;3 t7 C* J4 Q3 j7 e; n. t3 L" p
  472.         char szRegister[100];& f' u) s) T  A2 E
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % m# S/ q0 M- u* Q; R2 ~
  474.         strRegsName=szRegister;3 }" r$ ^" G9 q5 M
  475.         char szPatchURL[100];
    5 w& D) X, d/ x1 e/ B( f) f2 f+ D3 m# F
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " w; U0 @1 S% `7 g) W7 d* T
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);0 w  x/ U8 e# a9 ?0 v, a3 G
  478.       }6 H* H! e; T8 Z% a; h% g
  479.       else
    / B& w3 P; K. c4 |
  480.       {& [0 C3 |* J3 y3 o8 I. x0 ]
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( w2 h7 B- O7 X. e8 i# Q: Q
  482.         strRegsName=DEFAULT_REG_URL;
      N9 t7 R" f/ c, K0 j
  483.       }2 n( V8 s" @9 Y0 I& T
  484.     }
    # @7 ?9 x& K% E, F1 n( V
  485.   }
      U) K! ]! y; Z$ _' y9 Z8 Q
  486.   return true;. x2 D. v& S' T7 n  _3 ^# o
  487. }! S( W6 K0 d, ]. N

  488.   _8 F* R3 E% w7 R4 j) b
  489. #include ".\ZLib\unzip.h"
    & N' P: ^$ l: D3 S1 I
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    1 n1 X! s2 d2 G6 e# s7 j' ~# x
  491. /////////////////////////////////////////////////////////////////////////////! B( u, r2 Y3 T: ~1 a
  492. // CRevAppApp initialization- J) P' v( s: G5 a" t/ B1 j( P0 M
  493. - M6 P- s% C, c) S
  494. BOOL CRevAppApp::InitInstance()' O" M7 ~& g9 I+ R& O4 N) p
  495. {' d0 m2 b/ K0 `. r
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    - {, T# N3 C. U9 S

  497. * n) \+ u7 `" \" Z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    5 H4 y5 E/ ~* A6 s9 @
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))8 O& d  x" l: G
  500.   {2 O# M5 R  B; J' p; U9 {- ]
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    4 N3 }+ A  f# W  |! V
  502.     GetPathFromFullPath(szPathTarget,szPathSource);! n+ |; o4 C; z" z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
      {& T' E4 q: g3 {0 f  R6 o2 ]
  504.     {/ k' b/ e" Z# O: E+ R0 }
  505.       strcpy(szPath,szPathTarget);
    2 S0 M7 B$ b* P; V$ ]: R. {
  506.       SetCurrentDirectory(szPath);0 E% |- r, W( b8 F3 t
  507.     }) P* {. M9 V* @* {1 B4 H, h
  508.   }0 q2 C2 n4 |( g/ Z
  509. #ifdef _DEBUG
      L" ~. W* ?& c! q4 |" g+ W
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& t9 y! x& k& U9 V1 B1 j5 W
  511. #else$ h  W' [, ^! b; o6 Z7 _& c& {7 ?
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 b* J. h) K* x( k5 D( v
  513. #endif
    # u0 W0 w1 K5 U; J/ ^5 M2 A
  514.   {5 S5 y# I& K9 x" H
  515.     char tempFileName[MAX_PATH];9 O$ J4 k' a* V) k$ t
  516.     strcpy(tempFileName,szPathSource);/ Y4 F9 _2 J6 Q0 L: r5 ]. @
  517.     tempFileName[strlen(szPathSource)-12]=0;4 h5 Z8 M1 V" q# o
  518.     strcat(tempFileName,"\\$CSUpdate.exe");. p) |$ Z/ [, h
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);- L+ ~6 n: W. M, }8 k" o) l3 h' y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);' y$ a! _8 W: G/ B$ j0 V
  521.     return TRUE;
    0 ]7 a7 Y4 L' l' B  g
  522.   }% c: L$ K# d; V% _, k+ r) Q2 Q0 s
  523.   // Nuke 0118: Delete run.exe9 H8 ~+ ~- D* ~' I5 ^# p1 m3 f
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );4 T) M* f% Z( e! u( _9 D. X
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");2 z: {/ i7 W5 Q- T% U, q  g
  526.   if(!ReadCfgFile("Config.ini"))
    6 l1 J2 l; s) \) E/ V1 D
  527.   {
      Y3 R& j) Z1 A6 e1 d2 |9 d
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);/ q6 J/ o$ Q# A% J
  529.     return TRUE;! p& x0 [- s3 ^2 f) C+ B
  530.   }
    3 A) ]2 C7 y8 r1 Z; B
  531.   HANDLE mutex;/ w: B& D8 O6 \& r
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% B% U- r* M& h: B3 M$ c
  533.   {7 h% k( ~% M# D3 H* }
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)2 Q. G# n: h* t
  535.     {* Q. |  c! P! Q# @- a& ~
  536.       CloseHandle(mutex);
    * u/ X/ Y  y! x# i
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);/ r5 j4 k3 T; ^! a# A
  538.       return TRUE;
    / q- S  k# K% g
  539.     }
    7 j+ B: W5 [/ Q+ ~- M( f' S2 \
  540.   }  
    + K: p7 m3 ]: M1 r. ^
  541.   CloseHandle(mutex);- [3 h  E9 ?' b* K
  542. & E$ @7 S* x. z1 Y" X/ J( W$ V
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ) @% A4 ]( E9 X, S
  544. $ ?' E- X5 r( p2 I# D- x) o
  545.         AfxEnableControlContainer();& ^6 s" ~4 b, o0 }
  546. ) C# d4 C  P0 K# _4 q# ]
  547.   bCanUpdate=FALSE;
    6 C5 P0 S" k2 y
  548.   dwStartUpSteps=1;( V* f& ^" D6 |: d9 k
  549.   dwProgramState=AP_NOTHING;- Y0 [4 @1 O0 S$ k( T* n* p
  550. + q! S) |% ?3 }7 F* R$ r
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);: K5 G; [8 j! z8 D  P7 @( `

  552. & D0 }3 a" e( f7 }
  553.         // Standard initialization
    9 J4 P6 C* ~# t9 D# d
  554.         // If you are not using these features and wish to reduce the size
      O# B- I( w* a0 h; O+ b
  555.         //  of your final executable, you should remove from the following
    8 \& R( z0 G' c2 M
  556.         //  the specific initialization routines you do not need.
      A/ f3 h) ]/ S: O/ q; I( \+ q

  557. 8 z  O" ]; z( e% b
  558. #ifdef _AFXDLL1 u+ {7 {/ j  ?: v1 ]4 p
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL6 U0 u) `: B- `' N9 S
  560. #else# ^4 r; ?* J0 g2 c, u6 O6 V$ R( d
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    * @! y& R( z( v7 K" X. u
  562. #endif/ ~8 ?% z, j  U$ F
  563. / p! J( b$ Z  \  X, o5 {) J8 z
  564.   dlg=new CRevAppDlg;
    ( g. }# w! x3 @% s
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' [) r/ i1 T# I6 W& ~: U9 A9 S9 A; T
  566.   dlg->ShowWindow(SW_SHOWNORMAL);8 _6 b  M) y4 A$ x/ {3 w6 b
  567.   m_pMainWnd=dlg;2 x' E; q, t# s2 C% c
  568. " T' k, p- s& O
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 }2 F- J5 z5 W6 N* A
  570. " m- D# ]! l/ A; @. S+ ?/ W) x6 }
  571. //  GdiplusStartupInput gdiplusStartupInput;' d; F) G' s3 K9 C/ m" K& W
  572. //  ULONG_PTR gdiplusToken;5 O& D% {+ h/ v' K5 O' G
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);; |) q- P. N9 h, z: E7 N9 a1 l
  574. 0 O3 c, [& Q- H
  575. //        CRevAppDlg dlg;; h: `) W, @% C. s, F1 F
  576. //        int nResponse = dlg.DoModal();8 T" X7 b! u  Z6 B  w" t8 z% z! |! {: H
  577. //        if (nResponse == IDOK)
    7 m; W) G$ J  X# `+ s9 }) P2 r
  578. //        {$ a- a: y) g: e) s: V3 v! w
  579. //                // TODO: Place code here to handle when the dialog is
    2 `% w5 D2 L, f9 t2 x, v" c( }$ A
  580. //                //  dismissed with OK3 v; n# i+ c: |2 m9 {4 l; U: x
  581. //        }, Y6 a& @& p6 L3 Z* Q3 N
  582. //        else if (nResponse == IDCANCEL)1 ]( M' L5 V$ ?2 F6 v& x
  583. //        {& ~' n8 c) u- f1 c4 L
  584. //                // TODO: Place code here to handle when the dialog is) W  Z. T' _- P7 y3 p
  585. //                //  dismissed with Cancel; a# n) Z# }) @$ L7 C& P1 I) R
  586. //        }5 n2 Z+ K: v. h/ X, E1 i
  587. % Z" h4 _0 u5 l1 E
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . Y* k; N6 h* `) ?& A7 [0 l
  589.         //  application, rather than start the application's message pump.
    % r- U+ n. V) j+ d
  590.         return TRUE;4 d, _& l1 ~( W. a0 u
  591. }
    0 p+ e0 T% v4 W  n& z

  592. 3 c4 A& o/ `! H/ Z0 y( k( ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    " E0 q5 n' d% F- m" O$ j0 Z$ k
  594. {
    2 o7 X; x4 L0 @7 x& l
  595.   int i;
    * r. _; c, Q( e# G- U
  596.   char *szRet;
    % P5 O9 e9 ~3 L

  597. 5 H4 u8 E, M8 O$ j
  598.   if(pSource) { itoken=0; sztoken=pSource; }2 R* n0 w7 Y# W5 Q: h
  599.   if(sztoken)3 q8 S/ e# e( |  h! v
  600.   {
    ( y1 G+ W- O& T
  601.     szRet=&sztoken[itoken];
    6 i7 n1 a0 I( D; X
  602.     while(sztoken[itoken])) g' S& {8 U9 }
  603.     {
    9 p( P- z- v& W; g" C  R0 f
  604.       for(i=0;i<(int)strlen(token);i++)
    ' A& s- y1 ]5 T
  605.       {
    , k/ ^1 ^; S2 \, }( M3 a
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    7 e0 B0 r% b% {9 I( A# S
  607.         {! @4 V2 M% |; B9 j
  608.           sztoken[itoken++]=0;
    * A7 p$ D1 C, I( G7 a1 e
  609.           sztoken[itoken++]=0;
    2 G% m+ X: i& b
  610.           return szRet;
    ) y# _; _8 ~1 ^  ^7 P! K
  611.         }& Z6 J! I$ H/ D) Y
  612.       }& A: k! j  W- |: b
  613.       itoken++;' N. h& H  @) G+ M  u* y
  614.     }
    # ~$ t. ~: H9 s! M& m
  615.   }0 q, N( N. b  W) B. q  a& z
  616.   return NULL;
    8 [/ ]9 s' Y+ v. h; g
  617. }
    , Q( v/ C8 t7 y! v" D4 F

  618. * J3 M% M7 S; _8 h+ s
  619. void ProcessProc(long Total,long Current)1 P0 Y# Y; r5 @$ o  K7 \
  620. {: u/ }  {6 j% O* Q  R
  621.         MSG msg;  U7 |# Y8 L/ }% ]# d. c3 K
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);7 d* W5 [9 s7 _! n' X
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));7 X6 e* [. B$ o7 N# j) e
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))6 E. X) s. q! T: V  A
  625.         {, G8 N& c" j% z$ e' [3 z- S3 |
  626.                 if(!GetMessage(&msg,NULL,0,0))4 p' o2 L9 p2 F; I
  627.                 {& {/ R# S8 a* y6 ]) u
  628.                         return;0 w6 ^3 k' w1 f  e: c+ t. C/ @- U. n
  629.                 }
    * A0 m$ c$ @3 j
  630.                 TranslateMessage(&msg);
    / h3 B- k7 _2 l7 L+ _9 U
  631.                 DispatchMessage(&msg);
    0 Y" X! P" J: u
  632.         }        + X9 O; S: V9 L1 D) G
  633. }1 ]; F  ?+ ~0 [% z
  634. " [3 U0 v0 Z9 n( H0 r* P
  635. BOOL bFirstChar=TRUE;
    4 x7 m# R3 K) E  k" n5 \4 g
  636. 7 }5 z5 G; ]  J
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    5 h! k- v, }( a6 }, L, U
  638. {
    / I6 L/ {6 g  W5 a- y5 H: E0 Z
  639.         // TODO: Add your specialized code here and/or call the base class2 g( ~3 P: O) u7 z$ I
  640.   switch(dwProgramState)+ s' B) ?3 d' K, [" h$ ^% u3 }
  641.   {7 X* w, M& D! O9 g/ l$ _' s' v
  642.   case AP_NOTHING:. V2 T* H: W7 e3 |: V' f
  643.     switch(dwStartUpSteps)
    % C, A! P) c2 x2 ?& i
  644.     {8 s, m% Q$ R# @
  645.     case 1:+ e2 ~! J# \/ H6 k" [) q" V
  646.       {
    # X5 b' g( k( n
  647.         int i;
    7 }8 t" m% L4 a! v9 Y  o- ?+ W
  648.         CDC *pCDC=dlg->GetDC();
    0 n! r1 F! T' k1 e% s
  649.         HDC hdcwnd=pCDC->m_hDC;
    % h; o/ [  ^6 w7 d' E3 C2 z4 f
  650. //        Graphics graphics(hdcwnd);
    - d. Z0 T' [. c1 t8 w1 |1 d
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ) i% Z/ X1 V. y3 q0 u3 p) A
  652. //        INT iWidth=bitmap.GetWidth();4 y! K5 G, _: U' h  ^3 C2 Q
  653. //        INT iHeight=bitmap.GetHeight();
    ; t4 M8 F2 C0 ^; A
  654. //        Color color,colorTemp;9 m: H+ L# W7 b* z$ \/ G
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)# V( X6 [/ |0 r9 Y2 _7 M% p
  656. //        {/ @- _3 H' w- k  G+ x0 B" c  F  H
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)$ ~: B" J. Z/ V# j4 g; [. p; k, O  U
  658. //          {% {! s' o2 ~1 g1 p2 v& ^; e
  659. //            bitmap.GetPixel(iColumn,iRow,&color);1 b4 s7 v& q" \% }/ Z
  660. //            colorTemp.SetValue(color.MakeARGB(; I& B" [- f6 [3 R
  661. //              (BYTE)(255*iColumn/iWidth),
    . b3 _1 c/ a* }# q) f
  662. //              color.GetRed(),2 `8 S0 y& ?6 ?6 A2 f
  663. //              color.GetGreen(),
    1 ~4 }2 v2 f& e( w0 S
  664. //              color.GetBlue()));
    ' [0 |8 B( I& K
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);1 }7 Q) x) ~+ V
  666. //          }. k" A8 \" R1 T) `9 j3 s  v) t
  667. //        }
    - v/ x7 ^7 u8 l, D
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    1 a1 E% @- y% N) w0 m  G1 [0 c  O
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 N, \+ w9 o0 h6 F
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    9 U5 G% @: }" w* p
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 r! v' O9 v- \8 p. h' r* s0 f% x7 m
  672.         for(i=0;i<240;i+=8)
    ! Q- p5 F" S- \3 O- ^2 k
  673.         {5 o' m1 F$ H8 f9 x! ?5 P/ q) v
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 Y5 G, F$ ^  `/ u
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' u1 R& i2 c# e% A/ H3 @1 V5 v3 G1 C
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + q: L% Z( e# r9 R
  677.           Sleep(33);
    1 m5 d2 x& I" s2 z
  678.         }
    ) E2 J8 a% q# ?* t1 f; P
  679.         Sleep(1000);2 f( X/ `6 M; U' ^' N1 B
  680.         for(i=240;i>0;i-=8)2 H$ Q8 _+ [% M4 h& {
  681.         {
    ! T; b+ K' ?, o" h2 I
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ( d8 L: |, P( l0 i
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& f& r6 d6 f7 s8 e! A
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 I: O3 j# L: n9 g9 u' y! j
  685.           Sleep(33);
    - f% r8 Y4 {" H. X  |
  686.         }
    # v8 {( X) j% R; E' b, U
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);2 \2 F) k1 ?9 O; E; ?0 x" d" A
  688.         dlg->ReleaseDC(pCDC);% u: N# z1 m2 v9 y
  689.         DeleteDC(hdctar);$ |0 n" P3 P3 C0 c7 ~
  690.         DeleteDC(hdcsrc);5 M9 K" ]3 V" E. I8 x. s
  691.         DeleteDC(hdcorg);& y7 c+ L; f1 P
  692.       }
      ~( }! d! V, @5 |" }! O6 D
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 `- r/ k3 c7 d+ ]* S0 O0 m' d
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    8 w! y5 a% s1 p& `2 I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");  j. n# V( X6 ^1 M7 M
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    1 j& @4 v7 {; j) _) k* y8 l" L
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 N* @' |" P, R" r9 ~
  698.       if(!Dn.Connected())
    9 R: ^5 \4 k: F  g" {( Y# Y5 v) I- e
  699.       {
    : ]  A( G' B# D) K8 F( H
  700.         dwTotalFiles=1;
    . e' Y+ s# ]. N& D
  701.         dwDownLoaded=0;
    ; d# ?7 V, H- ^& P+ K3 D
  702.         bSilentStep=TRUE;( Y$ V$ ?- E: M8 x* [+ z, t5 o0 S3 B
  703.         bCompressed=FALSE;
    - F6 C  A& Y3 `1 n
  704.         strExtLocal.Empty();- F0 \/ y3 b, h6 ]/ X
  705.         strFullName="readme.txt";2 U4 ]9 a5 P8 q6 V
  706.         dwProgramState=AP_CONNECT;2 r0 i1 D0 w4 n! @! Q" |
  707.       }
    . H* v9 ^  {5 y- j* w, q+ N
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();0 \4 Y) S; Y  @' v1 l, X8 p1 g- s
  709.       dwStartUpSteps=2;6 ~1 z+ S$ N+ R
  710.       break;
    ; o) H% ~# m! }. h
  711.     case 2:
    5 a9 A& @- u' Q2 {8 j6 H; f
  712.       {4 i) b5 v7 M4 Q5 e; T
  713.         int iEOF;
    9 T* \) P/ X7 u! l  f+ \  ~5 y
  714.         FILE *fp;, e: P5 W5 s% d$ e% h
  715.         char szString[512];- q$ T' ^6 M: v, ^/ Y+ ^6 z
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* A, e# R4 M, W: ^3 ?' m1 W' I
  717.         if(fp)
    ; P: j# F3 h* ]! Z1 r: M
  718.         {9 @% F4 K/ M5 p$ W
  719.           do
    5 z: h: J6 e) y
  720.           {/ k# u0 w, c+ C( j1 i% w* C
  721.             iEOF=fscanf(fp,"%s",szString);& I# c6 R6 Q8 g: H0 [
  722.             if(strlen(szString))
    % H( x- u0 a9 [) P
  723.             {. W9 K* m+ c) z' t9 l$ s9 }
  724.               if(bFirstChar)
    & g# f& l# ~3 K' Q" L
  725.               {
    " \: D0 I; x9 B( n5 E
  726.                 bFirstChar=FALSE;( N  N8 o6 `; A6 \
  727.                 bConnectIsBig5=FALSE;
    - ~! Q$ ?# N( [3 J+ k3 ^
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;0 ]9 |8 M' \  G8 x
  729.               }. N3 Y+ H, g1 u1 W6 w
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ( m* h4 V' p$ S5 _* @8 ^5 t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));3 K! J& G* s% b: C
  732.               dlg->m_ListText.AddString(szString);7 C( ^/ ?/ R8 E3 |5 c# _4 H9 y
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . G6 X! n( D2 _& ^3 S
  734.               *szString=0;
    ; }  Y6 z- `/ Z: O, |+ \1 ]: }/ h
  735.             }
    # B6 u! z% D# r9 G0 S
  736.           } while(iEOF!=EOF);
      v) o) e" J% c2 s- P
  737.           fclose(fp);; A' ]9 T( M- q; _3 D; k1 @
  738.           unlink(".\\DownLoad\\readme.txt");2 h+ N% e- J) j1 H- ?* y2 h5 `
  739.           dwStartUpSteps=3;
    8 `4 {  h; x( {$ R! c# C
  740.         }+ v6 R& W8 L2 }% [+ P# P
  741.       }
    + [$ k8 @; e! w5 I# p& F
  742.       break;$ i$ U/ [4 b& W' p5 h, f. ^, |
  743.     case 3:
    . v; R5 \: R- r% H5 ^+ `
  744.       if(!Dn.Connected())9 z( W' Q' v2 d# X  W+ R$ H
  745.       {
    # H# [( P6 A5 S9 [: W  a5 y! H
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);& t: E/ m3 l6 [7 w% r
  747.         dwTotalFiles=1;. I5 z( o8 ]0 I4 w# V6 l; w' q
  748.         dwDownLoaded=0;5 u6 Z: {1 v( F! a4 F  F
  749.         bSilentStep=TRUE;
    1 @( j8 s5 F; L* i/ O8 T3 d
  750.         bCompressed=FALSE;
    & p& ]1 e3 j+ g) H
  751.         strExtLocal.Empty();
    7 C3 J8 Y  O0 a( G) |! `" M
  752.         strFullName="checkversion.txt";
    + D  }6 e2 S1 j1 q9 ~( y
  753.         dwProgramState=AP_CONNECT;) T, m4 W; |8 I$ z
  754.       }
    ( G- y/ Q- C( \7 C( B- U' A
  755.       dwStartUpSteps=4;
    / o; `# r* W' o- y: H' q$ u3 r
  756.       break;
    * Q4 a, x+ x  O: O
  757.     case 4:! E( A; j  t+ f* S/ H' S. g  R; x
  758.       {: j" A2 k4 _/ x0 E/ \# h& f+ \" |. }
  759.         FILE *fp;$ P) \/ F; R/ ]5 a% z" z, i
  760.         char szString1[128];
    2 w3 V) b- ?: z* ^0 R$ {
  761.         char szString2[128];
    $ s, C" @7 N6 `% ?, j' ?
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    " ^2 D6 t3 ]! T$ Y  \' w3 E! u
  763.         if(fp)
    ; [# v* U4 x/ y
  764.         {; c2 J9 _5 S) l+ J& q9 J0 u
  765.           fscanf(fp,"%s",szString1);8 Q" Y; ?6 H8 q1 m# v: }
  766.           fclose(fp);; S7 H3 T1 Q9 V* q
  767.           fCheckVersion=atof(szString1);
    2 x8 k" `& v3 \
  768.           fp=fopen(".\\checkversion.dat","r");  u( y) p! [' J+ n3 G
  769.           if(fp)
    $ f$ n, j* j* h1 M+ h
  770.           {1 B' _; k. J* z" g
  771.             fscanf(fp,"%s",szString2);
    : h7 k) T2 |9 A% Z( e' t: c- C
  772.             fclose(fp);
    " j2 I# E& y$ \- k) _) u5 D) w$ y  U% R
  773.             if(atof(szString1)!=atof(szString2))% }( x7 i- y, Y# N! j4 r- }  }
  774.             {
    % F1 ?5 Y0 z  W$ B; [7 ?' g
  775.               if(!Dn.Connected())
    " m# i; d! ?4 W9 O0 |8 i6 P
  776.               {
    7 \4 d+ O8 w4 D
  777.                 bFirstUpdate=TRUE;
    7 l* M3 C/ f$ ^- ~: j3 y1 P
  778.                 dwTotalFiles=1;% j  n. J+ u/ P$ `" X) ~1 ]7 ?
  779.                 dwDownLoaded=0;% d/ N9 F8 W) k: e  m% s
  780.                 bSilentStep=FALSE;
    ' L/ j* j6 L0 o7 X8 \1 N1 H
  781.                 bCompressed=TRUE;1 Y0 w' \5 e6 s6 y2 n
  782.                 strExtLocal=".\\DownLoad\";4 [4 D0 I) e# _
  783.                 strFullName="update.txt";
    5 H% R4 Z2 C9 w* h
  784.                 dwProgramState=AP_CONNECT;
    4 Q; r0 K8 m. _# d# |
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / p: T4 z, w3 C7 D& E) v
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  H% l  A8 k' t  g
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");3 H: |! @2 W1 b% X2 P
  788. / \; L' g) c! V
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' h+ L% k4 D1 ^! X/ J# J2 T6 r
  790.                 unlink(".\\DownLoad\\checkversion.txt");& z) ]8 \  W% e; q$ \) T
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    / _' F* `) D- k; {
  792.                 {" Y5 a7 B: T" `+ F0 f- @' k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");4 E9 |: n" O5 K; j  u$ v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ( B9 H; I6 I4 x/ g8 h, {
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");1 D- x' \' z, M0 X3 {* O/ q4 t/ f
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 i- O9 k# w1 ^

  797. 5 g% t  m, f4 K1 E0 l# _+ C; J, g
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 d+ e- q, P) V7 R, Q  w  R
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, T0 _5 o, S( s7 I+ M, }) L
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");" Z7 }* [% R2 o- x3 ^' V
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! I( [4 w. m. h& R5 `  h& P3 N* V+ \
  802.                 }
    % [) y1 R$ V8 ^6 p) n& f( E  H; g
  803.                 dwStartUpSteps=5;/ J7 x! l/ ], M4 t5 v
  804.               }
    8 p. t$ Q2 B: {. J- |9 l/ Y8 z
  805.             }
    5 Z' h4 T; p9 g) t) r
  806.             else
    4 ?% j0 H+ h  w. [" F. m
  807.             {* o0 A# q  b0 K$ X2 Z$ `
  808.               unlink(".\\DownLoad\\checkversion.txt");4 w7 J) M9 j5 M4 }: R6 s* L( |# P
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! p+ d/ l4 [5 d$ d! W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    , P$ o/ M; Z7 z+ _0 t
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");: U/ i$ c: g$ h) E/ S

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

- n; O# M, m/ L# Y% ?

評分

參與人數 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-16 03:00

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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