找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
' v# u; \/ v; d. |
  1. / RevApp.cpp : Defines the class behaviors for the application.
    4 z1 a0 [. B) S5 }4 v& b6 W6 t# Z
  2. //9 l: Q8 c9 p% v( P# k2 o

  3. " o* s. S! m# ^% X/ m6 {: a& p
  4. #include "stdafx.h"7 ?' x& j" L" x

  5. , b" M+ v  z, C. o: ]# k  J
  6. //#define UNICODE
    $ O4 J5 a, r/ G6 X
  7. //#include <gdiplus.h># O9 N( E  ~  l
  8. //using namespace Gdiplus;- S. a# q# ?1 {# S, m/ f! @+ b
  9. 0 q0 z$ I0 T& k$ ^6 L
  10. #include "RevApp.h"! G  j  c% g7 s' m! [* R0 z
  11. #include "RevAppDlg.h"6 T. k8 e$ K6 ]$ b2 J
  12. 2 Z# T# o* q  J
  13. #pragma warning(disable:4786)+ N( z$ X; }- s' f
  14. #include <map>
    $ k* ]9 f* L; v9 q
  15. #include <list>
    & {; V- u5 A5 r
  16. #include <direct.h>, g( b+ K$ |9 l3 Z1 ^; a* o" W
  17. / z) q% X5 H5 V- U6 W8 |% G
  18. #ifdef _DEBUG
    0 ?/ R# j) t& Y& o" S7 V
  19. #define new DEBUG_NEW
    & K2 Z4 _* O) N
  20. #undef THIS_FILE, Q0 K; F' O/ f2 B2 G/ e0 U
  21. static char THIS_FILE[] = __FILE__;5 t* J0 z, T; X& a( s
  22. #endif
    7 x7 o1 v8 ]  h& S
  23. #include "SkinResDef.h"
    3 _9 l# [- z' T
  24. #include "ChangeBG.h"* t" {! x7 X9 }
  25. #include "AFXINET.H"
    - {5 |, b. M0 k2 Z

  26. 2 A4 z, u: W# g9 _) D7 e0 [
  27. #define TRADITIONAL_CHINESE 0
    ( r2 A  R5 Z7 s% b9 m% {6 [
  28. #define SIMPLIFY_CHINESE 11 b3 E* L; U7 t
  29. #define ENGLISH 2- b% e/ A8 c& b5 U, P" x
  30. int m_iLanguage = ENGLISH;9 ?; q9 |6 O' G
  31. /////////////////////////////////////////////////////////////////////////////- D& v! A6 k! p4 p2 n
  32. // CRevAppApp  X8 A0 ?' n3 Q9 O, g4 F
  33. * P3 R5 k5 B0 H7 Z
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ! H" v; d7 L: L! B+ n+ _: O
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    & r: _- z/ M0 F/ @5 T
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.; ~. K4 p7 l8 i& O
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    4 h5 `4 w1 Z0 j8 d7 z' x* F0 _7 P7 M
  38.         //}}AFX_MSG( N  n- v2 Q/ j- d4 y7 U
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)8 Z0 P" P3 F6 j$ M1 [) Y$ _
  40. END_MESSAGE_MAP()
    ; B0 i' K  W: @; w2 Y

  41. 1 s2 |( F, b5 M4 F* ~' n$ T5 t
  42. /////////////////////////////////////////////////////////////////////////////- b) [% F5 i1 u$ I1 p
  43. // CRevAppApp construction
    7 J. Q$ F& o6 O8 H8 E
  44. 2 j# m1 r, M7 i+ A7 D7 H
  45. CRevAppApp::CRevAppApp()
    ' {, g' ?5 W6 \7 {- }) K+ J
  46. {% r. z5 G( b5 P1 x: [- m
  47.         // TODO: add construction code here,3 _8 n! j( K# ]# i
  48.         // Place all significant initialization in InitInstance
    1 c0 \/ P: `1 L' W$ k* p  d4 C. _
  49.   bDisplayIsBig5=FALSE;4 {: ?! s* O; f$ P3 F& s
  50.   bRestartUpdater=FALSE;
    + M& d$ ^3 _' T; |
  51.   bFinishUpdated=FALSE;
    ! }& H# p6 L: Z& Y; Y
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;+ }, W! t0 ?; I
  53.   InitChangeDataBig52GBKS();
    8 r; Z" F, R+ o- M; V( K
  54.   InitChangeDataGBKS2Big5();$ |1 A/ w: _  U4 I& Y
  55.         //
      Y4 j1 e9 W( U1 j9 ^8 |2 o3 j
  56.         bClickRunExe = FALSE;# K7 [( {! U/ M
  57.         //6 Q8 {$ y, H0 s% \. r* `5 R
  58. }' ?, p/ H/ A& M0 p
  59. : L: ^( p" j, t/ U! v- U5 v
  60. CRevAppApp::~CRevAppApp()
    ) I7 C+ F- p: r% S9 J' q" w  L
  61. {
    . d$ }9 u4 k; K0 _1 E
  62.         // TODO: add construction code here,. U. `: F8 x1 a+ B5 H
  63.         // Place all significant initialization in InitInstance
    . a2 c7 y* V! T& ]$ s2 q
  64.   EndChangeData();
    * J6 q8 \( ~8 S- \# Z5 _
  65. }7 M, F1 B- I' ?# o. y
  66. ( m1 v4 ?& s' ^7 F  d/ Y; N) u/ p
  67. /////////////////////////////////////////////////////////////////////////////4 I0 S: P- L0 W4 t) F
  68. // The one and only CRevAppApp object
    % O7 k' ~6 f5 X3 G' x* A- }0 i0 {

  69. ' s8 D7 L: O% ~3 K1 ~6 Q# i* {
  70. CRevAppApp theApp;
    7 |4 K  i" @- v7 t  }  u8 j
  71. + ^) p# S5 z6 ]' n
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName): m% P: `( K; F" X' j. h
  73. {0 k2 t8 f  P! e( H5 O  P0 W
  74.   int iEOF=0;0 T) @3 W, V. w+ ]3 m4 Y7 T
  75.   char szTempName[MAX_PATH];* I9 ]& s- q' W, I9 X2 t+ H
  76.   *szFileName=0;
    ; P' W2 E( ^) \
  77.   iEOF=fscanf(fp,"%s",szTempName);+ @0 C3 d* h) x9 m( J
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
      o$ B8 t3 r! m3 j/ b0 G
  79.   {
    5 ^& l# k4 J; A, f! H( P
  80.     strcpy(szFileName,&szTempName[1]);: [' Q9 j0 i5 \
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)5 o" D2 g$ N; x% j4 V
  82.     {" R; j: ~  D( ?' q% C1 y; k
  83.       iEOF=fscanf(fp,"%s",szTempName);
    # D# d9 Q( ^7 S7 r1 M+ a; {' B
  84.       strcat(szFileName," ");
    - p6 M( ~+ [8 M% V
  85.       strcat(szFileName,szTempName);9 N; f& d) b2 J( c
  86.     }+ t. v; _' }& d6 Q7 ?
  87.     if(strlen(szFileName)>=1)" y4 I' e, C% S# d" E& K- x/ z
  88.     {( T' r( C5 a8 z8 p
  89.       szFileName[strlen(szFileName)-1]=0;
    : _. C7 b- ^  \& A
  90.     }: N9 d2 y. R. {( s
  91.   }
    * z, k5 S1 M% ?
  92.   return szFileName;6 k* H4 r  t5 O4 n3 o
  93. }
    ' q* h$ z+ w% }
  94. + i% Q* K. B: v/ q
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    & K8 r! L- g4 @4 F( m& D+ A
  96. {/ `9 S" T! T# q1 \% a" H, M
  97.   FILE *fp;8 o4 k  |( f+ e' |3 c" a. f7 _
  98.   char *key=NULL;
    & @" T) N7 p) \# R) }
  99.   char version[MAX_PATH];
    + c+ Z9 m) I4 }4 V' V
  100.   LPUPDATEFILE file,olds;
    2 z2 z0 V# H, \: n, e; Q
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / m  @* E/ G# I1 v" }+ d! `
  102. ) R  T# V; p2 p3 e6 x. P6 }3 l
  103.   UpdateList.clear();
      R& g/ U! Z8 Q7 f5 O5 ]3 w
  104.   UpdateFile.clear();
    & q# _+ z% P# [$ e3 _
  105.   if(GetFileAttributes(filename)==-1) return false;
    7 y+ X: L, U( F/ ^" O2 |2 r
  106.   if(!(fp=fopen(filename,"r"))) return false;/ k  J5 M3 ^5 z+ z3 ~
  107.   fscanf(fp,"%s",version);% e' h' X% R" V* R, L0 V
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    + R. f( V. S1 ^; V/ {% ^! e7 Y
  109.   while(fscanf(fp,"%s",version)!=EOF)
      Y% Z' q. _- w, G6 L
  110.   {/ s& P9 b' W& l8 b3 j& i
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% K! k9 r5 `. H' J7 s. d% i
  112.     fscanf(fp,"%s",file->path);
    6 c1 P7 r' c7 k$ y4 X
  113.     ReadFileNames(fp,file->file);4 ^" q- v( M' \8 u9 k
  114.     strcpy(file->full,".");! j; P2 j" u$ o; G
  115.     strcat(file->full,file->path);( M2 |% P( m  h; ]
  116.     strcat(file->full,file->file);
    / A, u0 {; f8 V0 U, s5 P
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- ]; E8 w( B8 @
  118.     {7 e& u' Z- r3 S0 P; Q
  119.       file->vers=(float)atof(version);/ K5 I& Y4 m2 f
  120.       UpdateList.push_back(file->full);8 r6 _  S0 Y7 F# d0 Z; w2 l
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    $ Z* {% V5 |. m! ?, W8 \
  122.     }
    $ ^% x% A- N. ~# X7 d) ~% b
  123.     else
    , k, ~4 f/ J% v/ W3 {& r3 J
  124.     {( P3 ^1 A( B2 n2 ]
  125.       olds=(*p).second;, M. G1 d; a* d5 e6 y5 Y
  126.       if(olds->vers<(float)atof(version))! n8 }  {* B$ p6 S
  127.       {3 ?5 P& Z: k- g2 r( X+ V" H
  128.         olds->vers=(float)atof(version);& K5 L- t  Y" d# Q
  129.       }# S9 Z3 x7 d5 }/ J: Y8 a( s
  130.       free(file);
    2 a6 b  \4 H& _5 i2 b. J+ U
  131.     }2 E% B( ~9 O' Y4 C7 L1 `
  132.   }
    6 ^, M- F5 E; z
  133.   fclose(fp);
      O& v: o+ l  P& O; c
  134.   return true;! I' P$ B2 H' g4 S
  135. }4 J6 {' n8 Q& Q: p7 C' d! Q

  136. - ~3 }. ~  w  q6 _/ k: Y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)7 g: E- {2 Z4 F. }& _5 U
  138. {
    + r! I" o# t& z! O. z- p1 l
  139.   TCHAR  szFull[MAX_PATH];
    , Z- Q4 k+ d* x5 N  b
  140.   TCHAR *token,*inter;
    4 {" r' l3 U4 f0 f7 j  U
  141.   *szPath=0;
    1 \# y- H6 G: y& L
  142.   strcpy(szFull,szFullPath);( l& V* t: k' ]0 d
  143.   token=strtok(szFull,"\\/");; O, I9 K1 X* g2 C
  144.   inter=token;4 `3 J3 C( g# P  ^# H) Z# [
  145.   while(token=strtok(NULL,"\\/"))6 a$ r4 F0 a( Q( n
  146.   {
    2 h; W' Z% d, B# C9 O5 T
  147.     strcat(szPath,inter);6 ^, O$ C$ h! K& a, U0 P
  148.     strcat(szPath,"\");
    6 w' n7 M% c* t" G$ E9 ^) |# r; J) {7 h
  149.     inter=token;
    6 m0 t# j) N. H
  150.   }! n% a# n( G2 ]% v- c( V& ?
  151.   return strlen(szPath);2 g2 H6 j) h' C" p' M
  152. }: f8 w, ~; H7 i% y  h/ ]

  153. 8 I8 g7 E( ~# @1 Q/ g
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    7 ?1 f/ o' Q+ s% }* j2 O* L
  155. {
    " Y9 l. {6 X9 c% L) q! K
  156.   DWORD attrib=GetFileAttributes(Target);
    9 W4 o4 L# R& g* X
  157.   if(attrib!=-1)& o% Q8 v0 u( M' l( x: T
  158.   {
    " A' {3 w# J6 j- P
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ M  _' D) O4 ~; b( p* P  [
  160.     {
    * F1 c& O+ w: R. T; I( ?
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);" v( q$ I" J8 y' A- U# U
  162.       SetFileAttributes(Target,attrib);4 {% O: \( H, q6 g: E# I0 ~& }
  163.     }
    % o& J: j. h1 E# t. d& B
  164.   }( x1 ^5 J' p% g% F1 [
  165.   CopyFile(Source,Target,Erase);9 }9 {9 |: \# l' m
  166. }
    * ]: B4 X8 ]& h8 P* B

  167. % I, A( v# I4 h0 q! u
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    1 G( z& v( r9 Y3 f8 f
  169. {
    . [( ]: n) ~$ y
  170.      FILE *fp;% h, Y% m6 X* h4 G* X! U
  171.      char  szBuffer[8192];1 u& j0 u* I+ ~' e, R
  172.   va_list  argptr;
    0 _- x8 U9 N8 z1 L* s
  173. : z# A( ]9 T; b8 F* X) q
  174.         va_start(argptr,message);& z7 e; V4 Z7 Y3 ]
  175.         vsprintf(szBuffer,message,argptr);; e- c9 T! C% Y) y" G' ]
  176.         va_end(argptr);  G% ^1 z" p/ F
  177.   fp=fopen(FileName,"a");
    * ]$ L: m! N" S6 ^" A+ r/ I
  178.   if(fp)! i/ V* i, |6 }$ k& c( D
  179.   {4 N1 y- [) G# P; J- ]) `8 w
  180.     fprintf(fp,szBuffer);, c8 e7 d* |: \
  181.     fclose(fp);
    4 o0 L  n& g  ?1 w9 O- k: h
  182.           _flushall();! l; C' N" N1 F! D/ s5 a6 A& W
  183.   }
    * _8 {' I( q2 g
  184. }
    ) X/ i: q) n2 Z+ V

  185. , b) Z! ?1 l8 {& W3 A. v  a4 G
  186. BOOL CRevAppApp::Fclearf(char *FileName)! {% C: E6 |; t% x0 @  [
  187. {
    , P) P! ~+ z0 K$ ^
  188.      FILE *fp;; s! C; W7 d# F  q  ^1 ^6 ]9 K
  189.     DWORD  attrib;& L: O2 S7 b3 [7 q1 f
  190.   attrib=GetFileAttributes(FileName);
    . W! X( w$ \" `3 Q: R3 g
  191.   if(attrib!=-1)) D$ Z0 y7 c/ |) D, N0 a. z
  192.   {
    7 c, y) j. d; k# U9 c, D7 ]
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    + G$ A! u( x& E# n- f5 b
  194.     if(!SetFileAttributes(FileName,attrib))
    , ?8 ?2 }/ m  e, B2 @
  195.     {
    ) g% s4 e" {4 T8 E2 l
  196.       return FALSE;& U# R4 w( r8 ^
  197.     }3 E* m% v) s: h, ~
  198.   }
    ) V2 o, a+ e3 F4 ^
  199.   fp=fopen(FileName,"wb");/ O6 E5 N4 l! m% _* z
  200.   if(fp)
    ' H% H0 ~; C; e2 G( y' _8 }
  201.   {# G, i2 p" \( M9 R9 R) ?, Q
  202.     fclose(fp);
    7 }1 c' R5 Q3 z/ Z
  203.   }/ b1 M; |* N1 ]5 I
  204.   return TRUE;
    ! @! ?$ g  P8 |1 w
  205. }
    ( W$ }- o; P$ _9 \2 }

  206. 9 d9 z% I9 }# b" d
  207. BOOL CRevAppApp::UpdateLocalVersion(void): |. o9 t; @# ?* {; n# a3 p! v
  208. {
    ) `/ a7 \! f# y& k& P/ s& r
  209.   char filename[MAX_PATH];
    % A( o' ^1 a4 t/ Y/ S; q2 d& ~( \
  210.   LPUPDATEFILE file,olds;$ q- T/ w0 u9 M
  211.   std::map<int,CString>::iterator i;7 I# }* D7 Q7 i3 v& i
  212.   std::map<CString,LPUPDATEFILE>::iterator p;4 m6 q7 V$ [# t0 [% _9 B
  213.   std::list<CString>::iterator l;: ]4 d) I( r# |3 |+ r5 B/ O0 k6 h
  214. * q+ s' I4 V- Z+ H2 V$ {
  215.   if(bFirstUpdate)
      s6 `$ d* ~0 |2 p( ^
  216.   {
    9 e1 X1 Z* Y7 I* `  L' _
  217.     dwCurrFile=0;
    / C! m+ r3 S' j# j" J
  218.     bFirstUpdate=FALSE;
    4 e* O3 t' d2 _+ z4 q6 M( A
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    * m. b. w- f) r; w' K0 `2 X& S
  220.     {  y5 e6 z4 L2 m1 F0 h
  221.       dwTotalFiles=UpdateLocal.size();
      J: M: ?3 {& b$ t9 o. O/ D5 W
  222.       dwDownLoaded=0;, L7 A# U5 A3 ]! V8 i, N6 F
  223.       bSilentStep=FALSE;
    % T1 k) L( y6 {3 H- J
  224.       bCompressed=TRUE;- J* G6 ?# J5 a& I
  225.       strExtLocal.Empty();$ J3 S2 v. t* G; H9 b. e
  226.       strFullName=(*i).second;% R$ [2 V* [$ z1 `& o# w8 _  X- z
  227.       dwProgramState=AP_CONNECT;
    & w; r  v2 b+ ?& K, A' ], ^
  228.       return TRUE;
    $ Z0 d, Z4 o1 B, d: j
  229.     }
    6 D1 H! |. z. l' |8 S
  230.   }3 m* t4 v. A3 V0 g8 e% U! N
  231.   else if(bRestartUpdater==FALSE)
      p0 Y+ l# }5 E- I
  232.   {2 E6 |" R/ X, ^' _2 u1 W$ V  h! o
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- q7 d+ U% }& z# R$ S
  234.     {9 G% z' w( R. P. h& H
  235.       file=(*p).second;
    8 m' ]4 i1 E0 u; K: m
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    6 U. h' b4 P) p
  237.       {
    4 K0 ~: Y' T6 r  W) }5 T
  238.         olds=(*p).second;" T, {; A) U9 s& H' O
  239.         olds->vers=file->vers;
    , G6 c4 }3 n  q  h
  240.       }8 i) e8 P. _% N0 [) _
  241.       else
    - Z9 m/ d# i- m7 p2 d9 }2 D
  242.       {7 X* ?5 }& m' g- ?  w; F2 E
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' ^# F+ G% S' j" W2 o
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    8 D9 E4 @' s, h, g
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    / e$ v7 h3 i: j# n
  246.       }, m+ D4 r8 ]9 k0 W% w0 \8 \
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ( \0 [" @2 C. M& X4 U# Q. p( L4 G
  248.       sprintf(filename,"(%s)",file->file);
    & E  G. N, X) }% \! g! D2 c
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; [% \7 k- w) D4 ]+ P# n& I/ ~
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }- R0 Y# A+ s# @8 a# O" v
  251.     }
    2 ~' b/ M# m9 X8 \5 M
  252.     dwCurrFile++;
    8 ^. R$ [9 Z' b! |" r
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) ]1 y; C/ m  v) F4 @
  254.     {
    # u. t# r! i( r( f1 a6 w
  255.       bSilentStep=FALSE;
    2 ]/ \+ w: G! y' y0 k
  256.       bCompressed=TRUE;
    ; _: q% H4 o' [& v
  257.       strExtLocal.Empty();0 Q' R2 V' Q+ z  G) h* g% I
  258.       strFullName=(*i).second;1 o6 m, a: l, y/ Z: _0 r
  259.       dwProgramState=AP_CONNECT;' m1 l0 e' Z! u/ P
  260.       return TRUE;
    ! ]3 X5 j, i4 }! d; J3 N
  261.     }
    8 _7 R8 |9 O; {1 ^& y
  262.     if(!bRestartUpdater), \2 w( M! e# P  g( z5 v- f
  263.     {
    0 r# K, e  H9 V4 I; l! k! e
  264.       int iCurrSize,iFileSize;% a* F  ~" n! O
  265.       iCurrSize=0;$ D! s3 w2 Q* D9 {( F
  266.       iFileSize=UpdateList2.size();3 ?, f, W' k; \$ E& v5 e
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");$ C7 t7 M2 c& V* E0 k
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 k9 \. R6 \- m: A" ]
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ) V% |! C6 `1 u
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  A6 i' I0 c; @, O+ _( Q
  271.       Fclearf(".\\update.dat");( [7 a. H' K2 G8 a' B3 o6 B  j
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    + |1 A. A9 X% S) T2 R0 G1 f" y
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . x4 Y* Q# T  ^2 Z) V: z; ]8 A8 `: f
  274.       {
    ( ?* C$ l2 q0 f0 b4 a! H" Z; n! w
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())' A/ A% h& S9 Z
  276.         {: Y8 h+ T1 w9 k' ~: z" W& D) u  k
  277.           file=(*p).second;  M6 l* s  M) T
  278.           sprintf(filename,"(%s)",file->file);; M# b. Y% h- I# B
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    4 m& D: O5 n( e0 B# r
  280.           iCurrSize++;
    9 d3 n! F+ c, [( l% L6 O
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));8 J! W- n* r3 k
  282.         }
    1 m) x. w$ q8 I$ t7 P
  283.       }
    5 e: e  V& K7 E3 C! {: G2 g
  284.       unlink(".\\update.txt");
    4 p' ~% d- h* ^5 z
  285.       unlink(".\\update.tmp");
    9 j$ y/ ]9 u+ l$ R7 Q/ h$ n7 P9 Q
  286.       Fclearf(".\\checkversion.dat");5 Q+ j7 {5 N! _+ p1 B9 ^1 W! ~
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);$ u$ y5 T0 [3 s2 x$ n, h; M
  288.       if(UpdateLocal.size())
    % ?" M& H. G- W
  289.       {
    . @" t! R9 G3 }. m: a% [
  290.         UpdateLocal.clear();9 d- C6 j2 w. b6 _& v" Q- C( q
  291.       }
    2 ~% O- K# ^- L3 S% a
  292.       if(UpdateFile3.size()), \, R, ^* t( |( t
  293.       {1 M" g6 L% S( B5 _
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* m" R, u# L6 Z
  295.         {. T9 X2 v* E2 K% M/ c" K* x
  296.           file=(*p).second;. g6 w0 R# \% S: t8 z' I3 M
  297.           free(file);  h# T* ]2 `6 w' f$ n/ ~( i
  298.         }, a! H9 P% g) N* l2 Z& K  q  L
  299.         UpdateFile3.clear();
    % x( g  }3 w7 s% {3 W" T2 {& |' f4 u. Y
  300.         UpdateList3.clear();
    1 p6 b& b# @3 n" |, r
  301.       }1 _" y, m( s0 H6 i2 l
  302.       if(UpdateFile2.size())8 l5 Z2 X5 l- w
  303.       {
    - ^- ]- Y- H$ g2 T  [; P6 j/ [$ B2 y
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 S* X2 E% |7 S, ]8 w2 ~
  305.         {
    1 H% U, u- H7 V
  306.           file=(*p).second;* F$ I0 E; _% e) H" W0 I& E3 _
  307.           free(file);; K6 d, ]! i3 I1 n1 t- f
  308.         }
    8 S2 h) \# `) I
  309.         UpdateFile2.clear();: C6 N0 O2 d. X0 Y. _
  310.         UpdateList2.clear();9 a8 G" ]9 l) i( X
  311.       }6 x( C9 \: r3 c% k7 p
  312.       if(UpdateFile1.size())+ a( B/ w' Q# E+ b+ ^! w4 h, D
  313.       {/ ]0 c6 i/ Q! i! z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( y/ ?8 v! F$ z2 B; t' M
  315.         {
    ' ~# @2 j1 R6 ]3 S
  316.           file=(*p).second;
    + [3 G3 _% P6 a& Z" b% X; L4 ]
  317.           free(file);
      ?+ O2 ]- Y! n, |0 P  F# ]1 Q
  318.         }% J! n+ O. @) Y
  319.         UpdateFile1.clear();6 B) M0 r( u) t' v# d1 J
  320.         UpdateList1.clear();1 T( U7 d; d/ Z- t7 Q* ?
  321.       }) x9 L0 V4 y0 t2 Q$ U
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ a. q1 u) W6 j9 `
  323.     }
    ) L1 O6 {) O* e% H. X' J
  324.   }8 ?) `7 _5 U, E% J# ?/ v
  325.   return FALSE;" A8 @; I0 }8 n/ W; J9 S7 E1 H4 r
  326. }2 `! r+ g9 A! R- e. g5 Y

  327. " r" H: y# t2 i6 |* d
  328. void CRevAppApp::ClearAll(void)& H2 |* N+ g( l4 o# @( S
  329. {  s9 J" o# t5 X2 ?8 N
  330.   LPUPDATEFILE file;
    6 n8 [. @* \/ `  P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    : b* c- \- j& j$ G3 }5 ]; D

  332. , u1 a$ B& D/ h: j
  333.   if(UpdateLocal.size())
    " {' a5 K: r5 F9 k3 L. F2 K; e* e: H% Z
  334.   {
    ' N; F* O3 b2 I% o
  335.     UpdateLocal.clear();2 w1 T. `' Z% g
  336.   }/ o  V' L: ^2 K7 ?
  337.   if(UpdateFile3.size())8 ^3 r/ ]5 @% w  b
  338.   {
    / @% `4 ]; Y) u1 n
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- [, F4 Y$ R5 v( ^5 T. v* |
  340.     {7 P. A' R, i' w' _
  341.       file=(*p).second;6 J! V7 E* e- A/ t7 n- V$ X
  342.       free(file);
    ' m' ?8 z7 d) ^, K+ ?# I% C
  343.     }5 C& z# ?* M/ B; v
  344.     UpdateFile3.clear();# B( ^  Z8 ^  K( i- T5 u; W
  345.     UpdateList3.clear();
    # S% u8 c4 H$ p0 a" e- f: p7 N
  346.   }
    1 ]9 N" i6 }& x5 U( p
  347.   if(UpdateFile2.size()): ]# Z4 D/ `% U4 n! s& J  ~& H9 `, `
  348.   {
    ; O5 k) D  A) [; `5 S/ e
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& W9 n! W- v: y
  350.     {% F& b. \% g( j$ f! ]) Z
  351.       file=(*p).second;2 j( _9 l( Y' U/ ^, S4 y9 k
  352.       free(file);# z' i1 @" r* H" C8 ?9 d
  353.     }) [2 |+ N6 L& [2 v
  354.     UpdateFile2.clear();4 a1 r% a( X9 ~& A, T) H$ m
  355.     UpdateList2.clear();9 x1 |( m$ q" t0 T0 r
  356.   }
    2 [; ]. ^6 |  @; A# o
  357.   if(UpdateFile1.size())3 h4 q9 M6 [# W9 z
  358.   {# n! w8 K( B% P  y, {% u
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    4 u0 g" B9 H; w" b! Q
  360.     {* F; O, I3 Y0 q/ y
  361.       file=(*p).second;
    # D) P' o, N( f" C1 |
  362.       free(file);
    ; N9 j" B4 j+ N% y9 M9 _
  363.     }
    " u8 f- a- c4 Z0 a4 M; j' ?5 u
  364.     UpdateFile1.clear();" p6 c- |; B0 a$ m6 V' Y. S8 n
  365.     UpdateList1.clear();
    8 W, v" e* O- q" d& k
  366.   }
    + ]" \8 j/ K* R
  367. }  
    ' a+ P2 K9 ?' Y( a% G8 r
  368.   
    6 U+ H- A; e. m" c7 j% n& s
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    # x% r3 v, m& V! f
  370. {
    / ?7 \2 L# ]/ _8 _( X9 L
  371.   int c;* _  L7 ?" D5 z  j6 u! c
  372.   LPUPDATEFILE file1,file2;
      a$ |" J& I6 Y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;, n: Z& y# {! i! R* p
  374.   std::list<CString>::iterator l;
    " ?! o& \: ~4 {3 d& s

  375. 5 C7 _* G' S" N% w
  376.   UpdateLocal.clear();
    ; Q! p* x- n& o# ~4 |
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    - t& ~  ]# ?8 I; u+ Q
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
      g$ f2 }! g/ U$ f- x0 ]! F( d* z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    3 i0 Y9 f7 l* B8 ~
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    6 N' T: H/ A: q/ Z, b
  381.   if(UpdateFile3.size())
    5 ^4 e% p7 V, E/ [" V/ _8 k8 j
  382.   {
    & }, K8 e8 N+ \9 u4 A
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    5 J) Y' T- A; E3 D& b' g
  384.     {3 D! H! Z* q8 `4 K
  385.       file2=(LPUPDATEFILE)(*i).second;; m, r: W1 U. X( Q8 }! g* U
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    # r* |  Q7 n: u
  387.       {
    # L& V5 D+ u* m& X1 p
  388.         file1=(LPUPDATEFILE)(*p).second;
    % w- Z, V8 j) X7 x2 Y- h5 P
  389.         file1->vers=file2->vers;
    ! n6 |0 B5 E0 a& C* {
  390.       }
    8 P$ s6 f4 v( p& |
  391.       else
    ( D5 d! s. N! F/ l) H
  392.       {
    6 T" O- Z/ @) l- _. `
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 K& \7 f* F, C5 [
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    * B# y( p% p# p2 E% o, W
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ' c8 w9 B. g. L& G; Y
  396.       }
    + I1 X6 C( P6 x% S3 ?
  397.     }8 }! P1 j5 z( ]
  398.   }0 n# |5 w( `) S* a* @6 ]; {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * ~* B& `, y' \" F  H5 q# q
  400.   {
    3 W' o/ C7 o% P9 v7 k3 T
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    . \7 p: M- p  z6 G; M
  402.     {
      R4 A+ {% ]4 o; Q% n+ s
  403.       file2=(LPUPDATEFILE)(*i).second;/ Y6 j6 M8 [! D, l
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())7 v2 I3 j/ X- e2 X% {) e
  405.       {
    0 D! J9 {: m' C6 F
  406.         file1=(LPUPDATEFILE)(*p).second;. v. Q% n) K* y( A3 }. w. F
  407.         if(file1->vers!=file2->vers), D/ Z3 R$ W2 K- r5 s
  408.         {
    2 r/ ~' r$ {+ y4 ^9 v5 [/ S
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  c: e% C' G$ B+ N' _
  410.           c++;
    # J+ z% C6 X* F- \4 r
  411.         }; u/ U7 B3 I+ ^
  412.       }2 H; H. n% \8 n1 {0 A" }% f
  413.       else
    + _3 e' g7 `# U8 a; k1 T3 }
  414.       {/ g& [1 p) ^" f1 X2 i" z
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + d9 g# s  Z9 t+ z5 D) u* k$ j
  416.         c++;
    , v9 P3 ^% x9 v) G/ P# b
  417.       }
    : m  F- b# t/ j: u
  418.     }' k5 c' Y. E0 m2 G
  419.   }
    7 M' m5 _5 `. ?% h2 v8 I: y
  420.   unlink(".\\DownLoad\\update.txt");. i& Z1 x0 O* [) y) d5 s8 _; p
  421.   if(UpdateLocal.size()) return TRUE;
    9 @& ~  W. C( W' @% C) J
  422.   else                   return FALSE;8 ]8 m& g  }; S& [* X! A( X
  423. }, k0 B" {' c3 x* r
  424. 5 [, }, z3 o1 B" m
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ) t" I( k/ j* M1 n
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"/ _4 _3 ^% G- O5 V" D; P
  427. ' Q! c! g7 K8 X# Z

  428. 8 Z  x: r- I8 t# j5 F( {4 d

  429.   w" p) r4 Y, I/ I' H
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    / a# [, ^8 Q& R; u7 s- Q: }1 f
  431. {7 o6 E) A8 R7 B
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    : o  Z9 i% t8 ^6 d  f4 F' j: F( e
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / Q) {8 P, y1 w7 B
  434.   {: s; q" w# X  l( n3 `; i  O
  435.     char szLanguage[50];
    " ]- t' K$ w  ~2 B/ Y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! ?4 u; t  h5 y3 D4 T
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 x  q: d1 S/ ^, r7 L" j8 p4 I
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 C2 F/ q" O; X  W
  439.     else                                   m_iLanguage=ENGLISH;
    5 ], q: N0 }' K# A/ W7 T5 v
  440.     char szRegister[100];
    / d( R  K3 v6 S7 V9 r  P
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 ~. U% W7 L: o# [
  442.     strRegsName=szRegister;' ]" P) J4 W$ q. h$ o
  443.     char szPatchURL[100];! h6 I; `) `- Y8 G/ Z
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* \" z6 q8 X3 g+ h6 N
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 \# D' c. o- p
  446.   }7 j0 v7 w0 ?# j, O6 ~, |. j
  447.   else" ^+ d4 ~* O3 \+ H1 g
  448.   {
    0 U6 ^; Z  i2 c
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 D6 @' `+ @7 O- T
  450.     strRegsName=DEFAULT_REG_URL;) A. [3 i+ s" G
  451.   }
    ) S, H& N$ J6 R. q: N% L; j
  452.   if(GetFileAttributes("hosts.ini")!=-1)7 s) M' e0 o; I
  453.   {: N$ J* t! h$ Y# w1 j
  454.     char szIP[50];$ p8 K5 N! W  [
  455.     char szDIR[300];3 V! I$ v3 F1 \
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
      y& K& {: G# h7 M8 z
  457.     {: Q& R5 G7 ~3 L9 l7 C, ^
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* A! T. C2 j) C0 W; m% Y7 i) l( _4 z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    + X3 a1 m3 t/ ]% a
  460.       strHostName=szIP;
      N1 W+ A% R) q- I9 |6 E/ R
  461.       strHostPath.Format("/%s",szDIR);9 ]2 `7 a  {$ |
  462.     }8 J. e$ P0 A$ K- ]' N" F- E
  463.     else
    1 f. g% x% O0 T0 ~7 }- o
  464.     {
    1 e' T/ e0 y+ A/ F# W1 ]4 v
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); m2 r  l2 [$ g% ^7 k: C3 k
  466.       {
    / `) ]9 s* X: Y3 u' U
  467.         char szLanguage[50];* x5 k" V/ q- l4 f
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    % ~/ n* x- b0 s3 I3 w* E# u
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. f+ t. V% X! F* A: q. A7 S' k
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # o1 A' p9 |- W: a5 _+ }
  471.         else                                   m_iLanguage=ENGLISH;5 r( A. r6 O) _* F& A! X0 i
  472.         char szRegister[100];% \; p* c/ _7 n6 b* j
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      _- T6 E/ F: F# V9 K! X4 U
  474.         strRegsName=szRegister;
    - g( |. w) L; Z- Y# O* L
  475.         char szPatchURL[100];
    # [$ g, B! b' `* [4 j
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% S0 n8 c& B$ B0 i8 a
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 Z0 x6 R6 F/ K9 S) ^& S
  478.       }
    % E/ O3 b/ _( S  ]
  479.       else
    " g0 T0 l' i8 P
  480.       {! \$ Q$ }; f/ I3 a5 G* }
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - k4 h' }* |9 @2 t3 u
  482.         strRegsName=DEFAULT_REG_URL;
    3 ?4 b! ^# l! J3 c( C8 h$ O7 C
  483.       }
    & t# n1 m0 w5 [- ~8 [$ [
  484.     }( n( a; |) g5 g) }
  485.   }: U& M/ k" S* f" V2 Y1 v
  486.   return true;
    ( L$ d$ k1 g% k% J. {/ f6 R# m% c
  487. }
    . p& J2 |; Y6 s- Q0 w7 e3 p/ w6 N5 }

  488. 6 i; W8 X! V* Q  T
  489. #include ".\ZLib\unzip.h"
    . B8 U% k3 r6 @% G+ x
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( `. X3 u* N3 S1 j- S+ D$ h
  491. /////////////////////////////////////////////////////////////////////////////
    6 Z0 P6 M7 i6 r% A
  492. // CRevAppApp initialization+ z+ `# i+ x' r7 ?9 Q9 b$ Z2 `

  493. 0 |" P  |: k; B  w3 d
  494. BOOL CRevAppApp::InitInstance()% h( h, Q( i; I+ f0 P
  495. {
    ) T; h+ S' y0 Z
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    # u, w- v: i) c5 _5 _

  497. - P1 |% ?. d6 Y4 z2 I. M/ q
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);$ ]1 D" ]/ F# W2 L2 _2 \: `
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))) |. H8 l' y- ~
  500.   {% x* `8 R( G1 ^9 `  T2 E
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ; ~8 U  ?8 |0 }/ Z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    , C/ n+ s8 c. L; T
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ! Y4 N; l9 C& T$ f9 {5 ?8 z
  504.     {
    : b6 ^% t1 ^: w) N
  505.       strcpy(szPath,szPathTarget);
    * e3 u* c1 a. _! }0 l
  506.       SetCurrentDirectory(szPath);
    ( \. |( F1 K# r, F- T; a8 e
  507.     }/ P- s# [( P8 ]8 [
  508.   }
    : u' ^; [; c  J9 U8 N2 U3 X" Q
  509. #ifdef _DEBUG
    ' g- e" ?' u" E6 i# n% X' S* g
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))* }) G7 n( t+ f1 d$ o; Z- @( \3 s
  511. #else; u  m- s( }% |/ p; U2 q" s" L
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 W; e; t2 K  b* O8 }
  513. #endif2 U/ ~0 u' l7 ^. X- F  q
  514.   {
    & g- C" P( k, H* O9 |! v3 s; b
  515.     char tempFileName[MAX_PATH];/ p" {& P/ ?6 V& Z+ ^
  516.     strcpy(tempFileName,szPathSource);
    - a0 C- ^, e& r4 z. u2 U5 [3 g
  517.     tempFileName[strlen(szPathSource)-12]=0;
    * i$ Y7 a8 m3 Y2 I& t9 q3 d
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    3 R  ~/ ~2 [: V: n  M
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);3 A- r  K  U# n0 A
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    2 X: D1 G3 X8 ^
  521.     return TRUE;0 n2 @$ z) r8 C$ l; M& C, a
  522.   }7 v- x' O+ y0 m) Y
  523.   // Nuke 0118: Delete run.exe
    ! C: ?6 M! Z5 v- i  P
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 m+ Q0 \$ H* |
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");. R  c2 Q4 d; {, O/ b2 u
  526.   if(!ReadCfgFile("Config.ini"))$ a! ^/ o* i+ D  U; l* e; H5 U5 w
  527.   {$ [6 {& U  ?7 k6 A! i) E2 N) \
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    % N9 @# a4 q' }7 c: a# u
  529.     return TRUE;
    9 L& O1 ?0 S$ Y3 a/ S
  530.   }5 ]6 [3 J, I1 p. }0 m( k. V3 z
  531.   HANDLE mutex;( w; j! B! i8 L7 ?0 K) A
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))# Z0 |  i+ b) \
  533.   {
    * }9 C, I( ~( j, r! s
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    # w5 y% h: `5 A" p
  535.     {
    , S# a: _; M1 o" _1 z
  536.       CloseHandle(mutex);
    ' Q& q* ]) l+ ?
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);7 y( S1 P; F. K3 H6 Y/ h+ k
  538.       return TRUE;  N+ s) T. o- a
  539.     }9 r% ]0 E3 w* U" R: p) K
  540.   }  
    9 d1 @! [7 [. T- V4 k6 v. e
  541.   CloseHandle(mutex);2 f$ P' M6 Q9 ^
  542. * I) [+ x8 Y; C2 I
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( g' N6 g$ {' t4 E0 z- r' M
  544. ) e( J; |. o+ ]3 U8 ?' c5 h6 K7 Q; \
  545.         AfxEnableControlContainer();
    ) N9 q! k, q5 J
  546. . G5 t5 w0 j- h  r9 d
  547.   bCanUpdate=FALSE;6 [; Z0 z; y* f' B# F! X
  548.   dwStartUpSteps=1;
    7 v! y5 C6 m! c8 i5 n6 I' z
  549.   dwProgramState=AP_NOTHING;5 c; s- U0 i9 _3 v0 m
  550. ( s8 g* Q. Q6 z1 a/ Y: f% W
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);% M7 @5 s% u0 Z/ p9 [; B' S

  552. - u1 v6 ^2 }+ F, T
  553.         // Standard initialization9 b0 H& H$ a; @
  554.         // If you are not using these features and wish to reduce the size# D1 I2 r. M( [
  555.         //  of your final executable, you should remove from the following+ _$ g( X3 X% ]/ t+ ~6 ^
  556.         //  the specific initialization routines you do not need.. t6 T8 V+ J0 Q) g+ X
  557. 7 U, P' M1 B' I, f  M; D5 |3 K
  558. #ifdef _AFXDLL- ]+ N& V6 f2 {% v
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL. ^0 T1 v2 l% I3 o: O; `% H
  560. #else, ?. m& T3 \. g+ s% l' l
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    2 i6 W2 G% O' F! S9 j( H
  562. #endif  U4 u/ V; {; u! y1 c* s( K" Z3 B4 X

  563. # U  }. X$ j6 k! Y: \# x1 B' k; L
  564.   dlg=new CRevAppDlg;
      B3 v7 o* w$ a# h4 ^3 W, F/ G5 h
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ) k5 w3 a. ^9 L4 O* |' x
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    7 y9 S7 @6 Q# X5 `5 x
  567.   m_pMainWnd=dlg;
    ( C) I/ A3 l' m

  568. - U  Y. p, a1 v2 `# @
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    . C  |" b7 b$ M9 D/ C2 i
  570. ( b$ ^3 N) t1 G5 i, ^1 o
  571. //  GdiplusStartupInput gdiplusStartupInput;- |2 v+ G7 B- o. W9 y
  572. //  ULONG_PTR gdiplusToken;
    8 S* [; D7 r& G
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);, D4 k+ z: Q( ^+ l* g
  574.   r5 T1 Z0 |2 H; I& d
  575. //        CRevAppDlg dlg;8 F& o: b7 @+ G9 f
  576. //        int nResponse = dlg.DoModal();
    ) ^9 |( Z* Q" E% i) K% n+ J! l
  577. //        if (nResponse == IDOK)! l/ r/ O; s# X9 D
  578. //        {
    $ K- s! @4 m' g0 q0 Z
  579. //                // TODO: Place code here to handle when the dialog is, `! x, e# L) F- e2 Q+ X- g* G4 `
  580. //                //  dismissed with OK* G* u' X6 n  D; E# p
  581. //        }2 a! w! {4 E1 [/ [6 Q: z; ]
  582. //        else if (nResponse == IDCANCEL)
    ) l8 @% x' [( |( A4 [" G5 P
  583. //        {
    8 U9 Y: U  t9 r' \8 n. N
  584. //                // TODO: Place code here to handle when the dialog is
    " y  v- W7 d" A' Z
  585. //                //  dismissed with Cancel
    * ]2 _( B7 k0 L! d6 k  F' R
  586. //        }
    , z+ X  O% ~+ `' u
  587. / w1 l9 Y* B' [( y
  588.         // Since the dialog has been closed, return FALSE so that we exit the+ C0 m7 Z( H% m$ ], r, {! ?
  589.         //  application, rather than start the application's message pump.
    ( _) b" B+ H& [% A5 H) W
  590.         return TRUE;7 a# b3 I0 }* b/ F1 n! S
  591. }0 F8 I. B$ D6 \& }5 k
  592. " }* A) e) f' _$ N9 F, p/ G/ e9 M
  593. char *CRevAppApp::strtok3(char *pSource,char *token)" F% Q- _  _" V* ~; `! Y8 [9 ?; @
  594. {0 U+ V& g3 p0 e+ S$ h! j, O
  595.   int i;
    ; J; S2 y' x! X& A
  596.   char *szRet;3 J5 X6 N3 e4 @& N4 G' l

  597. , c" I: |: o: b& l" i  w% k2 n
  598.   if(pSource) { itoken=0; sztoken=pSource; }- o: _; c: E2 T5 [! F
  599.   if(sztoken)$ p- y* y6 k/ N0 Y; J# o
  600.   {
      v% r0 {  f; x
  601.     szRet=&sztoken[itoken];
    . `- A9 h: z  j: |" a4 u
  602.     while(sztoken[itoken])0 c, X. z. e9 U' x7 W
  603.     {
    : m0 ?! x, e3 U; `/ d
  604.       for(i=0;i<(int)strlen(token);i++)
    2 m% C* c+ `7 D9 V5 W' H
  605.       {
    + t% L, x+ r. i. O1 [) I
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    $ J0 q: Y; }0 w* B
  607.         {
    & [- x, e$ i, r. o; |/ y9 n
  608.           sztoken[itoken++]=0;
    " _! L; s$ B9 V4 P' U2 S
  609.           sztoken[itoken++]=0;+ W1 b, A7 N; t0 r
  610.           return szRet;8 A* l( Y4 o0 D3 r
  611.         }6 Z3 A- p" @4 h  u) }) U( |; C
  612.       }: k9 H) k1 P7 N! x5 U3 m* b  D
  613.       itoken++;
    3 j% m" Z) i9 M6 k) D8 [7 N
  614.     }
    7 l1 ]; ~5 I' M: R. z
  615.   }+ t. G/ F" P6 I$ Z1 {! `- r+ Y
  616.   return NULL;" M6 g  w7 E2 K" i% f% m. A; q
  617. }0 W  F# u/ i& i
  618. # M/ F8 B: S; O; z' C! ?
  619. void ProcessProc(long Total,long Current)* k0 f4 v- Y  @% s7 \" L$ O3 l- B% [
  620. {' i1 U9 g& l  I& o& s3 S0 _
  621.         MSG msg;
    8 q& x6 d1 L5 I' \- M4 M- X
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);* q% I6 c- m( s1 `0 f6 y; K8 ?
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));6 I6 h* N7 k, y4 b+ n4 y, y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))% V- Z6 X; n( \( K
  625.         {5 i% v5 E: x" W8 Z3 q
  626.                 if(!GetMessage(&msg,NULL,0,0)); G" F% X' Q  \" K) @5 o2 J/ m3 l
  627.                 {
    & H) {2 I5 Z$ `0 j4 V0 W) g  J
  628.                         return;
    : z# Y8 K% \& P% \
  629.                 }4 r( W, C0 f7 r+ y( l; r8 M
  630.                 TranslateMessage(&msg);; F) _2 O( e" u3 N1 c! [  Q
  631.                 DispatchMessage(&msg);
    ; i8 A" _) W; I* a" g* w2 _% B' P
  632.         }       
    $ a/ o0 y( A( q7 F
  633. }
    ) }6 j, T/ e' o( p

  634. 7 ?. b3 S5 C* r- W; \$ p" c% |0 D3 }
  635. BOOL bFirstChar=TRUE;
    # \0 O. u2 N2 j
  636. % I) S; ?3 Q+ Z, ]9 A& {3 ^" T3 p
  637. BOOL CRevAppApp::OnIdle(LONG lCount); H8 W; C! N! ~, ~
  638. {6 r+ S/ x2 g* _) [9 [
  639.         // TODO: Add your specialized code here and/or call the base class
    " Q& G+ b* r& I1 L6 e, {+ |
  640.   switch(dwProgramState); a* Q* D( ^# {4 q
  641.   {$ D: ]6 g1 Y: |( v. @
  642.   case AP_NOTHING:
    - z) ]  x7 B, \# n  v  P
  643.     switch(dwStartUpSteps)+ v5 M+ V, R& s7 f
  644.     {
    0 k. y4 A& Q6 z! b
  645.     case 1:
    % p7 u6 |" U5 A, N+ i  l8 U
  646.       {" K1 x. ?% U( C' r) D7 @
  647.         int i;
    ) t' G8 L* E2 k: L- P+ }- I- B
  648.         CDC *pCDC=dlg->GetDC();
    ( @  N- G5 ]7 v3 r
  649.         HDC hdcwnd=pCDC->m_hDC;
    8 N! R2 |3 a# g9 y$ R$ z: n
  650. //        Graphics graphics(hdcwnd);$ p' x! b0 D/ v) y4 c( _9 N
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");6 n5 C+ r! S8 ]3 _
  652. //        INT iWidth=bitmap.GetWidth();! ]6 p7 W  s' J- ]% s
  653. //        INT iHeight=bitmap.GetHeight();
    ! m- g. h9 t7 {: A; E
  654. //        Color color,colorTemp;
    # d+ \8 |7 u, q! p* V
  655. //        for(INT iRow=0;iRow<iHeight;iRow++): V7 a6 B8 Z0 K6 C, y/ G! g
  656. //        {
    5 h0 j2 J; {1 t/ P' Q5 s+ _
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)9 u+ y) R) [0 Y4 F, Q
  658. //          {* b1 g! r" n3 R; O* T' V' i! G4 g
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      S8 n% z4 H# \  o' u
  660. //            colorTemp.SetValue(color.MakeARGB(
    4 G' e. _; a8 ]0 |8 h) N( G
  661. //              (BYTE)(255*iColumn/iWidth),
    # {# z1 G6 p- T
  662. //              color.GetRed(),' }2 o' o" X, A& f! E
  663. //              color.GetGreen(),
    6 e5 q8 G2 }6 e5 _. }
  664. //              color.GetBlue()));6 p* v. V1 L6 n- Z5 t0 r6 E
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    - g, ~5 r: p0 u
  666. //          }
    $ S' H: u2 p! R4 e/ U# ?, V
  667. //        }8 @7 b" V+ L: z
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);, s1 g' S8 ?- G3 l5 c. R' v
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 x' k6 S+ }! F  x/ o
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ! _  O# q4 [, g* r4 N
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 j4 f/ X  h& \
  672.         for(i=0;i<240;i+=8)
    ) q8 k, p+ w' U& F8 _( D$ A
  673.         {- Q9 @8 _' |$ x
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 Q' l. a+ P' r: u6 b# z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);* a8 i) I( ~& q& }/ S# G3 k
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);2 x3 D0 m9 @) k' W
  677.           Sleep(33);
    0 X- t* _4 y6 P$ \% p
  678.         }
    9 h- U7 c5 v  P. Q+ r2 d/ n
  679.         Sleep(1000);
    . b% X0 g1 w4 M
  680.         for(i=240;i>0;i-=8)
    ! a. F+ B, E$ L' ~5 z
  681.         {
    : A3 l* F) e6 r# |8 q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; E6 j  e2 k# [8 E4 f
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 G+ T7 N6 W: e' t) B! r! i
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* Q; \+ X  V% ^. n' v! p, M( A2 I7 ?
  685.           Sleep(33);
    - C- N/ j: G; V9 p
  686.         }6 C3 f- i0 p" Z8 i8 c% t3 m
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);0 P6 p3 Z+ T' A4 s& T) Z, G# O- K
  688.         dlg->ReleaseDC(pCDC);
    # d% ~& k# W9 M' w+ P7 Y& v
  689.         DeleteDC(hdctar);
    : v& Z/ o- P/ X
  690.         DeleteDC(hdcsrc);: F6 w( h! y3 a( a$ z
  691.         DeleteDC(hdcorg);
    % N- k) B% B$ s( {
  692.       }
    0 Q! I9 F3 c, Q/ x
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ; W% z/ v% Y, V4 ~  z8 \
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    8 e; E$ X1 \- u" d- V" T' v7 o; R& ~
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, m0 O5 q$ h) Q6 q5 n8 Y
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 p9 y7 f2 h# W$ T
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 j' ?4 T. \$ M0 F% r  [" n
  698.       if(!Dn.Connected())
    ' H" x  O8 f9 U% C" H
  699.       {: _  h2 n' ~% [" p& G* ^6 p1 K, h
  700.         dwTotalFiles=1;3 f# s" L& I3 k% `" k4 Y
  701.         dwDownLoaded=0;
    5 V0 M( S7 |  B* W) k
  702.         bSilentStep=TRUE;
    ) D7 n+ Q% E& Q" `
  703.         bCompressed=FALSE;6 e8 }2 M* ^& g+ d* w
  704.         strExtLocal.Empty();
    . ?% Q. }1 l- k) X
  705.         strFullName="readme.txt";& g" O  c" K" D# _4 I! n! X
  706.         dwProgramState=AP_CONNECT;
    ! d7 ?; ?7 p$ w3 j6 r! Q: @
  707.       }9 S4 I9 [( x8 h
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ( ?' l5 @' o, s
  709.       dwStartUpSteps=2;8 J5 y7 j8 p; ?! r" Y$ v( S! h
  710.       break;
    , Z( e+ G6 `) X' B7 V+ U7 s
  711.     case 2:% O. b! ^; w  h
  712.       {
    * @. L* B9 `; W5 y; i* n' ~, W
  713.         int iEOF;
    1 i  I' m3 h3 z* E' O
  714.         FILE *fp;
    3 R6 h% G4 k* ~$ `- ^
  715.         char szString[512];6 y( G' F$ |6 v9 ~' z* v0 s
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");: q1 Q& g. ?+ `8 a
  717.         if(fp); q( z9 ]' O8 N9 y! e+ q
  718.         {) n- Z% c$ }: o; g# Z; u
  719.           do
    7 Q, J4 e5 n0 q# }. z0 b
  720.           {
    ' m4 P0 F& w- [' N
  721.             iEOF=fscanf(fp,"%s",szString);5 H" f. s6 _9 h) p9 O9 k; y  c. a
  722.             if(strlen(szString))  p* ?; }1 ]* S2 h
  723.             {+ ~# Q3 S' o; G# S7 I8 s. q
  724.               if(bFirstChar)
    : ~% A6 c9 O1 T1 S  h. y  a
  725.               {
    % \, M0 N% C; a' `
  726.                 bFirstChar=FALSE;
    8 Q/ p' E( R# s' ]! n& L
  727.                 bConnectIsBig5=FALSE;
    " \1 `5 \2 Y! z. U; W% k! v5 _3 @" ~
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;) O) h, g% r2 [& i% p
  729.               }' m) M+ r2 Y+ C
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . g8 u3 ~0 `) q9 D
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));7 O) x) H7 G$ Q% L8 a
  732.               dlg->m_ListText.AddString(szString);
      [' v% T7 ^. P! ]
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 M' H9 Y% b+ }8 e9 f- V
  734.               *szString=0;
    , v" u( k! o! U& l3 r! P% W1 ?) J
  735.             }
    5 I! Y/ ~# E2 ?# M
  736.           } while(iEOF!=EOF);
    $ }8 p& {8 w/ O; O. _/ s& x
  737.           fclose(fp);( u' I9 X6 D- E. ?/ B
  738.           unlink(".\\DownLoad\\readme.txt");; k' D! W  T2 {0 ?7 S
  739.           dwStartUpSteps=3;
    1 x, y9 |9 j4 R0 Q7 O5 a
  740.         }
    4 P: g& q" P' b
  741.       }% N7 X( h; X1 E1 i* T; R! P3 M
  742.       break;# s' I  p& i" W9 s! O0 m% s, O
  743.     case 3:
    6 N+ i7 I. {9 t. }1 c; r8 N5 r
  744.       if(!Dn.Connected())
    " J- q- k' c% T
  745.       {9 S# w4 w( k/ H& ^
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);- v$ e# p$ p* b$ i
  747.         dwTotalFiles=1;
    & Z. ], V9 Z* O1 z2 I+ b
  748.         dwDownLoaded=0;' s& \0 l! s% b1 ~
  749.         bSilentStep=TRUE;
    6 W0 N; O4 |8 `7 l3 {. P6 j2 e
  750.         bCompressed=FALSE;
    5 H1 F! ^: b, g
  751.         strExtLocal.Empty();1 x3 L7 Q( v7 H+ \& W( }
  752.         strFullName="checkversion.txt";5 h. v0 ]/ Q3 i
  753.         dwProgramState=AP_CONNECT;4 @5 R  C3 ~4 k3 V
  754.       }- W& h$ Y- n: f5 w2 u
  755.       dwStartUpSteps=4;
    # ]# h9 M- t) p/ k* q$ F
  756.       break;
    : X# c, `* C1 e! }4 {6 ]# f; |
  757.     case 4:/ p& h) F& G. m$ i) w) q
  758.       {
    . x2 r2 f% A" c9 |" e
  759.         FILE *fp;
    # G; x3 H1 Z- M  Q* q' F) ]
  760.         char szString1[128];
    9 P' J0 Q8 Q" f. O- l
  761.         char szString2[128];" d6 d, c! e8 p
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # C, W( e2 ~! p  c6 Q3 ~  N, q
  763.         if(fp)% l. K( X2 y0 Z( Q
  764.         {
    : Q  _! p  I" r* R" S3 b" n
  765.           fscanf(fp,"%s",szString1);
    & X0 }4 X6 C0 V5 B7 e5 r
  766.           fclose(fp);
    0 V! a% C+ c+ |/ E1 w
  767.           fCheckVersion=atof(szString1);; E" ^& R1 A8 n1 h9 t+ W
  768.           fp=fopen(".\\checkversion.dat","r");" M; a2 t# ?# {6 J' M' e) r
  769.           if(fp)
    4 X4 {) K2 P1 \0 z1 C; c$ m& ?
  770.           {: _8 v/ B7 B# f
  771.             fscanf(fp,"%s",szString2);3 W0 {( G5 t  g  q( l: R" U2 M; n
  772.             fclose(fp);' \& G; n- S! W( Q7 T: b
  773.             if(atof(szString1)!=atof(szString2))
    / o2 |1 f! @! M3 P" k
  774.             {. I9 h( k( n4 N: Z
  775.               if(!Dn.Connected())# R& I& p  ^1 g' Y# \
  776.               {) O2 s+ b. }  [# t: Z
  777.                 bFirstUpdate=TRUE;
    ( l/ X0 e8 M4 i- [& E0 e2 z4 N
  778.                 dwTotalFiles=1;
    9 g4 n' [- m; ]2 E- H& k
  779.                 dwDownLoaded=0;) J- L- w  k" q2 O& s/ m; ?3 R- H3 h
  780.                 bSilentStep=FALSE;
    * L# J% O1 h, I  \! e' H3 N
  781.                 bCompressed=TRUE;$ \+ y& f! G4 d( O" f- |
  782.                 strExtLocal=".\\DownLoad\";/ z1 P  B1 ?2 R$ h' D' t
  783.                 strFullName="update.txt";
    7 A3 T3 j0 F$ \0 T; {; F% g
  784.                 dwProgramState=AP_CONNECT;# n* o# u# t0 ~" j
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' l6 u- B( J+ o4 V4 E5 t0 U( G
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 L( W1 Y3 p4 O' L* ?( D
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");/ o% ~4 }  K3 m/ E; x: K& I: d5 [+ Z

  788. ) H6 i8 T. k3 ~7 g7 J6 y8 i# f
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % J* D' W  g9 h/ Z- R
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    " g1 M) x+ a6 y2 j1 ]8 P8 f* X" @
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    % q6 ^5 y% p0 @& H% w
  792.                 {
    6 j; s% `  t, l6 U) |
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");. j' k7 p0 A; F! f/ ~% ]
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    : N) F  ~% {: |( t, U
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    5 f9 c* Y) x+ n* X- v6 r' `2 K
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) U+ H- |% a0 E

  797. 6 N( G8 K# F* `; `$ Y
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! ~$ v" O# O3 P4 p) E% a$ w" H
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) \9 n" n2 ^2 o; x9 l
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");1 k( J' i) V. W
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( }  ]# l1 X% N( Z0 O  I
  802.                 }4 E' @/ {$ k* E% x
  803.                 dwStartUpSteps=5;& a0 Y% E! \5 F
  804.               }
    , s- i  j9 w% E' y
  805.             }4 d2 |2 s8 k! Q+ {' d# }
  806.             else
    6 c' j: h$ X8 ^- w1 s1 O- ^
  807.             {
    : g+ r: t- w  y; q) Q
  808.               unlink(".\\DownLoad\\checkversion.txt");4 B- [7 O0 Y, c5 ]0 d! L3 z4 ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , f  U2 ^: p, _
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    . }- h4 ~7 ^4 \3 `
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    , b$ j( j, G+ L7 f, {: E
  812.   P+ s) S+ y8 k' u! v  ]: o3 k
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 F: Q4 ?. `$ Z6 p- F" @5 O
  814.               dwStartUpSteps=99;/ u6 y# N" t! N) A8 n6 w4 ?7 B2 o
  815.               bFinishUpdated=TRUE;2 u2 X$ N, e' z3 F& d
  816.               bCanUpdate=TRUE;# v: h9 H9 Z4 M  P* B9 ~
  817.             }1 g& N/ h0 M( w
  818.           }
    ( s7 Q' A. z2 a( d8 K% H
  819.           else. H( ^2 u1 R, J) B0 n/ N- X
  820.           {# i; }& l# b3 t: Q, ~% V: C
  821.             if(!Dn.Connected())
    ! D" a( Y) c+ _6 Y4 u+ f0 f
  822.             {5 D. R! K. V0 Z* E; i
  823.               bFirstUpdate=TRUE;8 W+ U& i0 w: S* I/ d, x
  824.               dwTotalFiles=1;9 H  D2 a; U) X7 L2 u+ e
  825.               dwDownLoaded=0;# ?2 l4 M( |, k! ?( ~7 k
  826.               bSilentStep=FALSE;
    ! f% m" r7 C2 {; i3 V5 t% j7 D
  827.               bCompressed=TRUE;  `) `$ h, z5 _9 v7 f
  828.               strExtLocal=".\\DownLoad\";+ m9 U& D5 e( V# U* B
  829.               strFullName="update.txt";: z1 ]7 F3 Q( K
  830.               dwProgramState=AP_CONNECT;: V) k1 _; |. O" y( A9 q9 F1 B
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, N. t$ R) i* H( J; p
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ {$ u* x3 D1 z; n6 {9 @
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");- d) \  [& d1 k5 y9 D; R: E. {
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) O8 C6 W6 H* s7 c* Z6 u
  835.               unlink(".\\DownLoad\\checkversion.txt");
    & A, ?; \. ?& `  U; D9 q. ~
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)/ e' P4 Q; B8 R/ @" F
  837.               {
    # h- ~1 i1 Q" u8 ^( t
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    4 H6 K( ^& g+ }5 O, N' o- E* f
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");" ^+ i9 \, c8 I
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");/ v8 ?7 b1 g! S8 F3 ]* a% U
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* w. b" j0 C& x# p
  842.                 - T, t6 l, x' B$ p9 R
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & K; d+ H" E) O* O1 `/ c' E2 c
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& j8 ~+ q' v: V( c- s$ v9 F% X* F
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    / O1 [4 ~/ _& q5 A/ D' |
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # L8 g' E3 Y- o/ b: x% G8 w& Y
  847.               }
    % n: I3 `* s4 J. C) K, i3 U# W
  848.               dwStartUpSteps=5;
    - o, [/ ~# A  }6 G/ z- T" s
  849.             }# o8 {3 c4 ^) T' Y- f  K' q0 c
  850.           }
    , t+ ~" U8 Q3 n6 d! v. P: G
  851.         }8 U& Q3 H0 e* j% E8 w
  852.         else  D2 p" i0 a7 P8 a) J
  853.         {) w: _1 Z3 |$ i/ I1 k+ n
  854.           dwStartUpSteps=3;
    2 y, ]8 [' V. F, a' d
  855.         }. A; b, V+ F1 F) H& {
  856.       }
    ' q+ q* x2 k/ O1 K& z- u' t1 K& \; r" h
  857.       break;
    2 w1 |; P; }& j. I
  858.     case 5:
    - o6 s+ q" T6 m2 ^3 R; e
  859.       {, ~9 }' x7 ]6 R8 @& g% i
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    # f, q7 Q6 b3 p% I! q; p5 c
  861.         {" i1 z& o4 A4 a. H& f
  862.           int opt_overwrite=1;) _# p$ R, V4 v% q( I, g
  863.           int opt_do_extract_withoutpath=0;
    ( d$ J& K7 ^6 h5 a1 i$ e5 V
  864.           unzFile uf=NULL;
    ' o# X: F$ M! t
  865. ) a8 N( c/ k( Y3 c. k
  866.           uf=unzOpen("Wsa.zip");2 c1 L* b/ K1 y6 q6 S3 _
  867.           if(uf)2 H; J# V/ R' l* K2 Z3 J  P; _
  868.           {
    6 i6 L3 e0 b' u  m9 ?# K, l  Q7 j
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    - e* J9 z: V( n8 z5 B8 _8 N
  870.             unzClose(uf);0 U+ i. O+ s# p6 |8 u1 c  A
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");# k8 J  s) x$ @% e
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    0 Q3 U. Q/ w; k3 X& s/ C/ N
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");+ f2 |3 O! K' p7 @4 B& V7 Y) `
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! {1 o$ G/ Y- i3 n8 m
  875.           }3 n3 R5 w& ^  E9 ?7 ?, X! v& f
  876.           DeleteFile("Wsa.zip" );# d! a; c4 s2 h% G# g3 ]) P
  877.         }. a" W; q9 r% v" V) E9 I

  878. , O& R9 X3 q1 j: o
  879.         if(CheckLocalVersion())
    ' T+ V+ U" {7 N2 a+ k7 z' D+ x4 _
  880.         {+ T" P* ~3 v6 k. i& x; D
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");% P* s3 F! l, D3 \& F
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ' D- A& l/ v9 e. C# o% ?% U
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");; u1 `* ?( o+ J7 w
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( X  j+ s* H3 R5 _9 f1 u9 g
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);) l2 M/ {) m2 n( i- G; a
  886.           dwStartUpSteps=99;9 H0 e' Y+ ]/ A
  887.         }
    " R$ [: ]. ?2 i+ G1 Q
  888.         else
    # x  l; @/ F% ^1 Y
  889.         {
    6 |* Q! p" f+ P
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 ?3 @4 k' c+ T5 l1 @. h" o9 Q
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- k* P. J  V* ^7 a$ \- I
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    " x2 U1 s8 K- d8 d

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

* b' z. X2 r8 Q4 v) |' L/ i, t2 M8 w! H6 f- m

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-22 03:19

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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