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