找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
) s. ?/ }. e# C: f$ j0 t
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ) C( H7 d4 C0 Q; o# f
  2. //
    , C) W( K0 @# p* O1 |1 R3 |% E

  3. 1 f8 \/ @5 M3 |6 E( K
  4. #include "stdafx.h"
    " ]0 h8 |: G( J+ u9 o) W

  5.   X% _; }; z1 ?5 j* S* T
  6. //#define UNICODE
    6 Y2 ~, _9 _7 G" F4 ?$ d6 f  m
  7. //#include <gdiplus.h>' {) ~( i, `+ z1 M
  8. //using namespace Gdiplus;- h. z1 R9 c) x0 z  o
  9. , D4 ~, J' X+ ^( F
  10. #include "RevApp.h"
    3 Y4 w$ m% q* S: b
  11. #include "RevAppDlg.h"
    # }3 }5 l  v/ Y+ @" b) V
  12. % O( V8 q' F3 O
  13. #pragma warning(disable:4786)( J' ^& F$ U& _  l
  14. #include <map>
    ' ?$ G+ A. B1 B3 d" p, \
  15. #include <list>
    5 g5 @5 J' J9 C0 W! |3 q
  16. #include <direct.h>! z- d5 y. Z/ u: {1 J& ~

  17. 4 \5 u3 d: R4 g& K: `' Z
  18. #ifdef _DEBUG
    0 V: B8 Z: M! |) A
  19. #define new DEBUG_NEW# m: L& r$ W1 r9 g2 U1 E
  20. #undef THIS_FILE
    ; Y$ k" g  j1 \8 [3 O# ?$ D
  21. static char THIS_FILE[] = __FILE__;% r& J, R( \3 q" B
  22. #endif
    1 S6 B5 Z* ~0 g. a$ d1 j; ?
  23. #include "SkinResDef.h"
    5 f' t* j, O  a! a) U5 z
  24. #include "ChangeBG.h"
    * |3 j9 G% M% p5 P8 M  x
  25. #include "AFXINET.H"
    : w: p' ^3 C% A& ~. y
  26. 5 C: K; J1 V$ f" s( N
  27. #define TRADITIONAL_CHINESE 0  f5 P. E' u3 H7 |7 a, e
  28. #define SIMPLIFY_CHINESE 1
    1 l9 r# S- d' B. p$ K9 d
  29. #define ENGLISH 2
    0 D. k# J5 {3 ?" ~
  30. int m_iLanguage = ENGLISH;0 x# Z5 C2 g8 G; a4 V/ B; e# }
  31. /////////////////////////////////////////////////////////////////////////////
    1 j6 p3 v- d0 K
  32. // CRevAppApp
    9 K, W5 h7 N* @

  33. ) d. a1 @. H0 F8 \0 _
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    4 |( D: G& m/ b1 z0 M2 E1 v* p0 u1 u
  35.         //{{AFX_MSG_MAP(CRevAppApp), W. U! B- j7 r
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    * ], K0 R* U( t; t$ k. D& s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    * c( M7 e" J7 d- l% L# ?
  38.         //}}AFX_MSG7 x7 o6 c' o% Q% _( A# ^( S6 T
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)% {" ?( m+ ~' t! t) l7 D+ R
  40. END_MESSAGE_MAP()
    3 ~) |6 G/ a% R+ A$ |4 n

  41. 0 v: q" Z" `+ x( h( ~
  42. /////////////////////////////////////////////////////////////////////////////
    6 c+ W% W; ?. {- t/ \  Y$ f
  43. // CRevAppApp construction; n' z9 I) L/ z6 ]4 e7 |
  44.   Z8 x. L  k0 N0 F4 b
  45. CRevAppApp::CRevAppApp()% B/ T) T$ b5 u" _6 o3 f
  46. {
    - g& I) \  R4 Z% Z1 `  C1 Q
  47.         // TODO: add construction code here,
    7 w) ~! e- ?. {( V) g- b1 p3 L/ Y
  48.         // Place all significant initialization in InitInstance% q# V" i2 k6 \9 [& A3 P
  49.   bDisplayIsBig5=FALSE;
    # s$ g! ^' W1 F. {& v' p
  50.   bRestartUpdater=FALSE;8 ~+ e9 K# n& |% J% ~! _& H# w; F
  51.   bFinishUpdated=FALSE;
    9 R) h3 b7 D  e2 J
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    6 o9 E: q. p9 y( r* X9 B, C
  53.   InitChangeDataBig52GBKS();
    & o) K, H" U$ c1 T
  54.   InitChangeDataGBKS2Big5();
    - G0 k9 G" w) R! O0 f" v" Q! D
  55.         //
    / _' I1 R  ^1 a) x( C7 c
  56.         bClickRunExe = FALSE;0 D( y# \6 Z9 `) s
  57.         //
    7 o4 L6 e2 {& K- f3 o
  58. }
      a! C3 m$ f( m3 S
  59. ! H! |# n8 g0 o/ F; m( H
  60. CRevAppApp::~CRevAppApp()
    / ^: a6 P7 B, a+ W# B6 y& V. @
  61. {
    0 ]1 _( |! i5 g2 \8 z' O- v: D
  62.         // TODO: add construction code here,
    ; C! m1 C1 P% s2 ~0 e% v6 w
  63.         // Place all significant initialization in InitInstance% _# U& o- t7 s6 u1 `2 {1 _/ w6 j
  64.   EndChangeData();
    8 _. h3 ?$ W8 R5 N! [7 I
  65. }
    7 F, b  }# B* b$ A

  66. 9 o  Q( I# q; h8 V
  67. /////////////////////////////////////////////////////////////////////////////
      N+ V$ {3 e, w
  68. // The one and only CRevAppApp object' U( h: `: f) o- z. P8 Z: `2 A" g

  69. ( J. o/ `3 s" |9 K
  70. CRevAppApp theApp;
    ) Q5 Y$ h3 C8 g! T+ w: A

  71. & E9 c* B: {! ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName): r4 z" E# }4 w& d
  73. {
    & m' u  o* T# Q3 G( {
  74.   int iEOF=0;
    % q! N' N2 [6 I8 P. ]- T; [
  75.   char szTempName[MAX_PATH];" Q5 \. J; l1 f5 l0 o
  76.   *szFileName=0;$ e6 k$ ]! k9 Z. N+ {, o, Z
  77.   iEOF=fscanf(fp,"%s",szTempName);
    6 E. E- P( R( `2 t5 d( n4 x
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')1 d3 \9 B% K0 R7 R/ P
  79.   {
    ! j3 [4 S5 c: w8 d9 F
  80.     strcpy(szFileName,&szTempName[1]);
    . K, \; m+ }. v6 m& \) h
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)5 _" _" k' o; T9 q
  82.     {4 b. N6 g1 k5 L: c* S8 I/ d& s
  83.       iEOF=fscanf(fp,"%s",szTempName);
    5 b0 Z, H! k$ Q4 ?. u6 A: [
  84.       strcat(szFileName," ");
    . @9 d( `4 V/ q" g) J
  85.       strcat(szFileName,szTempName);3 _( u! D! V4 N: W2 y
  86.     }
    8 u- [) s% j' e" s; g( t! x
  87.     if(strlen(szFileName)>=1)" l/ u0 |0 V, p; z5 \  g  q0 |7 U
  88.     {
    9 r% {! N" ^9 y  a$ v$ s
  89.       szFileName[strlen(szFileName)-1]=0;  T6 V& S% Z3 R+ P$ R8 v
  90.     }: b$ d" ?/ w  f
  91.   }
    * k" E& g8 ~' V) }9 G
  92.   return szFileName;
    : ]8 C! S" S/ g/ p# k
  93. }1 i6 E( t, E4 L* Y. q

  94. 0 U( p5 w/ |4 z: F
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    9 d# R- n1 M; K8 I! R& ]! G
  96. {6 x" r# n( V5 I) W
  97.   FILE *fp;4 D4 `% j4 F9 n: F  \
  98.   char *key=NULL;
      S) I7 M. ?0 b, a; r5 G( a2 `+ x
  99.   char version[MAX_PATH];: W% n8 N& S9 t
  100.   LPUPDATEFILE file,olds;
    * K, a) P; n+ u1 u
  101.   std::map<CString,LPUPDATEFILE>::iterator p;. ]- C+ t5 O3 y
  102. ( p& p# x1 ^7 P$ b) L1 ~* U, V6 ~
  103.   UpdateList.clear();8 W9 V4 O5 r6 G, w0 q
  104.   UpdateFile.clear();, [) ]$ h0 {/ ^: X, G& p
  105.   if(GetFileAttributes(filename)==-1) return false;
    & X. j* h- ]4 @; X/ {( W+ s' o, l3 w
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ( G1 V5 s; h6 s+ A  J8 ?; x; W- C5 y
  107.   fscanf(fp,"%s",version);
    : c8 f4 e; @9 s3 e
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }! R7 B) z; h: e7 {4 ]4 ]
  109.   while(fscanf(fp,"%s",version)!=EOF)+ _9 ?- K5 V, q+ k) H; e" f
  110.   {
    % W0 G5 d2 L( V; d. }7 P
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 K7 U1 [1 u- P5 f7 P
  112.     fscanf(fp,"%s",file->path);
    7 Z" ?2 f' W' j0 w
  113.     ReadFileNames(fp,file->file);) k/ U7 t; U4 u4 p2 y) Z/ T
  114.     strcpy(file->full,".");
    " w1 f: {- R( o$ w3 \0 d
  115.     strcat(file->full,file->path);, f- K& D/ N. J6 L' H  c- S2 S
  116.     strcat(file->full,file->file);
    ; p1 p7 W( U  P
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    7 ^# u6 p3 y( w" N
  118.     {
    8 }; a6 V+ n. k. v( v' S) `
  119.       file->vers=(float)atof(version);9 l7 w# W$ m) T( M0 @
  120.       UpdateList.push_back(file->full);
    ' P& v4 `; j5 b+ r
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ' Y4 @  o: S8 [: p$ G" q. ^
  122.     }9 S( u+ c) e$ B/ u
  123.     else
    0 O4 W% G3 T& R; g
  124.     {
    : b, Z. b) B/ a5 A  _$ ?0 Y4 A6 P
  125.       olds=(*p).second;
    & |. P2 L) N# s' l
  126.       if(olds->vers<(float)atof(version))6 e% u0 ?! S  c2 y
  127.       {0 ?. R( ^( f9 l) k5 r- {2 O
  128.         olds->vers=(float)atof(version);
    . H; u8 C" E6 [- {: y
  129.       }1 }! G1 M; o; {& A! x
  130.       free(file);3 u# i% g5 z7 Y6 [0 K
  131.     }
    4 k- z; u  y: T5 w  t
  132.   }7 T- w- Y$ b4 M* ^% J
  133.   fclose(fp);
    + Y1 {# R* B! i/ _1 [
  134.   return true;* ^7 Y: w/ F2 @% Y& s0 ^
  135. }7 h9 p) L6 s2 h, K& w
  136. 1 R: i9 h+ z) r" U) K
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    6 X2 N' l5 `1 K$ U  z8 ^' y
  138. {
    0 a  }; w+ }! ~# E" _1 @: {
  139.   TCHAR  szFull[MAX_PATH];
    ) v  _5 S  D. J6 J
  140.   TCHAR *token,*inter;
    , `( A, z# @# d- K. `( f! g
  141.   *szPath=0;
    ) H( q" K1 Z4 _+ M4 v8 {
  142.   strcpy(szFull,szFullPath);
    ! D6 y9 z, Q2 u8 w$ e
  143.   token=strtok(szFull,"\\/");$ a+ y1 H8 K6 V! n; \
  144.   inter=token;( t5 {" A' m* U( K. _
  145.   while(token=strtok(NULL,"\\/"))- f( ~- P6 y% B% O5 n; Z5 b( ]# o
  146.   {1 P. r; X3 f- F2 g! \& H- {
  147.     strcat(szPath,inter);
    ( \5 ~' _: u( g2 V+ Z+ A' y+ N% F
  148.     strcat(szPath,"\");( L4 ?) l* o; S2 W
  149.     inter=token;
    $ q; K6 I$ b6 e8 V5 d8 a
  150.   }
    + \0 p, ?! y6 Q; n9 _- c( G7 u
  151.   return strlen(szPath);  a+ Q4 R* n8 e
  152. }
    6 T/ Q% Q, y& `: B5 x# L, t' z
  153. % u, e1 m& j  ?( h) D1 r5 b0 e
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 Z1 d0 R$ U% V6 P+ _. n
  155. {
    8 O' g6 a4 n" C7 A$ x! I
  156.   DWORD attrib=GetFileAttributes(Target);
    2 ]! R1 A7 ^- @' B; n
  157.   if(attrib!=-1)" f" ^; `' x; I& r
  158.   {+ Q; X) d* e* s( c/ I9 u
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))9 q/ K/ b; ^  k5 ]2 h# A, L
  160.     {
    " M+ _* q2 z9 r( d2 ?- W
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);+ k% y# B7 S: O
  162.       SetFileAttributes(Target,attrib);; A% }4 e+ [8 @$ v, l. ?
  163.     }
    0 s4 |5 j; h4 B5 E
  164.   }
    $ y% ^4 v& B5 k) V+ n0 W9 G5 F9 S
  165.   CopyFile(Source,Target,Erase);
    8 `% t; M. X3 l$ R
  166. }
    ; N' @( h: m- V7 f% Y0 C4 F
  167. & S+ |/ K6 Y" }" M: v! h5 q" r
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)5 {7 i: g# _6 e, Q2 `- F
  169. {
    ; i1 Y' Q5 \( M2 p+ f, W) z
  170.      FILE *fp;1 E5 ~) D8 d! i' c" V+ O
  171.      char  szBuffer[8192];% v, D; e  r1 {0 p8 ~
  172.   va_list  argptr;
    0 r% j- V6 @) M
  173. # A- V9 L8 w& f- S1 ^& E" O
  174.         va_start(argptr,message);
    ' {0 k, q) e' T! G4 C' g1 x# a* O
  175.         vsprintf(szBuffer,message,argptr);
    ) A+ v+ a% X" I5 i+ [! C; x" e
  176.         va_end(argptr);
    ' C0 J$ {. k* x, K
  177.   fp=fopen(FileName,"a");9 T0 {, d, O  J% V& ^# `) i
  178.   if(fp)2 @5 L7 x5 a& h8 H  l
  179.   {
    5 d' x! t& T; z% v0 y. ^+ ?
  180.     fprintf(fp,szBuffer);8 e' D: U8 m2 u4 z( @
  181.     fclose(fp);
    , W: D4 ]- o  Q% T* _# L2 Q" H
  182.           _flushall();
    : [+ J0 ]& [8 A; }& D( p) K
  183.   }9 I! |& x" f- a# R/ b8 u
  184. }0 @' N0 i+ _7 y* m  j1 R0 g

  185. + ?% J. a6 x) R+ z" }9 i
  186. BOOL CRevAppApp::Fclearf(char *FileName): I3 |# d4 `0 s; k- A
  187. {3 Y: i. F+ g) w
  188.      FILE *fp;
    / q" ?9 L* N3 g0 f
  189.     DWORD  attrib;
    6 r4 Z, V6 F7 b) S* b0 P0 u+ K
  190.   attrib=GetFileAttributes(FileName);, e; R' o# r& n* b
  191.   if(attrib!=-1)
    % c; Z/ M) x  `; @1 J' P% H
  192.   {
    & A% h" N5 S5 p& |8 c( o
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    1 E; _7 i1 D% x# u9 I2 |
  194.     if(!SetFileAttributes(FileName,attrib))
    * W/ W6 g% }" ?. r* w" a
  195.     {! Q- {! z0 }4 P! J
  196.       return FALSE;
    * ^- j! ?9 S* b8 @
  197.     }
    ! P8 j! g+ T& Q; I* r1 Z
  198.   }: I3 A$ K$ k2 H' o
  199.   fp=fopen(FileName,"wb");/ m+ l5 L9 `& z! R) n- X' j
  200.   if(fp)1 T: D! M: R4 {. u" _% o1 G
  201.   {' ]0 V+ \! R4 K$ q5 ^# }
  202.     fclose(fp);% ^8 P' @9 M6 w3 v
  203.   }. k6 d  T8 [9 x+ W' K7 g- B2 B
  204.   return TRUE;
    ! {  F3 _) w- g" O- X
  205. }( _/ i  `) w% Z- W! D) Y: h
  206. ( }. a: f& e* R6 a5 Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)# q3 g9 f  l  _6 M1 G: l; v$ Y' @- o
  208. {* n) j, A- c5 A
  209.   char filename[MAX_PATH];  I1 g* N8 [6 J5 Q/ K5 k3 G' D
  210.   LPUPDATEFILE file,olds;
    . b+ G; X- E) U8 ?
  211.   std::map<int,CString>::iterator i;
    9 y) _# L" Z6 O! ~
  212.   std::map<CString,LPUPDATEFILE>::iterator p;/ t  o. f% y5 r  f. K. d
  213.   std::list<CString>::iterator l;
    * m+ p" o4 E$ l' Y& w/ r( D% \! v
  214. 1 ?" L. [9 M" d; }% N
  215.   if(bFirstUpdate)8 C' @; w# l9 Z1 b  _4 D- d8 h3 `4 `( i
  216.   {2 f% L" q/ q# a
  217.     dwCurrFile=0;) Z: S. G2 K2 F( V
  218.     bFirstUpdate=FALSE;( v/ n6 J$ s) Y5 s) A
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ Q3 H/ q2 T9 ?% K3 X
  220.     {# t3 e1 R6 n1 E
  221.       dwTotalFiles=UpdateLocal.size();
    0 ]8 ~1 g- e# M' T5 b( H( |  h( d& G
  222.       dwDownLoaded=0;' ^/ v/ o7 d/ ]& G9 y& [
  223.       bSilentStep=FALSE;9 {+ B4 F- C+ Q: s8 k+ `
  224.       bCompressed=TRUE;1 N) y$ y6 v5 [3 `' [; ?8 f
  225.       strExtLocal.Empty();
    + [1 R, W; ]- B) [4 \! y
  226.       strFullName=(*i).second;9 g% E4 n2 a, _: J
  227.       dwProgramState=AP_CONNECT;
    & ?/ C  @7 Z" _" c
  228.       return TRUE;
    ; F' ~* M6 S: H. A, h# h! X
  229.     }, E- \5 @* M( C  Y  _% I
  230.   }5 X; K: M6 a: H( z+ F9 u8 x9 H
  231.   else if(bRestartUpdater==FALSE)
    4 ?' N$ d. M: ~( Q% {: O* `6 C- Y* H
  232.   {
    / X# B" j& N% e! e2 y& A
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    $ G+ Y& g" b. h# ]1 E0 j
  234.     {. Z5 w2 G" H/ q# I- o4 N
  235.       file=(*p).second;
    - `; B' E8 z) k, i$ Z5 }$ M$ I6 F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    + u# n! T& R% i5 T
  237.       {
    # Y5 R: I" {$ s4 ^2 E. y8 E
  238.         olds=(*p).second;( L% p' ~, g! \# a
  239.         olds->vers=file->vers;! W+ m; K$ Y# t- [/ I& m
  240.       }# ]$ z% q; D" K. Y- s
  241.       else5 m: X9 I9 H: x" i* F* \/ R2 @) J
  242.       {+ m" v: k+ ~. \8 T
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 P9 ^" @& E" l+ Z. n, M! c; Q
  244.         memcpy(olds,file,sizeof(UPDATEFILE));2 ]% w: O2 I4 U" c. C- n$ k! O9 h
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    % D8 y- C- K$ Y4 l% x
  246.       }% p4 p: x0 J6 M, y! u
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    7 B$ h- j- S0 Q) k
  248.       sprintf(filename,"(%s)",file->file);- t3 [9 d; a8 e) x
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , ~# `- _7 h' T+ g
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }9 B: D, b6 z) Z8 _/ {! F; @% P$ s
  251.     }
    9 e9 f9 q# r; B7 j9 L9 q5 n$ U! \
  252.     dwCurrFile++;2 Q$ J6 L/ Q8 d8 {; D# [' @
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# ~8 ?' \9 M, p. v& ]& [) G
  254.     {
    4 X! N& ^' |" i! w+ k
  255.       bSilentStep=FALSE;
      A, N, g: f* F  `% L, r
  256.       bCompressed=TRUE;0 ^, g1 a. d# M' `0 y; z
  257.       strExtLocal.Empty();
    $ ]0 J) u+ o/ \5 Q/ K' F* M& p5 S
  258.       strFullName=(*i).second;
    - D3 T* G8 w  ?/ i9 x2 u
  259.       dwProgramState=AP_CONNECT;! R7 G5 M( t! y! M; i: I
  260.       return TRUE;; d% B1 v" _& E: a
  261.     }
    2 C0 ^) P7 \" D. A, P
  262.     if(!bRestartUpdater)
    3 x8 w! _$ C$ d" [
  263.     {; k4 d8 n; p9 ]5 K
  264.       int iCurrSize,iFileSize;/ e) z4 L/ }/ I  K9 f
  265.       iCurrSize=0;$ z  }5 |2 S" O
  266.       iFileSize=UpdateList2.size();
    - C  _5 ]+ }- b. _5 f2 j
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");; z$ Y8 E; ?' i0 o
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    + M0 F" C% X. q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");. _/ o9 o! s3 U* h8 S" @+ G
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; u' k3 u; T% d. a* `( b
  271.       Fclearf(".\\update.dat");; {  o5 Q3 w+ g) V% W+ T
  272.       Fprintf(".\\update.dat","Bloodyf\n");
      J, F4 w6 I. D8 ?. ]0 |+ P! |) \& p+ q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)* a# _, ?1 a0 U9 W
  274.       {3 B2 A7 u$ k2 i3 J3 a
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& d  T! ~6 X" T( w' I# f  d
  276.         {5 y" Q  ^" O) H  Z, \+ {: \0 t( t
  277.           file=(*p).second;
    # k7 C: T& D7 {1 ?
  278.           sprintf(filename,"(%s)",file->file);
    1 |; f' G* t* x3 N. w
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 M3 D; @4 l. z! Z
  280.           iCurrSize++;2 o9 E; d2 K2 b9 P2 E6 V
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));6 P) N$ ^" z" j! C
  282.         }
    & P7 X$ M; w' T* x# A
  283.       }7 c5 Q: f( l/ f
  284.       unlink(".\\update.txt");* j) p9 s7 r  N
  285.       unlink(".\\update.tmp");) U4 e3 X6 j# `( |
  286.       Fclearf(".\\checkversion.dat");
    : q3 \: ~, {% D( @% `" s
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);$ S. o0 X# Q+ V! d4 u) {8 p* t
  288.       if(UpdateLocal.size())- Q" a/ |; Y- O/ \2 a  d8 y+ }( L1 i, y
  289.       {
    + y; ^' k0 A$ O( X2 W/ j8 H, h
  290.         UpdateLocal.clear();' @  Z  y: z2 a# t8 j
  291.       }
    ! G' P2 S7 {. y: {; i5 Z; I& R
  292.       if(UpdateFile3.size())8 }1 B! r* n! W1 T% p1 q; R
  293.       {: c( ?+ ]& S% E  {) q4 ?
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ( ^+ u% c5 P: D' S# \
  295.         {
    . O6 E  ?4 s! d; h1 |4 e1 s  g
  296.           file=(*p).second;: d  c5 `/ b% h1 I& f" @& I  Z
  297.           free(file);
    ! w' O2 |9 J; x4 g3 U6 e
  298.         }
    " Y5 ?4 L. m1 U+ j
  299.         UpdateFile3.clear();
    7 L. Q% u# s! m( A6 H& k; W
  300.         UpdateList3.clear();
    / h: B" @# o! M  ]
  301.       }2 t/ f/ `& D9 x
  302.       if(UpdateFile2.size())
    . ?9 H+ g6 I: K. W1 j
  303.       {
    ( F3 X* V0 U! E1 l( L, X% B- [
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * e4 y2 P; m! \  S! C
  305.         {4 L' m+ i# _, U: @; l0 O* p7 r
  306.           file=(*p).second;2 Q5 W# h% o8 i3 T
  307.           free(file);
    ' Y9 H! h/ y( R. ?
  308.         }) h6 u5 m* \5 [& b& Y  {$ h
  309.         UpdateFile2.clear();
    3 e; J' F+ K6 Z; f
  310.         UpdateList2.clear();1 f" Q6 ~/ O0 n5 j! x. s$ x
  311.       }, P4 D6 |# J) @* j
  312.       if(UpdateFile1.size())
    0 A. h: h) |8 _% h6 J! _
  313.       {
    5 ^2 O  _3 j1 r) ]4 ]
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 N' [3 ~1 \/ X- n% P9 g- u3 z) x
  315.         {
    . D4 p! {0 g. _$ j
  316.           file=(*p).second;4 _1 v: @* c5 D( k8 y
  317.           free(file);+ y3 F! L, P2 C) L' ~/ M
  318.         }+ x7 z/ V& b4 V- @" L% Q
  319.         UpdateFile1.clear();& x8 l! P. i+ {" M: r, C
  320.         UpdateList1.clear();
    . `' O4 K+ i& K0 I. d
  321.       }: \7 h  y2 e0 K' H$ Y* `; A$ F
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));- d& d' {7 W  p0 B6 D
  323.     }
    8 o: Q8 {+ m& @' I9 Q* v+ j1 L9 o
  324.   }
    # K" A3 j4 X& B0 T& K* T  w
  325.   return FALSE;# y; k* m9 q4 H& d% z
  326. }/ y" K* {+ G1 _- t" I, c) r1 s0 ~
  327. 2 K# s4 q: V" O( |. D
  328. void CRevAppApp::ClearAll(void)" w# H4 X$ w7 H- z
  329. {
    ( S' f9 {) c9 W% o0 k
  330.   LPUPDATEFILE file;4 ^/ I6 q. V7 x$ d0 y9 Y/ _4 I
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 f, ?% Y! d! p" ?

  332. ) X4 G8 W9 m2 O4 e! A* g
  333.   if(UpdateLocal.size())* X' K: a- s/ v0 b2 m! Q. h3 P
  334.   {% d3 a- S; R8 \/ f5 c% x
  335.     UpdateLocal.clear();
    4 X6 V8 x+ B( I  @& Z  Q, A% W4 w" B
  336.   }
    ; f4 K4 N6 `: |3 w4 S
  337.   if(UpdateFile3.size())+ M6 X0 R/ S  z
  338.   {
    : H7 D3 [5 Z- t9 J7 U/ c6 G
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( S) w8 f2 ?. E
  340.     {
    % t# ~- S1 N# @. q
  341.       file=(*p).second;( T; B1 z' |7 y
  342.       free(file);7 n4 `* T8 f2 z: J0 H# g
  343.     }1 X2 I  S+ O+ L, V3 M
  344.     UpdateFile3.clear();4 x1 u; V) J( E  v. r
  345.     UpdateList3.clear();
    0 w) x+ U$ g2 N8 y6 S- y
  346.   }
    ; I) s, N% t( Z
  347.   if(UpdateFile2.size())
      y  k9 @" ^7 [( v# g
  348.   {; \4 w- ?8 w1 m& y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 J6 F; G& k; w1 r3 |1 J  Q
  350.     {
    ) _6 B" }5 \' }2 W
  351.       file=(*p).second;7 K$ d3 D; z3 j, O' y
  352.       free(file);
    2 }. x% g2 A. y
  353.     }0 K% J! l( |' D! {& b* x
  354.     UpdateFile2.clear();
    0 g$ t0 b  z3 B/ n  I& [
  355.     UpdateList2.clear();% y' D. c' {$ R% Z& M0 h/ G* {
  356.   }
    7 {+ Y& W! z/ h: F
  357.   if(UpdateFile1.size())% B% d( d5 g3 Q9 i  e$ e
  358.   {5 Q+ p. |; z- X/ |
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 m7 s  x+ R' v
  360.     {, \. _$ q' r  C" V4 s% w/ g5 Q
  361.       file=(*p).second;
    " U" H& K1 T1 Q! K
  362.       free(file);, ?$ e; z4 o4 D2 O7 ^  f
  363.     }  O- u+ d8 E) L  t1 @& K" E# S
  364.     UpdateFile1.clear();. x+ [! z7 ~( _5 Z. i+ X
  365.     UpdateList1.clear();0 B: y3 D# X7 `1 @8 ^
  366.   }
    2 m2 l0 h. `2 q
  367. }  # x3 z7 O1 _0 B# F9 a/ P
  368.   
      \- k9 g# |( u' ^& T0 H$ C8 Y
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ) v: c0 ?# n+ K/ L0 ~
  370. {
    1 Q0 |) M  |" N, J
  371.   int c;
    3 _9 l" V7 e, O' |( J
  372.   LPUPDATEFILE file1,file2;  ]! C0 o" J5 r
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;! @, U8 ^  c) w9 N1 z1 d  [
  374.   std::list<CString>::iterator l;
    - ]6 {% _# |& a( F' s' t1 L
  375. # @$ U6 S* ?, i9 n0 ^
  376.   UpdateLocal.clear();
    - ?* D; L  s8 Q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    * W. ~, Q8 U5 z1 z# d
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);" P3 g/ w! \; e
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);6 j. e) E( c5 U0 U/ K6 p4 b
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);6 o4 o% a4 K. ^
  381.   if(UpdateFile3.size())
    $ p/ t- s4 m; p: p! d0 I
  382.   {
    ( Z# D' M) K- Y% q- l+ X- w" Z
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)) C. g1 V% j. s' h7 ]$ @7 q
  384.     {) _; y8 j) Z4 X) [/ y; w4 {
  385.       file2=(LPUPDATEFILE)(*i).second;
    " j7 c( Q% k! n2 w3 I2 B/ N
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())/ C7 T9 x3 s8 p- h. r
  387.       {
    : d. G: C  `, W0 f4 }3 M
  388.         file1=(LPUPDATEFILE)(*p).second;6 U: p! k5 M6 `! v' F2 D3 B& G5 j( W9 [
  389.         file1->vers=file2->vers;
    7 M. B/ }% R& E- z; o
  390.       }1 ^) o- e& z# f5 C2 E0 F
  391.       else
    3 Z2 v& H% x$ S
  392.       {( R# S. w2 h5 _! G# L9 A
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + T- Q7 g# `/ a- D8 h% [
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( p$ |; ?) v" o: J" |
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));) \: L: B4 _" i2 [
  396.       }
    ) b* r2 U, G7 P. x$ I* `
  397.     }# _  Z1 X: A3 \# L& u
  398.   }
    ' p; g$ j& ~* o6 N/ T' z
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
      f) H' }7 u, G7 S5 Y8 `
  400.   {
    ) |3 \; V& H2 b
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    8 Y& M' o# k' m( m: H
  402.     {1 A! W5 g3 t3 P! t% c  H
  403.       file2=(LPUPDATEFILE)(*i).second;- h: d! u; A: a; _6 E) s, G
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 r0 J# w1 D( ~/ H
  405.       {1 N$ b8 R, y; d; }
  406.         file1=(LPUPDATEFILE)(*p).second;
    # T% i, K* c1 }1 q" Q
  407.         if(file1->vers!=file2->vers)' b3 b, X1 E7 y# O) F: i6 F9 O
  408.         {
    + B! X1 {* }( T6 @) `6 U: c
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* B  f5 i; G9 f1 n$ `/ ?
  410.           c++;$ r, h( j% H! g  `
  411.         }
    9 O% N1 O- t/ b. h; M( L8 i# `0 C9 ~9 C
  412.       }
    # ?) V5 |0 _+ r. }" @2 d& v7 o$ y7 t
  413.       else
    , f2 o+ o0 R' Y* R+ T0 p3 S
  414.       {
    8 G: u& Q9 ~$ [8 v1 N
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 P9 C9 ~4 }- I* I" w
  416.         c++;
    7 L0 S% P( U8 |! M1 [! S4 L
  417.       }
    , `3 B4 T" D" p3 h2 s, U3 L
  418.     }0 E% x. t! o1 C4 ?
  419.   }
    , Z! U; v) i; w. d4 Q! b/ E
  420.   unlink(".\\DownLoad\\update.txt");
    4 }! O3 F$ b+ E! A3 j; z
  421.   if(UpdateLocal.size()) return TRUE;* r! W9 |' k# \3 f
  422.   else                   return FALSE;
    ! u) P( N3 H( o
  423. }
    + R( M" n, t! I5 {
  424. / d8 I- S+ O& l" \/ _4 P
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"! L8 t" K8 P3 L7 v/ M7 C
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    7 m9 {8 B4 z# A' T  c5 l$ s

  427. 0 |! z' Y. P1 R8 A; L
  428. ' G5 G4 X/ O; u& S/ G

  429. 0 S% h( s/ h( [& x0 A, u5 B3 V3 ~
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    : Z. N& N4 J# I5 X
  431. {
    8 G* O9 ]/ I6 `1 M* S3 c4 l5 {
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;/ y: S# d3 K+ }" {5 g4 H) r2 s7 f
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) ^+ u" A/ y# q$ _3 `; n
  434.   {
    % E& j9 g& ^, P/ E8 M* u: `& H& g
  435.     char szLanguage[50];
    + G) H3 N3 t# t7 }; w+ ~
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( e4 W+ q) ?! s- r/ Y- t- E9 i
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    / ^" }0 X# b2 P' A3 Y
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 H" P0 ]' }7 F0 P/ @$ |
  439.     else                                   m_iLanguage=ENGLISH;6 X, c- J, j- T
  440.     char szRegister[100];' t; h: K; I. a2 `0 T/ o* J9 l
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 l) i# M* i1 w
  442.     strRegsName=szRegister;
    ) x% W& p2 Z+ g( ]9 r. {
  443.     char szPatchURL[100];# l  c( V1 r4 K* d1 N' N
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : t) }5 G* S" L
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 ^# G2 g3 p0 r+ P  a
  446.   }6 f$ v$ `0 @0 ]; o: w$ N5 z
  447.   else
    ! K3 t  E5 |3 o* t! H
  448.   {
      L! F8 s6 c1 c7 L' J% m. m0 u
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  J1 n* S  p/ ?  P7 e
  450.     strRegsName=DEFAULT_REG_URL;: W' [6 o! ~( g# Y( f
  451.   }
    6 h- ~+ b1 W. @, }
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 _/ A9 w% o* G3 n* K7 O# q2 W# }
  453.   {! m8 w$ Q% W2 C; ~
  454.     char szIP[50];
    ' z8 c, Z, e3 B5 a
  455.     char szDIR[300];7 j7 L4 q# p9 P6 Q" w9 G
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))+ S" [, A& h, C- Q% V+ c2 w: u
  457.     {
    # A, E5 b& ^. k( p- f
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    , c: C0 Y, L. [) ^
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    3 y. Z& A, T( e3 i, D3 R( }0 Q; h
  460.       strHostName=szIP;
    - _# V2 D3 }* b1 G; b2 C! K
  461.       strHostPath.Format("/%s",szDIR);
    # |: z  |3 W! @' ^1 t0 a0 c, M
  462.     }# Z2 J: ~$ V% q
  463.     else" a  \( u4 E$ i* A
  464.     {
    : Z: B! s* Z" S3 e6 p+ ]/ L
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " f; H8 l4 @9 I  _: ?+ Y
  466.       {6 Z$ O5 g4 T& d8 c; Q
  467.         char szLanguage[50];
    1 p& I. H0 Q$ y9 a, n
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ L8 _9 d  z9 f( w
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 ^9 B" l$ ~3 E+ B" ]6 l
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - _; X5 _+ M2 D! Z
  471.         else                                   m_iLanguage=ENGLISH;
    : L9 k4 g9 B  k9 G8 g1 r2 F' ^
  472.         char szRegister[100];
    5 f; \0 G  s* h
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      L0 D. \; O, d' R2 E/ g
  474.         strRegsName=szRegister;! r) U. i- L9 s( _0 g8 u3 M
  475.         char szPatchURL[100];- C" B5 S9 e! ~
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");2 x; K7 n: u. O6 ?+ C
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ g8 h- E& {  q7 [% e
  478.       }
    , j/ L  t! Y# c
  479.       else
    + L! j- q/ ~. F. J0 r8 @7 k' J
  480.       {
    ! B* U: u; R, P* C+ U% ~4 H3 ?
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . L; W+ p9 @+ v  W
  482.         strRegsName=DEFAULT_REG_URL;2 W* o1 L: j. ^5 e
  483.       }$ D! y9 c2 r: E2 u1 N0 r
  484.     }7 k# |# G8 Q0 i, Z  O
  485.   }
    " i9 ]2 k6 c( u1 t# Z" F( [
  486.   return true;
    9 ^" t, m& g0 E) J# B- z
  487. }
    : y: g) ?; ^4 I& A, f4 ^" g

  488. 8 Z) F. p# Y9 x: R
  489. #include ".\ZLib\unzip.h"
    ) p* R- G, v/ J; B/ F
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);- |$ U1 \8 V0 f9 [, C
  491. /////////////////////////////////////////////////////////////////////////////2 K& \+ u/ Z$ V2 b
  492. // CRevAppApp initialization( o5 H! D8 e0 ~0 Q$ I

  493. * j# G- Y2 ?, U' A0 l
  494. BOOL CRevAppApp::InitInstance()
    9 w- P1 W; Y7 ?2 B$ I! c
  495. {
    * O7 I, L: m0 E5 S$ L2 d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    % @7 D% W! d/ \
  497. 3 G; S9 d  J. t9 b; ^& q
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);9 y+ g$ R5 {( V& i1 N! p  N
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))& [9 z; j9 a" @  C! @
  500.   {8 Z" U7 o5 h1 z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");9 W$ K: M9 ]+ ]& S; }
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 s, S. O% D+ s* f" _
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))! f" E. ]! I* k9 M7 u
  504.     {0 t' A' V8 |6 k& R8 H7 B
  505.       strcpy(szPath,szPathTarget);" {! C) v5 g1 s) d
  506.       SetCurrentDirectory(szPath);
    0 Y5 J1 d0 e; o1 B% ], @
  507.     }! N7 q1 @. G% @+ f
  508.   }; D5 S& A- ]; `4 E7 P/ Q7 t8 a
  509. #ifdef _DEBUG* k4 y7 d; h1 l2 ~( n' \
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " Z; x$ R" D. }1 [, c
  511. #else  S/ i$ e5 {( F
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 B/ S3 E5 g) K5 W4 d- @* P
  513. #endif$ x  W" P7 j9 W& W8 _8 q5 B) I8 ]
  514.   {) B0 ^% w$ _2 X  K7 P; E% k
  515.     char tempFileName[MAX_PATH];
    ; y9 F% U. u1 N4 q7 B; M
  516.     strcpy(tempFileName,szPathSource);
    - {- E) b9 i' P; M" |6 N' h
  517.     tempFileName[strlen(szPathSource)-12]=0;5 X; W9 o: C( R9 U. R( |
  518.     strcat(tempFileName,"\\$CSUpdate.exe");1 ~) V8 Q7 `$ a5 D, ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);/ a; I. c$ s' Z: A0 E, M7 ~# i* ^
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);* Y# o: @/ J. v) t. b' ]9 R( ^
  521.     return TRUE;- d% w. ]9 W/ a1 _- y& Q5 n. m
  522.   }
    0 \2 `0 c5 |5 L- o0 _. x- l/ q
  523.   // Nuke 0118: Delete run.exe4 _2 N7 T$ B2 ^1 j8 W# t
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );7 T1 [, P$ q4 Z' Q2 f* K6 f
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    " r' X7 ?* V7 i5 [  U
  526.   if(!ReadCfgFile("Config.ini"))6 U- t6 g' ~: D
  527.   {
    1 g$ {& h) e4 v
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ' v5 j3 r* L1 F( X3 i+ H3 T% C
  529.     return TRUE;/ H% {2 e- ]/ Q$ W* j9 T7 L
  530.   }
    + j+ I; Z/ p& N' K& X% g
  531.   HANDLE mutex;* U0 A6 f* T8 s
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    1 Y5 |  E% o0 w. t; d# Z
  533.   {
    : T- {7 M, r7 A3 y7 S3 {0 q
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)( _; O$ Z/ ]/ Z
  535.     {
    . j. {; L" B! m$ R( Q
  536.       CloseHandle(mutex);; ^1 {# R" e: K1 \
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* r; k0 }7 m' B9 k) R" v
  538.       return TRUE;
    8 ~: f7 S4 y2 n* u$ q
  539.     }& ?7 c$ v' @6 a' e
  540.   }  ( M( C' p/ F  |+ z. s
  541.   CloseHandle(mutex);0 P/ w3 Y3 y# F$ j/ L

  542. & e( G5 L2 c$ g  N8 ~
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);0 y- Q5 Y, f" |1 K

  544. . f" L' X/ ~5 r0 g* S3 [/ @# f
  545.         AfxEnableControlContainer();
    $ c4 w+ F1 G9 H1 Z

  546. % X0 \0 X, d# ~, c* h7 e% w: U
  547.   bCanUpdate=FALSE;
    / I  Z6 z3 F. P  G% |
  548.   dwStartUpSteps=1;
    : a. o% h7 t1 b5 S1 T# \
  549.   dwProgramState=AP_NOTHING;  \5 L  N! f0 J8 C& u7 R! P  v

  550. 6 x2 Y- ]& Z% G- L" u* C' |$ `& }
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    1 x2 ~4 c1 C5 J: C/ F
  552. 4 G+ {( g" t2 y6 b
  553.         // Standard initialization+ P* f) X; U0 O; J* k3 n
  554.         // If you are not using these features and wish to reduce the size
    ; [1 K$ N; s) ^4 |. z" b2 B
  555.         //  of your final executable, you should remove from the following+ s( w9 c; C+ t5 l; @! I" L6 L* f$ u8 ?
  556.         //  the specific initialization routines you do not need./ k  C! ?3 E# ^! A6 s
  557. - z8 s% z3 b- j( w6 n
  558. #ifdef _AFXDLL
    6 Q# j; x. L1 z( D' h
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    $ V% R# m" h* t# i+ U  `
  560. #else' H6 h8 G0 I" ?8 X% V8 K2 n
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    : t  F& `( j9 c9 i7 w+ d0 j
  562. #endif1 G( _6 U0 i1 X3 u' O/ g
  563. ) n- v& `5 T5 }( N9 C% v* \
  564.   dlg=new CRevAppDlg;. M( ~  l! M& o/ N  Q
  565.   dlg->Create(IDD_REVAPP_DIALOG);2 }# O+ m5 h! A7 U* H$ L: |" i7 D
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    5 R1 x: u. N* U0 r* m1 I8 }3 p
  567.   m_pMainWnd=dlg;( d, H6 S) D$ e" B6 G7 B

  568. & r; x# L( @6 m
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);/ Y6 M  R. M/ `( w2 D9 }$ S
  570. ' ?4 [! g3 c( S6 A$ R5 F
  571. //  GdiplusStartupInput gdiplusStartupInput;3 }2 |/ H3 k6 S: B
  572. //  ULONG_PTR gdiplusToken;2 p0 |5 E4 v, d7 g: N% t# i
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ; k# W9 R8 u7 F6 L1 J# e
  574. % \/ E& R( C, D( r' q
  575. //        CRevAppDlg dlg;$ K/ ?% Q/ ~" C" {& y
  576. //        int nResponse = dlg.DoModal();
    % X- e" d* [! E1 ]( u4 D
  577. //        if (nResponse == IDOK), k* h2 b, y* w5 |0 x9 g( D$ V
  578. //        {
    7 L( K# ^4 \; R& s: B7 o7 e
  579. //                // TODO: Place code here to handle when the dialog is5 M/ l0 `9 F6 `
  580. //                //  dismissed with OK$ R8 s' d/ `" [$ J) ]
  581. //        }
    " W, C* s. q3 d; [5 k
  582. //        else if (nResponse == IDCANCEL)
    ( D6 T- Y; E; v# B) N+ S# |# f5 {
  583. //        {
    + q( k6 _$ S6 q1 o$ p3 A
  584. //                // TODO: Place code here to handle when the dialog is* F- n  H9 m) H6 ~
  585. //                //  dismissed with Cancel/ d/ d# C  |) j" A* G
  586. //        }
    / R$ x% E/ t! O6 R& ~
  587. ; J5 ]+ s' x- w, P
  588.         // Since the dialog has been closed, return FALSE so that we exit the2 }* V# k! n6 {# W5 q
  589.         //  application, rather than start the application's message pump.
    4 D) X  s9 ~6 I6 D4 O$ x; o
  590.         return TRUE;, K7 I, a+ T8 q3 z
  591. }) w8 `5 y2 G. f7 t# _* G1 u5 _
  592. ( g: ~! y- Z/ L8 [1 `
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    6 z* Z$ A' T4 W5 k
  594. {! o4 p5 M9 A+ l- v- n4 f- l
  595.   int i;
    : R- N: Q1 j+ h1 x% `
  596.   char *szRet;0 c( B9 V7 H: }0 U9 z+ h7 d+ w
  597. 7 l/ h* Y2 r/ d  _% N1 Y
  598.   if(pSource) { itoken=0; sztoken=pSource; }4 B# I" a' z. y) |3 H, O
  599.   if(sztoken), t; w! p5 Q- e% V$ D- G3 _
  600.   {8 {2 s3 Z, t0 [: L4 Z0 j# l0 g5 D
  601.     szRet=&sztoken[itoken];
      L* I& `. ~4 n2 f5 U* }0 @- l; r( J! I4 e
  602.     while(sztoken[itoken])
    8 e6 \) p3 j% \, h
  603.     {  g2 S8 V: s% [) z
  604.       for(i=0;i<(int)strlen(token);i++). V/ e  C" P* v, U: z/ u6 x, C. P
  605.       {
      _) P5 \" ^7 @. G3 e# [
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' {6 y+ O* C! m! t) C) h' y; k
  607.         {
    ' k/ K0 S/ b' ~, K
  608.           sztoken[itoken++]=0;6 m9 p7 w  C5 h- Q1 S3 _
  609.           sztoken[itoken++]=0;
    + @! ^) T: y! y/ n% L* |
  610.           return szRet;
    6 m3 [1 t! K, P8 h8 X$ ?
  611.         }  W& e. b! n; K4 ?  U4 E, L
  612.       }( U' n5 F# F' ~9 R* z
  613.       itoken++;
    / ?  T) i- S, E
  614.     }3 ~  |& y) }4 U
  615.   }
    5 x4 F" ~# r' D0 p0 C2 M
  616.   return NULL;
    ' R' y3 U. z$ r
  617. }
    ) c7 b, Z8 L$ _6 D

  618. # ^+ ~# X4 ^0 I! e! F
  619. void ProcessProc(long Total,long Current). B4 y8 `3 H. p9 Y, @
  620. {$ A( e7 y3 I! T2 ^: C
  621.         MSG msg;
    - C. ~4 P- t$ b( n0 i
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);6 q9 C: y3 l% I, L- X
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    7 S' z; H( Z5 l2 {
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    5 Z( _& q* {4 i* b4 E' B
  625.         {# |5 _3 f# W  _* P& l2 d) }
  626.                 if(!GetMessage(&msg,NULL,0,0))' e" V* p7 Q+ F; ^8 N/ H2 y2 m
  627.                 {
    ) N( R# I9 q8 j- ^9 u: s. ^$ @
  628.                         return;: m, z( @: {9 \; W& V
  629.                 }
    , X: j5 L3 x2 w! ~8 }  d
  630.                 TranslateMessage(&msg);% h2 h" |! M; T3 a. h" y3 y: `6 T
  631.                 DispatchMessage(&msg);
    1 R7 P3 O% u: y" C. r$ D" `& j# M
  632.         }       
    # t; v/ P0 g! n
  633. }
    9 J0 O! }4 g% t: M- ]* O  {

  634. ( {; B" B9 M4 U" r$ Y" Y+ X
  635. BOOL bFirstChar=TRUE;
    9 @6 k2 n* o7 f4 M$ h) ^7 ?

  636. 3 G/ }, c/ ~& C& I; B
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    6 V( }% Q2 B3 W- f9 z9 e) h( S
  638. {: m  g* e4 f, g' G
  639.         // TODO: Add your specialized code here and/or call the base class
    % k: D9 x/ p3 e. {' [+ w. E6 T
  640.   switch(dwProgramState)
    . t" w+ q. I, x1 P. r
  641.   {
    % y7 i5 ?3 Q8 ~# U- B1 T
  642.   case AP_NOTHING:0 n: h! p1 e! Y' o7 k- I( x' c
  643.     switch(dwStartUpSteps)6 g$ B0 y# h% J. g# ]* G" W. H
  644.     {/ w( V9 p8 c8 I2 t
  645.     case 1:! u* Y+ a  f; s+ G- w* U: A
  646.       {  g1 v% ^$ `9 {3 ~. A
  647.         int i;
    5 I" F0 }2 x, U5 n  M
  648.         CDC *pCDC=dlg->GetDC();
    / l& A3 B8 j6 d! u& k! G" S" K
  649.         HDC hdcwnd=pCDC->m_hDC;1 }' J, |' B! c  h. F1 }5 s9 y( N
  650. //        Graphics graphics(hdcwnd);* K& }1 y. a2 i( S" [' Y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    2 b* H  z( J# q3 M; ~5 A: H
  652. //        INT iWidth=bitmap.GetWidth();! S+ K' }8 V. p1 ^- {
  653. //        INT iHeight=bitmap.GetHeight();' M# V9 R% I+ C$ z0 G* g- J, Q
  654. //        Color color,colorTemp;3 {: R) C0 H- t" y* X% z1 G
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& ^$ u3 {8 X; L' i6 Y5 H4 G4 I
  656. //        {
    , h1 n/ q$ B2 V, I5 [- v. a
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    $ n3 u, C) j; K; A* Y
  658. //          {
      }2 M# g% {8 k& M% M( z* f
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; [) a* P. c3 [# m
  660. //            colorTemp.SetValue(color.MakeARGB(: k) f) j0 e, I0 h% y0 U
  661. //              (BYTE)(255*iColumn/iWidth),2 {3 v+ e& s8 P/ q
  662. //              color.GetRed(),
    1 Q- f3 n2 A# M* W
  663. //              color.GetGreen(),
    ( O  u. m2 V% {7 k5 ?
  664. //              color.GetBlue()));4 u  Z1 K7 G4 D# t" x  `6 j
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    / i3 {0 K+ R$ k9 L5 q7 b
  666. //          }  _& F) w) _" j; S# j" g3 r, B% l4 C
  667. //        }
    % |  D  d+ o! _/ o' ?) w' f/ M
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);% @( F: q1 ?! Q$ @8 S6 `
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");  ]0 N" W% c" r  q! I  x
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");) `8 E7 E8 v) h$ _
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % ]5 x' C- P3 U& q0 X2 z6 }
  672.         for(i=0;i<240;i+=8)* h' l: ~$ C1 J) J6 ^& g+ X) k
  673.         {" r  r: p" J* I% g8 P
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " K( e- v+ m7 V& _1 t
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; N7 I: u0 K' q; O! f  C6 \6 C
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' M: X* d9 p- @! c# S
  677.           Sleep(33);
    + o& Q+ o5 e: d
  678.         }
    % y" _7 a, `3 R* p; |. i
  679.         Sleep(1000);6 G# j6 q5 m* R  f( k
  680.         for(i=240;i>0;i-=8), [  }# Q3 C4 ?1 z4 f5 ?4 @
  681.         {% [3 E' M0 O& Y8 @7 o
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! o) E( T9 U3 g% Q7 z7 ]% f6 N
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; c) o  S. A) I7 T
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 q8 P) n* j+ L0 l% G3 V
  685.           Sleep(33);6 ~5 H9 ^$ o; _
  686.         }
    0 B3 K, V5 g+ R& T; i* u( r
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( F( o! L. [2 t! ?  x
  688.         dlg->ReleaseDC(pCDC);# i: J7 Y' |+ f! e; F% U! |: k
  689.         DeleteDC(hdctar);# r: @  D: D! t
  690.         DeleteDC(hdcsrc);
    . a. o+ \3 j5 Q
  691.         DeleteDC(hdcorg);' c5 k* W! i1 y9 W* l5 k, g& A
  692.       }  _+ `$ b3 X1 X/ y( g: e. v
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    $ f  l- P$ L- f  Q: E( G
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    3 w" T+ t( W5 W1 L* V  F
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");. y% _9 [# S  t+ G. B( b' N7 k* g
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");% `; D& ]4 O/ F! U& e8 n" U
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  W) @3 G- H8 F) v; C/ l
  698.       if(!Dn.Connected())- C8 w4 k2 o% ?& _% m
  699.       {# ~6 _% B& |' ]( P% O8 F
  700.         dwTotalFiles=1;* g0 V, D5 L+ i' j9 l
  701.         dwDownLoaded=0;
    8 V  V  b4 Q, L& h' K2 P! |5 X  D
  702.         bSilentStep=TRUE;
    ) i* k& l3 X" a; b. B
  703.         bCompressed=FALSE;- l4 ?4 a0 a. m" E' R' o7 ]; i
  704.         strExtLocal.Empty();
    8 z8 K3 F: y$ F* e
  705.         strFullName="readme.txt";6 `6 k" C* ^6 ?/ n
  706.         dwProgramState=AP_CONNECT;
    ( g& E# c  l9 |! W: O) }
  707.       }2 s* Z5 ~) {- |& ^6 M
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();( L3 g1 n1 k* i( x2 ?0 c* r# x" A
  709.       dwStartUpSteps=2;' P, l: K$ Q9 Q; E# _% X; o
  710.       break;* j5 }2 J) X* p" Z: A8 t
  711.     case 2:1 t% _6 U1 R+ H% n: x
  712.       {) E, `% ~7 \% o
  713.         int iEOF;+ Y9 A( R$ `% K
  714.         FILE *fp;
    ! N/ L) q6 a  ]( N, L
  715.         char szString[512];
    4 R% v2 q" s0 X
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    * O3 N' x: V  I% b  f* O
  717.         if(fp)
    7 r4 k. |# C; k) y
  718.         {% W" Q! o) ~) C  e% m( s
  719.           do
    5 F, \8 N. C% r2 V/ d
  720.           {
      s+ E* W6 R/ C3 G, r5 [
  721.             iEOF=fscanf(fp,"%s",szString);
    - U3 Q! n: @/ T) h' e5 n4 u
  722.             if(strlen(szString))
    4 v9 Z' K7 M% z0 B
  723.             {; }; s+ l( x$ E
  724.               if(bFirstChar)! m7 M! \( a$ D
  725.               {% H! |2 l3 `  y& A) L4 ?/ z6 t
  726.                 bFirstChar=FALSE;$ c8 d* l0 T# ]- R7 {
  727.                 bConnectIsBig5=FALSE;8 h2 ^, s7 D* b8 Y4 K
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;5 U; \3 p$ o3 P+ `  b3 R) N* e
  729.               }
    ; t4 S9 ]6 n$ A1 ?  n
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    # Q7 r* F7 p- j$ e1 {! Q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));2 l% N9 t! `6 j& q+ C
  732.               dlg->m_ListText.AddString(szString);
      X, D5 @% b/ {) F
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 l0 M5 r' y2 J
  734.               *szString=0;
    $ B9 g0 N# n$ D4 r4 L4 ]
  735.             }5 h4 w5 _9 A5 G. `* B6 `1 Y
  736.           } while(iEOF!=EOF);
    5 G+ W" }! `5 k5 i& r+ `6 _) _
  737.           fclose(fp);
      u1 u/ C: Z+ T  i: u  M$ O
  738.           unlink(".\\DownLoad\\readme.txt");
    * K8 l8 O, z" P$ z" O0 `0 g
  739.           dwStartUpSteps=3;& H# T& l6 l( D! O* L! R& m9 M
  740.         }- K8 U0 u7 ?4 g6 ^
  741.       }7 H' Z2 Q8 w! |4 t9 V
  742.       break;, N5 M, |6 f# X9 [6 ]5 Z% O( I) B
  743.     case 3:
    : Q- F; u' H( c" ~. I+ g5 p$ _
  744.       if(!Dn.Connected())" y2 T9 d0 c$ W+ Y
  745.       {
    8 t5 f5 g, `2 A! u0 g) J
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    6 d" U2 ?6 C# _% m) a$ U
  747.         dwTotalFiles=1;% N$ ?+ A4 R+ A
  748.         dwDownLoaded=0;
    4 r3 |) O4 }7 s. m) B
  749.         bSilentStep=TRUE;8 S! I5 G6 ^5 V  r% ]9 M: T
  750.         bCompressed=FALSE;
    % W% Q9 F3 Q( J! O! p! T
  751.         strExtLocal.Empty();
    ) U; \0 Q; Q7 u$ E4 j- z( K- A
  752.         strFullName="checkversion.txt";
      e& ]" ~9 b/ z( S3 l; q; X9 X$ i+ J
  753.         dwProgramState=AP_CONNECT;6 O1 M# ?5 g% @0 J2 J' Z8 C- i. x
  754.       }
    : ]. B& y: @6 ~' ~. J2 ]# t
  755.       dwStartUpSteps=4;
    ! O# _9 z+ V7 S* O
  756.       break;+ M8 N4 f8 r) e% F" s
  757.     case 4:) F) @) O1 u6 Q; Z9 _+ y$ O
  758.       {+ a+ w  x1 R6 f
  759.         FILE *fp;
    & R( e3 r) ?9 C2 W8 X+ o; J
  760.         char szString1[128];
    $ V* R9 B/ c$ B
  761.         char szString2[128];3 q6 [' I1 h' F7 L; a3 M
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    / j  E8 D2 `0 E- v6 k
  763.         if(fp)
    & s' H+ S" p. A2 |
  764.         {' d, }  \  Z2 j) ?4 Z5 z8 b) u  K
  765.           fscanf(fp,"%s",szString1);, g3 u4 z9 v5 b. t! `8 x
  766.           fclose(fp);/ _% l2 D$ K" s1 T/ A. T, X: l; P
  767.           fCheckVersion=atof(szString1);' i8 b% [0 s& `) f
  768.           fp=fopen(".\\checkversion.dat","r");, {  A2 F6 ^! P5 k9 \: ]: W
  769.           if(fp)! x9 A/ }" g( I: N/ t8 E& F# e
  770.           {. J: h4 @% R/ n5 {+ U1 n" X
  771.             fscanf(fp,"%s",szString2);: p, f8 ^/ ?8 W0 {+ X7 D5 d
  772.             fclose(fp);) i2 y/ p- E. w3 U( B% W1 _0 q
  773.             if(atof(szString1)!=atof(szString2))8 Y* _9 c  a1 R- s
  774.             {9 }5 R2 h- o/ @! [" m
  775.               if(!Dn.Connected())5 L+ C6 q9 t- |$ X
  776.               {
    0 ^( y% b- s2 U% }6 R+ h
  777.                 bFirstUpdate=TRUE;, `7 N( K9 Z! N, n4 O
  778.                 dwTotalFiles=1;) s$ ^8 @! @0 f
  779.                 dwDownLoaded=0;
    8 }: Q& y9 S! j- v4 @/ i: d
  780.                 bSilentStep=FALSE;1 u, |$ x% g- C4 w
  781.                 bCompressed=TRUE;0 G8 i% q, T- K8 [$ A
  782.                 strExtLocal=".\\DownLoad\";% T( _# e; W" A, }' _
  783.                 strFullName="update.txt";
    ; @8 ~6 O% X/ p- q
  784.                 dwProgramState=AP_CONNECT;- d5 d$ {* s( s
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ; D; D' v- M* A) S' z8 i& P6 P
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / w4 o8 n  h  ~0 r5 o4 E+ q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");( I2 d0 |* D# R( b0 l

  788. 9 C$ v4 G/ \+ k+ L) T
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  z& P  M3 X% ^. @/ h
  790.                 unlink(".\\DownLoad\\checkversion.txt");# l: w; Q! v" d9 V1 S7 b
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    7 A' D: e. v8 N8 v
  792.                 {- ]- H" \0 y, B; [! q. @1 w0 H
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");7 x0 D5 [+ G, H; J- ~- T; }" v! W
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");0 A, Q, M" r# V9 i
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    : d$ c2 m3 @" X
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 ?1 f0 V, b6 N
  797. 6 w3 ~1 L& ~- i9 h0 g1 v  D/ y) p
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 w% Y, p0 {8 N# j
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' {- L' k; L+ i& R, I3 I
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");* ~4 T: K8 I  r5 O! }
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) [; Z, Z, h6 E  J
  802.                 }
    ( g* J% N' a5 e: F
  803.                 dwStartUpSteps=5;
    6 @8 ~' }/ Y5 y0 z1 w0 ~
  804.               }
    4 F8 T! H/ T* q: e  Q* k0 d
  805.             }
    ; j- E; K/ ^+ t5 W6 J1 x
  806.             else
    ( m& a+ P6 X- L1 q5 Z1 U
  807.             {* z& b& |# W) D! p2 r+ ]! G
  808.               unlink(".\\DownLoad\\checkversion.txt");: t! }8 j5 U- U/ x1 f
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 ?4 F1 x( k) U8 P/ E) D; G
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 E/ q0 K. m' S# D* |) E" F
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");1 q0 r! V2 l" K4 F% @+ w7 R9 V

  812. 7 N0 y/ Y) D6 r6 W% i
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( V- M9 W+ x( B
  814.               dwStartUpSteps=99;0 }( ~) I$ P' [
  815.               bFinishUpdated=TRUE;+ N, q; m" J" T1 J' u4 n: i
  816.               bCanUpdate=TRUE;4 r5 x# R8 E: M( _
  817.             }
    1 ~1 `9 ~# y$ U: m9 r/ B
  818.           }' N& k1 ?2 M- t! V  P& x& l
  819.           else
    / W+ X( O" y6 |3 D
  820.           {
    6 b8 |  m* @: B6 Y( D
  821.             if(!Dn.Connected())
    % }, Q  p4 ~% ]  N7 F9 n, G) Y
  822.             {, V" S9 g6 n  K' E, k
  823.               bFirstUpdate=TRUE;4 q' u9 F' H- j7 }8 i* a2 e! S
  824.               dwTotalFiles=1;9 g2 ?# K1 N* i# E* G/ h3 G. p" J
  825.               dwDownLoaded=0;3 m5 K# O2 o2 c2 v4 G6 U
  826.               bSilentStep=FALSE;
    9 H  |; Z5 y9 l& S4 K- ?; v
  827.               bCompressed=TRUE;
    2 [. `* F& n2 |
  828.               strExtLocal=".\\DownLoad\";
    9 F5 n3 m8 J' _, G; ~
  829.               strFullName="update.txt";
    / C8 D1 u. D, a+ v
  830.               dwProgramState=AP_CONNECT;) u, L# D  g& \% a" x1 u6 D
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . `+ q  [2 \6 |: E, d( K5 [! e! n
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# A' X# D, J" I6 p- J
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 B% \2 U( S0 r9 _
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! R9 r+ N# j, e* g
  835.               unlink(".\\DownLoad\\checkversion.txt");
    0 |% T+ c  i) j/ S! ~( V- ~! P
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    # l. V" c1 \, X$ D7 o. V
  837.               {+ n- m: o: u# o4 t. J
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    % g, p/ }) a( [  L) ^
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");8 Z2 q$ M, u! T% V, h- b( M
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");) \6 H1 V1 E6 M- g. b9 @/ H
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 E* H8 N1 q- H% S
  842.                   }1 ]4 w( }' G. _! M% V5 f9 r
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    8 r5 F8 G* _9 b1 H- C
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & r- U, w& z( l+ k, u/ p0 f6 P
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");* s$ P" C* N6 {# e
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* @- O; ^( \/ G! \, }
  847.               }
    # j$ M( U3 ~& M9 T! t
  848.               dwStartUpSteps=5;
    5 C1 G. j" I* B
  849.             }" `% R, z( U+ C+ F
  850.           }
    9 H6 A. R6 I- X* \, w
  851.         }0 M* f! l( I/ `4 }, Y7 ?
  852.         else
    9 B# s% z# g8 M( A( w
  853.         {8 C. z, S! I) Q/ B" W% G1 `' _
  854.           dwStartUpSteps=3;
    & @3 {- A/ @4 G- }) I3 r
  855.         }0 ^& F) h1 Q# }7 ]& a5 \# ~
  856.       }- D' s: g3 F1 ~3 u2 n) [/ a( F7 N
  857.       break;
    ; F% L. k8 t! Y9 e7 ^1 l6 b2 y
  858.     case 5:
    , |* T7 f$ J9 @) l' y
  859.       {2 i3 M* g) i1 J2 Q% e- T7 S
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    . i  x4 a$ F3 Y& b6 F
  861.         {
    9 k/ h1 H# b% ?; b$ p
  862.           int opt_overwrite=1;4 C  ~7 z' w$ s& b( v( A! x3 l
  863.           int opt_do_extract_withoutpath=0;) c2 _) b, F  L! e- M) t
  864.           unzFile uf=NULL;5 C# ~7 i; o# y5 r$ }2 T% i
  865. + `- r3 W2 ^$ J# e" s
  866.           uf=unzOpen("Wsa.zip");% c% c- a8 g" H7 K, g+ R! o
  867.           if(uf)
    # W; B8 p& ?- e. X
  868.           {
    2 d* w8 l8 L4 @) D8 V- k3 l  a
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    4 u) ^& r9 }8 U5 F
  870.             unzClose(uf);
      L# }+ q! I8 d; ?+ B  `. U/ B
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    0 t6 O6 V( e& f, u! F6 H: {5 y! [& U
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    1 ?+ I2 I6 Y0 n% m) S. d$ T
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    4 F5 e! g( S. Z. g3 k
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , @1 ]9 e& d$ ^
  875.           }
    $ s" m1 ?/ t; v4 N
  876.           DeleteFile("Wsa.zip" );
    + N9 r4 l  T" ?
  877.         }
    ' F  m9 C/ T/ e" @" Q1 U3 x; ^

  878. ; T8 [. w, z/ v- v, l# b1 Z8 w( d
  879.         if(CheckLocalVersion())
    $ x$ `% n6 s3 v/ k
  880.         {
    ) m, F& f) [- s8 ], E8 |8 O
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");; B* n0 J, L' s; q
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");# L; _8 R( b+ D! I7 b& T' G
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");8 t. [8 ]! m1 N1 u
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 p% `" z- h1 `2 k
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);& k. L2 o3 _- t/ e2 f! v# u) F
  886.           dwStartUpSteps=99;# q& ?' e% ^6 W0 t  O
  887.         }9 |9 x, ^+ c" q9 _& K; z; G
  888.         else
    + F+ B0 T9 ]& z+ _4 ?( }) }& K, r- _# O
  889.         {4 Y; G, `: s# t( F9 L
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- D# d/ ]6 M$ a& x9 p) f
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 {2 k+ w8 T) b5 I; Y+ s
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    & Y" M. ]2 `% o

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-12 22:54

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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