找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
8 h9 A. I! Q; s
  1. / RevApp.cpp : Defines the class behaviors for the application.4 D- o3 v1 n  Y# A, b( O. c; x
  2. //
    & m% u& y. u: G5 [: v
  3. - ^$ @" O* b, @
  4. #include "stdafx.h"
    1 k0 E" N2 U8 {+ W8 l

  5. , o; \% d/ d: }8 Z  f0 u9 o; e8 a' V6 P
  6. //#define UNICODE
    ) b- k. }* [. C, R5 k' A
  7. //#include <gdiplus.h>
    . q! w0 N& m4 A- p% Q; w
  8. //using namespace Gdiplus;
    1 G2 W- G: Z) q( d( [
  9. ( m- q7 a) ?& g. h$ F0 |$ ^
  10. #include "RevApp.h"3 C/ N- N3 L! _" z, M/ d4 |4 ^
  11. #include "RevAppDlg.h"" k9 b% s' Y- a- {+ `
  12. 3 U( \1 b& z. F( ~* r
  13. #pragma warning(disable:4786)0 |  m( Q9 {9 S, V9 @2 W+ o
  14. #include <map>
    ! i. S' S+ C) z; l; ~( ~; `
  15. #include <list>
    : u7 i; R* L1 s" T) S
  16. #include <direct.h>
    7 V: m; i" c* A' N7 Q* s
  17. # \! r8 _2 o3 s( k/ L* \: i
  18. #ifdef _DEBUG. U9 L' l0 E* [' x; V) y
  19. #define new DEBUG_NEW, V' x8 p( i' f9 B
  20. #undef THIS_FILE  L; O! x+ u# U6 u% `/ {. A: X
  21. static char THIS_FILE[] = __FILE__;
    " ^% \6 w, x- V2 \
  22. #endif
    5 o, `$ r* i8 m# H. _8 F5 G$ a! \
  23. #include "SkinResDef.h"
    ! w5 M2 I4 V; ^0 |$ I* `5 Y9 p
  24. #include "ChangeBG.h"
    9 Z, R' F" O. i1 a5 ^
  25. #include "AFXINET.H"  v- y0 D7 q( C& G! K8 I- N+ A

  26. $ w$ i' I! q1 T6 _5 [0 P9 z( X
  27. #define TRADITIONAL_CHINESE 0* _" x5 F8 w0 G5 }' s
  28. #define SIMPLIFY_CHINESE 1
    % F4 W8 F' ?) L0 f% H
  29. #define ENGLISH 2
    : _3 q8 t! T' M# u2 u7 Q
  30. int m_iLanguage = ENGLISH;
    7 E8 o2 a* E" X- d2 e& e
  31. /////////////////////////////////////////////////////////////////////////////
    3 c9 s# h/ G4 V4 u1 {
  32. // CRevAppApp3 ^6 z$ y: n- q8 o/ m1 f, M
  33. 8 S* {2 m- M/ F1 }& S, n: u
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    : X% q. z/ j# }  x$ z1 ~2 P( q1 _
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    5 M$ K. [2 a2 O% q; ^. k# S; q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ) K0 D) [0 R8 K* u0 y
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    " b% d& C7 u$ k5 V3 s2 ~
  38.         //}}AFX_MSG- W" o! l5 V; m' c( h
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
      `: ?$ ~0 P) T, u7 j
  40. END_MESSAGE_MAP()
    ; M! w9 J# {& O3 g* n1 F
  41. - H0 J% @0 B* d. _0 W5 X( P
  42. /////////////////////////////////////////////////////////////////////////////
    + Q1 T/ ~) h# p9 n0 b& k
  43. // CRevAppApp construction
    % ^! {. Q# c9 D" v
  44.   @  n( _7 l0 y" U" X
  45. CRevAppApp::CRevAppApp()
      b9 W& q4 l1 b+ u
  46. {
    - Y* _- I8 R# C3 J; @# V
  47.         // TODO: add construction code here,
    , E3 q' w5 b2 g" Y8 r9 F
  48.         // Place all significant initialization in InitInstance
    ! Z& C0 M. f0 C- C0 P! q
  49.   bDisplayIsBig5=FALSE;5 N4 e4 W) J+ k% d3 }
  50.   bRestartUpdater=FALSE;% r% K( q6 U; Z5 `) u) Z0 v
  51.   bFinishUpdated=FALSE;/ |' l/ a# C4 t9 L2 R; Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;8 i, ]- E7 X( K9 ~; Q) y6 e; x
  53.   InitChangeDataBig52GBKS();
    : b; i. h( S2 S( o2 h
  54.   InitChangeDataGBKS2Big5();
    - s/ X7 l+ `' w9 c5 |
  55.         //  O) X" \( O2 M$ d' @' h" t
  56.         bClickRunExe = FALSE;) o' d: p* p6 R3 \: g( l: J
  57.         //
    2 l; G3 t" v- ]1 e: q
  58. }
    5 h3 s5 O/ g* s

  59. 0 i$ s# j$ p3 k: N; k
  60. CRevAppApp::~CRevAppApp()
    . s1 r# t' h$ T
  61. {' p) W0 W; t8 i; m
  62.         // TODO: add construction code here,
    8 e; p7 h( X/ x/ Q: W6 N- Y& d! M
  63.         // Place all significant initialization in InitInstance
    2 U% @+ G' s+ }
  64.   EndChangeData();4 p7 W/ ]6 E. e
  65. }
    1 w; u$ q" R# Q) f1 Q: l
  66.   _; k# j7 x/ z& X
  67. /////////////////////////////////////////////////////////////////////////////
    . t  B' V3 X$ n. [( i6 Y( I
  68. // The one and only CRevAppApp object9 R% G6 G) y  ?3 z/ B

  69. , C1 h0 S) [- w- _; \
  70. CRevAppApp theApp;
    1 Z+ D: f, w" [1 I; j3 I- D

  71. ' b. m5 x- {# w& d* M4 i6 _" y+ X7 |
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    2 }, ?! a2 n( V/ z, I* F0 C
  73. {4 D' `# j- y+ L+ `
  74.   int iEOF=0;
    / A1 W" c- D" V7 I* E
  75.   char szTempName[MAX_PATH];/ X/ H- }+ u9 t( f
  76.   *szFileName=0;2 _6 ?( C! L# @- @
  77.   iEOF=fscanf(fp,"%s",szTempName);
    $ r( x) [3 O4 Q; P$ [9 i
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    & o5 e) j$ e, \
  79.   {2 y9 T9 P- A% M
  80.     strcpy(szFileName,&szTempName[1]);# [$ {# Z3 a6 ~0 s7 f/ y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)  F9 a- U+ s, S  ]3 c) b) {
  82.     {
    2 O1 B% c  j# u, u* Y8 V& N. [9 x
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ! {, H7 ~6 A4 c9 @
  84.       strcat(szFileName," ");1 R# {* X( Z/ Y/ a" S6 r5 t
  85.       strcat(szFileName,szTempName);
    # C( g  `) M  f/ v5 @* I
  86.     }
    7 X. f; S+ n- j" a0 Z- ~& i4 p  [. H: {
  87.     if(strlen(szFileName)>=1)
    5 S$ D& c2 {2 Z3 e* N% L; U
  88.     {6 Z; n& l* x' n# u( _
  89.       szFileName[strlen(szFileName)-1]=0;$ t' ]  b2 \& N
  90.     }
    1 ~& I' S( Y7 G2 ?
  91.   }
    9 B0 l6 J7 P2 l0 Z0 @/ S& }; v3 h4 x
  92.   return szFileName;
    ! Q. u: p  Y" H+ Z3 @! R% x
  93. }1 e+ q* b1 I; X8 C
  94.   I$ z9 u: W- ~
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( e( I. B, g! E; T
  96. {
    0 X2 I6 o" s9 p# t* O
  97.   FILE *fp;) q; b5 Y' G* v6 N& T8 y- ^- A
  98.   char *key=NULL;: f7 ^+ z" r, `8 ~% Z$ f
  99.   char version[MAX_PATH];' {# y6 y* v' @/ j8 f& T
  100.   LPUPDATEFILE file,olds;2 m$ i7 A9 @& @7 a, O) d
  101.   std::map<CString,LPUPDATEFILE>::iterator p;  [/ u% ^0 p; L9 ]0 l' L7 W
  102. 5 J. c# l$ v* B( `$ `: s  x1 X
  103.   UpdateList.clear();+ u) b* w* Y+ u& Q0 q# X- A
  104.   UpdateFile.clear();
    & C" W, X0 Q% f/ j0 }7 b
  105.   if(GetFileAttributes(filename)==-1) return false;
    : y! R/ y* Z3 l  |( K, a
  106.   if(!(fp=fopen(filename,"r"))) return false;6 T2 B0 J3 p2 s& Y+ j3 ~; z+ S
  107.   fscanf(fp,"%s",version);
    ( U4 `, ]. `0 [3 m
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    0 f/ B+ z; p$ v
  109.   while(fscanf(fp,"%s",version)!=EOF)
    % u  K* i- N0 S5 ?; G' F+ z, T
  110.   {
    5 Q1 W1 Y0 L! p
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " O! z/ k5 q! S3 r# R; L
  112.     fscanf(fp,"%s",file->path);" e4 ^1 E2 L$ l6 R" R* Q. ~4 _
  113.     ReadFileNames(fp,file->file);
    & ~0 S8 C, R& W
  114.     strcpy(file->full,".");$ K2 q; [9 C5 i. r
  115.     strcat(file->full,file->path);+ b0 a9 w! i1 ^5 _8 s
  116.     strcat(file->full,file->file);2 f0 f# n9 A, I7 x. P' b
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())# r8 |9 w8 ~/ D. g2 H% V
  118.     {# Z8 V+ Q, F! W# }5 a+ F" l
  119.       file->vers=(float)atof(version);
    % C9 R3 N6 {& W, U
  120.       UpdateList.push_back(file->full);
    / |6 N  B; h" [: z3 {1 J
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));9 r! Y6 s+ i, d6 g0 Y. _
  122.     }
    3 o" `/ M- u0 G8 ~
  123.     else6 W, a% }& I9 i2 }
  124.     {' W3 q# `1 v" H+ T
  125.       olds=(*p).second;9 u9 l  Y8 `: H5 r4 C# f
  126.       if(olds->vers<(float)atof(version))
    7 q$ y( b3 C" v' d5 [! x: v3 P
  127.       {
    2 K* d1 Q2 g. N; o
  128.         olds->vers=(float)atof(version);
    ' L7 _5 e+ C6 U6 X
  129.       }- ^; M6 `( u8 H& p+ C& o
  130.       free(file);
    + I+ B* H; V- K) f3 z; ?. D7 i& q
  131.     }/ Q: t( U: N4 p% {! _8 ]' U; s
  132.   }
    7 u% o5 t1 k7 ?& [+ E. B! M8 F; Y
  133.   fclose(fp);" q; B+ C/ |: S% a
  134.   return true;+ _3 E7 L- [% l( v
  135. }2 _8 L$ W$ `8 n$ \( v
  136. : a0 I  q/ k% Y1 |+ \# @2 W$ Q7 r4 v
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)# Q- L. o* F" I# C- B
  138. {
    7 K+ i, J* ]0 g2 j5 d- w/ E3 h
  139.   TCHAR  szFull[MAX_PATH];
    / F3 E& K0 Y9 q
  140.   TCHAR *token,*inter;: L- }2 r$ e1 I6 s0 X
  141.   *szPath=0;4 C" q! b, Z+ n2 t6 u, m+ c$ w# E; K8 f
  142.   strcpy(szFull,szFullPath);. l% M6 `) I& r7 i1 l
  143.   token=strtok(szFull,"\\/");
    4 {/ z" P5 Q" [( s7 E! N
  144.   inter=token;
    " D" B4 n' {1 r! i
  145.   while(token=strtok(NULL,"\\/"))2 _7 G8 k8 W, N3 ?/ e9 g
  146.   {; _. t3 l. D: H. @1 {) |+ q2 X: U. S
  147.     strcat(szPath,inter);
    & i, d7 w# J% Q. ^
  148.     strcat(szPath,"\");
    % M% [2 ?+ s: h, N" _& Q% g
  149.     inter=token;. I, d. z) |) O
  150.   }' M* ^9 \) E+ z) u5 `1 D1 F1 `
  151.   return strlen(szPath);
    - j8 @+ G6 c# d+ I. Q9 s; L
  152. }
    - M' b/ F$ ?: J/ P

  153. 2 H( m5 [- r8 Q2 K! Y3 I
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)9 \7 C7 W' C5 a; q" D7 R$ U
  155. {( W0 }1 Q0 f7 Q; T( D4 g( w
  156.   DWORD attrib=GetFileAttributes(Target);
    % ~! c- A, ~1 d/ }: \" S: r' T( A- F
  157.   if(attrib!=-1); A/ m. z! }# j& J6 l! y2 n( z
  158.   {2 ~' Y& t$ O- X# P7 A/ y! c. z" B4 P- }
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))4 E' o4 [" x3 `/ w: A9 b8 i6 \
  160.     {# x6 p5 P9 |* O
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);% g+ Q( x  K2 c$ O5 l7 B. a
  162.       SetFileAttributes(Target,attrib);
    0 M2 N) k0 s# B. V7 T
  163.     }
    : Q7 P* v: D; w) |: m! ?
  164.   }5 y9 R1 c9 o8 P; `  I
  165.   CopyFile(Source,Target,Erase);
    3 v8 j. O5 g7 ]- r9 z, ?' I( n
  166. }
    / c) e& t% K4 q5 D/ G* y1 u( [* L

  167. : g: Q2 n8 ]/ j7 w& w' e
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    " W4 Q7 `0 z$ o8 Z) @
  169. {
    ) Q. A% E0 i' S- S
  170.      FILE *fp;
    3 N* i5 ?0 S$ x( {7 r1 ?) N
  171.      char  szBuffer[8192];
    ' e/ O6 X9 _% a0 f" c
  172.   va_list  argptr;+ l9 D! r, e% T
  173. / {; I! _* O3 h& K: C
  174.         va_start(argptr,message);
    : d; k6 C7 w% |) B" w  J4 w
  175.         vsprintf(szBuffer,message,argptr);
    4 W( S8 y' Q8 ?& S' S
  176.         va_end(argptr);" ]* V- r& w4 G0 S9 Z1 \
  177.   fp=fopen(FileName,"a");; P& c" A: h5 O/ L+ R
  178.   if(fp)
    6 B- r9 E: l( R* W% E
  179.   {
    : t+ N8 b8 ^# l8 l  P
  180.     fprintf(fp,szBuffer);
    7 p) A& q) q" S
  181.     fclose(fp);
    , M0 n  G) A( W" t& B' P
  182.           _flushall();- q* P$ m1 c" d' W
  183.   }% A" s7 W: w. S1 t
  184. }
    8 o; Y/ ]4 _0 e+ y8 l) w

  185. # t+ ]% Y2 m4 G$ N: E
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    * z) ^( P8 o1 v3 w6 `4 f$ L% l
  187. {
    4 r+ @2 e% q: R
  188.      FILE *fp;9 M4 D, ]4 H- o; E  o( w/ R: L
  189.     DWORD  attrib;
    0 s1 k+ n/ }2 S* R5 S: }
  190.   attrib=GetFileAttributes(FileName);
    8 s. g2 G- b# y5 t. p/ ?! R' l2 Q
  191.   if(attrib!=-1)+ K* V! I8 h8 X+ c- e
  192.   {
    9 i6 O3 j# J  A% [# d& n
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);$ {$ Q1 p5 T  y* B4 e: j% N
  194.     if(!SetFileAttributes(FileName,attrib))7 n& V% p* z% d$ u' S8 M3 u
  195.     {1 X8 x' h1 U* d/ i" r
  196.       return FALSE;) F! o+ W, `& P- H' N* Y) l! i- v
  197.     }* x" F4 b( B: ]8 r$ V
  198.   }) @' g  `* l7 v
  199.   fp=fopen(FileName,"wb");
    1 D- Y$ W' L! g* j7 d: d
  200.   if(fp)& J- q" K' a' J1 T7 V
  201.   {. U6 A$ v0 k2 J+ m/ }/ R
  202.     fclose(fp);
    & j/ P& x! U7 n4 ]$ \6 Y" G
  203.   }: u. g" u1 ^; g
  204.   return TRUE;
    * V+ b8 Q7 B4 u$ d$ Q! W& ]# m
  205. }2 X* o0 l8 @' J2 x  E8 T

  206. - ~2 w* a$ d% Q6 o* C' v! c: {
  207. BOOL CRevAppApp::UpdateLocalVersion(void)' F, W% z5 g2 a7 g
  208. {
      f, O9 R8 A" ^. G$ b% k
  209.   char filename[MAX_PATH];
    $ E* l. ^' [5 U: v6 Z/ W) L  J# q
  210.   LPUPDATEFILE file,olds;) t: Y8 k: _/ q8 \
  211.   std::map<int,CString>::iterator i;1 p8 D) s3 v2 j- B( ~6 [
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( M" L0 S! t0 C( _! S
  213.   std::list<CString>::iterator l;, u: t& k2 z* k* x1 A
  214. % g+ I9 j) T1 D  Z8 B
  215.   if(bFirstUpdate)
    8 J6 J6 K5 W3 q9 F: y# p! }
  216.   {: v- B5 M8 I9 R# D7 K6 X$ O
  217.     dwCurrFile=0;0 f- [9 _' V+ o8 Z) k# E
  218.     bFirstUpdate=FALSE;: \. F% K- F/ [( l* r
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + ^) q1 y& i% h' l& q
  220.     {
    ' [; G4 i, {% M9 e. k
  221.       dwTotalFiles=UpdateLocal.size();. ~$ s3 `: R) V( A! @" Z, m
  222.       dwDownLoaded=0;
    % v) M$ Y$ R5 [* D9 V
  223.       bSilentStep=FALSE;
    * l7 e4 v: d6 B0 f+ _8 m
  224.       bCompressed=TRUE;. f% ^; \$ V( z' k
  225.       strExtLocal.Empty();
    - ]7 S! G6 {  E$ d+ N
  226.       strFullName=(*i).second;
    ! f, f0 S# S8 c; }
  227.       dwProgramState=AP_CONNECT;0 i- E( j3 \" M8 l4 g1 ~, C
  228.       return TRUE;
    & N# T5 ]4 S+ g" o- \
  229.     }# m6 ^7 c3 R+ ?; u, S
  230.   }
    , c, r. T; J# K5 `- W
  231.   else if(bRestartUpdater==FALSE)  w6 y" e. y" a' C8 E% H
  232.   {
    ! k+ T: ?8 t* ?2 v
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())& W0 E5 J& i1 M: ?, G
  234.     {
    % t+ O2 S+ ]9 i5 b5 k! _
  235.       file=(*p).second;9 Y  P- e8 r5 P) h" R. \
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())' q8 ^9 D! z7 H5 X! P
  237.       {' j. E& C7 h# u; i
  238.         olds=(*p).second;! Y9 ~# p$ f2 u1 p
  239.         olds->vers=file->vers;9 I  n! z7 n4 i2 T# k$ [( r
  240.       }+ _) {! o) D# {6 I
  241.       else+ N3 F9 s! W) ]9 q1 i
  242.       {
    * p; s. T9 {1 B/ Z5 H
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , Z! i  Q! J, s
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    % z8 z; F2 Y+ h7 K
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));- |' t8 l8 J& M3 D' e4 R; _0 d
  246.       }  G1 u' A& i) ?8 s& p: [. S
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ) h1 x4 Y9 A# a% b
  248.       sprintf(filename,"(%s)",file->file);
    - |, j3 U  V/ a( [8 L1 E
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);9 X; f4 M% e- I7 s! y) g, z/ i. c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }6 p8 f$ O$ P' N
  251.     }! }4 t" R, G- ]2 x
  252.     dwCurrFile++;( k  H4 N; E" i7 m
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ h; \0 _, {0 Y( x
  254.     {' \$ x  ]) ^# N2 T- Q
  255.       bSilentStep=FALSE;
    % I" H( D2 T7 W+ b* b
  256.       bCompressed=TRUE;8 r, ]& \/ G4 ?7 P+ M. }
  257.       strExtLocal.Empty();% p$ v0 \6 q9 f8 g" Q% _; D7 H  B
  258.       strFullName=(*i).second;
    7 l. d" d2 L2 V: l7 Z" g, u
  259.       dwProgramState=AP_CONNECT;  L  k( g! r$ S  q
  260.       return TRUE;
    " C3 _- d6 E4 `% \* Z4 q- R; s  R
  261.     }
      S/ Y( M- E8 V. c
  262.     if(!bRestartUpdater)
    / a9 ~, e  N7 k$ X3 P
  263.     {* U7 h* d7 z9 m! Q% d
  264.       int iCurrSize,iFileSize;% C0 F; |6 V2 j# H3 ^# D
  265.       iCurrSize=0;
    + c0 ]& D; S4 u$ ]( V% K+ X
  266.       iFileSize=UpdateList2.size();6 {1 c2 d  z6 {) X9 s8 m0 w
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");, m1 I) l" ^5 f1 j
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");& _  X, K# R2 [
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");+ X4 l/ U, ^, c$ }1 N
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 p1 \5 S, i0 ~: b! F* w9 o
  271.       Fclearf(".\\update.dat");1 ^- t8 z* U0 y0 I( I
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    6 i# T+ ?, w7 k  `" m8 N9 T
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    - r" Z/ w, w. A9 ~0 r2 D. V* I
  274.       {
      A, P0 s/ r- t6 y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ; V3 j! y2 c# c' L
  276.         {
    0 ?) V2 Z; H, x/ g
  277.           file=(*p).second;
    9 L) C+ Z4 l2 T  P6 ]& B
  278.           sprintf(filename,"(%s)",file->file);9 w! w( j; t0 |4 }" b) e
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    . ]: f0 V3 Y! j$ f' k& B0 u; [
  280.           iCurrSize++;
    8 N. l: [( x  r
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));  J& {) l2 P" k1 ^+ Z
  282.         }) n' ]7 D9 H, G- t3 ]3 q3 u  C
  283.       }; q, E) h6 W$ I/ g  J7 H+ c  s( [
  284.       unlink(".\\update.txt");% @5 d! j$ J, x2 G+ r
  285.       unlink(".\\update.tmp");( y0 n0 @% C% d& K7 m" r
  286.       Fclearf(".\\checkversion.dat");, d* J4 b! Q/ W/ N. i" @7 d
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( b  t& z$ x+ u
  288.       if(UpdateLocal.size()). u% @( y3 g( ?9 U6 R
  289.       {/ K5 U2 \0 A3 z/ f, T$ ~2 m
  290.         UpdateLocal.clear();" W: P8 X% J8 i% i/ i1 N' h$ U
  291.       }7 \8 {$ T6 Z1 L/ q" z- C0 l
  292.       if(UpdateFile3.size())
    $ E: n4 }, i& u
  293.       {
    # E  s2 U! f$ S. a8 E. P: n3 [: y/ P
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ X/ D% A0 j# @
  295.         {
    # V+ Y. B  [1 _$ E
  296.           file=(*p).second;
    5 v' z* e# e( L+ h7 c
  297.           free(file);
    + r+ @. Q5 m- R+ B$ M# i
  298.         }
    3 q. Q+ `0 G5 W5 o) l) d
  299.         UpdateFile3.clear();* b: ?1 h9 [2 j4 c) r6 @: p
  300.         UpdateList3.clear();) s3 z, f  P8 `, u. D
  301.       }
    ; [6 K; F% n. `: m3 g# T
  302.       if(UpdateFile2.size())
    , S5 }* L8 F4 ]; ~% P. P) F
  303.       {
    % Q8 ]1 K: a5 L* V
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ; V' {6 M" i1 f& E5 g8 s
  305.         {9 x- m, E$ l, Z0 O( H; ^; E0 l, H# p: o
  306.           file=(*p).second;
    * R* H* J( V& j7 Y) N
  307.           free(file);
    5 i9 S) p- [" X% h
  308.         }
    , i  ]. D2 w' A$ [  a
  309.         UpdateFile2.clear();
    8 |, I! B+ X4 y4 C4 t2 A
  310.         UpdateList2.clear();
    # J- O6 \1 \. l7 q0 f
  311.       }0 {! ^& M  K* k' i0 Y
  312.       if(UpdateFile1.size()); ]) y9 I6 d# M. x( d# V
  313.       {
    0 A7 n1 w0 o7 m$ A$ B7 X; u0 R" _
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 ^$ B+ J9 R0 J
  315.         {& b' h$ A+ C0 K0 S7 P
  316.           file=(*p).second;6 i0 u& d4 j0 R$ {
  317.           free(file);
    ! W1 m2 F( ~9 ?. U) b
  318.         }
    - w/ ]0 P( _' W- g+ S4 p
  319.         UpdateFile1.clear();+ h' ]/ c; `) v$ v/ v* T* V4 z0 b& @
  320.         UpdateList1.clear();
    1 k/ Y* k9 k0 h* T% K9 K0 s2 I1 @
  321.       }
    1 a( c! ?2 ~3 g
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    9 d* ?. n7 a5 S; S+ u. ~
  323.     }
    5 p7 ~" s& l8 v- q5 r- i. X; X, m' G
  324.   }
      {: R& [6 Z/ F
  325.   return FALSE;
    5 }  k5 d8 R" U( ]9 c) A& {
  326. }, r( A) S. n. |3 X  C+ w% ~
  327. : h+ o( k! L8 K5 c% V/ S+ Z2 X7 `
  328. void CRevAppApp::ClearAll(void)
      F* l' h3 G' ]4 Y) F! s
  329. {
    3 A5 L( U( d" ~4 a9 }" n& F
  330.   LPUPDATEFILE file;9 i  R/ _5 c! @9 Y7 ?
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    . r- R) [5 K& |" h/ [( K" Z+ i8 @

  332. 8 h/ y. Q' Y+ T) J/ L9 ^' @, J
  333.   if(UpdateLocal.size())
    5 N. f7 W3 A! W, j* A1 K- c5 A
  334.   {% Y/ _7 F, B+ M. Z, o
  335.     UpdateLocal.clear();1 \, t1 w2 z' F5 H4 f
  336.   }
    , N* w3 ~. x4 s
  337.   if(UpdateFile3.size())2 o* S0 ^+ J0 |3 h! B
  338.   {
    " W) {& b/ p1 T: m7 L  U
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  Q8 h' c) a( d+ m: j( `0 L
  340.     {7 T7 a% `4 s6 w5 D
  341.       file=(*p).second;5 c- _  Q- l# v( D: ]7 L# |
  342.       free(file);' ^- h4 j* D3 g. s
  343.     }: Z% g9 i, R' S5 c# k; S
  344.     UpdateFile3.clear();
    2 |2 ?; I8 m4 n: A3 p5 w
  345.     UpdateList3.clear();, P# W9 `3 j  n: b
  346.   }1 |& l3 J  k( N5 c
  347.   if(UpdateFile2.size())1 W# [+ S) P9 W' T" o6 T' A
  348.   {
    5 L# B. C+ s4 \1 V" H7 N
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); L% D% {5 P9 N7 p
  350.     {" `, p. X) }6 B
  351.       file=(*p).second;
    # H& H# p. f- @& O% c# q, K" [9 G& y
  352.       free(file);' P5 y! ^* y& t, Y
  353.     }
    . j& K- ~, ?9 J
  354.     UpdateFile2.clear();5 y3 Z1 v; j. b$ A( p6 S
  355.     UpdateList2.clear();1 Y- P. A9 ]) F7 o% A
  356.   }8 Y) P* m) |. E6 a5 g& l
  357.   if(UpdateFile1.size())
    0 L; ~9 B% ], X! }. t
  358.   {. z4 @6 E" ]& I5 m" K; q
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! x( W) p& X( g0 }  Y
  360.     {
    8 k$ K2 }/ ~5 G9 C8 W9 d8 q
  361.       file=(*p).second;
    4 |7 e5 C, E; Z
  362.       free(file);
    7 ~* t1 s2 I3 q6 r' q1 Q5 f' c
  363.     }- v8 }! e" w0 y
  364.     UpdateFile1.clear();
    $ W3 n6 o& l! M1 S6 p
  365.     UpdateList1.clear();/ }3 Q& |  H4 C. N. @' [- h
  366.   }
    $ \+ x! W- H5 A4 x6 d
  367. }  
    : J8 s5 g3 E3 d5 p7 j! i$ }% C4 L) E
  368.   
    ' F+ _; `& P( L
  369. BOOL CRevAppApp::CheckLocalVersion(void)8 N6 B4 W/ @  e4 M
  370. {
    * B' Z2 z3 P$ _2 M
  371.   int c;
      y( g  Q/ k& e5 w( N
  372.   LPUPDATEFILE file1,file2;9 P" ]; r& u, Y8 d3 b
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;4 j$ b- Y4 F1 c, H& P! d- @0 T
  374.   std::list<CString>::iterator l;) r* r3 b3 k$ O3 x2 y

  375. ( D. _4 M- s  Z3 F
  376.   UpdateLocal.clear();
    6 b5 n6 \, |+ ^) h2 R0 w# z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ( R$ N( Z! V/ [  G2 ]
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);/ D* M# }# ]! Z# M4 B/ F% M% D
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);0 B- Q8 j$ n1 O! }+ l( i% }2 n
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    1 z' E3 n$ I8 ?$ C$ `' U9 b
  381.   if(UpdateFile3.size())& i5 [  D3 B. B& P0 n  B) X  W
  382.   {: P$ w) `$ W5 J9 i+ u9 b7 d
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)/ F( E: P# ]$ N0 c6 h# e, y
  384.     {/ ?% Q; d+ K1 C, E" C& b
  385.       file2=(LPUPDATEFILE)(*i).second;, }! C; u* n8 @+ S  `  W9 _/ A* |
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 s; r2 C7 d+ u; E8 u
  387.       {
    / H; h; d" u6 x& ~8 C! F5 y
  388.         file1=(LPUPDATEFILE)(*p).second;4 I3 H5 L- |: Y5 z
  389.         file1->vers=file2->vers;
    6 J8 O5 k5 P! c8 `  h
  390.       }
    1 n; Q# K1 ]2 q' o
  391.       else2 j: k; K9 f5 ?8 O
  392.       {; x5 \. J7 l- G) B
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: s2 v9 K8 X: Q5 Y- J# F
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));& t. i, _0 b8 k6 z, U# x
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    # [. E3 u& Y1 d5 |& ]* O" Q
  396.       }) R9 F, A7 K6 @- z1 n5 B4 \
  397.     }+ s' E7 p' F! f4 J
  398.   }7 o+ |7 F* d* w9 B3 B
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / Q% M( V; N( {; P, `/ }& {
  400.   {
    6 j. G: P1 d; K4 G: X+ m
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    3 R( {, _4 ~' x# V
  402.     {' l, t4 C* w, ^# o5 o. z+ U
  403.       file2=(LPUPDATEFILE)(*i).second;
    ' f! s) _& u8 c0 g6 d) b. N
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; P4 Q8 A3 k& m6 Q& s) ?4 j
  405.       {' h% |+ p; w+ o7 o/ O% [
  406.         file1=(LPUPDATEFILE)(*p).second;' h! N) s. M- r7 v3 t, f' k! z
  407.         if(file1->vers!=file2->vers)
    0 M* l: A: s9 D2 J  U  m/ K9 c
  408.         {
    ( j2 b- v' w- R( c8 p
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 \+ B$ T& n" }8 D% d# K
  410.           c++;
    % q+ d7 y' k  n) v+ v
  411.         }1 e9 p4 H' N$ ?, e2 T# C
  412.       }' ]# o& p' E8 b* k) I
  413.       else5 y( Y! F+ n; @# Q' H4 k9 Z, X; E
  414.       {
    5 s4 H7 C) P( {) ^5 t$ x' Y/ t
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ h# H" V6 n/ j! d# E/ R% B
  416.         c++;! n  S2 R, N* d) ?
  417.       }+ _6 W5 z5 C# N0 R. l- E# a
  418.     }6 p$ \$ g6 Q# n# J; D; b! V# f! J
  419.   }
    3 }3 J1 B) c: e; v; d
  420.   unlink(".\\DownLoad\\update.txt");( H2 x4 B: L6 g+ D' J
  421.   if(UpdateLocal.size()) return TRUE;
    % ?( j! v! @8 _4 M+ d8 Q7 j2 B
  422.   else                   return FALSE;$ d8 H. c9 y4 f$ L3 T4 |) x
  423. }, h* n8 W- n2 d: _. G2 g% n
  424. - [  _; Z3 T8 k2 f; M+ h
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    : d: M; O" H% M6 ^
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"+ p% ?/ ?; G8 k' `9 ^

  427. : Q6 b0 S; ~8 X
  428. 1 j) Q0 h9 k' c1 {$ G9 J+ W2 S2 C
  429. & o9 \8 g- {' m4 J
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile); w. g8 @# Y: m5 p. O( i5 ]
  431. {
    ( W2 u1 E: z1 y' }
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;2 v7 V& H+ n7 u) z, {6 X& q( H6 w
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& p8 U5 L, R/ `/ @
  434.   {
      x" W: M; j+ N! j( y, j
  435.     char szLanguage[50];
    ( v+ d+ D7 [* o, |
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 E& H1 C% u, j0 @: ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;$ d& D  S5 S6 `" `
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % l4 {; q( v6 R1 t% I# |
  439.     else                                   m_iLanguage=ENGLISH;
    . q  H3 ^( r: g$ ~2 j; ^3 h
  440.     char szRegister[100];
    0 b: }) Z% U0 |1 _0 i& S* ?1 h
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  H2 ^+ s: t* t- E" ~8 G8 u- M8 \- D
  442.     strRegsName=szRegister;
    . i% p" ^8 V: ^  N  a
  443.     char szPatchURL[100];' [6 d" v2 ?7 u6 e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % X0 _# d$ P/ J: W! M; i
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ w7 ]& b) m7 Y" D2 |& [1 g
  446.   }
    2 i2 {; |+ Y; ?6 t9 M  [
  447.   else( a& x6 T0 |3 I! O) U; @
  448.   {: a; R' L9 _& ~' V. C
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# s# H: c! K" ^  X
  450.     strRegsName=DEFAULT_REG_URL;
    # e2 V, h/ f" A  Z8 y0 Y
  451.   }
    & `' Z; D1 j7 m  T6 e
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * l( M) P6 ], w# v8 |5 d
  453.   {1 z: U- m2 C+ X, K3 F; w
  454.     char szIP[50];0 d# k/ `( W- {& A6 J" m4 {
  455.     char szDIR[300];
    1 o4 U2 ^6 ^1 K1 `& _& c
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 K9 v: Z" G- z1 y/ Y6 N, B& _+ l
  457.     {
    # ~0 P; j  d' A
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    * K+ _/ C& |9 [
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");9 d2 [, E; i, B/ c9 D0 P/ ^
  460.       strHostName=szIP;& r; e# r* D5 k, Z2 c: O
  461.       strHostPath.Format("/%s",szDIR);
    1 T# B# g. P% ^
  462.     }- \2 ~$ b( p# a3 Y4 |, N
  463.     else4 [) Q0 g; ]( n8 O! T: A& H
  464.     {# d/ u: q/ w' b, J2 M
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 C$ D2 U+ l% o
  466.       {
    0 l) G" g7 h+ f+ c; o  j
  467.         char szLanguage[50];
    3 H2 w8 W, y) v4 w9 Q5 C7 g
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' s- S. q  i9 s
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ c6 Z( C$ f$ E3 h8 w, M
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& |% P/ S! F: ^& h) D# ?
  471.         else                                   m_iLanguage=ENGLISH;* _% T5 l6 }0 S0 [& y- x
  472.         char szRegister[100];
    . Q7 y; c" M/ z8 k
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' a7 V6 A) G7 Z
  474.         strRegsName=szRegister;8 i" H, |/ V1 O4 A& G- A
  475.         char szPatchURL[100];2 M) `$ M. N! Z; M" z8 [
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" X) J$ R" R8 m* b8 l7 n, v# Y
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # I: }5 ]# z, [& V( a
  478.       }* X. T3 f! {! u$ \
  479.       else% s6 K' c& P. x7 y7 q- a
  480.       {
    - s) M5 ^, x  H6 E7 a9 I; Y$ m2 }+ O
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ J; I, R, c( f! a5 P$ m% F) k4 }
  482.         strRegsName=DEFAULT_REG_URL;
    , ?6 m1 v0 h; `6 V, ?
  483.       }
    ) C, S7 e  Y! m* v) @
  484.     }
      l- R. J3 N4 a- \, k- v
  485.   }/ \$ f' R, V. E  ^
  486.   return true;
    - s3 @& A& h; a1 A" t# t
  487. }; R' }5 g" N$ G- U5 d6 I
  488. 4 a+ j9 y# S& k* |+ }; X
  489. #include ".\ZLib\unzip.h"
    5 ^& A  s8 v& k) f; D
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);) i- a/ A. p4 C, W$ ]
  491. /////////////////////////////////////////////////////////////////////////////! J5 I; E7 Z5 X5 u' t, H
  492. // CRevAppApp initialization
    9 E* u+ H/ U7 L9 @" T- Y

  493. * ?/ @  N" e! E" i4 |
  494. BOOL CRevAppApp::InitInstance()* q$ s* \6 j$ r  I
  495. {6 Q3 A4 s* O, `# u
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];" s$ j2 @" _4 h1 H8 O5 t/ P* c+ m
  497. 8 p! S/ \- Z' }! L- X
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    # X9 `7 b6 C; S! x6 }4 b8 m, k
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    : [+ t( k; `: r8 t' f# F3 _7 c
  500.   {
    9 p8 e0 i5 b5 F# M* E7 p' X
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");1 w% f9 _5 t- h& k- D
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ) M, t" _' ]$ s4 f
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))): R4 @9 ^' ~2 c' h, n
  504.     {
    . s4 f/ C5 P& l- N* T' y/ n' e
  505.       strcpy(szPath,szPathTarget);
    ( Y+ X, x% l- n% F( b
  506.       SetCurrentDirectory(szPath);8 j, G: T7 \4 d& W/ C/ k
  507.     }% b7 T" I/ L7 x1 K
  508.   }( e8 {( V+ y. R% _
  509. #ifdef _DEBUG# ?# ^6 b5 A) S, x
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ J- G. ~8 r5 q% t1 H
  511. #else% `# V# [+ o' S' t0 }
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! z0 j( g8 [" q# Q# r& [; k/ T
  513. #endif
    # p; {# ?; ^5 J4 p! k2 [
  514.   {
    2 s, `* Q0 L1 x& Y+ `) V
  515.     char tempFileName[MAX_PATH];) E$ B- r: b8 E% o
  516.     strcpy(tempFileName,szPathSource);1 N* ^, W3 L) a( i9 n) k9 k* J
  517.     tempFileName[strlen(szPathSource)-12]=0;
    6 d9 g2 [+ ]8 o- t
  518.     strcat(tempFileName,"\\$CSUpdate.exe");. L; `% V. x) g' J( C& J9 C
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    2 V/ _: D7 g9 d
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    6 x. Q$ H" x  F. v/ H# K, n" p% I3 H
  521.     return TRUE;& e6 t5 T  v* X$ A
  522.   }9 J8 A+ o4 ?8 S6 g) J
  523.   // Nuke 0118: Delete run.exe
    ) w! t" l3 l" {1 G8 I$ f
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 @3 F2 E- N4 U4 t) b' J
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");- U! I7 [" t0 I$ ^6 `$ a
  526.   if(!ReadCfgFile("Config.ini"))3 q1 c+ f( D& t8 |2 p2 N4 V
  527.   {
    % r0 R% l& Z0 C: q: u
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);" _% x3 l: \% w; |5 @
  529.     return TRUE;: p2 v/ a, q9 a1 L
  530.   }6 j' |  k7 i1 Z& c0 b% J% ~9 r
  531.   HANDLE mutex;5 Z; c) N/ K3 E9 ^
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    6 V7 \( v" X& O& f
  533.   {8 |: p; b3 _  j$ ^- m2 s
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)# |. H6 }. [7 K2 e
  535.     {1 R. [% q" Q+ L: J4 C! a' c
  536.       CloseHandle(mutex);$ E# b% o( N6 P$ M) f- G/ q3 {1 c
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);& O- G5 @- U) K, R! I- M
  538.       return TRUE;5 i. S5 G) f* h1 z4 u; a# y! c- F
  539.     }, b8 |. s" t  z
  540.   }  ; W* P) d' q8 }. d# O# k
  541.   CloseHandle(mutex);
    2 |6 R6 n: u$ M- G3 |" B
  542. 8 L/ V+ `* K' M6 f; h  M0 C: x2 i
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    " j" c: Q0 ^: {7 r9 ?( B' x% \

  544. ) H, d: n. H$ R: R  g
  545.         AfxEnableControlContainer();! M& r/ a% i8 Q# Z" T

  546. 9 X+ ~% V/ b$ V8 ?) F; Y
  547.   bCanUpdate=FALSE;
    : H$ M3 t5 _& ^3 f% B4 }4 n, \9 E6 g
  548.   dwStartUpSteps=1;% l1 O$ T5 C, P7 {
  549.   dwProgramState=AP_NOTHING;
    " Q, u! l) K+ [2 ?8 W- N; Z
  550. 0 v9 a( f+ N+ {5 F2 {" R' B
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);/ p% \. J, I( k- K

  552. : N: j& J' l* T# S9 A7 }, b* b
  553.         // Standard initialization
    / Z2 j3 T- S9 ?; {
  554.         // If you are not using these features and wish to reduce the size
    . M. b8 L9 t: D
  555.         //  of your final executable, you should remove from the following
    # m0 j1 U& h8 ~8 {
  556.         //  the specific initialization routines you do not need.
    7 \- R0 O7 P0 v* D4 H2 b( n
  557. 4 D, O; Q( h% U( \4 Q+ x# E! G
  558. #ifdef _AFXDLL
      Z: ^' V& ]; H& k" O
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL. @3 B1 `- F1 T, u& q: P; _; G
  560. #else
    % r  e' m1 Z6 @2 H
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically* `( H; G: g$ C1 a5 x% }  L# o
  562. #endif2 X5 p. h, @8 y+ x3 Z1 i% S

  563. % t4 C) `) e1 y. L6 K& Q# n
  564.   dlg=new CRevAppDlg;
    + ^) b) q) d2 l
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    % j$ F' v# T$ `: l3 G
  566.   dlg->ShowWindow(SW_SHOWNORMAL);* i7 v6 r$ n  b3 x+ w9 q: h( Q
  567.   m_pMainWnd=dlg;
    . {0 z3 Z  h0 @( S5 Y: d, \* C4 t4 k
  568. 0 {- `# C1 ], y0 k8 f8 n
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);! @, S8 k% C7 T2 f
  570. & Z/ u, T) ^3 d7 `/ H$ t% V
  571. //  GdiplusStartupInput gdiplusStartupInput;' a, m/ N2 \- k9 ^
  572. //  ULONG_PTR gdiplusToken;
    5 }6 R% E1 f: J2 z
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);# ?& \6 o9 H3 n5 }8 S8 v6 p" _: w
  574. : s2 h9 o/ u; R1 o. |% L
  575. //        CRevAppDlg dlg;1 h3 \: d) P  m5 c! c) d+ h+ R. n7 \* g
  576. //        int nResponse = dlg.DoModal();  N, ]# x: g) v8 w: T
  577. //        if (nResponse == IDOK)( f0 U, ^/ c4 W* l% {
  578. //        {; v$ ~& w$ `6 m3 x
  579. //                // TODO: Place code here to handle when the dialog is' ]$ M# T& N  d% K6 Y
  580. //                //  dismissed with OK; F) |4 S0 j2 j4 A& L3 h! D3 G# a
  581. //        }1 H  x% @# l5 `; ^1 |* h) r) W3 q0 f
  582. //        else if (nResponse == IDCANCEL)
    + X" u( t) G' o
  583. //        {
    5 }9 B( @& n5 c4 {# S6 [8 b
  584. //                // TODO: Place code here to handle when the dialog is8 Z! n4 W2 P& Z$ G0 J7 u
  585. //                //  dismissed with Cancel' `  }0 ^6 K# Y4 g1 ~
  586. //        }. R# ^( G# i, u4 L" s8 ]4 R5 |

  587. / F  B/ E, x! h7 ]
  588.         // Since the dialog has been closed, return FALSE so that we exit the8 U1 q! t4 a  P
  589.         //  application, rather than start the application's message pump.  @& m9 j6 S, q) G0 ^* G+ x6 }
  590.         return TRUE;' {% \7 o$ `& b* m3 n
  591. }, b+ J  I, R$ z) l; t
  592. ; F  L- l" ]6 H" h5 f" U" d( Z
  593. char *CRevAppApp::strtok3(char *pSource,char *token)* M! c' x1 H. G- c
  594. {
    % T9 y% h( I' N; A# K) d
  595.   int i;
    8 x& }& E1 A. P5 K1 S% Z
  596.   char *szRet;& H  I- r3 {. ~/ L
  597. 2 r. i8 F' L! l! F0 R" d% U
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    3 f# ], @2 K: X8 v/ o
  599.   if(sztoken)# q7 I5 t( e" T& C$ j2 ?% Q
  600.   {
    0 i5 ?3 B# M7 d
  601.     szRet=&sztoken[itoken];
    ! n3 a' O7 }+ w: \  z4 [
  602.     while(sztoken[itoken])
    & _8 ~0 ^' X3 R7 L4 @$ K" Y. w( R" {
  603.     {7 d6 f! [/ u  X0 ?
  604.       for(i=0;i<(int)strlen(token);i++)6 l% \/ {1 I4 u  ^" c9 T& ^
  605.       {8 U0 U  D# I* f* @/ L7 O. l" N( D
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])8 b) U) x' d% H" k8 g0 z% b
  607.         {
    : ]3 o  w2 A/ X9 ?- P% {/ \
  608.           sztoken[itoken++]=0;, P1 ^: p; D/ r0 g( y* u
  609.           sztoken[itoken++]=0;" Y1 I' T7 O1 b# d. k+ E0 Y7 T
  610.           return szRet;
    2 U# }! u+ P3 Z& {0 \3 B  m
  611.         }
    - o$ n  X  @% ]8 h
  612.       }
    , Y0 R6 k, Q0 \
  613.       itoken++;
    - I; A) a, f' C( `5 [4 u
  614.     }& k, U& k' y$ ?6 f, [6 k
  615.   }, Y# q) t6 V2 ^, g) T
  616.   return NULL;
    ( e; _! G& r/ N' M
  617. }
    ( Z0 C  X" P. ^, _$ \
  618. ( Y( Q# d; v! Z: Q
  619. void ProcessProc(long Total,long Current)
    ; W4 q1 T; K( B5 z, T; T
  620. {8 S. [; M, f8 R) H( q$ F
  621.         MSG msg;9 L8 V3 k8 V* ]- x+ P
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);3 f# F- e5 v) P
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));" G7 X" J+ q. W& h
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + F, ^6 q8 h) q
  625.         {- B0 K0 I  s& _' e. b7 _$ k- c
  626.                 if(!GetMessage(&msg,NULL,0,0))& ?1 Z' K+ ]& T0 K' U* L( F
  627.                 {6 R- n8 h! _- H+ `
  628.                         return;7 K2 R  R1 \+ u: B
  629.                 }
    9 }7 d7 ?' R0 r+ T) V' n2 I$ k
  630.                 TranslateMessage(&msg);: e* s' U% s' ~7 c& |1 t, p
  631.                 DispatchMessage(&msg);
    * k& n% C7 ~; _( Z- f
  632.         }       
    4 w; l2 }( _' Y& ]
  633. }
    / _% l; }" U# K; d( n# p0 \. z
  634. 3 u& s  W; w- B0 _; o
  635. BOOL bFirstChar=TRUE;
    ( ^' e4 ]" T  Q/ Z% Q; u& U- B

  636. ' }% x6 o7 [+ e8 i
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    / H; p. W8 s, C$ d; K9 s( h
  638. {0 E* V" J7 b# X6 H. U" B6 s" f5 L
  639.         // TODO: Add your specialized code here and/or call the base class' \8 t. k0 R; H+ i/ s! c% C
  640.   switch(dwProgramState)8 T* l! J5 `9 y! {; W. e
  641.   {; [& V  Z3 ]( r0 d# [- T
  642.   case AP_NOTHING:
    0 t. |9 S4 w1 a& u* W* j! X
  643.     switch(dwStartUpSteps)
    $ L% o/ B1 [. \/ o, A8 E* g# B- ?
  644.     {. R) ~" R. D( D2 ]* O! D
  645.     case 1:
    ) @+ q% b- n6 S$ v
  646.       {8 u4 [3 [9 f" T& V
  647.         int i;
    0 G6 T+ ^8 X! C! D  p( z/ @4 C
  648.         CDC *pCDC=dlg->GetDC();- G$ b) D& N2 Q' U! M
  649.         HDC hdcwnd=pCDC->m_hDC;, L; l9 q6 @4 L( d
  650. //        Graphics graphics(hdcwnd);
      P9 b" B, B( j% k& ~5 M
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    6 _5 r( K+ W/ k( k
  652. //        INT iWidth=bitmap.GetWidth();
    / n% `+ }  Q; ^+ V$ d& |4 e
  653. //        INT iHeight=bitmap.GetHeight();1 D/ x% j8 E! O* a- X: l
  654. //        Color color,colorTemp;) p# F) x! a6 J6 n+ g' d0 {- u
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)4 A! s3 `0 l* {, v+ L
  656. //        {: n/ E! X1 o0 q6 }/ J9 G
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)% R0 ^9 ]5 v7 M: d& `& A
  658. //          {* N, l. Q% w# R5 _4 u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    , D  H& g4 v. u8 U7 s( s6 p5 F* j' J
  660. //            colorTemp.SetValue(color.MakeARGB(* ^9 i& J2 P6 f! S9 K* }) x+ Q
  661. //              (BYTE)(255*iColumn/iWidth),
    4 S; H" [; X; ]) h, N! n" i
  662. //              color.GetRed(),
    0 u+ O4 J7 d5 ]! m& H
  663. //              color.GetGreen(),
    * m# x( u, b3 i( A! |
  664. //              color.GetBlue()));
    ! Q: ~3 W: ]- Z6 H+ I) R5 q
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);9 ]+ `8 v: z% D; `$ O% V
  666. //          }
    8 N3 I$ t- j7 ?) O$ t! m! C
  667. //        }% F2 r4 l6 K" V# |. j! _" s$ f
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    8 f! K' R2 c8 l+ K' T
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 M% I5 {1 \0 F4 H
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    * q% x  Q5 q" \! E' [- |
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " i; D* k' e3 X& r: C" D/ y
  672.         for(i=0;i<240;i+=8)% C# Q0 O6 n, R- C& C
  673.         {( J; C: E% o" L* e' @
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : w( A$ B! U" e7 C& i8 o' J
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; V/ r% q4 c# w( |4 S1 x
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) E' E# V3 }- n( K8 e
  677.           Sleep(33);* s! `! h0 b- R( n  ~2 J. W
  678.         }
    ! U1 E/ c9 C7 p7 {! W/ @
  679.         Sleep(1000);
      q7 |+ _3 ]; q0 J4 q
  680.         for(i=240;i>0;i-=8)
    ; ?6 l5 k- [" p! u
  681.         {
    ' w/ }" ~7 k/ z( H: y1 w! W
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& g7 J: y- B/ \+ J6 s& r
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % T! e5 {) |+ T  g: V
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 ^1 [2 F: K# c8 c5 D6 V
  685.           Sleep(33);0 `# _$ F  l1 n' h
  686.         }
    $ J7 x1 q3 p& R& R1 s
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);" L/ c0 M$ Q9 U$ G  f* M
  688.         dlg->ReleaseDC(pCDC);. q& ^, t9 L+ S2 I# [  ]1 k7 Z
  689.         DeleteDC(hdctar);
      o' X: x) r1 c  m, |) ~+ c( W
  690.         DeleteDC(hdcsrc);
    8 K$ v2 X9 r; @
  691.         DeleteDC(hdcorg);& S$ ?/ m( X9 V* r* B- q  e
  692.       }
    + d* x# X) P/ e+ A+ m
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);: l1 @. B+ y$ h# X) G. S5 f
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' Z- i; C  b* P; P* [
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");3 n! S& M" s1 {
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");. P$ r" a0 u1 x. ?% v
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 b$ M- o/ R) Q  j# G) q3 D
  698.       if(!Dn.Connected())% p2 k) v% p0 a+ j
  699.       {. q/ u2 q% h6 J: m8 W
  700.         dwTotalFiles=1;
    # g! N6 K& z3 }, ^$ Y3 J0 B
  701.         dwDownLoaded=0;
    / Q* ]7 C; W) k1 B. j
  702.         bSilentStep=TRUE;4 D* _0 C& h7 I
  703.         bCompressed=FALSE;6 n9 }5 H9 u9 {! h$ S
  704.         strExtLocal.Empty();
    + _0 @& K( S- d. p& ~  T
  705.         strFullName="readme.txt";6 Q; T1 t  S8 H7 Y& W, g: Q; E
  706.         dwProgramState=AP_CONNECT;
    2 N# _, V) S; H* G" e. R4 A: ]  g
  707.       }
    1 ^% |0 t) [7 v/ _3 S& s2 @% \
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    5 }& A( k2 c! J7 `
  709.       dwStartUpSteps=2;
    & x2 L  m: }2 S* p/ m; M
  710.       break;! |4 Y& O4 R3 i/ C) ]9 }
  711.     case 2:6 h& P5 q0 O/ k3 O! r) y! c4 F
  712.       {
    % H+ J& X% L* }
  713.         int iEOF;
    ) a0 {" O, E. l+ x! r5 C/ ?6 c
  714.         FILE *fp;" D. B4 e! [0 d( E' k: z
  715.         char szString[512];
    , Q/ ?" ~7 M( A
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 ~" K7 L- m( p4 q- T
  717.         if(fp)
    ) @) c2 l2 m0 m
  718.         {
    ' }$ }( M( l! K8 A( A
  719.           do
    7 ^6 Q# D+ U8 R8 I. y1 G, {9 E
  720.           {% F! C& @  X; S9 a
  721.             iEOF=fscanf(fp,"%s",szString);% F& f, Q3 F" |0 s" Z5 ?2 {; H
  722.             if(strlen(szString))
    / u5 u6 Z6 J2 v- @, q' g
  723.             {
    4 v3 Z8 ^- j1 k& `
  724.               if(bFirstChar)/ W, I! C2 ~2 F9 I8 C
  725.               {
    4 L* ^, V  D6 c9 q( Q: ]
  726.                 bFirstChar=FALSE;6 }9 T' r" ^, w* e6 [0 U) Z
  727.                 bConnectIsBig5=FALSE;- v$ r4 k7 ]- F0 @4 K! e* Z& V7 e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    - W) ?5 S! M3 N
  729.               }
    " e1 s, B$ {! m2 q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    $ D* p/ l0 _" m7 n% b
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    0 E3 Y2 b5 X8 J/ p6 T
  732.               dlg->m_ListText.AddString(szString);
    ' E) V) c# m' m) D, t/ F  ^, f
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 ^6 H  i; f7 B/ j8 D% R, l  R
  734.               *szString=0;: E8 O2 }3 c/ c6 k( s8 i
  735.             }6 G$ C3 T2 k& `1 a4 I! o) A* I  E' D
  736.           } while(iEOF!=EOF);# V$ h2 g0 T) H& C" v3 j. f0 H+ S# v
  737.           fclose(fp);
    8 ]3 o- H" p5 }( W
  738.           unlink(".\\DownLoad\\readme.txt");- l' v5 E3 f7 }0 f9 Z
  739.           dwStartUpSteps=3;
    2 n! k2 ~; Z- O' g) P
  740.         }
    : B( |2 N8 f2 t
  741.       }9 s; S9 i- @0 n8 h
  742.       break;
    & ~  P# h! ~, j" Z, I+ }
  743.     case 3:
    # e$ Q" L- D3 U
  744.       if(!Dn.Connected()): O; o2 V' _' a8 K+ W: Y& N  k. G
  745.       {, F- d) F( ^. U$ ?# U, s) Q& j
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    1 b+ m/ o3 c3 h& i6 Y
  747.         dwTotalFiles=1;
    5 _; X4 y/ X1 X" r! r$ _. y
  748.         dwDownLoaded=0;: Q  v" Y7 A& z7 E- x" o
  749.         bSilentStep=TRUE;0 [/ N: Q+ V4 \% T
  750.         bCompressed=FALSE;* J) [) q6 Z4 |3 [3 e: `$ @" ~
  751.         strExtLocal.Empty();8 G8 B, B6 u1 a0 ^  z8 j' P
  752.         strFullName="checkversion.txt";  @' d- d# E5 n* {- x
  753.         dwProgramState=AP_CONNECT;
    , n/ ^# {7 x4 P/ y8 w% g) H
  754.       }
      S/ J/ J8 L2 y, N5 ?2 \' ]/ D
  755.       dwStartUpSteps=4;
    / T! f9 H0 w' j8 L" T6 m; S
  756.       break;
    ' w& F( ]- M( b1 x8 q8 f
  757.     case 4:
    , E8 r% ?1 y" H( ^' M9 Q$ _( c
  758.       {
    " H. L. G& G$ b1 M; j1 C9 R  r
  759.         FILE *fp;
    & y, k! i1 k" S/ K/ w
  760.         char szString1[128];3 M$ v0 O! D1 F
  761.         char szString2[128];
    4 G* M) p. e$ z% z+ t# j+ Y" R
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");8 W: w( {: e0 c! q6 y8 h" t
  763.         if(fp)" C8 W- G9 S& N) ~0 c# E
  764.         {
    / g& l* t2 r  C0 }8 g2 `
  765.           fscanf(fp,"%s",szString1);
    & [! z% S! z' L9 M* \
  766.           fclose(fp);8 F' f0 o7 S- ?, b! M4 }
  767.           fCheckVersion=atof(szString1);
    8 W4 h0 k% L) l% [7 N8 u4 f& \" j
  768.           fp=fopen(".\\checkversion.dat","r");
    + N' i" o" O! B- S" s
  769.           if(fp)
    $ {5 k$ y( w8 G) V+ C
  770.           {
    3 }+ Q7 `3 ~; w' v! g
  771.             fscanf(fp,"%s",szString2);# K: n: o; r: q( B0 u2 T
  772.             fclose(fp);# ~; E3 y  L+ h; U3 X. A9 N
  773.             if(atof(szString1)!=atof(szString2))
    $ o  N4 K  M3 w& h9 ?: X* C
  774.             {, u2 s+ G5 z8 P0 I
  775.               if(!Dn.Connected())5 T7 Z0 c2 j/ r6 z
  776.               {# Q2 M: D" _# [. H: i1 ~1 C
  777.                 bFirstUpdate=TRUE;1 k( E" _% z4 w1 H) r
  778.                 dwTotalFiles=1;
    3 v& C6 p8 y3 w  X8 E  w
  779.                 dwDownLoaded=0;
    ! @3 ]) J$ S; ^
  780.                 bSilentStep=FALSE;" q7 q. ]1 X& n+ E
  781.                 bCompressed=TRUE;* \  E9 I! w& F- v- ?8 S- R8 [
  782.                 strExtLocal=".\\DownLoad\";4 ~% R- h! Q& c) y: [" i5 m4 c
  783.                 strFullName="update.txt";
    5 @% q0 f- [# P$ u  C7 K
  784.                 dwProgramState=AP_CONNECT;
    7 a- [$ n; t; @: r: K
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & l# Q6 t0 L: M) ?0 D3 c
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, _) M& g0 X, s! n: m( u
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");# o6 T  ?! ]% [7 s) r3 W& [

  788. & X5 V! X5 m! i/ C& s9 Q
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 v7 H) ^! O- s/ ]/ }. c7 i& b
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    # z/ d2 l4 ?, o9 [' ?. a; z
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    3 ]. _. Y: K) S
  792.                 {: I9 h: }" `4 `7 W: ^7 G2 a
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    5 N% ~* X5 I6 y/ H( s7 Q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");4 Y  a! }$ ~5 }( G7 b/ ~
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    : U- w. A/ j* o, `! m; z& Q9 O
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) b! D/ m, R& g5 b$ l% R9 r

  797. - u" T) z+ _, c. P# i. W
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");: |( P" z/ d( A/ M% t* }$ \0 f
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) B* O* G/ S# B, B2 F
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");. ]9 l4 t) o$ m# b& r5 R. t
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; V) @# m2 ^% A6 z- D
  802.                 }$ @. H8 g3 U) d+ T2 K" w$ G
  803.                 dwStartUpSteps=5;9 e+ K6 {) I. s- R; [2 ~1 C) }
  804.               }
    8 J1 v$ d' d+ T9 l. P
  805.             }$ Y2 c" y2 Z5 ?
  806.             else
    . y9 ~  p- R: g7 G/ @- I1 [( y
  807.             {+ W; ?0 D' v: ?* \! m* r$ s- z6 O
  808.               unlink(".\\DownLoad\\checkversion.txt");5 ?! Q! L) T, b) y9 v0 g2 ]
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 |+ V2 u* C+ E0 J+ N  O3 x
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");; q9 C& D& d6 T- `8 K: U
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 N) V5 a- z3 f& N
  812. ) m, [$ s# V9 N/ l% e5 y# l
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ z- _1 q' n5 }9 |( y" O0 X) O$ g
  814.               dwStartUpSteps=99;
    - r3 w! p" b/ s8 p4 w
  815.               bFinishUpdated=TRUE;
    + z. e: e( f2 R2 v1 C3 X
  816.               bCanUpdate=TRUE;9 l8 z$ n! X- K# D, f: I0 [5 y, Q! F
  817.             }. @3 @( [" i! [6 s
  818.           }
    * V- n9 `+ v4 r  s; t
  819.           else, ~* ^, e8 x+ Y4 F# u* O% E; w
  820.           {
    ' D; y7 k2 p1 M; ~5 h
  821.             if(!Dn.Connected())
    ' m+ F2 Q5 s$ @% A
  822.             {# O" j4 w9 f0 d  |
  823.               bFirstUpdate=TRUE;
    5 ^; W$ Y7 g3 v
  824.               dwTotalFiles=1;' `* K2 w$ \5 B2 i+ Z2 m; W* O
  825.               dwDownLoaded=0;
    6 ~, j- {2 t  j: J& Q
  826.               bSilentStep=FALSE;
    $ P. t- g, [2 `7 Z6 {
  827.               bCompressed=TRUE;
    - O/ K9 G4 c" a! l5 L, N
  828.               strExtLocal=".\\DownLoad\";. E+ Z: X: N- `( @7 \/ i, m
  829.               strFullName="update.txt";) M$ V0 W8 G7 \
  830.               dwProgramState=AP_CONNECT;7 s9 S' e+ A2 k; n" Y- w$ o
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " y& }" ^7 Z, l- g$ k
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    $ Z- Y( x! N& }& H8 f3 v
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ( i( a. ^5 L4 A  b. T% h8 Y
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. o/ N' z, M& `; S
  835.               unlink(".\\DownLoad\\checkversion.txt");
    0 {* O/ `# m6 a# r8 p) l
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    6 k3 n+ Y% }7 S3 @9 x
  837.               {  W0 d! }& T3 b: |. F# f
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    7 C" U, B9 V0 u
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");+ X; V" m6 x; o9 y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");# j# K2 C. N0 l, E3 A
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 p3 J4 B! }' f+ R2 ?* U4 R
  842.                
    & |  M8 d6 b2 @' e, R" Q' w( U( i
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! b, W. ?, u/ j4 n/ m
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% ~. I) S8 G( _  p! F8 F; ]
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 L) D6 Y8 i) ~! E  D
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + k9 q6 l  L- t
  847.               }, L" q, [5 b- j5 @  j- Z- d
  848.               dwStartUpSteps=5;2 M( \3 {, o, `* p! ?. V
  849.             }
    ( l+ k5 n: }3 n5 N$ g3 }4 P& b9 U
  850.           }
    & E1 i# W! \6 G: G* z, X
  851.         }8 ]4 X& V6 H3 |5 @6 V% ?4 n2 e
  852.         else3 @3 b. m0 n/ i9 m- D
  853.         {) N  w# S) M* ?3 C) v: k/ c
  854.           dwStartUpSteps=3;5 ^' b. C+ C2 R! e
  855.         }9 ~2 `4 J+ z% c# f) m; w- [- ~
  856.       }; ]% e* A3 `- h! j9 [
  857.       break;
    $ v9 ]" D. M8 w% i& X
  858.     case 5:
    8 c$ M$ f- f2 @  B
  859.       {% V! b5 F& Y' P
  860.         if(GetFileAttributes("Wsa.zip" )!=-1): B; w9 |2 v0 c5 t5 k& _! g
  861.         {
    + t8 `8 i4 E: ]; n# b# j0 s+ T! F
  862.           int opt_overwrite=1;" s; w8 D+ A, a4 }; s- k# [
  863.           int opt_do_extract_withoutpath=0;0 B1 y. Y2 D7 o4 c5 F$ U& I) |
  864.           unzFile uf=NULL;1 `: f0 `4 z- {
  865. 1 C5 D+ H( H$ R) C2 u: p
  866.           uf=unzOpen("Wsa.zip");
    # n: x# Z, D$ E9 _- w! p
  867.           if(uf)
    8 c3 w+ \: {9 h3 ]- V# K" B
  868.           {
    7 f: l% ^* o. P
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 U* _/ l9 F0 ?  O: `5 W; j) ]. l
  870.             unzClose(uf);
    , P6 H- f2 a* q- o1 y; V
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    & r0 e# l8 j5 A/ x
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    - \7 k, k* N! V6 K/ J
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");- s4 j% y/ @5 F  B
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 _0 y: C; `3 N4 Y8 }  f  u$ L2 z
  875.           }$ p# D; d' P& L/ k; x
  876.           DeleteFile("Wsa.zip" );
    - P: m  f- i: ?  p
  877.         }, p' S5 N" ?8 T7 i* a1 r5 E

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

6 x" U2 y) Y% ^# W3 @; R# M8 x6 m9 T' ^- Q. T* Q

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-10 12:49

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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