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