CSUpdate.exe源代码

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

: r8 I, X3 G* ~7 o/ V5 [* p
  1. / RevApp.cpp : Defines the class behaviors for the application.
    $ s/ q. A4 U; c. l3 x
  2. //
      m# r4 z; A- `1 D! S3 F% @, K7 B
  3. + r/ `* @. O8 {" E+ _
  4. #include "stdafx.h"( z/ O$ W2 C! \  I: Q2 F/ N

  5. ; \, |& J& e7 D" W* k/ ?6 y* t/ D) S
  6. //#define UNICODE
    6 @0 ?% `9 I+ R, V
  7. //#include <gdiplus.h>: v' }3 c" r3 u& _/ ]: G1 z
  8. //using namespace Gdiplus;1 r7 D8 g* P! E/ a2 M
  9. 4 c( _  T+ c. ]; L
  10. #include "RevApp.h"
    9 F8 z% Y, ?% [
  11. #include "RevAppDlg.h"
    1 m% x# ~# T, [$ o5 h1 O
  12. 3 _& L6 \9 R' t( E$ B
  13. #pragma warning(disable:4786)
    ) I1 x. X' S8 Y+ ?+ \4 Q: n
  14. #include <map>
    , e" y8 ^) I) n2 I+ [, O( t; l; u  x
  15. #include <list>
    0 A6 |& H. |" k# M
  16. #include <direct.h>- M) d" O$ N, H' r4 ^
  17. / j8 b9 N4 p# k
  18. #ifdef _DEBUG
    / j3 X: K" e+ U. |" D6 A4 E
  19. #define new DEBUG_NEW
    0 ~8 c/ B$ A: G2 y+ a
  20. #undef THIS_FILE
    ( W1 b5 ?1 w4 S) |9 X. y3 e1 A
  21. static char THIS_FILE[] = __FILE__;' q; v0 A; y, W4 G
  22. #endif3 Z$ }1 u; {$ y
  23. #include "SkinResDef.h"% g% M, p6 |% s3 R* `
  24. #include "ChangeBG.h"
    ! d( C1 S$ K& c4 o
  25. #include "AFXINET.H"0 I% s1 R- h1 [% {$ N7 J, O0 l

  26. + o: d0 i. Q* G; y
  27. #define TRADITIONAL_CHINESE 0
    ! s  ~* E7 Y3 e2 `) K
  28. #define SIMPLIFY_CHINESE 1, O2 V, k: d) A" A9 X- f
  29. #define ENGLISH 2
    ! L7 r8 |( p' t" O0 ], b- f! f5 D
  30. int m_iLanguage = ENGLISH;- }, k0 R3 {* z: z- m- I5 ]
  31. /////////////////////////////////////////////////////////////////////////////& \/ q: m) k) ?! M: ?1 b1 J: S  w
  32. // CRevAppApp- I8 r2 U: s) {; i
  33. % A. H# {& ?2 |, d2 E
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" g4 C1 R& y1 r$ h$ K% s$ m
  35.         //{{AFX_MSG_MAP(CRevAppApp)% @  B( ^% X0 `* s# C  w
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    5 U+ o! `6 K0 O$ }* I6 N
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    + F3 s( h& f$ ]3 w
  38.         //}}AFX_MSG
    6 a: a5 f& J8 T% I* H# G: b: x
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp): u% D  ~3 y  m7 t( T, b
  40. END_MESSAGE_MAP()
    2 f% y8 r; B( p

  41. " d$ ^) K' A+ o0 m# l
  42. /////////////////////////////////////////////////////////////////////////////
    5 R: U# x* L0 v! l) Y' S
  43. // CRevAppApp construction! x7 j0 F, M- s: s% e8 P( p
  44. 8 b7 j! V; I# c( H2 E7 M
  45. CRevAppApp::CRevAppApp()! |) G% x+ f: @- q
  46. {
    4 l& X( J2 K' \8 ^" ]# ^
  47.         // TODO: add construction code here,
    ( @: I  ], T7 O( C
  48.         // Place all significant initialization in InitInstance
    ' x. x6 C) m' T2 G" {
  49.   bDisplayIsBig5=FALSE;
    5 L9 I2 \% @0 n# m$ P2 H7 f
  50.   bRestartUpdater=FALSE;3 x" m% c0 }1 ^  v) p6 q, ^2 w
  51.   bFinishUpdated=FALSE;
    * A; Y. @* c. [9 W; M/ t. T0 V$ ?" p
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    8 S# M  G) w: l* J$ B4 o/ C  j
  53.   InitChangeDataBig52GBKS();, @7 t6 Y$ R7 Q
  54.   InitChangeDataGBKS2Big5();
    ' J: Z+ x* G) ^- W5 L' M7 P: W4 H
  55.         //# R3 ?; W, G: e2 x3 _2 Z
  56.         bClickRunExe = FALSE;
    " n2 k( F+ @+ x0 U3 f# D! B
  57.         //
    : _: K8 d8 y* M6 t
  58. }
    5 N5 m3 d4 o, Q2 I
  59. ; \) b; ^& F7 T' b/ m4 p* e
  60. CRevAppApp::~CRevAppApp()
    ; p4 |9 o1 A6 N5 j1 N9 M
  61. {
    * _5 O, j# ~/ m0 |% [" F
  62.         // TODO: add construction code here,
      W4 [  n$ g4 e; }
  63.         // Place all significant initialization in InitInstance6 C6 G( W, I9 ]* l' _1 K/ O
  64.   EndChangeData();4 Z% C9 t  p! v$ v# k( r7 C
  65. }9 L# v* F# Y+ N* [; j  J% A

  66. : ~% C4 u5 T/ H- T! G- u
  67. /////////////////////////////////////////////////////////////////////////////
    5 V. [/ s% l1 Y; z0 K* r/ B
  68. // The one and only CRevAppApp object
    2 T/ U: Q) p! m0 e

  69. ) m1 h/ D; r# V3 h' h
  70. CRevAppApp theApp;5 V( ~( i, O( ]: S

  71. ! x% f( B6 B+ ~, x0 \% O  ]% ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    5 n$ ^. G3 D) `- {* \0 o8 z# Z) x
  73. {
    2 s/ O6 p1 u( M
  74.   int iEOF=0;0 g0 h# D' |5 D+ F, ~
  75.   char szTempName[MAX_PATH];
      P- R3 N" d" ]8 P
  76.   *szFileName=0;
    5 e9 z3 ~8 Y5 t& z& U& S
  77.   iEOF=fscanf(fp,"%s",szTempName);
    3 @7 f; M7 J1 J; P1 e
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    / @8 C$ d1 S4 ]  [9 a
  79.   {
    * N! `/ }5 P! J0 g3 [
  80.     strcpy(szFileName,&szTempName[1]);) @# ^/ U1 f( w% x0 \
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)7 F, R, c1 q+ u0 q
  82.     {
    ; @* B( b$ ?+ B9 B9 k2 f* K! B
  83.       iEOF=fscanf(fp,"%s",szTempName);3 t0 u! X3 n% N5 ~0 B) [
  84.       strcat(szFileName," ");5 \  C* W, C' [& z. p
  85.       strcat(szFileName,szTempName);
    , N) v" L* [3 K: o; p
  86.     }& V1 u6 z" H. Z
  87.     if(strlen(szFileName)>=1)
    % B7 Q2 R! L4 k
  88.     {  A/ j; R5 S  P# B) W2 m% y
  89.       szFileName[strlen(szFileName)-1]=0;5 j  G' p) {$ N
  90.     }
    9 P2 D/ \) A; C& I
  91.   }3 ]1 L/ N; C' t' v
  92.   return szFileName;7 N, b0 G  d! c0 z6 B
  93. }# f& F, S* ^1 p! n' _! ~# r: j

  94. 3 B0 S- Z) R) h. e; V2 C# d: X# g
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)% g& f# y# b: [+ Y2 X# `
  96. {' q+ h' J8 K6 m& g! Y1 k" z1 F2 q
  97.   FILE *fp;
    : @' K- q3 R1 T0 {  Y# R
  98.   char *key=NULL;
      p* d7 i( m' E4 K" d3 Z/ |
  99.   char version[MAX_PATH];
    ! H3 H7 z: S$ @
  100.   LPUPDATEFILE file,olds;8 s4 R  b9 S$ }0 h* I
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
      t) g& a% y7 ?) V( r% f

  102. ! ]1 m+ N1 u2 D# H6 `( A+ t
  103.   UpdateList.clear();
    ' Y1 q/ ~# `/ M/ u' t, [3 g
  104.   UpdateFile.clear();
    # D0 {+ O- ?7 f( H$ p- Z+ G9 l+ x. w
  105.   if(GetFileAttributes(filename)==-1) return false;
    3 u, Z7 f9 t+ t/ @, d1 P
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ) q- r$ z7 D; Y' p
  107.   fscanf(fp,"%s",version);
    5 S  }; \. Y+ f7 F7 E6 e: v/ m$ [- M
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    - s  m/ x; M' C8 G/ s
  109.   while(fscanf(fp,"%s",version)!=EOF). {! a* W. T, Y' l2 M
  110.   {4 H/ e! b% `  Q) V6 V
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 b" Y7 Q* Q: ~) I
  112.     fscanf(fp,"%s",file->path);) @6 U0 x4 r5 I8 e/ h  M! r
  113.     ReadFileNames(fp,file->file);- {3 m# v3 W8 F+ [2 W* e0 E
  114.     strcpy(file->full,".");
    9 s. ?1 c' e' G5 ~$ a% u
  115.     strcat(file->full,file->path);% F' O# c+ u* t& c7 |/ p5 x
  116.     strcat(file->full,file->file);/ i5 L7 I- y' q
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())/ b, P8 s6 P  u& I, J1 [
  118.     {" J1 \: I8 w) _
  119.       file->vers=(float)atof(version);2 X2 r* N* a; y  c
  120.       UpdateList.push_back(file->full);6 S3 j6 h% B4 G8 T! M% M
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    7 k1 i+ P* \: P5 W' W+ }0 d% J8 b9 P* w
  122.     }
    5 X9 E0 h" w6 s! X( b6 n! e
  123.     else
    5 q  n& u( x6 a/ k* i
  124.     {
    % V% J( u4 v- Z1 @5 v& J
  125.       olds=(*p).second;/ q! z5 [% b9 D  {) f0 @0 F
  126.       if(olds->vers<(float)atof(version))5 D7 l9 z7 O+ J) a( b; A
  127.       {
    , R5 M) X: y& U' L" z
  128.         olds->vers=(float)atof(version);
    % k% c  H' {& B
  129.       }! [- P. Z, M5 K. C$ E1 Z' q, g
  130.       free(file);
    * Y$ U6 m4 x4 [7 j% c; }
  131.     }
    # c, |* ?% g9 J7 @6 T5 }) I# n
  132.   }8 L0 G9 N0 T, c0 ]8 ?
  133.   fclose(fp);
    , {4 `& p' b; j& I; `
  134.   return true;
    * ~! ~% s: `/ Q* [1 O# m
  135. }
    2 }+ C3 F9 {4 Y0 q0 k8 y8 F% m
  136. & v2 ]  z/ u( |0 s$ {$ x/ W
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    7 I$ E/ z# i4 U3 S- c% L& C
  138. {' D9 L) H# `5 U. Y$ |/ j
  139.   TCHAR  szFull[MAX_PATH];/ z! v( A* U) N! I
  140.   TCHAR *token,*inter;
    6 K. \' C5 F3 c
  141.   *szPath=0;; Z$ y6 z: f4 K$ ?! X. g/ {
  142.   strcpy(szFull,szFullPath);2 ]8 u8 X# g! m) O; H8 m
  143.   token=strtok(szFull,"\\/");
    ) c. S( j0 C2 m: k* ~  i( R
  144.   inter=token;7 {% k; F# D2 a# o
  145.   while(token=strtok(NULL,"\\/"))
    , S" c) p( N3 R+ \- h5 W
  146.   {
      i6 \' e/ o& ^2 c$ M
  147.     strcat(szPath,inter);8 N# `2 w4 |3 o0 m
  148.     strcat(szPath,"\");
    $ w* }- N. G  p0 ?& c6 R" w5 y
  149.     inter=token;
    , y; s2 z5 i& A9 Z' ]- T* X$ o# U
  150.   }
    6 v/ W4 R$ a1 e7 ?  i  |$ V: P
  151.   return strlen(szPath);( g' K6 q2 P+ V4 F& g" T
  152. }
    * J4 D7 r* i3 g; A/ g2 p
  153. 1 B3 P$ W( w& |( h. M
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    % w0 D# A3 c' i, T4 R/ |
  155. {
    1 I* Z8 r+ f  q
  156.   DWORD attrib=GetFileAttributes(Target);
    $ J* o  }+ J4 Q& R7 ~+ Z
  157.   if(attrib!=-1); e- b  h9 k( o% u
  158.   {; u' `/ O/ X& u
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)), P+ h. E( F, D+ j( |* T- L% v
  160.     {
    ! e2 _# p# t9 |4 ?; ~
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);: t; ~7 z! y) I" F5 c: ?+ ?
  162.       SetFileAttributes(Target,attrib);
    ! I' I5 g4 J* V9 z
  163.     }
    , R7 c# h4 C( X% m3 F# j7 D
  164.   }; K6 g. o5 W& I+ X' }/ ?
  165.   CopyFile(Source,Target,Erase);
    % J1 Y. D1 L) S4 ?6 F
  166. }0 u2 a9 N  B  T; ?% {& u% o
  167. 7 ]+ ^: N7 q/ h$ F" s$ L0 T. x
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...). |4 M: K9 w3 _" r% v6 Z- j
  169. {
    4 T7 r# s6 V- k9 P; y3 L/ O) E
  170.      FILE *fp;' w7 B$ i' R" J7 X. V2 w/ K2 o$ e
  171.      char  szBuffer[8192];) M  x8 q7 X. K/ j* \
  172.   va_list  argptr;% a8 R3 B* i+ T; O

  173. , R3 A% o* R8 R& C5 m. {
  174.         va_start(argptr,message);
    # l$ b: p. `3 {" V' w' p; g: |
  175.         vsprintf(szBuffer,message,argptr);
    : V9 Y  O0 ~: F& |
  176.         va_end(argptr);
    $ l. y8 @' {" Y, G8 [
  177.   fp=fopen(FileName,"a");
    ; \( m5 I6 I/ l7 Z2 Z7 q! Y/ L
  178.   if(fp); f. n- X2 L: e! A4 {) E# D& G
  179.   {( Y, p! K9 s# v% @
  180.     fprintf(fp,szBuffer);
    / U; Q6 W7 v! j8 i
  181.     fclose(fp);
    ; y" @% W6 k2 T+ d5 ~
  182.           _flushall();# g3 M/ K6 r  r4 m; X7 a( K
  183.   }7 t' w9 E: y; o; Z
  184. }
    : K# u7 ?7 w" D4 g

  185. ) y1 c: o; z3 y. j6 q' G
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ) \, b2 n: P& ^2 g' q6 X) v
  187. {
    9 B- D% M  t; m
  188.      FILE *fp;' g& A5 {; c9 P. [2 e3 R* T
  189.     DWORD  attrib;
    ( X! q8 x" b/ }2 ~$ ?
  190.   attrib=GetFileAttributes(FileName);) T7 J& j/ H8 X- D2 q9 Y% K- |
  191.   if(attrib!=-1)
    5 p% O& c2 b  X4 q
  192.   {
    # C" Q0 H$ d0 b& i: J, D. d
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 R7 Y; ^4 c- a) t+ W
  194.     if(!SetFileAttributes(FileName,attrib))# c/ f7 X1 k# \- ]
  195.     {# u% k6 `. W2 h; K; Z
  196.       return FALSE;
    * H& n. r6 O1 W+ T4 m+ _2 x8 U/ ~
  197.     }
    & g/ l; G9 J( }, M' w8 K& _
  198.   }* Y. f' ~/ R. _" H" q. w& ^" F! O, a8 t
  199.   fp=fopen(FileName,"wb");) L+ x; ^: c, D; z  O) @: j) ]
  200.   if(fp)
    1 Y+ S; O" p$ ?  Y4 N# p9 `
  201.   {& ~1 [% k1 s8 G) U& N
  202.     fclose(fp);
    4 |; R7 r3 I  c( F5 i/ c) `" C4 g! H
  203.   }
    : F1 W9 ]$ H' |, A- Q( `" r; O4 A
  204.   return TRUE;
    7 X( g$ Z4 a6 r% O
  205. }" g8 r& d' s6 b) a) C# l

  206. % F- ~; ]8 ]: _2 j# G) r7 S4 p+ z7 C
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ! K( h1 d  _$ D" w- Y" A
  208. {
    9 ]" w4 M# [) L! s
  209.   char filename[MAX_PATH];
    * F# y. m+ R/ I
  210.   LPUPDATEFILE file,olds;* }( g- s+ w0 \# g2 A0 i1 w8 O
  211.   std::map<int,CString>::iterator i;
    & n: b# g1 @- ?( O- I' P4 X# {
  212.   std::map<CString,LPUPDATEFILE>::iterator p;0 E8 x9 W$ b' c1 H4 J
  213.   std::list<CString>::iterator l;
    0 `9 h( \1 N  A; p; T+ o
  214. 7 d) o- f, u& _  F1 `6 d. Z1 `
  215.   if(bFirstUpdate)+ Z+ w5 H5 [8 X% i7 N1 n" {
  216.   {; {$ \2 Z* ^4 D5 z* g
  217.     dwCurrFile=0;. [, v. y0 U- _# N' I
  218.     bFirstUpdate=FALSE;
    : y$ R  S; J. L$ D+ m! h
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 ^, X, {0 ?, A% O
  220.     {
    ; g: a' Q$ X5 c4 l( j
  221.       dwTotalFiles=UpdateLocal.size();# |* N$ M; j( Y9 ]( f. @8 h
  222.       dwDownLoaded=0;
    ) K  v) ~1 F9 R5 `/ H1 v# q
  223.       bSilentStep=FALSE;
    1 d* P0 l0 y6 [  I5 U6 H0 P% M: |5 d
  224.       bCompressed=TRUE;
    9 `; V  y0 \& ]$ z1 m# u0 e
  225.       strExtLocal.Empty();; R2 C& f4 T4 I5 G
  226.       strFullName=(*i).second;
    1 R. o+ D0 a& Y
  227.       dwProgramState=AP_CONNECT;
    ; h; ]9 U$ v3 z: d' q; k
  228.       return TRUE;
    ( V( T. x, H" C4 E" E8 R
  229.     }) {% r* O; t( ]
  230.   }* I" \% I" e+ `# G: m# S3 I
  231.   else if(bRestartUpdater==FALSE)$ P& ?3 }) |8 ^5 \0 a
  232.   {
    9 k, p% V1 i8 ~5 J+ s0 N
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    5 Y2 P- _. n9 I' e/ A- k" S
  234.     {/ F% m2 G9 i. ?
  235.       file=(*p).second;
    7 }! K4 Y4 z% f8 R3 A: R
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ! E* _( }$ A8 N. B( ]  D( t
  237.       {
    9 L/ q" a6 @6 o5 f0 O
  238.         olds=(*p).second;9 ]7 E6 R8 T/ k
  239.         olds->vers=file->vers;
    ! S+ e  U5 l# r6 \+ d! w
  240.       }
    6 M7 [, r+ L& {
  241.       else
    / X0 z7 M0 L  l+ ~
  242.       {, O3 X/ f( J5 R8 @# P& W
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 D4 G$ x. Z& t, c
  244.         memcpy(olds,file,sizeof(UPDATEFILE));( Y! l4 @! H! L( k2 O& R0 E3 G
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));! f0 W  W+ r3 T/ o8 `. n
  246.       }$ Q7 R4 S0 Z5 |" O
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ' F* r4 X( d$ p
  248.       sprintf(filename,"(%s)",file->file);3 _5 C. y! A4 q9 k0 Z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + l7 w0 R8 D& `% a1 p( e$ m( y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }4 {. F" e' K: b* ]7 n! A. k2 f
  251.     }8 C3 m" n/ e' x6 R. h2 U9 _
  252.     dwCurrFile++;
    0 o8 {$ ]1 V  j
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). w; c4 l/ K$ @  M$ G
  254.     {) ?' k4 i, E' U! N
  255.       bSilentStep=FALSE;
    " {- f8 K) j" R
  256.       bCompressed=TRUE;, \" K$ @% c8 o/ Z9 w5 I' _! D
  257.       strExtLocal.Empty();: U& m& H! ~4 [1 N6 N+ f  u9 `
  258.       strFullName=(*i).second;
    / x' P+ A. j7 ?* }
  259.       dwProgramState=AP_CONNECT;7 [9 r; E& K" s8 O8 I7 U8 z1 }
  260.       return TRUE;
    1 r# }0 x  o, u; M
  261.     }
    3 K+ S8 T0 i( Q) u
  262.     if(!bRestartUpdater)4 M$ g: e' |9 E, N/ ~. N6 I& a
  263.     {
    & {1 V# w/ G0 b4 c( h7 R; u9 t
  264.       int iCurrSize,iFileSize;
    2 k; b, A0 b1 K6 o
  265.       iCurrSize=0;5 o$ e5 M: s. P6 w/ C+ Q4 m
  266.       iFileSize=UpdateList2.size();, @( R! a) P9 Y0 q9 ?( j' z. q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . f$ D3 ]5 ^9 B) q0 j3 {
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");( m9 v/ k) ~2 g: m! C
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    * |2 _5 M$ E& H: l! v+ Y, u5 ~# |
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, s: |) ?% U7 y, l, X
  271.       Fclearf(".\\update.dat");
    : y# s" U% |0 j6 P
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    8 k% g4 g6 g6 J/ t/ R% L( g
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)  K+ @$ I6 U3 Y$ E0 j& _+ J  V0 j3 e
  274.       {
    , U, V* Z4 `: G* s
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    , u" ~5 {" v: B# Z# I; ^$ r
  276.         {5 q$ R) M# R+ x" z- j+ r
  277.           file=(*p).second;
    1 W% C; a! O3 ~# T; u: x
  278.           sprintf(filename,"(%s)",file->file);
    " y2 D5 j7 _; ]& D3 ~; L
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* [8 o5 S; Q7 O/ i1 T
  280.           iCurrSize++;9 H( [) g; o1 _3 ]6 s5 D- S
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    + G2 L7 X! X6 w) ]4 i6 k
  282.         }
    . A% o) {2 i1 W" ?
  283.       }
    1 K4 @3 \9 ^  C7 d
  284.       unlink(".\\update.txt");
    1 u% h- _/ T% N6 V; k
  285.       unlink(".\\update.tmp");4 ~0 g  t# j) p  m# [
  286.       Fclearf(".\\checkversion.dat");# v$ |4 f0 t4 u" k$ L4 _1 ]
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);4 a% n/ v: `# h3 F! x' I5 ]
  288.       if(UpdateLocal.size()). h, M! Q! w* s5 x$ K2 _1 K
  289.       {
    0 c5 I$ y/ J! a
  290.         UpdateLocal.clear();7 I) d# G1 b7 m9 |4 [
  291.       }
    3 F, F" ^0 b! u
  292.       if(UpdateFile3.size())! Q6 Y! g& ]/ j  c  A
  293.       {
    # t; k% k9 @" i; S) q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 K) U6 K, n( `: x  @5 ^, I# j
  295.         {& n. u% H' P4 J' D' ~/ t8 N
  296.           file=(*p).second;& o2 R, Z3 e" ?8 ~- Z; D
  297.           free(file);
    3 _! B1 @6 j/ g% G
  298.         }
    . \' Y$ {2 Q* L+ j4 c( k# x* B) X' _
  299.         UpdateFile3.clear();
    % Z5 `2 g: \, e4 |0 _
  300.         UpdateList3.clear();
    ( U! L8 @0 X# a' S5 v% K1 E: z4 Q
  301.       }
    ) _* j: t! E0 H# [( j8 U& f3 r: A# z
  302.       if(UpdateFile2.size())
    % V$ J& n8 x) i0 A. w
  303.       {  m  ], x. n+ w9 Z) P* F  z7 g
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 ~% V5 u2 y7 s" @# K; K4 T) Y* Q: b
  305.         {, G7 i: J& S4 m5 k* A! v
  306.           file=(*p).second;
    . ?) I6 O. H# r: n
  307.           free(file);
    ( l) Y- z( A; Z1 g5 n, K
  308.         }
    * N( O, x' ]- @
  309.         UpdateFile2.clear();
    7 d! l6 m/ r, u1 V
  310.         UpdateList2.clear();
    ; I' y8 u; Y. k( B$ E
  311.       }
    " E, s* N& F  B6 ^# N4 k
  312.       if(UpdateFile1.size())
    ! }! B" \9 |- S1 C: y
  313.       {7 ~$ q% ]/ n9 {, d% @
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 @* w) |2 M2 I4 O
  315.         {+ c; s$ Z: M( X' R7 m* r
  316.           file=(*p).second;7 ^* V' M8 ^, T2 P
  317.           free(file);
    7 B+ M! b3 ^) e4 G; u& Q" p) B
  318.         }" l1 E) U( I; X( `
  319.         UpdateFile1.clear();) p2 l3 o- O5 `1 g9 i7 S
  320.         UpdateList1.clear();& ^! k; i' e! m- b  W) s" l: K  E
  321.       }
    / B) {% V& d7 j. q" k! g
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    + @+ |/ A# {/ j
  323.     }
    - p# O- D' W9 m; Q6 k1 ?
  324.   }
    5 Y/ |9 [6 Z; Q9 M: g
  325.   return FALSE;) ~6 i- l# a9 n' n: b# g
  326. }
    / E& X/ J$ r* g  _2 ?! ]
  327. 0 y9 Q8 I! w( l* f( o" ?
  328. void CRevAppApp::ClearAll(void)0 m5 V1 ?8 e8 t% |- E- Q7 X$ |
  329. {
    6 e' n) O2 w6 z
  330.   LPUPDATEFILE file;
    8 d& I% q, }# a+ @; N1 m% S
  331.   std::map<CString,LPUPDATEFILE>::iterator p;9 S2 Q; p+ V& b
  332. $ F3 o1 i" p1 ~' e+ W# v5 s
  333.   if(UpdateLocal.size())$ |  w. Z1 P: I0 x- Z
  334.   {6 f9 u9 F' [$ a
  335.     UpdateLocal.clear();7 }) A& Z5 [2 Z( N
  336.   }
    4 Q# T3 w4 a2 P  M- g$ v
  337.   if(UpdateFile3.size())
    2 r. ~3 ^$ U  Q7 u, |% w9 K. Q% z
  338.   {
    , e$ a7 b; m% h1 N. r7 v2 s
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 c4 w" e  u$ X# b$ `3 N
  340.     {0 Y0 L. J9 r: h
  341.       file=(*p).second;- ^5 m$ [2 d' j8 U$ ?1 C" N
  342.       free(file);
    % e  P0 b. s, t2 H  |* c7 Q9 X
  343.     }
      G* }  V, {' ?' x
  344.     UpdateFile3.clear();
    ; G5 I7 ?- s7 }; P
  345.     UpdateList3.clear();, m  W3 n  E+ J. v0 q. _3 G
  346.   }
    : X( D9 [( M( {( A8 {
  347.   if(UpdateFile2.size())
    9 L& G! Y  @2 M8 m% L
  348.   {. P/ K5 O* @) C: v4 R; _5 {
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 G6 W. t4 c, m) \1 }
  350.     {
    . L: l$ W- t9 L  O- f) `8 W
  351.       file=(*p).second;" f0 B' q' E! f2 f' e
  352.       free(file);
    + {0 p" `6 J* _2 g' j9 C! Y
  353.     }. q! A% e4 z; v% A3 f4 k# q# }; y
  354.     UpdateFile2.clear();& _: V5 f6 U- ~2 W
  355.     UpdateList2.clear();& z+ n6 d  L# @+ X) r9 D
  356.   }' Q, H+ E3 a8 }- q! R7 T' F5 L
  357.   if(UpdateFile1.size()): X7 o' r( v8 t/ J0 A
  358.   {- e" Z8 s* F" a$ }! T" p
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( W1 K8 M# L& |2 n
  360.     {
    : y0 O: X" ^( X9 z
  361.       file=(*p).second;
    ! v' K- R& G2 A" ^$ {4 y
  362.       free(file);. R2 n4 q' I3 Y: s/ ]
  363.     }
    " U. i9 i+ Q, s: B. T
  364.     UpdateFile1.clear();* B! B# K" b3 B; S  n- P8 M0 t
  365.     UpdateList1.clear();2 S5 n$ r* U! @, H9 d. V
  366.   }
    9 Q' i/ U; d2 k( R
  367. }  
    ( m7 B7 w. h' s8 a. N
  368.   
    ! T7 Z: u1 _$ A2 e) k$ m' J2 c/ q1 Q
  369. BOOL CRevAppApp::CheckLocalVersion(void)* G0 t: b4 @8 h; J) r
  370. {
    ( p4 M& ?0 r8 q) F
  371.   int c;& y2 d$ r* x7 O& [3 ~; I
  372.   LPUPDATEFILE file1,file2;
    7 _6 I: o2 Y' a) W% W$ I
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;) ~; k6 J3 N2 [; x7 s. }
  374.   std::list<CString>::iterator l;
    $ V/ U/ `) U3 n( v; i
  375. / ]" M) `8 M% [3 h
  376.   UpdateLocal.clear();- t4 D6 ]4 w& T
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);$ m; e( e5 B  t- q. k% u
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);! j1 k. f' |% R8 A4 W$ d6 Q3 L
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);- e0 T. E, e/ I& H5 q' ?
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);2 G% y( H* @9 U. O4 V
  381.   if(UpdateFile3.size())
    2 K- O+ d' T; t2 ~2 B* M
  382.   {4 N4 A) e+ m- X/ P
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)- n* X: _6 w' O* p0 D0 A: [
  384.     {) J. Q) t5 g- T
  385.       file2=(LPUPDATEFILE)(*i).second;7 R! I. Y4 X4 r/ N5 d# v
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())- F2 I* ?' D. p
  387.       {; `2 d0 H  ~+ o/ W
  388.         file1=(LPUPDATEFILE)(*p).second;
    8 D, Y0 q3 I$ e+ W. x0 M
  389.         file1->vers=file2->vers;, N) X: P: Z; i) g
  390.       }; C" I7 X3 P/ Y1 \6 Z& ?( m
  391.       else
    4 Y: B& e# S6 a) T( V
  392.       {# S0 l0 O* {- }- ?- f* O8 W
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) [+ u( n9 w9 W3 t/ Q# y/ @
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    6 }% q9 |7 k( o! [, K' a
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));, P! B% X" `2 H% A" f
  396.       }
    . \8 Q. t9 s0 Q8 C2 b% m3 d
  397.     }
    2 C/ O% o* x: [  [/ Z# o
  398.   }! ^1 g* C0 Y2 T
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 L3 l6 o; s  ^$ t5 W
  400.   {2 f3 n$ W% n+ W: x
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    " v. E. d/ G6 @3 p
  402.     {" e/ Y$ w: v* D  d
  403.       file2=(LPUPDATEFILE)(*i).second;
    * g. u& y% ?7 y* }9 f
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). E& h; N' \# ]) ]* y+ r
  405.       {' M- z% ?. R. D2 H' ]: C# `5 a3 d
  406.         file1=(LPUPDATEFILE)(*p).second;
    ; @# o. z) t7 Q6 ]8 T3 W
  407.         if(file1->vers!=file2->vers)
      L- u4 P* T* `
  408.         {" q  M1 q" Q" e; J
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 z6 S$ ?5 u1 ~! ~% C; W
  410.           c++;
    8 C  E% s$ p$ T/ Z( W$ j3 g9 c  {
  411.         }1 C- j1 [3 t- P! a: W( J
  412.       }
    " b* J; ~; b8 Z+ A
  413.       else
    7 N, C8 [0 _$ P% B8 s6 u) ~# q
  414.       {
    $ O: `, G# \1 ~2 Q; `& [7 f' V: q
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / @% @9 m: h- _+ L# k
  416.         c++;0 H# X( b1 ]; I' u6 z1 v0 G! L
  417.       }
    : c6 I( Y% V" L! V% L' H
  418.     }
    4 p. z! q; c( r7 p5 _2 v
  419.   }
    / J7 i& L9 V. P/ s, L- A! T
  420.   unlink(".\\DownLoad\\update.txt");3 D+ h( C9 Z% P9 t$ H
  421.   if(UpdateLocal.size()) return TRUE;1 ~- A  C' g% E5 a0 u& M
  422.   else                   return FALSE;
    8 w5 B. S" R3 O$ S. {# C4 w
  423. }
    1 q* C) n. j) N' E3 u

  424. ' _0 A3 c" n% L2 M  G  ~/ _
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"! g% p8 B0 I2 \6 y; Y" t
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    3 o4 c. o% a" ?1 @
  427. 6 ]# Y* ~* k( p: {. H, @
  428. ! h1 f4 j& y) F4 l9 |6 R) b

  429. 1 o8 t4 e2 T7 Q# e& a/ |8 n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    9 u, E& \2 ^3 k9 z4 C$ R
  431. {5 u. F7 r. P& U$ p& ]9 w8 f
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    , h1 j  Z; U& _; S1 v
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  h0 [7 D! _# g' K1 [" r; a8 X! Z$ M
  434.   {
    - l6 I5 ?0 C' W% }
  435.     char szLanguage[50];6 ]  M. m/ r/ P3 d4 L5 P! z: ^
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 p+ M) L) A% t% @7 Q4 J2 `5 d
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" t! [: ~1 a) U7 `
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' ^1 U1 S# {3 z2 y; _
  439.     else                                   m_iLanguage=ENGLISH;
    3 |: x# U8 W0 s9 Q5 D9 B: x* r- B
  440.     char szRegister[100];
    4 n! w1 W0 b- d
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 E: a0 p, T) l7 ^7 G
  442.     strRegsName=szRegister;
    5 q* Z0 L* J% d
  443.     char szPatchURL[100];) H4 O# r& ?* V4 i2 c
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 u. y" x. W0 e/ V7 ]
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 k  s; I& M0 ]# o
  446.   }
    8 x$ a$ f# E* L7 }( @7 C9 V
  447.   else
    ; W& T% W0 M9 H$ u7 u1 x
  448.   {
    5 W3 Z4 \* f& }" Z6 @; B
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( ~( ^5 V2 N  y% t3 U
  450.     strRegsName=DEFAULT_REG_URL;, t8 G3 }6 b  ]% \1 d
  451.   }5 f9 Z: a1 m! A0 ]1 h0 H' ]% Y( i
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ) n) ]* C6 l' f4 }; x1 y3 S! r
  453.   {
      t6 j# @/ w+ C9 O# d
  454.     char szIP[50];
    0 M. O" \' g# @) |1 q
  455.     char szDIR[300];0 P( C) _/ l! G: {- w! H* F
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))8 N- Z7 g4 E6 P" J
  457.     {
    6 T5 N% o, i7 D& t
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ( T$ }3 ?" a3 K* u; x
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");" f' K% F' D0 T7 M% w
  460.       strHostName=szIP;' ?( g- l8 i& ?& ]
  461.       strHostPath.Format("/%s",szDIR);: J$ F) \! o) o1 U; _
  462.     }# u8 p, N  Z* A& c
  463.     else
    3 B& i8 J2 j! L+ E( e  l3 |$ S) e
  464.     {
    - D6 B" L; k; y* a$ o- |, r: t
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / k- B" b5 p7 i3 ^, n) F; o8 C
  466.       {: W9 U, C& V% a$ S8 q
  467.         char szLanguage[50];
    4 ]; d* z. ]' H+ N
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( m& O% V# S/ S# Q  \4 M; [5 H" ^
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 r' S: x5 H  \5 _1 t9 i( O
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " f- s( x# {% c
  471.         else                                   m_iLanguage=ENGLISH;3 M6 \, q( ?% K1 f: ^
  472.         char szRegister[100];& `; B  O) b6 C& W
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" b- V2 q# s. I% l
  474.         strRegsName=szRegister;
    + O9 F) t/ T0 B0 [2 Y
  475.         char szPatchURL[100];) w! N( G# N# g* B; e$ B
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* w- w. u7 I& ]6 g/ {
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) O1 K, g0 L: A8 r/ _
  478.       }+ C! w" p: S& X# N2 t1 I
  479.       else
    / [2 b- e( o  S, V
  480.       {! S  W. n7 p( q1 w( v# Q* I0 r
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    3 C+ j4 R0 s8 V% q4 a4 N
  482.         strRegsName=DEFAULT_REG_URL;
    & R+ b  I- t* L
  483.       }1 ^! J) X& `. T
  484.     }7 J: T# C. y& ~0 B6 e
  485.   }
    ( Y9 X" Y! c4 y
  486.   return true;$ L! U3 U5 G7 q
  487. }
    / N. h6 U/ N9 A6 Z1 \; n

  488. 4 a, r3 D% a% b& V0 q- K* H
  489. #include ".\ZLib\unzip.h"
    * J# [* y7 F6 _& \* W
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    & F7 P3 G" e9 W
  491. /////////////////////////////////////////////////////////////////////////////5 S0 \% Z6 N* s& Z
  492. // CRevAppApp initialization: B$ k  s/ z6 K& r

  493. 0 F  w* P# g7 i, B( N/ A. F9 G
  494. BOOL CRevAppApp::InitInstance()
    . m. R5 F0 G  [' i1 {. Q
  495. {- _! V/ H. V/ T* f: s2 Z  s; n$ k
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];' l1 L  o5 F% \; t& f3 }( u! r! L

  497. & [; {; U. K  e$ G) ]
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);. Z6 Y& x% s2 Y- d
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)). F0 b, f# i6 C" U
  500.   {
    ( I, ^* x+ a: Y7 o9 P0 }: }/ i' @4 J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    " t9 X8 u. c+ o$ R/ \: h8 ]( u
  502.     GetPathFromFullPath(szPathTarget,szPathSource);9 f$ s1 S  E$ p2 h  m' W) A, D
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))2 S& a7 [6 A7 j
  504.     {7 _! A! L; ]3 f" z2 Y: ]
  505.       strcpy(szPath,szPathTarget);
    5 ?& F8 p- z  C) ~) i
  506.       SetCurrentDirectory(szPath);/ M2 B+ T0 j3 ~- t: o
  507.     }! K" b+ _) a0 @) u
  508.   }
    9 Y, C4 E6 W$ f0 V0 o* [0 k
  509. #ifdef _DEBUG/ t8 C6 N5 i4 k& f- m7 B, `6 O0 o- k
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( h/ F( \( P6 v  V: o
  511. #else
    ) ?8 o* Q- ?0 }& r& L
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 @- N/ G& s2 y* \, D2 \# t
  513. #endif3 m' `% ]7 i- U4 H3 V
  514.   {2 U4 w: @6 f5 F7 I0 K2 g5 V$ h/ F
  515.     char tempFileName[MAX_PATH];
    ' }! [: E/ x1 ~8 A
  516.     strcpy(tempFileName,szPathSource);
    ! _7 I" f8 [) c
  517.     tempFileName[strlen(szPathSource)-12]=0;
    8 ?6 l6 Q/ @# G- N- K+ N  ~& ?
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
      M! W; g4 q0 M1 X/ F! k! S
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    1 Y3 E% B) W1 g, {# @: X& ?, s
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);' j4 ?( J5 Q" [! s/ X% S
  521.     return TRUE;
    ) Q+ N# N, u7 u6 Y$ S8 B" V" D
  522.   }: G! j; I/ y2 m3 h# U" ?6 u" d
  523.   // Nuke 0118: Delete run.exe
    * H& I' G- l. h3 I7 e5 z0 E
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );# t& t( B# k4 [% @) A; R3 \4 V
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ; L& W0 ^1 |4 ^4 E9 J
  526.   if(!ReadCfgFile("Config.ini"))
    + Q. `8 `; J, w3 Y6 S4 U: O
  527.   {
    " Y! I) `, Y6 {
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);' O2 Z" F0 H% Z" J% q1 w
  529.     return TRUE;1 \( x3 e( M' T; E& Y! Q- l
  530.   }% b: Q9 i% x5 ]' H  P$ @
  531.   HANDLE mutex;
    + Q! l: D; I; o/ f
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 }* r5 H; s% Q7 z8 Y
  533.   {
    , k& S2 m( P! O. E: E
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)/ H" P) @# Z7 I4 g3 w
  535.     {( ^( J8 @; c' N6 x
  536.       CloseHandle(mutex);. f; p# B: \0 t
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);5 U2 u3 p1 M; h, s
  538.       return TRUE;5 Z- e7 u, q  W6 G- K
  539.     }
    8 S, k5 W  [* u
  540.   }  
    0 h' |6 x# V& Q
  541.   CloseHandle(mutex);% P2 D( N; M) K0 }) H; E2 b; ]" R: S7 Z5 E
  542. + ^* n( P% F5 x2 a& y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; n  ?' g: s6 N! a. m

  544. ! s. D3 j8 s* Q% u0 I  f
  545.         AfxEnableControlContainer();
    ( L( R1 C$ G" y$ a4 ]% P
  546. * t0 e6 _2 w. \' ?$ Y) Z8 e0 ^
  547.   bCanUpdate=FALSE;, P& Q9 f( M5 e3 _+ F
  548.   dwStartUpSteps=1;/ \1 Y( a/ n; ?! N
  549.   dwProgramState=AP_NOTHING;
    / X- ?' e- D2 s$ C$ m
  550. 5 B, p/ E. {6 @
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    : ]% F2 t" C, [- v0 P

  552. % K- `6 }9 I3 P# J5 U% j
  553.         // Standard initialization
    # ?+ W% N' G& S' U* l; w* c
  554.         // If you are not using these features and wish to reduce the size
    2 w6 C4 X0 t+ }) ~/ e$ Z
  555.         //  of your final executable, you should remove from the following  X$ q$ y$ t# c, R+ _
  556.         //  the specific initialization routines you do not need.3 I& @( q) o6 T/ G

  557. - V+ L6 G% d. h0 v, b* u# @: S
  558. #ifdef _AFXDLL, o' |/ _' r; H/ ]
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL! k4 S  q' [0 g' U$ k9 J
  560. #else+ m* O' j3 O& M6 F, j; r4 ~, e
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ |0 p: n% d. [; q) H# E
  562. #endif) @: S; j1 C: A: @' r- z3 A" ?

  563. - R' ?  j9 Q" n2 B, w
  564.   dlg=new CRevAppDlg;  D% x2 Z2 S. q* P
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    3 @9 U% w3 _+ U, H8 D$ J  l3 _' \
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    $ l! U3 C/ T# g; f/ [/ h1 |
  567.   m_pMainWnd=dlg;
    7 {8 I3 Q) W6 K- y$ K
  568. , R* g1 V$ z% G$ u" U
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);9 {# o- u+ [) c& \
  570. : {3 j* P, {0 b6 h( F  W2 X* Y
  571. //  GdiplusStartupInput gdiplusStartupInput;
    + P1 r* H- P/ z) M
  572. //  ULONG_PTR gdiplusToken;
    , T0 C. @5 _; t# E6 @3 d
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    . W* G. E7 }. n; l( e
  574. % y& a& _8 D( Q
  575. //        CRevAppDlg dlg;- A$ ]1 e$ e. Q: A( V6 a
  576. //        int nResponse = dlg.DoModal();
    " i& O! o2 J* L, T8 q$ w
  577. //        if (nResponse == IDOK)
    % _  W* k9 _1 k1 y) g0 e. C$ a
  578. //        {
    ; j1 q/ F+ X4 S3 p$ `
  579. //                // TODO: Place code here to handle when the dialog is
    & a. B& n; Y4 u
  580. //                //  dismissed with OK  o# ~0 f- A% _( N9 G0 T1 H
  581. //        }0 l( b: l& R# b; K; V1 u
  582. //        else if (nResponse == IDCANCEL)- Y# e, k( \6 ^! T9 y
  583. //        {3 T( S2 b! b: E; a
  584. //                // TODO: Place code here to handle when the dialog is! m% M% O6 |: z0 m! D# C
  585. //                //  dismissed with Cancel- X" h+ b+ t, N. h  e1 j% v7 K
  586. //        }# i- u- `. U9 n' u: q2 r# L: `

  587. 8 }1 K2 \4 V: L2 x' d* P
  588.         // Since the dialog has been closed, return FALSE so that we exit the+ I* v# f5 N+ b
  589.         //  application, rather than start the application's message pump.
    # u% Z4 G' _5 u6 b/ Q
  590.         return TRUE;
    8 y& `+ V) N* k# w3 D2 T3 K
  591. }
    ! z) l; d9 k& a; i/ s: h

  592. 8 M" i% [+ s9 i+ K# b- ^0 Y$ z
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    3 d" R1 o1 M8 J6 N
  594. {4 `0 s7 }! s1 c, ^9 N) P
  595.   int i;
    % N' T! C" T' P" p' m; S
  596.   char *szRet;. }9 \# R7 b% {: k
  597. ) h, S1 ?9 }3 O% u  I5 z1 g6 \4 c
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    # Q( a2 I6 w/ U, b" z
  599.   if(sztoken)
    8 Q, u1 e1 Z8 k* }9 a
  600.   {# M1 U1 [5 G4 J  ?
  601.     szRet=&sztoken[itoken];& p5 ~, ]% C5 h8 H* W
  602.     while(sztoken[itoken])* j) J* H0 F' z8 c, ^
  603.     {  g& y1 C) g; s, t, a! S- A
  604.       for(i=0;i<(int)strlen(token);i++)5 x: `$ O7 J; P, b1 U
  605.       {
    . X$ A( I! ^! f: U
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
      c0 h* M* k5 ]. F) C" f2 `& K3 ~: H
  607.         {
    : N* ~6 [  D/ J
  608.           sztoken[itoken++]=0;: E! O' l7 e' ~4 K' E
  609.           sztoken[itoken++]=0;% P4 j! N6 B, g  X2 ^" a1 w
  610.           return szRet;7 a+ D. B2 |. k8 T2 l1 e
  611.         }5 [0 Y! X0 i" \
  612.       }4 s' [: f3 P; B5 A
  613.       itoken++;. |( g) K5 Q4 G0 _9 s( Q
  614.     }; f/ g- H' Q: G5 W0 P/ Z
  615.   }% W) k2 W( C3 P( _/ Z% q7 p
  616.   return NULL;% W3 Q: D+ m* r- U# r$ A0 D
  617. }# g5 ~7 c% }1 q
  618. 8 i6 F- c8 v' ]( n
  619. void ProcessProc(long Total,long Current)
    / d; j3 Q! L7 P  i3 I* m
  620. {
    & |' a6 X" _6 M4 Z) c
  621.         MSG msg;
    - Y& k8 _5 ~( O1 i5 Q# o
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ U3 S0 A' m+ O
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    0 ]! e* [9 ~2 i. R# p
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    $ ]6 f' S1 _* e' P- I1 w0 J  k
  625.         {
      M$ x/ }% g3 C( ~
  626.                 if(!GetMessage(&msg,NULL,0,0))+ \3 O& D+ W1 t
  627.                 {
    + `0 y5 p& v2 p
  628.                         return;
    ; T8 q. e) x- K/ s
  629.                 }
      Z4 w0 m& l0 u$ Z+ Y" u
  630.                 TranslateMessage(&msg);7 v3 f0 ~9 }4 X
  631.                 DispatchMessage(&msg);
    # s1 B" y: m* \
  632.         }       
    0 v- P' Z5 Y- r
  633. }' x( b* z: f9 q; L, m* o

  634. , \: M9 s+ r4 |# V3 b2 w
  635. BOOL bFirstChar=TRUE;" ], f, v. W8 H7 i# y
  636. 0 \% v9 u- S) P/ H4 P* g4 K. C- D% E0 P
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    & ]) a2 ^5 t4 t9 E3 `
  638. {
    9 T8 _4 l; U7 B
  639.         // TODO: Add your specialized code here and/or call the base class
    ) C0 B1 d/ ?6 O& U' Z; ^
  640.   switch(dwProgramState)2 |$ [. h! l9 Q& v2 [. O/ l
  641.   {
    ' \& `5 H5 v5 ^
  642.   case AP_NOTHING:0 ^. m8 V" P+ c
  643.     switch(dwStartUpSteps)6 c6 T' [, C; x( G* P' J3 e# ]5 W
  644.     {
    , }. C. Y0 u/ q" ]0 o) D  O6 I6 [$ {
  645.     case 1:
    1 H3 I5 Y% d8 I- x
  646.       {) g) F9 W" G$ G1 c
  647.         int i;7 x, a% l! E( H3 U9 c
  648.         CDC *pCDC=dlg->GetDC();7 @6 x# b, |3 {. r9 m# x6 l1 c8 S7 m& H
  649.         HDC hdcwnd=pCDC->m_hDC;
    0 d: g1 w- A( G% W  `3 z( W
  650. //        Graphics graphics(hdcwnd);
    : o. v7 @( Q  i' D! v6 N+ h- @
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");: [7 R8 i/ ^, X# @1 V( s. h$ k
  652. //        INT iWidth=bitmap.GetWidth();8 M6 B! J; h- [1 m  w& m. ~
  653. //        INT iHeight=bitmap.GetHeight();: `6 Y4 [0 |7 N# R4 c# M
  654. //        Color color,colorTemp;, \& |4 ?* S$ j3 i
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)' M3 a6 V3 z" \
  656. //        {
    7 X5 I9 S4 I1 m, Y% G. B4 p
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)# A% ^1 E3 ~* {2 z
  658. //          {3 F9 x5 `% K; d
  659. //            bitmap.GetPixel(iColumn,iRow,&color);* P' t7 g% x1 m2 e
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 u/ _3 E- _1 Y. }9 ]: M
  661. //              (BYTE)(255*iColumn/iWidth),
    " O% Z; a1 ?( S  |: P8 _5 d
  662. //              color.GetRed(),
    - k; Q4 ^3 R; X2 h% g
  663. //              color.GetGreen(),* x# V; h) |2 k, C, [% m
  664. //              color.GetBlue()));
    3 f2 e& |6 X. C8 C
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) T! t8 T3 `9 R4 }
  666. //          }
    1 |) x# l  [& v+ f' k$ J
  667. //        }
    2 h- Z7 }+ o; e1 `8 I& F) @# f
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);. {: {, P! C1 G$ F1 L0 s
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");! Z( {7 D. R4 _' P' O7 o; Q
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    : G$ b2 n. {" n2 X+ M! x" `( W
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' Y- P+ X4 C: C1 J9 s0 U8 N
  672.         for(i=0;i<240;i+=8); ]( S: l, i0 c- a
  673.         {' G+ T$ V' Y( {  K  p5 Z
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - q! T; m" R% `( L& U& B
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      h0 |/ d/ ?6 S1 j
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 s  q/ z0 ~% O# G. }
  677.           Sleep(33);) P* g: u0 ]5 i- x& n3 a( L
  678.         }# J) W! Z( \4 [2 @
  679.         Sleep(1000);" t6 N; [8 L6 B6 q7 r, w2 s* o
  680.         for(i=240;i>0;i-=8)
    , v; c5 D8 y8 [: {6 {2 C6 l' e2 `) \; o
  681.         {! M, u: b& W# F% O
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 {9 K: U8 n  _& `' f
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# @& v+ Z( g$ J' A9 |( ~* B
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / L1 e% ^4 Q3 i6 V) Q& ^2 f0 p
  685.           Sleep(33);
    0 {% e8 L- T1 h. J1 ^6 K- S
  686.         }
    + J" s7 z) _& Q3 e) [
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);: o! d/ W2 W0 F2 D% k8 X
  688.         dlg->ReleaseDC(pCDC);0 m) C$ ?' ^5 F1 ?( A# ~
  689.         DeleteDC(hdctar);' N$ J! `9 ?6 T( B. \, O1 M$ L) P
  690.         DeleteDC(hdcsrc);
    & ~& R7 q2 n) ^; W
  691.         DeleteDC(hdcorg);% [( R% n5 @" j" C( [, v9 c# b2 V
  692.       }8 |* _: P. g" c# w+ @
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);/ N4 ^! W- w9 H/ o: Y: X
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    . M/ P$ I* V2 |  c6 f; M  o: G
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    1 e% x- F& ?, T9 T. Z, `
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    3 a2 L9 u( R2 p& N, i* z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " e# }3 |# t& ^- t3 J) e0 w
  698.       if(!Dn.Connected())3 I# Q; @' J3 I! j9 x+ D. e
  699.       {7 R. D; n( C* \: @4 W/ {
  700.         dwTotalFiles=1;
    ' V6 B# ?# E% q/ ]' m* R$ {
  701.         dwDownLoaded=0;9 ]1 H9 f8 H2 h9 t5 C$ q
  702.         bSilentStep=TRUE;1 b: Q5 }) F  W7 _6 J$ [! k
  703.         bCompressed=FALSE;/ B% b: n- ]& M* B
  704.         strExtLocal.Empty();
    0 h7 K  g4 D9 W
  705.         strFullName="readme.txt";* ]8 P9 R3 \4 u+ B! I; T
  706.         dwProgramState=AP_CONNECT;( _7 W5 I: f5 |6 C% B
  707.       }
    " T+ Q5 Q% ^: T, d
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    - g" k* R5 s1 i3 R7 i# [" D7 R1 b
  709.       dwStartUpSteps=2;6 A# [. \5 X: w6 v, {
  710.       break;
    5 ~$ d3 r6 X& ]; S
  711.     case 2:
    # X% p$ `+ ]+ v& y- c+ w- B( d
  712.       {
    , r4 N3 T1 H9 X, |# O; E6 j: K
  713.         int iEOF;& Z' q7 E- ]! Y: l- s) D
  714.         FILE *fp;
    1 d4 b0 n$ @0 D" K% r; y& i
  715.         char szString[512];: N2 v5 r4 L. y. r
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    0 G5 ]2 E  u0 z, ]& y: `
  717.         if(fp)5 s5 c5 u% a, }# h3 t3 z
  718.         {
    ' S  ^( y1 y' T$ i# G
  719.           do
    ; J5 o2 F. ^1 k7 C+ f- K' E) @! `
  720.           {+ c8 q8 o" Y; \9 p8 @" t# m
  721.             iEOF=fscanf(fp,"%s",szString);
    / n8 ?* x9 E5 K: g1 k
  722.             if(strlen(szString))% |- d+ t0 o' R7 u) P
  723.             {
    2 U: S' P, O6 n9 d( h* C) Y
  724.               if(bFirstChar)
    ! n& y% v8 M3 v2 r
  725.               {
    $ Q! R$ }$ j3 M$ E* V
  726.                 bFirstChar=FALSE;
    0 c; k$ k( B2 i& K
  727.                 bConnectIsBig5=FALSE;
    6 C+ N# Y: f% B/ u& g: U/ {
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;0 l; Q" Q2 u! r6 o
  729.               }' m1 }8 B, H( G- ?
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));* n2 I+ s/ ~% |+ A( M9 y
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));+ y, B) J8 e- e3 g  d* B( B3 y
  732.               dlg->m_ListText.AddString(szString);5 H) {( M9 J+ C% e6 a+ V$ ^
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 f# b5 M7 S% Y, I' n. v+ G
  734.               *szString=0;2 x; S$ \/ K5 c0 r7 J
  735.             }  w. Q* _  V7 p# i0 L1 I
  736.           } while(iEOF!=EOF);
    ) w' D$ I) r/ b
  737.           fclose(fp);
    9 l  t  d( S: n: [7 A
  738.           unlink(".\\DownLoad\\readme.txt");+ d5 H; z  l5 I  o* Y" s3 r
  739.           dwStartUpSteps=3;
    / U  v' f1 F3 [2 X/ W
  740.         }: [7 T) D$ }7 R6 ^! t3 {6 e
  741.       }8 \' v- Z3 A1 n  P
  742.       break;
    ! m( [3 w2 w8 I2 J
  743.     case 3:
    % O3 M3 b8 b, `& }: ?- A
  744.       if(!Dn.Connected())# Z; Y) _% d0 x% \* G1 j
  745.       {
    ; w; }6 u6 }8 P* t1 w& i2 @  ~
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    # M/ I0 [+ S) o
  747.         dwTotalFiles=1;
    6 J0 S/ ?& q0 T3 I
  748.         dwDownLoaded=0;/ b/ t) ]' N8 `2 [7 ~! |. O
  749.         bSilentStep=TRUE;
    7 g6 n2 Z. W7 N% w+ [$ R& O
  750.         bCompressed=FALSE;
    4 F# H4 I/ C, y' }
  751.         strExtLocal.Empty();+ A! ~, o# }$ R! G, m) S
  752.         strFullName="checkversion.txt";1 u! g( {* Q! f6 _  W
  753.         dwProgramState=AP_CONNECT;
    6 T1 M+ J# p# \/ d) \4 ?9 M/ G5 [
  754.       }
    . O) g1 K2 [: q: N9 a) k% L+ R$ y
  755.       dwStartUpSteps=4;
      `- [# `) s; p8 E' p: K. S
  756.       break;6 X: g5 Q/ o' m0 S; T+ [* O5 B
  757.     case 4:
    - m1 I2 |+ z) u. `) G8 T& t7 l# C
  758.       {5 q) I% Y3 S* O% c
  759.         FILE *fp;
    , P) m; X+ j9 T) X- r" S
  760.         char szString1[128];
    % x; U: W% N6 ]; W( f
  761.         char szString2[128];
    8 E7 d$ W* A2 Z9 J, _! F: h
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");2 y( R# [" W; v) }' F
  763.         if(fp)7 b9 C4 q2 a$ o
  764.         {
    3 T7 C6 e9 @- p- V* }
  765.           fscanf(fp,"%s",szString1);3 k- N8 J* o1 n) F* ]
  766.           fclose(fp);
    ' b, U3 k4 j! D
  767.           fCheckVersion=atof(szString1);. C9 N# [( f& x& ]/ f% h, h
  768.           fp=fopen(".\\checkversion.dat","r");! h5 Q6 R1 z8 I) o8 {
  769.           if(fp)
    ( F: x2 q: x: a  r# \7 l9 C
  770.           {" v7 F- e: h% O9 _) \5 L
  771.             fscanf(fp,"%s",szString2);3 O6 P7 S* D' i& `/ x3 K/ F
  772.             fclose(fp);
    % p2 @" K1 t# ~) t9 A5 {
  773.             if(atof(szString1)!=atof(szString2))
    8 [, e7 s: n4 ?  H% _2 d% a! Q7 ~
  774.             {$ @! h& y- D8 X& j, m8 P
  775.               if(!Dn.Connected())
    # g6 r  W+ a' M7 [) j0 `, C
  776.               {+ W+ h5 {" g% W; B7 {
  777.                 bFirstUpdate=TRUE;
    " L  o; d8 U4 O& p, ?0 x
  778.                 dwTotalFiles=1;" F7 W7 k, x6 |1 s- ?/ n5 ]( @& y
  779.                 dwDownLoaded=0;+ @( ~/ T' o# w: ^8 A. X
  780.                 bSilentStep=FALSE;* U& i% T9 x# E4 e. `2 D
  781.                 bCompressed=TRUE;& g8 i; U" M; [' A
  782.                 strExtLocal=".\\DownLoad\";' ]* ~& E  d- k! v4 Z  ~: i( o: y( Z; U
  783.                 strFullName="update.txt";
    2 P" }. V* A. c+ [$ g9 }% U  P! @+ Y4 }- H
  784.                 dwProgramState=AP_CONNECT;
    7 h4 A; h1 c4 j3 w
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, a9 G  s( ]5 {# k5 L$ ?) u2 I
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 A4 Y$ s0 i, `- i2 S  @; y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : W1 k8 `3 E7 D. `0 p' ~

  788. , v" _* u) x% M5 i7 b
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / l  k0 K8 r. F4 n4 N  r- q
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ! N( c- [8 [/ e1 N
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1). t) N: y' ?+ N: E5 b, O, z& t2 z
  792.                 {
    , `/ @% k2 J$ x# K* b
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");- `) S" W9 l) J) r2 S
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    5 V/ S& u, k/ E' O6 c* c* B. v
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");+ S$ o& Z, j1 ^& j, d+ N; `
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + W9 x# I- P* c8 u# S" c

  797.   ~: h0 Z. |+ A. R: b! z
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 ]3 E6 G" _+ g
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 l, i) p5 I2 ?
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    % [  p) M" k8 w; v  Z" r2 M/ C
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' e4 @- K$ b9 n# S  ~
  802.                 }
    + }/ j# Q! S. V
  803.                 dwStartUpSteps=5;
    ; |0 |+ G9 d" n
  804.               }
    ! e% v& C# ~  p  v
  805.             }
    # ~0 J& s, `2 \( ^2 v
  806.             else6 W/ f# Q5 w4 o9 ^& V
  807.             {; Q# y8 |1 \  x  E
  808.               unlink(".\\DownLoad\\checkversion.txt");7 {* h3 K& ?, y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");7 l: O9 F* a5 @/ a, H* C
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. V: R: f9 S( L7 Y9 a% L
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");( Z1 j+ J; Q7 a

  812. / a9 [6 ~5 f) ~1 I; U: c
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ r/ q, z! C: L: L6 F* c5 {
  814.               dwStartUpSteps=99;+ |% Y2 J3 O; W# T9 z1 _* X
  815.               bFinishUpdated=TRUE;
    8 E; e! ~& m5 s- s  y
  816.               bCanUpdate=TRUE;+ o8 v# @. V- l, P
  817.             }
    ' D  L$ q1 s0 E4 P$ r
  818.           }
    ) x  z9 i8 o# G0 ~* J2 `1 E
  819.           else
    3 B& [- K) Y2 H/ g" v. X
  820.           {
    ( c! T- q; s& s
  821.             if(!Dn.Connected())
    " J4 F" s- n% M, U
  822.             {$ F: j( c$ M  T; X5 h
  823.               bFirstUpdate=TRUE;! s1 x" T/ d8 `( o+ B
  824.               dwTotalFiles=1;* A; Q7 K) p2 f. P! s$ R
  825.               dwDownLoaded=0;: Q3 T5 I9 d, q2 }/ }
  826.               bSilentStep=FALSE;1 I7 V  _3 a, T0 p: ?+ r
  827.               bCompressed=TRUE;
    6 [  a9 m/ i+ z" z4 N; e& z6 v
  828.               strExtLocal=".\\DownLoad\";* ?: _& E; o6 k2 f1 V9 U
  829.               strFullName="update.txt";7 j- W7 {7 j) ?# N- c
  830.               dwProgramState=AP_CONNECT;
    4 [# y& {5 ?1 n. s
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ; t: m1 k( \# J% L$ L
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    # e0 E6 [% u. ]/ j: [  i4 r5 j
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    0 b( ~$ h; X- O! w& E% H% S; C( E
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : a8 G- h$ N6 q5 M# }
  835.               unlink(".\\DownLoad\\checkversion.txt");
    % F+ _( n0 ~8 ^& q+ V, K
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)$ O# J3 F9 _6 N) `$ c2 b8 t
  837.               {6 v1 S, e. w; m1 }4 x; [& |, B( Q( O
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    8 f" E/ c' Q0 ?2 F, U6 U
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");. j* R- }4 u) ?! t0 c2 t
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    7 G8 h1 g1 J  E* I  O- s
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' |% g/ i' ]0 B( J  h
  842.                 0 X1 i: G3 C0 _4 T5 v0 [
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      d, s! ?! W8 K8 g: c- F/ [3 w5 T3 [
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ) b2 P5 I3 m, ^6 O
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");0 _  W& W; d6 A8 T; h
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 t# \& ^& _" j) E& I
  847.               }5 i4 I8 M- X2 k/ d1 ?; G
  848.               dwStartUpSteps=5;
    ( v6 |, F4 R: `7 T- {5 j9 e
  849.             }
    $ T6 @1 w" p' F, b8 i  ~
  850.           }
    ( U$ |9 o& p" ~. j4 v( t3 L5 E, _
  851.         }
    9 H0 P3 p1 K* {. G: \1 e% q  m$ {
  852.         else
    ( {% s+ a" w! H! \: v( r* w, X
  853.         {8 m$ d4 `/ @7 x/ B
  854.           dwStartUpSteps=3;
    3 l+ v; ?" t! d/ }& l; R
  855.         }$ W/ A8 G( W  B' l# U
  856.       }: Z0 D  W$ r3 z' N3 r  I* ^' H/ R
  857.       break;! |; g' ^1 O; U+ J" ?9 y
  858.     case 5:
    6 c" `9 r1 ~7 O1 X) g4 x
  859.       {+ A& t0 `$ j$ s, ]! @/ Q
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)) c+ \& }4 J1 s( l9 O6 X
  861.         {" |3 B; j! M0 [0 }6 F. Z
  862.           int opt_overwrite=1;
    9 A/ |, c* f" I' @( X$ ?; F
  863.           int opt_do_extract_withoutpath=0;: p9 g) d' t0 x# N: z: i5 q, U3 u% s
  864.           unzFile uf=NULL;
    / x2 y! [3 c/ H, J9 B; x
  865. + a2 G5 C* p+ h$ h. X" k% |
  866.           uf=unzOpen("Wsa.zip");
    - c3 O/ w2 ?0 @/ _
  867.           if(uf)) d- }  K% O! W8 {
  868.           {& W; @4 @" A/ M2 b
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 E! e. [% C, R
  870.             unzClose(uf);
    ( _2 h4 t1 A2 K
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    3 ^4 Q5 L  i% R9 t$ t" v& u" g* l
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");- Q$ a" U9 @9 ^
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");) H1 o) t( U6 \8 }+ r  \
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; S* Q7 r) x) A* ^0 D
  875.           }
    # b% |" U1 `8 Y6 ~+ L1 k+ a
  876.           DeleteFile("Wsa.zip" );! I" c8 z. ~1 _- @2 O  [" f
  877.         }
    3 I' c( ~7 M1 n3 m6 D

  878. / a3 u1 Z% c  H, q% h. Y
  879.         if(CheckLocalVersion())
    . c- D, T6 ~! }# t9 N! C! f% q
  880.         {
    " p6 K8 i& R+ U7 I/ s4 ]& L
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");1 X1 V  w) O% ^
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");( N7 c! r4 L* R4 A+ p) o
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    2 h5 i8 z8 b+ b6 |. u5 V* s3 D
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- F1 x0 g9 B2 B) M2 {  O
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);# T" N8 S7 b8 d, U- O3 Y
  886.           dwStartUpSteps=99;2 ?6 g0 }4 Z4 ^2 k; T8 N+ U  f
  887.         }, M; F# N1 T  B
  888.         else
    : }, {; F9 k1 q) F7 G
  889.         {6 b; N3 F& ^- K$ f
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ \& B! ^; o/ q5 V
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");; O6 k  M; \. ^1 \; z  L
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");9 }/ d1 g+ Z' \2 q  n

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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