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