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