找回密碼
 立即注册

CSUpdate.exe源代码

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

! }1 J* d: r1 C" i5 e" d
  1. / RevApp.cpp : Defines the class behaviors for the application.+ Q7 Q( m  j& H+ a0 i0 O
  2. //
    . o* B* \0 w  r$ y
  3. + l5 s2 X) B- f) Q3 h
  4. #include "stdafx.h"
    0 A+ ~. I& n& S5 F9 C

  5. $ `' P& J: ~$ K( y1 K' n- v$ e
  6. //#define UNICODE
    2 a: ~( Y& a- x
  7. //#include <gdiplus.h>
    + i" G0 t& p& o; J: W# N
  8. //using namespace Gdiplus;) J' F: E' @" x8 @
  9. * n( R& u, C, B7 [
  10. #include "RevApp.h"$ S$ q  Q8 l  y6 m5 X
  11. #include "RevAppDlg.h"6 X* o# d! R+ R

  12. 3 r8 f- l5 r: O6 {' v8 w% V
  13. #pragma warning(disable:4786)
    4 Z: r+ A" p. v5 l; s* c6 l8 Q  R
  14. #include <map>
      o- ?  J4 M1 b4 M' g
  15. #include <list>6 A1 t, J  L  x% y8 h2 {1 p  }8 {
  16. #include <direct.h># x2 O) T& D# t9 C  I8 F

  17. : N: @# ]4 j9 _9 j
  18. #ifdef _DEBUG
    ; ~9 G) x6 ~9 e- B4 `& N
  19. #define new DEBUG_NEW
    1 r& o; I; g6 K# O* Q( u
  20. #undef THIS_FILE
    ( y) {! |% L  U, d/ P. i
  21. static char THIS_FILE[] = __FILE__;
    * a- g- \, Z/ M0 V
  22. #endif) {" o4 [+ l: m5 b! ?% J* g
  23. #include "SkinResDef.h"
    9 @' D/ `" P0 a% s
  24. #include "ChangeBG.h"
    0 Y! @" `! j. g- G
  25. #include "AFXINET.H"
    ) l5 m5 ?) G* v1 f6 ?

  26. * F* r0 X. z. T. @" H, g# F
  27. #define TRADITIONAL_CHINESE 0
    : }& ~) Q( g1 ~
  28. #define SIMPLIFY_CHINESE 1
    3 Q6 f3 o5 D2 [2 L& C8 U% H" K1 n
  29. #define ENGLISH 2
    1 |9 p( m8 f* A# H& H) ~  [
  30. int m_iLanguage = ENGLISH;
    0 g/ y7 }# Q1 L7 S/ r. d% L
  31. /////////////////////////////////////////////////////////////////////////////9 t5 u0 ?6 ^! ^' _8 L' X" a
  32. // CRevAppApp' B3 K. w; g' X: A( p
  33. 1 y% T4 `8 V  C! u. R/ @$ P
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp). O% G: e8 H; y# S
  35.         //{{AFX_MSG_MAP(CRevAppApp)* C( _6 ~( _' Q8 p" Z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    1 R$ g/ }# G# g$ p% \! A# h
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    : K9 w8 `5 c# n
  38.         //}}AFX_MSG
    ( X: Q& B9 a; u7 k+ y8 ]
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)& u6 D  ~* r4 O6 G/ }
  40. END_MESSAGE_MAP(): h# @) P- a9 B" @1 O8 l

  41. $ x9 X  A% N( w* J' I* _
  42. /////////////////////////////////////////////////////////////////////////////
    / q! k' y& v3 V
  43. // CRevAppApp construction  h  L8 X1 h% k2 s+ q& i! B
  44. 7 D: `# Q: b' f' A4 g; ^+ X  p5 ~
  45. CRevAppApp::CRevAppApp()* i- X0 m; q2 P9 C* {; w' c
  46. {
    4 T9 y8 Y# e/ j' W/ _+ w  z# J, x. ?4 g
  47.         // TODO: add construction code here,: g+ u2 v! v6 z: s
  48.         // Place all significant initialization in InitInstance
    + C& g( E' k$ T' R! ~( j$ ?
  49.   bDisplayIsBig5=FALSE;
    6 x, S. J* b0 b) I- i. N, q/ M/ ?8 G
  50.   bRestartUpdater=FALSE;
    $ ~7 _* }- X4 M& e; o3 K8 v
  51.   bFinishUpdated=FALSE;
    ' q- k. u+ m& R3 b2 D% }
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    9 a& i7 M9 T4 k
  53.   InitChangeDataBig52GBKS();
    . {$ z# v: d; u
  54.   InitChangeDataGBKS2Big5();
    9 O2 `% _( U4 a& y5 |' ^
  55.         //
      ~; J1 |" c8 m- L* Z6 U4 G
  56.         bClickRunExe = FALSE;- K+ ^; b0 e& m) R
  57.         //
    * b2 _7 c' z3 A) |7 D$ G
  58. }
    * \& W' j9 Z* \; \
  59. 8 A, x! S9 @5 _0 f/ v8 W
  60. CRevAppApp::~CRevAppApp()
    7 U: m/ N" ]* A( D( Z* o
  61. {3 Q* w5 p$ q. n5 l
  62.         // TODO: add construction code here,
    * g* N, n( h% ^* n5 e' v
  63.         // Place all significant initialization in InitInstance
    9 V; B; F; q  `4 A8 q5 ?( T# a
  64.   EndChangeData();
    4 ]8 X3 Z8 g+ Q$ I4 T
  65. }6 w+ u6 F6 c# y

  66. * D0 G9 ?& E' V( f9 ~
  67. /////////////////////////////////////////////////////////////////////////////
    ( h7 E) C& {( i' d: Z, a
  68. // The one and only CRevAppApp object; t$ N+ X0 K* e2 C
  69. : E$ C0 B6 n! ~( o: K
  70. CRevAppApp theApp;
    % A% r6 c( ~) d6 ^
  71. % R) c% V$ }% @3 Y6 R
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ! p1 ]4 P1 z8 ~! d, s
  73. {
    ! W) p6 h. O  D7 V$ C, i6 X; F
  74.   int iEOF=0;4 y& ]/ W/ A3 b8 [7 Q0 u2 [
  75.   char szTempName[MAX_PATH];0 F' F9 L1 G) H% a
  76.   *szFileName=0;
    7 c  B- Z8 C' P
  77.   iEOF=fscanf(fp,"%s",szTempName);' U' @& X; V# L5 |: ?
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ) m, k$ r0 B* I! S" o6 f
  79.   {$ V5 x' L& {: ~$ H5 M
  80.     strcpy(szFileName,&szTempName[1]);* P( k/ t& c( `9 f  Z% o
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    , B5 A( o& R8 u  W! L/ [! {* i
  82.     {1 R7 T/ a: v0 M- s8 d
  83.       iEOF=fscanf(fp,"%s",szTempName);1 W3 e) j8 G1 P- ]/ F5 ?3 @. j- t
  84.       strcat(szFileName," ");
    9 I4 x# S8 q' ?# ?( U( Q8 C
  85.       strcat(szFileName,szTempName);
    ' `9 p+ L! w1 Z7 }+ g% B) Q
  86.     }
    3 o$ v, b5 H' ?# ^+ W) A  {% {( x/ e
  87.     if(strlen(szFileName)>=1)
    ) D8 g; {- }) F6 K
  88.     {
    & d0 Q: @& R, ~7 c4 G  j
  89.       szFileName[strlen(szFileName)-1]=0;
    ! h( W7 R  p9 S6 t8 v- X% S
  90.     }
    + p. |8 g4 i5 j
  91.   }
    - d# W- z! [/ n6 o
  92.   return szFileName;& a- Y% V/ B6 L/ C" v! {, V/ |
  93. }
    + V$ N9 F) Q2 g$ n+ {

  94. ; l/ q+ k% W! t
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    # r( ~8 h; h0 @1 I. U2 ~" [4 n
  96. {& i' t4 i: C9 P  |9 Y/ Y
  97.   FILE *fp;* Y& c! u, R* O% V( k
  98.   char *key=NULL;; W# N, o* S, I& d. j
  99.   char version[MAX_PATH];
    0 l- ?8 v4 K$ \+ O$ s5 E5 |
  100.   LPUPDATEFILE file,olds;
    5 d8 F6 K0 W9 K
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 n5 O$ w# G9 Z& A; |1 Z% q

  102. ( W' u. @  X6 G9 X  m- H/ z! X/ n7 n2 t7 I
  103.   UpdateList.clear();
    ; a* [* [" X3 {  R8 N
  104.   UpdateFile.clear();2 N% ]' e, e/ L# V4 g
  105.   if(GetFileAttributes(filename)==-1) return false;
    , T( n- S! p5 u. i9 T( E. Y: B. _
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ( m5 B; R* z) ~! s
  107.   fscanf(fp,"%s",version);
    / Q& w- o6 x; d% K# Z: C2 @
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }1 t; b$ M9 j4 v% Y# S6 Z" d3 G& e0 x
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 U0 N" F( F0 A8 V
  110.   {
    $ n/ d6 ?4 T' l" z/ \& o3 J
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- ]( \2 ]+ l6 V% J" M
  112.     fscanf(fp,"%s",file->path);* P. A9 I) \5 h% w% n* C) a# I
  113.     ReadFileNames(fp,file->file);
    , y) D( ^! k8 K- A+ L/ I' L1 W  \
  114.     strcpy(file->full,".");1 t. P2 x7 v5 K, D  [( @  I
  115.     strcat(file->full,file->path);
    7 s+ ~' c* p+ e2 V) y, e
  116.     strcat(file->full,file->file);  _2 Q- f9 P' c7 [
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    # f, X5 y  x$ b5 a' S, \' M! o
  118.     {
    ) R* l3 Z3 H2 ~3 F, Z# p8 Z( g
  119.       file->vers=(float)atof(version);. E( |) U8 p9 q: P' E& u
  120.       UpdateList.push_back(file->full);! {+ [: K; B. _! {
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));' L9 i6 c7 Q. z
  122.     }
      s3 ~( k' \* ?# Y$ |  n
  123.     else% H; n6 y( n; v3 \
  124.     {
    9 M" o6 H4 n1 w% O
  125.       olds=(*p).second;
    6 ?& ?+ M% H, E2 O
  126.       if(olds->vers<(float)atof(version))  x) q5 o% U; L) a- H) K
  127.       {
    - w& }# Q5 Q! u; |1 Z4 j
  128.         olds->vers=(float)atof(version);& K- k+ |2 v2 F2 M$ ^# Z  R! H
  129.       }
    : A( S$ r6 U4 S
  130.       free(file);
    8 p7 o/ _  t4 M( v! l( v
  131.     }9 [1 X  W% ?. [% \
  132.   }
    % E& ?8 K- [5 Q( y
  133.   fclose(fp);
    / ]- h3 {1 B+ l! x4 G. y
  134.   return true;, o4 N$ e, d! p1 P& T! M4 ~- h
  135. }
    # u+ F1 P# j! A
  136. % f6 v; o$ T3 ~( I$ K
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)( X: Q1 D1 {& V" O. Z( D
  138. {( G% K- P% C" w' y* n% x
  139.   TCHAR  szFull[MAX_PATH];
    * \" D' o6 p3 i
  140.   TCHAR *token,*inter;
    . V& K( k+ P0 p4 a, s! a1 y/ x
  141.   *szPath=0;
    7 z, X5 t0 c5 |* @2 W' m! [
  142.   strcpy(szFull,szFullPath);
    ( l2 {8 h- b2 Y4 R/ c
  143.   token=strtok(szFull,"\\/");  K8 }/ x' D9 U
  144.   inter=token;( t, z2 c, P& e, f! n, M* a, q% F6 v
  145.   while(token=strtok(NULL,"\\/"))6 r! {1 S' B/ u% F' B
  146.   {; o# Y; V+ ]0 e% G1 x
  147.     strcat(szPath,inter);8 ?3 F# o5 E5 i- J+ L+ r2 f
  148.     strcat(szPath,"\");7 c. q8 d1 R: R6 r1 E) T; @
  149.     inter=token;
    # S8 p7 X: j, t2 d# h6 w2 r
  150.   }
    ' Z2 V' b; M5 {; n  R. a; a+ C
  151.   return strlen(szPath);$ ^' I& D* G! A4 N) f
  152. }! I0 X9 c# _$ v7 ?& x7 d; u) C
  153. 3 B) R+ T% |9 N2 m
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    0 J+ [- ^1 O) V
  155. {( S! ~7 U, d% C/ e1 M3 u
  156.   DWORD attrib=GetFileAttributes(Target);& n) [0 \) k. T$ q% Z4 H
  157.   if(attrib!=-1)8 k) w& w  v  X) F% S" d( w3 w  R
  158.   {5 Y/ i1 t' G, F  ]$ d8 N0 R
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ) a4 H; A; L! m/ ]4 i  B6 p
  160.     {$ S- x' A; h8 P) D
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ( t" v; ?- W0 ~% g% P
  162.       SetFileAttributes(Target,attrib);
    / `1 B( N3 }2 ^* O
  163.     }
    . K+ l* _; o; v# ?( g' i- P- A. Z, a
  164.   }
    9 m5 t; ~6 T/ Z& {# [. k- V( y9 ~
  165.   CopyFile(Source,Target,Erase);% w9 @# z. C) Y* u3 i
  166. }
    ' T+ b1 d$ C# X% B$ y& R7 R
  167. ! v! n& R, Y& ?3 p; v
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    3 C/ ^( F3 z' ?. W/ e
  169. {7 ^7 h3 Q) M" a  l+ I" d; M% |& B# z
  170.      FILE *fp;! T# e% l* r) y/ l' p: B: [
  171.      char  szBuffer[8192];
    0 P% K) V0 z  V
  172.   va_list  argptr;
    * _5 U- G: @! X3 P5 G

  173. , n8 ^  \7 b$ a$ E6 J) b
  174.         va_start(argptr,message);
    6 J' t3 _2 c4 ^7 l4 ]# [# ?1 V7 t
  175.         vsprintf(szBuffer,message,argptr);
    9 Z' t4 @/ l" ]  W
  176.         va_end(argptr);( E: Y% e7 R8 g$ y
  177.   fp=fopen(FileName,"a");1 r4 k# _9 N4 i. }. Q8 x$ z4 U% w% T
  178.   if(fp)
    1 C7 K/ G$ j0 u/ Q; C8 s
  179.   {& Z/ m" ]- ~( n% o( q1 a+ Q5 p
  180.     fprintf(fp,szBuffer);
    ! C  j3 C8 x7 c" A3 y1 A2 _
  181.     fclose(fp);
    % z" a) m% ~+ x7 I8 r
  182.           _flushall();
    ) n$ m; Q& I9 e3 J4 D
  183.   }$ P* E' w+ z7 k3 c- }
  184. }
      D# r) f, Q& K* C. d# d
  185. . k7 I+ Y. c! Z% ?; G1 {, A- j
  186. BOOL CRevAppApp::Fclearf(char *FileName)( f5 x6 c7 n9 D5 h; ?" j9 d2 t
  187. {+ S$ }% i1 V# p, z5 c4 |- c
  188.      FILE *fp;
    8 `3 x6 n, w+ B2 v" W' s; ~
  189.     DWORD  attrib;/ u$ K* P2 g& s$ m
  190.   attrib=GetFileAttributes(FileName);
    , o* a2 v8 @9 Q$ Y  v
  191.   if(attrib!=-1)9 j4 y" X) A) v7 |7 z
  192.   {
    . K9 @, \5 K& R3 n# ?
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);- V5 @! V7 i# i% P) h, \
  194.     if(!SetFileAttributes(FileName,attrib))9 p! q, A9 e$ c, c7 @% A5 d
  195.     {
    8 V1 U7 ?) M; @2 d5 R* h3 Y
  196.       return FALSE;
    6 L# m; ]2 ]$ Z- r+ j
  197.     }# V- X, L5 E# L2 J% Y& j9 j
  198.   }" n3 t1 M7 P5 }( R3 o
  199.   fp=fopen(FileName,"wb");/ i7 t8 Q# I. I( ~) V
  200.   if(fp)
    # d, p( ~2 M* X) L8 Z
  201.   {
    2 K/ ?5 Z4 v% e' L
  202.     fclose(fp);
    , H( K/ M4 F3 J% }
  203.   }6 j8 F5 Y. G) g' |( {0 l. J1 t& h
  204.   return TRUE;
    * s/ Z5 b9 F2 V  p/ S
  205. }& @& E8 v/ @# w/ q. l# I
  206. ' P# f: o  h. M3 S: @
  207. BOOL CRevAppApp::UpdateLocalVersion(void)& }( q- z8 O3 R) d6 ?0 D
  208. {
    0 L* q0 |) ?- t, x% }2 P
  209.   char filename[MAX_PATH];
    , r; o7 \9 Y( u% O4 z" A
  210.   LPUPDATEFILE file,olds;" W+ ^6 m1 _  S5 w6 l
  211.   std::map<int,CString>::iterator i;
    $ t' Z( D/ v( }! D
  212.   std::map<CString,LPUPDATEFILE>::iterator p;( k- ~$ L0 l. w! y
  213.   std::list<CString>::iterator l;
    " A2 C: k$ d2 M4 X0 E1 {. x
  214. 1 h" y  [% O- N; k& L( H
  215.   if(bFirstUpdate); r: G- A: c  A; D; V) L. c& r+ q
  216.   {9 @8 t* z8 Z: R6 M
  217.     dwCurrFile=0;
      v. Q) z3 w9 l' T- G& p
  218.     bFirstUpdate=FALSE;
    8 [7 g9 x% d" p5 O4 o
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : N  y+ q, b1 R% F8 n2 j. e. \$ v
  220.     {
    4 t5 T* S/ r4 h2 p5 t# s
  221.       dwTotalFiles=UpdateLocal.size();
    8 Z' V6 s; S, a
  222.       dwDownLoaded=0;
      z* O( F7 x+ i& S; s! c
  223.       bSilentStep=FALSE;  J# ~, E! A" J  l1 n, r+ _3 ?
  224.       bCompressed=TRUE;0 ~- D$ O' y) \5 q' l5 K3 v
  225.       strExtLocal.Empty();6 b! o$ w# q- B. @% Q5 x% a
  226.       strFullName=(*i).second;
    ; @4 t* h1 m! H' V: e2 N5 f* Z; M1 m
  227.       dwProgramState=AP_CONNECT;0 n1 X1 [/ i9 |) U, N4 r5 M7 b
  228.       return TRUE;/ y2 Q' E) _: g* d
  229.     }' t; t! W7 K/ r; R3 T3 [6 P3 Z
  230.   }
    3 X$ k( R& Q1 O7 A
  231.   else if(bRestartUpdater==FALSE)
    . Z+ H+ f3 T6 \+ m  L) P7 z1 U
  232.   {
    ) }6 n1 \6 h+ @0 j5 w" W( r9 t/ F
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    % U* {9 v7 s5 W% @: H
  234.     {
    9 t( S- N6 o3 A( q$ z6 S7 N. s' d
  235.       file=(*p).second;5 d4 r/ l7 @% U; p7 e3 ?
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())( l1 s+ n; n0 M$ i" J! t
  237.       {
    6 R7 I  B$ R1 U, G
  238.         olds=(*p).second;9 J4 V6 }2 o6 H# M( k
  239.         olds->vers=file->vers;8 h% O' t, a( B+ Q1 U
  240.       }7 J  X- p8 F4 U5 D% `
  241.       else7 l- w  G; S9 r
  242.       {% `- J6 G1 ^4 o6 T" ]  A& S3 z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 Y. _: R6 G7 {# b& q7 {- X
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    5 {- R( T; w# _! ~$ y3 N% `. w
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    + Q$ j. h, x" U5 ~* |- ^+ \; d
  246.       }
    4 U5 ~2 n' E! {
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");4 Q0 ^  k# }: l  b; p* x
  248.       sprintf(filename,"(%s)",file->file);* A# E8 p( j6 ]1 e4 R3 E5 k
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; h* _8 X# r- Z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }! y: K! F* _3 I% j% l  n, B. N
  251.     }
    5 D5 {3 ~2 ]5 H; p. G" L( L
  252.     dwCurrFile++;6 l8 U( |0 n, M/ f9 ~
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 P7 B6 ~  N5 }2 T# U
  254.     {
    ( i  Y! U# f+ y7 }" ^; @% z
  255.       bSilentStep=FALSE;
    5 D% J) R1 c# G) T6 K8 q
  256.       bCompressed=TRUE;8 i4 X4 @2 s$ T3 R  |" p
  257.       strExtLocal.Empty();/ j3 G4 B, }4 n0 q$ |) p% K
  258.       strFullName=(*i).second;
    : a% J% J$ Z' p4 [5 K, w
  259.       dwProgramState=AP_CONNECT;$ b9 q& n* K. [, ?' S9 S
  260.       return TRUE;  P7 I8 v" X- V6 h+ D# D
  261.     }
    0 J; F5 O/ J" a: k# V! `
  262.     if(!bRestartUpdater)
    7 f+ {% A# ?1 Y: `7 o
  263.     {
    2 ?. a- ]" y. Z; I8 ?5 N0 ~& H) c3 J
  264.       int iCurrSize,iFileSize;; x/ u+ y) \. {, h% F- Y
  265.       iCurrSize=0;
    # ^& y9 W# b0 t  h( W" L9 v
  266.       iFileSize=UpdateList2.size();
    ' V4 ?) R+ X5 _8 d3 h, J, E
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");9 B5 `4 d+ ^0 h. W4 Q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    5 ?4 G+ D7 ~/ o8 _) K
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ' v! ^7 t3 c9 K. A3 J. a; M) K5 Q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' X  T0 z; E: Q6 M" @+ T, w
  271.       Fclearf(".\\update.dat");
    ' ^0 N2 X0 }, |/ d  V; q
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    $ z) l- t; J0 g+ F% A7 \
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) m" ~2 \0 q: a( ]+ f7 C
  274.       {
    4 {3 U. j( K  o) \5 t& M+ ?) p
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ; C5 H6 q" p1 g2 D( U  V
  276.         {: J- e+ C4 T( n( E. [5 n" H* J( B
  277.           file=(*p).second;1 p9 v% `, K, a1 f8 l
  278.           sprintf(filename,"(%s)",file->file);
    : M" g$ s. M8 Y" J. V
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 H( b; F1 h! R; p
  280.           iCurrSize++;6 N0 o) R. i7 S& V; x
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));+ S8 V" A: K2 R5 D$ v( q8 K0 u
  282.         }
    + c% d$ {) {$ A/ O
  283.       }! p# j5 E- c% c
  284.       unlink(".\\update.txt");
    ( @) K* k1 O5 m+ A' J
  285.       unlink(".\\update.tmp");
    + n* l% l2 H6 q+ i  _
  286.       Fclearf(".\\checkversion.dat");
    ( m% w6 S- _! t! C$ `# q9 [6 W
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);+ s6 S: Y. r( M+ {& N& P" d: L
  288.       if(UpdateLocal.size())- V6 P* z( Z3 o# k( z( V
  289.       {( X" i/ T( I/ H( m7 t3 `0 d
  290.         UpdateLocal.clear();
    8 h# L& z& v$ G9 }, p5 l, l$ H
  291.       }# I2 L6 |1 F: j# z
  292.       if(UpdateFile3.size())/ [0 z% W( j, `
  293.       {0 G2 m9 K! o2 ]: u8 Q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " z3 X5 S& W7 G. u
  295.         {$ F2 G5 `# M; a+ ]  r4 v- {
  296.           file=(*p).second;
    ; \. J% d' J4 h" ^+ q
  297.           free(file);' x+ H/ l# K& `3 @  \
  298.         }
    . G% H4 x- |4 m$ B* |2 o1 @9 E
  299.         UpdateFile3.clear();
    & Y4 a! n2 T; Y$ d# Q" |. X& a- l
  300.         UpdateList3.clear();9 @3 ]- C2 I# z5 U9 a6 n7 |! v
  301.       }; a& z. M3 Q$ Q8 K
  302.       if(UpdateFile2.size())7 I* O% L8 U2 T7 h
  303.       {
    . |5 }  j% W$ ]  B
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 ]. C5 f$ P9 k; g& B6 G7 ]
  305.         {
    2 g+ ?: ~! a3 H% p& [8 s* g. I
  306.           file=(*p).second;
    5 a9 c; [2 @5 q+ S1 R5 x
  307.           free(file);
    9 S$ v8 |/ Q' _) n5 J- D4 F, h
  308.         }# h0 w0 ^3 K9 [) O& s' }
  309.         UpdateFile2.clear();- k* V% Z: Y( F: [: H7 w
  310.         UpdateList2.clear();
    , i4 D' Q$ d2 c% g  `
  311.       }
    # Z6 ?6 H. i3 ^" o
  312.       if(UpdateFile1.size())  s$ m; P: ]+ G% F# g9 X) W
  313.       {
    # w  ]% R9 W$ C0 A5 w' j  l
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 v3 j7 J6 `, I' d, U) g
  315.         {
    7 o9 i# r6 Y* v4 p
  316.           file=(*p).second;
    3 y$ J3 `! M0 ^( m9 S
  317.           free(file);
    1 ?$ G  r- y% \0 J
  318.         }
    5 U5 t% W- n' f+ `0 J2 E6 ~
  319.         UpdateFile1.clear();/ [+ f+ a9 R" [
  320.         UpdateList1.clear();$ @# Z5 |; \( ?$ {) w
  321.       }
    ! z; {3 y, O# [- N; d
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));' @* P- J! j6 e9 A5 @0 l' O  @
  323.     }0 g# M' n" [! M4 \
  324.   }) }5 q- r8 E  G. `& K0 T
  325.   return FALSE;
    + s- B+ h3 }  ?0 d; e* n
  326. }1 k3 e) Z* f  v/ s

  327. 4 f, `! z/ n; r9 R7 [
  328. void CRevAppApp::ClearAll(void)% c# R2 |: l$ s( w" H+ d: J
  329. {# {( ^/ }; e( Z/ ?- r4 P
  330.   LPUPDATEFILE file;
    / v& f! ^/ {" C$ p; O
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 ^* r8 h+ \! P* h5 y- [' @

  332. , r' P3 P) O  u( Z& d  H) S* W
  333.   if(UpdateLocal.size())
      q7 Q% Y* p, ?; Z: C7 ~+ q- Z7 ?
  334.   {
    ! i, V9 n3 n- |- x. l! b5 |% u
  335.     UpdateLocal.clear();
    7 f3 c: F1 w; Q4 T' }- K7 [2 \( `
  336.   }
    " b0 V% m+ ~$ z. w) d9 `5 {
  337.   if(UpdateFile3.size())6 G$ z& U) R9 S, X
  338.   {8 `  U+ c( @% _6 N8 I+ _
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' F& A9 P0 _; i( b  I2 D6 L
  340.     {$ e( `) q$ h9 ~$ k( H: ^
  341.       file=(*p).second;
    8 H* a9 k+ e0 N
  342.       free(file);0 c' w4 o2 f! F9 B6 e) P
  343.     }
    : ^3 ~/ l0 l9 e
  344.     UpdateFile3.clear();3 C# m( k% u1 m2 J0 k6 d0 H9 x
  345.     UpdateList3.clear();
    2 H2 }0 _& F' z7 o
  346.   }0 F# \! A8 }2 e3 C/ ]; t4 M0 a5 {0 d! q0 m
  347.   if(UpdateFile2.size())
    ( s" P( S2 A& N* e" ~
  348.   {
    5 T5 H% _  t' \6 K7 @+ P( G( Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 d  ]+ J* ?; O  `- _5 q- i
  350.     {
    : t! U1 J7 B' @4 A
  351.       file=(*p).second;
    8 c' o* n$ T& i7 N1 c. o
  352.       free(file);
    * B7 [- \  g9 \  W/ ^7 Y
  353.     }
    6 d9 S2 |7 m& B! E8 _* D8 y
  354.     UpdateFile2.clear();
    $ r( x- K& Y4 S0 V* R0 S5 r
  355.     UpdateList2.clear();5 m9 Z& K# `/ R% l) Q  q; \" I
  356.   }- e; d# ~3 B) L$ t- R
  357.   if(UpdateFile1.size())
    * X* Q- X; j  ]3 c1 L; w
  358.   {% A! g  R$ |6 s* j, @
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% |: W3 t( b5 l* d) D& {0 `" [
  360.     {
    - A5 X! ~# X6 W2 d1 I: l1 D
  361.       file=(*p).second;
    7 v6 ?4 p- r% n: `* I
  362.       free(file);: Q  I( \! O( N! O' c: }! o# f- U
  363.     }6 F3 E8 Z* f3 \4 A- C! |' V
  364.     UpdateFile1.clear();
    3 \# u# `' m3 T! ]6 R& h
  365.     UpdateList1.clear();3 r2 P4 R7 \! o8 F. v
  366.   }! I) d' `/ s% O
  367. }  7 i, K0 B0 {/ k4 A* i( N+ K
  368.   
    : u5 d) }, _, K
  369. BOOL CRevAppApp::CheckLocalVersion(void)( H' f2 S/ u: K; Y2 O
  370. {
    & {4 i3 `6 T. U$ a$ T% n
  371.   int c;7 R3 |$ O  T& [9 l
  372.   LPUPDATEFILE file1,file2;
    : b+ ?6 j# P6 f3 u. _3 Y! J3 ^& y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;* q/ i$ T+ E1 t2 T, s# H
  374.   std::list<CString>::iterator l;1 z3 `' k+ Y8 U; b9 p6 V& s

  375. 7 A/ F' i0 N8 W& Y; k
  376.   UpdateLocal.clear();3 P: \' c  ?# v+ K) g; B& |8 [
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);! N* u8 \  k. x
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);2 ~5 U3 L# y2 |" ^  [) m& A
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ) B0 E' j: W; E' S1 q5 V3 h! ]
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);& y% Z- C) q6 O- |
  381.   if(UpdateFile3.size())3 ?0 p) }2 _0 E$ h
  382.   {8 @- k- E9 e0 j. q2 q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)7 B3 c( J+ L- G0 D5 @$ [0 V& B' Q4 o
  384.     {0 b6 Z0 a# g. R3 S9 P' w, G
  385.       file2=(LPUPDATEFILE)(*i).second;
    , a+ e8 `. A; p! j5 D
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 C2 o4 _( q' W0 z
  387.       {
    5 T; A+ Z8 n  S6 D/ v6 y9 {3 _  w  X
  388.         file1=(LPUPDATEFILE)(*p).second;0 J9 N5 i  ^  L/ P  Q' v5 L+ f5 r
  389.         file1->vers=file2->vers;1 e2 e& }' ^+ }
  390.       }
    ! ~5 G* W3 l$ b: B
  391.       else  t8 G" R4 N& t  V5 q: d
  392.       {
    9 n' M% g0 R2 I1 Q. B0 x4 ?# S8 `
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 T" n. {  w5 k4 O5 S1 o6 P' A
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));4 O6 V; ]2 z& U' {+ a( U( D' Y3 _
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    4 L$ F9 K4 q' p6 k- r1 e
  396.       }
    & b1 k2 j, n/ i1 i4 M
  397.     }
    9 c: c, J% v' @) j9 w5 U, ?( X
  398.   }
    2 ?( _- N. q8 R/ X
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)/ z7 Z3 Q- U" t+ D) r
  400.   {
    9 b) S  r/ @4 U9 s* c! |( ]. t
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()); W& `, l! Q) J. o* n1 s
  402.     {
    5 n- ?) `* v1 L; x, K1 D) E5 U
  403.       file2=(LPUPDATEFILE)(*i).second;
    ' g; i( w" J$ ~- B) Z, B
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 Q& N- B: n' w0 v6 \+ s
  405.       {
    ( e) v/ W* I4 `/ t3 \5 a
  406.         file1=(LPUPDATEFILE)(*p).second;
    % U$ W4 `7 F1 C8 G' k
  407.         if(file1->vers!=file2->vers)1 \- S, y) q9 _6 W8 B% V8 }- Z
  408.         {
    ( L% }2 w+ L2 u8 ]) z3 H' u
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  t# ], d* I0 L! g
  410.           c++;" H! Z& d! t* L& H
  411.         }+ i* r  B/ n, J7 z4 ~& W$ G
  412.       }
    8 D# f  R& s3 D1 j, N8 @
  413.       else* \/ }" \( |  r& \" C' q6 @+ i) H" e
  414.       {8 L7 B  T1 \% L! S5 E- `
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! m; `# I8 a0 N- z( g6 |. ^
  416.         c++;8 ]  O  ~. o# L. V( I+ A
  417.       }
    2 Z) \1 @; S& R" F
  418.     }
    0 p$ e! M! Q# R( X
  419.   }$ a8 x" O5 X5 D
  420.   unlink(".\\DownLoad\\update.txt");
      i& y) Y& a- ~+ T9 g, r% r! ~; q& V
  421.   if(UpdateLocal.size()) return TRUE;
    8 E0 i% l! S# j# B& Z6 K: j0 F  E
  422.   else                   return FALSE;4 n2 p% F' x! k9 V1 j4 \
  423. }, X0 Q+ [5 W" ]3 {

  424. 5 g" E' R7 Y8 ~" f7 ?+ _7 T5 M* O
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"% {2 O7 b* _" y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"( _9 L9 {* @2 n

  427. ! t& V3 s7 r+ U- V" T+ ]. u' Y

  428. 8 f9 _1 O$ V* X- |

  429. : ?% C+ V; Z& W7 K9 `  }* b$ b
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)! H, I- u+ e6 K: \
  431. {
    / j5 Z4 v1 ?4 e2 B" @# [
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    & y6 x1 q+ O$ [1 B) o
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      L/ T: m/ U$ ?) J% ~
  434.   {
    ( a5 r- m0 ~. l; Z! X) |7 T: O
  435.     char szLanguage[50];
    , `; r4 y! b* L5 r" n
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 a- Z1 m: k4 }+ p: l
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' C& k$ Z7 h9 e2 w* C
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;7 U! n; X" [' _/ {8 z6 S+ P$ p
  439.     else                                   m_iLanguage=ENGLISH;
    % y  S7 L9 j8 }+ E6 Y
  440.     char szRegister[100];
    9 L" l9 F' D0 M' Q( W  Y* E
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ {5 J! P9 E5 _2 S; K5 Z
  442.     strRegsName=szRegister;
    5 |* k2 z% l7 Q5 H& a6 ?! v/ p2 _% p
  443.     char szPatchURL[100];8 Q  p4 ]9 F: P" r1 n$ o
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / ^; k/ g" M# s) |& v" h' ?0 z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" X0 Q: X/ h1 Y7 o
  446.   }. O- R) j8 m3 i( i( w! b. L" O/ w
  447.   else4 Y( T1 E6 z0 H. H
  448.   {7 s# ]$ G* {/ k
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 p/ {7 ^6 X# G3 Q6 N1 P
  450.     strRegsName=DEFAULT_REG_URL;
    0 P2 y7 v3 m1 I4 o- L' F! `( `
  451.   }( p5 R% B' K. H$ |6 T
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    / s! M3 Q% v( D; |
  453.   {( \. R# l- \6 M
  454.     char szIP[50];9 o% A, f+ i- i* l3 p$ u
  455.     char szDIR[300];# ]6 ?/ m$ P: r. a2 W! Y
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    # h6 x2 C% p+ V
  457.     {3 g2 h; m& r9 W* w
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    $ H* f+ w- t. |- w
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    6 ?' F! Z# E7 w- v$ U5 G
  460.       strHostName=szIP;
    . n) k1 G4 a2 a4 Q5 k! q
  461.       strHostPath.Format("/%s",szDIR);
    % v* {" j- H9 O2 k, v
  462.     }
    6 C; e: a  H/ E1 n% E
  463.     else$ t+ r6 J+ @! {
  464.     {
    # l! ~- W8 w* A; K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 E; w  Z5 a8 R# g% S( Z
  466.       {
    ; b+ m% J+ }3 I  s6 i
  467.         char szLanguage[50];
    - z: V# R( s) K% x: c0 S) h' Y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    - v4 p5 ]$ Y; c8 V8 u# ^( Q$ @: _
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; F" ]  u  l4 s
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ U" ]! P! h% N7 J
  471.         else                                   m_iLanguage=ENGLISH;
    6 t' ?& f3 r9 F! |
  472.         char szRegister[100];
    2 M1 b4 g! \- t' F3 r
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 c- v& `0 ?, c1 @0 c$ ^: I
  474.         strRegsName=szRegister;9 K0 e: c. a. t5 @6 k
  475.         char szPatchURL[100];
    7 x9 Q) q3 t" t
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 z. b6 l& G1 v* o8 `0 ?* _
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - p+ a/ D, x4 k5 L! c
  478.       }  q; Y& M) M$ v
  479.       else3 [4 b  m1 y: T* e
  480.       {" h# }2 a# c* x6 b2 q
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; N- r# d+ s$ \- ?
  482.         strRegsName=DEFAULT_REG_URL;
    0 m: J1 }/ U; ?7 ^+ R3 i, X
  483.       }. p! X  h# s4 ?- n8 G, V
  484.     }& t: C/ X+ K' ^/ t" S
  485.   }6 Z# K+ z: @$ o/ b
  486.   return true;
    ' w( i' V5 ~2 D- d# ~+ e
  487. }" O% O: x  Z! O( A9 X9 ]; L

  488. 0 k  h4 {* E) J5 d/ F
  489. #include ".\ZLib\unzip.h"
    - t  V2 b4 A, R4 F
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);' N1 b7 T0 ~0 g4 g
  491. /////////////////////////////////////////////////////////////////////////////
      w: s# Q/ N9 @: i* X7 o
  492. // CRevAppApp initialization
    & f; g6 m1 N; w( y8 P4 e0 I. C
  493. 2 E0 o0 }8 Y0 w- D9 c, }
  494. BOOL CRevAppApp::InitInstance()
    2 L* J9 c4 s- c' X
  495. {- {9 _1 q: j" `8 Y7 B9 N/ A
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];" E* ~* g( x$ v; v

  497. 0 _3 I+ e. f2 _" S6 n# R/ E
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);. r1 l5 Z7 z% w- W" w
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    0 @- O  Z3 H! B  l: h
  500.   {
      L* }& _' Z. [; E6 w7 f  H
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    2 @4 |/ W2 r1 }+ G' o
  502.     GetPathFromFullPath(szPathTarget,szPathSource);) w; E4 m' l/ Z) ]0 q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))3 o0 O* O, ~+ a2 P0 ~
  504.     {
    & C& l, o8 g" K; ?8 S0 J! r  E. s
  505.       strcpy(szPath,szPathTarget);
    # t6 V# R6 j* \$ N% H) S& f
  506.       SetCurrentDirectory(szPath);
    0 t$ o5 c8 B2 `! S
  507.     }/ X% c9 k! h! S* m% U& M3 O5 \
  508.   }
      F4 n( G, K. z2 U1 y  ?
  509. #ifdef _DEBUG
    / \% A$ B( i* w+ K
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 v- u  J5 ~' a( {) X
  511. #else. L9 K' s2 K* ?7 z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))7 C& q( _* v1 K. T
  513. #endif9 V" {. t0 ~* p( }8 m2 b
  514.   {4 D5 z! a, l; P* W; H& R
  515.     char tempFileName[MAX_PATH];
    7 d* f" L3 T. K- ^# b/ `
  516.     strcpy(tempFileName,szPathSource);
    5 f1 W1 L( t- j2 Q4 I4 Y+ o2 p4 W
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ; D8 Z/ ^1 {% `5 a- j2 ]  u9 ]
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    + x% M/ `$ o" w0 U* x8 \- w0 _
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);' g5 K. }3 G' @7 u* c
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    0 ]+ B- j( t7 v! t9 E
  521.     return TRUE;3 Z8 T1 t$ Z3 ^. m
  522.   }* F/ j2 t: ~- W6 T& V0 ^
  523.   // Nuke 0118: Delete run.exe
    * x' }7 t4 E' D
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    , x7 {- E1 d$ a4 }1 z4 U6 Y5 F5 p
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    & U+ U& L9 s; s; M
  526.   if(!ReadCfgFile("Config.ini"))+ Q: ~! m; C2 @0 j
  527.   {
      B6 q1 N; x1 l( M
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ' h" ]0 K; ]* v* \
  529.     return TRUE;) R, w7 o7 }. z6 S5 p
  530.   }
    7 ^; G; w# |" M! L! p4 a
  531.   HANDLE mutex;6 q: i. h8 Q6 ?1 o; J! r
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))* m" l. W' H) d% D* Z$ D
  533.   {( [8 T' d) S6 u$ Z
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS), I# A/ k4 V9 W2 ~  q: _! J4 I9 _
  535.     {
    , n& b( s/ m& m- a  W7 @" K* O
  536.       CloseHandle(mutex);: ]; s1 i) _! F6 `
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);5 n& a) N8 M, S' k. g: k
  538.       return TRUE;' a$ [; g; U8 M! }! W  N
  539.     }
    3 E- R4 A+ r; f
  540.   }  
    / O, y7 u) |/ ^9 M& j
  541.   CloseHandle(mutex);6 c. m: T2 M# {* X3 F* ]

  542. 2 a3 y" I0 O( x% _' L  L
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    $ i, j& j( r7 `( F( [8 @
  544. & y. T: w2 G+ q; J
  545.         AfxEnableControlContainer();* U$ I7 \. I' _. P" N
  546. + ^2 Q5 B& d% \! E2 ?& i6 m% T
  547.   bCanUpdate=FALSE;
    , r6 P* }& o- H) K  k$ V
  548.   dwStartUpSteps=1;
      F! x2 b/ U" b  C; i( g# x
  549.   dwProgramState=AP_NOTHING;* H) B1 A1 _# b9 n& k- p! V! q0 B
  550. % Y9 Y+ S$ F5 U
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    $ m4 G- L4 _/ W% \. `3 p

  552. 9 W- N9 e( z7 J6 Q% c: P  ~- ]
  553.         // Standard initialization3 {4 z5 }. B! V5 `# _
  554.         // If you are not using these features and wish to reduce the size
    # c% p+ s  o& N6 Z! d+ D$ ?* l
  555.         //  of your final executable, you should remove from the following! \! S' I' W4 ], g5 B) D; Y
  556.         //  the specific initialization routines you do not need.4 V% Z, |& P1 o9 v. _7 y6 u0 r2 I

  557. 1 ^) p9 m$ U8 p# M
  558. #ifdef _AFXDLL8 P$ J5 S: [# @4 ~
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    0 u; K& e& [! ]( M+ ^
  560. #else5 [% W( k7 u4 ?# o0 U$ r
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically% `3 v. F# }3 M+ c. Q
  562. #endif2 j/ T" _% s& f7 T) k' ]2 ]( [
  563. ' w, e- {9 d! Y8 B
  564.   dlg=new CRevAppDlg;
    & [1 U3 i- ?% X' H7 W( P
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    1 V0 D" @% Y$ ^8 V7 ?
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    6 @; {9 K1 B1 A. A
  567.   m_pMainWnd=dlg;
    : c4 L: |9 p% V, a% s; c, S0 k" l5 ?

  568. + b8 l' ?( S) q2 p/ q& d, S. U
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    $ Z- F: A  o$ G
  570. 7 L: n5 G, d. ]$ A6 a) X
  571. //  GdiplusStartupInput gdiplusStartupInput;
    5 C/ [1 a/ }. X
  572. //  ULONG_PTR gdiplusToken;
    - x$ }* A% B1 s9 {( P, N
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    * l5 w/ i/ q! c+ Z6 p/ J0 `

  574. ; |7 g1 Y$ v9 s4 S2 Y+ u  J
  575. //        CRevAppDlg dlg;  @1 ^4 t8 Q% I( M7 b
  576. //        int nResponse = dlg.DoModal();' C+ l% x( J: |2 @) L: j: d, b
  577. //        if (nResponse == IDOK)
    . j' \; b6 u% b0 {% \. K
  578. //        {/ I5 X0 F6 J* i) M6 X# p. _, p
  579. //                // TODO: Place code here to handle when the dialog is
    ! E/ P+ d3 p. J0 S
  580. //                //  dismissed with OK
    + U  l( n  }, R* i. a* J4 u- M( m
  581. //        }
    : Q" l, h( U( g6 T( [" B/ `
  582. //        else if (nResponse == IDCANCEL)
    * R, p8 V0 C3 v0 b, {- W
  583. //        {
    * I. X5 K: f( P
  584. //                // TODO: Place code here to handle when the dialog is# C6 V/ d, c$ E7 S  X
  585. //                //  dismissed with Cancel
    2 J7 U  t0 ?% w4 G% t, g
  586. //        }. e5 C! a# D+ z+ u1 K/ ]
  587. + I' M* E6 `! `
  588.         // Since the dialog has been closed, return FALSE so that we exit the+ z% C* A1 Q% j- d0 ?4 d/ ^
  589.         //  application, rather than start the application's message pump.4 C& Z& S* e5 [8 F; A
  590.         return TRUE;$ t. [7 O% \. E3 ], h! c
  591. }  T' Y- i% M0 i, R
  592. ; D9 ?; C9 N. X% {: m
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 i3 Q9 Q* ^+ o6 f1 c5 v
  594. {
    3 O  n: ~# @' n/ c1 s
  595.   int i;
    $ [- J; ^$ O" r% G! i6 E. f; D- Y
  596.   char *szRet;
    2 D0 h0 [4 n, W9 B

  597. " W1 l0 s1 I8 m: @' ]9 y7 I+ s7 A* B+ X
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    # C$ p1 g3 L" ~
  599.   if(sztoken)
    0 s4 G! X" \. y; e
  600.   {
    9 D9 ~, C4 S/ M- g4 @# `
  601.     szRet=&sztoken[itoken];1 g6 a* a1 v5 n8 [
  602.     while(sztoken[itoken])* ?2 f: a* w# C$ h7 M' H
  603.     {; g# x' D4 l/ U7 Q
  604.       for(i=0;i<(int)strlen(token);i++)
    # u+ X; N7 x  L, \* L
  605.       {
    & A4 X+ Z8 k- ]6 R
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    8 H3 R" F  S0 d# F
  607.         {! y# M/ J( G! v6 k( g( K2 }0 P  j
  608.           sztoken[itoken++]=0;
    , {: g& V8 b2 i' i' h/ i
  609.           sztoken[itoken++]=0;
    ! x* y& f) f, P, A3 [. `
  610.           return szRet;
    7 y$ T% u7 o' n& v
  611.         }7 K$ F# ^$ A! R% Z
  612.       }
    6 R' S  R1 f9 O% d1 r7 c  R
  613.       itoken++;
    % L2 o# L5 H8 ?3 w
  614.     }
    ( n' j1 |- Q( A
  615.   }
    - Z3 z+ W; ~! A/ g
  616.   return NULL;) E* ?/ X/ N& ^/ X0 c
  617. }' ^* ^6 H8 t( {! B$ z7 P
  618.   n# w8 A/ W* {! y
  619. void ProcessProc(long Total,long Current); {6 f4 z5 G# M/ f
  620. {
    ; |8 e: H0 ]- O2 \6 I" n( X( _
  621.         MSG msg;
    6 @0 j' }. J7 P" }- E
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    : h, o6 D1 U, @- K  n/ [2 {. c1 w7 S
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 n2 I: ?9 Q/ s  j' G. V
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    & `, B. B; C/ Q' q0 K2 s
  625.         {
    : F: j/ {+ k7 k# J
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & J3 G1 T! w. G% P9 N! S# k1 i
  627.                 {
    ' q0 i  ?  x. u4 w# V* T
  628.                         return;1 ~8 P6 N( @4 J/ O
  629.                 }# {  P5 `+ Q2 ^3 D( ]; g% u+ o
  630.                 TranslateMessage(&msg);
    ! Z. u* S& w% q  ^! V! L/ O
  631.                 DispatchMessage(&msg);$ S% P$ R% ]* L/ W* s! q
  632.         }        0 y  k9 j; t) Y" G6 f6 m! Y7 T
  633. }$ U* v  S( u& s, K) }

  634. 4 ~. S' `6 u. N& i) a1 h
  635. BOOL bFirstChar=TRUE;
    1 H+ A; K. B7 o4 N; u8 A

  636. 2 E/ \% ~. }! \* N! `
  637. BOOL CRevAppApp::OnIdle(LONG lCount)( V# ~: g  u5 [" U5 C' E
  638. {& c7 O  x/ j- K2 C
  639.         // TODO: Add your specialized code here and/or call the base class
    / Q, |) y& y. H  y& Y$ |% o; ?' t
  640.   switch(dwProgramState); K( @2 K: L: b# o1 M" W# K
  641.   {. ]3 c# v! Y: ~6 ~
  642.   case AP_NOTHING:8 e) A2 b9 _% j6 y" k7 f
  643.     switch(dwStartUpSteps)$ m) {* T- e# b8 C8 `. e
  644.     {% F  m% |! |& D
  645.     case 1:0 J: m. H9 C& o, B) u  A
  646.       {# j5 e# A/ }8 \) S; @7 E6 v
  647.         int i;
    2 X- A0 W5 i9 G- E3 `3 x
  648.         CDC *pCDC=dlg->GetDC();
    4 R% s( \) a, C2 G0 x8 p* Y! J
  649.         HDC hdcwnd=pCDC->m_hDC;
    8 r# j2 b  w. M4 q; ~( V
  650. //        Graphics graphics(hdcwnd);
    9 N; H# d4 Y  a9 @* n, u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");. l) O$ O: `  T  {) b
  652. //        INT iWidth=bitmap.GetWidth();
    % t. g: u! _1 ~5 U! U( Y' Y+ H% Z: y
  653. //        INT iHeight=bitmap.GetHeight();5 F, O9 y1 \' b& Z. W/ h4 {  w5 c
  654. //        Color color,colorTemp;) J4 q8 L1 g6 j4 |1 I  `
  655. //        for(INT iRow=0;iRow<iHeight;iRow++). J+ `5 v: w; D
  656. //        {0 K; M* ~3 u4 S; q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    $ }4 f/ T# M" x
  658. //          {
      {8 t3 c' u0 M& c2 @- A$ o0 B9 Z; }
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    - g) l1 V! G, F* @% c& a
  660. //            colorTemp.SetValue(color.MakeARGB(/ U3 L) Y4 C# H% u% Z4 M
  661. //              (BYTE)(255*iColumn/iWidth),+ N& [' \& P; [! N6 q5 f2 Z( h" ~4 g
  662. //              color.GetRed(),
    1 Q3 z0 @2 @; W- Z( W% L
  663. //              color.GetGreen(),
    6 N" S$ V# ?9 Z( W
  664. //              color.GetBlue()));
    ' S/ D$ Y$ b  r5 ]9 D; t- L
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) a7 a$ g! @" B# i; O
  666. //          }
    ' m8 \8 Z4 S2 n  {; j# M
  667. //        }/ |. U' c# R: H6 o$ _2 A
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    / L  K% C: f8 l, I
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- P3 Q9 A. T7 b7 Q/ x
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ; Z2 w0 D" B4 V3 Q( o% S
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " O2 c! v3 T9 m
  672.         for(i=0;i<240;i+=8)
    ' R& G1 ^  x; R) M8 v2 y. ?3 Y$ ]
  673.         {8 b9 c- }7 P: b3 H6 Q" u: m
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 t8 k2 m. o. ?. u1 R
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 E0 a' g4 ^* {4 A1 T8 ]0 \* e- d
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : }. Q; X& N: }' r/ ~- Q# n
  677.           Sleep(33);  q4 |2 H, f( T5 m" {" e) k
  678.         }8 P2 G" T4 G& m/ a7 I' T1 j5 m. F
  679.         Sleep(1000);: A/ c. y2 H7 j, f
  680.         for(i=240;i>0;i-=8)) ^# W1 ]5 o! w+ G
  681.         {" S% d  e& k8 H6 p
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! o' f8 H1 @9 ^* V# x
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& a  h5 |5 b- B0 c
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' g. C1 P- f$ |& r3 f9 l- r- d
  685.           Sleep(33);
    ( x7 _1 c- Y6 G* [7 m) H/ X
  686.         }# f5 X( a0 ?- Y1 r
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);% }6 `4 y! n' d1 }& Z
  688.         dlg->ReleaseDC(pCDC);3 b$ a2 x8 f1 j( S
  689.         DeleteDC(hdctar);& j3 H; ~$ U* g0 V+ A1 t
  690.         DeleteDC(hdcsrc);  M0 u" ?7 O2 ~- T* `/ v8 v1 l% S
  691.         DeleteDC(hdcorg);
    2 J) S5 q; {! \! S2 B: t* V
  692.       }
    - K, R! y/ w) B3 z8 M$ b9 ^
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    8 e( t. G8 K, J* x
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ( D+ h9 u* {" Z& w
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");9 ^" i9 [; ~) |
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    / S9 P* W1 A' [, m
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % }% K. ~3 n4 X+ F
  698.       if(!Dn.Connected())
    7 L3 N) N- ~7 p
  699.       {6 ?- L- i8 h. L1 Q8 ~
  700.         dwTotalFiles=1;! q% l7 k- [' Z5 o
  701.         dwDownLoaded=0;
    " W  m  V! U! Y" h4 V
  702.         bSilentStep=TRUE;0 @: @7 x; A1 f$ E- d" H  ^
  703.         bCompressed=FALSE;
    9 c3 M4 g: [: N. B+ A- _' ^
  704.         strExtLocal.Empty();2 k: W2 z' a6 L/ \/ G, r1 H
  705.         strFullName="readme.txt";) V- a. H$ g7 K' V* c3 H, {* ^
  706.         dwProgramState=AP_CONNECT;
    1 C% @& L+ {# @
  707.       }4 c" H4 D- T9 M( {
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 b0 d/ E# A- N2 K; v' V5 E
  709.       dwStartUpSteps=2;
    $ V7 Q8 E. q# \
  710.       break;
    9 y6 m. f6 {0 j2 Z% k! i
  711.     case 2:
    9 X5 C. V8 u4 M
  712.       {6 K! L- s/ ~6 {" \
  713.         int iEOF;
    . ~4 ?2 F8 `% X( f7 R* U
  714.         FILE *fp;1 _: z* N% N' H1 ^
  715.         char szString[512];
      p6 f, Q- G8 I) d3 f8 f$ C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    # o$ i+ x/ c9 D% X6 i3 {4 ]/ A  w0 `
  717.         if(fp)
    9 I. @9 i$ h6 m! q& L' I
  718.         {
    6 z, J. B  f! h5 u
  719.           do# w9 d: ?0 k. E0 B' P2 \0 f
  720.           {
    0 S0 j4 f; d& ?( j
  721.             iEOF=fscanf(fp,"%s",szString);
    , }$ o6 v: d' S1 n5 d& }5 u1 J# A
  722.             if(strlen(szString))$ d, M$ n! Y$ {
  723.             {  [, A+ J, ]) A" i+ Q8 L4 p
  724.               if(bFirstChar)
    9 Q! t) ^# b8 e# [: M; M2 W
  725.               {
    % L# P4 K8 L$ c' ~% u, b8 Q  R4 Q
  726.                 bFirstChar=FALSE;' H+ n) y; d% n
  727.                 bConnectIsBig5=FALSE;- ]& ~3 y& U1 y$ H& e# y9 V
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;) Q9 p3 D7 q( s1 g
  729.               }
      s. Z2 n7 a+ w
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    % ^! C4 S" i% y3 u! X
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));6 E& C2 W+ h( P7 ^6 x, K
  732.               dlg->m_ListText.AddString(szString);6 G. I8 l+ h2 _5 t1 f2 e4 Y
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + @8 z+ o& J4 B4 w' g8 O
  734.               *szString=0;
    $ X0 p4 O& u% r& k8 ^
  735.             }8 P! e. A. a8 ^2 d7 u5 J1 _
  736.           } while(iEOF!=EOF);
    * d" ]2 X$ N8 @& v. k1 y% }: U/ n
  737.           fclose(fp);- J2 ?, ^* K5 w3 J: g- P
  738.           unlink(".\\DownLoad\\readme.txt");
    ( @5 x* ?( A* G9 G0 S
  739.           dwStartUpSteps=3;5 p% R$ S, ]3 c- Q
  740.         }( T# B) Z) \2 S+ M! X& P- m% [1 K
  741.       }
    - ?' i8 y4 N4 V$ Z- @( L
  742.       break;
    / b, e$ ?) k1 W% G
  743.     case 3:+ b% w8 o$ l% D8 g
  744.       if(!Dn.Connected())
    5 p8 d" L6 g, |* C- p/ {' Y
  745.       {
    : t# W' c$ H. [+ d8 u6 A* T7 M9 }
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    % T: X$ e4 y8 G4 S8 l, U, U% W
  747.         dwTotalFiles=1;
    * D" `( F0 a+ W1 ^2 C1 L/ n
  748.         dwDownLoaded=0;3 w4 g! P: ^& R  b
  749.         bSilentStep=TRUE;2 F& ~+ z8 @, A0 [
  750.         bCompressed=FALSE;
    % d( C5 ]) t# ]$ Z- f4 j
  751.         strExtLocal.Empty();  N% {1 y7 S$ O7 m" C
  752.         strFullName="checkversion.txt";' f; s& n  P9 g4 _" O
  753.         dwProgramState=AP_CONNECT;( I5 h) |7 T( @8 d/ y% K
  754.       }
    - p0 q5 I& G! |) D) ?
  755.       dwStartUpSteps=4;
    ( {' R3 B# D4 p: a
  756.       break;2 k8 q( x" ~: D
  757.     case 4:
    # Y3 }) \/ V& p: I- z
  758.       {
    + g: w: O) o$ P  r4 }
  759.         FILE *fp;6 ?; A0 k; n( P. x: _
  760.         char szString1[128];8 Y8 B! }2 o, W# V% b2 f1 N
  761.         char szString2[128];
    ( o& t" j: i, B) h# v3 G1 Q: K
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    $ j8 W$ p7 @9 s. v: A7 k" T6 N
  763.         if(fp)
    $ o, J8 ~. @$ L" O1 t, F7 h
  764.         {2 I" d( X6 {2 l3 Q
  765.           fscanf(fp,"%s",szString1);% l% i' ]- C6 I& z2 K& }6 @& O
  766.           fclose(fp);$ ^3 ^( s( }- o0 v7 \. o) a! i
  767.           fCheckVersion=atof(szString1);
    5 ]7 y! v* M- C7 r
  768.           fp=fopen(".\\checkversion.dat","r");
    3 K7 u  e2 g( A3 I* l
  769.           if(fp)
    * c) N5 R) G/ i9 |0 g' u
  770.           {
    ( f* K3 Z/ D. }2 o% G* T4 H
  771.             fscanf(fp,"%s",szString2);  z) n0 G: A  t6 |3 Q" M
  772.             fclose(fp);6 d  @5 U2 Q2 C* y' E
  773.             if(atof(szString1)!=atof(szString2))
    % W; K: j$ [/ b  |$ e/ ~
  774.             {
    3 L7 ~7 L; f7 T4 a1 T
  775.               if(!Dn.Connected())8 }9 p# S+ H7 X' ^( \
  776.               {- J. E' @: k0 E# p  i9 x& c! ?
  777.                 bFirstUpdate=TRUE;
    4 d' R4 o/ q7 M# p1 Q
  778.                 dwTotalFiles=1;
    ' H1 \5 `- F+ F7 C8 d9 u# t& t5 q( Q
  779.                 dwDownLoaded=0;
    2 ]0 Q0 P: E  {, C+ L% Y0 G
  780.                 bSilentStep=FALSE;0 T2 I0 R2 S1 R- l; u  D
  781.                 bCompressed=TRUE;
    , _7 s: c" Z/ v4 A3 f# Z3 p5 r
  782.                 strExtLocal=".\\DownLoad\";
    $ i  ^+ B% Q1 Z, n9 B6 y* D3 J8 x
  783.                 strFullName="update.txt";2 s# D0 W) l$ ]2 R! P
  784.                 dwProgramState=AP_CONNECT;
    3 W5 g/ f' O- ]
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% ?, S" M- i$ v! k% m; }
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, X7 [' b% W0 g; [8 H
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");; f! P, |& ^/ ^) l! A; ?) V. H
  788. % U) ]8 W8 W5 j0 H) k) \+ Y3 L
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 r3 Q3 R# `, T4 F- E: o5 ?1 D. a
  790.                 unlink(".\\DownLoad\\checkversion.txt");6 r% k; I6 S5 d( {
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    / e! J" _" l7 A( Q
  792.                 {
    : u4 N$ w* F! i" ?$ p! m
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    & G% K! N- v$ r0 R( p# i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");) C- H" ]% I$ b5 Y+ k8 S% r, c
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 K6 R2 U6 O$ E
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & _: ?7 J7 t0 q* Q

  797. 2 C* {- o$ J4 X1 O  S! f
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 y9 G$ w1 b5 J) B) x* }; r; q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      e. o4 W' \/ z3 N0 Q4 k
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    1 y9 i' w2 a0 v" t# b0 G
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  Y6 J0 S: G: Q% g4 ], u
  802.                 }  J6 j+ U) X7 e9 D: t2 S
  803.                 dwStartUpSteps=5;
    ) B: k# g+ n- e: R
  804.               }
    . b" S$ I2 D2 T  }% m
  805.             }& v" {# ^$ H! N! ?
  806.             else0 \4 W+ ^/ Z3 Y# M
  807.             {2 I, x. v+ M" _8 H/ T
  808.               unlink(".\\DownLoad\\checkversion.txt");
    " E: ~" i9 [5 [2 Z$ H3 o
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");$ N- V2 i: J) l- K1 H  I+ _
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ t& c, ]) b+ j7 }
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ! ?* K4 ]  i9 ^0 y2 C1 U, t/ h

  812. * V  ~) o( w% u/ w. k/ y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- ~4 h: }  a& N% R2 X% F: {) N8 N
  814.               dwStartUpSteps=99;! K0 ~. `8 i+ i: G7 I' i; q
  815.               bFinishUpdated=TRUE;( Y( m$ v* ~* B' @  T, y
  816.               bCanUpdate=TRUE;* q3 {1 O2 T3 J( i
  817.             }
    ; H. @! `: d; T9 h( Y4 r
  818.           }
    # C& B- h5 z* ~3 f6 z, Q6 m8 V
  819.           else
    ( k& T# c* x  B, c7 t) |8 `
  820.           {
    " \8 Y' E3 s* B! T3 Z% {& K
  821.             if(!Dn.Connected())
    0 G! [: t% N; @2 E7 o: c1 j* w2 r8 }
  822.             {
    5 ?! G( Y& A# ?
  823.               bFirstUpdate=TRUE;- L8 D' R) |. S4 _
  824.               dwTotalFiles=1;1 u# c- Q3 j( p. Q
  825.               dwDownLoaded=0;
    , o2 Q! i$ v1 b6 L8 H
  826.               bSilentStep=FALSE;
    1 j% I( p. F0 x- d+ \% m
  827.               bCompressed=TRUE;4 ]6 v8 S6 `- J. s4 E0 K
  828.               strExtLocal=".\\DownLoad\";
    ! {& b* J. T( d3 Q
  829.               strFullName="update.txt";
    . u% j6 Y+ F; v" f" B* A1 V
  830.               dwProgramState=AP_CONNECT;
    / c8 a, w7 P! y) \
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " P4 w$ A: T& t$ X: r* ?. k; @
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 I' z& I  F4 Q4 z  l
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - _  v2 l* [' r* y
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 p! E8 E: B4 z. e4 Y; _
  835.               unlink(".\\DownLoad\\checkversion.txt");/ a+ h; k  c. t" F; w- E
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    9 R& H- Q) s3 y) v0 x( U5 O
  837.               {1 r  h* B/ C7 l0 p8 o
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    % I5 c" X7 m+ `* o! b0 B4 q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    2 \: z" ?1 a$ o( O) X8 n+ Z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");6 }( W& G$ F: ^; {& U
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 w+ s3 s$ ?5 \9 B' X% s
  842.                 # M& g; N8 F) D! K
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");* Y* I0 ]( }( {
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! o7 m/ ^! z# ~! t' E
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 d/ q, E# P  K. ]. c2 J
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) u) f. \# d  x; M" f; h
  847.               }7 F/ D1 c3 F3 H4 c# Z
  848.               dwStartUpSteps=5;
    5 X6 \: N- V+ w
  849.             }9 l( T1 q+ B) }1 p; E: W! u" g# h$ A
  850.           }2 S( B& u5 W6 {
  851.         }
    - t6 P& y! Y8 u" l& h3 l4 B6 |
  852.         else
    0 O% g; P1 `+ @) e  m
  853.         {3 s$ s# b5 P+ @
  854.           dwStartUpSteps=3;
    3 x$ o+ h2 m$ u( C, ?
  855.         }
    & H3 o( Z& i2 X: m- Z& p$ c
  856.       }
    2 N& J7 u) Y1 m
  857.       break;, t" U8 |& ~8 P1 Y) Q, K3 `3 r- j
  858.     case 5:# O6 `, c* d" l) Z& P) t2 Z
  859.       {
    2 s; s8 s4 \- t5 S; y
  860.         if(GetFileAttributes("Wsa.zip" )!=-1), u4 `6 [3 M& E2 _1 P# C$ m
  861.         {( G  }0 l  }2 R, X6 a  P
  862.           int opt_overwrite=1;
    5 X/ |/ ?' Z4 Q; p
  863.           int opt_do_extract_withoutpath=0;9 u. u9 d' R5 L2 x% R0 `
  864.           unzFile uf=NULL;
    & b+ Z. l8 }9 C3 [" g0 a

  865. ( a8 E# [- \: ]1 _7 t, R. ~& h, ?
  866.           uf=unzOpen("Wsa.zip");
    ) m* x7 }9 y+ ^
  867.           if(uf)
    ; W; b& w* J- E0 `3 `* G
  868.           {9 T( f" {! b- D! Y: H9 }  Z# [
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    & }% l3 A* a: M( |" N* @* h6 V  ^
  870.             unzClose(uf);2 g( J6 g" g0 j5 q) q' b1 `
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");1 ?' M& i, z; E# `/ t
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    8 h* u% @* j  j& o! h8 \
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");  @. y9 W/ m0 A0 G) ]+ ^0 V+ q: y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) I- J8 S8 P. F8 ~) `
  875.           }: I! l1 [: w1 V/ o# l  V  c
  876.           DeleteFile("Wsa.zip" );  p2 X% `- `* W# y# E9 ]
  877.         }
    6 a$ z1 J8 {+ m8 _; A" ^  G8 B
  878. 5 z1 m" t/ \- G0 Y
  879.         if(CheckLocalVersion())( r+ b7 |3 G3 E9 R" v* G( R
  880.         {
    8 s( c  Y, B1 u8 K9 `1 b9 i
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    9 d2 i" d$ X7 c0 h2 N
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");. ?* W( C# `+ ]# o
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ( C  D! }+ \8 o' A
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 s! v2 x" |1 O5 _+ F
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);' y6 i, s% u6 r2 N. y  i2 [9 Q* F( F
  886.           dwStartUpSteps=99;
    5 S" k8 L; q- p7 G5 s
  887.         }
    ' [5 [* P( H/ Q% Q  v8 y: B9 t
  888.         else
    8 L! l! j# u1 n6 d7 X0 u5 y
  889.         {
    1 m6 `6 Y: Z" J" V- }
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");8 ?% {; e  `) T% {7 R
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");; t( a* o7 @6 {% c/ _3 }- P9 r
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");0 k/ L' }  s3 E9 L; t# Z

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

! f# o# A6 M. I( ^5 J- @: q8 t0 V5 e

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-11 19:38

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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