找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
3 i0 j  U$ {1 s
  1. / RevApp.cpp : Defines the class behaviors for the application.
    1 S. J3 D& G9 S5 M1 p/ y
  2. //
    . G( ?+ z! A9 c4 z& Z& U
  3. 4 l2 ?% K4 Y7 R: B) |: l# I3 j$ |
  4. #include "stdafx.h"3 Y: D( _% Y$ I$ l% l. J6 P8 A

  5. & e5 h- S' v8 g/ t  h8 [0 n, F- `
  6. //#define UNICODE
    + h) ?) s" c0 H+ J0 z* n$ i
  7. //#include <gdiplus.h>
      w9 k. i1 L. \9 V
  8. //using namespace Gdiplus;2 p! _/ Z% I( O
  9. ' e7 T+ ^" O6 G( X6 n/ I
  10. #include "RevApp.h"$ h5 @: H( o' C5 h: n3 u" D7 D- d
  11. #include "RevAppDlg.h"
    2 ?$ @  j% i7 x0 @- R  x% |' P

  12. ( Q: d" ~- b- Y8 K, {' f( @0 H
  13. #pragma warning(disable:4786)2 C! \9 S8 g# b$ Y. `8 U6 d
  14. #include <map>" {' L! r9 h$ g' ]) |
  15. #include <list>
    + s& H6 v9 F# I7 I* N9 u/ o
  16. #include <direct.h>
    7 z3 w9 d3 W; t% o$ `" Q! w  g3 W

  17. / \  @. ]) S2 m; h
  18. #ifdef _DEBUG  d6 G1 F! e( V# G2 l7 F1 v. X, O
  19. #define new DEBUG_NEW
    ! T) \& A- }! y' s" F: G
  20. #undef THIS_FILE9 ]7 }0 D2 a- U* ?
  21. static char THIS_FILE[] = __FILE__;5 i4 K6 `/ g; Q% |+ m
  22. #endif
    # N- @$ H, S  P. Z  N7 L
  23. #include "SkinResDef.h"9 X5 S( d5 v4 Z; k* P
  24. #include "ChangeBG.h"
      d- l+ u7 @+ k6 U& e$ N% a" ^
  25. #include "AFXINET.H"
    9 K( ^- O, ?; E9 O! A9 |& {' r0 q9 F

  26. - [( P' a, A7 h. o( c" I, V
  27. #define TRADITIONAL_CHINESE 0
    " `9 ~* ]" [$ m) a4 F! G* G
  28. #define SIMPLIFY_CHINESE 1. w) i/ `+ _) c9 h
  29. #define ENGLISH 2
    / m3 j& i2 l0 H5 W/ r
  30. int m_iLanguage = ENGLISH;
    5 p7 B; p1 K1 i4 U8 g* o  h
  31. /////////////////////////////////////////////////////////////////////////////9 S6 }. \4 n6 @
  32. // CRevAppApp
    4 [; d0 q# q/ @: m7 X: l
  33. + v0 g# G; y& V$ }
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)1 i  Y  I1 H' A' ~- ?& m
  35.         //{{AFX_MSG_MAP(CRevAppApp)7 K4 d3 s' l* ]3 ^
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    6 s+ x4 i) f, s2 o2 Q, t2 M9 @
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    / P( y* H, Z, s1 h
  38.         //}}AFX_MSG- `% p$ G4 o8 ~- `2 E; Y$ B7 b1 v+ G
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    3 p. U1 ~- `+ a  j( a
  40. END_MESSAGE_MAP()
    3 O" H" P  Q9 _, S% s

  41. , \  A% Q  v4 |% d8 }
  42. /////////////////////////////////////////////////////////////////////////////
    - ^( G5 W6 \, T6 Q1 B7 H
  43. // CRevAppApp construction$ G6 r4 t/ M) m* Y. |4 o

  44. 9 _9 `$ T) J3 |
  45. CRevAppApp::CRevAppApp()# t4 z" c: l% ^/ B9 E
  46. {" |" y# u( W! q. ?- U" V/ h# ?
  47.         // TODO: add construction code here,
    " |6 f, J& r0 q) {+ B& G
  48.         // Place all significant initialization in InitInstance+ o% {) r9 U* z! g
  49.   bDisplayIsBig5=FALSE;, q( N6 Z9 E" S7 f* l$ Q
  50.   bRestartUpdater=FALSE;
    , f: c/ z2 o+ \2 Y$ }
  51.   bFinishUpdated=FALSE;
    % c4 T! L5 K4 k  U" b! Y- Z& v
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    3 r& h! F& ?" D8 z) X
  53.   InitChangeDataBig52GBKS();2 t5 S3 r3 h5 }9 T. E
  54.   InitChangeDataGBKS2Big5();
    % L1 g$ z- n4 A, u
  55.         //
    & b; `$ n$ X3 u+ u- O  Y
  56.         bClickRunExe = FALSE;0 S6 x! a, w! M  {* y. f* L
  57.         //
    7 b2 s: p: C% E) ^6 Q& a  y/ `. X! J
  58. }
    9 \. z5 r- h! L8 J  I( S5 t

  59. 3 H; S8 j2 T: d6 A' q2 g( d( J
  60. CRevAppApp::~CRevAppApp()* K+ Y$ Z0 b" ?: k$ ~  }
  61. {8 ~9 X! Q8 ]$ Q% E/ F
  62.         // TODO: add construction code here,
    , n! C8 d& `) w9 g
  63.         // Place all significant initialization in InitInstance5 Z( e& k% o+ k+ q3 s5 G# j
  64.   EndChangeData();
    9 D; \) ~7 D1 n" z& B( w
  65. }
    , h+ y  Q$ h4 a2 D

  66. 7 {( o& i$ X6 q2 s
  67. /////////////////////////////////////////////////////////////////////////////2 ~2 j9 z. T; ~0 J; u7 Q+ a
  68. // The one and only CRevAppApp object# M3 G" V. Y3 }1 Y# z1 p# `

  69. : B2 Z0 t$ g+ e7 k" r
  70. CRevAppApp theApp;. o! q- g2 u; A$ H! y- t

  71.   k/ p2 z0 ?- ^1 D5 i
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    / M# r. z3 i9 p) M( j# m. W
  73. {
    ) t, a5 p( J4 M% d8 C
  74.   int iEOF=0;
    5 m# l. x; b# n4 Y
  75.   char szTempName[MAX_PATH];
    1 D* S6 V3 v2 i. t7 }9 _7 n- T
  76.   *szFileName=0;
    ) e# _' V# K, \  ?- p1 K1 L
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( t% z: G; m* Z% E# g) R
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ' }+ T9 E$ r, i9 M5 _
  79.   {
    4 @! K& R" S! ]
  80.     strcpy(szFileName,&szTempName[1]);
    ) r" Y) G! T; G- ?
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)5 z* v* u8 A2 r' @% v- L0 D
  82.     {8 o9 {4 y; ?( ^3 a# [
  83.       iEOF=fscanf(fp,"%s",szTempName);( o( h$ V. W8 |& i
  84.       strcat(szFileName," ");+ k* H0 t: q8 i7 k# v4 d/ E
  85.       strcat(szFileName,szTempName);7 I) e* Y' E  G6 N3 b7 u
  86.     }
    2 S+ i/ c1 t" Q
  87.     if(strlen(szFileName)>=1)6 s- O: Y: h: x& j+ z8 k
  88.     {- ^! H$ ^, r8 X: P
  89.       szFileName[strlen(szFileName)-1]=0;
    3 g; M$ K+ C- G
  90.     }
    ( C) V/ T/ Z/ d. T
  91.   }
    2 U) g! V8 y9 E  U6 x
  92.   return szFileName;
    / x$ U! \2 ~; P8 Q+ t7 f3 y( c" o
  93. }# _9 y" Y" s6 G" b" g

  94. * f0 A- j/ ~' T* V) B3 S! v5 X
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ' n3 \2 X6 b: s) G3 X* @) _( ]2 h
  96. {
    0 Q2 \) ]9 n+ N" [5 c
  97.   FILE *fp;4 ]7 a0 Y/ [+ Y: F3 p
  98.   char *key=NULL;
    % [! ?7 ]6 `8 T9 B
  99.   char version[MAX_PATH];
    1 g$ L1 V; c$ c8 C7 t1 ~" q" ^2 s
  100.   LPUPDATEFILE file,olds;
    ( g3 S. l. t/ }, {! J8 h
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( x& M0 u  ^- }7 r1 q! \0 _
  102. + x2 Q" B' V5 R5 d' {/ ~
  103.   UpdateList.clear();% q* Z9 v) g1 A
  104.   UpdateFile.clear();
    $ f; x" M! ~. K: B) Q4 t
  105.   if(GetFileAttributes(filename)==-1) return false;
    0 S( _. R" x$ Q* j! X
  106.   if(!(fp=fopen(filename,"r"))) return false;4 L; _# e, p1 G
  107.   fscanf(fp,"%s",version);/ j; Z- ?5 f* l: H$ `8 t
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }" W7 T# U5 C2 i2 _! {, ^
  109.   while(fscanf(fp,"%s",version)!=EOF)" |# D. [4 G& ~* t# f
  110.   {3 `& O. K4 p! i# N1 S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! U- A0 A  m) A, i
  112.     fscanf(fp,"%s",file->path);
    0 d0 ~, D7 w% o& C- J
  113.     ReadFileNames(fp,file->file);
    9 u" |) b3 v" t% F2 }. o2 g
  114.     strcpy(file->full,".");6 y. e) ^1 k7 X8 Z+ N5 ~
  115.     strcat(file->full,file->path);2 t) V5 K) c: h# L8 Q
  116.     strcat(file->full,file->file);
    # T* I! M5 [7 w1 p4 Q2 i
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    7 Y* f% ~9 r' K; z) Z8 h0 P$ ]* ]1 b
  118.     {& e% b# D9 b/ r
  119.       file->vers=(float)atof(version);
    , I$ V% S* i4 k/ C$ {0 T* d# V
  120.       UpdateList.push_back(file->full);2 A" i! U  u# W# I, z/ t4 F
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));# |0 n% r. ^2 Z7 E3 Z
  122.     }
    - V# G+ d. ]# r& `* @) P
  123.     else
    2 i! M6 }4 v5 }% O
  124.     {
    # F. Q. q& \, ]8 v) E8 Z- v
  125.       olds=(*p).second;
    ( U) x; I( V# c) G+ T( ^
  126.       if(olds->vers<(float)atof(version))
    2 A% F" \6 G) F  O( a. Z
  127.       {
    # {6 r. r& J  F! [6 {
  128.         olds->vers=(float)atof(version);
    ' b" q# A$ \% q
  129.       }
    ; H! P0 `5 R4 W4 M: d3 W
  130.       free(file);
    5 I( W4 ^& Y1 D' Y1 J5 c
  131.     }( ]9 t+ W( l3 _# r
  132.   }
    4 \0 [& ^5 \7 u* _
  133.   fclose(fp);
    2 V, k3 f3 B, S  O$ P' u* b
  134.   return true;
    + b2 W4 }6 b3 i7 ^0 H% y
  135. }( s# n. q9 x2 @, y) w6 u% {

  136. # [/ \, m- ]9 G! |$ H  x3 C
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)4 Q% x2 V: U6 K
  138. {
    : D3 `* Q/ h% K9 Z- y) i, |
  139.   TCHAR  szFull[MAX_PATH];
    + K9 G( E( L6 f' V% w
  140.   TCHAR *token,*inter;
    3 B0 {7 t4 c# ~# J" y5 k
  141.   *szPath=0;
    $ f# m% L/ W: h9 |4 r# p) D8 P
  142.   strcpy(szFull,szFullPath);5 h( i! o7 I7 q' c
  143.   token=strtok(szFull,"\\/");0 F. E) v' `# @. {1 k2 z
  144.   inter=token;% z9 y2 H3 n9 k& C
  145.   while(token=strtok(NULL,"\\/"))4 B$ W( P4 c( @; x7 Z7 @. F
  146.   {
    ' o8 A& ?& V, d/ n
  147.     strcat(szPath,inter);
    9 U. X' G6 q( S* M3 a9 ]
  148.     strcat(szPath,"\");
    0 A8 P4 L7 Z6 S
  149.     inter=token;' b0 n, G6 y/ F0 k5 Q
  150.   }
    & m6 K+ n4 n- Z  r4 p/ E2 p$ ~
  151.   return strlen(szPath);$ B; Q* K+ \8 N: ]  M6 |1 r& @
  152. }0 v( Q5 N. V$ t3 e2 G" y2 @
  153. : b  `. `3 t( \; K
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
      `! y2 s2 D' ]$ V* K; A) t% b
  155. {
    & g$ W! U8 @. \6 y% }) Q
  156.   DWORD attrib=GetFileAttributes(Target);
    9 ?0 G8 R4 @  v; z
  157.   if(attrib!=-1). g" Y6 E' O( [9 r6 J6 U- c
  158.   {
    ( h$ i% y+ ^! Y% q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))# \6 w' A) H# N) h6 X/ v
  160.     {9 R5 U  y6 z5 k6 q! _/ T! o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    4 h% V$ U, c' s: {1 g& G
  162.       SetFileAttributes(Target,attrib);
    ( g* s% D! u) f& h: S3 g; H# e
  163.     }
    # I$ c% e9 n- n/ c( _, Q
  164.   }
    & R0 e, i2 {/ A9 k: S
  165.   CopyFile(Source,Target,Erase);
    $ s) o3 j% k" v) m4 V/ ~
  166. }. l3 J* i7 c  f

  167. 9 ^7 G& ]/ \' m0 }
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)1 D' i. r- B* y9 B: w
  169. {
    # L4 }1 x* k/ Y" i
  170.      FILE *fp;
    * M9 h7 _! d% k6 |' f
  171.      char  szBuffer[8192];
    ( Y3 N+ G+ B$ p8 u. q; y' Q* m
  172.   va_list  argptr;, T6 P& Z7 J% L, P7 W

  173. : U+ B1 {& n4 p$ A) R
  174.         va_start(argptr,message);
    ' l: b: L- M( k; K) W* X
  175.         vsprintf(szBuffer,message,argptr);
    * I: d; A& U  a1 N2 A5 }+ F
  176.         va_end(argptr);9 V$ J3 N8 f7 j& `/ W) f8 U4 I
  177.   fp=fopen(FileName,"a");0 r- ^6 x" c% i* J+ S+ n9 `6 E
  178.   if(fp)0 E4 v; T; m* l) j& T" N8 D
  179.   {
    ; P9 a, b4 a1 |
  180.     fprintf(fp,szBuffer);
    ! h) V- l+ e1 r+ J; b
  181.     fclose(fp);3 p7 O! G) [' a1 T1 @% L) X: m% x
  182.           _flushall();
      o% }* v4 R  r: R# y
  183.   }! u: c# S. U* C1 g5 G: A0 X
  184. }  _( ~, N1 M( A# g* v) u) _

  185.   q* P6 Z6 d, B  d! ]* o
  186. BOOL CRevAppApp::Fclearf(char *FileName)4 A5 X6 L+ }& E1 L' I. y
  187. {) z) X, d* j! M- H3 z* S
  188.      FILE *fp;
    : n" n, E" m7 g1 e) x+ S
  189.     DWORD  attrib;' L1 o' n3 k; K! [
  190.   attrib=GetFileAttributes(FileName);
    ; b9 W# B% `! g3 Q: w- n: \8 v
  191.   if(attrib!=-1)* B9 f+ W6 T- e3 \; a# {
  192.   {% u: Q& U% O5 b" B. A, g; p8 I
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ! Y: [& C$ @% D1 g, K
  194.     if(!SetFileAttributes(FileName,attrib)). M5 b, F- v+ E" |
  195.     {
    / `( j$ g7 t, I1 i
  196.       return FALSE;
    1 c* k8 w; y, T" Y2 M- O3 i$ u+ Z6 C' v  T
  197.     }, N  M& u9 ~  i
  198.   }' p# o& N+ `( Q8 J( ?
  199.   fp=fopen(FileName,"wb");) b' k+ `: [" W( _
  200.   if(fp)
    " K( f' F7 ^  x! T. a
  201.   {. d2 e/ T. P4 f. A4 q+ U1 i8 h
  202.     fclose(fp);
    7 e; ^. ]5 g7 e# I
  203.   }
    ) I7 K( K" U# o
  204.   return TRUE;. \+ j* R9 p- T) [4 l5 V
  205. }. {# E/ q$ l; _0 j6 X. u0 U
  206. 1 A) g* H7 q' Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)" n, b0 O& S0 e0 F
  208. {) z+ G# g6 u% ^+ H# w7 R
  209.   char filename[MAX_PATH];/ `1 F% i0 S! {5 L. q
  210.   LPUPDATEFILE file,olds;; E  U+ L0 Y& @3 }) h7 ]
  211.   std::map<int,CString>::iterator i;% B% ?4 z, n9 {- P
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    + E" x. o0 S/ q9 M" W) G
  213.   std::list<CString>::iterator l;2 f" ?& w! i: S* A5 M0 ]
  214. ; P; n6 ?) ^  f9 n- [6 o
  215.   if(bFirstUpdate)
    1 a# k9 t4 @6 L* [% A: P  G. v
  216.   {
    % Y" z/ r4 Z3 ]+ U
  217.     dwCurrFile=0;
    2 n" k; Y3 o# B' R: A2 w0 q
  218.     bFirstUpdate=FALSE;) R, x. z+ }! N, |: X9 m
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())7 L1 r. K; v8 L
  220.     {9 @5 h. V7 a) Y0 q1 ^2 |
  221.       dwTotalFiles=UpdateLocal.size();
    : {" b1 t/ r+ _
  222.       dwDownLoaded=0;
    " l8 T/ L( O9 u  X, l/ `1 [6 [. [4 z  e
  223.       bSilentStep=FALSE;+ g4 J; i4 n) r" t9 _8 m) U$ E; @
  224.       bCompressed=TRUE;
    ' |6 |# N: H7 d. o! c) q) Y* N# f8 @$ i1 w
  225.       strExtLocal.Empty();
    ; a* Q. h7 M& Z. S0 X
  226.       strFullName=(*i).second;/ e6 y/ p- I, J/ b4 S3 c' ^; `
  227.       dwProgramState=AP_CONNECT;' D  G6 X8 h# s& ^% ?+ s
  228.       return TRUE;
    : F' f- c: w4 m3 f. k
  229.     }
    ! d# a4 B5 Y+ U& M+ I1 Z' O
  230.   }" y" H% z& K/ @4 R6 ?
  231.   else if(bRestartUpdater==FALSE)
    6 s) z' \. @7 U+ i: n, `# ?: e
  232.   {. G  {; K$ w; R  y3 k( S
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())5 F6 L- V7 E! Z+ S5 u
  234.     {; S$ |% F2 \0 Q% i3 a1 Q
  235.       file=(*p).second;4 P; v/ Z5 @3 |
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())7 R* h) ~" M! J$ [( I
  237.       {7 Q7 ?3 _+ l' s0 R9 F3 `* |+ T0 N/ N
  238.         olds=(*p).second;% \+ N: w: R' _8 V: s' B5 V/ v
  239.         olds->vers=file->vers;: e. @" q+ g* B: B% @5 O' x
  240.       }
    : a1 D7 b) V6 Y9 V8 Q
  241.       else& y# }4 U& j+ e- Y, C$ t
  242.       {
    $ N5 ~# j! \8 k3 y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 @# N2 |* s( Z7 }( \1 l
  244.         memcpy(olds,file,sizeof(UPDATEFILE));" P, R$ O. T0 T, Z' V  w2 Z
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));3 [2 n+ r' S4 f3 n
  246.       }
    ! m# `5 B' E9 Z+ m& L5 }) W) D
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    9 N6 f- Z% c- _( e
  248.       sprintf(filename,"(%s)",file->file);
    - I! U/ A4 c/ G  t
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 n/ K0 A3 b/ y! X
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }5 E, q' h& f( D9 i, Y! I' E
  251.     }* t' t! B  g1 ]! f6 K
  252.     dwCurrFile++;
    , h" j; |. D! X4 r4 g
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 F2 p% o% e! u7 A' F
  254.     {# C6 z6 J2 S0 q
  255.       bSilentStep=FALSE;" _7 x: y7 O8 [' S
  256.       bCompressed=TRUE;
    # c$ j# A; f7 G4 Z  ?
  257.       strExtLocal.Empty();
    $ \: g9 b; ^% N  ]  ]& D/ o0 i
  258.       strFullName=(*i).second;% y, o* ?- M+ V' Q  [
  259.       dwProgramState=AP_CONNECT;# u7 P( h' ~2 L" j# X
  260.       return TRUE;+ N% W1 _6 _# p5 [
  261.     }
    * r# ]+ u! t1 q0 z
  262.     if(!bRestartUpdater)
    % J/ _, l! ^5 K, L
  263.     {
    / W. D# }# u- ]% S+ z( G
  264.       int iCurrSize,iFileSize;$ s5 Z. J+ Y* ?# l) J+ w
  265.       iCurrSize=0;$ K1 ^% V5 I- G& w/ o! g" F
  266.       iFileSize=UpdateList2.size();
    1 v$ t+ c$ V; \# L1 ?  e: x
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    7 V% {3 q0 u8 C6 c( ], J" G
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");; G  s5 x) o# Q" O
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    5 [; I* b  X" Z' T* \# q2 x+ {( r
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + c* r8 J. X# O( v7 `8 b' i
  271.       Fclearf(".\\update.dat");: t$ D! Y9 R4 y7 u
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    3 |2 B4 b' l) r6 O5 F6 u
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)' C% D+ s% r  {6 y5 j  r5 y8 @, J% `
  274.       {
    1 g7 g, S7 D5 }5 I, |
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ' g, C2 {2 N% q# z6 n
  276.         {4 z3 L7 S8 x- K2 Y6 A7 m% K
  277.           file=(*p).second;
    0 t: `8 E; ]. O* ]
  278.           sprintf(filename,"(%s)",file->file);4 q5 L, g5 S/ R( Y! l
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 K# z/ W, z# O! q' ?
  280.           iCurrSize++;
    3 J; f1 H3 P0 i
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));3 i6 o! N6 q& N  x* {
  282.         }6 j0 ?1 l  W0 [. V6 a
  283.       }: I  H: @  |* T$ Y; y
  284.       unlink(".\\update.txt");& Q( r9 E- t; F- o2 |! w" y2 N; o
  285.       unlink(".\\update.tmp");
    $ b, H) l" a4 e6 P+ x7 U- J( Z
  286.       Fclearf(".\\checkversion.dat");! C* ?+ o+ T; w1 H, f
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    $ v( I" y. R6 q( l# D. }
  288.       if(UpdateLocal.size())+ e. E9 K$ Y: p3 v. l1 t* E4 C
  289.       {
    - i3 K6 p# X  v/ h
  290.         UpdateLocal.clear();
    . G" [; K  f3 d4 ~5 {; i; ], }) x/ F
  291.       }
    " c6 ~: \' T  I$ ^
  292.       if(UpdateFile3.size())
    9 O! f, t! s6 |+ h
  293.       {  B2 q" f7 R5 R% _( [; P! B: p
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* Y! m7 d. j. f2 P# v
  295.         {
      `3 i: J8 O$ X+ u
  296.           file=(*p).second;, y( I7 n, I. d6 O" R5 z
  297.           free(file);
    9 n; H0 ]  K5 ?& N; `% z
  298.         }
    % I( X" ~" B# o7 O
  299.         UpdateFile3.clear();
    $ v2 B# ^) f% s' R/ ^  O0 s/ V
  300.         UpdateList3.clear();
    3 q8 ^& t5 h, y* A! c
  301.       }# e0 Q" J0 ~/ T6 _
  302.       if(UpdateFile2.size())
    ) e3 b9 \9 ~( p0 F
  303.       {
    + h4 F! ^' e+ F" e# a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - U8 J! |* k6 W4 p' ]- c: c+ Z
  305.         {6 X: l# j8 b/ v7 j# `% Z% r+ c/ U* R
  306.           file=(*p).second;
    / h! N/ @- U6 ?% X
  307.           free(file);
    0 I$ E$ l$ K1 y, @
  308.         }& \2 B! r$ s5 E. [7 L3 U
  309.         UpdateFile2.clear();8 H, K/ g; |8 u# B  U: ]( |
  310.         UpdateList2.clear();/ {1 E' X# V$ b& S1 v% N4 P: _
  311.       }* A. v6 @* h# s$ W* v! I, g
  312.       if(UpdateFile1.size())
    + G: f+ s% ~( S7 T: J
  313.       {! f4 x" }1 ^: n! d3 B
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" }, E2 \5 p+ U$ [$ O' ~- h. W, {
  315.         {
    ; u$ t2 F( d9 F4 t% {& N& [5 H
  316.           file=(*p).second;
    . \8 E- M: s1 h2 t5 v" v
  317.           free(file);
    ( |0 b% Y4 Y; l. [+ o
  318.         }/ y1 P6 L# ~; a4 v8 H2 q+ J# B
  319.         UpdateFile1.clear();8 V9 w1 ]7 A2 j/ d
  320.         UpdateList1.clear();
    1 a( `- u4 F! y
  321.       }( I# |6 q" w* L, T# S5 |
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ) ]7 l6 N$ J& q% j8 ~2 N
  323.     }
    ! s* k1 w# F0 R
  324.   }0 Z5 `7 r) Y; Y0 J! H2 r3 X
  325.   return FALSE;( D; s4 Y$ Y) B8 o2 S$ }
  326. }
    ! x* d. h; Y9 Y

  327. 6 V/ T# [: {* w" n
  328. void CRevAppApp::ClearAll(void)
    ; z! F3 Q" v/ g) m# v0 j
  329. {
    3 a* ]. f* s1 E8 V
  330.   LPUPDATEFILE file;+ e' A9 Q9 {: X. O# F+ _
  331.   std::map<CString,LPUPDATEFILE>::iterator p;; S2 V. [0 b: \$ f8 w
  332. 3 ?% g2 Z. J  Z/ C
  333.   if(UpdateLocal.size())' @- n; y7 U  f) R! I1 f$ T* ]
  334.   {2 \) I# Y5 @- R% t
  335.     UpdateLocal.clear();
    ) g; @9 ]5 A) I  S
  336.   }
    6 ]8 z5 K7 s4 t' w
  337.   if(UpdateFile3.size())
    $ Q( @1 ^: c) n0 K9 F
  338.   {5 I4 t! A0 O& Q. k2 c6 U; t$ {
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " z9 O& t7 |. u* D! f
  340.     {
    % x9 c' Z/ ?3 q, S
  341.       file=(*p).second;0 Y5 u" c' D) F. _. Z4 Y
  342.       free(file);9 j7 r0 {, ]  M6 D1 g; G& e
  343.     }5 u. @+ N9 e1 k) m" w! n8 j
  344.     UpdateFile3.clear();
    4 H& \0 `; ]" u
  345.     UpdateList3.clear();
    ! t, |3 Y, X, q  {5 m
  346.   }
    9 ?+ M2 D2 y9 `, m
  347.   if(UpdateFile2.size())8 s7 {4 }; J7 }6 m' R. B9 W
  348.   {
    2 s) ]5 O2 {  c6 [# s% j
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! ?& P4 E1 w4 b7 n. M
  350.     {
    0 d) E- M* h- m2 Y& m3 X0 Y  ]
  351.       file=(*p).second;+ l3 R5 W" A1 ~8 [8 D- D
  352.       free(file);
    + w7 b: r! y5 v, {  @
  353.     }/ A" ?4 b7 ]( s* _3 N: N
  354.     UpdateFile2.clear();
    4 ?" ]; o* E" ~- h
  355.     UpdateList2.clear();8 v& H9 c' K, c" e# u7 E
  356.   }
    7 C7 Y- {! F; t2 o% e9 p# Y
  357.   if(UpdateFile1.size())
    , k4 L4 k; E2 Y1 G) C
  358.   {* a4 J- x0 s; l5 L- G$ N% Z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & l4 Q- u1 M" \8 I8 T
  360.     {
    $ W6 e5 `8 v# H" b8 c" D) c# b
  361.       file=(*p).second;
    3 P, E& j; Z: t
  362.       free(file);
    - O0 P' w. V9 S3 ~0 F
  363.     }1 E# H8 \5 k  Z! ~  }1 _/ y
  364.     UpdateFile1.clear();) N/ c, P+ ~# T) z1 b
  365.     UpdateList1.clear();  A/ y6 @, d0 t1 C5 b( e" N
  366.   }
    % z' M: E* }8 h* K
  367. }  
    # U# K, o; p: \: z8 r
  368.   + `4 i5 e+ n9 j/ |' y! K- h2 ^# {5 H
  369. BOOL CRevAppApp::CheckLocalVersion(void)8 A' U3 q+ V6 B; K$ b* Y" }  C
  370. {
    & e2 q  c, c0 W7 d4 K' A
  371.   int c;
    0 s0 I  v) u4 e
  372.   LPUPDATEFILE file1,file2;
    + e- t5 L6 l2 i$ n
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;4 J( J" t# [; W: z
  374.   std::list<CString>::iterator l;1 _- h" U- i8 R1 F, I5 W! S( H1 w
  375. 6 K' w- f# r  @
  376.   UpdateLocal.clear();
    0 K- x" l$ V& `8 ?4 b" @
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 A% ?6 Q# `3 i- a0 p9 V1 [! Q9 D
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    - a# z! P' u' p) Y6 B) W$ a3 k- k  A
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);) @& ^6 d8 F) K. |$ u+ |
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ; [; x! _& m0 N8 U! t( F4 B
  381.   if(UpdateFile3.size())
    & L4 j! l) x. u8 z( C
  382.   {6 F* `$ j/ D% [% }8 U* L
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)5 _& m/ S0 B8 A4 [( d% S
  384.     {
    - v4 Z. R, ]6 s# R1 ?0 c! S
  385.       file2=(LPUPDATEFILE)(*i).second;
    , v( R$ T6 b3 u. u2 j
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    . g9 @3 i+ C  b) Q5 C; v8 d: \
  387.       {* O3 q/ |: O6 ^( u) M, R
  388.         file1=(LPUPDATEFILE)(*p).second;
    2 W; r2 F9 M6 P' A
  389.         file1->vers=file2->vers;
    ( \0 ]* B$ T, {% [0 J7 m) P
  390.       }
    . k# H# T& d5 c7 X) {* V# U9 l& @
  391.       else
    & o+ H& e& `3 p8 A+ W
  392.       {
    $ n5 r: u4 K7 P
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ s9 \1 Y: t7 [/ |. `9 V' @* M
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));7 i$ }1 ~7 x; t, c! _
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));; K% f! W4 T5 J6 y( R
  396.       }
    0 ~' Z  C9 V0 C9 u2 z" f  P
  397.     }
    . u: }! ^) F- U, Z# @/ a, L
  398.   }% W5 j5 W! l8 A$ N' M2 `, Z
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% m) L! F; p* z( g" }1 k& D
  400.   {& A; o# m) x* P( b2 q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())3 q4 |% h2 N" ^+ R% `3 f
  402.     {3 C' |7 C8 J6 F& p
  403.       file2=(LPUPDATEFILE)(*i).second;1 Q0 \0 W& \8 _9 o( z4 |8 v
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). v' ^! a5 `( r# y5 n$ x1 S
  405.       {4 f- f, N: j8 Z% e% \: [8 h# d
  406.         file1=(LPUPDATEFILE)(*p).second;8 P, f8 Z2 t- a! o
  407.         if(file1->vers!=file2->vers)6 Z3 R" t- f! e8 q
  408.         {
      \% V+ ~9 L+ l* i: Z* ]+ @7 i, [6 l
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 R6 j2 m# w9 Y8 R  g' s
  410.           c++;* O! V5 |2 t8 V. H% k  Y$ x, L
  411.         }4 Q3 m( ~# q0 ]& L
  412.       }5 c% [' t& x$ Q2 e! N  m" ^* Q
  413.       else
    7 J4 o* H1 C: g" ]
  414.       {  \& N3 b1 d1 i
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    9 P! R! O7 e+ h6 O- c- W* ?
  416.         c++;
    & i7 v  M7 F% E$ ?
  417.       }) l, A" t" p$ f. [) G' A
  418.     }$ t: R+ ]; G1 Y3 c$ O: q: K4 b3 C
  419.   }
    # {9 n( x# X* ~; {. P! n
  420.   unlink(".\\DownLoad\\update.txt");
    % d% {  P6 X4 I# G
  421.   if(UpdateLocal.size()) return TRUE;  V2 v, ?1 L+ [
  422.   else                   return FALSE;% ?+ V' r0 A+ c4 e
  423. }" ~1 Q$ M( L- A  B
  424. " N/ C8 }0 m" l' Q
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"4 B8 i/ Z- U" b1 }- W
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    $ ?  w, S4 h: E* ?8 n3 _
  427. + d4 K$ H. F3 \' k

  428. 4 e$ ]& I) H; r/ f8 w9 l7 N

  429. ' f/ d& I* c& N4 K1 F/ m; D
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)4 x- J4 f9 v7 y" |* V# y- n7 n
  431. {1 u; |5 _( S) t& }2 \- D/ y* `
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;5 Q: [& `0 L% w& G
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & i1 t, U# {  w4 P/ X4 u
  434.   {+ l2 B& x" z5 A+ {! L
  435.     char szLanguage[50];
    # y* l" s( x$ b, f1 j  Y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 v* u- P# O4 s. m
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 w9 _" l) G. D4 @$ o( d
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 B  [, D; T$ i7 n+ `
  439.     else                                   m_iLanguage=ENGLISH;
    : }5 I4 {! f9 H+ b2 [
  440.     char szRegister[100];) l( l- i5 i0 x4 }0 n$ @
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - y. d; v% L) T$ j# l& S6 ~5 {
  442.     strRegsName=szRegister;
    # C% D. b  r! x! W7 a
  443.     char szPatchURL[100];
    * t4 @* e( s- r' h
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");# J( i. A5 }9 ~3 I; C) l
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ [6 r* n9 @' O/ j6 K0 X
  446.   }
    / F. B" g5 U/ }0 f
  447.   else
    1 K! y0 c% d- M
  448.   {# T9 ~3 I$ \2 j9 k6 c
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 v7 n: U1 M/ i' b! [) {
  450.     strRegsName=DEFAULT_REG_URL;5 t0 e- O5 u% j* w0 w4 n4 z. {
  451.   }
    ' X0 r( I; R# t6 S8 q6 i$ x1 z
  452.   if(GetFileAttributes("hosts.ini")!=-1)1 X$ Q$ Y1 ?. r; f  P' Q1 ^& U' t
  453.   {
    * x! \4 T4 ]. ?
  454.     char szIP[50];
    5 n9 I2 y7 ]  v
  455.     char szDIR[300];
    % h# w. F, ~: `: r
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))+ h5 w& F8 d3 t7 n2 `5 O  S& G
  457.     {5 d% \9 Z1 K# M* `7 U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");- y) j( `6 M, V4 B( V5 |
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    - v8 V0 D* Y3 I) J/ u
  460.       strHostName=szIP;
    3 a8 ~: g6 v7 s$ K1 W
  461.       strHostPath.Format("/%s",szDIR);
    ; K" e: E  P) G/ N; F8 S
  462.     }
    ! c4 d7 ], X  O; f0 G, W5 E
  463.     else
    ; q, d" t# ~% a/ H  {1 {
  464.     {
    # b; G8 v  S3 }) j! t
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 b6 z' r6 [# C
  466.       {5 i; q3 x2 [3 t& P/ C
  467.         char szLanguage[50];
    ) q4 W; j% L) f* F( h$ ^
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 ^- g3 z! \- D8 W# g
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % g( g: B$ k& O3 k4 T1 c
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) k/ G9 _6 n" I" p2 ?; u% s
  471.         else                                   m_iLanguage=ENGLISH;8 \/ ~4 d( S' h, M- R
  472.         char szRegister[100];
    ; D' h8 p, J. z3 R, S- r
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 k. E6 C2 V- l6 O+ T& M
  474.         strRegsName=szRegister;
    ' L' g/ x# c0 c' q# H
  475.         char szPatchURL[100];
    9 k# B. O4 j7 l6 e+ V, \) M# {
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ Z  G9 Q0 U7 W
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # u" I8 t4 n- v7 g8 o
  478.       }
    + ~9 h) c. c: U, }% g9 z$ d* x# `
  479.       else# \. z( n/ d) G) P" P
  480.       {
    $ t: ^5 Z0 W: }, M
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( ]5 s% _. C0 {: x; j- L: S
  482.         strRegsName=DEFAULT_REG_URL;
    2 z  Q% j) y# L- T7 g
  483.       }! M( \( ]% I+ A; @
  484.     }( o# P0 z) w8 A: T! B  x
  485.   }
    . l/ @- ]; c; K( o
  486.   return true;1 b, |) J9 e6 G; s- u7 U. o
  487. }5 F# k( L5 \3 s; ?7 P2 p/ Q
  488. - j+ N. q$ T# k+ b
  489. #include ".\ZLib\unzip.h"
    & |$ Z$ U% {8 c
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);7 H/ m8 r5 ^) Q
  491. /////////////////////////////////////////////////////////////////////////////
    6 ~$ M: K, u! `' B0 B$ w5 f
  492. // CRevAppApp initialization
    1 f' ?5 Q; s2 t
  493. 4 \5 q  ^1 P7 E0 J
  494. BOOL CRevAppApp::InitInstance(): H" R0 m1 [4 \( o; R
  495. {$ e3 v" J+ |' Y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    7 _3 C, S: i' _; Y# W% y7 z+ x

  497. $ _- O) v+ u" \7 Y7 t
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);: d" Y" A" P: _' [
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))9 h5 y2 @4 j& A: F
  500.   {
    , Q$ j& Q+ ^& E
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");' A) R1 r) Z  z( U, V& ^
  502.     GetPathFromFullPath(szPathTarget,szPathSource);, r  w1 J' D- J, ]& T* y$ H( y
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    : h5 c# E& K8 l( O3 a
  504.     {& m1 n+ J( a. x# ]& m0 p. q
  505.       strcpy(szPath,szPathTarget);
    4 [  U6 `. m) U: u' Q6 T* U3 H
  506.       SetCurrentDirectory(szPath);
    ; r5 I. ?7 X: o3 g) @
  507.     }) z8 _, v% k9 ~, a6 V7 p
  508.   }) x5 ^( k/ b, c% B2 l5 J* ^
  509. #ifdef _DEBUG1 H! r0 z. I, R
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 _5 ~+ B* R; k- m
  511. #else7 y  F9 _, s$ Q" p3 D
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- ~: a! ?2 A0 O& D+ `. L  u: z6 I
  513. #endif5 i# t* s1 T, t/ u
  514.   {1 d0 \+ y9 T; T5 `
  515.     char tempFileName[MAX_PATH];
    3 k! }' ^/ c( W5 y: T2 F
  516.     strcpy(tempFileName,szPathSource);4 F0 Y# r4 Y( i( Q% i) k
  517.     tempFileName[strlen(szPathSource)-12]=0;2 {2 ]  g% W8 f0 F* y" S
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    : Y8 n; L5 c* R9 G4 s
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ; n6 A& A0 y/ F( O3 f( a
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);% |2 P+ |9 P9 @" @
  521.     return TRUE;% u2 |. C' }, J( m3 L1 B0 C
  522.   }5 h& u" R5 @/ S8 s' _
  523.   // Nuke 0118: Delete run.exe
    7 t3 ~% V. }. w1 @( n' }7 J& p
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
      `% m/ a7 F, Z+ {; {, M+ I
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");! F8 H* h6 ]7 a
  526.   if(!ReadCfgFile("Config.ini"))1 U2 j. [3 l( K$ X+ V
  527.   {8 c  F/ h/ j% P  Z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);$ \) X# b3 J# q7 d
  529.     return TRUE;
    2 C4 `* x* m3 R
  530.   }9 n) G7 e0 {# u* }" ^
  531.   HANDLE mutex;
    , O/ j' O0 M  V/ P
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    / p: K* p9 T, M6 L
  533.   {( T+ B4 U9 k* I0 ~' e5 j5 ~
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    / @* G/ S4 B. v1 c7 _
  535.     {
    / ~/ q" d, ?# u2 U
  536.       CloseHandle(mutex);
    6 R/ L) b9 c$ r9 w9 V; B1 o3 g
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);# }$ ~- M3 H8 u9 f* Q
  538.       return TRUE;
    0 W8 b6 q% J% t
  539.     }
    4 c+ @* b5 O: w& G
  540.   }  + O' c2 }$ _+ t/ u7 k6 r
  541.   CloseHandle(mutex);0 P6 _2 i: P* Z! I3 h3 i

  542. ( `+ r' h' k& T+ @  m0 j0 {
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    , q- x' k, }8 k% g  P

  544. 8 m% Q6 O4 o& h7 ~2 P9 r3 T: a# R
  545.         AfxEnableControlContainer();
    + p) f* v9 d% s2 b5 N3 X+ R

  546. 3 K& {7 U- }& N9 W- F9 G0 K0 V" U0 T6 l
  547.   bCanUpdate=FALSE;
    5 |0 c- n2 U/ d1 I" l$ y  X+ p+ Z
  548.   dwStartUpSteps=1;
    + [) p1 `! U) T" o0 g9 d# v( L5 m! Z) I
  549.   dwProgramState=AP_NOTHING;4 {7 k8 d, E# u; l
  550. 3 |9 X. J9 @1 P0 I  A9 J& Y: Z1 y5 S
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);# d9 v6 |% _$ }8 w$ U1 u/ P
  552. % W% _: G! Q, Q5 S% ^* P
  553.         // Standard initialization
    + b4 z0 u9 V7 `0 a+ B
  554.         // If you are not using these features and wish to reduce the size* q9 ^9 V: k8 i, S
  555.         //  of your final executable, you should remove from the following
    $ D6 L/ N1 t+ @% n5 T5 U9 w
  556.         //  the specific initialization routines you do not need.* H% Z( x8 l. I
  557. 8 r# U. M- Z% b- t) O
  558. #ifdef _AFXDLL
    + e4 g) z# T3 c; o$ i9 q* X
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL4 Z6 t! ^6 @: j7 V' x9 x& E3 a3 `
  560. #else3 d5 W3 v1 X& A1 N0 h
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically4 D# H3 N+ ?5 C% K
  562. #endif
    " Z# R4 c8 t' \; t2 x, [* E
  563. 9 J6 m3 ]7 ~! A' D5 A4 S' Z" E
  564.   dlg=new CRevAppDlg;, q/ ]0 t; s4 D& Q
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    $ Q# |: C! o; U# z. x& [- S
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ' V" U. N' C, n% ~1 s
  567.   m_pMainWnd=dlg;
    0 N: x& h1 h& q8 n+ T
  568. 9 i3 b+ \6 Q# w% @  Y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);2 ~5 R& [  J+ ?. h
  570. 9 u2 w- q; @0 G1 d, g- U
  571. //  GdiplusStartupInput gdiplusStartupInput;
    0 V4 Y9 s9 H, i1 {
  572. //  ULONG_PTR gdiplusToken;; @, [# c) z6 X# u1 W% g5 y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& ~3 Z7 {7 |4 I. `1 e* k7 B: z+ }
  574. # I6 x$ Z  _- H7 K5 X0 Q( i
  575. //        CRevAppDlg dlg;$ l% n) u+ J- n# [0 y
  576. //        int nResponse = dlg.DoModal();
    ; b: a' r0 u& x
  577. //        if (nResponse == IDOK)* Y8 e/ k3 ^% [' E
  578. //        {
    ! W4 F5 @, d& Y6 }  G! ]# p* d
  579. //                // TODO: Place code here to handle when the dialog is: C4 b6 _- ?  Y* c0 y2 P
  580. //                //  dismissed with OK2 g9 P4 C" [  z1 v7 f3 S' R
  581. //        }
    % _$ N" G. M/ _9 @/ ?
  582. //        else if (nResponse == IDCANCEL)4 I4 }9 R1 W* y1 k; ~
  583. //        {
    % w1 X" f1 m" C' u/ T6 m
  584. //                // TODO: Place code here to handle when the dialog is
    ! Y  O& g; H/ Y- ?! Y) N# R
  585. //                //  dismissed with Cancel3 Z. a3 }$ Z7 O) Z/ l
  586. //        }
    . i# o  ^- q) o" B. c' c: j
  587. / f7 n- l: o7 B
  588.         // Since the dialog has been closed, return FALSE so that we exit the/ ]8 _& ?" y' O3 {, ]# o, O  H
  589.         //  application, rather than start the application's message pump.
    ) @7 E! H# H$ q
  590.         return TRUE;& _8 `$ T- @" J2 `/ N
  591. }3 x+ m+ |, w0 \8 K! S' C
  592. 5 c5 Q. v7 H$ w2 z& I: `1 F+ d2 k, a7 a
  593. char *CRevAppApp::strtok3(char *pSource,char *token)  H5 K& }& f7 q2 Z
  594. {
    8 c! {) A% i7 S# E) a$ C& g8 c
  595.   int i;
    & f: G# s: ?* }
  596.   char *szRet;
    0 u, U* d( ]. y. _9 p) ~

  597. ! c% W( ^0 V# j
  598.   if(pSource) { itoken=0; sztoken=pSource; }3 E+ M( @) u; p6 B" u# H: Z1 n" n
  599.   if(sztoken)
    , z; C+ |. {4 o
  600.   {
      z, I" O& E; K1 F2 f$ [6 K1 H
  601.     szRet=&sztoken[itoken];0 s7 f" S3 S, p
  602.     while(sztoken[itoken])
    1 `: C( l5 L% ?) [  Y
  603.     {
    ' v) {+ R. {/ u( }1 U
  604.       for(i=0;i<(int)strlen(token);i++)6 x8 W4 z" q6 S5 }4 a
  605.       {. l5 \3 j4 M; s% l# ~- J" S
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    0 b% N( A  I5 i/ x
  607.         {$ @3 C& {* D2 C/ s# B$ ~3 I
  608.           sztoken[itoken++]=0;
    4 j$ R4 z" B7 M/ X! H% L7 A! w
  609.           sztoken[itoken++]=0;
    0 s$ b- h, @2 Z& l5 }
  610.           return szRet;
    * [7 c( l9 m, n' i
  611.         }
    * ]% [/ w, S* Z- ^  u" I6 x
  612.       }7 L: h) M5 J# H- M5 Z
  613.       itoken++;1 _8 T$ ^: H: D6 @/ \3 O
  614.     }- C$ u! l, {' G: {5 s$ }  I4 q- ]
  615.   }
    : M, F+ q" K: E' U: M- N  s- o
  616.   return NULL;
    & E6 [+ V, L! c! D( a0 W( |
  617. }- N, q9 R- \! A" i4 ?3 S' a# v% f
  618. - c! p6 y3 I! X
  619. void ProcessProc(long Total,long Current)% M  C. _% r* L6 P% U$ K1 {
  620. {' L8 N# o* z  w" x, t
  621.         MSG msg;) ?7 b- Q0 p5 L* Q$ m1 S# D
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);" t. h7 s3 w: M; |& y: |/ q; J/ E
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));1 m2 q! t- G* W* H; P# s
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 U0 ~& k: e9 {0 D
  625.         {9 R2 Z, P9 A# U( a/ a. P
  626.                 if(!GetMessage(&msg,NULL,0,0))' J9 x4 [1 K( y3 m# a  n& l$ n
  627.                 {" p5 E/ D% _: b& v4 B1 x3 N8 V
  628.                         return;
      z6 T& L$ ~2 q
  629.                 }' p4 Q# G+ y  f. f: r, C6 g
  630.                 TranslateMessage(&msg);
    4 z" x* u  R# I% \. j, @  ~
  631.                 DispatchMessage(&msg);+ p$ e) ]5 u" E# |" M  j
  632.         }        2 O0 F1 X8 v$ {
  633. }
    , A/ C, x5 v" @3 F! e1 W3 W
  634. - N1 ~2 A, A+ L: [' y) h
  635. BOOL bFirstChar=TRUE;) x( u! r) o8 J& t5 ?" w3 m

  636. & N3 G  u" m% g1 [
  637. BOOL CRevAppApp::OnIdle(LONG lCount)3 ~: U7 N0 U* v
  638. {& `; J1 z+ E! X; Q$ V, A
  639.         // TODO: Add your specialized code here and/or call the base class) u5 W4 }/ S7 s
  640.   switch(dwProgramState)1 O2 j( j+ |  r5 y$ Q5 Z. v& v
  641.   {+ D+ _6 o: [" P0 |
  642.   case AP_NOTHING:
    : F  B" x) w' `4 q
  643.     switch(dwStartUpSteps)
    ) h, v- o8 c% [  X7 ?+ g
  644.     {1 B' s" u) S& W$ Q6 X$ ~
  645.     case 1:
      z" z' w: w& a- p' g# Q
  646.       {
    6 Q- Y) @8 N7 o" Y( A5 l4 U- w' j" _8 b
  647.         int i;
    3 r% f! P; B/ y+ `
  648.         CDC *pCDC=dlg->GetDC();
    * n$ N, G6 _: q0 u1 Z
  649.         HDC hdcwnd=pCDC->m_hDC;) L! ]7 J$ Q6 _8 x, z; a- k
  650. //        Graphics graphics(hdcwnd);
    2 |$ B2 H: P& i( o' T1 X: Y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    1 I1 c, z8 J$ m0 w( D* V
  652. //        INT iWidth=bitmap.GetWidth();! C. q: M  Q! [7 a/ l, y- B
  653. //        INT iHeight=bitmap.GetHeight();) V" @( [) Z' W; ]
  654. //        Color color,colorTemp;
    0 Q. Q/ K4 B6 W) i1 z) T4 D8 ~
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% p# b' @/ S9 [' M# W0 k! S( u
  656. //        {
    # q) V( [( E" p* P/ o) ~7 L5 l( u, @
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    " i5 |3 b, H' |& t% F( l9 |2 f: v
  658. //          {
    , E9 W/ n* q% h! @
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    , _5 O7 D$ J7 d- y
  660. //            colorTemp.SetValue(color.MakeARGB(! y; t# \( k6 B' T
  661. //              (BYTE)(255*iColumn/iWidth),6 P+ P# V( i- G
  662. //              color.GetRed(),
    6 Z- t  }! `2 a9 x* ?2 l# e
  663. //              color.GetGreen(),- `4 U# F" b/ n0 K. g+ Z
  664. //              color.GetBlue()));
    / h* u$ @4 [( L/ v3 y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);( B$ y! g6 x+ B, U
  666. //          }& }" R$ V; {$ ^+ A
  667. //        }
    & z. Q4 l5 @( P
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 I. t8 u" j0 c# _2 a9 A
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& p( Q  X6 L: y: q, ?, v4 _
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    & i& ?5 d# l  J! B9 `
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; o  u' z; @! i* Z3 L9 C
  672.         for(i=0;i<240;i+=8)
    $ |" `8 A+ s( V# S. a& R- Y( S
  673.         {  w5 @* ]2 w2 r$ W; r4 K
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 n& S+ A% l: a3 {: ?
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: L# g5 h/ @7 i; b
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ H7 w+ u. o1 Z! n
  677.           Sleep(33);; u8 I! q9 K, [) X' x
  678.         }  _# ?# w, N6 v$ C
  679.         Sleep(1000);( N, O' f/ ^6 W6 q  c' ^( j% x
  680.         for(i=240;i>0;i-=8)! q7 h& J$ j0 f7 ]  c. I0 P$ o
  681.         {6 `8 B; E1 W0 b2 g0 a2 C
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& h4 z  W' _1 _: [. _6 M) B& [
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ i0 Z1 g" `$ R! S* j" ?
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 p% s& o4 X$ P3 U! `9 X+ ?
  685.           Sleep(33);
    5 X! M1 r! l. H4 z9 P+ a
  686.         }0 n: N  u: X0 N( g
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    . M$ H) w: W% ]3 P% v  n' X7 g0 H
  688.         dlg->ReleaseDC(pCDC);
    / I7 J8 m' [( D& R3 \
  689.         DeleteDC(hdctar);
    7 h4 H0 m" B8 h( L# T: S/ M4 S9 k
  690.         DeleteDC(hdcsrc);
    % L) J) ~$ K8 ~0 u4 f5 }+ q
  691.         DeleteDC(hdcorg);( k8 L4 J( X$ j9 o7 I7 C# i
  692.       }
    / G9 y. ^2 ~+ D$ B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    % u4 c& a; w+ d4 t/ }0 J
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    : p6 e) L- G+ f+ \: D
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");- \# W2 w: b8 l- q( r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");  m% S, h* t4 `6 f- c( @& d
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 d1 s2 P8 }; P
  698.       if(!Dn.Connected())# ?8 {3 U" q% A$ s0 @9 F: k
  699.       {
    ) l3 q# Y( T9 h4 D: L
  700.         dwTotalFiles=1;7 k: Z  G+ Q" m1 g
  701.         dwDownLoaded=0;( [( R/ {3 o6 r, n: N
  702.         bSilentStep=TRUE;' A$ P( R+ D  @$ u1 k7 m- Y8 E
  703.         bCompressed=FALSE;2 `/ x, w# w0 S5 {
  704.         strExtLocal.Empty();
    4 P% j9 p3 o8 G/ D1 w7 F
  705.         strFullName="readme.txt";. k: d6 d" q3 T5 A3 D
  706.         dwProgramState=AP_CONNECT;/ j7 P$ g1 M. _1 R( h7 c0 c
  707.       }
    " B5 B7 F4 j: d0 n  c8 r
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();9 N# o. T! |5 Y) L& @! p- h
  709.       dwStartUpSteps=2;
    ; ]3 {' Z, N6 P: Z' }
  710.       break;. V; c/ ^/ P4 v4 u- R2 F; @
  711.     case 2:
    ( o1 R. g. T0 b% |( c0 v% W& j
  712.       {
    - X" \7 n# D/ c' s) T& j
  713.         int iEOF;$ c9 Z8 K3 y( H! \' w* [
  714.         FILE *fp;0 ]6 U3 g7 s5 W6 q8 V
  715.         char szString[512];
    9 B" U9 O6 R* h' J
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' d3 g: A' }$ P  J
  717.         if(fp)2 i/ l# h6 `& Q5 i
  718.         {7 X3 H: Z  v. `  ?! s
  719.           do3 J$ Z9 U" k, t3 W9 |
  720.           {1 x8 `/ n9 {8 d# _  u
  721.             iEOF=fscanf(fp,"%s",szString);
    ! ^, }7 h; N( A5 P
  722.             if(strlen(szString))( y1 K6 D3 ^* M( H
  723.             {
    7 z# j# _' s3 o7 M) _
  724.               if(bFirstChar)
    & a5 D4 M/ _$ S' A- T2 ^" [+ D
  725.               {, I9 X' s$ p5 f( ~  j
  726.                 bFirstChar=FALSE;
    ( @9 Q- P$ F0 Q* M3 G  F" u7 w
  727.                 bConnectIsBig5=FALSE;
    . [2 ?& a# [' N
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    - Q; E5 i2 y' w$ B4 u7 P( y
  729.               }
    / ?6 Q3 E4 {9 }
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));4 a5 U" X  d1 e7 k
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));, h# h" _1 H& b' B5 P- ^1 ]: ~
  732.               dlg->m_ListText.AddString(szString);; ~5 ^& W0 L2 D  B7 [, p( h
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% e$ K$ |# h+ F
  734.               *szString=0;
    3 h* H) c( S0 E+ k6 J' \
  735.             }
    , e3 t( `- U, `  _
  736.           } while(iEOF!=EOF);5 [  _  K) \7 V' T# I
  737.           fclose(fp);
    ( L; Q8 \5 r% ]4 H1 J  t
  738.           unlink(".\\DownLoad\\readme.txt");
    / U$ m9 B5 C1 q7 G  r
  739.           dwStartUpSteps=3;
    ( m/ [6 l6 v/ h7 p( ]* d. i
  740.         }, z. t$ }% C: ?8 q" ?/ x/ \6 p
  741.       }+ a. r9 p/ \- W
  742.       break;
    - n2 J( a/ _8 `9 M. p% S2 e
  743.     case 3:
    # L5 ^, T; P1 V, E# w; y! B( I
  744.       if(!Dn.Connected())4 I" M! D. ?8 g; ^  |7 C
  745.       {
    / f5 H6 K; j: t; X) {6 h  c4 a2 w! ^- u2 i
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    4 s( h. C" @$ y9 H8 h+ q
  747.         dwTotalFiles=1;
    : v8 e! Y; x% Y
  748.         dwDownLoaded=0;
    + z& {* i7 b& U* h/ U1 K
  749.         bSilentStep=TRUE;
    " e0 u/ ]2 d+ ?6 `! Y
  750.         bCompressed=FALSE;
    / ]& a1 |7 ~; g7 F  J4 x$ B
  751.         strExtLocal.Empty();2 e$ [! c/ m9 U, e
  752.         strFullName="checkversion.txt";
    5 {3 @( I! y; c! b( Q
  753.         dwProgramState=AP_CONNECT;$ e' U( b; K9 J, ]3 x7 E" ~
  754.       }
    1 \) a: i5 P) x4 S
  755.       dwStartUpSteps=4;
    ! H: ]+ K2 Q; [/ q! a3 i0 Y
  756.       break;8 z! K1 h  a& o
  757.     case 4:) o+ S6 {: v4 w5 h- e9 B
  758.       {; N. J( ?6 j2 k" U, l
  759.         FILE *fp;
    ! R9 Q6 l, f  y. l
  760.         char szString1[128];5 }6 J; c2 J# F$ E9 r; S
  761.         char szString2[128];4 z0 o+ r  k' v; {* `$ j4 o
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 u; {0 R2 u6 R7 S: l
  763.         if(fp)
    6 s* V7 ]# _, ?1 j  u: P
  764.         {& m+ @  Q9 p# H5 P+ ~8 H# E
  765.           fscanf(fp,"%s",szString1);
    ' u- ?' n# ]3 y5 |
  766.           fclose(fp);4 R: `' a; e8 f
  767.           fCheckVersion=atof(szString1);+ o: N1 d* N% s  A* ~5 c9 b
  768.           fp=fopen(".\\checkversion.dat","r");
    & o- {9 v0 [! G: d0 s8 d
  769.           if(fp)- R6 V& M3 G2 [* C5 z- z* n& x
  770.           {
    ! Q, \  s, [/ b
  771.             fscanf(fp,"%s",szString2);+ [" N/ b" R% l4 Q" c( V
  772.             fclose(fp);
    * V- H$ [/ @: m% h  H# B. P9 Z# r
  773.             if(atof(szString1)!=atof(szString2))
    5 m, ^# J& c: J6 u
  774.             {3 ?) x3 U3 i+ ]/ I1 R0 Z
  775.               if(!Dn.Connected())
    $ G8 n1 E, q& c2 S: v
  776.               {
    3 y5 X. ^6 L: L) h6 e. H
  777.                 bFirstUpdate=TRUE;( ^9 C: f$ p! W) W
  778.                 dwTotalFiles=1;8 Z$ j! m6 p  G$ V, x6 r2 V
  779.                 dwDownLoaded=0;! K& P0 t0 |. t' @5 T
  780.                 bSilentStep=FALSE;
    5 W* [7 B9 n1 X3 O4 P  m
  781.                 bCompressed=TRUE;
    6 M8 Z$ e4 X3 `2 x7 \) I; M( P) X5 ]
  782.                 strExtLocal=".\\DownLoad\";
    + H" V& O5 T) o
  783.                 strFullName="update.txt";
    # w. j2 v4 U: z& m, B) a  O
  784.                 dwProgramState=AP_CONNECT;
    ! Y; s* w( u. _! Z/ l
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* S! q* U% A6 U5 t* }, L
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 k  r; m# L8 H2 j% A6 h
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 L& t5 j# S* }$ }

  788. 3 I) N- x9 G9 N5 }6 J4 P$ R
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ \/ ]9 w: P( c% u. ~- ^$ c
  790.                 unlink(".\\DownLoad\\checkversion.txt");. g8 d( y, L& V# f" e! w0 _$ x
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)8 X- p3 [- [- g+ S6 W2 E
  792.                 {
    0 G7 `: v  o4 H* a; E& A' w4 T
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");" i1 ~9 }/ I5 u% I: X7 M3 i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % Y4 F% W8 g- S  V$ C
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    9 N4 W8 m5 \/ t' c& j
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& g2 K$ T4 q1 T# Z
  797. - J& Q  [) b  V. ~+ h+ k9 i
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 S* ~! s$ w1 g4 r0 S
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # N+ A( [+ A7 f* v$ I
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 g" ?# {% Y- L- N5 l
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # Z- Y1 P" n) p3 R' m" S2 y
  802.                 }6 G. D3 d& k9 q/ ]
  803.                 dwStartUpSteps=5;) L* o5 v# y/ n1 l5 s7 B
  804.               }
    " h' L9 ]+ s1 j
  805.             }) p4 m( i4 n! n7 _0 l- ?- i0 D5 _
  806.             else2 _9 [3 e, [/ F6 z4 o
  807.             {
    ' D5 A" S, x8 X! l' C% y
  808.               unlink(".\\DownLoad\\checkversion.txt");
    6 d( V7 ^; D) b8 `7 {, Z' l. _
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- ?0 j% K* z& U$ W. O+ \: L' g6 G) ^
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    " d1 b; O5 ]' t3 v
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 }3 [0 ?( g: a; x+ F2 [" c6 ]) ]
  812. ; ?# b5 Z: M- @. {2 [
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 [5 F4 l( d! ?( R2 v
  814.               dwStartUpSteps=99;
    ( S  `- W( B1 s7 \/ f3 z, H; C& k
  815.               bFinishUpdated=TRUE;
    + }; u. A( I* X( ]$ y! s; n
  816.               bCanUpdate=TRUE;5 D1 h$ Q7 V8 f. Z2 h
  817.             }
    ! x: `+ Y& _7 \4 N! r
  818.           }
    ' Z) O4 G' _2 D! F$ i8 h) @/ k2 ]
  819.           else7 X' C/ ?) q1 y
  820.           {+ W6 W  L! a6 S/ Q. O
  821.             if(!Dn.Connected())! X. d  A! k- l# M# F$ c  S/ `. \/ ~
  822.             {4 ~0 [/ D2 q( F  H
  823.               bFirstUpdate=TRUE;
    - u' |7 W* s6 K# N
  824.               dwTotalFiles=1;8 f- d, {5 |; [; _
  825.               dwDownLoaded=0;
    3 [: E) k/ {8 d8 Z: ]: o* x; E
  826.               bSilentStep=FALSE;* k0 A+ S" |/ |9 K! o, N
  827.               bCompressed=TRUE;2 G! t9 r5 h$ E# x+ y( m
  828.               strExtLocal=".\\DownLoad\";
    1 O: ?/ r3 o7 e) X6 ?7 |
  829.               strFullName="update.txt";
    . U& Q) V0 j/ Q, I8 J, C
  830.               dwProgramState=AP_CONNECT;
    7 U- N& @8 x  g* @3 x' g& u. D+ r1 X) H
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    3 i3 w$ s; R; {- V+ ?$ k9 G
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " W" O( |( z# y( P: t+ {: T
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    0 {" J0 C+ ~- p/ g; c& ^
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . F' I1 O2 h+ V0 k
  835.               unlink(".\\DownLoad\\checkversion.txt");
    - Z; e6 \1 _2 \6 h/ b
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    + F. G! T1 Z) Q- \
  837.               {7 |! p% m5 i; V' \$ I: k6 ]
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");! O. U2 M! j6 F' E
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ; }9 R$ h( K/ g1 s+ N
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");# [9 x4 P- w7 I# r3 s7 ^
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " R4 p1 n' A- F4 a& t
  842.                 * s4 s" R5 O# ~9 f5 U( c! Y8 m6 q
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. z4 O. G+ {8 i) N
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  v: }8 p2 C( M- I
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");" r/ I! j9 u; f! M. R
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. C+ v! B7 d& p$ M  Y9 y
  847.               }
    2 W0 M1 q2 o5 S* c# C: {1 Z4 U
  848.               dwStartUpSteps=5;3 h. U2 r: y  e1 E1 Y3 U
  849.             }$ Z# _9 y% ~! J& @- X& b
  850.           }- \7 F. d% [5 ~! p, i! Z& P
  851.         }
    * e; k8 J. y* R
  852.         else+ j8 }: P8 {2 s5 F# J3 m
  853.         {* N& E" c, h* y8 a1 f8 F' I& }, @4 i
  854.           dwStartUpSteps=3;
    0 d0 @2 q7 U% h; ~
  855.         }" y$ b2 E3 l8 \" ^6 G2 E) Q
  856.       }
    + z3 E" z. @! I. c5 |: `: b
  857.       break;& q# A" p& W3 O# y, @* v. y
  858.     case 5:
    % i6 V5 o5 M) c* G4 ]( M- L. e1 @
  859.       {
    1 ~+ w& @+ F% o7 ]: ^9 l, r
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)3 d6 ~& r$ N5 s  s8 N
  861.         {
    $ ?* l  i& X& A; a) H
  862.           int opt_overwrite=1;
    % Z, R9 `$ n1 \: s" s
  863.           int opt_do_extract_withoutpath=0;
    4 L' [' C$ V" r) e4 v5 e
  864.           unzFile uf=NULL;: O# ]$ m5 p0 Y3 D1 h

  865. 1 h1 ]$ s& G7 V
  866.           uf=unzOpen("Wsa.zip");
    . ?7 r' [/ k8 Z' l& w" K
  867.           if(uf)
    ( H4 ^" `; s/ a# g
  868.           {
    8 e8 e; S# Z. Q+ H* v5 n0 ^" @+ ]
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);# F( C3 W) Q$ {+ Z* M
  870.             unzClose(uf);
    7 F' R: ]- S8 H# L  H- T; }
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    & H( X) j2 V0 j4 B. g7 o
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    7 S; G4 r8 S+ l
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ) `) s4 [$ H8 r6 Z& Y2 i- t
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 z5 E- b+ W3 k3 X$ r2 x( h7 h
  875.           }. b1 w' M) P& i9 f1 `
  876.           DeleteFile("Wsa.zip" );# V+ H  z, i% C" H( @, P) T) P
  877.         }
    " u% l, }- Q$ B( X9 R) ~  X

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

) i8 J& J9 M- ?, f
! e- m0 z% z6 C6 Y. S1 X

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-11-27 08:02

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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