找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
/ _7 V$ y* Z- G' P" \
  1. / RevApp.cpp : Defines the class behaviors for the application.# N% N2 _4 \4 s4 ]. z
  2. //* A! C8 U3 ^( o( x
  3. ) I% i4 e% g* ^% x, R
  4. #include "stdafx.h"# w6 }( ?* T7 V4 Q5 y3 q. ~% {

  5. # [7 y( X' d3 p
  6. //#define UNICODE
    # e  w5 Q4 [" x
  7. //#include <gdiplus.h>
    9 c$ G+ g: ], U* r! C  N3 {
  8. //using namespace Gdiplus;1 b# j4 L/ J6 z2 p
  9. 4 i* T  o% f( K3 u+ K
  10. #include "RevApp.h": T) c! y9 c7 }6 y" G( U
  11. #include "RevAppDlg.h"
    + x  [$ Y, }- h6 W8 i0 X+ l; i

  12. + F+ o" h6 i1 j2 G7 Z. Y* m, C' {
  13. #pragma warning(disable:4786)5 J# Q. {  j' D* Y" l" }
  14. #include <map>$ z( X* F- W! n0 @
  15. #include <list>* k1 W! m% N7 w* V: o
  16. #include <direct.h>! z4 t  {  i2 s/ ^

  17. 7 k2 }8 z% S1 w
  18. #ifdef _DEBUG
    8 M- k$ c+ J0 T
  19. #define new DEBUG_NEW
    / b0 M9 Z6 n5 m( Y! K+ D5 L
  20. #undef THIS_FILE
    5 w9 W; ~9 P  }1 U
  21. static char THIS_FILE[] = __FILE__;
    2 w# P& L- y& t4 E  {7 R
  22. #endif; Q  P) X# s8 P' e1 P' K
  23. #include "SkinResDef.h"
    ! A6 ]* z* a  X. y: l2 P
  24. #include "ChangeBG.h"
    7 f# ~; h9 p% n' O
  25. #include "AFXINET.H". v! e# m( j( a2 |3 t2 D: L. {

  26. " [5 t" |% V) _0 K
  27. #define TRADITIONAL_CHINESE 0
    , m1 {* H3 a1 }% v* ?3 w# F
  28. #define SIMPLIFY_CHINESE 1
    & k/ J: D/ w5 t: r2 y
  29. #define ENGLISH 2
    , l1 T6 ^' S  m: E5 m
  30. int m_iLanguage = ENGLISH;0 C! m2 I, V  [. ~6 B
  31. /////////////////////////////////////////////////////////////////////////////
    , ]7 D5 x1 E8 t0 V8 S9 K3 c- K
  32. // CRevAppApp* j* Z: @4 M4 `; g

  33. 4 T: {' \- W4 C' P
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)$ j7 i; B; i' i; j% V" c3 Z6 Y
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ; G! n0 K+ L" V2 O
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.; j- G+ g5 R: R; P+ K1 Y' p6 h# N
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    - o" i5 A- Q+ R2 e  M! v
  38.         //}}AFX_MSG
    ! R0 r3 i5 w& h. r! N: b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ; c! c( I0 q. Z: @
  40. END_MESSAGE_MAP(); b. P/ S. X  J2 ~  E1 C; Q' K  U. {

  41. # r" N& @9 _, }7 F0 l9 P2 F( }
  42. /////////////////////////////////////////////////////////////////////////////
    ' r! X0 m: q& \, ]' v  q" U# O
  43. // CRevAppApp construction
    * w& [) ]$ Q9 {9 K: z

  44. # Z) V0 i% @2 [& c4 ?$ d
  45. CRevAppApp::CRevAppApp()* R+ e6 r# h( T) f  f
  46. {
    ! n8 n% C: h  j# \: E& ?% O
  47.         // TODO: add construction code here,0 n! a2 o( t5 ~
  48.         // Place all significant initialization in InitInstance4 h$ K0 l3 V- Y. K* F8 B7 [
  49.   bDisplayIsBig5=FALSE;! h4 }4 v4 F7 p
  50.   bRestartUpdater=FALSE;+ J- y7 {5 N6 n0 o
  51.   bFinishUpdated=FALSE;/ l6 O: j& H+ k1 T' C6 x3 D7 O
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;% Q) e& e) {* H8 E. b
  53.   InitChangeDataBig52GBKS();
    + c/ \3 d  e" |# l. V3 S1 W  l, \
  54.   InitChangeDataGBKS2Big5();
    ' S: `9 X6 X, I# Z- ^3 z
  55.         //
    7 N: E5 X. R  d9 m7 Z
  56.         bClickRunExe = FALSE;
    6 q' _* Q* U+ T- N; e% M' I! s# v) b
  57.         //
      W( e% A( B& a* `% g
  58. }
    ( H0 \$ l9 U: p
  59. 0 {1 z0 }$ Q# i9 A
  60. CRevAppApp::~CRevAppApp()9 a8 ?# T6 O- ?+ W1 N( D
  61. {
    % s3 K& C: ~9 h# j4 Q
  62.         // TODO: add construction code here,
    % }& a! i2 L% \$ d6 T5 _8 I" [& N
  63.         // Place all significant initialization in InitInstance) ^( Z& F- e, l1 c  U! V
  64.   EndChangeData();
    + Z) A$ O2 s) D
  65. }: k, x* e8 a0 @' s2 p9 x

  66. * ~! `* ^2 o/ q8 }# [: m3 ?
  67. /////////////////////////////////////////////////////////////////////////////
    1 L, _1 Y, R7 `' x7 ?* @6 N& A
  68. // The one and only CRevAppApp object- o( V2 o# o( O9 u

  69. 8 Z7 N0 u2 W+ |; G% g$ d5 k% M
  70. CRevAppApp theApp;' g) d8 D& \+ n% b1 G. l* t
  71. : X; z0 W" m' {6 c/ Z  q, E
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    8 y; A3 m& Y0 V- F
  73. {8 Z# B; l% a4 b" n
  74.   int iEOF=0;5 _" `% {5 m. Q4 \% [" i$ v5 {# s4 O1 o: V
  75.   char szTempName[MAX_PATH];
    - @1 V+ ~( ]) d( e5 {5 w  X
  76.   *szFileName=0;1 L( C! p5 S9 }$ ]4 H6 q
  77.   iEOF=fscanf(fp,"%s",szTempName);' y  I8 ]. C% `. H7 J
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')6 x9 p* P* J9 b- i8 _4 b$ a
  79.   {
    % ^! g9 Z3 [1 ^& S% d" P4 P1 ]9 L
  80.     strcpy(szFileName,&szTempName[1]);2 {2 i7 I4 y( x6 g8 b0 J# d
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)  ?) u% F. q& O. s/ c6 D* w
  82.     {- \6 C2 g3 t' u3 \+ j9 m7 z
  83.       iEOF=fscanf(fp,"%s",szTempName);
    5 i7 s) p+ ^0 |4 Q6 n
  84.       strcat(szFileName," ");
    + l. j# c/ p& _0 E5 `+ R
  85.       strcat(szFileName,szTempName);" j  ~& d4 n' @/ }+ a7 S2 H9 A5 a8 l
  86.     }. v4 q. T* t- q$ S* o
  87.     if(strlen(szFileName)>=1)9 i, Z( E$ d7 B9 g2 q! G' D% T& A/ r# k
  88.     {
    # K( T- U% B9 E' d
  89.       szFileName[strlen(szFileName)-1]=0;
    " B$ b) [/ G. F# R5 [: l1 O/ C
  90.     }7 G- @1 X; L* Z( A1 y4 a* o% `3 v
  91.   }- Q/ Q3 ~, m& x" H2 z
  92.   return szFileName;! {, s" ^' I' U
  93. }' p" a5 H  S* m# O

  94. . U( D9 W+ J6 I1 j: b
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)# E% p' f4 W  y. e
  96. {- v/ }' r( C' E4 |. K# o, ^
  97.   FILE *fp;6 ~( x- {* Z9 H! Z* c
  98.   char *key=NULL;8 \( U. c) m' Y
  99.   char version[MAX_PATH];, ?" b8 Y& L  `; c# \0 f' K
  100.   LPUPDATEFILE file,olds;( l$ d9 L% d5 I% v
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! {% b& {. P5 Z' R& g

  102. 0 \1 L' l* q' ^6 ], f! `. s$ Z! a
  103.   UpdateList.clear();
    0 ?3 }( \! |9 b4 w) }  ~1 o
  104.   UpdateFile.clear();* X% n" O$ q% F, [) F
  105.   if(GetFileAttributes(filename)==-1) return false;8 b3 U4 S2 b- c) S0 A& N+ ?" O
  106.   if(!(fp=fopen(filename,"r"))) return false;
    + c* G: o  ?* }3 {
  107.   fscanf(fp,"%s",version);
    9 T. O$ o; c8 U: c5 B$ G1 w
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }$ ~; G! w! J% M- t
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ( @0 n. e" J5 P2 }$ f9 K
  110.   {
    ) z" v& ~( R1 L* Z2 L2 s
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : x; U8 M/ G$ D* g: `; t
  112.     fscanf(fp,"%s",file->path);
    2 p% C% s, b$ A
  113.     ReadFileNames(fp,file->file);+ o9 I9 H" E  o. J2 e' G6 I( W% ], y
  114.     strcpy(file->full,".");
    6 y+ y2 R6 T, F- v% t, n
  115.     strcat(file->full,file->path);
    & c0 w. ^  [8 ~! E3 [( h
  116.     strcat(file->full,file->file);
    * O8 W0 E; c0 F! n2 G3 |
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    % g. }9 u7 D. L* m+ |
  118.     {$ I. b- c( [/ x" C1 z8 b
  119.       file->vers=(float)atof(version);
    # [$ h; @& d' G4 S/ M
  120.       UpdateList.push_back(file->full);
    0 ?- ~! n0 o+ B8 X' w% [
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));/ I9 ~# M2 H" t, |6 x; M
  122.     }/ K3 c- m% t- O  N' w8 O4 D
  123.     else5 l" {, e. ~6 Y5 F0 r
  124.     {5 c, y5 ?" {9 L; P6 I2 h
  125.       olds=(*p).second;5 P4 I( a" j, i4 |
  126.       if(olds->vers<(float)atof(version))' j# ~1 n* {9 P3 z( ?7 L3 F+ ~9 I
  127.       {4 L7 D* C" B1 I) d5 L' q" S
  128.         olds->vers=(float)atof(version);$ J7 l, E  i+ a0 w
  129.       }
      R* ~* V# j- P! n, Z
  130.       free(file);
    " z) R, f0 [* ?5 Z3 M: h6 ?
  131.     }* _) [% R7 [5 h, y
  132.   }* A1 u6 W) t) z3 w
  133.   fclose(fp);+ b( _! ?. q: E+ ?8 \% q0 y$ w- c
  134.   return true;
    , H! T* i3 ]. m8 U  p& g( ^
  135. }
    . v2 x' ]8 y2 Y+ J

  136. % |& c( S9 Q( f) h, z; E
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    0 _5 _& _9 e( t2 H5 [
  138. {
    & \2 u9 J  ]1 k: ^$ j3 N# g+ |: Q
  139.   TCHAR  szFull[MAX_PATH];
    7 h. m0 K; X' O% n1 r
  140.   TCHAR *token,*inter;7 ]7 |5 W/ f5 ]$ I! M
  141.   *szPath=0;( {, a0 [2 v1 x! t$ |
  142.   strcpy(szFull,szFullPath);4 L6 }9 h/ {! L" d6 i) H# ^( K
  143.   token=strtok(szFull,"\\/");1 ~4 X# j0 W6 X+ b# Y3 L& A% \$ x
  144.   inter=token;& y1 z7 ]7 v! e6 U  W
  145.   while(token=strtok(NULL,"\\/"))
    + m% I1 b. l2 {
  146.   {
    ( |& y  a* y  V& _4 q
  147.     strcat(szPath,inter);- v2 {( l# m; x/ n$ \2 m6 l9 l
  148.     strcat(szPath,"\");9 d( W; I4 g1 N
  149.     inter=token;' S( r% k# O* j9 d: G2 G
  150.   }! ~5 k& n) K' ^+ L0 p
  151.   return strlen(szPath);" z* u- L3 {- [0 G
  152. }( x8 `1 k5 n8 |
  153. 4 ]: ^0 e' M# o
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' F$ I; u& @( f/ c, s% B3 }, U
  155. {
    2 ^& d* \2 g, R$ k0 @
  156.   DWORD attrib=GetFileAttributes(Target);6 D0 p' f* d) z* w' }- g
  157.   if(attrib!=-1)( J+ ]  [1 Y5 B) K8 W$ `
  158.   {
    ) w2 K1 [( _' {/ Q' l! \, O5 R
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    " e+ Q1 e* j, |4 f; g' U
  160.     {
    ! E! Y( T  w: b& ]# G4 T
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ( I/ Z( }" x/ A* Y* W$ I# O
  162.       SetFileAttributes(Target,attrib);4 @+ U6 u  H, y6 q8 Z$ A$ {3 [7 b
  163.     }' d0 G* M, O2 u4 g) ]* D# w8 E
  164.   }9 C0 h+ U: B7 N1 B( W
  165.   CopyFile(Source,Target,Erase);
    ; b; d2 ]2 T' [, ]
  166. }# j3 V4 Q+ @% M( U1 Z$ H8 g
  167. 4 [) N6 l* s# u+ \! ?: K) h! ]
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
      I+ {7 s! B) W) P; V5 d' P+ f
  169. {
    / f0 y6 @  v$ P+ F7 J( Y
  170.      FILE *fp;3 B# r/ K) N+ M9 b" h1 E
  171.      char  szBuffer[8192];+ A# r+ W/ ~# Z
  172.   va_list  argptr;: c0 S/ F+ M7 v5 y7 u& M+ Q& P
  173. $ Z% [, s$ x6 n. }. c, X5 z' j- c. t5 c
  174.         va_start(argptr,message);! @9 E: h0 R  E6 ^; y3 }! F
  175.         vsprintf(szBuffer,message,argptr);9 O5 i. w5 P4 L6 P) T7 _
  176.         va_end(argptr);
    2 ^4 A1 M3 [- W% S* w6 t
  177.   fp=fopen(FileName,"a");
    - C6 F, c5 F* {$ V
  178.   if(fp)
    ' {% Q5 D* W! L' U5 W
  179.   {% t' E( F% f4 v* {8 V
  180.     fprintf(fp,szBuffer);) q9 k$ V# _5 M: X( m
  181.     fclose(fp);
    $ E; O& c7 u7 N2 y1 D( ~
  182.           _flushall();
    8 P: g- u4 ?+ b& M( X: k7 _
  183.   }  E( ]* U# L4 \/ f8 F
  184. }0 H* @$ D- h7 a9 ~' K3 b: R; |; t
  185. * [' W# d& [- q; W4 N7 h
  186. BOOL CRevAppApp::Fclearf(char *FileName)# O9 y4 ^& E" R
  187. {
    5 c$ _- V" D: k2 ~& f
  188.      FILE *fp;
      I( f5 U( v# P- t, T* H" }
  189.     DWORD  attrib;( ]$ s0 H$ }( J0 s' e
  190.   attrib=GetFileAttributes(FileName);9 H( N7 i. Y9 _5 {% d
  191.   if(attrib!=-1)4 V2 I' h; z; C4 r" W: x
  192.   {7 A6 l5 e2 R4 g; V* s5 f- N
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);& I# F/ k1 \1 P, N
  194.     if(!SetFileAttributes(FileName,attrib))
    ( `) f: x$ q1 R8 _: }+ y1 T& j
  195.     {
    0 K  j! `2 O# A1 M; m4 B# ]
  196.       return FALSE;
    ! _* q8 p& a  t% z' F/ y/ B3 V
  197.     }
    % Z2 ]: f; B: q3 s
  198.   }
    ' h" w6 E( |, `! A3 b' n
  199.   fp=fopen(FileName,"wb");6 }7 z$ z, [" E5 X; F
  200.   if(fp)
    0 j2 g, s& s  l7 C( ?8 G+ J0 a: O
  201.   {
    ' Z! B: y$ j, E" T7 N# ]
  202.     fclose(fp);
    ( z4 S' d' R: h, a5 t" t. C
  203.   }
    0 ~: h8 G: W1 S: ^1 Z* W
  204.   return TRUE;: E: k, ]7 X: W8 H4 D
  205. }) U: n" @* x% D

  206. % D. F3 s/ |+ q
  207. BOOL CRevAppApp::UpdateLocalVersion(void)" B: W! j. f8 \
  208. {
    % X& ?- d( a8 U9 A3 Q
  209.   char filename[MAX_PATH];
    ; |$ _: V  {7 R. s1 z& R
  210.   LPUPDATEFILE file,olds;
    ) v2 ^* x0 T- z9 V
  211.   std::map<int,CString>::iterator i;' Z- |8 x. c% N. \
  212.   std::map<CString,LPUPDATEFILE>::iterator p;9 O2 [+ f  r% \
  213.   std::list<CString>::iterator l;  z- n$ B% K. Q- p; b9 Y- u3 g
  214. ; g% o, f& {0 l4 p* I
  215.   if(bFirstUpdate)$ b; J. b) {' l+ h) C) i
  216.   {
    & U( r+ T7 L) G0 U' k
  217.     dwCurrFile=0;
      Q$ A0 A2 R6 U. w1 F
  218.     bFirstUpdate=FALSE;
    2 \4 E$ A# ]2 b4 R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- I8 V. @6 ?8 |' T
  220.     {9 p1 f- E$ ?: r$ [: S+ \' Y
  221.       dwTotalFiles=UpdateLocal.size();: D- M$ x, g2 X
  222.       dwDownLoaded=0;
    % k7 e2 j' W0 n9 n) F+ R/ B( \) x& H4 T
  223.       bSilentStep=FALSE;
    9 W& P: \3 T' m/ L+ b/ @. v, _7 y, ^
  224.       bCompressed=TRUE;
    ( E! z1 s  G& \9 @
  225.       strExtLocal.Empty();
    ' b. `' F0 u* Q% N( ?. a
  226.       strFullName=(*i).second;( N3 R& M) A2 ]. J" _$ _5 Z5 Q
  227.       dwProgramState=AP_CONNECT;
    * b6 P0 U0 G) u" l: j7 R# P
  228.       return TRUE;
      O6 H$ |$ C6 W; q6 m0 \, Z& \
  229.     }
    # `$ t+ V3 A$ f: s
  230.   }) S7 I* K9 f" G( [4 z
  231.   else if(bRestartUpdater==FALSE)& d# F- {  e6 i8 p6 @2 E( B
  232.   {+ v) s7 f, d. z7 z% F" F( R- e3 x: _' t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ) G- B+ S3 [; N9 b
  234.     {& p1 ?) u5 F% d. e
  235.       file=(*p).second;* a5 O' k  ?1 l/ _
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    0 ?' C: i: U3 g, M  @( o, B* j
  237.       {) [# ]+ }2 p6 b7 V$ E7 f
  238.         olds=(*p).second;4 N' B& t0 `" L
  239.         olds->vers=file->vers;' _5 @2 f" A8 a9 h. U. L
  240.       }9 Z5 J. q6 Z6 Z* W" `; D0 M
  241.       else; K! s% o# M0 t
  242.       {
    ( x( P- O; W2 l- g
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! X% K! S) {) @
  244.         memcpy(olds,file,sizeof(UPDATEFILE));$ u! w1 x; R5 E; y3 N0 F
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));  q2 j7 i3 \; k0 E: q+ w- M1 u
  246.       }5 y2 o  o; t+ V4 n" X7 \- P
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");1 M; X0 k9 a* Z: I% Y5 h% u
  248.       sprintf(filename,"(%s)",file->file);
    , b4 K' D# f: U3 @7 f# h
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% T6 s5 W6 O5 ^) v
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    - C9 h, L) b# \( b
  251.     }' d" O( x2 m" Y* ]  ^
  252.     dwCurrFile++;4 F8 b3 W1 M+ @4 P# P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% c, u+ n4 |; `% X. i4 w
  254.     {* Z- j2 M8 o, v/ Z( X& X( l
  255.       bSilentStep=FALSE;) D0 u7 K& r7 s, g
  256.       bCompressed=TRUE;) L0 Q0 ^' D; i0 n4 L  q
  257.       strExtLocal.Empty();
    " i) b, z" d, c+ U" @9 q( v/ M
  258.       strFullName=(*i).second;- i4 A# u' Y) G; j5 r
  259.       dwProgramState=AP_CONNECT;9 u4 S% {: o6 G$ {
  260.       return TRUE;
    5 n4 l5 d% E% x" h% u; E# K
  261.     }9 ]+ t: _$ _5 g# O
  262.     if(!bRestartUpdater)9 B& _1 R( q& M. N$ X7 s9 D9 h, s
  263.     {
    0 f% h: y5 z6 z/ s
  264.       int iCurrSize,iFileSize;
    ; \" i+ y% j/ W, ?
  265.       iCurrSize=0;) ~: K" t2 J: ]7 V8 J
  266.       iFileSize=UpdateList2.size();
    & ~1 m# e! ^# @$ }! z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    & U( G( F4 J. H. l% Q: P
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    8 D( W. k$ @5 B% g  R/ B/ V8 t1 h2 o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    3 d+ y; I( l  p" X$ y: n9 ?
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      T( L. a0 m2 ~6 X( ?
  271.       Fclearf(".\\update.dat");
    ! n, b% z4 P  i: q$ q
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ' {/ ]: x/ e+ q+ ]8 b* ~
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 e3 Z  y! v! m1 k5 E
  274.       {
    * X$ q  z* I) ~3 R; ?
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())7 L4 W2 }& i* K% v! Y
  276.         {
    1 A5 i# N4 Q# Z
  277.           file=(*p).second;( a5 ?( Z- n3 v/ W, w6 h
  278.           sprintf(filename,"(%s)",file->file);3 E0 g9 [. k1 W/ L
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " Q& ?& [* P! S* d! P4 R
  280.           iCurrSize++;% ]8 q3 t  s" }2 I
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));2 M, `  v( ?1 Q7 c$ L9 l& l
  282.         }* @& h7 D7 X; g& @5 n- X& o) a
  283.       }, O  t8 c( a8 N% \6 X
  284.       unlink(".\\update.txt");
    4 h+ Z5 _4 e8 Z2 q7 g. c* {0 ?& \/ w
  285.       unlink(".\\update.tmp");  }& R; r& G1 H6 h
  286.       Fclearf(".\\checkversion.dat");) m! p! V3 P' l1 }2 e. @4 V4 v8 u
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);* k: G7 |2 ]# x8 @# [
  288.       if(UpdateLocal.size())
    % x9 U% `: a, z+ e
  289.       {) E% p! ?/ l  D, ^- Q
  290.         UpdateLocal.clear();
    2 r# l% j  _; U1 G! {+ \, \$ B
  291.       }/ O- W% I$ h/ a" [
  292.       if(UpdateFile3.size())! n; h1 J- I( W+ Y2 b
  293.       {
    0 X- w3 P5 V  i& E3 c! B: _
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & U$ x! l6 O; s3 R& }
  295.         {
    6 W/ B) ]; r" L- V5 p
  296.           file=(*p).second;  l1 h5 a' {0 h& Q; Z" A4 j! y1 U
  297.           free(file);
    ' G" h! S) ?$ _0 @
  298.         }
    # L$ g: ~* O$ _' x
  299.         UpdateFile3.clear();2 ^. ^- u. L, r9 R5 X* \  O
  300.         UpdateList3.clear();
    , b, J* ~9 F& o( ]* D0 A3 W  e3 _
  301.       }. G6 w& b& e5 }
  302.       if(UpdateFile2.size())" P) W9 v0 x) ^- ?2 P" w& g
  303.       {
    : L& D/ b# y# e/ g$ r) i- y
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      V0 Y9 P# k% w% r8 H( `
  305.         {
    + @1 H' y: ?- e' Q/ q8 q4 B* H
  306.           file=(*p).second;
    4 n7 ?$ Z* Y5 {4 ]
  307.           free(file);
    6 R. T! `# A3 z& r
  308.         }- k+ u9 [% r- s6 `5 Y  k9 T. B
  309.         UpdateFile2.clear();7 B" V" P5 L% R2 U
  310.         UpdateList2.clear();
    ( X2 ^: V3 u8 ?6 A, f8 \
  311.       }
    : \+ L. E+ N  w9 o
  312.       if(UpdateFile1.size())
    5 W& Y) E- m0 r4 D
  313.       {2 J$ F5 j% @7 ?7 Y9 i7 a' ~
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    4 m) v1 Y+ S0 C+ w9 ]( b7 l$ E
  315.         {
    1 h" O$ z% E. s, ]9 Q( b
  316.           file=(*p).second;
    8 U; U: J* y( f2 }
  317.           free(file);
    # J$ v" V& j3 x8 V( p( U) J& u
  318.         }# X4 u$ A. F& n6 m( ]8 D
  319.         UpdateFile1.clear();* [4 X7 p+ z2 {& |  @) _3 J
  320.         UpdateList1.clear();! I5 [4 V- ]: x
  321.       }
    ' J+ E/ T% c/ E$ J+ S) `
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    $ m! z  k# k8 q  _
  323.     }
    & [! M$ H. }8 Q! H- ?% N/ b& ~1 I
  324.   }8 `8 t- W) e  A& @) d
  325.   return FALSE;0 R1 u& }" T6 _: g
  326. }6 k0 C' k$ E) @- Q+ C& [8 y" N$ ?

  327. 2 }# C( j' B% _
  328. void CRevAppApp::ClearAll(void). O* d; V# G0 T3 Y
  329. {
    9 a" p' n- i. s2 N' y: R3 S
  330.   LPUPDATEFILE file;# x& u( Y# K- ^. \3 y1 k" ^' v
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 @# Z# T$ J8 Q
  332. 2 M! L" I6 f+ e1 V) r7 X- n
  333.   if(UpdateLocal.size())$ n+ t' N. b  z8 a/ A3 C- p: _
  334.   {
    0 w3 i  B; Q- h7 ]
  335.     UpdateLocal.clear();
    2 S& v2 w9 Y$ W9 G3 J) Y0 n
  336.   }( ]  P, R2 V& S
  337.   if(UpdateFile3.size())' g) e1 w. [$ M9 o. N
  338.   {  @0 ~4 H$ W0 y4 s- K* [$ a6 ^
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , }9 [% v% W. X5 d6 V0 b
  340.     {
    4 I: [: N# H. k' k/ y0 V
  341.       file=(*p).second;3 P/ d1 Z. R# W4 d2 e7 j1 r6 ]* O
  342.       free(file);4 L" Y5 W2 |( _- B3 m) N
  343.     }8 i) w, t5 ]- v
  344.     UpdateFile3.clear();
    % c* j$ D4 u% h' P2 Y9 y
  345.     UpdateList3.clear();
    + J5 P9 W  P/ N/ V% G
  346.   }
    . A5 u) K0 _7 B8 \! ~3 }
  347.   if(UpdateFile2.size())
    ( {1 Q- \7 T( Q" _
  348.   {
    . q# V+ r" H5 A2 r5 \  ?
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / e! Q: I' i, D0 i& k" g( o
  350.     {
    ; l0 t# _7 {: X% d% N8 g) K  O
  351.       file=(*p).second;
    # S1 t+ _  \/ h* r
  352.       free(file);
    & ~, O: H# c8 |, V" j! l: [
  353.     }- o: m5 j$ i" ~, @
  354.     UpdateFile2.clear();
    ) {' r" }& W# l/ V8 y
  355.     UpdateList2.clear();9 ]; j# l$ v" r# N$ w, f* R! o+ S
  356.   }
    & @) m# @" T6 l( G7 t+ Q! ?
  357.   if(UpdateFile1.size())# P4 U4 Y9 t) S4 T% ~0 R4 m+ q  U
  358.   {
    7 u& q( I% A4 a
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 c& G5 B5 ~# p  i8 w* Z1 _  ]
  360.     {+ F/ y) r& `0 c5 W
  361.       file=(*p).second;& n5 v6 i: z% z
  362.       free(file);* S. ^4 j* i: i2 }5 p
  363.     }4 B9 ?: d  T% |0 |0 U; `' r
  364.     UpdateFile1.clear();1 l% d) t% ~- Z+ V* p
  365.     UpdateList1.clear();: W8 W$ n: U  P1 f- x6 [3 Q
  366.   }
    . D0 ]: r% O6 [8 Z
  367. }  " z/ G; q3 {9 A: U+ e* q
  368.   4 m) a3 M3 k7 N! F" o# B( _8 b
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    $ q' U$ V0 j7 g
  370. {
    4 g% H6 O% O( u, G& X
  371.   int c;6 t  e5 I9 Z: u5 I8 g+ W4 L
  372.   LPUPDATEFILE file1,file2;4 @5 k; s; l# C& a! a4 m4 G6 i; p
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;3 ?5 L& A3 x, z3 O# o6 M
  374.   std::list<CString>::iterator l;0 A2 D' W8 U6 P$ A

  375. ) P- G: P: D6 s$ u4 `& Q
  376.   UpdateLocal.clear();/ x! S2 {* T) r9 `. c: t; W- k- o
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    4 n3 g  t4 P, G' t* x8 N8 E
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);0 L" [) K8 y" I4 B! R' V* y1 U! E
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);1 y% \* J. n; N
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ; z- h5 b8 ~4 i4 U  B8 \! d) ^
  381.   if(UpdateFile3.size())
    # _$ H0 {* {/ y# c% W7 e
  382.   {3 x9 J# L1 O' w6 ]
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    8 U1 ]# {* x$ U' P- A# m3 v- b) {2 w
  384.     {
    7 B0 B8 t, i% S" g6 F! m
  385.       file2=(LPUPDATEFILE)(*i).second;. H% i( j$ ^3 K& T! R# P+ X
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 v$ a$ p3 a& @
  387.       {: }6 Q" U/ b$ v: Y7 F8 N& S  Y0 e
  388.         file1=(LPUPDATEFILE)(*p).second;" Z. r! Y: t/ E2 h% H( [5 ~
  389.         file1->vers=file2->vers;
    2 D; T& \$ N( B) C
  390.       }9 O; P2 i9 v+ D% N# K+ H7 J5 p( Y
  391.       else, V* X$ }& k9 D( W# |
  392.       {7 M! A/ r4 N& j! m6 {  c
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ r3 r8 A- g3 b# i* ^! M
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    4 O. v5 `5 U( I+ k& N& ^/ I
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& V! W% `' S3 f+ ]& M2 }
  396.       }. \1 Y  ?6 p7 D3 }6 s; v
  397.     }; \" Q, M" P" i; B. U
  398.   }! U' r" z  ~( q' M- k
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)! H& R$ Z9 b4 P' T8 Z! }4 _6 b9 s
  400.   {
    + V" w, o9 q" k# Z; D
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    # P3 z" e& h9 c( v( X) X* I! K
  402.     {1 v/ [. z; U" O1 ]% A& G. ~
  403.       file2=(LPUPDATEFILE)(*i).second;
    * g5 n( h+ p9 n+ j. h
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 U" f, W9 x& U
  405.       {2 M; P: y& |9 S9 O+ h
  406.         file1=(LPUPDATEFILE)(*p).second;
    2 X' b$ P+ q! W
  407.         if(file1->vers!=file2->vers)5 n  W* P/ R, f# n
  408.         {
    + m' V% a, m$ O/ B1 |
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ w' _# T# r+ l2 h: T+ i4 f+ h
  410.           c++;
    : V0 c$ D# ^0 q/ T
  411.         }
    5 i  c- B' p7 ]6 ~1 @8 O* d
  412.       }
    * ~! ]8 S$ _* A) p
  413.       else
    # Y: h! ?- e4 H  F4 _# n
  414.       {
    . T4 {8 D( B& h0 L, l
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( |' t8 W' `; c; S+ v
  416.         c++;: ?3 U6 }5 |: c, O  [
  417.       }
    2 e& c1 ?) H. F
  418.     }* H) d  y  N1 J1 b5 l# M
  419.   }- [0 M8 H* S( p1 W, n
  420.   unlink(".\\DownLoad\\update.txt");$ X/ E$ k* e3 _+ b
  421.   if(UpdateLocal.size()) return TRUE;
    " A2 B9 s$ V) L% z
  422.   else                   return FALSE;
    $ r, `$ d+ J* \7 G
  423. }
    " F5 x$ Z( s. @

  424. ! c7 u1 a/ g) t* R$ T' o) a7 V( k
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"/ ^9 f( e+ T' B8 w6 t8 A
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"3 F% b! I3 U& I+ ^0 a# l

  427. 0 E& h0 e+ l# z7 g* Y6 |) d9 Q

  428. 0 B5 k5 v' J# b. ^6 q: e* I7 q

  429.   \1 R' A  i; s& p+ b6 e1 j
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" O5 Y7 }+ b" H2 G  b+ T& h
  431. {- R2 i! P& F' t5 |4 ^
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    2 Q' U4 B) B) [; I2 G
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" s% x! n- [1 S; s* p+ w. o
  434.   {& A: Q6 q9 [3 A
  435.     char szLanguage[50];
    - o) p3 q# I/ m+ m, O- b* ]
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & [! i* l- [7 T% ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % [; b$ O" G6 B
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 z7 b% V' d* D7 t. \- j
  439.     else                                   m_iLanguage=ENGLISH;2 g3 d% x+ |, U6 J+ ~. f: U" w
  440.     char szRegister[100];6 _" ~  s7 T, _; `
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 H7 n, t% I% i7 p! r, }+ [6 _
  442.     strRegsName=szRegister;
    ) ]4 r1 a# n  A) p5 z3 h
  443.     char szPatchURL[100];
    , G  H* G0 q3 x- U
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 Z" M4 H1 V2 e) x& W, u
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 k4 l1 |# N* C, a% z
  446.   }
    " n; {9 m! ?, k
  447.   else* U+ y! _1 ~7 J0 e0 N/ u
  448.   {
    6 D' b' {! C" L: ^5 j
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 e5 |; I1 T( O! Y  ?$ I% a6 w
  450.     strRegsName=DEFAULT_REG_URL;" Q0 l) c. S5 o/ i" Y0 ^* L
  451.   }. o( m; y3 x3 Z# l  E; r6 h
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    + i: q8 M4 s* ]
  453.   {" D( L3 n4 w# C5 v+ n
  454.     char szIP[50];1 J  N' h6 E  B4 E7 T1 [  J' H# X: m
  455.     char szDIR[300];
    & L. G' `; l" m! h% j/ E
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))* W3 k" c4 O% C/ B
  457.     {
    9 i9 f- u  Z! G6 Y% `
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");, h3 p& i4 g- ?2 @' l
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    * J, g( x+ C2 c. Q0 U
  460.       strHostName=szIP;  D: u( I9 h" [! s4 ?9 i" j% i
  461.       strHostPath.Format("/%s",szDIR);
      M8 U( A" w! {& W6 z! `
  462.     }
    ! t! L1 g- V. w  }( v# v, b
  463.     else
    * J. E$ j) y- l% s- ^/ z( }$ K
  464.     {
    ) ]3 R8 E# k' g4 k( F
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( @3 f6 v4 X$ m1 {
  466.       {2 b1 k+ {7 b( R  t- X
  467.         char szLanguage[50];
    6 V- s! p% l/ F" t& u
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & a% t8 }1 \+ Y0 d
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 v. _7 H3 R: N! X+ N7 I6 ~
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ Z% c' J' x& |- I, i- L" A
  471.         else                                   m_iLanguage=ENGLISH;
    ' K" R1 w+ ?4 ~$ h& |
  472.         char szRegister[100];
    6 x: m, E  s7 c* b9 E( V' h, c
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 k, @' C; f! S2 |8 f0 ]2 f/ L
  474.         strRegsName=szRegister;
    . K, N. g9 b% A$ A1 b# m% b' h
  475.         char szPatchURL[100];, N2 e/ k# i* ~# C6 n
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : Y8 J1 X: U' Y7 B, w4 z$ t
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- ^9 H. j; ?  Z1 ^7 Q
  478.       }
    9 |2 l, H- G9 b3 Z2 _: ]
  479.       else# M5 I; K* [2 E4 W4 u
  480.       {; _: V/ g. e/ ^; T$ _
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & X7 i$ V( M6 @+ `1 J
  482.         strRegsName=DEFAULT_REG_URL;: i8 @, r; u1 M
  483.       }% j) z9 W5 Y$ K6 z. H; I. S' a
  484.     }; @' |9 `6 _* G% t) \; E/ ~; g
  485.   }
    * [- K5 U# d6 q$ @
  486.   return true;  H% v' I- f3 ~" Y4 H0 s1 ^
  487. }
    $ E$ F/ U  ^0 S5 D
  488. 2 F  D3 U( r+ o9 u
  489. #include ".\ZLib\unzip.h"0 z7 W& R. s0 `& n! R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    , L" K7 \2 \7 A. m1 T/ I- V' e5 Z6 P
  491. /////////////////////////////////////////////////////////////////////////////( U! h6 M$ k. c( ~
  492. // CRevAppApp initialization5 b2 p; {0 Q# Q1 {2 @8 Q# U) Q  I# `4 S

  493. 5 c. j. s7 E% q9 E; D- l4 ~
  494. BOOL CRevAppApp::InitInstance()
    / @$ F6 b4 I, R
  495. {6 ~9 _" }6 W0 h. [
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ( c+ n( s5 \$ U0 u: g1 `

  497. # F3 Z6 ^; M0 S" k6 }1 R& `" V
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    2 _- J& W$ `4 z$ x. F3 q2 p; J
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))( p: l# I7 S7 M! A: ]
  500.   {7 u. b" d1 a1 x: {/ ~6 K9 v
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    : H* {" J' r- U' D
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    / ?' [3 G, ]: h6 v2 \
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ( G; d0 S7 p! @$ v( v" T3 W, |1 T
  504.     {6 q4 [2 }7 m9 q5 r$ w3 @
  505.       strcpy(szPath,szPathTarget);
      g) s1 W0 d+ u1 V# N
  506.       SetCurrentDirectory(szPath);
    " ]( }& I  l) q. D! b. [9 Z
  507.     }
    7 v& `8 T! i  ]& M& ^7 _+ r% P* b- u' w
  508.   }
    + d" K. j9 Y, k# q+ b
  509. #ifdef _DEBUG1 o, }; n% C8 |
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ ~- F: e$ d7 k3 T' o5 m4 U" g5 T5 {
  511. #else
    1 e! E; h& B0 a1 ?5 _6 K
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( `5 q& S$ t9 n  f* I0 a5 P
  513. #endif
    4 x! i, [" X: q4 G5 c
  514.   {
    , u0 R5 N, e5 I' Z# U
  515.     char tempFileName[MAX_PATH];8 B) S/ U# x/ J' _9 n; q
  516.     strcpy(tempFileName,szPathSource);
    4 l* s& r* O$ s& d
  517.     tempFileName[strlen(szPathSource)-12]=0;& Z' `: I! q; l: _( D7 X
  518.     strcat(tempFileName,"\\$CSUpdate.exe");( C& C6 L- U$ T. u( o0 W
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);' [+ [) d9 S; ~8 }: w
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    7 C5 n; F3 w0 _$ g. l5 E5 k& ]( S
  521.     return TRUE;) g0 R0 t+ s6 h' T! O# S
  522.   }( L- S! p. t- Q* p# b
  523.   // Nuke 0118: Delete run.exe! Z7 P4 i% D( Z: N/ p& ^
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    / t: t3 w$ N! F( l, ?& F  F
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");7 u9 \  ~+ K. K5 F
  526.   if(!ReadCfgFile("Config.ini"))
    ' d8 ], I8 J1 ^3 E/ M% J! v
  527.   {7 a1 G. E, Y6 K5 D& z/ C
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    & f1 o0 V- {9 _: X
  529.     return TRUE;* k. Y0 m* R1 _: E" a4 X
  530.   }
    & s" j. v  X: C' D. W
  531.   HANDLE mutex;8 C5 \) o: G& t  t" i
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))" C  \. Z* P& P( y
  533.   {& N* t; u& `1 N: l
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)$ o% \- ?3 B8 s+ p% D
  535.     {2 k$ z3 s# V& l, U
  536.       CloseHandle(mutex);: {5 m! t! w7 g
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! w. O$ k" H' k1 ~; V. l
  538.       return TRUE;. j" D4 m" c) B' W8 u* r, T$ x
  539.     }1 L& x$ f: ?. ^% Z! C7 r- [, y
  540.   }  
    + Z& d! i* j+ l$ S
  541.   CloseHandle(mutex);
    , @, `1 w6 i$ C8 E0 y6 @; j
  542. : I+ a$ E8 J" }/ P
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    5 k* J' w4 I" C) e# u
  544. 2 H( }8 `* H$ S
  545.         AfxEnableControlContainer();
    ; D( w# F2 H' g4 v9 z; q
  546. + C3 K( Z. I/ G  e" V) L5 u8 @
  547.   bCanUpdate=FALSE;
    % N) F7 j) g$ b( b: P# T% |$ f
  548.   dwStartUpSteps=1;
    ( w. C$ j% L" H1 w! i+ K
  549.   dwProgramState=AP_NOTHING;$ x: ]. \) k( @: S. M

  550. ' z3 @: _/ V/ }1 E/ i
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);+ w. \: W. w# Q2 R

  552. 4 s7 a4 q& F1 [7 x2 @3 D( N! U" L
  553.         // Standard initialization' f. s- F0 X5 C2 Y& ~2 B
  554.         // If you are not using these features and wish to reduce the size
    0 f9 H4 a& t2 N! W
  555.         //  of your final executable, you should remove from the following" V0 h8 z: c) _# s
  556.         //  the specific initialization routines you do not need.
    ; y2 O3 c+ Z) l' h& h1 d

  557. . u  z+ K! m3 G; C) H5 r' U- T
  558. #ifdef _AFXDLL
    ! [! C% m5 o1 F; q; K' R' f( F! m# X
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ; _5 S9 B$ f3 a) C3 m) \! p
  560. #else
    , {2 W% Z8 q4 ?& l% q5 I; x
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ' Y6 `6 H% R' S# b, X( r
  562. #endif
    , V) H; h1 o4 B8 i+ q7 D" P
  563. * p; y- Y% p* Z* J' N
  564.   dlg=new CRevAppDlg;
    7 N; l; ~; E. k) G) P: Y
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    # x' _0 `) W% {8 Z1 N( t" i" ?5 d- k/ }
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    , E& S5 ]5 |; H5 Q, u# [! a+ G% [& k
  567.   m_pMainWnd=dlg;7 f! T8 E8 Z* Y3 h) h

  568. 6 g$ S! O* Q5 z
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);2 V5 R7 `9 g( d3 q( b
  570. ; t5 V4 _  ]: I! H% X
  571. //  GdiplusStartupInput gdiplusStartupInput;9 ~- E* b( n7 m2 J1 h
  572. //  ULONG_PTR gdiplusToken;& D: K7 M' j9 A$ R
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);8 s* b- R" g2 S/ z% D! m7 r% ?8 t
  574. 3 {1 L2 ]# l1 H' Y
  575. //        CRevAppDlg dlg;5 O$ e4 |1 o- q: t
  576. //        int nResponse = dlg.DoModal();) P; [: a2 W  i( ?$ L
  577. //        if (nResponse == IDOK)
    7 N- X. q' r0 t5 D  M' R
  578. //        {
    0 V! N9 ~, K3 M* i: \. I" s
  579. //                // TODO: Place code here to handle when the dialog is7 T2 C( O3 ^: k8 J6 J& C5 ?
  580. //                //  dismissed with OK3 ^7 ]0 D5 q* O1 f
  581. //        }4 y* ?# A/ p# h8 E3 i$ b4 d6 j, H
  582. //        else if (nResponse == IDCANCEL)
    3 B" L( P/ |, W5 C5 X0 a
  583. //        {
    6 N, \* B1 R2 i7 C6 _. ~
  584. //                // TODO: Place code here to handle when the dialog is
    4 q% Z1 M$ U* _4 Q
  585. //                //  dismissed with Cancel# Q, {6 Y: ]: n; e0 u
  586. //        }
    1 y) B0 L# x/ X: U# z; v
  587. & I: Z5 O2 w2 L7 q* j
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ; ]8 z5 p* b5 k; g6 q3 |; b
  589.         //  application, rather than start the application's message pump.' d  C( `, ^3 g& z; @/ r% c5 }! Y
  590.         return TRUE;( S( o/ G! z3 b# N: p# p8 a9 `( `
  591. }# z6 `* N! \9 c6 h. Z
  592. 3 d7 Z2 B3 S: K  [6 T
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ( W( x" x4 u+ ?. L# K6 f8 u
  594. {  d; G6 z5 _: ]5 K$ T
  595.   int i;
    9 k: [. y7 w- r' N- b# s6 g; R1 w9 R- X
  596.   char *szRet;  e  m" W" x" y. ?7 \' M$ J

  597. $ W- Y1 B2 C8 C% u; U
  598.   if(pSource) { itoken=0; sztoken=pSource; }8 L: M' }% u/ z) p8 h/ e
  599.   if(sztoken)
    / m) v$ [  [: j! E
  600.   {
    ! p* O" ~" a/ D; A  v
  601.     szRet=&sztoken[itoken];% {/ c; j6 T  U
  602.     while(sztoken[itoken])1 w; C* g- X# Q, T1 @7 o
  603.     {
    " ~6 D! r1 ^  z6 Z9 T) }4 R
  604.       for(i=0;i<(int)strlen(token);i++)1 T1 y# G% U5 r6 `7 Q& u5 s6 P6 L
  605.       {9 h: \: Q2 ]! ^" s
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    . R* p, a4 L0 r3 w4 f; b
  607.         {  `# K7 W% b! C1 @9 h! u! p
  608.           sztoken[itoken++]=0;  Z8 @7 K: d7 }% X
  609.           sztoken[itoken++]=0;
    + Y; g8 F5 W' F1 ?* J
  610.           return szRet;
    ; r+ A! h. _) ?  n
  611.         }
    4 ]1 N+ |8 a. G' b/ K6 [& K
  612.       }
    1 V5 I6 N5 G7 Y2 C) ~; g* k1 A, T
  613.       itoken++;0 Q. h6 c" e) Q' R
  614.     }9 W+ f6 m8 u8 Q" |
  615.   }& f. w6 l7 E5 r" W* _
  616.   return NULL;7 B8 D  T( Z/ E" D/ [/ ?
  617. }. l& R( h& _& u3 y+ u3 d
  618. 8 k. V2 d( L* R2 r, x
  619. void ProcessProc(long Total,long Current)3 F' i; t$ k/ p2 |% z
  620. {) B# k+ q' J  H5 A' ]6 q! b8 Z
  621.         MSG msg;1 s& x$ f7 r/ D$ R: d" k. G
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);' k0 y9 K9 G* \5 p
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    * B0 t' _) D! ]  V1 q& M
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      N; ?! T8 S( }/ _/ U( N# i
  625.         {2 ]% W- o: d( B, O1 d7 i; d
  626.                 if(!GetMessage(&msg,NULL,0,0))6 p" r+ m& Q/ s
  627.                 {2 L& p& M; v; t
  628.                         return;
    / t* i4 |4 E( V. S- s$ g1 p9 G
  629.                 }
    ' z( k0 D, G. {9 ~7 G
  630.                 TranslateMessage(&msg);
    4 L9 E$ r/ e  O  Q8 S  C* x
  631.                 DispatchMessage(&msg);
    ; ~, K& E6 x- ]( m& a# f6 h1 }' @
  632.         }        0 i1 d: r4 F# s7 [5 o8 {
  633. }
    & S! m& g7 o6 l" @
  634. ) T$ M4 K# \) w: u* {
  635. BOOL bFirstChar=TRUE;
    * D+ g6 Y6 K. h, Y
  636.   o1 P8 z  P( a
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ' Z8 G, D4 |. |$ _& k! M
  638. {' j# D$ J0 X1 D/ d! r; k
  639.         // TODO: Add your specialized code here and/or call the base class+ w2 ?  c$ ]: ~
  640.   switch(dwProgramState)- C7 u& }! p+ Y. p6 w0 o
  641.   {
      ?/ {, x4 U, t
  642.   case AP_NOTHING:
      s+ t4 }' E) n& n: H
  643.     switch(dwStartUpSteps)
    8 d7 v" b/ Z" p4 x& H' _
  644.     {
    $ v: n. @8 G; x( a+ g' ?. F# y
  645.     case 1:
    # e4 `! Z- j! j
  646.       {! H! Q+ J6 |4 K
  647.         int i;4 k9 m3 \0 {' _2 r6 O
  648.         CDC *pCDC=dlg->GetDC();
    / M7 k# W9 q: B0 h: g* F
  649.         HDC hdcwnd=pCDC->m_hDC;
    2 X& h# k, \: V
  650. //        Graphics graphics(hdcwnd);! w6 \3 k( j+ Y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");& B- m6 G' Y2 h0 M& N
  652. //        INT iWidth=bitmap.GetWidth();2 g6 I; ?6 g  q1 V9 b7 y
  653. //        INT iHeight=bitmap.GetHeight();
    8 }- Q9 g- W9 l; J: C8 v
  654. //        Color color,colorTemp;
    4 e9 U( w: b9 q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    0 A" F  c/ x" M8 r2 T
  656. //        {' m& N& z2 ?& ]+ H, ^6 k! K. T: n
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)5 F$ Z9 r$ D! E: |$ R) {, {7 Z  Y
  658. //          {
    5 S; {) T& i/ F1 m5 `9 ?
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    / @0 ?9 ]" J3 L" M
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 D0 |* S" r8 o
  661. //              (BYTE)(255*iColumn/iWidth),1 h: V  ~& c$ t7 l* K' ]7 f9 [
  662. //              color.GetRed(),
    + w* i1 l2 d4 [- D
  663. //              color.GetGreen(),. h( R5 i0 |& {
  664. //              color.GetBlue()));
    # p0 O% B7 G7 a
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);  M# }* K6 r7 V! n5 m5 N& f* _
  666. //          }  s* A5 F; Z4 g! |
  667. //        }
    3 `! ~  t8 d( y% d/ F' ?- y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);8 ^- @/ |* k9 X# g0 p$ `/ M0 Y! z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");! |5 Y6 ?( I& v$ }3 l# L" o
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");! x+ K) |* l( V) h1 _% t8 u
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 @0 l# Q* O$ M; K3 [
  672.         for(i=0;i<240;i+=8)" j' h$ F" ]) @" i$ `
  673.         {3 ^. u6 c; ~6 Y) {" R4 h
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);- h% T; o& x1 w$ O2 [
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 a! n$ ^7 H. e* c8 H- X
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 C& u, C2 E% l+ Q8 O) W  n
  677.           Sleep(33);
    - R; z. W3 f, z9 H- x
  678.         }, s2 N6 Q. {- f. U- m% F& ^. C
  679.         Sleep(1000);% @& v- k. e' i- q5 L  P% `4 {& ]
  680.         for(i=240;i>0;i-=8)1 F, Z# E5 E& p
  681.         {
    8 Q8 Z6 m* f, K; N1 S8 z5 G
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # L8 T) }$ K, x. R4 W& n5 i: |
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ s7 z4 o3 y! V% j, V( a( U
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * ?% C, h) b2 y+ u% R% }
  685.           Sleep(33);0 a& y2 n$ f7 ], P4 F  H. z6 Z9 y6 v
  686.         }3 k3 ?4 D- C) V/ F- G
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);9 m. i5 n. a2 N3 ^5 l4 o! k
  688.         dlg->ReleaseDC(pCDC);6 `8 c6 E3 [8 b* n: [; L4 n3 h
  689.         DeleteDC(hdctar);  p. F! ^7 l4 T9 n$ }  ?8 ]
  690.         DeleteDC(hdcsrc);
    ! C. t' Y6 }5 Q, s  t& J  N
  691.         DeleteDC(hdcorg);: M; X$ j/ ~+ ?8 ?' L
  692.       }( i0 K8 o! t( `' M# C
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    1 @+ ?, n) N7 i0 ^' @# L% C
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");/ h* S# O6 S8 {6 {4 i3 h
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    : V2 [! g2 U0 e' X9 O$ u% T" S0 S
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");" v3 a" A; b) _  ]$ G! z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & @- _4 ]9 z# u% c8 a) t
  698.       if(!Dn.Connected())
    1 A' Y9 m1 Z* g: h: }% y- h4 }
  699.       {
    # y; E6 w# [9 P- [
  700.         dwTotalFiles=1;
    ! D, Q& X$ U2 v! s3 t
  701.         dwDownLoaded=0;
    8 E" \  j+ o  ^) R! M
  702.         bSilentStep=TRUE;
    : d! g4 K  I2 l- G
  703.         bCompressed=FALSE;
    ( V" d# R8 q4 {% S3 C& ^
  704.         strExtLocal.Empty();
    0 ^  V/ c9 h) N/ }# I
  705.         strFullName="readme.txt";4 o0 {* R( Q; |5 E
  706.         dwProgramState=AP_CONNECT;2 ]. |4 C6 j: @- Q
  707.       }' ?! d5 t, ^9 F, d
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();5 r( P. I! M; [* j
  709.       dwStartUpSteps=2;, J4 T! Y3 ^% ]
  710.       break;
    - X; ~6 T  K* p& B/ r
  711.     case 2:
    0 C- e$ z2 V) c
  712.       {
    5 W- f7 s, ?- @  g) v7 v) ~
  713.         int iEOF;& U* z, |" v8 l
  714.         FILE *fp;
    4 Z9 f7 x2 h. T, n5 m: X4 D
  715.         char szString[512];
    / {9 P" \, Q" r$ s1 O
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ! q* \5 j2 R3 {2 B
  717.         if(fp)* B% [9 v- N7 R# Q
  718.         {9 \: I6 E" W. `/ `  y$ ]& @
  719.           do
      w2 h" d9 t; @5 z' Z$ Q' g
  720.           {
    + I6 h" ~  ?3 [1 e9 D
  721.             iEOF=fscanf(fp,"%s",szString);
    ' l( K! S2 `2 Q+ J( `1 U  P
  722.             if(strlen(szString))
    ) X/ F& G$ A7 z$ }# g+ c' s
  723.             {
    0 Y. M# L& P2 W- A2 j! Z
  724.               if(bFirstChar)' N5 C% N( T9 Z# i$ E2 j
  725.               {
    5 y$ V" S7 d& w! a1 Q( l, G, C4 k2 P
  726.                 bFirstChar=FALSE;
    # O0 {) `$ g; o3 O6 _8 c
  727.                 bConnectIsBig5=FALSE;
    2 Z: @$ Q2 f* D( b9 |; ^) G' D
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ( Y( v, m9 u* M% g. ^: U
  729.               }
    + Q5 d4 ]8 O. ?- T" Y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- N' [  x/ x6 L% a) q' S! j. F
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    3 J, I4 _$ S5 q% J2 k
  732.               dlg->m_ListText.AddString(szString);; h/ Y  d8 E: S; X/ Q3 X# r- f4 D
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ N. m- [) X# t+ Z! m# w+ G7 E0 y
  734.               *szString=0;
    - r  U( |6 v( X( ~- o: A; E
  735.             }# ^+ M1 a$ D  l# D7 V4 m
  736.           } while(iEOF!=EOF);
    0 Z& }9 y, B- e
  737.           fclose(fp);
    ' D* _, Z( ]8 B; q  \
  738.           unlink(".\\DownLoad\\readme.txt");
    - N  X6 z2 Y4 d" D1 z
  739.           dwStartUpSteps=3;& h! f" D- P2 |" W! K
  740.         }
    ' X& B" ~$ f0 l* l, p
  741.       }
    1 N7 N! B0 p; p, v) u
  742.       break;. e# j0 k' S6 R: d) h
  743.     case 3:( l) r. g; a) Z7 @6 T; X, J% G
  744.       if(!Dn.Connected())
    , m( Y& o8 A  A* I+ L* Z
  745.       {
    ; R6 R' A( j4 ?, v0 d" a
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);" x9 F9 k( Q6 b0 o% e& j
  747.         dwTotalFiles=1;$ L) T& x* I5 N9 Q; u
  748.         dwDownLoaded=0;
    8 l% e" Z! g" s/ T; C9 T
  749.         bSilentStep=TRUE;
    " x' M7 z: {! X, P# y; b. a- o
  750.         bCompressed=FALSE;# T! u. y0 h$ W- l) R! E/ [. j! h: M
  751.         strExtLocal.Empty();  `+ s5 s/ `3 `% s  p! Y
  752.         strFullName="checkversion.txt";: {+ R/ d/ s$ `$ [# n8 S" k
  753.         dwProgramState=AP_CONNECT;) Y% E7 d& A/ V" ^
  754.       }
    * A6 ]  h# S$ @* @, B
  755.       dwStartUpSteps=4;
    * Z2 L& N: I9 F
  756.       break;
    4 n+ \% K  B# K7 G
  757.     case 4:
    1 A1 d  l7 ~; b  y: o! q0 x
  758.       {
    3 K2 r2 n# q+ o3 \  O
  759.         FILE *fp;
      b8 f8 K1 m" ?
  760.         char szString1[128];% @1 h. \) @% q, }: y. Z, `# n
  761.         char szString2[128];
    # V* k) l9 K* U" n+ b, ]; P8 z
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    . X2 x8 t; E. C3 y* l
  763.         if(fp)% H( v( b9 C: \3 `6 i' V
  764.         {, I3 a& y! K9 J
  765.           fscanf(fp,"%s",szString1);
    3 h3 F8 ^  v2 g# X# G" y" _
  766.           fclose(fp);" \( Y& S: p! z7 @
  767.           fCheckVersion=atof(szString1);/ k$ _3 X" i; w/ I& A7 I% k+ X
  768.           fp=fopen(".\\checkversion.dat","r");
    2 Q  A* x" @/ p
  769.           if(fp)
    " C& D1 s+ [% A- F; p; g
  770.           {
    8 U! g* G9 ]. B1 \$ e  h# Y7 b% d
  771.             fscanf(fp,"%s",szString2);. G$ k& [: h1 e: {8 l' {* @
  772.             fclose(fp);- g  S* f7 [+ e1 w  ]  y
  773.             if(atof(szString1)!=atof(szString2))) `: |! T- X8 [- Y' j. F) r4 X5 X
  774.             {
    4 |8 q+ H; {5 Z
  775.               if(!Dn.Connected()). \) G4 E% }! t, l
  776.               {
    / F$ ~  o7 Q! P6 ~# A
  777.                 bFirstUpdate=TRUE;
    4 t, I8 T% M7 X& V, Q
  778.                 dwTotalFiles=1;
    - F$ |7 ^4 `" h% W6 X8 G
  779.                 dwDownLoaded=0;3 w: H2 d9 y& b. [
  780.                 bSilentStep=FALSE;0 ?+ ~4 B# ?, a- N
  781.                 bCompressed=TRUE;. Y1 ^7 w4 A# ]2 y% I9 K
  782.                 strExtLocal=".\\DownLoad\";! ]" f) Y# B! M9 E: b$ b8 K
  783.                 strFullName="update.txt";2 C, ]+ m) }8 X; R( Y# r1 T
  784.                 dwProgramState=AP_CONNECT;
    # {; e: C- w4 J& O/ S) f" y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% G) t( N2 j! T6 `
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 d3 H) W1 h1 L; r3 K8 K% m
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % V# m) o2 @8 r$ L7 a

  788. / K6 N& D" D8 N9 X* V! j
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & o5 P/ P( J& r$ g% x- `
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    $ O2 y- c) K2 z( w& k5 ]+ V' S+ ?
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    * g6 f! ?4 f- u2 [7 V5 G# R6 r; W
  792.                 {& Q& h) a- q1 Z& R1 f* D3 D, K
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");3 Q9 ^$ N# y7 @" P1 C) l' M, m
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");0 r* O' S' H1 w
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ( c5 P% [; L/ {
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; l$ E4 o! k/ M

  797. ! p9 ^, P2 }' m4 u% t) \
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    8 Y7 m' G/ o" c6 S; ]
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ P- t) \  f2 K( u# L
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");8 f4 V( ?& q5 i2 r1 Y/ g: K2 I
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. ]; Q/ W# p# q8 X
  802.                 }
      V1 y  P: ~* O6 y* p3 k
  803.                 dwStartUpSteps=5;
    * Z# P/ C) F7 T* M$ X
  804.               }
    9 k0 I- n0 `! I; R. c( B
  805.             }7 b+ e" r' `" T/ e! O6 X
  806.             else) D7 F/ h7 D5 y# p& I/ b
  807.             {
    2 @4 j4 @8 s6 K$ n
  808.               unlink(".\\DownLoad\\checkversion.txt");
    8 M# a6 `4 O) }
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");. w. ^  r* O. T- y& ^; _
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");2 y) J3 `3 A: w& t) g7 z8 A
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    * |& u; E- H+ ^8 i6 H2 F/ r
  812. ) h) R* {% x/ A( S! G# @( `
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' T- n' U! f& d4 Q5 i' ^0 m: M- O
  814.               dwStartUpSteps=99;
    3 g0 o( `) g4 H
  815.               bFinishUpdated=TRUE;
    + U+ S: R, h9 |- Z
  816.               bCanUpdate=TRUE;
      |- C# j) a0 D8 @: J  j: }
  817.             }; r! U0 j; M- z9 k& u' B; j& S. e
  818.           }+ z) q  H9 t* ^5 y4 v1 {; o# |( {
  819.           else
    ! t, i3 o; \3 W! T& L! I
  820.           {5 v+ ^  {4 n( I  Y9 |
  821.             if(!Dn.Connected())% \% e% J" _1 w4 s% a" U0 D' W
  822.             {5 x# k/ P* f& N# n5 \0 t4 L
  823.               bFirstUpdate=TRUE;
    3 R6 P/ l, E1 P4 N9 d! G
  824.               dwTotalFiles=1;8 R0 ^2 Q" [. ^
  825.               dwDownLoaded=0;1 P% I  q8 v: E3 u" O
  826.               bSilentStep=FALSE;' n7 T! }3 V! b9 ~8 K: f
  827.               bCompressed=TRUE;
    4 f) s3 c% A) q3 w; ^- J+ \/ I/ ?
  828.               strExtLocal=".\\DownLoad\";; M+ H$ V8 X8 w0 Y  R
  829.               strFullName="update.txt";9 T, E; J6 K6 Z
  830.               dwProgramState=AP_CONNECT;9 A# j  B: U; Z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ D' t! m6 n% e, b# Z. ?) ?3 C
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");& O" v% ^" L% w& x: d( N6 x: i
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");* ]4 N2 e2 x( f3 R; T4 C
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 Z; x. w2 h5 r
  835.               unlink(".\\DownLoad\\checkversion.txt");6 W# R, D0 g4 O# d" }4 b8 [" }
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)1 `) n# O+ M& e" u: `8 n) L
  837.               {
    / }% i# X- W# n% `) V
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    . `( T. n- m! j9 O* G
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");8 _5 n, N! i& [) \2 k% Q
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ; H! C6 e8 n. C: ]
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 b- o4 j8 u9 y7 I" n  D
  842.                 / T2 h$ O) b5 G( G) v$ A0 O8 M1 o
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + w; H4 ]9 e/ K2 N- p- S9 f2 e; q
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");5 l+ `8 F, w. z
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) B! C9 [. r2 `1 h$ y
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , q1 A% n3 `4 ?, Q! R0 D
  847.               }
      G3 R/ }9 O( S3 O
  848.               dwStartUpSteps=5;8 M2 q( c1 b, k; j7 m( r
  849.             }
    3 z+ Q1 {) A% l# N" ?2 t/ }; Y# |0 D
  850.           }
    7 C' S  f) }7 L9 _0 n7 {
  851.         }
    ' A2 f7 _$ ?/ U5 ~- l0 c
  852.         else
    $ l0 x$ \2 A: c4 b3 a5 E2 H
  853.         {# M4 ^' k6 |3 W. _+ f
  854.           dwStartUpSteps=3;6 j1 g4 d7 \! ]7 n- }8 O
  855.         }
    + W, [/ H1 F% x- [& F. O9 C
  856.       }
      y" v$ a7 I( w( L) ]
  857.       break;- W& M# C5 u' J
  858.     case 5:$ |* N8 F2 ?- b; q8 `" e+ g2 [
  859.       {3 R3 D1 D5 w; B' |, v
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    8 \' T3 K( I* {8 f5 `) e6 [* a- N8 b
  861.         {4 Y+ A& {& O9 R& K9 Q
  862.           int opt_overwrite=1;
    % m! c2 h* n9 x! X" ~3 J
  863.           int opt_do_extract_withoutpath=0;
    8 I. J$ q2 u: y' V
  864.           unzFile uf=NULL;) r4 z& U1 v% g& [

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

1 R6 [( y* d. b% P6 h0 t7 n1 I$ b  R9 R! |) _- 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-1-29 11:14

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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