CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式

4 o: u4 ?- j8 ~1 q& i
  1. / RevApp.cpp : Defines the class behaviors for the application.
    5 V1 A  g% l& w+ y; C; r
  2. //5 F& F* g+ H4 x, W- ~/ B. f
  3. ) r9 @9 A4 b/ _8 U* o
  4. #include "stdafx.h"+ P* q: Z( V/ G) L

  5. : U2 j9 F7 A5 U7 G1 m
  6. //#define UNICODE' j+ n. s; t# {8 Y2 u
  7. //#include <gdiplus.h>! h7 i8 f" D( t$ Z# u
  8. //using namespace Gdiplus;
    ( t) a: J: V: R. [
  9. ! N$ l4 f( q" k3 ]$ y5 v1 `
  10. #include "RevApp.h"
    ' P% N4 H% d$ u$ l$ R
  11. #include "RevAppDlg.h"
    8 G' E) ?- t  _% @7 h0 `, Q  R

  12. 0 |: B& H7 O% G! y) L# I
  13. #pragma warning(disable:4786)& P, n0 e9 N6 r  p* R- b5 Y
  14. #include <map>
    7 N' X3 |! K0 }5 b- P
  15. #include <list># Z  w  {4 }) B" j6 R
  16. #include <direct.h>6 l  {, O/ m6 E/ W  R
  17. 5 p# T5 j/ E9 k$ u# \" L
  18. #ifdef _DEBUG, u' j) O% G* Q% d  X1 C! ^) D
  19. #define new DEBUG_NEW
    8 A+ y/ N! F  ~* @
  20. #undef THIS_FILE
    : E! ~9 h( Z# r) I( [
  21. static char THIS_FILE[] = __FILE__;' J' _7 {/ [9 B1 z: t* |
  22. #endif1 W+ c. x: d* R9 }" F
  23. #include "SkinResDef.h"! P; H9 C. W% V: V+ Z3 h
  24. #include "ChangeBG.h"& l! j8 w/ V4 P  M3 j
  25. #include "AFXINET.H"
    9 [7 i6 O/ k2 `" g: E8 E* f
  26. " c$ J3 A, U4 D+ x. @7 E) d
  27. #define TRADITIONAL_CHINESE 0, y2 a7 M8 G  u/ J+ k8 m  d
  28. #define SIMPLIFY_CHINESE 11 i& M7 z/ ~3 ?1 O. I: _: L" }" e
  29. #define ENGLISH 2
    + Y; |3 I' N9 h" E# M
  30. int m_iLanguage = ENGLISH;
    ! I* ], Q. |+ {7 R8 D0 u- V
  31. /////////////////////////////////////////////////////////////////////////////
    7 C! C/ P, x9 \
  32. // CRevAppApp- S: {, `6 }; S& c- N
  33. - s9 ^! b' w# G9 k2 P/ ~
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)6 Q4 X; S5 N: P4 E' ?
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    7 F' ?  x& g1 V# }
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.  f' `" y8 J1 O: ~1 Q* ]7 p" O
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    , [- k' b! H( z+ S; I  [: U
  38.         //}}AFX_MSG. v% ^1 U- @' N" J$ _
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ' Z  L/ ?2 C1 A- E* G
  40. END_MESSAGE_MAP()
    3 g6 a% K- N( s

  41. 4 Q# b0 q. E& _+ @
  42. /////////////////////////////////////////////////////////////////////////////
    : o5 K' r8 r, Q% E( R; K4 a# {1 z
  43. // CRevAppApp construction, l( r0 h& u9 T* b$ \7 b
  44. $ |( a+ d8 g3 ?
  45. CRevAppApp::CRevAppApp()
    1 V5 y0 M) S. [; i- l, K- m& K5 Q, O- ]
  46. {7 N) W1 j7 R7 a! ]1 c! ?
  47.         // TODO: add construction code here,2 |& V9 q& @4 E0 I4 M( R) B3 R7 {7 y
  48.         // Place all significant initialization in InitInstance
    5 f6 Q) \% l& \
  49.   bDisplayIsBig5=FALSE;
    8 D3 p0 d! a7 _( t4 B3 D
  50.   bRestartUpdater=FALSE;8 r2 {2 u  q8 n7 a& h
  51.   bFinishUpdated=FALSE;
    . v1 N3 L9 a7 a8 w
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    0 ~. B. r3 ]6 t# P1 N* R6 f
  53.   InitChangeDataBig52GBKS();
    9 C8 M( C, U' O3 l
  54.   InitChangeDataGBKS2Big5();
    1 W( G& Y; T) a% Y; T, l/ x, d
  55.         //+ i$ I9 B' e, W2 N* V0 S/ m+ |
  56.         bClickRunExe = FALSE;. a1 x% d! _0 c# y$ `" o3 y
  57.         //
    * ~; d. [: j" ^" [
  58. }8 G  Z& l# {# l+ X7 x- g. g

  59. ; w" `; X, d$ m- m3 x. @0 Q! h: c
  60. CRevAppApp::~CRevAppApp()
    ! m$ u4 B; c2 o, ^+ b
  61. {2 e( G, g+ ]# T
  62.         // TODO: add construction code here,, H. ~9 g1 N7 Q0 r9 u: r6 g
  63.         // Place all significant initialization in InitInstance8 L) W0 ?* L+ `6 S$ B
  64.   EndChangeData();
    & x3 U) H( @& y( g& F
  65. }( \4 l. V7 G1 r2 D% O2 u

  66. 5 D$ E0 l1 L( R* t
  67. /////////////////////////////////////////////////////////////////////////////3 s( p4 G% d' ]3 T
  68. // The one and only CRevAppApp object: m0 A+ h0 ~8 T! b8 g; [

  69. + B# M: M, s4 g$ g8 ?! V* Y
  70. CRevAppApp theApp;
    , K: Z- a# n$ w$ v; }
  71. " ~( R# A! c: ~) H9 y2 C
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    / x- E% e$ U2 Y! W' _$ C3 o
  73. {& Z: ]3 [1 J3 M. a' U& }
  74.   int iEOF=0;
    * @- t# a9 q; P) R; ?
  75.   char szTempName[MAX_PATH];
    9 L# Q4 |! s2 V+ L1 ]
  76.   *szFileName=0;
    / q8 {+ y/ E* K/ a  F; D) A& k
  77.   iEOF=fscanf(fp,"%s",szTempName);
    7 ~8 [! {: x5 ~8 J( q
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    4 U0 _, K1 I/ B: S' x
  79.   {7 x! m1 E- m. l( S, h
  80.     strcpy(szFileName,&szTempName[1]);
    " _6 M& T4 h) B
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 y6 l, X; P! c# `; t: u& d
  82.     {
    9 k; p+ A, S; J! C
  83.       iEOF=fscanf(fp,"%s",szTempName);/ X) Q+ H1 @3 o+ Q" I1 S
  84.       strcat(szFileName," ");2 q6 ]5 \" p0 W% c; N; i  p
  85.       strcat(szFileName,szTempName);4 I2 O% `) ^  Y: C
  86.     }
    0 K$ U% t$ I0 M+ y) C
  87.     if(strlen(szFileName)>=1)
    / w  u: s/ |6 o& M# K
  88.     {
    * D8 k) u- x9 ^+ U) @- c* {, D
  89.       szFileName[strlen(szFileName)-1]=0;& {3 @) D% p# f( k' f
  90.     }- e* v1 g- U7 a3 s2 P/ V- L$ r& R
  91.   }
    0 I  [) P! q( |
  92.   return szFileName;( C( f5 g& D: V3 J  A% t0 x+ G
  93. }; s( e. M! |1 N0 ^* Z  c

  94. & E  ?, U7 f. ?. t9 j1 J# \
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    6 D- ~9 t  K7 d4 g% b  b2 e" O
  96. {
      T0 O: [; }% ], Z" s7 D
  97.   FILE *fp;& C" k3 {) x3 j; c: v& ]6 P
  98.   char *key=NULL;5 a* S* Q5 H* A, B8 ?
  99.   char version[MAX_PATH];1 m- `* l# l5 W7 r  R8 r
  100.   LPUPDATEFILE file,olds;' S  U* x8 l$ t8 y! {# o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;9 J+ ^  }6 a2 r1 v
  102. % b2 J2 z4 f  @0 t' R. ^
  103.   UpdateList.clear();
    - n$ }! K, P6 B2 c
  104.   UpdateFile.clear();- U* a* [: U: _  c1 |/ P3 U. m
  105.   if(GetFileAttributes(filename)==-1) return false;
    3 g$ x" L  E* Q" d: ?; L; y
  106.   if(!(fp=fopen(filename,"r"))) return false;
    : z$ _9 z! _3 N, {1 j
  107.   fscanf(fp,"%s",version);
    ; d, C, m0 Y* a  K1 G( K
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    2 H2 a  @0 X+ x( U
  109.   while(fscanf(fp,"%s",version)!=EOF)1 h0 F: D$ H; K( w% C% |
  110.   {$ W' S0 X) e' v: k! v
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- Y0 C3 I" v" J' Z0 V! u' C
  112.     fscanf(fp,"%s",file->path);
    0 j3 @3 g9 X5 C# ?" F. M0 n
  113.     ReadFileNames(fp,file->file);
    6 U, g% J2 V- G9 B; }. E% P$ d
  114.     strcpy(file->full,".");2 s$ T+ p2 `+ Q* j; T, o* j
  115.     strcat(file->full,file->path);! n1 D7 m* P! w* x
  116.     strcat(file->full,file->file);! m& m0 [6 a9 z: \$ p/ Q/ B% _
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    5 g( o6 p+ A( E' F/ K
  118.     {' H8 M7 Y% K' J2 \
  119.       file->vers=(float)atof(version);8 v- F$ ~: L3 F7 s1 ?
  120.       UpdateList.push_back(file->full);2 ~% {: g" q( n" S
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    9 S$ r! ]! |' X2 k! l/ J; x
  122.     }
    9 `* Z& S, U' i  ?
  123.     else
    * f( ?. O; P; F8 a5 c
  124.     {& O2 T1 Q* V# T4 R* _5 V7 I) H
  125.       olds=(*p).second;! t6 C3 j7 }, \" I- y# r; B' [
  126.       if(olds->vers<(float)atof(version))
    - r" m  U1 q$ T
  127.       {/ J+ o+ K, c9 ?
  128.         olds->vers=(float)atof(version);
    2 v5 s8 G5 x* j, T4 W7 E
  129.       }
    - H9 f! I8 P# P- Y
  130.       free(file);) ~' G$ B, H$ y  N1 g9 i7 u  x! x
  131.     }. l( W* k5 I" \* F5 S: k- s# L2 j
  132.   }
    ) ^, y0 Z) s. |- r1 |+ g8 a& N% T
  133.   fclose(fp);
    ) v! s$ s+ {+ K, V  J8 t
  134.   return true;
    ) j6 K5 X" C' d( X0 w) k' I7 \5 P$ W, R
  135. }; z/ E9 z" b; d8 V' ~: r- C3 q
  136. ! u" M7 A  p- S' V
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)6 B5 Q, V' y; ^3 I2 P- U
  138. {
    5 m/ ~& P- B# P  ]
  139.   TCHAR  szFull[MAX_PATH];
    & D! {/ V8 y  S' u% Q- `
  140.   TCHAR *token,*inter;
    4 j) [  x  Z/ U. ]3 M, q7 `) m. B
  141.   *szPath=0;
    9 o; g; E' {) g0 `3 q3 }8 y/ K8 J
  142.   strcpy(szFull,szFullPath);8 [/ r- t4 }* T) _5 K7 |9 J
  143.   token=strtok(szFull,"\\/");" g) l' P* V2 K+ X1 A( R
  144.   inter=token;
    ( H) \% p3 U# g- o9 |7 J
  145.   while(token=strtok(NULL,"\\/"))
    - N# P9 \  d+ O7 {1 l3 l: K
  146.   {
    ( c' ~. _  l$ s, D
  147.     strcat(szPath,inter);- D0 y+ Y. q" P, L' {8 i9 j9 h
  148.     strcat(szPath,"\");
    ; d& \& }# ~* p& z( e, u/ g5 N
  149.     inter=token;
    . ]* r- ]1 O) ]! a' E0 ~
  150.   }
    0 B5 r7 c8 j' N" F, j
  151.   return strlen(szPath);
      F  ?0 b8 l" r6 D
  152. }5 C5 b& T! }) A4 H2 l

  153. 3 ?5 Y2 U3 S; _: M5 f, U9 \6 w/ ?
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase), @: N; S& h$ O1 W5 }0 \+ M
  155. {
    ' w; G( Z* c. \4 _
  156.   DWORD attrib=GetFileAttributes(Target);
    & k# s# Q/ H4 a
  157.   if(attrib!=-1): f7 Z  v3 F: q1 c8 X
  158.   {4 }' |: L/ c& ]4 C
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)); v/ v% {+ w) d7 y: t2 {
  160.     {3 N. a5 U! k' g' k  m1 T3 u. a  s6 A4 k: m
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);. u" w4 z: j  T$ d
  162.       SetFileAttributes(Target,attrib);
    6 p2 W+ a6 Y. H6 G' F7 J9 {3 b7 g
  163.     }
    + }  B% w& [6 f2 [+ c4 t
  164.   }6 N5 d7 }7 s6 f  s$ n2 N
  165.   CopyFile(Source,Target,Erase);% f: j& a6 S1 z7 L+ x
  166. }0 n8 F0 @, i; n

  167. $ Q( g; `! q5 [$ f$ W9 C
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ; E8 w8 l. s. v5 k/ r0 W
  169. {" Q  ]4 E6 {/ j0 K7 ]+ O2 m2 }) I2 k! z
  170.      FILE *fp;) M2 K* O+ U/ |  O5 i, S5 Z4 B5 e
  171.      char  szBuffer[8192];
    . W- `& c+ V9 v/ D
  172.   va_list  argptr;+ D2 Q8 ^  Q" ^4 b+ g
  173. : t$ Q) B+ R8 H3 m
  174.         va_start(argptr,message);
    # Q. w$ \% N9 @9 H3 J# v
  175.         vsprintf(szBuffer,message,argptr);  m9 q; i* C; j# V# a
  176.         va_end(argptr);  ~& w7 _% ^  Z
  177.   fp=fopen(FileName,"a");- w7 _% [3 v* ^( B, d
  178.   if(fp)- X) I5 x; l4 G8 V' b
  179.   {
    6 f2 n  f+ C* V& E5 l9 r5 M
  180.     fprintf(fp,szBuffer);' [8 N9 I( P7 ]
  181.     fclose(fp);
    3 P! a2 M, Z4 [6 E! m  Q  m2 e
  182.           _flushall();, M  O" K2 _; N4 Q
  183.   }8 R9 t' g9 b" T' l! V+ _
  184. }
      M: o8 i# ?; |4 B' }
  185. % c- ?8 Q! f6 M  H# z
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    / s4 s( Y: @2 l: C& R
  187. {
    ( E: x! |* J$ F- m; o6 h* }
  188.      FILE *fp;2 `1 U  j. a7 }. I
  189.     DWORD  attrib;. _! ~) }) ~2 @9 S3 ?, R+ u% O
  190.   attrib=GetFileAttributes(FileName);
    ' H. @" c2 R2 ?( i
  191.   if(attrib!=-1)# G, J% k4 ?4 r1 H1 S- d- a
  192.   {
    ' j; K* E1 l" |7 _$ R& f( `' O
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ; U5 _3 ]7 k3 C
  194.     if(!SetFileAttributes(FileName,attrib))
    6 K3 ^! N" M. ^  J' n$ Z7 f
  195.     {( u, b4 G( x% @. Z, V; v5 c. E0 W
  196.       return FALSE;. D2 r$ g# w7 c. W1 l+ t
  197.     }1 B# w' b0 m) Q9 _" w  W' [+ G  D
  198.   }
    , g8 c  y% N. ?! E* ^* V) n
  199.   fp=fopen(FileName,"wb");; `% m1 F0 ?! }
  200.   if(fp)
    5 K9 C- Z+ w! S: ]$ x
  201.   {0 y" D* v" c5 O3 y: _
  202.     fclose(fp);% h# x- [" @' s* ]# b& Q
  203.   }
      g2 R/ q. \, y
  204.   return TRUE;
    4 A4 v1 Z# Z2 R1 l" S
  205. }) `4 C$ _/ }$ v. X4 W

  206. 7 s, Q, z/ w7 w/ {# |& I! g
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + E& V, G/ m! c1 e
  208. {3 F  C5 k8 o6 E* J% W; d# u
  209.   char filename[MAX_PATH];: ^2 M1 `1 t2 D- `
  210.   LPUPDATEFILE file,olds;
    ! w7 T6 L8 f! ~
  211.   std::map<int,CString>::iterator i;
      ]5 N4 y3 q* ^, x7 d+ {$ y8 ?
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    * J2 |. o3 u  b
  213.   std::list<CString>::iterator l;. o2 \( X, ?1 ^% w5 Q5 x8 b4 m) T

  214. 9 ~) Y! @+ V7 z* A
  215.   if(bFirstUpdate)6 G  a/ S+ Z7 X3 \
  216.   {' I. g9 Z1 p/ u0 a9 T' r* V% {' c
  217.     dwCurrFile=0;0 D" L( \' C+ i0 u9 O: n
  218.     bFirstUpdate=FALSE;
      `4 [# V- M) B" H
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # [) \; g" \2 G# l
  220.     {8 t4 v  F. ]9 {7 [3 o/ v5 ^
  221.       dwTotalFiles=UpdateLocal.size();& |. O, ]" U" f$ h8 |
  222.       dwDownLoaded=0;
    3 n) N! Z/ ]8 t- B! o, `5 F. y9 h
  223.       bSilentStep=FALSE;% @" f+ i8 ]: D/ }. H  i
  224.       bCompressed=TRUE;
    ) Z% d& E! c; @, ^+ f2 X" V4 i
  225.       strExtLocal.Empty();
    2 c  _0 Q. J% X, c2 ^  S9 Q
  226.       strFullName=(*i).second;5 U( A/ D$ ^% }0 O; W
  227.       dwProgramState=AP_CONNECT;/ b1 S, e! E4 D  D
  228.       return TRUE;
    8 q7 F3 Y' h  L% B, }
  229.     }
    ' \: X# T, q" f3 z& t3 w
  230.   }
    ) f( L; y% j$ `  g5 s( }- O4 D
  231.   else if(bRestartUpdater==FALSE)8 X0 O3 n7 J8 {$ i2 U( _0 r& E) f
  232.   {; M  {$ x- M! g- u: H
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())" ]/ e0 d, q% W4 h) `9 U2 o
  234.     {
    5 J) L) h& R! \$ c3 {" S
  235.       file=(*p).second;, g. ?- H3 B# T7 u# f
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    9 {2 D) b9 M1 i% T$ Z9 J
  237.       {
    ) o0 K9 U4 @8 N, b8 O
  238.         olds=(*p).second;
    # O: h% N$ V" _2 w3 q
  239.         olds->vers=file->vers;+ N9 O8 w8 g8 L( F
  240.       }
    # M: U" Q2 X0 X: a; ?5 F' F- h
  241.       else
    ! T9 `, N' y& S2 o: Y
  242.       {
    . L# T3 u) `! E
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 T9 m  B+ Q. N9 Z* N
  244.         memcpy(olds,file,sizeof(UPDATEFILE));- f1 b' r- h) R% N
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    7 a8 w# r! c6 w
  246.       }  E' @9 ~/ Y% A' ]0 v, e+ a
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# J& I9 y: a( [) p- x4 T, N
  248.       sprintf(filename,"(%s)",file->file);" l4 O; N) Q1 [  L
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 ~. M. |) w8 z7 \4 n% o
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }- Z* X. E- y* P1 r+ a- G
  251.     }
    # _% S* T( c" i: A9 H6 W
  252.     dwCurrFile++;1 ?5 z& _0 ~  Q& ]; }
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 f" L" {$ ^6 E7 q: d; i7 R
  254.     {3 R& x  u* z' v& ]3 v/ }
  255.       bSilentStep=FALSE;9 y. f: _' w4 ?/ _% N
  256.       bCompressed=TRUE;2 Y$ {. X( x5 b% A, c. Y) G
  257.       strExtLocal.Empty();1 o% {9 L. i! u$ u9 |4 z* H2 _# k
  258.       strFullName=(*i).second;
      s# z$ S7 E* w! t
  259.       dwProgramState=AP_CONNECT;, U2 c8 x0 J% ]
  260.       return TRUE;) i- J. `1 H  c7 w- W0 @! _
  261.     }4 W4 a; V$ `! g, [
  262.     if(!bRestartUpdater)
    ; r% G6 B$ U; _
  263.     {
    % U  b; q1 Q+ M9 r0 ?: w5 {
  264.       int iCurrSize,iFileSize;- l8 [  t/ i( M1 R8 m) c7 h
  265.       iCurrSize=0;) c+ M1 Z2 G9 z+ t) _
  266.       iFileSize=UpdateList2.size();0 X# Z+ {3 {  z4 _* B9 ]+ D  I
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");) z( Y/ p0 |) o9 b- _
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");& E# s' X* T0 o, s) }
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 T( r0 G  v6 @* e5 O
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! [$ |' z& x, j6 O2 |# g) h) V
  271.       Fclearf(".\\update.dat");
    4 y" D& Y5 H1 r7 O
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    6 }' f1 o- Y# M3 H
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ' d2 v. g1 n$ B% R( ]
  274.       {1 n7 y9 Q' }/ f. x  R
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())* d2 \% F, h4 F* Z$ s/ ?
  276.         {
    0 m5 o+ X) `' |
  277.           file=(*p).second;$ Q, ~8 i7 _5 z" [# ^, N. [
  278.           sprintf(filename,"(%s)",file->file);  W" s' y3 O# i3 P& Y, i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / E2 `  ?* S. U2 G2 o6 r/ s  A; a
  280.           iCurrSize++;
    6 [3 G1 w  V5 E' B
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));5 \8 H' v4 g% {
  282.         }  R- ]4 U6 |) f5 S5 X; R
  283.       }
    8 {5 {  j/ L% u7 G; K6 b' D: R) @
  284.       unlink(".\\update.txt");
    # u4 E% p! R+ p; ]; p3 W
  285.       unlink(".\\update.tmp");2 J' s4 ^3 c6 g" K4 H. Z! L
  286.       Fclearf(".\\checkversion.dat");
    # h8 f, U. {* V
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' V% y$ Y5 F7 C% f4 S
  288.       if(UpdateLocal.size())& H2 s/ v6 s( c
  289.       {
    5 l7 U8 C2 b4 a9 _$ o/ F
  290.         UpdateLocal.clear();' k# v' y$ \5 C* h. ~5 J
  291.       }5 Y+ R* u7 u! t* h# {
  292.       if(UpdateFile3.size())
    - {# u( R6 e$ p2 E! E7 X2 A5 {
  293.       {
    ( ^5 |4 I1 k  I
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' m; X. I  h7 o- K  W- _. a# t
  295.         {
    + ~! a" {3 g; v7 h8 _
  296.           file=(*p).second;' B6 P9 V6 `2 f. B4 N+ S/ |
  297.           free(file);
    ; |9 {; v4 J1 O0 j7 T/ z+ b+ L
  298.         }
    6 E. {/ Y2 A9 s
  299.         UpdateFile3.clear();
    ! S3 R4 y5 D- j7 H0 _
  300.         UpdateList3.clear();+ X5 Y( |5 x3 u
  301.       }
    8 Q  |, {% V6 ^5 R7 o, x1 x
  302.       if(UpdateFile2.size())
    % @# s! c8 I/ y/ C# D+ b, j0 Z: B
  303.       {( M+ |+ A  r5 W! ]: ~. U: |
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      a" o( x# H6 A4 e& \3 T. ?& `3 W
  305.         {( P2 U' [- T3 \) a
  306.           file=(*p).second;
    ) N' W3 p) }) \! l" G, @- N: s
  307.           free(file);
    2 Y) a- t6 K, y! {0 c/ h2 v3 s
  308.         }
    * J# y$ l, I% D+ V# [8 z8 J- s
  309.         UpdateFile2.clear();% Q# Q6 r1 A1 u3 w; ^; w- V
  310.         UpdateList2.clear();( v4 C+ M. E6 N% u
  311.       }: K! J. n0 e- C- K5 ]1 f1 l
  312.       if(UpdateFile1.size()): \7 [' a  q) V3 f$ L* ?& t" L
  313.       {
    & Y7 A) r; n# K: |% m/ t, M+ x5 n/ r: Z' n
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 a) U* {) J8 g0 i/ P* H
  315.         {
    ! c% {- p8 E' I2 I/ \, C
  316.           file=(*p).second;
    $ Z+ T  ]* M3 B0 U5 v7 _8 H
  317.           free(file);$ h. ]4 L. A3 Y0 b9 U
  318.         }1 h$ O6 u; c% z  \- N; _
  319.         UpdateFile1.clear();, q# {* y( [! V$ h* W
  320.         UpdateList1.clear();/ g: K) @2 y# _8 f+ I
  321.       }
    + O6 F" ^# s- ~
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));- t; B" G% }1 I; M  o7 k7 o+ b
  323.     }
    6 I$ h  u: B+ w* B1 J2 s$ D9 H
  324.   }
    " X7 r3 M* l4 V6 w
  325.   return FALSE;
    + Q2 y) ?& B$ |2 K7 T+ C' J
  326. }: O) l4 D7 z# A& ?- b. W' j* J. V/ m
  327. - L/ B, C2 s6 e; t  b2 f, y0 v
  328. void CRevAppApp::ClearAll(void)
    ' V$ T& p7 n7 g2 L; I$ L
  329. {& n% S$ G% E) y3 Z1 F0 q
  330.   LPUPDATEFILE file;
    " r! U! ^) N, f0 m: B3 W
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 I& J( v. f5 p. W

  332. # n: M9 d/ ]5 E/ u7 K& |4 o, }( _
  333.   if(UpdateLocal.size())
    ! F; @! G0 T$ ]7 G! l
  334.   {2 H4 Y# A7 n3 p7 N7 x$ X/ x
  335.     UpdateLocal.clear();
    2 ?% s2 M' _0 |0 K
  336.   }" k: C0 \2 h0 P
  337.   if(UpdateFile3.size())
    . X+ R1 s+ l: x8 |4 r  J/ [/ F
  338.   {6 c. `3 ~) d* u& M5 s' z
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  d; t3 d5 a9 c8 c
  340.     {" E+ u) C8 h; ^( R% i' s, H
  341.       file=(*p).second;
    3 M# v  \7 p! u9 E+ |
  342.       free(file);8 J" r4 y, G# P. M' t! _' d
  343.     }
    ( R& C/ ]# B8 u* `! W8 J
  344.     UpdateFile3.clear();
    / j7 Q3 S: p5 z# Y2 |3 f0 @
  345.     UpdateList3.clear();
    $ Y- \: `2 _. Z( T6 [. J/ v
  346.   }, }% q* s2 \9 @! u8 ^
  347.   if(UpdateFile2.size())
    ! V7 p+ a; t" i0 ]
  348.   {
    5 h( {8 r, X6 w7 V7 h/ K, M/ E
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* q! i8 C1 c0 W8 s& d/ _
  350.     {
    $ `3 S. ~8 {/ u) D
  351.       file=(*p).second;
    1 ?% H8 b$ j6 ]- W* _1 v, _
  352.       free(file);
    7 N- M& F' w+ x: t# V
  353.     }
    + i6 B1 J9 i" ^9 W8 Q
  354.     UpdateFile2.clear();
      B2 Y) M( l& v6 i4 L  F
  355.     UpdateList2.clear();
    7 Y" ]- J& Y# B& s0 f$ m
  356.   }
    * e! o# H3 Q; ?% s5 ]! V
  357.   if(UpdateFile1.size())% @0 _9 q) ?) l9 [2 v% i) G9 l! x' S
  358.   {
    3 H3 Z$ A1 B; c- O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . t  d! E3 @+ H! H- m5 q7 m; y
  360.     {% S4 P6 R) B1 h# E! h3 o2 `: j
  361.       file=(*p).second;
    : {# g) N: g+ [& ~1 I; E0 U
  362.       free(file);
    6 h2 W5 g9 G1 U' s0 p3 c1 ?
  363.     }
    - X0 |4 j3 i3 H& j( H2 K
  364.     UpdateFile1.clear();  x9 k, Z* g) L6 E! q
  365.     UpdateList1.clear();/ e5 |8 H5 P$ \2 W6 A3 [! E4 p
  366.   }" B8 J* u8 X* I. l
  367. }  
    $ {+ }; r& E& ^; u+ U% q
  368.   
    . m8 O& U4 Q0 x6 K$ r
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    2 w4 C- [' P# ]
  370. {
    6 i9 b5 ^: T- P5 @" h% _$ M1 z
  371.   int c;& v7 n5 l4 V: A
  372.   LPUPDATEFILE file1,file2;
    & O2 I% Q- j5 h7 q2 r. G
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;) E8 u* A4 ^& B/ D" N
  374.   std::list<CString>::iterator l;
    " O( c: Y  o( [1 u1 U

  375. 9 o3 ^  _3 M' H3 T. U! V
  376.   UpdateLocal.clear();
    5 r! e& t$ M/ v3 D4 w. X
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);# z+ y8 ]; F) M9 {0 m3 I  G
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    * e- X/ y6 z5 A
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    * w$ O  N5 E; O8 c; ?1 h! w
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);4 Z) e2 M. U) X0 o) X: i
  381.   if(UpdateFile3.size()): a% y9 y3 X% h/ U/ H) q0 k4 }3 H
  382.   {; M2 e7 @8 _# T+ B
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
      q" N% ], w/ k# o0 G$ ^: f' O
  384.     {
    ( C/ i+ `# v2 Y( L& L/ Q' ?$ r
  385.       file2=(LPUPDATEFILE)(*i).second;$ C* t( |9 }0 `: ]
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 l( }2 w0 ]( Y7 M) q  [% `
  387.       {2 V5 Q5 z, s6 z2 Q! h" [! O* |
  388.         file1=(LPUPDATEFILE)(*p).second;. _9 O! z5 J+ k6 J
  389.         file1->vers=file2->vers;' N! I% T+ J8 k/ t  X* x: r; f
  390.       }
    - j& x, q8 z: j2 i
  391.       else( W. p: B. {+ X3 P5 y. |
  392.       {
    0 s+ c) f* C' }5 ]. {' S3 j2 e6 e
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* w/ W# I, K  ?; \' a1 y* F. Z+ G2 ?
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ' _4 U6 [  U9 A2 t) O7 {
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));$ d2 P% X$ u4 O, r& G1 X2 L8 {
  396.       }
    & c- K8 }) P' R, q3 X, t, A- \
  397.     }/ B$ g# _! [& S, D1 W& [9 n
  398.   }
    1 ~+ h7 l' ?0 @# \9 ~1 @
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)3 N% W4 d  V8 ?. I, A
  400.   {
    # k# ^! a* C; R0 e
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())7 I" R+ {( a# O3 ^! E6 u: S8 Y
  402.     {
    5 y2 z8 ]. u$ _. A, M
  403.       file2=(LPUPDATEFILE)(*i).second;
    ) F, K3 ^. @- H3 |9 j
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " y3 R( B0 T% G2 S, q) F. k
  405.       {
    7 B0 L2 p0 B$ E: u* q+ I' C
  406.         file1=(LPUPDATEFILE)(*p).second;; G9 y, _' \* p% L4 N
  407.         if(file1->vers!=file2->vers)
    : ~0 J3 ]+ z# x# B9 {1 |/ O. H
  408.         {
    2 t# e  J8 l( D3 f3 ~
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 {# `) O; b& V, O0 D- w
  410.           c++;
    ! x: f' i( P) S5 O/ [$ C$ @" |
  411.         }
    $ G1 Y+ t4 e6 K: G, [% W' V
  412.       }6 O/ e$ W3 S& g* Q8 _% C
  413.       else
    $ z) F7 E( I: s. F) p3 R. S
  414.       {2 D( g* t# i' j* x
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - _' [* H6 g- ~4 i* n
  416.         c++;
    ) I* [, I( E3 M: z0 x
  417.       }2 e7 A* Q" K; Z& n
  418.     }$ M1 p$ P& L- I
  419.   }4 t/ z5 X6 d/ x( w+ O# r. q" y' m
  420.   unlink(".\\DownLoad\\update.txt");1 @/ U( Z( ~* a
  421.   if(UpdateLocal.size()) return TRUE;
    + P, D3 W0 q9 A/ C( j  `6 u" u
  422.   else                   return FALSE;( p  S* D" p& h+ A
  423. }
    * Q) X" R1 f$ x& ?# X! v/ C6 i

  424. 7 Z& `* g8 B* Y, x* u9 `
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    # Q! ]$ j1 b/ S  o) [, w
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    # C; j" f% {3 ]& ?
  427. 8 `+ ]% G- e. P8 q( ^' S7 Z

  428. ! u5 h4 w: x* }0 u) f6 O+ X

  429. ; c; m' y5 G& v9 n- t, d
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ `/ h" X+ q/ p3 E( }5 V3 |
  431. {
    , A5 z9 g$ I. `
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
      I$ e  m8 _0 j% A  W
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 D* t7 k$ k  ~' X; o
  434.   {
    & D* P3 s% ?$ E3 U" F
  435.     char szLanguage[50];
    ( [$ x2 |: y2 `4 E& ]8 x: u
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      I! k( L' T+ w0 M9 @
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. d: N, u, x5 I; \; b6 c9 A
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* `- G7 B, p, P, o& k; L$ C) d
  439.     else                                   m_iLanguage=ENGLISH;- v$ B' r( j" k! U: a
  440.     char szRegister[100];; n: I4 a: U: u' i, `1 m
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - v6 H: S* q4 v* r
  442.     strRegsName=szRegister;# o2 C, Z( `% A
  443.     char szPatchURL[100];, c* n& i$ v4 _4 N0 Z$ |
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) l7 n! N, s" T# @- n1 G6 }; F
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # }$ V/ k) s/ A
  446.   }
    7 _$ K, t9 l+ v" v
  447.   else
    ! W6 V$ L& y1 F% g. e
  448.   {$ z" r, D3 g8 L, E3 Z; A3 }: E. J
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 D6 O% J* Q) Z$ K1 _8 ^/ _
  450.     strRegsName=DEFAULT_REG_URL;- R) T$ T: a# O: N
  451.   }5 g( O& w9 K1 T# v5 s8 V, Y
  452.   if(GetFileAttributes("hosts.ini")!=-1), |% [3 A, i) E. m& Q
  453.   {
    % ~- t; Q+ I3 ?) `1 n1 l
  454.     char szIP[50];8 N; i- K& n3 h" O* u
  455.     char szDIR[300];
    ; d  i& {% n! e  a
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    8 o& T. [' o, e1 s' \0 R
  457.     {; u/ S" G: e, Z) I. L
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");4 h% }* s$ z  v4 V8 T( k/ k- Y  [
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");3 g+ [4 w0 r$ q) @( |3 k  v
  460.       strHostName=szIP;* T" V  h! _. ?/ O1 V: j+ Y2 \8 _
  461.       strHostPath.Format("/%s",szDIR);% T7 c0 f. u; X: T: C
  462.     }
    : D" M+ e$ D! k) R$ {. k! _
  463.     else$ W6 [8 G. m) v4 j* N
  464.     {
    " x5 u* y# \6 g0 q7 S
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 V2 W7 W0 T* Y/ T, W# T" l) m3 a
  466.       {6 u. ]$ j' J' p) n8 x  M; w
  467.         char szLanguage[50];$ `) @; D# T% R' E; k
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");. @& |- ]8 `2 D* H$ P7 b/ t) h# o# G# L
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ ~; Y9 W4 ]( W9 J* m: S( }
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " }1 F6 k' [! z9 K  R
  471.         else                                   m_iLanguage=ENGLISH;9 S. ?& n7 i" s6 g
  472.         char szRegister[100];* q! X1 H, f. f6 j4 {! s
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : p$ {6 C5 r4 n3 m3 Q8 R
  474.         strRegsName=szRegister;2 }" f$ l+ v* X2 I3 z$ O
  475.         char szPatchURL[100];, g" _% c: c, {2 n! P4 Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : }6 M  w5 g, a4 g. u$ Q3 y
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    % X8 |7 m4 H' F% }1 b( n$ Q9 P9 d
  478.       }- T  K: Q0 X. |
  479.       else
    2 S: n$ t# t9 t8 ?5 A
  480.       {" O9 b2 A$ n1 _0 q# K$ ?
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    5 o/ n2 m$ b- N2 s+ R5 g/ G7 `8 N
  482.         strRegsName=DEFAULT_REG_URL;6 O. _9 ^. o) v- Y
  483.       }+ N0 X7 w2 @3 f, r
  484.     }. b+ ^9 ~% v' q) t4 @& C
  485.   }
    $ Y, P0 u( g9 j
  486.   return true;
    " ]: z2 d( Y, H: j
  487. }
    % K2 x, C+ k4 T9 g: E: w

  488. : b8 C* l8 o% w% ]
  489. #include ".\ZLib\unzip.h"$ I6 v& o6 j* ~9 ~/ x* h& M
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    1 u: u% F' v+ V
  491. /////////////////////////////////////////////////////////////////////////////2 x# O( H+ N" |, [+ X. A
  492. // CRevAppApp initialization/ v% A1 L0 v8 x3 Y1 |

  493. & {: C4 M$ y: r# y
  494. BOOL CRevAppApp::InitInstance()
    % n( p0 R: Y% ]0 e
  495. {
    0 y3 e  q) e: ~$ G+ Z% Z& a; y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    5 a5 |1 V8 @) X1 x; W# F; a

  497.   a% K# R9 ~- \1 r3 A/ {6 B
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    # ?. r$ K5 ~: k$ s# h# l4 L
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))7 @+ @6 L/ k7 f& N9 d% |
  500.   {# a6 `- H  u) Y  _2 E# [  m
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    2 C. Q( Y3 o! @  h* u: P) m+ I7 G
  502.     GetPathFromFullPath(szPathTarget,szPathSource);' u( v  V# K  T' d3 T
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    + w5 e6 b2 V+ F+ `4 i, I
  504.     {
    ( |! A3 s& z1 m. B* q1 O
  505.       strcpy(szPath,szPathTarget);
    5 N: K8 `5 _" b, |
  506.       SetCurrentDirectory(szPath);
    6 p3 y& Q. n. G4 a1 w
  507.     }; \7 Z; ]* M( p5 ~
  508.   }5 u) \+ M, b. o$ a
  509. #ifdef _DEBUG
    1 j9 x* `* y, A- m
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% m( E- E1 m8 n; q
  511. #else4 a1 I/ q$ W: t, ~' s! T1 z1 u2 T0 u6 U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 E8 ]  L! o; I
  513. #endif
    # j8 y2 X! o  G) m
  514.   {
    3 l" U* o7 J+ Q" I3 [
  515.     char tempFileName[MAX_PATH];" W7 G: a2 w9 T% B6 F% f7 Q
  516.     strcpy(tempFileName,szPathSource);# f, z* s+ R4 @* g% w
  517.     tempFileName[strlen(szPathSource)-12]=0;
    * J- u1 h2 [; e( n, E* @- z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");8 k# E9 ~( ~, e0 d5 j' o/ a$ r: ~
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);2 g* n% h$ U8 |# D
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);: B) v! ^. `4 t) I3 k5 `# \" j6 K
  521.     return TRUE;. V7 f. i+ C8 O5 d
  522.   }  \0 V' m: Y! {. q: `
  523.   // Nuke 0118: Delete run.exe
      O7 f8 l1 m  t- n) H! c# _+ M) G# |
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ' ]2 v5 x0 M1 u
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");, f( h' K) M8 L- _7 R4 }8 j# C
  526.   if(!ReadCfgFile("Config.ini"))7 ^6 J) D/ B4 y: u6 q: e/ u
  527.   {  }) P# D% K2 R' j5 U- b
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);3 o+ W* H3 U8 O/ M
  529.     return TRUE;3 b, H# u+ a2 N% g5 e
  530.   }  H+ @. N# T! A
  531.   HANDLE mutex;
    * ]  q9 e- @* j2 q. z, c$ D
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ t1 Z' p% t3 |  {' S3 T* S
  533.   {
    8 D3 p; x& v7 C3 s% f" `; G6 f
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ' d" @, k2 F: B4 i% @+ ]; E% W
  535.     {
    0 v$ w0 B4 ~6 y' v
  536.       CloseHandle(mutex);8 [: o- R; ^+ Y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);" ^# Q- }) S+ N
  538.       return TRUE;
    ( M. ], I  f+ @
  539.     }
    7 g: G4 `+ I# Q+ @1 g4 c3 P
  540.   }  
    " T3 S. {% I: o: d  _9 L
  541.   CloseHandle(mutex);
    7 @. K8 h( J: x
  542. ' _/ |; R5 i2 P" f8 r8 [
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);% ]$ q/ W0 k+ }1 Z! D4 v

  544. ; J  w1 e( N$ t
  545.         AfxEnableControlContainer();
    , T9 ^2 I! n$ r' w

  546. 5 O3 T, G9 l* M2 p; C6 z
  547.   bCanUpdate=FALSE;
    + k; z7 s  b$ A% c
  548.   dwStartUpSteps=1;
    . W2 r/ n0 Q' s  t* t5 N# {4 U
  549.   dwProgramState=AP_NOTHING;# a8 J8 ]  U; I! K
  550. , r+ X; C' W$ ]
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);) T5 M& L3 B& J" u
  552. 6 C& [$ W& f/ x6 V+ ]
  553.         // Standard initialization2 h0 R/ V/ O5 j4 B: M
  554.         // If you are not using these features and wish to reduce the size
    * H6 o$ I# l' W5 u6 ~
  555.         //  of your final executable, you should remove from the following/ R9 I  T$ M; {& ?
  556.         //  the specific initialization routines you do not need.. u% G9 J/ k" }% |( Y! m& v

  557. - p# [# b  Q5 _$ P
  558. #ifdef _AFXDLL
    + q' \5 b8 i" r; V7 `6 e8 _. D( x
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL8 I8 u: d8 B$ ?# ~. M
  560. #else* s5 I7 \" X; p( {/ U3 V7 H# b. ^
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically* s' }2 m' K+ K9 a, V
  562. #endif2 r% ^/ _3 H9 Y4 F% w

  563. + b$ p$ S& }. e  E/ v
  564.   dlg=new CRevAppDlg;
    ; F! C4 p- N. L1 B
  565.   dlg->Create(IDD_REVAPP_DIALOG);9 ?9 n7 \! _" p0 @: v; z: J5 H
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    7 V+ ?% d9 A% L& p
  567.   m_pMainWnd=dlg;( \" x& q/ d, f- G% C5 B/ W8 U- }

  568. 3 j/ X: X1 R- \0 R( Q# }/ @! |  T
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);3 F1 x* K4 z' y- U, n5 V' F
  570. / R' U7 x4 v: k* m. d9 ~  S! }6 ~
  571. //  GdiplusStartupInput gdiplusStartupInput;( p. s# Q( u8 B6 d
  572. //  ULONG_PTR gdiplusToken;% \$ m! |7 _/ s& g" ~
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);+ T; }2 Y, ~! F; I$ N$ U
  574. ! l) {. ~5 k- N8 f
  575. //        CRevAppDlg dlg;
    " |. ^/ T& B1 m$ p
  576. //        int nResponse = dlg.DoModal();- x2 Q3 p8 d: `( v; N, U
  577. //        if (nResponse == IDOK)) H6 n8 G3 J" O! ^2 l! Z/ ]
  578. //        {
    # a, C* |+ s( h/ F' Q3 T: v
  579. //                // TODO: Place code here to handle when the dialog is
    5 P* A( I$ o; R) _/ V% b% b6 ]
  580. //                //  dismissed with OK
      w# r, C/ Q! C# L
  581. //        }
    0 n8 y+ ^9 B+ n( S
  582. //        else if (nResponse == IDCANCEL)4 o9 _3 w4 R0 w6 l
  583. //        {
    ' L3 f+ r/ h6 U' B' d2 i% K  e
  584. //                // TODO: Place code here to handle when the dialog is
    ; P1 k# X0 J! e, t+ n6 l5 M
  585. //                //  dismissed with Cancel
    + D3 X2 m. @5 X. [; _* o
  586. //        }" p/ u; T7 N5 {: q8 \& b& j/ z) F. v% V

  587. & \" {' P0 S4 Z8 o& `: x
  588.         // Since the dialog has been closed, return FALSE so that we exit the% m: I5 k0 n: c. V/ S$ k6 C/ f$ d
  589.         //  application, rather than start the application's message pump.- o( T% X) A3 H' |! Z8 |" V; R* Y
  590.         return TRUE;! |- o4 g! O! B" K6 K7 H5 f" p
  591. }- t9 j2 ~6 I. Q& O# q& |

  592. 6 l8 i7 K& t5 \4 k) ^
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    1 y$ `! x* k! n' A$ D0 B5 {
  594. {
    0 ~; H9 q+ e% Z6 `* _  V
  595.   int i;
    " F. f& I  \! j* O: t" k
  596.   char *szRet;) m1 @4 D" q  s7 t5 s, @( G8 |. J9 w

  597.   c$ r$ O/ ~. k" G2 h: @/ y
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ; Y( Y. H$ m: Q0 F& H: [
  599.   if(sztoken). w2 \# M! R) L6 p
  600.   {
    % I* ?4 C( K, x- z8 F+ ~7 P2 w
  601.     szRet=&sztoken[itoken];
    # V: g( n0 y% K
  602.     while(sztoken[itoken])* ^: J; N7 H; _+ Y1 G1 E' v
  603.     {& G( b2 _" x' D8 ]' T3 y5 x) @
  604.       for(i=0;i<(int)strlen(token);i++)4 T( H+ e- y( E; w+ W
  605.       {
    * [* H7 P$ e' t/ x6 E& T" u
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    5 o/ h$ k9 f- f7 C9 G
  607.         {
    , ~9 s  S+ C5 e) T" T
  608.           sztoken[itoken++]=0;) @+ J2 m$ N( C2 z/ U
  609.           sztoken[itoken++]=0;- |5 X4 o. @! [" B5 L
  610.           return szRet;
    5 S3 P8 p$ F1 D8 h# u7 b
  611.         }
    ( i( C% [6 U9 ^6 M2 k. G
  612.       }* S, v/ w' |% o2 F1 \' c
  613.       itoken++;
    + N( k: u+ v3 u/ x% @1 R9 \6 A
  614.     }
    - G% F4 n! ?( ?, k1 G' {1 e
  615.   }
    & y4 ~& c" x0 P+ P  }
  616.   return NULL;  F2 ?" D' Y& f8 z9 T& w# \/ M* {8 e  r
  617. }* O- t( V0 I6 M% {

  618. 9 b3 B' G" W* @$ K
  619. void ProcessProc(long Total,long Current)
    , F' U3 S' I$ g- @
  620. {' s/ @4 a# x3 |# ]: b+ m
  621.         MSG msg;" z4 l! L; U% t
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ j7 k' ?, ~" i$ d: U2 S) W
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - f! l; j3 o9 _: R2 f/ k  ]
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))9 E* A4 o) x5 L# g9 ?6 x( m
  625.         {, V- W1 e; q& {0 G7 j4 G, z
  626.                 if(!GetMessage(&msg,NULL,0,0))8 [4 a9 d7 O; O& E- L. U
  627.                 {2 n! \1 f% h6 {) E  \
  628.                         return;
    ' U% m" w  F8 ^# h: h( k) [& K) m" D
  629.                 }
    9 {8 h9 @2 @9 s9 @* f* r* A
  630.                 TranslateMessage(&msg);5 e1 i! k# H  M- N. }; J
  631.                 DispatchMessage(&msg);, @; e" V: z! w
  632.         }       
    0 V. o2 I/ l  f1 S! c
  633. }
    0 U- b3 m2 u0 J' @6 v

  634. . ^) m2 X( T$ y7 N" C) K$ e
  635. BOOL bFirstChar=TRUE;" I7 U( g$ c0 r, ?$ c

  636. # _1 d2 G. D9 N# ^7 K1 d
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ; L8 j- d, Y. u5 Z/ T
  638. {( C! y7 j( }7 W4 ~5 p; {
  639.         // TODO: Add your specialized code here and/or call the base class
    4 [, G6 |) Y2 B7 q1 n4 g
  640.   switch(dwProgramState)
    7 u/ G+ l, M1 W4 ]* e
  641.   {+ }3 G  I7 L! ?$ Z; @
  642.   case AP_NOTHING:. c- O2 x: i8 l6 s5 s. W0 W. q
  643.     switch(dwStartUpSteps)6 F% a; f' [/ z2 Z
  644.     {
    # ~/ R8 P: `9 s# F: r2 w& Y" S+ ?
  645.     case 1:7 Q2 t8 ?2 O5 y) g" C. R
  646.       {
    6 H3 ~" z# p/ ?" b6 ?& z9 B
  647.         int i;0 ~9 s2 w  t/ [- X* p  ?% N
  648.         CDC *pCDC=dlg->GetDC();% S, b. ]: g5 J0 V7 ~
  649.         HDC hdcwnd=pCDC->m_hDC;
    & T& B. p( w3 {& I2 `$ h7 d
  650. //        Graphics graphics(hdcwnd);
    & t7 w* j: q! a: Y( p9 T2 I
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");- v7 g5 L4 ~/ o6 \: {+ q) q, ?: r
  652. //        INT iWidth=bitmap.GetWidth();3 s' o6 O" }" b# m1 t1 s
  653. //        INT iHeight=bitmap.GetHeight();: I1 z, `. l: y
  654. //        Color color,colorTemp;
    ; t2 f' ^' x6 _
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ) W; c8 x- p+ N6 q- t; Q/ M
  656. //        {3 I3 q' X6 Q$ V& c- L, n0 ?: m  k
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++); b2 p( U- c/ i" F6 v
  658. //          {* P/ B& l: X# R: ]- \$ e0 E; I
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    . w$ j# o, }$ A$ ?' z" l) D. i
  660. //            colorTemp.SetValue(color.MakeARGB(
    + C3 I, z6 B4 \2 D7 g
  661. //              (BYTE)(255*iColumn/iWidth),) P- \) q7 j6 O, d  n
  662. //              color.GetRed(),$ Z7 T, `9 l: s0 J" @& r1 ^
  663. //              color.GetGreen(),
    & N1 P! A& u4 ^% x- x8 J
  664. //              color.GetBlue()));
    % O) Z* U! x( W6 h! O3 l# }
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ' n& y3 U! P7 C$ W' l: F6 J
  666. //          }# s4 y+ v/ ^1 A1 y' P
  667. //        }  v* y/ _6 D  y( Z0 t% ]
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);1 o$ u7 I- V2 a& t
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 ~2 `* m5 K' R; h- G& }, B
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");" ~4 x5 E, S( R+ \; p
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");! W- b& m- d+ J0 ]3 G0 f# F0 q- d' E
  672.         for(i=0;i<240;i+=8)
    4 d' a2 i9 P. ]' j+ [
  673.         {
    8 E" B2 t) d1 A
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);, \# Z& ]# \) u$ `  r+ B
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ P$ P: x7 D/ k9 O  ~6 D
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( V/ H+ U# y" D5 w' r6 U2 k
  677.           Sleep(33);, ?6 V6 Y8 E* J3 K$ P9 L! r  h1 ^
  678.         }* a( P+ L4 A* s. ?9 s& Y# }
  679.         Sleep(1000);
    5 L, D; _% G7 S% W8 G; N  F* o8 X
  680.         for(i=240;i>0;i-=8)
    9 C1 P; }2 Q5 a- l) T* X" R
  681.         {7 m# |* N9 d6 L9 X4 ^* M: H. Z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 l+ j3 m$ C* [- F& I8 Q, ?7 ]% i
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 E1 n; m' u# v& J0 u1 i7 i
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 n- x& _: I% ?4 a1 I" {  E& N9 G
  685.           Sleep(33);5 K8 c7 a) x: X7 v/ i
  686.         }
    % @2 [+ ]+ E( i! M+ X
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);5 j; ~* I  h" A$ R; s
  688.         dlg->ReleaseDC(pCDC);1 }8 S1 X) j6 b; |) u0 D
  689.         DeleteDC(hdctar);1 O0 P8 q7 R( ^" ?3 q9 S4 {8 v! X( A1 u
  690.         DeleteDC(hdcsrc);
    % V1 L" e3 u6 p$ j2 D4 T3 j
  691.         DeleteDC(hdcorg);5 w- T5 N. O5 y
  692.       }
      h& ]$ z$ `1 @$ X5 h
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    / w- b5 W4 _, @5 G; G& ?
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    , {' h4 s1 A( t8 J* R( g9 {3 k
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");/ [" @: ?9 e$ ~5 |: R. ]& B: l: u
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");7 d2 B6 x8 s* D( m5 G) P, I$ f# s
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% f6 [7 b/ Q% V' I. o" ^
  698.       if(!Dn.Connected())0 \, t- Z8 {5 J+ o
  699.       {" C( v5 M/ g4 S2 r$ H+ ~1 q
  700.         dwTotalFiles=1;" m8 T& R! G' j2 N- o
  701.         dwDownLoaded=0;
    ! F. g; G) o0 f# h( }: Z0 {) F
  702.         bSilentStep=TRUE;
    ; w+ r- e4 D# ~) S( [0 |2 V2 p  ^# r" P
  703.         bCompressed=FALSE;( D; A$ j6 d! h& E; L
  704.         strExtLocal.Empty();
    * b4 j: l/ I3 M$ |
  705.         strFullName="readme.txt";& r8 q5 x& i) U, J% J4 ^
  706.         dwProgramState=AP_CONNECT;. D7 ]+ K7 C- J/ u/ ?/ _, t
  707.       }
      }2 j+ V4 A! P- _+ M6 a4 l+ K
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    + S& x1 s3 i; C5 D6 I* L1 R0 j
  709.       dwStartUpSteps=2;2 s1 e! I  l3 r
  710.       break;
    6 s" B) V  x. t* U& B
  711.     case 2:# d5 z3 M) I. o- H/ j
  712.       {
    7 [! d. A$ C0 Y# I5 F
  713.         int iEOF;
    " w4 l2 t* G/ m0 `
  714.         FILE *fp;/ g. d1 n8 E4 y6 D
  715.         char szString[512];( r0 v. ]8 }; O1 M7 ]& J
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");2 ?4 A5 `: P* I! A0 W
  717.         if(fp)/ `- g" F1 c; M- i
  718.         {7 m. Y: P. Y! W4 V/ k/ o9 D  {. Z" V
  719.           do3 m) y- f: L. X
  720.           {" p% u; m9 `. C+ v( B% ]9 @+ R
  721.             iEOF=fscanf(fp,"%s",szString);
    6 `3 H. V( E- I! W" z9 y
  722.             if(strlen(szString))
    5 B5 C. Z0 V3 x* {5 p
  723.             {
    3 B4 p9 A/ F7 }+ s
  724.               if(bFirstChar)
    ) x; W8 E$ O% d* U' [- K& d9 h, t. P
  725.               {2 S; G3 E3 |' O; N0 D6 O
  726.                 bFirstChar=FALSE;- ~4 E# G' R) n$ U
  727.                 bConnectIsBig5=FALSE;
    4 y) s  ^' M$ _
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    7 M5 _0 G3 S# M1 V+ w8 T2 E
  729.               }' L5 ]( p: g2 ?; F" k6 G4 H6 q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ( ?, r: K- W( w2 W* I2 ^" T
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));0 M- E, d1 }& X& y5 ]& K2 K4 ?
  732.               dlg->m_ListText.AddString(szString);
    ) Z5 a9 u9 F8 ]. v0 |
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 d- x: }0 ]0 v3 Q4 }
  734.               *szString=0;
    ! w, S! F& T! d# @
  735.             }
    ; R5 J0 U. P& g( h
  736.           } while(iEOF!=EOF);( V; K2 {# I+ h3 U7 Q, n" a0 H
  737.           fclose(fp);% x* k2 P9 q) z, u- U
  738.           unlink(".\\DownLoad\\readme.txt");) \6 X+ B! B6 s" f- D
  739.           dwStartUpSteps=3;
    ) b1 M. O8 E# j
  740.         }
    - w2 M; F1 C; c* _
  741.       }' X; q( E% t$ Y8 m* Q, o) S) z& @" N$ N
  742.       break;, ~7 r) I& }- x6 s
  743.     case 3:
    * A! e) H: C0 s3 Q1 V$ V
  744.       if(!Dn.Connected())% ?; w% Q1 J/ U
  745.       {* }/ O% [# D$ n9 U$ c5 J! j
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ( y$ C% M; J( A
  747.         dwTotalFiles=1;
    - I0 ]3 T* S1 E5 K7 J
  748.         dwDownLoaded=0;3 y% f" r! @/ r5 G3 q+ K: l  v
  749.         bSilentStep=TRUE;: b* X- X. O7 f1 t/ K
  750.         bCompressed=FALSE;' V0 v5 N2 j7 \: t3 B  T  \% o
  751.         strExtLocal.Empty();
    ' {  V& \0 e3 u; P
  752.         strFullName="checkversion.txt";" P$ O( K' o" E+ z) Z. t
  753.         dwProgramState=AP_CONNECT;! o0 r) d- ]. B4 w
  754.       }
    ' \+ G( I2 ~/ |; X3 J
  755.       dwStartUpSteps=4;2 O. B# i3 F* s1 c
  756.       break;' W& @/ R3 f# i: u8 o
  757.     case 4:
      G5 F+ Z$ \- }5 g
  758.       {
    + m5 {/ x8 J. L5 N- t
  759.         FILE *fp;& h! J2 @  `9 w: U# W
  760.         char szString1[128];
    7 X' q% c3 k* L% ]6 u/ D4 {. i
  761.         char szString2[128];# y( a  a2 ~# j8 ~/ f( i
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    + a* M# l! ^2 J0 P4 j
  763.         if(fp)
    5 O; \. }6 e6 C/ N
  764.         {
    6 p; z* J. |  ]+ R9 y6 L/ h
  765.           fscanf(fp,"%s",szString1);
    5 e  u8 F% A) @' {7 ~+ v8 Y
  766.           fclose(fp);
    8 R' q9 ~. C* Q# a
  767.           fCheckVersion=atof(szString1);- V+ s( }, _& l5 A1 {7 J
  768.           fp=fopen(".\\checkversion.dat","r");1 \8 R( P/ S* W
  769.           if(fp)
    ! C- R* W- o3 j0 D) c7 y
  770.           {
      S- X  }' p# m
  771.             fscanf(fp,"%s",szString2);
    7 h% H& g  _+ @2 U8 h( O$ {
  772.             fclose(fp);
    : F: l2 ]/ s" e7 p& q
  773.             if(atof(szString1)!=atof(szString2))
    5 ~2 R5 v; M/ j4 P" D5 T% V
  774.             {
    * J: n4 ^/ b( @# j- z2 d* w, P. w
  775.               if(!Dn.Connected())
    : j1 @! F: q* d
  776.               {
    % y; A; y: U8 _" J1 Y
  777.                 bFirstUpdate=TRUE;) w4 P3 V+ ?3 N" x& x; h
  778.                 dwTotalFiles=1;
    ) f2 u, |1 E, L
  779.                 dwDownLoaded=0;
    9 j; Y1 j( R3 j/ \' ^( U
  780.                 bSilentStep=FALSE;
    * O" h* K2 T: X3 D$ F- @% D
  781.                 bCompressed=TRUE;  _2 K/ n7 n& z' @( @
  782.                 strExtLocal=".\\DownLoad\";& V! t) Z7 ?% \, {9 I" ?* F7 L1 M0 s1 q: c
  783.                 strFullName="update.txt";
    7 p; a- u. p4 V$ L8 {1 q
  784.                 dwProgramState=AP_CONNECT;
    ; U* w; Z$ h. T
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) P8 m# n- ~; L+ w8 x7 J  ]2 i
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 j9 `" C) E9 H2 }
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");& r9 E' z+ |: d5 I- f* N
  788.   P  v; ?4 m+ d* S( L& G+ |
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ {' x! r. F: g. s/ \4 g
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ' R. G, c/ z/ D' b  Z; T9 E- g
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)6 e( F. A# [) {
  792.                 {3 a+ Y& V& s6 h! \. ]0 h% B
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    / Z2 \" [' x% j: U% ^- U3 |
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");5 {4 }4 _# ~( ^6 J; o% Q7 v
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 }5 u9 }2 O( j9 E7 V
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' _% V7 _/ r' E" s' G
  797. # L5 p/ Z2 v+ q  M' _1 g. t' ]
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; ~$ t( V$ F+ @/ m0 Y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * y9 d0 u1 v% M% ?: X
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    " r8 P8 B/ @! K& i6 V( t
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ c8 b; s" G# Z9 B( Y" s! k. g0 m
  802.                 }
      C8 A: i. V2 A" d& ~  k8 w
  803.                 dwStartUpSteps=5;5 ^! e! u5 y. |" ^, v2 T) _/ ]
  804.               }
    & r$ s; a5 m9 `+ P
  805.             }
    3 z2 @6 C' I4 D+ X- b% _/ ^; {
  806.             else
    : \! X3 @+ H  Q8 J' \
  807.             {" ]: }3 v1 S5 o- W& m5 h2 R/ K0 Q
  808.               unlink(".\\DownLoad\\checkversion.txt");7 n) D6 k, e7 X) P) }) G! ]
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 D5 O( w# |4 ]9 B
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    3 p. _+ C/ F, y; t
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");: E3 t  }- A  ]% J# c
  812. / a' P, \1 R5 x( U. F
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 H+ h- Q, j) r7 u; H4 `/ I
  814.               dwStartUpSteps=99;  @' h9 C/ e4 ^' U9 C( G1 p8 b
  815.               bFinishUpdated=TRUE;% j1 f9 `8 X* p" y+ |5 j
  816.               bCanUpdate=TRUE;
    - F8 z5 ?6 i+ G& U& z9 R
  817.             }
    7 q. p7 m3 y. M( H; x
  818.           }
    % f/ Q8 `* H, K6 P  M+ p
  819.           else
    ) v% T9 i( v: l
  820.           {, Z+ g1 e& N4 p) P# E
  821.             if(!Dn.Connected()); T3 d$ j; Y8 o  b; ~) D7 k
  822.             {# W4 Q, P! m! T. n9 G1 ~) c
  823.               bFirstUpdate=TRUE;, P) f: P& T, m( H- e
  824.               dwTotalFiles=1;
    ; c- e* ^$ ~& T8 F7 c0 i
  825.               dwDownLoaded=0;
    ' |( K! O* t! I0 V8 y5 r
  826.               bSilentStep=FALSE;( v( X5 k. \8 t* P
  827.               bCompressed=TRUE;' E- g5 T! M+ ]
  828.               strExtLocal=".\\DownLoad\";5 \$ |3 X: \3 C+ q& h% I# F1 J
  829.               strFullName="update.txt";; k. G7 h9 R  X
  830.               dwProgramState=AP_CONNECT;* T1 W9 ]+ G/ i
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + v7 G8 I' O0 F# c) }+ r% m0 O
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ' F* y5 W) f0 J- {4 R
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 o8 H8 b% B; B  h. k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& L% a+ E2 f) M; C; Y% H
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ) ~; [8 r* H' c! t
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ! _2 Z6 D% z' a
  837.               {
    9 l& E" i3 v5 h2 }, }
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ! V; c$ {5 W2 M& l6 U, R' r) Z2 c5 T
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");/ U- S/ r- D/ j+ b( ~
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");3 b0 d% K  w: ^9 k% H/ w
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# c8 q' P# M8 O- ?8 R( p- @9 c
  842.                 # H8 J3 D3 ~' _
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      I5 G8 H+ n' e$ a0 @: D! L! c
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 X; L: \& |, i# B- v( y+ _, F: d1 n
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
      H- O& p! R; D: k2 A1 u3 z6 _
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 c# x3 k+ g6 V& L9 b0 y
  847.               }
    ' _+ o7 i% d  D7 w( S9 [; k& ~  ~
  848.               dwStartUpSteps=5;
    ( C* D+ @( |) k2 F& d, g
  849.             }6 @5 C8 j4 j, @( f' E
  850.           }/ t% w1 G+ H7 a
  851.         }' }5 {2 m& H6 Q9 D, U5 V
  852.         else4 p1 d$ r, ]' S1 d  V( G" G, p0 i
  853.         {3 i/ I9 f4 R/ n9 Y
  854.           dwStartUpSteps=3;  z" \/ p4 U5 N$ j; R
  855.         }  R/ t+ s' E2 [% I
  856.       }
    ) g1 M( W; q6 z; I" I& T
  857.       break;
    ( W8 D7 k# d; W* D* Y- A) e1 I
  858.     case 5:4 t: v; ]5 n- ~/ M! {' y- d
  859.       {% R: P7 l1 J# l# e( l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    + R2 T+ E5 w* E9 Y1 J$ W
  861.         {
    9 V: J: I! A; o: M+ W; J) t) y
  862.           int opt_overwrite=1;
    8 W/ v  B! M$ O. h0 r
  863.           int opt_do_extract_withoutpath=0;% |! A* |# W! E$ m  ?6 P; u
  864.           unzFile uf=NULL;
    + E" Q2 a5 G3 M* i$ z1 ]

  865. , @0 S; ~. l% S6 N4 o5 K3 b8 d
  866.           uf=unzOpen("Wsa.zip");
    $ T, }1 F; T" v- ~+ S# x3 l( t$ L
  867.           if(uf)
    ! y6 Y: R2 ~2 I! @/ f0 x* N
  868.           {
    + L0 T  O% a6 D$ ?! y/ B
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 z4 A# ^) |6 T5 L
  870.             unzClose(uf);* j9 T5 t+ ]# c8 {$ _
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    " O( N5 L. z6 z+ w& g
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");8 P2 G% \7 {& l' q
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");, Y+ }" E+ c  L
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% h* O8 V+ j- m" E- J! s4 ^
  875.           }9 e8 J: m, g. Z9 U. Y
  876.           DeleteFile("Wsa.zip" );
    5 i2 M/ Y' N/ U" Y! H
  877.         }
    # g  B( ~' F' X4 d1 k

  878. - t2 U+ |2 l! |
  879.         if(CheckLocalVersion())
    * M* k/ Y& g. D* L1 k
  880.         {8 V+ U1 L7 l3 w& ~
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");# P) v0 K1 [9 Y. a8 i# J, n, K
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    # S$ B8 v% m/ k* X. i5 g" U' u& H
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");+ \: \% p5 J$ l
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# W2 G6 r1 \8 C, n/ R
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    5 x1 f. m9 k. t1 v
  886.           dwStartUpSteps=99;2 u1 D& B4 D, s( u
  887.         }. q. S- s/ Z& q6 m* c( L
  888.         else
    * L! k# Q: i( V- S
  889.         {
    * x" d* I9 f* b$ d& x: y9 h( ^8 F
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    & y1 H' b+ ]) e, S6 P
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" v& h" b/ \7 |. R; D% l9 f
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 s6 o: S5 \; }- W

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

6 P+ c3 Z+ A2 |' `3 a6 |; s/ |/ T

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

寂寞在_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
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部