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