找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
6 _2 _) o9 e$ ~7 P
  1. / RevApp.cpp : Defines the class behaviors for the application.
    8 }! m1 q, t& o, }* b
  2. //* j2 v' v  i- ~  I" W& ?. e- w
  3. * \. R' P. H7 k
  4. #include "stdafx.h"
    , S0 W2 c- n8 h8 x
  5. 7 n; g% A, B' _( x$ I0 `8 C* h
  6. //#define UNICODE
    : I; k! ]4 Q8 g9 v" q' G
  7. //#include <gdiplus.h>
    - R4 P5 ?+ S: \
  8. //using namespace Gdiplus;
    5 o( ]9 ^5 _. Y, |. r' |& |- P

  9. ! W, ?' L/ T: q4 j; R* E
  10. #include "RevApp.h"  d# a$ ?. s4 s
  11. #include "RevAppDlg.h"3 j, K% _. {  G* b4 }9 W
  12. 4 s5 g/ j7 U, e
  13. #pragma warning(disable:4786). q9 i: b2 N; \& l6 D
  14. #include <map>
    4 P; x" v# E! r3 ?9 H1 @* Y, \
  15. #include <list>
    * _  G5 d9 a9 J: a3 l% q5 e% x5 j/ X
  16. #include <direct.h>' n' Y3 I5 H. o: f
  17. " [9 y1 y0 j9 N' S4 J# o5 U
  18. #ifdef _DEBUG
    0 r* h- O$ E. R
  19. #define new DEBUG_NEW3 t% o: D$ ^' g2 j4 C* b+ V* l
  20. #undef THIS_FILE& a1 T0 L0 M: F9 K. w
  21. static char THIS_FILE[] = __FILE__;
    $ ^# L; _! A( r4 G5 d, _+ g( M: P
  22. #endif. N' H5 W/ |, E- `7 P% H
  23. #include "SkinResDef.h"
    ' S+ x  s- x) l* B$ c3 X8 n; w& p+ v
  24. #include "ChangeBG.h"
    ! y% B0 D/ {; G' ~) C
  25. #include "AFXINET.H"7 j$ Z2 ]7 L- c& m+ j! u

  26. ! D: y1 ?1 z# c$ I& R7 J9 ^$ X, |
  27. #define TRADITIONAL_CHINESE 05 l+ Q. }; ~! k! s- i% \! M
  28. #define SIMPLIFY_CHINESE 1: ]5 g5 d2 h  e. x$ _6 C
  29. #define ENGLISH 2
    " O; K# D" ?' ^/ z+ b
  30. int m_iLanguage = ENGLISH;
    ' ^3 b4 S3 i0 J* A, Z6 C
  31. /////////////////////////////////////////////////////////////////////////////
    $ H" _( |$ n2 {" o8 S* D6 m
  32. // CRevAppApp
    7 Z1 M7 \; }: Q3 j3 P

  33. ! D: C  a7 h& T
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp): y0 Y! X! X& [
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ; r! c! }1 X3 a
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    " ^5 L$ @6 X1 ^0 G
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    , e% w. s4 A: ~4 U9 d+ `
  38.         //}}AFX_MSG
    3 t, t" \& Y* P- G3 C* O4 y. D
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    6 T! ^3 W. z% b# p
  40. END_MESSAGE_MAP()
    / v: B& j# X; n4 A9 O; h2 O
  41. ! v8 O( y' j0 f- H5 u0 M7 Q
  42. /////////////////////////////////////////////////////////////////////////////
    + w' N6 S# M( |! K2 l% M
  43. // CRevAppApp construction
      C1 \& u+ t7 P
  44. % j- m( U: k  X2 C; z# p' j1 T3 T6 q
  45. CRevAppApp::CRevAppApp()
    7 F- E2 l8 R+ `+ U" l) v
  46. {$ \! K6 ?/ b3 ~" e. @
  47.         // TODO: add construction code here,9 O2 f1 x9 D4 C* K
  48.         // Place all significant initialization in InitInstance
    8 P# ~, J1 L! M
  49.   bDisplayIsBig5=FALSE;
    2 r6 y8 m8 @# ?2 `
  50.   bRestartUpdater=FALSE;$ U. f  C. v$ C% W/ a5 v2 f% r
  51.   bFinishUpdated=FALSE;
    8 m' A4 D4 r  |1 u
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;, r9 S% b9 I) S# B3 q4 z+ B8 K
  53.   InitChangeDataBig52GBKS();7 q1 @8 J% a3 i
  54.   InitChangeDataGBKS2Big5();  d, e5 d2 z$ a" G+ G! S( C
  55.         //
    ( M$ \5 u6 r" Z. e( i3 v7 E
  56.         bClickRunExe = FALSE;. _' I6 t( I- }
  57.         //
    * s! p2 b5 ~/ M" Q: D1 x1 a6 u
  58. }
    6 P" O2 B9 C* l, d1 D: [, l, Z) I" z

  59.   B' z# c: i* i' |
  60. CRevAppApp::~CRevAppApp()
    1 V0 f7 T2 J9 a7 |! u5 B8 G. R
  61. {; `& B5 c/ g. K2 Z! c
  62.         // TODO: add construction code here,
    : ~4 Y3 W# @2 K! m4 b5 ]9 T
  63.         // Place all significant initialization in InitInstance/ y1 A8 i, q% {0 y
  64.   EndChangeData();9 q. b$ G2 u9 b& B
  65. }% S9 M# y; P* l; g+ N9 A

  66. + L* d. s- M$ S$ e6 s9 G3 ?( c
  67. /////////////////////////////////////////////////////////////////////////////# m/ X) D- G7 p% w2 m5 I
  68. // The one and only CRevAppApp object* `( J6 @1 t' O. B# R: h
  69. 5 O8 R8 r0 _9 W) [2 M
  70. CRevAppApp theApp;
    1 e" d2 n% [& L! }1 `2 R& S

  71.   {# J& q5 m# ?6 y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName), i8 H+ a+ t5 [
  73. {, A- {2 R- L& K# Z- Y
  74.   int iEOF=0;
    ' t7 n+ m3 T' s$ s! x% V# q) m
  75.   char szTempName[MAX_PATH];+ `* T4 N9 `! x/ A! G
  76.   *szFileName=0;
    3 T1 G: S/ J. {7 S' w( z4 ]# z
  77.   iEOF=fscanf(fp,"%s",szTempName);
      U9 H% f, |3 Q* G
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')  L3 l; i( J0 k% G/ W$ I
  79.   {
    * f; N3 E) o5 I3 H
  80.     strcpy(szFileName,&szTempName[1]);
    0 O# C6 @$ o0 V7 j5 u6 g4 D( h
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    * H% B) ]# t0 s( E1 y
  82.     {
    % j  ?. D3 \3 \, Y( _  f$ D2 v1 l: b' a  Y
  83.       iEOF=fscanf(fp,"%s",szTempName);3 d" H$ R* C& f
  84.       strcat(szFileName," ");
    " @% I1 S( c1 [. T+ D+ C( |7 i
  85.       strcat(szFileName,szTempName);+ {1 X" f! c" j1 [: V
  86.     }7 `, \2 g9 K3 H' @7 r0 i
  87.     if(strlen(szFileName)>=1)8 y6 t( g$ Z4 B
  88.     {
    9 o  j* I0 z4 Y% D
  89.       szFileName[strlen(szFileName)-1]=0;
    1 ~, N, y6 v  N/ C! ]- G- m
  90.     }# t- D* e% }; z/ D$ v. y+ e4 d2 k
  91.   }
    2 n$ w. Y* P$ l0 A5 l
  92.   return szFileName;  z/ q3 n4 U+ {: w
  93. }
    / I( |8 a# A: H% f
  94. - L9 Z6 W! P+ K8 Q5 D: k8 r3 S
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    % c! E! u+ G4 J2 n* d$ M
  96. {
    $ I) Z% S- H4 b$ Q
  97.   FILE *fp;8 Y# ~' o7 j2 q0 B0 s1 l: L  B
  98.   char *key=NULL;
    " ^, _  I" G& b. m6 N6 g
  99.   char version[MAX_PATH];
    ! E3 ^! x3 O, \" s* y& A' d  g
  100.   LPUPDATEFILE file,olds;3 w0 k( S' @9 h3 l
  101.   std::map<CString,LPUPDATEFILE>::iterator p;& A3 b1 x* P: a7 b

  102. 7 {4 w4 ]- y7 _9 j5 s1 Q
  103.   UpdateList.clear();6 Z5 K8 [. n$ V8 I, J% y1 M! p
  104.   UpdateFile.clear();) J! b& N) y* s7 j3 G/ L) Y
  105.   if(GetFileAttributes(filename)==-1) return false;& {2 M7 K# K4 J- ~9 o0 r1 `1 _
  106.   if(!(fp=fopen(filename,"r"))) return false;$ Z, ~) y( _- V8 u/ |( C. R
  107.   fscanf(fp,"%s",version);
    8 K5 o' K  E$ h7 u
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }/ c1 z$ k2 K( z3 e5 h- k
  109.   while(fscanf(fp,"%s",version)!=EOF)
    " Z; O* ^( Q! h1 `# g+ i+ }3 h
  110.   {( G% T' j) g% V% l  \  a
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + P) O* N' i# x
  112.     fscanf(fp,"%s",file->path);
    0 k' t+ ?* b" d+ d) X" L
  113.     ReadFileNames(fp,file->file);
    9 v: f7 ]& S6 m, E/ K: `
  114.     strcpy(file->full,".");9 ^8 ^- I9 G, E
  115.     strcat(file->full,file->path);
    $ n; J# o" C1 U' m3 B1 r& t$ X
  116.     strcat(file->full,file->file);; M7 |: z6 {) t* A
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())) T! m2 q7 ^2 X$ B  }, z
  118.     {) A, z$ `! }3 R+ L' J
  119.       file->vers=(float)atof(version);
    , R- T: k- n0 n) f/ |
  120.       UpdateList.push_back(file->full);
    / ^* n! p, m, E% f( Q  |
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    % `# F% U7 n$ [4 Q1 |- ~5 B  Z
  122.     }, d$ C' ~/ R% Y, y" D7 x- J
  123.     else
    ! O8 R- k( c  T: N8 o" `% J* y
  124.     {
    9 a0 t8 K* h6 \
  125.       olds=(*p).second;
    : n7 H$ ^9 a8 C7 E8 j7 O% G
  126.       if(olds->vers<(float)atof(version)), ~2 ^9 X* Y+ d) \
  127.       {. |$ X8 u2 R% s0 `) k) R7 ]  ?# B
  128.         olds->vers=(float)atof(version);2 ]' l7 i' d# q: o4 x# T- ?
  129.       }
    ! ^; Y9 v: P, ~6 ^$ S# l
  130.       free(file);
      T) O* v. ^6 ]% j* Z- s' ?0 m; d' H2 d
  131.     }$ E" L; c4 _; X7 m0 L
  132.   }
    / e  G/ j7 X6 y0 v
  133.   fclose(fp);
    * t2 G5 R" u" f" y. H
  134.   return true;
    / ~- P% e5 o- v& o5 B  _( l
  135. }
    1 V: q  [" v* h: Q9 D: V% i( k

  136. 4 k5 E4 y/ f" x$ U9 P3 `
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)! U2 |: [5 f# H  Y/ G* q7 c2 V
  138. {
    % c) \- h$ z0 r. G
  139.   TCHAR  szFull[MAX_PATH];
    & b2 }& H$ W6 X3 R5 M. \" Z
  140.   TCHAR *token,*inter;- K7 }2 K: Q; {( a$ V
  141.   *szPath=0;
    $ y+ g; c4 t2 }$ {/ T
  142.   strcpy(szFull,szFullPath);4 N! i2 d# [' e2 ^: ]  Y
  143.   token=strtok(szFull,"\\/");0 f" {; `5 i6 T) @) ]1 J
  144.   inter=token;
    ' S. S: o0 q* W7 ^3 C
  145.   while(token=strtok(NULL,"\\/"))
    0 x1 n. s; X1 U5 a& K3 [
  146.   {( C1 `6 v/ B6 X' l
  147.     strcat(szPath,inter);% U7 O8 a  `  p: b; a; l
  148.     strcat(szPath,"\");; Z- h$ K! }" i: @
  149.     inter=token;
    & C  i+ w: V7 w4 N# Y$ Z
  150.   }
    . Z0 i) B( `  l4 R0 K. z# x
  151.   return strlen(szPath);. ~+ _8 z7 j/ u$ d+ V6 a
  152. }/ R3 X' l( r$ ]9 c! x' M- x( T

  153. ; [* f% M6 F% j) H% [. x, ]) V
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    0 V* l  ?3 S. i0 a! X) {
  155. {
    & |# \: l/ t8 `# _7 i6 e
  156.   DWORD attrib=GetFileAttributes(Target);, k0 s; W, f9 w3 m, Z+ d
  157.   if(attrib!=-1)
    ) I* Q% y# @# Y; e
  158.   {/ r  T' ^& s% E# G& @3 i
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)); m* G7 }2 @. w( S: v( X
  160.     {
    ! A! |& Y+ h3 E1 M8 b4 W6 H' H
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);  ^2 W" W% g# U/ U' ^
  162.       SetFileAttributes(Target,attrib);
    ) o) t, F2 o3 i$ v  s/ w1 M0 G
  163.     }8 A7 U8 D' n0 e. [
  164.   }
    : [+ v! U# o4 l# `8 j3 S3 }! N
  165.   CopyFile(Source,Target,Erase);
      b" O4 b$ r( m2 v  @, ?
  166. }
    # @, M7 E3 i2 V1 Q- P& {7 w! A

  167. 9 k$ Y) i  h$ H6 h6 @8 ?' F* g
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)! I! J" e; y( @2 X& i; k8 t
  169. {" S8 e0 e4 |* m4 ]  W. \! x
  170.      FILE *fp;
    3 `; S' H2 H" l( F4 E- _
  171.      char  szBuffer[8192];
    % _8 }' E" I% Q: X0 |: n6 o$ s+ p
  172.   va_list  argptr;
    0 K( k$ C4 @# V
  173. $ t  s" L; G5 |/ J# i" j- a! Q
  174.         va_start(argptr,message);) R) v2 I  h9 o/ I
  175.         vsprintf(szBuffer,message,argptr);
    0 X" j0 p" Y8 t9 v) }
  176.         va_end(argptr);* Z( i% o2 J* ]$ n. g
  177.   fp=fopen(FileName,"a");. M' C. Z9 b+ ], M& ]# Z; i
  178.   if(fp)! |4 [2 e, ?. b5 A1 i
  179.   {
    7 N' u3 d0 Z1 k$ F) {5 ]
  180.     fprintf(fp,szBuffer);* x% q5 j$ _- {/ \% ^8 k- W3 g
  181.     fclose(fp);2 M' @+ ?9 h) J
  182.           _flushall();# R4 b5 {: J" j9 R1 B: ^1 x
  183.   }
    2 O: \( m% V) `+ g
  184. }
    3 v) o3 e( S  _& P

  185. 2 h$ u+ q# K; n  }  m' X% b
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    / G: V) @5 B6 h, e4 t
  187. {9 Y5 Z  ]# \4 b! Z
  188.      FILE *fp;
    $ Z# U) _- }, k
  189.     DWORD  attrib;0 Z) f; u# m6 E8 r0 T% `" l
  190.   attrib=GetFileAttributes(FileName);$ \" h* U9 b" _' e+ k& R' ~
  191.   if(attrib!=-1)
      g* L1 v7 k1 U* r" u- }
  192.   {
    1 x' E+ u6 C2 L4 ?
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    * d( r$ Q7 Y( e) D) l
  194.     if(!SetFileAttributes(FileName,attrib))( _/ U+ r2 M# q$ h3 [7 n/ E
  195.     {- b2 z) P$ h* x2 |1 ]' v
  196.       return FALSE;2 |( L2 l9 ?$ M. m
  197.     }+ Z6 }2 }! s. S5 {* a
  198.   }' R, Q/ [* z! C
  199.   fp=fopen(FileName,"wb");  w4 V4 o1 b! ~, b& I
  200.   if(fp)% p. x5 Q( |. V' f% K5 P
  201.   {
    % a/ [5 X6 b  r$ `$ r, Z
  202.     fclose(fp);
    ' N/ x8 K$ q. k" T
  203.   }" z7 D, S# f$ F5 c5 T
  204.   return TRUE;
    1 i3 E; _% }6 @7 d/ z% O
  205. }& n  v* U* G1 {; b1 w

  206. 4 \9 g0 L9 }; l5 b# u" p# J: `
  207. BOOL CRevAppApp::UpdateLocalVersion(void)! {% j$ s, M, X" [% X4 y
  208. {
    : @( H9 L, ?7 v2 z1 I2 T
  209.   char filename[MAX_PATH];
    ! F- J! Y" l; W" P9 o- T
  210.   LPUPDATEFILE file,olds;
    9 N) C/ V( E2 H3 g
  211.   std::map<int,CString>::iterator i;
      ~, R$ s% x6 {5 }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;. Q4 A8 W. i% }6 h2 _* v
  213.   std::list<CString>::iterator l;
    . B1 @  U& L( O: Q

  214. * I! d3 u) n7 E* a
  215.   if(bFirstUpdate)
    1 m3 ]1 Q' y9 A" U# T
  216.   {( }- i" B2 Z1 w9 t
  217.     dwCurrFile=0;5 O1 B, Q2 {8 _& y
  218.     bFirstUpdate=FALSE;& M. h) J7 N2 H8 [, D3 Q: O- q) j7 {
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # i* Q: i5 i. {) T  U) S
  220.     {6 v" j9 p. ^& \& v" Y0 \
  221.       dwTotalFiles=UpdateLocal.size();
    ) B3 j/ ~  d7 s% _4 G2 K4 @7 m* A
  222.       dwDownLoaded=0;! {' i+ P* `3 G8 x7 h
  223.       bSilentStep=FALSE;
    ) P  l8 W, z' \5 ]
  224.       bCompressed=TRUE;
    0 Y% w9 a! b# h0 Z! w. d
  225.       strExtLocal.Empty();
    & }* `$ x8 _! @! R! u! z" \9 Y: j
  226.       strFullName=(*i).second;
    2 o. I' n" S" Z
  227.       dwProgramState=AP_CONNECT;
    ; w' m) ?. ~8 A9 `* e2 E
  228.       return TRUE;
    2 ^- {( i( B+ }4 K5 ]! f% ]1 l6 X
  229.     }! I+ i) e( C, X8 R4 Q
  230.   }. `+ a. z! ]; J+ \, ~; H; i
  231.   else if(bRestartUpdater==FALSE)
    8 ~" ~2 J9 U- }  `! U, t
  232.   {
    % c: W- \! v& W4 T1 ]% W
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())0 @% O+ m$ N  m+ k; D: J' Z+ c
  234.     {4 S% W6 P; H! K: c& {
  235.       file=(*p).second;$ ~: z& Q" V- ~) }5 x
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()): T" y+ E8 m4 X
  237.       {4 M9 s+ y9 G  F+ J
  238.         olds=(*p).second;
    0 J- a6 R! @" G& e1 o
  239.         olds->vers=file->vers;4 G1 T8 v) `3 B: W/ K
  240.       }" b2 T' Z0 _3 C6 @' R
  241.       else7 ~# ]% E- y+ D8 l
  242.       {; J0 Q. h; z+ _2 ~" a# z( z8 M1 h' I
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 b1 e  Q6 w# f% R% \( o
  244.         memcpy(olds,file,sizeof(UPDATEFILE));. h3 P. o& b# J+ t5 H- q. }
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    % k1 R1 U. J* g
  246.       }/ s3 n6 e% u( w  O* O' M
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ; s1 Z/ V& [% ]+ @: o6 w2 a8 p
  248.       sprintf(filename,"(%s)",file->file);5 m% p& _* O  r  i, J9 ?
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 j# x0 l# K! h6 F0 L& U
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }) v7 F+ g7 c' k) ^0 g" k
  251.     }) t& ]2 l* a, ~" W5 m* w
  252.     dwCurrFile++;
    5 L4 c6 B4 E# Q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) k7 c% g/ A% f. @0 {
  254.     {
    8 e& P# {' B. r( v- B
  255.       bSilentStep=FALSE;
    & U! i4 W2 X( `' V9 `, V% ]
  256.       bCompressed=TRUE;+ n9 `5 i6 K( G. X
  257.       strExtLocal.Empty();
    8 s+ u. J6 x) m# l( V9 x
  258.       strFullName=(*i).second;3 V, Q9 }: k! X3 |/ m
  259.       dwProgramState=AP_CONNECT;' W9 `2 `3 `$ ]0 R
  260.       return TRUE;
    7 `: H. u2 T) k2 a. @. q
  261.     }
    4 z2 W1 |) i! ~5 ~2 w; Z) G
  262.     if(!bRestartUpdater)6 h5 I) \0 E1 e5 t" v
  263.     {
    ' L: I+ g, Y" N1 {% p4 m
  264.       int iCurrSize,iFileSize;5 U: D0 N% A, z$ S  a; Q9 g
  265.       iCurrSize=0;+ }1 j- ]& J  U* ?& e# `' x
  266.       iFileSize=UpdateList2.size();
    - f$ f; o6 |, w. j) l. G/ n
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ; @, a+ N- R! L8 O' z: U; k
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");2 D7 l0 N6 [# J7 x9 p
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");, j+ T6 u' c( q8 U4 T1 n4 o' D+ A2 H
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 r, g  m. Z8 v# [
  271.       Fclearf(".\\update.dat");: j* Y2 B; f' Y- W9 P" [; i6 t
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    : m" E& ^( {" _7 B
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)$ ]' z. \* Q( r6 I) m# f
  274.       {& ^( x% r3 R& Z0 i. a
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    : m; C. g" h5 i2 n! |7 j7 G
  276.         {* x2 D# J6 ]0 W8 t
  277.           file=(*p).second;0 j9 \: e9 d% M! O
  278.           sprintf(filename,"(%s)",file->file);: [  E4 m. `) M* r' A( ?( }3 l6 m
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( G! }6 ?- W! Q# X
  280.           iCurrSize++;
    9 ]3 z. ]# x6 o$ |
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    4 d: d) m% D8 M4 R. D$ Y$ N
  282.         }
    9 k3 v* e* {+ w
  283.       }
    2 l) P# ]' {% c3 v1 l
  284.       unlink(".\\update.txt");
    5 @; _) j! M, t) l* v# q
  285.       unlink(".\\update.tmp");) U, K$ y6 a1 v! S  k! M9 e
  286.       Fclearf(".\\checkversion.dat");
    1 j. M- x: w2 _% }/ h
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ! z2 m6 R: {$ D; v$ t, y
  288.       if(UpdateLocal.size())
    % t2 ]9 |  @7 B  G0 b
  289.       {9 z! x& Z! g- B8 x' k& j2 K; n, v
  290.         UpdateLocal.clear();
    / I: l% g$ g1 H# }3 q
  291.       }" G7 l- m2 b, {. Z
  292.       if(UpdateFile3.size())
    ' H% t& X, e! N2 K+ H. W
  293.       {2 r8 [0 u3 V) Q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): j) w7 x/ t1 `! _! e2 h
  295.         {" \4 ^9 t$ C* ~
  296.           file=(*p).second;7 a4 W, E- ^' x8 ^5 A
  297.           free(file);
    ; T, G* v' Z* J+ ?
  298.         }$ n8 q/ o8 a/ B
  299.         UpdateFile3.clear();+ @) F, c8 ]& G1 M6 K8 U1 _
  300.         UpdateList3.clear();
    5 N- x* ~! a3 R5 K
  301.       }
    5 o3 k: G* b6 S( J6 R  Z
  302.       if(UpdateFile2.size())- H6 x/ s  F2 }% @: T$ m- x
  303.       {' F" J& Y/ E# b3 u  S* J
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + `( f3 S7 Q$ A# k6 b
  305.         {; p% [3 `3 G% Z1 t- ?. R# b
  306.           file=(*p).second;
    3 z; N" Z, f& C" R
  307.           free(file);# s. T' n+ R* D3 _% |
  308.         }
    : J( F3 ~: y( c9 {+ C7 @: j. n
  309.         UpdateFile2.clear();2 l+ f( i# e2 _# e+ f5 Z4 K
  310.         UpdateList2.clear();, N! a7 i( r. L; P3 ~% h$ f% [7 L
  311.       }" \) n! i9 }7 K  q2 k
  312.       if(UpdateFile1.size())0 W" O+ J! l! ]+ V3 o, g! l
  313.       {
    & f: I) _- ~' `+ P
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# ~9 h( U, K7 L7 Q/ n3 |; @
  315.         {
    1 i* p, n& t; X3 Q0 H0 P7 u
  316.           file=(*p).second;
    0 d$ T7 W+ i4 k
  317.           free(file);$ z9 f* A, N; [% y
  318.         }
    * o0 l  [1 h+ g( Y
  319.         UpdateFile1.clear();- R, h6 A' O: ~8 p2 v  |8 ~
  320.         UpdateList1.clear();0 H" y! I7 k/ Z! o7 p4 R2 B
  321.       }! F+ |" V; r! e+ T* r7 ~1 e
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));  u) c0 D' }- a; Y( p  G1 b
  323.     }2 j. W4 ?' F" w( d( |; v+ w
  324.   }
      [, B( w& m) n
  325.   return FALSE;; ^( O. y- J" `/ x8 X
  326. }* |* ~- [+ C4 z7 X; X3 H/ F0 G
  327.   q" w7 v* E5 l
  328. void CRevAppApp::ClearAll(void)
    . r! w; @& t- w7 y
  329. {  g. I2 M% q3 @" I
  330.   LPUPDATEFILE file;& A: ]  U$ n0 ~! w* w8 C" r2 s
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 Z1 i& ~$ H' v9 T

  332. $ _: L$ a* J/ i, {( _
  333.   if(UpdateLocal.size())
    ! O6 h9 L  \2 W" e# \9 T$ h
  334.   {( ~% X( r4 r6 `* y+ v
  335.     UpdateLocal.clear();
    . G- U, L6 j9 x9 q8 }
  336.   }
    7 `3 N* I+ `, {5 d4 K3 |5 T
  337.   if(UpdateFile3.size())
    / j3 ]: [2 G$ Y
  338.   {+ W4 ^7 W2 r: ^/ E
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 R; N6 n) M9 K% L7 r! [
  340.     {
    ) t% p1 H0 k% [% ?: H/ y, A- e
  341.       file=(*p).second;5 N$ y4 I3 A: \% p; N
  342.       free(file);. M* E# O. [* ]. v7 Q7 n
  343.     }4 e+ l( X  Y' H
  344.     UpdateFile3.clear();
    ) P' U# e# o. d8 Y2 R# D& ?- y. k/ ?, k5 j
  345.     UpdateList3.clear();' a$ T7 o- n: X6 W  U3 I3 H! J
  346.   }
    . }: o0 Q, T) k) K5 ]6 Q2 V
  347.   if(UpdateFile2.size())
    0 a0 A' d8 }+ Y3 y/ z; y
  348.   {& x& O  O6 W1 o5 B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% Z( H8 ~9 G( j0 f4 K8 C6 C
  350.     {
    * D# t# \: }8 l/ B
  351.       file=(*p).second;
    2 w1 S8 W6 x! M- ?9 N
  352.       free(file);" y! z: V) O- k1 F+ C9 J
  353.     }# u* A' R9 B$ u: V( O; r: s: G7 x
  354.     UpdateFile2.clear();
    9 r" f, [/ O' a1 L) e' L$ A  E
  355.     UpdateList2.clear();
    , z) @! b$ K* ~9 a
  356.   }
    $ u$ O' `+ H) u' P0 n' r
  357.   if(UpdateFile1.size())! y4 R9 w3 @0 A9 q
  358.   {' U  X# d# F% _. k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" t" \8 K& g' U
  360.     {2 |  k( o3 e( o3 t8 |, g$ i
  361.       file=(*p).second;
    ( J1 T! A' M; A+ R  E
  362.       free(file);
    # F; [8 `& n) ]# @
  363.     }
    1 W' M/ E8 R. ], V$ q
  364.     UpdateFile1.clear();
    ! G! i' ]# Z% O( Z5 N' ]( f
  365.     UpdateList1.clear();
    9 C3 g* ^. C2 p1 b- ~' D# j0 J5 c
  366.   }
    * q; W# F1 }* h; v5 W- l
  367. }  # c; W& C# @9 I, |
  368.     S* W' u* ]8 d  {& }; J
  369. BOOL CRevAppApp::CheckLocalVersion(void)3 @0 e$ r. R4 ]1 |3 C- `6 H
  370. {  N! W7 c" ]4 P4 F) a; @
  371.   int c;( D0 w5 B+ q, P
  372.   LPUPDATEFILE file1,file2;
    5 s9 P: X5 n! S9 \- v
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;9 }3 v7 U* H* h
  374.   std::list<CString>::iterator l;
    ) O  K( n) Z2 d: u+ R% D+ J  Y/ e

  375. : N/ i, Q' t/ z; O  S
  376.   UpdateLocal.clear();
    9 w) Q3 T/ c' \+ B/ \
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);" `7 E1 y+ p( D) V1 P0 Z: D! o
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    $ A# r! e/ a( M* t9 _# M/ h) L
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    $ G; g' ]3 F5 d" Q: N
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);' |& ]* o! r7 ]1 Q; Y, Z
  381.   if(UpdateFile3.size())$ D7 o  N. A0 Z
  382.   {/ V: C7 ^3 x! H9 B+ N; ]) b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    * p# |0 s; i& i$ f' W7 |3 G
  384.     {) C: z0 F: E8 k7 y# n( j: P% a
  385.       file2=(LPUPDATEFILE)(*i).second;# m# i1 y; X4 [2 I2 K, o
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 U/ z$ B( A, m8 ]  A
  387.       {- Z& L/ t5 Z* u: y" k: E: G
  388.         file1=(LPUPDATEFILE)(*p).second;
    8 |4 v6 ?+ Z- S3 Y0 ]8 g' e
  389.         file1->vers=file2->vers;
    ! C0 x) p' x( p7 k( x5 J( b
  390.       }
    2 L/ G' p6 k/ {
  391.       else
    / x. l6 c8 Z! D3 r
  392.       {
      _5 ]+ |4 {+ ^7 d' S, o( _
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 |4 Y6 Z: t! n/ X7 Z( }1 v2 D
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    * k" ~4 A0 T  c- r1 b0 `. i
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    3 A) K2 O6 |9 f1 ]
  396.       }% D9 @" _: F1 S6 X  n  q) t( t* u
  397.     }
    3 m* R% H6 h* Z: x
  398.   }
    : d) q# q) N1 C' _  e% o& {2 ]
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) }7 k0 _' h7 ^5 W
  400.   {
    ! c. q% z  \9 s' Q" [
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 [  |' B4 q: L4 {7 q( t  r4 G
  402.     {: i& V7 L$ f/ u8 _7 L9 ^; U+ l
  403.       file2=(LPUPDATEFILE)(*i).second;0 X9 e  k5 F  d* H
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" X4 b" u" p; Q/ Y' g
  405.       {0 v3 [" g; e1 w/ b+ r& H
  406.         file1=(LPUPDATEFILE)(*p).second;
    % v( s1 l/ g$ }* K" X. z
  407.         if(file1->vers!=file2->vers)
    & t: _  a: R4 U0 u0 m% }# @  u
  408.         {
    9 H( E! u& v' u3 N" Z, R: b0 {
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& b! C$ a) ?1 ^8 q( `
  410.           c++;
    " |3 ^, T( l4 [1 k1 J) ~5 I
  411.         }2 J9 v# i. Y  |9 @$ {4 X5 p
  412.       }: ?4 h0 P8 z* G; Q, A! f
  413.       else$ k5 `4 f- y7 [: a
  414.       {3 Q& e; {( I$ X+ e
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * H) M% Z( @; c; |: L' J% c
  416.         c++;
    # W& S0 u3 ~, H. Q( f
  417.       }' h' d% s! e$ y  J* l
  418.     }
    ) V; ?. S% z. s. C
  419.   }
    ! s8 Z1 w  {  u/ a5 I
  420.   unlink(".\\DownLoad\\update.txt");
    , Y9 W  T2 y+ ~$ u/ h
  421.   if(UpdateLocal.size()) return TRUE;
    # ?) }+ v* U( K2 X* E2 h
  422.   else                   return FALSE;
    3 K2 @. L3 o% N6 E
  423. }# H0 c0 y6 }' r4 m
  424. / Y7 I4 i) d1 x1 I8 @* F, J7 y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    0 h  I8 I1 m+ w4 [3 ~* j  j
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ! x) `  C, l& p
  427. ) D+ M. V- `! B* c- N" z
  428. 2 M% v2 A3 @* t. p# J$ D" P

  429. ! x; v. f* I7 I2 ~
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)9 y; _8 I* ~) |+ E
  431. {8 X) ^+ y8 I/ r+ {4 w1 P0 H2 F% ~6 z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    3 h: f1 n7 l; T5 Q5 Z# K0 h
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! w- w4 n7 v& H7 O
  434.   {
    8 o0 Q( v1 K# A1 d4 H
  435.     char szLanguage[50];' O2 l2 y, D+ d0 z$ p; \6 Y9 ]& O
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, D% p; W- D, m0 x3 }
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: a/ y& O3 L. U& J1 f! L- U
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # l2 }7 o2 E, S
  439.     else                                   m_iLanguage=ENGLISH;9 C3 S1 |* ]2 O. ^# M  m: e
  440.     char szRegister[100];* }, p9 p8 v/ [1 s; P3 F( a
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 W6 M5 j8 {0 Z! y3 Z+ n: O
  442.     strRegsName=szRegister;
    % \4 Z& I$ H/ d* e( Q  t; s
  443.     char szPatchURL[100];
    ) b+ A0 ~, O! Z9 u) y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) U- W1 V4 q! ]8 C" u
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 \# i7 M( M% L8 U/ b. p" x5 q
  446.   }
    # o9 J4 `5 I8 ^  g( S
  447.   else; b' B  D2 A+ v) u! K- Q$ [5 u7 _
  448.   {) g/ u' Z; A! U
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ; T( b* z' L5 c4 F$ l
  450.     strRegsName=DEFAULT_REG_URL;3 Q6 N4 b# h1 T  ?4 _) e6 g
  451.   }0 g& f! M( V7 G5 N
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    4 g& w4 C0 w1 G
  453.   {
    * w1 b" h( x- v# Z: j' ~3 T; t& c
  454.     char szIP[50];& F+ c% @* m- q* V' b( [& C
  455.     char szDIR[300];/ v$ ~! V$ }: R5 I
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; R) d0 E, X7 S+ g5 |
  457.     {" @! T! A9 P' `% j) t$ U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");, o# [1 m# P' V$ z) ^
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    $ J9 F6 l4 a+ X
  460.       strHostName=szIP;$ A9 M  i. d) y1 s  {
  461.       strHostPath.Format("/%s",szDIR);
    . z( D! f! S% V
  462.     }2 P8 o0 e9 Q/ p7 V5 }( d6 |+ b, K% \
  463.     else5 O- t0 T# B) ?
  464.     {
    1 v2 Z8 F  t8 X: ^0 @2 h7 E/ g
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      G' V- ^. j" H& ~9 R9 b- b
  466.       {# T8 u" ~8 h- B
  467.         char szLanguage[50];
    0 x  N+ s7 g# m; \" }
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 @+ y) a- c1 s% A
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ W( A" G; A* B9 f
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 ^4 k* F# Q1 I" m1 S' ]5 L! ~) h* h
  471.         else                                   m_iLanguage=ENGLISH;
    # k6 b. R( Z; u5 Q* Y* P
  472.         char szRegister[100];" h9 E* I* P& D& t( M; Y" f  P
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & B, t$ z4 u' _( T7 b% n
  474.         strRegsName=szRegister;
    7 c3 r9 ?& j- w' O
  475.         char szPatchURL[100];
    " D" G: l  s# @" a3 }1 U) H3 l
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! m9 N+ t! |% u
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ h/ O5 |) B& ?  F1 t$ i: x
  478.       }$ ^: Z+ t4 ?* F, i( L
  479.       else7 V" K# P/ m  v/ G/ ~- A3 t+ K
  480.       {
    1 T# i6 X- a0 h
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 q5 K% d" ^" |8 J9 ~2 z
  482.         strRegsName=DEFAULT_REG_URL;
    . ^5 U. ?: k- ?6 g7 ^
  483.       }
    6 U* ~' p" }5 i) N
  484.     }
    5 m/ A& k* s! Z& I; q1 Q# ^
  485.   }
    - X2 p6 }7 x7 q" f5 \8 y
  486.   return true;
    ' U1 _* E9 [. ]; Z( J6 h  N2 \) h
  487. }1 D4 s# N1 B, z( [
  488. 9 r. y( e) K# @5 Q5 e
  489. #include ".\ZLib\unzip.h"2 C, A& D) \9 r- _5 }6 T
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( o4 N5 J! H! t9 v& [
  491. /////////////////////////////////////////////////////////////////////////////
    7 V5 Z; d& G- |/ g/ `1 l7 J
  492. // CRevAppApp initialization+ w0 I; K/ i$ b. F4 K' b* n+ u

  493. - f* g7 |1 R! ?- U4 Z
  494. BOOL CRevAppApp::InitInstance()
    . w4 v) A; i8 \8 C# q
  495. {1 Y2 V9 m/ D9 @/ d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    & [! V1 r! [6 W

  497. # B( Z3 U4 @& a9 D4 f( i, V6 |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 f4 P; b& ?- g) {5 e: W
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    9 M( J0 C0 m7 ]7 n. T" _
  500.   {
    8 h- }  W3 s4 `, R) d4 s
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");5 u3 S3 t1 S6 p: j
  502.     GetPathFromFullPath(szPathTarget,szPathSource);6 [3 K; i' z7 f% R1 f+ p& F3 c/ ~
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    - G: d; o9 j1 }0 h3 Q% i
  504.     {
    1 ]. t1 O" q. j9 s) g/ `9 z" S% j
  505.       strcpy(szPath,szPathTarget);1 v& T- x. f" a8 O3 s, _
  506.       SetCurrentDirectory(szPath);( S. d, l/ ]7 ~0 i$ U
  507.     }5 j1 C& `! \3 C4 m
  508.   }
    8 [$ j5 f( x$ o  A2 b8 @. ^
  509. #ifdef _DEBUG8 b) t7 z: Z3 O' T' c; z- R: T! S
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  g& b3 X7 ]2 v8 M4 K, I
  511. #else7 V( [# ~0 r3 ~' m, r
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); q: s  X5 H/ d/ @
  513. #endif$ l/ I# w) n) U9 B; _$ U. o
  514.   {
    . P" C3 w3 M% ]1 V( N, T
  515.     char tempFileName[MAX_PATH];9 b4 l7 `9 O; N% P! E  J( Q/ W
  516.     strcpy(tempFileName,szPathSource);
    ; B7 \$ b, V6 ^" Z: D  G
  517.     tempFileName[strlen(szPathSource)-12]=0;) {1 f1 k9 j! V+ J
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    + L" L& f" n& K
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);# E0 w5 x' D+ Z' a- X; q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    + q! l3 d" I6 p1 o* O0 H( a- R" @; U
  521.     return TRUE;
    + n3 I) B- N) l
  522.   }
    1 Y* r" S( v/ Q3 h
  523.   // Nuke 0118: Delete run.exe
    7 v2 s  E# U  h: U: ]
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );/ S8 e# U$ F! M. O' N
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ; ^+ Q7 L; q$ \
  526.   if(!ReadCfgFile("Config.ini"))
    ) K$ s8 \. E* O, w4 a4 b# H; T- l
  527.   {
    9 [$ s6 `3 o# E9 P9 Z2 i
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    3 M* `8 d2 {1 _
  529.     return TRUE;
    3 A, O' r6 `# o. a8 t3 k
  530.   }8 a5 l/ J$ V  |0 [+ T
  531.   HANDLE mutex;  f  ]& i' E4 o; J% u, C5 K. u) A
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    * g5 Y% I+ T% {  v
  533.   {% j7 d; Q4 b; |9 H0 c+ ]7 R% A6 n) K8 u; j
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    . b7 x4 a( W$ g; v" f  a" N( W
  535.     {
    ( P, n: \# z8 _! F% j2 ^) O
  536.       CloseHandle(mutex);
    ) ?& E3 m7 t! [! a$ u
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 a: D! b4 m* A3 ^  v" H- N
  538.       return TRUE;
    3 v( U& R- y8 ]
  539.     }5 `1 o" X) h: v
  540.   }  
    / w: W! q/ G  j: h. ~
  541.   CloseHandle(mutex);5 m8 [* P* u5 _9 Q( i
  542. 3 j7 H7 @& v" z3 J2 C
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);6 H; k. k5 K% h8 ?9 v

  544. * @0 I1 I4 y, i8 Q- b
  545.         AfxEnableControlContainer();( l) z% I. Q" ^1 T6 v% m

  546. $ z4 ~6 y. v, i  H* X  U
  547.   bCanUpdate=FALSE;2 Y1 n" o- L  R6 O2 h4 Q. l
  548.   dwStartUpSteps=1;
    0 I1 o* ^) Y7 D; U* l
  549.   dwProgramState=AP_NOTHING;* U( ]$ v  t$ U

  550. ! l+ H; E+ U: v' n& ?3 z- ~/ h
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    4 G' Z9 x: W! D, Y, f+ i& h5 Y
  552. 4 s1 Q$ @" }, m  ]
  553.         // Standard initialization
    ) J. D8 Y" \4 ^: q8 u' P
  554.         // If you are not using these features and wish to reduce the size
    3 B; x, }) T0 U0 d7 w  D
  555.         //  of your final executable, you should remove from the following
    ; h) p' V8 N) T. |$ y
  556.         //  the specific initialization routines you do not need.
    + C% b3 p- E7 e/ V2 c  B# @" F

  557. " @& J) f) U; e7 Y6 b# U' N1 f: F
  558. #ifdef _AFXDLL) G3 V" N8 r; y1 _) D" s. |
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    9 O5 d: j  u/ Z
  560. #else' N' `+ l" n+ g
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    & A  x8 U, N; A0 h
  562. #endif
    - g" c) Y! a% Q6 z
  563. ( X# V$ c2 j3 U+ v: \
  564.   dlg=new CRevAppDlg;" w7 Z# U: a- p
  565.   dlg->Create(IDD_REVAPP_DIALOG);9 T( ^1 }/ w) h8 J+ y0 g3 Y
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    - ~9 s" X2 Y3 e' b
  567.   m_pMainWnd=dlg;
    1 q. O) K4 q5 p4 j
  568. ! T2 X; |# V" C$ T9 `. t8 \  r- j
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);4 Q$ W+ P( h' a# @! x* O+ }
  570. , u6 D; s0 a4 a+ ~1 Z$ w
  571. //  GdiplusStartupInput gdiplusStartupInput;
    2 Z& J1 }3 p0 |: j" }: [4 P+ I+ n
  572. //  ULONG_PTR gdiplusToken;
    ( J9 n/ |5 M) w9 q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    " h5 N* o4 Q$ c

  574. & o% c* H8 p3 K6 X2 [) L! k3 }0 D
  575. //        CRevAppDlg dlg;
    / Q7 \% b$ l6 B
  576. //        int nResponse = dlg.DoModal();
    . M, p( ^4 r* u2 F
  577. //        if (nResponse == IDOK)
      V& `' W* r- R& N' p- d& W
  578. //        {8 f" S* a& r  e. t# ?" j
  579. //                // TODO: Place code here to handle when the dialog is
    . e8 t* J+ m6 {" O( a
  580. //                //  dismissed with OK0 Z. b6 c2 O* U/ i  K- a
  581. //        }
    . A& P0 p3 \, |+ A4 x( x+ s& m6 j7 ^
  582. //        else if (nResponse == IDCANCEL)
    3 G  A% V/ g' t& [( ]
  583. //        {4 B& N5 V' w: K5 G
  584. //                // TODO: Place code here to handle when the dialog is) p0 I  i( r& w# }* S0 u9 `6 p
  585. //                //  dismissed with Cancel
    ) c0 T7 Y- T/ s' }$ p8 W( w) |
  586. //        }
    * b, ~* s- G2 V' ^7 a) Q

  587. % Y3 G8 i4 U. q0 \0 [; r
  588.         // Since the dialog has been closed, return FALSE so that we exit the
      z% K+ p9 F7 s9 f& `
  589.         //  application, rather than start the application's message pump./ |  ?( p8 n5 l% c; N& N! R6 O
  590.         return TRUE;1 B2 q2 s& w; `# z7 D/ Q
  591. }
    1 {; ~! |. Z5 O$ ?

  592. + ~! y* \# e7 V; T9 G
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    0 Q0 i+ d  Q% b/ b# K$ g
  594. {/ Q. p9 n+ K$ S. v6 q$ M
  595.   int i;
    . T  V" t8 a7 i, G- F' L
  596.   char *szRet;
    - g2 n& ~' Q6 l: U
  597. 2 a7 h7 N# ?9 P
  598.   if(pSource) { itoken=0; sztoken=pSource; }' ]' x$ F' |# W
  599.   if(sztoken)
    : O0 T6 ~3 c0 o2 k) W  a
  600.   {
    * U: I- p+ ?) U4 t- d
  601.     szRet=&sztoken[itoken];
    + L! N" ^' P% S/ G9 }
  602.     while(sztoken[itoken])% p% j2 _+ z2 L# Y
  603.     {0 k/ ?5 q5 d8 X/ W+ a; Z
  604.       for(i=0;i<(int)strlen(token);i++)3 Z7 D" U' n# ^9 `
  605.       {6 ?( f; V  v$ j4 x8 x
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])+ J+ i/ a- I8 S# H4 t( T* H
  607.         {
    + H  V* i3 J, b  k% Q
  608.           sztoken[itoken++]=0;
    5 W2 p, l# o# @% S3 _: |
  609.           sztoken[itoken++]=0;
    1 m2 Y! s; i. `8 K" N' S
  610.           return szRet;
    & I; L" u  C+ \8 H) u
  611.         }0 B/ A  F1 V, y- z  ?& B  N& r
  612.       }
    ; l- n# |9 G8 [6 I1 G+ H
  613.       itoken++;
    " X7 Y( r- d$ @5 e4 I+ P
  614.     }9 p. O0 P: D5 Y: D, z
  615.   }* e6 h# O% ]/ ]) M: p9 J. Z8 m
  616.   return NULL;
    + p( c' b/ m: O3 b
  617. }4 a4 J/ @) K$ `. w3 s3 _& k
  618. : R1 [( F  U! ?1 A$ ^* k
  619. void ProcessProc(long Total,long Current)  M4 I) v. S# F7 W
  620. {
    $ _9 i7 t2 L, y- Y
  621.         MSG msg;. o/ A& Y$ b) I3 n5 J2 i
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);3 Y: s7 m/ N) T- _) @# G& J
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));0 ?% q$ f9 U/ H% ~% @3 a
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))2 ]( C- ^2 i  U$ Z! }, e0 M5 B
  625.         {. M  Z6 W) S7 l
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - L+ C$ l$ O& h" q0 e0 Q
  627.                 {
    5 b$ E6 ?0 P2 e5 I( X7 O1 e6 j% U
  628.                         return;! i2 J' ~- [' R' _/ E: Z1 \
  629.                 }
      n+ `* I5 C* `6 _( C$ R7 e' }0 ^
  630.                 TranslateMessage(&msg);3 l) {$ x8 j6 J; [8 [5 D5 T
  631.                 DispatchMessage(&msg);
    - z1 b* y- j, x- `3 I0 S5 g
  632.         }       
    5 e3 N+ f* `( Q7 X* ?6 I7 b( @
  633. }9 w' ]) P. N- M9 l8 o' y
  634. 5 N2 C7 l  ~% I) n
  635. BOOL bFirstChar=TRUE;, K" E/ M  i" o' n! w8 t: ]
  636. 9 i$ P  _- X9 h  W) `, H
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    * p. ~4 g3 F3 O
  638. {
      h) G. l" L( s5 p, b8 T- g2 ]
  639.         // TODO: Add your specialized code here and/or call the base class7 v* R- \! E$ @' k0 Y5 ?, V
  640.   switch(dwProgramState)
    0 p* z( J( c. L4 ?
  641.   {
    " Q! Z5 A5 @4 j" W
  642.   case AP_NOTHING:
    " R8 b8 E  f3 k$ H& A
  643.     switch(dwStartUpSteps)
    5 \/ I  h7 U. m, m% L; E" j
  644.     {% z/ u9 n; T: w
  645.     case 1:
    * v; y" ^; x/ n" m
  646.       {
    6 \  j: r2 e5 B% ]' Z
  647.         int i;1 @& L# |, P, I8 a8 B
  648.         CDC *pCDC=dlg->GetDC();
    9 |: ^0 W# \* |9 Y, J
  649.         HDC hdcwnd=pCDC->m_hDC;
    : I( R" `- `9 E
  650. //        Graphics graphics(hdcwnd);8 m3 B  S0 e3 x- _! K! C
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    $ q6 J' P2 g# u3 i
  652. //        INT iWidth=bitmap.GetWidth();
    ) T- f- ^, p( P( A! L: m: h: s0 ?
  653. //        INT iHeight=bitmap.GetHeight();  v% H0 h/ Y% r, D$ M
  654. //        Color color,colorTemp;
    : E, K) v9 f, D% s& V" ]+ A
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)8 K( D: T; {7 F+ M. V$ {9 X
  656. //        {- x  c! u$ c- O2 R6 s) X
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    1 }; [  ~* I/ A% U* R: `0 z* _# A
  658. //          {
    & _) w% S  _/ Q' F; s3 K- Y1 u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ) i# A8 e- H7 T5 F+ i8 A
  660. //            colorTemp.SetValue(color.MakeARGB(' A6 N, h' e# g  S/ T" F
  661. //              (BYTE)(255*iColumn/iWidth),8 n* h* M* H' Z( @* ~, T/ Z
  662. //              color.GetRed(),- R( S+ l, g8 t! P  `% {
  663. //              color.GetGreen(),# U# g# c. ?7 z1 t, f) T
  664. //              color.GetBlue()));0 [3 c6 x1 {7 L, a4 \% k6 E2 x! m" I0 O
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- ]8 m9 i5 w- D3 s7 Z
  666. //          }
    " v  n/ c7 l1 F" T6 ~4 g  l3 K( s
  667. //        }- i! ^$ c/ y' J/ \- z% K4 v
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + @" k/ p+ e4 Q1 H! Y0 o* P3 _
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) ?0 z) V: K  h1 @5 k
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ( t) _; I6 K4 ]( {" L
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    6 o1 g' i, i1 d* {6 E# v
  672.         for(i=0;i<240;i+=8)" ~* o$ {) Y% S2 X% J
  673.         {4 s. i: ~& N: K: a$ p
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ Z8 k( h' M! ?- U
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : T2 l7 D& C; {! H8 q, C3 d
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 ~- j. h! U- J( ~. U9 |
  677.           Sleep(33);/ {! C9 h! y; J6 C- J3 O8 @
  678.         }4 Q. I% s. I: y: g
  679.         Sleep(1000);* R4 f9 E% L% O  W: t) u
  680.         for(i=240;i>0;i-=8); U  M' M  G& r$ g
  681.         {
    2 _7 B/ p- I2 n$ ?9 _
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 o$ ^# z1 r$ y
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 _& s0 N5 V( F/ T5 x) S, A
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; K- d" d) g& F' h9 C9 O2 a
  685.           Sleep(33);
    9 ~8 `/ K" K& f6 C& G. K/ s
  686.         }' k# X9 d( W2 D8 X8 ?" {. d, e
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    9 A! G  |1 Z& @
  688.         dlg->ReleaseDC(pCDC);
    ' O, J4 z) j8 i/ C+ K0 d* }
  689.         DeleteDC(hdctar);
    4 R7 s: h, l5 Q# |+ \' P* A
  690.         DeleteDC(hdcsrc);
    - @; y- q2 T% q7 `* f
  691.         DeleteDC(hdcorg);
    6 e8 `3 f2 k- B+ f
  692.       }  G) [) a3 N4 b0 }. g, A$ z2 l
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);3 d0 l  P- d& H9 Z+ [1 I
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    - _# c9 ?$ _2 p& M* q2 `
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    % g: F8 L7 Q$ E  y4 K
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 P7 r9 `$ l9 N( [' v3 n  D
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 h; ~, d4 A' N$ W/ i8 x
  698.       if(!Dn.Connected()); H6 Q* I4 M9 `+ W- `
  699.       {
    / \5 B+ o) ?. e0 b
  700.         dwTotalFiles=1;- r  v( l1 R( x8 ]0 d
  701.         dwDownLoaded=0;
    / c6 h! }+ S$ Y9 C
  702.         bSilentStep=TRUE;
    ! M4 ~" w/ D4 Q" i3 C: [
  703.         bCompressed=FALSE;
    . T* Z5 o! O  ~. O. A! r
  704.         strExtLocal.Empty();
    * ?# L7 _! b# |4 H- |. z! u  k
  705.         strFullName="readme.txt";  ^9 h1 \( O/ z5 j- b# k" g7 G1 e
  706.         dwProgramState=AP_CONNECT;- L; W& R. \  W
  707.       }7 W6 k- {6 J( r( E% A, V8 _
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();) ^" {+ q8 r: J& Q6 t4 y/ p
  709.       dwStartUpSteps=2;3 R, p& s$ M: R* z+ s" ~2 z
  710.       break;+ `2 `% v# o# d
  711.     case 2:7 e( V# x$ Y% O0 R' }9 r
  712.       {
    9 h) X, q6 w9 H2 Y
  713.         int iEOF;6 R8 }+ S; |" `; \! `/ k
  714.         FILE *fp;9 z1 a% V: ?8 f# Y  i: b4 y" C* s
  715.         char szString[512];% d! [. t7 T2 u6 ?  a/ d, O
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    / J2 D7 e9 C# Y9 J5 k. L$ @/ O* E
  717.         if(fp). m' T+ z2 P( s, U
  718.         {
      \( M  W$ \- H1 _0 ^
  719.           do/ _% H& {9 u, o2 @/ `
  720.           {
    $ s7 T: e! C! w& _" e( A- _/ h
  721.             iEOF=fscanf(fp,"%s",szString);& }# H3 U2 v- \% [' |- [) h
  722.             if(strlen(szString))
      F8 P' |' ~9 Y) S6 o: C
  723.             {
      Q; W: G" h1 M# _
  724.               if(bFirstChar)+ P& C9 ~: b- |8 l% T0 X6 M6 x
  725.               {
    - A- A  ?# F: ]* H" _8 I4 H7 K
  726.                 bFirstChar=FALSE;, b. [; Q9 X- j3 \9 x
  727.                 bConnectIsBig5=FALSE;
    # P2 ]! M  B2 g+ f$ n# i4 X! C3 L" m& ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    3 K) [! u5 |' b  F4 s/ M
  729.               }
    6 u4 X" n, _- q8 }% i0 K% M
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));# \' B! w8 r: u( X& _: @/ s, x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));* K$ F) F& u- k! c, c
  732.               dlg->m_ListText.AddString(szString);
    ; h' R  W" i8 F4 N5 p2 b! [
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; P9 t- l; t4 P, N( r% m% }! B
  734.               *szString=0;
    " A/ O; e3 _6 R+ s% I6 X
  735.             }$ _3 c8 g2 R: c& ~1 D/ I
  736.           } while(iEOF!=EOF);  U5 ~* k" |) l2 ?/ m* A* {. f+ X
  737.           fclose(fp);
    ' I/ P4 B- V' r1 M/ u# \
  738.           unlink(".\\DownLoad\\readme.txt");8 `* H, m$ @( m( A) |) Y
  739.           dwStartUpSteps=3;! q7 m1 R& Z; n# H: `
  740.         }
    ' I# D* i0 _( `5 N# v; p: A) P+ }, i! P
  741.       }
    4 ^. T; T, K1 w7 W3 `4 X
  742.       break;) f2 u( o) I/ S* k5 {' Y5 J
  743.     case 3:
    / W, W: Y3 ^/ u# n# }
  744.       if(!Dn.Connected()); L0 L/ V$ B- `0 I, U; _
  745.       {- z5 e: }8 \4 F, W
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    5 ~/ D9 W9 W/ {) C! h& X. {3 e# a
  747.         dwTotalFiles=1;" I4 Y" V5 J; r
  748.         dwDownLoaded=0;
    8 ]; ~2 E$ B5 a8 B
  749.         bSilentStep=TRUE;
    % i  F4 S+ b8 z& q; H
  750.         bCompressed=FALSE;8 r2 |0 i4 e* r0 T/ N6 \  e% X6 W
  751.         strExtLocal.Empty();
    6 A, Y2 n, z% d# ^/ u% \
  752.         strFullName="checkversion.txt";
    1 B6 l. N8 \9 [0 C4 L
  753.         dwProgramState=AP_CONNECT;
    ( K9 e" e* ?4 p4 s" `8 D. e7 q
  754.       }7 ]: x+ Q) j+ `: H( F  C
  755.       dwStartUpSteps=4;
    * z8 ^7 O8 l! V7 S4 Y3 W
  756.       break;
    / S+ f/ U) h" s& A/ v, t5 d
  757.     case 4:
    5 g" U/ r) J% |
  758.       {) ?; c4 m  _' X' G- k2 D8 c* a' `4 [0 i
  759.         FILE *fp;
    , g2 @) w1 j: U# n/ E- ~4 k8 H
  760.         char szString1[128];5 C# |* G+ Z" i( v) T
  761.         char szString2[128];8 ?- V+ Z' ]$ u6 X) J3 Q4 ?, j: L
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    3 ~5 y# ^* n8 d
  763.         if(fp)
    * Q5 p$ z, z7 Q( S# i
  764.         {
    # U2 {3 m5 ?! Y, E
  765.           fscanf(fp,"%s",szString1);
    ( ^% ?* `0 Y  {) k
  766.           fclose(fp);
      T9 f, g" T3 f; y3 v+ D
  767.           fCheckVersion=atof(szString1);1 n! q4 f2 V0 h( {
  768.           fp=fopen(".\\checkversion.dat","r");
    8 S0 e8 x0 T# _/ A
  769.           if(fp)' ]3 k( r  i- o, D6 ]6 z
  770.           {5 b. N3 E1 s: ^8 H# y; ~* |
  771.             fscanf(fp,"%s",szString2);9 z/ _( g- m: w3 w3 r
  772.             fclose(fp);
      a& x3 _( K) ^) O9 d7 g3 y
  773.             if(atof(szString1)!=atof(szString2)); _* s, J/ `* O: O' Q# I5 [( |
  774.             {8 ?8 o, Y% n$ f
  775.               if(!Dn.Connected())
    ( F# X* r* y! m* ?# s5 ]
  776.               {
    % h% k3 J3 `4 z
  777.                 bFirstUpdate=TRUE;" B" J1 T( N% }* |0 U! z5 z. j" r
  778.                 dwTotalFiles=1;
    . [1 `" m$ u9 O* x
  779.                 dwDownLoaded=0;
    ; d: i) p/ X( R0 x9 S
  780.                 bSilentStep=FALSE;
    4 q! u+ Q! C4 Y& ~/ F0 t4 h* Z
  781.                 bCompressed=TRUE;
    ( s- R. O. z' O0 g8 y" T: P  R
  782.                 strExtLocal=".\\DownLoad\";
    5 P' s1 U$ `( H, B
  783.                 strFullName="update.txt";  l+ O7 s# v! M' [+ ^: g
  784.                 dwProgramState=AP_CONNECT;
    , d  }+ N/ ]0 M% {
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  ?9 R7 q( b% p& G3 n/ C; Z/ l0 t5 R
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 Y! a/ |4 O1 U/ [- s
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");9 D% T. t3 D8 j& i8 ]$ h. l* \% F7 O

  788. ' K4 e' B# }8 F1 M
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & z" `7 s3 f  u, ?' O7 L% O' j
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    * |6 f$ a: L8 Z; b
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 l5 k) \8 K( Y  A3 p
  792.                 {
    1 x' ~; w' F. z3 ?2 g3 d9 _/ j
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ' _' q2 y9 M9 A5 C
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");# A$ H( S' O/ e& r4 \, r
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    / s0 a! c  ^( V/ {: X. s
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 ~- F& U: F" W8 a* ~
  797. 1 G& |6 q& ~/ h
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . D  D- d/ [& x3 @
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . g; G, J1 X. q
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");+ [# w0 _0 \. w+ \
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" I! b" m  V% P8 c4 @
  802.                 }
    " w) e( {/ ]1 w
  803.                 dwStartUpSteps=5;$ y% l5 W2 Q/ w7 Z; U
  804.               }' ?6 ~3 h. p, ^6 k( Q! S9 _8 l
  805.             }  H+ S9 e1 F5 U4 B& g8 Z! o" z
  806.             else
    3 z. y1 v9 r9 i' \( a- T0 S
  807.             {. t9 Z5 Y& H6 {% t, r) `
  808.               unlink(".\\DownLoad\\checkversion.txt");
    5 U% F* Z; L- l3 i  F+ G9 x% K
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: Y0 h3 d. \* T( k' |& P$ ^$ h+ |9 v
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ( X8 G$ q# w7 P
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");3 f7 ~6 q- d1 `7 r" x0 j; M

  812. # i- h$ n$ r8 @( V: {
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / v* `$ n" J! w' K; T
  814.               dwStartUpSteps=99;
    " U0 o/ c* b1 L1 c! D8 M
  815.               bFinishUpdated=TRUE;* N7 Q: F- I8 y0 P  j3 m. Q. z/ v
  816.               bCanUpdate=TRUE;
    " A, f3 f3 w0 [" l! s6 Z+ _8 \
  817.             }  p# Y/ X' u' q4 n% g2 l
  818.           }, M( t# x. b4 A) l% b
  819.           else
    ! P, p% M* K( B7 J/ b5 I
  820.           {
    / f0 S& `7 d# M1 ~9 W: S  K0 k
  821.             if(!Dn.Connected())
    - \, ?% I; u# T/ Y& J* b! C  j+ O
  822.             {
    $ J" H" I, Q4 [+ n0 s' s" ^9 \% k
  823.               bFirstUpdate=TRUE;
    2 R* k# P3 y5 }7 o$ C
  824.               dwTotalFiles=1;
    . o3 ?$ [' ~5 U) W- Z
  825.               dwDownLoaded=0;
      z5 }0 _  s  j3 e3 _
  826.               bSilentStep=FALSE;/ {/ k. s- a: y9 J
  827.               bCompressed=TRUE;
    $ }5 n6 x3 S2 w. m
  828.               strExtLocal=".\\DownLoad\";  T8 u- W3 {* H, [3 r- `
  829.               strFullName="update.txt";
    6 X% U' O! @) a- C
  830.               dwProgramState=AP_CONNECT;
    1 l* U+ [, `. B/ F4 U/ D
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' T0 h6 @" m0 S' S7 H9 L4 N; f
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) t& d* d8 B4 q7 P5 H9 B& \/ o2 ~5 f
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
      f  D9 B: ?- ^  I3 T6 E) G; X* z
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( _) m* p' R" B
  835.               unlink(".\\DownLoad\\checkversion.txt");1 n* R" U3 L# k2 F* g) m& x5 z$ k
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
      Z5 w9 a* X: O% R* f8 o
  837.               {. z& b" i# p/ ~6 C) p0 Y6 q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");+ b( Q4 J3 f/ a5 R( d
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");. p  ]7 @+ c+ `  Y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");. x: [# r0 R/ r! f4 Z4 f1 ?% g  R
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 f0 V6 K; S9 ]8 S9 \  R- y
  842.                
    ; m5 A5 h! f; R) x5 I
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 s& n/ o) c1 L. ]* }9 a
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, @; t' b3 r! z6 T) L
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    1 ^3 X: V! o% v, U
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      L7 f& K% x( K9 ?
  847.               }
    2 v9 ?4 x, y$ \4 s+ j3 T
  848.               dwStartUpSteps=5;& \$ J" _( N# i- Q$ e
  849.             }
    # p9 C3 [1 M1 |( }8 J
  850.           }/ b) g: E8 \6 [4 i. P- o" y
  851.         }
    $ C. _, S6 }/ k2 P. H
  852.         else, H: p* c. n% }9 Y
  853.         {
    ' z+ m9 r% s; ~5 l+ x/ y; C9 @( a
  854.           dwStartUpSteps=3;
    4 f* g- k$ ^( F% W' f
  855.         }
    . |- A3 y9 D0 d9 |
  856.       }
    ( w% k! e0 N* r6 R: f6 D0 X' ]
  857.       break;
    ; f& @. x4 h# w4 C6 U1 }
  858.     case 5:
    - B6 G! i$ s/ b1 M% E. y
  859.       {, {0 [3 k! y* S
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ) `. o$ W0 R* H% U
  861.         {
    ) ~% J9 `! J, C, R
  862.           int opt_overwrite=1;, T0 n. b6 C3 t. p  Z
  863.           int opt_do_extract_withoutpath=0;" ]: t% K. z6 B- U# e1 L1 Q
  864.           unzFile uf=NULL;1 [. ^" l8 ]/ f. v# l8 n# H
  865. + n$ o) ?6 c6 ?) @+ [! w8 `
  866.           uf=unzOpen("Wsa.zip");
    5 {5 J6 p/ i3 U
  867.           if(uf)
    2 Q5 u2 K& H3 n' o3 R
  868.           {5 V: Q4 A4 o1 t8 `) u0 \. H
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);2 u' r, q: g' y+ o" f# W  O/ V/ o
  870.             unzClose(uf);+ x; h+ i/ I9 A* ?0 H7 ~& g
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ! E1 g8 h5 n( U; a' ?: R& I
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    0 R3 x" X# M' y
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    : c9 w7 @: U: j/ t; u5 i/ O
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( t  w% N: T2 [$ E: ]  {. ^/ D' x
  875.           }6 i, Z: m1 d  x. }' Q- ^, w$ t* m
  876.           DeleteFile("Wsa.zip" );
    + Q# D7 ^% q; F" V9 c. y
  877.         }- h! c+ Y) X' ^, E4 a

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

. p0 L/ ^! c/ b4 U& G( I7 k
2 N0 _' G9 {$ l& B% o

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-26 09:40

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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