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