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