找回密碼
 立即注册

CSUpdate.exe源代码

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

& m# M. I+ E1 n
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , P- n: a# U9 d9 N+ l, @
  2. //0 q# t; U/ e/ y  `6 `" g0 C/ g
  3. 4 p6 h3 E: E$ E
  4. #include "stdafx.h"
    9 \+ c; a  A" O1 v: ~  O

  5. - y6 ]" p6 |# ~$ \, N- c
  6. //#define UNICODE
    ! M6 ^$ Q, K& Q, ~( \) j
  7. //#include <gdiplus.h>
    1 r- K3 N& X* [7 Y6 ^
  8. //using namespace Gdiplus;
    % g! e6 T* y: Z! P+ ^+ t0 [

  9. : R2 d& U+ j- q2 _( d+ w
  10. #include "RevApp.h"
    " \' V. p9 X7 e$ ?! S3 d
  11. #include "RevAppDlg.h"' D0 @+ Q1 ?8 W$ @5 d( P5 S

  12. & I6 ?, F, M3 M1 V$ U: J
  13. #pragma warning(disable:4786)
      V5 W5 ?5 l" s8 z. o
  14. #include <map>, x( @  N& A, ~3 w. L# o* J
  15. #include <list>
    1 ]( K% r& u! h! e
  16. #include <direct.h>
    % |2 w: B! }! t  h6 w
  17. 0 }& P9 }" d- c- Y; Y$ J: _  P
  18. #ifdef _DEBUG
    1 m. w8 q) q4 @5 d
  19. #define new DEBUG_NEW$ k" M* o) q) t: a
  20. #undef THIS_FILE( q! F6 I2 n) b9 ^
  21. static char THIS_FILE[] = __FILE__;( \. J; g* v6 ?. p# T3 i5 |# {
  22. #endif
    $ O6 V9 e& o6 [# f# W* a
  23. #include "SkinResDef.h"$ V/ U6 F* P5 O  u: @
  24. #include "ChangeBG.h"
    , }" _/ |( a6 G2 Q5 Q! d1 ?7 f
  25. #include "AFXINET.H"& W7 P  ?$ E7 k1 X5 ^9 r- d" g1 T& i

  26. : c* W- N, W1 D
  27. #define TRADITIONAL_CHINESE 0' ^9 s2 C2 d8 L
  28. #define SIMPLIFY_CHINESE 1
    ; ~1 f" m1 p8 ]( A9 A7 r0 R
  29. #define ENGLISH 2, f/ x% v* q% ~! Z3 J4 M" P
  30. int m_iLanguage = ENGLISH;- N, ]2 {! |* q0 z8 e
  31. /////////////////////////////////////////////////////////////////////////////
    0 k% R4 Y8 o, k& y) U; w
  32. // CRevAppApp! q! }6 U# [6 Z: a( c

  33.   A$ d* h: q+ b* H) A6 L/ l; u
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)' Z8 N% \: n" a# e  b) U
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    & e& _& j  P) ^4 b7 @3 b% c" ]$ b
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    / L3 J' \! S3 E0 f2 ^
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!+ y  c! `! L6 S" R- Z; w5 `9 O
  38.         //}}AFX_MSG
    * T7 R3 [$ C& k& H' \. v7 T
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    % w- t) s- [; w5 _% W
  40. END_MESSAGE_MAP(); F, x8 s0 L! o/ w# [$ q; M( Z

  41. 1 J5 n5 R( Y0 s. S3 b4 Y3 A9 _1 n0 X
  42. /////////////////////////////////////////////////////////////////////////////: Z% P3 ]& }+ f# T$ m/ S: _/ k2 N& o
  43. // CRevAppApp construction% B* p. ~1 d* N4 G/ k/ M
  44. ( a6 [  i( ?1 @7 m1 x) t
  45. CRevAppApp::CRevAppApp()2 E4 E9 {$ C" x" U. ]
  46. {
    - m" x! p( X5 r8 S
  47.         // TODO: add construction code here,  f! ~; k+ D! B* K6 Y6 q$ r* g
  48.         // Place all significant initialization in InitInstance( f$ ?! d4 W8 `) s' ]& k% r2 ~
  49.   bDisplayIsBig5=FALSE;
    5 m9 Z8 z5 ~+ n7 ]' W& i( k
  50.   bRestartUpdater=FALSE;
    3 x/ |* r3 r: C; e% _% t" F
  51.   bFinishUpdated=FALSE;
    0 N. \* A! d" P
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;, o* _) @6 L. V- u
  53.   InitChangeDataBig52GBKS();+ k% k% c6 Y) \/ k( _
  54.   InitChangeDataGBKS2Big5();
    ! @* h6 `4 S2 _) \+ p
  55.         //
    $ n9 H$ Y5 i' D2 @; c* D, x6 \
  56.         bClickRunExe = FALSE;
    $ ~2 W! y% p  ~/ k. H  Z
  57.         //2 U# H$ E0 P6 g
  58. }- x+ s* k& l, a. ~
  59. . z5 P* I8 _" j& t( D+ k
  60. CRevAppApp::~CRevAppApp()
    ( c& y4 Y) P* f/ z$ u. E5 L" u
  61. {9 h( h& R" z4 p4 n
  62.         // TODO: add construction code here,
    $ ]5 N" ]2 y3 l$ y" s
  63.         // Place all significant initialization in InitInstance  n' O1 o( A+ Y* m$ t: I7 K8 \
  64.   EndChangeData();
    $ f# n$ I( J/ \# P6 s+ k; n
  65. }
    & r) A! k( `' e2 J' ]" M/ j9 x& |
  66. 1 f, W: A, @8 @) i) M5 x
  67. /////////////////////////////////////////////////////////////////////////////
    3 g, c/ S0 S, V  z9 [
  68. // The one and only CRevAppApp object  F& Q7 p. y) A7 v& w" f4 |1 U
  69. ! f) w4 A2 D) ~
  70. CRevAppApp theApp;. X% p9 C, o6 P# k

  71. ; S; g1 r$ R2 a# u
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ( ?: [: P1 v8 i- G, B6 S' X
  73. {9 ]1 d) s6 M  I. b5 ?( n
  74.   int iEOF=0;1 }$ j, B4 y) A3 r8 d" ^( c% W
  75.   char szTempName[MAX_PATH];& y( h& l& ]7 `; \& s3 D% f, U+ P5 \
  76.   *szFileName=0;
    # l( V3 p. y7 ]- Z
  77.   iEOF=fscanf(fp,"%s",szTempName);( Y, Z6 f- W; Q
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
      J4 W, ^+ \  S6 x3 |2 K
  79.   {
    - D3 ], N" g$ r; Z
  80.     strcpy(szFileName,&szTempName[1]);
    : M' V7 s5 X' ?
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ! {) Z. v4 B7 X' n* s: `# I
  82.     {
    : N7 l2 m) g$ K7 R8 U' b* I
  83.       iEOF=fscanf(fp,"%s",szTempName);
    3 x/ G4 ~# f) q  H" c9 E
  84.       strcat(szFileName," ");
    ; z$ _+ A3 S( y" u- \) p) ?
  85.       strcat(szFileName,szTempName);
    ! u+ ]/ |( L9 ]8 A4 {
  86.     }
    0 q" {5 A0 d0 O5 K5 h8 y  R7 G
  87.     if(strlen(szFileName)>=1)
    $ u% K9 i8 V- O" t" H
  88.     {. w# F' o1 U, l5 q: T
  89.       szFileName[strlen(szFileName)-1]=0;4 Z4 m: k0 W% ?( j2 J$ ?
  90.     }' L0 e( k" N5 \; k7 P1 x; o
  91.   }- }! A: `6 ^# I: U( h  n* V
  92.   return szFileName;" P% [: M5 ^! Z) V/ D% ~* ?2 }) T+ I
  93. }0 I' k/ G2 O: u' c: J- k" j

  94. ( Y" P; e, |, l# K9 G' Q
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)8 `" n' G  L+ r8 s
  96. {
    ' Q! |0 H: W# Z  _" @# s
  97.   FILE *fp;* T% G" F* z0 ]6 b6 g7 x7 e' q' d
  98.   char *key=NULL;# G! ?* I- U% k* F) N/ O0 T
  99.   char version[MAX_PATH];2 C  T* r; S6 N5 N6 h' V  J" M) v
  100.   LPUPDATEFILE file,olds;
    , P% l0 Q, p+ H4 l# O4 a
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" U( s# c( X+ F* Y$ Z5 H0 {

  102. . j3 h4 S9 P* B" u# A0 C) i- S
  103.   UpdateList.clear();. v* a( l0 S/ o. O
  104.   UpdateFile.clear();6 `6 @- {" P* n( |3 g0 @, M- k; p
  105.   if(GetFileAttributes(filename)==-1) return false;: q5 M4 j6 x  [) a0 w4 ~0 _
  106.   if(!(fp=fopen(filename,"r"))) return false;9 ^1 b" _) a2 l
  107.   fscanf(fp,"%s",version);
    5 [) _- j7 n+ b# `3 L! V9 D
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }5 @- [, i5 j1 C, L
  109.   while(fscanf(fp,"%s",version)!=EOF)8 b: k4 ?8 m+ J6 W
  110.   {( P. Y3 h2 @' u' ^' x
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: P$ n' R8 m) \# F$ r" C' G
  112.     fscanf(fp,"%s",file->path);  _. i, ]4 ]/ F
  113.     ReadFileNames(fp,file->file);
    : g  ~1 [& F5 X; b1 ~( v
  114.     strcpy(file->full,".");' a, P- N8 V' R- `; F! V
  115.     strcat(file->full,file->path);5 y1 U6 ~% |0 u3 _7 b; L: i! K
  116.     strcat(file->full,file->file);2 t7 r+ W7 K" s/ ?: g
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())/ W  x5 o) G8 a( i3 u
  118.     {
    : V7 z' H4 u! V5 N5 M* ?5 S
  119.       file->vers=(float)atof(version);
    " r0 Q5 m/ U4 f6 k
  120.       UpdateList.push_back(file->full);
    # W* R5 W) l1 T2 D- l
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));, }8 L; v( q6 o7 F8 b. Q
  122.     }
    ) a- [8 `/ ~6 {- v7 z
  123.     else3 h" G* j. |1 k0 u. [  y
  124.     {
    # U) ~4 s1 v& y8 t' {5 a1 B/ c4 d
  125.       olds=(*p).second;: v- n/ f% r# r4 D
  126.       if(olds->vers<(float)atof(version))
    4 R: l* o+ Q1 n# B. R) S- H
  127.       {' j5 G$ k% [& U
  128.         olds->vers=(float)atof(version);' ?: e8 G- A8 T6 j, c
  129.       }
    * p( m) D" B# \2 y8 R* J) }& ?9 [8 Y
  130.       free(file);& |! S* a% H, y* _7 M! C
  131.     }
    8 Y$ R0 R2 |  e2 w. E  C
  132.   }7 \) K7 B- v* F& [" G7 A
  133.   fclose(fp);; \" ~+ ~  a0 _' b* A
  134.   return true;
    ! F; v, K- v7 ^# p% M, B
  135. }
    # O' k6 O; P( \1 |! x1 m

  136. " Y% F+ F- Q+ E+ ~7 @6 m0 I1 h
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath): g' L. J8 n' T$ ~8 z* O  {) {" }  L1 l
  138. {% c/ o. F: I( i
  139.   TCHAR  szFull[MAX_PATH];8 Z1 T: \" ~( h% S  }% [% v
  140.   TCHAR *token,*inter;+ r' T& m; H- [6 ^
  141.   *szPath=0;
    3 _* x" c. W: f0 ]# c
  142.   strcpy(szFull,szFullPath);0 ]* D4 [) M* g
  143.   token=strtok(szFull,"\\/");" ~9 a! z1 _- J" E$ B% m+ ~0 Z0 e
  144.   inter=token;
      C  \" T" q9 J* g
  145.   while(token=strtok(NULL,"\\/"))
    0 O1 v. K/ u5 V2 U2 ~
  146.   {5 ^, a' d( X8 b/ U. E) L
  147.     strcat(szPath,inter);
    / X0 ]$ e5 u# J+ Z! I" w! \
  148.     strcat(szPath,"\");! z5 p2 {' f* C/ |: H
  149.     inter=token;
    ( u5 y- q1 w: Y! A5 ]; J
  150.   }7 R# w. V* {- x
  151.   return strlen(szPath);
    9 E% d: O* c* ^
  152. }) s. D; s4 o% u9 f

  153. 3 P6 K$ N) m/ u$ h, V  V6 _9 ~- Y; u
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    $ Q$ i) S7 {3 V5 |# r0 w* r7 U
  155. {
    + m3 L; g6 I7 x* V
  156.   DWORD attrib=GetFileAttributes(Target);3 h, S8 b1 U3 ^$ j& @
  157.   if(attrib!=-1)
    # B& C+ M! E2 A* s* ?
  158.   {
    4 t1 @* ^# M" B+ q1 C
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ B+ ~: x- }( M( J: i; e& ~
  160.     {" l2 h; Y; W) ~: j9 @# p' z
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);1 ^; [: B' P9 A% J9 p
  162.       SetFileAttributes(Target,attrib);( ^8 f5 b4 U9 K
  163.     }
    ( ~$ \; z0 ?/ v
  164.   }! ?8 v2 V9 O$ d7 n  v% \  J
  165.   CopyFile(Source,Target,Erase);
      N8 i2 \0 L; X9 y! }
  166. }- ?9 Y$ Y/ c6 f: M, U) I3 g
  167. / W; l; x% ?9 j9 g. t5 H6 I
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    6 M8 }  J, L5 O+ N! ^( H0 l  |
  169. {0 n' N5 t" Z, G8 a# E: c! g( N
  170.      FILE *fp;, a# d* J) p2 `1 u4 \
  171.      char  szBuffer[8192];6 F! N0 [" t  ]' }
  172.   va_list  argptr;
    ' L) t/ a* p* c' z0 X: d9 J
  173. / T0 G) U/ X; c* K% m# ^# E
  174.         va_start(argptr,message);
    6 v6 t; Y: N) ]. \
  175.         vsprintf(szBuffer,message,argptr);  N5 u; n) f; i; Y
  176.         va_end(argptr);2 Z( }: C( o. t" ?7 e
  177.   fp=fopen(FileName,"a");# C- W2 \( }# @& S5 m) y6 j
  178.   if(fp)! ~: _+ ]8 n2 F: w0 M
  179.   {! L% P5 @, a. {( v
  180.     fprintf(fp,szBuffer);
    : f. C4 \, |) m( l, J
  181.     fclose(fp);' f, R" U4 _$ e0 m: r1 z% W
  182.           _flushall();& I, [/ ^; {9 L7 x
  183.   }% h! [8 \% B! B7 K8 D% T; o+ @
  184. }
    1 P5 Z' L6 x& ~% t. Q( b
  185. ' |9 V5 H+ j! G  B) J& H6 H
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    , N' K+ @+ w! ~" W) u3 j$ q' X
  187. {
    - @5 E9 l* f; N
  188.      FILE *fp;
    4 ?3 @" l7 ?# s8 b
  189.     DWORD  attrib;3 P# n7 n! `1 n' M& L1 ?2 k
  190.   attrib=GetFileAttributes(FileName);/ A- ?" t. i( U; L1 X9 {
  191.   if(attrib!=-1)
    / x+ c6 {# A4 \- p) a1 Q/ O' s8 }" P
  192.   {, A9 W+ J7 r: }& v  N% `1 B! d
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);) u( X4 ]9 }1 ~; e" B
  194.     if(!SetFileAttributes(FileName,attrib))6 O' k# p4 F6 [5 G: w
  195.     {7 v* Y7 ^8 s, }  a* P& [+ @, u- z' R
  196.       return FALSE;
    9 R2 @) K# M3 |) b7 i" o+ h
  197.     }
    * i# e5 m, Y9 l- c' A1 [8 v+ |9 _
  198.   }2 S' Z/ _6 c: X  }( Y8 U9 K* W
  199.   fp=fopen(FileName,"wb");
    $ I# c; U- @+ p: {3 k2 y/ ^8 _
  200.   if(fp)& e; y: V% C8 y
  201.   {& S* g* n  u+ f+ y6 v, m% Y9 D
  202.     fclose(fp);
    7 f  j! m+ [/ D; ?
  203.   }
    0 V4 A) R# j0 r9 o( Q7 s8 a
  204.   return TRUE;) D  l- z; A$ V
  205. }) H: R) M9 s! L& ?' A
  206. 8 z! b, k7 {0 {) t" u! s6 ?
  207. BOOL CRevAppApp::UpdateLocalVersion(void)/ v# ^6 r8 s0 J( Z6 n1 J) p4 i  g
  208. {
    # m  y4 C8 z* c2 U
  209.   char filename[MAX_PATH];
    : A- {1 ?: d. |) Z& Q
  210.   LPUPDATEFILE file,olds;- [! m; \9 F) D% f7 M2 s
  211.   std::map<int,CString>::iterator i;
    " u* x  I$ ^! l' Z6 F: {
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) F8 a7 u) |! Q3 ~
  213.   std::list<CString>::iterator l;
    9 P' ?' `( r: R: ]# I+ ]7 y
  214. 4 J( I" m2 ^# p* \
  215.   if(bFirstUpdate)
    - B! @' a3 F6 l! `# F4 N
  216.   {9 [( T$ [' D- K/ ~( L( ]4 W
  217.     dwCurrFile=0;
    2 M! k4 o) _2 G! z" f  a5 V' A
  218.     bFirstUpdate=FALSE;
    . c1 o% _, ?' J1 }- f. g
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())2 \" W4 B$ e& d7 e& `4 V) J
  220.     {
    5 J9 W( s+ V4 _; B5 v
  221.       dwTotalFiles=UpdateLocal.size();: C$ f  A3 `* B4 K7 y" q
  222.       dwDownLoaded=0;. ~  ^" Y) |. d, M# C3 v' w4 H3 K
  223.       bSilentStep=FALSE;& b' T3 W  u+ M* C8 }( \' y: x
  224.       bCompressed=TRUE;" ~% m) m3 Y/ s5 v- |: G2 O# s
  225.       strExtLocal.Empty();
    9 d) [- B: k/ d4 M" G
  226.       strFullName=(*i).second;
    0 w. o* p1 _( m, U' B9 M1 t% j7 n
  227.       dwProgramState=AP_CONNECT;4 `2 L1 g1 x1 \, m) _
  228.       return TRUE;
    & R! s1 o! s! ]1 t1 }' j
  229.     }
    2 e1 @* l5 I" G" J# w
  230.   }
    ; D  i: {7 F4 G; I
  231.   else if(bRestartUpdater==FALSE)
    ! a. v! A8 m7 ~1 J  |/ V
  232.   {2 S& w; l( X( M' p
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())# p1 ]' @0 z8 b, ^# ~. E- p% z# E# h
  234.     {
    8 r) p* f7 K1 A( @' K* s8 }" s
  235.       file=(*p).second;
    : F& m$ B: ?  [! A4 O
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()), c% _4 l3 s& J2 h' `. x
  237.       {! b" h' e% ?6 t) M) U8 z
  238.         olds=(*p).second;
    & {: q* u! \9 Y- ~
  239.         olds->vers=file->vers;2 \- L6 X' x- d. x
  240.       }5 m9 X" U! O8 [1 N
  241.       else
    . _9 y9 B6 ?4 O) b
  242.       {
    * w8 N% o( E- N" z" k' Z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 n! M, x* e$ t6 A8 h# F
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    : U, U6 v: h* L0 `
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ; o2 T+ X4 C' R6 C
  246.       }
    6 P) ]; C% ?+ W. ]
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");. n/ j* T* R, B  a/ [4 L& _
  248.       sprintf(filename,"(%s)",file->file);" d: S5 u3 }! q$ Y$ y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 ]! k/ o. v7 j. V$ ?' y' |% G
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: E: [. i0 b1 E* J2 w3 F1 A
  251.     }
    & N3 J7 S! N/ j
  252.     dwCurrFile++;
    3 O1 n4 _( `% M, v+ I- P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - t. d& U; i$ d# v3 ~  U# b8 v6 W6 Y
  254.     {0 l" V' _- p& G6 v
  255.       bSilentStep=FALSE;- j; P* F; \- ]3 x! G$ h/ \& d
  256.       bCompressed=TRUE;
    1 d% T+ y! `  M4 m) e& m( c4 T
  257.       strExtLocal.Empty();9 M4 H' d  \. k+ v% q( F, l
  258.       strFullName=(*i).second;* q+ B) s7 i$ g" o2 }$ U
  259.       dwProgramState=AP_CONNECT;
    ! z7 c2 q  A7 x" m1 A
  260.       return TRUE;
    + \$ a/ K1 C- s
  261.     }' b1 {3 y4 `4 F0 s
  262.     if(!bRestartUpdater): d- ?- \" Y- V8 r2 J9 m6 w- N
  263.     {- g$ A4 Y" X7 D1 T1 T
  264.       int iCurrSize,iFileSize;
    , W- h/ |" _# N) e* k2 X* Y
  265.       iCurrSize=0;
    1 I# b/ i: N. \2 q0 I
  266.       iFileSize=UpdateList2.size();
    ! V% R1 O9 k6 I( y
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ! S7 U, Y6 c6 ^- ^+ S
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    0 t  B1 |# [* _( c% l8 A& x4 Q3 c
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    * w7 ~) T' X7 A) {0 z9 j4 F
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " c" y+ _1 b5 j7 @
  271.       Fclearf(".\\update.dat");0 z$ h% S3 z, |$ ^. s6 K& Q6 n
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    % c& H6 G4 _7 x3 n' {
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 w8 a" s3 u/ ~* _0 @
  274.       {: m* [- x) [6 m3 T: F* u" K* }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())9 W6 ?. {1 v' T( p
  276.         {
    2 I. u1 _0 |0 Y6 u
  277.           file=(*p).second;: a( [' L# @, q2 v. r7 u
  278.           sprintf(filename,"(%s)",file->file);
    ' x5 t* {: u' a! B! @
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  q2 V; |" l- d. c9 R
  280.           iCurrSize++;
    ' A4 I6 b8 v" X+ e7 J) i  \
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) i" G: g3 K. g  m; H
  282.         }
    6 s1 {- b1 N) i% i$ S. d
  283.       }* }* Z$ T" w. q* ]/ }$ u0 d! ?
  284.       unlink(".\\update.txt");
    / U; n7 S4 U2 l9 e4 [" j# N# j9 c
  285.       unlink(".\\update.tmp");' C# m8 P% w: w5 V
  286.       Fclearf(".\\checkversion.dat");
    : w" r: N: K8 f2 |  M3 H* \
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);5 [/ e: X2 H: C, w6 K0 x; D
  288.       if(UpdateLocal.size())
    , j2 b' Y' A# Q4 h
  289.       {' P- }' C" e4 I+ B+ b/ w% h
  290.         UpdateLocal.clear();
    & g" P: y7 a7 N( J3 j
  291.       }
    5 u: x4 m2 b6 U- U# O9 k
  292.       if(UpdateFile3.size())
    $ E9 y6 V7 W9 }  O+ A
  293.       {
    8 C) s( @2 u& N# R; }
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 w9 e+ g" k& H- U" ?; q
  295.         {
    ( `! F# u/ t: l" p$ [. n8 C0 G- d
  296.           file=(*p).second;3 ?0 @. ~  n" e* @! q, X4 B
  297.           free(file);1 I8 ~/ J' k! l, c; x' U
  298.         }
      }. r7 E; o9 v3 w
  299.         UpdateFile3.clear();
    * \% `" I4 x; t7 i2 g! p$ D
  300.         UpdateList3.clear();
    7 ~$ \# }, d. v9 O7 m" \
  301.       }7 y% M8 C3 {. I! i1 ]
  302.       if(UpdateFile2.size())0 z, j  H# u6 U2 @6 {8 P) S
  303.       {( T6 B+ ]0 I! x4 x8 u/ e# F; h3 H% L
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , {) d7 \, V8 C  J% i# F; j
  305.         {" }1 N" d) q+ u
  306.           file=(*p).second;: i1 I: s8 Y5 W# e
  307.           free(file);5 J4 [4 C  c1 _9 M5 \4 X; o
  308.         }
    : Z" n/ Z( r/ X5 X! @4 i& I
  309.         UpdateFile2.clear();
    * R) S# ]# C. Y* N
  310.         UpdateList2.clear();
    " }6 o2 N! L. C* N! L, a9 l9 J/ E
  311.       }
    # N8 A7 _$ P4 U- w
  312.       if(UpdateFile1.size())
    ! z! @- ~6 u6 t  V- O( h
  313.       {+ ~% K( e' J) ^
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  K7 a6 @. L$ w* X* L% b" G
  315.         {! H! a5 u, x  |5 s2 S
  316.           file=(*p).second;
      t. h3 y8 f8 u# Q3 L- [: p5 U
  317.           free(file);
    6 u8 l& @* h6 K$ s) ~2 H/ |
  318.         }- V& z8 _6 Y8 h; v! }
  319.         UpdateFile1.clear();2 n! ]& c: _$ X7 D' L  w
  320.         UpdateList1.clear();
    . z3 V8 B% S: |8 u
  321.       }7 M: A$ h/ P" I  k. `! Q  g
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));% J% ^2 c% [% w2 Z4 J
  323.     }8 e* E$ u- t8 d: t4 ^! S
  324.   }
    $ X' K9 K5 H: I$ M3 a
  325.   return FALSE;  l" @5 L9 t, e$ O/ x+ L! s, d7 Z
  326. }
    ' k4 `( L0 X7 c' E

  327. # \3 U7 L' S: G+ Y* _
  328. void CRevAppApp::ClearAll(void)
    & w5 }6 ]. k! c4 w. C0 h
  329. {4 z* S9 ?" h5 |; F
  330.   LPUPDATEFILE file;
    . N+ ~/ @; \6 o0 u- ]: u: ~0 w' h2 L
  331.   std::map<CString,LPUPDATEFILE>::iterator p;8 J, W) g0 `3 ], L" g

  332. & @: t9 ?1 z5 a6 u( l
  333.   if(UpdateLocal.size())
    ; A/ r" h$ x( F, U/ {* _
  334.   {, ~/ C0 }+ t! N/ q
  335.     UpdateLocal.clear();: c) J  T  G! H6 W& k6 W
  336.   }
    5 Q% M% y, Q/ `( N3 _
  337.   if(UpdateFile3.size())
    ! \, Y6 e& B8 L' T
  338.   {
    8 q/ \* m! ~# V+ v* p9 c
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 o- g) k; K+ A4 v5 y8 D
  340.     {
    5 w& w$ A5 ^  H# s& {
  341.       file=(*p).second;
    8 Z$ ?0 |, U' N& i0 H; ~) m. `
  342.       free(file);& j( g0 b' T6 H; Z" w5 H0 j
  343.     }3 N' V! T6 i4 E7 `
  344.     UpdateFile3.clear();
    2 t. b$ S# K  P9 J8 x
  345.     UpdateList3.clear();
    ! h0 t9 X: @7 c5 t* z0 P
  346.   }
    ' F. @. G+ R% v7 i
  347.   if(UpdateFile2.size())
    5 T/ w4 a7 I( `3 g1 ~
  348.   {
    / M, m; ~) v+ k1 Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + L! {+ {* J4 g0 z4 \
  350.     {
    ; g* K3 b" a" o
  351.       file=(*p).second;$ |. N7 j) r- N/ i9 C% \
  352.       free(file);
    ( O  O2 y8 d" I
  353.     }2 m- G. s5 m; ]: \5 L
  354.     UpdateFile2.clear();+ _6 u* y) P3 b
  355.     UpdateList2.clear();
    1 T! X& b0 |9 q9 s; j7 t& p
  356.   }7 K8 \0 @+ o6 l9 }: X% h" c. q
  357.   if(UpdateFile1.size())9 ?# w. o! n* J, x5 H7 C6 H
  358.   {4 T$ T  h  L* U2 H1 a+ U5 Q
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + @+ h8 c2 S4 B. s
  360.     {7 ]. N& [4 A' E: z0 Q/ K: M
  361.       file=(*p).second;
    3 I( r7 d. x0 y; x, l
  362.       free(file);0 _( [) @0 L+ s1 X! j
  363.     }1 u! i/ b8 k/ b( K
  364.     UpdateFile1.clear();
    : R! r7 G1 ]% m1 d
  365.     UpdateList1.clear();
    7 L. h) H3 Q# b; ]' M$ f
  366.   }
    6 h5 @5 q" V6 a1 a( a% N
  367. }  2 V) i  e! o# o/ _* m3 F
  368.   ) l7 g* H0 ?" O6 y$ r  Q3 N4 c  T
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 j. J  M9 S0 {7 i% g# t
  370. {
    , A) x* p4 V0 W: P9 l) @! y
  371.   int c;
    / N' s# b' `# E- \
  372.   LPUPDATEFILE file1,file2;1 o! R0 Y) E. H* N/ |% j# q
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    5 K. c! j. C3 m# @$ |5 f2 E# B% ?) N
  374.   std::list<CString>::iterator l;7 K* A& Y. H+ ]3 E8 q; }) ?
  375. : @" ^' _+ b" a" ]2 O/ `9 U8 V
  376.   UpdateLocal.clear();$ A' q. H% _/ B
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    # W( R) i6 v2 n! z/ o
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);* T6 y' O9 ^7 f3 E( l) _5 B
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);/ Y; C+ }0 O0 B# l+ I. Y9 O
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);' d! w* I  w1 {& |0 ]
  381.   if(UpdateFile3.size())1 v; W# d) U5 U: Q+ f$ J9 U8 k
  382.   {
    3 r- M9 t5 J1 j- \, i
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)) {9 k) p: }) _
  384.     {
    - \; g1 y1 U, |
  385.       file2=(LPUPDATEFILE)(*i).second;! u% a2 K) m' u: c5 M% d: u
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    . Q! S% {5 o2 j0 B8 ]" H
  387.       {6 I! P& H' ~$ e0 n! H
  388.         file1=(LPUPDATEFILE)(*p).second;! N- O6 J/ B% P1 x
  389.         file1->vers=file2->vers;
    4 d7 _4 @4 e9 m+ @# P0 ^
  390.       }- Y; ]* o- E* x# y& I
  391.       else+ W) T# X6 @0 V( e: j
  392.       {; K9 Y  r* u$ \# E; \7 {
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# y7 C+ t: R0 T9 ]
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));. k1 U6 c' [6 Q# R( i2 b' j
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));* |! M9 n, n& }: k, z
  396.       }/ N- U& z* ~6 l" ~5 Z5 F
  397.     }
    + M  b# ]- E8 Y9 M( I
  398.   }
      C: o2 @# t3 w. h; t& B  {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)# V, a; F  K8 n2 t) P9 |
  400.   {5 Q/ b0 X2 N0 A5 c* q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    / T3 _8 D$ u, I9 O2 K6 Q
  402.     {0 R8 a) U' o& a
  403.       file2=(LPUPDATEFILE)(*i).second;! W0 l' F' P# ~: d
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' M1 M, Z6 t! h) \+ y
  405.       {
    + {0 k0 X; m4 a
  406.         file1=(LPUPDATEFILE)(*p).second;- D. S3 Z- A; [2 R/ M! a: Y' G
  407.         if(file1->vers!=file2->vers): j0 Z8 H$ {: m) K. W5 U
  408.         {
    ! E$ y8 n/ T6 C' W- T2 e- R# m
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* \& B% n7 T+ z. l2 O- j+ h
  410.           c++;
    2 q7 r- Y" I0 W# p! f" X
  411.         }
    - a2 j3 h5 F, @4 a8 N+ p
  412.       }
    3 [2 N) T+ G# G- V5 |
  413.       else( l9 h( X4 S7 c1 K( A) r
  414.       {
    ) A4 z) n/ F. n0 P4 i& C6 ]/ h! x  M
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 T" p' F* V& N& Q4 X( I
  416.         c++;
    8 c# L0 a: N) Z; }) z0 H4 f
  417.       }2 O: ]% p* H  G% \% d( {* _, N$ h& h
  418.     }  @& d' v0 O5 U6 M
  419.   }
    # K- t+ }; P; ~% D2 V0 n4 `! h
  420.   unlink(".\\DownLoad\\update.txt");8 s  s" |4 c5 V- j
  421.   if(UpdateLocal.size()) return TRUE;6 z7 q* M8 q4 u; _2 Q
  422.   else                   return FALSE;& h& @% T# o1 K
  423. }
    ; ^( v  L# o3 N3 q

  424. 7 T3 w& k$ ~% }2 j
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"' P: a5 w" p5 ~9 B8 h3 d! F. h
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    / r6 r  G/ H0 R. A  ], z: o& i3 O1 Y

  427. $ S7 z. ?, g" r4 v0 Y9 p' l9 I3 _( x
  428.   w0 h7 m4 D/ z
  429. ; z# C1 q9 K+ ^
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)* y6 H6 H4 x6 Q2 D8 V+ B
  431. {+ I) ], K$ v; l
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;- x+ m2 U4 }! X* q  T8 \
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / u0 D$ `6 w9 D1 N1 S
  434.   {( Z! ^4 }- v1 q3 g- H
  435.     char szLanguage[50];  F- `0 q7 [4 q8 E# s  F
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 b1 g+ Q6 ]- d( C8 ?5 P
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' V( h$ T' O9 G% g
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 q1 p  U) w0 \  O- h7 D! {. P& h
  439.     else                                   m_iLanguage=ENGLISH;
    ; i# W2 D( H/ U
  440.     char szRegister[100];: ^6 L, B% J) K! W' k: v
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 R; ^, T! v/ s5 r
  442.     strRegsName=szRegister;+ M$ X  D+ S' z  @+ _
  443.     char szPatchURL[100];
    ) g! k& {, a% P- c8 Q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % t1 E# [5 Y# g% f" E% R5 o$ j$ f& o
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: }1 M. U7 P0 T% y# X# O) W
  446.   }
    $ ?: ~1 k/ }+ v8 J% L* O7 c
  447.   else- {) ?# \8 i5 Y3 u( h4 Q
  448.   {
    ( I6 V" D, k, z% M3 s5 G' M4 h( I# p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);" ^. d( B$ a: P! e+ @
  450.     strRegsName=DEFAULT_REG_URL;
    : |9 G2 M  k; S# P8 |
  451.   }7 l: y1 M! d! F! `8 U
  452.   if(GetFileAttributes("hosts.ini")!=-1)' }: @+ H% \7 D
  453.   {+ O0 y, Y( a# D; @
  454.     char szIP[50];
    - r- f# [& j9 i+ M, Z" ^# P/ J% m) J1 \
  455.     char szDIR[300];8 J2 t. M1 ?7 L/ N1 G2 W. z
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; Y7 G$ _7 a' |* W# \
  457.     {
    $ N6 _. N. g1 ~* {7 {4 k. a
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");: z6 x$ k/ o/ i' S* l9 i" l
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    * D8 X0 s' N/ `  ~7 G
  460.       strHostName=szIP;
    1 {3 \9 [; |! X' ]9 V3 V
  461.       strHostPath.Format("/%s",szDIR);
    ' z+ {6 g, i7 [3 P% Z; R
  462.     }
    ; a- X# s2 n' b- n
  463.     else
    ( c: Y) x" F. T
  464.     {+ \, X" Y5 ^, i' n: R
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( c6 M  g% D* w' k1 F$ T1 f% t
  466.       {4 {$ K' ~2 K. q3 A' Z
  467.         char szLanguage[50];& e; l& w. p$ K7 \' G/ b; |- _
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & J0 l( G8 p, V2 e& u
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 [/ }- m) N; A
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 }  q* ?/ E! Z% F& R  s  G( m
  471.         else                                   m_iLanguage=ENGLISH;5 k6 h5 {1 A' \% g
  472.         char szRegister[100];! d' F3 d( B% O$ D2 A
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ n0 W% f- v  {- D
  474.         strRegsName=szRegister;# W) F. Z8 U2 a7 Q4 K
  475.         char szPatchURL[100];- l+ C; L8 l8 V/ U' k
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 w2 Z% d* x; r6 X/ b) x
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. e& L9 w% R3 |. d" `6 e
  478.       }, ~3 M( M& `( T( f3 f  J4 ?5 H- z
  479.       else
    2 f% e: H7 ]0 W6 c1 ?
  480.       {
    + N( X# ^; C# U$ o1 M# O
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);! f- c( n8 ?* h
  482.         strRegsName=DEFAULT_REG_URL;5 Y2 x9 d4 f9 h- Q9 [8 s% U
  483.       }2 z  v& t! f7 y& K3 Q
  484.     }& o! F  }2 d8 B$ I: e
  485.   }
    & q1 g! P# Z  C8 ^0 K+ j
  486.   return true;
    : }' T5 |. _& G; s# ~
  487. }
    # V- `0 W( C9 k, E% b" Q
  488. / G$ l: C& ]# k) ^( c
  489. #include ".\ZLib\unzip.h"* s5 h1 h- {8 K9 @9 ~4 N
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    6 j# Y; e" M5 g# V/ o
  491. /////////////////////////////////////////////////////////////////////////////
    2 v9 g0 @( _: m8 @
  492. // CRevAppApp initialization
    5 f  C7 a2 B" R0 D7 ~* P2 R
  493.   o* r8 X# o1 H/ T
  494. BOOL CRevAppApp::InitInstance()
    0 V3 f: e7 u) T0 U
  495. {7 e; U& Z+ c3 \* R
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    9 o, z! U# p1 S0 ^6 H; P' }
  497. % t+ o' C: r2 d
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);: u( t$ w+ H& W6 g; y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))3 z% t) k/ F  C! v6 ]
  500.   {1 a- O# G: b2 j9 J4 J# p3 E
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    - T. u  @* y: E! ~" i0 r; @
  502.     GetPathFromFullPath(szPathTarget,szPathSource);* y& X" m) [, T4 X% h9 u" @
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    , r5 a! v3 O% f$ V9 E! P4 m! A$ |
  504.     {# T- [3 s/ Y" X4 V8 o4 q" E
  505.       strcpy(szPath,szPathTarget);
    4 O+ z+ @" v9 V; x3 h
  506.       SetCurrentDirectory(szPath);& Z% P5 c% v* ^( S+ G- l
  507.     }
    ! n6 [: m; Z' _% ^7 _
  508.   }" k, X4 k- ~3 V2 |! r
  509. #ifdef _DEBUG
      a5 z+ j+ ^6 }# m( O7 p- n% r
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 d3 |. n6 j" g- w; a5 c% G
  511. #else3 y( ?) A! w% p4 b% |* T/ F/ X
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % l" d/ h0 d& z* u
  513. #endif" w' @- J& k# q5 k0 v
  514.   {" Y4 x1 E4 o3 z) Y9 e2 Q) w
  515.     char tempFileName[MAX_PATH];
    % G4 t* k/ k* I7 x% b  @& V  E/ v9 g
  516.     strcpy(tempFileName,szPathSource);* V, `) i* F0 `
  517.     tempFileName[strlen(szPathSource)-12]=0;  u$ L0 h0 l, b# J+ J. @4 e
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    - s, z2 a5 q  [3 l: u8 t6 L
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ; u7 i* F- X0 s- k& S* o
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    5 e( W& n! g8 I- _9 `0 X1 T
  521.     return TRUE;; G3 Q1 q8 S$ g3 g5 o* X2 i
  522.   }4 U% }6 F0 j# l6 M
  523.   // Nuke 0118: Delete run.exe$ S0 d8 G7 m" f
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    7 U3 q1 Z/ F7 W4 s. }
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    9 l7 l, r! p& x" g( i3 b! [
  526.   if(!ReadCfgFile("Config.ini"))5 |0 B% a7 l% N! q5 b
  527.   {5 W0 o4 j) ^  ^+ j
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);# q5 S* [4 K  t, a0 f9 c
  529.     return TRUE;
    ' T% _+ f' q) V. n2 k$ z% ]9 E
  530.   }1 k  |9 R' B; h/ I2 L% Z* i- d* I
  531.   HANDLE mutex;
    6 Q2 O$ e6 h( t9 N& g
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    6 R3 o. g; W/ x# j3 o/ H
  533.   {
    5 |( M& h' B3 F& e
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 R9 W( g  w% l* k3 {: }
  535.     {$ [. |, L' S( U* B9 C( K* O! r3 \( c
  536.       CloseHandle(mutex);# M9 ^/ b0 z1 p6 U( H( |9 z9 p
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);& R! y! v0 ]' x/ c1 s# _3 t
  538.       return TRUE;
    ; r2 ~0 o0 X" h4 v
  539.     }3 ]3 F# @, E. V0 `' ~4 D: X
  540.   }  
    - p; T* y1 R: s
  541.   CloseHandle(mutex);* V. b) W) L5 b

  542. 7 T; h6 N# m' y7 ]
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ' s  m7 t. A. Q; s. P: T5 ~/ a

  544. . y! G9 V" D" o2 O1 z/ E) p
  545.         AfxEnableControlContainer();
    3 e% ~9 @% ^  {

  546. / G8 W3 H" ?0 p5 K. T4 `
  547.   bCanUpdate=FALSE;
    6 _: d7 k) f" O2 D5 _: r7 x
  548.   dwStartUpSteps=1;
    ) B+ [8 ~5 }+ H+ x
  549.   dwProgramState=AP_NOTHING;) ?$ S$ D' |' Z, T. L

  550. $ k2 O6 {/ y( ]% z; [. _1 F! i6 c: G- v
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    * U. h  n1 p2 m' Z$ N: r5 R

  552. * T9 q) \& g; G- G" {6 n( _
  553.         // Standard initialization
    " T6 O' A# r7 b0 T. p( e7 f
  554.         // If you are not using these features and wish to reduce the size
    4 n" p; }5 {# b  d: Z
  555.         //  of your final executable, you should remove from the following3 r% l, B9 b5 }+ f% M. W1 Y2 \
  556.         //  the specific initialization routines you do not need.
    ) [$ \8 p* `$ o  w8 g  X9 x
  557. 3 w* J9 P, b2 Z- C* i+ K3 n
  558. #ifdef _AFXDLL4 b& |2 n2 @, N0 G8 l
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    4 J( I; |, ~- z7 @% d; U9 _
  560. #else' D* F  c9 P2 |# x  s
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically- m( F& ~1 D4 i6 ?/ R! V7 V" K. \
  562. #endif
    " r8 |: x* ~* M7 r

  563. 0 ]% E# u0 o" w! @; Z+ X0 T$ I
  564.   dlg=new CRevAppDlg;
    2 V6 [( h) T% o/ _
  565.   dlg->Create(IDD_REVAPP_DIALOG);, n8 V9 s  h5 A/ g9 p1 F  }
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / l) D' B- B, @" y* s
  567.   m_pMainWnd=dlg;; @1 Y7 @! w7 k; v9 \3 a* `! N

  568. : w4 f- e$ c4 z% X
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);: j$ e( \  M; h; z) x  `$ g* ]& i

  570. 4 a7 {6 u* Z, |" f
  571. //  GdiplusStartupInput gdiplusStartupInput;
    1 I" N1 x/ E% o9 _+ R) q
  572. //  ULONG_PTR gdiplusToken;
    % u- H5 e% v( s( B) E: _" q" F; i8 ]
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    / ]0 R9 t# r# G" O1 f; T+ v5 p7 o

  574. * o; d* W$ x, k# i% C
  575. //        CRevAppDlg dlg;' S0 W. {8 F- h) e1 S
  576. //        int nResponse = dlg.DoModal();
    6 ]+ h  ?; \" x5 Z5 o
  577. //        if (nResponse == IDOK)" O% i7 D, k4 m- K+ P# I: o
  578. //        {
    " d; _) N4 \9 L: N/ y9 s
  579. //                // TODO: Place code here to handle when the dialog is
    $ V: `2 w3 d+ S3 k# z. G$ L
  580. //                //  dismissed with OK
    $ a7 b2 T$ m* Z+ K9 r
  581. //        }
    * h. {  x: }* N2 z+ T( M: @4 c" N
  582. //        else if (nResponse == IDCANCEL)  [9 a% i( L, f; N% s- a
  583. //        {
    - E3 j4 w! S: b2 ~# J) M9 U2 Z- ^3 X! |
  584. //                // TODO: Place code here to handle when the dialog is
    : I  ^1 S% Z8 h/ V6 \
  585. //                //  dismissed with Cancel
    3 R6 ^5 \. ~; h4 ?
  586. //        }( e* b3 Q7 C) Y/ N: l, C& z
  587. # w/ E/ ?% Q1 H2 u& S
  588.         // Since the dialog has been closed, return FALSE so that we exit the6 m( h- @4 S# ?8 _  v2 K4 e
  589.         //  application, rather than start the application's message pump.8 ~, {. l9 H& ~
  590.         return TRUE;
    + g7 l: L5 W  `1 j, |6 b. G) g
  591. }
    ' I+ e5 H% B* Y2 i

  592. 2 {2 h% h5 E4 F' m; p6 ?' N
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    % ]5 l/ \5 d4 E! _- Q8 I2 s
  594. {
    $ F) K7 O: ^) \* h8 _) @8 Z2 e/ ~
  595.   int i;- Z) @1 r0 a7 d! J) w8 g  h
  596.   char *szRet;7 @* D0 ]7 c2 W7 T9 D, f

  597. + C0 @- |. v$ `3 ?4 C4 \
  598.   if(pSource) { itoken=0; sztoken=pSource; }# y: m2 _1 n: D2 M2 u1 Q) P
  599.   if(sztoken): g5 p' P9 d9 Q5 D( O8 P' U
  600.   {
    4 h7 G  k  K' d9 ?$ E$ Q5 J
  601.     szRet=&sztoken[itoken];& `; J2 }& ^! ~  ]
  602.     while(sztoken[itoken])1 S4 O* J7 K4 J+ t
  603.     {9 |% _8 v* P( t6 r/ l) w7 z9 R- x
  604.       for(i=0;i<(int)strlen(token);i++)& K# r1 G4 x! K; I
  605.       {0 A/ Y1 Z9 n+ v7 X/ D
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    % u4 T2 i7 w$ X4 Y
  607.         {
    & P# j7 m  i! @5 R1 _! e) {1 ^. N
  608.           sztoken[itoken++]=0;
    $ p% N2 H% q1 l7 m1 |* m
  609.           sztoken[itoken++]=0;- O& C+ c( w6 e4 |* \
  610.           return szRet;
    ' k+ R/ u6 P' u5 X$ Z& O9 |, [5 Q/ Z0 b
  611.         }
    ( D8 `/ }: E/ l" `' U: `
  612.       }& a1 r% p. F: b
  613.       itoken++;
    4 S& D/ @* K8 @* r/ h. i3 f! R- X
  614.     }
    , i6 k/ [$ d) |" M0 W8 K0 B
  615.   }
    % P/ b7 d) P3 A" T7 b& X
  616.   return NULL;
    # A1 Y  t: l0 W
  617. }
    ; T2 C5 f( v  e7 q

  618. ! [8 o9 h# [; d3 \0 ^) t
  619. void ProcessProc(long Total,long Current)
    + x) B" @/ Z, N: V! A  q3 T& [
  620. {
    , x# f0 N* t+ Q, e
  621.         MSG msg;
    $ h" N" T; [" r
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    6 |( f. ]9 F. ^4 L" Q9 m" U
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    5 c: C" O& w4 {4 x$ v9 w, C* w7 p
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))5 M; i2 h! z( R4 Q& Q' l( j2 R- k- M
  625.         {
    2 E8 H( ~5 A/ h1 e
  626.                 if(!GetMessage(&msg,NULL,0,0)); [4 R0 {7 D+ ?
  627.                 {9 Y5 Q5 O: t% e5 b+ Q" J
  628.                         return;
    4 k! B9 n- T& v7 X
  629.                 }
    2 i5 C$ n8 \- y
  630.                 TranslateMessage(&msg);
    % M/ Y  Y/ ~* X: J* ?
  631.                 DispatchMessage(&msg);- e" _8 J7 \. B8 Z- l. p
  632.         }       
    " L# F4 b+ d) t- N6 o
  633. }
    8 U7 d0 V  S/ {* e& @

  634. 9 T$ C, r. D8 }4 ~
  635. BOOL bFirstChar=TRUE;' [+ J  I8 o$ E4 @. G
  636. & o1 I8 P! I; p
  637. BOOL CRevAppApp::OnIdle(LONG lCount)9 N0 z0 F* {& D% I
  638. {
    8 |) ]  B0 V4 W; K& v
  639.         // TODO: Add your specialized code here and/or call the base class
    ! {/ n" A7 U# @2 U* `2 z* p+ M( m
  640.   switch(dwProgramState)
    % U  W1 Z+ G$ O
  641.   {% \7 j% J" g* b
  642.   case AP_NOTHING:+ h( y: s% t2 Y5 i* I! L5 l" {
  643.     switch(dwStartUpSteps)$ m" y# L* x+ B
  644.     {( _2 L% I% N& R
  645.     case 1:
    " A0 K* h, h; E* p- u9 s* s: U
  646.       {9 U* X: Y9 |- t8 _0 ^+ T
  647.         int i;
    ) }% U: S+ J+ J* g- ?8 M
  648.         CDC *pCDC=dlg->GetDC();
    . Z2 C' i' F! `; W1 k
  649.         HDC hdcwnd=pCDC->m_hDC;  d4 H; k; ~8 ]& M4 |
  650. //        Graphics graphics(hdcwnd);7 }, {3 t! L/ ?- Z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");9 x' G! t; w0 \5 Z% [4 @5 g( u  u
  652. //        INT iWidth=bitmap.GetWidth();
    / I! m2 W$ z2 B8 x4 Z: \% Z
  653. //        INT iHeight=bitmap.GetHeight();
    9 t# q2 R6 K. x6 B. V
  654. //        Color color,colorTemp;- G3 \+ b( Y* p( Y4 z' y$ L5 S: l# G
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    2 m/ L! Z: c1 j/ F( W/ U5 D6 c9 }6 i
  656. //        {& g+ C: N5 ^5 t5 J; X$ t+ C
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    . _8 n9 L" q3 n: t. ~
  658. //          {- I7 O5 X% ?$ W  t: w! n
  659. //            bitmap.GetPixel(iColumn,iRow,&color);' t% G: ^, {2 p% y: m
  660. //            colorTemp.SetValue(color.MakeARGB(" l8 K, `% @; Y# d8 W) z8 B
  661. //              (BYTE)(255*iColumn/iWidth),# S# N: Z5 p2 ]  v( v/ a
  662. //              color.GetRed(),
    0 p: ^) [  S, V$ n3 P9 G4 B' Y5 J
  663. //              color.GetGreen(),8 S$ B5 e0 @' _5 H2 ^. T& O
  664. //              color.GetBlue()));% Q6 s( H7 y! N& o$ X1 T0 z- j' K
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);  E" e, J$ j! _6 y" e" x
  666. //          }* k3 C& ]& Y! o& I- ?
  667. //        }4 n& h; A& m+ [% S
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);' o2 F  R1 F/ m
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: R! ]- R$ p# T4 ?1 a- l2 q/ N
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
      n) T, L  t" ?+ [- d" s5 V
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 P" c' ^# Y% |- e* v& ?2 H
  672.         for(i=0;i<240;i+=8)
    + j+ C8 x- U* u
  673.         {& @3 \' u* \& p' `% ~5 _
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; E! C9 g3 L% s+ i( R
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ }4 o. E) Z$ s, O. v' M& c! H( x8 P
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);9 E3 {0 D9 Y3 d  A% W/ A, f
  677.           Sleep(33);
    - {2 I$ z7 o3 r$ ~' j$ `1 G
  678.         }7 a' X8 ]' `! J
  679.         Sleep(1000);$ P% O  ~! h" P4 g# \
  680.         for(i=240;i>0;i-=8)
    8 ~: W. D; `$ e
  681.         {
    ( q" V0 L8 ^7 E! Z6 c& n- k
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; }. |3 b6 @* |& q; k, ^6 h3 J* s$ g6 {; u
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 c( v9 D+ ?3 l! D+ T; v0 R% p; b
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * P) i, E1 i' m) d1 U  L
  685.           Sleep(33);
    2 A5 x/ l, L( E, o& }3 \
  686.         }
    5 H; |% N* `$ Q7 D* m9 E7 C
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 |, D  m4 u5 o$ S$ Z7 t% c- K& r
  688.         dlg->ReleaseDC(pCDC);5 u1 m% y  M4 o! S4 z4 V
  689.         DeleteDC(hdctar);6 U0 e- k0 x% C) ~6 x
  690.         DeleteDC(hdcsrc);: X, Y4 @7 I( w8 L4 t4 |- S6 s
  691.         DeleteDC(hdcorg);" u3 R# W1 ]1 A' P  K' l& R: u
  692.       }1 U9 C$ y8 t0 a- B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);& t6 ^& q) a% a; ]
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");7 Q3 E+ A0 k4 R4 j
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");6 D# Z) n( v  a8 I
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");3 ?* r) F# j9 Y5 u- a1 p9 Q" h
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # }( q; J* a  n+ |* s" Z
  698.       if(!Dn.Connected())
    8 x+ ]( D3 Y8 H
  699.       {
    6 |- w. N6 |, N5 D* x
  700.         dwTotalFiles=1;
    / w  \! S8 g5 ^; Z8 \- l+ b- d
  701.         dwDownLoaded=0;
    ( G  Y  W1 g% a6 K7 `
  702.         bSilentStep=TRUE;: p% F9 ?  l7 D4 x: A1 Q
  703.         bCompressed=FALSE;# S& `8 i* B8 M* {) P0 T1 w' [& w+ v
  704.         strExtLocal.Empty();
    0 D, @! O" G; _. n: C; _; ~/ H( r- C! I" T
  705.         strFullName="readme.txt";
    ; i: g* D0 i# e  `3 ?
  706.         dwProgramState=AP_CONNECT;
    5 u3 i3 Z; E  }3 z6 u
  707.       }, Z3 q+ W5 x" P, b
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    . x1 y8 y6 Z9 I) L- s5 D
  709.       dwStartUpSteps=2;
    - _# h) Q/ }$ L' P( L; j/ ^# C
  710.       break;7 V& b- L- D7 h% g
  711.     case 2:* d  D% S6 b1 z. I2 F6 R" z! Q
  712.       {
      O9 v6 c& g; A# [. G& V
  713.         int iEOF;( ~; \" \' c9 y  @5 V
  714.         FILE *fp;; u. Q* [' c. \# t) S/ X0 B# {! t
  715.         char szString[512];: I% s* z% W# m
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");1 X8 E5 i) K9 P7 t; p, j3 R
  717.         if(fp)
      ?% p% }7 O9 [0 i4 R% j
  718.         {: O/ U* o( T9 t: X6 s
  719.           do; i2 o8 j9 X, J" A. L- I
  720.           {9 M* t7 b+ U, i' f8 J' H! ^3 a
  721.             iEOF=fscanf(fp,"%s",szString);
    : R1 x8 Y1 t( S
  722.             if(strlen(szString))2 G3 e& Q8 C3 n* s* H" r
  723.             {
    . Q$ R$ m  ?* |1 ~- d) d0 F8 N
  724.               if(bFirstChar)4 Q% n* v& C, O7 i4 \) s1 ?! k
  725.               {# Z' I3 N" N2 @& B
  726.                 bFirstChar=FALSE;
    / y) {. }( X! Q
  727.                 bConnectIsBig5=FALSE;
    & W( y+ o7 B: \7 y
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;# y- d# c9 ^( G# u
  729.               }
    2 A& Z. [4 x4 r$ ~4 t
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    9 L6 p8 }7 Z$ u& j3 |6 D. M6 z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ! O/ M0 L9 X( [3 m; D
  732.               dlg->m_ListText.AddString(szString);: V) ?5 g9 d9 ]$ p. X# X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. [' ?) A3 N* W8 N" g3 P% A
  734.               *szString=0;7 s# H, R5 o- q5 S  ~1 `. o
  735.             }6 U) @5 Z+ u% y
  736.           } while(iEOF!=EOF);. l& ?& _. ^) c7 @( n1 F
  737.           fclose(fp);
    ( g: d% [3 ~; u1 w0 l9 r  d
  738.           unlink(".\\DownLoad\\readme.txt");
    ' c4 s. w2 i0 e
  739.           dwStartUpSteps=3;3 U! u4 L% X1 H( v
  740.         }
    0 M. S) P) c$ y+ R+ w& `7 W
  741.       }" H1 L3 h0 C' K' q) R7 c
  742.       break;, r0 u2 r6 k8 R( o
  743.     case 3:& U& h' x4 X; h4 [% f# \, Y
  744.       if(!Dn.Connected())
    6 r2 m9 j1 G. x6 |7 f9 V6 H: {
  745.       {
    7 l4 r) m' i* s) u- E& S
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);$ H: A5 Y% Y! M  b5 G2 b
  747.         dwTotalFiles=1;
    * y, a( a! c# {" M* y
  748.         dwDownLoaded=0;
    + I6 V# J; C  {0 S* m
  749.         bSilentStep=TRUE;1 j6 l$ ]% b4 `& M
  750.         bCompressed=FALSE;7 I, q; y% c! t% q7 e5 ?
  751.         strExtLocal.Empty();
    8 s; @, j: m" I  v$ l/ c
  752.         strFullName="checkversion.txt";, u- i- D. \( c3 e! |* B) T
  753.         dwProgramState=AP_CONNECT;3 P: c) L) A8 [( @0 @# i
  754.       }
    9 Y, ~3 k7 z  `7 g/ k) ~  ?
  755.       dwStartUpSteps=4;& ^1 u' }: F; D7 X1 S" S* U
  756.       break;
    4 B  D+ R0 i, J$ K; i2 b8 v
  757.     case 4:
    8 y, o( f: I8 I6 o9 t/ o- w6 {
  758.       {) |) x) F' P* D6 ^
  759.         FILE *fp;' \* ?0 q1 m, l: l1 p" K/ F
  760.         char szString1[128];
    / V+ W; l5 Z4 J: i2 w3 E) Q: E
  761.         char szString2[128];
      R6 y# s. @  f% W. I8 t
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");0 x& l4 W* d6 N2 A7 x( D
  763.         if(fp)& m6 B3 P( S. G  E0 ]9 L
  764.         {; {6 ]% \2 u4 D) ?9 ^- R& g% F- {
  765.           fscanf(fp,"%s",szString1);0 y1 Q' z# f$ W1 J3 e
  766.           fclose(fp);
    + X* E; _6 R2 ]* l9 Y
  767.           fCheckVersion=atof(szString1);' t) a+ \4 V0 M3 b
  768.           fp=fopen(".\\checkversion.dat","r");# h: g. j! K1 p/ `' j" T* z" }! U" A
  769.           if(fp)
    1 x5 `0 ?) {6 {6 j
  770.           {
    3 t  r) a, h4 P' I' Q) A
  771.             fscanf(fp,"%s",szString2);# a: S" Z+ D' S3 U
  772.             fclose(fp);2 z  [6 i8 Q# q! m8 V! _8 k
  773.             if(atof(szString1)!=atof(szString2))
    . W2 H7 E/ |6 n
  774.             {
    / F9 y: d- J3 ~6 I3 D
  775.               if(!Dn.Connected()). z, k# q6 O( _
  776.               {6 D4 f7 Z3 t$ ]. Y& Z* V! k
  777.                 bFirstUpdate=TRUE;4 D5 _- `/ A+ v  I: n9 z
  778.                 dwTotalFiles=1;. N; ~2 |/ p, S5 R' F9 T
  779.                 dwDownLoaded=0;- Q2 K) e* p  Y  T
  780.                 bSilentStep=FALSE;: R$ B" ]+ f8 a7 |
  781.                 bCompressed=TRUE;  N$ C. L# X, F; H9 s/ T- d- l+ p+ O
  782.                 strExtLocal=".\\DownLoad\";
    ( Q6 e! ^5 [% L3 n
  783.                 strFullName="update.txt";/ q) [; p$ p' U6 S: m4 a
  784.                 dwProgramState=AP_CONNECT;
    3 d" B9 |6 s. e' g+ r8 q  _
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 I0 R. Z" E5 Z. s  m, N7 [* I
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");1 E$ ~: z6 F7 q, w" J8 s
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    9 A1 y! Z$ D) B* O! n
  788. * L# `& P/ U1 n( S3 _
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 c7 K. S' P+ F' n/ x
  790.                 unlink(".\\DownLoad\\checkversion.txt");8 p- Q: a* n) Z" U! j  h
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    1 x3 h; u; w  I4 y5 a8 R: I/ k4 ~
  792.                 {0 |0 w/ @8 a; j) X( H# r
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");" V" a1 w, @2 T: [; ]
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");/ [# U/ L" H  U2 B' g2 q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    & Z; D& _& h$ I" V. @4 ?: r  r8 X
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) @7 c5 x; g$ u4 l, z: ?
  797. ! K, }& Y7 Q5 k+ T6 \
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, U" A: R. d- W: y  c. a, t
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 E6 m& E, j0 d8 C4 V; e
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");6 R3 [2 b' }' d1 ?( O8 r
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  M# k% W, Y. d3 Q
  802.                 }
    0 Y/ q# J! Q' K& f
  803.                 dwStartUpSteps=5;3 x' j( J+ z& r; d+ q" G, a) s
  804.               }
    , [& X. |! d# I; p& ]
  805.             }9 d+ S3 U+ ^3 W
  806.             else5 ]" w3 O# H  r# d. [& [9 j0 M0 X
  807.             {
    : A5 X2 O% r( V7 d
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ! H' t8 h" W! K2 B3 G9 J
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : f5 x  Z# \. K! L
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ! J: a, T1 I) K4 C
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");0 X- t0 A. |. ~' y$ D. B

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-11 01:55

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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