找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
  r1 B9 v6 C( C+ `1 x
  1. / RevApp.cpp : Defines the class behaviors for the application.& h, q( _8 I# N6 v
  2. //' ?7 A7 P& D9 b) a) J7 V8 c7 a1 a
  3. " f- {' w% c  b7 e7 i; K
  4. #include "stdafx.h"
      \( V4 h4 Q( ~

  5. 0 w/ l3 l6 ?" a5 g1 ~7 l
  6. //#define UNICODE
    3 P6 W* S  W5 Q) t) h
  7. //#include <gdiplus.h>! a* l! B/ a$ g; J
  8. //using namespace Gdiplus;2 z& u- P- m; W- z' H5 p# p

  9. % Q* g2 g$ ^) |  a% [2 |, b% a3 c
  10. #include "RevApp.h"& ^+ x( j; w  N) Y) [. k
  11. #include "RevAppDlg.h"
    6 J8 F' E6 x0 L  n
  12. & U9 ^6 R7 u, G. `  E, ~% X; Q9 Y
  13. #pragma warning(disable:4786)1 m- q4 A  s' i) w
  14. #include <map>5 T: Z) e2 S$ C$ M+ O
  15. #include <list>, W4 O9 U5 b* z& n0 a' {# b3 `
  16. #include <direct.h>
    1 H9 z6 p' R4 T: R" V/ T. \
  17. & V5 n& ]$ c0 @% V& }- |, f
  18. #ifdef _DEBUG* y2 v3 K; ~! U) c5 U
  19. #define new DEBUG_NEW
    ( E8 P7 @: [8 G9 D3 T6 a2 `7 B
  20. #undef THIS_FILE
    2 ]0 ?- X+ B, j
  21. static char THIS_FILE[] = __FILE__;
    . g: u$ L* u3 U' }( R0 Q
  22. #endif0 B7 B$ z# k) c2 I0 c) w
  23. #include "SkinResDef.h"" ]! x1 b2 g5 [
  24. #include "ChangeBG.h"3 E: }3 O& H4 I2 O
  25. #include "AFXINET.H"
    . R1 }9 H* n+ ~# P" m

  26. 7 H1 Z; {& U+ t- v% I
  27. #define TRADITIONAL_CHINESE 0
    6 B$ @+ T8 w/ |# n- M
  28. #define SIMPLIFY_CHINESE 1, L/ G& n% t: {/ S
  29. #define ENGLISH 2
    ' ]( r- `1 l5 I
  30. int m_iLanguage = ENGLISH;- `" n) }+ e# t3 ?0 H$ X$ _- |
  31. /////////////////////////////////////////////////////////////////////////////
    4 J) |; I) r0 @9 K
  32. // CRevAppApp; F+ `/ H+ x/ S, {
  33. # ?7 s6 P1 A% p8 a8 y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    % E' \7 \/ G' s" |
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ( q8 B9 H% R+ Q9 \) ^1 W: j) W
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    + [: D" c6 S5 j% P! d" x* A# q) M
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!; E, ~' M7 J7 T. _, U. T: B" f( G
  38.         //}}AFX_MSG
    % p8 {2 m: @! P8 W- o* P  O
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    $ m1 ^0 Y+ Y1 F+ e; y
  40. END_MESSAGE_MAP()
    : v: s( d: Y+ a: ?5 W# ?  Z

  41. , U1 p2 z8 `& V0 O$ u$ Z
  42. /////////////////////////////////////////////////////////////////////////////( x- n& k% }1 C3 h
  43. // CRevAppApp construction
    8 e8 t& y+ B0 n7 I8 J& q/ I+ N& n
  44. ; V# x+ W% m+ T' p1 H
  45. CRevAppApp::CRevAppApp()
    . S4 z% U1 V. ]; x/ \
  46. {0 B8 c' b& r3 v9 y+ x, r. G; {4 `
  47.         // TODO: add construction code here," T* X/ p4 c  S( S
  48.         // Place all significant initialization in InitInstance
    ; f* }5 o$ |. [3 m0 w% m
  49.   bDisplayIsBig5=FALSE;. A/ C% X. I, V: M3 Y: [/ P
  50.   bRestartUpdater=FALSE;
    ) C, W: i, }# L7 b0 C
  51.   bFinishUpdated=FALSE;
    3 `4 u7 e3 T. r1 K
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    : f& }5 _. C; {' @4 g% c! M. F
  53.   InitChangeDataBig52GBKS();
    + |" W0 e% S: \. `6 @) ~% u
  54.   InitChangeDataGBKS2Big5();' c6 @6 L: K/ U8 Y7 _' A% a8 h  `
  55.         //
    " U2 {# b4 h$ @
  56.         bClickRunExe = FALSE;
    & N1 i% C0 p" `: n" x& g
  57.         //5 [( H& E0 _3 f# Q
  58. }
    & V" m6 C: _: H6 w

  59. 0 z  e6 O3 W  v/ ~: E) j! H1 v
  60. CRevAppApp::~CRevAppApp()
      S- ]" @1 h9 K( |
  61. {
    9 U7 G" @, ~! @+ y6 ]- U
  62.         // TODO: add construction code here,
    8 B! g# W/ X. [* y
  63.         // Place all significant initialization in InitInstance# ?7 i7 P/ l) o- b
  64.   EndChangeData();
    * a) K- V# s  K( A$ o: u
  65. }+ H: [1 n5 r8 ~$ t2 c0 K7 n+ m

  66. $ Q8 Z9 f1 n4 f; E) _
  67. /////////////////////////////////////////////////////////////////////////////
    $ J% o- i$ @2 ^3 e2 q6 }/ `: [  ^
  68. // The one and only CRevAppApp object4 E( \4 ?) k+ o  A2 |2 `

  69. 7 P4 p  `! K9 ]. o! l5 @  n. F! s
  70. CRevAppApp theApp;* m2 t& ^9 ]* E
  71. $ i# \0 |9 l3 i" H; |/ o4 [5 a
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    . W; v( _) o! f
  73. {3 S9 k+ o  k4 R! s6 j' X
  74.   int iEOF=0;) [) Z( V& o% I! k1 k
  75.   char szTempName[MAX_PATH];
    + }+ Z1 R* m6 n9 P
  76.   *szFileName=0;
    0 E) U: v+ x4 J2 ]. f
  77.   iEOF=fscanf(fp,"%s",szTempName);6 X. K2 C+ q( U* {5 P6 h
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')0 D0 E( Q8 @( b2 W
  79.   {# b, B( H, A4 P4 {5 F/ u
  80.     strcpy(szFileName,&szTempName[1]);( ]) e( S; o% P0 j
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    / b! b/ ]: K$ {4 X# }' h
  82.     {. `7 U, i$ I4 B) b3 L4 i! X4 Z
  83.       iEOF=fscanf(fp,"%s",szTempName);% O6 G) E3 b" l- I" V, b3 c
  84.       strcat(szFileName," ");7 J* G; l4 E6 Q0 Y3 P
  85.       strcat(szFileName,szTempName);
    6 v/ q4 L: n1 L. O
  86.     }
    # U( x) K0 o3 y1 d6 m
  87.     if(strlen(szFileName)>=1)
    . p0 E  B$ j9 ~8 K* \3 j$ l
  88.     {
    3 r- D: N$ `4 p
  89.       szFileName[strlen(szFileName)-1]=0;
    8 o+ _; Q% H9 W0 e
  90.     }
    * J" X) G7 P+ z% g2 }, `& \5 S: @
  91.   }
    ' j( |# a7 W% J5 t5 w, T0 B
  92.   return szFileName;5 A% l- G5 ?* ~, E# A5 t7 f
  93. }
    % W: e: C7 h5 B/ H8 u
  94. + y1 r2 v7 T( {  e/ c7 C" U$ b
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)* @! c% N* g) S
  96. {: s" U( C( ^) E3 N8 [' Y
  97.   FILE *fp;
    . v* ]4 h" R. t: v+ G4 z0 q
  98.   char *key=NULL;2 p' f, u" ]) v2 v
  99.   char version[MAX_PATH];5 _* b" h6 A! h0 N, Q
  100.   LPUPDATEFILE file,olds;1 \, F8 ?2 Y$ B) B9 I+ Q0 H
  101.   std::map<CString,LPUPDATEFILE>::iterator p;! O2 U' e, L, k( l# c

  102. 4 z% p, L8 A- u8 H, V
  103.   UpdateList.clear();% _$ L, H+ K2 g' n5 G# M  E
  104.   UpdateFile.clear();
    : k# [5 Z, s9 z/ f# U6 X5 o/ r1 v
  105.   if(GetFileAttributes(filename)==-1) return false;7 a, H- ?* h  n
  106.   if(!(fp=fopen(filename,"r"))) return false;
    : o$ Q5 h) d9 J( q/ \4 @/ Z/ S
  107.   fscanf(fp,"%s",version);
    / B( N, z5 n3 F. Z8 X
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    - ~4 r0 I; N" D( C- P
  109.   while(fscanf(fp,"%s",version)!=EOF)! E( T7 G9 H0 i7 j
  110.   {
    ) `5 A4 s) L1 \5 S, w' J
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ X  g2 o1 _, x' U" |( i, O
  112.     fscanf(fp,"%s",file->path);& O6 I- }. n8 n! [/ L* t9 B
  113.     ReadFileNames(fp,file->file);
    * _+ w5 c3 l1 F5 V
  114.     strcpy(file->full,".");7 f2 ], _; e. G0 S1 s0 D9 m
  115.     strcat(file->full,file->path);4 z1 y0 b% M4 [) V; |: c
  116.     strcat(file->full,file->file);/ Q% [6 E2 [1 z7 U; b% b
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    / W, r7 \% Q! ^) w7 E
  118.     {8 k- l7 I  f7 b3 y
  119.       file->vers=(float)atof(version);
    ( j/ j9 S* ]8 [# ?5 i, |7 H
  120.       UpdateList.push_back(file->full);
    , l) Z; q9 g8 f+ Y' G# E7 I
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ! F) J9 ~! S1 v6 N" R. W
  122.     }- Q9 c( _0 ~- r4 c* B! q
  123.     else) W3 W9 |$ B; p# k& a, [- C5 a$ N6 _# l
  124.     {
    5 g" b2 S( L& w- z) d
  125.       olds=(*p).second;1 w) K$ S8 J/ F) i
  126.       if(olds->vers<(float)atof(version))
    * g; M7 m) {$ Q6 l8 y
  127.       {
    6 h# |' V1 l( L6 c  X# n
  128.         olds->vers=(float)atof(version);! Q( z; Q8 i6 J! z  d( v
  129.       }% M- x( e1 M8 E, H: @$ R5 g
  130.       free(file);' M2 Z1 g+ y. y6 P2 _
  131.     }& c3 L! _" x( v4 f& w7 }
  132.   }
    3 |) K- d* Q2 i7 K# I4 Y
  133.   fclose(fp);: g# Q8 h3 L! }: E5 h
  134.   return true;+ {- R2 b! i' j2 ~5 b
  135. }1 S7 ]# v. Y, `

  136. 2 [8 \) D! ~) V4 y! [8 M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)' f+ O" h( J/ W9 C4 U! a
  138. {7 [9 x1 D  `5 _6 @
  139.   TCHAR  szFull[MAX_PATH];. z% A6 }) O" k2 f0 d5 j
  140.   TCHAR *token,*inter;- p. k7 n3 U! ^% L" W: k' j0 K! u0 W. O
  141.   *szPath=0;
    ( D# m1 w  E; @3 o
  142.   strcpy(szFull,szFullPath);
    - @9 C, Q6 g) L
  143.   token=strtok(szFull,"\\/");
    3 P: ]3 w' o( N' V! g
  144.   inter=token;
    : }/ Z& W2 o  i# l8 R7 W2 V, r
  145.   while(token=strtok(NULL,"\\/"))1 T, n+ i- f0 L
  146.   {
    2 I! f; k$ @4 k8 D- u: v
  147.     strcat(szPath,inter);" V; k$ u4 D: m8 W
  148.     strcat(szPath,"\");
    , P- ?2 a" d1 u3 I. G
  149.     inter=token;
    6 A+ o' ?/ X( S9 q$ |6 X3 C5 d/ C
  150.   }% g0 R3 m7 M; ^* S
  151.   return strlen(szPath);' ]& O- k  a5 h" `8 c$ @) N5 F9 Z
  152. }, z, j0 N6 l3 d  e( ~3 u
  153. ' n; `' E8 M/ X5 j
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    6 v5 V2 _2 J7 _7 L/ E- J, M+ u
  155. {, M# }( o7 X5 W5 a7 ^
  156.   DWORD attrib=GetFileAttributes(Target);9 \) O& q0 |) |0 l
  157.   if(attrib!=-1)6 F; V* U8 {2 y: m' C. b4 L0 X( ]
  158.   {
    ( b" z0 \& s- p3 v5 A
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
      N1 o2 S# H: ]) O
  160.     {
    . L: p# P7 x  R0 t$ u
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ; b# S. p9 L5 Q, j
  162.       SetFileAttributes(Target,attrib);& c+ p" D+ I! X/ z
  163.     }1 N8 g: \& Z0 p, j9 H
  164.   }7 q/ ~2 |; ^1 \9 s: }$ h' E: W
  165.   CopyFile(Source,Target,Erase);2 H% A+ b% n3 n
  166. }
    " M" R+ X2 J4 G. H7 a

  167. ( a1 t7 B' R# R0 n
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)- B, z/ r  {) N: S
  169. {6 i2 Q2 u# @  ]- R
  170.      FILE *fp;
    : ~' ^, X- c! u/ R7 F" T
  171.      char  szBuffer[8192];
    7 ]3 M! H' q0 j2 p* `& J
  172.   va_list  argptr;
    " U( `3 o* j/ s

  173. 5 Y/ n$ M3 y+ y! [/ |# ~9 G' w
  174.         va_start(argptr,message);
    ( X2 h+ n# w2 H; S9 O/ N8 n
  175.         vsprintf(szBuffer,message,argptr);
    7 i: f8 }! b% F" X+ w- r& d4 C1 T2 ]2 v$ Y
  176.         va_end(argptr);
    ' j: O! @% l, q# X# }
  177.   fp=fopen(FileName,"a");
    2 ~% y& n6 R3 Q- b; p
  178.   if(fp)
    " X7 N! a+ P( W" p* M: S; \, H
  179.   {
    5 L8 Z( z: {: y7 q+ l8 l  H& z, \
  180.     fprintf(fp,szBuffer);( _. u& T: N+ i# w" D! G
  181.     fclose(fp);
    , r5 v2 \% R* ^& Y
  182.           _flushall();4 p: j, W! @: B9 ~
  183.   }) @5 W* _" L' K/ M
  184. }% j! s/ D# c+ P! o4 c& A* D

  185. , X5 E; J! b* U- h# E0 e
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    + }, n4 a5 B/ F& e! q
  187. {
    - l# {3 g" q+ i
  188.      FILE *fp;
    & j4 C9 [$ C7 U, d$ v- K* T% u
  189.     DWORD  attrib;. S5 \5 V% K( j' c
  190.   attrib=GetFileAttributes(FileName);
    & f9 i$ g) w& m9 T# u+ Z7 T
  191.   if(attrib!=-1)
    3 h5 X: d/ \, C. R6 X* k
  192.   {2 ^# Z1 V& h! V, E) o7 c" K0 r, Y$ k
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);! o6 i7 @% Q+ v5 B0 ?
  194.     if(!SetFileAttributes(FileName,attrib))
    7 ~4 k- H- u9 [' ]' L
  195.     {0 V# D6 A% [! M) s% H+ b! H
  196.       return FALSE;' u$ Q9 G3 Q4 U, _( Z
  197.     }! Q# k0 y" g6 R& M4 ^# X
  198.   }: @! F8 y& i5 s. r
  199.   fp=fopen(FileName,"wb");
    : l1 {7 y- _* m. t$ f
  200.   if(fp)
    4 t3 @3 U9 k7 l' e" v8 [
  201.   {
    0 K; }. u: {1 k, j
  202.     fclose(fp);
    $ \% v- h: A  c, w8 p
  203.   }, g' A, [0 C% i2 W5 Y. R' q
  204.   return TRUE;
    2 u( Y. U! C2 q( {' t3 @8 M/ J  D
  205. }
    % d' T& k# g5 p: {/ o

  206. 8 ^% ^$ n0 L4 ^1 s0 ~% ~& M8 Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void); }' w, b. m. Z# K: z
  208. {
      i# h! Z* _0 C. R: Q3 s0 x
  209.   char filename[MAX_PATH];6 A+ ]. S, M  i! J4 P+ u; a& h
  210.   LPUPDATEFILE file,olds;
    / B4 y/ b. a, u6 I9 m. T
  211.   std::map<int,CString>::iterator i;
    8 H: C* f8 a" ~8 S+ p
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 d. _$ n& v! Z7 x, {( j3 U
  213.   std::list<CString>::iterator l;. v2 Q: v( ~+ x: C
  214. ) g4 g4 l3 n9 ]
  215.   if(bFirstUpdate)
    , V3 D9 b$ e& ]& P
  216.   {
    / `$ ?6 v/ x8 a+ A2 e- Q  u; Y
  217.     dwCurrFile=0;
    $ |2 A$ F: R9 n5 Q
  218.     bFirstUpdate=FALSE;
    6 {/ B  v1 _) R. |0 f. I
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& Y) X; O$ n" z- w
  220.     {
    # I9 k3 P6 d% G  R. E
  221.       dwTotalFiles=UpdateLocal.size();% b( Z8 f' t2 f6 M- e! l- O* i# ]
  222.       dwDownLoaded=0;
    , C4 }/ w, [, H  `1 s- q: D! b
  223.       bSilentStep=FALSE;7 Z3 R4 H. o. o2 i
  224.       bCompressed=TRUE;& r  S+ p+ X9 O; u3 |* f
  225.       strExtLocal.Empty();! {# b; E$ L. `' j/ g$ d! k
  226.       strFullName=(*i).second;
    7 Q2 W; j* S2 D7 U" J2 @: A
  227.       dwProgramState=AP_CONNECT;* q. U. r1 Z, s% E% Y
  228.       return TRUE;2 A# b4 y7 L6 O
  229.     }
    9 c2 L; n# k# h6 o$ T
  230.   }9 J- t5 `' _" [% f' r
  231.   else if(bRestartUpdater==FALSE)' [# H- J/ c2 t
  232.   {8 J0 c% ~2 }; B* Z. S& f
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ( X: c0 o+ ^1 f7 s1 g7 M. p: @% A2 R
  234.     {
    - _- W- W) R& t5 Z5 p6 F* U
  235.       file=(*p).second;
    6 B# w6 }# b! Z' a
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())4 x* m' q/ X) ]# M4 b
  237.       {
    ) m7 N0 S( p+ I# ]* y
  238.         olds=(*p).second;
    0 N+ k- C3 _2 E  g- W: p$ M
  239.         olds->vers=file->vers;
    - d: S' s+ M8 X$ x2 \2 I
  240.       }
    : B# h5 r5 B: y% P
  241.       else
    + X  b9 c" ]) X- f
  242.       {
    , Y3 ^, y9 n: [6 A+ `
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " u; y1 k  k0 d5 p% q8 |
  244.         memcpy(olds,file,sizeof(UPDATEFILE));; i# u- Q7 h6 J5 V- N' H0 G
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));7 l$ a( W3 L$ G/ l: Y) q7 l; \0 {
  246.       }/ ^8 K! N+ W: Z3 i6 p
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");9 a/ P8 B& {( J8 }) m, E
  248.       sprintf(filename,"(%s)",file->file);5 N8 |0 D) m+ }; o9 s
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ i' B+ f5 h0 k+ D
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }& i6 d8 y5 A, N
  251.     }
    1 {( `- H  I1 R& @1 @6 B
  252.     dwCurrFile++;
    % s8 j6 r8 s" D4 d
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ L6 @1 B6 H6 a3 Q
  254.     {  {3 j. |: w3 H
  255.       bSilentStep=FALSE;3 w& B2 }) @0 s" \! P
  256.       bCompressed=TRUE;  Q( \- ]6 Q& o! A! T" Q3 o+ P
  257.       strExtLocal.Empty();
    % v/ [3 Z% Y  C! y
  258.       strFullName=(*i).second;
    % }- y% C& u$ `. R! B
  259.       dwProgramState=AP_CONNECT;/ X  V- k+ ]# x$ \! w0 X/ c
  260.       return TRUE;1 j, R7 c9 W: U" ^' y, v
  261.     }" K; q2 ^8 b2 C
  262.     if(!bRestartUpdater)
    & g) g% e8 O/ I7 j
  263.     {: @5 C* l! {" |6 ^4 I$ ]
  264.       int iCurrSize,iFileSize;7 `( K+ G% K! }, I$ e) P
  265.       iCurrSize=0;2 V  R, p" S: U0 l/ {
  266.       iFileSize=UpdateList2.size();
    2 i# y" t( s  N( e
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    3 y2 f4 F7 R2 c5 Z- W
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");# ]- ?$ H- L# w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    0 l* ?0 h- Q% g7 P7 H
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 l8 s# W# d2 O7 }5 o
  271.       Fclearf(".\\update.dat");
    4 f5 V) x6 {- ^; ^7 l3 B' u
  272.       Fprintf(".\\update.dat","Bloodyf\n");9 c$ y3 Z4 X; y
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . b8 M+ @* [. V
  274.       {
    9 t# x5 @! [3 u5 }. v
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())# U+ |/ k  w  h/ v, N
  276.         {+ R' \9 j: T) K, P6 H0 A) X
  277.           file=(*p).second;
    3 [' t* R# G( Z0 @* b3 ~
  278.           sprintf(filename,"(%s)",file->file);, F1 U7 J4 D: Q6 d
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      N# Q) F% }( j2 d, @% }
  280.           iCurrSize++;
    ) |/ j6 r$ q( |, u" s( P8 k
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));1 @4 @3 R' y- ?! E# t# X! {8 }
  282.         }( r. X+ [" ~8 v2 ^
  283.       }
    % E2 ]9 @) x9 F- p# P# C+ }( d8 D
  284.       unlink(".\\update.txt");
    * w+ C% K0 c" l! J& f9 i
  285.       unlink(".\\update.tmp");
    # W- D4 ?* t' l8 w4 _
  286.       Fclearf(".\\checkversion.dat");
    4 }- F/ S, y" B0 c7 Q9 k+ g
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);0 O# ~6 l! k6 \( \+ P: Y& V
  288.       if(UpdateLocal.size())
    ( p$ [7 c, A/ ?# k
  289.       {5 }! H4 ]: u1 M5 M& h  C  V
  290.         UpdateLocal.clear();( G6 b& j! W9 ?, g1 E
  291.       }
    5 f% }7 `+ [: u  A. h! Q# `- C8 ~
  292.       if(UpdateFile3.size())
    " X7 g7 C7 Z1 Y) k
  293.       {0 j3 w. M# H; {5 n) }
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 T$ O2 I+ B, W5 ~
  295.         {; |5 c5 U3 O  h1 Q
  296.           file=(*p).second;
    # _# b% R. I$ ~3 n0 S! X
  297.           free(file);
    , j+ J4 {( S2 Y8 C* b. A
  298.         }  `0 q* R$ S! ]( [5 u/ V1 C& _
  299.         UpdateFile3.clear();
    : Q( M+ ?3 q/ F4 {# S
  300.         UpdateList3.clear();
    7 U: I) f" K/ W. `6 L8 Y- j
  301.       }
    " G3 b3 m* o4 R3 e5 s; I( p, u
  302.       if(UpdateFile2.size())
    # S7 o2 z9 p9 q3 G! Y0 m" n- F5 p
  303.       {- f& u/ o4 k! d5 x5 T3 V) R6 v& T* a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! I1 t/ u" {/ o& C+ \8 `( H
  305.         {
    8 G/ D' v0 B$ A
  306.           file=(*p).second;
    # p" s/ L& ~" z) v6 X
  307.           free(file);
    0 a' S$ ~% H5 K2 S. x
  308.         }
      o7 F& n1 K, Y% P. Y$ P* i3 l
  309.         UpdateFile2.clear();" R/ L0 ?  g# i, D
  310.         UpdateList2.clear();; Q8 j/ t, K/ O0 e  d
  311.       }3 O( `% G4 b; W: \- O
  312.       if(UpdateFile1.size())
    ( O& W. G; ^& d% `$ `
  313.       {1 f- d% O, V# [- M7 M
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), _, A9 H; W) e( n
  315.         {! h$ I2 o$ t  V( M/ I2 a2 s( X
  316.           file=(*p).second;) F* M  A( h- m( Z: L2 ^  P# B
  317.           free(file);
    6 a/ O7 V: H; ?5 U9 Y
  318.         }
    8 I) w1 H$ F9 u5 H6 X
  319.         UpdateFile1.clear();
    7 w5 o' Y& x* I/ Y) m- ^! B
  320.         UpdateList1.clear();; e4 L  j$ F- l. w; s/ V  j6 ~
  321.       }3 {4 K; C6 u  Y: p8 X+ {
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    1 Q  a- K2 R' Q2 ?! C
  323.     }
    ) C! n8 Y' i) \5 e2 D' r
  324.   }! B. p* _. p* s) {0 z/ _6 Q' y3 W6 M
  325.   return FALSE;
    4 c, f- v) t& \6 o: O4 `
  326. }
    / Y7 v: ^4 [2 L- d; \
  327. ) r. d( E$ }: c; @4 v
  328. void CRevAppApp::ClearAll(void)
    : i* X. R: ^9 j6 X( o3 G5 \4 w1 D" ?
  329. {
    4 C$ [' c$ @% c% e% j6 Y/ o6 D
  330.   LPUPDATEFILE file;; V1 ?* k, p9 O9 @6 y; Z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 W1 d, u- o0 \; F6 {8 m5 G; ?' W  Y
  332. ; x; h( d5 A- G" @7 O2 u5 i
  333.   if(UpdateLocal.size())
    ( x/ j; @0 Z( C, c8 X8 F
  334.   {
    + d" H- _* U. e" d( V8 @2 m7 K' b
  335.     UpdateLocal.clear();9 @* i: `5 S4 t+ J- v
  336.   }' }% Z1 H) R- |9 H% m# v2 ~
  337.   if(UpdateFile3.size())% Q% m6 h/ d! c5 a$ S$ K7 ]& I1 H
  338.   {
    $ O; P$ A" y: q9 S
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - k% x9 x, c( v# |' F
  340.     {8 B$ `, K0 H3 U3 {
  341.       file=(*p).second;
    8 z- p8 I) h! Y# M8 ~5 k
  342.       free(file);
    $ n; u0 Z  Q, I/ o
  343.     }
    : F0 z0 y' @$ q  Y5 K
  344.     UpdateFile3.clear();: f& v2 i6 r: f3 v3 h! n$ w
  345.     UpdateList3.clear();
    ! \4 N, ^. r. @4 M- X
  346.   }, m# e" ^* h. \, O) J9 {. P3 O4 p% {- G
  347.   if(UpdateFile2.size())
    4 e1 B+ A. z2 S' G1 I& G
  348.   {# s/ X4 D9 c8 C# Q* X7 {7 q
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # E9 m- W" x1 q6 e8 A% _# e
  350.     {
    , m! m0 k9 I. }5 F
  351.       file=(*p).second;' W6 B5 Q9 a. a3 o0 C; F
  352.       free(file);
    4 U& p- A& f4 f/ L) u
  353.     }
    % F0 |; e- Q; g" Q- _$ {8 d
  354.     UpdateFile2.clear();" c( |8 p  ~) X9 O! p* n2 @
  355.     UpdateList2.clear();
    & w! d2 F1 V! h' O' @' ?
  356.   }2 {$ O  ?# z  R" U- i
  357.   if(UpdateFile1.size())
    2 U9 a7 b) J6 y2 x( G
  358.   {
    0 _& Y% Y! A% D* }& E/ q! `' G
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    2 M5 t' Z  Z2 k
  360.     {4 g; z( K4 j( g& G% A: u
  361.       file=(*p).second;1 S3 G' [( h& s2 f: v6 L8 l; U  X
  362.       free(file);
    4 a# s! z* V8 \& D" Y& t4 `
  363.     }% b4 B$ H3 J8 n- c4 |
  364.     UpdateFile1.clear();
    8 u+ }% v+ u7 i, V. R# {; P, ?
  365.     UpdateList1.clear();% n+ K0 f3 h' o' e$ z( _
  366.   }
    ; [* O' X* ~& g; t4 Q' ?4 y, r
  367. }  
    1 S7 v6 o; h. s  F4 A- u( k3 p$ `
  368.   
    ( i$ c/ V& f* u) ?! c/ W3 X
  369. BOOL CRevAppApp::CheckLocalVersion(void), W! C$ n! c/ x8 [1 f9 u
  370. {
    $ Q4 l7 \4 w% B, ]0 z* a. Q9 [
  371.   int c;
    8 q! K; Y( Q5 l* s4 _9 X9 W
  372.   LPUPDATEFILE file1,file2;
    3 P: k5 n6 E1 L) B! ?* R7 L
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;, b/ v0 H; N# y( h; @' q' ?
  374.   std::list<CString>::iterator l;
    " q8 q) \2 I" B# g. E* x/ _

  375. $ d% C( L6 f4 }. ~+ ~2 F4 G- [
  376.   UpdateLocal.clear();& ~  `5 X7 I9 n; d" [8 S( `
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    - `9 h+ F/ J; n( |( e* }5 I
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);1 Y# W. i3 a% U3 j( K# a( M
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    % K- Y4 n- L$ n& j& h, B' S7 _- z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);3 u- c% j* I5 Q7 G2 ^& o$ z
  381.   if(UpdateFile3.size())
    ; T; y9 c2 G4 ^8 U( {. u
  382.   {
    7 a: ]: ?, N1 z$ C5 q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
      N5 [6 E4 K# B5 \) s
  384.     {
    1 @1 R4 l! K2 @
  385.       file2=(LPUPDATEFILE)(*i).second;
    , `/ `7 r" o' X1 R/ y! k! M
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). e- T3 L9 E# I) f7 D7 t& e7 O  b4 e
  387.       {
    1 m" j7 m. d* M
  388.         file1=(LPUPDATEFILE)(*p).second;* z) N- M1 O, M
  389.         file1->vers=file2->vers;( e4 R7 A. [9 ^7 _% h8 P
  390.       }! V1 W* v. H2 I( P+ N& m
  391.       else
    5 c5 l( j* i: r
  392.       {5 F2 Q+ Y" s6 G$ J( g; w% p: e
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / ^% x; z8 I6 |6 A' b" f
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));9 I; u0 G3 C* E& K  Q/ Q$ a
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));% T. B' f: M1 k! U! v
  396.       }
    1 s; M% h. q- S! i  T
  397.     }8 j9 w! j% Y$ I0 k) _3 h0 l
  398.   }
    1 O* ?% z, _% o5 h- r+ Y+ K* b
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 ]- R  P7 j: I( {8 J% k: m
  400.   {
    9 [+ R. w7 B: e' w. L5 F# _
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    2 `8 F4 m) v( \7 }- P: y; p$ ~
  402.     {
    2 N. J* @" i) u: F/ h- s
  403.       file2=(LPUPDATEFILE)(*i).second;9 {7 _4 _: f5 i$ P' U! _
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : h4 `: n& p) X9 `0 c8 ^
  405.       {+ J5 P; ~& c5 F6 H# j" H
  406.         file1=(LPUPDATEFILE)(*p).second;; j7 |9 t2 b% V, l( w
  407.         if(file1->vers!=file2->vers)
    % k  T+ c6 a! d8 ]% R1 ]
  408.         {" ^% k' G# h% f
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    $ K6 @7 s: K" x5 ~4 ^
  410.           c++;. x  E) O. s* r: \+ ]" I* P. Y
  411.         }
    9 z0 u; R, l7 e# Q- \
  412.       }
    / S& b$ @7 u/ x
  413.       else# q) P7 k0 W* D. Z. |8 N
  414.       {: `. P! f  A+ B7 W$ l
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ `, e0 F# d" H8 j
  416.         c++;$ H; a. g' ?9 w8 `, k8 y: ?
  417.       }
    + s( \0 }4 w0 P6 d. K
  418.     }7 X/ H8 L" z2 z6 q* ^* |2 ^  A
  419.   }
    ) Q4 y) {' }- v# V/ m1 I
  420.   unlink(".\\DownLoad\\update.txt");- G# b9 @1 f- P
  421.   if(UpdateLocal.size()) return TRUE;
    1 s  e3 O3 Y" c* m$ S" r5 w1 x
  422.   else                   return FALSE;  T6 p, l1 [/ \5 N
  423. }
    2 D, J* d+ [# z; V% d

  424. . ~" a; N0 y8 m, W
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"& [/ b2 Z& p9 r: z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn") j% X7 X& ]9 C2 a6 |, J: F

  427. ; k- ?$ O3 |7 [

  428. * ]0 ]1 v; ~0 y, ?% E
  429. # F; h9 b5 j. J/ ~
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile): j6 z6 M* ?" J; p5 M1 R% V
  431. {7 Q! b2 v6 M+ J7 l# A' \% H
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ) R, f( i- ~* r
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 m: R1 C# O, N6 B' e& z4 B
  434.   {
    1 b) e5 |5 g' U# t' X
  435.     char szLanguage[50];  T0 `/ P' B) P2 |4 ^" S
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    % F4 G' m; u( T; Y% T
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
      b8 {  O8 ?; E# _. Q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - b/ s6 {3 x! a
  439.     else                                   m_iLanguage=ENGLISH;7 x5 L6 I, L! G: x
  440.     char szRegister[100];
    - ?- o& X! f. {: `
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");* @3 E* N- s5 K) s! a
  442.     strRegsName=szRegister;. E1 g- n' o6 M4 G
  443.     char szPatchURL[100];
    ' z0 ]7 r4 G9 ~+ D5 A
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 ]- Z, z4 c1 c4 c7 e2 h
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & K1 R0 p, ?" m1 r8 c* t6 f1 }
  446.   }
    9 [$ U2 ?1 y9 d& r
  447.   else* W4 y/ d, w& a6 j0 w! Y
  448.   {
    1 K1 u6 w& W" s, W$ R) f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , x* P) N% E: r' [
  450.     strRegsName=DEFAULT_REG_URL;
    0 {" n# ^' A% B- t- T3 U& a
  451.   }4 N0 u! d; ?: c9 ^; J
  452.   if(GetFileAttributes("hosts.ini")!=-1)6 |2 j+ L3 w" `5 C7 R
  453.   {
    / I9 ^8 Z' O' R9 F( _3 ^4 w. P6 w
  454.     char szIP[50];
    1 g- ?( O/ Y& {
  455.     char szDIR[300];
    $ q% l! u7 t; n7 M
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))# b* X* I* ^" ~1 ~- H# h& u' N& Y
  457.     {
    3 M& l3 f( {9 C+ y' K" Q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    9 E- J% Q1 y, V* ^5 j
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    * O% j) Z. ~* e5 J
  460.       strHostName=szIP;
    ! i9 W: D. }) g' E% ?2 _# ?
  461.       strHostPath.Format("/%s",szDIR);
    + L7 c& C$ k0 m" ~7 w* _9 Y. j
  462.     }2 I$ v4 Z% _+ K1 }0 Y3 l4 {3 `
  463.     else3 u  s  E/ s0 ?" m5 c
  464.     {" `; ?, x1 Z# ~0 M
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  G/ @4 [! c' P- A) `3 Y
  466.       {
    : b2 r! l; [6 ^' u% u* W
  467.         char szLanguage[50];
    + a$ Z8 J, K! Z# g1 x7 ]8 G
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");. J& J# X) t* `6 G; W- X
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    1 a2 J9 Y/ J2 {% C0 A! }; E0 ^$ h9 i
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    : i- i) R$ r. |4 s& _
  471.         else                                   m_iLanguage=ENGLISH;+ `, q: h! z1 O9 q* G8 }1 C: W; T
  472.         char szRegister[100];# h$ B; X' E4 Q$ j$ c2 a6 A0 n
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . [2 m: k1 E7 c
  474.         strRegsName=szRegister;
    4 s; V, ?! `  m9 e, K4 @$ r
  475.         char szPatchURL[100];
    . W8 Y" r) [9 f2 K  \7 X
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , o. z3 j: \6 a3 o, O) k6 G
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  o: G  q, c- k" j5 [4 U1 \* Z5 |4 _" w
  478.       }
    # K: Z. p3 V7 N% o) j
  479.       else
    4 n; f! j2 P( W; Z$ r" C. O  |# O! K* \
  480.       {3 \0 Q0 j7 o8 l0 z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 A9 r! e3 S! U
  482.         strRegsName=DEFAULT_REG_URL;
    ( x- E  r0 V/ ?# H, x' |. T/ j$ D
  483.       }
    / R7 T) u! B2 X7 T: y" e2 f
  484.     }
    % \$ B$ F0 _; V: Z. Y0 _
  485.   }4 F0 n0 D8 ~' \1 O
  486.   return true;
    ) ]/ G  p% U5 J+ s
  487. }  K6 G* u+ L* L+ V1 {
  488. 4 o% F& ~0 ~" B& M* V+ k
  489. #include ".\ZLib\unzip.h"
    2 E0 n6 @' B: q' J( P$ F. w$ \& p$ `: A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
      Q! |  p) N5 }. k; d+ d
  491. /////////////////////////////////////////////////////////////////////////////( M' ^& i8 g4 G) i  ^8 v
  492. // CRevAppApp initialization! c. Q7 m, x; v0 i

  493. 7 y! ^% k: b8 h5 w) d7 M
  494. BOOL CRevAppApp::InitInstance()! M% i) }/ V* z1 r) ^
  495. {+ ~1 @7 n8 I4 F  i* J* d% p
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];8 p2 [: P0 s1 P$ h* r, W
  497. 3 f. H* p8 j* v3 h# B0 x9 V1 Y5 y
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);' z: o. A! v0 D9 m  `$ t
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    & p( N% O# X; C9 L
  500.   {7 i+ ^4 `% o  i/ P0 ~0 r/ ]
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");9 d5 Y/ w" s( `0 ~( L
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; T# Z  g' A* g( c6 w5 a
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    # r. B9 H1 v+ [2 A
  504.     {  n' [1 _' D; K5 c9 `
  505.       strcpy(szPath,szPathTarget);
    + b2 n0 X( e4 G0 x* B1 j3 B
  506.       SetCurrentDirectory(szPath);" s2 B. Z8 R. z2 L+ f
  507.     }
    " F  m) S: a# Q1 h& O. W: {
  508.   }) e3 |1 E  T3 m$ [2 m
  509. #ifdef _DEBUG$ I# B. X; Q" j! Y) V3 `
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - F: u: Q) A0 g( \
  511. #else3 F) X6 ?6 M" f& U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    : k, p! g( C9 |' `
  513. #endif
    ; z& |( z) J' i- z
  514.   {5 ?1 V  {/ z! e+ @
  515.     char tempFileName[MAX_PATH];1 H. V1 |, F! [3 M
  516.     strcpy(tempFileName,szPathSource);7 g! ]  |9 O% v" @
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( S  r3 K- Z  |$ \  u8 z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");! s: }& r9 X: o7 Y5 E9 D( Z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);3 x% Y8 T0 n& `" J! y, k
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    % A& }$ {4 o$ p9 R
  521.     return TRUE;
      o! v/ B8 s) ?  L( n6 P0 _
  522.   }3 Y. R/ {; R! G: D  y; I
  523.   // Nuke 0118: Delete run.exe
    9 x4 M8 b0 b: T6 l: Q8 W; J0 S0 V) b
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    - @2 E8 O1 C& d4 ^7 h- e
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ! F, H3 A9 q, q) J
  526.   if(!ReadCfgFile("Config.ini"))% X+ u7 v8 M: z9 P0 J5 S2 o
  527.   {/ f( n! b9 A8 I7 g5 u
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);: e) u. ]& |, q6 O) M
  529.     return TRUE;, _! B; C0 K/ N' ]; C
  530.   }
    6 ~0 \/ [& j7 H0 i: k7 x& L7 p
  531.   HANDLE mutex;
    ' v) C* O# R8 J* S" Y4 v, @/ z% C
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))8 e9 b$ ?3 N7 H+ T
  533.   {
    . t6 \) }6 h7 B) p8 O% d( V8 H- W2 d8 N
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS); v# j; y: m( i! I  Y" U
  535.     {
    8 z. u' j9 l2 S  U
  536.       CloseHandle(mutex);
    & _: w4 u6 P0 _2 f
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
      k0 ?& p! y/ L8 z/ e8 e& d
  538.       return TRUE;
    ( R( t! ]/ N* q  a
  539.     }6 H1 k9 ~$ \% R5 X+ g! _
  540.   }  
    . [" G" P8 q, a$ Q
  541.   CloseHandle(mutex);% [% S7 U3 v. e0 ^/ z" \
  542.   C$ t  F4 D% \; P
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    6 E& _& P1 M/ q" O* }( m3 G1 p
  544. ( |$ N7 D, X! y4 V2 C
  545.         AfxEnableControlContainer();; R/ ]$ g- v: I8 [
  546. 8 E2 ], d5 ~$ U+ q6 E) D# r" |
  547.   bCanUpdate=FALSE;
    9 V. q  o8 I2 `7 P9 v2 _  d: Z
  548.   dwStartUpSteps=1;& F& c9 p$ E( M( D* M8 }1 @
  549.   dwProgramState=AP_NOTHING;
    # H3 F. I  C& w+ ]
  550. 7 c6 E' G9 M+ w4 W4 l8 d4 X9 S
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    " d/ _9 b$ a0 s) r

  552. ! ?/ V) O# x# O8 S8 f
  553.         // Standard initialization
    . r7 @0 u/ D8 g; w% G
  554.         // If you are not using these features and wish to reduce the size
    ; m0 d: I  O$ k7 `2 d, _1 j' p
  555.         //  of your final executable, you should remove from the following5 n4 g5 \$ J# V' d( ^( `
  556.         //  the specific initialization routines you do not need.2 e; P/ s% S9 [2 E+ T

  557. % |. l, Y* L$ [0 m3 e  p
  558. #ifdef _AFXDLL2 R, M6 h2 f3 {9 |  \( s; C# e1 o
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL" F/ B' x  d5 g' X
  560. #else
    # k; v4 f7 G0 b1 \2 v# E, d- O2 r
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    - s- j& ?2 t! a& `, f
  562. #endif; v' `4 }9 Q* |2 l& I; X

  563. . N1 l* v6 D& P/ \: Y, h& T
  564.   dlg=new CRevAppDlg;$ ~. ~# x! C" t; H% a8 {4 T
  565.   dlg->Create(IDD_REVAPP_DIALOG);! [6 g* P# P/ }) a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);  z- H3 J$ f7 ?  X8 d
  567.   m_pMainWnd=dlg;& z9 W9 C3 J" m

  568. & b7 E3 w$ T. G, w- q6 _
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);! s; n' Q( M0 J$ {( Z! m' l

  570. ; T8 x7 E$ b& u  @* t
  571. //  GdiplusStartupInput gdiplusStartupInput;
    $ J' k  Q7 n) V8 I) E# E3 T, |# E
  572. //  ULONG_PTR gdiplusToken;
    - g$ m6 L8 e( u2 B
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);1 E) I$ R5 G, E9 E2 u/ M1 `# S0 D
  574. 8 C* P  c, w9 B; U4 i: M
  575. //        CRevAppDlg dlg;9 w! s# z% d5 T1 k. i
  576. //        int nResponse = dlg.DoModal();
    ) u+ n" T+ f! s) }' u7 s! P" A$ U
  577. //        if (nResponse == IDOK)' y3 E8 Y* e) E/ D6 D! ?
  578. //        {
    3 y% ~9 z8 `" D5 R) q
  579. //                // TODO: Place code here to handle when the dialog is
    / p0 h' G4 p( C4 K+ ^  r; e0 t
  580. //                //  dismissed with OK
    ! e: ~& M& @# A% M6 P) ?
  581. //        }
    ' G2 c  d( E$ \# G+ c* e
  582. //        else if (nResponse == IDCANCEL)
    5 i) L# Z* u& b
  583. //        {$ M1 x9 J3 e  X" Q
  584. //                // TODO: Place code here to handle when the dialog is
    0 h" _  @- P3 D% C9 p/ C
  585. //                //  dismissed with Cancel
    6 z1 R: ^; J6 z
  586. //        }5 N3 v. C( f2 U; {: m6 z

  587. $ D  t/ |- D- }; z* q" ^. I* O
  588.         // Since the dialog has been closed, return FALSE so that we exit the8 \  U7 L) p9 g' Y/ f
  589.         //  application, rather than start the application's message pump.
    ) G7 @! z4 E2 V. i
  590.         return TRUE;" @+ i1 \* R+ I, p3 [; c
  591. }
    . b2 [# }) ^7 _$ M
  592. 7 X  T$ W4 d6 O0 x- C: ]% g
  593. char *CRevAppApp::strtok3(char *pSource,char *token)" \$ @! X- j( X8 P$ K
  594. {8 }" @- R1 J* g/ {4 U1 |
  595.   int i;! t' `6 N, u' X+ i0 ?$ Z. R
  596.   char *szRet;
    4 R: \/ h2 K) m$ T5 Z4 S

  597. # C6 H( s4 y1 I$ B( U, f$ v1 x9 }0 H4 c
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ' F( W* P! U+ }' ?1 {
  599.   if(sztoken)
    , b' p; a( C4 r+ m. i4 k* M+ A1 g0 x* r
  600.   {; E2 j5 ]6 |$ \7 f
  601.     szRet=&sztoken[itoken];
    8 O/ D! B2 D( M2 y: i  ]6 x
  602.     while(sztoken[itoken])" [" z" B, f' x6 A# Y% S
  603.     {. l* A4 Y4 n! t; A0 z" _9 c8 h9 G
  604.       for(i=0;i<(int)strlen(token);i++)
    % l$ _5 C7 ^# _3 m9 e: K
  605.       {
    " }7 H# X! c6 i; C5 T' [( a% H3 O7 m
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])3 J! u) u- r9 D9 R( `
  607.         {! [! \' U7 V  b8 W5 K- ~1 r+ y) h- x
  608.           sztoken[itoken++]=0;
    6 n2 L1 g# ^! y2 p% i
  609.           sztoken[itoken++]=0;3 c6 t: |" r- l2 w. ~
  610.           return szRet;
    ) J, `/ h) x3 Z/ G+ ~
  611.         }
    : s( {. D; u' `1 R) t
  612.       }! w# w: j, ]% ^& J- m
  613.       itoken++;
    / v  g+ I2 l- Y. f, E% l/ y
  614.     }( V% T' G5 x. N' W5 ~+ d
  615.   }% r8 L, ~2 h6 ^6 q, o9 ^: K
  616.   return NULL;
    4 j3 y9 o3 L4 ?) C
  617. }; m: X, b6 Z$ _: M! d
  618. , D( T: n. ]0 x* E. q6 F
  619. void ProcessProc(long Total,long Current)
    ( `, e* T4 a. h3 I
  620. {
    : N9 Y; t. l* l9 S8 A$ ^9 M: V1 v
  621.         MSG msg;
    ( @" t7 \6 `. X& u1 E% @
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    : g) f  w" j1 Q( n
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - p! o* Q/ {5 W6 }( g& Q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    & z1 c2 y$ v6 f  t) e
  625.         {1 J7 c9 [4 H- R- B
  626.                 if(!GetMessage(&msg,NULL,0,0)); ~& L4 L: ]$ I4 m  o0 n) y
  627.                 {" X' D, m4 D" I( x4 x) V
  628.                         return;. P& K! W  u. P) u3 M
  629.                 }
    4 w6 \1 C! J  t& a: y) T
  630.                 TranslateMessage(&msg);( k% b' ?& S; ~& c& J' j
  631.                 DispatchMessage(&msg);
    # U: N$ d3 s8 i2 X: x  \' [
  632.         }       
    ! o9 [; C" {, b$ i2 P+ m
  633. }
    2 \9 \0 N# z+ l5 }  N6 o- K6 V

  634. # x/ g1 p( z9 l# M% A
  635. BOOL bFirstChar=TRUE;
    9 ^7 Z4 \8 V7 ?& k$ Y% a( F% R& [

  636. : _7 P7 m. |3 e' i) I) g
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ; l) J6 y& G9 _6 }; w. {5 h# m
  638. {
      p/ I2 M' H8 x
  639.         // TODO: Add your specialized code here and/or call the base class
    7 E2 k9 D$ P. J  D1 ~* G! b
  640.   switch(dwProgramState)
    4 T, i( F0 j. {
  641.   {1 m+ \; L# ~" T% Z! g* ]1 V
  642.   case AP_NOTHING:+ I+ s( E) s6 B# V- D# i; ?
  643.     switch(dwStartUpSteps)) E8 b' H" B/ c$ V8 G5 r9 n9 L( H
  644.     {$ u- ]9 Y2 ^4 F! q
  645.     case 1:
    ; |) w0 Q3 S% ~" B; h! v6 F6 n' M! \6 s
  646.       {% e* X3 Z5 d; Z. N
  647.         int i;# m7 ^6 ]: j1 w$ P6 T! w/ _4 q
  648.         CDC *pCDC=dlg->GetDC();
    ) X+ E4 d; Q6 Q, E* a4 J0 \% k, e
  649.         HDC hdcwnd=pCDC->m_hDC;
    7 C- l/ l( A3 W+ Z& ]! r/ l. Y
  650. //        Graphics graphics(hdcwnd);7 C8 A8 V" s6 m" ~4 v
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    / k+ P9 H0 }& \; a9 _
  652. //        INT iWidth=bitmap.GetWidth();
    7 G- @1 H8 c0 X
  653. //        INT iHeight=bitmap.GetHeight();
    - }3 y$ C4 j: C# x  b  [& {' S, p
  654. //        Color color,colorTemp;* ]. v# Z5 g. _3 N4 s
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    : M- ?9 h2 Y4 t7 o/ [
  656. //        {/ r" k/ O# U4 ]+ H: \) S
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    6 S/ }- c/ R% o' k' p" a
  658. //          {
    / M7 I" {, }& @" U( f0 v& _7 ^
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      n% u- r9 v$ K! Z
  660. //            colorTemp.SetValue(color.MakeARGB(8 c( _: b% i; T6 Q: r' v
  661. //              (BYTE)(255*iColumn/iWidth),/ t4 h3 y& d  c. @4 T& g1 q' i5 \% `
  662. //              color.GetRed(),: n5 O! ], ^/ o6 p& d
  663. //              color.GetGreen(),8 I* X7 G' J1 X
  664. //              color.GetBlue()));, g# A! P0 C1 ?$ B+ R
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    & Y, `8 r  {5 E& e+ U( l
  666. //          }
    , Z4 n0 ^# }+ ]' Z0 w
  667. //        }
    + F* m* {5 {& ]5 w$ w! u7 Y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    * l4 H5 }; y& D, X$ _! T1 [' j( g
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: a5 G1 V5 y6 @" P3 t6 m; ~8 P
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    & V' g- R7 @- H& c2 Q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 ?8 g# H$ r3 U) y
  672.         for(i=0;i<240;i+=8)$ b3 e8 z) E0 v1 h; i! \
  673.         {
    2 V1 o( k. q0 L) h
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' w% z1 H, F% n$ e( y8 m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ n& T& i$ q0 T5 ?
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . ^2 r3 F) E/ o
  677.           Sleep(33);6 W; a1 m- n3 Z+ M, U6 K6 v
  678.         }1 u+ O0 x  b0 y9 T5 e4 g5 q
  679.         Sleep(1000);8 X+ \% n1 b4 J% H
  680.         for(i=240;i>0;i-=8)  \% K" H6 |% G1 @' w
  681.         {5 \' i3 K2 V5 D- g( N/ g! \
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);1 @3 ~& k- r4 A' |, y  A
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 E5 H7 d9 u6 l% Z% b; ?
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    7 V! }# u6 M" @$ D4 S- D
  685.           Sleep(33);7 O& I* j* K5 f1 \" ^* `- x
  686.         }+ y4 ~9 j9 @& ]1 T/ B" k( ~! s
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);/ {1 J3 [9 F7 v1 G2 X
  688.         dlg->ReleaseDC(pCDC);
    # B9 [4 h) o& Y0 d& j+ f* I( }  F
  689.         DeleteDC(hdctar);6 r4 @: h5 k. J' t
  690.         DeleteDC(hdcsrc);8 E/ g5 z( y" q( {, ~
  691.         DeleteDC(hdcorg);
    4 Q! L) b7 {8 ?  X9 i/ y
  692.       }4 J: e7 m4 ^5 x0 n8 U! J. ?0 m& P
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    6 N7 D/ m  L9 _$ L$ S/ ?
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");3 p; @2 T3 L" r7 L* @. c/ j0 @
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ! m: Z* i7 @! l( {8 X! B4 E
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");  v9 @0 t! c% S4 v9 Y* F
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ k  C, D" j' G, n, x5 U' h: B
  698.       if(!Dn.Connected())
    . Q3 b& j) ^$ i
  699.       {5 Y' G" x6 u8 ?( {- c$ a8 j. K
  700.         dwTotalFiles=1;$ c6 Z& c# v: P: a, ?7 @- X
  701.         dwDownLoaded=0;8 _, _- x" c- F( s4 s4 X# y
  702.         bSilentStep=TRUE;  x( h2 d/ R/ T" [! ~
  703.         bCompressed=FALSE;
    . ^' ^$ P; i8 t
  704.         strExtLocal.Empty();% y* q: S- O7 k9 Q; c% K$ R
  705.         strFullName="readme.txt";) i/ A. D/ _: Q3 Z9 W, ~: T3 J
  706.         dwProgramState=AP_CONNECT;
    2 Y. y+ Q! U) s: e7 Y, O5 ^5 r
  707.       }
    6 ?% e4 H  K0 D. B! D
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();! R' \- L. G7 Y' Y
  709.       dwStartUpSteps=2;% x9 O5 ?" X* E+ Q- Q* F' L& S
  710.       break;
    $ `9 g/ Y3 Z% H; }
  711.     case 2:" b- D  D9 M% ~) E9 I* U6 q
  712.       {
    7 y" j, U' G5 F5 e
  713.         int iEOF;2 i5 u! `4 |' G+ l+ G
  714.         FILE *fp;
    7 M( H4 O1 V2 A! T- C5 l& e  N
  715.         char szString[512];
    & q  E' G6 f7 {! n/ P% e
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");) k1 c0 m1 |! i- m2 I( x8 }
  717.         if(fp)
    ( `" _, Z  i- }
  718.         {) D; x6 }$ X0 y; `9 t
  719.           do
    * c! n- z0 J% ]
  720.           {
    ; D) t! @& d9 N  [7 u. O
  721.             iEOF=fscanf(fp,"%s",szString);
    7 U3 e3 b( U8 w( B9 O, d
  722.             if(strlen(szString))4 Q  b4 s0 f4 p% E5 {5 E% F# T
  723.             {
    + W" m8 {  l) K1 b! O; b4 U
  724.               if(bFirstChar)
    . r: f8 x* z  }4 G0 D8 E& F: S5 ?! Y
  725.               {
    0 Y' X  ^- i- J8 z0 u6 X
  726.                 bFirstChar=FALSE;8 D4 a% w. \' t5 |- H
  727.                 bConnectIsBig5=FALSE;
    3 U$ ~4 x5 U/ b( w( Z+ T" a
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;. U2 ^' w% D% W5 @/ n
  729.               }
    4 [5 T9 z+ V5 H
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ; ]$ t! x( e% d" I
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));8 Y) e7 E# J- o/ g7 U% I
  732.               dlg->m_ListText.AddString(szString);1 k9 |' S2 ]+ H3 b
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' o  g9 c- k* U
  734.               *szString=0;4 E6 d1 z5 T0 _, Y& r: m7 a6 g* w" e
  735.             }
    9 b5 t: z" S1 j
  736.           } while(iEOF!=EOF);4 {$ {& ^4 O8 {$ o$ I9 K
  737.           fclose(fp);
    7 n3 a6 b3 H! q: c6 F
  738.           unlink(".\\DownLoad\\readme.txt");& F- T/ l7 g& _5 S1 G! T
  739.           dwStartUpSteps=3;
    " t1 ~7 B8 ~+ e5 G
  740.         }
    2 @5 K; U( c/ d: W7 J+ f5 r
  741.       }
    3 N3 `) O" ^7 h  B- V1 b& e( C
  742.       break;# Y) R* `) K; Y6 ~, }& A/ Z- W
  743.     case 3:
    & M* D+ r2 ]7 g
  744.       if(!Dn.Connected())+ d, j  y! Y# j9 B5 _
  745.       {
    0 y8 p, t2 m7 R# g+ |$ p
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    7 c, }  w. m" [! X" f8 b! h, M+ [5 T- w
  747.         dwTotalFiles=1;) Q8 K% p3 b. y* z+ |
  748.         dwDownLoaded=0;
    9 c3 T% T4 `- ?  X0 p% F
  749.         bSilentStep=TRUE;
    3 y, h+ z( s# w( }2 p1 n  ^% _
  750.         bCompressed=FALSE;
    , }: D5 E' h7 a- g& }, n; H
  751.         strExtLocal.Empty();
    , a9 t: e, V) |0 g  |5 e
  752.         strFullName="checkversion.txt";/ {1 y; B; `  q  S' l
  753.         dwProgramState=AP_CONNECT;
    * Z7 V. n" M/ N1 A* b4 d4 y
  754.       }! r4 J0 S" `' E' |, T
  755.       dwStartUpSteps=4;
    3 K& f5 Y# U( \* J3 k5 ~
  756.       break;
    % c4 o& |3 L5 W  ^
  757.     case 4:
    ; S7 W2 p) N8 O
  758.       {
    3 J5 a, c: r3 n) i
  759.         FILE *fp;
    2 @/ i. q$ z* h3 \9 G" r
  760.         char szString1[128];
    : [$ k: X+ f& k' T  z/ f! p% a3 L
  761.         char szString2[128];& {" \# s8 T+ M2 B0 \! c3 N
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");& n. Y. O9 j. _3 t
  763.         if(fp)
    ! [7 ~9 J: J* e' Q2 q
  764.         {. y0 b8 E" A9 ]3 m! w/ \
  765.           fscanf(fp,"%s",szString1);
    % |: c: C" v( m1 f$ x' k
  766.           fclose(fp);
    & {$ r, `) _6 x
  767.           fCheckVersion=atof(szString1);7 i/ b$ e* F: J( K! p' E" u
  768.           fp=fopen(".\\checkversion.dat","r");
    9 M- s* `  O* c7 w
  769.           if(fp)
    7 ^( t% l1 }$ z3 q( ]
  770.           {4 P4 p1 M# ?$ t5 I9 s' Q
  771.             fscanf(fp,"%s",szString2);6 n+ j2 J6 d% {: n' W5 h" x+ l
  772.             fclose(fp);9 z# ^/ t! \3 X4 D
  773.             if(atof(szString1)!=atof(szString2))0 S: U* D* @3 [/ i4 X! u/ d
  774.             {" f# j9 S8 E4 {4 ?2 \, W
  775.               if(!Dn.Connected())
    " \" N/ O4 c& w5 P" S0 q
  776.               {
    . K# v9 Z5 U5 D; A
  777.                 bFirstUpdate=TRUE;
    9 h. r0 q% Q( a+ @
  778.                 dwTotalFiles=1;
    * k2 [: `8 T4 @6 \5 Z4 C
  779.                 dwDownLoaded=0;
    1 }- A: }( V9 j# ?
  780.                 bSilentStep=FALSE;! `, m0 C; A* Q3 T- m" o
  781.                 bCompressed=TRUE;& D* _  q1 S/ M7 M# H- u- B( T
  782.                 strExtLocal=".\\DownLoad\";$ n' G. K9 G7 N* |
  783.                 strFullName="update.txt";/ t" b- O2 Z8 ?7 t; \# `
  784.                 dwProgramState=AP_CONNECT;
    0 h. Z) }) k5 o, B: |& s$ b* |  ^
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . K9 Z3 V6 g/ Z( M. ?* L3 \: s: d
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 r3 ]3 h6 C5 w' j1 r
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 F1 I9 ]! v$ y" R# J1 r8 k0 T
  788. ( V5 D. D9 o2 ~3 [, j
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; F7 y" W; [. a- o; F/ I+ {
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    : Q) e  y5 J6 r
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)% b. q4 L( i9 h6 N6 S% k
  792.                 {
    4 }) O. I+ O2 |  I' e% Y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    , x8 ]( B" R4 C
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" l( v: J( U  f: N
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ( S7 C7 w2 M$ ]! B) p0 o  A  Q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + b8 _2 H& S# _4 F5 X  r) q6 z% i
  797. ( v1 m' c- E9 D) |
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' f% O6 H7 q. ]8 W! q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      ]4 ]. H) ^! k7 J" V8 i  ]/ m# i' S3 \
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    * g# g1 a- ]- d! B) i, l" X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 T- u( h6 e5 \9 k5 Q. X: H
  802.                 }
    2 P' c: ?! M3 M- E( C  ?
  803.                 dwStartUpSteps=5;
    * o6 `+ Q( L" G! H
  804.               }
    3 U+ D4 K5 D; h9 @2 [6 g
  805.             }3 P3 D5 O. M1 r6 z4 M8 A
  806.             else
    5 ^5 K! R6 ^, m& ?
  807.             {* `+ J+ ~, Y2 O6 g+ i3 u0 _& X8 E5 H
  808.               unlink(".\\DownLoad\\checkversion.txt");8 m4 a* r3 P( p+ h$ m7 B6 y1 p  ~
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! d1 }/ J. h: U
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    . x( D- N) M! a
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 E) ]- a8 _6 F5 K* j$ I: y' N

  812. ' R- E, f: s% u! e
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 E5 Y( |+ S0 N1 f8 h, x: S
  814.               dwStartUpSteps=99;( O( h. l3 y% Q/ h. x5 Q, ?% W( |5 V2 ~
  815.               bFinishUpdated=TRUE;
    9 O* J, _. A, T2 Y: a: u
  816.               bCanUpdate=TRUE;: P' T- @+ c3 Z. K* S
  817.             }
    / M3 M  j) w4 m: N/ O
  818.           }
    2 y5 W+ C. K( z
  819.           else
    - y! v7 g& Q6 ^" C% S6 [4 L
  820.           {
    ; H" ]+ _5 |5 T  }' Q' @
  821.             if(!Dn.Connected())
    / e, Q6 J( |5 z! p. f8 Y
  822.             {0 ?% i  e! I6 @
  823.               bFirstUpdate=TRUE;5 n4 P0 ?! E3 N# R  v. z
  824.               dwTotalFiles=1;, n8 s5 |) l) |+ `6 M' f
  825.               dwDownLoaded=0;& k4 g6 u0 k: d
  826.               bSilentStep=FALSE;
    8 n) m* z* }( p2 C1 [5 g2 ?
  827.               bCompressed=TRUE;  d& u" }1 p' N/ j) Y
  828.               strExtLocal=".\\DownLoad\";1 T0 O0 w; e+ g1 l% O
  829.               strFullName="update.txt";
    & B/ S' T# L; w1 G, k
  830.               dwProgramState=AP_CONNECT;* s- n* t7 V' I! }! [' i
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 B9 d5 m9 q% Y' c6 k. \
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) [% |$ t: R5 H" n+ n
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! B" e/ B, X) D
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ o' f- P( Q! {5 `
  835.               unlink(".\\DownLoad\\checkversion.txt");
    4 \& Z& E, d; C! T
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)' }; W9 M1 e2 v+ \# k
  837.               {
    - A' a9 U1 H9 ~/ M$ J3 e# a
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    & X0 b) A. u) c
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");) A. b) t. \; a- [: ~; D
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    / M6 H  [( h6 E
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 ]) e* J6 m9 j. P
  842.                 ; h5 D4 L9 X! U9 I* s, r
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . L9 A# O4 y) D4 y; d0 X
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 V4 l9 e9 d  \! J2 ?2 r, p
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    % |7 P4 Q  |& Q, I  m
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. u- U7 N. ?* a# G" Q7 K7 [
  847.               }5 z# i" k2 V- ?) O% y0 K+ N1 t
  848.               dwStartUpSteps=5;
    % N/ y  z2 Y  u* [6 C+ X0 N. X
  849.             }4 [1 L4 W. T9 [3 h
  850.           }
    , e3 e8 I: V# h# M  |2 J
  851.         }( M5 v; S+ Y9 E5 P2 f: C
  852.         else5 d  D+ f/ Z- b- O) R
  853.         {
    7 K0 E9 l) H6 y; m+ P* C
  854.           dwStartUpSteps=3;
    & s+ j" |+ V( U, R& L4 @9 b
  855.         }
    ! e, N4 Z4 }2 L+ A& j' W$ E
  856.       }# y! O; {) L( R* F# j3 x
  857.       break;
    & h% n% J) f7 ?2 y$ W  ~# \
  858.     case 5:
    $ v9 E% R9 a; O2 K% S6 x
  859.       {
    ; X1 N( A: P) c' T! R2 H
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    + L) D+ E% _. n0 Y. U6 e
  861.         {' n3 S# r9 Q) h' t' R
  862.           int opt_overwrite=1;
    + N  n5 a5 X( ], X7 c
  863.           int opt_do_extract_withoutpath=0;' n/ F& Q9 @& Q& V( h/ G6 d. S
  864.           unzFile uf=NULL;
    - S) R6 g# J- x3 q3 \0 Q, D
  865. 1 G- b8 N3 f: s$ N8 y' M0 K  P: A8 ?
  866.           uf=unzOpen("Wsa.zip");/ C  j. q/ z# Q: O
  867.           if(uf)/ }  k$ X& g9 y; l* z- @
  868.           {
      c  r0 N% A/ m! \$ y# q! Z  r
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    " m0 [' M- m: a: u" `2 Z. T1 U0 v
  870.             unzClose(uf);
    2 T3 t, Q  m1 J1 b
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
      |5 X* y* Q5 X9 v6 d
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");: d/ v, P0 `7 |# w5 z3 r) w  j* c
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");! y% D' ^  V3 c( l' H9 H
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      Y: ^) P+ f* `" F% p8 t
  875.           }
    / I: e7 L; c+ Y) {
  876.           DeleteFile("Wsa.zip" );
    9 N4 z7 e# L* P8 s$ o' N8 U
  877.         }& m/ j8 D7 s3 b

  878. 0 @8 r' x. |/ Q$ e9 t$ g+ I- l
  879.         if(CheckLocalVersion())
    ; @1 g" Z' Q9 [
  880.         {
    % m- j7 y, f, l7 Q: o
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    # e. ?/ z; c$ J1 g; `; y; I
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    & k3 s5 d  ]+ {- l8 f6 [; i
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    6 L, ?# j* j' p& x2 s5 e( {4 i
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , C- J. S: l, m+ ?2 h4 D
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);* I' }: K4 o! s( U. @3 e
  886.           dwStartUpSteps=99;4 O9 n" M, C  x% w8 C- D
  887.         }
    ( k1 v6 Q; H) b3 q8 Z+ |8 y
  888.         else
    $ y/ y: H/ O7 Z. I
  889.         {$ l' _) w( ]' |* i2 W+ R+ m# ^$ ]! \# b) I
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");" J0 {& }- ]$ O* R
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / X7 P2 n! l9 M( ]& [' |
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    , `5 B% }5 h9 {4 t# r; K

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

評分

參與人數 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-25 17:56

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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