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