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