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