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