CSUpdate.exe源代码

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

" b! @' f) e/ J/ ~( f& r" }/ W5 b6 Y
  1. / RevApp.cpp : Defines the class behaviors for the application.- L& b8 J5 O5 ~( L9 {4 Y
  2. //8 F& b9 _! g3 |( K

  3. - {5 `) ^9 U8 F: S' n& @* E
  4. #include "stdafx.h"# T' r2 r6 S$ H& q5 ?
  5. * b1 x% b$ J  l3 k
  6. //#define UNICODE7 u7 ]& v1 H2 X3 X8 S3 r/ ]5 ]
  7. //#include <gdiplus.h>
    8 W; v3 m" b. M
  8. //using namespace Gdiplus;) h4 B  o9 B$ C
  9.   |4 G0 K" i; |& x7 {4 U+ D/ d: M
  10. #include "RevApp.h"- E3 l6 l& P3 s! r5 C3 \0 [
  11. #include "RevAppDlg.h"8 F% {" g0 O& k# j) n
  12. ; k  {% m. Z( }  F7 G( u
  13. #pragma warning(disable:4786)
    3 R( W: J+ Q# V% ]
  14. #include <map>
    9 P4 b* p; r  a9 U( W
  15. #include <list>* }0 k# b, b6 N' Y7 Z! o
  16. #include <direct.h>; m# h. G: R* V) |# z
  17. 9 s  J- F$ k  `) |2 e/ b3 ~
  18. #ifdef _DEBUG
    " a. V$ P: P/ G0 f0 X8 x
  19. #define new DEBUG_NEW  d- S( O9 c/ Q6 y9 F  a4 @. m
  20. #undef THIS_FILE& }8 o2 R& v6 q. P/ M' r& {- I
  21. static char THIS_FILE[] = __FILE__;7 a3 V4 w- d1 k7 A! N
  22. #endif: C" b) [8 X1 Z* G
  23. #include "SkinResDef.h"
    / U, K/ E  G2 c3 ^3 Z% E
  24. #include "ChangeBG.h"
    ; o" x4 W6 V/ d9 q' q8 N1 ?
  25. #include "AFXINET.H"  u& S& Q: P2 }9 V

  26. ) L7 ]! ?3 K# S# F7 V( _
  27. #define TRADITIONAL_CHINESE 0
    5 }* p/ n3 U" ?+ D1 [3 s
  28. #define SIMPLIFY_CHINESE 1, D, n& {1 [0 Y/ L# f
  29. #define ENGLISH 2( p0 o) R% v/ y8 j% ]1 D
  30. int m_iLanguage = ENGLISH;
    2 n) m. ^- s& F
  31. /////////////////////////////////////////////////////////////////////////////
    . H/ O& A  W* X6 W
  32. // CRevAppApp& r* l% r" H( i9 @: f* _

  33. ! y/ r4 B5 P$ G4 m4 _1 }
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    5 P! N; q; y  d/ |1 w' Y1 x
  35.         //{{AFX_MSG_MAP(CRevAppApp)0 H/ k% S. v$ r6 V- \! N* W! |$ x- |8 ^
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.+ N: x, R) f* y+ Q; S' V
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!2 U4 P4 X8 L" A/ A- @* w
  38.         //}}AFX_MSG0 _# B3 v0 r2 j6 `7 F6 b! h
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)2 D+ |; z: |5 p' _0 z
  40. END_MESSAGE_MAP()) p. @# A7 i) G& V- h
  41. + l& B- d6 A) i5 s  `
  42. /////////////////////////////////////////////////////////////////////////////
    ! Q: A: l3 M4 N: K
  43. // CRevAppApp construction% t  U& F3 T5 @1 B7 s" d! \
  44. 2 D; T/ ^8 b0 I* O
  45. CRevAppApp::CRevAppApp()
      ~. c1 d# {: l- o" [$ Y
  46. {
    - F7 n7 F6 ?, J
  47.         // TODO: add construction code here,
    . L4 O& F& g! s2 H% H( o4 R
  48.         // Place all significant initialization in InitInstance. i, m& m) u" t; d
  49.   bDisplayIsBig5=FALSE;
    0 i7 j1 _% l- w4 ~' K$ l
  50.   bRestartUpdater=FALSE;
    ' c+ e0 H) `% e; r
  51.   bFinishUpdated=FALSE;
    2 u' e# s4 z7 o' L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    , m# \+ G6 \' Z2 v. r
  53.   InitChangeDataBig52GBKS();3 W7 d. p, Q9 k' ]8 `, F
  54.   InitChangeDataGBKS2Big5();/ w3 b* b! M+ U$ ?0 V( J) u& m
  55.         //
    & ?! i  Z( ~! p$ W( [" v
  56.         bClickRunExe = FALSE;
    7 d: n) J8 S& l( P7 L, n
  57.         //
    . O% l1 {6 x. @% m
  58. }% ?6 ~1 }( j$ O; p

  59. , m: K  W' H7 |: i6 t. ]
  60. CRevAppApp::~CRevAppApp()0 N: e- x, m7 U3 X5 ^
  61. {& p$ L. v+ o3 l' t( ]- `; P* i4 o
  62.         // TODO: add construction code here,
    - P& P0 d  H7 V# }7 e# L. b2 \
  63.         // Place all significant initialization in InitInstance5 j# O% n9 z8 E0 [( Z
  64.   EndChangeData();, ?+ b' P9 ]0 a4 H+ r
  65. }
    : {/ Z( M/ i. k9 T" @% }/ s3 P) w

  66. . i& Y- c# S# v' z# u
  67. /////////////////////////////////////////////////////////////////////////////. V9 {+ }$ g; q% P
  68. // The one and only CRevAppApp object) t: Y' z# }! t9 a  G

  69. 0 ~! ?: T. Y; i0 B; x6 ?9 r/ |! r
  70. CRevAppApp theApp;
    $ a* Z. H9 N. M1 a

  71. - j6 U, P( w% V
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName), z2 Q4 l$ t1 w6 N
  73. {
    + @+ d7 ?7 _$ e" L. q, s
  74.   int iEOF=0;
    3 e/ }, H& B9 Y; T" g
  75.   char szTempName[MAX_PATH];) R. Y' M. |  K8 b5 U
  76.   *szFileName=0;
    3 @/ V& b2 l8 [) I- s
  77.   iEOF=fscanf(fp,"%s",szTempName);
    4 C0 v0 `* Y6 q; }8 j
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # e/ `1 M  P5 J. t
  79.   {# Y' Z+ @+ ~+ L* a( J+ D
  80.     strcpy(szFileName,&szTempName[1]);" e; N4 ~) B; F1 I! u( A) @
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): C  `; [+ f  G: v: ^) H/ v
  82.     {. \+ \5 @" `1 B( j! A. I
  83.       iEOF=fscanf(fp,"%s",szTempName);
      H2 ]" R' C7 D* k; f2 }" s
  84.       strcat(szFileName," ");) M. D/ F! y8 U! M3 p
  85.       strcat(szFileName,szTempName);
    8 R' R8 l$ P4 k& p8 ^' M/ W1 n
  86.     }" G" C- D5 f; w+ v; C
  87.     if(strlen(szFileName)>=1)
    & r2 z# N5 e% M/ {
  88.     {1 z- |3 B& E; v  V
  89.       szFileName[strlen(szFileName)-1]=0;7 U9 S* o' ^2 o8 C3 s
  90.     }. j" A7 z/ O5 R8 ?1 N( g; ?4 y
  91.   }
    & j( D1 _: e( Y4 P5 K
  92.   return szFileName;
    : y2 l- L$ B6 _  L' S( G
  93. }
    8 w1 Z) P0 f5 a5 F
  94. 8 p  L9 D. }0 m1 j. Y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)3 d" \+ R5 b' e8 P4 A& B0 [0 P+ Q1 x
  96. {' o2 a  _  B7 Y
  97.   FILE *fp;
    2 F7 r* K' O# l  e4 `2 J
  98.   char *key=NULL;. |: T. {" E5 t# ^  {8 Z% d3 b
  99.   char version[MAX_PATH];
    # R; p8 P; W3 |! E
  100.   LPUPDATEFILE file,olds;; Q. l' M6 D3 T- b' }' ~5 x# ^
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    " f4 n5 @! W2 @- p2 f

  102. 7 T  R$ n5 H5 Z2 P! o$ G2 q
  103.   UpdateList.clear();5 _0 k0 d5 z; e9 \
  104.   UpdateFile.clear();0 A. V# M" P7 U* c/ D% ]3 L5 }
  105.   if(GetFileAttributes(filename)==-1) return false;. J) i% c5 W7 Q9 Q* v
  106.   if(!(fp=fopen(filename,"r"))) return false;2 e9 t  N6 y% J2 L+ Q
  107.   fscanf(fp,"%s",version);+ o! ?6 m0 @, {( T1 v
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    + O% l: T& a% _( H/ C* B8 l* f; i/ ~
  109.   while(fscanf(fp,"%s",version)!=EOF)6 o' D/ T3 ?; x; u0 n  h
  110.   {* T" W# w9 V) h( {" e# L5 c
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / C% J8 `/ }6 ?/ W
  112.     fscanf(fp,"%s",file->path);
    $ [& H' E. u4 E, k" A
  113.     ReadFileNames(fp,file->file);# D* S  ~' y1 X- X5 z
  114.     strcpy(file->full,".");' d; X8 v7 ^% B$ Y! e+ Y
  115.     strcat(file->full,file->path);  ^# w: `# ?: @2 L( a7 ?
  116.     strcat(file->full,file->file);, J5 G5 S2 k( X5 R( e2 y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())* X" j" c9 t! S! S$ L! B
  118.     {, a6 M6 D$ E. r  z% E# i, y
  119.       file->vers=(float)atof(version);
    5 R1 K8 g0 N" W
  120.       UpdateList.push_back(file->full);
    + ~0 ~8 V" L% D* O$ K
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    0 i: l# ^2 y3 m
  122.     }
    5 k0 T& t/ C' Z; X
  123.     else* ]4 Q4 k* t* z( ^
  124.     {4 y5 @$ Z$ {5 }- q
  125.       olds=(*p).second;
    ( r1 v4 _7 t  ]# \; N$ N
  126.       if(olds->vers<(float)atof(version))
    ! J9 i$ n* `5 w+ p! x
  127.       {
    6 {/ r' u$ t) p6 n8 a0 w
  128.         olds->vers=(float)atof(version);5 A2 k1 {. U% \+ J) W  |
  129.       }
      f- k* g2 ]* l! P
  130.       free(file);2 B9 h+ R2 C# I1 \
  131.     }
    ! W$ G) {' h$ G% p
  132.   }+ N* V, Y9 N3 I  }& e1 `4 _! y$ E& x* W
  133.   fclose(fp);
    ( Y8 D5 F9 Z% a% Y
  134.   return true;
    : _. I  B+ p' y; h4 _8 A& }9 g
  135. }
    / p. R9 w. H7 Y5 P
  136. 9 d; J2 Q  H2 P! H& B
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)2 w, m) d7 D- ]# t
  138. {& [8 r/ b. U" k% r
  139.   TCHAR  szFull[MAX_PATH];* q- F, Z  i  j) |+ b6 m0 C
  140.   TCHAR *token,*inter;5 k- `5 s3 D6 c0 I* }5 @
  141.   *szPath=0;% c0 @" D! l+ n" O. l
  142.   strcpy(szFull,szFullPath);
    * b0 b2 H7 p. A0 V: I* ?, q
  143.   token=strtok(szFull,"\\/");/ z$ e) u% }* k4 M# g5 n7 e, \) x
  144.   inter=token;6 `. R! @: G! X1 h
  145.   while(token=strtok(NULL,"\\/"))
    ; W% d( S- s" M2 z
  146.   {
    ' Q4 L4 v  u  `, v, c7 _% r# c$ p
  147.     strcat(szPath,inter);
    ( \5 E7 {, P. X! S: _& O, H1 F
  148.     strcat(szPath,"\");2 }0 v0 M: v. y* y  N; B
  149.     inter=token;1 d2 L" Y! R. X$ k0 S0 W
  150.   }
    1 [: N3 p2 F$ z3 v/ B, t3 b  k
  151.   return strlen(szPath);
    9 P" V4 E2 m' d4 v
  152. }
    8 Z$ m) I; R) [4 Q8 ]7 j

  153. 2 F" a8 C  z$ s% k4 u+ T3 {6 b
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)* X9 o" z% k! R5 U3 w' V0 C+ T6 Z
  155. {- N1 H* N% U. M' f2 O1 }3 `- R
  156.   DWORD attrib=GetFileAttributes(Target);
    ) }6 s  R+ Z4 }1 o, Z9 _% k
  157.   if(attrib!=-1)9 o: D: q! v, a. V
  158.   {  Z5 o3 C" s: t. n  I3 O9 d
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))7 \. _! w! V% f1 z
  160.     {
    6 \" ^# u3 z+ L/ ~1 F: a# y5 L$ _
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);0 S% j! e/ c/ `* f) i1 [, O' }2 _
  162.       SetFileAttributes(Target,attrib);7 I+ r; p  M" {5 E/ t( e) p
  163.     }
    & l" f" |3 v: V6 Z6 A
  164.   }+ [/ l' w& S# S: o
  165.   CopyFile(Source,Target,Erase);- @& _3 P! K8 k8 x' W) z- f& W
  166. }
    3 U9 ~+ ^3 s8 z* v. \( a/ {
  167. ' f! N! J' ]: C2 ^* O. f
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)% g+ _/ Z  Z$ a# e, U' z# Q
  169. {
    # i$ h2 @3 a8 B' T
  170.      FILE *fp;9 g, C* U; H2 g/ E  [% o
  171.      char  szBuffer[8192];
    4 H# G" C$ @/ S5 P1 l$ B
  172.   va_list  argptr;  _& M5 ]1 \" y6 F+ ]" y0 v

  173. , |" P" N# l; F
  174.         va_start(argptr,message);/ J: O' _8 [" Y' x/ |
  175.         vsprintf(szBuffer,message,argptr);* o) f" S0 D. M7 O2 G( X$ h
  176.         va_end(argptr);
    1 A. v% A* P' {& p4 T
  177.   fp=fopen(FileName,"a");& L8 M( G+ G% {; k/ }% M
  178.   if(fp)4 u' X& f6 {9 I3 i
  179.   {1 r% Z* R" j+ I+ i$ i
  180.     fprintf(fp,szBuffer);* U6 j& a) y) l1 [
  181.     fclose(fp);) \" I1 D% I- T+ ~3 t! m; a( T2 R
  182.           _flushall();( O/ v+ ^5 S: T2 v/ p( b
  183.   }, i1 c0 [  Q2 _2 i
  184. }
    5 b/ }9 `- [  G

  185. ! D" L# G1 Q" m0 l
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    4 \+ z; b1 e+ C
  187. {/ y1 L/ E0 H8 r' }, p. P0 @
  188.      FILE *fp;4 L- l8 a, H" @
  189.     DWORD  attrib;
    $ L, V' h( @* W, Q% d9 a4 g- P
  190.   attrib=GetFileAttributes(FileName);
    7 Y& s# m3 y" S* W0 [1 P& v
  191.   if(attrib!=-1)
    ; A! A5 N9 F; s1 _& L* a
  192.   {
    0 A6 F" T( L$ ~2 p
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);) t) Q1 R9 W( f: k
  194.     if(!SetFileAttributes(FileName,attrib))8 d/ z& \9 M; F( p
  195.     {+ \" P* s" K' n, b4 z/ l& |9 X
  196.       return FALSE;
    / U' X, |! V5 B' X
  197.     }
    * h2 N7 ~6 ]7 P8 [
  198.   }
    " [# ?: W, ]3 B) ?3 S  z
  199.   fp=fopen(FileName,"wb");
    7 @% u7 i! X* A, g4 M3 r
  200.   if(fp)- b. R+ |0 h2 }: F
  201.   {" s% J) Z! {1 \4 X5 H
  202.     fclose(fp);3 U, I5 f7 r; ^. U  F5 H" o
  203.   }. j4 f' ]5 m2 @6 D5 w
  204.   return TRUE;
    1 q- d# T  s2 X. I: B
  205. }+ @8 e( W$ E' R2 O
  206. 7 C" a& Y2 k/ x* P, B. k6 Q  o
  207. BOOL CRevAppApp::UpdateLocalVersion(void)( q3 [1 k3 k0 s1 |3 O% k" e
  208. {
    & N, {! T2 K  @9 u; ^( Z7 Z/ U. [- B
  209.   char filename[MAX_PATH];
    $ y2 U8 j& k) s$ y% F
  210.   LPUPDATEFILE file,olds;
    . L: g# R# Q* }; h" Z/ ?
  211.   std::map<int,CString>::iterator i;
    & C& f! r  l* g% }7 a
  212.   std::map<CString,LPUPDATEFILE>::iterator p;, @! T9 P$ @0 A0 M/ n, X- k( N
  213.   std::list<CString>::iterator l;& |& t5 w1 X: q! B) j

  214. : S9 s( x2 {6 N) T
  215.   if(bFirstUpdate)$ d% y& _# z) I6 q# W' B" b
  216.   {& Q. d/ C( J! f" d
  217.     dwCurrFile=0;
    9 w6 z) P: z  I4 n
  218.     bFirstUpdate=FALSE;
    3 s- L: f/ m( y" I( Q- Y
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 v% v4 z& t% n5 {5 @- V6 {
  220.     {
    5 }$ r  @6 x! n* w
  221.       dwTotalFiles=UpdateLocal.size();3 O- g0 i- D6 {
  222.       dwDownLoaded=0;, P( z& Z& T2 x+ o% z, R
  223.       bSilentStep=FALSE;7 r- g1 a, r; Z
  224.       bCompressed=TRUE;
    * \' E$ ]8 r7 t0 |- p* d3 t
  225.       strExtLocal.Empty();* t5 _" c* w, |/ ?; r9 ?0 K
  226.       strFullName=(*i).second;
    8 a/ {! H7 @% [2 }- M* b
  227.       dwProgramState=AP_CONNECT;
    0 e+ \! Q8 D6 c
  228.       return TRUE;
    . x, x, P% M3 b
  229.     }- w0 H- s) R3 O0 L( x. T, \
  230.   }
    # Z/ b2 N2 \7 a1 W* |; J6 I
  231.   else if(bRestartUpdater==FALSE)
    4 {- z8 M2 t$ u0 _7 |7 R3 u
  232.   {2 N& u! z. c- |+ z# l" b9 j# l" y9 N
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())6 ?2 t! I, e  F% S% n3 ]% r
  234.     {
    9 \0 F( I: X/ O  {( A1 a; R+ j2 x
  235.       file=(*p).second;
    * d; V& {) l1 x/ i) E  G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())3 ?( H/ V( M, q) q6 ]$ n
  237.       {# ^& Z6 h) W7 ~
  238.         olds=(*p).second;
    / h( l" Z4 p+ H# w! I3 |* u
  239.         olds->vers=file->vers;; Q) v6 V; T$ D
  240.       }
    3 O) r' k9 O5 O
  241.       else. i9 O) u" R- h. g4 k
  242.       {
    ( h1 U8 B* o8 ~* o' G. z7 F
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / i1 c% g0 e. ?. |3 B( j0 x
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ! I" K; w& X1 ]+ X  s
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));2 a8 F( ^% T. C9 g" P
  246.       }. z- t' \, I9 c: i2 D! |" \0 W
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    $ h6 s- {. u9 u  A9 _$ n
  248.       sprintf(filename,"(%s)",file->file);( D$ b& l6 a% w6 H
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  y' f6 K4 e, G
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }5 {" m8 l3 \9 u& {
  251.     }2 z) v) C6 |8 C
  252.     dwCurrFile++;
    * q4 \1 z% }+ q3 f
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); x! W: j& Z1 W8 }6 W7 u& D/ x
  254.     {
    2 H9 Q/ R9 x  `% B; Y% p$ U, Z2 C
  255.       bSilentStep=FALSE;
    & ?; N& \; E6 W2 E# q
  256.       bCompressed=TRUE;0 I, I" E( s' E! J
  257.       strExtLocal.Empty();
    ) P: R0 W" X: X( H) ]* m
  258.       strFullName=(*i).second;$ G0 L7 I- l$ y+ z
  259.       dwProgramState=AP_CONNECT;
    3 o5 U% \! U, Q. r1 T6 T; i
  260.       return TRUE;
    ; |: i* U3 Y) U3 Y; o- O! U
  261.     }0 m, }, \$ _; V. I: @  B
  262.     if(!bRestartUpdater)
    5 l; y  o( L9 Y  n1 L2 Q) G+ {- U
  263.     {6 W* e$ S9 g( O9 B/ V% s
  264.       int iCurrSize,iFileSize;' q% ]: ^$ r( f$ A( i1 u" v
  265.       iCurrSize=0;+ P/ _& P' x9 n! Y* m8 k% h
  266.       iFileSize=UpdateList2.size();; B) U& t! K5 @
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");4 y. z* d; q: i& F2 M- c6 t
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");: u2 T2 |  s+ T: c
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ' _5 w) Q. @9 d) ~4 P* }) p  D4 a
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ m2 ^4 S8 j( o5 ^- i1 \
  271.       Fclearf(".\\update.dat");5 Q8 [4 ^( r7 @' ~# \2 Z% J
  272.       Fprintf(".\\update.dat","Bloodyf\n");; N+ d# S) A- s9 h. B, g
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , w2 k# A: k! w
  274.       {
    4 x1 Z7 Z1 G6 B- _& T  N0 \3 o
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())  p3 o6 ]. ~! H; U& j
  276.         {3 j: i, f* |, y+ [& t
  277.           file=(*p).second;8 B. \( H: y) A& [' f
  278.           sprintf(filename,"(%s)",file->file);
    4 M! l0 v, T/ I( i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 n- i3 s) w  z( c8 C# `. h6 }
  280.           iCurrSize++;
    6 ]: h, m+ l4 ^& f3 c
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));& C& C- x6 i3 L* r4 a, p1 o
  282.         }
    ) i9 f5 o9 S1 M. _8 j8 l
  283.       }
    . ]. _1 n6 O" I4 V- O
  284.       unlink(".\\update.txt");3 Z3 \$ p2 F2 d! w) ~
  285.       unlink(".\\update.tmp");9 u. A9 d: Q+ V( J& H; a# _* }
  286.       Fclearf(".\\checkversion.dat");: \1 P0 A. P( v( X9 b
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' k' {. J% a; E. J# W7 _
  288.       if(UpdateLocal.size())5 |" k9 ~# L3 @3 \& r4 Y. H
  289.       {
    ) K. a) K# U0 z8 {/ i+ o
  290.         UpdateLocal.clear();) t$ B+ O8 a, N( x- X
  291.       }
    4 I- B7 a8 O6 G! @( M/ C" N
  292.       if(UpdateFile3.size())# w2 {3 B  H: h4 K( ~
  293.       {
    , I$ h3 x2 k, W
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). H& O* r7 H$ m; b5 U
  295.         {
    + n1 h: }( [! ^' G4 m% A9 X
  296.           file=(*p).second;
    6 p# U( h/ Q1 ?0 ?% F
  297.           free(file);
    1 u% }* C7 [; E1 B
  298.         }
    $ B7 k- O4 T# B
  299.         UpdateFile3.clear();" \1 X  I7 u9 `  Y/ t
  300.         UpdateList3.clear();
    , b! \( B2 J( r9 S
  301.       }
    5 @. s4 s. v* M1 e$ J
  302.       if(UpdateFile2.size())) ?, N+ N8 L4 q% q0 T
  303.       {
    ) J, r+ }7 _5 F7 w) t
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , _# d& I1 K, {/ w
  305.         {
    $ \1 A* }' Q( e9 g, D
  306.           file=(*p).second;) Z4 l# [0 B! r; f1 l
  307.           free(file);1 N+ k, z* B5 j, r
  308.         }
    : J  q( _. ?+ w- z; u
  309.         UpdateFile2.clear();
    & c9 n4 E* U! q$ [6 X6 Y
  310.         UpdateList2.clear();
    & A# z! a- K# K; d# D6 m8 q+ I
  311.       }
    : p  T0 M. s$ `4 M, z9 t
  312.       if(UpdateFile1.size())% @; Q$ W& a8 F' b8 w3 J, V8 ?( e8 C
  313.       {1 t5 z, o# |( e+ s- h- D4 b
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    1 }# O& Z, e/ o' m
  315.         {
    6 U2 M/ y- x3 N
  316.           file=(*p).second;
    2 S; o8 Y4 _. P' _6 ^( q; Q6 L
  317.           free(file);( s8 {7 N1 ?* {$ u& `, X# v) V
  318.         }# S; C% Q- `0 \6 e0 v
  319.         UpdateFile1.clear();9 B1 U! C1 r0 C' \' }' D. [- d6 o
  320.         UpdateList1.clear();" P( B/ W3 ]2 G1 Y) |4 W' h
  321.       }
    ; G5 }! K% C! Y2 }6 y  H, i
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));, F' z! w. s5 C9 v/ }7 _! E
  323.     }
    1 {" S) n! U+ ?) A* M  f, T
  324.   }
    ) C4 D# W# r+ \5 g% J' K( ^+ A
  325.   return FALSE;
    , T5 r' ?0 _7 `
  326. }
    ; i/ F4 B6 O) j5 {& \
  327. " J* `0 \. W: i3 d/ N4 H% |
  328. void CRevAppApp::ClearAll(void)
    5 X0 ]/ \$ y8 |3 i, {5 |
  329. {
    0 K$ ~2 b: |  Y; v
  330.   LPUPDATEFILE file;/ K5 U- i# U, ~/ d% q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    , `' `7 Z6 E# P( B6 g$ J
  332. 9 z6 {# V' g0 @. r: m& J
  333.   if(UpdateLocal.size())
    + ?; \- w$ v( N8 U7 q% p# C- X! {% ~
  334.   {2 G# u$ |5 I" {  r6 F6 F5 h( c1 f
  335.     UpdateLocal.clear();  ~7 |& j! o9 j$ L, S, ]
  336.   }5 g& z/ O; U9 [" g% r1 {
  337.   if(UpdateFile3.size())
    " N+ T( {! A2 }/ w2 w" G4 [' U) ^
  338.   {
    3 U; A% E% L: q( Q& o) I
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 F/ V: D3 x. N! B3 h! x' o
  340.     {
    - |- [+ Q2 Y3 c% q" J
  341.       file=(*p).second;6 e, g, Q8 y& b- A
  342.       free(file);
    9 z# d3 l# X/ }, G& E. f* v
  343.     }2 z: Y9 f1 K! w6 C. h7 ^
  344.     UpdateFile3.clear();+ Y2 P+ O+ `0 a$ E
  345.     UpdateList3.clear();! h: Q. b4 d$ Y+ F
  346.   }
    % u" a# V+ N" k
  347.   if(UpdateFile2.size())% Q/ v- W9 p6 _. g3 @, \) F/ n
  348.   {/ O; W  A% J9 \; L
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)0 T0 q) m7 C; r9 y4 l9 w# [
  350.     {3 ], O" }; P# z! s% w' Z
  351.       file=(*p).second;2 d% v- w  `1 ~5 X' ?9 O
  352.       free(file);' N+ f& u. E6 u& W
  353.     }
    / t- M" D1 u3 v1 v. [! Y& J1 \' m# k
  354.     UpdateFile2.clear();
    2 K: B& x; w/ D
  355.     UpdateList2.clear();
    / Z/ ?- e2 g6 Y. G  ~7 c
  356.   }+ \) W* F7 G5 C, Q7 R* {' z
  357.   if(UpdateFile1.size())
    , l4 K! v. d- ~, o1 D
  358.   {, p/ @$ W0 a4 V  q
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' W. x( v4 {7 H- R( g  ]8 G
  360.     {0 @6 i. o9 Z+ J+ _; L# B
  361.       file=(*p).second;
    9 f' r/ I, _! C& s
  362.       free(file);4 h! A# Q" L, I# n: r
  363.     }
    " {% k' \6 Y/ P: {6 N
  364.     UpdateFile1.clear();6 H9 ^0 p" \& y
  365.     UpdateList1.clear();
    4 g9 l1 l$ y  `4 D7 O2 c: Y9 p% F
  366.   }- u. G8 e1 b3 S1 u- |1 l  T9 P. H6 G( J
  367. }    R" l8 O6 w) m4 a: l# N; {) \
  368.   
    9 l/ `5 Q1 G; d$ \2 p( }5 \
  369. BOOL CRevAppApp::CheckLocalVersion(void)8 U' K2 X% Z2 a. e8 ]
  370. {
    ' w, x* t( o, g, J
  371.   int c;
    6 w* J4 o/ ]' V3 `9 p
  372.   LPUPDATEFILE file1,file2;5 J; {8 g- F$ g$ a3 w
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    9 P( {5 |! ^1 n: V% [7 r
  374.   std::list<CString>::iterator l;
    2 e- `- ]7 T) `+ _  Y/ ?
  375. 6 I$ s' C/ d5 H5 Z, x; Y
  376.   UpdateLocal.clear();* Y- j) e) V* z2 ]  {( z! o5 ~
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    " G6 x/ z3 Y( d& n
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    3 |  f" F: I( M7 r" p5 F
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);  a+ [5 b- N# e. G) ^7 F# Z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);- O' x, f4 ~- a% Q$ o
  381.   if(UpdateFile3.size())' W, x# G% s% h' a3 f. r  y
  382.   {  p/ F  T$ [7 o: _/ y$ Y: v
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)) B. l+ K7 c, P" d
  384.     {- L; C$ V; [! Q7 O4 A. ?0 \: W
  385.       file2=(LPUPDATEFILE)(*i).second;
    % y$ a- R! y: W% g5 {8 z: a
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! _9 [- w4 }6 E& p/ P: I! p$ }
  387.       {. Q% J0 E2 s  }$ f. b2 U7 z2 E3 S" Y
  388.         file1=(LPUPDATEFILE)(*p).second;$ J; `% I# o+ g9 s1 W. C, g
  389.         file1->vers=file2->vers;( y/ y3 u' l4 R9 x2 ^. Z4 t
  390.       }
    ; ?/ f4 S% k& \( G3 r7 q
  391.       else6 M) l$ u# T6 \  `
  392.       {
    1 V/ E- Z4 A7 P4 A
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; ]0 O4 w# e8 |  w2 [8 K
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));; @; v+ \" R$ M6 \$ Q% ^3 w
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    1 w8 n# a; f, d( v( v! T% U
  396.       }) G; [8 i: t, I, @5 g  N
  397.     }7 g0 D$ `* v6 F7 G
  398.   }* u5 u( K0 p$ O: ~/ u8 p
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 }$ T' z% d5 p8 ^; J  k
  400.   {' J' x. A3 k5 h1 h
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())4 j1 R* m% Q+ O% g  G! m, O9 W
  402.     {
    3 K8 x. i) C3 z' F4 f/ A
  403.       file2=(LPUPDATEFILE)(*i).second;
    * G" r' `& u! Z! ^2 h, u2 W
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 W9 H9 |! z3 b2 a/ B+ s# Q
  405.       {# H. f8 ?# U( h* |9 k3 P& J
  406.         file1=(LPUPDATEFILE)(*p).second;4 y* ]6 j. B# `/ H, _
  407.         if(file1->vers!=file2->vers)
    ) n* Q4 n2 K" r% n; p& `
  408.         {# z$ _- q/ q: O' u$ h0 Y0 O
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / c# |( K# @: u9 U
  410.           c++;* S/ D& t  v2 c* I) i; v5 ]# b) Q
  411.         }
    $ }7 `* v2 d- G, b) t
  412.       }6 F$ w% x) Q; m: k3 ?# }& t
  413.       else, y2 U8 ^2 ?1 _! n' W7 _
  414.       {
    8 W) ]9 }$ I- X
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 W1 d$ I% ~9 L$ I
  416.         c++;9 c1 @! R4 N" F& d& e+ z) E
  417.       }8 G3 k0 r) w) T8 b/ A
  418.     }: B) f2 g% M6 J$ z& U. j. ^2 Z; z/ [
  419.   }. ^* O+ e0 u: k* f& K4 U
  420.   unlink(".\\DownLoad\\update.txt");
    ; m) h3 ]5 ?& I& b7 F2 F. m
  421.   if(UpdateLocal.size()) return TRUE;+ ^. S) X. @  s* L3 U, `
  422.   else                   return FALSE;6 x+ V# ?* h0 r  _7 F
  423. }
    ) h  k1 v! [$ B; N' z  K+ E
  424. 5 m3 C( M3 C" _& S. o; Y! O0 r
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/") s8 z3 [) ^7 l. P: [( n3 t
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"% @. h3 K0 _5 E+ _

  427. ' O7 V9 D! t" ^2 O

  428. % C  R' G6 K) }; c9 u9 U+ q, o

  429. - A: v$ P4 Z% l+ L- y& `' D* g1 p
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    * K4 L1 f* d  j) Z0 T
  431. {
    7 c' N" ?; v% T- n
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 {7 a, X0 P( |  }
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : X; v: C3 }! h  S5 x. h
  434.   {9 n* o! e% U) B6 Y. l6 d) V
  435.     char szLanguage[50];
    " c; O# @+ ~2 _  n; ^/ k
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 z& N: Y; y7 [9 q  P  @
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* I9 v) L& l! t+ m& Q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# _4 q. a5 U) `& E
  439.     else                                   m_iLanguage=ENGLISH;
    ) G6 Z  C) t! v9 ~/ b' y
  440.     char szRegister[100];
    ! V  U, r8 t$ M  f% h
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 [! l% P9 W) {6 R- O
  442.     strRegsName=szRegister;5 d* O. Q. E' D6 W' J
  443.     char szPatchURL[100];
    8 U# u( ]* Y( A
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      w# s# c# U6 I. H- l: P: r
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: O) l# w2 ^2 M% ~# {( d. g& T& Y; W
  446.   }& h, |7 U4 ^* X- t
  447.   else
    2 c& n: i7 y. G9 k) c6 |# m
  448.   {3 ]# j0 B- b) a) j; @% W2 e4 R
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 ~; u4 J2 A1 h7 |" t  y
  450.     strRegsName=DEFAULT_REG_URL;
    2 @$ _! r. i& I9 }( r
  451.   }
    $ ^: n8 f8 i' h+ S! \
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    " Z+ y) T* g5 O8 X0 x# @
  453.   {% t2 b5 m! W" ^5 x9 `7 a
  454.     char szIP[50];6 m; I3 ?2 r- l% Y
  455.     char szDIR[300];
    & [/ ^6 U9 `" G9 T$ y0 T
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    , Q$ W- ?4 P! ?& i
  457.     {
    , o# j% W2 b. @7 n9 f9 o& j
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ' W+ r- E+ L: |7 u6 o% c
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");* _; ]. ~/ n. T4 M7 y0 i
  460.       strHostName=szIP;
    , B5 W# J3 o& m  x+ i  w$ R' N) h
  461.       strHostPath.Format("/%s",szDIR);+ s/ D- I. e  m1 P: k# y  {
  462.     }
    7 U- X: Q- u# x' w: L; G+ k3 P
  463.     else! G8 y# z$ ?+ n. v
  464.     {- r5 i" g; @0 U6 {0 R; I4 U
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% H4 i1 W( j, ]  y) `( i2 M" a
  466.       {
    8 y) a. J# d5 Q" A
  467.         char szLanguage[50];+ U9 e' f" Y8 I: _
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 C) q& w6 ^4 y0 G+ Y- d  ?
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    - O, j( R" t+ [0 B
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 z' Z" C: N& ~7 g3 d) n
  471.         else                                   m_iLanguage=ENGLISH;; q! c# `- n4 f, b
  472.         char szRegister[100];
    3 [0 E% H/ f+ j1 |1 b2 a
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 L% Z1 s1 l9 n) m8 C5 i& m  I
  474.         strRegsName=szRegister;
    2 V  I. e/ t( Z  u  D5 G
  475.         char szPatchURL[100];
    % Q/ V1 M% t; E( e5 w2 o
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* n' c5 y+ s) c
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : i6 n8 J! D, t: ~7 p' S
  478.       }& Y6 y/ h) f/ I1 x, w
  479.       else( c6 p+ B% {, M% D& P! R
  480.       {) k# y  m9 ^3 O" \3 h
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 O* H3 Y& X+ i, b  I: i" m
  482.         strRegsName=DEFAULT_REG_URL;4 n, P/ g/ S5 {; M0 c! @' J% d
  483.       }
    : k* @, k/ m" @" f9 C
  484.     }
    " q1 c' N% j4 g! B# B6 s
  485.   }3 n/ X/ y" h4 w0 E
  486.   return true;
    : D- w& r, m9 v) l# R
  487. }, P! S. _$ A% F

  488. " l( ]. h& u" |5 j
  489. #include ".\ZLib\unzip.h"
    6 b6 d, b7 s0 ~/ @5 ?
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    / i; g7 E6 K3 U" J( \9 T; |0 N
  491. /////////////////////////////////////////////////////////////////////////////; n% B4 V2 \1 m  g* e
  492. // CRevAppApp initialization$ H5 n' [# [& N. H  o4 [. o

  493. 9 R8 k! A! _% T. e& P
  494. BOOL CRevAppApp::InitInstance()
    5 _. r0 z$ h9 m8 S9 E
  495. {
    , @+ d1 k9 T5 a  {% \4 L
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];0 X; H! I: U8 z0 e( R# h8 D% i
  497. 3 ^0 r, [8 I" l" s. K9 F
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    9 P4 }5 n2 N& @
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    9 p3 v& r0 x) {% _: _; G8 R
  500.   {
    , p, l0 T! x9 |/ h5 S; l+ K
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");3 e: }0 t7 w9 R
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 V# }$ U2 M: l: ]9 F
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))  ^; D+ f: Z3 M
  504.     {; d/ Z, [9 ?6 |! \- K" l. R4 B
  505.       strcpy(szPath,szPathTarget);
    2 M& r* z1 f, r. \8 b
  506.       SetCurrentDirectory(szPath);/ @% D$ }1 [5 E" \# P' q& l8 H% n
  507.     }
    ' K; }6 F9 y" \3 a- m2 y/ V
  508.   }' c" F2 G( m/ r" Q
  509. #ifdef _DEBUG7 L+ c. K  k3 p. X* P8 \
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 E" }; T+ c9 _4 D$ a
  511. #else; W" K) G( ]9 F# ^( @
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % Q' S2 C4 Y. _9 I9 `6 k
  513. #endif
    8 V! p/ d  W# J; }; t3 m- p
  514.   {
    / M/ `6 s! ]+ z) r
  515.     char tempFileName[MAX_PATH];
    $ t- @% m2 l  a( A  Z' v7 z$ t2 y4 H
  516.     strcpy(tempFileName,szPathSource);, N0 q; M6 j# Z6 A# S6 t, H1 C3 O
  517.     tempFileName[strlen(szPathSource)-12]=0;
    : l0 }& \/ n! Z% Y/ a8 s# }3 d3 T
  518.     strcat(tempFileName,"\\$CSUpdate.exe");5 [8 c$ [6 q- p2 Y: Y
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    / o5 o; m" e1 p
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    * l! d. z1 R- r6 j6 l8 S9 q
  521.     return TRUE;
    ! s& f9 W; ]6 F7 ^
  522.   }
    7 O, Q: D: W1 p* v5 [* O8 G& a
  523.   // Nuke 0118: Delete run.exe
    3 ?- Y  t2 Q8 b
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    3 h; S2 R( P" f* n2 i
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    - p2 c% I3 _6 k) r9 D! y
  526.   if(!ReadCfgFile("Config.ini"))
    + y) x; U: {6 a0 v
  527.   {$ ^5 _3 w8 w6 H0 g0 o
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);7 Z; [, [- T& x1 T
  529.     return TRUE;) d- p! z  I1 P
  530.   }
    " p( B1 s# Y; l, `
  531.   HANDLE mutex;
    1 ~$ i+ _8 W6 c4 L7 Q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")): T! D! e! J+ v( Q/ |
  533.   {
    . N) T/ h, Y! W
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    3 ]( I3 f# k0 O( |! x
  535.     {
    ! }" m2 H* [) f; r8 z5 ]
  536.       CloseHandle(mutex);% O4 j5 j- x+ _
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 s* D% {% i$ o
  538.       return TRUE;. z6 _& U. B& E# O. c: B2 t
  539.     }
      i" h! k  K# E5 \5 Y
  540.   }  
    . Z: n: K! h- I& b4 u: S
  541.   CloseHandle(mutex);
    7 [4 e1 p1 n6 b
  542. # Q* u, F; J- o  o
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);- v& j  @7 R; |) _( h, r! U5 z6 t8 J

  544. - c9 J& v4 B/ Q0 A1 o8 V) y
  545.         AfxEnableControlContainer();' J# w3 A* ^& p/ H9 s' G( {. l
  546. * _0 F, ~3 `: Q0 f2 M
  547.   bCanUpdate=FALSE;0 i, n$ p. ?& O' l+ g
  548.   dwStartUpSteps=1;5 H" B: Z0 K! t0 N: |
  549.   dwProgramState=AP_NOTHING;
    ; ~  |8 V) X) u7 r
  550. 9 r- ^- _# o) H
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);2 [' `  K& O. w& b+ G( ~
  552. % m$ ^( [+ _5 l0 n
  553.         // Standard initialization8 w# B4 t$ A3 m& ^3 W
  554.         // If you are not using these features and wish to reduce the size
    * B3 v& u6 c2 ]% b
  555.         //  of your final executable, you should remove from the following
    " b0 h6 T; V, l6 M% ~
  556.         //  the specific initialization routines you do not need.- Z5 t1 G' K. l& `# u
  557. + p5 j( i1 C* n; a' R& K
  558. #ifdef _AFXDLL
      Z1 j% S& {! r  j8 Y) F
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ! w, S. o) N: t- D& V! K* `
  560. #else
    6 d" C- c# K! S6 }5 j+ W
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    6 l- B6 o" k0 B9 C- l
  562. #endif; f+ X! t* U, H6 v+ E+ H
  563. 8 u. D4 p/ P; n' w5 ^( _
  564.   dlg=new CRevAppDlg;# t+ }" L" C7 v. q
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    + b: T& t  m2 |4 N+ [* o+ D8 N
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    - d+ l- X7 Q" ^& N$ ~/ A8 H
  567.   m_pMainWnd=dlg;
    $ h8 X' Z' _+ \' R
  568. + A0 ?  J9 D$ z* T
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ! A1 O# B8 u+ y4 b1 N. Q

  570. 9 t, y0 O9 x2 F& Z& p7 G4 v% a3 T# a
  571. //  GdiplusStartupInput gdiplusStartupInput;
    7 r/ g( n1 S; D0 W1 l# u/ m+ C0 {
  572. //  ULONG_PTR gdiplusToken;
    & m+ E  w/ o% w- K8 k7 \6 D
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    - O  v- o( B  F. r

  574. & U" f0 `& c* ~% H/ w- g) d6 y5 f
  575. //        CRevAppDlg dlg;
    6 Z1 [2 J- N( z& F( D0 L- u1 n
  576. //        int nResponse = dlg.DoModal();
    ) m- r2 |& X) i- P# t
  577. //        if (nResponse == IDOK)
    5 E7 ?% w# m" E: I: l# ~" e
  578. //        {
    # h. j2 t9 }# b( U( Q! y5 q( ]
  579. //                // TODO: Place code here to handle when the dialog is* Q$ j5 C7 \( W. \% ~
  580. //                //  dismissed with OK! ]4 F+ o5 _) a6 y" u8 Z+ {
  581. //        }
    1 p4 u1 W* G, m
  582. //        else if (nResponse == IDCANCEL)' O6 i7 Z  t6 D. o: K5 z  h$ q( o0 r
  583. //        {
    * u/ K( d/ e* U
  584. //                // TODO: Place code here to handle when the dialog is1 r5 K) C  c$ R, t: C3 u% r: _# I5 _
  585. //                //  dismissed with Cancel5 i+ I+ r  d( B; w+ ]* m
  586. //        }; ^2 N9 A; G- d6 `* z  l% T: k8 i: ~6 f
  587. 4 Y' ^) ~) \! P. @5 V2 t
  588.         // Since the dialog has been closed, return FALSE so that we exit the. q7 g3 t7 S7 c! g8 l( \0 k( V7 V
  589.         //  application, rather than start the application's message pump.
    ; o3 a4 K& V* P4 Z
  590.         return TRUE;
    7 M' d9 i  q7 r5 ~. ?5 c2 H! |; j# ~7 I
  591. }
    ( e- y* p1 s) s$ \
  592. / N" K: A& y: n4 O
  593. char *CRevAppApp::strtok3(char *pSource,char *token)* D9 j, A4 I  y* M3 ~' w% g
  594. {- J+ q: i/ G' `% ~0 z: n) J' M
  595.   int i;5 S2 K* ?: G; }  y* I0 x
  596.   char *szRet;
    ; U+ q6 H: F" ~' z; C+ v

  597. 2 ^/ L6 ]9 k9 k8 u3 t
  598.   if(pSource) { itoken=0; sztoken=pSource; }4 N# ^# M6 w- W3 ?+ B" p
  599.   if(sztoken)* G; J; r! P& Q
  600.   {/ v2 P7 T6 u8 q+ N; g
  601.     szRet=&sztoken[itoken];
    - b' n+ s" j. Y
  602.     while(sztoken[itoken])6 y# x' ~# K- m/ _, j: _' G: P
  603.     {
    5 s# @2 C/ _( s! x# _2 C$ @3 a
  604.       for(i=0;i<(int)strlen(token);i++)
    ! J6 ?6 n2 U' m! W4 Q
  605.       {: l2 [7 ]- J  n! w  E
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ; p# y  R/ {4 y, q9 r5 A
  607.         {0 `' {! u1 S* L
  608.           sztoken[itoken++]=0;
    : X$ k- a# p: z- G6 F
  609.           sztoken[itoken++]=0;
    / v" V2 j+ X0 z. [9 x  {" r
  610.           return szRet;
    " D) H% ?$ d" _6 B& w" T5 D
  611.         }
    ; S2 @4 O( Y+ Z% k
  612.       }, }) f6 Y+ S3 P8 X! N" ~
  613.       itoken++;
    1 z: P7 q7 ~* a+ ]$ J* m
  614.     }2 l. J, f( ]1 H7 d4 X
  615.   }( f5 M6 V; i( j  {  F2 U
  616.   return NULL;
    * @7 P. R3 F5 k# _
  617. }7 R% [! U% E$ V
  618. ( G8 k+ w7 S* d
  619. void ProcessProc(long Total,long Current)) E/ z$ d& f0 j- C; x
  620. {
    ; S4 ^2 U4 {" J0 K' Z' `
  621.         MSG msg;* D& ?& ]/ A6 I6 B
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    , A1 ^! Z- o2 _0 e2 G. g
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ; ~8 y: A% B) a/ q2 I# r
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    3 l- v; f3 s- B
  625.         {
      {0 _- f) W) A2 L. f' i
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ( }% m( {! l# K4 }4 B3 p& l8 |
  627.                 {, U+ G; X1 j0 |7 I# b( L$ ?" L
  628.                         return;5 a8 \5 x2 ^% N8 |1 |9 T0 o' G
  629.                 }
      @2 e! h# `; f0 z
  630.                 TranslateMessage(&msg);$ q& k( u# G& l# @
  631.                 DispatchMessage(&msg);
    # N, x$ ^! ]+ Z) b* W0 h( f
  632.         }       
    6 O- Z" P# i  h4 H, @, o
  633. }
    ; }* [' j7 s/ x: k2 I$ j- d
  634. ) {3 A. g# q# i; \
  635. BOOL bFirstChar=TRUE;  F0 D( W0 N0 m" M

  636. ' R  Y( D* a! L, L* y8 E2 G
  637. BOOL CRevAppApp::OnIdle(LONG lCount)7 ^, g6 z& z: ^; N9 @3 `
  638. {
    6 B4 q, u( P9 Q. z% z
  639.         // TODO: Add your specialized code here and/or call the base class
    , l: |. Y! T1 ~5 ^' e) E
  640.   switch(dwProgramState)
    2 m9 o8 c! p" q. N8 |. F" j! q8 Q
  641.   {" }7 t0 q* d; H' y6 s( e
  642.   case AP_NOTHING:1 x5 h9 D1 j! K0 m& X% ?2 o
  643.     switch(dwStartUpSteps)
    ) D) ]1 @9 i7 G/ C( Y
  644.     {" I8 \7 i; d% Y* g* f) c
  645.     case 1:
    : @# f' h& ?4 ^9 V! G) T/ ^8 G
  646.       {9 ^5 t+ X: u# v; W- z( f7 X
  647.         int i;
    4 X) y5 s1 k( i
  648.         CDC *pCDC=dlg->GetDC();8 c: U; B( k9 w' b% j, I& ?
  649.         HDC hdcwnd=pCDC->m_hDC;
    ( U$ Q$ _8 [% m$ H, z
  650. //        Graphics graphics(hdcwnd);
      [3 K# M6 i4 Y, h, k6 m% k
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    . F, T/ u! u. S/ X; `; j
  652. //        INT iWidth=bitmap.GetWidth();% x2 v0 Q, @+ [# V
  653. //        INT iHeight=bitmap.GetHeight();5 }2 I' Q- a% P) a9 l) z
  654. //        Color color,colorTemp;
    1 q3 O5 w7 c1 P( V# Z+ @8 j8 G- M
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ [2 t  w3 p7 ^/ ?
  656. //        {
    5 a) f1 ]* z* U
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++): `- h2 K& G/ ~7 T- e
  658. //          {1 V& u+ _) B, S# N
  659. //            bitmap.GetPixel(iColumn,iRow,&color);. ?4 v& g8 I5 u0 H/ h4 J
  660. //            colorTemp.SetValue(color.MakeARGB(% t$ Z& ^; z  D: Z! n
  661. //              (BYTE)(255*iColumn/iWidth),
    ; j$ S% C; F( F# O
  662. //              color.GetRed(),7 o# M9 _3 w3 f2 K
  663. //              color.GetGreen(),
    # r  @; |8 N! o: `! V
  664. //              color.GetBlue()));3 U, |, Y8 K4 i/ K" H
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # V) e- u& N& N; A) r; P
  666. //          }1 D% L7 h3 d7 d; c% ]) S. C6 [- T
  667. //        }
    * l$ `5 E9 O. G1 O
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    6 Y1 _7 V& z1 R9 N( c3 i
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & y. u1 d6 b) B! A( G: i2 r
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");; ^1 [5 R# b2 O. `2 \6 m; M7 e
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' `" d+ W, Y' X
  672.         for(i=0;i<240;i+=8)0 O1 O1 B- U, A7 s
  673.         {$ }2 Q5 f0 E/ k
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);8 T$ z1 b) @5 ?, C0 @/ G
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 ^* O5 K( W2 @. m
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    9 Q* Q& b5 V- K. y
  677.           Sleep(33);
    6 G5 x: J. O3 `6 ~
  678.         }/ U1 I* x8 M* b* S* _7 k
  679.         Sleep(1000);( _* U4 P  C9 S3 j
  680.         for(i=240;i>0;i-=8)
    # `' S& `$ I* y8 c$ g# X
  681.         {
    1 Q; Z" W$ H. P& f5 g
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 L0 w5 {8 [+ }; _2 |8 i' [
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 n: M0 p- y( f  ]
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ C2 i" T8 ^7 M3 z3 l
  685.           Sleep(33);) M5 M) s7 y$ P# }9 ?
  686.         }- x3 P2 T0 R; H- B; M1 X. C! w' M
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);6 _  x3 G8 z: r8 h: b
  688.         dlg->ReleaseDC(pCDC);
    % H* d- e4 d+ {1 L& Q4 c
  689.         DeleteDC(hdctar);
    . r: e) |% o% R8 K# f% ~8 S
  690.         DeleteDC(hdcsrc);
    * [1 y* S1 ~) V' [
  691.         DeleteDC(hdcorg);8 F! `' ~4 `; w
  692.       }
    * Y. n* H2 @7 E7 A  S+ `
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 p) g9 y9 ^3 N0 A& `; F- {9 e6 Q% o
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' c: D' M- d8 o
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");4 n  M4 i1 {  D4 j
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");5 Z7 G- s& _1 ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 J3 L# ~& Y% L6 A! m9 x" S$ R
  698.       if(!Dn.Connected())# u! d; j( j/ F. c8 O- \" j
  699.       {
    - w. H# A9 ?. }! N, `
  700.         dwTotalFiles=1;) E! c  e/ z$ s* a7 Y" ]7 j' X/ P
  701.         dwDownLoaded=0;* f2 |7 v# G' ~3 J8 ^! q
  702.         bSilentStep=TRUE;: }+ X7 Q6 k4 ]7 `1 e
  703.         bCompressed=FALSE;
    & D, M* Q: w# H+ R/ l
  704.         strExtLocal.Empty();( Q  N: n1 b6 w8 Y
  705.         strFullName="readme.txt";
    " V+ Y% s* D$ ]8 V
  706.         dwProgramState=AP_CONNECT;
    1 c* Y3 V0 [; b0 P
  707.       }2 f$ @% k  E; E
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 ^6 o( T! u+ G9 L7 S, _
  709.       dwStartUpSteps=2;
      D1 ~4 A) n- J! ~3 ?4 X
  710.       break;% l; W1 C& ?6 q6 |4 P) r8 P
  711.     case 2:' D3 n! Y5 z0 w5 c5 g
  712.       {
    ' `) u% K" U7 r2 h7 E1 z
  713.         int iEOF;
    " d3 v0 |' z# _7 E- e: ?
  714.         FILE *fp;
    ' M, O. N# _$ n4 T0 A
  715.         char szString[512];
      b, n; b4 P8 C! k
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    $ s0 h5 h9 _( m' w! {" s( [$ f
  717.         if(fp)/ R' k: ^+ x( n. P9 {
  718.         {
    ( h* r/ }2 S$ Q7 a; B# F
  719.           do
    % I! f/ x3 Y, C
  720.           {& ^* C$ p' J9 W
  721.             iEOF=fscanf(fp,"%s",szString);
    1 R3 X6 j; Z! p: N8 L
  722.             if(strlen(szString))- v' Y0 _. ?1 t" ?: e7 s- U' ]/ ?# v% Z
  723.             {8 R# n! d$ M, C' r6 U4 M
  724.               if(bFirstChar)
    ( X% T$ b. G* v: u
  725.               {
    ' P( b  h+ A" ~' g
  726.                 bFirstChar=FALSE;
    . e& k6 V& {3 }% ~0 E6 r1 `  _
  727.                 bConnectIsBig5=FALSE;9 C, a$ p* {' A  `% l$ e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;3 n; x: y9 G) S; i- g4 ?
  729.               }3 D. j) D! e- y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));7 e" i+ ?' Z9 V% T2 m4 h& M/ g
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    * I+ e' c, q' c1 K
  732.               dlg->m_ListText.AddString(szString);
    5 z4 l6 j  f1 C9 B$ h  p1 {' E1 F
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. l) U$ T" ?: B- K  E
  734.               *szString=0;( ]! N- H/ \2 Q0 Z
  735.             }: o  ]" ~* t" k& [* l% U$ T" w
  736.           } while(iEOF!=EOF);2 f5 ^9 E: i- n# |# e( }3 u
  737.           fclose(fp);$ V) u2 Y. Y7 J+ K
  738.           unlink(".\\DownLoad\\readme.txt");! s/ ?5 P+ Y  R( T1 h
  739.           dwStartUpSteps=3;$ j4 g/ o9 f# z
  740.         }$ u4 g1 I* u, _% H
  741.       }
    0 Q9 P% T  {& K1 Z4 P$ O
  742.       break;
    % x* u* ]6 a- W$ B& D: ~5 l) d- J
  743.     case 3:2 x# S) D: ~9 I8 [% w" h) h; p* n
  744.       if(!Dn.Connected())8 l( F9 R/ s6 O. p4 D
  745.       {! g; k; L( A4 z* m' ]' [
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    5 b. l  o" x4 D: i( \" h' Y. K
  747.         dwTotalFiles=1;
    ' k6 J$ U! Q6 R
  748.         dwDownLoaded=0;
    * A. }6 y  b! }
  749.         bSilentStep=TRUE;
    & Y- s: ~2 `7 ~( I0 r
  750.         bCompressed=FALSE;% u5 [+ O# p+ J3 C1 S0 j
  751.         strExtLocal.Empty();
    8 Z! j+ y+ L& I/ ~; s
  752.         strFullName="checkversion.txt";
    : T& k- _) E' b4 ~. ^8 r
  753.         dwProgramState=AP_CONNECT;
    5 q4 Q) O+ _, J: V- F4 m( Q( H
  754.       }6 x; S. B: p' f* L$ q% n
  755.       dwStartUpSteps=4;1 I! ~& q- }" w' q1 @
  756.       break;
    . Y9 H6 {( v- U% L+ l
  757.     case 4:5 H3 e1 c& h: ?4 Z! i( M& ?
  758.       {  h$ x* u0 ^' J, y
  759.         FILE *fp;
    4 z( g5 e( x: j& Z
  760.         char szString1[128];
      ?9 a: `. e4 C9 z+ J7 S
  761.         char szString2[128];: \0 D0 \" y* C+ a- ]: R
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");" a% T$ S6 t# j4 y8 f
  763.         if(fp)
    * |  Z  g' g+ n" c2 g# R. Y( ^  d. ^
  764.         {1 {9 E- I2 Q7 a& t. \$ j. l
  765.           fscanf(fp,"%s",szString1);* @; c2 ^4 J4 n5 \
  766.           fclose(fp);
    : Z/ S' m. h- s" S7 G( j2 C4 |
  767.           fCheckVersion=atof(szString1);3 T4 Y2 V6 h/ a$ `9 |8 a- }5 x
  768.           fp=fopen(".\\checkversion.dat","r");( d5 x7 P: H1 a' V* F
  769.           if(fp)/ ^- g8 e6 [3 t) c4 P
  770.           {5 Q1 W6 Z1 w# O
  771.             fscanf(fp,"%s",szString2);
    8 L5 Z0 ?3 ]- A8 d* w2 n7 S& z
  772.             fclose(fp);* u" Q+ m  [; T/ S2 H2 g
  773.             if(atof(szString1)!=atof(szString2))8 i4 ~: ]' [; ]' q( e
  774.             {  d0 B4 u0 T: p/ d
  775.               if(!Dn.Connected())% e; m9 w/ l$ [0 ]# u: g
  776.               {
    & V* N9 ]# N/ I, Q7 U9 o7 h
  777.                 bFirstUpdate=TRUE;
    % p% \' `! [" w6 x
  778.                 dwTotalFiles=1;
    ) _/ B4 O2 S! D4 Q, e: ^. C" M0 Q
  779.                 dwDownLoaded=0;/ B, ]0 Z$ k' G; U5 u* F0 Q  C( A
  780.                 bSilentStep=FALSE;! k; \( Q/ ^6 r- w
  781.                 bCompressed=TRUE;/ ~* F& S0 @1 D. }2 u* f
  782.                 strExtLocal=".\\DownLoad\";
    . a2 F& K  }. m! h7 |
  783.                 strFullName="update.txt";7 l2 S2 j( T$ K1 G- T
  784.                 dwProgramState=AP_CONNECT;
    ! ^3 }% p4 f* \5 z) [" h) @+ i8 O
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - ~* f# s5 d. Y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");$ D4 z. ~" r6 A
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");3 a* e2 h5 P' i( W2 O9 U

  788. - w1 I, K, ~# j% [# H
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # }  {" n4 N4 w. U: X. O, q+ @$ i
  790.                 unlink(".\\DownLoad\\checkversion.txt");# {1 o$ J/ Y- {+ x+ X! S
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    6 l5 v# k8 P6 f) j5 E/ j: l" |
  792.                 {
    " o  d# u) B* L. i7 P  W
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");5 U3 ]- ]3 B! b+ g
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    . u* ]( Z3 ^! A8 U% d3 c2 A. T+ K
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    6 `# o  O1 o! s) x
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % f  ^; v, a+ D, T
  797. 7 ?5 q& U4 x$ s8 E# F! p
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( X* Y% [" Q: r, U& b
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ A9 \( i$ t& a0 t# ^3 \8 v6 P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");+ O% u( V' n4 @: w" n6 {" ^
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. }1 m% y7 s- C+ L0 p
  802.                 }% r- f* D7 D5 L
  803.                 dwStartUpSteps=5;
    ! d) d% Z, I5 H9 E0 c) E5 m
  804.               }
    2 g" B; f- E% b4 i
  805.             }
    " e2 R/ @1 p8 K: s
  806.             else
    6 o5 d5 B* m3 O% R! z
  807.             {
    0 g0 \4 z5 J( \1 m7 }6 O
  808.               unlink(".\\DownLoad\\checkversion.txt");
    8 f/ ^" A* \: u: G9 {2 }
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ) T& C7 R1 v* A# d! ^3 _* c0 d
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");2 [( [# f5 z1 Q% z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    5 h+ k% m9 }, x

  812. 7 O- P$ T+ I% T# J% s1 B
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 M" q2 A7 o. [. Z% t, G
  814.               dwStartUpSteps=99;
    6 {8 V2 f* P6 X- Y$ V+ ?3 I3 C
  815.               bFinishUpdated=TRUE;
    ! b0 v* e: U3 Z/ l
  816.               bCanUpdate=TRUE;
      b2 }$ `, I# u. S
  817.             }3 ?4 `2 s$ B; [3 j/ J( D7 @
  818.           }
    % h( `) v  c; s3 T% u
  819.           else
    - |* J% G4 K  S7 v! W) v. F7 `
  820.           {
    3 n/ i/ c6 B$ a
  821.             if(!Dn.Connected())1 f- `' M8 d7 V+ o
  822.             {$ x3 z6 j( P* s% z9 ?- l: e$ O
  823.               bFirstUpdate=TRUE;/ m; h0 [1 u0 F' S$ \
  824.               dwTotalFiles=1;
    - W, t$ F+ m$ W2 t0 ~$ j
  825.               dwDownLoaded=0;% z& z4 N9 ^1 ~& `4 A0 Y9 j
  826.               bSilentStep=FALSE;7 P- L" U0 H( `. b: t) V) [
  827.               bCompressed=TRUE;" K6 Z+ l& Z. g1 M3 z
  828.               strExtLocal=".\\DownLoad\";( F1 a6 X, u) h, _% u. C  ^3 d
  829.               strFullName="update.txt";
    % T: t  v3 F7 {9 P! L2 ]8 w' z; \
  830.               dwProgramState=AP_CONNECT;
    $ V( z, h% T6 W0 V7 R$ z* x
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");& e* V' J2 s( g, j. u
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- K+ h% D8 k1 d& r0 e
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");: ]: _$ r# I$ A) J/ O6 P
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ G) ~) y" m. r" T1 U+ p* H' _
  835.               unlink(".\\DownLoad\\checkversion.txt");9 `# X1 f) R9 L- `" J( {4 R: w
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    2 i, s; ]$ N, G3 x3 {6 b
  837.               {  s6 E' u3 l! Q: X
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ' @- p) y; h# `, ~" j2 \/ e- S1 P7 N
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");  E, ]9 w1 `. t: h2 {  _* ?# [
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");- A1 Z* T2 L4 S$ D# v0 e& a& q3 w
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" I) z, x1 s' I  w# W
  842.                 + f* _/ V9 n6 l- v
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( ~+ B5 q' @' Y$ l- P1 \
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: t- x( ?1 {- b! d! i! f( @
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");* c) v/ b9 F  e* O3 y  g
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # N9 e# @. Z- A9 q9 ~
  847.               }5 k1 h2 B* s8 s  d7 Y
  848.               dwStartUpSteps=5;
    , z3 M, b+ q9 l) Z3 ~5 H- G1 P
  849.             }
    0 H5 [: o) v8 b% [9 s
  850.           }
    # K& E% u1 \% J. u9 G
  851.         }
    4 Y' C% W. Q6 r2 H- x
  852.         else
      j) h* b5 y( a: g2 |0 J/ i: h
  853.         {& R# b3 T0 C2 B" v  n
  854.           dwStartUpSteps=3;
    % C. y# V, B0 }# N% G* C# b, H
  855.         }
    / U7 Y- S0 c: \& P5 ^0 \9 I
  856.       }
    ' f% u# e8 r6 c/ k, e
  857.       break;
    1 D$ X2 l8 L: N2 R! f; D/ s; ^
  858.     case 5:9 `# I5 y) o- f1 a8 b1 d: w( @  w
  859.       {
    1 R( T& b1 g+ h' q0 I
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    / m4 b" x/ I" b, P
  861.         {
    / H1 ^9 W2 `0 P& R$ L  A; C
  862.           int opt_overwrite=1;( k; ~. }6 g9 T% m/ M5 i
  863.           int opt_do_extract_withoutpath=0;' q6 t1 @& `5 o, x. y
  864.           unzFile uf=NULL;0 k. k0 I  i/ r" \; a& _/ D# |

  865. % @2 e  h" ^5 c8 l- }0 Y
  866.           uf=unzOpen("Wsa.zip");
    ; q5 G' a" z; S3 u: n
  867.           if(uf)
    8 l. M2 F: P1 q8 f9 l  I
  868.           {
    % z: D2 Q3 t7 Q* L6 t, G
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    # }! @8 e7 L6 {; v1 o* y
  870.             unzClose(uf);6 f. Y, m1 O  S! I2 ^
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");# f. @' B/ g, F3 w0 I4 b$ R
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    : I+ c6 g* Q) N+ f$ Q- W
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    0 e5 `, }: g# P! p1 S8 C1 [
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 m! f' H" M; S2 @2 G# ^
  875.           }" A( c" ?: j! \! J. [6 I  \0 f) L
  876.           DeleteFile("Wsa.zip" );  n7 [* A6 b& }* F& s. `
  877.         }7 ]  W2 U. @$ ^7 B

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

評分

參與人數 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客服返回頂部