找回密碼
 立即注册

CSUpdate.exe源代码

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

- a$ W  o: _; Z* J; O) D
  1. / RevApp.cpp : Defines the class behaviors for the application.
    + ?0 t. m) L+ `' T- l
  2. //
    9 b& R+ u, B+ Y3 l- R' m6 ~5 \3 ]' _

  3. 8 I, R/ i- y3 W+ i# e
  4. #include "stdafx.h"
    : T9 i' [# {5 U& m
  5. - r7 {8 B4 F4 ~9 N0 F
  6. //#define UNICODE; P* m/ `  ]' m
  7. //#include <gdiplus.h>3 |/ `3 c# a3 Z: p0 U
  8. //using namespace Gdiplus;9 ~0 A1 Z" I7 H0 M

  9. 8 e, Q. u/ @+ `
  10. #include "RevApp.h": s" Z% T' b& p5 a2 b6 k( Y
  11. #include "RevAppDlg.h"
    ' b. [' L8 `. w) D% V$ v! x! H% q

  12.   p( H9 r) B* R  _7 j
  13. #pragma warning(disable:4786)
    / @' l, b' q! O+ E6 ]
  14. #include <map>4 J" _, p! {: N( Q. p  _5 u7 `5 H
  15. #include <list>
    * h1 X: t2 e6 S$ C( d3 @
  16. #include <direct.h>
    - y# U# Y. V2 A/ [: q! w' j
  17. , o& P, K& s% w6 X  T7 z8 [
  18. #ifdef _DEBUG
    1 ?3 Z3 Y) B3 R# C3 N8 |$ t! S( }- S
  19. #define new DEBUG_NEW
    # L; d1 ?: ?; A& X, l0 ]
  20. #undef THIS_FILE
    4 N) ~: {6 C9 t% m, I9 [4 Z+ N+ P
  21. static char THIS_FILE[] = __FILE__;
    2 n+ W$ c8 F; L
  22. #endif! q4 i: \9 a3 w, P3 R- k" K' u9 m
  23. #include "SkinResDef.h"
    1 H( k' ~4 G4 X- b7 h, g
  24. #include "ChangeBG.h"' L3 ~! b- [& p2 ^1 Y8 @3 V
  25. #include "AFXINET.H"( r: H" Q$ S6 S
  26. , k& S: O1 m! u1 I
  27. #define TRADITIONAL_CHINESE 0
    # Q5 n8 g* S( N3 b
  28. #define SIMPLIFY_CHINESE 10 X! y1 S/ K: s0 q: i8 n+ ?% G) |
  29. #define ENGLISH 2
    : x3 Q8 C* i" j! _9 E) r
  30. int m_iLanguage = ENGLISH;0 E8 H! D' }6 u( P3 {
  31. /////////////////////////////////////////////////////////////////////////////$ p4 @: Q) s. |1 @" ?
  32. // CRevAppApp
    1 q' C7 |3 x- ?2 ~$ d1 {
  33. 4 V% u0 m0 v+ T" k4 V  {
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)/ q! D; ^9 a" f
  35.         //{{AFX_MSG_MAP(CRevAppApp)9 b2 i+ `8 I( f& I* p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    - o" S! }3 {6 L) b1 u
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    1 A+ j: Y: h% E8 F) P$ M
  38.         //}}AFX_MSG; _; ~3 N4 L$ N7 H# A# M: B4 X$ \
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    % D% _' L# B; h4 K- ]1 H
  40. END_MESSAGE_MAP()) k3 r7 ?( p* O- \

  41. $ o1 _* S: z# ^5 l
  42. /////////////////////////////////////////////////////////////////////////////
    6 I0 G7 E: J) ^% K
  43. // CRevAppApp construction. x5 U" N, V5 p* Y9 f

  44. $ E0 H6 e* ~1 x% V# S. C) [3 y( j
  45. CRevAppApp::CRevAppApp()
    % `: B& o9 t. c) |" }% |
  46. {- R' ^" E& K& m1 g0 S: h3 Q  m
  47.         // TODO: add construction code here,( M: M  u" J* i
  48.         // Place all significant initialization in InitInstance
    ! i* h4 l* _9 f! \5 f
  49.   bDisplayIsBig5=FALSE;
    % S/ }4 D  `! `& w1 L3 d
  50.   bRestartUpdater=FALSE;% W& F# j8 U+ ]5 M0 ^: G* b2 ]
  51.   bFinishUpdated=FALSE;
    5 w6 s# j' s+ W- D5 M4 O
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ; d  e& W7 M; ]! f) B8 I* |
  53.   InitChangeDataBig52GBKS();2 i  u) E4 F1 f- I' C+ k' _
  54.   InitChangeDataGBKS2Big5();
    3 z( a( b( t$ n( y  Q- e7 b
  55.         //4 E0 O* m; b8 d! Q7 ?; O
  56.         bClickRunExe = FALSE;3 O- R/ {* }% Z' p. x: ^% p
  57.         //
    ) h7 _0 L! i, u
  58. }
    6 x. l+ T5 }8 l% R" K% R

  59. " q8 x9 Z7 \) l" w4 y
  60. CRevAppApp::~CRevAppApp()& \4 e7 [1 H; q, P3 [/ G
  61. {# g& R4 U* e' H9 R, m1 e' x
  62.         // TODO: add construction code here,! I9 M8 P. a4 |8 Q8 Z2 D
  63.         // Place all significant initialization in InitInstance: P5 Z, v! w" {
  64.   EndChangeData();8 g$ L% k( E: _6 ]) {9 \
  65. }
    ' W, K  z/ o& A4 s2 Y- h" B# \

  66. 9 ~* Q& y+ m$ y" d
  67. /////////////////////////////////////////////////////////////////////////////: ?) X, T5 A* x) t
  68. // The one and only CRevAppApp object0 v& e4 n5 w" A+ X

  69. * a9 l, o/ n5 |. {+ ^( Y
  70. CRevAppApp theApp;
    # N/ W$ }4 W- ~* ^: v9 l
  71. , @1 D2 b( n2 B3 l+ V
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)' L/ ]7 t5 _  v* T" L: [
  73. {
    : y, z- l, y! V: L& V" n9 a6 ?4 B
  74.   int iEOF=0;
    ' ^+ m' j) l6 S0 p) B4 l+ `! _
  75.   char szTempName[MAX_PATH];
    & c/ T/ l( h( v/ r
  76.   *szFileName=0;
    6 Y: W; @1 P3 J# E
  77.   iEOF=fscanf(fp,"%s",szTempName);) T% U( w" u) f8 o. ^
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    - {- E! ]% ?6 Z! d
  79.   {' {6 b( H1 b- h1 U  [$ u' L  ]
  80.     strcpy(szFileName,&szTempName[1]);6 k- N0 T/ M* n2 c6 W
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF), O- \( ~0 O9 ^/ T1 N+ D: m
  82.     {
    4 K) u6 h% o: i, \
  83.       iEOF=fscanf(fp,"%s",szTempName);& m4 L3 Z0 m% s8 n4 B
  84.       strcat(szFileName," ");5 g. ?0 s/ L; i' ?+ m; @8 a! [
  85.       strcat(szFileName,szTempName);* p2 r$ p: s3 i- t# ]* z
  86.     }
    0 c1 s9 e, _& K. P% q: v( h
  87.     if(strlen(szFileName)>=1)
    / k+ v" r  Y2 Q! s
  88.     {
    ' ?: S  _4 Q. k, t" z
  89.       szFileName[strlen(szFileName)-1]=0;2 ^- k9 d+ d' V: m0 f2 k
  90.     }
    % `+ b- s! Z% P# L4 `2 N: Y4 Q
  91.   }
    ) r2 ]* {7 o& r, F+ ?4 x
  92.   return szFileName;
      }, P% p( X& F: ^. Q+ Z) R
  93. }
    " Y8 G$ r* a! t9 B, n* D3 @

  94. # o  D  ?/ l; `) }5 S! [8 a
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)1 H+ l, T7 G: ?( V
  96. {# ], Z0 W, m2 b9 i
  97.   FILE *fp;; m3 `; p7 K( E( t8 v3 R
  98.   char *key=NULL;
    3 \7 l' t' F  ?' Z. J$ ~
  99.   char version[MAX_PATH];7 b3 j: L+ h8 @/ T, G  D
  100.   LPUPDATEFILE file,olds;
    * Y0 ~- v: s  K+ V3 K4 n3 p  @
  101.   std::map<CString,LPUPDATEFILE>::iterator p;' L" O1 g2 o2 E: E& E, B

  102. 5 y8 m3 _9 w8 V2 s' k. r& n) ]
  103.   UpdateList.clear();
      a- N1 f- Q( [- F; x! U" ?
  104.   UpdateFile.clear();! b: K" V: R/ V3 p
  105.   if(GetFileAttributes(filename)==-1) return false;
    4 ~$ \, @& p5 P
  106.   if(!(fp=fopen(filename,"r"))) return false;( [* Q0 u+ I8 N8 T" h" l: R& D
  107.   fscanf(fp,"%s",version);/ Y, B$ ]5 K/ S- f! A5 W+ ~
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    0 Z7 q, O& y% V5 F- n0 n/ r
  109.   while(fscanf(fp,"%s",version)!=EOF)( ~) i0 Z- e+ ]
  110.   {
    + A4 ^! l' P/ ]+ H2 H) @
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 g7 y! B" d) G9 t/ r
  112.     fscanf(fp,"%s",file->path);+ R2 k$ o# B/ {1 U
  113.     ReadFileNames(fp,file->file);& L; h" }- a5 i9 a- ~0 I
  114.     strcpy(file->full,".");3 T) P/ J& a* M/ Z, ^
  115.     strcat(file->full,file->path);
    1 [/ U5 m8 f, ^
  116.     strcat(file->full,file->file);
    6 T, `) L& ]1 Y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    8 j3 y+ y+ E' C
  118.     {
    ! x, }  S( x, h- v) k- ^' F
  119.       file->vers=(float)atof(version);
    5 U. n7 B+ q) O- g6 N% Z. D: q/ c
  120.       UpdateList.push_back(file->full);
    # W! k/ g! X+ D. \3 i
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    8 ^+ }3 Y# n0 {6 L" P& T7 C
  122.     }
    ! n6 x; O( J. G6 c
  123.     else
    0 w, ]$ F( f# f; B. e" t
  124.     {
    ( H# g5 c6 L0 {, }& x" c; u
  125.       olds=(*p).second;, S" b# ~. {7 S7 [  C
  126.       if(olds->vers<(float)atof(version)), m. x8 [8 C; L+ v( T- p# K
  127.       {
    ! P" H* a6 T' S, Z6 }+ L1 c* H
  128.         olds->vers=(float)atof(version);* x! Z8 B2 z/ g# l- K
  129.       }* W1 z' ?# \+ D2 R' ^+ @" c
  130.       free(file);' R% g7 o2 \3 ]6 t. q- F- @
  131.     }3 r% q: |+ }6 H4 u1 s4 `+ O. F
  132.   }
    5 u+ S( G' \# @  C& a
  133.   fclose(fp);
    8 M+ c/ f( b$ u2 k8 @
  134.   return true;; f/ n& K- r: A; E. W3 s! D
  135. }
    6 L5 x. Z8 P! Q; {4 o  ~0 K! \

  136. 4 b. J0 k3 y3 x. \' W
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ' b9 V3 e- v) E% e9 v% p  P
  138. {
    * K) g0 L" q+ w3 ^4 k; Z3 ]
  139.   TCHAR  szFull[MAX_PATH];
    9 b% i5 e" j$ s
  140.   TCHAR *token,*inter;
    6 j1 ?1 z* I. r/ W, h0 w
  141.   *szPath=0;& e/ a3 M) g  U$ x' x
  142.   strcpy(szFull,szFullPath);! N5 [3 I! U. _+ I0 |
  143.   token=strtok(szFull,"\\/");- _& d& y3 e. Q% J1 ~1 X
  144.   inter=token;1 q% k" O; ]1 y  G
  145.   while(token=strtok(NULL,"\\/"))
    , v' J; D6 L0 D, d
  146.   {/ o9 V% Y" f0 q; Y
  147.     strcat(szPath,inter);2 v) }  i9 h& @/ \) P
  148.     strcat(szPath,"\");$ o9 |- n3 R0 x) H6 V
  149.     inter=token;" B4 d1 O7 u; O9 |$ U6 p9 g+ E
  150.   }4 k$ C1 N( I) G1 l( i9 I8 H* L
  151.   return strlen(szPath);
    1 l" j$ a. W& Z0 _; m! U
  152. }
    0 P! b6 x; h& P8 a  M* }

  153. 1 \6 w7 y+ m! C) p
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)/ e" T  S$ X0 [; \" Q+ _
  155. {- [: t' C; r7 _9 S8 _
  156.   DWORD attrib=GetFileAttributes(Target);7 W; R6 D: p$ N  Z
  157.   if(attrib!=-1)
    5 N) t9 c& a- H% W$ M" W( _- i
  158.   {
    , {$ [4 c* z2 H( O: Q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ ^3 g. z- S( d5 I6 w
  160.     {
    * p1 t- u$ q! @% i' M
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);6 O# G9 f" O; d5 X$ n( R
  162.       SetFileAttributes(Target,attrib);3 d! c& s3 e& l; }% M+ e% r
  163.     }1 E/ {& A9 X" Q- q
  164.   }
    ! P1 U$ J. Z! a" W
  165.   CopyFile(Source,Target,Erase);: E$ K# [5 Y3 Z5 f
  166. }% }8 n- {1 ]& L% Q* F7 U8 i  {3 @

  167. 1 m7 L3 I6 K" x+ w& p/ ~  w
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ r; G* q8 ]4 I, u$ l4 f1 J
  169. {8 m9 K8 u8 [; Y0 u+ |
  170.      FILE *fp;
    , I* w1 u" F$ Z0 N* @
  171.      char  szBuffer[8192];
    " Q1 A& s5 T  E2 @/ b0 U$ f1 S
  172.   va_list  argptr;
    " }3 u$ U% [8 i3 p% Q' ^5 |

  173. , \1 Q9 ]3 O4 d( T- h6 M0 {
  174.         va_start(argptr,message);
    ( w! b4 r% y% Z5 g* E
  175.         vsprintf(szBuffer,message,argptr);- P8 p* `0 ]2 i! ~% T$ B
  176.         va_end(argptr);* b0 x2 I% V3 _2 P% c5 ~
  177.   fp=fopen(FileName,"a");
    4 y" B5 k* R0 T) t4 X& T0 ~1 I# D
  178.   if(fp)
    + z1 [! B" Y3 }' s, o7 \
  179.   {9 b! z8 C4 Q1 n2 r* n# c
  180.     fprintf(fp,szBuffer);* l8 c. e6 h* P1 E, U8 X% u+ R: ^
  181.     fclose(fp);
    5 q# N! x" C1 B. p2 ]
  182.           _flushall();7 j6 [% _3 ~: }  s9 P* ?* f  ~
  183.   }
    - e" d0 i0 F. s; Q3 N  ~/ Q
  184. }
    , v5 O; i; r/ y
  185. 3 \. A3 N. N. X" p; @2 X
  186. BOOL CRevAppApp::Fclearf(char *FileName)! S; K6 _5 `2 j1 `1 i
  187. {# v2 `1 X5 X9 W
  188.      FILE *fp;3 q$ D! m, T9 s4 \( I- k: S
  189.     DWORD  attrib;; \% B. ]1 v# V: y
  190.   attrib=GetFileAttributes(FileName);
    $ o$ ?* s( X. e2 |8 q% m7 C1 ^, F
  191.   if(attrib!=-1)
    ! l( J, v5 p; Y; R
  192.   {
    ! m/ p( d$ X7 s1 N3 |1 m: t: N* E
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      Q: H$ i- \& j* d5 J; N: P
  194.     if(!SetFileAttributes(FileName,attrib))
    " i0 R% Q! D- H5 b8 O: @: J
  195.     {
    - S- D3 [. A# ^; |) u- a
  196.       return FALSE;2 A) w$ ]  K0 E: ~$ d, d
  197.     }
    ; u8 B: j( e# w! d' S2 v; O
  198.   }4 ~2 P; A! s9 u% R* A7 Z0 s
  199.   fp=fopen(FileName,"wb");
    2 D: W6 q0 O/ P- q, y* j( d
  200.   if(fp)
    & F4 r$ k8 X& E, N1 ?! R7 l
  201.   {
    % n0 i- b1 s  }4 L7 x2 l- j8 R  N
  202.     fclose(fp);; X- J+ L8 }& N8 B  r+ g
  203.   }
    $ d2 a- j) V, B" d* x5 p
  204.   return TRUE;
      Q- k. ]4 k9 ~/ @# L1 u
  205. }/ [; y) c9 b7 T$ h- d: j6 z+ `
  206. ! s. e0 \( i! c+ `' w  H* ?1 P9 l! O
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + P* c) S- U" I& z1 h2 t
  208. {: i7 z% D, A2 K1 n0 g" S0 |: |
  209.   char filename[MAX_PATH];
    / T5 D7 E+ R, U9 F. l
  210.   LPUPDATEFILE file,olds;
    3 P5 W1 G' ~2 Z( G; o0 @
  211.   std::map<int,CString>::iterator i;
    . k* @9 n$ o! A+ c- I
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    - `" Z/ U/ x  O, P8 G' z
  213.   std::list<CString>::iterator l;; G* i+ g' \7 A# {$ s  j

  214. 6 o2 }$ H: L6 }4 s( i
  215.   if(bFirstUpdate)6 Y; V8 E9 Q: T+ o7 R0 H
  216.   {
    , n8 V( X1 C1 ]' H+ k: t( _3 [
  217.     dwCurrFile=0;
    7 s2 E2 {  j9 W- _0 y/ ]+ `
  218.     bFirstUpdate=FALSE;
    $ d# z8 B; a. q  M6 S, r9 X
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    6 G+ r: T; |; u! _. Z% o( @
  220.     {
    7 x1 }* `& A1 J0 `& @
  221.       dwTotalFiles=UpdateLocal.size();
    6 M1 }; k0 p. G9 P
  222.       dwDownLoaded=0;
    - I# @& u" [# r8 s; D
  223.       bSilentStep=FALSE;
    8 B$ \! a! K% v; ~  C9 e2 H& {
  224.       bCompressed=TRUE;* K! R# ^7 b. ^& W! b3 c% ]5 p7 i2 s
  225.       strExtLocal.Empty();
    : e8 H" T: ]7 z  J. _
  226.       strFullName=(*i).second;
    " J; e; N$ ?3 V
  227.       dwProgramState=AP_CONNECT;
    0 R- ^0 w* w4 u& x- G/ b& n# X
  228.       return TRUE;6 ^6 [9 g- Y" o* m7 y4 D
  229.     }1 l9 ?9 {- R) A" ]7 A
  230.   }
    9 ]/ U! U* p. j0 K2 |# S
  231.   else if(bRestartUpdater==FALSE)
    * M5 q6 R- }* B; h1 ?
  232.   {
    4 D# V# T  x, W" Z# X
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ( ?# R9 G) C2 l# V- D. Z
  234.     {" H% R. n: }' ?9 ]" H0 |/ x) K
  235.       file=(*p).second;
    0 i1 j6 q5 T: }
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())! N, q: ~  k9 e3 m& X' Y
  237.       {
    : h. v; T' W4 s% s9 Y  G. o! B
  238.         olds=(*p).second;8 c5 Q5 R1 }6 g' \
  239.         olds->vers=file->vers;
    / u; p# K7 |1 H& l
  240.       }* U+ R1 h/ Y$ g
  241.       else  R5 ^' r1 b" D' U" e
  242.       {$ A- J# y5 a7 x1 ~) J( R( G
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ X) S6 V% u5 d
  244.         memcpy(olds,file,sizeof(UPDATEFILE));. Q* E: j8 w; q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));. s8 C2 {1 F+ e) `# P2 {! R/ G
  246.       }4 P" U, E: I$ b5 [% n- [
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    5 w8 t, x  T! |& e* H& K8 E4 W5 }2 I
  248.       sprintf(filename,"(%s)",file->file);
    - `5 v! L5 d4 @# {& o' U+ i% i
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 w( x$ M( r- i. W
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
      y4 U7 p0 b" H, x, H& Y; C; o
  251.     }
    ) w1 N+ \% b2 l9 @$ I1 c
  252.     dwCurrFile++;0 N( l1 }. }* D# q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); k) }1 r+ E. c" P; F" C
  254.     {
    / _4 T  i  y. C$ X/ t4 O+ A
  255.       bSilentStep=FALSE;) f% {" V$ F; L
  256.       bCompressed=TRUE;
    , F' m' N" {+ b/ L3 S: ~
  257.       strExtLocal.Empty();  o: b" G4 S( P
  258.       strFullName=(*i).second;& s$ Y! ^1 t$ F# p3 `2 R
  259.       dwProgramState=AP_CONNECT;
    ) Y" _% X' F! h& b' Y8 p6 @
  260.       return TRUE;* H  H" T; R% {) G
  261.     }
    $ o+ v+ Q9 _* O# }
  262.     if(!bRestartUpdater)8 [$ `% l- w. a* Q, P8 H( x% x2 d% \4 y3 _
  263.     {
    2 x) c# K7 x+ x7 r2 Y$ P; A. `6 H1 t
  264.       int iCurrSize,iFileSize;$ t) l* a# }" b' c7 Y
  265.       iCurrSize=0;/ E. P2 Q1 G: i
  266.       iFileSize=UpdateList2.size();
    0 ^* J; |1 {! d8 F0 ?+ a& c4 R8 `
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % R8 S+ M& H2 ^0 O* a. R$ M" e
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");5 W0 A& w4 K5 X
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");' l; ^4 y7 [8 x3 q: h' i$ v0 L
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & e7 a! v, d5 Y, k0 O$ J8 f* Z5 R
  271.       Fclearf(".\\update.dat");
    3 }% C* e, _! k9 ?' T! Y
  272.       Fprintf(".\\update.dat","Bloodyf\n");( {, I9 @# z1 S: w" Z! b; U% F' S
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) A) q4 m5 g$ H% q- n( Y" m) T
  274.       {
    4 J3 s) J6 v) X% U* d0 v6 F
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    : M* y6 s2 i4 o' T$ w' e
  276.         {
    " K9 K* ^% F' f2 a* n% L/ P
  277.           file=(*p).second;
    2 d$ Q  c. e% }) ~3 H! k8 h
  278.           sprintf(filename,"(%s)",file->file);
    9 O' U  |6 n! l: K6 R. i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! i! F7 ~/ O2 P' Q6 p3 g7 S1 u
  280.           iCurrSize++;* Q. v4 i* X/ J# E
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    , _: v) G1 c5 \5 l; b
  282.         }7 W4 V# L, E/ H# x3 ~5 {, d' P
  283.       }4 D0 f1 C  H2 m& {$ D
  284.       unlink(".\\update.txt");
    ) V5 Y$ L7 e4 C( A2 K) R
  285.       unlink(".\\update.tmp");8 M+ U) M( A* K; Y8 b
  286.       Fclearf(".\\checkversion.dat");
    . i! G9 X, a# U! ^. u0 {* u
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);- z& M, u* t3 t& `5 y9 v  A
  288.       if(UpdateLocal.size())
    7 d3 i4 b. L. e; }4 p; a. X
  289.       {' w; g, _4 Y# m! A
  290.         UpdateLocal.clear();
    & x/ I7 {6 V/ {  O, T# J) r
  291.       }
    6 \) o) E0 K9 u
  292.       if(UpdateFile3.size())
    ! d" U' ]' n& l/ U1 S  o
  293.       {2 T: X7 i: [0 J9 @
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  p* D3 V+ @2 @/ a
  295.         {+ R. D* C& R5 _4 w
  296.           file=(*p).second;8 ]2 D/ l8 `4 h: a7 s' O
  297.           free(file);4 G& x  A% Y. t( f# x
  298.         }8 @. u+ y' I# v, S* k
  299.         UpdateFile3.clear();7 H5 K% D- h- {/ G% N
  300.         UpdateList3.clear();, B6 J& [6 T( i9 K6 `9 x/ `
  301.       }
    + b8 A% F. E, k6 b9 l; e9 S
  302.       if(UpdateFile2.size())
    & d6 ^/ g& |7 g: ~+ C
  303.       {3 ^. ?9 d( ?2 t. [3 i5 y
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 }" N. T/ j, Y+ y
  305.         {
    % A# E5 O9 G- t0 @" n8 h% h
  306.           file=(*p).second;; P  r$ Y8 ^9 D( B6 {
  307.           free(file);
    5 m( x* R9 l2 S; U
  308.         }/ C- G* t  d1 A; [+ f; W
  309.         UpdateFile2.clear();+ ^2 P8 c, B+ Y) B, r. C. c
  310.         UpdateList2.clear();3 l- O9 F$ m7 E# M2 x" }7 [
  311.       }
    # m! Y+ `( T7 ]  g# g: d$ `/ c
  312.       if(UpdateFile1.size()); ~, }: }# B! i
  313.       {0 p9 q0 Q* _7 @1 P
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)8 v# T8 R0 I+ G; K9 p7 j. ~8 m5 X
  315.         {
    $ y0 s% t& W5 W) ~; I& ?
  316.           file=(*p).second;
    ' ~: q  Y6 E/ o! q& w
  317.           free(file);  W" x# |; o/ T+ W
  318.         }
    6 w! I3 E3 @. k" \8 q- T9 b
  319.         UpdateFile1.clear();
    3 O2 j2 ]& k6 O  l7 P& ?
  320.         UpdateList1.clear();' m/ z, P( Y4 s) `
  321.       }
    + D0 i! D" [6 P  u( k' U: J
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));; n7 w0 T  k/ J
  323.     }$ |" @: b$ e! N: ~8 O" C
  324.   }
    * G7 Z( J$ p! J2 [
  325.   return FALSE;
    / w9 d( g5 N3 W2 m) c$ |( D( k' A
  326. }* J5 l' I3 N6 o" x, m
  327. ) @: N2 B2 w5 [, U1 r
  328. void CRevAppApp::ClearAll(void)0 T3 u* s6 i6 I% X+ Y* `* u
  329. {
    * ~; K" w0 j2 h  n# E  x5 z
  330.   LPUPDATEFILE file;" {! C0 K- N) Q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;) ]: \4 O' d8 a6 [  O  S
  332. 6 o4 p0 A9 C0 D* }! Y5 Q/ F  k* S
  333.   if(UpdateLocal.size())
    " @! W  P; B0 X$ G
  334.   {
    + g# g  _! |* G- L1 H9 d
  335.     UpdateLocal.clear();
    - t3 z& D4 y  F% m9 n$ w
  336.   }. ]$ [& U2 O+ d
  337.   if(UpdateFile3.size())
    ! M& {. L% F) S& L+ `
  338.   {
    + W: N% u7 |0 K/ ~
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " V& t& d2 ?. J0 r5 n' M
  340.     {' e! |% n8 u3 d' J
  341.       file=(*p).second;
    " X/ m/ H* S) e8 l" K/ b
  342.       free(file);
    4 G9 f) V  Q8 W" R- w7 w; [  t5 y1 o
  343.     }
    : C1 }8 i/ ~8 x$ ^# c
  344.     UpdateFile3.clear();
    ) v8 i# ?& d! W
  345.     UpdateList3.clear();5 @5 M+ q. @: r; D: w" T
  346.   }
    " z! k" |) ~8 R' r) t" Q
  347.   if(UpdateFile2.size())& [( X. a% N  \5 K/ s6 O3 z
  348.   {
    % F6 e' U0 C$ x
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # m7 \! f* a+ T  c. k/ o: n9 u" T
  350.     {
    & x! ?' J( C) q( V5 f( t
  351.       file=(*p).second;+ L- n7 G6 F! y' N6 [+ I
  352.       free(file);& u/ A- a* @; i0 S
  353.     }
      `( t5 @3 z5 b% J
  354.     UpdateFile2.clear();
    ' o! q  D% T6 `7 F5 W0 ^$ P. x
  355.     UpdateList2.clear();% w  [6 z# D/ c* F5 h
  356.   }7 @9 Z: S2 l% T: z/ h  w
  357.   if(UpdateFile1.size())
    0 i4 V) Z7 Z' z) V# ?0 ~& C
  358.   {
    2 @3 }3 X% B& [* D' c, W% [7 _  O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- E3 n$ Y0 J8 f8 l+ O. ]& J. [
  360.     {( D3 d. W1 |6 \; v" ]2 c& O/ H2 G
  361.       file=(*p).second;
    9 G* I0 }- e4 |" V1 x
  362.       free(file);, T9 A! Y# H' v: O
  363.     }
    1 _' A7 P1 U/ x" j
  364.     UpdateFile1.clear();
    9 J9 E- I- e1 c/ w
  365.     UpdateList1.clear();
    1 h1 P' u4 a/ U
  366.   }. i. N% i, l; t! u
  367. }  % `7 I7 }' _3 H4 \* p
  368.   
    " Y0 `* M4 G! a) R" c! W* c
  369. BOOL CRevAppApp::CheckLocalVersion(void)' d* i- d' [( |1 E
  370. {
    , k+ T+ }$ ^4 B& z3 t% a, A
  371.   int c;, b2 R  f: H; L. A2 r0 w
  372.   LPUPDATEFILE file1,file2;  U1 r% I1 m, M) P; `
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;: I2 {$ A6 s; `* h# }
  374.   std::list<CString>::iterator l;- v* V3 K* f9 s) S: d$ E

  375. + g; _: `  n# G: W9 r- `. ]" |
  376.   UpdateLocal.clear();
    # X5 T* l3 }- {% c' J7 N: b& `
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    8 J" c8 k) G6 e* I
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    % C- a! u7 Z5 Z0 y7 o
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);" p2 a  ~9 ]2 ^0 k
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    $ K( h( W3 P+ P% y1 b! i/ \
  381.   if(UpdateFile3.size())1 }$ f- E0 {3 I- h+ x) R8 u; `. W
  382.   {9 Q8 x) r; n  P# G8 G
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)1 C0 k/ s$ R7 Q/ A4 T, t
  384.     {
      C5 d3 x% n" M& c
  385.       file2=(LPUPDATEFILE)(*i).second;
    ( q4 J6 v$ m4 c5 f% V: y- a+ T
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 r- f2 I+ \* S0 b% T
  387.       {1 v% ~% g" ]+ N: w* \$ x" o! R
  388.         file1=(LPUPDATEFILE)(*p).second;1 z5 \$ W* Z9 J7 \
  389.         file1->vers=file2->vers;$ V' r& `! T1 d- k* }# \0 T
  390.       }! Z) {7 h5 C, P+ p4 _9 p% r% |
  391.       else
    4 m% {, k( P6 Q1 G
  392.       {
    & ]: [- U1 a/ {* i) X! O
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 |3 C. ~/ }( ~
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! b2 V/ Q+ q7 x4 y  ?
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
      t* T# H( b3 A% P3 y! C
  396.       }
    3 r" T! J4 \" n- ~2 K% R# h; [: O2 y: q* o; A
  397.     }6 r; S2 j( S9 {9 v1 W
  398.   }
    6 u! O7 A/ w- b9 q" l: b- Q+ R
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++), W+ Y2 F( V5 H- h  C
  400.   {
    1 k( J8 d1 f: c) @0 `. |, ^2 m
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())' O9 C) f4 f7 a- B1 M, @2 p) X  W
  402.     {
    ) n0 o# a. k% i7 _# Y
  403.       file2=(LPUPDATEFILE)(*i).second;
    5 u+ H/ v+ [2 i% l3 J
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 j! l0 S: k  Q/ c  b$ S
  405.       {9 v# ~, [( G, Q' S. S
  406.         file1=(LPUPDATEFILE)(*p).second;
    0 m, {( w* J1 M% O3 `
  407.         if(file1->vers!=file2->vers), t; A' ~4 {5 Z3 F! e# O
  408.         {
    : [- D1 X1 @3 Y9 g+ f; I
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ k( Y0 y! U: P+ O
  410.           c++;( M2 m% G) b( v& f7 B7 v
  411.         }
    ( j3 |  B# r( W' Z
  412.       }
    6 O5 T7 W9 f# U2 z& k: U+ a( s
  413.       else
    ( |* d! k) Q% a; m7 T1 ~
  414.       {
    % p% a6 K+ }0 b. V5 ]# Z# T
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 S" K1 Q1 s5 ?/ K
  416.         c++;2 L% v7 H& b8 u# ?9 V# {
  417.       }
    1 P! p$ p- Z: K9 o
  418.     }
    ) U% H3 r6 ?9 v8 v4 C; G( a: @
  419.   }/ i* u2 O% o" G. w5 U: Y2 e
  420.   unlink(".\\DownLoad\\update.txt");
    3 {/ d/ ~* Q* I8 `
  421.   if(UpdateLocal.size()) return TRUE;8 j! s8 X2 a0 B2 F1 V2 h8 I: L. V8 A
  422.   else                   return FALSE;
    9 L8 q1 g* {0 Z0 ~* p1 ^
  423. }. o7 v: [3 O% y: t

  424. ! W( |. W/ L8 k7 Y& m
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"9 j5 Y8 r; T" d8 y" A
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"' A. \, h) g; }5 ?2 J& I

  427. ' Y. f% r. W  K" ~# W# `
  428. : i3 y0 t) |# D* p/ G, V" R7 y# N

  429. . T, |5 l: \6 R% v2 `# R  c: b
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ) y5 b$ w* ]3 @- w. N1 m! T4 L
  431. {
    - Y- ?8 D+ I" d3 f. S- K' k: b
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    # z5 f9 A& g, V5 P& x6 B1 p' ]
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . Z5 Y& d+ J7 c5 H: y1 k' A0 U8 W
  434.   {
    7 P2 C8 l+ `! J& [, Q& f
  435.     char szLanguage[50];- V/ E: E- [+ x. L9 A5 }* @
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% O; a4 s( B! r1 D$ o
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ C. q# |1 J0 s( J
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - O5 Q- B9 R# P% c( p9 N( B
  439.     else                                   m_iLanguage=ENGLISH;) p- m- }; d; j9 y1 B$ K/ m
  440.     char szRegister[100];
    % @7 B( V7 I+ R9 L4 a% R
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 P( \+ d4 L9 S8 a+ ]
  442.     strRegsName=szRegister;
    2 p$ F7 L$ x1 V+ a
  443.     char szPatchURL[100];
    0 _9 }7 |4 ]/ L. R8 \# `+ m$ H
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( n2 g/ A7 ~8 [9 D: `/ }0 b
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 t1 S: M2 |- z! J, j
  446.   }
    0 W) F8 q1 n, O5 P' v/ h
  447.   else! _$ o( E* M! T+ S; T
  448.   {
    ) K0 ~0 P3 g; Q% T
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 ?, q* N1 f8 `4 P5 w- z% U! _" o
  450.     strRegsName=DEFAULT_REG_URL;
    8 c; a' O) l7 q4 v1 ~0 \) r
  451.   }6 p4 ]9 q5 U* s6 f, w
  452.   if(GetFileAttributes("hosts.ini")!=-1)2 y3 v, W; j+ b1 C/ q; E( f5 u
  453.   {
    & f7 ]7 [# {" X, j- x; S  B
  454.     char szIP[50];/ O# D6 c5 O) u( X; S$ P0 q6 x
  455.     char szDIR[300];- }. f  C3 P# A5 a# e$ \
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))6 U+ A5 i4 Q3 ?; g! t9 N: j. w
  457.     {+ x2 P9 X3 h0 O( g
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");/ E0 z6 L% S! U  P. m+ [  x
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");$ b+ D8 o8 o: e, `
  460.       strHostName=szIP;
    2 V$ E- r% u% u/ T" d7 K" g
  461.       strHostPath.Format("/%s",szDIR);1 E0 Y& s# P# C9 k! M: l# c
  462.     }9 @7 [; u+ n$ f; G  j* [0 t2 S
  463.     else$ z! B1 S: k9 }5 H% c7 h+ v
  464.     {& J: T  A7 Z0 ?
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 r7 W$ d' [0 u2 W3 p) B
  466.       {
    8 U5 d7 w, B8 ^  @$ _8 R8 r3 a
  467.         char szLanguage[50];
      [4 x' O( l1 S, S' H
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 k' _! ~$ k0 X5 `7 V2 K* q4 {# ~
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' h1 {: O! `. v1 Z! P: \
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ( `$ j( _5 T; M. a. x/ E3 ]
  471.         else                                   m_iLanguage=ENGLISH;$ z3 f/ W+ Z% X3 L5 C2 J
  472.         char szRegister[100];4 F8 b6 u- C, y! x4 P* }
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 W5 D- w# b9 o3 A* U/ q" v
  474.         strRegsName=szRegister;
    8 r7 w6 I* h( R# R( \- ]
  475.         char szPatchURL[100];
    ! I! s8 y9 C" F2 a2 [
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - \8 t+ o: Q6 N1 k
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. Q3 u2 r5 Z2 V3 K$ o& H) e
  478.       }
    . A: g% z3 Q9 p" \$ m
  479.       else* i% s+ Y! q2 }, s* N+ j; x( x
  480.       {( T! H! ]# _$ Y6 c
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      y6 F) X/ x5 E, \1 p
  482.         strRegsName=DEFAULT_REG_URL;
    0 O$ n! ?' a: _3 _
  483.       }& X7 S6 a/ }: H' F* J/ G
  484.     }" {$ D3 o. G. Y4 P; a' {# J$ k
  485.   }# X' q: v" Y5 E$ d
  486.   return true;
    1 q& F' d  {1 y
  487. }% \/ j% Z4 N9 f( D# C' ]

  488. " d8 b9 J5 `2 i7 a" L; Q
  489. #include ".\ZLib\unzip.h"8 T. v3 v0 v# E6 V/ J9 N) ^
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);, C& w% T* `. X& B: X
  491. /////////////////////////////////////////////////////////////////////////////
    # \0 E% k' G( O, t) {5 D  u
  492. // CRevAppApp initialization
    5 x* Z; b. C* _' G1 F) P2 f

  493. 8 V. Y( ?7 \0 g- T
  494. BOOL CRevAppApp::InitInstance()
    ) t- \, K# ^7 Z2 W1 J2 d; H: N
  495. {0 o: l0 Y9 s9 e3 w
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];& B( Q: P$ H8 g

  497. / L2 `5 m4 ~" s( i2 V
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);; o; s- V8 M$ F/ g
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))  v9 X$ J3 I$ L+ A$ T
  500.   {% W& x( g- G0 `! j5 `" |) i
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    6 o' |& \2 a6 U  {& h
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; P: X" ^, `  ~& `& g, R/ b% O6 e
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))' d0 a3 y, A6 n$ ]4 Q; N2 U
  504.     {
    9 u$ T$ K/ ~0 n& Z" `/ U
  505.       strcpy(szPath,szPathTarget);
    4 V  a. S1 E6 @6 T+ [2 z
  506.       SetCurrentDirectory(szPath);$ W& ~. ]- A) G9 k8 n6 n
  507.     }
    ' u3 u! |0 i: i& K) j
  508.   }: k+ {% f9 e& F/ v5 V' V7 r- \8 O
  509. #ifdef _DEBUG
      Q# h' T( U8 p9 ]7 t+ g& Z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)): ]5 Q, |' }+ K8 S
  511. #else
    + w1 V$ E5 X- \& i
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  f' V9 ?+ O4 g- b4 o% @+ Y
  513. #endif
    & y1 x1 H% H' b. J- D2 }- R0 `% r
  514.   {
    6 [1 v. c; Q4 e8 ], O! x  h, U8 b
  515.     char tempFileName[MAX_PATH];! P) n) L& u8 X, a4 R+ t
  516.     strcpy(tempFileName,szPathSource);5 I4 V7 f, l% }& g- t6 n' J
  517.     tempFileName[strlen(szPathSource)-12]=0;. r$ @& J0 H% s# K8 w" z" c
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    / a1 n. z; z$ ?
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    9 C- a) |, |6 g. P6 ]4 _
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ b  O  X7 Z$ v  q2 R
  521.     return TRUE;
    9 t# f- ]& u; E: e* f8 l; c0 }
  522.   }2 N) S1 A) `5 M" w4 V
  523.   // Nuke 0118: Delete run.exe& i0 t! m# Q2 K; F7 m, R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    : \3 M" N5 d6 D
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");  K9 n2 s& E  M* M' n
  526.   if(!ReadCfgFile("Config.ini"))
    : X& M. k% ?9 U* P
  527.   {
    . n  E- g" p9 V2 v3 G
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    2 N* [5 p5 h. ~8 U  k
  529.     return TRUE;
    / L5 ?2 T& z3 ]+ L: f0 u
  530.   }; |: J& u- }2 H1 g
  531.   HANDLE mutex;, S/ m) n" T4 {+ J
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    / v) h9 U0 s- U# V% A* v
  533.   {
    : ^- z& U- U. F* ]$ Z" I1 _
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)& b3 @9 a+ \) i  U( e9 p/ A1 r
  535.     {1 m: {2 h' ~9 Y% F8 @5 ~' E
  536.       CloseHandle(mutex);
      L+ j: [8 t3 e. o2 y+ `! L
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);" b1 Z% [: h& c( S( F/ X4 z
  538.       return TRUE;+ a" _7 m" n& h" f: J
  539.     }
    / v( q5 x) R$ N3 X, i: i
  540.   }  
    ! Z, M, x8 H  a  \" M9 |
  541.   CloseHandle(mutex);( @6 t$ O9 W/ V* T8 X: h
  542. ( c$ s$ r: L2 L. }" G4 l
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; p- m4 c% T1 U. k7 G
  544.   C: A7 i( K7 @; z4 d
  545.         AfxEnableControlContainer();
    ( G  h! l, \/ N: ^( v, U8 Y& O, {

  546.   a; y; P7 {1 v+ {. E! m
  547.   bCanUpdate=FALSE;1 J9 L4 A! K" V) r: E7 X
  548.   dwStartUpSteps=1;
    0 R  o' H1 a3 J6 z( Y
  549.   dwProgramState=AP_NOTHING;' W: V( x% S$ A
  550. , W7 y: T" h  v' o$ E
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);4 Z9 L& K/ M; ^* g

  552. - f9 y' ?" ?. P7 F1 q; J
  553.         // Standard initialization
    " ^7 f- q5 y6 g( V2 t+ u# f
  554.         // If you are not using these features and wish to reduce the size
    $ m" u- r; ]( w( ^# t
  555.         //  of your final executable, you should remove from the following9 |5 Y0 e" s2 Y
  556.         //  the specific initialization routines you do not need.
    0 X0 X, ?' _2 h* V% `

  557. ( `: B  Y: B5 \9 t. S; s
  558. #ifdef _AFXDLL% Z" i# c. y+ y5 @. s! @8 r
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    1 u7 v, Z9 i: C' i3 |  ?1 B4 [8 _' `, D
  560. #else& @, ]2 a' Q- O' q' \
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically1 X  `# a8 x6 z- H, l
  562. #endif! \/ b# H! X5 O& n
  563. ; A% v6 f* r& x6 O+ ^0 d  B- T
  564.   dlg=new CRevAppDlg;
    ! q3 I- k, O. v; m1 f: o. Y6 L
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ( c, \6 P& k+ m" ?! O$ H/ E' j
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    8 D4 f% m6 _; o' R4 p5 |/ c% ]: N
  567.   m_pMainWnd=dlg;3 }9 R# A. y. ~1 ?

  568. $ `5 H6 o/ N' b/ a( @
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
      D3 C) y. q( \5 ~: b* b, y! X/ d/ q: c
  570. 1 \1 W" \) z( N" I
  571. //  GdiplusStartupInput gdiplusStartupInput;) m) R/ Q! y) X( F9 J- N& s
  572. //  ULONG_PTR gdiplusToken;3 @* p+ ~! x  y% M4 f
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    1 K( R; D6 |0 M! s) Q9 S

  574. ; J$ P* r8 V3 q- Q" U( ?$ f4 [% y
  575. //        CRevAppDlg dlg;
    ! a; B( b/ Y9 \% l
  576. //        int nResponse = dlg.DoModal();
    1 \7 ]' y+ W8 G
  577. //        if (nResponse == IDOK)
    9 A9 R! h* ?: s: G$ D5 D8 S
  578. //        {8 j, I/ D- r7 k  l
  579. //                // TODO: Place code here to handle when the dialog is
    3 p& }! b6 }; g- A
  580. //                //  dismissed with OK& _8 U0 y9 Z4 X  j' y+ |
  581. //        }, r4 m4 |7 K  p) O
  582. //        else if (nResponse == IDCANCEL)% c9 S. i! v+ {; j1 q) h
  583. //        {
    ) m# Q! p6 r# o, m
  584. //                // TODO: Place code here to handle when the dialog is
    / J& m* Y' _! g7 i. y- \- ?. v
  585. //                //  dismissed with Cancel
    , `* K8 D; e$ M/ H+ x
  586. //        }
    5 Q- n. H1 k4 b5 b  a% W% V* j

  587. ! n4 `% \5 p  N  m9 r9 e- E! A
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ; Z- J9 ?/ @! a4 X2 R+ ~7 p
  589.         //  application, rather than start the application's message pump.- }+ ]9 R6 p2 y4 B) F8 r7 M. _
  590.         return TRUE;0 r0 l1 E5 Q& S7 V
  591. }
    2 d+ g) b% F3 I% h3 @: z
  592. 2 m$ y% @+ b1 X1 n
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ( S2 j- j9 }/ i
  594. {
    , ]% m0 Z8 W  {: ~, @' l
  595.   int i;
    / S; I2 w! w; m; F, J; v; \, I# s
  596.   char *szRet;& \/ E7 D  o- b/ {% G; N# i3 X9 d" f
  597.   ]- O7 H: `9 W& i9 J. Q/ @
  598.   if(pSource) { itoken=0; sztoken=pSource; }  N  P# T4 r4 [( K$ v
  599.   if(sztoken)5 t' K- Y; P" _9 ^
  600.   {- y- F4 Y! W+ b/ H$ X" f
  601.     szRet=&sztoken[itoken];
    : \  z1 \9 G) ^4 `4 I0 ^! a
  602.     while(sztoken[itoken])7 f/ E* A/ S; @0 w$ m" \& f
  603.     {
    ! k; i2 G$ s. _) }0 m- k4 N
  604.       for(i=0;i<(int)strlen(token);i++)
    & O: y6 H1 _8 m6 C3 c; ?: ~5 ]
  605.       {
    9 ~7 u/ ?; \7 }3 k4 u  `7 X
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    8 {' z8 D  V, {$ |  Q
  607.         {
    ! s& J% V% }' \' `! `
  608.           sztoken[itoken++]=0;
    0 i0 g3 o% C1 O$ ~$ \
  609.           sztoken[itoken++]=0;
    3 w9 c+ g: d  }3 W
  610.           return szRet;
    7 I( G1 L$ _# d' X
  611.         }( [0 W' ?, r' W; A/ l4 L
  612.       }
    ! G: w1 Q% i  p5 f% T
  613.       itoken++;
    % g2 h( N8 x1 I0 u0 R0 i
  614.     }/ \, [& P  e. L- C+ {& T8 _
  615.   }; j1 b1 @# P1 R2 A, X; [3 S
  616.   return NULL;2 b* K# X5 u2 L3 j/ a' ?
  617. }
    : c" U$ `5 M1 l4 A

  618. 9 P/ `/ c' A$ z1 K1 s  t
  619. void ProcessProc(long Total,long Current). c: c' q- M# ~! w; R$ {
  620. {9 `4 [9 E" P3 w" g: @
  621.         MSG msg;$ ~& l" w8 M( o5 K3 \
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);( t  i; L# \$ E8 |
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    9 X2 l. S7 A3 [1 L/ T" A* j
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ Y- v/ p6 x% M: J: j/ ?# D1 C5 X
  625.         {; h: P# O0 n5 c, w- a6 V3 i
  626.                 if(!GetMessage(&msg,NULL,0,0))! e( m# {3 s: `7 h
  627.                 {
    $ {- Q( I8 }% G  ?
  628.                         return;
    / |# i0 T6 M9 b
  629.                 }
    1 [, o, @. F% K+ ?
  630.                 TranslateMessage(&msg);
    ) e0 {* I) ~$ g: S, E& q
  631.                 DispatchMessage(&msg);* _& h: x- m  n3 h) ]: X6 W) |
  632.         }       
    : E7 p9 o% v6 Q5 d+ B" l: P
  633. }
    : M5 ?, d8 B, @' K: r3 H

  634.   b7 a: S% N4 F+ V5 R
  635. BOOL bFirstChar=TRUE;
    " b5 Z& {: P! ?0 l7 }

  636. - k" a, n4 ^: n/ t8 s+ B
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 Z  `/ f* l6 u$ S$ i! r0 S/ b
  638. {, ~; @4 P/ e( S2 i$ |7 P, Z
  639.         // TODO: Add your specialized code here and/or call the base class
    8 C& [0 Y- ]+ ?
  640.   switch(dwProgramState)% W! f/ a& T7 H
  641.   {
    % u7 n5 Y1 o2 K. J
  642.   case AP_NOTHING:
    6 M4 d! b1 M9 a& k% d
  643.     switch(dwStartUpSteps)
    ! a: w" j4 J! a' g$ O
  644.     {; p5 z; h/ ?) E; y* I8 [, e- ?
  645.     case 1:
    5 ^' ]7 v9 G3 N) S
  646.       {: S" p2 I, g! m# l
  647.         int i;$ e, T  O3 W7 _1 p. |
  648.         CDC *pCDC=dlg->GetDC();6 i, O& K7 Z; e8 X
  649.         HDC hdcwnd=pCDC->m_hDC;
    & d3 ], ]: i, Q9 ^. d- h
  650. //        Graphics graphics(hdcwnd);2 E. ~, T8 h5 @9 S: g( j/ D& u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    5 i! S. c9 l5 s. }' M7 u9 ]1 r" u6 {# t! h
  652. //        INT iWidth=bitmap.GetWidth();$ m3 i7 d5 Q/ `% z
  653. //        INT iHeight=bitmap.GetHeight();
    & P. |) I6 ~1 N/ a
  654. //        Color color,colorTemp;
    : b9 f. O8 w) x4 \* \! [4 S/ e
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ' V6 F/ f  {6 D
  656. //        {# w0 q+ }8 B7 l# [$ i: }% E# o
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ; O& ^4 ^. T- q0 g5 }* w( p2 U6 O
  658. //          {# ?1 }  O( Z1 \8 h5 Z: H  j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    + w* u+ ]$ [# e+ d1 Y
  660. //            colorTemp.SetValue(color.MakeARGB(; v/ m: R  P" }5 ]9 ]
  661. //              (BYTE)(255*iColumn/iWidth),5 x2 A  Y; x$ F# V1 u: D$ i6 P
  662. //              color.GetRed(),+ o: R5 Z" W  T- c3 Q0 n1 L
  663. //              color.GetGreen(),; d1 F3 d/ ]( h5 w! P$ s
  664. //              color.GetBlue()));0 S! v: J! L# X  B
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);) e7 n$ x4 j( L/ x( X0 _
  666. //          }
    , v$ X7 r5 A. u0 _/ |5 d- B
  667. //        }
    2 h0 P' V% N7 K- d$ x# Y3 q# S) t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);  {1 x4 M4 B! x& k3 h% G
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 H" Q- w: ^% L% _$ V
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");4 D  Y) K! u; m$ `$ ^& R
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ E. V  |; y1 s: ?2 c% e! x5 \
  672.         for(i=0;i<240;i+=8)# J2 ^7 v7 ~9 j, I  H
  673.         {
    : E# H% Z/ {# O) ^# C7 V& h8 I
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 a% N7 A: d: y- Q, X
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 E' Z4 c. }, @  B
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    7 v6 g$ Z; V2 u; v1 h% ^* s0 L3 c
  677.           Sleep(33);
    5 ]' Y# h4 M' m: W( N2 J: G
  678.         }
    % {/ c- ~* K. G& L) z4 T
  679.         Sleep(1000);! |9 N% u/ v/ T" h" Y
  680.         for(i=240;i>0;i-=8)
    ; h" b7 o. [5 ?0 ?
  681.         {
    - m: ~( ^7 A4 l0 o+ y3 u
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  T/ W% i1 s5 e0 d2 L* `+ {; n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 N) Q/ X% [; L
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . z0 _! X4 {% r+ S
  685.           Sleep(33);- K# Z. u, ?! w% _' H# F2 z
  686.         }$ A7 c2 o( h0 Q4 y* A7 E
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
      Q) V/ E* F* _6 `4 b
  688.         dlg->ReleaseDC(pCDC);7 Z) s* R3 ~; \1 E. ?
  689.         DeleteDC(hdctar);% P, {& _* T1 y* w( u
  690.         DeleteDC(hdcsrc);* c1 V7 C4 e" K4 e, E5 b
  691.         DeleteDC(hdcorg);
    ' @# @; \% t1 @* Z
  692.       }
    * D! U5 r5 ]$ |- Z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) q8 q: F8 x( A$ i# T) G$ @+ t
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    # M- f- m8 j- V6 I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    6 g, r) N5 @1 L
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
      y3 w* d" @/ B0 s: C
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% ?- X% c: n. u+ Q6 L6 E3 {. V6 C
  698.       if(!Dn.Connected())" q, v! f" S; H. G: j; y6 D3 h2 f
  699.       {; F0 N) k" O. N) d
  700.         dwTotalFiles=1;
    % [( Y! ~3 Z+ c0 ?
  701.         dwDownLoaded=0;
    4 Z0 ?8 v& e1 @0 C
  702.         bSilentStep=TRUE;
    ) ?. M; s' q* j+ W3 }/ @5 _8 s
  703.         bCompressed=FALSE;7 H/ I  c# X' ]$ q" q
  704.         strExtLocal.Empty();
    ! W. \* n3 E7 e5 {' f; _
  705.         strFullName="readme.txt";
    ; Z  a( `7 e$ G  c1 {) C
  706.         dwProgramState=AP_CONNECT;' u" B8 P" c. \$ Y8 }; R1 a- J
  707.       }
    4 f- B, B+ C" F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();3 ]* D  e4 b  Y0 \
  709.       dwStartUpSteps=2;
    % z: o: L5 K( c. N1 V  ~
  710.       break;2 f+ [  ^. m3 L* X2 }  h$ Y( ~
  711.     case 2:  P. Q/ Z3 w6 n  P7 V
  712.       {
    3 ?; h1 _) J/ c0 u
  713.         int iEOF;
    ( I$ W6 ^- h5 T; R
  714.         FILE *fp;
    3 r3 \" E. ]8 o
  715.         char szString[512];6 U9 a5 t2 x4 m, K1 C0 t: w
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");, g! s8 G5 R7 k  x1 L+ \
  717.         if(fp)
      u4 H: l4 \& l+ ^. D1 Y
  718.         {9 g  K8 }1 K) o" n8 b  j
  719.           do& `7 i( A5 ^3 J$ ^5 Z6 ^8 n
  720.           {7 }' M* q- I+ g* s3 [
  721.             iEOF=fscanf(fp,"%s",szString);
    / J8 n1 t6 y7 k- O4 J2 Q
  722.             if(strlen(szString))* p2 [) j, {# I0 k' n
  723.             {5 Y  S7 t  q( m$ X* T
  724.               if(bFirstChar)
    # O4 N" i% M; S
  725.               {
    1 ~9 N- Y0 f  z! W, }
  726.                 bFirstChar=FALSE;  q% }1 c( Y9 a
  727.                 bConnectIsBig5=FALSE;9 C9 O! |$ h) L5 l2 z3 [: z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;4 l! v& @% \' ?0 \* u
  729.               }
    8 x3 a* h( B. K0 R, x( E
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));: y& F6 S1 W* ~+ \" N
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    # K6 K& ?# q' l& u$ }, j4 p
  732.               dlg->m_ListText.AddString(szString);: M5 h& I  o6 e7 _8 C; s% V( o0 S
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 @! a2 ~) d8 X/ W7 R* [+ o
  734.               *szString=0;7 T" f; {/ z& Y* X
  735.             }! p8 ]$ }, z9 y% I- F
  736.           } while(iEOF!=EOF);- p4 k. J5 Z- Y3 u& E
  737.           fclose(fp);
    7 \8 m* h3 k/ S+ A9 g/ f
  738.           unlink(".\\DownLoad\\readme.txt");+ L( a3 H( @4 b* `1 c+ A$ E1 K
  739.           dwStartUpSteps=3;
    2 x" u2 e, |7 T  i5 a
  740.         }/ i; B7 t  E& n! i9 G* \& Z4 p# R
  741.       }$ y- u4 c% i; }
  742.       break;
    8 k' Q& K4 u+ e, t6 I
  743.     case 3:7 d. L) ]9 [% j% M! N$ f; A& U
  744.       if(!Dn.Connected()). g. w6 B: P& j. q
  745.       {
      }2 X* L& [/ g4 l6 C& ]
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);6 X5 D: B- s0 `3 {8 n+ y4 F
  747.         dwTotalFiles=1;8 H8 s7 t  z3 O: E0 |3 D9 m& W
  748.         dwDownLoaded=0;9 D3 e: s: ~: Y
  749.         bSilentStep=TRUE;
    , H+ O  U6 i) Z. W7 |1 O
  750.         bCompressed=FALSE;$ O6 I  @' X! T
  751.         strExtLocal.Empty();4 w! U* `  j9 M, j& d
  752.         strFullName="checkversion.txt";
    ) ?* H, U: _3 T
  753.         dwProgramState=AP_CONNECT;8 a8 Q  i2 l: y" R
  754.       }
      q2 _/ V' a* e1 ~% I" e0 {% `# A+ m
  755.       dwStartUpSteps=4;" X! O3 g) K4 a% b) C
  756.       break;
    9 {' a. K7 H& M) b, m7 n% w' I
  757.     case 4:& o1 R, Y" y- u
  758.       {
    7 ?9 |8 X7 B% t- r
  759.         FILE *fp;
    ( V  B/ F- Z- ^- j) k
  760.         char szString1[128];$ q2 z' R  j: ]5 l2 a! j
  761.         char szString2[128];8 f* g- b% t  n) w4 D, L2 s; Y
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");; y/ x7 k" ]! M6 C, y- l' n
  763.         if(fp)* c* I, Z+ Z) K( ~
  764.         {
    5 D  o8 A4 ]/ d5 b2 T2 }
  765.           fscanf(fp,"%s",szString1);
    - N6 g4 P% c4 x" [( A5 j. w4 {
  766.           fclose(fp);
    . y  [2 Z- \* u6 \* f
  767.           fCheckVersion=atof(szString1);$ G1 F6 x2 x' \( U; n% W
  768.           fp=fopen(".\\checkversion.dat","r");+ [% T2 `7 H8 i" J
  769.           if(fp)
    5 X: R' U- ]# M/ j
  770.           {
    * Z* ~" o9 H6 P" n4 N
  771.             fscanf(fp,"%s",szString2);
    ' a" x& x4 H& f; G1 P5 T8 _
  772.             fclose(fp);* f" k5 K" h* j; |5 J! K
  773.             if(atof(szString1)!=atof(szString2))
    5 C* [  p2 e. }$ y5 Z
  774.             {# K/ N* o9 W$ n( P$ n" V
  775.               if(!Dn.Connected())/ c+ }5 n9 R6 `! A  N
  776.               {
    ' A) N& Z8 I0 u. G# H, G4 z* h( j
  777.                 bFirstUpdate=TRUE;
    * I& K) X& W' L4 Y2 l8 i
  778.                 dwTotalFiles=1;  E2 a9 q$ Q" X1 Q! d
  779.                 dwDownLoaded=0;" _, m8 Z5 H( {' R: V0 k4 Z7 C1 G$ ]
  780.                 bSilentStep=FALSE;
    7 D2 s( p- W% f* f
  781.                 bCompressed=TRUE;
    8 [' p5 B0 C5 j  B6 v
  782.                 strExtLocal=".\\DownLoad\";0 F1 d$ R, ]+ ^, m% [
  783.                 strFullName="update.txt";
    , W9 n+ a. S: D3 h+ G. R6 F
  784.                 dwProgramState=AP_CONNECT;
    ) i! Z3 U8 u' T
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");( f$ L0 ?6 @( U$ B' _3 g
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ' Z3 D3 c! I6 j7 V- E
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ g; g" c& f0 N1 p) p# x* d/ O
  788. ' @! `9 J6 B2 e8 i! p5 |/ R7 K
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " K+ u" u5 j4 e# y9 ~; U
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ) D- M! p7 f8 f6 w3 }. @
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    0 q' P+ j6 {7 ~! \% K7 y% `" Q
  792.                 {- q/ ]! l8 ?! A
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");+ `; L0 n+ r1 x  c8 ~  T
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");8 g" n. M& v/ S. G9 D
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");- V6 D; v! d7 c3 A+ P2 N( J' [
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % ~- ]. \5 t& O
  797. . f1 p& m( x) y7 m5 Z2 u- O
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 Z% }9 Y2 l+ K1 g' v* y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 n% e% u4 c. z( v
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");  _  m$ t# A: ]. ~
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 b  K7 ^8 c( p3 w8 d
  802.                 }1 Y9 H# @$ U# X" Q' A6 d2 V" H
  803.                 dwStartUpSteps=5;: E/ F& i& g( q/ a- x( t
  804.               }
    8 k4 |1 O7 W% J- j0 N/ i3 ^
  805.             }6 I7 r6 L8 p! |- z4 @
  806.             else* x, s7 b1 D6 L9 w* h6 ]' j
  807.             {
    # I4 R  N. O" P- U6 d2 a
  808.               unlink(".\\DownLoad\\checkversion.txt");5 O8 a8 s9 [/ R0 j
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! x9 ?/ v; P: d, C, ]7 N, A" r4 ^
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    # `  q" j9 }1 R, d8 U1 \7 w
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");  x( E5 e* ~3 J

  812. ; w7 a- m- M4 I8 g
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, O1 ?  A. G  |( c" K
  814.               dwStartUpSteps=99;6 T6 t; ^& ]! O0 j5 G" U
  815.               bFinishUpdated=TRUE;. x" h' d7 H$ ?. R0 a7 C- w
  816.               bCanUpdate=TRUE;
    0 ?' Q- V) q8 d" t' H% D
  817.             }/ y; W" P# j: X5 y/ Z$ d% O
  818.           }
    ! j% K2 F4 w/ l" R
  819.           else
    # T3 c9 M  Z" h
  820.           {0 [4 N! }( U& U( Z2 l0 J
  821.             if(!Dn.Connected())
    0 ~% b, c4 j! y- h2 h( Z
  822.             {
    ! {5 }( ?: b1 n  X; o% Z" d+ j4 f
  823.               bFirstUpdate=TRUE;# n4 o2 `* s( I. q- K) Y
  824.               dwTotalFiles=1;& W, u# H% I( Q4 R4 @( E7 N+ B
  825.               dwDownLoaded=0;
    1 A) S. D+ v. B7 d
  826.               bSilentStep=FALSE;5 m0 t2 a# s' k4 q" H) {4 b
  827.               bCompressed=TRUE;; U& O& u7 J4 j: C% J; z# p! n
  828.               strExtLocal=".\\DownLoad\";
    * p6 B$ Q  x: Z6 }0 q' h9 g
  829.               strFullName="update.txt";. e# C2 k5 Z4 Y. d) r9 b  q
  830.               dwProgramState=AP_CONNECT;
    & r$ f3 v; R) Y
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    3 x  T4 L: b/ I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- M  m  Z( |. C
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");& R) `! Q4 M. R% |' l' v
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! ~* K7 z0 N* J+ _1 P( f2 h
  835.               unlink(".\\DownLoad\\checkversion.txt");
    * Q4 l( t& L! v' I- G7 F8 A
  836.               if(GetFileAttributes("Wsa.zip" )!=-1). u/ X4 g- ~+ w
  837.               {. H/ Y# m3 n' v  x! h* _( u
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");& |) l4 q$ q8 Y. i# m. g2 H; K
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");! c/ j+ m. k2 Y' W- p+ p, k
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    6 M  Z* R7 D) ]% V
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! O. B7 K7 M+ z6 `* ^
  842.                 % O; A1 J% x. I  T1 S
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 {) X; r2 D. _4 R( C6 q' G- @
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ k5 M* o  d% i7 f2 X+ Y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");2 N/ z" R2 I1 I
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* J& @- o0 y4 }4 ~" D3 {
  847.               }, v& t6 m2 @+ |" S
  848.               dwStartUpSteps=5;
    7 a3 i) ^$ Z  x/ A; h  o
  849.             }) R; w6 Q1 q8 t
  850.           }
    ( |. p6 h! b" q' Q) O
  851.         }3 `4 Z( b8 T- l9 Y
  852.         else% p6 m# {' v) V8 K* z" |- o
  853.         {
    # {2 ^# L; w5 ^$ T; L8 h! d+ L
  854.           dwStartUpSteps=3;
    - k  [5 K. N! K5 j7 E
  855.         }
    ( m1 _7 \( u- j, p# C( ?
  856.       }  M: X. L2 w+ e  n2 j- z
  857.       break;: P* {3 b: C* Y9 T, m
  858.     case 5:
    9 T7 G9 G+ p1 H
  859.       {
    / f" Z- f) e* U  [" n
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    4 a- ?0 D9 L2 S- K! i" @( s; O
  861.         {5 C$ o+ B$ i' `) A( n$ q/ q* J
  862.           int opt_overwrite=1;; f. L( ~8 c3 C; H  g4 o/ w
  863.           int opt_do_extract_withoutpath=0;
    9 p2 S" @5 V: U7 Z/ g8 F" |
  864.           unzFile uf=NULL;
    4 i& [& A+ o- p

  865. ; X0 Q. o5 [- y4 H: S  M/ A
  866.           uf=unzOpen("Wsa.zip");% o6 |) Q$ R9 x
  867.           if(uf)& D0 j! P% s) Q4 D
  868.           {
    , N! _1 p4 L- j# l, x7 E5 [; d' H
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);  [: `4 ^' c& e' Y$ ^
  870.             unzClose(uf);
    ; t. \# ^( M+ l$ j" J, X. n4 b& [
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");; X! \( V0 g7 h2 Q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ) G2 @; T- N: T% r) S: e
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    / _' \) O: P: R- f1 I
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ Y$ O0 q1 i! C+ C) y% b
  875.           }
    ) V! Q3 S, J. r
  876.           DeleteFile("Wsa.zip" );* m9 f& z. A; ~
  877.         }
    : ^# s' v& b+ t2 K" O( n

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

1 m+ B6 ~% j9 W" y
$ f! a$ z/ E% K3 S0 @' }

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-9 13:49

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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