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