CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
" L7 D& ~2 r  m( M1 S3 ?% O* T
  1. / RevApp.cpp : Defines the class behaviors for the application.
    0 @  x! J* {0 a% U' f& M
  2. //$ t/ y+ f+ |! ^' e7 ~$ ~

  3. 7 U& c2 s! o# Z3 E: e
  4. #include "stdafx.h"2 w  l1 {; L& B& z( v0 {* r

  5. ) D$ s' T, M: ^% O5 R  A8 N
  6. //#define UNICODE
    3 W2 t0 {1 a0 Y- i* W1 d7 a3 d
  7. //#include <gdiplus.h>
    2 U2 z; j  f* h- U9 O; s
  8. //using namespace Gdiplus;
    9 \) ^6 i8 n% s- O" p7 s

  9.   R- |- C  R* `0 c: M0 Z
  10. #include "RevApp.h"
    , X5 S  B8 A: Z& p& J4 s' n" [
  11. #include "RevAppDlg.h"% C3 t5 N1 \, Q& O+ u

  12. 1 X" E9 c, R( f1 }# i
  13. #pragma warning(disable:4786)- |! M5 `' x/ G. R. ^0 L
  14. #include <map>
    ! O6 T5 S4 U0 I) w( e
  15. #include <list>0 `2 ~  v" }6 C6 C% M
  16. #include <direct.h>' b/ F/ k$ [' e& A! B3 C

  17. ( [& \5 e' @) w( ?4 C/ @
  18. #ifdef _DEBUG- G2 k4 V2 h6 ?+ p  [3 i) s
  19. #define new DEBUG_NEW
    ; J& O+ t, \6 Y3 Y. W
  20. #undef THIS_FILE
    ! D& R, ~1 l! }: V' Q
  21. static char THIS_FILE[] = __FILE__;2 S6 v1 ~9 a# l7 Y$ A$ l8 {
  22. #endif
    6 I! P' |+ s  k8 w$ P% I) {1 A
  23. #include "SkinResDef.h"  O5 F5 ?- V/ J6 ~
  24. #include "ChangeBG.h"' a& B$ c! {% v
  25. #include "AFXINET.H"; ?3 `+ m* B9 _

  26. 2 Q- q9 o7 n' ?" C
  27. #define TRADITIONAL_CHINESE 06 k; T" m/ }4 `8 L- r3 \
  28. #define SIMPLIFY_CHINESE 1
    1 N' z4 D1 q' u, a7 g+ m
  29. #define ENGLISH 2
    1 A0 c4 R8 A) ]. s
  30. int m_iLanguage = ENGLISH;" Q' N1 N, t% v7 V
  31. /////////////////////////////////////////////////////////////////////////////
    3 s% h) }4 P1 v2 l: }
  32. // CRevAppApp
    , q& i6 j9 I9 u# O8 D+ w0 r
  33. * z  E) c% D: q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    9 }3 A: d. \  X( Z: I
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    : C& @% c. W2 H, m. `8 s
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ) R1 l  }3 _& @& \! V: Y
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!# T. {; p) `1 p( E, W; w( m1 r9 Z4 Y
  38.         //}}AFX_MSG
    & X+ k6 K; J% N+ ]
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    $ c( k5 n9 T$ y# m+ ]
  40. END_MESSAGE_MAP()
    % D; [; J" A& X" h# t  I
  41. ' O" ?& f5 r" K" S2 i
  42. /////////////////////////////////////////////////////////////////////////////
    # x: Q) p& x1 Z$ }' [+ @/ P' J
  43. // CRevAppApp construction; D# D" i1 S( D$ p% X: `
  44. ! i- j6 E5 ^1 f, _
  45. CRevAppApp::CRevAppApp()" ?+ O7 h) C5 f" I! G
  46. {: L( T0 W9 m5 J, J5 N
  47.         // TODO: add construction code here,
    ) U- D, z* Q, p0 [6 _
  48.         // Place all significant initialization in InitInstance
    ( V4 U" X; m8 F% z/ p) S) j( O
  49.   bDisplayIsBig5=FALSE;' a- {& |0 q4 {. G2 y4 T
  50.   bRestartUpdater=FALSE;3 g- q4 B2 n/ }1 T
  51.   bFinishUpdated=FALSE;0 f: Q- a( w3 `. M" U2 }
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;% E% |) S! l$ R* T
  53.   InitChangeDataBig52GBKS();
    & t+ K  a  r* {: w7 K$ y' A; Y
  54.   InitChangeDataGBKS2Big5();
    1 D  j  v. W2 O8 D( h/ n) ^
  55.         /// w, J- T0 {( ^* c; M
  56.         bClickRunExe = FALSE;  P7 h8 s2 o2 H$ ^( @, m3 t
  57.         //9 z4 H" d9 Z' T9 c4 g2 L# j
  58. }1 P( p$ M: w; C! e- y
  59. , y; A. I% |1 N+ @5 e. c! {# {+ }+ S
  60. CRevAppApp::~CRevAppApp()$ I' k: q. T% w1 `1 T! H
  61. {
    ( M( b) E3 u6 t3 W7 U, T
  62.         // TODO: add construction code here,
    4 K9 n9 ]/ O; n3 m3 M+ y9 j, G
  63.         // Place all significant initialization in InitInstance+ f1 N) ?5 {7 H4 r: a
  64.   EndChangeData();: r1 z) }6 p* D2 D
  65. }7 O2 |" l$ ~. T8 t" Q& U
  66. ! O; w- _. P3 e1 l1 K- d
  67. /////////////////////////////////////////////////////////////////////////////, {; E* _& e: D+ \7 l" U
  68. // The one and only CRevAppApp object6 ^, J( B) Z6 m7 n, J: G, ]

  69. : k+ T4 V2 e$ v" C  ]2 l6 k
  70. CRevAppApp theApp;* e- P. E$ S  a/ U0 g. Q9 m
  71. ' |2 q1 k( \3 `$ @  [( W2 C8 x
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)5 x8 G, j6 }9 x3 y/ W% J; G# {- w
  73. {, k1 k( f' u! d, r* k9 y6 i  @
  74.   int iEOF=0;5 a! B# ?' P" b; ~. B- D/ B5 ^' i. d
  75.   char szTempName[MAX_PATH];. q8 v- W' T  ?  F* _0 d! r
  76.   *szFileName=0;3 j: w; G" t6 s; }6 A
  77.   iEOF=fscanf(fp,"%s",szTempName);
    1 p6 h7 J) n: Q; K3 R! I
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    % C% @0 Y  J8 z! C' J* p' q
  79.   {
    ) T/ _1 D! s8 n3 O' i! }0 F
  80.     strcpy(szFileName,&szTempName[1]);
    5 z4 U- {& Q7 p( |
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    - F* F8 T( j# R- `0 K$ @, P
  82.     {
    8 `& |; i. {/ d* j0 w% O, O. M
  83.       iEOF=fscanf(fp,"%s",szTempName);
    & s6 p: f! f3 v# Y1 ~
  84.       strcat(szFileName," ");
    ! {& U3 b/ @6 U1 x9 x% a* H
  85.       strcat(szFileName,szTempName);7 N! _/ L2 K% t5 B+ R
  86.     }/ y5 ?$ r/ S  H9 N' j; ?
  87.     if(strlen(szFileName)>=1)
    5 [; g0 h  {* j' F1 M6 l
  88.     {
    ! }3 g  x$ Q% i  T9 A
  89.       szFileName[strlen(szFileName)-1]=0;
    : o$ h+ g! m/ S& w2 o
  90.     }
    $ d) b6 x) ]  _. c( T* Z, p" h
  91.   }% N0 o5 w" Z6 |- y6 x: L
  92.   return szFileName;
    ) R+ i$ s+ B2 D4 H3 W8 J
  93. }1 z% H4 d2 x; q3 _
  94. . M' V6 \, _. `. ]0 i
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)  P0 O9 Q2 t2 p* N1 c5 \4 J2 |
  96. {
    ; n, _" @' Y$ W
  97.   FILE *fp;) l* M; Y+ M, ]) ]7 b
  98.   char *key=NULL;
    ) r+ g6 w) O- n" c9 K* [2 ~
  99.   char version[MAX_PATH];
    ! l4 Q5 N: o$ j3 p' k1 L2 B. A
  100.   LPUPDATEFILE file,olds;
    + N1 W2 G, t  l& b2 c
  101.   std::map<CString,LPUPDATEFILE>::iterator p;. ]3 x/ ?5 W# b& N
  102. 2 p. q9 P' W% T7 d1 \
  103.   UpdateList.clear();) h, D- M: l; e
  104.   UpdateFile.clear();
    5 a: q% h0 l7 u2 ]# H7 q: j
  105.   if(GetFileAttributes(filename)==-1) return false;  H( v* P; a$ i. l2 p; S1 h$ v
  106.   if(!(fp=fopen(filename,"r"))) return false;
    1 {! e6 G7 t$ f- l
  107.   fscanf(fp,"%s",version);
    6 `5 O+ R* r6 e+ O
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    7 \6 j) M* A3 c& @% I% W
  109.   while(fscanf(fp,"%s",version)!=EOF)7 c3 g1 J$ a$ {$ V& m4 h" q0 e
  110.   {6 x/ C( ^% R, _, G# D1 L/ O$ e
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 o5 ?& S) h5 I( c/ ]8 ~% k
  112.     fscanf(fp,"%s",file->path);
    ! I0 V9 L* F9 w* o) b7 M0 P8 M; j
  113.     ReadFileNames(fp,file->file);' C5 `! U5 V, M
  114.     strcpy(file->full,".");
    3 G9 F& @9 `1 f# C% P
  115.     strcat(file->full,file->path);
    . T* e7 ?' _  F4 y# D3 a; z
  116.     strcat(file->full,file->file);! Y9 l7 x/ v: ?  Z: ?* c* ]
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())1 M3 y) H4 x8 a) U
  118.     {
    / U8 t1 @9 g6 A! E0 Y% J
  119.       file->vers=(float)atof(version);3 u! j1 ~, D' U$ o5 e2 D. r0 q
  120.       UpdateList.push_back(file->full);! ?( Z9 j7 ~1 O* A) D" n; f% k
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));1 ?- o( B5 u3 {6 H  ~
  122.     }  N7 z  S$ C6 Y6 F
  123.     else1 n, Y, L" Z. f* L; w& h
  124.     {9 @5 `# K3 e  S5 k1 H
  125.       olds=(*p).second;" X0 V% i1 v! f1 |0 D. R
  126.       if(olds->vers<(float)atof(version))
    2 {+ R) F! f4 ]& w% g8 e
  127.       {
    * g' l5 _7 B/ n+ E1 L  j  W
  128.         olds->vers=(float)atof(version);1 s, M. V* y7 h& C
  129.       }
    $ E, s. ?9 j0 ?, W5 s
  130.       free(file);& X/ ]- g' R9 g9 P% |$ ^6 R
  131.     }
    + v1 D0 ?4 m2 J+ J: q
  132.   }9 t3 g& p9 w& l; `8 I) y
  133.   fclose(fp);
    3 Y5 n9 R  n/ S( Y* Z7 S! p
  134.   return true;
    $ x5 I+ T9 x! d6 Q! j6 U, T
  135. }/ |6 Y7 i6 l  ]# R' D+ p

  136. 7 t4 v2 H) M2 {( l" i
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  N1 W' w8 `) J0 t, I
  138. {
    8 ]( }+ @) M7 R1 e( U
  139.   TCHAR  szFull[MAX_PATH];
    ' C; s/ B7 G. u6 {
  140.   TCHAR *token,*inter;2 M4 E% i1 w* Z. o
  141.   *szPath=0;
    / l8 J$ {. r  B3 \  j. \- u
  142.   strcpy(szFull,szFullPath);
    4 q( z7 k6 Z9 O" ]8 u
  143.   token=strtok(szFull,"\\/");
    3 V. }2 n: T. j
  144.   inter=token;
    ( h9 u$ F, q& G& F
  145.   while(token=strtok(NULL,"\\/"))
    / c8 f: S5 d3 u5 ~7 ^1 k( k6 V/ @
  146.   {/ n& C* u0 N! h- _( ]7 T
  147.     strcat(szPath,inter);
    8 _% D6 j8 l7 v! v0 L1 M5 @7 v: G
  148.     strcat(szPath,"\");$ a. C: J& {. Y, v/ D8 X+ S8 V+ ?" V
  149.     inter=token;7 F0 ]( V4 Z2 l/ T$ U
  150.   }2 {5 x" V9 |" U" L2 N- f: k0 }
  151.   return strlen(szPath);+ c! t/ b, E; E
  152. }1 b  M$ Y0 b: g" G( Z$ E

  153.   n+ E6 ?' ]& X5 F2 Q1 i3 t- V
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    & l$ c- o: C; i, h( R; `
  155. {0 V7 o7 H/ ^* B9 B
  156.   DWORD attrib=GetFileAttributes(Target);0 [  u* P9 }& a& R! }
  157.   if(attrib!=-1)
    6 M% }/ Q- g2 U0 I
  158.   {3 f+ {, j8 l1 p* m6 _1 Y' [9 G5 S
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))  Z' k  O2 g' Q8 O+ B" g) a
  160.     {$ s0 d& F+ b7 \3 Q
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    7 d) @9 t# _8 u  t/ d5 n4 H. u
  162.       SetFileAttributes(Target,attrib);& a" U+ V* Z* Z( U5 n. K
  163.     }- M* Q  v0 T( f. H" d. w
  164.   }
    / f; I0 ^) N# \, z' b0 _9 n6 |; h0 `% B
  165.   CopyFile(Source,Target,Erase);& W! l/ H3 {" h( L- {
  166. }3 {" l- G6 f# A7 u- H) }6 q
  167. # `# F  M7 m9 f. Z- }. i
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    # \7 B$ E1 {7 y+ D2 z, K
  169. {
    / V) D% T2 l+ N. y4 ?" V" `
  170.      FILE *fp;
    5 {; Z( J! w: z9 Y9 q) X' ~) {+ M
  171.      char  szBuffer[8192];
    4 ]+ r1 j7 h  ^: H9 Z$ }
  172.   va_list  argptr;/ s) L2 t0 M3 Q# |- i, y3 p5 G1 X" I
  173. ) v/ y8 _7 N3 L1 L
  174.         va_start(argptr,message);4 [$ f( W1 h: E4 O* j* a
  175.         vsprintf(szBuffer,message,argptr);
    " W) k' D+ |1 L
  176.         va_end(argptr);
    0 b: a+ @, T# a( ]8 D- U
  177.   fp=fopen(FileName,"a");$ ]* @' e* o1 E' x! d8 @9 c
  178.   if(fp)
    " p. K; i# l. B) x$ U/ ^
  179.   {  @  N* \. \) v, ^; E# b
  180.     fprintf(fp,szBuffer);) W2 z3 O( _, o. i, s; f
  181.     fclose(fp);
    + o/ B* e% A3 d
  182.           _flushall();. A! ]/ |% Z2 ~+ F2 J0 E; Z
  183.   }
    * w( f( ~, p; [" t3 l
  184. }1 \( Z* t( x6 S) K

  185. " T7 }+ G4 {7 T3 G, h8 m! s: z
  186. BOOL CRevAppApp::Fclearf(char *FileName)6 ~+ O1 Z# E% }; ^( a/ c* p8 D! u
  187. {* C$ ^  H3 ^. Z9 u; w- |! ?- ~* v
  188.      FILE *fp;
    5 R/ m$ [3 X) Y# P; b0 D. X
  189.     DWORD  attrib;
    + h* t% \. Z1 a2 @- Z- x! F% k: K
  190.   attrib=GetFileAttributes(FileName);
      A' w- r  G0 c8 m
  191.   if(attrib!=-1)
    7 c6 v, U9 F$ @7 e; `% Q
  192.   {
    0 V! C( \- Z7 ?$ D- W& |4 U$ u7 s
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    & c  Q3 U  }, a, `# ^
  194.     if(!SetFileAttributes(FileName,attrib))( z0 C0 ~; d; g5 ?& E! K$ h
  195.     {
    4 O3 ~* p( u* F4 Z6 j2 ?
  196.       return FALSE;
    ; r( K! v0 ], I: E
  197.     }9 P; z9 ]4 y, |, \
  198.   }
    3 i' q% F' j7 k4 Q: N, E
  199.   fp=fopen(FileName,"wb");
    9 e, r' b, L4 }5 f8 x
  200.   if(fp)9 J: @6 q  n; u
  201.   {
    & C& o1 x* i' @" K- |# s9 M" C
  202.     fclose(fp);
    + p4 u2 b6 C0 G* N8 S3 t
  203.   }, `0 t9 C0 G9 |) S( j& P
  204.   return TRUE;
    - S+ P  Q( m3 g% _* _3 [% @
  205. }
    * r5 \& N+ Q! p5 D2 w
  206. 6 j8 f. U6 [& }9 d
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    0 E& S+ b# O% Y7 m9 ~1 j
  208. {
    + P: _0 n1 q2 m0 M7 p1 K
  209.   char filename[MAX_PATH];/ J2 o& b/ N+ c  K7 J
  210.   LPUPDATEFILE file,olds;; C/ Z0 n; G  P5 `; N
  211.   std::map<int,CString>::iterator i;- W2 l) i0 G8 f- F
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
      o5 U/ q9 ?6 Y3 H
  213.   std::list<CString>::iterator l;
    " M5 ]2 M- G' b2 H

  214. + V6 ~# ^$ G! {; L9 U5 W
  215.   if(bFirstUpdate)
    2 ?) i- n( d" ^' O% ]& y  b* t! z
  216.   {6 C" L; P8 O! l3 W( d1 v
  217.     dwCurrFile=0;
    / \% z! j% }+ h4 P$ W% B
  218.     bFirstUpdate=FALSE;% n% A- k* w7 i
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      K3 ^$ y  J3 K# Z2 C# E7 F
  220.     {* z2 Y2 s! V5 M' q+ ~, Z8 }0 i
  221.       dwTotalFiles=UpdateLocal.size();, ]0 i0 v  r! [% F
  222.       dwDownLoaded=0;
    + Z" B3 Q1 Q1 `- N3 x* W
  223.       bSilentStep=FALSE;: P) N' y, E( u! ~% n& E3 C- o- \
  224.       bCompressed=TRUE;
    7 a# L0 W" a5 l# V7 z& a+ ^9 }
  225.       strExtLocal.Empty();/ g2 C0 }1 a" {% V5 }, O* Z
  226.       strFullName=(*i).second;* V* r. D/ x6 c3 {: y; n8 L
  227.       dwProgramState=AP_CONNECT;
    0 p. b, a/ z; {, d; ~2 E: Q
  228.       return TRUE;5 y1 E. l- d$ z3 p6 d
  229.     }  A8 t3 [6 D4 \# O: P# s
  230.   }. x! B) J+ A; Q/ m" S1 j
  231.   else if(bRestartUpdater==FALSE). M( `2 F% ~/ Q
  232.   {0 X8 S& y3 C4 A7 v1 A, y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())" i3 D9 P6 b+ f6 ^# ]& T
  234.     {1 A# a2 b! Z* [/ K
  235.       file=(*p).second;
    : f$ s; V" F+ }7 y9 x! X
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())) z0 A: O* g: x* ^* n1 G
  237.       {& H% O- Y/ x) S1 A8 v! A
  238.         olds=(*p).second;
    + o9 j% R7 N& e! F# H
  239.         olds->vers=file->vers;
    - m) h. @3 E: F5 V( [# ?
  240.       }
      ^  O. L9 L& N1 x( ~% m  Z5 o
  241.       else
    & r4 ~: Z; W) A5 K" U" I, P
  242.       {% g: Z2 Z+ H6 n$ x) x) }
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' \/ }1 U6 G8 o: Q: F
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ R5 {" t# u; A# U4 o/ _5 j4 _& T
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));0 d/ s0 m3 q  N, k
  246.       }' B: k0 {, Q  q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");5 t; l( w# i5 |  i: `, C8 R' V
  248.       sprintf(filename,"(%s)",file->file);8 U$ I8 a& _/ i5 I# ^
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; R$ m. S& q% A; Q1 J8 X% p
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    % J, t3 i+ O5 |# S* @, o
  251.     }
    : R. |  W6 l6 T# d6 e/ g
  252.     dwCurrFile++;
    % t% X; j5 k4 Q5 Y
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 F8 g- f) o: q& a8 ^: J
  254.     {
    : d3 C$ s: b9 @* U& M; c4 J
  255.       bSilentStep=FALSE;
    ( E; N+ @) M8 {1 a4 H# c2 d
  256.       bCompressed=TRUE;, O  [/ z$ `% S' q1 V) x
  257.       strExtLocal.Empty();
    : G* Y* s  H( j0 X' F
  258.       strFullName=(*i).second;( t/ a& o4 Z$ j1 I+ {* P
  259.       dwProgramState=AP_CONNECT;
    5 \2 j1 A7 l: Z- i( B$ i" a' J/ v
  260.       return TRUE;
    # K5 x2 J; A5 p  L( `) p
  261.     }4 k: ^5 F) Z4 \6 N; z
  262.     if(!bRestartUpdater)# I) q7 k. C$ o, n7 T
  263.     {
    ) K/ A# h  W: A6 M5 C; a
  264.       int iCurrSize,iFileSize;
    5 v' l0 N& R" @2 J9 ?
  265.       iCurrSize=0;2 z5 J2 B3 ?4 a' F. f# M  W6 G; q
  266.       iFileSize=UpdateList2.size();
    8 _: h; Q0 N) h8 h# e1 t; _
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");9 e4 e: K0 ?' W, J' e
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");+ a6 d8 |4 Y$ }) b1 e) @/ T& p% R6 l
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");4 ^- G0 S( A& G+ l
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' v% w5 e7 `0 `1 Y2 I
  271.       Fclearf(".\\update.dat");; F% E2 W$ M. k5 L3 P0 R) h
  272.       Fprintf(".\\update.dat","Bloodyf\n");3 k0 b& l' x. \/ z" E
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)& d% Y% H: j( s5 r8 I, C
  274.       {  N$ W0 x  S& D* m* v6 P
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ) f" _& P) a( q
  276.         {; N% }- b! _' D1 B. }: }" \* X: T
  277.           file=(*p).second;5 S: K/ T9 Z8 v
  278.           sprintf(filename,"(%s)",file->file);6 ]; t5 N/ [3 Z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : L' Q4 z5 x6 Y& I6 b
  280.           iCurrSize++;; Q+ o- A4 x! m  V$ H6 h0 M
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    9 e1 \* D% {2 C. \
  282.         }
    : ^1 A. J* d+ D& c: A
  283.       }
    $ H& ^8 C# d4 k& V6 u# T
  284.       unlink(".\\update.txt");
    ) t1 d& i) e4 X* P
  285.       unlink(".\\update.tmp");0 |( ]) p9 K. c- T  U% J( U
  286.       Fclearf(".\\checkversion.dat");
    0 T4 c3 A% h! I
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    $ j3 M' x) b9 R. J" ^
  288.       if(UpdateLocal.size())# ~' N" C5 {- |" d2 Y3 Y- y# l, v
  289.       {: [7 e- a2 f# m$ J
  290.         UpdateLocal.clear();1 F' X8 m1 b7 V6 C2 y+ d
  291.       }9 u: V! j$ O5 q7 }8 @
  292.       if(UpdateFile3.size())
    " C- Y! N. B( x
  293.       {
    1 E0 t$ Y% G3 a7 B# L
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 g9 L/ D2 A/ L. y$ D6 G8 P% ~
  295.         {
    1 b8 P8 K3 w- g# V! G4 b$ [" p
  296.           file=(*p).second;1 G$ ?( W6 u6 \# {  `# S3 a9 Y' L( C
  297.           free(file);  s& u, d+ |$ v4 R
  298.         }/ f' h& @) ]0 c" ?6 [, W
  299.         UpdateFile3.clear();( ]& g( o9 `1 M3 g8 {9 B# u" r
  300.         UpdateList3.clear();7 O  F& `( ?9 ^+ C
  301.       }; O( o0 C& o6 o: q
  302.       if(UpdateFile2.size())
    5 E+ J" r% i- U# w* Z9 e$ C2 @
  303.       {6 t+ k1 e. B. T1 K
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! G4 K. C" e$ W4 h
  305.         {1 e$ w/ ~+ |6 z
  306.           file=(*p).second;: y1 U3 n" P# C; l
  307.           free(file);
      X0 ]/ }& P% S; h
  308.         }  t* P# [; V0 Y9 [) c4 n2 X: ?7 ~
  309.         UpdateFile2.clear();
    7 ^( B( q7 }3 S) r+ {- D: r' }. Y
  310.         UpdateList2.clear();
    . M2 M3 G) p& o" `2 a' j
  311.       }  [0 U# J. i. k9 P$ \+ N6 d
  312.       if(UpdateFile1.size())
    ; ]8 ~- `, x: _/ O
  313.       {
    + l; K! u( o+ O7 `
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) ?" ?) \/ S( A
  315.         {* ?* Y# r' h! d
  316.           file=(*p).second;
    4 k- U8 _0 N  ?- A9 n$ A
  317.           free(file);  E, X0 W- r# i
  318.         }- @- Q+ A  N6 Z
  319.         UpdateFile1.clear();: t+ g3 [7 B+ |. S
  320.         UpdateList1.clear();
    / r* x1 z* y0 y, d: w
  321.       }5 Y* E6 y# a9 ^0 m, n2 d3 N
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    - B0 A1 l, ?8 g4 u  X
  323.     }- X- |/ E+ i* \; }  ?/ U
  324.   }
    * S" }5 A/ [- k" z4 }
  325.   return FALSE;
    5 _# U: J0 ]& p0 g: j- {( F6 @
  326. }
    0 T2 I$ K5 y1 ]. y
  327. 6 J0 X3 M0 c7 S: Z- ~3 e
  328. void CRevAppApp::ClearAll(void)
    0 J9 U, R& q) `4 A, i$ P
  329. {
    " A, @% L- }( t) N3 n* q' l8 |
  330.   LPUPDATEFILE file;
    . e6 \" v' C" v
  331.   std::map<CString,LPUPDATEFILE>::iterator p;3 Q2 M% Y( v9 X$ r2 w% _  j8 E
  332. ) c7 D% f4 h; L
  333.   if(UpdateLocal.size())3 N' \  V( p8 l$ Q# \1 ]
  334.   {
    ( r- N5 k' Z) J# L
  335.     UpdateLocal.clear();9 b% u/ ]! ^/ r; x( M: R
  336.   }8 O6 F% u  _; J  W, m# a; g6 a2 I
  337.   if(UpdateFile3.size())0 b9 s8 \# k. g9 G+ [) |
  338.   {
    - B/ J$ T6 m# {: a. v0 S5 C% n
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ Q9 f& M* Y; g( ?* ~! R
  340.     {- x/ R! p- V; h6 O. l1 N; V
  341.       file=(*p).second;
    : B- R0 x; _& a& E
  342.       free(file);' }# m2 s- A" N+ ?1 x: t
  343.     }
    : r/ L; [- n" P) w: F
  344.     UpdateFile3.clear();
    8 U3 f2 ~) c+ K5 a: |  d3 K
  345.     UpdateList3.clear();' v' Y- L. J/ i: x8 M" E1 y( J: s
  346.   }
    - m& C/ y2 y! T' }
  347.   if(UpdateFile2.size())
    . G  I8 @! y: }. I" b/ M
  348.   {
    . [0 \6 ~8 ?5 @4 O' ?) `6 B; f
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% i0 p4 o$ P& O, ]
  350.     {6 n0 @, R0 {# r! X) H2 L- F
  351.       file=(*p).second;, k7 G) E4 ~: k
  352.       free(file);
    , T- H& c# r2 Q! n, i; H! c
  353.     }
    , C7 z0 e7 [& o, v. {8 B
  354.     UpdateFile2.clear();# ]1 ]- I$ w2 B) S) Y" m7 T
  355.     UpdateList2.clear();5 }5 z; N5 ]4 D+ b+ ?. H8 Y7 |5 r
  356.   }* e- N5 ^7 p% m2 C6 k6 Z
  357.   if(UpdateFile1.size())5 L' b: y8 V& l2 g# v, g/ r1 b
  358.   {
    ' J# o: H& d1 }+ c+ ^# i& y* J
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( \$ W: j# ^9 S7 V0 T* h4 I
  360.     {
    . J9 e/ n5 W) O2 ^! Y$ [) h, G
  361.       file=(*p).second;
    & x& M; S' h; N$ D* \
  362.       free(file);6 H, o# u" |1 p; I
  363.     }
    $ }' @2 I) h% }* W
  364.     UpdateFile1.clear();
    ( @7 ], J# p3 h% s
  365.     UpdateList1.clear();
    , o$ i9 t8 ?9 _. S" i: C
  366.   }+ O4 ]" V* L' c* i+ O
  367. }  
    - \( P& K7 ]6 X, f8 E5 y! l; S9 i
  368.   
    . [; ]0 r$ H# K/ i* u8 t
  369. BOOL CRevAppApp::CheckLocalVersion(void)6 t: W9 A& {% M. E, C) g9 D' i
  370. {' B# e& q2 ]- T) i6 J
  371.   int c;
    ; s% K4 x9 e8 m6 z) H
  372.   LPUPDATEFILE file1,file2;! J0 B/ R& J3 M
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    : T+ L7 ~% d% A& l
  374.   std::list<CString>::iterator l;
    ; r' v! P, j: I7 [+ j

  375. 4 k% \  E* j- E) Y& @
  376.   UpdateLocal.clear();# W6 M/ k" i7 n( e
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ E2 a. ^! K1 Q  J4 u$ l
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    0 P' P6 y8 ~# c  l0 Y; N! _
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);) _4 P) A6 ~' ~( G' D& g
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);( \! O' d5 M8 \& x4 d5 S, `2 l. ~
  381.   if(UpdateFile3.size())# ]( m+ F/ ^' J7 B
  382.   {) v* `2 U# J! y: e5 V7 Y! ]: e  F
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)+ `7 r" E  M7 b
  384.     {
    ! z6 G! T+ i. f& b; T: U2 u
  385.       file2=(LPUPDATEFILE)(*i).second;3 s) k' W4 b7 o; K% F; _% C
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 p, d( v- _  W/ Q6 c
  387.       {% a& ~, x0 E: H4 h' q% @7 f& g
  388.         file1=(LPUPDATEFILE)(*p).second;. q2 Z, Y! R  h5 M
  389.         file1->vers=file2->vers;
    3 H1 X3 x" [/ F
  390.       }
    * s: A$ l0 v2 a8 }! M; ~% J
  391.       else1 t4 B* n" }+ S0 x
  392.       {; j  T$ k' N  \  E
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 E; C) l- h& c  [/ I: |
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));& o' N% B. W! p  u+ Z
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    2 q- D8 J$ `8 G+ G$ B( z0 K
  396.       }
    / Q$ N+ K5 A' |  K/ S! [3 S
  397.     }, b5 E' k7 C- Q3 ^; c
  398.   }# ?/ |8 l8 l# X3 M3 L  Q
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)  }2 B( W) V8 ]1 h1 L
  400.   {
    ' Y/ @: R$ c1 O
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())$ ]$ U% [! _" _6 }/ p. Y( N+ a
  402.     {
    6 y1 e7 c# q$ ~  p' ?3 T$ r
  403.       file2=(LPUPDATEFILE)(*i).second;
    2 Q4 b7 l* d) W" `$ p6 C& j; U
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : L; @2 `& k; I' v( l) G
  405.       {
    2 Z* i) ]. X9 G# Y9 r. }
  406.         file1=(LPUPDATEFILE)(*p).second;
    9 F# F/ S7 Y) ]) z
  407.         if(file1->vers!=file2->vers)1 N9 W$ d, P2 D5 ^# Y) `: [
  408.         {- |8 S) P0 V% T1 P
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));8 _* _; T. J# u9 n3 e. k
  410.           c++;
    6 ~- i) ]) R% X- a+ w3 ]0 T. C
  411.         }/ z- W2 e% V* X7 ~, j: l
  412.       }8 _0 C4 P- Q4 @5 X
  413.       else
    ) k- K) v& ^3 [) O
  414.       {
    ( X8 F5 e+ Y1 J  Z. x# H0 a
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    $ f' R3 F0 Z( L
  416.         c++;
    ' U/ f- w: W5 U8 A3 I: H
  417.       }
    ( u( `! J2 w5 |7 F: b$ t9 U
  418.     }
    1 k# z7 t( O2 m& |$ T- y
  419.   }; l# H3 [* j$ W
  420.   unlink(".\\DownLoad\\update.txt");" k- [  }+ d3 \0 \
  421.   if(UpdateLocal.size()) return TRUE;
    $ T! o  Z. q! B7 ^  v* W
  422.   else                   return FALSE;
    - _6 n+ \& W& X' {
  423. }, V4 o. O) z8 P& n1 H; |9 R
  424. - N/ Q6 z. J* o. n' W: H; n
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"% s$ J: }# R: K* Y4 I2 H/ @
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    * Q6 a8 p2 G0 T* d+ z8 ^9 \
  427. , \) v, V: [: F) }
  428. " r; G5 e: m$ s6 y  l9 K& ?
  429. " f, g9 h; e' ?" O7 E% W; ]
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 z2 \& {% E6 D9 s0 _" n5 b
  431. {
    : ^: `1 s1 S# H, j1 O& Z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    1 e& A* V4 |5 Y7 I
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- X* L+ e( G- H7 I) K
  434.   {
    9 @; b' o% r) O; e
  435.     char szLanguage[50];' @/ c' }+ n2 T
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& K6 |7 R' H6 T. X" I7 p+ b1 x
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& I  I2 }) m! J8 x: o
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- S# G% u% K2 S4 B2 V3 H
  439.     else                                   m_iLanguage=ENGLISH;( l+ {' Z8 i" H2 s! p3 E
  440.     char szRegister[100];
    5 v" ~8 K  m3 |
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ( |1 j2 u7 h. |7 a7 P% Z
  442.     strRegsName=szRegister;
    $ t8 b$ o4 ]9 J7 u: i- v  P  \6 k4 Z
  443.     char szPatchURL[100];3 E6 w& S* C  d% x# y! _& ~$ a
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % ]# M" m  T( V& S1 H3 D
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 O* R0 t) \$ X
  446.   }* R0 q6 U6 a: ~6 u1 k( F+ [
  447.   else
    . a( z% x- k+ u' _7 x2 F2 G
  448.   {
    0 N' t7 p& X/ j; Z, B. A. G
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) B0 v- O& \, \5 f/ u# u+ h
  450.     strRegsName=DEFAULT_REG_URL;
    & j) D0 c+ _6 \% s. W: o
  451.   }
      l# T7 r# K4 H$ j+ c; v
  452.   if(GetFileAttributes("hosts.ini")!=-1)" j' _: s9 ]4 r' O$ v- c
  453.   {& k3 P0 S7 J! _# k
  454.     char szIP[50];" q. l+ d& F6 D6 G1 ?
  455.     char szDIR[300];+ q0 h0 g) v7 ]: d
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
      Z) n+ f. j: x  O
  457.     {) p1 A* \6 e% R- K
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");4 l8 l. l' }9 _2 T% S
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    3 S# [" V6 D( i6 G+ [/ i+ D
  460.       strHostName=szIP;! Y1 |3 x& I2 W6 ?
  461.       strHostPath.Format("/%s",szDIR);. e$ ?6 M9 K* L. I
  462.     }
    ( n/ ~4 g2 h: `. q9 ?7 y6 q9 Y
  463.     else) V6 M8 q+ n. [0 }  ?5 |
  464.     {" t6 l6 S/ [5 g7 T$ X6 C! q0 C
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ! u: ~( F' ~6 C. u2 a
  466.       {
    5 ^- g* Q" ]9 k
  467.         char szLanguage[50];
    . ^& V5 v& w. h1 O4 |  y, r6 v! t
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* \1 q1 G9 }3 F* [0 e0 g4 A
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, e/ x% U1 P/ U
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 n3 u+ n. x" f* ^- k! ^
  471.         else                                   m_iLanguage=ENGLISH;% {: b$ V# r2 |! l9 E0 m- L. l
  472.         char szRegister[100];
    " {/ o) u5 n# E0 X) o8 w
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");$ K3 W5 f% p/ h* I5 [0 A
  474.         strRegsName=szRegister;/ _1 X& D/ j( [9 i
  475.         char szPatchURL[100];0 a# v# w; W/ T- f4 V* Z$ B
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    & [# R8 Z, L) k2 {; b( P6 y! N
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ p4 l9 ?: h1 Q7 f  v
  478.       }
    + ~7 X/ n+ y9 |3 K+ N
  479.       else
    # L4 w2 E: n& u. ~% K' H
  480.       {
    ! |: B4 t, D% _5 f6 _/ M: J
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    3 ^4 H# u. ?% r! V$ _
  482.         strRegsName=DEFAULT_REG_URL;
    7 D; s9 G9 r1 W
  483.       }
    6 S9 R# m" x5 p  C
  484.     }9 u" g% A/ k9 O7 j% \) P/ p
  485.   }' M' I8 U2 m1 Y: W" P' }+ M
  486.   return true;8 ]3 S% D7 [3 R4 w# d
  487. }
    ' P4 z, s9 }2 T; d7 g
  488. 7 p  m( B2 {" \. E7 g
  489. #include ".\ZLib\unzip.h"
    $ @# Q3 Y" o2 ~8 F+ ^- a9 t
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);  H, s; n( H$ Y8 V- L" q  @* `
  491. /////////////////////////////////////////////////////////////////////////////
    . U3 u- ~$ G) w
  492. // CRevAppApp initialization! Q. }0 C$ G2 i" j

  493. , G; W# w5 b3 c  o3 M( R; d; A
  494. BOOL CRevAppApp::InitInstance()
    5 m' p! m3 p0 I) f
  495. {
    ; v5 W3 D* ]  W0 \4 e5 s2 P
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];+ g( k, r2 ]( g5 w
  497. , z5 V( B9 r/ M
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    7 d  ^, Y4 p! d
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))1 G) l" }3 \- D0 [3 r
  500.   {
    ' T. a: a: }4 `- ]( d% q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");, a9 }1 `7 ]1 T( E/ M% r1 R
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    / k/ h/ e( Q6 u( v
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))1 @( p' X& G, l3 N7 s1 b
  504.     {, L0 e6 v: A8 n# R3 B2 ?$ E
  505.       strcpy(szPath,szPathTarget);! i2 g$ o. O8 e' O
  506.       SetCurrentDirectory(szPath);- e7 l1 j: o/ p, S2 f0 T& `- [
  507.     }
    ' r2 c- c; n5 L
  508.   }
    0 [# c/ m5 h  d* I* f4 h3 {
  509. #ifdef _DEBUG/ s4 Q9 |  u8 v$ ?, \
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( }2 W$ E. C- |0 ^7 i
  511. #else9 M4 f4 X3 D, i+ m' u9 _3 n+ [
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 ~1 C+ r, H6 k( G1 F5 K1 @
  513. #endif0 Z% @: |$ ^# T
  514.   {3 m2 R+ j$ a1 q+ h
  515.     char tempFileName[MAX_PATH];
    " r8 P$ @8 a3 @# R
  516.     strcpy(tempFileName,szPathSource);
    ' G1 F3 A: n' A
  517.     tempFileName[strlen(szPathSource)-12]=0;" U. L& |1 }3 H
  518.     strcat(tempFileName,"\\$CSUpdate.exe");. ~4 f$ S" _: m/ Z* x; J4 {
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 j& q# N4 l) K; \4 n0 ]
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    : `" ]7 D. d. r  j4 ~1 t1 b
  521.     return TRUE;
    " ?" S4 F; M& H3 A+ X
  522.   }* O4 `' H6 `& Z6 Z3 f& a' M
  523.   // Nuke 0118: Delete run.exe4 w' R& p& D- O# {, |: ]5 R# T
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );# P1 [7 T! Q/ S0 t
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");( y9 k5 F, w# P+ S; [0 Z2 P
  526.   if(!ReadCfgFile("Config.ini"))) o: L' s$ s/ I$ U/ V: I
  527.   {- g% s, f7 G- W( g) `
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);% J# V. l0 f% @  F+ J7 v& `
  529.     return TRUE;
    6 [) |- J- H; d+ ^# t
  530.   }& t7 Q# f. L5 [2 [+ W# G) i7 [
  531.   HANDLE mutex;
      k* D9 ]: H1 |
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ J% u, C3 ]0 e8 \! m5 P4 g/ }
  533.   {
    2 c% j8 r' O. a& j  j
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS). |0 W( F" c; |2 \3 r: l- d
  535.     {
    / R2 J4 K& J# U' K, P" D5 b
  536.       CloseHandle(mutex);
    ; z# X) T! E1 r0 {; R& F$ Z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    , A' i2 c1 E, c$ c
  538.       return TRUE;/ A2 N2 R3 D; J) b1 s5 n
  539.     }
    + ?7 ?, }& [& j8 t, x- d$ @/ s
  540.   }  * l+ w: t" o' J# `; w' i# k" m& t
  541.   CloseHandle(mutex);- u; L) j! K9 \: Y2 b0 H
  542. 2 a8 v' y) V7 c# V0 ?
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
      ^, b# }0 O: g- w; s% [- I8 W

  544. & l3 q- s  h3 Y7 L" S- S* H
  545.         AfxEnableControlContainer();
    6 M; I* I. _5 r* O" w+ D
  546. 5 ^3 O+ ?. t8 g4 u$ z
  547.   bCanUpdate=FALSE;9 Y; z; ~+ f/ f" O
  548.   dwStartUpSteps=1;
    5 N* x, E9 E" G- K
  549.   dwProgramState=AP_NOTHING;6 x! d& r% W; i, ^) h

  550. 3 A9 b+ C0 O% z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    # k3 J+ R3 ]/ D4 W$ p* N0 `) H1 c
  552. + C, k5 ]: e% L. X2 B, `
  553.         // Standard initialization
    0 Y% P- L& u2 |$ H" t: N2 k
  554.         // If you are not using these features and wish to reduce the size
    , j- p3 N- y$ r' W& e8 G9 r" f5 r
  555.         //  of your final executable, you should remove from the following/ a9 E+ P5 w! D' h, @/ d8 i; K
  556.         //  the specific initialization routines you do not need.: @8 O! B5 |4 Z6 u
  557. ( v0 N0 u9 m( b' u9 \
  558. #ifdef _AFXDLL$ ]5 F% r2 c( q7 s1 G6 N" _
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL$ X! l6 y' j: ^2 y
  560. #else
    ) Q5 j* n" k3 h0 T' T1 T1 k- G, j
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    " H( U- g- y: C& H, O
  562. #endif
    ; {0 ~5 K) Z9 J" f0 y+ o6 e
  563. % k1 k) |2 h) Y( E
  564.   dlg=new CRevAppDlg;+ C6 `3 @0 [- ]1 C0 m- O9 k8 j0 s4 k
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    8 {' {1 V5 I2 c" J
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    9 g: y9 i8 Y' f# s9 F( z5 }
  567.   m_pMainWnd=dlg;
    ) }4 u4 ]9 ?* I* P9 W2 y) I8 o% Q

  568. 2 G/ A/ g" b& |' Y/ A
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);# ?, S" V9 Q6 c7 m  }
  570. 9 S6 P' r0 V" {9 ?3 c
  571. //  GdiplusStartupInput gdiplusStartupInput;
      x& i0 {$ X$ X9 T
  572. //  ULONG_PTR gdiplusToken;
    ) c* @# a4 z3 u
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    . D" p  G6 l/ p

  574. 8 m  B$ k$ L7 |
  575. //        CRevAppDlg dlg;( u9 _- X. n+ a$ W1 U0 g" `0 F- e6 W
  576. //        int nResponse = dlg.DoModal();8 D* i9 P* J! G5 {
  577. //        if (nResponse == IDOK)
    ; ^8 a8 A* Y/ e0 L: A9 G/ ^
  578. //        {6 N" m+ y' a2 k
  579. //                // TODO: Place code here to handle when the dialog is
    # W1 F$ ]5 A+ l: u" ^7 P, W2 v
  580. //                //  dismissed with OK. G$ b; A' {, w/ I- ~( O8 O  a
  581. //        }
    ; q! U4 g" _3 T( y: e
  582. //        else if (nResponse == IDCANCEL)
    : n+ g2 ^, q! f, M4 L. m
  583. //        {5 E. H7 c+ V1 o  m. y
  584. //                // TODO: Place code here to handle when the dialog is0 H" N3 \) D0 Y: m% A2 z
  585. //                //  dismissed with Cancel/ _! W' h5 A0 N( H3 l
  586. //        }9 W, J$ |% j5 z4 ~2 \
  587. # y* {0 X$ g( ^
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    % {: a" s0 A  z
  589.         //  application, rather than start the application's message pump.
    ) g& c( A) }  Q6 f/ ^) }0 a
  590.         return TRUE;9 H# K# `- r$ h  m. a% V2 n  i
  591. }7 W* r0 q( `9 V

  592. 2 v  Z9 W# W/ V7 P* @/ M6 q. `
  593. char *CRevAppApp::strtok3(char *pSource,char *token). T& k" p! n4 }: }+ e0 w
  594. {/ K' [: C$ V; P" ^; V, s6 H# N( ^# t
  595.   int i;
    - O7 L- G6 D6 W  ~+ u/ g
  596.   char *szRet;
    ' e% E6 Z  R# T+ Y+ [
  597. 0 g6 l4 b' R: f; U6 {4 O6 D0 U
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ( [4 z# W6 r! P' Z8 _
  599.   if(sztoken)2 ~0 n: v$ w  S( q  b$ z) w7 u
  600.   {
    9 {  \. M3 E; T3 F1 J: A
  601.     szRet=&sztoken[itoken];
    1 `3 ~  U3 ^5 g/ V
  602.     while(sztoken[itoken])
    + l8 l# m8 u4 Y! i! K; g2 ~
  603.     {
    1 e5 k: O+ b5 z
  604.       for(i=0;i<(int)strlen(token);i++)
    & c) [# ^7 d+ h) f( `3 f
  605.       {& B3 Z( t9 d% x' E* X3 N& b$ Z( A
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]); Q) V! ]5 H7 T( u
  607.         {- M! u, X: f% U: W8 ?# B4 L
  608.           sztoken[itoken++]=0;
    2 S$ x; }" ^. ?* P* G
  609.           sztoken[itoken++]=0;  |6 t. B4 \- t( b" [0 a' Z' u% K
  610.           return szRet;
    1 E" k: O; u. i; Y0 R0 ]* @7 c
  611.         }, q, I& H% Q, @4 N# y
  612.       }
    " v1 C* z+ s5 y0 Y
  613.       itoken++;* L- D3 B) d' @. P: I# @
  614.     }5 G' ?& R0 l1 h, o1 \
  615.   }2 F" z4 F, d. l) e4 Q* d9 g% u
  616.   return NULL;5 ~7 y2 z$ I; K* h/ P7 K* ~3 ?
  617. }4 ^( U( o% `' \" m8 U; M  M

  618. 5 q; ]( `& G# S
  619. void ProcessProc(long Total,long Current)
    + F& e/ r8 Z) q: b
  620. {
    ; W$ j  Q+ t' G& g$ N, m
  621.         MSG msg;
    # O6 n3 A' T3 W. c5 _' S4 u: Y
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);: J8 x% C/ u' o' k" u, _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));$ m$ w5 y6 n& U
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      A7 j& t' ], ?/ T/ r$ z
  625.         {$ Z1 m* i7 ]# ]
  626.                 if(!GetMessage(&msg,NULL,0,0)): ?7 k. z, ?& S: z! l  q: V% C
  627.                 {
    0 V5 A- h0 W# H5 u9 ]$ k/ M
  628.                         return;4 a. r' N3 b9 e3 ]# O! c
  629.                 }) t; t& D3 ?  m' j( F* N
  630.                 TranslateMessage(&msg);
    0 }: s8 G6 E9 p4 O  v8 I
  631.                 DispatchMessage(&msg);, ~# H/ j/ c9 L6 K1 E
  632.         }       
    ; |3 {/ J7 S' k; M' Q* S( W
  633. }3 ]4 j9 L# a3 N  c
  634. 1 H5 o# G+ l) Z  N# R
  635. BOOL bFirstChar=TRUE;) {  M: s  H/ D4 Q: X
  636. 4 ~0 ~- I  r* e7 `
  637. BOOL CRevAppApp::OnIdle(LONG lCount)- v1 E" @& D$ P+ r% K7 a/ w
  638. {
    : o9 P$ X* ]7 K2 o4 i; k+ S
  639.         // TODO: Add your specialized code here and/or call the base class
    ) K. ?% M% m& P" ^3 c
  640.   switch(dwProgramState)6 R+ w3 k4 ^7 t, q; u. h
  641.   {" L" S$ D( k& K& n
  642.   case AP_NOTHING:0 X- f# i& y% `4 x) r
  643.     switch(dwStartUpSteps)( U. z+ ~+ N; O* L# ~4 R6 p4 Y
  644.     {& ]& L9 ]8 `' Z' k
  645.     case 1:
    2 z/ f: r; y- F& g" L5 G
  646.       {0 j: r7 z& G& K. I* _1 w
  647.         int i;
    % k. k3 L6 _. G0 `
  648.         CDC *pCDC=dlg->GetDC();. N! @- l/ [, I! w
  649.         HDC hdcwnd=pCDC->m_hDC;* l3 a8 v" e8 p2 k. D
  650. //        Graphics graphics(hdcwnd);+ J+ q9 [2 C, l
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");0 F' w4 u4 \; l) _
  652. //        INT iWidth=bitmap.GetWidth();+ I6 Q1 ]6 |% H% L1 C9 ^2 ~% X
  653. //        INT iHeight=bitmap.GetHeight();% y; H8 a$ p( e4 }2 ~/ {  T
  654. //        Color color,colorTemp;
    4 l- E# L- a1 C. h# C# e( _6 G3 g( J) p
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    + o5 t& K1 X5 T
  656. //        {- G9 Z" Z8 ^% T$ C$ q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
      p& U0 \. k' E( z* @  h' w; ]
  658. //          {
    % [0 B1 ]! |; `2 |1 U0 l) E% K
  659. //            bitmap.GetPixel(iColumn,iRow,&color);3 D. h/ z9 Q$ _0 ^0 w
  660. //            colorTemp.SetValue(color.MakeARGB(9 `0 ^8 C/ N: U3 e' w; s2 y8 c/ B
  661. //              (BYTE)(255*iColumn/iWidth),5 f  f# T  G$ K* d) A" m; N4 V
  662. //              color.GetRed(),
    $ ~7 P: A; k+ K' ~8 G
  663. //              color.GetGreen(),
    6 s- g3 i0 a5 X" {
  664. //              color.GetBlue()));
    0 T& Q" }1 M2 M! ]6 x& Q& k
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    $ D+ P$ i% M+ `: C6 z0 ]
  666. //          }, V+ F- V& Q% c( [
  667. //        }
    3 y: n: ^9 I' \7 t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 w3 N; v9 C, Q) @! B
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , X5 S0 Q. a! k  r" J+ a! C
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");- D5 ?) E0 d1 }( a4 S  @
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + z) \9 J+ _$ j- @& p
  672.         for(i=0;i<240;i+=8)- S/ w" ~, Q! [* y' r. s4 G- l% N5 r( m
  673.         {& f/ _8 o9 x* s# |% l) r$ w8 k& ^* `% d
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) a1 B! ^; Y- p3 o! J! i; y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & e. p) m# s1 E% `  f
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + a7 }3 x! e* X8 u" _5 B$ h
  677.           Sleep(33);! M8 X+ R9 e* t) O0 M5 y1 K
  678.         }
    : e: m2 Z; Q1 _$ c/ }# e+ @
  679.         Sleep(1000);" a. w2 j$ s6 u' D6 a1 m
  680.         for(i=240;i>0;i-=8)# G& w2 I) ^# F
  681.         {
    * k* u0 \1 V. g1 ?
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % B, K- p: u) j% r" i
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 K- w, r) X$ Z0 u
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 g: H$ \7 A8 A3 N
  685.           Sleep(33);
    ' f0 I1 y! r: w3 |9 ^) g# Y
  686.         }
    7 q3 W  U) d+ `% g7 u
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);% {' r5 G$ {3 f+ q2 b1 D& U
  688.         dlg->ReleaseDC(pCDC);
    . x0 t1 d) [3 y5 P8 x
  689.         DeleteDC(hdctar);4 u$ b# g$ h' B8 \3 ]5 P2 w
  690.         DeleteDC(hdcsrc);
    . ^! E# y6 I  i' @% c% M
  691.         DeleteDC(hdcorg);
    6 F' @2 K5 G$ `$ h9 s, P5 o% c
  692.       }
    8 h) ^( L3 D2 y% U4 k, ~9 L
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; N2 q8 G8 ^9 ^5 ^7 }
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' L* t3 p' ~) n: F" @/ q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");: |7 N2 Y# H$ T8 I+ Q1 R
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    2 U6 v8 r4 k$ ], H
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 J3 e% c+ }' W) {5 J! |# r, }
  698.       if(!Dn.Connected())
    - L. i' l+ E8 r) D6 K- {
  699.       {
    % s0 C: X* ^2 X, e: V& |# P) d
  700.         dwTotalFiles=1;7 }9 \: e* L* @
  701.         dwDownLoaded=0;4 }; M$ o. U" X+ w4 |. w
  702.         bSilentStep=TRUE;3 ]3 @6 K: _: s
  703.         bCompressed=FALSE;
      L' @3 R& r0 o# X( H
  704.         strExtLocal.Empty();! P' `. h4 y$ z/ t, r; ?
  705.         strFullName="readme.txt";
    : @0 d) O8 g1 D2 v4 D, S3 G
  706.         dwProgramState=AP_CONNECT;& k9 \6 ?4 X0 \# U, }
  707.       }) @) I# d5 w. U- E- f( g+ T) D
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();: C/ i! F3 P, Q& g2 G( _
  709.       dwStartUpSteps=2;) P' r5 ]# a* \. i4 N! u! J) c2 N, |
  710.       break;
    ! |- G5 t8 T, f3 p
  711.     case 2:
    7 a6 z: l' v+ J
  712.       {
    / [5 [7 P' Q. H; M7 O! b7 @; P2 M
  713.         int iEOF;6 W" P' H9 J, M0 b4 H
  714.         FILE *fp;! _; N- G3 S8 k- x) H" H
  715.         char szString[512];
    6 |/ [6 c. {7 s+ N$ i6 C4 S; T
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    7 Y$ o. e# w) g# ~" _$ [7 X" @
  717.         if(fp)6 Y2 G; h4 X0 n. K/ Z6 a4 m! i* i
  718.         {
    , j; k( T" V7 Z; F. p' ~1 ]
  719.           do2 t* `) H% s  e
  720.           {9 k: k# b; D) L1 W9 V
  721.             iEOF=fscanf(fp,"%s",szString);
    ( K) ^! c: z: V8 C3 r
  722.             if(strlen(szString)); w) ^% K% O  G* \: J: E3 R
  723.             {- l( m# J/ B0 g" m. A- }% L( L
  724.               if(bFirstChar)+ h" e7 D2 f7 k/ T0 R2 ]
  725.               {% W! A0 Y* ^, `2 H
  726.                 bFirstChar=FALSE;6 A; G" |; w- m* F) N' E$ y
  727.                 bConnectIsBig5=FALSE;
    9 b3 f  s8 G7 y/ Z- |2 ~
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! L5 Z7 P3 q: k2 g& c  r
  729.               }
    , X+ k3 |6 U+ H7 }/ B) b: @; F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    - e, l$ s: m! A$ u) Y' \
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));$ c3 D7 F4 R' M4 K2 Y2 ]; K! r% \
  732.               dlg->m_ListText.AddString(szString);
    5 ~  u  i' }6 V# O/ Z4 h: h+ h6 _  I8 R
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( n) \" k' L9 U' e/ M
  734.               *szString=0;0 A, v  W0 @3 M1 S, t( A, h1 S/ u3 J
  735.             }
    - d, i7 q; z3 T& Q5 Z
  736.           } while(iEOF!=EOF);. L" h- r& x2 `$ H& o
  737.           fclose(fp);) e7 q+ U: j" _/ A. d3 C
  738.           unlink(".\\DownLoad\\readme.txt");) r( w' |3 R1 o6 l# X" P7 B2 r) ]
  739.           dwStartUpSteps=3;
    % W$ L# e5 O2 B/ F: ?5 U$ z' F6 y% C
  740.         }
    , g$ X: |4 t3 |
  741.       }: J: R' |- m8 e5 ^7 `* w, J
  742.       break;+ Z3 l- W# D8 S1 |4 R" b
  743.     case 3:
    7 n/ P% J% m( {4 d
  744.       if(!Dn.Connected())- L3 G, C; L! {
  745.       {
    , g# j0 a5 w4 a& W  B
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 j; o4 |# \1 K" g" y6 D3 n
  747.         dwTotalFiles=1;3 r0 H$ B8 B; x! @' D" ^  n
  748.         dwDownLoaded=0;' ~$ u7 h: m; A
  749.         bSilentStep=TRUE;
    - x/ k8 q8 x0 \( @  X2 W# q4 X
  750.         bCompressed=FALSE;
    8 ], `) Q6 e9 W
  751.         strExtLocal.Empty();
    - f2 E7 f" \- ?  ]
  752.         strFullName="checkversion.txt";
    9 Q# c/ S/ g2 m5 p
  753.         dwProgramState=AP_CONNECT;
    2 O' @3 @$ B. I2 {- E
  754.       }9 @& ]0 {3 C. I3 j0 M& i
  755.       dwStartUpSteps=4;
    ( q* [# u$ I; p5 Z1 Q1 {
  756.       break;( M' R* y1 K$ |0 L6 v% t1 U7 M% P; D
  757.     case 4:) h" n( W9 ?7 U
  758.       {8 D* j# R! h3 J8 v- j) d* H$ l
  759.         FILE *fp;9 l% D4 V% R* D+ @
  760.         char szString1[128];
    . A- j3 K6 Z, d- Y. x6 e2 t5 Z3 R
  761.         char szString2[128];/ h0 ~1 Z1 B2 }2 B" p+ h3 O
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");; d" ~, q' q% l; T- w4 a. ]
  763.         if(fp)
    8 \( c, @6 r: x6 g% |- K! Q
  764.         {! q9 s9 W9 d, ]2 t" c  Y) t
  765.           fscanf(fp,"%s",szString1);
    ; I7 J& E& |: q) S
  766.           fclose(fp);' ]  d5 y' G+ J' \
  767.           fCheckVersion=atof(szString1);
    . g0 d2 T0 V% |
  768.           fp=fopen(".\\checkversion.dat","r");- e2 t- M4 U7 k: Q8 C' H7 K3 A# x
  769.           if(fp)8 p: P& d% |* Y+ v  W! I
  770.           {* o: E$ H  m2 P' d' P
  771.             fscanf(fp,"%s",szString2);5 y2 J1 F1 C) C, c2 }
  772.             fclose(fp);  q( ^0 X. O- i, m& H
  773.             if(atof(szString1)!=atof(szString2))
    8 O- T, g* Y" R' a( x! E# i7 [( R
  774.             {
    ) i0 ]) {! Q+ V: o
  775.               if(!Dn.Connected())
    . o5 C5 r- @: f
  776.               {
    ; d) u9 F1 y( R* P# R* d/ n/ g* K
  777.                 bFirstUpdate=TRUE;
    , s- |' Z; k" V0 O: z
  778.                 dwTotalFiles=1;
    . Q4 L# _" u; G' @! P% D# G3 Q7 c- h
  779.                 dwDownLoaded=0;
    # [3 S: H1 [0 r, D" i
  780.                 bSilentStep=FALSE;$ r8 [" j, Y; `- e- ]4 A
  781.                 bCompressed=TRUE;+ ?5 J( {" y) _! y6 K8 Y0 c$ A
  782.                 strExtLocal=".\\DownLoad\";
    / R+ g5 ^, w; T8 k, U
  783.                 strFullName="update.txt";
    * z( k4 s3 p( H
  784.                 dwProgramState=AP_CONNECT;
    . ?8 L' w" J& R% Q, k1 b
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( |# r6 d+ }& h  m
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - J! C( N% }- Q& d/ B" c; ]
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");! l: H% s7 i) i0 W' f

  788. & o" [0 ?8 d: |5 R( r
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 g0 G$ U& c# m- n- O- k+ N
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ; F) H4 i& v, T$ a# y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)& r( m& Y  ^5 I; A
  792.                 {/ j6 h. `7 \7 B6 i6 m
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");  f' D$ G8 X" h2 L/ F3 H
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    : X( b' P- \# i. `
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    2 L: G9 ]9 ~' ?: S# K! U
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + v9 o' u; [* d- f" P

  797. * @2 E! _; m/ V" ^( V  N  s! i
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 @) `* @6 v# o2 ]0 M
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + T2 [& B# q0 U" A
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");. {& [6 X" ~% J3 \9 k; F+ N
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; }2 V& S0 C; ?7 j; ], B+ b/ Z
  802.                 }
    3 I* G5 F' s5 ^- p# J4 X
  803.                 dwStartUpSteps=5;
    7 B3 H; x& r9 j' F5 P
  804.               }; w$ ]# `/ ~! @: m9 ]& m2 I* J+ s
  805.             }
    # |/ X) I) l  X# a
  806.             else  C8 c. p& ~1 R; h: D
  807.             {
    6 R- p7 ]5 ?8 t/ u2 ]) _: D2 W1 j
  808.               unlink(".\\DownLoad\\checkversion.txt");( U8 A( f- L# j) t7 c% R7 u
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    0 D2 d  y+ I# y$ H6 x6 C2 w
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 M  X$ d. ?) ^9 R$ ^
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");' g1 R! {2 e8 o- e
  812. # ?( a) B* B1 O, x
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      a  e: p" f+ m+ ^: U
  814.               dwStartUpSteps=99;
    * q- S% E4 l2 ]8 N
  815.               bFinishUpdated=TRUE;
    & Q, J. c  ~% a, j, a: `
  816.               bCanUpdate=TRUE;4 S: l6 @+ E" B
  817.             }
    # O: ^4 \; J: d: L$ s7 ^/ F+ [
  818.           }. j$ o9 b7 W2 x6 A4 z( j# |( l4 H
  819.           else
    $ }' [; }) X3 s* E
  820.           {* c* t: i- R& Y7 ~- A
  821.             if(!Dn.Connected())' ^& q% Q  c8 b2 G0 w3 r
  822.             {
    $ g6 A" B3 X  I1 \0 H( v2 I
  823.               bFirstUpdate=TRUE;
    ) r1 i- j5 Q6 F$ {" D
  824.               dwTotalFiles=1;& i! ~6 }0 S7 r, m6 [" n  N
  825.               dwDownLoaded=0;
    , k* P8 j7 K1 R
  826.               bSilentStep=FALSE;
    7 L9 A1 T6 @. A! C
  827.               bCompressed=TRUE;
    * w5 Z! a" C9 |
  828.               strExtLocal=".\\DownLoad\";
    3 a* l0 C1 s9 y% j8 X+ v
  829.               strFullName="update.txt";/ ^; t- ?0 L- q$ j, x# l
  830.               dwProgramState=AP_CONNECT;3 y' B# I6 U$ z0 Q1 T4 S
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 N3 H" o8 X5 X4 m
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");6 `  `5 H" m2 l7 P( F( b( n
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % {" Z3 z" p* i# M  `" U! M
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 m# O* z; r% R! @5 `% f
  835.               unlink(".\\DownLoad\\checkversion.txt");
    3 Q/ j9 Z5 N1 g) t
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    4 q% W$ e4 r" F6 ]! u! u7 u) D% c
  837.               {
    8 c4 I, R8 a  d% o  \5 A
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");# E$ E  A0 {. G, I$ v
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");( M) A0 O$ C' g, @, o3 l, R& l" ^
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");  [, v! o) C9 _, H
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& k! E& k' S2 Q0 S
  842.                
    , n1 u  i. e  R: w; |# U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * u6 f  r8 `# R
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! _# T3 B4 R( f: e, N. z8 R
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' t) a! Q9 y+ B6 t  [# l: O
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 L! q! x) }/ Q5 S# h
  847.               }8 r" @+ Z$ a* N2 o) i" a
  848.               dwStartUpSteps=5;- h4 ^, [5 J) R; s6 V
  849.             }4 J( Z. n! w' \
  850.           }
    ) B6 F' w/ u* Z: L
  851.         }
    . h6 g9 n3 }, \. [3 _6 `7 F
  852.         else, q% @$ K' w2 v: H# I" d; `
  853.         {
    ) |6 ]8 N) d. T$ G6 j
  854.           dwStartUpSteps=3;
      \$ C, f5 m2 O
  855.         }. I2 O/ }3 l  \! `1 O4 Z. {
  856.       }
    & o! a, w' }1 E2 e- s& y
  857.       break;
    0 i& J5 Q3 V2 l  ~9 Y) b
  858.     case 5:
    # B5 n+ S1 |; A; a' o
  859.       {% E4 x" ?) ~2 Y7 }7 K4 ]+ N
  860.         if(GetFileAttributes("Wsa.zip" )!=-1): D' e* H  N" N7 P2 X
  861.         {+ p7 ?( B3 b% I* q8 ^
  862.           int opt_overwrite=1;
    * m; k0 X2 G& ^
  863.           int opt_do_extract_withoutpath=0;/ M' ?; p# E6 Z8 \1 `) f& s4 a6 a
  864.           unzFile uf=NULL;
    5 k, j0 p* e9 R) k

  865. 2 b( D, p9 {* ]9 j+ z, s
  866.           uf=unzOpen("Wsa.zip");
    & M; }9 ]. Q+ t1 `% m
  867.           if(uf)
    " E" x5 H3 {" f  t
  868.           {! L/ w4 e* x) L/ F4 q. a$ t# G
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    / [$ X2 c" t5 W  N# ?$ ?, W) f
  870.             unzClose(uf);6 Q0 Q/ ?5 f( i6 j% n
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");0 H" `- @# ]- s( w2 j4 h
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    + d7 u; C, w5 n, i* p9 ]$ Y
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");+ k! z3 ?: P9 G1 ]+ J9 j
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# h5 F2 {; N; ], K% p) g6 V
  875.           }
    6 ]4 J) `, m8 U
  876.           DeleteFile("Wsa.zip" );4 o" y% ]. i# \* F: G  _
  877.         }
    $ H* C' P! t) t5 p( V
  878. ' d1 b0 o9 v! D
  879.         if(CheckLocalVersion())
    ) q8 Z- f4 Z4 r# \5 ~
  880.         {) I: H5 T' d! V* q: w# d' G# x
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");5 M* d8 b- s2 c2 U4 f; A& j
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    6 Y( P% ]0 p# A7 h$ B- L1 h  w
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    2 L& v4 }( n8 J1 M
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) o* t7 W% p4 e0 M3 F8 T
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    9 D$ x9 U- S8 j" M. Z
  886.           dwStartUpSteps=99;
    1 e( z1 P) c; Q7 F
  887.         }
    & o# v, M2 n' X/ c. ^( `
  888.         else
    , _2 n( _" S2 ?+ z" F9 i8 V3 @
  889.         {
    1 Z( M' c/ Q5 x$ E( j+ s
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ K  h- @5 @0 u/ t
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& ^/ T% [: @" W
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");6 k/ P1 a/ `' i- H

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

6 p1 G  q1 o& M
+ M; j( D4 o2 N* H; I! k7 a4 r% f

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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