U/ s5 d C p" s' ~6 E/ w$ o- / RevApp.cpp : Defines the class behaviors for the application.
, G. Q) z$ B) p( K( e - //, ?# D) I4 L0 W
- . z+ n. U' C& }; L# ]1 `; M" ~
- #include "stdafx.h"
1 A' H& O. W: E9 B' h7 t- _# U% u
% x$ }2 B0 m7 f$ C" v) `+ d" a- //#define UNICODE
( S2 P" u$ F& [7 q - //#include <gdiplus.h>
3 N8 X9 V# o, f T& t - //using namespace Gdiplus;* d2 {1 U- P( Y8 m& v5 u
- - x+ c* G' n; l5 x. } H* {) I
- #include "RevApp.h"9 S8 U# ?0 ]! b3 }8 R/ O
- #include "RevAppDlg.h"
. H+ }2 D5 \6 M* y3 @" Q$ | - ( e( r+ v9 ^( x" z! Q: z! J5 \7 g
- #pragma warning(disable:4786)
0 g: D4 i g& Y+ b7 D - #include <map>0 [4 K% r4 k1 ]+ ^+ a5 u9 h0 L7 P7 U
- #include <list>7 h& M5 @8 Q0 R) F
- #include <direct.h>+ Y0 G: ]# s0 `; q% ^ g! g. C
( @" I3 }0 i. g1 h7 \* x- #ifdef _DEBUG% @) H1 Y5 _6 O% l
- #define new DEBUG_NEW
- ^2 K! X" A7 t! `+ S2 b - #undef THIS_FILE
3 Y9 _$ E9 t4 E+ q7 q2 n# G - static char THIS_FILE[] = __FILE__;& Y" l2 `+ k: p$ w+ t
- #endif2 k% `' t) D) u8 l
- #include "SkinResDef.h"
v7 C+ a: p/ z* J( W. A - #include "ChangeBG.h"" N$ n, L k9 z
- #include "AFXINET.H". A; w+ v. h6 ~
& W% x8 W* f L; m7 a, Z: K- #define TRADITIONAL_CHINESE 0$ M3 W7 z/ t! l- |
- #define SIMPLIFY_CHINESE 1
' ?& U3 C2 m1 e; q5 O - #define ENGLISH 2; Q% P0 G# I& M) L
- int m_iLanguage = ENGLISH;
9 e, g) B. e- ?! L' y. [+ {% \ - /////////////////////////////////////////////////////////////////////////////6 s+ D/ i" x8 u; [2 ]( |
- // CRevAppApp
. W+ A. c8 W9 D$ z( b+ M, }# Z' ] - ; g+ m) K% c2 r2 T2 ~& [
- BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
9 p( K1 K6 l$ ^ Y5 j5 V# K+ Y - //{{AFX_MSG_MAP(CRevAppApp)
$ G+ ^' p) f4 U+ t - // NOTE - the ClassWizard will add and remove mapping macros here. Z' O3 `% ^0 c" V& F* O
- // DO NOT EDIT what you see in these blocks of generated code!3 m+ Z- @: X4 F& v I
- //}}AFX_MSG+ ]% f% H D* j7 n* G$ G% D* O
- //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
6 }1 w& M5 w* ^4 r8 L) b - END_MESSAGE_MAP()0 I% F3 t" P! x# U/ m
: \% k6 ?2 o0 Z+ F }) |: a- /////////////////////////////////////////////////////////////////////////////
+ l& e1 a' S0 K% t - // CRevAppApp construction
; p* {' O6 N3 ^9 L" R( C - ! Y0 j& Y5 B2 o( @/ q# X' t
- CRevAppApp::CRevAppApp(); W3 ]; @4 `( p) M# ^' o! T* Q' H
- {
" Y+ ?0 a; k3 x. t - // TODO: add construction code here,
; B+ l( ~: X. l1 F0 D# N - // Place all significant initialization in InitInstance# n( b2 F N2 W! B$ D* O7 F0 m
- bDisplayIsBig5=FALSE;
& b7 g$ G3 N8 q/ ]0 n - bRestartUpdater=FALSE;
+ w2 f6 A/ }2 Z% o7 h8 A1 }; m - bFinishUpdated=FALSE;; C/ m! ? ~2 d# K* k6 B
- if(GetACP()==950) bDisplayIsBig5=TRUE;( D+ h3 ?. y" m5 x* f# T! v
- InitChangeDataBig52GBKS();" {% K' u( r! D8 ?. N2 K I
- InitChangeDataGBKS2Big5();
6 F- Z, R: w, ?1 l/ q; c& I6 U8 p - //7 b' p+ C1 Q5 }
- bClickRunExe = FALSE;
0 H/ W& n. N7 i; Z( K - //* q6 }5 D& q# I" N7 Z4 X
- }
7 g" v `5 V- g2 P0 R2 K& Y2 e
4 J7 d [+ k R* X3 l8 R- CRevAppApp::~CRevAppApp(). Q& V. B9 e+ U+ T5 Y& v3 m' y5 U. Q
- {
. N" R0 [. @% h; G, ]5 N - // TODO: add construction code here,- Z3 O# N6 b8 Q$ k# b1 g3 k$ D
- // Place all significant initialization in InitInstance Z' K& l1 v$ x H
- EndChangeData();
; y# ^9 Q4 u; @ - }/ J" E& l* o9 x ]; ?
" s3 D3 j2 E2 w" ^- /////////////////////////////////////////////////////////////////////////////% P) c5 g/ B( T1 K
- // The one and only CRevAppApp object: X! Z5 S: E6 D4 ^ X; W
: g/ N& H. F# X" g t/ n7 u- CRevAppApp theApp;/ s$ b; G4 _; a! y! b" ~
. X. p0 T& ~0 D" X: n& K; K+ u+ v- J- char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
5 S7 c& w1 S# y* `( A2 K: } - {
! k% o( r; `5 ?1 P" r - int iEOF=0;6 k, }) x7 `2 { o% V
- char szTempName[MAX_PATH];& G& T7 [" P! _
- *szFileName=0;
4 l% g( x6 |; n: V2 w - iEOF=fscanf(fp,"%s",szTempName);
5 q( y" V2 s6 x" J - if(strlen(szTempName)>=1&&szTempName[0]=='('); I: l Y0 b" V, B2 W
- {
: I; ~1 R' z9 `3 R. ` - strcpy(szFileName,&szTempName[1]);. ]- H7 G: f9 x2 Q' y
- while(!strchr(szTempName,')')&&iEOF!=EOF)) Z- a; Z* o6 _: c# ?
- {
9 F9 Y- }2 t. c" b$ @, k. J: p - iEOF=fscanf(fp,"%s",szTempName);
/ Y" E4 ^: t, c( X. U5 ^ - strcat(szFileName," ");
- c0 q- y, l& e, U - strcat(szFileName,szTempName);# z( i, Q9 F) l0 P8 t/ W, p
- }
6 j2 n, u% o+ M6 G/ [ - if(strlen(szFileName)>=1)# t' G" `& |7 O" g+ A
- {
- }" m2 N, t4 d; A O - szFileName[strlen(szFileName)-1]=0;
( G2 q& X( _4 z& f& F7 E - }2 ^ Q6 x. f$ e& w4 x& c7 h3 N
- }6 d8 T. K- K% E$ f6 s. C
- return szFileName;
4 S" {* ^2 m0 l* k$ M# F - }% k- W* B% I. m# d; ~9 c8 W2 o
- ! e7 V6 |& c) v9 G0 U8 F# H# P
- bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)- f; i$ l$ \1 p. M% r5 {. ^
- {
; i0 [# |! r3 x' Y - FILE *fp;% N8 ^ }; k$ p4 G3 O+ z
- char *key=NULL;" U8 v9 M# d# G1 O2 I4 m
- char version[MAX_PATH];
3 j/ R7 B9 F9 L4 D - LPUPDATEFILE file,olds;
) H" x$ ]$ F, g' ~9 e$ N - std::map<CString,LPUPDATEFILE>::iterator p;/ g4 @3 K% a; ]5 D8 F
- V' Q5 B) G) h0 f+ Y' z# k- UpdateList.clear();
/ o6 e) |# L$ G O$ G+ _ - UpdateFile.clear();
3 ^2 E7 ?7 a# ]5 K: J" T - if(GetFileAttributes(filename)==-1) return false;
5 Z' `4 \4 V4 Q1 J1 ?5 c, Z& e$ p - if(!(fp=fopen(filename,"r"))) return false;
1 R& L& Q. ~ F4 r+ o& `9 p& m) k - fscanf(fp,"%s",version);$ G5 C& \7 J9 W+ }
- if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }- P1 `0 j2 D& C7 q/ G/ d
- while(fscanf(fp,"%s",version)!=EOF)
) T% e3 Z( v- M+ J - {
$ N' D( y. }3 `: |& B+ E& a# N- U - file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
7 n+ L- z, p# y8 @; b& @ - fscanf(fp,"%s",file->path);
8 t9 L' X9 e$ ^' i - ReadFileNames(fp,file->file);
* F. r7 k2 T4 b+ M - strcpy(file->full,".");8 F3 Q$ ^: m& J! L$ R
- strcat(file->full,file->path);' L: y" d$ Q i
- strcat(file->full,file->file);7 i! o, d/ z1 s" f0 N
- if((p=UpdateFile.find(file->full))==UpdateFile.end())& n8 e6 G5 L! [
- {3 {- y) J+ Q$ Z, S0 `( Y* x
- file->vers=(float)atof(version);1 h: u1 x( ?4 c! F( v
- UpdateList.push_back(file->full);
. R$ e2 v( Q8 Z! }" E) @! ?; H0 W - UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
4 w0 ?7 ]! r" P/ b - }
z4 C% R# z: j* y& [% l2 e - else
" i5 k0 R% b7 ~9 z - {: o( z9 K1 s4 x2 [9 q/ K d
- olds=(*p).second;
1 |: X7 @& y4 e# |3 V+ W9 {6 }1 C3 z" k - if(olds->vers<(float)atof(version)). x. l3 C; Z( x: m+ U. }! F
- {2 E0 W0 Q2 t: g* U
- olds->vers=(float)atof(version);1 k" n. i3 I: A1 }
- }
g0 l/ ^# {' l" w d" f3 L - free(file);
; \4 @5 Y. t5 s) A6 k( P8 `1 T - }3 C6 F2 ?2 z2 x$ |1 u3 p/ C' t% G
- }
9 [# y1 y0 z* A9 I - fclose(fp);
; v# \4 T9 r- q - return true;
4 A' L8 B; r1 C" Q) G- [+ v: `- s% I - }
$ I* w: n# Y1 W1 T6 p
9 V3 @7 ^% u3 d8 r- DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)4 J" E# {' J6 }$ J! w
- {
& ^( O2 i5 W+ t7 D0 p) P - TCHAR szFull[MAX_PATH];
7 }/ y( V2 u% |6 G. u) Z - TCHAR *token,*inter;# Y3 G- `6 Q3 [8 _+ G; R% N: x0 T% b2 i
- *szPath=0;7 b: @' n) K5 J6 m
- strcpy(szFull,szFullPath);
* z$ W1 s$ B3 @4 j$ Z - token=strtok(szFull,"\\/");
+ k) b( r1 l, M. L* q/ D2 J - inter=token;
$ f& q" y. C6 ]) x9 t - while(token=strtok(NULL,"\\/"))
, w7 D* z. c$ V/ d: O - {
) y! V9 ~1 I( z/ Y6 A% s( E - strcat(szPath,inter);/ R7 r3 U3 h1 F( L% I
- strcat(szPath,"\"); p5 _5 r$ n, U1 o' a- g0 d
- inter=token;
5 M( y1 ~ S6 A4 k2 _5 o - }3 S1 _/ Z6 o: Q0 Z- Q
- return strlen(szPath);
6 Z9 v$ V# ?9 S% X! w5 A - }
( s$ t( h5 x6 @- q- n: F% `/ s7 ~
" E7 y5 V7 B) ?8 P. q' j- x- void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
M* W# [9 a4 g; A) s& _ - {1 F! N- k9 `6 Q
- DWORD attrib=GetFileAttributes(Target);
% Y: W6 P ^1 `2 y7 h - if(attrib!=-1)
2 |7 \& M/ }* t - {; g+ x- K1 P: L1 y- d
- if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ i! ], j, m& H
- {4 x) {* d3 V; S3 c6 U0 u a
- attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
1 `& i0 I& b/ @# r- X2 O - SetFileAttributes(Target,attrib);
* S: L: z# B% U- j) x7 {2 H - }
# p5 J+ }) \" B+ o* {6 s2 K$ ~ - }
, k+ {& s8 l9 i/ v8 k' i: ` - CopyFile(Source,Target,Erase);
) Y; A; K! I* a9 z# m - }
, I/ l; k% o. J' P
& m" R s/ w. r. G) f- void CRevAppApp::Fprintf(char *FileName,char *message, ...)) q3 p5 V7 P5 [5 J( o5 f. z
- {
- b; J# P [" [ - FILE *fp;
* R6 w7 h6 y" q - char szBuffer[8192];
+ c( ~/ s1 B, Q1 e/ E0 g- e4 ?4 e - va_list argptr;
9 [) w8 I8 J1 B8 W
( E5 w# B# L5 g- va_start(argptr,message);
$ N- V) W" N B5 O5 o$ y - vsprintf(szBuffer,message,argptr);
. U- F5 s8 q) m9 F& c8 G - va_end(argptr);" A+ \4 a/ y5 R. C0 D. v: I
- fp=fopen(FileName,"a");# W! @9 \: x, T# R+ |
- if(fp)
6 d. q' E6 o0 m/ W) h0 j' X - {3 r* k5 {2 r- f& v6 D, k
- fprintf(fp,szBuffer);* B8 h( N( }8 H7 K/ d p- a; C; `
- fclose(fp);* o1 X; l1 W/ p4 j
- _flushall();
6 k3 x3 t& _8 g9 g: }5 P4 c - }
# ` ~& }7 ^) C' E$ U - }4 `8 ~' x( ~/ S3 ^& X
- 7 \( t# i6 v7 f% k7 N
- BOOL CRevAppApp::Fclearf(char *FileName)
, j/ [* j, s3 W0 j1 p5 N$ Y" t! w - {
- [9 m2 u: O& K7 |* W - FILE *fp;
' ~1 b0 m# j: Y7 r" a - DWORD attrib;
i. n% `0 j) P! w( e2 W - attrib=GetFileAttributes(FileName);
0 a' \4 k9 p! u4 \ - if(attrib!=-1)
! Y4 j3 _. |" F5 d - {
, U4 t6 u h: F. o% o- A7 L. f2 ? - attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 ^& y1 r9 T4 a
- if(!SetFileAttributes(FileName,attrib))6 g! e) W3 ?# c! R1 R3 |8 v
- {$ K/ P0 W& l0 r6 V
- return FALSE;4 R0 l+ t- U, r ~& u5 i' Y6 m
- }8 ^5 W3 F) q& i4 V4 x- j4 Y F! O
- }
% ^& w' r4 D# G& A- d5 W( a - fp=fopen(FileName,"wb");
6 R" w) N, j2 Q% g; Y% K - if(fp)$ C' b! R; x+ O6 ~4 V- Z# ~4 j" r
- {
% c* c6 i2 @/ x8 O, z D+ p - fclose(fp);
' V' s9 R3 k3 _- [+ k - }
* A$ E4 R+ W% T7 e. C - return TRUE;
, S" H) i% n# X: E- T5 f L; g - }
! k/ z& D5 C" I2 r2 U+ O8 L+ Y+ D
# D: r$ A1 m. T& q$ Y/ x- BOOL CRevAppApp::UpdateLocalVersion(void)# u0 A5 P; [' O9 w
- {7 j0 W( J1 e1 ]
- char filename[MAX_PATH];+ r; ]( G) k7 P' \% G3 d8 {
- LPUPDATEFILE file,olds;
1 P5 [3 I: Y+ T6 [ - std::map<int,CString>::iterator i;" M7 [$ n7 T/ I+ d2 |1 w( b$ W
- std::map<CString,LPUPDATEFILE>::iterator p;
& {" D' n5 i1 H( d - std::list<CString>::iterator l;
$ X, d6 {- k$ W
! x- t" j# Z3 D4 [5 F- z. R1 F/ k- if(bFirstUpdate)
8 r5 `7 T3 \, z& K" v0 D0 I - {! F7 C* i1 V/ R" p! ]
- dwCurrFile=0;
6 Y! T- c$ W1 V; z6 v - bFirstUpdate=FALSE;1 ?$ M6 Z9 G7 w
- if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
( r2 n, Z {; b. f1 ~& D - {
& X& c9 R Q: K' f1 a: `# ~ - dwTotalFiles=UpdateLocal.size();! A+ P* @" Q C0 x* F* G
- dwDownLoaded=0;
, h1 G$ F+ ], c - bSilentStep=FALSE;
# B2 o0 T7 y! `" I - bCompressed=TRUE;
! {3 T3 C+ v$ j# F0 _$ j - strExtLocal.Empty();" |6 m' r# j( Z
- strFullName=(*i).second;
0 M7 M' |; k1 J - dwProgramState=AP_CONNECT;
6 O4 |# {+ c5 d3 F4 l4 L9 a - return TRUE;
" m F7 q: ~5 J6 R - }% b: G1 z) o. v4 {/ E+ O% o
- }5 S% n$ W' w3 c) Y
- else if(bRestartUpdater==FALSE)$ {; q( z. ] Q1 `: o$ b
- {8 r3 c" K$ @2 t+ F5 T
- if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
* N1 \$ b4 Z: E. H2 h - {
, b* @# u: p/ n+ z' l - file=(*p).second;* Z6 w v' E* o: u. n0 N
- if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()). s+ {) Y3 ]% M, G. C) v9 ~
- {
4 n# A. a6 D( O. N, {& } - olds=(*p).second;
. w$ v k. F3 Y3 @# Z - olds->vers=file->vers;, x: `; d& J" d% \
- }
7 c& U4 g. _$ A* ]% O9 {/ C - else: V' A" L# _( |
- {
$ q; `8 N, o* G+ } - olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
* F5 W& ]' j+ t - memcpy(olds,file,sizeof(UPDATEFILE));3 S( [8 s- B! `
- UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
$ k Z! l" v2 _; ` - }3 X! S9 a4 _$ ~
- if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");: r, ~' m! H4 @- B; E6 |( a
- sprintf(filename,"(%s)",file->file); e7 E {* b" x/ G5 V; [
- Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( w5 e5 J! H7 r! ~2 f2 Y. ?9 b
- if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
; |" C$ g: i6 i( J6 O! @ - }
' i) J/ s: b3 f4 n8 Q( g1 _ - dwCurrFile++;
, p7 f- r/ R& a - if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
% X) y; R8 d8 Y, Z# M0 f - {3 N/ _4 h2 U4 b
- bSilentStep=FALSE;
% y3 S. @) [$ N; A; j - bCompressed=TRUE;
5 @* r& _) t4 |1 h9 Q - strExtLocal.Empty();
' f- n { P" r2 K - strFullName=(*i).second;
/ C2 l& C j; C) |/ q) G i& u+ ^ - dwProgramState=AP_CONNECT;$ g" n, E, Z @% j. L( r
- return TRUE;
0 r1 Z* [5 ?# U" E - }
, s1 Q- Z9 W& U9 f - if(!bRestartUpdater)
: q. Z# U! X" t8 h - {
; `: G8 g: ^7 { - int iCurrSize,iFileSize;; }3 J3 M+ v& x9 d$ O( Q" ]
- iCurrSize=0;" ?1 i4 P) k9 U: h4 Z7 M# E" _
- iFileSize=UpdateList2.size();. |+ S+ B0 J! n. w7 N# E7 b, B8 _
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝戈い.....");" x- h$ }) J0 s" o- a% Z& @+ D) N
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新资料列表回存中.....");% N+ n8 D! b: F& u) l
- else dlg->m_ListText.AddString("saving updated files.....");+ h+ d" [6 m5 @/ k7 ^- G
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) A8 p; H& P+ m. L; {
- Fclearf(".\\update.dat");
' E: b& }/ _7 r3 s. w - Fprintf(".\\update.dat","Bloodyf\n");
( ?( I0 w5 c/ M3 j# U' r - for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
% w; g' a( q/ U# r' L. O K8 X - {& k9 Y, t+ z; B
- if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
* n- U/ L# t8 b6 M - {
* a9 z8 e ?# @, ~+ o5 ^/ q, r2 ^ - file=(*p).second;' W( O* E6 U+ _* P
- sprintf(filename,"(%s)",file->file);! c4 ?- A l& Y8 I& z. h
- Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
; x. H& N, H' j2 M* U& |" { - iCurrSize++;. v. x' x& E1 x( ^* C3 G
- dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));+ z4 A' k% N6 e( x. M+ e J
- }( B, v4 T6 E9 F0 w& |% N
- }
; n5 G- ]( H8 q! @( V - unlink(".\\update.txt");
/ Z( d! C9 c7 f7 p! \1 b2 ^# i7 r) g - unlink(".\\update.tmp");+ m6 t" ?# d/ y5 ~6 ^3 c/ N
- Fclearf(".\\checkversion.dat");9 i5 a' f: v. f- }0 C0 Z0 r' \$ v* {
- Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
+ _ d0 o6 h7 w% Q1 [, a6 S9 I! H - if(UpdateLocal.size())- U) A+ C% W3 o, s" i
- {( @5 ~* B* y1 k( A& \( \) t
- UpdateLocal.clear();& J1 S% F* F0 b( N
- }
, ?/ g1 Y R; n: l) H8 H8 s - if(UpdateFile3.size())" K ~6 x1 q2 l$ J- D
- {
/ U- k* O! @0 y( o n% D - for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 F; O7 s3 _1 a" h; S
- {# Y9 P- E# S9 n- f( R1 ]: g
- file=(*p).second;3 U) f9 v8 M. n) \$ z
- free(file);
3 P2 R" ^, F1 L$ Q2 t1 e' J1 {4 { - }
- K! I, @1 a5 B' A0 G- } - UpdateFile3.clear();
. v6 f* K) U7 R" p. M% D# a - UpdateList3.clear();
7 V v0 S# O8 D% ?5 \ - }# v- a4 x1 X9 y
- if(UpdateFile2.size())
% n: j9 Q: m% F4 P - {
9 y @: v/ {# N' x' i- e2 t - for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
/ V' G7 ?' a0 ]- m* M) i0 g! b - {4 ~/ v4 B" o% Y8 E% l5 {
- file=(*p).second;6 V, T$ m8 \% V2 x9 L
- free(file);
3 z/ F2 a9 G/ _' s9 ] - }
3 G" }" H+ y: H$ x; `. d6 w - UpdateFile2.clear();
c. [# t- p- l% w - UpdateList2.clear();
1 j+ n' T8 y9 {7 h - }
( G! {/ W3 B+ u% D - if(UpdateFile1.size())% U% k/ l( `2 m: u. n l
- {
3 k, x: v5 Q/ c) m8 T& _! g - for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
) H6 A: w3 A2 ^0 ` - {- j/ o8 e; i! F5 K( Q* `' M
- file=(*p).second;
9 D/ L$ j# }5 Q2 L1 h: ^ - free(file);/ y u' ^) q1 k, C7 }
- }2 ~8 n+ q" A7 Q; `, N' T" j
- UpdateFile1.clear(); \, u& v- [9 B. X2 s( e
- UpdateList1.clear();4 h; G* V! P8 B# v9 T0 w
- }4 J2 x0 h$ c& D* w) P$ x: W3 `
- dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));8 L; }; b1 N9 y5 ]3 M
- }! B" G0 `: x7 f: f& E
- }# n' j+ j3 b- ?
- return FALSE;
) t' a1 G' Y( F - }
# [ u% z: [$ q/ c5 f- _/ I
" |: ]# w/ E" T- void CRevAppApp::ClearAll(void)" s' t3 b9 T e: |6 C* d
- {! h2 o& Y% |/ x J# [$ a' Z
- LPUPDATEFILE file;) f" C8 k& R7 ~0 a9 H8 I2 R
- std::map<CString,LPUPDATEFILE>::iterator p;) K; z" Z4 D4 [' b
7 t# k! A8 m' b2 O- T% z: o- if(UpdateLocal.size())
8 Q& o) \- U1 r: Y - {. S% k- [$ D6 e _
- UpdateLocal.clear();
1 ^) O1 i' y6 I. d$ y - }
. z' a8 \# W4 G2 b. E& j! a7 S - if(UpdateFile3.size())
( ~7 m6 i! U' E - {# Q* K9 b8 f) D# P& N
- for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" [ @/ u" i+ a' g9 I
- {
; T. a, ]/ b! f - file=(*p).second;. d3 ~( G4 f/ S, c6 S
- free(file);
% U! X6 l' ]; k. c$ y - }
# v$ h* w# ?! l8 v2 @7 F - UpdateFile3.clear();7 I0 j* M0 A" j# r. O7 y. h
- UpdateList3.clear();
+ N9 U3 G! y- I3 K7 f7 z# C/ i" Y - }
) a( c" m- t: P - if(UpdateFile2.size())/ n1 h2 B1 }1 G3 k k- V0 U8 _
- {: g! I. G- m( |7 e
- for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)6 ? N# k9 L# h+ a" P
- {- r' k+ Q% b+ l, M9 i
- file=(*p).second;
; g; U+ k0 a* o/ v. G - free(file);
( H0 N, C3 H0 S( J - }
) i% f, P! D, I. a# s" M - UpdateFile2.clear();/ e* |9 ^$ a$ F# h* ^2 M1 J8 ~
- UpdateList2.clear();, v& \# B5 z5 ~5 X
- }
# L# V9 F3 m4 z, g- j/ E - if(UpdateFile1.size()) m( N( Z% K- |& @( S3 e% a
- {
/ z5 }3 @$ C8 r# l& o' _ - for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ Z) F9 p+ f6 v# m5 r
- {8 T( z* E* a9 l
- file=(*p).second;) ~( Z2 N6 w$ F& C. W6 O- y n
- free(file);
5 B9 E' F9 C$ a/ ?: F - }; ]; L; O, W4 \9 H% H
- UpdateFile1.clear();' f) m* T3 r: ]; P: X
- UpdateList1.clear();
. Y9 D! z- W, J5 J4 X+ l. g - }
3 K$ }' p5 B+ l% y - }
2 q( @7 N6 x, Q, B7 o- {+ D; F - 5 X0 z: k+ r0 S7 P' f( [
- BOOL CRevAppApp::CheckLocalVersion(void)
! V9 o: M$ G) e9 W* N% I - {
3 ^ G4 T7 s8 f4 R- a+ y - int c;
( I8 j/ i9 c' J# E% V5 w( T - LPUPDATEFILE file1,file2;3 k* w( k" ~( Q3 k) u1 C
- std::map<CString,LPUPDATEFILE>::iterator i,p;: C6 f, L2 k0 A' c
- std::list<CString>::iterator l;
2 h3 L5 F3 M) G, F( T; d
# T4 ~4 B4 E L- UpdateLocal.clear();, p. x! M, h1 ^7 S& J
- LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);) h2 {4 f9 Q5 A' v, ~. s7 b
- LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
0 x' R: C8 X, e8 ^ - LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
6 G0 t# U& U% [' M, a/ { - // if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
& {9 O" x5 q* ?! t7 q9 g% x - if(UpdateFile3.size())) K- [2 u4 c! U6 H* h9 O
- {
% u' S! C: U3 Z, F5 S1 b/ w - for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
3 _5 D6 `$ B" _5 ]" n7 S - {# H! b: o/ [( f% ^+ \
- file2=(LPUPDATEFILE)(*i).second;
, k& c& d* e0 {" n, I+ m* s$ v; D - if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
0 R( k6 ~- _6 j - {) s6 T% \7 |4 o, d/ @
- file1=(LPUPDATEFILE)(*p).second;" q" g) R, \: h
- file1->vers=file2->vers;
) @1 T; P' m9 g$ d - }2 A! Q; X0 I, B5 E, a+ {8 z z
- else, I0 D! ?3 o& |0 |
- {
4 b2 H2 g- e; L T - file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
$ f+ Q+ E+ L% w& c' Q% P- z - memcpy(file1,file2,sizeof(UPDATEFILE));! A" H9 X) B7 t% w
- UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
; k7 D. ^5 i' _' M3 A8 l6 i - }) t; b( P( g3 j% [
- }/ o" I8 A+ S2 U# K" b" N. B
- }
. T! D2 q: k! |! N7 O2 j - for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
8 W! g* Q* o# A2 x5 l% s - {' L# E9 v4 n q/ s, e
- if((i=UpdateFile2.find(*l))!=UpdateFile2.end())8 t) j \# y t# X0 d6 }$ ?
- {
# w+ h0 B7 Z0 z0 Q! E* [ - file2=(LPUPDATEFILE)(*i).second;
l: Q, F7 Q b: `5 x - if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& Q% D8 b* b) u8 b7 C% H
- {
9 Z. r* {$ H( \* e6 x - file1=(LPUPDATEFILE)(*p).second;2 D9 L7 Y) O" @# g6 B
- if(file1->vers!=file2->vers)
" t: T. @: A/ H/ c {, O- x2 E - {
" f' b% j8 G1 M8 R2 W p7 E7 l - UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# |( c" z4 H d( C( p; b7 s
- c++;
: J: Z) |" j6 J) _ - }
& S7 X8 X u9 Y O# B - }, z" I8 L& b5 S/ ?1 ?
- else
7 p3 c% T, z' {. { - {
Y% }( {# O6 b7 P - UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
* U1 u" U# D0 V! o. t - c++;( E- ~% U0 Z0 b
- }! I) R2 |: E* r* S; q. I7 i
- }5 d/ f( R6 p; Y/ n/ D' v! J& H8 y
- }
8 J2 G$ \9 t3 S+ Y3 j2 R5 N - unlink(".\\DownLoad\\update.txt");1 ^1 Y1 K' I; h1 J2 D
- if(UpdateLocal.size()) return TRUE;
4 j1 Y6 ~2 N9 Y' ~ - else return FALSE;
/ C. H4 N; c) A) A - }
" K) e3 l$ X" l) J( w - 4 d, a2 f- b0 L) ~
- #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
+ q5 |: k* G" P4 ]: }1 s - #define DEFAULT_REG_URL "www.wgs.com.cn"
# t: [! t0 d# c0 x# z
6 N5 b- d, {7 A" o9 q' `
+ {/ A4 g+ Z4 R5 B8 m5 p) ^- + [& l' R- f# Y
- BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)+ z. s8 ~1 T/ c( }* R" e
- {
2 U4 g' y3 A& q* | - DWORD dwType=AFX_INET_SERVICE_HTTP;
1 W: l! b6 ?' k9 G2 c! | - if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
4 T% x" h1 b. n( ?+ |# g - {; D# ~" ?4 U/ ?3 r1 }' J6 G0 j
- char szLanguage[50];
* C/ [) x5 B1 A2 n8 ^ - GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 O* [" l3 U. z0 o: B5 z; R- J; p
- if(!strnicmp("BIG",szLanguage,3)) m_iLanguage=TRADITIONAL_CHINESE;
. H$ u! M. q. c! w, d - else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;( I9 x7 P, |* j1 N, X- ~
- else m_iLanguage=ENGLISH;, x0 `: C# l* l1 K3 Z2 A3 P% E2 q
- char szRegister[100];, f2 b- j! ?6 h5 ]2 j
- GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) Y& [; H' h4 R; r) P# ?' l
- strRegsName=szRegister;/ C3 A @7 C4 T5 K; B5 r
- char szPatchURL[100];
/ _2 v0 {3 C% F% B8 } - GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 V- k# `. r3 m$ D* R
- AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 h+ q j: P* _6 N
- }
; M8 w0 _8 q# p* a; s, B& z8 n4 ~ - else/ T7 ~% z* A' L/ E( t
- {
, Q& G0 T( l6 q% c! ] - AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& `6 B$ R2 w( K
- strRegsName=DEFAULT_REG_URL;
! W& f# A q) r& w ?/ Q5 a - }
6 f3 d1 s9 |: ] q& A0 j, c - if(GetFileAttributes("hosts.ini")!=-1)
9 @* ?& I1 N3 w - {
# \) \: k3 [ O4 u, @ J - char szIP[50];
- D4 t0 P1 p1 T7 [ - char szDIR[300];
: h/ w! X2 z& a: ?2 d9 D - if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
4 `' U) i4 m% E* M$ D5 ?# ? - {% g% Q$ n$ f1 o
- wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");' C0 ~4 A% ~: t# Q
- GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
/ |+ d1 t0 C% w - strHostName=szIP;
R) Y. ^4 }0 ~( t% N n - strHostPath.Format("/%s",szDIR); i: C y" z, X( y3 t+ {. I( B
- }
- q2 p/ w0 U; Z& m; R - else
; m; ]! w1 @9 e7 h! b& v - {7 |' e2 R' s6 e. a4 @; ^0 n0 H3 r
- if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
, e! j& `/ z: k7 r6 j - {3 K1 G6 t, b& u5 f& s
- char szLanguage[50];
- a1 L* G3 C: O. a' x - GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
/ |! X/ o, i9 p - if(!strnicmp("BIG",szLanguage,3)) m_iLanguage=TRADITIONAL_CHINESE;
8 x1 }! O1 b2 W4 a! ], J% V - else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 B: [/ s( e; h5 x2 B E
- else m_iLanguage=ENGLISH;, a# j w# W% |8 B" c2 M, d
- char szRegister[100];
* q- {( n3 C; z- J - GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");( r* E) t$ ^1 f- p0 a9 m
- strRegsName=szRegister;
; U" @ U1 v6 }3 K+ Y( e/ e3 q - char szPatchURL[100];; n( ?$ ^5 p9 @; m- M
- GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. b \; ?) b3 m) ]& s; P
- AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);8 D9 G+ g3 H0 b) [# d L8 {
- }3 [6 k5 b: h' I" O
- else S( Q, w% T" s* d
- {& F: {* d0 ?) ^
- AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 \ f) b4 ^; Q6 r# i
- strRegsName=DEFAULT_REG_URL;1 Q! u* d/ d1 H, O! [5 I
- }! [$ k9 g0 `: a( X
- }8 k, d5 X$ b* e
- }# {- y8 F* Z* p( U$ t0 x' W
- return true;" \# q+ R. W* C! W U
- }
8 j: Q3 F" b8 z4 o/ j7 o1 ~ V
$ b8 T% _9 _: E- #include ".\ZLib\unzip.h"5 b, P% n' t" F; S
- extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
t0 R6 z9 j& E" F( y - /////////////////////////////////////////////////////////////////////////////
' h5 P. u( a% E* }" e7 t0 B9 i0 D- H - // CRevAppApp initialization7 ^/ C3 R) L7 c6 K0 b
- ) T7 J" o2 L6 d7 `* g2 M! Z3 `
- BOOL CRevAppApp::InitInstance()
/ h" \- ~0 X& v% g& k- P# M2 R - {; [8 i' r' N. y
- TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];% @% T! }) V0 B- o
1 y- @! h# E: t) b4 Y) B8 u* j! x9 r- GetModuleFileName(NULL,szPathSource,MAX_PATH);
( c. S' c$ d% G& | - if(GetCurrentDirectory(MAX_PATH,szPath))+ `0 j) _' ~9 z, H3 E
- {
" k, ?) |4 k" Y* r, A& e - if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");4 u, q, ?) ]# i) U9 k# F
- GetPathFromFullPath(szPathTarget,szPathSource);
; k+ b7 U Y$ }: Z, c - if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
, s3 @: E$ s! C7 W; N - {
7 M9 X. }& A. N - strcpy(szPath,szPathTarget);( J) Z* S# B- B3 P z
- SetCurrentDirectory(szPath);
% W7 S: Z4 ^' P" } - }
1 q4 H) ]* ~ } - }
: M+ W! z0 q$ t9 l! q& ]' d - #ifdef _DEBUG2 Q* q. C4 b4 E6 ^- [
- if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 K) u$ R6 v& ~+ A2 U- {! b
- #else- g: F7 ^2 b7 Q
- if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
/ L* E9 }5 [4 t7 l - #endif
/ t% V) a7 k4 p5 { - {9 M1 `$ g, s8 H6 P: o
- char tempFileName[MAX_PATH];; [2 s4 J2 Z& ?# q' k5 y u
- strcpy(tempFileName,szPathSource);
7 v1 X6 I0 b# ]" H0 @# V - tempFileName[strlen(szPathSource)-12]=0;$ s+ v( L* `" z' i) Y
- strcat(tempFileName,"\\$CSUpdate.exe"); v0 Z: _- K' d' R( f7 S! i1 T
- ForceCopyFile(szPathSource,tempFileName,FALSE);. v T {; O( A/ x% h
- ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);% a) Y- _: P) |: b. R
- return TRUE; b: {; f; }2 L$ s% G7 @
- }
8 ~0 A( p8 k4 X$ z2 ~ - // Nuke 0118: Delete run.exe
, n/ u. K; q: |! n; d1 S+ y - if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );( m2 G9 Q, p/ a; Q) ^
- if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");" Q+ ]' x/ @2 {( t; a
- if(!ReadCfgFile("Config.ini"))& x. r! J4 f" z! [; m8 y
- {
, ^: @( ?+ b) P0 _2 K& D - MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);; o% Q! P( s _1 {7 v
- return TRUE;
6 F. _5 Y0 K( H) D! w - }2 V6 h" X L) { V
- HANDLE mutex;& d: P2 {( a2 o- @6 {, F. S
- if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% \0 u8 D1 {4 m! i# ~9 F" c
- {, R# C/ g" X' A3 G0 C
- if(GetLastError()==ERROR_ALREADY_EXISTS)
- T9 T) d' G7 j/ a1 Z# | - {* q: e9 p% j l- O$ y* O! n
- CloseHandle(mutex);
Q; V8 s: L$ c5 r - MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
' i2 l+ V' j/ e, E1 ? - return TRUE;
; e& L$ I0 n- |' N - }
* I9 J& }6 i; P, Y: J - }
, y7 c/ ~+ v/ } - CloseHandle(mutex);* t/ ^8 f- b; ~$ g! u& U, I+ k
1 Q5 ? h( K1 p- D: G4 a& \- if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);: a7 o% n. q, N
# Z+ j. R( \* T h7 A- AfxEnableControlContainer();7 y5 B6 ^( _, \. Q6 D
+ u8 H3 B1 G( x: ^0 P5 M6 y- bCanUpdate=FALSE;
+ \9 n0 {+ R5 G0 F3 f; J - dwStartUpSteps=1;# L" ?& v3 ?: r
- dwProgramState=AP_NOTHING;
5 w+ c& `! {( K5 j6 x
+ x# I' y4 y% \, G- InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
3 I9 _7 k% n6 K4 b* f" }1 i - ! J2 r7 |) b' P0 e! l e
- // Standard initialization
* E4 V. `- ]. v3 S/ Y ]2 w% ?: ]7 ^( X - // If you are not using these features and wish to reduce the size/ v0 J: t1 c9 W1 `
- // of your final executable, you should remove from the following3 Q9 x) d7 H ?+ z5 y
- // the specific initialization routines you do not need.2 z+ C8 N, e7 b/ g7 i d" ?
3 A) p, X& `/ j. V' Y( x- #ifdef _AFXDLL( g# R2 X& ~! a
- Enable3dControls(); // Call this when using MFC in a shared DLL
: G1 N {! Z u - #else
& ?* d$ }1 R- s! X+ h" } - Enable3dControlsStatic(); // Call this when linking to MFC statically! \, N5 Z1 D6 l$ v
- #endif2 E2 {9 N5 f- ?9 [# W
- ! p' x& F$ e( r' N1 Y2 S
- dlg=new CRevAppDlg;
2 F, y/ v. W+ w - dlg->Create(IDD_REVAPP_DIALOG);) ^9 y; ~) B2 W4 p# p
- dlg->ShowWindow(SW_SHOWNORMAL);. G# v, h) f( r
- m_pMainWnd=dlg;
) G" u' K1 V* m - ; ]$ s- L3 w1 I* A6 S" c1 G
- SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);0 V* e5 S# ?. U9 E6 d5 L' s
- ) c) R. f' @! M6 n! K& n. m
- // GdiplusStartupInput gdiplusStartupInput;
3 }) A' k7 j/ G0 Q% ` - // ULONG_PTR gdiplusToken;- l9 b* U1 }# p7 @5 t, [
- // GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL); }; `1 A1 z5 C' p, r# Y" z! h
- + k" u, o6 ?. _# o
- // CRevAppDlg dlg;' c9 T$ k) N9 a3 B( b$ u* H# n
- // int nResponse = dlg.DoModal();6 t- w4 H o: `- B" ]% ]9 l
- // if (nResponse == IDOK)8 `% u! J& h! c, }( @* i- B
- // {* N4 k3 R( W3 _/ l# N! q
- // // TODO: Place code here to handle when the dialog is
7 m5 s3 @* `+ } - // // dismissed with OK
' i# k+ ~. \; C- J: j - // }- p* M+ C$ F% Q
- // else if (nResponse == IDCANCEL), Q) T/ w0 h7 z! A. r
- // {0 E, d, M6 M! Y+ e1 Q4 r
- // // TODO: Place code here to handle when the dialog is! [) m4 V1 ^# U4 D
- // // dismissed with Cancel
5 |$ r! J$ }& p8 I) G" ]* c% t, M! R - // }: ?* X( o% d9 {/ D+ C, `
5 L4 v8 K2 Z& c9 ]5 {- // Since the dialog has been closed, return FALSE so that we exit the3 H' R6 N5 {7 t3 R
- // application, rather than start the application's message pump.
7 {# a$ l' B4 Y5 c- t - return TRUE;
* z+ A, q1 m# c6 O - }
3 ?# T8 U1 g! _: Z( x) q - , r# O+ T* ]5 t& I/ X9 w7 i
- char *CRevAppApp::strtok3(char *pSource,char *token). J* R6 G% C: d2 O* f+ g, I) i/ ~
- {
! W8 N5 }" z3 s - int i;
. u7 M, I$ q) A7 I7 W* j - char *szRet;
2 U& v. `: o, e$ W9 t E4 f9 ^
: p! a' @" T2 ^6 s3 ^0 G6 h- if(pSource) { itoken=0; sztoken=pSource; }9 Q) W- @. I9 H1 r
- if(sztoken)# j+ n5 D. M. s/ ^5 G3 Y- ~( j
- { I9 P: {/ j; J: e& h9 w0 p- J
- szRet=&sztoken[itoken];
! o+ z- w, O! h/ j3 L2 u - while(sztoken[itoken]) k/ V4 @% P7 `2 ^+ i0 a
- {& i8 d: B' [. m3 N1 G" N6 f* ?9 q
- for(i=0;i<(int)strlen(token);i++)
3 C% c3 [+ |! c$ s: n - {
% z3 K! A9 Y4 L+ N) z! y - if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])( P0 j6 }& D: Q K- M% Q' q
- {1 \/ |3 [, J9 [- ^6 b
- sztoken[itoken++]=0;( H# n/ A2 w! U# X
- sztoken[itoken++]=0;
1 n! j+ @* W! Q - return szRet;
* N" P1 Z& ]6 j a - }
8 |7 o2 h+ L+ b - }/ l& g+ t) b$ ^) `
- itoken++;
1 f4 b5 J' I1 m* K6 ] - }& j' `8 N2 P. ?1 m1 _
- }
$ y0 S, @- @* R, m x - return NULL;
4 F; O" Z( t# n, |( Y, ^ - }
4 \- F" m6 ?, E- k - ( `1 B, j4 C7 C
- void ProcessProc(long Total,long Current)
3 L1 e: y# M) }- U+ i! f. U - {. i- I% Y5 e. _: ~7 f$ q
- MSG msg;" |8 |8 M0 H$ B" f
- if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
) Z$ b6 Y$ C e Z - theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));& _! k. ^/ U5 [' ~! i" _- B" w* V
- if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))6 ^: x2 `7 n1 D# W8 j
- {
7 ~4 N5 v' M* t# l5 E/ }* ]6 T" R( G - if(!GetMessage(&msg,NULL,0,0))4 i4 g, L3 c3 Y/ M- k7 Q
- {7 x0 l$ P. o" R& v
- return;% H, P) W6 r! U; N, g5 {
- }
: ~# u( Y; e: A1 F7 K - TranslateMessage(&msg);$ J: y5 I7 Q# F- P. Z4 O9 g/ f* }
- DispatchMessage(&msg);6 g5 P1 C* x8 e* s* Y
- }
$ g) _, z9 z: T' r w9 t+ s - }
. }1 w# k3 a1 f% S9 m - ) m: c" ^; j, @) I9 {
- BOOL bFirstChar=TRUE;
1 s4 X9 m: I# u; M
$ W+ A0 R' n8 J( S. g$ J2 Q- BOOL CRevAppApp::OnIdle(LONG lCount)' `& O0 q6 O$ N/ D
- {5 d. ~# I& R- Y3 M: a; v( q1 y
- // TODO: Add your specialized code here and/or call the base class
% J7 E0 E* L8 C; Z; r7 f9 B - switch(dwProgramState): n7 J, _8 W# ?" C& j' q: F. V
- {% E% b5 L; M4 f y( J6 d, \
- case AP_NOTHING:
/ b" k3 U$ N N: r; w' E - switch(dwStartUpSteps)5 `6 Y; |: Z+ l: E
- {# x7 }+ ]/ k3 U8 r
- case 1:
9 R. K: T3 x( D. s5 E# K( { - {
8 }8 k" e$ D* K% Z: }7 b' k t0 N - int i;( \# S: b, D/ I( L: Y
- CDC *pCDC=dlg->GetDC();
3 b3 z) Y$ `$ `0 o4 Z. E `" e3 j& M - HDC hdcwnd=pCDC->m_hDC;( X& _; f* _9 \ @2 H4 [# y. A3 q# K
- // Graphics graphics(hdcwnd);: A0 z2 i0 g2 B/ i" g/ M
- // Bitmap bitmap(L".\\Elysium\\Back1.bmp");! O% g: X+ i: Z6 s, q
- // INT iWidth=bitmap.GetWidth();
8 O* D* j6 n+ k0 Z/ ~; V - // INT iHeight=bitmap.GetHeight();
; m6 O; F6 _6 l - // Color color,colorTemp;
1 }4 o: }; x4 }( H( N- C! } - // for(INT iRow=0;iRow<iHeight;iRow++); ]/ @9 J9 o! J T6 x
- // {9 i8 |9 O/ s$ z# D; k# I9 F; Z2 @
- // for(INT iColumn=0;iColumn<iWidth;iColumn++)
/ j/ _* ~( }! w" V% @ - // {! o- N4 \5 u) |. `
- // bitmap.GetPixel(iColumn,iRow,&color);9 ] p- x) y, C0 f" T$ t
- // colorTemp.SetValue(color.MakeARGB(0 S. P1 B0 Z( x! }; V' V; S* k9 ?
- // (BYTE)(255*iColumn/iWidth),+ S a. L0 Z. l; K+ V
- // color.GetRed(),
4 l0 K7 @! i1 H5 n% ~ - // color.GetGreen(),
y3 F; \3 _7 D. N - // color.GetBlue()));& ^0 p( D# m2 c+ F. S0 U
- // bitmap.SetPixel(iColumn,iRow,colorTemp);
8 y/ h7 i( f6 }2 M( Y& z% t2 { - // }' {: d; [; `' i4 z# [1 c) {
- // }
5 \) c% [4 x2 {3 S }( E - // graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);2 d& h: G& a+ e6 _) h! Q
- HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
& t" L9 m# W# J( ] - HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
/ a9 T5 [7 E( P1 H - HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# V% ~6 D8 Z% T& ~. |
- for(i=0;i<240;i+=8)
1 Z) E% e+ Y w8 k+ E) t! C# @ - {
% Z- {1 v2 w4 K% K0 B7 v! g0 C - BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
8 }1 D) {" Y/ t, l" F - DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! Z$ f2 O, v$ F1 Y1 u' f d* {5 Y
- BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);1 p0 D s/ k3 g$ C( I' [+ K5 E
- Sleep(33);
! c2 v0 o% [4 E+ V2 g7 y+ X - }
. o8 C. F9 w" S- l5 o4 J7 R) E - Sleep(1000);
) l' w M' b9 U - for(i=240;i>0;i-=8)0 g) }, `4 ]: ^! z# ]) b# \4 M( s
- {
9 }& g( q7 M& b - BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
1 q- f* L! _ ?) v - DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 L* O0 P, E$ B& I- Z. P
- BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY); w1 w" D% B! A; H
- Sleep(33);! f' N- w' c/ o: C
- }
0 T' o5 p% [! b8 u - SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
) ~; _$ ^$ o& H6 M8 @" }. i8 O - dlg->ReleaseDC(pCDC);
1 x6 X5 W- {' u4 T% L, B0 h - DeleteDC(hdctar);
) U) H$ i" ~2 I* {) _* ?7 a& ?' u - DeleteDC(hdcsrc);
0 Z0 X- S0 t6 P- O x - DeleteDC(hdcorg);! G# C7 l2 D1 w$ K' C; k# S
- }! t0 K7 @, Q6 O' K" h: e" [/ J
- // MessageBox(NULL,"Step 1","Elysium",MB_OK);
" b& C2 I/ x3 [! } - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝狝竟腹 :");% N0 X+ a" t* r% S
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新伺服器代号 :");, a, f) n1 h; T1 y6 |
- else dlg->m_ListText.AddString("Updating the Server ID:");
+ i/ ]2 {4 Z9 `8 u, P; y - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 |; {! o* D1 R3 b
- if(!Dn.Connected()), l; z* P3 f6 y' h
- {+ R2 B6 h. g% l- B+ ]0 d7 Z( d
- dwTotalFiles=1;1 i. b( I2 T+ Z& G! {# t, {* w
- dwDownLoaded=0;' b5 S" A2 C* M5 H
- bSilentStep=TRUE;# E8 l- f4 m' o/ X2 Y6 L; B- r1 W! M
- bCompressed=FALSE;
, p6 _. D/ C+ A8 T* N - strExtLocal.Empty();$ ?4 S" p4 q' p6 w5 A
- strFullName="readme.txt";' S6 o& s1 v }: n9 q) B
- dwProgramState=AP_CONNECT;
( {7 g( `/ N$ t9 i3 C - }, v# S" q" W+ r& a, W, S
- m_pMainWnd->GetActiveWindow()->Invalidate();
1 |7 X4 b# _* _+ U: e# Z - dwStartUpSteps=2;2 d$ d0 ^# W [
- break;1 e0 r% g D! q# w* z9 F. Z
- case 2:' ?1 m% y f: ~# G; P# ?
- {
6 d( H5 w) B* D2 B0 A7 v: S - int iEOF;$ a# @% Z" U8 l- L7 Q5 |; b7 \4 y
- FILE *fp;
8 N' P4 X" ]6 c& S$ J - char szString[512];9 z/ G( W: }( u
- fp=fopen(".\\DownLoad\\readme.txt","r");3 ?/ ~5 }3 k* k o: a) L+ a V
- if(fp). r/ B7 x6 |( {* o# T7 b
- {) A6 K- V6 o" K1 N- k; s9 _- [- Y
- do
M7 i4 J- D( g) x6 h - {) o7 _$ A* I! h* G J Z
- iEOF=fscanf(fp,"%s",szString);
. Z; I) B+ F& e - if(strlen(szString))
* J. v* N9 R( E @: M - {
( b5 T/ j) H* _+ w3 v) [9 W1 _ - if(bFirstChar)
3 N2 x0 O# Y: \. i0 O: G& _; W; y - {6 i7 L1 q1 t% t' x# N
- bFirstChar=FALSE;
5 E( b: D6 ~. q - bConnectIsBig5=FALSE;3 a' S) ^* J' u" V" V' D
- if(*szString=='T') bConnectIsBig5=TRUE;
7 o1 e% V4 A' T- S9 q - }* Y" O: T! u7 W
- if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
" r( j6 m5 \# U7 C/ R8 | - if(!bDisplayIsBig5 && bConnectIsBig5) Big52GBKS(szString,strlen(szString));# V/ R h; r) ?" }- q5 `# D
- dlg->m_ListText.AddString(szString);
8 y j: ?' [1 ]# t, x - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
) S2 m* F/ d7 ~2 h - *szString=0;
7 N# I, U! B: z5 k! \- _) H - }7 `; q4 b& ]- i
- } while(iEOF!=EOF);$ p) P" | q* z
- fclose(fp);3 O* J$ h/ S2 w0 [3 s* z
- unlink(".\\DownLoad\\readme.txt");
1 {- e/ {5 p7 m) q* C - dwStartUpSteps=3;# h" i8 g& `; z# C* ~4 s; [
- }
( ~4 m" l1 e; C5 v' c0 b - }, {" Y! I* r) k: P
- break;
9 v7 G4 R, ?; C& c" ?: X - case 3:
1 w. j5 d5 q' f W1 |- \ - if(!Dn.Connected())
0 j a g4 a6 c - {
* M ^ [9 g* U2 z# j% s5 n/ B7 m - // MessageBox(NULL,"Step 2","Elysium",MB_OK);! R+ @- J7 @( o- [( [* n3 D
- dwTotalFiles=1;
& x. ?' F. v* O* ~0 R6 q9 l - dwDownLoaded=0;
8 y$ F+ U3 S# W/ U, Y& C' @3 H# C - bSilentStep=TRUE;
2 Q# y1 }/ W$ Z. T. m# P9 \3 t - bCompressed=FALSE;7 H, I Z$ l1 b5 b
- strExtLocal.Empty();
: |$ f, p5 h; M5 e! Q( r' p - strFullName="checkversion.txt";5 V3 E* }3 D3 C! \" D
- dwProgramState=AP_CONNECT;; X+ d1 L' D$ O# n
- }
# L5 n% h0 Z. F - dwStartUpSteps=4;
/ Q7 V$ x$ Q; h1 G - break;. ~: D8 p3 m$ N( a. F, B5 Z6 {
- case 4:
) J% e) n. O+ o/ v - {) k4 Z; v+ l7 Y4 R1 o
- FILE *fp;' m, H5 b) T$ Y6 s' w; \- w
- char szString1[128];; k# r8 s, n1 j* j3 M
- char szString2[128];5 z. S( W9 R/ X2 ~0 `
- fp=fopen(".\\DownLoad\\checkversion.txt","r");
9 k- V8 z$ M6 j1 _( R! ~ - if(fp)5 `& C# [: ]8 @
- {
7 f/ s6 r9 r8 v# S) U- f - fscanf(fp,"%s",szString1);# q: w( M# f7 g7 y9 k! t
- fclose(fp);# {/ H& L. H7 J# \7 W7 w
- fCheckVersion=atof(szString1);
7 W3 B- i3 K9 g2 i: r4 x* ~ _, X2 Q - fp=fopen(".\\checkversion.dat","r");
6 W& U% f- o# q1 A - if(fp)
; A- `2 I+ k# A) k - {1 ?- y. v0 o5 e' e% N4 z1 T
- fscanf(fp,"%s",szString2);
6 P: @3 d2 m# i) k - fclose(fp);
2 D9 C. |. r, c0 X& ~! | - if(atof(szString1)!=atof(szString2))7 p" b6 u* q5 J3 h$ M
- {% x- z/ v, _4 {" C k. S
- if(!Dn.Connected())$ [7 H3 U! S6 M. O
- {
9 Y4 b+ A3 g6 K$ R - bFirstUpdate=TRUE;! Y' f. M3 }3 I4 G, U$ K
- dwTotalFiles=1;* @/ U8 y% L: s+ a
- dwDownLoaded=0;! X: y. E! e9 G0 i" c
- bSilentStep=FALSE;1 X2 c8 l/ v8 X$ M5 w3 l$ q' G
- bCompressed=TRUE;
# |. B. Q( I+ Q. M' t e1 A$ P, k - strExtLocal=".\\DownLoad\";0 a& f* C q; n
- strFullName="update.txt";! H) N8 f# a3 d& g8 O2 t$ H1 b
- dwProgramState=AP_CONNECT;
( g/ b0 H. N' d1 Y8 E) H9 p" O9 d - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝更い, 叫祔.....");" K. J% s2 }- Z3 d* z
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. O8 S' W W' m( `1 V5 Z+ w
- else dlg->m_ListText.AddString("downloading update list.....");
8 o0 \8 [, |# M - # `9 b7 |8 M* I6 @1 j
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
, H, r0 J4 K+ Q& Y# L0 X- C - unlink(".\\DownLoad\\checkversion.txt");
1 W6 v; t- t0 e5 r( T. |8 T6 p5 J - if( GetFileAttributes("Wsa.zip" )!=-1)
% b, G" ]% Q6 C$ S - {. \0 \8 ]9 ~4 @! q6 S6 z$ Z
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("郎秆溃, 惠だ牧");7 v! u% R2 Y% R8 k# d( _$ D$ o
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* i5 j7 V+ J' u+ p1 p8 V! d [
- else dlg->m_ListText.AddString("Unzip Files, Maybe cost 10 minutes");; ^( `: Z4 g/ }# ]3 Z3 t9 c# l! N
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
: Q0 k/ b0 l- f0 @
4 Y% z) S4 C% s7 w" e) s0 n6 n5 ^$ B( h- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("叫瑻み单..........");
# h! [: C* ~2 g - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("请耐心等待..........");. @4 S& T0 I7 a
- else dlg->m_ListText.AddString("Waiting..........");
) P5 E! G& \2 t7 W( f/ [/ w - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
4 i7 o& {8 x9 C0 l/ b) m - }
' j$ g, O7 }8 c3 Q6 A - dwStartUpSteps=5;6 O/ }& b+ M H
- }0 |! f* c# V9 j6 s6 {1 W1 a* R
- }
0 \! s- J" q( A9 o0 w- D4 ` - else$ i) n0 v' a4 \ {4 y
- {! m! J. O3 ?# ~% r
- unlink(".\\DownLoad\\checkversion.txt");% e8 |+ P3 K. ~( D$ U% l1 v c
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
" Z b0 e1 v0 |2 D' x# i - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("没有需要更新的资料.....");
9 R7 v& _% E" a5 \- {* \ - else dlg->m_ListText.AddString("no new file update.....");
% Q* V7 k! ]- l& _2 L7 {7 D" E
9 V. m) f% n, R7 h% n- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 R) v( {; V. T
- dwStartUpSteps=99;
# n3 B) t! h5 A1 a! ?2 }- r - bFinishUpdated=TRUE;# {5 u0 E6 }$ W& G
- bCanUpdate=TRUE;
0 \! O( c$ _# E0 p6 e( t3 m: h - }
0 x2 Z1 i" v$ o9 k7 o - }% Z+ G+ i: I u: ~- N! K, l
- else- Z! }4 A; Q3 [
- {' s' V. {# f0 d3 O" \
- if(!Dn.Connected())
% l* x7 v6 Z0 S. s8 [ - {
: ^! c" w& D8 W0 w& H$ |* ^+ A - bFirstUpdate=TRUE;
& E; ?: S3 h# {& N. f' ? - dwTotalFiles=1;+ I) R1 `2 t R# g4 N2 X
- dwDownLoaded=0;! Z+ Y9 ~/ J% K$ |
- bSilentStep=FALSE;
: U, |' D8 s$ i. i0 N! d - bCompressed=TRUE;
; B1 ~! Y% h8 p9 u! V! ^; J" z0 ~) C - strExtLocal=".\\DownLoad\";
, Z- h6 R- G; @' h* M - strFullName="update.txt";
7 A& N( e# p: H5 z - dwProgramState=AP_CONNECT;
( R% Q4 A6 W0 k% Q2 f, S - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝更い, 叫祔.....");
7 z" k' r+ |1 J% C6 F/ F/ @ - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
}, @$ |" L8 O; J, r* K/ i3 W - else dlg->m_ListText.AddString("downloading update list.....");
3 c* w+ B4 J2 M! ^ - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
- Z" ]+ }0 D; u& q - unlink(".\\DownLoad\\checkversion.txt");
- T! `- N1 `# Q8 d0 Q- `3 Y: c - if(GetFileAttributes("Wsa.zip" )!=-1)" X$ B& x# t L7 ~
- {8 c2 v9 w8 I5 D" I( r" n+ t! d5 p( I5 ]
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("郎秆溃......");4 }# V# I9 H7 a/ R$ j. e: k' n$ @$ [
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("档案解压.....");
) Q$ S* Q" ^' Y( v& N' ~* \ - else dlg->m_ListText.AddString("Unzip Files.....");
/ ~0 N1 |: K" }& l' Z: z" H5 _ - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
( ~% ~9 c# `* c. ?( _ -
! Y- S r3 P# a3 K: t8 P - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("叫瑻み单..........");
# J+ {- K7 ~$ } - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("请耐心等待..........");6 y" c/ N2 V- t- S
- else dlg->m_ListText.AddString("Waiting..........");
/ f/ a# w; B' u a, L - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 K$ Q9 ~- z: z& K/ B) d4 X# i
- }. z% J7 N- ?# t' c. \. |8 m; I+ D
- dwStartUpSteps=5;
3 Y r9 X7 B$ G- r- E - }% @$ i! y3 V0 q" ^$ E9 H, ?
- }9 N. ~1 i1 t/ h0 G) P
- }! o' B' [1 f: U/ L& ]7 \
- else
; n+ u) ~/ h+ @" T - {9 s6 ]1 [) e, ]
- dwStartUpSteps=3;8 D) v) P4 o! Q) ]6 Y0 o
- }4 E# `3 t T7 G" }% m2 @3 j" X' y
- }
7 K+ W0 @( V% G4 c( u9 E& _7 l - break;) S& e2 F& y' n- o' z
- case 5:
1 Z+ S0 P( K* o: T4 K" g1 c! @* ~ - {
6 F) a u. s$ t" N% O. Y( S - if(GetFileAttributes("Wsa.zip" )!=-1)1 l6 i9 H1 b0 V' C' m
- {
$ S7 C6 N2 |; y+ m4 i - int opt_overwrite=1;
5 i1 J6 A& u8 W* U2 ^ - int opt_do_extract_withoutpath=0;
0 V* [$ |1 I* m- | - unzFile uf=NULL;, k. w9 y4 d) e5 U4 r- s) I; v7 A
- 6 I2 ?! f# o! b6 V3 l8 S, E
- uf=unzOpen("Wsa.zip");) q/ [- y8 X9 r& D
- if(uf)( D0 `+ q3 m0 R* C; U1 z1 z
- {7 N! t. A9 @3 i$ D5 W' ~+ j
- do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
3 W- x9 }" k" ?, Q7 ] - unzClose(uf);. [/ e( K& k1 U9 i6 x
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("郎秆溃ЧΘ.....");3 Y8 s9 r6 [" E" _
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("档案解压完成.....");
) \: ]- K3 ^; @1 n, U% T' @3 ? - else dlg->m_ListText.AddString("Unzip OK.....");" i5 `, `: g4 c! k( f
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
+ F' J* T% u7 V% j& I- C - }
# N, C e& G* G0 u$ B$ A - DeleteFile("Wsa.zip" );/ J. `6 _. U0 h1 @! g" I
- }
& J' }: |& T% t3 R- q
, F+ H5 t4 C5 Q: @. V6 A. N$ Z- if(CheckLocalVersion())
3 Y- X5 i: r- y" _ - {0 Z- U2 Q# ~: W0 z1 |3 H
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
+ ~ @8 _: s4 M4 f& q - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("请执行线上更新资料.....");
! c# w; @2 I5 N8 \, t) o - else dlg->m_ListText.AddString("Please update.....");
K. z# n/ [$ H0 h - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
/ L1 ]5 W1 N! J* ?+ A; H - SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);5 b" G2 ~! S6 X0 r
- dwStartUpSteps=99;$ @# n- p. J3 V
- }/ d+ l* c9 W# J: Q) g
- else
0 H. f4 I$ c0 _5 J - {
* J3 L! H. Q, ?* v - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
* O& l z) S! v - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("没有需要更新的资料.....");
4 z' |# H3 ]- @6 _3 {% U" ~ - else dlg->m_ListText.AddString("no new file update.....");! C, n6 w* @5 {+ T0 y. w
3 [% _9 J S) \. M2 m- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( W6 a) T+ J# l) C) j5 y* |5 A
- dwStartUpSteps=99;
; n$ a$ {' V) X( o) p% C. A0 s - bFinishUpdated=TRUE;2 G& @5 A) Q% q' [
- }
, E& l2 ]# U% c' W: T7 r. Q - bCanUpdate=TRUE;
* {/ w* ~( |+ h2 q - }
3 T* @2 b0 ?+ J& ?, \ - break;4 ~* U% R- B" ?* V1 \" ^1 B
- case 6:
- `- }+ _- J& { - {6 r5 i0 c% {7 e
- if(!UpdateLocalVersion())
: J& C3 q( z- ^) D - {
; o# U0 a* _- T' |7 } - if(bRestartUpdater): k* R* L9 C! p. A
- {2 @" u y) N1 R
- if ( m_iLanguage == TRADITIONAL_CHINESE ) MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);" G* {! H/ G& n; T4 U% c
- else if( m_iLanguage == SIMPLIFY_CHINESE ) MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
1 ^0 B3 y# y9 g6 j6 F - else MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);0 q! B3 V0 x% Q
- DestroyWindow(m_pMainWnd->GetSafeHwnd());
$ r, p$ ]6 {: E2 N1 P9 _* b! b1 N) t - dwStartUpSteps=99;
: A V8 }% R) t& v0 s, ~/ c' K - }: i5 [0 f3 e u3 _
- else( R& K2 k( |6 O, n3 ?
- {! e+ A( p* c+ M% ~( y' r
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝戈竒ЧΘ.....");. i. C0 l0 q) n# l1 d: q
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新的资料已经完成.....");
7 q& A3 l$ T4 ^2 q% ^7 j - else dlg->m_ListText.AddString("updated file ok.....");
4 D* W( p" x: _4 b: ^ - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
. C% s1 [4 e3 n; W! D - SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,0,0);5 h) k) H/ r& \# e$ h( R
- dwStartUpSteps=7;8 Y% A- j+ o! R1 e5 f. G# i
- bFinishUpdated=TRUE;9 w1 _& H: n! v, X# X1 Z+ T
- }
( {& I' H! J r# h6 V1 z# u - }! w$ o6 u$ I2 j
- else
8 r- P, s( i3 }( k( f - {/ y; Z4 E& v9 E/ j% \' a1 P
- if(bRestartUpdater)- G0 `9 Y0 R, b% M! ?
- {
" D# d5 v* w8 O - if ( m_iLanguage == TRADITIONAL_CHINESE ) MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);
* C _- ?) G4 O8 a, X - else if( m_iLanguage == SIMPLIFY_CHINESE ) MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);0 G4 _* ?, Y" O; ?& T" K
- else MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);
' i7 ]5 r9 b6 u4 p) n; q5 @- ] - DestroyWindow(m_pMainWnd->GetSafeHwnd());
; {# J4 M7 {# n - dwStartUpSteps=99;, z# k( ^) D* i% A* c1 @1 _. b
- } V8 `) ^# J' ?* d+ q- _* D
- }
! D) N: Q* b! c2 K- i - }3 }+ ?1 R0 \- X' C# @' |- x$ U h
- break;
3 X3 |7 u. Z9 H/ |3 h+ P: y* H8 Q - case 7:" N1 p+ f' u4 [" ~% Z' [
- {6 q+ I, ^2 e9 l9 \/ @! U! F
- char szExecuteFile[14]="Bf_Client.exe";
6 C3 p1 q. b J& G - if(GetFileAttributes("Run.exe")!=-1) strcpy(szExecuteFile,"Run.exe");
: ?8 o) ]# t9 t1 C" _! p# b/ y0 H - if(m_iLanguage==TRADITIONAL_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);5 T3 H1 v0 o3 [
- else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated2",NULL,SW_SHOW);
& N$ @$ E" V7 A" e$ v5 R# B - else ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);% f' c& R. Q4 x
- DestroyWindow(m_pMainWnd->GetSafeHwnd());
) Q4 |0 W2 G7 g) A. r6 ^' O: F - dwStartUpSteps=99;0 k+ R- R ~5 ]1 w ?9 k
- }
$ b. \8 `8 c# ^# c6 q7 u, M! z - break;5 \; B! a# d" H- u
- //add by cece
" n# I8 K8 `4 c$ n' }) k - case 8:
4 [. I7 e* Z7 e: l6 e$ e N - {+ V5 C6 {9 h# ^" P9 Z
- if(!Dn.Connected())
! v* y7 V1 J/ L# q - {
u, t7 D/ G5 q7 W7 C! R - dwTotalFiles=1;
& `! m+ C, [! n; ^ - dwDownLoaded=0;" \% E, N. d! j: @1 Z, T$ B
- bSilentStep=TRUE;2 M; E+ P, H6 P6 q: a8 o0 W& M
- bCompressed=TRUE;$ f. { K4 c( f1 P7 G& O, \
- strExtLocal.Empty();
1 V2 q# h+ @; {( G2 p - strFullName="download/CRCTable.txt";- a0 {+ |3 J( t6 m# d9 g9 u
- dwProgramState=AP_CONNECT;
3 e2 q0 _3 w8 M4 z! U7 G D - }" `: q: O2 H U. {: M; l8 Q
- //
) }/ Q {; r( [8 H4 g' g- A - dwStartUpSteps = 9;" }! ?/ _7 B6 ?1 b9 J0 P4 w
- }3 q! N6 n0 l& _4 l' E& U
- break;
( B9 K) @4 |+ g8 ?. R1 u3 \3 w - case 9:" ~8 @* T5 O( K) s7 Z
- {
8 u/ q/ v6 A3 W: Q t) [+ U - if(!Dn.Connected())
/ y6 ^9 K. p% t( p7 h1 t4 ] - {) Y& C& y0 u! C* X' C1 O
- dwTotalFiles=1;
; ?: B) `/ n5 x/ E. S. c% ` - dwDownLoaded=0;
' }# Q! S0 p( p* Z+ Y. N - bSilentStep=TRUE;
# e' L0 y0 P3 m H2 C) l0 w - bCompressed=TRUE;, x* N$ R8 V8 D6 A4 }
- strExtLocal.Empty();
3 K( h8 |& r. d - strFullName="Run.exe";
: h2 U( ~( n9 i. t" L* n! M - dwProgramState=AP_CONNECT;
) t2 o9 W; w1 ? B* o: s) g, { - }0 m) _0 d1 O; _0 m2 n; [/ }
- //
' B8 l, ~6 d6 Y/ p - dwStartUpSteps = 10; C# T4 n6 S. b: `$ {
- }) t7 T% C. R4 t$ \) @
- break;4 _# K4 o$ J$ U
- case 10:
3 e" n' }8 a( u* A/ k - {
2 e$ h7 ~7 ~" U; B0 U - if(m_iLanguage==TRADITIONAL_CHINESE) ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);: A7 g8 f; r( M3 X
- else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open","Run.exe","updated2",NULL,SW_SHOW);
. _$ t b3 U( g3 ] - else ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);
( Z& n! W+ I7 X# Q8 q - DestroyWindow(m_pMainWnd->GetSafeHwnd());1 t0 c; K2 ?; g. N$ V
- theApp.bClickRunExe = FALSE;
0 K& }1 d' f5 r8 T& Z* q( g - dwStartUpSteps = 99;6 r& ]5 [# L& K; w7 K
- //; C1 |+ h* R% m' b: L( B. b. w
- }
6 F- V- p! [6 O0 g4 Z - break;+ `6 v% W2 m0 E! C d& V& A$ `% R
- //1 X4 y# o, G* s# X' n" U
- }
2 l, U7 A8 v( `4 h& O% q, @ - break;
' [- M5 b$ o) d! \1 h) r - case AP_CONNECT:
8 j: k) a- T' l5 b. E& i - if(Dn.InitNWSSock(4096,4096))
M' y+ t/ U; n7 G% _6 O - {
8 F- d- F$ r* L0 r% K' X - char szPathName[MAX_PATH];
- f' e% D0 b; ? @# l' @% r - dwLastSize=0;
+ @5 c. z& n" m, z8 L5 ^ - GetPathFromFullPath(szPathName,(char*)(LPCTSTR)strFullName);5 M$ t& F/ u A2 H* d' v
- strFilePath=strExtLocal+szPathName;! @0 a& k# l* t5 t
- strFileName=strFullName.Right(strFullName.GetLength()-strlen(szPathName));
6 a9 M& l. T2 E3 Q8 [2 W - dwResumeNums=0;
& h" _4 X; d$ ~7 e4 @6 X - CString strTempName;1 ^& d/ i& [* w9 E n7 ?3 B8 i
- if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);
( H; l% ^: b" q8 E3 v2 Y1 c! P( Z - CString strCountData;# r$ Z- `4 T8 s# O4 R; k* X. {
- strCountData.Format("%d/%d",dwDownLoaded+1,dwTotalFiles);1 q. ^! p4 G$ X2 x B, ~0 I+ z
- dlg->m_FileNumber.SetWindowText(strCountData);
4 ?$ ?" O3 |) H+ q4 I5 n - dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
& c& p: T& J! d9 c5 f4 Y" L - if(bCompressed)6 K; b# x P8 o) r
- {" B S" V: k* j
- strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);
y* s# D R) R) @- L4 E' @: ^ - }: k* _6 x& r; [. U
- else
6 s" O+ o# N9 ~6 O - {* t$ n+ R* m% X" M2 {/ r
- strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);
5 _6 K& z" B5 C4 {3 j - }
) X: K/ D( Y( J - Dn.Connect((char*)(LPCTSTR)strHostName,wPort);* \0 W5 Y$ B( C5 e+ o( g+ B2 E
- Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());" K, b% g9 I, {; f- z5 v0 b$ J
- LastTickCount=GetTickCount();! Z3 b8 p4 T& x% F. }+ W! |6 X; v
- dwProgramState=AP_SENDING;
. ?( G( _) a v T6 \9 M0 e4 K9 v - }
3 H% c/ P0 j: I5 A8 W& L: r - else
: G2 Q; t' y8 L* b0 u V/ A; k [ - {: E2 }1 [' P* p4 G4 i. T4 t* Z
- Dn.QuitNWSSock();
4 w4 r. _% n, ^5 o4 o U - dwProgramState=AP_NOTHING; l+ O: w7 J, E5 j) s
- }
T9 R% d# u! B) c% ]. r' X/ J- Y - break;
2 ]& ^- n+ r9 B; h - case AP_RESUMED:
: d% e( ^/ r* s4 d7 f - if(Dn.InitNWSSock(4096,4096))
8 k8 w6 v9 b7 I5 u. h ?' N - {
# I& X& K$ C, K2 U% o, o - dwResumeNums++;
5 O" e, z5 M/ \+ l - CString strTempName;
& K P3 U: t) V - if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);
, o5 N1 ~+ q. q- H" v3 D4 f1 g - CString strCountData;
7 l# W5 Z+ B- s: q/ E( k - strCountData.Format("%d/%d",dwDownLoaded,dwTotalFiles);" l P% a7 ]- s9 C& {8 X" G
- dlg->m_FileNumber.SetWindowText(strCountData);3 Q7 ]2 \% |, k/ p+ c' J; q( ?
- dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
% L b- H% @: p1 C6 U- \ - if(bCompressed)
0 J9 S3 u8 K4 g$ | - {/ t4 t0 x1 z2 J, I) c
- 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);9 F( q& ^0 J# C9 q! L
- }5 z5 ?9 x: G4 O4 Z: H0 W' V" z3 R
- else
8 [8 v ]3 z }! Y2 N+ d* k `: | - {
3 W; E1 M* j* e8 s# u3 Q - 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);
4 p0 l" Y( k- _ } - }; P( ?; R1 }' c0 }7 @: S; A( z
- Dn.Connect((char*)(LPCTSTR)strHostName,wPort);
; j) p# m( j( ]; H( U, f - Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());5 U- H5 P( o0 G) u3 b2 k# C
- LastTickCount=GetTickCount();: v+ k3 i5 |& g2 z. j( }+ ?
- dwProgramState=AP_SENDING;$ F5 X7 Q: |3 Y: e
- }6 M( W7 X. {& ?7 b) m/ z
- else7 e5 r- }' e3 s7 x$ R
- {& m- \- y) Z( B- k% R! B
- Dn.QuitNWSSock();4 D1 T7 P7 x9 r, j, b4 y+ R
- dwProgramState=AP_NOTHING;
: q8 `( t- |0 y, b; a. I - }5 X8 p- U& j2 U- r. o- ]
- break;* t6 G& x$ i( x
- case AP_SENDING:; V' K4 q3 o, X7 K6 @! R8 ~/ F1 u
- {# W* p' c4 M9 b7 w6 @
- DWORD RecvLen,SendLen;) V; A/ J3 y) H8 B# G& h: c
- if(Dn.NetworkLoop(RecvLen,SendLen))& @ _6 g3 Y" m: B
- {( C( [/ o0 d5 }- U n, j, }
- LastTickCount=GetTickCount();
/ R. L$ X& r/ N' U- |; F; L% w - if(SendLen): E7 l& X7 w; d1 M3 j) ]! I
- {
) y9 f1 i# M( J5 ~ - bReadHeaders=FALSE; ^6 ]6 i7 x8 L3 ^/ O: m7 I
- dwProgramState=AP_RECEIVE;: Z+ A9 Z! A# P7 ~% _: c6 j/ }: p
- }) P( Q% m: I2 `8 m" z
- }
5 Z( S& _+ H+ M' A; @$ E - else
% F. r* n/ ^3 N9 {# y9 k - {
" V8 G$ w) ~. S/ X1 s+ l6 |/ B! g) m - if(GetTickCount()-LastTickCount>3000)
: P9 C" P; f! h( e: g8 ~" v; o* Y - {* { g# n u- k/ S9 [8 A9 Y8 z
- Dn.QuitNWSSock();
3 P! B# a. {' l4 [7 } - dwProgramState=AP_CONNECT;
' f0 M+ i/ R1 u$ D! [ - //+ u; ]. y# l) s A: X# d, w( O/ n5 n; J
- static DWORD s_dwCount = 0;" d& N/ n* B ?7 u5 S
- s_dwCount++;& m* @3 K9 Q- E4 t. W
- if( s_dwCount > 10 )
7 B6 T# q5 k' q9 s+ |: `' v3 z - {$ n7 S* j5 u2 A+ ?# j# @, U2 f
- if(m_iLanguage==TRADITIONAL_CHINESE) MessageBox(GetActiveWindow(),"硈钡穝狝竟ア毖叫浪琩眤呼蹈砞竚 ","Error",MB_OK|MB_ICONERROR);& C8 F, B) u! J: D4 s
- else if(m_iLanguage==SIMPLIFY_CHINESE) MessageBox(GetActiveWindow(),"连接更新伺服器失败,请检查您的网络设置 ","Error",MB_OK|MB_ICONERROR);/ x9 b1 {+ [0 C9 O
- else MessageBox(GetActiveWindow(),"Connected Error, Please Check Your Network Status ","Error",MB_OK|MB_ICONERROR);
! |, U% d$ Q7 J5 d+ s8 a- U5 B2 a9 D - DestroyWindow(m_pMainWnd->GetSafeHwnd());
- g: T/ [0 i1 m - }; B) F; `0 H, R& b9 P" y& [% ]
- }
8 ] }- V" N4 x+ P4 l* D" \ - }
v4 d/ j, q3 V1 D: I5 { - }2 c: t2 V' H. q. `! l
- break;8 F6 U7 h8 u- W3 u8 i) d
- case AP_RECEIVE:" n0 G' }- L! g6 Q
- {
; a3 o I! M8 t) X. u% \2 g$ s - int Count;
: D7 n5 D, n7 ^0 C - DWORD RecvLen,SendLen;+ j% D$ [0 y/ y5 \, z. D
- if(Dn.NetworkLoop(RecvLen,SendLen))4 |, k( `4 {5 V0 }0 \
- {. W7 g3 W: h* b8 B) W6 u& G, k" D
- LastTickCount=GetTickCount();
0 ?9 D. w0 v( ?. C. P0 J1 B - if(RecvLen)6 F' Z) X# F: J/ x& Q: _
- {
! H7 y) l& i+ N" k, [- ^ - if(!bReadHeaders)
5 g( R# M5 z: e+ B - {
; h9 H- a0 e' Q/ v1 X O - char *token=strtok3(Dn.szRecvBuff,"\r\n");0 i; ]% h: i- J0 | N
- if(token)8 p' X0 J" U! x
- {6 K- `1 ]+ a% l6 f5 y
- dwFileSize=0;3 I6 ^# p4 N: b. `( K! N, r! p/ ^
- for(int i=0;i<(int)strlen(token)-3;i++)
% R' r. f- f6 i: u0 ?' F - {! |3 e5 @4 J* X' t* w
- if(!strnicmp(&token[i],"206",3)) M5 Y7 I7 E7 _1 A7 F- C6 Y1 S9 j
- {
! Z0 L! R, Q8 N; E - if(!bSilentStep)4 H5 r+ x, a* B% U$ L
- {" K, ^1 W, G/ ^2 s+ O( v
- CString strTempName;
. c; |9 I0 [' T$ a* y% D/ ]# r( z - strTempName.Format("%s.....resuming(%d)",strFileName,dwResumeNums);4 Z9 d% w2 N" s! r* g
- if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
' X, Z I; m: ]7 X - dlg->m_ListText.AddString(strTempName); O$ Z) f1 Q. t1 w
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
: I6 M% u8 S3 H+ F. p" ^ - }: e% W+ i" Z' y+ a; U8 G/ v. I$ x
- bReadHeaders=TRUE;- d' `; k& e3 s* C% x0 n
- while(token=strtok3(NULL,"\r\n"))2 g! s0 z Y# d* ^ L3 n
- {4 h8 D G! O3 ^0 T
- if(!strlen(token)&&dwFileSize)
G! P$ y: @* o3 J* b& R" Q - {& H D- W% m8 Z: G. h, V! r) {
- Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;2 t* G& D$ [6 B! d
- if((int)Dn.dwRecvLeft>0) h/ X2 h: T p; E
- {
. \: f" ~! D1 C5 ^- B' v! E - if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
$ e8 g. W3 |6 I; H2 \ - {
6 F8 w" W/ d Q/ {. {1 G% O - dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;) g3 N& [0 c c/ }+ h, l, r; z
- Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
/ q( X1 y3 h! R2 o; u - }: O4 o! c; m" F, K2 U; ^# c
- memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);
9 f! e0 K& X0 i3 H. r- M - dwCurrSize+=Dn.dwRecvLeft;
+ y( _6 _- f+ j6 u - Dn.dwRecvLeft-=Dn.dwRecvLeft;
( P- d5 R# m& U& ^; [- Z: U1 B - if(dwCurrSize>=dwFileSize) goto SaveFileJump;
. J: A, T6 B) o! |4 @0 @& x$ f3 _ - }1 \$ c3 t5 i- M) C& Y
- break;' g' q! N7 y9 _1 j
- }
* X4 w3 S0 |( U: y0 F9 } - else1 M9 ]% i4 v3 e" }* S% U E
- {
, y# M1 b* F% e - if(!strnicmp(token,"Content-Length",14))
: i3 x* W1 C1 M# L - {- d" x1 ]1 ^' M8 h2 ]
- if(!Dn.szCompBuff)
3 i) }+ M3 F a6 h% n1 l# ] - {
) P: T$ t% q w, o; S- X- n7 } - dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;2 t0 P6 a N: W& \: x! G3 F( I
- Dn.szCompBuff=(LPSTR)malloc(dwFileSize);
4 k6 Y& m8 S9 P$ n - }) |* H6 {& n5 d9 @5 @: s
- else if(dwFileSize!=dwLastSize)
* _3 M+ k# c8 V% z, I/ _ - {
4 g) I' S. @, x6 M* z - dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;
- ]1 R9 Z$ _' D* \* `' ^# \, L - Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);4 G5 i8 ~* `6 Z' _( `( ?
- }
* K3 S4 {8 _; y8 z1 c: f - }
2 r7 O" y9 C7 E. T- p2 S - }
) w) }. f4 \# f' l - }
% g5 ]$ f" N; ^( Z1 X3 | - break;6 G4 _5 }- A; c; o4 M" J G1 J5 g4 ^
- }7 `5 L6 R& H! J) D3 B( U) k
- if(!strnicmp(&token[i],"200",3))
' J! n2 o$ o: S6 f1 I. J2 M. D" M - {; P* U0 M- B/ M% w" y
- if(!bSilentStep)
+ ^5 @1 C% A8 b, g - {
# h2 c0 Y' C, R. f" G" C& H- N - dlg->m_ListText.AddString(strFileName+".....downloading");
1 J2 A P- N8 z) Z6 c. n - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
6 C! @- b( B6 a* V, c; ]9 s - }
, X/ a. b2 z9 [ [# _ - dwCurrSize=0;
' l9 x) i4 R! g4 O - bReadHeaders=TRUE;5 h v! l( _7 t g. _
- while(token=strtok3(NULL,"\r\n"))
) M1 Q+ G D9 ~/ o - {5 O% A5 B5 o6 @ x! e
- if(!strlen(token)&&dwFileSize)
+ x+ O$ e; R4 C9 l - {
# e: I" M; Y) R$ |9 | - Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;
4 d$ V p1 z4 @4 d& {5 h# @& U( M - if((int)Dn.dwRecvLeft>0)
4 C% \( F6 y7 Y7 A' B0 u: ` - {% D |, B& |: Q5 s
- if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
' S* V1 i6 {& G9 s1 B) m+ Z# m8 @& v - {, @0 s% F* g4 V) D x
- dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;( m1 p+ V U5 P) R1 X# \
- Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
* p. Z/ r- [% }9 t8 ~! p' \ - }
' ^$ C9 b- ?7 v# f [# o - memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft); y+ J0 D: H7 ?. X, a- D# `! g0 r. i
- dwCurrSize+=Dn.dwRecvLeft;4 b" ]: ~4 A3 v \) B' z9 L! Y
- Dn.dwRecvLeft-=Dn.dwRecvLeft;
$ B3 j# @4 ]& F1 G# f, u - if(dwCurrSize>=dwFileSize) goto SaveFileJump;2 }8 H% U3 N( R5 Z' S# @
- }
) G. N" @* C9 i$ M# ?2 F* o - break;
/ E1 O5 M8 {3 L4 a* e/ T6 B3 q. B - }" h5 N4 t3 P+ P+ s E6 l' C0 @
- else7 i; U0 T4 q% ?$ w4 Z9 _
- {
$ V- t( S3 [$ A9 h G0 @5 ~) r' Y - if(!strnicmp(token,"Content-Length",14))
1 X7 D V, ?+ ~0 o+ S, s/ L$ w9 P3 w - {
: j& x& ]9 L& e3 ^8 O9 W( N - if(Dn.szCompBuff) { free(Dn.szCompBuff); Dn.szCompBuff=NULL; }
2 b8 `8 x( w) H6 c+ o - dwLastSize=dwFileSize=atoi(&token[16]);7 S0 u6 _* ?+ m/ |
- Dn.szCompBuff=(LPSTR)malloc(dwFileSize);
# b$ G3 _1 M: h - }
2 H1 V+ R! t& ]4 O - } ^# \! Z; h1 @" q5 P/ c3 F0 z
- }4 p5 n( D' N, ~7 T1 M
- break;
1 y2 W7 z( B- ?' Q# ?3 n1 R - }
3 i- r, ^/ J* _" ] - }
5 }# d& N6 p' V$ |3 [5 b$ ?4 q - if(!bReadHeaders||!dwFileSize)
% M6 v) D) U ~' v - {
* s, ?3 w: E4 h, r* d5 m W9 O( V1 Y- m - // Wrong Header or Reading File Size Error( i( j$ ^& ^; M7 y, h8 U2 w: U
- Dn.QuitNWSSock(); s$ s/ ^/ C0 ? j
- dwProgramState=AP_NOTHING;/ ^0 G# l: F* z) \+ ]0 _3 |) _& T
- CString strTempName;
- i1 I1 ]( A: V - strTempName.Format("Navigate %s File Error !",strFullName);
8 Q( a* W& b" t' a' a) F+ b, {; l- _ - MessageBox(GetActiveWindow(),strTempName,"Error",MB_OK|MB_ICONERROR);3 q) i: {1 z$ P' e, c
- bRestartUpdater=TRUE;% D& B8 G; f* ^# t+ p
- }
, t1 U- H8 Q" a1 a2 m8 U - }
! m! }; e% D6 U- F! z& b R - else
1 J# d- x$ p( c$ m/ Y+ f! B - {' T- ^1 h4 q4 M! w& z: ]
- // Have No Header# T* Z8 {& ^( L' m3 h: v3 j
- Dn.QuitNWSSock();; h K# X Q; u" O) z
- dwProgramState=AP_CONNECT;% f8 Y& v3 E* a6 [% y
- }$ F: y- e8 ^1 I: U! _2 X; q
- }
% W5 }. L; {, v' t6 d5 b - else
! Z2 }' h, f: h - {! k2 L9 I5 T- Y$ Q4 p( @
- // Reading File From Web
7 K) W3 U) Y% u) ^& A" Y/ G1 x - if((int)Dn.dwRecvLeft>0)
9 C' c; w3 _. @) Q - {
6 C2 d7 j$ C% Q5 B2 J0 R' U5 t$ `% l2 } - if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)' P' ]4 P" w" k1 V
- {
, l4 e: Q, z4 q [6 ^% s, z - dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;/ d' B, X! |# }! V7 O8 G6 w" v
- Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
9 k4 S) L' G5 ]) S - }6 U+ Q0 v. X6 N' X) ^+ L; t
- memcpy(Dn.szCompBuff+dwCurrSize,Dn.szRecvBuff,Dn.dwRecvLeft);
0 M% x/ R% C7 e d% e( F5 n9 i - dwCurrSize+=RecvLen;
7 Q$ ?; [6 l# C! p } - Dn.dwRecvLeft-=RecvLen;
/ ^8 n- I/ p- o5 _ - }
) b: i9 z* ?( q* [ - dlg->m_Process2.SetPos(100*dwCurrSize/(dwFileSize<=0?1:dwFileSize));4 H8 Q+ L, Q/ C D; d
- // int iRate = 100*dwCurrSize/(dwFileSize<=0?1:dwFileSize);
0 g. _9 a, i: V) h2 A+ b - // dlg->m_Process2.SetPos(iRate);
. s) v- W, k* f - // if(iRate < 0) iRate = 0;& X6 W* k6 N0 j. e0 d9 H
- // if(iRate > 100) iRate = 100;
X' M$ {6 B; T1 o - // char szShow[5];! Z6 U% i( f8 d7 ?. y: V0 q
- // sprintf(szShow,"%d%%",iRate);
* \8 W- z, D+ Q- K6 c$ [ - // dlg->m_SingleRate.SetWindowText(szShow);
' \! M+ h9 e: B) V! i5 ]6 r - if(dwCurrSize>=dwFileSize) goto SaveFileJump;4 J- o2 b2 E, m5 K# M9 L8 X
- }# g: r. P' A: f% y
- }% C# ]8 j( z0 e! _1 p2 J
- else if(dwCurrSize<dwFileSize)
. i: t, P5 B& b$ k3 _ - {
+ F( n% f9 C5 [8 |4 k! K - // Disconnection But Size Error
# s3 b: ^5 c9 \% q+ J - Dn.QuitNWSSock();" H) g; j7 ]. w R$ Z. |: F9 Z8 ~0 k
- if(dwCurrSize) dwProgramState=AP_RESUMED;
' ~9 C, I: Q4 b0 o' T2 P7 L - else dwProgramState=AP_CONNECT;2 k/ O/ k$ M1 P; A( g7 U0 W3 U
- }
8 \+ O7 {" E3 P+ D - else' p f' \# j: i6 a0 O9 N: _
- {
4 J( G: x' v- B* C* s' v - SaveFileJump:
" O7 i+ \/ V( Z( C; t - // End of File and Disconnect% A1 s. ?. t0 Y' o3 g5 ]
- FILE *Fp;6 ^' X; V' D$ v2 ^0 W& ]9 K
- char szTempName[MAX_PATH];
" O( f$ e( M: Y+ v" `9 g - strcpy(szTempName,".\\DownLoad\");
2 X$ Y" a. [' B - strcat(szTempName,(char*)(LPCTSTR)strFileName);
' m! m/ O4 ^+ @( [5 e4 j7 i2 a - if(bCompressed) strcat(szTempName,".zip");
0 O% K1 M& O2 p - if(dwCurrSize)- z' j/ h, f5 n: [; @% @
- {: {. Y' Z9 C4 U! G: F
- Fp=fopen(szTempName,"wb");, l1 `" }* }# M1 c
- if(!Fp) x5 H/ `3 z# T0 O& h
- {. u1 E$ |# a$ t7 j9 X
- _mkdir("DownLoad");8 b- c, y! J+ W# L9 i+ t: A; i
- Fp=fopen(szTempName,"wb");
. z/ J+ `/ ?* }: y; ? - }
9 x: b# I: ~8 H1 J, O8 ]9 A. b. P/ F - if(Fp)0 v& m" w" v2 E: |6 A# I
- {/ I+ F7 g4 t* u/ B7 C0 B
- fwrite(Dn.szCompBuff,1,dwCurrSize,Fp);6 u* d q4 y! N K$ r# i
- fclose(Fp);8 f" l& a6 k. c( G$ x
- }
( h' ~7 [) u$ f: u/ L - }
" a9 D% \( _: x6 @ - if(!bSilentStep)
, b# ~" j" ~" A* F G- u - {# r9 K. {5 S0 f% Q
- if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
8 y- g k8 Q$ E( R+ m - dlg->m_ListText.AddString(strFileName+".....saving");
; y3 d/ n' `$ x. l - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. {5 V1 z* b5 Z" Z) Y3 H3 }
- }
# c% w" O0 A* m" I# T. b' L - if(bCompressed)
7 ?/ x- D2 E7 @+ P5 |# C - {8 b4 G, f& v/ k) q1 K5 _. i
- int opt_overwrite=1;/ p" E0 u. C" U2 y$ G& p
- int opt_do_extract_withoutpath=0;% m- }6 d5 @' _/ W- H
- unzFile uf=NULL;$ m+ h+ G1 ~# R% o7 b7 u N! ^
- uf=unzOpen(szTempName);8 V& G- J7 G4 h% M3 |
- if(uf)
% }; {% W# v) R6 a& S. a- A - {
* l- x! e; x# e! H - if(!bSilentStep)
& [5 h7 T x, `9 b$ x+ R l" a - {' n2 ]; _8 \' }
- if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
" o; m+ G! e3 R% i - dlg->m_ListText.AddString(strFileName+".....extracting");" r2 e+ u; C$ l! h* T
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
' s* G, {3 G3 c - }
3 y! [6 c' v, s! Q& z - if(do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,(char*)(LPCTSTR)strFilePath,NULL)==UNZ_OK)
! I! H m/ [2 ?; C - {; X' R! s+ E- V$ t, M: N+ l
- if(!bSilentStep)
8 [. i2 F% R# p3 C2 r% t, Z2 ~ - {
& m! n. M/ k6 P& N: X9 n - if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
! b1 J2 o8 E9 P- H0 L3 J - dlg->m_ListText.AddString(strFileName+".....done");3 `* Q' E- O. j
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ N _3 G5 e7 m2 x
- }
4 d/ V: E. Y3 J( ^! i - dwDownLoaded++;
! @# U8 _& m& D$ d2 ]$ m - dwProgramState=AP_NOTHING;0 q! c5 z' g' ~; [
- }: G) }/ B! ?1 N
- else8 d! t, M0 e: G/ J5 B4 ~7 h9 o
- {
' G4 s0 f- g6 L+ s4 q - dwProgramState=AP_CONNECT;. u; G! R' R& Y7 {. Z
- }4 s/ z. f c# v
- unzClose(uf);1 n5 Y( K% B# k( O9 \$ X
- }
5 o' |( q) [- O* `/ B, t+ V - else
5 j! }4 {* B6 E/ L" U" m - {" I* l% f% q; y1 A9 i
- dwProgramState=AP_CONNECT;% |+ f* Y% O+ h3 P
- }
' |" ?3 [/ m+ O0 y7 U$ P8 N - unlink(szTempName);
( q' k- E" e5 R0 {# Q8 x - }
5 \* C- K$ A/ E4 d# x - else
( K+ w4 ^ [6 \0 @" T: C - {
! d% W' }5 ?: G - if(!bSilentStep)
3 P! Q; a) _+ S$ l - {
3 D6 u; R. G# a5 |* Y+ I' R - if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);3 T7 z0 S( ], z& E' l
- dlg->m_ListText.AddString(strFileName+".....done");; ?- L y2 n+ c6 ~
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# T) d: \( g+ J0 V% ]& i
- }
- \3 n- d9 |4 w% ^: I - dwDownLoaded++;+ m* p, s! s/ u" K4 D/ F6 U( I
- dwProgramState=AP_NOTHING;
( g& E8 d z& Y# q9 f - }! H8 H. W! T/ T! p, e& z+ \' h, f/ Y, P
- Dn.QuitNWSSock();
& l& ]) U) W; _5 _' t - }/ L$ v J* D0 i$ ~. B
- }8 o9 h7 _: M/ @* Q" S/ I6 a( `
- else- \: c6 P$ Q1 }! R j; e
- {
# Q) d( U8 V8 ] p - // Connect Timeout
, D2 w9 E" C1 T# c% ~ - if(GetTickCount()-LastTickCount>30000)
# U3 l: t5 ]4 f9 |. y/ Y - {
. r! n2 w8 o: h+ F6 c - Dn.QuitNWSSock();* o* @% {3 y' t* P% Z; E
- if(dwCurrSize) dwProgramState=AP_RESUMED;
1 ^( W0 }; D2 A% k S3 e - else dwProgramState=AP_CONNECT;
/ M- r( m! w W- L. p$ W; i7 ] - }+ J7 d, B& A* J; V' T9 E1 W
- }
6 [$ |: ^4 E4 [6 Z" f/ U - }
o9 D: f4 y6 N1 R# Q# K, s- u. a - break;
! T t+ e% B, X7 t - }) @" t5 L8 D: _& f' o- G, m( |7 g/ p9 o; v
- return CWinApp::OnIdle(lCount);
. o4 H/ I" f; m$ P - }; `7 t# v' Q" t3 n7 d6 e% y. K
複製代碼 其实登陆器也就是这么一回事儿……
/ Q6 |+ j6 K4 z附件有编译教程和源码" P' [$ x, B$ L0 T; g
4 a. y1 t$ p+ X/ ]% H
# I$ b: f/ F- B! k
|