CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
# Y- `4 X' {3 o- O( H: ]
  1. / RevApp.cpp : Defines the class behaviors for the application.3 f6 P% P0 E1 `) H# h
  2. /// F; B: X3 y. P8 n

  3. - O9 c$ U; m7 s, w; w
  4. #include "stdafx.h"
    4 I8 j9 ~2 R( b4 z, v: _

  5. / V/ I0 d! {2 N! _* U8 `/ y
  6. //#define UNICODE
    + ^; f( a2 ]; w/ e$ g
  7. //#include <gdiplus.h>
    ) h" M* C& A- I5 H( G
  8. //using namespace Gdiplus;
    6 b, V& V# K; w& r* Q

  9. % f  a: M' ?, q; v; o! S; w
  10. #include "RevApp.h"- @" H$ n* `3 F# I& F
  11. #include "RevAppDlg.h"
    & k/ t6 z# H* }& }
  12. ( J) d6 b8 z0 j8 [+ ]& m  K
  13. #pragma warning(disable:4786)4 g* t& E* ?4 t* N$ b" \
  14. #include <map>/ o% E+ `* S$ Y
  15. #include <list>+ d+ |3 @) g+ S0 s6 u% b/ ^
  16. #include <direct.h>
    ( O3 M+ \. J3 w7 U" Z" I& x
  17. + x  l5 _( I! M8 U% B9 m
  18. #ifdef _DEBUG
    ) D0 g: x( v$ P& D; g
  19. #define new DEBUG_NEW! n$ {6 P" I5 y
  20. #undef THIS_FILE
    8 c5 v/ L5 J0 v; p
  21. static char THIS_FILE[] = __FILE__;
    5 L3 p/ ?, C8 ]" W8 t# n5 a5 t
  22. #endif: L' j2 G  u: ]" Q6 w8 T
  23. #include "SkinResDef.h"6 E- Y2 e$ M. k- g
  24. #include "ChangeBG.h"! R# e# w9 y$ T' H$ Q
  25. #include "AFXINET.H"
    3 }* _) R* z3 D5 c
  26. 5 J' B. p  Y7 G
  27. #define TRADITIONAL_CHINESE 0
    5 ?7 g  s6 V4 j/ g
  28. #define SIMPLIFY_CHINESE 1
    ! N& U. Y& S9 p- M
  29. #define ENGLISH 2
    , c/ i7 W) A: M7 p$ ]: ?
  30. int m_iLanguage = ENGLISH;
    4 {  T& _, G, d5 q  v& Q/ @) U+ X
  31. /////////////////////////////////////////////////////////////////////////////
    5 V+ z- J$ `9 z
  32. // CRevAppApp2 d) n9 H# I: u; N* ~7 T

  33. 8 n+ ?9 s9 }$ ?) C  G
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)* J/ D7 s  K2 j1 f+ c
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    7 O+ \' j0 x6 N6 ^4 U5 m
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    * j0 O+ {( {8 k: h6 s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    + U& ^) ?6 d( p) q
  38.         //}}AFX_MSG
    6 \2 X2 s3 G/ T6 R$ W3 [; [
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp), o; \. d9 B2 @! c1 h. X& c
  40. END_MESSAGE_MAP()
    * q6 x1 l. Y/ m4 V
  41. ( O3 v' U/ z  d6 c$ x! B6 v
  42. /////////////////////////////////////////////////////////////////////////////. f2 p5 n9 W1 I- ]9 m3 R3 J
  43. // CRevAppApp construction
    * A; m# |4 h4 I

  44. 5 z# s1 J1 s/ A7 M
  45. CRevAppApp::CRevAppApp()9 Q% g; i, @0 {! s# [7 E
  46. {
    $ I/ ?% {( M7 E! o7 Z) T8 |) X! c
  47.         // TODO: add construction code here,
    7 f8 k5 d+ y4 t* R1 a% M% G
  48.         // Place all significant initialization in InitInstance
      G+ E; T8 Q, F. S9 u, X; e
  49.   bDisplayIsBig5=FALSE;
    / k4 [( F; \/ W& {3 U& T: i3 d
  50.   bRestartUpdater=FALSE;5 v0 [' A3 F8 C) c0 `
  51.   bFinishUpdated=FALSE;: F( w& h. c" V# z& k) J
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;, e% g2 T7 I4 R# y$ r  r8 r4 H
  53.   InitChangeDataBig52GBKS();
    ) T+ n" ]4 J0 @1 p
  54.   InitChangeDataGBKS2Big5();
    $ W; f% P+ I* ~% V2 N* W
  55.         //
    ) a  o5 O- ], M6 Y
  56.         bClickRunExe = FALSE;8 H8 D5 @9 I7 ~7 A, o
  57.         //9 {9 N! Z; c  G6 ?1 \# W& l
  58. }$ M/ I+ i- Q# o% ?: g

  59. 0 v: y! i! J) P, |, p
  60. CRevAppApp::~CRevAppApp()7 _+ ^( b2 j8 r" c: w5 e
  61. {
    : a0 D0 E2 X' C# P
  62.         // TODO: add construction code here,
    0 ^. Q0 f% T8 ~
  63.         // Place all significant initialization in InitInstance  I+ F7 |6 G5 Z
  64.   EndChangeData();0 D8 w5 Y* v5 _# ^% I1 K! f
  65. }
    ! U0 V. |# C/ H- N7 n4 g
  66. : \! \& O: P8 x
  67. /////////////////////////////////////////////////////////////////////////////0 c' ^0 v( b/ b3 ~# P5 R. b
  68. // The one and only CRevAppApp object+ |1 _$ g2 {) Y4 J1 E7 {" p
  69. + \+ ~( J; w+ B/ M" Y$ q
  70. CRevAppApp theApp;0 G0 ?5 x, i7 |
  71. 0 v8 x0 A6 B: `3 ^/ [. J
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    5 ]# h9 j6 N, n+ i
  73. {* f$ K+ b/ f* F
  74.   int iEOF=0;
    9 j+ }% J6 s1 N: E; ?6 x7 D- s
  75.   char szTempName[MAX_PATH];
    2 B4 E4 E6 O) T4 B5 q3 n! l$ I
  76.   *szFileName=0;
    ' A# r" d5 r/ S. E& A2 u
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( _: j% w5 e6 |9 {, p
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')+ R& E  U/ K8 q2 o* L" U
  79.   {5 h: X) G9 s2 ?6 `) p8 O
  80.     strcpy(szFileName,&szTempName[1]);2 f& L; e# Q' j2 |3 A
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)/ z( H9 ]" L! {
  82.     {$ m7 Q, j; g) \- @* o
  83.       iEOF=fscanf(fp,"%s",szTempName);
    0 A2 v/ i, w5 X. D+ S/ }
  84.       strcat(szFileName," ");/ Z4 w8 z+ M) ~# }3 B( W+ M
  85.       strcat(szFileName,szTempName);$ |+ f1 D( @# s$ Z) _
  86.     }
    5 i: {, L- T, s. P* s1 t
  87.     if(strlen(szFileName)>=1)4 w) _5 O) j+ |
  88.     {  N) C% F3 D# ]
  89.       szFileName[strlen(szFileName)-1]=0;
    5 h% U* V. v" k* [3 H. _9 q* @
  90.     }1 F/ j' f$ L5 l) P& ~7 Q
  91.   }8 ?# R) \+ F0 P, q( X
  92.   return szFileName;9 L$ G* Z1 _% U, z" W! h
  93. }
    . h4 l3 B; Q% E, A

  94. ( b4 E% E2 L+ W  x  g- N0 t5 j
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    $ e4 w3 u& n) i% e2 ~1 n& O
  96. {. t$ n& e! e6 K6 X4 c+ A. S
  97.   FILE *fp;+ [, h* \1 P7 f  G# ]8 N0 C
  98.   char *key=NULL;8 s/ m. |6 V, C  T
  99.   char version[MAX_PATH];
    4 _" F5 U: g0 ~8 Z
  100.   LPUPDATEFILE file,olds;
    ) }0 p" _; L* m) Y; Z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    + ~" z, J0 u# y# D
  102. $ ^, E" a0 Z( c% u) Q; A
  103.   UpdateList.clear();+ o8 `7 G% _! c6 E
  104.   UpdateFile.clear();
    4 u* }; v% {' x4 `2 J, J3 s' S
  105.   if(GetFileAttributes(filename)==-1) return false;
    ! D" G$ g" S7 [1 c+ r
  106.   if(!(fp=fopen(filename,"r"))) return false;0 \' D2 [  `% m9 t8 ^
  107.   fscanf(fp,"%s",version);
    # D1 B# K# f# G  P. j
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }5 c" ?6 J, E! O" g
  109.   while(fscanf(fp,"%s",version)!=EOF)
    & {3 i4 U* F3 ?& B
  110.   {
    & D- h( N9 |! r1 x
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" }; n5 X& e9 ~8 z$ F- U) Q
  112.     fscanf(fp,"%s",file->path);( A" J# F% E( Q+ |8 X" j) m
  113.     ReadFileNames(fp,file->file);: b1 h7 y1 i2 ^% M0 M8 h# o8 V
  114.     strcpy(file->full,".");0 K2 j/ K4 V. ]7 ]
  115.     strcat(file->full,file->path);5 [. C7 N% Z  o, e' H6 J$ ?0 j2 s5 [* d6 l& X
  116.     strcat(file->full,file->file);+ Y( L4 Y5 ~/ Q( M( w
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    + e+ Q: b+ }3 Q0 Z
  118.     {# ^$ \. l5 g. [6 P; `- g' d
  119.       file->vers=(float)atof(version);( k7 v9 a6 Z6 c: p2 G* \
  120.       UpdateList.push_back(file->full);
    ( ~. w  t; E$ j2 x6 b$ u
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));# L' V9 x& ^* {# Q- L# j
  122.     }
    ' c$ b; q) o1 H  H- B. C% N
  123.     else
    , r& N4 s9 y( O  w" N2 t
  124.     {( o, T' F5 g8 n9 w
  125.       olds=(*p).second;
    ' q0 c- s1 R/ q3 k
  126.       if(olds->vers<(float)atof(version))4 I) [) J4 }- ?$ B; \/ _
  127.       {# {& t5 n8 q0 e+ l" U) S
  128.         olds->vers=(float)atof(version);
      C$ V- [6 m8 I) T+ K
  129.       }, x* O' o. F: A
  130.       free(file);
    % @' G& d$ F$ ?2 x+ O: M
  131.     }
    ! X9 q+ P/ H6 A, J
  132.   }  L9 c# [% X7 ^2 K# n) q# `
  133.   fclose(fp);
    3 g6 O! q" I% r* B8 r6 ^
  134.   return true;2 |; [4 I; ]  W8 [3 ^% {
  135. }% z/ F% n# ^2 t

  136. 3 N0 m. n2 \' F, O4 f- f1 V
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    # ~( h) ^2 {- n* A% T  f
  138. {" f' W2 Z) I$ @7 K0 x. z7 r+ n# T4 W. ~$ M
  139.   TCHAR  szFull[MAX_PATH];
    6 w  K% l1 U0 O, o  ]$ `
  140.   TCHAR *token,*inter;5 p7 z0 s7 H: L
  141.   *szPath=0;
    , H- }0 A: i$ J; B, y. x5 C
  142.   strcpy(szFull,szFullPath);4 q  e+ `+ ?, r/ v5 \# L
  143.   token=strtok(szFull,"\\/");; @6 p8 O% S7 z5 b3 ]) @# J1 [
  144.   inter=token;3 b9 q6 a: x# _& y" g$ R  @: W5 o) T6 i6 P
  145.   while(token=strtok(NULL,"\\/"))
    & v0 \2 d" o2 z3 c9 A1 @) z
  146.   {/ [* |  }" b+ ~7 h* g7 n) Q+ H
  147.     strcat(szPath,inter);% k" Y0 h7 h; A: i6 A
  148.     strcat(szPath,"\");
    1 Q: Y* E: F1 A; B( m
  149.     inter=token;1 O- m' W* g- c: {, j
  150.   }
    9 K' g6 T3 x% @' y5 ^4 e
  151.   return strlen(szPath);
    ) s2 E* w9 G4 k
  152. }0 K! C' i9 B! v9 h8 P! v' A

  153. 5 @/ U6 X$ P" B5 N% [+ c
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 i' l+ e2 `0 v$ S" ]
  155. {
    . w9 o2 O' G" ?5 |+ A# [3 g5 P& L
  156.   DWORD attrib=GetFileAttributes(Target);
    & t/ D$ n& Z$ o, W% S; A
  157.   if(attrib!=-1), W$ x9 r- V) F
  158.   {( u" O) Y( n4 \5 k. i  w
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    # l; }% }; L* F" ^% _( o' l
  160.     {
    . f+ \: l6 Y9 P. C1 U  B
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);3 S- ^1 Z% M, m
  162.       SetFileAttributes(Target,attrib);' n0 d; Y, C$ {9 e9 ~9 `* l
  163.     }
    % ]6 l5 J  p! r" U, w
  164.   }1 J0 q  ?' b* g; g# e
  165.   CopyFile(Source,Target,Erase);
    : i. N/ N, I/ E! l$ j9 ^
  166. }9 M+ o/ m8 ?' ~' a
  167. / x: j8 W/ \# L& A, O; ]
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    7 i) t: ]0 g0 Z9 w# Y- I
  169. {  o- F) i2 ?0 A) q( M$ q- S% I
  170.      FILE *fp;9 E$ \. Y8 G1 L: |+ _, I; H
  171.      char  szBuffer[8192];  t0 Y( m2 b1 y5 w
  172.   va_list  argptr;8 g- j4 m8 l, S: _' b

  173. 0 A3 [- I: U; L
  174.         va_start(argptr,message);
    , q5 w, c" d& M/ ~
  175.         vsprintf(szBuffer,message,argptr);
    ! D3 ?" e4 a; j7 Q& X1 P0 \
  176.         va_end(argptr);
    7 Z5 U3 m5 n' t' y) N
  177.   fp=fopen(FileName,"a");
    ' j- B; M& d7 D
  178.   if(fp)1 B# b0 l$ e/ Q6 i, a& h9 y
  179.   {
    1 w( u  M( y9 q
  180.     fprintf(fp,szBuffer);7 b! ^( o% D6 W3 U# o
  181.     fclose(fp);1 P/ i  `$ N( h6 {2 l- r$ T
  182.           _flushall();
    1 D! O# ~% e, X8 d
  183.   }
    / O; i: c; \6 M5 O
  184. }4 m! j' z8 ?# W
  185. 8 H! X, p7 c# M' K
  186. BOOL CRevAppApp::Fclearf(char *FileName): e' W, r* ]" H
  187. {
    5 [- `) ]+ w  d# H; w- ?2 `
  188.      FILE *fp;: j  G* Y8 Y  h; ^3 |- }
  189.     DWORD  attrib;
    - R/ g& l# j7 P, R4 ~# Q
  190.   attrib=GetFileAttributes(FileName);
    : ?4 [# d  z8 N
  191.   if(attrib!=-1)1 g3 H+ d8 B5 e, `0 ?1 E; \, h
  192.   {' L" l9 A4 H) }; O3 `, h
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ' K3 r+ ^* u% E6 [  N0 C; s
  194.     if(!SetFileAttributes(FileName,attrib))
    0 h1 O! @8 p$ D2 g5 Q
  195.     {
    + p$ @* a8 U2 A; E4 C3 ?/ {' x& m
  196.       return FALSE;
    , t8 R: _& j9 W
  197.     }" ?& C% @1 q# z# Y6 O, b7 D: B  g
  198.   }' ^3 W2 |6 T: ^0 Q( k- v
  199.   fp=fopen(FileName,"wb");
    ( m2 U( t1 W8 v# Y3 \2 X2 z
  200.   if(fp)$ j2 ?+ ~. X0 C( W
  201.   {: M( O9 y0 t6 z! i
  202.     fclose(fp);& P9 B7 V, s) d& C: u, e
  203.   }
    1 _5 c7 Y2 S7 ^2 o
  204.   return TRUE;
    : Z4 k) H- B8 M: v, c
  205. }
    , S2 Y0 o0 \' a2 w

  206. & `0 A; v5 [1 Q. a4 Y8 J/ W
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    4 H' ?: S5 g: x6 E5 |! j. }
  208. {
    - k* [' I6 I' w$ a+ T
  209.   char filename[MAX_PATH];, n6 w  E' F6 @' z" G
  210.   LPUPDATEFILE file,olds;
    ( r+ K5 F- U( K7 `- H2 \% B
  211.   std::map<int,CString>::iterator i;
    % m. I: T  S0 X4 P( K/ I
  212.   std::map<CString,LPUPDATEFILE>::iterator p;6 h1 i/ B' s1 @. L5 T/ ?( @5 |
  213.   std::list<CString>::iterator l;
    3 h  Z& y2 T/ g1 o. C+ ]' R6 n7 [
  214. 4 ?- l' z1 T! J8 u" t9 q
  215.   if(bFirstUpdate)
    7 D; o" g3 ~* A/ p! G
  216.   {
    5 t0 T% [- B* U1 D4 J0 B
  217.     dwCurrFile=0;
    $ v0 m; T2 G/ b
  218.     bFirstUpdate=FALSE;
    ; m  m- n4 I9 R- O; v* e) Z8 g
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! k$ _- ^& ?3 o: I9 v; p7 s
  220.     {* n) D" K* a8 ]. r" Q. g/ n
  221.       dwTotalFiles=UpdateLocal.size();3 ?5 `$ l, ]6 Z! S
  222.       dwDownLoaded=0;
    % e5 t1 o+ G0 T8 x3 j6 h" S
  223.       bSilentStep=FALSE;/ Q$ I) F& U4 q' y
  224.       bCompressed=TRUE;
    & O+ K9 O" D* w: N$ V& z- Z
  225.       strExtLocal.Empty();! k4 }) [* y) J) s
  226.       strFullName=(*i).second;2 g3 p9 D3 {& B& Z- G9 ~2 I
  227.       dwProgramState=AP_CONNECT;
    & I0 t; W/ o6 p+ H7 S
  228.       return TRUE;2 @2 c5 x' \, }: {) ~4 ]- h
  229.     }7 K4 Q( V; O2 z: ^
  230.   }: b9 W, L% F: f3 o0 h( ~7 H
  231.   else if(bRestartUpdater==FALSE)
    - H; W, q+ E6 {7 ?7 V) C! A
  232.   {
    ) t& I0 G! a% U7 x0 L8 A- ^
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    4 U4 j' M1 W) E0 q
  234.     {. M& |% t0 j% }; q. D+ a( I
  235.       file=(*p).second;; h6 ]0 M1 S; p2 y2 z7 |
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()); s4 H3 M/ s& T' O
  237.       {
    7 g; P( e) u! A3 A
  238.         olds=(*p).second;) z- l$ e2 v- U0 Y# K+ m  S
  239.         olds->vers=file->vers;
    ; a# D; u4 c1 J4 a3 [/ f3 q
  240.       }5 s- i9 m" d, \7 T  {
  241.       else
    ) f1 V5 ]- m( y2 U5 r6 n$ o
  242.       {
    - S2 K3 a4 a0 G+ ?, i  y4 d
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 D/ H& M2 n- r3 _: Y' ?4 h8 m
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ( X& O! V; d7 e: Z) S* L+ d" M- ?
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));. v$ A  a* `5 s3 B9 }- n4 m, J( |
  246.       }4 Z5 c+ n8 _; Z2 Z+ r
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");$ E* ~4 ^1 T4 t3 P! ]+ r% b; E' q  Q
  248.       sprintf(filename,"(%s)",file->file);
    4 Q+ z! z% r8 W: |
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 G$ \% j6 f( }) ^1 B  l
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    : q! v2 P8 S. K6 L4 v
  251.     }
    , n3 O) r0 j+ _) W  L
  252.     dwCurrFile++;
    ! ^: \7 d1 W6 `' ]: B
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 y: U* ?) |) B; M( P5 k4 f! k! o
  254.     {- f/ R) Y( ]5 Y% H
  255.       bSilentStep=FALSE;( z9 a* ^( x8 d
  256.       bCompressed=TRUE;
    % f3 w' t+ a% G7 \/ E
  257.       strExtLocal.Empty();
    . {. d$ s! h( f" N4 F
  258.       strFullName=(*i).second;) V4 ^) i# O% c* f$ T
  259.       dwProgramState=AP_CONNECT;  w0 s2 h. \% f. M% U  T7 D
  260.       return TRUE;" O$ h9 [+ \7 G7 ^8 E6 @
  261.     }3 P2 u1 X1 }# ?2 s: \
  262.     if(!bRestartUpdater)
    9 X9 L9 |2 e) ]2 v7 h) V1 {
  263.     {( k/ i5 i, h" P3 [% C; G3 D/ z0 U
  264.       int iCurrSize,iFileSize;
    * V; e- ^7 ^+ H8 ^
  265.       iCurrSize=0;4 p2 O* G' {* @9 T3 R9 |
  266.       iFileSize=UpdateList2.size();6 B" {# {( P" B' u/ j5 k! V8 x
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");  L0 w" G) H( D- v
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    . N/ p3 j$ g7 c( f+ w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");+ m$ w' n& \8 `2 D8 ?$ E
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - L  ^( z/ ~& m. L
  271.       Fclearf(".\\update.dat");
    % ]! k; w. w& `; J$ |
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ! e+ @  t- ?* K* g, c
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) T7 O: T+ U5 \, _# U7 m, U
  274.       {
    0 s4 }4 r$ k, E5 w3 H  b8 F6 U
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    5 H* D% C  R6 Q. t' s
  276.         {' k+ ]- w. d7 D' V
  277.           file=(*p).second;$ `( \6 h& S  j) `8 B
  278.           sprintf(filename,"(%s)",file->file);
    9 j5 o  x& ~( s8 F" y3 q7 |( d
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 u  t* h, [1 }+ G1 X8 G6 L
  280.           iCurrSize++;
    . N2 h/ j0 h; n" m7 e
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));( T/ D4 X7 {+ X" z  t* Q6 L: Z' U( L2 @
  282.         }
    . L6 p: n7 h# _5 n( n
  283.       }' Q8 f9 l. A' U# i) p& P) d
  284.       unlink(".\\update.txt");
    . C/ |% P( S/ ]* i
  285.       unlink(".\\update.tmp");
      n. ]  f7 |9 H3 U" O5 c
  286.       Fclearf(".\\checkversion.dat");3 A* D* U0 d) P- Q! h7 ]
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    % c0 d6 E7 Z: C+ }
  288.       if(UpdateLocal.size())
      m# X, E( A- C0 V
  289.       {9 a( s& h9 ?3 d6 E/ n. q; R2 ]
  290.         UpdateLocal.clear();
    + {7 E6 J  N& `2 f+ |0 G, l" Z
  291.       }: F) j* Z( ~4 \$ F! j9 Y, {1 T
  292.       if(UpdateFile3.size())3 K: y5 x$ ]/ @$ C/ P
  293.       {
    - S9 B2 @( t3 t% s. J( [4 g8 z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * G+ \, J4 n4 I( x, @" U
  295.         {
    3 F, F- y, W: H7 B3 O' f
  296.           file=(*p).second;- s  ?0 O6 D% h( `/ C" y
  297.           free(file);/ L+ B  r5 G# o7 o5 O2 @
  298.         }
    - a3 V  N  O) V' @0 D" h4 A5 x
  299.         UpdateFile3.clear();% b- q3 Q4 T: ^+ ?3 L3 W8 I6 r1 i
  300.         UpdateList3.clear();$ Q7 C, j* A; b- U3 Y
  301.       }
    9 Q3 }) h( O4 a% @0 P
  302.       if(UpdateFile2.size()): k! |6 M" U; L- C5 ^- [1 P! ?
  303.       {
    # F% `+ W/ q* J
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - ]" H1 }6 W/ I: I
  305.         {
    - K' \+ }/ Q, \; i2 B$ J
  306.           file=(*p).second;! x& y1 R* f/ }" ?# N
  307.           free(file);
    5 Q' }! [8 f" f: G! I) t- v
  308.         }. _' `4 @" T! H! w
  309.         UpdateFile2.clear();- P4 `; L! P/ ^1 O& A6 v
  310.         UpdateList2.clear();
    3 N; E- E- u2 g
  311.       }
    1 U. V, a# t. r+ F
  312.       if(UpdateFile1.size())/ `! q7 t  _, n
  313.       {
    % a& G+ c2 R  I4 h/ A/ U
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 `4 B' C) K2 I; |. ~2 u2 [
  315.         {
    ; N& [" L& t, P( V' B$ F' \
  316.           file=(*p).second;
    5 U7 }8 K6 P" c
  317.           free(file);
    9 |7 L! ~# Z+ w, l* f: L$ y4 r
  318.         }6 h, I& q1 D! h, n6 X
  319.         UpdateFile1.clear();
    7 e6 V+ c8 u3 |. o
  320.         UpdateList1.clear();) \' ]$ W! p+ p
  321.       }
    : A! N6 w* K1 m- M
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 u& M# A, t% s$ u
  323.     }
    + @) C& E2 V$ X& M' B6 O
  324.   }
    . w5 ]& {& T* C6 a  ]+ Z( |" F6 h
  325.   return FALSE;
    ; n# y6 H" x+ e' @
  326. }1 b! X- j2 {, q' Z, c/ A# k  ~

  327. ! A! W$ H  M9 D4 P' Y
  328. void CRevAppApp::ClearAll(void)/ E) S3 e; l3 z% E  c+ d
  329. {
    " h& O" G, R- f4 m( M
  330.   LPUPDATEFILE file;
    5 N& j7 V$ W, P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 A( v4 B; q- G3 g& [8 A
  332. 2 @; q, K: S( C6 a% c
  333.   if(UpdateLocal.size())# k  w8 ?4 x/ A" c4 o; Z6 b
  334.   {# P3 H5 o) l" e0 S" \3 {) a
  335.     UpdateLocal.clear();
    0 }$ S* d( U2 s: {/ H
  336.   }% L" m& j8 L# U+ e) ]4 {
  337.   if(UpdateFile3.size())
    " m% k: H' W/ f/ s: X" d
  338.   {
    ( v% f% Q0 P" B# d, @7 d
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . m( r0 O; ?, r; j* z- u; E
  340.     {
    . K5 u* n1 K! x: I$ `
  341.       file=(*p).second;4 w8 ?/ k8 {9 a7 K6 [
  342.       free(file);6 C, C1 c9 I1 B3 W5 y0 Y
  343.     }
    9 W+ k7 Q0 s5 A0 T
  344.     UpdateFile3.clear();- f/ B5 p3 ?/ }6 }. _& H& P
  345.     UpdateList3.clear();8 X( A: S. T5 {6 N& H) A" i/ G
  346.   }
    , H5 C( L  B# T& a3 [
  347.   if(UpdateFile2.size())& W' U& t% N  K: ?. k. A
  348.   {' x( e/ B  F1 p/ g* Y! n/ z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 g# r& ?7 c) X  V5 D! A: Y
  350.     {
    9 e: G. y, y5 N9 W. m
  351.       file=(*p).second;' b8 n( d  M- f3 y
  352.       free(file);
    " _( T8 @+ j, B
  353.     }2 Z. u7 \3 Y' j8 c& V5 S/ ^
  354.     UpdateFile2.clear();" {" B$ P( m& Q( }
  355.     UpdateList2.clear();+ m+ ], y' A9 b4 F2 G' S" x7 L: F' R
  356.   }
    . M3 A: N( I0 P' C* F2 ~; p1 N+ ]
  357.   if(UpdateFile1.size())# I1 i1 k5 s8 g4 q6 |# |
  358.   {
    $ C6 @) k& }9 Q, x' p
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 t% L* A1 e6 o' u% g, V. K
  360.     {
    + F) Z5 Y* z3 N/ Q6 s7 }  a, n% G' o
  361.       file=(*p).second;
    $ Q! k+ I4 |# I9 _  e" j! R* s
  362.       free(file);
    ) C- i, A* S( X' w& S, o/ `7 L* L
  363.     }
    4 H( q  U9 O+ ^/ S& ], f
  364.     UpdateFile1.clear();# B- s+ O  Z) I* C
  365.     UpdateList1.clear();2 U3 @5 G6 v) J! R# l5 K& F: u0 @# N
  366.   }
    % i8 `8 ^& _/ f4 ~
  367. }  
    4 `/ m' f8 ~2 z3 P# \# \" ^
  368.   
    ) W0 u( P) z" B; B, a! |7 W$ T
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    5 Q& V+ E$ w) B4 {
  370. {
    9 U- ^& d5 g* `8 U
  371.   int c;% Z* ^/ y- g0 t( \1 K* T" y# P
  372.   LPUPDATEFILE file1,file2;
    6 N8 ]4 i6 L' {3 t3 x& X: N  f
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;+ m* ^9 ]% G  k
  374.   std::list<CString>::iterator l;
    ( g" g4 q% }# b& G1 c! T' A8 n8 L" P

  375. 3 {4 P- H0 w4 C: w1 P
  376.   UpdateLocal.clear();" b) T% Q/ ^+ V) j7 h
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    : e  ~( ?9 W+ ~0 D3 F. J
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);; Y) B) Z; c7 a# {* k1 B
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    3 ?* j' Z- b2 I* Y/ M8 t. |
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);( n% r" O+ t' A& t/ s# q
  381.   if(UpdateFile3.size())/ s9 [  x: @7 L! d
  382.   {
    1 x/ y. X. s1 O" A) Q( }3 g: \( p3 Y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)/ N5 f. l8 X+ A" v3 I
  384.     {- B% `  r, J+ B2 K; P; f6 f9 X/ D
  385.       file2=(LPUPDATEFILE)(*i).second;- r2 [* k9 E$ }8 j6 G
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    & R/ X9 E; C% V% S6 [, e3 G" X/ t! E; X
  387.       {
    - N- u9 X3 L9 y' t
  388.         file1=(LPUPDATEFILE)(*p).second;( p( J. H  V6 `
  389.         file1->vers=file2->vers;
    ) P2 Z' z$ H7 e! I) @. _
  390.       }
    9 u; s  G' k. m- ]
  391.       else' W8 d% Q  C3 [$ X* m
  392.       {
    ' ]% ^/ ~* W) ?- s, Q" ]
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 l8 s+ V, j( _! R5 Y7 S* v5 h; W
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));1 F8 o/ A* @3 c! X4 l
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    . U* A/ L" }2 m/ O
  396.       }
    ' C% M- o: b- E' M& N2 ?
  397.     }
    9 B2 U& E7 W; O# p& \* T6 L) ?
  398.   }
    " d5 M  e( J- e- Z* F* J
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 Z( _. B2 N# }/ o
  400.   {) H' B, _  X; Z) K7 o! \* J7 w& }
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()). j6 Y! A( q9 M7 S8 Y) _+ E9 x) x& ~
  402.     {: \' q+ W4 S: p1 c! J' j9 {% i
  403.       file2=(LPUPDATEFILE)(*i).second;* C( K2 z! m# }! [
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( c/ m+ F3 w6 P2 P2 X& I5 t1 E
  405.       {7 u1 L6 D/ D# I
  406.         file1=(LPUPDATEFILE)(*p).second;
    & c" M9 s' {8 H1 S/ Q
  407.         if(file1->vers!=file2->vers)6 [! Q/ j4 l) u5 @
  408.         {( k- ~  a9 s. Q0 N$ v
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# v% L+ j/ V  E$ ?* T
  410.           c++;
    7 \, e9 O/ g$ w( D
  411.         }; z$ d3 e: u  S( j
  412.       }
    " h9 \7 h0 k" m) K$ m/ W. x
  413.       else
    7 `1 J; P$ p' l4 C, u
  414.       {6 f# i) ?# E6 Q/ F5 |6 a- l
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ H  Z0 y5 R4 h/ s" y2 u
  416.         c++;% o2 r1 M# p+ y2 o( M: W- Y
  417.       }$ M4 Z$ W# I. h) F( _
  418.     }
    : x! l- A5 T* B, ]7 q! r3 K2 q
  419.   }
      H2 M' L7 ?* N9 ~7 H
  420.   unlink(".\\DownLoad\\update.txt");
    ' t, q# {" ^+ u: P! U( E
  421.   if(UpdateLocal.size()) return TRUE;
    ' j% ~6 a' _) B" t5 c' B
  422.   else                   return FALSE;% l2 ~3 x9 g0 G
  423. }
    " ~- Y; n# h, u

  424. : n- w( X+ A6 h
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"9 z& v. V* E% G/ A0 N7 X
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"8 u+ u2 x( w0 f) [7 k: U9 x6 @8 \5 ?

  427. : M; c! X5 j% k4 W* E: j$ j
  428. - S" \4 \% c) ]9 b. |) w; x" j* C
  429. / F7 z- x* R7 U+ A/ q  L! E
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 _( m" f3 c9 Y- P- a! ?
  431. {
    4 y: w# H; e+ n+ V8 }9 {
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;7 }4 b+ U/ K4 T+ _, d1 ~" w) a" D
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 h( @& X) }+ E; y* B8 j4 l- T
  434.   {
    $ l9 v0 _' m+ [  r  W' X
  435.     char szLanguage[50];
    . X& ]1 f- G6 F
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; D2 Y0 H+ x4 B( D. L" A; X( L( q4 U
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  m% Z# k/ C/ J7 t" z
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! o8 j9 u# B0 x
  439.     else                                   m_iLanguage=ENGLISH;# E8 S# Z  L9 G+ P) ~, v* i
  440.     char szRegister[100];
    ; D5 C( b3 C- O5 w; t/ L
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ Q4 S# l0 q' a+ N' c# T! C: g
  442.     strRegsName=szRegister;1 p2 p' \7 C8 d9 R' E
  443.     char szPatchURL[100];% F! j8 ^/ u$ e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 g) J# u3 h' r7 ]. ?6 J6 ?& y. c
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 \" {) S! C' i! f" w
  446.   }
    4 O. G( g! u3 e
  447.   else1 C5 N8 M; [) ]2 O
  448.   {" |  E  f8 l& X2 m+ N: v
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  t, e& }/ Q6 g
  450.     strRegsName=DEFAULT_REG_URL;
    9 O4 Z$ W4 s; J2 A( C
  451.   }
    * C3 M% X! L9 M6 y  d
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    - H) \& t9 }: e% K% X; S
  453.   {
    * @. e  o! k2 k$ p8 r" r. J1 ?6 y
  454.     char szIP[50];
    1 @6 @! @7 P- i- d, F
  455.     char szDIR[300];
    & ~; X/ @) D4 M- A0 g1 T
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))* \8 ^' l: ?+ I+ Z" i! q5 E) I% N% f
  457.     {
    , Y# l$ U5 ]# k" s9 T8 |3 H- o
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ; w5 u9 o. V5 D7 L+ q2 d5 E
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");% M- ?! V5 t, q+ S5 v! }
  460.       strHostName=szIP;
    & g& c3 v; I6 l$ o7 z2 ~5 O
  461.       strHostPath.Format("/%s",szDIR);% Z% q! \: X4 s' W4 `
  462.     }' a' W+ r/ r9 I! w' x
  463.     else
    : N% k) \! N+ i& S0 {
  464.     {
    0 Q$ i7 H% M. ?
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 [& ^% w7 w  Q3 ^9 W3 j1 [- \! s7 U' V
  466.       {
    ) z( i/ M2 B5 r# t* l% e% V
  467.         char szLanguage[50];$ ]# M- A3 C  J; @( r
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 B- [/ \9 f$ A" u$ C
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* e$ {" @3 r0 E5 X  V9 X9 j' U
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;% G; l& i5 }/ ^7 E0 k
  471.         else                                   m_iLanguage=ENGLISH;
    - ?3 ~; h6 `9 C  v" n' J; d
  472.         char szRegister[100];
    ! l% R$ I2 k0 @3 M$ f! f  J
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    0 E5 d+ i2 a' T! T" J: _8 ?1 d9 a
  474.         strRegsName=szRegister;. I, f/ p6 E6 f4 l1 Z. R  U$ l
  475.         char szPatchURL[100];
    , {9 p+ R: H6 c2 |5 }
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , ?& l; Q# e+ U
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, q* D" i  Y1 G+ I' j# |
  478.       }& A: }6 @/ ?: p
  479.       else
    & P- t1 U/ M0 J
  480.       {
    & w# C+ W# }$ J2 ^$ ?
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . i2 p9 c- j! b! X- f3 Z* h
  482.         strRegsName=DEFAULT_REG_URL;5 x! _8 I" g; V# D& b8 D/ Y8 \
  483.       }+ N- V3 T- t  [2 Y8 z
  484.     }* m9 T  w9 \/ j! i0 d' z" i
  485.   }
    + u  x3 A: \; W. n. }4 ^% i
  486.   return true;+ J7 v4 |) p6 z
  487. }
    / J7 a. y9 t! g6 K$ X
  488. 1 z, S; n% J, k
  489. #include ".\ZLib\unzip.h"
    5 Z! M( D$ s" y4 ~. P
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 A" D+ C) |- {$ {+ C% W3 Y& I
  491. /////////////////////////////////////////////////////////////////////////////" U; `; a  W% [; C
  492. // CRevAppApp initialization) T: c$ h0 }! H8 O' L" e- X. y$ v

  493. % g3 o* T8 g$ l7 V8 s4 a* d3 ]
  494. BOOL CRevAppApp::InitInstance()
    ) {: f  e0 d1 X& ]3 @! V: q
  495. {2 o& d$ b& E5 C7 O; G* q1 R7 t
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , I4 Y3 O7 c  M. N! }( I* f* C4 S
  497. 0 N1 ~5 f( l  _0 F! G7 ]4 u
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    3 Z. l0 {6 R) L" W% \. b9 @( G+ U
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))( X" X/ S- l. R7 ~; [! m: R
  500.   {  z" ~# O" l# M# \8 f' B
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ( C+ d5 ^4 H1 a9 F2 d+ Z6 @+ C
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; Q/ ]# h& K. p5 T9 W" a
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    4 @7 I9 x, V4 L( I
  504.     {* \( f7 R$ Y1 i2 l5 E7 x/ m
  505.       strcpy(szPath,szPathTarget);
    8 ?4 d0 W! U# m4 V- j! Q  F5 t' v
  506.       SetCurrentDirectory(szPath);
    8 Y) c, N; i- p" o
  507.     }8 V( g  f5 a2 v. T, V, K0 Z
  508.   }( v8 E3 K+ k2 \1 B( r' V5 m+ U3 H  J
  509. #ifdef _DEBUG8 ?6 m+ {7 F1 r/ V' g' u
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 v# C4 e1 p% W, O& ~$ V5 ~/ T* V
  511. #else- Y6 y# b" s! F8 E0 d& c/ e& t
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ G9 {# U( ?3 M7 V' _
  513. #endif3 D5 O; I1 D9 ]4 _+ c6 h7 G" m
  514.   {
    " a2 p& _' ]( i/ m* y9 }4 L- [
  515.     char tempFileName[MAX_PATH];
    , L8 [* G0 b% ^7 {9 K+ s8 i
  516.     strcpy(tempFileName,szPathSource);
    9 n& |4 a' u. l! b( D
  517.     tempFileName[strlen(szPathSource)-12]=0;
    . ~! w2 Q# n" N% @
  518.     strcat(tempFileName,"\\$CSUpdate.exe");- }/ ?% h' F) n1 w. m
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);* Z/ M" s& p6 ^
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);; A" z0 z0 T' ^$ S) w
  521.     return TRUE;) A' P4 l) J' C2 Y/ G% |
  522.   }# z, o- w& g/ ~
  523.   // Nuke 0118: Delete run.exe
    3 t  O3 ^2 u; ^1 ^8 V+ l
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 N$ e5 T+ n. c, a; x1 s: ~4 M
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");- `$ z3 m0 A% w+ r4 y! k& j) ~
  526.   if(!ReadCfgFile("Config.ini"))+ G1 C$ D1 F. r8 L
  527.   {
    & v/ S, P; {1 E' m
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    7 K- _: q* O+ M1 p0 M
  529.     return TRUE;% s' I7 R8 B- C6 F$ ~1 Y* ~
  530.   }' P* ?- c0 |; G
  531.   HANDLE mutex;
    % y' m2 A& o- q6 w' t" J& L
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ( f% I" I5 O% T  e. g9 H
  533.   {+ \7 n0 W# [# U/ [5 \( h
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)* w" y- Z. _& [! i, n4 U$ F
  535.     {
    + w: t" E! \' W' y
  536.       CloseHandle(mutex);4 I/ K2 R' z6 J- [* E* z( w
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);+ C% \3 r9 s8 o9 ]: O+ E* L6 E
  538.       return TRUE;' G; `" S- D  Y7 p! j3 E/ q
  539.     }8 y, g; Q9 R9 }) n. p
  540.   }  $ n3 J9 {/ M, q, A: P3 v7 G9 ?- r- ~
  541.   CloseHandle(mutex);' |- l* I" D9 e

  542. . t' O7 y1 E3 Y( q- l1 D
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);! O% M; {$ ^/ ~* f" v, j# H

  544. 7 u- J0 H5 o# a' s. i3 D) D# U, x
  545.         AfxEnableControlContainer();7 y: L$ q6 `/ G
  546. 8 ]8 n4 r0 ~" K3 o6 b
  547.   bCanUpdate=FALSE;- v6 K% H5 B5 i; H) {' [. e$ V; [6 h
  548.   dwStartUpSteps=1;
    % {4 w7 T8 k/ r
  549.   dwProgramState=AP_NOTHING;4 p0 J, W5 U4 R# d3 V$ P7 m2 B9 Y
  550. ) O" G9 k* `) p7 g. o8 x
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);5 U7 @: b* }. t: n

  552. 4 L# j) n9 _& V+ n1 d
  553.         // Standard initialization
    * m4 C* T; q9 R7 f' z/ ^* O( i
  554.         // If you are not using these features and wish to reduce the size
    + ~  z; S) Y4 @/ k+ L1 ~7 o
  555.         //  of your final executable, you should remove from the following' L) _3 _! ?# Z$ q
  556.         //  the specific initialization routines you do not need.
    . N6 }. X+ q, |: l9 N3 c# S
  557. / b/ ~, y: V) I; {' b) `6 G* I- U
  558. #ifdef _AFXDLL. Y* ]  L& [7 ~" |* C
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    , \9 A, `& u9 G; E! Y0 z
  560. #else( Z5 P$ S3 M& k! v) h3 @9 r
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically2 M+ f+ H( _$ b7 G% h
  562. #endif
    ( q2 ~5 _+ [- h5 K

  563. + v9 e6 _, v: J" o( @9 D1 D/ t$ `" {
  564.   dlg=new CRevAppDlg;
    ( a3 T& p: g/ ~# c9 [3 e5 R8 R
  565.   dlg->Create(IDD_REVAPP_DIALOG);# s1 B' S* @/ H) ~
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    5 ?: A  f+ J/ H( }8 i! g5 l7 C
  567.   m_pMainWnd=dlg;
    6 [! o3 a5 V9 L" R7 i! M

  568. 4 G% z6 E9 N1 N" m/ R
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ) H8 ^& l/ U4 O7 r% G2 _
  570. 9 t0 _$ w! ^, g) g
  571. //  GdiplusStartupInput gdiplusStartupInput;
    & ~9 K9 H7 t6 K! X" D: g, R0 [  J
  572. //  ULONG_PTR gdiplusToken;
    : F' s  o- c9 A* r
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    . h6 i$ B6 }3 y* a9 J
  574. ) l8 k4 {; S" `& \  M1 D
  575. //        CRevAppDlg dlg;
    : o* t' Z# X7 D, M. ]) [
  576. //        int nResponse = dlg.DoModal();
    ; A, U( v- i7 \
  577. //        if (nResponse == IDOK)
    " x7 I8 i! o9 }. F4 t. n
  578. //        {
    ! |2 S& h, T9 B0 T
  579. //                // TODO: Place code here to handle when the dialog is
    & s, E7 B% Y2 p# p$ E6 ?
  580. //                //  dismissed with OK
    0 p1 n/ x% @/ H, ]2 b
  581. //        }' P' e) n/ y+ q& M* ]# ^. J
  582. //        else if (nResponse == IDCANCEL)
    $ G' G/ f9 f' y/ C# v# M( a
  583. //        {5 @6 V5 q) h2 \' A# I
  584. //                // TODO: Place code here to handle when the dialog is, G8 T5 r+ v0 r; N8 j$ K' z( x
  585. //                //  dismissed with Cancel) R/ d- X; T3 T7 _
  586. //        }$ C- B7 x2 `) G0 X
  587. 1 h$ k! Z. f0 q1 C+ r' d
  588.         // Since the dialog has been closed, return FALSE so that we exit the" j9 w6 b+ m" E
  589.         //  application, rather than start the application's message pump.5 @$ I" ~* ^2 q! p8 J* \/ ~- D
  590.         return TRUE;
    3 \5 V- h; j1 c6 w0 s( A# a
  591. }; [6 m+ P. R( m/ u" B

  592.   |+ x! S! K6 ]% [& Q6 u
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    # ~. s- h% ?2 Q& z
  594. {; V" D/ a* W' q! E
  595.   int i;# A- W' c2 z3 P8 V; X# ]! q0 a
  596.   char *szRet;
    ' A6 {! G* Q3 A7 Y* m( L, T) g8 p

  597. ! g/ D# j" r1 n" t
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    4 F# ]" u/ D+ E) A. k: y
  599.   if(sztoken)
    1 Q* U0 }; i- K' ]: x7 f
  600.   {, n, \, h" O. G: ~8 r
  601.     szRet=&sztoken[itoken];9 e; S/ Q" n5 W9 O0 Q5 \
  602.     while(sztoken[itoken])
    ! r" M3 n9 l& x5 }8 |
  603.     {7 K5 h) h" \/ _( ~, A
  604.       for(i=0;i<(int)strlen(token);i++)
      K# J$ \, }8 N; P# _. q6 K# w7 G
  605.       {% Y; _8 i2 a0 F4 l$ R7 I/ O
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])$ {' ~5 f; l: q$ i: Z. v
  607.         {
    / Z( r9 i6 K7 f/ ]
  608.           sztoken[itoken++]=0;
    , i3 l+ ?# C0 {* y% z7 t
  609.           sztoken[itoken++]=0;
    0 K9 t# ~/ l7 Q* n/ l  C" `# {$ m
  610.           return szRet;% B) H" k$ A  I: P
  611.         }4 s+ ]8 E  Q* j! {
  612.       }! E8 k' `6 `+ b
  613.       itoken++;* t8 j- m7 C& _' {9 O
  614.     }
    6 P" d6 d/ }1 U: r. V; W9 \$ U. m
  615.   }
    ) ?0 |8 O# u, w$ Q& n. ?2 u* f
  616.   return NULL;
    # M% m- R" D1 Q6 N, l
  617. }
      q" h, o$ z# g6 D

  618. $ x; i) G' g  m  ], R
  619. void ProcessProc(long Total,long Current)
    1 \" G0 V+ a2 v' T( [6 g
  620. {
    5 z+ k6 \; b' O( ^2 u! v2 B
  621.         MSG msg;. n8 M* [& M- m
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    6 g! D7 Y, N, C. m" i
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));) ?# |. b! @, e; Z& y+ m$ W5 J1 ^+ y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))) N6 C0 b5 a1 C2 v! O/ {
  625.         {
    * Z- U8 c" ^* l/ w" S6 C  E
  626.                 if(!GetMessage(&msg,NULL,0,0))
    % H2 Q7 S5 i: t9 F7 p" Z
  627.                 {7 O1 R- M0 |& l& w* d7 ]- _
  628.                         return;
    6 R+ s- {6 f# Z4 S% E
  629.                 }( |% H: s$ @+ [7 B& I. a
  630.                 TranslateMessage(&msg);/ G6 S1 ?; X( v8 ^" d) }
  631.                 DispatchMessage(&msg);3 }/ u+ O( _& u: s- A
  632.         }        , H  _9 `+ C2 \' `  k0 T
  633. }1 w7 u, a( B- [7 R, k( z4 }
  634. . G! H! x( m' G3 j1 v* _% e
  635. BOOL bFirstChar=TRUE;$ L9 Q8 T. B( L' ?. \( @) m

  636. ( H3 p5 ?9 Y8 ^/ g
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    % n1 t6 r) P  \
  638. {
    ( a8 F' [" q. P" `: F0 I
  639.         // TODO: Add your specialized code here and/or call the base class
    ' U/ ?  _+ X& \: x5 a& u
  640.   switch(dwProgramState)2 r- _4 y: b( W" o! p& z+ B/ q) W
  641.   {: {$ u+ I  D) X" g
  642.   case AP_NOTHING:
    " \! {9 _. D4 O' E6 _
  643.     switch(dwStartUpSteps)
    0 `3 N3 m. D1 B7 S/ A6 T1 h
  644.     {
    + Q* w' c; o2 j# z, I
  645.     case 1:
    7 l4 ~; c3 R9 [$ c: R5 z( M% U( C
  646.       {
    9 A( O2 I6 G1 F6 w$ o
  647.         int i;
    . O4 O+ i+ u% L7 }
  648.         CDC *pCDC=dlg->GetDC();
    " |4 L! D4 t3 R& X( z1 H: ?( s
  649.         HDC hdcwnd=pCDC->m_hDC;0 R% U4 D- y; P4 l
  650. //        Graphics graphics(hdcwnd);
    8 S# y/ n( @" N, ~
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");, H+ Y1 ~1 W* q/ l+ _/ o* d
  652. //        INT iWidth=bitmap.GetWidth();
    6 {6 T' I7 L0 `  ~; }
  653. //        INT iHeight=bitmap.GetHeight();
    0 v( ~/ Z; v, ^5 v- y
  654. //        Color color,colorTemp;  H2 C/ W. Y2 {; M' g  V
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)/ j) l: r* n+ A. z0 D2 w, s
  656. //        {
    : U8 s+ h- a& C
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ; \" i' z9 W* c1 \
  658. //          {
    ! I0 J! W2 ?3 |, P, P# |; n
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    + ~0 [8 W4 X% K0 O
  660. //            colorTemp.SetValue(color.MakeARGB(
    0 t5 r1 v( c1 T# d7 a; E
  661. //              (BYTE)(255*iColumn/iWidth),
    8 a3 d$ N5 D9 c! c/ r
  662. //              color.GetRed(),; A2 Q) k/ {' ^( h' @( G
  663. //              color.GetGreen(),+ R3 T. _6 S% j- G5 ^8 h
  664. //              color.GetBlue()));
    ) G4 s: j* ~0 ^! W6 f4 L; F" x! v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    6 t  ^) \4 _# _6 c
  666. //          }
    2 N2 j* T# n0 _+ A8 }
  667. //        }
    " s$ m# ~% }2 y" g0 k+ r% @' y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);3 z% R" u2 U4 C
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 J% h0 Y/ w/ A; [/ L* y0 A
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");% L- D  R9 t8 ~% ~4 w6 v* n- O& L
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 `, Q+ H7 l4 G! R  _
  672.         for(i=0;i<240;i+=8): N/ G* l) k- F, b5 W( ]! F
  673.         {: f6 a- R) G/ a' p' V/ i
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& [( }8 ^3 Q5 I" y7 z/ ]
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 _+ c$ Z( V/ Y8 d& K2 B
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( m) s3 j9 j4 U- d4 C
  677.           Sleep(33);
      `6 G5 q( u  ?7 j8 k2 |9 K
  678.         }
    + X# M3 S7 @  n
  679.         Sleep(1000);
    & q3 S) b; h& T  }3 P
  680.         for(i=240;i>0;i-=8)
    ' A% I' C0 O! f; P8 a; i
  681.         {( Y; n5 h" ]% r; Y. w7 P
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ A! w. @4 v5 |2 U5 o2 |4 D6 i
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 N7 Q! O% k4 \  P) G+ S+ c0 d) B9 g
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - P+ E& M( P$ o8 I: w& w5 ~1 ^: ~: B
  685.           Sleep(33);  ~0 u) ^4 t: Y
  686.         }3 [& V0 n6 w# Q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    % F. a6 u4 z, B" C
  688.         dlg->ReleaseDC(pCDC);
    & P6 U/ L7 K' p  N' X
  689.         DeleteDC(hdctar);
    . C4 D2 o4 g/ h( @8 v! f* w; @* Y* n
  690.         DeleteDC(hdcsrc);1 A6 r* ^( x2 A! O
  691.         DeleteDC(hdcorg);
    7 G1 v+ E9 T& A. P8 T6 X9 @
  692.       }  r8 y. ?4 c3 Q/ o" i- U$ i
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);0 j! s* d9 |8 U
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    $ `. u+ z$ Z& l) S
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");: d! H0 u  B2 u
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    " `, z0 p$ e% v- H3 P: s: T% p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) E/ @' F5 r- S/ c5 M
  698.       if(!Dn.Connected())& C5 H4 z9 n7 W# x
  699.       {
    # g* ]/ J+ E' [' N; |- i
  700.         dwTotalFiles=1;, Q& W8 w# r  Q
  701.         dwDownLoaded=0;
    4 F1 p+ c' W5 N% q! r3 O
  702.         bSilentStep=TRUE;
    ' ~! _( {, N3 q, G( |+ s
  703.         bCompressed=FALSE;
    & ?6 e8 P6 {9 [) M* b1 ?$ t
  704.         strExtLocal.Empty();) T$ o+ b* q. @* h2 Y" x
  705.         strFullName="readme.txt";
    ( q  ?% A5 D% X: p+ T4 g& h" r
  706.         dwProgramState=AP_CONNECT;
    6 a" I( q5 |3 C* X- U) G/ G
  707.       }% A' X5 S' E- T' R/ L! `
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();0 }0 m8 @2 c2 T
  709.       dwStartUpSteps=2;
    0 @& v' c7 e" B% N+ S# y6 O
  710.       break;
    - r& @! ]8 U8 N: B' }
  711.     case 2:
    . m! f2 m$ h# q1 c1 @9 j
  712.       {
    ) H( x+ S% l% }7 y% _) R
  713.         int iEOF;- I7 s0 W) t) f
  714.         FILE *fp;
    7 ]) K1 `- s& c$ }, ^, i
  715.         char szString[512];& g8 |, R$ J) L+ ]: q+ A" ]
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");/ u$ E* k/ q/ u0 l9 z- Y
  717.         if(fp)
    8 d+ C( A( f; j" x. D
  718.         {0 E' T% @& j4 W. p: R: Z, n
  719.           do
    - L/ h9 n- f) ?; M& C# }
  720.           {0 m4 q: H% v  P5 Y" l+ b
  721.             iEOF=fscanf(fp,"%s",szString);
    + s9 S. p; Q) L! [& x& _# H
  722.             if(strlen(szString))! g# Y# b  U! e' ?( v2 u5 l
  723.             {
    & o* p9 r$ {" o& S# O2 m2 M" l
  724.               if(bFirstChar)
    + w5 M' O. \4 P8 {
  725.               {- R' ]  T1 t+ x
  726.                 bFirstChar=FALSE;
    ! a' l( D3 Y& `
  727.                 bConnectIsBig5=FALSE;
    $ g  e0 i2 ]4 ]8 a! @# b4 P; X
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;- u) \/ z- V8 |# X! Q3 k3 n4 n
  729.               }
    , t4 y2 g7 w4 [* m& C% V
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 z; ?1 k# v' L
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    5 @9 T# [" r8 v; E
  732.               dlg->m_ListText.AddString(szString);* _' C% R& m% k$ m2 _
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; P% b+ x3 \3 A- u
  734.               *szString=0;
    ! I! Y5 J' F: b7 d" K  b! g
  735.             }
    7 a* b: W" s; A8 k- S2 ?4 T  ?
  736.           } while(iEOF!=EOF);, g7 M: E) Q% v. Q
  737.           fclose(fp);2 ~' \, v; @& [7 F+ I
  738.           unlink(".\\DownLoad\\readme.txt");* V+ h- e  L, f4 `! g- k
  739.           dwStartUpSteps=3;
    - K8 o7 v# U- [0 R. |
  740.         }
    ) O# h+ H0 m$ x8 N  m  _; E" {
  741.       }8 D5 K2 i& n) O8 @/ n
  742.       break;# l' V- [2 p& f+ Z
  743.     case 3:% n& Y9 s* ?- b
  744.       if(!Dn.Connected())
    " T* }* u9 X" `( H- h" u0 I
  745.       {! U5 n- T& W0 ~* f" K
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);2 v( {; h: Q: M. O5 `5 Z* f6 X" x
  747.         dwTotalFiles=1;
    : m8 s4 ], a- v5 E5 r
  748.         dwDownLoaded=0;
    ; T0 x2 ~# ?* \; k* I) U
  749.         bSilentStep=TRUE;
    & ]7 Q: I! e1 t' A3 V- r
  750.         bCompressed=FALSE;
      L; S7 N5 W3 A% [+ W; J; g) ]
  751.         strExtLocal.Empty();% E) m0 W# g4 ?/ ]8 M
  752.         strFullName="checkversion.txt";. x; B2 C. Z* M9 W. ]
  753.         dwProgramState=AP_CONNECT;4 |9 T' M  |) p- I/ V# d) b$ v: q
  754.       }8 P- x! O6 i* I% P
  755.       dwStartUpSteps=4;+ ]: W  a3 K- o% |8 N% I
  756.       break;; y' B$ z' D8 O, B
  757.     case 4:. Q* J  X/ H1 `+ ]
  758.       {
    1 S% B  y' O5 T1 C6 V
  759.         FILE *fp;3 ?! j: G1 \- n# Q8 S0 d
  760.         char szString1[128];
    1 E& t* V0 k* P3 W; `
  761.         char szString2[128];
    * W  e* Z7 N6 D8 H4 r% @0 z" h
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    9 e$ Q; q/ \& k) Q3 t
  763.         if(fp)
    ; g8 ]8 }. j+ _& p/ a0 h
  764.         {$ I' g# R$ R0 j* N. ~% ^
  765.           fscanf(fp,"%s",szString1);
    % ~% U+ e5 N! [, |( J
  766.           fclose(fp);( l& A% j' {: p/ O  G) ]! a( V% N
  767.           fCheckVersion=atof(szString1);; J+ i" Y4 \. e0 _, G# D
  768.           fp=fopen(".\\checkversion.dat","r");! N! H; n2 Q! w9 p' L- x
  769.           if(fp)
    3 I) E+ U+ k4 p1 X$ A+ L& x( \
  770.           {
    ! N% a) C( o% K! V, m' |
  771.             fscanf(fp,"%s",szString2);& `' Q% ]0 x* `# ]  ^- q
  772.             fclose(fp);8 ~2 U' X& U# J9 Z! L
  773.             if(atof(szString1)!=atof(szString2))
    & {  r0 M7 u: i  A' o
  774.             {# w& k7 e0 d2 D4 L
  775.               if(!Dn.Connected())
    & t7 b& I, o2 ^: Z0 _4 f
  776.               {" c, N3 X- h. O: A# Y- h( F
  777.                 bFirstUpdate=TRUE;
    ( E9 |  A  `# u2 l
  778.                 dwTotalFiles=1;
      N8 f( [% L  k( Y5 [
  779.                 dwDownLoaded=0;
    ) v7 k  Z+ F. O2 [/ R  c
  780.                 bSilentStep=FALSE;
    3 t) a3 l2 f" N# _5 x9 S* L
  781.                 bCompressed=TRUE;
    ( J7 H, w; p3 ?
  782.                 strExtLocal=".\\DownLoad\";9 s' Q, X9 N. R" D9 r/ }
  783.                 strFullName="update.txt";. P0 G. r' v9 ?$ X7 ?  a# E1 I
  784.                 dwProgramState=AP_CONNECT;
    / m$ f5 R' I7 ^5 d( @5 W6 D9 |& N( D( N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 i7 P) @- N8 G  o9 D' b, ~' D
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! J+ h( }$ F2 w: x" S
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ P8 y5 j' W% M0 E
  788. 8 E. A% P0 r1 R9 ~+ _! U4 }7 H
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, o5 X* p% |9 E8 s0 P# d
  790.                 unlink(".\\DownLoad\\checkversion.txt");8 ^. Q% N" x) `. t2 [1 k1 o- e: Q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)" I' h$ a1 q0 W4 m" E: O
  792.                 {
    7 ?: J2 m/ f9 h- e- X! Q
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");4 p$ j% w8 Z/ q9 z: V/ i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    # C6 S# t3 Q% m
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    : i+ R: N/ |; \
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! V3 F1 O9 t. m6 _; g* r
  797. % W% O& e5 u% `& H
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- s6 @  I! @% o2 t4 f. a2 u
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & J. B' U6 q8 v8 P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");0 _4 d& A/ n4 k" P1 R# a
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . H5 M$ [1 z5 h
  802.                 }
    9 s  M, S- q6 j5 x( u5 N) e
  803.                 dwStartUpSteps=5;. d' A; e0 d* Q4 U1 W+ q
  804.               }
    1 o5 L6 G+ l1 o
  805.             }
    / y& r* `8 p4 ^- J
  806.             else1 {4 p, w6 Z. T
  807.             {
    ' d3 f" A1 t! h
  808.               unlink(".\\DownLoad\\checkversion.txt");
    % J: h* ?# m2 Z- C6 {5 k! l3 v6 n( p
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - x/ ]4 M' Z% X  C5 p6 P3 a
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");6 t* A( H/ E$ j8 g2 _
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");5 n1 e1 n: G1 t

  812. # T' J+ F" k% h& X
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) r  s. X: I1 w
  814.               dwStartUpSteps=99;
    & y6 i. c4 t% E* ]+ S  e# y7 x
  815.               bFinishUpdated=TRUE;
    . c0 a! ^. g9 G& |$ I1 |
  816.               bCanUpdate=TRUE;: W) w( b( ~: y( V
  817.             }
    . v) d5 }; A9 U# K; T7 }2 e
  818.           }! H/ P6 N# H5 [% `' a4 ^+ z
  819.           else
    ; E& Y1 @- k5 h" F
  820.           {
    * l8 A& u9 t, \2 I/ M
  821.             if(!Dn.Connected())
    % F9 |9 i0 e: o1 i% c+ p. \
  822.             {
    1 e/ u/ c, p- {  h4 g
  823.               bFirstUpdate=TRUE;
    5 V) u( g& W  S" h9 t
  824.               dwTotalFiles=1;! g& U8 Z# t. S9 w) a7 E
  825.               dwDownLoaded=0;. ?7 p1 |8 D: T- K: g
  826.               bSilentStep=FALSE;
    6 ]3 l+ Y5 h7 l3 ^
  827.               bCompressed=TRUE;
    " `% f% P- M9 ^2 G. I( F
  828.               strExtLocal=".\\DownLoad\";$ ^/ K# \8 w' m8 @9 n; w. k3 W2 n
  829.               strFullName="update.txt";
    / Q% K/ z0 q4 H+ k* P+ S
  830.               dwProgramState=AP_CONNECT;* i8 a$ r& |4 z( Y3 ?
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 c: ], d2 o3 |2 j8 x
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( b9 M* ?- {9 O- `: m
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");+ U/ H, g" m& W! ]) b
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) I3 K6 j5 ^2 t0 Z
  835.               unlink(".\\DownLoad\\checkversion.txt");& o& v9 @7 C+ Y! u) }! n& c# c7 h
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)4 M/ H) f! E# ]
  837.               {) _% \, v' P& U" X' F1 W
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");. c. i/ [! O1 F- W* L* ~% I4 e
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");$ e" d3 x4 g; a# H
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");# p5 |* W; g$ k2 t+ r
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 ~; P4 t. x  m  L! G# {2 Y
  842.                 - ]" K# Z; H, l- h. A' r7 X; l
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");" n$ a' {5 w0 A2 R1 r
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- k3 o- `9 d0 x( ^, _" w1 U+ N
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");2 x* d: L% c; r# C( h
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ n: d; P2 q- X0 W+ ]' q/ U; o
  847.               }+ f! k' o1 s6 y5 l3 J
  848.               dwStartUpSteps=5;
    5 k3 z1 P; [  I  g% L) l2 R. z( j
  849.             }" V% n6 m( j. r( ^
  850.           }  }/ F/ d0 G& Q' u! M& t/ _- j
  851.         }
    6 c: R8 j8 h+ R  l1 n' p
  852.         else+ X) x* X% I, ^8 _, Z; w
  853.         {/ M6 d! H; D1 B( K/ w% }! e
  854.           dwStartUpSteps=3;- c+ _& R/ q4 G; O! f: U' S
  855.         }3 C9 s2 d$ k  ^! M" F% I
  856.       }
    % z$ i2 c% a; k/ H" Z
  857.       break;
    3 F' g: O. N9 u
  858.     case 5:
    2 I$ p1 a: `$ m+ w
  859.       {
    * E& w8 M$ `; j5 C( N1 \% n
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)2 Q6 n+ T3 U9 h* K- u
  861.         {
    & k* I, S8 _* d. D5 n" E% p: p
  862.           int opt_overwrite=1;
    , Z# B( Y5 U) ]3 l
  863.           int opt_do_extract_withoutpath=0;
    ) g$ b. ?6 l* F7 m
  864.           unzFile uf=NULL;- }4 a# F( p2 u

  865. . n4 t5 ~1 i& s; v7 Q1 j
  866.           uf=unzOpen("Wsa.zip");
    , F( i4 ]6 y3 ^9 W
  867.           if(uf)
    + X$ V! r# b6 f# f: Y' @& |% O
  868.           {- ~6 P3 f5 H8 E! x; w0 c
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ; L+ C, M" e9 T8 a2 R! S
  870.             unzClose(uf);
    ' c" I: {4 a- L
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    & h# {! y4 j9 S( \
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    1 i+ p& d+ @+ r- D/ o4 R0 r* v: w& t+ A& T
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");7 ]& a  \9 D* u: G
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" \7 v8 n7 d; L* l
  875.           }
    9 S- e  }& }- O5 o7 \/ F, X: T
  876.           DeleteFile("Wsa.zip" );
    - w; T) B# @; P
  877.         }
    $ }' C& j- O7 o

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

# ^, p3 V; Y* S4 M0 W5 C" `

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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