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