找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
- }( q8 F& g" d0 @% z+ }- N0 \
  1. / RevApp.cpp : Defines the class behaviors for the application.! e* r* N( o" h1 Z
  2. //' d. \. h2 ^# q7 k6 v6 t* t' v, j

  3. 8 Y2 E: Y  N- _6 X
  4. #include "stdafx.h"7 {5 |' S  J* k& N3 H/ N- m/ N. ~

  5. # B9 j5 U" l  a
  6. //#define UNICODE
    - O) Y" _7 i  o& Q! S2 k
  7. //#include <gdiplus.h>- `3 z" i0 x! F8 J7 }* S5 i0 t  x
  8. //using namespace Gdiplus;
    - ~) Z7 a5 p9 t0 e% ?  A
  9. " n( U' x$ ?; I. R' Q
  10. #include "RevApp.h". h) d9 I* L3 ]7 @* ]
  11. #include "RevAppDlg.h"
    * |6 K3 m3 r: @+ T
  12. ; c9 G5 j( n' B& [" P/ H
  13. #pragma warning(disable:4786)
    6 Q1 h! K5 E4 V
  14. #include <map>
    % \  E* R& C9 u. ~% C
  15. #include <list>
    - Q0 i- e. u& o( f: v
  16. #include <direct.h>
    * x( r1 h7 B& {/ E1 u

  17. 8 r' s. G, \& ?1 U
  18. #ifdef _DEBUG  v' c5 h, b; l8 V
  19. #define new DEBUG_NEW
      j4 R  {# L+ [! `& A! x" J
  20. #undef THIS_FILE0 v* b/ ^- }# H1 |& c7 Q' T! A' x- ?
  21. static char THIS_FILE[] = __FILE__;
    ; K9 i3 l! Q0 A
  22. #endif, m) R  y! h0 H8 M
  23. #include "SkinResDef.h"
    4 N/ K, ?8 I/ _  E! H$ v
  24. #include "ChangeBG.h"
    0 I1 O8 h4 V) X3 ]
  25. #include "AFXINET.H"
    0 |+ i, Y5 P7 {$ z

  26. " r& @6 _7 y6 V$ L5 p( b% N+ n+ m! d
  27. #define TRADITIONAL_CHINESE 0
    3 \* q! _/ h! s; h
  28. #define SIMPLIFY_CHINESE 1
    " l4 G0 e1 u) `7 i' X% X
  29. #define ENGLISH 2
    . W/ `2 ?0 Y! R. [- B/ R; a
  30. int m_iLanguage = ENGLISH;
    3 g8 d2 T0 o9 W; _8 o
  31. /////////////////////////////////////////////////////////////////////////////
    ; ~; D9 d+ J; q# v  |& H$ c) [
  32. // CRevAppApp
    / ^- s! y5 M8 E8 t
  33. / p2 X: r2 q/ x/ b& I; W
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    6 Y! {; Z4 H& S
  35.         //{{AFX_MSG_MAP(CRevAppApp)+ t) v& _8 B8 V/ w/ p) \! ?
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    * r: M7 U5 s# e" U* H9 R
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    , ~- M/ L4 e0 R7 F" \! H& D
  38.         //}}AFX_MSG
    , y# x6 k4 h3 Q5 y9 l% C) n
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)2 G; Y% d3 S. c8 V8 R
  40. END_MESSAGE_MAP()
    ' c( q- l" x' s" x6 K
  41. 2 v, z; q- t! h) o
  42. /////////////////////////////////////////////////////////////////////////////- S. H9 q, V0 r! _4 ?$ y0 w/ k
  43. // CRevAppApp construction
    : `8 L- d& P+ k' ~8 l6 T
  44. , D* C! |0 }0 u. h
  45. CRevAppApp::CRevAppApp()- r' K# l( N. Q8 _2 q: X7 z
  46. {0 e" o/ `$ y( t' R& S
  47.         // TODO: add construction code here,
    3 g* T$ y3 _: ?5 r, j
  48.         // Place all significant initialization in InitInstance
    3 P* L4 m: Y  I0 E2 `3 M, V2 q/ W
  49.   bDisplayIsBig5=FALSE;
    % {% [+ \6 _) ~
  50.   bRestartUpdater=FALSE;7 y' i+ G2 L: O3 ]
  51.   bFinishUpdated=FALSE;
    % I; S; Z+ u. c2 ]8 x& g
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    8 @$ t6 L; r3 L; p
  53.   InitChangeDataBig52GBKS();
    , _# {+ D1 ]9 P& U1 \5 r
  54.   InitChangeDataGBKS2Big5();
    * s) b& x2 G) z2 V7 ^% T/ A8 x
  55.         //
    $ Z  A" v# x! m& t( z' Y! w; L5 ]
  56.         bClickRunExe = FALSE;
    ) z0 I, ^% m2 `. y- z4 W
  57.         //. }6 d" j3 k; o
  58. }/ T  [- I* T" j6 t

  59. . ]0 B6 }% J8 G
  60. CRevAppApp::~CRevAppApp()" I! u$ }5 m: I0 m: c! L2 O& ^/ m
  61. {! T# ]2 O3 {9 }7 R9 \8 f: y
  62.         // TODO: add construction code here,
    ) I  |9 l% y/ _0 Q6 L  x- D
  63.         // Place all significant initialization in InitInstance4 j. P# Q' Y" e& U7 }# r" I
  64.   EndChangeData();
    ) _- J+ b) l, E; S
  65. }( r) a. R) q' v( l: I" h2 B2 k
  66. ' W. p/ m! y5 |' _( k1 E3 @
  67. /////////////////////////////////////////////////////////////////////////////
    2 X1 R; r" t5 V) ~) z9 |
  68. // The one and only CRevAppApp object
    + \& U, g( K. @1 b' L2 p0 L8 v
  69. 2 s" W$ @  i* o  k* _. m
  70. CRevAppApp theApp;, m$ X2 \& @3 h% h# Z  f4 j
  71. 3 _4 U6 ?3 E8 m, l3 Z! v& w: p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)" v) ]; i; U5 ?! R2 R, Z5 R+ n2 r1 U
  73. {
    4 {' s) M: j5 _- |8 Q$ O+ H* ?
  74.   int iEOF=0;8 V, X& a7 o, b! w( T
  75.   char szTempName[MAX_PATH];+ J- g2 ?8 C/ T& M# {% D
  76.   *szFileName=0;
    / \+ x- R- Q* T" s
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( F0 }. v9 Q: u: o$ }
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')  `. W8 ]4 c" P. X; ?
  79.   {
    , x& t9 n1 [) F
  80.     strcpy(szFileName,&szTempName[1]);' x* [2 ^% p' u  K) `2 W. k1 N+ V$ B
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ) {: l& c1 P3 _. M
  82.     {
    + I4 u, X" M$ c. T
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ' B9 [; c( u* t# o
  84.       strcat(szFileName," ");- J: f; e0 B4 h" u' T" E3 r
  85.       strcat(szFileName,szTempName);
    ! a% D: g% N1 j) y0 u* V
  86.     }
    3 H! E. D5 r. J' Y
  87.     if(strlen(szFileName)>=1)  i- {- y: V4 V; a! A0 w) @% M2 Z
  88.     {' i' L) |* x; L: f
  89.       szFileName[strlen(szFileName)-1]=0;! U+ z: ?8 q% |3 Z9 h" ]' J
  90.     }3 I8 F! \0 s! j0 v  e
  91.   }- b7 l( `9 }8 W) ?4 L  q3 M, ^
  92.   return szFileName;2 T& c5 M" {( \( E; X! l" o
  93. }
    . ?1 t3 a; q5 B, i3 X& n
  94. / @! h% _7 N/ q2 D7 }/ ]9 [
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)% Q: m  A2 s5 F6 C4 i0 x; d1 N
  96. {
    * @0 |3 R8 w* ?' A' E
  97.   FILE *fp;
    # }) M# T! E. j) X" l3 k. y0 \! h
  98.   char *key=NULL;5 k# ~; k1 C' k0 E( k3 K
  99.   char version[MAX_PATH];
    ) p% L0 x6 p4 m" Q7 u7 w
  100.   LPUPDATEFILE file,olds;. n6 o: `7 d4 M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" M/ V) ?/ t* r$ O: g6 {& T+ y4 A
  102. ' b: V% e2 z1 v. k1 F
  103.   UpdateList.clear();
    6 p, V: a! W1 m8 |. c3 P
  104.   UpdateFile.clear();2 h. R  k; ?9 D1 Y4 C0 j; c% `" O. q
  105.   if(GetFileAttributes(filename)==-1) return false;
    & ]. O: s  n0 S7 F
  106.   if(!(fp=fopen(filename,"r"))) return false;  L; f1 L/ a3 [% ?! s+ O# V: b+ U
  107.   fscanf(fp,"%s",version);! Q3 `0 v* h/ }: j# A3 _# Z
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }8 R9 m# j$ a& l6 c( E' j: B" _
  109.   while(fscanf(fp,"%s",version)!=EOF)
    5 ~. E0 ]: j8 S& \0 G; A
  110.   {
    " I2 k+ j+ A. l1 p9 D# i
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 k0 `8 i- ]2 U8 G5 _
  112.     fscanf(fp,"%s",file->path);
    ' J7 b6 P7 _% x% t5 N
  113.     ReadFileNames(fp,file->file);
    4 u3 _, m/ S6 E- g* D' R! @
  114.     strcpy(file->full,".");. |' b. ~1 g# H+ g# [+ h/ F
  115.     strcat(file->full,file->path);
    ! M/ p# U1 o# d3 z
  116.     strcat(file->full,file->file);
    - x6 @' p" S0 z- `( G+ H7 u! e2 G
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ) Z0 _6 a. N9 d" ]4 v& ]
  118.     {
      J* V! t* V* Q9 N, I5 k, s
  119.       file->vers=(float)atof(version);, O, t1 j" ]* d# O9 V, [* }
  120.       UpdateList.push_back(file->full);8 y! l$ b% B8 b" w5 s) v: p
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));9 Q' ]- Z2 ]8 h
  122.     }
    7 R: {7 }) i7 K5 h. Y
  123.     else
    & z" ?% [; m( i3 g1 D
  124.     {
      Z6 S: o6 g$ o$ E. h$ Z$ x* T8 z( x
  125.       olds=(*p).second;% ~5 L: D8 p+ |6 ^* B
  126.       if(olds->vers<(float)atof(version))  R, t8 O8 ^# h
  127.       {( m! C& u0 o+ q0 t  N
  128.         olds->vers=(float)atof(version);( ~' ^1 J, O" d2 b, u% P
  129.       }/ \. T1 P1 b3 ?8 z0 v
  130.       free(file);2 C, X+ ]* s! q
  131.     }5 h! P9 e' M, u# [( R
  132.   }2 g, K& O$ d! I; u
  133.   fclose(fp);* s% k' e# s4 S. b7 c6 Z  L# w, o
  134.   return true;
      C/ x! }" v# c0 q5 h, P
  135. }. }% E; g  v2 ]9 l. L- d5 ?& l
  136. 0 e5 W1 O* r' t( K+ }& \
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! J1 Y# t4 H2 _0 x6 W
  138. {* K% X) I( I+ u, ?. q
  139.   TCHAR  szFull[MAX_PATH];
    ' z7 K* D: E" V: ?) K, L8 y
  140.   TCHAR *token,*inter;: _& M/ ~; f! O% u: y0 O
  141.   *szPath=0;
    7 T4 B& R# w+ R  C  S
  142.   strcpy(szFull,szFullPath);5 @$ _4 i; l* ]6 Q7 ?' B! y
  143.   token=strtok(szFull,"\\/");
    ; X# B/ Z/ y8 o0 J
  144.   inter=token;
    - n) x. U! B9 Z7 d. L, ^
  145.   while(token=strtok(NULL,"\\/"))
    + f/ W6 W4 ^1 F1 L* Q3 F3 h
  146.   {- z% f3 x0 B( l1 ~( v5 u
  147.     strcat(szPath,inter);
    ; }: [$ T2 t, ~2 ~7 i6 B1 w
  148.     strcat(szPath,"\");" X% K. Y: I% ^" Q0 X
  149.     inter=token;* F% }& O6 H" j& J% [2 e% x2 W
  150.   }
    , e6 u- n' T% n4 h
  151.   return strlen(szPath);
    4 z* s, f! t( @. ]! ]* K) J
  152. }; B3 h; ~! P5 B" I/ q( I; {, _
  153. 8 h% k1 R/ d& M/ [% M6 j
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)# l! ]1 D0 T, R" h& X
  155. {/ c. c$ ^$ E, T- o
  156.   DWORD attrib=GetFileAttributes(Target);
    3 m) ?+ Y. b/ n. W) }9 b2 X) t
  157.   if(attrib!=-1)  x' u( ~- i6 ]5 n
  158.   {0 q) g& b, g  e+ B
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    2 m1 ~; \* p- `
  160.     {  w0 r8 d- Q( ]( y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);  a" R* E0 `7 [( W, v5 w
  162.       SetFileAttributes(Target,attrib);1 N( X3 p& B  R
  163.     }' {- S, [* N( p, }8 X& d! u
  164.   }
      L$ |' [: N( k
  165.   CopyFile(Source,Target,Erase);
    6 C4 k: A) h/ J: y" z
  166. }
    1 {6 Y6 L! {! F! S. s3 z" c
  167. % F5 X5 J' y2 \
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . R% A; ?# t5 J+ C1 l5 j, U
  169. {$ T+ O$ V  a1 Q. Q* A4 }; L- h
  170.      FILE *fp;. D2 i- e- B# V8 w
  171.      char  szBuffer[8192];, w: Q3 ]0 U( f- s
  172.   va_list  argptr;5 c/ p* [2 b- m0 i

  173. + T- u7 R2 S  w  x0 b
  174.         va_start(argptr,message);1 y, ^, v2 ]1 u; Y
  175.         vsprintf(szBuffer,message,argptr);
    ' w: T- ~7 c& O/ ?3 j- w3 F- S2 q! H
  176.         va_end(argptr);
    8 ^% n! o3 j. v- }& L' Q# D
  177.   fp=fopen(FileName,"a");
    5 z0 y8 K0 L' h0 K/ {0 q
  178.   if(fp)) ?- h! A7 F: d7 E7 x& N
  179.   {( q; D7 U0 |" G; Z- H6 k7 o
  180.     fprintf(fp,szBuffer);
    " q# @4 W1 o) _7 t- L) j& n
  181.     fclose(fp);
    ( V0 I! L8 z% P3 @: f
  182.           _flushall();
    : e, h* f! b. a8 ]# a/ e4 E0 f& m
  183.   }: u8 ?: I1 B. V' c/ `# W5 E7 U2 ?/ x
  184. }
    5 w7 G& _" J, k0 W

  185. # }! n+ p" b. Z* F9 B. h  \3 i
  186. BOOL CRevAppApp::Fclearf(char *FileName)2 W' M' G5 f7 g' c0 w5 R; U- D
  187. {
    2 z8 u$ `' Z# `: A" C
  188.      FILE *fp;
    5 Y$ Z4 d) l8 n4 E, O* `
  189.     DWORD  attrib;* v2 n0 w8 ^+ q) R: M4 G
  190.   attrib=GetFileAttributes(FileName);1 C3 H/ K" G/ g2 G& w$ @
  191.   if(attrib!=-1)* k7 A: o& v2 t5 c7 m' |
  192.   {
    - R0 G* B. I# p) O4 B6 [* w
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    3 [9 d+ E7 X8 N3 s+ u  X
  194.     if(!SetFileAttributes(FileName,attrib)), i3 S8 ~* U5 C/ j, _1 I: [2 A/ Q
  195.     {! l' {* J9 I3 |5 s' |. a
  196.       return FALSE;
    + S. I+ c1 n  q# _0 ?5 X7 {
  197.     }
    ) A# Y8 y3 i6 t' T* Z
  198.   }
    8 I1 R" Q. M  Q+ {/ ~. x) x
  199.   fp=fopen(FileName,"wb");- J$ Q: @, Z8 ]; {
  200.   if(fp)
    + C. C  l! Y/ k# x) z! a
  201.   {5 Z. E, n7 v- Z3 t
  202.     fclose(fp);
    7 [" I5 A( [: W( ?
  203.   }/ x+ r2 C. g' k9 l: i4 c7 n
  204.   return TRUE;
    & s5 Z7 h1 c/ _( `
  205. }
    7 I+ ?( i) c# o* x) @

  206. / l+ ?9 n2 H5 Z' j! Q7 F
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    $ g, l0 z% q; k2 h% S0 N
  208. {
    * L- F; S" d/ |4 N
  209.   char filename[MAX_PATH];
    , ?7 V( F# R1 u% \# c' a1 R+ {
  210.   LPUPDATEFILE file,olds;' X3 Y4 u" o  }+ h4 h9 _
  211.   std::map<int,CString>::iterator i;
    , Y6 Z6 W- V4 K8 \
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! e" n+ U9 v  i
  213.   std::list<CString>::iterator l;4 ~4 Q( O' \! j4 a) z

  214. : A. V  t  P) g! z& ^
  215.   if(bFirstUpdate)
    7 |0 I+ w7 O+ B
  216.   {; p, @, S4 ]* I- m+ U$ o
  217.     dwCurrFile=0;) A4 l# x, c7 R- @
  218.     bFirstUpdate=FALSE;
    & {# D* ]2 O: @* C3 D
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())' b) V" A. K, J) Q3 q9 D9 Q
  220.     {( ?3 \2 |% E) W1 r% c, ?/ S$ s( O# \0 k
  221.       dwTotalFiles=UpdateLocal.size();
    7 e& ]2 ?2 r/ F( w
  222.       dwDownLoaded=0;
    4 \' M% B: L! c2 k2 Y4 p
  223.       bSilentStep=FALSE;
    - H/ O$ d8 o1 [1 F5 w
  224.       bCompressed=TRUE;
    ' e/ o3 Z/ N6 t1 J$ }* W; l( \
  225.       strExtLocal.Empty();
    8 Z7 `+ r9 Y1 d- g
  226.       strFullName=(*i).second;2 A; [' Q2 e9 e  Y5 K
  227.       dwProgramState=AP_CONNECT;
    ( s# y7 q; H( l( ?$ O/ [
  228.       return TRUE;
    1 w6 o8 a9 m* T5 j) c
  229.     }
    9 ]- n5 H' O5 ^0 t% o3 z2 s
  230.   }
    " c" r( \" r; Z" ~: t2 R
  231.   else if(bRestartUpdater==FALSE)
    / M" @5 b" k" {3 \
  232.   {- k- {! J" x- y3 ]/ W
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    3 U2 D3 Y0 F" n
  234.     {
    4 z' s' e9 P6 a6 w. U: j. s* ]
  235.       file=(*p).second;, s! P( j: v8 b# p* I9 ~6 ]
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())/ i$ p8 O" e! K+ J+ D+ l
  237.       {
    , h+ H% t4 p' s+ h  Q& l! y
  238.         olds=(*p).second;
    0 D2 E7 y$ H9 x7 f  {- ^
  239.         olds->vers=file->vers;. \6 }" g1 w8 K# U9 _, K: q  K; U
  240.       }6 _# g9 q& _; d; V# T
  241.       else: X7 ~4 r6 L+ z6 L5 J2 \
  242.       {
    9 q  N5 P( ~2 ?# _- z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; \, Z7 g7 N, u/ L
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ) c* H; M! o# P& q# Q# Y
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));: K; |6 P" r% X! r5 L  j" R
  246.       }
    6 y6 G5 U( Q5 a7 H; y. x
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");5 O+ a: i2 T. o2 u% }
  248.       sprintf(filename,"(%s)",file->file);
    / c  z8 S/ ^# l+ f; o) {
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 l; [3 C2 ]- s! u
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    9 ]: M) B7 n( K/ b8 y. z
  251.     }% {& R4 O6 u. b" C1 |
  252.     dwCurrFile++;" U' t, `/ _5 W3 p, o9 S% G7 f
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) Z  N" o/ c8 ?8 {
  254.     {
    " y5 x& j( S  |) {0 a
  255.       bSilentStep=FALSE;
    / q4 U3 w; L6 M4 C. B
  256.       bCompressed=TRUE;8 T: I7 m, ?; r6 P8 d4 T0 p5 ~
  257.       strExtLocal.Empty();
    0 ^4 R& \: h2 @8 ]2 {
  258.       strFullName=(*i).second;
    3 U5 `7 `3 G/ s) l, K
  259.       dwProgramState=AP_CONNECT;
    ( i( D0 B* B4 _7 \
  260.       return TRUE;
    ( {5 C; C' {! W7 a5 V
  261.     }
    9 n8 s; X5 M4 ]; F, O2 a
  262.     if(!bRestartUpdater)
    ; T2 r( k3 j+ n9 R( i& ?
  263.     {& `/ S" i; s& @5 L8 o" z
  264.       int iCurrSize,iFileSize;) d6 P4 K8 z* }2 q9 A" l& f9 a/ e
  265.       iCurrSize=0;
    ) |9 h* A* t  [" s; ~
  266.       iFileSize=UpdateList2.size();
    $ D+ M4 g+ w* L1 Q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    " _5 H$ p2 b* r8 r7 a: X+ ^  @8 Z$ S& u* M
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");7 ~% }- s; {- Q' {2 f7 ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ( d. V$ o/ \7 k4 R5 O9 m7 H" I, Z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! H% A: |7 f" C' h* l$ R, O
  271.       Fclearf(".\\update.dat");7 s+ i* l  l% d) v# W" @7 x" h- j
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    : X& q% s8 D* O$ D9 |4 ]
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)* q1 Y+ }9 W" x; F" m7 J  ~
  274.       {8 ~4 N) L" Q" [/ g" G
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    " o% z8 ?- K9 Q7 m
  276.         {: r/ e: q# m/ L1 p& M5 g* [% {
  277.           file=(*p).second;2 p: f1 }$ U4 y- N
  278.           sprintf(filename,"(%s)",file->file);
    ( n7 W/ L8 Y# s$ u9 ^
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 d5 Y) x" M6 h# B3 s' ~8 b# o
  280.           iCurrSize++;
    ) e( h8 [6 P* {- q- m
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    % @0 `8 i9 i  ^& U8 v/ F- {, m
  282.         }
    ( @% d, N2 J; B: U0 g, K
  283.       }
    , T5 n$ s5 }: I, g5 q6 P, F
  284.       unlink(".\\update.txt");9 Q9 S- u# A7 d: ^  w
  285.       unlink(".\\update.tmp");; F* f; b8 p# f1 V7 _7 c* s# ]
  286.       Fclearf(".\\checkversion.dat");
    & Y& g( G. R- X; Z$ n8 I( u
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    * {. Y& p' t0 K/ K  b
  288.       if(UpdateLocal.size()); L6 Z* z+ b5 `2 @
  289.       {: A6 V0 M, X. z" l  l& I  x3 q% m
  290.         UpdateLocal.clear();! e2 t6 Y0 F' L7 W: S6 o
  291.       }
    : R1 c9 P, G4 n) q5 l
  292.       if(UpdateFile3.size())8 I8 Z( {) @2 x- C
  293.       {
      N3 R* E  j' q% R6 X  w
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % F% y  D2 h( b. G1 Z
  295.         {
    ' |; {- U8 A% H# n
  296.           file=(*p).second;
    4 Y7 ~! ]' X3 o+ w/ b( ^2 [# e
  297.           free(file);# v7 z% H: C9 `& g7 R
  298.         }
    # i- d" b1 V% B/ n2 }# |
  299.         UpdateFile3.clear();
    ( b$ {: R8 e4 E, `/ b
  300.         UpdateList3.clear();
    5 i) U- L5 ]5 ]% f8 h
  301.       }0 T2 D' L5 U; }! p, U5 O+ k9 S5 h$ ]
  302.       if(UpdateFile2.size())
    - O" y$ m# B! E. G6 {  n
  303.       {
    $ G2 `2 R6 W; x. h7 m# r6 W
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)) [. M9 |7 l+ T# d& F6 a
  305.         {/ m$ I- D3 _% L/ V6 M' s
  306.           file=(*p).second;
    ( r9 l8 T% t5 B. v
  307.           free(file);
    ( R& \* ]0 X+ b4 m/ W) \$ L/ D; S
  308.         }2 v2 t, s6 g0 t, h5 j8 H# H
  309.         UpdateFile2.clear();. x* Z1 n2 f" X! V5 R
  310.         UpdateList2.clear();
    " G$ L) X# a9 B% c* `7 \& x; N
  311.       }/ b" G% O. G, Y; I% k' |
  312.       if(UpdateFile1.size())
    ' x$ ?* t8 u+ v8 w; H! g# g
  313.       {' y4 i; u  P5 [0 e" @" o( o+ J
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ Q6 \* m; O+ K* E( T! ~
  315.         {
    6 o0 A% |4 P& O- L$ p  i" W7 F
  316.           file=(*p).second;
    & w$ g4 M$ R  l
  317.           free(file);
    3 X$ Z0 e' z& _! X# a
  318.         }( l# p2 u! l4 g7 o' e$ m) V
  319.         UpdateFile1.clear();
    , {, a1 ?5 g  q# P5 s# P0 }( q
  320.         UpdateList1.clear();
    & E5 S) Y9 P# C! S. E/ {
  321.       }1 k* ], U: ^- ^- b3 ?. X
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ! m3 Y! W/ u, Z* Q8 ?* O$ j. {& `
  323.     }
    . y# |! ^/ b0 y% ^% d6 J  h
  324.   }
    ( n+ M1 c1 o- I% d$ A% Q
  325.   return FALSE;' |$ z- `. u* i0 C
  326. }  \1 V6 m8 g( n; e
  327. / O1 r; y7 n: i1 C& }. P  N) r* Q0 o6 C
  328. void CRevAppApp::ClearAll(void)
    ' |4 ^2 S5 G+ Y# U# I  z
  329. {  X% x8 h/ G- e) z0 O
  330.   LPUPDATEFILE file;9 M% O4 v* Q6 d) _/ ]+ a$ v4 H
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% K1 o$ A2 X; p: l& L8 ]+ I
  332. ! U' |  i% U% O& g
  333.   if(UpdateLocal.size()): e( `" y: E+ A
  334.   {' c( m6 F/ c% t
  335.     UpdateLocal.clear();
    9 P- i" _: C9 o
  336.   }0 m) D1 T* Q; |  I  k
  337.   if(UpdateFile3.size())
    . B1 c# y" ?/ U/ P  l! x3 x
  338.   {+ r0 y+ {  D5 b0 [+ Q
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 I: u4 }1 g% P' ]# o
  340.     {
    & {" y* K4 Y2 Z5 W4 s# p
  341.       file=(*p).second;
    5 ?8 p) T0 ]) H1 |/ }- z1 `3 N: A
  342.       free(file);+ P" E/ U; r; ]0 t
  343.     }
    . a5 \, p8 _, D7 g
  344.     UpdateFile3.clear();
    $ }6 t, C: M$ k, n+ t
  345.     UpdateList3.clear();3 b. X9 S# F( T" ~( z. }
  346.   }$ }: K1 O$ v* e3 s+ I4 j" t! Z
  347.   if(UpdateFile2.size())
    5 _' }- J0 {8 x9 R/ h' ~
  348.   {
    9 W. |6 `* u# P" G+ h$ G, c% g
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 `+ k5 Q- d6 ~' o/ j+ q, }
  350.     {
      X! W  F+ n. K% h- a
  351.       file=(*p).second;
    + j: j6 T9 M! K
  352.       free(file);
    ( e2 j& s! T+ [/ _2 ^
  353.     }
    ! Z) a  d6 {: X6 f# u5 I! z/ E
  354.     UpdateFile2.clear();$ z* E/ @- c, g- B' n
  355.     UpdateList2.clear();# w. u! @9 ~/ ^! i8 U% K
  356.   }
    & o( t& i; G% U% f- P% k
  357.   if(UpdateFile1.size())# d9 y+ ]: K5 ~& A* S! g) @; C
  358.   {
    / F  Q3 R2 f5 y
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 q) U1 ]  ]* g" Q/ f+ ~# F
  360.     {: B4 n6 z" U1 R/ M
  361.       file=(*p).second;
    ( n) ~* |/ m; T8 y
  362.       free(file);
    : i4 _$ x) R. o0 E5 T, i
  363.     }/ u0 Q) P0 J, M+ x1 h# p; }- {
  364.     UpdateFile1.clear();0 w3 a% K+ ~9 @( A
  365.     UpdateList1.clear();
    % ~1 x( V0 }' X7 j
  366.   }, N5 _, r+ g( W' F
  367. }  
    8 ]9 ~0 E( b! d2 b/ \& |
  368.   % n1 }7 K5 }) _
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 n3 [! c: W5 j4 @0 v
  370. {  e% W) q7 {! i  W
  371.   int c;
    1 K' K  y, V% `& k* A: K6 }
  372.   LPUPDATEFILE file1,file2;
    . c4 H: U* b* h  }3 c
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , n* J" k% q* C$ h& }  q) M
  374.   std::list<CString>::iterator l;+ H2 T& m$ I9 }3 p5 a* V
  375.   ^! C& {9 t* N/ r- x$ K
  376.   UpdateLocal.clear();
    6 ?# g9 S4 o/ f( T) d
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);. J0 B/ C, K: y0 a6 B. d
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    9 f. d; p9 c! w
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);! ?2 T5 a2 K" }
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);  a" u8 Q9 k' ^, {) r- b4 B1 p
  381.   if(UpdateFile3.size())
    2 ?. s; C# y7 z4 f
  382.   {
    7 V% O1 N: v, U
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)- t, @) m; Y/ _2 {7 Q5 Y# G- F
  384.     {
    6 R  K* H: ]1 x7 Z
  385.       file2=(LPUPDATEFILE)(*i).second;
    ; F; Y8 ~, Z% B
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 {3 N" f  W& E, J
  387.       {* Y7 O! X) v! r9 X! z; V
  388.         file1=(LPUPDATEFILE)(*p).second;2 f: U9 G1 `$ |7 |
  389.         file1->vers=file2->vers;
    * J1 b1 }( s* u1 P! {' F0 W% ~
  390.       }' q  ]6 x- F/ d3 V9 q" W
  391.       else
    % z0 r- h& d' p. E; @& U1 V0 ^
  392.       {
    $ U3 I3 H, A/ c" {( F2 f) m
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : z- k* o8 A& \$ e3 J' m
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));4 Y1 a$ A/ x6 f2 S
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ; i5 B$ Q; q% W# ^
  396.       }
    9 @7 r* b+ C/ _# x, k% b
  397.     }
    # C/ L1 K+ j; e" a
  398.   }, E/ h6 I1 F7 F
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " A; L3 x1 U# B1 @
  400.   {
    6 W2 {$ I4 n4 M! S' M
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())# ~* w6 f% y' [, K% E6 u2 P
  402.     {
    ! m# O# I  Z/ V) p! F- C4 q/ [
  403.       file2=(LPUPDATEFILE)(*i).second;
    ! K4 {6 t3 K2 N4 ?$ ?
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - p& Y0 }8 R/ O/ u+ \
  405.       {
    * N6 p- v* E8 w8 l* m! g
  406.         file1=(LPUPDATEFILE)(*p).second;, e- e1 x3 N' h  N# R9 U3 K
  407.         if(file1->vers!=file2->vers)" n  ~4 d7 \9 X  I8 Y/ G/ q
  408.         {
    - V" G( E4 N2 {" o7 \$ F
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
      f8 x# Y  l8 k' c9 D, R- C; O  |
  410.           c++;2 ^. a0 ^9 e# q0 r0 P
  411.         }
    0 A: s' R! _/ d( k* N. l1 j8 ?: e
  412.       }
    9 c! U+ ~; ]( K8 l$ X" U: u
  413.       else
    8 P  [- W" Y  s8 m& q2 Z
  414.       {) ^( X) t: X. H/ n! Y8 w# g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! S- W: ?- [! O# c
  416.         c++;$ R9 X) t3 B% C3 F% I: m; J3 |$ C' C
  417.       }6 B! _8 P% j" H* O3 p
  418.     }
    0 c. Q0 |0 s4 {
  419.   }- X7 \: ]- H; a$ D
  420.   unlink(".\\DownLoad\\update.txt");7 y# O. |; z& E. S( \  t4 g
  421.   if(UpdateLocal.size()) return TRUE;
    / T3 y8 J# T; Q& v7 _
  422.   else                   return FALSE;
    + w" \2 S. [% n5 o: K1 ?  Y
  423. }
      N/ k( g3 q  z8 s
  424. 9 l& `+ x) R+ Q8 }3 v* V# `
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"4 v6 B" m7 D: X' f+ b
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"1 n! d* B( \: ~. Q" T
  427. 1 W% f6 F* T, g' p7 g) v* a$ o

  428. % p9 g0 O9 U6 B1 y% `

  429. * `9 X  I0 d, S% N( T
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    7 J2 D$ n$ x' A) v1 {, v# N
  431. {
    ! w4 s, J5 f5 k; O1 M& v
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    7 ^8 Q. k( m6 x9 h" `9 a% O  `
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 C1 c. L- c- p- |  I
  434.   {9 K5 e/ u) G/ K" v' O
  435.     char szLanguage[50];4 a& N) Y6 \7 `* v$ A
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ Q, D( ?# W) J6 y6 w! p. Y4 }
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! J) b: D; i' S  V0 J  V- T& k6 g, R
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    4 N8 s  x! i8 N+ n; M
  439.     else                                   m_iLanguage=ENGLISH;
    ; Q; F% _' W, I
  440.     char szRegister[100];
    : T+ i: v* B: v
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " C% W* u% c- K4 e
  442.     strRegsName=szRegister;
    ' R, [/ W) [/ j3 a
  443.     char szPatchURL[100];) \6 H  P' I& W9 ?2 N  h
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; l* O) F( \5 ~4 {+ ?: M. R
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      o6 l1 `7 h8 U% J+ L
  446.   }4 D! `) w" M/ n( U" K7 v
  447.   else6 ~; y: @0 q, ]9 v
  448.   {
    5 u0 b% Q& c8 c
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( M; }& ^/ k) G! H
  450.     strRegsName=DEFAULT_REG_URL;" Q* Y* r, Y$ U- G) @$ @7 n
  451.   }; _6 r- U* T! d1 ~6 n+ v
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    . @* ]5 f! z! q5 J/ Q, u& r, U
  453.   {
    4 P/ E: F* N. S# h3 _2 I5 l
  454.     char szIP[50];
    ; @! K1 j: o! ]6 C8 |
  455.     char szDIR[300];
    * {4 z2 N, D7 u+ `! ~
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")): |/ h. `& G' `
  457.     {) n0 C, Q( c8 i7 G, Z
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : k' P" Z/ {+ {5 Y& r
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");0 D0 Y- s0 v" q9 @! P
  460.       strHostName=szIP;* e. [+ {1 J+ z5 @' q0 a
  461.       strHostPath.Format("/%s",szDIR);
    2 v1 v3 U6 C4 t  q" J! Y
  462.     }4 a; J, j4 d0 L* s
  463.     else: O  O- ]8 ~; b5 O9 e
  464.     {  A8 ^$ s6 T$ g, f; l7 G- L
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ t: @0 s8 T0 V
  466.       {1 a# D" B% g, Q: |' p! I9 J3 Y
  467.         char szLanguage[50];
    , {6 K$ t" T; @. `6 Z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' H  @6 j: r  ?7 b! C
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; C! Y: F  d& ]
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;% H4 W" c& ?; M  r' m+ o# J1 ]9 b
  471.         else                                   m_iLanguage=ENGLISH;$ Q2 W3 z& {* M- Q8 D, s/ `
  472.         char szRegister[100];# p% V9 l5 L# Y9 k2 R4 b
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) r5 I8 S3 ~% w5 q
  474.         strRegsName=szRegister;
    * m0 v1 U6 r$ n2 O# z% ^+ N, d. n
  475.         char szPatchURL[100];& i7 C9 N( {% x  [  ], F, z1 a
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      G& }, {2 A- ~7 G
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);7 j- A/ {/ q* J. r
  478.       }  M) T" R: D# n! e! i
  479.       else! {! S6 z9 M  \
  480.       {* \  p, v( Z/ \1 a8 \5 I
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 p+ F1 I6 k, ^" s: K% d
  482.         strRegsName=DEFAULT_REG_URL;
    9 N5 c) S4 x: K: \  K% O* G; t% }
  483.       }
    - L2 ^/ z% o6 M2 u# \
  484.     }
    6 j$ @: b- U6 n. d. r
  485.   }+ p& o, \0 w& c: {" ?$ u5 s4 G2 U. P3 C4 G
  486.   return true;' q) c& F( ~4 A0 c) z" K6 G  {1 j
  487. }
    2 {. v% l' E  _6 z
  488.   t- V  y! R% C: e5 g, g2 \3 O
  489. #include ".\ZLib\unzip.h"
    % ^; J: f$ `9 @7 @/ k+ C' c8 z, q
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    % O. @# Q' Y/ u9 ?/ \  @2 n
  491. /////////////////////////////////////////////////////////////////////////////8 P* O' p# H7 O. W
  492. // CRevAppApp initialization
    ! ~7 t- C4 f- ~2 d% H  }
  493. 4 o' d# ]& f9 U
  494. BOOL CRevAppApp::InitInstance()0 z, ^0 @7 n: N: m
  495. {! {, P+ f. j7 G& @, S# F/ u
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    5 f# [, F6 Q6 w4 G( @
  497. 1 o9 N+ c# b. R5 a' d
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);- p$ t; G& {/ c' M1 y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
      q9 h; I! M$ F
  500.   {
      O) R+ o. ]9 u1 e, Z3 G- h
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    * c/ _2 f' s  B7 V. p- e
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: A" j5 C# S" h; S' X" p
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))+ d( K" J* z$ L
  504.     {& ~- i9 a9 G5 c* G, N
  505.       strcpy(szPath,szPathTarget);2 g' I- Z' A/ {  H/ S* ?! L
  506.       SetCurrentDirectory(szPath);
    8 _) m: b2 e  d# Y) N
  507.     }
    7 l# |# C  r7 a* g0 r6 l% N
  508.   }
    ' d3 z6 A/ `, `3 Q' q: k% x( h
  509. #ifdef _DEBUG* d; r( m4 |3 d/ ?5 V; d6 J1 e/ {
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))* I" q  W: w/ ~7 ]$ w2 p
  511. #else$ g" M0 E2 D6 V& J& P6 y3 F# H* H
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 L  S) ^( _" M3 p3 v- S
  513. #endif2 [; V: b7 Y( F0 w7 F, _
  514.   {! N# z1 B6 ~' I5 B& ]" `4 N
  515.     char tempFileName[MAX_PATH];
    , `" m: m+ K8 e. @2 K& v
  516.     strcpy(tempFileName,szPathSource);9 p- ^4 L, [# u5 ?' [
  517.     tempFileName[strlen(szPathSource)-12]=0;8 |4 K6 M+ }, b5 s' o5 J/ S8 j' W
  518.     strcat(tempFileName,"\\$CSUpdate.exe");. _! b" V0 @$ n( u# [, I# G
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);0 F, I" A6 j% _( p. [
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    1 `& i* _& f9 I$ V
  521.     return TRUE;7 B0 N8 c3 s6 e" F* G$ {
  522.   }
    1 a/ M  t: f% V% q' B# m; P2 E
  523.   // Nuke 0118: Delete run.exe
    9 ?' u- D- g; b, T% T5 w% y5 |
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    / s3 r" {3 E, |! ~; U7 G& h
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    $ T5 n( X3 |5 \6 P* \
  526.   if(!ReadCfgFile("Config.ini"))* w0 {3 X/ e4 w/ D
  527.   {1 t0 g7 {, K% i$ A
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ; J) |; a! w( ^) |+ \3 @
  529.     return TRUE;& ]4 F) h5 q, }7 A$ j4 R
  530.   }+ m) q# I; t7 \- u: D
  531.   HANDLE mutex;
    ; Q* L( I* C' [1 V1 ?/ Y9 Z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 E- H! T- \$ c$ F% g8 O4 F3 H/ a4 p
  533.   {! V( i8 ~/ Y' j; x4 D2 ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    7 X0 P! j# N  @! l9 m2 h/ Q3 w. l+ l* I6 x
  535.     {
      A) ?; s  ^; Q3 D2 G% e+ U
  536.       CloseHandle(mutex);' b4 O& P# j2 i/ w1 w4 h
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);9 g8 ]7 t* _; r, k8 W
  538.       return TRUE;
    ( F& _/ b0 T1 n& E' t
  539.     }
    0 H0 j) N5 A6 x9 r  u
  540.   }  
    + c5 x4 S0 ]0 p5 O3 ~
  541.   CloseHandle(mutex);
    ' t6 b7 h& X% h/ l$ |

  542. $ o4 F4 N1 P; J; i/ B
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    / R8 x* }3 ?! j, B" k3 h$ J5 m* W
  544. 6 X( y- X4 j$ S6 j; k& l
  545.         AfxEnableControlContainer();
    / O% u; U6 `% m8 {
  546. 2 X2 V8 r1 \3 v/ g7 m1 m. X
  547.   bCanUpdate=FALSE;, g5 X" g/ B3 Y8 \$ `
  548.   dwStartUpSteps=1;3 w% X% ?9 J* |& O& _% D) a
  549.   dwProgramState=AP_NOTHING;
      q$ J' b. ]' j" h8 f0 N

  550. ) m" O0 F4 X3 J3 k9 y% a9 U: j
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);7 g3 _3 e# J3 Y8 Z( y

  552. # A; R+ L, H/ L. T5 j3 t2 p2 C- j' W
  553.         // Standard initialization4 V4 V2 Z5 L  O1 }* a
  554.         // If you are not using these features and wish to reduce the size9 I4 H! W/ M4 {
  555.         //  of your final executable, you should remove from the following
    ( \/ P0 S6 D7 c% o1 p! E
  556.         //  the specific initialization routines you do not need.
    9 u5 j/ K6 H4 e% L% n5 q
  557. ( B2 y6 E- |* ^4 N. L
  558. #ifdef _AFXDLL" ^# p1 Z9 i# J+ L6 b
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 ~5 E! W% S! M5 Y& N8 a, @( c- _
  560. #else
    9 [+ F% ^6 m4 e1 n) x( O# }) b# R6 p/ [
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically3 w6 K* A$ w9 X5 \) `& f
  562. #endif
    ; f% _4 p, h6 @2 W/ i6 x
  563. 9 b) x/ R4 E* H, C% y5 ?4 @$ c. B4 r
  564.   dlg=new CRevAppDlg;) ]! n8 v7 R# k* l
  565.   dlg->Create(IDD_REVAPP_DIALOG);( y. h- {, z* W  y' N% `+ h
  566.   dlg->ShowWindow(SW_SHOWNORMAL);2 H4 s; M7 u  t( u/ U
  567.   m_pMainWnd=dlg;
    * V9 x3 w9 J. |/ E

  568. # t: U/ s! Z5 i( ]1 O0 Q) @
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    : F% u& L' W) s- S
  570. ' T+ N% e0 n- _3 w4 m% o/ {9 X
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ( _7 N1 l6 ~$ H9 O
  572. //  ULONG_PTR gdiplusToken;
    ( x' r4 D) }5 h  b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);/ i, X9 y# d$ S) g1 F
  574. 1 Z7 k/ \5 k2 M# ?' l3 b
  575. //        CRevAppDlg dlg;
    0 z; }6 _' r4 T, @& Q2 ]2 n$ [
  576. //        int nResponse = dlg.DoModal();
    * G( M* C! V8 v' m) N
  577. //        if (nResponse == IDOK)6 f, o  T; }. N0 y" L% j% K: r* r
  578. //        {; _1 t& |$ a( Z! z1 M# Z0 ~/ v
  579. //                // TODO: Place code here to handle when the dialog is
    . ?5 E9 ~# e9 {# y1 u% i# |
  580. //                //  dismissed with OK
    ; H, N# \# y* N( N
  581. //        }
    ! P* B% O# P; V
  582. //        else if (nResponse == IDCANCEL). }1 N& U, c4 f; O
  583. //        {, u0 N) i% \# s: x/ [
  584. //                // TODO: Place code here to handle when the dialog is
    1 o9 Z4 u9 T1 W: H* L, C! j7 j
  585. //                //  dismissed with Cancel% `) e2 g/ U  {% s- M/ Q( ~
  586. //        }8 p* P% K9 x7 c, d$ j

  587. ) F, i: P' t5 H! X- }8 f
  588.         // Since the dialog has been closed, return FALSE so that we exit the& v8 D4 I1 P4 G
  589.         //  application, rather than start the application's message pump.' i" u: p+ v  C3 C
  590.         return TRUE;
    * F8 }$ I8 q- f# p: l* d
  591. }
    8 G7 @, a; M3 A- x- C) m
  592. : W9 |" R- D6 ^* h. W$ d0 ^
  593. char *CRevAppApp::strtok3(char *pSource,char *token)( M1 C9 z3 R! ]8 Y/ A
  594. {5 z& D0 N6 d$ p$ l! ?2 S
  595.   int i;: [- t0 h: K9 A  q
  596.   char *szRet;+ e& V) H) y3 e8 j. {/ R; U

  597. 1 E- V. o+ [0 v' i' ~! K
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ; b! c9 r+ k/ _; ]7 Y& x, o
  599.   if(sztoken)
    ) S5 Z3 _" o' ?1 [. }
  600.   {
    $ H  z8 n; ^0 K. y: b+ n4 W; _
  601.     szRet=&sztoken[itoken];
    ) ]+ r6 i8 Q3 I
  602.     while(sztoken[itoken])
    % }! ~1 k: I( W: s4 l3 i
  603.     {
    " r0 z1 F. u" c* `
  604.       for(i=0;i<(int)strlen(token);i++)
    4 g. c! y7 H! j
  605.       {# T0 F0 M% W# [- @2 u* m
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    7 t2 F# i! c: b, [, I, {# `
  607.         {- Q8 E, y1 q9 J; m1 j0 a
  608.           sztoken[itoken++]=0;# [8 E% m+ q& J- {4 t) g  J
  609.           sztoken[itoken++]=0;
    + {7 [  F# E4 y5 C: U' f4 x! d9 d
  610.           return szRet;  A' ]2 m+ J) ?$ q- Y8 g
  611.         }( {# p) ~7 |- g; @, p6 @
  612.       }/ `# w8 D- s) C) M
  613.       itoken++;9 v4 T, ^$ t& d# E1 m, |
  614.     }
    , n9 V$ X! q2 u! L9 R
  615.   }/ p7 _. O% A8 v1 p5 E/ a+ r, C
  616.   return NULL;
    & R. A& f  F8 l: E5 ~) s; ]
  617. }+ Z- K! a$ @. [
  618. + R2 V2 }, P$ q. f6 X
  619. void ProcessProc(long Total,long Current)& @7 s# ~' u/ R! z6 D. p, S
  620. {
    / X) c+ ^5 ^# R  L( C9 L9 @/ q
  621.         MSG msg;7 ~2 U; o' _5 ~8 Q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);8 [. p. p" k' m( }; J) ?
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));5 [5 O  s* R' e- \: P( n6 ?
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))0 Q. m% b% P6 C7 f& j
  625.         {& P7 s' R4 G# r" m
  626.                 if(!GetMessage(&msg,NULL,0,0))+ s# ^- `" V, S
  627.                 {1 Y* U! Q' P  u, S8 U, C
  628.                         return;" _6 ]+ V: E; K8 ~
  629.                 }
    6 Z5 D6 {, Q' ]1 |. n6 J$ z! W
  630.                 TranslateMessage(&msg);
    4 Z8 E0 a* f5 F1 r* M9 t4 H" k$ }
  631.                 DispatchMessage(&msg);
    0 r: C6 S2 u  A! `- H/ T# _
  632.         }        3 h, s( V; C4 T. _" A
  633. }
    7 X. c0 l4 h" S; B
  634. , @% a  c) ^9 h# K5 N- a9 F
  635. BOOL bFirstChar=TRUE;" A0 D* k# z) [+ }5 W: L2 O

  636. 1 |; S4 x7 }! }2 {2 T. H3 q) x
  637. BOOL CRevAppApp::OnIdle(LONG lCount); @- Z( a+ A9 f! B" U: _! M
  638. {* Y- D& w6 [4 D% b
  639.         // TODO: Add your specialized code here and/or call the base class
    - |) ^: u$ t& h+ D0 f9 w
  640.   switch(dwProgramState)8 A# w% U3 t3 Q' D" z' p2 b
  641.   {
    % K) [2 O# a& G& x% Y7 C0 j3 w
  642.   case AP_NOTHING:
    # [0 g3 s8 ~8 T
  643.     switch(dwStartUpSteps)
    4 m' p5 c! z# J( l, T
  644.     {
    6 |; m$ H5 e; i& ?# |/ I, u
  645.     case 1:
    ! X! ^& ?& V: w4 U
  646.       {. ~4 f( L: G% s; V
  647.         int i;
    0 K8 R% `4 M3 |) _  ]
  648.         CDC *pCDC=dlg->GetDC();
    2 r$ B4 }* y. w$ o5 U
  649.         HDC hdcwnd=pCDC->m_hDC;
    4 B* W! \1 u0 ]
  650. //        Graphics graphics(hdcwnd);
    0 `  z; L: y  E: p$ F7 [
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    . ?3 d7 C0 k9 t; G) z$ Q' n
  652. //        INT iWidth=bitmap.GetWidth();
    " R' n, l" L5 J2 V* V
  653. //        INT iHeight=bitmap.GetHeight();2 o& t- ?, R: b
  654. //        Color color,colorTemp;1 u# a! B/ }! h( k
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ( c2 S5 m. g  P5 v7 m
  656. //        {, f7 g( t9 e/ t8 ?
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    1 l* J: X' k  r4 c- G6 N
  658. //          {
    % ~" p( e9 |2 u/ p4 ~
  659. //            bitmap.GetPixel(iColumn,iRow,&color);" K1 f+ q) U& P; i/ o
  660. //            colorTemp.SetValue(color.MakeARGB(7 A, U: j$ Z0 _! x& q9 s7 m
  661. //              (BYTE)(255*iColumn/iWidth),
    % g: T, Z* w+ c. Y
  662. //              color.GetRed(),
    / h) e! y5 B2 ]* q$ W+ n, Q7 {- c
  663. //              color.GetGreen(),- u& x$ ?, o3 y5 S! m9 D9 [
  664. //              color.GetBlue()));
    : S0 f. L6 g, |" B3 Y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);  a7 T& D2 m! H; A( {; u
  666. //          }
    , o. W) H! x' C; j, N$ h( T$ f
  667. //        }+ ]$ ~7 M9 i/ I! I" U9 {( Q1 A
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);4 Y0 v; A/ y% a  }, b2 F
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' u3 ]% Z7 \" t8 P: M- _* S2 b) Y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    + R! Y6 o2 }8 M/ r6 [0 |
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 A! Y6 @& x6 X8 Q; f6 R
  672.         for(i=0;i<240;i+=8)
    5 T( S# [0 q3 t6 w. N, K
  673.         {
    ; |; C  n7 Q% i$ n6 H9 ~4 |6 v
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! O6 g2 q4 |8 e
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / \: ?! X" J6 H: I8 P  k# d) E
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , G& l& P+ h4 {
  677.           Sleep(33);
    ; X  v2 @9 u( P# T3 ~7 M& g
  678.         }
    ; @9 w* c- r: }& |0 r; i8 M
  679.         Sleep(1000);( \9 ]) W3 d8 Z7 u' N5 R; d$ h
  680.         for(i=240;i>0;i-=8)
    * D- |) }* p" h
  681.         {
    0 I# C  v4 d( S; o2 L) N/ q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);# E; ]: |# S* n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! ?+ e# Y" J7 p$ u! M& X! ?$ F
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' \, N( t3 |3 a6 |: A
  685.           Sleep(33);- j# D2 ]+ }. `5 p4 O  b. C* e
  686.         }9 J0 r2 d' f. n: Z/ [9 n! l
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ! p" R; U+ j  s* P1 k9 [6 ?8 N
  688.         dlg->ReleaseDC(pCDC);
    1 m. {+ [. d, a$ s5 w. a2 t
  689.         DeleteDC(hdctar);1 }, H1 M' G# m
  690.         DeleteDC(hdcsrc);
    5 R. E/ d. l% I
  691.         DeleteDC(hdcorg);7 R. i7 q# S# `. K4 j, M$ H
  692.       }
    - H8 [- p7 J; ^; {
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);4 A. s6 h+ R2 k& q3 B2 h# W0 j7 W9 h
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    1 n+ |  X) P' N6 `# g5 @
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    + l% S0 u! ^5 N8 D
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    . r' c' ^$ x$ V% f. v6 E4 X
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * {* D: S/ j# I; ]- m+ H
  698.       if(!Dn.Connected())6 r) O8 I+ C4 z" {
  699.       {
    # o1 D; D% _2 s/ J
  700.         dwTotalFiles=1;' b( _/ S' h* |: m  D
  701.         dwDownLoaded=0;+ {# m5 |) l2 p, Y* s! p
  702.         bSilentStep=TRUE;
    . ]2 J& T$ O0 x+ `/ [
  703.         bCompressed=FALSE;& G7 p7 s6 b0 ]: N3 W
  704.         strExtLocal.Empty();
    4 c1 H) f. U5 u/ v% w& U; S
  705.         strFullName="readme.txt";: F* B/ f% X) I3 k* H) q( \
  706.         dwProgramState=AP_CONNECT;
    & C! S1 B3 E% M( E! @. d+ y
  707.       }
    + S" |9 E) Y0 y  ?% `( g; q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();2 V* S0 }& _$ t
  709.       dwStartUpSteps=2;
    9 W) F) G; K& M- [, U0 P/ H( l
  710.       break;
    2 ?8 U$ W# V. F- y* A. y" D
  711.     case 2:0 w- l8 w4 Q# p) _/ \
  712.       {
    7 C* [$ G. i9 d4 E; V, L) _( [# f
  713.         int iEOF;
    4 ^# |* @4 F3 B( T9 s8 b) _
  714.         FILE *fp;0 S# P" s" ^0 t# x5 M1 n
  715.         char szString[512];
    % u" i' X3 H& S% y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");4 ]" }" L' j- F2 h& Y
  717.         if(fp)$ l% \" Z' t+ [! ?
  718.         {+ n/ K4 _) E3 Q  q" i+ t, y
  719.           do, t! s0 Z. Q# e
  720.           {
    ( M2 ?- `: O9 X, K0 m
  721.             iEOF=fscanf(fp,"%s",szString);
    " S5 ?6 a1 h6 i& s
  722.             if(strlen(szString)); B3 G' l3 |) I3 Y* }% o
  723.             {
    / T: \  p  }3 `% [2 N) w9 l8 P$ {
  724.               if(bFirstChar)* H/ F, ?' N* e
  725.               {5 R# ^' F  B& ?4 \
  726.                 bFirstChar=FALSE;+ H  _, T* H/ k! a" \
  727.                 bConnectIsBig5=FALSE;. B" B/ a  z9 v. ~7 E( F' X
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;  o5 n/ b, J8 c8 s( j6 l
  729.               }3 T- R& n/ u) d/ W
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- v- {( P% N) a- `0 q+ s
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    & ^. `' ?. z$ n* t
  732.               dlg->m_ListText.AddString(szString);
    , z/ m1 H$ \4 C: }) h" N, W' H
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % V6 x! I) m5 E% A/ G# {9 q+ E
  734.               *szString=0;$ Z) G: x! W5 K
  735.             }2 X. I7 g8 R/ g4 r) h5 _6 Q8 w
  736.           } while(iEOF!=EOF);
    8 e" s+ C1 v' U+ x  P9 B, ?* R
  737.           fclose(fp);8 t4 p0 u; s0 l) ]. E
  738.           unlink(".\\DownLoad\\readme.txt");
    ( }5 B( h# r1 O
  739.           dwStartUpSteps=3;
    % h* a) O$ m8 `! Z' c8 ^5 ~, @
  740.         }
    0 ^4 U) l4 W0 h4 \+ Q$ m0 c
  741.       }# p7 ?2 J" M" [# _. N( p
  742.       break;9 d2 @' T3 g6 W9 c; p0 K$ \
  743.     case 3:" a" z! D: A0 T& f  \2 F" ~) l8 g
  744.       if(!Dn.Connected())* i- t# E" ]* A1 F. F' u
  745.       {% b1 _4 ~$ d% q/ B, Y5 ]* s* `
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);7 z% N; F6 p8 i! Z0 g
  747.         dwTotalFiles=1;
    5 i2 Y$ e3 z5 Z1 O, z
  748.         dwDownLoaded=0;
    0 x. \: T, M: T4 G
  749.         bSilentStep=TRUE;
    4 h$ k1 z" x9 y) h% _* A8 S
  750.         bCompressed=FALSE;
    2 H1 X3 J' ?1 t. b$ @- r
  751.         strExtLocal.Empty();/ Z4 T0 \  U# g9 R5 n5 H$ |
  752.         strFullName="checkversion.txt";
    0 l$ k% q. M. i5 K# V0 c+ s
  753.         dwProgramState=AP_CONNECT;" U  Y, o; |* e2 a2 }! T$ ]
  754.       }2 Y; n; ^7 p" D% f
  755.       dwStartUpSteps=4;
    ( g( Q: I. S1 D: Y. g0 t$ ?  |: a; D
  756.       break;- z4 G1 U/ {& o+ G6 A
  757.     case 4:1 M- R' H' ^! H7 ~
  758.       {
    + i6 q" Q1 D  Q$ I% ?  @
  759.         FILE *fp;
    ) {/ e- Q4 ^+ D; @
  760.         char szString1[128];/ A7 `  z: C0 |1 i7 a
  761.         char szString2[128];8 @1 B; U3 M, W3 A
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    9 w5 Z# B9 G' I
  763.         if(fp)
    & g+ `" Y/ b$ R# |) y4 A* w
  764.         {) c8 `5 J, T# U% I: m/ n+ d
  765.           fscanf(fp,"%s",szString1);
    $ u4 }2 {: X/ P+ Y
  766.           fclose(fp);0 r) t( l5 m+ r! T! C' c: e$ ^
  767.           fCheckVersion=atof(szString1);7 T. a1 E  R0 o) b% n  |  l+ A
  768.           fp=fopen(".\\checkversion.dat","r");
    6 g& e2 d6 R; ?$ ^9 N4 c
  769.           if(fp)
    * ~. q8 @/ U' s6 y
  770.           {
    0 [7 v' n; T1 l; a. z9 k
  771.             fscanf(fp,"%s",szString2);
      O4 b, ~" N* U( U# g  m
  772.             fclose(fp);
    / z& }' y+ o5 Y) K: x: i
  773.             if(atof(szString1)!=atof(szString2))( t( Z" ]( s" c5 a# u) T
  774.             {7 a; q) b5 h$ W% M( ?) l
  775.               if(!Dn.Connected())
    4 w' t8 e) \% k. Q; a
  776.               {
    7 K$ y; T# d4 D& t1 [
  777.                 bFirstUpdate=TRUE;$ A$ u$ D+ a2 t
  778.                 dwTotalFiles=1;. M1 S( l  M  d% t1 ~9 a
  779.                 dwDownLoaded=0;. W1 k5 w* A& q3 \, l7 \2 b" Q
  780.                 bSilentStep=FALSE;  Y* j+ [+ H3 r4 F7 R
  781.                 bCompressed=TRUE;) c; t9 n/ V- E& E" j0 n) V) |, a: O. |
  782.                 strExtLocal=".\\DownLoad\";
    + P* Q( S& [$ R* O9 H  z, W! t$ Z( z
  783.                 strFullName="update.txt";
    7 _' \+ |" w* Y) _3 r
  784.                 dwProgramState=AP_CONNECT;
    " _2 L1 V; M& }: W! Z, |' B
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . ^( S2 ^9 |: L) E6 {
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 G# v' W7 Q1 j3 p
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");  f* @7 A! C2 {1 f2 S8 Z0 ~+ f7 S
  788. " m/ k5 A) [' ^: E) E4 h
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 p" B" f  ]; s2 N& e# {5 }
  790.                 unlink(".\\DownLoad\\checkversion.txt");, Z0 Y9 T+ h- i8 d* S: D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1): L* e! f6 L- u/ O3 K2 {
  792.                 {
    / {) w" v! W+ D9 X2 ~4 \3 t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ; @# v% y' [0 Q6 [1 d, m* a
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");) H# H0 s0 Y0 S; O4 M3 t( c6 W
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    1 X1 {0 j2 D0 M; t7 [+ T4 S
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 @- b, k3 C# s
  797. 8 |& D0 y' q: y% E
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 _0 c0 o. S5 h" t- ^$ o4 L, d' U
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    " O# O4 Y# B, W$ B7 F6 w( S
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");8 A, m8 f' r* @7 R" r
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" h( [5 V. p$ H0 j+ E
  802.                 }) `, C: H; l! ?: I$ F5 s9 b
  803.                 dwStartUpSteps=5;
    * j5 g5 t' N7 t- \: u( [
  804.               }3 B9 v0 S0 S3 v0 A2 y/ R
  805.             }
    ( R& x" P* T) i8 V7 W
  806.             else
    , A9 Y. b7 p) z( |6 {
  807.             {' R7 s8 c% I4 U$ y4 v) c6 q4 S8 Q
  808.               unlink(".\\DownLoad\\checkversion.txt");1 F/ V3 e4 J- O" Q& X
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");% ~3 C+ W* U) J* S" c
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    5 q( R$ u2 ~, R" m( i: X, h
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 L0 f2 V2 n# t  A

  812. " g; R; ~# T% g1 w: V) M1 P
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 t  ~% E) p6 N9 x3 S. ~3 n; `/ h% v
  814.               dwStartUpSteps=99;' J% F. q4 x5 j& y
  815.               bFinishUpdated=TRUE;
    / m+ M% x: \9 U7 I# O4 F- j
  816.               bCanUpdate=TRUE;0 K+ z2 f6 G1 R$ S$ ?
  817.             }" r, x/ }+ c& e. R8 F& Z) J3 V
  818.           }
    $ ?# L/ F$ ]" ~0 w: N) G) r, E7 e
  819.           else
    : x/ H3 O& P4 J; B2 h/ R, d
  820.           {6 S1 X6 T  {/ e0 ^$ g& x: C
  821.             if(!Dn.Connected())
    6 S) N+ K$ B# M3 h) U3 V( t, Z2 n
  822.             {$ F$ b4 W# @" `7 D, `% S
  823.               bFirstUpdate=TRUE;
    % j/ P# V: u* B: Q9 T/ j
  824.               dwTotalFiles=1;
    ( {. L5 ~: Y% |1 ~( K
  825.               dwDownLoaded=0;
    - A' F( g" Y$ y! o
  826.               bSilentStep=FALSE;% F, g  f  |# s. v# C# f! v+ L
  827.               bCompressed=TRUE;
    1 _5 f8 D! |5 ^
  828.               strExtLocal=".\\DownLoad\";
    ) I0 t' y  J: ?6 p  |
  829.               strFullName="update.txt";/ ^" }# K. X$ R' t- h, W
  830.               dwProgramState=AP_CONNECT;
    4 g5 D! Y& \5 O! T3 `- L( B
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 H* U/ b1 |0 M" @# y
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 ^2 T! Q% c/ B
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    # ^( s- D8 w. o2 n5 }+ B  x
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 {' Y- r6 |. {9 [
  835.               unlink(".\\DownLoad\\checkversion.txt");( A/ ], ~3 P; Y) f4 N3 a  p3 [& o
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ) K6 X" M8 ?$ B  V0 f$ O* z
  837.               {
    , Z+ ^9 h: x" Q: t3 P) X8 |
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");5 M! x3 K6 h0 p' M9 J
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ; q$ W& l$ T: _( w, H" \$ ~& z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");3 f4 Q3 y: }  G4 l& ~! O( n* O
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + E- S4 R3 \! L5 I; k+ |
  842.                
    2 {* ]; G* ~0 y6 q4 F. v8 J
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 E( O' V+ R3 Z
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 i8 P0 s; N8 J0 R1 t, e* A2 A2 f
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");% }/ [8 A5 {( S$ i( j
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* d8 c, E5 \) ~# u: N& k0 V% @1 g
  847.               }" K' e9 i7 M$ \+ O
  848.               dwStartUpSteps=5;
    / X3 L: c& l) D2 Q: [3 V
  849.             }
    2 C4 a0 W# a  r% b1 S
  850.           }; e; ?0 k# X& X6 j
  851.         }* _, S: N" |3 l: X0 N
  852.         else. V! C8 K% i% u% `
  853.         {8 {( }+ O7 _4 q
  854.           dwStartUpSteps=3;8 k; m% H/ t1 {3 w* E$ m5 S% D
  855.         }5 {% v, K5 J+ m$ p# X
  856.       }) {" i) h, Z& Q' \- E( M
  857.       break;
    $ f/ J! Z/ D7 k+ E* p/ N3 f
  858.     case 5:
    , ?% Z- C% @% u% ~6 R: d  Z8 n
  859.       {
    & l1 R' ?0 p7 _0 E" E
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)7 [% Q! Y8 o8 n* W, c% C9 V
  861.         {6 r6 {; d8 f% x& i
  862.           int opt_overwrite=1;
    9 [( i+ }, s, u) Z
  863.           int opt_do_extract_withoutpath=0;
    $ J! P6 X  P3 U/ U0 l4 ^" x
  864.           unzFile uf=NULL;
    * u4 J  W7 l; V* z8 l

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

+ b& ]1 ?: ]  [. m  b9 c+ W

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-3 20:46

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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