找回密碼
 立即注册

CSUpdate.exe源代码

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

4 F2 W7 x  K( u$ n
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ! g$ ]7 A! x5 n- e6 B4 w
  2. //; F& E% ^/ Q8 `/ }! T8 ^5 E! v  z( |

  3. 9 f" u9 A# E7 N. l0 r$ Q
  4. #include "stdafx.h", m5 U8 W0 O+ C! S3 N( d

  5.   q: T1 D9 z' J
  6. //#define UNICODE
    $ _1 u" K' [9 v9 j& N* n) u
  7. //#include <gdiplus.h>
    / m% C, A+ v+ \
  8. //using namespace Gdiplus;1 ~5 W& o0 p  L
  9. " J* E5 o" l1 ~0 l# @3 c  R& h
  10. #include "RevApp.h"
    / W: Q! W) D. r
  11. #include "RevAppDlg.h"
    , r  w0 X/ L! E2 _

  12. ; p4 K& ~2 Z6 ^/ E/ o
  13. #pragma warning(disable:4786)
    + }8 R9 ~( X1 F/ e
  14. #include <map>: e3 M% [2 I  n& ?7 Z; z/ k
  15. #include <list>
      s) H, \0 {  ^. x& c
  16. #include <direct.h>
    7 k; S( F& w. r+ U4 z; s8 `1 ~

  17. * K) Y% t$ P: s( N' O- O' d3 p
  18. #ifdef _DEBUG' ?5 P5 M) ^; U- R- P
  19. #define new DEBUG_NEW0 p% G4 p! E5 f) _4 S
  20. #undef THIS_FILE
    ' Q. }, ?( v, X8 }
  21. static char THIS_FILE[] = __FILE__;
    4 K3 a" O* Z; _3 f
  22. #endif
    % x  G, b) y' s7 A
  23. #include "SkinResDef.h"4 {8 o) C8 V- c1 Z: s) A
  24. #include "ChangeBG.h"" `3 F' }, p2 Y# p
  25. #include "AFXINET.H"! {, N6 Y6 d" c8 A3 d

  26. ; N) s. i' d, o, ]2 I
  27. #define TRADITIONAL_CHINESE 0
    ( N7 j% V+ H2 H( E! L0 \; R, o- h7 M
  28. #define SIMPLIFY_CHINESE 1
    0 _$ q. l# g6 m' {
  29. #define ENGLISH 2
    ' r3 A( Y, U+ w# a
  30. int m_iLanguage = ENGLISH;0 }" }" c' [% M8 S/ P
  31. /////////////////////////////////////////////////////////////////////////////9 G8 S" J/ S8 Y2 i7 {* R5 Q  a
  32. // CRevAppApp
    2 s$ x% q/ T  j, _' a/ b
  33. % P5 ^$ }! q# ~) n9 y+ Q1 [
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    & x0 I: @6 T4 o: [* |
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    " z0 `- E( r2 w7 U; L
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.+ g: Z+ ]; b. E4 d
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!* @& c. G8 \: L' l$ e4 I
  38.         //}}AFX_MSG
    ! T: I2 H* c+ e, f0 n% }% ^% k
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    - |3 ~1 C- ?8 Q- \# l3 B$ [8 h
  40. END_MESSAGE_MAP(); C# f; |) ]" v! n
  41. . `4 H& ]$ I9 y- _- M$ B
  42. /////////////////////////////////////////////////////////////////////////////
    - s7 F$ K- f- h4 b, i  \) X* T4 @
  43. // CRevAppApp construction4 w/ l2 p. [' r% t' K5 B7 Y3 w1 J0 q

  44. ; j5 t+ ~" X' h9 T/ Y8 L
  45. CRevAppApp::CRevAppApp()' w, T  `; D5 ~, W  a& x
  46. {
    7 _" y5 X6 n' o, O; w
  47.         // TODO: add construction code here,3 q4 S- \8 S5 z( m- o
  48.         // Place all significant initialization in InitInstance
    $ N$ \7 _8 c, f, H) }- m
  49.   bDisplayIsBig5=FALSE;0 j2 i6 J3 b4 v9 p, L' u
  50.   bRestartUpdater=FALSE;( e$ s+ h( C6 h  A( p( K
  51.   bFinishUpdated=FALSE;2 T) |6 P5 u9 j. N8 |. d) J
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    & _; z6 V1 G5 t  Q
  53.   InitChangeDataBig52GBKS();
    4 J  l  @* b' L8 }' H; A2 y
  54.   InitChangeDataGBKS2Big5();
    0 R% v; I6 p3 V$ y/ Z: m, u
  55.         /// P6 [. @+ V8 N  L5 G; X* E, ?
  56.         bClickRunExe = FALSE;
    3 W  ~! o2 r2 ]0 `) J
  57.         //
    + q+ M/ _6 J% d1 R" a4 C/ ?
  58. }2 s& `$ z* q7 h: f/ G8 ~+ [
  59. , e/ B+ J6 A+ `& b( R: D/ x
  60. CRevAppApp::~CRevAppApp()7 i7 r- M1 B! @) q9 j
  61. {
    5 D/ q6 D4 q+ [. l
  62.         // TODO: add construction code here,: y  y% {; s* h5 O2 ~2 V$ r" t* t, k
  63.         // Place all significant initialization in InitInstance/ y6 V/ W: ?6 Y+ Z/ J
  64.   EndChangeData();
      V* V" h, M% Q. F
  65. }1 G! {* u0 N! u' A# d( @. q

  66. ) Y5 P. c3 N1 r8 W# Y" c* \; f
  67. /////////////////////////////////////////////////////////////////////////////' C  ~% h2 Z4 o2 B( c3 J
  68. // The one and only CRevAppApp object
    ) |2 g5 W& e% H! u+ F* Z/ ]
  69. : w4 Z$ L3 B" J/ q! @8 G4 @9 e
  70. CRevAppApp theApp;
    3 R: ~8 P% c, b' T  H" Z( f
  71. + g& r6 H! z# `8 y4 ^/ Q/ W% w
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    / v" h, s6 F5 l1 N* D0 z
  73. {# c* H2 u# S, D# ?% {
  74.   int iEOF=0;
    ( ~+ m2 n  f7 I# N& L! w5 n! V8 K0 u
  75.   char szTempName[MAX_PATH];+ R& W$ c, b. ?5 z3 [
  76.   *szFileName=0;  ]: K) v  ?- I/ w( f1 Q
  77.   iEOF=fscanf(fp,"%s",szTempName);
    & _8 _- e; \  z' v- o0 H; P/ `
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    4 `7 x1 ~1 C1 {1 H4 \$ M6 d
  79.   {9 k  N2 v) \! s
  80.     strcpy(szFileName,&szTempName[1]);( k/ W' Y- |* R6 ?& X3 C& ]/ u
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    $ K' B: ^9 \0 s4 Y* f! L
  82.     {. g2 J" r  ?8 `5 }& w
  83.       iEOF=fscanf(fp,"%s",szTempName);' K* C! M: s8 b3 [0 n) X
  84.       strcat(szFileName," ");
    $ v6 [# P7 n+ I
  85.       strcat(szFileName,szTempName);% w7 z, m5 n% q4 x9 ?, R2 n+ g
  86.     }: ]  H& R; n5 Z! E0 z
  87.     if(strlen(szFileName)>=1)
    7 H; Z3 I1 A+ g* C8 M. M
  88.     {- k/ i3 a- z. W  Q
  89.       szFileName[strlen(szFileName)-1]=0;
    $ v3 Q% \* q$ H* r
  90.     }
    ! t" i) K* y$ o
  91.   }
    # g. w4 Z+ I# j8 B2 I" f' D& t
  92.   return szFileName;+ Z8 d* [" i$ }4 ?# r( }
  93. }
    2 x4 d8 |+ N& p7 b1 t
  94. 4 W/ V: ?5 @8 R' Y& _
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    7 C% Y! E7 ?, E
  96. {8 t' Y2 i$ H" H1 r
  97.   FILE *fp;
    - K; Q: D7 Q8 n2 I2 g* f+ Z: x* s
  98.   char *key=NULL;
    2 q. w* X; C7 k) y1 ~+ Y
  99.   char version[MAX_PATH];
    % j& o7 w7 ^2 m
  100.   LPUPDATEFILE file,olds;) @) m4 O( g& v
  101.   std::map<CString,LPUPDATEFILE>::iterator p;; \3 Q- O: r2 v  A/ e

  102. % M/ Q- x7 C. m) r' O. Q
  103.   UpdateList.clear();
    " F% G4 T/ Q$ I
  104.   UpdateFile.clear();! H" M  {; g4 C6 }- r, r
  105.   if(GetFileAttributes(filename)==-1) return false;
    ) i" i; `! \& P, Z' w6 W
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ! C  M/ E4 C# Z4 ^: m
  107.   fscanf(fp,"%s",version);
    0 L  `8 i" e5 I! \* U
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    7 |7 b2 V3 N1 K( u: o( R
  109.   while(fscanf(fp,"%s",version)!=EOF)3 k: J8 [6 i& A( j
  110.   {
    " y# k  F% A5 c
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- I' M" c) m! d0 {2 r
  112.     fscanf(fp,"%s",file->path);
    % u' |6 x: _9 x
  113.     ReadFileNames(fp,file->file);0 i) g4 v& P4 u& s3 f7 Q9 @
  114.     strcpy(file->full,".");4 E- S  M9 C. ~7 S0 d: L! I
  115.     strcat(file->full,file->path);. B/ u$ D: [' |7 ?
  116.     strcat(file->full,file->file);
    ! \( P. Q, ]* u. m& ~/ s5 ]; f5 o
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& X4 t* T1 ]( Y9 X; J+ L
  118.     {
    ! k! i& \' L( z& Z
  119.       file->vers=(float)atof(version);
    ( E$ i8 E4 @9 L- F) W( M
  120.       UpdateList.push_back(file->full);+ P$ w, P6 x- j  E& l9 x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));6 E) S8 i7 j$ i! P! B
  122.     }
    ( I0 u0 v+ `* Z9 T- \$ X
  123.     else
    . q5 s; o7 R5 S2 v2 ?0 V
  124.     {
    * H. @+ g" a" O0 I, D9 ~. J
  125.       olds=(*p).second;6 m5 X6 c  {* c: B% p7 ]& a! b
  126.       if(olds->vers<(float)atof(version))( m; Q' o6 q( K* m6 h# O! W7 {7 |. }
  127.       {
    % ]5 s9 M+ {0 i4 U0 S
  128.         olds->vers=(float)atof(version);
    1 F" u; j/ n! A  l7 C' p) _
  129.       }  M4 G9 P5 f, P: S3 \) O0 x; W: y
  130.       free(file);" Z0 S  O# `7 X" ]
  131.     }: A% w" b4 P  ]) O$ P- X% K
  132.   }; W; r; x4 c1 G2 Y3 a  z. |
  133.   fclose(fp);
    # G. V3 p. y1 r
  134.   return true;
    6 C# f, a  M; ~' E6 _
  135. }, {' A' @0 H* h, O* {6 @" c* ?% I

  136. ' {7 J* J/ P! Z* m" E
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)0 d8 [  v" P5 i& f5 V
  138. {0 N- _9 n1 s' Q- ?* q1 m& ?
  139.   TCHAR  szFull[MAX_PATH];
    : n$ L& Y" d3 j# D& I6 @, s  ~& c$ {' |
  140.   TCHAR *token,*inter;' \( \5 O, D' e7 j, Z8 u( }
  141.   *szPath=0;
    + _' q& y. H! G. X" O3 |
  142.   strcpy(szFull,szFullPath);) s( k: b, j: y' H5 j% n2 j
  143.   token=strtok(szFull,"\\/");+ {, q: \9 m; s" d' c1 @& t
  144.   inter=token;( C. W1 ^2 e7 Z8 J2 Y
  145.   while(token=strtok(NULL,"\\/"))
    / \4 F/ T: m" k. U- c+ \! }
  146.   {/ o3 r6 }5 j0 W0 Y% ^
  147.     strcat(szPath,inter);: w# _# _; Q9 n$ w5 _' h/ X9 p. ~
  148.     strcat(szPath,"\");
    ' y! O! Z6 I/ T3 |) J& ~; B
  149.     inter=token;) d* m  C2 P3 i( X2 B1 Q! T1 T3 n% {
  150.   }# r1 E' I1 N1 x* Z
  151.   return strlen(szPath);
    - O# g; G9 ?2 T7 ^
  152. }
    4 g4 l" `% a! S. l1 e: k  S

  153. ! [6 {6 s2 Y; |! E9 z4 b
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ H9 t* I; f# n
  155. {0 G$ `- ~4 b# z" Q
  156.   DWORD attrib=GetFileAttributes(Target);" U' F. @! i4 X6 W, B' c
  157.   if(attrib!=-1)4 X5 u! r2 ^: m, t
  158.   {
    0 [' g1 J' c# f5 d1 D& f! G+ b6 b. M
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    # N3 S& x0 O6 X" B( H
  160.     {
    - l$ a5 x6 F2 P0 c( [
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    % E! C9 W& Q+ U: `$ I
  162.       SetFileAttributes(Target,attrib);9 y/ z* \$ P. H% n* y$ D0 B3 I
  163.     }% H# b9 W4 F! t( s" p
  164.   }
    9 p8 \, O% t" C- y
  165.   CopyFile(Source,Target,Erase);
    2 V. f( @* A& m( y. n  g3 v- i
  166. }
    5 Z+ L8 {$ v+ y, X! c4 R( m
  167. % T6 M( z; K2 O" a# p( C
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    + y0 U$ ^# B1 T  ~" p
  169. {
    3 d4 C7 J4 n1 j! Y' k# ]' z" i4 k
  170.      FILE *fp;
    4 p+ @; R0 r' {( b% h9 z
  171.      char  szBuffer[8192];; {# A: Z' {6 e4 f2 O5 t  t
  172.   va_list  argptr;0 @8 ]' c: n3 P2 l) m
  173. - k/ O0 }0 ]. n  k; e8 O
  174.         va_start(argptr,message);! M8 T9 v! q" }9 }1 f* [' g
  175.         vsprintf(szBuffer,message,argptr);
    1 M1 V1 ?; R% p, [; @3 h7 ?. Q
  176.         va_end(argptr);
    ) P) w: ]1 [/ c/ Y& `1 t
  177.   fp=fopen(FileName,"a");7 @1 c4 \$ o% X$ A% a
  178.   if(fp)
    & j; c  v6 x: r
  179.   {. C4 h' q6 @$ n8 Y1 n3 a
  180.     fprintf(fp,szBuffer);
    7 c4 d7 B/ P! z$ q
  181.     fclose(fp);# N0 z5 J/ Q* v
  182.           _flushall();" l/ p, G- D  s- a4 I
  183.   }4 c/ Z0 [( P$ k& p! k! v
  184. }" O" r+ M* R% `( h) Y
  185. 2 M' T7 d: `- R
  186. BOOL CRevAppApp::Fclearf(char *FileName)! C) R- z9 b3 i* J
  187. {8 P: V7 x/ H0 v: {, ~! f+ e5 P$ b
  188.      FILE *fp;1 d2 u1 b3 [" L$ w8 z
  189.     DWORD  attrib;
    0 ^5 g+ R2 _& k6 d' X/ Y! q$ d
  190.   attrib=GetFileAttributes(FileName);$ H3 s2 \* ?  ~4 p
  191.   if(attrib!=-1)% _$ E5 C5 T) a, a
  192.   {+ O, ?/ t; }2 U; f: d. S
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);+ g) @6 }2 ?: }- N  O# r
  194.     if(!SetFileAttributes(FileName,attrib)), S' j5 T. z) r* j. c: d. t
  195.     {
    3 X+ p2 u; S+ f+ w& X$ t/ G3 w- W
  196.       return FALSE;
    2 ~+ c9 V3 a4 x2 E- H
  197.     }
    / ]: X, p; }# i$ A$ C# {  y2 A
  198.   }
    " v8 ]% [/ m- E6 A
  199.   fp=fopen(FileName,"wb");
    6 R0 v6 h1 U, ^: ]) r2 V8 K
  200.   if(fp)1 n& Q2 d7 t4 i4 ^7 x  V. U, n
  201.   {
    9 {& x" g! I# I, l% \! \
  202.     fclose(fp);" R0 e) v, y8 E! f* n7 b! C. x
  203.   }! ^& d% |: R3 t8 d' h
  204.   return TRUE;) x5 C( B# q  G' i/ `) N5 C) T
  205. }
    # C( m8 I( E( G
  206. 3 o! j8 H- B6 m. o
  207. BOOL CRevAppApp::UpdateLocalVersion(void)* s# z6 x: h' Q, Q9 X# K/ B
  208. {
    2 d7 p1 E& b7 R: R6 V! X
  209.   char filename[MAX_PATH];) q/ g1 T1 F$ y- c
  210.   LPUPDATEFILE file,olds;$ N4 G7 g2 p8 @1 q# ?  @7 _
  211.   std::map<int,CString>::iterator i;4 g1 l- ?* a% V# f( T$ ]8 ]
  212.   std::map<CString,LPUPDATEFILE>::iterator p;: V- `& |( B  t5 A! X
  213.   std::list<CString>::iterator l;2 z$ r2 e, E  s/ v. H

  214. 9 {- B. M2 N/ e8 `. k, W& Y# p
  215.   if(bFirstUpdate)3 a( a* L1 F, }1 f5 V/ ^" t  [, p; R
  216.   {
      L' s8 Z6 n! w/ U- g
  217.     dwCurrFile=0;( I+ n5 t  o' J9 A8 p" `3 Q9 r
  218.     bFirstUpdate=FALSE;9 n, L) Z' T+ z9 w! _3 C4 B
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . _' H6 M- @# h; l" \$ A
  220.     {
    ; n- F: D6 N# ]1 B1 W. m: ~! F
  221.       dwTotalFiles=UpdateLocal.size();) Z4 W- D9 T! `  _" R2 p
  222.       dwDownLoaded=0;
      Z8 ?! {7 r. z" c" j- @) D4 u
  223.       bSilentStep=FALSE;
    , P; n: _1 K. Z& i/ D+ O
  224.       bCompressed=TRUE;- _- j5 v* Q& H5 b8 ?) y7 f, t
  225.       strExtLocal.Empty();5 z2 |5 F% c. g% g/ o% S. t
  226.       strFullName=(*i).second;5 u7 h( x* Y: Q1 [2 R/ J
  227.       dwProgramState=AP_CONNECT;: `7 ?  C. P. z& v$ o. c
  228.       return TRUE;# ]" y4 A9 ?9 ]; \. p% J/ {4 |
  229.     }1 k4 |9 e2 d3 s) S9 k8 ?8 N
  230.   }
    1 ~, D/ k! O! g$ n6 Y
  231.   else if(bRestartUpdater==FALSE)
    1 |3 N7 x' {3 ~8 a) n) |
  232.   {# J9 F" [! L" M  g: E. f; |
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())8 j$ E' Y$ l" j5 E
  234.     {$ P. h9 {3 r3 k9 g3 l
  235.       file=(*p).second;. W4 x5 j. J3 x. M: y0 j) I+ C
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())/ i1 b" n! I6 v0 |) c  I  R! ~7 ^
  237.       {# s2 t! \2 n1 T, s9 z
  238.         olds=(*p).second;
    : h' ]$ V- w5 s
  239.         olds->vers=file->vers;
      F- W* m$ W* _3 @& F- J
  240.       }
    * A2 u9 F+ G. r  u6 A% G2 I
  241.       else; @  S3 k0 ^8 u
  242.       {
    " r% D8 ^7 S* ~; y! R
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * C1 z9 K/ q' j; k* M: f" O$ y% I8 B
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ; H: l! z0 f' g9 V$ t- O* I, e( d
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));) Y, t! F  Y9 A! o  ]# }" |
  246.       }
    # ?( a7 b( Q; }$ c
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( t. |7 S; r0 ?4 A6 ]
  248.       sprintf(filename,"(%s)",file->file);
    / {! S$ Q. G. F* h% p' I
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' \4 `" m5 N2 e- i( t+ x  o2 w1 ^
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    $ {" }  O* o0 C$ u. B
  251.     }1 g' O* G# }# P" x$ `  N
  252.     dwCurrFile++;
    ' @0 m/ b) {& M2 b' @- D
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    , K/ n: S8 T( V$ L+ ^
  254.     {/ f! |$ }7 @4 i4 t3 p4 k
  255.       bSilentStep=FALSE;
    - k- Y4 t3 ~, q( Z
  256.       bCompressed=TRUE;
    1 \$ _+ e4 N2 V5 v* u: y$ x
  257.       strExtLocal.Empty();& C6 @! m0 g! Z
  258.       strFullName=(*i).second;7 W* W- Q! T+ f/ H
  259.       dwProgramState=AP_CONNECT;
    1 F* Y- T) O6 K$ M( m$ t
  260.       return TRUE;4 |- E4 j, K- `0 ^9 v% P. n' H& i$ K# B
  261.     }
    3 ]# l8 w" g9 `$ Z9 P
  262.     if(!bRestartUpdater)" d% g5 D, T9 q3 \- C
  263.     {$ p0 t: v8 l- ?; s; S
  264.       int iCurrSize,iFileSize;
    1 @  {  i0 ~& i: Y
  265.       iCurrSize=0;$ u. V; r/ F, r3 k# `
  266.       iFileSize=UpdateList2.size();
    / v- F4 \- x; w
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");' i2 \8 ?) s8 Y$ z" Z
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");: N! v8 E# T/ g" Q: H" `
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ( @6 Q# ~8 c6 W5 M# e" O! W
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' E' y* `+ j0 L" h! X! ~
  271.       Fclearf(".\\update.dat");
    / \- e0 N1 u, u$ F6 T, L
  272.       Fprintf(".\\update.dat","Bloodyf\n");' D7 h2 B3 t6 [  n1 D
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " ~9 w2 S( L8 f, n: t
  274.       {' I3 P  @* `* I" |/ }$ u
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    . |: ^8 [! G6 Z: ]% Q7 N
  276.         {
    ( V) W' _2 r0 O( P+ A7 [# x  m8 D
  277.           file=(*p).second;
    ! s$ ?$ l) t+ s: H/ I
  278.           sprintf(filename,"(%s)",file->file);
    ! _4 |; h- V# W
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & Q  f" h) {& Q3 p: U1 z
  280.           iCurrSize++;
    5 S% R4 }3 O7 v* \& @* G5 U0 B
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    : Y$ I- l, `' t: l9 ]( q# s% o
  282.         }) E! U1 `6 G8 ^3 g0 [
  283.       }
    9 L8 i6 g6 b* W+ a4 i
  284.       unlink(".\\update.txt");
    ) N' X) K0 P+ P! S
  285.       unlink(".\\update.tmp");. y4 A: y8 i7 n! U- h4 D7 K
  286.       Fclearf(".\\checkversion.dat");" W2 F2 j6 x7 S
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);# w* Z  l9 U( [; ]! N; x
  288.       if(UpdateLocal.size())# X% B+ Z. Z2 j8 i2 g# ]  g
  289.       {- A+ [: S# F$ z* v% G
  290.         UpdateLocal.clear();! i. f  F- P) X
  291.       }- F1 k# Z  Y$ J, D. `4 Q# W6 I( ]
  292.       if(UpdateFile3.size())' f4 r- a/ q1 o9 b- J5 C
  293.       {# G: g! P: ~2 w% @
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 {) ]4 r1 C! T/ O1 n) Q. K
  295.         {: f2 A; z- L* K3 u; k
  296.           file=(*p).second;. T8 \5 s9 m+ e2 a/ o. G
  297.           free(file);
    , J8 N4 d7 d5 C: a
  298.         }7 J" w: {2 ^2 a
  299.         UpdateFile3.clear();( ~: x/ u& ]- L3 m, H
  300.         UpdateList3.clear();- R7 f! u; {+ C! [
  301.       }
    9 k: J  v. i/ X( v) h+ n* e
  302.       if(UpdateFile2.size())& Y" j4 a; _9 t  ]! U
  303.       {: @4 p4 g6 c1 {& P$ T6 _0 d  D% k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 d  l! N2 |4 [3 X$ ~0 G
  305.         {$ @: D: Y7 W: c' i6 z! q* w4 Z: g8 w: i* C
  306.           file=(*p).second;/ \3 x- ]  R9 W  F0 u  M" H8 p
  307.           free(file);& I: T0 U+ h& p' G2 D4 a- c! \5 u
  308.         }
    & Q6 b9 C/ |& V/ s/ F: \
  309.         UpdateFile2.clear();% `& @0 m# d) {' g7 y2 D3 }
  310.         UpdateList2.clear();
    ! J/ Y$ E* i# H1 N6 g) w' _: O
  311.       }/ I9 o4 a' N5 T% u4 A- p6 ?
  312.       if(UpdateFile1.size())
    - L- [* j% j; q/ b2 ?% P! ~
  313.       {
    / L$ O0 O" Z: Q) x! ]0 d4 V
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( D1 Z  x  V( K! Y5 F9 C
  315.         {
    5 c: W/ p5 _0 p! t
  316.           file=(*p).second;
    0 o4 z: }& T7 G' M+ @  y
  317.           free(file);
    + L- I+ V, Z' A$ ?, z0 G6 M- i+ ?8 P! ~
  318.         }
    ; B% S  E) |6 X5 `; v
  319.         UpdateFile1.clear();
    # k1 f0 `* R9 r3 X: G" v
  320.         UpdateList1.clear();) p" }- o# q8 C" L4 q
  321.       }
    0 u+ \0 S) @/ ^
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' @( Y5 Q! |: \  E; o5 _$ A( r
  323.     }
    / L4 S* H) _) K" p% U
  324.   }
    : @' d+ B( q! I; P$ S
  325.   return FALSE;
    : \3 s+ {. I5 N% O
  326. }' W7 \, h0 {9 T( G! |/ i4 O

  327. * {$ E' [- _& u& B: s' @
  328. void CRevAppApp::ClearAll(void)% J1 t* y' A, A/ o& o) H1 e
  329. {0 H2 J/ v- W# I# F  z5 T/ g
  330.   LPUPDATEFILE file;
    7 p" J% l  ~6 n' ~, m
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    : E2 F, w7 L5 d' f! t' L; \

  332. 7 m! m( U- w/ p: C
  333.   if(UpdateLocal.size())
    4 }- y) T# ~: i6 s* a: D5 h# U
  334.   {
    5 r! H4 K  z" [# w/ ~
  335.     UpdateLocal.clear();; m5 [, _1 \$ C! I( [2 p, V
  336.   }
    ; l7 w  w( [. d' D! V8 V
  337.   if(UpdateFile3.size())8 O" g5 X# w/ e' h% x
  338.   {. K# K5 d( c- N% r' l$ H
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    / h* |( o( m/ v8 X5 [/ C+ V" {
  340.     {* b" O, z2 B7 C
  341.       file=(*p).second;: K% E- g0 D; a& r
  342.       free(file);
    " W6 M) P  q+ b! I" b
  343.     }, ^/ a: ?7 n4 l. v- Y9 \3 C8 ]; ^- E  J
  344.     UpdateFile3.clear();, ]* h( I9 M* g3 m2 D. K, C6 F4 a
  345.     UpdateList3.clear();
    7 [! z) P+ Y+ M! ^
  346.   }# V# k1 i, C/ k
  347.   if(UpdateFile2.size())' C! Y) F+ ^6 v4 b' |, F
  348.   {! |) P2 O, _& M
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& Y  w0 P, p6 @8 I5 d7 W! O
  350.     {
    0 g! D! H% B" M( |( }7 d
  351.       file=(*p).second;
    . F7 N0 f0 `8 t) X# C2 K
  352.       free(file);
    2 L1 N1 O$ b9 H* `1 A4 m: v
  353.     }
    # Q# _# a6 Z; @; Y7 f
  354.     UpdateFile2.clear();
    2 ?$ s' x8 C  n2 a4 n& b
  355.     UpdateList2.clear();* R7 D/ `5 o8 {4 z8 @6 C/ E" y# @& W
  356.   }. \  Q+ W' z/ a" y$ \
  357.   if(UpdateFile1.size())
    # k& ^8 {5 b2 A3 {% Y
  358.   {1 j: S( P9 }% k& o
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      S( k% L/ ^3 |9 `
  360.     {+ W5 H7 K- Y) X) _
  361.       file=(*p).second;
    . m5 ^9 M' b/ L
  362.       free(file);
    4 U5 ]: p8 M3 q4 I) h& h+ r. F1 ~
  363.     }
      K+ M/ s; j: d4 ^6 P: c
  364.     UpdateFile1.clear();  A( ~1 S4 p# K1 O4 G8 i
  365.     UpdateList1.clear();5 P9 H$ U9 }" F) w
  366.   }3 `1 G! i; O& `2 {! P! Q& ?5 l. \
  367. }  
    : |, K# C  m1 h% X8 N
  368.   
    - a3 M9 W& ?' |7 z1 a  H6 q
  369. BOOL CRevAppApp::CheckLocalVersion(void)- P9 O" D1 J3 h- M, ~" b% P. O
  370. {
      B9 C) ~  V" p) N8 K+ |
  371.   int c;
    % {- A+ N8 s. F! [0 x1 o5 m
  372.   LPUPDATEFILE file1,file2;3 ]( {3 ]6 u/ C# ^* E
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    % G/ ]6 B8 @0 _1 z1 \
  374.   std::list<CString>::iterator l;/ d% P2 ^, i0 A  w: k! y; J/ S; P
  375. 9 O  ?5 e8 ~) o2 K% K, w/ i3 c, t! x
  376.   UpdateLocal.clear();
    1 h" \% |& F6 V' }' q, ]/ y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);4 l$ f) U6 w" c1 F' k
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);) e8 u- d  j7 D. @* n2 g- v2 o
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);2 ^7 q" r. X* e, B0 j
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);- |+ L/ W; h  P: W
  381.   if(UpdateFile3.size())6 j; [# [, D' ?6 v2 v+ j, M
  382.   {( H6 M* g: t- x; s+ {! j
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)8 ^$ I; ~7 F/ G2 |
  384.     {
    ! V6 S9 h2 f' {& Z" \
  385.       file2=(LPUPDATEFILE)(*i).second;1 [* J3 u4 k, p. E; ]( e& t8 V3 Q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / _5 Q. S# a3 ^0 t8 c' H3 x- w6 o
  387.       {6 }7 d4 I9 }  q' c% r
  388.         file1=(LPUPDATEFILE)(*p).second;
    7 s3 M8 ^2 i( H
  389.         file1->vers=file2->vers;. M& z, Q: i- d$ j4 U* K
  390.       }
    0 r- C6 t- m2 c7 J# r
  391.       else5 e. \! u( I( t# Q0 W: R
  392.       {
    - D" t8 D! L2 o5 N% _  A
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 _; u% m2 F' F4 h
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    % O( V; v$ C( N" N( _
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ K* u7 g; A3 n
  396.       }
    * T5 x( y5 D( Y/ ?1 y. t- r+ G
  397.     }( J6 B; M8 K* e6 A& D; A
  398.   }
    1 a8 g4 j' ]. e. z
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ x9 z' @' J7 A1 g& [3 ^7 b
  400.   {4 h. M  y* a4 B, H2 v
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    " o/ g# h2 J+ }' g5 x
  402.     {9 g$ Q' F/ Z& A, P' z
  403.       file2=(LPUPDATEFILE)(*i).second;+ f& c7 V/ r5 |- p8 i( h
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / x8 y8 E5 W! ~+ e0 T
  405.       {) u. L+ @; |2 x1 g
  406.         file1=(LPUPDATEFILE)(*p).second;
    & L9 F: A7 v! t8 k4 Y
  407.         if(file1->vers!=file2->vers)" p. w' n& z# m/ [+ e/ |
  408.         {, x4 ^) ]3 N* S5 {, M
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- r, k# s$ L$ X
  410.           c++;- t( F- Q3 n; [. P! p
  411.         }0 t# ^  b! l/ Y& i7 \$ p  ~
  412.       }1 W: l- e8 {9 s( X1 `* \8 S; f# K
  413.       else% [$ M$ Q* Z  K7 f' W% f; w+ X9 y
  414.       {
    ) F' Z" F$ h; u! s" `3 i
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" R; [' x, f$ @% A  k
  416.         c++;9 o0 Q( u+ a4 n, @9 N7 G
  417.       }' A' v" [- x; E* @: r3 c
  418.     }* ]! V7 n9 M  [5 V+ F! y7 i8 |
  419.   }
    2 M0 S; {' M: a  ?$ D4 }8 V
  420.   unlink(".\\DownLoad\\update.txt");% _4 g) i, l* H. e4 Y( }
  421.   if(UpdateLocal.size()) return TRUE;
    7 d$ P8 x" M' x( ~; T
  422.   else                   return FALSE;2 F/ S4 ^7 ^# @' Y
  423. }! w% E0 e3 \4 \2 s3 @- d: J
  424. " B1 r1 P) {: n, m2 G
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 ?% X  m% F# X+ d) |3 h# Z3 r0 b
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    # Z! u: |  K2 `: l2 p* b

  427. # b2 X! D) s+ a; z+ {  P2 Q

  428. / C) {7 M- `( Z8 g# J
  429. 9 k9 o1 ]3 f* j5 M/ C9 K" S
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ) Q9 \. i1 F$ }1 I5 e& I
  431. {0 q& y2 u0 U  x
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( o4 t% q& _' ^7 n( ?0 u7 M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * T+ ^. ^( `& u% y
  434.   {
    6 S# N6 P+ d# I. O" h- y  D4 W) ~
  435.     char szLanguage[50];
    4 k/ `) @4 e  P% U6 O' ]! [; |
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + o; \7 w- l; ~3 ^
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    - {: P( y4 z9 X1 W
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      V9 ^2 V( v- |! k
  439.     else                                   m_iLanguage=ENGLISH;$ z1 n- P& |% A1 Q8 t- \" o
  440.     char szRegister[100];2 {  [8 e8 E( O- S' o5 s
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");2 j' T4 ?; P! e& F
  442.     strRegsName=szRegister;
    ! ]* g. |# C% |* R' `9 c! q- a4 }) b
  443.     char szPatchURL[100];
    5 R4 r- }- d( H; \: j& q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' ?, n# Z. B7 T$ k" r
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 t! z' P: x5 G9 p0 ^$ k. r1 K
  446.   }
    ; b7 n& O& Q; u6 D9 `4 V
  447.   else
    3 V( b. b* d2 \" H# L: x) {
  448.   {
    2 I  A- v8 }4 O+ h+ N
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 r7 m( n: V( T" a9 T
  450.     strRegsName=DEFAULT_REG_URL;
    / e; N+ k# L1 b; N
  451.   }8 S3 R/ W0 `' }  k
  452.   if(GetFileAttributes("hosts.ini")!=-1)' P. P9 k$ d( r6 c
  453.   {
    - z; D1 O- r4 h) ^. ^- H& ~
  454.     char szIP[50];- Z, }8 n/ e6 M; h* ?: {+ k
  455.     char szDIR[300];: a& Z6 }* v0 a, Z6 P7 d& ^0 ~1 O
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))& @3 M  O2 ~+ e6 s& B. q7 L
  457.     {) T/ L) W$ l1 R5 Y$ k4 n
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    5 d' O+ ~, `& w0 S  r" L+ o
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    + G0 c$ {6 h0 I3 r# Q7 F- [% z
  460.       strHostName=szIP;
    ' y# ]  j+ \% k0 p
  461.       strHostPath.Format("/%s",szDIR);
    / K/ E  V: e/ ?
  462.     }; _6 t4 H* P5 D& c, j
  463.     else* Y% g# {: t4 m2 Y9 E* v- V3 p
  464.     {
    8 |/ \$ P$ W4 k* L; ?
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% i6 u: g, L! E* p8 M7 ?
  466.       {/ U* y$ s' e4 C
  467.         char szLanguage[50];3 x* l- m/ R# y/ I- g9 w4 Z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 O/ }7 w4 h0 H/ Z7 I8 \
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) v4 U; v& r! i5 `0 y  ~
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 ?5 z; D$ {, f# T$ U+ f9 d
  471.         else                                   m_iLanguage=ENGLISH;
    + i$ C$ a1 {* |2 L" \/ `
  472.         char szRegister[100];4 Z0 s; s4 Z! G" @0 J
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 V/ S+ L% Q3 \5 @6 Y7 c$ C6 E
  474.         strRegsName=szRegister;5 S' s  k& n- h7 D7 H( Q
  475.         char szPatchURL[100];
    , f% c: @. |; \* s
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * T. g/ |" a. n$ C4 L4 \
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% z8 Q3 t0 Q  s: {; J
  478.       }
    + t" i1 O1 s% W' @# [0 z! \" R* [
  479.       else
    2 O& h: \' v1 \1 B1 a+ S
  480.       {/ p+ E7 K/ s/ K& `) Y) h' E
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 P- m: J* [3 m/ H7 F4 S3 L
  482.         strRegsName=DEFAULT_REG_URL;
    3 A: n8 n2 Y) D. p0 n
  483.       }
    1 R( |2 P+ @, p& ]! q
  484.     }- D/ x& A0 Y' \  Y( G! O# X/ @
  485.   }
    8 j$ D# B- a9 [& z
  486.   return true;5 B4 D& U) @" D. I( J1 D* _: o
  487. }$ F( j7 c2 @5 O: x8 Y$ l! Y2 [
  488. , e4 S5 Y5 z& i1 E  F
  489. #include ".\ZLib\unzip.h"5 x9 q, _3 n3 u
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);& L$ e8 c/ Z: K+ f# k
  491. /////////////////////////////////////////////////////////////////////////////& r% T  ?# F; r3 c
  492. // CRevAppApp initialization
    - C7 i, e  B5 t. G9 @, r

  493. ) ?+ t( l" l+ [8 l  l
  494. BOOL CRevAppApp::InitInstance()7 V" x( R9 s8 D
  495. {
    ! h) g- ]9 }% M5 C- r/ N
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];" s3 H& {0 A  j+ }
  497. ' i6 V& m6 A, S. i$ F
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    0 q! Y$ M6 _, ]% U9 p9 U; c  X
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    0 X: H$ V7 \& z) @. x/ {
  500.   {
    7 j0 ]$ f8 S% x7 x, L5 u/ X
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");3 Z, P0 o$ \5 ~6 j* U0 D
  502.     GetPathFromFullPath(szPathTarget,szPathSource);6 m6 X2 W$ b/ G
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    % _3 N* U# w- e
  504.     {* M) w/ p: A/ ~! C7 t0 n( P
  505.       strcpy(szPath,szPathTarget);8 C9 L7 G' H! h
  506.       SetCurrentDirectory(szPath);
    , v8 r7 ~% k5 a$ b( _% r2 p4 T1 Z% V
  507.     }
    * S. }; H: d7 `7 ~7 t) E, K' U9 U
  508.   }
    ( K$ E' m. x' i$ g& C
  509. #ifdef _DEBUG7 q& M+ G/ n; J$ q7 w8 Z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , [8 c" M4 H- P. u, F' w
  511. #else
    $ e/ u4 w! ~# B! l' e
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 n$ M* q; p/ [! }- U; t
  513. #endif
    : r4 g% R3 x" R# n; W0 R( `
  514.   {
    3 Y: i0 [) H, Z: a+ W( Y
  515.     char tempFileName[MAX_PATH];, {* Z' j* Z0 ^  m, q
  516.     strcpy(tempFileName,szPathSource);5 c8 @; Q" x% o/ }+ l
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ' G$ @4 N" K1 I
  518.     strcat(tempFileName,"\\$CSUpdate.exe");$ A/ }7 S+ E8 p0 Q
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);5 L5 G, r; d. u9 I: j- h( B+ }
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    " v! D; b6 V" ?0 T
  521.     return TRUE;0 {% L4 n8 c0 T8 v" H
  522.   }+ S+ f( M4 v4 `- R/ D$ m
  523.   // Nuke 0118: Delete run.exe# r& {' q4 L3 Z! O* L
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    % n, h, y; l6 i* l
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / n6 K( E" o. i5 E7 p
  526.   if(!ReadCfgFile("Config.ini"))
    . ~- `" M8 y3 i  n
  527.   {) U/ ?$ a" S9 s& {  ^
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    8 q( Z! Q; [8 D/ e; u
  529.     return TRUE;/ j8 W5 z2 ?8 o3 k4 Q; e
  530.   }
    2 U3 @! e1 q' G* M
  531.   HANDLE mutex;
    6 T: f( x% `2 t/ g& N
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")). x, z* l  e& i0 F
  533.   {
    9 x9 g* h! d( A' S
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ; _9 c7 ?8 ~3 f& N; \1 _* N
  535.     {
    4 {: A8 @8 `5 _5 {
  536.       CloseHandle(mutex);
    9 U, e: c" l7 X7 j+ P- x9 |
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);7 X0 f& Q8 u" x: ?9 F, f8 n
  538.       return TRUE;  r% J$ k: V( [! z  [4 @% r
  539.     }0 A, p1 V5 @1 t" O" t
  540.   }  
    $ s: {3 _  @9 P% t2 f$ r, i
  541.   CloseHandle(mutex);
    + P2 i0 G( ]' m& T( R/ `
  542. ) e( t6 a4 a0 p2 }4 [7 V1 U
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);" ^+ {' h9 M  i* a
  544. 2 l& [0 j/ u- t: R
  545.         AfxEnableControlContainer();: u2 M; Z+ R, _2 l9 b# O. g- {; m
  546. 8 `( T- E. ^& l( \0 X$ z
  547.   bCanUpdate=FALSE;
    / h9 \$ t2 V' E# o+ }
  548.   dwStartUpSteps=1;
    % i7 [0 x  v/ Q3 y: q
  549.   dwProgramState=AP_NOTHING;
    : Y$ p5 f7 I1 p$ L" G
  550. 7 g  d. ^! V9 |& f
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    $ f8 z7 D5 P; R
  552. 6 b$ A! V; N3 }' D- H  }
  553.         // Standard initialization
    / K! \% k# m7 y& F8 E7 A
  554.         // If you are not using these features and wish to reduce the size
    ( R" y* k7 ^6 E" D* {
  555.         //  of your final executable, you should remove from the following" S- B' H7 B! Q7 d# N% O9 v8 U
  556.         //  the specific initialization routines you do not need.6 i2 [* G  P# k( g# V) B' m

  557. " G  e5 e. |% Y9 {
  558. #ifdef _AFXDLL0 }% c1 }; i# P8 D1 Y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 x0 o* P6 N2 d& y
  560. #else* e! h. R7 g4 T5 u! E" \
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically6 F! S$ T# c" k% m
  562. #endif7 j0 n6 \" K9 l" t0 Z2 e; B

  563. 4 b  Z4 P& H0 W" T( q
  564.   dlg=new CRevAppDlg;
    6 Z; X5 Z) n( |3 t, ?& W
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    2 y5 V6 v# r3 W1 d
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ; O4 @, B4 h5 g2 f- }/ W
  567.   m_pMainWnd=dlg;
    9 i* W: Y* }2 o) ^
  568. 6 f7 e5 N, G; c! M: F& s
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);! d, ]; U! E2 d0 y( }

  570. 5 z% J! u$ D# }7 t5 O7 |
  571. //  GdiplusStartupInput gdiplusStartupInput;) S: m$ y5 A1 T" G
  572. //  ULONG_PTR gdiplusToken;
    & m6 V% F" g. S2 H/ c9 t' G# S
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ; J2 {( |/ x9 b% h+ X1 d
  574. , q, a- }( A0 m9 S; [1 }- m8 W
  575. //        CRevAppDlg dlg;
    - u- S; i% U5 B# O; t
  576. //        int nResponse = dlg.DoModal();# N( j4 D+ n  a% s$ k$ K
  577. //        if (nResponse == IDOK); r3 p& G4 t% H$ @+ b" J, I+ ]
  578. //        {
    6 |  b4 v7 L2 V2 d1 O
  579. //                // TODO: Place code here to handle when the dialog is- ?+ ^: t- t9 W* a+ ~
  580. //                //  dismissed with OK
    % E& E4 T8 Z3 e0 d0 X0 }
  581. //        }6 d8 K/ D( R  t* U1 G3 J
  582. //        else if (nResponse == IDCANCEL)
    $ Q9 T3 b8 d' a* l& t( ^, S
  583. //        {
    7 X( a6 S1 Y' q0 x
  584. //                // TODO: Place code here to handle when the dialog is* t0 L! S! @% }* M9 T; ~6 V" s. Z
  585. //                //  dismissed with Cancel
    # n5 h( t7 W2 O; M2 R/ o
  586. //        }
    7 A% l* s% y% I+ E8 f

  587. . W' l+ b, |* O
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    & A3 B* M7 D/ V2 o2 f1 i7 P
  589.         //  application, rather than start the application's message pump.: v& E- k& Q2 y1 [
  590.         return TRUE;  i  N* G& t- B: w* D, D
  591. }
    8 T: L  O$ `* X+ d0 @6 x" Q* i/ s* z
  592. ; H. y; F3 B; e- K) \
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    4 Q: B- [: {( n0 k) N) q& x9 q! `
  594. {/ k# _# E5 I7 F) D( s' M8 m6 U
  595.   int i;, M8 c: G+ x' F9 d; Y6 _
  596.   char *szRet;
    2 ~: R# b" H+ y* E/ l* c' M2 P

  597. # T, t# v0 P. B5 h% z
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " f3 p4 c; E* P! G! m9 q/ T* V
  599.   if(sztoken)( x4 i! ]9 E# A0 m
  600.   {1 C2 J/ @( W+ z$ G7 G
  601.     szRet=&sztoken[itoken];5 Z' O6 O0 V7 L) ]( C' e
  602.     while(sztoken[itoken])& j* O  T3 [  f# _& A5 E$ B2 l( d
  603.     {* @- T$ m2 z( C9 E- k. g0 n
  604.       for(i=0;i<(int)strlen(token);i++)  O* o- F+ x. c- D9 p& N
  605.       {
    % K' @' T: y, J) G6 e" q6 F
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    # d* R6 G- X, s4 d$ t
  607.         {
    , G8 b/ c2 w" a' T
  608.           sztoken[itoken++]=0;
    % d! Y, |; g3 G! f
  609.           sztoken[itoken++]=0;( M3 X" i  m" [; {
  610.           return szRet;6 T; ]4 d: {1 r
  611.         }
    6 P3 d$ F; a  `. s, U
  612.       }) ^5 T7 T' v) r$ |! O- Z* s% o" n
  613.       itoken++;
    ) s! x" I) K& ~$ a- o! E( a
  614.     }
    ; T  o2 E0 ^6 |2 ]9 \
  615.   }- p3 R/ h2 ]. b7 i) P: g( t
  616.   return NULL;
    " b! n2 @: ], G1 K5 L+ N7 l2 P
  617. }3 U4 ~* c: o6 l* k4 {7 x
  618. 7 o; R3 q6 j! R) B) a. n
  619. void ProcessProc(long Total,long Current)* A- T- t( M9 n' w1 [: E1 N- Z
  620. {
    " b- ]" K* f3 L
  621.         MSG msg;
    - ~* y( ?% f0 M& @2 E
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);: ?; W5 C  r1 F3 Z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    # J8 k3 X/ ?. U) Y# w* n
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)), j3 Z, N. q7 T6 P$ E# m
  625.         {
    - M& a4 L9 k- y9 p6 z1 B
  626.                 if(!GetMessage(&msg,NULL,0,0))) j# s4 M0 M; o1 s6 t( F
  627.                 {
    9 q  y! G- O: Q
  628.                         return;. V; C8 N/ X/ U7 y
  629.                 }) F; _. m+ ]3 b* k0 Z0 j
  630.                 TranslateMessage(&msg);
    9 @) R+ h6 }8 |7 c' |4 c4 x+ e+ S
  631.                 DispatchMessage(&msg);6 l0 P/ @1 s. Z. X
  632.         }        ; [, E( F$ A) \* q0 n2 k3 l
  633. }
    3 S2 _* I6 X$ u& |1 m$ ~5 t( n; K

  634. 6 }% `$ \* f" v& J( i7 z! V. |
  635. BOOL bFirstChar=TRUE;! B! h; w2 ~' h, N
  636. 1 Q& \/ [" W2 C  ]
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    - e7 j* I  `9 D' w
  638. {: C) C$ ]8 w4 N7 ?2 O9 M
  639.         // TODO: Add your specialized code here and/or call the base class
    8 }4 @0 O+ x( s- E2 o
  640.   switch(dwProgramState)2 d1 X- X/ ^, ?, X
  641.   {% t6 `& g: y4 T& e
  642.   case AP_NOTHING:
    0 e1 u5 y. }: V" `
  643.     switch(dwStartUpSteps)3 g& l8 C( ~' l
  644.     {- H2 l; e0 _+ H% G& H
  645.     case 1:
    6 @* {7 o. l" |7 O
  646.       {
    . {+ G- C: H0 c" O* ^
  647.         int i;  n$ }4 o! k, m" L3 \7 _
  648.         CDC *pCDC=dlg->GetDC();% _1 Y% U/ X9 c% A5 Q- n
  649.         HDC hdcwnd=pCDC->m_hDC;* E+ s8 x: r4 W4 `$ }# B
  650. //        Graphics graphics(hdcwnd);1 `, @" v1 N$ l9 d1 `
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ; F$ v+ Y: p  C7 E. |& q8 p' g
  652. //        INT iWidth=bitmap.GetWidth();! m% z/ {. B& y9 D! A$ U. A; q8 Y
  653. //        INT iHeight=bitmap.GetHeight();8 y7 R7 r: S9 u- `: G
  654. //        Color color,colorTemp;) R& o* Q0 U' v7 Z# ]7 [, V
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ; e7 N. C/ O6 r9 X# h
  656. //        {% _" j+ b* W9 v# _% Z
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    , X3 B6 u8 X7 o3 G/ h( o6 v& k& W
  658. //          {# u$ Q2 R% S0 J  X
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    % h! ?1 V/ C# y' k  \. X- I
  660. //            colorTemp.SetValue(color.MakeARGB(
    * i% C+ A% l% q% f8 m% E, f( Q
  661. //              (BYTE)(255*iColumn/iWidth),2 w$ K+ A6 F- ]8 d& |0 B- y1 z! b, e% \
  662. //              color.GetRed(),
    - I  z( F* J' S- M7 `3 m; [5 I
  663. //              color.GetGreen(),) g/ a: A. z9 S! P
  664. //              color.GetBlue()));' A! T  S, o3 b
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ; L8 d/ k3 V. W: |1 E
  666. //          }, c% p' s8 G$ ^: N3 ~
  667. //        }$ A9 e+ J' a) S* t" X5 ~- W2 o
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    5 k" A7 p! g2 S' X
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , Y9 D' h( z1 j# S. S( h6 R
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");* @' c. z5 A6 k0 P0 S
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 Z+ A9 [6 Q! a; ?, |; x; _4 D
  672.         for(i=0;i<240;i+=8)
      S3 I$ d5 F4 A
  673.         {
    3 K% p% w* R3 S; i. C
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& ?7 O0 L1 {5 e, {3 _/ G4 j% V
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . u6 p/ \2 s6 }  ~
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ U  c0 [- y' Z( j( S: V: O6 H' O
  677.           Sleep(33);
    - k# [+ |* U1 ?) b( m
  678.         }2 Q" E; Y* E' q+ ~" G
  679.         Sleep(1000);
    * i) B. `& Q, z- c
  680.         for(i=240;i>0;i-=8); Y6 ~1 w/ ^$ M% u4 k
  681.         {; G5 H4 M: h% Q* s  Y; H* e
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 @9 p( P$ e  y1 k6 v$ Z, v3 O; U8 I
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 u- j2 a' Z( n# R* ^* Z/ D
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);8 Z4 D3 J( [6 _; w% X
  685.           Sleep(33);0 ?' O0 }7 D& U5 [( F: U# [3 {1 |
  686.         }
    ; p6 o; t; A4 R! M
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);: d8 X1 V7 `# Q# C+ Q2 y
  688.         dlg->ReleaseDC(pCDC);* Z% l6 f& r1 ]& R3 Z! O
  689.         DeleteDC(hdctar);
    / v% _/ d6 M  H' _
  690.         DeleteDC(hdcsrc);% w/ J6 W) W4 V) ^, T. u3 a
  691.         DeleteDC(hdcorg);
    ( O, f- z/ K+ L3 y: \" |$ c
  692.       }
    / ?% O6 I) [, m( z2 n! m- G7 `$ Q
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);: e) _' Q4 n) Z8 O. D" D) e
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 D, L4 k: S+ _7 U. f
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    5 {1 r4 R, h0 i$ o* c) X
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ( d' a2 n7 p2 K! S
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 l* b+ z; A0 N4 t
  698.       if(!Dn.Connected())
      h0 V- B2 V9 s- S1 F3 T
  699.       {( ]2 c9 }0 H9 x% A: M9 L# V
  700.         dwTotalFiles=1;
    + [. i0 F  O: w' `% a
  701.         dwDownLoaded=0;, j" P9 l" g3 e8 r3 J- i* R  C
  702.         bSilentStep=TRUE;
    8 W. b% _. A% b( c( m9 k3 s
  703.         bCompressed=FALSE;
    & b* h, C/ E' o0 l
  704.         strExtLocal.Empty();  s( c8 Q7 n9 b6 ~' i& b
  705.         strFullName="readme.txt";
    1 f8 K3 h+ D" f7 `- Y0 A# [. X
  706.         dwProgramState=AP_CONNECT;+ j9 Y' o3 u& r! j  l7 l
  707.       }# O! _. t0 z3 F2 ^1 o( V( q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    4 T: [' M* d% Z0 Q+ G
  709.       dwStartUpSteps=2;' E0 }; Y. b4 g" o
  710.       break;
    2 [* L: x" ]4 x8 U; x/ o2 i5 E  G; @, V+ ~
  711.     case 2:9 W) c" D2 b4 y+ J
  712.       {
    , O+ U: g- E0 |$ q* z# q7 d
  713.         int iEOF;
    + d6 t4 s  i& @$ \& M
  714.         FILE *fp;$ K/ T# p- Z& W( f1 d9 k- g5 T; V
  715.         char szString[512];8 x& o+ E' n7 W& Z
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");& D2 Z1 U% M7 R" T% I2 {- p" |
  717.         if(fp)) S' a0 j9 }2 _. @
  718.         {
    ; |8 g" ~2 I9 A7 y* A# V( u
  719.           do( u0 o# C+ i& z& D: o
  720.           {) u* |6 [& K' s3 V  s9 q
  721.             iEOF=fscanf(fp,"%s",szString);
    7 l- i' ]( I2 d* B# i) k
  722.             if(strlen(szString))
    4 J6 _6 N1 l3 i$ i% ?
  723.             {; d6 n$ i! P. @* e+ }% x& s  M, F
  724.               if(bFirstChar)5 d* C5 p  J, r9 C+ d0 }- [
  725.               {
    - N1 r6 z# Y* F& y$ J
  726.                 bFirstChar=FALSE;
    ' }) }- Q5 [$ y* F+ b+ e) J& h' D
  727.                 bConnectIsBig5=FALSE;
    1 U4 N" ]! M" V: X
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;! Z. B( g) D. D# s  Z7 K; J
  729.               }
    + K; T# E# W: O# H  J: o
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));/ a* L" d0 X5 E6 @
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ) z. e& t5 i9 F6 {+ Z+ D
  732.               dlg->m_ListText.AddString(szString);
    * x. ], c; a7 z7 j2 C0 K) X% k9 F
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : {& z) n. R" l0 I
  734.               *szString=0;: _5 f2 a( x' J6 l
  735.             }
    & Y" ~! N0 {8 c4 }2 U
  736.           } while(iEOF!=EOF);
    & |" V& J5 G6 P4 _4 H& J5 }
  737.           fclose(fp);
    + e3 _, b3 c  F2 D
  738.           unlink(".\\DownLoad\\readme.txt");6 N/ d  b; U6 h; Q% M
  739.           dwStartUpSteps=3;
    ) G& ?! i0 M/ y& M2 [4 T
  740.         }
    : ~- @" |  p. F- H$ g$ C
  741.       }
    # w/ o8 a1 u& h  y3 O5 F  j
  742.       break;
    . ]- k2 D$ V, v4 h; t
  743.     case 3:6 D- |& N4 @6 t  V% |" y
  744.       if(!Dn.Connected())7 R2 [1 T9 @3 g7 q. A! n( }
  745.       {4 V3 K; b2 k% F" q& }( W- q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    / O3 r7 I& r6 j* k
  747.         dwTotalFiles=1;
    ! a9 h) ^  a: {: t& q
  748.         dwDownLoaded=0;
    % A; ~9 O6 S( \+ [" C
  749.         bSilentStep=TRUE;
    8 k9 E) O* b2 z; n6 A
  750.         bCompressed=FALSE;
    ' M% @+ e8 e  [# J$ R# z$ X
  751.         strExtLocal.Empty();
    3 y$ D5 s3 p$ j+ o7 z; |
  752.         strFullName="checkversion.txt";
    ) j  L9 a1 I1 u) T$ U
  753.         dwProgramState=AP_CONNECT;; n" O7 q8 Z. t3 |/ G
  754.       }
    9 x' f  i7 B- T& P! g
  755.       dwStartUpSteps=4;0 j! Y) u) k' _+ C
  756.       break;( h( }- W' O0 N$ A
  757.     case 4:
    1 q6 F) {& ~% S1 w3 I9 b
  758.       {% @. R: }4 A/ [3 Z
  759.         FILE *fp;9 f9 l  T6 x2 B- d) V6 s( V2 H0 W
  760.         char szString1[128];
    5 t/ g- D8 x1 H
  761.         char szString2[128];
      c# W7 u3 l3 G4 ~$ Y# u* A
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");, _+ a4 z2 m  J% K0 V/ M" P) L$ ^
  763.         if(fp)
    7 S) s( D0 o6 Z2 y
  764.         {! W! T- r+ S3 T, H$ ?' s
  765.           fscanf(fp,"%s",szString1);
    4 y/ h5 `, L; i2 n7 q. s2 W
  766.           fclose(fp);+ ]3 D2 U- U( i  X. P$ V- t
  767.           fCheckVersion=atof(szString1);
    ) ~3 m* l9 H4 w: h6 S, ]
  768.           fp=fopen(".\\checkversion.dat","r");
      J$ L4 p* T9 i
  769.           if(fp)
    2 f, r4 y# _# A/ V( J
  770.           {
    - x  D: G. j" ]
  771.             fscanf(fp,"%s",szString2);
    6 q! Z. W8 a6 q6 y9 p9 x, p8 s2 j. b
  772.             fclose(fp);
    # z2 P0 H0 H; C4 }' x
  773.             if(atof(szString1)!=atof(szString2))- `: t2 @- q1 M: E! H
  774.             {
    % d' [* N0 r" ?, A* Q/ R
  775.               if(!Dn.Connected())
      o; D; I+ g2 @( b5 X6 G% ?# Q; x3 f
  776.               {
    5 m. H; b4 k/ f) C5 {" B7 w8 B. P
  777.                 bFirstUpdate=TRUE;1 C: V6 A& @$ z
  778.                 dwTotalFiles=1;
    9 X  f- t* x/ Y
  779.                 dwDownLoaded=0;
    : r  H# |+ @6 c8 c& J9 u. {
  780.                 bSilentStep=FALSE;/ w  `  f7 [+ @/ M9 e, _8 y  t+ B
  781.                 bCompressed=TRUE;# O  B& Q# Y9 v' `2 e, ?/ d2 l9 i
  782.                 strExtLocal=".\\DownLoad\";
    0 S8 l9 ?6 S! S* W) W0 Y1 j7 n  S
  783.                 strFullName="update.txt";' i6 ~- e+ |, C  e0 U
  784.                 dwProgramState=AP_CONNECT;2 e; o. X$ ?& c+ t* x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; c0 Y4 U+ b* \2 I1 i. b
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 o' l/ H' T/ k& g/ g
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : L$ }" |6 C# h1 w/ P
  788. & i) x: \9 g0 E: U* O+ ~# X
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 J; A  ~6 L1 ]" c7 K
  790.                 unlink(".\\DownLoad\\checkversion.txt");* y7 s2 k; v( C5 b$ d1 v, O
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    / @% L' x9 N" U1 }# G3 h! ~
  792.                 {
      X7 J0 ~$ g# n6 A* [+ B. W5 A# a, I
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");+ O/ Q8 c0 s2 {+ O
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    . b6 q7 ?2 {8 @0 W8 r' y' h1 ]
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    # A* U0 G* w& ^$ ]  m+ j
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 r! l# G0 y; |" ?6 h( }! L
  797. 5 ]1 E" P+ g9 m: a" |% W6 _* [/ W
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# `/ M  p8 v6 x9 h" p, ^# V% o2 U7 D$ o
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: I: t; v# g5 g8 {) M: v
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( _+ B$ u, {, b0 D5 r5 A1 V
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # r0 Z0 g& D; }: k0 k3 N; c% N$ s
  802.                 }
    % c7 f6 n: y. R+ @
  803.                 dwStartUpSteps=5;
      S9 y4 Y. l) m2 U/ G8 W
  804.               }5 W  j( ?$ ^; ?/ A
  805.             }
    4 D9 P) o9 G+ Q
  806.             else2 L9 y7 |/ R: b+ L
  807.             {
    # [6 E$ u: K2 E/ c
  808.               unlink(".\\DownLoad\\checkversion.txt");  G8 M" u$ `, L: Y1 i
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    2 h$ }$ _0 B) ^6 }) S% e% T
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");) c) m+ a8 B+ t) N* G1 a
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    & i  w; W) a4 [+ }
  812. 1 U+ P( F( q3 p- o2 l) q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 W) i4 j$ u# K/ ]" B; t) P
  814.               dwStartUpSteps=99;% _$ f: F# f% ?2 M2 p2 s: t
  815.               bFinishUpdated=TRUE;
    5 w* }- I, W/ G" d" ]8 R
  816.               bCanUpdate=TRUE;
    2 I) M5 W+ Q* ?7 j
  817.             }
    . x* B9 M4 d# D- K
  818.           }" v! w1 s+ `6 c, m
  819.           else+ T0 r) e: X' T- O- }- o/ x
  820.           {* v, |! k# e; @) j( r, G% n
  821.             if(!Dn.Connected())
    ; O' z- X$ Z& W) v) B5 |+ C
  822.             {
    3 @# d7 X0 g1 ~7 a' u2 I
  823.               bFirstUpdate=TRUE;
    * L0 [! r" }# k
  824.               dwTotalFiles=1;
    6 @1 d3 M4 D4 S4 G" e: v
  825.               dwDownLoaded=0;/ D' N5 [2 p8 C- m/ \
  826.               bSilentStep=FALSE;
    * @: S5 |/ `' R1 {( c9 v  S  K0 n
  827.               bCompressed=TRUE;
    $ _" ^6 z0 {7 L6 \) N
  828.               strExtLocal=".\\DownLoad\";
    6 j3 A: W/ Z* O
  829.               strFullName="update.txt";
    ; q2 h7 t, F* s! N. o& a% a3 {7 s; D
  830.               dwProgramState=AP_CONNECT;- q' Y% K2 ]* g' Z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / W3 Q; c2 |) C8 T) i3 Z$ F$ L( k
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / Y* h0 G; `7 a( b, m
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");( ]6 {  B6 A+ W7 x3 p6 X& F" K
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 B0 G# a# _) N+ A5 z) c
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ) x, Q. `2 C0 N+ \' o2 h3 _
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    / w) P- W& W6 S/ A. R1 |
  837.               {, c5 i/ `! x& v  v5 i( ?& {
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");5 m5 g/ w: o0 v# z* @4 }
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    # `! A$ q. y2 s3 x; f
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    6 _5 f4 Z3 g$ Q5 ~: s
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( @( b  [  k8 P
  842.                
    . f2 j+ W) v8 U" R" T
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - D* k+ h* @) m2 p1 t$ a( K
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    / ^& @' B/ g2 X
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");0 G! Q7 w! F4 A! ^3 p0 q1 G- F
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 m) i* X* F  c0 h. |
  847.               }+ O4 ^4 E' c, `; _4 H, i" L0 F+ @: Y
  848.               dwStartUpSteps=5;
    ' `) X3 [& [4 o( h
  849.             }' N( ]) k8 C: F; \1 U: p6 f7 r' x
  850.           }+ _6 ~9 s( Y* ~. O
  851.         }
    8 h) r% Z5 ?3 [' E) O# W0 Z, a" ~
  852.         else( U! T. A" ^9 p. D0 d6 y) q
  853.         {0 h/ y3 u! s3 O5 `: d2 e
  854.           dwStartUpSteps=3;
    + h# \$ V* r  k& v5 H- |9 G) i' t
  855.         }
    1 {% z* t1 n4 ]* U; S$ i0 @2 _
  856.       }
    . x3 u; f, `4 i# D) v* s
  857.       break;! Z- [' T2 w( ?! n; @/ D
  858.     case 5:
    " M  \. t" V2 D; q0 N
  859.       {) {' `. A2 q/ Y& o5 [
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    - a) M1 ?/ }5 n$ y+ m
  861.         {
    % E! `& g/ f! F" Y9 H' i
  862.           int opt_overwrite=1;
    * K2 l- M- I7 M
  863.           int opt_do_extract_withoutpath=0;
    , Y, U3 g, n% K. `. \, [* @
  864.           unzFile uf=NULL;
    ( y2 [' O- }/ `/ p& j  }
  865.   L( U5 c. ~) F4 ^. ?
  866.           uf=unzOpen("Wsa.zip");
    + ?" _& @# m+ f9 a0 g7 K
  867.           if(uf)
    ! g1 |+ w+ `  J) M
  868.           {
    ' ~) {1 B* _4 ]; f+ O/ a2 ?
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    6 Y6 X$ W' e4 N, |# V! _" v! O
  870.             unzClose(uf);
    0 b% m) f' [% \: N$ U
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    - o, l- S' M. ]. m) ]
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");& C' F: N( N8 p: R6 M7 p
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    - B8 ?) g, k5 Z" w, ~
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + }2 a8 M/ k9 r  q, W
  875.           }& L( |; @5 o: x! N4 w- Q
  876.           DeleteFile("Wsa.zip" );
    # Z* I  ^. L. A. W( p) R
  877.         }
      K+ o' R+ G+ A. i

  878. 2 ^$ l& e2 ~: W; v. I, s% o: e
  879.         if(CheckLocalVersion())7 e: U( t4 R0 o2 B4 |0 x' V
  880.         {
    % v5 h/ A: M; d! G+ ~& r
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
      M& ]. S8 n6 |  q* `6 F
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");) i8 U) R8 _9 D
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    " u3 B) E$ E) t( T% a
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 d6 e2 m3 R9 o) S9 C: O2 _
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    0 ~* E3 \$ V# K. D+ Y
  886.           dwStartUpSteps=99;
    4 C$ }  U3 T: c+ C7 I6 p8 @6 X- h  C
  887.         }( c# I) `, @2 F$ i) M, a
  888.         else
    1 I) t# i: M, {9 D5 b- A1 B
  889.         {
    4 b/ s" C, J( y, `8 `4 {2 q4 H0 W
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 P4 Q0 V& V1 B4 |. u* r& x5 B- H; R
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    # }7 X6 X" V- z( e1 J9 n
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");* y1 M# E( F  f! q, ?

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

  b; z- n. m/ k

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-27 07:33

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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