CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
% n( a9 [) f( m5 l$ y7 V, m8 V
  1. / RevApp.cpp : Defines the class behaviors for the application.* `% t6 r, W+ u$ w2 B* ~/ e# ~4 w
  2. //% }+ Q  d: p/ W  G) a' ^

  3. ( L' m, Y% t- c# p% D
  4. #include "stdafx.h"# }* d: o. n! `( T" _8 ]- Y! m
  5. 5 y/ g) D* G$ _9 z1 X0 O+ Q
  6. //#define UNICODE
    + z8 M6 V! _. H3 D8 `6 c+ O
  7. //#include <gdiplus.h>
    ; F2 v8 F( b3 Y+ a3 s0 @9 E
  8. //using namespace Gdiplus;" _$ o, f) N8 m; v5 s' c: d

  9. 9 y7 [, K7 t9 I: O+ W( _! E# k
  10. #include "RevApp.h"
    1 V7 w  w3 J$ |; s5 }9 V
  11. #include "RevAppDlg.h"' w  B1 Y6 x: A2 q

  12. $ F8 i% ]" L$ a# U! |, M- l
  13. #pragma warning(disable:4786)6 B8 \3 A* d/ `7 Z9 H  j7 f
  14. #include <map>; q' [% z) U  B+ K: a
  15. #include <list>9 i3 S; [+ d% A) Z7 {- u$ s
  16. #include <direct.h>
    6 a0 v8 d$ G" ^4 `! H9 p
  17. ( K5 y+ T. z4 q2 k1 _% s" T& G
  18. #ifdef _DEBUG
    6 l$ l5 ~' f1 B9 f1 y
  19. #define new DEBUG_NEW
    + g& L  w" v2 A: L' H8 \
  20. #undef THIS_FILE
    ( s6 t7 U% G; H* y: F6 N4 h
  21. static char THIS_FILE[] = __FILE__;1 I4 u! W! A1 z( X# L
  22. #endif. R' ~$ T+ V( B
  23. #include "SkinResDef.h"5 D7 I) M; w9 a7 V5 z) x
  24. #include "ChangeBG.h"2 h! A% N/ X" D3 s0 f5 A5 |
  25. #include "AFXINET.H"* p9 ~) }- a% M/ {8 g- ?
  26. , z! r" l- Q  I6 R: D5 X0 z1 x: P3 z
  27. #define TRADITIONAL_CHINESE 0
    # t$ k/ L( N# u: _8 _
  28. #define SIMPLIFY_CHINESE 1
    3 p  j: Z5 c/ Z5 t" c: l6 e
  29. #define ENGLISH 2! F! d! S  x, U* S* ]0 u, q
  30. int m_iLanguage = ENGLISH;
    $ i+ c$ s+ e. ~  D/ z, q
  31. /////////////////////////////////////////////////////////////////////////////
    , k+ p0 M, ~5 M2 n; P6 a
  32. // CRevAppApp. @% B# `! E/ I# r; L& z7 b" `
  33. 7 C, Y, I- [6 R, [. U& t
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! G: _! l7 T' n2 N" W  Z8 a% p
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    " _& M3 h- `: z7 a0 v1 C' v
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.' p  ?" F$ p$ V" R& U: |
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!* R, b4 B7 l. t: V
  38.         //}}AFX_MSG! H. c8 w2 o/ z
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)4 G- q$ r; `; ^. |; t9 r% l/ g
  40. END_MESSAGE_MAP()
    6 i3 I- a5 ^/ [0 L& G1 |

  41. 3 ~1 X" G( a9 M: c
  42. /////////////////////////////////////////////////////////////////////////////3 E- @1 G: J& E
  43. // CRevAppApp construction# J% U2 u0 O5 h2 l$ f/ o: o

  44. ! ^5 m& c6 \* }  s$ d9 V; x8 ]5 T
  45. CRevAppApp::CRevAppApp(): x9 M' Q; N! d# P
  46. {
    9 s2 U8 k9 S; S8 j
  47.         // TODO: add construction code here,
    # i  W+ k4 }& [- {# K' g1 }7 Z
  48.         // Place all significant initialization in InitInstance$ j8 i( D3 y! ^
  49.   bDisplayIsBig5=FALSE;
    & L0 [& e( Y4 c  d
  50.   bRestartUpdater=FALSE;8 ~7 e. _% s, N
  51.   bFinishUpdated=FALSE;$ g+ d' B( d& \* T* y
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    6 \, A2 B- g5 u/ b
  53.   InitChangeDataBig52GBKS();
    8 j7 x9 [- R! o6 x' a8 ?. a
  54.   InitChangeDataGBKS2Big5();% S$ x% ?0 |$ m! x
  55.         //# |; U$ n8 {# T! U
  56.         bClickRunExe = FALSE;
    1 ^. u; H8 ~% C; |7 |$ c
  57.         //
    * u" o- i) C) e8 {
  58. }
    8 z$ E8 R+ \5 @8 {5 r) i" i
  59. & B9 q0 O1 J% Q% a8 d
  60. CRevAppApp::~CRevAppApp()
    / D2 L- w9 f; l6 x. k
  61. {; ^9 {7 S. B' ^9 y% }! ?/ a0 l4 Q
  62.         // TODO: add construction code here,  S) ]' v7 W& e
  63.         // Place all significant initialization in InitInstance/ q8 |  t  c0 X! _, t! k
  64.   EndChangeData();5 e/ }% ]0 Z: Z; i0 y8 X# E& L
  65. }
    , \0 D, T" n/ I% Y- F, }9 \4 r* a1 k
  66. ' u/ H1 J* l, n/ U2 b
  67. /////////////////////////////////////////////////////////////////////////////2 f2 u) k/ Q# j9 @
  68. // The one and only CRevAppApp object
    / V# j6 r0 ]$ s5 i: Z9 R
  69. ; G, W: g( `, N9 E4 K3 u. h
  70. CRevAppApp theApp;5 V) F4 }& N; ]/ V: N$ [) E
  71. 3 O1 B, d0 {" h1 Z, _; L  }
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ' F, w! Z" n! C6 [7 A$ L- o3 C5 b$ ?
  73. {
    2 u+ f1 w* y2 B6 N* t7 G0 I& W
  74.   int iEOF=0;
      X% f4 x" O, _! v
  75.   char szTempName[MAX_PATH];: X  M0 |- A! T( \( d
  76.   *szFileName=0;, z( x( _  y3 d9 ]& A4 g9 W0 P* A
  77.   iEOF=fscanf(fp,"%s",szTempName);
    # _6 t0 {5 _' B+ a" ^, @2 u1 W: P
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    8 s& F5 `. y. ?3 h3 r$ j: m% y
  79.   {0 v* F8 w- y: x! a8 h
  80.     strcpy(szFileName,&szTempName[1]);
    . h" A: u- N, }, N9 O; _% i
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    , v* D$ H: W% G8 [
  82.     {/ v, X/ P: D1 Y- I. b
  83.       iEOF=fscanf(fp,"%s",szTempName);
    # j% l. _/ V1 c
  84.       strcat(szFileName," ");
    , j0 O4 i; v, x8 k, F/ S
  85.       strcat(szFileName,szTempName);
    9 G' Q9 j- v# d* _, ~' v
  86.     }: F9 G  ]. h; x2 H
  87.     if(strlen(szFileName)>=1)
    1 w# J" {! d* l
  88.     {
    8 H0 m! n9 [" i( x" M0 C5 z
  89.       szFileName[strlen(szFileName)-1]=0;2 U1 b& I/ H4 o7 V" _% @
  90.     }7 f1 M, g  W8 Y2 j. E# B! u
  91.   }
    6 L0 r5 Q8 g5 w
  92.   return szFileName;( X8 ]% a7 z( c; r/ c$ I
  93. }6 e7 r; [4 i- M, z* D5 v) J

  94. 1 v: h9 b% d$ u- _: I- x5 W( J
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)  d7 [" r8 @, M
  96. {4 Q( ^3 K% T; H# F7 l8 r" ~( }
  97.   FILE *fp;; d  d0 t( ]; Q  T0 j$ ?: {+ R
  98.   char *key=NULL;
    4 }2 r+ |! M* ^/ s5 V9 O1 T
  99.   char version[MAX_PATH];
    3 _. X. c# [, ]& M1 C
  100.   LPUPDATEFILE file,olds;" b' J; \# C& A% n! h1 W+ B% t
  101.   std::map<CString,LPUPDATEFILE>::iterator p;4 H, m3 `8 f+ x1 E4 w0 C. Z
  102. 0 f: t( L# `% d! |5 c
  103.   UpdateList.clear();( D0 e; S$ k: e" r/ t6 v( k
  104.   UpdateFile.clear();
    / {$ Q- R* y* A8 L1 N$ P' P
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; _* S# c+ a. r$ G7 c" D& [8 b4 r
  106.   if(!(fp=fopen(filename,"r"))) return false;" G2 _7 C6 k; A, i2 N  x* h
  107.   fscanf(fp,"%s",version);
    / q; J& _  P  q% e1 ^+ m, i
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    - D$ N$ o: N8 w! w- w
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ( |5 P" ], \; l1 v) O
  110.   {7 |" g9 i8 |3 z5 S% J. ]: Z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 s1 M" T2 p% `  [! S/ L" D6 W5 ^
  112.     fscanf(fp,"%s",file->path);
    9 w; r8 b$ Z' L+ k6 Q0 w2 p; N0 W8 L
  113.     ReadFileNames(fp,file->file);# P6 E) f( F3 ^
  114.     strcpy(file->full,".");
    ) y% D5 O4 @7 r6 X" W
  115.     strcat(file->full,file->path);
    8 B/ o& J4 N+ a1 z; G! e; u  l
  116.     strcat(file->full,file->file);
    & y: T0 Q4 u; ], C; j8 S
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ) w# E6 x9 a9 i0 s; h9 D
  118.     {, R. X) I% E% w3 J
  119.       file->vers=(float)atof(version);
    ; S" E; G7 _- i6 s% K8 M! m; a
  120.       UpdateList.push_back(file->full);
    # ^5 F+ G1 G4 f5 s0 ?+ ?
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , ~4 @* b) W3 v  e2 y
  122.     }; |( i4 n0 j, \4 J) r7 r: \
  123.     else* I( ^" K8 c) @+ g
  124.     {
    3 F& E9 s+ t4 s5 w& x) G
  125.       olds=(*p).second;1 k- w1 v3 D) }5 B) U
  126.       if(olds->vers<(float)atof(version))
    # S1 R2 [& G4 I3 D4 d" V# L  @
  127.       {
    0 n+ N4 z3 j6 N; D
  128.         olds->vers=(float)atof(version);
    / j# [) i; L9 I8 y4 F9 Q
  129.       }: k7 X" H( W! Q: E" U; c# @
  130.       free(file);+ B( j& @& C+ Y0 C4 U
  131.     }/ U5 l& e) {$ C8 ~7 N& h4 s
  132.   }/ X7 s- `: V, E% n
  133.   fclose(fp);
    * J& ?6 t6 y  e* n8 b7 ?: i
  134.   return true;
      L; z% i! m: r. ?8 p
  135. }
    ' n! Z; F, E$ t) ^/ y

  136. ' \; F6 }; K5 D7 |
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath): p" w9 M8 _$ F' X) g- x
  138. {# D7 R# Z8 n7 `- _* E, @( p
  139.   TCHAR  szFull[MAX_PATH];
    - w8 I7 e% X! N
  140.   TCHAR *token,*inter;0 [- W" d$ p( O" }0 s
  141.   *szPath=0;9 k' C1 l# ^& s6 w
  142.   strcpy(szFull,szFullPath);
    ( l8 P6 [* W$ N3 f! j9 X: ~' Y
  143.   token=strtok(szFull,"\\/");9 a" V3 D  W; g' K
  144.   inter=token;: T4 b% u( Q# @2 _9 {% p
  145.   while(token=strtok(NULL,"\\/"))
    + w8 w% z- W+ t" W: f8 O
  146.   {( w! M4 m  F. f" \9 Y( i. a
  147.     strcat(szPath,inter);4 V7 R) v4 {/ f, F2 c' s4 |% q2 ?
  148.     strcat(szPath,"\");
    " d) \, ]! L+ R4 V: g* U- T) B+ }
  149.     inter=token;
    * Y: D% E. [; s% ^% g8 \4 [
  150.   }+ p: J+ `% {# |
  151.   return strlen(szPath);
    : D2 F5 [$ f  I$ g/ X' f1 V
  152. }. Y+ |( S# `7 Y+ ~% e/ [

  153. % T- x" B( b0 G! O6 Y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    - R- D3 l/ y$ I" {' q8 k  {
  155. {
    & a( O% U% I  a9 ^: a# t
  156.   DWORD attrib=GetFileAttributes(Target);
    . j% B& c7 `; @6 I+ y
  157.   if(attrib!=-1)- n: B2 z) ^5 W6 s$ ^: B
  158.   {0 T# e! B1 {  x7 U# N# A
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ! }' I3 q- @& D0 _
  160.     {1 h$ K  ~7 e* `# V5 A6 T4 A8 R
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);. b; m( x# u2 u# {. F0 X
  162.       SetFileAttributes(Target,attrib);
    & d- z9 J* c: G2 ^5 f5 g
  163.     }( \6 u+ g/ w8 I1 R7 \$ _! d0 K0 Q# a
  164.   }" N1 Z0 x* N9 A; l% H
  165.   CopyFile(Source,Target,Erase);9 E5 P) k' [3 n, F
  166. }% E6 T+ J% d$ A; c
  167. * G0 s5 m$ b8 T, W
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ W0 |6 p# b# ~5 S( C0 s, c
  169. {
    1 J/ H* Q) C; d6 N' B- g
  170.      FILE *fp;6 C% K" j  Y/ m- K8 o5 d% J
  171.      char  szBuffer[8192];
    - _$ l1 h; h2 I. ~. l, |
  172.   va_list  argptr;, Q( G/ a5 T# p+ R
  173. . ?7 p" H, ~: f. k5 z
  174.         va_start(argptr,message);
    3 M% V$ H; v) J' l1 C% t
  175.         vsprintf(szBuffer,message,argptr);8 ?  F  r' A7 k$ _- n
  176.         va_end(argptr);
    * E, Q" e0 k) d2 k7 ^$ v
  177.   fp=fopen(FileName,"a");  Z; z, `$ A, M* k! {7 a" i5 D0 u
  178.   if(fp)! z$ F1 @4 H9 b- P; N; h
  179.   {$ p- O$ z% k; Y* M
  180.     fprintf(fp,szBuffer);
    & p0 }  m8 ^+ ?8 V3 ~
  181.     fclose(fp);
    ) L* f) r4 \, F# |2 k. }2 }
  182.           _flushall();0 n( |5 Q3 R4 Z8 [" h. H. S1 A2 D
  183.   }9 E& f+ {% J7 O
  184. }
    + {% M% b) p9 g5 f6 s1 T- C

  185. ' I( ]' I4 t- K. w: \8 Q
  186. BOOL CRevAppApp::Fclearf(char *FileName): l' [, u& E+ ^9 K
  187. {
    ) V) n8 K; C- r
  188.      FILE *fp;
    8 {' O6 ?( o7 T% I
  189.     DWORD  attrib;
    & v/ V2 l" o8 J. _7 {
  190.   attrib=GetFileAttributes(FileName);
    ; [- y) o1 I+ w) X$ P! ~
  191.   if(attrib!=-1)4 U) `, j8 G# h4 P, q9 x! m9 L# ^
  192.   {
    " `5 H& f; H7 @* q0 i# V2 U
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);5 l. ?% S6 u/ k5 i/ B# u5 v! V" f
  194.     if(!SetFileAttributes(FileName,attrib))" v) Q1 Q0 p' L
  195.     {3 Z) X8 i6 K5 v6 a: q  v
  196.       return FALSE;' z0 l  Y, I$ t1 `! \% ]
  197.     }, W$ \9 u* p4 u" ?' {
  198.   }
    9 u7 P, b& u/ z0 S# l2 Y0 Z* H
  199.   fp=fopen(FileName,"wb");7 l( x9 U. z6 B
  200.   if(fp)
    1 R/ s9 C4 F+ o
  201.   {* ^( U, L7 S% [  `
  202.     fclose(fp);. w( @- v0 f) B8 J! W
  203.   }3 o, \# B4 j; J6 F0 m. |
  204.   return TRUE;0 v/ x4 S! ]7 \' X4 u5 k% _9 e
  205. }$ ?) z3 F8 {  l/ F7 e( a' f( t" w1 r4 a
  206. - |) }- B  @2 F
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ d( Q3 v8 T$ }$ X
  208. {
    : U* z  u: p, y6 u8 ^$ M; J" \
  209.   char filename[MAX_PATH];
    1 B1 x$ q7 l' u7 H
  210.   LPUPDATEFILE file,olds;9 t: k) n1 ^! T  o! ^4 _+ m' M) v4 a
  211.   std::map<int,CString>::iterator i;
    % F. M% u5 J4 A1 E$ f
  212.   std::map<CString,LPUPDATEFILE>::iterator p;+ k, c5 Y$ |) \" X& X9 ?
  213.   std::list<CString>::iterator l;
    9 e6 R  m/ N( w) [% K# L! H
  214. ( f. K$ o1 Z6 v2 r
  215.   if(bFirstUpdate): Z- i) X/ r7 X) _5 a  O
  216.   {5 G! T4 C! G( V. M1 @0 B. }
  217.     dwCurrFile=0;+ \% v7 ]* `( m; h7 D- B
  218.     bFirstUpdate=FALSE;
    # ?- K; v# Z# `" c
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 {/ Y9 t: S8 ?$ B- y- z
  220.     {% `: R; ?( `8 X# |( J3 F5 ?
  221.       dwTotalFiles=UpdateLocal.size();2 n. J# y* j/ N& N6 K  j0 f* N6 a
  222.       dwDownLoaded=0;
    8 _) \& `$ b1 ?: }) e$ ^- c
  223.       bSilentStep=FALSE;- T4 {$ R1 T! w1 @
  224.       bCompressed=TRUE;, d8 ]9 [; v5 n0 ?9 s4 Z
  225.       strExtLocal.Empty();5 J$ U8 w, A, q
  226.       strFullName=(*i).second;7 A& D# X2 K7 ?1 I
  227.       dwProgramState=AP_CONNECT;# i# _& O2 m# X. B, p; u
  228.       return TRUE;
    & z1 d9 W0 s: W+ o+ n
  229.     }
    & B+ S- _; ?; o2 e, ?
  230.   }& n, s, i. j5 Y6 h, s
  231.   else if(bRestartUpdater==FALSE)" T1 a" ~2 w% X: w, B2 x6 T9 ^( A
  232.   {$ t  P7 h# z! y7 g4 w' `
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())8 b. y* |7 k9 g
  234.     {7 M: j5 ^$ i0 S8 B$ \! p
  235.       file=(*p).second;& B) i' S; [2 s- I2 Q3 j
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    0 h- R3 M( V% G- e+ F4 T* J
  237.       {
    $ q% ]$ M0 [* l+ o+ W* A
  238.         olds=(*p).second;
    " f! \: G- ]4 B1 Z: x0 k( }2 G& F/ ^: I. @
  239.         olds->vers=file->vers;
    6 K  R' i9 a1 P8 u) j
  240.       }) K1 A9 X; Y0 f( S. y+ j
  241.       else4 C4 P5 u. \4 D6 K
  242.       {
    ! J1 P, v% Q% l
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % e# l5 d* s1 M% Z, S7 m; v( a
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    2 K. h: D' m! a7 `& y% k
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ) O; D  p2 B5 C- _1 L. i) o
  246.       }
    : s& s' `" v( K
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    / b' ~/ i! V/ T
  248.       sprintf(filename,"(%s)",file->file);% S, J3 ?- J" [0 X
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! G# r7 @* c7 G. X& b: L  Z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    . W+ f. ?! u4 L. m2 [
  251.     }. y* n) f# \7 @  |1 O8 Z
  252.     dwCurrFile++;) F! A. x, A9 T, N3 f
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# |1 ^5 t6 Y$ r8 H2 a& e
  254.     {- a9 P9 Q6 i7 E& {* G
  255.       bSilentStep=FALSE;
    0 |3 J1 }, M& ]5 j1 @+ O
  256.       bCompressed=TRUE;# O5 y& W7 V$ |6 p! G" \4 A5 m
  257.       strExtLocal.Empty();
    : v( y8 O0 c+ B' o
  258.       strFullName=(*i).second;
    % X+ m* t: o% S
  259.       dwProgramState=AP_CONNECT;% Q9 ]: ^% R+ J0 f' p* h5 o
  260.       return TRUE;
    7 X' V' b7 `- |. t3 K9 {- e
  261.     }! W" K' L7 @: L& l1 M5 C2 \! u
  262.     if(!bRestartUpdater)
    9 n, T1 [+ C0 y
  263.     {
    + k1 o1 Q- ~' ]9 u, ]
  264.       int iCurrSize,iFileSize;
    3 ~) p0 @) i/ ?2 Y1 P
  265.       iCurrSize=0;+ W! S& _0 m9 N9 C
  266.       iFileSize=UpdateList2.size();
    7 w5 L6 s" g1 o4 O( I. X
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    : D" e7 s7 b1 T. }5 q' Y1 {' ^
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
      v8 @! L& T7 {# a
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 E9 ~( S9 E5 y! h' Q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - Q' A& R; `8 r- `& }- p, q
  271.       Fclearf(".\\update.dat");
    " h* @. @5 j7 T  [3 _6 B; y* E
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    . z0 S4 W& }9 l' U8 q7 z3 I
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)1 a% v  s' s6 {$ W: l
  274.       {
    ' b2 N8 ^( @/ ]
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    4 i: b; M# ]1 c0 A' H
  276.         {
    / I0 t. `& L5 h# t7 K# F" w$ W& t
  277.           file=(*p).second;
    $ D5 t7 ~) J$ F$ t& q: a
  278.           sprintf(filename,"(%s)",file->file);
    6 E: e; m: s  J; r+ k
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 d+ C: R+ F) i
  280.           iCurrSize++;
    , E+ G  h0 d9 @/ o4 y+ A8 @5 [
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    4 c, C% e/ |2 p+ ?
  282.         }
    : I  h7 a' z$ t6 `; W. A# B
  283.       }
    + r3 w. {: p4 l1 x
  284.       unlink(".\\update.txt");7 q- {0 K& G: b/ M
  285.       unlink(".\\update.tmp");8 N5 S; K9 d" ~" X* m' ]' f
  286.       Fclearf(".\\checkversion.dat");& i, W  {: g& b- Q% Z1 _
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);6 B. W/ Q$ q3 W2 P
  288.       if(UpdateLocal.size())
    + `4 Y- D5 c. O) h
  289.       {
    % x4 D& F& g9 I0 Y& z
  290.         UpdateLocal.clear();
    0 m  `* N. N# n% m
  291.       }
    " t# Z7 b! c( B1 a  ~
  292.       if(UpdateFile3.size())
    + b" C( Q( q0 P( V! p& o( E: J7 U
  293.       {
    + \9 \( V( ]$ x3 Q0 y
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 q4 a  C/ I* U* b
  295.         {3 F, ?  x; N9 D2 u: ?
  296.           file=(*p).second;" N$ Q6 A$ W3 ?- U5 ^; S8 Y; l
  297.           free(file);5 m1 M, M3 B. D1 ~# L
  298.         }
    " ?- J) e2 w  \& w5 C
  299.         UpdateFile3.clear();6 g: A/ g2 O, R# O' n9 k
  300.         UpdateList3.clear();/ o8 z. o4 N0 ?: x) C) y: ?- r
  301.       }
    % C3 ~* |8 V8 |; @: r
  302.       if(UpdateFile2.size())
      D: d- @' h( c- U2 R$ o$ b
  303.       {% z1 ^+ {) T6 K* `
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " }6 ]- `# C9 N6 ^3 {' V
  305.         {" a# L' K3 s% b% ~+ |
  306.           file=(*p).second;7 h7 [5 l2 }0 G+ M% u1 p
  307.           free(file);
      w9 A& ^0 ]8 u( I0 \# j
  308.         }! C3 U6 P5 w$ y- U
  309.         UpdateFile2.clear();; ~# q: U+ D$ E$ t! G/ J( k
  310.         UpdateList2.clear();
    0 H# h) K" O" G
  311.       }
    - R: f5 l2 m5 W& B
  312.       if(UpdateFile1.size())3 w$ Y7 h2 R+ a. N* Y, c
  313.       {4 [+ \1 t# D. m! _. r- m
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 u- Y* d+ X/ l5 z
  315.         {
    1 R( I/ s9 h1 c$ }
  316.           file=(*p).second;
    0 I3 K/ ^$ D' w
  317.           free(file);
    6 B7 S8 ?: y  y& V1 R/ m7 a/ U* u4 U
  318.         }
    $ f' @) p' R" U& i1 ^, Y" e% E0 i
  319.         UpdateFile1.clear();
    " ~  A( w: X7 t- u
  320.         UpdateList1.clear();
    $ s9 d3 r* j$ a' k6 w& Z
  321.       }2 L( J! t5 \$ \% j
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));& I' i' W; Z* J: P0 c- Q
  323.     }, g' F: l. A% z# G5 E, p% n7 l
  324.   }. B) u+ ?  g7 ]& n) S$ G
  325.   return FALSE;- _5 Q* c: e- y" u# Z. y
  326. }
    . @/ ^/ ^; q, B* u
  327. 9 T' w! A# u# P: z% I/ a2 P% ^, _4 C
  328. void CRevAppApp::ClearAll(void)7 P# r) _" ], h0 U5 J& l4 g
  329. {0 r# _7 \% O- ?8 j8 J
  330.   LPUPDATEFILE file;
    8 T* A3 p) p: _2 |
  331.   std::map<CString,LPUPDATEFILE>::iterator p;' Q& q  ?- A. |

  332. ! m8 j& s5 `- A  `
  333.   if(UpdateLocal.size())4 |: \! T3 R5 S4 [
  334.   {  I( r8 y' G2 R, O
  335.     UpdateLocal.clear();
    ) }  @# B2 _% X4 D% W0 ^
  336.   }
    2 w, s! C6 d( v+ R  B' ~: z
  337.   if(UpdateFile3.size())
    % q+ d# T& L0 {8 q0 d  S9 E
  338.   {) V7 r; U, z; q* t8 E
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - L! L0 M7 i" {" q8 x
  340.     {
    ; Y" l6 I0 \. R* H3 i9 Q
  341.       file=(*p).second;
    2 R2 d  Q9 t- D& K$ z
  342.       free(file);
    ( r$ W6 I0 @0 m
  343.     }
    % @$ O/ m- V' d9 m. p: W- u4 Z" @. ^
  344.     UpdateFile3.clear();
    0 u% C  \/ E0 w  G/ {
  345.     UpdateList3.clear();- I: E2 F9 Z/ [1 ?
  346.   }0 `& E: f3 }6 B+ G+ c
  347.   if(UpdateFile2.size())
    3 K& j: A" R3 Y) |# j
  348.   {$ L: |" [' N& f1 j+ j8 w& Z" }# S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)/ T3 P5 p2 n& c/ B5 k6 X
  350.     {& }, n  j" s' E/ a9 o3 I' N' @
  351.       file=(*p).second;, ]. y' }6 @) h& F; _# `
  352.       free(file);
    5 g1 V: A5 V7 D. t% j6 a
  353.     }/ ^% u+ H6 R* n7 p9 h& o9 z7 Z) C
  354.     UpdateFile2.clear();
    ; M7 P; }$ H1 k( a6 ^
  355.     UpdateList2.clear();7 }2 b4 P$ @. Y% Y8 S
  356.   }/ i4 T* O% T' A. g  s* d
  357.   if(UpdateFile1.size())0 r$ k. I; j2 ^, k  L
  358.   {3 E3 B) e5 \& v) {3 b
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    % F% J! ^& l! v+ x6 K9 Z# D
  360.     {
    / S( ]  M; M& l; s4 P6 H! q% a
  361.       file=(*p).second;2 p' p( {) y& y, F, ?3 h
  362.       free(file);, A# i. z" o8 t/ R4 P
  363.     }& K& t& U+ r+ c) H
  364.     UpdateFile1.clear();$ P8 E' c* `8 z$ j9 C2 o
  365.     UpdateList1.clear();
    + ]" |) [! Y9 u: T/ P" G
  366.   }( m7 v$ ]: Z0 [7 r. `
  367. }  
    / j  X* @6 R! H' b$ U% o: k
  368.   2 Q" g1 Y) Z0 N, ^: _& f
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    - v/ j8 {1 U  @( ?  R
  370. {
    ! s$ c. }) {/ {8 r
  371.   int c;
    " x0 `- h5 n3 I2 r3 B9 {2 [
  372.   LPUPDATEFILE file1,file2;4 j! N) d0 |4 z5 p
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;% {& `% w7 w: u, Q- h1 }& I
  374.   std::list<CString>::iterator l;  O( R/ Q) r6 R5 P/ L
  375. 8 P7 I2 U# f7 g. U
  376.   UpdateLocal.clear();, x& N$ s) |3 S% s, {) X, L' @
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);! \& o9 C, W0 v: j! M
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);, O# ?7 o+ P6 L
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);0 J* u% d: G& L' ]! P
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);8 W8 |6 Z% ]  Q( f
  381.   if(UpdateFile3.size())# a& E1 y% J! r! M% `# d& h% X. I
  382.   {6 T+ M  ]" u+ y6 r2 ?4 S
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
      T0 J' }4 X  D  Q4 r( \# F
  384.     {
    5 [4 L, A* k- W$ s: C
  385.       file2=(LPUPDATEFILE)(*i).second;
    , v. q  f$ x' u) y  m* @0 k
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 U  \2 J+ o* Z/ L4 r: C
  387.       {
    1 K- @) L* @3 z' o- C/ w, k$ f3 C, G# }
  388.         file1=(LPUPDATEFILE)(*p).second;# u4 Y$ z; s& [! v
  389.         file1->vers=file2->vers;# R0 e( ~2 z. M
  390.       }
    ( o; }( Z$ X! Y+ j' I1 ?
  391.       else4 f( f+ {4 f) P9 E1 M1 t& r& E; ^
  392.       {6 A+ W. Q5 W, b; \1 J7 Q6 e# G0 z% e
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# \7 X9 x' h, }6 l; [9 S
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( k* M( r2 j5 d
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));% i  o8 j4 n7 p' @9 x* w# s3 }1 T
  396.       }+ p, @$ M; t( C
  397.     }
    9 R2 T7 K5 z$ l! S
  398.   }
    % K0 Z+ o$ L$ z+ u# M- u; j( N
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)+ S6 H' {, d! V0 J6 j5 P
  400.   {1 P' ~, L0 r9 o' p, r
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    # s% W, c, ]; I. |
  402.     {" e; A' h5 I( W& L# C) V
  403.       file2=(LPUPDATEFILE)(*i).second;
    : z$ M5 s* N) d8 o" f6 T! P* Y
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())7 J- h: `8 @5 K3 i; \
  405.       {" s% J5 t, Q& j6 l$ D
  406.         file1=(LPUPDATEFILE)(*p).second;/ j+ L+ O. ~1 j' G' \4 \1 P
  407.         if(file1->vers!=file2->vers)- d; w) }3 m& n
  408.         {; v' X1 Y; {: f
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 D7 f, o7 t8 A# S0 ^+ u
  410.           c++;5 {" b9 i" z( f  T3 K! |3 V4 J
  411.         }8 T: t( k/ M; v2 R: S
  412.       }# F8 V4 P8 ?, E& E) \
  413.       else
    9 [! _1 X# [) s6 a! p) |
  414.       {! V& x. m! W; W7 m* k
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 F8 }* @' P: M9 @1 H. g
  416.         c++;
    ' B4 X0 O% }& T
  417.       }% Z) s- p, @; Q' m
  418.     }6 h2 o: t4 |" o5 a. F
  419.   }
    9 r- w1 O) ^8 a: [/ L3 _
  420.   unlink(".\\DownLoad\\update.txt");
    & U5 Z+ c& ^7 j4 A4 d5 G
  421.   if(UpdateLocal.size()) return TRUE;* h& G' J9 b4 t# \
  422.   else                   return FALSE;: v3 s) X  G- |& J, u
  423. }
    ) W  ~+ G: l* k+ T* B# p
  424. 1 Z+ d: p" m& {4 [! O/ w
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    / m( z! h! {% u; v2 R' F) `
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"0 p/ p+ P! n. S, c
  427. / I/ Q3 o# M# f5 F9 K, @2 a

  428. 3 q: R" t9 E2 t

  429. ; I- p$ \5 X$ m! `$ i
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" s( ~+ V9 e$ ~3 ?
  431. {
    ) {0 B' ?! `% @& i5 O
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;5 v9 u( R; |  X% M# y' j
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . a" j) l6 k+ ^
  434.   {
    2 b% Q4 Z: i( y# K8 L- a, p( }" \
  435.     char szLanguage[50];8 \9 b! n4 O0 ^
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    7 a+ h! h2 z3 C9 u8 R
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 _5 d. a: W0 k3 n$ m8 n6 p
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' `, ^  `) W% P9 ^7 Z+ w* a
  439.     else                                   m_iLanguage=ENGLISH;  b6 R. a+ w1 A; Y6 J( Y4 C
  440.     char szRegister[100];+ y( q3 x% G7 ?& R, N
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . r( U' D5 W. r; _* [
  442.     strRegsName=szRegister;
    + i% M+ ]; r. S+ s) M3 y
  443.     char szPatchURL[100];6 b, k- l+ P9 z. {$ M1 @
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" h. `2 e1 ?, }1 V
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);8 \$ x7 c8 p" |8 B  [/ c" ~& c! {# |
  446.   }
    4 E2 R$ r6 Y- M" h# K7 O: x: x
  447.   else
    % l- h! i* n; ^0 x: I
  448.   {
    3 G! Y9 u6 H) A! M
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * O4 I7 _) `3 f0 N& S0 d' v+ X
  450.     strRegsName=DEFAULT_REG_URL;
    0 I9 K+ Z! m3 f2 L0 h& `7 F/ d1 ]- {' f
  451.   }
    3 ~# i* j' M: t1 f0 r* G: x3 @
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    . \% u: d( Y7 y9 f
  453.   {! w- h7 n& k1 ]/ f+ E
  454.     char szIP[50];0 I7 j; Z0 R" A2 E, g4 I! y0 |. e$ n) M" N
  455.     char szDIR[300];1 H* \2 u+ Y( o7 M
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    . a( f, _+ A6 ^
  457.     {
    2 R; ?9 C9 D0 \. d  B  ]* J% V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");' @9 U4 r4 D- W
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    * w4 Y4 ?2 \1 D5 `2 ?% {
  460.       strHostName=szIP;/ ]3 ]2 y* E  E! x
  461.       strHostPath.Format("/%s",szDIR);2 @- g. R; k+ K4 q( R
  462.     }; k' _2 O4 Z, s- b1 ?4 M% K
  463.     else
    % T+ k% Q, e/ ?, |7 Y9 S* a
  464.     {5 V, F6 A" P; R9 H3 Q3 e
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 n3 s* A* y1 d- r
  466.       {
    9 }3 s, W- `- o
  467.         char szLanguage[50];
    + H2 ?6 |" }) c$ }
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * i7 p: b* o3 z4 K0 Q* M) n& p
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# f0 J# T$ ?! y4 V6 g/ ]
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 x7 I# c/ `( G: G6 X
  471.         else                                   m_iLanguage=ENGLISH;
    " Y7 k- @. ]8 g  i. C
  472.         char szRegister[100];3 ^3 `* D( F: X$ C% u- D- W0 ^! r- l
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");$ W4 y; S9 w& Q# ^
  474.         strRegsName=szRegister;" ?+ |! @& x  y9 Z; K! i
  475.         char szPatchURL[100];+ O+ w9 [+ p- A
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 b0 _, N8 [: X( U3 Q7 u+ X8 U  x
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 D5 Z& W6 j! K( _' z6 S, W: Y
  478.       }* w( i6 |- R' y6 _$ D" t
  479.       else: ?5 R' S1 C. p( n5 z7 Y+ {" f# M
  480.       {7 Q/ X$ t' L  T% r' V  N
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 ?7 [# b1 H; m4 R
  482.         strRegsName=DEFAULT_REG_URL;4 g8 I8 a% m- _& Z- y" s9 W
  483.       }
    % e3 w. U  J$ K. R3 S0 E( s
  484.     }
    5 F8 X, s  F* f/ `) i+ _8 |: _
  485.   }0 `+ c) F* q: j$ ^
  486.   return true;
    ; R. P* D* T. D' u$ v4 U% y! |
  487. }3 b2 |! Z: }5 x) @9 G. q
  488. ) I# g: b2 Z, `! p: _1 _
  489. #include ".\ZLib\unzip.h"4 n" m) G2 v: m* L0 w
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);: m4 l* b/ |$ l; j4 K
  491. /////////////////////////////////////////////////////////////////////////////
    $ j3 ^, ~  @" H& R, j5 j
  492. // CRevAppApp initialization
    6 F# h6 l% ?& n7 |! X9 b
  493. ( L1 u9 W( Z- x' \; d: u  p
  494. BOOL CRevAppApp::InitInstance()
    1 Q, A0 W4 Z9 d7 C. Z
  495. {* U# h1 ^+ j) s4 S
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];; T, t; E' W. t" A8 j3 h
  497. % y/ v1 w# i  N4 q
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    $ V. ~. ?8 u8 w: ~
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))1 `* U6 |& U' b+ e2 n2 T: ?  }) B: j% a
  500.   {( f, _, x8 v0 w0 W1 a. ~6 U
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");! ?. N1 e; `6 h% D5 V
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    2 o: g9 N' Q; O; F) F/ V, x
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    4 U, R* D3 c' R
  504.     {6 l/ ?1 A+ q7 f- }9 |3 b
  505.       strcpy(szPath,szPathTarget);
    7 L) }: [# \& O' W6 O
  506.       SetCurrentDirectory(szPath);
    8 \) f0 o! f9 q7 \/ s
  507.     }! P3 {* |1 u, |: u
  508.   }/ G7 L, Q1 A1 V! }
  509. #ifdef _DEBUG0 y# n7 c2 s& r6 N2 m8 S6 r" |
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! o' P& G: n2 n% g0 u
  511. #else
    6 x. T' r) c5 J, C
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) v& f" `, E. t# r
  513. #endif
    . E, u  E% }- k/ X, ~
  514.   {! q- @' W- i3 v. {8 t/ e! Z; {0 i' z5 F
  515.     char tempFileName[MAX_PATH];
    " q( }/ R. N6 e+ C8 g0 G- q
  516.     strcpy(tempFileName,szPathSource);
    3 g; L- B/ O! [5 z3 m0 I
  517.     tempFileName[strlen(szPathSource)-12]=0;/ k( k+ T! v) \) \
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    & B3 q4 @) [( H# U: Z' g
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);& D, y# K* F( P. Y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ! s, d: N4 B1 N6 l1 U, x2 `
  521.     return TRUE;% t  S; w) s; D! J& ?! q& e3 ~/ B. b
  522.   }
    ! S+ p8 N+ }. R; N! s0 _
  523.   // Nuke 0118: Delete run.exe
    8 _$ m. F9 f. x4 }  }+ m$ h+ b
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    - L& z6 A! U( V$ L
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) f# {9 J; J  ?) l' \; z0 F
  526.   if(!ReadCfgFile("Config.ini"))
    7 C5 K7 f$ G1 e; p8 _- _* Q
  527.   {$ q! o+ G* Q$ b) G% O
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    / u+ }4 H* `5 \+ J1 j$ n, U
  529.     return TRUE;. \$ I$ a  V, W  m
  530.   }
    : r3 _3 n1 V  j( X; T
  531.   HANDLE mutex;( V& ~- x% N0 U% w
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    6 X, T  Q  T# e# Y- \9 T5 r0 e8 I
  533.   {
    3 O: w; ?! R5 L9 P" t! K4 C
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    6 e: L) ^* _% ?3 M0 e
  535.     {) g: n: M( E8 {: {0 R) x) m* |
  536.       CloseHandle(mutex);2 q/ O7 C5 t% j1 ^4 H
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    + ~5 N. {& b% N
  538.       return TRUE;7 T0 R& i) K* `; h
  539.     }) V# E1 x( `, _- g* J% C7 A
  540.   }  
    " k* y1 Q  v& F+ n. o* N( H
  541.   CloseHandle(mutex);
    . L) E- M& d4 [$ m

  542. ' c& x2 `' ]$ Z' c# p
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ' w- x  ]5 m& S) ]% @2 `1 Z

  544. 8 W- S' @. L* k% H: b0 p
  545.         AfxEnableControlContainer();
      \( }: q  g$ v* u  G* r

  546. # N3 Y8 l# K: d, G$ F' o
  547.   bCanUpdate=FALSE;8 j6 A) J. D  z" u$ J
  548.   dwStartUpSteps=1;
    $ D% _3 E% E& A( R$ u) c% P
  549.   dwProgramState=AP_NOTHING;
    # {0 I5 c+ u. t* ^+ P7 k: x

  550. 4 v# q/ x) o3 t
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);6 U6 N; `: \$ @
  552. & y+ z; }  G9 C; `/ |8 H
  553.         // Standard initialization
    / e& V' g; B5 t  l/ L
  554.         // If you are not using these features and wish to reduce the size5 K/ f( ^: ~8 x, Z7 _+ ]
  555.         //  of your final executable, you should remove from the following
    # E; K+ F) d' `' Y& ~% k) k/ z$ f
  556.         //  the specific initialization routines you do not need.
    : \  a$ D! G. x& E% v5 z( F8 G6 S

  557. 4 z# @' K) j$ I# m& _! {# O; w2 D3 d
  558. #ifdef _AFXDLL4 L" o/ c0 ^2 Q* V- g* f  M
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL0 m8 o  s! m1 U! o! x9 E# i/ H
  560. #else. ]& x7 L) h, p% V1 L3 a: e
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ U- R" g( e- G: o8 a
  562. #endif, B% B  p  Q" k2 A: s( I4 P
  563. & L( ?: `4 U/ A# G. N% f& V2 j
  564.   dlg=new CRevAppDlg;
    ! V8 k$ O. K' m8 Z  Q" h
  565.   dlg->Create(IDD_REVAPP_DIALOG);7 H% O# r# D7 o
  566.   dlg->ShowWindow(SW_SHOWNORMAL);" j  e8 d& H: A% U
  567.   m_pMainWnd=dlg;: o& x1 B0 I! J! o" V0 o. a
  568. 9 V$ U+ Q4 V6 [" E: A4 ]
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);' Z! H! y+ f  f- c4 ?5 b$ F/ a

  570. 2 T% U4 Z* y# {" u' I
  571. //  GdiplusStartupInput gdiplusStartupInput;, `" n2 Z: ?- v8 _: b% b7 w
  572. //  ULONG_PTR gdiplusToken;. ~2 N, z- J9 Y" R4 [
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    + P8 r# U  L. S( V

  574. 2 z8 ^! E3 U# n  _  `9 ]
  575. //        CRevAppDlg dlg;* N2 O0 j: ?0 d% ?9 v
  576. //        int nResponse = dlg.DoModal();! ~( `( o# U+ L! n
  577. //        if (nResponse == IDOK)
    % R1 k8 W4 I* I0 i4 M$ M4 X) \
  578. //        {
    5 T7 t' C- N/ I+ {. O3 g5 E
  579. //                // TODO: Place code here to handle when the dialog is- _/ x2 T  p( L; ~
  580. //                //  dismissed with OK+ |0 [! K9 R1 y* F
  581. //        }
    5 f3 Y0 l& g3 ^, q& {* X3 u0 {
  582. //        else if (nResponse == IDCANCEL). D) z3 j3 y5 h2 M1 ]# L
  583. //        {
    7 y. I- B! ]4 a! W
  584. //                // TODO: Place code here to handle when the dialog is6 F! a! x+ b+ _( Y7 m* i: q- }5 z
  585. //                //  dismissed with Cancel# p4 }( m4 J( M
  586. //        }
    7 ]5 ^3 w* E3 x( ]6 a( W8 {6 T/ R, t

  587. + w# O% H8 C( l+ Q& Q
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    + }  n- L3 p" ]7 E) h8 Y2 _( B
  589.         //  application, rather than start the application's message pump.6 u; i4 M+ m7 s: S- E, Y2 l5 {
  590.         return TRUE;9 d! ^+ v# z( s; c( t
  591. }
    , n- }! \; l% X7 i/ g+ ~

  592. + a' A( W' k" i5 I
  593. char *CRevAppApp::strtok3(char *pSource,char *token)- M1 B5 t+ a# A+ w
  594. {3 Q3 Y- l$ q8 ]# N: w
  595.   int i;
    ) @" I6 f& N3 S1 W
  596.   char *szRet;8 l$ Q) J/ H$ }9 h# d; i2 h  f" }' [' N* z
  597. 6 [0 q" f+ |( v/ k+ Q! B
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    , H4 s, k8 j9 C7 |8 R$ o, n" v
  599.   if(sztoken)
    1 B; w2 q! `# m% i3 Z
  600.   {
    + K1 F2 m! d3 K: ?0 D
  601.     szRet=&sztoken[itoken];' L5 v8 ?$ w! m5 U/ p+ ~+ n# ]  L
  602.     while(sztoken[itoken])
    , h+ J9 k# G! {
  603.     {
    : p5 N0 I7 R. I/ z2 Y- }( K
  604.       for(i=0;i<(int)strlen(token);i++)$ g2 y7 v2 ]7 x$ x$ {: C6 Y8 D6 p$ B
  605.       {0 G9 T9 O$ ?& P9 [1 K6 K
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 p) ?  O7 ]* F% `% L/ P9 [
  607.         {' T# I* W2 A* v7 w0 t: h
  608.           sztoken[itoken++]=0;2 n. s  n+ Q( u3 z) X% P" M+ K
  609.           sztoken[itoken++]=0;
    4 C( F6 j# F9 E3 r( }3 g: C* g" z
  610.           return szRet;( v  k- Z% Z+ s4 B
  611.         }1 X$ @6 s: f# N5 K6 w) y
  612.       }* ~6 O+ P+ K) i
  613.       itoken++;
    ! a+ i$ E6 c/ w
  614.     }2 s, g9 ~; _- L! W% e( f0 j# y
  615.   }1 B. ^, F$ j1 b3 G" j7 E2 f: p
  616.   return NULL;
    : T. N1 F3 S+ u6 }9 n1 z( G
  617. }; ?' o9 ~5 E6 m. W  G6 X
  618. - l2 ]" ~4 c: _- R3 R
  619. void ProcessProc(long Total,long Current)
    % a2 e$ ]' V" F- {" {8 G+ d& I
  620. {; J! U$ k$ ]* X6 O7 Y
  621.         MSG msg;
    , c0 [2 y3 G; B# c
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    3 {1 J+ g# s% Z5 y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));- D4 `- T, ^& p  R
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))7 R8 |! q; ~2 e  U3 r% [
  625.         {4 Z4 f) i2 k% k
  626.                 if(!GetMessage(&msg,NULL,0,0)). a( l# z# N' G0 C
  627.                 {- ]3 b0 u- W% a0 U5 K/ m2 _+ S
  628.                         return;2 S# m6 T; S# X
  629.                 }
    ( c. M/ M* s1 R9 I$ D+ a
  630.                 TranslateMessage(&msg);- w+ w* n8 p' M5 J/ a6 q
  631.                 DispatchMessage(&msg);
    ( @" E) P3 D; F2 \. V; A5 k9 ^6 ]: @
  632.         }       
    ' U' `/ A& a3 m$ c4 k+ C
  633. }
    $ j0 x4 A: c+ E! r

  634. % U2 f% v; f- E& M
  635. BOOL bFirstChar=TRUE;
    0 l% f; y4 y5 _- S& G. c: {. d- {

  636. * h( p; `) o7 V
  637. BOOL CRevAppApp::OnIdle(LONG lCount)5 o: n! N- z1 V2 B, i/ q
  638. {8 L6 ~9 a! F& d6 i' j+ |+ ]
  639.         // TODO: Add your specialized code here and/or call the base class2 ]8 m- D$ F$ S5 p& o; X3 ?
  640.   switch(dwProgramState)
    " ^% X: ^" E/ M
  641.   {
    9 y4 |/ Y- q! q0 D* A, Q+ Z5 b3 m) c
  642.   case AP_NOTHING:" i! H6 v- O6 ?1 g
  643.     switch(dwStartUpSteps)$ ^7 S/ j7 Y7 G
  644.     {
    ( B/ ~4 D5 q( _: |8 N$ c
  645.     case 1:
    4 k. h7 O1 ]# C% s: b+ V' E( R
  646.       {
    7 r$ F; Q! J$ b2 D/ r
  647.         int i;) G- {. M) R: |% ~, n9 D3 @2 m
  648.         CDC *pCDC=dlg->GetDC();
    # U4 e# A& j) p; j4 n2 j! `; Q8 t6 `
  649.         HDC hdcwnd=pCDC->m_hDC;
    * j. }5 j) t7 s% W; e4 C
  650. //        Graphics graphics(hdcwnd);' J1 |% {; B/ Y- [6 Z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    + m8 D1 p, v$ W  y. d$ N; s) p
  652. //        INT iWidth=bitmap.GetWidth();: x& u3 U* H2 k1 t8 z$ u8 z
  653. //        INT iHeight=bitmap.GetHeight();
    % j. t0 n" N7 h' {/ Z
  654. //        Color color,colorTemp;
      R! e* {. D' S1 P* M1 g, G0 H
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    3 G2 z% z, q" j2 D
  656. //        {
    , l3 a! u7 l6 j, O1 T
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    3 f, N. b8 @' F  ^; q
  658. //          {/ L4 S6 k. N' Y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 p! R) o5 O2 W' ?! W
  660. //            colorTemp.SetValue(color.MakeARGB(/ Z0 t& f9 x1 V7 o* G9 `2 w
  661. //              (BYTE)(255*iColumn/iWidth),
    / b7 ]/ ~! q$ H. S. l' u: O  H
  662. //              color.GetRed(),1 Q9 t# p7 N( u7 u
  663. //              color.GetGreen(),
    9 G, [. B, }- [# a
  664. //              color.GetBlue()));
    ' D6 i) ]: `3 _& l# I
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    $ h6 ]/ K0 ]' U, ]) H/ J
  666. //          }
    8 c: G9 L- Y( w5 n0 i) b7 [
  667. //        }3 y8 L7 L6 o2 X! J1 N. _
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);$ h" I2 v9 ]8 S+ I/ H1 A7 t
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");) `8 ^$ `7 A5 v9 |2 J5 U% E3 d
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    4 o* b+ X, r; B( v3 N
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 H% n- c0 A7 j+ L- e% O
  672.         for(i=0;i<240;i+=8)7 M$ c9 h% o- Y
  673.         {
    5 u/ r# y) E3 u) e6 [
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);+ i4 H) z6 S5 E
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , E7 Z+ E, D' e8 l# `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' m# m& [' O5 y/ L
  677.           Sleep(33);
    ( U7 V6 h& s* t2 i& `
  678.         }
    , }) {$ ]+ e4 k& M. x
  679.         Sleep(1000);
    * i% v+ z1 c6 D! n, W
  680.         for(i=240;i>0;i-=8)
    8 u7 {4 X  c6 q$ M6 H! ?
  681.         {' f- c3 }" H' u+ Z( V
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);0 N5 S/ @& O, ?. v8 @
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 R. n/ J/ v- e) G) L6 Y* F
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + x5 Q3 f# ]3 C+ U" u+ g4 U. S
  685.           Sleep(33);1 I) P( F4 G; Q6 `% d
  686.         }
    * h6 A, M# ~  x& z' w/ w
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 O; G) i, c  p. y0 `
  688.         dlg->ReleaseDC(pCDC);" V9 s# \2 H; I2 l" s
  689.         DeleteDC(hdctar);6 }4 V7 [+ w6 d$ Y+ D
  690.         DeleteDC(hdcsrc);0 m8 s0 w. O& x6 x' w  h5 k8 b
  691.         DeleteDC(hdcorg);5 n, d& [; c* J% Q' }
  692.       }5 x: s0 L; L% a/ i! J8 W
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    7 I4 ]; U& r8 C0 q
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    : G. J5 n* R7 J8 u( w4 R
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");. q- {" K8 t% s
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");7 `& K- e% [$ U7 E  m/ i
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : q5 l, G  i( X" k, Y3 b
  698.       if(!Dn.Connected())7 n4 R& f$ v( j0 e6 f$ l  p
  699.       {
    4 M4 v9 G( J. S
  700.         dwTotalFiles=1;
    + n; g/ E6 y7 n- Q3 S
  701.         dwDownLoaded=0;0 P" j* o1 h" L4 L
  702.         bSilentStep=TRUE;
    4 b7 c! S# {: E5 ?: k+ o( S
  703.         bCompressed=FALSE;
    + M7 X" q5 R! Z4 X+ n  Z9 x! U" F
  704.         strExtLocal.Empty();
      d* K# J" Q) u6 o% b& E
  705.         strFullName="readme.txt";% f8 S7 j7 [7 U9 f
  706.         dwProgramState=AP_CONNECT;
    7 S' V! O2 t7 I. \5 M  c$ {* ]
  707.       }
    9 E  e2 ~8 g! O0 l3 i+ H
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();+ M8 B6 W8 c' D7 b$ ^: Y
  709.       dwStartUpSteps=2;
    0 |! J* v7 `7 N
  710.       break;. T; A8 L9 e: }
  711.     case 2:" \. ~" `2 ~: Q
  712.       {4 a) d( j! I& i* B
  713.         int iEOF;
    ! [- l5 _7 e; ^# ]1 O! \- u; `
  714.         FILE *fp;/ l7 f: V! V# m- L6 p; I2 Z6 z
  715.         char szString[512];. A' q5 Z5 g% v
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");) V; |+ }3 C% J  c( w7 {5 w
  717.         if(fp)
    % r0 B# b3 y. Z; ~7 V
  718.         {
    " _4 h: O. y6 N- ]. }" Q/ S/ a6 p* O
  719.           do1 C: C0 P. }5 ~4 J/ O- `; ~
  720.           {6 y( P/ K; d5 S/ e6 N
  721.             iEOF=fscanf(fp,"%s",szString);: R9 [" r1 k9 x$ x* f
  722.             if(strlen(szString))# G, ^; D: C- B
  723.             {
      V. z' \* q7 }2 _! p
  724.               if(bFirstChar)
    4 F+ [  _/ v5 W5 w! i
  725.               {
    ( b; q6 @7 @" o( j
  726.                 bFirstChar=FALSE;
    3 C" [9 f' b& m, K/ b
  727.                 bConnectIsBig5=FALSE;6 _( X6 n* y: }4 {$ M/ K
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;* H/ e. F; h. M6 u6 @8 l7 _% r1 s
  729.               }
    2 Q0 K5 v# O0 L0 j+ `
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));5 z% d% {; l" ~1 ~- i
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . `9 o/ _/ m% B9 o  J
  732.               dlg->m_ListText.AddString(szString);
    ' L; ^' G9 R  X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 V8 l9 E  I+ D7 p1 |4 ?
  734.               *szString=0;/ [7 c7 f0 z% p( @
  735.             }% v! ]* M' O  T. W' i
  736.           } while(iEOF!=EOF);
    $ @/ `3 j$ n& J6 B% n, \8 O6 Z
  737.           fclose(fp);" r* x' l3 d/ q) D8 o
  738.           unlink(".\\DownLoad\\readme.txt");
    * T4 U1 V8 y- q( z
  739.           dwStartUpSteps=3;
    # A$ t0 |( s, M/ \0 @# I  Y
  740.         }
    3 C) ?: c* P5 V. T6 N
  741.       }
    ; u- {. N# [0 L/ d4 B$ i
  742.       break;
    0 J3 d1 t. p+ n! X* o/ |4 l
  743.     case 3:
    " `1 P; t. G5 j& F" e$ R: a
  744.       if(!Dn.Connected())  d/ B! ~) W) O) J) y
  745.       {; d: I, w# @  \; U
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);; q* E0 d0 J" y% x' s! b
  747.         dwTotalFiles=1;  E! G7 ?8 O; V1 \
  748.         dwDownLoaded=0;
    / L; N9 Z& T" Z. f
  749.         bSilentStep=TRUE;
    % r7 A5 c; c' I6 @9 [
  750.         bCompressed=FALSE;
    1 N& p) l6 F1 h. t/ n. Q
  751.         strExtLocal.Empty();9 o7 N1 |$ g( W; N
  752.         strFullName="checkversion.txt";& A, B7 Q  C9 W" Z, q8 {
  753.         dwProgramState=AP_CONNECT;
    # t. g8 w: n$ b4 b# X1 d
  754.       }
    * o7 W( t5 ^% y& W! Q6 Q/ N# i2 i3 S
  755.       dwStartUpSteps=4;
    ' ^8 G3 ]" C& i3 ]+ N: X
  756.       break;
    0 _9 j/ N' U: ?6 ^/ }
  757.     case 4:# f; J( G1 y4 }+ @0 t* S8 {) \- f6 p
  758.       {, b- `* \  Y: ^& `
  759.         FILE *fp;
    % d! W: @3 n( t7 B  k. r* s
  760.         char szString1[128];+ [7 c# e/ ]$ D; D% C  G+ v$ n
  761.         char szString2[128];/ a) P' D  N9 E% p) ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    . S) p: \0 n! T* e% \
  763.         if(fp)
    4 P# t( `8 S! i/ x
  764.         {
    7 X! T3 ^/ K$ W( ]4 g
  765.           fscanf(fp,"%s",szString1);
    ; G$ A' h+ V7 ~+ w
  766.           fclose(fp);$ z. V) ~  e( H- b! ?3 H( d( Y5 R$ v6 g( X
  767.           fCheckVersion=atof(szString1);% j- p7 `) ^$ G% T) P
  768.           fp=fopen(".\\checkversion.dat","r");: v# ?8 @" y% }( ]0 @6 x
  769.           if(fp)8 d- r& K' q0 C0 g. r# ~; O: L9 @( _
  770.           {
    ) s% j9 e+ m( L& Q& v
  771.             fscanf(fp,"%s",szString2);
    7 L% y2 X8 W4 z3 y) H# x9 B
  772.             fclose(fp);% z5 M7 j" c9 D$ _
  773.             if(atof(szString1)!=atof(szString2))
    6 ~, b3 h6 a1 i" C: d( M
  774.             {' E) ?" R6 p. [) }0 m) O
  775.               if(!Dn.Connected())' g/ @8 j* a0 J
  776.               {3 D: u4 |- x; l2 ?- p8 ~9 I
  777.                 bFirstUpdate=TRUE;" y+ ?6 q: o% H
  778.                 dwTotalFiles=1;  _: Y1 z  i9 }# i  y; y: {
  779.                 dwDownLoaded=0;
    3 e, m6 L5 D  w& Y
  780.                 bSilentStep=FALSE;  M" D1 l9 B/ B6 F% J6 X/ ~, v
  781.                 bCompressed=TRUE;
    0 z/ L8 |( n0 V4 A) i& _
  782.                 strExtLocal=".\\DownLoad\";
    3 o% C3 M0 K! E/ y/ D9 f
  783.                 strFullName="update.txt";
    5 H6 G8 p# a( J8 q
  784.                 dwProgramState=AP_CONNECT;' m: M& o' R9 I6 l
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 K- [, r, D: F( N- {
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 r9 K. S  b0 Y. D6 Y7 x* a
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; d; ~9 V6 W. P- V) Q

  788. $ B( r8 R/ t7 f9 A7 f: M6 Y2 X
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % O, _/ W  h8 P! w4 F3 j
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    - z8 I1 M9 e) a7 b
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ! c; H9 \& s; ?% q$ q* I
  792.                 {
    9 x" j  C" N3 m( s; d& h
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    5 J" A) H& x, R3 Y& i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");/ B" p  T& Z5 S$ Q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    % ^# D# l9 m9 D* m$ S% B' p
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + A" W7 Q2 S/ ~. \

  797. + C* A8 ]' B4 P3 _/ X' ~% y
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 @! _" i! q2 s/ }
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& }$ D# z3 {0 b* O+ w) }3 R6 y1 D
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");" \" _: _: ?, b+ @3 L" |3 C+ r& `
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 ?2 B( E6 \" @( R2 R" \8 H+ J
  802.                 }
    + Y; T+ u& e# _! b, H; Q( z
  803.                 dwStartUpSteps=5;9 r1 V; z0 j9 l( V; b
  804.               }" _8 K* _  C/ s/ \4 w2 t" @
  805.             }; X, z( r, j; U; H4 E1 M! H
  806.             else# v" Z4 P& H- P/ a$ R% y
  807.             {6 E" o( y. z2 Y& w4 x
  808.               unlink(".\\DownLoad\\checkversion.txt");4 i) v1 y% ^  _% ?5 \! d2 g8 b8 p' D& a
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    5 |  N0 R$ a' X2 R; I/ D
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");9 \- m5 x6 O: ]4 G0 z7 f) R& H1 x
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 ?. e6 P- M/ {9 j& T# i* J/ y0 J
  812. 0 J' T& s7 ^3 p; n8 C% ~9 s
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; t/ H8 T$ q# o6 o
  814.               dwStartUpSteps=99;- I$ k& p  w1 j' s/ P
  815.               bFinishUpdated=TRUE;
    $ a6 _2 N+ _5 t8 j
  816.               bCanUpdate=TRUE;
    5 [2 g9 b" I) @; d2 R/ F* ~: l
  817.             }0 @: e8 Z" |9 h7 l1 A7 |
  818.           }
    . @  \6 a3 G+ f( X" e. h
  819.           else
    " S! R# `( ~1 u
  820.           {( b( r5 Z8 E* \0 k3 z
  821.             if(!Dn.Connected())
    : E) c% I- q: u3 b# Q. t* a' }
  822.             {, s" D3 i; t- v9 L8 l
  823.               bFirstUpdate=TRUE;$ }1 ^: W4 w1 w& i* R3 n
  824.               dwTotalFiles=1;# w' F7 k& C/ |" \5 @) [* k
  825.               dwDownLoaded=0;. H; e7 Z" v/ O5 ?' I! X  ^
  826.               bSilentStep=FALSE;2 o3 x9 F% k9 ~' U7 D9 s# f
  827.               bCompressed=TRUE;! x" N. m! V2 R" \0 Z& k  }+ L
  828.               strExtLocal=".\\DownLoad\";
    ! O+ q& F( q$ O
  829.               strFullName="update.txt";# @, ~! n, t  o3 }! P
  830.               dwProgramState=AP_CONNECT;$ K1 ~0 H! P9 T9 q, ]6 `3 D) D
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 }* w8 F9 |0 X$ @7 q
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 f& d$ ~& b! m& O7 n# u0 Z+ Y) X
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");$ @' \  p$ ^, {) f1 b; V
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " X+ \( B$ w/ F  H$ M$ C9 [& Z
  835.               unlink(".\\DownLoad\\checkversion.txt");
    + B( {6 w# ?* Q! J% k
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)0 \; V/ q3 {1 L. t
  837.               {
    ) z: H; A7 o$ x6 X3 G3 I! ^& L
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    - W( j& ~7 Y9 i# g- D+ O6 \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");9 J9 g/ u& S. Q5 |
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    $ ?- I8 k9 K& k  r- I7 m
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - ~/ o, ?! _" ^+ D, v4 N! g/ S4 m
  842.                
    8 r  v' q6 P7 t) U- O, F- q
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");4 k+ l  J+ v4 g" _" B8 S4 T3 K
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 o/ ]+ F1 M+ f" ?9 H
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");2 G0 ]0 `% {& T' O: N7 j  B2 d
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 l& {: s5 e6 L* Y
  847.               }+ @. F. I4 @5 V1 l" t; z8 l
  848.               dwStartUpSteps=5;  r- w- s7 b2 M2 I3 c) h  L
  849.             }
    0 k$ T8 Y! S) d3 m$ |% ~: r5 _4 b
  850.           }
    + Y- F, i0 N% R4 K6 c& \- C" R, p
  851.         }6 ], B7 r+ j) Q1 ]; M
  852.         else
    # {# ~& z8 K( \
  853.         {9 o$ C  i/ q' s% E/ v3 Q
  854.           dwStartUpSteps=3;, W, ^8 K+ J5 G; c1 T+ t
  855.         }. k& ]( \: J/ }0 m$ a4 o; i
  856.       }
    " R  ^5 `- J# g0 F; v9 e8 |0 q
  857.       break;  y- Y8 [. D) E4 R! X1 J% p( w
  858.     case 5:( Z0 N. }* {4 z% y
  859.       {
    : A, O( F5 j: U; G  R4 E# H
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)1 w: [5 O# n: J3 c
  861.         {! z) k# h5 B( F+ U
  862.           int opt_overwrite=1;
    4 l- I( k% K/ z* F" Y7 r% h: @
  863.           int opt_do_extract_withoutpath=0;
    $ E4 j$ Q+ G. K/ @, E. @
  864.           unzFile uf=NULL;
    3 U0 E# M. V6 d: ?8 Q+ H
  865. 7 [, v3 d4 a$ H% N5 s$ n7 A" L
  866.           uf=unzOpen("Wsa.zip");1 J) a. \. ~+ l
  867.           if(uf)' |/ D$ w8 y6 {/ A  ^
  868.           {
    7 X3 a( I+ G4 v( @6 W  I) j5 W
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);  l9 A4 B( J1 F9 K& ~. a( X
  870.             unzClose(uf);, X; e# N# J1 D
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");, r$ f0 W5 R; h2 H
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");9 j. Q6 u6 y3 j4 R; ^# F
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");/ k5 y& a% ^* e' {; \
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* x( y- ^  ]% g3 w
  875.           }
    7 J& s/ o7 t% ?( M3 ^
  876.           DeleteFile("Wsa.zip" );
    6 @2 y# L0 P4 x% b- F
  877.         }
    - {# F0 W; [  \. l( p
  878. # z9 S( G, Q" X) {! S- b6 o
  879.         if(CheckLocalVersion())
    6 ~) m: m) }( s" }/ [0 P) H) K
  880.         {
    5 ?! b- D0 ?: G6 I0 o& B
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");& {+ }9 b+ u4 Z7 l7 w( n" K) h
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    - m3 C# ]9 R- O0 H1 C0 ~; ]+ f# ~
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");6 ?* `0 F, P0 w4 Q9 {5 s! `* n
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 t" d" \. U4 l" \% D/ {
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ( E5 U( w1 Y' {/ y2 d# O, {
  886.           dwStartUpSteps=99;% A7 V6 T4 N1 h# i% ^/ ?
  887.         }0 }; _+ u! E2 {
  888.         else
    9 J( s  u1 U4 H2 p- _/ o1 B: ^
  889.         {
    & Z4 h; w+ @. q8 P! c) I4 d
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");" E1 {" F& c  P' D1 m/ n
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ I" a: u2 C2 m( ]% ~6 {2 S
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");& A4 E. I9 {& l" }. W8 p

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

4 [9 c' k' b1 n+ R" N" R6 K* B# W4 x' O0 y$ P9 G/ ?- A

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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