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