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