CSUpdate.exe源代码

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

" a- B' x% g, e! [
  1. / RevApp.cpp : Defines the class behaviors for the application./ O% G6 J# q* z8 X+ _& j. @
  2. //
    - r# r- |5 n# p5 z
  3. * h6 A! L8 @6 A
  4. #include "stdafx.h"
    ; J1 o+ d8 W/ g2 R2 z

  5. . R' U1 @# e+ q" ^: k* b+ f' ?
  6. //#define UNICODE
    : k: ^4 Q. P) \
  7. //#include <gdiplus.h>- E8 V: C: |8 S7 _# j' @, k
  8. //using namespace Gdiplus;% d' T/ d, U  I# g: _0 d' W

  9. ! q1 A2 k) t, z/ |  j% J/ `
  10. #include "RevApp.h"
    . B/ _6 K, \& `: {
  11. #include "RevAppDlg.h"
    : S2 P9 _0 @! F$ Q" P' ^! s" e6 N
  12.   h# k0 C$ E3 A% U7 k5 Z
  13. #pragma warning(disable:4786), q2 }2 L$ w% {- y; f
  14. #include <map>7 L5 Z6 V; x3 L) ~% j8 S
  15. #include <list>+ `: E8 g& B" s* I
  16. #include <direct.h>
    : t8 N+ ]5 e! S4 N
  17. & _( I: N1 w4 L* s
  18. #ifdef _DEBUG0 i* v# l( W) L3 z, X) A# ], }
  19. #define new DEBUG_NEW6 f  K4 V0 ?* T  D& A; T
  20. #undef THIS_FILE
    4 }& D  E# S" b6 `  U* Z5 i
  21. static char THIS_FILE[] = __FILE__;
    2 B* Y/ c' D2 r
  22. #endif4 B4 `. b" w7 B4 A+ F7 b
  23. #include "SkinResDef.h"" B7 O1 n/ m, c8 H/ m- H5 S" j
  24. #include "ChangeBG.h"
    3 M/ k4 N6 R) R
  25. #include "AFXINET.H"# O# i  `7 W% s  r$ G% T6 F
  26. ! L% E4 K5 z5 ~8 ~
  27. #define TRADITIONAL_CHINESE 0
    . K* C# F- a# E1 i- ~1 a
  28. #define SIMPLIFY_CHINESE 1
      W' i' ?+ u6 l* f
  29. #define ENGLISH 2
    $ K2 S" L) T( E# S
  30. int m_iLanguage = ENGLISH;0 g" @$ c% M6 ^" i1 ?- U
  31. /////////////////////////////////////////////////////////////////////////////
    & O1 p4 H+ x6 c9 J3 J
  32. // CRevAppApp0 l  _; D6 t3 `4 p0 U
  33. 6 b& s. l3 O7 y! K( `! \- T% L
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 [, a- F# F: s" _
  35.         //{{AFX_MSG_MAP(CRevAppApp)) }8 I% G4 i! I2 D+ i
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.- L6 F, T& [5 z% l
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    : J  l/ w1 V+ A( n
  38.         //}}AFX_MSG
    9 P; M( \. Y/ s5 P9 C# F) R1 a
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ) T* v6 M  @( L
  40. END_MESSAGE_MAP()9 O) x+ m7 L1 q* L" b

  41. - x  f! U6 r/ P% m
  42. /////////////////////////////////////////////////////////////////////////////* M0 Y/ H6 ^; R; k0 C" j# \7 h8 M
  43. // CRevAppApp construction- I* _# z+ i' V2 z3 W! ~* R
  44. ) f5 G/ `4 K/ m0 k( u  x
  45. CRevAppApp::CRevAppApp()
    * Q7 x3 P9 ?/ m5 V" E  N
  46. {
    ; r# Y9 Q3 s0 I/ D0 w  _- F
  47.         // TODO: add construction code here,
    % ~/ E# T+ |' p
  48.         // Place all significant initialization in InitInstance: F" A1 K3 `/ e# m1 v3 K& C) O2 S
  49.   bDisplayIsBig5=FALSE;
    9 L  [* X) p" ^4 r5 T
  50.   bRestartUpdater=FALSE;! j% x0 T5 W  \  v) C! P8 @& z
  51.   bFinishUpdated=FALSE;
    2 `7 N4 ~# U3 s* S
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    7 X7 M  h; m: V  @
  53.   InitChangeDataBig52GBKS();! V8 n" v  h/ }' Q* S' F8 F
  54.   InitChangeDataGBKS2Big5();" U$ u- G/ h3 ]7 q" W& V5 W8 ~+ P
  55.         //2 [& u! F3 z- _0 k
  56.         bClickRunExe = FALSE;2 c4 e9 L; \, P7 X! a
  57.         //
    4 j0 I/ |2 c$ C/ I+ q/ s; c
  58. }
      ~; y( D/ D3 U) l

  59. ! L/ L9 @7 f; N! ?9 g& I5 N* Z* S
  60. CRevAppApp::~CRevAppApp()! R9 L+ g/ K) ~
  61. {1 N; {& }; l5 R6 `- p3 V5 F5 J
  62.         // TODO: add construction code here,
    4 i8 c( l, `9 y1 @! ?$ A# R& F7 c1 G
  63.         // Place all significant initialization in InitInstance
    * d! c  a# O1 |! L' s) R. V
  64.   EndChangeData();' T4 [$ }9 |, s1 B
  65. }* `) Z  c2 Z9 n- w3 X
  66. 3 H. w9 M- Y" ]3 {; P' p3 G6 H2 q
  67. /////////////////////////////////////////////////////////////////////////////
    & h6 K( F  t2 X" y1 C% i% Y
  68. // The one and only CRevAppApp object( o' B/ \6 M  \+ n
  69. 1 s2 I. }/ h9 r- c: ^
  70. CRevAppApp theApp;
    8 `+ c; O1 p! o  e4 T! J

  71. ' B8 `, y/ t# w* z0 J' c- q
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : H+ F# Q9 ?. p  M7 o/ ~
  73. {
    1 L1 S3 M+ ^: \) E0 m! P& U6 `3 Z
  74.   int iEOF=0;! h9 O# |$ J- C2 I, P# M
  75.   char szTempName[MAX_PATH];
    # G; V' b( B% u
  76.   *szFileName=0;
    * S' O( ?$ m7 g; ~: t( x
  77.   iEOF=fscanf(fp,"%s",szTempName);
    - K+ y0 ~9 l$ j  A0 R4 ^" _
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('). H: u+ c7 e/ d. p" Q0 D" e# |
  79.   {
    4 ]# \1 E9 b9 v/ N0 f( o5 E
  80.     strcpy(szFileName,&szTempName[1]);
    # c- ]' f, n5 e( y! l8 n
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) n: P9 d+ ^$ A3 o
  82.     {8 D" ?# L- T; J$ E
  83.       iEOF=fscanf(fp,"%s",szTempName);
    - W0 C& v# ^& J9 S% M8 p4 W* O4 p
  84.       strcat(szFileName," ");
    $ ?3 J) p1 a9 n% q  I1 ^+ j' D/ E
  85.       strcat(szFileName,szTempName);* z7 A8 _; ?1 F3 N: t5 S6 H) _
  86.     }3 L; I# k! [/ b5 Q; U4 S
  87.     if(strlen(szFileName)>=1)
    + C1 ^1 P) L3 p3 F
  88.     {
    3 n8 o7 _( V0 c6 a
  89.       szFileName[strlen(szFileName)-1]=0;; h1 c- W; e6 T* B7 R' @) {
  90.     }
    ) H% N/ Z& h- K$ R  e) _
  91.   }% e- r! r* w0 _% r1 V1 H
  92.   return szFileName;& x5 G& W7 O8 O& o! T3 w6 V/ M
  93. }
    2 }6 @& u4 W' l8 T1 C: u
  94. ! K0 w2 r! I" B: S, R' `, \2 u& F. g
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ) [. I) x2 }& L+ v  I, }' y
  96. {
    & p; h+ Q" W  _: ^( i5 r
  97.   FILE *fp;
    ( S" f& x! R5 O& Y/ R. l! x6 k: ?
  98.   char *key=NULL;
    % k9 L. @) A7 {% r
  99.   char version[MAX_PATH];
    4 n2 i: {% F# }
  100.   LPUPDATEFILE file,olds;
    ; Q1 E( V6 S7 F/ @
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 _8 F8 w- X5 Q
  102. ' _1 x& \/ F6 j; y5 p
  103.   UpdateList.clear();8 U$ M3 N8 B# y
  104.   UpdateFile.clear();7 @+ ~6 g+ W8 s! \* R
  105.   if(GetFileAttributes(filename)==-1) return false;
    - u. F( g/ E+ r. F
  106.   if(!(fp=fopen(filename,"r"))) return false;% s  z3 J( j+ H) y1 y
  107.   fscanf(fp,"%s",version);
    ( I  n% H+ k' q% m+ L2 |$ q6 H4 O
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }/ Z  A- A$ Z$ V# T* A. A8 S
  109.   while(fscanf(fp,"%s",version)!=EOF)( T0 G; w; W3 g/ O; u
  110.   {! J+ b9 M0 l( R6 ~" X5 M' D
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ G) f# z  Z$ D% j8 [
  112.     fscanf(fp,"%s",file->path);
    ' q: T: c; L% Q6 @8 Z
  113.     ReadFileNames(fp,file->file);' Z1 O6 T  i; {- A' V8 d+ [
  114.     strcpy(file->full,".");
    / v4 C+ B" G) K/ m1 N
  115.     strcat(file->full,file->path);
    + ~5 R( \8 z+ [3 c. W
  116.     strcat(file->full,file->file);1 E4 j0 r; E6 g( q' n, w6 ?
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())3 g( _4 d7 u! z. ?6 W% \  c
  118.     {" D$ A) a0 @& u- t
  119.       file->vers=(float)atof(version);) {* ~5 L# C7 y; o0 @2 {) O2 r
  120.       UpdateList.push_back(file->full);
    ! K* d. j. h, g3 t
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));1 K/ P" p1 P5 [: h% A0 o' T' [
  122.     }' r. ~$ r) j6 z# k% M9 d- P
  123.     else
    ' V/ |( Z) w$ @: B
  124.     {
    1 L2 R3 K0 q5 e$ d
  125.       olds=(*p).second;
    4 F( Q4 [- Z7 q4 D
  126.       if(olds->vers<(float)atof(version))
    4 H" l0 G! c* B" F- x9 c
  127.       {
    ! s1 l$ h8 d6 U1 D( S
  128.         olds->vers=(float)atof(version);
    # S, r- U" _0 N" K# C. Z
  129.       }
    & J8 U; T, a: _. Y0 z
  130.       free(file);/ {, {: ?6 c: G
  131.     }
    7 c9 E  u# Q# J9 K' F
  132.   }
    " z$ n0 z6 b2 l( M
  133.   fclose(fp);1 R" U6 ^* q& f! m$ p9 z
  134.   return true;
    5 N# E! x8 L+ Y2 l# W
  135. }
    ' z, V; n4 X' i  t4 E& N

  136. ; K; f; X0 v  \( O. U  }
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    2 N7 B# N! B0 z4 b4 w2 n
  138. {
    5 d( S3 y2 @- S% {
  139.   TCHAR  szFull[MAX_PATH];9 @, ]) z+ _4 ?, n
  140.   TCHAR *token,*inter;
    ) m' }8 `) b; U3 c
  141.   *szPath=0;
    2 z/ k+ f) K+ R8 q
  142.   strcpy(szFull,szFullPath);1 S/ e6 T9 E6 j! n3 i5 d
  143.   token=strtok(szFull,"\\/");1 V6 o# O$ c' x" J8 u0 \
  144.   inter=token;
    ' Z0 c' Z( e# M, M+ G. y
  145.   while(token=strtok(NULL,"\\/"))
    + ]7 A0 P! Z6 W# u
  146.   {
    : k9 t  O# h7 c' i
  147.     strcat(szPath,inter);
    0 l9 T/ n1 e( o2 u) t5 C: R" c4 c
  148.     strcat(szPath,"\");" a0 w8 g8 i+ P' H( M0 H& w8 G3 Y
  149.     inter=token;
    " r9 W9 `' g8 }/ J1 W4 f* r
  150.   }
    * q" u" x7 C$ q
  151.   return strlen(szPath);
    - ^8 c/ F9 r* b! c+ }
  152. }
    / a+ O/ R+ p5 o: l& Q/ j& Z4 [
  153. 2 U; M5 u4 k$ {, Z2 l
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)4 g' z# D6 ^; J3 N  Y
  155. {2 [6 @- M/ P; g0 h. [* M  b+ M& L
  156.   DWORD attrib=GetFileAttributes(Target);
    ( k- ?/ \% x/ V. p+ J
  157.   if(attrib!=-1)
    + }/ t8 F2 a8 L
  158.   {# B# y6 }; ~, `1 e' K
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ; n' X3 A" Q$ ^, {' ]
  160.     {$ V- P# K9 I# d, j- q& j9 k# w: P
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);& n- `9 n* v# V; @8 M
  162.       SetFileAttributes(Target,attrib);
    ) J0 {+ m" l1 G) C' }
  163.     }+ L& j6 e/ U/ ^
  164.   }( F4 w+ j' |- J
  165.   CopyFile(Source,Target,Erase);: J, ]" b3 w3 N( L! U4 M5 `* Z
  166. }1 g. I7 M7 m/ H0 \- e# P9 G
  167. 8 `2 q- F! h( }% {) {) n6 }$ j
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    5 n) ~* s2 T6 c! O
  169. {3 J) s5 Y" m# ^4 T1 l- l
  170.      FILE *fp;
    7 S3 _& }( K4 B9 e4 i
  171.      char  szBuffer[8192];
    3 ^3 p, ?% p2 R0 }% e; b
  172.   va_list  argptr;
    * g  P! G8 a$ n* O7 z& t3 p

  173. * l9 q, Y5 i$ d* i
  174.         va_start(argptr,message);
    4 u+ J: P3 \# k# U, w. U" ~
  175.         vsprintf(szBuffer,message,argptr);$ K5 b+ x1 y& C7 w$ ~1 N
  176.         va_end(argptr);7 z0 G  j( g5 R) e
  177.   fp=fopen(FileName,"a");$ I" C/ f  v, U; M" J7 x
  178.   if(fp)) ~. ^- N# U* `' U  V
  179.   {
    ' o! c; F: M# h* g* @' I' D
  180.     fprintf(fp,szBuffer);( c1 d8 D  o6 r6 j
  181.     fclose(fp);9 f; D* ~. w% Z* E' s& h
  182.           _flushall();
    * \) ^$ z% y2 ]% x, e( }: j; B
  183.   }
      X7 {: g; Q6 B* K5 K2 o
  184. }4 N3 n# {" r+ M4 n) Q( R
  185. ! y, I" i' ^% x8 F8 ~5 a5 S& |
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ( s( ^3 g, |4 o( r. Y4 f
  187. {
    $ o) F& I: p( }/ y( ^  T3 B
  188.      FILE *fp;# O  d: A! f8 Z4 v# [
  189.     DWORD  attrib;
    5 ]4 h: z$ j4 j( S6 {8 E* K
  190.   attrib=GetFileAttributes(FileName);4 ?& a% [2 I% X& V1 N
  191.   if(attrib!=-1)6 r% C$ S4 n. F8 i1 X2 y
  192.   {. _; `7 f3 ~: ^: J  j/ Q+ m
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    3 w' d' f- \* D& ]
  194.     if(!SetFileAttributes(FileName,attrib))) t9 I. Y- L- W. L* K$ V
  195.     {/ z& ]9 l3 @! T. @3 s
  196.       return FALSE;# y1 y) |: A5 b$ i7 ]
  197.     }0 ~  [- n' J9 P6 n4 V2 j4 }
  198.   }6 K- ]% _( j. h3 ~: @2 y6 H
  199.   fp=fopen(FileName,"wb");
    ! ]2 M& o' A$ g
  200.   if(fp)! E( }1 L7 d. ~* \7 Q# A, K5 u
  201.   {
    4 W, }- ]+ m: I- J& H
  202.     fclose(fp);. A7 _7 i. [5 A7 g& c) O  I2 I
  203.   }5 o0 q# \4 f! _3 n3 f
  204.   return TRUE;
    1 J% E% z# `7 q! R; e
  205. }
    9 _/ |, T' R: Y/ Q$ Z
  206. / R3 g+ L; i4 n% b5 [4 {$ |
  207. BOOL CRevAppApp::UpdateLocalVersion(void); [' {3 r$ N, S( q3 S! O: m# |
  208. {
    + x; e- H; s" }/ R2 h" G1 S
  209.   char filename[MAX_PATH];. C+ }/ ~% I' v3 y1 o
  210.   LPUPDATEFILE file,olds;
    ! ~8 ^: P6 p* g4 A" G, B* }. A/ q
  211.   std::map<int,CString>::iterator i;
    * H4 F$ U; @7 V+ J  S0 D, O
  212.   std::map<CString,LPUPDATEFILE>::iterator p;5 s7 `% r1 F" ~
  213.   std::list<CString>::iterator l;
    1 x4 _; h, O! m" `7 R: Z; ~. T

  214. 6 o" B) ^3 R% h7 I" ~. p3 ]
  215.   if(bFirstUpdate)& s6 k5 I$ p; A$ t" b  h
  216.   {' n- e0 j! d% s$ F7 v9 q
  217.     dwCurrFile=0;( G! e* n5 R3 P/ x' p
  218.     bFirstUpdate=FALSE;
    4 X0 `9 w: O: Z+ f) B- d, a: b+ E
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& r! k4 }' c) R( |- p
  220.     {
    ( J; W7 O1 {; T. W6 V
  221.       dwTotalFiles=UpdateLocal.size();6 q2 R4 g4 B, M+ P: S5 k6 C- \) a
  222.       dwDownLoaded=0;
    6 L' \/ [# Q) t$ g. [: V1 ~* ?
  223.       bSilentStep=FALSE;- c- ^+ ?/ {# R) {1 R
  224.       bCompressed=TRUE;* K  J1 X9 l& F" K2 L2 K
  225.       strExtLocal.Empty();  N) S4 M2 J: |  Z
  226.       strFullName=(*i).second;- ~9 K! Z0 p2 a- q! W& ]4 g+ }0 T& F
  227.       dwProgramState=AP_CONNECT;7 Y3 U5 Z6 ^, B
  228.       return TRUE;
    8 o% z( ]- @2 M4 J
  229.     }9 ^3 I: y0 V& w, c% V! d5 v
  230.   }9 R6 `( U( G0 @; w" U9 `
  231.   else if(bRestartUpdater==FALSE)) X. ~2 Z5 H6 E$ Y) w
  232.   {- A+ e$ m6 u6 t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    2 \' Q6 q6 M# ?6 H7 `: v* z$ w
  234.     {
    1 O9 {1 H8 p9 H  H
  235.       file=(*p).second;/ [( z  o  Q4 x* J7 W& u
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()). \1 C, G' Z4 U6 h% [+ Y
  237.       {, a6 H: z/ F9 Y2 N
  238.         olds=(*p).second;! `0 r/ c5 S% W2 \( a" G
  239.         olds->vers=file->vers;1 d& d: S/ O/ {1 i8 {
  240.       }
    $ r- o9 ~2 }1 _
  241.       else! |7 m+ R3 Y- t+ E1 V9 y
  242.       {
    2 J  K1 \2 [& V- z8 g) g
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 ^  |* f/ C% ^. d( N+ e
  244.         memcpy(olds,file,sizeof(UPDATEFILE));$ v8 `; }7 `3 n# F
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ' }2 S$ L/ R5 \2 B/ u
  246.       }6 h3 n, U) }9 b8 c: ?4 I8 T3 _! ?8 ]
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");' G% Z# ~& |$ A) l. C
  248.       sprintf(filename,"(%s)",file->file);& @+ R; V5 H2 P' w
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' o, c5 Q5 J; l0 D. |
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    / I) B: Z% S1 W, l) T
  251.     }+ P/ x) d2 L; S% q
  252.     dwCurrFile++;1 _2 O7 @+ s# s3 |' h6 s
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . o" r5 i6 @+ T3 E1 t
  254.     {
    - }" q% {$ }: A) p! s
  255.       bSilentStep=FALSE;2 A& @6 Y8 F1 v" ]4 b
  256.       bCompressed=TRUE;' c9 _$ b' F# X
  257.       strExtLocal.Empty();* c- V# L9 p5 W0 p% ?+ z
  258.       strFullName=(*i).second;
    : ], y, I+ a9 [! M
  259.       dwProgramState=AP_CONNECT;( b! y4 ~- K+ M1 k
  260.       return TRUE;
    * m4 A) Y6 M$ W
  261.     }) q' L# x0 q0 L5 g! D0 R
  262.     if(!bRestartUpdater)9 X. @/ q! A% p" b
  263.     {
    + c# p- J* P/ X5 t" p8 \" _
  264.       int iCurrSize,iFileSize;
    - \0 x6 O- [9 o7 g5 r
  265.       iCurrSize=0;
    ) n9 l6 w$ d$ u) \
  266.       iFileSize=UpdateList2.size();% \( J  {! N/ n; n# d
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");2 d  G4 @" u: H0 o& C4 @, N
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    4 N( E: y: G, ~( B
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    0 t3 b" Z/ t  \) w$ @+ ?: J
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% N) ?* M9 P* y5 `9 l. _- A
  271.       Fclearf(".\\update.dat");  ^1 o/ G2 W; o( w1 ?- U
  272.       Fprintf(".\\update.dat","Bloodyf\n");- g1 q* O# Q1 `' B0 Q9 q) A$ B
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 w$ s5 [2 b+ G: X2 A9 a
  274.       {0 ^2 b; E2 X5 R' @) P( }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    . J; Z0 o3 x$ ]5 p1 {9 i: U
  276.         {6 ~9 U. Z  H6 ^3 s* X8 J
  277.           file=(*p).second;. ]% ?; R% R9 K* j( p$ L2 w* S
  278.           sprintf(filename,"(%s)",file->file);
    ; D: T9 ]/ r& @6 I: w5 T
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 h6 o% X4 I" W, ?
  280.           iCurrSize++;
    - P. {& Z+ v9 `. X
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));! r; r2 _  `. a. F( n3 h1 |& ?3 T9 \
  282.         }
    " V: N( m# g% v% j+ N' [
  283.       }' B! ^8 p8 ?' X% ]
  284.       unlink(".\\update.txt");
    9 v3 ]& w8 u0 k0 P! {" ^4 J9 S
  285.       unlink(".\\update.tmp");
      e6 p" d8 y% a" z/ w' \
  286.       Fclearf(".\\checkversion.dat");
    ( m5 }% J0 n* F* p
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);& K1 G  W6 @. I4 i
  288.       if(UpdateLocal.size())
    6 O+ n: I! o- R* p' t
  289.       {
    " [) |5 }8 }& s9 p4 w
  290.         UpdateLocal.clear();8 p; B! v6 m7 F2 q. Z. a
  291.       }
    0 _. {% x* H# v# [
  292.       if(UpdateFile3.size())" Q. }4 U5 H' u4 U
  293.       {
    9 n: t  N& l) y, b( V% k
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 m: \8 R" x; m: k" \8 S' I
  295.         {$ G  b5 X( L1 n) l- S! K
  296.           file=(*p).second;
    " D5 M0 t6 x3 x" j% t; @# _9 u
  297.           free(file);
    " S1 m  t- x$ B+ R5 S  x3 L, n
  298.         }
    $ g; P3 R; x( a/ f! h
  299.         UpdateFile3.clear();
    # {% m' Z$ W9 z6 i) B2 e) R
  300.         UpdateList3.clear();6 H2 ~& D9 F% X5 p* |
  301.       }
    2 n" Z: p" d! }, E! X! W
  302.       if(UpdateFile2.size())7 c3 H5 F# C: T1 c, w. b
  303.       {
    5 L. Q4 @  n  a2 O
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( ?; f' u- s6 F8 Q5 h& Q( {/ t0 w* p* G
  305.         {6 {& t2 x# D6 k1 b
  306.           file=(*p).second;, U: }% [  n7 S6 Z3 H5 [
  307.           free(file);8 f! K# |9 [) e; J* r  z% _) z# [' V
  308.         }) }3 G6 N7 s, [9 L: e, ~: h; ^
  309.         UpdateFile2.clear();  B0 t4 |2 v! {
  310.         UpdateList2.clear();0 n4 \5 |7 _+ G2 L
  311.       }5 T  i2 D8 n, }! t0 b
  312.       if(UpdateFile1.size())/ j0 i0 H; }. \/ p, y( n
  313.       {
    . M# _+ N+ @: c9 y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + a$ \0 H  n8 |  o5 F" Y
  315.         {2 B# M; v( j5 ~- B
  316.           file=(*p).second;+ @1 X! S/ G( d( x
  317.           free(file);
    8 W' h5 n9 _  y$ X0 I
  318.         }
    , ~9 R4 k1 k" p& v
  319.         UpdateFile1.clear();
    8 t8 N3 x* x" Q4 c& X& W& m
  320.         UpdateList1.clear();
      `' H1 P  ~* D3 o  w3 O) i
  321.       }
    ( T% X  o2 T1 e1 L2 a& K
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    $ Y3 N4 l- W2 S4 {# x4 F7 d
  323.     }
    4 ^5 J" N" e! M: c7 Q6 O
  324.   }. @; J# @1 [9 M1 Q/ `1 O& n% H. o" A% o
  325.   return FALSE;
    ) j5 f2 f0 F  O4 X" U  [
  326. }
    5 a  A9 M. r0 y$ y! z% A6 {/ Q' B- p
  327. . e3 e9 ?9 ^6 Y0 a6 k+ H- [
  328. void CRevAppApp::ClearAll(void)
    7 r. v  P' M& p- n+ X0 O) G4 f7 l$ Z
  329. {
    - a8 `+ ~1 ^6 p8 T/ a
  330.   LPUPDATEFILE file;4 ]% T# s( }1 ~1 Q1 Q! Q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;* _2 D  \: |" s: {" z  N

  332. 1 F$ f% N/ x3 Y( G) l1 b
  333.   if(UpdateLocal.size()). J& h, [% l; |4 Q' G
  334.   {7 f+ j, X5 @' v; t
  335.     UpdateLocal.clear();& d9 @4 S0 b9 a9 m2 [* h: C
  336.   }
    + v0 k( a! b$ N8 b
  337.   if(UpdateFile3.size())% X9 ]; t% Z* l7 R- [
  338.   {! a: j" e  `$ b8 |% g
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ t' s% h# o+ B& N' k
  340.     {% ]" O% O' b; ^+ K+ ~8 X* \
  341.       file=(*p).second;
    2 ?) ?; g2 p, V* g6 ~" \; f) A$ ?
  342.       free(file);) g  W2 ]: k2 _: L3 P0 b
  343.     }7 `( h* M: t& Z+ U9 y
  344.     UpdateFile3.clear();# B1 ^& m3 }5 E9 O4 p$ H' T
  345.     UpdateList3.clear();
    $ n- E! S+ p8 j
  346.   }
    ; i, S8 ?: x( y* ^8 x# r( x8 B) u
  347.   if(UpdateFile2.size())
    6 |9 p5 S4 W9 E$ B9 m( y
  348.   {* o' i" x9 _( S, u! {, V0 t2 g: N+ w+ a
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 k9 T' t: A1 w# {- x9 B
  350.     {0 h- P4 T) V! {1 y( `: d$ ^
  351.       file=(*p).second;3 n* O. F6 m1 W, h2 l7 P7 c
  352.       free(file);
    : G) O! l. T& W% x* ?
  353.     }
    ) H2 a1 K3 ~4 p* [- H- M
  354.     UpdateFile2.clear();
    : U$ o& H4 t, I  C! }
  355.     UpdateList2.clear();
    # X3 p; I" E. g, \) P9 F
  356.   }% d0 |+ V6 e& g. V: o
  357.   if(UpdateFile1.size())
      ]! M: o0 s5 x9 s
  358.   {
    1 V. y6 c% i. ~2 @# o, Y) f  g
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 R; E3 }. R  T$ n$ ^
  360.     {: I3 l( o" F; X$ f! I
  361.       file=(*p).second;
    / ~: ~0 Y9 I, G# I7 x
  362.       free(file);
    , [" N3 H  f; d
  363.     }
    ! e7 M( B& S) [% c0 P8 J4 M
  364.     UpdateFile1.clear();6 s0 \- H# t7 C  C1 c
  365.     UpdateList1.clear();: h" }2 W2 x; r' K
  366.   }4 x# x$ t( ]# w  d5 U
  367. }  , N7 x1 m/ P2 L' P9 Z
  368.   
    $ O: |4 R1 e& Q: e
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ( q5 X; G9 \8 o. S. n
  370. {" g$ [8 V' q  @* A: T3 t
  371.   int c;7 L! L/ q# O2 M2 l
  372.   LPUPDATEFILE file1,file2;
    ' v# _- e  H) w8 I
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 d/ m2 Y% a* L3 A, r. T0 R
  374.   std::list<CString>::iterator l;1 H1 {( Z7 V: V8 M" ^

  375. : P% d* [& y, N; {
  376.   UpdateLocal.clear();& U* [2 i) C, Q8 I
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    % j, t: w( v4 B3 C
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);6 Z8 @* o3 Z6 U; @; R$ H
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ) s2 \+ m) V$ A/ N& l
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    9 e1 V& x$ i6 u+ U+ c. l3 ~5 X
  381.   if(UpdateFile3.size())
    5 c- B4 _1 r) z
  382.   {$ ]7 l7 u2 p. ?& `, g4 B$ C6 R5 e
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); @, W( r, P  p$ v6 ^1 f: Y
  384.     {: z9 |3 v* N% D
  385.       file2=(LPUPDATEFILE)(*i).second;
    & A; N1 n- w$ D5 O
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + u; b# c& }$ m6 A' W* e; f
  387.       {0 h/ c$ e$ Q  E, x  @( B
  388.         file1=(LPUPDATEFILE)(*p).second;
    9 z( v# g) a/ N1 E9 L' k  Z
  389.         file1->vers=file2->vers;5 i, T/ v9 W- ?/ k- k1 K
  390.       }
    $ [, H( z+ u( [4 a
  391.       else
    % a# k! c5 ~- c! T6 Z
  392.       {
    - E( j3 Z2 \* E9 H" V" |9 {- ?, [
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  H8 a& a' k7 k5 b
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    " A4 o/ U4 n: ?- v
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    0 W2 f6 Z/ O2 [0 ?% `& i; D
  396.       }
    5 O* A3 L+ m) C" `$ O4 Q8 H. m
  397.     }4 }" h4 _( M. N1 L, C
  398.   }. W) g" @1 r& m( L2 I! M) k
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++): Z( \. x) P! T% Q3 `
  400.   {- v1 Y( s: r* `" e  {2 R2 j
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( G7 I. j- p! w- r
  402.     {
    ) [) w( B! n7 g3 \3 h7 Y
  403.       file2=(LPUPDATEFILE)(*i).second;
    0 z9 Z* a$ T: J" {. k" \  P
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' b( |3 z% C  G5 k0 `! p
  405.       {$ D( n' q+ ^: g4 ]# z4 H
  406.         file1=(LPUPDATEFILE)(*p).second;
    4 Q  s" n9 S2 T7 x
  407.         if(file1->vers!=file2->vers)
    ; R0 h' H2 Q4 x
  408.         {
    . o! x" e( y$ b, p/ V
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 u. `! _% U$ h1 ?6 R
  410.           c++;
    : G/ r5 [% l% I& w. m: m, S! Y6 A
  411.         }
    2 }$ B8 V9 K# L* h3 W9 Y1 t4 \
  412.       }
    7 {) s' B  T, A# Y; w7 s6 K$ E- P
  413.       else; _3 z. l4 a* f0 N
  414.       {
    7 @' H0 h9 r9 m% E% w
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 h/ ?5 X0 V; q( M" a; ~
  416.         c++;2 [- w. r0 P$ x0 C2 L  w4 ~
  417.       }
    $ l: y& R; U, a- t' ^
  418.     }. v9 {2 V4 l3 [& Z0 S
  419.   }
    7 T0 L; P5 l" H3 }4 W
  420.   unlink(".\\DownLoad\\update.txt");
    ; `" w& C- X4 [0 U
  421.   if(UpdateLocal.size()) return TRUE;* `% J& p) k5 s
  422.   else                   return FALSE;
    3 x1 n; y! \4 a6 R
  423. }
    8 w% q8 B" M1 n* W
  424. ) C: |* V6 O9 s
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    5 e6 f) d; N  J. j4 w* Y$ k
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"4 l' V& S5 E( ^2 p7 G- |

  427. 5 F% M5 S0 P( g* v0 {

  428. # u$ T! M# k$ S

  429. + R) `1 S& }, V1 H: C
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)  o; V; @1 @" q" R2 I; K
  431. {
    8 S, g* ]# o/ L8 D
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;7 {; o! p! O+ r
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 Q" o7 `0 {5 [
  434.   {7 e) l' P5 {8 V) V, \! _+ U# ^8 U9 A
  435.     char szLanguage[50];: V1 u% V$ _! m
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; L- d5 G; y4 {1 l% r
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 g+ r6 x# n' M) X1 L4 W: h. E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    9 ^# I; M" D' A( @
  439.     else                                   m_iLanguage=ENGLISH;; A' x* |4 |% m8 P% D6 v
  440.     char szRegister[100];
    3 Y- V5 b+ D# ]2 i7 P
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' P/ A; R' b6 t5 E* L
  442.     strRegsName=szRegister;
    - ?7 z# k8 o* B/ B
  443.     char szPatchURL[100];
    & e5 P, n6 q  C  K
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , h+ [- s$ A; M
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    * ?" n  R- c; e" ^1 F3 Z
  446.   }
      J: j: a+ |9 l3 j7 L
  447.   else- {  O- I( z' M% I
  448.   {
    1 X/ p- v+ i0 ~
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);! s7 i) j/ \) n/ p
  450.     strRegsName=DEFAULT_REG_URL;
    & D+ p3 d# L3 l. \0 c8 d
  451.   }
    0 v( H8 r  s% Q1 n, V6 S
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    4 D: |/ E- J; o. K5 A
  453.   {
    2 f6 K# f# d* m! E1 A- ~. g
  454.     char szIP[50];
    ) O' N/ o$ x) q$ c0 i% J
  455.     char szDIR[300];# L$ l1 u/ k) y+ b
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    # |, ?5 ~  `2 \* ?+ S7 e/ h2 Z
  457.     {* g* m8 E2 B% K( U, \% y( S; I
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    5 T* e7 [% W1 K0 l
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 u, ]0 Q+ p0 k$ b) t7 p- O6 d
  460.       strHostName=szIP;2 V" y2 X3 ?0 Q
  461.       strHostPath.Format("/%s",szDIR);
    ; g: f/ l. n1 z& o" }
  462.     }
    ; X  Q' c: N3 C# Z0 \# M5 `
  463.     else
    / R" c) E+ _# G; B8 [
  464.     {
    9 h& l5 f9 L0 `
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* j7 g( R/ t/ o* k' ?
  466.       {
    " A$ q) r- Z3 u5 u& w$ g
  467.         char szLanguage[50];
    6 Z+ T/ l9 S3 a1 s
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) i% @# ~' w7 @. [- `% u- J
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ V( d. [) \0 J/ u
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 A- @9 E, E* u' p" I# Z# E
  471.         else                                   m_iLanguage=ENGLISH;
    ' E3 d" O" t2 w
  472.         char szRegister[100];
    , S3 ?' y. {7 E  p* {7 h' A
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 e4 k- _0 G8 M9 B& n+ [4 m
  474.         strRegsName=szRegister;  P8 p+ t( o; j4 l
  475.         char szPatchURL[100];$ F; ~9 B) J% d. p$ e
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( x9 G% N7 x! p! G3 J% A
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  {6 ?; z5 w) Y2 h, R
  478.       }
    ) m. L7 P' U7 \( n7 Y+ m
  479.       else
    : i0 V# A- ^* J7 [+ O
  480.       {* s# ?. q/ ?2 d1 `- t3 ?' ]
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ w$ z* t# t& v3 R
  482.         strRegsName=DEFAULT_REG_URL;
    , G, N- T  h- ]0 F
  483.       }
    * J; D* Y$ V8 U5 V
  484.     }' n" h( a# L! m: ^* J
  485.   }
    & }) J3 h9 s% P, d5 S. ?1 \
  486.   return true;
    # k" j( \1 b' x! l
  487. }
    ! `( T! N2 C. Q+ i2 r) L

  488. ' b) M% S, o. }/ n
  489. #include ".\ZLib\unzip.h"+ C' Y; z) t7 _! J. {4 [
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);/ w8 c1 m6 @/ _+ Y) J8 C
  491. /////////////////////////////////////////////////////////////////////////////# j3 {, r8 y1 b( k3 ~
  492. // CRevAppApp initialization
    2 }4 c( i5 X# T6 Q, u# w8 F
  493. 1 K, i# J+ q, r3 L
  494. BOOL CRevAppApp::InitInstance()$ ]' r  {8 b8 f( u2 C& r5 f0 G
  495. {' V( m/ S: d. F$ Q+ l
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ' @. Y/ I8 o, h& n" J$ k* |

  497. 1 s( X" }! x7 H) E. ]* ~! Y$ |, n
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    * K* |5 H% U3 x: K: @
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))# @/ |/ _# n+ W2 _  V; t
  500.   {' t" ]6 d: G. B, w& i8 ]+ H
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");" \" {9 [' a  }
  502.     GetPathFromFullPath(szPathTarget,szPathSource);+ i$ O3 X5 L" n& `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" b) F. c: G8 U: i
  504.     {
    ' w+ q0 t  w7 I
  505.       strcpy(szPath,szPathTarget);: h/ u( E& I9 f, B. j1 S
  506.       SetCurrentDirectory(szPath);
    & ^1 H. b6 @& O4 J7 o; H: j
  507.     }
    - k' U" o5 a: K
  508.   }
    $ k7 Q  l: F0 W' n3 @
  509. #ifdef _DEBUG
    . N& I" q4 K: D
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 _2 M9 \" H# E- s0 u2 B
  511. #else
    $ }1 t& N0 a# p+ h) X
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 W) X0 p# {$ q
  513. #endif, N- x! p* i% Z
  514.   {
    % D" Y+ u& A; S! l7 p- `  L2 {
  515.     char tempFileName[MAX_PATH];; E% f2 ?1 ]9 m/ c2 `' m
  516.     strcpy(tempFileName,szPathSource);+ b3 Y9 l+ h0 L
  517.     tempFileName[strlen(szPathSource)-12]=0;5 R- j' b1 S: g$ L
  518.     strcat(tempFileName,"\\$CSUpdate.exe");! ^$ f9 d0 p# G7 m6 u
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
      m: }; \% N( H- Y/ H
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);& A3 G' t9 k. H: |+ M
  521.     return TRUE;
    / Q' l& q5 t. q7 B
  522.   }' r  ?+ V! Z- d  m& `. q, U2 S$ g
  523.   // Nuke 0118: Delete run.exe
    & U  F5 U6 g, b4 p) m
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
      @' W+ \) N+ g* i) D1 S# u
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    , q& R, k* l, k7 K) o9 X+ h/ `
  526.   if(!ReadCfgFile("Config.ini"))$ p6 Q( F5 [: l
  527.   {
    ) f, J0 d- v) e8 p- Q) n
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);5 `0 K( h: O6 k4 y7 a
  529.     return TRUE;" _- A6 i% [: o" o7 E
  530.   }. G) v- ?$ @! ^3 S+ u! t
  531.   HANDLE mutex;' t! [7 g( M& v) z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))  i) F1 H9 A  H) {  ^) ]
  533.   {, B+ K" C3 ~% W$ ^, G$ P
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    + p* @1 d5 H( O7 A$ r
  535.     {" `' a7 y; g* b) |
  536.       CloseHandle(mutex);7 C+ A1 p% _% ], N! f
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    5 q5 L' [0 @- c8 c% C" Q7 s" ?
  538.       return TRUE;$ b  j# u9 N! R0 H8 _$ [  i* ~
  539.     }
    # P9 t1 u% p& @8 c7 K
  540.   }  4 B" S+ X) `& ~* T8 G
  541.   CloseHandle(mutex);
    4 n6 k& g% u/ }% e! _

  542. # r2 _/ b* e: I  B  S4 D8 W# x
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    2 ?7 b. `1 J' {  h; m0 h6 G
  544. 2 g" x( Z* p$ _$ u
  545.         AfxEnableControlContainer();0 {/ _5 r, B. H: l# U8 h9 W

  546. ' _+ x* O: N1 B0 k
  547.   bCanUpdate=FALSE;4 Z$ d1 y0 ~+ l$ T) Q) S/ w
  548.   dwStartUpSteps=1;
    7 @% K  x4 I/ s9 \! h, {8 P' l
  549.   dwProgramState=AP_NOTHING;
    $ d7 J8 l- c5 `$ |
  550. & q& ^) Z2 Q; h( F8 p
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    5 ~7 s" d2 @# A3 b! ]6 u
  552. ; A, N0 J6 x  ~4 _- {% a) ^/ g
  553.         // Standard initialization
    5 k$ H/ c+ a9 _! ?/ `
  554.         // If you are not using these features and wish to reduce the size
    8 V* G  ?) p; I, l; i/ ]
  555.         //  of your final executable, you should remove from the following
    $ D# z% Y3 X" y8 l. @
  556.         //  the specific initialization routines you do not need.$ z4 }5 E2 s9 w3 d4 d9 V' k/ d$ j
  557. ) a$ l+ {( e& z. S  r
  558. #ifdef _AFXDLL
    , J9 V. r( I2 W5 c# P: \( g
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL9 B$ {  \  e3 [! e' p
  560. #else# h! Z+ Z' B" s8 |4 P
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically" r$ M' d8 y8 C7 H( V6 _
  562. #endif! |9 \, d; B0 i" C! Q7 \) M1 }7 ~
  563. % i9 o" P4 A1 P8 D; t
  564.   dlg=new CRevAppDlg;
    $ q: i. ^; ~. k+ ^& x) P: L" N" ?
  565.   dlg->Create(IDD_REVAPP_DIALOG);8 X9 A0 [# @- |0 ?7 _0 V
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    " a  V* C% |7 A. B  D
  567.   m_pMainWnd=dlg;
    9 |5 W  I. B' [5 }7 T

  568. ( t, k# m% c* s* y% d1 Q& ^
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    * \! z4 I, w6 ^4 T$ I  g) T
  570. 7 ^7 g  o  G) V, s  r: K
  571. //  GdiplusStartupInput gdiplusStartupInput;/ W2 l+ f& ]2 x3 E8 E
  572. //  ULONG_PTR gdiplusToken;" w+ A# C$ ^: A1 s1 u8 ~5 j
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    5 R" Y; t( S5 }. q9 H7 P

  574. ( i3 A0 m6 Q$ y( F& X- O6 C6 B! u
  575. //        CRevAppDlg dlg;
    8 s8 l6 J, ~; P- y5 D& m- S
  576. //        int nResponse = dlg.DoModal();1 a9 P  C. k, }8 J# D, R* M
  577. //        if (nResponse == IDOK)$ M) Y8 L- f0 v0 a% s4 f0 ?
  578. //        {( ?  }$ K  o1 f# j  W! x
  579. //                // TODO: Place code here to handle when the dialog is
    $ ^8 p4 _7 H. j, P0 I. J% a
  580. //                //  dismissed with OK0 R2 t! ~. ^* ?- J/ g
  581. //        }
    0 D: h* r, \4 P& @* _. P4 s5 }
  582. //        else if (nResponse == IDCANCEL)% x0 ?6 {. H1 Q* d5 P; n1 T. U; l
  583. //        {
    & t. K# X! t9 }/ _
  584. //                // TODO: Place code here to handle when the dialog is' N8 p& j$ N- ~, b
  585. //                //  dismissed with Cancel3 S: t) M3 z  A+ c
  586. //        }
    6 e# ]: x" A' I/ X3 Y
  587. ; |7 ~5 `3 @4 O/ J5 b' a
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    $ l5 o% S0 B3 q
  589.         //  application, rather than start the application's message pump.: Z/ t, M; }0 D$ V  H
  590.         return TRUE;5 Y6 b; v7 |8 o6 Z4 o- O: P0 c
  591. }* w0 n! v( I' R9 Y

  592. 1 J6 W! i6 X2 F% x# P
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * `- ^5 Y- O# h" M; o  n* }$ X
  594. {
    2 `; Y" t0 {' J
  595.   int i;- p- m2 [+ i7 y6 ?# R
  596.   char *szRet;1 p; d. i1 ~9 ?6 {) @9 Y
  597. . Q* }/ j) G3 k6 S! c$ ]$ v
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    9 G2 w3 `  b  G) h
  599.   if(sztoken). i0 {' \) x9 R: l& b0 R( Q
  600.   {
    7 A4 C3 D' c" |
  601.     szRet=&sztoken[itoken];
    8 W! r& g# U3 N; J1 T, x6 ]
  602.     while(sztoken[itoken])% k3 C9 o- H. }/ N+ t9 Q8 Y7 g  j( ]
  603.     {
    $ A# r; h: x9 F/ M2 ?6 Q( h3 o
  604.       for(i=0;i<(int)strlen(token);i++)
    ) y& R! G; H7 U" e: x7 p2 G0 z
  605.       {7 \4 i* h7 y1 `# u' G1 E& E4 |# j
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ; P" b. z: }4 X% m, l8 U5 ]; T
  607.         {  N$ [! {- [4 E3 k  v* i. F7 @
  608.           sztoken[itoken++]=0;% a; Z: L6 Q, x; W$ x. W# {2 `$ G) Z
  609.           sztoken[itoken++]=0;9 o7 G& f  R% h- E
  610.           return szRet;4 C5 H6 U8 M4 B0 H' \! G
  611.         }- [5 x* Z0 h0 p3 W" M  p. H( Q
  612.       }0 R. D$ L9 y: u: ?+ l
  613.       itoken++;
    5 a$ _/ Z: H7 U2 A
  614.     }( N% ~3 s7 h- j( `
  615.   }3 B$ |- U# {' v
  616.   return NULL;+ M% ^. x! [% }" K7 C% @9 G4 `7 j
  617. }4 t. V' K2 U$ R# @( v
  618. ) B# m2 t: g( b
  619. void ProcessProc(long Total,long Current)
    3 G7 |. H% s, L5 u! s. G$ P% h, d
  620. {
    ) R8 O4 a: [& J
  621.         MSG msg;
    1 i" x- h( x4 |
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);; X% D' J$ Y- F0 P0 i/ X& Z4 j
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));" I6 d2 S  m7 E
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))4 T6 g  D: G' I, C1 ?# F  d$ s
  625.         {3 g5 _  k; w0 z' Q, r& W
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - b% }$ ]( V4 ?
  627.                 {
    ( h* P' b0 A1 l! B/ A" U! w
  628.                         return;
    1 V: |1 Q3 S: l* h" M0 Z& w) B; F
  629.                 }
    0 y1 {: `' I' j6 r- _2 B, m: V$ A
  630.                 TranslateMessage(&msg);
    9 J( a  t( U$ Y( L) X
  631.                 DispatchMessage(&msg);# c- v( f4 |1 G* b, G  w$ r
  632.         }        * P0 B3 I, _6 f" V' F/ p
  633. }+ W2 E: F' s# G
  634. / R1 d) d# X8 `2 x" E
  635. BOOL bFirstChar=TRUE;# k2 Q, J3 O( c+ \- }- C& h- m
  636. / s5 o4 F/ ^4 t& B; D
  637. BOOL CRevAppApp::OnIdle(LONG lCount)/ U$ z: s8 U2 X  H/ r
  638. {
    : v4 R- [% y" U- g  h. }. L5 E
  639.         // TODO: Add your specialized code here and/or call the base class+ H) o4 P- O+ Q/ ^
  640.   switch(dwProgramState)
    0 P% W3 Z3 x7 W1 Z: x, Q, y
  641.   {
    , n; G1 z( |, t# w
  642.   case AP_NOTHING:
    " w9 m% v: t! B0 L5 D2 e
  643.     switch(dwStartUpSteps)
    1 ~2 u, r9 S2 h4 v
  644.     {
      W, S0 Z. J4 ?4 v! S
  645.     case 1:
    $ O& u8 T! u* y- a; ^
  646.       {
    2 h' t. _2 e* T; u
  647.         int i;( t$ }  Q! y! u+ G/ H
  648.         CDC *pCDC=dlg->GetDC();
    5 ^- t( s9 |* ^0 ^7 G  l6 g; [. q# [
  649.         HDC hdcwnd=pCDC->m_hDC;
    $ @% M* _0 l2 y0 |
  650. //        Graphics graphics(hdcwnd);" s( a( X  n7 {8 @* p7 v6 W" B- [! A0 G
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");* C) [- @: F$ M  ^; I
  652. //        INT iWidth=bitmap.GetWidth();, \+ M3 U" _5 Q. \) ]( b
  653. //        INT iHeight=bitmap.GetHeight();
    - e7 B! D. q* F4 B, n
  654. //        Color color,colorTemp;) C2 `, q; ^5 O% k  M
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    + M$ W2 c. ^6 j3 B
  656. //        {
    ( ^! G- G$ l" A9 H
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)/ B% t  e8 K; b$ X1 d
  658. //          {
    ) q: G; ]& R0 I! `' |" Q% X
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    " @, ?8 f" P. P4 W
  660. //            colorTemp.SetValue(color.MakeARGB(" R1 O3 r; {  ^& L( h& j$ c* t
  661. //              (BYTE)(255*iColumn/iWidth),
    2 y& U6 d% B& V( f" f$ l" O8 g+ R* X
  662. //              color.GetRed(),: \) O' c( U0 q$ L& A/ ]
  663. //              color.GetGreen(),
    . q, ^( J# l- A' i! X
  664. //              color.GetBlue()));* x9 H0 z0 c$ m. \
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    6 ~6 w7 Y% L$ _  G: \! w
  666. //          }
    8 z3 D, R6 I' j. l
  667. //        }/ I$ L5 }0 n& @; H
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    3 H5 G; ]0 G* r. I9 k( ^3 l! [: t
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ q+ E& C) E, ]: @
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    / Z( w- C5 L9 t% k5 E) T
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");  V8 \. I. F$ y8 b! e
  672.         for(i=0;i<240;i+=8)
    ) ?5 j# @7 w# m4 f2 K
  673.         {
    + p- Z; J; {4 D/ l. e# s( r
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # b0 z! n) P% s0 g" B0 H
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! b' C1 \% Q& Q1 y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; L+ \4 O, m6 I
  677.           Sleep(33);
    7 H6 p- u" `" ?5 z3 o5 `
  678.         }
    # M/ G; I0 G" x! d0 Z2 n0 e# w
  679.         Sleep(1000);
    4 N6 H1 S$ K) R* i/ k+ N3 B
  680.         for(i=240;i>0;i-=8)
    ! t- Q* D5 k' C
  681.         {3 M/ A5 q: n; K% V4 X
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);3 w7 D: b% s% \
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : a! p) @9 r  ~) b5 C/ u/ y
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # {+ }6 a# P" c5 Z/ d
  685.           Sleep(33);' ^1 D+ u/ h5 r& N; q
  686.         }
    ) O3 U$ u# J8 ^  K; F! V0 k* j
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    $ C, d$ V1 _7 ^$ L! l' E( [
  688.         dlg->ReleaseDC(pCDC);3 E/ U: p( Z+ |7 _: \
  689.         DeleteDC(hdctar);
    3 ]" i  s9 [4 W% T
  690.         DeleteDC(hdcsrc);" Z1 c$ H, [) }+ b$ H2 n
  691.         DeleteDC(hdcorg);
    % U' z- y2 m$ C1 h1 D
  692.       }( J; e( l. n# Q' d
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    & [7 X% w! m( i4 T# ~! h
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    1 J% I: R- U; f
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");4 v. {7 a. {( |( y! B5 o
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ) J6 e  D3 _% z. y! M" h
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . o" Z+ F4 c. B  e' C1 p/ J! g4 a
  698.       if(!Dn.Connected())( }# ^/ |' S* C" ]& c: M
  699.       {( z" F8 r# G4 D1 I+ {0 G9 d
  700.         dwTotalFiles=1;4 Q, f& p4 U! O( v8 n% G3 T$ d
  701.         dwDownLoaded=0;4 M: ]$ B4 y1 ]/ L1 T
  702.         bSilentStep=TRUE;
      \9 V0 ^) `5 M( n/ K/ R& H8 d8 p
  703.         bCompressed=FALSE;
    2 U: _1 X/ Z' u" P1 h7 L
  704.         strExtLocal.Empty();
    4 Y! c7 |+ S2 m
  705.         strFullName="readme.txt";
    2 z" H- |) w# `9 ?
  706.         dwProgramState=AP_CONNECT;, V" l7 ?" w1 S- `, v3 G
  707.       }
    + U4 D) x6 f0 n3 O  g% S
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();9 S0 M* q) a" j4 R( y
  709.       dwStartUpSteps=2;
    6 z# Z9 E+ _5 X
  710.       break;
    5 P) I7 p5 ~& S3 `. q
  711.     case 2:0 C/ q, h1 V4 M  V% g- O
  712.       {
    8 r6 }4 p  K' D- B
  713.         int iEOF;- g, V1 i$ [$ J" J8 f
  714.         FILE *fp;
    3 p; H/ D$ g8 ]3 I# W5 ^
  715.         char szString[512];
    " N9 y' p+ b0 L4 K/ p
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
      d4 Y* N+ f, T5 M3 T: ^, \7 x
  717.         if(fp)) q- T# l- h+ j0 k
  718.         {
    $ a# C: p* ~5 {) T+ j7 U
  719.           do
    1 [6 a: H8 b+ Y1 C# {( q
  720.           {3 z$ S: g' @" ^  o% c* T
  721.             iEOF=fscanf(fp,"%s",szString);
    ; e8 h* [8 C" B7 P3 ~5 P3 x8 j$ Z  y
  722.             if(strlen(szString))
    6 `  g5 x4 N2 W( N6 O% t
  723.             {
    5 w9 L; x& j2 M& {3 U$ R9 U
  724.               if(bFirstChar)
    " Q* I0 M- q4 \: l- z+ c4 ^
  725.               {
    ; S4 }5 l7 ]2 G) W: @! X
  726.                 bFirstChar=FALSE;! y# X: }1 p0 J
  727.                 bConnectIsBig5=FALSE;& B8 X+ u& i0 j7 |. [3 X
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    + s% N+ w# w! j1 P
  729.               }
    2 P2 d6 ?# C* R7 m3 |" W1 X
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    $ s  F! h$ f- t) ^8 B0 t. r
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));  \! d$ L9 V3 M1 D. y1 h- Z5 s
  732.               dlg->m_ListText.AddString(szString);7 A$ b6 o5 a% e! t
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 p% m# z% A, \  J. W- C; S+ A- o; z
  734.               *szString=0;! ]0 b) q- u/ c4 m  B' J
  735.             }
    / i3 F8 R! w$ q6 \- ^# }) u# M8 P6 e
  736.           } while(iEOF!=EOF);
    # M5 G  }3 D7 b: D" a7 y/ K2 \
  737.           fclose(fp);
    & n/ W) k8 s& _% f! W
  738.           unlink(".\\DownLoad\\readme.txt");  C7 \) Q7 D$ ?! ^
  739.           dwStartUpSteps=3;
    ( \2 d4 z. M/ M& Q
  740.         }
    1 i$ H# }) B5 o# |7 U: F
  741.       }  n' {' n* a8 |. m+ D4 O
  742.       break;- j; \4 d9 m* Q% l) T  y6 s7 T
  743.     case 3:
    ( z8 e  J# U$ Z* E/ Y, u
  744.       if(!Dn.Connected())
    % e1 o8 R/ e3 T8 M
  745.       {
    " S* r0 v- p3 o9 m8 y: F
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    0 Y- H& f9 \; X3 }+ V* i8 a4 X6 R: X
  747.         dwTotalFiles=1;
    6 j7 J8 H  J0 O) ~! v
  748.         dwDownLoaded=0;. V$ T; m  p* Y) l6 G& `$ J; @
  749.         bSilentStep=TRUE;
    " k0 _. [7 N. K! j8 w# c' O
  750.         bCompressed=FALSE;
    $ t- Y, E; i5 Y
  751.         strExtLocal.Empty();
    2 \8 v0 i0 C! H7 ^" D8 W
  752.         strFullName="checkversion.txt";
    ( _$ o* {* {7 z' Y2 t
  753.         dwProgramState=AP_CONNECT;' z4 Y+ f# @2 \. E& Y# O- s) U
  754.       }3 l1 V' _7 ?5 R! U: q. |  ]
  755.       dwStartUpSteps=4;
    2 @' t* ~; W$ V4 ?" y  U# p
  756.       break;6 y$ _8 w0 l3 k1 E% r6 O
  757.     case 4:
    # L% P* _- d8 i" y8 K
  758.       {
    5 |5 S$ [! {7 a
  759.         FILE *fp;
    7 [9 x' g6 W- V4 r( E" F% Z3 `
  760.         char szString1[128];
    " t5 f/ O: [& s' h/ q
  761.         char szString2[128];# ^0 a# E. M% p" d
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");1 @- ~+ U/ A+ I2 U) u" t
  763.         if(fp)& X& e6 u! H1 j, S
  764.         {
    2 s5 J# O8 w. C" u9 P, x
  765.           fscanf(fp,"%s",szString1);/ b8 Y, E& a/ {
  766.           fclose(fp);
    # E% s! f3 ^( f% B) k) f
  767.           fCheckVersion=atof(szString1);
    8 u! r0 D1 U4 |/ I5 @. P5 }0 d
  768.           fp=fopen(".\\checkversion.dat","r");. M4 o. B4 }, H# J- i& @0 u
  769.           if(fp)
    4 E$ A' P; i. j# c5 v" n
  770.           {
    : B' {' Z2 F7 O5 {% e" q" j
  771.             fscanf(fp,"%s",szString2);* A* G) F- P9 X
  772.             fclose(fp);6 n! e% ^+ c' y' Y
  773.             if(atof(szString1)!=atof(szString2))( Q7 o6 c& ?7 L, d7 y/ P
  774.             {
    ! L, u0 K4 {; F( Z  w4 G% m
  775.               if(!Dn.Connected())
    ' l0 m; w' W) p, h7 m; J+ K
  776.               {4 K9 Q- a- B2 ?' O: w9 S/ J
  777.                 bFirstUpdate=TRUE;
    2 h  m  u4 G1 ~1 y" ?- k! o$ }
  778.                 dwTotalFiles=1;
    6 F$ Z& T% O- _% P( T, ?6 Y/ v
  779.                 dwDownLoaded=0;, ?. e) [/ v' H  O+ U/ z
  780.                 bSilentStep=FALSE;$ g& B2 _5 ?! v
  781.                 bCompressed=TRUE;
    0 ?$ ?2 K3 b: n& e, V3 x- ^; h4 g9 |
  782.                 strExtLocal=".\\DownLoad\";
    . @; U: D$ _! }7 g* T
  783.                 strFullName="update.txt";- C7 C4 J% g/ Q3 g* C8 h& c
  784.                 dwProgramState=AP_CONNECT;" G2 S: r, Y8 G+ C
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");6 m4 r1 Q7 E* b# Z* X# q$ i
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) q. v4 Q4 E* U- P4 n. B( h
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 Y! g" e$ U8 s  h+ O
  788. 0 _) a  g8 A/ e5 v/ Q; Z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 \" B) b, U5 U6 L9 ~# F
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    1 f1 j& j( X) @& T5 l
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)2 s; J$ y6 i$ D
  792.                 {8 E# h' @6 G( W
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");' f6 W" Z4 i- y
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");+ m& H% C, B) k4 Y8 I3 C; E
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    % u, U* c* s. P' z& V- d9 B
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 e  `5 B" O+ R7 b
  797. * K- r1 I9 V  [9 s' p
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      r. B6 Q& U0 _" v+ L
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% A. p$ r  D$ e" x4 b
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! q4 B4 v6 C% q1 [* l. D
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 X6 Y: u6 O' d, t6 Y- I+ y
  802.                 }/ {+ t3 P+ q+ W
  803.                 dwStartUpSteps=5;2 }2 Y% X! h( y" U
  804.               }
    . m; E" o9 L7 c0 i
  805.             }5 s) w- W/ p9 y# ^+ s& i
  806.             else2 V5 d2 n, g& o: v
  807.             {5 \& {) w/ `; p) U
  808.               unlink(".\\DownLoad\\checkversion.txt");8 d& J& x7 K$ w0 J, i
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    % y7 q0 W+ x# I
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 W; N3 W0 d5 @( ^
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ! K" C. ]" I8 N+ \. l) [
  812. # @2 B  m9 d* q6 w
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ `+ \: s/ S0 L, {
  814.               dwStartUpSteps=99;
    - R- `3 [9 V/ j& O. @( L
  815.               bFinishUpdated=TRUE;
    : E: ^2 T( m& N" Y1 N$ D# `
  816.               bCanUpdate=TRUE;
    3 }8 B+ j+ n8 }; K- u  f& o/ S
  817.             }& j; k" E$ [8 J  I0 E, @! S0 G
  818.           }1 r: \# l8 k4 z- `9 A- b" j
  819.           else
    ; [# Y$ J; y: p0 \9 d" G& V% V* {
  820.           {
    ; n' g9 ^* o3 C2 n7 z3 H) H9 q
  821.             if(!Dn.Connected())1 @* i7 D& k" {& J3 o
  822.             {% N/ |5 J5 V: ~) b0 H, n
  823.               bFirstUpdate=TRUE;9 d2 a' J$ f( \7 n  a* T
  824.               dwTotalFiles=1;
    - J6 `: a# Y* o& K
  825.               dwDownLoaded=0;. t- t2 D* ~* l7 u
  826.               bSilentStep=FALSE;7 H. ^- `, r) p$ S# s2 L9 P
  827.               bCompressed=TRUE;0 u) D0 N& x  m5 `+ @- Q" W
  828.               strExtLocal=".\\DownLoad\";
    1 d, [. f0 P% U% R4 {) q
  829.               strFullName="update.txt";
    5 b! ^) i( I* |/ ]( a+ n
  830.               dwProgramState=AP_CONNECT;
    " v0 d& T4 e' r9 @2 U3 g
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 ?+ E5 x$ \( ?2 r
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. t4 q  b8 m9 {
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");2 ]4 M) Q3 E2 d) m& r) v2 j
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* t! s$ \1 y, g- `
  835.               unlink(".\\DownLoad\\checkversion.txt");# Y& N' r& \7 {; q& h
  836.               if(GetFileAttributes("Wsa.zip" )!=-1); ~7 v0 H  M' q+ h, z4 e2 f
  837.               {( A1 I1 n- d4 T2 C$ H
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");  H# _; S0 d9 h' l* J# k5 [6 T
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    # M6 W4 L$ {! _' H
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    3 K) ]" N: K1 o1 _" s  l
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : h" A2 l9 r0 }/ x; Y1 N# \
  842.                 . u( b9 g9 y$ {
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    2 j# w$ f6 r4 y: @
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 u1 e+ ?: L3 Z6 H
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 \' {( O: e6 M, r
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' i0 v  L! L$ V! [& q/ S. Q2 U3 v
  847.               }
    + F( G# r% h1 y) v
  848.               dwStartUpSteps=5;' A6 K3 Z' T  B1 W0 L
  849.             }% Z7 i# t! ^! c) c9 @7 m3 S
  850.           }
    . B4 n+ L! g( O5 U* D
  851.         }( t- M( O7 e7 B% i6 J* ~/ B0 u! z
  852.         else
    4 s8 m5 i% L0 T8 F/ \
  853.         {5 M3 y  L1 h6 K/ M+ W) m% p
  854.           dwStartUpSteps=3;, H0 _; l8 M# j0 \( N+ z
  855.         }3 `1 w& F+ ~8 v: K9 S6 q
  856.       }- u  O2 n# f, Z1 S5 C, c
  857.       break;1 \* X# s" b' U, \+ r+ a( m, W
  858.     case 5:1 J' n; i1 M, {: A
  859.       {
    $ ~( q5 }, `. s, v6 t0 A
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)( N* _% Q( E5 P
  861.         {
    % b: l2 T- S* Y+ I" _  [; k
  862.           int opt_overwrite=1;
    , }% j5 a4 K1 `- {: j
  863.           int opt_do_extract_withoutpath=0;2 u3 u0 @2 l& e: r2 j8 m
  864.           unzFile uf=NULL;! r4 a/ M3 O- e" [  t: H+ i

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

/ |. z+ w# b- A1 \1 X

評分

參與人數 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客服返回頂部