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