CSUpdate.exe源代码

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

" Y  J# X/ c5 I4 d. _
  1. / RevApp.cpp : Defines the class behaviors for the application.
    : s& c6 w" X8 q0 a# A) N3 y5 M* c
  2. //% z$ O7 ^( r+ k  b
  3.   W3 c+ O7 h  c# \" |
  4. #include "stdafx.h"; ]0 V; B; J8 w. ^/ F, A
  5. . f  v8 ^; G7 {& u
  6. //#define UNICODE
    2 @1 R4 J- f4 g
  7. //#include <gdiplus.h>" w! f+ a% E" T7 H9 W7 C& ?& @
  8. //using namespace Gdiplus;
    / v6 G& S. C* G
  9. & C3 P3 w$ n; G2 k  V* I. J0 n
  10. #include "RevApp.h"
    $ q. h1 P% c. }- X9 c
  11. #include "RevAppDlg.h"" x0 b  d: i) V6 _0 w
  12. / M, k/ ?2 G# ]# n
  13. #pragma warning(disable:4786)
      s9 l( D% O/ e% g
  14. #include <map>+ v7 M4 I# X; [; p9 C( e
  15. #include <list>
    5 T2 I! S1 n9 d7 I
  16. #include <direct.h>1 H' u6 S1 K& ?9 r2 C# U) u2 Z
  17. ( a' N) |& c3 ]; R$ [$ u
  18. #ifdef _DEBUG. g7 O+ U9 g0 F7 t' a
  19. #define new DEBUG_NEW
    3 u% z5 a$ e5 D$ k5 D. ^$ Z
  20. #undef THIS_FILE
    7 Q! }  N! Z6 F5 ^* J/ F
  21. static char THIS_FILE[] = __FILE__;. G- U4 j. S% }2 V/ b' ^% s- Y
  22. #endif9 F: R+ S- z. k! `8 w2 }
  23. #include "SkinResDef.h"" s1 u# u$ U2 _; K' o$ E5 g8 ?, i
  24. #include "ChangeBG.h"
    ) X0 v: q" s+ \' T6 s: ~, t
  25. #include "AFXINET.H"4 ?) B8 s3 v; ~4 f6 N- y1 f) m( @
  26.   R2 q( L! T5 F! ~3 D. E3 S
  27. #define TRADITIONAL_CHINESE 0
      F2 v# X% ]8 E/ H
  28. #define SIMPLIFY_CHINESE 1
    8 e1 d3 u% x- ~, R$ h
  29. #define ENGLISH 2/ r% ]. F, Z/ [3 o6 }
  30. int m_iLanguage = ENGLISH;; d) e6 m! R- s6 H
  31. /////////////////////////////////////////////////////////////////////////////
    ' Z! P& u" _" w) @& b  J! p
  32. // CRevAppApp5 T0 `" o+ x" ~# ~5 r

  33. 3 R1 U# ], O# W, w2 y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp), z# i. Q+ D* b6 w0 f3 f
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    / Z  S/ S% G. A/ ~, y) q  J
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    : ?! Y. i& _! E0 W! C
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!4 x8 F, o7 F. i1 r
  38.         //}}AFX_MSG5 M) b  B7 h( x2 s" d
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    3 B7 _( G8 e7 }% a5 I2 W. b
  40. END_MESSAGE_MAP()
    1 v1 W- s3 B4 s$ U4 t
  41. 6 E  X- Q% d7 Z4 g% c
  42. /////////////////////////////////////////////////////////////////////////////
    - U0 _" |% k9 x5 u: T. T
  43. // CRevAppApp construction
    / u" i  L% T0 ?9 V0 e

  44. 5 X0 s. W5 Q* t
  45. CRevAppApp::CRevAppApp()' x# e# r& k. v5 X% Y+ q
  46. {
    1 i5 ^* T6 N# ~1 n
  47.         // TODO: add construction code here,
    ) f% l. Q, k# w! T1 m
  48.         // Place all significant initialization in InitInstance
    ' {! E" {- x2 F( M3 B. r+ O# o8 O
  49.   bDisplayIsBig5=FALSE;2 \" i# m! D7 G' B* t
  50.   bRestartUpdater=FALSE;
    2 u$ R- B  L* O( d+ k* Y1 T# d- r
  51.   bFinishUpdated=FALSE;
    6 p* c9 N) @, s1 f2 m% |- s
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;! m6 f4 M0 e8 t7 Y4 Y! D' m( N9 G
  53.   InitChangeDataBig52GBKS();$ x7 e$ t- M- p' y% U0 @
  54.   InitChangeDataGBKS2Big5();
    - \- k  `# ]2 H% g' l) u9 q
  55.         //: K* j$ ]7 H% L4 m
  56.         bClickRunExe = FALSE;9 U9 b3 m8 _9 k- U; a
  57.         //
    9 U6 Q' f/ T2 Q' B* }
  58. }
    9 H9 }( L' B1 p* b. H

  59. 5 G7 k! a, k8 V9 [: M
  60. CRevAppApp::~CRevAppApp()6 s% I' m3 {& @9 e+ Y. F! q" W; g
  61. {2 G, Q6 b" o4 a
  62.         // TODO: add construction code here,
    * E* ^/ F" s5 F  i! @
  63.         // Place all significant initialization in InitInstance
    / |  ^5 A" c2 t  ]1 }/ S3 R
  64.   EndChangeData();5 N) C4 V$ Y. @% F0 h6 l
  65. }7 n3 P  a0 d8 c0 Q( k. D5 z: T" `
  66. 1 ~) a2 ^: X% L( R0 Z8 \6 d
  67. /////////////////////////////////////////////////////////////////////////////
    ' x4 `" |+ c- R' q
  68. // The one and only CRevAppApp object
    # Q. d/ m* q+ a& N
  69. % R: z& k, `3 ]
  70. CRevAppApp theApp;9 E; n- V1 h9 \7 W/ O$ v% c- A8 A. P
  71. ) T! q* X$ F; N& P
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)  k3 ^1 b8 j" I9 O) o% `
  73. {
    " h& U, P2 \7 N" c% O
  74.   int iEOF=0;3 j. j, {* C# V& Y0 ~
  75.   char szTempName[MAX_PATH];# D- T6 @# v* ~! q$ c! {3 O
  76.   *szFileName=0;
    4 m) C/ |& u9 d+ e
  77.   iEOF=fscanf(fp,"%s",szTempName);4 O+ y  E4 }" e8 z+ K1 Y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('). z' _' z& {" C6 F- p
  79.   {; |" a  A, k9 {. G6 j& c1 h
  80.     strcpy(szFileName,&szTempName[1]);4 [( l2 Z4 P9 r9 _$ g5 e
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    * h! M4 ~$ [( ]
  82.     {
    * k# I: `" h' x( }. c7 T* g1 X
  83.       iEOF=fscanf(fp,"%s",szTempName);) n9 v' p2 q" k" X3 X, d* c
  84.       strcat(szFileName," ");
    ' k% _) M, J" z- L
  85.       strcat(szFileName,szTempName);6 |+ q1 I( @* V4 W
  86.     }
    4 d( Y# ^, D! r  e& s
  87.     if(strlen(szFileName)>=1)9 E# [8 Y( e5 ^
  88.     {
    % b. i/ H' G9 |* q' G5 a
  89.       szFileName[strlen(szFileName)-1]=0;
    " ~: K4 E) ^5 m" [; Q
  90.     }, o; f. \' j# J& Y. J
  91.   }
    8 H0 _- M5 {+ I; K4 x' `1 W
  92.   return szFileName;6 @0 S( U+ V! K5 ]- n
  93. }
    1 q- C2 Q3 y6 p0 C: g

  94. % b: S; K- X4 o' l/ F" D
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)4 L2 {" {% d7 e( ^# o5 [+ }
  96. {8 j& L1 y( N( i! n% O! r
  97.   FILE *fp;' h3 s3 ~- ]& z4 k  j
  98.   char *key=NULL;) |* X; U: j6 x
  99.   char version[MAX_PATH];0 C4 G0 m# h3 I& [4 e; y: T
  100.   LPUPDATEFILE file,olds;
    6 H7 H) C. Z* `; U3 Z- @  w
  101.   std::map<CString,LPUPDATEFILE>::iterator p;* C- y8 c; T6 u8 Y' Q5 }0 q% v

  102. ! o  L/ _2 t; [  i& M
  103.   UpdateList.clear();
    * z4 u# }6 A. Y4 g5 K& d0 A
  104.   UpdateFile.clear();
    , L7 X0 M! H6 M1 m; B$ h7 B
  105.   if(GetFileAttributes(filename)==-1) return false;
    / G# o% e; h9 [) E* x
  106.   if(!(fp=fopen(filename,"r"))) return false;3 S# O. b, j& B* G8 s
  107.   fscanf(fp,"%s",version);
    5 N7 q) i5 d% J' A5 s
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    - v! p2 g# p. M* |. D
  109.   while(fscanf(fp,"%s",version)!=EOF)
    + A4 i2 [& x4 t$ ?
  110.   {1 p$ _) W8 X  K
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. p% D4 q7 G: j0 V
  112.     fscanf(fp,"%s",file->path);
    ' Y6 }$ }* q3 j
  113.     ReadFileNames(fp,file->file);
    + v2 D6 {8 E& T% x. ~  G  B' y
  114.     strcpy(file->full,".");
    0 |1 r  P/ ~- R: ]5 r
  115.     strcat(file->full,file->path);
    6 X$ L/ Q5 {6 q$ a, g  z) v; l8 Y) r
  116.     strcat(file->full,file->file);
    * p( b4 W  v7 U4 `/ \
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())) I  {# Z/ R+ _; f- G0 I! B
  118.     {
    9 C# q8 u6 S" X9 q/ s
  119.       file->vers=(float)atof(version);
    : M9 @; k6 H6 P  m/ m
  120.       UpdateList.push_back(file->full);% n: ]) A+ O# E# H. i
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));* v& }& R0 x( c
  122.     }
    4 v9 ^5 p8 z9 h/ {$ j& D; J4 P& z' Q
  123.     else2 I8 k: y" u. l' J
  124.     {
    ! ]7 j# r2 ~, x3 r- K
  125.       olds=(*p).second;
    $ S' q( w% Y; J0 [
  126.       if(olds->vers<(float)atof(version))
    2 q. t1 ^  S% l; [, O) O
  127.       {# ^  n) M; Y9 U
  128.         olds->vers=(float)atof(version);
    ; M+ ~. @) u8 d" z
  129.       }
    5 t$ m* |  c. F! q! [
  130.       free(file);2 H* z# i( P5 s3 [9 ?5 k
  131.     }7 T! Z1 [. W7 w6 L9 A  j. m# ]
  132.   }
    ( l7 N  W$ |; u. Y& \+ k+ w& [9 ~! z( n
  133.   fclose(fp);/ J( m  ], k- L- x# K% k" k
  134.   return true;
    . A5 P4 x% V$ k% K7 e* N
  135. }
    $ K$ Q0 a* A6 a! d* h) u  q9 H

  136. / ]; g" i: J! X( w6 |
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! d+ I4 y3 r2 \8 L, S4 q
  138. {
    ; U( R9 [- B* Q- Y, a
  139.   TCHAR  szFull[MAX_PATH];
    ; }3 k& f+ {# `& \% j) k- @9 a
  140.   TCHAR *token,*inter;
    4 x3 [" g. n: f" [
  141.   *szPath=0;' k; t1 R  b! A) n
  142.   strcpy(szFull,szFullPath);* S7 }3 W) T# ~1 [0 w
  143.   token=strtok(szFull,"\\/");
    6 p) @9 U. x( }- O( }3 J* v% e) f
  144.   inter=token;6 V0 h" d  P" D0 y3 V, B' i0 g
  145.   while(token=strtok(NULL,"\\/"))
    5 u2 Z# g# b$ i" @& m7 k
  146.   {
    ; O' g' B5 K7 k4 v4 S4 t
  147.     strcat(szPath,inter);# _9 [: r; P3 c% \) Y  [
  148.     strcat(szPath,"\");. K; Q! O2 K6 l' E
  149.     inter=token;1 T, x' C' o& M0 a! ^& K7 [
  150.   }
    & s" c) B6 ]# [" V2 U/ n
  151.   return strlen(szPath);! H0 B* z; I, G1 w' v
  152. }
    / ~! k. k+ m1 W" A

  153. * p/ z. M7 m' t9 k! L
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    : G4 l. K! }5 a8 Z
  155. {! a! v  q. ~( U5 K. S$ P) H
  156.   DWORD attrib=GetFileAttributes(Target);
    8 c" D0 m& Y$ O5 K6 J
  157.   if(attrib!=-1)5 K/ Y, g3 g* \$ Y8 v3 r
  158.   {. Q1 p- [- r/ f2 @; h
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ a" O0 |; ^( r: V+ v
  160.     {
    5 N5 E1 ]1 g$ z# p
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    * ~; N6 K' Q% d. t
  162.       SetFileAttributes(Target,attrib);
    - @* ~. O; {4 a& u" I: H8 {4 m" \
  163.     }
      H/ |3 \9 i- r5 c4 m+ B$ _( ^
  164.   }
    ( b( g! t9 q3 p& n+ _" K) c6 A
  165.   CopyFile(Source,Target,Erase);) Y7 Y8 r, O. T9 m  ~
  166. }" X0 {' K, }1 v- V7 Q
  167. * v# s5 q& l7 J  p* I. I4 f! g, _
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    , `3 M9 t! y9 {" o. d8 Y
  169. {. Q& P( v( y# g2 n) a8 M
  170.      FILE *fp;
    # [& ]& x1 \/ y% h7 x& C+ G
  171.      char  szBuffer[8192];
    8 \) o, ?5 W  u% K, o
  172.   va_list  argptr;6 m) i- V$ p( O

  173. 6 m3 D) K- ]3 q8 k6 f( r
  174.         va_start(argptr,message);! K, O5 T; i- }, e! P) `* i
  175.         vsprintf(szBuffer,message,argptr);; k3 q7 H. W1 F2 U  G
  176.         va_end(argptr);  m* a# P; ?) f( ]1 m. n
  177.   fp=fopen(FileName,"a");! h. i* L5 g" W/ Y' u4 p" g- C
  178.   if(fp)1 H& j! ~$ L" I2 X$ Z
  179.   {$ {, S5 h9 |2 n8 G( W. m/ K6 {
  180.     fprintf(fp,szBuffer);! P* E( n  i/ Q" g2 r; u6 g
  181.     fclose(fp);
    + `! V$ o; H- o8 d
  182.           _flushall();
    9 \1 ^/ M. h* j; F* d
  183.   }
    - ]2 @2 R4 @+ L; w6 m( N
  184. }
    8 |- |$ j( c# r+ Y
  185. & r; V6 y3 h0 Y7 y: E* B
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    - S; ]6 `; o9 [+ W, S
  187. {. h5 @8 }7 h) W2 x$ U
  188.      FILE *fp;
    8 y& g8 k% \+ X, D2 H4 [
  189.     DWORD  attrib;
    ' g1 F, d+ O" x, E/ G
  190.   attrib=GetFileAttributes(FileName);! N% b; k! ~, O5 ^6 F* w0 r
  191.   if(attrib!=-1)
    " M9 ~- G# Q# G" N" e% A% a$ p8 ^! U
  192.   {
    5 i+ x: E! j! }) R0 c
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);5 l( V8 @* K; Q1 _) m8 ]" Q
  194.     if(!SetFileAttributes(FileName,attrib))
    ' C. z& n. L" Y6 v3 |$ r3 K
  195.     {
    ! v: e$ S' D$ M) n) i+ K: S4 U) d. ]
  196.       return FALSE;
    " \- k- F( h. `4 P' t  O4 R# X
  197.     }& M6 u' s/ X% h3 i- x
  198.   }
    ) g$ U; C, |' r# `6 e  M' n/ C' E
  199.   fp=fopen(FileName,"wb");8 ]0 e, _/ K4 k/ X3 e6 _) w% I
  200.   if(fp)- a7 A) C. s: P* R, S
  201.   {
    3 w2 A/ S+ d& ^9 `0 ]
  202.     fclose(fp);
    ; W2 t* R4 S; ~7 m$ C2 ~
  203.   }0 w& \7 z( |3 k7 ]& Z; W' G: C
  204.   return TRUE;
    ; E1 E( R2 U7 n  h
  205. }/ [. n. Q* Q# V* W( V) s& P

  206. - U/ }8 j5 T6 \9 D7 l) Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    % V- r7 N/ y5 V
  208. {
    - r9 a/ q0 c8 w' k7 E& U
  209.   char filename[MAX_PATH];  \7 k2 d% j) t8 \/ U
  210.   LPUPDATEFILE file,olds;
    ( ]6 |1 o* x! _7 i1 @5 P  p. G
  211.   std::map<int,CString>::iterator i;: A" L0 W! n& P  M& j( ], ^
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( E& R% O! O, N
  213.   std::list<CString>::iterator l;
    ( v, ?( `) d% g  c

  214. . X9 N5 z3 N) l
  215.   if(bFirstUpdate)
    8 h5 j1 C3 x9 I7 u, _8 ?3 n2 `$ N
  216.   {
    5 @5 t0 p6 A# m/ U
  217.     dwCurrFile=0;. o$ U8 @( }- y
  218.     bFirstUpdate=FALSE;9 C0 C( c( Z4 x* c
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; ^( r* [7 @+ U5 N
  220.     {9 i, d4 M+ {8 R$ @2 w4 K/ W2 P
  221.       dwTotalFiles=UpdateLocal.size();# [9 E: {* Y# |, _* |; \
  222.       dwDownLoaded=0;
    ( M+ [# O  }5 f+ m4 q
  223.       bSilentStep=FALSE;
    ; M% D+ l* Z/ N, e" Z3 H9 d, p2 N
  224.       bCompressed=TRUE;: C2 t" @# T. L4 L' e' ~' y* c4 @$ r" t
  225.       strExtLocal.Empty();6 i! O( W- H4 t$ n
  226.       strFullName=(*i).second;: u5 u  @7 V! \
  227.       dwProgramState=AP_CONNECT;
    3 A+ }. }( Y: [& o: ~5 @
  228.       return TRUE;" S% n- x) l7 K5 U- d9 k
  229.     }, z+ I* E" V% E4 ~# f8 g; A
  230.   }
    / Q9 E$ I0 H# I) z( O* b& E9 S' o$ Y
  231.   else if(bRestartUpdater==FALSE)
    - a3 k4 Y6 l9 O6 M2 F" o1 Q
  232.   {+ A8 E3 F2 B- V, y8 U' M
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ! t5 z( o* ~, e5 \5 y1 n  _
  234.     {
    " H( u2 ~8 I6 `. ]
  235.       file=(*p).second;
    # N( n+ X  S8 p  G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' s- C4 s* T- z6 \, e
  237.       {8 o" j) ?9 W" v2 Z
  238.         olds=(*p).second;, Q+ q6 B7 q9 k9 t1 {. {( [+ I
  239.         olds->vers=file->vers;/ j% O' _- L+ c# Q6 i  t; N
  240.       }
    , ^; g/ _( s' Q, g! q$ ^1 i7 B
  241.       else
    * U2 N8 M& V1 ?1 S
  242.       {# i+ H3 b) l' X$ I2 J
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. Z3 d% z4 H6 k
  244.         memcpy(olds,file,sizeof(UPDATEFILE));6 u8 a3 s5 t  k+ |( Q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));) J6 X; Y$ P9 N: s
  246.       }
      P0 t# s6 [' W7 |& Z+ N
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ! C9 ?3 m& F& M6 H6 j, f
  248.       sprintf(filename,"(%s)",file->file);, L; P5 y5 W8 X/ _" Q, C: [
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, B# V+ V: T( S
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    % o5 k% V/ P# w
  251.     }
    2 T& h& ?" h8 d* r3 B- R
  252.     dwCurrFile++;$ J4 _' x- Y, T, b: n* F6 \6 c
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    9 m0 m- b' w8 o# M
  254.     {) P5 F: S7 [* Q) E1 ?: ]2 }9 O
  255.       bSilentStep=FALSE;
    5 {9 c, w( V% `- m2 S; x
  256.       bCompressed=TRUE;7 z2 U" h) l. v# s
  257.       strExtLocal.Empty();- F3 `) w7 R& v( D
  258.       strFullName=(*i).second;
    5 j  K$ E& ]; O* @" z( ~
  259.       dwProgramState=AP_CONNECT;$ J+ ]6 t; G3 L! n; L; [3 V% x
  260.       return TRUE;& Y% ~& z8 H- q' W. O
  261.     }/ h% s$ O  c$ q! F. ~. {3 z4 m
  262.     if(!bRestartUpdater)
    & B0 M2 u" v/ g- k
  263.     {% K0 }! }) Q% U- K
  264.       int iCurrSize,iFileSize;& A3 r0 [- t$ E
  265.       iCurrSize=0;& C, d/ S9 v# I! `8 B& v
  266.       iFileSize=UpdateList2.size();
    - J+ ~/ l" I2 U9 O1 v
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");/ d+ w, b, |; v
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");) ?& P0 i9 {2 i) T. Y) G
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    8 }2 E) J& J& g7 m$ ~3 S
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 {$ v4 C5 y) }: [( H$ C  k2 u' C+ s! d
  271.       Fclearf(".\\update.dat");
    " C; q+ t6 ~; Z& b
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    # n* d- B+ s2 N8 s. @3 u! q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) ]% ?4 M. M/ e
  274.       {
    5 W2 Z0 c" \7 ?+ a4 }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    " l( e& j# G$ G) t: q
  276.         {
    # x" B6 g$ v8 ~
  277.           file=(*p).second;
    5 @, |- T9 s! @. U. j
  278.           sprintf(filename,"(%s)",file->file);
    ) {* Q9 Y4 o2 g) y
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);" c- g6 k% {, A
  280.           iCurrSize++;
    ( T8 Y0 k2 }0 ^
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    % Y: Q+ \5 T7 }2 ~4 t" z, q
  282.         }
    5 o! T9 k! a( ^* h( n6 L- E% K8 {
  283.       }
    3 {" B% s/ {: I) Y2 H
  284.       unlink(".\\update.txt");8 M, T! ^6 f1 A( D5 T% h* @2 E5 R
  285.       unlink(".\\update.tmp");- o' Q# e8 L* m% E% n, t
  286.       Fclearf(".\\checkversion.dat");) Q% \5 s& T. ^" c8 I7 @" ~# i9 k; G# g
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    / @# L9 y& u( k* z# {
  288.       if(UpdateLocal.size())& M  v( i$ O4 K+ h/ S. h9 Q4 O
  289.       {" N" |  h, G( C) i) l  v8 p- b
  290.         UpdateLocal.clear();
    % Y8 l) @4 `: x, a
  291.       }1 t) z) r- u- k- O) h3 n$ A
  292.       if(UpdateFile3.size())
    5 J7 ?6 Z+ }; u8 }; m% O3 J# L' k
  293.       {. y, s; m: c. a  H$ {# |
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & O" U! V! V" l) a+ G" V
  295.         {  N# E; J& p0 _& B* \* E3 |5 P
  296.           file=(*p).second;/ D! s" O5 |% G- C
  297.           free(file);6 }/ Y# Y! U, _1 B/ J/ T
  298.         }, P0 T5 J( j5 G7 a- |+ D9 j4 Q0 t
  299.         UpdateFile3.clear();  l, K# u' G" K- e3 Y$ k" S& x
  300.         UpdateList3.clear();
    2 u" W7 K3 A$ U: N6 \* y, y
  301.       }$ z! [% a5 [. B+ L, p6 R9 M
  302.       if(UpdateFile2.size())/ ?/ `; v' \- _( }" ~- R" p
  303.       {& W  v5 l( [# }7 o; K& L! g* {
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " }  s% d  b; w) ?. ]. u
  305.         {
    . T( J  G7 ]: M7 O) c
  306.           file=(*p).second;
    $ s" ?# v3 p$ T4 [, H1 S
  307.           free(file);
    4 L& \3 L& l: t, m' u$ H. c
  308.         }% F/ \, p4 g, T
  309.         UpdateFile2.clear();8 s: k* \2 @7 X5 E# N1 N$ S* ^
  310.         UpdateList2.clear();
    " g1 m) f: k; I" K$ C) U9 w
  311.       }
      i% H% S$ N1 z
  312.       if(UpdateFile1.size())3 K7 }8 P0 L7 f' w) _) O
  313.       {
    - [" J9 s3 n9 k0 v# p/ k: o
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      r* d* a7 }) t
  315.         {% A8 v7 T& O0 ^8 j
  316.           file=(*p).second;2 x2 B7 s$ i+ o+ n: ?
  317.           free(file);7 _) k# J9 B7 B0 A( p
  318.         }
    # Z- W% d  ?/ o3 @
  319.         UpdateFile1.clear();
    & E3 s+ P& b% j; G; O- r
  320.         UpdateList1.clear();8 D2 \- E( x, U) J& q% r9 k
  321.       }* y  g$ x; I6 ]  Z- X, f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ n' h* _: @7 q
  323.     }% ^/ u% I. J  A9 j" i7 f- Z
  324.   }$ E/ @# _2 F' i' I+ k) r+ @7 R9 Z
  325.   return FALSE;
    # y. E- ]) F# L
  326. }
    * X+ a2 w  ]0 M

  327. * {8 y6 |3 f1 O" s& D8 \
  328. void CRevAppApp::ClearAll(void)
    ( A9 r4 T1 |: X3 v% h
  329. {
    $ n$ @& c7 @- U1 Z4 ]* Y* E
  330.   LPUPDATEFILE file;* h: F. G  I' a" D/ I
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
      W1 y$ ?% H- y9 f: G! X9 b
  332. % \; K/ d2 X, c9 _
  333.   if(UpdateLocal.size())1 e# _4 A$ e' m6 M9 i1 U
  334.   {
    " I' @, N2 }& u0 S
  335.     UpdateLocal.clear();) A- L2 E5 d6 M2 b/ d  A( A
  336.   }# G& \0 N! a7 V2 S" P& g# ?% b' o
  337.   if(UpdateFile3.size())
    & c# R- {4 D: O3 }- ]' u( k4 r
  338.   {' m: R6 g$ ?4 {0 z" {
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% Y7 E4 p' Y% }  J# k- R4 L" D
  340.     {" U/ J( m+ w) ~9 @- d+ n  ?7 Z7 \
  341.       file=(*p).second;, z# v, }8 L# Q9 B6 O. Q
  342.       free(file);* [! r4 k- {2 a& o0 O
  343.     }' @+ Z% Y2 e2 s+ p5 I$ [
  344.     UpdateFile3.clear();
    9 m4 M5 b& E8 {+ G
  345.     UpdateList3.clear();
    6 B. k. n8 Z( h( D) k) u" A0 K( r
  346.   }
    2 d  q" X* l+ O8 P) x0 A+ j9 r
  347.   if(UpdateFile2.size())
    1 L5 Y6 ~7 l# H, F) j  p" X
  348.   {
    " b0 b3 \2 Y8 |3 E7 x6 T' g
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    3 z* L) n- i: f
  350.     {
    1 i+ g) K7 K# V( \
  351.       file=(*p).second;
    2 {0 y8 x8 q! ^; d, y0 T
  352.       free(file);
    & p# f' i$ L$ B
  353.     }
    2 ~- l- t( h  I
  354.     UpdateFile2.clear();
    * r( W: ~: d) ^) A2 b
  355.     UpdateList2.clear();3 B6 k0 W: G9 o" Q0 v5 |: W
  356.   }
    $ u$ Q0 }( L5 _  E! @
  357.   if(UpdateFile1.size())9 d0 Y" ^5 ?: E5 q
  358.   {
    & p; W+ c0 w/ W$ n6 p
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! j2 c2 J9 ~0 @+ i+ n1 ?9 N9 M
  360.     {/ |- G1 H& S9 q! X
  361.       file=(*p).second;
    3 S; t- {5 R& [
  362.       free(file);8 S  H: I+ l3 e8 }
  363.     }/ X4 p: V/ \' |2 J5 b5 A
  364.     UpdateFile1.clear();
    % ]4 G- y+ \% F. d# j" E! o; h- S
  365.     UpdateList1.clear();
    1 ]* M3 W  o+ }! Y6 q
  366.   }
    - J8 j0 r& \0 h# j) z7 P
  367. }  0 x8 a- B% Z1 p' ]1 D: h
  368.   
    ) s) S% o0 V( k6 i: E- J5 d/ l, m
  369. BOOL CRevAppApp::CheckLocalVersion(void)8 e+ d4 r9 z3 b
  370. {9 z+ a$ j% s& V2 |" W4 p
  371.   int c;
      P6 {+ s) }. y3 O4 g# P  d$ p
  372.   LPUPDATEFILE file1,file2;! B7 z% s/ b! E: y, N
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ! B. ?% d$ S9 @. U2 w- Z4 v
  374.   std::list<CString>::iterator l;9 l% K2 ^+ U7 v( p+ g
  375. # [- e3 `( @% Q: R+ ?+ T
  376.   UpdateLocal.clear();% _6 `+ _5 ^7 x& {0 q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    2 r5 s, q. z* W2 X  d7 B6 p: T
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);5 q3 K* d3 `5 P% T
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);5 a: S. w. g5 d7 X
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);2 x; X8 N0 m1 a
  381.   if(UpdateFile3.size()). }+ n0 r7 U" p8 S2 L( P
  382.   {
    3 c: ~9 O& ^% ?" F
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    * p: K+ {1 O3 @" A( z9 `
  384.     {! w2 f( l5 v% I$ b  X# ]
  385.       file2=(LPUPDATEFILE)(*i).second;
    ! P; X: J; U9 {! J6 v0 Z, o+ Y' V
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    , u% i- O2 B* n. c( I' `
  387.       {# V" A& N0 Z* I& X( U( j
  388.         file1=(LPUPDATEFILE)(*p).second;
    / M- A; E7 u" i) f& R  D
  389.         file1->vers=file2->vers;) J- O4 Q5 V* i. U; p
  390.       }+ [7 D2 ~: A1 [# |
  391.       else8 g" ]( e. h" q
  392.       {
    : |  ~/ g( H/ n: K3 `
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; k( D2 d* N1 ~, K
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));% L1 l( o9 {& a3 g9 z: b
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));" A$ }8 ]6 h, B, D" i$ m
  396.       }: v$ w$ e, o/ c( I
  397.     }
    : A% f" g. M! w. ?6 D. ?% C
  398.   }
    , q/ c7 k/ o. r2 Z% t/ j
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 B4 @: s0 z7 L3 p6 M
  400.   {5 U. p6 h, f( c
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())$ O4 x( _3 H! I
  402.     {6 x1 k! @8 i. c; H: X4 ?
  403.       file2=(LPUPDATEFILE)(*i).second;
    7 H8 H6 V8 q9 H
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - F8 a1 [- k0 s3 ~% A
  405.       {
    8 ]0 q- e" b, K5 v# V; d
  406.         file1=(LPUPDATEFILE)(*p).second;: }5 A' n" S/ V/ o# F' v4 L# ?# D
  407.         if(file1->vers!=file2->vers)9 w8 \' _; b- {5 h/ p
  408.         {/ B2 Q' n' T0 r! C0 V
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    . j3 K1 s: J( Q
  410.           c++;
    " Z! g6 }6 u; l% K: A# U- f
  411.         }; z& g, E( G3 j$ E& @" F' k
  412.       }
    , D. Z# I; G8 o: ^. `' ~
  413.       else
    / z! |. z6 X# V
  414.       {
    - g  O: I, U& b5 B# O7 p0 g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" [' U9 `+ E% l1 k, _) }1 i' D
  416.         c++;7 l5 j) N* }/ |4 |6 ?
  417.       }. Q; B, n4 W+ t: |
  418.     }1 [) W, \& t5 a6 H/ G
  419.   }$ h) v) [8 G( z/ y' S7 }
  420.   unlink(".\\DownLoad\\update.txt");
    " {& J# _3 D( g' c' C
  421.   if(UpdateLocal.size()) return TRUE;" G  Q' j1 B0 \4 z) w  @% J
  422.   else                   return FALSE;6 y  \: L4 `" V  d
  423. }
    8 b* C9 B* a! e" Q' g

  424. 3 p7 x" |' A. l0 y, q* j
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ) ~$ w! [/ n& V: G; [
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"8 [) F! L$ f, q6 }0 h
  427. 5 \2 ^+ b8 b' {3 G; }, F
  428. 0 v5 G2 r& O% w3 `5 k
  429. 2 w  j8 X2 ~/ [" k
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    2 ~; l8 v$ c- F. C! T( \- a; X: c
  431. {
    4 B4 ~9 f% ^; m4 c; v$ M
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    , E8 I! u; y5 G+ l- _  ~
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # @2 l' k& B- U
  434.   {
    8 [  b8 a) @$ @# v
  435.     char szLanguage[50];* ^( I2 |# h4 }5 q$ t: c
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 o, Y  z2 x& w& N" J/ O
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . L7 f* t- d4 K4 L
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & M8 K, v/ l  N
  439.     else                                   m_iLanguage=ENGLISH;
    2 J7 G- o9 u' L5 y' j4 x! ?- i& Y# F) B
  440.     char szRegister[100];
    7 B# d) l5 o. I+ Y+ d
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");7 D8 a0 C6 e5 j2 T& O
  442.     strRegsName=szRegister;4 i5 q+ |8 i, W6 z0 H6 Z" L
  443.     char szPatchURL[100];4 c$ g2 \8 g) a7 [
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 F4 o$ R: W" ~" s9 |7 w# Y1 S
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( g: A$ {% b; n% w/ w( p5 \/ J
  446.   }: u; ]4 ?& y  H4 o
  447.   else$ B+ C) z/ Q/ f& Y, Q4 U0 C
  448.   {5 G0 u5 w  k5 Q6 @6 W* u2 Y1 M) C
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    3 o  z3 w4 X' M. ?
  450.     strRegsName=DEFAULT_REG_URL;' n: m% j2 A/ s: b
  451.   }
      v' B7 s5 a! M/ D: i! }# _$ P7 H
  452.   if(GetFileAttributes("hosts.ini")!=-1)6 o2 M9 V& C; s3 P5 G
  453.   {
    % L7 S; r! V& t5 B
  454.     char szIP[50];
    5 r3 G! r9 e: E! H
  455.     char szDIR[300];
    3 {( f( S3 _' q
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))8 V9 c( @) k: X9 l) u
  457.     {
    + P- ?( K8 k7 R/ f6 x# G7 `
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : s; ?9 x' ^  ?+ \! L, I! t
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");& ?, f5 a! [3 g* P2 i
  460.       strHostName=szIP;
    - q  |# w( I6 q+ e5 C. R  |
  461.       strHostPath.Format("/%s",szDIR);$ _' l% ^- S# r/ a$ G
  462.     }
    - A& p. N, K, m2 Y
  463.     else
    * q6 |* a9 s; m- c  e
  464.     {1 Q, w- K" [: D
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : k  C+ Y5 o2 k& T8 t
  466.       {
    - n) \" J% l; i' U
  467.         char szLanguage[50];
    5 s! ^5 G0 a9 F8 p0 _7 E. C' r
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 D# h7 X5 j, z9 S+ a5 ~8 c+ E5 m
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 T! I" s+ y, s! d4 e" m3 E
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % k% B6 w# Z% e3 b
  471.         else                                   m_iLanguage=ENGLISH;
    , }' Y% \% W+ A7 X7 g
  472.         char szRegister[100];3 X! V/ E" H& Z
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # n& d2 y/ [9 i! h: A, W% x
  474.         strRegsName=szRegister;
    5 F/ L/ }: R& B  r8 P6 q* {6 \
  475.         char szPatchURL[100];1 q- }5 U% P6 e; A' ]2 _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");& N6 d; W/ g  v# J" y( E4 T/ ?0 T# u
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);8 ~9 p9 B7 F( \' u6 [
  478.       }% y) A3 _+ g; j4 h
  479.       else
    ; Z9 J5 r1 D, M' ]: [1 F
  480.       {% M; S* A& v' h0 S) [% l
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * ~! o4 g& b# u& w! v
  482.         strRegsName=DEFAULT_REG_URL;" p9 w; \/ _+ b
  483.       }
    8 z; I/ \/ l4 _' L; F
  484.     }
    / g2 @$ R, _! J9 g) b" H
  485.   }
    ( Q& ]. ?; a5 N; A- R4 r9 v
  486.   return true;
    : O' G$ G' i$ ~  F8 t
  487. }+ c/ m8 U/ \1 Y+ h2 e

  488. $ c, M; n% v' T6 J' b+ z" J
  489. #include ".\ZLib\unzip.h"
    / a& o8 D# l! z+ Z/ m) s
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);3 C) d2 q8 `) s6 N8 A+ D) l+ Y
  491. /////////////////////////////////////////////////////////////////////////////
    & ~" Y. q0 D1 W  Q
  492. // CRevAppApp initialization2 K. f( \0 X" X9 V
  493. 2 D# B9 r5 K% s1 K# B: T  q2 L% I# ]
  494. BOOL CRevAppApp::InitInstance()
    + N8 S* j) X& n
  495. {
    / s" k( Y# x/ e
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    3 g. {  K6 N% X) U# T

  497. 3 {& Y4 R) I1 g, I/ E- I  {$ l
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    , Q7 ~- \5 U" W5 Z8 a
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))0 R* \" {8 H: _4 z- M
  500.   {: Y. X6 a4 N# G( h( b6 G
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");; O; M% M/ }. }5 M1 [
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    2 P5 d( Y( T$ [
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    - Z& E6 N( Y8 O8 ~4 P# i8 d" l
  504.     {
    ! ~7 a4 Q6 Y6 W1 E
  505.       strcpy(szPath,szPathTarget);
    . ]0 |6 _% k( ]  V! X. X5 b
  506.       SetCurrentDirectory(szPath);
    4 d! O8 P! Y4 t8 A2 {, {+ T
  507.     }: Y2 Y$ D! |$ q+ `% D7 a
  508.   }( O7 q% l% |" T
  509. #ifdef _DEBUG1 Q) b" k1 \0 P/ s: f! z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; `. \  b' R, |0 Y
  511. #else2 _  Y! S4 o0 O5 `6 k
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 h; {4 ~, F1 F# p% f; Y0 R
  513. #endif* Z  S0 j+ }- Q( h/ z
  514.   {* x: O) Y( x7 R( O& ^
  515.     char tempFileName[MAX_PATH];
    8 k2 i' c* |$ O$ c
  516.     strcpy(tempFileName,szPathSource);
    # v9 e" O) G7 O# B# r+ M
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ; k7 ~# g) Y; _1 d( t/ w. ~, w
  518.     strcat(tempFileName,"\\$CSUpdate.exe");+ |1 f' D6 C* N% F9 G9 {% `- Z& q
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);- [# G2 I( b) J& [" e5 j
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    6 y$ U2 O' K. ~# |8 p
  521.     return TRUE;
    - ?+ T0 n% d# V5 ?" |  r0 d+ l
  522.   }% u( g5 g* z1 q
  523.   // Nuke 0118: Delete run.exe+ h; y9 |, m' v+ C  d+ p6 R8 s
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );2 ~9 N3 ?' L' ?( m4 V: y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");# n4 H, ^6 \9 m' Y7 {) I$ \4 x4 U
  526.   if(!ReadCfgFile("Config.ini"))
    ; z& v/ M1 @5 x3 s" D' A
  527.   {$ J% o0 `) }' t8 J' i; h
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    & K9 C4 s) Q  m# b* i
  529.     return TRUE;
    7 i) u$ }- q3 d0 S: o, Z
  530.   }
    $ _8 ]) x# i# K0 f3 w! g
  531.   HANDLE mutex;
    + |/ e0 k( R+ z4 z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 H- D, H2 q! c+ r% V1 w$ s: e
  533.   {' g! I4 l- R/ y9 O6 W
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    & o, {, M4 u. U# O
  535.     {
    5 n  U* I$ a. ?( _% W  j0 a
  536.       CloseHandle(mutex);5 P1 u0 i8 d! C- v
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    / ^2 k, a" @. |- F8 p
  538.       return TRUE;! q8 H/ r& F$ X, g
  539.     }
    ! L8 ?$ \/ E2 l
  540.   }  ; f2 K. N' _8 j' _
  541.   CloseHandle(mutex);
    0 s  j7 S1 |) k4 o

  542. 5 U  X' J" g, T. d: v* ^1 j
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);1 P: W+ S2 B/ Z0 B8 E$ a  a
  544. 1 D& A7 Z# c5 }# p. j) {
  545.         AfxEnableControlContainer();/ ~* B, [/ R4 Y2 b, I* @- R
  546. ( _) B; X& s1 ]0 U# o- y7 c1 P+ f0 k/ V
  547.   bCanUpdate=FALSE;
    ! {7 b7 Y$ T% V7 A- q1 c2 b" J2 z
  548.   dwStartUpSteps=1;5 ~( x, f1 \8 e3 X
  549.   dwProgramState=AP_NOTHING;
    # i0 I! _: Y' k" g6 s

  550. ' t' M( q2 N7 [* q5 {' K9 p, i3 ^
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    9 F, b0 c+ p) |+ H# @

  552. , S: @# x* J0 a; m7 M
  553.         // Standard initialization8 S6 s! X  z7 E+ X: r+ b6 _
  554.         // If you are not using these features and wish to reduce the size4 |" @) J- N# ^( s) ^" E
  555.         //  of your final executable, you should remove from the following$ ?' Q$ E+ e# R, l; H) [* E
  556.         //  the specific initialization routines you do not need.
    # e0 u: j$ E' u/ j

  557. " L  f: r& f4 N- M* `7 Y/ @- O
  558. #ifdef _AFXDLL
    * j; i- Z7 v9 z% L! W6 m' O% n4 x
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    6 d0 {3 X) \9 f7 B& B$ [0 `
  560. #else
    5 j" [1 X$ l3 m# Y4 o
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 b* x$ x4 W9 A( g
  562. #endif
    ) O5 I" [6 u0 j- R; J" W
  563. % E/ v* r! T1 g; p5 g
  564.   dlg=new CRevAppDlg;
    7 F3 n  W% s! y8 L6 z, K( `
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 x# d# ?9 J) Z. }) A, C
  566.   dlg->ShowWindow(SW_SHOWNORMAL);3 J. Y$ E" L! ?! C
  567.   m_pMainWnd=dlg;/ U4 `3 E2 ]" p/ d( ^/ L
  568. . V& t$ k1 N4 v% r  H3 z
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    3 V# [: i- S9 X# W

  570. / S( E* R& E: Q* \6 a. v
  571. //  GdiplusStartupInput gdiplusStartupInput;: l# s9 H6 b6 B6 M
  572. //  ULONG_PTR gdiplusToken;
    & e7 J  P. P& b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);3 k0 O5 ^7 W2 X) u3 n' l! u( S' o2 p
  574. # g" y" U- x( P* S+ I
  575. //        CRevAppDlg dlg;
    8 z7 @% A# j* u4 z. L, M
  576. //        int nResponse = dlg.DoModal();
    . b/ p5 t9 _4 l* F1 z& h3 @, m8 v: e# Z
  577. //        if (nResponse == IDOK)
    ! j2 v9 B) v8 C
  578. //        {
    7 t4 Q" |& S3 {3 P( j
  579. //                // TODO: Place code here to handle when the dialog is
    4 z1 G/ w. G+ u* z" }
  580. //                //  dismissed with OK
    / M$ A4 o  a3 T( d/ u
  581. //        }
    ' ]+ W2 i' _$ D) Y, l
  582. //        else if (nResponse == IDCANCEL)
    2 F5 h, E, \, o
  583. //        {9 n& @, _8 _6 F4 a8 N$ l
  584. //                // TODO: Place code here to handle when the dialog is
    2 s, M0 z1 T' m
  585. //                //  dismissed with Cancel
    & `/ P, P( h, z3 E  l/ U
  586. //        }2 J* l  }; J$ ]& l  W' \
  587. . h8 A' f* h6 E4 m- A8 b' K
  588.         // Since the dialog has been closed, return FALSE so that we exit the/ K* E8 T& O" C, x3 i1 w% z
  589.         //  application, rather than start the application's message pump.
    3 d2 a, e: o; M6 @6 o0 q2 H" t/ F( V
  590.         return TRUE;
    / C( I( E" z1 `* t# j; h) D
  591. }
    $ _3 T( T9 H2 ?1 ?$ q( a9 F* G
  592. ! J# x% N6 p) n. l# x; Q
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * y  ^& n1 K% u' C  G# ?4 l7 b1 p
  594. {( Z  @5 Q4 s4 O3 k1 ~$ u) h. u3 t# p
  595.   int i;
    4 p, J2 A* Y6 Y2 g3 {
  596.   char *szRet;
    ) A2 K  v5 Q1 [! D7 r

  597. ! y* N' w3 ^# c: t: s4 p( Y
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    , v7 I) h* c+ L7 y' P( e
  599.   if(sztoken)0 V! R* u, R2 x
  600.   {- |3 v. g+ Q3 q8 M# C
  601.     szRet=&sztoken[itoken];
    5 s2 `) v4 v: E' e9 t1 r
  602.     while(sztoken[itoken])
    + x; M" }& f) K6 ?4 ~% K: z
  603.     {
    & C5 E* n' t1 E! I/ q
  604.       for(i=0;i<(int)strlen(token);i++)
    5 O" i: o# M4 j
  605.       {  A0 p/ N; ~+ Y( N5 q5 Z, V
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    4 j1 X/ X8 o+ F0 L& ^
  607.         {! Q, ?8 |  `  t  s. l8 S% z
  608.           sztoken[itoken++]=0;! m- ?* `; d$ G: B# A( s2 p
  609.           sztoken[itoken++]=0;
    % C, Q) S8 S7 d* r
  610.           return szRet;
    . k% d  ~# d9 c, B) }# d; u
  611.         }% c' h& t: W& K0 A6 z- o4 C
  612.       }
    & o* T2 W' _' k! {  R
  613.       itoken++;
    # `. f2 \8 _, B. R8 j- f, N$ K
  614.     }
    7 z: C: W! p# K+ }
  615.   }; ?- l& G1 }) T% `7 J
  616.   return NULL;
    / }: R8 k( a5 y' _; l$ T$ o: i: u
  617. }7 ~+ A- x( b& E1 j' J

  618. ' @7 @* e8 k1 E7 W
  619. void ProcessProc(long Total,long Current)
    9 E! a1 V  [9 M! N
  620. {
    ! K8 C, X1 k, p( K5 _9 o9 N  y
  621.         MSG msg;% k9 }- T/ d6 q0 R
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ u6 G( s% ?! Z2 f
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));: M' m7 b5 `. i2 N9 S
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    8 n7 c) |; N- k5 S
  625.         {
    0 X, h% {0 P* G, [- m- _
  626.                 if(!GetMessage(&msg,NULL,0,0))# O: \' P8 e2 g- J+ [1 p4 @! A
  627.                 {
    " ~1 h( j6 o4 j1 {+ a4 w
  628.                         return;+ t! g' ]% S, ~$ q' f2 H& K: @
  629.                 }, s4 v/ Q/ Q; ~# p' j
  630.                 TranslateMessage(&msg);
    " ]: p$ }% u& u) h: u. t
  631.                 DispatchMessage(&msg);
    ! H3 ~9 J9 R. E9 g: z. V
  632.         }        6 |3 C3 g: r# d7 ]  n
  633. }
    8 {" x0 H! _" E! b3 ?, d& {" d: x+ h
  634. ! e' I2 c8 i! G, A" J- C2 e' J0 w
  635. BOOL bFirstChar=TRUE;" S0 Q4 ^: ^1 J4 P) _9 t
  636. 9 x' p! f1 k* j  N  H5 y
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    # U+ a- `1 S2 i
  638. {" U; m5 h; x8 j# l: w) u
  639.         // TODO: Add your specialized code here and/or call the base class
      f" F4 E  g: B( F; `3 B) @. J
  640.   switch(dwProgramState)0 w, z' s; c! l" M% Y9 Y5 i  ?; ^. z
  641.   {9 q- |5 n4 U% `
  642.   case AP_NOTHING:
    8 O+ @" Z! L: c1 ^
  643.     switch(dwStartUpSteps)
    , t" v% }+ h6 i. C9 x* r
  644.     {
    4 Q+ t* S4 \' c7 Z  \) c% w$ Y! Y9 R
  645.     case 1:* p- r" i' a3 @& D6 O8 u  B
  646.       {
    ( x; w" _+ |8 {; Y3 S+ `# w
  647.         int i;% L6 X0 p8 U# d3 I; Q$ u
  648.         CDC *pCDC=dlg->GetDC();
    9 }, Q! q8 \2 p7 L0 g1 Y) G
  649.         HDC hdcwnd=pCDC->m_hDC;- U- P# n% U8 j8 E
  650. //        Graphics graphics(hdcwnd);
    5 f/ o" `, q6 @1 X. s
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ; S! l! v9 `" ]$ G
  652. //        INT iWidth=bitmap.GetWidth();
    0 c- R. f. s) m& n3 V. \" y
  653. //        INT iHeight=bitmap.GetHeight();+ Z! |& c1 z6 O% x7 _  a3 u
  654. //        Color color,colorTemp;+ T4 E' z9 k* c7 N4 d
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)5 O3 Z% K) b0 H# F3 D9 v
  656. //        {
    ' e/ a# \* q  q+ I* N
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)1 ~. `* k% }7 Y+ T7 O6 @
  658. //          {
    5 I' U" f4 I% v: Q/ r* w: y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);# G3 ?6 _9 ]0 e7 L- j' y3 y
  660. //            colorTemp.SetValue(color.MakeARGB(' ?. e! U: O5 S, g5 U3 O
  661. //              (BYTE)(255*iColumn/iWidth),
    6 M: W9 v3 i* a# U% g: V& x' u( M, `
  662. //              color.GetRed(),! y2 s/ o; W% O- A* Z  G8 k
  663. //              color.GetGreen()," |- Z5 s( P9 w( B# R+ Q
  664. //              color.GetBlue()));6 s# r! J# N1 P* q" l
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ; Y$ @9 b7 }/ l1 o
  666. //          }
    3 c* |' t4 ^, k% R& V2 N
  667. //        }
    8 b8 P7 E/ m2 C0 ?/ w, w
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 k8 G' J. V, Q! u& y/ S2 H, l
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " i% z2 [$ j8 O' i1 H4 v0 a7 G
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");. f/ t  L/ m( N1 R- F
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ B9 E2 t! R5 d4 W
  672.         for(i=0;i<240;i+=8)
    4 c0 ^: s# W3 {( h6 b# Z+ X
  673.         {) g- R7 Y3 G, k0 @8 z% m
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 j) A) f% S9 m7 K8 I; e8 q6 E/ U% N
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);$ x; q1 q5 M4 T* @) p
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ d+ I- Z! z8 \$ O/ q' y
  677.           Sleep(33);
      w; Y( L! ^, o9 Z; J8 [, ^
  678.         }( I: K- E8 p! f+ B
  679.         Sleep(1000);
    3 }: g8 D5 o; `
  680.         for(i=240;i>0;i-=8)5 ^. K4 @. S$ A. b
  681.         {3 J4 E$ d' b1 g
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( {4 ]5 X4 `8 `7 {
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : ~; U7 `" m: N  v  {5 `( A
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 N9 k- B+ ~$ y: S
  685.           Sleep(33);
    & f6 r+ g1 A1 A, V* b8 E
  686.         }+ {5 ^2 h8 Z4 w  z5 w. p
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);* r! y" P- a* H! l9 S  r" P
  688.         dlg->ReleaseDC(pCDC);- o% M' O8 [0 U
  689.         DeleteDC(hdctar);. v: e. A2 a8 y% ?! G
  690.         DeleteDC(hdcsrc);' S( S0 G/ b0 I$ q' L/ q# ^9 v
  691.         DeleteDC(hdcorg);2 c. s0 v; }, f8 h1 t" V7 Q3 A& }
  692.       }/ O" @# U+ _7 J9 g
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);  W6 q0 F: ~' W7 L- p4 g
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");) U, Q3 m$ R: _/ M
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");$ ^7 R8 S; A. U2 v
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- {+ a) z) K7 r
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 G. y3 [' G! m6 O& e: c
  698.       if(!Dn.Connected())
    4 X. b5 q$ E3 o* ]2 L$ t+ c6 z
  699.       {* z0 M  C+ K8 ?" g# i# L, v
  700.         dwTotalFiles=1;
    ! z; u% _2 {" f' e4 [
  701.         dwDownLoaded=0;( b* K6 h* f$ A* Z, S
  702.         bSilentStep=TRUE;
    / _; K0 R1 w. I6 `, T2 K
  703.         bCompressed=FALSE;. n9 S, q8 P1 N
  704.         strExtLocal.Empty();
    - z; d& U1 v9 A# v' M8 l
  705.         strFullName="readme.txt";
    ! i: Y/ K  j6 I3 K; y1 A
  706.         dwProgramState=AP_CONNECT;
    # J4 r- Z" ^* u
  707.       }
    . R: Z5 p- ^' R$ |
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();$ c* l. Y2 c7 B# \: r
  709.       dwStartUpSteps=2;
    . S! d: |( l" F0 L/ G# s/ H; x2 X" H
  710.       break;
    ( p" x  w8 J6 w# @
  711.     case 2:) Q) q. _$ x4 s+ ^$ Z% G- }& z  _
  712.       {
    " C0 m) x# j, [$ ]# `
  713.         int iEOF;. L5 x6 T* E, U0 B; X
  714.         FILE *fp;
    8 S2 M- b+ v5 ~7 ^; I/ b1 G! t! O
  715.         char szString[512];
    2 W' ]2 @4 _# u8 `! a" F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
      L  c3 l, d8 k8 U. C' V
  717.         if(fp)
    ' L% ?% E: d1 C& J8 }
  718.         {& ^4 m0 W- E5 }, ?
  719.           do
    4 \$ K0 H5 k+ J$ \# n- i5 C
  720.           {
    ! e! [. O. ?& W  x
  721.             iEOF=fscanf(fp,"%s",szString);
    . x( w( ]2 j" Q0 g' c7 q; {+ h
  722.             if(strlen(szString))
    , w, X/ k+ u& j! {1 m( _
  723.             {# Z  G6 X; U& Q) P% b6 F
  724.               if(bFirstChar)1 I( _* @5 D" |
  725.               {
    ! w2 q: F3 ^+ V/ s0 ]
  726.                 bFirstChar=FALSE;
    6 P' E+ d3 M7 _- b4 C' n- }
  727.                 bConnectIsBig5=FALSE;2 J3 I' h1 Q9 F: w1 |4 S! R5 b# f
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    5 w' ^+ e+ D6 v  R
  729.               }
    0 V, A4 W. j" v# V% v( V
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    , U  ~& A( t% K/ I$ T) W  ?$ k
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    7 F! R) h1 T% H. W, o- N) b6 Y, Q
  732.               dlg->m_ListText.AddString(szString);/ w% _) P  d# j2 L$ |
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . O5 C  T6 T; H3 R, @- O' t+ n9 h
  734.               *szString=0;
    ' w& W9 ?; s* i* v3 k2 G+ y
  735.             }
    . L" o% }1 i9 P, `* D
  736.           } while(iEOF!=EOF);8 E2 [' k) e7 Y
  737.           fclose(fp);* O2 E8 w: {( l8 F0 d4 v
  738.           unlink(".\\DownLoad\\readme.txt");
    ) P& l4 _- q* p* ~, Q
  739.           dwStartUpSteps=3;
    2 J/ `+ ~! \1 O. p3 V) a3 A/ f* I1 e
  740.         }
    4 f4 o. [/ Y/ H2 d' \9 z! z
  741.       }
    - @. D8 I. |* H0 e- e. x
  742.       break;9 r& \2 E8 m  }, N$ Z
  743.     case 3:. B1 I; d$ a6 D& X+ W0 p: y) W$ w
  744.       if(!Dn.Connected())+ m% H7 m6 _; l3 l/ V
  745.       {
    ; o6 d$ ]' ~' h
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    . L% g! v. J9 T& D. P; g
  747.         dwTotalFiles=1;
    & ]  q2 I: s) I; [" }4 M! f
  748.         dwDownLoaded=0;1 e+ @9 v# ^2 \
  749.         bSilentStep=TRUE;1 ^4 I# O+ e/ Y, s4 h
  750.         bCompressed=FALSE;7 c' f# L5 r# L- A. {
  751.         strExtLocal.Empty();* {) B" R3 \8 j8 ^* M3 R  R# C. |" {
  752.         strFullName="checkversion.txt";0 G$ W9 [& S, q3 S7 s: L
  753.         dwProgramState=AP_CONNECT;- t4 G" D$ v+ g4 f1 C/ T
  754.       }1 ]( F3 h1 @. ?
  755.       dwStartUpSteps=4;& R& H( I1 J) ?, A/ i& f3 v
  756.       break;
    0 M3 e) X7 w1 K* K) t* T1 g$ i
  757.     case 4:9 J* ~1 G& O: ]# ~) T, r( I1 M# T& Q
  758.       {; h- S1 A$ u: I9 W" \3 d4 O0 a% y
  759.         FILE *fp;
    . B" ?, B% x4 \
  760.         char szString1[128];
    / u/ j7 J0 Y, r$ }! i; v
  761.         char szString2[128];
    # |* o. a% n9 p1 e- P# F- w
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");6 i1 ]" z% b! M& K6 e
  763.         if(fp)( d+ B2 s* C6 ~) L0 V; S
  764.         {, r8 K  q) [! j) Q9 [9 C: K
  765.           fscanf(fp,"%s",szString1);
    8 y9 s2 d+ T% \5 x( P/ J- |) \
  766.           fclose(fp);
    : k% f! a% {. T0 b
  767.           fCheckVersion=atof(szString1);
    + j: w" ~6 R5 X4 t& W, B2 e9 @
  768.           fp=fopen(".\\checkversion.dat","r");& j. H8 @, w  \3 \% R5 B4 s
  769.           if(fp)/ F9 n: B8 f! v% e! t
  770.           {8 B* q; f2 p, a7 s0 @8 L4 _  @
  771.             fscanf(fp,"%s",szString2);
    2 U# Z2 G$ F6 g! x4 {' }
  772.             fclose(fp);
    ! m4 |1 h* Z- \: F' S- H- c
  773.             if(atof(szString1)!=atof(szString2))
    % O/ Q( y" M$ a; i6 d1 v) [# b' R6 H
  774.             {
    * r& ~' T: P( O
  775.               if(!Dn.Connected()); O2 b( @2 j! z$ O* w0 g' T
  776.               {2 b3 c( w& U4 P. B
  777.                 bFirstUpdate=TRUE;
    + r# F4 Y+ J2 X
  778.                 dwTotalFiles=1;
    9 n) \3 a/ j! [! e2 z
  779.                 dwDownLoaded=0;( V0 r8 o) v' D- l# l" X. a
  780.                 bSilentStep=FALSE;
    ' V5 X# ^3 t' G
  781.                 bCompressed=TRUE;1 S) r4 o5 e& b1 R% Y* j
  782.                 strExtLocal=".\\DownLoad\";$ ^, ]! X5 ?- X' Z. ^
  783.                 strFullName="update.txt";
    % p2 b1 f7 c6 }) N" u
  784.                 dwProgramState=AP_CONNECT;
    0 H" M* Z4 f3 C" L9 ?  g; Y: F
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . v- W9 ~, F. d4 q8 P7 A; X8 D# }
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! W0 |" o! A* B& P; a' E
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 I! b0 P: F  U- X

  788. ' f  c5 P& m% k4 i
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # N/ ~3 [4 W5 A0 E9 y! H
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ) j0 G( B) d- Z8 x& ~
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)8 s; [2 g* i5 L/ _5 r
  792.                 {' p* T5 L, D* Z, W: L9 c. v
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");8 G. @! ?, B( s8 Q! X$ N4 c" b
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ! F  V' X0 I) m0 U9 ~! e
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");2 E3 l" c- J9 l1 Y4 n* m
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , u4 ?3 [' Y; r0 i: L+ N

  797. 9 \) d! I+ |, A9 N
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");( q! [4 G0 L( p; p( d
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 O" l4 e/ h; s$ h) m
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    " M" R, K5 Y' @/ C0 I
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' {. b1 _, W& n# N) w% U
  802.                 }) }/ Q, z, k. e3 b; A
  803.                 dwStartUpSteps=5;
    ! k3 l, j: Z9 ?
  804.               }! u" e3 e4 j7 [- i; E
  805.             }% k  [) I9 s) {4 ~# x
  806.             else. l0 G8 T: B2 x% t  X" {+ r
  807.             {
    6 T! R9 e$ r5 J$ T
  808.               unlink(".\\DownLoad\\checkversion.txt");
    / [# I5 l* r0 M
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    . e9 ~9 H& \5 l2 e1 J) t
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");3 K# t, D1 T# P2 M+ s. h
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    / C) k: }# f" p3 M
  812. : Z! T+ \3 `: q8 v  _9 b: O
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; \# q0 C3 [- F( y0 H0 h8 `4 X
  814.               dwStartUpSteps=99;3 m. G; `& n- Q& [
  815.               bFinishUpdated=TRUE;8 H' c* {; o8 S- R+ f9 V# N
  816.               bCanUpdate=TRUE;" o2 A+ w0 F/ ?- E$ h( [2 B" h* K
  817.             }5 L% T9 I& c4 C8 Q
  818.           }
    # I; Y& \; d, O: y7 [+ e) ?# q6 J
  819.           else
    + E# L( s, Y& J8 r. H$ ?
  820.           {6 {) v( f" d2 _+ X8 k
  821.             if(!Dn.Connected())
    4 F/ R% Q; H; L: L5 l( u* G0 J
  822.             {
    & z' ]6 Z7 d: l1 G! Z, M6 z. _2 K
  823.               bFirstUpdate=TRUE;9 ?0 `% i+ S5 H( a1 H" }% ]' T. L) g
  824.               dwTotalFiles=1;5 D8 \2 E9 U( I! [7 m  x
  825.               dwDownLoaded=0;2 F+ g$ A4 L; M% y& H  Q+ _' u
  826.               bSilentStep=FALSE;
    : F( @8 c8 F; {0 m# |6 }' a
  827.               bCompressed=TRUE;
    * {3 ]3 U4 K5 n- v+ ~3 v
  828.               strExtLocal=".\\DownLoad\";
    % y/ y8 o( ?# Y% v$ c5 a) M
  829.               strFullName="update.txt";
    $ @% ?1 F5 E7 ~- E& U( E3 I) T8 }$ o
  830.               dwProgramState=AP_CONNECT;4 [, v6 m* ?  y0 `
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 v. R' ?2 v) N( I, k: `1 [
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 O+ q7 s: R" O/ o% U
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 t( ]# C# o; n
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& g* M2 s5 L" i7 E- u
  835.               unlink(".\\DownLoad\\checkversion.txt");! T# {) }1 K4 T0 @( p% y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)( I- L8 y8 M3 a' [, F- j
  837.               {# N$ W( I* F' f+ o$ Q# \
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    " Y8 D+ @) ]: t% W" {6 ]' O; \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    / E. A& ?; h/ b& E1 M* B
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");0 `3 W) T$ @9 _
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 h2 C+ I' B: b9 N- ^' }" ]
  842.                 - b* R8 r7 P+ U. `
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 k& b0 l0 N" ~/ g7 _$ _
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    1 Z$ |8 n' N5 x. K, u
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    # z9 e- {5 H) z7 y. V9 w
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 D* o- M. Z# e5 H$ x$ T! x
  847.               }
    & {, |* k+ K$ p( X
  848.               dwStartUpSteps=5;
    9 G) N1 o3 U1 ?$ i4 s
  849.             }5 j  U0 q, B5 J" ~: L$ r8 u7 l  ~
  850.           }
    2 v, s$ y2 C9 U
  851.         }+ i% _$ G7 a$ A4 _4 T5 n7 F
  852.         else7 L) X7 {: i' p% G6 d$ `% n7 r
  853.         {
    * z- f% V! _2 Q* I
  854.           dwStartUpSteps=3;
    * p; _3 M4 d; S% Q* P
  855.         }% r! S$ M1 x1 D* K5 j1 G
  856.       }$ \, r" ]; P. q- @. |
  857.       break;. y: O+ ^& s1 A+ u) L
  858.     case 5:
    6 z1 v0 d5 p+ M
  859.       {% C3 ?& W; `  u7 T1 T3 C% Q( a) d* j1 N
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    8 o9 r% s9 W/ F$ _9 ?0 X
  861.         {
    - _; t2 O# y, `
  862.           int opt_overwrite=1;8 q. e3 `0 a5 ~% W0 l- D5 {# N& W- @
  863.           int opt_do_extract_withoutpath=0;  ]; _3 @: H! Q
  864.           unzFile uf=NULL;
    0 o2 d$ ~, Z- M$ d8 i0 `

  865. 8 G5 f% e" j+ c1 x
  866.           uf=unzOpen("Wsa.zip");! M3 W0 e1 Q8 N9 ^2 B" q# p
  867.           if(uf)
    7 w4 h( \/ [7 \& ]
  868.           {
    # j: w5 c- @- p- K3 t) d
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    " W7 }/ j4 ~& f* y0 L$ a$ V% t
  870.             unzClose(uf);3 P6 \. o4 t0 T6 s/ E! m
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    " H* \% z+ z+ O5 y3 R
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    2 L. W3 i( W2 e% B
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");) I) C( J: U9 W
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 z; G% k! V- ^
  875.           }
    3 l6 M% D0 v: H0 J+ c/ T
  876.           DeleteFile("Wsa.zip" );
      _9 c" o# A& k& P2 X
  877.         }1 \$ _0 X6 R/ j- Q0 d

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

! @* k4 P- p/ W% f/ A( _: n: @3 Q9 `% T6 z( V

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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