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