找回密碼
 立即注册

CSUpdate.exe源代码

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

$ B3 Z( j8 u7 q. t6 q! T% P
  1. / RevApp.cpp : Defines the class behaviors for the application.$ u( {: \5 r! T5 J3 b
  2. //
    + A- s+ ~: F9 j  }, K

  3. " O" q1 r* [& U, n7 T* N( t3 v8 }
  4. #include "stdafx.h"
    $ e8 a6 n; P& N: U1 ~

  5. ) ?. u2 ?* p" G( H3 R$ i1 N8 Z
  6. //#define UNICODE
    : Z9 o9 h/ [) f- R" c
  7. //#include <gdiplus.h>( r- w! O$ |. X  }0 Q5 U- x
  8. //using namespace Gdiplus;, a, u$ V$ d' w& {# H

  9. 7 G% w5 U3 L' Q
  10. #include "RevApp.h"* `6 C8 K! [3 K- G) u
  11. #include "RevAppDlg.h"0 ]% _  m1 I. U- x, v& E( M" |
  12. ) o: I9 A  i/ J/ K
  13. #pragma warning(disable:4786)
    0 B' y$ O" i% t
  14. #include <map>
    6 {+ V- X' A! r7 y
  15. #include <list>
    6 t: D1 z6 R3 n" p& `
  16. #include <direct.h>
    2 |; {  ^3 ?( X2 g/ b. ?8 X
  17. ; _  _; k1 a$ n' u# y
  18. #ifdef _DEBUG
    $ f3 B  I& V# z
  19. #define new DEBUG_NEW
    0 n+ L2 O# ]' M. N: R
  20. #undef THIS_FILE
    % ?) [, a& Z- Y$ O3 I0 t& [2 Q
  21. static char THIS_FILE[] = __FILE__;* k- A* L6 u; z, [  n2 ~; k
  22. #endif
    " h  G' }! U, M8 C3 K
  23. #include "SkinResDef.h"
    ' B- p' y: R" i9 {' a4 g
  24. #include "ChangeBG.h"
    1 o, |; r2 t- X1 j2 y: Z. i  y
  25. #include "AFXINET.H"3 C( m9 [& o4 l6 M+ q0 g+ S

  26. 3 l& h7 ^' K) b7 U. Z6 ?6 Q
  27. #define TRADITIONAL_CHINESE 0
    4 r4 n  v1 q6 z
  28. #define SIMPLIFY_CHINESE 1* Q1 W: `9 R; a& g. B% L5 w1 ^
  29. #define ENGLISH 2
    ( n4 N4 {8 N1 z! S* ~
  30. int m_iLanguage = ENGLISH;8 J' c  w: p: i
  31. /////////////////////////////////////////////////////////////////////////////
    ) i$ F+ k; k) O9 I3 {) B+ Y" V
  32. // CRevAppApp0 u0 v. U/ p: f& C0 A
  33. - C7 m' P* @8 m! ]
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    5 F2 O% W2 X7 C) g; m2 ^  Q
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    , N4 \. Z1 W+ j0 m: s3 {0 E6 V& l. ?
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ! f- u; \% r. A+ r( }, W% y' |: U& P) v
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    + Z/ k  X3 @& U- N! y
  38.         //}}AFX_MSG
    0 B7 A  c# o- I+ R3 ?
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp): [( W7 M1 w4 q7 h) E% K0 ^# E
  40. END_MESSAGE_MAP()
    3 b/ ]/ Z! M; t( k2 b/ k

  41. ) ?3 H# e# W9 o1 w
  42. /////////////////////////////////////////////////////////////////////////////( X2 R; A& h5 ?+ q
  43. // CRevAppApp construction& R* G1 G0 ]. q- C) B4 I) M

  44. / \; B& p- m+ [" Z' ?
  45. CRevAppApp::CRevAppApp()/ q4 G4 \/ P. \3 h* E  k% i6 U: |
  46. {
    9 t1 S4 a) X% e+ l
  47.         // TODO: add construction code here," E0 J( X- ?* \3 O
  48.         // Place all significant initialization in InitInstance
    & l; N3 K4 t# h; z% W% U9 q- g
  49.   bDisplayIsBig5=FALSE;' z2 X: g/ f( t6 T& o0 d& O
  50.   bRestartUpdater=FALSE;& ]+ I* F: E: K# r
  51.   bFinishUpdated=FALSE;' k1 C7 f* c. s7 L8 [5 h5 w
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;! z1 q% [$ |0 X- r0 _8 @3 ~% `0 X
  53.   InitChangeDataBig52GBKS();7 D; m. I- G: D' K9 C" G
  54.   InitChangeDataGBKS2Big5();8 Y% [+ z2 ^" y4 C3 o  d
  55.         //' M" K+ M- y5 x  i( p9 K, c+ V
  56.         bClickRunExe = FALSE;
    - t" {0 o/ _: z9 I/ i
  57.         //  j$ w) Z. P6 v& |
  58. }
    # h7 F# f' n- H9 ^  F. z

  59. ( |- c, X! ^, X+ |( p" b0 |
  60. CRevAppApp::~CRevAppApp()
    - ~$ j& D& Q9 j7 L0 U4 @8 T/ E
  61. {
    3 Z; i: @0 M6 L7 g2 M
  62.         // TODO: add construction code here,7 c: C% p9 y6 E3 w1 x1 S' Q
  63.         // Place all significant initialization in InitInstance
    8 A) K$ v( x8 W/ `% X
  64.   EndChangeData();4 |  F/ v2 p1 B9 U
  65. }
    $ \; q) V( I6 {

  66. ) Q4 V. f. R7 e0 A! M- e
  67. /////////////////////////////////////////////////////////////////////////////2 O  ]& U5 {% J! W- j
  68. // The one and only CRevAppApp object
    4 S$ a6 f8 {! z4 z* k2 ^& t
  69. 3 Q7 {0 [1 \# K% ^& I: n& d( Q2 m: |
  70. CRevAppApp theApp;
    3 ^* Y$ Y; w  y/ F1 X! `3 H, w

  71. 0 O9 H" _. b3 @
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ' [) [; n2 u% }/ f7 J& J; n3 n
  73. {
    ! s9 H7 |( B1 Q1 s4 \4 A
  74.   int iEOF=0;& w" K1 [" ^1 b, O( f5 i
  75.   char szTempName[MAX_PATH];. V- i( v7 I. E, ~4 d4 |
  76.   *szFileName=0;
      e* j) O8 z- u3 D% I: E; x$ U
  77.   iEOF=fscanf(fp,"%s",szTempName);
    2 t0 M0 z- u' I. K2 ~2 t
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')+ f8 Z8 r' \/ q& a/ P  S) c
  79.   {
    - H7 T1 e1 p4 P. z& E7 Y
  80.     strcpy(szFileName,&szTempName[1]);
    9 `, g/ J+ R) ?" |
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ! g; K' T6 Z( K$ _* E+ w
  82.     {
    9 g$ q, R7 W7 P/ f: y
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ) J! h2 b4 K/ k1 k- }& a; i: N. P
  84.       strcat(szFileName," ");7 n- W% F. c( `) M( z5 j
  85.       strcat(szFileName,szTempName);
    ' ?- j0 }5 O: |  c/ M* m3 i
  86.     }
    8 G8 O1 {8 ?* C( O  n, X0 y+ q/ S
  87.     if(strlen(szFileName)>=1)
    9 A  j) ~! c, b/ \4 c. I2 ^6 x
  88.     {" x5 v) G0 [/ F1 t
  89.       szFileName[strlen(szFileName)-1]=0;* ?$ g* w& `5 G' [; r7 C/ l
  90.     }$ V: M4 i. H2 U( `# {
  91.   }# |8 w( Y" ?) m; H, I$ X
  92.   return szFileName;; ]1 P9 H! i+ s) Y/ H0 Z
  93. }
    ' t" t( g0 Y: a( [

  94. 6 Q9 \0 ]! p  y% l4 W
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)7 e9 w. W# @' s9 ^" i( a. O
  96. {
    , C$ k+ Y% O) d  ^4 j, B
  97.   FILE *fp;) V. y9 r( Y# o- p9 r
  98.   char *key=NULL;
    6 j! P2 _# n' _. [
  99.   char version[MAX_PATH];/ P' k! L) ^4 q  {: k+ o
  100.   LPUPDATEFILE file,olds;5 g+ H; b( a( m0 A- i- a; O
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 K( Q  p6 h, j9 P9 p5 U+ t7 C

  102. 0 z- m) N! h* ]. h
  103.   UpdateList.clear();
    0 W- A' _% O' ?: E, N# V' L  D
  104.   UpdateFile.clear();
      D% E/ ~& G$ F5 y2 r
  105.   if(GetFileAttributes(filename)==-1) return false;7 O( F# _) x# O" F1 g- P8 @6 O' u+ X
  106.   if(!(fp=fopen(filename,"r"))) return false;
    - W" \2 b  M; o
  107.   fscanf(fp,"%s",version);4 x2 `$ k6 A: c- H8 q% ?/ {, d! {
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }4 W" D( L, A8 O9 c) V
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ) E3 t' a' G) m
  110.   {1 p; {9 W+ V# F
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& D, G4 M* ~; M: f) W
  112.     fscanf(fp,"%s",file->path);; m* X9 o7 U; I4 d
  113.     ReadFileNames(fp,file->file);
    2 }  Z+ n/ p* u$ t
  114.     strcpy(file->full,".");+ X" \5 _; B& @. c$ W3 g
  115.     strcat(file->full,file->path);& a5 V: D6 T2 W/ w. J- A0 L
  116.     strcat(file->full,file->file);/ L) L9 R# [2 F4 Z( N" G  ^
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()). T! w5 M/ G, ?( F5 g
  118.     {1 |% f; {( b0 H, M4 s" q
  119.       file->vers=(float)atof(version);$ H# P; }# l6 B$ S! f6 E
  120.       UpdateList.push_back(file->full);
    % C; V3 ^/ N$ E/ J0 T1 b, n
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    * i' L; h6 \5 Z# m$ U9 C
  122.     }
    % d5 s1 ~- P4 n( S
  123.     else9 F- F7 H6 A$ ]* V+ V- u6 ^* Z2 z
  124.     {
    : ]! j# r, O# j8 y/ ?5 k! R
  125.       olds=(*p).second;
    : Z) P( c2 F* x, |; H6 L8 q
  126.       if(olds->vers<(float)atof(version))" t" S" g& O$ I8 U7 t! {
  127.       {" [+ \: l" e! o. t7 w
  128.         olds->vers=(float)atof(version);
    9 c1 Z9 M  c3 ~/ K" w2 l0 j
  129.       }
    % A, u2 d/ A" f+ u+ r6 n9 p9 J
  130.       free(file);
    / p; j# _, ?+ O* e' `& I# _/ d
  131.     }  O0 }7 H8 c! i7 p
  132.   }) K: i! |- {/ k# D# x. r; _3 c
  133.   fclose(fp);
    4 H6 a4 Z: G! Y* l' M
  134.   return true;0 d  o# X4 }3 c
  135. }9 c2 [5 j+ z* A/ y% s
  136. # T+ c- H' a4 O5 B1 I8 b* h3 V
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)7 z( Q6 y7 v8 v4 A6 b( j' M" I4 I" ~! \
  138. {4 r- ?+ d3 |/ K/ Z* q2 I" P/ C
  139.   TCHAR  szFull[MAX_PATH];5 ?- K, e( F- D& y' G
  140.   TCHAR *token,*inter;
    9 w$ C5 W4 D0 A+ p
  141.   *szPath=0;: [; {0 n' M0 @" h& V$ C9 v
  142.   strcpy(szFull,szFullPath);( J# M; ]" F# B7 K3 O+ I% [
  143.   token=strtok(szFull,"\\/");
    1 G! X4 i' b" x$ u6 c: U/ p
  144.   inter=token;
    % M; y1 t* y1 C) ]) F/ X5 p, e. A
  145.   while(token=strtok(NULL,"\\/"))4 ^( h. H/ d% i  p) X
  146.   {
    1 L! F% T- ?! @9 s/ b
  147.     strcat(szPath,inter);
    % J% m0 K9 A1 l' n& r& X
  148.     strcat(szPath,"\");
    / r% ]/ F, c; i/ D
  149.     inter=token;
    3 _* ?% H( Q5 D" q
  150.   }1 |6 s: z$ b  Z  \
  151.   return strlen(szPath);6 M8 F/ t9 X1 z9 C- y$ p" K
  152. }
    ) v; B, _3 ?2 U
  153. " w2 Z$ @% Z0 D# f2 l. T
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)/ }: L) y# \& O4 O9 Y7 X/ [5 u: d
  155. {2 F1 w" {! p0 j9 T3 L' E5 M7 J
  156.   DWORD attrib=GetFileAttributes(Target);# W8 e+ x: [/ {* F6 C3 D! Z3 C
  157.   if(attrib!=-1)
    $ W$ [: C) _7 U' a
  158.   {
    , w: H0 Y# w& x4 X; d5 S. H" B
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    . s, w6 v# ?: K9 K
  160.     {/ e# c% V2 \' A
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);4 g( ^# K. G  X. S9 }# f
  162.       SetFileAttributes(Target,attrib);
    & G+ \0 `1 w; O3 \/ Q
  163.     }5 p; l! Q! i4 j: |3 O+ Y, X
  164.   }% G: i2 n  ^2 u' P+ I
  165.   CopyFile(Source,Target,Erase);
    6 F! M* l5 C; K# v8 G8 @' F( N9 v
  166. }
    , [2 I; M% N# d3 a  G; d) [* P8 N& q
  167. & w/ n. h3 a6 y7 t6 v
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ s, ]$ x0 k0 o, M5 J
  169. {
    ; [3 t  ]$ M8 V/ E2 \  o: n$ F
  170.      FILE *fp;
    $ z& m+ P2 S$ g% U3 `6 c) @* f& w' ~
  171.      char  szBuffer[8192];
    8 z7 K$ a/ z& ~5 y7 V+ f8 h4 b
  172.   va_list  argptr;6 |7 h' r8 `! N; i0 `, f

  173. 5 ?, Y4 ~( t& B! J- R. F% j& |
  174.         va_start(argptr,message);
    6 c" T( }3 }& z2 E# x& V" A6 l
  175.         vsprintf(szBuffer,message,argptr);/ l# t. X( I* t/ [6 h+ W
  176.         va_end(argptr);" p, ?5 a# \' C7 b, [
  177.   fp=fopen(FileName,"a");, l$ t) t7 i; j( k
  178.   if(fp)& K" ]4 L- E, s* |
  179.   {8 P$ C) U$ ~% o
  180.     fprintf(fp,szBuffer);
    ; h- G! U8 w' S7 R, }
  181.     fclose(fp);
    7 _( T( p( {" H: v% q9 Y
  182.           _flushall();
    3 O$ a( T$ n* n9 p+ J4 n
  183.   }4 T6 c( h/ m1 X+ H% s! C. Y
  184. }9 V2 U- Z, n9 u0 b0 m3 _1 ^8 h
  185. ' h# \7 Y; E( N% m7 e4 D
  186. BOOL CRevAppApp::Fclearf(char *FileName)" E: T$ Z! o4 z4 \
  187. {. d. ~+ ?$ {) `" _$ O
  188.      FILE *fp;
    & u  o+ r& @( V4 I/ k+ W+ e" F! i
  189.     DWORD  attrib;6 s3 B) O% T/ h6 p8 H. ^7 ?
  190.   attrib=GetFileAttributes(FileName);
    ' W! h  P, A0 [3 _6 \& [# q! i
  191.   if(attrib!=-1)% J7 K- }2 l( ^7 A" l; M& R
  192.   {
    5 k1 W" T& E& d6 E  P
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);. U0 u2 a6 T6 w1 M/ p
  194.     if(!SetFileAttributes(FileName,attrib))0 k; k6 o$ A3 u8 H
  195.     {
    4 V% t4 ?& B# D" e' O
  196.       return FALSE;
    ! X/ m6 u3 R7 b  q4 y, Y
  197.     }
    2 Q% d0 J) K; K" ?+ s
  198.   }' j2 v7 g0 W/ H
  199.   fp=fopen(FileName,"wb");
    ! \1 J% a6 ]* @) I
  200.   if(fp)
    6 Z! \( y& A7 x! k
  201.   {
    ( D8 [- r4 |% A8 p, {
  202.     fclose(fp);/ b; B* k, P# ^1 }# q3 _, e, p
  203.   }+ \% z7 R1 w) c; `+ [8 ?0 C' Q
  204.   return TRUE;
    + ^  q1 A1 ^8 I1 l" @2 B- m. f
  205. }
    - q; w: Z' W: j/ i" z5 m
  206. ; I: \! K/ ^* W' P5 S
  207. BOOL CRevAppApp::UpdateLocalVersion(void); G1 {$ x( q! P
  208. {/ L6 o( `5 t# W
  209.   char filename[MAX_PATH];
    4 q. q9 H0 P3 A( a
  210.   LPUPDATEFILE file,olds;( b. K' F$ M, g/ o, Z. ~
  211.   std::map<int,CString>::iterator i;- ^6 O6 J) R% w- i: Z
  212.   std::map<CString,LPUPDATEFILE>::iterator p;  v* e" J0 S* j- b9 v# V$ I$ A" }3 L
  213.   std::list<CString>::iterator l;; ~9 l2 F* E. x8 j  G9 [' ~6 _( s
  214. - Q+ |* X/ G" r: j- P" i
  215.   if(bFirstUpdate)3 [" b/ P' P5 ?& m  F
  216.   {6 H5 m' r, e$ F( i2 g6 ~2 J
  217.     dwCurrFile=0;7 E; s7 l" R% I5 U# R
  218.     bFirstUpdate=FALSE;7 \/ u) Q9 v: S. f! t
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 a, V+ N. J7 v+ Q
  220.     {! i1 a; N) x6 Z% x
  221.       dwTotalFiles=UpdateLocal.size();
    $ V! C  ~- f3 A1 `8 L4 G
  222.       dwDownLoaded=0;
    5 F/ ]1 W: x. J( B* ^; X
  223.       bSilentStep=FALSE;6 d& K1 \  Z- X  j4 a' A3 ~
  224.       bCompressed=TRUE;
    $ m" P, E% Y2 F* C- V: o
  225.       strExtLocal.Empty();$ E6 w: I7 d/ L1 o
  226.       strFullName=(*i).second;$ l1 K: I' f3 w9 N& J# ?' S4 X
  227.       dwProgramState=AP_CONNECT;
    7 J7 t  j, ^; }, ^
  228.       return TRUE;
    ' S# [; O! ?4 u
  229.     }
    $ }% F8 N5 D5 r0 q3 A
  230.   }9 U. E: Y0 r) x. y0 V
  231.   else if(bRestartUpdater==FALSE)( ]( ]4 o6 U& ?0 E' ]7 {
  232.   {
    ) x9 X6 l" i: Q1 p  N( E- Z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()); h* _7 s; V1 M) c& Z. D$ N3 i
  234.     {
    $ x/ J/ @) D3 g
  235.       file=(*p).second;
    " o, U7 f" ~" M; l* d- e$ o* T: O
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    % ^) m' s0 r  G3 H+ `; X
  237.       {# i# M- S( V% ]7 }  q4 K
  238.         olds=(*p).second;8 i$ s4 H0 S: K  G
  239.         olds->vers=file->vers;
    $ \  \: z! v4 X% F, X8 a
  240.       }
    ) F. [0 u# e5 O, c
  241.       else$ H+ i6 y) {6 u8 f
  242.       {
    # B# n3 h9 a/ c3 K: j
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . ~/ {: V. K" Q
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    # B6 O4 X2 a. e% p1 |9 F# k
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));& y* k3 G* L; s4 _9 b2 ?( Y
  246.       }& i% w8 G( ?% R' T1 h. q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    , o. O! _0 {& I$ t7 p
  248.       sprintf(filename,"(%s)",file->file);
    & N3 z' y, j$ n" l' I
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' _9 v. ?7 U4 A
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    * h! b5 B; U2 R" d) a: m5 M& C
  251.     }; H- q+ ~% ~1 L/ d
  252.     dwCurrFile++;, m/ G& o" T# O& H+ a- T
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ f$ l; f/ h, ?1 `
  254.     {+ [9 s+ F3 Y* B' z
  255.       bSilentStep=FALSE;% K9 {) [7 P, q. x6 I  d9 E' ?) ]' I
  256.       bCompressed=TRUE;9 X3 @& \; x3 X' J" x0 y! ]1 T/ X: O
  257.       strExtLocal.Empty();. s& q: ?' F. g" w; W4 H+ X, q6 B
  258.       strFullName=(*i).second;7 _. B. G) I& p! _5 d2 m) }
  259.       dwProgramState=AP_CONNECT;
    ! y* Z+ K' n/ u
  260.       return TRUE;
    7 e7 |, F* _3 c+ A
  261.     }
    1 R  x& ~, k. k* l) K0 J5 Q
  262.     if(!bRestartUpdater)
    7 g5 P3 D7 I, p. L1 d! |+ z5 h+ R
  263.     {" r) r- i( N" }1 l3 W$ \) [
  264.       int iCurrSize,iFileSize;
    & ]4 x2 G, |- M4 X! f6 I  s
  265.       iCurrSize=0;
    2 ~/ a/ m9 I: l% d, Q5 }" M
  266.       iFileSize=UpdateList2.size();5 ^4 v: a1 t' Q. [, Z0 u( x+ a
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    6 C* L* a7 s8 m, y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    2 d: h" O( n* P% y( m
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    8 h" l& Y) P# ]) d, F& ~- G
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 I* }2 v( o8 `
  271.       Fclearf(".\\update.dat");+ I. d) H3 U9 X( P3 ?
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    + c  ~, d0 O9 Q4 ^' Q/ {
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)0 q* k* n9 H0 q/ i: i3 [9 c
  274.       {
    2 S, E$ }0 C' k- d* Y( p7 c
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())7 a8 }$ R( f! a9 a
  276.         {
    / }  e7 b& Z: t* g
  277.           file=(*p).second;
    : p% D. ]+ c4 D' t
  278.           sprintf(filename,"(%s)",file->file);/ H+ @% S8 b5 K+ J' K
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& _( q4 I4 E2 O- j3 s
  280.           iCurrSize++;9 R; B6 F. b( A; J- `( D7 n
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    * b( v) ?( ~  A7 W' y
  282.         }
    4 \" R1 b/ w' I
  283.       }+ @. ?, g. ^! A" G! y+ \
  284.       unlink(".\\update.txt");
    7 b; P6 N; U: D  O
  285.       unlink(".\\update.tmp");
    8 @' T1 }4 L1 |: j6 L: J
  286.       Fclearf(".\\checkversion.dat");
    2 G  L6 c7 _8 C5 q# v
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( `* \! H& B2 v8 |/ {5 m
  288.       if(UpdateLocal.size())2 m; a- }9 Y2 M0 X8 `4 y
  289.       {
    3 p9 c$ k4 m- n+ ]2 U3 X# i, e, x
  290.         UpdateLocal.clear();
    ) X6 ~3 w; W2 H9 _
  291.       }& }, v' e' H9 x3 c6 K2 U$ z
  292.       if(UpdateFile3.size())
    9 a8 f" l7 W# y3 |; v
  293.       {; W$ Y% q9 _. v* T9 J( \
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! U8 Y8 K* ^8 D8 S
  295.         {3 E& V2 {) a; s8 Z
  296.           file=(*p).second;
    % N" {1 J8 H- G* p4 Z  J) V
  297.           free(file);5 p, Y; Q3 }8 _, `5 a7 d+ L' O
  298.         }3 ~% `6 l) n5 X& P6 z- t! b  F
  299.         UpdateFile3.clear();" G! Y" j. n7 f& g, U
  300.         UpdateList3.clear();
    3 d3 b  z  W4 q! }
  301.       }9 M' c* e6 l. s4 F8 O
  302.       if(UpdateFile2.size())
    0 @+ N1 C9 J1 {6 T, p
  303.       {$ a  Y, ]( K7 j( K
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++): w: a# ]) Y4 |' W0 S
  305.         {
    1 H  V4 r5 u' e" k" Y# m
  306.           file=(*p).second;
    7 `# Z2 L+ z' ]" g% \8 K* ]6 s
  307.           free(file);
    ; w0 [2 `5 M) i
  308.         }
    5 F( f$ g$ U9 u
  309.         UpdateFile2.clear();
    - i) M# j9 l( a; P6 o9 j
  310.         UpdateList2.clear();
    4 w7 F3 g5 m; J5 T7 b* T2 r2 P
  311.       }  @' T' C. f7 E
  312.       if(UpdateFile1.size())- V' y7 ?$ ~3 n/ I9 d
  313.       {$ Y" ?! Z) J" e5 \3 y6 Z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 ~' ?( t; s- I8 h
  315.         {* Z) [5 m$ c4 ]; ?& M5 y
  316.           file=(*p).second;9 c1 V# l" N  h% v+ B- g( S
  317.           free(file);
    7 [7 @0 r, r# x. [6 R
  318.         }
    % F' n1 m8 z) X0 t
  319.         UpdateFile1.clear();6 P+ r& J. d6 q% t
  320.         UpdateList1.clear();! V9 c4 }+ [( Z8 c
  321.       }
    " o4 R" g- ~' U$ e1 T! t& b
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));( ]" ?  O; b2 m+ w6 s, T( t" k
  323.     }5 l) m5 y! P% C, m# U
  324.   }6 C6 U' G) t- w+ q' q7 o8 l) Z
  325.   return FALSE;; u3 s0 Q  N5 x+ [8 V( T
  326. }
      P0 r, e. E. ~# I7 F+ _  O' E4 `

  327. 3 h- K+ b5 S# |9 g! b) I
  328. void CRevAppApp::ClearAll(void)
    ; T, ?' `7 k. U
  329. {
    9 ~: F4 x: A& x) Z1 d' j/ k
  330.   LPUPDATEFILE file;9 w* q& F' ]7 b9 m9 e
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    # {/ `; M0 c# W5 J, W

  332. ; `2 [: H  M# |/ f( i4 T
  333.   if(UpdateLocal.size())) l0 c2 H# Q) H; v) Z9 b, C
  334.   {
    * F( t7 L9 W: H  X$ @
  335.     UpdateLocal.clear();7 q/ Z% r$ v6 F, ~$ d& v% `) _
  336.   }) L! q! _4 F4 ~9 b; q3 i- H3 P
  337.   if(UpdateFile3.size()). u1 S: f% `6 r: G, B
  338.   {* n, |; B4 ^0 \2 a" r/ w/ _; d
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)4 f' H" Z+ V5 L9 @- g" |. s
  340.     {
    % G9 A' y  X# S  I: u7 Z3 }
  341.       file=(*p).second;
    5 C7 o. d4 M/ W) ^! v2 J. T
  342.       free(file);
    , Y! C# k* h, R
  343.     }
    ) {  F% s! e1 F  Y2 n
  344.     UpdateFile3.clear();7 G8 _9 k- M% Y5 _4 h. P; r) c
  345.     UpdateList3.clear();) B2 D0 l8 g% E# h2 _3 Z/ G
  346.   }
    5 w4 s3 d/ J# {* M9 a
  347.   if(UpdateFile2.size())0 s! D3 [/ D2 l' I
  348.   {" |% V: X/ ]. P& a/ {% ~  X  s$ X
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ U% x& m6 x* A0 ]1 _
  350.     {& g$ y' d2 R* g( ?
  351.       file=(*p).second;; G5 l6 w% _; j  i0 x  K9 X
  352.       free(file);
    7 |7 g3 R5 r) W* j
  353.     }1 ?4 J! s! t% w% ?/ o% f
  354.     UpdateFile2.clear();
    3 X5 i( A# Z  c8 m( O
  355.     UpdateList2.clear();+ n  K; Z$ M: ~( _/ v* h
  356.   }
    ' U( {/ b$ G9 K3 W( K) |
  357.   if(UpdateFile1.size())% R2 V3 }( e5 a+ g
  358.   {6 }* K# O/ o+ F" Y2 K
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' l  {& E7 v2 e" c0 h3 L
  360.     {6 N! a0 w, r0 {* [! E
  361.       file=(*p).second;, A, V- n4 E: v1 q+ `8 ?! E
  362.       free(file);
    + l/ W  w7 h7 M
  363.     }
    0 G1 J: K4 E1 o- L5 F% E5 B9 `4 H% b, Q
  364.     UpdateFile1.clear();
    ! y, t) b: ^, \
  365.     UpdateList1.clear();; z1 W* s! K( Q' B
  366.   }
    : \% B3 {9 i: c  [  d
  367. }  2 T' X, u( X  P/ K
  368.   
    8 Y- R$ L5 Z& Q, t8 u
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    8 D$ {; G/ _1 U* n
  370. {" _% s; R. F; H% u( K
  371.   int c;
    5 w- m7 x* W: Q; \5 o; M/ o
  372.   LPUPDATEFILE file1,file2;
    + Y% ^6 x, I7 o% P- e+ @( ^
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;4 L. t  ^% ^4 ~/ E: ?5 |
  374.   std::list<CString>::iterator l;5 P; p: U6 b- K) q7 h

  375. ) K: |: W" G( X9 D5 I
  376.   UpdateLocal.clear();; O$ v4 W$ D' t
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    * ^, p) [: c% f1 o7 ~
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    5 p% R$ j1 c" N- X+ r
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);2 r  E9 Z  Q7 K
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);% ]) t8 ]" _; k8 \6 ?
  381.   if(UpdateFile3.size()): h* C8 b3 T! z  t
  382.   {
    $ X1 t; a0 s4 C. b) X
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    / P+ v2 \) l; I: o" H
  384.     {
    2 l# Z8 ]* ^! F) v1 Q
  385.       file2=(LPUPDATEFILE)(*i).second;3 N  m0 p  n& r7 Q; x3 h
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 y/ [( C7 J) i1 u5 E9 ?9 `+ @; [  }
  387.       {0 [1 g3 ~* `6 k0 g( K1 g0 ~
  388.         file1=(LPUPDATEFILE)(*p).second;2 x9 S% W$ [6 d
  389.         file1->vers=file2->vers;
    ! U/ r; i* ]5 \2 G. J
  390.       }
    6 d+ y- O( [0 ?- I0 H
  391.       else& P  F' y4 J2 h8 h
  392.       {
      u/ f5 @0 Q0 E6 \4 _% E- x1 j
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! y% M: a1 m1 L% T0 l
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));# B: _! h% j4 q& V2 D0 V% R
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));# l1 c* h' M% j
  396.       }
    * W3 {+ q: ~/ ?2 v. ~+ M
  397.     }
    7 V) K0 L  ]7 Q. K3 Z& w
  398.   }
    % ]* q) R* a* x3 G* Y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)" d& u3 T+ R/ ^& Q. i
  400.   {' g7 @' P& t! v. n/ w% `
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())  P5 O, T1 p9 ~
  402.     {+ I, S3 x0 \7 M2 p7 @
  403.       file2=(LPUPDATEFILE)(*i).second;; y7 w) H0 O  A* A) m! I$ ~  X
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 O4 a; l! C- @/ Y' s
  405.       {
    2 U% c5 K" E- C. x* i
  406.         file1=(LPUPDATEFILE)(*p).second;
    3 ]; k/ W) }9 _* j7 @) L. j
  407.         if(file1->vers!=file2->vers)9 {" z9 C- [3 S
  408.         {
    0 j* Y/ G/ j0 I. A
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 C$ o$ y- \* K7 [' T
  410.           c++;4 ]" j4 B! j* F! R' H! A
  411.         }
    - ^0 i3 E  _. E( L* [0 S
  412.       }
      f0 j1 U2 p! u! B) J2 R' ~
  413.       else( C2 g/ f& f& L/ @9 ~
  414.       {3 r9 _5 S* ^1 e7 \
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- ?% D6 ?5 O' T2 U
  416.         c++;1 G* k% ]6 r0 q5 R0 Q  J& W3 Z2 E
  417.       }( k' L7 V8 Y7 p5 C: E8 {
  418.     }/ ^: e# V' I4 k( u9 q1 |% U
  419.   }
    8 H5 O* u8 i1 R8 e2 v2 R$ O9 a1 e
  420.   unlink(".\\DownLoad\\update.txt");
    8 \" n$ h" K8 G3 U" V
  421.   if(UpdateLocal.size()) return TRUE;* G( k8 a/ }( i
  422.   else                   return FALSE;( X/ d9 |- a, W0 Q
  423. }
    8 w6 l+ j. c1 w
  424. ( Y+ `1 N- l  R" I, P$ j2 F4 N
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ! M! Y8 m* b9 _
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - @: b. |1 |4 z6 J- X+ r0 s

  427. 1 T( h, S* u5 v0 F
  428. 7 l' f  P+ v: W) l
  429. ( b: o  s, `1 r0 H  Q4 Q# {
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile). n: `; E; H$ K2 x8 s( Z
  431. {
    8 H5 O6 w) @) @( s5 S- r2 q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( b# D: J; a+ B" D% ~7 V
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " Q7 A1 z8 w) Z; o8 S4 G
  434.   {
    6 c  f% j# v9 q0 O' Z* h
  435.     char szLanguage[50];
    / A& q4 q! Z2 k  @+ w  @
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    - u) x; s1 Y8 I2 N" S8 e
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 w, T6 Z+ ]& |) J# L7 F
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  W4 W. a/ l* K% S7 M  M
  439.     else                                   m_iLanguage=ENGLISH;2 }5 y) U+ m1 U/ K/ `
  440.     char szRegister[100];# H1 x4 C% P7 K- v* F' C; o3 X
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    9 U* d: S  p0 C
  442.     strRegsName=szRegister;7 a+ z4 ~4 S0 l/ q7 g( l9 V
  443.     char szPatchURL[100];. x- x1 P4 T. t  }2 A7 U
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");2 o+ c$ J. v9 O- o
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- l& G, f  o) s, `5 @; N
  446.   }
    7 u6 T4 H7 s/ y# w$ V
  447.   else
    ' p! M) N$ d' r3 g9 `$ v
  448.   {
    * P& X4 f/ a, U1 O, ?4 ?
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 B$ i& H$ s2 q# z4 E7 d- t$ s
  450.     strRegsName=DEFAULT_REG_URL;
    ' j" w) t! [0 A
  451.   }
    : ]* m7 {4 h6 p
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ! l& X# d0 I  e" N4 ]( F
  453.   {& H) D2 D+ {+ T5 c3 @5 B$ [
  454.     char szIP[50];% S0 q) u7 O* S* l
  455.     char szDIR[300];
    ! F% B& h+ V# c8 p
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))' [# W( a' d9 B! _# \4 l
  457.     {; j2 R' Y6 G5 E3 d! T; [  i5 K& W
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");7 z8 e" H4 X" f4 x" V4 Z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    7 ^1 t& C! N* h7 Q$ m% i4 X+ {
  460.       strHostName=szIP;
    . O/ P0 k) f) Q) f  C, _
  461.       strHostPath.Format("/%s",szDIR);
      c7 ?1 R8 Y+ `9 u( w3 e
  462.     }
    7 T( I5 T+ j5 w+ |' r
  463.     else
    ( i# j. ]4 u4 n# |
  464.     {# y+ w2 M" r) y( ]0 k
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 j. P/ E( w/ q- F5 Z, f' T
  466.       {
    % Q1 t' N8 Z5 O2 C( Z, [
  467.         char szLanguage[50];
    : {. C$ R2 A9 b% U. l+ \
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    7 c" [- s' C! |; ?8 o
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 t2 S3 F+ O5 R) N
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # R$ I& z9 y3 a; s0 M, A: R
  471.         else                                   m_iLanguage=ENGLISH;" Y& u: v$ F! M) h- O5 C" c
  472.         char szRegister[100];
    7 G% `# m: @& r3 m
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! T/ p0 e6 T3 b
  474.         strRegsName=szRegister;
    ) r) |7 P$ ~7 H1 P% j8 @
  475.         char szPatchURL[100];! E. V8 V6 W3 h, T* g# n, G5 n
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 E, o+ _) s" {$ E
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 a* j  t* D9 I7 {4 z7 D
  478.       }4 e' }: m6 ~7 [' r
  479.       else
    - q4 B0 F+ \+ A
  480.       {; i* P- I! q( \+ `3 ?
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % a1 r4 d& s  c. ~& B1 E5 w( I
  482.         strRegsName=DEFAULT_REG_URL;
    # o* \8 [" G8 s/ t. f2 E" M6 s
  483.       }
    . x" _7 t, B# v5 a
  484.     }
    9 M1 q. I! K1 F6 F* d) I( F
  485.   }  B+ z; s+ O* O( c) ?  d
  486.   return true;7 Q7 B( F. c: ?. C4 e' z/ H8 H& M
  487. }
    ( M7 Z2 C# K! ~0 Y  p

  488. ( r, u. d3 }6 D6 h' @
  489. #include ".\ZLib\unzip.h"9 b. b  o6 K2 R- b7 y) T
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);" j/ C8 b2 ?! H
  491. /////////////////////////////////////////////////////////////////////////////
    . `$ l4 E2 {+ l( c' d
  492. // CRevAppApp initialization  v0 I; z# x8 {+ X% \+ y* d
  493. 8 G2 }7 M$ G6 G2 J( u
  494. BOOL CRevAppApp::InitInstance()
    ' c7 f5 u7 L  [1 j8 a
  495. {
    ! U- N* x! H0 [  G. P9 d5 c% M" i
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    1 K' }- e: P( @6 a4 r0 u

  497. , ]2 x4 ?3 Z. e6 E6 x
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    & J9 A- p* Y3 i
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))8 v: d% G& N' R0 e
  500.   {
    : E" g9 l9 e1 Y$ h/ Z2 w
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");, `* f# G# f. E; H6 f2 D
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    6 ^: [- l4 l! O4 I1 N, Z! z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))+ }7 g. t) F+ g" `7 @  _
  504.     {0 S7 R" U+ B, ]6 U
  505.       strcpy(szPath,szPathTarget);4 j) d; y5 {, f4 Q/ L% h* A
  506.       SetCurrentDirectory(szPath);
    ! Q' r+ p& F: C' Q  O
  507.     }7 c) q2 S7 w& f5 j
  508.   }
    $ |/ k. ]+ |  U
  509. #ifdef _DEBUG. `; [* |0 y3 E. Q1 Y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    & Y+ h5 `6 J  x  K3 D: f$ D
  511. #else: ?4 N2 P( x/ B
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' Q+ x' [9 b& w3 A% w' |
  513. #endif4 ~9 I5 r0 M& C! \: a, M) Q9 u: Q/ h
  514.   {" H$ e; b& j, i" a; b$ T
  515.     char tempFileName[MAX_PATH];) d) x& c; F# y  [1 Q) v* }' \$ t
  516.     strcpy(tempFileName,szPathSource);
    4 c- C% L- C) x* Y5 S% O- c7 d) s
  517.     tempFileName[strlen(szPathSource)-12]=0;0 R, q; Y( r: P; H, z1 f
  518.     strcat(tempFileName,"\\$CSUpdate.exe");9 ?/ ^7 w( V: c& ?" l' ?9 f
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);/ ~' J) V- _" N) g' x7 p9 h
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);' b; T9 N) E' B! t% W
  521.     return TRUE;  `5 V8 l1 R! K$ N7 W$ q, i
  522.   }& Z0 T+ {+ Q8 d0 A4 t
  523.   // Nuke 0118: Delete run.exe
    - r2 p4 S. D0 x; K( m$ d( m
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    & f/ P5 W% w5 r
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");, B( ^6 ^! }1 \9 @
  526.   if(!ReadCfgFile("Config.ini"))$ R! H6 d! y( m3 C  F0 w
  527.   {
      p* ^6 I9 Y5 `  d
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    9 H7 v, }  O5 X* E
  529.     return TRUE;, `9 d* F' q8 [' j! d$ q7 E
  530.   }5 F9 i! m+ ~% o" v
  531.   HANDLE mutex;" b) W; h) L4 ~9 x7 A: T
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 R  I4 D6 p" A9 i) K. J
  533.   {
    1 B& t+ |+ D4 i! A) y: z
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)1 O* Q( Q# C1 Z+ N4 `
  535.     {
    % k) }: f: n5 ~' Y4 O) H6 H
  536.       CloseHandle(mutex);6 w- v( f0 ]+ X5 x
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ( a3 D+ r0 w0 r
  538.       return TRUE;% ]. w3 @6 u0 {
  539.     }1 `! Y, f1 H& v2 e- ^0 t- G
  540.   }  + Z2 s, V" G3 [; V
  541.   CloseHandle(mutex);
    7 I: {6 V" n" b* W

  542. 2 X& w% ~+ F1 b* }' X# m. O
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    5 A+ n8 i( ~! Z( d6 m
  544. % ?4 u$ n; I3 ^$ {! _: ~
  545.         AfxEnableControlContainer();
    0 F( f0 f- U% z) H
  546. # ?7 \1 n4 Z0 E# c
  547.   bCanUpdate=FALSE;+ R; K+ n# L0 G
  548.   dwStartUpSteps=1;+ M( ]' ^) X; m* w& e: \
  549.   dwProgramState=AP_NOTHING;0 Y6 c2 R8 A8 Q/ k. o2 i
  550. - f2 K4 ]7 [. b. ]. O8 R; |5 r" y" Y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    2 c+ V$ y2 w! P+ E

  552. . Z' l8 p  |" j# R* H
  553.         // Standard initialization& R- ~3 e6 M! G0 V# W
  554.         // If you are not using these features and wish to reduce the size
    3 {) H( ^# W6 m2 o8 ^; K
  555.         //  of your final executable, you should remove from the following
    , K" t# I# l: K- x5 R; Y
  556.         //  the specific initialization routines you do not need.
      e* {, B" P% |( v3 c6 n
  557. : ^- j* M9 `  e7 n  D+ ?6 {! n
  558. #ifdef _AFXDLL
    5 I$ m) D) b; X4 o/ g! L- `  T2 i
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    3 w2 Y  u% H, I5 g: ?  ^- g7 I& O. J" r5 i
  560. #else2 M  l8 s/ g9 K
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    0 F1 u! ?  T8 K6 c7 ~! U
  562. #endif# Y# N8 q4 Z) i

  563. ( O" e& U; j* o6 r9 ^3 s
  564.   dlg=new CRevAppDlg;
    7 g: \: J% ]! _% P$ r
  565.   dlg->Create(IDD_REVAPP_DIALOG);; H, ~3 C' E) q5 n" L1 E' h9 @
  566.   dlg->ShowWindow(SW_SHOWNORMAL);( I* s2 `3 z- E) T
  567.   m_pMainWnd=dlg;, C  r# \* B% }. M7 Q* @) c2 r- N# v

  568. , k' \, w/ `0 p( S. p9 y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    5 T; e+ V4 {: ^& y
  570. 1 Y- c' D. S9 Z* O' E* }
  571. //  GdiplusStartupInput gdiplusStartupInput;6 w# @2 q  j* f1 _
  572. //  ULONG_PTR gdiplusToken;
    8 C4 J# H" ?$ y$ b  f
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);9 _9 i2 ?4 Q# Y  M
  574. & T6 @1 q$ k$ x  r" l0 {: y5 f
  575. //        CRevAppDlg dlg;0 M" b5 C- n: ~0 c" P2 w
  576. //        int nResponse = dlg.DoModal();: u. Q/ [& r6 ~' C( P' K8 \
  577. //        if (nResponse == IDOK)6 i) Z) t6 y, Z% j8 v$ l
  578. //        {/ ~' o4 q* g6 Y% [9 H
  579. //                // TODO: Place code here to handle when the dialog is
    ' r3 b8 H& U8 {$ f. }) j
  580. //                //  dismissed with OK
    " y; _% ^2 V: g  i
  581. //        }
    3 |, Z/ ]( K# e' x3 o* }: u
  582. //        else if (nResponse == IDCANCEL)
    8 N- p, E, t; g- I5 f
  583. //        {& i6 \' p5 d+ p
  584. //                // TODO: Place code here to handle when the dialog is
    * h6 N$ D( }" v  [5 a: W/ n% `
  585. //                //  dismissed with Cancel  B+ g( O  j* |& R' p
  586. //        }; l. T4 B" \4 z0 ?9 l
  587. ! I' I* ]1 G) u8 }( w7 R) t
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ) N3 a5 ~' ]+ d4 V0 q, J. Q4 v
  589.         //  application, rather than start the application's message pump.( O/ ]4 Q* W# {9 O- g! |
  590.         return TRUE;
      I- c+ C' g" n, `2 }
  591. }
    0 x& y: c) P- p! U4 z4 d! n2 N

  592. & g& l9 i+ ]9 T3 @, C& g
  593. char *CRevAppApp::strtok3(char *pSource,char *token)7 A$ y! G6 B2 \' j
  594. {% F( a' \8 j$ z+ g
  595.   int i;6 X" r; t2 x) @5 ]( d4 A! K. e
  596.   char *szRet;( A9 y0 V! \  N3 K  Y
  597. ) y% k4 d( L/ y4 P1 P. y
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    $ I) g. w( S! ~- ]
  599.   if(sztoken)
    3 k5 s$ z* e5 [8 x* W$ k0 [
  600.   {
    3 y7 [/ c% A% @8 T: t( Y  L0 L: \
  601.     szRet=&sztoken[itoken];
    : i1 [' @/ t% @1 ^
  602.     while(sztoken[itoken])
    % R. |9 M- L* L: a% p0 s! b
  603.     {! ~% b9 j* R5 s4 [$ z
  604.       for(i=0;i<(int)strlen(token);i++)3 \# p' i  P# `9 _5 ~5 x8 [
  605.       {0 q# D9 C8 \3 W* X8 X4 R
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    # v! V% S/ ]1 a7 G6 m* ~  y9 i
  607.         {
    8 R; Q% |& ^0 g7 [4 B/ I- S
  608.           sztoken[itoken++]=0;
    4 l2 Y% U9 ~/ h& p7 t! L" T
  609.           sztoken[itoken++]=0;
    & C$ A; w7 [( C  \+ \7 P7 Z% O7 l' R
  610.           return szRet;
    " B3 l; ?; }' Z( I% ^
  611.         }
    $ {) F1 e  ^* c, E+ c3 ^
  612.       }
    , v* `4 [+ @) G9 V
  613.       itoken++;5 G$ y, V- L; k- U2 m
  614.     }0 a  q! q: h. z! g4 F' K
  615.   }( Q2 \+ {. L4 c; `) E$ I; m
  616.   return NULL;' J& r0 y7 @7 X4 r
  617. }" u2 _0 \' W: i( Q( O' U
  618. 4 f2 S) B% ~1 |0 N0 n2 E( m! p' p8 G
  619. void ProcessProc(long Total,long Current)
    $ y2 o3 a4 T" E* m
  620. {
    6 Z+ @. U# w# K, P" e' Y
  621.         MSG msg;
    0 y2 n% u9 E  ]4 b8 }
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);6 T5 F0 c; P6 ]3 @6 ?+ {! M$ N
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    , v# ]$ C8 O) [6 t
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    % [/ ^- X" _. d. i9 ]" J* A
  625.         {
    # y0 z8 x% [' Q4 o5 K1 P' J' x4 R$ O$ h
  626.                 if(!GetMessage(&msg,NULL,0,0))$ Q8 T' y& n4 P& I1 v
  627.                 {
    ' b) a1 y) M6 v
  628.                         return;
    0 ?. L% }9 ~2 `$ ~% u5 Y! T- o* y
  629.                 }  V5 X% D( w( I3 G( j! t  ~. v
  630.                 TranslateMessage(&msg);
    3 m3 T8 H. K! ~. _! s
  631.                 DispatchMessage(&msg);
    6 _- ^: V$ y7 B! \# d7 O8 Y
  632.         }       
    ' C8 m# S, I  }" M4 D2 h
  633. }: w. |% ]5 V( K) T

  634. 5 |3 a5 c( @, c6 m
  635. BOOL bFirstChar=TRUE;
    . m2 u3 c  p' f( q7 l& R* [5 T

  636. : P8 K; h. H7 G* i0 g* r3 m. F2 w
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    9 z, T6 m* \9 z; T
  638. {4 W; p# m! ~4 D2 K" C
  639.         // TODO: Add your specialized code here and/or call the base class+ P, @4 A0 d) c! i6 h% t
  640.   switch(dwProgramState)! d  ~/ H+ h0 T% @
  641.   {0 F) ~( L% c& y8 E" Q6 w
  642.   case AP_NOTHING:0 \0 R* H1 d8 L$ Q; \
  643.     switch(dwStartUpSteps)
    0 F9 |3 M* G7 u! j4 m
  644.     {
    6 m. ~9 r2 D# \) a+ _: y0 R) H9 d
  645.     case 1:- E3 K) Z& j2 i5 k
  646.       {
    + @6 k1 W3 @- F3 d8 E3 g0 c
  647.         int i;; o" i, _; @7 }, x( G9 R/ w
  648.         CDC *pCDC=dlg->GetDC();
    0 [! w7 ]* F# M5 v0 K
  649.         HDC hdcwnd=pCDC->m_hDC;2 t7 h9 j0 O3 [- i- u2 t% r: X& H
  650. //        Graphics graphics(hdcwnd);
    ; r, K3 E  Y  N* j% n
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");4 |' N0 w" H/ w5 ^3 M( @
  652. //        INT iWidth=bitmap.GetWidth();2 I& ?' ?& @, p! S4 G1 h
  653. //        INT iHeight=bitmap.GetHeight();( v$ T" Z3 l! V3 M
  654. //        Color color,colorTemp;
    # a0 g  w# R) m' ?, g1 y7 A- W
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)) Q# e; B  K9 c/ K
  656. //        {
    0 a( {6 l5 E3 J4 [( W$ k( M
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    : n1 k' e" P' o" A+ C
  658. //          {2 x1 B( m9 F& V, c
  659. //            bitmap.GetPixel(iColumn,iRow,&color);+ ~5 Y& N6 o  T9 i6 h' U- d$ @
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 S* D5 M. W! i, s+ g7 E/ a
  661. //              (BYTE)(255*iColumn/iWidth),2 a8 g' O: y* |+ B8 `+ F! @0 {
  662. //              color.GetRed(),
    / L# E7 [: K) _" T. M# }! z/ r
  663. //              color.GetGreen(),; |0 B* N' N$ w- u6 \3 `
  664. //              color.GetBlue()));& X. ^- ~7 K. j  u! o3 X
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);4 O7 S/ T' [" K$ }
  666. //          }$ W* Z1 N1 F) b4 X' t* e5 L, g
  667. //        }7 O8 h$ L- C  v1 W- M9 ]/ p% B3 P2 J
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);+ k8 r: q& F# V) u: Z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 \2 p& m2 h. T; h: t# P
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ; i: g0 E& J; P/ x0 c+ }
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 L  k* G* e9 k' ~* V
  672.         for(i=0;i<240;i+=8)
    , k7 Z, _$ Z$ t0 B1 a1 [! O1 @7 p
  673.         {
    & ^5 O  G5 ^' \" J! H
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' [8 ~# m) u3 R% x
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 d# I- L, M2 i9 k  i; l& }
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 u/ w& Q: ]+ u$ z7 @+ F
  677.           Sleep(33);
    " x6 c7 s0 S7 a" D3 I0 m' d
  678.         }+ n, t9 n0 ?9 k  z: V8 z
  679.         Sleep(1000);
    ) F7 g8 [% e- N2 m/ f
  680.         for(i=240;i>0;i-=8)  h: G% M/ A3 [& |3 t
  681.         {, J, M, ^0 s, Q4 c6 B! `
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . ]* S6 f4 L  B0 G9 i( q& `
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - L, [5 A; S  z% O
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 c0 K  G/ h8 U- u) v9 S
  685.           Sleep(33);
    : ~& z; T/ @6 G. I
  686.         }1 O. |# X+ n) e% _; {6 t
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);% S$ U: G( v* t! ^% c
  688.         dlg->ReleaseDC(pCDC);' P/ Y4 @) g! m0 |' L5 J0 ?; C
  689.         DeleteDC(hdctar);
    8 [( x0 a( g' `& {6 K
  690.         DeleteDC(hdcsrc);/ T2 t6 T7 ^$ h. S9 i! c
  691.         DeleteDC(hdcorg);/ Q) _* d* y) P+ C
  692.       }8 s7 i) ]; V1 o
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ( `& ]* h% }3 e/ @  o0 T4 p$ p; ^
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' V& I6 W' E8 z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, M+ m9 _' v. U( A
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");  a' W9 A9 A! E& V; J) V! ]0 K
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 q! C- X  v. i5 \3 g+ i1 h
  698.       if(!Dn.Connected()). u' Q* C. a4 Q; p
  699.       {
    8 Q/ |& [  m  x4 d; b9 l2 m
  700.         dwTotalFiles=1;( d9 O# |5 {; ^8 l4 n7 Z' I
  701.         dwDownLoaded=0;6 Z5 w$ G/ ]0 K7 e
  702.         bSilentStep=TRUE;8 V0 F; _2 Z4 |/ r
  703.         bCompressed=FALSE;
    , s. f6 k" L6 f" ~/ d7 J& D( H
  704.         strExtLocal.Empty();& [% F' |& c9 q* h1 z# f
  705.         strFullName="readme.txt";
    # _. Z) u0 @7 K% s* ]: d, R! E9 T
  706.         dwProgramState=AP_CONNECT;
    + v- t* l0 n5 j6 ^
  707.       }
    5 t) f# j6 E; K
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();, d+ {3 ~' m% f1 T4 u
  709.       dwStartUpSteps=2;
    8 G! F$ s+ k& V3 O& w1 ]) ^/ \
  710.       break;
    ! j* n$ V+ T2 t& U% d; t$ B+ C. w
  711.     case 2:
    # k; Q; I! ^) W- L6 q2 M
  712.       {
    2 L* C: L. W5 K7 |/ ~. V1 z9 v1 [
  713.         int iEOF;  L% g% C6 Q) j$ r7 I' H  |
  714.         FILE *fp;* s: E9 w* k/ b/ Q. w+ f
  715.         char szString[512];* l- l+ W% H+ [9 Z. \) F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    6 b+ K4 _# e1 U& q* Y! g
  717.         if(fp)
    7 h# E, @# d0 w* K0 q  q
  718.         {
    ! V$ r$ I. R4 A6 R& v5 H
  719.           do
    9 }+ D. }3 V( W( E
  720.           {
    * C8 e$ B: n' s( P" t
  721.             iEOF=fscanf(fp,"%s",szString);
    4 F& m$ B3 d2 |5 o
  722.             if(strlen(szString))4 s; }1 a1 D3 p9 O6 y
  723.             {2 |, G3 u: d: q  |0 m4 E: ]
  724.               if(bFirstChar)
    : K% H1 W9 h( W2 S2 e
  725.               {7 |+ M! E( ?" ^4 R6 c2 h4 H! J
  726.                 bFirstChar=FALSE;
    ; J, s( r* C# I0 G! }% E% t2 B
  727.                 bConnectIsBig5=FALSE;
    1 q* V& l! Q" t1 l
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    9 ]7 p  l% L7 u+ E# ~
  729.               }4 i; n& f8 g9 f$ o$ h6 A5 F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    9 t1 d0 P1 d) `' e) n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));9 W# }" R5 p! T' f, g8 G
  732.               dlg->m_ListText.AddString(szString);! L9 E* z7 W( y- d& p  W* h' ^
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: [  ^# v5 ^% I' u2 j
  734.               *szString=0;$ J# u8 _+ \6 S# P6 T  h
  735.             }
    - m& g& u% ~) u
  736.           } while(iEOF!=EOF);" L4 z8 @; U3 K  D6 h* e
  737.           fclose(fp);" M* O+ F/ M7 G/ N
  738.           unlink(".\\DownLoad\\readme.txt");
    1 T$ c4 [1 @( D7 r
  739.           dwStartUpSteps=3;
    " F/ H3 [/ a4 ~; f" s0 N$ |
  740.         }4 c% @# K2 t+ \$ b, L8 i4 s
  741.       }; r/ {, a. L  X+ k7 M$ i" i- d
  742.       break;3 t& W( J/ q6 }$ U; b% [' w
  743.     case 3:; T2 C1 Z! x! _  u  j
  744.       if(!Dn.Connected())
    3 y% t8 [; C1 q" p- D: K( s, G
  745.       {
    , @" u% S# @( K6 r
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);+ b( x$ S& d+ K2 p7 I/ m+ Q, s
  747.         dwTotalFiles=1;
    ! u0 E5 Q. p! W  k; }4 ?* e
  748.         dwDownLoaded=0;6 \% I4 p% Y9 y5 ]) W# P" N7 P
  749.         bSilentStep=TRUE;
    . t3 V! g1 Q. P2 _
  750.         bCompressed=FALSE;$ m: v; ~  B. W" [( X
  751.         strExtLocal.Empty();8 ~- C/ [8 E- e; y3 b) S
  752.         strFullName="checkversion.txt";# X. f1 x% P  l: E- h
  753.         dwProgramState=AP_CONNECT;
    , U# @" n' Y( T
  754.       }# O/ r3 @0 S2 ~3 q
  755.       dwStartUpSteps=4;
    - \/ w& I. f0 c3 R! V
  756.       break;
    ( x" T9 x* S4 J, l
  757.     case 4:
    % v% `) [9 M$ E  W  q6 o; ^
  758.       {
    * Q6 j" o! {$ S
  759.         FILE *fp;
      f/ ]) Q9 o8 p. F7 P4 B
  760.         char szString1[128];5 v' y9 y+ G. L
  761.         char szString2[128];4 U) a; \: }# V2 a( G2 @, x* H
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; H; [* |! O- X5 [8 M
  763.         if(fp)" V* l3 S) o, Q8 r& h8 ~# S* ]* B
  764.         {& t: P& n6 o4 n" B3 h( b3 Z3 H" y. n% v
  765.           fscanf(fp,"%s",szString1);
    8 O8 f9 |! ^5 v/ }
  766.           fclose(fp);
    9 `$ H! I3 b2 e! q
  767.           fCheckVersion=atof(szString1);& Y1 f1 N7 l: R$ ?% a
  768.           fp=fopen(".\\checkversion.dat","r");
    ; m: x5 m7 s1 B# G3 H5 k) h* X
  769.           if(fp)) L7 _. N7 D0 K6 R% ^4 D3 q
  770.           {' G2 ^0 n7 z0 \
  771.             fscanf(fp,"%s",szString2);- E' R0 ^6 f9 Y2 [! T, \
  772.             fclose(fp);
    . Z# Z! p% b" p. H0 U
  773.             if(atof(szString1)!=atof(szString2))
    6 z! S" j# K5 H  d  R
  774.             {
    / L+ O$ W; i5 G- ~1 \0 C
  775.               if(!Dn.Connected())
    ( G7 r2 s& X! E2 W" J2 z
  776.               {
    4 @+ ], X: i9 L# b6 H2 Q% [
  777.                 bFirstUpdate=TRUE;
    7 E7 T. J' I" p; w; H' f7 \
  778.                 dwTotalFiles=1;3 a/ \: c/ l* |9 |4 _8 t' |
  779.                 dwDownLoaded=0;
    # z; ~- t: c9 `3 r% l, c; `
  780.                 bSilentStep=FALSE;3 q8 K9 \1 M0 _3 J/ M7 h
  781.                 bCompressed=TRUE;" d. }, Y' H3 ~$ b" I) D$ t1 p
  782.                 strExtLocal=".\\DownLoad\";5 R3 y6 |9 _' P# ]6 P, |" d1 a2 a
  783.                 strFullName="update.txt";
    . p& x# A# ^9 \" D* z" r
  784.                 dwProgramState=AP_CONNECT;' Q0 a. j2 P4 M) n) r4 Z4 m8 u
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");6 V5 q% [' O$ L* r6 b) U  C
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & O0 G2 Q+ r* ?; t$ u; `
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    / a# R' ~( m' E7 q5 b
  788. $ h( B/ b& F: d5 r/ U4 l/ q+ o1 ]
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 j% S# p+ G6 T) i7 V, |
  790.                 unlink(".\\DownLoad\\checkversion.txt");5 G: b. x4 T) `3 O/ Z
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)# u3 n2 \0 w* i
  792.                 {8 j1 S' y! ]" V
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");+ W; b; c: b. J! |7 k+ {  Z
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");: s0 @, A2 Y- B+ b2 |/ Q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");1 C% u9 R+ l# t1 Q; L* v- }$ J! ^7 D
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 _, x& J6 t9 X& x+ c$ H
  797.   F& s+ A' u3 t/ i6 @
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , |1 a. T  c0 i# O( V: g6 G/ U
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' Z: h/ w1 q( G0 f' c3 p
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 |. H; z$ P7 w6 T2 }
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  S$ A3 |' |4 F1 I7 T
  802.                 }
    2 \& W3 Q" n: g% S3 I
  803.                 dwStartUpSteps=5;$ x. a( C! y& W  E% _% x% o/ ?2 ?; o
  804.               }' G; H- v" d9 i! [5 {
  805.             }
    $ g2 M0 z$ ~8 f* M, F! [5 L! _
  806.             else
    # n: N+ P1 S. n2 B! q- [
  807.             {, b0 w! U! Z# n% j+ }# O2 H+ C: K
  808.               unlink(".\\DownLoad\\checkversion.txt");
    5 Y- ]8 N3 H8 H5 C" B$ O7 K! {
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / O' k% y+ ?& C8 A) m* U
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    , a. B* }* u5 M, h* p' p6 I
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' N1 q) x. M8 v

  812. 8 v0 @% t# `! j9 e, _
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & E7 x) Z9 Z$ F2 j# l$ q
  814.               dwStartUpSteps=99;
    7 }, D9 u0 E6 J8 w; j6 N& P3 k
  815.               bFinishUpdated=TRUE;; P* H6 C  o4 G2 M% u% E
  816.               bCanUpdate=TRUE;
    % p# P2 j1 P$ d  W& h
  817.             }' g$ [, N, {' v! k, r' }- z6 ^
  818.           }2 j! a# l' P% ]! r/ F3 S
  819.           else% k, [. [/ w! a
  820.           {
    0 T$ e1 _! L/ H# S
  821.             if(!Dn.Connected())! e7 t1 h! I! b  c; F+ _! V
  822.             {
      ]$ Y( t) u% m/ z0 `8 F8 A
  823.               bFirstUpdate=TRUE;
    / K4 Q  K8 ?, Z' j, K7 u# r( k
  824.               dwTotalFiles=1;5 j7 R2 T/ T) ^% p
  825.               dwDownLoaded=0;
    8 h0 U% i$ D. Z. K* T
  826.               bSilentStep=FALSE;
    / P0 [* [) M  M" `
  827.               bCompressed=TRUE;
    5 Z% r( h! A9 X
  828.               strExtLocal=".\\DownLoad\";4 Q; n  ~' U1 S! E) c/ L
  829.               strFullName="update.txt";/ o" @4 ]8 n# a  I
  830.               dwProgramState=AP_CONNECT;: ~7 F# ~( N/ D* ~+ {2 e3 }; q+ q+ B+ r
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 Z( _7 V+ \  n- F6 Q+ |
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 h4 b5 U% e/ Y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");' T+ W* S* T# n8 F: Z  ^) ]
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 e0 O3 k0 ~* @! m- q, u
  835.               unlink(".\\DownLoad\\checkversion.txt");' \% Q. s  b3 p& T" r& b+ r" p9 f+ H
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    : B0 Z4 ^. {3 z5 [
  837.               {
    ' q  ^; d- y8 V( R, ]# s; e
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    / s/ w4 t# M7 Y
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    6 N! N/ G, ^4 p* _0 ]
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
      l; ?4 J  y  r* |! g# @
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 l7 N2 p/ \6 K: R
  842.                
    ' A% u7 {& W7 c5 i0 O4 M$ Q
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 h/ s* }+ Y9 B# \5 O4 ~
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 {7 R% v2 j' e% e- J  z
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 r& |% j4 P% X3 Q8 `  e0 i1 c
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 {8 ~/ T9 x; }& h: i
  847.               }
    ' f  q0 K0 |8 ?. R
  848.               dwStartUpSteps=5;
    $ G: g2 w6 W* ]  c2 _& p' f: t5 A
  849.             }
    : t' R( r( ]. x- v# X
  850.           }
    1 U5 S& A2 l. w- Z
  851.         }( A& a' u1 E* Z: b, a
  852.         else
      M7 ?! a1 j6 _: @
  853.         {
    % ~) {! w* Z* u2 S! U
  854.           dwStartUpSteps=3;
    - p+ _7 B$ H& v1 N* b2 C
  855.         }; Y8 d1 x. P- ?- @) Q; _. G
  856.       }
      m5 \! S7 M4 a, q; v% I; w2 h: n
  857.       break;9 m& G0 C4 g7 z! b! H7 b, j
  858.     case 5:2 ~# P6 Z+ X! A( N  @
  859.       {. z2 `# J& S% }2 \+ o* a
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ) f# e8 v; R3 s# L% U0 t
  861.         {
    7 E7 C4 ]" |$ i  p
  862.           int opt_overwrite=1;  Z# Z9 b* ]3 t3 D" N& J
  863.           int opt_do_extract_withoutpath=0;
    7 `! D; N: O; ?3 Q" P( d
  864.           unzFile uf=NULL;
    ! r$ M0 K$ O- g" g. M4 W# ^' O

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

* D$ p; M* n) O- E- \* |
/ X. C& P9 P* v' K& X. l0 v6 C

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-8 23:30

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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