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