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