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