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