找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
# t' t2 E* N/ p2 b: G4 P  P: o
  1. / RevApp.cpp : Defines the class behaviors for the application.9 D, q' `# x7 n$ h* [  I* ]
  2. //
    8 g5 E8 A& G! |8 ?+ Y( b

  3. : m; B8 R7 _) }! V( W, t- n, a4 f6 R
  4. #include "stdafx.h"
    - D0 o8 w2 ?* s+ S
  5. # t& R# p; s4 M4 S/ U# H
  6. //#define UNICODE
    + y5 l" k# d4 b# |0 X1 a2 J
  7. //#include <gdiplus.h>7 v8 z0 n/ r6 d/ w/ c
  8. //using namespace Gdiplus;
    9 f0 l3 s: o! c5 |) z

  9. & `6 l6 t2 d7 v: n1 J( _- {. r5 T
  10. #include "RevApp.h"& d7 l# D/ d8 [& A
  11. #include "RevAppDlg.h"
      u3 P8 [: F$ H  E$ D/ ]
  12. ; y  `: B* a% Z  r# g9 b
  13. #pragma warning(disable:4786)
    8 O# k$ E. C- @. O! P
  14. #include <map>
    ; q" d: A7 M. o8 W
  15. #include <list>, V, q- Y2 C) B* {- u
  16. #include <direct.h>
      {1 k1 H2 ^* ~# j

  17. 6 \( L& n" h5 E6 _8 X3 N" v0 c
  18. #ifdef _DEBUG9 i( k5 g$ H8 L/ z. p
  19. #define new DEBUG_NEW) A0 Z1 W9 v' m  }
  20. #undef THIS_FILE2 T3 ^7 ~; ?3 A; I
  21. static char THIS_FILE[] = __FILE__;, A  B# D1 @/ g9 B- L; k) k4 p1 D
  22. #endif9 W$ t& Q& h% h. W! E2 K
  23. #include "SkinResDef.h", _( X/ y5 M- y" {0 `
  24. #include "ChangeBG.h"1 h; z4 R6 E, J! E% @1 A0 D
  25. #include "AFXINET.H"( H* v( e' l' M( H

  26. / G; _/ r3 E7 }: h
  27. #define TRADITIONAL_CHINESE 01 Z* a2 Z% O6 v3 G5 ^: r! v7 @
  28. #define SIMPLIFY_CHINESE 1
    ' G3 T  Z3 ?! `. @- O
  29. #define ENGLISH 2+ f! Y4 W9 E; I
  30. int m_iLanguage = ENGLISH;, n0 g, z- z9 E  L- G+ _) ^
  31. /////////////////////////////////////////////////////////////////////////////
    , }7 ]; }& Y$ ^! Z
  32. // CRevAppApp+ P) [+ K/ k3 U  N- `* ^

  33. - r' Q9 y) T& t: u$ q2 F0 D7 [
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" U& m/ E) f( {( ]" \9 A3 r2 M
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    : @$ N$ A- O7 L8 i8 P9 A. f
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. S, L/ b, X# U4 o/ D( V6 J0 H. O
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!& t; b2 y) F4 ~5 W% J7 H
  38.         //}}AFX_MSG
    " i7 [. |5 B3 R! q
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
      N4 q) _7 b9 J3 A0 F/ L- w. B: J
  40. END_MESSAGE_MAP()
    ; \; M1 H- U9 P; ~
  41. ( N1 x9 F, i3 @7 C9 b& Z7 {
  42. /////////////////////////////////////////////////////////////////////////////
    $ a' R  C, ?# x1 L% r6 b
  43. // CRevAppApp construction
    1 p8 f3 r$ [( ^) B8 b* |

  44. 5 F  N+ d0 y4 q/ _* J: l$ b
  45. CRevAppApp::CRevAppApp()" y8 o0 q$ |: p% {; H, Y
  46. {3 w# u, r# D3 i; _* A
  47.         // TODO: add construction code here,# F: S- z; w- K* ^! N" N
  48.         // Place all significant initialization in InitInstance
    & z7 a6 C) m% C  O- K) [
  49.   bDisplayIsBig5=FALSE;
    9 T' A7 E8 M$ E! t3 B: w
  50.   bRestartUpdater=FALSE;
    % f* s) _, `0 o- G1 M  J8 M8 S" ^8 i
  51.   bFinishUpdated=FALSE;! R0 x' B) P) H7 r3 H" @
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;% Q: J8 U0 K" d. q
  53.   InitChangeDataBig52GBKS();
    $ y1 ?% ^* I2 d/ ^
  54.   InitChangeDataGBKS2Big5();  k. J8 f- y5 v4 n" }+ ]( E4 R
  55.         //8 K4 Y7 q) }0 {
  56.         bClickRunExe = FALSE;1 E* @8 J# i5 d
  57.         //4 q, E/ W+ }+ Z: R. `
  58. }
    $ m* {. {+ a' L/ [8 z
  59. 8 l! r8 d/ ~. F, S
  60. CRevAppApp::~CRevAppApp()
    0 i+ V- g$ P$ B' g6 ?4 v: W3 k
  61. {/ C7 ]5 p; I# z/ M7 B9 G$ v; {
  62.         // TODO: add construction code here,
    ( y. k, g. m5 p- G8 ^2 G' t* P% [
  63.         // Place all significant initialization in InitInstance* ?- y* a$ M9 X( o2 z6 K. C
  64.   EndChangeData();' ^2 C1 m; _" J; \+ m) e( s
  65. }
    3 _, A& n/ p9 m& Z1 m% h# \& c

  66. . M$ V7 F% A' U. A1 I' v$ a- C
  67. /////////////////////////////////////////////////////////////////////////////
    ! H) l- n0 s& _. P
  68. // The one and only CRevAppApp object
    0 v' [2 ?* [  X$ m; }7 d: h

  69. 6 p8 Y. @! o- o2 O
  70. CRevAppApp theApp;/ ]. @' |+ R" x' m7 M% f5 P
  71. % z/ K/ R3 Y7 [. y3 w: J" K
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)) N; q2 a! _- R7 D/ S
  73. {
    * r# S' q1 F3 g6 h5 A! ]
  74.   int iEOF=0;
    ( k1 @) M2 d6 N' v. u0 t" @
  75.   char szTempName[MAX_PATH];
    0 y; H5 }6 m: |  b, d/ |* t; A
  76.   *szFileName=0;
    5 m1 N5 `8 p! e* i5 {) c. y% G/ N* r! `
  77.   iEOF=fscanf(fp,"%s",szTempName);/ j7 Z9 I6 k. I- z# `' g6 M3 x# Z
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    7 `  U0 F7 J: C# E  q) ]1 d
  79.   {
      |; X1 G' b4 ~
  80.     strcpy(szFileName,&szTempName[1]);
    , `# L% w  C1 W- K2 a
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)0 w" c2 @! x, X1 n. ^; L5 ^
  82.     {7 ?* z1 a! S3 E3 I# d. E* Y8 g
  83.       iEOF=fscanf(fp,"%s",szTempName);
    * [& C# t# ?% \* P
  84.       strcat(szFileName," ");
    4 h9 M% I2 ^; H9 l
  85.       strcat(szFileName,szTempName);. u2 J1 W: w5 Z" l2 }; B
  86.     }, r# x3 G1 r6 q- k
  87.     if(strlen(szFileName)>=1)( o1 n6 N* i. i
  88.     {
    9 l7 @( [0 s( y
  89.       szFileName[strlen(szFileName)-1]=0;) j% q. T$ F0 w& \
  90.     }
      V2 v6 Z& f  _; V2 x, f8 `2 U- t+ w
  91.   }# x: O/ g: h$ v  L
  92.   return szFileName;
    0 L: H9 A+ s1 {4 O  u% m# R
  93. }
    , T  O! U' K, m" c# [

  94. ; ?7 U) Q# e4 l2 m% b
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)8 ^2 _/ L5 R, A% |7 E5 ]
  96. {
    ( c, n0 L- x" C, W7 w
  97.   FILE *fp;8 o$ q. y+ @# T+ `5 H6 i1 J
  98.   char *key=NULL;
    ! m- V. H1 w& g% n& c) u
  99.   char version[MAX_PATH];9 w, e4 X1 j- O% ~3 `9 Z
  100.   LPUPDATEFILE file,olds;
    * U: R- q8 F" E, \7 z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( [$ B4 w  @9 {) P+ e0 C/ k5 `6 m* i

  102. 2 p" i0 O# ~3 w# p5 Q  f3 I
  103.   UpdateList.clear();
    % |0 A1 S% N/ r5 \( [+ U2 ^+ D
  104.   UpdateFile.clear();7 b) c( Q( ?( p/ f% Z. _2 X* c
  105.   if(GetFileAttributes(filename)==-1) return false;% Q% g# V/ Y4 [9 }9 s. H4 `
  106.   if(!(fp=fopen(filename,"r"))) return false;5 Z/ l: F+ [7 q% r
  107.   fscanf(fp,"%s",version);
    . m  }/ T( S/ j: G+ ]
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }! K: B) j! E5 U
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ' Y$ ?" k5 z  i
  110.   {
    ' E5 {* D- |" j; Y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; E5 f- f( C# k. c3 J2 D9 J" W' q8 I
  112.     fscanf(fp,"%s",file->path);/ g4 o5 y3 k% p1 e
  113.     ReadFileNames(fp,file->file);: @/ U2 ]; N3 n  \3 W7 Q  a+ I' c3 c% h
  114.     strcpy(file->full,".");; {, [4 I) C/ a* I1 v
  115.     strcat(file->full,file->path);
    - v3 {4 [. K! `1 E8 d
  116.     strcat(file->full,file->file);% n+ k5 l9 m5 S2 t; w/ _' R. j
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    * X- d1 V$ Y, R" ~" I  G* b6 C
  118.     {
    ( v/ u1 e( p; U( i/ \  z% c
  119.       file->vers=(float)atof(version);) u) G! p7 X+ g: I' [4 }3 U3 w  z
  120.       UpdateList.push_back(file->full);& }/ p! z0 P+ K7 I9 W" b
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));2 L- l- Q4 I) l* A6 A
  122.     }, y: g- p4 B, t! x) s* [+ n
  123.     else+ x, b3 ?3 O9 P# y3 k- a0 T% ^
  124.     {' q0 t$ D. Z6 ?: g. T- Y: H
  125.       olds=(*p).second;! M# O7 R: y/ |" [& w! C
  126.       if(olds->vers<(float)atof(version))2 o( n6 g  R) v6 c4 m
  127.       {  V3 J. D( Q3 ?* q
  128.         olds->vers=(float)atof(version);! `* d7 v' g. J+ M& D* N
  129.       }# |2 K5 [7 j1 @  S
  130.       free(file);
    " t; K) g! N9 B1 u
  131.     }
    ( M. A/ R, X) D7 L) z
  132.   }0 N$ G# ?. {. k
  133.   fclose(fp);
    1 h( |  t" E6 I0 V
  134.   return true;
    3 c5 X( n$ N) v; x- k
  135. }
    ; }! l/ k8 B' |

  136.   J# {5 \# I, \0 u$ m- h
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)9 d! A- Z% a# R
  138. {
    " j- N5 ^; F9 M
  139.   TCHAR  szFull[MAX_PATH];( j+ A, X' p, p
  140.   TCHAR *token,*inter;5 ?$ D( m, k& L& a
  141.   *szPath=0;" L1 u8 ?* B8 L& _' A
  142.   strcpy(szFull,szFullPath);, a+ _8 Z7 L" y# @; j
  143.   token=strtok(szFull,"\\/");  w( m/ d) B9 N) i1 F/ T' U, l
  144.   inter=token;
    0 h. u# s9 x7 d4 Y5 V( k; m
  145.   while(token=strtok(NULL,"\\/"))( a, J0 S! [- F, e
  146.   {
    . F* {( N7 e: l  ?
  147.     strcat(szPath,inter);4 u7 J$ `: ?' Q+ H* Y& @, Z0 P
  148.     strcat(szPath,"\");
    ) j( @  M+ R" t2 l
  149.     inter=token;$ {+ R  w3 N% B" w; ]# C
  150.   }8 d1 J  R# u. [! s
  151.   return strlen(szPath);
    8 x0 {: j0 w- `. Q/ N
  152. }
    + d. B( v- @3 [
  153. - {, D5 G  h( j; j  J
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
      h3 g" ]. S2 P- h
  155. {
    4 a; q2 }. m6 ]. H# y5 }3 k5 o
  156.   DWORD attrib=GetFileAttributes(Target);
    ; @# y3 i" Q" k" U6 T1 I, _
  157.   if(attrib!=-1)
    ' q# C5 x, h' ?" K! p- a$ K  o
  158.   {
    6 G* Q9 Z! A$ _
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    % n6 h6 ?, `% Q' A; h/ h- _1 ]
  160.     {
    $ V2 d' _7 Z) f% @! T& {+ o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 x. q4 x# `# h. j+ l$ N
  162.       SetFileAttributes(Target,attrib);
    ) d& O3 k1 U" `& c5 G" `/ n
  163.     }$ f6 _! J( \0 A9 ^, D2 [
  164.   }
      f; `: j+ I& Z/ j/ {2 H3 T# U
  165.   CopyFile(Source,Target,Erase);# p/ T. u+ Z/ j" `- m' E5 [- j
  166. }  Y+ W  i1 s& Q8 I, R+ n

  167. & Z# m% S: l& h! N4 f
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...); K2 W2 c; |4 `5 S
  169. {" K+ f* K6 ^6 i9 t! N: G' ?$ V
  170.      FILE *fp;6 C  S  V0 U3 P0 Z
  171.      char  szBuffer[8192];
    ; m! U4 a( s- u! l; q( f
  172.   va_list  argptr;. J  V( R2 `/ `3 w* i5 i
  173. 4 }" q/ u' D8 H/ d
  174.         va_start(argptr,message);( x9 f- u5 ]  _. ]2 n
  175.         vsprintf(szBuffer,message,argptr);. t1 I9 R3 u" B( A" l1 ^
  176.         va_end(argptr);
    ' l) L- t7 S( y8 W7 |% S
  177.   fp=fopen(FileName,"a");
    / G% \) X- I' h# p  n) `) S
  178.   if(fp)
    * c( v  ]3 t" n
  179.   {: H2 u) p: h1 y
  180.     fprintf(fp,szBuffer);7 q1 R8 ]4 ^9 |5 e4 w" p1 ^$ n4 c
  181.     fclose(fp);$ t& S( w& Z$ n: b" u& G9 h
  182.           _flushall();
    3 [# O$ @) W% S$ g7 x
  183.   }
    8 H! y: i. I' y( Q9 X
  184. }* a$ P  r/ L% P. S
  185. ) X. R3 n4 d9 |8 {* X: X
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    # j. K, L: M( c: s9 z/ Z' y
  187. {* G. }+ A! p$ r5 q
  188.      FILE *fp;+ a, c6 d' A% r6 J
  189.     DWORD  attrib;
    ) J& m/ z( `; j* B2 M# [  g8 [
  190.   attrib=GetFileAttributes(FileName);
    . _$ m2 r3 V3 p, n) H
  191.   if(attrib!=-1)
    7 h. F5 T! C/ h0 u# N/ ^
  192.   {! X) Q, j5 m; A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ) `9 y: P! Y, W& [) @
  194.     if(!SetFileAttributes(FileName,attrib))
    " o4 ?; [& g" K
  195.     {# T, r$ c4 x+ M+ |, ?" K! X$ l
  196.       return FALSE;
    4 y+ M) Y* H  {& ]6 Z3 j
  197.     }, A5 R  Y- y) D& P- G
  198.   }
    ) i* R5 g0 E" O4 K# N3 K, e
  199.   fp=fopen(FileName,"wb");- B, e; A% |4 P* N7 G8 C, ~# k
  200.   if(fp): O6 n/ J6 {1 o, v6 a0 X. i! n
  201.   {% E. ~+ u& X4 q! T
  202.     fclose(fp);% v# _9 G/ x7 @- y7 L1 `
  203.   }" v+ `# D# _1 K
  204.   return TRUE;
      k& ?2 B# p! i- c
  205. }
    4 f. S1 }. p3 D" J+ y8 J
  206. ) f! {) \/ v4 Q7 a% ^
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      C7 J# i: U/ ^
  208. {- r5 r0 @9 g6 v# j) \8 s  }
  209.   char filename[MAX_PATH];" L9 s. M" v; R" m6 s. N' m" ]
  210.   LPUPDATEFILE file,olds;6 L7 u$ ]- v/ u1 [$ W' s2 l
  211.   std::map<int,CString>::iterator i;) n, Q' ~- w$ Z- F. p
  212.   std::map<CString,LPUPDATEFILE>::iterator p;7 C% J9 K/ @% _. I) R. [* g
  213.   std::list<CString>::iterator l;
    + Q. b: r9 U' c
  214. + x/ I. b4 C: X% u+ Z8 w
  215.   if(bFirstUpdate)
    5 w" g" b; Z, H
  216.   {
    6 r% v8 W* X  x2 H1 d$ ]4 N
  217.     dwCurrFile=0;
    5 ]3 X+ _& h/ @3 d8 m
  218.     bFirstUpdate=FALSE;
    . G, A9 S5 Q: D4 p
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + y1 h* S- z6 ]6 a* V
  220.     {: Z+ P& l" @6 m5 {' w8 I0 {
  221.       dwTotalFiles=UpdateLocal.size();
    $ A( P) ?/ |4 j% r* _5 i) O! V2 r
  222.       dwDownLoaded=0;
    , b3 w2 ^* s' s# o
  223.       bSilentStep=FALSE;
    6 \" U4 G: E8 \3 i; ]* a8 Z& v
  224.       bCompressed=TRUE;* U. R9 G: a4 z% I# d4 p5 s
  225.       strExtLocal.Empty();
    $ F; \7 C" U& D5 N" j' f# D
  226.       strFullName=(*i).second;5 l9 U1 I4 l0 v1 J
  227.       dwProgramState=AP_CONNECT;- g8 Y9 J* H) `( V- b- y/ s
  228.       return TRUE;+ R/ x9 A- A- Z' M. x, c6 O
  229.     }3 z( f: J. \, `. A" y
  230.   }5 y. f7 h3 Z8 K7 }* h, o
  231.   else if(bRestartUpdater==FALSE)7 t( I7 {7 k2 w7 T: z9 r
  232.   {: ]6 L& m. M' B4 f! j/ ?& B
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())' B& h. _( |& \8 ?2 l
  234.     {# z; {6 z0 \/ M
  235.       file=(*p).second;
    2 L+ [, f" ]2 ^4 \4 }7 ?, C
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    # j8 B) L2 d/ g: \. B
  237.       {* S% l% Y- P0 a. b. o
  238.         olds=(*p).second;2 h" |2 h( e6 T/ o" G
  239.         olds->vers=file->vers;0 e  c6 O3 ?$ S/ D9 Y+ h' b" k
  240.       }1 P# ~1 J6 B2 [; J# q
  241.       else
    6 o% G1 G6 P4 `. B" R$ v
  242.       {
    , P$ y/ }8 R1 Y7 `2 y% U8 U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 q9 e5 }/ V' ?/ Q5 R) N2 |# [
  244.         memcpy(olds,file,sizeof(UPDATEFILE));3 M6 B3 V; ?3 Q/ o7 G# V
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    , @3 `: b- x4 _9 ^0 }
  246.       }# B. O0 a% M( Q2 s! e- i
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");" v% c' L9 f9 J" ]  d" {
  248.       sprintf(filename,"(%s)",file->file);, @1 [6 W* @) a4 Z7 M" h
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # d! j- E* X+ U/ ~  w3 P' s: t% w2 s  o
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    0 b1 F: p! [4 `& y
  251.     }
    - ?' r, ?' L7 L+ o8 R7 e* r0 Z
  252.     dwCurrFile++;& ?! t* w$ ^8 u/ v- O( N9 |* Y
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% G* f5 W8 Z0 J  e
  254.     {; j: s" h5 Q3 z- o0 X
  255.       bSilentStep=FALSE;
    9 X" C! c: t; F. ^0 r
  256.       bCompressed=TRUE;  `3 ~, a. G/ Y- X" n7 T
  257.       strExtLocal.Empty();
    2 g" o7 ^' E4 m7 `8 l( h
  258.       strFullName=(*i).second;
    4 ~# q6 r6 I1 c7 a3 k
  259.       dwProgramState=AP_CONNECT;! b* F% M5 ~/ Q- \/ H" i! u
  260.       return TRUE;% i2 R; Y- X% L" I, _4 L& Y8 R
  261.     }/ i, ?* r! w) J' S3 E& w
  262.     if(!bRestartUpdater)
    ( l* j9 g" {* h& q. Y
  263.     {% B# s: w$ O+ q! K* B4 c
  264.       int iCurrSize,iFileSize;
    1 U4 a0 J+ i5 D  Q  i9 ]. O
  265.       iCurrSize=0;
    ) k( m4 _: R% W- m( b& r9 v
  266.       iFileSize=UpdateList2.size();6 ~& q5 r1 ]% x. R
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    2 i; l: q  w7 S9 H" k7 R
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    : }6 m4 M0 C0 Y& I. B- ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");+ @. z& i1 y9 ?9 n: B
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ Y8 \- n* f# i/ Q
  271.       Fclearf(".\\update.dat");
    5 @& \4 u; l9 g3 A% m( T( o
  272.       Fprintf(".\\update.dat","Bloodyf\n");* s' n' A% R+ E2 T% C% t
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)# c- c' b( q% o( W- P
  274.       {
    5 v; u' Z1 p$ R9 n1 f: N
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())7 z1 v/ W) Z$ ^8 F8 |8 q7 z
  276.         {& Z9 x6 p& ^. B! h! I8 `
  277.           file=(*p).second;3 @% v! O! K" V/ U' ^# D5 P
  278.           sprintf(filename,"(%s)",file->file);
    7 V, T' v6 V- [2 j! U) W) P$ L9 g4 t
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # c) j7 p5 C' U" a
  280.           iCurrSize++;
    ) m& h& P: k0 Y# F  R* H6 X+ t
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));9 p) Q6 p: h5 z: F. b
  282.         }
    . b7 Y) d2 I; g$ o
  283.       }. v/ y5 d( j- o5 O
  284.       unlink(".\\update.txt");9 n  d+ R& {- N6 @2 |" L
  285.       unlink(".\\update.tmp");
    ' {: M2 U- T2 C. ~5 f
  286.       Fclearf(".\\checkversion.dat");
    % f8 R7 o* i* [' z3 m
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);" h# K, v! G( B' _; j. S
  288.       if(UpdateLocal.size()); T; X; x6 v. \" J8 |
  289.       {% j. S' ]0 x$ ]) z5 ~
  290.         UpdateLocal.clear();
    0 C" ^0 F5 B0 U7 f8 ?" }% y3 K0 ]) t/ C
  291.       }% Q6 ^/ ?  ~; o4 ^+ H; C
  292.       if(UpdateFile3.size())# P1 G' s6 _+ T2 D2 n9 s: R0 n" [- V
  293.       {
    ( ]! p9 P& {, Q" F  J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    / z& l. M& \/ ]4 c* H! e
  295.         {
    ) ]+ v1 U- t& b7 T0 o* H' o
  296.           file=(*p).second;
    . q# [+ e3 G% i; I) m( `1 W
  297.           free(file);
    . P0 N2 f+ ^( Q) ]
  298.         }: ]3 _2 k' |7 l( i
  299.         UpdateFile3.clear();
    - ^$ A8 ~  ^. ]/ U
  300.         UpdateList3.clear();# F6 f$ c) A4 ]) P7 W6 @5 i$ R
  301.       }
    ! z" |: a) f$ a
  302.       if(UpdateFile2.size())
      c6 d& \6 E8 o0 \
  303.       {
    ; X7 [) O; J& V9 y7 [/ _, s
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" z2 G) `. j  ~7 K
  305.         {
    5 X. t$ u) l$ _
  306.           file=(*p).second;
    / x: t( D$ }1 C7 w8 g- A  w
  307.           free(file);
    $ A& w+ H( E% K% o+ n
  308.         }
    ' h- C" h( [. @; E. P# i
  309.         UpdateFile2.clear();
    ( B7 S  Y0 B1 }
  310.         UpdateList2.clear();
    ; r3 d' k( G* w# d: \$ U8 e
  311.       }
    9 f: G, [/ e# L' W# y
  312.       if(UpdateFile1.size())
    8 _# v0 `# {& T5 c, M
  313.       {
    2 [# O0 X) u2 y; C7 p( X1 M
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++): q  R, H, m5 i  u; _2 \; ^
  315.         {
    , s$ y2 ^. |0 a3 T
  316.           file=(*p).second;9 u+ n: b  v6 b+ m
  317.           free(file);
    % @/ n0 h4 p7 j' _8 o: p: b9 s4 w4 q! H
  318.         }
    . \& [5 h" i. }! L
  319.         UpdateFile1.clear();
    1 g. c. {+ @$ Q7 y1 Q
  320.         UpdateList1.clear();1 g' i& o! d) r/ Z0 d0 A
  321.       }6 `/ D! ]* g7 a% x6 i" ?" x
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    # _( I' G( H3 l
  323.     }
    9 }4 S" i  A7 P
  324.   }. y2 u; m3 r9 I2 ?2 S( Y& k% ~( T2 \
  325.   return FALSE;: ~3 X/ u3 v3 _1 Q) S2 e; ^: @2 O
  326. }
    ) k& p, F8 J0 q3 m/ E

  327. ) W2 v4 |0 K; ~1 I
  328. void CRevAppApp::ClearAll(void)
    / M6 n4 t. @4 b+ a+ Y5 S9 B
  329. {+ o- m0 O6 v+ m$ h* m4 l
  330.   LPUPDATEFILE file;' l6 g( u( s8 i  u& n3 x5 G4 j/ m1 _1 O" g
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * ]7 E9 O- }, t

  332. ; v4 F! h# x" P! W- m  w/ \" H
  333.   if(UpdateLocal.size())
    * Z+ b  l1 S* f% ]8 j
  334.   {; ^- e+ J) n/ U* r
  335.     UpdateLocal.clear();$ g+ R0 i2 U) Z: j7 [9 ?" R$ F
  336.   }. G6 Q) ^* j0 C
  337.   if(UpdateFile3.size())) S# j& J7 _- o" ?# a
  338.   {/ N7 L4 K8 @  I! @) p
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 w% q9 d7 l  J9 G
  340.     {
    4 ]* d: M0 Z! W3 _
  341.       file=(*p).second;
    6 i6 k% U8 S1 j; j% S. h2 [' T+ N
  342.       free(file);  q8 b7 O  N! @& Y# D" u
  343.     }
    2 }+ @: n3 y! i3 D* [
  344.     UpdateFile3.clear();
    " S: x4 b5 ^# o
  345.     UpdateList3.clear();
    ; m& b/ p; w; _9 Q
  346.   }+ e: ?2 ^; D' W# K
  347.   if(UpdateFile2.size())
    : W4 h+ x' c( ]; l$ @1 C
  348.   {- F2 Y, p8 k% R2 h! T5 }" ^, H! M
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ @6 F7 @! P7 F4 B6 y
  350.     {
    4 X( B: Q& K' Y
  351.       file=(*p).second;3 z5 k5 ]0 q, _9 r8 ?
  352.       free(file);0 p# B" o7 e0 c4 R2 u  @
  353.     }) K, R1 S9 S& T  Q
  354.     UpdateFile2.clear();6 {5 ]4 x% D. l8 J% g" D
  355.     UpdateList2.clear();5 M( R# [2 Y) z* t4 a
  356.   }
    & i' }. b  X' \2 g$ a6 ~7 C; U
  357.   if(UpdateFile1.size())9 u( J+ P: U, x# _5 i0 z# l7 l
  358.   {
    8 C- K, @" m" T; X/ |
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) {8 ?* \3 M& x4 o
  360.     {
    + ^; Y( G0 L" X% e$ D3 t  y# C- F
  361.       file=(*p).second;9 U4 R: ^' c/ [) E
  362.       free(file);
    ; G1 g+ S" U2 ^/ W
  363.     }
    7 x) ?* w5 b; }% U
  364.     UpdateFile1.clear();* E& U9 H- n" p) ^& z
  365.     UpdateList1.clear();
    3 a$ r/ ^/ U# j  x1 U: b3 H
  366.   }" f% t- F" ?3 A+ l( L- {/ T1 [+ k
  367. }  ( w$ c( m7 e" S9 P
  368.   
    " v! d( E$ x9 c9 m. c0 D
  369. BOOL CRevAppApp::CheckLocalVersion(void)% s: u  O8 F4 u& J1 T
  370. {/ t. P( W; K6 X* f7 }
  371.   int c;
    6 d0 ?  F; A% R! ~' H' R+ F6 X
  372.   LPUPDATEFILE file1,file2;8 O2 w# e' j; @9 c* H* h" O
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , ?" \4 Z( @4 T: A: ]7 Q
  374.   std::list<CString>::iterator l;
    5 R' @) L6 q0 ?3 f& W/ M' i

  375. & z) F- n1 Y% H2 R/ \' T7 P2 p* ^, t
  376.   UpdateLocal.clear();
    . X# a3 Y8 L  {- a8 z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    & g- B: l) [( y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ N8 R3 Q$ }- s2 t3 F
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    " c1 }5 E* V; F( I' }7 V
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);3 V, _( }) E, T( ^
  381.   if(UpdateFile3.size())# x4 a- L  W! G* r1 R
  382.   {( j1 M1 [" Y7 U5 U* e
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    / T. F6 |5 S( {( z; {4 J7 J" g
  384.     {* ?8 z  k: Q) F" F  [
  385.       file2=(LPUPDATEFILE)(*i).second;# @! T; ~9 z) Z" A5 `/ W) f
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ I' ~- \9 Q* {6 Z/ J
  387.       {/ ^% _: |5 i; P9 C
  388.         file1=(LPUPDATEFILE)(*p).second;$ i" M4 P# Z! B; P9 L
  389.         file1->vers=file2->vers;
    ) c3 ~/ N& R2 R  T* K- i
  390.       }7 b: w( Q" i4 F  m1 x, p' w' B
  391.       else9 Y& E5 _. {! Z1 g6 w0 y
  392.       {1 b. x6 @; i0 A2 s
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , P: G5 N. V0 s/ m; J- [3 [9 v0 W" O
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));3 k& t! N: n- ], e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));8 f% f+ @0 i8 Y# \: t$ E
  396.       }) y& h' V" Q% M6 Q; \  A
  397.     }
    5 U2 D% m3 ]0 X8 [
  398.   }* m+ S: z6 w0 n
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 d6 B+ B' A) K4 V  k7 @* s
  400.   {1 T/ {9 ]. `% I' ^! Y- `1 |3 k
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    / f% F. g, a% {: k# o' {, U
  402.     {3 O; a* N  }# {. M) @
  403.       file2=(LPUPDATEFILE)(*i).second;
    . n. L5 w% O# c/ I
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ z' [$ N3 W, c* z6 W* f
  405.       {
    : N/ c7 ~* S% y" W" k! y7 D
  406.         file1=(LPUPDATEFILE)(*p).second;
    ; Z( Y- v  D: J# ~% n
  407.         if(file1->vers!=file2->vers)
    ) U! P' o9 t% I
  408.         {
    # Q  {1 D  G. t/ E4 O4 K5 r+ R& k: p
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    6 ]  l1 F2 Z+ U: B* G+ B
  410.           c++;' n, T, K6 n+ q9 K" a9 L
  411.         }5 T1 Y6 V) J7 _' ?) n8 w* G
  412.       }
    2 \. z* W% j% g+ I
  413.       else" O' G7 ?' }2 j6 O. h/ M9 O; L
  414.       {8 ]0 E$ n/ e$ [/ k7 y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* g# i$ Q' A7 V6 p: D
  416.         c++;5 @3 q: O2 ?! M6 h, m, m: l; Q. k
  417.       }
    3 g* n& u- t5 r& M. n
  418.     }* C! M9 T% X( D7 N4 ?
  419.   }7 u0 ^6 B: A) {
  420.   unlink(".\\DownLoad\\update.txt");
    : \  w% I" W4 {" x# F/ q3 N6 ~
  421.   if(UpdateLocal.size()) return TRUE;
    ; k, }* ~2 G7 O+ s0 j
  422.   else                   return FALSE;
    % l! h2 L1 s) I
  423. }
    ) L* a( D2 ?2 z
  424. : u1 Q5 m3 U, G- J8 \! V
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"/ U) Y! D) }% \, N
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"% B: Y& k  G: E; ]% ^3 `4 ~! y$ ?

  427. 4 a% `8 i# O3 {/ O- i! Z" U

  428. ) N. y1 g1 D! `9 ^4 A0 }
  429. # D$ b$ F- c/ S* r* @
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    + ~( B, ~* n  U" A  }" r- u: X  ?9 J% Y
  431. {7 R- G' X6 o" O! `; ~. B
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;. G7 G: X* ?$ _. Z! J3 z/ c( X
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- }: C9 x1 D+ q: @
  434.   {& j' r3 Y# X$ M, r$ {  v6 V. C( {6 g
  435.     char szLanguage[50];
      y7 z; w0 K* m6 c* v7 H6 s
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . E4 o; t0 S8 u
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 F' J1 B+ H& {2 n
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 L; @: S* O; Y8 H0 f) J8 |
  439.     else                                   m_iLanguage=ENGLISH;' M6 d2 [- z& |0 d0 ~* g% _
  440.     char szRegister[100];
    ( P' c4 o8 h5 |: n) s) Q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 h/ q" o2 o* B$ B% p
  442.     strRegsName=szRegister;
    & _( q% {* |/ x  G. }7 f. T
  443.     char szPatchURL[100];7 n$ r, T: z- ], A2 x" K# ?" h
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) f# ?  @* c6 `* I. g
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' I6 D; M& ^( K9 c0 U* L2 a3 `! h3 O
  446.   }: {  x) U. \0 H4 V( w* I
  447.   else7 j# K! p. [' l$ X) t; E0 D& m, O
  448.   {5 F0 R4 j, R# |
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);, }4 T4 N- A/ N) G& F, j; T  }& q
  450.     strRegsName=DEFAULT_REG_URL;" l' \+ L0 ]  s0 M! C
  451.   }
    , n9 o8 Z1 U5 R0 A3 w4 U9 P
  452.   if(GetFileAttributes("hosts.ini")!=-1)$ ~: C' E) k9 q3 e. @2 `
  453.   {
    4 m3 o; M3 E9 o) d
  454.     char szIP[50];
    ( D+ g" f; Q5 y8 p' }8 \
  455.     char szDIR[300];
    - W* k9 c2 b( Y9 Y  \  D' N* e
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    & {; A7 o. T+ G6 W
  457.     {( I% V! M1 s- T0 v( K. x7 E
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    $ w& D8 N5 P2 @3 K" P+ N
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    # i: L/ `5 u* I2 h2 I& c
  460.       strHostName=szIP;
    6 D# c; z/ N% A( E: H5 E
  461.       strHostPath.Format("/%s",szDIR);$ f2 _) d% B! t2 h
  462.     }
    $ V2 |7 j/ }, ?* Y
  463.     else" k% X9 \6 a& E! @  f! N. V, Z
  464.     {
    ; B: T( c/ a! z4 ]: n0 x9 r/ q: m
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 c/ s/ {1 Q- [) ~% E/ k& l* @( K# s' L
  466.       {
    " z1 ~- n, A& G& S$ D8 b! }% k
  467.         char szLanguage[50];9 ?& `0 b7 V. ~
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 r; N6 E( X  y0 r
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& z" ?& W( S% _( f7 l3 E
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % @# {8 ~! Q* x7 }: v# l3 C: m
  471.         else                                   m_iLanguage=ENGLISH;  e- w$ L/ H1 Y1 j0 v6 E* O& E4 W
  472.         char szRegister[100];  m9 r. `2 g* K3 V* S( ]' Y: |2 |
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + Q2 N! _8 _, t9 E# Z$ l1 `5 E
  474.         strRegsName=szRegister;
    % l0 s: ^% ~+ m+ V
  475.         char szPatchURL[100];1 J# X8 Q- Q" w) s. Q
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 m" x; M& h/ Y2 x' R7 ]- ]
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( v, a9 `, A/ i3 l8 I+ v( Y
  478.       }
    ) H# S6 t; T, \4 H0 B
  479.       else5 Z9 `, q, t* d$ r1 h
  480.       {
    / t. \2 _" V& h1 H8 }' \% a$ ?
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # S# f, l3 d+ f& T3 Z
  482.         strRegsName=DEFAULT_REG_URL;# K% ^" ^  {0 D9 x
  483.       }+ N! i  Q& r0 F" Y
  484.     }. ], W' x8 ?# d3 j
  485.   }
    " Y: P7 @- G' Z; z1 s. L: M
  486.   return true;+ L# w0 W1 Y6 B% ~" i# m
  487. }
    . s$ `: H) Y6 s* |/ n8 n9 r
  488. 1 L# m7 _+ _1 l: x
  489. #include ".\ZLib\unzip.h"" ~# S1 W- w. K4 {8 C
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);5 s; W8 M  }# X6 l3 @5 p( n- Z) G
  491. /////////////////////////////////////////////////////////////////////////////
      g/ @2 Y9 ?- f/ I1 }7 \
  492. // CRevAppApp initialization; k' \2 o6 P$ i- D, T9 A* h, X# }

  493. 6 Q: G6 t9 E7 X2 ^0 J
  494. BOOL CRevAppApp::InitInstance()
    ) H+ Z' P6 j/ X2 M/ d8 }
  495. {
    6 a( K: @$ X  V6 Y1 x
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];4 _* c/ w5 {- T. h9 N! i

  497. : B- ?; f" n+ R" o* L5 \0 |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);) ]* r  A; g% T1 {/ g8 U/ M
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))  y; z: w7 d2 |( `/ z
  500.   {
    + z; @6 v6 R) i$ {
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");# v( ?8 T+ z  {" I% P* Y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);6 Q4 B) B! e, b! l+ i- H
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    3 |+ {* u: v5 I7 q, \+ _
  504.     {4 S, A& i+ h2 O8 R
  505.       strcpy(szPath,szPathTarget);* X& k% z! G# J0 Z3 G( y6 g" W
  506.       SetCurrentDirectory(szPath);/ U/ v0 y. W" G# B( V$ y& f' K; g
  507.     }" R1 V2 _; ^9 `
  508.   }
    / ?& m# t, q  J8 f& I& g+ u
  509. #ifdef _DEBUG% C4 b( T% ]6 ?' r( P/ y( Z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . L2 C8 C$ a* X8 |1 _# |
  511. #else
    8 r: F# I0 \/ C+ l+ Z# e: R, X" c
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ V% W* z* j3 F* o
  513. #endif
    9 T- e( {  m1 P# v8 i9 t' N3 {& r0 w) S
  514.   {
    ( N% U) B% _0 m% e# J7 X7 X
  515.     char tempFileName[MAX_PATH];
    5 ^  e- e2 Y0 M8 B7 O* n2 p' M
  516.     strcpy(tempFileName,szPathSource);4 v# t7 O+ p6 {- w3 M
  517.     tempFileName[strlen(szPathSource)-12]=0;# b% ~+ W! P. J3 ]
  518.     strcat(tempFileName,"\\$CSUpdate.exe");3 ?) U0 K6 K3 u0 K" L5 i  K# X
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ) x  L3 D( ~2 Q* P+ n& K
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    - d  ]& x2 Y' U( A
  521.     return TRUE;: x4 S/ {6 K$ ~9 r; _8 C2 _# ?
  522.   }. ]) `4 {/ \' z  S
  523.   // Nuke 0118: Delete run.exe, |; M8 d% `) U, V$ R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );0 V: L% X& S, M# I8 l) d$ P
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    # R% k- h# {. e1 V/ Z4 I2 i# p. f
  526.   if(!ReadCfgFile("Config.ini"))
    : E8 p" E% m  |
  527.   {
    ! n4 D2 M7 ^; s1 h. q+ f: Z; {
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    4 w3 M, l/ G+ z& V2 L8 }& }4 U
  529.     return TRUE;7 m$ J" A$ |2 D, v8 y
  530.   }6 q" w  R- `1 \3 t
  531.   HANDLE mutex;
    7 k! _7 r" X2 Z- C2 m
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")), @  K7 V; y6 M& D" \2 k
  533.   {/ ^- r; L3 W* C1 H! c
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    : n" |$ u; I3 L7 O8 U9 O  y( W
  535.     {
    : i; b+ s& s2 E, d. ~0 j
  536.       CloseHandle(mutex);
    3 b' C3 M+ m+ _8 `  L
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ) ^6 j" m, H' b
  538.       return TRUE;
    6 Q  S5 F+ T# m1 n
  539.     }
    # t) k2 x1 \5 I
  540.   }  4 T8 d. `+ ~) [- r9 j  e* p7 _0 `
  541.   CloseHandle(mutex);" B) Y' B7 O7 e' S
  542. ( q; Z2 d- ?8 A8 h
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);8 r& @7 X6 P5 n0 e% S& d
  544. 7 n6 R$ I2 Q; R# j9 N/ k
  545.         AfxEnableControlContainer();
    0 {1 \& J* k; k& S
  546. + a% w% m% h- T& g4 R) b* I7 ~
  547.   bCanUpdate=FALSE;' Q" [  T4 R9 o1 |; M9 x- N2 S( ]( T: v
  548.   dwStartUpSteps=1;9 P+ C* I- B) ^" e% g  {/ p
  549.   dwProgramState=AP_NOTHING;
    0 C3 Q, B' U2 d$ j9 k* O

  550. , a- a* _- E* J* V, F
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    - v. R% [+ M) d2 z; m& {

  552. 1 r2 W, Z& R1 s0 _; y% }
  553.         // Standard initialization
    0 h& L! `7 A9 m# R: e
  554.         // If you are not using these features and wish to reduce the size1 y6 ]; c5 f& ]* h* P  B
  555.         //  of your final executable, you should remove from the following( i/ u* q  a% \% I
  556.         //  the specific initialization routines you do not need.% M: M0 G* o( E7 z* o2 H

  557. & h% s' s4 x6 s5 I5 {
  558. #ifdef _AFXDLL
    * |% |: T1 f" {" c6 i6 @
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    4 h5 ?! A7 _8 l$ M; l% T
  560. #else5 y* h/ z! I+ z& H1 e8 c4 D
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically4 A1 P5 ^! m9 r9 d1 ^" h
  562. #endif
    6 w- M- m* ?6 ^, N5 ?! G

  563.   u! O% p% P& ]9 k" _# S4 s
  564.   dlg=new CRevAppDlg;
    + K1 j% k- V  W! x: i' c- C1 n
  565.   dlg->Create(IDD_REVAPP_DIALOG);9 t, T" Q0 f3 v
  566.   dlg->ShowWindow(SW_SHOWNORMAL);6 q' C+ A+ J& z4 H  C: n& _
  567.   m_pMainWnd=dlg;
    $ a' o6 o  N: ]: r" @- H

  568. % _: h: d# m* n
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ' v7 Q; u5 J& y* W( Q/ W/ ?' U

  570. ' ~/ `3 y  {! J& Y1 J- O: Q
  571. //  GdiplusStartupInput gdiplusStartupInput;. y( R) l; I/ i/ T1 [
  572. //  ULONG_PTR gdiplusToken;9 \; k$ V9 V( G
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! M) `% B! y# U/ V
  574. 0 Y# E( h6 m1 B2 N0 }- t& O
  575. //        CRevAppDlg dlg;
    9 X  [2 K. r  s: G  T$ A
  576. //        int nResponse = dlg.DoModal();
    0 Z; J+ W$ e) n% ?( c6 O% F
  577. //        if (nResponse == IDOK)9 ~  _! K3 l; g# b  S9 O" e; A! u! |
  578. //        {
    ; Y$ Y1 P& H( b
  579. //                // TODO: Place code here to handle when the dialog is
    - w5 E/ h/ F' o2 k1 J. }
  580. //                //  dismissed with OK
    / Z/ p6 ]5 ?6 t2 ~* ]9 F1 `7 ?) X2 d
  581. //        }4 f( S- @6 w4 `: H. j/ J6 I1 N
  582. //        else if (nResponse == IDCANCEL)
    0 I4 K1 x0 x5 S* D8 ?" Y$ F
  583. //        {8 m7 S6 A# d7 P: @% e; J
  584. //                // TODO: Place code here to handle when the dialog is
    * U3 D. p+ I# ~4 \
  585. //                //  dismissed with Cancel6 h# q; d' f7 |* _: n) O0 ?
  586. //        }" w( o' t8 U# J, }* z9 `+ n
  587. 9 Z; `3 [8 ]" w0 V% j
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    / c. f  w3 j3 `7 S# f
  589.         //  application, rather than start the application's message pump.. y3 d/ H' |5 q2 {. v4 g
  590.         return TRUE;* j# Z, u# {# p( R  r' Z' |
  591. }% Z2 t4 \' M5 x: q& L- K$ S: W

  592. ! d2 v  x, f$ \% l* G
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    9 g7 B8 o# L9 z5 d
  594. {2 m9 y0 p" N' p0 B4 ~: o
  595.   int i;8 u2 E% ^  E0 G
  596.   char *szRet;5 _% F* u; m: y7 g+ W, s7 z# B9 V
  597. 0 Z# F" N3 Y/ }% N
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    * B) M+ B! n$ _6 J; U
  599.   if(sztoken)
      r- d8 R, O6 {: @  V* f1 {
  600.   {0 |8 [/ @( r' R
  601.     szRet=&sztoken[itoken];3 t6 _, H$ {. Y6 B" u; |: J6 ~
  602.     while(sztoken[itoken])
    * t$ v' c9 ^3 _" X
  603.     {& a* N, c. S) z  U6 e" }4 e
  604.       for(i=0;i<(int)strlen(token);i++)
    ' O4 D/ h+ h- o% u6 ~, ]% D* r
  605.       {
    & P1 a. V6 r( x/ u) u' X
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    : f3 o! |, i4 h) {
  607.         {. [8 S( J  v6 Q1 ~
  608.           sztoken[itoken++]=0;
    ' b. Z" A+ R% r, a4 f6 E
  609.           sztoken[itoken++]=0;
    ( H$ w6 t" s% k' J0 ^8 [( _6 j
  610.           return szRet;
    * m$ K* c; V) C' b1 E2 R
  611.         }# [" {7 A9 I! ~2 {
  612.       }9 y, v- k' j6 \2 g, g% O; g+ r# ~
  613.       itoken++;9 `1 Z: x/ p2 N# @( E; o+ Y
  614.     }
    , K) V4 ~7 }. q: Z8 Q
  615.   }
    6 D: y& S& [; s5 y
  616.   return NULL;
    % A4 h9 H1 M! J2 `% H7 m' Z
  617. }* }) L0 a  ]1 S; k; F3 C4 k1 S
  618. 3 r; f, D5 v% D2 V: @
  619. void ProcessProc(long Total,long Current)2 ~! x. y/ s) v4 E
  620. {& s7 C* }2 B1 q" S' \( W: R  E$ m/ B, [: U
  621.         MSG msg;
    , u# {3 T4 z" C: f. e
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);4 a) S) a2 H" }) }
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));* g+ J# x) M2 T& ~5 Y2 Z
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))* \7 R# u' T* s/ \8 O# Z7 K7 b+ k0 t
  625.         {5 _8 f  `  ]) t
  626.                 if(!GetMessage(&msg,NULL,0,0))
    % e' p% V1 m. t( k
  627.                 {
    # Y) a4 O3 S' k5 C( T8 A( i! R
  628.                         return;
    , b4 a1 E( ^8 o1 F: i
  629.                 }8 C% F% z2 X) e: Z3 u* {: T+ A5 `- U
  630.                 TranslateMessage(&msg);
    5 Y! N9 X; s1 x4 s
  631.                 DispatchMessage(&msg);
    ; i$ n: o/ b" \
  632.         }        6 y6 U, {3 n# c6 U
  633. }# |4 n; G! Z" [- }9 _& U: ~
  634. , Y: b3 b% |2 c
  635. BOOL bFirstChar=TRUE;0 G# B& f. ~: h8 ^6 L$ x! i

  636. / }0 K& C) _) Y$ j# X  P
  637. BOOL CRevAppApp::OnIdle(LONG lCount)& u2 c2 ?2 y7 e5 Z5 Y
  638. {5 a: X( \# v. C4 L( |
  639.         // TODO: Add your specialized code here and/or call the base class/ }9 D' p9 D9 F/ t0 X
  640.   switch(dwProgramState)
      f, X4 O  q8 o% r1 `
  641.   {( s  x0 P; M1 {+ p: B8 k
  642.   case AP_NOTHING:
    ; C, d! B: e# A. r9 U$ O! ]
  643.     switch(dwStartUpSteps)3 L1 q, E  Z/ E, y
  644.     {- i0 f8 i* X2 i" M
  645.     case 1:; t% F! f0 h9 C, [# W- {3 W( g
  646.       {* T* D5 N1 M6 l1 V: k0 }; u
  647.         int i;( b4 G! n; `, C  O! A1 C0 M
  648.         CDC *pCDC=dlg->GetDC();
    ) [, J! U/ w' O% Y
  649.         HDC hdcwnd=pCDC->m_hDC;
    ' C3 J% u0 v1 {
  650. //        Graphics graphics(hdcwnd);% H3 v$ l* l, z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    2 }' M( B6 u/ ~5 Y# H3 W8 e0 x5 c
  652. //        INT iWidth=bitmap.GetWidth();
      r7 `& T/ |! Y. ]+ X( W8 Q* |
  653. //        INT iHeight=bitmap.GetHeight();4 P  ~  j! |3 c' \7 C( O
  654. //        Color color,colorTemp;8 T7 F/ @8 b% J) K7 Q8 W
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    3 g& ]/ n+ _. a, a9 k
  656. //        {
    ! \7 n, ?) g  x  B4 e
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)! w8 w+ G# |% W4 l* }8 Z
  658. //          {
    0 L1 S& E' g+ X% Z. B1 h
  659. //            bitmap.GetPixel(iColumn,iRow,&color);0 a0 S1 ?/ E1 b5 L( ^
  660. //            colorTemp.SetValue(color.MakeARGB(
    8 }; u! L6 f7 z! H# c6 T
  661. //              (BYTE)(255*iColumn/iWidth),
    ' ~7 c' E; \( V+ I8 ]& n
  662. //              color.GetRed(),
    5 M" P& Q& P  g- `
  663. //              color.GetGreen(),# i" U/ l( U; R+ ]/ Z! n  U
  664. //              color.GetBlue()));
    8 s; \, [) ?$ s! ?% ?6 D) M/ ]
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    5 j1 ~& p. L$ x5 O; q
  666. //          }
    2 ]9 x1 ?- A) y3 `5 c
  667. //        }
    9 N. r4 w: G/ [! X) H( }( s
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);7 q" b7 ~9 b! h2 G: p
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; Z' I/ ~3 d, ]; ~6 h9 h
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 {5 N% L$ V' x# @$ o! Y0 D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 |3 ^- M& P5 y, n; L: w- x
  672.         for(i=0;i<240;i+=8); @5 g  D) |: B' X% @" m* I
  673.         {+ R+ w$ v/ I% o; F: f
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. o* S( I' o% h- ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 M2 Z, r* `" Y4 G# v: ?: h
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' H: |8 s/ ]7 A) q- r& v
  677.           Sleep(33);* j$ g! b5 j% X: J. g9 K8 u
  678.         }
    % j+ i- c+ W: y0 |* @- L
  679.         Sleep(1000);( ~- [. e; n9 v) D: T" n
  680.         for(i=240;i>0;i-=8). Z( r: U6 Q; y/ s* |, c) U
  681.         {
    ; q3 V8 L5 m: }; c' O
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. j# A( U* f+ O- c6 a7 w9 [
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 x& e. _6 _  ]1 ?; u+ J
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 Z4 F# @  H* [
  685.           Sleep(33);
    , V3 ?  t# x: v, x" ^
  686.         }, k2 F- a5 x4 h& q- y! T! {) |
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    5 Y; f- y( m/ F- X
  688.         dlg->ReleaseDC(pCDC);
    , P8 _2 M/ Q4 a6 _5 }# ]* z
  689.         DeleteDC(hdctar);& F7 v; A, `7 {, I
  690.         DeleteDC(hdcsrc);0 f; t- C- }! t. G
  691.         DeleteDC(hdcorg);
    4 O, L% b9 R. s) B& ~! l- j
  692.       }7 Q: W9 Q+ l. f, k
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    + J" m4 A; t& e3 H
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    4 f( ~& C' D- k% W$ P# s, N
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    * X# g( l' o' j. W
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    6 @7 m) f% K; [" ~) z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# k! D7 t) b9 M% W) G. I5 I/ t
  698.       if(!Dn.Connected()). n3 N, L- o0 r# l* g
  699.       {$ H+ ~$ ~5 L. ]1 d
  700.         dwTotalFiles=1;
    9 i/ N4 x  P2 L
  701.         dwDownLoaded=0;& J$ E5 c9 [( d4 r1 [
  702.         bSilentStep=TRUE;# y6 R5 p8 d9 W* J5 o
  703.         bCompressed=FALSE;
    : w! C1 r2 @. d% ^
  704.         strExtLocal.Empty();/ y2 o$ g4 n( l
  705.         strFullName="readme.txt";( N" h( K+ r, r6 R& H" i: U
  706.         dwProgramState=AP_CONNECT;$ o7 a. y5 A5 ^; y' o; X
  707.       }
    & J( E, ~8 C8 C$ F; O/ e; g5 P
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ( S% Y: I+ O+ O' ~( o
  709.       dwStartUpSteps=2;
    # C8 C$ i0 A- c' ?
  710.       break;
    ' U" z) [4 r0 `$ u' \
  711.     case 2:
    6 Z" z  C* D: ]) h
  712.       {
    + ~7 {  R  @3 j
  713.         int iEOF;) D$ d: G9 U; ^  h" g- r" D
  714.         FILE *fp;( g" v) \7 e$ L9 Z
  715.         char szString[512];
    8 m: W% b; |1 A4 |
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    7 E( w8 `7 j3 ?# O
  717.         if(fp)
    ' A0 V: T# l' t- m
  718.         {5 q, s; U- @6 ]) y/ L1 F  d5 f
  719.           do
    & [. w3 R9 d8 h9 s" @
  720.           {
    $ j- E: E' \! q  c
  721.             iEOF=fscanf(fp,"%s",szString);3 x) x- J  z. w5 \
  722.             if(strlen(szString))  w, M9 P4 o1 `5 C$ g; y
  723.             {
    . u; z  L! n1 U" b
  724.               if(bFirstChar)
    : ~& T- s0 k: ]5 A1 W; z) {+ |
  725.               {
    , [% _, a0 p3 \' L0 u9 p
  726.                 bFirstChar=FALSE;/ H6 }, D& W3 u% ?. _6 O6 z5 ^
  727.                 bConnectIsBig5=FALSE;
    # ^. Z  ^1 S4 u2 n3 r0 @
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;7 B' u. w6 [+ Z3 p) d
  729.               }: o  U( D* A! B5 o$ c+ ~
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    7 j% Y; Y0 Y/ p! ]
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    # ^# C* T) X, e/ j
  732.               dlg->m_ListText.AddString(szString);
    ' R+ Z* j" s- [  H6 z: s. e
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) c( }% Q, U4 K. F& O! K" g
  734.               *szString=0;
    ( a& x- w$ S: P  k" M
  735.             }4 q7 K2 @* \* D9 m* z: l
  736.           } while(iEOF!=EOF);
    . J: F0 `' o& d* H: @: v
  737.           fclose(fp);
    0 A8 Q2 o6 k$ h5 \) K# m6 C& u) R' o
  738.           unlink(".\\DownLoad\\readme.txt");
    / X5 _3 `6 p6 n1 ]  [
  739.           dwStartUpSteps=3;) W  x& ?2 a+ K, \
  740.         }1 @' o- T( |4 C! [2 v0 C4 h7 P
  741.       }7 b  U3 Q6 t' q5 W4 l' \% z! y1 D
  742.       break;
      T8 _3 i( M# `8 v. ^3 _6 U3 O
  743.     case 3:
    . z% T) @5 v, O4 X
  744.       if(!Dn.Connected())" z3 ~& d& V+ D3 ^$ Z  I
  745.       {
    ' |# I7 G/ D% g& y; U1 t4 t* J
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    # _1 y: @. C4 d
  747.         dwTotalFiles=1;
    + j/ w. k! Q( V: L/ H8 Z! `1 I2 p' b
  748.         dwDownLoaded=0;
    * O# ~: D/ G! a2 I
  749.         bSilentStep=TRUE;
    $ c# c6 X1 n+ w
  750.         bCompressed=FALSE;/ ^8 D3 W) O% H1 ^& x3 N  l
  751.         strExtLocal.Empty();
    # {* o) q5 m9 u/ Y  c) ~5 p
  752.         strFullName="checkversion.txt";" g$ W' D/ j# p- [( d8 @+ n9 N
  753.         dwProgramState=AP_CONNECT;
      k! u6 L% @+ A' o; Z! L2 I
  754.       }
    * p) l$ `/ ]' u. m
  755.       dwStartUpSteps=4;% e: A6 w& U9 X2 P  @
  756.       break;9 x. ?6 g% p9 W: J7 B& x" S
  757.     case 4:* ]' S8 [3 H; K1 `& g
  758.       {2 h/ A+ U( d# M3 E2 \' c/ [0 @/ Y
  759.         FILE *fp;! d1 ^7 u  ]/ e: U
  760.         char szString1[128];  X1 q9 Z, c2 G+ `0 \  ^" U
  761.         char szString2[128];( ?# R+ x+ ]- v+ e9 d
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    . Y) M- u6 L; B$ N  [
  763.         if(fp)
    - c! v6 ]$ b: w
  764.         {
    " n* d  U2 Q8 p. c- a
  765.           fscanf(fp,"%s",szString1);. u' i% K9 F. x, p: ^
  766.           fclose(fp);
    & c% u( T3 @' A$ L# t5 p; [; K/ f
  767.           fCheckVersion=atof(szString1);
    3 C, B2 J" [- `5 T1 Z
  768.           fp=fopen(".\\checkversion.dat","r");
    3 d2 E6 K1 s' x+ t
  769.           if(fp)
    1 N) m" }8 |# [$ W
  770.           {" [# x$ p8 f6 s* a7 n
  771.             fscanf(fp,"%s",szString2);
    5 d" n/ m; [4 ^) B2 q
  772.             fclose(fp);) S9 a7 J4 K$ q! r4 C- \
  773.             if(atof(szString1)!=atof(szString2))5 j2 |& y) |1 v0 q1 v  ?" X( t; S4 \
  774.             {
    * o- g8 W* M  |( b- o
  775.               if(!Dn.Connected())
    0 B5 `. e/ q* J! o, O  X
  776.               {
    4 g6 a6 A" N* f- b$ }
  777.                 bFirstUpdate=TRUE;
    2 a# B- t% {. y$ O$ \: Q
  778.                 dwTotalFiles=1;2 H/ O* F0 {( s
  779.                 dwDownLoaded=0;
    4 t% Q9 S% U4 D+ j$ I
  780.                 bSilentStep=FALSE;: e3 E1 z$ F* M# o
  781.                 bCompressed=TRUE;
    ' K- l4 E2 }1 E2 [6 S
  782.                 strExtLocal=".\\DownLoad\";  f2 A& m/ E2 D
  783.                 strFullName="update.txt";0 l* D+ Y/ ], v, l* k( j7 k7 g5 H/ B4 c
  784.                 dwProgramState=AP_CONNECT;8 O8 E# _) ~4 Q5 {: [9 _. j
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 G: T- m1 {: c' e
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    + m  I- j+ {8 p5 f* e; c
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");2 R) r( [3 y7 x2 F" O7 N. d

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

* E9 D/ N9 ~1 O5 m

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-25 17:02

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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