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