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