找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
$ h5 a  f( e( k
  1. / RevApp.cpp : Defines the class behaviors for the application.
    1 e7 B6 e5 P+ V" g6 a' ^( }
  2. //
      h; {. ]. @7 z" l
  3. 7 b1 f; `6 V& t" m" E2 _
  4. #include "stdafx.h"" e$ s8 ~3 E0 |" t- W- r; F
  5. , b: N- j% L3 F, U2 N4 o" f
  6. //#define UNICODE
    % R9 ~) B. L) W$ u& k. K
  7. //#include <gdiplus.h>& B/ K$ r0 u( o' I) m" M8 M
  8. //using namespace Gdiplus;
    9 }$ P2 G. z, R$ W
  9. ) q* T( h$ z1 E, ^. X1 u, @8 M
  10. #include "RevApp.h"1 N$ D2 u& R8 [  ^. f( |2 _
  11. #include "RevAppDlg.h"  _5 b/ h9 e5 R) @
  12. 8 N; T) X1 ~. K* @& M" }1 g6 z; v: {
  13. #pragma warning(disable:4786)
    , u7 W! ?: e5 V3 h$ T" J2 Y% g, e
  14. #include <map>
    7 i  X4 x- b; Q& ]& z7 B4 W+ f
  15. #include <list>" l/ ]5 v0 b0 X& n, R/ V
  16. #include <direct.h>
    ( ^1 Y( b7 T, j$ K
  17. ' v1 ]' Q* i" y+ O* k* D6 @1 i5 R
  18. #ifdef _DEBUG
    6 ?6 z8 b6 ]  C8 f
  19. #define new DEBUG_NEW
    0 ~0 r3 r* e: K+ t# X$ O
  20. #undef THIS_FILE6 f+ ^; o8 p. X7 l6 |
  21. static char THIS_FILE[] = __FILE__;$ F% ~7 d2 M" p6 h+ H7 I
  22. #endif
    ) y5 F( t5 W5 f" \
  23. #include "SkinResDef.h"  [! `# C/ c; ]% ^4 r: V
  24. #include "ChangeBG.h"/ g# U* A2 b' o; {
  25. #include "AFXINET.H"
      q, \2 c% ?  f5 j/ W" R" c

  26. $ R5 J& J# z  U' H7 s4 ~* b
  27. #define TRADITIONAL_CHINESE 0
    + x( R5 x" X, _, U' D
  28. #define SIMPLIFY_CHINESE 1
    ( \' q8 r' ~0 |3 p7 _2 [
  29. #define ENGLISH 2
    7 i; q: r7 R7 g; ]2 |
  30. int m_iLanguage = ENGLISH;: {  L; E! u" z: |1 O$ R
  31. /////////////////////////////////////////////////////////////////////////////( K8 S7 a( q* O, A" K
  32. // CRevAppApp4 j6 a1 S9 q% h
  33. 3 v( C( J. ^$ I2 s$ u3 O5 C/ H
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)8 G9 w% u* B9 v
  35.         //{{AFX_MSG_MAP(CRevAppApp)! n8 [) O! K" c8 d
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. ^( Z* h& e, x, r# j- I
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!; \" z6 x* q- I; C2 Z: l# T
  38.         //}}AFX_MSG$ A3 y/ s7 ^% q3 r$ G. w; |1 @
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp); {9 A+ t( j2 t# _/ ]5 c* z$ n# f! a
  40. END_MESSAGE_MAP(). H& R! r. @% [: f2 [# H! j" B
  41. ; v5 B1 U9 {- ^5 a+ ^
  42. /////////////////////////////////////////////////////////////////////////////
    ' m8 k( e9 Q, z: [& B
  43. // CRevAppApp construction% y! b5 M8 }% k/ U4 S

  44. + V& L6 F) r1 V) R
  45. CRevAppApp::CRevAppApp()
    9 I; A1 r% P2 J/ N' r( }
  46. {
    ; p6 G4 _+ u( I- j8 m
  47.         // TODO: add construction code here,
    & v+ j3 e7 A. i" V- m# e" s2 o9 u
  48.         // Place all significant initialization in InitInstance% |3 M! O) H; Q3 K6 C' m
  49.   bDisplayIsBig5=FALSE;
    9 j0 c5 _- T, t+ c6 R! m
  50.   bRestartUpdater=FALSE;% S- S5 i5 ^6 ]& O& d- C
  51.   bFinishUpdated=FALSE;
    4 T+ c( Q' R: \
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;1 `2 D8 T& ?. U" l
  53.   InitChangeDataBig52GBKS();& n% x; t) l4 X" Q) V/ S4 S7 ^9 p& L
  54.   InitChangeDataGBKS2Big5();. s7 ~+ h, \7 W: F! X+ f
  55.         //
    & L) y: I; h9 S( I2 }
  56.         bClickRunExe = FALSE;1 a1 O. O3 l; t0 g4 O- g" w2 E
  57.         //
      c; T+ H* v  }6 y
  58. }1 t+ B8 b# @/ }  J& N  }
  59. " \9 D$ `* i0 Q3 |; {
  60. CRevAppApp::~CRevAppApp()! X$ ~- d5 }$ C% ~5 m
  61. {0 f2 s8 O% Z/ P$ E
  62.         // TODO: add construction code here,
    " b& L8 [8 z# H6 D/ r
  63.         // Place all significant initialization in InitInstance
    % V4 C' q' h0 g. ?* T( M$ O
  64.   EndChangeData();. w% F9 Z( m; M- k
  65. }2 f. k- R, M( v& {

  66. + ?, W7 M5 ~! k: O% K. X
  67. /////////////////////////////////////////////////////////////////////////////: L/ H) O9 \7 A- Q) Y0 Q+ E, a( G
  68. // The one and only CRevAppApp object1 j* V" x: @9 }# z9 B' N+ P( U
  69. * J; ?5 ~- f) i& u6 |
  70. CRevAppApp theApp;
    9 L$ C# W' |# K3 M- r2 a7 ?
  71. , N2 f6 d2 `' ]* H. @
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    0 J4 {! @5 `+ n  s
  73. {
    : U1 G6 `- s1 x% T' B: a
  74.   int iEOF=0;: ]5 m- K* E' r
  75.   char szTempName[MAX_PATH];' h  q( `3 g6 [+ a7 b( }$ D
  76.   *szFileName=0;0 m: M% l0 D% ~* r; q
  77.   iEOF=fscanf(fp,"%s",szTempName);+ I4 w) ?# _7 d4 y3 W( f( X+ q& z9 F
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')" l8 c8 \, e0 ^0 V8 t% ?
  79.   {
    , d, M: Y- u" Z# p5 Q& f  @) a7 `
  80.     strcpy(szFileName,&szTempName[1]);
    6 T: J( x- i$ E- L
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    4 S2 D9 f( [7 ]8 l$ ^4 Y
  82.     {5 b6 @, Q3 N" V; `  G! Y6 p# |& f: C
  83.       iEOF=fscanf(fp,"%s",szTempName);- W/ F2 a* Q. L3 T
  84.       strcat(szFileName," ");
    ! t, `& S" r. L  c5 o2 E
  85.       strcat(szFileName,szTempName);
    - \! c7 w8 Z5 _+ T% @- G# P: M
  86.     }
    . s# z* w8 b" Q$ A+ I
  87.     if(strlen(szFileName)>=1)
    * Z4 Q1 w$ J' C$ G( R& G
  88.     {1 e+ X  }+ J1 I$ J2 d% @, A( w/ v7 P
  89.       szFileName[strlen(szFileName)-1]=0;
    ) m& g. v. T+ W% g2 e+ ~
  90.     }  z& D% n9 X$ w
  91.   }
    4 `3 @5 i+ f9 a/ _+ J) L
  92.   return szFileName;  ?5 b+ G% T; t  {0 J' N* \7 H4 `
  93. }
    8 k7 ^; B& e! {2 t( w+ Q- T
  94.   b4 @" }) e$ `; h+ s3 I
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    : w  J8 I$ X$ H: T; A6 P
  96. {7 N. a4 V* t1 t3 K& d4 h
  97.   FILE *fp;# o7 E. x% b& f, F  F( i. b% e4 W
  98.   char *key=NULL;4 z& ^0 q4 [) t  M
  99.   char version[MAX_PATH];$ C' w% r8 N5 l: V0 Y
  100.   LPUPDATEFILE file,olds;
    1 ^8 s. G  T) _" |
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 l) L' D, A" [) a; G8 }9 T8 V

  102. 3 h/ K, C8 ]6 u% c
  103.   UpdateList.clear();
    , y. w" W1 j; u0 T' _, P0 r* Y" R
  104.   UpdateFile.clear();+ l' D, m8 H( p9 j1 d
  105.   if(GetFileAttributes(filename)==-1) return false;
    9 b" j9 Q4 t& c  l: M2 `
  106.   if(!(fp=fopen(filename,"r"))) return false;
    4 {5 K' E) y' w& a0 {8 [
  107.   fscanf(fp,"%s",version);
    9 p  D( h6 D8 R
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    # N0 O4 e  l6 {7 `. b( B' ]" d' Z6 T
  109.   while(fscanf(fp,"%s",version)!=EOF)5 U( E  Y: x+ U  C! m
  110.   {3 H4 R' K9 }6 \' ^$ w
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& @) g* b  y+ x
  112.     fscanf(fp,"%s",file->path);
    " l$ {7 M. O* @. a% w& {, d, h& w
  113.     ReadFileNames(fp,file->file);
    ( K/ h+ I$ \4 u% v. a5 L0 V
  114.     strcpy(file->full,".");
    & r8 C! @: N2 p6 `& d
  115.     strcat(file->full,file->path);
    ' B* |. f8 k" \4 ]% ]+ S4 a
  116.     strcat(file->full,file->file);
    - r2 P6 @6 a# y8 U* U
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())2 L! t& t# h) B( }! R5 s2 [6 S" P, [2 p
  118.     {
    2 ~  U! L0 d$ x, d8 ]
  119.       file->vers=(float)atof(version);
    : }6 E; s. p7 \8 u- e. b
  120.       UpdateList.push_back(file->full);
    & c- e& Q3 ~: T7 K- V6 S1 f& u. M
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , p0 E3 M8 B# a- z6 ]1 e. K& p
  122.     }. q" g( x" x, ]& d. i. T, f0 l
  123.     else  y* E$ r8 ^" r8 S$ Q$ p+ h  I
  124.     {$ X. I% |# Q2 o! d2 }/ U" ]
  125.       olds=(*p).second;
    : M! U, k" X0 U1 R" R
  126.       if(olds->vers<(float)atof(version))
    ( s* R& u; S: ?* U7 U0 {& t" P/ O
  127.       {
    8 |) g; ]' s/ L  i3 F
  128.         olds->vers=(float)atof(version);$ y- Q$ P+ x9 v. Q
  129.       }
    - V- V6 Y9 ]) x5 f' \. P/ w
  130.       free(file);& q6 a9 h& R8 t2 n" j8 V
  131.     }
    3 n6 |# L5 C3 Y' h$ h; F# ]
  132.   }
    / n, K# |0 y6 s- \( w& Y% z2 e
  133.   fclose(fp);
    - E( f; V* R3 W+ M% `1 k
  134.   return true;, u7 c3 b' q; b6 I8 `) J# ]9 A
  135. }
    ( _. a( O7 }: v5 Q( P' ^
  136. $ V4 ?7 E6 I4 M3 c, u2 x! A$ K
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)6 l4 t0 c6 E/ k9 d& J
  138. {- b" c* F/ A* M$ Z6 k
  139.   TCHAR  szFull[MAX_PATH];
    , v3 Y+ h: G! M$ D3 Q' ]! T/ W
  140.   TCHAR *token,*inter;0 |/ l0 k0 K4 r, A3 X; }8 x% [4 O
  141.   *szPath=0;! ]( ?1 x: F/ A9 c9 _
  142.   strcpy(szFull,szFullPath);
    % P  @8 z: z+ C- k$ }/ A! g
  143.   token=strtok(szFull,"\\/");( X' D* Y* O2 ?; e' ~8 f; ^$ b5 f
  144.   inter=token;6 {8 D6 V( V. O2 z) c! I/ ]
  145.   while(token=strtok(NULL,"\\/"))
    3 T2 l; o2 G( P! ^- C  h6 m
  146.   {+ }  w0 }* D" f( r3 ?: V
  147.     strcat(szPath,inter);: H0 _8 Z/ D, n; |
  148.     strcat(szPath,"\");
    9 c3 K, [1 e# |8 o/ i5 {7 @1 [& t
  149.     inter=token;
    & U8 @! q2 r, m- O0 e
  150.   }
    4 x: s) ?& S5 G* ~/ P- T
  151.   return strlen(szPath);
    7 t. V1 ^8 m( w( P% P
  152. }+ M' H5 p5 g- S* [) M3 {$ l0 C6 U$ e

  153. 1 [- w8 l" p/ s) o. y0 C
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    # c" N5 L0 @' g- o$ x
  155. {
    ; ^# u. w( A7 L: l
  156.   DWORD attrib=GetFileAttributes(Target);; n8 ~! b: S! F$ s8 R1 {7 q# `
  157.   if(attrib!=-1)
    ' m/ O' J! K% P' |  f
  158.   {
    ' R0 Y! l8 h. B; V+ B% K$ k  R1 P
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))& h8 n1 g5 }5 P5 `% w" Q
  160.     {: L1 F6 w8 y3 i4 X9 ~$ n$ u
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);8 S; p; ]- t) {- n
  162.       SetFileAttributes(Target,attrib);
    - Y3 F& Y& C; }+ a$ Q+ g
  163.     }
    * i: Y3 {# f+ s: ?8 j$ I9 ^) n
  164.   }- M, {2 z( S2 b4 Z
  165.   CopyFile(Source,Target,Erase);
    8 O7 K- {" {4 @- Y' _
  166. }2 E; }( ?+ ?* K' U0 u

  167.   ]% s) A- H) I( ~& Y- j
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! [2 `# g1 `6 S5 @9 `# a
  169. {1 m$ p- K5 K* ?3 k; E1 ?) Q
  170.      FILE *fp;0 W- j# r2 ?- S
  171.      char  szBuffer[8192];
    : B* r# S% {! O' R
  172.   va_list  argptr;
    4 a; [- B5 {4 g$ Y$ `$ \9 Q1 l! f

  173. 5 J' p/ a! p! ]2 }* e: @) c  M8 E
  174.         va_start(argptr,message);$ s' n1 L( `  D" j: }' a: J
  175.         vsprintf(szBuffer,message,argptr);
    8 z' T+ V4 `: s! z3 a1 S" K
  176.         va_end(argptr);
    - \: f8 v/ L2 A$ f, H" V
  177.   fp=fopen(FileName,"a");" q' S1 ~$ x% W& r( {/ _
  178.   if(fp)
    ! l. D0 V( ?4 F! H1 ]$ Z/ p% t3 A
  179.   {+ M, K* [8 j( r) O) }1 G
  180.     fprintf(fp,szBuffer);" n( Y! ^6 g7 D! G. t
  181.     fclose(fp);
    % s! E$ \1 o' W
  182.           _flushall();5 z! O- N  K& y. v# p
  183.   }
    1 N! i( S# z7 J
  184. }
    ) E  \$ A4 W% B; d% y( `( s* d
  185. % L# D$ k6 H6 _. Q
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    2 i" |0 e0 `1 H
  187. {
    ! d: Y2 h+ V$ r/ P9 h
  188.      FILE *fp;
    " H# E- T4 k7 M1 U- Q0 B5 w! t
  189.     DWORD  attrib;( {7 y% G  X  R: ]. Z: P
  190.   attrib=GetFileAttributes(FileName);! E; Y5 \$ J* Z/ l! q
  191.   if(attrib!=-1)
    8 S# V9 a( {5 A
  192.   {
    0 Q. H# k. w! \
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 b* e; c) D% |% {2 K" ^# o% M
  194.     if(!SetFileAttributes(FileName,attrib))5 r4 f! `6 ^2 ]( R
  195.     {
    / L. W2 R: G: M% ~; K) W& n
  196.       return FALSE;
    : z. ]7 c: i( C2 v
  197.     }' r3 e, G) N* f7 b$ F' W
  198.   }
    . \4 O2 h2 Y1 p1 B
  199.   fp=fopen(FileName,"wb");0 S, v/ B; r4 Y/ W- X
  200.   if(fp). ]- f" ]) P, b$ ]/ @6 C4 a
  201.   {0 I3 \* c6 t9 H* K. x1 U! k  G
  202.     fclose(fp);" R! r! O. O0 j# A+ E9 W/ q
  203.   }& ?3 N) w5 `2 B  Q$ N
  204.   return TRUE;
    8 G( ^2 v% k' N' Y; y. o. a
  205. }! B# {; u( Z4 T( Z4 Z0 b
  206. ! n. C$ t- E8 m5 v) H
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    3 H- l- u: K' @( v* e& ^  \5 M
  208. {" ^% V  F7 ]9 i
  209.   char filename[MAX_PATH];: Z2 f2 [% C( _: n% v# N: y& q' t
  210.   LPUPDATEFILE file,olds;8 f- m% Z) D  b/ a" U  ^) D" c
  211.   std::map<int,CString>::iterator i;
    1 H- q+ x2 S+ h/ V. j( Y+ w" a
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    , \) y# u% J( g
  213.   std::list<CString>::iterator l;
    + j# r3 `2 _; T( C. B

  214. , G2 ^/ D- U% ]7 D3 j$ W2 ~
  215.   if(bFirstUpdate)
    $ G0 z& o3 @* T! i: T& H
  216.   {
    8 G+ k$ G" c2 M
  217.     dwCurrFile=0;1 v  o+ b* [" N+ q0 F% z9 t& V  A
  218.     bFirstUpdate=FALSE;
    . E0 a: @; c8 _/ L
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 ?% Z4 c4 [1 x( a$ d
  220.     {
    8 k! H4 R$ q" @/ \1 ~+ E. U
  221.       dwTotalFiles=UpdateLocal.size();2 ]4 |) t2 b- Z6 i. e! B
  222.       dwDownLoaded=0;
    - Q5 e9 y3 i/ s4 U# w1 j
  223.       bSilentStep=FALSE;
    $ n4 }8 o: t6 F  \+ t
  224.       bCompressed=TRUE;" [; a3 G7 a" N" k* e1 ]
  225.       strExtLocal.Empty();& n: J  b' U1 T; u. d
  226.       strFullName=(*i).second;
    * s) i$ R1 _0 E5 G; g" `
  227.       dwProgramState=AP_CONNECT;* _4 z& V+ X  P, i, k# _4 b$ Q0 z
  228.       return TRUE;
    3 R5 Y3 P0 f3 P: F) x  o: \
  229.     }
    . @4 r+ i$ F0 M& P- X5 F0 B+ ]% `5 V' C
  230.   }0 }. z: ~7 s" r! R( y  z. E; S8 ]9 E
  231.   else if(bRestartUpdater==FALSE). U5 R; R& @+ Z
  232.   {
      N( S2 H2 X9 O4 P
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())6 x7 j4 |7 Q# W0 E
  234.     {
    # q4 U( Y% M" b! A# D
  235.       file=(*p).second;
    ( ?' ?9 @- Y' b8 o# I. {& {
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' e; E1 t# F$ V: S
  237.       {5 Y3 \7 b. Z& D$ Y$ K3 Y& y8 f7 q+ L
  238.         olds=(*p).second;
    ! E( Y$ ]4 t: [
  239.         olds->vers=file->vers;" Q; T5 H# ~( `
  240.       }
    3 [1 e+ J9 z% }! ^% U+ j6 C: J
  241.       else
      G& x5 P9 s5 M% m5 ?8 l3 n
  242.       {
    ; |* ]$ ^% Z: z4 I  {
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * G* t4 p" o6 B' \, c
  244.         memcpy(olds,file,sizeof(UPDATEFILE));  ?" Y2 U: j& X; t. F$ L0 P3 A; }' @
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));% K1 |1 \0 C/ h, ], `, a. n2 l3 U- x
  246.       }4 s2 f, `3 p( B+ x5 i9 Z4 B. Z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");: ]9 p3 E7 f0 O2 k4 s
  248.       sprintf(filename,"(%s)",file->file);
    2 m- c0 a) L) U+ }5 F& S& U
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* H8 i' m" y8 F+ M) C& v* _1 k: U
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: B( u5 _  X' [
  251.     }
    6 A  E3 D4 X; }7 \, A8 V3 q
  252.     dwCurrFile++;& k7 n& Q! Y. _* k5 ]) c
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 u0 i; w' K# ^
  254.     {
    + J9 h' F4 g4 Z$ o$ K5 }# `$ w: C
  255.       bSilentStep=FALSE;
    & Y+ j0 h4 }+ V4 Z$ J
  256.       bCompressed=TRUE;
    # c7 `! f+ m' O1 L% G* y
  257.       strExtLocal.Empty();0 v8 o, w+ Z$ U) D! G6 b  c! ^
  258.       strFullName=(*i).second;2 U9 u* m9 g& O7 f. z; G! g
  259.       dwProgramState=AP_CONNECT;
    9 u9 a' B& J1 u" w/ v- o2 G3 j
  260.       return TRUE;& I5 Y% t# X" [+ S
  261.     }; S  O# M  c# Z0 \: y* @
  262.     if(!bRestartUpdater)! ]9 d; V' X+ M- v( B! S1 E
  263.     {! G& l$ a3 }. T
  264.       int iCurrSize,iFileSize;) S7 [# V) x) X+ U! S
  265.       iCurrSize=0;, U, r" P) c, P; {2 M0 N4 G
  266.       iFileSize=UpdateList2.size();  j" N: @& \6 c9 _( j; c7 W& W4 o- E+ P
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    & e% I( R* ^% `- Y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");6 t2 C7 x2 Z" G: l0 x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");  g" @4 |9 c8 |! W3 l6 }
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, h+ S8 q& ?, S: x1 M" a6 Q
  271.       Fclearf(".\\update.dat");
    " q" R' y/ M& `4 v
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    . M- A& D' R+ X- {
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)" s9 ], P; X* C* X, m) U
  274.       {
    ( _5 p2 j8 H/ A6 P
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    7 ~$ S+ M, K5 |* I& v
  276.         {, u+ E# u! J$ d, X5 h! V
  277.           file=(*p).second;# l! y  C3 {2 u: Q! u& _5 r
  278.           sprintf(filename,"(%s)",file->file);  A/ o$ `3 g3 |- H: b; J
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- ]8 @" N1 B8 W; s% z
  280.           iCurrSize++;6 \% T7 j( q* ^2 e
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    . v7 f; o( j' t
  282.         }/ Z! e6 g# N$ {) ]1 N# p8 Q) A
  283.       }
    # K: i2 ]2 s7 b; R
  284.       unlink(".\\update.txt");2 x# F( ^: w9 U3 |7 h, e7 Z8 T% f% X
  285.       unlink(".\\update.tmp");
    % R' S* d3 ~0 X- \' q
  286.       Fclearf(".\\checkversion.dat");
    : |( k0 d  K+ I
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);$ O" [9 ^* m. \% b2 L
  288.       if(UpdateLocal.size())$ R1 m: W4 N& ]3 K$ Q! B0 q
  289.       {( X3 K& _/ q$ K* T$ n) Q7 h  j
  290.         UpdateLocal.clear();& z) a" t6 S/ X9 p( ^6 N
  291.       }
    6 g, j9 ]& d& w/ y+ z) w2 I1 U
  292.       if(UpdateFile3.size())
    , E9 r# z) J8 b2 @" `% |$ _9 S
  293.       {* w& D: r8 C, r7 u) ?, f# x
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    0 `0 E* x- n3 B3 Z  }2 }/ @
  295.         {
    : o4 b) m- [8 f/ Y& c5 K9 M
  296.           file=(*p).second;
    6 L2 F0 \: z5 ]( X) @
  297.           free(file);
    0 ]& c# d: g7 Y. b: k! w  m7 `
  298.         }
    # D% G+ N) ?5 e; h  G+ l$ P
  299.         UpdateFile3.clear();4 c  W! g+ k, m
  300.         UpdateList3.clear();
    " D# H/ W1 z( N6 i4 h% @; E
  301.       }( L1 S2 I$ U0 V" R) V, T: a; `
  302.       if(UpdateFile2.size())7 X: s, o( n8 _, ]
  303.       {
    2 e2 q5 Q. n6 D  ]5 p* `5 [
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 Q5 _: {, b* F+ b" [9 w8 \1 \
  305.         {; F  h- S. c2 D9 q2 r0 J% Z4 S) `5 t
  306.           file=(*p).second;5 n% h) u9 }, q8 ?2 Z
  307.           free(file);
    % E$ b& N! i( Q7 [5 K$ Z$ `
  308.         }7 T, P! f3 F8 M& Q& t0 _
  309.         UpdateFile2.clear();' t; _" L3 B6 W! K* C' G1 c, U
  310.         UpdateList2.clear();
    ( z, V; K8 K) L9 y% T# j
  311.       }* g5 o) f5 r) a
  312.       if(UpdateFile1.size())
    . O; I3 c( K( F) p
  313.       {5 b# C& p7 F" j
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 u0 u1 s0 E$ D. O) C
  315.         {& V8 x, h( p% O& y& |" b
  316.           file=(*p).second;$ O: A" [0 _" N* Q4 ]
  317.           free(file);: q: q4 L3 ^2 t' V# T
  318.         }# t! [  m; L  v$ ?
  319.         UpdateFile1.clear();
    2 K  {, P. w1 r, ?3 X
  320.         UpdateList1.clear();
    $ d( ?# w9 k- X$ U
  321.       }4 D. D3 w; o. y, V7 {" ~- m
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ( u  K( j8 f" c4 A- H
  323.     }3 |( ^% G1 d( ?8 _  n, J
  324.   }2 Y2 @5 _5 x5 S
  325.   return FALSE;
    $ ^+ a( l) a0 b; Z, k$ M' E
  326. }
    8 _# W- l" h+ R( ~" m

  327. + U6 j% |2 V; l6 ^" u
  328. void CRevAppApp::ClearAll(void), Z# D* a8 {$ E2 O/ z
  329. {7 E& H* z4 t+ A% e0 h' a. x
  330.   LPUPDATEFILE file;7 Q+ f  k/ h1 \8 a. |& h7 f  b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;" s# M" \* ^& D, ?7 K; O1 L1 t0 J
  332. 9 z1 L# Z4 t8 b' p0 `' a, M! n
  333.   if(UpdateLocal.size())' G! T* G' E! l: h
  334.   {" c; p" q8 N. q" M/ B
  335.     UpdateLocal.clear();& v2 C% k, [% r
  336.   }, K0 d0 Z; c' j9 B+ e
  337.   if(UpdateFile3.size())% N; @! L; Z8 j6 k) X: o
  338.   {9 k" y5 ~1 N6 R  ^7 B
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ) Y! y# l* A1 s) ?6 w
  340.     {
      V6 |" S) s# y+ L- j8 `0 n
  341.       file=(*p).second;. z: x" @! s7 ]) ?2 J" u1 C- r- ]
  342.       free(file);( G9 K, z' M' {, p. v% k9 _
  343.     }
    ! b; U$ X1 P2 P& i# {; V! |" N
  344.     UpdateFile3.clear();
    9 b3 v6 p: K7 E0 q
  345.     UpdateList3.clear();+ O2 s, C6 i* d0 E
  346.   }
    ' y7 d+ p0 L! R8 E5 V3 B
  347.   if(UpdateFile2.size())
    % ~! T- P* z9 E5 J) G
  348.   {
    " s1 s/ c0 ^0 p4 `3 y/ ?8 \
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! r3 l# I7 `: t; r: y
  350.     {& t) f( x! L, v2 k
  351.       file=(*p).second;+ i. [! G* P7 H4 N
  352.       free(file);# H9 g, n8 W4 D' M, s
  353.     }, x+ N6 L% ]5 y9 H7 L
  354.     UpdateFile2.clear();
    6 `0 s+ h- A- t5 `5 U  K
  355.     UpdateList2.clear();
    & g; ]' V" Q6 c7 |) @
  356.   }8 Q9 Q6 {2 ?( P  a% w
  357.   if(UpdateFile1.size())( l( o  `1 L6 \  |) }/ v# l9 H
  358.   {! B* b+ V% d& X0 |4 W
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 r% p/ ~/ ?& r
  360.     {5 D7 }1 I1 E3 N3 A5 m
  361.       file=(*p).second;
    : L; U. }' ^9 `1 H- c! \' B
  362.       free(file);. X/ x. z& p! n1 m
  363.     }
    % w2 {. c, p& i. k
  364.     UpdateFile1.clear();
    9 c+ U! H. h! W- E* X, L7 z
  365.     UpdateList1.clear();! E, h3 \- j" u% k/ n
  366.   }
    3 |* [, S5 s; r
  367. }  
    : f1 K1 _+ F7 \4 Y4 j# U1 Y- b* n
  368.   ; X- H/ M. V6 |2 N
  369. BOOL CRevAppApp::CheckLocalVersion(void)% y+ G& M/ z7 Y' L1 a) _4 {, Z% r1 M
  370. {
    & C+ S/ X9 s# g3 R7 }
  371.   int c;; B1 m+ C/ D  s6 f& h3 v1 T
  372.   LPUPDATEFILE file1,file2;
    ; U5 ~: K4 t2 T+ K. n
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;3 B% Q  I2 T' ^0 t$ [
  374.   std::list<CString>::iterator l;8 o9 f- K& g) l/ m4 q0 g% n
  375. % U8 v/ p( V- x& s% w5 D( q9 v3 x
  376.   UpdateLocal.clear();
    & R; s3 l. n1 M  m' _
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);$ U% K2 Z9 i, h+ h' n, L' `
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    9 t( R+ [$ V8 Y; o) r
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    3 s1 R: r6 q2 y( g; o+ F5 s
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    8 M+ s2 k! `2 K) y7 J1 @8 f
  381.   if(UpdateFile3.size())
    8 n8 _9 \" R1 q, V- L2 `3 p, F
  382.   {
    6 i+ N3 N, f' P& ]" v* B; {  Y* A  u
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)( Q+ H9 {( @  ~0 Y7 ~
  384.     {
    7 Z0 f3 u; I  D! ^9 L5 Y
  385.       file2=(LPUPDATEFILE)(*i).second;4 P" T- y9 r* k
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + _7 Z0 o2 L6 ^- }
  387.       {
    % Q+ a/ l( K, T' H+ X. m; ^
  388.         file1=(LPUPDATEFILE)(*p).second;; a, c$ n- K( h# I$ @4 J
  389.         file1->vers=file2->vers;6 ~0 p7 a# `* K% v
  390.       }. L! e8 s: X- O/ i
  391.       else7 C' K+ r8 c; K5 X( x
  392.       {
    - ?  {0 k3 f! j3 S+ e7 O
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, Y3 F3 R6 R, p4 x- Q! e
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    " Z$ E. k' B& ^+ n6 O- N3 W' |# k
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));# C: I; K# L- N* c6 }) F
  396.       }$ _0 ^/ B( B6 J0 v
  397.     }
    9 a" f1 ]) e! {, |+ r# e: @- T
  398.   }  v7 ]/ y/ l" Q; P) t& W$ O' r
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++): l+ L2 ~3 Z8 d( M; m. f
  400.   {
    8 e: m" E4 U4 q5 {
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    % u* }2 D+ ?* P
  402.     {
    / @% M( P. X) `+ Y5 C
  403.       file2=(LPUPDATEFILE)(*i).second;( p* F# J& s: E2 Q* {
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " p; R5 ]9 }2 D4 C) W, o3 w
  405.       {3 G! M- K* c# G& w
  406.         file1=(LPUPDATEFILE)(*p).second;
      |8 j4 r7 J" }3 K  j; ]
  407.         if(file1->vers!=file2->vers)0 U- _  `. Y3 J
  408.         {) I# F/ _, T% b& `6 s
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- Z. b7 l4 w; S- X1 E5 H
  410.           c++;5 i" b% \6 @: o! u- k
  411.         }( I/ z" z; u& P5 p  v2 N3 g
  412.       }6 W* Q; c; C6 G: g! C  g$ }5 `
  413.       else1 [, n) ^. `7 d  o+ }
  414.       {
    ! c2 b% G4 s& t' T  N. N5 o
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 n* l% M% w* i
  416.         c++;  ^% w" l0 l* D9 S5 N; o
  417.       }1 s! A! `4 k8 U. J5 j! d
  418.     }% B/ S& u+ e9 D  L" w5 X& r& N4 ?, {
  419.   }
    0 H* o9 C( |+ N
  420.   unlink(".\\DownLoad\\update.txt");
    , @1 ^( R4 Z% `* ^1 Q6 j
  421.   if(UpdateLocal.size()) return TRUE;
    0 ], I' ]  V" }) X3 F
  422.   else                   return FALSE;
    % ]( p' y8 z; e5 `" Q
  423. }
    2 `9 E4 l1 _3 T
  424. & _7 h- f7 q0 Y+ x& f) S
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    7 {* {' G) ^* [# I4 ?" D( s
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn", q) R5 e# h2 h4 e
  427. 0 Y( d+ q* M, M$ y& M  T/ X7 h' h7 p
  428. 3 k5 O4 A! Q! d2 i$ {( E7 b; r* X
  429. . E, E- t' H% b1 i8 g; X1 y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    0 I7 _3 B( I. U9 r& h" ]
  431. {% {' j# B1 M" M$ E5 e  T4 Q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
      C; G7 P3 s! Z
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)5 a+ w# [0 v+ C
  434.   {
    * V* ^7 J& l/ s! l& G
  435.     char szLanguage[50];
    # {. |! a1 E2 I
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + D- Q3 g2 W7 T  H# M1 t6 o3 G
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, S5 {; U9 v) M& l
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 Y0 Q; s# x, H& L
  439.     else                                   m_iLanguage=ENGLISH;
    - g3 t( r/ W( {
  440.     char szRegister[100];  s4 Y6 w: w1 y2 [. `, f
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 I; Q  E/ j( B' K. E2 @" W" [  ~  h
  442.     strRegsName=szRegister;. }7 F$ j4 M3 ^4 R/ F
  443.     char szPatchURL[100];7 j# k1 K& n  R( o* M' e+ b
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 _! Z9 h! r# y- r
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    * B+ C6 f1 Y; v1 a% D
  446.   }
    & b5 K0 w& x+ Q' g6 v$ L
  447.   else
    ( l) C, _% |% m6 T
  448.   {
    : Y2 o$ s8 @5 |0 U1 h
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / `4 f! ?* J* K2 @
  450.     strRegsName=DEFAULT_REG_URL;
    0 R* p1 l6 C& y
  451.   }2 |" U5 n1 Y2 k  e5 {
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    4 U9 v8 ^; q, a6 Q
  453.   {7 C. V7 l5 D) x8 F: E2 A
  454.     char szIP[50];+ L6 t: ^' s& `: B" B
  455.     char szDIR[300];
    " _) d, a8 f: T
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))" x; ^8 H, W: O1 l1 l
  457.     {
    9 h8 I! Y# X2 G
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* W- \0 F4 ~! c8 P0 o& d( v; d
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    8 n- e# I" E  v. {
  460.       strHostName=szIP;
    3 W% \: l0 b1 S. G) P
  461.       strHostPath.Format("/%s",szDIR);
    6 V' b( @- c& d1 A
  462.     }
    8 h9 b5 |- G- z. r  ]3 B$ D
  463.     else
    3 i0 ~9 {/ s8 G' a8 |3 B0 c! v! N
  464.     {0 M1 [# N4 |* T& Y
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ J" W1 f& G1 W* {7 L
  466.       {! O# g+ }" d6 S+ q9 @$ }) {& S
  467.         char szLanguage[50];0 A) M7 p7 }  b: H
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . Z& j8 _+ X& i& \; ~) m' H
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . g' q/ W6 b/ C' E  J" V8 C. G
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* u; H# W7 V# p! Z6 A# c& p( [0 ?
  471.         else                                   m_iLanguage=ENGLISH;
    " s, p9 _2 A# N% x5 \/ ^7 h# |
  472.         char szRegister[100];
    - U5 O; L+ T8 G. p9 K
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! h0 x. R  l% p; E) i" x: C/ p9 Z
  474.         strRegsName=szRegister;, q/ O% U6 G/ `' w6 w; j
  475.         char szPatchURL[100];
    % V& L. l- H  Z; J* |. ]
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. {% ~! n, u5 D- ?
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / k1 F" y: A1 ^+ a, }6 `, U4 I
  478.       }
      B' B2 r# p* @7 L- }4 G
  479.       else
    ( X( A* P4 J+ k$ Z& r: B7 L
  480.       {. w' F$ D" k, n( f) P# I/ N
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , f0 D' M% ^: ~) i
  482.         strRegsName=DEFAULT_REG_URL;
    0 ]* K- w) A( R8 P; L
  483.       }
    , ]  M9 H' j4 K& {: M
  484.     }
    - o9 k( a3 L! g' x  m2 p5 w
  485.   }
    9 y; A5 T# R7 J  ?
  486.   return true;# c9 D  e+ K. Y6 z9 t/ \
  487. }
    ) {- G* P- E: P7 v$ R/ q1 K

  488. 6 s7 b* ?- H) i$ D0 z
  489. #include ".\ZLib\unzip.h"* t) V' m0 k  i8 M
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    9 m/ ~, e/ V$ f3 M9 G& x( A
  491. /////////////////////////////////////////////////////////////////////////////4 u% j& P* u9 w0 K. h
  492. // CRevAppApp initialization
    ( G: R; m' _- X0 f
  493. * r4 c3 B1 i8 k6 c, d* x% S
  494. BOOL CRevAppApp::InitInstance()
    # S0 m! E2 i* M& M! H
  495. {
    + q7 n  s9 V# v) b2 J- Z2 h
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];+ H( g% U9 w- Y) A3 e$ e$ g3 p3 ~5 U0 _

  497. , l  W- S; m& |5 B$ V( N5 K2 g
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    5 ~1 M$ d& S& S" e
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    6 h1 h7 P% K2 B( D
  500.   {( L) \6 H# @/ n. {1 z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");( ^3 p7 w: S( |4 Z! E
  502.     GetPathFromFullPath(szPathTarget,szPathSource);& J. d: ^0 c; X
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    6 w6 z0 d% q2 l0 _
  504.     {
    7 u1 O, f7 x. ]  `# {, B
  505.       strcpy(szPath,szPathTarget);
    * C8 Y/ j5 X0 {, u* u, l
  506.       SetCurrentDirectory(szPath);" }& }' a- A  K: w/ d: I' e
  507.     }0 C# W4 I) e8 H* L, X
  508.   }
    6 r9 S3 e" O/ Z, R+ w
  509. #ifdef _DEBUG
    / _5 I6 ?0 V% d6 ^
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' x0 B8 r+ g/ H! h
  511. #else5 F# T9 n& S0 K5 G
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- O9 h! v' h& ]% E1 R1 n
  513. #endif" n  y3 a  X: A& x+ t4 Z
  514.   {3 t/ h3 e, \5 M) ?
  515.     char tempFileName[MAX_PATH];
    & J9 V6 N" X2 R) U# Z
  516.     strcpy(tempFileName,szPathSource);, g# }/ J' E8 i- N/ Q: ^
  517.     tempFileName[strlen(szPathSource)-12]=0;; C" \9 L- I% L* n9 C5 l' ^3 F
  518.     strcat(tempFileName,"\\$CSUpdate.exe");- k  \$ \, N% m" B9 w0 e5 V
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    . K3 x" Y8 o, c$ g  J
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    4 D/ P. {; t7 y+ c& F. @% T
  521.     return TRUE;: ~! s4 g+ C$ D* m% n; D/ J
  522.   }1 H: w$ T& D/ p6 i% _6 j& }4 e" y) u
  523.   // Nuke 0118: Delete run.exe
    + _) |7 X. ~2 ]# ]# u
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    / g8 \' k# D3 h6 {) \: b7 |' Z4 e
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");$ J, R( ]5 q$ h" ^1 l& y
  526.   if(!ReadCfgFile("Config.ini"))
    , t8 J& ^! s0 X8 c, d+ |
  527.   {3 |* h; D' j* @8 Y8 |! U! t
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);, _# l( X) l. {4 }% ~- g* N
  529.     return TRUE;
    # o3 J" K4 Q% }- z; B0 K* L9 q
  530.   }
    1 ~+ e* [* Z9 |# P3 c6 ~
  531.   HANDLE mutex;) `! i$ l; S* K0 a; m
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))# z1 c- S8 a# w  C, q- L% F
  533.   {/ y2 H$ i% n, k* B3 \
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    6 X7 J* c: Y2 x- K" R
  535.     {+ U. _9 |0 q/ F/ z8 T
  536.       CloseHandle(mutex);" A. X6 s2 a' g3 B
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);& d+ S0 Q5 O' |9 \* |8 k8 d
  538.       return TRUE;# X1 E) I0 r7 J  x
  539.     }
    - p* r, d1 d; i$ M
  540.   }  
    , ~" N! C# a# v) g+ h' k/ y$ A
  541.   CloseHandle(mutex);
    # T9 f' ~6 U9 d- R' F' B8 M# S

  542. 7 f' u- r4 B0 Z' c# l) t/ K3 E
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    - i  A3 U; k& U4 |/ ~# I6 ]
  544. 5 P1 r. z9 H7 a! c9 S
  545.         AfxEnableControlContainer();+ `4 t9 M7 K& p

  546. 6 M: B0 V. z  |9 v/ Q2 J
  547.   bCanUpdate=FALSE;
    ( q  l; G; W$ b' |' ?3 M
  548.   dwStartUpSteps=1;
    2 R/ C2 q/ `1 s: r) ~9 p
  549.   dwProgramState=AP_NOTHING;
    6 O6 z  T5 i2 h5 ?6 _
  550. ; O% x1 D& m/ S* ^. J
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    6 r$ F! t- h# ]$ q3 Q/ k# ~: w
  552. # \. M% y6 S/ h0 w4 T5 T8 a
  553.         // Standard initialization
    . Y+ V6 [- _& ?$ _. s) n
  554.         // If you are not using these features and wish to reduce the size1 G, a2 E' v5 j. [* `  @% E
  555.         //  of your final executable, you should remove from the following
    + b8 Y( z9 A/ r  k3 W9 v
  556.         //  the specific initialization routines you do not need.
    ! j9 ?- `- F' n9 T& q

  557. $ w5 U7 d* p& g: z7 V" f/ F
  558. #ifdef _AFXDLL
    / j9 L( L- e3 i8 E+ \% {  Q4 u
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL- h( t6 }* \* w5 T
  560. #else
    - D# q& @3 n) x2 H: l
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    8 R8 U9 G' @: T# N, k+ h
  562. #endif2 P2 v: w" j* ~' _& t2 W0 P8 m

  563. ; a& [  W4 b, }& U3 k
  564.   dlg=new CRevAppDlg;5 _$ w6 i( M' e6 H% \) v
  565.   dlg->Create(IDD_REVAPP_DIALOG);; ?$ r" D* Y  e! T
  566.   dlg->ShowWindow(SW_SHOWNORMAL);5 W: I# x0 P. z# C, @$ N
  567.   m_pMainWnd=dlg;
    ; z" N6 l# ~( t" h3 [

  568. 7 H' U" q: ^& a4 `
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);% X. n, |1 P+ a& y: ]

  570. ! D; d6 q* {3 u8 {3 m# X8 S6 g/ s
  571. //  GdiplusStartupInput gdiplusStartupInput;/ J6 Q% Z" @' G* O
  572. //  ULONG_PTR gdiplusToken;
    , v: G" ^5 {$ p% |/ ^# l
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);  c2 {- @; q+ C; w, t- D& X4 U
  574. / z9 s" h* `0 V# j, p
  575. //        CRevAppDlg dlg;
    ) A3 a8 ]7 A2 O; j  m7 R. J$ R
  576. //        int nResponse = dlg.DoModal();( f0 `0 D% o1 F5 y! q! v
  577. //        if (nResponse == IDOK)5 @$ Z+ I4 G- P$ I
  578. //        {4 r# r* ?9 p, N! G, x
  579. //                // TODO: Place code here to handle when the dialog is
    + d5 {3 S6 o3 \8 a& c! e) [1 g
  580. //                //  dismissed with OK9 [* V( K/ o2 m, w  N4 e1 S
  581. //        }0 G. x' @3 V" x5 i+ }: \* C
  582. //        else if (nResponse == IDCANCEL)
    / u0 s) J/ Y8 y1 i, T2 w+ u/ i. Q
  583. //        {
    / u+ }- Z; k! i  _6 A
  584. //                // TODO: Place code here to handle when the dialog is
    3 F1 s( a* I& C: R/ `
  585. //                //  dismissed with Cancel
    ) n6 t5 K- h" m" k" d
  586. //        }3 o0 k5 P/ L5 J
  587. . T/ j" D6 w0 _9 p: R  d) i$ f: A
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    2 g# [) F4 x& p4 c
  589.         //  application, rather than start the application's message pump.
    0 n0 z2 d1 X( D. Y# ^% c9 R& e. o2 W
  590.         return TRUE;; C) Q' H7 z8 _
  591. }
    ) G6 X$ O2 a/ K% Q

  592. : e9 W% a# {" k# d, R1 R& W0 {
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ! l/ S; V0 }' w' ]# ~& I8 k  B4 S% B3 J
  594. {
    0 x" o: d+ h3 i; p" `
  595.   int i;
    # \" \& N0 b# e( ~7 k
  596.   char *szRet;, v7 q1 g% F3 Y" a- _3 X! ?4 U$ \

  597. . W+ m' v+ x! F/ O1 }
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    # P! v& g" `# p# T# a' c
  599.   if(sztoken)
    / m9 `/ E& l! h: A! i7 E6 y
  600.   {# _7 V% @* ~2 w3 n+ M  g
  601.     szRet=&sztoken[itoken];
    $ E" P# u, O& f5 R
  602.     while(sztoken[itoken])
    * R+ a$ m% K6 h1 {3 f0 a/ p
  603.     {2 E- G: m+ u% M/ Z4 f0 L" _
  604.       for(i=0;i<(int)strlen(token);i++)
    & J, g6 a! z* {  E( T* p" v4 o
  605.       {1 w7 Q% k5 x7 o/ P; d$ r
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])1 l) _+ D$ T$ G) [6 f
  607.         {
    3 ~2 H; v3 T2 {
  608.           sztoken[itoken++]=0;
    " Y* e2 w7 @& Z. R8 `
  609.           sztoken[itoken++]=0;0 L8 {2 ]- e9 D. O. x
  610.           return szRet;3 F% {, ^- X$ b3 M0 u( _
  611.         }
    0 O1 J: q, }- h8 v6 O4 C
  612.       }# n. p* D$ v) E* x% \' d
  613.       itoken++;' c* A- w, S( F0 N
  614.     }9 L/ H; Z- C" _1 o' U+ T# ~
  615.   }9 K+ w, L, G% \2 O$ F' O7 g) C( ]0 N
  616.   return NULL;" F# p+ X! k. _
  617. }
    1 v5 D/ N* _, _1 v1 M

  618. . o. w1 g- B1 D. q2 x9 d
  619. void ProcessProc(long Total,long Current)
    7 b9 O8 K/ _" N/ @. {
  620. {, B3 A% D9 x- \/ J+ k+ ]6 t! i4 Y
  621.         MSG msg;
    / d$ i+ _. |$ u6 z5 J- u( D
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    4 N2 h# w# z5 r3 r" e
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
      o* I5 v+ a4 a$ l
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    8 e0 e' w( e  O& G' H8 X  t
  625.         {4 L- k7 n! V- ~9 ?3 {9 [
  626.                 if(!GetMessage(&msg,NULL,0,0))4 ~8 y+ N9 C8 K) S6 V7 u) S
  627.                 {/ Q2 m4 {* E8 Z9 e( ^' v- w8 s
  628.                         return;5 L8 v* s- |4 W3 [. ?# u
  629.                 }' ^% H1 b! J/ K, ]; D8 v3 y+ ]; l
  630.                 TranslateMessage(&msg);. U6 y" \, |- o  I5 Y
  631.                 DispatchMessage(&msg);
    0 j3 o0 N2 {: W
  632.         }       
    / R( J" E& E7 M* D
  633. }3 F! u. z: d, X1 |% o

  634. % S" F3 {8 q7 @2 o: y: a. l
  635. BOOL bFirstChar=TRUE;
    . b; P1 C# ?; S7 R
  636. * j' y8 A& }* y- R% O& A5 W+ K
  637. BOOL CRevAppApp::OnIdle(LONG lCount)3 z. j6 }: e3 d" M
  638. {1 r5 w6 W0 I' o, R1 o2 l
  639.         // TODO: Add your specialized code here and/or call the base class
    ! U+ h1 a' A9 W7 _
  640.   switch(dwProgramState)
    , N0 C/ S. k9 @0 E5 ]
  641.   {0 @5 F; O2 {, h7 n1 j9 M5 q
  642.   case AP_NOTHING:
    1 u" J# j( z3 N9 |
  643.     switch(dwStartUpSteps)
    $ W$ a" ?- t9 ?4 }* r
  644.     {
    ; P  Q, @* S# I8 _9 n
  645.     case 1:3 e, y& F$ p* G+ {( j9 C7 Q2 l
  646.       {5 O) T7 g! Z& U8 f( }- @0 G0 ?
  647.         int i;
    8 ?2 O1 v4 h2 b2 f2 v
  648.         CDC *pCDC=dlg->GetDC();
      k5 M: E, G# |) l9 w
  649.         HDC hdcwnd=pCDC->m_hDC;1 \4 o+ V% w  a
  650. //        Graphics graphics(hdcwnd);
    - [; A+ H" A7 n2 M- J% Y' Y- `
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 n4 `  w& g  D7 v; Y' |
  652. //        INT iWidth=bitmap.GetWidth();
    6 c. a+ r: t; _( t' y# T3 H
  653. //        INT iHeight=bitmap.GetHeight();; \. e$ W1 E7 \
  654. //        Color color,colorTemp;
    ! T$ Q" K' E: d% K
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& \9 p- t6 h# j9 h
  656. //        {# \- a+ a, O/ h' M4 _
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    " z2 s) X3 ?. l+ o- N+ o* m, A
  658. //          {
    1 z* N' z8 |2 H/ v; j9 t
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    9 ~4 o: |6 P/ K8 A
  660. //            colorTemp.SetValue(color.MakeARGB(- q! V# i8 r- N6 ^: R  \7 X; {' b, D
  661. //              (BYTE)(255*iColumn/iWidth),
    ( W! X" Y8 O& V  P0 T% c: T$ [
  662. //              color.GetRed(),
    " g- f7 ^5 l, T3 k2 j  `* e
  663. //              color.GetGreen(),
    9 M$ ^5 R4 H; i' k( J
  664. //              color.GetBlue()));; q( a1 Q" Q; t5 u  p/ I5 l
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ( l( d" z; l1 h/ ~& n
  666. //          }
    % M/ B; T/ b( L) C. t1 A) I/ ?
  667. //        }
    0 S* u6 ^3 i) g- E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);. P. f* W- @: b' r  O( a4 I( q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ B- ~& P- ?/ S: c/ n, h; c
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");! A; W  Y  T) ^+ U3 u; U. f2 e. U
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; b, N: r8 Z' V- S
  672.         for(i=0;i<240;i+=8)" J4 e" [9 W* h9 f* J$ ~# L: R
  673.         {
    ( {3 [" c8 B/ m. Z
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 N) H% a8 N$ L5 U% ]1 g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 m2 }! z* x/ y/ r1 H  {4 ]- Q! `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 J- D* n& Q3 I( x
  677.           Sleep(33);
    ( l" `% J2 ?! h# G8 Y) D, }* B
  678.         }
    * G0 h, ]% v( c* `4 u
  679.         Sleep(1000);4 t9 J# \3 v2 x; u
  680.         for(i=240;i>0;i-=8)
    ( {& @4 t6 l. ]0 G% Y
  681.         {4 ]* ?0 a8 [4 F+ b& A
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);+ I& Z9 }7 P' ]
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 Z/ O& o$ V' r' ~
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    9 q: o) ^9 r, M+ e' u$ d* o7 e
  685.           Sleep(33);
    . Z: O- u1 G5 W: @5 m; |0 \
  686.         }0 E- ~2 m! o8 ~
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);, V& L- Y5 u& t9 \
  688.         dlg->ReleaseDC(pCDC);
    ) M) W* H. J9 L1 M1 ~3 o5 s. D
  689.         DeleteDC(hdctar);
      [. G) c* ^8 K* y
  690.         DeleteDC(hdcsrc);
    9 j6 ~3 z; U- m  a" ^7 ~
  691.         DeleteDC(hdcorg);
    3 ?9 e. C- p( C* p# O% g& @
  692.       }
      _' i! C5 G" q1 ]  Z& r0 r! P
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);0 e% O0 F1 m$ B9 e/ w$ p1 [' b
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
      _- O" L' s$ y; G3 G
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");. f7 [) q& w. f1 d8 V
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");" N4 Q, e: V( g5 y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , n9 c. |1 g3 M& Q
  698.       if(!Dn.Connected())
    ' L- z6 O9 O1 B
  699.       {; E. B  q+ u1 q
  700.         dwTotalFiles=1;* q  O1 T5 x# F3 `( y
  701.         dwDownLoaded=0;4 C3 `: E3 `  a
  702.         bSilentStep=TRUE;
    1 t" v2 m  J% q  e/ R
  703.         bCompressed=FALSE;3 z+ V7 X1 _" T; t; ~
  704.         strExtLocal.Empty();
    ! S/ }+ E9 b+ F# ^: u! K( C4 p/ _
  705.         strFullName="readme.txt";% s. v0 o# @, c8 h4 h; N4 a
  706.         dwProgramState=AP_CONNECT;
    8 w) @' B1 w* f6 p( y/ M" X
  707.       }* e8 _6 l+ I9 H0 n8 F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    4 l7 R. K/ y+ h
  709.       dwStartUpSteps=2;
    1 k, Y( y1 R$ L# t
  710.       break;
    % N, @9 _% S& `# ~& m# s
  711.     case 2:( }& K; H) `9 c. f2 [( p
  712.       {$ ?2 s/ }8 a1 ?& q) @, v- l% ?
  713.         int iEOF;, W5 H5 a' F0 |% `' n5 k. Z
  714.         FILE *fp;3 u( [) v7 @+ N
  715.         char szString[512];' u1 Z) r( A$ _% X8 U$ x+ p2 {7 q
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ( M& v) V  c/ N& O: d2 I0 }
  717.         if(fp)9 |2 X( ~: U4 |+ S
  718.         {% E) S7 S  r, I6 z6 O7 z
  719.           do
    : n) C* ?* z/ J0 N, Z$ |; L
  720.           {% X0 w+ I; c% P% s- b6 X
  721.             iEOF=fscanf(fp,"%s",szString);
    " w9 g* m, a* t' N+ u2 x# v
  722.             if(strlen(szString)), f# t5 W5 n4 P% k) a5 ^
  723.             {2 a+ Q/ ^8 c7 F* r6 |) W- W, l$ s
  724.               if(bFirstChar)
    4 }1 O/ r: c$ Y( c6 @+ Y4 V# d
  725.               {
    % C! v3 _; x* L2 |
  726.                 bFirstChar=FALSE;+ v( o. l% N9 J: `  F5 I5 g
  727.                 bConnectIsBig5=FALSE;
    8 c; Y$ G% |$ a
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;( X, B+ S- i- l0 ^! ?
  729.               }
    0 I" ^7 z* p# V/ n5 f$ W1 t( _
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));4 }  d9 X9 G3 Z4 i
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));( M, Y+ q; q# M3 s7 Z+ V
  732.               dlg->m_ListText.AddString(szString);
    , d6 c6 o/ C! X9 c# P6 S! |
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 F) U8 i$ F' J! _& z$ |! `" f6 o
  734.               *szString=0;7 m, f9 m3 f, g% \
  735.             }
    3 S9 X: z+ P% t3 q3 }$ r  X9 D
  736.           } while(iEOF!=EOF);' D4 Z! Q: X# ]8 J' i
  737.           fclose(fp);
    " `2 m0 Z/ E/ f0 V: E- y" l# u
  738.           unlink(".\\DownLoad\\readme.txt");
    / P+ J) G. P7 M
  739.           dwStartUpSteps=3;  v, ?; }- e4 X9 b. \5 p, O
  740.         }2 t' `9 P* f2 J. {
  741.       }
    # I* B2 W0 y$ h; X% G; C
  742.       break;
    ! ^5 n9 [; A! N8 N$ S# V
  743.     case 3:
    6 `8 G$ }6 [: ~' V( \
  744.       if(!Dn.Connected())0 J& v. K# K/ z. n( C
  745.       {
    7 M  y1 T% X, P: p8 U9 {8 [
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    : g9 T6 [/ n% u: ^' g1 _( Z
  747.         dwTotalFiles=1;; v* D- y& i# K
  748.         dwDownLoaded=0;7 d- F. m6 l- a3 S1 K9 P, @- i
  749.         bSilentStep=TRUE;2 w5 S" m* Q1 p- L3 ~
  750.         bCompressed=FALSE;
    ; l  V& X6 Z6 Q& B) r
  751.         strExtLocal.Empty();
    6 a, q' n: V. s# G
  752.         strFullName="checkversion.txt";3 L( [2 L1 y  d9 o, y
  753.         dwProgramState=AP_CONNECT;3 W/ }  b* V; ?! C
  754.       }) f& v% ]/ ^8 I+ _8 r( \
  755.       dwStartUpSteps=4;$ G6 O5 }( J* l$ I' j" ]
  756.       break;( X# t  j9 P& n" I- n
  757.     case 4:* s3 Z/ c! j8 Y
  758.       {
    9 z5 n  |5 }* J
  759.         FILE *fp;
    : {" G7 C4 b6 C6 z6 B" c
  760.         char szString1[128];
    1 a# w' r7 H. q) o8 n2 o8 a* k" q
  761.         char szString2[128];( m, Y1 _- k7 F
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");; x3 T: v5 |- j" m7 k
  763.         if(fp)
    3 \9 w5 l9 x& `% I
  764.         {' L% a- w, |% \) c
  765.           fscanf(fp,"%s",szString1);
    ' s  {/ p- v7 ]
  766.           fclose(fp);
    # ^2 Y9 w; W4 A0 _6 ]
  767.           fCheckVersion=atof(szString1);
    3 G4 m/ d# d( E  G* x% X0 g" \
  768.           fp=fopen(".\\checkversion.dat","r");
    8 e6 ~3 N* _, z- W
  769.           if(fp)6 x' l  g5 C2 E
  770.           {5 q+ h8 Y2 O1 V$ Y. n+ W
  771.             fscanf(fp,"%s",szString2);
    " H+ h6 L7 E9 |; w6 Z% R
  772.             fclose(fp);- |8 k: m3 h* W+ }! [! L: i5 w2 y* ?
  773.             if(atof(szString1)!=atof(szString2))
    + R$ [  v7 C/ }
  774.             {
    ) ?8 s/ A* h- E. ]5 \9 e
  775.               if(!Dn.Connected())
    , d0 a: l. H- F; [0 l9 _
  776.               {% b) i- M% h! E# E) P1 \0 O
  777.                 bFirstUpdate=TRUE;' s8 z& n4 c8 J
  778.                 dwTotalFiles=1;$ e7 O  [7 {5 k* ]
  779.                 dwDownLoaded=0;) w# d9 |) a+ H9 b5 F* @
  780.                 bSilentStep=FALSE;4 \7 v2 @  T8 s/ Z6 c7 C
  781.                 bCompressed=TRUE;
    # z. a# n& ^; h8 J9 l. @# V
  782.                 strExtLocal=".\\DownLoad\";+ M) i: q' S* y! T- O! T
  783.                 strFullName="update.txt";$ j- k) l" a! ~  l
  784.                 dwProgramState=AP_CONNECT;! q" {% N. |0 r! Z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 k$ K) N& h' U
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 o5 I  i, j  d! [% n  H7 O
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % y& W4 U( S5 n- \9 B) Y) W

  788. + j% D# G4 Q) v) z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; R$ P" v9 K: q; h; b+ H
  790.                 unlink(".\\DownLoad\\checkversion.txt");/ `9 [/ g9 ?5 |- H6 i
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)+ M7 k7 c# x% N! i) i0 |
  792.                 {
    & t8 `3 B! m. h9 c7 z  `+ d" k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");; D+ [+ e; D4 H+ Z8 a7 c/ M
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");% T: Z) F% I$ C
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");6 }. x& z3 `9 y/ x
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* P* N5 |' S) m

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

. ?; l3 ]/ v8 |  l, Q1 F% S  l' _6 C7 y" Z9 [4 A

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-9 06:48

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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