CSUpdate.exe源代码

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

* s9 H4 V( j* w, m
  1. / RevApp.cpp : Defines the class behaviors for the application.! h1 w! u( d  ~; R+ Y. Q# S) {0 M; z# e
  2. //
    1 A, W3 n3 B6 F5 y5 u0 \
  3. * {" D0 R3 u/ h& x/ u* ?5 X
  4. #include "stdafx.h"* g, B6 X: V7 z5 ^

  5. + G. r* N# X6 o1 ^
  6. //#define UNICODE
    0 p% B3 ]0 p$ @- m, i+ s; z
  7. //#include <gdiplus.h>
    . B+ O: U$ U7 S7 D( \
  8. //using namespace Gdiplus;! e! U5 x" c& I3 ~
  9.   y  i0 n5 J- v4 N% Q+ w8 Q
  10. #include "RevApp.h"
    - h0 H8 q/ c* W! G% k
  11. #include "RevAppDlg.h"
    ' `; ^% {' U* a; O$ v7 k

  12. ! H( F- D$ Y' L: Y. j
  13. #pragma warning(disable:4786)
    - `% \: @4 c# G- f3 W4 r
  14. #include <map>
    $ Z5 B# T, w! u% P5 u6 `  \
  15. #include <list>; E2 b% R$ |) S# K
  16. #include <direct.h>) L4 u/ R! c7 a- {% g" D

  17. , T4 N1 b' U/ p
  18. #ifdef _DEBUG+ h# W: O" w$ _( y9 e+ [
  19. #define new DEBUG_NEW# l, X1 g5 U  A( l
  20. #undef THIS_FILE
    . `8 B2 }; \' y" g! w
  21. static char THIS_FILE[] = __FILE__;8 Y1 ~3 J! g& c' K7 V4 g9 t# a
  22. #endif
    7 b9 H5 C7 ^  W5 B
  23. #include "SkinResDef.h"
    , ]9 z2 D( l1 O4 D$ V; V
  24. #include "ChangeBG.h"
    % }: ]" ]# M3 I2 a# K. r8 p
  25. #include "AFXINET.H"% ^3 t  u% q2 n3 c, r

  26. - \( W% V9 C8 t( N" z5 B  h1 J2 Q$ Y
  27. #define TRADITIONAL_CHINESE 0
    % v5 A' A7 {! T5 a3 Z! q
  28. #define SIMPLIFY_CHINESE 1
    # @2 ~7 W; @3 ^/ U5 j
  29. #define ENGLISH 2' i- J) Q  b2 `( A% G+ P3 j
  30. int m_iLanguage = ENGLISH;1 f, k% Q2 x$ \$ K" Z3 ]2 d
  31. /////////////////////////////////////////////////////////////////////////////
    ! O# N% f# l+ B* F
  32. // CRevAppApp- E/ H# @( x* \- D, Q* @

  33. # k) y: H9 @. u0 O. D
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)4 Q% W2 t4 L1 \6 ?
  35.         //{{AFX_MSG_MAP(CRevAppApp)6 [2 ^3 X' [; R/ n: T
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.5 R: A! Q6 w/ ^1 O! k2 l
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    9 R9 ~5 D" }) ^
  38.         //}}AFX_MSG. J$ ]  M0 Z) D* b/ a+ a
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    * x; k2 T% h& w& d+ F9 V" h
  40. END_MESSAGE_MAP()8 k* V/ }6 ~* y8 b8 P: |

  41. ( N) s+ \2 q' _9 g0 x7 V
  42. /////////////////////////////////////////////////////////////////////////////2 A2 a" M3 D3 G7 z8 ?2 _
  43. // CRevAppApp construction5 w( V% J- ~9 s8 U* G3 H
  44. / G' s* Y2 U! A" Q% c
  45. CRevAppApp::CRevAppApp()1 M) D& V8 ]0 Y4 g/ `
  46. {
    , f" @* O1 B  o
  47.         // TODO: add construction code here,
    7 L( _1 |2 p, N" m3 U, a: _1 @% t
  48.         // Place all significant initialization in InitInstance( O  M7 T/ E+ s4 ~
  49.   bDisplayIsBig5=FALSE;
    9 D2 l4 a& a$ M' P3 h
  50.   bRestartUpdater=FALSE;$ {" s6 d" k+ Z, U
  51.   bFinishUpdated=FALSE;! v! \& S, G% _6 ]8 M
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;" P" W' h2 ?- }/ t: S
  53.   InitChangeDataBig52GBKS();9 z  ~7 b3 }. I. E# F+ T7 _3 ^
  54.   InitChangeDataGBKS2Big5();
    6 g7 O+ o- y, b4 B4 C% V2 Q
  55.         //
    ) |5 n1 Z9 o$ T" x( E
  56.         bClickRunExe = FALSE;6 U4 ?0 {; c6 C- `4 `' e
  57.         //
    ! q" v4 S, x7 A- |; U
  58. }
    " e. l: E, @" s& }) U. y

  59. 4 N" j* \; d/ n% i
  60. CRevAppApp::~CRevAppApp()
    3 ]0 r' H& p# _. K# n1 N. C
  61. {& i* ]! n* X0 V1 g, Z
  62.         // TODO: add construction code here,
    1 g# c  N4 e, P. d* C$ w4 K
  63.         // Place all significant initialization in InitInstance8 W% @0 M/ k" k/ ^" A" b1 O
  64.   EndChangeData();
    # w; Z/ z0 v( F2 f2 {
  65. }5 ?* h, d0 s, i: k0 q+ x

  66. ) W7 l4 y3 S% h2 Q
  67. /////////////////////////////////////////////////////////////////////////////, v) m$ U* E! s- d3 K' s' I
  68. // The one and only CRevAppApp object7 h5 I# Y0 R5 V4 ?% ?! E
  69. 7 I) ]+ \& H' c1 H" k6 t3 ^% @( v
  70. CRevAppApp theApp;6 W# f: H7 U/ M; Y2 \( m4 F

  71. $ c, Z: |$ S$ A) b; `$ `" l3 p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)8 j1 h0 O% Y, f0 n9 ~. z7 u: A
  73. {1 v+ y# x+ N; M! N! F
  74.   int iEOF=0;6 `" [4 |0 h; [5 f; S
  75.   char szTempName[MAX_PATH];1 N& T& M0 `9 _5 C7 p9 H
  76.   *szFileName=0;2 v, [  ?2 H, ~4 @' o: z4 ?
  77.   iEOF=fscanf(fp,"%s",szTempName);3 f: B' E/ ]9 y0 B, z' |  N
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ( Y6 s/ _/ T+ n9 G1 C8 E
  79.   {# \: a' c# \* K) ]% [! k* B+ m
  80.     strcpy(szFileName,&szTempName[1]);
    ' J  x/ G" l( R
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF); O5 }4 E% C/ G, L" _, }
  82.     {
    ) d  x/ d* r) s. _( M, b
  83.       iEOF=fscanf(fp,"%s",szTempName);  o! s7 j& c) T0 }: }9 P" r* Q
  84.       strcat(szFileName," ");) H0 J4 `( O6 M! t; G) L$ M5 f7 l
  85.       strcat(szFileName,szTempName);
    % n2 ^& w3 s3 f
  86.     }
    6 Z+ R6 ^! S% p7 g7 G
  87.     if(strlen(szFileName)>=1)
    7 X( ?( O; v0 _2 b8 R: p
  88.     {& J# d2 V' l: t8 a0 ~
  89.       szFileName[strlen(szFileName)-1]=0;
    1 F* P3 C+ f3 f% A' W- t1 ^4 f
  90.     }
    - }7 K* Z/ k  M3 O* R$ W
  91.   }" Z! q( X) r. w% O
  92.   return szFileName;
    ' S0 s/ Z1 n* F3 B5 Q- s3 K8 e
  93. }
    : j. e9 N! o" ^5 `  H

  94. $ R6 [( z: O" P2 \, N( y# M: }" ~
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)8 Q+ y5 ~. ~5 f" c* [5 H. L; b
  96. {
    % \+ ~# ~: T( A; r. ]
  97.   FILE *fp;. L, M8 Y( |* ?
  98.   char *key=NULL;
    7 ~- v9 i4 [2 q' ^' [; @8 x: w
  99.   char version[MAX_PATH];
    # u1 \" a, a% Q' G! V7 c, f3 \; z2 _+ `
  100.   LPUPDATEFILE file,olds;* |: w: c) u/ C/ `2 c/ m
  101.   std::map<CString,LPUPDATEFILE>::iterator p;5 ?# @: H. g' G/ G' G
  102. 0 n8 ?& y9 c: e0 ~2 U0 b
  103.   UpdateList.clear();
    ) z) I5 i% O1 [4 c8 Z
  104.   UpdateFile.clear();
    2 Q: W% q/ n: t/ \3 \$ W! |
  105.   if(GetFileAttributes(filename)==-1) return false;
    ' N$ ]- Q" S& i; v7 o
  106.   if(!(fp=fopen(filename,"r"))) return false;2 V9 L$ X/ p/ S' I) Z" H$ n
  107.   fscanf(fp,"%s",version);$ q0 _7 l& m$ q3 K- V
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    $ f' R2 q- t% e' J; \
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ( }( }+ Y" _& }2 x! f$ |7 |
  110.   {
    5 {9 U/ O$ A; Z8 C( A7 P7 d& \1 C% C9 O
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / u, t# Y/ Q9 |  O: _4 _, z' ?, u
  112.     fscanf(fp,"%s",file->path);
    ; _+ L7 F2 x- M; ?! s7 q
  113.     ReadFileNames(fp,file->file);5 [8 Y  T" j7 E7 `6 K: g
  114.     strcpy(file->full,".");
    , M. O, e9 a- h  K+ I; G% n5 {2 n
  115.     strcat(file->full,file->path);4 ^5 D" W+ v6 Z9 H3 k( g
  116.     strcat(file->full,file->file);
    5 j4 }5 f6 r! y/ g1 F1 p
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& {6 h; C; L& U' G; K
  118.     {
    ! W# U4 v1 D6 d0 p2 @
  119.       file->vers=(float)atof(version);5 I2 a/ K) v6 G: ]
  120.       UpdateList.push_back(file->full);
    , a" k/ \4 I) |( _9 c9 b6 w7 |
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ! D& v& Y& f. d5 q3 L( S
  122.     }+ |0 n- z& v+ s6 [+ R
  123.     else
    " u; t+ J  [9 j
  124.     {
    ! Y4 l1 x* P# }$ B0 x
  125.       olds=(*p).second;
    / ?& |/ w' w+ p0 s1 {
  126.       if(olds->vers<(float)atof(version))6 G3 c0 ^# e8 L' \) T* i: |$ w
  127.       {# q2 @% J' }" }  t
  128.         olds->vers=(float)atof(version);
    9 M2 n7 a! b1 I! H; [- L
  129.       }1 l, f+ M4 W; {5 M
  130.       free(file);
    0 O$ ]0 ?# E+ I  z- N
  131.     }
    * @9 X# H- Y; X1 ^* T. A$ l
  132.   }
    & N" n  W1 D+ }2 `& k) k
  133.   fclose(fp);
    1 G0 |+ Y! S! I1 V
  134.   return true;
    ; V/ b+ b* G! d1 I* U6 Y; Y" p
  135. }
    / n  R) J3 \0 I  y- F. G; c5 L

  136. 1 M! P$ \" _* d
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)8 H( o- }6 H' N  }
  138. {" C6 A$ x, |  j1 f, |( e$ @
  139.   TCHAR  szFull[MAX_PATH];7 Y# b" a( u3 }5 c* d4 g( I
  140.   TCHAR *token,*inter;
    # j, X% g6 B0 ]: f8 i/ {) |
  141.   *szPath=0;
    8 P3 L) \) o$ e3 v
  142.   strcpy(szFull,szFullPath);+ i, z& r  @: V& g3 d/ A
  143.   token=strtok(szFull,"\\/");
    / b8 A4 J8 R* C$ ^# [, O3 B
  144.   inter=token;" Y2 P; t% E% e3 O
  145.   while(token=strtok(NULL,"\\/"))* z0 g0 V0 Z- c" |# j
  146.   {$ X, p; @8 R# \$ Q( D
  147.     strcat(szPath,inter);
    + _( l& h2 m% X- r) O
  148.     strcat(szPath,"\");
    7 g# R1 {* f3 y: V: q3 D
  149.     inter=token;) k& x; b0 L; O( J7 Q1 z( C
  150.   }
    5 `' \4 O/ O4 [/ p% i7 M; G
  151.   return strlen(szPath);
    . @, p! x5 z0 i; s& V
  152. }
    $ ?3 p) ^% k0 w  @3 }; r5 x# B
  153. - t  j8 u3 j1 _/ G& l4 o
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ( R1 ]) r' q2 Q- O
  155. {0 v6 t0 @5 M' p4 z
  156.   DWORD attrib=GetFileAttributes(Target);2 y- q, l1 V, y" {
  157.   if(attrib!=-1)
    / Q: h$ f$ w5 J% [
  158.   {) ?2 c1 n6 T& p5 i& Q2 y# n2 H
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    - l# M, X4 p9 S$ {
  160.     {
    6 F1 D& j2 J3 }: n4 [1 ^5 j) H
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    4 C5 y5 i. e" k8 y: y0 i$ f
  162.       SetFileAttributes(Target,attrib);
    * Y  e9 b( W* \
  163.     }- L2 D. l# m4 D+ ~( m. ]( w3 C
  164.   }
    # K% e5 s% r; R) Q9 d2 @8 _
  165.   CopyFile(Source,Target,Erase);
    5 G4 ~/ A# x6 E4 |- K
  166. }
    9 ~) M% y: w2 i' }5 ?# Z
  167. " f& A3 T1 B4 N, N' H( x6 C
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & Y9 ?4 w" S6 I/ Z
  169. {
    & Z- U5 @- n0 \& n# [7 r# I# V) a; f1 T
  170.      FILE *fp;( G3 G: T; T+ u1 `* F  n8 w* h7 ~
  171.      char  szBuffer[8192];9 G* m; h: d% j4 R9 ^* Z' [" b& a
  172.   va_list  argptr;
    # ~5 _+ F, ~- P( s4 r, O4 d% d7 e
  173. ( a: h$ `# o6 E: u  h7 T& [
  174.         va_start(argptr,message);
    # }2 c8 v1 ?/ ], Y: Q' T: Y
  175.         vsprintf(szBuffer,message,argptr);3 b) S6 R' ^. g& f  G3 R4 }
  176.         va_end(argptr);
    , C  b, X$ b0 Q# D* V% h4 W2 G
  177.   fp=fopen(FileName,"a");0 `+ r0 V$ I: q! X* O
  178.   if(fp)3 ?0 K6 u* \' E8 Q
  179.   {, @  N& |' x2 k% p* ~8 V1 S9 U; R4 z
  180.     fprintf(fp,szBuffer);
    . D  m& l6 Q! p5 v
  181.     fclose(fp);
    # j# t  d/ g. L$ |& Y
  182.           _flushall();
    + D* `6 @" M7 Q: X
  183.   }
    . S+ z5 y, x6 A! w; ^0 T
  184. }
    ) @) w: k- d+ J! n9 t' n! A5 n

  185. - d$ i  X3 i. j& Z) W
  186. BOOL CRevAppApp::Fclearf(char *FileName)( c& t! m5 a, S- ^5 r7 ~. a, \
  187. {3 B8 _1 u' Y: \+ Q' r
  188.      FILE *fp;
    $ `0 p0 y, u) z4 Y& L  ~+ S* _
  189.     DWORD  attrib;
    ) \! y; r& G9 @2 C, P3 O# Q
  190.   attrib=GetFileAttributes(FileName);3 U. v$ o' k& ^) |
  191.   if(attrib!=-1)
    7 P2 u- C: W1 d* R& S& C9 M' ~
  192.   {
    # I' t3 [" t2 |: `
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);& f& y$ C$ J( h8 o+ Q
  194.     if(!SetFileAttributes(FileName,attrib))$ _$ d9 h8 G. z0 A2 s
  195.     {
    $ C, H* A7 m( B0 u
  196.       return FALSE;
    0 {" g1 `' ]& |) A) i
  197.     }" }4 F% I( _+ o8 J3 w$ A0 J5 [
  198.   }
    ; Z2 d5 f* T9 K$ Y6 c% y! p- }% v) o1 o
  199.   fp=fopen(FileName,"wb");
    $ d: N( _! B) A: t# |- ~
  200.   if(fp)
    ' O! J2 W) y4 N- |3 J$ S1 v% J
  201.   {
    - J- X  L& E9 @) B7 A8 ^# m" J
  202.     fclose(fp);
    9 ?  T' l- k& u$ W; v
  203.   }( x- x9 ^- C6 H0 r0 k0 z! @) R& y7 Y5 t
  204.   return TRUE;& u8 u7 W, F3 s7 Q; p4 o* G
  205. }
    * X. y6 x+ k" D5 i. N* Y  I
  206. " k& {1 v2 T7 ^' m4 i" e
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    * ~7 {& d) B6 z. ^( k2 R/ E
  208. {/ Y5 ~7 m& }, F. w6 L0 Y' X
  209.   char filename[MAX_PATH];
    - @5 M( H+ N" @4 ?5 ^
  210.   LPUPDATEFILE file,olds;
    : F/ l2 [/ g/ w7 x5 y
  211.   std::map<int,CString>::iterator i;1 X# l9 x  L$ s, }$ q/ t$ w
  212.   std::map<CString,LPUPDATEFILE>::iterator p;1 A! ~2 a6 W( n0 S' l0 ~3 `1 e
  213.   std::list<CString>::iterator l;
    & q& d1 M  f1 m& \  Q) M
  214. 7 [, P2 [% F8 Y  f
  215.   if(bFirstUpdate)! A7 ?# z$ @9 n4 t& S! u$ W7 p
  216.   {% a8 }5 T0 ~- J& E! o9 D
  217.     dwCurrFile=0;
    ; X- u  R5 [7 ^& \) |
  218.     bFirstUpdate=FALSE;  l4 P7 R5 ^$ R9 W. U$ U7 J# b' d
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 E. h8 g. E& |( D* H/ O
  220.     {# s" C, }: A! `- ?, D) _
  221.       dwTotalFiles=UpdateLocal.size();
    # ]( |7 k( ~3 k# N* J! ]: e. T
  222.       dwDownLoaded=0;3 r) o3 b* ]. R. J& }+ A: S5 Y
  223.       bSilentStep=FALSE;
    - O- Z/ w9 T0 J- y4 I/ s2 n
  224.       bCompressed=TRUE;
    + H1 [3 U6 p) a+ r( d
  225.       strExtLocal.Empty();$ B' R1 _( z; l7 ]- F) b' O9 [/ v
  226.       strFullName=(*i).second;( Z9 f8 l* {1 u. @9 X( ]/ d
  227.       dwProgramState=AP_CONNECT;
    * t3 [5 o5 E  [- r0 O2 y$ z% }
  228.       return TRUE;
    5 D6 T/ W% ], K8 W
  229.     }
    / H7 a* w- S) @% l
  230.   }* }0 _2 C+ B2 \6 @
  231.   else if(bRestartUpdater==FALSE)
    % R9 Z; s4 m2 a. r
  232.   {/ U4 h/ B4 {) {/ ?
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    6 @7 J" i0 v3 D8 J! h
  234.     {
    7 c5 i9 l8 D% T$ x! J
  235.       file=(*p).second;# F3 P4 m8 q1 @  ]
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' W, r1 |/ \1 _/ B; W: q  a
  237.       {+ _: ^7 J  @7 Q2 }8 O' i& g# A, y
  238.         olds=(*p).second;. W8 Y) C6 i3 M4 n" J2 a
  239.         olds->vers=file->vers;
    $ [. h) E- ~  }* Q: b" u
  240.       }
    ! Z8 ?* _- Q+ E  }- U. x
  241.       else- Q( j$ e% K: h" `3 E. |  w8 Z
  242.       {
    3 Y0 H; J2 T$ k2 x2 k" P" p
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 Q, _# p/ |( i- f
  244.         memcpy(olds,file,sizeof(UPDATEFILE));$ k  T" j6 N: h# o* t6 O' G
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));$ U8 B6 u9 X6 q
  246.       }
    / H0 u0 p) v  J# w! u/ Z; {% |+ `8 r
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    $ m$ [0 V$ a, j( D
  248.       sprintf(filename,"(%s)",file->file);
    , q$ y/ W: g! U5 j, Y7 \
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & F( b& u1 N5 t0 r, j1 c( |
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }0 K+ e; K1 n. H) S7 |3 \
  251.     }' D4 L4 r" Z9 i9 w! z/ Y
  252.     dwCurrFile++;) Z1 K% }& P( `- s
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / u4 E1 C8 S$ z- ?' A' |/ s' r3 U
  254.     {0 t+ m8 P  c% l6 J" B- @# U6 m
  255.       bSilentStep=FALSE;0 L. ?4 c2 x1 Z3 E' g( H! L7 U
  256.       bCompressed=TRUE;$ y+ C* p: Q, k$ k# M
  257.       strExtLocal.Empty();  k5 o5 g$ U; k3 |5 h  s9 O
  258.       strFullName=(*i).second;" v) x9 X4 ?  v/ e/ X
  259.       dwProgramState=AP_CONNECT;8 w/ Q; T$ Q) N* j6 x
  260.       return TRUE;
    4 h: d4 A* W7 M1 a% x( j
  261.     }. z3 u9 h0 e% j5 w
  262.     if(!bRestartUpdater)
    ' H+ R# L: s2 m* A/ M
  263.     {
    ) \* Z6 e" |1 M/ P4 l1 E
  264.       int iCurrSize,iFileSize;
    ! b$ v& \+ u# Z4 i) j; M. t8 N
  265.       iCurrSize=0;7 D& y) U. R/ L7 @. l' J# Q& a
  266.       iFileSize=UpdateList2.size();
    4 Q/ U, y( P5 n: I/ m4 P
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");% M& V1 B3 M3 U( E
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");3 J" f* [* g0 \& U5 M: w1 k
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");, j* Y% T" }; E: h8 R
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % c+ g" E$ Z$ I# e. o( H; I' N7 ~
  271.       Fclearf(".\\update.dat");: L$ L& ?. G# W: ~! m5 I
  272.       Fprintf(".\\update.dat","Bloodyf\n");( J5 W- X. W  S+ L% A8 m
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)* f& j6 k$ t% I  j7 C5 v
  274.       {
    8 a0 A7 u5 r! |% R+ a$ E
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())6 W0 j" @: G, D- A" k6 t3 n
  276.         {
    1 y2 S* V( n7 z. B, e8 f
  277.           file=(*p).second;* Q) `* {1 J5 i, ?* o9 `
  278.           sprintf(filename,"(%s)",file->file);4 y7 a' i, M2 u, W. L2 _  @+ T
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & ~2 ?# T+ n) T. ?3 ~
  280.           iCurrSize++;3 H$ v5 E  j) X- E# d* F
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));$ c9 ~+ D& R- m6 T9 d
  282.         }
    0 Y. k# _4 Q3 Y. J* {
  283.       }( k( b  y; K) b3 B$ ?0 B  S
  284.       unlink(".\\update.txt");9 h' L* u+ H5 Y
  285.       unlink(".\\update.tmp");6 r8 A+ X  e* g9 g2 @; {7 W7 A5 L
  286.       Fclearf(".\\checkversion.dat");
    # F$ E& z0 u( P6 Q% ^: C3 p7 |# u' S
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    . t5 S$ S. S# E; x4 ^
  288.       if(UpdateLocal.size())
    * r' T" Z8 {( S" L
  289.       {
    # M9 e6 ?+ o5 n" c
  290.         UpdateLocal.clear();
    : p3 j9 M% L* _1 f  M5 O# y# l. X; r
  291.       }
    ) Q. H7 n& N9 h8 t2 K
  292.       if(UpdateFile3.size())
    2 R; U, ?4 i7 K! B
  293.       {
    ; y% V9 x2 j" x9 O) ^% B, I7 U) L
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ e. f0 g8 Q1 C4 i  |+ h! s) A
  295.         {
    6 ]- }# \+ s3 w' ]  {( G
  296.           file=(*p).second;4 @0 D  i5 J% q' |4 n4 h
  297.           free(file);; O  x4 g; S7 F2 N' f% n( i1 U4 l7 B1 [
  298.         }
    # w% X  R; A, j& g+ b2 ^  S
  299.         UpdateFile3.clear();
    ' B7 a: U; F2 a7 \# d7 T
  300.         UpdateList3.clear();
    : E- Q4 i( Z5 i; H! P7 _
  301.       }! Z0 n* z4 ^4 ^( a
  302.       if(UpdateFile2.size())
    , c) L0 e3 v$ l# O* }9 i% b/ e1 \6 _
  303.       {. @! P$ {$ l, ^* p* D, c) P+ Z/ l
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 [! o, U% A, ^# [# W
  305.         {' @+ T9 R/ O) j. y1 ?6 |
  306.           file=(*p).second;
    - e+ @7 K' N6 p
  307.           free(file);
    6 }1 K- B# _$ A5 X! d, j
  308.         }
    ' s$ M# f5 k* I7 a: a+ ?; @7 N
  309.         UpdateFile2.clear();9 y1 u0 c4 i4 D. N# f0 ]6 o
  310.         UpdateList2.clear();0 m9 ]$ [- j  Q1 x
  311.       }+ v" b2 L7 g3 G% b. O8 w* W
  312.       if(UpdateFile1.size())
    ! V1 h* I  E3 y5 [! X' G
  313.       {0 ^3 u+ `! T7 }9 i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) r9 a. a: F- C
  315.         {- B, M7 d2 m( F, G
  316.           file=(*p).second;. n  H+ `; r* f: c4 Z9 e
  317.           free(file);
    * Q' S# U  s* S. t/ y1 f- K
  318.         }8 b: ?' W5 j2 O, Q9 J
  319.         UpdateFile1.clear();* P9 G" u' M4 l2 ~, j- f& T
  320.         UpdateList1.clear();: {( j' L" o" C- q, \
  321.       }5 C/ x# n8 {- X1 j4 E0 ?- z2 m+ _! c* l
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));* x; R- c- D. Z: }. u& d
  323.     }( k9 i3 k  ^; F3 q8 B4 ?; @4 H  z
  324.   }2 i$ X" p: U5 J6 `9 j
  325.   return FALSE;* u4 u  }5 ^, L' l
  326. }
    ) b: u% X. t2 N- v  p! F: B$ \

  327. ; y3 M; \8 h0 ]/ O' }
  328. void CRevAppApp::ClearAll(void)
    , q& e( X6 ^* L7 Z# J6 u
  329. {' T$ a1 @: x  c. c: |, g6 B
  330.   LPUPDATEFILE file;
    9 r( D% F' l1 W
  331.   std::map<CString,LPUPDATEFILE>::iterator p;6 G( a9 b) d! X, W1 C7 P* D
  332. & x4 H0 S0 ?) F- x
  333.   if(UpdateLocal.size())
    , g3 F9 ^0 F4 r
  334.   {
    + ?* ?6 K/ V/ x7 k
  335.     UpdateLocal.clear();
    2 p+ V! s) W% f
  336.   }
    $ j4 K! T; T1 y6 E
  337.   if(UpdateFile3.size())
    " ~" t: ]$ w8 N8 `4 Y
  338.   {! v$ L. x& B9 H6 c2 p/ B+ U* t
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): D; i+ q. X) Y; x! V7 [) K
  340.     {/ m3 r6 b6 K8 {" q; i; h  J
  341.       file=(*p).second;
    * N+ J. {& E9 e2 k- ^0 m5 O
  342.       free(file);
    2 h. Z& U1 }; E. T
  343.     }
    ! r: h" M* ]9 j4 [7 Z9 v
  344.     UpdateFile3.clear();6 J$ H% X0 t# b: `9 W! {, t# I
  345.     UpdateList3.clear();
    6 [; i1 O) L8 D; U, s4 Q
  346.   }
    / ~. q( G; [$ Y  ]5 r' ?4 [
  347.   if(UpdateFile2.size()). a9 h, V- I' R5 t6 r3 i
  348.   {4 d" v$ J( m0 N0 e! Z" n
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' ~3 P3 K/ {" B
  350.     {
    * q6 i% P3 e$ a
  351.       file=(*p).second;0 f- A% ~% w3 v% {) X- P
  352.       free(file);) T% M% r4 N' s2 A# m) I
  353.     }* Y* G9 B8 B" y& o0 @' W' t+ C* U$ l
  354.     UpdateFile2.clear();
    # j+ t/ r& R( }1 i( M
  355.     UpdateList2.clear();7 [; _2 h) w' k/ v
  356.   }$ [& ^2 a9 Z8 S* F1 x, o& V
  357.   if(UpdateFile1.size())" g/ a" X: `) P" |" C3 X$ S' H# X
  358.   {5 |. X& ]4 S1 Z3 d0 w
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- o- S8 q/ O9 w# w7 j* ?
  360.     {
    ' {1 v3 z6 R* j! m
  361.       file=(*p).second;; D: \, C4 o# V/ ~# s9 w
  362.       free(file);
    : I1 q$ h8 U/ Z$ S8 J5 n5 g
  363.     }
    + e. \7 C/ L8 j' I7 Z6 F' ~, r
  364.     UpdateFile1.clear();
    + d8 B/ r4 V( `  u0 Q& J- g
  365.     UpdateList1.clear();
    & O+ i7 Q: N: y
  366.   }7 p& P% e! l$ Z3 \7 u8 {
  367. }  6 t$ X$ ~' \8 Q! p& R1 D6 B9 D
  368.   
      ?9 _% d- }4 j( \3 O9 v
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ) T4 Q1 R( V# X# Q# a, |" i' Z7 ^
  370. {
    $ Q0 `& L  |9 s! m) [+ `
  371.   int c;6 ^6 D9 V/ E' `" S; U
  372.   LPUPDATEFILE file1,file2;. a/ x2 j% f! [0 ^
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    0 }8 A( I, ]5 ?9 M' c
  374.   std::list<CString>::iterator l;) ?8 N) g+ g) ]) X
  375. . q% ]3 r9 }; j5 O, u/ [" S
  376.   UpdateLocal.clear();
    8 W9 Z4 c1 @4 p( G3 t$ B# T) C" m
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( i" E$ ~  Z% J: p4 R* \3 k
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    / ?2 _/ F# H" i+ X- P9 q. |6 i
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);0 p, L4 Z2 @1 m7 n0 z2 b+ o
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ) I/ {3 b$ [! v# P8 G1 X; Z% r4 {
  381.   if(UpdateFile3.size())
      c+ F9 _% q* H3 S6 Z: b. O3 B6 R0 Z
  382.   {
    1 n1 P2 G# \% T  J9 H2 o
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)# U* s4 V9 p: K5 s6 W
  384.     {1 M3 Z- D. F  ~  ~; e. }$ o% ]5 u
  385.       file2=(LPUPDATEFILE)(*i).second;
    ! j8 n" c( f2 V* l! d" i
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! S4 w4 k% r  @, u( a0 u8 N% L8 [, c- K
  387.       {
    # F4 Z: _# F* J) R
  388.         file1=(LPUPDATEFILE)(*p).second;
    ( N9 I( i, Q: g8 k
  389.         file1->vers=file2->vers;  c/ N/ x& ]' @5 L5 \/ G% g4 y
  390.       }7 z, w9 h7 M5 L" y$ j
  391.       else2 Z0 S( _+ |. e, k
  392.       {2 M7 a4 t+ Q* m% X: Z! }
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) y% n) Y, ]; i6 }9 `
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    . t2 f8 d0 U+ ~4 B9 [5 y
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));9 Z6 x8 t/ c5 O( v5 a" z$ @7 R" e
  396.       }
    : ~: ]# Z5 o) k3 Y+ W# M1 ~
  397.     }
    $ _& v0 u; B* \( B
  398.   }5 y" U: t- h" E1 u/ t" k/ E+ a
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)& \' M7 a/ s7 N+ e) `
  400.   {
    0 G, j$ c$ ?/ k1 [3 e
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 a* G: I' \+ i
  402.     {  a8 H5 i, C" ^" T- f- l
  403.       file2=(LPUPDATEFILE)(*i).second;4 Y, v' I2 T; M) U( i& c2 g) d
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; U9 Z3 z, j' G: l+ d8 o' L1 _
  405.       {
    . r- {+ J6 K& p4 `6 X
  406.         file1=(LPUPDATEFILE)(*p).second;& h* a9 ^3 D6 T  N2 W8 ?
  407.         if(file1->vers!=file2->vers)# }0 a& m' B) ~! ?
  408.         {' m1 Q- N' N: l. t: p7 g
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + P6 e5 r8 [/ l# _0 B& ?2 s! B
  410.           c++;' v7 F2 i* q0 G4 Z
  411.         }
    + E7 ~% V3 k) g( V- G3 C% K
  412.       }" n$ |! g8 U8 [9 U0 d5 d
  413.       else/ C9 P: Q+ H: W- R
  414.       {* _+ o9 U; |- p! {
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 U& B% s* q+ z  ~5 z
  416.         c++;5 q. \+ J3 F7 {5 ~
  417.       }. |/ f6 C, n" P3 M: u; _
  418.     }. ~' z8 F% ^/ |- I! ?
  419.   }" E* l+ ]3 C" S/ Q! b7 G
  420.   unlink(".\\DownLoad\\update.txt");
    * w2 ]4 @3 a. Z. Y9 {
  421.   if(UpdateLocal.size()) return TRUE;
    4 m; k& K) A6 o1 A
  422.   else                   return FALSE;
    # j% V0 z6 L/ T2 _; P3 C$ B* k
  423. }$ F/ r( \8 H# h: @% C3 B1 n6 C
  424. . Z: K1 Z, k; v4 B$ G7 ?0 d
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    / r* R# ?0 S) w" Z- o7 s2 n+ b
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    8 Z( Y. l- G" g! f# G
  427. 4 G" t; R7 i+ `, K1 m' f

  428. , ~; W2 c/ b9 O
  429. $ i1 y% h; O& A) ]" u* i
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ y9 m, F% {; u
  431. {
    : Y: ]# {) K4 H6 U* q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ! h& [4 ?% ^% _7 @1 t2 j
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # H7 N: I7 D9 R
  434.   {
    0 N; N9 a% J) g/ v
  435.     char szLanguage[50];
    & l, _5 B8 }) P# \8 N
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : L3 F& f2 U8 n% [
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" W2 ?1 v0 s& x8 ^. U
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    9 r7 \, e, g5 Q  K5 w6 J; J5 Q5 B6 b
  439.     else                                   m_iLanguage=ENGLISH;
    + ^8 I! R$ `. D: W% \- T! a- w: k
  440.     char szRegister[100];8 ~# l2 k  i9 a/ c1 \3 P4 S
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      j! s# Y6 L9 W" z
  442.     strRegsName=szRegister;2 K# F/ O. q" G8 ~- @9 I
  443.     char szPatchURL[100];1 U% r2 a% F& S, O
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: G% v+ ?& r7 i; q# G9 n1 }9 w
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' b8 O) ~. c/ Q
  446.   }
    6 K; [8 p; ]5 b$ S3 Q
  447.   else
    1 n8 O# a+ [8 c2 J% ]  M4 ~3 @8 Q5 }
  448.   {
    # w" }1 e: t' Y7 S' ]! v% [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - a, Q$ C* Q! s) P
  450.     strRegsName=DEFAULT_REG_URL;& Q: H7 c2 ]% q+ o
  451.   }- n' u7 \+ r, m- u$ K0 n
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    4 D4 m! G$ s9 f" m: v1 v
  453.   {
    + i5 e, x5 [( v5 r
  454.     char szIP[50];* ?: a/ r$ g6 N( @+ q) I
  455.     char szDIR[300];
    3 Q  B4 d" V7 `( Z' _
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")), F1 }. ]% B: @- C  ^6 s, b
  457.     {. a4 |1 D$ Y$ O4 `# h% _3 b
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");: g0 u# B7 B. \6 q7 R
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    - p+ A$ }$ K$ t& O& K9 }# V
  460.       strHostName=szIP;& ~* x& w& J7 \  R
  461.       strHostPath.Format("/%s",szDIR);
    9 D- K. L6 A" K% j$ t, o1 r
  462.     }9 F; n, \4 A$ ^1 N8 u  B6 E
  463.     else+ y( o# s( e" H$ r) F" P7 t
  464.     {
    0 E; x/ q# h) q9 M7 A
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) @5 r" z0 r! v4 @! Y3 b0 r! k
  466.       {
    1 g- @4 v7 E2 ~4 a) L$ G9 D6 S
  467.         char szLanguage[50];
    % H9 T, o$ @$ }& `0 o3 |, b4 k
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' I! I' l. C2 \1 B/ A2 d3 x
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) N/ c5 P% ]; ?( @( X
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + O" w8 P2 R, b1 C& M6 `
  471.         else                                   m_iLanguage=ENGLISH;" B; i9 c6 k5 v; d5 O! o8 m& u, y: c
  472.         char szRegister[100];
    : s% V6 [- ^: F+ [1 l
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");$ [' _& d8 [+ c
  474.         strRegsName=szRegister;
    8 Q6 ?" {7 |( ]4 N% }
  475.         char szPatchURL[100];
    , m3 f' O; Y/ ~
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 p& @) u9 n7 k
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    * W& Y' L, S6 I' C
  478.       }1 ^" L+ U& N7 Y0 l# Y# }) m
  479.       else. k' ^# b& v; P+ G
  480.       {9 P5 \% d; @0 E0 A. o; t3 G
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# I( Y$ g2 o% t9 R/ P, E
  482.         strRegsName=DEFAULT_REG_URL;
    / U5 R1 U- A; n& K& J! x& E+ l
  483.       }
    % A% W8 e" ]% t& B
  484.     }
    % I4 d/ _+ g3 Y
  485.   }- f2 M+ ~7 e% X6 R& H) z& |
  486.   return true;
    ! J  a. T$ J2 V% p5 ^  F
  487. }
    % l4 C! @  ~" o+ }: a3 Q
  488. # `( a- F2 g4 `7 s  F
  489. #include ".\ZLib\unzip.h"* ?+ ^- ^* q' C1 R% A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);& K& U- w2 ?0 d- F. B! |6 b9 `
  491. /////////////////////////////////////////////////////////////////////////////! _* E4 \3 U) E5 x& X7 J
  492. // CRevAppApp initialization0 O, p9 r4 r& K2 o3 }  F6 y+ m
  493. - P& }% |. A6 H: r( _. n! h9 x
  494. BOOL CRevAppApp::InitInstance(). g  `1 L0 W  y3 t. s' F
  495. {
    : ~" _. l& Y1 B
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    : W+ c2 s; i, L: M6 b

  497. : M) t% i) |( b. I6 Y5 I/ R) A
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    3 @% F: J! m9 y$ F4 ]
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))# V3 B* y+ x- r' K4 ^9 ~0 W! {
  500.   {
    * a( j; w% V, b' f3 _
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");+ ~) f0 y6 ^  s7 c, b+ C* r
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ! S0 {# k& ]; a) A  X5 d- T
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))% }* x% N3 t# y. t9 r4 G! k* S0 }
  504.     {
    ' @; r8 r3 \6 N
  505.       strcpy(szPath,szPathTarget);
    ' B! k4 J1 \4 s. y! J
  506.       SetCurrentDirectory(szPath);
    , z7 v- [6 x0 b# P# h- Z% ?( v
  507.     }
    : u* |3 P' t4 T6 Y( f' |
  508.   }
    & T2 w) a" X. h
  509. #ifdef _DEBUG
    * C5 ]0 I1 q: @
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% N" Q8 p6 l: n1 W
  511. #else1 d: q. g- F8 C& n
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 t; k2 |8 ^& J8 t% Z0 h& \- b/ _
  513. #endif+ h; |, p# c. X6 T8 i7 E* X
  514.   {
    * @( u1 O# g* a& s
  515.     char tempFileName[MAX_PATH];
    , l- H( e, C  q/ r9 _: J
  516.     strcpy(tempFileName,szPathSource);
    : M" h% \! a5 J' f0 v- ]! M. v
  517.     tempFileName[strlen(szPathSource)-12]=0;
    " C- z2 m) ?0 C0 V$ T* S4 w
  518.     strcat(tempFileName,"\\$CSUpdate.exe");" u. F7 i& D. I6 R. q
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    $ C& n8 y$ A' B
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);4 b; V5 l! L5 Q  S! E5 j
  521.     return TRUE;
    7 W7 S; Y) z& |( z" ]2 B
  522.   }9 D1 n, e& `; |8 o
  523.   // Nuke 0118: Delete run.exe& o4 Q" ?! N" k+ q
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    0 a  y+ x& B8 t
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");$ t' N% x2 ^( Z7 W0 R
  526.   if(!ReadCfgFile("Config.ini"))
    0 N; G7 m1 L, b+ L" `& ~
  527.   {( q3 }2 v( w4 r9 \; T" j5 e- }
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    7 t8 m/ E. `9 c& d2 f+ g
  529.     return TRUE;% K1 ~: ]4 Z$ z$ t' H* M+ I7 ^! O2 n
  530.   }
    " J, q3 O: ^& q
  531.   HANDLE mutex;
    " u. J0 {9 q1 _$ v
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ ?6 g# }! ]" F
  533.   {
    " `/ j& G# V/ p, l9 G
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    1 j+ T- h' O9 p$ L) o2 W
  535.     {
    9 u+ w$ w' A4 B, B9 \& t
  536.       CloseHandle(mutex);
    * |& F( F4 V$ n3 U; i
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);6 F0 |0 E" _$ b9 d/ u
  538.       return TRUE;% F: H8 q& Z/ p$ {
  539.     }: h( l2 K/ p& M- M
  540.   }  ' Y3 C0 q) H0 @9 R$ @
  541.   CloseHandle(mutex);
    * D+ Q/ V) A& P: Q

  542. 0 w$ A& ?4 E+ l: g/ d
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);/ D' z  w. N: x: \0 x; c5 m

  544. ' G4 p9 x5 S% C8 }* k* ]9 s
  545.         AfxEnableControlContainer();
    % G% v* Y1 O- [0 u; E: @+ e8 T
  546. ' _/ K/ I! m' j9 h6 E' Y
  547.   bCanUpdate=FALSE;* U  e) S. w2 B5 G5 @% e+ K
  548.   dwStartUpSteps=1;2 O+ M3 p8 b  i  O* T( q3 ~
  549.   dwProgramState=AP_NOTHING;
    $ W) C* o- @/ k* o  f. E

  550. " @  s  q# [6 b7 x8 I1 I2 S
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);3 \' e$ ^4 x/ k6 W
  552. % i! V" m+ _6 x6 |+ ]/ _5 }: `
  553.         // Standard initialization
    ! x" a+ a! K* s
  554.         // If you are not using these features and wish to reduce the size
    5 s" |# K* J- G
  555.         //  of your final executable, you should remove from the following  p- p  D0 f; T% }
  556.         //  the specific initialization routines you do not need.
    ! t% H' r1 h) S: Q: `
  557. 1 y  [0 x! r* N! t' m9 W
  558. #ifdef _AFXDLL
    3 Z2 q- \2 U& c4 T
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL" n7 [* R$ R! p( t7 S" ?
  560. #else
    2 L* G/ R1 t6 |7 G
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically6 m4 t/ ]1 z+ I! L& u' k+ h( Q
  562. #endif& h& i- M5 J9 {  B6 m8 }* s% U

  563. 9 c& s. _, H4 J: O, U% ^
  564.   dlg=new CRevAppDlg;
    ; J$ i$ B0 ]; c$ [( T* V
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    , A  m! W  F- n$ C( y; |- P3 a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);6 d- `9 j5 t3 U, M# H9 h
  567.   m_pMainWnd=dlg;
    " z3 V0 j$ X* T7 T) j. _
  568. 5 w1 N& U0 T7 D
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    / t/ x1 {& q" Y& J2 @  B% G0 p7 c

  570. 1 k% W' M1 l" [5 m/ I
  571. //  GdiplusStartupInput gdiplusStartupInput;; `, g( q; y9 ?
  572. //  ULONG_PTR gdiplusToken;! F+ y  E1 p5 X% `
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 a2 {9 @! T/ {" z* D9 _; v

  574. 3 r  {6 f: g: f! H8 B+ \
  575. //        CRevAppDlg dlg;
    . Z2 h% d# i: }  y5 |* A+ M
  576. //        int nResponse = dlg.DoModal();8 Y4 z7 U* y4 ?1 d2 s- x
  577. //        if (nResponse == IDOK)6 `, g* j1 ]/ F3 h. Z- l* o. ?
  578. //        {( M& g2 o! f0 [1 M" v' B- Z" C& G
  579. //                // TODO: Place code here to handle when the dialog is
    / B" A) N" Z6 h' K/ M  c
  580. //                //  dismissed with OK7 s, g7 z  A" ^) f5 V4 w$ w
  581. //        }
    9 c1 E' `9 m2 v  v* k
  582. //        else if (nResponse == IDCANCEL)
    9 d. |" Q8 Z& h( P5 a3 c6 ^
  583. //        {- s9 Q) t" E" `/ R
  584. //                // TODO: Place code here to handle when the dialog is
    2 u1 Q4 P6 p% m+ y0 Y/ E
  585. //                //  dismissed with Cancel9 T5 Z/ x, C+ e5 v1 h" Y! o
  586. //        }
    % e6 g) ~# p& [# H' s& F. u

  587. ' n" Y/ q5 \* K
  588.         // Since the dialog has been closed, return FALSE so that we exit the
      P1 _  F. H" h
  589.         //  application, rather than start the application's message pump.
    2 g, \1 d2 l) M9 ^
  590.         return TRUE;
    2 }8 y1 i' Y" x! o7 F6 A9 `  J
  591. }
    : L1 w, J/ N3 q4 l
  592. 0 o' q/ L' y( K8 u
  593. char *CRevAppApp::strtok3(char *pSource,char *token): r- c. U# I% W8 G, C+ r4 J( F
  594. {- f7 I7 T  V0 l4 v$ |
  595.   int i;
    2 C( ]. I4 }3 x, y0 q+ U+ O+ W
  596.   char *szRet;* n4 h3 q7 ~5 w" E4 P# \
  597. 0 t# P- k. r- ]+ w+ }+ H5 W' f0 a
  598.   if(pSource) { itoken=0; sztoken=pSource; }( }& ]& W3 w! f' ^3 \
  599.   if(sztoken)- S0 d4 C; ~  Q% B: P
  600.   {
    ) ]7 |9 b, C$ a: q
  601.     szRet=&sztoken[itoken];
    8 b& b2 [8 w) H* Z$ s$ a0 R& J
  602.     while(sztoken[itoken])6 ^2 J3 b, B' U7 ^( {
  603.     {
    & K2 }6 d) z; k8 [( z
  604.       for(i=0;i<(int)strlen(token);i++): l* I8 Y2 N) m0 a6 U8 E1 q! F
  605.       {
    9 o/ g% `6 s" X+ P7 \
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    0 P2 R4 y  I$ i9 Z9 Q
  607.         {
    # c- |& ~5 V: ?' X4 U/ A
  608.           sztoken[itoken++]=0;3 n6 T$ n" v1 [( }9 T/ k2 ?
  609.           sztoken[itoken++]=0;# L/ e& N+ z# a2 s/ l! }
  610.           return szRet;
    0 G7 a! S9 s) |! K& b
  611.         }& V& @2 L  K4 r% `  S1 @
  612.       }, O: I. q5 L4 G$ O% {
  613.       itoken++;; h) w$ J$ [' q& Q, @, Y0 M
  614.     }" V3 T- g: }; I3 F% b
  615.   }# t+ ?& U( E9 R( O5 i! o5 N$ v
  616.   return NULL;' K- ^% L; g  w
  617. }5 E7 }% x- n" U* B5 n

  618. ! J0 ~7 f9 [8 v& z0 \" i# i
  619. void ProcessProc(long Total,long Current)  {& N% ]; F+ g
  620. {
    9 {( t$ I& l  s0 R: T$ ]
  621.         MSG msg;/ d0 l6 {8 ?, D1 v- D* n
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);& w5 X& v# U& {2 Z5 z' y+ [; z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));0 f( C6 ?) K9 B
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ) _* }  y5 @( g4 q7 P+ S
  625.         {
    4 Z: Q2 [) C  J2 x6 r( p7 `( V
  626.                 if(!GetMessage(&msg,NULL,0,0))
    / X7 v$ g4 f) F- B
  627.                 {4 ~8 \9 g* U! _/ c; b9 {
  628.                         return;
    , Z! P& |) d$ S7 f# g
  629.                 }
    . Z& s% _/ U: G/ x
  630.                 TranslateMessage(&msg);
    . Q$ C! }  v, h! [4 b$ e. X5 v9 D1 H
  631.                 DispatchMessage(&msg);! `# ?! ?; _- T* J
  632.         }       
    6 T7 N3 H7 n2 \* ]2 a8 p1 ~
  633. }* A) s/ X$ ^3 ^& Q

  634. 2 ~/ `- |, ]# n! T
  635. BOOL bFirstChar=TRUE;
    9 ]! P0 F% Y# j9 P  r$ y

  636. ( J0 k+ p) `  x6 X0 }: l
  637. BOOL CRevAppApp::OnIdle(LONG lCount)8 C# r! C# K# V
  638. {
    + l' z% P; ^- y7 D/ G- I/ l! |
  639.         // TODO: Add your specialized code here and/or call the base class
    . O# y8 \" C2 i
  640.   switch(dwProgramState)# V- f" m- v2 I
  641.   {# c1 A7 g& q; R' T
  642.   case AP_NOTHING:/ t; x3 i& @7 [9 s" c' _9 U  _: {, ^
  643.     switch(dwStartUpSteps)5 R; r0 D, I% c5 |& D$ l1 R
  644.     {! b6 o* H% Q$ m1 r# Q; d
  645.     case 1:
    ) k* I$ d/ ~2 {$ n9 k" \  B' J
  646.       {$ u) I8 G9 l9 G' m1 u
  647.         int i;
    0 N( g/ q# ^5 b, |3 o
  648.         CDC *pCDC=dlg->GetDC();
    4 C2 E0 m+ n, ~' {0 g( [; [
  649.         HDC hdcwnd=pCDC->m_hDC;
    + l; ]6 O& y! R
  650. //        Graphics graphics(hdcwnd);( Y) }) D7 e- Y! z% X# k( h) t3 a
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    1 @' Q) l$ h) Y9 a
  652. //        INT iWidth=bitmap.GetWidth();
    1 q& W/ O6 s8 W5 g+ T- N
  653. //        INT iHeight=bitmap.GetHeight();1 ~# j6 ?# G6 {+ h. h) s8 U( P
  654. //        Color color,colorTemp;, X" E- @0 u- q* N
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)  n0 o' |1 L6 ~6 j( e# ~/ {0 _! y4 S
  656. //        {( ~$ H0 @" E6 M8 e, Z" L! _
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)4 o& e! s7 b2 Z( t
  658. //          {
    0 j$ U3 c1 x+ I
  659. //            bitmap.GetPixel(iColumn,iRow,&color);# T. l- e# N) _- Q2 y+ ~# [
  660. //            colorTemp.SetValue(color.MakeARGB(: j8 t6 \- {7 K1 t% C$ ]/ ]3 \
  661. //              (BYTE)(255*iColumn/iWidth),
    ; v* `* `: p! {0 f( J
  662. //              color.GetRed(),
    # \) Q" T$ e, s# I
  663. //              color.GetGreen(),
    2 E% Y1 s1 l  M2 M
  664. //              color.GetBlue()));
    2 l# q+ A9 ^' ~+ G
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);, J; O8 u; C2 [9 u) M' A* c
  666. //          }# H4 m: u; C% j
  667. //        }
    # w! y3 |( n6 {1 p" z
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);$ Q2 T) Z& X6 ~" g8 g
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: U# L7 w2 Y# r5 H, u0 ?
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    $ K) A4 [& ^6 T
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# a: g6 D7 u8 W/ _* B7 w( i8 t
  672.         for(i=0;i<240;i+=8)
    ' u1 _5 v4 j7 [% s: {3 F4 Y( z
  673.         {
    ' f" d1 y( J- v; m6 L# ^
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 h# z8 y! a2 V8 Z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 L3 K% N- i" o4 A+ ^
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 P( U% B. e  ~$ a' I2 |6 W. S
  677.           Sleep(33);
      |' }7 j* z: V9 Z' S) K
  678.         }
    % M, N5 @* M, O, e
  679.         Sleep(1000);
    5 t2 m0 F" e$ ~& F# q
  680.         for(i=240;i>0;i-=8)
    ; T' z$ [$ r/ F5 g, g1 N' w' u8 g- m2 t
  681.         {2 Z. ^; P' f) b, Z+ R- V& ~8 ^" S
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 y  p6 Z5 H" P* v. J
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ H2 L+ O- h4 Q9 f" E
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 Z0 H3 N. }. ^5 l5 r4 C
  685.           Sleep(33);/ i" m7 p3 L* q+ j2 J8 w! ]7 j4 {
  686.         }
    6 S# O  ]6 h  [4 c' V
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    3 p; }& v( \" r8 ~; U
  688.         dlg->ReleaseDC(pCDC);
      K+ W1 d+ |1 f8 {
  689.         DeleteDC(hdctar);
    9 C- k  b; h# G
  690.         DeleteDC(hdcsrc);6 W! c% @5 C9 N1 ]( l5 x8 k! Z
  691.         DeleteDC(hdcorg);
    ! A2 }$ \5 }5 x+ k' H/ p" {1 ?3 ?
  692.       }2 v4 o  d7 ?4 }7 \) t# c
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);9 L2 {; R/ \' `1 f
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    2 R* f5 }6 ?6 |
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");9 t6 ?+ G- k) u7 p: ~
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    8 C, Q5 ~7 I( M3 }6 S3 \* Y1 B
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: M) b, h5 a5 N; P, M8 w( Y' o  G
  698.       if(!Dn.Connected())! `- ^; A, q+ }! c" ]' r& G. {, h
  699.       {' Z! C% f! g3 Z
  700.         dwTotalFiles=1;9 d& m- L5 p* d4 s3 e$ G3 G* u$ {
  701.         dwDownLoaded=0;/ Y4 y: @* k6 h2 y) J! L" g3 m9 {0 Z
  702.         bSilentStep=TRUE;
    / |. ]! Z; S% e6 P! y# l
  703.         bCompressed=FALSE;
    + m. K3 F! W, L( x' S2 v6 F
  704.         strExtLocal.Empty();0 L9 p+ B' L) H: \% n
  705.         strFullName="readme.txt";3 N9 b% w: g- A3 _2 g# z$ ]
  706.         dwProgramState=AP_CONNECT;, V2 K! O3 W& |! \
  707.       }: B! v/ G& k' ~3 g* e: S
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    7 K* `. W3 d  Y2 s$ A- |
  709.       dwStartUpSteps=2;8 S+ \1 {! F1 O* B! t) ?  [" s
  710.       break;
    ! ]8 P! N  e9 s' {' k
  711.     case 2:
    $ I9 n& Z8 v6 W1 ]/ }! F9 _
  712.       {
    6 _; o5 ~7 e( `3 u8 l7 A" t
  713.         int iEOF;! a* s$ c- S$ U' w/ v& Q
  714.         FILE *fp;
    & B2 v% s1 D6 V2 \8 H( J- x
  715.         char szString[512];  }2 J% e6 X7 ~7 q# W0 A' Z7 `- h
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ' @& S& l/ g' ]- F' t  l
  717.         if(fp)
    - C7 d% f  z" ]0 k! X2 I+ g
  718.         {: x# B6 ~4 z  S1 ~7 A
  719.           do% A+ A" d# B! F- y, ?8 F
  720.           {* T5 a9 y! t4 M1 g4 n. X; X
  721.             iEOF=fscanf(fp,"%s",szString);, _/ p' o& S4 O! m  ?* Q
  722.             if(strlen(szString))* d, d: E1 t$ P' e$ M
  723.             {
    " i; W# r0 x* H4 p
  724.               if(bFirstChar)" t2 B& N/ P9 o; w) ?9 f$ V2 F6 ~0 c) G* q
  725.               {0 s/ j- E, t9 y
  726.                 bFirstChar=FALSE;
    ! S* }" X3 N' a, ]! h
  727.                 bConnectIsBig5=FALSE;
    . {) B  b, _/ x+ o* `' E
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    " l+ e3 K, T( m
  729.               }$ \2 j1 |# t7 C( ]
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));7 J- B- L3 v/ x) M+ R- _' h
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));& s/ o: z# ~5 {" X% L
  732.               dlg->m_ListText.AddString(szString);8 [1 N8 f. a; s9 D( e: _4 t. B
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 v5 l3 K! P$ t# @3 \, R2 D2 {
  734.               *szString=0;
    ) Z! ]7 @2 y1 t/ [% U
  735.             }
    / G2 d+ y+ q1 C# a# @2 }
  736.           } while(iEOF!=EOF);
    % A0 \3 a; Z0 L7 W- i* K
  737.           fclose(fp);( l" A1 L& s& ]8 n& o& y
  738.           unlink(".\\DownLoad\\readme.txt");
    ) ^3 m! s8 V$ Y5 ~
  739.           dwStartUpSteps=3;
    9 R& ~% ?! ^9 A  D$ ~% C* B" a
  740.         }: {! D  d% b( q& B/ v/ m5 {  E
  741.       }
    ( ]8 O+ U/ P- V4 P4 B* u& S
  742.       break;
    ' w) b  L3 L0 [
  743.     case 3:- d* A, _2 {0 B6 P, G9 x
  744.       if(!Dn.Connected())+ x* j5 z5 z5 {2 I- b. [
  745.       {1 ^- L  g7 s: j  n0 v" g9 t" L
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);; ], Y; e. \. C: K- c8 k
  747.         dwTotalFiles=1;
      ?6 o! A" U/ C) w
  748.         dwDownLoaded=0;+ ]/ p1 T3 X8 w* {9 m
  749.         bSilentStep=TRUE;
    : D* d- l- l* G& [/ _# q
  750.         bCompressed=FALSE;' W" c& b! ^4 u: \. j% g8 D$ d  f
  751.         strExtLocal.Empty();
    7 h) n, w! ]! b: S2 o( a+ g( e8 ~
  752.         strFullName="checkversion.txt";* Z% R9 K& e3 [! z$ O7 k. u7 X' e/ n
  753.         dwProgramState=AP_CONNECT;0 y) s, {9 F$ h- _, n+ d: f, V8 ~
  754.       }1 L. _; G2 @( i2 C0 a
  755.       dwStartUpSteps=4;
    " \% d) k% o6 E' \1 D. E
  756.       break;- C; }) k6 M! [/ S7 o
  757.     case 4:
    6 l6 u3 u% Q$ p: v; x
  758.       {
    8 x" I0 W+ `8 z- `1 q1 N2 A
  759.         FILE *fp;6 K5 u9 i3 ~/ m' A6 ?6 x; X
  760.         char szString1[128];! k: T5 k7 z4 V- Q, ^8 A
  761.         char szString2[128];5 U: w' }% ]) l) q; m
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' I/ r+ Q& Q( Y4 M
  763.         if(fp)" W% J- |$ Y5 x' r4 A+ e  V3 s
  764.         {
    ! v# E4 T# v+ a3 q" e
  765.           fscanf(fp,"%s",szString1);
    2 p2 L1 L* S9 V. t' |
  766.           fclose(fp);- O3 K  m- K& a) {
  767.           fCheckVersion=atof(szString1);: L* g5 c# r" x, u2 a7 X( [' M
  768.           fp=fopen(".\\checkversion.dat","r");
    ; b. L' E5 D: Y; [9 }2 R4 }
  769.           if(fp)7 Q  b  t9 x9 V8 }8 a
  770.           {
    ( m- |. w5 d* w! K7 ]9 ?; }  O8 n
  771.             fscanf(fp,"%s",szString2);
    9 Y& u2 l! V9 E! s& @) _/ s
  772.             fclose(fp);; i# f$ j1 q* A8 e9 b
  773.             if(atof(szString1)!=atof(szString2))
    ( Q  v. g( k' y
  774.             {
    5 N6 }+ X6 G& ]+ [/ g$ Z$ {
  775.               if(!Dn.Connected())% R3 G8 i8 B6 ]: m0 `# P
  776.               {
    2 {1 F) z3 e0 _7 [9 u% t
  777.                 bFirstUpdate=TRUE;3 [! s! E+ T; P8 b
  778.                 dwTotalFiles=1;
    / f, f$ E' a; K
  779.                 dwDownLoaded=0;) ]: {! v3 W2 p1 v. F
  780.                 bSilentStep=FALSE;7 H$ [' ~) Q) M4 F
  781.                 bCompressed=TRUE;
    4 _- F2 y/ b/ }5 d# B0 s' w+ K
  782.                 strExtLocal=".\\DownLoad\";
    - X. B* O1 K3 o$ g; G  a
  783.                 strFullName="update.txt";4 n6 H8 a9 }9 }$ |
  784.                 dwProgramState=AP_CONNECT;" N7 _) O! q' H/ _: Y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      J- E# H2 A4 _- @. Z4 H
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 v- [) {) k+ s
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) M( e' }" \4 h' F/ l3 h+ J3 s
  788. 3 D& b% Z! L  v' I2 [0 i
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . K5 o+ @3 n  h8 K6 ], j
  790.                 unlink(".\\DownLoad\\checkversion.txt");* e5 P: U; T2 j4 i. U; d% l
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)  i/ |( f" h; M" W+ q& S9 M( Y
  792.                 {
    % f6 a, [4 D6 K5 V; n- k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    # q& g/ z0 V6 ]) J, Y: A' A
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");6 ~6 a. `/ |3 A$ h; J6 Q! R
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");. ]& c7 G" h, j! q* ^  N
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ b! I: h! K9 E9 b( E' F
  797. ' g) ?3 |. r! Z
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 R7 p7 V$ U/ H
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) S/ L  u' Q& Z: F& H
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    - A- w3 f4 m0 ], Z4 u: @
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ L/ K7 {7 @4 l' h+ S, k* d) c" P
  802.                 }
    8 E+ O: N3 `& \& G" u  ]/ r
  803.                 dwStartUpSteps=5;& p# j$ Z( X. T( ^  ^3 `  m
  804.               }
    - l, q3 f$ z2 e. z& T3 w% S7 U
  805.             }0 L$ c$ |/ A! V; U
  806.             else
    3 x& C% K. j6 ?$ D
  807.             {
    % G* T( p4 J! `7 e6 V/ }: ^
  808.               unlink(".\\DownLoad\\checkversion.txt");2 Z& {3 t, U$ r
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - k* n) Q/ O2 `' O9 z. @8 v
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    7 S: }$ ^( \* d1 F9 d1 W! G
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");: h2 H& H: `( P3 Q; c$ u
  812. ; S1 b" b! _6 d) M
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. f% a+ n6 q7 Z& `
  814.               dwStartUpSteps=99;
    : a2 w0 w: ?  m+ l  P
  815.               bFinishUpdated=TRUE;
    # Y' d! O7 V- t( _+ t" g4 F3 L
  816.               bCanUpdate=TRUE;
    3 e$ y# O' Y$ [
  817.             }0 d2 F/ V& L0 j8 p
  818.           }
    . Z; q- x' ~$ Q7 t5 F( f+ u
  819.           else: U9 K' E2 X5 Q' V8 I( `: F
  820.           {0 }) [. e4 a  t0 S6 j
  821.             if(!Dn.Connected())" R9 X# k1 j6 K9 \
  822.             {
    * h4 f; l: o5 U8 }" h9 u
  823.               bFirstUpdate=TRUE;. `2 }- R+ Z3 N* Q+ ~$ h
  824.               dwTotalFiles=1;
    . I/ E" t1 T, z( B
  825.               dwDownLoaded=0;
    % T1 G6 C5 N# U1 c. f
  826.               bSilentStep=FALSE;$ i* X7 k) O# c) p# g" {
  827.               bCompressed=TRUE;
    " l& n  K1 h- [, q$ n
  828.               strExtLocal=".\\DownLoad\";9 V" n  |8 [4 w$ f: `& Q* _7 S' T/ |
  829.               strFullName="update.txt";! w$ Y$ \' @$ I
  830.               dwProgramState=AP_CONNECT;; m2 l- v1 g5 U& [  u
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, |4 q2 E8 y& O2 q; b- ~
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    % j" `1 [8 b7 I
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");9 q( s4 \* `' c8 p7 Y: }
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      q# ]- X  V9 w6 C
  835.               unlink(".\\DownLoad\\checkversion.txt");
      g, O; r9 m) C  Z8 U( E
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    2 L! J* R5 n) \3 i$ m8 E8 b* @
  837.               {1 }$ ?4 W+ z- x6 d
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    " e% @" n8 q8 I; @" t- n) V
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ' z7 Y8 E. S- e' g; v' T1 b
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");( t% Z2 j1 }* X, z$ |9 V4 n9 }
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ m2 N; \- g0 S8 U" N
  842.                 . q2 I: P; b4 J( n
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) A2 g0 Y4 S) C' V: P+ z2 y
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");# \$ o: @! y3 x
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");$ {+ _2 f. n5 w8 T
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 Y- E% d% N2 L8 V2 {& ]; z% Q
  847.               }( q, ?- N$ g  r' X) C$ w
  848.               dwStartUpSteps=5;) P) a6 b( j8 P; o0 W6 M
  849.             }: V' T$ S7 z% T4 B4 @
  850.           }4 T$ s) W: R; u: ^* p# L! M2 c/ i
  851.         }
    2 G; Q6 p' l. L  }
  852.         else
    . Z! H6 J$ ], ~' h1 ~3 k
  853.         {
    , K9 X* o" O7 B2 m( d
  854.           dwStartUpSteps=3;
    0 |/ ]8 m  @8 |+ `8 B
  855.         }
    + y8 Z; y) ?1 P( p: d) z& e
  856.       }3 q6 P& p% l0 S- m1 |
  857.       break;
    1 y- j" w: [7 U& n; |7 D# Q
  858.     case 5:$ c: |! S0 ]5 D& x9 e7 j) u* B
  859.       {
      T8 x5 I0 I; B' k$ n
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    / H# ^7 G: i; D9 D% |, z
  861.         {) Z) P% \! S' M4 i
  862.           int opt_overwrite=1;: c8 |# o2 ^; E
  863.           int opt_do_extract_withoutpath=0;5 o$ ~( C* z8 b
  864.           unzFile uf=NULL;
    ; \# `4 d. e5 ?" O! O6 O9 J

  865. - L& v+ y; i  g4 }! o
  866.           uf=unzOpen("Wsa.zip");
    , I! o. f0 F# D, v2 G# ~+ o6 F
  867.           if(uf)
    5 Q+ l# C$ `0 b9 h
  868.           {
    & I. _* @; L: l9 B" X2 s/ o
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);* J/ M; C- g# |: J( z8 ?. S# a
  870.             unzClose(uf);
    6 p, z% K& X3 P
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");; ]# C& m( {. Q+ [  m
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    $ N/ |1 p' ?; t
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");' d% Z; j. q, Y7 Z! u0 _7 O
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% D  k4 m- L2 B1 H" P2 x
  875.           }% Q% r" _- }' B' `! Z! X5 {
  876.           DeleteFile("Wsa.zip" );
    8 i: v) ?/ N+ M7 W( [4 c5 H; \. f
  877.         }
    ' ?8 ^0 V5 ]& L! M

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

) t3 ~" P0 @: H9 r! y; }9 P

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部