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