找回密碼
 立即注册

CSUpdate.exe源代码

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

" v! p3 ]6 E" x- _; K+ v, S
  1. / RevApp.cpp : Defines the class behaviors for the application.) [% ~. w0 f9 o' Q  F: K" A
  2. //
    " f0 `9 E4 g# `# m0 P& H
  3. 2 G& H4 C( z5 K8 T, o5 |" B
  4. #include "stdafx.h"
    : w. q( F- }; T. w: b- i7 s) {  }

  5. 9 K5 b! r8 E" l% e5 T$ m+ _+ {
  6. //#define UNICODE
    ) ?1 K  H2 w- @4 ~) H$ s
  7. //#include <gdiplus.h>/ u% R# B: f; E" Z8 \  c, M
  8. //using namespace Gdiplus;! c* ?( {3 C4 y; x$ R2 [  I0 J9 r
  9. 1 L  l) \6 _: ?7 T' m& A
  10. #include "RevApp.h": [* G& j2 t& w
  11. #include "RevAppDlg.h"
    2 v' b8 m, w- k7 I( l7 V: g

  12. $ Q" i/ A' D* _# v( Y1 A4 P$ S6 Z
  13. #pragma warning(disable:4786)* `8 a9 `8 q/ |1 `: q$ ~( l8 ]
  14. #include <map>9 b) Q+ O1 ^2 a& K6 Z
  15. #include <list>9 \, u2 u# g/ K: v  S
  16. #include <direct.h>
    1 ~4 A  u* u3 w, J2 U' w+ p- D6 n
  17. ; m  u4 u  t( M' I% @8 k3 I' c5 j
  18. #ifdef _DEBUG0 E0 N$ k  g; D+ k- b6 h8 B# e
  19. #define new DEBUG_NEW
    # a2 }4 _# O# D3 L7 }$ v
  20. #undef THIS_FILE
    1 b7 K2 i. V" X$ j% F/ T
  21. static char THIS_FILE[] = __FILE__;
    - T) s7 t0 @; T+ V
  22. #endif
    7 X2 a- W5 y: \/ j4 ^) x0 [1 w, I
  23. #include "SkinResDef.h": C+ Z2 n. _4 Q9 i/ n9 l
  24. #include "ChangeBG.h"
    6 c& n- j/ _4 W+ a+ T" a
  25. #include "AFXINET.H", D3 H- a* e; N6 l  b% f
  26. $ o0 P( ~9 R! `3 ?
  27. #define TRADITIONAL_CHINESE 0- Q/ i, G  }+ }/ L: T1 _/ q% i
  28. #define SIMPLIFY_CHINESE 19 F2 D, a! \2 ~- p) [7 Q) V, j
  29. #define ENGLISH 2) w# U8 U) v  `
  30. int m_iLanguage = ENGLISH;
    7 h) D  l. E! b9 \1 a
  31. /////////////////////////////////////////////////////////////////////////////
    2 `$ ?' C+ {0 v) [* ]
  32. // CRevAppApp' a8 s7 y  h3 s& b+ V2 _% }% \4 J

  33. ) N$ K8 d9 Y  H  k
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)+ N" s, v# B. B- }  }; Y
  35.         //{{AFX_MSG_MAP(CRevAppApp)$ c8 j4 e, i5 K! m
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    - U- a+ R1 _' ?4 V
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!6 ^& E! o  n8 U- p3 a$ m
  38.         //}}AFX_MSG
    * `( K1 j& p; Z. [; b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ( S& h- l9 Q0 R3 W7 X5 b
  40. END_MESSAGE_MAP()4 `! A% F$ b1 s- D$ M; R

  41. ' C0 f) O& d( [8 D% ~  c% ^: a& e
  42. /////////////////////////////////////////////////////////////////////////////
    $ M0 p" }; A8 c! e, ^
  43. // CRevAppApp construction; g* D. P9 i& M/ P$ ?
  44. 6 O" \4 }( }2 o! }
  45. CRevAppApp::CRevAppApp()
    ' E" o- }2 j8 p
  46. {, R4 O/ P, G* E* Q* Z
  47.         // TODO: add construction code here,
    8 B8 V( o; r& ~0 _6 @
  48.         // Place all significant initialization in InitInstance/ Q3 {3 m3 x% ^  i  U7 o% N
  49.   bDisplayIsBig5=FALSE;# ?6 A+ ^+ y  O5 r  _8 p7 i- w
  50.   bRestartUpdater=FALSE;& ~8 e# [( l: H9 V
  51.   bFinishUpdated=FALSE;9 L! j+ Q: X% X
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;5 l* @/ y* t# e
  53.   InitChangeDataBig52GBKS();
    9 [1 Q5 Q% s/ U+ T. f8 Q4 x: P& [
  54.   InitChangeDataGBKS2Big5();8 f' ~5 ^4 g; M8 j6 T7 V
  55.         //
    : k- i+ }, j3 T' _. n! {
  56.         bClickRunExe = FALSE;
    ; E( A( @0 d( y2 G
  57.         //  [! k. w9 S1 }" |1 X, R. n
  58. }1 k1 @7 |; F& A" n6 Q1 v7 ~

  59. + G- N4 Y8 w) N) t% G
  60. CRevAppApp::~CRevAppApp()3 o. e4 g+ }; K  M5 g* [  ]3 ^  F
  61. {6 H1 o! g/ O! M5 R% M
  62.         // TODO: add construction code here,' L% W. I3 r7 {0 z! j
  63.         // Place all significant initialization in InitInstance2 |5 ?1 X3 |9 u/ G9 K3 m
  64.   EndChangeData();
    ! _: _! _8 [* b; F
  65. }
    . [: X1 l$ H$ K

  66. & n( u1 J) H+ |* s1 l
  67. /////////////////////////////////////////////////////////////////////////////
    ' p: _" w9 F: y4 s" R4 C
  68. // The one and only CRevAppApp object: D, ?7 y# a+ @$ t, V, o3 P

  69. ( }. o% K' c9 A1 R
  70. CRevAppApp theApp;
    $ V3 @; b. H! Z: \4 s1 m/ |

  71. " J7 J. g, Z$ B, V
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)& r; e! Z0 F$ ]9 }  Q/ o  I
  73. {! Q3 e$ B% F, S& q( F2 O2 t8 v
  74.   int iEOF=0;
    ' J( x& x% a+ g, J0 d& h+ ]0 e; x
  75.   char szTempName[MAX_PATH];) \" g. [  g& }5 G, D
  76.   *szFileName=0;3 z, z, J5 ?3 o
  77.   iEOF=fscanf(fp,"%s",szTempName);+ a8 ~; k1 O* x6 s" m8 T+ C0 I
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')6 _4 ~8 t* u7 K4 X
  79.   {9 U" R/ \& n1 i& ?$ F; C
  80.     strcpy(szFileName,&szTempName[1]);
    : c  \: i( b  c
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    1 ?7 M* V$ E4 D0 e' V' G
  82.     {, r$ |0 {! f3 y  ~4 h% w8 W2 x& F2 [
  83.       iEOF=fscanf(fp,"%s",szTempName);' @" i7 P: s- U" x5 Y: F
  84.       strcat(szFileName," ");
    * B! q1 E, P# U. W1 F
  85.       strcat(szFileName,szTempName);" O) K" I$ X1 d+ |' O2 }
  86.     }1 n# H9 z! z$ b- Q2 K
  87.     if(strlen(szFileName)>=1)
    1 Y4 T. S# p- k; N
  88.     {% J& n3 c! ~8 f% ?" f( ^- ^+ k
  89.       szFileName[strlen(szFileName)-1]=0;9 K4 S* z) M  ]! U1 C9 {
  90.     }
    4 H3 M8 @9 K8 O+ i2 E) W
  91.   }
    - `- C' \$ T. O# M- I. x) V1 M
  92.   return szFileName;  K1 u& M- J  y* L% m- c
  93. }
    1 x  X6 c, D4 _7 V! {2 v8 O% {
  94. 9 n1 S& m) x( l% V: B5 K; W
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)8 z* B; H+ O  Y; ^
  96. {/ }& }1 V/ c2 K5 ?1 A- f  R1 Y
  97.   FILE *fp;
    5 l5 I' t% h2 q1 ]6 z! D
  98.   char *key=NULL;
    ( U9 X, ?+ [8 F: \$ m% N
  99.   char version[MAX_PATH];
    2 M, z" ^1 `9 W1 \; Z/ q% C
  100.   LPUPDATEFILE file,olds;3 M$ p  d9 T$ O& \4 H! k. w
  101.   std::map<CString,LPUPDATEFILE>::iterator p;* S" a% M: A0 z" C! q) U' |! o

  102. 1 y# N5 _  e, Q  ?
  103.   UpdateList.clear();
    0 X$ t; ^( j9 Q
  104.   UpdateFile.clear();  N- o3 [( R4 I. @4 B+ [( M
  105.   if(GetFileAttributes(filename)==-1) return false;  h7 |" {, @& }2 a$ @- Y" K
  106.   if(!(fp=fopen(filename,"r"))) return false;
    7 r( A/ C+ ]+ F$ S+ {# t. x
  107.   fscanf(fp,"%s",version);3 X% h, p1 d, J8 j
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }. J8 t1 M. ^3 C2 a
  109.   while(fscanf(fp,"%s",version)!=EOF)
    9 A4 Y+ C, B* T$ S/ t; ?! v
  110.   {3 U) E: C4 T) p
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 U$ l, v8 M3 A
  112.     fscanf(fp,"%s",file->path);
    & ~) d  i% v! u" C8 A* I
  113.     ReadFileNames(fp,file->file);# h' ~* u. Z6 b' S6 h  z& r+ T
  114.     strcpy(file->full,".");
    & E, L6 O1 ^9 F8 x* Z8 @
  115.     strcat(file->full,file->path);
    6 _  Q2 c9 Z& j' u. c
  116.     strcat(file->full,file->file);' E0 w1 G0 Y* B; n% C' N2 v
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()), E; V$ E' P4 I% v7 ]) ~# {
  118.     {! l2 f0 g2 X9 L+ d  h4 C/ o
  119.       file->vers=(float)atof(version);1 k- y& U) V. q  j8 `4 L' i5 K, V( b
  120.       UpdateList.push_back(file->full);
    7 j; o3 o8 I1 O* p' H
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    + j+ ]- F% A5 P$ w. E) ~
  122.     }; V& r. |0 X, s& M  Z6 J8 A
  123.     else
    4 H+ c1 w; ?' Y
  124.     {
    7 X7 d( X: ^, `7 m$ _+ X7 B% @
  125.       olds=(*p).second;
    & v3 Y$ `  D6 r  M1 V) Y, _
  126.       if(olds->vers<(float)atof(version))
    # ~, f4 o! R# J7 z
  127.       {2 {9 J( B! R- S/ W' P& ~
  128.         olds->vers=(float)atof(version);4 K2 Y/ k3 m( L* ~/ A
  129.       }
    , a6 W6 A8 m! [
  130.       free(file);& m5 B) x! ]9 u8 J% d
  131.     }9 h% B% |: d( q. n) X% ]7 [6 t; ^  M
  132.   }
    1 R1 J( i, b  N9 d1 `# Q& \  m
  133.   fclose(fp);
    + ]& z1 r3 C% i/ i1 m
  134.   return true;
    : l9 [' {. N" t
  135. }
    7 f6 L, G. U, a/ \4 a- H/ O- @
  136. + S- ^* f* i; I2 P+ _# v$ u; Y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)" D4 `5 Y$ b6 o* c1 c3 m+ m5 @
  138. {
    # w4 Q% I& D" m- x5 q: u$ N5 C
  139.   TCHAR  szFull[MAX_PATH];. p4 m- h% g6 l; b/ {! {/ J2 k  y
  140.   TCHAR *token,*inter;& U$ V: S5 V7 h% b% O
  141.   *szPath=0;. C5 }" U& j' r* {: ^. m
  142.   strcpy(szFull,szFullPath);2 Z9 {" @* _+ F/ Z% Y: \8 w
  143.   token=strtok(szFull,"\\/");/ P7 r7 i2 ~, T! \! y9 R
  144.   inter=token;
    + N/ I9 X: ?8 H" E& v( g
  145.   while(token=strtok(NULL,"\\/"))
    + N* m& v2 c, R/ [
  146.   {
    , X  ?& ~, L( ~8 j  }
  147.     strcat(szPath,inter);3 A) O! t- E2 K1 k+ a+ Y
  148.     strcat(szPath,"\");
      H3 Z9 ~  v# Z& j( Y
  149.     inter=token;
    ; s! o6 F9 d5 s3 c
  150.   }" I0 h/ Q/ q3 |
  151.   return strlen(szPath);4 F* Z1 V& Y' X2 v
  152. }! P6 B. b3 o: q- ^8 @! j

  153. 2 {8 b- [! q" F' Y: X
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    7 u2 n8 f5 R% `9 L, `
  155. {
    + K6 _% K4 U- q' \; n! I$ w
  156.   DWORD attrib=GetFileAttributes(Target);
    3 O! ^7 v' [% G( ~% T
  157.   if(attrib!=-1)
    ! L; z) E; t1 H# l, V) b, y2 e. Q, o
  158.   {* M  g3 v3 ~. d6 F# M! J
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))+ {. n3 X1 W4 K, Q
  160.     {# \3 y2 ^7 O6 P& a$ Y. ~2 z( V* r
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);3 B2 V4 E5 O% F  ~4 v
  162.       SetFileAttributes(Target,attrib);
    - O3 F: P: b/ `7 ^; I8 a
  163.     }
    , c+ {, y3 X7 m5 Q7 W5 A1 M: q
  164.   }
    2 s" Q* L5 E6 e* B1 ^
  165.   CopyFile(Source,Target,Erase);
    - E; N; t3 ?2 a) ~* S
  166. }
    4 v( U; F! V7 l

  167. 6 {4 b0 c3 {% f4 y; `
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)5 {+ |4 t7 E5 T: h
  169. {5 I5 J. x7 N, }' G
  170.      FILE *fp;6 G' K, g1 H( a: r' m- B
  171.      char  szBuffer[8192];
    7 |% o( h: @# U% v2 Z# P
  172.   va_list  argptr;
    # @  F( k1 H: C7 z4 ]! \% ]$ ?+ {
  173. ! I  X1 X* k" ^/ d( t
  174.         va_start(argptr,message);
    - \; |: Y1 u7 v& R
  175.         vsprintf(szBuffer,message,argptr);
    ' I1 T) [2 u8 k% g* E4 s
  176.         va_end(argptr);
    . h% r7 V1 |. K: J$ |
  177.   fp=fopen(FileName,"a");
    1 h2 l  C$ N3 ~
  178.   if(fp)
    5 X8 p3 L1 H2 u# J5 b0 r" z
  179.   {
    , s- e7 ?+ x/ Y+ U) w# ?
  180.     fprintf(fp,szBuffer);
    3 ^0 l9 T* Y, v- f8 f. |: J
  181.     fclose(fp);0 s; }) j  @6 M& T" r  \7 w, U
  182.           _flushall();
    6 C! ]5 ^" l/ I' T( P( N& Y  L& B
  183.   }
    . G7 r4 ~5 n9 x: Y
  184. }
    7 {/ N7 c" Y. D. p
  185. + s2 K1 c2 e* y; j) P5 V' S% T
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    6 C$ C0 \- m( r1 e2 D7 a  k
  187. {# `$ g+ o( w0 F% _/ x
  188.      FILE *fp;3 t& H' q: W1 ]: r
  189.     DWORD  attrib;
    & S4 T& V; T6 [2 q2 [% d- ]0 x
  190.   attrib=GetFileAttributes(FileName);* g$ _; @: c  D$ P
  191.   if(attrib!=-1)6 w3 V: [4 R9 {3 {
  192.   {# j* w: M: y4 |1 o  L! x
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);- o4 o: J1 F1 c
  194.     if(!SetFileAttributes(FileName,attrib))0 ^8 i( G6 h/ U( y* ]. ^
  195.     {8 M2 a! y* O6 j0 P+ N1 v7 _1 g
  196.       return FALSE;* F- f6 x% C6 e. S, f5 c
  197.     }) g" b, _: r" @; S5 ]4 v
  198.   }% h* F$ v  r# s8 S
  199.   fp=fopen(FileName,"wb");
    # i+ [) l1 |' s/ C( w( y8 S0 |" @
  200.   if(fp)1 Y* J1 V4 s/ p: v& a
  201.   {
    & p5 }3 b. Q- }8 M7 Z
  202.     fclose(fp);! i9 u( Q4 N' P' t
  203.   }
    # L! f5 ~8 F$ Z1 b4 r$ e! J
  204.   return TRUE;
    - U, l; h! h9 r+ t
  205. }% b+ \* L! D7 C, ]: q
  206. 8 u  z( G$ L8 u0 N5 P) V! N
  207. BOOL CRevAppApp::UpdateLocalVersion(void)) E+ J8 M7 ~. [( S
  208. {" j- d( f8 x2 l3 z& l7 ^; u; U
  209.   char filename[MAX_PATH];, P. x5 `% X) N' X
  210.   LPUPDATEFILE file,olds;
    + B$ F; L2 d6 ~3 L" n
  211.   std::map<int,CString>::iterator i;
    + F  ?, W( e: O3 a9 y" `8 l
  212.   std::map<CString,LPUPDATEFILE>::iterator p;. ~* S) y; q" }/ K$ O6 q. b6 w/ U
  213.   std::list<CString>::iterator l;, W- b! ]6 Z, M9 V7 ^# a
  214. 9 S( D% Z& Y2 i( L, w2 J. ?4 K" |
  215.   if(bFirstUpdate): H& c, c3 ?# {* i1 Z
  216.   {8 K8 \4 P$ N0 O( T9 }8 `% h
  217.     dwCurrFile=0;9 {0 V& G- F$ X5 i0 ?+ }
  218.     bFirstUpdate=FALSE;" e; ?$ O  u& |; V
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 K% e5 q: u. I# Y3 v- i0 M
  220.     {
    $ X) Y% E+ z$ C7 u/ p2 `! c' M
  221.       dwTotalFiles=UpdateLocal.size();
    # }3 ~0 O8 {; z2 @) T$ o# P) |
  222.       dwDownLoaded=0;( w6 I! F, L/ E; V4 ^+ ?
  223.       bSilentStep=FALSE;3 N3 ?% ]4 b/ o. x
  224.       bCompressed=TRUE;0 F3 W$ G) c1 U3 H6 u0 [1 V1 w& A8 a
  225.       strExtLocal.Empty();
    % ?/ z7 }( F" z1 u  S( K1 Y
  226.       strFullName=(*i).second;
    1 d/ b9 B2 B' D& T9 C
  227.       dwProgramState=AP_CONNECT;- C+ v; V2 o/ M" I5 B$ i! _
  228.       return TRUE;- ~  I# Z; i% d/ `* Q# W+ r' [
  229.     }
    " @3 b2 v4 G7 P% R; Q
  230.   }
    : y7 f# ?6 M0 H3 X4 }% _% U
  231.   else if(bRestartUpdater==FALSE)
    # t1 g, Q& ~3 ~
  232.   {
    2 M* h1 _' Y/ z/ m
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    % `6 r/ m4 P* }# i% o
  234.     {$ z! X% s4 h, K& F
  235.       file=(*p).second;$ b3 i( ]" @: [- P/ u1 U6 k! t
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())( C7 O3 {0 a' w: Z2 z
  237.       {4 G9 h3 X) Q, H+ X
  238.         olds=(*p).second;
    0 h8 b8 U. h' N
  239.         olds->vers=file->vers;
    1 x# c/ S' n7 d+ E1 B; c4 N& ~
  240.       }
    ( A. g0 b. d( X
  241.       else
    3 x7 n% W0 ]$ [- N& l' h; x) U
  242.       {
    * m. s8 Y! b) q1 k
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / j2 @& V5 H) d* {! }6 e
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    , m$ C  X% b$ C& C1 I  W
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));* A4 K: L, J% e7 r9 t
  246.       }' j* J+ V& s- _% ~$ ]4 c/ o$ n# I$ D
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");/ [+ S( u) A  j, R+ ~
  248.       sprintf(filename,"(%s)",file->file);- @- ^6 F5 }6 r( n/ V
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 Q& \# ]* s  L" C
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    % I3 I1 M! G* c7 a1 F
  251.     }
    / T6 S1 g4 F  @/ M* T8 t% t9 Q
  252.     dwCurrFile++;
    8 x4 q- |: n/ F. d% \# c3 F4 \/ m
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    % `5 P0 z/ y  B- J' _
  254.     {
    $ o5 w' Z1 f1 O
  255.       bSilentStep=FALSE;
    8 v- y' ~2 B! U9 u+ C
  256.       bCompressed=TRUE;
    " @- t9 a' F. D$ V5 d" V4 k
  257.       strExtLocal.Empty();
    ! X* g$ g( }& h& i* X$ e# D/ L. c
  258.       strFullName=(*i).second;2 y* K2 D5 k* T4 R+ u- R6 j
  259.       dwProgramState=AP_CONNECT;. _' R0 u0 {: C
  260.       return TRUE;# a3 X5 |/ h/ K$ a# R
  261.     }
    5 G+ P3 [  x: M7 U! y
  262.     if(!bRestartUpdater)
    + D, a0 T0 Q; u" k
  263.     {! f7 L3 k8 T, t8 q
  264.       int iCurrSize,iFileSize;
    - z. s' W. a2 d" h5 D% v  i0 M
  265.       iCurrSize=0;
    " r! h/ g0 `- d) @# ]6 I
  266.       iFileSize=UpdateList2.size();: z; \+ L6 U2 J. v5 R
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    / D0 C: W0 p# @* j. {1 v+ `
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");0 p; g- S; `0 t! r# ^9 D
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");4 j/ k+ j, r3 R  T2 E. ^; j/ q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + ?) Z3 |$ d2 k  z" z' x  V2 j
  271.       Fclearf(".\\update.dat");# Y. v4 U1 `8 n5 B
  272.       Fprintf(".\\update.dat","Bloodyf\n");" f$ m0 [# w2 K' v
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)3 v5 H7 C1 f) g' I6 Z
  274.       {" J' E5 s0 H0 J* a5 \% c
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())) P  g5 }% [' G* O& p( w9 d
  276.         {
    & h  g: t# U8 l
  277.           file=(*p).second;
    6 U: e. o' d. ]! O; T/ C8 G
  278.           sprintf(filename,"(%s)",file->file);6 ]! T9 N% W) `6 \" _: Q( I3 @. }
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 p0 W; b( w' A0 r% Y
  280.           iCurrSize++;  o0 j: `. S3 J( r" d( h# ]$ [
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    2 N( U# a) N' S
  282.         }, D8 i: ~7 y' p% u% |+ f# u; t3 Y
  283.       }: Z$ R8 A0 |* L# n$ |  N( B3 F
  284.       unlink(".\\update.txt");$ w0 O4 U& V* ]! E
  285.       unlink(".\\update.tmp");' \% t  B+ W; Y
  286.       Fclearf(".\\checkversion.dat");
    $ I4 _5 w6 V1 G& f2 W& R# i% b( Z6 _
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    : K/ q/ I# m  f( u. }
  288.       if(UpdateLocal.size()); u  R' F. I2 O" Z* `
  289.       {
      H0 j6 L+ n, d$ A# H$ d3 Z: m
  290.         UpdateLocal.clear();. e/ ~) _$ _0 W2 U: p
  291.       }. Z) J; f! a% w  w9 A5 g3 Z/ ~
  292.       if(UpdateFile3.size())# x: Q" P& b$ V3 K9 \, V: H
  293.       {. z7 I" _" |: D9 C% J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 k, K3 X7 ?1 U# N( k
  295.         {
    1 W/ {& n" i* ^' D0 p) w3 w
  296.           file=(*p).second;: {# x$ }+ F, \+ z
  297.           free(file);
    ' D' G' Q2 z: s+ Z+ J  u2 J* z; s
  298.         }
    % h. @$ j( H; |/ }; D% [1 m- A
  299.         UpdateFile3.clear();; ~+ l8 u3 R1 w4 o0 f
  300.         UpdateList3.clear();% ^4 r: j' [, j5 n: P9 q9 c" \6 F  {
  301.       }" E) K4 a0 n+ y8 b
  302.       if(UpdateFile2.size())
    / b) `, X- }, t& {+ I+ J; ]! K
  303.       {
    & G( n* t) H) W
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& g& W, T* c+ \( o% _
  305.         {
    3 ?; h0 o" q- k4 O9 O
  306.           file=(*p).second;- e  [2 f: ]. G% }: X8 i* n% S& R
  307.           free(file);# v" g4 p/ p- ^
  308.         }
    ; Q" U( _; P1 f+ e5 k4 R5 j6 ~( z4 L
  309.         UpdateFile2.clear();
    5 d7 q  i0 s7 V+ F
  310.         UpdateList2.clear();
    1 v7 O) i/ r3 G* J4 j0 `/ a" E
  311.       }- Q2 ~5 j9 }1 H* c
  312.       if(UpdateFile1.size())
    ; p! A+ L+ ^: T2 Y! ]' ~
  313.       {
    & i$ a5 n- ?! i" N& W
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; y6 Y% E. _" b- G0 c
  315.         {
    ) t4 j& V1 G9 w
  316.           file=(*p).second;5 V, ^# y0 C  ^# x$ h$ T# }  L
  317.           free(file);: j5 i/ X/ j. n' I! M' [
  318.         }
    $ ^  a3 p# F7 ?1 V: a  m- i! T" o
  319.         UpdateFile1.clear();
    # n+ ^8 M  A* ]9 j
  320.         UpdateList1.clear();
    $ w9 v9 N3 a' S4 b/ c, L
  321.       }
    - }- h) U9 P) i& r9 p: N/ c" y# ^
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));4 ]0 w% E- H( D8 X$ i! U5 k; _
  323.     }
    % V2 `0 q8 }2 c" l6 p9 Q$ S
  324.   }
    ( w6 S3 J# w1 f5 U2 u
  325.   return FALSE;. F8 q! D: O8 _' k5 J3 f& h5 s
  326. }! T6 D5 d! I6 V( l( D$ }
  327. 9 v4 p$ n7 Q& H" [  e  R( y, p& }
  328. void CRevAppApp::ClearAll(void)( T% W0 H  w  n
  329. {7 Q( K) a# e4 C4 u5 v
  330.   LPUPDATEFILE file;
    1 _# K7 N: j# _0 a, S; e; X1 r1 @
  331.   std::map<CString,LPUPDATEFILE>::iterator p;  D1 I4 k" F$ |4 ]- }
  332. + D  X+ y5 ^# O8 M/ t3 B
  333.   if(UpdateLocal.size())
    ! ~  Z% i# x& R& l% z' I
  334.   {0 Q2 C: {9 _7 o0 [
  335.     UpdateLocal.clear();1 b1 d! X& L: q/ `1 o
  336.   }1 V7 A! N2 K6 n  {' y
  337.   if(UpdateFile3.size())
    # R& V9 R; }! d4 |, J& B
  338.   {' u: g* C% ~& N6 N
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' [& f6 ?, u+ X6 r8 \0 g
  340.     {
    " t7 _/ Z5 T9 X2 b
  341.       file=(*p).second;3 f5 G- w1 F5 p6 x
  342.       free(file);' C! [) r4 ?5 M: \; l4 W8 w0 t
  343.     }$ h# B( Y! P2 R1 ?% Z
  344.     UpdateFile3.clear();
    - v- F. W" }# P
  345.     UpdateList3.clear();; u3 A3 p  u( b1 r4 j2 M2 W' R1 F+ Z
  346.   }0 b3 [. s9 S+ V6 Z
  347.   if(UpdateFile2.size())6 W$ q$ i2 B# A2 O& {5 i
  348.   {
      z* o  C* P" U- L6 {7 y: Q$ o) Q  o
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 o% H9 Z/ V$ q/ [+ O" o7 M: p
  350.     {, D# Z# g5 r" L1 t/ u
  351.       file=(*p).second;
    ) w. P" s' @* V* f& d
  352.       free(file);  ]  R& `! ?" K0 E" T
  353.     }
    4 d; S2 [- _0 M( ~- F  x: j
  354.     UpdateFile2.clear();
    7 ^: X& O# P& W0 f) l
  355.     UpdateList2.clear();& D( u  R6 _3 D. w+ I0 j
  356.   }
    . J1 k) p& H. q" O# N
  357.   if(UpdateFile1.size())
    & X, b" L4 `# |+ b1 J7 y) W5 r
  358.   {- K4 Q! p& \" g* v# ~* R  I
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ A; K0 ~& b% N6 Y* ^
  360.     {- {* S* }. }8 p, r, w& ?5 B
  361.       file=(*p).second;
    / e! f  w0 ?. S% u' X
  362.       free(file);
    7 n: `* W8 R! A9 {6 t6 b7 t3 k! h
  363.     }; V  C6 G( _/ r& H
  364.     UpdateFile1.clear();6 w& P0 M& |# ?# J: N/ r
  365.     UpdateList1.clear();0 K6 m/ Q: t0 S$ G
  366.   }- [: H5 N5 Z! B# Q: g) R
  367. }  * g1 V  h: y7 P9 o4 m
  368.   0 V0 X* }2 u* X% A
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    1 X5 ~/ I" G+ @5 [! z
  370. {
      W- X9 z8 }, X
  371.   int c;
    ) e3 g1 Q0 C8 _- f
  372.   LPUPDATEFILE file1,file2;
    0 _' T2 w: X- v3 U3 C
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 m2 o! ?7 F$ u; J
  374.   std::list<CString>::iterator l;1 _* L; S! x3 I& ~* _

  375. 7 z7 a% V; E' ?, B1 `# q% Q
  376.   UpdateLocal.clear();! X0 \$ e' d1 M* H
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);; K$ N" C8 }4 J& }) s) F* E
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ; E9 `- f9 v" e% ]$ \! O' i' o
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);( c4 d5 X; m4 h+ {7 y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);( \5 }: K: D2 U, i* h
  381.   if(UpdateFile3.size())
    3 U/ y2 ^  n& I
  382.   {
    9 T. i9 h# M+ j" ]
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); d3 X- h7 n0 ~. H
  384.     {
    : t1 N1 U# x- X
  385.       file2=(LPUPDATEFILE)(*i).second;6 L9 Z* t& _# r5 Z7 t
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 `6 `( W) j. |& ]+ G# j
  387.       {
    . @$ W0 i# y! ~
  388.         file1=(LPUPDATEFILE)(*p).second;% [4 h/ ?3 M) i9 M
  389.         file1->vers=file2->vers;
    1 l5 P) z4 @+ i( G( |
  390.       }
    ! i1 @6 Y# H1 k% n+ [& [9 O
  391.       else
    1 o1 N* ]$ F5 \) y  [& A# X+ x6 O0 e
  392.       {- h  \2 l3 M( B- z) o
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 ^( I8 w* P( |1 v8 {
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ' k3 ?- d5 Q  P5 H
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));5 r8 s  c6 z) f
  396.       }
    - T: \3 Y2 k5 {5 y& C5 c4 V' {- {# P
  397.     }
    2 P1 S: k: b, e) i$ w8 a7 G
  398.   }
    2 u# l  x: K5 R( Y) S5 _  e
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)# M' T8 g" [& k1 \! u- l; S! d" F- ?
  400.   {
    , b, |/ |4 F6 ?) B8 l/ v
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    1 A5 A; O* }8 d4 Z7 ]7 p- \
  402.     {0 T1 C/ K0 K1 I9 ~6 u% d
  403.       file2=(LPUPDATEFILE)(*i).second;
    . Y8 J" U3 b  x3 K. u0 h9 F
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ( Y7 p$ w+ C9 G0 L/ }9 }1 }
  405.       {" g3 b/ t# p0 ?$ n; R
  406.         file1=(LPUPDATEFILE)(*p).second;1 v- z7 Q1 h( o% h# S, A6 e5 M; W6 J! F
  407.         if(file1->vers!=file2->vers)
    ! \! Q, ]) R3 \3 M- E. j8 Z9 ?
  408.         {0 G- {" C, f9 s' d+ e
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % X, a. h. }/ G6 I( ~8 P/ V/ u! s
  410.           c++;2 A0 Z6 P8 x0 W+ B# t4 G7 m% A6 c
  411.         }  Q7 H: w! k" z1 M" N+ W+ G) e. [
  412.       }/ |0 W  p7 Q# S3 P; T( T* U
  413.       else
    ) L# ^6 R( p' n- d, ~
  414.       {
    3 T  F3 ?0 E; y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 _7 s+ i& B; x2 n
  416.         c++;
    8 Y* G" R4 ?& r
  417.       }# [' U" v6 \. @! M! A$ ?5 j7 c0 |
  418.     }- ?; S! e3 X2 j
  419.   }
    0 G/ X0 p/ P$ {7 D3 j. ~
  420.   unlink(".\\DownLoad\\update.txt");4 O: H/ I$ ?# _8 L# A
  421.   if(UpdateLocal.size()) return TRUE;0 L1 \9 o) l: k/ G" z
  422.   else                   return FALSE;) I- g0 o' R1 ~3 k  M
  423. }/ }6 u! \4 ^$ F* c/ l
  424. " H) s9 x' K1 n- F! @
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/": y) N/ r8 ~* N; j6 t' A) q$ J# {
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn") B+ F' a, S9 }7 z

  427. 8 @+ P9 N5 y7 k. `+ a" m* {

  428. 4 }( h- n. T$ X4 t6 g* N

  429. / k; j: t. I0 h) J9 P
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    2 @" U! ~% j/ `: b/ H( f
  431. {, ?# @6 f: Y$ o# D- d2 j- f  i
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 w* ]& T# E: ^( S% G
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    6 n" A# e" X9 z6 ~1 }: l
  434.   {
    , y0 |; y1 v$ o1 m, ^8 i
  435.     char szLanguage[50];9 _4 I& p4 C( Q+ O& z- l# e
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      r3 S( D- _' ^9 p+ W+ M
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- O5 p, E+ ?9 ]9 }
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- U, G3 Q3 z$ |" P' e" t9 U" N5 G
  439.     else                                   m_iLanguage=ENGLISH;
    0 J6 N6 Q3 ^7 J( u  C
  440.     char szRegister[100];) k$ e. M8 s: w# o; {& F0 B+ I4 A& {
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + O0 T; {( T8 j
  442.     strRegsName=szRegister;' \( A+ w. I6 t
  443.     char szPatchURL[100];
    " F: E8 }. h8 b7 T" |; t
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / f" L7 C1 F9 B. E8 y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; |# M$ e& `4 w) i& ?8 z
  446.   }! T) b3 [1 h. d% J) w4 A: w5 p' t/ Y
  447.   else
    / ?' A" k( C: B7 S# T# O
  448.   {: p- f: c$ f3 j; R3 }, \2 h5 [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 Y- R* r. ]2 A, j( L# q
  450.     strRegsName=DEFAULT_REG_URL;% _7 Z& g: P% H* ?
  451.   }
    8 b1 U+ Z3 f; R& w' c
  452.   if(GetFileAttributes("hosts.ini")!=-1)& v3 b6 @; C+ H. d7 w) B; l
  453.   {$ \3 z( T8 Y! ^6 S4 Z
  454.     char szIP[50];% o- [2 R( Q/ ~0 a! N& @7 j
  455.     char szDIR[300];8 J2 S# D+ e. c3 z# h, C
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    $ X4 b6 j2 C6 V8 w
  457.     {
    : ~# A& f" f0 X1 e4 F8 [9 h
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    8 C+ i- Q. E+ j  y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");- }# I! H# J) q: b- s7 p4 I8 i6 n
  460.       strHostName=szIP;
    # _8 |& _( k& ^# {# a, P2 ]
  461.       strHostPath.Format("/%s",szDIR);  a% ~6 K9 w3 e
  462.     }4 W; T  Y* Q/ ]& f8 Z9 j
  463.     else
    9 C3 @8 ~( m) X% [# b/ ^
  464.     {
    # H  a8 e+ R9 \. X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' i# S: I) g# \: Z6 o
  466.       {
    ; P0 i) H! i6 Y& f' ~
  467.         char szLanguage[50];5 \6 O( M& G/ Q$ J7 ?" F7 u
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ ~' R. m. W8 J+ \' {- d0 K. ~
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' i: q" v9 b( X
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* l+ S1 q' b6 Y
  471.         else                                   m_iLanguage=ENGLISH;# R5 v' _8 o7 I
  472.         char szRegister[100];
    ; v0 F1 [4 c2 c! U6 C; m) m
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 x; j8 T* z$ f% S6 `/ {
  474.         strRegsName=szRegister;
    % t6 m* O5 ~8 w
  475.         char szPatchURL[100];) ]& \. X- q3 i8 W+ S0 {9 }- ^1 j
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 @! R6 I  @  e6 B
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; B  \3 W* [& G- V3 P/ M
  478.       }
    , r- K- g" @8 H: \$ V
  479.       else3 ?7 _0 N+ |/ ?1 I" ~. T, A- d
  480.       {7 N6 x' r% c$ f( A( s9 _
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    0 v8 F3 S) o. [
  482.         strRegsName=DEFAULT_REG_URL;- J+ E& V9 \& j$ z5 J# ~
  483.       }
    % ]2 W* k$ F5 x+ F& ]! U% I9 i: M
  484.     }) w4 ]7 X  J) _$ Q
  485.   }/ j, {) W6 I- M; t
  486.   return true;/ t! [' @0 E( `( y4 m
  487. }) S6 u9 x. |4 u) j  f

  488. * ?9 o5 ^  c# h4 J) I6 O
  489. #include ".\ZLib\unzip.h"
    5 f/ Q! \* Z2 g6 o5 b3 {
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    2 y) f0 v; Y& l! r
  491. /////////////////////////////////////////////////////////////////////////////
    8 S8 o" J, h; U* U$ W3 [! P
  492. // CRevAppApp initialization
    & I" P+ q) p6 C3 J

  493. " U" ?" o7 s) ?7 ?6 x/ B9 T
  494. BOOL CRevAppApp::InitInstance()9 {. u9 }! j% F7 V
  495. {7 g7 z9 h0 c# M( k
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];2 @1 q+ v5 [& _& F/ J

  497. 5 ?7 n/ s  Y3 r1 V+ }; u
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    * e6 n( r! ^$ z) ^4 G# Q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    1 x8 m  H; n) Z+ |# i1 x7 F
  500.   {/ o0 |2 g1 ^; G, }0 K7 j  C! `! H; _
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    " y, b, d9 S  Y, P7 m" E) d
  502.     GetPathFromFullPath(szPathTarget,szPathSource);* u2 @7 b% o, i6 j0 U, z9 `1 w2 X
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ! \0 `* O4 K, o4 s. o. O9 g: H
  504.     {
      }$ `( g" w5 V# D; P
  505.       strcpy(szPath,szPathTarget);
    2 E3 {1 }5 l$ l. g( b& q; }# H, _
  506.       SetCurrentDirectory(szPath);
    ; m1 A5 |' N% u& ?' O6 P
  507.     }3 i) r: I! P! y& B4 K
  508.   }' W5 R# z( {+ L9 I# u4 @
  509. #ifdef _DEBUG
    3 g* U9 Q7 f$ {1 u6 r  ]# P
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)). _! G0 w% V: N6 [, C
  511. #else. H# T2 ?8 I$ K
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    1 k! o$ v& K7 P6 G0 t, R( ^
  513. #endif
    : u) N) A5 W7 L9 e- q% a% u9 s
  514.   {' G9 a5 T7 j, W
  515.     char tempFileName[MAX_PATH];: C4 u3 p+ \! u. y* z4 m4 g
  516.     strcpy(tempFileName,szPathSource);; _. o) S3 w: Q, p) d- [
  517.     tempFileName[strlen(szPathSource)-12]=0;! o  d5 Q# J: ^" j
  518.     strcat(tempFileName,"\\$CSUpdate.exe");1 r( f, T, X( V8 A( i
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);$ _! x1 T0 p0 y( K+ d) W9 g- F
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    + c# ^% e( t6 ~  Y' N0 N
  521.     return TRUE;/ c  l; {! x& @) `; h, ~
  522.   }8 I/ M6 F# G1 T1 X8 \
  523.   // Nuke 0118: Delete run.exe
    2 t# _; H+ f/ y
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );# P7 H3 B: K. g
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    " C! D8 x. x7 `+ j
  526.   if(!ReadCfgFile("Config.ini"))
    / u( |: M+ }: X; o3 c* E
  527.   {! J/ U0 t/ V  t- C
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);* V) X5 h- `8 N7 {0 r8 j" x
  529.     return TRUE;
    $ @& S7 ]  r: @  K% z
  530.   }
    % e' W' v$ ?6 |$ `( o: C; A& ^
  531.   HANDLE mutex;
    1 ^, f2 [1 |( K3 ^$ i* t; ^6 T
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))! m4 i! @4 C" d6 H( n
  533.   {5 o& Y5 l7 ]9 Q- M
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    4 g: F/ r% Z9 R# p. T3 b; k
  535.     {
      _* ~/ M# a* o% ?$ Z& D8 R( z
  536.       CloseHandle(mutex);( p3 b  Z: u& U" |  M$ o2 r, b
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    / J1 W6 R/ j; k; p* f5 o
  538.       return TRUE;3 L, \5 A0 }# f, y" J( F1 C% y
  539.     }
    0 j; l4 I- y# x6 p+ m% f! g
  540.   }  
    $ \% ^- i1 g, ?, i8 }; ~* K  r, u
  541.   CloseHandle(mutex);
    / p( E4 K# Z2 J3 p

  542. 1 [9 I+ S) U# D
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    1 ?; F* S2 @2 a. C
  544. 3 P7 ~$ m. j1 h0 y$ P4 g
  545.         AfxEnableControlContainer();- w& v9 X7 z3 ^& P) ^

  546. 8 U3 D4 d: |* T
  547.   bCanUpdate=FALSE;& o: c$ H3 z- Z" P; o
  548.   dwStartUpSteps=1;. V% s* }( ]2 u0 t: w, H' ]& }
  549.   dwProgramState=AP_NOTHING;
      s. t' o6 _8 \
  550. ! o" X3 q, |) q, ^+ h
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);2 G5 k. `. ]. e  V/ `# I- Q: Z( r

  552. 6 s3 P2 w  W5 Y
  553.         // Standard initialization9 U6 L9 @* [# j* ?9 M
  554.         // If you are not using these features and wish to reduce the size7 D/ P+ z8 N* @6 ?
  555.         //  of your final executable, you should remove from the following0 S9 ~7 O' r: Z( F
  556.         //  the specific initialization routines you do not need.! `: U2 q# o$ y* t( O1 G% {# p
  557. 7 ?9 J! A! q" b* M/ N
  558. #ifdef _AFXDLL
    " d# K- M, T' o1 J1 }& t. x
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ; W" K  u  q$ a5 E; m/ u- ?8 l
  560. #else
    : ?1 C/ n+ Q! G8 l4 M5 \( u' `  p
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    $ h0 P6 X; a/ X5 y/ n  W! J% ]0 q
  562. #endif
    * f6 D1 y$ I" N. W5 f
  563.   L. a5 m9 D. x# {; w1 W9 I& \
  564.   dlg=new CRevAppDlg;! l1 @  b0 V3 A* i' P4 M7 x
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' k# M4 B" W+ D/ f' [  Z* @" G7 x( ^9 ?
  566.   dlg->ShowWindow(SW_SHOWNORMAL);1 w: P  b0 s* n- K7 R" X
  567.   m_pMainWnd=dlg;
    3 o3 F1 }$ s+ L

  568. 9 b7 t$ L% e1 a
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    3 |6 O$ Q* o1 ?9 L# N
  570.   J) I& O( c: [
  571. //  GdiplusStartupInput gdiplusStartupInput;4 |) R4 G$ W+ O6 Y) C" }
  572. //  ULONG_PTR gdiplusToken;1 x- C2 s7 {  N
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ' P2 y0 E$ P3 x  z; M# }
  574. % [  Z. D! F8 U  _% Q& ^
  575. //        CRevAppDlg dlg;
    1 `. Y- L- l+ j  k/ u2 L) j0 m
  576. //        int nResponse = dlg.DoModal();0 @; j9 {+ D+ Y: A& Y
  577. //        if (nResponse == IDOK)" n5 _; \# x: L1 o. I+ [% ?
  578. //        {, c' h8 s9 V0 [3 P4 ^/ _
  579. //                // TODO: Place code here to handle when the dialog is
    ( T* D) N+ {" S0 q) L4 g
  580. //                //  dismissed with OK
      S, u5 ^1 \5 }. E; Q
  581. //        }
    8 J& b8 w6 j2 r
  582. //        else if (nResponse == IDCANCEL)
    ( N1 ~+ R  R% q( {
  583. //        {
      J& T/ T6 d6 V1 {4 K& [2 ~
  584. //                // TODO: Place code here to handle when the dialog is
    / d, b1 L& J7 d) g
  585. //                //  dismissed with Cancel
    , A5 Q% T' D1 U7 L# X: G2 e1 ?
  586. //        }
    4 Z2 M" i: F7 O- {  E  ~

  587. % z, B0 Y) m2 i" M. h+ x2 P
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    & a4 @8 k- V5 v6 u9 A  }
  589.         //  application, rather than start the application's message pump.
    . t1 S" i/ w( k- c. }% ?
  590.         return TRUE;1 W: x2 M8 j/ z' g
  591. }7 u4 u2 B, p6 Q5 T/ J7 Z- B

  592. " J# B- ?1 ?6 L# G7 l1 o- ~- }9 n$ P
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 x$ z4 J* `' g: ?( |5 X+ \) q
  594. {
    7 D$ r$ M$ M! X: S" q
  595.   int i;
    / e# K1 `: }; p( z6 u# T
  596.   char *szRet;
    3 b1 f4 z- `- }' g/ l4 T; C

  597. + ~( A! L4 C6 S, c: I, q3 z6 {& L- q
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    * d2 Z. W( G+ \* l9 R; [  z0 x+ Q; r9 f, @8 M
  599.   if(sztoken)' a+ @$ i- j2 H, D9 M) W4 s
  600.   {3 j4 q; ]/ b7 i
  601.     szRet=&sztoken[itoken];
    " v5 j# J6 g+ M4 \( x1 t
  602.     while(sztoken[itoken])
    # R4 m( o/ m# Q# B- u" {
  603.     {
    ( S* y. v  e: E; [( |
  604.       for(i=0;i<(int)strlen(token);i++)
    % E: Q$ F3 |9 o
  605.       {7 ^! V. T) R* R+ x) o/ l: \
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    5 U4 v0 T2 G) Q8 n' v
  607.         {
    6 J3 }' J) V" R8 B/ r& ^
  608.           sztoken[itoken++]=0;: e( P6 B2 c5 e/ n: I
  609.           sztoken[itoken++]=0;
    . N0 J9 G0 ~4 {' _8 W' N9 q6 v
  610.           return szRet;( S+ b' W8 f5 e$ ^+ t9 F0 T8 O
  611.         }
    6 [; X8 ]/ n6 [( F/ K  \6 ]: V) p
  612.       }
    9 Y) [- a7 \: s
  613.       itoken++;9 X$ @# D7 U4 `6 N; l
  614.     }* K/ Y$ w$ l" k
  615.   }
    ( C8 G+ P+ L8 ?0 r0 n7 l# j9 s
  616.   return NULL;" x% [1 ]6 q! A$ J
  617. }! C; g7 h$ X; {+ H0 r% e5 f
  618. 9 E2 |$ Q) s) t; Y# g9 E
  619. void ProcessProc(long Total,long Current)
    $ h- Y' i5 [0 j1 E; g: t8 ~5 ^
  620. {
    0 J, ]' C( Z6 e: P6 r4 Q3 A) n3 g
  621.         MSG msg;# N/ t1 P1 g' J: \( V# _7 k4 e
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);) _3 O) H5 m0 O; r% l
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    # U0 N1 C7 C* B$ [% n# c: ?
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      w+ N. ^, u/ O& S6 ]* K
  625.         {
    ; B7 E6 A: O# G* k3 K8 F
  626.                 if(!GetMessage(&msg,NULL,0,0))" }9 W) N& x" m9 ^
  627.                 {- q  t7 W& T! G/ S  w
  628.                         return;
    3 P8 o( O5 N2 F% T% I" }% b
  629.                 }* q7 U9 d/ Z, c5 ?: E4 P
  630.                 TranslateMessage(&msg);/ y8 _! h! w* Z& V! e
  631.                 DispatchMessage(&msg);$ [6 U4 ~2 n$ ~* `% F- m' V+ j
  632.         }        . U$ [* H, l- P, `
  633. }
    0 }8 @( y9 S& F/ ^* a
  634. 7 `" b* \+ I/ x+ T
  635. BOOL bFirstChar=TRUE;
    9 c& J. Q0 |" H1 N5 ^2 F
  636. * L4 a: v; p9 D) _1 N
  637. BOOL CRevAppApp::OnIdle(LONG lCount)8 F4 w' Z0 M# ]1 s
  638. {( L2 l# x+ ]# c5 Y$ J, a' ^
  639.         // TODO: Add your specialized code here and/or call the base class8 h2 z1 R( A* D9 x9 M; e/ |
  640.   switch(dwProgramState)% X6 y& k4 |3 v  ?& P+ O
  641.   {* F4 x' v, ^; \. i
  642.   case AP_NOTHING:3 k" g  b% i. B# M( a( t
  643.     switch(dwStartUpSteps)
    ' l- Q0 d; v8 u. \
  644.     {' ?, r1 q2 ~1 K  w* t( U
  645.     case 1:9 l& w  Y7 V3 C+ ?2 u0 Y
  646.       {' e5 e6 W: k. W7 s. K& H
  647.         int i;! T! y& D4 t8 Y
  648.         CDC *pCDC=dlg->GetDC();8 `  C8 f( a5 Z6 x6 _$ N8 F% e
  649.         HDC hdcwnd=pCDC->m_hDC;+ X. v, |; U: H6 Q( w& e
  650. //        Graphics graphics(hdcwnd);; R% \! L4 [( u# _9 u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");+ ]; U3 v& _4 h0 Q: K* v
  652. //        INT iWidth=bitmap.GetWidth();& m& l  m, [$ Y! N. Q% R
  653. //        INT iHeight=bitmap.GetHeight();
    $ o4 @' R* s% [4 v( [2 l- g
  654. //        Color color,colorTemp;
    / V: H2 b! K; c7 @1 E; |  O
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & B# w2 d# B5 E& }/ v1 b1 \! R9 w* h
  656. //        {
    % X2 d4 b" W! Y7 d* [  X
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    , J' x8 N( y! M
  658. //          {2 ]0 _# v1 n; \4 m  C/ F# b
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ) Z2 _$ F0 k, R8 H0 f/ j1 i
  660. //            colorTemp.SetValue(color.MakeARGB(3 l* `: k* _2 G7 x
  661. //              (BYTE)(255*iColumn/iWidth),* \" y8 W8 ~& e& W
  662. //              color.GetRed(),
    0 b8 P! Z; C: e+ v8 }! T% x
  663. //              color.GetGreen(),7 \: B+ z" o& k. f- t
  664. //              color.GetBlue()));
    + M4 F, Q3 A% P; @: R
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);* i! V* ?; o' d/ a, r' o% _5 P
  666. //          }
    9 @6 _# j3 I* S& }
  667. //        }
    ; y# E5 q  A9 P
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);& O/ `5 x  d+ v$ G3 O2 \8 Z( [
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 _5 A( J1 j: x7 F& S
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    1 v% e! t% b- B3 l; x3 h
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) P2 o, \6 o$ }3 l
  672.         for(i=0;i<240;i+=8)
    " ?( h& ~$ f3 u
  673.         {
      C1 w. W3 I; S- d
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);+ H$ i6 Y: O2 a' u2 u$ i3 W/ s
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);' b6 ?; G1 [$ q) N) e  K5 H1 {! }
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , b' {3 t( T& k! q! H
  677.           Sleep(33);
    ) W) S; S/ ], F
  678.         }
    ' l* u* [& n' a) w' v5 W
  679.         Sleep(1000);4 w* |" N5 A2 o3 _. x1 t+ K' f5 T
  680.         for(i=240;i>0;i-=8)
    : a6 L6 X+ m2 x5 v/ r- t% |
  681.         {
    ; a! Y* A/ s& r7 r, u
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . {0 n- o3 O' l2 K
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % h' g0 W5 B. e
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / @9 b( g, c! d6 A! c. z/ P; X
  685.           Sleep(33);/ x- K# U9 o  K7 u4 }2 @3 Q! K+ H
  686.         }+ K- c7 A& k# H
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);! ?4 J5 F& X5 a' K. }' F& b
  688.         dlg->ReleaseDC(pCDC);
    + o* _, I( K% G# Y4 o
  689.         DeleteDC(hdctar);
    8 z  _2 ^  K9 P! t) k4 [
  690.         DeleteDC(hdcsrc);
    3 _0 m9 ^" b0 t; _
  691.         DeleteDC(hdcorg);
    ) H( n' E- M+ G$ \
  692.       }/ N2 b8 S5 q8 [9 s0 ^, d
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    + J9 p  J& Y; m$ a0 h4 n
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");, E. v! s9 ]) O# l* a; E1 x+ Q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    . g- U! d) R% E! W  N& B
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");) `. K" v3 H& q* o3 L2 ~, `+ o+ z1 u
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ i- i% O1 w) v1 w6 z
  698.       if(!Dn.Connected())' t3 c% o) Y% c
  699.       {! Q5 ^" N: \, D1 d$ Q% n+ V
  700.         dwTotalFiles=1;! y, G1 x+ A* k: q4 f0 b
  701.         dwDownLoaded=0;- z  X3 o" h$ @6 @& y) \. i
  702.         bSilentStep=TRUE;
    6 o2 G1 X8 l7 q) F' q; N3 o
  703.         bCompressed=FALSE;: E7 _  O  _# c, Y% y' f
  704.         strExtLocal.Empty();# m5 k( m! z9 a# ^4 }
  705.         strFullName="readme.txt";$ ~# Y: h( q/ k- c
  706.         dwProgramState=AP_CONNECT;
    2 B! U1 H1 X! b2 m: u$ z! Q$ U
  707.       }) h4 h' c% f  ^" V- q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();- v) O5 q" c( i2 I6 p$ w
  709.       dwStartUpSteps=2;
    $ k, j5 x" d! O3 o2 N
  710.       break;
    : l, d( `7 e6 n+ e; }/ I1 `$ g) U
  711.     case 2:
    4 ^/ h1 J, W$ z  ~/ h1 Q
  712.       {
    ' I* z- n) o. K5 b8 N
  713.         int iEOF;4 J7 I$ j- v  R6 p* N5 @( F
  714.         FILE *fp;
    $ e# F& D- x* w: n& f1 t
  715.         char szString[512];
      |) ~# c0 v0 G( u+ J
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");, E- X; N+ F2 v8 w. S
  717.         if(fp)
    % D5 w3 b8 J  `9 U$ I
  718.         {
    0 [) X4 `5 `3 [4 o
  719.           do1 _# T9 S8 G0 L
  720.           {% J: E: k8 U0 O1 i/ W) Z
  721.             iEOF=fscanf(fp,"%s",szString);
    2 N, Q3 t8 x2 z# D0 z% \7 n
  722.             if(strlen(szString))
    5 t  h$ g# t4 C0 K1 f: h. c4 o" ?
  723.             {$ P$ d  Z: q5 T% x0 u
  724.               if(bFirstChar)
    ; B7 ?9 R6 H/ `1 D
  725.               {
    9 O# x. e* K9 d
  726.                 bFirstChar=FALSE;3 l2 i" m6 C; d8 Q; S
  727.                 bConnectIsBig5=FALSE;
    % S) m. R$ k+ [& w$ n
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    4 V& ^, `" @8 d9 j: s& W
  729.               }
    7 C7 S  R! w/ `6 {. f; v; o
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ; L6 S/ C! q2 P7 E3 _5 D$ n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . z. K) m# A- `# i
  732.               dlg->m_ListText.AddString(szString);
    % X5 D! b6 I0 X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 Y6 e' K3 h1 M9 E1 }
  734.               *szString=0;+ z& e+ f3 S) l6 b. N' [" W, B& k* x
  735.             }( i+ M0 H5 E, g. P. S
  736.           } while(iEOF!=EOF);9 Y( X1 a' K/ h* \$ u1 G: y% L! R- w1 o
  737.           fclose(fp);% C! o  ?# K+ O1 t
  738.           unlink(".\\DownLoad\\readme.txt");
    " T9 G5 \& U* a8 o  x! l) B
  739.           dwStartUpSteps=3;( D4 R' R0 r& D
  740.         }
    # g& v5 C( S3 H
  741.       }! e( @. F% N) s& o# I; L6 w
  742.       break;0 h' ?# {$ o  O4 O* R
  743.     case 3:8 b- U, J, i' Z: D( p+ [  d
  744.       if(!Dn.Connected())
    ) U' A7 V7 a/ x( u
  745.       {
    9 n& Z+ l' L$ C; u" W+ z& n: o
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    + ^5 C0 B- A* Y
  747.         dwTotalFiles=1;/ M" M+ H. h. {  A3 B3 A9 n
  748.         dwDownLoaded=0;
    ) ]! X* V# \  a& ?+ Y; q
  749.         bSilentStep=TRUE;
    ' _6 [9 ^& G( W, ]' Z: L
  750.         bCompressed=FALSE;
    ! U) e6 j3 H% G* S
  751.         strExtLocal.Empty();
    + h+ S4 R: h( N3 j6 M8 s
  752.         strFullName="checkversion.txt";% z7 R* @  w# g2 V  r- F
  753.         dwProgramState=AP_CONNECT;
    & j" H% j& t6 q  ~. V
  754.       }
    $ w: N! g6 F/ o( b% \  t% u
  755.       dwStartUpSteps=4;7 \6 ~7 e" G1 t9 k; D
  756.       break;
    # d' w( d$ j) N1 f
  757.     case 4:
    - k% J+ N4 ?9 m) C% u  f2 f0 Q
  758.       {
    : w- O6 S" [7 {% j- G2 r
  759.         FILE *fp;* J9 x6 G8 I+ c+ S" P, j% d
  760.         char szString1[128];0 b, v, n3 u* v3 K! r. d+ }
  761.         char szString2[128];2 [7 ?# N% @+ `$ p1 q
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    . b7 I* `( I! [) }
  763.         if(fp)
    9 D5 p0 W" K  h+ ?& Q- T( c( u
  764.         {
    * Y- A) d* a2 z# _4 `# v" B
  765.           fscanf(fp,"%s",szString1);
    , X& i0 E8 @6 `& J5 h' C8 y: h3 k
  766.           fclose(fp);% K' _0 R# d' H) Z8 q- B1 d& [
  767.           fCheckVersion=atof(szString1);7 Q9 k/ x3 t* A& E4 o' e* {3 N+ _
  768.           fp=fopen(".\\checkversion.dat","r");
    ! X' k9 ^. n8 v- O3 a: Q
  769.           if(fp), F/ o9 a- A* y  ]/ z3 B4 E  p
  770.           {
    8 V# U' Q. _, w; F7 s8 Q* z
  771.             fscanf(fp,"%s",szString2);
    & n+ f* J1 k2 N0 X0 A# g, n, y
  772.             fclose(fp);: d7 g* V# A9 p1 |9 A
  773.             if(atof(szString1)!=atof(szString2))
    3 b( A1 d. a5 J+ [- t
  774.             {& b9 J: x; ^+ H: `
  775.               if(!Dn.Connected())* n' q8 L! F) H" ^
  776.               {
    - m2 B' D/ _6 |' x5 X2 P  I
  777.                 bFirstUpdate=TRUE;! q, e/ W4 k1 G: d. g. Z7 `
  778.                 dwTotalFiles=1;
    1 o' i9 V/ B5 z8 J$ N
  779.                 dwDownLoaded=0;- w) T: C  ^7 o' L9 R( N9 s/ Z  I4 C
  780.                 bSilentStep=FALSE;
    5 D0 b2 o6 S/ N* O( k
  781.                 bCompressed=TRUE;
    ! L. u! k. Q! O3 |: C0 e: s
  782.                 strExtLocal=".\\DownLoad\";9 F9 N. j/ Q' x" Y$ L. q: X- X
  783.                 strFullName="update.txt";0 k0 n" A' x5 P9 q7 i1 H1 p9 k
  784.                 dwProgramState=AP_CONNECT;
    , [: m' g2 p. L! h/ t4 c
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 m( ~7 Y- ~3 P- x, ~9 V
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' e5 h7 v8 H& Q; W
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");2 {9 L( [. M* P, p6 t

  788. 8 Z1 @6 X$ ]8 @$ q1 ^  P$ f
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( K- }$ G+ ?) {& R6 |
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ( t; _5 g+ ]+ I6 H! w9 p
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    : w$ h; A0 c* `% L
  792.                 {1 f2 I$ g  t  i1 h5 R6 W
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    " g# y; y+ p; t
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    * T' Y5 |) o. u
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    * |: S) u; I5 k2 ^: L' n8 w+ w
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 {" F- p, Y0 i+ C* \* s+ X" C- ?
  797. " Z2 c+ ]1 ^! G$ D/ p. H
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , w; |6 n4 d8 [8 [3 I* h. ^
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    " R5 K6 i# |2 S4 [% r: D. ?+ x# V
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
      ]1 g0 v! ?( `1 U0 s/ d/ X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ ^; x+ A- G  l& V/ O4 Z
  802.                 }
    8 l6 C4 K' g. i! y+ |
  803.                 dwStartUpSteps=5;
    6 x7 I+ D& J. A' z
  804.               }
    ) {, n4 u) c* o: e! v: v; I& s. C
  805.             }, F! X, L: ]4 m
  806.             else* I) o+ Q6 z9 _3 z
  807.             {
    ) [/ u9 n; f2 S9 h% Q8 e+ W; N& E; w
  808.               unlink(".\\DownLoad\\checkversion.txt");
    * \# s" a" ^9 K2 T  T
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");. q7 ?. \5 k, I5 ~
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    , L: Y5 `; I: O6 k2 D
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
      f9 V( u2 L, n1 d! D

  812. & v1 Y3 ^& v6 C. ?$ c9 h) d" m
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; |. P; j8 l7 V# M2 s! D
  814.               dwStartUpSteps=99;  H; X9 A( M1 [% l5 }9 X4 C) Z
  815.               bFinishUpdated=TRUE;) X" Q; l/ r5 t
  816.               bCanUpdate=TRUE;5 U0 s8 H% O/ W& l) N
  817.             }- f" u3 D* ~! w7 f1 I
  818.           }3 U/ L! W/ U: k% p  N: |$ {# x) M
  819.           else
    0 Y5 I. N! ]" x4 M& W1 L7 v
  820.           {
    ! F! D& Y* L! S: I' H5 T
  821.             if(!Dn.Connected())6 h' I! t% w1 U7 \+ \( R* i' n
  822.             {+ C3 P% y  D, ^' J! Z
  823.               bFirstUpdate=TRUE;
    * A2 \: m' X. k/ G' D* A6 q* b
  824.               dwTotalFiles=1;
    6 @, M6 i' }! K
  825.               dwDownLoaded=0;
    . a/ {- T! p: }; ]; B
  826.               bSilentStep=FALSE;) x0 s/ W1 k# E
  827.               bCompressed=TRUE;+ O  ?5 X7 @  y/ o# u( }3 ?+ s4 r
  828.               strExtLocal=".\\DownLoad\";
    # Z. |* N/ X' K$ g
  829.               strFullName="update.txt";
    . \, D" [* B5 k; T0 A+ S
  830.               dwProgramState=AP_CONNECT;% c& ]" g; p5 X4 `8 D
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- p" d; w5 x& b0 r- L5 L
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 N7 R9 }  r# e) T/ ^
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");' K4 ~0 u1 a5 c7 _, |
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 s* M' x+ x' A4 A" o- f3 h1 F9 R
  835.               unlink(".\\DownLoad\\checkversion.txt");
    0 y2 Z* ^* L( H+ w$ \
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)+ z  A" n  U" d
  837.               {+ N1 M) Q, X9 N" m" Y& a
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    * F2 L4 |* R6 e$ S5 K( Y4 T& P
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ' U0 r8 z; J: C% u' h8 c
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    + ^4 r6 H, \7 [' r& Y
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: j5 O8 H$ Q. U$ J8 \- z
  842.                 $ I3 b: i* y- t( k6 j0 d
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    0 Y& R4 d7 v  G6 U
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 G; K, Y2 H" ^3 k
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");" S0 L; c3 M- M# J
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, j, d8 W) ^% z3 p
  847.               }/ H: ~0 e3 `+ E5 p' y' L, n  Q
  848.               dwStartUpSteps=5;5 G- b, z7 ~3 H" J, w
  849.             }/ R/ V8 k! v4 W7 f/ |
  850.           }
    ! S# V) m+ i2 k, O
  851.         }8 I, x' S- y7 G8 F! {
  852.         else
    $ S, e9 O- P- i; i/ e. {# N
  853.         {( k( m' M( F7 Q7 S9 [& r
  854.           dwStartUpSteps=3;
    " T5 I  G4 Z) K% ^! Y
  855.         }
    ! Y8 {# S: s' B4 h
  856.       }& e$ R6 g8 f6 R0 o# R$ @) B
  857.       break;
    - ]% \* C+ M! w1 s  q7 y& T* C
  858.     case 5:
    4 W2 e; t5 }0 J# k) H& X
  859.       {
    6 F# e% X9 s( `) \4 d9 j3 v
  860.         if(GetFileAttributes("Wsa.zip" )!=-1): u. E' \( P/ k
  861.         {
    0 ~5 k- w2 u% Y9 ^+ \- n
  862.           int opt_overwrite=1;$ t. N, Q; Q$ b4 c! |
  863.           int opt_do_extract_withoutpath=0;4 f) O& u* r9 D6 x6 `2 t3 v
  864.           unzFile uf=NULL;, M/ l3 a3 x: ]8 w

  865. $ Q4 d6 m. C2 E3 d* D
  866.           uf=unzOpen("Wsa.zip");
    " V3 h; R, }$ r  x
  867.           if(uf)2 A3 |* s. L& Q2 }' m
  868.           {
      M) \9 V) b& u( C  \
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 r) y+ z; m( o! G; Z) m1 O6 S
  870.             unzClose(uf);# T) |+ g( f* g3 b: g7 D
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    $ a3 @5 F: s- l& _! s; V9 D
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");5 l! o' ?8 y/ t
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");7 @5 O7 u# x9 d" k2 H; A) f9 R
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & g3 G+ \0 n/ G: @
  875.           }+ ]6 J  X% a4 R
  876.           DeleteFile("Wsa.zip" );. u' C- {$ r! i) W: l- m" \
  877.         }% `$ i( X) q2 o/ U$ T; a" Q
  878. : S: Z$ E- v' E/ f8 K+ L
  879.         if(CheckLocalVersion())
    1 d5 `) w2 x3 c4 X  U0 x
  880.         {8 V1 f! U) A2 ]  @/ S
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");/ L- C5 d% g: g
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    5 w- I$ y: T+ y$ A0 E0 K  l; Z: j, Q6 a  P
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ' g7 C$ p) F3 d; L5 {# \
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % X0 p4 _" e( P7 ~' B" n
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    2 i3 C9 X9 U' `$ Y; K# l
  886.           dwStartUpSteps=99;
    & h. C; j: o) s+ f, J
  887.         }
    5 h) |+ W" T3 Q2 Q, ]* g6 u$ A% X
  888.         else) T: x9 V( P0 ^6 N
  889.         {
    ' v  R& {0 V. J+ W1 y; w4 M
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");1 o* J* x" R; i, u) d
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");% o' l/ \- C2 }; \+ k$ D) J
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 {  q9 Q9 J/ J2 k9 W

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

/ e* r/ R. U  q% J
! ~9 ]3 g. j% c

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-5 18:50

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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