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