CSUpdate.exe源代码

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

* g# G% n! O2 M$ j& y
  1. / RevApp.cpp : Defines the class behaviors for the application.
    & S( P4 b3 e7 L0 X
  2. //  T0 i/ x  \! x- S

  3. * D( B* x* ]$ x7 w
  4. #include "stdafx.h"* i* |9 k4 h4 A* ^6 N- ]1 }, \" Y

  5. . w: C) q1 D8 b8 t
  6. //#define UNICODE
    : q0 N# n- n! Z: r  m
  7. //#include <gdiplus.h>
    3 _, `. ~* [4 E8 z5 ]& P  \
  8. //using namespace Gdiplus;6 D+ H2 f* k, S# z! F

  9.   S' \, r: p9 @& v& C) r
  10. #include "RevApp.h"
    , d2 i2 s+ ~7 L8 ?. M3 O( F
  11. #include "RevAppDlg.h"! V4 p: r9 l" `0 w0 t& u+ c6 @

  12. & y: F! d3 U  P- f1 J' |
  13. #pragma warning(disable:4786)+ E4 E2 h7 J: w
  14. #include <map>
    9 P7 L9 N4 d+ A
  15. #include <list># R9 m; V4 C1 S1 y; H& G- ?8 F
  16. #include <direct.h>
    ' s" I$ i9 i0 T9 H" J) o2 j7 X- {
  17. 7 i* K6 ^; V3 ]  x2 `- r
  18. #ifdef _DEBUG- M8 `' t4 ]6 z0 e/ l, ?" v7 C
  19. #define new DEBUG_NEW; i% b7 E) [. n' D3 @! I
  20. #undef THIS_FILE- a0 n+ s, ^: f: ^
  21. static char THIS_FILE[] = __FILE__;
    ; Z% t3 _& t) w5 b0 U. }+ e
  22. #endif
    7 B4 B7 G7 y6 i# W. t. t  t+ R
  23. #include "SkinResDef.h"1 m1 I3 |- K% ~& a+ D: q
  24. #include "ChangeBG.h"
    ' N- x3 [, u/ c. l& H9 |5 _/ B
  25. #include "AFXINET.H"
    % a" l6 L- ?/ j% t

  26. 0 c9 {5 t! [" [: l3 z
  27. #define TRADITIONAL_CHINESE 0& X9 T0 Z$ A* W
  28. #define SIMPLIFY_CHINESE 1
    . x7 t9 i- e" w/ L$ j6 g1 b& W
  29. #define ENGLISH 2
    - |8 E  c. o7 f7 q
  30. int m_iLanguage = ENGLISH;2 c: s+ O1 u! ?& W) Y
  31. /////////////////////////////////////////////////////////////////////////////
    " T/ x6 D, D+ G& J
  32. // CRevAppApp
    7 A, ^' o0 C. Q4 U. n: v3 U  c

  33. . v( s" ]+ u) L8 N# i8 H+ i
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)( ^/ M: u5 f! \
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    # N( a; C2 B) A- Y! a) b
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ! V# H9 l/ m+ P
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    , r3 q2 ~) G6 M
  38.         //}}AFX_MSG
    % L* u0 O, \" [& G" U% B
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)1 K5 E( [  h9 i5 r- ~* I
  40. END_MESSAGE_MAP()
    0 B2 w2 S  A& E

  41. : f6 X+ A  J; h  `- L5 ]; T
  42. /////////////////////////////////////////////////////////////////////////////
    7 `, |$ Y4 M0 P* S9 v' V) i
  43. // CRevAppApp construction) G4 V9 N; r2 I5 G% O- g  c% B& t. \

  44. 2 w/ _; ~' T. W+ e
  45. CRevAppApp::CRevAppApp()
    1 e/ @0 ~  F# C( [- d; I+ k0 B  \
  46. {% z* |& n4 f$ A, L
  47.         // TODO: add construction code here,6 X9 Q* M3 _* o' w- x# ?) D- e4 C
  48.         // Place all significant initialization in InitInstance
    ! j4 v- y  |! o. Q6 I0 a2 C
  49.   bDisplayIsBig5=FALSE;
      y7 `; t+ ~% M6 D0 [
  50.   bRestartUpdater=FALSE;& d1 p! D: b$ I  R$ i
  51.   bFinishUpdated=FALSE;
    6 p- A! _; ^3 E$ C. i* W* x4 Q6 ^; c
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;- q" `! R% i+ t. S7 |0 O
  53.   InitChangeDataBig52GBKS();
    2 b( O9 W4 h9 E/ ]! }0 x6 P5 O8 A1 f
  54.   InitChangeDataGBKS2Big5();! z0 l& b" g4 e3 h) f9 V3 b
  55.         //
    . U  s0 x2 ~/ u. D2 p! @* |
  56.         bClickRunExe = FALSE;
    . Q6 X# R9 K+ _9 i. o5 R, I4 g; v' L
  57.         //0 p' b  W8 P( W  ?  x
  58. }
    ( }' H* v  T$ ?, W
  59. ( {( {1 l: _, K0 H9 I
  60. CRevAppApp::~CRevAppApp()
    * U9 F# t: B1 p! [, S  P
  61. {- [1 W8 F; {, f4 X& {! H) u
  62.         // TODO: add construction code here,
    ( Y  w9 [; F# k7 [$ C" J; j& G1 k
  63.         // Place all significant initialization in InitInstance
    4 G* A. n; g3 y/ r/ A: Q( s
  64.   EndChangeData();
    % n, R+ K$ w4 s; r2 _% x6 k
  65. }& {( U) G/ M; X( `8 d
  66. " ?: ?2 p# g* {. Q5 q
  67. /////////////////////////////////////////////////////////////////////////////$ E& t- G! Z/ i+ R, c1 G/ l# b$ I
  68. // The one and only CRevAppApp object
    5 v- @( o6 v( v; ^  r# ~" y

  69. $ C( _6 F2 e8 d$ j4 K: w
  70. CRevAppApp theApp;
    ( h2 d/ B  S9 W: @& U$ I
  71. 3 Z. M; q" E5 w! ]
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ! I5 {4 D0 }# W5 |/ D  |  w
  73. {
    1 n" E) b  `# w* o/ x2 Z
  74.   int iEOF=0;
    . H: }  w8 i4 M9 Z, G+ C+ c% @
  75.   char szTempName[MAX_PATH];' l8 V, r; S$ l6 O5 X
  76.   *szFileName=0;; w% _- k3 A* a+ J0 H2 w" X& ~! s! T5 D
  77.   iEOF=fscanf(fp,"%s",szTempName);
    & q' A  y% E. g+ y) l& r8 L# \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')- y9 p9 I& s4 R9 _6 X
  79.   {
    ' C0 |: o* O0 s# d5 l
  80.     strcpy(szFileName,&szTempName[1]);0 A! o( w% y- ~* y5 N9 n' d
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)( t8 [  P9 I% e. C2 D: n7 L
  82.     {2 O& P) y/ D. l9 k% b
  83.       iEOF=fscanf(fp,"%s",szTempName);
    + Y3 u  J! S0 o& M6 D1 ?3 J
  84.       strcat(szFileName," ");
    % W2 T: Z! |) G$ s9 Q9 E2 Q
  85.       strcat(szFileName,szTempName);0 V  z0 O- U2 a0 Z9 D& \2 |
  86.     }( K) B# i/ J- r1 @" ^
  87.     if(strlen(szFileName)>=1)
    4 {3 k6 d4 q- j$ X) ^4 ?
  88.     {3 u# \( I6 l) q0 m0 U+ P0 H
  89.       szFileName[strlen(szFileName)-1]=0;# v0 O& A+ [- @
  90.     }; R0 Z6 x% K  X# i4 U* c
  91.   }
    * ?+ B+ Y' N3 H+ W
  92.   return szFileName;% @2 W6 b2 a' s
  93. }9 A* F4 e1 z7 C$ f- }, \7 S
  94. ' G. {! l( p4 Y6 p
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
      B7 @+ ~  ~: i8 Y! Y$ z: \' W3 I
  96. {
    ' b  Y7 D+ I% v, {3 {/ m& C) V
  97.   FILE *fp;
    4 e. ~& L% a% X) I0 i
  98.   char *key=NULL;  A5 y: T5 b, L  B: A! H
  99.   char version[MAX_PATH];- R2 g( G, {3 j
  100.   LPUPDATEFILE file,olds;; h/ A' t; j% D' ?" C+ k$ q! s
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 x6 f' C' Y) D" _/ ~
  102. 8 z1 t# q- ~5 U* R8 o" A' ]
  103.   UpdateList.clear();
    + j4 H% @4 k7 E6 E
  104.   UpdateFile.clear();" d2 Y, _& V% z
  105.   if(GetFileAttributes(filename)==-1) return false;
    % U4 Z) k' J- D# z% A2 m+ k
  106.   if(!(fp=fopen(filename,"r"))) return false;
    : n  d8 X  g# z. q
  107.   fscanf(fp,"%s",version);6 K9 W7 d7 r$ g$ d" ^5 K" P
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }/ }& g- l) Q! N
  109.   while(fscanf(fp,"%s",version)!=EOF). ?, i, j  `- k/ v" S2 e# E
  110.   {
    8 E7 B/ v4 v1 e6 Z% j1 l
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 b2 b5 a6 ?( b# N2 q+ R
  112.     fscanf(fp,"%s",file->path);+ D8 Z4 i  }# \* G
  113.     ReadFileNames(fp,file->file);4 X# H* k# Y  h3 u
  114.     strcpy(file->full,".");- {/ d! s6 t, r# E8 M# k$ W
  115.     strcat(file->full,file->path);( }, s% G8 {0 F; z2 c
  116.     strcat(file->full,file->file);* X8 q/ b4 N$ Q% b/ N6 \) C8 S
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())! a" D9 D/ s0 ]1 K7 i. H& x3 C9 c8 j
  118.     {0 P, N# i% s! y* P6 d
  119.       file->vers=(float)atof(version);
    ; i! K. H1 Y' Y4 c
  120.       UpdateList.push_back(file->full);
    / s( |- \( C9 X- [3 ~
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));% |# K- m& t( L. Y! ^3 P
  122.     }8 Z  K1 A5 s& G  h. a
  123.     else
    : V7 f& J, T, ^' y; V
  124.     {
    # M7 m, v9 _+ w* E5 t0 i$ Y6 i( a
  125.       olds=(*p).second;
    % A3 A. C% O. k
  126.       if(olds->vers<(float)atof(version))' E4 g- x% m0 Z6 O) q8 _
  127.       {9 U! K4 z- R% c1 R
  128.         olds->vers=(float)atof(version);
    . X/ Y3 m/ _8 ^9 R- N6 V
  129.       }8 s  r! U1 p1 E% V8 z1 t
  130.       free(file);7 g, G& G& w* I1 L
  131.     }9 {* u+ ]4 @' [+ |/ A2 m4 s. p
  132.   }. p) V& x4 Z# D, w! L
  133.   fclose(fp);
    1 E( ^! B3 z6 X
  134.   return true;) m& I% |  E  v6 }2 f3 X
  135. }
    * R( \: G2 H/ F7 ]
  136. , r7 {3 F; Z3 g4 ]
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)" ]# m" w* _0 [4 M$ m2 W$ l3 ?
  138. {/ S2 G& f8 I- \! ~' s
  139.   TCHAR  szFull[MAX_PATH];
    ! P, ?4 r9 L0 {9 e. T8 \& O( W& E
  140.   TCHAR *token,*inter;
    , ^6 @/ D1 ~/ x3 k
  141.   *szPath=0;
    # A: Y* i& {; Q5 h
  142.   strcpy(szFull,szFullPath);& Y" B4 C) f, [
  143.   token=strtok(szFull,"\\/");# s8 X& _- l3 u" K1 ~  A
  144.   inter=token;
    ) n5 M/ ]2 U1 `) Y
  145.   while(token=strtok(NULL,"\\/"))2 Q7 a0 g% K- p3 b
  146.   {
    ' k) g# K# N* ~% H1 Y
  147.     strcat(szPath,inter);! t( b% M$ f5 b
  148.     strcat(szPath,"\");2 m0 i& B; O5 }% a8 U) q
  149.     inter=token;
    1 |$ {) |; q. y4 X% c
  150.   }, T9 \( h* C8 N6 |% G  B
  151.   return strlen(szPath);
    8 b' ^2 T, Z/ o
  152. }
    8 x/ i- Q$ G0 Z; \
  153. ) s7 U# d+ I5 Q" |% C, q1 h
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)) M4 l+ U! x% O4 U
  155. {2 x1 c" ]; E2 D9 N8 ~
  156.   DWORD attrib=GetFileAttributes(Target);
    ( h( \+ i0 K# Z$ n8 L, q6 [2 M
  157.   if(attrib!=-1)
    0 I0 O1 m) v/ ?  ^
  158.   {
    ! t+ r% Z! m2 y/ \
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ( |. e2 f% T7 r1 I# N; U
  160.     {1 p/ F8 `. f; R; G9 ?0 I( y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ) N1 s+ W: `8 c" ^
  162.       SetFileAttributes(Target,attrib);2 j3 X+ e9 B/ D1 z1 B$ M
  163.     }
    1 E" F8 V' M! a( L% i3 y2 h
  164.   }
    5 Y7 y$ m% e1 S
  165.   CopyFile(Source,Target,Erase);% O$ H% F' @0 l+ v3 H% b
  166. }
    ; j6 Q, M. Q& A5 D, M

  167. 1 `9 G; |8 e4 M6 k, A' I  P
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ y6 f$ n! E: ^! }
  169. {; v& x) X8 K. s! i5 |* q
  170.      FILE *fp;1 ^/ R' k0 f3 \0 e: ~
  171.      char  szBuffer[8192];
    ( {1 K9 \* S6 m9 }# q& }
  172.   va_list  argptr;" a9 d& o/ J7 `9 o$ o, ?0 i2 F- M% G
  173. 7 s8 f7 j# \! @# M6 Q1 w% u: a6 {. r
  174.         va_start(argptr,message);
    4 r8 [% \! X. c! M7 z6 V+ r
  175.         vsprintf(szBuffer,message,argptr);
      z, l, a  W9 E9 @  ~& k* L
  176.         va_end(argptr);
    # y$ D" s9 B( o2 G9 G1 Z# a- S
  177.   fp=fopen(FileName,"a");
    + o- q, D1 f2 I7 V: E1 J- M
  178.   if(fp)" u0 S: {6 B. _0 i
  179.   {
    4 o- B8 Z) d' q5 T6 {% a; k; C- B
  180.     fprintf(fp,szBuffer);6 I) X# U( i5 I) P+ o: g4 s
  181.     fclose(fp);8 n# v1 D& m" Z$ p( L
  182.           _flushall();/ G+ H! @' |6 L4 w
  183.   }; {% }0 I) s3 J3 v0 N* T
  184. }3 v) ?& c5 G* J1 N5 J4 W: U* P
  185. % y) Z' u8 ]4 f5 u& z0 f' k) K+ B
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    8 i, a4 U! l% s9 y
  187. {
      e+ R7 g9 L* [; k: W. x3 s: o
  188.      FILE *fp;
    0 O) ~/ S* b& S
  189.     DWORD  attrib;
    7 ]% K; p! S9 X7 v9 b& T
  190.   attrib=GetFileAttributes(FileName);& e- `8 q* h1 [# L; L3 x5 T  q
  191.   if(attrib!=-1)/ z& j' ^' _1 Q, S* G# T( W7 r
  192.   {3 Y7 s& l/ A& k4 [0 Z+ r) |7 W
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ' t# e* C1 p* g3 U1 |- `: ~# g
  194.     if(!SetFileAttributes(FileName,attrib))
    4 o: m1 g. Z/ R% o9 b4 P: Y
  195.     {
    / U1 t2 s/ e5 Q1 i1 w: d+ e
  196.       return FALSE;' g: k4 H2 t* g3 D* W6 D0 k
  197.     }
    - u' w! D3 K9 H" L
  198.   }
    3 _5 J. |3 C% e( k
  199.   fp=fopen(FileName,"wb");0 d7 K0 a1 W6 j0 b* N+ M0 A
  200.   if(fp)( T6 K% S& N$ Y
  201.   {
    / \# l5 |3 U' v- c. l# }. D
  202.     fclose(fp);
    # ?- h. M; M1 a2 S) K) y8 C$ `
  203.   }) y  c% }! v& S- \5 Z
  204.   return TRUE;
    9 V! }+ L- }; R/ ^' u6 G- |* ^
  205. }+ v. W8 l, n* O  a$ a) P
  206. 4 m3 e- n9 H  {) d4 O
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    0 i4 k3 W  L! o* W- V
  208. {
    * ?  s! ~, d% H: {2 k
  209.   char filename[MAX_PATH];+ ]$ ~' R* A% ~$ m2 ?
  210.   LPUPDATEFILE file,olds;
    7 i- ]; E  {# h' r
  211.   std::map<int,CString>::iterator i;2 Z! N% O/ b5 M* ?3 ~* J
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 }7 m( [5 w" K/ z% a6 z
  213.   std::list<CString>::iterator l;  ~' k. s# d. ]2 r& o0 O3 i
  214.   x6 k& L' d$ ~  Q
  215.   if(bFirstUpdate)7 r$ ~6 |( V: |; l! X. Y
  216.   {
    + E0 U) X1 v! _3 ~) z& m
  217.     dwCurrFile=0;$ U- n7 r6 v0 M2 V, l, E
  218.     bFirstUpdate=FALSE;
    0 g9 ^' O! K; d8 V
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 D- H( F7 ^" T5 i& Y  U( U% l
  220.     {: y% x1 `. ^) K  w) ?; ]2 ]
  221.       dwTotalFiles=UpdateLocal.size();
    4 g* `- H' a, n6 P3 w
  222.       dwDownLoaded=0;# a2 n- F& d" U. ~- }5 k
  223.       bSilentStep=FALSE;+ |/ \9 ^; B  v. v# b4 f+ J  ?
  224.       bCompressed=TRUE;' N6 i2 `% F9 k6 B3 {0 s6 H
  225.       strExtLocal.Empty();- Q+ S; M# n: I! ?  O% I( X# U
  226.       strFullName=(*i).second;6 ~& c7 D9 D. }% v$ v6 Z
  227.       dwProgramState=AP_CONNECT;
    4 K0 ]6 \" A8 x4 R/ D) A! u
  228.       return TRUE;
    + A  R& \/ z4 Z; v1 S" h% k
  229.     }: v4 s( L, h4 P+ H( Q! e4 b
  230.   }" I9 s+ z1 d; t! f/ \3 o: {
  231.   else if(bRestartUpdater==FALSE)
    + Y( B# ?6 _' g7 {; ~/ @2 O: \
  232.   {( S9 z* A( ?. F
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    + }+ N- q0 v+ y" r- g0 ^
  234.     {
      _7 m% u$ c' D2 D
  235.       file=(*p).second;
    ( a8 ~" h3 T' h, l7 ?7 f4 o- v8 x, v1 T
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()). l+ R0 |5 n1 r, L: [; W' T! [/ G# y
  237.       {" `% b' x4 e' d: N  W+ }0 ]9 n
  238.         olds=(*p).second;' J' [9 u7 ~' j
  239.         olds->vers=file->vers;
    9 p, }8 W9 L' P3 R# Y4 Q! Z
  240.       }5 |- G# J5 f# H8 M6 c
  241.       else  B" ~9 P! B' A& C0 [
  242.       {
    2 P  L5 X: R: V8 W
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, {7 u9 E/ }7 D' K) U
  244.         memcpy(olds,file,sizeof(UPDATEFILE));- g0 ^3 E- d$ X" s5 E, Q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    1 y4 C0 v& D& e! X$ S& K
  246.       }
    8 r( D& {  i* B# a! o- K; k" R
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");& w; F7 K, A4 {% Y5 T3 |
  248.       sprintf(filename,"(%s)",file->file);
    $ F: G1 D' \  o/ `3 o/ y" S4 {) Z. M
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , z" s1 g# N, K/ K+ m7 e  d) O* O3 A
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }% V' f3 ?/ t4 j5 E
  251.     }
      F# S! O, ~& V1 i. w
  252.     dwCurrFile++;
    7 q+ r% d7 a# S9 w% z. F( s3 ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . r, O/ p+ f& _% a0 }5 R
  254.     {) G2 [5 ^0 z# r; o; \5 _$ |
  255.       bSilentStep=FALSE;1 P- Z0 K% U8 Q4 p7 B+ Z, Q
  256.       bCompressed=TRUE;
    $ V) n6 L6 d2 _, c% T" r2 O
  257.       strExtLocal.Empty();& ]  Y& O1 i3 n. y
  258.       strFullName=(*i).second;
    8 z/ m- Q2 J& b2 v  z8 m5 c- }% n
  259.       dwProgramState=AP_CONNECT;
    : q" U3 t) x7 j: f' S- P$ ^8 y
  260.       return TRUE;
    ' m) w( I  U' C5 x& p) i5 s4 f$ V
  261.     }" `4 @/ V5 q/ Q% V) n, k9 c. F
  262.     if(!bRestartUpdater)
    6 C2 ~& I' h9 y) R, M. }
  263.     {: b' {( X& S) G# }, S; B  c
  264.       int iCurrSize,iFileSize;: X3 p8 k4 `3 @* ]
  265.       iCurrSize=0;
    # S: W9 g( K5 P% E( j
  266.       iFileSize=UpdateList2.size();
      m9 y/ P) _* ]' u7 i& u# j) k7 u, j
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");2 B0 M$ p! A9 {/ O: M
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    / I/ F$ z6 r8 l4 G8 a! o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    " A1 I4 k0 L2 E  I! F
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 a9 \5 r7 O2 a1 i4 V
  271.       Fclearf(".\\update.dat");# n- L7 C1 w. g% F
  272.       Fprintf(".\\update.dat","Bloodyf\n");% {7 t( [* q% N9 I0 x  l# D3 P: w
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ' o9 r  U% n4 v6 u" W
  274.       {
    4 ^# B4 u& i7 p- u8 b# v3 J: k
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())4 y1 i  s( H! M9 B) ?5 C+ k" m
  276.         {
    ; N, H- h* S9 ?3 }% |  |% E4 S
  277.           file=(*p).second;
    9 A: \# l) R  c+ m
  278.           sprintf(filename,"(%s)",file->file);1 _3 N7 g1 w4 |+ F
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    . H$ u$ T! [7 ]2 d0 y  R
  280.           iCurrSize++;: z8 M; m& K' E$ G/ Y7 C
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    $ g: o# ]* m; V
  282.         }& d& ]* W+ j( ^1 O* X! u4 G4 {- w
  283.       }
    1 J; z8 O; l& K- c9 g; m' V+ C4 C
  284.       unlink(".\\update.txt");
    - X+ z3 I* n4 o( F5 T) f# d  L: t* T* d
  285.       unlink(".\\update.tmp");* B& ]7 l* G) q3 u5 i" S- `5 n
  286.       Fclearf(".\\checkversion.dat");
    1 R+ B( h' T5 {
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 o. i7 Y( M( H3 s/ e. a/ P
  288.       if(UpdateLocal.size())
    ! z* s: a  c: x
  289.       {
    8 \2 \& G  Z- j; b" p
  290.         UpdateLocal.clear();6 R# V# ]$ G9 o$ Y
  291.       }
    ! A$ c5 V, z7 A" O4 x6 ^) i3 l
  292.       if(UpdateFile3.size())' ^) y$ Z; B; S2 t3 K2 x
  293.       {- }% X3 y) u- p: y  U
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , l0 U3 y7 g5 I
  295.         {
    6 l- P- |$ _( {: Z
  296.           file=(*p).second;
    0 {  L3 e' I& x( t3 V- O( I7 B
  297.           free(file);; S; |5 a7 ^% k8 G6 B5 @! [+ H
  298.         }
    ( l7 T) U: d2 D+ v/ H" p5 e
  299.         UpdateFile3.clear();
    ) D* s' Q" X7 g. @
  300.         UpdateList3.clear();
    % Q* _1 Q& S' z* N! Z% Q) J
  301.       }0 @, z. b3 r% x
  302.       if(UpdateFile2.size()). s) A/ [# S9 b- s8 b
  303.       {( M: P; f9 x5 z$ h4 f" E- ?( |
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 V) U1 x, V) y4 ?! q
  305.         {
    ( Q! r) Z' w0 Q" u0 p
  306.           file=(*p).second;
    $ S% T* j# b* X- Q& d7 ?( X+ @
  307.           free(file);
    ( q2 j1 ]- j2 m9 G( i" h0 b7 f# A: y
  308.         }1 D1 g7 `) B, |/ m0 a: V; s
  309.         UpdateFile2.clear();# ]7 \8 r. ~, x/ }" L
  310.         UpdateList2.clear();
    : Q) l7 S; \( h6 J+ w& X
  311.       }
    0 R( |( U0 B+ ?* f3 a
  312.       if(UpdateFile1.size())' V! k$ C/ p/ g) `0 q# s
  313.       {2 y5 s7 U, M7 o( d# \
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    1 ]+ g9 V# j& F6 z3 q) ~, x
  315.         {
    % {# V! ~; W6 D- M' K
  316.           file=(*p).second;; I& P' _% W4 n7 y1 O3 b: M$ W6 ?
  317.           free(file);
    1 I: K! ~! n7 L9 f6 V% h
  318.         }
    0 l  F& n7 {1 D1 {
  319.         UpdateFile1.clear();
    3 [) \3 ~, p) n  y6 R5 p
  320.         UpdateList1.clear();
    & P% I4 P/ r6 z- K: g  X) g8 B4 o
  321.       }
    / H2 N( f2 V, _* F, ]& f$ F: s
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % b6 C& E# K" a" I3 C
  323.     }
    3 f/ Q7 y2 R0 C% @
  324.   }
    6 j: k4 S3 l6 e9 [
  325.   return FALSE;
    & M/ g3 {  g& i8 N) z$ W# X% x/ Q
  326. }4 d# A* [0 o* V7 i0 O: s
  327. ) U  o) E* f+ Q* [1 o
  328. void CRevAppApp::ClearAll(void)3 g2 D1 F, R* u, h6 ~8 _4 u9 F
  329. {
    4 }) ]6 R0 S7 q2 ^0 K' E: _' d
  330.   LPUPDATEFILE file;& i4 c8 _  e$ Q' o; G/ q/ O' M" [# X
  331.   std::map<CString,LPUPDATEFILE>::iterator p;1 f6 s# g) i% r9 p, D

  332. & `5 p7 g  V: b& V
  333.   if(UpdateLocal.size())
    3 G; n8 I: F) o) l
  334.   {
    - t+ E' A6 e7 ], M( b; `& G
  335.     UpdateLocal.clear();
    * c; [0 h  x2 K
  336.   }
    7 a$ l# L2 a9 R$ I$ [: t9 E7 \
  337.   if(UpdateFile3.size())
    . R/ y- U  `! C# R- Y8 Q
  338.   {6 _7 g& ?! P' {# h% z
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * ]) x' Y! N" c) V7 n+ O& q
  340.     {
    * r; o+ F# K( N
  341.       file=(*p).second;+ p' |. g2 o, |+ a3 S
  342.       free(file);& }  B9 J" g, |7 x
  343.     }
    3 @5 _. l- L- p9 k1 B, C
  344.     UpdateFile3.clear();
    / |" ~4 {% ^4 V/ H/ P% a3 J$ A6 ~' b
  345.     UpdateList3.clear();, y; _0 [3 ^* b: X) x. v+ f
  346.   }7 z! m) p  Y# x3 G0 \
  347.   if(UpdateFile2.size())( P9 M0 I$ m( h; a4 e) Q7 ]# Q3 W
  348.   {
    4 b! e) S8 L5 p8 S9 Q
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " A" f8 A' j$ j/ {7 y4 G
  350.     {4 c& i) ^) r" M
  351.       file=(*p).second;
    % i; N! x& e9 V$ r
  352.       free(file);
    ) u# f1 S" t5 h
  353.     }$ m: ~' J( b0 ]6 K& v
  354.     UpdateFile2.clear();3 o# M- A1 |4 M! ^3 |$ y+ J, F
  355.     UpdateList2.clear();# q$ I3 q$ s3 k* \
  356.   }9 _$ H# S5 v: f# F
  357.   if(UpdateFile1.size())
    - q7 R' E) ^3 G2 F$ A$ k$ s$ a
  358.   {
    9 G$ I4 u% v. \; ?6 g6 M) k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 H5 \- Y* U; |% I7 D3 A2 X* q& b
  360.     {$ N% F, m0 U% c/ q' [9 W+ Y2 q
  361.       file=(*p).second;4 D9 N; B  Q( g; z1 }
  362.       free(file);
    $ t% [( `; _- M6 S3 B4 Z
  363.     }
      K  A& V* W- p( Y
  364.     UpdateFile1.clear();
    + f& u0 ?. Q, n3 M  ?+ K
  365.     UpdateList1.clear();
    2 g% k- ?4 F$ `! f  w
  366.   }
    ! a, p1 ~  K7 A! z
  367. }  9 w; \* q* v/ b- j1 L3 o) w
  368.   
    $ M" s6 Z7 i% L! ~2 x# y! O* Y# l
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    3 s7 S2 ~& U* r& S: C
  370. {
    ! L  o! q2 i! z& v) W8 e( m
  371.   int c;9 i0 t: H; ]+ C9 i* a
  372.   LPUPDATEFILE file1,file2;! f# @9 r, Y9 q+ |
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    8 V1 @/ p$ V) s& l) g0 ^4 s
  374.   std::list<CString>::iterator l;. K* R2 `8 K+ Q9 Q3 y- P' u! x
  375. . U) ^8 f6 [1 L# h
  376.   UpdateLocal.clear();
    % v7 _+ H% r+ L- W% b, x% ?
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);* l, G% f! S: H6 [8 K+ J
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);8 C! x9 f$ C/ @
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);3 Y/ ?; |/ w& @
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ! L, E3 ]6 J- a0 G
  381.   if(UpdateFile3.size())& `; b1 X5 m0 @( O: F/ ^7 J
  382.   {
    # t. \7 D0 @/ y8 z$ f$ Q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    + W# K3 U! Y! s+ j5 q
  384.     {
    ) R. N  B; y* h+ y$ ^
  385.       file2=(LPUPDATEFILE)(*i).second;
    4 r' T+ M* C# q$ `5 h
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())2 g; W! s6 L" D" J0 n4 w5 D
  387.       {9 Z, J1 q- n* e! ~0 p
  388.         file1=(LPUPDATEFILE)(*p).second;% l+ O& D/ {2 Y1 w' U
  389.         file1->vers=file2->vers;" S) M5 w# x/ r. C. X/ K+ Q
  390.       }
    0 e) C( i' c5 W
  391.       else
    / U7 G( W3 J  ?+ I; X. Z9 o
  392.       {
    2 F' ]# ~8 |- C" v
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 r6 e* g7 \+ L1 T/ t9 L0 T
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));& K1 z# X' X& Z% Y. m! S# @! L+ N
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    " E  @' C1 S* h1 {7 X* B1 z. \
  396.       }
    ( t3 {. g: b. o
  397.     }
    $ C) q; ]0 H; r: M
  398.   }0 P' x) @! [+ [0 [9 U4 B' ^
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++); \" I( P% W: O7 `
  400.   {
    3 m, A* J: i! h$ [: K& e+ Q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())% X7 C/ k+ {& ^$ ]
  402.     {+ ~) E- d% S+ z% W& p
  403.       file2=(LPUPDATEFILE)(*i).second;* t  O+ b& ?6 ], i' v1 W1 n
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 x. H! q0 p( R+ L) B- ~* D; q1 Y4 {' U, ]
  405.       {) x( v# J3 S5 Q+ O
  406.         file1=(LPUPDATEFILE)(*p).second;1 z0 N3 s! I9 d' W- `) u- S
  407.         if(file1->vers!=file2->vers)
    $ I0 S) f# L" M3 m; z# y0 x7 N
  408.         {
      G" c+ x  h0 R5 C3 M1 e
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( @  ]2 k* N: N: K6 d
  410.           c++;
    5 L9 j5 B& J& y6 ~0 f/ Q9 k
  411.         }
    1 B$ B! g0 ^0 P2 N7 c& B
  412.       }
      K6 L! k2 B' a' d1 q
  413.       else
    ' ]  z& j+ K+ b4 m+ Q5 E  |
  414.       {
    / R2 p, l( M/ L1 V( [8 i
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! E3 o: _! G, f- G' M- U* X
  416.         c++;7 R; p# P' C9 @. ]1 c6 v/ U
  417.       }; {' K8 q# W1 K9 U. _9 G
  418.     }
    : a; p6 R! e! R+ T
  419.   }
    . {2 i0 S# n3 T3 U1 J
  420.   unlink(".\\DownLoad\\update.txt");
    0 i0 H3 E7 M2 R
  421.   if(UpdateLocal.size()) return TRUE;
    1 S! U- ~7 U  j( n
  422.   else                   return FALSE;
    : E1 a- L9 p, _  N) `( ?* X
  423. }
    + F8 }4 m6 Z* ~6 V% _2 N
  424. $ V6 `" c3 t- c( [8 P
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 E$ L4 ~* L  F. [& i9 ~
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    $ {4 }; v7 g2 {. o0 s; G! z& [6 i
  427. 0 ]( x4 J3 l) [- m% Z
  428. 5 R7 C& T( K; z5 l- O- c

  429. 8 H2 x# z( d5 n- H4 U7 T5 G) }# E
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    " e* z6 Q7 w+ s, l0 m
  431. {
    * z8 {7 {' J, m) z9 ]- D+ L" D1 ?
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 ?# M3 p: Q* T& Q& L: S
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      p5 S: I" l# o: }( m0 d4 s- U
  434.   {
    - G  {9 V9 H* M) r% i
  435.     char szLanguage[50];
    : J5 `# j$ f( g4 e: y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, G( |# i! w; c! [$ `' t  \5 X
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % T% J& s) Y' v( X
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 }- P) J' l5 X6 k6 R- n% a
  439.     else                                   m_iLanguage=ENGLISH;! m6 j8 r" X: H
  440.     char szRegister[100];
    4 N1 T, W& f0 P. n" F% A! t" b5 p
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 A) c& v# v0 q* A$ D# V( L
  442.     strRegsName=szRegister;% B( i; ~9 o0 r$ \
  443.     char szPatchURL[100];
    3 v& L9 G1 c* U' c; G# M8 r# o
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 n- c# @7 V& A5 k+ z$ @9 v
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) s( F$ A( x# t/ w* U
  446.   }
    4 c* E0 m" Q& q' Q7 P2 X( @: U
  447.   else4 Q$ U2 ~0 O$ @4 I4 Z
  448.   {
    4 I9 T) d0 y& k# t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);! a( t8 B# q- R. s* K& H! a. T
  450.     strRegsName=DEFAULT_REG_URL;
    3 Z* E! J, c4 @8 x2 t& @3 C
  451.   }
    5 K* g  X  C2 M0 O% A8 R9 N' t) e
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    " J" d9 d# A& [# D) G% a" q
  453.   {
    $ V2 P" o, ^; I& h7 M# a+ q: n# h+ m
  454.     char szIP[50];. s4 ^5 H5 {$ I% x$ e6 E
  455.     char szDIR[300];1 D3 s4 D) b  o- q# u! h$ d- u3 ]
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    7 \4 r/ M! E( o$ d4 M
  457.     {2 T1 F: s: U) Y2 r& P+ o
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");7 n5 Y5 b; d( [/ K2 t7 ]; {
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 Y9 U; \& u: |
  460.       strHostName=szIP;
    + R1 j7 O8 c& u$ F
  461.       strHostPath.Format("/%s",szDIR);
    / N  _' i" P2 C4 b: K$ o
  462.     }% T3 w5 @+ p1 z$ [9 n7 e
  463.     else7 \% j& j' d1 x: K5 g; [. C* Y
  464.     {
    - a$ g/ z" ^0 u$ A
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % e  t2 y9 V6 F
  466.       {
    * c; T6 }3 p, O9 ]
  467.         char szLanguage[50];# R9 f7 y9 L& J3 x5 [
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ w# X+ a/ }% p  _- j/ i$ h# V1 L# Y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;1 ~6 o% w7 w! G* `+ p: X2 D6 ~
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;% A4 e9 r3 G  |
  471.         else                                   m_iLanguage=ENGLISH;
    . [1 ^; l( u/ F: y) y3 k
  472.         char szRegister[100];* ~4 |8 |8 `' l3 k' I: o8 `; B7 L
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 T( L9 h. y4 I, t! c/ a( X
  474.         strRegsName=szRegister;
    ! {7 _5 j5 F* X8 K. N
  475.         char szPatchURL[100];
    , e" U3 a: y! M" S$ N8 Z
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # N) X6 i0 G; `) q; u
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- h  t6 T; Y7 }7 r6 q
  478.       }
    ) ?3 W4 }# S. a/ B) Q
  479.       else# _( F; C0 x" A; Z+ V
  480.       {
    0 |; w0 N% R: N5 h
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    3 k9 Q2 C8 a' ?4 n4 u/ N+ k
  482.         strRegsName=DEFAULT_REG_URL;7 C* O4 F# n, c% J- k  {
  483.       }
    5 g. P% O4 o6 Q/ [  y
  484.     }( f/ a( C1 J4 y8 ^( R2 A
  485.   }
      l" g9 \3 r, H& m9 k+ w
  486.   return true;: |7 g+ t. P: \6 O
  487. }/ u; a; Y8 j; K2 t+ _7 u& a: N5 F

  488. 7 z6 u0 o  z$ K8 v, F& P
  489. #include ".\ZLib\unzip.h"
    : |0 n, G& ^$ t4 D( e& B
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    9 h! M/ q# m% W4 g) J- o  `6 }% m
  491. /////////////////////////////////////////////////////////////////////////////) Z( R" ~# i6 r) X$ W$ P
  492. // CRevAppApp initialization
    9 E8 G$ ]2 X6 j* c4 A

  493. # _0 Z  j& C; r) Z3 `/ D, q
  494. BOOL CRevAppApp::InitInstance()! @) ^; m( g( Z& h' J6 ?( j: @3 `
  495. {4 K  W! L6 _, W6 U, Q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    % `8 N0 Q( r: i! ?! E

  497. 8 F$ o# a) ?9 g  |: y6 `3 c
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);2 x! ~; a. f+ X$ k
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))- r/ H( X: D  ?
  500.   {
    3 w, _! s4 i9 o6 v1 [0 r
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    / }( i/ T  F7 l" ~+ q* ?
  502.     GetPathFromFullPath(szPathTarget,szPathSource);& `- k; i" m# I( ?8 t9 U$ u
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ! ^/ _5 ?, _6 _) Z
  504.     {: `6 Q: b7 l5 S/ y2 [
  505.       strcpy(szPath,szPathTarget);3 o5 K; s( g/ h% e6 l
  506.       SetCurrentDirectory(szPath);9 o$ f! f6 y5 y. _
  507.     }  B0 i2 N2 H. C8 l' _
  508.   }/ c- \' ~* M7 C. f
  509. #ifdef _DEBUG6 P+ b5 c; N3 p5 I) V" v& S
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" C- {, @) s! r9 H7 M! Y1 M9 N
  511. #else
    2 e5 X; U" d* ?. @, u2 g/ X; m5 w" n2 \% [
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 T* c( ~, r& s7 U: W) o5 l
  513. #endif( H9 I) k2 Y) {
  514.   {
    % w& C1 t9 g; m
  515.     char tempFileName[MAX_PATH];1 Y1 G5 O, O* y; e3 _
  516.     strcpy(tempFileName,szPathSource);
    0 x! c9 I( F: @) I) u* x# e2 n
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( c& M* o6 }8 g' f
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    " P" f; r: z) {# l  [- K
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);* W9 E3 `. v8 q) M5 d2 x
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);; T6 L+ t/ o) q, A, m: N
  521.     return TRUE;: O5 k8 E* k$ a) r* Y$ ?. s
  522.   }" s4 W2 v! u; R, Q* d: H( U! T
  523.   // Nuke 0118: Delete run.exe# d1 ~+ j, J6 B) d& b
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ; z# r& ~8 W+ s+ L! }
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");& c+ J. Y2 v( Y
  526.   if(!ReadCfgFile("Config.ini"))2 O4 O8 Z$ H& E9 T) W8 s
  527.   {( T  M  ]# w/ f. t, D8 @. p
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ! K# D! r- h3 u9 {, h9 v. u
  529.     return TRUE;
      O' S- g" ~  f
  530.   }
    ' ]! F8 `- V# J  `3 o- g
  531.   HANDLE mutex;8 ~* x8 f5 U# ]) b5 Y
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))3 e# b: M  D7 B  g6 n
  533.   {  R" l4 ?1 N( `" c% `& \
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)2 c- A2 @' @$ {4 j- U1 c
  535.     {, S8 j% c2 z' g7 p: ^
  536.       CloseHandle(mutex);# s. L( l( w+ x) ?/ T
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);/ V% C" w; J* R4 }' P" F- j
  538.       return TRUE;
    9 B' F3 P+ W+ W) n' q- e# F
  539.     }; h* ?- y+ F! [9 B  V/ A
  540.   }  
    6 l  a+ g& o; ^* D2 }, s, M2 ^
  541.   CloseHandle(mutex);. A8 g, ]( V  F& b0 `

  542. 7 M( o1 j) R4 ^' k
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ) M4 V7 u5 X# c. c/ m

  544. " i- @7 [3 Z% m5 p, |4 K
  545.         AfxEnableControlContainer();8 n3 Y* o3 v$ _" |' |$ k$ H$ t+ `. l
  546. / f0 A9 ~/ G$ y& W6 Z' k2 D* o/ k
  547.   bCanUpdate=FALSE;) G; m  Q8 g6 v( @9 o* [8 q* i
  548.   dwStartUpSteps=1;! p# h6 l  O4 `. t( B
  549.   dwProgramState=AP_NOTHING;$ p7 g! z' P( f5 [

  550. , N% ~/ u( n! m0 B
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. i; [/ G* w& v! P
  552. 7 s; _0 Q2 d. ]+ q( ?! r6 c
  553.         // Standard initialization, {7 H5 V  p. T: a% t' K
  554.         // If you are not using these features and wish to reduce the size
    7 y4 y& W. z5 l
  555.         //  of your final executable, you should remove from the following
    0 Y) }3 X2 z% l1 Z- |
  556.         //  the specific initialization routines you do not need.1 u2 C, N5 F5 v8 q: s, o
  557. ( {' a6 _; s" Y1 K9 R  Y" I
  558. #ifdef _AFXDLL% Y. N; ~$ K4 B1 G) b9 U
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL5 s5 ]/ A6 G! r% }
  560. #else
    * N* N; w# \5 }+ i/ {# y: t% d
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically. k  z/ F4 B' L2 F: O0 x1 R! w
  562. #endif( S# i8 R( j1 X" C

  563. 1 b7 k8 F. n3 P* v5 S! D# c0 D
  564.   dlg=new CRevAppDlg;5 n+ w' o7 [1 z: d" l, ~
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ) N0 ]+ I" t, ~4 U- W4 k7 j/ ?
  566.   dlg->ShowWindow(SW_SHOWNORMAL);! b% o, F( I+ r1 x, P
  567.   m_pMainWnd=dlg;: A: k6 L, e" K% u! N

  568. . T7 q$ S1 O" i: L5 u
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);6 E4 R! H9 b% l5 L$ ~
  570. * C8 v0 M/ g! l5 N! ]; H% b. H
  571. //  GdiplusStartupInput gdiplusStartupInput;
    2 {% h2 e* q/ Z
  572. //  ULONG_PTR gdiplusToken;
    + }4 V; Q0 l2 L, t# w6 u
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);% M# ]7 M- E' t: L6 {

  574. 5 U8 e7 m  [) T6 f1 v
  575. //        CRevAppDlg dlg;& `, W" i: R/ M+ T7 t3 V5 H3 `+ |8 ~7 s
  576. //        int nResponse = dlg.DoModal();
    2 x* u% _, t7 b1 j. J  W% ^" Z# s7 W
  577. //        if (nResponse == IDOK)
    ) Z- \) _, G3 N5 w
  578. //        {
    & x0 }% ~8 G4 c
  579. //                // TODO: Place code here to handle when the dialog is
    7 W5 o0 Y" N9 @$ h
  580. //                //  dismissed with OK
    + k. u2 V2 v' I6 Z; R
  581. //        }2 O* X' |$ R! n/ m& h
  582. //        else if (nResponse == IDCANCEL)
    3 V) O1 V8 f" }5 E0 I* I
  583. //        {
    0 X# A6 v1 N4 R- A0 O, S
  584. //                // TODO: Place code here to handle when the dialog is7 i0 y# B# ~& B8 r! H  s+ {
  585. //                //  dismissed with Cancel
    - |4 Z4 q. H# e" ]  |" e* h, n  B
  586. //        }
    - A: M$ J6 Y& Z5 ^' T

  587. ( L: m% Z6 ^! L' A' b6 i' o  Y7 g
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    1 ]/ ]1 m1 S2 C2 q
  589.         //  application, rather than start the application's message pump.9 P. p) a; `/ |9 w
  590.         return TRUE;
    ' l6 `0 b6 D: f+ J5 f% u
  591. }
    ) W  }% M8 V. g8 _" F
  592. : H" _% G# p- n; m4 B( p% L, [) c
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    3 W9 \% C& B7 W+ r
  594. {
    ! x5 R2 f6 S7 ^: n1 E  }
  595.   int i;
    3 |& l; I+ q8 A/ R1 w( }9 d' s' @1 z
  596.   char *szRet;, v3 P% f% k$ ^8 n* m
  597. # F7 Z" F# g9 F1 ]2 G
  598.   if(pSource) { itoken=0; sztoken=pSource; }( Q) K$ U! p# ~2 K3 j; T
  599.   if(sztoken)
    - I  c+ V4 V0 k8 {: H4 A7 `  o6 S8 |
  600.   {
    ) m& l- _; l: L! u! L& p
  601.     szRet=&sztoken[itoken];; \! ]! D8 r/ T  ?9 L& g
  602.     while(sztoken[itoken])5 e, K# G  B  T# @
  603.     {) c" ^: y& E" V7 T( I' L5 p
  604.       for(i=0;i<(int)strlen(token);i++)8 ?3 F% ^+ K1 b
  605.       {$ T2 E# A: j- U; V% ]
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    7 \. i' S2 d- q. Q4 P. _
  607.         {1 @; n2 D  b) N) }0 x# ~0 u! o
  608.           sztoken[itoken++]=0;
    4 ~  M: G* ?, v# }2 g0 s) G
  609.           sztoken[itoken++]=0;! d  c+ U5 E5 O8 D( N3 D
  610.           return szRet;
    7 v3 C( A8 M  k8 s4 v4 B
  611.         }
    * X- \/ L. l  M# a$ }, P  e, _6 t
  612.       }
    + e7 I# S+ G4 x
  613.       itoken++;
    ( c( S: T9 d& ~0 a: D6 _
  614.     }# L9 Z, I1 M0 V% g) ?# W
  615.   }
    1 k& ^1 Z; v$ |% {' T! ^2 i
  616.   return NULL;
    ! }7 a3 g- E6 I# g& X8 d5 w$ J: v5 z
  617. }
    $ D+ ?) t2 o) @1 ]

  618. " x2 D& w2 p  E9 E, Z2 w8 P7 @" x
  619. void ProcessProc(long Total,long Current)4 d! x/ {$ [8 ^( e
  620. {$ ~+ z1 h9 n% Z& N- h
  621.         MSG msg;% K, D, c* U) \5 z. N) c+ W
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);3 A+ [* k3 r- O  [2 J4 f& p
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));. s$ {9 ]9 Z6 m7 D6 i
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))# t* `, |5 z# b- }% @0 H0 K
  625.         {" `/ y8 R" Z4 A1 a/ W. J
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ! `7 g6 p3 ~8 c5 n, M
  627.                 {
    2 U1 u8 H2 V! y1 Q: C# {1 o$ Z8 W0 A
  628.                         return;. k5 i0 o' h3 m+ I9 F, P0 \: L
  629.                 }
    - y% X2 p, N: Z( ?9 k& s& r6 `; s
  630.                 TranslateMessage(&msg);+ f) o7 P1 I; c; ~* @
  631.                 DispatchMessage(&msg);
    ( h- C: U0 V; z. Q7 S: \0 |# U
  632.         }        " e, }- D# V6 _0 K2 p0 _& q/ J
  633. }( F' n, E* }4 L! F/ w5 x

  634. . {) T1 T& t7 q1 Q; d- f8 d
  635. BOOL bFirstChar=TRUE;
    4 h- t2 Z( o0 D/ a' m! U
  636. : F9 F9 l2 i; K  A  s7 G
  637. BOOL CRevAppApp::OnIdle(LONG lCount)9 R4 O' o8 x4 \8 l5 d9 y: z
  638. {
    ( B1 b& n" s+ o6 @' S
  639.         // TODO: Add your specialized code here and/or call the base class
    ' `% U/ n; Q( d' C" e' k9 ^
  640.   switch(dwProgramState)7 Y2 U9 _6 n8 I# J, y
  641.   {8 e2 ], k7 @& |
  642.   case AP_NOTHING:. y% R1 I7 `) o' ^
  643.     switch(dwStartUpSteps)
    9 {6 g% W9 o# y/ A) g
  644.     {
    ) O& _8 l" l0 q+ i
  645.     case 1:
    ! G0 W  A1 r7 V
  646.       {( U& J* }# h+ W
  647.         int i;
    9 O& ?5 q( f8 a+ L* {9 ~4 D7 J
  648.         CDC *pCDC=dlg->GetDC();! m  u6 i+ e' s
  649.         HDC hdcwnd=pCDC->m_hDC;& |$ r4 ^: G' A4 W6 A3 C
  650. //        Graphics graphics(hdcwnd);6 t& `- N3 t$ J
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    % C% W  e0 z7 O
  652. //        INT iWidth=bitmap.GetWidth();3 }, V- @4 h7 \
  653. //        INT iHeight=bitmap.GetHeight();
    ' w# n0 Z7 q$ G8 W+ p; j3 L8 j) d9 b
  654. //        Color color,colorTemp;
    * A5 K: A! z5 ^! g
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . u+ A( y( N, j# r* Z8 z  V
  656. //        {& j* \4 ]" }1 p0 {
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    / R- D4 G, s9 H# \( {
  658. //          {' h8 g/ ?" Z0 ?2 @) s' s+ s* j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);+ o6 [, e( D4 N4 |5 e" @
  660. //            colorTemp.SetValue(color.MakeARGB(
    $ _# T' r: J! Z3 N
  661. //              (BYTE)(255*iColumn/iWidth),
    $ j2 V0 p! j# k* I5 y9 m  b" Q
  662. //              color.GetRed(),) B+ ~  y8 u$ Z. k
  663. //              color.GetGreen(),
    # o* _% t8 C& C. V% [
  664. //              color.GetBlue()));) m1 t( T' @& i2 r
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);/ u! j% o! U/ z& a  _
  666. //          }3 r; x: Q! S" C7 E: ]0 J( R! ?8 p
  667. //        }
    . z2 G$ X4 F3 Z# H$ d# a/ @
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    / u- J2 U0 P5 B9 B
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. @6 B) U. Q: z0 ~# R1 ?
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    " d5 T+ d/ }- [  x% l) Z1 B! @
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- I1 L7 o* Y) a1 x! m5 ]
  672.         for(i=0;i<240;i+=8)
    $ F7 F) F, |0 }. p( [
  673.         {5 p" T1 i  E) g# ~7 O- ]& s+ e# a
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . u( }' \" Z: F
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; {! Z3 G) s* L9 g9 V+ B. D
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);1 Q1 }2 U% \4 w( g$ K+ R
  677.           Sleep(33);% q; P" t  D' I. l* W5 p' m7 p% f3 q! @' Y
  678.         }
    * i5 w1 p% \" D/ x
  679.         Sleep(1000);
    # z: C" n5 R& F- C2 p3 r/ ]; p
  680.         for(i=240;i>0;i-=8)& N4 [, g! P. d/ f
  681.         {
    5 C# E# l" n, R, V& r  F! Z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 u/ ?2 I+ r4 v( n" V/ |3 [3 A& m
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 I, N% A# D6 G  s4 C
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) }4 Q1 z" _& E4 {* i
  685.           Sleep(33);
    & u& O6 k; W& Q- h7 i
  686.         }8 l0 V! Y# P0 f
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ; ]) l: ?" d3 p1 w) w
  688.         dlg->ReleaseDC(pCDC);& O& s( n- c2 r+ y
  689.         DeleteDC(hdctar);; v& d; H8 F, ?
  690.         DeleteDC(hdcsrc);0 y$ k% Y$ P- _* O
  691.         DeleteDC(hdcorg);
    $ z- W! y3 x3 C: c+ g
  692.       }$ ?& }% {, d; u/ f9 Q1 c% G0 k
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);( d* z, a- F* e- b0 W1 L
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    3 J" i% j! f) p
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
      l; F( e/ i  c" O3 Z6 V
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");9 @& I  R. A( y5 Z$ k5 s  f/ r0 ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , ~" Z4 D9 T* L  p
  698.       if(!Dn.Connected())0 o. ], [: L& n
  699.       {
    * j8 b9 w" Z- p& B0 E) {; s* `6 ~
  700.         dwTotalFiles=1;6 J! \! Z1 }" n) G* o+ W; C: o
  701.         dwDownLoaded=0;
    ! U* X% t  N# z9 M5 b  k. y/ [5 B
  702.         bSilentStep=TRUE;" \! e+ o7 J$ W
  703.         bCompressed=FALSE;
    2 u. d' [" V3 l! A4 v) D+ n9 E! D2 _
  704.         strExtLocal.Empty();
    - o3 C7 s+ s4 m, n  s/ @4 w% w
  705.         strFullName="readme.txt";
    ! t; k% {/ v& m
  706.         dwProgramState=AP_CONNECT;
    * Q9 \: R* [( x5 O
  707.       }
    * N* c5 `! z& ^$ @1 H! M5 Z( X
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();: i' @# p( N; P: E
  709.       dwStartUpSteps=2;$ J2 h% m: e7 A. o: t# E
  710.       break;2 Y: h7 W% `3 s, l3 g/ @
  711.     case 2:
    $ b$ Z; ~# j6 P7 C7 @/ C
  712.       {
    8 W3 X7 ~) x+ ?5 l) z2 f
  713.         int iEOF;; L& E7 M7 G, W
  714.         FILE *fp;
    4 M! y- Y$ L( _3 ^  D1 H/ j
  715.         char szString[512];  k9 [/ h, }- N$ o
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    2 |. M! n4 ^' T. I
  717.         if(fp)% x2 ^7 e* v* H
  718.         {( k$ T3 a5 g) t8 v( u3 \0 R) O- E6 d3 }
  719.           do* [  F5 f* R' q- D
  720.           {* r; A' y/ t/ X; u( d! h3 P' r
  721.             iEOF=fscanf(fp,"%s",szString);' \. H  e* D1 N  d% O, a+ P
  722.             if(strlen(szString))
    . e! y; \8 ?) q" H; `  l5 C
  723.             {2 l. a" \. o9 l/ Z+ ]& ^5 {
  724.               if(bFirstChar)
    5 N9 T9 @- ^, t, ^' X: {4 t
  725.               {
    - y! W: b8 m4 D" l6 y; ?0 X) u' X
  726.                 bFirstChar=FALSE;1 a' o& {1 v) p0 v5 U, U1 t& z
  727.                 bConnectIsBig5=FALSE;
    8 q. I. p2 P2 h* f
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;' p/ i4 ?1 p9 G  b' g2 {0 C0 {
  729.               }: F( T# a: p4 V* ^4 u: }% J; C$ l+ N
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));$ r! F- x" y. N( _8 |
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    / Z8 x: @% K- d
  732.               dlg->m_ListText.AddString(szString);% _: P5 `' Q2 C0 e4 O# ?
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      ?3 _/ W/ m% b, u
  734.               *szString=0;( G* N3 K( H6 a4 L. A
  735.             }
    6 b8 F/ I, l) M+ b, R
  736.           } while(iEOF!=EOF);2 h6 `* l  _  q
  737.           fclose(fp);
    2 t: R* s1 W% V$ q6 u8 K* A
  738.           unlink(".\\DownLoad\\readme.txt");
    ; U/ C. n4 \8 U- j$ B0 X  a, l
  739.           dwStartUpSteps=3;3 o6 U5 r7 K8 G6 d6 @
  740.         }' x. G/ u' W) f; C/ T+ ?
  741.       }
    3 A) \$ F+ m. i  {! [% m. \
  742.       break;1 p1 X+ i6 W5 f) l8 Y4 ]
  743.     case 3:. w  h; g) |0 L
  744.       if(!Dn.Connected())$ T/ M4 ~* R# {' R6 f
  745.       {
    9 M; [7 M6 {- G# Y, f9 x9 b
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);( P7 A0 }" K+ Z3 S
  747.         dwTotalFiles=1;* U% _* M5 s& Y7 \2 g" _) o
  748.         dwDownLoaded=0;0 Z' f# F& |' G8 w% u
  749.         bSilentStep=TRUE;" v4 Y9 t1 S) Y) P1 j- _' O
  750.         bCompressed=FALSE;
    ( p- b3 X: ?1 X& w
  751.         strExtLocal.Empty();
    # `$ u2 f% ]3 ^- a0 G
  752.         strFullName="checkversion.txt";" v1 U  R) K: h8 y
  753.         dwProgramState=AP_CONNECT;
    7 D( q* u+ m3 o, b8 S- i5 w. E: L
  754.       }
    & @2 ~9 L- f4 `; T
  755.       dwStartUpSteps=4;
    , q- i7 z; q2 w6 z6 b; e9 n
  756.       break;
    * _1 S4 g9 R4 b: j: Q! N
  757.     case 4:
    " t' u/ L4 d% V& `2 y# T& {
  758.       {
    + V  `: {: k' n( S4 f; W. j  t$ [
  759.         FILE *fp;! R8 k+ i1 m* ~2 N$ ]& G; O( V
  760.         char szString1[128];4 k) J% k' @* c$ V- P' r5 c: i& J: c* }
  761.         char szString2[128];* [0 A% y& g/ \( M3 O
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ( Z: z3 b" F6 [8 [; x
  763.         if(fp)
    $ v1 [8 L3 Y; E6 n( U' `+ s
  764.         {- m; y) r' b6 {
  765.           fscanf(fp,"%s",szString1);
    / h% i' ~" u/ N* n; J7 g1 V) E
  766.           fclose(fp);
    ' @' m2 I) r- a1 K+ e. d
  767.           fCheckVersion=atof(szString1);) \! O3 \, ^* B
  768.           fp=fopen(".\\checkversion.dat","r");
    - S" x/ j3 {" Q- X8 ]! A9 N
  769.           if(fp)5 b, N6 g; I( X
  770.           {
    4 q7 i5 O' \: O, D7 e
  771.             fscanf(fp,"%s",szString2);4 h" L9 k# L- N
  772.             fclose(fp);) k& e; ]: z$ D: L$ M* x! [' u# Y6 V
  773.             if(atof(szString1)!=atof(szString2))4 ]  r6 f. V8 {" A1 u
  774.             {
    - }  O. R/ p- H( q
  775.               if(!Dn.Connected())+ r1 `, z# B7 o
  776.               {
    3 Z8 s" z; S5 ~
  777.                 bFirstUpdate=TRUE;
    : H+ i5 Y1 x5 ~5 w8 J3 h. o; I
  778.                 dwTotalFiles=1;
    * g  Z/ G: J) z2 M
  779.                 dwDownLoaded=0;+ ?% U* W) y% ]2 i. y
  780.                 bSilentStep=FALSE;
    + O# ]' b. X5 Z/ i
  781.                 bCompressed=TRUE;
    : H3 {, ?: J5 e8 H1 Y1 s! u
  782.                 strExtLocal=".\\DownLoad\";0 s/ L" n* B- P- }) l
  783.                 strFullName="update.txt";$ W* N( V- f4 J' [* P0 T7 b1 t9 A
  784.                 dwProgramState=AP_CONNECT;3 l& e8 u/ G0 W' L) M
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 T& j! v- G, U$ e) I3 v+ @3 L
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 k' l( l3 ]4 u. F; w. O
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");6 o6 P) }# g# G' n% M7 x6 v
  788. - G; `0 s. r* J$ `8 N, f0 K' H
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; E: @( L9 {! f
  790.                 unlink(".\\DownLoad\\checkversion.txt");8 d( L/ c$ E+ ~# e( P
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    : ~4 g1 U% D5 w& R+ i
  792.                 {( V1 T. S+ U1 v) z4 \, O3 {
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    , U4 R4 A5 n0 M- ~' N% B
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    - @9 K- B& I. N* V$ Z4 D
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");. A, u3 n6 r3 P  B) Y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ f% [! k0 h$ \) j3 z& m

  797. 4 n+ K2 n& J7 o& G  O" a& G
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, f& ~) a. L2 Y3 @
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' u6 D' U# u0 A$ F4 d5 K! R
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    - }  m( K$ L1 ~% S
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# h' a. Z5 u# }* n+ }  |( d% X& t& T
  802.                 }
    $ M5 C2 ]6 F. g. {7 w
  803.                 dwStartUpSteps=5;# P3 L4 B, I" g4 f: l6 }" h
  804.               }
    + F( S' N5 D, F) y# u
  805.             }
    ) _- \/ d' {1 R& d: y/ a
  806.             else3 w1 u2 Y! C8 [, l+ [
  807.             {
    ; v9 S# N4 Y  V) R
  808.               unlink(".\\DownLoad\\checkversion.txt");- r: Z; j9 B2 ^  K4 a% K7 ^' {
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 G+ Z0 I! f% ~4 h
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");1 K2 F) C  J- P, A
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");3 `& [4 r- D5 H( U
  812. 1 S! U! n: @2 |6 S
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 e# c+ V7 l7 X3 g7 F3 @& {
  814.               dwStartUpSteps=99;+ M3 e$ ~" B/ D+ m& a" V1 h
  815.               bFinishUpdated=TRUE;5 B! T8 ~) D4 J6 ~5 J* }
  816.               bCanUpdate=TRUE;
    ) @  ~7 H' u( ^+ y; o2 N
  817.             }
    " A6 P7 I+ n; b2 ~7 o
  818.           }; R2 e& L+ C4 W
  819.           else
    . g, ~" r- G8 S$ O, z/ _; J8 W
  820.           {
      J! O& `+ c4 B( A% t9 {
  821.             if(!Dn.Connected())
    7 \0 [- T: f5 M& E% z
  822.             {; y& A; k( H9 c. ^
  823.               bFirstUpdate=TRUE;8 C1 {8 K2 s! z4 f% a2 s; W
  824.               dwTotalFiles=1;
    % t) ?; z4 n# k/ W, u
  825.               dwDownLoaded=0;
      \2 B7 X) ]1 u- T; f
  826.               bSilentStep=FALSE;* W& Q' U" v* B* [1 K3 R6 Q
  827.               bCompressed=TRUE;  [, {; E6 s; @" z0 R/ v4 g
  828.               strExtLocal=".\\DownLoad\";
    * M9 S; l4 a+ a4 S
  829.               strFullName="update.txt";7 [. d. ~  Q) F+ }/ ~8 z! x9 `, v. _
  830.               dwProgramState=AP_CONNECT;6 c  ?  y2 J. d  ^
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ y. p5 U3 _1 K
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    + H  ~$ y8 m: _( G" A/ L
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' o) S3 N! y, R% l  d# l6 y) q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 s# n" \) p0 R
  835.               unlink(".\\DownLoad\\checkversion.txt");" E; c/ o4 U! @. f. p2 q, R9 U
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)/ w# r# H* ?$ Y' v9 e5 w% D) h7 o
  837.               {
    2 U% L% g+ c8 w! P( u; d% A& P
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    9 v4 ]  K; I  g  T3 b4 L
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");( ?$ o+ M5 W3 o( _- W* f1 [, T
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ; D* k) p) E, B) q, ^, W2 c
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . p/ [& r9 c! h" @& f3 U
  842.                 . T! I. q' }3 s( f& F- ~0 A* D5 p
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; q% P' h& ?! i6 ^0 j
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    " p; [3 ^5 Q7 C0 V0 `; I3 ]
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");) b( O" Q) @6 H2 i/ d9 [
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % Z1 _1 H+ u6 U1 B, O9 g
  847.               }
    # J. q1 p' E3 _0 m
  848.               dwStartUpSteps=5;; c6 x+ e2 _2 i# K, Q& v. h3 O
  849.             }
    $ N( o: E0 Z2 l
  850.           }
    6 W& W* l% G- m) k( G6 ]% h
  851.         }# ]: m6 F! ]" s) f/ n; _$ U
  852.         else
    + s2 w, h, g# N4 O: I. i
  853.         {3 y$ T& `" n1 ]( E- f
  854.           dwStartUpSteps=3;2 K' Z) X/ T1 t! C4 U
  855.         }/ |# T* q8 k+ s2 i) k/ y
  856.       }
    : O+ S! ~( [  [. ^
  857.       break;
    6 @) D2 W6 X0 V" `, \
  858.     case 5:' {" L% R6 g* ~5 ^5 |5 _
  859.       {
    # [% F" [  K" `
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)% }- r$ f/ D5 y
  861.         {7 A' b3 x$ x) p# S/ M+ C. {1 I+ n
  862.           int opt_overwrite=1;1 i" i2 _: l( v# h" e
  863.           int opt_do_extract_withoutpath=0;# A. w2 e! A  v5 V- S
  864.           unzFile uf=NULL;6 X1 Y" c4 U7 r( V+ Q

  865. ) u. G3 }( g0 V3 b  c/ U1 ?$ j
  866.           uf=unzOpen("Wsa.zip");5 J) Z: u* y( g+ N3 g' z
  867.           if(uf)5 {8 x8 N8 u* X6 k. I
  868.           {9 ~. B# J7 ^  w
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    , p9 z) W# }0 C3 H' R0 Q
  870.             unzClose(uf);' z) k4 ?3 k/ _2 N0 J
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");/ y  C3 B* I. b2 }' M
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    & `( ]) n7 V- u! F* a
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");# j- v, r; l) i' L
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + E, u: x  l5 v' E$ L& U
  875.           }% [  ]4 a) }& S" u
  876.           DeleteFile("Wsa.zip" );3 b  j7 x+ j5 k3 @0 L
  877.         }$ a) U( S: b$ l" i

  878. 4 E9 r( p1 h7 C& V/ A- \% h  z
  879.         if(CheckLocalVersion())/ V$ L' }; @5 n
  880.         {5 O( @7 g+ e: m. P2 d. H
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");. m& _9 a; j. D# e4 _1 A
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    3 t3 H* F& |, \2 e  G- A$ v
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");4 A. u1 O8 N2 T0 v: T
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) n& k9 s0 L* ?% D, r2 |
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);# C$ {! R! I" Y2 J$ d
  886.           dwStartUpSteps=99;
    $ ]/ F' h* a6 F5 c2 a( U8 T  U& B
  887.         }
    . q* c5 _( ^' n
  888.         else5 B* U2 W! d' G, E3 G2 Q$ A% [7 q
  889.         {- ?( `0 T. t4 w' r' T
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");1 Y% w. r9 U9 }
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# |# ?, f& J3 v1 s8 c5 B* T$ e
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    + m3 q" m& i$ r

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

3 I1 t; o8 Z. c' r5 D

評分

參與人數 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客服返回頂部