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