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