找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
7 M4 r7 S  D9 |# J/ W& \
  1. / RevApp.cpp : Defines the class behaviors for the application.
    2 Z* X% V1 H0 R! W% F# Q
  2. //! C8 h, o0 T( }1 u4 N2 V" f
  3. 8 w' t% W$ z+ p: t8 f- t7 v3 `% s
  4. #include "stdafx.h"
    + Z5 H# R' g# A. e$ N7 v

  5. 5 B$ R: O- x3 t
  6. //#define UNICODE
    . D1 d9 \. M& E1 F
  7. //#include <gdiplus.h>
    / u) H$ i8 L) c0 ?' g# v  p" j/ S- S
  8. //using namespace Gdiplus;  d: x7 w0 O0 r* G% L- c

  9. ( y" U; b# p# P7 h9 R% |
  10. #include "RevApp.h"
    2 W" B" p. L; \# C- T
  11. #include "RevAppDlg.h"5 x/ a  G0 G! |% I2 k3 I

  12. : r; k" ?) H- B* O* O
  13. #pragma warning(disable:4786)% n  T( O( Z' @9 I+ ]' c4 [- e4 K
  14. #include <map>
    4 p4 `. r9 i; r$ _  q: V
  15. #include <list>' A' x) j2 @7 L  U* K- k; X
  16. #include <direct.h>/ ?3 u9 J! \& d# G1 C& ]! s. Y

  17. - X' {% a& n3 c# f. E0 ~' E
  18. #ifdef _DEBUG
    : P4 S, c+ Y1 y+ n2 i5 R) t
  19. #define new DEBUG_NEW5 ]. Q9 y* ^: ]' a7 b+ `
  20. #undef THIS_FILE' u1 ?" h* H- Y' @' X, U. ~
  21. static char THIS_FILE[] = __FILE__;- g8 @4 ~, u9 ^# j
  22. #endif
    ( U! g) H9 K, f+ Y
  23. #include "SkinResDef.h"
    : l, T0 `$ D, q: ~
  24. #include "ChangeBG.h"
    / G9 y# \( \' U- R( U- R8 a
  25. #include "AFXINET.H"
    2 ]; Q; [6 K  Z: F/ ^6 K/ O
  26. 3 y$ F& s7 x0 q) I* A, J$ G" ^( t
  27. #define TRADITIONAL_CHINESE 0
    1 y: w8 s! ~7 V
  28. #define SIMPLIFY_CHINESE 17 H& s( ]8 V* h8 }' [
  29. #define ENGLISH 2
    3 Z9 ~/ Y$ i9 b# B2 j; ^
  30. int m_iLanguage = ENGLISH;
    6 p! J7 l! |7 c7 X' j. [5 e1 A
  31. /////////////////////////////////////////////////////////////////////////////7 ~3 ]: Y0 N0 I- l) g/ r  N  h% f
  32. // CRevAppApp
    / r* ^- ?3 h6 m6 F6 W

  33. ) c" ~- K8 T* b. S
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    6 j) k0 L* f* a- T1 x0 a( u
  35.         //{{AFX_MSG_MAP(CRevAppApp)  K% |" O; B$ k. Q( A
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. h9 D" D8 `# f3 O- ?
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!# f: ?' H5 X8 |; Z9 H$ K
  38.         //}}AFX_MSG& E5 H' ?# V5 m5 q8 x
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)) ~4 ?; q& a$ I& X
  40. END_MESSAGE_MAP()+ d3 p: L- z3 ^! L  L' X. O8 D

  41. " V. a, ~* A, H$ m! o& j6 [; L
  42. /////////////////////////////////////////////////////////////////////////////1 U. ^- p8 @, b* B7 o! Q$ S
  43. // CRevAppApp construction
    . `$ V8 J) V9 [2 X5 g
  44. " G+ }1 p# O2 Q- \; P7 N
  45. CRevAppApp::CRevAppApp(), ~% S) F" H8 ~! N/ _. E# x
  46. {
    8 ?& ~- ^  _! a( T) E0 c
  47.         // TODO: add construction code here,
    ; [5 G, x+ K* O) T/ l/ j1 E; C
  48.         // Place all significant initialization in InitInstance" ?+ j( Q6 Q) x8 g- }% F
  49.   bDisplayIsBig5=FALSE;
    & @0 X" i' O, Q% v
  50.   bRestartUpdater=FALSE;
    + W  t$ ^4 G8 q2 I( T/ v
  51.   bFinishUpdated=FALSE;
      q* F; M" e& J: w- L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;" {9 l9 v: h" K# Y" r6 R* P6 q
  53.   InitChangeDataBig52GBKS();5 u$ o* `8 N. F+ a+ m2 m8 ]
  54.   InitChangeDataGBKS2Big5();! Z9 z7 z: ]+ U2 u+ r& O
  55.         //& ]5 s2 }$ N1 P
  56.         bClickRunExe = FALSE;: q8 z3 v2 ?! J+ m0 D" X
  57.         //
    ( e7 S2 T/ m4 r: U+ |9 n
  58. }1 l9 v3 X0 m. u) K9 |: a$ z" ]
  59. 9 P5 U4 g0 L  n- f' q! a5 x
  60. CRevAppApp::~CRevAppApp()  Z, U. Q: ?& i5 N
  61. {
    ) f4 {" M* F; O2 ~# \! T
  62.         // TODO: add construction code here," j4 y2 G/ f  X3 E
  63.         // Place all significant initialization in InitInstance
    ' n8 J3 p0 V( i
  64.   EndChangeData();
    # n# A9 d& ~9 m- i1 t4 U4 f
  65. }0 C) L6 X" h# J6 F* f

  66. 8 P! i8 F* c$ t2 F
  67. /////////////////////////////////////////////////////////////////////////////# f2 D) U+ s) u
  68. // The one and only CRevAppApp object0 Q6 O; w) i1 F! J

  69. $ f& e' y; N4 ^( b" f
  70. CRevAppApp theApp;
    $ J& x9 A) @# L# d- w8 B) i* [+ I+ W

  71. * U, G9 {: {+ H, m4 r
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName): l# r: {. v' ]: N6 O& n
  73. {
    + M, N1 }1 {2 e
  74.   int iEOF=0;
    6 x7 r& l' D" G5 T* A
  75.   char szTempName[MAX_PATH];9 z) U5 A; g3 F0 t; t' Z% m
  76.   *szFileName=0;
    - O/ E/ H* X. J' f4 a
  77.   iEOF=fscanf(fp,"%s",szTempName);' e- Y- q: `& t
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    + e2 _' j* |* v
  79.   {
    2 O/ Q4 e) E3 D) ^' n) i
  80.     strcpy(szFileName,&szTempName[1]);
    * v- N3 b+ q, [
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)! [0 s( h, c  Q# @
  82.     {
    ) C4 |/ t7 G  y2 }. J; r. W
  83.       iEOF=fscanf(fp,"%s",szTempName);: a7 h% _: u/ ~  q0 j
  84.       strcat(szFileName," ");
    ; A3 k/ m% d( x$ \+ v3 [$ ?( l
  85.       strcat(szFileName,szTempName);
    2 ^. }3 c* m9 s$ E( [0 ~
  86.     }
    6 I! A8 j8 s4 P& Q2 Y5 y6 z; D
  87.     if(strlen(szFileName)>=1)
    8 D# d# n$ ^* w
  88.     {+ D' m! N4 e  [. O
  89.       szFileName[strlen(szFileName)-1]=0;/ a- _# m5 Q5 U+ n! c: o
  90.     }
    ; P  f& G# h# w( I: V$ W
  91.   }
    & ~$ ^' w( w, ?$ v8 j
  92.   return szFileName;
    # D+ g! m/ L& z! I& A4 G. w; [
  93. }
    3 _% M! R  C2 C5 v3 Q: ^

  94. 7 a0 f$ r4 {  w. r& G
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( G' s; C" V6 H- u
  96. {8 _  M' a/ o. m. E& }) W: w% y* i
  97.   FILE *fp;
    1 T5 i6 D/ }& r0 j
  98.   char *key=NULL;; T! n  K) j. L; L
  99.   char version[MAX_PATH];
    3 R- g/ \. M) G8 h  a5 S4 w
  100.   LPUPDATEFILE file,olds;
    ' q7 ?) x* o5 y7 V" \* e0 g5 m2 o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" [: @4 W5 O* n* m* U# _

  102. ' z7 a7 v+ ]$ `- z- e
  103.   UpdateList.clear();1 K8 c$ p8 q1 n. Y3 h5 i
  104.   UpdateFile.clear();
    6 [) Z; M8 n  t: O) L
  105.   if(GetFileAttributes(filename)==-1) return false;
    0 T7 w- [4 Y4 G" t- S9 o( g. R
  106.   if(!(fp=fopen(filename,"r"))) return false;5 m; S. e+ L* s& p
  107.   fscanf(fp,"%s",version);" o  c' U1 \; w/ ~4 ~5 T
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    $ l+ Q2 m8 t' A: \$ l+ P
  109.   while(fscanf(fp,"%s",version)!=EOF)3 H" O& U. {6 ^) h3 H: S! f7 ^5 r
  110.   {3 q+ H! s5 k9 x# d7 O6 n1 J5 Y% b
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' d9 u( L+ G/ N) K. I
  112.     fscanf(fp,"%s",file->path);1 r; E! e# y7 L+ Z
  113.     ReadFileNames(fp,file->file);
    & O4 k* ?) U: {! _* Y0 O: l8 B
  114.     strcpy(file->full,".");! I, J1 W$ g. w9 K4 D. U/ q) \
  115.     strcat(file->full,file->path);
      w( m- T) D& i5 o
  116.     strcat(file->full,file->file);
    . b( m9 y& _$ X1 e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    , ]: V5 V2 w. T2 u8 |. Y" o& g
  118.     {
    4 m& d% c# b. L4 N6 ]3 p) C
  119.       file->vers=(float)atof(version);0 `! v( S# q8 x$ d0 C1 X
  120.       UpdateList.push_back(file->full);4 \6 G! F- F* H' L# K# |5 j
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ' C$ `" p- [/ U2 x& w9 P; E& E
  122.     }
    9 M8 ]4 _+ j0 j' ?$ I
  123.     else1 y; {' N. i3 i( l$ B# V1 i( e) p4 F
  124.     {2 K; a  D1 D& `; P; b' D$ \& n& A
  125.       olds=(*p).second;
    8 @  R8 X' k" K/ r6 l
  126.       if(olds->vers<(float)atof(version))
    9 r3 T0 s0 O3 M
  127.       {" c7 W8 t$ t$ x/ n1 w
  128.         olds->vers=(float)atof(version);, ]. T" j0 ~" H3 ~$ y7 V
  129.       }8 s6 x5 ]% \0 j1 a1 [/ F/ j1 G
  130.       free(file);
    8 @( ~' e% w- y7 c  O' D% b
  131.     }
    0 H  }: N; B+ d$ W2 a( j: c
  132.   }7 L4 O& k# Q  }+ w" [
  133.   fclose(fp);' D) o9 E9 p6 C. x, W6 N6 E- ~
  134.   return true;
    ) p3 z/ \) C; W" ^
  135. }; n0 Q, a& B# o* Q* V9 g, i5 @
  136. ; ^. w* `3 g8 r6 Z6 m  R$ Z$ n
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)4 f" ?0 T  j# q" `+ x
  138. {% A; {+ s0 u: a9 f$ W( r& L" B
  139.   TCHAR  szFull[MAX_PATH];
    $ ^$ G0 P1 [4 e
  140.   TCHAR *token,*inter;, \  |3 O: @/ r( n
  141.   *szPath=0;: Y4 {" u) I+ F
  142.   strcpy(szFull,szFullPath);, f: v) T! X, X
  143.   token=strtok(szFull,"\\/");
    + j% k. R  {- o/ S' T  C
  144.   inter=token;: a# F, r% r; Q$ z. l% C  ?
  145.   while(token=strtok(NULL,"\\/"))
    " Q( y0 p  \/ k) s
  146.   {
    3 M( y' Y/ F2 Z
  147.     strcat(szPath,inter);2 c3 ?* j2 m- v/ u3 }6 b  ~) T
  148.     strcat(szPath,"\");7 e9 m* Y& v+ a* W  V8 o
  149.     inter=token;! Y" G* V: H6 u2 Z' W
  150.   }
    ! ~: |( ^" x& c* U& g6 D+ c
  151.   return strlen(szPath);
    5 l; v& C/ W, v5 |& g6 h
  152. }# P, w) e9 U/ T0 P/ c4 C0 @. g

  153. ' h! k2 E6 x1 ^2 m
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 I' J2 h& t; t  K: W4 |6 Y
  155. {4 F4 p5 [2 {- ~! _, r/ t
  156.   DWORD attrib=GetFileAttributes(Target);- j4 z5 O8 f9 m' \
  157.   if(attrib!=-1)) K2 ^2 t& }% r2 j& @; f
  158.   {/ D) {" Z/ A# G) A4 T
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ( e: ~; _' q# s0 g+ Z  E  `
  160.     {
    6 z$ x& e8 b/ y: b) N- U8 C: R4 S
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    8 p9 o% |0 Z3 b8 _2 f" v6 `( f5 v2 S* P
  162.       SetFileAttributes(Target,attrib);6 D0 w6 g7 ^0 y( _
  163.     }* }2 p5 U# X! H: _
  164.   }
    0 l) L* p6 Q. i
  165.   CopyFile(Source,Target,Erase);( A' ?% b( o% h  Y2 i
  166. }
    ( H; o, [$ Y1 @8 Z- G

  167. 5 i, i1 k/ H& Z, s; k
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & |8 L, P- K  I7 h2 e  }
  169. {
    ( v  B: z; f7 ?5 L# N3 F
  170.      FILE *fp;- u" H% f. H  i5 i' c: W
  171.      char  szBuffer[8192];5 W4 E: u* j* D' D
  172.   va_list  argptr;$ V8 k  m  a* _! f5 j2 C! {

  173. . s' W3 `+ B- V# z! Y& q0 v
  174.         va_start(argptr,message);
    9 f8 T& q/ I9 h  o
  175.         vsprintf(szBuffer,message,argptr);- o. P' D2 z# ^% ]2 F% Y2 V
  176.         va_end(argptr);. W5 A6 @  B, Q0 m1 ?
  177.   fp=fopen(FileName,"a");
    # D$ P& Q' {8 M+ d: W
  178.   if(fp)
    & S' m# s9 x$ P7 P$ v
  179.   {- X: r0 r. w; M( E; d5 b6 F. y
  180.     fprintf(fp,szBuffer);- A7 ?1 a# O; L: I" {9 V/ G
  181.     fclose(fp);( g: l4 a% A# d- K# Y
  182.           _flushall();  G6 E6 Z/ Y+ B5 G
  183.   }
    4 W; x5 Q2 {+ w, ?# h
  184. }) a+ N6 Y/ J8 B! T. }+ P* V8 `

  185. . c3 K9 n" E% j2 t+ u
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 y7 Q" F& q4 ?2 q' G, ~, d
  187. {) L( \. R- n( p0 y$ G3 I
  188.      FILE *fp;* K5 I# I; M+ U
  189.     DWORD  attrib;3 h( E; W+ R4 q) ?4 d
  190.   attrib=GetFileAttributes(FileName);
    / @( Z: C2 L# I# C
  191.   if(attrib!=-1)
    . f, X1 C/ s8 [' n6 V) Q
  192.   {" _3 O- e8 |8 M+ ^; v! V9 N
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    - @) Y3 Y! o9 d+ |' f, J( s
  194.     if(!SetFileAttributes(FileName,attrib))0 ]. l  P0 u3 t2 v4 A
  195.     {' ^  s0 I9 ^5 N6 W8 o) W
  196.       return FALSE;4 S: x3 `( ]" B: R0 N
  197.     }9 W: `9 f$ P, ^4 J
  198.   }3 m. y6 S' C, L9 s+ \
  199.   fp=fopen(FileName,"wb");
    2 y# Y! U0 D0 I$ E# T
  200.   if(fp)0 I+ w4 \' u! B7 x0 s7 h
  201.   {
    ' c1 r4 s+ n) [# j
  202.     fclose(fp);. K2 W- L" C* o* ^: f
  203.   }! Y) I4 D) B: ]8 l2 f4 p4 ?( R# U  D
  204.   return TRUE;
    ; s' b3 l. N! w+ c
  205. }. V) F9 f- O3 \/ t# d* ?

  206. 2 L/ A0 X2 r& p2 f/ @
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ) u2 k9 B% U1 u: y' \8 u
  208. {
    / O$ M& F8 V" t& h9 x
  209.   char filename[MAX_PATH];
    ) b5 M7 D1 D4 J8 N" e6 r& y1 I0 Y6 T
  210.   LPUPDATEFILE file,olds;
    2 s4 w' h9 m( `% R
  211.   std::map<int,CString>::iterator i;) z* M$ U1 V( i0 ?1 Y
  212.   std::map<CString,LPUPDATEFILE>::iterator p;' j, J8 r$ p+ @4 R6 v
  213.   std::list<CString>::iterator l;3 c; I' G$ O$ S  O" A1 D6 |$ Q2 @* i
  214. : t6 H" Q9 I2 U3 K1 b; f
  215.   if(bFirstUpdate)
    , E8 R8 S+ \, N, s$ f
  216.   {0 K& Q& d/ t! _: o4 F
  217.     dwCurrFile=0;# e" ?8 `# |9 D2 A
  218.     bFirstUpdate=FALSE;
    ( F. c* p- Z0 L0 b. ~
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) u1 C; a8 f$ t2 t! S+ n" \
  220.     {
    1 B" l# t0 e2 Q# K
  221.       dwTotalFiles=UpdateLocal.size();
    ' C9 d: W! }9 r+ z4 u
  222.       dwDownLoaded=0;" r4 f1 o" F- o5 H/ W- p' m5 @
  223.       bSilentStep=FALSE;4 C% Y+ P: y* H" H  N2 w+ {
  224.       bCompressed=TRUE;% {6 ?+ i: T* ^7 d# W5 Q* S
  225.       strExtLocal.Empty();
    / D" ]6 z( E6 `' M
  226.       strFullName=(*i).second;
    # B0 q4 K. R; O* R( }( R" k
  227.       dwProgramState=AP_CONNECT;! T6 k7 l9 h; r/ S
  228.       return TRUE;
    ' f5 Y% F- N0 r8 W) ~( J; `* R
  229.     }& V' f9 a+ l/ {" k! {' ~: U4 k/ B0 ^
  230.   }$ e) ?' x8 {' D
  231.   else if(bRestartUpdater==FALSE); X9 k+ L; H% m4 H- l" @
  232.   {
    7 Y/ N5 d2 y( R$ S
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    5 |9 U! C" f! c5 x2 O! @
  234.     {8 l" W$ n  }4 b# x: l; F
  235.       file=(*p).second;
    + g+ X! }3 W+ x* e, z
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())* d: z: x, t' O8 W' z2 e: [
  237.       {
      `9 }1 Z: K' o$ C& K
  238.         olds=(*p).second;
    + l: h7 j. }  N1 v! u0 `$ n- D3 u, F
  239.         olds->vers=file->vers;
    9 O0 `4 g, M0 Z
  240.       }
    & G  ^0 [$ K) w$ a" `5 d1 M
  241.       else
    & Q1 a+ w! M( k
  242.       {6 P, w. X/ F" q# u9 d( p
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' g" f) T2 x) B- s) i. ]
  244.         memcpy(olds,file,sizeof(UPDATEFILE));/ J- S/ H6 W; ]+ S) k3 e
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    $ {6 X5 O/ F# c# C, x- ~5 l: E$ V
  246.       }
    & k% I+ c6 W) l/ f* J, A4 @" z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    % L6 f8 x$ A: L: Z7 s3 H
  248.       sprintf(filename,"(%s)",file->file);
    ) M8 h% @, n' c* D  C- P$ P
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 [( ~( o( |& R* O  f+ \
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }5 x) K" Y( r$ U7 {* z0 H- F
  251.     }
    # n8 _  x+ e4 X$ z+ t. E& ^4 y
  252.     dwCurrFile++;" T1 L* |$ X3 m2 n" u; J
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): d- ]! j7 \8 \$ l% z
  254.     {
    % E  t) d( Q0 l! H2 }/ `4 M2 J
  255.       bSilentStep=FALSE;
    ) `$ v& G1 c3 W! c" R
  256.       bCompressed=TRUE;1 |) r6 z  ~$ L6 H" G$ b
  257.       strExtLocal.Empty();8 ~; w% g7 B5 `5 X. P
  258.       strFullName=(*i).second;
    7 m0 g0 T( j* c8 H3 `% k; S
  259.       dwProgramState=AP_CONNECT;
    : ^+ |: }/ f, q
  260.       return TRUE;
    2 d( Y' z7 d- T& q2 U7 h
  261.     }
    1 x4 F/ F; i1 o% b
  262.     if(!bRestartUpdater); w7 k  w1 \4 I3 y3 I
  263.     {
    - d4 e. {  C6 O/ j3 `
  264.       int iCurrSize,iFileSize;% q! i/ ]) i) o' R) L
  265.       iCurrSize=0;
    0 L; C, o% p2 V$ x/ ^. V. g& S
  266.       iFileSize=UpdateList2.size();
    $ x* v" H& h; X/ t$ [; \5 f
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");& S; y1 [& N4 U- `7 T! Y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 E. C0 f" u8 g, _. F% o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");5 c6 L* k1 ]3 w: B4 W
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ E" L4 d8 f. [: J/ l2 B% P! U0 @# f
  271.       Fclearf(".\\update.dat");
    $ t3 g1 u  Z1 o/ y" v7 i% s/ [
  272.       Fprintf(".\\update.dat","Bloodyf\n");( }, [; y( z- d8 d
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)7 E1 Z7 D( I5 z, a- V$ x. Z: l! c
  274.       {4 ]- H  c& V( F- I1 E) L" [8 _
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())2 S8 |* |4 _. k9 m$ E
  276.         {
    , t* @. E$ s- X6 m9 P' ]
  277.           file=(*p).second;" u8 `: Z7 K, L" v
  278.           sprintf(filename,"(%s)",file->file);; i( R- G& b1 I+ u( h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 b/ X$ [8 m) e8 o  x
  280.           iCurrSize++;& N- T" |3 f8 g
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    8 q# H8 S3 H1 {9 d0 s+ J
  282.         }' d# U. o( ?2 U2 J: u6 |
  283.       }
    ( {5 @* R: j% Q+ O2 v4 X, D
  284.       unlink(".\\update.txt");! F4 D" {$ O6 U# G) F* |
  285.       unlink(".\\update.tmp");9 q1 J" M7 l- Y6 a/ {+ G1 J4 \
  286.       Fclearf(".\\checkversion.dat");5 D9 F6 l8 _5 }; F
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);( }3 P! h% E4 B3 a+ Y
  288.       if(UpdateLocal.size())8 s: N8 o0 T& ]) \; h7 E$ ?/ J3 d
  289.       {
    % h* b! `1 k" g2 J+ u% ]/ `" S
  290.         UpdateLocal.clear();
    : L7 d. o( R! H5 k$ X& u
  291.       }
    / L. H, _7 q2 i% N
  292.       if(UpdateFile3.size())
    7 E" a7 A/ H, A9 G
  293.       {; t7 T' E% B/ q- [3 B5 ~) {
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); q3 v+ j% I0 i+ P$ H
  295.         {
    9 A/ F/ U9 O) a' d
  296.           file=(*p).second;7 f) |) S  s& K; [
  297.           free(file);
    : V; ~4 ]% ^1 G5 v3 v. B
  298.         }& Z1 x) w  L% }5 [1 ~+ _
  299.         UpdateFile3.clear();
    ; L* I  I. i. b
  300.         UpdateList3.clear();. r3 ]7 {" Z0 w9 q: t
  301.       }
    $ d) o% Z4 W* |- B
  302.       if(UpdateFile2.size())
    9 _6 ~+ M! L7 j4 n+ j5 w2 M
  303.       {
    . v; l6 y+ h; T2 I& p) ~8 x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# C, T- t. E$ L1 r) _1 Q$ n
  305.         {% W2 K) [! s3 r/ h0 E
  306.           file=(*p).second;# }5 j& Q* M" E; ~( E) z
  307.           free(file);1 \+ u; ?. Q. l/ o9 Y
  308.         }  K- R" Z' f7 j. r5 y5 L
  309.         UpdateFile2.clear();. c3 x: e0 E2 D9 ]7 w, Q
  310.         UpdateList2.clear();; j0 d% D  Z1 A: j! g
  311.       }( M4 v5 {/ J8 @, ^$ _; E
  312.       if(UpdateFile1.size())6 a% U5 C( X3 `  Z, r
  313.       {/ R, c7 V! J  W( [" f
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ y( o4 G" d& O
  315.         {
    6 ]) @0 g, q8 U% s, c* O
  316.           file=(*p).second;
    * L& {) q9 m) p7 E3 J/ Z7 R/ \
  317.           free(file);
    $ H7 K7 N5 v! M7 U. ]
  318.         }" Y5 K7 Y' z, }4 `; r
  319.         UpdateFile1.clear();( M1 d; i( a# c/ C, \" K7 c, a
  320.         UpdateList1.clear();, p/ Z9 S) |5 a! W$ _) N
  321.       }/ U! Y, }9 y0 U1 u
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ f& i( P0 G7 v. ]( D7 I# N; `
  323.     }
    , Q" P0 O7 @: s. D* D
  324.   }8 w9 h% s5 j  S
  325.   return FALSE;/ G) C4 u: V8 N% h+ H
  326. }( G7 h3 y& I: L2 e

  327. 7 k% {* o% \1 R
  328. void CRevAppApp::ClearAll(void)+ V0 ]) u4 c+ ?, J
  329. {
    4 u; B/ s8 k1 D8 W* F/ b
  330.   LPUPDATEFILE file;
    4 J" j/ P3 D, B  n' c' L
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * b+ _6 T& k4 B
  332. 2 C0 ?; Z4 [; Z1 q' e7 E: q
  333.   if(UpdateLocal.size())" n7 I/ h% w" l0 f+ e. m
  334.   {. {0 [" G& [" y
  335.     UpdateLocal.clear();2 S" g8 z) `' _: }7 S6 {
  336.   }, d& [! Y& }0 d8 W( ~
  337.   if(UpdateFile3.size())
    4 j  B' Q; `0 r" L( G+ E' g2 ?
  338.   {
    : o/ ~- k( [, |+ ^
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 x" D# C& x2 I! W+ d$ o, ^
  340.     {: U- v& j% _2 ~% h1 g
  341.       file=(*p).second;
    5 i3 l' g: a, d  b! j* y
  342.       free(file);. Z' P: P* E3 ]9 `- @( F* c! u  i
  343.     }4 ?" ^6 y5 R- i) R
  344.     UpdateFile3.clear();
    ! J( y& i9 M8 p9 g! h& j/ p
  345.     UpdateList3.clear();
    + Z8 d: |# W* l7 M
  346.   }0 n9 b/ \0 T! d4 ~- o
  347.   if(UpdateFile2.size())
    9 q$ [+ I& V; D
  348.   {( M8 u9 d* C8 i/ E- d
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # S  ~! i! b3 L- P# B! E3 D
  350.     {
    + n, i/ q/ j2 O' C, V, \# x4 x
  351.       file=(*p).second;
    ' x4 c: X5 p* l+ m& w1 c! V" s
  352.       free(file);; |% W. A+ J$ X+ @; ^- X& }
  353.     }3 T& s6 H% m: z0 l% P; W
  354.     UpdateFile2.clear();7 t2 _+ I  q' l) F! S+ }, B% Y; [* e
  355.     UpdateList2.clear();
    / Z6 }: S* m( x6 h0 S
  356.   }: b/ s7 S# P. ]4 O: L5 o& e5 A
  357.   if(UpdateFile1.size())
    % C2 s# h" U% [" T
  358.   {
      j) V5 k0 M% I# [3 q, ^( H
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    4 g: ]1 ]$ Y# d6 i3 ?: F* u7 L3 A
  360.     {
    ! A: Y. e% r3 x0 ?* X5 ^* h
  361.       file=(*p).second;
    * d% w9 B/ z5 U2 @# R5 d& W
  362.       free(file);1 y1 u, ^8 G5 N/ u1 U
  363.     }" [: Z! ~( J  t& z6 e! K, I% @
  364.     UpdateFile1.clear();
    " s  D, O! I: ]5 U: e5 n: d
  365.     UpdateList1.clear();* ?. j2 e8 J* C4 O$ g4 n
  366.   }0 D% X/ R8 {0 k- t0 E
  367. }  9 g' i- _: Y- v/ d* @. v3 Z6 u
  368.   $ B! {: A  J2 ^
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    / w6 t( m: l% Q" L
  370. {
      p5 K' ^% }% ?2 `  E- t
  371.   int c;% t4 y; t' Y5 H) s
  372.   LPUPDATEFILE file1,file2;6 L2 Y# e( o9 B
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;3 T* x2 c# h; K) ?# U( P
  374.   std::list<CString>::iterator l;. k+ a5 S# Y& q. K% H

  375. 1 n' \) \1 R& y+ Y$ m# X. y
  376.   UpdateLocal.clear();
    ( |* C9 `" [' x# u& Y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);3 l* h, V7 r' u( \4 z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    % e  J$ T9 d, E
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    - b- {0 K0 x4 ?
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    2 B6 k& `7 o$ P0 d% h4 s2 Z
  381.   if(UpdateFile3.size()), U! r3 e/ u. A* p" p
  382.   {0 U1 j: D0 q" v) v. M* k0 E
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)6 d( w; @# S  V( _7 C
  384.     {
    1 L' A9 i1 }) A6 |; t* {: ^
  385.       file2=(LPUPDATEFILE)(*i).second;" Q4 l3 Z, V$ C* E! m
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      C  [/ Y+ W0 Y9 h6 e
  387.       {
    $ e' T8 A3 c2 x! U6 A* L" A) T' ?
  388.         file1=(LPUPDATEFILE)(*p).second;2 h4 G( d6 n, r7 o8 L, e& j
  389.         file1->vers=file2->vers;% l+ @' d: S5 |, [9 q: J7 F
  390.       }
    " y( ~0 A8 D2 ]8 O( @6 {1 {
  391.       else: g1 [2 W) D) s+ E, w, I+ F! g% S2 U
  392.       {# Z" i) D" E+ S' e! W2 _6 J
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ P4 B7 l- z; y2 E; V* Z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));& T3 X" J8 W6 a
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    / d4 v& g6 ]" O# F+ P
  396.       }
    & T- }: V6 A- o. r& K
  397.     }
    . b+ X8 M- @  ~/ {- h6 \0 S8 M
  398.   }
    " V) M$ i& ?. z* @# n# j. K" {5 L/ \
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)- S: Z# a+ G# a
  400.   {+ m3 P* s6 ]9 t) ?
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    . s& v! X& x8 A* Q& Y) ~
  402.     {, D3 }8 l4 m1 i9 U6 c4 j
  403.       file2=(LPUPDATEFILE)(*i).second;
    " f- H1 \7 l( n2 T' W
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : s! Q- @3 s, C# G6 z  R
  405.       {
    : V% Z! j' p, A1 }, V5 q! |
  406.         file1=(LPUPDATEFILE)(*p).second;
    6 ?' k, y: y/ @+ ^, v& ~' n
  407.         if(file1->vers!=file2->vers)
    # l5 F. f7 q( w9 ?1 y* W' M
  408.         {
    3 ^: r& @: U  E) Y, ]8 X# ~
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; W5 j* y4 q3 t) L( `- K7 J
  410.           c++;2 S8 G: E! Z* ?/ A4 B8 {
  411.         }; m) _- P! Y4 E, b# J( N' Y
  412.       }
      X3 L1 N  a: G, m# o1 ?8 f
  413.       else
    3 `0 I. k/ x3 y$ s! j7 w, |0 T
  414.       {
    ! W8 ~" L6 ~1 T5 U& U
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % h, j1 `" f! R& U, F3 N- U
  416.         c++;
    , v' Z, ?2 [  B8 D
  417.       }
    , B/ h$ M5 @8 L! k3 @
  418.     }
    0 b1 z/ r7 j9 Y0 a) Y# H- @7 G
  419.   }3 ^; B. o- L4 ?* Q
  420.   unlink(".\\DownLoad\\update.txt");
    5 h4 t* T" |' Y$ c: i& r" j
  421.   if(UpdateLocal.size()) return TRUE;
    + O2 G! D2 J" y7 L6 F  V' d
  422.   else                   return FALSE;- x9 z+ h0 b8 \9 z/ B
  423. }
    . y- p2 I5 [+ M: U9 {5 A

  424. $ g0 z$ x7 r! C$ ]" e/ m
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"+ b& H- k5 O& Z& U3 b9 i
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    6 Q$ y' F" g1 B: }  p

  427. + b) T/ z+ d& _3 Q8 n- f- _. }' L

  428. & `7 o( h0 B: y. m! g( k8 @/ x
  429. " i$ u9 l! F* ^7 X
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
      w) X! ?( s3 o. r3 H3 M
  431. {+ B% [# k& \: C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    0 G' j& E" Z' b, J
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)+ w' I) ^" d$ F0 r6 z) V7 l) Q
  434.   {
    - j. H: ?' ]+ c+ n. ~
  435.     char szLanguage[50];
    1 G! ?+ h7 S9 j( h3 O6 J) }+ x9 a
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");7 }" S! e6 ]5 g# C7 {* d
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    - o  H& }# V# N& t& A; I8 \
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* W/ l( ]& M- @& c' D" `
  439.     else                                   m_iLanguage=ENGLISH;
    + ]: S' w  n! Q0 V
  440.     char szRegister[100];+ o5 u  E; U6 _# O& P
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 z/ w( \$ r# L: q3 F  z% m
  442.     strRegsName=szRegister;  t3 P, [8 y, X% y4 B! B
  443.     char szPatchURL[100];
    ! u; c" t+ ?6 m( z& }( E# P
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , |* h3 v! ^$ K% o; u/ R
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 _0 }( Z# U* d3 N2 K2 @
  446.   }. o8 x6 x" A8 v
  447.   else; Q' N6 p4 X1 ]8 P# l
  448.   {
    : u' R7 F: ?5 x  m
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # P- u# ?; s& S6 k) d
  450.     strRegsName=DEFAULT_REG_URL;) b  g6 t: m- F
  451.   }% ]! a/ ]+ p- y5 J. F
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    7 y5 d0 [. j( J3 n( X/ O, K
  453.   {
    0 j  ^& O/ N2 c1 h
  454.     char szIP[50];
    2 \9 w# z6 p% V0 ?) S1 p( {6 y
  455.     char szDIR[300];0 g5 Y6 R4 r0 {  l  t0 u
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    5 C3 ~7 Q; N* R* X& f7 D5 R( M
  457.     {/ ?) [/ a* m/ C& \) ^
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    7 N& }/ V- G" y# r5 u' m- M1 k  ~
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 }( m. P2 W8 c1 B, C2 ]
  460.       strHostName=szIP;$ J! ]* O& |% Z  I2 R
  461.       strHostPath.Format("/%s",szDIR);! d) a& d; t) Y& k
  462.     }) g. W3 K  s& U& I' Z
  463.     else
    ; y- T4 w8 [: {- }, H/ a6 T1 B
  464.     {
    * B1 R& F$ j. s8 [. ]( v5 u" f
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 U4 a( O0 c* G' v
  466.       {3 z6 X% O0 n) {
  467.         char szLanguage[50];- v' A# y7 R' t* |- [2 y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* A5 V* z' O$ i
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ |# o4 f; f5 q6 `4 m
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # S0 y4 ]1 u" N* m! I" Y% Z
  471.         else                                   m_iLanguage=ENGLISH;
    4 x' H' c/ F3 \0 l
  472.         char szRegister[100];
    ' q& R# R  i; u  q4 u
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    9 q/ L  R4 h8 q% m4 d
  474.         strRegsName=szRegister;8 f2 n$ {3 Z! @, R* w* K
  475.         char szPatchURL[100];: b% k: @+ ?* I. v
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 X6 Y5 E7 G0 q0 ^/ Q) k  X
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( [1 t' i8 J3 A5 j
  478.       }
    ! \' q0 A- y$ g# g( m  [! _
  479.       else# |( {- z9 W0 p& C) n9 W
  480.       {! w9 b3 g9 k( n2 ?$ C% w# @8 _
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! O( U$ u% i* L: C
  482.         strRegsName=DEFAULT_REG_URL;
    0 k2 S  g! }/ g* X' b$ J) i* Z
  483.       }
    ' q/ i  D$ ^2 m0 |- ^
  484.     }
    ; v, z; [1 t5 k+ @! H
  485.   }, P$ q& ]- z7 l  v2 F; [; w4 U5 q, m
  486.   return true;/ a4 |* C7 q* ~
  487. }
    & G. ~, l4 I5 B

  488. " T) R; e5 A6 P( B/ X% R8 o
  489. #include ".\ZLib\unzip.h"
    # q4 L4 h9 L8 e/ D  A: ?% [& J
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    1 K: F- U. {4 v: _9 x: ]
  491. /////////////////////////////////////////////////////////////////////////////' Y/ j5 x% ?( r. t1 O" `6 v
  492. // CRevAppApp initialization, o4 K( M1 x6 u' A0 p, G% b

  493. ) l9 H& }8 L' g/ M& V) k% k  N
  494. BOOL CRevAppApp::InitInstance()
    . ?3 ^8 {5 w6 H7 N
  495. {3 @8 l8 [" J* m: H& y! g
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];5 o% N; J" P* O. B$ s
  497. 1 H; Y( y5 p8 C* Y+ U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    7 k" B) V! Y4 z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    6 A7 n2 K  K2 {4 ~  h
  500.   {1 W+ u- y0 M' @; }" T
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");3 d$ c' \9 Z0 ~
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 P3 T' c6 H7 u, {; }/ a
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 q6 ]5 Z: B7 Q8 H& l- h
  504.     {
    + z6 m1 C- `9 A$ }
  505.       strcpy(szPath,szPathTarget);& F0 q, d& s* u
  506.       SetCurrentDirectory(szPath);7 @& S5 J# `; |  G/ `* e# |
  507.     }
    . d4 W$ [- _5 T" T
  508.   }/ c( B1 m5 F. n: G
  509. #ifdef _DEBUG
    , k% ^6 @$ {% H/ B3 F! ]
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))* P  |% X( f* h
  511. #else
    - v; T0 ^9 M9 V7 [' f
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)): d2 J0 b7 `. V$ c9 y& F3 n+ C
  513. #endif
    3 D6 J6 v" |1 Z; D. x
  514.   {
      C" s$ B3 R4 K. a: h0 I
  515.     char tempFileName[MAX_PATH];
    + M4 }4 L6 d* {) L6 k# C
  516.     strcpy(tempFileName,szPathSource);
    0 P( K6 Z, c+ n$ R# ^4 i
  517.     tempFileName[strlen(szPathSource)-12]=0;  a+ B# P( U4 S' I% {. F
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    . F* s  V) F! P# ~3 E5 u) c
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);, ?2 {2 G0 o* u5 O
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    % a: i; H% \, D; C
  521.     return TRUE;
    # E$ w% t* A# [* D4 Y
  522.   }
    0 j. U, [* Y! G: p2 b8 h
  523.   // Nuke 0118: Delete run.exe
    ) Z- B  ?0 j% [! `4 B2 g( n
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    . f2 Q$ [* o& G
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");# V9 }3 C4 t& P) I  a7 X
  526.   if(!ReadCfgFile("Config.ini")): _# q/ e. w  U
  527.   {
    $ ^9 D8 g" ]" n1 ^& v- F. Q
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);+ V% W  t2 {( z2 [! _, I+ C' B
  529.     return TRUE;" r' T3 U+ k( d. X' {" R0 L, a
  530.   }% @. C# H8 C6 t% P
  531.   HANDLE mutex;1 j8 w7 P( T  ^
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 i& Y& x# b. q/ [2 k" D, B
  533.   {
    # U! @# h. P/ j# i
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)2 k7 W! H4 _3 Y3 M2 m7 ]
  535.     {% t5 ~5 \' ]0 ]1 [0 U* J
  536.       CloseHandle(mutex);( z3 J  y$ {( ]/ n
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);: ]- T# I& y$ d( N* t
  538.       return TRUE;
    $ b0 }! C+ Y+ c" N/ s+ ^
  539.     }% [  B/ N1 f* u" a$ ?
  540.   }  
    - Q% w5 t8 r( G# o3 A
  541.   CloseHandle(mutex);3 d/ ]" {4 t. @) b1 j

  542. , {* Z/ U2 x9 f, q
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    % E3 N$ f( X' B1 a7 i& l8 N* A0 o
  544. 7 A- I0 {# A: ^( k$ \& H$ u$ {
  545.         AfxEnableControlContainer();
    ( J5 \4 x7 W8 H+ b
  546. 0 P0 a+ d' _) }' C( L
  547.   bCanUpdate=FALSE;/ v0 N5 a4 r+ h1 f2 b8 g, ?
  548.   dwStartUpSteps=1;' R; C3 n& I: D) ^  I
  549.   dwProgramState=AP_NOTHING;
    % d# H4 n( c1 g2 z

  550. 4 v: J  R$ h8 ~
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    - X) U  H4 J* R. E! `

  552. ) T$ \/ W- k  U- {* V; v0 G3 n8 f
  553.         // Standard initialization  O' `# _5 v0 F5 _& W) i& G0 N: {
  554.         // If you are not using these features and wish to reduce the size
    ; W/ ?3 o8 B5 R* ^% B4 a! Y( q5 j# G3 k
  555.         //  of your final executable, you should remove from the following
    ) R& n- @  D0 F1 k  i3 Y. I4 p" C9 f  C
  556.         //  the specific initialization routines you do not need.
    3 N( q9 e1 Z+ k
  557. ) V' g$ c! q  `  V
  558. #ifdef _AFXDLL
    $ \3 \* @4 B6 ?* T  L' T! T5 w) K
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' p6 z+ `" O. n& M$ O, [
  560. #else; `: H. a% W( v
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( D1 \) }+ T* L- O0 q, `; Z  R
  562. #endif
    & t. u$ d9 D+ f- D
  563. & z$ I+ H2 R2 Q4 K: G/ X% ]3 n
  564.   dlg=new CRevAppDlg;
    ) R/ V" B) S' L+ m) J4 F0 F
  565.   dlg->Create(IDD_REVAPP_DIALOG);% f# i! ^  N/ O+ y
  566.   dlg->ShowWindow(SW_SHOWNORMAL);1 |3 y, a' A: j0 l+ ?! L1 ~3 T( @
  567.   m_pMainWnd=dlg;5 A7 D4 k4 U, i' ^; k' [

  568. 0 j  e/ m$ ~  i6 t9 X$ h
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);; G, D* E1 H! {# t' e, g& N

  570. , w) w1 m/ q: K0 o
  571. //  GdiplusStartupInput gdiplusStartupInput;7 q$ z) o$ y8 L. t& I5 \- P, F( p5 J
  572. //  ULONG_PTR gdiplusToken;  d& R6 g( W/ n, U
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    $ ~, \1 r1 I2 B/ ]6 h
  574. ' Y9 @9 e1 C# t$ [
  575. //        CRevAppDlg dlg;& ?* {1 R1 `5 l5 w6 O
  576. //        int nResponse = dlg.DoModal();5 A! [0 [  C: R2 p8 L# m
  577. //        if (nResponse == IDOK)
    0 U. f' a6 y% Y
  578. //        {
    6 h* J4 W. J9 N# z3 i& l* h( D
  579. //                // TODO: Place code here to handle when the dialog is
    ( [8 L" t7 X. Z
  580. //                //  dismissed with OK
    / x0 ?( s) _- ]: d+ l: P& L6 V
  581. //        }8 Z; a3 }! a4 c) M4 P3 E
  582. //        else if (nResponse == IDCANCEL)
    ' \' C' W+ \0 D- M8 s! l8 T6 d5 C$ F
  583. //        {
    ! r" H% S5 o4 ?0 Y  O. D+ s# V
  584. //                // TODO: Place code here to handle when the dialog is4 q8 x7 |0 ]8 g) e& `$ `
  585. //                //  dismissed with Cancel/ H4 [: u/ o8 U6 g1 u. J3 \
  586. //        }
    0 g$ S- L  m8 H" r* @

  587. ! u3 X# d: y  B% Q) D
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ' L2 I) O3 Z2 s
  589.         //  application, rather than start the application's message pump.5 A( G; D8 c- V$ U' l7 O) r$ r
  590.         return TRUE;( C1 B# }: o0 h) Q' A0 I, K# I
  591. }3 b+ {, J# N$ _- q

  592. 7 x% i" [# w& ?
  593. char *CRevAppApp::strtok3(char *pSource,char *token)  ^. t% z- J% u" |9 _+ j
  594. {
    ! W9 J0 M* c" B
  595.   int i;
    - r! A  e( v4 C! n
  596.   char *szRet;
    3 Q/ l  g7 U6 \) v

  597. ) j  p  l; Z7 z) T" k
  598.   if(pSource) { itoken=0; sztoken=pSource; }1 ~2 I6 s8 Z# f# B* z$ K6 X: W% I2 n
  599.   if(sztoken)
    - \6 {2 a' |9 V: m: I5 J2 r$ P
  600.   {
    * F) j/ H4 a) D& d" s2 x" t
  601.     szRet=&sztoken[itoken];7 E' O" ]: P2 Z, f% ^! F2 |$ g' ^$ g
  602.     while(sztoken[itoken])
    - ~0 ?; e; i1 Z" T& G
  603.     {, |2 L" g& c3 d: p
  604.       for(i=0;i<(int)strlen(token);i++)* e! L4 Z$ t/ x. T( H( k
  605.       {
    + G# |  d) ]5 e( J/ U1 A/ `
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    5 E, V& M7 T: W* g
  607.         {8 B+ U3 J* F, |& d. J2 M
  608.           sztoken[itoken++]=0;
    5 A0 O* i( I4 Q. s" Y
  609.           sztoken[itoken++]=0;
    0 S& B0 |7 |1 U* C
  610.           return szRet;
    $ Z' `: a/ q3 e. r' c% }8 \
  611.         }* Q) u% z1 W! S
  612.       }
    0 H! ]& [1 H6 I1 ~+ `8 D* T
  613.       itoken++;* f! z2 q( H+ r( {. o, I
  614.     }& v' m3 s5 x4 L7 X) K$ l
  615.   }
    / P4 u+ _9 G1 n8 m! @
  616.   return NULL;
    ; V& \( t0 I! ?! O
  617. }
    : {* g6 c3 o; c: W) R: V2 T

  618. 4 v3 k" r8 V4 Z$ {
  619. void ProcessProc(long Total,long Current)
      `- H- c) e- [! W6 K
  620. {
    ( l, c; j) z' C& l
  621.         MSG msg;
    2 z* v' a& K$ Z! ^) _
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    6 }  `7 g' |* S; ^
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    . s& s) j% R4 y9 Z; c# \: K) Q0 b
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    6 H- J, z! {6 @- M: `! X( u! j1 K
  625.         {" E, r7 ?' f3 i( E6 j# V# i: g" ^
  626.                 if(!GetMessage(&msg,NULL,0,0))
    * K' |" A" Q! j4 w, ^& d7 ~
  627.                 {% W' m4 [6 V/ W* S5 u3 d
  628.                         return;
    3 A% N2 w. W2 W# f: P' H/ m4 `$ T
  629.                 }# M5 h3 F" O; D3 G" B0 z
  630.                 TranslateMessage(&msg);' V0 w1 W6 w( g& h
  631.                 DispatchMessage(&msg);
    4 g8 S' E8 U' T' @5 y# g1 v
  632.         }        2 t( E/ {& N8 b- x6 p: A( a
  633. }
    7 p8 Y* N. E: L# _$ q% E/ `3 ]/ y

  634. . W0 Y! C+ k- V0 p; w* Z$ z
  635. BOOL bFirstChar=TRUE;, L' g! g4 o! j. S( V8 T' n
  636.   d' ~2 Q( b4 ]- N0 L% Q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)  d7 ~, |* h1 M: t/ b  Q
  638. {8 t& o, g& G% B" c
  639.         // TODO: Add your specialized code here and/or call the base class
    % g3 M5 V3 y  Q& U4 P. R
  640.   switch(dwProgramState)
    & r- i& m$ @* [/ J) `
  641.   {: d, A7 s* [2 X( [1 Y- }& x$ x3 l+ |# Z
  642.   case AP_NOTHING:2 N! l! _( _. Y( n5 G; A& r
  643.     switch(dwStartUpSteps)- b, E* V+ D+ M/ i! x
  644.     {
    $ E; {7 J7 N7 |+ p
  645.     case 1:) o( {" N; ^- p
  646.       {, q3 Z( G7 y- f
  647.         int i;
    - \% h. t9 n8 `4 A6 o( T
  648.         CDC *pCDC=dlg->GetDC();
    9 h4 E. o6 @) ]& v
  649.         HDC hdcwnd=pCDC->m_hDC;
    . n8 Q' ~7 j" I" m1 }
  650. //        Graphics graphics(hdcwnd);% B) _0 c6 L0 A0 S
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");, ]5 B1 H! a" y* ?$ p
  652. //        INT iWidth=bitmap.GetWidth();
    ' d5 F% X8 x. x" F: l2 B& s0 y
  653. //        INT iHeight=bitmap.GetHeight();
    3 W8 d' n" {  G. U: F- f9 H8 x
  654. //        Color color,colorTemp;: e9 x+ l! |# z) ^% y6 r1 w  N
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & L) Q% Q9 @5 |6 j. X$ Q
  656. //        {
    9 p* m9 h* {% o. C
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    7 r, ]% z2 F! e: Y6 D
  658. //          {9 ?1 C# r) |/ w, X0 M; r5 a
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    " w: K6 \2 M2 {6 D4 X
  660. //            colorTemp.SetValue(color.MakeARGB(
    ; T( K8 e: @- d* B9 p# ]7 h  t
  661. //              (BYTE)(255*iColumn/iWidth),
    1 h: R8 v6 o  N1 U- O
  662. //              color.GetRed(),
    + M/ ^0 c& `9 j
  663. //              color.GetGreen(),
    , O0 J- h  H" @- Q
  664. //              color.GetBlue()));
    8 X  m4 i. C% Z9 _/ L& }
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);% L1 d5 i* g2 w- d
  666. //          }4 [7 W3 A9 }- v2 u# x1 q* O' G
  667. //        }) Z5 b6 V. b/ g  `  K* Z
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);9 m5 G( ?8 I8 r) p5 {: W( b, h
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; k! k9 W& X1 n  O4 m
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");! b  L8 T2 c8 Z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 \# A% p% m0 v$ s  {( A
  672.         for(i=0;i<240;i+=8)' q4 S2 }+ F+ l2 l: T7 X2 J
  673.         {1 Y( z" g5 a5 H% {
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( i; m, T# ?/ o' d
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - @7 I% P& l6 k4 N# q) o3 i4 X
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" N' M6 q0 F" o* q  V
  677.           Sleep(33);
      S5 U6 h! F5 m: l1 p! T
  678.         }
    - I8 y; X9 o0 r( P. D- n7 [' p2 K: Z
  679.         Sleep(1000);
    9 ]) W$ F  H4 ?5 `
  680.         for(i=240;i>0;i-=8)
    : G/ H+ Y3 k7 X; g9 ^1 H
  681.         {
    6 b, _8 p3 n  l2 _
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 i0 x! C" U" z; l  K
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 M% V& D9 `3 I7 c+ y! E* [
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' m+ q; J, i; ?
  685.           Sleep(33);! }* r+ a" f, B) R" _. i  v! Y8 ]/ J
  686.         }/ C2 _" \9 g4 f8 I4 ?
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);( f! V' L  K. _
  688.         dlg->ReleaseDC(pCDC);" L7 K0 W7 {# `, R; |+ s, v
  689.         DeleteDC(hdctar);7 {4 g% N, X* M& D) J$ c
  690.         DeleteDC(hdcsrc);& r2 S8 h+ F2 f/ `: B
  691.         DeleteDC(hdcorg);
    8 l- t0 s2 ?4 F( `
  692.       }
    % T% L+ {% Q$ F: q- B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);+ H" `  n) J5 E3 _( p7 Y) C  r
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    % j( g3 j* p! Y! R: @/ w% G
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");# y$ U) |5 v1 j' c! i7 ~7 h
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    2 J3 e0 A# b# f6 m
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. X' U. n3 A' c8 ~3 A3 m' s
  698.       if(!Dn.Connected())
    1 b4 F- w0 u0 w4 O9 I3 y8 r% w
  699.       {% ^' D. l0 b9 i/ E3 u4 B7 ~! U7 }) Z
  700.         dwTotalFiles=1;7 }# k* N5 f  c; c* V
  701.         dwDownLoaded=0;
    9 ^8 R( q, g) _5 f/ T
  702.         bSilentStep=TRUE;
    ; l& z+ w' r7 H- g
  703.         bCompressed=FALSE;
    7 J- t* L( k6 B
  704.         strExtLocal.Empty();
    / o. \, P7 W+ L/ r0 ^
  705.         strFullName="readme.txt";
    ; q) W, W4 c: o; z4 O+ }
  706.         dwProgramState=AP_CONNECT;( ]" v' k; F* b* r( x: F
  707.       }
      x( U3 v: p. v
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();0 y) b8 H0 a2 k1 x
  709.       dwStartUpSteps=2;
    . M; B8 ?7 v9 ~! U- U* T3 o
  710.       break;
    : \; k! L7 ~# q2 _/ [
  711.     case 2:
    % P; X, B3 H4 [1 P* S: h  X
  712.       {# T$ h& _1 J2 S4 _( i: x: s/ K2 }/ q
  713.         int iEOF;8 [% N1 `% H! H" X2 v1 z4 _+ k
  714.         FILE *fp;: F& j1 o2 J  m8 o: o% M0 I
  715.         char szString[512];' {9 x7 X1 o& ?7 ]9 U
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' ~0 `& i. j/ ]* e0 c# }# `
  717.         if(fp)' b9 J: Q7 L2 C$ e; K' s9 E+ z
  718.         {3 B- R9 [: N/ B
  719.           do
    ! ]7 Y2 k5 M$ s' u
  720.           {
    9 K; ^3 K0 b1 |& J
  721.             iEOF=fscanf(fp,"%s",szString);& L2 D0 P8 y& i; K# n; `
  722.             if(strlen(szString))
    - V3 A$ W: l3 i! S) o
  723.             {
    : b% R  |1 O. w6 ?& Y$ ~& @
  724.               if(bFirstChar)
    9 E/ A- o2 V: ]' v7 K
  725.               {* ?( S! f( A0 I5 `
  726.                 bFirstChar=FALSE;8 G4 ~! E, a: s1 Q
  727.                 bConnectIsBig5=FALSE;
    : ^$ v: H. e5 w9 [1 J! Q7 ?" N4 H
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    * C# N9 ?: C, c- d
  729.               }
    $ C7 h% }: ?2 Y+ r) \: I$ J
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));6 C. U) D+ c1 |/ _
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));8 {- H, ?8 u' e) f) k# j+ a2 `
  732.               dlg->m_ListText.AddString(szString);% C8 H+ h( L' D" O  S
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 u# f3 O4 N* W( U0 J$ d( K
  734.               *szString=0;4 g% E1 z! Q- a1 V# D
  735.             }
    " i  w; R% ~' u
  736.           } while(iEOF!=EOF);; Z8 Q: A' k  i& p3 f8 i9 ?0 m
  737.           fclose(fp);
    $ J0 s0 K% j7 y0 F# f7 q
  738.           unlink(".\\DownLoad\\readme.txt");
      T4 d' R* K- E# Q( |+ }) X% f
  739.           dwStartUpSteps=3;
    5 F) n: [* J6 _/ `
  740.         }
    . k: i4 i' O8 v( A
  741.       }
    / B0 v  _$ X  N5 m8 X. w1 D
  742.       break;
    ! @0 T, o+ m, q7 t1 i/ D+ m
  743.     case 3:1 S) E9 D# H9 p( [; w' p! y  }- K
  744.       if(!Dn.Connected())
    ) b) z) {4 Y: Q4 K. I
  745.       {- U  ]8 o( w& e) d! |( t
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    2 T. ?$ y1 P% ^) O8 \
  747.         dwTotalFiles=1;
    : M% B" }( e4 Q. P
  748.         dwDownLoaded=0;
    # U# P$ h+ z: c6 w' _
  749.         bSilentStep=TRUE;: G* [" N( ]4 _7 Y
  750.         bCompressed=FALSE;
    * r/ `" g8 f4 i: g9 `
  751.         strExtLocal.Empty();+ d9 N5 m, P- m8 i9 \- p; u2 U5 B9 n
  752.         strFullName="checkversion.txt";5 D* O1 G3 l9 i
  753.         dwProgramState=AP_CONNECT;3 H/ d% m) u; X1 K# U+ `
  754.       }2 m8 t: T& v; N. K7 F
  755.       dwStartUpSteps=4;
    0 y) H6 t- n4 U3 U7 t' n1 }
  756.       break;
    , N; }8 h5 T0 t7 J0 W& M. }
  757.     case 4:5 F* S2 `0 h0 _* G9 x- \! N
  758.       {
    " c& c" V2 u  |" p; U* x  E
  759.         FILE *fp;
    2 M0 U4 _  S* @/ X3 U
  760.         char szString1[128];
    % T" n) @% M! K: g
  761.         char szString2[128];0 Y; W. K7 ^; S) j
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");% k) \/ N! e+ y  `# |3 c% |7 ?
  763.         if(fp)
    - H2 o' F$ z" V3 ~6 J, L
  764.         {+ k* t3 k% e! e
  765.           fscanf(fp,"%s",szString1);8 \3 l- J* P7 P. ~/ Z
  766.           fclose(fp);
    . b/ f' i/ d0 [. L& r* X
  767.           fCheckVersion=atof(szString1);* b1 c9 X8 E! Y  D- `6 W9 C& y- N
  768.           fp=fopen(".\\checkversion.dat","r");: b% c5 K  I: J% _& a4 Z$ o# T! G
  769.           if(fp)
    & N7 D. e! V$ r: j0 D
  770.           {
    , F( q( w9 y# `5 M  R% j* y+ j
  771.             fscanf(fp,"%s",szString2);4 r* H# K5 j! E: u. N
  772.             fclose(fp);
    . Y$ w9 ^" Z$ v, V
  773.             if(atof(szString1)!=atof(szString2))
    . E, }/ g- h. s& d# [
  774.             {
    7 `! q( P8 C! j! t, n* C
  775.               if(!Dn.Connected())3 C: G& }* W/ V2 Q2 X( ^3 `
  776.               {  y" s. a/ V0 Y' D$ ~2 k8 C4 d
  777.                 bFirstUpdate=TRUE;+ Y$ g& |5 a' Q) M; k# D4 P
  778.                 dwTotalFiles=1;0 f+ b$ z* S* M' @0 n' U
  779.                 dwDownLoaded=0;/ A6 R3 c* o- W0 `" t# p( Z. P
  780.                 bSilentStep=FALSE;
    " I1 z' [  B# T7 a- A6 z. ^
  781.                 bCompressed=TRUE;
    4 T$ @) F, e& A% x- s
  782.                 strExtLocal=".\\DownLoad\";
    : C  N* C. ]" G0 U
  783.                 strFullName="update.txt";
    , j, e% ~/ ~( s, o
  784.                 dwProgramState=AP_CONNECT;# k5 k2 T" R1 \) o! b/ X
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * o" X2 |7 \5 M: |# X
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");! ]3 z$ I/ _* S: I
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");% I8 J! a2 C) Z( I

  788. 9 @( }9 N6 S8 G% X0 k0 R
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" M2 k9 n# K- q8 z; |$ i" R1 V
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    " E& r- J& ~, R! \
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)2 E8 s+ Y' Q* ~+ X
  792.                 {) o2 y' d. H, Y! K; h8 d5 ?+ H
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    1 s! c$ U4 C/ {- t6 e% m
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");, g9 s: E9 U: x+ K
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    & r1 Z) j7 B+ J! }$ \# z6 ]
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ a0 g* K- \" M+ q7 ]0 f, G/ t
  797. 6 ~& J. K- f; N$ N0 P7 V
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + f9 A" Z1 x& f) x  O7 \9 i
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ( R- Z. t5 N) g( q0 p" J8 p
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");7 ^0 q! T" W' S- W% y1 r
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) J* _  s: @& k0 z  p
  802.                 }
    & n+ e# ]6 z9 B8 l
  803.                 dwStartUpSteps=5;
    - C1 M0 T1 ~0 x% H; {; }; z, u
  804.               }3 {$ ?) t3 O8 f' j% o
  805.             }. B# c. ?) V4 ~& s1 A
  806.             else
    3 b# O- l' ~& A
  807.             {6 T; L2 h. K, t9 j
  808.               unlink(".\\DownLoad\\checkversion.txt");+ c) S8 }) b1 f9 O( h) [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    " h# A+ @- T0 f& w' b
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    , D  }+ h! }$ [) ?% a( g
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 J" d8 o4 ~1 Y8 y: C; S

  812. ) h3 Z) K4 j3 J7 j
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 L2 C' n9 A5 A' d
  814.               dwStartUpSteps=99;
    0 F. w# P0 L5 o  g$ x4 z  [2 R; q
  815.               bFinishUpdated=TRUE;: g" o( A' h- F
  816.               bCanUpdate=TRUE;
    0 @7 k) @; S) |$ {. i3 a, X
  817.             }
    ( v" ?8 w& N" K6 @
  818.           }  H5 p; p$ n4 R, g1 u+ d
  819.           else* ^+ V; e5 B1 s: U
  820.           {/ V) A( ^. p! {. V9 G
  821.             if(!Dn.Connected())! a+ \" y- Q' U. I+ z8 [% Y" C
  822.             {
    # M& c' j" i5 M
  823.               bFirstUpdate=TRUE;# W5 i* T# {2 P: H6 M! b9 K
  824.               dwTotalFiles=1;
    9 P2 g! G4 h# n+ v; F& @/ _
  825.               dwDownLoaded=0;
    6 j5 L, u% W- K* q$ _* N
  826.               bSilentStep=FALSE;; V& L$ m4 R; m* ~: B3 v
  827.               bCompressed=TRUE;* R4 I% U$ }. O( N5 |; c) y. w
  828.               strExtLocal=".\\DownLoad\";
    # S. @4 x0 ?0 J# H
  829.               strFullName="update.txt";
    / T" x; |9 b6 [, ]* f
  830.               dwProgramState=AP_CONNECT;
    , I9 ]# [2 q5 ~* N' x5 V
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 n$ C7 h+ c+ K; _
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");6 A( }9 Z9 j' `+ G4 k0 Q+ u
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : }5 C* r& m) Q  U& ~# F2 r
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. ?# \5 D' u$ i( X6 K0 i1 e' Z! u
  835.               unlink(".\\DownLoad\\checkversion.txt");
    & k( h& o  }9 D
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    6 J) f% P3 U& n1 b" d6 J
  837.               {
    1 P9 F: A9 Z4 w7 ^
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    9 b7 M: R! `. o& C! x" v7 d
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");! z! ^# P* S% u! @
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");: K5 x1 @0 c+ q8 B1 h2 s; O7 Q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : f4 l5 O/ l( b/ H
  842.                 8 g* Y4 j, S9 B3 X' m) ^
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 i: i$ p$ B% Y7 f
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' X% e" i! V1 P
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' b- G1 o6 X' \% ^" {- M
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 {$ C# l4 l7 L( ?% d0 L* v
  847.               }
    5 \! D% M5 ^& ~. r
  848.               dwStartUpSteps=5;4 W& j- P9 j+ h1 F
  849.             }' N3 z8 a% G1 A/ U, ~/ I
  850.           }
    1 U6 s3 j  B8 H8 i/ r
  851.         }
    + I$ G5 G& {% h* }0 P& `1 \# n' X
  852.         else
    ' S8 x; ]5 `: F8 p
  853.         {9 ?5 R- Y# h4 H* P9 w6 h( R
  854.           dwStartUpSteps=3;. K5 V0 s) Y' |' o! {( N, A6 C
  855.         }6 x; `4 F8 n* J. v6 {
  856.       }: t1 g# w4 Y# F& I: n. m% Q
  857.       break;
    4 _. ~& y% x3 U0 g0 c
  858.     case 5:6 h- [7 p) `! E$ N- o1 d5 R
  859.       {
    % F* k' @: J2 F  P( B
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)4 o% _* j: [+ C7 s
  861.         {+ `/ I' [. C# I* D
  862.           int opt_overwrite=1;' H0 f0 X9 p$ \( J  ~# y  O
  863.           int opt_do_extract_withoutpath=0;! H2 K8 E% P; J8 Z! @- s
  864.           unzFile uf=NULL;
    9 q5 }+ a% L4 r2 q+ H0 U0 X1 `

  865. . L% U# V2 R. k+ K0 F$ k# j
  866.           uf=unzOpen("Wsa.zip");3 }: i0 U& v1 }
  867.           if(uf)
    $ E" z4 n! k; `1 g
  868.           {- o9 ^1 `. y- y
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 _+ {. L: H+ ~3 e6 f
  870.             unzClose(uf);
    % d0 F+ B) _  e* i# }0 P! v6 K
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");+ m- F! _) w3 Z; ?# I
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    6 G  R6 ~5 x; `$ H
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");2 _5 d, @7 |& a4 z5 ^' ^
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 r! ^" S- J/ t
  875.           }
    : L/ A  K" ?  y# J9 k; w* q) A
  876.           DeleteFile("Wsa.zip" );
    % v3 r& }1 }. H3 i" U
  877.         }3 L& B! t# b1 a. m
  878. * h& C) y, M3 Z" R3 _& y+ w
  879.         if(CheckLocalVersion())5 x4 R( d" c, O$ w% v
  880.         {6 H  e+ ]9 Y/ ~$ ~7 w
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    4 Y- E& E5 r& [9 K6 |* S/ w! N( B
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");+ u6 C7 z  ^, s$ s& m
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    , V4 A: I; F/ i* g; }, K3 X* |
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. c9 F. C1 V, `! |6 m) s' Y$ d
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ) u2 A4 Z4 e) B8 l6 d- u
  886.           dwStartUpSteps=99;9 A* V$ C* I/ U* Q" U, M0 n
  887.         }
    ; {9 I! m9 S' m2 Q' g; g
  888.         else
    1 w7 j8 s3 m5 ]3 @7 M
  889.         {' X1 h  }# U, a8 t- l1 u5 w$ l( ^
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ) C, n# J6 e: {2 C) \
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");% E. m! v  C& l: G" b5 C
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");  `8 u1 X) o$ g* l! Y

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

7 G' t& x/ T# ]2 Z
* i+ D0 c. S0 h% |: t. T0 x" M7 e

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-2 06:17

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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