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