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