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