找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式

' v: R. Y2 b4 v8 Z- a
  1. / RevApp.cpp : Defines the class behaviors for the application.
    9 E3 {$ Y4 U. h! s* k
  2. //9 w1 s  }9 Z% W  p
  3. & G7 \( k6 H/ F- e' D+ \  Z3 ]3 K
  4. #include "stdafx.h"
    " D7 K& A: W8 d# l# G/ _) T
  5. ' \$ s+ M6 G1 D
  6. //#define UNICODE1 }4 W3 E7 V5 e/ A: p6 q' U: O% w
  7. //#include <gdiplus.h>% G" g* n4 t+ A7 W6 ~6 g
  8. //using namespace Gdiplus;
    4 L. K% \4 b* S! r4 z9 E

  9. 4 v! v& @8 P6 }' i1 K+ x6 a% }
  10. #include "RevApp.h"8 B0 U1 W) A4 |0 n- S
  11. #include "RevAppDlg.h"
    # l+ r% |9 a" @  `

  12. 9 j0 X/ N/ b2 r$ {4 d
  13. #pragma warning(disable:4786)
    + v* k# i7 F" k- g) C8 j1 D4 ^4 Q
  14. #include <map>
    " U" Z1 M1 c' j' N5 n
  15. #include <list>/ g( w) k% K  X$ i' J( D& s6 q6 S7 M/ T
  16. #include <direct.h>
    : z5 z! V8 X2 G4 J+ z

  17. 3 F# ]# p* H+ T) ^& |8 X, g
  18. #ifdef _DEBUG
      N3 O$ u  u8 T" v4 i+ l2 Y0 j$ E
  19. #define new DEBUG_NEW
    + G% M) ]* D( ]$ d
  20. #undef THIS_FILE
    ' n- X, |* n5 ?1 R9 U
  21. static char THIS_FILE[] = __FILE__;
    & Q- x- O9 p% |+ ], s! Q- }2 d
  22. #endif6 m( L- H5 P3 L6 q4 h4 k
  23. #include "SkinResDef.h"5 O( j- E/ [% j5 K) ?# d$ R
  24. #include "ChangeBG.h"' d7 H% E- M8 e0 g+ z
  25. #include "AFXINET.H"
    . {" c- n. a) P; \8 \

  26. * C7 E( l; B  i
  27. #define TRADITIONAL_CHINESE 0: ]' V/ E' K5 ~9 _2 N; A, d
  28. #define SIMPLIFY_CHINESE 1
      K2 R/ q, ~' ?4 F
  29. #define ENGLISH 2# f$ ]" S9 R' G. M2 x
  30. int m_iLanguage = ENGLISH;: k2 w/ h3 J- _/ P/ \/ D
  31. /////////////////////////////////////////////////////////////////////////////5 j) u; n$ s- z7 Y: K4 U" D
  32. // CRevAppApp, Y% p; B% Q! i) D; T0 o6 U

  33. 0 X5 T6 H6 Q9 i
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)( l2 f' x8 }$ m$ C4 u
  35.         //{{AFX_MSG_MAP(CRevAppApp)2 c$ v. ]( Z1 O5 |4 L
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.# {9 e5 R$ E! k/ b$ R
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!9 W  o+ `5 C. V0 B! S
  38.         //}}AFX_MSG
    7 l; i7 O1 Z' U* ]4 q4 d* q# `
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)' A1 T; N: t7 M& `
  40. END_MESSAGE_MAP()8 S+ I( T: M1 }$ g/ O( Y" s, d, O
  41. & }7 X  I: z3 Y$ s9 z& W
  42. /////////////////////////////////////////////////////////////////////////////
    5 n. ^8 O: |8 f( t/ f$ ?
  43. // CRevAppApp construction
    4 q  C* i5 y% a. [: G8 @7 ^' t% J9 Q

  44. ; d! S" w$ Q, ~. L+ l
  45. CRevAppApp::CRevAppApp()
    ( _( `, g- ]5 t2 d6 U
  46. {
    4 y. i" V3 q  T% z: G' ~
  47.         // TODO: add construction code here,
    " R$ g% a. b; i$ a
  48.         // Place all significant initialization in InitInstance6 w7 r9 m9 ^/ B4 D. I5 X
  49.   bDisplayIsBig5=FALSE;. m; ]+ o) W( o- \
  50.   bRestartUpdater=FALSE;
    . [! o8 w0 \  H1 t6 _1 P) D/ k4 |
  51.   bFinishUpdated=FALSE;
    ; z/ S2 F( E) G5 D) W, L3 o
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    # x- Z: q8 r5 i' Z- m
  53.   InitChangeDataBig52GBKS();
    ) z. K% S6 P" w, Q! m' P& b  T
  54.   InitChangeDataGBKS2Big5();
    ' t9 Z6 J1 H6 U( w6 r8 L
  55.         //
    2 `% g) u1 a! y& L
  56.         bClickRunExe = FALSE;
    ! m0 T: _0 |! O- V' N& k2 _
  57.         //9 L4 _) j3 Y& S. ]0 \- z8 h
  58. }. D! X; z8 r2 b

  59. 4 D7 @+ k  T, F* w
  60. CRevAppApp::~CRevAppApp()
    * N" G) ]! N9 L/ v
  61. {
    ( Q5 A6 a0 x1 ^' {) F) |# q
  62.         // TODO: add construction code here,
    5 t* C* ~7 @, N4 [3 {8 o- `6 ]! t* n
  63.         // Place all significant initialization in InitInstance
    + b- N9 b; C" g7 p1 M1 I
  64.   EndChangeData();" \7 B6 h+ }8 @1 _1 N) O' N
  65. }) k* t/ v' L5 C+ L+ i

  66. 3 t/ a" J6 O: b6 V& `, T! F. N  K
  67. /////////////////////////////////////////////////////////////////////////////
    + [  Z0 O9 R- {2 D' }0 c( j6 {
  68. // The one and only CRevAppApp object/ B' t9 Z' v7 g0 x$ G
  69. , t- p3 Y4 x/ u! a# |7 l& l
  70. CRevAppApp theApp;
    9 `2 `5 z7 }" y9 l+ X; A. H
  71. ) J0 Z2 W: f* X( M: U) ~: E
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    0 z) t+ K) d& j$ M; M1 B7 p- {
  73. {
    " T; o. g. \, B% T2 A: |% P
  74.   int iEOF=0;/ J- ^4 X2 ~4 o' a1 E5 @
  75.   char szTempName[MAX_PATH];
    + F3 a: c  V. y+ g
  76.   *szFileName=0;7 X% Y! c1 U2 b6 `, b, J4 [
  77.   iEOF=fscanf(fp,"%s",szTempName);% `8 g* o3 E% a/ D
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')0 F1 {/ q: n; i/ P# a
  79.   {
    ) w% L2 Y8 F+ ^
  80.     strcpy(szFileName,&szTempName[1]);
    : N7 f9 Z/ r4 c7 ]& _
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)$ u: K7 [) b# \5 m' p; v6 J
  82.     {6 i0 V- W4 X, S
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ' N" h; T2 e' J
  84.       strcat(szFileName," ");$ I, W8 O; Z5 y9 K+ l
  85.       strcat(szFileName,szTempName);
    8 L; [3 @! x1 {" r' O( W
  86.     }$ e2 E( H1 L9 v
  87.     if(strlen(szFileName)>=1)
    5 L" S) F9 {" }  W
  88.     {7 ^4 h/ E+ ?/ Q, `' e5 @1 Q
  89.       szFileName[strlen(szFileName)-1]=0;
    : v8 ~+ a; h# q* g
  90.     }  s1 h3 R; Z1 j
  91.   }. h5 u! K$ m! Y4 [5 M
  92.   return szFileName;/ m. @1 n" u& _- `1 }9 }' P% B4 D- U
  93. }
    # O$ v8 h. J1 P

  94. 3 v6 Y% |; w4 e: m8 l( X" ~
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)7 E8 Q9 ?  l: G* \. f3 G" S
  96. {
    ( }5 b4 z6 a& W9 u* n# c1 y7 F5 M
  97.   FILE *fp;% n- p' y& c! B
  98.   char *key=NULL;+ D1 L) V" L7 x
  99.   char version[MAX_PATH];) O) s( @0 _, }" p
  100.   LPUPDATEFILE file,olds;
    , l4 y. \2 w, P
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 a( l  A' O- c9 c/ v0 m. h7 z
  102. 3 t/ O- E. Z- k2 V  t
  103.   UpdateList.clear();
    + r4 c) u! @" _' q% k
  104.   UpdateFile.clear();4 K$ ^6 R5 `9 `) l3 H( m* W
  105.   if(GetFileAttributes(filename)==-1) return false;
    $ w* B# S3 O$ c; |$ n+ S/ D
  106.   if(!(fp=fopen(filename,"r"))) return false;. W+ O- r+ K* v) Q9 o' V
  107.   fscanf(fp,"%s",version);4 P, n* ~$ @& g0 \: Z
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }# [( u! R. y% v- H5 a6 X
  109.   while(fscanf(fp,"%s",version)!=EOF)( R$ x# m5 {2 e( T
  110.   {
    - \" {( y3 l, _, k( p/ c! X# c
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 E6 m. [8 r- d* M4 V" K6 O
  112.     fscanf(fp,"%s",file->path);" j0 o1 v; @- ?7 @& I. `
  113.     ReadFileNames(fp,file->file);/ d. l9 R; \' F
  114.     strcpy(file->full,".");
    , R( m% z8 u0 ~" l
  115.     strcat(file->full,file->path);+ t* A3 E2 }* Z7 i' r) Z
  116.     strcat(file->full,file->file);
    . U/ h. q6 i/ N0 Q0 K& R1 S; }
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    $ F9 }  F' L+ K( `! I, F' D
  118.     {% _7 R& K. l# p/ E) B6 P3 g
  119.       file->vers=(float)atof(version);
    * Y2 |" ?. U+ ?; S, {9 M$ ^! ]
  120.       UpdateList.push_back(file->full);9 v" D& r. j+ k6 x: t
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));% A5 F6 [' g$ p- d4 {
  122.     }& ]2 B( Q3 c6 J
  123.     else
    5 S0 l0 o5 [8 ^/ Y" I. ?
  124.     {
    . E: L& [/ r; ~. i) g! p1 z0 a
  125.       olds=(*p).second;2 U/ k7 T) v- r3 x
  126.       if(olds->vers<(float)atof(version))
    + w0 S4 ?5 X1 [* {( C$ r
  127.       {1 O# \: e& L% C0 u' Y7 Y! Q2 v
  128.         olds->vers=(float)atof(version);
    4 t6 D8 N. B9 r3 I5 l' M2 M
  129.       }6 u' q  B4 f0 ]4 H' M8 _3 J1 W
  130.       free(file);
    * c0 x2 a/ e, n
  131.     }1 Y! I' d, w7 ?$ `) S. v
  132.   }
    ) n+ ]. {) {; y
  133.   fclose(fp);
      V, r3 A4 u0 h0 f$ z* d* V4 i" h
  134.   return true;
    4 c; x# c( g2 i
  135. }, b8 Z! H' I# B: X2 ~  \" w( c

  136. 2 r0 s# b. o$ y3 i
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)9 |* U+ G. g/ X( q# @
  138. {
    & @; R6 R, W6 T* t9 R
  139.   TCHAR  szFull[MAX_PATH];1 G* E5 R9 x/ [! M  o) u+ \
  140.   TCHAR *token,*inter;
    8 |7 d: O: O5 j; q
  141.   *szPath=0;
    6 G( N, f' [$ p+ |2 l9 c/ I
  142.   strcpy(szFull,szFullPath);
    9 V" E# V& u% n  E7 c$ P
  143.   token=strtok(szFull,"\\/");
    4 N7 {# g, D4 X# a. i
  144.   inter=token;
    + j! s3 r4 {: x/ g8 K
  145.   while(token=strtok(NULL,"\\/"))" e0 U5 q0 M, D+ @2 H- l+ b
  146.   {0 H0 B# I+ W# U+ f, |( n5 t+ O7 U
  147.     strcat(szPath,inter);6 _$ B. ~% n. k+ a% x
  148.     strcat(szPath,"\");" ~/ r/ ^% p( k% H4 @
  149.     inter=token;
    5 ~! K+ j( _/ F9 p! F
  150.   }! b' ]7 x0 G8 l. O) q" ~0 }' K
  151.   return strlen(szPath);: g& }# K% I% P5 p3 v$ |
  152. }) ]7 |' V$ B4 a% ^2 G0 ~
  153. : @6 f( ^% n0 k3 Q: ~
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase), E/ c9 g( W! L( u& D* g# Q6 N$ b
  155. {. b" T6 b) }( Q  ^, ?
  156.   DWORD attrib=GetFileAttributes(Target);
    . A7 K! |: P# l1 r
  157.   if(attrib!=-1)
    5 A: ?: ^  F8 j* N
  158.   {
    ' r0 w# X- W) k( W. |
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))* s- p: j" X0 Y
  160.     {
    $ J; S. F% D3 W) I2 {9 ~8 M. _
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);; D4 K7 w% L1 E) w. I
  162.       SetFileAttributes(Target,attrib);
    ' @" A* ]" O# ^* e
  163.     }
    3 N) R' _# Q  Y* T# W4 e
  164.   }
    ) x( k5 c7 c1 Q- h  n! M2 K
  165.   CopyFile(Source,Target,Erase);9 T# S" f" `& t: W. k6 {
  166. }* Z# a: T; Y. ^, O4 x4 |7 ~8 O
  167. & D( A2 p9 [4 ]) g
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)1 f; i1 d+ E3 Q& t6 J6 U
  169. {" H1 s, Y0 @9 d8 @$ k" R, L
  170.      FILE *fp;5 {8 H, K, J0 H
  171.      char  szBuffer[8192];
      j/ ~/ J0 {5 ?# q( Z; B
  172.   va_list  argptr;" a7 b; _4 M. V
  173. - s; @6 T$ a) l, c1 V+ l
  174.         va_start(argptr,message);
    6 j3 ?$ q3 ~5 A, _
  175.         vsprintf(szBuffer,message,argptr);% Y1 L& m; Q. e6 b2 ~
  176.         va_end(argptr);
    8 e  |1 k0 A! ]+ V
  177.   fp=fopen(FileName,"a");
    6 r  d# H+ H2 k: G! L  O
  178.   if(fp): b) G1 x% k$ R$ V+ P- `
  179.   {6 C4 F' a$ m9 l* P( K1 S0 b
  180.     fprintf(fp,szBuffer);/ S/ f. M% p1 V3 ?' `7 Q8 Q; {
  181.     fclose(fp);' G$ S  S% F& _9 B
  182.           _flushall();
    + K2 K3 m3 t6 Y2 z
  183.   }/ m6 O  x$ C# U; l* C
  184. }. S# \/ [7 N; k) ~: Z, \  g4 ^

  185. 8 p* D# s- T# `2 [
  186. BOOL CRevAppApp::Fclearf(char *FileName)9 P/ e$ B: Q* i+ b+ ^; E4 Z
  187. {
    * M1 q7 f3 d- G- R
  188.      FILE *fp;% E2 J" }8 ^8 G$ X* f* e
  189.     DWORD  attrib;
    " V/ c1 m3 {4 [8 C: U# i1 N' z
  190.   attrib=GetFileAttributes(FileName);* h) m3 ^; e0 ?# \! H
  191.   if(attrib!=-1)6 q' x1 c0 I' ~) k
  192.   {& ]! f7 p; l0 ^
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);$ `# w  F* H1 Y+ P' K( w$ ^& Q
  194.     if(!SetFileAttributes(FileName,attrib))
    - _0 I/ J$ h% z5 F
  195.     {
      E$ ?, t/ {) ^: n
  196.       return FALSE;6 \* C. q( x9 |. V9 r  b
  197.     }0 z6 M0 ~2 z2 G' g) K+ q5 ]" o
  198.   }' Q: M7 Q8 r9 u- u! A
  199.   fp=fopen(FileName,"wb");
    % ]1 c1 s) U" V
  200.   if(fp)& W$ s/ k2 }# B. H4 y% I# q
  201.   {
    ( d+ f. b. K: T
  202.     fclose(fp);
    & T; T$ E5 [) }, g1 v
  203.   }
    : ?, D9 @1 @3 ]" ^# T# B
  204.   return TRUE;
    ' v( |! |' ]7 X$ x4 h
  205. }& Y4 F: {# e0 @# ]2 ?0 j

  206.   l: U1 d- u9 Q. \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    3 a4 a) p  U4 [. f
  208. {) M+ I4 `& ?4 q$ i
  209.   char filename[MAX_PATH];$ z& B3 O# y* E* E. X6 D
  210.   LPUPDATEFILE file,olds;! W0 j2 y- i1 w" j9 J
  211.   std::map<int,CString>::iterator i;
    ; B, ~: M( ~$ G/ N
  212.   std::map<CString,LPUPDATEFILE>::iterator p;7 ?& S9 B7 w7 G( I  w
  213.   std::list<CString>::iterator l;
    ) n7 d4 L, V- n4 E( J9 `
  214. 1 @6 `8 n( S, @3 F: A0 M
  215.   if(bFirstUpdate)
    , H) x/ ]# {. l0 X: j( u' _8 l
  216.   {
    ' O/ K9 Z' f) H  v- M: @
  217.     dwCurrFile=0;
    $ V6 {7 K% G3 a
  218.     bFirstUpdate=FALSE;
    4 l) o6 ^( y1 Z6 `& W2 l3 e: ]1 r
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% |! K( T' a( @2 J
  220.     {
    8 ]/ B# s. y9 {
  221.       dwTotalFiles=UpdateLocal.size();
    . H9 A0 K: i. S" P9 _" T# b. i
  222.       dwDownLoaded=0;
    $ f- \, l9 I2 X6 z3 J8 N: e
  223.       bSilentStep=FALSE;$ }: B& N3 l- ^4 g) p
  224.       bCompressed=TRUE;0 F1 x  c% y8 {  {' I9 q% B9 I8 I
  225.       strExtLocal.Empty();
    4 r: {- |4 A% z6 O0 X
  226.       strFullName=(*i).second;; n; S: J/ G# m0 E9 t& g
  227.       dwProgramState=AP_CONNECT;
    . [) |6 L7 @6 x* D9 i  y2 Q2 A
  228.       return TRUE;7 \$ [( C( Q4 ]6 ]
  229.     }5 z9 u0 W2 r5 F
  230.   }# l: W/ }5 d$ ~' y1 g0 y$ {4 F
  231.   else if(bRestartUpdater==FALSE)( V3 \5 [! s* ^, Y
  232.   {- _. C: y: n  g+ i. `5 E; K. }
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())( ]( _  d- Z1 K/ [* z0 F2 J
  234.     {
    / ?. s3 U( x' }% Z% x3 \5 b& x
  235.       file=(*p).second;6 e. A# `' U% y/ t7 j) C9 d
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' `4 w  I- R8 z3 n7 l; f  |# I- [
  237.       {% b5 _& e6 g/ h8 p7 O' l6 [7 g' y
  238.         olds=(*p).second;
    0 ^0 A- D3 t' G: D( f& Q  M
  239.         olds->vers=file->vers;  J2 Z3 y+ `. |/ V5 p6 g8 {- `
  240.       }
    : s7 c, x4 K$ M% i/ I2 y* q
  241.       else
    8 z# t, E/ S0 C2 u4 M" D, W9 ^$ h
  242.       {
    8 k: s* `# S5 z& X6 ~" x" ~
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 {9 {$ f/ p; q9 D( P0 m
  244.         memcpy(olds,file,sizeof(UPDATEFILE));. O% Q6 I: {4 x
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));! b- x! L' ^, j- S/ K/ S
  246.       }$ U2 U* W! d4 Z7 q) k1 O
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# ^3 C+ y; M* _$ F% |2 V1 O+ F
  248.       sprintf(filename,"(%s)",file->file);8 w" |. }. j+ L0 Y2 ^4 l+ l
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; G3 K# k( [( H# e2 j
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    " ]2 o( n7 {! G9 i
  251.     }% u' e! C! e4 N6 r
  252.     dwCurrFile++;
    . R) t9 F: C. I3 ?
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ @6 O* X1 |, ^2 T
  254.     {
    3 L' W6 ^: u8 y( k
  255.       bSilentStep=FALSE;
    * ^1 m5 }" L' ^. y7 b
  256.       bCompressed=TRUE;
    9 ~( _4 ~/ R( M) `
  257.       strExtLocal.Empty();8 t/ _6 I, q- _/ u
  258.       strFullName=(*i).second;& |" V2 N/ y. G1 ?( h! r
  259.       dwProgramState=AP_CONNECT;
    ) {7 p- t( d( C9 h
  260.       return TRUE;
    . a0 x2 W* C' q7 I1 r6 R
  261.     }
    : u& N3 N  x- k* X0 w
  262.     if(!bRestartUpdater)
    ) q7 }3 ]! D+ E
  263.     {: M4 @/ I. Q5 q" j" B2 q
  264.       int iCurrSize,iFileSize;8 k& M6 R6 Z7 {
  265.       iCurrSize=0;
    : k" y5 I5 D! T2 x- g
  266.       iFileSize=UpdateList2.size();6 Y( s2 Z- W& m; h
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");2 \. K1 @6 d* H) [
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 ]9 g4 W2 M& V  U/ C5 [
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");( x5 f$ {4 H, o: \
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 X, s: [1 {6 S# M9 z4 n6 R1 m0 A
  271.       Fclearf(".\\update.dat");& {8 j; g: h- G
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    % p( {1 c6 y/ X8 ]7 h) O
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)& Q7 t1 K& `% I) F
  274.       {
    $ F$ c6 c$ B+ O. ?; y- u% o% ^) G
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    9 ?! I& v6 I' H2 |; _4 }; L
  276.         {* s* `  W5 o; }# \" L# Y& R0 P
  277.           file=(*p).second;6 N! v8 v& B( l
  278.           sprintf(filename,"(%s)",file->file);+ ^8 Z/ K5 b* h& X2 o/ E
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  }$ t( [8 j/ G6 K" g
  280.           iCurrSize++;( ]3 ~) Q3 |5 `# ~  ~' W
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    - l: a' B1 ?8 K% F, i, _
  282.         }# q4 h6 R6 t* [# I
  283.       }) d$ w, w$ i0 m5 a1 a; [
  284.       unlink(".\\update.txt");
    4 m/ [/ k. a, A, |
  285.       unlink(".\\update.tmp");
    ) I1 b' h: X4 o& n* o5 B6 \
  286.       Fclearf(".\\checkversion.dat");6 \; p0 K; h. [, P% S" h# H
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    7 V7 O2 J# ~( P6 B- G" g
  288.       if(UpdateLocal.size())
    6 L( d( Q3 W) Z, y. W
  289.       {; ?7 a$ z; W- ]2 j! W5 J- v- R
  290.         UpdateLocal.clear();
    $ c* m. L3 ?& O) e) r& l. u
  291.       }) n* ]- U& f& N5 }
  292.       if(UpdateFile3.size())
    - ^# b4 H6 ~/ H
  293.       {
    " u- l& F0 `+ O- z  p; B! d8 M
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 U. }  ?  n, ~
  295.         {
    5 `7 |1 Q5 G# x. h, Y
  296.           file=(*p).second;% r' @" H: ~3 }
  297.           free(file);
    ; h1 B: B4 \% o+ A- W2 l0 U$ W$ |
  298.         }
    0 n' S# ?, Z/ p, c: m' U2 u
  299.         UpdateFile3.clear();
    $ l5 ^6 x& v0 O. p
  300.         UpdateList3.clear();
    ! l8 [- w9 s+ N  y5 |) |
  301.       }  r6 O) Q# j% k5 c; B
  302.       if(UpdateFile2.size())
    9 c* W2 f/ [: x
  303.       {1 P. ^; u+ ]8 F5 x6 B, d+ e
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ N! @- ~8 Q0 T+ K/ B+ X
  305.         {
    5 D1 R3 d, r- e: N/ l3 j
  306.           file=(*p).second;9 S5 c3 b- j$ E, i" n
  307.           free(file);
    - {& l0 q) X" ]$ J" y
  308.         }
    " h5 ~$ h8 i4 Q5 N' S, g5 l1 L
  309.         UpdateFile2.clear();
    ' j  ~" b9 k7 U
  310.         UpdateList2.clear();
    : v3 u5 V# b/ B
  311.       }( x4 A$ n4 u2 U: U9 o. O
  312.       if(UpdateFile1.size())1 U/ J$ c# o  K+ i+ D! ]
  313.       {
    9 E+ }/ F3 B! |  k0 ]5 \( W4 E
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ Z6 }. @  ~6 |) [
  315.         {% `4 M( \) V# D  D4 Z! v7 \0 h: x! T4 Q
  316.           file=(*p).second;2 e$ F! ]  p' u# @$ l
  317.           free(file);8 `, g/ O- e2 |
  318.         }
    5 l& D5 Z0 {8 f  D0 f' `' D
  319.         UpdateFile1.clear();" m' a6 Q1 {3 e& _- ~2 a
  320.         UpdateList1.clear();
    % ?7 p3 `) H, L1 F2 {
  321.       }$ N" k) \! Y( P3 t: }
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    - u$ c/ U5 R, N7 E
  323.     }
    + ?1 }9 c: n. M
  324.   }
    ( X  n  g% |5 |/ I: D
  325.   return FALSE;
    / y: {- V2 \, V7 V3 k) f( T" ^
  326. }
    " I+ P+ B0 R, T; q& h3 x& k( b* }
  327. % ~" W" d$ e0 n) K2 y# O
  328. void CRevAppApp::ClearAll(void)
    ! l) P" s" Y. O# D8 t8 l) p3 I
  329. {
    ! e& A' G6 ~4 }  l' |' X! L+ I
  330.   LPUPDATEFILE file;
    4 v' `" v: U- ^3 c) _
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 w6 \/ P$ Z9 Q
  332. ( ]1 [- u( P7 [- ~
  333.   if(UpdateLocal.size())
    $ E. l& |; b) V+ c
  334.   {
    4 e+ R6 j# A7 M9 C3 C# s5 k
  335.     UpdateLocal.clear();
    & K' b' L' L5 z' a, w
  336.   }
    ) U3 {2 r8 }! @
  337.   if(UpdateFile3.size())+ z  n2 d  l3 l" @5 G' K
  338.   {
    * M) ]+ ?: |  a( Y: k
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( N; c& g. T5 c& N- D/ ]
  340.     {1 |: f( e) ^+ H& _" H4 p! K
  341.       file=(*p).second;9 r2 D0 j: s5 }! b9 J/ Q9 z
  342.       free(file);# f" {& m9 z- e, h& u
  343.     }
    + l( \, H+ V7 e; B; Q; S+ B
  344.     UpdateFile3.clear();6 T. S/ S$ v9 ]
  345.     UpdateList3.clear();) ^0 d0 L- ]* r8 O$ o0 Z
  346.   }
    9 |) z+ H. Q- q: d, r" m4 H
  347.   if(UpdateFile2.size())
    % c/ T8 H2 v+ b: ~1 w
  348.   {5 T: |3 h. ?8 Q) Q
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 I" K% E( H; B' u, F# Y
  350.     {
    & w$ |/ h4 z" F7 U8 S" K0 M
  351.       file=(*p).second;( {- @# \6 \9 }: U  H! S( N: ]* i
  352.       free(file);
    " d4 C6 @0 A2 x& q6 J4 w$ ?! ?
  353.     }# T( p; `2 f$ k3 P4 b" N# V
  354.     UpdateFile2.clear();) o+ \" ^/ v! k" D: ^4 g& `& u% t- C
  355.     UpdateList2.clear();, b! B, Z3 k2 g
  356.   }
    ! Q9 j8 v$ H! }0 K% \5 W/ _1 o0 E( D
  357.   if(UpdateFile1.size())
    0 s. |) p" U, n! Z! G$ I
  358.   {  B5 x2 G- v) F: ~, n; H
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # P/ n. |' M. Q. M
  360.     {
    : X: ]. H1 U3 y7 k+ M
  361.       file=(*p).second;; ~& q/ D6 }% N& M: P6 ?# A+ w# y
  362.       free(file);
    9 C& n$ @# F9 a* x! p& A1 o
  363.     }9 a: u. }- T/ U* J' g
  364.     UpdateFile1.clear();; E8 F) r0 O" x
  365.     UpdateList1.clear();
    ( b6 s4 j+ W6 H& n5 R
  366.   }6 k+ l& ^, Q7 D8 j
  367. }  , a/ A. n) ~" r& w
  368.   5 _* Z( T: m9 E6 I: Z: w: a6 T
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 q% B4 m- O: k  Z; G. j
  370. {
    1 g8 k- ]$ E  ^' c5 [" G! g# V
  371.   int c;
    * L; |  }7 ?" s5 c! N$ I+ H
  372.   LPUPDATEFILE file1,file2;
    : R: I' E* Z! i4 n" h& D
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ! Y9 A# G6 X5 ]$ s
  374.   std::list<CString>::iterator l;% `1 ^, W& w' R) P/ S
  375. , s: u. G; x6 o7 ]5 q* y/ H
  376.   UpdateLocal.clear();) I: w5 n/ h! |2 [, D
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    8 t* c; j! ?$ _
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);# t$ g3 V+ z) o# t8 j
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    3 c" r) K/ e; Z  k' F
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);; ]4 E3 Y3 J! R; ?
  381.   if(UpdateFile3.size())8 P$ k" H7 R( R( \0 e
  382.   {
    5 K' R9 Z( I. [
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ' q( j/ ~; j0 O8 I% s
  384.     {, G" O, @7 Y9 @: {
  385.       file2=(LPUPDATEFILE)(*i).second;
    * P1 p- Y/ W( D& i7 c7 D, v9 W
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! K5 }  y4 V8 F" r# ^; j
  387.       {# V6 j. ~$ S: f; w, N
  388.         file1=(LPUPDATEFILE)(*p).second;
    9 F8 K, t/ z1 ~1 Z5 C( s; p) }
  389.         file1->vers=file2->vers;
    9 o3 U. P+ n5 q) [* n' P
  390.       }
    : s0 P! G- [; a! x. k9 K% ]7 P, y
  391.       else0 V  V4 K. Q, y" i. W
  392.       {* V* D0 g% {% w7 R; G* M
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # W% U# y* _6 A) ?% C
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));) g9 N! H' V! R1 b4 T8 V
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));# f2 k! I+ e: \: ~5 z  G) `, }! f
  396.       }
    ( ^' D1 b" t8 [) z' K2 O, F
  397.     }0 J# H9 X% y5 l7 P# K  O. v# Q
  398.   }
    ; ~/ |+ o" q$ s2 e$ s$ L$ _
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)6 i9 @; A- ?. R* x
  400.   {' V8 Q3 C: r- p3 U" Y
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()), R  x% `+ B! @
  402.     {
    , G4 V7 C, \, a7 M
  403.       file2=(LPUPDATEFILE)(*i).second;1 l. H# M8 g* D# s% f
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! B# p, I" Z! V  D
  405.       {0 y  H: B8 J3 N  \7 F; G2 r
  406.         file1=(LPUPDATEFILE)(*p).second;
    / L5 ?* v) f3 H, T
  407.         if(file1->vers!=file2->vers)7 _8 |) V- F4 [, l, X9 i
  408.         {7 n8 S6 D9 z$ M
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 c: ^: Q. f9 C7 @' J7 x+ _- D
  410.           c++;
    $ L* I; b/ s. }# L& u3 V( R$ I3 G
  411.         }  X, d9 u5 v# W) h
  412.       }
    ' u; L3 Q$ Z6 l! o& ?2 E
  413.       else& a0 b/ h! w& S1 s
  414.       {
    ! l1 f6 s; r3 g( [" N/ D" L
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    9 v+ M/ B7 o. C/ u" w
  416.         c++;
    3 w% O% u7 ]4 u6 F
  417.       }9 o/ M" [( `  J1 f) ^/ R$ }
  418.     }
    8 n8 l$ `, q4 j- W0 C
  419.   }
    ) r( D$ ^: O0 T' E9 e) l: p) x
  420.   unlink(".\\DownLoad\\update.txt");- X5 a8 U. P) t0 h
  421.   if(UpdateLocal.size()) return TRUE;
      Q( P  n! h' P! b+ P3 M
  422.   else                   return FALSE;
    0 B6 u" d8 |8 i% {
  423. }
    1 |& o2 O9 |( P; h+ ~& w9 e$ Q

  424. / i; m2 Q  ~# T  m4 c  J& |
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"  h& P7 |3 j0 p; Y2 l
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    9 Q& H1 R  l4 w1 W) I- {
  427. 5 `- J. ^9 Y7 Q$ F3 q

  428. , S4 V' d) {0 t6 [
  429. # Y7 D) _! S. |' z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    # H; B8 ]0 |$ `* u
  431. {
      O5 V. U3 D; v1 j$ `! y  @
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    3 Y) {- E$ P8 l, `1 o4 G
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)5 P$ L$ L9 m+ T( B
  434.   {  Y! W- \! m% C& V( Z4 W. {
  435.     char szLanguage[50];% y' g$ W% v% f& T# H/ d5 }
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 `. N$ N$ v  z5 h! X
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + L* c5 _# A2 e0 H7 a
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. a9 e1 @  \% |: ]9 ^5 Z
  439.     else                                   m_iLanguage=ENGLISH;
    6 d5 I5 W0 M' A: s4 {; k2 Q. _$ R
  440.     char szRegister[100];: W8 l* k6 z- O3 r* L1 p9 Q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% R5 n5 t; g) z5 ~
  442.     strRegsName=szRegister;
    / X) h/ r3 _( o/ a& g
  443.     char szPatchURL[100];! x+ ~  O. d. U; E! _
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( b: w5 N2 E6 X( C) M2 S
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 s8 K& w) n  K; B; E+ Z' M/ J
  446.   }
    / W* O, e+ N2 _( E5 |- S8 F7 q
  447.   else* g5 b9 M% o' N  r; a
  448.   {7 g7 I5 I8 Y' ^8 x
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);, q% X! r' L& |" F- D$ q% h
  450.     strRegsName=DEFAULT_REG_URL;; w2 V! L; Q+ u+ [8 g+ ]
  451.   }4 T! R+ j2 d8 h8 C" x
  452.   if(GetFileAttributes("hosts.ini")!=-1)8 B) a) y/ |; ~7 ~( T/ J
  453.   {
    ) q5 P, N" T  c( p
  454.     char szIP[50];
      Z+ u" ?$ C7 {/ H$ Y. u( @, b
  455.     char szDIR[300];% U5 h$ A' @8 b
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    7 S9 P# Q" s3 ^2 L& r( |
  457.     {( s3 ^6 N- X. g: {
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    1 S1 I- J) n+ V; M* l1 j
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");% C5 @* V* |  I8 i. u
  460.       strHostName=szIP;% o9 [! Y1 z/ F2 f- K4 X
  461.       strHostPath.Format("/%s",szDIR);. ?5 w+ |! @% d/ \+ j
  462.     }7 P" U2 Q/ A4 S2 h0 D
  463.     else
    / M, ]" i) N" D
  464.     {! X) [, ?( b/ b# X" v+ f. Z4 g/ B
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 M* y, s0 r6 w4 S# B
  466.       {* B4 Q* n+ L8 _! W% Q: G
  467.         char szLanguage[50];
    3 `  S" q0 I* Q
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 D, ?3 S0 z/ X) n, H+ M8 L8 ]
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; }6 A9 n% v0 M  G) H
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" X( Y& l; O  S! G
  471.         else                                   m_iLanguage=ENGLISH;
    ( l( T! O! X1 S' q0 L
  472.         char szRegister[100];
    ( K1 t* b. H$ G' j
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 u8 E$ ~3 `! X" c4 _, R: q
  474.         strRegsName=szRegister;
    " w% N, t5 q: Z, G( h7 J* F0 J; J8 f# A
  475.         char szPatchURL[100];
    9 G; s1 X1 R& H7 V
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , q  L5 @5 V) b+ x. B
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  w3 U1 r6 T# o' T: J" M2 D
  478.       }
    $ |2 {+ v) l; I3 k7 v) n5 A7 |1 H
  479.       else
    4 p; l' T% ~$ V& X  N3 r
  480.       {
    + f1 H" d: S& [; O1 G2 S6 f! E
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 \1 c) E8 U) R! o8 h
  482.         strRegsName=DEFAULT_REG_URL;
    # i0 G! ^! ]- c3 Y# L
  483.       }
    4 `/ Y2 T6 }! D" P
  484.     }/ Y, |. U* @/ l0 V) f
  485.   }6 L+ L4 [) y7 J% n( ~' F
  486.   return true;
    9 C3 y3 z; u3 I6 G: q" e% y- o* a0 y
  487. }  ~; {- [! Q' Y6 \0 B0 l) M/ }1 D

  488. 7 r5 p! i1 X0 L& l3 K% q0 F
  489. #include ".\ZLib\unzip.h"3 A( s- G& O+ h% q; e! d
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);: P  V( H" A1 M/ X9 _0 t! X
  491. /////////////////////////////////////////////////////////////////////////////
    - z! w) k0 q1 C
  492. // CRevAppApp initialization6 C! J; V% N* q
  493. : u- }- ]: ~$ L' g
  494. BOOL CRevAppApp::InitInstance()
    # X7 Y3 C! O$ C# U( G
  495. {  O! [3 K' k3 [  {# J6 N
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];% ]- Y& ?- v$ o

  497. 3 o4 [1 k6 d0 a9 }9 [, o! t
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);( J4 U* e+ j" J+ n; i- W  O2 w
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))# Y0 N: s- v. W
  500.   {7 p  w- N. J- ~' Q- f
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    . e& {& I8 P* ~: y0 f0 X" c5 ~
  502.     GetPathFromFullPath(szPathTarget,szPathSource);9 }2 q: J% f) t: D/ Y; ~
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    4 B* K8 E2 P0 ?5 _9 ~  X
  504.     {
    3 w9 I4 V% ?- O- B6 S7 f5 G  q" A
  505.       strcpy(szPath,szPathTarget);
    0 `: j' g" t' t+ q0 y1 }
  506.       SetCurrentDirectory(szPath);
    + |9 G8 U2 a7 M8 |' N3 n
  507.     }7 r/ p! H7 v* |' y9 u- n
  508.   }
    9 Y4 @! O5 }* [0 n6 A& l. t
  509. #ifdef _DEBUG& Z& c& s3 l3 o3 i- R! U% L2 b3 W$ s
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' M8 I5 M, `0 R  \2 S1 N
  511. #else; c  s. G  P4 Z) S* R
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 f; }- F1 i. e( X, Z5 M
  513. #endif
    $ e3 a/ F9 E5 M! ^/ e  a1 h
  514.   {
    + s, H# I7 N# ]
  515.     char tempFileName[MAX_PATH];
    9 ^- n1 r3 }3 ~; l# q
  516.     strcpy(tempFileName,szPathSource);
    & G: g, [6 m1 b1 a9 D
  517.     tempFileName[strlen(szPathSource)-12]=0;
    : \6 J' z! i" k+ c& S0 v
  518.     strcat(tempFileName,"\\$CSUpdate.exe");. |$ f& R; w) V6 W1 a) f. u& E# G
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);$ o7 r4 m4 P/ ?- [! H- V4 A" @/ {. [
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);2 a/ k  K+ a& {
  521.     return TRUE;  v! H. ]: k. ~& \
  522.   }
    8 M! x/ C7 p* \: x+ k
  523.   // Nuke 0118: Delete run.exe
    7 M/ s: Y, O5 o1 ?9 {
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );% J: E6 f) n( v$ [: q3 d4 |, r+ G
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    1 _! r1 l, S* D7 N
  526.   if(!ReadCfgFile("Config.ini"))* \& ^4 E  b% z4 T. A  \9 V
  527.   {
    $ o- b2 U3 W" @9 D$ _
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    2 T+ z2 k! C3 w+ q
  529.     return TRUE;
    0 [: v3 ?  p, z& C, e! K
  530.   }
    # b/ @6 F3 o6 }. k
  531.   HANDLE mutex;
    , Z7 s* p/ j: X! h; c
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    . P  U7 o- y6 [$ F' f7 @& e/ Q
  533.   {
    - s9 h" \8 K4 I9 p/ T' v4 T7 J
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    * d4 B7 O3 G% R( j) j4 L
  535.     {
    $ d( y& E4 @7 f
  536.       CloseHandle(mutex);
    . Q+ Q  H/ g' k* N+ P) u
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);$ Y5 r. V) c/ Y# Z: o: X
  538.       return TRUE;
    6 H; W# W; S$ [9 }5 ?5 A. }7 f1 j
  539.     }
    ( f3 ]4 L  X6 V
  540.   }  
    . u/ I- [! E9 f1 {( ~
  541.   CloseHandle(mutex);
    3 x! A# h% `- C' @6 k3 {

  542. ! }! F2 n0 {; P1 d# l
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);% {) @& h7 x  D2 e, A5 w9 @

  544. / T. V! N+ ?3 R9 T% Z7 N8 w5 s. V
  545.         AfxEnableControlContainer();
    1 {! e( a4 V2 U! E

  546. 0 q* y& C2 P7 u( s
  547.   bCanUpdate=FALSE;
    9 u  ?; u/ N  M9 B, [5 j
  548.   dwStartUpSteps=1;
    ! X3 L+ M, Z( R. V5 l; O3 \( {
  549.   dwProgramState=AP_NOTHING;
    0 [# A' Q* A) o! s$ g+ B. M1 S  a

  550. 1 s* g9 [0 O/ K: W3 E
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. Y6 x0 l  c* n0 _* d/ l
  552. 4 p/ i/ m* z! D2 ^
  553.         // Standard initialization
    ' _/ I7 [- ]8 R4 _% q  b7 ^
  554.         // If you are not using these features and wish to reduce the size
    . z1 g. F! @0 h4 Q* w1 ^( i* \  y6 ^- s
  555.         //  of your final executable, you should remove from the following
    ! v9 V/ J  W8 d& J5 W1 s
  556.         //  the specific initialization routines you do not need.$ S/ o( N) b/ \5 O! i$ I5 Z; A* ^' R

  557. 2 E; Z- P, R' U5 h- U$ F, J
  558. #ifdef _AFXDLL# ]5 y8 E$ l. v" |' v( c
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    + B! L+ }1 N: v/ n% E
  560. #else
    0 y9 v9 d7 a: m6 d! f
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ; O: ~1 U9 _, e- O
  562. #endif' E6 i! k. A1 o: X9 X& O
  563. . J9 c; x7 g6 ?0 |1 ]
  564.   dlg=new CRevAppDlg;
    ; }' M' g4 `. m; z8 U
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    & u5 I  t* U% |  G7 z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    $ A& v; D! D, G, i
  567.   m_pMainWnd=dlg;
    # X$ D$ k. B, P: l9 l

  568. % x+ h; a7 d, ~+ W/ o
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
      J: ]3 p4 i' Q
  570. 4 g1 ?6 u# u& I7 E7 U9 ?) e
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ( {7 g5 b+ E" g/ d
  572. //  ULONG_PTR gdiplusToken;
    ' R) d  ^. \; l; K; o1 p$ S
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);1 |8 @' H  h0 s

  574. , n/ M* B% I( k) U
  575. //        CRevAppDlg dlg;
    : V4 s1 Z1 u. z
  576. //        int nResponse = dlg.DoModal();
    , u+ ]) H& G; q
  577. //        if (nResponse == IDOK)& n$ \  y* O3 J% ]
  578. //        {
    4 e: c- }! l! q( w" `
  579. //                // TODO: Place code here to handle when the dialog is! X- m/ Y. }4 S0 k. A/ t' S
  580. //                //  dismissed with OK
    + k( C9 [' k0 s4 W8 I
  581. //        }! ?' ~) {1 }) X/ U' a
  582. //        else if (nResponse == IDCANCEL)
    % L+ b3 L3 k% ~* Q# W5 H5 g5 N
  583. //        {
    6 o/ q5 _! N  p0 o2 i; ^2 l
  584. //                // TODO: Place code here to handle when the dialog is+ D. U% W1 ]) M# O; _4 R, N
  585. //                //  dismissed with Cancel
    ! @% v* _; n( Y
  586. //        }0 \. f) i* C0 A7 \7 n, D! y: E- H
  587. # |) J" L. k2 B
  588.         // Since the dialog has been closed, return FALSE so that we exit the& i0 x$ o: r: r3 q5 |
  589.         //  application, rather than start the application's message pump.: c" l0 k9 t) a7 t# H- z& I
  590.         return TRUE;9 w8 F( v6 S7 v9 [
  591. }) U/ E! A* W3 s5 \% G
  592. 6 u+ x7 p8 j/ T, d0 Z! k, I
  593. char *CRevAppApp::strtok3(char *pSource,char *token)/ g- J; W2 i' T: M
  594. {
    - q4 Q" O. c; b: }1 t. c# a
  595.   int i;
    1 c- O* i% i3 I9 x/ @
  596.   char *szRet;( L) O; W1 @+ H9 B* S9 q

  597. 3 ?4 ^# h9 v. B/ p+ [" }
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    & ?# ~, j' ]/ l7 @  J( e
  599.   if(sztoken)
    $ H5 s3 N" }- a& e: Q
  600.   {
    $ W, u. h! q9 o* K- p
  601.     szRet=&sztoken[itoken];
    ( \) {: o$ g% C( l; H5 K. r
  602.     while(sztoken[itoken])9 q/ P7 X7 a4 \% ?; D" f; f: C
  603.     {) G+ W: c+ ]6 x' p6 s0 `
  604.       for(i=0;i<(int)strlen(token);i++)
    . x: c6 Q9 ^" C0 V: P, w( `
  605.       {1 j4 I& q! }( p1 Y  I9 Z$ p
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    7 J; j" |' {4 @. J  Z
  607.         {2 a4 @+ V4 ^% }8 Q
  608.           sztoken[itoken++]=0;: i2 g" [) U8 H, C+ H! q
  609.           sztoken[itoken++]=0;+ ?+ H' ^/ w0 A, m/ V/ D6 M
  610.           return szRet;0 j  G( G4 z) _1 P
  611.         }; {8 ~$ J2 q, ~
  612.       }/ j0 t, _& N9 s& s7 w
  613.       itoken++;  _. b' p5 |: t
  614.     }
    5 c0 h+ ?  S0 E6 l
  615.   }
    5 r2 ?1 D' L& v/ n
  616.   return NULL;# {& O6 w$ U3 e7 T6 b$ ?! z
  617. }  |" y( m9 A+ R% b* Z
  618. 0 u% {8 A3 h3 |4 l" H
  619. void ProcessProc(long Total,long Current)
    . ~, @7 C9 i, }* v
  620. {
    9 @# P1 D9 v$ ^2 R+ o5 R7 w
  621.         MSG msg;
    4 o* X2 S# T+ D; R
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);8 [& u5 }' N& g
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));/ z! v5 ^: L( k* d5 K- ^* I4 c( @
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))4 {5 o: e. H0 E, ]
  625.         {" a2 }* U, L8 S7 W
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - A! k  f5 {8 t" T8 `+ t* H$ e, p
  627.                 {0 D& S2 _. r7 O7 h
  628.                         return;! G. _& {/ {4 B- f: q: K7 `
  629.                 }
    ) {) |+ z  z5 W- h0 l
  630.                 TranslateMessage(&msg);
    8 M; v7 Q' o* r  N: m& \
  631.                 DispatchMessage(&msg);: |  Z1 J# Q, |8 K" n
  632.         }       
    5 ~9 _" ~% {1 C; C5 A7 W& r& ?3 X/ y
  633. }
    % |4 _" S1 ]2 F8 Y, T

  634. ; s6 a' L/ X9 X; d6 q  e
  635. BOOL bFirstChar=TRUE;
    3 I% x" l2 B% [8 e5 j" W
  636. 4 g, e1 K6 T, N/ q0 c3 F) s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)( K9 Y& T. b1 g
  638. {- t9 g( f# S+ b2 G6 P1 M
  639.         // TODO: Add your specialized code here and/or call the base class
    / J( o- [' v8 z
  640.   switch(dwProgramState)
    - x. U+ T' l9 H& x' ~5 {: \
  641.   {
    ! F1 R* q( l4 y1 J$ U. I) x
  642.   case AP_NOTHING:4 y  j) l5 h: m2 h+ s6 \/ A
  643.     switch(dwStartUpSteps)3 d  X% V* E5 y+ ^: f% W6 U" q) M
  644.     {, B, h2 x; F/ B4 P2 ]0 Q" S4 |
  645.     case 1:# N8 S# U. u* E. c! d0 S" x$ b
  646.       {/ Z8 a: S9 t4 W3 A8 K0 P& O+ o
  647.         int i;, W# A5 o+ X2 {& m4 j1 t% ]
  648.         CDC *pCDC=dlg->GetDC();
    % M8 F3 W  [9 ?: n
  649.         HDC hdcwnd=pCDC->m_hDC;
    + V! Z3 N6 i4 q  t
  650. //        Graphics graphics(hdcwnd);
    4 t0 o; w/ p& t9 G$ |4 e
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");4 n( V9 i$ U: [! e1 y
  652. //        INT iWidth=bitmap.GetWidth();
    3 A/ d4 l; X) \$ Z( }6 C- s
  653. //        INT iHeight=bitmap.GetHeight();# m, W) }: R" D) w, }1 b
  654. //        Color color,colorTemp;
    2 M6 N2 g3 {2 i, a% t
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& T& N; r) ^) u
  656. //        {5 _" s0 r9 K. L+ c; P: z( O
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)% R/ k% n4 @$ W# i1 ^
  658. //          {
    3 L/ {- e% d$ i8 T2 C' T
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    9 ~7 [9 n5 z8 F, V" F" g* x" r
  660. //            colorTemp.SetValue(color.MakeARGB(  V3 b6 r  A# O/ B" x+ G1 z
  661. //              (BYTE)(255*iColumn/iWidth),$ D, C, ^5 j2 `- P$ a  ~* ~, e. z
  662. //              color.GetRed(),  G- j6 U' Y9 G; i2 z
  663. //              color.GetGreen(),
    3 Z) |! V8 g3 U" `7 @1 e
  664. //              color.GetBlue()));# V( N7 m* n( a: K9 F
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    % h2 l: ^7 V5 u5 S3 B' `1 p: s" R
  666. //          }( M2 |( r) \, t' G: a: |1 u
  667. //        }! I  n- B3 z5 S; j$ P4 v) |
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 x( }, ~! Z3 T4 l* ]
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . {- K6 D: U) w
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    * C: q8 W. o% \7 g
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    * [! {5 k: c1 ^5 x# s- [
  672.         for(i=0;i<240;i+=8)
    ' G& G% T& A1 Y7 v" `; I% k
  673.         {
      R- w5 A: r2 \: y& w
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 Y: v4 f. Y# Z4 h' W5 Z8 n/ E$ Q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! ~# `) v2 J& D) ]8 K% j& V; T
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);2 W  X2 q4 r- E- o+ W
  677.           Sleep(33);- C- S, ]3 K: y! A
  678.         }9 A0 x( P3 Q, W* l5 c
  679.         Sleep(1000);$ A- M; V; A8 f- e" b9 `7 ~6 }
  680.         for(i=240;i>0;i-=8)
    . V& b- Z& A) u8 K# x+ \
  681.         {
    3 A6 J( h' F; t" V$ b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 ]) Q( r" V7 m+ `" `
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 m$ |5 u: q& M* v1 v: v
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , F) s( _+ H, ]1 L
  685.           Sleep(33);3 ?( D9 a9 {0 v
  686.         }, U( ]: ^% g' Y) a3 J0 J1 m8 ]7 v
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);& m" ]: `5 n/ h$ y$ ~: [
  688.         dlg->ReleaseDC(pCDC);: I9 `# [1 {1 o/ n
  689.         DeleteDC(hdctar);
    ' M1 S# k5 Q. M+ Q- I) K* g
  690.         DeleteDC(hdcsrc);" q) {8 H$ ~1 z3 `* B( t
  691.         DeleteDC(hdcorg);9 R2 n4 e( p8 v& g+ U
  692.       }
    / P+ H1 l1 ~1 w* n  J8 h8 m: r, N
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; X5 K' V* B+ ?* u8 y2 ~  {
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");& C( w, e# I$ }* x5 M1 h/ V0 q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    4 {8 @9 j- Y" b6 l7 ^6 j5 H" t* u
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    + M% ^2 V8 z# G+ E4 Y2 u
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' k+ A6 G) ?0 g. I5 z0 }& p
  698.       if(!Dn.Connected())1 T' l! q4 c1 u/ \% S
  699.       {
    & Q0 n7 j" P" y
  700.         dwTotalFiles=1;
    ' k3 O6 e* B* N5 r6 w; W8 k0 u1 y
  701.         dwDownLoaded=0;  |7 \, W& W6 I0 [4 h2 U2 {
  702.         bSilentStep=TRUE;
    " B0 f8 X0 \" Q# l
  703.         bCompressed=FALSE;1 x: t# k& K9 ]1 A
  704.         strExtLocal.Empty();9 _! e" o* m( ^" ]6 S" J* f2 K
  705.         strFullName="readme.txt";6 R$ H1 q' D" U1 z+ g7 l0 h  Y
  706.         dwProgramState=AP_CONNECT;
    $ K% d. i5 N" w& a7 `
  707.       }" P1 `0 |+ G6 Y  s" o
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    % w0 F3 R7 ]! k1 g
  709.       dwStartUpSteps=2;
    + }  w, V& {- c" {
  710.       break;
      Y& P5 T5 M8 L) ]1 @+ r5 n
  711.     case 2:
    5 H. ~* d/ [# V
  712.       {) A6 v, x- _" K: n# C2 p& q
  713.         int iEOF;
    ; U0 O, o* |' m9 I$ V3 h3 j3 N
  714.         FILE *fp;' y, ]: T& t% F$ ^9 h' W7 I6 y
  715.         char szString[512];. X$ J& x- [  e* p6 V4 m* i5 g6 k- g
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");4 _6 _5 d% d# y* B& f$ ^6 Q
  717.         if(fp); N' \$ ]: s9 o
  718.         {/ ?) ~# q; m& Z( G9 o
  719.           do
    - x" o8 L, @' B! P9 M" Y
  720.           {
    4 }+ T& V  D5 c' c- f; }+ r+ X
  721.             iEOF=fscanf(fp,"%s",szString);! n$ k' J: M$ @; T& o" i
  722.             if(strlen(szString))) v) R6 P" [3 `, Y
  723.             {
    4 I3 d  s+ i  M* \+ [! V& Q
  724.               if(bFirstChar)
    9 \8 r( X+ W1 W- B! e$ y
  725.               {
    9 [5 v% k( K9 x. W: F$ G& j  v& s
  726.                 bFirstChar=FALSE;/ F* Q4 i1 `  r  B* A# q
  727.                 bConnectIsBig5=FALSE;* y  O5 y& F3 d! L8 X
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ; S2 K3 q  ~5 K( u  y0 G& e* L3 y
  729.               }% U) c' E+ M6 @
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ; W5 p4 e9 F* e& B- X9 b3 c
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));. }- j8 C  P& ~4 l. I
  732.               dlg->m_ListText.AddString(szString);
    . k' [( ?  R$ [8 \
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; m/ v8 T6 r0 K+ J( T/ V5 [" l
  734.               *szString=0;
    + p5 {# Z  n& i2 l  |% x  ~9 ~: S# x, o
  735.             }' g% d- o' Z6 \8 s
  736.           } while(iEOF!=EOF);
      O* G$ w' p6 E, S: x
  737.           fclose(fp);7 z: b: R: n* H) U& X% C3 S
  738.           unlink(".\\DownLoad\\readme.txt");4 F4 j- n" F) \. k1 |& B
  739.           dwStartUpSteps=3;
    8 {& N! Y' _+ a
  740.         }
    6 a) w* k. O' r$ k, ~% G% Q, N4 O
  741.       }. z6 h0 Q' N+ D% P2 R2 V
  742.       break;# C- Q) y3 m/ j. I; [6 S) Y0 b
  743.     case 3:$ b2 u' D& W* \& A# _
  744.       if(!Dn.Connected())
    , D* o  c% u# |* S
  745.       {
    & z9 g, P% }( i1 g6 Y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);( ^; i5 {' a7 H0 Z) ]
  747.         dwTotalFiles=1;7 d7 r5 S* {: a. Z+ m; C* [) z
  748.         dwDownLoaded=0;1 S" d9 V2 h& c, G" {$ U
  749.         bSilentStep=TRUE;  r* a8 K$ V( _0 H! e1 Z% ?8 O0 q
  750.         bCompressed=FALSE;
    % c3 P5 I# O2 g
  751.         strExtLocal.Empty();
    + t1 ]5 M" H& d# b% c
  752.         strFullName="checkversion.txt";! y3 v# v* t' l7 ]3 n2 L
  753.         dwProgramState=AP_CONNECT;8 e8 j& ~2 H( R- k0 N6 ^
  754.       }
    5 Y9 p. H7 }" X* [) x; M
  755.       dwStartUpSteps=4;
    , ?3 V) r: B1 h
  756.       break;: _% Z& k$ P! v- u* s
  757.     case 4:9 \. p% p* }2 ~0 w& U+ n
  758.       {
    & g: Y( L$ R$ F6 m- z4 H
  759.         FILE *fp;
    " o+ ~% ]# t$ T6 G! m  G
  760.         char szString1[128];
    / \4 g' e7 ~5 a# `9 |2 E! U0 a& ]  x
  761.         char szString2[128];5 o, R: |! N# `4 Q& i1 k
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    0 x5 R4 K3 r3 {
  763.         if(fp)* D3 H) Z/ \" O0 F" K5 S! q( c; M
  764.         {7 l- \3 R! H& |
  765.           fscanf(fp,"%s",szString1);. @  j) `$ S  d8 O
  766.           fclose(fp);
    ) |' V- N$ I2 n/ p+ g1 ?
  767.           fCheckVersion=atof(szString1);: T0 [9 h# q6 w+ \# q+ @1 `
  768.           fp=fopen(".\\checkversion.dat","r");
    : R5 ?  |% E' e* n) k2 q
  769.           if(fp)
    ! ?! e, ]" H' l( b' r5 h
  770.           {4 J, A) m' S; i+ G7 f+ Z7 u
  771.             fscanf(fp,"%s",szString2);
    ) d4 Z8 e& c# W1 {8 U
  772.             fclose(fp);: r( A7 A0 s; \* X
  773.             if(atof(szString1)!=atof(szString2))
    & u  U3 L3 a' g$ A& }
  774.             {
    . w- d+ [! s9 Z+ I8 u4 R
  775.               if(!Dn.Connected()); [4 }) N, E2 k, p8 V
  776.               {7 C: N% D% G3 p! y0 j9 S& A! O
  777.                 bFirstUpdate=TRUE;
    3 ?4 z4 {: p, Z1 z8 V& B+ K
  778.                 dwTotalFiles=1;) v. l' N( G# L# a0 m& i0 |
  779.                 dwDownLoaded=0;
    7 |6 S% i- L9 n9 A  v' u2 W9 t
  780.                 bSilentStep=FALSE;
    6 t$ N0 p; z6 F
  781.                 bCompressed=TRUE;
    3 P- p* v& t/ @/ ~( v
  782.                 strExtLocal=".\\DownLoad\";
    ! Y9 g2 J/ a# ~2 u2 E$ [  e
  783.                 strFullName="update.txt";. N$ v( ^& v4 s2 Z0 R
  784.                 dwProgramState=AP_CONNECT;
    4 \5 p: o* B+ [8 n! _
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / Z; k$ `  J; f; {: ?
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 P" G. U$ k% e
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    9 f. k  Z5 L; K6 I! M6 R
  788. - i5 t1 `. i; u: i9 ]
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # c* t. n) j/ ^: l/ e% i% Y
  790.                 unlink(".\\DownLoad\\checkversion.txt");' c$ ]) @4 y- z3 E. [- w
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)+ g3 t3 L+ z" g- W+ ]
  792.                 {
    $ t! x+ ~5 J+ V5 g
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    . q7 A* G9 ]4 v! m3 a' S/ X- D2 Q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");( a- ~1 z, Y8 h3 a" A
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");( A2 r& w( O: D
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : ]8 {  r8 Z# @, s; M
  797. 0 ]& I, b( Y# d
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");) y+ d; ^  A/ r( P& ^
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 C, Z/ e4 |8 ^
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");/ T  M# H$ Z: F- Z& a. {, t' n% t
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & [- P. x: G! u) o# o) {+ ]
  802.                 }
    6 `* y, i( Q; _5 f8 }
  803.                 dwStartUpSteps=5;7 w8 O6 C& X" q* m# N
  804.               }0 b' p( X# G7 N8 N
  805.             }
    / g0 x2 `. @; h8 I' t
  806.             else+ C7 ^$ Z9 C) h; K5 ~  h" c
  807.             {( Q2 b* j! [& h% k4 ~3 ~- J6 d' }
  808.               unlink(".\\DownLoad\\checkversion.txt");
    " |; o) N" @; [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ \  i3 }  q8 h2 a# M4 {6 W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");( g, D( a1 Y0 {$ E
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    1 W; n1 N- Y+ R  N9 M
  812. # e9 G3 C- I1 Z$ r! b4 L
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 a' ?! j$ j& y, @3 M7 _, C
  814.               dwStartUpSteps=99;
    : b+ K& I8 H. B" s9 U, Z
  815.               bFinishUpdated=TRUE;
    " m* w# w9 h4 f# j, c2 q
  816.               bCanUpdate=TRUE;
    / J  b) j) s% z8 F% n% ^0 _, O
  817.             }
    + a1 e( k# }5 o# H0 v9 P
  818.           }
    " B, I( C' r7 S" \+ q4 j; ]
  819.           else1 Y$ Q; t3 v* w
  820.           {
    ' y! E9 f) j3 ]. ^1 M
  821.             if(!Dn.Connected())( R" o7 A4 h! I. w) W( I* V/ B
  822.             {4 x; s5 x' n2 p, W! t
  823.               bFirstUpdate=TRUE;0 b8 ?9 q: F7 F. Q
  824.               dwTotalFiles=1;2 f6 C7 A! V/ _5 ?
  825.               dwDownLoaded=0;  q) I* Y, ^2 B2 b
  826.               bSilentStep=FALSE;
    + i  Q2 E$ r( h' {+ {
  827.               bCompressed=TRUE;
    0 w& s% O, D, g! B6 R% _3 D
  828.               strExtLocal=".\\DownLoad\";
    ; T* M8 }8 T1 ?, s5 T* ]& _
  829.               strFullName="update.txt";  V- a. C2 i! L/ N: k
  830.               dwProgramState=AP_CONNECT;
    ; X: t5 S: D" I' [9 l. Y, p5 H
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ E+ `, |! ^- M$ _% b+ N: u5 @
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 k# K: `, W( B/ o+ i5 d
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");  z$ P6 e+ j: `) r: A2 w* V$ h
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) k# d% Q, J. n+ J' k* v) K! {+ o
  835.               unlink(".\\DownLoad\\checkversion.txt");9 [( |9 b9 J; c, @8 ~
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    " x9 l! y' i9 L
  837.               {
    ' }: ]' U( ]% |4 |% [8 u0 }: L
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ' l( [  q- g( j
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ; |) v' Z9 Q5 _7 p3 x. k0 v
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    7 k9 v$ D, ~( l$ x4 E$ B2 o& K
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 q" e3 p  m" a0 a4 h# ~
  842.                 / y4 f' A3 A5 [5 P, K
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 u  B, O! ]! @$ i2 U
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! b0 }$ U; E% `8 n' ]% z
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");4 I' `* Z5 D; E
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ o9 W9 C3 Q& L! u
  847.               }
    * }0 ?7 X3 X6 E3 H+ r
  848.               dwStartUpSteps=5;  E1 T$ `9 T$ `0 r. u$ _$ x; \
  849.             }
    " b5 m" e# B- f4 a, l& G
  850.           }
    8 P$ z* ]" ^) V7 R& T: p- x4 H
  851.         }: _4 }' z6 _/ l9 E* J
  852.         else
    $ p0 L0 \) K$ e: R% t
  853.         {
    ; h7 C& ]0 Q; p# R3 G! l
  854.           dwStartUpSteps=3;
    3 F9 h9 D9 Y; w4 t* D/ z
  855.         }
    : A9 N2 L; U7 e! M. l
  856.       }
    - ]7 R" j' N6 Z1 ?( S7 ~$ D6 T" Q
  857.       break;8 K6 \  S0 x& _( |
  858.     case 5:
    ) w4 P0 F5 f% x1 u$ d  N  l/ }% R$ I) z
  859.       {
    9 n' I. E; z2 I/ X# Q+ x
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)% [" s+ k* ?, P  ?& o# X* P
  861.         {
    1 H* H1 ?1 {8 R8 z
  862.           int opt_overwrite=1;
    . Y, q4 P- O; K5 W( T, o% U$ [
  863.           int opt_do_extract_withoutpath=0;
    0 i8 O7 c, w5 {; X
  864.           unzFile uf=NULL;0 F* p% j) r- S( p# J
  865. ) I5 i  `3 X/ b& V' l
  866.           uf=unzOpen("Wsa.zip");
    6 W/ Y) x7 c0 r6 i! }3 d
  867.           if(uf)
    . ?: l" |; J% H9 _) l+ G9 D! @" ?9 E
  868.           {6 v, S1 C1 e' e" O
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    1 n9 B6 A* G( e+ ?  R1 U
  870.             unzClose(uf);
    7 t2 h3 Q; L# k! N0 h7 [# j
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");5 ~6 u& h6 J, M- R
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    3 N( A: t; c0 W. e
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    0 ^. Y. B* B. L1 Z  c1 M" Q; B
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! J/ o# M+ }: k
  875.           }
    3 a* O* I, N1 n$ I2 J
  876.           DeleteFile("Wsa.zip" );0 T& g9 @' i8 H; V4 W8 U! h  b
  877.         }9 {, k& ?) v1 N- q5 C' T

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

* t& \' P* W) ]" J! J
7 K# g' ?( r4 W( Z' y. @

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-6 21:27

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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