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