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