CSUpdate.exe源代码

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

) ^% [' _- M0 B) y4 F6 p
  1. / RevApp.cpp : Defines the class behaviors for the application.) L6 n0 Q# d4 G9 {
  2. //! w( H( c* z) B# s

  3. 1 a$ w/ ?8 s1 `9 C4 Z' U
  4. #include "stdafx.h"  Q5 U$ j/ B5 s# O9 K3 v) i$ w
  5. 9 T4 ?  |/ P6 p2 R. s, n% V
  6. //#define UNICODE
    . B/ m: F( q9 N- B. j
  7. //#include <gdiplus.h>( A+ Z7 A4 L) m2 h* H, `/ e4 D( Y7 }( R
  8. //using namespace Gdiplus;5 n7 D4 ~; A( X* T
  9.   v' B7 J$ h4 v2 n  I0 v. F2 N) i0 |
  10. #include "RevApp.h"( o) ?/ e5 X# V
  11. #include "RevAppDlg.h"! T2 y# F* c$ T9 @( a) c
  12. 0 _  W/ A& j9 o" m7 v2 q  P; D
  13. #pragma warning(disable:4786)
    2 O# e0 L. G" O4 Z; V5 \7 ]' R
  14. #include <map>" J  J* A5 O* g% L) D, ^, n6 ]
  15. #include <list>
    & Y$ W2 h! {" l' {* @* u5 b
  16. #include <direct.h>* c/ k% Q3 b: q- b% v

  17. 3 I# D& {7 F, N8 p: q3 B
  18. #ifdef _DEBUG9 n( ]( h- D$ A3 x( S2 h
  19. #define new DEBUG_NEW9 |' l: [( V2 ^- T/ k
  20. #undef THIS_FILE* z) N$ r( M' ~4 @6 o
  21. static char THIS_FILE[] = __FILE__;" W, M# b/ K+ L1 B; V5 _
  22. #endif
    # d9 _$ H7 W5 J8 A
  23. #include "SkinResDef.h"1 v* R. Y1 T  j+ |7 V8 W
  24. #include "ChangeBG.h"
    # S1 a; Y: r& k
  25. #include "AFXINET.H"
    6 a9 H! Z1 j+ z% q, J
  26. 7 V. {! n1 R7 }, r. N0 O8 ^
  27. #define TRADITIONAL_CHINESE 0! X* H8 Y$ t5 p: u: G  ~7 ?! x
  28. #define SIMPLIFY_CHINESE 1
    ! I1 L; u' N* S" t% Z9 Z3 |# f( x
  29. #define ENGLISH 2' X/ E6 y& b2 [. i8 l
  30. int m_iLanguage = ENGLISH;
    # R4 d% A. q4 x0 b) x  w
  31. /////////////////////////////////////////////////////////////////////////////) q$ ]# V: I, f; [. r
  32. // CRevAppApp
    - b2 f0 B" t( r

  33. 8 ~/ A* o* I3 d
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)- A/ E# W& [& ~
  35.         //{{AFX_MSG_MAP(CRevAppApp)4 y+ Q4 @# Q) s- Y, N
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. s7 w) H/ j0 x5 E% V( A- h. `
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    % v( w8 R. o# @' c1 j5 h, w* b
  38.         //}}AFX_MSG
    ) Y% \5 o7 |" p; T+ N2 U6 l% a
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ! r8 F* J. V* G  d7 W" ?* j" s
  40. END_MESSAGE_MAP()
    0 B& a& `+ \( a" b" ^+ \" D. M

  41. 8 v; C2 o/ E8 f- N/ a8 K. t
  42. /////////////////////////////////////////////////////////////////////////////& }8 D) z% D6 b
  43. // CRevAppApp construction
    % q2 _0 b+ q* T* a
  44. 8 \" x# Y6 {# M4 x" l
  45. CRevAppApp::CRevAppApp()
    6 U: {# ^2 J! \% b
  46. {
    ' \* o0 A7 ^( V9 @! t+ ]
  47.         // TODO: add construction code here,
    1 ^- A7 ]; ^2 y7 w9 _0 N  W
  48.         // Place all significant initialization in InitInstance
    7 a  n- b$ o* T+ t, f( d& ^
  49.   bDisplayIsBig5=FALSE;
    3 X& Y9 i3 ?! B+ Z
  50.   bRestartUpdater=FALSE;
    1 a3 @5 l3 l4 D8 R- t+ ?4 f
  51.   bFinishUpdated=FALSE;
    8 M- B4 Y6 I. G+ Q9 e) e+ s* [6 \" b
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;. G3 N' f9 [& u( S
  53.   InitChangeDataBig52GBKS();9 n( `) x" n" O1 A6 C
  54.   InitChangeDataGBKS2Big5();
    5 @$ H, R% X0 K( Q. n# Q
  55.         //; O) y1 Y$ ]) W) |7 r) s' H- ?" }
  56.         bClickRunExe = FALSE;( w/ X6 L4 I4 j# k1 x! @4 Y3 q) \
  57.         //
    0 X. |6 r& Y2 d0 L5 p  O% o
  58. }
    0 _# q7 a6 m' h1 U$ e% x
  59. 8 w% J! Z% u4 u
  60. CRevAppApp::~CRevAppApp()1 A  P# p' O3 {3 d% M
  61. {
    & o5 y8 D. ?0 I5 ?: \! O
  62.         // TODO: add construction code here,
    6 V8 ~8 C. H3 F2 I; S
  63.         // Place all significant initialization in InitInstance
      V( Y& D! o; ]2 n1 D
  64.   EndChangeData();& G1 @2 r" P4 v' u  }" X. r- Q6 x
  65. }9 ?' I, u: L+ {$ F
  66. : ?& g0 {' J9 t6 s1 v
  67. /////////////////////////////////////////////////////////////////////////////
    . @0 E% j2 Z& w+ k& ?/ o
  68. // The one and only CRevAppApp object
    & s. k. E5 [8 d5 r, L; S
  69. 0 |, B5 z6 z6 I7 {# P% G: Y- |& j; {
  70. CRevAppApp theApp;
    ) D8 q$ Q3 V* a; h% e% ], t2 ~
  71. ' |' d# L( y) |* K! \
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
      [, L3 K% N$ [( L; F- {
  73. {
    2 g( @# u! I$ N! J8 D, l6 X" m4 `( }
  74.   int iEOF=0;+ }3 v, O6 y! g$ z. A- m. G
  75.   char szTempName[MAX_PATH];* B& z0 i2 a9 z/ D
  76.   *szFileName=0;
    8 }" g' {/ T2 M2 R$ X
  77.   iEOF=fscanf(fp,"%s",szTempName);* j2 {4 U2 |+ _/ u* l" s
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    - O' P8 X, P; F1 R: {% V9 {( a7 ?& f
  79.   {
    # h0 e' Q6 q  }7 Y# o" a9 _
  80.     strcpy(szFileName,&szTempName[1]);
    ) v# f1 n2 u$ D9 c0 T) a
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)0 w5 v* e2 a/ |4 _' S8 h3 \% R
  82.     {2 U" m& w$ i. M- e. B+ \
  83.       iEOF=fscanf(fp,"%s",szTempName);% Z5 @8 K5 s, y, l5 Y: C
  84.       strcat(szFileName," ");& M$ F& T2 Y& V1 k
  85.       strcat(szFileName,szTempName);
    / I' S' a# F+ j) P- U0 q
  86.     }: e5 h3 U9 _, @% s5 C7 o1 S) h
  87.     if(strlen(szFileName)>=1)
    * M+ t) A6 @. S8 c  U( F" F4 k
  88.     {
    6 F# T0 A$ N) C0 P
  89.       szFileName[strlen(szFileName)-1]=0;5 F/ T$ W/ C. a) V# R+ Y% `" j4 H& h& |
  90.     }
    % D# I2 m" [9 U; W  l5 h$ Y5 h3 G
  91.   }
    - h' O( u: Y' q6 k
  92.   return szFileName;
    0 A: e! h, H- ^- D+ B* X
  93. }# i! _& b) h" v( c2 h1 L

  94. 7 Y+ Z9 m. D1 _/ k; l5 {
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    1 L* d0 b9 B' m$ k1 v+ c2 S; V; _
  96. {  F2 C  N6 G- C4 I& b2 u! ^
  97.   FILE *fp;. u- u* K3 V3 {/ L8 g; a7 n
  98.   char *key=NULL;+ R, Z: [  k7 b1 I$ a+ v5 G5 N
  99.   char version[MAX_PATH];- C- @; N9 S+ C0 ^$ K
  100.   LPUPDATEFILE file,olds;2 w: E- M4 R9 j4 m2 a
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 Z) y2 d* F6 M" H8 \" f* ]
  102. " L: N1 a) o5 {4 c1 W* G6 r4 ~
  103.   UpdateList.clear();* M+ a% F+ P& A& o  }
  104.   UpdateFile.clear();- |+ a8 }+ q& w$ X5 _" ]( w
  105.   if(GetFileAttributes(filename)==-1) return false;
    " j5 e' _) c  c, x
  106.   if(!(fp=fopen(filename,"r"))) return false;
    9 R0 q  r2 f: Q$ c( o& y% ?! J' J
  107.   fscanf(fp,"%s",version);
    ; g& T! K, {$ L& c& l' o' O
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    / G6 \7 O! ~6 N4 ]: a3 [
  109.   while(fscanf(fp,"%s",version)!=EOF), V# ?) c" V" u$ |7 f7 v; s
  110.   {
    4 L) p6 n( n: e( k
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ o8 O7 k: m. v
  112.     fscanf(fp,"%s",file->path);
    & q  u; `1 m' Q7 D7 t( U
  113.     ReadFileNames(fp,file->file);  M) y0 I! Y  Q, o9 [/ E# i: b$ b
  114.     strcpy(file->full,".");8 S+ u# h7 `- n1 G
  115.     strcat(file->full,file->path);$ m. G# |% h- S
  116.     strcat(file->full,file->file);
    9 D) s* Y6 s" |/ I" z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())0 ^6 I# x% v+ Y1 Z" s
  118.     {" J$ \) U1 S7 Q! m
  119.       file->vers=(float)atof(version);
    , O" S0 c, W. u! w( P. t
  120.       UpdateList.push_back(file->full);
    6 F+ x; @* h/ z  v  C- s
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    8 B% Q4 {3 [: O9 }: I
  122.     }) p1 v( M* y. Y
  123.     else
    3 a8 |% X4 n9 \0 y" F" A* J
  124.     {
    5 h0 Y- p& Y- K- D  [" n
  125.       olds=(*p).second;* V: k% ?3 B( Q* W$ Z" w
  126.       if(olds->vers<(float)atof(version))
    6 a$ ^$ K. p" ~4 K$ `
  127.       {3 W% b$ }5 Q" W8 r/ u& P
  128.         olds->vers=(float)atof(version);; i/ i  _! I2 _
  129.       }
    # {5 [% C! y* ~' Q, n# x) b) h# X2 M3 z
  130.       free(file);
    ' r  ~7 S2 B( t' ]0 L9 L7 C" E
  131.     }
      c/ E. Z: M# o3 r3 L/ B, s
  132.   }
    ( L& S4 d, b( g- z8 Q
  133.   fclose(fp);& H, E/ y4 S" D0 C3 ?
  134.   return true;
    2 b% r+ z: _( [* f/ T3 K
  135. }" }/ H' M' ^7 `7 v  A6 P
  136. ; u" |7 z; c/ L: f! U9 K* q5 ?
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    0 v& I' ^; k, E7 x) ]. E
  138. {  ?* m, ]5 z0 Z( G
  139.   TCHAR  szFull[MAX_PATH];% H) u! A# P, \1 I5 E! F; v+ `
  140.   TCHAR *token,*inter;
    " ]. X& _/ u2 X8 x' w4 `
  141.   *szPath=0;
    - b: j. t; N4 H% x$ C
  142.   strcpy(szFull,szFullPath);
    9 b! @8 T; ]" l' q
  143.   token=strtok(szFull,"\\/");
    6 i$ y2 Q3 M4 y6 C* ]8 E* G
  144.   inter=token;
    / ~& h) t. r  ^0 A
  145.   while(token=strtok(NULL,"\\/"))+ L2 A. S! |7 X+ Z
  146.   {
    5 r6 E3 F7 V, S. w
  147.     strcat(szPath,inter);
    - V! s- g5 j2 J
  148.     strcat(szPath,"\");7 a& O- Q9 j( u) W: {7 g
  149.     inter=token;
    . E6 B; g. c5 b# _8 R
  150.   }
    # F& @5 ?5 \5 L1 i
  151.   return strlen(szPath);
      ^% s/ B  `4 m) y
  152. }
    9 a  p- ]- V! r* K) |

  153. ; h( S- g  l4 X2 E' b" b% z( m5 W7 k
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    8 U, M& y3 k4 L5 ]9 X2 A0 U
  155. {& [. H( [4 d6 M+ _! }& c+ D
  156.   DWORD attrib=GetFileAttributes(Target);) ~9 U7 i2 h" H  g* J2 X
  157.   if(attrib!=-1)
    ' t. v7 K0 K. I  p
  158.   {
    " Q& D# Q: [: I& T! I
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    / a9 U8 v! k7 @0 h# V  s' \( T  K
  160.     {
    1 j* y4 P, I5 C2 N- D
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);6 R- L7 H9 S9 Q3 X# Q( T
  162.       SetFileAttributes(Target,attrib);
    - k+ m4 g- y9 }1 ^+ H: F
  163.     }0 [& ]" C* D' M% L
  164.   }* _. O5 ]$ \! X* \: W
  165.   CopyFile(Source,Target,Erase);, |. {. O8 T( q' ~9 O2 Y# b
  166. }
    3 n2 B, L: H! v% p' s% V' @
  167. ( f; ]) C: J: a3 A' k
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! y) r2 n8 }* r2 N7 m
  169. {
    5 N* ]) W- ?  Q2 E
  170.      FILE *fp;
    / Y. X! G' _! Y" P" F3 z6 E$ J
  171.      char  szBuffer[8192];
    2 |1 C3 p( N6 ]& T. i; Y
  172.   va_list  argptr;
    ' R2 M: Q" O9 J8 F

  173. : c1 {; W# k+ h& b9 {5 r; D
  174.         va_start(argptr,message);0 d# i2 O) @3 U; R' p% g
  175.         vsprintf(szBuffer,message,argptr);  D: X- w# L& m& U& c6 p# `% K+ y( b
  176.         va_end(argptr);1 i% N$ U! I& E5 X- U9 O
  177.   fp=fopen(FileName,"a");- p: U: a/ T9 b
  178.   if(fp)
    / V$ r) Z# j: y3 n' V
  179.   {% b' U8 g0 ?, J, w# ~
  180.     fprintf(fp,szBuffer);5 ]3 A  _7 W% T
  181.     fclose(fp);
    . T& ]$ m' a8 l
  182.           _flushall();+ f/ s: Z5 ?0 i) Z' V& q4 O9 D2 i
  183.   }' r& {) c% P) E2 c6 L
  184. }
    8 G6 S! G; U' i2 e
  185. - B( |" V* x) F( z8 A/ T& k
  186. BOOL CRevAppApp::Fclearf(char *FileName)9 K; e% |- @. b5 O& R* ?! A- [
  187. {4 L4 h& K& {( z9 u. M8 }' _" @
  188.      FILE *fp;( F( J0 J1 e$ `
  189.     DWORD  attrib;7 U% l- l0 q4 @0 |$ k6 D
  190.   attrib=GetFileAttributes(FileName);
    ' z: M9 w* A9 \
  191.   if(attrib!=-1), J  [$ |; ?& i0 j( t
  192.   {
      K: O& h9 z1 T6 [/ A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);# l4 L) N5 t# }( U& T9 h
  194.     if(!SetFileAttributes(FileName,attrib))  a  F9 k- S5 N; v
  195.     {
    5 j) U7 ~* v, ]0 S
  196.       return FALSE;
    % Z9 u% X2 Q" l8 n  Z/ R
  197.     }
    . }' y/ i' Y, o  ?; R
  198.   }
    7 ]8 q2 ]$ _* o
  199.   fp=fopen(FileName,"wb");
    7 e( Y0 Z/ V, ^! G
  200.   if(fp)
    1 Z, ^2 h! ?8 W$ d$ ~* S5 z
  201.   {
    , |+ C# b8 M2 x- J
  202.     fclose(fp);  ?* t' ^0 k9 v: [5 S0 {
  203.   }* y; j* Y4 u! |& s8 u
  204.   return TRUE;$ ]4 D9 h  c) X% c- D8 c7 |/ T
  205. }
    6 K! _4 s1 z0 i+ k5 c8 j  v1 F: s! p/ |

  206. ; l0 i: k/ ^- F
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ' o& K8 }1 D0 \+ d$ W0 `+ B' T
  208. {
    2 B* r. z" I" T: H' Y: F% A
  209.   char filename[MAX_PATH];& ~! Z- z- Z% h, \3 v6 |
  210.   LPUPDATEFILE file,olds;
    $ v4 J! H1 z0 G8 `- B, n: T
  211.   std::map<int,CString>::iterator i;
    " \! P% c- U. _4 R6 F- O. k
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 ?6 ^5 }) a# x5 `) h
  213.   std::list<CString>::iterator l;
      d5 Q; W" n4 v' e' K) B. S7 ?
  214. , [2 y2 y% t9 Q" v% C1 n) w% W
  215.   if(bFirstUpdate)$ ?9 }1 o# B1 Y0 `+ o+ Q
  216.   {# ?7 \" |. }, b# `$ `
  217.     dwCurrFile=0;. Q  ~; G! p% E+ G1 V7 L
  218.     bFirstUpdate=FALSE;! ?! T2 A3 }. x4 j$ ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())" g; P6 e; F- y1 ^) Q
  220.     {8 E3 ]  Z" t. n7 O( s/ d% h1 q
  221.       dwTotalFiles=UpdateLocal.size();
    ( {" K6 n- _+ U  j" ^
  222.       dwDownLoaded=0;
    " H7 v+ e! D! z$ X) g8 M: T
  223.       bSilentStep=FALSE;
    7 C3 F' e, T; r' ?% R
  224.       bCompressed=TRUE;
    & L. K9 j* X4 f8 w. d3 H5 [
  225.       strExtLocal.Empty();
    0 ~6 c5 n4 p& M
  226.       strFullName=(*i).second;( o6 e+ W. ~6 k$ P
  227.       dwProgramState=AP_CONNECT;+ s7 T" ?: J. ^0 W7 T- v; h0 W1 W% D
  228.       return TRUE;. Y- s+ h+ P( S4 {
  229.     }& V, c8 V, k4 _( T& Z+ h
  230.   }7 X( h* V  j# w" b& t
  231.   else if(bRestartUpdater==FALSE)& U$ u7 _  k+ _  P, F
  232.   {
    + W3 w$ Y+ ?9 u' B9 D* J' u) ]. j
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())! v, j4 g4 I8 C, G5 R/ l! Q5 l
  234.     {% p# c2 L+ I: s6 @* ~
  235.       file=(*p).second;
    7 t% W4 `/ S7 t, S# \
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())4 {9 b# u. Y2 X2 \; f& E, v. }' B( _
  237.       {* e. }: T! }$ Y4 m  s
  238.         olds=(*p).second;7 A& O0 w) ~0 p1 g
  239.         olds->vers=file->vers;, U% c; l+ p" w1 u0 }$ B
  240.       }) e2 X& L, ]( q) p* \  }
  241.       else. D7 _2 v6 d: Z4 J- F7 E- {
  242.       {
    7 \! h' K% A+ Y. p; u) S) [
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! H( \/ b1 S# a2 A: S. I
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) @2 f. `) \6 ^
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    : I, w& m& P  Q2 F6 |0 `
  246.       }
    - k; V. i- |% J) Z# H3 D
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    8 f6 D- ?" P  _3 T
  248.       sprintf(filename,"(%s)",file->file);; p. l5 z0 ?+ ~% R; M/ f3 y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 F& f. \( Y0 l, Q+ k
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }# ^4 O, x/ D1 f
  251.     }2 f' C/ Q* h- ]4 N% P! |# d+ ]; I
  252.     dwCurrFile++;
    9 e6 H" h1 A- t# y! k9 \
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      |/ t9 D1 C- R" @
  254.     {
    ; c6 X7 M! [% e; c
  255.       bSilentStep=FALSE;5 F3 H4 H! P& ]* v, l
  256.       bCompressed=TRUE;
    ( j/ k4 h, R1 J/ c: U" n; s! j
  257.       strExtLocal.Empty();
    9 H: b- ?7 U1 ?* h& a) U' l: }; @
  258.       strFullName=(*i).second;( s( N2 y) w/ [* [5 _% w0 \
  259.       dwProgramState=AP_CONNECT;" J- x+ D" x0 O# W- E# i
  260.       return TRUE;
    4 _. g+ L4 L: S7 n
  261.     }/ S$ U- u: ^& K; ~3 \# D9 s
  262.     if(!bRestartUpdater)# v! E9 I$ v  \  q! ~
  263.     {+ [4 f/ ]" _* V. z" Y4 C
  264.       int iCurrSize,iFileSize;+ J1 {$ ?) M/ h6 g
  265.       iCurrSize=0;
    - \' u/ A. J9 T8 A1 K
  266.       iFileSize=UpdateList2.size();
    ( X; V( N& @  @6 ^; ^. m
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    - n2 o- U* u* v2 u. h# k/ \5 @
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    7 u- @% F, Z* I% M4 X+ k
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    & }# i0 i9 F( C- I) c
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( f+ G. N" b/ \
  271.       Fclearf(".\\update.dat");
    0 Q0 k4 ^; z* e  E- h( Q5 c( p
  272.       Fprintf(".\\update.dat","Bloodyf\n");5 O% [7 P# L2 A
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)" Z3 S! I/ ~* C: T* _
  274.       {6 X& {: y8 x' ]. e
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    3 i3 Y6 `: v# U. Z+ W, Q
  276.         {, e1 t' g4 `8 _' A8 i; y+ g
  277.           file=(*p).second;1 v- L* G! p2 @% t: D
  278.           sprintf(filename,"(%s)",file->file);. v( E- P0 a1 N1 K
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 H! z) m$ m; g, g' ?
  280.           iCurrSize++;. \/ Z& D: o+ D) z  m( n. t
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    8 ?& c4 o2 c/ f: `8 M6 H2 a7 ?
  282.         }4 m) x* j& i3 _+ t& E$ s
  283.       }  Y: e8 l2 Z% g) W
  284.       unlink(".\\update.txt");
      o  J2 U* b' t7 r; l# p/ J3 D5 `
  285.       unlink(".\\update.tmp");
    ) b6 P- }" X7 n( [2 _
  286.       Fclearf(".\\checkversion.dat");
    , G  L6 x; A5 l, V5 [0 C  W
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);2 J2 N/ l# t' `& c
  288.       if(UpdateLocal.size())/ F$ {- M7 p* Z+ S) J( z! M
  289.       {8 O+ `, Y. Q& Q+ M9 G7 I
  290.         UpdateLocal.clear();% ?. q' B+ @( I$ F3 t; m7 H
  291.       }3 ]/ w5 }0 f4 u* U5 q* `
  292.       if(UpdateFile3.size())" ]$ u3 J  ^) X4 \. v
  293.       {) U, ]1 W5 q4 o6 [
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 ]- A! L" y3 `# I6 m9 ^
  295.         {
    , p( U/ v3 |' X9 z) }4 i7 p
  296.           file=(*p).second;; H+ y/ q* \4 n& d
  297.           free(file);
    $ J! ]* c9 p: [/ \# Q* H
  298.         }
    + p6 S0 `9 T/ o. X6 @' y4 |
  299.         UpdateFile3.clear();
    ( Y  d) i$ N0 z# Z
  300.         UpdateList3.clear();
    ' J- _' [- t& ?. `" g4 J, p
  301.       }
    * V4 i5 ?3 g  ~- e' ]
  302.       if(UpdateFile2.size())
      z3 Z) l8 m* ^' K4 E. H5 \; R3 E, A) R
  303.       {$ e3 k% _' o- `" ^! C2 x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 u* T8 v) i' g" I' W* v! I# h' e
  305.         {
    7 J  f6 o0 O# N) }
  306.           file=(*p).second;2 l( L8 H7 }! R
  307.           free(file);2 [4 V# y5 ]3 Q) O" y7 j' K, Z
  308.         }
    ( k& ?6 Q% j( _2 l4 v0 d% |+ h( G
  309.         UpdateFile2.clear();4 `' B: j3 V9 K3 ^0 o" z
  310.         UpdateList2.clear();' t8 `2 x- b. ^/ V
  311.       }
    ) L  ^0 _9 Q, Q0 y" p% D( @6 K
  312.       if(UpdateFile1.size()). m/ e! Z( a; l) S
  313.       {
    + N6 _, X7 I$ e. @( K/ [" ~4 y0 @
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , ~9 `/ X0 \- W/ U9 v* I0 J9 L; p
  315.         {
    # e+ x4 \; p5 A! t& [
  316.           file=(*p).second;) d3 `: x! D6 w$ {
  317.           free(file);( a/ V9 F, K7 ~* P7 D/ R6 F+ }
  318.         }/ E" Z% s& E; S+ m! u+ m
  319.         UpdateFile1.clear();3 o+ I+ p* ]8 o
  320.         UpdateList1.clear();
    ! y) ]0 u6 C* U" I$ b" _4 P
  321.       }, y/ p$ x, W8 J# r7 T$ a
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    3 \5 y2 A2 u/ F4 ?% l5 g
  323.     }  h6 Q: }! ^7 \$ V2 S' |+ o
  324.   }; ?3 r( t) T$ e. w1 D9 h8 V" ^
  325.   return FALSE;
    $ ?" w" @& {$ S, h: b" C  l
  326. }2 Q, `& P2 |, G% l' [$ d* m
  327. . `$ n" u' I. V
  328. void CRevAppApp::ClearAll(void)
    . h, y  ^" y- N) M9 k' \) w9 S
  329. {5 i  M2 A$ x" Y
  330.   LPUPDATEFILE file;
    + I! J) [- V) [  |9 x; A% \
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * T: `1 h0 v- A0 D. Y. }

  332. + d/ u4 X3 d" k" t. ]. [: k# x7 R
  333.   if(UpdateLocal.size())% Y, a# f7 o7 c2 [
  334.   {
    3 F2 v: S# s$ ?; m+ _+ b7 `
  335.     UpdateLocal.clear();, X1 X% S% }2 p
  336.   }
    9 R1 g. d. b' e. _! T* B
  337.   if(UpdateFile3.size())9 c) L1 E/ n+ B. W+ z
  338.   {
    ; C1 l) q* }8 ]2 V8 C* w  t5 X
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . p! D( X- [9 S( t
  340.     {+ ^8 y5 D+ F6 Z: t
  341.       file=(*p).second;
    # \$ C! ^8 f+ Z; @
  342.       free(file);
    . X1 X) I& D8 R
  343.     }
    2 f* o( N) r+ y2 j2 r' O
  344.     UpdateFile3.clear();
    - Z$ L& S+ L1 g. U; ]4 M& Z
  345.     UpdateList3.clear();
    0 o5 O6 B( ^8 a" M: n4 F
  346.   }
    5 @3 K6 K8 l3 l
  347.   if(UpdateFile2.size())
    4 V5 w5 {7 }# u9 @1 I$ N  _* Q
  348.   {
    4 m! k3 Y6 x2 m4 k
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - D1 _/ B1 i' i  e1 y; f" P! k
  350.     {
    ; ^" B" ], ?6 C5 ~
  351.       file=(*p).second;
    8 U7 F' J% b8 v- e! V
  352.       free(file);
    4 Q/ v7 o0 v4 M0 o
  353.     }
    3 t) c3 b- C5 Z/ u$ C
  354.     UpdateFile2.clear();
    % w! b5 j# _/ _$ a! j
  355.     UpdateList2.clear();/ J9 X0 j$ ~; L3 c! L* E2 R
  356.   }- v6 X% M! H2 D, h0 ]( w3 b
  357.   if(UpdateFile1.size())
    3 H9 \0 l4 U+ Y8 S. H$ X2 W" Y
  358.   {
    ( r/ {9 b/ ^7 q/ u  y* r  y! U
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# x2 X- @! C2 S* p% f2 ^4 b
  360.     {
    ! u, M; @$ o+ f( {3 Z0 w1 m% R
  361.       file=(*p).second;
      I! j, ?1 \. T3 X+ |" U2 Y" k, V
  362.       free(file);* S- s, a* ?# b! j' S
  363.     }1 n$ a) t" i* F1 P% Z2 A
  364.     UpdateFile1.clear();
    . m5 o( k( x* P6 y" E
  365.     UpdateList1.clear();1 `! k5 f6 J* ^, L$ T. t; D
  366.   }
    2 R4 P  Y/ |6 C" V- X% A
  367. }  % W: ]" e. |7 @4 j
  368.   
    ; L$ m0 x- O' A/ N" X
  369. BOOL CRevAppApp::CheckLocalVersion(void)  X' W5 D9 v( D) _+ C
  370. {0 k1 F& h' A! M
  371.   int c;) P' m8 E6 N# Y. R/ W
  372.   LPUPDATEFILE file1,file2;$ Y  y2 K8 o- r
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , U# M% X8 M2 o, K8 L2 E2 j/ c( ?
  374.   std::list<CString>::iterator l;; c" F; R3 {2 |: ^8 F" W7 ^

  375. 6 @/ F1 o1 K- ?5 c% O
  376.   UpdateLocal.clear();
    " n9 T. F( p, I  i" `
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    1 m# K/ ~& M, J6 L3 U- |9 x" }8 {' g
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);: E: X! u, g7 q9 t' a# I
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);- R+ y3 R& e8 E& p, I( n1 R
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);; q4 c# e+ V& ?/ X# q! X) O
  381.   if(UpdateFile3.size())$ o% p, s4 b, u6 V
  382.   {
    ; F8 Z7 h; C; j6 P8 ]
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)! I' H1 {2 I/ P5 C) ^
  384.     {0 \# R* e+ h. ~& t* S  \  Q
  385.       file2=(LPUPDATEFILE)(*i).second;
    ' u; v$ b  P( S3 r' m9 b
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ V1 y: j$ V* {6 P1 f+ N/ {
  387.       {- C# S8 D/ f# H
  388.         file1=(LPUPDATEFILE)(*p).second;
    " a, m7 T; ~0 v7 M0 B% p
  389.         file1->vers=file2->vers;
    8 W( I1 _5 Y+ W; {; k1 k
  390.       }
    ! W/ k9 t! `5 j( {2 ~7 t* [4 J; N
  391.       else
    $ c% F: _1 ^8 [: O1 |
  392.       {+ q: r# p) v6 H" x. z/ j
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 X4 r; B" ^# o& F- D, Y* N& o
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! |9 k" a8 V- A  c$ f5 u0 f
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    8 b0 ^* \" r  [" {+ R% B
  396.       }$ a3 z# H! i4 X" e$ L- J, h
  397.     }* D: x9 \" [$ q, x" ~& c
  398.   }. x! r1 F! F2 J& R
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) G8 k; q2 t9 I* y
  400.   {
    # v$ ?+ B$ u8 m) S2 r
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())  h' W% J3 @: E1 n7 v( B
  402.     {% Y( O" h- j2 Q
  403.       file2=(LPUPDATEFILE)(*i).second;9 N) G( O! J$ M+ f2 v
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    # Z! R1 H; J8 k4 P
  405.       {& W6 C) y9 k) b! w& Z# e
  406.         file1=(LPUPDATEFILE)(*p).second;* ]; h" Q: J! C5 Z$ N  K8 G
  407.         if(file1->vers!=file2->vers)1 k* c* e2 w0 ?4 [, m
  408.         {8 c* j& D% U9 Z+ B" e
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 u2 D- T) b! m5 H8 K3 d! d
  410.           c++;0 R9 [* S& U* ^/ b4 u& {
  411.         }
    9 E' X, f8 c) M* e, J
  412.       }2 k4 o9 F8 j, |1 N/ j% L! Z- A9 n# J3 j
  413.       else( M0 E+ Q+ D7 Z# O
  414.       {7 r* h2 _9 L; u! b
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & D& N2 z- F, k7 `
  416.         c++;" G& [: B" z/ v- m5 {
  417.       }3 M8 a+ v' b8 E1 }* K  l
  418.     }+ g: _! `! e" H5 G; J( M# d
  419.   }
    * {/ C$ Q% d. X+ d& q: p
  420.   unlink(".\\DownLoad\\update.txt");; c6 w- \. s" k2 w3 Q
  421.   if(UpdateLocal.size()) return TRUE;
    9 x* P  \" R+ H% W  c0 e4 {) z
  422.   else                   return FALSE;
    ; R, |6 [1 m( F( d) [
  423. }) j& E* H2 Y9 ?/ b; U+ ?7 X
  424. * Y+ l$ C/ V" x# I9 q8 @, {! e
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    * _; q1 y4 s$ r0 L! K' @. i, |
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"6 q, m  a4 T" j% W) ~
  427. % s8 {1 ^4 ?$ @
  428. 1 M2 @3 Z5 d6 n& m2 ~, O* G! ^* G

  429. + C9 F0 v# C  M1 P0 Q- ~, K4 n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    , }8 c: B! \! V5 V! O( X
  431. {
    - c* V& s! k+ T: B# c8 D1 \
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    " ?  b- D3 S8 t& \* ?; V5 ?, P0 {
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 W5 _# q* |- j' y( B0 y9 B
  434.   {
    & J4 p- ^* t; h9 ]; ~$ \
  435.     char szLanguage[50];4 {& m" j% h* j$ B
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / S' {# L. H5 p* ]; w# }5 w6 [: D
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ k6 C7 D* S5 o, |' U. R
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- q) j# V8 c; j; U7 P! R
  439.     else                                   m_iLanguage=ENGLISH;/ V5 D8 D+ e; q
  440.     char szRegister[100];
    ) q) ^6 |( w0 q( J8 j! C& G9 ?: d. K
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      X* u2 e4 L) M+ n" }6 `1 r
  442.     strRegsName=szRegister;
    ) j4 W! g$ W3 y9 U  w
  443.     char szPatchURL[100];& O, g: Q' o% m1 n2 `: S3 M
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ; o4 t+ b6 @2 i
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. m3 o7 Y% A6 [: w# B+ q
  446.   }/ P( g/ m+ H0 n+ L' X' I: h# Z( S- ~, d1 O
  447.   else
    : x  h. B, o0 }6 _6 g% B. ^
  448.   {& f2 ]: ~" q3 a' j; Q& m& ]% f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% ^+ W# [4 V& @+ w8 K0 s8 ?' \
  450.     strRegsName=DEFAULT_REG_URL;
    9 D$ `# D' W$ I: {
  451.   }
    3 j  {' S4 @) `+ R1 P7 T8 H
  452.   if(GetFileAttributes("hosts.ini")!=-1)+ b4 R, @9 o2 F0 |2 M8 ?
  453.   {. c/ M) |+ a* H5 K) S
  454.     char szIP[50];; ?  W0 X- X* m! E5 B4 |3 y
  455.     char szDIR[300];9 H& P* Y/ f* p$ l! B% b9 _, @
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")). j; F1 g( r/ n: X  [/ b& l' l
  457.     {
    1 i1 @- a; @. i1 i6 k
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");8 p* N* b# X2 g+ G6 |! L* U# _6 H
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");/ R( H" V: [* |9 G) m2 K
  460.       strHostName=szIP;
    ( W" p1 W  n6 T& i( _/ o0 k; P1 c
  461.       strHostPath.Format("/%s",szDIR);+ {6 W9 J9 c; S& A$ L7 i9 ~
  462.     }1 `) g( t/ j6 R+ b6 p: Y" `" Y
  463.     else
    0 {- j- j2 {0 m3 t
  464.     {3 [6 C$ w' Q2 T/ Q' L
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) n/ I# g, c: N* |
  466.       {
    9 V" e& L) Y4 l) G! W- W  W) _5 _
  467.         char szLanguage[50];
    5 A6 i. \/ l: K: l% I; b
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! v' `  i6 M& W8 d- T4 F' W' ~$ I
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! `% w) y/ z4 t8 y
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;7 {1 u4 n' O3 |) C# i- o1 {/ g
  471.         else                                   m_iLanguage=ENGLISH;
    - G6 F5 t4 K8 |" b/ g
  472.         char szRegister[100];! |" |: V" X5 s- h% x+ p
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 S1 M" _1 r1 [0 Y- \
  474.         strRegsName=szRegister;
    6 ?: O$ }2 l$ j. r0 M+ u
  475.         char szPatchURL[100];" S8 B* q$ P3 ]0 D6 q& L1 a" B6 b
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' z$ }2 `* E1 o$ p  j
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 H$ D1 ^$ l3 \8 W) ~% X
  478.       }! G3 O2 f0 Q. Z0 T
  479.       else
    4 |8 [" T' r/ A9 |, Q; o
  480.       {
    - [# l# P! b- @  t
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! @) |1 r7 m( q8 x1 e4 z
  482.         strRegsName=DEFAULT_REG_URL;
    / F7 q$ F/ N& n3 d& R  O% A5 u
  483.       }! L2 x. F# F: j! u% |6 S! x
  484.     }
    8 }& ]2 }. |/ l
  485.   }
    - u4 w1 M) ?; j4 J) ^- T8 U# h
  486.   return true;
    8 I' U. j. N) T
  487. }# f3 r3 r8 F+ t
  488. # e$ M9 C6 a$ E1 P: L5 K2 H
  489. #include ".\ZLib\unzip.h"  A. F$ Q6 }: k! t( Q) T
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    / x1 |; h6 t# j, p
  491. /////////////////////////////////////////////////////////////////////////////
    ( Q: P5 R- q8 z+ Q% ~5 a
  492. // CRevAppApp initialization
    3 r9 r, J7 O, v+ A  n) X

  493. 2 P/ H1 t$ T7 h( s6 n+ ]% k! e5 y# b4 d
  494. BOOL CRevAppApp::InitInstance()* t# r7 h6 z3 f$ ^) Q9 U
  495. {: [$ z9 z5 J4 y! c9 z0 Z
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];7 A& N. z1 V3 F( t
  497. # o1 s& H1 C3 B# x
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    3 \% h( A* H" |& L0 q! F4 d
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))- }  n/ c# `. G
  500.   {
    7 }4 R- S$ {5 J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    & m! i$ D3 i- P; N
  502.     GetPathFromFullPath(szPathTarget,szPathSource);" S- F1 I. ^9 {: s1 o3 |4 h
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ! q1 D' K8 _9 q  Y  S
  504.     {
    & p# x0 p7 ^# K/ l1 Z9 U
  505.       strcpy(szPath,szPathTarget);
    : n) ?0 `; ^6 R/ d1 U# _# Z
  506.       SetCurrentDirectory(szPath);
    * {# y$ o% G" _# y9 r
  507.     }
    1 Y! {1 R7 o8 ?- n- l: }
  508.   }
    , @+ f& }  N2 G. p# y1 d
  509. #ifdef _DEBUG3 ^4 C5 j0 Q8 n, {1 Z+ E* k
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % _' M( f- Y5 w$ X9 I
  511. #else5 V: o) u% l0 Q: ?
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))* ~0 @# ~4 q- B9 f7 e$ `
  513. #endif
    " G7 k' x- h$ u: s. R
  514.   {4 \6 k- b' a0 t2 ?, C% l* }  e
  515.     char tempFileName[MAX_PATH];
      K0 j- N0 j2 j7 E' D
  516.     strcpy(tempFileName,szPathSource);
    : _! u, B2 |( M& h
  517.     tempFileName[strlen(szPathSource)-12]=0;
    " p! W& i& g# Y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    " M( Y/ [# d  l# I# n
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ; F& h; U% W5 X
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    + u( |/ ~' d6 k3 X  G
  521.     return TRUE;9 @; E. o; C: I- u
  522.   }
    " s; N% `$ W$ a) ]: N
  523.   // Nuke 0118: Delete run.exe& a0 r8 T# `4 S' B# a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );6 G  s4 d( }7 s
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + U) b. I  ?( W6 `9 z3 ?- m
  526.   if(!ReadCfgFile("Config.ini"))
    ( g. p6 a8 I7 H$ m/ j6 {$ y
  527.   {
    ! C# l" O. [/ j# W( X3 h& B
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);) `1 [6 v6 }5 A
  529.     return TRUE;# X, R& D3 H) t+ T2 {- g, e
  530.   }
    1 Y4 F8 G' o1 a( R1 T
  531.   HANDLE mutex;4 S$ P/ s  a( X, D0 g" B( a- j
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    1 l1 L# ^2 H# a7 y( u
  533.   {
    ; h3 p3 x6 |2 c- H7 h' g) v
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)7 Y9 x: K7 Z8 o2 B& _! O
  535.     {! I3 i8 t' f1 m  c
  536.       CloseHandle(mutex);
    $ g7 z+ w! A2 W1 L
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    1 E+ t8 r* |$ b5 [- T" |6 b
  538.       return TRUE;0 o. W2 I$ a9 {3 [% q& I3 O
  539.     }
    1 i9 m& e, g) b  W2 w
  540.   }  : \" L+ \6 C  ]* v
  541.   CloseHandle(mutex);: x$ I! e" J& G4 m( M2 `

  542. ) o& f1 i+ S1 @! a( W% ~  ?+ j1 s5 f1 a
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    2 I+ `7 ~6 F- q5 c+ O  T! L. k3 y
  544. 8 P: q, r5 f, B
  545.         AfxEnableControlContainer();0 a9 C& F+ i2 X' [, K3 D
  546. & W& x) r  X! P# A& ?: `9 Q
  547.   bCanUpdate=FALSE;6 o6 e4 _( Z' _. I+ t& Q1 [
  548.   dwStartUpSteps=1;" ]9 G% _4 K* A9 H, f! W/ t0 H- \
  549.   dwProgramState=AP_NOTHING;, m$ G0 u$ `7 M# t- o5 T

  550. $ C  f+ s0 |: f
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);' u8 {/ y3 P+ p$ r
  552. 3 z5 k5 V+ ]: O
  553.         // Standard initialization  F8 ~, y: i/ o; E" i
  554.         // If you are not using these features and wish to reduce the size0 a+ ]: f7 N1 B1 \- k% Q
  555.         //  of your final executable, you should remove from the following' j7 t) {1 |8 R# ?# R, |- K
  556.         //  the specific initialization routines you do not need.. b) t, K* a9 Y& E$ i0 Y) T9 W

  557. + H" Z& I6 D' N1 e- T, K
  558. #ifdef _AFXDLL) l# f/ E* f" a+ X6 F3 O+ J
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    0 w+ A' f! F1 u" j9 A6 h; p. t! f
  560. #else
    ; x! w; V) N) {5 F
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically/ B' D2 L! N+ t; j# J
  562. #endif
    7 R; P' i+ @1 f, A
  563. 6 a+ _/ N/ ]: f' Z' t9 H/ i8 p
  564.   dlg=new CRevAppDlg;3 G% t  e1 b$ Q
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    9 [* U$ w6 x- \' ?1 p; y- L% a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);# H  K. x9 ?2 Z* l
  567.   m_pMainWnd=dlg;+ V: w7 `0 ?- b+ m

  568. ' g; G) n/ }- W2 Y  F
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    / R% u$ k- B- L+ I: h( u

  570. # u: @4 t/ {9 w/ T: K, W/ ^- ?' R0 }
  571. //  GdiplusStartupInput gdiplusStartupInput;& w1 I, j' O4 z
  572. //  ULONG_PTR gdiplusToken;
    0 r2 s+ J$ y  g! b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    2 g: [6 Z+ \( x: a( g
  574. 4 w" @' Q+ f! l; n, d6 r
  575. //        CRevAppDlg dlg;
    - Q* A8 D. |  y& P# j% E
  576. //        int nResponse = dlg.DoModal();
    . {5 w& u0 T) a4 Q. K2 S- D! r
  577. //        if (nResponse == IDOK)
    ; g0 p+ r5 Y+ Z* Q' u- y" ^
  578. //        {7 R- I4 o8 Y# S. |2 Z% L2 @' I( Z
  579. //                // TODO: Place code here to handle when the dialog is
    ! U1 x! w0 h9 B0 W( c2 G
  580. //                //  dismissed with OK" T; r4 b$ W' U
  581. //        }
    1 [: q) o; ~3 ]! z
  582. //        else if (nResponse == IDCANCEL)& ]3 y: v- i  h  U5 F
  583. //        {' N9 \9 o9 \9 T' ^! z
  584. //                // TODO: Place code here to handle when the dialog is% U( |! {4 b1 ^" F: h9 h4 r  [
  585. //                //  dismissed with Cancel: E& u9 ?/ A) x8 N; k0 F
  586. //        }% N% W6 r$ W: }
  587. 6 x- k* p" u; x9 X: [8 w
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    * a5 N4 p% g& _7 v
  589.         //  application, rather than start the application's message pump.
    + {  F3 g2 J8 h$ p' D$ b
  590.         return TRUE;& j% m, w7 V" K9 f
  591. }  n' [# ^6 c- Y$ e8 x- `3 {

  592. 9 l  l' m8 ]% K; Y7 S$ V
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    " {. r, _% p& u8 z' V7 N9 X
  594. {
    ) N1 a$ _. K7 H$ m4 F
  595.   int i;
      w$ m3 h2 e, W9 }$ b
  596.   char *szRet;3 e5 Q9 j! f' F$ Z2 E- q* f

  597. - L0 U0 z/ t: c/ z7 q- i/ V
  598.   if(pSource) { itoken=0; sztoken=pSource; }: g3 y; ]! C1 N8 r' T
  599.   if(sztoken)/ l3 N" S1 Z+ B' M) H
  600.   {2 i! @. m) \/ O, W4 H- x
  601.     szRet=&sztoken[itoken];, t% i' [; u5 _6 [1 T5 W  X
  602.     while(sztoken[itoken])1 p0 {" i* {5 P3 b% [
  603.     {
    / n9 b& n) V2 w) t. u
  604.       for(i=0;i<(int)strlen(token);i++)- k* u) `% G+ @: W
  605.       {
    2 a1 a. _4 ]3 a  N: p8 z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]): \& O! n9 }( ~( U
  607.         {
    ) G8 K3 r5 [0 E, {  Z; M
  608.           sztoken[itoken++]=0;
    ! ~& R" y0 b: M4 X4 D  K, O8 N( C1 C
  609.           sztoken[itoken++]=0;
    8 J5 n9 r& c1 b7 z
  610.           return szRet;
    2 C2 h) d8 B6 D9 D$ T# L0 n
  611.         }& W0 v4 P# C& H. l* l
  612.       }# Z- ~1 e; e) i( Z. a& c
  613.       itoken++;
    + P( q  u8 V. {; }' u
  614.     }" N+ d1 L  \4 Z
  615.   }
    $ T9 I! ~+ Q4 ~( B
  616.   return NULL;
    % F- K; _8 ~  J8 |' r* z9 I6 w
  617. }
    1 y5 o5 P- X* U, A- f6 Z

  618. / Q  Q' A0 M- t& g- I3 _+ x
  619. void ProcessProc(long Total,long Current)1 a/ P' D/ t. W) B0 d2 l( z% O& R  o
  620. {
    ! r& @8 E# S8 }- s( x& b
  621.         MSG msg;
    ( E8 ]$ ?3 h# U* b
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);9 [+ J% D& z+ w. F* T  F7 F+ h# w$ |
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));7 Y' n/ N( n% a0 \8 l
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))1 N; @! Z$ L# H4 k3 i: e
  625.         {
    4 v7 \1 a- {6 N3 ^" |* |
  626.                 if(!GetMessage(&msg,NULL,0,0))+ Y5 I" M3 |: w# O' A
  627.                 {
    ( S! E" y' U' {
  628.                         return;
      J1 e5 r/ d  A+ L
  629.                 }
    * l" b& A% V- g  k- N0 U7 L
  630.                 TranslateMessage(&msg);
    . d& M7 V! T% p4 ]
  631.                 DispatchMessage(&msg);# y9 i' g& t, Y: X3 t2 p; }1 F
  632.         }        5 @6 P9 T& b! U
  633. }" s; G' T; d( G- \- X6 b( a# B9 Y9 i
  634. ' U8 x! P0 v1 i7 E3 H
  635. BOOL bFirstChar=TRUE;3 V* W: ?/ G2 e2 @' p
  636. 6 F4 g. o4 W+ e9 B. C
  637. BOOL CRevAppApp::OnIdle(LONG lCount)' @( Y# G/ ?2 P4 N* i; u8 p) _
  638. {
    ( `9 q" w: m/ ^' ~! I
  639.         // TODO: Add your specialized code here and/or call the base class* U6 _0 o2 k( N, S
  640.   switch(dwProgramState). |: ?6 n, K! f! j) w0 Y4 l
  641.   {
    $ Z$ x" _8 g, {
  642.   case AP_NOTHING:
    9 E$ g, k+ E0 P6 D: @
  643.     switch(dwStartUpSteps)% `& t4 ?9 ?, \  _2 t5 h, w3 G6 h
  644.     {
    / B6 I  F6 k5 w( G" Z
  645.     case 1:
    , p6 g* Q7 ^8 y! V0 d$ K; H
  646.       {: X4 q; Y% b, A. ?& ]. k! [. e& E
  647.         int i;
    , _. r3 r5 T# z8 U
  648.         CDC *pCDC=dlg->GetDC();) {- A4 i$ n+ A8 y
  649.         HDC hdcwnd=pCDC->m_hDC;6 }$ l% G4 U+ _1 P' Z1 [$ _, Q9 w
  650. //        Graphics graphics(hdcwnd);
    4 @5 }# [8 [! s# ]; V: T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");, t2 }' }" G: B% a3 L, g
  652. //        INT iWidth=bitmap.GetWidth();+ _  ^% g1 b( r5 S& V" x& M4 f
  653. //        INT iHeight=bitmap.GetHeight();& h! S' x, q2 ]* P( a/ `# q3 w
  654. //        Color color,colorTemp;- {2 t" I( g0 U. Z7 ~3 S' r% L
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)* N$ X; B" p2 {3 o2 G" f) t& E
  656. //        {2 }' j3 v! T- C& Q: ^# ]' \
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)# a' B8 q0 _: Q: s2 x+ ]) O- |
  658. //          {
    * x5 B: I, A8 i/ r3 `9 ~% a1 v
  659. //            bitmap.GetPixel(iColumn,iRow,&color);* i+ H/ }2 F1 A* V8 F) }/ v
  660. //            colorTemp.SetValue(color.MakeARGB(0 ?% R4 N" p/ `' f* H/ O" j8 F
  661. //              (BYTE)(255*iColumn/iWidth),- W6 k! }% `# t6 H$ ^, W
  662. //              color.GetRed(),
    0 {8 e! U% `& n  V
  663. //              color.GetGreen()," j( v3 R% L0 c/ O* O1 Z" y+ _
  664. //              color.GetBlue()));: i/ y. w" l. [. |
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);) }: ]% M. ^$ C/ q) E
  666. //          }
    " o7 I8 b4 m2 O. w, ]2 s
  667. //        }# o- n, N/ Y& {2 n
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + h4 D+ c! q# U9 P) r# a8 M1 S
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ o5 c$ l7 [6 |$ y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ' C: I, y; I+ [6 L) }
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 d& u/ B! T) w4 N* \' D* o
  672.         for(i=0;i<240;i+=8)5 F8 X8 k' B4 _
  673.         {
    ! K4 u# V7 M0 a
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 o0 V$ s% y$ w6 g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 @' x4 y  w4 @: [- \- ~) K
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : e3 b% B5 x( w3 z: x5 @3 a9 R' Y7 E
  677.           Sleep(33);) {2 j9 I* l. P- |
  678.         }+ D7 j* R9 ?1 B2 N, y5 |
  679.         Sleep(1000);
    , m7 D/ A1 [# q# l3 p
  680.         for(i=240;i>0;i-=8)
    + o; N) f2 d' T+ n9 s
  681.         {, R3 _  f1 G, w% @& Y0 m; _
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( B" o! t) }" e4 o
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" H7 Z0 ^+ x* t2 z/ b' m
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" c6 x8 M) p5 {
  685.           Sleep(33);4 B( U( T- I2 y) D% J/ M
  686.         }# C1 }" S! {/ u
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    $ Z, n# l4 O9 T# g# f" k
  688.         dlg->ReleaseDC(pCDC);
    - q$ C2 l. e2 w* h4 k8 x% k
  689.         DeleteDC(hdctar);, s: j) B% D9 ]# z$ I  H1 j
  690.         DeleteDC(hdcsrc);$ m) f8 U$ w, o% A3 M) ?
  691.         DeleteDC(hdcorg);1 w) U; ~: J% W+ {% O, b  A
  692.       }, }1 P# n6 W( Y7 e0 n- G4 V" p
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ; k8 g& w, x5 u: t7 n
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    2 |5 `0 L* u( P2 `- `; j
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");* \* w! E( x! \
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    9 X/ }8 [# X- r" k! L
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 ?0 c- k0 h, {9 C
  698.       if(!Dn.Connected())
    7 b) R9 A4 n' m* n7 T5 ^4 |" N
  699.       {
    ' m8 _8 q" O, T  d! T1 L
  700.         dwTotalFiles=1;" \! }7 X' T3 g8 v( _5 r
  701.         dwDownLoaded=0;- s' i: P% j7 F6 y$ K" `: U; n
  702.         bSilentStep=TRUE;: B* k8 R7 g9 q+ f" E) I
  703.         bCompressed=FALSE;
    ) I$ l6 r# ?: K) q" G: W
  704.         strExtLocal.Empty();$ `  |( x+ ]3 n$ T
  705.         strFullName="readme.txt";! D  u" ~2 r3 f( k1 y
  706.         dwProgramState=AP_CONNECT;
      N! F7 h# v2 X( M# R
  707.       }% F% i' ?0 c* s% C
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    8 g! H! z$ c& D8 }" k$ {) [
  709.       dwStartUpSteps=2;3 g9 j' b* G& O+ T$ ]
  710.       break;$ v3 o9 x9 L/ v! B
  711.     case 2:
    & i- I  C% i6 }! c
  712.       {4 Q. k+ n% K+ l$ A( c* @( }
  713.         int iEOF;
    - x# U, @* Q$ F- Z, V* l
  714.         FILE *fp;
    9 v+ c2 r% {2 x  P5 W
  715.         char szString[512];7 e( e- I% G; \" i
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
      {/ W5 |% j/ z/ q
  717.         if(fp)+ U# x# G" O% p. W
  718.         {- R0 Z* {% e( ~) ~; k( j9 `3 Y8 m2 v
  719.           do
    9 y& I7 @; H# ]; ^9 f$ C; L2 \
  720.           {6 E2 q4 ], i+ C! m0 b% j3 t
  721.             iEOF=fscanf(fp,"%s",szString);
    $ N6 M+ f4 D% N1 J
  722.             if(strlen(szString))4 I$ n4 _0 q$ U& h2 A9 Q
  723.             {
    3 K- a2 r% i8 `1 `, A
  724.               if(bFirstChar): k: B" d% [- X# ~( Z
  725.               {
      b3 u! R6 y1 E5 f: B5 y0 k/ e
  726.                 bFirstChar=FALSE;0 r/ }+ @8 |7 Y# H/ E; k
  727.                 bConnectIsBig5=FALSE;  V: w; |4 A' ?) }- w/ m& a
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    2 `- G9 N+ m* j7 s1 {/ O5 J  h! |. x
  729.               }& y& F; N+ p8 c
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));3 S/ N% S  m# b7 m6 r
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));8 N: s) P* t5 ^9 Y% z6 v$ v5 Z) F' f
  732.               dlg->m_ListText.AddString(szString);3 e. I* I$ ]! X$ ]+ S) P8 B$ g5 A% L: n- v
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 a& E7 @; ?9 ^/ H( e5 Q
  734.               *szString=0;
    ' s& O! O+ |- G( q
  735.             }
    # D) w# q! B2 f! @2 @
  736.           } while(iEOF!=EOF);- ~  G$ D+ M( I
  737.           fclose(fp);
    * J# x) Z( Q5 _! n& W
  738.           unlink(".\\DownLoad\\readme.txt");
    5 \+ l: e) ]0 m9 ?. ^& E1 v
  739.           dwStartUpSteps=3;
    ; ?( j: T7 k/ |% h5 T
  740.         }+ r* h. X/ E& g5 K$ q6 `
  741.       }
    7 \5 l) _1 I! o- O* e  D: ^) X& @
  742.       break;% e6 u( ~6 p5 p* e
  743.     case 3:1 E. s: Q- T4 h3 h- d6 L
  744.       if(!Dn.Connected())- d5 Z0 y0 U# p8 q  C; c3 y) K
  745.       {) F# Y# k$ G" w! k4 N7 R# `+ v: ^
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    3 j. K: l6 I5 E+ Y& v6 A) S
  747.         dwTotalFiles=1;
    / z) x+ X; ~8 b8 Y4 ^2 F+ X2 x8 n
  748.         dwDownLoaded=0;
    ; G/ i/ N/ y% n" c, U. K
  749.         bSilentStep=TRUE;
    * g& I' U- R" q9 k: B$ m
  750.         bCompressed=FALSE;
    0 B2 l) ]& U5 T/ u) P. e
  751.         strExtLocal.Empty();
    ' Y( `1 R! l. G% W8 s$ A
  752.         strFullName="checkversion.txt";0 E  _; S8 @! ~% T! O( t
  753.         dwProgramState=AP_CONNECT;
    $ M1 o, G" t' J9 |* o8 a
  754.       }
    9 h. \7 @6 V1 K+ O% U) y
  755.       dwStartUpSteps=4;
    : T# s0 Z7 M9 X2 b
  756.       break;
    1 g5 j9 i; ]! R9 q
  757.     case 4:
    ! _) j0 b8 S+ a* W# R
  758.       {
      F+ P# ]" g, c6 G6 J
  759.         FILE *fp;
    6 r4 ?% Q$ {' X0 z* w' p
  760.         char szString1[128];" e. e, w7 {# a, G: j/ x) @! J
  761.         char szString2[128];
    9 ~$ m4 n2 B! n
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");, d# F/ H1 M. r& k0 `4 J
  763.         if(fp)
    9 @3 Y6 U7 w$ J3 O* R) x, m
  764.         {
    # j" s' J/ X- h+ j1 i
  765.           fscanf(fp,"%s",szString1);
    - s/ [  ?1 M2 K( L5 S
  766.           fclose(fp);
    ) j5 Y. ~: S0 ]" }1 s
  767.           fCheckVersion=atof(szString1);
    + q9 h9 b2 M  N
  768.           fp=fopen(".\\checkversion.dat","r");
      E: e" s* R! `% T* l8 Y+ T+ S+ H
  769.           if(fp)
    ( }5 n0 [6 N8 s2 m4 X8 U& k6 B% V
  770.           {/ }1 v* f' v8 \/ K# c; o6 W
  771.             fscanf(fp,"%s",szString2);, t5 C6 E. n7 O! |- L) C. g
  772.             fclose(fp);
    $ G5 m2 p  |5 U& ^
  773.             if(atof(szString1)!=atof(szString2)): }1 [' z" M, h
  774.             {
    2 A; g) Z& f; o# Y
  775.               if(!Dn.Connected())
    7 d& F: \' j! p& z# c  p
  776.               {
    . @$ i! L. O9 j, Z( w! }8 I
  777.                 bFirstUpdate=TRUE;) L; ~: J, I  p/ f( A
  778.                 dwTotalFiles=1;% X5 {$ G3 m  |; [
  779.                 dwDownLoaded=0;
    , G7 _4 Y- a# e; `" w; |  D
  780.                 bSilentStep=FALSE;  f1 M7 ^% w3 z/ a0 |" ?* W
  781.                 bCompressed=TRUE;
    2 v2 e: v4 j& m
  782.                 strExtLocal=".\\DownLoad\";" [% s3 I  e* Z8 f. @8 G+ e4 J
  783.                 strFullName="update.txt";1 \2 ^3 r  B' Z' c3 [
  784.                 dwProgramState=AP_CONNECT;# u" a& r% T/ e/ I# u, U' i
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # z5 M  [7 e& k: t9 c$ _# w0 n
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 a6 K* c7 q: U( o
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");+ N/ |0 {8 K- ]+ e: x; g

  788. 2 z# k+ e; E' `: a/ v
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" I: v$ Y3 O' U; M0 T
  790.                 unlink(".\\DownLoad\\checkversion.txt");" r) Y, k1 a  {
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)# T6 e1 l% Q  G5 V( }. n
  792.                 {
    & @% W3 U1 G. f; R& t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");' l2 s7 E  c0 B2 j2 f5 e6 h
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    + Y- J' r( H  Q- C: i; m4 m" I, r
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");0 j4 b% \" Y( }0 M- I- x2 e
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / D* k7 O% Y7 |0 j
  797. - k2 N( S5 D- g( \: _" B
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# \7 W& h/ `% W# N/ E
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");8 V7 D) L& I5 h& V
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    & }: y1 b' k, S# `. T3 q6 W! r# C8 V
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( z7 P7 t4 a* S+ E) e
  802.                 }. O. e9 W: r) P/ s: m
  803.                 dwStartUpSteps=5;2 {# T, c& H6 u$ h! x6 }
  804.               }
    " E; `# L: L2 r# z: R
  805.             }$ b0 S; e* {: W2 h
  806.             else( Q, W1 Q9 p; `7 [" O* v, l
  807.             {
    ) K; O% I6 F" w$ X
  808.               unlink(".\\DownLoad\\checkversion.txt");* B* y2 r7 R+ c; |6 J
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! [0 G! w8 [  _, H8 {% a8 O4 @6 I% U( a
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- p8 e" ?' [/ [1 m, |
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");5 j  U  h2 }' |8 S7 F

  812. : t5 U: ]- d) S# i. [
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : E; F4 M% q+ ?. {) }/ [
  814.               dwStartUpSteps=99;* W3 M* x& u- X  R0 }& q
  815.               bFinishUpdated=TRUE;: O2 b( n9 Z. ~2 w9 _
  816.               bCanUpdate=TRUE;
    # z' p& _4 d0 h2 H" c
  817.             }% i; `; V/ l) z6 f4 |1 G
  818.           }
    6 y( x2 ^: u3 r6 _
  819.           else- w. p$ |1 ], T, b7 Y
  820.           {. S, f$ s9 D  I5 \5 b
  821.             if(!Dn.Connected())
    : L- k. M1 U" X* B2 y5 y: w: N
  822.             {
    ' N0 h# A  N0 E
  823.               bFirstUpdate=TRUE;
    # w! |! f% \8 `* I- M" B2 Q3 d' |
  824.               dwTotalFiles=1;
    : Z. a7 J) y; ~
  825.               dwDownLoaded=0;; t8 r1 v/ p' u) g) M, z
  826.               bSilentStep=FALSE;7 u+ q$ w7 T$ q
  827.               bCompressed=TRUE;7 O; ~: F: t4 y( W
  828.               strExtLocal=".\\DownLoad\";. B6 I6 q: t& `9 b2 S
  829.               strFullName="update.txt";
    ' z) M1 H- `3 H
  830.               dwProgramState=AP_CONNECT;
    9 a, b/ x$ R4 @: @# \! e
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . a- z  V  |: J) K, c3 D+ H5 O: n$ _
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , x. f, x0 ?% N# x+ l8 t
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");/ \9 [7 p% n/ b- b& w
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 i9 Y' B, B3 R% i, A) `2 T; F
  835.               unlink(".\\DownLoad\\checkversion.txt");
    , W' L6 ]4 {# q3 G$ F6 e" c
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)( z2 U% I. |# F4 z6 m6 h3 l6 S. T
  837.               {
    1 E  S1 e  z( T& q- I/ v
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    8 z' T( a& I6 K2 }3 l
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");1 g; U0 B/ d% s: |2 ?8 I) {" {
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");7 o6 v$ M2 d4 S0 D7 U
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# f$ [8 _8 X. s# {3 w8 U
  842.                 1 A* D- `3 o& Y  c
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");& Y! [( G, u- I0 Z" O7 G
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    1 A% W, U. P8 }6 A: [5 i, E1 y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");4 |* \7 n( I+ ~5 W" V4 \
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / A) M0 f. @3 P
  847.               }$ J" p7 \  ^7 U( t7 @# y: C
  848.               dwStartUpSteps=5;
    $ z1 E. Y: m8 q: r
  849.             }( ~% L) i% y/ r+ G/ K$ L
  850.           }2 C' H8 x6 @. i5 u8 }! e1 n
  851.         }7 W7 h# J; T; L8 E' U; E
  852.         else
    / |' F  r) g+ {& I
  853.         {
    % l( G8 n6 G9 Q! Z2 c
  854.           dwStartUpSteps=3;& K: g+ u1 q& h0 T3 Y. _
  855.         }- @6 V* E& Z7 t7 z' ~/ ^/ _8 F
  856.       }% p) d9 H! e4 Q9 @
  857.       break;0 x6 ]$ {9 r# u
  858.     case 5:
      m8 n0 m1 p/ N8 t0 ]
  859.       {2 s  q8 ~5 i  b" z0 z: }  k, i
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)& t! u3 t" x( R3 B) [# P( |" f
  861.         {8 s. A$ \9 d" q1 Z
  862.           int opt_overwrite=1;
    - {  f- M$ m6 i5 {$ y* q
  863.           int opt_do_extract_withoutpath=0;
    2 u& S4 ?( `4 T9 w1 n' J
  864.           unzFile uf=NULL;+ p! x$ L' t( r. x; a1 ?) Z

  865. 1 }% |9 P. T5 \
  866.           uf=unzOpen("Wsa.zip");" a2 `" a, X) c" z, J% Z! X) C
  867.           if(uf)
    + \! S2 y# }0 o: e) R* h% }6 s
  868.           {
    0 a) [7 L9 l8 E; |+ G& s
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);" R' m- U" C4 F* o
  870.             unzClose(uf);8 s, K" K9 k/ c: f
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    . [; C1 x7 P6 n6 U
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");+ u8 C; t6 Y' r1 d4 \7 O7 m2 `
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");' E9 j) }" _4 s# s4 W: t0 {
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 ]# E$ S, [; w5 |
  875.           }8 M  ?- t( C  k+ j* J6 }: c) O2 Z
  876.           DeleteFile("Wsa.zip" );
    9 W+ M. n* }  k
  877.         }& o- f& c# l9 ~( q$ t

  878. * w' F4 ]0 Y) D% l
  879.         if(CheckLocalVersion())
    & l  R/ i" @9 h+ z$ P. H
  880.         {
    # y! \" c  T& r) B$ J* y: c2 M
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");7 w8 v1 n  b- ?+ @0 U: I
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");0 z5 z8 [( _+ A$ }" h
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    4 r- L9 q" K% M3 u& Q
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; b- n! Y2 M$ X% y' v9 U6 y; W
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    3 P5 k. _$ I7 E0 g
  886.           dwStartUpSteps=99;
    + |& o2 F$ ]" e3 Z& Z% \
  887.         }
    0 C" ]9 |0 b- A* K3 Q2 O  e
  888.         else
    " u6 K& F% R9 T9 j4 ^
  889.         {' c- u& C3 J* R
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");8 U, s3 L* D1 p! u) q) Q* M
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : p# J: T- o4 i
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");( A- \# |( _' W% T! c

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

9 X9 D5 g& a* ]& F4 c

評分

參與人數 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客服返回頂部