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