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