找回密碼
 立即注册

CSUpdate.exe源代码

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

3 j" U+ |9 A5 {0 R- W
  1. / RevApp.cpp : Defines the class behaviors for the application./ p8 X6 O) x; c1 J. Y
  2. //) O9 [: _; Q  I& I6 H
  3.   C6 c  ]# e* |6 y7 R
  4. #include "stdafx.h"0 C( P' T* X. o- ~( C& U( P( t+ E
  5. : s( N; z* W' A" ]5 Y! ?
  6. //#define UNICODE
    . o  |9 w% L# W  z
  7. //#include <gdiplus.h>5 I* ^7 o' V  }3 W* C
  8. //using namespace Gdiplus;9 F% ]9 B, L1 b# _% @8 E
  9. 4 f6 i5 M7 P( i) q5 \3 k
  10. #include "RevApp.h"6 A0 f) s+ o  v( q8 g% P
  11. #include "RevAppDlg.h"
    1 _. e9 e! T, y" ?7 H
  12. 8 S6 S: P) t$ X$ o
  13. #pragma warning(disable:4786)+ M; b7 c# p: R& v
  14. #include <map>5 ~& W# @  t* k2 {" H# D
  15. #include <list>
    0 L- o' A" V) K1 i
  16. #include <direct.h>: U8 j$ m, E8 t; P

  17. ( I  l- O7 y6 T/ g
  18. #ifdef _DEBUG* f) d& t# V, N! j& j$ j/ P" J" S+ Z
  19. #define new DEBUG_NEW
    * n' I" G& j' l0 q% {; b, |
  20. #undef THIS_FILE
    - x1 H* ^: k0 d& h( \" T
  21. static char THIS_FILE[] = __FILE__;! F& E* t  v) X! b$ k) E' C
  22. #endif
    & V8 i! e3 [0 a( M
  23. #include "SkinResDef.h"
    * L! a! d3 S, s1 w9 M6 T- C
  24. #include "ChangeBG.h"; `" _. m1 i4 s7 E8 B, P
  25. #include "AFXINET.H"
    9 R0 q: E. I0 _/ ?0 p

  26. 6 l3 }0 n, _" |
  27. #define TRADITIONAL_CHINESE 0
    ' ~3 L% N" K- x0 a0 G- ^
  28. #define SIMPLIFY_CHINESE 1
    % n( B" x9 i0 S: j
  29. #define ENGLISH 2
    2 [# r. k! [- W
  30. int m_iLanguage = ENGLISH;
    ( k- l$ i! I3 \) z/ D/ s
  31. /////////////////////////////////////////////////////////////////////////////
      w- [( R! S1 L3 u! h' u
  32. // CRevAppApp
    $ g: n) \. N, Q+ e+ u. ]

  33. + _5 ?2 f; W6 W( \" |! ?  o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)7 O- i( P3 P7 n" e  c( x, V
  35.         //{{AFX_MSG_MAP(CRevAppApp)( r6 _# O, z$ @
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    * A2 A$ Z& C1 n0 p
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!! s" i6 |* [& m: T6 w7 @8 }" M
  38.         //}}AFX_MSG
    & ~: C) L  X* O1 m+ f$ a
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    4 O, R5 u' m, `# A
  40. END_MESSAGE_MAP()- C* D  m1 D# m$ y% `, k
  41. ! M7 F' L8 u# H3 a& E4 K4 Y
  42. /////////////////////////////////////////////////////////////////////////////( E$ b% K0 w) y) M- Y
  43. // CRevAppApp construction
    : j2 G3 d' Z. H( L- U+ v: w
  44. $ g  a- n$ U5 ^( H* {
  45. CRevAppApp::CRevAppApp()
    ( i! Z3 g  S6 L2 Y/ z6 }
  46. {* I1 b$ j- ^6 A9 M. q& e2 U; H
  47.         // TODO: add construction code here,
    . G& j* J" N0 \' S; |5 h
  48.         // Place all significant initialization in InitInstance) `$ @$ A$ g% W
  49.   bDisplayIsBig5=FALSE;* P8 P7 ]. x  n" {- w
  50.   bRestartUpdater=FALSE;
    + P4 ]( v6 r' U
  51.   bFinishUpdated=FALSE;
    ; G) O' K  O# N
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ' T; P9 w2 L) U/ L
  53.   InitChangeDataBig52GBKS();5 C  E# |+ R: V) G+ m
  54.   InitChangeDataGBKS2Big5();7 @7 R, N- X3 U7 W# b8 s4 j
  55.         //% H1 b$ O6 t( T9 T7 l- s* [
  56.         bClickRunExe = FALSE;' w$ s) |# w) t+ r
  57.         //% O. m9 e, H3 S+ l6 P1 E% U2 ~
  58. }8 \! k0 l9 i2 O, Z

  59. , L# f5 H3 K9 i/ z
  60. CRevAppApp::~CRevAppApp()7 q0 S! W8 S( `% H
  61. {
    ) V9 X/ ]  e5 X2 j) X
  62.         // TODO: add construction code here,' [* o0 ^8 X1 j# V. l2 m
  63.         // Place all significant initialization in InitInstance5 b5 y9 U8 p0 _0 l
  64.   EndChangeData();
    ! x( y7 y. U* G* h8 u
  65. }
    ! j0 X: z+ e- i, E' a% A
  66. # c* f: Z$ `; ~. `4 i: ?5 K' \
  67. /////////////////////////////////////////////////////////////////////////////
    / ^. D7 i" y& u- x/ {7 g1 O; ]
  68. // The one and only CRevAppApp object
    / F/ `7 ?3 \, s

  69. $ |& q+ i5 e; x' O
  70. CRevAppApp theApp;0 Z- a0 W' H/ H6 y0 {  L. ?

  71. ) a* h! \2 ?6 _* W% X
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    , U& ~$ I9 i: w
  73. {
    4 H9 z7 q, J  b. }& D0 a- U
  74.   int iEOF=0;
    4 u9 f9 l1 C" F' I4 Q
  75.   char szTempName[MAX_PATH];
    7 |( X* E, s( h
  76.   *szFileName=0;
    1 G  }' V. O' I
  77.   iEOF=fscanf(fp,"%s",szTempName);
    & t5 J5 \+ _; ?: s' r
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')- D5 C- C" U2 V$ a2 R+ B
  79.   {
    ' i9 m# t+ o3 Z( @, M* }
  80.     strcpy(szFileName,&szTempName[1]);
    ) i+ w- d$ \+ P7 r" M# E
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    7 \- T" Z* o. M
  82.     {. J! ?5 j3 a, _' N% O8 {
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ) }* Y- h5 ~4 E5 W8 w- u2 \
  84.       strcat(szFileName," ");) h: g2 G" w7 w# W8 d0 S
  85.       strcat(szFileName,szTempName);
    $ z+ K' |, `- _
  86.     }. g1 U% L  _7 ^, H0 p1 ~  `
  87.     if(strlen(szFileName)>=1)* n/ D" a! k8 C9 [9 Q
  88.     {
    0 n" }. r6 J3 _) [
  89.       szFileName[strlen(szFileName)-1]=0;" a# n0 k# n# A* L: q
  90.     }
    5 |- A- t" Y5 T* ]
  91.   }
    ' }' J& ?. v& w, |% k
  92.   return szFileName;
    $ T* `; w" i' u9 v5 e/ V- j
  93. }# x3 J5 d+ S5 F# C
  94. 7 `+ y8 b; G6 d" ]# h$ x: E4 q' d' d( T0 T
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    8 g0 x7 `& r( X% B
  96. {
    8 s* S3 B) I' _8 }7 d
  97.   FILE *fp;5 R$ P8 b! ^0 N. S; V4 \
  98.   char *key=NULL;
    ' ~% F* A6 u0 ^% ]7 s- Z
  99.   char version[MAX_PATH];
      g  `6 o* V2 f7 K
  100.   LPUPDATEFILE file,olds;7 k9 ?, }3 i- Y: Y% Q. k+ G
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 G3 ]. ^7 o" @7 P; r

  102. , k6 l" G9 S3 A+ q! o2 Y. D2 n
  103.   UpdateList.clear();
    ; Q: X2 K: u) I0 I" I7 t7 Z
  104.   UpdateFile.clear();$ ~2 @4 M& U" L5 }6 `
  105.   if(GetFileAttributes(filename)==-1) return false;/ t" i/ F* z) h6 d
  106.   if(!(fp=fopen(filename,"r"))) return false;
    . _4 X" @9 O+ ?' @# W
  107.   fscanf(fp,"%s",version);
    & g( |, k: {$ D1 |% f
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }7 S6 \( e: o% k
  109.   while(fscanf(fp,"%s",version)!=EOF)
    $ @- ~' M) K: N* r( q
  110.   {
    ! S; d: G9 M; q7 D& _) x4 e
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ p+ K0 R/ ?0 E* p3 j
  112.     fscanf(fp,"%s",file->path);
    , U8 n: ^4 |- j7 p
  113.     ReadFileNames(fp,file->file);* X8 E( v$ M7 I9 Z9 V! s3 c
  114.     strcpy(file->full,".");5 B! ?* w; A) e
  115.     strcat(file->full,file->path);
    , B+ R3 H6 b; a& ~
  116.     strcat(file->full,file->file);9 b- V, [/ \/ S6 M7 O3 H
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    5 x# W0 a! T) ]: J, Q; R
  118.     {
    " d+ ]) v8 u0 t* L& }
  119.       file->vers=(float)atof(version);
    . W. {& W- M$ Z! y. m
  120.       UpdateList.push_back(file->full);
    - c6 F1 B" m; p( y1 b/ W
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    1 J# f& v5 T( f: J) K/ J5 D
  122.     }' _4 r! u$ t4 P+ i) p/ l! u3 I# H8 _
  123.     else
    0 s5 d% O2 Q3 m; F- m
  124.     {
    $ G& L5 V( N4 m9 e" ]
  125.       olds=(*p).second;0 p; }! Q7 c% K2 Q
  126.       if(olds->vers<(float)atof(version))% X: Y, j7 U" t& w, @( j
  127.       {
    5 h- B- M+ W$ D6 W6 \% p8 b
  128.         olds->vers=(float)atof(version);* N) H* I* C0 _* z
  129.       }
    $ q3 F1 i( d1 g3 U! N8 t( H, f
  130.       free(file);6 ~3 @- e, D/ X
  131.     }
    7 x. f1 h( S( e1 v7 M1 c8 c
  132.   }
    ! |) S2 s( ~( k# e3 R
  133.   fclose(fp);, i/ k$ F7 ^% o
  134.   return true;) U1 l; I5 @5 B/ l
  135. }
    , {7 G: t0 ]4 X& j, N

  136. 9 F4 F9 f# I7 G
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)6 U- ~5 Y' r8 g! g5 x
  138. {
    . j& u3 D3 B2 V6 W. u( @, U
  139.   TCHAR  szFull[MAX_PATH];
    3 k* j0 b( w' a4 j+ O6 A8 a, @
  140.   TCHAR *token,*inter;
    ) o6 U% g( ?. H' f% G
  141.   *szPath=0;. F' T3 x3 \6 J3 k
  142.   strcpy(szFull,szFullPath);
    # Y$ y$ ]+ a/ @" N( n" I9 o
  143.   token=strtok(szFull,"\\/");
    + l6 q) v/ o6 c) I# S/ J  T9 j! w- ^% U
  144.   inter=token;* }0 s3 r4 Q- l2 M1 t
  145.   while(token=strtok(NULL,"\\/"))
    1 m. [" G% ~8 i
  146.   {
    * x6 y$ A& {, b
  147.     strcat(szPath,inter);" w+ O# o2 I! A1 H7 I5 H/ y$ S
  148.     strcat(szPath,"\");" }9 K2 ]  Y. I' t8 n7 z
  149.     inter=token;2 G6 u0 n$ ~# U0 u) E
  150.   }" X) z* W- X3 b1 S9 j
  151.   return strlen(szPath);8 A9 Q# z8 m1 j5 Q
  152. }- [7 p* ^# W" p" K# m6 V' s
  153. 2 c: x5 Y% u% S7 J. P, i/ E
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ P, Z, L- n0 A; H# h5 y
  155. {
    3 Z4 t- k% A3 z2 D1 }
  156.   DWORD attrib=GetFileAttributes(Target);
    , N; X# f) @( P; v0 w+ G. b5 L! @
  157.   if(attrib!=-1)% m8 K0 n! U2 b: F8 d( L
  158.   {1 k0 R& g6 T% }$ k& t
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    0 O! P3 |. U/ |' p
  160.     {% k+ Q4 r# Z4 P+ {8 {, P. v
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);$ V% q1 F4 G6 a$ H, q0 z2 Y
  162.       SetFileAttributes(Target,attrib);! ]# p: I9 i( E7 U. k5 v* y/ z
  163.     }; ]3 v0 B3 r" I( x4 F
  164.   }1 a: m4 [# W* [3 \
  165.   CopyFile(Source,Target,Erase);
    " W: q; _* Z5 \* o7 `2 w- O
  166. }+ q5 u; x- S, Z# \6 ?! V2 R
  167. * v$ g" R! N2 m6 M$ I* p3 o: Z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)2 n2 w) B5 k& J. \9 H$ N+ d
  169. {
    4 s, m5 C; ]1 w( V; d* L% I. e; j
  170.      FILE *fp;
    9 ]! t+ B% @& m& h! v8 {8 N( m/ R
  171.      char  szBuffer[8192];
    % f2 A, r) u1 i
  172.   va_list  argptr;
    ! K8 ?/ L7 E3 t5 U/ N5 b# L

  173. 7 e8 s, z, l& A: D) h
  174.         va_start(argptr,message);
    3 I( v1 e: k; f2 h) I1 z6 h+ U# ~
  175.         vsprintf(szBuffer,message,argptr);
    / W$ e! n& p0 V% i4 D# p# j
  176.         va_end(argptr);5 x8 H% V* x6 u
  177.   fp=fopen(FileName,"a");
    6 t! u/ P$ ]! d/ P3 D
  178.   if(fp)
    ; e% Y! [8 e! p
  179.   {
    ' t( B& V) [7 _1 C
  180.     fprintf(fp,szBuffer);
    7 [5 N8 N% z  \; G* b# q3 l2 k
  181.     fclose(fp);
    / s4 r$ s/ _) z# _/ j+ T- c9 `1 A0 Q
  182.           _flushall();3 Z' J& F) a5 h) y5 t( H+ G
  183.   }5 s# G  y: L4 D
  184. }
    ) x7 f2 H- V  z2 M: U7 m3 n. h+ u2 o

  185. " W  G" [9 t: W
  186. BOOL CRevAppApp::Fclearf(char *FileName)& n  {, x  M0 h/ Q" e5 b
  187. {
    4 J9 I/ ?8 G3 s& ^4 T! y
  188.      FILE *fp;
    " L2 @& G- ^% I
  189.     DWORD  attrib;9 D8 d) v+ I' e
  190.   attrib=GetFileAttributes(FileName);. q" h# j* Q! _, N* i
  191.   if(attrib!=-1)) o& {" O  Z/ c5 ~
  192.   {1 E8 C- F% f- {$ m
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);- f. D- M$ o7 e4 [/ ~" w
  194.     if(!SetFileAttributes(FileName,attrib))0 Q0 ^2 Z4 d2 d! l$ E+ h
  195.     {
    1 p$ ^3 P% ^8 p9 S/ Q2 E  z+ ^
  196.       return FALSE;9 A) S# T- v0 n7 `
  197.     }
    9 \# V' u* l  x/ ?7 A9 u
  198.   }
    8 S" x2 k$ h! z1 i
  199.   fp=fopen(FileName,"wb");% @5 J( N4 J5 A4 L9 [- z
  200.   if(fp)" x4 [* _6 v0 O
  201.   {
    7 h5 W( P. _, {: a) H
  202.     fclose(fp);: Q: |( Q2 Z8 g4 c3 n, T7 L9 y
  203.   }
    $ x3 j2 F4 d4 r/ F( K' `* |
  204.   return TRUE;
    ( B+ B: A8 \. y% V6 w* ^% f0 [  A
  205. }8 ]  J* C, D- R7 P0 \

  206. * p. Q+ z6 W+ b$ O9 y8 Q/ k
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ! M: ?7 G1 `% U0 H
  208. {  b. _# b' v3 r% q
  209.   char filename[MAX_PATH];. a, t3 A3 c) Y" J2 y
  210.   LPUPDATEFILE file,olds;* u& Y3 p2 r/ T; i
  211.   std::map<int,CString>::iterator i;
    4 n8 }! x3 i( O* Q0 D8 u4 B
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
      C, L/ e8 V1 r
  213.   std::list<CString>::iterator l;
    ) ~# g& Z6 H) S5 a) R

  214. & y1 ~% f! F5 |# T- Z6 f2 X7 h
  215.   if(bFirstUpdate)0 o% B8 l+ U, f$ ~  C/ F! \1 B- o
  216.   {
    ( V; m* j' I0 o% ^8 P' N
  217.     dwCurrFile=0;7 E6 F' P" R5 J$ t( ~# T1 K
  218.     bFirstUpdate=FALSE;: B/ o( \. l& c6 O9 g
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . c  [0 t  }/ D+ T0 d+ W  |: t
  220.     {, b0 L- `5 e! Q7 I+ \; e2 \! x3 J/ F
  221.       dwTotalFiles=UpdateLocal.size();7 U4 K" ]! E7 ^
  222.       dwDownLoaded=0;
    0 K. z2 H2 P- h' x3 D# H
  223.       bSilentStep=FALSE;
    5 X, K3 x; s$ X6 D5 Z' K4 `, A
  224.       bCompressed=TRUE;5 r- F0 c# Z4 ^+ Y. J8 E
  225.       strExtLocal.Empty();
    5 U+ H+ m; g' {# ~# k3 p& f
  226.       strFullName=(*i).second;+ Z% h- T# O& R% e3 k) Y3 ^1 B. |% g
  227.       dwProgramState=AP_CONNECT;
    & G# C9 C( c4 l! o/ ?7 N! |
  228.       return TRUE;8 n  J' r. F5 Y! M9 B) v. l
  229.     }
    0 O9 U- @4 f% L( [
  230.   }
    : a6 i3 C! u7 l0 o4 L6 |
  231.   else if(bRestartUpdater==FALSE)2 g4 k/ ?# u$ q  w% m0 |
  232.   {
      {0 A6 v/ S# K$ o3 _, ?( L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()). Q' r& {0 e9 g$ r  F
  234.     {
    % m# l* ?# e5 y
  235.       file=(*p).second;- g9 n- ^% `* u" }2 B
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    1 |* z7 L/ y$ `& `' I" \
  237.       {$ J4 Z8 k2 }( E1 e) G1 }$ M8 O
  238.         olds=(*p).second;- J% q* {% K) `, V1 j* k5 @5 S
  239.         olds->vers=file->vers;
    ; o9 L3 U9 G: ^, m1 L. T8 }
  240.       }, A1 _8 |3 R. w6 l
  241.       else3 r" t) P. E- W5 Q
  242.       {" L7 e5 z3 O- [. t1 a
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + u; b- t2 q+ y' e# }- [: n
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    : K# t6 I! X( W9 o5 ~
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    1 g/ f0 o3 T6 Z8 Y6 I
  246.       }4 X6 r+ `+ L, A( C  m8 y/ A
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");: e6 F9 k7 I3 d& W8 O
  248.       sprintf(filename,"(%s)",file->file);
    - X2 a5 C0 t5 [' [
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 R3 _" D- h+ K( J2 Y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    . p# @2 M8 u. S3 a( z3 k
  251.     }
    6 d: y2 [2 G4 S, `+ \
  252.     dwCurrFile++;
    & m1 w* Y# V) ?) A8 d
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& @& B+ f; ~$ }: q$ `9 x( Z
  254.     {0 i+ C+ ^- e; x( F9 f+ d
  255.       bSilentStep=FALSE;
    " S6 r8 K5 Y7 S! Y
  256.       bCompressed=TRUE;
    8 ^2 J& ?1 l1 r( g, G
  257.       strExtLocal.Empty();6 v8 }2 |1 ?6 n+ `, S
  258.       strFullName=(*i).second;
    % h" D8 L  P% O$ c# S
  259.       dwProgramState=AP_CONNECT;9 m7 ]! J! |# `. f* ?
  260.       return TRUE;
    ! t5 [! r0 n6 R7 ^
  261.     }
    9 }. @  W6 H. ]' c9 P' M6 G
  262.     if(!bRestartUpdater)8 ?5 ~/ v/ T4 I6 |, ?- o
  263.     {7 X6 k; ^7 y9 b  |# H  @. R1 }' J$ `
  264.       int iCurrSize,iFileSize;
    ; @& i* |) T2 X  I; Z) E  P; e
  265.       iCurrSize=0;, E' e) s0 E; s8 J+ e
  266.       iFileSize=UpdateList2.size();% o+ x3 `7 E  H& ~6 ?  |; t
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    + g( r0 i; m/ ^) b
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");% {7 `" r- P9 J9 Y# A
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    8 B! p5 u# B# v( @/ [
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" |0 I. ~! w- P$ P% K+ p
  271.       Fclearf(".\\update.dat");0 r* S, S9 J; e( P
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ) Y/ y. @0 g  P( H+ W8 T& I
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 c6 `% {3 Q1 w/ L6 D6 S
  274.       {
    . D  m- X' ]" y( ^: `, @9 k- P; z9 u
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    + A- l! r( R, F! W6 c3 U5 p# K6 i
  276.         {
    8 Y) Z& R- {$ g" U
  277.           file=(*p).second;
    ) O- U8 b9 c9 W" c( ^0 ?
  278.           sprintf(filename,"(%s)",file->file);
    $ J; J5 E" ~! }, g9 [+ I" g" v
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + A( C0 I- F- P& I+ ?) E
  280.           iCurrSize++;/ p$ A1 ^7 G$ g2 \. ^# Z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));& D4 d# F4 f$ H9 G/ s& w" n" {' v
  282.         }
    ! Q( S4 ~  S5 o9 w
  283.       }. |8 M( |9 v3 ?) i- d" g: V  ]2 v% r3 K
  284.       unlink(".\\update.txt");
    & K% J# l( ^1 @7 u0 E
  285.       unlink(".\\update.tmp");
    + p3 n* x3 ]6 S5 t( p! H! p2 L
  286.       Fclearf(".\\checkversion.dat");
    - b! \6 A" n) h1 w6 l! [! j' ], \
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);0 _. l8 ?8 U0 ?" z! G
  288.       if(UpdateLocal.size()); K2 u" s, R9 a% _) v7 O
  289.       {
    ) P7 b' ~! h+ c7 M
  290.         UpdateLocal.clear();7 T9 {. k& Y- o3 o
  291.       }( e" o4 e: K: p
  292.       if(UpdateFile3.size())  w1 e8 i; O" r8 G
  293.       {# C/ v0 N1 |; _9 |4 S- Z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 r" V3 b( T) ?
  295.         {- h) q# B; N) t
  296.           file=(*p).second;
    0 i" H0 X3 T3 j% n
  297.           free(file);
    8 |) @2 {7 e+ Q0 x3 z& ^
  298.         }
    ' J2 {' L  X, @( B0 ?
  299.         UpdateFile3.clear();
    8 Y) ]. H: L/ {* x; p: x
  300.         UpdateList3.clear();' ]! @; r  Q6 i+ ^  }+ X
  301.       }' y: a: }2 f8 A  x# \& }1 d/ O% {7 k
  302.       if(UpdateFile2.size())% ~5 W+ q1 a5 A% G$ f/ O$ q6 q; J
  303.       {
    ' f3 ^+ f/ C& L1 @( Y3 X
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), @9 a4 R% _; T8 P# }
  305.         {
    2 r0 ?% A: O4 _! D$ l
  306.           file=(*p).second;5 f1 b$ u; ^( `
  307.           free(file);
    * e5 w' L& N! y% X
  308.         }
    + ~/ i5 L. i/ M4 ]
  309.         UpdateFile2.clear();' p/ z  i$ l: ~! N; b
  310.         UpdateList2.clear();
    2 x8 \2 u- o+ {4 g- d
  311.       }( C5 b, M0 I# v) V
  312.       if(UpdateFile1.size())3 a/ K% n- e- `7 \; g' n, F* r
  313.       {
    ! x+ ^' ^( p9 A; l6 t6 i3 H
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) \8 b0 g; U8 |
  315.         {
    # L2 L/ Q  R5 m4 }
  316.           file=(*p).second;( H# C. [9 _7 ]3 [8 u7 E+ z
  317.           free(file);; m* j) L" q4 e2 [6 _* z
  318.         }3 x5 Q0 G+ y- `' p( C! y' E2 V
  319.         UpdateFile1.clear();6 A% {& s) N4 V2 N# _% q. |
  320.         UpdateList1.clear();9 H6 E% K. s5 Z$ y( [& d
  321.       }
    5 M" W9 }* h" s
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));. T( E) d0 ]0 O% c; [) ^
  323.     }
    9 ?0 C' ?- U9 P* Z, B
  324.   }! |4 o9 M! o1 a
  325.   return FALSE;
    . X5 M* K- W0 h9 x9 R& }* E
  326. }
    2 R# G7 E9 P' q, y7 Y

  327.   e; n/ T6 R% r; b; q
  328. void CRevAppApp::ClearAll(void)$ ?( {0 A( a  M" x( L
  329. {
    " X: K. ?* K5 t; a" @; ?0 O
  330.   LPUPDATEFILE file;/ q/ g. r" ?' ?2 f3 W" q- f7 p. U% A  J
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * p8 K9 D  A& O/ o0 M, O9 L% x7 X

  332. 9 H( C; W+ l' ^
  333.   if(UpdateLocal.size())) T+ u2 m0 R7 l. g! M7 x
  334.   {( x4 T8 z; y' L2 Q
  335.     UpdateLocal.clear();
    & q8 j$ d$ f* O; K& K% m
  336.   }+ N8 Y( {; A- w8 g8 R
  337.   if(UpdateFile3.size()): N6 H/ o: J) I# f( G& y
  338.   {
    * h; \- |7 h1 x
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % ]) s" b8 e  S" @$ T) b, \
  340.     {
    * r1 ^& k# c$ f( f$ X; s% r1 I
  341.       file=(*p).second;; V% G! L% V' u' Q* H: k: a
  342.       free(file);! x! }& X3 O' O: V/ }- g  j
  343.     }+ ~( j  u. D8 e+ k& W+ Q7 q
  344.     UpdateFile3.clear();
    3 {- H8 w% h( q( F6 Y$ V
  345.     UpdateList3.clear();  H1 g# Z( `) D5 D6 @3 _
  346.   }! u4 s- E2 ?0 ~: j; A+ V
  347.   if(UpdateFile2.size())+ e2 p) G" \9 N) a! I6 U
  348.   {
    9 K9 g* d5 Z4 u/ r: l0 [
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) J3 U6 [: v- G- \% K
  350.     {
    - F6 Q1 m5 K/ b' Y6 {6 O' a
  351.       file=(*p).second;
    0 _! i5 [* [$ k3 |
  352.       free(file);4 T, h" @9 E" N+ o/ h
  353.     }
    ' v+ x& Y: L5 N+ q
  354.     UpdateFile2.clear();5 g4 D5 \. C! S2 X6 k
  355.     UpdateList2.clear();7 n( \+ g/ q7 G7 {) M8 U4 n8 \+ D
  356.   }8 F6 a% F" l: g! ?5 l1 Q) X
  357.   if(UpdateFile1.size())/ e$ F; ]% v' k' g0 c) x
  358.   {4 R  ?3 T6 J& i3 y+ g# M
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 S; {9 j$ k5 H1 b' Z4 O
  360.     {
    : w8 i6 l3 I7 Y, A/ \' @
  361.       file=(*p).second;! T  i# j; S  q* @
  362.       free(file);
    ! T9 _& n) s4 a& i) G5 @# e
  363.     }
    # A6 _4 h) j8 u
  364.     UpdateFile1.clear();
    , f/ o" ^: e8 I! \1 S& W- O& Y
  365.     UpdateList1.clear();* e) O8 B8 N  l3 U5 \2 D" r
  366.   }
    & d0 s( D7 ?- h; p! G) Z% a! l8 Y
  367. }  
    # V# E: f* L$ j! @, U
  368.   % k' P; O: }! J% t1 l' Y
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    * l" \& w9 g( a0 S: u
  370. {3 a7 N2 B: e: [0 G
  371.   int c;0 I5 p' G( A. Z7 H9 i6 t
  372.   LPUPDATEFILE file1,file2;4 Z0 e  }( H0 B! D
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;, f7 e4 w; J" j! y6 [
  374.   std::list<CString>::iterator l;
    2 r- T+ g; b, l! ~9 |; K
  375. * _! N; _* P( q7 q: I8 v9 c, ^
  376.   UpdateLocal.clear();
    ; D) Y. F8 U/ W- a5 p: D% v. q8 H
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);& j& v. F. r/ w( u9 p, F
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);& Z4 ~5 q- A" C  N
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);5 z, J3 l, R% }6 o4 W/ T
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);3 \" i8 A8 ^3 g+ r! g7 ^' t0 x: V. ^
  381.   if(UpdateFile3.size())
    1 ?3 q% E! X- O1 p
  382.   {
    $ ]  c2 t1 `- d
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)5 }1 b7 V- g" r* P
  384.     {
    4 Y3 g# K4 n  q8 b7 Q
  385.       file2=(LPUPDATEFILE)(*i).second;5 P. l8 O; X8 G  C% {; U
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / r) H8 C& P/ ~4 h: F5 R% s
  387.       {2 A5 e! Z% H. X
  388.         file1=(LPUPDATEFILE)(*p).second;7 E5 V3 h% t& J) }* c
  389.         file1->vers=file2->vers;7 `" q2 A2 z2 J8 O" r% ?
  390.       }! J( \0 D! p; m( S4 t% F3 ]( \
  391.       else
    % M. t- `$ o2 D! m5 P7 e
  392.       {% V. v4 Q( X9 j* Q  G, i% P- [
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ `& @) M9 N' a: }+ [; R( K- A
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    4 Q! W. R- M" v# }
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ) x. S& M% O7 X0 d% m: A0 R5 f. m
  396.       }
    8 L8 E* n) {) p) E5 G* P
  397.     }
    / R! D( r7 `# |# Q; o, U
  398.   }
    % s+ \; v5 U; ^# X
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)( Y* m0 ~% B' t- ?7 y4 c2 z+ b& R
  400.   {* H. ~, M! |; s& j& V- b
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())2 \3 Y! b( n0 S
  402.     {4 S& \8 x7 |2 G  N; R
  403.       file2=(LPUPDATEFILE)(*i).second;
    ; j9 K: b1 c# A/ R% k2 f/ t
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    & \% M  ]1 E* j2 g. k# W& A
  405.       {  V# W# E. H# i, U  u  k0 x
  406.         file1=(LPUPDATEFILE)(*p).second;6 H( o$ D; [& _
  407.         if(file1->vers!=file2->vers)5 J2 K8 D& s' G% t* T! ?6 a
  408.         {
    5 F' J) x' k1 X. W( l. ]8 `. u/ a8 T, U
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 ]9 w! N3 I3 |, t1 \' |! R' I
  410.           c++;
    ; T" N4 l! N& I9 I5 j% a
  411.         }* r5 @' O/ S. P4 N% J1 y! B
  412.       }' x" W& o% c, C' B; h2 _
  413.       else) t. w& u8 R* p+ Q
  414.       {* A% E- Y( P( H& u* H6 N
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) z# G& C3 G. i/ m; p, h8 h, H
  416.         c++;
    5 V  n' y2 w% |& ~8 E) p. m2 s
  417.       }
    ) T3 F6 u! N* b% ^- S4 b
  418.     }7 T" k& U$ ]9 h! O% i' g+ ~
  419.   }
    ! t9 z3 z) i  e) `
  420.   unlink(".\\DownLoad\\update.txt");
    # }7 k& [, \+ [# a# {( F+ g3 V
  421.   if(UpdateLocal.size()) return TRUE;9 f, g6 w' g9 S% {. Z1 e
  422.   else                   return FALSE;: s- B8 V! F, m$ A" c' @2 D- }
  423. }/ E9 [5 F/ F+ z6 _; _+ @5 [
  424. 2 _  s6 s) |8 B) u4 _* A. L
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ; M/ r0 c) _' f6 Q9 V
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"5 m' e  F8 g# \5 |
  427. , b! U# q- {. Q/ V
  428. 3 k. v+ O+ h- o0 |( d$ h4 ~  q
  429. 5 D! Y8 ~4 p& M& p. m# e
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile). V  Y. J8 h& W; B1 z
  431. {& C5 O- [- o% i" }
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;+ P. U3 J  b# R0 X" J
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 Y( N8 h. _4 }
  434.   {
    / L5 w$ [: o0 c" t6 E2 u) X1 ?
  435.     char szLanguage[50];& L2 b- {* Z+ J* e* j0 `
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( x( ^0 t7 V; j/ @, ]; U) a: H  j5 B7 g
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 e: S/ z% X# L+ H3 O
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    : g9 e  S4 b* i2 D: v( h- ~
  439.     else                                   m_iLanguage=ENGLISH;4 W9 A  O5 |) _- C
  440.     char szRegister[100];% U0 j6 ~, N1 p. k! H/ H
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 ]0 ~( i9 H' a3 F
  442.     strRegsName=szRegister;
    5 b# v3 C  Y$ s: b4 P- X& w' [. \1 ?
  443.     char szPatchURL[100];& b: H" V% F6 u3 d: E
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      k( B8 w( h/ [. G8 i) g. s" R
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( |6 h, q! m2 K) R7 H
  446.   }
    ; S0 w) S  ?+ ]/ ~8 o8 p
  447.   else
    % d. m: e+ D& r) z# x# O; X# _, r+ Y
  448.   {
    + h0 {9 D0 P! U1 b: K6 M1 _
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ; C4 n5 O8 J$ v$ r: e( r/ R
  450.     strRegsName=DEFAULT_REG_URL;
    ) N8 P/ {( a& G$ U- ?* v
  451.   }
    3 K, Z% h% E, ~) H( _# f
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    + ?2 L! G; f: Y/ k3 z% P$ E" b" y' ?
  453.   {2 a" Q  z! R% a
  454.     char szIP[50];
    7 e) c+ q% j  a/ p0 d
  455.     char szDIR[300];
    , W4 |4 d8 A- k7 d9 D7 c
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))4 b! c. Y( t* E/ X+ ~. g- o5 p
  457.     {4 U  ~( y" v7 V: J8 m
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");8 x+ L+ M/ ^9 u2 G' N
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    + w" W* a* A. a7 O  y$ j8 l$ A
  460.       strHostName=szIP;
    : A: [) J) G9 O" a% m
  461.       strHostPath.Format("/%s",szDIR);
    8 M, q  p2 ?8 s: `" p! J7 N
  462.     }; q  e4 G. t' c) @8 S+ G
  463.     else
      b" W& T. d2 @5 l
  464.     {
    ' s4 C) e: M6 ]+ u9 X" D6 d
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 q8 e; C* |, o# K7 R4 R5 G% |& q  w' v
  466.       {
    . _. e8 s7 q( m
  467.         char szLanguage[50];* n. G. G4 i* B
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + m8 {  W' n' y) n7 I
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* f# j2 ~2 a, C, B' j, s
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * c2 n' r. [8 C
  471.         else                                   m_iLanguage=ENGLISH;
    ) u6 w, {, G: ]. ^' Z" s, C
  472.         char szRegister[100];
    . ~5 C2 Y' |; V
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' u7 @4 V* o, t) A* I# W& w
  474.         strRegsName=szRegister;0 _# G9 }! ]& y: j
  475.         char szPatchURL[100];
    1 U# l5 F4 {; g3 \" {( f  z; N
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 m, S$ ^5 Y# g
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, r: T% S" R6 _* [
  478.       }
    3 C8 G% W" F" n! {- k7 h
  479.       else
    ) T1 M$ P( N  M9 V0 g5 P8 j
  480.       {
    $ M3 z* s4 G- \# k
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  V2 \! t, G. J0 h4 Y/ z
  482.         strRegsName=DEFAULT_REG_URL;
    0 ^! E5 N6 E4 @& Y
  483.       }$ P1 ~! b; }6 A2 E8 O7 H% ^3 x% y
  484.     }
    . I' l) L8 i1 `+ N
  485.   }8 ?: P$ T( Y9 }$ X
  486.   return true;
    3 |% o# a) L. g. I+ Y* b/ b
  487. }; w2 Y; m8 o6 W
  488. $ J0 l# x) B  r" f! W
  489. #include ".\ZLib\unzip.h"
    6 [% Q$ ?8 U7 b& {
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);5 k4 `: l( `0 D9 x3 L1 M
  491. /////////////////////////////////////////////////////////////////////////////
    + o/ S! ?) t9 a+ r9 D; G7 f
  492. // CRevAppApp initialization
      }3 e9 t" N* d

  493. % h6 Q5 O4 r! g% W  w
  494. BOOL CRevAppApp::InitInstance()/ R5 P( W4 w  O. Y1 R; ]' |5 E
  495. {
    7 T( O' J; S$ C! F( w2 S, V5 j8 Z
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];0 B+ a7 G0 j& }' ?5 a+ \

  497. 0 ~, a+ s. V& @0 j) h# A4 h: J
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    & U7 f" i! V" L. F( |& r7 A; h
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    . `7 S5 @2 ]! I; y" V: H
  500.   {# t5 V9 }4 @! r, Y& \
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    - ?& g) R$ M2 H7 Q' Y/ R
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    * W) n. K* Z& ~" d" x; l$ t& Q' T
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    * i( o% J) U" b$ F: v6 @' f$ i  o: c
  504.     {# @8 J. A: g" K
  505.       strcpy(szPath,szPathTarget);
    - I4 Y1 C) V: W2 n. |# |
  506.       SetCurrentDirectory(szPath);
    3 I" g/ m/ b/ K) y) }
  507.     }
    2 b9 K: t7 O  b5 K7 \! R  |0 v
  508.   }
    - K0 M' ^6 d7 Q( L
  509. #ifdef _DEBUG
    ' W1 ]* H( u, {9 {3 p
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 V3 S" f+ T. m# e
  511. #else( c" S3 v; x$ Q* Z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- x6 J' u2 ^% C8 o
  513. #endif: Z- `2 o: E2 V( N# v/ ?
  514.   {
    . P. b) D* Q4 g# f- Y2 T6 c
  515.     char tempFileName[MAX_PATH];
    1 Y( a; h8 d6 N# K
  516.     strcpy(tempFileName,szPathSource);
    1 T# a! a$ ^7 `% `
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( Q, q  ]8 {" u8 O0 U% @$ J
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    % {% X! s& J7 ]/ n/ x
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    - u' j/ M1 |9 b; V- `$ O8 b7 `$ G
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);& B( S% B- i9 |( V
  521.     return TRUE;
    8 u' M# L) z+ w% A* T4 q
  522.   }# A/ L1 D& G+ J  }# S  K$ r; q
  523.   // Nuke 0118: Delete run.exe
    / o4 D6 E. r+ p+ M/ b
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );  z, O% a$ y7 F, E. n$ l' A1 Y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    4 G& E: l- K' y) }7 P
  526.   if(!ReadCfgFile("Config.ini"))
    2 G, @, ^( q  w- H) I- V7 F
  527.   {
    ' g3 X2 S) z( e- y/ D
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);, F# s) u* o) u  ?" _6 e8 w
  529.     return TRUE;* \" w+ t% i' \" ^' [
  530.   }
    ; O/ U1 S2 E$ t' L) m6 T
  531.   HANDLE mutex;
    $ X9 g& u% H: S6 Y! S
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))& m8 Z% f; b8 l* C, `! F6 {+ ?$ T1 p
  533.   {8 h- C! B- M% V8 _1 E1 {
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ; R) g7 e1 _- ?0 Q: Q
  535.     {: e) m) H) U7 p$ \6 {1 y
  536.       CloseHandle(mutex);/ Y. w' y+ O/ \  X
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    , M, `$ E4 A6 v0 Q9 b
  538.       return TRUE;0 R' V% t0 l; N+ y
  539.     }
    5 r& h; l1 k( l
  540.   }  
    $ F" e9 P# w" z( f1 H6 f' w+ N; _' D
  541.   CloseHandle(mutex);0 F* G6 R" j' C# n& g" Q3 ~
  542. , b; z* m- |( z2 K; y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    4 z7 |  C; j! C! k/ N' F. D) Z
  544.   P6 W" e1 M9 S: q4 y1 [
  545.         AfxEnableControlContainer();; m" Q. ]& L6 Z$ p1 |  @  Q, j& V! a
  546. & n# R* r; H, e% _
  547.   bCanUpdate=FALSE;" U& D6 f/ G4 h2 U! o5 Q0 d1 B% L
  548.   dwStartUpSteps=1;' v8 B& E0 ?* W; J7 k
  549.   dwProgramState=AP_NOTHING;) i9 S* w- d9 o& C' s- x

  550. 0 E! B' X1 k" K5 {  d
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    1 i# t$ I, x# o, q; ]6 x- a

  552. ( s5 N  z# `9 C: ?! ^4 V3 ^- Y/ q* e
  553.         // Standard initialization4 A; x, ~2 N8 q* n0 Y( C$ o
  554.         // If you are not using these features and wish to reduce the size
    % o5 k" r5 m* \
  555.         //  of your final executable, you should remove from the following
    ; `& A: Y) ]' S% [5 J' C$ [# b6 j
  556.         //  the specific initialization routines you do not need.7 E- S* \1 U2 V3 b9 X( k

  557. 5 j+ Z+ J7 z7 [* z+ B  n( M8 w
  558. #ifdef _AFXDLL( O5 e4 w. r7 Q
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL" l" v- F) `) H; n
  560. #else
    2 N$ b/ b7 r$ @3 V
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    " D8 O: T/ \0 y" S' y  L
  562. #endif
    ' j; U/ w7 {: f( z/ r  m: B
  563. ) \- e' u8 G" e
  564.   dlg=new CRevAppDlg;
    8 \( ~% r' m6 n# y% g
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    4 u0 |* A4 \0 V$ J% q. L# B7 c. c
  566.   dlg->ShowWindow(SW_SHOWNORMAL);! U- w/ h+ O8 U8 V# \) s! S( g$ m, [2 B
  567.   m_pMainWnd=dlg;
    1 _9 |) X* h2 M! \8 a8 [

  568. 9 w  R. m4 W$ d% |
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);2 V3 {$ ~. l8 B% L4 g. Y% D+ F8 T

  570. / k% }5 J) V8 r6 v* s/ E
  571. //  GdiplusStartupInput gdiplusStartupInput;
    . C" O! j7 j0 H( l8 D
  572. //  ULONG_PTR gdiplusToken;9 H1 ~2 ^5 S+ R
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);, B+ u1 U1 ^% [8 V! k4 F6 e

  574. - V' r& f6 _' o4 e9 E
  575. //        CRevAppDlg dlg;
    # Y+ w% |  P2 ^/ _% O
  576. //        int nResponse = dlg.DoModal();
    8 ]- z, c# r/ l% `. J9 G' A* J
  577. //        if (nResponse == IDOK)
      a9 x: O" [" g
  578. //        {
    6 Q4 i! b; K+ k) `' I/ c: [
  579. //                // TODO: Place code here to handle when the dialog is
      M+ E! x) Q5 W: M
  580. //                //  dismissed with OK# h, ~4 o: I% E0 A/ h
  581. //        }4 ?6 {3 N0 |# x: Y7 \# w
  582. //        else if (nResponse == IDCANCEL)! T) k1 O4 M. T2 y( E
  583. //        {( X  B  ~$ e# L+ i9 Y
  584. //                // TODO: Place code here to handle when the dialog is
    4 j7 I6 P5 s! P7 t4 W, T6 {9 h
  585. //                //  dismissed with Cancel
    ! b' m1 D& _7 n& g0 k
  586. //        }
    . T9 g& l  G3 d3 `1 F) G
  587. 4 r  I4 v' o* [9 N
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    6 l; L" W' ]  X, |, M; z8 \* c
  589.         //  application, rather than start the application's message pump.
    2 u5 A! }! ~' T9 l" L7 M' I- j
  590.         return TRUE;
    2 K, ?, H% u7 E3 t. W* L
  591. }
    0 `, D1 I3 u  R- J* E

  592. 0 n7 {  W1 ?1 Y" W8 j9 M! R
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    1 n" S' Y0 Y& M$ W
  594. {
    5 g* p  U+ r1 |
  595.   int i;! ]5 K& ^1 q" ?* W
  596.   char *szRet;' C! x( V' j0 @2 [4 ]

  597. " d7 Q% {  _* z; Q+ J- ^& ]4 W2 T
  598.   if(pSource) { itoken=0; sztoken=pSource; }& @1 \0 e( t; X  f5 P
  599.   if(sztoken)
    8 y) `. P/ Z  b8 Q% S/ l; l: f2 P
  600.   {6 s) U+ P0 k& m+ `7 @
  601.     szRet=&sztoken[itoken];
    ; Q/ c  A' y- l8 D5 p
  602.     while(sztoken[itoken])
    ( ~( m8 D  i# `# D. y# D; I' j" Y
  603.     {
    + C0 H& E' q% v/ M1 j2 |
  604.       for(i=0;i<(int)strlen(token);i++)  Y: ~4 q0 |7 N2 ?% t% r0 }: X
  605.       {# b& F& x5 C9 [2 w0 P; K' l
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])' N# Y  o% N# E  A7 [, G, n% P
  607.         {
    % q4 |' P9 I4 A& G5 u
  608.           sztoken[itoken++]=0;
    0 t) A) w# P) m, j
  609.           sztoken[itoken++]=0;' Z! e: _; \+ {
  610.           return szRet;( Z( z3 t7 t9 w4 ^( v& a- ]7 r+ C$ G
  611.         }
    ; J1 Z  p2 h  |! V* y5 I
  612.       }
    " e' V/ v$ _6 x+ V' r
  613.       itoken++;1 g, ~, Y; C, J4 E* c
  614.     }( L" f% E+ `/ x, c
  615.   }
    1 \6 I2 n( z6 s7 g) m& @5 A' ]
  616.   return NULL;, ~( i: q8 W) ~! W% `0 r
  617. }$ U" |( V" I5 |+ X

  618. % H# M8 \. M3 O: O- G
  619. void ProcessProc(long Total,long Current)3 S0 T+ C* S+ U* j  ]
  620. {" `6 `+ A6 S+ K$ L' W) `
  621.         MSG msg;
    % S+ W  P9 O+ a4 X$ y
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    1 i) p9 k" v! N3 }2 p
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));3 E2 Y! [& R+ J# J6 _8 L7 C- n4 D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    7 {3 r! D9 {5 b) u
  625.         {7 m" O! M  i2 c
  626.                 if(!GetMessage(&msg,NULL,0,0))
    * y0 U) a9 y: s
  627.                 {
    ! b5 J- J  C. g& f
  628.                         return;
    4 d% y. }, b5 v
  629.                 }
    2 Y# U6 ^7 Z, l" q' Y
  630.                 TranslateMessage(&msg);
    7 D# F9 m5 G# h3 k) r7 g1 h& [* p
  631.                 DispatchMessage(&msg);6 q  y, K3 O: p! v% k/ i: _
  632.         }        " Y# J1 ~+ ^. \' a! f# A
  633. }6 X+ Q) a! @: w( _4 ~& {+ l

  634. . ], B' i, ~% r4 P0 H
  635. BOOL bFirstChar=TRUE;
    , q7 d  m. Y1 c) }+ c! Q6 ~/ R* g

  636. , `# b) F$ ~: T. {( Y
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    2 O: }/ e" l$ T3 O& Q3 B% \
  638. {6 P7 c" V; `% d0 J3 @- i
  639.         // TODO: Add your specialized code here and/or call the base class4 T. ?3 ^* ^2 a9 d
  640.   switch(dwProgramState)
    4 f1 t, M# d( s1 G$ U+ h
  641.   {2 W/ g; j4 m/ f" o) |4 U
  642.   case AP_NOTHING:
    , k) L& ]: z, [
  643.     switch(dwStartUpSteps)
    + r; `+ N7 ]' e- s7 a8 o
  644.     {% D- J; P7 z9 \1 ~/ z  V1 r7 @2 x( A. {
  645.     case 1:  `% C+ z$ b7 K. Y6 G* q
  646.       {
    ( ]5 ], N, b$ y, d- a
  647.         int i;
    % ], ^. A2 y+ X0 u
  648.         CDC *pCDC=dlg->GetDC();4 _' O* n9 Y( t: I, N; V/ w
  649.         HDC hdcwnd=pCDC->m_hDC;. a3 f0 H% C% \* ]- j
  650. //        Graphics graphics(hdcwnd);" \5 }  g) N- _5 M2 u) R4 W
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");. I& \) [# m, k  r
  652. //        INT iWidth=bitmap.GetWidth();
    ; V* v; h% w6 G& ^# {
  653. //        INT iHeight=bitmap.GetHeight();* h2 [5 T6 t8 K. ~# v0 _$ H1 I- C( E
  654. //        Color color,colorTemp;$ x. j+ N+ z" o. x% t8 i
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)" [' [$ k9 X* D% G
  656. //        {& |- {" S( C9 `- B- \+ s
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    * S' g% K' m8 K2 {
  658. //          {9 j+ F) f1 U$ ^3 R( |
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    , G7 ]3 Z# A) N
  660. //            colorTemp.SetValue(color.MakeARGB(
    & v, s" \% n- M7 E; {
  661. //              (BYTE)(255*iColumn/iWidth),8 g& ^( [/ n" y1 E9 h4 {
  662. //              color.GetRed(),$ T) A/ P2 p4 P% M
  663. //              color.GetGreen(),' Q& q  ~! Q$ i7 P' F, [
  664. //              color.GetBlue()));9 M% G7 {7 j# v. e5 F0 r) g" k
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);: t# ]- Q+ s# X3 u, w( k" B) Z
  666. //          }
    : N# G* O! ?" {9 i  W6 p$ X/ Q
  667. //        }
    ) c1 P8 Z0 S. V- @  I
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ( m& I1 a9 s; P6 `% D  h. b7 @+ G
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: G$ f# B; v' h2 X/ o8 V
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");0 \: f4 O8 R3 J. j6 l6 N
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 f( C! n3 Z2 e5 o6 {6 g
  672.         for(i=0;i<240;i+=8)
    9 G# S2 j5 L/ v, r9 i) t1 B
  673.         {
    - u; v- p. {9 K: W" A+ M2 G
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' d: Y' K! _) U* T9 U) W" y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + U! t3 z* L* P8 O) s; i
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 o. \8 x+ Z/ a1 p
  677.           Sleep(33);8 e2 V+ N% S- p- H6 T2 a
  678.         }% u! a% U7 v+ t4 q
  679.         Sleep(1000);
    , \6 P0 u' ?3 B& @& d# i
  680.         for(i=240;i>0;i-=8)3 y5 ^' a" M, H9 l$ L$ c
  681.         {4 i5 z3 F/ ^5 d" r
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      |  g  d( X' @3 ^* W) ?
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. u; G- a0 }5 i- v5 l
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 i. V* S9 L, q$ q, c/ M0 b
  685.           Sleep(33);
    0 P( O3 E; `, J2 H; d+ I
  686.         }/ S8 p) l7 G+ y# \
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);( Q( H5 b- _1 c: R1 G
  688.         dlg->ReleaseDC(pCDC);: d+ `% ^9 T0 C: M/ q# c
  689.         DeleteDC(hdctar);
    ' v; \4 @* e" s. k% o
  690.         DeleteDC(hdcsrc);
    9 w8 s! m% t) C2 M2 O
  691.         DeleteDC(hdcorg);
    $ b- p  {2 q7 P; j& x
  692.       }
    ) I2 O! V2 T& C" Q
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ; T( Z  Q- _7 n. g+ f- h4 s& v
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ! G. w$ ]8 G, k3 n$ K9 a' \
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");& e! S# a7 j1 l1 \9 y
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");! k& J' e9 m) Z/ l7 m, G
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ G+ d$ h$ T  Y. U9 M+ q
  698.       if(!Dn.Connected())# \- D, H2 D  X' i: T" s7 Q- g: [
  699.       {0 ]3 e% U* d4 g4 C
  700.         dwTotalFiles=1;
    $ Q* [9 x; b, y8 s$ @  s5 f1 M  Y
  701.         dwDownLoaded=0;& Y$ N5 M7 v# A5 Z. d
  702.         bSilentStep=TRUE;2 K' @4 ]' ]. a/ p8 R$ M: @: ], `
  703.         bCompressed=FALSE;8 Q0 w, f, k7 n5 e/ R* v& d5 k# F
  704.         strExtLocal.Empty();
    , {( e/ V$ y5 V% Y, }( }
  705.         strFullName="readme.txt";2 O7 [( s0 u% ?
  706.         dwProgramState=AP_CONNECT;
    0 \% Z- q4 P% P. l
  707.       }
    8 ]- n6 a# R/ c) J$ A2 k8 `- O
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    : y/ _* H5 m3 Q) Y) c
  709.       dwStartUpSteps=2;( W. L; e. H! y! O" Q, m8 T
  710.       break;1 G5 t& w$ x( H" z) Q6 n" I
  711.     case 2:
    , |/ m' k+ w' m
  712.       {4 v1 \7 f: a' Z: a$ ~, ~
  713.         int iEOF;  ?* T1 ^  B3 |" y1 P
  714.         FILE *fp;" M; A6 e0 r% S. V5 m: h6 v/ A
  715.         char szString[512];
    * f0 p4 j" e/ L5 k" l
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ( X7 O( ~- V" |( k
  717.         if(fp)0 P: Q) U. W. d) ~4 H0 N3 F
  718.         {' ]  D' I9 ]3 O$ t0 a/ t
  719.           do
    + b! G/ G1 K' l
  720.           {
    4 ~" M, q  Z0 `
  721.             iEOF=fscanf(fp,"%s",szString);- H! M7 ]9 ~$ s# L
  722.             if(strlen(szString))" @- K2 S# K/ h* A6 O5 m
  723.             {
    + i4 @0 Y9 h0 p4 V! a6 l, {
  724.               if(bFirstChar)
    ( R  H* u" Q3 a% x- [! ~$ `3 o0 H
  725.               {
    , i* e7 b( N; Z3 e
  726.                 bFirstChar=FALSE;& `4 A5 K# i0 z6 o; a/ U  b
  727.                 bConnectIsBig5=FALSE;
    7 k2 a/ \4 N$ n& Z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ; y. z) f! Y8 D3 ]( a1 ^% a
  729.               }: _5 v, K7 f# E. i# X8 Q' |0 B9 \3 b3 c
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));$ ]6 {# \* N/ y; J& N5 H& ]8 n% K8 d! x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));( N, \! g4 V) _  V- d2 h: @+ Q
  732.               dlg->m_ListText.AddString(szString);
    3 F! z9 e# A5 y/ P: e- g
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 m. s/ a1 R! j
  734.               *szString=0;  q% w, n( s7 z7 h; y% E; y
  735.             }
    2 \. N1 t" H+ f$ t1 }) E  p! s2 @
  736.           } while(iEOF!=EOF);# q8 f. y* v# h- Z6 Q% L
  737.           fclose(fp);) r$ d3 Q5 Z; M, P
  738.           unlink(".\\DownLoad\\readme.txt");/ x( S" C" U  }. ~) r0 k" \9 J
  739.           dwStartUpSteps=3;
    - L" Z. d$ `5 J- ^$ L5 G% Q
  740.         }% B! S' F# Z* }* G" T$ z% d
  741.       }/ N: V6 `* \4 _
  742.       break;) d- W& W8 _. _
  743.     case 3:5 U$ ~" X  J( d& W
  744.       if(!Dn.Connected()): X( t) _# [3 E8 X& G% I# s) _) ~! Q
  745.       {
    * V* n. R  s4 }1 z- \; f
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);8 I. V3 Q- {; c) n
  747.         dwTotalFiles=1;
    : o/ r+ T/ ^. _: h5 w. N
  748.         dwDownLoaded=0;# h0 n/ i+ s4 D6 e$ A9 Q: K  S1 @
  749.         bSilentStep=TRUE;2 F* ?% f& ]- G* c
  750.         bCompressed=FALSE;- U/ f1 F( J/ y) d
  751.         strExtLocal.Empty();% D: z; K( j' O7 O0 i
  752.         strFullName="checkversion.txt";# |# S1 s+ f9 U+ M3 M' ?0 `
  753.         dwProgramState=AP_CONNECT;
    , B1 `6 `3 T" W. o" ^* y
  754.       }
    % s# ~) h& c: R: ]- j
  755.       dwStartUpSteps=4;8 ~( w! n' R; f
  756.       break;" v$ v5 E9 r8 V) i
  757.     case 4:
    / W- f# ~  Q/ L5 |1 N7 o7 i' p3 r
  758.       {
    2 p) G" y% J8 V
  759.         FILE *fp;
    4 M, b! X9 |2 R  Y6 ]
  760.         char szString1[128];4 N8 @4 A& w* e8 Z% _2 w
  761.         char szString2[128];
    3 x6 h3 o3 S0 U% _$ i2 L
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");* g. r, B% E3 s! b. B" ]
  763.         if(fp)+ k0 N+ N, j  C8 B
  764.         {! [7 F' [: I0 g% ]' f" F9 d
  765.           fscanf(fp,"%s",szString1);
    8 ^  w3 k0 e9 V0 }/ F/ }
  766.           fclose(fp);$ w$ z* @1 p6 A: I7 u' A
  767.           fCheckVersion=atof(szString1);. Z% {/ Q$ G- P! L7 g5 {' P
  768.           fp=fopen(".\\checkversion.dat","r");
    . S" q/ m  j- T( W% L& S
  769.           if(fp)
    4 K1 P& L; Z' Z& F0 ?% N& ?& V) i7 E8 O
  770.           {1 x4 r/ ]& Y% ~
  771.             fscanf(fp,"%s",szString2);
    9 x: [$ H# J/ L% b$ w# p; C# _7 G* M3 l& o
  772.             fclose(fp);
    2 _5 m& t* r0 n' l3 W* V
  773.             if(atof(szString1)!=atof(szString2))
    , n& T+ L9 R) {$ `' o" c
  774.             {
    7 c& W; m; v$ R8 w6 R
  775.               if(!Dn.Connected())
    ' H# J( K; J1 V: n# N5 r9 l
  776.               {
    $ z# l% S/ E3 v1 k- i- T% s: Y) g
  777.                 bFirstUpdate=TRUE;
    7 d" T& L' h  _9 `/ @
  778.                 dwTotalFiles=1;
    ! ^. n7 [2 T. `7 Q/ s: l" @) r& P
  779.                 dwDownLoaded=0;
    ( V& |* G$ |0 {  U
  780.                 bSilentStep=FALSE;# T4 o) Y; F5 n$ h
  781.                 bCompressed=TRUE;
    7 o4 A# W2 h2 |4 z3 Z) E
  782.                 strExtLocal=".\\DownLoad\";* t4 ^( }% z$ t* X
  783.                 strFullName="update.txt";
    1 o% k! y# _0 ~; l" I# K
  784.                 dwProgramState=AP_CONNECT;3 y, b4 y% i& ^) F+ j1 @; Z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, v& x5 [9 y6 O  q1 ]3 w4 {, O
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & ]. i* N) z  {5 {) ^. ]7 x
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - P1 C4 h) i4 ~! ?
  788. * _7 A. Z4 x* K, h+ {
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- s; ?' P% W7 d' a' w  W
  790.                 unlink(".\\DownLoad\\checkversion.txt");* A; O7 ^& p* `: g/ @8 Q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)5 c2 h/ E+ w$ k$ L
  792.                 {
    % X! g5 p$ o  K
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");$ m% K- }3 `- ]" d' c& n
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");. N2 N+ |8 u  f1 L
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");5 X, E$ z5 e6 i; y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# R  N% d$ q' c" z( v

  797. 1 H" ^4 T- h" I; b# e2 Q0 T1 ?
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");+ u' j% f0 G# q5 f+ P0 c, L
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - _4 Y: V3 J1 @+ b
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");, L# n$ t5 E) c+ e8 u" L  F
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + L: j( z: R' d
  802.                 }* P. X) Y2 [# j$ t- ]5 ]
  803.                 dwStartUpSteps=5;
    7 u4 T: v- E4 K7 V; k! d$ T3 s
  804.               }, _# O) R7 l* k/ X! k  G8 L3 q
  805.             }! m9 \4 }- @$ i2 i% U
  806.             else2 {/ `! K1 g3 A2 I4 T
  807.             {' D* P" V! H9 M  i' Z3 z
  808.               unlink(".\\DownLoad\\checkversion.txt");
    / w1 W" w, @2 `. ^, o" Z) Q7 m
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ) T! \5 f, L3 l
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ) k- c- D, Q2 x
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");0 o. n( v9 h5 z0 p3 X' S2 }

  812. 9 t5 W7 V; e  P5 k- j1 `7 [8 T
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, H# O& D3 V: l+ \5 D
  814.               dwStartUpSteps=99;% q3 }% ^1 g) D6 N# p) M7 P
  815.               bFinishUpdated=TRUE;* Q4 p# }3 ]3 i1 m; ?' S( d
  816.               bCanUpdate=TRUE;8 e' C5 j( b3 x7 i7 T
  817.             }% e; R% B  c0 G
  818.           }
    - x5 U, ~' G$ b" {9 R3 k
  819.           else& o8 j( N0 L4 C* S8 F0 e
  820.           {
    " G" B, }" R. K5 P) J  D0 L! m$ {& l
  821.             if(!Dn.Connected())
    * [' T2 [! f7 ]" A( X1 i
  822.             {8 d' y! k. B3 [- h$ L7 {% o; u
  823.               bFirstUpdate=TRUE;* d! Q6 a) f1 Q
  824.               dwTotalFiles=1;0 Y+ \5 N: h, R, f$ E9 c
  825.               dwDownLoaded=0;
    . y) d4 R; X5 p& k# q2 K$ D+ h
  826.               bSilentStep=FALSE;
    $ w$ z( G5 K2 ~7 |" X% ]
  827.               bCompressed=TRUE;7 V2 h# Z  A' O9 `
  828.               strExtLocal=".\\DownLoad\";
    : T2 K3 Q2 {. B7 O0 |; l+ J
  829.               strFullName="update.txt";
    0 B6 _, |4 ]/ I
  830.               dwProgramState=AP_CONNECT;: P/ Y" i5 g9 ?( Y" X
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % [& k- @/ \" ]* U  e" ?! ?1 _/ |
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 j3 b# Z+ `; U7 P3 Q3 ]* b
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 e* c) l; ]2 ~; q; H7 ], e
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 k% p+ T. i, ~" A, B$ F
  835.               unlink(".\\DownLoad\\checkversion.txt");2 F2 a7 K# n' I! X' K, y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    # H1 c; [6 Q# I- p  X6 C! T5 p% K2 h
  837.               {+ M$ D; N, w5 z1 j8 L9 ?
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    6 C) v( J  K! {/ g9 g: g- a6 E
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    : J: ^& O" D5 f0 Q: F0 h9 u+ y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    1 I: n. M2 z- g' k' A4 {
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" X5 R8 l9 Z9 z: _" t
  842.                 6 D: p3 T# t+ V5 |. A- ?" V; H
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . ^" t/ x* n, O5 ]! g9 |
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 y& H. L$ X' O6 ]4 |/ {' A
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    * b  r1 |8 o& F7 f
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( F$ R8 Y6 y! l3 D# d
  847.               }" D7 i5 y# s9 D4 t* ]0 J# Z9 I5 Z
  848.               dwStartUpSteps=5;1 i1 H" l+ t: d0 R% p
  849.             }3 M/ z' K- z8 z5 N1 r/ a5 \9 D
  850.           }4 u/ ]: q- k* }4 B5 Q
  851.         }2 H# w+ B/ }9 t; p  z9 [7 u
  852.         else* g' t" d( A- J/ |5 k
  853.         {% W( j6 x, d; v3 B" u( y
  854.           dwStartUpSteps=3;
    4 N0 w/ t- R; k5 ^
  855.         }
    2 c- p/ j& z2 f8 p
  856.       }4 ?$ c3 w7 o  A$ c
  857.       break;' X$ Z% ~' @/ f: K' o' I
  858.     case 5:+ \( J- p. ]0 F4 }
  859.       {
    - X3 K% z! l( r# Y" q5 `7 h
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    7 u1 D& w: c- ~- J# G  j, x% q( Q% e6 v* Y
  861.         {+ {- Z' V; M) c* {3 ~- l' L
  862.           int opt_overwrite=1;
    0 d: G/ R8 s3 H, w  ^& y
  863.           int opt_do_extract_withoutpath=0;6 m. I4 A; Z& u
  864.           unzFile uf=NULL;
    * {* b( w  [) L% `: y. L, m- c
  865. 9 W7 S; {& D: B" o# f9 K$ O
  866.           uf=unzOpen("Wsa.zip");
    2 R1 Y  A7 E) b  S4 C& M
  867.           if(uf)+ D; N# k$ a* J& y
  868.           {
    . h1 f7 g! k" d
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 u' |" t- Z) V6 w9 d. ~6 o
  870.             unzClose(uf);
    : |! O; ?3 ^" q! w- l
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    + _0 c0 s; m) W' t/ c( ^
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    6 I/ T/ b* K& R1 W$ N
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    / y8 b3 {( I! o- Z' H- v; x
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! ^% |  r4 r, \3 j9 ?- F7 P" J
  875.           }2 l* y2 a3 q3 |6 \  Y2 K' w. W
  876.           DeleteFile("Wsa.zip" );, l2 ^3 r7 Y/ F0 L# d9 G( ?, E
  877.         }
    1 b9 ?8 E" y0 C6 n

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

7 O  F( ?$ f2 N/ E& J+ @. m

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-7 10:50

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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