找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
/ \& h5 `% C; Y; a
  1. / RevApp.cpp : Defines the class behaviors for the application.& ~- G2 t9 y  m0 ^, W$ {
  2. //
    " }. ~5 b. s7 v& O4 ^! @' R

  3. ) Y1 G7 _; R- ~1 \2 M; N2 a2 @+ `
  4. #include "stdafx.h"+ x/ t/ d+ `( w! ?# S! T9 u

  5.   |5 G! B, O. j6 M; W# ~. Q9 B0 t
  6. //#define UNICODE
    / f* w  q0 t& U& ]4 Y
  7. //#include <gdiplus.h>" a, ]% t8 G! |* @
  8. //using namespace Gdiplus;
      b  J% n! X4 N1 z3 a2 }

  9. ( i. z1 E4 C$ f0 `7 j
  10. #include "RevApp.h") ^! k; o% w) ?$ g
  11. #include "RevAppDlg.h"' |( w* K3 Q  G2 q4 j) ]# j, N
  12. , ~5 E& O! A" t# Y) O' _. m
  13. #pragma warning(disable:4786)* l+ L; N9 @0 ~  G7 _9 p! a& V" e2 N7 P
  14. #include <map>
    / ~2 M% u7 G7 Q( ~8 U$ R8 x2 k
  15. #include <list>
    : q  r9 K+ w. S, j
  16. #include <direct.h>4 |& D. k. {9 g4 j1 Q

  17. " h$ }0 E+ j: ?, y4 L
  18. #ifdef _DEBUG
    & E% [, j9 S+ Y& \2 Z- O$ E. |
  19. #define new DEBUG_NEW2 b3 r. _: @* x8 D$ J
  20. #undef THIS_FILE9 N4 u* u6 y. K
  21. static char THIS_FILE[] = __FILE__;
    # C8 g2 x& l) `, }
  22. #endif' F$ n9 a! F* ?$ A" P( T, g3 k
  23. #include "SkinResDef.h"
    2 f7 z7 v5 a! J; l0 [
  24. #include "ChangeBG.h"
    " W# e, H1 T* l7 L' r# {+ j2 x
  25. #include "AFXINET.H"
    9 f! [+ I' Q- Z: T3 P! k/ g

  26. * T$ T/ e9 O: G3 P' H& \" g( }* }
  27. #define TRADITIONAL_CHINESE 0. _' r5 C1 M) T$ J
  28. #define SIMPLIFY_CHINESE 1
    4 h$ p9 F6 L0 ^, w! u9 Q' D! v1 E
  29. #define ENGLISH 20 a  \( @: u/ M; S  W
  30. int m_iLanguage = ENGLISH;
    1 E  G# m6 V/ ^2 H% B, u  S
  31. /////////////////////////////////////////////////////////////////////////////' _! W  |$ B; c; T
  32. // CRevAppApp
    ; k; [* _4 i3 V! v0 t8 @8 ?* u
  33. ! o/ V8 p9 b$ S  |- Q8 w: t) v
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)3 F" g- r) |- D8 v5 \2 E
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    0 P% |1 {3 W; Z6 v3 G, s4 @* }
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here." s3 B" N( C$ \
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    : _" I8 A9 d" a$ z; l- r' ~( l  ?
  38.         //}}AFX_MSG1 ]: \5 k& y, m, ]3 g
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)! m( O& N+ Q# t) u3 E
  40. END_MESSAGE_MAP()
    6 E, x3 s" W. b4 Y

  41. 9 y/ I; D( U+ R3 z, K3 m0 P
  42. /////////////////////////////////////////////////////////////////////////////
    9 c& a; D2 ?' s  L$ A9 P  v
  43. // CRevAppApp construction. {  B6 r4 q9 M1 D( O$ \& a
  44. ) z1 ]- L# a5 P+ R4 s
  45. CRevAppApp::CRevAppApp(): G* U2 {8 h! M+ w" |$ s- D
  46. {2 g6 u: S2 J+ F$ p- A% w- ]
  47.         // TODO: add construction code here,& T9 p0 b' ~3 P6 J* ]7 B2 }
  48.         // Place all significant initialization in InitInstance
    , _5 Q. m+ l9 j, ?, N- j
  49.   bDisplayIsBig5=FALSE;
    % T  E7 K# q* p
  50.   bRestartUpdater=FALSE;) \, j, v; U( L8 a3 Q6 n9 T( G2 i
  51.   bFinishUpdated=FALSE;/ F% v1 ~/ }, U  k* e
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    # R& p$ p7 b( m  Y: J! v
  53.   InitChangeDataBig52GBKS();" e8 G$ ], k0 K1 w- y2 e
  54.   InitChangeDataGBKS2Big5();1 ~% Q: r- M, j+ A
  55.         //, V0 @5 O3 w" Q, I3 m$ K  h( y
  56.         bClickRunExe = FALSE;
    1 a) Q6 M( {6 ?, m
  57.         //
    2 Z: D+ F! ~! r5 a
  58. }
    5 r: }  x+ T' |: @

  59.   f, r. }9 q! l: m: f0 U8 h/ q
  60. CRevAppApp::~CRevAppApp()
    ) d: H! h5 W; ?! i( Z
  61. {& g2 {6 R: L" ^
  62.         // TODO: add construction code here,
    " \; }5 g$ N3 p' \! f* i! h
  63.         // Place all significant initialization in InitInstance
    ( Y4 X# J  F9 _3 u
  64.   EndChangeData();
    ; f- y, D0 ^9 t1 H! H$ v& }; U
  65. }
    8 ?7 j+ B4 Z( Q9 M

  66. 8 N2 y8 G* h8 H; k
  67. /////////////////////////////////////////////////////////////////////////////7 [# i9 I9 f9 O* X# @; c& k
  68. // The one and only CRevAppApp object* u1 a2 [' V: z$ M- d7 u# p* U  r, W" L. P8 n

  69. + g3 D# g& v% S* W9 ^
  70. CRevAppApp theApp;1 x$ R/ T# Z3 g

  71. 0 T: ~) b7 ~; k
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    $ l  x/ e; l+ \8 f; N
  73. {
    ; V+ H4 E% h( o7 I' i% a" c
  74.   int iEOF=0;. o2 [& i. A9 ^
  75.   char szTempName[MAX_PATH];
    7 Z* }7 Z# G8 @; G
  76.   *szFileName=0;/ Q4 c6 z8 T. `
  77.   iEOF=fscanf(fp,"%s",szTempName);( m% ~5 E: @- {- K* ^- T
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')& W: ], j  w6 t1 J
  79.   {' F/ f& r$ S, ?- i
  80.     strcpy(szFileName,&szTempName[1]);
    . ~! g/ x) O, X3 t' v
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    % G) g/ |! J' j% a7 M6 k9 N% x- g
  82.     {% z2 m  b" D% \- c" ]& i. ?
  83.       iEOF=fscanf(fp,"%s",szTempName);
    % `+ [; J. V" e4 I, G
  84.       strcat(szFileName," ");
    4 y1 Z% h7 `0 s
  85.       strcat(szFileName,szTempName);
    " ~& w4 O2 w. L9 m$ S" Z$ i
  86.     }
    8 g9 [6 p) C( f' h9 ?0 T
  87.     if(strlen(szFileName)>=1)& o- M" G4 q4 J
  88.     {
    $ v* O/ b* W  F8 }6 b: @% G
  89.       szFileName[strlen(szFileName)-1]=0;) g" S7 m: H1 \8 U% m* @+ P
  90.     }
    & g0 k5 Z' s# S  h  ?
  91.   }8 ]: l. n1 a. {3 b& q
  92.   return szFileName;
    9 t( x7 b8 I! W6 ]
  93. }+ C% i' L0 \8 }9 ^+ b* J0 B
  94. 9 z! s+ x$ J8 J4 H& N7 o9 R
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile); Q( r- K, g. d2 O4 n* n' \
  96. {
    + i# c' T. G2 a8 s3 _
  97.   FILE *fp;3 L  N2 w5 p. O9 y7 U; o! s, w: O
  98.   char *key=NULL;
    + s/ c/ E& W- v4 p
  99.   char version[MAX_PATH];
    ; w2 C' {% ]1 d- M; K$ n
  100.   LPUPDATEFILE file,olds;3 e. m* y6 ?) J4 x1 h1 a8 o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;- w$ y; s# y% \; I" b

  102. ) Z% M  L( F# n: ^8 k5 {
  103.   UpdateList.clear();
      Z+ p( u  g& p) N0 z8 G  W% @
  104.   UpdateFile.clear();
    4 ?7 f2 I1 q; Y# I
  105.   if(GetFileAttributes(filename)==-1) return false;
    ) n$ Z. z5 [! R, p
  106.   if(!(fp=fopen(filename,"r"))) return false;% g! W( r% G. {, r# j; k& V0 g
  107.   fscanf(fp,"%s",version);
    0 H" i9 _' h1 r  z/ ~6 k' q. k7 k/ Q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . ?7 h/ s: A/ }! y9 r( ~$ O
  109.   while(fscanf(fp,"%s",version)!=EOF)
    : d" q0 R% J9 t, W& s- q
  110.   {
    ; l$ u4 p7 u2 H- g, w$ F. ?
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 Y& _/ M4 e3 G
  112.     fscanf(fp,"%s",file->path);# Z+ `7 t  q5 Y$ M5 R
  113.     ReadFileNames(fp,file->file);
    8 j, o  V% ^7 ~/ x/ Y! n; x
  114.     strcpy(file->full,".");
    0 Q8 q4 o# Z* n% S. S
  115.     strcat(file->full,file->path);0 R/ J4 b+ }4 r# l9 P
  116.     strcat(file->full,file->file);; N, Q1 x' H$ c: u( @2 A
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())6 }0 S, M+ X  U3 q8 }2 h: e
  118.     {
    ! ~: t# H' x+ y1 [- V
  119.       file->vers=(float)atof(version);
    1 y- [4 q- A4 d5 b
  120.       UpdateList.push_back(file->full);1 u8 q  b9 |& ?, g
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ' S+ Z5 N5 E+ o" y7 z( C5 }
  122.     }
    ; d( [" S) u" x2 @/ V# |, w5 ?
  123.     else% M5 G5 I, w. F8 L$ Y
  124.     {
    9 Q* z- D# G: S5 P, e
  125.       olds=(*p).second;/ h( x7 B3 y  t3 M
  126.       if(olds->vers<(float)atof(version)), g& W5 ~' w/ s) M( h- w
  127.       {
    ( b5 B& b% I" z* V- c- j3 w$ N
  128.         olds->vers=(float)atof(version);
    2 r) B8 c/ R0 v2 i
  129.       }5 ^9 M: L1 y0 ?. E( O& W+ V' a
  130.       free(file);7 `3 h' l2 p3 `, z
  131.     }
    4 z( V. g" v  i
  132.   }5 q; R& p0 m/ l- z+ z2 S9 P( D5 v
  133.   fclose(fp);) S) u6 f2 v+ \3 E
  134.   return true;
    # \- f+ ^4 C  M, M
  135. }! y1 M  M0 x: a" r" E

  136. ) B$ W0 l9 a; `) a
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)% J8 }: b" y3 s" Z8 Z8 D0 L7 a
  138. {4 ~" h/ }% D/ e8 e7 [
  139.   TCHAR  szFull[MAX_PATH];
    , r. L- N' W8 @, k' H6 y
  140.   TCHAR *token,*inter;1 @( j7 }) _6 D, p- e- ?  N
  141.   *szPath=0;
    ! |1 K- b" M  l) S
  142.   strcpy(szFull,szFullPath);" Q5 t/ m; L! N6 d
  143.   token=strtok(szFull,"\\/");9 Z* Z' K  E, p; v& R# |: B) W7 j6 A+ j
  144.   inter=token;4 U$ i. T9 l( \; `
  145.   while(token=strtok(NULL,"\\/"))
    2 B, p( d$ d" f, R$ D6 ]- [
  146.   {- A; ]' L. ?* C: n1 K* w& j# k
  147.     strcat(szPath,inter);. C' L0 r' d2 z
  148.     strcat(szPath,"\");5 @* U, s$ c3 g0 g0 ^: K0 |( p
  149.     inter=token;& d) p  |5 o$ X
  150.   }" Z7 A" A2 t5 B" R1 ~# f* F1 g
  151.   return strlen(szPath);/ F$ V2 J* E% @
  152. }
    ; E' `" _" }9 r0 B& ^6 Q/ q

  153. , ~6 k. @& C5 g1 s9 X
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)2 B7 e7 }1 D. R3 R3 R3 G# }/ j
  155. {# Y4 b9 H9 T) u% X, R2 R
  156.   DWORD attrib=GetFileAttributes(Target);8 {6 m) X2 d& L; @0 b; l( x& ^
  157.   if(attrib!=-1)
    , u+ W( b& E0 M+ [. I: \
  158.   {
    % ?  o5 `* U" O- M8 d+ o# g5 V& F2 Z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    . I5 J2 a" T' u% L
  160.     {
    ! C( P" Q  H. m
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);1 [3 S% m1 @6 r/ C* A4 ?: u
  162.       SetFileAttributes(Target,attrib);
    . m* `# b+ v" D( e' G: p
  163.     }$ K5 j* n6 _$ ]! H5 |+ H
  164.   }. U% H2 `( K7 s6 {5 ?
  165.   CopyFile(Source,Target,Erase);
    - W8 C; t; d& {* f8 ~( o
  166. }8 C5 [; `) h* H4 m1 A
  167. 7 L3 C  n/ j; ^0 m3 B
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)8 _$ n! e, z$ H* p/ W- U* @/ y$ W( |
  169. {
    / H5 S# L5 X! J1 P: ~  ~4 w
  170.      FILE *fp;
    1 a& Z. {" `1 Y
  171.      char  szBuffer[8192];2 f3 b; a0 w2 ^  h& H6 S
  172.   va_list  argptr;) Q( y! @* }; U* o1 W$ ?

  173. 3 @4 y7 K+ B( i! n+ O0 u
  174.         va_start(argptr,message);
    8 t3 E0 |9 u1 q
  175.         vsprintf(szBuffer,message,argptr);
    , I% K; V" A- A1 F3 y
  176.         va_end(argptr);
    ; C/ z- ^( A$ ]- ~% t5 C6 w
  177.   fp=fopen(FileName,"a");$ @9 ~, ~" |! A' y+ T" P
  178.   if(fp)
    0 @; P- s  E. _6 L
  179.   {
    / ?2 Q  _# v  u1 P4 b
  180.     fprintf(fp,szBuffer);
    # w6 L# a! [+ e
  181.     fclose(fp);
    ; v) ^. _* g9 p( C- H* |
  182.           _flushall();, J! v; X  T% l8 o0 Q9 a+ `. f
  183.   }/ |% @2 U$ I/ ^( t+ g
  184. }
    1 Z7 ~: m1 W2 T  ^. |
  185. & f3 O3 r. Y; W0 ~! K
  186. BOOL CRevAppApp::Fclearf(char *FileName), a( G3 j  M/ ?! ?5 S
  187. {
    $ S  s1 d4 t; |3 e5 V+ i0 [
  188.      FILE *fp;
    # o% _* }0 F# t! T1 z" K0 [( \$ N4 D
  189.     DWORD  attrib;
    % \  I- _( \" i& ]1 G% n
  190.   attrib=GetFileAttributes(FileName);/ k& l. J; q+ O& R+ A% V
  191.   if(attrib!=-1). n4 @6 m( T3 u4 L5 I
  192.   {
    7 v, R0 S! p  [' H
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    8 q# ?8 T  l" h" \" Y8 b
  194.     if(!SetFileAttributes(FileName,attrib))4 \+ n9 z7 ~, P' ?. m9 v
  195.     {
    " D+ v9 A9 _5 ?4 q" Z; V: g$ n
  196.       return FALSE;
    * @. |+ S9 q( u2 ~
  197.     }
    / b; y7 r" v+ O1 m! _3 [
  198.   }  V7 ~; W/ V8 k( G3 j
  199.   fp=fopen(FileName,"wb");- J1 a0 c. }, v% G1 O' d) N
  200.   if(fp)
    , E: Q2 ^5 J* w! \, V
  201.   {
    ) b  L6 G2 R! M. L9 Y9 b% n- o& g
  202.     fclose(fp);' Z% Q' ?, H% ^$ ]
  203.   }+ M# {- ]4 y! _5 U% m% v2 c
  204.   return TRUE;
    * x% W7 c7 A* F  g( Y0 _& R
  205. }
    2 z7 k0 g7 f8 u3 p! O( f" D

  206. ) ~6 b' {. P) x4 I
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    . c# H  l7 t- |# }9 h  M/ `
  208. {8 s- M; U7 R. T
  209.   char filename[MAX_PATH];, k, o. r' l" F0 @
  210.   LPUPDATEFILE file,olds;
    + h- ]: }  N5 S: E# x
  211.   std::map<int,CString>::iterator i;
    8 H4 E2 ^% L/ }1 F
  212.   std::map<CString,LPUPDATEFILE>::iterator p;+ U/ q' h0 a0 b: P, m( M" Q( Q
  213.   std::list<CString>::iterator l;
    " Y3 n& B) A. [$ E; X- k9 A2 e

  214. ) H8 n: A6 ~* s! [9 T
  215.   if(bFirstUpdate)+ E2 k# s5 j; y$ T6 f+ S
  216.   {. X; _+ M* T2 m' i' _! ]
  217.     dwCurrFile=0;
    $ D5 X2 p( E7 Z/ z1 F& ?
  218.     bFirstUpdate=FALSE;; @1 a! A* ]) G; u( j
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 m) a& z$ `! a4 u* Y; z5 B/ z
  220.     {
    1 v+ P, h) {4 h; x1 G) V/ S" Q( X: l
  221.       dwTotalFiles=UpdateLocal.size();
    . K. \! K' A9 ^  F. m' Y
  222.       dwDownLoaded=0;4 N7 d8 a6 x: E" y# F/ U
  223.       bSilentStep=FALSE;
    / G6 a0 j2 I4 s6 r8 i3 l" O
  224.       bCompressed=TRUE;
    0 y4 o, A) p' |9 R2 x
  225.       strExtLocal.Empty();6 p. {& \  V! d( H! Y
  226.       strFullName=(*i).second;
    ' o. @# ^9 P. Q% B
  227.       dwProgramState=AP_CONNECT;* w3 x- {1 ^- ?3 c
  228.       return TRUE;
    - [2 j5 q7 a/ F3 B4 `
  229.     }5 p& @8 @* t7 N8 k2 W
  230.   }
    5 f& ]$ K4 k* D" c/ J8 Z& O
  231.   else if(bRestartUpdater==FALSE)* c+ E" w. B$ e" x$ d9 \
  232.   {
    : \. }" n$ H& P7 Y# b
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    2 Z1 Q8 L% e3 s$ b1 q$ `: u
  234.     {, L1 V! ^- s8 P' B
  235.       file=(*p).second;" E5 K2 D; d$ t, j9 V" l  F5 ^
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    1 ]6 ^9 B) Q* H# O3 q
  237.       {* m( w' p& m+ i% [. l9 k
  238.         olds=(*p).second;
    - ?! i0 T5 s4 n) q# Z# B% Z0 x
  239.         olds->vers=file->vers;" u8 G5 X4 ~; \, I
  240.       }
    $ S  Y* Y8 q/ B( V. P
  241.       else
    - M: }* |/ P9 j# m/ Z
  242.       {* k/ u7 p  E( ?% X
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 y1 q; [; f7 c. z5 t/ D
  244.         memcpy(olds,file,sizeof(UPDATEFILE));4 H% q8 R$ o( }2 s
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    % K6 ]4 h6 z; B
  246.       }
    2 w. R4 g1 |/ ^* p; T% `3 e$ [
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");+ p+ a! H. ^; z( c
  248.       sprintf(filename,"(%s)",file->file);# e! N0 p( L/ z5 N
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 b+ b: ^: _$ B, l6 J
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    : ~3 q) d' u: t$ }% {
  251.     }6 ^  Z. l) P' U2 k3 e* j
  252.     dwCurrFile++;
    : A# e) L' C. K( |
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 v# N. F+ R1 e, ^, Y& K
  254.     {
    ' t& Q5 C5 l# @# w/ `- ?8 c+ Q! U* X
  255.       bSilentStep=FALSE;
    + k3 ~5 J: O) {7 r- G; ?6 _
  256.       bCompressed=TRUE;$ d4 f% o$ B  a0 \& U& N) E
  257.       strExtLocal.Empty();6 @0 \. k" Q5 {* Z- T2 @9 P6 H8 Y
  258.       strFullName=(*i).second;* g. |6 K2 a/ R( P& }, A% m
  259.       dwProgramState=AP_CONNECT;0 D) a4 K0 G" W+ b% ~# Z
  260.       return TRUE;
    ( P! F1 X6 U2 u+ W7 C  i+ n
  261.     }2 W9 j$ f6 B- V  w% t. p! Y
  262.     if(!bRestartUpdater)' |, g+ K$ K( M# m3 z% j; }
  263.     {8 M5 k0 a4 F9 c5 f, k4 I6 a2 l
  264.       int iCurrSize,iFileSize;5 k% O/ o/ {' N& u
  265.       iCurrSize=0;
    ; D% Y7 i- ^' I) T2 n; a
  266.       iFileSize=UpdateList2.size();3 ~; A, n! {  u9 f
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    + |7 g4 H+ `% n$ A* B
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");1 P' p/ F4 B. P; z( |
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");! A8 y% d& `: ?
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 b4 A$ ?7 i+ J7 u& N! k
  271.       Fclearf(".\\update.dat");
    0 T3 ~1 s8 f0 t. Z3 }
  272.       Fprintf(".\\update.dat","Bloodyf\n");3 m7 t& l. G2 i9 p0 _% ?# c- ^
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)$ u6 R2 M7 i) P% y6 m
  274.       {
    & N; Z, [$ e7 e  M/ k9 N" e; y' |
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())4 l: p& w& O! I: U! O# U5 j1 O. d
  276.         {( Z" D! Z9 X, A, I6 r% A
  277.           file=(*p).second;
    # e% O0 @5 S6 X6 ^
  278.           sprintf(filename,"(%s)",file->file);2 w# m" r  K9 y% v- k5 f
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 L# C; q( S9 u0 h
  280.           iCurrSize++;
    ' T% f2 e7 k! _4 U; d+ t1 }( ]
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));1 H0 z; W2 h/ C7 I+ V+ D( D8 x3 B
  282.         }7 S% t$ W4 h) ]9 L. y9 u, n) i
  283.       }
      _2 W6 `  V. ]/ ~: z4 I
  284.       unlink(".\\update.txt");
    ) y6 Q! M0 \- ^+ Q/ }* ~* S
  285.       unlink(".\\update.tmp");
    ' Y6 ?" {! R# e8 H$ l
  286.       Fclearf(".\\checkversion.dat");, W* j7 e% m% q4 @0 C- N6 c
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ! v% }% }* B7 R; M
  288.       if(UpdateLocal.size())  p* u) D7 A* k; S
  289.       {8 D2 J. a$ T7 X& S$ A
  290.         UpdateLocal.clear();
    8 S: ~" W3 l3 u6 o' F
  291.       }3 {' m7 e5 g' H' _% O# S$ h& h% M
  292.       if(UpdateFile3.size()), Z7 Y( z+ I# T! A+ Y, l0 |; S
  293.       {. o9 r2 H  l( u1 Q4 x+ I& w
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% h0 q1 e  b6 s5 T
  295.         {
    $ }) b5 u3 F6 C5 q
  296.           file=(*p).second;
    , a% |& ]8 y) M! v, e$ C" `. ?
  297.           free(file);9 j& t, \4 Z3 D" f
  298.         }+ s4 q9 L9 `. w  }: i0 v- r. Z2 z$ S
  299.         UpdateFile3.clear();+ M3 f$ n+ A; y* {7 V. n
  300.         UpdateList3.clear();
    3 U/ _, p8 B5 [+ }: c9 k0 H% |
  301.       }
    4 J. b* Q6 n: b/ f, F
  302.       if(UpdateFile2.size())" J) o! c9 z( m. z! H
  303.       {; U$ C( ?" M. j2 \2 j: ?
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / s6 ?" a7 v( Q6 y  t( j& ]
  305.         {
    9 g+ F; V: B. }1 n: u) _2 ^
  306.           file=(*p).second;! F2 v' H) M: Z# @* J4 e# z
  307.           free(file);
    . U& \) r: K+ @: j9 u
  308.         }# h3 U: |+ n2 F5 Q
  309.         UpdateFile2.clear();
    ) N! j& T6 M( X$ s3 h! [
  310.         UpdateList2.clear();
    ! y: v& \/ k1 t8 G6 p! C* F( c/ R
  311.       }
    5 E$ o, H& [- v9 y1 q
  312.       if(UpdateFile1.size())
    / J: X6 @5 U7 q8 B
  313.       {
      Q" @- g* B# `! I. M! v( b4 g
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- y" w' T2 P$ O/ Y# U3 u3 e
  315.         {$ [. B1 z$ i! E3 _
  316.           file=(*p).second;
    9 d/ J' S& F$ U" m1 c; E0 v' b
  317.           free(file);
    ) i* }3 d3 U2 I) U. d
  318.         }' v% p- x4 \+ T, x7 g* A9 {
  319.         UpdateFile1.clear();: O/ Z0 S2 y# d0 g# E
  320.         UpdateList1.clear();
    1 M0 |/ i1 z& ?( Q. e9 e) y. F/ L) t& c
  321.       }7 d7 L6 M' D9 C7 z. S7 W
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    . k$ A- S; f2 G( Q/ d3 C- r
  323.     }# D7 t0 i7 S; U, r- R8 ]
  324.   }4 z' x# p5 F6 A
  325.   return FALSE;
    ! X: ]- j' n: n0 _
  326. }' T& s& I% u" @* K6 m# P' L$ Z  [

  327. : K+ P9 ^' t9 |/ I) v
  328. void CRevAppApp::ClearAll(void)) C* Y5 P$ _( i4 D5 j$ k, V9 l
  329. {$ O9 l- g# ~; E9 }# Z0 \1 V
  330.   LPUPDATEFILE file;
    - J8 k7 n+ _% w$ Y. w: y" d% q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;. i" z7 x6 j  ^' X

  332. : g+ l# B# _2 \( ?5 o
  333.   if(UpdateLocal.size())
    % c2 A/ N1 h  s! ~+ L
  334.   {
    ' ], |, X$ F3 U& ?
  335.     UpdateLocal.clear();6 j; H& T. a. }3 a
  336.   }
    3 X5 H* J% u# i) L0 o# S3 E
  337.   if(UpdateFile3.size())+ [9 p9 n2 Z0 m/ O
  338.   {
    . }- o# {" i( ?. U  _( T
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * |9 ]' Y+ f4 D  t. ]! ~
  340.     {2 }0 _0 T- V4 o* T
  341.       file=(*p).second;
    : Y. Q+ w: l/ l5 O
  342.       free(file);
    , }7 K" R8 j: ~4 b. f- q3 A; d
  343.     }( c( g- ]$ x% |. p7 ]8 h
  344.     UpdateFile3.clear();
    0 G8 g) r1 @! s7 H  P% P
  345.     UpdateList3.clear();' R. i6 ]/ S8 {
  346.   }
    + k: K# H4 H7 s) C0 r9 M" F
  347.   if(UpdateFile2.size())- G/ v% R3 g) z
  348.   {; Y6 J1 t( M- Z7 G( S  A! o
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % |. V9 I2 @/ I6 O8 k7 o
  350.     {! N# P  M5 ^8 x! F& B
  351.       file=(*p).second;! J+ l! t. }$ r8 E
  352.       free(file);
    7 @& H  I$ W: |% W
  353.     }
    # T$ X. S3 _+ j+ Z7 W; Q' D* \: }
  354.     UpdateFile2.clear();
    ( e- I0 D- E7 ]4 I
  355.     UpdateList2.clear();3 z+ s; f. G3 n
  356.   }
    / F2 `5 |4 H- N7 Q. S5 ^) ^
  357.   if(UpdateFile1.size()). h- {+ Y  v  C2 j% d( O0 Q) l
  358.   {# |' D7 O/ [" o. ?' p- N
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; O5 I/ O1 ?8 K3 O) V2 G3 h
  360.     {/ x8 `9 g( I" T
  361.       file=(*p).second;
    3 _( i% |1 L/ D* |  ~4 u
  362.       free(file);
    4 W6 d$ A: |! X4 L# T3 L8 T+ Y* N$ U
  363.     }
    " [1 R  W2 Z/ k
  364.     UpdateFile1.clear();* i: Q5 w; N0 [  P. s) |
  365.     UpdateList1.clear();
    4 h+ j' q( a" m' Y7 y3 O, O
  366.   }/ x% Q1 j1 t$ y& z: `/ m9 Y$ K& v
  367. }  5 g# D" `, `9 q9 ~, }
  368.   , ^% S6 C9 ^0 K/ R/ x8 A
  369. BOOL CRevAppApp::CheckLocalVersion(void)1 W9 b" W( e3 d$ q0 c& V5 h9 U
  370. {2 z5 ?  ]* Z2 ]1 @
  371.   int c;, ?% N: R6 u7 `% J3 M
  372.   LPUPDATEFILE file1,file2;
    7 y6 V8 C5 q8 e8 v& [5 d, U8 S
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;" M3 x3 I/ D% O  H
  374.   std::list<CString>::iterator l;8 q& s* S6 p4 {4 f( x- K* m! z
  375. 5 J1 t: C4 t$ E2 K7 D0 P3 f8 X
  376.   UpdateLocal.clear();
    0 S4 b# a* [3 G4 c0 R7 B
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ( R+ W+ ]$ y9 \7 R2 F- Y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    & c! M! z7 n% D" I/ C' R  Q% Z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' V) m% I) H! J4 T: F: x
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);9 @7 [' @& H+ ]5 r! M( d
  381.   if(UpdateFile3.size())
    0 l9 q: r) d- f5 z; T# D: W. ]
  382.   {
    & h0 l+ g" v* T' l0 _% Y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    : R6 [2 @: H' D3 }' _2 s$ n* K+ e
  384.     {- m2 R# J1 c! K
  385.       file2=(LPUPDATEFILE)(*i).second;% F2 l) q& I8 x. J7 s( N
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) y5 l# I- ^! r3 b8 y$ p1 g
  387.       {7 c$ F) d2 ?! B2 I0 _7 E7 a3 D
  388.         file1=(LPUPDATEFILE)(*p).second;8 L3 ?- t1 x+ x) T/ w0 Z
  389.         file1->vers=file2->vers;
    3 M6 Z  m& }5 j; ~
  390.       }- C; ]8 I  l4 }2 h, W
  391.       else  C1 {9 b( |; I
  392.       {
    . H1 V# u* @8 |8 U5 w  U9 l6 E
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. p) @3 _0 X+ P- J
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));3 m3 q+ \( _! n6 C8 F0 f6 [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& ?3 ^! \/ m+ ]/ w+ \$ n% Z
  396.       }
    6 O% M3 S7 Z" @/ s& P: L( {- s
  397.     }% n4 @% N8 n8 M! A! w: `
  398.   }
    # {9 z5 m( d6 g2 _" ]0 k: s
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)3 O; B/ f2 j; x3 Q% m. d. u
  400.   {
    9 M9 h6 S# _9 d* t% g# f
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    $ v& G$ O/ u, Z- a
  402.     {
    ! w' a* c  z5 @$ Y" \( @  _2 R+ R+ V
  403.       file2=(LPUPDATEFILE)(*i).second;
    5 N4 \& G( R- z  F
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! y6 H8 |( L! I; K1 M" @* @/ l
  405.       {
    % j3 V. g; d$ P8 w! X! {6 N
  406.         file1=(LPUPDATEFILE)(*p).second;
    8 w8 t% ?! D) z
  407.         if(file1->vers!=file2->vers)) ~% _4 ]( ~# m" O
  408.         {2 ^. |2 ^" @* ?# b
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# `  }7 ?; J6 y  l& q4 y& e
  410.           c++;' \! u( b! W7 @
  411.         }
    ! C$ l+ Q8 _0 C7 x$ s9 O  m
  412.       }1 e% Q) ^6 }. T2 C) q0 U
  413.       else8 @! }; K: d  a5 \1 g- C
  414.       {
    % M) n. e9 L1 p0 E
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. }0 D$ Q  J' I8 n% u0 r
  416.         c++;, _- q% ~' D2 ~
  417.       }
    : W( w5 c2 F' W
  418.     }
      m, D% {7 `: y
  419.   }) i% \0 ^& Q  o3 }- ~2 s4 u0 {7 q
  420.   unlink(".\\DownLoad\\update.txt");
    ) L, ?3 N% P# s
  421.   if(UpdateLocal.size()) return TRUE;
    / t8 W8 Z. V: a$ l
  422.   else                   return FALSE;1 e" z( u: Z4 v8 Q8 U7 h& s
  423. }
    : M" b3 M2 H, S

  424. " r$ e# L5 U, R7 N3 p% }
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"" {' E( D) d0 b( ~7 t9 h
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    1 E! C" U1 l: h- z) M

  427. 1 E' x/ R8 }6 L& k! z! p

  428. : {3 Y6 c# d) W$ |6 G2 g

  429. ; N5 u; r& D9 D) D
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    " }" ~( Z" C  A+ o( X
  431. {. i! T: g% X1 C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;' L8 O/ m! D# t1 i& h. @% ^; C( A
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 I" X0 k* J! a) v' A! Y( ^
  434.   {
    ! v  r1 o0 I" K: d" ]  H
  435.     char szLanguage[50];. R: d; T. t  ]$ y; ]& ^! l' o5 h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( `/ a; C: E1 M" V# }$ B
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
      B( e( u+ f+ |
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & `# o& Z) E- c( u: k" U
  439.     else                                   m_iLanguage=ENGLISH;4 E" @+ I+ o) a" g
  440.     char szRegister[100];, m$ `* ?2 W7 _& l
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& F4 F0 V5 e. c- w1 b
  442.     strRegsName=szRegister;) ?( K/ v* _5 A
  443.     char szPatchURL[100];4 W8 k2 x! F- i% L3 ~8 j
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 |% b5 R; g: D- k* p
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# c' {. e7 B9 [
  446.   }
    0 D3 o% [* v" L  a* Z/ y' ^
  447.   else
    . d# e7 e. P- z9 p% q
  448.   {
    " R7 h* t* U- k' \; x) {$ X
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + G0 y" T7 {- l
  450.     strRegsName=DEFAULT_REG_URL;9 s) h/ s' Q' @  j
  451.   }! c. {% H' {; R( u* F
  452.   if(GetFileAttributes("hosts.ini")!=-1); Z; L: Z( R1 k% W/ T; ]! l
  453.   {
    ) R+ S+ |- _) I5 s/ n7 _& z- ^
  454.     char szIP[50];) Y7 x% E7 r' _: l$ D2 M, n7 e0 [
  455.     char szDIR[300];
    " p6 ~: k7 X" x% d; s' A1 f
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))- p" ?" _( |7 Q7 H& E2 W" o
  457.     {# T+ n9 E+ G9 Q+ Y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");( V5 `7 Z$ R0 h$ r. H2 f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");9 f! i( y1 h- q0 ^6 u2 f
  460.       strHostName=szIP;4 @5 F/ j8 v4 g# g5 j5 Q
  461.       strHostPath.Format("/%s",szDIR);" A& l& @2 }' V) D1 N
  462.     }
    ( Q# a& ~' z+ O1 O/ L5 t0 n& W
  463.     else7 Y# g: q5 P& j" N
  464.     {
    7 I' _; Q5 j" W  H  W% Z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)+ t0 u) [: U# C1 s; h3 o! f0 v
  466.       {* Q8 M% Y4 C6 b4 b8 ^! Z* N! @
  467.         char szLanguage[50];
    6 I4 {% k7 f! B# s  u
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* v. ?; J1 H0 x& O" n
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* U2 ]7 H7 N1 @1 \1 s! i0 T
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# x5 f: q8 Z, P
  471.         else                                   m_iLanguage=ENGLISH;; g0 e7 ?6 e5 U$ A1 R, T* B
  472.         char szRegister[100];
    " T" D6 l% i8 S- @! |% j3 ]8 K& }7 _
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' y& E/ ]! V3 e* q8 c1 v: s
  474.         strRegsName=szRegister;
    , L' ^5 M: B5 I# ~3 c
  475.         char szPatchURL[100];
    : m: m- X% v& V0 k
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " A3 M" H: A- L) k! G6 C
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & S$ R/ _1 T' |+ l( B
  478.       }
    3 N9 n+ L' p8 Z* W7 x! b6 _
  479.       else1 }5 K$ n! W' \4 p* J. [
  480.       {- {5 n1 h/ `+ O5 i% O
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / |2 f6 Q; e- _/ @- Y# H
  482.         strRegsName=DEFAULT_REG_URL;6 `! @0 R% M0 W/ V5 ^
  483.       }
    5 D. u" c' B3 y) W5 I( H. l; [- C
  484.     }: W" }( Q( V! O
  485.   }
    3 _$ q6 g( @" ]' i/ V
  486.   return true;8 ^. x7 t) {  T/ Z0 w/ h' ]0 d' z
  487. }
    ' \0 ^5 @3 e0 R
  488. # d- K. w/ J$ W3 X0 G* k4 k# i- M
  489. #include ".\ZLib\unzip.h"0 `% }5 A2 k/ X7 q% E
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    2 e' _! V  }1 r6 Z9 v0 f
  491. /////////////////////////////////////////////////////////////////////////////+ N4 \; w* U0 K, \! u
  492. // CRevAppApp initialization3 f7 U+ J' V$ Y  N! C
  493. ' @# s" `; n' j+ W8 N" c6 l8 C
  494. BOOL CRevAppApp::InitInstance(): p- z/ S7 @& I* ~
  495. {
    - S5 O) x) D0 Y2 {
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , N# [/ f0 n4 J; \& ~* F3 J
  497. ) Q- d5 ^0 C3 \, g3 n% b, b3 P
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    & A; q) y( C% A6 s2 V" d
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    7 s4 I( `5 H3 V1 U0 z" s3 \3 E* Q1 K
  500.   {2 i3 Q; f4 T9 L% V. Z- f. o
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");! L+ G" F( H. i& @3 X; b5 ]2 j
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 D% K0 I- u! q" ~% B
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))/ V! d7 `2 `. c
  504.     {
    ; I# u1 A5 E! @& L6 T, n
  505.       strcpy(szPath,szPathTarget);
    6 g/ y1 Z9 O5 D3 F
  506.       SetCurrentDirectory(szPath);
    ! C1 b  \) h9 A4 d/ l1 L
  507.     }! J( E9 B; q5 v5 k9 R5 r
  508.   }' P5 w& u# z& H+ o# A
  509. #ifdef _DEBUG$ R& |; A9 i6 m2 r" ]
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& |  }5 \' i, ]2 q6 d' _' G
  511. #else
    " ^+ e& B6 k* Y, Y/ H' w
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% l3 p# E! A6 w9 H
  513. #endif4 |& S. V2 M0 B; B! T
  514.   {
    ' L9 O& S8 P8 d, M
  515.     char tempFileName[MAX_PATH];6 y4 A9 d  G2 }+ r9 W- I& d8 r
  516.     strcpy(tempFileName,szPathSource);0 R. ]* W7 S7 x: t
  517.     tempFileName[strlen(szPathSource)-12]=0;
    * s* D4 c& G/ H0 j) L8 f: C6 q$ M
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ' ~, L6 i- n5 ^% z: h+ ^) l1 }
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);. @  y9 W$ {8 P2 I
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);8 K$ K& S- H) ]! |( r
  521.     return TRUE;
    " k: E& W8 a2 Q; F3 F4 }
  522.   }
    ( G+ D+ s5 G" R: P- K: h, [  G+ V
  523.   // Nuke 0118: Delete run.exe
    ) j( R, z' x5 B+ X
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ; G* y$ h1 n% Q7 }) ~7 _
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    6 q: h" Q: L! Z$ ?
  526.   if(!ReadCfgFile("Config.ini"))
    $ t2 a$ J' V3 p
  527.   {  [- y" u  k: I+ Q5 N$ R! s
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 S5 G6 j4 X9 D( ~1 J
  529.     return TRUE;6 Z8 {. x& l4 c! D% g, t! j
  530.   }
    & D8 z. u# Y2 `; j2 F# B
  531.   HANDLE mutex;! w' X( z, T5 B# u# P
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ' o$ N' D! m. C$ {+ R
  533.   {
    ( m- l- T: B# f% t  N& f
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    8 a8 r; i: O% V
  535.     {, S( e) F2 P# ?) f" P6 R
  536.       CloseHandle(mutex);
    1 R2 b7 F, d6 f* b- [7 o0 }
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    . F9 u) q: p$ S) p
  538.       return TRUE;2 f6 p9 d5 Q$ J! O, G0 L' i
  539.     }' ?; T3 Z& P. d
  540.   }  
    ) F# h2 v3 f# E5 v8 V: m
  541.   CloseHandle(mutex);, }. H3 d/ V# t. I! ?- z% H% `
  542. $ h. T) c" }9 U5 w
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    , M8 g9 x8 h) k
  544. 8 C6 Y: m% \8 O3 L2 n) L
  545.         AfxEnableControlContainer();$ j# C2 {: D0 a5 v+ s6 n
  546. ; ~* V* a2 C$ B
  547.   bCanUpdate=FALSE;
      M. ]9 i3 k+ ^8 Q/ x6 {  V$ e
  548.   dwStartUpSteps=1;
    5 G0 t; m8 L' ?4 E( z  S
  549.   dwProgramState=AP_NOTHING;; m8 t$ }' @6 S) F! E

  550. 8 Z) Q2 ]& m1 F5 T
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);1 }9 B' E7 g6 `2 i
  552. ; L6 ^* X/ s2 Z: U* G3 \
  553.         // Standard initialization
    8 P1 N( {7 c: ]" k; L
  554.         // If you are not using these features and wish to reduce the size
    - |) |, ^9 G+ B7 t/ ~3 _1 z7 Y
  555.         //  of your final executable, you should remove from the following( Q+ y3 W7 b3 y5 r
  556.         //  the specific initialization routines you do not need., b, g- j1 N; o! x  a( y
  557. $ N9 j9 G8 t6 [% r0 m* |6 z' L
  558. #ifdef _AFXDLL
    ! ~) D6 }9 S. ~) f' Q
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    - A! s0 J+ s0 x6 A5 g
  560. #else- n; ~* V( `3 K' v7 l
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ; L! }1 l# q# R6 o; y: p" q
  562. #endif
    ; e, P' H+ r) s' {1 O) j4 z
  563.   `$ {7 d: u) G% t2 E9 w% C  G
  564.   dlg=new CRevAppDlg;4 G) _, F% L8 S+ i% ?, c
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    5 ?: `9 z1 l5 g' R
  566.   dlg->ShowWindow(SW_SHOWNORMAL);/ W7 W6 e6 \! w9 S" U! C
  567.   m_pMainWnd=dlg;( a& w' w4 n- b) ^

  568. & s/ i: y- V; g: c. A, _
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);; f: g, Q: m( T. {1 m# E" t

  570. : I5 W" p: a% Z- X' [- b/ w
  571. //  GdiplusStartupInput gdiplusStartupInput;: O1 W+ u& {1 A$ ]' P" X
  572. //  ULONG_PTR gdiplusToken;& v9 @5 R+ b8 n& i9 A7 T
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 K+ \% a5 B, w5 v% N/ ]8 R

  574. $ b7 l# R. m- J, g4 h
  575. //        CRevAppDlg dlg;
    + m# n' d9 ?5 d! l$ r- L1 ?$ P/ L, @4 F
  576. //        int nResponse = dlg.DoModal();
    8 y- h7 `# T2 O
  577. //        if (nResponse == IDOK)
      A0 h$ e' Q* N; D* K
  578. //        {
    8 r7 \8 ~" q5 y- E# c
  579. //                // TODO: Place code here to handle when the dialog is
    ! |# B& _5 o* E6 I5 k, l
  580. //                //  dismissed with OK
    % a: P/ ~3 X' D/ P, @% \
  581. //        }/ h. t6 [% r5 Y+ L6 Z
  582. //        else if (nResponse == IDCANCEL)
    * K! I/ L: R6 U
  583. //        {9 s) i0 w7 h8 U, L. \0 X
  584. //                // TODO: Place code here to handle when the dialog is
    7 T  q, S3 k; ~9 h# q$ ~1 b
  585. //                //  dismissed with Cancel* u. s5 Z9 `" j7 f( b3 W6 J) V
  586. //        }
    4 ?5 A  a% ~" |5 q# n

  587. 0 ~3 }5 t: F% n$ T+ N
  588.         // Since the dialog has been closed, return FALSE so that we exit the# u0 f) Y  J5 w( I6 R: Q
  589.         //  application, rather than start the application's message pump.
    ( }+ [2 Q" n5 M8 a, s, K+ Q* F
  590.         return TRUE;
    # s. Y- P7 E$ z
  591. }
    ) ?. E2 X; x$ c7 t; _& T
  592. ! @. W' c/ h) ^7 a  S
  593. char *CRevAppApp::strtok3(char *pSource,char *token); E8 R; p# F. k! p! T4 e- `" p
  594. {) r$ Q/ z# G! r) C% _/ P
  595.   int i;
    $ ]4 f+ y2 p. ~; @* H% L; Y
  596.   char *szRet;
    ; g0 t' y! o$ e* R+ a. Q7 @

  597. 0 l- H& q. `, P8 g9 t" g
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ! O0 f1 s  Y( L+ R/ K
  599.   if(sztoken)- r9 b' i( f) h. h6 g2 r
  600.   {
    ' O8 y1 I3 I7 [9 _# v' J) o2 Q
  601.     szRet=&sztoken[itoken];
    " G* N* x: v8 j$ V+ r6 t
  602.     while(sztoken[itoken])8 z. @/ n7 u( K) B& x% R1 V. S
  603.     {0 ]0 {( L0 W! }5 e7 W. v
  604.       for(i=0;i<(int)strlen(token);i++)
    0 }: s5 b6 p7 e  q
  605.       {  Q% a; t4 J) s* L2 n. ]
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])# Z+ y; F# K; J2 d/ S7 f6 @, W/ u0 q
  607.         {
    , y9 {0 L- @5 y  z+ @. ~
  608.           sztoken[itoken++]=0;* a7 J" v4 S! u" D
  609.           sztoken[itoken++]=0;
    ; O) ?& ~5 S8 O3 ~) c
  610.           return szRet;% f( @- z# ]" }( K
  611.         }' R6 [/ t% X' y6 s$ ?0 h
  612.       }: D+ P  ?, r% s& [0 e3 |0 y* C4 t
  613.       itoken++;) [4 t6 T, R3 c/ B' f/ P
  614.     }
    3 N' |# }; ^8 ^, L3 R, F* N5 q
  615.   }
    7 \9 d9 Y5 m! L
  616.   return NULL;
    7 r9 n" I- S5 C0 d2 }, w( w
  617. }
    5 `: o" n# F2 ^8 C
  618. 2 s  H2 @- B, F
  619. void ProcessProc(long Total,long Current)
    ; }4 S( m2 d4 I. n  H6 D
  620. {+ m- C+ Y3 u, q3 [! Z! W. R$ L
  621.         MSG msg;
    $ M% B# A% _6 y
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);! |. w4 {" o2 I2 w0 x) a+ h
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));  f# b1 z0 @. ^- U7 @; U9 \
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    7 M9 R  l# [9 C& J# o
  625.         {
    # l, Y1 Q6 Y( p7 g1 p7 W8 Z. \4 d
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ; W) B% N- e3 k- k
  627.                 {
    9 B$ g% G- K) \
  628.                         return;
    5 E& P! p( D+ t! [* C
  629.                 }4 G. A/ K' B* l, V! K
  630.                 TranslateMessage(&msg);
    & e& i' c2 K( x) _
  631.                 DispatchMessage(&msg);
    ! a0 r8 H, _2 W0 J6 Y* y
  632.         }        2 i* E/ ]8 {: y4 E- `& X7 n
  633. }
    ) G" D9 z; O/ L/ I6 x
  634. 7 k, f' L- n) K  U; P2 g
  635. BOOL bFirstChar=TRUE;# V* ]& O6 U: f: V; A

  636. " z' v1 E* ~2 i1 ]7 w
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    9 `4 D' t0 E2 U4 C2 p- u, _
  638. {! C6 e4 Q0 H6 I3 ]# V1 i
  639.         // TODO: Add your specialized code here and/or call the base class
    6 ]% {: \: j7 p5 l
  640.   switch(dwProgramState)& I/ Y9 t2 I3 |! I5 `: d# S5 P
  641.   {0 H* z9 F/ b0 F& f5 [1 Q9 B$ b. R) c
  642.   case AP_NOTHING:- ]/ s+ @6 R* `( ^# P( b
  643.     switch(dwStartUpSteps)
    $ R- _7 ]; E9 t8 r9 o9 j, F7 H
  644.     {
    1 A$ U5 B7 O. e! Q; M0 p
  645.     case 1:( ?4 v# q1 P! Z* L- d6 k
  646.       {) g; C3 J4 e$ F2 U) v6 N# F
  647.         int i;
    ) `& D$ {( N5 y8 m% W
  648.         CDC *pCDC=dlg->GetDC();
    ; \' M4 {$ g  m& w# @0 L5 E) n2 C
  649.         HDC hdcwnd=pCDC->m_hDC;
    ( c, u  A2 f& p) j& K
  650. //        Graphics graphics(hdcwnd);, V& h: O1 p8 Y- Q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");+ f, g( L+ l" T+ i( ~+ _& N
  652. //        INT iWidth=bitmap.GetWidth();& J: j3 z* T! U3 j. S
  653. //        INT iHeight=bitmap.GetHeight();" t) F$ }# k1 Y, _" m7 f3 H
  654. //        Color color,colorTemp;
    ' H% m1 j8 F0 d5 D
  655. //        for(INT iRow=0;iRow<iHeight;iRow++): F# B! ?7 x, p0 v' M! Q
  656. //        {
    1 r# p8 [  v6 Z6 o, @; y) t
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)) m( V4 P9 h4 E& O; m' ]
  658. //          {# `% b% ~1 o4 Q$ `
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    7 X0 B2 {3 B* g% k0 o
  660. //            colorTemp.SetValue(color.MakeARGB(
    : i- Q& y! c( a# G
  661. //              (BYTE)(255*iColumn/iWidth),
    ' S5 \% K" \3 M' F7 |/ F$ l
  662. //              color.GetRed(),
    & l, g3 b- Q) r' `& w9 M
  663. //              color.GetGreen(),2 f! J. @4 g9 v# w+ W) a# _) `5 [
  664. //              color.GetBlue()));( g; [3 b/ _: r
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);  c! f- i+ z0 N& ^4 ^; }& f- o& a
  666. //          }5 O* _5 s/ e; b2 [/ G
  667. //        }" K$ k9 [; T" a' \
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);( v' V( U4 }; `2 h9 Z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - W2 ]( s6 B+ B. g
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");8 Q2 Y+ C2 ]3 e8 I- n# m; r
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    * X6 `  \% }( I5 _. e5 l( w
  672.         for(i=0;i<240;i+=8)
    4 B7 R/ E2 m; D
  673.         {
    $ }- p) y4 u" V% z4 X# k+ Q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 O, B; ]; i+ X
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ) u4 r8 V9 G6 o9 V
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' M. ]+ P3 v* Y% \
  677.           Sleep(33);) S& U, Q1 N# o7 O
  678.         }
    / |0 f- O3 E+ }& d7 Q! @- K0 b4 s2 H
  679.         Sleep(1000);
    # \$ a2 H$ y& ?
  680.         for(i=240;i>0;i-=8)* Q3 C% B" t6 V$ h
  681.         {
    7 J3 V1 U! Q# H
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & `! O. p7 ]' a% K- x* G8 {+ L
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 w7 Z! D- }7 K0 ?
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 O! |3 a" e  H# O
  685.           Sleep(33);
    & v1 C) [( x& @$ B: Q* j6 J5 h
  686.         }1 R  W9 t3 v1 ^4 L9 U) W# t
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);2 g, M1 q) D+ G8 b8 s% |+ z
  688.         dlg->ReleaseDC(pCDC);
    % Y  W3 B. s8 `3 @9 W9 [
  689.         DeleteDC(hdctar);' z; B2 @0 A  q& W
  690.         DeleteDC(hdcsrc);
    ( z/ k6 r1 V/ r6 }) c4 {, A
  691.         DeleteDC(hdcorg);0 h% G2 p" Z, `! n; @
  692.       }- `4 A- ^" f/ l) w( \4 ]* W$ o
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 a! m% ~& ?  U) t6 _7 h1 b
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");6 h: H% U$ F; u* C' v
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");: \" |$ T1 G8 P7 E% v$ T- h, n) V. @  h: B/ |
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    5 I9 A% j* O% _- A0 @) V! q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ [4 E3 m, L6 e7 u: j. y
  698.       if(!Dn.Connected())  h! Z: B: ~% Q3 f  e
  699.       {# z4 T. P5 y9 D- `) A
  700.         dwTotalFiles=1;" C; R. q, I- a/ O
  701.         dwDownLoaded=0;5 J' r- p( d4 R2 u/ o. i
  702.         bSilentStep=TRUE;& @8 N8 {+ T  [* |% `2 n
  703.         bCompressed=FALSE;
    1 x1 ?: {4 H3 r5 M
  704.         strExtLocal.Empty();2 S" w/ I7 o0 \/ T2 p' T" W3 Z
  705.         strFullName="readme.txt";
    7 e" U  E  y. G( D0 W1 i' H- {
  706.         dwProgramState=AP_CONNECT;; x) R: z' B9 E
  707.       }
    2 g/ O% z. Z2 S9 _
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    " q7 v+ _; P2 v1 Z
  709.       dwStartUpSteps=2;4 T3 t) G5 M, B
  710.       break;
    8 Y7 x8 j+ e7 B0 P4 d2 [
  711.     case 2:9 a6 m$ A$ B7 M$ U. j! A
  712.       {! y5 H8 h5 e; N/ W
  713.         int iEOF;! C" {" F* A+ c; ~
  714.         FILE *fp;7 y# `# Y, g* B, T! S& Q3 ]6 j8 N0 o
  715.         char szString[512];% Q* d7 v7 y4 \3 q4 u
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");8 F  {  g4 j5 F: T6 T9 O* b7 b* P. D
  717.         if(fp)
    ' w1 V& t. {. g
  718.         {4 C$ h0 x( o5 n4 i/ L
  719.           do0 y$ ]& o/ J3 x2 q/ B
  720.           {: X. e! `, M$ B% D6 u* q
  721.             iEOF=fscanf(fp,"%s",szString);6 u+ E" _7 F' U" H& w
  722.             if(strlen(szString)): Z8 H( X6 T! @" F( T7 S
  723.             {
    / ^. J& o; I/ v9 K' G" p7 [; ?% \' ~
  724.               if(bFirstChar)$ ~6 z! D, `2 K/ {/ ]
  725.               {
    # V8 N3 a* c: c
  726.                 bFirstChar=FALSE;3 j# Q$ `; I  p0 S3 S: ?
  727.                 bConnectIsBig5=FALSE;
    $ b. {; m: X- W% e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! b1 `& o# e5 p1 l$ `2 V9 S
  729.               }! o5 E9 b9 M2 c, E7 U1 f
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    + o0 M- }( @, u1 v
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));, r* s! T1 p/ C! _: @; t# Z- v
  732.               dlg->m_ListText.AddString(szString);
    3 t# g' {2 i$ m" F% U
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; P& q" @/ F3 v) k5 E
  734.               *szString=0;
    & m2 e8 Q( f: Y/ a8 r5 o2 p
  735.             }
    5 F( w7 b! l' v! L+ W+ g$ X# M& t
  736.           } while(iEOF!=EOF);
    7 M- L1 o) w# j# S. s& t9 U# r: r
  737.           fclose(fp);
    2 }7 D5 v- S+ K
  738.           unlink(".\\DownLoad\\readme.txt");* ?# Y4 `; S: _
  739.           dwStartUpSteps=3;
    8 J+ {9 u# s* n# K1 V  g9 H
  740.         }
    ! m/ t" g; I4 C' c$ r1 f
  741.       }" w: q. B5 u* ^: Y9 s4 Q$ S$ k
  742.       break;2 i7 [, r; @: R  |9 i0 p
  743.     case 3:: ]$ D; `6 f+ T
  744.       if(!Dn.Connected())
    ' ~; {. b" ?; s& \2 E5 H3 l$ ~- C
  745.       {1 Y" z  Y/ c. N' \
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);: W# B- p0 n  i  D6 D" p8 s
  747.         dwTotalFiles=1;! G. ?/ n0 v# l" c7 y) g$ J4 }+ w
  748.         dwDownLoaded=0;4 f+ r" f% e! a1 {* k' P2 H1 f5 P
  749.         bSilentStep=TRUE;1 |3 U8 Y" d" ~7 x. j! G
  750.         bCompressed=FALSE;
    ; ?( z# N9 u# x2 j& M
  751.         strExtLocal.Empty();8 s! ]3 T  W- h! i3 Z+ V( b
  752.         strFullName="checkversion.txt";
    8 k4 a8 r: `. c, }- ~+ x! g( w( e) o
  753.         dwProgramState=AP_CONNECT;
    : }6 s: W4 w. T( @2 t
  754.       }' n" b2 _# V* o: F
  755.       dwStartUpSteps=4;  T% i- x* w0 A* X
  756.       break;& y( O" u1 k% G9 _# S9 g
  757.     case 4:
    3 V/ D0 U4 ~- x  J* X! y
  758.       {! I2 B  a, Y) ^+ o& i
  759.         FILE *fp;
    0 _% n# V3 U' X) T3 m; T8 V: K4 R
  760.         char szString1[128];! V9 X% E# w" z9 C* ?
  761.         char szString2[128];
    - |& [1 k% t+ r7 r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");& t; T# s: J4 w: b7 H7 R/ W$ F
  763.         if(fp)9 y" w! B' H0 d4 k4 _
  764.         {8 C% X2 c9 ^3 G- E' Y+ c
  765.           fscanf(fp,"%s",szString1);
    ; C% k5 t5 [4 H# L! G$ r$ W9 t
  766.           fclose(fp);
    7 b& O+ E3 n7 @9 [8 e% ?
  767.           fCheckVersion=atof(szString1);
    ; P5 T4 W/ x- U1 R7 g. y+ R( ?
  768.           fp=fopen(".\\checkversion.dat","r");
    ) ]* H% D8 b# u: N; o5 X
  769.           if(fp)
    3 u2 ~# s( Y" n" P8 C
  770.           {
    - i; Z4 @1 m, C
  771.             fscanf(fp,"%s",szString2);3 ?8 I/ g8 `9 ]6 _) i! }6 H! s
  772.             fclose(fp);
    8 g3 s, ?, v1 }9 A5 v' ]
  773.             if(atof(szString1)!=atof(szString2))
    3 P: ^3 B$ B) R$ A, O
  774.             {
    5 {+ }8 I! y% [7 y+ U' T
  775.               if(!Dn.Connected())
    ; D% B) h% J1 C0 V! B
  776.               {
    4 H0 C( O+ {, }8 W
  777.                 bFirstUpdate=TRUE;1 F; h- `$ b# |0 t" ]. s
  778.                 dwTotalFiles=1;
    3 H  c3 ^+ I# L7 C4 G. s$ k
  779.                 dwDownLoaded=0;% M9 J; E7 F% O+ Z! N; ?% I, q0 s
  780.                 bSilentStep=FALSE;9 W4 ?- f) h+ x* p! k" E( W
  781.                 bCompressed=TRUE;
    ' ?: f- d" `. d
  782.                 strExtLocal=".\\DownLoad\";. [0 K0 T# @; e( C+ _
  783.                 strFullName="update.txt";3 n/ Z* O. Q2 a6 p6 ?$ e
  784.                 dwProgramState=AP_CONNECT;
    ( l1 W2 I8 m- A: x- ~5 K* Z% E
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ D; d0 b) v  p4 D2 C, {
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");$ ]# Z( ]/ M4 U! u3 r$ R- L, J
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");! x4 V2 X: s; a' G" m
  788. 7 T* `; y# }- j( H# r3 A$ D+ U; u
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, l/ W2 b! |5 X# x' H' J) d
  790.                 unlink(".\\DownLoad\\checkversion.txt");. k2 {% g( B- t. Z3 M4 o8 k6 {6 |
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    . k$ _" ~; L. ~6 X2 ?+ ~
  792.                 {
    8 R3 o1 U/ V( K" n" C$ C2 [
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    & u0 |4 g( T5 h5 Z, {" q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    # w8 g! G6 J, @! n
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");! [: S- k. M3 B8 B
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * C3 g# x" R9 B: P! W  a
  797. 4 x) b" g, Q( ?( Z( j# Z
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");) u/ i& X! e" V# v$ m) S; V
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , A8 f+ l4 k  y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");/ W' o3 r2 `9 T9 r
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 F  e0 D! [# n" U
  802.                 }
    4 B. `- h$ J* _+ ^6 m& _) }# S
  803.                 dwStartUpSteps=5;
    $ x, l1 i; x8 ?
  804.               }# }+ `: N. P/ J9 j% d9 \/ [
  805.             }* |$ l% Y' W$ V3 P& z( w
  806.             else
    3 J7 H+ \. y  E- {
  807.             {! {' {) K, C( N; ~# H4 e* I
  808.               unlink(".\\DownLoad\\checkversion.txt");
    * Z$ B- b2 W  n  W1 e* p
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    . a3 H# d  @+ T2 L  I' _- \, M
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 m1 K: q  M, y7 A( a5 k
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    # }! x9 F2 }! n
  812. 3 K3 o  _' b+ w" s" U1 n' q/ \
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 m# |7 V& J* p9 T
  814.               dwStartUpSteps=99;
    1 W9 r$ d- n) |, r% e- w6 K- l
  815.               bFinishUpdated=TRUE;% Z; |! p' Q- A1 Q' q: V
  816.               bCanUpdate=TRUE;
    * b$ V5 `  M: H) W- p
  817.             }
    7 F7 G4 y! f) s
  818.           }
    . [9 S; j- K9 \
  819.           else$ G6 o1 q) Q9 g6 k! T% H
  820.           {8 ]; h& f8 t  {7 e: f
  821.             if(!Dn.Connected())+ L: H3 U( Q( K  w  g0 S, `
  822.             {
    ( L! r; e. G; ]
  823.               bFirstUpdate=TRUE;8 Z7 `  N& r0 P; H
  824.               dwTotalFiles=1;: c) X, R  W( Z2 P, U
  825.               dwDownLoaded=0;  I: u5 Q+ v3 w4 T# o: p
  826.               bSilentStep=FALSE;
    ! a2 ]0 p3 @+ P- p( ?5 X" f
  827.               bCompressed=TRUE;; [, \# @. m' C8 U) r8 p& l
  828.               strExtLocal=".\\DownLoad\";& A7 F8 v  Z$ b  ^1 Q$ ]% A; `
  829.               strFullName="update.txt";
    " B; Z$ I7 C9 f
  830.               dwProgramState=AP_CONNECT;
      [+ E2 D- F7 u9 C6 q4 D
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 F- q& [) x9 @+ W$ Y
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");& {* o) g/ G- r! F: l4 l8 x( K
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - L. p" C! T( n( `; t( w6 f
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, D# P" z0 W2 a6 c* y
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ! k) ]* |- ?( g) @
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)/ p. b9 N( \; p" q2 \$ L
  837.               {7 W/ ~9 t/ W9 \" h" z" i
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");+ O0 K! w+ f+ S% K: C7 v1 Q6 h
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");6 g) t4 Q1 f, F
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    - Z7 m* n4 q& k8 |6 I
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# m+ F# i" I; |; W& e9 f; b
  842.                
    2 W- t5 Y7 J1 k! W  x/ {2 L0 }
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ R) R; d) j0 U! ]% X
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # P1 \8 e3 G" w9 q
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    7 A4 n5 ^; A8 B
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% A1 }$ {8 F/ I! Y
  847.               }
    ) y: q8 w6 u- M# M  b7 G
  848.               dwStartUpSteps=5;# A8 x$ ^2 q, T1 p# N; s
  849.             }: F9 e, Z2 Z5 {, O8 ]+ R
  850.           }8 [# B* c/ h$ _( ^' \
  851.         }
    . Z9 p+ ], x  B: S( p" I  e# l1 `
  852.         else* e  b! k. {9 a' Z: {' G( J  }6 d
  853.         {
    / A8 n$ @% O6 F
  854.           dwStartUpSteps=3;! l* `/ v$ ]+ }' m
  855.         }
    0 Q' r% t, z: F* v4 S; [$ X0 |0 O8 Y
  856.       }$ r2 y2 P) o  s- e. f9 |
  857.       break;3 u" U* w3 U+ W8 d/ V
  858.     case 5:
    ( o) H5 E# n% K3 U( A, M
  859.       {
    # a* z" U: X  y1 u4 l+ |% G
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ) r# |, t, Y7 C: c
  861.         {
    3 }/ y  U6 \* K! B6 a3 P! S
  862.           int opt_overwrite=1;
    8 S& d3 m! m9 f2 Y3 I
  863.           int opt_do_extract_withoutpath=0;. b) P+ S; u; ?# N3 L( Z1 Q
  864.           unzFile uf=NULL;9 ?$ ?% m$ D- ~
  865. 7 \+ U  x2 W" e. v# A$ z9 _
  866.           uf=unzOpen("Wsa.zip");, N2 O& i4 h$ ~- {$ u
  867.           if(uf)" J9 t& \3 _9 Q+ a. U
  868.           {- n! |7 K/ j  p8 _/ R' H4 b6 t
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 \3 n' J' r5 e$ r9 O
  870.             unzClose(uf);' x3 s0 P0 v  \5 H( Y/ h
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    2 u: O9 `7 V( p0 X" {6 ?) M
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ( X& L4 {# D/ y* o: h4 D9 ^4 e
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");/ U# }, t; C# P, d4 R) W& s
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 j/ [# R# l. T
  875.           }
    * o/ w" c3 J* \: J
  876.           DeleteFile("Wsa.zip" );1 Q& Q' w* F% F9 ^4 o) O0 m; I, [
  877.         }1 U+ k* j5 ]. ?* X* z
  878. " v( d. n; R  e! L& X) b. i
  879.         if(CheckLocalVersion())
    . D% h9 g1 c# D* o; r0 j6 ^% T
  880.         {! B, j  ?& B4 y. F2 ]
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");, @: I8 G4 u" L" u* g6 n$ d
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ; P+ {* P0 a  C  @# V+ U* r
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");. C- U3 T+ @, S$ ^- r: M
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 j* F0 ]+ _* U. P9 b/ Z
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    . J! f) o5 _" ^3 I
  886.           dwStartUpSteps=99;1 F5 G( h6 h1 |# X! R# `
  887.         }
    . g- z: ]. M  {* J9 F, B
  888.         else: q2 n, V- P" X0 S
  889.         {
    ) v$ Z  w! m* z5 J$ u; z+ i
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' @" G9 ]+ V% ?8 d; t
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 a- L) S2 A/ s% B1 \" _
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 A+ G1 y/ n* B8 G0 ?& W- d

  893. & ?& q6 Y  ^7 r
  894.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& |6 ]# R% D) Z9 c: g+ f1 S8 N
  895.           dwStartUpSteps=99;
    9 ^: a0 j' ?8 I
  896.           bFinishUpdated=TRUE;1 h, k  E5 q: s% v& V& {1 X! ~
  897.         }
    5 c9 C( z9 ^$ x2 r
  898.         bCanUpdate=TRUE;
    ; I( G* Q7 i" e
  899.       }2 K- m; @5 O* x/ {6 ^0 m  I3 ~2 @
  900.       break;; N0 E& k& r: B& R
  901.     case 6:
    ( i4 u. D" D  M8 c9 I0 Y/ w
  902.       {
    2 b# O. c9 w1 Z
  903.         if(!UpdateLocalVersion())6 Z$ S/ s2 B/ `& J% r
  904.         {
    ( V# n0 Y) N7 ?
  905.           if(bRestartUpdater)
    ! X0 s; x" Y2 d
  906.           {( I1 S! d$ {! j' c. C% @7 k
  907.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);+ [" B" x9 W( Z+ c9 F& A
  908.             else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
    7 _, k9 a7 g1 p8 s: v
  909.             else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);! A+ w: J8 k6 h& _8 n9 N9 e
  910.             DestroyWindow(m_pMainWnd->GetSafeHwnd());
    ( z. ^7 A' @2 t6 |& Q3 B, ?
  911.             dwStartUpSteps=99;
    4 r" }. [$ w: E1 `% N
  912.           }
    8 H/ Z, W1 Z$ z. g( I
  913.           else" M" c: A7 S/ M3 f. z
  914.           {; g0 o# G3 |. f8 z% z' V( l
  915.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈竒ЧΘ.....");. G5 ]  H/ W- z4 v$ [: B" i% }
  916.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新的资料已经完成.....");
    . }. s4 d6 H  J, g: Q
  917.             else                                                      dlg->m_ListText.AddString("updated file ok.....");
    : z1 S9 h' L' \* C2 h
  918.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ S  ~* }8 e3 K4 z7 X' u- @
  919.             SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,0,0);
    7 @: ?# F. g7 _* I0 i
  920.             dwStartUpSteps=7;9 z* r" c: ?! `! M
  921.             bFinishUpdated=TRUE;& M" V0 [. F( q4 L) ~
  922.           }
    ' z: E$ F* \; q: I4 ~1 v* P
  923.         }
    7 Z2 N' d3 Y) W3 v' m9 p; l
  924.         else
    4 z1 I) v/ p2 e" R" ?2 N- Y1 V
  925.         {7 W. p1 Y1 u! c, l7 T4 Y
  926.           if(bRestartUpdater)
    5 f+ M5 o8 S" i9 w" |
  927.           {/ ]0 n: v6 Q/ p4 Z+ ~/ S- S4 l6 n
  928.                                                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);5 b$ s" R3 _4 b- F) F) W9 Q
  929.                                                 else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
    3 ?5 f: Y1 W$ j
  930.                                                 else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);
    3 F9 ^5 a0 a* G4 G5 _" ~  p. L
  931.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());! Q4 E+ r, c' m! U) C
  932.             dwStartUpSteps=99;( J) U. I. s: k* n9 ~0 X& @5 q
  933.           }2 a! O+ s# @( Q. S
  934.         }
    4 f; d6 `4 a1 |" q% x! s9 i2 r( T
  935.       }
    1 ~( H& N$ N! ?3 r& \" V% X
  936.       break;
    $ _  t0 V3 V0 ?" m8 {% o7 _
  937.     case 7:
    ) I  _: x, K+ A& ?0 L: M/ a
  938.       {1 \) s" O% a  `5 ]6 j3 \
  939.         char szExecuteFile[14]="Bf_Client.exe";0 g7 o+ T2 Q. y7 s; d. n& c- n' F
  940.         if(GetFileAttributes("Run.exe")!=-1) strcpy(szExecuteFile,"Run.exe");, A6 M/ O5 {: \
  941.         if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);' r9 G+ x  n2 g9 X+ d# E
  942.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated2",NULL,SW_SHOW);: o3 `9 P5 z4 Y  T7 k) [9 C
  943.         else                                   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);; {2 C5 \7 p. ^
  944.         DestroyWindow(m_pMainWnd->GetSafeHwnd());2 R( a3 |  z$ a- [/ h" b  B; S/ \
  945.         dwStartUpSteps=99;7 E" i! D2 s7 p5 E
  946.       }4 B4 k+ ?: f6 ?3 b2 E2 e$ _7 |
  947.       break;5 y& [' r: [5 ]1 S  U
  948.                 //add by cece( V) d' W  C# [8 M2 O( m# y* {. U
  949.                 case 8:$ G5 {0 k6 j8 P
  950.                         {
    - x/ R4 j5 k2 @0 K5 N. C7 L
  951.                                 if(!Dn.Connected())
    4 k% g/ m% b) a" {. K. C) F" k! l
  952.                                 {
    : E+ z" Q* @- v' [  A
  953.                                         dwTotalFiles=1;) B! g. j3 K9 W( _
  954.                                         dwDownLoaded=0;
    - B- Z) A; j6 p5 p2 g
  955.                                         bSilentStep=TRUE;
    " Y3 A: k: J4 C; c
  956.                                         bCompressed=TRUE;/ f7 a; n+ c0 {3 N0 A2 X8 f
  957.                                         strExtLocal.Empty();5 E, V+ H3 B$ Q- F
  958.                                         strFullName="download/CRCTable.txt";- e: i  v8 c9 \+ p
  959.                                         dwProgramState=AP_CONNECT;
    ) v, P) B  K/ ~1 V) j
  960.                                 }
    2 R8 g! c7 a4 |) A* ?2 c5 y! m
  961.                                 //
    . k0 E/ B) z: N0 B, N  X
  962.                                 dwStartUpSteps = 9;
    2 q; }  v6 j1 ]  G2 k1 ]  H7 ]5 n
  963.                         }, @4 A3 l9 \/ F1 o1 v9 H5 [9 ?
  964.                         break;
    ' \/ i% M" \6 ~! S+ [; j# f% T( j
  965.                 case 9:
    $ v0 e9 x# m# H- Q
  966.                         {
    1 I; j1 L3 n# u, t. }' k/ T
  967.                                 if(!Dn.Connected())! R+ q8 S0 h# E# O9 Y
  968.                                 {- |: n8 ~3 t. `( J* |
  969.                                         dwTotalFiles=1;' c8 y/ ^( B6 `9 ]
  970.                                         dwDownLoaded=0;
    % |/ J* g: o& N! |, F& x
  971.                                         bSilentStep=TRUE;% K! r$ ^% p9 q# q1 U" b
  972.                                         bCompressed=TRUE;
    $ T( ^! E# [5 U, i8 d( o
  973.                                         strExtLocal.Empty();
    1 b' l1 e3 I: j6 K
  974.                                         strFullName="Run.exe";
    ; m# ?' ?0 \( ?0 D/ H9 e' M
  975.                                         dwProgramState=AP_CONNECT;
    9 A2 N, Z6 Y; M3 g5 C0 y/ @1 A
  976.                                 }
    ' E2 {2 m( Z. ^8 V" k
  977.                                 //& R  @/ W" D8 m: i5 B0 j! f) K1 m
  978.                                 dwStartUpSteps = 10;
    ' W, g$ ^9 J8 ^+ e6 N
  979.                         }
    . d+ F" F% c2 D& u+ e4 w
  980.                         break;3 v3 m5 U4 C* s  a# w+ W% N* Y% l
  981.                 case 10:. @+ |; L+ b7 B5 p4 ]
  982.                         {* O" k, O3 b( L+ e- V
  983.                                 if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);& r( E, d4 o  K" l3 b: S8 J4 ~( b
  984.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open","Run.exe","updated2",NULL,SW_SHOW);# M  R4 D# |9 ?. g/ F1 E! d# E% Y
  985.         else                                   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);+ G" T( U( L, I5 }; z7 [
  986.                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    9 k/ i4 U( c# r. V! o
  987.                                 theApp.bClickRunExe = FALSE;6 U$ g  y# x2 [- a
  988.         dwStartUpSteps = 99;! y; T  ~! ?+ b; Q. V( R4 @/ }7 }
  989.                                 //
    " i! \2 p% R5 B9 x
  990.                         }
    8 L# Z0 D/ u4 {7 {3 X
  991.                         break;
    3 t# z! O; @/ r- r( R# ]
  992.                 //
    " B- a; u4 y) U8 S
  993.     }
    . G% G  W) r$ X6 `
  994.     break;+ _' r' k; B$ |6 N5 |
  995.   case AP_CONNECT:
    * b" _' x- o1 @1 x' L: v
  996.           if(Dn.InitNWSSock(4096,4096))
    : y7 F6 W& w- X7 o/ e
  997.     {
    , @% N7 l# A- O' x( D
  998.       char szPathName[MAX_PATH];% t! r$ v( p8 p% `
  999.       dwLastSize=0;! F3 _6 q/ r6 W
  1000.       GetPathFromFullPath(szPathName,(char*)(LPCTSTR)strFullName);
    ! f. m+ }$ s3 n
  1001.       strFilePath=strExtLocal+szPathName;) ?7 K. ?+ U6 h/ h
  1002.       strFileName=strFullName.Right(strFullName.GetLength()-strlen(szPathName));
    ( F) P" M2 Y4 q7 w7 U& F
  1003.       dwResumeNums=0;
      a$ _4 h9 \3 s* s7 s. R8 [" P: m
  1004.       CString strTempName;
    ( \# I, N/ `! @6 b) T5 ?% y
  1005.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);5 O$ v7 R$ c: ?6 ], ]  ]) L
  1006.       CString strCountData;. n0 ]3 e5 f/ ]5 f% f
  1007.       strCountData.Format("%d/%d",dwDownLoaded+1,dwTotalFiles);
    3 ?, ~0 y  v9 L: r
  1008.       dlg->m_FileNumber.SetWindowText(strCountData);' \$ W6 k' B) t. S  S" q) z
  1009.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));) O, b% j- T  u" Y
  1010.       if(bCompressed), j* ^7 \7 |4 x! E
  1011.       {+ C, q4 c8 Q0 }- ^& L# B* P& n
  1012.         strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);6 B$ G2 n- p. r- k7 W% W# T
  1013.       }& x' P: z' `0 R4 e* t
  1014.       else( r- J& z. ?, l3 Y/ S
  1015.       {4 P1 P4 i7 f% n' ~3 y+ O( A  h
  1016.         strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);, I! o" k4 G. {% H  ]5 O
  1017.       }4 Z. s3 s! O7 t  e6 m
  1018.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);8 x  l2 s9 M7 _5 h$ z$ X  K
  1019.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());
    ' D+ k1 v7 `1 i/ D8 ~
  1020.       LastTickCount=GetTickCount();8 z/ ]/ @. V! D; t
  1021.       dwProgramState=AP_SENDING;
    # Z  C" t5 A) W
  1022.     }. A! c* Z& o( z* y8 M
  1023.     else, }& _7 G3 J( E/ Q9 n9 G' A' F6 Q
  1024.     {1 b! ^4 C0 s6 h
  1025.       Dn.QuitNWSSock();
    4 C7 B/ G3 E9 z3 E$ m: Z' s- r
  1026.       dwProgramState=AP_NOTHING;
    , k+ q% c& h% J) K+ g
  1027.     }  V$ R  e* o$ x9 c, g( k5 r
  1028.     break;
    6 V% E' X8 U; _: ~8 G' }8 _
  1029.   case AP_RESUMED:
    ; w$ |( e' ?1 U
  1030.           if(Dn.InitNWSSock(4096,4096))9 u- I, f2 U+ v& p) g- q3 n' l8 r
  1031.     {! W7 R2 [  b$ N+ e: A. \5 O
  1032.       dwResumeNums++;/ a) `0 |7 h( `9 i! `: b
  1033.       CString strTempName;
    & V* \" z, L- `+ R  p
  1034.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);
    ! o& G! ?# S( ~
  1035.       CString strCountData;
    & W9 x  `3 ~4 f3 X
  1036.       strCountData.Format("%d/%d",dwDownLoaded,dwTotalFiles);: I% q/ m0 |7 X" {; }" g
  1037.       dlg->m_FileNumber.SetWindowText(strCountData);
    ' u: S7 N$ d2 r. |- I
  1038.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));6 G6 s- g0 e. y  _
  1039.       if(bCompressed)6 h8 M! J$ E: G; D4 k( l
  1040.       {
    $ @* a% P8 A6 q2 w. S* Q( X
  1041.         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);" S3 Q0 b, c9 p7 f1 @8 E+ R
  1042.       }! F( i: F$ ]3 L# d+ X
  1043.       else
    ! K) Y4 U! _4 I
  1044.       {9 ?- [% t$ w6 ~0 v9 z/ b1 u/ x
  1045.         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);0 ^# g' x3 @5 S' F
  1046.       }
    ! B  A7 c. B2 p( }2 D3 x
  1047.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);
    ' j* I6 g. b: k$ ]! k0 Y: e
  1048.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());3 Q5 T$ p  w6 [4 j
  1049.       LastTickCount=GetTickCount();8 {7 X8 l5 L5 }
  1050.       dwProgramState=AP_SENDING;
    # k# c/ [5 C+ k
  1051.     }
    & v3 Y! _: ^8 F9 f+ H* i
  1052.     else9 g/ Z: D1 I! |0 G3 Y1 e! V- x* z
  1053.     {, j( g5 H" j! ?  Z
  1054.       Dn.QuitNWSSock();
    + o; f  N7 }% k
  1055.       dwProgramState=AP_NOTHING;
    $ Y+ y2 b, h  }
  1056.     }/ d! [2 H1 [4 d9 X, H
  1057.     break;
    : V" C1 ?+ q$ p
  1058.   case AP_SENDING:8 m2 z" g! ^" O% g; i/ [9 a3 b
  1059.     {! `' h* g+ L( F( I, t
  1060.       DWORD RecvLen,SendLen;% I5 o7 b. A  @1 K. @5 d
  1061.       if(Dn.NetworkLoop(RecvLen,SendLen))
    3 m5 r& j0 D& ~
  1062.       {! e: e5 ^- ^) _- S
  1063.         LastTickCount=GetTickCount();
    # |0 W7 y' @* _8 m2 J
  1064.         if(SendLen)) _) t* h9 |6 M! R- ^" D3 K- l
  1065.         {
    . x3 F4 u4 U" O
  1066.           bReadHeaders=FALSE;
    + Z/ D' d* x: n/ `5 b5 B: Z0 w
  1067.           dwProgramState=AP_RECEIVE;
    & p. [! E% i6 n- s
  1068.         }
    ( C1 N5 z1 t4 e5 M) X8 o
  1069.       }4 @( K1 h5 z+ v& F% v8 U
  1070.       else
    $ P  Q9 }/ R" s% }0 Y+ o: p8 y
  1071.       {
      j# l& W6 r# P0 T  L9 v! h
  1072.         if(GetTickCount()-LastTickCount>3000)2 u1 @8 `$ S( R# p( @0 L& }* u
  1073.         {3 ?) Z. p6 D5 M" m6 S
  1074.           Dn.QuitNWSSock();
    - E6 i- [! y* {8 z
  1075.           dwProgramState=AP_CONNECT;
    % p: K7 p* B: I9 s
  1076.                                         //
    " ]$ m) [: v5 W# a6 I
  1077.                                         static DWORD s_dwCount = 0;5 ^" u# P& b3 P2 E: e' {3 R& P$ L
  1078.                                         s_dwCount++;
    2 \2 o& t+ I6 A
  1079.                                         if( s_dwCount > 10 )3 K; J. Q1 z- w* H+ K; T
  1080.                                         {7 G4 k% `* ^3 |* k: f) m# X2 L* E9 B
  1081.                                                 if(m_iLanguage==TRADITIONAL_CHINESE)   MessageBox(GetActiveWindow(),"硈钡穝狝竟ア毖叫浪琩眤呼蹈砞竚   ","Error",MB_OK|MB_ICONERROR);, f1 s" j# ?& c8 P% V1 d4 s) W
  1082.                                                 else if(m_iLanguage==SIMPLIFY_CHINESE) MessageBox(GetActiveWindow(),"连接更新伺服器失败,请检查您的网络设置   ","Error",MB_OK|MB_ICONERROR);3 M5 B, b. y# `
  1083.                                                 else                                   MessageBox(GetActiveWindow(),"Connected Error, Please Check Your Network Status   ","Error",MB_OK|MB_ICONERROR);
    1 U+ F) p+ p5 l; W1 i4 ^
  1084.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());1 z: g& C8 g7 M- y% w4 J5 p
  1085.                                         }. f) D, ~. O: s$ H- V7 `$ V
  1086.         }8 _3 K4 l& a9 J- R% k& B! l: R
  1087.       }
    ' `6 P0 d  J% t* b+ |& X
  1088.     }4 q' q2 [& S" M
  1089.     break;; Z6 o9 A1 K  k+ ^/ |9 ?* F
  1090.   case AP_RECEIVE:( F5 u" y) s- \
  1091.     {
    ' U* M- b6 X9 A. m9 A9 J
  1092.       int Count;) ^5 F! [+ M, F  F% O( o  `* s
  1093.       DWORD RecvLen,SendLen;
    : [8 q" n8 q2 [* D5 h) V& L  O
  1094.       if(Dn.NetworkLoop(RecvLen,SendLen))3 `' o1 i3 p% j6 b: D/ Y
  1095.       {! S1 R1 [7 O6 D! |
  1096.         LastTickCount=GetTickCount();: s" d( v9 z; k" `( j) S  M
  1097.         if(RecvLen)9 m: K7 |/ v/ f6 u& _
  1098.         {$ a& Q) ~1 z8 m! ~( ~6 H
  1099.           if(!bReadHeaders)
    , Z8 p7 y+ N- q2 @; z1 _4 u) p1 o5 t& z
  1100.           {1 N$ I& m6 h% q9 @: E% f
  1101.             char *token=strtok3(Dn.szRecvBuff,"\r\n");9 J* K5 @! V" C3 y
  1102.             if(token)% L  h" |( s! }) v
  1103.             {+ K. P/ E( M# \, r7 Z1 g2 \
  1104.               dwFileSize=0;  \2 g! l6 F- c9 H. Z$ w1 }+ Y! y
  1105.               for(int i=0;i<(int)strlen(token)-3;i++)
    : [/ @6 e2 g1 U& Y, T6 v
  1106.               {
    ' y0 @* n/ z# b7 w
  1107.                 if(!strnicmp(&token[i],"206",3))
    5 m" i) Q: s" @" G' |6 X
  1108.                 {# P! L  H5 P+ |
  1109.                   if(!bSilentStep)( v  x7 p1 g; E0 }; t& i, c
  1110.                   {
    ' E) j) K3 h5 b- T) R0 R, s
  1111.                     CString strTempName;" Z8 W! w. b7 I0 H7 u
  1112.                     strTempName.Format("%s.....resuming(%d)",strFileName,dwResumeNums);
    ( A1 A( \( l7 `! z% f% P, K" G, S
  1113.                     if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    : J. X5 B, V( E+ [3 |1 v+ K
  1114.                     dlg->m_ListText.AddString(strTempName);, W2 o: q1 [: v! ~7 L' X8 c
  1115.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, q7 E2 \: N. [
  1116.                   }
    + A3 C7 o3 D! d# e
  1117.                   bReadHeaders=TRUE;
    * m% C6 B/ j: H# S
  1118.                   while(token=strtok3(NULL,"\r\n"))/ }) w# C( S" J) s' ~
  1119.                   {
    ' D- k* g* V9 f  K
  1120.                     if(!strlen(token)&&dwFileSize)6 j1 |$ h3 I2 M$ b4 a& Z/ X; V+ X$ J
  1121.                     {9 g* `* Q* z. G1 ~! V
  1122.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;
    4 H: T* B; V- [' M" v
  1123.                       if((int)Dn.dwRecvLeft>0); @: T0 `0 T1 o5 t5 Q. F" X
  1124.                       {
    5 q5 f2 T, |+ Q/ G! i
  1125.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
    $ _; A$ O- Q4 q: L
  1126.                         {
    / X( P( K' B4 M* O' W- q2 i
  1127.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
      b! ^+ m" @9 V
  1128.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    5 _: x3 X  e9 F' y7 K
  1129.                         }
    $ F. E  h$ T8 B. q" v8 I
  1130.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);
    " f- V- p8 j9 f3 J$ L
  1131.                         dwCurrSize+=Dn.dwRecvLeft;
      [# n2 z: x; t6 U# r& O9 r
  1132.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;$ i/ L, q* d& s8 w, t- m/ l
  1133.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    & j- j. W0 J( }- i
  1134.                       }( c$ a4 r8 g! o# N
  1135.                       break;
    3 d* P  I' {+ M
  1136.                     }! F, I5 R! R! X5 j4 ?
  1137.                     else
    3 f) Z' _% ]  f0 c: C
  1138.                     {. Y' }& g; j4 F$ ?/ A
  1139.                       if(!strnicmp(token,"Content-Length",14))
    ( G* e& F& D3 K: Q; g
  1140.                       {
    5 H4 x0 a5 ^* K' N- z4 B
  1141.                         if(!Dn.szCompBuff)
    5 w1 b, m" J9 V% w# f3 Z
  1142.                         {
    . G/ L8 H# ~1 F+ Y: X
  1143.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;
    * ^! {1 B& C" v. r6 w% T, h
  1144.                           Dn.szCompBuff=(LPSTR)malloc(dwFileSize);
    " Q, p/ L! q5 P  Z
  1145.                         }' S  ]1 f4 O" B
  1146.                         else if(dwFileSize!=dwLastSize)
    3 p. Y* ]5 g" s
  1147.                         {
    " F3 w5 \) F$ H: \; D. w  p" f' J8 Z
  1148.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;
    ) x8 O7 y1 h, M4 P$ l2 a
  1149.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);8 |  S, H9 w8 {6 p
  1150.                         }( x6 c8 m$ m3 j5 F/ R6 Q9 m
  1151.                       }) c3 N3 W! |5 w/ u
  1152.                     }
    # q* o3 k  ^$ o, D" e8 Y) R' `
  1153.                   }2 T  D1 Z8 B; n/ h$ {
  1154.                   break;+ k" x* P4 @+ j+ G# d( `# `  ?
  1155.                 }
      t: G0 ^7 S  S4 L
  1156.                 if(!strnicmp(&token[i],"200",3))
    7 d; a( F; |7 i( _' Y% \
  1157.                 {
    3 O* r# a. m8 D9 Q  S0 _. v$ L
  1158.                   if(!bSilentStep)" n/ n+ Y& r" f# Z! t! E. |
  1159.                   {
    $ [. U5 F7 J( C6 \! N" U1 U
  1160.                     dlg->m_ListText.AddString(strFileName+".....downloading");+ Z* ~2 W* q, n+ |  J
  1161.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . M' l, I1 {( L$ L
  1162.                   }
    3 |, f* f' D* h6 J: W$ J( h$ o5 W3 O
  1163.                   dwCurrSize=0;
    4 s$ x8 U9 {6 s
  1164.                   bReadHeaders=TRUE;* X& O/ I, ]9 e, h( F) r+ x
  1165.                   while(token=strtok3(NULL,"\r\n"))9 d: {" i, Z2 R7 h3 k0 d
  1166.                   {) [! k: L* d0 l4 H! u  ?2 Q" K/ j
  1167.                     if(!strlen(token)&&dwFileSize)) q7 x8 K+ M* Z: J0 Q: o
  1168.                     {9 t" y9 V2 E. G
  1169.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;  [4 c/ k3 a' l8 D
  1170.                       if((int)Dn.dwRecvLeft>0)
    6 o% Q3 r- u- y4 ^+ ?1 X) H/ u1 D
  1171.                       {6 k  q- D9 A4 u$ @. V
  1172.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
    ! F5 {/ x1 m# y# ^/ ^  J5 j2 K
  1173.                         {
    : i1 U9 d7 G* e$ n3 k8 `2 U4 V
  1174.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
    8 a! E( N. N7 q& h$ V
  1175.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    * i6 R" R; `$ U
  1176.                         }7 D5 Y7 S" r, R
  1177.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);
    5 F6 }0 G* R5 f8 j' {) @+ X
  1178.                         dwCurrSize+=Dn.dwRecvLeft;
    " V8 X/ w2 w$ S, l" V' @% M+ U
  1179.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;9 {& r7 ?, J2 E
  1180.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;" |5 [$ c! i) _9 o9 j! V
  1181.                       }7 B5 p% E+ P# {$ X' {
  1182.                       break;/ Q# U: g$ F; T8 S# S7 P
  1183.                     }, R$ w2 f, W& t5 G4 E: {$ |; H
  1184.                     else% f; P' M1 a. i' q
  1185.                     {
    $ g, z- A! D. R3 ^& A
  1186.                       if(!strnicmp(token,"Content-Length",14))
    $ h1 q* R& q" J2 f
  1187.                       {6 n& w) D) s$ Z, P
  1188.                         if(Dn.szCompBuff) { free(Dn.szCompBuff); Dn.szCompBuff=NULL; }
    ' V" ]) S. p6 |. h5 B0 `
  1189.                         dwLastSize=dwFileSize=atoi(&token[16]);
    5 D; R( C+ ~3 C+ V6 m1 R
  1190.                         Dn.szCompBuff=(LPSTR)malloc(dwFileSize);5 C' F; C" O8 R" |! L* `* n
  1191.                       }
    , J' Y2 ^  k$ L8 C; L7 Z
  1192.                     }' k& Y) p7 D" a8 K/ H5 h
  1193.                   }
    ! ~& l3 R# S. S. `) I
  1194.                   break;5 i2 v4 u0 m$ P4 f0 @6 C, Y
  1195.                 }1 A/ U, w, e+ |1 K3 ?% a% e
  1196.               }/ j2 l4 _1 Q' T, P
  1197.               if(!bReadHeaders||!dwFileSize)
    * F* e! Y0 Y2 S7 @
  1198.               {- C9 L- H, P6 y
  1199.                 // Wrong Header or Reading File Size Error6 U# Q2 ?, M2 z6 v6 v( W6 x( ]1 @
  1200.                 Dn.QuitNWSSock();/ R+ l) y$ |- J8 N  N7 M: ]5 f9 Q
  1201.                 dwProgramState=AP_NOTHING;
    ; v& o: T0 d8 _5 n1 A6 U, {. n
  1202.                 CString strTempName;
    6 f! G: ]( V9 {( J1 }- c% {/ R
  1203.                 strTempName.Format("Navigate %s File Error !",strFullName);" V" k( y3 o! H
  1204.                 MessageBox(GetActiveWindow(),strTempName,"Error",MB_OK|MB_ICONERROR);
    & d; U, P9 P7 Y6 h4 o
  1205.                 bRestartUpdater=TRUE;
    - Q0 ?' v! z. H9 E
  1206.               }3 R1 j! {! x+ J* o+ P
  1207.             }
    5 ~. p9 C: U) q% s& S' @3 [4 A' ?
  1208.             else% ?8 D6 `1 |$ _5 Z" e3 A0 ]
  1209.             {, E+ {8 T9 H: Q" k
  1210.               // Have No Header9 G3 \- o7 q2 E  L/ E: W
  1211.               Dn.QuitNWSSock();% R& _, x2 m/ `' O
  1212.               dwProgramState=AP_CONNECT;
    9 ]0 ~  K  {- H* }. A9 N0 ?" g
  1213.             }* |" J  L! `( ]+ S! K
  1214.           }- l# |4 e% T4 @3 h4 ~
  1215.           else
    ' x' u( A" g* n: Z
  1216.           {' g5 j2 t1 ~' _& o# V8 ]0 {
  1217.             // Reading File From Web
    / r) {  Y9 r* Q/ ?
  1218.             if((int)Dn.dwRecvLeft>0)/ T, w! Z+ h! C6 v, W
  1219.             {
    ; f, l1 K3 K. a
  1220.               if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
    5 D# v8 A9 p$ e; q6 ?; h9 s2 J
  1221.               {4 m- |$ w% U/ \/ _  }
  1222.                 dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
    + e  ?* f' B5 w1 j$ I+ @! M- U& N$ |: I
  1223.                 Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    4 c2 {/ ?' T+ j
  1224.               }7 B' u* C, ^& Y  f- d! j
  1225.               memcpy(Dn.szCompBuff+dwCurrSize,Dn.szRecvBuff,Dn.dwRecvLeft);
    & W' d  j- _. U6 x& S' g9 c
  1226.               dwCurrSize+=RecvLen;
    ; k. l2 L  n5 u0 ~+ t1 o# p, b
  1227.               Dn.dwRecvLeft-=RecvLen;
    ' T) K; D; P2 U+ h, `1 |/ e; h
  1228.             }
    1 `/ R% H; X4 T9 X6 G
  1229.                                                 dlg->m_Process2.SetPos(100*dwCurrSize/(dwFileSize<=0?1:dwFileSize));+ u5 b/ ~4 F7 R# k
  1230. //            int iRate = 100*dwCurrSize/(dwFileSize<=0?1:dwFileSize);
    & h0 D  R# T3 d! c* Q
  1231. //            dlg->m_Process2.SetPos(iRate);
    3 r# V- u5 ]9 M+ M" Y- h* _
  1232. //            if(iRate < 0)   iRate = 0;
    7 ^' I$ }* l1 E) K% _, I7 h
  1233. //            if(iRate > 100) iRate = 100;
    9 Z$ u; Q! k/ ]( t
  1234. //            char szShow[5];$ Y$ x2 d/ a- q" G- E
  1235. //            sprintf(szShow,"%d%%",iRate);
    3 g/ `* b( o/ o( e+ t8 U) C! y
  1236. //            dlg->m_SingleRate.SetWindowText(szShow);
    ; e1 |  t8 Q5 q+ j. T) ]
  1237.                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;7 Q5 f4 B2 j1 i* X0 [0 K
  1238.           }4 H) U4 O3 b- r+ i1 k: M
  1239.         }( c: K/ b1 g2 v8 i" v4 D1 |- Q
  1240.         else if(dwCurrSize<dwFileSize)
    ) v# k1 ^4 s3 K- G
  1241.         {2 o, f2 f+ [  ^9 Y1 d
  1242.           // Disconnection But Size Error, ~4 U7 ?8 j, m1 r' n) t9 k# [
  1243.           Dn.QuitNWSSock();* m8 ]- V8 E" F7 H
  1244.           if(dwCurrSize) dwProgramState=AP_RESUMED;
    4 c; t' g) Z4 {  ]+ w* |% R
  1245.           else           dwProgramState=AP_CONNECT;5 f& }( n0 {1 Q* k
  1246.         }, Z2 e# N8 ~" L3 J- N% E& C
  1247.         else
    9 i+ o9 W+ n. H$ s4 G6 o; N
  1248.         {
    / `3 k: L# c2 L& O* @* ?4 G
  1249. SaveFileJump:
    / x- H% Y% E' D7 N' W+ W  q' {% G
  1250.           // End of File and Disconnect
    6 o6 Y! [( o" L
  1251.           FILE *Fp;
    ( J! ^2 i- W( x7 B% t3 @
  1252.           char szTempName[MAX_PATH];
    + |7 \; A2 f! m- ^/ V
  1253.           strcpy(szTempName,".\\DownLoad\");
    1 k* l" [+ t  C7 b+ e
  1254.           strcat(szTempName,(char*)(LPCTSTR)strFileName);
    4 C7 x. l3 L/ M9 |4 x
  1255.           if(bCompressed) strcat(szTempName,".zip");
    9 v5 @  d& w" {# W$ S
  1256.           if(dwCurrSize)7 v& j* F" v6 k  k
  1257.           {6 s- e# o" t5 C  \
  1258.                   Fp=fopen(szTempName,"wb");
    6 @$ s" o: ^  E5 {5 m+ u* G+ R
  1259.             if(!Fp)  x  M. P4 T/ p, @) n/ B; C
  1260.             {7 |8 s& J' L: F; @
  1261.               _mkdir("DownLoad");
    7 \% V/ H2 Y' Z0 \8 u
  1262.               Fp=fopen(szTempName,"wb");
    ) A0 j/ d7 K5 D9 v6 ^+ }$ w, F
  1263.             }
      k$ V2 X4 J9 f$ T$ l
  1264.             if(Fp)
    1 z' y% A6 u% H1 q* t
  1265.             {
    ) u% e1 C% x- q3 h( x2 ~& U. r
  1266.               fwrite(Dn.szCompBuff,1,dwCurrSize,Fp);- z3 M6 A; t* K5 W8 z1 e7 F* s& f* L
  1267.               fclose(Fp);
    * b& N% F; F: o( Y
  1268.             }0 {, q1 Z3 V: w6 S- S
  1269.           }! `3 c4 h& d/ ?0 ^6 U
  1270.           if(!bSilentStep)
    ) g! ~, f  B: }7 ^  z' y8 V) M
  1271.           {
    / D' Y& J( A5 Q# p8 a
  1272.             if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);$ H. E5 J8 M# b* Q7 V# t4 d
  1273.             dlg->m_ListText.AddString(strFileName+".....saving");
    6 e2 z, q$ Z) F! a
  1274.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" d& U1 n. s7 l9 N! v/ Q$ A8 S% I
  1275.           }
      J* n2 D3 \& A
  1276.           if(bCompressed)4 V* l" d6 ~4 f1 i3 y% ~
  1277.           {  Y, l% U, j% [$ E4 m/ i* h
  1278.                    int opt_overwrite=1;
    ; h, N8 J4 X  T
  1279.             int opt_do_extract_withoutpath=0;- s( m! j+ j+ X/ _/ }
  1280.                    unzFile uf=NULL;
    8 `# k; ^8 y$ g, |( O
  1281.                          uf=unzOpen(szTempName);" V% \* D, U! x8 ?
  1282.             if(uf)
    ; Q$ t3 ]  _* R3 n  t
  1283.             {6 k3 h0 E$ z* @4 P# s' @1 U
  1284.               if(!bSilentStep)! c1 o! d/ I: x. [
  1285.               {5 |8 J: h; g& L
  1286.                 if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);/ S# d6 j. f  m' s  b
  1287.                 dlg->m_ListText.AddString(strFileName+".....extracting");
    ; H+ U, X; \, z8 C! `- O' C
  1288.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 X+ P/ F% |* r( w) _' R
  1289.               }. f- w0 a( U& F% ]
  1290.               if(do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,(char*)(LPCTSTR)strFilePath,NULL)==UNZ_OK). Y8 h# |$ Q$ P1 `% I
  1291.               {
    & g) [+ x5 U5 L+ M$ ~
  1292.                 if(!bSilentStep)$ K+ E& U2 B& y9 }" Z
  1293.                 {
    3 ?# p- [4 X; z$ F+ |6 f
  1294.                   if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    % K" {' r" M2 r% d8 L" P" L0 N) H" h  x
  1295.                   dlg->m_ListText.AddString(strFileName+".....done");( O+ F) z9 {! Z" h' a
  1296.                   dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ b7 A4 S; D7 o% t5 a/ _/ u
  1297.                 }
    ( F% T' m8 [+ I% |
  1298.                 dwDownLoaded++;
    : F0 g: [0 O( R* Z. B
  1299.                 dwProgramState=AP_NOTHING;3 z9 z% k, h7 h% W$ M3 M
  1300.               }
    4 }, U6 q( h3 l- j* H$ t5 K
  1301.               else
    ( z" Y. o+ q- U! U* S! S3 W. h* x
  1302.               {% t, n! S+ R: w2 j
  1303.                 dwProgramState=AP_CONNECT;# o5 |' x. q% @7 Y
  1304.               }! q- F" n, A! p" c" }9 y
  1305.                     unzClose(uf);
    ; |1 b$ b: z2 C6 X) p
  1306.             }7 h0 a+ g7 d& w
  1307.             else
    2 i3 `( ]! z& k1 J# i9 W& S
  1308.             {
    % w1 D$ q( S# w8 O2 V
  1309.               dwProgramState=AP_CONNECT;
    . N) m* {3 m* m
  1310.             }
    8 `; R5 C. B/ C7 H: b/ a
  1311.             unlink(szTempName);2 ~4 U8 Q2 W" t: |+ i
  1312.           }6 F: R5 j: G$ u( @$ c
  1313.           else+ n$ k, W7 g2 t1 Z
  1314.           {+ P+ L4 P, [% a+ y  ^! b# f- n
  1315.             if(!bSilentStep)
    2 i  b0 V7 Z$ Y4 f
  1316.             {8 W9 t5 i* V) s: `; ?
  1317.               if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);% [  z1 E/ o9 U0 N3 n/ s8 C
  1318.               dlg->m_ListText.AddString(strFileName+".....done");
    & c) [1 ?! b( p- X1 h  [. G+ R$ N
  1319.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 @! k! Z0 D6 [8 S7 h
  1320.             }0 n* t9 D8 x; v  P
  1321.             dwDownLoaded++;; j, w: t. E4 K6 x* e
  1322.             dwProgramState=AP_NOTHING;
    7 K8 h. N2 P# {% i9 s. {' d3 S
  1323.           }
    4 F6 N+ {4 e) H) z2 B
  1324.           Dn.QuitNWSSock();
    3 w6 k0 L; i8 z3 L( v* H( g
  1325.         }
    " [# n, N. c/ i# o) y
  1326.       }- e1 C1 S9 [: F* V9 P' {$ a$ J* y% k* H
  1327.       else+ }+ E4 e' ]5 I% a$ e: Z# i
  1328.       {
    / b# ~2 a! Z- @# N) z4 i
  1329.         // Connect Timeout1 T" f# z4 P) Y/ V% \0 P
  1330.         if(GetTickCount()-LastTickCount>30000)2 N5 X( \0 k6 n9 @7 g  s" \
  1331.         {
      G/ C) \! i- A
  1332.           Dn.QuitNWSSock();$ G( A  U4 L0 _7 E! d
  1333.           if(dwCurrSize) dwProgramState=AP_RESUMED;
    " w5 ]  P4 y( Y' K  z
  1334.           else           dwProgramState=AP_CONNECT;
      m5 h* n! o6 g: o/ o. D
  1335.         }
    8 M+ R) C  T/ W: u$ u$ Q
  1336.       }4 L/ E- Z# j9 M' X& ^4 l4 J
  1337.     }
    0 u' e( u6 t  E" {" e! m' Y
  1338.     break;
    ) O9 R% P* E# {' {, s
  1339.   }
    4 ^% Z9 H, K& c& f3 s4 {( X
  1340.         return CWinApp::OnIdle(lCount);
    $ p1 y$ `! E+ A6 k# c0 R5 t; k
  1341. }
    % [- j% ]6 Y- d- R2 e
複製代碼
其实登陆器也就是这么一回事儿……
! z+ C( H$ ^# a3 Q) W8 P附件有编译教程和源码
9 z3 N: a" h& C8 J( [4 J& K+ ~
遊客,如果您要查看本帖隱藏內容請回復

" [  Z0 C! o/ A0 Y6 ?1 R) G
0 U5 T8 C$ R! }8 t+ n; K6 z% a

評分

參與人數 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部評分

wuzhenpan 發表於 2019-10-24 09:31:51 | 顯示全部樓層
1111111111111111111111111111111111111111111111111111111
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:55 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:50 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_NBC3C 發表於 2018-1-30 18:08:32 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回復

使用道具 舉報

qutebaby6309 發表於 2018-1-31 08:29:25 | 顯示全部樓層
來看看囉 謝謝大大的分享 ~
回復

使用道具 舉報

advsolarpower 發表於 2018-3-17 13:42:22 | 顯示全部樓層
热爱他肺癌热锅额度都是感受到
回復

使用道具 舉報

提莫 發表於 2018-3-23 17:17:22 | 顯示全部樓層
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回復

使用道具 舉報

提莫_k6Zum 發表於 2018-3-29 13:30:35 | 顯示全部樓層
dddddddddddd
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2025-10-18 19:07

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表