CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
# r0 `' w- S3 U" E7 n9 L; v4 ?
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ) A& ?# l  \6 A3 t, X6 T! m! o4 k. D
  2. //7 Z9 E7 O* i' b' P7 O1 Y2 O: `3 J
  3. ! I% @, Z+ b7 W
  4. #include "stdafx.h"
    + B" p9 V: {7 ~5 O( f% q' Q

  5. * X$ O8 q  d, F6 D5 `9 z8 P
  6. //#define UNICODE0 T" @; t, y: ?+ \% e  T
  7. //#include <gdiplus.h>
    9 W- m* f% d4 j6 {7 B& z% M9 ]
  8. //using namespace Gdiplus;3 y3 e7 J. I& t  I# {$ i
  9. & ]/ V! \6 Q! p( K7 R
  10. #include "RevApp.h"
    5 g% `, T# S; Q/ w1 e; j+ r
  11. #include "RevAppDlg.h"$ y7 \8 K+ S0 b# a; D/ U$ H

  12. 2 o+ b6 U; ^) a8 a
  13. #pragma warning(disable:4786)6 o5 b* `' b& M- P( g! P1 }
  14. #include <map>" b6 D8 X/ u' ?5 I. Q
  15. #include <list>
    8 Q. `- r  s9 G' r4 K
  16. #include <direct.h>
    0 U3 \# ^  c7 w! c

  17. 3 k+ G" h5 B2 n
  18. #ifdef _DEBUG
    ; Q& H) A; Q$ `' j! a
  19. #define new DEBUG_NEW
    0 M* }& y' ?1 Y2 Q$ ^
  20. #undef THIS_FILE
    ! c: F% n- K- L1 z
  21. static char THIS_FILE[] = __FILE__;
    ; r) c, b3 H! V7 @" u
  22. #endif
    4 L: J2 d  [1 l7 ]
  23. #include "SkinResDef.h"+ ^. p6 E! A  c1 K2 i. B
  24. #include "ChangeBG.h"
    2 t) C. z& u+ e( L
  25. #include "AFXINET.H"" z3 p' ]: K7 I5 b2 y" M: C& y
  26. 1 v$ d8 L( D8 J+ F! H
  27. #define TRADITIONAL_CHINESE 09 J" N, n1 c. _: ^3 Z. H8 I
  28. #define SIMPLIFY_CHINESE 1
    + A! i- D1 Z' b
  29. #define ENGLISH 28 \4 ^. A- j% K* C2 c
  30. int m_iLanguage = ENGLISH;2 a4 ~% i7 O; I( h1 F
  31. /////////////////////////////////////////////////////////////////////////////
    , i& E) Z; ?# b, ?0 @5 i6 ]2 G
  32. // CRevAppApp" }% `7 m& p3 f. \. \% y

  33. 1 M8 f. G! `  k0 f0 a/ U
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    4 j/ @) F, Y; d
  35.         //{{AFX_MSG_MAP(CRevAppApp)8 ~. m6 x/ j: a, V/ X' W
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ) m9 i; V& o0 C1 w! Q
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ) f, O5 q! i+ g& A
  38.         //}}AFX_MSG* _7 @7 @8 {7 j* b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    + s) T5 ~6 t. E* L& Y4 W9 y  A  i
  40. END_MESSAGE_MAP()
    7 t; W; g$ ~; j2 Q1 k

  41. / B+ M/ E: s: `
  42. /////////////////////////////////////////////////////////////////////////////
    & j7 q( H! l) h% K, r% V4 w
  43. // CRevAppApp construction/ E! D5 m% M' m9 M& Y4 Y4 b5 z/ \
  44. ) }3 T. r# V( ^  ?1 G! p2 k
  45. CRevAppApp::CRevAppApp()8 W4 ^" O/ {$ s! @7 U
  46. {
      O7 v4 B% r6 l0 A$ x2 P
  47.         // TODO: add construction code here,, G: C; L( ]" U
  48.         // Place all significant initialization in InitInstance4 x% q, |0 m# u# Y" `9 ~: E, |
  49.   bDisplayIsBig5=FALSE;/ S2 w5 i3 E! s. ]' e9 O* C! W# Y
  50.   bRestartUpdater=FALSE;# L0 E' v8 Q) e% Y
  51.   bFinishUpdated=FALSE;
    % q# w) a8 h8 W/ q+ H
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    " O6 P/ F/ j& Q* f! z9 S) @
  53.   InitChangeDataBig52GBKS();
      \' o+ b# k! {; P
  54.   InitChangeDataGBKS2Big5();6 p7 |8 L' y$ {- ]
  55.         //( U5 X+ Z+ I6 f' K. E4 r
  56.         bClickRunExe = FALSE;/ ?. V5 m! p6 l; j  Q$ w2 i/ d
  57.         //
    9 f2 ?$ _! Q( c6 Z
  58. }
    6 Q: G" w& ]' h9 p1 k1 E

  59. 0 K" p, M, i% k$ j8 C  ]/ Q
  60. CRevAppApp::~CRevAppApp()
    6 Y/ W0 M, B# Z2 J# C+ U
  61. {
    " S$ y* T7 Y. O
  62.         // TODO: add construction code here,2 b* s" i+ V8 u' R% A
  63.         // Place all significant initialization in InitInstance
    % t, T# |" X" m! \2 q3 v% i( Q0 e
  64.   EndChangeData();3 P# d# Q9 M6 w1 i. s* G
  65. }6 k* Z8 e8 R$ u. p
  66. . [' v2 ?4 M% f& r: \$ D
  67. ////////////////////////////////////////////////////////////////////////////// X& K9 z/ J) s" q# ^4 b- z( G" l  E
  68. // The one and only CRevAppApp object" V4 o) O2 Z' y2 V, N

  69. 8 W% _3 p( e$ E  v/ t8 g' Z
  70. CRevAppApp theApp;
    0 g$ U6 \/ K' G8 A

  71. / y9 e) h) ?/ J/ h5 h3 z" G  Z  [
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ( @" f. G. V! p8 @3 z
  73. {
    ' c. P) n; G+ e. z/ K1 o
  74.   int iEOF=0;1 A3 _1 R: e' \+ Z0 W3 D
  75.   char szTempName[MAX_PATH];+ e* b) B  I: U) {5 p
  76.   *szFileName=0;( W) O# D: U& K5 S" L' V
  77.   iEOF=fscanf(fp,"%s",szTempName);
    3 i# v9 g$ I; u. P* ]3 y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
      {% \# B& n1 X* D2 |
  79.   {' y; q, [8 o. V5 |4 d/ U- V
  80.     strcpy(szFileName,&szTempName[1]);. C& j# R! a% s& H3 x) a0 k) S
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    / }4 g& }) z3 X2 J2 q
  82.     {
    5 }' d7 `, x  k/ b
  83.       iEOF=fscanf(fp,"%s",szTempName);8 x6 ]& }0 e0 h* s( G
  84.       strcat(szFileName," ");; t: \# \4 V/ l
  85.       strcat(szFileName,szTempName);) k  V; _* U- O" b
  86.     }! h9 p# h* z- ~5 _
  87.     if(strlen(szFileName)>=1)
    2 m+ O. V- V) G; I5 P
  88.     {
    - V$ N+ D2 x1 m* q2 |$ H! I3 c
  89.       szFileName[strlen(szFileName)-1]=0;
    " m$ ~: T1 D1 U5 G
  90.     }
    " A2 w3 C; I! x1 g
  91.   }
    & r  K7 L& K+ T5 B* U" L; @
  92.   return szFileName;
    " o; m6 ^8 m" P1 M: P6 _
  93. }
    , }/ Q- X* @" d' y2 i. {0 g

  94. ' B6 i. x; M% b8 B9 D/ D' Z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)7 D: I: V8 ^  ^
  96. {
    3 ]5 h0 O& L5 s; n1 D
  97.   FILE *fp;$ a; `2 O% x5 b4 F) r( k# W0 E  j+ t1 a
  98.   char *key=NULL;
    ; q; L# G3 M# x/ ~
  99.   char version[MAX_PATH];( H# r+ A5 l0 K9 ^! X! n
  100.   LPUPDATEFILE file,olds;: R) q) T0 ~9 Z/ M+ r
  101.   std::map<CString,LPUPDATEFILE>::iterator p;& U  V: n; E2 b4 D, J; ~% w
  102. # c, y! N. s% K) l+ w( @
  103.   UpdateList.clear();! H6 w  w9 f' E" j5 D
  104.   UpdateFile.clear();  Y7 t+ a0 ?& K# _) p, a
  105.   if(GetFileAttributes(filename)==-1) return false;
    + x' w7 u8 s1 o2 ~6 D3 U) h
  106.   if(!(fp=fopen(filename,"r"))) return false;" o7 K8 \* Z5 ~; _3 {
  107.   fscanf(fp,"%s",version);
    & a! d  v1 ?, {2 x$ c$ T; q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }. @3 X. f+ t+ o" d
  109.   while(fscanf(fp,"%s",version)!=EOF)7 q  ~& j6 [0 i
  110.   {1 M1 V( L. K* Y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * X) u+ N: W3 {5 c5 U0 ^
  112.     fscanf(fp,"%s",file->path);
    ) T5 g8 z5 Z! N5 E" Y
  113.     ReadFileNames(fp,file->file);2 x, i" [* h( J, V
  114.     strcpy(file->full,".");
    4 e& F7 C6 d* v/ ], X& S8 p2 a
  115.     strcat(file->full,file->path);
    9 [7 ~* S- ~2 ^* ?7 Q5 X+ _3 S$ q
  116.     strcat(file->full,file->file);
    - a, @# W' H. O, |
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    0 l7 i1 T+ y" _8 s0 w
  118.     {
    & z2 R* Q( K4 a2 w
  119.       file->vers=(float)atof(version);$ G2 s$ Z+ u# _4 U. l- X
  120.       UpdateList.push_back(file->full);; {; e7 J: ?  j1 O" v) i. r
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ) C# l; ^3 w+ h5 [- i
  122.     }
    * B9 O# c3 {* f3 T7 @, i
  123.     else# m3 g( q0 G4 c$ f9 Z
  124.     {5 x  t" p; h: x/ W& [: u+ J
  125.       olds=(*p).second;
    , G* }- R  Y1 x6 e! f( J: l
  126.       if(olds->vers<(float)atof(version))" \5 Z4 M8 ~* A& a( e2 ]/ k
  127.       {
    0 v+ g1 |- Y5 O6 |/ v: m* A0 y6 N
  128.         olds->vers=(float)atof(version);) Y& h$ d& Z$ P9 {
  129.       }* U% [/ P( K" K( F6 W
  130.       free(file);
    : a5 I: o3 _9 _: i0 j% W( o, @: G
  131.     }
    ) U3 L$ Z1 s2 a
  132.   }; K2 D, V, P# w( p3 J
  133.   fclose(fp);+ J. y8 Z- i6 |0 J" M) |
  134.   return true;
    - k  v* @# k# x
  135. }
    ) x; T. e. u4 ~  e& x
  136. 4 m$ }3 ~. p9 X/ D) A
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    / h- Y! `6 z: d$ S7 G( _6 p
  138. {8 z6 y1 E7 z7 ?4 z9 N# e
  139.   TCHAR  szFull[MAX_PATH];% r" _1 c1 L: u; r
  140.   TCHAR *token,*inter;( u, f8 t$ |0 @" B/ o" F
  141.   *szPath=0;
    ( K. B% ?: {! s
  142.   strcpy(szFull,szFullPath);7 R1 k/ [4 V" y! }
  143.   token=strtok(szFull,"\\/");' a3 t' \$ t' u8 k  `/ W
  144.   inter=token;7 A8 g2 D4 ^: {. k7 F) _
  145.   while(token=strtok(NULL,"\\/"))
    3 N7 L4 e# q! i* f- v
  146.   {4 R& k+ ]# m% f1 S8 y/ m% [
  147.     strcat(szPath,inter);
    4 Y3 F, S3 y6 L& J1 I4 ?& d. _( S
  148.     strcat(szPath,"\");+ f6 J% r2 Q: I% ^
  149.     inter=token;
    1 i4 M& B* _$ q6 \+ Z9 N: k" `. [
  150.   }
    & |3 Z4 G* s+ X1 k7 i# g* O3 H1 ]
  151.   return strlen(szPath);. b8 ^  s/ S7 @( i
  152. }
    ' B, z( V# s! w$ U" L, t+ O: Y5 g
  153. 8 q5 E+ d7 m8 O& I) m( A1 D
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)1 k  T& \% N0 K& x  S3 p( O
  155. {
    " g" F1 R9 b1 W" G* Q: F2 K1 y
  156.   DWORD attrib=GetFileAttributes(Target);! u& v/ j% c, \% [  z$ w7 R* w
  157.   if(attrib!=-1)
    * j2 j0 {! H# K: }
  158.   {  o/ L% ?' d- E9 s' d) Q# R5 E
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    " P- \) E+ H7 [
  160.     {( P, j6 s/ K4 o9 K, d9 X
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);% @" O* h6 O7 p9 @7 m3 m+ x- _; b8 P
  162.       SetFileAttributes(Target,attrib);
    - p# K7 o3 T, Y: H$ N+ B% m
  163.     }
    2 K/ n9 z- Y; |2 ^  I
  164.   }
    - L. H: u& \8 b/ Q
  165.   CopyFile(Source,Target,Erase);
    & z. k" U+ {* s" f; T
  166. }7 U1 ?' P* V3 V5 J# m
  167. 0 k0 K; B: L5 d! n. x% S8 ~& ^
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)2 @% i- N6 t( V+ m0 T0 {  a% d  {# n
  169. {6 _5 z' H- `. a% w3 `# n
  170.      FILE *fp;- _6 d$ e  I/ A+ s8 G) v
  171.      char  szBuffer[8192];
    2 r7 w1 \1 c. X' e+ D+ B0 x6 h
  172.   va_list  argptr;
    ( C  W) j6 q$ ?" T9 V

  173. - s, r6 T9 ~# u) [
  174.         va_start(argptr,message);
    ) s1 V, i. T  j# I* U+ E! e. ~
  175.         vsprintf(szBuffer,message,argptr);
    - R! p7 Z5 Q* G* w/ c# W& E+ D% q
  176.         va_end(argptr);( q) S- H: ?, m4 g& z& }; D
  177.   fp=fopen(FileName,"a");9 t( K! p4 y3 D6 J9 n0 n
  178.   if(fp)! ^1 O/ R1 w( I" I" f
  179.   {7 ?8 Z) N& x. z) ?7 S
  180.     fprintf(fp,szBuffer);
    ) E( F9 g4 m! V. c
  181.     fclose(fp);: e: v3 O' W4 w  Z6 a1 A* Q
  182.           _flushall();
    7 h3 i# z( B* O. U" U
  183.   }# J2 l5 s* W3 o! f4 ]
  184. }* U4 e0 g9 ^" \$ L
  185. 4 e+ v0 F& i& N8 c! l
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ) z# L' q' d" j; o3 z" Y5 ?& z
  187. {6 @, P/ I+ O. m1 E7 m5 m
  188.      FILE *fp;
    0 g/ u8 [3 v* U5 a# }/ h' Y4 @
  189.     DWORD  attrib;
    0 \2 l8 i; q" U7 c8 H
  190.   attrib=GetFileAttributes(FileName);
    3 K" w- I7 T2 t7 u$ o5 p- Q
  191.   if(attrib!=-1)5 n) v3 n0 ]7 ^. I
  192.   {  l$ Z1 W* d3 U% T4 X+ j
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);" W  b+ \* j7 f) r0 \
  194.     if(!SetFileAttributes(FileName,attrib))
    3 M& J2 h7 v$ v
  195.     {  L8 \3 D% J- ?# z$ h/ i! O& y
  196.       return FALSE;
    # f* P8 d2 C4 N; ^9 u
  197.     }
    7 e4 U, j% U, ~* D0 c) V& ?+ c+ z
  198.   }: D  A; s, L. ?1 J* ~8 L; {
  199.   fp=fopen(FileName,"wb");8 m1 {, P) C8 y$ G  t
  200.   if(fp)
    9 `  B6 e! B5 M. D' k1 z
  201.   {
    6 @. H7 C9 [, h1 ?, d. e) X
  202.     fclose(fp);
    ! |) Y' s% }" H' F+ p
  203.   }) p! L1 x0 J! p5 h
  204.   return TRUE;6 _0 k2 b5 K+ d' M5 Y7 s
  205. }
    . P7 u2 r7 L$ m3 b3 @6 B
  206. # _# w6 l% _: ]& A2 ~. ?2 Q
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    7 I6 ^0 b8 ?4 A
  208. {$ ~: Q) A/ L( x) Q
  209.   char filename[MAX_PATH];
    & E" B5 @2 j# f3 j9 ^( T9 n
  210.   LPUPDATEFILE file,olds;
    % [; L5 F( S' _" M
  211.   std::map<int,CString>::iterator i;
    + ~* z5 D% r! n9 }! K
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    + w1 _/ `1 q0 y/ B  T2 i
  213.   std::list<CString>::iterator l;$ H! q! q6 D/ [$ @- J+ X! Z
  214. * s2 w: _% C) w2 k# h
  215.   if(bFirstUpdate)' B7 s6 u- P$ F" [: F/ w
  216.   {
    ) K6 o5 ~5 F! U) l
  217.     dwCurrFile=0;4 {& Z* J0 f3 v7 V3 i' u/ g; T
  218.     bFirstUpdate=FALSE;4 b3 K7 T3 D9 U* r
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 C) e- A5 Y* l8 ]
  220.     {
    / \0 R, [1 ^3 ]$ y" P; L
  221.       dwTotalFiles=UpdateLocal.size();% }, h5 f. D0 f: Q! _
  222.       dwDownLoaded=0;
    6 k% A8 i  s: X# G! n+ p" |
  223.       bSilentStep=FALSE;, g) z5 K1 G* f* x& K
  224.       bCompressed=TRUE;
    6 i1 [. C5 r2 Y/ ~. h: `
  225.       strExtLocal.Empty();  T- x# _  h5 M& G) z
  226.       strFullName=(*i).second;
    8 b" [% V" N9 C5 W, \
  227.       dwProgramState=AP_CONNECT;  O# b$ w+ y  p8 ]" X
  228.       return TRUE;
    . H5 K( `+ Y- \
  229.     }2 I. }4 B9 G+ K7 N
  230.   }
    5 T+ Z) x/ ]' d
  231.   else if(bRestartUpdater==FALSE)
    5 q# W8 ^3 K( b% q' E) T$ x
  232.   {+ J7 p6 `- b' p) @
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- b4 r9 \  n6 D( D
  234.     {% o; n$ ^$ N" s/ Q0 n4 D
  235.       file=(*p).second;# N3 t  X( G" V+ w( V7 p0 K. d5 G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    / m3 ~9 c4 s) L7 y  p+ S7 D
  237.       {( a7 k) F  Z- o, k8 A. i
  238.         olds=(*p).second;
    ; f6 F3 h, F" @- ~5 K! D
  239.         olds->vers=file->vers;
    ( w! z8 o- \* Z" S, L
  240.       }
    ' W2 L% D4 W2 z! k; p! O
  241.       else
    ! k  z0 A+ S$ p) `5 M+ \2 y, V( \
  242.       {
    % K$ p/ V: w2 w, B7 A. Y, d/ ~
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " B' L: Y  Y! N
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ) `. u9 e6 j  s- j( e
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    + P# e! t- E. v) s! o: j
  246.       }
    5 }! t2 F2 G5 M; m& t, P5 w9 u
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");/ O' Q& D4 G# U% m/ m6 t, E7 [
  248.       sprintf(filename,"(%s)",file->file);% B1 Z+ ^9 L' q! G1 l6 L: t
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' Y) i9 i% }( f" ]
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }- V- t5 w& ~. ^- N' O
  251.     }$ r) p0 L( M6 Q3 F+ z
  252.     dwCurrFile++;( ^0 C. z* H( c& w
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())7 U, B6 ]& Y5 {" Q$ q7 ?' ^; @
  254.     {/ P6 W+ X7 j2 _/ Q0 \5 E' g& t
  255.       bSilentStep=FALSE;/ r" O. Y$ }2 c
  256.       bCompressed=TRUE;+ p2 z  g# x. h$ C* \2 s
  257.       strExtLocal.Empty();. ]9 `2 K2 |/ @" Y7 N: A) [$ X
  258.       strFullName=(*i).second;
    ; Q8 E; B3 |3 a6 j5 N
  259.       dwProgramState=AP_CONNECT;! [+ \+ E8 Y& x& F3 Y$ A& w- O
  260.       return TRUE;) y+ B7 L$ {9 H1 \2 c
  261.     }
    3 h& T: o& q1 W. d0 V6 V; C
  262.     if(!bRestartUpdater)9 `% V! q' I3 ?5 {* v8 b7 N9 L
  263.     {
    . w$ Y0 v& x, j) |& L( [6 M
  264.       int iCurrSize,iFileSize;5 |$ m/ k7 S* Y. B
  265.       iCurrSize=0;
    7 P: @* }) B; D: F/ \' M
  266.       iFileSize=UpdateList2.size();# |; K  O5 K7 q1 p7 U
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    7 i6 K8 N6 T* C1 ~
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");2 o5 Y; X* ^4 B
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");, `! X4 J% Y  t+ E+ N
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      R/ p! u8 q$ C7 s6 J& U# t3 S
  271.       Fclearf(".\\update.dat");
    - t& K3 A8 F9 U; k
  272.       Fprintf(".\\update.dat","Bloodyf\n");; Y, g7 I% n& H) V4 p( `9 d1 g
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    : X& `2 p7 }7 k' V' p
  274.       {5 X5 j4 I% ?9 T7 L+ i( c7 A
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())0 p3 d, P# @/ J2 R5 V. L
  276.         {9 T$ ~" ~6 ^2 d' A7 C; j
  277.           file=(*p).second;
    1 S2 u# f! f4 Z" N" z
  278.           sprintf(filename,"(%s)",file->file);; p" c1 C3 o5 U/ }% t$ u  P
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);$ O0 i$ ^0 M/ |- s0 s2 ^  p
  280.           iCurrSize++;% K$ y- D7 Y3 M. `
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));9 o) }2 G: _7 S1 ?7 x
  282.         }
    1 {) v4 ]/ n% _  R
  283.       }. j1 p! u# D1 a. ?
  284.       unlink(".\\update.txt");
    0 d; ]5 u; G( \) S! R& X4 ?/ }
  285.       unlink(".\\update.tmp");
    2 A7 Y: G: |6 P# j' y
  286.       Fclearf(".\\checkversion.dat");. ]6 Q+ n8 G$ e3 f8 Y% x. D* u1 Y
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    . q: \, U$ e. o5 c
  288.       if(UpdateLocal.size()), w+ p4 J+ u; d. T' \8 W: o5 K
  289.       {$ Q- Y+ b6 X* m  m0 H, I! B  I
  290.         UpdateLocal.clear();
    ; |( r- B6 v) G3 z" h
  291.       }
    / C) h5 W+ R6 x$ r$ d
  292.       if(UpdateFile3.size())* H& T6 D) E5 M2 y
  293.       {' W: f0 U0 N6 E
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# x1 t- v  _& _1 R/ @: Z  Q
  295.         {
    # R! x6 H+ N- L( v- j
  296.           file=(*p).second;1 ~/ S+ Z2 H( G: D
  297.           free(file);
    - K+ a. i0 R7 `9 h
  298.         }3 |) x: T3 k9 I6 ?
  299.         UpdateFile3.clear();
    5 ]9 a1 u+ H4 p2 J
  300.         UpdateList3.clear();
    ! [& V; h5 p0 {
  301.       }
    " H' E8 J9 A; q. N- B9 |3 g
  302.       if(UpdateFile2.size())7 ~- B) [( r) N& u
  303.       {
    5 ?% b/ I8 w4 h4 ~- `
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % Z" O2 ~) }9 |/ {
  305.         {
    4 b: }5 ?; a- A3 G! z
  306.           file=(*p).second;
    1 z! A3 m5 _! f! S
  307.           free(file);! u- p1 h1 z' V/ q4 t
  308.         }% m# n& }/ q2 f8 ^1 k. Z
  309.         UpdateFile2.clear();/ C' t! u" I4 o, [( i* x' v+ D0 m
  310.         UpdateList2.clear();
    / R6 T' e( {# g) Q9 |
  311.       }0 `5 @6 e' B% y! l
  312.       if(UpdateFile1.size())
    7 m9 t  @: R0 v! f" p4 o
  313.       {% ]& i3 v1 w$ b. u4 Q  |  N
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / g- y1 P0 `) l6 q
  315.         {
    # o% p! y6 p0 v: X8 y7 o9 `
  316.           file=(*p).second;/ m; G' X4 ?" J8 B' _
  317.           free(file);
    9 }4 C4 a9 q8 ]8 V- k
  318.         }0 V) Y+ z  K5 V7 L3 Z) l5 {
  319.         UpdateFile1.clear();% V- h3 I& w  X/ F6 ^
  320.         UpdateList1.clear();
    ; V5 o; @8 P* L) Z8 K8 n
  321.       }
    6 \: t) a1 }% V( U
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    , T5 n2 f- E, d- G6 _
  323.     }
    ( e. K, ^8 K5 ~- [2 O2 k1 ]
  324.   }( K( {3 t4 \, @: @2 ], F- s
  325.   return FALSE;
    1 N6 T+ L- a5 Y& Z" G3 z
  326. }
    : I6 n, W& C3 ^' a9 D. Q
  327. : Y0 H2 `$ ~" O
  328. void CRevAppApp::ClearAll(void)
    8 N2 m; m, u9 L- m! u, u) _7 E' A
  329. {& a0 [* |( F& p; H2 ]1 L
  330.   LPUPDATEFILE file;
    8 T1 {- l3 z9 v2 Q7 r  \! v# h
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    # V) l0 n1 u9 h) B; q

  332. # f) I( p) ^! j0 J( W4 s
  333.   if(UpdateLocal.size())
    / T! }" f8 x! F
  334.   {
    " X9 v" j5 M8 L: s
  335.     UpdateLocal.clear();2 d3 |) s/ o7 O/ }
  336.   }* l* X0 b* x5 A* y8 Q5 u
  337.   if(UpdateFile3.size())& e- g* R7 W! K+ S6 D1 j( N/ G
  338.   {; R! I9 G; }1 n" y5 c
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 V+ l  w1 a/ M% x1 B+ p
  340.     {# k5 Y$ E4 U. c9 Q' i2 U+ `
  341.       file=(*p).second;. ?9 r1 W. e! _/ _
  342.       free(file);
    ' D3 W9 J3 o1 _( a8 Y: y
  343.     }
    ( U+ X* n2 H0 I1 M) D9 ~
  344.     UpdateFile3.clear();
    3 q/ d. y( C; N7 |, c9 ]6 J
  345.     UpdateList3.clear();+ f! `# b1 b, X0 R  A* s
  346.   }6 S  N6 G7 I3 n' p, r# `4 Y
  347.   if(UpdateFile2.size())
    % W* P0 T9 i/ r" ?
  348.   {
    ( q# S+ ^8 g6 E" L
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 m4 L' v- U" ?6 N8 D
  350.     {3 o5 z* ~1 a. \% ^: S
  351.       file=(*p).second;
    6 o8 J0 n' o8 ?: Q+ c' r4 A, T( q
  352.       free(file);
    : w8 ?' o2 H3 m+ \) `6 m
  353.     }
    1 |/ s2 {# y8 y) i
  354.     UpdateFile2.clear();+ U- N' k; y! F+ y) Z8 H/ I: W5 w
  355.     UpdateList2.clear();7 _9 a  p- Z7 k/ v
  356.   }
    2 k+ o- b; _; V1 V
  357.   if(UpdateFile1.size())
    % K; N0 g4 N3 j
  358.   {/ E" u: W# h/ P# O) A- \
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  t* z7 D, j( j, C+ h
  360.     {
    % x' A# i% l. ?) H( M
  361.       file=(*p).second;
    " x. t' c8 {; P8 d- k8 W
  362.       free(file);
    0 y. l* ~  L: O7 b+ h' s
  363.     }
    4 y) J, G# s, G6 H$ `
  364.     UpdateFile1.clear();
    6 h0 C$ R; a' w" R9 o; K: P
  365.     UpdateList1.clear();- w9 c3 X& H7 a; e
  366.   }
    * b$ q8 m3 ~" W5 R# ^% I# b0 z1 z
  367. }  
    ) r8 S8 \+ W' v  s
  368.   
    ! B1 @3 f# K% {- N. ?/ @5 j9 I
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ' ^' d' ?1 E; F* t% s! L8 \
  370. {
    . j% t8 n. M' B+ {
  371.   int c;
    9 b9 Y7 L( _# p, K3 \+ `
  372.   LPUPDATEFILE file1,file2;; V3 C- E3 X, h. f1 ^. i' \1 o: @( w
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    - T, I9 [5 c$ k/ F
  374.   std::list<CString>::iterator l;# _, J6 d8 q; |

  375. & B0 K# z; s. {0 H) G( q& q& X
  376.   UpdateLocal.clear();
    # S9 V1 I7 h% E$ ^! S
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( l) v# o9 L3 h/ j6 T1 K0 K  e
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);: s% ]1 |3 o; m1 _& x% X" @
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ; }  K: {' M& n3 s  g
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    . ^5 M- W; V8 l: `* ~3 d" R$ |
  381.   if(UpdateFile3.size())
    8 @  G- Q2 T! V" j0 X8 g, I
  382.   {: X4 c6 X2 M- h* Q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); L, X5 I. L  j; _5 E9 f
  384.     {
      f4 K! V% _% V- B5 ^
  385.       file2=(LPUPDATEFILE)(*i).second;
    ( i4 C# p) ?4 Y' n- ^2 a$ K
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& [1 |- ?2 O1 _) F
  387.       {
    - A  `; p! j: w8 F. ^0 D+ }
  388.         file1=(LPUPDATEFILE)(*p).second;
    ) C* h  e0 N- N. h! L9 b* R
  389.         file1->vers=file2->vers;
    + G( `1 G* D% D# k. h
  390.       }
    , R8 x# S& ]$ r
  391.       else
    - i- W- A6 [; ^9 D) |
  392.       {
    * c& R. l/ H1 @; B
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' \' @! J/ D7 e) k8 d! ]& f
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    # n1 y9 Y+ H  L) [8 y3 Q. o
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));6 y( A) H; q' C% x3 T/ @& k' q
  396.       }! F  [2 ]1 f+ \; L- D4 S+ i
  397.     }
    6 q# v1 N" I4 `/ `& Z$ U
  398.   }
    0 A9 }9 r/ G; W/ V
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)) a, n$ l  D* {6 w$ \4 q
  400.   {
    $ t* f4 A' e9 ^
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())' Q$ K6 {* z" C
  402.     {
    6 u% h' b( ~  A! F
  403.       file2=(LPUPDATEFILE)(*i).second;+ x/ X1 k: x4 U
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 n% e8 I- }/ y+ [" Q) [4 L
  405.       {6 @7 K( C9 p* s- O: C. z
  406.         file1=(LPUPDATEFILE)(*p).second;6 ~% \* p' B' K7 V- v: t, n! [- }
  407.         if(file1->vers!=file2->vers)
    4 \" c+ R+ H6 [! _3 _
  408.         {% p9 ^7 }0 k( P( Z+ i- ]( W
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( g9 M1 z% B8 i8 s' H
  410.           c++;% j0 R2 J: Y2 w1 [; R: W. V
  411.         }
    9 t8 y$ n" t8 w0 X
  412.       }1 B3 u1 @/ F0 l
  413.       else
    / t( G( a, E' `. D0 L
  414.       {/ U+ v" L. E. c2 {  i9 _
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 R/ k, g2 V, j: Q4 u" A
  416.         c++;! ?0 p" w1 v' v3 g& b6 n& u
  417.       }8 c$ I' @! p  _) c" E/ j6 M
  418.     }
    : A  ~" h- A0 i% ]
  419.   }9 g# x% _% M) t. P
  420.   unlink(".\\DownLoad\\update.txt");  V2 H! t  S5 d0 N5 q
  421.   if(UpdateLocal.size()) return TRUE;
    " p9 ?0 t. {/ y: P0 n
  422.   else                   return FALSE;
    1 [  L1 f, n2 R' T% I# ]' L. o
  423. }
    6 b& t' m. ?& b/ N3 p
  424. : d! u* a, \& b) B, ]3 U
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/") w' d3 O) M6 R6 ^. G
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    3 A) B4 N* M% Z/ r3 W

  427. ' q( [0 U  w) H. z) G7 x) u% Q

  428. ; [& J# p: W# R( l3 }+ C( _* X' d
  429. & \' B4 q5 b; Q; [0 S
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    / E3 R! u% u, W2 _+ \
  431. {
    / U7 o4 G- F. R9 [$ L% C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    : r$ A/ w0 \1 [& N# ?% {9 E
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , y; }6 G8 H0 P, e* ~! v
  434.   {/ K1 Y9 _' _0 p8 n. B" B9 t
  435.     char szLanguage[50];  I$ G6 G$ ^4 N  b; e) r$ S; @1 m2 `+ l
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    % s+ V* E& p  H0 w. n5 \4 o
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# Q8 A  s" w0 X+ B( g: }
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % e* z  I& g! j+ U
  439.     else                                   m_iLanguage=ENGLISH;) C9 m8 w' G# ^
  440.     char szRegister[100];5 r$ V7 q7 ?$ H3 S
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 V& Z+ d! [' _
  442.     strRegsName=szRegister;2 G' ]( q" Q5 o9 N+ t
  443.     char szPatchURL[100];6 P% a' E4 Z: _. n
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( h( j- b4 a! }' w$ h
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' Z/ t7 }+ B. W4 ^9 }: a( T
  446.   }# y6 L7 A' @0 M2 n4 f0 F
  447.   else# ~8 N  V) A" y8 |, _; K+ B
  448.   {
    $ T2 J1 i* Y% S4 X6 N* A( m. ~3 C
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);" y3 Y) s# p- D/ \; f
  450.     strRegsName=DEFAULT_REG_URL;
    1 ^% D5 J, B4 n' `0 O; h
  451.   }3 e$ I) ?/ E6 z# P' d3 ~, E# u* {
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * G+ T0 A- B  y/ [4 G" A3 H
  453.   {
    $ e% W1 a& y: Z# V4 R/ y* J
  454.     char szIP[50];
    : }3 Z# w9 X7 @( U
  455.     char szDIR[300];
    # u! p- w2 f- p* M$ o( X
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    . p, M+ ?& ]9 U& x3 M
  457.     {
    3 ]0 O4 I0 [0 f; Y0 C8 h8 s& R
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    1 z% M$ H, c4 s
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");" {; |# q  n  p
  460.       strHostName=szIP;1 L6 u" f$ k( o& O! I- U) P, ^
  461.       strHostPath.Format("/%s",szDIR);  w, Y0 }$ ?8 R6 ?5 v+ g( m2 |
  462.     }
    : L' U6 ?& g3 Y5 J! G
  463.     else
    . r( ~3 G) h0 ?4 W6 R$ q3 R! Z
  464.     {1 S' _' ]" U* B' ~- r2 @
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  @+ _# q) U. s# V
  466.       {
    ( ~2 d3 z/ h0 L
  467.         char szLanguage[50];
    + L& E) h0 i1 `/ g8 g
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ U6 c, O( X3 y! ~
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) ]. l8 v. h" B+ ?; D* P# Q& G( U
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - n8 z. Q3 ^4 y: \' t! X& C
  471.         else                                   m_iLanguage=ENGLISH;
    + w3 |* E. S7 ^: W' m: {+ o! e
  472.         char szRegister[100];
    & n/ K7 P5 |+ s; K1 R' D; _: H
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  L! K5 Q0 r, w. r7 z
  474.         strRegsName=szRegister;- L1 s1 D; a9 N' R5 r# W
  475.         char szPatchURL[100];
    2 j  l2 P9 P1 `, W: _- Q3 S6 {
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 e& e; z# x5 T" J, ^( j
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + \' H0 {& T* B9 V. [
  478.       }# A; P; s& O: L2 ~/ P* D
  479.       else$ @3 m' N" c, j0 G$ d. \8 E
  480.       {; l4 z( y- Z3 G# _0 v' ?
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  s' F. L- D: b
  482.         strRegsName=DEFAULT_REG_URL;, b' y1 C4 H7 w8 b3 C, g1 \. a3 l
  483.       }9 y  E2 Y0 C7 e4 Z
  484.     }
    ; \6 `) C  g2 j0 p1 B- k5 c
  485.   }
    ! D1 Q, ]$ X, P* s: K4 w) B
  486.   return true;
    / _6 s, s( q2 W5 s% e
  487. }9 u) N; o) `$ S, y
  488. ; j+ O; T1 P/ L9 C& @) z/ r0 a
  489. #include ".\ZLib\unzip.h"$ _0 g* {/ D3 p, T
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);9 Z4 J3 Q2 j& D  `+ z; }$ R% O. o$ H
  491. /////////////////////////////////////////////////////////////////////////////
    ; w+ {0 R0 x# {0 `0 }/ M/ d- C
  492. // CRevAppApp initialization, g$ T: W& I6 T$ q4 I: ^  ?
  493. % p( g: ?* L1 |; `% z" h
  494. BOOL CRevAppApp::InitInstance()
    5 e% ~, T2 G9 P/ B+ g6 f/ U( {
  495. {/ H: J3 H& g+ Q4 ^" Q% t0 e  w
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    & ^) d4 S/ @( j/ D0 O% w* V
  497. ! |6 }( w; s! v
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);3 H7 Z; _7 F* G: v" e6 x
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    0 V6 N  U* l" J! I
  500.   {
    ( {5 ]% n+ z3 T2 e! ]$ ?  {
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    % q1 x7 x* t9 a. I: o/ }
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ; u) M% Y: f+ f- w3 s: G
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ) D" W, ?6 V+ h( V
  504.     {( @' M: x- T4 d$ |( y3 @; o" C! h
  505.       strcpy(szPath,szPathTarget);
      J! p0 m; K2 [* O9 T
  506.       SetCurrentDirectory(szPath);/ l1 \* Y+ r$ Y3 B8 l, I- z
  507.     }
    ; T, w2 W0 t9 w. i, x: d- b
  508.   }3 L1 K  d8 G- k1 V7 R
  509. #ifdef _DEBUG
    ! {/ I' h) V; e$ t; K& S' X- }5 r
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) c9 j1 B" |: f& r
  511. #else
    / P1 a: r& c' P& I) K4 z& m
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); Y4 l* c" J% {0 w3 \
  513. #endif) A- k6 q6 f, ?/ _, e4 j
  514.   {6 k1 \: ?7 t! Z) ~% L3 G
  515.     char tempFileName[MAX_PATH];
    : `; w1 U% F9 |3 @% w3 u
  516.     strcpy(tempFileName,szPathSource);( Q+ N0 o0 n& V! p+ O
  517.     tempFileName[strlen(szPathSource)-12]=0;
    3 C# y, [7 g5 [
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ! {; j8 ]  X. ]6 m8 G$ U3 E
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);- b/ p5 l4 G9 P, j) X' ]
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);/ {* y! l- Q- k  ^/ A
  521.     return TRUE;
    % ]6 }0 O6 n2 }  X' |; [$ t
  522.   }  j! \! q. Y, ~, J
  523.   // Nuke 0118: Delete run.exe  Y. @2 p% M$ {5 \8 q6 D. X
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    % m- f" f5 Y+ C5 X9 }" W
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");  f/ P2 b' T) B8 W1 g5 m" h
  526.   if(!ReadCfgFile("Config.ini"))  T) C% o% L9 @  d
  527.   {
    $ f& {! {, ~- E! z. U
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);* s& q! [5 x2 j+ F$ x7 H
  529.     return TRUE;
    + `4 X# C; {8 U( }  a# ?# B
  530.   }
    : C" x$ X: e: O& t
  531.   HANDLE mutex;9 ^" M) o# M. ?
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ; v) J% m% \4 S. j
  533.   {: C% I, r  |1 o! e- E/ I
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    8 Z5 ]9 f: V! I8 i: b9 r
  535.     {% O: H3 A0 E) N! i" L3 X: `* f. v( w+ y
  536.       CloseHandle(mutex);
    , Y) ^- `, `# J8 P" q% a
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);+ x. h1 I) O7 K7 H& n0 I( v6 u
  538.       return TRUE;" J; s6 _- A0 c+ h
  539.     }. Q4 b0 r# u( v& l. R2 R
  540.   }  0 B1 z" c9 g$ r2 ^1 N( Y" N# h0 K! U
  541.   CloseHandle(mutex);+ Q& r. g+ t: B  `0 z
  542. , C% D  F( P/ f5 w6 p3 w* h8 f) V
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    + l; u4 X) A0 a! [9 T
  544. 8 p$ R' G4 S: d2 N7 E" ]
  545.         AfxEnableControlContainer();
    8 z" `  r  {0 F4 _! f: y3 X0 j
  546. + [6 t9 H8 L" r( s- j, d) x. p
  547.   bCanUpdate=FALSE;6 T3 Y- g( y% B% F
  548.   dwStartUpSteps=1;
    9 S- v" e. K0 M' m( v: d
  549.   dwProgramState=AP_NOTHING;
    4 i+ O( K* o% ]! |( R$ n
  550. 9 t( j7 Y  |& l) s$ r& r* k  E9 Z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);, p1 M# m8 y# e0 q) Z) H- v
  552. ! k7 `. s$ F; h. V3 d
  553.         // Standard initialization
    - D0 o/ k: O6 g. J) N% \
  554.         // If you are not using these features and wish to reduce the size
    8 H9 i) a3 }6 z" @: Q: ~6 e
  555.         //  of your final executable, you should remove from the following  K. m: F+ c- I  s; m- {
  556.         //  the specific initialization routines you do not need.
    2 H7 \2 t$ n+ E! y7 h1 e

  557. & E% q, e  {' V6 O/ {
  558. #ifdef _AFXDLL
    - m" @$ Q& h5 O! j8 w  y/ r
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL. _( ]6 @$ P: P( j
  560. #else% u' W" V5 k* n% W0 O) j% L3 \; D
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically) w+ G' u8 _& h1 d: r
  562. #endif
    9 h  J- H+ ]2 h

  563. + q4 ~* p) N8 m7 D2 \7 U  a
  564.   dlg=new CRevAppDlg;
    / R$ z0 a; ]- p
  565.   dlg->Create(IDD_REVAPP_DIALOG);  }9 I, J! c+ T5 w2 U
  566.   dlg->ShowWindow(SW_SHOWNORMAL);* y& w$ @1 m7 A& f: S
  567.   m_pMainWnd=dlg;! a8 {$ `) f7 }

  568. ) V3 s& G7 U6 l/ D3 I
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    - \0 x! {$ q) w% a, d
  570. 2 x. b+ a" @8 J9 h3 m
  571. //  GdiplusStartupInput gdiplusStartupInput;9 d5 J9 _3 T( F9 K
  572. //  ULONG_PTR gdiplusToken;0 U$ C6 \" ?, k4 q9 z4 x( Y* e
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    - H) j0 W) f1 d% @' S
  574. 5 O% u3 w% A& l
  575. //        CRevAppDlg dlg;+ c9 a6 \5 T$ D9 r" ?
  576. //        int nResponse = dlg.DoModal();+ C2 E5 s. _/ a& _
  577. //        if (nResponse == IDOK)9 E0 @, _  g5 O- [
  578. //        {
    # \! ?' F: b# G' S6 }6 S4 E1 H
  579. //                // TODO: Place code here to handle when the dialog is
    & ^" ^, j8 T- L! O, P
  580. //                //  dismissed with OK
    ' q6 \% f: b9 K, ]
  581. //        }
    7 c1 x2 ^+ U$ @# l
  582. //        else if (nResponse == IDCANCEL)' e+ \+ X, i, }! ], V
  583. //        {7 s; v. t; K, L& q
  584. //                // TODO: Place code here to handle when the dialog is6 ]4 ?# I& d0 i' D; L: ^
  585. //                //  dismissed with Cancel; i4 f' Q5 m  f- ^$ m
  586. //        }+ d/ D3 |% n9 O2 }" `' \

  587. ; C+ M- N; ~' h6 ?! o
  588.         // Since the dialog has been closed, return FALSE so that we exit the% i# e$ v5 o- Y1 g
  589.         //  application, rather than start the application's message pump.
    # F( ~4 \  q7 O+ Z. l
  590.         return TRUE;& o0 w$ l8 ]4 t# m
  591. }# ]/ P0 [3 C2 U! r# r: h

  592.   k9 ^. R9 O; ~5 F7 C* G4 O  r& U. d! j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)0 @/ k! S: V( {# a% R4 i
  594. {
    ; `& F0 M: d" V. _5 S( V
  595.   int i;0 q% r* h+ _9 ~- S. C
  596.   char *szRet;
    ) D0 [7 ~5 x: l: o5 j$ g4 w

  597. # A  e& S! u  F: t0 Q
  598.   if(pSource) { itoken=0; sztoken=pSource; }1 f9 H% A; v6 P9 B; _
  599.   if(sztoken)0 L# T( h( x0 N/ q' A
  600.   {
    " L: o" C; q8 A* P/ N* p, p" Y
  601.     szRet=&sztoken[itoken];1 O! v) M! n- Z. n" R
  602.     while(sztoken[itoken])
    $ m. o* w1 y6 Q1 m% {" E
  603.     {
    ; {0 m8 G/ p( |& E+ m. k
  604.       for(i=0;i<(int)strlen(token);i++)
    . s- G$ c; P0 z6 y
  605.       {$ Q# R( P! ^2 M% F
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    & N* A! N0 j  B
  607.         {/ o, r! r7 w; q) V& J& b) V# w
  608.           sztoken[itoken++]=0;
    9 H; [! l4 V9 L: |$ I: n
  609.           sztoken[itoken++]=0;# J. i6 y9 B8 o% F' J1 A
  610.           return szRet;
    $ i9 k4 i' {. I! \  n( ]3 Q8 X" n/ G- J
  611.         }1 e, n) d2 P$ U. {4 m9 D$ S
  612.       }2 x8 f$ k, [1 ?" U
  613.       itoken++;
    + C- n$ v: I; T  l1 _& {2 z
  614.     }1 U* ~5 c% ]8 Y4 t4 E
  615.   }
    : V  W" R. T6 E6 B3 l
  616.   return NULL;. d  d. o. c  ]9 T7 V% E
  617. }& \1 p; j4 l+ Q+ ~

  618. % a- y! ?/ b- Q, f, i
  619. void ProcessProc(long Total,long Current): {- }" ?0 W8 z5 I/ }6 s
  620. {; w" B6 h5 k' C1 n% G8 J
  621.         MSG msg;
    ) F1 a. o5 y" _7 f
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    # V5 q" X2 O" E: w- l
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ' J; Y" c9 w8 u; M6 G3 j% o
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ) E7 {& u& F. e# C
  625.         {" \0 V9 q( U2 S* f! B4 r# Y
  626.                 if(!GetMessage(&msg,NULL,0,0))
    . t% {$ I2 W6 z4 T' v' |4 A# l) s
  627.                 {7 @: S3 ]8 @+ \! g5 E$ E
  628.                         return;
    % N- [( y1 L& U$ a2 b
  629.                 }
    ( }- z* y9 z& W# V6 ?1 l
  630.                 TranslateMessage(&msg);
    % S$ {7 g- y  J
  631.                 DispatchMessage(&msg);
    ) [, A( |& f( V" K
  632.         }        / g1 }2 D) T( R: b5 g4 G
  633. }
    $ @: g3 V! T4 u6 E, t) L  l: h* T
  634. # C2 ]$ d( {* R  n) }, J
  635. BOOL bFirstChar=TRUE;
    ' z* [  [' K! x2 l  q  ]" W% k
  636. $ k" s2 _) W2 S8 _% M
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    , b, H; ?& R! s& i% \# n
  638. {
    $ H$ o: Q3 d6 h
  639.         // TODO: Add your specialized code here and/or call the base class# h9 k% x# I% r( C7 ^
  640.   switch(dwProgramState)
    ! l3 [, b& g, P! ~3 R3 O
  641.   {
    3 y: J9 A, o6 `$ e' v- ]9 h
  642.   case AP_NOTHING:; \- S+ V2 }* D) k4 [9 D* j
  643.     switch(dwStartUpSteps)4 ~, X2 p/ T! k
  644.     {
    7 q! u; O$ n9 Y( R2 s5 m
  645.     case 1:
    7 t* j; W. Q! y1 x0 l
  646.       {
    + E  o+ o, Q! N/ P+ k3 d. ]
  647.         int i;1 j* U/ b/ h1 _! {  R
  648.         CDC *pCDC=dlg->GetDC();
    8 z' ?% [: [0 T
  649.         HDC hdcwnd=pCDC->m_hDC;  B: J0 U5 L1 u& V" O; R5 z
  650. //        Graphics graphics(hdcwnd);6 V2 y; s% z) u9 e
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ! O' ?. r5 v, n, i4 H
  652. //        INT iWidth=bitmap.GetWidth();. ?& K; v2 L4 E  }6 v# F; J6 Q
  653. //        INT iHeight=bitmap.GetHeight();. G! @! V5 s  m$ B# [( P
  654. //        Color color,colorTemp;
    " ^% z' P) K! y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)+ I9 G( T% g5 N5 r- P2 G  w8 U$ c1 e  J7 k
  656. //        {8 o" Q5 P, y* u
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++), ]' u! g9 X8 O  U# O+ \9 R
  658. //          {! G  J: b1 h" s2 C
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ) R5 j2 M  M! s* f# E$ B
  660. //            colorTemp.SetValue(color.MakeARGB(. ]9 M3 D. u% S6 v# p* T
  661. //              (BYTE)(255*iColumn/iWidth),
    ' o$ L* Z0 I" z4 m
  662. //              color.GetRed(),$ t, `8 @# ?4 z4 ?! O7 e# w8 w! v; q
  663. //              color.GetGreen(),
    5 s& r  u0 g- X$ A  ]
  664. //              color.GetBlue()));7 T) x+ n* M. D
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    0 m( Y) {% F% u* \
  666. //          }- @# O- r. j$ Q  p
  667. //        }( p0 [) F4 I- i( s( D" x! e7 _# F+ V
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);% _- V) r! [4 p) E6 S
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& ?! W# A& l0 p1 k/ N" k5 D
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 y$ n: K. e( w: O4 f( g
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ E$ I! J3 P+ R; T1 H3 `
  672.         for(i=0;i<240;i+=8)
    % C" w; z% y' n1 w9 W2 R
  673.         {
    2 w8 n3 n& ^" b) L
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' q# O4 o8 f; U- e% N6 \. S
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; I# _8 E4 ~5 f
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - y4 ^" B; i: m$ H/ E5 R( U
  677.           Sleep(33);
    2 n8 `) D9 I& d! T9 Y* f8 h
  678.         }
    0 O& c5 `4 T* c5 \8 N# g6 C
  679.         Sleep(1000);$ N+ ~; \. m, X' q& ?" z- o9 [% ?
  680.         for(i=240;i>0;i-=8)
    : l5 [* K5 o0 A4 I3 D. v
  681.         {
    1 U$ E- e4 \6 i
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% ~9 P8 A: L( ^7 V0 w; W
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! E8 O+ j1 b% W: k0 _
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + H; C7 r7 x, A& J
  685.           Sleep(33);" m! v6 G- t- P* }( j
  686.         }8 v+ ^! |5 Q2 g0 J/ A% b) F8 _
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);6 {& n. h, a1 e
  688.         dlg->ReleaseDC(pCDC);, m2 a6 g2 z- }- d+ x, f
  689.         DeleteDC(hdctar);
    - o8 E" v- p6 I
  690.         DeleteDC(hdcsrc);
    " ]" b0 `6 @2 a. @5 B8 K
  691.         DeleteDC(hdcorg);, N( Y( Z. W9 g. y6 s9 s# M2 @
  692.       }* g+ s7 F5 K# F" Z3 X/ C+ o
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);5 O3 G; K, K1 J9 [6 N; V
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    , R) a+ l* Q# }$ B: w
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    8 L1 F# ~6 T" C
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
      a8 t; ~8 G$ |/ \9 D
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      @- q0 {% _* p* V) v1 L, @% \! f
  698.       if(!Dn.Connected()), ~4 l3 h& q" q: G! z
  699.       {- g$ q# l. F8 x* b; v, j4 D
  700.         dwTotalFiles=1;, c; D$ D1 V4 L$ F6 j
  701.         dwDownLoaded=0;& u- h/ A. Q) o7 p
  702.         bSilentStep=TRUE;
    % `* ^* y4 E# ^8 b
  703.         bCompressed=FALSE;
    0 i1 B; g: ~; k! p
  704.         strExtLocal.Empty();% D9 A) h7 F( m. q4 o7 t
  705.         strFullName="readme.txt";" a& V5 X' q( D; p- Q
  706.         dwProgramState=AP_CONNECT;
    $ R5 X0 f  r, P2 g9 H
  707.       }0 h" E- X5 \6 ]% t5 b
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();" n0 F5 d2 ]. X9 S) I% N
  709.       dwStartUpSteps=2;6 ?  t; Q# x/ w0 D  N3 D
  710.       break;( U& D6 N" x) T! R
  711.     case 2:
      B" e+ y. }" Z$ c
  712.       {2 Y5 V7 H5 A6 p# C' l$ T
  713.         int iEOF;
    $ D( n0 v9 y$ ?" I1 D' a
  714.         FILE *fp;# A! N; Y5 z1 J9 M& T9 T0 @
  715.         char szString[512];
    ' _- n# D4 W3 Z& L
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");4 k; E+ g* ]  P* z) M
  717.         if(fp)1 j) o" `# _) H$ k9 i0 m5 r
  718.         {+ w0 ^" E# X7 a5 G2 J! L
  719.           do6 V2 P1 _7 E, J5 r- z8 }
  720.           {) m* K6 k1 f5 ^
  721.             iEOF=fscanf(fp,"%s",szString);  O8 n, X7 q& ?& C- L. e& G, S* l: d
  722.             if(strlen(szString))% n8 a& r4 W% X" u5 `- Y- z
  723.             {. Q7 T' ^4 X% ?8 ~0 ]
  724.               if(bFirstChar)
    / ^% ]6 T% \' s7 ^
  725.               {
      A4 y3 v# w6 r$ f  t5 z# i* N
  726.                 bFirstChar=FALSE;# J8 [7 R2 @# H8 S$ d
  727.                 bConnectIsBig5=FALSE;3 @3 C: x* N5 {8 z. |
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    9 V1 u5 a! A$ q, ?  Q: u
  729.               }' Q/ S% ?) e) F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));1 A8 e$ H+ r: Y3 E
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));3 n/ x5 p+ E7 o" ^. u% I6 n" u) X& j
  732.               dlg->m_ListText.AddString(szString);- ]3 F6 y5 E% }9 U! ], v
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: X- g5 w) M- \# L8 d' ~: M: t; i' X
  734.               *szString=0;
    0 y$ ^3 s+ ^# [3 Y' Y/ c  B9 R# l1 i
  735.             }' c) ?# I3 b- T/ h
  736.           } while(iEOF!=EOF);: q6 v7 F3 n1 w9 D1 C$ Y
  737.           fclose(fp);+ P3 [+ `4 a7 C. u' t; S
  738.           unlink(".\\DownLoad\\readme.txt");
    ; y8 A/ C% R% N& k8 g( U, q# E9 {6 n
  739.           dwStartUpSteps=3;
    ' ?5 r- n4 d% ?( S9 c# D+ `
  740.         }
    / ]1 C: `0 n2 {& X4 z4 ^0 u4 S
  741.       }
    , a8 C9 s+ |; c2 p& S, y
  742.       break;
    6 J" m4 U: u5 ^7 X! k: F' x6 |
  743.     case 3:
    + C1 c" ^. ]$ K  N
  744.       if(!Dn.Connected())
    7 ~5 Z1 v# O/ Z2 \! M3 r
  745.       {
    ' U9 {# a2 |# I. {( U8 y2 P9 }
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);* V  c$ r7 {8 F
  747.         dwTotalFiles=1;; D! o4 @0 S) F- ]
  748.         dwDownLoaded=0;
    - j! I( b. K4 F# R
  749.         bSilentStep=TRUE;9 I, ~+ k3 b" L: f- w! ~
  750.         bCompressed=FALSE;2 w& q5 j2 [' U3 A6 Y' P# H5 J2 [
  751.         strExtLocal.Empty();
    3 ^. a  r  F9 C* u
  752.         strFullName="checkversion.txt";
    % ?" q$ p1 Z: `- I' D0 i+ w
  753.         dwProgramState=AP_CONNECT;- F3 N& ], z) |9 ]: F) k1 ?
  754.       }
    $ s: Q% O5 c8 Z$ v5 w6 ~
  755.       dwStartUpSteps=4;" X. w: o2 Y2 r$ U) h
  756.       break;8 _/ {5 I; U! G2 C! l% h0 X, M
  757.     case 4:
    8 k- u4 t- @* [5 b  [2 z7 Q
  758.       {
    . w' w2 w7 x5 X% w* y: L, R
  759.         FILE *fp;# h$ F; I9 O  M! e2 D  \
  760.         char szString1[128];
    1 A4 x, d" A4 \7 c" p+ \" i
  761.         char szString2[128];" D- I6 {  h: U3 g0 o
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");5 X" L1 k; y' Q1 k( |3 ~
  763.         if(fp)
    ' `/ \' D  L- C! ~: ?
  764.         {' H* u2 G0 L( q* q6 `
  765.           fscanf(fp,"%s",szString1);
    # U$ a9 \9 n1 r6 G5 t5 p4 `. M
  766.           fclose(fp);
    + C1 b$ m( {* B1 ?& u
  767.           fCheckVersion=atof(szString1);' {$ I/ ~4 L/ m3 u5 H$ o! t( ~5 b6 h. G/ B
  768.           fp=fopen(".\\checkversion.dat","r");
    5 ?& Y2 K6 p! X: \$ j: t
  769.           if(fp)
    : M7 j6 ]' L; c' e; g. x! ?
  770.           {' ]- P& \3 A* B" ~4 p% u9 O
  771.             fscanf(fp,"%s",szString2);& k6 ?' W) ~: q& }
  772.             fclose(fp);: A3 Y1 G1 ~) Q& U
  773.             if(atof(szString1)!=atof(szString2))5 s/ `# a4 k1 P3 C
  774.             {
    % [8 }3 u/ {7 h
  775.               if(!Dn.Connected())
    + C8 s4 ^8 K' g- T+ D5 b
  776.               {; _+ ]& p( Q" V! E3 K
  777.                 bFirstUpdate=TRUE;
    - Y# f% E7 u7 _, J; }/ F6 c
  778.                 dwTotalFiles=1;- v) ?- v5 X/ P. E, J3 W7 y. J
  779.                 dwDownLoaded=0;
    3 F  ~, E. t9 h+ ?# R) V
  780.                 bSilentStep=FALSE;# J: e# Y( N' c9 o: L
  781.                 bCompressed=TRUE;* V; Y; ^$ D& L3 K' X( I+ N  L& D1 z
  782.                 strExtLocal=".\\DownLoad\";
    7 j) S% o" h2 i- V1 T( ~& J. K
  783.                 strFullName="update.txt";
    & ^3 z0 g& _/ s
  784.                 dwProgramState=AP_CONNECT;/ ~2 K& y' e" T, f1 ^) F
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 x' b# Q6 J4 @1 Y2 R, \! n
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 d9 o8 W! Y) m3 H
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");2 M6 [) |( Y  x% W  I

  788. ( t% m$ [4 o% j. Y/ u5 ~
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # s& H. W5 h" W( w/ t2 a$ f3 Q1 B
  790.                 unlink(".\\DownLoad\\checkversion.txt");; [1 P, R! E0 l- a
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    0 b& f2 P/ h, G' h
  792.                 {
    " L3 s; M* Y  v3 C6 }
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");- e3 ?( u# P5 A8 C/ U
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    6 W" ~8 O6 S9 K; P& k" P5 I1 V
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ' j/ v$ g' ]# O" u$ S* Z" n9 M
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" l3 @- H4 ^- q1 D' I- }

  797. % y+ s) [3 U2 U5 M  _( Q) z; x! `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    8 j! @7 p4 z8 Z5 C
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & W& o  ]+ f1 c4 W
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");2 o$ L2 F* S- e- |- v: s  R( `
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % `1 X& d8 r/ g. Q
  802.                 }
    3 _. I1 i8 R6 J# G
  803.                 dwStartUpSteps=5;9 t! r4 `' r& D' a
  804.               }# ~6 D& x) f: ~7 ^/ {
  805.             }
    7 J$ h0 C9 M$ H( D! k
  806.             else1 D5 |! n3 h" t5 e
  807.             {
    # W5 j- K! v- S* n/ M
  808.               unlink(".\\DownLoad\\checkversion.txt");
    7 Q1 E% k9 f1 X6 ?! z+ @9 R
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    + A% V; U3 i. @0 `
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' N( y* k' n. V
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");0 q2 s2 u' M) G& v( G. |6 T  l' S

  812. 4 R- w$ @: e; M0 A/ ~/ C
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  _' F1 e% E. B+ e6 T
  814.               dwStartUpSteps=99;7 h& R: O6 x! _/ W# S% Q
  815.               bFinishUpdated=TRUE;" U* v9 M; Y" e5 g/ Y# w, A6 X
  816.               bCanUpdate=TRUE;
    : W. t0 |- O$ ~( j- M4 x  D
  817.             }6 T" [' Z6 Y/ H
  818.           }& C2 u0 n/ e- _  [9 ~0 x
  819.           else$ q5 v( D; U2 {; C/ P7 J% l' n
  820.           {
    ; w. L" ?1 {5 c7 [% E4 J
  821.             if(!Dn.Connected()). F' |7 ?5 B: m1 P9 U8 h
  822.             {
    & h3 B6 j% ?8 H3 n& C/ l
  823.               bFirstUpdate=TRUE;
    ; `8 I, m5 `, t, \5 {
  824.               dwTotalFiles=1;5 R+ d3 ~+ _! X7 f+ I4 G
  825.               dwDownLoaded=0;
    ; H5 n: |. G% s3 H' |% Q: d1 T: ]
  826.               bSilentStep=FALSE;1 N# E8 H; Q3 }; _1 R
  827.               bCompressed=TRUE;
    , m. |; s0 l! a$ c  g
  828.               strExtLocal=".\\DownLoad\";/ n4 n$ ?- H  S  V4 ~
  829.               strFullName="update.txt";) m" |7 Y$ g. J; U* c0 J
  830.               dwProgramState=AP_CONNECT;
    ; v  H5 S  ^* I
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 x; W. d! ]# o- Z  d- q$ k: y
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) q3 h* r6 t( B- _1 b1 U7 n. ~
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");/ I  v4 F7 X; ~6 j
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 G0 P, i- j( r
  835.               unlink(".\\DownLoad\\checkversion.txt");! ]! v1 f& I4 ^8 m- q& z7 H
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . |2 h7 x# }, m. \5 F* h
  837.               {( W: s; S. L. F- w+ k
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");" g8 \- K8 E. a5 ~/ j6 H
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");, E5 ~6 p5 D% A# n0 v. Z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ; R( N5 A+ [) B& k4 B- d6 Y8 \/ x$ m- V
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 y. o/ ]  ]* r3 a
  842.                
    ; O" W$ Q+ b- q% b$ U) O6 E
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 z% x! h  h" p% i
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , K8 E/ f5 w' ]; ^! x
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");. U' ?  z1 x- s+ l
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " X5 g9 d1 x) I$ ?
  847.               }
    " z3 ^+ [: `! U# l, [0 X
  848.               dwStartUpSteps=5;
    ; f( p! }# T: C: x9 A
  849.             }
    ( t5 g3 _6 k: N; g! v8 l) W, L
  850.           }
    5 m0 Q5 I$ k- h& |2 L, _
  851.         }
    8 H: ]! ]! Z+ Y+ [
  852.         else
    # u8 M- O# K1 b
  853.         {
    " _0 v# C7 K5 k! ]# k. P. B
  854.           dwStartUpSteps=3;
    5 `3 Z& `2 ?# E" A" y  B) }7 S. R
  855.         }6 i& Y1 f5 @0 [& X0 F, c' z
  856.       }1 ^7 n8 {+ r. k! x
  857.       break;( J" l8 X) F% w& O- J( D; _- M
  858.     case 5:
    & \' _; Y/ C) d- v* }7 G5 [6 D
  859.       {
    ; p. I4 H$ h# w# s* D
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    : G% ~: |+ L0 F  h- k
  861.         {
    ( E4 ~/ T1 E- Y* t
  862.           int opt_overwrite=1;5 i& ^, ?4 h9 d' N9 a7 ~, n
  863.           int opt_do_extract_withoutpath=0;
    # }3 e; D. A3 q/ y$ |. f
  864.           unzFile uf=NULL;/ T- G6 M: x8 f  Z0 Z7 L
  865.   J. X- w" d* y, e5 n1 Z
  866.           uf=unzOpen("Wsa.zip");6 s7 ?' R. v7 r) r4 @- J+ F2 }
  867.           if(uf)
    5 o- v4 U) j/ m$ }8 P
  868.           {, f; _* Y: l4 a) d8 b
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);/ M6 Z( e9 e! H2 g
  870.             unzClose(uf);; N8 p0 m# I$ N# f" e) g
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    1 P$ r+ g" Q- A' K7 h, V; ~9 f
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");: X3 S0 J2 v1 c. H2 V- p: j& M
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");- Z8 ?" A* Q# n" @0 d* p
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 ~9 g( O8 o8 s4 v
  875.           }1 |5 d) b7 c; x% M4 l* e- E/ M7 H
  876.           DeleteFile("Wsa.zip" );3 V: I: W3 }7 V6 l4 X4 v& G" W5 U) ]
  877.         }1 M0 u5 G) N/ f  H
  878. 8 t, H3 H* N4 l1 ]5 X4 p
  879.         if(CheckLocalVersion())
    + v) V" p$ f' s- v3 N/ e. _, H
  880.         {% N; Q% @. v5 b2 D. U
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");/ |0 z5 |, D; }3 m, i( W
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");  ?. \. ~2 m- w. \. N% P/ p
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    / e+ n! j! d' j4 Q/ {6 H# R
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 d! L( Z% {! }, g, H( n+ m" k9 B
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    . w; v* u, l/ Q) I
  886.           dwStartUpSteps=99;
    . s9 u+ x+ m& O, R
  887.         }! A; M$ s4 q: W! f$ e+ U6 C
  888.         else
    - x6 t8 W2 C1 F3 Q, I" z6 ?. s. m
  889.         {
    7 \0 B  N- {7 [. w, ]2 h
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 D/ X: r7 |8 N; ~
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");, N; D8 T% g3 A. n: h1 j6 c
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    + E. p6 p& }/ y9 [2 I* `  [& y' P

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

/ ]* I; b8 l1 ?: K' [; d+ M9 ^7 X# w; B8 |! g' {) N* N

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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