CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
8 O* ~0 z4 |& }
  1. / RevApp.cpp : Defines the class behaviors for the application.( [7 f2 z, |% q+ q% z
  2. //8 @3 y& w$ H: N5 b9 T$ m
  3. / t  j  N! g$ r+ h* K1 p/ d! F6 {
  4. #include "stdafx.h"
      X" `: F; r6 N
  5. ; i* f  t$ K$ {* R
  6. //#define UNICODE
    + [6 T& }3 Z) G3 h2 `; O) {
  7. //#include <gdiplus.h>
    / G% p2 }% N; C  P& j# C
  8. //using namespace Gdiplus;
    0 X- t4 \- N$ U) p

  9. 0 W4 Z; ~# @6 t" ]( v8 B
  10. #include "RevApp.h"4 m; J( _) f0 i* V
  11. #include "RevAppDlg.h"
    . ]8 q0 L: @2 c2 k

  12. ; y# I$ T+ h/ v6 l
  13. #pragma warning(disable:4786)
    0 ?* s0 ?# J7 x$ ^9 T' `4 v
  14. #include <map>
    4 s4 |; {: w5 W  D
  15. #include <list>
    ( _, k# `$ N# O0 k# H: F' z# Z
  16. #include <direct.h>2 m) T- d1 y$ `0 b2 v) m

  17. ; R$ k2 k) s6 B6 ~
  18. #ifdef _DEBUG' |- U- W1 x5 V9 H9 y
  19. #define new DEBUG_NEW
    % T' R2 a% ~* z" q% h) ^% y5 v3 t3 A4 |
  20. #undef THIS_FILE
    2 F- n; J# D/ Y, X1 N
  21. static char THIS_FILE[] = __FILE__;
    ! ^" @. ~  O4 ^! z+ p: f
  22. #endif3 o* V: `$ V2 W. f
  23. #include "SkinResDef.h": R9 |! D# Q+ q+ M$ y( j
  24. #include "ChangeBG.h"1 D4 Z' _2 P" ^$ c8 _
  25. #include "AFXINET.H". S& X; C+ f2 I3 i1 g3 z* j9 i
  26. * Z& [( w/ G# o* r
  27. #define TRADITIONAL_CHINESE 0( b: u9 k. @1 @9 E
  28. #define SIMPLIFY_CHINESE 11 S/ M8 D. \  |' z( J0 I: \& [( J
  29. #define ENGLISH 2
    0 p' ^3 c6 K6 O# F. [
  30. int m_iLanguage = ENGLISH;
    & j3 X# [4 C2 q# [" R
  31. /////////////////////////////////////////////////////////////////////////////
    ; ~) Y6 ]9 [( a* X
  32. // CRevAppApp1 Z# @. _& `; Q8 J+ z
  33. 6 o6 i: `& q7 d$ G
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ! P: C! y+ C! D2 a
  35.         //{{AFX_MSG_MAP(CRevAppApp)7 ~: R- M/ @$ G0 y( G
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.# e" I! U# E! a# d7 j$ O
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!* L3 f# d. D, y& B! C
  38.         //}}AFX_MSG( S% i0 N/ _7 D/ R4 J
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    5 b0 F! {! |! p5 c+ e6 ^  ]
  40. END_MESSAGE_MAP()
    * [, x! \; U# x! [& E- N

  41. . }% m4 O1 M+ X% ?
  42. /////////////////////////////////////////////////////////////////////////////) k: w9 @# B. j0 f9 d4 i; X
  43. // CRevAppApp construction
      r5 d! ~- j/ n. o8 Q( t+ |

  44. 2 U! i' _' d" \5 B( Z* y' b1 k1 e
  45. CRevAppApp::CRevAppApp()
    " m0 K; q; [7 E' f* M! [% c
  46. {& W6 K* q9 P& O0 i: ~: j
  47.         // TODO: add construction code here,
    1 v+ Z% f( }! x
  48.         // Place all significant initialization in InitInstance" |7 y6 c, ^+ r7 |& l
  49.   bDisplayIsBig5=FALSE;
    4 ^$ p( T7 R5 q) }9 r4 ]' i- S
  50.   bRestartUpdater=FALSE;
    9 Z/ G3 N: ?" c  [
  51.   bFinishUpdated=FALSE;
    : B2 s: a: R) s2 G/ j% L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    $ k2 a% |5 o& O( u. H! ^* S
  53.   InitChangeDataBig52GBKS();
    " @) i7 `/ r  e  g8 d9 H8 j8 [
  54.   InitChangeDataGBKS2Big5();+ @0 F$ [. u# I* e
  55.         //" M) H+ I0 I" ^* T, N
  56.         bClickRunExe = FALSE;+ u+ q3 w/ ~+ R' m8 y5 s
  57.         //9 A; C3 B9 l4 H/ i
  58. }8 T" [8 E7 q" g% _

  59. . O' C+ ]" N; d+ |/ y- l+ Q3 v
  60. CRevAppApp::~CRevAppApp()
    / S% Z& U+ \4 g* f) H
  61. {/ o. E3 M& d6 T2 @
  62.         // TODO: add construction code here,
    2 H  Q+ R5 i3 a, Y9 W* t
  63.         // Place all significant initialization in InitInstance: w% _& I  M! f# C; x$ F" L
  64.   EndChangeData();
    7 {# U8 \7 o' X2 V& U  I
  65. }
    + u6 g' y, V$ O* \6 P% ]

  66. 0 E% m4 o% [& o& b# X
  67. /////////////////////////////////////////////////////////////////////////////& }& `5 v$ Y! R& {+ b4 k8 q; W; I
  68. // The one and only CRevAppApp object
    , k6 N' {7 u2 a7 r5 ]% ^
  69. : m6 [1 S- i( A( L0 Z3 B/ `7 I, ~
  70. CRevAppApp theApp;
    ' T# w! F2 r7 c+ {8 `3 u1 D  e
  71. * C* @3 `# R8 f8 _. u" K, h6 Z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 a0 F% X/ \, B% k
  73. {
    ( l' P# j0 Q7 @/ z  S* t; ?
  74.   int iEOF=0;
    & U$ Z  ]- ]: _" A
  75.   char szTempName[MAX_PATH];
    5 |6 X) @8 X6 Q8 C
  76.   *szFileName=0;
    / _+ p; M: W" D4 j1 _# b
  77.   iEOF=fscanf(fp,"%s",szTempName);- ?7 q: T# x+ E% w% ^
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    8 ?& f* X0 z5 E+ b& @3 I; I( A
  79.   {+ S$ X' F' z  l  k$ j2 a5 z2 \6 X
  80.     strcpy(szFileName,&szTempName[1]);
    8 h/ ^* Q; u" T2 m, F. B0 S
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ! e1 a3 z* l: N" L7 L1 ~" z
  82.     {* `* u& q2 U. Y& l/ W2 M# r. k
  83.       iEOF=fscanf(fp,"%s",szTempName);
    $ m3 P% _; @8 s% m1 b$ ]
  84.       strcat(szFileName," ");
    & B  R5 K, @; [% l  |* F8 k: f
  85.       strcat(szFileName,szTempName);
    # k* e( G. r5 u2 u/ m/ N  p
  86.     }
    ( B9 ~7 _0 {3 {; Z. ~. B
  87.     if(strlen(szFileName)>=1)
    . D- n3 _/ i% L/ ^6 {( D* C
  88.     {, B# z( ^# Y0 y3 \, b
  89.       szFileName[strlen(szFileName)-1]=0;% s* [$ F9 Q+ y' o' d$ n5 r
  90.     }  L1 g* Y$ r! ^) r$ W( e1 u  f7 n& {
  91.   }
    6 t( v7 u2 L7 P3 J4 m$ F" @4 }
  92.   return szFileName;
    " H& k3 O/ b; _- ?/ v; P% b8 I  Y
  93. }
    # W8 g$ l6 J9 }5 w6 k  Z% G1 K  j
  94. . v3 i+ T" d8 j7 a( T& `( A
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    . U/ X3 r5 n) A6 `- W3 |
  96. {
    , A$ D! |6 s3 W( G& ~& Z9 O' p
  97.   FILE *fp;, {! Z5 z) ~2 b+ ?/ B+ o
  98.   char *key=NULL;" u+ _  P0 {3 _6 \8 m
  99.   char version[MAX_PATH];2 g2 q7 i6 X. A- U1 P6 Z. O' _3 {
  100.   LPUPDATEFILE file,olds;# x7 S- t+ F6 r* p& n
  101.   std::map<CString,LPUPDATEFILE>::iterator p;/ S+ U! I5 O2 k) l- F/ H
  102. ; F* j+ r  G( k4 B# Q
  103.   UpdateList.clear();% n  F% \( \2 G2 B( P* v
  104.   UpdateFile.clear();% c& v8 t/ s* Z, T5 b4 d; P3 }
  105.   if(GetFileAttributes(filename)==-1) return false;% ]% `6 W( v+ d4 t  s6 P
  106.   if(!(fp=fopen(filename,"r"))) return false;9 d% V6 A/ m3 [. a; Y4 P  c
  107.   fscanf(fp,"%s",version);0 J5 D% S/ h, Q  ]8 e( X
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    6 v0 H6 z+ y5 V0 K/ I# l( Q
  109.   while(fscanf(fp,"%s",version)!=EOF)* l5 e0 d9 }: t$ `* q9 k9 {) \
  110.   {
    ; N$ R+ {( g" g* R4 v
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- \  J+ k0 g% r, I
  112.     fscanf(fp,"%s",file->path);
    / d- Q2 F. i4 p* s$ t2 d9 O
  113.     ReadFileNames(fp,file->file);6 d7 o& P* ^9 [  P* h
  114.     strcpy(file->full,".");8 z0 Z5 b9 A& M+ v. |5 c
  115.     strcat(file->full,file->path);
    2 u! c& m1 Q. D* L/ r% R+ w
  116.     strcat(file->full,file->file);2 m& T( W" {! Y- G- u( I
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ' ^8 d, B! ?" m, x0 ?! M7 }
  118.     {5 x! o" z. a8 i# G, ^7 E7 K  e. O
  119.       file->vers=(float)atof(version);
    0 X) E4 M( c' n$ R! p& s  C
  120.       UpdateList.push_back(file->full);
    9 T% Z* X1 P; z; a% N
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    & x  n4 B; W! c: b
  122.     }( n. y0 e2 T) ^9 _
  123.     else* ]1 l# F  m# |1 p
  124.     {; N7 H/ @* `6 `; }2 r5 p/ m
  125.       olds=(*p).second;  x% N& E# N) r$ M( D: p/ r
  126.       if(olds->vers<(float)atof(version))
    % z2 e/ l. I: f8 ?8 @' n1 X
  127.       {
    9 ~7 i2 i2 p! h9 ^
  128.         olds->vers=(float)atof(version);
    + B+ j8 O# o! N; j( Z  Q
  129.       }" z( |; h7 n  i0 ]+ ?4 E! I1 j
  130.       free(file);+ r! ^4 u4 K) Y6 c
  131.     }$ d2 v( X3 a' t* V" B( n/ d8 N
  132.   }
    + p. @" t" T# Y# T3 w* G  L4 L
  133.   fclose(fp);
    3 t. B8 a1 j; s* J2 u! ~* B% I
  134.   return true;
    0 ?) [% g/ e2 \& Z' A0 m6 c
  135. }
    # _  v# `: C8 S3 r: @

  136. 1 l8 t: u$ H1 T2 d
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    & m$ @$ C7 ^4 G
  138. {  i9 O' w. c4 f2 e
  139.   TCHAR  szFull[MAX_PATH];4 I  Y& s8 s/ ~% w$ T0 S8 ?
  140.   TCHAR *token,*inter;
    0 h& E4 W, {% c8 Q/ r/ G& N7 Q# {" m! i
  141.   *szPath=0;  Q0 ~# C4 v% J7 n5 X: ~* l9 h
  142.   strcpy(szFull,szFullPath);. z" g) s0 R2 N% B
  143.   token=strtok(szFull,"\\/");
    , Q) F3 K3 `, I
  144.   inter=token;
    3 c, W% A& g) _
  145.   while(token=strtok(NULL,"\\/"))
    - d* y/ Z4 w3 ~* B8 l/ _
  146.   {
    - ]4 W* W: f+ d1 [4 y4 X
  147.     strcat(szPath,inter);
    2 I+ h4 H- e# _' d0 y
  148.     strcat(szPath,"\");, U6 D, G7 j: G+ u1 d
  149.     inter=token;' L! n: N* W8 _$ I: O! \1 O
  150.   }; k- k+ c! e  b& T5 h: J4 z
  151.   return strlen(szPath);4 T) |1 D( a1 Q% v
  152. }
    ; m, g/ W" b% i3 Y, z4 x& r
  153. , `/ t( A! T, w5 N$ Y7 [
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)8 ]9 ]% W4 c4 `1 F* [  Z  P. J* t
  155. {
    & U" L: d0 S3 |: o
  156.   DWORD attrib=GetFileAttributes(Target);
    + b$ i9 D/ J! O! \) e8 \
  157.   if(attrib!=-1)+ _& m5 }0 Y3 L4 B# X, k
  158.   {5 @6 E! D6 H2 c* V- \6 j
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    3 \3 P- n+ z- s. }% B  L/ W
  160.     {0 B6 j7 R$ E! L! J
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    " y) v7 |/ w, T( ?- E/ Q
  162.       SetFileAttributes(Target,attrib);
    ; ~/ X( M. l( [! E
  163.     }5 V$ U+ J  e3 d+ @) e
  164.   }
    + h0 B" P6 v9 n) z: j  N2 w4 ~
  165.   CopyFile(Source,Target,Erase);
    / h. `$ n5 n: W
  166. }5 ^/ u7 v# J0 p7 t0 p& G
  167. * L" V# J; v( ?1 K  _1 H0 k
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)8 X1 ~3 \4 I* ^7 A5 B" l# O- O8 ?1 x
  169. {' K1 ]: s' l7 F! m8 X+ h/ |/ Z' Z
  170.      FILE *fp;
    # H1 h4 S; X9 r0 h1 |( D' S
  171.      char  szBuffer[8192];
    * H( ]" q- s7 c8 \' l
  172.   va_list  argptr;
    5 b; ^2 N+ O4 |9 ~; ~. F* Y
  173. ! u% j- T$ m: \2 }
  174.         va_start(argptr,message);+ U8 z8 c7 I9 g  b( ~) Q9 v- R$ r
  175.         vsprintf(szBuffer,message,argptr);- N8 y' @1 R) g2 B: Q3 E
  176.         va_end(argptr);
    2 ~! D- ]  u/ {. [
  177.   fp=fopen(FileName,"a");
    9 c) l) w* z$ g/ d% e$ y1 @1 T
  178.   if(fp)
    4 u: |& }. V0 Z3 q
  179.   {
    - H: O% M6 [7 R5 H; G  _  S
  180.     fprintf(fp,szBuffer);' @# F7 a* k( ^5 O& o9 E) Z+ F! c
  181.     fclose(fp);/ m# [( N! S. Y6 `  F6 t8 K' p* Z, j
  182.           _flushall();
    4 o1 |. `* t' f7 o# ]  }! Q% \
  183.   }6 b0 w$ x0 t& J* }0 E
  184. }! s% N& T, U, B2 d

  185.   I' C7 }. s0 B+ @& P
  186. BOOL CRevAppApp::Fclearf(char *FileName), s8 O; j' Z+ u) H3 M" V
  187. {
    + k/ x% E: I' f( Y  ^& U! G
  188.      FILE *fp;
    0 q3 O1 V5 o) A/ R4 Y/ c; ?
  189.     DWORD  attrib;5 C% Q2 y' v0 {' U5 l  [7 ]! I2 L
  190.   attrib=GetFileAttributes(FileName);
    2 Y4 l- v) J( x* m5 A. I2 E/ N
  191.   if(attrib!=-1)9 q5 a- r. m7 l$ q
  192.   {6 P7 y, n& g% K4 c' ~  f. y! m
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    # R2 ~( o6 ^* z/ m
  194.     if(!SetFileAttributes(FileName,attrib))
    - [, B" S$ K/ h& E2 ], A. @* E
  195.     {
    6 N; _" }; Y! m- _# x7 |9 R3 w5 B  k# }
  196.       return FALSE;
    - O$ j8 ?0 G* [% G/ b
  197.     }$ d; I: P8 f8 t3 R9 [
  198.   }  p& [: L% p# {* M
  199.   fp=fopen(FileName,"wb");# _4 S2 x6 B. N' u
  200.   if(fp)
    ' W) B* M* ^7 ]1 N6 a7 u; v' w
  201.   {
    ( Q# ?* e% X" i3 ?+ t0 K" v- j6 e
  202.     fclose(fp);( X& u2 Q) w( S& \2 i
  203.   }
    ! c7 |# M6 Q8 e* o( Z9 F. H
  204.   return TRUE;
    & R* x3 l/ X. g& @% `! T4 y0 Z
  205. }
    ; M& f3 p! G6 `& A% o

  206. ! z4 T$ q0 O' v3 Q6 ]
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    9 x' Q  x* y! }: U" _
  208. {
    - ~" s& a1 {1 e+ Z
  209.   char filename[MAX_PATH];
    & `# H! x' K9 q" ?
  210.   LPUPDATEFILE file,olds;
    ) b$ g/ G2 V- {1 W% N
  211.   std::map<int,CString>::iterator i;
    6 D5 t; {% w4 `7 b. L" v$ b$ C
  212.   std::map<CString,LPUPDATEFILE>::iterator p;/ p! {3 s+ l/ t+ Y9 ~6 h6 T( E+ W4 X$ b
  213.   std::list<CString>::iterator l;: E. n9 p% ?$ {1 B2 b

  214. & g) n/ v3 a/ ^) t$ u& y4 T/ T
  215.   if(bFirstUpdate)
    / b; @4 g  X; O6 a1 S% p, j. @; G
  216.   {5 z( s( u5 ?" L
  217.     dwCurrFile=0;
    & H2 C0 f7 ]! ^- ?/ N; ~
  218.     bFirstUpdate=FALSE;: Q; N  v' \2 S$ q- {4 R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 I1 L1 f5 F" z" v! u
  220.     {
    , b' D/ {" k# \1 ~" c
  221.       dwTotalFiles=UpdateLocal.size();
    , T( {, v  j9 N/ N2 v: c- u# r
  222.       dwDownLoaded=0;' E1 Q6 O6 y- d
  223.       bSilentStep=FALSE;
    , a# e: ^# S" i7 o3 r
  224.       bCompressed=TRUE;: q' D: @6 `4 @7 A; M, J
  225.       strExtLocal.Empty();8 v  @% C* M1 ^9 x
  226.       strFullName=(*i).second;4 d. j- {$ h1 x
  227.       dwProgramState=AP_CONNECT;
    7 B& y0 M/ b0 i4 ^, Q
  228.       return TRUE;9 O! ^+ ^7 q. f4 P
  229.     }
    : \0 I9 {* o- V4 n; X" C  x
  230.   }/ h! }! v2 }+ r2 u; a1 K
  231.   else if(bRestartUpdater==FALSE)
    - S2 W- y4 }- F+ P5 ?; ^
  232.   {
    ) y3 [0 W+ ?- T
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    7 `* M* k3 E; l1 v* w5 h! p
  234.     {% E/ N5 Z# H2 h* T9 s% v
  235.       file=(*p).second;5 M$ a, ]8 Q: j0 W& [0 z, n
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())7 a) d" r1 A3 {0 \/ |% B
  237.       {7 y8 N9 h' G+ x7 F
  238.         olds=(*p).second;& j9 v" O6 q2 ]9 Q+ L  o5 w
  239.         olds->vers=file->vers;& N% g  A2 y. v$ C
  240.       }! O! Z6 F" r9 _5 f
  241.       else
    6 G; b9 S4 v4 a" D
  242.       {5 D! T9 k, x! _6 @- X% U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 U( q' d% E+ A! ~, E+ n2 ^
  244.         memcpy(olds,file,sizeof(UPDATEFILE));% S" O* C- l% B& d
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ; o* |; |/ ^4 Z8 C) \8 x
  246.       }2 x' \! A. ?) j  d
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");2 r! X; D3 h" M1 I: T
  248.       sprintf(filename,"(%s)",file->file);3 l" w& r: `* b: g+ P
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);/ R9 s3 v$ c  U! Q* ^! y9 B/ B
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: H! Q# N$ d' |* g7 x* ^; b/ X
  251.     }
    " u* z3 ]2 Y2 J0 [4 K# E9 j
  252.     dwCurrFile++;2 Y0 y( w! U" N7 @% N
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 U- h7 O+ \" `( g6 K) Q
  254.     {# u7 Y( [8 ~, y% s
  255.       bSilentStep=FALSE;1 ?& C5 M' F1 J4 U' l: K( Q2 L
  256.       bCompressed=TRUE;! _8 M5 {- T& E# c, A9 o
  257.       strExtLocal.Empty();
    ! e! ?$ L% B0 j" K$ R
  258.       strFullName=(*i).second;
    & G' z% A# V2 k% [/ e. v9 X, j
  259.       dwProgramState=AP_CONNECT;
    0 R9 B( P, t# P- F( k
  260.       return TRUE;- [  O' T0 J7 [# H0 h
  261.     }
      D* i, k3 {6 U  w& O1 Q" c2 \
  262.     if(!bRestartUpdater)0 |) U; ^5 @/ h+ \
  263.     {
      G# F0 A7 s: i# Z: E$ C
  264.       int iCurrSize,iFileSize;) J; B3 G+ ~4 ]5 K
  265.       iCurrSize=0;
    . c9 Y8 `6 {2 v. J; J( [% c' f2 P: p
  266.       iFileSize=UpdateList2.size();
    ; z% K. [; R, v. _; N
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");# v' |3 i/ C6 C8 `
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");# a  S7 Q4 Z# u8 p6 q' s+ P
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + G5 l6 f! Y! h0 T5 d
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " b  D  T+ k/ a9 C. R( g
  271.       Fclearf(".\\update.dat");
    / t$ @* ^7 u9 ~
  272.       Fprintf(".\\update.dat","Bloodyf\n");. |) \$ h8 ~8 t0 q  U
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) b3 e$ v& `0 W4 r
  274.       {. B; U% [- _1 x; g$ J
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    7 E& b# T% b9 k+ g3 P+ a) r
  276.         {3 N$ b* J+ t( W  |1 Q8 \1 U
  277.           file=(*p).second;4 h0 D5 n9 M  x# q' M2 V
  278.           sprintf(filename,"(%s)",file->file);& g* ?9 m4 F  R
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 Q5 P3 j. N  i( ^/ X& A
  280.           iCurrSize++;; G' |, D2 n, A8 ^
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: r0 _% X; s* \) ]. N+ n% @2 [
  282.         }8 O- P, @; \2 ^$ |2 L- S* p' s  X1 X
  283.       }
    ; E( O% ^9 N0 I. S
  284.       unlink(".\\update.txt");
    ; _( L& |8 Y- B- }/ H# r7 d7 P  b
  285.       unlink(".\\update.tmp");
    9 U* L( w% {: ^8 Z( C! @
  286.       Fclearf(".\\checkversion.dat");+ t( v) ~. p' M+ G
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    " x  u, `  }3 |4 F; ^
  288.       if(UpdateLocal.size())1 H' _6 P- b* l
  289.       {
    & B; H, ?' `. X2 y& I
  290.         UpdateLocal.clear();8 T7 E9 u/ D6 |" U+ R8 p, \
  291.       }
    + C, v9 o3 f' Q+ g( O$ D
  292.       if(UpdateFile3.size())
    ! t8 ~0 n' B  r% J, L
  293.       {6 w8 Q1 i9 k1 h0 E) z/ k, J8 n* J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- \# ~8 k5 Q7 J5 X7 z% }
  295.         {
    ; R1 x! U; j' |: Z  y
  296.           file=(*p).second;8 d$ b2 M7 y- R
  297.           free(file);
    1 g2 V/ p+ h3 S3 m
  298.         }
    ! P& D7 ?4 \1 M2 ^* B" N
  299.         UpdateFile3.clear();
    5 Z$ ^, y* ^6 b( H4 g' v
  300.         UpdateList3.clear();' ~/ f; F8 }9 b3 x
  301.       }
      }1 n4 K, e, S- @$ {7 `
  302.       if(UpdateFile2.size())- {+ Q7 j6 M( M1 g
  303.       {
    1 d4 L. [: @8 a: L1 x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  \8 j! h3 s1 ^6 T! h- r1 J8 U
  305.         {/ o7 h+ p, i* }2 X/ K9 ~8 M; u
  306.           file=(*p).second;/ b8 b  f; e& q! b
  307.           free(file);
    , w! k5 L! B" L1 r
  308.         }
    6 D, S; P/ S3 Q3 w7 u; B
  309.         UpdateFile2.clear();
    . U2 A' a- [7 d  a) n% B" P# c' h
  310.         UpdateList2.clear();
    $ E. ]) ~2 o; |2 T: ]8 O; t
  311.       }  g3 b$ l6 w- f- s9 g' ~
  312.       if(UpdateFile1.size())- }- u8 i& V! _- m
  313.       {
    6 d* r3 B3 _2 o, p
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! C, U& D, x& e; K
  315.         {
    8 i' z+ W5 h5 g* \! D: \+ V
  316.           file=(*p).second;
    * b# T, z. T6 u$ m7 m* X; d0 ]
  317.           free(file);' e- X7 Z: I3 S; K; K2 f
  318.         }
    " u5 P; j0 k1 P$ R: H) B
  319.         UpdateFile1.clear();$ D* C) N( @/ f1 s
  320.         UpdateList1.clear();
    ' o  n( p# o6 C
  321.       }1 |# p8 I7 q2 ?8 J$ N/ d4 k
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));. C6 l' S  E# L1 {' W# @
  323.     }
    " z) |! i4 ]$ G$ s- D, i
  324.   }4 Q( d% s: g" t6 ?
  325.   return FALSE;2 U% [% [, X. Q. }
  326. }
    7 Q: _9 D. T! M/ c7 |7 [, G
  327. 6 x- ~0 N, m# V5 b2 l; {# ^
  328. void CRevAppApp::ClearAll(void), T, B) _7 @& X3 U) I! e0 a9 H
  329. {+ D( B# h0 v! N2 {" r( `2 J) D/ D
  330.   LPUPDATEFILE file;8 _! i' q- o5 o
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    : s( Z/ `$ ~/ `5 n0 g

  332. + g/ i8 M, |1 y" q: I; E
  333.   if(UpdateLocal.size())
    ' |/ ]+ S7 _# n, _% l1 D' W) ~* d$ }
  334.   {
    8 F# s6 y0 B& A, i, ^
  335.     UpdateLocal.clear();
    ! h9 _  h. [' F8 Y; v
  336.   }
    " I( O( b8 t& K4 O. j
  337.   if(UpdateFile3.size())
    $ p: M5 b8 F# i$ m9 G
  338.   {- J% b3 }  \$ `- w' U
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# ?% E0 |# _2 A& |" f+ t% b3 B  k
  340.     {
    " y# Q3 z& ~/ v$ O! m& h
  341.       file=(*p).second;
    3 V, D6 N: H$ c
  342.       free(file);! L" Q' j5 B6 V  C! q
  343.     }
    % F$ ~% X' u! Y$ F; Y
  344.     UpdateFile3.clear();) L; e1 s% S% h" J3 v
  345.     UpdateList3.clear();
    + R) s. ^6 h; k4 K* |2 C' h  v$ g
  346.   }/ U$ J& I: k) G5 P0 m
  347.   if(UpdateFile2.size())* G' @6 w  b, @% E2 ?8 B) Y8 Z
  348.   {; l) B! s3 V2 z9 B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 U( d. W/ s% U
  350.     {$ w( y# r6 d: ]) C$ C
  351.       file=(*p).second;) i/ c" f" K+ f1 A) \4 T- i
  352.       free(file);
    2 L" d$ V/ q8 W' j1 v$ f( q2 X+ M. b
  353.     }
    ' U1 D4 ~! y) h2 T/ A, n/ h
  354.     UpdateFile2.clear();
    8 z( {+ W8 I$ z- H6 W+ k/ Z; g8 {% I
  355.     UpdateList2.clear();/ n- q6 y' _  H6 j# }/ Z: J/ F* k
  356.   }" s4 q2 G3 v- C+ ~
  357.   if(UpdateFile1.size())2 V/ d* J5 d" H
  358.   {4 B$ }% k  t; q( o
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + k9 h) V. H- j/ _3 v: c
  360.     {
    & u: M, M9 {+ s! k
  361.       file=(*p).second;
    - b+ u: x. |, _" T$ p
  362.       free(file);
    0 S0 N/ o2 |' g- I( `8 ^" B
  363.     }
    # z( k4 d  B  v) N( y5 t
  364.     UpdateFile1.clear();/ G# B  u- }$ @5 x; h
  365.     UpdateList1.clear();
    3 n0 @1 D2 Z4 P/ }
  366.   }
    ; C" {0 c6 j1 x+ P5 @
  367. }  
    3 S& l( a0 D: w6 _1 |
  368.   2 o  P: B& A: p/ W
  369. BOOL CRevAppApp::CheckLocalVersion(void)" h( f2 I: k) X% V6 _- B# _
  370. {
    7 d3 N1 S* e0 y6 G$ R
  371.   int c;/ c# N2 n2 R$ w8 R- i; G' g) L
  372.   LPUPDATEFILE file1,file2;! i- V" S. D/ L5 `
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ' i+ H% c$ N9 S- u
  374.   std::list<CString>::iterator l;
    8 h$ K/ X- y! E" s6 B, C
  375. 6 u9 A3 d+ z0 @( x
  376.   UpdateLocal.clear();) `' {) |" |* C8 _! n0 n! H
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    + i6 |3 l0 M# C  R0 h1 D
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);, a! K: J9 X8 Y9 {+ X" p& H6 x
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ' f1 X( c5 ]2 S; J
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);: a0 ?  {0 v* j; H
  381.   if(UpdateFile3.size())
    & m, J! \8 g0 _$ n
  382.   {
    8 s; Z& ^" n  l( R' k. ]* S- t
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++), |9 C0 T, b  U: d! H+ `& a$ P
  384.     {
    - J2 y/ y5 ?  o4 f# o
  385.       file2=(LPUPDATEFILE)(*i).second;1 C7 v8 |4 ~2 u7 z! L5 ^& K
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    & y7 O6 N  L8 \. `& B
  387.       {+ }* T5 c8 ?) n' \
  388.         file1=(LPUPDATEFILE)(*p).second;
    0 N1 w' R# E2 P: @, `: ~$ }
  389.         file1->vers=file2->vers;: H# q5 v" I- g% |& w( Z! Y
  390.       }. [% B& `; |. @7 S3 \
  391.       else# m, h, S6 W; I
  392.       {8 b* y/ i" M; x9 Y% U0 n+ O) t9 l, Y
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 j3 O6 a! G; G# p2 r' g9 w
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));2 j% }  O- M  A
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
      y, h1 D  F) Q* \/ ?& w
  396.       }4 v  @, Q/ r( t; Y( T
  397.     }
    % d/ V8 K+ G1 s% C9 J& t
  398.   }
    , e3 Q4 U$ N6 T1 ]6 _: n" `9 L& @3 r
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 z! O1 K( d" }3 j' h1 O
  400.   {
    . i) Q* V5 j  k) N; ^
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ( e9 P" C! A9 k/ t& r8 m
  402.     {
    % ~2 O+ |. i: q  ]% S
  403.       file2=(LPUPDATEFILE)(*i).second;3 H7 R# x# G$ D8 O; A2 a) p
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  Z+ z  u# w+ g/ [  V/ R, j
  405.       {
      @; [  l! r6 d: ^
  406.         file1=(LPUPDATEFILE)(*p).second;
    ; d( N$ M9 q) c; s! z5 o* Q
  407.         if(file1->vers!=file2->vers)
    & B- l2 S9 s0 H1 Q3 e
  408.         {
    * g$ l: f- G* `5 e/ F
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    , D: H8 z2 E( W, Z5 \
  410.           c++;
    % ?: F. m- N+ d* Y$ n# S
  411.         }
    % p; B# U: N  x$ W7 X# ^
  412.       }
    ) J' W, D! @. g2 b9 C' [
  413.       else1 I5 a8 P5 V7 x/ Z
  414.       {3 Y) _+ O) l$ |
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  F( R( v/ y4 {. e- `
  416.         c++;
    9 L. D) z8 B9 f
  417.       }; P  n6 U% ^# G: ^" k. C
  418.     }0 t1 [' j, S/ T* ]& l7 }) W; C( E
  419.   }
    - [* V5 W) }! ?: x$ ?) i/ C, `
  420.   unlink(".\\DownLoad\\update.txt");
    + T! P0 u6 ~& [" B
  421.   if(UpdateLocal.size()) return TRUE;
    2 @7 @/ L, W" K: S6 F7 y' }
  422.   else                   return FALSE;
    : K4 s, v0 o4 ^, }5 C; b4 H
  423. }5 x% M  M4 I6 ~! s  w
  424. + H4 d" ?2 r$ F- a; N
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    2 f2 P- ?+ t0 Z  J5 \
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"# B9 o7 [- b! _  o' G, S6 n

  427. ; J& f, b. ]. O9 @& R, T$ \9 O2 }

  428. - F. d  z& I9 G+ C4 |9 G6 u

  429. 8 w, ~! d# e% a3 z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 N- E5 ?- n0 b1 {$ g8 G  z
  431. {
    4 @# H$ k. g% ~. @: T
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ! I  f& C' e$ U6 _
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " e+ O5 s. m, j: {
  434.   {
    , J" p" Z9 ?6 e8 ^
  435.     char szLanguage[50];+ H' U/ K5 p, q' t2 d
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    - g% C2 @1 w% g4 W
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 x$ b; J/ L$ p+ T3 X0 ]
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; c) M$ y- [# M2 q; M
  439.     else                                   m_iLanguage=ENGLISH;
    2 g: d, E3 G$ R# ?" M0 [6 T# b
  440.     char szRegister[100];2 I2 \. V8 b$ }0 n5 O
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) ]) ]. V5 [: o. U+ Y/ q% A
  442.     strRegsName=szRegister;
    , j& `$ h8 ^  a; b: I6 z6 \/ y( ?5 L
  443.     char szPatchURL[100];
    & L/ v1 |# A8 W3 T8 N% G: m  c
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* D& c9 `$ |% P3 k
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 F! ]7 ^* Z1 p' u3 \
  446.   }# E0 ?9 v3 |. U: o
  447.   else* d8 G' F, q. O
  448.   {
    2 B1 N+ B" k9 v, J" M% x( F
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ v& ?. j- i% Z2 h
  450.     strRegsName=DEFAULT_REG_URL;  v/ J9 h! h% }& a8 Z1 S
  451.   }
    4 o3 M% g* ]: C+ Z' v
  452.   if(GetFileAttributes("hosts.ini")!=-1)1 y8 c- }9 a: c5 X
  453.   {) x; t8 q) H, V' l: g+ O  U3 T
  454.     char szIP[50];
      b, G, K6 {7 R3 f% @) W8 \6 x
  455.     char szDIR[300];1 Z$ v( w, S+ m9 m1 H( N
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
      N, }6 l* H2 q! L, `
  457.     {
    1 ~5 p, I/ H) e9 N9 E; Y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    9 U$ J" A+ L& f( E3 E  j
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    , A( V7 Q, ~' _$ w0 E2 l) o4 G
  460.       strHostName=szIP;
    ) Y( U, Q3 a9 U1 Z0 G) U; k( Z
  461.       strHostPath.Format("/%s",szDIR);
    ( w  h3 f3 [6 G' c" i" Y
  462.     }
    $ V; {' Z* ?; r) l1 l+ x4 V
  463.     else
    / w+ L8 i8 i- I- x( I& r4 R- P
  464.     {3 V6 s6 R0 T$ a
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)5 X- ~6 Z! W& ?/ @9 l
  466.       {
    / v. `- {8 J3 F& e4 k0 m
  467.         char szLanguage[50];
    ' J" b) f% r4 M
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( O9 V: ]* R* `/ i5 ~/ q& T
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * U. J4 C% H- e$ w5 E: |# G, M, L
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 T: h$ i, k5 X" D  `- W4 e
  471.         else                                   m_iLanguage=ENGLISH;
    5 x  B; ~% P5 d. @+ k- J0 S
  472.         char szRegister[100];
    7 b. ~  v5 a2 p# Y$ l
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / U4 ~9 a. ~( ~$ ~% r1 {1 B
  474.         strRegsName=szRegister;: c% s- b6 E% ^" Q; E
  475.         char szPatchURL[100];
    $ N- D+ U: O* j9 t
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , ^2 z; A' d% m; P% K$ b
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' Q+ l, e( |) S. x) d* C7 F. J6 d5 g
  478.       }) ]6 g# n. z9 c# H1 ^
  479.       else
    1 e1 T* U# Z9 V2 }2 E0 K# {
  480.       {
    ' P6 F$ W% ~3 c! ~! A5 d" d
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 l% H& z$ `  U* g5 e1 O. S) t7 ]5 u
  482.         strRegsName=DEFAULT_REG_URL;
    3 h0 J2 L( [3 r: w9 a
  483.       }' g5 x, ^) [; T; n4 s2 p
  484.     }
    : u/ b+ t$ m7 s$ H3 g  K( \2 Y) `
  485.   }
    : U2 ~7 ?/ y' A) ^1 y1 h8 U
  486.   return true;# n, I9 _  j1 H9 m! |8 k* l) P
  487. }
    " T' w0 H' \$ w) t8 |' _" ^6 S

  488. / G; x; z, [6 a9 N3 L" }$ z
  489. #include ".\ZLib\unzip.h"
    2 v; T$ n4 S8 h; H* }2 O3 @/ K
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);  g/ t/ K1 p# I' @; \
  491. /////////////////////////////////////////////////////////////////////////////
    2 L2 u5 t. _# r2 n
  492. // CRevAppApp initialization
    : @' t' r5 h( ~- {  B- B

  493. 8 j; b2 I' H4 ^5 P& n2 R
  494. BOOL CRevAppApp::InitInstance()
    7 l6 n- r, t. \, ]: X/ Z: y$ x
  495. {1 O' S6 Z6 D( _+ r: Q/ T% C4 M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];* ]7 N9 b, W0 v; D

  497. + @/ n0 [: u# E
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    $ U  i* s  n% f: @
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    # d$ R) J6 [1 y7 e% u3 y+ E9 @
  500.   {
    ) D4 U1 l4 Q, ?$ _; \$ `7 Z4 [: G, C# a
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");$ C  X4 _9 J" o
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ' _' w2 g: M. k+ @
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))2 A4 Z' G$ J  ^& }; K
  504.     {
    : H: a/ I9 K0 C5 a8 m! @7 e
  505.       strcpy(szPath,szPathTarget);
    $ O; X( H) K& P: U) B. v$ p
  506.       SetCurrentDirectory(szPath);
    8 M" H% z7 T5 t/ t( S$ O' E
  507.     }
    # l6 y4 O  \; X6 v
  508.   }2 k0 @" P4 f/ q4 b7 l
  509. #ifdef _DEBUG4 p8 c2 H* `6 A% A
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))# o: o: T: f" h  E' b, A; E% M% W
  511. #else) V8 m6 Q! b( K$ P
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)). }, F1 W# U9 ~' _: ]* u
  513. #endif! d0 |& X/ \( v/ Q
  514.   {1 c  m# a$ ?) A6 G; I
  515.     char tempFileName[MAX_PATH];; ?9 V$ a& h+ [
  516.     strcpy(tempFileName,szPathSource);
    1 x! e; Y4 N9 L
  517.     tempFileName[strlen(szPathSource)-12]=0;1 S1 Z5 c0 T! K0 o- ]
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    " e; C0 c: Z4 j3 A5 k, \* t) ~
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    + c2 |# K8 A! Q4 I
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    # @3 _8 s# r# S2 @+ j
  521.     return TRUE;( l+ p) O7 N7 S  U; k" b( P, W% |
  522.   }! G+ V: K1 R) f# I
  523.   // Nuke 0118: Delete run.exe( Q3 A) w4 c& S7 P3 Y
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    9 |: G& H" Y0 M0 y7 }* K! \. c
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    * S! @3 h" U# _* V8 _/ y: M
  526.   if(!ReadCfgFile("Config.ini"))
    7 \1 S7 v+ y. p! U- t
  527.   {
    5 _  ^# Z7 {3 @/ z2 }, Z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    $ x9 A3 t, e/ G" {0 R1 w3 j/ k* D
  529.     return TRUE;
    6 J. @1 t6 E9 `$ D
  530.   }+ C6 ]( y% h$ p+ o/ i' e
  531.   HANDLE mutex;) ?+ i. M0 N, s
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))) w" K1 G7 \& s) @! s: s
  533.   {
    + J. M$ v$ d6 i6 J# J; e
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 ?6 [& s" U3 G$ P# Y6 Q
  535.     {# V5 q8 p8 i, L0 q, m" M& |
  536.       CloseHandle(mutex);- t( @/ T. h  M* s3 H! u$ W
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);$ E/ I! n. A- u- j' i
  538.       return TRUE;! R) q* K  `- x9 X) h
  539.     }$ u( g3 k' b) N
  540.   }  & r- O! O7 P! x* t$ G) u
  541.   CloseHandle(mutex);
    - r& u$ q, N2 r' S- M8 Q

  542. 0 K9 \% a3 q; t6 c; v
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ! a; p, Q# ~& h
  544. 1 g- l/ P, U. V# e! z& N
  545.         AfxEnableControlContainer();
    - E$ z( W0 ~& S, r/ d
  546. 9 x: n. M3 f* W: d( T, U
  547.   bCanUpdate=FALSE;+ A) x: }8 h$ G$ t3 U1 r! M, M+ N4 V
  548.   dwStartUpSteps=1;
    % m' J% u. G8 I! c
  549.   dwProgramState=AP_NOTHING;
    ( \  M/ ]$ z7 I/ b5 O. q

  550. & B+ ?& E; F. Z# g3 j6 ~6 }; k
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);- Y, O& ?! j" V  i+ Q/ f+ @1 h

  552. , [. a; l  B7 C% p7 \0 Y7 m
  553.         // Standard initialization
    # K" ~6 W: c7 s4 T3 o9 m, C
  554.         // If you are not using these features and wish to reduce the size
    4 E% ~2 e  C1 ]& E6 R
  555.         //  of your final executable, you should remove from the following
    ) S" x( @; r- \
  556.         //  the specific initialization routines you do not need.6 Y& I. q4 e! j8 G7 j4 c
  557. 2 z: U1 R  i+ R% G- e  [
  558. #ifdef _AFXDLL
    3 V# s$ D- U2 I- U/ E, K. j
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL$ g2 v& `  T. D+ Y- _0 E
  560. #else) U6 i, J9 ?1 S4 Y4 `: J2 a
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    . d0 V% p2 C$ e( @8 y) o2 V
  562. #endif
    ) c# _6 Z* ]2 |; o

  563. ) X; T' P6 C2 H% E9 \0 W" W& g, l
  564.   dlg=new CRevAppDlg;5 |4 v/ L, x$ y% z* y& f
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    / `4 z+ I! S: p% M8 y6 ^
  566.   dlg->ShowWindow(SW_SHOWNORMAL);3 L: t) [% L0 @! T( G- e
  567.   m_pMainWnd=dlg;
    7 e* L, k; i& P/ t8 F) h* z: x

  568. 3 o( C) D, q1 r" P( ]+ y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
      m$ X0 o1 i, u1 l9 S8 ^- `

  570. ! [9 E& R0 s7 g* ~! V0 p6 A
  571. //  GdiplusStartupInput gdiplusStartupInput;
    % j" n; [. B8 U
  572. //  ULONG_PTR gdiplusToken;8 v- A' ~) p0 _, h) F0 X
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    * O, [, G+ G$ F4 E

  574. 0 z8 _( g# C2 T; N# y
  575. //        CRevAppDlg dlg;
    ; f. C1 c( T& f! U2 M$ P0 d
  576. //        int nResponse = dlg.DoModal();
    : A' n& t1 L" O* B1 p' s' k1 E
  577. //        if (nResponse == IDOK)9 q! M6 u6 }3 n8 m* c
  578. //        {$ J) E/ G+ M% C
  579. //                // TODO: Place code here to handle when the dialog is
    : w3 F  ^+ c* z* M; j' `+ U+ n
  580. //                //  dismissed with OK
    " H( o0 f3 h' T4 \  `. \! {$ L
  581. //        }' K3 a# p" Q; h6 L$ c
  582. //        else if (nResponse == IDCANCEL)
    % N1 _% m! z6 ?& {5 S6 _2 }
  583. //        {
    - H# A. i) c( f: ]/ h) U: d
  584. //                // TODO: Place code here to handle when the dialog is
    5 Y, r: [) n# F4 L! e) [% ^4 w
  585. //                //  dismissed with Cancel
      k7 |0 ~; y: t, k' X" I$ w3 m
  586. //        }, H. t/ D0 j, N& y; k$ o
  587. " B: L" h7 W& X7 W% t7 G' d5 E
  588.         // Since the dialog has been closed, return FALSE so that we exit the( z# t; o$ y* \5 U% ]
  589.         //  application, rather than start the application's message pump.6 U' h1 |7 ^5 L8 ^  E, n' I
  590.         return TRUE;
    4 }* J& w0 ^2 p& P( q
  591. }
    , C- U+ W: h- i) G
  592. 0 o% B! Q# S4 p9 t; c0 ^
  593. char *CRevAppApp::strtok3(char *pSource,char *token)' D/ @. V8 R$ m1 l0 F( s
  594. {
    - q# B7 n) Z2 w4 z1 _
  595.   int i;
    ( |% l6 N: [0 r1 X% b# v3 {
  596.   char *szRet;2 ?3 h" R% f) k6 D% U

  597.   A- Q1 b) o5 V# s- E" s7 Z( e) S
  598.   if(pSource) { itoken=0; sztoken=pSource; }
      Z& D+ o. a& f& G7 z) e* R: Z
  599.   if(sztoken)
      h6 U) d: L! N
  600.   {5 T9 S) e1 M  c- M6 v
  601.     szRet=&sztoken[itoken];
    ; k  s% p4 X% q- H
  602.     while(sztoken[itoken])8 c* G) b5 k- g9 b5 d  W
  603.     {
    5 p) Q0 g6 h6 c/ f" j
  604.       for(i=0;i<(int)strlen(token);i++)
    9 P# b8 I, a4 u: `" H- e
  605.       {
    3 \8 |& E* D9 }& E2 q
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]). \5 k6 \- e$ q8 H2 S! u
  607.         {
    / _) w) {+ V9 L: [) L3 ^
  608.           sztoken[itoken++]=0;% ?/ I! H: X# @
  609.           sztoken[itoken++]=0;
    ' E0 @1 X5 Z/ j) f
  610.           return szRet;
    , s7 T) G) |/ H0 ~* o8 Q
  611.         }
    8 y- X! y) `" r8 m) k2 _
  612.       }
    & U' j' x6 k1 s' {& _# j
  613.       itoken++;% v0 j  C1 b4 C5 S% p2 l# P
  614.     }
    ( {/ d8 E5 B! v/ w! v0 [( r. ^
  615.   }: t, d' k5 C1 P* T/ R
  616.   return NULL;0 U6 A+ o" L+ B' }) Y/ t# |
  617. }# c+ [4 N7 H! a6 U0 y% V3 g( @/ O
  618. 6 v( i' F, G, h( ?
  619. void ProcessProc(long Total,long Current): \( A& [& \$ {! m% m7 t
  620. {7 z4 E( Z/ m) [+ N% g( W  A7 Q
  621.         MSG msg;0 x9 Y( Z# n7 \1 |
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ Z6 ~6 B8 P9 `; O3 Q2 I
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));+ g3 A3 t& T: f0 b
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))5 z( r9 e5 G* X  M. @* n) S! M! j
  625.         {
    ( H$ W$ t7 C; V( T' \9 S6 s
  626.                 if(!GetMessage(&msg,NULL,0,0))
    2 ?3 C( s6 u# C: r3 a# X" O
  627.                 {5 e2 h  B% n. @2 ]4 V# X6 H
  628.                         return;0 ]1 t  }; |4 ]1 x
  629.                 }
    3 C5 ^- d8 z% |  G! Z# U9 a7 P4 k6 o: p
  630.                 TranslateMessage(&msg);# |- v+ j2 O! {; v
  631.                 DispatchMessage(&msg);
    * Q0 o& S5 ?: B" u9 w
  632.         }       
    ( R  n8 w' S4 ^% A+ J* C/ g: s4 u' K
  633. }
    ) p2 s3 E% w  Z9 F6 h, o. f% M/ Z
  634. + k6 @! w' y/ I9 |/ C$ [6 q( F
  635. BOOL bFirstChar=TRUE;/ }; k, u' ~, h* F

  636. 3 A; x  L! N# c9 l- C3 g( s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ; m/ R! z/ F8 n
  638. {
    3 I% [4 q4 V6 A1 z6 j
  639.         // TODO: Add your specialized code here and/or call the base class
    9 F. [# x* D9 B$ E
  640.   switch(dwProgramState)
    , z9 {. `  d+ }1 t9 U/ m. Q$ [* q
  641.   {
    " v* E, a! v, L
  642.   case AP_NOTHING:9 ?4 ^9 C8 s7 I$ i' M
  643.     switch(dwStartUpSteps)$ K: P) ~3 K3 f
  644.     {
    & Z* t: L' w" r
  645.     case 1:$ D& {* p% a3 B* c7 s, @& W5 x
  646.       {0 x) L+ C3 i: E9 R
  647.         int i;" b; g% M) G! K5 ]6 v
  648.         CDC *pCDC=dlg->GetDC();8 j5 D& V- Q: o% Q6 A4 K/ h
  649.         HDC hdcwnd=pCDC->m_hDC;
    0 z( @% o9 d! V' c
  650. //        Graphics graphics(hdcwnd);2 _3 t# r; F# k1 ~9 r7 q6 F
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    / j/ ?6 o2 G' M
  652. //        INT iWidth=bitmap.GetWidth();
      k4 L( v! B9 V: j7 U
  653. //        INT iHeight=bitmap.GetHeight();. h' B4 f. l4 k3 R* h6 x5 z
  654. //        Color color,colorTemp;* ?5 h4 p: T) x# ?) M
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    4 K8 c( a" L; N* \& z& A# e
  656. //        {* o, m; T+ f8 w( L" t+ P
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)5 e% f- F4 |3 r' e. r, g: J; x
  658. //          {
    . p  X% Y5 `/ ~' R) P1 f" |
  659. //            bitmap.GetPixel(iColumn,iRow,&color);% ~$ O5 `8 S3 m& k7 j6 Q. `! ^/ g' ^
  660. //            colorTemp.SetValue(color.MakeARGB(5 z$ K9 C: q4 W7 T: g/ N6 m. s! ?8 Y
  661. //              (BYTE)(255*iColumn/iWidth),5 p# y8 ~) v5 I; \
  662. //              color.GetRed(),
    5 O. `& J3 {& r* ?9 e' e
  663. //              color.GetGreen(),% o* w/ B5 b' T0 n. |: E
  664. //              color.GetBlue()));
    & K  o, G- x) ?1 Q& R4 ~: c
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);* n5 D. F2 p+ D% N$ x
  666. //          }" m5 u% K/ x  q. R8 g
  667. //        }
    $ ?3 H+ ~0 ?( S  t6 W
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);: R2 A2 k- I9 C2 n
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 f: u: B, E5 T- l4 J7 l
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    5 N+ \: s# m! n# f$ C
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");! D, p+ `5 v; X0 q
  672.         for(i=0;i<240;i+=8)+ ^3 D0 y! z2 U
  673.         {" C9 q% l" i" ~  A; e6 `
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    + r# }! F. O( V$ \
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' s  p) K  C) I: o
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 W% M8 f' w' h- {
  677.           Sleep(33);, I$ s5 J3 ^" P  a# O! @4 R
  678.         }: j' J5 B& i- l7 a7 ]( g
  679.         Sleep(1000);1 U: D$ v! L4 d! w0 o+ z! B9 Z
  680.         for(i=240;i>0;i-=8)
    - c+ c& _. H* ^% l! q
  681.         {* h- d2 U, d: L- b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      Z: l3 ~% H) J. \5 V+ G
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( u) w# v8 N- u. l
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / ]- f( ~; M. U6 L" T; G% O6 M, V
  685.           Sleep(33);: G; _. x& O6 w" n) S# _: p9 F) t
  686.         }
    7 U7 ^9 c7 N. C3 `. o
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( _* v. |" C8 Z! L  W
  688.         dlg->ReleaseDC(pCDC);
    9 P- p6 x. M3 Q& J0 I% }. l5 h" r
  689.         DeleteDC(hdctar);( ^& x8 q" U. o" J" d# N) ^
  690.         DeleteDC(hdcsrc);% Q& Y8 G1 n" n8 ^; O& H
  691.         DeleteDC(hdcorg);
    " i$ u* i! r' R+ N1 f' C
  692.       }
    & r& q( V7 ]; _; ?$ C( I
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);* v8 }1 Y- `* X
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");+ s- A( I  i, O8 _& F, p4 x  K. x: Q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");% L" u+ U' N, `9 y& p
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    + A$ v- }4 g; b3 ^* c: k+ V; Z1 H
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ i  G  [1 e/ l
  698.       if(!Dn.Connected()). Q3 M' `* R9 }; U
  699.       {
    $ E/ {: ?0 }  v! T. Z0 n) W1 D; l+ K& ~
  700.         dwTotalFiles=1;7 P! l2 M4 w* E' o
  701.         dwDownLoaded=0;5 ?7 x* y+ B; X% Q# }! q) {
  702.         bSilentStep=TRUE;& r* g4 k  ?9 J) B/ I& W  J
  703.         bCompressed=FALSE;% h& V; x$ f3 [  _7 i2 ]: n8 ^7 |6 r# w, L
  704.         strExtLocal.Empty();
      V3 H1 z: o+ o. ^/ Y' s
  705.         strFullName="readme.txt";+ Z, C9 H  s9 I/ x
  706.         dwProgramState=AP_CONNECT;
    - d) Y4 z$ {1 ^$ s" F
  707.       }+ {% R) E7 w4 J  O0 n! Q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    , G6 V. ]+ b5 `- V7 B% _  D
  709.       dwStartUpSteps=2;
    5 K3 P4 @. p. w5 m" O6 P9 ]( \( l% t
  710.       break;
    ( _" S# p' n: `( h6 s/ f
  711.     case 2:
      N3 u1 q3 c9 k3 `  L
  712.       {. `0 E3 P7 K, y0 j) Q
  713.         int iEOF;
    8 R7 q* a; y0 G6 E4 p6 i2 f
  714.         FILE *fp;, D  h. n0 Q3 V
  715.         char szString[512];$ A( |2 N/ g5 W( V2 t
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    3 r1 E% q0 g" m% A6 R
  717.         if(fp)& [; M8 [5 H. l. E2 y  A
  718.         {" t1 S) i* r( d3 a4 t
  719.           do  k1 z: H5 L2 d
  720.           {
    / L8 D' F. l8 S: h, Z
  721.             iEOF=fscanf(fp,"%s",szString);& s6 r% g% T; Y2 Y
  722.             if(strlen(szString)). Z0 i& Y1 B; o7 }" H
  723.             {
      f2 M4 `" }4 V4 D/ O0 y8 C
  724.               if(bFirstChar)) s* H1 g* l% V! J, ~/ l; K& r
  725.               {
    * b1 w2 k. ^. J- s% ?; c- D
  726.                 bFirstChar=FALSE;6 r6 W8 i1 K" t) E4 z
  727.                 bConnectIsBig5=FALSE;5 @5 t( Q! M7 Y& Q
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;$ g6 M2 `; K3 H
  729.               }" c' `8 Y! Z/ m* d3 _
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    5 n5 J* @' u8 Y6 Q; G+ G$ ^' V
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ; I/ l% D# R- q5 D: |8 Z8 G
  732.               dlg->m_ListText.AddString(szString);5 E) B9 f6 {8 d4 a
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 Q# U+ F+ E# D3 c/ Y$ q9 o3 I
  734.               *szString=0;
    2 T3 ]0 Q9 C0 |# c& N; \
  735.             }8 ^' T& l. H1 f3 O
  736.           } while(iEOF!=EOF);
    8 ?: [) A! ?3 ?# C0 x! U: O
  737.           fclose(fp);
    ; u+ U$ b4 Q$ e! G* y3 Q6 Y2 t
  738.           unlink(".\\DownLoad\\readme.txt");
    0 {" g# j. X0 C/ C/ b2 p
  739.           dwStartUpSteps=3;* s: [5 p2 R/ Y- V% D0 [
  740.         }
    6 p0 ~+ w! J  x; {& L
  741.       }
    , T% i: p; G* Y) _9 l1 S6 ~
  742.       break;
    3 n2 a( V% l3 [! a4 Y4 n, ]
  743.     case 3:: t- N& C* h0 C( u: ?) @
  744.       if(!Dn.Connected())
    & n6 k- I! d  m2 ]0 o2 b( B& W- k
  745.       {! d/ q. m+ k2 N: U3 I
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);2 `% K$ o! p! {( Y+ u
  747.         dwTotalFiles=1;
    4 f& {4 t/ t; y  }$ Y1 v+ C9 d
  748.         dwDownLoaded=0;
    ; b. h& A" \1 t' [; T$ ?, _
  749.         bSilentStep=TRUE;
    " h8 U5 @$ m9 M( s8 O& l9 R9 |! g. K
  750.         bCompressed=FALSE;5 c/ m1 \; Y: f. |
  751.         strExtLocal.Empty();
    , s' N) I9 t+ G- P4 @; p
  752.         strFullName="checkversion.txt";
    ( L- K4 H# X: C
  753.         dwProgramState=AP_CONNECT;2 F  q8 q- b6 ]0 t+ O# {2 e
  754.       }2 ]8 `, c3 @# V/ o
  755.       dwStartUpSteps=4;+ \; H. T1 }! u5 Z4 l. i
  756.       break;3 N9 P. v$ R/ p. z6 e3 F8 M: ?3 {# J
  757.     case 4:
    ) T( n& O) o! y
  758.       {
    & u; }) [: q2 p% \; f
  759.         FILE *fp;+ c5 m8 ~6 S1 H
  760.         char szString1[128];
    ; M5 J, i, ?* H+ I5 q6 s  B
  761.         char szString2[128];
    - e( F/ q- p  y2 ^8 D8 X9 {
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");- _6 h" y. V- [
  763.         if(fp)8 ]) x% ~$ G  h& a- e
  764.         {6 n: I  l& R' w+ p) k9 o7 d
  765.           fscanf(fp,"%s",szString1);
    & d" B+ m$ w% t
  766.           fclose(fp);; r, v) y8 X1 V, w/ V, F1 P
  767.           fCheckVersion=atof(szString1);
    * r6 j/ q1 ^" t7 e
  768.           fp=fopen(".\\checkversion.dat","r");$ q+ H  m, G$ P$ p$ z" V9 d; E/ s( f
  769.           if(fp); L. m7 C1 Q: Z9 I1 F
  770.           {+ `) w5 H7 P$ K$ E  p) r: I7 d1 g
  771.             fscanf(fp,"%s",szString2);
      J- ~; {/ a3 l9 `3 d
  772.             fclose(fp);
    : Y+ f. b% x& f" S: ?, u
  773.             if(atof(szString1)!=atof(szString2))
    % d+ i# ~0 I8 E2 [: m+ u, r
  774.             {
    $ J* c4 g8 G; _8 h! F; }4 W8 J
  775.               if(!Dn.Connected())2 W+ [/ D( ?# |# c' E9 c! P
  776.               {
    ' r3 m/ d) E8 D" s( k6 h, P
  777.                 bFirstUpdate=TRUE;0 u( r6 K+ b) m4 p  B) l
  778.                 dwTotalFiles=1;
    + y( l, A% \4 m2 B' b
  779.                 dwDownLoaded=0;
    $ h/ N% T. L1 @3 c/ [  k
  780.                 bSilentStep=FALSE;
    + I5 r& ^' u$ F7 D/ i! ]( v
  781.                 bCompressed=TRUE;" D3 }8 t1 \" X/ n0 b3 a
  782.                 strExtLocal=".\\DownLoad\";5 P- P' b7 b% X& J
  783.                 strFullName="update.txt";
    ' P' [- J, d' E& e2 I6 |
  784.                 dwProgramState=AP_CONNECT;( f  o: g% ?1 S0 Y$ I0 A
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 n# M9 I* x9 Y9 M
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 W) f+ N& Q& B" m2 R
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    9 h8 G9 }* M8 M' u: }, \: b. ]
  788. % x% V9 M, Q9 j' c4 I6 F
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 a/ J! \9 @9 H. B; L
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    3 H6 g- o! e! |
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)+ f1 m; v, K- d9 B5 d
  792.                 {/ {. Y! \: T4 Q, w. i" L
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    6 O( b0 s8 N* Y- Z+ e1 N
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");8 i& T3 K4 U7 Y1 {9 X
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");1 `# J. C( @  a6 y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 v5 B' a5 u( b# M, I$ @, o

  797. ' `1 H' V& k2 q5 w# `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 f  z2 {2 N7 Q/ o
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");8 T, N, q: H% `3 ~: }
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");# F$ a6 K$ m# W2 u$ P4 B) p
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      W% n1 f( ^/ C# Z/ \
  802.                 }- T# @6 ?. r, o! b* ^% C
  803.                 dwStartUpSteps=5;
    4 }% L) F0 [2 W- ]7 H
  804.               }
    7 T4 A2 d8 H8 Q0 Q8 o
  805.             }
    & t2 o) v- }$ |5 [
  806.             else
    1 }& e3 |3 {) L4 A
  807.             {6 B2 v- N4 z2 D5 [2 f' L% B
  808.               unlink(".\\DownLoad\\checkversion.txt");
    3 n. J! s' T% J0 s
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    2 u3 w; h- _1 y: e0 W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");, ^& P+ x- A6 h) v, ~$ @! Z$ i6 [
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");6 r! J& E) n) l2 v

  812. 8 J" G4 u; B8 |# p1 J$ C
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 T! g0 P$ e& X6 Z/ [; i5 ^
  814.               dwStartUpSteps=99;, o! w1 e2 @6 f( B. W2 A  @( S
  815.               bFinishUpdated=TRUE;. r; n0 e' u6 z+ C  [; W) Y
  816.               bCanUpdate=TRUE;
    3 k4 B5 h4 o- ]$ c0 w
  817.             }$ n+ j. C, n) R2 s2 H
  818.           }
    0 C5 M2 p  f/ i, A6 Y  A
  819.           else5 g  u& ]' B( p3 o
  820.           {
    # l, B* k+ x$ g6 y4 q$ N' l6 k$ t
  821.             if(!Dn.Connected())4 z# x( w0 x! {' V& P. ~
  822.             {& M/ u6 K: V3 l9 P
  823.               bFirstUpdate=TRUE;
    7 @, s( f& [- `& B/ x2 V6 \) V
  824.               dwTotalFiles=1;
    ; @( p* ^7 z$ D3 V. d+ B
  825.               dwDownLoaded=0;8 Y6 v7 [5 p& P' ^2 D/ q. y
  826.               bSilentStep=FALSE;
      |# r; Q4 n. t% m& ?0 f% l
  827.               bCompressed=TRUE;% j1 a# A/ i1 ]
  828.               strExtLocal=".\\DownLoad\";
    & ?$ E4 Z9 @9 u0 U: v  e% ?$ A# c
  829.               strFullName="update.txt";
    ) P; V9 V4 y0 M  K) X
  830.               dwProgramState=AP_CONNECT;/ |# ]9 k  n' G% M$ q2 I
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , y* V. Y  k, x/ J
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / m! n8 B5 r5 s6 ?) I& b
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");1 y( |8 ]' ]% m+ Z
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% x4 T) R$ F( N5 ?% `
  835.               unlink(".\\DownLoad\\checkversion.txt");
    6 j. L) F) [" w, r
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    $ n% q2 _7 `9 T$ O$ T) Z
  837.               {2 C4 ~& B2 O! {' e) y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ! y; ~5 ^7 A" G* A( B  L  n( m
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");' ]6 U9 W7 C7 b  p& y  S
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    : y9 {$ X$ j  @/ Z9 q: q, M
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 e  W5 ^( H1 I4 q& N/ h
  842.                 # s, `% A" a4 ]6 ]3 x
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");0 y1 f& ~" i) X5 d+ s. J' b
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; X' |" _6 ?1 W% v
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");, ~% H1 j1 x1 r1 E0 o6 j9 h
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 L9 J+ l1 ~; _, d$ L
  847.               }9 A. ?8 Q1 W# c5 d1 @
  848.               dwStartUpSteps=5;$ Z8 |" V( U: T8 g4 N# w
  849.             }
    , l, @! Q# _$ Z  d, M4 r; [+ u- d
  850.           }! Y& R' A# ?$ w/ w2 @
  851.         }
    4 h" l& B  c) [: ?! _
  852.         else
    7 {" t1 e& m5 s) z! k3 U
  853.         {
    6 ^: L, U1 q1 L: d8 k, G- ~
  854.           dwStartUpSteps=3;% w+ l1 h5 `" o7 e  s
  855.         }
    2 B9 B/ w0 d$ g. b. K% Z; O8 I$ |
  856.       }# w; a) {" w/ M
  857.       break;
    3 w" h6 w, T2 l! g/ h
  858.     case 5:' |* M- x  @0 q8 t: a7 M
  859.       {
    ! \) w6 b0 }) H' U  s6 r" `) e; A: W
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)' E5 Q. Z7 Q% _1 A
  861.         {
    6 Y* J7 @9 D* {) i) j/ _3 f
  862.           int opt_overwrite=1;
    8 c  D; V" ?& p2 n' m3 ~
  863.           int opt_do_extract_withoutpath=0;0 S$ M* ?# v4 G3 s: a4 o/ U% ?, [
  864.           unzFile uf=NULL;: w9 Y4 U8 Q! k2 f! Q* W; _0 ?

  865. 5 X  K# r, s6 M8 L
  866.           uf=unzOpen("Wsa.zip");  M! n, ~  j9 A0 o: [
  867.           if(uf)3 }9 f2 M( ]* q5 |/ D' `1 p" R
  868.           {% b1 M; O: ^# F
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    , b( C$ T6 t# f- A- s
  870.             unzClose(uf);
    9 ~) J, I! T9 J2 H) u2 Q5 U. l6 k# [
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");+ ?: p( h& {2 Q0 m
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    / K0 @" Q$ }: I" b1 i
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");0 C! R. P6 t1 C6 x6 b& I2 S9 o2 B
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) d  l4 Z- o8 Q4 \3 X
  875.           }3 b" [7 ~; m9 g, \$ K
  876.           DeleteFile("Wsa.zip" );
    + `" M: ?; s( q
  877.         }% h  b) q$ L# |

  878. : E8 F: x* ^4 Z1 H) \
  879.         if(CheckLocalVersion())1 x& t8 V! l) K" N5 ~8 ^3 q
  880.         {( K" }9 v, V# Y2 E, \
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");% [: B4 }" I0 G
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    . `; B& \1 w; V
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");" O) C# A+ @# L8 K" V- k1 m
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / a* u  d4 f/ e6 V- `
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);; m- R' A9 `4 s1 s' R
  886.           dwStartUpSteps=99;
    6 ^; }1 u1 T2 j$ x' M& o
  887.         }
    3 M7 [0 g; K; S3 l3 F5 U, @
  888.         else& b1 O) f! r3 K9 e1 P
  889.         {
    ; K& ^. U  ~) `/ X# t
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / h  ?  r8 P% v$ ]3 V" L
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");) s) ^5 p8 i- f, O! j
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    + {9 c5 N) x. {/ B! F, t; s* Y

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

* S! ^" t# t; v( Z5 ^) Z
/ q; \0 d! q: \6 k2 k" ?* \4 E

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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