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