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