CSUpdate.exe源代码

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

3 @0 h% T: M; `/ N& j: c3 o
  1. / RevApp.cpp : Defines the class behaviors for the application.
    : t& @( A' g6 L- @4 i6 g
  2. //7 X: G- t# u( ]% U  N, V1 U
  3. % _& m- D5 `$ Y8 v- r
  4. #include "stdafx.h"
    6 v7 B9 T, k- J/ |6 p
  5. % k& Q) {" o1 \6 \7 B+ E
  6. //#define UNICODE0 q4 x; ^  d  g6 o! ~) s: F
  7. //#include <gdiplus.h>
    ! j. M2 P# w5 W! |
  8. //using namespace Gdiplus;6 n( y. c9 x! x: `. F1 M
  9. 2 M' [8 x0 V+ X5 o5 F' A) R
  10. #include "RevApp.h"
    ' N# }: t1 M& ]% ?8 H0 @
  11. #include "RevAppDlg.h"
    ; ^6 V& @4 y. \/ O+ x5 p6 L5 u8 F
  12. * a& z- [/ ^. q" u
  13. #pragma warning(disable:4786)& a$ s7 d: k4 _( ~) X
  14. #include <map>: A$ L5 ~0 s, b. |7 \* w
  15. #include <list>$ C8 m2 Z. |+ T( y# u
  16. #include <direct.h>* f. C$ `& C# |6 o0 V# P, D+ B

  17. : a* r" @2 C) \
  18. #ifdef _DEBUG
    + E6 [. i8 `7 v9 Y9 I
  19. #define new DEBUG_NEW
    ! U4 T5 r6 @+ v* _, F! q% j
  20. #undef THIS_FILE
    8 t1 r3 b( M0 w" P% i
  21. static char THIS_FILE[] = __FILE__;/ Q2 f1 R# k( t* t- L0 e/ `) S' w) G
  22. #endif8 M( c+ S% U4 J/ H
  23. #include "SkinResDef.h"! g& R' U, p% g( r+ e" v% d: t" E
  24. #include "ChangeBG.h"
    $ B& X! d9 w( s, h( z
  25. #include "AFXINET.H"
    $ N/ S/ G/ e; s: I

  26. ( q, r2 |& u1 R( q8 B
  27. #define TRADITIONAL_CHINESE 08 e- ?& W* ?0 g7 X
  28. #define SIMPLIFY_CHINESE 1
    ! M4 b9 i- _$ A' {& J- }% l
  29. #define ENGLISH 25 K+ C- z, z- ^  A
  30. int m_iLanguage = ENGLISH;
      r, S2 n5 d% @) V' Q
  31. /////////////////////////////////////////////////////////////////////////////
    5 `9 z+ k- q3 P( y5 k+ _
  32. // CRevAppApp
    - P! ?- b: ]# L: C- ^) m# w/ }5 @

  33. 7 }3 x; T- |& Q" G' f
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)6 |/ M7 W! h: u
  35.         //{{AFX_MSG_MAP(CRevAppApp)0 f( H- d0 U' v, c( c6 _
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here./ r4 h) U! h0 o$ b$ e
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!' E) ^( c  _1 Q* N" G% }
  38.         //}}AFX_MSG
    ( w/ a5 Y+ z0 a, J
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ; W( C7 q+ p5 @) Y2 W
  40. END_MESSAGE_MAP(); ^- F5 M# I" a- H
  41. # s- Y! _( \" D* ^8 I( }
  42. /////////////////////////////////////////////////////////////////////////////
    ! L- b3 f$ h7 m) Q3 h
  43. // CRevAppApp construction
    . y4 `6 W0 W# k% o; W* J& ^0 r" P

  44. 0 U* ~( n$ @- w) P2 r
  45. CRevAppApp::CRevAppApp()2 h) e+ Q: ?  a0 s
  46. {0 p/ g( T( a: f3 r6 d3 }+ U9 J
  47.         // TODO: add construction code here,
    / K7 |7 z9 z/ M# X
  48.         // Place all significant initialization in InitInstance- e: ?5 r8 t. U
  49.   bDisplayIsBig5=FALSE;
    8 G: M- V( x1 \* ^& K5 p6 w( i& R
  50.   bRestartUpdater=FALSE;4 C  X9 m7 y2 m6 s1 \! s* e& _
  51.   bFinishUpdated=FALSE;
    + e7 |( w* [# e9 l  Z& O* v& O
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;" D  u; c) z1 N& V, ^% e) H
  53.   InitChangeDataBig52GBKS();7 J- a1 ?9 n3 R. a1 k
  54.   InitChangeDataGBKS2Big5();
    + `/ m8 A; Z7 }
  55.         //: R" V6 L' D3 r3 }
  56.         bClickRunExe = FALSE;
    ) u% S! a, D3 ^9 F/ m
  57.         //* a( q5 k, v% O
  58. }
    ; e/ f/ j* o0 b, A

  59. + H  R2 e) V  Z; T6 O5 H
  60. CRevAppApp::~CRevAppApp()+ ?- Q5 s, e' G8 p& Q4 i1 I2 `
  61. {
    ( k5 j9 K' \/ t* O) Y5 T
  62.         // TODO: add construction code here,9 ?6 V, R: R7 c9 q
  63.         // Place all significant initialization in InitInstance
    : }3 w3 l5 l$ f$ P0 l- _8 K
  64.   EndChangeData();
    ) w) b% z& r: c. }. `( B
  65. }
    ! b! S& R, U9 f% o
  66. 1 [" M3 N! ]& Z2 u* \0 o6 Q- S
  67. /////////////////////////////////////////////////////////////////////////////0 _, S9 U# c, }( t
  68. // The one and only CRevAppApp object  D5 |1 `' p/ Y% Y

  69. $ g9 u+ s( a. m
  70. CRevAppApp theApp;+ H6 {4 P" a* L5 L/ X

  71. % c: K9 \5 X. C* G1 ^6 W
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 R3 ~) `+ O" `
  73. {. A" V( ?  l- s- x6 c
  74.   int iEOF=0;
    4 b7 u0 y* z# R, c
  75.   char szTempName[MAX_PATH];
    0 l- U2 T: x& E* K5 U
  76.   *szFileName=0;
    / B0 G7 }) n/ ]9 f# i
  77.   iEOF=fscanf(fp,"%s",szTempName);
    7 k3 k& _5 y$ n+ E+ u
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    4 B) |! h$ ^1 f3 r4 Z
  79.   {
    ' f6 v5 L5 S- \# [7 J' ]) [& B
  80.     strcpy(szFileName,&szTempName[1]);. Z8 Z3 B6 R- S. k2 E( T6 W! l
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): @! A4 z1 L4 F$ H3 r1 O9 s
  82.     {
    1 G! L+ q) h- J$ P
  83.       iEOF=fscanf(fp,"%s",szTempName);3 C9 z  G0 o' b  w$ q. _& r
  84.       strcat(szFileName," ");% D; K9 j! z6 O( z. R8 {
  85.       strcat(szFileName,szTempName);* m5 T5 y! x0 L4 r' `: L/ E& [# ?9 n% s
  86.     }
    % d( e* B1 C+ ]- |- d
  87.     if(strlen(szFileName)>=1)
    + E. J8 ?& z, g9 d7 P
  88.     {
    , R4 ~" U% X/ L( S5 j
  89.       szFileName[strlen(szFileName)-1]=0;
    3 H7 J2 o3 E$ ?( |- |/ W
  90.     }
    4 u  \5 o2 O! H6 T% b' i
  91.   }: N6 D+ l+ v7 o0 Y1 i* k* [- r+ v  \
  92.   return szFileName;; t; @5 o6 [# s) }: D' P4 l5 U* g
  93. }
    6 r* G/ g3 k9 `5 G+ q7 d% h% @

  94. 9 M$ q5 V$ q% w5 P* A: y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ( A4 U" _- D" S( S' L6 c
  96. {8 ?& Q. D% R% ~7 d/ m1 @8 E' f
  97.   FILE *fp;
    / Z/ l: X# C" Z# ~! V* J* t5 P
  98.   char *key=NULL;
    3 j1 H/ T% L$ f; v1 {6 X/ y9 k/ p) w
  99.   char version[MAX_PATH];, r9 a; T7 u% S' O
  100.   LPUPDATEFILE file,olds;
    # J# |3 J* g* c) Q" J7 w( z) E
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 }# V. H. ^, M- [8 J# I4 b/ u
  102. + Z5 {. D6 w, V) z1 \: p2 x7 w
  103.   UpdateList.clear();
      `/ b, d$ t5 u
  104.   UpdateFile.clear();
      N6 i+ m( u6 Z' ~
  105.   if(GetFileAttributes(filename)==-1) return false;
    ' d4 P& h( [& n0 E: ^
  106.   if(!(fp=fopen(filename,"r"))) return false;
    6 h' L0 N5 D% y9 i; E" ?) e
  107.   fscanf(fp,"%s",version);( N( j( F: u& V5 Z7 b
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }9 P# e: `$ y. h) Z1 Y
  109.   while(fscanf(fp,"%s",version)!=EOF). L, I- M8 A- t1 H
  110.   {& n  S) D- S/ G7 _/ \
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 b5 T( p1 e* b6 M* S
  112.     fscanf(fp,"%s",file->path);5 Q/ A! O+ E7 n; J# Q
  113.     ReadFileNames(fp,file->file);% F# n) F5 h6 w  b4 f. B8 _
  114.     strcpy(file->full,".");# D  \, l1 U; t% Z8 e/ H. E7 Y
  115.     strcat(file->full,file->path);. ?- n% E* s3 Q5 l% }
  116.     strcat(file->full,file->file);8 Q  L+ P" n0 F' E
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())' t  r9 @+ k6 B5 X
  118.     {: \/ a& d( h4 f3 v% O/ p
  119.       file->vers=(float)atof(version);
    ! o$ D* l- A; r$ S, q
  120.       UpdateList.push_back(file->full);
    3 j7 Q3 \5 k$ {
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ' o; k1 C& [3 a5 `, }
  122.     }/ d/ g1 k. J7 H: V
  123.     else+ E* [% h/ I- Z
  124.     {; D" l6 [* f0 y! S
  125.       olds=(*p).second;! q  Q( N2 y6 \( q1 I# h
  126.       if(olds->vers<(float)atof(version)); e, S$ w- F4 Q1 h. J
  127.       {
    " g5 W! X& h9 V- @$ Q+ s5 X: I
  128.         olds->vers=(float)atof(version);
    ' ]0 d9 {5 @) o- j: Q' ~
  129.       }
    5 j  `" Y  w& ~2 j
  130.       free(file);
    / C/ H: l% \4 f- Z3 }
  131.     }# @- ?$ T; G* I8 `
  132.   }
    : p3 r8 W/ A, _* m
  133.   fclose(fp);; ]- {4 t- X3 ~4 A! P8 v4 J
  134.   return true;
    0 X0 t1 l% i3 `- V' u
  135. }  M. C4 n1 N# h$ k5 P3 X  k

  136. 6 o" q: h% D( x8 L& W) B2 q
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    8 J8 e7 E4 l0 J. _. b1 ?7 f
  138. {! s1 O1 G7 A* w! m
  139.   TCHAR  szFull[MAX_PATH];7 H: p8 |$ v4 a/ l. w0 X* M/ C
  140.   TCHAR *token,*inter;) a2 T: o% D* I. A( u
  141.   *szPath=0;
    % U' F. X. I/ w; S- D% _, w
  142.   strcpy(szFull,szFullPath);
    " t) f1 V- r0 ^; w* B! k' r( I/ k7 o, E
  143.   token=strtok(szFull,"\\/");
    5 F7 [0 U# h! V. S
  144.   inter=token;
    / t$ |1 i) z6 h4 {
  145.   while(token=strtok(NULL,"\\/"))7 W- V) W: F- w% V
  146.   {
    $ s: q0 A0 B$ i, I( F
  147.     strcat(szPath,inter);
    5 i: E4 p$ O1 t; J; J2 j
  148.     strcat(szPath,"\");
    4 e' t2 `3 a( k+ q( D+ _' `
  149.     inter=token;" ^9 W) t& K0 A+ t
  150.   }8 ]* u/ e' i* X
  151.   return strlen(szPath);. I, H, K$ {& p- `, w
  152. }! z+ T7 {- F6 G

  153. % C) i' I, F5 ~- k; W7 N
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ p6 H( a* g$ [8 Y5 s( m, `
  155. {
    , x8 j: Q. i4 v6 I0 m( g/ p
  156.   DWORD attrib=GetFileAttributes(Target);& T6 a" I) O* P8 t% w
  157.   if(attrib!=-1)$ ]9 _* c& m7 q5 ^4 D3 G
  158.   {
    ' w' @) @) @+ x' x$ H% }
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    % r$ x. k5 g7 p& `
  160.     {- _: s+ `! [1 ?1 G7 v$ [- Q6 w8 w
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    " P# d. K7 g4 T( O
  162.       SetFileAttributes(Target,attrib);7 ^7 C" s! m7 R# ?
  163.     }
    # P6 b) _  c) X2 r1 b! z/ M
  164.   }( I8 W2 ^/ m# e; o
  165.   CopyFile(Source,Target,Erase);
    5 L5 }% R* ]! {9 J% m& X" @2 Z4 v
  166. }
    / U% t" |. V8 h: E/ w3 Y. d
  167. $ g8 Y7 l6 v% l
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    * }8 E9 O- f1 G
  169. {
    $ h( G- p4 ~4 E9 F8 X7 H6 S; j
  170.      FILE *fp;
    . l# z& \- d( S. g) R
  171.      char  szBuffer[8192];& P  k' S5 S( `- q* g
  172.   va_list  argptr;
    7 l4 c+ t$ `% d
  173. , ^0 X: X7 f# L; m3 B
  174.         va_start(argptr,message);! y4 m2 Y  H# _$ O7 h; p
  175.         vsprintf(szBuffer,message,argptr);  `- T# Y& \. D8 t8 L( L* A
  176.         va_end(argptr);5 k7 o0 P( G; o, o/ w* B
  177.   fp=fopen(FileName,"a");
    / ]! {: X( S6 }+ S; r0 w' G$ Y$ I2 |/ o
  178.   if(fp)
    # t# x2 Y) J4 }' ^
  179.   {7 T1 l2 C2 R5 u8 o, s: T
  180.     fprintf(fp,szBuffer);; {7 A6 D. M6 a7 Z1 {+ ^
  181.     fclose(fp);" y% m; G: g$ d; B! m* S
  182.           _flushall();3 x  G. A' w1 r* Y& ]) J
  183.   }
    & u! W- ?4 e% y) s# x7 D
  184. }; y- M) w2 ]8 Z4 c2 o1 h; Q

  185. 9 U+ k8 Z5 E! A  z
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    1 N0 s% G* P/ ^1 i
  187. {; I7 c% D9 T+ H
  188.      FILE *fp;+ f; Q5 M; _0 n! D, p( V
  189.     DWORD  attrib;! }/ y$ t# z0 t" H
  190.   attrib=GetFileAttributes(FileName);
    ) ]8 M& O3 d% H( `5 W
  191.   if(attrib!=-1)- ~+ M6 V0 \/ \
  192.   {
    1 q; A7 x+ t/ E- I$ S( D$ |
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    4 z1 ^0 j7 r# N5 R6 g9 }
  194.     if(!SetFileAttributes(FileName,attrib))- H: G3 `/ m* P4 Y
  195.     {
    ; P# `' G* C3 x
  196.       return FALSE;: ]7 E6 K( s+ ]* `& `3 W3 h
  197.     }
    2 F7 @. z! C8 M, N6 A+ h  u
  198.   }
    ( i( C) ?! x2 ^9 y* X+ O* u6 s) m
  199.   fp=fopen(FileName,"wb");
    5 v4 ?4 h) X9 B3 Y7 r, J
  200.   if(fp)' q' S; ?4 |4 s- i  I
  201.   {9 e" M; i5 u" b. w
  202.     fclose(fp);8 \! P2 A" H* @0 f/ I) _) m. [
  203.   }
    ( T, `4 h# A7 a/ x2 G
  204.   return TRUE;0 k( i! v# x7 E6 A' ?: l
  205. }5 a8 G) y8 u% B: O

  206. * P+ a2 t+ }9 q/ D
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    2 w8 C6 Z& n( u9 n; Y! N
  208. {" [, Y! E8 P! E3 k0 i' C8 L
  209.   char filename[MAX_PATH];7 I% N* s+ \* x3 {" C( E8 K8 I
  210.   LPUPDATEFILE file,olds;% B! F) Z2 ~8 n, R& U
  211.   std::map<int,CString>::iterator i;
    4 V0 F; J2 y" d% I5 n
  212.   std::map<CString,LPUPDATEFILE>::iterator p;  Y5 O( N4 b) t7 _7 b
  213.   std::list<CString>::iterator l;8 L' [6 d2 S; V/ y$ j, c; y
  214. . j, [6 H4 L2 V
  215.   if(bFirstUpdate)
    % F  P2 _+ y+ N  U
  216.   {
    9 G9 q* Z( Z0 k$ p6 K" Y0 K' x
  217.     dwCurrFile=0;& q! ]6 u& K  x& W5 a$ l- \' B
  218.     bFirstUpdate=FALSE;/ a% [; d8 [. S. @$ G4 ?' @; @
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 C0 \: `  ^# C: a  O: k3 U
  220.     {9 I1 G6 T! T: x- p: X. J( h
  221.       dwTotalFiles=UpdateLocal.size();
    4 [) x+ P4 @4 b3 ^& ]5 v/ E
  222.       dwDownLoaded=0;
    6 S0 M2 K3 A  h8 M/ w* f1 e
  223.       bSilentStep=FALSE;! J  K5 Q0 r7 n0 |9 }
  224.       bCompressed=TRUE;
    2 m% t2 b( c  s. O. R- F5 \  M0 U
  225.       strExtLocal.Empty();2 b1 N7 T+ _# l
  226.       strFullName=(*i).second;
    $ V& _2 M( p* n& A) B) M* \( g
  227.       dwProgramState=AP_CONNECT;- A- `) X) a- k# M* M5 h- |4 s5 J
  228.       return TRUE;
    9 u1 J" s/ n- w5 Q7 F
  229.     }
    8 `2 B5 X% p  H
  230.   }
    ( Q" f* b+ g4 u: k# W1 \4 l) [
  231.   else if(bRestartUpdater==FALSE): r2 u) y5 _9 f+ C8 g
  232.   {" I: m, x2 v( u3 L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())4 l1 f6 I  x/ R. X
  234.     {1 M6 w% l8 H1 U' z# f
  235.       file=(*p).second;
    " H9 L5 ^* r6 q: _8 ~
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    . B, M" W3 _9 _5 L. X( \0 X# M7 `& J
  237.       {+ x, D& C0 c( P) d9 X4 C
  238.         olds=(*p).second;
    0 h1 U0 p3 E( @' n
  239.         olds->vers=file->vers;
    9 y& N8 G4 q# d
  240.       }1 w6 \% N- I5 M2 D
  241.       else6 B) R9 M, e2 c8 J9 _) ~. W
  242.       {; j- A  p. G& D2 P- G6 p
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 }; L" r4 ?% e+ O( T2 I& |! r, b9 t
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ; \2 b1 a; d' s/ e( u# e: J
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));* C; G# t; ]2 i
  246.       }9 D/ g& j+ f7 {! ?7 o8 b
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    7 g2 \( r* i- s
  248.       sprintf(filename,"(%s)",file->file);
    4 U& Y* x4 y6 N* @
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 ?2 Y, P% U2 J) X
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }& }# v: l  h* l6 W$ S9 B: P
  251.     }- a3 t. l/ h3 h" b0 x0 {
  252.     dwCurrFile++;
    , b# d/ c  z4 x
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # o# i/ o% I3 S6 A
  254.     {
    9 K$ K' n8 y" w' d
  255.       bSilentStep=FALSE;; S, m; Q+ y  j( L- I
  256.       bCompressed=TRUE;
    $ x3 n" P, U6 [& R) d1 N
  257.       strExtLocal.Empty();% Q3 G  Z& e- F( f' E7 q# k
  258.       strFullName=(*i).second;
    4 |0 B2 E$ `6 e6 ?  D! ^* d
  259.       dwProgramState=AP_CONNECT;6 P7 n% v+ N, X+ N* H
  260.       return TRUE;  F% q1 P7 C" h+ v& o. }* Y
  261.     }
    # N1 n9 O) t0 T: n  l
  262.     if(!bRestartUpdater)# K( K* q3 A9 s1 o8 x" q
  263.     {3 C+ M: J* H4 D1 M
  264.       int iCurrSize,iFileSize;
    2 \, N# z. T5 t8 N
  265.       iCurrSize=0;' j" Y2 I' \. e/ A7 K5 T
  266.       iFileSize=UpdateList2.size();
    $ o( r5 \' o7 S  x1 c
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    - E2 k, J5 a- |3 w3 c
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 W  Z, K' A) q$ k* P
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");5 R8 N& {+ K( s1 u
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : G. y9 p% f4 f: |2 D! T
  271.       Fclearf(".\\update.dat");! |6 [5 X! h1 l5 G/ t0 E
  272.       Fprintf(".\\update.dat","Bloodyf\n");) Y0 Z7 F1 G5 D3 M
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) q% s/ W1 |, M& Y' w* Q
  274.       {0 Q0 z4 o; E! D) T: G' M5 \
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    $ G, ~1 x/ T. ~9 k" u3 H7 z
  276.         {9 |6 F5 B8 a" p( I. @
  277.           file=(*p).second;
    ! ~" L, r  h8 Q& ^; k
  278.           sprintf(filename,"(%s)",file->file);  s1 Z. G4 ?0 A
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - F+ X# q+ d2 y  E6 C* l1 q
  280.           iCurrSize++;# _% @( y3 i. ^
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));& B/ I$ Z2 T! k6 z* L) Y5 e0 H
  282.         }& r( O- z7 H& \, [6 v+ ]8 W
  283.       }
    % {7 C$ v% Y9 c/ d" y
  284.       unlink(".\\update.txt");$ J$ k- q0 @. P) u; `9 r
  285.       unlink(".\\update.tmp");) G4 N# u# S; {; a3 d: d0 D5 j- G
  286.       Fclearf(".\\checkversion.dat");
    - V! U$ r4 M+ ]) L3 a+ o9 r; X
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    & F  h' o  L+ T, Q1 ?0 f) q5 _6 G
  288.       if(UpdateLocal.size()): }% g/ C/ j: k: G7 T) s
  289.       {7 b, Q( e5 c; U8 K
  290.         UpdateLocal.clear();
    " b! p, b; q6 J
  291.       }
    3 n$ Y- m1 A+ r1 _6 B5 I* [# E
  292.       if(UpdateFile3.size())3 g% H  I# r- T' O; }6 d  n/ ~7 [7 I
  293.       {4 |5 e- E: H# |
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " ]( d) J+ ~* D2 D: U  G/ ~
  295.         {4 d$ T. B7 F; s
  296.           file=(*p).second;
    - y' z5 q, W: i! Z# a4 N2 b
  297.           free(file);3 S6 E/ p: ^* |: w. R+ `4 _
  298.         }5 k: _/ X4 {9 C6 C
  299.         UpdateFile3.clear();) o1 d9 r$ w" ?7 ^1 K+ s
  300.         UpdateList3.clear();% v5 [! c! [& S7 W6 c) I% G; E. Y  z5 I
  301.       }" p& `. @* `* B1 T9 a; r9 h1 ^, @
  302.       if(UpdateFile2.size())  }% g) p1 O7 s" v0 m4 n
  303.       {
    % g  q2 f: d( k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 x  C2 @& K# o) N
  305.         {, |$ O# g0 O# R% V7 f
  306.           file=(*p).second;
    ) R& N: t0 y3 v6 S; Q
  307.           free(file);! @/ G: ?1 s: ~& i1 b3 A3 I
  308.         }: T8 N) A) T8 [' Q3 f1 R$ S5 ]5 Q
  309.         UpdateFile2.clear();, {6 e: Y  u2 G- P
  310.         UpdateList2.clear();
    - h. A; W0 O$ p  d0 Q6 w) H" s
  311.       }  i- B1 A, h9 L; }0 s- ^& F' f  _
  312.       if(UpdateFile1.size())+ V: _3 T! @8 r; H4 f. K
  313.       {
    $ o" @& T* o# u1 L; f
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! c( Z( U' \, |) d
  315.         {
    $ {7 j7 o5 v: S6 }$ [4 f8 a7 \
  316.           file=(*p).second;! y' V9 b! ?* G. V8 Y- j& h% }
  317.           free(file);6 I' k. A" j# w: z! `8 t4 \
  318.         }$ u9 E" ?" t+ Z* _4 O) z
  319.         UpdateFile1.clear();
    & O3 ?9 q& L+ ]
  320.         UpdateList1.clear();7 g* ]% G) m% O' n
  321.       }5 p' E$ ]% {6 Y$ C! z) `
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));' X3 G3 `7 c" ]) L2 O' `$ y
  323.     }
    8 o, X* X- n* O5 O# V# K% F2 r9 f4 Y* `
  324.   }: U. r* ^$ I7 K, o. v) g
  325.   return FALSE;/ _( c. V( g( X4 c5 S
  326. }
    " a, l6 b4 y2 \7 u( j& y
  327. 2 }& p. I4 U: U0 Q% }
  328. void CRevAppApp::ClearAll(void)
    7 F% s, x( @. h2 a6 ?3 y& E/ h
  329. {+ b0 O- E5 `' W4 S- n5 _; m
  330.   LPUPDATEFILE file;7 ]$ B% ]1 ?( w. e6 o
  331.   std::map<CString,LPUPDATEFILE>::iterator p;& u2 c% K' h4 \7 V! t

  332. ( `* {5 T( f0 x& \) n) A5 H
  333.   if(UpdateLocal.size())
    ) m. \+ j3 I/ |+ v4 F/ W) l3 H
  334.   {
    9 m) J( H& E1 J1 O
  335.     UpdateLocal.clear();: n9 s2 Y4 o" Z  _# x" ]2 Q
  336.   }
    8 E# \) ^8 e7 b* n
  337.   if(UpdateFile3.size())  k' I6 R4 ^  Z9 _. H7 n
  338.   {
    5 i% t+ a# n( d2 s  |" P* h
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' m& k0 T& ^" V& P4 N) \8 x
  340.     {/ i/ z  ?; Z  W9 l! q& Z
  341.       file=(*p).second;* Z- ]2 G! [0 g/ p$ e% c
  342.       free(file);( ~4 ^# Q( ]7 z9 l
  343.     }
    % j* E+ c$ b8 t5 Q/ W3 q0 e
  344.     UpdateFile3.clear();
    2 C4 f" a4 O  I5 G
  345.     UpdateList3.clear();
    + ~3 p  r' H, {; r
  346.   }. N' S8 A' c; N0 z
  347.   if(UpdateFile2.size())4 e: T. d: u! p& f6 q- l
  348.   {" e5 l1 s- J) B/ o: G( Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 I$ ^" T* Q* [8 l$ I- z
  350.     {. S6 w- {) C- q& ?, v; N
  351.       file=(*p).second;
    ) ]. ~: w, L- {; ~' z& n
  352.       free(file);
    / b: b  V( O. H0 y9 z3 o
  353.     }
    , f) i& E+ Z% q/ F0 ]8 K
  354.     UpdateFile2.clear();
    2 L8 X1 a* i: x/ @  W& b* S, a
  355.     UpdateList2.clear();! F6 M+ @0 N/ A
  356.   }) s  b9 \3 w6 J/ c7 x- ~$ m* V/ j
  357.   if(UpdateFile1.size())
    & m+ O" ?; R/ ?( @3 T  V
  358.   {
    ! m* I1 c# |4 D( v. U
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 F3 z# a  z% Z. \% O! @' w
  360.     {
    $ h) d2 @6 J. U
  361.       file=(*p).second;7 Q9 A5 y7 v; z9 d" ^* h
  362.       free(file);. q5 A9 e" M% X' G1 X$ \
  363.     }" y( ?4 A4 x5 g& b- \0 [
  364.     UpdateFile1.clear();
    , L; E2 U2 r2 n1 _& J
  365.     UpdateList1.clear();
    ; ~0 t/ q! h) f" N, K
  366.   }* ]8 }" u# q2 E* ]$ s) h
  367. }  
    % |, z+ y% p  n+ h9 F
  368.   6 U, i" ~; @  B: b2 U
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ' A. x7 ~, L8 V, [
  370. {
    4 x5 @, j- ^& U( f8 E
  371.   int c;
    7 ~$ B% D' F) |" O
  372.   LPUPDATEFILE file1,file2;9 o: _3 Y* E- B) ]  z
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;- R/ e, N% ~* Q4 I% O
  374.   std::list<CString>::iterator l;# _7 W# m/ ]( Q2 K. h

  375. $ O' F% e  ?% m. f& z
  376.   UpdateLocal.clear();4 z( a6 P, p( Y# x% j
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);& E! A2 _2 k, c" r8 H, B9 H% X
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    # [% Q' m/ F) k4 p
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    0 b* \2 ^" b' |
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 Q& z; Y- s$ n; g* ^! `+ f
  381.   if(UpdateFile3.size())2 k9 u+ L2 l$ j) {0 b0 _, B  k$ r
  382.   {5 C# z) U& ]( Z
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    + h/ Z8 @; ^& C, ~) z
  384.     {
    0 s- b+ k- Y% s* L3 z9 ?: {- ]
  385.       file2=(LPUPDATEFILE)(*i).second;- h' E! T* T/ J6 l
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 R6 a/ j0 r! G8 x
  387.       {- c- j8 h  o" \- J$ g- u, ]
  388.         file1=(LPUPDATEFILE)(*p).second;
    2 r: d. k6 z4 S( V- X
  389.         file1->vers=file2->vers;( P, D# R, h2 f+ j, }0 r1 Y$ {9 F
  390.       }
    7 Z. Y6 C1 `$ k
  391.       else# w1 o* ^) r& a0 f
  392.       {
    3 n) b* V% B  e/ p
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % Y6 }5 q9 `' M
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ! W: h0 _  l. l( u8 {; w
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));# W4 \' W7 I: L6 ]* J! R
  396.       }
    5 ]. ?  l1 e8 u* B
  397.     }& b7 ~6 ]" V: n2 Z9 q+ g
  398.   }) y( J1 Z; [- {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 E9 N. v6 S0 Y% o+ P  M
  400.   {; A, H" d5 C. v( }5 L  n
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())6 D) X3 w5 l5 m" G: l- B' C
  402.     {4 B' ]) A0 U( I* ^
  403.       file2=(LPUPDATEFILE)(*i).second;
    4 V) V; E+ ]! I" `4 T$ \: g( d
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' q7 X. y( @2 K  n  l- }+ t
  405.       {& _5 {. w% g) H; O/ J# T* U9 p3 r5 S
  406.         file1=(LPUPDATEFILE)(*p).second;4 [7 K8 M. X  W2 i
  407.         if(file1->vers!=file2->vers)
    8 u0 b! `/ A$ ]
  408.         {! x2 }8 U& W3 ~. b+ A7 D5 {
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: W2 Y- g( k& {. T
  410.           c++;9 z3 k+ e$ Q# {+ T. n. |0 ?
  411.         }8 Y5 A8 ?4 B! U+ A7 R) B' u
  412.       }9 E1 `' L' d3 N" k/ ^2 B9 w
  413.       else5 j  q9 {' L+ D1 n! i
  414.       {
    4 U* R  q( `/ V9 y6 S$ x
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 j2 x/ E* m5 ~5 y
  416.         c++;
    9 F- p" l+ G$ h. B. S! w) }
  417.       }
    ( M" W0 D" Z( W
  418.     }
    2 q" c  `4 a! o1 n4 \' v& J4 d
  419.   }9 b2 R5 D% l3 W; \; t' o
  420.   unlink(".\\DownLoad\\update.txt");
    ( i/ }1 B! u- |$ a* ^9 H' x9 i9 W
  421.   if(UpdateLocal.size()) return TRUE;
    $ Q* u5 b, z# k* I; H% q2 `2 `
  422.   else                   return FALSE;
    ) y  w* L( \% t! W$ r7 j) o
  423. }6 h# U9 I4 b. j, ]( f. y; m

  424. 2 E9 {: S0 k% u9 [! w4 X5 _& |
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"1 l) j0 F0 A9 ^7 \% g( N) Z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"0 D8 A4 s( D( a

  427. 1 C3 @+ t' ]8 i  |
  428. 8 [. _* f- @7 O$ V$ q+ H) {

  429. + R. @' S8 G4 v4 A- w* X
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)+ V* }% k3 M3 h2 ~
  431. {
    0 x7 E9 g6 p$ Q9 }+ Z: y. Z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ) _0 ^0 W+ Z2 ?3 ^; c
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 U) I2 f4 [, v9 c2 j8 x
  434.   {
    $ z0 Z! u- N; _9 q
  435.     char szLanguage[50];
    * U; l, C2 C0 f. a' E+ E
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 K4 I  \- V1 z
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , [- U9 K6 A2 h7 P% W/ ?
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / u/ x& ]+ R4 s5 I7 j0 Q
  439.     else                                   m_iLanguage=ENGLISH;
    ) [5 q5 L7 Q) z5 {( b
  440.     char szRegister[100];) t; d5 q" Y& P" U. B& V3 S
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ g1 C7 l5 C, T- h# A  X9 a. v+ w1 N6 E
  442.     strRegsName=szRegister;
    9 ^! w$ ~6 v# S
  443.     char szPatchURL[100];" w! @+ M- y6 Q3 B
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; b7 C% S- g4 t; @! j0 V7 k
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 ~- w3 |9 ^/ i6 I
  446.   }$ h5 h% f# c9 V
  447.   else" H! F8 a: `% {; M1 v
  448.   {+ m! H% D: b4 G. ~( \4 w6 [# K
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);' ~- |& w0 i' Z  v+ I+ _) [/ ~
  450.     strRegsName=DEFAULT_REG_URL;
    0 g9 K' d. |6 k5 F
  451.   }4 v0 o5 J- m/ K5 C' v; c
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    % d% w% o" j, P4 ~
  453.   {/ i& _: D  V9 G1 Q0 d6 R1 ]  B: \
  454.     char szIP[50];
    + d2 |& h2 _; C- v- M. O
  455.     char szDIR[300];( ^. L7 {& \! ~9 {% }1 c8 X
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))9 c( g/ e+ l$ r4 w; J, L( i. D1 C
  457.     {$ P" M, w) p5 [$ C! t% C; q  B/ q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");( P# y" ], L1 j9 H
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");7 @; A( g3 R' B/ w, b# ]2 q1 X7 ~5 F
  460.       strHostName=szIP;
    . W# R0 D/ u- ~: R: [4 y& r1 n5 C
  461.       strHostPath.Format("/%s",szDIR);
    8 e3 U: G" I0 j( P
  462.     }! `7 j( F8 B; }: P7 a
  463.     else
    ) ~6 s4 u  a+ D: c) z& R# F+ v* [
  464.     {3 j2 v' t. b) t2 g5 |1 l3 `( |8 ^+ v
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)/ V+ P- ]; G" e% q, \
  466.       {9 Q! Z! k. Y& K, i/ _* u
  467.         char szLanguage[50];+ J+ T4 t: {: H# j+ G; P! C
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & A3 s6 M9 N) v6 m7 k
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) S" Z1 e2 j5 Z  _
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ _, Y% a  c7 _" \  x% A) J
  471.         else                                   m_iLanguage=ENGLISH;3 ~! {; c6 |+ v' |
  472.         char szRegister[100];7 `! b8 ]: V7 E; P1 \. e
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ I# T1 T0 m, }9 I( d! B" h
  474.         strRegsName=szRegister;
    ' |6 {4 e  z2 u2 |
  475.         char szPatchURL[100];
    - H! p6 j' E4 _) A1 l: _3 Q
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! J. v, u* ~4 J/ ^/ r* E" U% x0 N
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, |3 N5 @& S8 r6 }! o" {3 A
  478.       }
    ; I- k' u9 ]9 v$ E4 X% m. ]
  479.       else/ c$ T7 n/ ?8 t( A' i; e0 J
  480.       {
    2 z' V& J8 E' C+ \( W
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- A0 ^2 b) [1 q! A* ^0 Z
  482.         strRegsName=DEFAULT_REG_URL;; \: L( L, p( ]# N) m
  483.       }
    + ^- c$ K' m6 t1 F
  484.     }
    & l1 L: l! S- H8 @6 F
  485.   }
    . t! l: I/ k& f. {6 ^
  486.   return true;
    ) O- D; ]7 V! ^- e( S) Z  ^* K, D
  487. }* O/ p' ~5 @5 C- X; [# T: N2 v
  488. ( v) _/ j: M- r# H7 j3 \
  489. #include ".\ZLib\unzip.h"
    * j' l/ L- B7 h* H. ^2 e
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ' q/ ]: q: N* ^* o2 z  w  G
  491. /////////////////////////////////////////////////////////////////////////////+ c! J1 X0 J6 G7 I$ ?& r( E
  492. // CRevAppApp initialization
    + b" j$ T- }3 }* v9 Q. L$ I

  493. . M. h2 j& a; R/ I+ g! ?
  494. BOOL CRevAppApp::InitInstance()
    / ]% k6 }' s5 n) ~
  495. {
    7 I, g6 z$ L0 e
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    . S- J$ f" y# y# {; v  {5 B

  497. ; A  E5 O3 b# F& T* A% g! k
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    5 r  {; I, E" N9 W+ G
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))0 W  b; x% r0 |! q
  500.   {
    6 |) e; z* r9 d. ^5 A- \
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");  f, R5 Q- [8 _% S5 H# O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);! X+ V' K& b7 p* [" x) I& D& E6 a9 R
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))7 h; b1 Q3 U4 o* C, Z; K
  504.     {
    7 g! K2 X! j/ y4 o( P' Y) X- x
  505.       strcpy(szPath,szPathTarget);2 i0 @6 ]( H' V) c" w4 [: F! `2 U
  506.       SetCurrentDirectory(szPath);
    2 \# o& y3 x2 J
  507.     }
    / T( ^+ a, H$ j9 A/ @
  508.   }
    6 `5 Q  e6 ?1 a" w0 q
  509. #ifdef _DEBUG, |% [' g6 v4 l+ y; R9 v1 U
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  R" u1 \# Y% N1 D
  511. #else0 O. W2 `  G. x( z# I6 \
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)). ~. }; K3 G. R) D
  513. #endif3 R6 c- ?# J" F
  514.   {/ Q* l/ b3 T' i
  515.     char tempFileName[MAX_PATH];5 Q8 N# E4 ?! d2 z/ K
  516.     strcpy(tempFileName,szPathSource);
    7 ?1 d6 b1 v; w$ q" ]* R: J4 U
  517.     tempFileName[strlen(szPathSource)-12]=0;: `, e7 h3 r; t9 `* e4 S: ?
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    9 H2 @. W1 R: ~5 F
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    8 h0 ?. m0 B) e7 j3 Y4 O
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ c" F- ]8 v+ B
  521.     return TRUE;9 d( \" f/ I' {% Q
  522.   }2 X' ]1 y) L' B5 w- Q; g
  523.   // Nuke 0118: Delete run.exe& I. `  N1 Z. \+ y, M0 v0 {2 }
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    $ ?+ u" i" I! m# }9 H3 K" a$ z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    . E9 o& N( U, H1 T7 [, |/ y
  526.   if(!ReadCfgFile("Config.ini"))& Y* Y: q4 a5 F% a5 ]" R
  527.   {& ~) t! D5 |- F) X
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);0 A! b$ x. m5 G/ C! s4 g
  529.     return TRUE;- q6 D" e& g1 g9 G3 z8 Y+ U! g+ o4 E
  530.   }0 U6 x0 k" i1 h/ k  v
  531.   HANDLE mutex;
    * w. U  w7 L+ F. ?! A: h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))7 F+ O$ ~! V) u/ F, N$ s/ D8 |
  533.   {
    7 ?" l% J( K( `+ S' E* W' n2 u
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
      q+ r. t: z. h$ G1 x8 _
  535.     {
    1 v9 p% T1 h" J! C  ]1 T6 I) M
  536.       CloseHandle(mutex);
    ' B5 [4 A: ?4 V% A
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);2 f. d- P$ t- o" H; _
  538.       return TRUE;9 a$ Y6 v5 G1 C- M
  539.     }
    + b9 ?  }( C. {4 `( Y$ ^
  540.   }  
    5 t% ^$ K* \7 |: l/ K9 E
  541.   CloseHandle(mutex);
    2 V4 P- J8 `, P& E: ?
  542. + ?" u; y) Q! z/ e" J
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( G6 Q) T) Z# d' I0 W6 P8 _5 X

  544. 2 Y( n9 o( }: z; C% i! ]' n
  545.         AfxEnableControlContainer();
    - U; f: C# `4 ^) F1 k) F% u

  546. " C- a' ~* T, {. z
  547.   bCanUpdate=FALSE;0 O$ I1 G& D. S9 R" E% F
  548.   dwStartUpSteps=1;
    ( ?" h- \& X1 }7 ], \
  549.   dwProgramState=AP_NOTHING;' D5 k; C& H1 X

  550. ) M2 S9 G3 f. C/ }5 H8 G3 t7 _( t
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    , E* o1 B; Y% |6 D) q; @9 H6 I8 i9 v( x

  552. * R; X: l- y; _) _
  553.         // Standard initialization% T$ ^( p# e/ T+ r. x( W
  554.         // If you are not using these features and wish to reduce the size4 c+ T/ w: _7 \9 K% L% h
  555.         //  of your final executable, you should remove from the following# J6 o: p# q2 s5 q& b
  556.         //  the specific initialization routines you do not need.9 V% Q0 }! g* l( r

  557. / ^( P, H7 W  B+ q  E* r: ?3 I
  558. #ifdef _AFXDLL/ K# ]( [: s* w! p  j1 x& a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL2 y! N% M6 }2 E! V( L1 @
  560. #else
    ! t2 Q. P/ o( h* o
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    : `2 i5 Z& R! S. b
  562. #endif
    0 Y  X7 C! s' C/ |1 `1 k
  563. ' y5 L! t0 f4 @& _, P% x
  564.   dlg=new CRevAppDlg;4 W1 n5 S3 [! J( J$ `! ]  r) y7 C; R
  565.   dlg->Create(IDD_REVAPP_DIALOG);! O  k5 Y. \  K0 K" q, I
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) Y! x7 ^& e" y7 y1 N
  567.   m_pMainWnd=dlg;
    1 O3 i" [5 a7 O* F8 y* h" v
  568. # s4 j9 U* D5 l% k: T* [2 w$ a
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 f5 T2 l+ W9 _! f
  570. 3 ]" Y, ?$ M+ J2 W# J
  571. //  GdiplusStartupInput gdiplusStartupInput;8 K6 O8 Q9 V0 q# ]. ]( R
  572. //  ULONG_PTR gdiplusToken;
    + [* D& q8 J- V1 ~4 I4 P6 l' I' G
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! C- H/ l5 n; V& J& m$ s; M( M+ C

  574. + V- T7 [* L5 J$ T, n
  575. //        CRevAppDlg dlg;
    - ~* v# e/ @0 F& r! u! [
  576. //        int nResponse = dlg.DoModal();
    ; d. n% E9 Q; O, ?  r0 B) b
  577. //        if (nResponse == IDOK)6 ~  r- Y( ^4 ^; o- t5 F
  578. //        {1 H* f$ |/ i: C+ D
  579. //                // TODO: Place code here to handle when the dialog is! C$ v* c8 Z: Y, C6 A6 N  Y
  580. //                //  dismissed with OK! T! h  C0 C3 _' D0 d- h* s6 w9 [
  581. //        }
    " W) `/ j/ Q5 C, V, e
  582. //        else if (nResponse == IDCANCEL)
    - r/ b5 S- O5 y6 x- z' Z2 S
  583. //        {
    ! J/ L: r6 j1 U# E  `
  584. //                // TODO: Place code here to handle when the dialog is; j/ L- y  Q$ N& o& W
  585. //                //  dismissed with Cancel( R' U4 _' F) \
  586. //        }0 ^, }% S. l& k2 u# k
  587. , A8 D  ~4 H8 X7 t$ L
  588.         // Since the dialog has been closed, return FALSE so that we exit the4 N) F1 E; k) R
  589.         //  application, rather than start the application's message pump.
    - s% n! g. s( M  x9 G0 \5 c
  590.         return TRUE;* N; t+ u" a0 a
  591. }
    0 _, i5 C8 I% x* o1 f+ f
  592. + t8 D" V% N6 z
  593. char *CRevAppApp::strtok3(char *pSource,char *token); X  V0 z$ x3 L1 N* ~) @* S! C3 o1 V
  594. {
    8 W+ d8 @& g! p' k( O
  595.   int i;4 n/ s' S. U5 ~* c
  596.   char *szRet;, l. A  d# ]$ ]

  597. 1 I8 p( F+ p4 u4 n9 a
  598.   if(pSource) { itoken=0; sztoken=pSource; }% z7 H& e% p% G( F1 ^# m6 Q
  599.   if(sztoken)
    7 v# y1 {- ^9 K- X3 }  W$ ~* f( h
  600.   {
      W+ n1 i- ]9 x2 Z4 ~0 ^1 a
  601.     szRet=&sztoken[itoken];
    9 ]: m& X8 ]% j, Q* Z: H4 m
  602.     while(sztoken[itoken])* j8 Z" P/ D7 |/ A7 p- x
  603.     {1 N+ Z+ Z/ e8 k. X2 O
  604.       for(i=0;i<(int)strlen(token);i++)( `* b7 e7 W" C! U/ u6 d2 b
  605.       {, y8 v( b# {) `
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ) ]4 M2 P; y5 H) K# @7 P
  607.         {
    5 d6 W6 J. p+ h! J$ h
  608.           sztoken[itoken++]=0;  P' g, ^1 P) x
  609.           sztoken[itoken++]=0;3 K& h  i. w9 O+ H) y; Y
  610.           return szRet;
    2 N! F3 C# h. o7 \- I, d9 J
  611.         }
    % w0 P' O5 O8 \0 H  G
  612.       }1 d+ U* }& @& R: y. c
  613.       itoken++;
    5 V( J$ Y7 }1 D1 T8 j
  614.     }
    ( w1 |/ X; h6 ^3 |/ P: N, n# q
  615.   }( p- i% W$ q" e* Z, M
  616.   return NULL;: |. W. J* N* D6 D3 C2 w* N
  617. }0 W9 q+ e  A" y

  618. 4 H2 y" {* k; G; o- E
  619. void ProcessProc(long Total,long Current)
    $ d# M+ U( {# I7 ^; i! u. Q! M) t
  620. {" {9 p+ O0 M6 u1 v2 U' s  \
  621.         MSG msg;
    # `: ?; `1 A. @
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);. O0 a( i4 @# T* n8 X5 {+ @% G8 c$ l
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ( }+ |$ Q5 e$ n! g  z; n
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    : ?" A3 ~3 ~  r, ?, K
  625.         {- N2 ~7 Y  i4 G& y) z" G1 e
  626.                 if(!GetMessage(&msg,NULL,0,0))
    3 X0 U$ B, L, B: {6 l, @7 `- L7 ]
  627.                 {
    & V, W8 `, u) q; p
  628.                         return;. n# h8 @5 O/ n. B1 w& J
  629.                 }
    $ x; R7 n& r: D0 ^1 f
  630.                 TranslateMessage(&msg);3 r2 H! A- ^' w9 X8 ~$ K" o
  631.                 DispatchMessage(&msg);9 W$ N, R; p6 o) q" t' s6 [
  632.         }        8 {, R  S2 f! s" X. J, r2 b
  633. }  r& K* m- Z0 q. B1 b: F+ e
  634.   k6 e8 u: z' l, W
  635. BOOL bFirstChar=TRUE;
    ; x7 j( t5 N/ e3 D. w$ K7 t$ u
  636. 5 I+ k$ {, v7 K3 h7 }
  637. BOOL CRevAppApp::OnIdle(LONG lCount), A) M1 g4 F0 f& C7 I0 \" q
  638. {" o* {1 w4 W7 r4 H) p, ~
  639.         // TODO: Add your specialized code here and/or call the base class
    ! A1 R3 t6 ~/ ]3 X2 F# x  {3 Z
  640.   switch(dwProgramState)
    : U8 d3 o/ R- ^) j  z' x) N
  641.   {9 q: }5 t/ g/ ]) |
  642.   case AP_NOTHING:
    0 V* g4 G1 c2 Z* ^7 @( g. d
  643.     switch(dwStartUpSteps)
    2 H4 W; o% q$ v! P: b' l
  644.     {
    & ?# X! I' w+ c7 @" S) M
  645.     case 1:
    5 C1 U( r4 q6 Y9 u( a7 H& H
  646.       {
    2 Z4 s: U' D: E, j7 s0 b
  647.         int i;
    # B3 ]6 X7 C% K
  648.         CDC *pCDC=dlg->GetDC();
    7 J$ O. n  z% |' `# V
  649.         HDC hdcwnd=pCDC->m_hDC;. z; T% a  \+ p2 I) @
  650. //        Graphics graphics(hdcwnd);
    # l! j" f, n7 G' c
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");: g) O! b. t/ X( @, ?7 ^9 a
  652. //        INT iWidth=bitmap.GetWidth();& i1 }& h0 M+ s  Y- q0 j% L
  653. //        INT iHeight=bitmap.GetHeight();
    3 T0 a7 ?0 C. q1 a' S, c) ]
  654. //        Color color,colorTemp;
    1 {8 H& f0 e4 `, z; S' U- {
  655. //        for(INT iRow=0;iRow<iHeight;iRow++); d, a% y: a. g/ R* l  U+ ~
  656. //        {
    ' r3 h; l  U/ X  z1 \0 A5 J0 _
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    0 e7 l  i' M+ y, v
  658. //          {
    " O3 q/ E: B9 m  f/ f% [- h$ e- c
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    / H+ m$ s4 {% `  V8 n& R
  660. //            colorTemp.SetValue(color.MakeARGB(
    - R3 k/ o% x' A' }; L" P+ C* i  A
  661. //              (BYTE)(255*iColumn/iWidth),
    3 O8 N* B5 p' R/ f, d9 ^  r
  662. //              color.GetRed(),
    + ?& w( s7 l( o
  663. //              color.GetGreen(),
    ! n0 H$ _( _7 C* k! s) _0 W* x7 k
  664. //              color.GetBlue()));# ]) ^! x: J- S7 g4 P1 V9 t
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
      N! o/ X  J4 b( Q- _
  666. //          }
    & A& \0 q, r, h6 ^: u# v4 g
  667. //        }; h- ?  D- H: ^9 x/ h9 c- s, `
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);8 H! X9 R+ z- v" D$ E! t5 t
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 n! |/ M8 \: J1 t: W
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ n6 Q2 d8 O" r; h* d, |, Z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % G) B' v  I. E# f
  672.         for(i=0;i<240;i+=8)8 ~# e$ B- M& |! F( d# |! {
  673.         {: j5 m% H: B8 g& K1 m$ N8 S
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , i; Z* v7 n! [. H! G
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);( t" V3 z+ B8 I, G$ C2 f% m" @
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . Y$ A( d+ f" t# F0 ^# c( x* X
  677.           Sleep(33);
    , ?- j% A8 R( l% ~& _
  678.         }
      [: e( s+ r1 c- h' Y4 j$ s1 o
  679.         Sleep(1000);
    0 j, h& n6 a4 n/ r% a0 @  b. ?
  680.         for(i=240;i>0;i-=8)/ U" A& \- ?# O2 P
  681.         {
    ) q7 y) x1 J; D4 I1 U
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. P2 ]- D! P1 u
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  p; m7 i  i+ X( j; I
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- B+ `* q+ i$ ?, r6 n
  685.           Sleep(33);
    & Z  z. g4 A% H- {
  686.         }/ L4 N6 J# c& i
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    & V3 \! U0 U) F, c
  688.         dlg->ReleaseDC(pCDC);
    & O, A; K3 d5 O
  689.         DeleteDC(hdctar);1 H3 z% e9 T) v5 S& a, t
  690.         DeleteDC(hdcsrc);
    # a2 T! @" ^3 R3 B
  691.         DeleteDC(hdcorg);& C; s7 `/ J) J( m7 m
  692.       }
    * T! z8 T. W) D+ h# s
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    8 g& p; r. q2 R/ P! ^
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    . l* a1 B6 \6 I# ^1 e
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    , ~- A8 j  }4 z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");* Q' z6 e9 T' v- q+ S5 t# d
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 I3 [& c: \2 B1 B+ s2 C9 P9 B4 `
  698.       if(!Dn.Connected())1 j$ `9 ?6 L9 A# ^# V
  699.       {' V" C+ V9 d5 {4 ^. o$ I% U
  700.         dwTotalFiles=1;5 K* o7 v" P2 Q# B
  701.         dwDownLoaded=0;
    3 s/ k1 a, q- ?, z' \5 T6 i' I
  702.         bSilentStep=TRUE;9 L6 J: q7 _1 X9 M5 X5 E) D( F
  703.         bCompressed=FALSE;9 r  q$ W1 Z. n( ]9 B! e
  704.         strExtLocal.Empty();
    . A: k- Y) s  k
  705.         strFullName="readme.txt";
    1 P" b2 v- F9 z5 i0 p" s& M; @
  706.         dwProgramState=AP_CONNECT;
    ( ~' k/ x3 J- z
  707.       }) r$ _, r0 |0 d( S+ g# {4 A
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    7 d& r* ?' {- M. ~  r
  709.       dwStartUpSteps=2;2 d& I+ V' z4 D3 `) l- B9 ~
  710.       break;0 W7 O: m: F' W- H) c" X
  711.     case 2:
    1 S6 E& u/ s2 e; L
  712.       {6 R& J* c. S0 I# q: B; d* P
  713.         int iEOF;
    ) m5 i! G! v% y
  714.         FILE *fp;
    $ u3 O/ v8 U0 V- d) p0 R4 t
  715.         char szString[512];5 r$ [; O2 b& f
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 F: N  F7 A1 R' O2 K: V' ~/ f$ r
  717.         if(fp)
    " X, N2 [8 u4 a3 Q9 F/ r, Q
  718.         {
    2 y4 a0 T6 x/ A# D& {  @
  719.           do% b' Q9 r( t/ j' Z8 q8 p
  720.           {
    * {; S: k, ~% {  a2 @) n! u: g* U
  721.             iEOF=fscanf(fp,"%s",szString);% C+ ?+ [' f- i4 m
  722.             if(strlen(szString))
    ; m; l) d) g  n
  723.             {+ }) T- i  |' A8 ^! c0 `- e! q, @" M" }
  724.               if(bFirstChar)
    9 @; _) s% J: m
  725.               {
    % m5 E3 Z! j& `
  726.                 bFirstChar=FALSE;# f2 \1 v& `/ l: i$ s/ L0 \
  727.                 bConnectIsBig5=FALSE;
    2 A( w7 ^/ Z- t. }! T" s
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    $ ]/ Z( t* V) n: Q/ _& i
  729.               }. u9 V5 P+ I: b4 R
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));: D. t9 x2 l, {# T3 r  w, x8 g
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));* `0 n# a! t% {2 v4 _9 r
  732.               dlg->m_ListText.AddString(szString);& ~0 m6 v; [3 |- O5 E) o
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' R/ T( d9 y; _, ]2 d
  734.               *szString=0;1 |9 V. @/ ?; P, C3 [9 h
  735.             }8 R5 [% C2 _2 S$ W% S; ~, a
  736.           } while(iEOF!=EOF);
    5 l8 o  Z" R/ ~7 ?% G" \. Z$ q
  737.           fclose(fp);
    + z& n& M" t& I. S) J5 J
  738.           unlink(".\\DownLoad\\readme.txt");! V( B' o- D9 e- {, X9 c# m
  739.           dwStartUpSteps=3;
    3 g) P. L. b, E7 V
  740.         }
    ' n- A; F+ X- ~
  741.       }
    + }* N9 @# Z6 G, s) u) ?1 F* |4 A
  742.       break;
    # X8 p% W% C0 ^: W( q
  743.     case 3:6 G2 S7 E4 I- Q0 \/ T, B
  744.       if(!Dn.Connected())% q( W& G; k( ^2 p
  745.       {0 H5 [9 k) x/ h) \. c
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);* Y% Z- g* b8 a* N5 W
  747.         dwTotalFiles=1;% G3 u( j; P4 P5 F4 V: M3 K
  748.         dwDownLoaded=0;
      d% _! s- }, f/ X+ S7 N4 y
  749.         bSilentStep=TRUE;
    " a; x4 \8 s- K0 p" M( ~# Z
  750.         bCompressed=FALSE;; m9 w* E* {* p
  751.         strExtLocal.Empty();' x3 N% D: Z, l1 g) C6 ]
  752.         strFullName="checkversion.txt";
    8 ^6 l8 G' U! b' b; i) O: j4 G3 b/ O
  753.         dwProgramState=AP_CONNECT;
    ' [. G1 Z: B. B( [+ q7 ~
  754.       }3 h3 \. Q& C6 f1 ~: a4 I2 K
  755.       dwStartUpSteps=4;* F, w* H/ n) V# M0 l$ \
  756.       break;
    5 Y( H* U; m! M0 F
  757.     case 4:
    $ s& b4 y1 h, U, z6 L" |+ Z3 v
  758.       {
    * n5 h; @2 Y6 G- N/ }4 ~0 m
  759.         FILE *fp;! x. p) S0 I1 q# l
  760.         char szString1[128];9 L9 j3 J6 E$ @( R. w
  761.         char szString2[128];9 d. r- }  D# E8 J0 k2 J
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");  U" Y' p- `2 y/ F" \: i  ~# w2 O
  763.         if(fp); ?, U- \% `$ g2 J0 J8 g2 ?
  764.         {5 F3 `6 ~7 m* T  B1 J
  765.           fscanf(fp,"%s",szString1);
    " r8 C+ T* t3 D
  766.           fclose(fp);
    . h+ O8 _8 s$ w- }$ t
  767.           fCheckVersion=atof(szString1);
    2 ^+ \* l# m* U; r6 i! _! F5 L0 h
  768.           fp=fopen(".\\checkversion.dat","r");! i& r5 ?( Z1 P- _( Q2 |) M- V
  769.           if(fp)/ v$ Q5 R: p$ Z+ {5 ?3 K" k# X2 o
  770.           {
    7 o8 S. ?+ _1 V: F5 l
  771.             fscanf(fp,"%s",szString2);
    6 T6 E! c2 ]8 k9 [) F; @- H" h
  772.             fclose(fp);' s+ ~1 }9 C7 M. a* ~
  773.             if(atof(szString1)!=atof(szString2))
    ; N: z4 A$ Q6 @- K
  774.             {3 x: ^+ }2 B/ X  l0 R' D% r$ j
  775.               if(!Dn.Connected())
    - h- |4 M- ~0 X: B* u3 b
  776.               {
    7 L. \$ {" y9 t/ e4 @- ~
  777.                 bFirstUpdate=TRUE;
    " P+ U( I" B; Y& ~9 U
  778.                 dwTotalFiles=1;
    * z7 k' n* z! ?: g- k
  779.                 dwDownLoaded=0;  ]" \/ t. u1 f% e% x
  780.                 bSilentStep=FALSE;
      I9 H0 a( _, {0 L5 @* ]
  781.                 bCompressed=TRUE;
    & w6 U! y) j" |6 D! }% p+ w2 O
  782.                 strExtLocal=".\\DownLoad\";3 `8 ], a! d% [" [) N' q
  783.                 strFullName="update.txt";) y% J4 k# o7 t0 S) R! k5 W
  784.                 dwProgramState=AP_CONNECT;' r$ p/ ~! Q& D
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # }) S* d0 ^/ [
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 @9 g9 P. A! y, Q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % R  Z2 f# L  l' ]. R

  788. ' j0 U5 \( E7 y; u# C
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; d$ H2 o5 j- s: \* m* H0 H& R4 `8 _3 @
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    . K! x! P" |) ]1 g
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)4 y. Q- M( B0 [/ e6 x% ]
  792.                 {5 {% n, D+ J$ J! y/ D, Y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! Y5 `' r9 G0 @. ~: ~
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");& c: `! W; k2 s3 }9 u7 h5 F
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");% z  Z# P( S: j
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' d: f  A1 t4 @  j+ H8 b- o

  797. $ h' L1 d1 T" m- V5 i4 H* B; U6 A
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% ^& C8 `$ M* V2 r  D: a! U
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    8 r3 g+ o3 R" ]3 ~. A
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");$ ]% x+ V2 Z- |, p
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! ^! O+ s5 I; \9 z0 \8 y
  802.                 }
    9 g9 w1 v# o+ u# l% ^( w+ C: x
  803.                 dwStartUpSteps=5;* n  f% a8 S- w9 q( C2 k* _
  804.               }
    / u: _. z; c# U" S* \4 @
  805.             }+ ?) m  T+ ]8 l$ S1 W! {; B2 y& ~% \
  806.             else
    , [0 A+ z! T* s7 S2 D
  807.             {8 ?7 C4 s- u% V+ ]& R- A, Z/ e
  808.               unlink(".\\DownLoad\\checkversion.txt");! K# [6 W+ a1 }0 Y) E/ B
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    * W3 Z+ `) h( L7 n) H( j& f# @
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 @5 N$ i9 P" K1 |# Z  U: y
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' ^2 ^; A& T# `" c# u

  812. ! P: Z  _' \. {* k0 a3 U
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 Y6 U  J: N& s: U# }. y
  814.               dwStartUpSteps=99;8 a3 i3 S4 |) b3 B
  815.               bFinishUpdated=TRUE;
    / X8 ?3 E# x' u: i- D$ c2 i& G! v
  816.               bCanUpdate=TRUE;
      W: d" x! {' f$ @& A2 r
  817.             }
    8 ?0 b% [, `; k
  818.           }/ C! K6 u% h! E' }$ j$ \( p4 n6 Q5 y- |
  819.           else
    5 V: ~2 P8 i) d. X, H
  820.           {; i# G6 x3 a+ T" w
  821.             if(!Dn.Connected())
    2 K. O$ g5 f5 M6 O0 f; u2 {
  822.             {
    $ s) C4 S; w3 |
  823.               bFirstUpdate=TRUE;
    7 w2 o( ~4 p9 u! `) X& |, ]
  824.               dwTotalFiles=1;! B+ h% D9 P! _) z
  825.               dwDownLoaded=0;9 R( z: }+ s5 o& ]& W
  826.               bSilentStep=FALSE;
    - d. M) I; v7 P$ p3 f1 ?
  827.               bCompressed=TRUE;
    $ ^5 {1 \* A, U7 b
  828.               strExtLocal=".\\DownLoad\";. w$ Y4 F$ W' [  Z3 [
  829.               strFullName="update.txt";
    9 L8 h( z5 m0 m8 S) I4 j- ]1 l% W
  830.               dwProgramState=AP_CONNECT;
    9 s- S( ?8 I& U, {5 C
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ r2 J7 D! q( y$ o: q) ?
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( g& M% [9 W* B2 w- e; c% r
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");, ]+ ]) H& J$ A+ S, r: y8 R, p
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 S3 t/ C4 k9 x1 n  _$ g
  835.               unlink(".\\DownLoad\\checkversion.txt");
    9 P& K0 _7 |0 E; m) d/ N% s
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    + h9 [- d: l6 ?* A' u
  837.               {
    # s* j( O2 W  p5 `8 @
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    - q+ m1 Z& L, ]9 G
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    + x  M  [9 U1 m2 b+ a9 v5 `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");. M0 p9 p6 m, I( Y
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; R5 U# A: y6 {4 t7 Y) M5 W; I
  842.                
    , C1 N. |/ j; ?: B7 {
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! m& i1 X  z: |& l
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . `8 K. B: t& e2 Y2 E* |- k
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    % ^: l4 G, ^: ^3 K; L8 w4 C
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / I; C# P+ a0 _. w$ z( I3 W
  847.               }
    $ U  U7 K' ^6 C8 q" D
  848.               dwStartUpSteps=5;
    9 [7 W$ \( D0 m3 j
  849.             }4 s; ], J. x2 S4 [, D" Q6 f
  850.           }2 k6 M4 ^" v3 |! D2 S
  851.         }
    ) ?& G6 f7 b' u, \) s7 y/ T! G. j
  852.         else7 c/ i- @5 {) J1 x
  853.         {
    - s+ y+ b$ p, P- `
  854.           dwStartUpSteps=3;
    9 }! u& D( k# X  d+ d# {5 f' B
  855.         }
    : O% D/ P  D" s! m+ O2 ]
  856.       }& x8 M  i& Y9 z, R4 e8 A$ t
  857.       break;
    % ~" U3 `+ {. Q; e1 j# d' C
  858.     case 5:
    ' W$ D3 H$ ^. a) r. T
  859.       {+ P6 b/ g- w( z5 ^0 k( ~. r$ P3 O
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    0 e, y* H, i. }: `% @* A4 M. e& H
  861.         {
    1 h& a1 ]1 o8 P4 O
  862.           int opt_overwrite=1;
    7 I) T; b/ M( V4 i  `2 l9 N
  863.           int opt_do_extract_withoutpath=0;" K" O! L2 y5 U
  864.           unzFile uf=NULL;
    & u% s/ w9 f/ M" T3 X3 A8 r
  865. * Y- y, u3 m3 ~$ \; N
  866.           uf=unzOpen("Wsa.zip");
    . h! Q/ j6 A4 @
  867.           if(uf)3 d# q+ k* d0 A# w$ c8 [
  868.           {0 E# R' ^! z# d% _- \! H; ?" j
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    " {' V8 N6 D, Y) J
  870.             unzClose(uf);& l! i6 k, g2 y
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    0 ]$ Z. u3 j+ p! ?* g' Z
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");- \: T; {8 |3 E. F4 j# L* l
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");$ |5 A4 _) }) S
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  R1 d* h4 R5 J
  875.           }$ J3 C9 g7 b7 O0 ^( A
  876.           DeleteFile("Wsa.zip" );5 U7 K% H( x1 ?4 Q# O& n
  877.         }
    ( D. I$ K! w( q- N6 U

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

: h* d0 _4 M6 U2 n3 E

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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