CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
( x6 D, A7 `  H1 Q
  1. / RevApp.cpp : Defines the class behaviors for the application./ J6 [) C7 ^/ w) B8 F+ x
  2. //, x9 }2 T4 w1 T( F$ t: V' Q5 S
  3. , H$ m8 ?0 s( [; t
  4. #include "stdafx.h"$ r! p+ o2 }# R5 q) e: q
  5. 9 A$ ?# c0 o% U* M+ W" q6 O% ^# |9 S
  6. //#define UNICODE9 z* e5 F7 f$ {. n9 I7 {5 c# C& e
  7. //#include <gdiplus.h>
      @4 I0 L" z* I# s8 h& \
  8. //using namespace Gdiplus;
    7 z9 r0 B& L+ x" {7 C

  9. 9 k* {. }; I1 ]" ^
  10. #include "RevApp.h"
    9 j, |, @( D+ k' O" k
  11. #include "RevAppDlg.h"
    & O; w% Z4 B6 C& U
  12. / ?/ q: C; F& n+ F, Z! O2 D' I
  13. #pragma warning(disable:4786)
    8 e% [: x6 d. O) h6 I
  14. #include <map>. ^& q( y$ N! u7 {+ B" ^3 @, y
  15. #include <list>
    ) @! C# f9 o7 T8 _
  16. #include <direct.h>
    ; i0 Z0 b' q+ H" a2 [  D4 v
  17. - {4 c- _) h! k0 i* s& M
  18. #ifdef _DEBUG* M/ n0 ~/ o/ x
  19. #define new DEBUG_NEW8 V$ N9 X, a6 U) @7 X) w! J
  20. #undef THIS_FILE
    % `, @) Y$ F9 x: z0 c
  21. static char THIS_FILE[] = __FILE__;8 Y3 d! M: q8 Q- |( O
  22. #endif. @# v* r' u- x, k% r$ i
  23. #include "SkinResDef.h": M( w& V. ]( {( K1 Y7 S6 y: g: J
  24. #include "ChangeBG.h"
    " b" i6 e. J/ s" j
  25. #include "AFXINET.H"; Q& Y3 D; l0 @2 D
  26. " A; ]" j, ~: [7 c1 N+ A
  27. #define TRADITIONAL_CHINESE 0
    + t  T' s* u% B1 S
  28. #define SIMPLIFY_CHINESE 1
    : \3 C- C' h/ ^- B; Y/ |
  29. #define ENGLISH 2
      f5 b' f. x( h- o
  30. int m_iLanguage = ENGLISH;  w0 f1 g$ d1 d& m, ?" H% u
  31. /////////////////////////////////////////////////////////////////////////////
    & f! ~3 N  T* w) r# d1 m6 |
  32. // CRevAppApp% l+ t" B# x# t2 ~' U. d

  33. / ]; H9 o" ^- a. p- k# q6 v2 w- o: j
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)2 p& @! |! W8 i2 |, X7 J
  35.         //{{AFX_MSG_MAP(CRevAppApp)' p! s! t1 S3 H( z: T
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    6 e+ u6 z, L& x
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    6 _, I( B/ W0 d6 E0 ^6 R! J
  38.         //}}AFX_MSG$ F, S3 T3 Q% e
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ' z3 `& R& }& K6 m! J0 z, _8 _& b
  40. END_MESSAGE_MAP()
    " V& P' F- u$ a& m: c

  41. * e( ^- i2 y4 g: [" f; ~) f* K
  42. /////////////////////////////////////////////////////////////////////////////9 [: q5 S7 p/ E/ v
  43. // CRevAppApp construction
    " o5 I+ I" J$ B! a
  44. % s- {6 x6 L- u4 R' j, Z& x; ?
  45. CRevAppApp::CRevAppApp()- G. ^, |- W) O0 _0 v3 s
  46. {7 Y5 M0 f9 F% k3 a& x2 x& g7 B
  47.         // TODO: add construction code here,8 c3 T7 P( J+ n; i( _3 [4 p/ D) \
  48.         // Place all significant initialization in InitInstance
    # H8 j, m# ~4 y. m) N
  49.   bDisplayIsBig5=FALSE;7 L1 o1 v( `2 e# Q/ `) u0 ~# x6 {. R. B
  50.   bRestartUpdater=FALSE;! b. J- p' a) W( E4 g7 z
  51.   bFinishUpdated=FALSE;
    & o* \3 {8 u* X0 H' c$ N% D# s
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    1 a1 G  }1 z+ w7 y/ i- A3 ^( D( J
  53.   InitChangeDataBig52GBKS();
    . x; k  h3 @- o" f7 @
  54.   InitChangeDataGBKS2Big5();2 m# c9 t3 }4 G5 K. w3 c
  55.         //( o2 o$ z  ~5 @% ?
  56.         bClickRunExe = FALSE;
    & t- D- ~  c& z+ U! V
  57.         //* d& B$ {$ N% [) ]
  58. }2 ~" U% K* E8 `& ~! O
  59. * ^( }  z7 b# F" ?
  60. CRevAppApp::~CRevAppApp()' j9 q3 ]+ k' t& [1 T/ g' f  B( ~
  61. {! e* N! r' x+ p, Z# a
  62.         // TODO: add construction code here,
    . J8 h7 r7 [: u6 Y
  63.         // Place all significant initialization in InitInstance
    ' W2 n* G, b& h$ g) Q- y* i
  64.   EndChangeData();
    , N6 t8 i( n* j! d$ h  Y
  65. }
    - R" F( }0 }- r' c/ `, W' A

  66. ( k- s9 k1 V# J; K) X" S3 F
  67. /////////////////////////////////////////////////////////////////////////////
    6 H/ a# S& J* `, ^# {
  68. // The one and only CRevAppApp object
    4 {$ u& k5 Z' q& L  ?. V, V# Y
  69. ' ~5 G1 C9 n  [9 m* V- U
  70. CRevAppApp theApp;. V" p( \# I7 m  Q
  71. 4 w# w* p5 O6 q0 x( e+ w7 U3 K
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName); `! ~4 ~! q. c7 k; g$ x
  73. {8 |' }) N2 e' `  ^, k9 c, \  w
  74.   int iEOF=0;
    & _2 [1 A. \) I9 Q0 O8 F
  75.   char szTempName[MAX_PATH];
    3 y* H" ]' i- E! |6 S4 M3 w
  76.   *szFileName=0;
    + a6 U7 J% o# i  l6 p
  77.   iEOF=fscanf(fp,"%s",szTempName);4 ^  O+ c1 n; V" ]" U, @3 n1 S, C3 V
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')) J6 Z, h5 {/ R
  79.   {* o1 j/ k& k. ^% [+ n1 O- A- r5 q& p
  80.     strcpy(szFileName,&szTempName[1]);$ g8 ]- g* l$ {* t+ _  A
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF); e  T* m* I6 m$ X/ i: y; W
  82.     {
    ' g7 `. d8 m* A, {' B
  83.       iEOF=fscanf(fp,"%s",szTempName);: k  ?. [1 m6 e9 Z2 l  j( J; m
  84.       strcat(szFileName," ");
    ; U: y% I( \2 L3 l
  85.       strcat(szFileName,szTempName);: i% M5 n9 S* J+ X- i3 j4 ?2 A
  86.     }; N& u; f1 t5 E: J4 v' h. V$ X
  87.     if(strlen(szFileName)>=1)4 `+ K, t/ Z" c8 R# ?
  88.     {! l; D" R% J% M1 V
  89.       szFileName[strlen(szFileName)-1]=0;
    / H# K( {+ I6 `9 V8 a0 M
  90.     }4 ~5 U/ b: [+ f, d$ k2 O" P+ |
  91.   }, Q9 u# |0 l) e" o% P' \
  92.   return szFileName;
    1 f  b" H+ J) N! o! c
  93. }% I3 u' ]6 w( [9 j, v. b

  94. ! t$ ^$ {7 K& G" o
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)  K$ }9 r6 j( v& W8 A
  96. {; @, Y3 _( H- I. u+ Y
  97.   FILE *fp;
    : }/ L5 Y2 R+ W$ R4 I8 A
  98.   char *key=NULL;$ c0 j& J( q; b7 t4 ~
  99.   char version[MAX_PATH];
    % H+ b- {, l+ E3 V; P  p3 t" p
  100.   LPUPDATEFILE file,olds;
    % w3 \0 s' I! m+ r7 u9 _) c; |
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 M) k0 ^# H2 N' D7 I8 |" S2 u- A
  102.   y# U% b# T6 i: N7 y
  103.   UpdateList.clear();5 w7 g9 k$ p4 }6 I4 Z, F" d8 u* ]
  104.   UpdateFile.clear();6 J7 \# `1 {! W" c$ D
  105.   if(GetFileAttributes(filename)==-1) return false;
    1 ]7 A/ p! B9 x/ I) F: a5 f  H
  106.   if(!(fp=fopen(filename,"r"))) return false;$ v; \% K! k$ v. B5 ?! Z- ]2 g
  107.   fscanf(fp,"%s",version);* v' @7 g2 T% i, Z; s0 G- Q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ! i. w4 {$ L  z1 w
  109.   while(fscanf(fp,"%s",version)!=EOF)) @5 i1 M5 S* [( x2 k' M8 U+ ]2 _  i
  110.   {
    1 ?  G4 i1 {( r+ g
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- r! I6 d) Q: [  A9 {0 y
  112.     fscanf(fp,"%s",file->path);7 {( j0 I' R, Z. i
  113.     ReadFileNames(fp,file->file);
    : w+ ~0 j3 E+ C! y' O' Y
  114.     strcpy(file->full,".");
    ! I4 b" p' E" z& y6 ~
  115.     strcat(file->full,file->path);
    * N7 V3 i4 X1 ^# D" b
  116.     strcat(file->full,file->file);
    # V- M. _& f- V3 w: E' W7 v
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())! i: k$ E# _3 U. E$ F2 |3 F! V
  118.     {
    8 ~* j: z: {8 |' J1 X$ I
  119.       file->vers=(float)atof(version);, j% d; q) G7 H
  120.       UpdateList.push_back(file->full);
    # Z- e- j& X3 z% H1 `) M
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    8 o% g. P: H  N. b
  122.     }4 E, v' t0 e! c% p" V
  123.     else2 S" Y4 B/ E8 n9 a# c
  124.     {
    3 [- r; K, G# r# d$ \2 [- e
  125.       olds=(*p).second;
      v2 V( x: F2 n; e# K
  126.       if(olds->vers<(float)atof(version))
    + {. ~) W. h( o
  127.       {7 T& n  S$ k; c3 j+ m, k6 ?) j
  128.         olds->vers=(float)atof(version);: u# `4 T; Y9 q6 y1 j) }
  129.       }
    9 ]; S9 n2 H- s; a* E
  130.       free(file);
    9 k, _0 S5 B) ]" X! |
  131.     }
    4 ?3 T1 f& E6 I6 ~# j
  132.   }& d$ \8 M# G- l
  133.   fclose(fp);
    ) B( S* v/ ?" Z" D9 f) c# f! i* L# K
  134.   return true;
    ) b6 z+ h8 @! F( a0 K6 `* l4 a
  135. }4 K  b5 B" h) j4 K! f+ z8 p. C
  136. 5 T8 I3 o) R" ?0 ~! \+ a3 [
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    8 G* r2 B. z1 P* k
  138. {
    4 I: h0 g  o5 O$ ]
  139.   TCHAR  szFull[MAX_PATH];
    , E$ i. c. b% w, U/ Q& m9 r% J
  140.   TCHAR *token,*inter;
    - p$ d$ X: {' E. w
  141.   *szPath=0;7 K* [5 U8 v0 V9 s8 t
  142.   strcpy(szFull,szFullPath);
    - Y7 a4 Y5 r3 b4 R2 F/ h5 C  u
  143.   token=strtok(szFull,"\\/");
      T1 p+ w; ?: ~8 `# T
  144.   inter=token;
    1 [) N, s8 j/ F) m. g
  145.   while(token=strtok(NULL,"\\/"))
    ; l- B# A/ y- N) }/ {5 V( S
  146.   {
    1 E& u% D% j  K; h) e
  147.     strcat(szPath,inter);
    + J+ \- J; e6 C
  148.     strcat(szPath,"\");% @& K" F) l3 f% O' _/ S
  149.     inter=token;2 A4 t2 Z' _& B5 M
  150.   }
    # {% I: C7 w5 F: J2 N: ^
  151.   return strlen(szPath);
    / d9 r  O; B1 x/ k
  152. }
    7 ?* Z2 J0 C) ~) V5 v) I# [

  153. + D0 r* U+ K7 M, [* _  b
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)1 P5 |+ _) i( |9 s5 O, q  R
  155. {- _/ l; [+ Z; ]! f- E) M6 e' X- s" q
  156.   DWORD attrib=GetFileAttributes(Target);- D- M  z# Y7 G) `* z$ h# F' [  y
  157.   if(attrib!=-1)5 e. N/ ^% E9 M- z3 [* \8 y; L/ B1 Z
  158.   {1 R1 m$ I+ b8 k# j' i8 N! |
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)). h7 M; y% u) F6 t! o4 A
  160.     {' R! N. K/ K8 w  j1 I  a6 n, D
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : o1 H( U# ]) c1 _' C3 ^3 d& E
  162.       SetFileAttributes(Target,attrib);( ~. P$ t5 _# a3 g8 c; d& C
  163.     }' F2 x4 m5 _+ |8 P; V# {
  164.   }) J% H6 ~/ v8 A# F( K
  165.   CopyFile(Source,Target,Erase);* I% W( t0 _; y5 J2 m6 m$ b
  166. }
    % G, F$ Q) s% b: Q

  167. 6 _9 t$ {4 N4 R4 X. ?) t; @
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : Q- w% k1 F, h* q% P. T
  169. {3 i4 }' p- H- r; r
  170.      FILE *fp;
    ' K. C0 ]5 g; H$ d8 W
  171.      char  szBuffer[8192];
    8 |& U- e* `, ~. ]! t* H
  172.   va_list  argptr;6 |! |$ c% }2 h
  173. 0 ?; S( b+ R) i: L
  174.         va_start(argptr,message);
    : N( O/ j) l$ r$ k" T
  175.         vsprintf(szBuffer,message,argptr);
    1 R7 q0 t. m+ W/ {
  176.         va_end(argptr);1 J( |1 n2 `" C) F
  177.   fp=fopen(FileName,"a");
    # U6 k2 n: G7 h
  178.   if(fp)1 E# [5 n) B7 h: O8 s
  179.   {
    # i5 m( {" }6 m3 _+ P
  180.     fprintf(fp,szBuffer);  o* |$ h0 M# b: l8 W
  181.     fclose(fp);
    " c/ U5 [8 n- r3 @
  182.           _flushall();
    & s* G$ K8 O2 u9 F2 I9 Q
  183.   }; n9 g$ }6 ~9 D5 z; r+ o
  184. }" [# Z/ S  p9 v7 Y) L% ~# J: V: A
  185. 0 c' `/ P1 u% ?3 P' X' {4 i% z
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    " @2 B0 {$ U! p( l4 k6 B
  187. {
      A' K3 @/ t& ^1 r% ^$ K
  188.      FILE *fp;
    % Y9 @& t. ]& \1 p- K8 T; q, ~
  189.     DWORD  attrib;- f" R1 S; b8 E" v, v* _
  190.   attrib=GetFileAttributes(FileName);. j; B# f# z% Y: `& D, G: s! G6 p
  191.   if(attrib!=-1), T& U' Z! M- _; t3 g1 o) L
  192.   {' V; i1 n2 u9 i
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    : d' d- \9 h4 @8 b. N5 W; W
  194.     if(!SetFileAttributes(FileName,attrib))
    3 g6 G$ ^. _; m8 W3 ~# {1 {/ t6 O
  195.     {
    - I; Q' h( q. [; M4 y( U
  196.       return FALSE;# g' T( j5 n/ [2 z) W
  197.     }8 m- }& }  E8 \4 ?0 I$ j1 s
  198.   }
    8 R. w9 S! k, r! r& C3 h  W; u; {) r
  199.   fp=fopen(FileName,"wb");
    5 E1 H! y2 m9 z! ^" l* k: n
  200.   if(fp)
    ) z! P* ?; p5 C+ G! h) |; s2 F, t% @
  201.   {& u6 @7 M& O3 d. A
  202.     fclose(fp);
    0 ]' j2 Q! h5 C7 e1 ^7 D) G% ]+ o
  203.   }
    6 h, ~0 c) f- `$ o& Q; p9 a
  204.   return TRUE;
    " U0 _, P7 V2 w% _# O2 O
  205. }
    ' w) a3 ?9 H+ f6 \
  206. ! Z- u- n3 s" I
  207. BOOL CRevAppApp::UpdateLocalVersion(void): A2 u7 n. J3 Y. l
  208. {
    , x0 G% j1 k. f2 V: x( x  n* H
  209.   char filename[MAX_PATH];
    . V5 A) L. E% z  q
  210.   LPUPDATEFILE file,olds;
    , `" D# T3 k. e/ K+ q6 {
  211.   std::map<int,CString>::iterator i;  g9 ~% r. [: Y% x
  212.   std::map<CString,LPUPDATEFILE>::iterator p;. s& g6 o6 |$ k: ^# [" r
  213.   std::list<CString>::iterator l;
    4 U; F. f4 ]" V0 ^6 {
  214. ! }2 F) T* f4 m
  215.   if(bFirstUpdate)
      P6 _& p: g5 b6 O( B9 d2 R
  216.   {
    / y  I9 Y- C0 Y) i
  217.     dwCurrFile=0;; {: M) t0 D# N- I( q9 |7 w0 L; Y
  218.     bFirstUpdate=FALSE;/ Y! h" Z7 i. K9 Y4 C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + w+ B6 D6 f4 j  a* e1 x
  220.     {
    2 [1 S6 O1 I1 k5 ?
  221.       dwTotalFiles=UpdateLocal.size();
    7 S& ?& ], `: M' ?, G  d4 F
  222.       dwDownLoaded=0;
    9 w6 U% ?7 [0 z2 Q1 G
  223.       bSilentStep=FALSE;9 H$ M! `0 {6 `) v) R" S$ r8 o1 R
  224.       bCompressed=TRUE;
    % l# O! ^0 n$ ^2 I7 w0 C6 l: S
  225.       strExtLocal.Empty();' e' X5 {" f& y! {; T: `
  226.       strFullName=(*i).second;) W" ^8 z* g% q
  227.       dwProgramState=AP_CONNECT;% y! l" L: |4 V; \
  228.       return TRUE;. g/ d5 H) I! W. w
  229.     }
    $ W5 P9 s9 |& y! `" |: q4 L3 U
  230.   }
    9 p  g5 n/ p$ \2 d5 K. h. t  F
  231.   else if(bRestartUpdater==FALSE)
    / k0 B/ {' B' n# ^+ M; |4 h
  232.   {  j* t8 s$ m- ~# X8 m" G
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    . {* o0 K! V( T' S& K" c
  234.     {( `* d. F) W- g! h7 Q
  235.       file=(*p).second;# ?: [3 \2 ~& i
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())7 h0 k6 W( b. t
  237.       {5 o6 u$ D& K/ o1 i
  238.         olds=(*p).second;
    4 A+ R+ w/ H8 v: N  Q
  239.         olds->vers=file->vers;
    0 b. F- p1 k( v1 |+ U
  240.       }
    ' H2 q! @5 k4 T6 k/ S- m
  241.       else0 i/ D/ I$ k5 l( s
  242.       {% @4 {" m' N2 w$ a+ m% }8 H
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 B' X: k8 B- ?! j4 s! n
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ) u' _7 L9 u( d$ G, Q( e0 f2 S
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));) y1 b" [: t, R! k. K
  246.       }2 r5 G5 f% n% Y% ^, `& E
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");3 o$ h9 D) ]. N" o9 Q0 |8 }
  248.       sprintf(filename,"(%s)",file->file);% S7 H" q( o  }8 R0 X7 t
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# a! Z4 y% F7 X/ [
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    " r; v1 D- D) K: H# o6 q9 ~/ S; J
  251.     }- m9 Q4 F1 B& y
  252.     dwCurrFile++;
    6 L9 X, J1 {8 D$ J$ S( H
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' x8 @- K5 c# U
  254.     {$ ^) I( {# ^  D; h% E
  255.       bSilentStep=FALSE;
    0 _$ }# o5 M0 B* i$ l( l
  256.       bCompressed=TRUE;
    5 |+ g; l8 N3 l
  257.       strExtLocal.Empty();
    : f5 ^0 x1 B- q, w* }
  258.       strFullName=(*i).second;& j5 k* C( {& ], j( d
  259.       dwProgramState=AP_CONNECT;3 z, W0 Y6 Y# N
  260.       return TRUE;
    $ n$ |9 @1 V5 h  H: h4 \
  261.     }
    3 k7 i1 e2 ~) @
  262.     if(!bRestartUpdater). J  B( r$ f5 ^  l& F* y' @
  263.     {" j- N3 [" f7 Z. \) m2 Y
  264.       int iCurrSize,iFileSize;
    3 u8 F# w7 k6 r: @0 i! A' u
  265.       iCurrSize=0;
    9 l# b& G- d) k2 j5 E+ c& _! F
  266.       iFileSize=UpdateList2.size();9 i" d% j$ i7 F% C, _, J, f( q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");: I0 C7 S+ Z* |9 G1 ~1 Q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    9 h+ {( Z7 \  o9 M* j
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ) P" @* Y) L( E
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 I+ [4 X7 q& |: p( F* B
  271.       Fclearf(".\\update.dat");
    ' ~9 C9 P+ n8 v  ?- X" ^
  272.       Fprintf(".\\update.dat","Bloodyf\n");" t7 k4 i9 U) H# i  S- v
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / i9 h- Q0 Y, G3 c8 d* U0 l6 T
  274.       {  w& ?  y0 ~7 ^- Z$ ^* Q
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    % m4 L2 T! K. Z+ }4 B& h# W- M$ }
  276.         {
    ; V. ?6 t0 E. j0 u, [
  277.           file=(*p).second;8 o  `) E# `. t- x* A+ R. n, d+ Q
  278.           sprintf(filename,"(%s)",file->file);
    1 A/ K# i- Z" H4 ?: x* G2 e
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - J' t- N7 p& _( V
  280.           iCurrSize++;
    1 r. @( u1 L4 `2 C$ s2 }& _: y# x, P
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));- D) Q4 O1 M% B; y. H; Y
  282.         }4 A2 D" X( G% r4 K+ ^
  283.       }% U: d& \! y& ]  a2 j( ?& ]
  284.       unlink(".\\update.txt");* @! H( z1 X1 c2 b1 n
  285.       unlink(".\\update.tmp");
    & t# a, n# T+ K+ Y( ?6 C. g( ]  t
  286.       Fclearf(".\\checkversion.dat");( l1 ^, J7 {2 d, X. Y1 F
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    # J7 o0 o/ R& S5 D. j
  288.       if(UpdateLocal.size())8 r, k8 Z' l& o3 G+ `
  289.       {% v0 w2 j/ b  X! ]) o3 O( K6 b( [1 p
  290.         UpdateLocal.clear();1 B$ i( }% s! ^0 q) }: V$ S
  291.       }
    2 }+ F6 `% Q( E- E$ E7 b! c
  292.       if(UpdateFile3.size())
    & k5 C* i3 o2 e; F* x3 X
  293.       {
    8 u* j( }) k3 g/ M8 y4 s7 ~# I
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    0 d5 P' x- {9 C  J' l5 I
  295.         {
    ' m7 |8 q! J; l) X# I
  296.           file=(*p).second;  L4 H; z# Y; d' T, v. p3 q8 [9 J
  297.           free(file);3 F4 j2 {8 Y) T2 `$ h9 x$ K& O
  298.         }5 O! h- ?2 Z  z) [0 a
  299.         UpdateFile3.clear();+ O: J) l4 c( C- a! P
  300.         UpdateList3.clear();% P+ i: s, {" e7 u: |
  301.       }
    + H$ Q1 Q: s1 K& H- X
  302.       if(UpdateFile2.size())5 k! `9 G- }  l# X
  303.       {
    0 @! [, t" Y  D0 N( m7 H( p* Y6 Q
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    9 o  c6 ?5 @7 q+ }
  305.         {+ r: O" W6 k9 [5 H0 _  ]7 q; a! V7 n% d) b
  306.           file=(*p).second;6 o0 t0 t3 w" C
  307.           free(file);
    1 [# z: x- P7 M) |
  308.         }- E9 a4 T1 N! P8 m
  309.         UpdateFile2.clear();' w; x0 w6 |; l& ~
  310.         UpdateList2.clear();) h( l8 r" [+ e) S6 S; h! z) F
  311.       }
    & m# `5 U8 \4 z
  312.       if(UpdateFile1.size())
    - i3 `4 M4 d2 a& S* G8 Z8 l
  313.       {
    6 I7 G( u- I( {# g/ e# I4 @
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& x: m- Y, [. ?
  315.         {! k7 U7 F( {# F: ]8 ]4 h% P* c
  316.           file=(*p).second;
    7 X) y& V1 X+ a' G9 U: ]
  317.           free(file);, _/ y; r5 ?4 g& _
  318.         }
    . l* [& q: Z- i4 N: B* L
  319.         UpdateFile1.clear();$ Z( }" e* y# `6 u) r& B2 {+ d
  320.         UpdateList1.clear();
    5 [  c4 P7 E( N# s4 f
  321.       }
    " \' `9 ]' c5 ~4 ^* q3 z
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    * f4 t6 l, f8 J' s6 u6 `$ B: t
  323.     }' R# b/ ~4 x8 y( z: k
  324.   }. w2 R  Y; C& U7 r
  325.   return FALSE;
    + S8 M' j9 J+ a0 r7 _5 Q# w8 \
  326. }
    * H! G% x' q& r5 n* q" h
  327. $ F2 _6 x% h$ {6 v3 x% H
  328. void CRevAppApp::ClearAll(void)1 C' J$ O- T$ p' ^9 h: K! ^  j0 \
  329. {) m+ `7 u+ I! _; o1 H
  330.   LPUPDATEFILE file;
    0 O6 L* s7 f( w5 ^9 U  w3 y$ Z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;5 ]) D6 ^# A3 ^( x

  332. # @" ]) d+ s# F! G1 Y( B
  333.   if(UpdateLocal.size()): S3 D8 S7 T  g+ ~+ L3 j6 s  e
  334.   {7 m' T& m* C2 g: _
  335.     UpdateLocal.clear();
    3 R* T7 Z9 _* d" P( `+ J' s' X
  336.   }* t9 c/ V# {" c+ q1 o
  337.   if(UpdateFile3.size())
    0 u/ K6 R" M. `) a" `
  338.   {- I) w' `& E8 M( r/ E9 v8 P" c9 `
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 L' ~" `! Q8 F1 A9 n5 s
  340.     {
    ) N% K7 D$ E' Y2 x: B# B
  341.       file=(*p).second;
    - p! ?8 K1 ]6 ?3 O' e# Y+ U
  342.       free(file);9 g# M1 ^1 g" l5 O
  343.     }
    8 i* S  C+ f& s; x# u! y! Y
  344.     UpdateFile3.clear();
    + _4 F& \- U% k$ k8 m
  345.     UpdateList3.clear();
    % |4 T1 Q4 R. O. P% K0 J. I! I
  346.   }" ?2 w3 R) L4 \
  347.   if(UpdateFile2.size())2 |7 E- _4 v- P" p
  348.   {
    6 L5 Q' a/ M# k2 }
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 V4 T- p5 s6 z5 ^
  350.     {6 _" L) c2 D2 w! N  V4 q7 @2 S" d
  351.       file=(*p).second;9 {# s4 P2 l# j7 Z
  352.       free(file);+ B& I( M* O8 a; x0 ~* X% _
  353.     }
    : P7 R" U% f# o" c
  354.     UpdateFile2.clear();
    ( Q+ w+ T+ ?2 N, L
  355.     UpdateList2.clear();6 g- H; Q5 @0 `$ P) k
  356.   }
    2 m% g9 f) E) h, A. t
  357.   if(UpdateFile1.size())% n* U. g0 c5 \2 R+ k; @( x
  358.   {2 Z1 j6 m) N$ r/ ?6 J7 t  y- b
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : C- J6 o( K% c9 p  @# d' Q
  360.     {  X1 |1 B8 u6 J4 B& Z
  361.       file=(*p).second;
    9 {8 d3 F# V1 ]# }, K4 @. Q
  362.       free(file);6 H5 g3 c# V1 o& t
  363.     }
    & M% R3 o' p" o
  364.     UpdateFile1.clear();- |% H" A* y- c, P- i! z7 Z
  365.     UpdateList1.clear();
    " i* S0 r$ ?% X5 |
  366.   }. S$ P2 u$ I, z+ }4 r
  367. }  4 o: e3 F9 ]; {
  368.   
    . c5 D, y7 `- S, ?* E& R/ c
  369. BOOL CRevAppApp::CheckLocalVersion(void)  ~+ w$ o& r4 a6 g. p+ z3 m, T
  370. {
    8 m3 B4 y  m# v: D+ d0 Y1 Q4 x' T
  371.   int c;
    . o1 L. z8 M8 y
  372.   LPUPDATEFILE file1,file2;- L! Q* R# C3 ]( m6 I$ A4 z, F
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;7 Y# Y  b6 h4 r3 Y% ]" O% z; x: g
  374.   std::list<CString>::iterator l;
    . G' T1 {. ?3 a  q& d0 q6 }5 L

  375. " w8 P( f2 X$ D* Z' e
  376.   UpdateLocal.clear();' t8 q5 \! \( s6 _/ T. s+ p
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    2 c+ z: v* K1 L' ?8 P* e9 A6 i
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + J% B) S2 K4 j- `9 h/ l4 |
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);/ V' \; \' Q) T- M* @
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    / c& f  m% A) ^4 y1 H" Q8 [4 Y
  381.   if(UpdateFile3.size())
    0 i( v- a# I6 ^& D0 _) K) R5 p, @
  382.   {" H6 m# G5 Z6 {8 w" `
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)8 u" R- g; V! i! S6 i
  384.     {
    ( v1 t6 O1 E9 ~$ l
  385.       file2=(LPUPDATEFILE)(*i).second;) _$ u& V$ _- m1 x, H5 u
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# }, |. Z4 T1 p& v
  387.       {
      C( w% g; A6 m% v
  388.         file1=(LPUPDATEFILE)(*p).second;
    $ o/ S, \- q: b; K4 h4 I" n
  389.         file1->vers=file2->vers;
      F; Y  Q& d3 Q
  390.       }* a" q4 {# G7 h$ \
  391.       else) f# P( |- V) g" Y: k0 d# Y2 y
  392.       {
    % j) b1 h7 P( y  \) z2 S, ^2 H
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # J$ b' ~, `0 v9 w
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    0 @  H% c7 ~3 u7 e8 o
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));8 b* N' M$ ?/ ?3 C
  396.       }- K& K' N" e; A+ {5 S3 D
  397.     }+ C7 H' X5 `& {/ x7 h- I3 I* b* o
  398.   }
    ! \/ d: C* v. f
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( m2 ]# S% g. V9 j5 N
  400.   {
    ! I# C7 N2 a8 X+ ~; c  w. H$ z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())5 E! g( w/ }2 Q6 ]# H$ J
  402.     {- \' @4 w- \8 K9 l/ @
  403.       file2=(LPUPDATEFILE)(*i).second;
    % d) B, t8 Q4 a5 B
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - L" W8 k% ?& I" v# ]6 f
  405.       {5 v: Z3 H/ h( o8 V9 e8 G
  406.         file1=(LPUPDATEFILE)(*p).second;& [1 t8 Y5 F( i6 s. X& b9 i
  407.         if(file1->vers!=file2->vers)
    . B6 p# m6 _% w, b
  408.         {# }# k5 C' y1 p8 [6 B6 B! W8 p* Y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 z+ S6 g  A( i1 n& E8 C- b
  410.           c++;/ C% i6 i0 U' z6 D
  411.         }
    ' K5 I* M! i4 a: b* K
  412.       }* K8 A! ^( A" v$ O! n0 Y# q* W/ |
  413.       else1 q7 ]( P- c: A5 ^
  414.       {
    9 i' Z' B5 H+ j- v
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! e4 g" A, U9 @3 g1 y/ S
  416.         c++;, }8 M. D. d/ L! R3 n; W/ r
  417.       }
    ! I8 c% H1 B3 O$ y8 o
  418.     }  a) M# u! }8 X7 Y  Y9 [
  419.   }
    / {. S4 ^: R  Z/ T# r
  420.   unlink(".\\DownLoad\\update.txt");
    0 N, a5 N9 ~+ X7 e
  421.   if(UpdateLocal.size()) return TRUE;$ @; B7 X/ h; Y' A
  422.   else                   return FALSE;
    * A5 e. c) U9 E4 W
  423. }: ?0 w6 i9 F8 |0 X! E2 U; r
  424. 2 B6 B, e: N% D, F0 B, v
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"# E7 b# X3 `% A$ l( X9 ?
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"5 D* M* n  |- B  }2 y5 F

  427. 1 N  @& |( ]- P4 a& S5 L3 f- @
  428.   B0 _& d6 f/ p' M/ n% ]/ c/ ?: n
  429. ( A* e2 ^. M/ l( Q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    " [) G* S- q, L/ r
  431. {
    - r8 B; ]3 s) s" C: @" J
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    2 z8 B! [3 _4 P5 i: H$ ]
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 h6 I" Z0 l8 [4 |: E
  434.   {1 j3 c& ?5 ^5 t4 u  _5 k4 a
  435.     char szLanguage[50];
    2 ?+ M8 K. f% M! r1 S
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    - _$ U0 R: H0 Y4 l3 g  h
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* N/ ?9 @6 v: V% J6 \
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) S$ f6 i$ R6 R. N
  439.     else                                   m_iLanguage=ENGLISH;
    0 U6 t' H0 B( n1 [
  440.     char szRegister[100];% s. n$ ^# L+ M* }% @
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & K- r( z6 Q; |9 `6 _; `5 W
  442.     strRegsName=szRegister;6 |6 X" w! K% D+ w' I
  443.     char szPatchURL[100];, L' ~) G5 ]$ H  [" Y, x+ Y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 S' ]* `& H! }  u2 y$ o, h# v
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 X2 b0 m+ t( Z4 m; _
  446.   }) m- r3 s  }; w$ G: ~' N* p
  447.   else& d/ S3 I, Y. t+ e* ?0 a7 c
  448.   {
    0 B( W$ m* K# V$ c- R+ b/ c
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) M+ J: |( Y$ p7 \$ ^
  450.     strRegsName=DEFAULT_REG_URL;) u/ }- w+ {$ A" T; u
  451.   }6 V7 Z/ m3 {2 K' e
  452.   if(GetFileAttributes("hosts.ini")!=-1). b- f# u+ @% `  V: s. p) p
  453.   {
    - \+ G3 D5 @, s' d0 Q
  454.     char szIP[50];! q+ E: Y- f. T# {
  455.     char szDIR[300];
    5 A" \$ d& h6 K- h0 z
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ( j6 {7 |, |5 R, l. M* r0 X
  457.     {
    7 f; i8 }" ?( N
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* i* Q' ?. h2 e" F" [7 F& v- I4 d
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ' l* a; p4 @5 t
  460.       strHostName=szIP;
    1 X0 [' a* {7 I1 b" N$ w
  461.       strHostPath.Format("/%s",szDIR);
    % K/ ^0 E2 T8 H$ f$ h
  462.     }$ K) T* r  U& n. a: i% b. e
  463.     else' M2 [. S  H3 a
  464.     {) Z* i2 ?8 s# s
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " @' k$ \; w* I$ T
  466.       {
    + x! f+ M7 o3 D9 J
  467.         char szLanguage[50];
    : U6 `: E( u5 ~) t5 O9 s4 n
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . [& d( z+ s5 G$ a
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& c8 |* f8 Z; y" K* @; X; K: n$ Q1 G
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * V: P* I, F5 n5 l; y0 x
  471.         else                                   m_iLanguage=ENGLISH;! A7 G8 |1 Q. P8 Q0 z5 e
  472.         char szRegister[100];; X; n" e- y" J7 a
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , q7 {) Z/ ~' U" W0 p
  474.         strRegsName=szRegister;
    : y9 T5 l2 `# r9 F9 U' Q% ^3 }
  475.         char szPatchURL[100];$ N7 D" P3 I$ z8 Q0 i9 |5 @
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 s+ N9 S& F' o) T6 K; Z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  R3 R; Y, P( r3 f' V: ]
  478.       }) J# j$ k7 ~: v) {+ F3 K
  479.       else
    1 v/ j0 k3 w4 k" \
  480.       {
    * @; c& N3 `3 ~' t1 d- k- h8 v
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / V* p8 ^( N/ Z& N. @, i
  482.         strRegsName=DEFAULT_REG_URL;( a4 G( {' s& F9 u6 l
  483.       }
    3 E# }1 B9 |2 x1 T$ b' E9 T7 U
  484.     }
    , ]% g; T# [5 I* c: D7 t
  485.   }
    ; p4 O8 N" Z' z4 X( y# G% d
  486.   return true;7 o3 V2 l4 n  g$ B
  487. }
      j% U1 d. |: R) n: `+ v/ u9 T
  488. ! h9 I. a. E* |# T
  489. #include ".\ZLib\unzip.h"$ ^+ m, p! T( e8 u6 D
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);: ?/ D/ F! N  C6 d
  491. /////////////////////////////////////////////////////////////////////////////3 a" M, V2 P8 z3 I4 A
  492. // CRevAppApp initialization
    + h+ @1 c& _3 G( i7 ?/ l# D( i, t

  493. , s3 x/ @0 j4 O: j# z
  494. BOOL CRevAppApp::InitInstance()
    + h3 I( s2 ?) n- Y- K
  495. {# E- c( l; y! C" A7 J1 b
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];& I! j- C% [. v! v
  497. : I- w- Y0 Y& |" V
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    - k" k) o) r3 m. c# {" r% ^
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))3 B. s0 }$ p- H; h+ f, w
  500.   {/ T/ v  y5 r1 U8 H, P# n
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");( L! e% E. `3 X+ @
  502.     GetPathFromFullPath(szPathTarget,szPathSource);( D4 }5 G& k: j
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))). f( z4 E# k5 ^' N- `! \1 @; k# A
  504.     {9 P6 Q; v3 N& d4 N; W
  505.       strcpy(szPath,szPathTarget);
    % F! `8 h0 n) X' _* D/ C* C
  506.       SetCurrentDirectory(szPath);
    - f, |( U- {  s5 v8 O* u/ Z
  507.     }
    3 {- A! m$ ^8 h) _1 @! |7 O) G
  508.   }5 L# `* C& @* S0 k4 b
  509. #ifdef _DEBUG
    2 ^1 d$ ~& M! s& j3 L
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 m. m/ b2 _& T
  511. #else
    3 H( X* Z8 ]& T: m4 f0 _
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 ^0 U' @9 z+ y1 I3 k
  513. #endif
    . {: ~, s0 k5 y' N, }
  514.   {5 e: V$ r' {+ d  Z' ?
  515.     char tempFileName[MAX_PATH];5 M3 Q0 u- |5 ?: M0 i
  516.     strcpy(tempFileName,szPathSource);
    . l6 a, c' ^* d0 C$ j4 j5 O) H
  517.     tempFileName[strlen(szPathSource)-12]=0;: `) W6 y  b$ v8 O, v" }& Q! M% l
  518.     strcat(tempFileName,"\\$CSUpdate.exe");7 U* Q- L. f+ J; {6 [5 _
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    2 s/ l; V. M- Y2 y8 H
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);  f& A  ]1 R6 x! y8 C
  521.     return TRUE;
    % b/ k  ]8 D$ @: S! s( ~/ J
  522.   }- {9 j$ y- X3 p% Z" |2 u
  523.   // Nuke 0118: Delete run.exe0 S3 p3 a4 H$ q5 f
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );1 r% t) x" h  D: u& n- _
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    & F0 o$ H2 B0 R- U6 l. r
  526.   if(!ReadCfgFile("Config.ini"))
    9 g  Q! E9 l/ y* ]. M; K0 V' g4 j. h' @
  527.   {- i0 {/ N7 z. l5 o
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    " F% D! v0 {2 L
  529.     return TRUE;' x) }1 I6 `% A
  530.   }
    ) k7 K7 g) p% Y/ S! E% p4 x
  531.   HANDLE mutex;
    % i- ]( N" |1 f  s
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ i6 Q8 ]6 o3 b8 g
  533.   {
    3 ~8 ]% S* c0 F# y3 _' ]7 c
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)' d* j* o% Y# p. T
  535.     {, d$ ^$ ^- ~. T& V
  536.       CloseHandle(mutex);
    4 L# o0 G& W3 l/ J5 x$ q9 Y( M: A
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    / M+ |* N/ p! y' [# X
  538.       return TRUE;
    3 p% @; }7 |+ x6 f
  539.     }
    + X* n" G& W5 q: f: F
  540.   }  
    ( B( l7 r% s+ o  T4 M# `  A
  541.   CloseHandle(mutex);
    9 W: o% N  @4 Q! g* U: q& V
  542. 0 n4 ]2 j) l% [8 c
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);; Y+ l  [8 }& }% n
  544. . f8 m. }0 J* J7 _) [" c/ n7 Z. X
  545.         AfxEnableControlContainer();
    ) H. X" X' M5 K- X/ W
  546. 8 {2 C& j' A9 D1 I$ ~
  547.   bCanUpdate=FALSE;) j7 r3 \/ j! [. n: x
  548.   dwStartUpSteps=1;
    8 U# {* H3 O; n2 R
  549.   dwProgramState=AP_NOTHING;
    0 I4 V2 u$ ]8 o7 v, r4 N" q# h* R

  550. 5 r  u$ d0 u2 ]- W8 [
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) A. [( }% _7 I% H7 l$ x# n( n

  552. ( H3 E# T: A3 V" _: l, y
  553.         // Standard initialization! Q# \2 H+ R& F; g4 |, v
  554.         // If you are not using these features and wish to reduce the size. S+ S  j% j6 w8 U7 l2 p6 x
  555.         //  of your final executable, you should remove from the following- L: ^9 \5 O3 S2 e) a( |; T
  556.         //  the specific initialization routines you do not need.
    , O: }) P7 {3 f1 U
  557. 3 {1 j, Z; r) z+ p
  558. #ifdef _AFXDLL
    : v, _* S, j8 \" j' x
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL, _" A, V5 b& _; L" W* H
  560. #else
    : T* d8 C. C8 O5 i9 r5 s
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ' E7 y8 P( ~# M
  562. #endif8 ~% u* Q4 u9 ]: V/ H7 Z

  563. & h( T8 @" ~' e) K) ?: _4 M
  564.   dlg=new CRevAppDlg;
    & a: F2 B. K, \" e3 y! p
  565.   dlg->Create(IDD_REVAPP_DIALOG);  l% l, |4 h( F) R9 o+ J' M
  566.   dlg->ShowWindow(SW_SHOWNORMAL);# Y' b+ I& \6 ], o; `* C8 K
  567.   m_pMainWnd=dlg;
      e5 b4 L) j: {: J4 V0 {9 K

  568. & l1 Y8 ~, e" x; }8 c! T
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);- z  \0 i: H, L9 E. o

  570. 8 W) M/ z2 a# Q! B! `
  571. //  GdiplusStartupInput gdiplusStartupInput;
    2 }5 L# o: e6 g; z, x6 N* V# b# ^
  572. //  ULONG_PTR gdiplusToken;
    - ]4 Q# L# f0 H. @# q$ A( ?2 l/ I
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);, B! P$ t7 K; T( h" v0 Z
  574. 4 Z3 G# S+ o1 T* k8 E$ ^) ?
  575. //        CRevAppDlg dlg;( k7 y7 q" G% b, A. p* A! J
  576. //        int nResponse = dlg.DoModal();; l8 D$ H( [2 S$ }
  577. //        if (nResponse == IDOK)
    7 W* z. e6 ?" s  ]0 v
  578. //        {
    + n" O  L. U- O' L+ T; }% D
  579. //                // TODO: Place code here to handle when the dialog is
      a- {# j  C$ C6 K. `7 w5 l" x
  580. //                //  dismissed with OK
      d9 s" m* k, Y( ~; v" v3 w
  581. //        }
    4 B+ ?" o2 C% k6 F; ~
  582. //        else if (nResponse == IDCANCEL)
    7 E, C9 Q( v$ E2 K
  583. //        {+ I9 D- {9 R# ^  Q8 O
  584. //                // TODO: Place code here to handle when the dialog is3 n  Y4 c5 y% ^& _5 m
  585. //                //  dismissed with Cancel
    & g" d+ ?* ~  p
  586. //        }
    + \* _7 X" i0 m* A

  587. ) D- i$ E2 F% F
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    9 r- X6 f; D7 E5 j% q1 B3 I% n2 ?1 ~
  589.         //  application, rather than start the application's message pump.* g7 i  }7 @1 `/ f3 D' C! P; I
  590.         return TRUE;+ o& F! o( C7 |& A' h
  591. }
    + i. f2 M$ `# M! G  H

  592. 4 W/ F- X4 K% s- ~; n
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    2 e# e& z1 Q6 W$ i: s
  594. {
    * ~6 @( E$ k2 y; r
  595.   int i;" N+ U7 R; p7 W
  596.   char *szRet;
    0 X+ Z7 b2 h6 F6 V, N" ~
  597. 6 k1 _/ o1 a  _) |$ C! _' b
  598.   if(pSource) { itoken=0; sztoken=pSource; }4 C8 L) e  Z8 o
  599.   if(sztoken)# P! S; n$ h8 @% K+ \! J
  600.   {
    . P' o9 M/ r& u8 u- ]
  601.     szRet=&sztoken[itoken];
    / O( Q7 w, b! I1 X
  602.     while(sztoken[itoken])0 g( l  F" ?7 ~* r4 W2 B
  603.     {, i, @1 K! A1 M/ A  b
  604.       for(i=0;i<(int)strlen(token);i++)! m" J/ z7 `8 I" s+ B$ Z$ O
  605.       {
      s* ?7 ^$ g. z! w) u2 W
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    3 k  |. J7 T7 {' t# V
  607.         {
    2 C% S9 F# k/ x/ s8 n
  608.           sztoken[itoken++]=0;6 m/ W% L# d' J: Z+ k+ H
  609.           sztoken[itoken++]=0;
    ) H% ~  ~- y- c) M0 x
  610.           return szRet;6 p+ G! r2 X; x  V
  611.         }: Z  U! O2 ?$ j. B9 ^
  612.       }
    6 D# q: E) y3 {/ y8 i7 x$ g3 d
  613.       itoken++;
    7 L/ |5 r) a9 v' h1 z% F3 c. F: I' p
  614.     }
    % Q7 R& d. c2 y( N9 x& H
  615.   }# ^6 a! }' Q7 Y7 a
  616.   return NULL;
    ; i" V9 ~& P8 P8 x$ {- f
  617. }
    $ [" ]& f+ `4 q6 `9 F8 ^

  618. ! t$ O# Q% m4 A$ K% z; G
  619. void ProcessProc(long Total,long Current)
    . U, z) g" G5 x3 v; \
  620. {
    ) }# N& H& F* k9 J( _. e
  621.         MSG msg;( h8 I0 h/ V: ?1 B$ H3 J: V' V
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ) W* J1 @- t0 w- Z! E+ z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    4 s% N: d- s" q, {5 m' p
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))* s0 j% e* j& d7 c
  625.         {# @  b# J; o8 W6 h7 I* D- P
  626.                 if(!GetMessage(&msg,NULL,0,0))
    " Y0 c/ p$ b7 B" V0 i9 J+ Y% b
  627.                 {
    . e& s0 p- b$ E7 j) c
  628.                         return;5 d6 U4 u2 c/ Z. |* a, ~' M3 U9 e
  629.                 }
    $ o# V+ D% L* w$ j, T9 u8 E0 J
  630.                 TranslateMessage(&msg);
    ! [/ D$ ^2 A" u4 {! y
  631.                 DispatchMessage(&msg);3 U! o( ^+ ]) \
  632.         }        : J: d6 b  E7 t7 p8 P
  633. }
    . p! h' W1 H- t

  634. - o9 d! B: r* i8 W3 n% P
  635. BOOL bFirstChar=TRUE;
    ! s- c" y- U8 M" p( E( |
  636. 0 l& d( H4 N: P- a  Q& N
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    1 d! T  r% t# m- m9 W
  638. {
    4 E  o5 d& `# L
  639.         // TODO: Add your specialized code here and/or call the base class
    + ?) {( C. b9 p/ D; M! ~5 f8 M
  640.   switch(dwProgramState)0 S. s7 J) [8 [. X# d! m
  641.   {/ B& O0 ^7 Q7 h% v) z1 m; H% I$ p
  642.   case AP_NOTHING:! C6 i. ~+ B5 h* |$ J* u
  643.     switch(dwStartUpSteps)
    : J- I  @3 A9 I7 X5 c' F. E  r
  644.     {
    ; J# }6 r) n% V( s( {
  645.     case 1:& @9 }$ P( q: d1 i
  646.       {
    . ~# C6 X/ K+ P& J
  647.         int i;
    ; f( I* B' ^& w6 A; Y
  648.         CDC *pCDC=dlg->GetDC();
    * y' e2 S$ ]5 \" q
  649.         HDC hdcwnd=pCDC->m_hDC;9 c: Z# q3 K& [6 w1 s% H
  650. //        Graphics graphics(hdcwnd);/ a5 K( k+ d! \
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    , _9 D: R2 T6 e& r6 y6 B( g6 p
  652. //        INT iWidth=bitmap.GetWidth();
    % Q8 }1 {0 I, p- N
  653. //        INT iHeight=bitmap.GetHeight();6 J5 ?, g9 ]$ W5 w5 \4 z% \/ P
  654. //        Color color,colorTemp;: W3 I0 s8 R6 q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    % F- q. G8 U9 Q! I& j# ?5 N/ Z
  656. //        {: X- M* e) V9 e" S; v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)6 d  H5 E% J+ h3 ]9 v
  658. //          {
    4 K5 H/ x: |+ R" M, }6 j" w2 A4 n
  659. //            bitmap.GetPixel(iColumn,iRow,&color);! y2 v# V) e! l4 }; e5 D9 y0 w. M- h
  660. //            colorTemp.SetValue(color.MakeARGB(
    2 U5 W! X, M- P* B0 j! c
  661. //              (BYTE)(255*iColumn/iWidth),
    + u; d$ u3 Y( \  Y" b$ N* X* `+ G
  662. //              color.GetRed(),4 }4 @' @4 B2 |
  663. //              color.GetGreen(),
    , E( Y5 F+ v/ B/ g
  664. //              color.GetBlue()));
    " T; V. Q0 K/ w  Q& ~9 d7 A* W$ X
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
      V+ ?/ S2 R* s: m- x) X+ G6 N: R, z  O
  666. //          }, `" i+ U, U- L7 E" V$ j+ [1 [+ O1 G
  667. //        }
    $ d- n- A$ y2 A! n& ?
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);1 k$ b2 ]5 f( p! w# B) c" F- |
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" a, z; V( T+ q: e# j% @6 L
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ; c! I3 s. B% i6 w9 }1 J5 ?- _
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 I6 u/ [5 F0 f
  672.         for(i=0;i<240;i+=8)
    1 O. _. Y* w" e# |" r) U% |* M6 T6 V
  673.         {
    # c# i. V1 K; y, ?
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 a- b' J" f% m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / l$ @  r2 d# @( [
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( o3 I7 |, d9 Z7 q9 G5 R) K6 s
  677.           Sleep(33);
    + C" Z  |! n4 k! J* M
  678.         }
    / [: A6 ?8 k1 F& g& E
  679.         Sleep(1000);
    4 c1 x+ }8 l: t* s! i' u* b3 h
  680.         for(i=240;i>0;i-=8)4 j, \: D4 ~: {& G$ e6 I
  681.         {3 \) l1 `- S/ `/ Y' t4 v( k8 Q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - E/ b* }8 A) }0 d+ g7 U! H
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 p) l; v; r  E1 k& K
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 p7 e. ]' R! W' _, {  g
  685.           Sleep(33);
    4 X! @% Q* O. [9 }5 q% Q$ r1 d7 {
  686.         }+ h1 r6 s% ]" h4 }! p+ M' _
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( N6 z( q8 X- j/ H; `6 c
  688.         dlg->ReleaseDC(pCDC);/ R) c/ i" [; m0 F9 k6 T# P
  689.         DeleteDC(hdctar);/ Q; v/ F  y( z# X1 M& b: |
  690.         DeleteDC(hdcsrc);
    * T/ O0 u2 Z. @  B6 V. S  u# }5 f
  691.         DeleteDC(hdcorg);
    2 R. x" w/ S4 u7 t6 f5 _2 j: \
  692.       }
    2 z6 I) V) F8 M( I9 i- V
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);$ H* U- x0 A& N# g; Y# D, P
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    . F( O# m4 I' W: Q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    2 s2 l1 u9 h+ a8 N, b2 y5 w
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ) b% K. ^4 J4 r, o1 h* h% E
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* \7 b7 w: U. v
  698.       if(!Dn.Connected())
    # X6 n; R& `( z; X( u5 @1 q4 f3 c& j
  699.       {$ F0 i6 c& C1 T' S
  700.         dwTotalFiles=1;
    + U2 p2 P" G4 d
  701.         dwDownLoaded=0;
    ' m) j4 w( u3 C0 }( c5 V/ P' |/ m
  702.         bSilentStep=TRUE;, p1 C0 y2 k* I; z) }+ t' x+ i
  703.         bCompressed=FALSE;& U. x- Q" e/ i4 O0 E
  704.         strExtLocal.Empty();
    ( d" D" I% u9 n+ j& {# q
  705.         strFullName="readme.txt";- n, O1 A' B$ B5 L8 c# [4 N
  706.         dwProgramState=AP_CONNECT;
    , o3 y9 U/ s# j9 m# V
  707.       }
    + t  X$ q0 d+ Y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    3 W4 Z5 s" h4 f4 W6 U
  709.       dwStartUpSteps=2;$ \7 J) l: J; O* @( b6 d; [3 x  l
  710.       break;* m' E; ~# i  c/ W7 \8 e2 O- B
  711.     case 2:
    - g8 }! s  L! L. \/ H
  712.       {+ e. D, i& H4 N/ O+ `3 e
  713.         int iEOF;
    ; q3 \6 R) ]* C  Z* I3 Z" z) V0 J2 c
  714.         FILE *fp;* m  U4 R  F' R* ~9 G& u1 O
  715.         char szString[512];5 ^. A& G! R1 x4 G
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");1 @  A' C2 h" P
  717.         if(fp)
    + U% j% j( j2 w! u& N! L* c
  718.         {
    - r/ v' K& z/ G1 }
  719.           do8 L4 Z+ ?8 I3 e8 Z$ V% a
  720.           {
    & K2 J1 V* U- e" i9 l, A% U
  721.             iEOF=fscanf(fp,"%s",szString);
    1 ~, g. J  Q3 K- }4 E
  722.             if(strlen(szString))& M" X2 r9 ?  ^9 R
  723.             {% U/ b0 N" @! ]: p8 b& t7 ^
  724.               if(bFirstChar)2 |0 v. D; \- O6 Z+ i
  725.               {
    + H( _6 U* O; w$ Y" N: C8 U
  726.                 bFirstChar=FALSE;
    6 |, F( f  [: ~7 ^$ f) y1 ~
  727.                 bConnectIsBig5=FALSE;4 k% v' D  M& o0 O" A
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;4 j, I5 C0 p5 L: d- o# g
  729.               }
    ) v6 I, O: `' J- G4 R
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    - j- o7 U: w4 }+ b, G
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));  \/ `. [- [& i, o
  732.               dlg->m_ListText.AddString(szString);
    7 j( b# h, Z# H% d% X7 ~( U) ]: h  V# r" a# y
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( X* A% }$ j' v! _# |
  734.               *szString=0;$ h1 k# u2 t/ Z' V9 ?! O: U
  735.             }
    " ]& k7 P- P- V; R) W6 n' e' N
  736.           } while(iEOF!=EOF);2 ?# i  t% ]2 s+ k1 i1 ^
  737.           fclose(fp);
    ' l  @5 P: x% e0 ~) ?1 ?
  738.           unlink(".\\DownLoad\\readme.txt");( p" m9 n& a: N# s7 N7 h
  739.           dwStartUpSteps=3;  f3 G( e* W7 ~% b" l, x- c2 ?* Y
  740.         }
    ' v0 K# O2 W- ]" b# Y& ]6 A8 B
  741.       }+ x* W4 w6 T  U/ N) i5 M
  742.       break;
    3 {/ w9 u; H" r1 R
  743.     case 3:4 I2 V5 |/ u8 V8 r/ ?: z
  744.       if(!Dn.Connected()); N- N2 I) S9 q4 ~% X7 r
  745.       {
    6 y* d1 Y! e0 N2 D, t& X# _
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ) y% x: t" v- K# V0 z
  747.         dwTotalFiles=1;
    8 U; N) _- l5 b. F
  748.         dwDownLoaded=0;
    * G' l8 T( V2 B1 u7 G6 N& W
  749.         bSilentStep=TRUE;
    ) L, J, W4 s- ]6 u  B
  750.         bCompressed=FALSE;0 s9 Z$ W; L9 o1 C  Z$ x
  751.         strExtLocal.Empty();
    + k. k* [8 {, a+ |9 W& j
  752.         strFullName="checkversion.txt";
      F; S4 z; G* o3 U0 L7 q
  753.         dwProgramState=AP_CONNECT;
    " _' S9 R5 q  Z4 [+ x; x4 L
  754.       }
    1 a- P' o' u% e; E% s. }! x1 p
  755.       dwStartUpSteps=4;4 U! q' k* C; I# u, G
  756.       break;
    # |  k# Q& e$ L& F: p  \3 {5 y5 L
  757.     case 4:; _% {1 N" R' ?; V- {
  758.       {! r* }/ x! G$ s* a0 r
  759.         FILE *fp;
    7 g6 q4 _) Z5 H5 z4 Q( v8 \# f0 L
  760.         char szString1[128];
    ) D( \  `8 c; O. d" Y
  761.         char szString2[128];
    % G# W! s7 b* K+ o- r) i
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");. r7 p$ y7 W, a) d
  763.         if(fp)
    6 z! ~$ c; v! T: i) N
  764.         {
    2 d  {  p; m8 A
  765.           fscanf(fp,"%s",szString1);7 ^* h! ^4 I$ x" t
  766.           fclose(fp);: k8 }8 Z% M, N4 h
  767.           fCheckVersion=atof(szString1);
    0 c% a& p5 x" x: H
  768.           fp=fopen(".\\checkversion.dat","r");0 p/ t% V) C5 D/ }( S5 @
  769.           if(fp)
    ! W9 P( i. n, z9 J) ~
  770.           {7 }7 ~+ K% y7 q8 [3 [& D
  771.             fscanf(fp,"%s",szString2);
    . _, q' f& z- R! D/ s
  772.             fclose(fp);
    ! D( @& _! {# ?8 k$ g4 k- K" Z
  773.             if(atof(szString1)!=atof(szString2))
    : g4 n" E  R- n6 r! V6 s6 u0 r6 G
  774.             {
    1 o* p1 G+ m& F  \) ]5 R! K
  775.               if(!Dn.Connected())' e# d# U8 [6 g" [
  776.               {
    5 X4 C! a& p* o
  777.                 bFirstUpdate=TRUE;# N/ b, e! Q" s# I# D( B# h
  778.                 dwTotalFiles=1;
    - q$ j6 ~& w; d% ]* s
  779.                 dwDownLoaded=0;
    9 _& C! ~# W- N$ r! i5 w5 X2 }
  780.                 bSilentStep=FALSE;% d7 I( }0 [1 f" q7 B+ y: Q- R
  781.                 bCompressed=TRUE;
    # m' K: s9 F: _" [
  782.                 strExtLocal=".\\DownLoad\";* D" {6 N% q# L% ~
  783.                 strFullName="update.txt";
    % U- A) ?( A! x2 Z, L. y7 o
  784.                 dwProgramState=AP_CONNECT;
    $ }) I0 \, A3 k8 s4 h
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 C) p/ @1 E# @+ J$ U! m+ A5 J
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( V* }  [# c; N3 \' D( u
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % G: F" M9 b; O$ @* N* y& {
  788. / y8 e4 _  C! Z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  \% T) F' M; ?9 x+ w8 k) i, J
  790.                 unlink(".\\DownLoad\\checkversion.txt");* H- t- i, z# y0 `: P5 N+ w2 V
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)* B; D4 {9 N0 k5 K5 W& v' D
  792.                 {
    ! P: ]: r/ ^4 [2 i% t  G  Y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    $ ]! W4 H: x& t5 {! F) d
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");. B% _9 o7 V& s+ w7 i
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ; j  X2 j* A6 A! W  Y$ ]7 a
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 b$ o% F4 ~& G# s2 d
  797. 6 r! n9 ]+ O: B$ x
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    3 }& G; L6 y9 A) C
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : w  G$ o1 S$ e8 |0 U" C" w0 i
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");- `( s' n$ K4 k2 ^6 y- _
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 I2 S6 ~6 z  O. E/ D0 A4 v
  802.                 }& W: S: y4 \0 h$ F: ?
  803.                 dwStartUpSteps=5;: A; \2 ?! \# U9 Z% s
  804.               }
    8 `) e- f' o( J9 r0 N2 U
  805.             }" x9 L0 ^$ g: |* Q. \& M
  806.             else
    $ V# ^& y0 @& B) [
  807.             {
    : @  ]# ]" `. C. F& n2 C4 O; c8 T
  808.               unlink(".\\DownLoad\\checkversion.txt");2 C, M6 M, C4 a1 I6 e: {+ V
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 {3 R  s$ c  N. {# e/ M
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    6 D, f! S% Q4 y4 H
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");1 ~2 N1 B# M: _+ m) b4 [: S2 a
  812. 5 H& h& y( c4 j
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + z% v9 V' I- W  T# x+ Y
  814.               dwStartUpSteps=99;
    : [3 |. Z5 [) g9 S) W
  815.               bFinishUpdated=TRUE;$ X; P( `. B4 K0 Y. K/ w
  816.               bCanUpdate=TRUE;3 g1 p2 w! Q3 ]/ b
  817.             }
    8 u! \$ U% I8 i% v! V* r# l. p
  818.           }2 g0 A: }2 `4 Q# ]" `! k
  819.           else! L2 |  k9 F& D8 x* W% G1 Q- S
  820.           {. w% r4 N- K9 @; v  r) b2 N- K
  821.             if(!Dn.Connected())
    5 Q% g9 D' U5 L7 f
  822.             {& Y3 r* J$ B( Q1 v$ t
  823.               bFirstUpdate=TRUE;
    * T- t1 L* u& b; w
  824.               dwTotalFiles=1;
    5 C) c0 _1 P8 `
  825.               dwDownLoaded=0;
    ' z& D! G, I& S/ ]/ U: x% G9 f
  826.               bSilentStep=FALSE;
    8 L, S% F1 J6 A( Q
  827.               bCompressed=TRUE;* |6 s# j  v; L
  828.               strExtLocal=".\\DownLoad\";! u+ K. w6 L' q
  829.               strFullName="update.txt";- B! A4 i- y$ x& R  v! s
  830.               dwProgramState=AP_CONNECT;  o/ n5 s( v7 F, o" d7 ^5 o2 [
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , P; [7 `3 v! B! x. C& K% M
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    # C6 [/ Q7 M4 A) i1 l0 ?# M
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");0 h1 W) Z( S, V8 E. [2 c9 Y( e
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 ^' h1 l% r/ p
  835.               unlink(".\\DownLoad\\checkversion.txt");0 S. V+ e$ y, v5 `
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    , H8 J% f! N6 w: ?+ p) H5 ?9 m
  837.               {* Y( R2 q3 B2 {+ O) U, V
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");9 k0 `& P0 O# i, }5 p0 _8 I+ l* V
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    5 p! v( {) {+ W+ V( v
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");0 ?7 U; ?$ P5 B& M, c# e
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 \' h$ v+ d! F1 @
  842.                
    5 M# R9 a3 W( Z9 x4 ~" j" ~; ^
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  y) Q& z1 i2 e0 J( F
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, o' g8 B7 V8 P) @5 t& D
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");' j! T5 [9 Q" A  g
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' }" L4 {, i  v4 a) n! |9 e# @
  847.               }
    & u3 N4 W6 S( Z  P) @5 o" e. V- Y
  848.               dwStartUpSteps=5;
    % p1 n: y1 J7 E: T
  849.             }
    ) F# ^% r  B8 l4 U
  850.           }' ?  {- ^0 _& n' k
  851.         }
    4 B- D6 T, N% m5 ]
  852.         else
    2 w! l6 |0 Y4 g* I. |. v9 q
  853.         {" s& k4 b! u/ P  S0 h
  854.           dwStartUpSteps=3;
    2 ~8 O0 w( |  z! E. |1 f) }$ V( B9 L; u% U
  855.         }( n5 S. C! N6 k
  856.       }7 A! i8 t# f5 C) \
  857.       break;
    ; ~$ h( w2 Q0 t1 ]
  858.     case 5:
    6 N& f' K, d: S
  859.       {3 _; i# Y/ l  `" L( a3 }; j
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    9 K+ |  |. J" p% F
  861.         {! [4 |0 s) `7 q) A
  862.           int opt_overwrite=1;
    $ d0 i1 p- \; r+ Q& w" U, d! h
  863.           int opt_do_extract_withoutpath=0;
    ( f/ U! p) Q0 \- N
  864.           unzFile uf=NULL;
    % R5 O! h  ]& V+ O* ?
  865. 4 m% t6 A7 K! c+ j/ |1 U, D
  866.           uf=unzOpen("Wsa.zip");
    0 Y7 W3 b5 n6 ?
  867.           if(uf)& Y& k# }& \% _6 X/ B5 X
  868.           {$ x& F, a5 N4 {
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);) T# R% \8 ~8 O) |: m+ v! R- g
  870.             unzClose(uf);
    2 Q; M( j5 A5 r! n9 @+ j
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");. N0 o% a/ X% D) Q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");/ J4 p, a7 u1 Y  A4 Z4 Q  ]
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ' }3 J9 `) L4 K. U3 I) v( S- y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + K2 G  |( O! @/ T5 O9 _
  875.           }2 Z% t" @4 P. {6 O2 C
  876.           DeleteFile("Wsa.zip" );" p% L6 N) r: x& H
  877.         }$ g2 O: ~" s" M/ T; G5 c- r2 f8 R

  878. / P' }$ v# F9 w
  879.         if(CheckLocalVersion())5 j4 L8 u( F' N0 P. a
  880.         {3 c* \8 }2 U6 E) H% _
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");: U( m8 }3 X9 _2 U! d# j$ b5 Y7 b
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");3 h9 e% h; Y* D6 f: Q
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");, _6 ~& o4 n7 X/ o* v' V
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# x: d! H2 G( k' F  q& I
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);8 j6 Q6 n+ W, K) u. a
  886.           dwStartUpSteps=99;
    / B: N  {8 a& L+ ~9 K3 r
  887.         }
    2 h+ \  h# [. y" n0 F
  888.         else' V2 @& b; Z* h
  889.         {2 b* W. w  _6 v
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    8 ], V5 x9 W$ U3 W  M8 O
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");' Y+ h5 R5 y; M. e/ C
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");. j' E/ [* @- P' K0 \4 e

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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