找回密碼
 立即注册

CSUpdate.exe源代码

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

5 l( H" n6 l2 N, F  H1 ^
  1. / RevApp.cpp : Defines the class behaviors for the application.
    - h8 k, v0 L  E3 R* N, w
  2. //0 M- L2 v# r1 H6 C& j. I2 R6 C

  3. % K: r1 E! Q1 @3 t5 ?! G6 K
  4. #include "stdafx.h"
    + c8 o3 g" X5 P$ m

  5. 0 C  b9 m- k2 g0 a
  6. //#define UNICODE% A+ x/ B( G6 E* D& [" E2 N
  7. //#include <gdiplus.h>
    % |0 v! B; F5 e9 R: t# k
  8. //using namespace Gdiplus;
    ( B' p1 Q) Q' u, t) \1 e6 G6 z

  9. ' C) e6 T8 G. G4 e
  10. #include "RevApp.h"  X. W7 D7 S; g2 I$ @" o
  11. #include "RevAppDlg.h"# |. @: p8 W% o
  12. + W# |" E- g' I$ n, h
  13. #pragma warning(disable:4786)
    ! j0 y2 _9 j* g& |
  14. #include <map>
    ! Q6 P" x3 H* h" i, ^
  15. #include <list>
    # c) A) W& A1 U8 ?( }. N
  16. #include <direct.h>
    1 H" y( m- v+ A2 K+ @3 ~+ I

  17. 0 A4 n/ X) W3 O) q3 s
  18. #ifdef _DEBUG
    9 `- B6 _$ U" N- z5 o, R: x
  19. #define new DEBUG_NEW; b0 K* ?# A4 N6 M6 B4 a5 N
  20. #undef THIS_FILE0 @2 k2 J2 b  l9 J7 o
  21. static char THIS_FILE[] = __FILE__;) V, z0 A9 h3 C
  22. #endif
    ' v% s8 G7 |+ p+ }  P+ z
  23. #include "SkinResDef.h"
    8 i1 |% e' k3 q7 x/ W
  24. #include "ChangeBG.h"
    9 ?3 u4 e2 @5 |! f. f, R6 Q
  25. #include "AFXINET.H"
    , c) v& s! ?/ d3 k4 w% g* s/ Q

  26. 3 x' N, Y5 s1 Z8 @
  27. #define TRADITIONAL_CHINESE 0/ c' [' {7 G1 }) T+ D$ K
  28. #define SIMPLIFY_CHINESE 1
    9 @* C5 V4 G0 p' c1 B. w1 x/ ?
  29. #define ENGLISH 24 j4 U' A( A) ]; k8 J+ J
  30. int m_iLanguage = ENGLISH;
    7 ]% f' Z& u* s. J- E$ ]3 K' g
  31. /////////////////////////////////////////////////////////////////////////////
      Q/ B9 O' \4 @+ V& G! v% q
  32. // CRevAppApp& g- I8 _% f" a% S5 F  q
  33. + [# x* y/ \! L/ |  |5 [  Q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    % W! l7 `- b9 Y1 ^  A: ?8 m8 ?3 I# n4 l
  35.         //{{AFX_MSG_MAP(CRevAppApp)' B* ~2 Y, S2 K) ?; O# c
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    / u' N3 w+ j  F, o7 s$ M
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    9 I; Q) F+ s7 H0 w. M# q
  38.         //}}AFX_MSG
    # W' {! [5 {, h5 t8 c+ S
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)7 a. \; N! ?" p- k
  40. END_MESSAGE_MAP(); m' i  O" r' K' S9 L# z; J. f+ g0 J

  41. " @8 B) e- c6 c% \8 O0 t7 O* N2 ~' w
  42. /////////////////////////////////////////////////////////////////////////////. F0 o5 Y# M% Y6 I6 T/ a1 H( d6 N. \9 ?
  43. // CRevAppApp construction
    1 J' \" i& N+ w0 X& J
  44. 2 g$ d) h. I7 w, I
  45. CRevAppApp::CRevAppApp()
    . v- [3 f/ g+ Y  J4 b% P- W
  46. {! L$ ^! H2 `# k: v. \6 |: @
  47.         // TODO: add construction code here,. m% n* a' c" w, }% w4 t. L
  48.         // Place all significant initialization in InitInstance
    1 K9 S. j0 J6 s' G6 z
  49.   bDisplayIsBig5=FALSE;9 n7 P9 N: r* _8 r% w: m. j
  50.   bRestartUpdater=FALSE;
    " q) O  d2 J. x; a, D
  51.   bFinishUpdated=FALSE;
    % {2 b8 f0 C/ W
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ! G9 t4 o( E) h9 b- b" ^
  53.   InitChangeDataBig52GBKS();
    / g, j% P3 N! ~& q
  54.   InitChangeDataGBKS2Big5();# y4 j' u  `3 H+ ^& K: Q
  55.         //
    1 g6 O4 C1 L4 x% a  i
  56.         bClickRunExe = FALSE;+ R, L& _- m5 a3 U
  57.         //# i9 {$ X, P& B0 B) w9 L+ x
  58. }
    + a; h* i( u1 ^0 I/ i
  59. * x% N+ m; {4 ^9 m; i0 W
  60. CRevAppApp::~CRevAppApp()
    / ]2 U: H+ {0 x9 _7 ?/ p
  61. {
    / o7 f0 s6 Q4 X& T+ Y# V
  62.         // TODO: add construction code here,2 B' b* j) x, p
  63.         // Place all significant initialization in InitInstance  F7 ?  l: H, W/ |# m/ q
  64.   EndChangeData();/ j; Z' A' Y6 ^- b# i
  65. }, Z. k9 Y% b- _3 ]: {0 C
  66. # u6 {. A. K% p  W4 G0 u# P) `
  67. /////////////////////////////////////////////////////////////////////////////  r7 K# q: K1 U  q$ ]
  68. // The one and only CRevAppApp object
      g: j% V3 U; K7 @
  69. 5 ^  t& k4 ~+ P1 y
  70. CRevAppApp theApp;( i3 m* v# k: I5 H( O  x. ~

  71. 2 Z2 M! s( k  K8 n" @# N( d0 F
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)6 G. [5 B' ?( M: [7 u
  73. {6 e8 L; P/ p1 J- H1 Z* g
  74.   int iEOF=0;
    ! Z5 J! S( e6 Y- }7 Z( F/ {
  75.   char szTempName[MAX_PATH];+ d8 G! y2 f+ T# t3 o: J7 ]7 K
  76.   *szFileName=0;& y. E" K; V& L
  77.   iEOF=fscanf(fp,"%s",szTempName);
    1 C. b, d0 ?. ^
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    1 Z- f" {* S0 c4 F' m4 m
  79.   {
      q5 O* R2 L) \+ E# e
  80.     strcpy(szFileName,&szTempName[1]);* _+ n1 N7 V: C0 F
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    7 Z7 x) B& I! M5 _' @0 s. ]
  82.     {! E! o; O* F: K3 C' o* k
  83.       iEOF=fscanf(fp,"%s",szTempName);
    7 ^1 c1 K* z6 x/ E
  84.       strcat(szFileName," ");" X# q4 `, I8 K7 M7 f4 m' E! A
  85.       strcat(szFileName,szTempName);
    % I3 C& V( r, c) L9 j5 ]: j7 F. R
  86.     }# j) a1 l1 W* z, u- \. }
  87.     if(strlen(szFileName)>=1)7 V4 T" x( E" @8 X
  88.     {: @; s1 l. s# q1 v2 E
  89.       szFileName[strlen(szFileName)-1]=0;) a# r$ c0 J/ G2 L6 o0 o5 X
  90.     }
    ; G  C( [% e' U+ q3 s5 ^
  91.   }
    + d$ ~. ^; {6 B# V0 L
  92.   return szFileName;
    ! k" ^; S3 K! E
  93. }
    / }  E- V8 U* M( C

  94. & [" ?2 \9 n, w2 U( c3 @4 a
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    3 O$ n3 Q0 g8 B0 Y) }' q
  96. {
    $ J" k6 e5 N# j& \1 U2 A' R! C$ y% N
  97.   FILE *fp;4 j# K( R) @& [
  98.   char *key=NULL;9 x' p6 \$ |. d4 p  m
  99.   char version[MAX_PATH];
    * `/ o8 S! Z2 v6 X# \8 ^
  100.   LPUPDATEFILE file,olds;
    , E7 p( g+ ^; q$ W
  101.   std::map<CString,LPUPDATEFILE>::iterator p;1 n  A/ s6 P" R% J, W9 ~; }' J  E

  102. ' a* r6 M4 s! E
  103.   UpdateList.clear();0 S2 S" O* P. F! W
  104.   UpdateFile.clear();) W  [! \% a+ ~2 w9 _) w
  105.   if(GetFileAttributes(filename)==-1) return false;
    5 Z. _8 T# f% k. P; e; f5 c- `7 E6 H
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ; {/ R" m! o" E, u8 Y, u- @' |
  107.   fscanf(fp,"%s",version);
    $ R% ^3 \( K  w' ^4 j% }+ [( O
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }+ _4 o' _: v. K5 Z3 M! t
  109.   while(fscanf(fp,"%s",version)!=EOF)) W* W& |" H5 l
  110.   {
    , C; v, t1 I' D+ R9 v
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " Y1 Q! n# b1 b1 K& {: J6 \  y
  112.     fscanf(fp,"%s",file->path);: y5 \6 }1 }. i0 K! V( M( E/ E" g
  113.     ReadFileNames(fp,file->file);
    8 m* T; a; ~- Q' V! y
  114.     strcpy(file->full,".");
    3 R- p2 x; S2 J; W
  115.     strcat(file->full,file->path);1 n0 W/ @0 L# k: v6 q
  116.     strcat(file->full,file->file);
    / G6 b: D2 X  |2 T9 `6 Y% l- B2 l( W: ?
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())4 i& k" n$ W% P- @
  118.     {, T5 [2 A. s2 h' M6 W. f* p
  119.       file->vers=(float)atof(version);
    8 R) }) W* E! |: i0 t* O7 A3 u
  120.       UpdateList.push_back(file->full);
    ) q  T7 Z, d! m$ k4 `
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ' b3 w1 W; D7 V
  122.     }
    ) o0 l$ z- h3 D! o3 S
  123.     else2 s- N- k6 [/ n( ?4 q* Y# ?& ^: X
  124.     {# x6 n8 p- }8 V' [9 ^+ W$ E
  125.       olds=(*p).second;% e# y. E% \# a# x2 n3 }1 k# O
  126.       if(olds->vers<(float)atof(version))
    " w& N' N7 O' m4 G
  127.       {
    8 ]: ^6 }8 \! u- n$ i
  128.         olds->vers=(float)atof(version);
    " Z* v+ ]7 A4 H; R8 {* }
  129.       }. O0 w9 _/ V8 r1 @
  130.       free(file);3 H2 ?( W; ~3 a$ K4 N  z( S
  131.     }4 n5 N. z9 N( j0 ?3 s& S. p
  132.   }
    " @) {, q& K3 P3 L( H' ?
  133.   fclose(fp);/ v) r# q: ^9 v
  134.   return true;9 q7 R6 ^4 T, o- k# b: t7 x9 s; J
  135. }) v$ c8 z: {5 }( r4 [6 I

  136. " {' t5 i  ~) B
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    7 ]9 F$ u7 X& W( A! v) ?
  138. {6 M' s- p1 _$ S- j3 n
  139.   TCHAR  szFull[MAX_PATH];( }0 `- i6 I; o' D, A
  140.   TCHAR *token,*inter;
    " J) K% ], y6 Y9 v* x9 s
  141.   *szPath=0;$ j5 B* c9 ?. `8 f: V  Q
  142.   strcpy(szFull,szFullPath);
    ( T8 z3 M- H5 t1 \4 E
  143.   token=strtok(szFull,"\\/");
    ) q6 [' O2 g+ M4 a$ B+ w
  144.   inter=token;* X& g6 j  V) D2 L6 `6 z
  145.   while(token=strtok(NULL,"\\/"))& ?0 A% i6 t' [' B8 Z' C
  146.   {: R' |% P. ~% }
  147.     strcat(szPath,inter);- g" |; w4 i, l0 B! e/ }
  148.     strcat(szPath,"\");+ M# c* K6 N# g! E$ S7 |
  149.     inter=token;$ d1 m1 ~! D  f2 g. J
  150.   }
    . \( r9 |7 A8 f, [9 C6 u/ O
  151.   return strlen(szPath);4 m; `8 D9 L" t: N, z, t
  152. }
    3 G* l8 R+ `8 w3 w# m2 Y
  153. # B' y, T& U+ x8 G, S- `9 n
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)5 l, n+ [" O6 m& X  j+ Z9 t) N
  155. {
    5 [! D3 Y0 M( u- m6 Y$ v7 c' o9 j' U. f! O7 j
  156.   DWORD attrib=GetFileAttributes(Target);
    , Y  I! d/ L/ j% _
  157.   if(attrib!=-1)/ T, _5 k8 {0 f' q
  158.   {, S  W0 f- T* _2 g/ e% W. n" r/ U
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    + h' Y4 Y, g3 |4 Z8 t0 P8 r
  160.     {
    ; @) g0 E; F5 Q+ l- K6 f: }5 Y* \
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);1 F+ w) J+ ^' A2 a  _+ b8 s
  162.       SetFileAttributes(Target,attrib);
    8 b$ F. O3 K8 M% h; O" d: ^, l$ c
  163.     }4 H: h0 F7 t) n' t" T% D% e
  164.   }% v% H6 O( w* Y8 c+ N& [
  165.   CopyFile(Source,Target,Erase);8 k4 x1 c5 F: I, p
  166. }
    . Q& ^: M$ e' l
  167. : S7 H; B3 o8 ?& X$ I1 [
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)( D, }  p1 N& r% w, }7 _# G
  169. {' R1 L2 P) k+ ?! L
  170.      FILE *fp;
    $ F$ {6 u* [& N2 B/ r" s* n! ^$ H
  171.      char  szBuffer[8192];
    : y& c5 l" Y7 Q3 q3 F
  172.   va_list  argptr;7 L  Q+ A  Q6 d7 M0 t3 f3 ]2 l

  173. 1 t6 b% Q9 {3 N! F, i
  174.         va_start(argptr,message);) M  ~) D; b& F8 ^4 q
  175.         vsprintf(szBuffer,message,argptr);
    ) w: R$ E3 k( B2 K9 Y( o3 C( c
  176.         va_end(argptr);
    ( x1 @% I! h: t$ i! t# b. D! X
  177.   fp=fopen(FileName,"a");
    9 n# e: S$ Y( E6 y
  178.   if(fp)  a% }9 v9 c( m8 P
  179.   {
    1 N7 Z* l  p2 {. n. C
  180.     fprintf(fp,szBuffer);; u; u* ]! q& q, X( c* J% h% z" T& I& q& @
  181.     fclose(fp);* S4 A. Z/ Y& J$ k
  182.           _flushall();
    1 k. _, y8 }4 U% |2 _3 B
  183.   }
    4 M9 W' e& H6 V% U  L
  184. }+ I$ }, n- @- ^6 @0 Y/ i) x+ s

  185. * j6 a/ n2 Y2 T6 L% u% Y: R! L
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    7 Q9 @! v' H4 c# {
  187. {
    . z1 u& F; E+ r" y( j
  188.      FILE *fp;, ~2 L8 s' ^  ^: R' L# l$ Q' K
  189.     DWORD  attrib;
    % l) ?! Q( o* @
  190.   attrib=GetFileAttributes(FileName);
    # U( L; @8 t5 |) O6 B4 ]
  191.   if(attrib!=-1)1 A" A) q- h& J1 F0 u9 ]9 `
  192.   {/ R+ b5 ^# A2 E2 [
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    $ b4 o' o  m& ^1 ]
  194.     if(!SetFileAttributes(FileName,attrib))& L/ U8 K6 F% f; ]: ?0 G
  195.     {6 ^& m3 x* H* c) f+ B
  196.       return FALSE;" o: g  }7 _5 @* u. w- Q: ^3 G
  197.     }/ p0 J) O" W0 S" ?1 n! A3 K) P
  198.   }
    , I* Y- v% O2 Z+ O- z( \5 S
  199.   fp=fopen(FileName,"wb");
    4 h) i$ m/ Q! [" ^$ x9 @5 X- u
  200.   if(fp)3 @1 B& p$ ^! R( ?
  201.   {' e9 e6 ]! R& m
  202.     fclose(fp);
    # A. q* Z2 R: x7 d, b
  203.   }: L. p0 W+ U1 K. t
  204.   return TRUE;& j: F% @: h: b$ Y& S2 D4 k. N% @, q, F
  205. }
    " u5 o# H- j/ k3 t- P( E* k0 C1 K
  206. 5 c) Z, Q& i3 [0 ]+ F
  207. BOOL CRevAppApp::UpdateLocalVersion(void)& f# p$ ]. N0 X0 V: \2 b
  208. {
    + Y% S9 U! V9 w8 t" V- K4 [
  209.   char filename[MAX_PATH];$ ~; X' h" ]0 w5 Z
  210.   LPUPDATEFILE file,olds;
    6 y5 k+ u9 w/ ~$ H& o  T1 B) l
  211.   std::map<int,CString>::iterator i;9 ^+ d7 o* Y4 [9 n
  212.   std::map<CString,LPUPDATEFILE>::iterator p;; q  c( ~- I6 Z, J" i; M7 t
  213.   std::list<CString>::iterator l;" a. J# ^7 O/ M) s7 u
  214. - {' l( E0 V% v0 d( a$ a
  215.   if(bFirstUpdate); B8 D( p( h- T; a4 z
  216.   {
    3 z0 P! I( D; F  n# A3 x# T; a9 z$ S
  217.     dwCurrFile=0;
    7 T* E" s( U* y- M& p3 i' h
  218.     bFirstUpdate=FALSE;
    ; ]  }: [# S* G/ b# E
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 I# t: R* p2 ~3 ^' w% ]- c" e
  220.     {
    2 @3 w1 Q3 B3 N
  221.       dwTotalFiles=UpdateLocal.size();
    - u* W6 O0 n- c1 G3 Y, q
  222.       dwDownLoaded=0;3 G0 ~/ S/ d3 H1 p2 r
  223.       bSilentStep=FALSE;
    0 m1 T$ U. I0 y7 v; N- ~& U
  224.       bCompressed=TRUE;* e) H- L0 Q  z, L7 `: V" P/ ]6 M' x
  225.       strExtLocal.Empty();
    8 @$ c. N  g8 P2 [
  226.       strFullName=(*i).second;# C! D& b  j( _" S4 s& Z
  227.       dwProgramState=AP_CONNECT;; K4 Y6 b9 G1 w$ j  ^, ?
  228.       return TRUE;# T/ [3 c! K# p- ]! u& [! S- L
  229.     }: G9 V6 r. C1 e; l* k& Q/ x) B
  230.   }
    , _% {' i9 F/ M" h' C6 ]
  231.   else if(bRestartUpdater==FALSE)
    . t) I- k% }' h. q4 h9 G2 d0 y
  232.   {/ ~' {" [+ ?$ o
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ! Z1 U5 p) O# m! s' u7 F
  234.     {
    ( I) C3 i+ v+ s+ f/ \  l0 }" h
  235.       file=(*p).second;
    & x2 h2 Y0 N! S+ W
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    % o/ x# N( o2 l' ?
  237.       {% k' F& _# b8 K" r
  238.         olds=(*p).second;
    , ~0 k" I" @) |' o& W
  239.         olds->vers=file->vers;0 ^5 v# k/ x' X9 b2 @9 _  y
  240.       }
    3 h& U! m9 [' K( M/ P8 ^: a# ?6 a
  241.       else
    $ h8 u) ]7 }0 @' `2 k3 v: a3 O
  242.       {
    2 s  Q4 r% K! ~+ @* p& K
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 b$ T6 K+ G$ t4 r
  244.         memcpy(olds,file,sizeof(UPDATEFILE));9 o# N: b6 F0 n* m
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));) V4 P6 F; ?: z5 E
  246.       }
    & ?- G% U6 K# @( ~0 e! F+ n7 B2 i
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ( n3 L7 _+ i3 r3 U
  248.       sprintf(filename,"(%s)",file->file);
    8 z0 u4 F0 Q: ^7 ]- w- p
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # `2 G/ o, g. W* S2 C- {6 Z4 l% E
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    1 e" Z5 ]0 c6 ?6 G8 K8 w& y# R# V
  251.     }, P( Y- R* w4 D. m) K# c5 c* u! C
  252.     dwCurrFile++;' d. o9 x8 k$ |8 h
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : N, q% h, W0 }, Y% P- }
  254.     {, n8 A, R* ]& t! t9 Q# c7 Y
  255.       bSilentStep=FALSE;
      ~5 U" j* s7 W
  256.       bCompressed=TRUE;
      d  ]3 m: f) d! ^4 M: j6 R
  257.       strExtLocal.Empty();
    ! q1 G  Q0 y$ D3 D9 o( r1 A- o# C
  258.       strFullName=(*i).second;/ v) q& ^3 U3 ~6 v" I: v6 i. W) s  s
  259.       dwProgramState=AP_CONNECT;
    ! a, q* a4 a( D" F$ P2 t- G+ @
  260.       return TRUE;
    2 }5 N  z1 V' M! A
  261.     }- p! z4 M- t: @
  262.     if(!bRestartUpdater)7 G* g6 I4 S$ u0 s! M
  263.     {$ Z6 |+ a- T# ?0 U
  264.       int iCurrSize,iFileSize;' g$ Y, k9 W, q
  265.       iCurrSize=0;1 ^  ]' U4 A3 q$ \& a% d
  266.       iFileSize=UpdateList2.size();9 Q$ U4 f% v' {# V# h* ?
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    2 o! c& L. M  @2 c$ k8 K1 q& M7 O4 ]
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");0 E( |8 W. I% S  \0 L4 C# _3 t
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");/ F' D& H6 G0 o' H0 M! c' S
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# C/ F' A% k4 c9 }  }
  271.       Fclearf(".\\update.dat");
    ( t- {1 f  i, F, W
  272.       Fprintf(".\\update.dat","Bloodyf\n");5 ~/ b  l# o1 }# |6 ~: c- A& J8 }3 v
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 L7 H; k8 R% e* I3 F
  274.       {7 \( h$ z+ d( [6 ]( ?8 m
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 J# i6 ?" E1 }# g
  276.         {! y  w* L5 C+ }5 ~" D
  277.           file=(*p).second;7 s/ W# S# U* A* K; G+ X% a" _# O
  278.           sprintf(filename,"(%s)",file->file);
    2 x. i: t/ h/ y/ n' Z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ S1 @- `' k7 b  h
  280.           iCurrSize++;6 V& ?! _5 q* q' V$ m
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ' {- {, @8 ^4 a6 F3 t
  282.         }
    " O" I+ x  E+ f1 j7 Y
  283.       }
    : d! q# @3 q9 V
  284.       unlink(".\\update.txt");+ ~3 w, I/ z" f/ X4 l0 L. `
  285.       unlink(".\\update.tmp");2 f. Q; _8 z0 h6 C2 X
  286.       Fclearf(".\\checkversion.dat");
    " I! k0 I+ c5 G' t, t6 L
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ! v; q/ Q% \5 C' M
  288.       if(UpdateLocal.size())# A/ `3 I& p) K6 Q. A- N$ P, c/ q
  289.       {; _: {2 H6 U+ x2 K
  290.         UpdateLocal.clear();: G2 t8 z3 f& w) [4 s" L
  291.       }( e8 T) h6 P. u7 Q9 Q
  292.       if(UpdateFile3.size())
    # I# y- u  a" b9 F5 i; t! }# W9 ^
  293.       {8 o6 E0 ?* P* i8 t5 S
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      c9 |1 I- ]5 C3 v
  295.         {
    6 p& e6 |2 e+ O0 S) s& |
  296.           file=(*p).second;% r0 W) H, o6 [; ^7 z9 Y
  297.           free(file);
    : I3 c& s; M; S# X, G8 G; ~
  298.         }
    8 V7 S7 D; f! `4 z* k) p
  299.         UpdateFile3.clear();) C( ]- o5 p  P3 {4 F$ o3 u- |( M
  300.         UpdateList3.clear();, b% Y% u" y5 z* O* |% u& M
  301.       }
    ' \+ q3 X( q9 p3 x3 m2 e
  302.       if(UpdateFile2.size()). ?) w- f* L$ B9 ~' B  w) B, f" y
  303.       {
    / q& x/ P& K0 k  g2 u4 A. `9 U) j0 m3 D
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 t9 y, J$ [9 C8 q: U0 T) a
  305.         {5 j9 O/ ^7 a/ ?7 @+ o1 ?" P: I
  306.           file=(*p).second;' m. e5 x1 W6 o% D
  307.           free(file);& g( ]3 h5 Y# N+ q' l
  308.         }$ F6 k, {4 k8 J: N  A6 D2 M
  309.         UpdateFile2.clear();! s0 b8 N( b& Q8 p
  310.         UpdateList2.clear();# A( z$ O" I* d) Q
  311.       }
    0 \2 v# d$ {0 w, x. v7 |
  312.       if(UpdateFile1.size())3 P& X! }+ {+ z- D5 s5 l
  313.       {  X7 l4 f: b+ t$ q: Q
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / |2 O- o. z6 T, J. ^
  315.         {4 H( P" d7 }9 I2 a3 Y
  316.           file=(*p).second;( f8 M$ R. u( U1 R6 M, {0 T
  317.           free(file);) g0 `0 G: Q( V; c3 {9 ]: j
  318.         }
    4 w* K5 S% t* S) X8 B
  319.         UpdateFile1.clear();. [3 v# t9 E  B  j& C7 o' V+ S
  320.         UpdateList1.clear();
    4 d- p3 {3 P( {1 x' F
  321.       }
    # G, J' s% \) P) A' t& g6 ?# I
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));0 H: l" A, C1 ~8 ?- m+ _) Y0 I
  323.     }
    6 F- k* a1 Q# ]. f% q! X$ A2 a6 Y
  324.   }
    , l" H9 `9 s) d5 `; k" n2 I
  325.   return FALSE;
    * Y: B* ~5 N2 A; m
  326. }9 w4 \% |" y3 X1 |' A2 V; B0 k0 x

  327. * W9 k# p; [9 t! l3 k# Q0 n2 C
  328. void CRevAppApp::ClearAll(void)$ H/ [* T8 y$ i; H& u# l: }2 X
  329. {
    % @4 A' ^1 r. I5 v; R. P
  330.   LPUPDATEFILE file;5 l& J. b" H* `
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    , ~2 n' x4 c0 w: e# X2 P! s  p

  332. / Z3 g5 S. d4 _5 J  k% S( r5 W
  333.   if(UpdateLocal.size())
    $ f& {6 K- S7 `1 C: u
  334.   {; n: j. d1 r  q- p$ y4 w
  335.     UpdateLocal.clear();  k5 A8 }$ o) Q
  336.   }
    / o* ?* J* v) I3 k0 c  U: K
  337.   if(UpdateFile3.size())+ P: w  U8 T/ [8 B3 Y' e
  338.   {
    . O) J" w/ `* z9 ^- M% {
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 d& J  D) l- M- G5 h# t- `8 S
  340.     {
    # c7 ~5 e  s: S! i9 n
  341.       file=(*p).second;
    + J2 |1 k1 o6 \* T& u6 ^
  342.       free(file);
    , P" ]8 B7 F5 R& g* F
  343.     }
    % l3 E' z$ n8 M, f, w  c7 J* q/ m, q' P
  344.     UpdateFile3.clear();
    : L* K) i2 z* s; k
  345.     UpdateList3.clear();
    . P8 y+ H- {' _6 \" u
  346.   }
    / K7 ?% Z- ?  n2 T# e
  347.   if(UpdateFile2.size())
      t" d! L8 }& L4 o$ S" o5 y6 R
  348.   {1 g  Y) y: l0 d/ q- M0 e
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % }; r* O7 Q7 P
  350.     {
    . k6 w/ i7 z) d5 t5 G* @; k
  351.       file=(*p).second;
    ' R9 t0 I4 E* T3 _/ d
  352.       free(file);
    ; T5 `) y/ {* W# R. U
  353.     }0 j  r( t# _8 i" c8 j3 @& `
  354.     UpdateFile2.clear();
    0 [, S, w7 [0 C6 K2 D! n+ \( T
  355.     UpdateList2.clear();6 j$ Y! G4 {. o  @5 [+ _9 L9 S
  356.   }8 E/ A4 }0 }$ P" O  p& m$ W/ ~
  357.   if(UpdateFile1.size())
    7 ?) G% c2 B3 R
  358.   {# S: k3 h% d7 k2 p. i1 A* \
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ |5 \. L5 I- @7 \
  360.     {# T' L; Y/ u6 e, [9 N- |$ g
  361.       file=(*p).second;
    ) v3 v  C; f. l: O/ m3 R5 e
  362.       free(file);- H+ t" q; k  l- y1 n+ y
  363.     }: M$ ?  Z, r# X
  364.     UpdateFile1.clear();% l: n4 f( z0 X$ @+ f# y7 d
  365.     UpdateList1.clear();
    % o1 t1 ^* Q4 f# k
  366.   }
    * p( r3 S. _+ |8 }* e8 ]
  367. }  
    # G( `( N) v5 ]& d! ?
  368.   
    + r7 H2 {* {# K: P9 |$ o# {
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    " \% \+ u: ~. B& P7 d/ K6 c2 A
  370. {) T* \' J# y" U- T
  371.   int c;
    6 y( M3 Q; [. x; G$ i, g$ |
  372.   LPUPDATEFILE file1,file2;
    . p2 V( v, _; D1 `
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;; p7 Q1 L) r; v" Q: X
  374.   std::list<CString>::iterator l;* g1 \7 I$ y: y/ Y
  375. 8 {" y+ `( B. V: V' d1 H
  376.   UpdateLocal.clear();; ~' l4 f' `$ h1 f
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    + V# `0 ^! X% a: b
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);/ Q  u1 q: Y! s# b' ^1 c
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);9 l  ?: D+ t9 L/ b( S6 F. B4 R
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);* R- }  f3 X# m5 Q6 D$ Y5 R/ Y
  381.   if(UpdateFile3.size())( t1 @* z! y$ ~' W: _
  382.   {( W! o3 S: |! ?/ y% I# I
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)1 e9 I) J, K4 f# @
  384.     {# O9 p5 E6 q# K6 Y
  385.       file2=(LPUPDATEFILE)(*i).second;
    " V/ T* S# \- s$ S6 o
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 }& U. Z, p: ?+ V7 I. ~
  387.       {5 j0 E! D2 i& G+ i8 |
  388.         file1=(LPUPDATEFILE)(*p).second;
    ! k# C0 z# h" P* o; t1 d
  389.         file1->vers=file2->vers;5 k4 \( L; ^4 \% u
  390.       }
    * D8 g) s4 ?; W& I2 B
  391.       else
    : p5 m1 H/ D$ Z6 B5 ]- Y. ^7 B! z
  392.       {' m2 n5 J1 @) s6 o" [* D1 [) d% S
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' b+ F+ i. K) |7 C( ~# d& g! k) F7 G
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - m+ c" z* ~1 z$ C
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    , v' ?" z3 J) B( g- i' E- _$ @) f, f
  396.       }
    . M+ p9 a5 z7 N0 t4 `
  397.     }
    3 U2 s6 v6 `. i2 o" |
  398.   }# T# v2 O) X3 G3 u9 M; c6 }: v! V/ x
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . s# `" ^9 m( o. W: `- c
  400.   {
    ( [$ f! C6 |' z+ \( V
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    2 o) F1 Q6 t) c
  402.     {
    " g& y+ _9 s# n6 D
  403.       file2=(LPUPDATEFILE)(*i).second;" ]0 m- L. ^) K0 z, [
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : z( ^# G/ {% b
  405.       {2 y/ m, a6 E: O5 R5 k$ c3 g5 i
  406.         file1=(LPUPDATEFILE)(*p).second;
    / F! p' z$ ]4 }9 ^5 p
  407.         if(file1->vers!=file2->vers)$ |- n" e# F6 H7 K7 R1 |" m- \$ e
  408.         {
    % P! m- ~) C1 C# |( V6 X
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; t  w2 a4 X( |6 t" |3 c7 w' y
  410.           c++;9 f7 G! r& D0 Y  o
  411.         }7 F% Y* V# X* M7 ^
  412.       }5 }0 M* T7 B3 b8 p* |
  413.       else
    ) A& E! u0 f4 v
  414.       {
    7 a, v2 P2 p* l8 P' X
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    : f/ t8 }# k- a7 [1 ^. s  M) m1 U
  416.         c++;% j8 e9 {2 ]# k7 \) U! V
  417.       }
    4 P7 d- H; Z# Q& C: {  p
  418.     }$ n* s0 u; V* ?/ x
  419.   }
    ) |7 O' C- Z1 M+ q. P0 C
  420.   unlink(".\\DownLoad\\update.txt");
    6 q' `- g1 }  ^& W# d$ l5 C
  421.   if(UpdateLocal.size()) return TRUE;2 ~" l) `8 G* x# [, a  Y8 T
  422.   else                   return FALSE;
    8 [$ }, Y, j, V
  423. }
    0 }4 I# _2 V; ]( p

  424. 8 }7 q  k1 {4 t0 k$ Q
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"( Z/ @) q" {7 \% H
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"7 Z6 l: R5 i$ s  T1 i# Q- t

  427. 9 s, a9 {- Q+ Q9 w8 v) o8 d' s) y0 V

  428. ; ~5 F( @& H: J0 t, F
  429. % u( a0 G/ S+ I* T& L/ Q/ v5 N+ ^- P6 T
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 l" Q- [0 U1 c3 y) J1 T  [! a7 d) {
  431. {
    ; U1 [8 v7 O1 m
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 T' r+ o' X* ]7 G2 n$ t5 b
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)) C+ I5 B/ @) B: a
  434.   {6 w2 [0 Q. b7 O  G+ p/ ~
  435.     char szLanguage[50];* X/ I0 [6 g  [
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" b. y) N2 \5 E. p; f5 n- i
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# ^7 [$ F6 T, j  ^- x9 u
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- Y+ k2 {6 Z+ O$ c/ t9 `
  439.     else                                   m_iLanguage=ENGLISH;( o$ c) ~, p4 k! u9 x
  440.     char szRegister[100];
    $ G1 p7 A, M+ p" C/ d* N
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 c8 ?7 p4 A5 [0 c. Q7 M! z- K! t" i
  442.     strRegsName=szRegister;
    ' N! R4 ^( ]) `0 E1 Y
  443.     char szPatchURL[100];: O- F" Q; J% b- W/ Q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 [1 _7 u: h5 ?/ G
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);& S$ d7 _  A1 e& k
  446.   }
    : [; d1 [5 n. X: K5 V7 B; D
  447.   else
    ( o0 F/ {  c3 J8 r4 }% V1 }) h
  448.   {
    # R- \4 y( O2 M; d  |0 f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);" ~2 D/ P" V% r( r4 Y4 {+ m, g: |
  450.     strRegsName=DEFAULT_REG_URL;( c( |9 {* K# L; R% _0 [. x0 n
  451.   }
    # l+ Z* K. ?; p- |8 c
  452.   if(GetFileAttributes("hosts.ini")!=-1)5 K' J1 \6 m+ \- w
  453.   {
    % V9 w* v) C* {* _; d( v2 C
  454.     char szIP[50];/ q; V3 S' d0 i' K3 f5 Z: {9 R
  455.     char szDIR[300];( g% g- M& D$ Z4 K$ s" W6 R! l0 a
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    & l, z1 Q" i4 i# I/ G# g( k
  457.     {
    / C; k' H% R! n9 j+ O" V, U# _
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");2 W- |/ Z1 x) F7 L* S4 `
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    , a/ ?5 b4 L0 b& c/ I
  460.       strHostName=szIP;
    7 E, B& C, r3 @3 S5 n
  461.       strHostPath.Format("/%s",szDIR);* a6 g3 a/ h' _
  462.     }
    ; [: u, M7 Z' ]2 N/ j4 B
  463.     else
    % ^( L& ]/ c8 G# u
  464.     {: x! o4 A/ c0 W: e: |
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % ^$ b7 l3 V4 |% k& j; F
  466.       {7 f, @% x, f: w5 }- Q
  467.         char szLanguage[50];$ L, A% |: d8 R$ v
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 @  z: M  b  d0 f. ?4 A7 y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 u3 |, g  V! `( ^6 O* v  ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' L# Y9 @9 Q1 x" }/ g# n2 j4 N
  471.         else                                   m_iLanguage=ENGLISH;
    1 b9 }( h8 O9 _& t4 U; o1 W
  472.         char szRegister[100];, j: A1 u9 d; h+ P* m$ p1 I4 Y9 ^
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ S1 B8 ?3 j7 f& [8 Q/ q
  474.         strRegsName=szRegister;5 N( H$ P0 p. H4 v$ P* _
  475.         char szPatchURL[100];+ G( q; U0 \: G- b& ~# _, U. E- [
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 [$ b% z- U: u. {+ `6 T4 S. t
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 Y: o( m  D% a
  478.       }
    , V7 ~1 {% U" u' m; v& J) t# ^
  479.       else
    / B/ s8 F. G6 }1 z' h  W: I2 N
  480.       {
    - z6 I6 Y& k! ~" S
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 h1 O, h, P" }
  482.         strRegsName=DEFAULT_REG_URL;
    3 a4 o5 K3 m* ~
  483.       }
    . i0 Q& b- ]2 D
  484.     }
    2 r( o# ]- n8 `! R" U+ B. @
  485.   }7 {1 u9 ?) \8 Z' K5 B: I: g3 [+ d
  486.   return true;
      f  p6 ]- h" L- {
  487. }9 B1 v- e/ _4 Q

  488. 5 b2 l" W$ b7 Q8 t# C
  489. #include ".\ZLib\unzip.h", Q6 f5 n3 j" M' F# f# d
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);- g7 o7 w& v! A+ ~
  491. /////////////////////////////////////////////////////////////////////////////& d9 o5 G* U6 `' [8 o
  492. // CRevAppApp initialization, |; {5 Q# `3 M5 J  J$ N2 J, v
  493. ! |% K. {! @: H$ D( |
  494. BOOL CRevAppApp::InitInstance()
    & S; d  r2 _: r0 X1 j) L
  495. {- ]/ j4 W8 r3 y, G1 h
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];8 o7 c" C+ E; n+ t9 P) S1 k
  497. 5 F, k$ I5 v. K& R; W4 H3 t
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);: k+ W( z1 [, y+ N# l  G
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    + j) u- h* u7 S0 ]" j8 `; T4 l
  500.   {( t- D& B- p4 v1 \
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    $ j& Q) c. i2 B* \# X& p" u+ H0 Z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);" T( R/ ]  f# `  q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    1 Q+ g4 b- g: _* I
  504.     {
    ) _# L% v6 W* D/ d+ V
  505.       strcpy(szPath,szPathTarget);4 n, M7 T% w" P4 p6 s
  506.       SetCurrentDirectory(szPath);; f8 @) {+ Y/ `* z8 M, c
  507.     }
    / z7 V, m0 I) s- Q
  508.   }, `) w3 a% ?. M5 Z7 t7 N3 m
  509. #ifdef _DEBUG2 y; k# w) u+ F
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) T6 V. L3 j/ W/ [3 D1 f9 t2 ^8 b
  511. #else
    1 j5 b) W; x+ _" u) @) w% Y# b
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ v9 @  Z6 x% p0 w
  513. #endif. H4 l! L2 T/ q7 Z% x$ s9 I
  514.   {
    ) q, a6 j% c: k% u9 m
  515.     char tempFileName[MAX_PATH];
    5 `9 H+ z* g& k. @; k( O
  516.     strcpy(tempFileName,szPathSource);. {/ k3 z) K. _& @; {8 r( T
  517.     tempFileName[strlen(szPathSource)-12]=0;0 F9 O' v6 F) e$ y4 U2 D- s7 T2 h
  518.     strcat(tempFileName,"\\$CSUpdate.exe");( R/ z% q# `; ?( h
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 }; P; [! X+ b' K8 c0 b* J
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);) Q; w* n' x# x! b- ]
  521.     return TRUE;, C  J6 ~* n" A/ J
  522.   }7 O2 C7 l9 H( [7 m' A
  523.   // Nuke 0118: Delete run.exe
    + N2 C8 K) r3 m" ^! v% y. z3 V
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );6 v) H# r* X. A; {. o( p
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");. y( z1 M" Y$ b7 E
  526.   if(!ReadCfgFile("Config.ini"))
    1 ~+ O4 e' Q, |0 p4 s2 V
  527.   {
    . n! o$ ?: ]' v! h7 R1 T5 D- j9 i
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);7 A% [( r& ^3 h$ u$ O
  529.     return TRUE;
    8 H# P7 k3 T1 h4 \( [; y# c
  530.   }0 H6 S' x+ O: I: E# D
  531.   HANDLE mutex;
    ( {) M- p; I$ l' d2 ?
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))3 @. c8 i  h6 e, b8 C5 _
  533.   {
    + z, R, d% _* l: Y  H& Q6 U
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    $ M/ t7 m6 c+ s. F* ^
  535.     {
      X. A# z6 c7 O
  536.       CloseHandle(mutex);
    . U' c, D% |" k4 I
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    1 ~: r$ r' y; l5 _  f
  538.       return TRUE;
    : B! w+ {! S+ t1 W, O
  539.     }' b* N4 f& l; u6 Z# w
  540.   }  , r# ?& m! J! E  Y) G( F
  541.   CloseHandle(mutex);
    # o4 I3 q, Q* i- G
  542. / H) t3 Z8 A; G" p7 x$ g# T# d, a+ Q
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);! l3 d6 d# M( z% T4 B- w
  544. ( u2 x+ i. m! Y; D) N0 b4 a+ _
  545.         AfxEnableControlContainer();/ l/ J" k4 Y+ Z
  546. 0 ^. L2 M: R8 S7 s
  547.   bCanUpdate=FALSE;
    9 F  X! s6 m& u& n* d  N  Z1 I/ A
  548.   dwStartUpSteps=1;
    0 Y: y! O5 N% A8 \4 k; d% y9 T' ~
  549.   dwProgramState=AP_NOTHING;
    , T, U, m, L, ~" |% X" a' e
  550. 2 L" [7 }1 G) U! f( r9 r( w
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);  c3 e7 H9 {/ t3 m( v

  552. # t) k) i0 V: g  \1 r$ z
  553.         // Standard initialization0 B+ J7 Y* w: c5 G- v. P, T
  554.         // If you are not using these features and wish to reduce the size6 }1 L2 D9 @+ M' z2 H  ?8 k# G" d
  555.         //  of your final executable, you should remove from the following
    ; M8 N. B) s+ i
  556.         //  the specific initialization routines you do not need.
    7 j' E* A  d4 C: `' r4 I

  557. 0 [# @- M# _* J8 L- E) Q
  558. #ifdef _AFXDLL0 Y5 N" b2 Y# T% m, Q# g' w
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL2 U+ d) ^& X6 S( e: t5 Y& t6 m
  560. #else
    1 I2 y  g' _. c6 `6 ^
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
      s4 t+ q- W  c6 D" Y/ b
  562. #endif. b# t/ K& L$ u  b$ L

  563. 4 `- t2 K$ @& c+ \
  564.   dlg=new CRevAppDlg;  h6 x2 Q# w3 @. j# \" ]$ T
  565.   dlg->Create(IDD_REVAPP_DIALOG);: g0 B, _4 k( G; u
  566.   dlg->ShowWindow(SW_SHOWNORMAL);! A6 K8 W- n, `  u3 B1 s
  567.   m_pMainWnd=dlg;) s% e% |4 B( x

  568. ( @$ H# W  V6 m" `/ \/ v
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    " H# r% |+ f: r& N5 f/ G& g0 Z& @
  570. # \/ x( a; d. Y
  571. //  GdiplusStartupInput gdiplusStartupInput;
    # @) Z6 l7 i/ _+ b& J- F4 g
  572. //  ULONG_PTR gdiplusToken;
    5 N' B( j1 d6 A* N  o5 P$ H* n' J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& s) [  Q" M8 C% C2 R' c5 E# _
  574. . W; ?, h; {3 Y; f/ C* v( d
  575. //        CRevAppDlg dlg;
    8 x) X, b6 Q) s5 j3 x3 L+ ?8 l8 z8 g
  576. //        int nResponse = dlg.DoModal();0 [: \8 o. [. S1 H+ x! B4 d0 T
  577. //        if (nResponse == IDOK)8 q. j& f# Y' Z' X
  578. //        {
      X/ g. X/ v6 ~; I7 a
  579. //                // TODO: Place code here to handle when the dialog is) ~! U7 {4 L& h
  580. //                //  dismissed with OK
    1 h: {" L5 {+ K+ u- l9 v) u
  581. //        }3 F# a  j1 D+ y$ [
  582. //        else if (nResponse == IDCANCEL)
    $ x3 c  F: A$ B/ }6 y3 ?% E
  583. //        {% b6 h  p4 R! B& j
  584. //                // TODO: Place code here to handle when the dialog is7 v7 z: t  e. K, G2 s
  585. //                //  dismissed with Cancel) J; _, E. O& J6 |  _
  586. //        }
    8 ~, d4 x0 Z# |+ d9 k6 W

  587. ! n, N! i, T: ~" g
  588.         // Since the dialog has been closed, return FALSE so that we exit the6 \# W$ f- J8 W
  589.         //  application, rather than start the application's message pump.; k+ ^2 `% w9 a
  590.         return TRUE;
    $ o1 m/ t  ]; k7 ?. l9 I% r. y( M
  591. }# j4 {' B1 K( K+ i8 L, q$ q

  592. / E+ r% d: d' u4 W  Z" M4 p% y
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ! C+ e3 [& w& ]0 V! w  I; }% R
  594. {
    6 k: t0 ~# @0 A# Y3 \9 r. C# Z5 d. w
  595.   int i;, I. o9 [! }: s1 C8 o' c
  596.   char *szRet;- K3 f8 G0 ?' h& d! q6 a( G

  597. * Y1 W9 f# C) w5 _- {/ `6 ]' z
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    - Y" N6 D; ^2 I7 A4 |& ]& @
  599.   if(sztoken)
    & C- m' S4 f2 a3 b0 T/ ?$ q7 D! C
  600.   {
    9 I% W6 `" I! ?- U; n  ~: f: P
  601.     szRet=&sztoken[itoken];( d/ w- o- J* o
  602.     while(sztoken[itoken])
    6 s) b% [3 |7 v1 k! q
  603.     {) M# G4 t' i! T" P4 @  Z) s$ D
  604.       for(i=0;i<(int)strlen(token);i++)
    3 @, v7 Y7 }' ?" d' f
  605.       {
    9 m% ^9 Q: }) q
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])" U& f! j' r9 g7 v/ T' R2 S
  607.         {! s0 w6 b; a, `: a& e& I$ I3 U  K9 h
  608.           sztoken[itoken++]=0;0 r  f- ^6 U3 }9 W3 Q5 h
  609.           sztoken[itoken++]=0;
    + V7 U7 f* x- u! F' k! `9 A
  610.           return szRet;
    1 [; z+ o* m! o9 R9 a7 G& I; D
  611.         }
    * i( B. B5 K: X% a
  612.       }
    & P. C! I, M6 H/ J9 p- i& y
  613.       itoken++;
    6 Y8 p( i! D5 x/ x% u; T- U
  614.     }$ [9 H6 t* c$ q
  615.   }+ @% T. Y/ j3 G$ }, A
  616.   return NULL;
    ; X. k/ o3 h. ]% U
  617. }  \4 g8 x! Q6 G# U$ _2 W
  618. : p  a! O& C& E
  619. void ProcessProc(long Total,long Current)
    9 T( l3 e& [: ^4 b/ C
  620. {
    3 X( f% j" d! ^/ B5 S
  621.         MSG msg;
    $ L1 |: D8 d8 v! E, j  o" b5 p' b
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ( l6 I, D" ]! o& M- O3 F
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    . n) a* M/ h  A5 K$ t  @1 ^( l! X
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    1 O+ S5 ^# u; k; w9 F* ^- T
  625.         {( G8 U' {! V4 p+ n1 R  r2 v4 a
  626.                 if(!GetMessage(&msg,NULL,0,0)), t; j3 b0 F$ l" M
  627.                 {
    5 a6 w2 t5 i2 ~/ w; `6 P" a& Q
  628.                         return;
    % }& _! w# O2 @+ h, |1 x( S. `0 {: |
  629.                 }% n! }/ \8 m+ @0 |. d
  630.                 TranslateMessage(&msg);  n- Y; ]4 x3 t' i& X
  631.                 DispatchMessage(&msg);
    , w* B' S+ b5 l# x1 h' a4 M! ?, E0 o
  632.         }        7 @( m) ?) U7 r6 Y7 X3 Z
  633. }2 _0 g3 c' G4 R8 ~

  634. 5 B2 |- M& e6 z0 g" E9 N3 N8 z
  635. BOOL bFirstChar=TRUE;- ?( Z- I5 \, g7 |3 h1 a

  636. ! R- R* c9 o+ C4 S: I+ `0 R
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    9 i* A. _' A, ]' d  M+ B
  638. {
    / N: \5 {6 B) w5 a& p. l
  639.         // TODO: Add your specialized code here and/or call the base class. h3 b" t9 A& m7 h- B
  640.   switch(dwProgramState)) S4 F# _; A, E( Q0 {' F9 D# a
  641.   {
    2 I5 |$ N) i. ^/ {9 D! D& ?$ G5 x
  642.   case AP_NOTHING:8 g' h8 d8 @& z' q# \7 g# q4 I
  643.     switch(dwStartUpSteps): f# I, [" \1 {) c+ X1 H* U: W
  644.     {
    $ a# J" R1 Q4 p* W, R  Q# S: \
  645.     case 1:# q. e4 t9 w- p& B) w: I
  646.       {6 j" k+ {8 y' |- t- X% U1 q
  647.         int i;
    . S3 X* z* ^2 m' a9 u/ E9 S
  648.         CDC *pCDC=dlg->GetDC();
    : m, Z! i5 ^* k+ }
  649.         HDC hdcwnd=pCDC->m_hDC;
    # h1 p2 R$ q! C* w
  650. //        Graphics graphics(hdcwnd);5 r; n8 W' F3 M" C2 ~
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");. s# R6 }+ ?' m5 t* G9 \
  652. //        INT iWidth=bitmap.GetWidth();9 m) u  |! {. L, X( H: e, Q
  653. //        INT iHeight=bitmap.GetHeight();0 Y3 e! o! x+ H9 j
  654. //        Color color,colorTemp;7 r% @, G* o2 E, v2 X$ `& @. ]
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ' q. Y" v, S: r/ g* [
  656. //        {
    . ]7 t/ @6 R# R. z+ W  R3 i, J
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    1 Y" N  S/ H9 A8 u. y0 Q
  658. //          {
    , F3 c% R0 T1 e$ Y) Z  y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    * N* f& k* Y& l2 o2 @3 N
  660. //            colorTemp.SetValue(color.MakeARGB(
    : E: ^& \0 ?( X& j" \+ k4 d
  661. //              (BYTE)(255*iColumn/iWidth),. n5 `  i& K5 y* d7 d7 n
  662. //              color.GetRed(),
    4 A- _* s0 ?# P9 g& l# ^
  663. //              color.GetGreen(),
    * U. ]3 {( O. [# v: g
  664. //              color.GetBlue()));: B# W' J. E3 z/ c3 A
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);* D* \" @7 F7 g: H* D( J. |* O' ~
  666. //          }
    8 a) s' T7 r4 h/ }4 J
  667. //        }
    + |4 R4 q$ _3 j3 J, x
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);* d: j% U, ]7 I5 u( V0 z+ J  @# g
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 B$ C# Z6 v5 H' s0 ?, P
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");( c+ q0 O1 R) N- A6 S# i
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . T* C& D. Y# y# o. _1 @9 d
  672.         for(i=0;i<240;i+=8)/ `: b  W( j9 o8 L% R6 f; }
  673.         {4 |' X% k# ^/ v1 B% O+ H
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ( O6 o$ z" n& `/ f
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 ?# E1 V, @; U4 Y; a
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " k# D0 G6 I, p' Z, M) J
  677.           Sleep(33);
    3 L9 ]+ Q. A+ w' e# {2 \7 l; f
  678.         }/ k8 z& p, s' `1 {8 ~! P
  679.         Sleep(1000);7 G+ ?8 ]+ t) c, v
  680.         for(i=240;i>0;i-=8)
    8 K0 N4 N: y0 `8 k; p* [/ x
  681.         {
    $ z) h; W8 y  k1 V' g
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 G# k; ]  t4 u  Y" T
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);) k0 h9 D- G/ b' \
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( P2 a4 Z' d# x' |% V; |
  685.           Sleep(33);
    , h3 K, e" e; g) I9 M
  686.         }& a8 K' q/ ~3 y4 q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);  Q4 B$ o  R9 X; Y6 A, M/ q! \
  688.         dlg->ReleaseDC(pCDC);
    - B$ l! [0 a( L. y4 G5 B7 W
  689.         DeleteDC(hdctar);% |: `$ w! ^( h& l
  690.         DeleteDC(hdcsrc);
    6 ~9 y5 b& O) q, F4 u  }
  691.         DeleteDC(hdcorg);! T8 D' e- ~3 [7 S3 ^9 g
  692.       }
    2 d: Z2 E- O% ~7 I" G" Y; T
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 v) U( w( a8 m6 b
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");( x: U$ M1 N" b/ i3 m
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");1 Y* t0 I& q  ]# k! n! @1 @8 _
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ! q% t  h5 T: M$ c
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 K+ J6 O- @/ q9 x; \7 Y6 O4 i
  698.       if(!Dn.Connected())# X% N! }3 m, D3 R
  699.       {
    6 U% h' L( N( I# X
  700.         dwTotalFiles=1;  A8 D2 L% W1 @' r! q# s
  701.         dwDownLoaded=0;$ [9 Z0 k# |% O% [
  702.         bSilentStep=TRUE;
    $ a% f4 U" M8 y% U) }
  703.         bCompressed=FALSE;5 O0 ^9 l! q  @4 I
  704.         strExtLocal.Empty();" r) Q# W) U9 C4 s6 [+ d
  705.         strFullName="readme.txt";& {2 k) u$ i# B& M6 k. v9 ]
  706.         dwProgramState=AP_CONNECT;
    5 U& O4 U: d/ T$ }
  707.       }" q: l  k# V/ d1 N  a6 \
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();1 W2 U% E# ]1 S$ f0 K
  709.       dwStartUpSteps=2;
    0 Y) \' z5 b- T
  710.       break;
    0 v/ o9 U! h& I, A' Z5 ^; x
  711.     case 2:9 k( Y6 n+ ^/ Z5 f; y/ g
  712.       {* I# t6 S+ V; ~
  713.         int iEOF;$ I- i4 }, R, @& Q6 k* l# \
  714.         FILE *fp;. C( C, A# ~0 L0 ?/ @
  715.         char szString[512];
    , `7 z" I5 Y3 ~) k6 o
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ! V3 f: [7 M& `9 D) U$ {2 X
  717.         if(fp)
    : E: m. A7 B7 e$ F! \
  718.         {9 E- e- \+ b9 @  B
  719.           do7 J. K& B9 H! l& p7 K
  720.           {* Y( @* V$ k; [" H  L
  721.             iEOF=fscanf(fp,"%s",szString);
    " K- k" r6 W  `  y/ I
  722.             if(strlen(szString))- v; `, b8 Z! o6 p! q1 U5 ^
  723.             {" X6 f5 x. Y/ @# z0 {3 L$ z
  724.               if(bFirstChar)
      o; G( p' L1 ]4 l5 T" m7 C
  725.               {
    0 U7 x5 Q  a% l
  726.                 bFirstChar=FALSE;
    + `+ A1 M. d, }' Q3 S0 |" G
  727.                 bConnectIsBig5=FALSE;' O& u# B% ^7 u# V; z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; Z4 R4 V% W- [; q. o; {6 u
  729.               }" v9 Q5 ]- m( V  U3 }
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    1 H/ |8 e* L& W& ^
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));3 i' B0 |2 b# `, }: G, J' U
  732.               dlg->m_ListText.AddString(szString);
    % a( g) i& y9 ]
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- F4 ]. P# v" M( f/ y
  734.               *szString=0;
    5 I# i* c- A/ r1 T/ w
  735.             }
    & c- b, z/ ^; g$ U$ i: ~
  736.           } while(iEOF!=EOF);
    5 ]- h. F2 {6 a
  737.           fclose(fp);0 r. \" H+ _3 w1 ?8 K8 b2 Z9 j
  738.           unlink(".\\DownLoad\\readme.txt");3 [% n, B8 F" U  a- r
  739.           dwStartUpSteps=3;( j/ s6 a; G( x  a0 Y! l& n
  740.         }$ }, K0 t6 x$ S; X1 `- u4 s
  741.       }
    5 T$ y  K8 r2 m4 H: W
  742.       break;
    8 z  X: a! F" D
  743.     case 3:
    7 N. o9 b: \/ K; D2 ]0 V
  744.       if(!Dn.Connected())
    % E- j" ^6 c- t( \
  745.       {
    9 ?( L( i+ [% Y* L/ x+ h
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ' Y( A7 d1 o4 M0 D' n
  747.         dwTotalFiles=1;
    * r+ @9 V! f4 U5 ?- Z
  748.         dwDownLoaded=0;& h9 l/ u  b  t" E
  749.         bSilentStep=TRUE;1 o! c" N( q, d( r% F
  750.         bCompressed=FALSE;
    - v2 ]1 x8 w8 d. ^
  751.         strExtLocal.Empty();
    3 Z# _1 n$ {' g4 q
  752.         strFullName="checkversion.txt";' B! G# }1 V5 L/ h
  753.         dwProgramState=AP_CONNECT;
    9 N( F/ T6 h0 R; j! o& C: ?
  754.       }2 b+ u  v( t" R6 S
  755.       dwStartUpSteps=4;
    ) ?% ^, k) j, l5 D) v  x( l
  756.       break;- s) b$ Q8 |; X- w
  757.     case 4:
    : K& V, N/ x0 t1 y0 ~
  758.       {
    ; Y* f; g4 q4 @5 ^
  759.         FILE *fp;
    5 v/ U, l2 ]% h. A
  760.         char szString1[128];
    / O: i9 ~  l" ~
  761.         char szString2[128];
    ( N( G! _6 Z! {, ]
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");% |  O! S2 g4 P7 N4 M
  763.         if(fp)% [" `1 a/ r. b4 m* v7 a
  764.         {  m; p5 f# q6 Q( I$ k/ g  F
  765.           fscanf(fp,"%s",szString1);: m6 D7 _& x4 W- @( ^
  766.           fclose(fp);2 ?% n7 L8 n# N( p* _2 F
  767.           fCheckVersion=atof(szString1);$ r) B, l: h: _: q
  768.           fp=fopen(".\\checkversion.dat","r");& \' C! j- P2 K
  769.           if(fp)
    , Q& x- _4 S/ h/ ~: Q
  770.           {
    8 Y" Y3 Q- @1 k9 v2 R% c
  771.             fscanf(fp,"%s",szString2);
    / B4 s  }/ i) E# b
  772.             fclose(fp);0 G; M+ k" X8 @# Q
  773.             if(atof(szString1)!=atof(szString2))' c' `5 o. x7 x8 \% [: }; a
  774.             {
    8 ^( ]9 p5 G5 S% R/ @, I# E
  775.               if(!Dn.Connected())1 {7 _+ ^/ E( n9 A% m) z, G
  776.               {
    5 R$ D9 }0 V, n& _8 l
  777.                 bFirstUpdate=TRUE;3 b( R- D; a8 h0 N- S% l+ k5 v
  778.                 dwTotalFiles=1;: [+ z; ~9 `3 V$ B
  779.                 dwDownLoaded=0;
    ; H0 W! p4 I7 A  h1 E1 R; ~
  780.                 bSilentStep=FALSE;' u- _5 \/ {8 w) i4 o* r. p
  781.                 bCompressed=TRUE;
    4 K' b6 E$ H+ N6 b* @3 \+ r( f
  782.                 strExtLocal=".\\DownLoad\";: u; K& P; {. l# D2 K2 h4 C  @2 b5 T" Z
  783.                 strFullName="update.txt";" \7 v7 s! T7 ~  f) F$ B/ ~
  784.                 dwProgramState=AP_CONNECT;( X/ P% m$ i, s6 Y" o
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 Q- {# H+ F7 |- q/ A. c7 G
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# H7 q- ~! L1 j: D$ U2 P
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");* F  E5 B  P, G9 I# L7 [- B

  788. 8 j8 }* l4 n9 T6 M& m* E
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - L: J& B$ j" w2 d/ Q( p
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    $ X3 `) d3 v. ]+ j
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)4 q0 e8 [3 E1 D- n* M( b
  792.                 {
    $ c! |- G5 |- K2 y+ r
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! A2 l8 [! d5 f9 J
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    - P% p: k4 G. |) c+ G- [! C2 ?! V. a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");1 L3 K2 E0 X$ w! N* j5 K& F" Q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 @  E1 @$ w/ w4 Y* w4 Y

  797. & Y6 g7 d- V  M5 m$ o% }8 N
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    8 f/ q! z( D* ^: _- h# [
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: G) b2 z7 ]2 r4 j
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    / o' @( O8 s0 T0 G- b! s
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 z. v1 ~2 h5 z  k4 u+ {7 G
  802.                 }) E# u, a$ H2 A4 Q. D+ v* t8 ~
  803.                 dwStartUpSteps=5;
    , q  Y( W( e' E  [- n. g
  804.               }
    # t$ |$ I7 ?* t8 k7 q7 T/ Y4 e; z
  805.             }" }- x5 h; W1 Y; x5 ]2 `; V8 ~
  806.             else# j' ?: ~( b4 s6 O) s" P
  807.             {0 ]( u( M( u) e; r
  808.               unlink(".\\DownLoad\\checkversion.txt");/ O2 X+ n$ z6 }( H
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    # m! H6 O- _2 _. z. r5 U$ J- R
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" ?0 a" m0 D$ c! D
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    % ~3 T& W7 }: F& L3 H* j4 y

  812. , Z# n- X- M( J8 Z  l2 g. k: ]
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) a- u9 O/ j  t3 k: `
  814.               dwStartUpSteps=99;
    " ?; N. `% |) u, r
  815.               bFinishUpdated=TRUE;
    7 Y; Z; y+ x0 V$ A  {( M; U. V
  816.               bCanUpdate=TRUE;
    # A8 j/ `- d  p  Z5 R; |
  817.             }
    $ J& |; f) q* ]1 F8 P7 m) K
  818.           }0 O7 w/ h) k$ ?2 c
  819.           else; E0 K% ~& l7 K# k
  820.           {
    , n2 R% i; o8 Y" O
  821.             if(!Dn.Connected())' b* T- }: v& U  `" n! K
  822.             {) j3 I8 R# s8 d9 Q4 K1 G
  823.               bFirstUpdate=TRUE;
    6 A. l* H  Z( g! @6 ^0 U
  824.               dwTotalFiles=1;
    + @9 F1 F  A# B! ]2 k
  825.               dwDownLoaded=0;
      m: r- k- q$ t. ]& @8 |
  826.               bSilentStep=FALSE;$ a6 K) `' c/ ~# `# ?
  827.               bCompressed=TRUE;7 t3 M# e3 Y( P& f
  828.               strExtLocal=".\\DownLoad\";+ L' F- X6 ^/ x
  829.               strFullName="update.txt";, [" i3 e, [+ ?$ n. r
  830.               dwProgramState=AP_CONNECT;
    $ n% r/ F) f7 x7 ]9 Z7 ?3 j  S
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 U( c0 b3 C% d) I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 ~$ E1 i) S% J9 B& M
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' @( A6 M3 @+ u  j
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' `  a2 T3 d! D/ A1 y
  835.               unlink(".\\DownLoad\\checkversion.txt");' R7 d3 V- s3 P
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)1 x1 _: g% r$ K8 d; g
  837.               {; r6 G0 ~+ w; B2 k
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");, X0 C7 G1 h# ]; b- }( S
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");% P7 Y4 S* j9 d" d) r: j
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    1 v/ B9 w# L( {0 d
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 I. Y5 p/ t; }& L" y
  842.                 * Q) i+ |6 h2 y2 j
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - W' [- ?, r! S% ]  q7 X/ B, |
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& _0 c6 L' B, Z# Z: o
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");1 K& J% R& O% H# o
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      [( h: x$ ^  H4 [: t! _/ N
  847.               }4 K, g; Q9 `$ a; \4 \* P
  848.               dwStartUpSteps=5;
    ; T+ t) d* K3 H: ^9 j6 k! I
  849.             }$ T: K0 P9 n2 v2 W" @
  850.           }
      E6 M/ n: V& i4 |9 ^- l/ F* n
  851.         }
    4 R1 R7 c1 K6 l
  852.         else) @- I7 \  b" }0 F) D7 W1 B* N
  853.         {+ i7 K( N: t* A; ~
  854.           dwStartUpSteps=3;
    - `8 K% `: R; B, e! r
  855.         }
    4 A( q# O6 K8 ]$ [, O+ s7 Z
  856.       }
    / v: A2 u! k+ ^6 u* G
  857.       break;
    : C/ T' F  X2 Y
  858.     case 5:/ m( Z; I+ c5 r1 ]" u+ `
  859.       {
    " F3 }9 G6 A" x  E' }: \5 R
  860.         if(GetFileAttributes("Wsa.zip" )!=-1): |& w; U" [* i+ J7 n
  861.         {
    / n) p1 `. ~) y. y
  862.           int opt_overwrite=1;- H! Z& C; i+ Y: q4 U
  863.           int opt_do_extract_withoutpath=0;+ B, n& S! N( ~* ^0 i. X7 r% |' t
  864.           unzFile uf=NULL;5 m, W5 \/ H) u* l  g6 e2 L
  865. & k! D4 \9 f; |; S. `
  866.           uf=unzOpen("Wsa.zip");
    ' p+ s7 y/ M/ U* R
  867.           if(uf)/ X' R; e9 y& @. `
  868.           {9 r( m+ _( l! x1 W' x
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);* f9 U  T( D8 X5 P" w
  870.             unzClose(uf);  x0 l# C! z% V: h. G! j, |
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    5 D; m; c9 m0 y: z2 x1 |% \0 u; M
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    " a% r. ]6 P) v! U/ u: ?
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    - i6 }& r2 Z2 B% q; O
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 B* Y: a5 P  @3 a% Q8 k
  875.           }+ H- t4 W+ ~& e  L% l
  876.           DeleteFile("Wsa.zip" );) K7 c, z. A" B! q
  877.         }' l# X3 d" h9 E9 g) `6 Q. M
  878. # }& ?2 J: Y6 b5 N% c
  879.         if(CheckLocalVersion())5 P% F/ s6 H. _( B: K/ R
  880.         {
    8 ?9 A. `- H$ h  R
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");* b6 M6 v7 X9 _6 r% ]* _
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    0 p" A3 R3 B: U$ x& o: Z$ N* x
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");4 v0 G1 ^3 c% O/ k3 l
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 g7 V# y* O! x9 \
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    4 ~& o. }( y0 e! y
  886.           dwStartUpSteps=99;
    4 E% x. Z  _% n7 t9 _( v+ T3 ]
  887.         }
    ; i( P( ]1 t! E# e% g( j" m
  888.         else
    7 V0 }/ p5 e2 I
  889.         {
    9 Q0 E  s6 K4 @
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : ?9 R  N- g* e8 W4 m
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 @% _6 w, \/ x, ?' g
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");2 u5 Z- r' p: g" j: o

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-14 17:56

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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