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