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