找回密碼
 立即注册

CSUpdate.exe源代码

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

2 n+ @& p5 r, `
  1. / RevApp.cpp : Defines the class behaviors for the application.
    $ s9 U0 S( c7 p5 A
  2. //, p* Y$ X( K, C; m2 }
  3. $ e. w- J8 d; g& O# {
  4. #include "stdafx.h"
    4 X, D% f- E5 B8 Y& x' @
  5. * L. V4 `* Q. S. p" J
  6. //#define UNICODE
    7 I3 F) b/ `7 a8 Z5 O
  7. //#include <gdiplus.h>
    ( {  n$ j2 S5 ~. }/ F! p9 B
  8. //using namespace Gdiplus;
    9 V. J/ V. o4 o

  9. : J) i# Y4 H" g4 ?) v% i; g
  10. #include "RevApp.h"" U; U, ?% O) \9 f  [0 M
  11. #include "RevAppDlg.h"/ v+ v9 w7 p1 h4 [. |& E7 M4 P

  12. ( G  Q1 s  i0 s9 b; B
  13. #pragma warning(disable:4786)
    & q2 l! M. ]8 E5 E
  14. #include <map>
    ; L* N& i8 s- x& t/ x
  15. #include <list>) q; D8 x0 S# C+ n  I
  16. #include <direct.h>
    $ B7 |8 e" _% z  Z( p- F
  17. 2 y' Q" l4 N$ V* m% z( |
  18. #ifdef _DEBUG
    8 x6 d' O5 h, _. W  o: f
  19. #define new DEBUG_NEW
    $ D0 ?5 j8 T5 d* q) F' S7 t
  20. #undef THIS_FILE
    8 U" ^" R$ W* {8 o  c; K
  21. static char THIS_FILE[] = __FILE__;
    8 N+ E7 s( Y2 _  t
  22. #endif6 q4 A2 i# h$ X/ H2 ^
  23. #include "SkinResDef.h"
    * R) F: E2 R, D9 K% R, \* N
  24. #include "ChangeBG.h"
    3 }  y( ~: L$ G: H( @! s
  25. #include "AFXINET.H"4 I" J# h6 d: u* C" w& G

  26. 7 j, a; F% ], t% f! Y" \. V
  27. #define TRADITIONAL_CHINESE 0& J8 g2 C6 |" H3 ^$ }! S1 Y) ?
  28. #define SIMPLIFY_CHINESE 1
    ; J- S( [* ?6 w7 Y( ?' p
  29. #define ENGLISH 2
    % n! a: T5 A5 D5 A" j' O! `8 ^
  30. int m_iLanguage = ENGLISH;
    2 q- H2 m' h% ^
  31. /////////////////////////////////////////////////////////////////////////////& q) N5 I; `% v- l
  32. // CRevAppApp+ Y/ ^  q4 v$ m1 u- u9 Q
  33. 6 m. r) d0 D7 I  E6 o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)8 }/ f: M6 W$ y4 M' Q1 ~
  35.         //{{AFX_MSG_MAP(CRevAppApp)% {" _' z9 F1 X* M, m4 x
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    6 C8 B! {0 f+ I
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    / K4 S5 F/ M8 B2 Y( y
  38.         //}}AFX_MSG
    # t3 P! M; D- S; L# F9 y  F0 M
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)! `; j6 W( o5 B3 q/ I
  40. END_MESSAGE_MAP(), X3 @, C9 ~# y( _) t6 i, B

  41.   P" y6 ^2 }% P
  42. /////////////////////////////////////////////////////////////////////////////8 O" Y9 s. B7 J4 \  t8 Q: |8 N) u
  43. // CRevAppApp construction
    6 Q3 Q! e& B& X4 X+ y
  44.   X/ D& j2 }1 q
  45. CRevAppApp::CRevAppApp()& b; @2 T9 @4 t8 _- ^- c6 ]" Z
  46. {
      n! A3 G0 g+ @: v
  47.         // TODO: add construction code here,8 X% v- x5 W/ H9 y& b
  48.         // Place all significant initialization in InitInstance
    ! F, c" E6 f0 R( Q8 C& t( m
  49.   bDisplayIsBig5=FALSE;
    ! S& y8 Z% I( P3 |( [2 [7 o6 p/ z, Z
  50.   bRestartUpdater=FALSE;6 i" d. e) M+ O; W1 x8 q5 X7 [, Y# v
  51.   bFinishUpdated=FALSE;) ?8 L5 S: y9 t, H* M
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;& `  N3 l1 L7 u4 A
  53.   InitChangeDataBig52GBKS();' o9 l1 ?5 p1 W" \7 i4 [7 x7 ~
  54.   InitChangeDataGBKS2Big5();. y, `( C3 W( c
  55.         //& b  I% U# a& E1 @% U
  56.         bClickRunExe = FALSE;8 g: A' `% h# y( B; _+ ^  }: `, j3 ^% Z
  57.         //5 {  I5 p/ K5 [, D6 C0 ?
  58. }% r2 z' V5 h1 ~5 }5 G

  59. 4 y+ g  d) u# X5 H0 N5 z
  60. CRevAppApp::~CRevAppApp()9 F9 D' z2 ?0 d# E6 O( j# N# J" v0 j
  61. {
    0 v6 _" y  i- z1 a: F% Y; V
  62.         // TODO: add construction code here,
    ( c) @" O! `$ s: F4 F
  63.         // Place all significant initialization in InitInstance
    ( A& ]" |0 ^) S+ S9 l' \2 h
  64.   EndChangeData();
      r6 O! T5 l- ^
  65. }
    $ g# O' z' S' l9 I% N0 D

  66. . \  f) i5 _% k# H2 e+ [. w  i
  67. /////////////////////////////////////////////////////////////////////////////; V6 ]& x  `8 I
  68. // The one and only CRevAppApp object
    & V: U0 ~3 D. S5 H- S
  69. + y) c  y. v% x* B
  70. CRevAppApp theApp;
    0 A) T) w0 ?0 |/ j: @/ m
  71. 1 {: |) n' c* u: A; E
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    / z4 B' D; @* K; |
  73. {  \% b1 @" l" ]
  74.   int iEOF=0;
    3 w* r4 Q1 {0 G( z, I- P0 l
  75.   char szTempName[MAX_PATH];
    : f1 j7 `8 ]2 F* N
  76.   *szFileName=0;% G, v; `3 D9 `5 l5 z
  77.   iEOF=fscanf(fp,"%s",szTempName);% B. n" P3 w1 d* Y! W, t; G
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ; D6 R4 Z5 x* J3 z1 V! h
  79.   {
    5 y" @. r) [( V/ i! s
  80.     strcpy(szFileName,&szTempName[1]);- _# R, Z9 a, o& b/ G
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)2 T8 D9 V' q/ z* n
  82.     {5 \) D* q/ R: t/ n3 k1 `1 _3 ]
  83.       iEOF=fscanf(fp,"%s",szTempName);, p# V7 Y  c/ r% ~9 H% J8 b
  84.       strcat(szFileName," ");
      W1 I- ~, |& ]( x; m3 f
  85.       strcat(szFileName,szTempName);2 ^  P0 e8 r+ D$ j* C  B
  86.     }
    9 _+ [9 [! P/ |- h3 H3 ?
  87.     if(strlen(szFileName)>=1)
    ' b1 b6 T# `" v( f) o0 C
  88.     {
    5 x2 }+ q- n, o$ \0 n1 r5 |- J
  89.       szFileName[strlen(szFileName)-1]=0;
    / P; J. ^" q0 ?$ L& t5 z, _2 i
  90.     }
    7 A- O$ F/ d! R, P  W
  91.   }/ r3 ?. z, i" J0 F+ R8 E
  92.   return szFileName;
    6 `% _" q5 ]+ Q
  93. }1 `9 o+ y, Z4 |+ C% t1 E
  94. 6 |5 u0 t, @. p6 C. G1 t0 S
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)1 L0 K3 N- o" n/ N8 Z: M+ s
  96. {
    " Q# u# r2 h$ x' j
  97.   FILE *fp;
    5 _* z4 M3 j3 j- m9 W, w
  98.   char *key=NULL;
    # T' P2 W! _; D2 O
  99.   char version[MAX_PATH];
    ( v8 L7 p6 C3 k7 s+ a
  100.   LPUPDATEFILE file,olds;
    $ P6 q8 _2 x8 w7 l* k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) o( |' V3 k0 r9 C' ]: g

  102. ) x; d8 e% }+ \6 C8 ]8 y
  103.   UpdateList.clear();
    ' X* c4 ^+ G6 c
  104.   UpdateFile.clear();
    2 Q7 e8 f$ A2 S! f: ]" j* J  Q
  105.   if(GetFileAttributes(filename)==-1) return false;$ A+ a8 H9 w8 g% n5 D6 l6 q9 I
  106.   if(!(fp=fopen(filename,"r"))) return false;' P, r0 A; p0 W' P
  107.   fscanf(fp,"%s",version);
    + e0 l& n: g+ o9 u; P) u
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }: [1 ]& r" K( J9 ?5 o3 Q& a
  109.   while(fscanf(fp,"%s",version)!=EOF)% |$ Y/ |/ r! T' g/ a
  110.   {
    0 S5 k: l! V# D; U7 p& N: p* p
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! G9 Z+ H( j! S  w( m8 g
  112.     fscanf(fp,"%s",file->path);3 C# M, ?( ^! O6 g5 P; }
  113.     ReadFileNames(fp,file->file);
    2 m% Y* Y) R+ ~) b1 O- _
  114.     strcpy(file->full,".");
    # [! _' b/ S4 O4 q9 }9 X. L
  115.     strcat(file->full,file->path);
    3 d" {# g/ B1 ^. ~
  116.     strcat(file->full,file->file);
    * P& C9 f- _& I% D5 M: C9 ~$ S
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    : J0 N( _! D6 R# `
  118.     {- v3 m% L& P0 X& y3 P  h3 Z
  119.       file->vers=(float)atof(version);
    5 w- `4 X; i# M+ A, r( w" u
  120.       UpdateList.push_back(file->full);, F( Y  f# M+ c( |
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    8 h) z. N+ O' z- z0 q5 w1 ~, m
  122.     }0 j7 @1 r8 ?7 \) x
  123.     else
    & d" }7 [7 f1 d
  124.     {
    2 Q* h( b& J3 G* E6 k' H
  125.       olds=(*p).second;- C: K! j" F$ [3 `4 e
  126.       if(olds->vers<(float)atof(version))
    % j" C5 E( r2 z7 n
  127.       {$ I' G+ @0 T( l, o* I& X7 W+ }
  128.         olds->vers=(float)atof(version);
    ; O/ {6 I7 A& p: x
  129.       }3 R4 W4 l0 Z( D  x/ t- t* I# m$ z
  130.       free(file);
    # o3 W5 F' k4 ?" r" X; a9 @! {5 T) N5 T; Z
  131.     }
    * ], U! w3 I5 ?
  132.   }; j- b3 W0 b. z/ T5 K$ U
  133.   fclose(fp);
    % H% [( h& K$ K, k$ Z0 L" X( g
  134.   return true;
    & i; N; ]2 S& k0 |) j3 Y
  135. }- V; s% e) i4 }7 X

  136. . k- p' M: w4 E4 h
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ) a3 c" ~* G! z( O9 a
  138. {
    " b3 y) j3 \+ v" t* G! E
  139.   TCHAR  szFull[MAX_PATH];  B( D0 j& c  m( }. B" c  N
  140.   TCHAR *token,*inter;4 `. H# K. y- m+ N
  141.   *szPath=0;
    6 Z( A( X0 n: ?: Y
  142.   strcpy(szFull,szFullPath);& c* @* k$ B1 X
  143.   token=strtok(szFull,"\\/");- ~  A" }1 v, g/ U$ d
  144.   inter=token;$ I0 M9 w. s& S& q4 I
  145.   while(token=strtok(NULL,"\\/"))
    / h# k0 I5 E0 f1 T7 m0 G9 m$ Z
  146.   {, X, P. b& `% i
  147.     strcat(szPath,inter);4 f0 ~1 H/ ]$ Z8 }. f
  148.     strcat(szPath,"\");
    ; ~4 q' T0 C% j2 [. L; T
  149.     inter=token;
    ' m6 t0 C' _6 `0 S. Z
  150.   }
    ; `' }, h# l( s( B
  151.   return strlen(szPath);
    / N+ }, l! z! G  ?6 A8 T: x
  152. }
    ' n$ Y1 S, M/ e7 x' y

  153. , |& _" v( M! Z$ v( h! N( w
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)6 |/ }8 P4 b4 N9 G/ `$ W
  155. {5 ]- T. j9 b  @
  156.   DWORD attrib=GetFileAttributes(Target);# W( M' k0 |5 N5 W. Q5 F+ G5 A
  157.   if(attrib!=-1)% o: G* J8 K0 E  A' T- ~
  158.   {% B* M6 L) [% L
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    3 O0 }8 M6 a5 d0 \) U2 k4 r
  160.     {2 ]) g2 t& o( i
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);5 A1 R! L/ b! \" U
  162.       SetFileAttributes(Target,attrib);
    8 ^6 @# e) N- G2 x7 |
  163.     }
    " c4 R$ _: P9 ]0 ]% ~  B
  164.   }
    8 f6 i0 X9 W; ~- }' m
  165.   CopyFile(Source,Target,Erase);9 b! d5 Q% t2 i8 h
  166. }& Z* K+ p# G! w

  167. * `1 p* S  h$ z' R/ u
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)$ o- f6 P! y' _
  169. {
    ! V5 P' l0 |( E# G2 v; \  l7 s
  170.      FILE *fp;
    % H$ k/ M* ]4 }
  171.      char  szBuffer[8192];
    / g2 @( G. g1 e
  172.   va_list  argptr;
    9 W9 ~" g, ?" V0 }5 d3 {4 T# Y

  173. 7 u: b' b/ a! E" e; F
  174.         va_start(argptr,message);6 T' y! i6 s3 \, s# n) {1 E- U
  175.         vsprintf(szBuffer,message,argptr);5 W2 X$ x5 h- @$ V& X" v2 n* G
  176.         va_end(argptr);+ _( F2 B1 ]2 N3 E; J* E) ~0 b, j/ x
  177.   fp=fopen(FileName,"a");# t& [0 e0 s3 h8 \5 }' @
  178.   if(fp)! s& m- D8 Z$ F$ z2 W2 z- i4 c
  179.   {
    7 I8 O3 y' m. i2 A: N- D/ s
  180.     fprintf(fp,szBuffer);
    # m' G7 G: m* R  n% H, ~' R1 f: x. ]
  181.     fclose(fp);
    & `3 z, \: Z  S
  182.           _flushall();
    ' ^4 D1 e$ g0 G$ O
  183.   }
    * L1 _2 y/ w$ b7 t- I
  184. }4 B2 F4 E, H9 _3 j+ h" c! |/ a( n
  185. 3 K: v! b# g8 I+ }7 f
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    % t5 Q- o3 a5 k- E/ o# b
  187. {
    6 Z* A1 i- ^& {7 w7 K
  188.      FILE *fp;/ c* y% E  C2 Z# o0 j& a
  189.     DWORD  attrib;6 |2 [% C& T8 y7 K+ S" L
  190.   attrib=GetFileAttributes(FileName);, p8 \; C; F0 _4 E+ d
  191.   if(attrib!=-1)
    ; Y1 C9 R3 s3 |4 \: B
  192.   {8 F$ z8 f& @- w/ O
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);- W2 s; y1 k  g( O3 U; i  v7 H4 N
  194.     if(!SetFileAttributes(FileName,attrib))
    1 q* `' ?9 v8 N
  195.     {
    ! d/ v) [* L0 r" w$ I( F' ?
  196.       return FALSE;
    , G- H( ~! o4 {: Q$ z$ K
  197.     }
    8 Q9 s3 n7 u" j6 ^& D
  198.   }) L; E9 y6 C0 i2 b/ L: y+ {
  199.   fp=fopen(FileName,"wb");
    ) y1 B" E( C9 ^# {, Y
  200.   if(fp)4 V. y. _3 a. J) W/ n
  201.   {
    / \8 J, G' O$ V4 |& X- a4 }: C
  202.     fclose(fp);
    ; m0 e! J5 G# `' Z: e
  203.   }- a9 e. c7 e* @  X" @
  204.   return TRUE;
    & B/ z$ n9 F) p  A4 j! }
  205. }
    6 f0 f5 V, `3 W8 n/ P, r/ r( K7 }

  206. 3 ?$ q; x9 e% f' C  W# r
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    * E' R/ O: p7 K8 _* c
  208. {* S6 Y$ w" y& d
  209.   char filename[MAX_PATH];3 T7 L) m) `. X6 y- ?
  210.   LPUPDATEFILE file,olds;& V6 c2 e$ D  d# e# Z
  211.   std::map<int,CString>::iterator i;
    ' A8 J3 c6 @) |" L* H
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 z% X! P- F( h9 [; `8 O
  213.   std::list<CString>::iterator l;
    & u% \- W# q  L0 T  m. [7 c( ~
  214. - ]# t; z" X: a1 k  B: p
  215.   if(bFirstUpdate), R% m) |9 w. Z+ O
  216.   {9 d( [: H6 H: V
  217.     dwCurrFile=0;
    " N) K/ G/ j  Z0 ~
  218.     bFirstUpdate=FALSE;" {  C% X5 T! y7 A6 ]! A3 S
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 v2 S% i* a" S3 ^1 h5 I
  220.     {! e6 M% ]  Q5 p2 J+ Z# V
  221.       dwTotalFiles=UpdateLocal.size();) l( v" X( T1 \9 e$ e
  222.       dwDownLoaded=0;5 x. q/ C1 Z9 h7 U3 n
  223.       bSilentStep=FALSE;+ Y+ ]$ k5 f: o- ^' i5 Z/ f
  224.       bCompressed=TRUE;8 H3 s, J6 k$ d, x5 J4 K) p
  225.       strExtLocal.Empty();8 S3 m* ]4 ]3 W3 s; [6 [" K
  226.       strFullName=(*i).second;% G' W6 q4 M4 f( u! f( i
  227.       dwProgramState=AP_CONNECT;! F9 V9 L: D3 ]; }; ?
  228.       return TRUE;
    / t& J; M8 `+ w
  229.     }" r4 Z) O4 t* B& P
  230.   }- D; R4 q1 V/ p7 m" ?
  231.   else if(bRestartUpdater==FALSE)
    2 Y4 K- b, ]# F  [$ h% l7 I& |
  232.   {
    ) x- I) |9 ~1 J$ v
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    # J' C  L, \9 A! Z
  234.     {6 [8 T# v6 @+ K  ?; y# Z9 B0 T0 r$ ]! J
  235.       file=(*p).second;
    * r1 P+ \, q( m6 _& F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    3 e7 ]" O8 w0 l( m3 ]
  237.       {% g7 g$ y7 }/ T0 ?3 c
  238.         olds=(*p).second;1 \  n! W6 ]4 S# |  b3 J. q
  239.         olds->vers=file->vers;8 _; U, S* w* C2 J' J$ [3 ^) l
  240.       }+ F5 v6 v. C6 ]6 S- z
  241.       else
    + T9 |2 [; k3 b, S0 }/ u$ D
  242.       {" c: h0 [& ]( D1 o8 z" ?
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 A) j# J" ?+ D$ b* G$ i8 y/ n
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    4 `% `. {* J/ j" ~; K; W8 I
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    0 Y6 r& u0 R% B" F2 b
  246.       }
    9 w/ v% Q2 i: r3 W/ `, E' K
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    % S  m; [- C8 S% H
  248.       sprintf(filename,"(%s)",file->file);  ?- H8 P8 q+ \* A% _# r+ R. `* s9 C
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * O$ {* k3 \6 j/ Z& v+ c$ @) w. t
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    7 t! s2 t/ q6 t, a9 y- @
  251.     }
    & P' y# ^- L7 x" q$ B" j
  252.     dwCurrFile++;
    " T8 m1 w$ A! ?& P3 j: f2 q0 K
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    & d% l# b* A- i- Y, f' g
  254.     {" x9 q( o% g/ N2 S
  255.       bSilentStep=FALSE;
    $ s3 i( [) d& K0 C
  256.       bCompressed=TRUE;, ?% v& ?' f1 D! x% J
  257.       strExtLocal.Empty();: \5 N/ A4 s6 N' @6 S( N+ `
  258.       strFullName=(*i).second;
      ]0 ?0 v# K: W- n/ Z8 N' B) y0 q
  259.       dwProgramState=AP_CONNECT;% @5 h% @- x9 N
  260.       return TRUE;
    % g# z0 n/ {2 G
  261.     }, @7 d* M' Z- [# [3 r
  262.     if(!bRestartUpdater)5 a8 X% s8 M6 d' d
  263.     {6 s* h' f+ L$ @. f; [4 s% C
  264.       int iCurrSize,iFileSize;
    ! h2 a& B& X' w+ H
  265.       iCurrSize=0;
    # P9 E5 d$ \/ g
  266.       iFileSize=UpdateList2.size();( [0 f, D9 e- ^! L& U% m& a; W7 ?
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ( Q5 I- m6 O) U
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");6 b# }! \8 H& ?- F) J5 ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");  E, ~5 ~. e' F5 N" @
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ e/ @' L1 z1 D  s. N1 F
  271.       Fclearf(".\\update.dat");+ ^# n/ O8 S% O' x# ]
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ; M. d0 Q+ a) G; m- K, X6 h
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)  F1 z7 A9 @( z8 y6 e$ h
  274.       {2 _: G/ h- _; ?# [2 S; E7 |& h
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    % r: ^8 Z2 f* l6 z# A% m
  276.         {
    ) ~) m$ u2 x6 `' j# S
  277.           file=(*p).second;1 R2 m0 I" f: P/ K* r
  278.           sprintf(filename,"(%s)",file->file);+ t2 p- C9 C! M$ z" ?
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, ]' r& L' O1 y5 q' T
  280.           iCurrSize++;
    - m- ~, \7 _& p4 o7 t# c
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    6 B+ E% B- C7 Q8 N' l; ~! s4 X4 ~
  282.         }! b( I- s$ y% x5 O5 a- J
  283.       }
    - Z$ P0 e5 M6 D3 d4 E
  284.       unlink(".\\update.txt");
    , L9 O4 H3 u/ V
  285.       unlink(".\\update.tmp");
    4 T. y9 ]) O# }( ]0 ^* U
  286.       Fclearf(".\\checkversion.dat");
    ' o( n) F; z+ w" l2 @5 s
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    1 [  b3 C, m: S, b- J
  288.       if(UpdateLocal.size())& J8 F$ |. Z) c# ~5 v' ?
  289.       {
    . p/ X. k; \, _' ^# W/ o
  290.         UpdateLocal.clear();
      E' v$ I+ W5 @
  291.       }
    0 C4 M7 n0 M+ _7 w' M
  292.       if(UpdateFile3.size())0 W8 {3 U7 u* E$ E9 {- ]/ B
  293.       {
    ! N) o' _! O( K4 ]6 E- a) s* P
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      Z- E0 N: ~2 {. k
  295.         {8 v) h, m* }* {/ y' V5 J
  296.           file=(*p).second;
    6 A+ \8 v; |% |* D7 i
  297.           free(file);
    ! Y0 c) \/ Q  @8 Q& W
  298.         }. [4 h; \" G: D
  299.         UpdateFile3.clear();( U# ~) s  o9 o8 J8 C
  300.         UpdateList3.clear();  y* O$ l5 {' o
  301.       }% l1 z1 l, p# X# }7 J9 u
  302.       if(UpdateFile2.size())
    5 {/ a, ~& p$ e8 _3 f0 d
  303.       {6 ]0 u# A" I, u) L. y% @$ Z" B
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , ?7 Q% Y. C. ~# c- V) M
  305.         {+ y# b( ~; g, H$ G. ]
  306.           file=(*p).second;
    " o+ A6 X# Y" t# [" p6 o4 M7 S& W- A
  307.           free(file);
    ) j+ E" d8 q8 A( O  q5 c5 I
  308.         }
    % H. B7 F5 L- C. Y) [
  309.         UpdateFile2.clear();3 w9 s" ?) e8 C( o
  310.         UpdateList2.clear();! n: \; d) o/ u
  311.       }2 l1 Q" G+ }# _+ o6 k
  312.       if(UpdateFile1.size())
    7 ^9 ~, g* t, P5 o
  313.       {
    7 t9 t. `" c, o: f& O, k
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ @) y9 y/ k- M) Z
  315.         {
    " X* M+ ?' v  K5 V  a
  316.           file=(*p).second;5 X0 c9 c) ~' j+ u! w2 o  N- o
  317.           free(file);7 |2 R% }" ^$ d, ^; M% [
  318.         }2 Q( h9 |7 k+ D/ r- J4 i
  319.         UpdateFile1.clear();
    2 K. F3 H/ e, A1 S0 F. F
  320.         UpdateList1.clear();
    3 [1 D8 N0 S  [& C# p' R( L
  321.       }
    ; ]4 d8 y; F4 r! h
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' M& ^9 E' K: f& }8 P# _% v
  323.     }
    - E* o# t' Z: x
  324.   }
    1 l6 K! k* p; ?8 I' ?5 X
  325.   return FALSE;8 e0 E0 N# t) M- l% \2 S5 z4 s
  326. }
    6 b, t, i4 S9 a  N6 S
  327. * O( k3 a! ]' h2 R! H3 l8 n2 u. W
  328. void CRevAppApp::ClearAll(void)2 T" {' k$ |. t+ X# Y0 D  o7 A
  329. {8 H1 A( g4 J. v( L7 V: \
  330.   LPUPDATEFILE file;" E/ v( W9 T' g6 s) o' F
  331.   std::map<CString,LPUPDATEFILE>::iterator p;) Y. {2 c4 o# x3 D1 T8 `

  332. ' d8 F, J! U3 J# u
  333.   if(UpdateLocal.size())
    ; U$ k) I% E. ?  m' j
  334.   {
    3 ~) ?. c! [' Z2 T. e6 }
  335.     UpdateLocal.clear();
    3 K) L0 Q  e$ C
  336.   }
    $ c2 B, y8 i" ~0 r2 ]0 T
  337.   if(UpdateFile3.size())( }' U! m# Z' b2 R
  338.   {. ^3 `6 h4 Q) k; ^. K% Z
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). }; Q( R, ?( C2 I& r; `0 a
  340.     {
    4 B& h* o6 F. U" h% n
  341.       file=(*p).second;
    " H- R3 F5 g/ h4 t/ u
  342.       free(file);
    5 q. m- N) X! O
  343.     }
    ! G" f; r& x3 r" j  Y* B8 g6 F! D
  344.     UpdateFile3.clear();1 A, [5 D9 e0 ~, O
  345.     UpdateList3.clear();9 [. b4 E3 U) y
  346.   }
    6 w  e1 B( y$ Y( w2 \2 J. a
  347.   if(UpdateFile2.size())
    0 B" z8 M- A  ]  A
  348.   {
    ) F! u1 t/ B" {8 y. a8 u# ?
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% |' G: d" z0 w: {% ?
  350.     {
    0 |6 d( y: ]" L
  351.       file=(*p).second;, S$ C% z  V+ O1 }9 t
  352.       free(file);4 r$ ~& U, j, F. |8 ~! t4 @
  353.     }
    / k' C; p6 w3 P5 f9 ]
  354.     UpdateFile2.clear();% O  f/ u& p* O3 ]
  355.     UpdateList2.clear();) I7 J' ?3 b! x! V- p
  356.   }
    3 G; `' n% M' f. A& p  d  e
  357.   if(UpdateFile1.size())
    . X, A; U2 I5 W/ S; C) N
  358.   {
    & i4 Z* i& Z0 x7 b
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 e3 m# \  ]( E) ^+ D4 V. L! U; K
  360.     {. q; d' c) l' i4 h  i; E, |# W
  361.       file=(*p).second;$ I6 D! N! f4 V6 S: [
  362.       free(file);
    * f& i! ^& h) y8 P4 I( f3 [( [
  363.     }8 B' Q) k1 y5 N! a1 M& K
  364.     UpdateFile1.clear();
      u: |. E& ~. ?. X1 S8 u
  365.     UpdateList1.clear();0 Z8 f# Z" j+ }0 u
  366.   }
    7 k# o9 |3 E7 \; U# l% F/ N( {4 e
  367. }  
    9 A* Y9 A* ^! H3 ?
  368.   4 N" f0 H# ]1 {! C! ?
  369. BOOL CRevAppApp::CheckLocalVersion(void)+ ]! I0 n5 G: s# |: q; e
  370. {( e( l3 @8 ?( q$ g* V
  371.   int c;, N, f8 u) D, m% B* f5 t
  372.   LPUPDATEFILE file1,file2;8 l9 q- m5 l* l% z2 K
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 O6 ]  S9 _% N2 K: p7 H: i1 E: h
  374.   std::list<CString>::iterator l;# s' [% F& V$ Z" G( ~/ _( r6 W! @5 k
  375. 7 t* r& A2 w* y6 e7 X8 c4 O
  376.   UpdateLocal.clear();/ h+ [% p$ A2 J8 z' X! z* y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ; A" w2 l% C% M5 w7 g+ H
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);: e; G7 z' p- Q2 Z# S  {. T
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);( c# M" E6 F" w, E) H* s
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    1 _' _% q" C: Y# j$ }
  381.   if(UpdateFile3.size())0 I% |/ l4 p3 p; P0 D" y* Y. ?% S
  382.   {! D0 K. S3 i4 n7 Q3 v7 s
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    " ?3 Y" Q' _# w  w0 {" j8 q/ y' S
  384.     {
    1 b5 ?. C! ]: {5 s# I
  385.       file2=(LPUPDATEFILE)(*i).second;
    / w, }+ b  c. v* H/ N
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  ~4 t, F% _8 F
  387.       {  C- {: S/ e7 a: q
  388.         file1=(LPUPDATEFILE)(*p).second;
    * {/ m" L& _3 R. j6 |+ J" e8 ^2 b
  389.         file1->vers=file2->vers;+ S1 x1 f& F) T' D7 S6 |+ s1 P3 r
  390.       }
    5 Z# S+ c7 D, I
  391.       else
    & l! `, \3 z0 e% U& T
  392.       {1 r# k% h0 M- D1 v1 X, |
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + N2 Y- p: q9 \! E
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));  S8 T2 E8 L4 _! I* x8 V% [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));2 D1 u0 a1 R2 ^( H- g; Q# q
  396.       }
    . L7 i- q9 R" f) [
  397.     }
    9 }, d* m+ z& @1 Y
  398.   }) _( ~* z3 t  L( e% t; f! }- r5 [
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + r) ~( Z" P* y
  400.   {
    * y+ z: O- m7 M1 v: H' b8 i
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())# M3 C: z1 K2 ^
  402.     {
    # W% k* Q' B: H! p
  403.       file2=(LPUPDATEFILE)(*i).second;5 S0 c3 n: i  x3 Z. o+ f
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 @* z- k3 V' g4 F
  405.       {) R( F" X6 x, V# f: c. U" K$ f
  406.         file1=(LPUPDATEFILE)(*p).second;5 s  k$ Y! u% ]  E1 B2 j( {5 e
  407.         if(file1->vers!=file2->vers)
    * |5 J- h8 E* [. m- n+ ?1 f
  408.         {0 T! Q5 v5 E, h2 J  r
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( n, B, F$ c! E  T$ l" g9 E% f! ?% H
  410.           c++;' g1 y- X" {9 w& @7 Q# [' b% G! `) B5 }
  411.         }
    ; a$ f' L5 _; R! N6 d, k6 |& {& {3 V
  412.       }% @4 F$ |1 |4 }. A& B
  413.       else
    ; Z4 n. {; _2 _
  414.       {
    4 U% J* H0 {5 t+ k$ K# w0 b
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 y- ?" R$ A# B. J3 a; i2 f2 i4 e
  416.         c++;
    & G7 A6 O' o: h
  417.       }
    + g& M" `1 h0 s( a, Y: U4 z
  418.     }
    * i4 w& `2 Q6 n* c6 A& k
  419.   }
    3 j+ i' q5 I! G5 K0 K. k2 I9 Z7 h
  420.   unlink(".\\DownLoad\\update.txt");8 h3 n- R  T! M  c3 @
  421.   if(UpdateLocal.size()) return TRUE;( g  ]" r) @; Q8 j$ @
  422.   else                   return FALSE;
    $ e  ]4 m0 ^& O$ T- H9 Y4 u
  423. }
    ; ~/ U! }) A! I1 o% `

  424. 2 P- d; }. @  g3 A: `' W' c# l+ y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    $ Z' k, t$ A2 k  t
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"! T9 S8 z/ E9 `) K

  427. ! m( n1 C9 ~" E4 p. L" t  C

  428. 4 ~3 x% U6 f% d! x
  429. : I2 H  s2 a. C- y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)9 c7 R# o! y: M' r
  431. {$ r$ Y: R" c8 v" J6 e& h
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;, q2 f& C- p; ^' P* d9 M) c. g
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) ~8 H8 ?: V, [
  434.   {6 B9 l. y! j' p/ f* x+ o3 M* }
  435.     char szLanguage[50];
    $ Z- \+ o' z0 y* }+ ~
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + R7 g3 D9 \$ O' n
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! Q: A7 f; Q+ Q4 `/ i
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 ]' R. [: I3 O' A; Y9 }
  439.     else                                   m_iLanguage=ENGLISH;
    / y. n: b2 _6 J5 q
  440.     char szRegister[100];: \+ T4 Z& Q( U) {9 m5 c
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 Y# l- ~1 H5 P& Q9 {
  442.     strRegsName=szRegister;
    . \0 X7 R2 Y9 O2 J2 |) ^, B8 I
  443.     char szPatchURL[100];
    1 P/ J; K; u) }* \! i' e: F
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 w/ l9 m  ]4 v$ D# \! N8 |! V) E) \
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : `5 \5 x  \, i9 ?- I$ X* t
  446.   }
    ; b9 s! F" v/ ~* R1 [
  447.   else
    ( u4 z2 D2 Y/ F' P9 v6 J
  448.   {
    : N% G' s4 H5 ]' [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 e1 p/ ~5 B( X: ?. I
  450.     strRegsName=DEFAULT_REG_URL;
    ; ]$ D: ~3 a, ~& F5 C9 o* h4 o
  451.   }
    # ~6 J% q$ v; Q, }+ \# W
  452.   if(GetFileAttributes("hosts.ini")!=-1)* X. X) j6 p+ v% ~# K) c/ x
  453.   {( s5 I8 d% P. Y! F; ]  A
  454.     char szIP[50];$ ]: m- U/ o5 e$ v3 N- E1 L
  455.     char szDIR[300];) ~! I; d8 C, E& `  X
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ( F  Q& T' F) z' r; G# b. Q! q
  457.     {% X. A  ~+ d9 K1 W, y$ y% x6 W0 M. C
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & b: }) `; m+ q- x2 R3 k% s  Q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    - R4 d' W3 T9 ^- p  K% Y. Y- e3 Q
  460.       strHostName=szIP;5 i; J1 n, A, y$ G( Q( s$ e
  461.       strHostPath.Format("/%s",szDIR);
    , w5 c- g3 l0 a' J
  462.     }
    / h3 S( `2 Q1 [
  463.     else
    6 G, O  j" g0 W" }7 {! Z
  464.     {
    1 ~( p/ Y8 \' I  E  {
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 l1 D1 Q3 D9 w# Y; j6 {/ Q
  466.       {
    # Q+ X  ?* a1 f) T$ v
  467.         char szLanguage[50];
    ( q) L% W. z2 u( s) _% X' B5 {
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    - {1 A7 b0 i  v8 Z+ {& P. C: @
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& T3 D2 w0 r* w- D9 m( ]5 b* `9 r
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- `- F; }2 |( X9 @% Z4 r1 V
  471.         else                                   m_iLanguage=ENGLISH;8 y7 Y1 b$ X+ I+ Q& |# z
  472.         char szRegister[100];3 @. x- N% F/ }! f: x
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , ~3 U5 n* v6 y  ^7 |; t
  474.         strRegsName=szRegister;& H" n( m6 Y; q8 B
  475.         char szPatchURL[100];; m0 f/ c1 ~: q( w3 w. r, q3 I* \
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! \. H" z4 ~) \) |# I7 B
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + Z$ a; ~" G' a' i4 l5 {) M& N
  478.       }5 m5 m* R$ d9 ?
  479.       else  L, |) R+ N# U0 O: b0 f7 z  ~
  480.       {7 P7 O' _, M6 v5 l7 X* |
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 O0 P/ {/ R: P7 X3 d2 Q
  482.         strRegsName=DEFAULT_REG_URL;
    : B6 e% r) M+ e9 L- d& B/ a
  483.       }! {# l1 x% \- a5 _" z
  484.     }
    ; E; ^8 f7 x, \3 `  k! O
  485.   }2 C- M9 j# s1 m( t, ^/ W
  486.   return true;
    : l9 p1 z  `+ n' [0 G7 _
  487. }4 H: B% A* s5 S( m

  488. : z8 r6 B% o" e
  489. #include ".\ZLib\unzip.h"
    - Q" r  T; e( Q
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);" k1 w0 F' }. t. B
  491. /////////////////////////////////////////////////////////////////////////////9 d7 f$ q, m7 A' G: `! Q
  492. // CRevAppApp initialization
    3 V+ f0 M) X8 W+ b/ n% Q! a, W& s

  493. . w3 o) H- W% g5 p( j
  494. BOOL CRevAppApp::InitInstance()" p$ x; A: L/ T; U- u6 U, m) [, j/ T: G0 `
  495. {
    + ~1 o2 _3 R6 U% \- Z2 D5 a
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    4 a7 B, l# m1 j# {, s- ?

  497. 5 e& u( p! @# ^/ X4 G# G
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    $ A; p5 E6 F2 |0 k
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))5 h  A1 X2 s7 R9 ^+ Q: W0 j( I
  500.   {
    , H% v/ e& S% l& i" G2 G$ t( l( F
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 E* n* r" n$ ?0 f# @' X1 x% D. m
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    # o7 d; w3 c+ R, t
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))3 i0 O! T/ p3 M' D0 s- g4 ^
  504.     {
    * m3 S4 p4 x" |, k8 j& T8 ^9 i( T" h
  505.       strcpy(szPath,szPathTarget);- [& N  \2 F3 X# A) n
  506.       SetCurrentDirectory(szPath);( Q3 T) Y" E* x
  507.     }- C4 |; h. h3 l  N
  508.   }. [  `/ r3 J6 k. W3 Z6 b4 U1 w1 k
  509. #ifdef _DEBUG
    ( i" L$ `3 }! Z4 v; G+ j
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % J3 A2 W9 t( [8 ]
  511. #else
    - M! l6 p/ }/ ^
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; s* d8 Q: G1 B! D
  513. #endif6 w- U9 j8 x8 @. |$ r0 x+ g3 [6 J
  514.   {5 h3 ~  }7 p1 n4 o; I$ Q
  515.     char tempFileName[MAX_PATH];
    ! _" E/ O( K) f
  516.     strcpy(tempFileName,szPathSource);
    * G% c- C5 t: n0 T( T7 A. ]: m( E
  517.     tempFileName[strlen(szPathSource)-12]=0;% O1 L+ t: t. I8 Y' q+ m
  518.     strcat(tempFileName,"\\$CSUpdate.exe");* L4 W2 [3 G. T% t
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);  A" j. @0 m) L
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    8 i; }% |9 F  A1 V( `, n4 i* W
  521.     return TRUE;1 W8 z2 ]0 b6 f4 o& g; R
  522.   }  j2 G9 o$ o  e2 m/ a1 z; J( M
  523.   // Nuke 0118: Delete run.exe
    0 k$ f; O7 v, i7 V* P; f- ]
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );, |/ f% P, o/ L0 w0 o4 R
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / c4 g+ V" v7 `0 Q7 x
  526.   if(!ReadCfgFile("Config.ini"))3 ^$ N& g, T5 r* @. x
  527.   {% e8 d, z$ U9 x  h# a2 t: W* @
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);1 H/ @7 D1 p) l! H- j; }
  529.     return TRUE;/ _5 b" E/ r# j" t
  530.   }
    7 P0 S& D1 b0 f* [, D4 U3 C
  531.   HANDLE mutex;; ?* B; e8 y% e$ ?7 A: w; j) }4 i
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% b: m# F( s) }. _  F
  533.   {
      T$ @4 O" `% ~' A$ ]6 z3 u
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)& K/ X( y; k3 d0 B0 ?7 j% F; j
  535.     {& `& T" V4 w2 n) [' P
  536.       CloseHandle(mutex);/ ?) n, H6 [7 a& y. N
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    & y( f' \# e- O8 R
  538.       return TRUE;7 e( m8 @* s, X0 c2 C2 E
  539.     }4 Z: ^/ f4 W9 g; o
  540.   }  $ w0 P) x& Z9 a# v( O3 ^; D
  541.   CloseHandle(mutex);
    , U7 B" q4 V  b# ?3 M6 {7 r$ q5 K8 O" B
  542. * ?, G6 u$ l2 s0 k( t
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);  F2 D& A' e# a+ \, d/ ]; ^9 I' d6 q+ N
  544. - W9 d0 o3 c4 v# F8 n0 `9 f- F! [
  545.         AfxEnableControlContainer();
    / w( \  d2 W" p; E; Y+ p
  546. # ^* v# v9 F1 W" A/ D. @
  547.   bCanUpdate=FALSE;
      q+ F. |% c# v8 ^+ u0 a
  548.   dwStartUpSteps=1;2 `# U6 @9 u* n
  549.   dwProgramState=AP_NOTHING;
    ( M+ q  ^6 [" F% W) a4 ?  Y: K

  550. , s# o+ ?* J% x+ W
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ; n: K, G0 ]1 G  ^. H$ g
  552. - S2 g0 B$ q5 w* n9 o4 j1 t
  553.         // Standard initialization
    ; v9 T0 {+ F0 N' J0 I
  554.         // If you are not using these features and wish to reduce the size( Z: E* V% p# @8 t$ k
  555.         //  of your final executable, you should remove from the following
    1 l+ R. T0 s7 P# D' w
  556.         //  the specific initialization routines you do not need.
    & P" w3 X/ s2 g; {
  557. ! P: [' I3 o, l* p1 K
  558. #ifdef _AFXDLL
    1 T+ C3 Y( D* j" s
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' R/ Q' R3 P' f$ l  ?  e; B
  560. #else
    ) |' y) F" E8 C" Z( ^, [/ m. w" s
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically* _. h/ c) @4 J9 S- s
  562. #endif- I5 |( w/ x4 K  ?1 u: y
  563. 8 Q4 c. T' I. [- T4 g
  564.   dlg=new CRevAppDlg;
    ( R" V: l& ~$ v  |+ O
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ; h/ Y0 {  T: E2 k2 m" l1 j
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    # J7 o. B( Z0 Z
  567.   m_pMainWnd=dlg;
    - L1 ~& {/ `" s8 G# K1 r. w

  568. 2 u4 I* t# o9 V/ N* Y+ v! |
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);6 A& K5 n+ q, [* Y3 [

  570. ! Q1 O" m" a. \5 V4 u: h: P+ t
  571. //  GdiplusStartupInput gdiplusStartupInput;
    / a7 f0 b- }2 C0 {- a
  572. //  ULONG_PTR gdiplusToken;
    $ y& P3 d( k0 z) e4 @2 i
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    1 K# r& ~0 A  g; A" p

  574. 1 d. i# F5 M2 G  D) W' V
  575. //        CRevAppDlg dlg;2 C8 G- ^7 F' \" b+ q# f7 s1 R
  576. //        int nResponse = dlg.DoModal();, X% g8 m9 H  q) x; q
  577. //        if (nResponse == IDOK)
    6 N" H# K; z" E7 P" c
  578. //        {
    , I7 Y8 t: l1 C' r- T$ i" J
  579. //                // TODO: Place code here to handle when the dialog is
      m7 t; [2 }2 W- u+ t/ d; W+ V
  580. //                //  dismissed with OK
    4 W% C) U1 C7 k1 \# M; Z
  581. //        }
    % o* f. D2 S8 S3 s% ]
  582. //        else if (nResponse == IDCANCEL)" P# [$ b4 T0 f, i+ g% f
  583. //        {
    , d  Z6 L3 p, U7 J( }% u
  584. //                // TODO: Place code here to handle when the dialog is
    ( r9 p8 o9 ^: y5 T- X
  585. //                //  dismissed with Cancel
    8 ~, L0 \# M# p: L, O
  586. //        }
    , ~; {2 \$ d3 V" g

  587. & r$ N, |0 Y1 `# r) {2 s
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . w$ v. K' p! S% u- ?
  589.         //  application, rather than start the application's message pump.
    7 B# h0 O# K; `: h
  590.         return TRUE;% U4 u/ @4 ^' q" k
  591. }
    # v; N. M  w  T% v; {
  592. $ q0 A/ W, `1 r5 P3 ^
  593. char *CRevAppApp::strtok3(char *pSource,char *token)1 R* L, K. b- C3 \5 y# c  j4 n1 z
  594. {
    ! q( F& Q0 `& A+ B/ Q9 ?$ g
  595.   int i;
    9 m9 _- `4 N! K$ Z7 H4 m) h. K3 B! X
  596.   char *szRet;% ~! m9 B' E7 L' f( ]% s; M* Y
  597. 9 d( b  Z% _% g& I
  598.   if(pSource) { itoken=0; sztoken=pSource; }4 P; O' O" i' o' H$ Q
  599.   if(sztoken). l/ n  o0 N8 O! }' ?5 X
  600.   {
      T( T: g/ p6 H- Z
  601.     szRet=&sztoken[itoken];
    3 O: O  _: K! A3 }) ]6 L- F
  602.     while(sztoken[itoken])
    1 N! S; [5 y+ }" F# W
  603.     {( [7 g. T$ T' x8 m( b. {
  604.       for(i=0;i<(int)strlen(token);i++)' ~  W/ a- R7 L! j# p3 ^5 ^
  605.       {1 d1 h& f6 _7 S  y# }0 D0 W4 P4 x
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    % _' B: x; T& c! [+ _6 ~
  607.         {7 ^. E' Q+ j7 ?+ j# v: i& G. ~, ?
  608.           sztoken[itoken++]=0;
    . j4 G# B2 G% y  \$ c
  609.           sztoken[itoken++]=0;
    % V. }8 J/ C* `6 \2 o7 ?  E
  610.           return szRet;
    9 m; C9 R. V1 L2 {6 h' W' ~
  611.         }
    1 o. g6 c- P  R( q$ ?
  612.       }
    5 ~% q7 ^& Z+ I, b7 ^5 H
  613.       itoken++;
    ; t; `( ?/ s8 {+ b8 }' ~
  614.     }. q% z. K( L9 L* I3 Y
  615.   }
    & b! K5 ~! j- P8 g- @
  616.   return NULL;
    & J# R/ Z9 ^9 }7 u# m' I) _$ z
  617. }4 s6 l) o* b2 l* X2 O5 d" t& c
  618. , p. H" B4 r% S* z' F8 L' D' H9 T
  619. void ProcessProc(long Total,long Current)
    & _7 g4 t6 D6 {1 |
  620. {. x6 \  M, z5 q$ t2 R) a7 n
  621.         MSG msg;
    + a" _4 e+ q! |3 O5 a( u+ R  @
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    5 r# i6 L3 i8 R: Z/ D: `" S
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));9 G2 i5 O& P, ]$ C# H$ c& B! E. E) @
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    # w& R' q: w/ l3 D* |" h+ V9 _
  625.         {
    3 O) K9 P2 Q3 V; r7 U& K8 v
  626.                 if(!GetMessage(&msg,NULL,0,0))
    2 M: D. Q6 J& P; _# l
  627.                 {
    " m: `0 U0 o2 {) P- m3 p
  628.                         return;
    1 M% q( v( D9 g' K/ J# Q9 c
  629.                 }; p8 L  Z8 S6 g* I
  630.                 TranslateMessage(&msg);
    2 O0 U9 w: `# ~) I
  631.                 DispatchMessage(&msg);
    ! Y# T( M. U, G
  632.         }        & g- ~3 y( y; o5 U# W1 J% D" [
  633. }" Y. t$ l1 V6 ]6 f5 Y- c
  634. 3 O- f9 ~& S7 `  F% e: k
  635. BOOL bFirstChar=TRUE;
    5 ^% i- _6 M& O

  636. 7 A( N" [5 B; K4 n
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ' x: L2 o  e; u7 M8 t9 Z
  638. {3 t" N! `. E; |/ ]' b1 _& p7 q
  639.         // TODO: Add your specialized code here and/or call the base class
    # m6 E& s0 a/ F
  640.   switch(dwProgramState)
    8 N/ U' R' q( Z  M! |
  641.   {
    1 r  g! c1 r; E" |
  642.   case AP_NOTHING:: t& k3 ?' Y9 U+ o# `* S2 `
  643.     switch(dwStartUpSteps)
    ! D3 b( g1 s; S' p0 h
  644.     {- X! q( ]  I: f; v4 {+ M6 z  S" ]
  645.     case 1:" e7 G; o4 ^6 D+ Y+ \( x: ^
  646.       {
    6 y) ^9 O$ [; d& d+ `. S9 ?% T1 P
  647.         int i;
    7 q9 q) \! b! Y. l; O5 U: [
  648.         CDC *pCDC=dlg->GetDC();& Y( e* w7 G& O) U
  649.         HDC hdcwnd=pCDC->m_hDC;& P$ g! k  {6 o' l8 s: h. w' {5 R
  650. //        Graphics graphics(hdcwnd);
    $ k$ H9 C; R, U# ]8 a3 j! T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");; G+ H6 R* r' P6 p3 g
  652. //        INT iWidth=bitmap.GetWidth();
    + t* @* c2 {) C" }
  653. //        INT iHeight=bitmap.GetHeight();
    , N# s$ T3 u$ N
  654. //        Color color,colorTemp;
    . H3 y* a7 r, s6 I" G" S
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)# f# s2 |  s+ `( c3 r: y# G
  656. //        {1 W. ?4 q  z& R
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)$ X0 _. j- N0 Z# J4 V* j! x% g3 z
  658. //          {
    , @& N' D1 o3 U
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    6 @, F/ X6 e0 z7 m1 D7 s" `' K
  660. //            colorTemp.SetValue(color.MakeARGB($ r; E5 ?) M8 M2 B: K2 N  G- v" i
  661. //              (BYTE)(255*iColumn/iWidth),
    & {, ?1 E8 v' n% _8 `1 N
  662. //              color.GetRed(),
    9 s3 r$ Q  K& e
  663. //              color.GetGreen(),
    & R  ^  f  q/ R0 [: R" Z: ]
  664. //              color.GetBlue()));1 [; E& z5 g1 y7 h! Y, C1 _" T: x: Q
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);6 N6 ^( K3 _) {; ]
  666. //          }4 v. Q% L2 _/ c2 Z
  667. //        }, D- p+ R: W/ A( z; I5 d/ H' X
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
      Z( K- c+ T& Y5 O  s9 Y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 _# t' L( n! Q  c1 v) n; M2 P; l
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");+ c& e( f  Q8 J# [2 D: i2 ?  w
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % [3 X# b8 V& y3 D' |& t5 m. f
  672.         for(i=0;i<240;i+=8)
    . c( V7 P2 j* _/ ?4 K+ ^4 O
  673.         {5 T  q! w; Y, Q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);4 ~  Y/ _4 ]1 P+ @7 h. h8 |* m9 ?
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 l, b3 A, S' P- \/ }4 b
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      e# ^/ l% k4 F  V
  677.           Sleep(33);
    * F' l8 K; j- O: H
  678.         }) ]* @7 x9 g+ J) `) s! J0 Y
  679.         Sleep(1000);
    ; x" r5 D: L" l1 X) T
  680.         for(i=240;i>0;i-=8)
    1 ^; ^/ Q1 q' [& P: g
  681.         {" p/ s7 v- I1 g9 C& L2 V" k
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 p9 V8 r+ I) r, D
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / A5 [) \& q9 d$ G) _  n
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 F7 b: j7 s* m, d- Z! p4 l. U( h. ]
  685.           Sleep(33);
    9 r5 e- V1 v4 W9 D! V" g; \
  686.         }
    5 P8 }: A9 N) K( o" B: A
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);$ ?  s. N8 X+ [) I3 _0 o
  688.         dlg->ReleaseDC(pCDC);
    * |% y8 }% [0 b( L: C# E6 o; c
  689.         DeleteDC(hdctar);
    : R% c1 x/ u$ {- N5 s7 A' ~
  690.         DeleteDC(hdcsrc);/ C3 N( e' f) U+ z
  691.         DeleteDC(hdcorg);
    ( J1 Y( ~  S  i/ {
  692.       }( j2 {$ D" L; R+ L7 Y8 s
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);' z: n% A" I# q  f9 X
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");& o0 Y' H- H3 b. k/ e
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, k1 S3 W+ l  F
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");" z3 H4 k8 n$ [) c
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 p! b4 b5 }! ]
  698.       if(!Dn.Connected())
    & C2 }4 G! M% a0 G" R, o
  699.       {6 r& S2 ^7 t$ }( Q* P' A- \4 x$ j
  700.         dwTotalFiles=1;' ]; Y# g3 z: N& Y& I" S- j
  701.         dwDownLoaded=0;' L. k2 g( U$ G' l% @: p
  702.         bSilentStep=TRUE;
      m3 V1 r" ~7 K  q4 n4 `. h
  703.         bCompressed=FALSE;
      h% C) z  ^& h2 [8 f, o
  704.         strExtLocal.Empty();% a8 N; b% C2 d/ f
  705.         strFullName="readme.txt";' N+ D' E1 ?1 a6 D! d' Y
  706.         dwProgramState=AP_CONNECT;
    7 Q. G5 V- V* r! h1 v. Q7 t
  707.       }- V  J  a, Y) H( @1 Y$ q% a
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    , H( k; }7 T% c! p3 a% I; m$ k
  709.       dwStartUpSteps=2;
    1 V! E! s! ?: |/ @- {4 b
  710.       break;
    * v/ o, b# f- E0 _2 A, K. M
  711.     case 2:
    % X6 q. H7 [7 J1 I+ F! m
  712.       {# Q5 l5 H7 u- ?" U# h! V
  713.         int iEOF;: t5 k+ k! i0 I4 p5 C
  714.         FILE *fp;
    $ R6 Y1 U/ b6 u4 I. {
  715.         char szString[512];
    5 Z3 L% N$ B1 n. B) Z
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");& m9 w+ I( J' O3 l4 e- j
  717.         if(fp)
    & T/ w6 x7 [/ x8 P# b
  718.         {
    2 u9 l! F3 I/ T: W' W( T! }
  719.           do" X% P2 O% z; C
  720.           {4 C2 d, h3 y( b
  721.             iEOF=fscanf(fp,"%s",szString);
      f# L! l% ~- o
  722.             if(strlen(szString))/ i1 Z. L7 Q; b! y% R  l1 \5 D
  723.             {
    0 b1 @$ F4 A: \( {% Q
  724.               if(bFirstChar)% o4 t  Z7 w/ G, {0 ?. @; {0 O2 G" T
  725.               {3 Z' t* P( Z) k7 \
  726.                 bFirstChar=FALSE;
    * ^4 j& W: M7 R) Z+ g7 P0 ]0 a/ a
  727.                 bConnectIsBig5=FALSE;
    / J0 X+ Z" J! d" C
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    4 z* s& g  a- X/ \
  729.               }# b" Z7 c6 r! `
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ) l# B; E6 V$ q0 S" D3 @( P
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ( D. X. U; z( u
  732.               dlg->m_ListText.AddString(szString);
    , {. D7 @' a' b; B9 o9 d; u) a
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 N  o7 ]2 B6 K7 b3 Q
  734.               *szString=0;+ ?" }% Q. c: Q
  735.             }
    0 W0 J4 l+ _6 ^4 k  j8 e- T2 [
  736.           } while(iEOF!=EOF);/ R3 D0 \$ t  ]
  737.           fclose(fp);+ V4 u4 K3 E/ g$ V. v$ e9 C* |4 h
  738.           unlink(".\\DownLoad\\readme.txt");
    0 ]! s5 q) t1 T4 `6 P5 w
  739.           dwStartUpSteps=3;
    . h' J8 \+ c* I; h
  740.         }9 L( @2 p; J! y9 c& O8 E- y1 l% o5 f" s
  741.       }
    % A2 g) L& B$ l1 _2 Z5 b. ~- F! ^
  742.       break;/ ^+ L/ ]& J6 L9 E7 M9 `" E! Z
  743.     case 3:
    + N3 z# V. }$ g7 Z3 o- I3 R5 X) a8 e
  744.       if(!Dn.Connected())
    9 e* T5 y5 L  r4 j2 h; T1 l& a
  745.       {, Y$ a; I/ A4 p/ }5 v' Y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);6 o8 W7 R* K; C+ d
  747.         dwTotalFiles=1;
    ! D! D/ E! M1 w; w( T
  748.         dwDownLoaded=0;* S3 L6 r  D0 H3 U! R) p8 K$ X3 ~
  749.         bSilentStep=TRUE;
    * G5 f3 O0 ^2 {: r
  750.         bCompressed=FALSE;
    , I2 ^5 A5 F0 o: M& g
  751.         strExtLocal.Empty();7 |3 n3 Q' `/ g
  752.         strFullName="checkversion.txt";
    ) `- I. q' `2 ~$ @$ w4 q4 @
  753.         dwProgramState=AP_CONNECT;. [) z1 @" ?) O
  754.       }
    6 H! f% o4 X1 e7 b" A
  755.       dwStartUpSteps=4;
    * s; ^2 w; A, u3 x2 l
  756.       break;% w3 ^6 A5 s# i7 f* ?( s! Y
  757.     case 4:, W+ j9 I3 y4 O6 c' m9 M5 K
  758.       {' E: F( R# w8 T. @, P! U
  759.         FILE *fp;
    ; G5 J  o# F" O6 t6 p
  760.         char szString1[128];
    0 {- E. z6 {* F3 w
  761.         char szString2[128];0 Y% k) C" K( @# w2 w; I
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    8 a% I% M$ a  I, [* k1 J% n# s
  763.         if(fp)- g! O2 j4 y- B' j0 @
  764.         {, Y5 R! x$ H8 q( Y
  765.           fscanf(fp,"%s",szString1);; I8 Y. x& J% m/ M+ T
  766.           fclose(fp);/ F/ _$ [. G+ T" F+ L( I5 W0 A
  767.           fCheckVersion=atof(szString1);
    3 X/ b6 H) a2 B* p
  768.           fp=fopen(".\\checkversion.dat","r");4 u; H' c  |/ U' q, ]& |/ N
  769.           if(fp)
      H, b; R! C$ ~& ?
  770.           {4 G$ \! R$ P' z. |; Q( O& `
  771.             fscanf(fp,"%s",szString2);
    * m3 d6 ~/ V, U2 ?4 ^  v
  772.             fclose(fp);
    ' g7 e! P# e0 l1 _
  773.             if(atof(szString1)!=atof(szString2))
    4 q# {) u% l6 C6 R8 g' z3 E
  774.             {
    ; c$ i, T! K" V* l; V0 T0 M5 F/ _$ D
  775.               if(!Dn.Connected())
    - S$ k8 y1 _) @' G
  776.               {0 L3 h/ _* e' P+ ~( p
  777.                 bFirstUpdate=TRUE;
    : d. @4 D( N4 u: b9 m- X, E
  778.                 dwTotalFiles=1;1 c% z+ O# C, D
  779.                 dwDownLoaded=0;7 u7 k6 C6 y: A
  780.                 bSilentStep=FALSE;- ^" l' [% N2 k" x7 T
  781.                 bCompressed=TRUE;2 G' Y0 p) b7 ^4 y" J$ W
  782.                 strExtLocal=".\\DownLoad\";
    $ v7 P; ?3 b# M% Z+ @. W
  783.                 strFullName="update.txt";/ y2 J" E. U4 s5 N$ G- a" d
  784.                 dwProgramState=AP_CONNECT;
    ! i% ?2 }4 y% A0 `  s: `
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 H' P; y( _. g  l9 M, Z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 X8 R5 P4 r( K% h* u- a  w
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 @5 M# U; V( K0 G

  788. 4 [, \5 D; |9 A7 A- v8 i0 e
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ j0 O. f& G- v& O! e7 K
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    , m; M, a; N/ p- P4 w# Z1 }2 w, k& N
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' m1 G- `/ I9 Z& o- q7 z# [* j3 V
  792.                 {
    2 V! d5 u, H4 p2 u( p) d
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    5 B* @) n) N+ I3 M2 v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");1 p, Z6 A, N% Z: F7 \- F
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    5 {" R4 P! G9 E! y0 _& x
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 u$ Q- o: C0 n: K% \

  797. ' ~2 W1 N) s% e) v! }
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( r# y+ C; O" j% S: A' s$ j
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! a7 i- }0 Z  g  g5 R  t: K
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    . H3 g) F) g* B& D
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 A6 N4 K$ n, o* Z
  802.                 }
    $ Y3 X, Z" M. C4 w+ Q! F
  803.                 dwStartUpSteps=5;! i5 }. p9 V* @  Q. l. y) l# b
  804.               }
    7 o4 @0 x2 ?: N1 p/ H) |
  805.             }
    0 i  f3 A7 y+ y+ A' Q
  806.             else2 L" w, S' C& R6 i" C. h
  807.             {
    , q; [8 |" a' i9 m$ I7 l. B
  808.               unlink(".\\DownLoad\\checkversion.txt");
    0 q2 Z# r8 L0 [1 v7 ]
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");0 q: @. e4 T! I1 m
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    8 ?. w# B& f+ B; k- A
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    * e9 F6 k" d. h7 Q( U! K: `; P

  812. : k0 p- j5 k8 t) x( {# v2 l
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( x9 S  Q# w) v. j9 N
  814.               dwStartUpSteps=99;) C* W$ z7 v% g
  815.               bFinishUpdated=TRUE;
    9 i  g1 V. N8 l! Z1 E
  816.               bCanUpdate=TRUE;# N' Z. T+ ]3 w# {0 {& R# F
  817.             }8 T, v9 F& G; P; Z) u
  818.           }
    ' K; Y9 U0 i# P! h
  819.           else  f6 {" k3 q! u: U% ^
  820.           {4 T3 P9 [: F. N) C1 A
  821.             if(!Dn.Connected())9 G7 \: P) w7 N4 y8 E
  822.             {& H3 k5 J* @/ M7 f# H3 g
  823.               bFirstUpdate=TRUE;. t- Q/ B: `, N/ |* N+ M" ~
  824.               dwTotalFiles=1;1 S% n9 y- f# _& s, L  m- e% r, |
  825.               dwDownLoaded=0;
    7 t( J% L  _# V, z# N6 B
  826.               bSilentStep=FALSE;1 \' O" g0 J8 F& _' e
  827.               bCompressed=TRUE;7 j: e2 c& m, x7 N2 R) c
  828.               strExtLocal=".\\DownLoad\";
    . F7 Y7 p  g8 h, Q' C' h! C  }
  829.               strFullName="update.txt";
    / U2 N$ F- a- D! V- z
  830.               dwProgramState=AP_CONNECT;  _) o5 v* x) d* ]
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ I* S+ o- K% r5 |! A4 A& @2 |
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 Y# o$ O# I) z% D/ I* l! T
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");8 b" o; s% p4 w  b4 U: z- K" v! a0 [
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 F; K  f7 R( i( n6 Z+ p
  835.               unlink(".\\DownLoad\\checkversion.txt");, d: B+ b# }6 K" I2 w* u
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)6 h) K9 E* Z% c, I
  837.               {' F) ?: A  `6 K* j3 y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");8 {7 W% a0 `5 D* G
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");& U3 z' D+ j1 h- J  O9 v
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");( I9 S8 D9 {2 C$ c2 M
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# T4 S2 V% l* v  T. i
  842.                 2 n% I' p" ]% ?2 i
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 l) ?2 P$ g3 q. e% o+ p
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 D5 T- v. ]' K2 n7 E
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");1 `0 p8 Y5 E( h
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      j% R; B$ J! V, B
  847.               }
    , K1 J( ]- S& \- `. v# Y
  848.               dwStartUpSteps=5;
    1 {. S  m- n) H! K0 G3 J( V
  849.             }* S4 i+ \! l" \9 a
  850.           }
    4 W% L! y! A7 L; k, [
  851.         }
    , w# F: K3 F) z- i, j
  852.         else
    - w" r" r5 s% J- d% ~) \
  853.         {
      |5 e( F8 H5 N$ r
  854.           dwStartUpSteps=3;
    , J: R. I: D2 B& V3 B: \  R' f5 O
  855.         }
    / B' ^% C) ?4 l1 v- R+ A
  856.       }& S8 Q* k5 o! J; A' x8 ~
  857.       break;
    , `. k. i! v# B3 S& {! R' b) k8 I
  858.     case 5:- ^1 v7 u/ p+ D5 F7 L- F* V
  859.       {* z& E* Q0 [+ I2 Q$ L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ) A3 W0 R' X# P+ o" @- P& M
  861.         {
    3 `8 X0 G; N5 L6 E, ~
  862.           int opt_overwrite=1;: v, z2 `, i5 ?( d/ D. W3 }: `
  863.           int opt_do_extract_withoutpath=0;! o  A( E0 R. C" ]6 U# f3 ^; C* S+ d
  864.           unzFile uf=NULL;
    * |! Y0 O& @! `8 }4 K
  865. . W- l( v3 x+ f1 W( {- O$ Y; g
  866.           uf=unzOpen("Wsa.zip");0 V! c9 L) w- ?
  867.           if(uf)
    : U6 [6 G& C7 A: c3 N
  868.           {$ m- z4 d9 q" h2 G$ g1 A
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ' f$ U$ K# _, [) ?# W
  870.             unzClose(uf);+ a6 V8 T  J0 `8 p: y1 `
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    . Q+ Q# Y8 \  }! O
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");7 q# Z7 W3 n; x- F0 j
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    % y; O# l' r% V9 e, @0 @) Z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 d% m5 b( d! }: [) a: B) R* t5 b( s
  875.           }* o4 K$ E+ g! ^. g# w+ }
  876.           DeleteFile("Wsa.zip" );
    & X) [' w6 S* X2 h8 P! y' G; s
  877.         }- R5 D2 n8 L4 K- Y
  878. ) ]4 }$ H4 ~0 H8 V; m; y
  879.         if(CheckLocalVersion())
    % M$ T1 S+ [" R) a
  880.         {
    5 j0 \* H4 |+ ?3 L8 M, r% m
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    - e$ L. D2 F. {
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    2 f2 z/ l- v4 b4 v/ Z( ?2 y  K
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");1 w  d; {- M7 ]0 ^' V2 o6 v
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 W% x1 D( T7 ^- G$ g' c
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    4 C1 F8 ^' p! l* j+ a2 Y) i3 L
  886.           dwStartUpSteps=99;/ L4 x  E1 ~6 Z& S, Q
  887.         }
      C. i- I! x0 a' X9 q
  888.         else
    8 R' o5 |+ d; s* [2 ~
  889.         {
    : O1 ?9 y( g( |. F' e
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");" Z7 R, a# i, {$ S, p; P, }$ l
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");1 Z" n/ q: k4 A5 v9 M5 n
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");0 K* C& s! L, t7 m

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

& X9 T, ^; u% z

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-14 06:36

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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