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