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