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