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