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