找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
+ u/ F) w# v' b( I# @
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ) ~0 u7 k' d. w$ a
  2. //
      R* O( w9 q* v3 w/ l) O

  3. ' }" Y, A8 z5 C: t7 k
  4. #include "stdafx.h"( X8 u$ O0 B& F. S: c6 P

  5. + o. ^8 P, Q1 }" A0 u. B$ g
  6. //#define UNICODE
    0 P0 J  g4 [( M* M* i4 T1 ^
  7. //#include <gdiplus.h>
    : P  Z# i: j4 N: R
  8. //using namespace Gdiplus;. H9 c: u- X9 Q
  9. ( r# V0 s8 |6 S6 [* f1 R# B
  10. #include "RevApp.h"
    5 ]. X5 G2 h2 C
  11. #include "RevAppDlg.h"5 B' i# k: p4 f) j% X9 Z

  12.   r( v5 ^+ V4 ]5 H( [, X
  13. #pragma warning(disable:4786)
    9 k( _* a9 N! s
  14. #include <map>; P5 X" J  v& d) Z% \6 J
  15. #include <list>
    8 @+ n" u- L4 x. S% i
  16. #include <direct.h>
    " W. m% b) ~0 E& A- T5 ^

  17. - V7 l$ `! K% u) q* n# e( p
  18. #ifdef _DEBUG
    ; g4 p& b$ n: K6 z9 m
  19. #define new DEBUG_NEW
    % O4 a8 A) g# N1 f! {
  20. #undef THIS_FILE( v) ?$ q( E# G
  21. static char THIS_FILE[] = __FILE__;
    $ N" z5 h/ o* W; Z/ H
  22. #endif! i: i; g8 l$ P( q* k
  23. #include "SkinResDef.h". r8 D) u, C7 U4 w
  24. #include "ChangeBG.h"- P1 g; B+ a  d' E! d/ Y0 P. L
  25. #include "AFXINET.H"4 I$ j. E* `' Y' m. C, _# ]  H

  26. " k3 K' a3 O2 q  L+ z% }4 O, _
  27. #define TRADITIONAL_CHINESE 0' P. p+ Y+ b$ O* O5 M
  28. #define SIMPLIFY_CHINESE 1
    / t: o( B* a4 t! X! Y
  29. #define ENGLISH 2
    ( y0 x$ s0 c- ~9 ]1 Q- M" h4 W0 h
  30. int m_iLanguage = ENGLISH;
    ! R% v1 w: e1 v1 M) n
  31. /////////////////////////////////////////////////////////////////////////////4 j3 m; [: M- @; @+ |- d5 r/ j
  32. // CRevAppApp
    8 N  e% E* B) X9 ^2 {- F

  33. : |- X( L0 T# Y* T7 k4 b3 x$ m/ K
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    + C8 C% M6 @( F% b9 V
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    4 B9 i' L, f8 a9 G; R) V
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    3 t. Q; h2 Z# d8 _: P
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!) Y2 W: r/ C% L# L6 \& I8 h2 d0 h4 `
  38.         //}}AFX_MSG
    3 `- E/ f4 `$ M1 u. i
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)& y# @3 P, f' ~" t# |
  40. END_MESSAGE_MAP(), \& F9 V# J5 ]; m

  41. 6 P  B& a* _) ^) ?' h3 Y
  42. /////////////////////////////////////////////////////////////////////////////
    / V/ |) R2 o( ^  ]% V9 p; m
  43. // CRevAppApp construction
    : E. w0 ?+ w0 h3 k( u( K
  44. ! ?) l8 p- H; `1 n% D* s
  45. CRevAppApp::CRevAppApp()
    5 x3 q6 t$ w4 t; [# e2 G: S9 |
  46. {
    8 R  r/ e4 Y7 Y+ z. x5 @5 j; i
  47.         // TODO: add construction code here,
    7 y6 g; T. q9 h: s  G7 k
  48.         // Place all significant initialization in InitInstance6 x: @! o4 g4 H/ t( v! e% ?
  49.   bDisplayIsBig5=FALSE;# j1 I3 {  h" P
  50.   bRestartUpdater=FALSE;# a% D. S$ Z  \. o+ z
  51.   bFinishUpdated=FALSE;
    1 a& x' N' t& z7 ?
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;! e* m, Q% P/ }( M: x
  53.   InitChangeDataBig52GBKS();
    . Y- n- i! P# b1 f
  54.   InitChangeDataGBKS2Big5();& w( J) ?) k. N' z8 s  n1 n! @9 C. O/ I
  55.         //, E# A. P7 i9 f9 j9 M  y2 G
  56.         bClickRunExe = FALSE;
    3 ~0 t5 H/ u2 }7 {
  57.         //( m9 h8 L* G8 {/ Y5 D
  58. }# \. ?4 W" d) V; h. `
  59. 7 _8 @2 \2 u( e
  60. CRevAppApp::~CRevAppApp()
    ; |7 f  Q  g7 Q3 [+ B
  61. {
    0 U  h: l7 f) t
  62.         // TODO: add construction code here,
    ! j6 G: B# z4 h8 e5 C) n; r8 x
  63.         // Place all significant initialization in InitInstance
    % c( f* q" d! U  r0 H+ ?
  64.   EndChangeData();) \' o$ ]) X7 g* c* i
  65. }
    ! {- ]) m5 j2 L2 P5 ~2 |
  66.   D# T: Y% g% J( k+ D
  67. /////////////////////////////////////////////////////////////////////////////
    $ f. r2 p8 `( ], O: ^3 z: ]
  68. // The one and only CRevAppApp object2 H2 ^! Y) b2 Y5 p' R
  69. $ x8 @& L" X  j! u$ U
  70. CRevAppApp theApp;3 m: J7 b0 O1 O0 d5 K
  71. 6 W/ |0 ]8 H2 o. v0 p! o
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)7 j( r$ w6 S+ B# ^: H
  73. {
    ! n! J& f1 j3 I# i$ o
  74.   int iEOF=0;( C$ X" p6 ?6 f! z( |: @( w
  75.   char szTempName[MAX_PATH];
    ) v, s; N3 h2 W) e
  76.   *szFileName=0;
    ! e9 z% P/ Y% C* I
  77.   iEOF=fscanf(fp,"%s",szTempName);: k" G+ p% I/ `6 E6 A0 q2 K& H
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')* A: c" B8 J7 O# i' L% g
  79.   {
    : q+ b& P, I) I0 j9 L# ^- q
  80.     strcpy(szFileName,&szTempName[1]);" I9 R, x; `5 u
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    6 x. E7 w% W/ n3 Y1 x+ o& i; Y
  82.     {: [3 K: T$ ^, _# D& `
  83.       iEOF=fscanf(fp,"%s",szTempName);  y: c0 X8 ^+ V9 `
  84.       strcat(szFileName," ");" r8 z0 N+ ~4 y7 H8 h4 G  S
  85.       strcat(szFileName,szTempName);5 x- P& H# t) I9 v* g
  86.     }. C& V) T2 E3 g& I
  87.     if(strlen(szFileName)>=1)$ `* f: K  i# Z% \- U/ @6 U  e
  88.     {
    , N5 i+ u! W% Q$ p+ O! t* l
  89.       szFileName[strlen(szFileName)-1]=0;% p7 E, C/ g5 c9 L& g5 a- r
  90.     }3 w. B& e$ ?4 X6 k$ ^/ \) `) Q
  91.   }
    % g" }/ O) Q/ e; C+ S3 Y
  92.   return szFileName;
    $ Z  H5 l+ e2 @) g) P# A! i
  93. }
    9 C/ M' x; t! s' h5 K
  94. 8 A  I- z- F2 f: q) t9 ?1 ~1 e
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)7 d4 F3 `8 p/ c7 O- z1 A3 q$ W
  96. {& S1 [( n2 q" r' F3 m
  97.   FILE *fp;. R2 k5 ~! w+ o; j
  98.   char *key=NULL;
    1 {/ `* L' u2 I0 q
  99.   char version[MAX_PATH];( [, |8 P  K1 [5 C" J
  100.   LPUPDATEFILE file,olds;
    ! ]& l  I1 o8 H3 g! X1 A
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    . @6 y1 t5 Q4 s
  102. 2 P* |& k" r$ _/ {7 W
  103.   UpdateList.clear();+ y: u' M7 n& W# A  n5 j/ P) B+ S
  104.   UpdateFile.clear();
    7 O/ V/ G% ~. s
  105.   if(GetFileAttributes(filename)==-1) return false;. S# x/ q. b. i$ K4 w# ~
  106.   if(!(fp=fopen(filename,"r"))) return false;0 z6 I- L: T0 y" \% V
  107.   fscanf(fp,"%s",version);# I5 y3 `5 ~  o: d0 }2 S. }9 y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    8 \4 M: P# \* ^- r0 C- E1 Z1 d1 ^
  109.   while(fscanf(fp,"%s",version)!=EOF)0 E& m4 `' ]( M, O. B) y" \, e
  110.   {( r( o5 R; G. F7 E9 m  \6 G2 s2 u
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 U) Y7 F. J% M4 `- R
  112.     fscanf(fp,"%s",file->path);) H$ C# e! G& ~. _# W
  113.     ReadFileNames(fp,file->file);
    2 A9 J* _5 V( w4 @. Y0 J
  114.     strcpy(file->full,".");) ^$ d3 x, p+ O$ Q" X; L; U
  115.     strcat(file->full,file->path);
    4 N( q9 z, b# [+ q7 j- `/ I
  116.     strcat(file->full,file->file);) ?( G* ~8 Q) l: Q$ x$ H, o# c0 e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())2 f1 ?. n# d, }7 V2 v, X  l9 ?( n
  118.     {
    & K& c2 e: c  h, R
  119.       file->vers=(float)atof(version);
    2 R/ Z6 w4 F4 R( ?0 M2 w
  120.       UpdateList.push_back(file->full);7 ]( Q: C+ F) B* ~3 R5 o
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));! W( ~8 k& U" F4 U
  122.     }* z2 q$ ~. c& K/ Z0 `: \
  123.     else
    ! {0 N$ ~7 j3 k! A3 y8 v3 E* F6 q/ ]+ h
  124.     {7 `( Y+ j5 \6 W& N5 J$ O" l- Z
  125.       olds=(*p).second;( x. K2 J+ M; s& X- Z
  126.       if(olds->vers<(float)atof(version))
    - ]( i- p* ?* W' z; r$ H
  127.       {
    4 Z* X6 M5 d- b( e! z8 a' V
  128.         olds->vers=(float)atof(version);' Y  ?' a# F# N$ b) R( F4 A
  129.       }
    9 v) f; m" K9 r* e% L+ {
  130.       free(file);' W+ p& x' q  {. P% a
  131.     }& r3 N* O. t( Z
  132.   }
    % C. i4 ~/ Y6 g* j8 o
  133.   fclose(fp);: M) ]: U2 L4 j: V% E" Q8 h9 M# C* l: a
  134.   return true;; ?' t( Z& `- d9 f
  135. }
    2 y/ _* j/ u' ~& v- M+ f% `+ T
  136. & `$ y4 b& `! m: U/ z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    - X8 u* s$ ^" Z7 E$ `
  138. {  y7 y8 h9 d4 j
  139.   TCHAR  szFull[MAX_PATH];6 S- M) r5 f6 F- |, c8 P
  140.   TCHAR *token,*inter;9 N8 g2 q' d. e5 K/ \5 C. O$ e
  141.   *szPath=0;- y5 r, D. C: U( \1 ~
  142.   strcpy(szFull,szFullPath);
    0 G' O1 O' I9 ~3 i2 B# ~
  143.   token=strtok(szFull,"\\/");
    5 s/ }2 Z9 |( E% m* h) a9 j4 d! }- r
  144.   inter=token;* n& p/ S  x9 v
  145.   while(token=strtok(NULL,"\\/"))
    4 |0 ^9 r# h* Z8 U9 O  m* X( S5 J$ V% S
  146.   {2 O( S% {' W7 P: t5 X" L
  147.     strcat(szPath,inter);
    2 s  M% \) y# |, s4 L3 _& ?$ V1 J
  148.     strcat(szPath,"\");5 q% k8 F! d- O6 ?2 R
  149.     inter=token;
    / b! \! }1 z! R' k
  150.   }
    ( n3 v3 p9 M: a
  151.   return strlen(szPath);
    : O' K5 _6 _6 T5 I* F1 E6 F1 |/ o
  152. }
    1 }, [6 t" C2 O5 z! F3 p/ x

  153. 5 M, d6 n# a5 l# }; s; ]
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    7 V8 `6 z8 J# F' y& O, ~
  155. {" F( l: r% }( Y4 L
  156.   DWORD attrib=GetFileAttributes(Target);
    7 [0 n: ~/ k% ?* y- |
  157.   if(attrib!=-1)
    1 {; k; C. L( v4 t$ W' K
  158.   {) I4 N$ g; K- X' p; z4 U
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    3 a! S  ?' v6 a% s" r
  160.     {7 |9 Z* a) t1 z; c2 l( @
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ( @" h0 r6 Q2 w4 O! J0 [. f0 U
  162.       SetFileAttributes(Target,attrib);
    8 N7 i( [( `$ Z# Y! T
  163.     }: v: U! t/ l/ d3 a& }6 o' e
  164.   }  o2 ^1 N( B0 p. P" G$ j) H/ q: T6 E
  165.   CopyFile(Source,Target,Erase);7 T9 B2 i* K- a2 [, |
  166. }* w" t. R  ?- V- j/ Y( L7 _9 i$ W4 J9 J# X

  167. 2 J1 N3 S( }- I6 s, d' U
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    + H: M# Z9 }/ `3 M5 ^$ |& I
  169. {
    " P  a8 G+ L" N, M+ u
  170.      FILE *fp;( T& x2 j- M7 N" [1 H8 E
  171.      char  szBuffer[8192];
    3 _' d" ~; b$ t
  172.   va_list  argptr;
    4 j5 y" ?/ |8 }+ U! u% ~! ?
  173. : x8 T- N: H, w8 d& E
  174.         va_start(argptr,message);/ i" g' N/ E! {; Y, N5 s7 ~: i: o
  175.         vsprintf(szBuffer,message,argptr);
    3 P7 G$ I  Z) s) s
  176.         va_end(argptr);
    2 w' m' A  [' s4 x" i! m: P
  177.   fp=fopen(FileName,"a");
    / E2 ]( N; f( [
  178.   if(fp)
    6 A5 u& v# i  i! O7 G
  179.   {$ O) b; {3 _4 B# ?
  180.     fprintf(fp,szBuffer);
    $ ?' K' z7 k4 i6 |- P
  181.     fclose(fp);
    " T8 B" g5 Z& i
  182.           _flushall();
    8 R/ R: V. c: q+ K# f9 O
  183.   }! Y' X3 Q$ R8 Z0 i: E
  184. }4 N% {1 \9 r9 I
  185. , X. |2 x* ^7 F/ T3 `* f
  186. BOOL CRevAppApp::Fclearf(char *FileName)# K$ ]- W0 i3 _
  187. {" L4 A: u. m* x! ~. C. a" u
  188.      FILE *fp;8 \4 C& K' o2 t; `! {) x5 k9 ]' k
  189.     DWORD  attrib;: @6 C2 X" r1 K" P( ]7 w
  190.   attrib=GetFileAttributes(FileName);, S% P( c* f" I
  191.   if(attrib!=-1)
    # L, ^; ~. W2 I( B( A# \- @( t* H
  192.   {, m- X$ z$ R5 A9 a" u1 a
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    * ^% e( ^( L6 I& ^! e9 \
  194.     if(!SetFileAttributes(FileName,attrib))
    2 j0 |* w3 v( ^1 a  N9 S6 w
  195.     {, q8 o4 J# ~/ m, N
  196.       return FALSE;
    ) X2 @4 `; W( L' ]6 c
  197.     }4 X7 F; ^9 {% u- P% z6 l
  198.   }- w' d* \, t5 a; u' H) ~
  199.   fp=fopen(FileName,"wb");" A" j9 h" n' P: V
  200.   if(fp)
    " V9 P9 C, H7 F8 d1 v
  201.   {
    & W; j! P5 E* t# X% ?" B
  202.     fclose(fp);/ s" q& |+ b0 \' g4 X
  203.   }2 @/ Y/ {" _6 a/ ^: H% G
  204.   return TRUE;
    9 h4 B$ }" o7 }" g
  205. }2 w, S/ S& @. F( p0 P  r. m4 `

  206.   c, [. U7 k% w# b
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    . D: s, ], _4 x) ?, X* G
  208. {
    * `$ D; ]- U% a/ r) M- Q
  209.   char filename[MAX_PATH];
    0 M  G) f- {) y
  210.   LPUPDATEFILE file,olds;, }) [0 a# h, D. l( L  F. Z
  211.   std::map<int,CString>::iterator i;8 w- I7 n6 p8 y# g0 @" T
  212.   std::map<CString,LPUPDATEFILE>::iterator p;1 P; z. A; G  |7 _) m
  213.   std::list<CString>::iterator l;
    2 @7 u. b( K  H
  214. - f7 M, X! g3 N4 n
  215.   if(bFirstUpdate)
    # L: s+ M- E( p5 z
  216.   {
    # B% V; Z2 `' `7 w8 w
  217.     dwCurrFile=0;) d0 c& l1 {1 Q
  218.     bFirstUpdate=FALSE;0 X3 d0 Y! [6 t( F! U
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 c2 F: r, ?1 s1 i/ ]% e( h7 N
  220.     {
    1 d, E+ ~- j  [* X9 x
  221.       dwTotalFiles=UpdateLocal.size();! P7 N% l, I, }  U$ Q: P
  222.       dwDownLoaded=0;1 B2 i1 e' b9 s8 B& x' ?4 E
  223.       bSilentStep=FALSE;+ p5 Y  g# S+ |! G: X7 Q9 k
  224.       bCompressed=TRUE;
    / ?, d, p+ ~6 t. v  u
  225.       strExtLocal.Empty();0 Q  w, M: n8 `- O7 n
  226.       strFullName=(*i).second;5 u. ?, s2 m- P! b! p6 _4 ?8 ~
  227.       dwProgramState=AP_CONNECT;
    / e* ]4 p! U+ P+ t& Q4 r8 ^
  228.       return TRUE;
    7 H2 s- Z7 i9 X: c
  229.     }4 l# ^; \( S# D4 R3 j; R
  230.   }1 X9 D( x$ ]/ U1 m" {8 D/ i
  231.   else if(bRestartUpdater==FALSE)
    0 [0 M! y( C" U5 s" \5 t2 z
  232.   {
    . e3 N  n& L7 h5 `
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())4 c1 N- O8 l6 q$ ^
  234.     {
    # B7 ~- _9 Z  u6 F+ ^, S* }6 z
  235.       file=(*p).second;
    $ A% ]1 ]/ Y# _; h7 y* z+ E4 e
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ; u3 U; f) [4 o: K( I7 V  [
  237.       {
    ) O% |0 y& ]5 z' S) }$ J, {
  238.         olds=(*p).second;
    ' o6 l2 b! H* i  \
  239.         olds->vers=file->vers;$ f  x5 F4 k7 H; i, U3 u
  240.       }
    $ w/ x1 |" E0 g3 j# k
  241.       else8 l1 b* s# O8 g3 B6 K
  242.       {
    % o1 S0 y& m; m$ K( ^* X2 J
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ _( l( ^& H- s; h$ W: {
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ( H* y; i: |% b8 J; R
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));# u- N4 ?- {$ t9 T
  246.       }
    % m" |* o# p9 E; G
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");; x/ M3 h0 `0 l, i
  248.       sprintf(filename,"(%s)",file->file);7 w4 l) N( H) m) W. Y* p9 |
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);$ \/ b& O) x8 ]' O0 @" w$ g1 a! c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }, w" h% _; ?9 ]- ]7 b
  251.     }( n5 D3 L) w% l( [* G8 [& j& k
  252.     dwCurrFile++;
    9 M# p2 T1 S- u) w, h- }# U  |3 s
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    % o. S3 ~& z, t) a; U# ?
  254.     {
    & L; w, z- ^; m) S3 g) `
  255.       bSilentStep=FALSE;' @7 @& l& z) c1 U4 B
  256.       bCompressed=TRUE;: A, ~2 ]6 D. f& g$ _! e) {
  257.       strExtLocal.Empty();
      _8 _; P  D* q: {) Y' R+ J
  258.       strFullName=(*i).second;
    8 |3 ^- r) ^' B; ~
  259.       dwProgramState=AP_CONNECT;
      Y( z9 s( X( c$ r* F5 X
  260.       return TRUE;1 q3 G, f. {. i3 D5 Q
  261.     }
    8 d& n' p2 `  Y* ~/ u' t0 f
  262.     if(!bRestartUpdater)
    8 o% l1 A8 t8 _2 ?4 O1 ]7 n
  263.     {0 C, X% m3 S; _& h
  264.       int iCurrSize,iFileSize;9 W( o2 d# W# V' E1 G1 E
  265.       iCurrSize=0;
    + m7 X) F1 k- ~
  266.       iFileSize=UpdateList2.size();0 ]; D' i$ j; J- E2 u, T# h
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");. c- H" ]9 G# M" a# K) G# _
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");  _9 e& Z4 E- R
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 c% I& `- A0 z8 i
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 }$ l) N" g, r; T: ]9 Y2 `
  271.       Fclearf(".\\update.dat");: A6 `. Q1 I9 }6 B3 l$ L
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    8 a0 l4 _; _* L; c, L- h
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)$ j% j# z1 C% X$ k6 t& Z" Y
  274.       {
    , k( ]: M! r. R- D  j
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())$ L( @& e- a. U
  276.         {
      n3 r3 s' q1 ?4 o, U1 u
  277.           file=(*p).second;
    , [# V1 a$ f2 E- y. }" r
  278.           sprintf(filename,"(%s)",file->file);
    & b9 P5 `  s0 ?- B+ k
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & G$ p6 k' U" z' R
  280.           iCurrSize++;+ @6 I# X0 u1 z, v
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    3 H- `8 W" e/ |! D
  282.         }* Q5 V: q4 `7 r3 _/ f2 x* s! r
  283.       }
      W- h/ ?) d  a! Y) D5 t2 d2 n1 U
  284.       unlink(".\\update.txt");
    ) K' h+ R# G/ r9 b+ [
  285.       unlink(".\\update.tmp");. x3 g3 U/ f1 M  Y
  286.       Fclearf(".\\checkversion.dat");
    # }* J/ R7 e5 @8 w& b4 i
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    " Q: E& N$ B7 I, _
  288.       if(UpdateLocal.size())/ m3 j5 M: c+ @0 h' ?
  289.       {' J6 R0 V/ }! d2 E/ o- l
  290.         UpdateLocal.clear();! E9 S- n  X4 |2 o
  291.       }% @* D, b9 N1 A$ q
  292.       if(UpdateFile3.size())" i; X. O6 q! s. p
  293.       {( W! \; b# o- B+ R$ v1 E+ M
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 s" i/ T  A4 |2 l; Z4 o
  295.         {, k7 O6 F: B7 B: A% [; n9 U$ \
  296.           file=(*p).second;
    ( K! y( v; c+ T
  297.           free(file);
    3 j4 s7 S( a& C: q+ v4 k
  298.         }* ]+ F& I8 r0 f# T6 z+ U
  299.         UpdateFile3.clear();
    8 X, i" ?' ^- D
  300.         UpdateList3.clear();
    . n( N- @+ V8 e8 G
  301.       }0 v/ R; \! _4 x) J; W: n' a
  302.       if(UpdateFile2.size()). H! ?0 l1 S9 g
  303.       {
    . X1 L3 x% N% R+ X" ?
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 f2 j1 ]. c4 _; ~
  305.         {
    3 ]3 Z# M" _  m1 _, ^
  306.           file=(*p).second;
    : h6 W- w% I& E5 X
  307.           free(file);
    3 w! y) U* ?3 X' e
  308.         }
    . x4 u* j1 o2 @; k, [
  309.         UpdateFile2.clear();
    5 `8 o3 ~/ O- `
  310.         UpdateList2.clear();2 e" H1 r1 V# c9 Z; q# R
  311.       }% u& o3 A+ L4 h
  312.       if(UpdateFile1.size())* g4 l& z2 i( z: h2 w7 m6 N4 P
  313.       {
    7 R3 X! V4 Q6 e/ n( e- x, a
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' m1 ^0 t$ }5 d( F8 c* j* a( z4 C/ p
  315.         {0 l) l  U2 D1 r; X/ k
  316.           file=(*p).second;7 [7 I- l, B& J
  317.           free(file);* k" A$ i& V3 T  j" _1 I
  318.         }/ f( ]9 S# |) ~6 W0 W
  319.         UpdateFile1.clear();
    2 e! ], R  }+ d. |* g
  320.         UpdateList1.clear();) D1 M. k( c: _* p9 ~" Y/ D
  321.       }
    4 s5 d2 A, v  A/ W0 O) l" b
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' I0 H+ d+ \. @4 F: ~
  323.     }
    ' E" q( D% t/ u+ Q1 X: e
  324.   }( W0 i! N$ _: S' G
  325.   return FALSE;: H& d! x: N  D% n8 @
  326. }
    " M3 W' C8 C, E6 ^( E. T$ k
  327. 6 ^$ X: Z3 J) v6 o, ?' B+ n& V
  328. void CRevAppApp::ClearAll(void)# d( |( s' v' g, S5 [: d6 n6 @
  329. {
      y( E0 z9 g  M2 a, q( M
  330.   LPUPDATEFILE file;
    2 z- U( Q" ]2 Q: j, h. z- L9 ^
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    + r1 T" u; n- U
  332. 1 d5 G: G- D# K$ n6 z3 C8 m: l
  333.   if(UpdateLocal.size())
    - R, F2 S. N8 W
  334.   {: [' E8 W! s. }$ n- a6 Q1 S# D
  335.     UpdateLocal.clear();
    , d7 _, u$ f9 K. N. K. H+ m
  336.   }  N5 W1 F8 O6 O% l& I. E
  337.   if(UpdateFile3.size())
    3 f# f% `2 j/ H- y
  338.   {
    - }7 z5 ~/ a& C) M, ~1 ~2 Z
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 J! o' ^; j- S8 c. E
  340.     {
    4 `: K5 k1 w- _! }6 k2 s4 ?
  341.       file=(*p).second;
    2 H4 l1 Q% e! c) O# E
  342.       free(file);
    : p9 c; z9 K2 o
  343.     }
    + O4 x0 z* a3 {4 Z. m
  344.     UpdateFile3.clear();  s; u/ W+ x8 v- c) @) M
  345.     UpdateList3.clear();
    ; j  ^' T- W0 L8 Z/ o4 a  @
  346.   }& Y6 ~; l* g' D7 }( h$ ]2 m
  347.   if(UpdateFile2.size())
    / p& F- V4 O$ G0 O
  348.   {
    0 b8 }# Z$ h: m3 Q
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)0 Z# [. O2 n+ T" Z2 Z' R. z* z, w
  350.     {
    ( Z% d7 j7 M2 e) s' O% l% I
  351.       file=(*p).second;
    ( |8 f# {3 P6 @
  352.       free(file);+ j  D% L( s! Z6 t! D+ m/ N' f
  353.     }
    # u1 J- h% P. s5 g
  354.     UpdateFile2.clear();( |6 M  w( X# X% y
  355.     UpdateList2.clear();
    2 D0 Y2 g9 t# ~/ g# I
  356.   }1 l4 n. L% T1 ]
  357.   if(UpdateFile1.size())
    ( m! G9 L- v/ x
  358.   {
    * |7 t2 z  |& T  q' @: O1 |
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 W( h- ^* C; S% ~5 q6 ~9 B* u. f+ m
  360.     {
    % U+ ^8 `! {) z' N
  361.       file=(*p).second;
    + {. o( b& Z, ?8 g6 `  e
  362.       free(file);) W+ E; {- C( u1 i  a; [
  363.     }4 h# U) z7 \7 W5 a! {9 G1 ]
  364.     UpdateFile1.clear();8 n) n7 t# Q% Y4 c3 C% @
  365.     UpdateList1.clear();) L. k- l3 a" P6 |
  366.   }
    . @( G2 M3 o- A0 x: I& ^
  367. }  ; W$ L; C& n8 b5 l- t- X
  368.   
    7 {4 X; m! _0 T* j1 \
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    $ \3 n5 {: |( h" a
  370. {
    + Z( _: p6 ]% h# w
  371.   int c;
      n, v* X, O4 Y  O3 V
  372.   LPUPDATEFILE file1,file2;
    ' j( c; O+ Y8 Y, j
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;/ I( e1 Z; ~4 o% f
  374.   std::list<CString>::iterator l;
    9 |" q' x5 A  W& G! h; U. S

  375. " I9 G7 V8 u7 i/ O$ G# b; y
  376.   UpdateLocal.clear();
    7 c" Y2 I! f8 R( E( b
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);8 {4 F! f$ x1 l* v
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ! b! H0 B: f9 a1 l. Y8 W  o, n
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    / r' U  d' |# |0 e8 B
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    " k# k/ `* [# m+ s
  381.   if(UpdateFile3.size())$ [  y8 _" E/ h6 n3 F8 q6 v
  382.   {, f- J( m, I0 O
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    0 D* Q4 \  D) a  B% w) o
  384.     {! y+ C8 p9 V0 g4 _" \3 `
  385.       file2=(LPUPDATEFILE)(*i).second;) R4 \$ `8 @# R0 {" n: s4 ~
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())/ ^6 n; r, u# v4 d. v
  387.       {+ c. I+ ~# P8 B0 i1 H5 X
  388.         file1=(LPUPDATEFILE)(*p).second;
    2 `/ I9 q7 m2 c* u
  389.         file1->vers=file2->vers;
    " y6 c# y) c( b4 t
  390.       }7 J+ y& ~! B  @- S$ ^/ s
  391.       else
    % t0 m9 {. n$ f3 u& z
  392.       {
    9 Q8 z; I* u& J+ }
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 x! S# d7 Y6 K. b
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" d. s6 R6 g- O0 X
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    8 G5 D* |  K2 h; J* \! z% C3 n
  396.       }1 s! c9 n0 G, n/ J6 H, `
  397.     }1 T2 k9 ?( M3 O3 `$ T
  398.   }( S& c/ B8 i  B) q# f2 m1 c
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)5 M( w* d6 @  V7 @7 K
  400.   {
    ! m! [9 n3 x% p8 W& d& I
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    / a5 G( ~2 Z/ b, |
  402.     {, B9 V8 S& L: Q- B/ Y! m+ I7 @
  403.       file2=(LPUPDATEFILE)(*i).second;
    3 t/ o( x# |( p. I8 x4 [
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 }/ x# R- b& ~, ?1 W$ H, {2 d2 }2 `; t
  405.       {7 o: n$ k# n7 r
  406.         file1=(LPUPDATEFILE)(*p).second;6 c  P9 W! \7 G
  407.         if(file1->vers!=file2->vers)
    4 n2 Q( {8 R8 y+ v0 |3 I/ A, r
  408.         {3 V/ u2 U* F/ W5 A5 w
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / y1 a# r* n- Q+ M. ^$ K
  410.           c++;* M7 [8 i1 e: N6 b' k3 C
  411.         }4 P' v" Y+ L- X! b& o
  412.       }: Y/ g6 o+ h1 {0 A* |
  413.       else
      J" P+ S" }8 Q: l6 P1 V! Z) _/ ^
  414.       {7 U) {+ O6 Q& q& p! a! S# \
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 w6 `; s% o- w* q, i$ C
  416.         c++;) m- Y; t# `- ~! x% g  m
  417.       }2 g. b3 Q9 D" }6 Z
  418.     }; T: `8 E. k& P  O
  419.   }0 H, O% R! H# X
  420.   unlink(".\\DownLoad\\update.txt");
    : o" l1 h, \0 K( L
  421.   if(UpdateLocal.size()) return TRUE;/ F; ^! H) N* u# b/ g  Z5 S- s
  422.   else                   return FALSE;3 o8 D3 n; f& P/ s* x" J& K! K
  423. }
    $ ?& C* r+ y9 I% k9 w$ C4 |. b
  424. + g# t9 ^) t4 w! ^  j- \; q" g
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"4 Q  s, [+ N, S* O- Y5 z8 ~3 t
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"! i' Q; C) u/ U  h1 C
  427. $ o8 v+ q, {0 v
  428. - x, |9 Q1 R8 I' B) g
  429. ' j7 k9 v  t( l, O# r
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    4 I- M, W- C: `# |
  431. {, x+ x! ~" s4 o! ^' I8 V. t# B
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 y5 i( |1 B8 S* i
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* ^  A  G, U7 V1 n/ i
  434.   {
    4 S: I* w' J+ J- N8 k+ x
  435.     char szLanguage[50];
    0 U& @7 @4 I# ~
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ ~6 w$ q+ X0 W) C" f1 F, \
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: P6 G# k$ T# M  L3 ~' T
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & O+ j$ T, W2 ?. Y
  439.     else                                   m_iLanguage=ENGLISH;" y" h! [8 b- F
  440.     char szRegister[100];/ V1 R4 ?1 M: r+ p5 {6 ^5 l
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");3 E& r2 |. O% U2 K8 r
  442.     strRegsName=szRegister;( S1 k  g( Q5 t8 I6 C0 Q* L
  443.     char szPatchURL[100];: O7 |0 Z1 U6 o8 m( l7 i6 A, _
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; Y/ q+ p0 Z' f( D/ O2 j
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# c/ ^5 S8 }+ n+ U$ J
  446.   }# p, I$ L4 _) ^6 a& n$ g2 P
  447.   else) o: Y- X. X4 n% G8 Z
  448.   {/ ~7 ^, y  B8 d) S/ _2 Y8 z
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! F8 ^7 ^$ f6 t$ Z9 Y6 x) _
  450.     strRegsName=DEFAULT_REG_URL;
    0 N2 W7 c) v# z' Z# u9 V% n
  451.   }1 F) U- r( L0 ^) U; b/ ]
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    2 i- p2 U% g  w
  453.   {
    ( x$ L3 t9 [. w  _% }
  454.     char szIP[50];) a3 s3 ]' m* q
  455.     char szDIR[300];
    6 B% A  t; N* K$ n0 A( n3 W+ d7 O
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    . I; D+ S9 u& |# H6 }3 ?
  457.     {
    8 H5 _2 C% u8 I  J3 y5 h4 n* `
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ) N8 Q" J( O" |  w. A8 p
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    3 t; I0 V& y; _& u
  460.       strHostName=szIP;3 }) n2 f6 K( l5 D5 y, z. Z( p
  461.       strHostPath.Format("/%s",szDIR);
    : B* L3 k9 L! h3 {2 Q4 `
  462.     }
    7 g6 O+ ^8 T# W' k, J
  463.     else/ x- ?7 k4 S' f! _# d% _+ x
  464.     {
    . s% y; E6 F( _0 p
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# g. j  v% f5 U8 A- Y
  466.       {# }( c# {: W. z& [5 S, \
  467.         char szLanguage[50];
    $ v+ A) a& ~; p  N5 W& b: b* m2 `
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");4 E0 ?5 u- u; I# v9 w& {, _. X4 U
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & L6 J9 h& J: h. h; Q; Q" C
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * f# G3 d4 P% A1 q& k
  471.         else                                   m_iLanguage=ENGLISH;5 A  J& M6 x% V+ U/ ^
  472.         char szRegister[100];1 c; s; o) ]8 U7 B( {# i: r7 d
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  M0 ^! j" s0 e2 {2 a& ?  }
  474.         strRegsName=szRegister;0 ]0 n2 U$ [4 n8 G! t
  475.         char szPatchURL[100];
    $ V1 |: T) w1 `4 b$ Z4 B
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) G+ v# g& V  q8 A8 O
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# k7 i% x% X: O" u: y% y; U
  478.       }
    ' C9 y7 e. \& l; Q7 o+ X0 @5 v% Q
  479.       else
    % e0 F% K# P8 y
  480.       {
    : M  I! m# r9 s6 \9 L3 ^, r
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);+ h! C! v) e: r7 @6 c/ {
  482.         strRegsName=DEFAULT_REG_URL;! X" v& _6 ?$ J. _! X7 `
  483.       }0 w7 p5 D) G. J  d7 k1 q' C* o- o0 A
  484.     }0 i/ |. T2 l/ l+ I, ?
  485.   }
    ) O( g& ]1 f0 [5 l
  486.   return true;6 [9 N0 n6 \" d* y
  487. }9 r/ k# K* ], Z  \9 N: f

  488. ( C0 T- g! @: t3 P
  489. #include ".\ZLib\unzip.h"
    $ ~- d8 c$ O% N9 W
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);, z6 b. C9 d# D. h- W9 f" U
  491. /////////////////////////////////////////////////////////////////////////////
    7 U8 G8 A1 f- m. h4 T3 e
  492. // CRevAppApp initialization
      C& R6 f& j  e  C0 d! z  {: T/ {& ]# }

  493. # ]4 [& {+ N7 d7 L
  494. BOOL CRevAppApp::InitInstance()
    ! A- d% N3 R2 \2 {; Q
  495. {; y7 o3 z* k7 p( Q" [6 w5 b$ g
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];7 z0 p: u, F4 E6 H

  497. 1 r, D0 t5 S) i0 r  t
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);6 @+ m$ l) X" c- }/ ]1 ]. o
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))0 A0 _9 p, K! s/ W! B6 w
  500.   {! W7 t$ ?. O. c! A$ L) l* l
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");9 h! l/ I6 \  T' W% |$ H2 ~
  502.     GetPathFromFullPath(szPathTarget,szPathSource);  z2 A6 C; H5 P& H$ L$ z9 K  l
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ( Z; S, x( }$ Y; }" X9 a2 q! d
  504.     {
    7 i/ ^; C, d7 w
  505.       strcpy(szPath,szPathTarget);; u$ w1 c6 G; {5 }; J* e3 K
  506.       SetCurrentDirectory(szPath);/ U6 ~3 U- a* x. x
  507.     }
    , `, v* k1 J! V
  508.   }
    0 |- Y: t! ]  X3 w2 t  g
  509. #ifdef _DEBUG
    ( W! j& v4 i& {$ {7 E0 u5 c
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 W6 j1 ]: ^/ j, y* p+ v8 a
  511. #else1 r  x7 ~& q8 t9 h# o1 X
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 P1 }0 f3 `! @3 C+ B+ R; Q/ U
  513. #endif( @1 C" Y# Q1 x! z
  514.   {( ]$ C; ^! s$ Y. `) J( o- Z. B1 t9 M  q; }
  515.     char tempFileName[MAX_PATH];, S, Q! x2 r% d, }! C
  516.     strcpy(tempFileName,szPathSource);; E8 {+ |" r7 q4 O* l
  517.     tempFileName[strlen(szPathSource)-12]=0;
    8 V& y' `7 K9 q
  518.     strcat(tempFileName,"\\$CSUpdate.exe");: R4 q9 e+ h7 |- g7 Z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    8 U* X) {. }2 C. C3 E1 N0 v1 \
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    % Y; Y" l" B0 P  A
  521.     return TRUE;
    , U, E( L9 }, v  G  u
  522.   }7 P5 a) v) J. V* q- ^' D* a
  523.   // Nuke 0118: Delete run.exe
    / Z0 L6 `$ U  r# U; H
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );, j  B' D2 L* Q$ W6 X: r  V* ]
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + ]1 B+ U  y2 C, f7 K
  526.   if(!ReadCfgFile("Config.ini"))
    1 C; D) O- V2 o1 X, ~
  527.   {
    ( Q1 B: e% p$ a( n7 e8 t: f. o- ?
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 n3 Q7 A) O5 B8 q. k5 U
  529.     return TRUE;% D3 \& `* z' y5 l8 V+ z
  530.   }
    ' V* f. B  G( d1 x; p5 H# g1 y
  531.   HANDLE mutex;
    9 F  Q& P* U, s1 V9 n& s3 ]8 w: l
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    % l) T; r3 R  ^, w& ~$ q
  533.   {! z* X; u5 `- X: A$ F
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)+ D4 y0 Y5 n* U, j
  535.     {  E9 T$ h: d' Q! |& F( I4 W
  536.       CloseHandle(mutex);  S/ A4 m' ^2 o( I6 e, c0 R* Y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);& L) c4 O# B9 a6 P( h, C5 {" g+ S
  538.       return TRUE;! S/ g  T/ {: O& @
  539.     }
    0 A9 K3 t- X# Q& |% d1 _2 O
  540.   }  
    . h4 i1 K3 R, q) Y
  541.   CloseHandle(mutex);
    ; y# w% p- V9 k' d% F

  542. * O& w; |; b) d, S- u; q- H! c7 ~
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    , y: a; @# i: `/ ]

  544. 1 l1 S; L) o; K
  545.         AfxEnableControlContainer();( l1 H# c6 W- Z9 M* |. R  `1 E
  546. 8 I6 w3 R1 p2 c
  547.   bCanUpdate=FALSE;- h' d7 q# C/ J) e
  548.   dwStartUpSteps=1;
    " [0 X# R  P5 m! }6 j: [2 g
  549.   dwProgramState=AP_NOTHING;: `0 z( ]/ U3 C) K6 f
  550. / r& z( D& U% j
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 t/ _7 \, j' M) \$ O

  552. 6 N* V2 [# {3 _0 r& Y
  553.         // Standard initialization% Y( ^  L. H0 X+ y/ F6 Y+ F
  554.         // If you are not using these features and wish to reduce the size
    ) F  W' H' L: I5 G7 {+ E( W# i
  555.         //  of your final executable, you should remove from the following6 t& ~- C  e, b/ J: ^) f+ U# u* z
  556.         //  the specific initialization routines you do not need.6 a5 m. G8 I2 S+ V) A) I
  557. 5 l3 r. n/ ?/ {: d: c* _. d
  558. #ifdef _AFXDLL
    0 S% |6 v+ q% E+ z
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    * E  _7 p$ g  |" e$ f7 r1 q( U
  560. #else- d  A0 l; _3 T' W" P* ^- I8 |: R
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    8 S( d3 U: ^3 |8 A
  562. #endif
    4 q# X6 `$ `% ~# _* y* l" F; x
  563. / p: v8 i6 i. n9 T" @! G5 U$ b  l
  564.   dlg=new CRevAppDlg;+ G+ b5 j, p# q( }
  565.   dlg->Create(IDD_REVAPP_DIALOG);3 C: K( ^$ A/ ~/ C
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    % O4 ~# I6 A4 W. W; b
  567.   m_pMainWnd=dlg;
    ! g" B" Z5 O* D

  568. 4 o0 Q2 a" E  m( t1 @" n
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);0 Y6 z; I# @# @! W
  570. : J% X- c$ {. A
  571. //  GdiplusStartupInput gdiplusStartupInput;, e0 g$ J6 }3 d1 A
  572. //  ULONG_PTR gdiplusToken;; Z9 |/ [3 E9 K8 w5 l3 Z4 t
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);- d+ `" u, c0 {$ y% O; i

  574. . h- M% l9 g- B6 }
  575. //        CRevAppDlg dlg;
    4 A' r! @8 y. |) O; A$ A- y
  576. //        int nResponse = dlg.DoModal();3 k6 G/ E" |1 `  z. p0 K
  577. //        if (nResponse == IDOK)" q8 s, g& l5 N( ]: g. K
  578. //        {
    1 y8 x/ `) m2 [0 t
  579. //                // TODO: Place code here to handle when the dialog is
      `5 W9 |% k5 G+ H( O3 u
  580. //                //  dismissed with OK3 i4 L4 j# r* h; C8 g6 G
  581. //        }
    3 q" H* A; ^5 ~
  582. //        else if (nResponse == IDCANCEL)( V3 b0 T& c% ?2 ?% ~9 n5 F9 ]# j8 n
  583. //        {5 L! u- v7 S) T2 q* R
  584. //                // TODO: Place code here to handle when the dialog is
    1 B- O4 _1 ?: S! ?& v6 p
  585. //                //  dismissed with Cancel
    1 y  B, s5 i9 b. I  [, Z
  586. //        }$ z: U% m; G- f! Q9 `% g

  587. % C4 E- j5 L- S
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . C* e2 R  J& O$ N# [7 h5 W- ?: o
  589.         //  application, rather than start the application's message pump.' d- u6 Y. U  W- j$ _$ Z
  590.         return TRUE;. U0 |* P4 }9 e
  591. }# ^! w, a3 f! ]/ R  j8 \$ e  b- n
  592. , l8 {$ R  T/ q8 j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)3 |; a" L8 q6 `1 g7 L$ x
  594. {% m5 P6 p0 h( _. S4 R) k6 S
  595.   int i;
    : H; b/ ]4 c+ V3 Y2 w
  596.   char *szRet;
    8 O/ a* V' d. h; T- [' @6 S
  597. * e$ @8 l* W3 u0 d# R: L7 v+ w" V
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ) {* Y' }; V9 q& I4 c
  599.   if(sztoken)
    " S/ w; w/ Q% p+ I8 ?
  600.   {
    - K# ^# t- `$ L5 b4 k/ q! T, H
  601.     szRet=&sztoken[itoken];
    # n' o% C+ Q4 x! U
  602.     while(sztoken[itoken]); ]  Y' j+ ^! ?! `1 g; F
  603.     {
    ; u5 I$ ~9 ]) m6 @
  604.       for(i=0;i<(int)strlen(token);i++)+ Q# E# q. |' U: d8 A
  605.       {
    ; ~, m3 A+ C6 r) [: Z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    : m; G1 o0 X; f" ^, j
  607.         {
    , j& Y0 R7 h. U. f' u
  608.           sztoken[itoken++]=0;
    ! c; \; w1 g* y) M
  609.           sztoken[itoken++]=0;: P$ _! w8 ^! L1 o8 U
  610.           return szRet;
    6 j: F/ R" V* x- S3 U- T. b) c
  611.         }- d, B" P8 p  ^0 I
  612.       }
    3 \/ K# i2 r* E* s8 B( H
  613.       itoken++;
    / p, n" S' l0 L) R6 F
  614.     }( J2 H2 L1 t6 _! _
  615.   }
    ( C, ]+ l, M% y9 F# ?" s
  616.   return NULL;+ K) ~- H, h3 c5 I( B! X. V$ V( V4 ?, V
  617. }' j* V+ U3 m9 z- T
  618. ! }& L) F. R' l3 F
  619. void ProcessProc(long Total,long Current)
    ; ~% y9 g$ p, B3 v. T
  620. {
    : V' i8 z5 v/ [8 Z' {6 m8 k3 v
  621.         MSG msg;
    : L7 H0 V. r3 |' T
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    9 g0 ^( F0 Q7 |' T
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));" q' e+ o$ E$ Q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    & q/ X" Q! v, ]: @
  625.         {0 H& m8 i$ C/ \5 ~8 u& K% Y
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ) N0 v/ D2 Z0 N/ _9 i* e9 H/ g
  627.                 {
    * `! r: ^( a' h* Q# Z9 j
  628.                         return;
    , X. e  I* M1 E( _7 h) E# a
  629.                 }0 d9 v$ v9 O3 V( P- _; C$ n
  630.                 TranslateMessage(&msg);
    6 {! Y. A9 n1 m& [
  631.                 DispatchMessage(&msg);0 X* l' c* b# G0 J* d
  632.         }       
    8 r$ ~; O; H: I; ?8 S5 ^4 s" j
  633. }
    " B' ]7 T7 K, A
  634. $ R  n  t5 H6 l" x/ w
  635. BOOL bFirstChar=TRUE;; V0 q4 `4 p/ O! j
  636. 3 ^- D1 J6 K2 o: }; P& T" \
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ; c/ N* y& H# \1 o: i
  638. {
    7 y  w: L2 I7 }2 a; Z; f
  639.         // TODO: Add your specialized code here and/or call the base class( P& s- |" V% E7 ?  h5 [) A+ v8 D
  640.   switch(dwProgramState)3 O1 S' l: C8 x7 t0 \5 n5 E9 o
  641.   {
    ) v: o" ~4 }# a, o+ Q. N+ Y
  642.   case AP_NOTHING:
    1 o& R) c! v, J3 Z) a6 r
  643.     switch(dwStartUpSteps)
    4 Q% o: ?  @' T2 @
  644.     {# ~! f) Y' n7 L8 }1 I7 F. w
  645.     case 1:+ K& a- X7 j7 H+ G: X
  646.       {
    % y0 I" W8 N* I' z; y4 C) z
  647.         int i;
    % ~' {! y6 T/ t- ^
  648.         CDC *pCDC=dlg->GetDC();  b# `( N. W' p! L2 g3 @
  649.         HDC hdcwnd=pCDC->m_hDC;( \# t+ C2 u2 M6 D" F4 ?) m+ P* E
  650. //        Graphics graphics(hdcwnd);
    ! `% \& C+ `& u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 W4 K1 o" `0 d& P1 `7 E
  652. //        INT iWidth=bitmap.GetWidth();
    * L4 D2 E4 h) R- e+ _
  653. //        INT iHeight=bitmap.GetHeight();
    4 B8 q# A3 P% W  x4 F$ t, u
  654. //        Color color,colorTemp;
    ) ^* S9 G7 H' @  `$ L% K
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)) l. d' y; ?) o( n
  656. //        {& Q! {: g+ Y& D# [( p# D6 A
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)3 N% _: r3 S& t8 j( _
  658. //          {
    2 }6 d; Y( _3 O% U" {: G
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    * u5 i% s( W# I& D9 n
  660. //            colorTemp.SetValue(color.MakeARGB(8 W: L+ C  }+ \7 V5 `
  661. //              (BYTE)(255*iColumn/iWidth),
    5 }6 x' f% a# ^
  662. //              color.GetRed(),
    5 V8 l) H9 [/ O. e, }
  663. //              color.GetGreen(),
    0 i9 Y! d" b. K2 l2 K, p
  664. //              color.GetBlue()));
    # r9 {& x! q, Z& d6 v- j
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) }! g. G' z% O8 U! c- O1 e
  666. //          }
    7 H2 I* s4 Q7 T5 M" W( c
  667. //        }6 L) n/ z: k$ h  n& Y2 w
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);% c/ S: z: u. y, S+ g0 k
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    6 q% g. }( W7 j# b3 n: Z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");" I- ]1 ~" L/ ^" q1 R5 Y
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    8 b9 l7 P  e; ^3 a. Q4 q
  672.         for(i=0;i<240;i+=8)3 U; ~" U4 o9 \4 [
  673.         {% F( b$ Z0 A: v0 ^$ o
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);1 \1 Q' w: Y9 ~, H* ?
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 S9 q( V4 |( l) \' Z; E4 ]+ G# R
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  Y4 P& p* `! x* F" ~. @
  677.           Sleep(33);- f" V) m$ Y6 I+ C! s
  678.         }
    ' w: L& Z! v9 Q+ K% j  c' t" c
  679.         Sleep(1000);8 l- e6 [! ^4 z5 m' c
  680.         for(i=240;i>0;i-=8)0 G) T" N' t. w% u8 r5 \8 m, T
  681.         {
    7 ]. b& X" f. [
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' f2 H9 B* i; J6 k" [. L
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. }4 w' [" ]. S+ e* b1 p  l7 J
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . [1 ~* V* n3 K. T9 n! N3 H
  685.           Sleep(33);
    : H+ q4 m6 ~4 r5 g0 B4 C  ^6 b
  686.         }
    9 R1 r* m8 `* @6 B3 h7 u/ N0 W
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    : _- O$ i  h) l8 z# c) K6 v5 K
  688.         dlg->ReleaseDC(pCDC);% M- S" {) q+ \& t! q7 h( v
  689.         DeleteDC(hdctar);9 a5 }6 _$ U  s) m
  690.         DeleteDC(hdcsrc);
    * ?8 T" t, v- O2 ]! S0 ~
  691.         DeleteDC(hdcorg);
    " T3 E9 S' {$ L" _2 {
  692.       }2 H# I' J- k- G7 I7 H  b9 o9 o
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    2 H2 N& U$ G6 |3 j# T% J, o
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");! v) B5 i( o+ `- Q* i3 g/ a  U$ H
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");. k2 w- K9 P6 s: b3 @/ D  q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");; x4 A5 @# |+ G
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 g( m) Z5 a% c2 O: h
  698.       if(!Dn.Connected())
    ( W, ]: F0 u. y6 t6 x
  699.       {
    / K) U# Y$ I2 H) O# i; U/ ^" v
  700.         dwTotalFiles=1;
    ' \3 k' W6 [0 ~0 D0 w8 Q( I
  701.         dwDownLoaded=0;7 f# I2 q4 R- X
  702.         bSilentStep=TRUE;
    " ?6 x, v5 B2 a
  703.         bCompressed=FALSE;  j3 Y# \# E  F+ M. d" o! I
  704.         strExtLocal.Empty();
    6 r  C3 g# S2 M  K: m- y; @3 Z' R9 a
  705.         strFullName="readme.txt";) ]; |8 W. @7 u. T* O' I/ \* O
  706.         dwProgramState=AP_CONNECT;
    * H3 f' \9 N/ v. M: B, ]; Q' ?% X
  707.       }
    + ~# G7 L/ `' p
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    5 v: Y+ O$ K# D5 E# ^+ O& l
  709.       dwStartUpSteps=2;3 I, Y; p- o3 {, H! {
  710.       break;
    ) C6 U6 _  y. c4 d: m* e5 Y
  711.     case 2:7 F- C0 H' |! l' ]
  712.       {9 P) q$ B% s- F/ n" k5 l/ }
  713.         int iEOF;: Z  A0 j2 |3 t5 P
  714.         FILE *fp;
    & i8 p& H4 s2 [
  715.         char szString[512];% \- Y" b! o" c4 Z4 g( h
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");. t: I# m1 I, Z. J8 O7 w
  717.         if(fp)9 _1 q8 w+ E. H1 h& T
  718.         {
    ) ]% T+ V% T" s! ~% Y6 y
  719.           do
      U# o  ?; C# m0 i0 M9 c- h
  720.           {$ f0 N8 s$ X. G. u( q7 J8 q) t
  721.             iEOF=fscanf(fp,"%s",szString);& s/ a- c  u0 Y) |
  722.             if(strlen(szString))
    , W. K  S% r2 l1 I. g- C8 n
  723.             {' l/ _- m$ H8 h
  724.               if(bFirstChar)/ H9 P  M/ L5 q+ G' }4 o5 {/ ^
  725.               {
    ( ~: Z) |! Y* I6 I$ Z. L3 [* ?
  726.                 bFirstChar=FALSE;
    : M3 h1 J' |  ^# o
  727.                 bConnectIsBig5=FALSE;
    * y2 P' ?2 K' ?
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    & i0 V- T/ v  ]% A5 M" y2 [" H8 }8 x
  729.               }0 x  o: h- a  }4 |$ K: |
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ) z; G5 B0 k) d" Q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - n3 A4 Q' M/ o
  732.               dlg->m_ListText.AddString(szString);5 n. l& }* V: e( I4 o# t
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 f7 B5 |$ A" [- R1 h. n6 f" S
  734.               *szString=0;
    , |+ f2 ~9 H/ @3 I* ~+ }: J
  735.             }; R! e% O  j- V9 T$ [1 z
  736.           } while(iEOF!=EOF);. E" K3 C  K% K) P. I; t3 n
  737.           fclose(fp);1 d; Y7 Q7 X( W/ {, v
  738.           unlink(".\\DownLoad\\readme.txt");" l: g" C# j; V' Z! O6 g
  739.           dwStartUpSteps=3;: Z. a) G  F7 m" d' O0 S
  740.         }0 v: ]2 H2 X+ X/ t( l
  741.       }; m- O8 s  s+ q; |" A, v
  742.       break;3 `4 n( ~; p4 {, L, f- k
  743.     case 3:
    * I- C6 ^7 z! q# c: H# y8 w# n
  744.       if(!Dn.Connected())' K( t; k; O/ ~
  745.       {
    4 J  Q( Z+ V2 D
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);6 c# P! l  L' C1 r# e: C: H  L+ A
  747.         dwTotalFiles=1;1 \3 t0 B) r& W% x
  748.         dwDownLoaded=0;
    9 B2 y& O! M7 @
  749.         bSilentStep=TRUE;. I2 c% U. r  k
  750.         bCompressed=FALSE;
    & |+ m" m" E& G, C
  751.         strExtLocal.Empty();* M/ U; x9 c. u( p5 e% b0 m
  752.         strFullName="checkversion.txt";
    + K2 \; J" _& _7 l
  753.         dwProgramState=AP_CONNECT;( L' H1 V* G, M: P2 ]" t+ W
  754.       }& H3 b, A- y5 e/ E) v9 B; G/ M+ k
  755.       dwStartUpSteps=4;
    7 Z( ]+ R. _( d
  756.       break;
    4 `# R; @$ e, y& }( ~) c
  757.     case 4:
    0 @5 h$ {; K/ Z0 J( q9 `% e0 G# ~
  758.       {8 E9 L7 E- B4 B- c
  759.         FILE *fp;
    2 D3 p" n4 t6 }
  760.         char szString1[128];
    - n" n4 R% \: R) J) {/ ^
  761.         char szString2[128];) s/ C" u; [" W. q2 p
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    / x; [5 _1 C- |5 G! G- z
  763.         if(fp)
    ' E' |8 g% e+ l2 h  ]3 K3 A
  764.         {/ p; I, y! P# g
  765.           fscanf(fp,"%s",szString1);$ d' I) J+ S% W- T0 Q
  766.           fclose(fp);- G& z( ?1 x+ ~$ Q
  767.           fCheckVersion=atof(szString1);
    6 y: r; i6 O  p
  768.           fp=fopen(".\\checkversion.dat","r");/ |( T  q6 [$ o* i  F7 }* p) z0 g
  769.           if(fp): i$ x; M6 V8 N0 [5 C" M4 v
  770.           {7 y( m3 ]$ n2 y* I1 G. P
  771.             fscanf(fp,"%s",szString2);9 I# }3 h, Q  N
  772.             fclose(fp);. o9 }& P, u# B" ~
  773.             if(atof(szString1)!=atof(szString2))
    $ r8 G! c" @% t0 j+ Q5 M- L0 q- ^
  774.             {% {9 v  [# S4 ~% l) s
  775.               if(!Dn.Connected())) c5 V% E7 ~; y1 ^# F: K
  776.               {  e; w2 j$ g# x: q2 h( q0 Y
  777.                 bFirstUpdate=TRUE;
    ! L( U+ e9 D) m
  778.                 dwTotalFiles=1;- P4 \1 X1 u2 E8 h5 D% i
  779.                 dwDownLoaded=0;
    ( t! Z1 f5 Z) }6 ~4 }
  780.                 bSilentStep=FALSE;
    1 Y* j0 ]$ r1 U0 R: j' Z4 B
  781.                 bCompressed=TRUE;! z8 T. E' F; ~3 n  r! g
  782.                 strExtLocal=".\\DownLoad\";
    + Z- o, l9 L3 Q# }4 c
  783.                 strFullName="update.txt";
    % T! P/ j2 u3 E2 G
  784.                 dwProgramState=AP_CONNECT;$ }( b0 }+ j/ P9 S- [4 g
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 j5 K' b' z/ N( Z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");1 M1 F. g# P' N
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");& d* }% T. J6 H; t( x" G

  788. & b. a6 d  \  c* i  Z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 M0 E7 [$ a# g# [5 I' @7 z! U
  790.                 unlink(".\\DownLoad\\checkversion.txt");0 g) W& p) G! C/ H( m7 H& L
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ( T4 s; Y' t* J& n4 D- N4 l
  792.                 {
    % {/ s0 {3 c1 y% f9 V; L5 p5 Y2 x
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    4 r' H6 q0 P: o, `; j4 J5 p) G
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    : P, d+ r: _( o
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");4 I- o9 F" z8 y* k' w& g/ r
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ {. c" ~# f% i- ^5 v0 w, w$ |
  797. 7 ^" _7 L- Z3 q% c- n' Z  t
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ; n( c9 ^, x( t. `. c
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    1 Q; I' G' p$ \- M
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");" E$ J5 A* k6 ~! `/ ~( {) h+ f: u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; R* i* n1 v9 n0 P2 C
  802.                 }
    4 M2 X" j8 m- x8 h9 p, E/ W
  803.                 dwStartUpSteps=5;
    + o7 l+ S1 @" |8 x" i
  804.               }# L4 H4 |4 g' h6 ^& _
  805.             }
    $ F8 P0 q( W$ s8 @# n
  806.             else/ u$ v* T2 ~$ S; s) w; P+ H8 K4 s* k3 q
  807.             {
    1 m' V6 F% e" ?+ _5 E. q" `
  808.               unlink(".\\DownLoad\\checkversion.txt");
    0 U. s0 k- ?' O4 C
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ( M7 y2 }, e8 W/ Z9 m: U
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    5 I. s  `/ g! p. d; r/ n$ v
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" @$ j1 c+ O! x) y" w0 c

  812. * E) h9 D+ ^8 P: w0 |  g3 u& c0 q8 F4 K
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 W( c  O" k: @  Y
  814.               dwStartUpSteps=99;
    ' i4 F8 ~* m' Y/ ^0 d  ?
  815.               bFinishUpdated=TRUE;) D& F. ^" x) C$ w
  816.               bCanUpdate=TRUE;
    ; {; Z9 h% [7 n0 S) \
  817.             }
    + U( V; N4 M+ t* }* q/ F! ?
  818.           }7 C/ R$ U5 ~2 b5 N
  819.           else
    ( m! H) ]. X, u# x2 y# F
  820.           {. E4 Z; E1 `$ L& m" s7 C7 P6 r* t& E
  821.             if(!Dn.Connected())
    5 {/ L: k6 }; [# B' }+ [" e" U5 v' }* `+ c
  822.             {
    % `8 Y4 J" v+ ^2 b; G! i0 b
  823.               bFirstUpdate=TRUE;% H7 Z* l& y4 P0 R9 J7 O
  824.               dwTotalFiles=1;
    ' i1 X( H0 G5 S2 H, J
  825.               dwDownLoaded=0;
    % q3 s  T* `' q4 l' L
  826.               bSilentStep=FALSE;
    2 R/ I3 t9 V$ P4 O  a' ?; g
  827.               bCompressed=TRUE;
    9 L4 i* U9 x5 j# h) w2 Z: k
  828.               strExtLocal=".\\DownLoad\";( U0 l& F6 Y7 h& H) k8 v0 J. [
  829.               strFullName="update.txt";0 T! P8 R* d5 v6 I2 O$ p  v
  830.               dwProgramState=AP_CONNECT;3 r0 P/ v0 z4 l5 g' a$ C9 [
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");8 R" n% D) t; s2 ~
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 P8 J: e4 c9 Q+ F2 L0 Y: X
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");5 ~% i: L8 ~3 Q- D  ^) j
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, Q9 `+ g3 q% n
  835.               unlink(".\\DownLoad\\checkversion.txt");
    6 x9 z) v' d* e, O: ]5 G% O; B
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    # V# f9 I8 B* R. w- L) `
  837.               {
    $ s( X8 X4 T0 i+ d$ r& k
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    , ]7 q# X6 a* u: i
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");" d1 C6 F( V8 L* q
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");& y0 i' r! p9 }2 C6 H% E
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ V, d" C' c9 T& k+ K
  842.                 ( [  ~- c' m9 A
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    6 b' Q# U. R) ?
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, r9 r$ d# `3 i" U* p
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' K3 d, O# K/ v% H- N1 o& A
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 ~: A$ L. o. |. v+ `' t" F% O
  847.               }( ]' n- P  \( S, L
  848.               dwStartUpSteps=5;
    . e& c% u, `; g/ L: V! g  M$ ?
  849.             }
    ; C$ h6 ]0 c: Q# o, ^
  850.           }2 A' Z7 I6 \% e% A) A
  851.         }
    " k% N. i' ?* ?( P
  852.         else$ Y0 p9 @+ d1 H! R6 v6 B5 ^& T
  853.         {2 o0 ^3 o/ E! j
  854.           dwStartUpSteps=3;
    7 \- _5 w9 N3 W! [
  855.         }
    8 G0 ]+ o& |# T1 W6 w5 p# \
  856.       }2 I# F4 ^4 i$ f4 [
  857.       break;
    $ {7 l  G% N$ G9 K
  858.     case 5:3 {7 h( `; U; X" y
  859.       {
    7 k. |) c% u7 b) L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1), c+ j0 \$ S. e& g- ]* \
  861.         {
    , C) Z- E3 q& o
  862.           int opt_overwrite=1;
    2 y4 W+ `7 @4 o2 ~0 x
  863.           int opt_do_extract_withoutpath=0;' J& y9 a/ s5 N  s$ T$ E
  864.           unzFile uf=NULL;
    " x: [. I8 c7 A% m0 |  `
  865. 9 k( Q# `; n' L% N, x
  866.           uf=unzOpen("Wsa.zip");
    5 v/ A. Y' Z/ T
  867.           if(uf)! n$ q0 ?6 b+ J  k
  868.           {
    . W; E) F" G* _5 T' b
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    + \9 C: O0 o7 u% K1 @
  870.             unzClose(uf);
    + X2 y$ H" {$ F
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    7 ?8 l; ~0 ^" d, i/ I- ~' G
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
      w& K; C3 E5 e. u
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");8 b7 [# K/ ^0 Y2 ?" G7 _
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' h! Q- R0 j1 f8 z: W4 y. L
  875.           }
    ( |0 ^$ ^5 i5 ^! N4 e- _6 X
  876.           DeleteFile("Wsa.zip" );+ I4 s6 }% W* e# E, o  n1 T
  877.         }
    5 u7 |$ U* z! S% d# b

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

' K6 j2 ]1 L0 h0 r& G9 [3 o: G5 O2 b. s4 a4 E

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-11 12:41

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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