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