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