找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
7 V2 S! t' Z. p
  1. / RevApp.cpp : Defines the class behaviors for the application.3 ?: q! K% q" v/ U
  2. //- [2 K1 E+ {& n

  3. 2 }. g1 K. W. z: G& P" H
  4. #include "stdafx.h"# A3 A. G* ^* ?; y4 k4 Z: h& b

  5. : N; e1 K1 b, q/ ?
  6. //#define UNICODE
    5 q0 w& E) A1 S6 U3 g
  7. //#include <gdiplus.h>' f$ h0 z+ ?) g* H/ v1 M, A
  8. //using namespace Gdiplus;
    : R0 k) k& a; S. e/ b! k) G
  9. 3 O$ W/ @% @) O5 |
  10. #include "RevApp.h"
    1 J  V' i" k2 o: v+ U
  11. #include "RevAppDlg.h"8 O: e1 ]. I8 G, C7 c8 K
  12. + D, [* _- V: L" I
  13. #pragma warning(disable:4786)! P* ?, w6 ^' j7 c, E
  14. #include <map>* R$ ?& J4 L" L2 o4 K' z9 R
  15. #include <list>
    / K) Q. C3 D1 C" ^* \7 \3 m  W
  16. #include <direct.h>) d  m2 t- g+ a5 J# n4 G1 k

  17. ; R# n1 ^; V' S6 [1 f
  18. #ifdef _DEBUG
    ! M# ]% Y; i* N. W6 ~% l. o3 u
  19. #define new DEBUG_NEW6 f- P! _9 R  B5 @
  20. #undef THIS_FILE1 X' \# s0 ^, G
  21. static char THIS_FILE[] = __FILE__;4 s! c# G$ v% O7 {, L
  22. #endif
    % z' }; D+ d! s* L& S% `
  23. #include "SkinResDef.h"7 ^4 w0 c5 T& Z' t
  24. #include "ChangeBG.h"# T$ O0 [7 M7 O  g  F* }- q
  25. #include "AFXINET.H"
    ; F7 c4 G( t: n, I: p
  26. $ j$ ]5 J5 D* O3 C6 |& f$ C# u+ c  n" b9 z
  27. #define TRADITIONAL_CHINESE 0
    % Z% M& N& Y3 k  S* s. r
  28. #define SIMPLIFY_CHINESE 1& k* P! o* v  w' u9 d
  29. #define ENGLISH 2
    " |+ X7 J' _. e6 R0 d  Z
  30. int m_iLanguage = ENGLISH;0 G1 B( g* q& t: }3 _
  31. /////////////////////////////////////////////////////////////////////////////, \! ~' J! T3 J% s: c5 _
  32. // CRevAppApp
    ) p! t4 m! W* y
  33. % E6 Q0 [( T3 a* A5 c' S
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)) b. o* N% Y! v" e8 Y# w: c
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    6 L0 x' Y" d& o: I2 U
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.- h- {8 g" p8 R2 C
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    0 `. Q8 q) O) b
  38.         //}}AFX_MSG4 V9 w- f( ~" {
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)( B# q% J5 W$ [( P+ |! R- x/ J  P
  40. END_MESSAGE_MAP()
    : j( e: b( U- Z
  41. 6 l) X+ ^8 V$ |
  42. /////////////////////////////////////////////////////////////////////////////6 W! ^7 R( I& D6 v# D  V5 ]
  43. // CRevAppApp construction1 m6 ^3 w* e/ ?) Q

  44. 4 x: U: g' l' f5 x
  45. CRevAppApp::CRevAppApp()6 u# Z9 @* E7 y# ]' Z
  46. {
    ' P8 Z# L1 c' e+ J$ y) H/ l
  47.         // TODO: add construction code here,
    + q$ Q0 \" v! R. y3 z! p
  48.         // Place all significant initialization in InitInstance/ N& G$ }1 F7 J2 p% d
  49.   bDisplayIsBig5=FALSE;
      x0 y; v0 `" p$ p# d
  50.   bRestartUpdater=FALSE;  C. q/ B1 z; w' w# s0 ^8 I
  51.   bFinishUpdated=FALSE;6 M' j$ E1 \- ~# k" \
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    & h9 Z- F8 t1 w
  53.   InitChangeDataBig52GBKS();5 z" c: c! h  J4 |# x$ I- s/ o
  54.   InitChangeDataGBKS2Big5();. m' t, E# v! c
  55.         //0 h# e: U2 {7 a& P
  56.         bClickRunExe = FALSE;6 {2 a' w  R6 P6 @$ B& F* _
  57.         //
    ! B0 m8 Z7 R' ^8 u2 g
  58. }3 u6 [4 `, i" R4 L+ L4 q

  59. / {: D  |/ z& T: m
  60. CRevAppApp::~CRevAppApp()
    1 b2 O2 X! b0 f( {  Z
  61. {6 s+ }7 J( J: H/ j) w7 p" s
  62.         // TODO: add construction code here,
    1 E- j7 ^. k6 R; J, s, o
  63.         // Place all significant initialization in InitInstance
    0 F( [, n  h" e) U% R8 E
  64.   EndChangeData();
    & @- }% _" `+ q8 ^. P
  65. }
    0 A! ^7 X8 ~7 j) ]( L4 x7 V
  66. 2 U) Q9 u7 ]6 n
  67. /////////////////////////////////////////////////////////////////////////////' E4 j+ q' `% O+ q
  68. // The one and only CRevAppApp object
    # f3 Q5 `9 n2 t% M( s
  69. 1 H5 j0 V+ ^1 K2 Z
  70. CRevAppApp theApp;
    7 k% @: {9 C% p  r! W
  71. - \- ~/ d2 w! \# u$ ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)9 |" m! W% |/ D! u! }1 B
  73. {! J3 `+ N) z! @6 H6 |% X
  74.   int iEOF=0;
    . ?# d' \1 {0 @0 y2 H! z% D# t
  75.   char szTempName[MAX_PATH];7 K+ _* D% Z, M& C- f6 F
  76.   *szFileName=0;/ G  O- s1 q- ]; I2 P' ~) }
  77.   iEOF=fscanf(fp,"%s",szTempName);# E3 R7 `0 S% }
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')& j# V- y! w5 ?, v+ C
  79.   {, K' G% k+ [9 l& F- ?
  80.     strcpy(szFileName,&szTempName[1]);0 _5 A3 u3 u3 b+ m
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)& L- S$ s- l3 a6 W' \
  82.     {& U- q8 \" k: m7 c9 O
  83.       iEOF=fscanf(fp,"%s",szTempName);) c  i/ y( D; Z7 w) u
  84.       strcat(szFileName," ");
    $ l; t; U, y  l! k
  85.       strcat(szFileName,szTempName);
    / e# g1 ~) e4 l
  86.     }% ^1 w2 f: s. a! L0 L4 Q. M$ M
  87.     if(strlen(szFileName)>=1)
    ! K7 t! y% l/ v* j9 ]
  88.     {
    8 s0 w$ J4 l5 q2 t2 F  [9 J
  89.       szFileName[strlen(szFileName)-1]=0;0 \' T  ~. m0 @8 Q
  90.     }; v# u& k5 \! c/ w+ _6 W
  91.   }
    5 a! _0 V- v1 }3 u2 J
  92.   return szFileName;
    $ [/ m6 |% ?& J4 x( H: q
  93. }3 U7 a! R$ T9 X' E

  94. , E$ V; ?$ k0 M; E: ?
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    0 G. O! p8 h% x, a" Q! r
  96. {: }% g& ?( K6 x* ^
  97.   FILE *fp;
    & V0 @3 t* z+ I
  98.   char *key=NULL;* K, g( a& S; \% I1 W5 |
  99.   char version[MAX_PATH];; P. ~* ~2 J9 k- l; U
  100.   LPUPDATEFILE file,olds;
    1 g! z0 M' v6 w8 T
  101.   std::map<CString,LPUPDATEFILE>::iterator p;' F* P: l$ H2 [" v# Z' k+ A# |# ]

  102. 1 n, S* ^5 I" t1 A& C
  103.   UpdateList.clear();$ b7 T9 H$ |0 d
  104.   UpdateFile.clear();4 g8 B) X- \* O' i# f
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; a$ g6 {2 W6 j7 V" A
  106.   if(!(fp=fopen(filename,"r"))) return false;
      E2 @/ O( e7 x( ]' b) ^
  107.   fscanf(fp,"%s",version);9 P, T9 e* D3 b; n4 w/ V8 ]& M
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ) ?- E/ F1 q$ b5 p
  109.   while(fscanf(fp,"%s",version)!=EOF)
    & H/ I  D) t6 _8 O  t  a
  110.   {6 B) g, U, R2 q# I& _1 B, M
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , L' n" I9 a; B" B
  112.     fscanf(fp,"%s",file->path);( I, f! n' L3 _
  113.     ReadFileNames(fp,file->file);6 W' V5 l6 W; c2 Z
  114.     strcpy(file->full,".");
    3 m2 J/ ~1 d! X1 x
  115.     strcat(file->full,file->path);! O5 t8 V* Q) m4 f
  116.     strcat(file->full,file->file);; h4 }4 @% `1 \
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    1 Q! J3 G2 P& h0 J# s( |( L
  118.     {/ _3 `3 k( e/ Q
  119.       file->vers=(float)atof(version);
    8 G! b5 n! T* I+ ~; p  R
  120.       UpdateList.push_back(file->full);
    ; o0 v6 x+ V. k8 u' r9 T
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));( n8 w* ~4 W8 F# J
  122.     }
    ; K: E4 `5 b- s. a5 D5 r
  123.     else. M) b# a/ C5 s# K
  124.     {
    2 O/ d6 H1 q$ c7 Z$ O8 X& C
  125.       olds=(*p).second;9 P; T9 [9 }5 r! u1 B) H
  126.       if(olds->vers<(float)atof(version))
    - [* j) R; z6 [
  127.       {2 F& w8 u! J, @0 y$ Q
  128.         olds->vers=(float)atof(version);4 E1 C/ H2 z2 i
  129.       }& K- a  q* @6 f) Q7 z9 k+ F. F3 X
  130.       free(file);
    " T' n& e- j* F6 d1 ?1 }
  131.     }, T+ G8 g1 H" P) N
  132.   }
    $ Q9 B, Y. f* \1 ^* \' Q2 k
  133.   fclose(fp);
    * H9 p/ d2 t! s  C) H. W4 Y
  134.   return true;; @# a) `0 l3 d. R  x
  135. }% E- |1 q  }1 b9 v: ]

  136. * g8 I' _8 A7 A6 w5 i: @
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    4 F2 {- C% l2 G8 |9 g7 x8 u2 t
  138. {
    ' J& ~$ b- J+ b1 g! ]9 ?/ R
  139.   TCHAR  szFull[MAX_PATH];
    9 G8 N7 I' n+ D7 Q. v2 U
  140.   TCHAR *token,*inter;0 l6 ]2 A1 s: F+ i8 j6 E; T3 e
  141.   *szPath=0;2 d4 f" U  H8 T4 _. Q
  142.   strcpy(szFull,szFullPath);# X4 q- \9 T0 r5 P  s4 }
  143.   token=strtok(szFull,"\\/");
    # p7 v; Z$ \$ `5 [, {/ W
  144.   inter=token;
    1 R+ f4 v; ~' _  L7 t3 C# O
  145.   while(token=strtok(NULL,"\\/"))
    + {8 @4 Z  s* Y, Q5 x" `. \# Z9 j7 i
  146.   {
    # M' E( e6 s+ X" I
  147.     strcat(szPath,inter);
    5 a" B; b3 l5 H$ t
  148.     strcat(szPath,"\");! ^4 v8 t$ ~) {& D( q9 d# K( _
  149.     inter=token;
    9 P2 l% \/ g+ ^0 I4 T3 M
  150.   }6 Y6 q6 f1 \4 m2 T9 m- T
  151.   return strlen(szPath);
    6 _6 ]" j' j, G+ {8 r
  152. }; S( B- o+ e1 B6 A9 v! `7 u9 Y5 C& @+ s

  153. 6 n$ O2 A" \) G: c  Z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    * L! s3 v- q& D: v- F  x+ w" m- L
  155. {
    ) J/ X1 j3 M9 _; J% w
  156.   DWORD attrib=GetFileAttributes(Target);
    ( r* C/ [4 Q" h9 j" P# B) {) |4 G
  157.   if(attrib!=-1)2 M/ E( Z7 f: L# g4 `6 Q, b% `" U
  158.   {% M3 e0 J) _- m
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ' I% U; f# O3 c* D" H
  160.     {) L$ Q3 H1 R# ]# o3 x2 O* z, v
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);7 b% |! I  e0 X8 P3 G; x# y% m
  162.       SetFileAttributes(Target,attrib);1 g0 C: A3 u& W3 O5 H
  163.     }: D+ W. T8 `# C
  164.   }
    ( u3 E1 \- q6 p0 @$ c  ^( z" T
  165.   CopyFile(Source,Target,Erase);
    # F' F# a& K4 S7 r' k' b, n
  166. }
    ! {- d4 o& m  {4 l

  167. / g$ V! H; i7 u7 F3 l
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ( T( H6 M* _8 `0 G! g3 }7 b
  169. {
    0 d& w2 n& H% |( ?
  170.      FILE *fp;) q0 a# F2 s) I, P( c9 L& B
  171.      char  szBuffer[8192];
    3 d" Y! Y2 z2 m) {. T
  172.   va_list  argptr;, l# e' Y( L, N1 ^7 j
  173. ) Z4 s5 N2 E6 Y  k5 G) a! Q
  174.         va_start(argptr,message);
    6 f, f$ f# B+ i5 N) _/ p
  175.         vsprintf(szBuffer,message,argptr);8 f9 p7 A3 G; c1 h6 d9 j
  176.         va_end(argptr);" i! Q9 {  v# {$ y3 c
  177.   fp=fopen(FileName,"a");
    1 ~0 T$ R2 R( _* G, f4 ?
  178.   if(fp)% H# l; _: _  c/ I3 W! l
  179.   {1 H& M* b. P  I5 ?
  180.     fprintf(fp,szBuffer);% }0 o) q: }4 c5 B
  181.     fclose(fp);
    ( e# y- M2 Y5 ~1 ]
  182.           _flushall();
    5 g" c$ `" `6 V) W0 e$ Q( i5 }
  183.   }
    % V3 y, P6 b' M1 s
  184. }
    ! o; p9 G" q3 h$ h( c
  185. ( X. N7 K  W& Q, N
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ' o# }/ }- K- `  z" K
  187. {
    * z4 b/ N" ]. ?* N
  188.      FILE *fp;( S/ m+ J" ~: R  K* ^
  189.     DWORD  attrib;
    - r. G" ^) Y5 }$ K- b! T& S
  190.   attrib=GetFileAttributes(FileName);/ t% v1 L; p. E6 h' k* H
  191.   if(attrib!=-1)5 S" g& N) S( \
  192.   {
      R) t+ u/ u. m% ?8 ]
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    % k( n! t# {% A$ R
  194.     if(!SetFileAttributes(FileName,attrib))4 j0 s  l2 e( a' {$ U. ]
  195.     {
    ( g4 ^. m4 E8 D+ ^5 M
  196.       return FALSE;
    5 O( ~! L. ?/ @! ?
  197.     }
    3 K1 j* R' E! T1 j: d4 X4 A1 w
  198.   }. J1 R' O: K. N2 v: m7 {6 e
  199.   fp=fopen(FileName,"wb");
    ! ^+ P) p) a0 ?% q7 k. u8 a; V- D$ z
  200.   if(fp)0 ~" G9 @% A$ Q
  201.   {) D4 [; x) @/ L3 _) k+ P' s
  202.     fclose(fp);7 e0 L7 F) Y- [% Q; p
  203.   }
    ; u8 i: \! N7 f/ N$ W
  204.   return TRUE;
    7 K- k5 r, c$ i# `+ @8 r2 N
  205. }
    - K. l: ?" I6 J6 m- y$ U  Q
  206. & J/ u6 o8 I5 T
  207. BOOL CRevAppApp::UpdateLocalVersion(void)# d" B/ Q# f. s" v
  208. {
    # Q, |1 V2 Z! [& V
  209.   char filename[MAX_PATH];
      x6 \. j4 I6 q( i6 ^
  210.   LPUPDATEFILE file,olds;$ t7 G6 g+ D! J) j+ j
  211.   std::map<int,CString>::iterator i;  y- G0 Z, S* p# p2 O
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! S, J5 n  _$ L/ V1 @; D4 V; j
  213.   std::list<CString>::iterator l;
    / {$ R& D4 T$ o% a

  214. % L+ M$ p- _; H/ j
  215.   if(bFirstUpdate)* f5 H1 c4 N/ @
  216.   {
    ; b5 e* M; v9 k0 f
  217.     dwCurrFile=0;
    / T7 N; m+ ~+ @; \; D; N$ J! v
  218.     bFirstUpdate=FALSE;  u8 i4 E$ p: w7 N4 Q& ?8 Q' t
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # E1 s7 w6 \2 h2 B+ v! }# H0 n4 @
  220.     {. m# [, s$ y5 {6 A  J
  221.       dwTotalFiles=UpdateLocal.size();. t6 n: F; t: O2 h
  222.       dwDownLoaded=0;
    1 m3 k; ^8 ]6 @( K) O' a6 s
  223.       bSilentStep=FALSE;
    . q, s7 |/ `* m" q
  224.       bCompressed=TRUE;; m9 f6 N6 y. `- P. x
  225.       strExtLocal.Empty();
    , ]+ h& h8 C% z2 t" T
  226.       strFullName=(*i).second;/ Z' o/ c4 E: s" P9 I9 p! k) j( E, x
  227.       dwProgramState=AP_CONNECT;9 o3 x4 J5 c! z  c9 ^$ P& \) H
  228.       return TRUE;
    & p3 Y  k0 N5 U& f, d0 p& Y
  229.     }
    - W% @. T0 y- P7 T, Q4 e: s" V: H+ O
  230.   }" E9 k) s8 \' W) W
  231.   else if(bRestartUpdater==FALSE)
    / F( Y1 C: \5 h
  232.   {
    # Z) `( l, J8 ~5 l
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())' t. m# \0 r' Q" o- \, L3 |' m" c4 D
  234.     {
    ( n4 s, |8 ?+ E
  235.       file=(*p).second;( i/ X+ i* \# S- z) X% b, C4 Z/ }
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    4 |0 X7 a( c/ h7 @
  237.       {8 Z3 s+ _& R2 v" |/ T) ~0 V& s
  238.         olds=(*p).second;$ [2 }: p; [# O( I2 `9 R
  239.         olds->vers=file->vers;
    * y6 R) n; [/ U
  240.       }
    6 ]& ?4 P5 b* \8 c% M# `  ?
  241.       else, w$ B6 M; B& K1 `: x
  242.       {3 O" I* L9 M0 l" t- j
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  `2 s4 R- f* `' s0 B
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    & L0 e6 o: a# z6 ^, i# V8 ?- Z
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    0 L3 n! m! b) T! q! g7 n
  246.       }4 \6 j+ |" _4 x4 T
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    / z3 Y& X0 q! D6 @% y, L8 U9 j
  248.       sprintf(filename,"(%s)",file->file);
    * y5 H0 t. t% [2 p5 c
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ \3 \# i9 `; J) U, H$ l
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }% [! @. ~0 f6 R# }7 c% m3 m  \4 I8 R
  251.     }
    . R! h1 c. t* j3 @, o! E  T
  252.     dwCurrFile++;
    4 i- \* K6 m8 M  A' @1 d  V+ n
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 c) F" g' e8 j5 t- F) N2 f
  254.     {
    " M$ _% J! m" _3 j! }0 a
  255.       bSilentStep=FALSE;
    ( d7 \$ e  X: F! A( i8 S
  256.       bCompressed=TRUE;
    * h1 ?, `% K8 R) E! k( ^; O; X
  257.       strExtLocal.Empty();
    7 a4 v, W0 E4 E9 B0 `
  258.       strFullName=(*i).second;) n9 c% l! @9 V* F  o* P8 O
  259.       dwProgramState=AP_CONNECT;
    + X/ K" l/ _. {
  260.       return TRUE;
    . M3 w0 p) s5 w: N1 ]8 m
  261.     }& f7 g8 ?$ @4 ?2 P1 I
  262.     if(!bRestartUpdater)/ X; Y* M" d  V
  263.     {. Z5 Q4 p' y* t6 q
  264.       int iCurrSize,iFileSize;' a. R8 C, O: p3 u' Z2 c+ S
  265.       iCurrSize=0;4 o! q, x. g) s) [- y
  266.       iFileSize=UpdateList2.size();8 h; W. e% O) r3 T( Q6 b9 E
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");; E7 A6 Z5 F  x7 u( X; a. P
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    1 U! B) i* l. K  `* d# F
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");$ o. ?' F) z- H. V( _3 ]! N2 R( O
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' J# Q7 f6 R8 N# G' Q7 g* ?
  271.       Fclearf(".\\update.dat");6 X) e% I+ }( ]' c8 b# T; `
  272.       Fprintf(".\\update.dat","Bloodyf\n");7 e2 t8 Z! F% Z6 e8 E% {0 z4 I
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)( j; h6 j# Y* m4 l, {' n. i
  274.       {6 l- ]% g# x" G
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())! b* Y  s) g1 r" x
  276.         {/ {9 w( O/ \" k' Y5 U$ V9 J
  277.           file=(*p).second;
    3 Y# I) J3 t8 N# T
  278.           sprintf(filename,"(%s)",file->file);
    $ W  _' \  j0 K. R
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      R$ _/ L% c& I" g8 w
  280.           iCurrSize++;
    9 K0 M: A, K" G
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    * h1 L, B/ v. d+ q( b
  282.         }7 [7 Y3 b# o* S
  283.       }( t5 n% c! S& ^2 ?4 [8 R
  284.       unlink(".\\update.txt");  U5 u' G/ S5 [' W6 h
  285.       unlink(".\\update.tmp");
    + H0 I8 w6 G3 p
  286.       Fclearf(".\\checkversion.dat");
    1 G/ C4 {) \; n
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);, v' [6 O* x, q7 d+ N/ c' t
  288.       if(UpdateLocal.size())4 C( |% y- p5 d! V
  289.       {; B* X  d9 W. t+ g0 I" g6 q
  290.         UpdateLocal.clear();
    1 f+ [) c; i7 U0 x- g# l- b3 U- S
  291.       }" {# J$ \+ l* h5 o' J% w
  292.       if(UpdateFile3.size())
    4 O  B, n3 C) G$ i! E! a
  293.       {
      P" y+ Y+ l6 T: G0 g$ k* g
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . v1 ~9 F8 K' D5 B" F3 B+ j3 c* r
  295.         {
    ) n, y4 r. b6 M3 B
  296.           file=(*p).second;
    $ b# L2 e6 L) K/ i- j
  297.           free(file);
    # x: U9 U% q1 W+ v# b
  298.         }
    ! F2 Z- M9 r; [- l1 g4 J$ h% E
  299.         UpdateFile3.clear();
    1 R7 n" a) p# O$ Q8 V  X
  300.         UpdateList3.clear();
    9 Y9 N- U% c. W% W
  301.       }3 {/ y! ~. f0 ^. }) i
  302.       if(UpdateFile2.size())
    8 Y2 m& q/ m' c% l
  303.       {
    / t, ?) L% J! v2 M6 i+ |
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 O5 u: g: i% D! B5 S. G3 ?
  305.         {
    ! e4 h7 p2 b$ M5 o9 x' k) n  ?
  306.           file=(*p).second;* F5 b% N+ M( g; N# I
  307.           free(file);6 O2 E7 w  f, I: q
  308.         }3 v# r2 N0 j( v( Z: J
  309.         UpdateFile2.clear();: Q. f2 v, A/ @" M
  310.         UpdateList2.clear();
    . q# W% S/ F9 `  e. j& S/ i% V
  311.       }
    3 m7 v0 k; H9 c; `* m. f. U) O5 x( e0 l
  312.       if(UpdateFile1.size())
    7 O  K4 |. [  c
  313.       {
    / Z/ r9 t8 ]" i2 P; N) t9 N
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      c! ^2 m) y7 ^
  315.         {6 h% b  w. \* u
  316.           file=(*p).second;
    # \6 j& a: J- X+ [- g# B3 @
  317.           free(file);8 t7 P; U) _# A$ K  L" d9 v
  318.         }
    7 ]/ _/ b% x; E8 w4 k$ p
  319.         UpdateFile1.clear();
    9 ~: e" c6 O: e) n
  320.         UpdateList1.clear();
    , N+ d) M. f. f" G8 q5 y
  321.       }
    : ^. r; r5 s  |: Z" Z$ ]
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));$ P) k9 I6 b1 z, ~1 d
  323.     }* i- y* m% A& ?: {" c( @
  324.   }
    6 \: x7 A' U$ v! K
  325.   return FALSE;3 Z  R9 ~) t5 u8 n4 G* k
  326. }2 l4 I- S1 v9 H: Z6 S: E! c: d
  327. 4 G* }- `1 U2 X' h  [0 J
  328. void CRevAppApp::ClearAll(void)
    2 O( k! i6 ?+ s, p+ Z/ Y
  329. {0 B' g! d! e2 a6 ]6 t8 j
  330.   LPUPDATEFILE file;
    , a7 J- s% H3 t+ y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    , P5 i  I- t: M' V  {6 U

  332. - h  u( d/ F4 b6 M5 t" n5 V
  333.   if(UpdateLocal.size())
    ' \4 O3 Q9 f; V" k
  334.   {! l2 l8 ~' _9 k/ W2 l; l& w9 E
  335.     UpdateLocal.clear();! V6 v! k; Q7 T) w7 f" o8 i7 A
  336.   }( p/ ]/ b; A4 s1 Z
  337.   if(UpdateFile3.size())4 ]7 ?+ o; A5 v  `3 w/ t* l
  338.   {
    7 z4 L4 o- r+ O; \( |; o
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    / L5 B5 ?8 M5 L
  340.     {
    $ e: W2 B- Y& H$ a4 G  S) O) {
  341.       file=(*p).second;) S: S$ W5 G* c& _3 u
  342.       free(file);8 X! `  P  ~9 T: a" [
  343.     }
    + e4 e# Y! c' k% T$ B! O9 C9 G1 D
  344.     UpdateFile3.clear();: l5 }6 n. n  ^% F& `3 |2 k" v
  345.     UpdateList3.clear();
    2 b& C6 t: I5 {4 y' o1 j6 h
  346.   }
    : \" }* G1 |( i  v
  347.   if(UpdateFile2.size())1 ^7 b; J6 o2 D8 G7 ~$ R+ s( A
  348.   {4 c& i+ b4 n- U9 v) K
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * V5 ], Y6 J, k: R) y
  350.     {
    2 N4 e2 a1 C- }* M( T# I
  351.       file=(*p).second;3 o  A, _8 x; g* C9 Q+ X7 i4 a
  352.       free(file);
    / c9 _4 X2 v. g# C2 e
  353.     }
    * [9 T! g: b: Y
  354.     UpdateFile2.clear();
    ' r9 b) ?- S! X
  355.     UpdateList2.clear();$ l$ e$ z' F5 g7 Y) ?# W
  356.   }0 f9 X4 ]. [# Q; a( U
  357.   if(UpdateFile1.size())
    ' t6 k  S  j: c1 e
  358.   {1 V9 l' D$ E. k+ F
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 m  m0 p  N- H: p
  360.     {
    : R! C; E) s$ P* v; X, G
  361.       file=(*p).second;
      _3 [: R/ }+ }! V( H5 T) g0 _
  362.       free(file);
    6 o6 O1 t3 _0 ]( G& I& C
  363.     }; ?- Q0 h5 o# }/ n( \. K
  364.     UpdateFile1.clear();$ i8 H5 m) D& R5 E, {6 W0 h& Z
  365.     UpdateList1.clear();3 W8 [2 W3 ^0 v; H$ l4 l' F
  366.   }( Z) I, ?6 C- C" v! J  S
  367. }  2 d' W+ E: h* }' Q0 A
  368.   
    " t' O. [4 K7 p" E
  369. BOOL CRevAppApp::CheckLocalVersion(void)2 k4 }2 s9 x( c7 L. p+ D; p. X
  370. {
    9 g* i4 ^, H6 }" {8 |
  371.   int c;
    1 N# x2 q/ J) X. U$ a+ I
  372.   LPUPDATEFILE file1,file2;' b/ Y. \. w3 ~& V
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;# H' N% B" Q9 L  h$ X
  374.   std::list<CString>::iterator l;
    5 D3 X. ^. E' y( C

  375. " E5 S6 N2 v! O3 V
  376.   UpdateLocal.clear();9 f, b2 N% @4 d9 k* G# v
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);& y) H4 O" ?+ l$ X2 M6 P8 j# ~& L
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);/ Q  N; S+ }4 k" _. O- f
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    9 F2 w* j( g/ ~2 [6 }/ X# i! G
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);4 G8 M, @, \6 J! L& _
  381.   if(UpdateFile3.size())* j3 v& g; Q0 z; ~6 L
  382.   {
    & q/ O2 D+ U8 N" ?! J& }
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    + o# x1 D& W1 x) @5 h
  384.     {8 h3 O/ B" A3 D; q4 Z
  385.       file2=(LPUPDATEFILE)(*i).second;
    , {. c, W. Y" t! ~9 p
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      Z. }% @6 a2 q$ J2 h! e+ T
  387.       {
    $ n: s  F5 `0 ?: w
  388.         file1=(LPUPDATEFILE)(*p).second;6 r7 d. {8 i% ^! _/ Z
  389.         file1->vers=file2->vers;, `1 |3 a" o9 P$ Y3 V5 i( t5 @
  390.       }( d+ Y8 K  H3 f/ F* x. G, w
  391.       else
    / a( E- g. p- M8 a
  392.       {& ^& d) h8 c% Q4 a) m( P- V- Z8 h' s( U
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + S, p5 e6 L- ^  K& C  N
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ) T7 k) c/ c: X: U" g. y# Q
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ! Z+ }) ~5 [; n8 |
  396.       }  }* J: P5 M7 z: m' D
  397.     }
    5 i/ i( o! J8 Y% F' e
  398.   }+ T$ s& ]" r2 B9 E( x1 Y6 }: V. [6 E
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * N5 e* D: _7 X
  400.   {& U, \  D# F+ g5 U! k; ~3 c; s
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    - K  u+ p6 `  z
  402.     {& Z7 A. ]4 J! |$ \/ v% }
  403.       file2=(LPUPDATEFILE)(*i).second;+ \4 k# G& O" k( [8 @0 k
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 @* A2 }! D% Y6 F/ ~1 Q: X
  405.       {
    * `, C1 v; H  ?2 r9 }4 R- V( r
  406.         file1=(LPUPDATEFILE)(*p).second;
      s2 M& b2 v8 c% \
  407.         if(file1->vers!=file2->vers)
    % z5 F8 \( h, F, {& C
  408.         {; |0 z: {: u1 t0 C0 r- U; R
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 c. j; s( E: F6 o
  410.           c++;& o6 u. e! G3 Q7 F( A
  411.         }
      C7 q. p6 \2 ?" U9 ^
  412.       }
    ; f( y. A3 `: d+ B. R
  413.       else
    , p" O4 @/ E/ x' N- N! Z
  414.       {
    7 ~2 b' i' E% Z0 I) h/ {2 x/ x
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 t$ {2 b7 S4 X* X
  416.         c++;$ v8 C2 U* M! k0 z! X, U) N  K
  417.       }
    # A& t% n, h/ I( r! D" l
  418.     }
    3 x5 E* S6 Z! s9 _! ~+ g# f+ X
  419.   }
    - Y$ R; f* D; y3 Z$ ]" B
  420.   unlink(".\\DownLoad\\update.txt");, N; R9 c: t6 p$ g: ?! s
  421.   if(UpdateLocal.size()) return TRUE;
    4 M: @# m6 D1 L: f
  422.   else                   return FALSE;, h6 N" \2 v; y8 G& E
  423. }* |& c0 ~: O4 o4 `3 y7 N
  424. ! P& Z1 ^$ ?3 _( ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    0 V1 t' e# j9 V( X* ]
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"/ q+ s7 Q' ]) G
  427. 3 u- r4 q  F5 o, t
  428. 4 U) s& m. f8 J* M

  429. ' v1 ~3 }" {* G
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)2 F, B1 ~  }" U0 A* r2 p2 s0 M
  431. {3 l) d& c! W9 m
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;: _2 E8 {) `2 V9 ~7 K  v. l
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 n! J0 f/ p3 J7 S; I4 A" [
  434.   {
    6 f/ k# d; A, Q/ y
  435.     char szLanguage[50];
    ! d  b& A6 t! S0 |$ f
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    , p7 Q  f4 N# Q3 K
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' c0 {) u8 b0 V" r: X4 @
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# J8 a1 y' \- M; S& y# P6 Q; Q) c0 j
  439.     else                                   m_iLanguage=ENGLISH;
    " [! q, B2 }- L
  440.     char szRegister[100];
    % t8 h( q/ b& E' t. ~$ k
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! S& S% i& T; w! g: O8 \/ [! g
  442.     strRegsName=szRegister;
    ( Z' n" u: ~8 n  o
  443.     char szPatchURL[100];* q$ b" C% ^& A' b! p' q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 G' f2 ^0 v3 ^" l5 W* `
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: p* S2 j3 [! v7 F  b
  446.   }
    + y# _& I$ r7 `( O9 T
  447.   else
    8 \8 Q$ a4 I1 n3 d, l5 O. s
  448.   {9 P, _4 O0 `3 u/ ~7 D4 r
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 V1 C" q5 a" K
  450.     strRegsName=DEFAULT_REG_URL;
    : n9 ^: c8 o* R3 p' u# [/ A
  451.   }
    * b: T, F$ g4 k: a
  452.   if(GetFileAttributes("hosts.ini")!=-1)* }% K- @  Z& h$ j
  453.   {2 z7 Z6 M; s5 W
  454.     char szIP[50];
    6 J: e& f* }' c' f* K! i+ F8 p! }9 n
  455.     char szDIR[300];
    - m/ W; v4 `2 e
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    + A, C) N) A2 Z* f; I4 A1 K5 j
  457.     {
    ' u9 P0 J/ h3 K# I* m+ c* G
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    # `) F2 n4 c+ ^
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");8 z) K2 W- Z1 y) d9 W% u
  460.       strHostName=szIP;) F7 Z, N% R8 S5 x7 G% e: I. b
  461.       strHostPath.Format("/%s",szDIR);; g# P' P- D* e9 [& i* N
  462.     }) {) K4 Y2 W  |. P$ V( s
  463.     else
    7 N0 T4 r8 r% O: p
  464.     {5 g5 b% _. ^0 e/ u" x' D: i% p
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)/ ^& @9 I# Q# [1 H: X4 }
  466.       {
      |  ~* L4 _" e& e- r  ~
  467.         char szLanguage[50];+ a2 b: u: h7 l+ b- X, I, W  J
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + D8 N8 ^% v+ G8 E2 z- b' C4 v2 T
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;( R* p" J; Y# ^8 q1 M/ |
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ U7 G5 U* T; N2 w$ J
  471.         else                                   m_iLanguage=ENGLISH;
    % s6 l! ~& e' l1 s( y: t
  472.         char szRegister[100];
    7 G% U7 V/ t0 R
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % Q5 k; B7 q- I7 p3 |# y- w
  474.         strRegsName=szRegister;
    0 g' Z2 O  H) M. D. ]# C5 a
  475.         char szPatchURL[100];3 g7 }! y; u; O8 @
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* L/ e0 C6 v% X2 p
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ D  W# Z: A4 A' E7 Q/ w& v
  478.       }" I' e" \# h4 N% [# Z$ _* q( y
  479.       else  m: d4 P. y1 S* a  E
  480.       {
    3 z9 ]3 z! U* O
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);* c; O7 h- g8 x& }" l
  482.         strRegsName=DEFAULT_REG_URL;6 x! ~- ~: f, [2 Q( ]( d* `
  483.       }3 q: I9 t8 m* q
  484.     }/ ^( u9 ~/ z; o" h: I5 d
  485.   }
    ' D3 s4 p% b" \# q, V9 _
  486.   return true;
    ; i0 g) d$ C, g5 c& O( r
  487. }
    8 t8 H% c; w" B2 h
  488. 2 {5 u# N/ y6 [1 H. C
  489. #include ".\ZLib\unzip.h"" Z& e* Y) ?; F9 Y7 {
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ; m1 a6 F# R1 ?1 x; D
  491. /////////////////////////////////////////////////////////////////////////////
    1 x  V$ F; a" S( Z5 ]6 r/ {
  492. // CRevAppApp initialization
    4 m& o& E) b% o3 a) k# h

  493.   y0 A# F" s- \) n5 F  X
  494. BOOL CRevAppApp::InitInstance()
    . m4 l8 n+ F+ x' ]$ G1 d
  495. {
    ( G3 s& _, a$ D# |! e
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    3 ]8 o% t+ n/ U7 y9 y, p
  497. ; Q# m5 d) v( S4 C- t
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ; E( T- h. z) t3 j- B5 e
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ) z6 g/ y/ S0 l% I
  500.   {
    5 z3 t4 X# ?; g+ I! J6 O$ W2 y
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ) P' x5 O5 J: d! l9 ]
  502.     GetPathFromFullPath(szPathTarget,szPathSource);7 W. B2 a; E* W0 D. u5 H
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))% _9 j' t: I! C6 @8 D4 q" b1 M
  504.     {2 l7 h" x% y5 u1 j
  505.       strcpy(szPath,szPathTarget);6 B) g7 x4 ^- Z2 i3 j
  506.       SetCurrentDirectory(szPath);4 S* a2 @$ {# m/ F1 S3 X) D
  507.     }
    # I$ y( K5 T. Z6 [
  508.   }
    7 a0 l& G$ o2 R6 [
  509. #ifdef _DEBUG
    - I( V) `2 @4 D
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - J, k; x+ y/ w% |6 X
  511. #else
    ( |! W! s( e4 h& [+ f# O
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 g0 b, U# V2 _
  513. #endif. u( j0 z7 e$ \5 S
  514.   {2 G- n1 E/ k5 P6 V
  515.     char tempFileName[MAX_PATH];1 `. \9 W( J, i4 b  R: k
  516.     strcpy(tempFileName,szPathSource);
    $ j2 H; \( w1 b
  517.     tempFileName[strlen(szPathSource)-12]=0;" z6 z% o! @  `
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    6 H6 t; |! Z! @2 y: n. \  M/ H9 F
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);$ H$ m- `- ~( [* f* V7 d
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    . Q6 k- B6 w3 {, ~5 A* @6 L
  521.     return TRUE;$ Y% d. l4 K8 `$ c+ y2 J
  522.   }/ A, N( I% y- N( N% ]" s+ f$ F
  523.   // Nuke 0118: Delete run.exe
    : B5 ?' ]5 y' F5 r
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    / J' h* P( C. X8 n
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");- r7 G8 c) r( V% F* t7 W: B. n
  526.   if(!ReadCfgFile("Config.ini"))
    ( o0 K+ I( }1 }5 P3 X( D0 j. _
  527.   {
      G5 B2 j# `& u: i2 w; B
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);% H8 @7 G7 {8 b. ]+ @5 {/ F  ?+ @
  529.     return TRUE;  g6 w: b* x& U% T. f. [
  530.   }
    7 N& ]9 `% @( a" s! H
  531.   HANDLE mutex;& c2 h0 X0 l  a* r# a
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    7 U# n+ T' o; h- q7 d% V& X& O  T
  533.   {
    ( m# ]0 _3 u0 y+ Q1 m
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)' Z+ a( @( i9 }+ A
  535.     {& I0 l9 f8 z# U$ J
  536.       CloseHandle(mutex);
    , a8 j/ {0 l: `3 q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);; j9 b' @5 ~* T7 C2 L$ _+ t! f
  538.       return TRUE;2 E1 J6 [( }  \1 Q
  539.     }4 M5 M( k5 w$ X' R$ S5 C
  540.   }  
    / S) N* I/ m7 }1 @% G
  541.   CloseHandle(mutex);
    0 |3 `! t. g+ ?/ |1 p6 N
  542. 3 O# Y) T& M  a# o( p: C% T
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);2 [% N) N* B0 E. ]

  544. 7 ?% [3 m9 X3 p, s7 \" r& r7 _& t
  545.         AfxEnableControlContainer();
    3 G. J' o/ n1 |& i* }8 y9 G

  546. + d. W, E) R# h, A0 O
  547.   bCanUpdate=FALSE;3 z; O+ ]4 z* {% z1 m. R
  548.   dwStartUpSteps=1;% C% L, x& {- d: E( j9 X$ w
  549.   dwProgramState=AP_NOTHING;
    ' i  X- P- x3 X

  550. 2 e, m8 k2 e. }' ~# S7 D/ Q" X5 J
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    - k2 k# \- f% P: S: e$ f; r

  552. * I, u$ G2 b, C
  553.         // Standard initialization
    5 |2 j3 n$ @" a' z$ X8 W4 T
  554.         // If you are not using these features and wish to reduce the size# M+ f8 ?* ^; L/ B: y
  555.         //  of your final executable, you should remove from the following
    ) A& @; d/ E: G3 s: t
  556.         //  the specific initialization routines you do not need.* _) B' \2 b' W! y$ r1 B* @) H
  557. : B0 A8 H) u1 X6 o- j# l: u' w
  558. #ifdef _AFXDLL, F. l+ k( V/ b
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ) l* S! }- [' I. V9 Z# s& ?
  560. #else& i+ Q) |5 C+ }% ?0 P+ ~5 B
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically; L3 m. t" w) k
  562. #endif
    $ Y( R5 ]4 i/ S

  563. ) m  H; E$ u( X) o1 o: K- T
  564.   dlg=new CRevAppDlg;6 S1 e( c! C- R3 [
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    + Q- u6 H- a" H  k# E
  566.   dlg->ShowWindow(SW_SHOWNORMAL);4 h: J5 a' `5 ?- u- m1 I
  567.   m_pMainWnd=dlg;
    ! t/ v# m, n1 S4 x

  568. 6 |' R5 W8 u' r& p* O3 w/ O
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    & {# S+ n8 ~2 s- u

  570. 0 Q6 V  U; R0 m) x- e% W- B
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ( n9 l& g! v' f" Y, o1 L5 @
  572. //  ULONG_PTR gdiplusToken;
    ; _- A5 A  a4 o# s# I7 H& \
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    3 n5 r8 `7 }( Q* z, Z4 w" A- X
  574. 9 h, q; x4 e) U) ~# m
  575. //        CRevAppDlg dlg;
    3 I" ~; G5 I( V* [
  576. //        int nResponse = dlg.DoModal();
    1 X8 Q, `1 N* p3 W, F9 |% ^5 R' r
  577. //        if (nResponse == IDOK)
    ; t: Q- P1 w0 t8 A# t- p# M' r. e
  578. //        {. Y2 W. s4 h# r, ]( k
  579. //                // TODO: Place code here to handle when the dialog is
    , w, U2 I/ N; z; ~
  580. //                //  dismissed with OK
    " d# T, ^" D! y. l, [
  581. //        }( q( L1 Z: g1 V1 y+ d" W$ Y
  582. //        else if (nResponse == IDCANCEL)( o( u: g4 z5 q$ s. h6 c
  583. //        {# ^  i, {2 {( d9 S  r
  584. //                // TODO: Place code here to handle when the dialog is0 H. Y6 x1 E  b; ^  X
  585. //                //  dismissed with Cancel
    & y* S- h$ P' d1 s% O5 f" _, V
  586. //        }0 P' p7 [, E$ O
  587. % g9 j5 Z# @. M/ s" H& A- E
  588.         // Since the dialog has been closed, return FALSE so that we exit the5 Q/ p5 s- B1 e- D
  589.         //  application, rather than start the application's message pump.
    / m& h% E% \7 i% t; i2 m
  590.         return TRUE;
    7 X( {8 n$ L+ Q6 E/ _  B) o! E( N
  591. }5 e3 I& K$ r- S: z- T
  592. ( V7 E  x% h0 ], [- f
  593. char *CRevAppApp::strtok3(char *pSource,char *token)( E! |2 D4 [( p' Q
  594. {4 Z) O% X$ n$ w0 \$ y* b8 B
  595.   int i;
    3 f1 m6 T- O0 i
  596.   char *szRet;3 l3 W+ I0 |# ?# v

  597. ( U4 @$ n9 e) g, d. h5 L) C* [
  598.   if(pSource) { itoken=0; sztoken=pSource; }3 f8 C- g( Z. B7 V( j6 G7 K
  599.   if(sztoken)
    8 o& \8 r9 V: H: g3 G6 s( s
  600.   {9 h2 p8 _- L. q6 O& v+ X5 k
  601.     szRet=&sztoken[itoken];
    9 A% p! O2 C8 ^/ O, n3 H
  602.     while(sztoken[itoken])
    2 @6 t: _4 W8 D! N$ X9 W$ ^
  603.     {
    5 t- W9 e1 H5 o3 l* ]( N2 s
  604.       for(i=0;i<(int)strlen(token);i++)
    2 H' S7 Y# V: @+ L" J+ {$ q! D* K$ K
  605.       {1 N3 `) [- A' t
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])! f6 p3 U2 G# g: x
  607.         {; z; T; p. w& L: `! J6 W4 A; t3 |
  608.           sztoken[itoken++]=0;, \1 A  s  @8 L& `4 }: M1 E/ [
  609.           sztoken[itoken++]=0;& u9 `( P4 f* Y# i/ b" q( v# \
  610.           return szRet;
    5 Z2 I5 ^- c$ e8 ~
  611.         }& i. z9 ~( M; K. z& j- n5 N0 {# P
  612.       }  K7 J7 y0 z% t
  613.       itoken++;% }: `8 B4 W. S8 _! L4 P
  614.     }
    / A/ t  }( q( ^. \4 _5 \- b
  615.   }  r/ }) y  j) ?) E
  616.   return NULL;
    8 f- L( ?8 u3 W' y4 {3 b
  617. }: @; n1 A% K' W* W' b  Z5 B

  618. / d+ X/ L" p0 y4 {8 M" G! {
  619. void ProcessProc(long Total,long Current)
    ! W& o( H) ]3 |3 ^" S
  620. {
    9 c% Z; ]+ J2 o8 T7 h+ U% ^
  621.         MSG msg;, H2 C( p- \/ [1 e2 d& C4 e* Y! t
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);" h9 ?/ B1 ]  T0 L
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    # {+ E: f6 d4 m; E3 _2 k1 c# t
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      e6 h. N- l$ t% `& U+ z
  625.         {
    ' Y$ }: U( t% R5 j9 ]4 p' {  Y
  626.                 if(!GetMessage(&msg,NULL,0,0))
    % J' c  t- q. B$ U5 \  I8 a5 V
  627.                 {
    ( Q1 e, C8 b: i
  628.                         return;
    " L& Z; I& U" C+ w% O: i
  629.                 }
    0 W9 A  [& c! H
  630.                 TranslateMessage(&msg);
    8 F% t4 {" }5 \$ ]3 P0 @
  631.                 DispatchMessage(&msg);
    6 e( e, v$ X* x6 t) F
  632.         }        ' l2 W! O9 L2 N0 v( s  N. T$ L. L
  633. }
    - ~9 y) M) @$ E8 n

  634. 7 G/ J4 S% b9 ~3 ]/ Z* x$ T* @$ J! G
  635. BOOL bFirstChar=TRUE;
    3 ^# {5 p7 J* m0 S+ a

  636. . g" Z. k3 m" L
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ( D3 d5 G- v) N: f; a! k
  638. {! E8 C/ i/ h7 y/ @" w' Q& q. z
  639.         // TODO: Add your specialized code here and/or call the base class' {$ |# A, \1 c" Y! m
  640.   switch(dwProgramState)0 S8 }) Q  C: T8 W
  641.   {, z8 Z9 b/ x. w; c0 |- C$ V
  642.   case AP_NOTHING:
    5 R' N$ W" k/ U0 p6 J& P
  643.     switch(dwStartUpSteps)
    3 A9 Y' ^: r- {; m- b0 K( I, f1 f
  644.     {
    $ j; ], n8 H9 R* c
  645.     case 1:: o4 n- H5 N2 s
  646.       {+ V' p4 s4 \: Y9 i- Z$ W4 j
  647.         int i;
    - l% t* `) g, m4 C0 m4 O& `
  648.         CDC *pCDC=dlg->GetDC();# q3 f8 \2 Z3 ?& F* G
  649.         HDC hdcwnd=pCDC->m_hDC;: Q7 d5 m& B$ f; Q
  650. //        Graphics graphics(hdcwnd);
    9 D4 I, S* m6 \: P/ t3 X
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    * O& ^0 }4 O/ o5 ?& H7 S$ S0 W
  652. //        INT iWidth=bitmap.GetWidth();
    + }4 C- j, w6 H4 F: R+ x1 K; q
  653. //        INT iHeight=bitmap.GetHeight();
    ) c1 B: ~% n  C4 e+ a8 _
  654. //        Color color,colorTemp;6 E9 |* f+ O) N. ^% p
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    6 K5 ~9 V4 k2 ?; H6 o& |  B% v4 d
  656. //        {1 z& s4 P. ]! y7 j5 u% s
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)$ o1 r" J# i) s
  658. //          {0 g% d, g+ F9 m' s
  659. //            bitmap.GetPixel(iColumn,iRow,&color);% C1 j1 Q6 y; V" C: d5 O1 N: x! E
  660. //            colorTemp.SetValue(color.MakeARGB(& \2 o7 o0 ~1 U+ }; [
  661. //              (BYTE)(255*iColumn/iWidth),( b+ c: Y) _% j7 Y+ Z0 r
  662. //              color.GetRed(),
    # x# C" W- n4 E  B
  663. //              color.GetGreen(),
    * R8 G0 D9 ~7 N- d. u" H2 B
  664. //              color.GetBlue()));, Q, t) r9 K8 B# j
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);$ T$ F/ K  R: L( ^
  666. //          }
    6 p7 c4 u) ]9 B! }, y- }" c
  667. //        }
    ; k1 R9 T. ]6 X) T  W
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);+ O' E( b- p& J
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 W' {$ K6 _; V# h: }# k. |, I
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    , W6 ~1 U1 T: i- }  t8 w$ C
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 u: @3 _$ q: j+ I9 ^" s
  672.         for(i=0;i<240;i+=8)5 u' _6 {& w2 p$ b3 o8 H; U
  673.         {# p! V/ _8 {8 p* [6 l# L+ ?
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ w: c1 L" X5 |- r# s  Y. g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 M1 @# {7 H' q
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# e  U2 d/ o& S9 ?
  677.           Sleep(33);* K9 r6 _# Y9 N3 [$ Z/ S
  678.         }& B9 q  V, z0 I0 t
  679.         Sleep(1000);0 U+ z9 N" p- f( W# R, G
  680.         for(i=240;i>0;i-=8)
    & S, h8 Z' v9 E) M, Y. m
  681.         {
    $ A2 f+ [8 l0 u. X& l1 d" l
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ l( M; q  k& ~% S" W
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 ~, m/ t! @4 k. m- q2 t3 q4 M
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ s5 H" x( O7 G
  685.           Sleep(33);
    % \1 v$ g! Y( H0 Q+ x4 K
  686.         }
    # S! F$ @/ E1 O0 G- _* s7 p
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);8 n4 D; k( Q8 B7 `3 u
  688.         dlg->ReleaseDC(pCDC);
    7 Z* ?+ |" s, ~7 |
  689.         DeleteDC(hdctar);
    * d3 O: K# Z2 x. k, O) P- R$ K
  690.         DeleteDC(hdcsrc);6 T6 E8 b: L% G- Z" B1 K  [
  691.         DeleteDC(hdcorg);
    4 [* @6 a8 Q/ u- V8 A: ]
  692.       }
    - U* L( j6 }( G% E+ R& i
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    . t" w1 N  e- C, K
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");0 ^  _( T. U7 h; ~4 ?1 ?
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");" J4 s' N/ J, |- ^) _
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    2 @+ d9 p8 R& z% I. G
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) ?' D8 I8 K4 C/ W, b
  698.       if(!Dn.Connected())
    2 C+ \1 J3 }; O1 u- j) s
  699.       {
    , w% V# V/ v) {* Q3 }3 f
  700.         dwTotalFiles=1;
    ; r, u/ ~! Z3 ~8 l* W7 E
  701.         dwDownLoaded=0;# }' X  @0 S9 L, f1 y" E5 l# x
  702.         bSilentStep=TRUE;' Y6 ^) ^. [1 j' R' C) a/ E: }
  703.         bCompressed=FALSE;9 V9 g( ~; z# U9 }
  704.         strExtLocal.Empty();% w) x; E! ?3 w) A9 U
  705.         strFullName="readme.txt";" z5 z2 @) x& Z& }% M1 K* ~& U! b! M
  706.         dwProgramState=AP_CONNECT;
    4 _" v$ G% {4 M5 B" C% W1 q
  707.       }% E  N; W# K* m3 R7 Z$ s
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();& [8 W+ d7 i" X$ M  f
  709.       dwStartUpSteps=2;9 V7 }0 E0 h! u
  710.       break;
    # |* Q" `2 e5 o8 p  x0 Y$ y
  711.     case 2:' Q: c$ M  B/ I! l7 {4 ~) m; a
  712.       {4 @" M* U& v/ @# Q& ]7 `! h
  713.         int iEOF;
    0 K5 q1 Q% `/ l% m8 o; N. F
  714.         FILE *fp;: ~5 `; Y* I. v/ F( P  ]! c) `
  715.         char szString[512];: C8 b" C5 I. X  w4 d" }' L- C. |
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");( K7 [# B  B: l  F- M
  717.         if(fp)
    - E4 `$ J7 s* u, }9 B
  718.         {! q5 E* \- T& D  x% H7 T4 q
  719.           do! C6 ~$ ^  }% F6 R. Y4 Z
  720.           {
    8 M, f6 h# Y# p5 w; d  j
  721.             iEOF=fscanf(fp,"%s",szString);
    : O4 l, A( D  D, z* v! _+ ^
  722.             if(strlen(szString))
    4 L0 ?# Z' U6 m9 N; g' J0 T' A
  723.             {
    8 R, p  y. ^( u! V+ f5 H8 E
  724.               if(bFirstChar)
    ; l! A2 C/ T, g$ {# h
  725.               {
    , G# v! @9 q, J! [
  726.                 bFirstChar=FALSE;" |$ x! q% _; {1 [0 d
  727.                 bConnectIsBig5=FALSE;
    % Y. ?+ U4 K% P6 n, l. g. p/ a- S
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; x5 o+ r/ j+ \3 E; @
  729.               }5 K: p+ I; n" I7 U; I5 i6 a3 M
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    & a+ `3 M$ j  l% Z9 V. f6 A
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));' j5 x: I, S7 }+ [' F5 k
  732.               dlg->m_ListText.AddString(szString);  ]) V; s# _# h  e
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" L6 v7 k$ [& \* m2 e( N9 v( u& W6 i
  734.               *szString=0;3 n' f/ N* [4 Q$ e8 F: i7 V
  735.             }& u* X; B6 B8 A  d+ |
  736.           } while(iEOF!=EOF);
    ! n' t7 O$ U1 E2 e2 F9 |7 y
  737.           fclose(fp);' _! y) s4 I1 g+ a2 T& t
  738.           unlink(".\\DownLoad\\readme.txt");
    % p2 l/ G0 Y6 G3 L
  739.           dwStartUpSteps=3;
    5 \9 `0 k' _8 E2 P
  740.         }
    ! z* C! H7 q3 W
  741.       }
    4 `; f1 c8 R% U+ ^/ J$ @# @4 B
  742.       break;
    % r8 G) {% r5 i/ w$ n
  743.     case 3:
    * K9 [& _) J4 R
  744.       if(!Dn.Connected())
    / _1 l8 \6 d6 ^, l4 i
  745.       {
    ) W2 q7 c/ p$ E. ^5 a. e5 z5 s
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    + l0 `7 ^% G+ z1 E7 [' w2 @
  747.         dwTotalFiles=1;( n8 q8 v) E" G/ k: F  O, n& r1 {
  748.         dwDownLoaded=0;" r8 _% V5 [9 n
  749.         bSilentStep=TRUE;5 @9 d- k% x/ T  \( s
  750.         bCompressed=FALSE;3 e! G5 \8 R/ B, N2 M, G
  751.         strExtLocal.Empty();
    : ~7 U' ]/ {/ z4 Q  ~/ |% r
  752.         strFullName="checkversion.txt";
    ( N, p" o8 |- l
  753.         dwProgramState=AP_CONNECT;; U5 a) Y, B0 m
  754.       }% `9 p1 P- T  g9 W" d
  755.       dwStartUpSteps=4;
    2 _% A: \  z/ @* H! J  ?
  756.       break;4 `- T# t" q0 [( p5 Z: e
  757.     case 4:0 j1 }. ~- _* X. a# Y4 Y
  758.       {% o% S* d/ p: k/ O- k
  759.         FILE *fp;
    . S! e: v7 }6 _  u8 `9 q
  760.         char szString1[128];% c5 C# K# q: f; V. [; S8 _
  761.         char szString2[128];* G* Y0 ?2 ?: G/ U9 P
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");: N. X6 D4 S- Y  h0 d" R
  763.         if(fp)
    % O# `" @" a# u. t+ q, J' i5 u# N
  764.         {2 H/ ^& M9 Q* V; m' h
  765.           fscanf(fp,"%s",szString1);  ~) l* Q4 W) V6 o. h
  766.           fclose(fp);
    " c. E  t) V8 O( }' ?
  767.           fCheckVersion=atof(szString1);7 B4 |, k/ b) I: H0 U0 P" T) z
  768.           fp=fopen(".\\checkversion.dat","r");
    : R* @& W8 _( L. c+ m) b( y- a+ L9 F
  769.           if(fp)* P. _2 z% f& o# a8 N7 j2 n9 |
  770.           {
    ! Y5 g% F2 x9 `
  771.             fscanf(fp,"%s",szString2);
    - k1 v" v# C6 ~" S
  772.             fclose(fp);( T# Y; v$ q3 q6 J' x8 b* u
  773.             if(atof(szString1)!=atof(szString2))7 d8 x; H. t" P
  774.             {. W# j- F) g$ D! W
  775.               if(!Dn.Connected())
    $ w/ p; i# S/ M" J5 z, V
  776.               {9 y: l; E$ }# X
  777.                 bFirstUpdate=TRUE;' |, L% R5 d/ Q8 q: @
  778.                 dwTotalFiles=1;% I- p: p& e$ |
  779.                 dwDownLoaded=0;
    8 X. f, @4 w3 l8 ~: g; ?
  780.                 bSilentStep=FALSE;! U/ ~' h' @# X% L# u9 D% J/ G8 W
  781.                 bCompressed=TRUE;6 U; C3 c, ]$ W5 ?: v" H
  782.                 strExtLocal=".\\DownLoad\";. p+ `: h+ Q3 r  q9 U
  783.                 strFullName="update.txt";3 j3 v: J& q& \* a. }6 h
  784.                 dwProgramState=AP_CONNECT;
    3 P! i5 Q' y% `+ G' M; p
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + c& I# n/ {7 r, c4 R6 l
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , b; x7 o! F: Q5 h/ v  m* }" {" O
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
      f% ^) u3 N) x. a$ H# ~; Y

  788. 5 w5 f! ^0 w' a9 o9 G( p
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / f4 Y' [% I8 ?0 v/ }9 A3 t, D
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    1 u* ?. c8 x$ s, Q& t( D( |/ J
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    / ]1 ?) k4 c- E5 g
  792.                 {
    0 O! O* [" I% {- E
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");: o: d* x0 F; g/ O% n- p
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* n9 Q/ p' G: w$ ~& b! H$ b' }
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");$ o; w/ O+ O7 F% m, ]- Q+ q" R
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: I3 p' w" }/ J: @% I! k( c
  797. $ L! Q. G3 y8 s; F
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 A3 `2 P6 z% z7 @0 x% Y* |
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 e0 G7 u  S  B; V
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ R# X7 T2 f( `; E
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! U( Z: X' ^( K3 o& `; e2 ^
  802.                 }# }- f0 Q. _" f# S" h. e
  803.                 dwStartUpSteps=5;
    7 n  Q4 ~  ?7 O5 F9 t$ M- W
  804.               }
    , d6 R* |9 ~+ \0 _6 s
  805.             }" q3 U  D3 q+ v- |% S4 v% i) T
  806.             else; v% K9 q1 ~# p2 |0 H6 U
  807.             {. S# H4 K7 d% A; |
  808.               unlink(".\\DownLoad\\checkversion.txt");
    % x$ Q' _- q) k) r  d
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ }+ D; k4 N$ `1 F9 p" Y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % v" r" e! z4 E6 F, F7 `) f# r' p
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    & ]  J# ?* u# E* f
  812. 2 l* u) X/ ~- A+ I5 c: y: u& Q' s9 H
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' d7 p; N. r& h. r! a. {
  814.               dwStartUpSteps=99;
    & g2 H+ s4 E3 g" C* ]
  815.               bFinishUpdated=TRUE;  l: q8 z/ s2 V* E5 {2 A
  816.               bCanUpdate=TRUE;
    ( f2 C5 x7 W; E$ q8 |
  817.             }
    # i& m6 Y  q- O4 B. @
  818.           }
    , a8 j! h7 z, _6 t4 o* u
  819.           else
    9 F% l& D; ?1 x+ J% S; l7 C# m- R
  820.           {+ y2 w( c( M3 Z8 _! M5 T8 f% X$ W2 L
  821.             if(!Dn.Connected())
    8 O1 C. R& Y2 e# D1 X$ O
  822.             {
    6 i' t: m0 R4 w* P$ n- R
  823.               bFirstUpdate=TRUE;6 ]1 w! L; Q# t0 v
  824.               dwTotalFiles=1;& E8 q) Z6 S2 j) M) N' i- d' ]: J
  825.               dwDownLoaded=0;( r5 p0 e4 ?2 a$ y( k! h+ |
  826.               bSilentStep=FALSE;
    8 a3 I( l# ]1 E) e
  827.               bCompressed=TRUE;
    7 h; K) |* S' e+ |
  828.               strExtLocal=".\\DownLoad\";
    ! E) d6 L; ?1 P2 v" j
  829.               strFullName="update.txt";6 D9 c" A) p3 a! G9 a% h
  830.               dwProgramState=AP_CONNECT;% N2 ]+ A# r0 `5 h3 R' e
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");6 F6 q, D/ E* v6 W# S8 V
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      R4 ]" Q0 h2 v* q/ D
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");& A; {0 J- `  j: t
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ [* w- ]  v) Q, ?
  835.               unlink(".\\DownLoad\\checkversion.txt");
    : B  x3 F8 `# Z: U/ I* [
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    , l& d: a/ M8 `
  837.               {
    " b+ o9 y; f' m
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    * w5 _$ Y+ a& ~4 }5 Z+ `) z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    $ ^9 Q  S1 Z% J1 m* a0 ?
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");' F# }6 u$ T( ^2 R) X9 K
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 f5 t  k! L; U( B9 E
  842.                
    ) d" Z& j+ _' M% A: A" M- t
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : B6 ~$ m/ L3 q. l
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + K; P1 j: A$ K/ k
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 s4 o) k5 f% q: ^
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- t, m9 e6 {8 A, b- J/ W; i
  847.               }' z# \. a' |. L) R* l
  848.               dwStartUpSteps=5;
    5 w4 |0 t0 [  [* t
  849.             }% f" m" o7 d1 i% J7 g
  850.           }0 a* C& s7 f$ W4 {
  851.         }) b1 \# }7 v6 v7 X
  852.         else0 ^3 [3 v! [; f; T# l$ X
  853.         {8 X; D8 s, |# b6 t
  854.           dwStartUpSteps=3;, s  E( D! h1 J3 g9 ?
  855.         }
    2 P( j6 t1 _; d" A' s4 M
  856.       }. ~9 a. `6 u) m' W9 g; J! @% _
  857.       break;
    ( v9 w4 M( C; m  @: z
  858.     case 5:( c* U( s7 g+ S# T& B- }% H: W
  859.       {
    " F/ A/ k$ o8 b
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ; q6 G( {' m$ |
  861.         {
    * p0 B/ ]: g. s. V( o7 T5 D& d
  862.           int opt_overwrite=1;
    ) s# D% _9 P! i' A, \
  863.           int opt_do_extract_withoutpath=0;1 v* X  `- i( J% t! V
  864.           unzFile uf=NULL;
    + Q/ h) R; \  Q+ Q  v+ k( S8 p9 X

  865. ! P# Z) E: |, L  E. m2 i
  866.           uf=unzOpen("Wsa.zip");6 h( c/ [" @; x* M6 o7 ?/ c& [
  867.           if(uf)
    8 A$ I# K5 t- i5 f
  868.           {+ a( r5 `& f+ e) F) ^. b! T
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);, D: U5 C! M. c) {
  870.             unzClose(uf);! l, j$ b. }: @. x4 R  q
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");$ ]5 I& d3 N, L; H4 b
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    5 R1 q9 p6 F! G- v3 H- A. v
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");: i8 g4 ~& J! S/ Z: _* O
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( Z* c  d5 G: ~) D% z+ Z
  875.           }! [3 O5 W. W- x% o) o
  876.           DeleteFile("Wsa.zip" );
    4 s0 p( l  r/ L- D0 N
  877.         }/ O4 }" h5 ~3 w6 W6 b

  878. . e" R. B" @' S1 D. D7 j- F  T+ Q
  879.         if(CheckLocalVersion())
    6 z) r8 E. b3 [& p+ c
  880.         {
    3 t+ B( o. M; b8 x- ?* q" c
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");1 l1 N. p2 {$ u. \
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ! O& t9 Q" }" q
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ) C8 H! ?0 K& H2 n& i% q; T
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 ~$ Q& i- I. v
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);6 ~) B9 x  L/ t! f$ K+ ]& O" B
  886.           dwStartUpSteps=99;
    ( I4 f( D' ?, I$ C5 I) e
  887.         }
    : X* l# d5 p, g5 J& t  @8 o
  888.         else
    4 F9 v8 K( i5 O* f' z: E
  889.         {0 \: c1 A$ L0 r9 k& l6 z" D
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    . n3 F3 I0 X7 t6 ~% L4 W* |, S+ X
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 n3 {0 t& m& t# E  s- W' p* v6 V
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");. ]) Q3 a. e) C9 z% P; T

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

! }0 ]  R( }4 p3 d( g2 e) i7 w) O8 C) Q! f9 h

評分

參與人數 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-21 04:31

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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