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