找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
1 w; N3 ?' G9 O2 {" ?
  1. / RevApp.cpp : Defines the class behaviors for the application.
    - X5 I3 Z8 F1 t6 e: S1 |. K3 U
  2. //
    2 }; j6 s# B, ]% ^, Y  z
  3. * c* u) z) I$ E) H, T+ G: Y
  4. #include "stdafx.h"* N- H5 ?2 d" U% e9 {  b2 ^

  5. 1 u/ J# z" r; z1 s6 {
  6. //#define UNICODE
    7 Q2 x( V! v" d1 L& }# H
  7. //#include <gdiplus.h>3 m4 r' k! X7 W$ l1 ^4 b5 U4 b
  8. //using namespace Gdiplus;) J: X4 `& Y1 u* x( ^( I3 K

  9. 3 T2 X% z3 i) H
  10. #include "RevApp.h"
    : n) r2 ~4 P. v1 x5 N8 r$ E5 n& b
  11. #include "RevAppDlg.h"
    8 h% e( |* c2 ~9 C+ H. I

  12. + T- J# H* m% }: B! ~' t# |
  13. #pragma warning(disable:4786)6 C0 y! R% `  j6 j- C6 d
  14. #include <map>
    ! h! u' q7 n$ j5 W3 ?6 L; G
  15. #include <list>1 P/ J( P* T: r& {! H* ], [9 H! O
  16. #include <direct.h>( k$ r/ \& L( k
  17. : f( X5 H8 U# z) B2 H  n+ |
  18. #ifdef _DEBUG
    9 c. U/ V4 `! U; ~; @6 Y
  19. #define new DEBUG_NEW1 N! U* i$ O) I5 W: L$ X) x& ~% h% _
  20. #undef THIS_FILE2 u, P% v! [" u
  21. static char THIS_FILE[] = __FILE__;  E; F, r, @8 [1 `1 e, D
  22. #endif0 E+ d" D% I7 m' b; i
  23. #include "SkinResDef.h"6 _+ I( [6 z( O4 Z) Y
  24. #include "ChangeBG.h"& g- O! K) |) g0 n; Y9 W
  25. #include "AFXINET.H"
    + W' K+ x3 k( V2 x  J

  26. / k/ F/ x9 k' u8 t/ Q" j4 O
  27. #define TRADITIONAL_CHINESE 0
      D3 A) b. S7 T8 x9 }
  28. #define SIMPLIFY_CHINESE 1. x0 t. P4 u* p5 s( L
  29. #define ENGLISH 2
    5 S1 V1 G" I- K# Y4 b: e4 D$ r
  30. int m_iLanguage = ENGLISH;* Z' e! H3 L3 }* n' B- E# h. q5 Z
  31. /////////////////////////////////////////////////////////////////////////////2 ^- Z- W  `. |6 ~& y
  32. // CRevAppApp
    0 S) f/ e( ?; I# a/ l& X" @
  33. 3 @" ?3 r0 o1 K" Z3 G; W/ G+ D
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)' Y2 N& t0 L$ Q* B5 Q+ w
  35.         //{{AFX_MSG_MAP(CRevAppApp). l! J5 d4 G+ Z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here./ p3 {$ q. r  v( F
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!# t. m! K) L+ L% z0 M
  38.         //}}AFX_MSG6 T& s2 @& I; k2 }- V# [( T) |
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    - t- Z2 U- }' G$ X4 P
  40. END_MESSAGE_MAP()* i. `9 F( |7 |, t

  41. 1 ^, O" Z: n, _- P9 a4 ~
  42. /////////////////////////////////////////////////////////////////////////////; X6 Y5 U, q' B3 C
  43. // CRevAppApp construction) h" b  T: K* y! F, `
  44. / B! c  v* q0 F/ [
  45. CRevAppApp::CRevAppApp()7 z$ G" y* y% V$ j' }
  46. {( {, N6 G: |; Z
  47.         // TODO: add construction code here,+ A: r- z( @- B. H, e
  48.         // Place all significant initialization in InitInstance
    1 Q* H$ j1 I6 B* n- R; G% p7 q; v$ r
  49.   bDisplayIsBig5=FALSE;& P, W/ j5 }0 \/ P) [  p" d
  50.   bRestartUpdater=FALSE;1 p8 @( x2 _/ ]9 x9 Y2 Z+ ?
  51.   bFinishUpdated=FALSE;7 X' p2 f# w8 k4 I% u; ]; S* n# |
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;- o9 X! P0 L: S0 x
  53.   InitChangeDataBig52GBKS();/ K  d& @( c- Y6 A8 o% u
  54.   InitChangeDataGBKS2Big5();
    ; ~: T. ?$ h% p4 Q' N0 l  `
  55.         //
    6 L( C0 B9 J: C) z
  56.         bClickRunExe = FALSE;
    1 M1 w0 {8 T6 ~
  57.         //
    0 a" s: H9 E( z8 g- A! v7 D
  58. }6 G: v& B: t) t+ P6 H
  59. 5 p0 i# s) Y4 c: k- C* C7 I
  60. CRevAppApp::~CRevAppApp()
    5 h* d- b* s, ^# l$ d
  61. {
    ! H* s( I$ X) Y4 z8 g* t  w* m* Y
  62.         // TODO: add construction code here,6 P& {( U/ p9 A3 N2 R
  63.         // Place all significant initialization in InitInstance
    . w8 {: y9 A) l1 ]* p: X1 U
  64.   EndChangeData();
    8 @% ~2 W9 o- [7 D0 h9 x
  65. }
      [/ f1 C# R, s- ~
  66. 2 h% `* \" C( N- A+ Y
  67. /////////////////////////////////////////////////////////////////////////////
    8 L7 r. H& v0 |# l6 D& n- Q
  68. // The one and only CRevAppApp object
    8 t2 f7 C5 Z' I0 @2 k
  69. $ `6 I0 x% R# C9 t( Y6 n/ ?: G
  70. CRevAppApp theApp;
    4 f! X5 p  o. \1 X8 _
  71. 4 p' T7 c0 n- h+ R
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName): X* o- h# d6 V
  73. {# l7 k  W) J) p, u+ w
  74.   int iEOF=0;
    * S3 V, h2 ^9 x5 ]
  75.   char szTempName[MAX_PATH];
    7 o3 ?5 ^! }  p
  76.   *szFileName=0;
    5 U' n  n+ N0 J( g/ \
  77.   iEOF=fscanf(fp,"%s",szTempName);  J! R2 m8 `2 h# i0 s/ Z
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')4 c% ~) _" @* D- ~9 L
  79.   {: B& s" g0 x7 U0 h
  80.     strcpy(szFileName,&szTempName[1]);
    6 w3 Y. q3 v4 ~8 p1 }
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & p& h0 s. x* n8 U" d, H5 k& N# f2 l
  82.     {
    ' q* n& E5 }6 }% o. d: W
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ( K9 p6 R3 Q0 n
  84.       strcat(szFileName," ");3 R8 o; g$ D0 V
  85.       strcat(szFileName,szTempName);
    5 p8 y7 {. q2 I+ }& v! B
  86.     }" `* G9 A2 p, R- F1 F& U  d% J
  87.     if(strlen(szFileName)>=1)6 E7 L* q2 ?$ j5 |* u
  88.     {
    : X. h, E+ H% I  G) I' V5 p# ]
  89.       szFileName[strlen(szFileName)-1]=0;  _" m8 Y5 z* Q
  90.     }
    . @* h; ]5 L) o. k" k( _7 F
  91.   }! v8 G7 }" f& R
  92.   return szFileName;
    4 F8 i8 v8 ~& T
  93. }
    ( G2 K- ^6 v; h9 E

  94. , e1 \4 _9 o5 O
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( d. A# E: o4 j9 X
  96. {& I) |: x5 n( Y6 W
  97.   FILE *fp;
    # f) S" y; x7 X; z8 j8 i9 _% X' D4 X. k
  98.   char *key=NULL;! |/ c. ^8 T8 _% E/ |( V9 K' u
  99.   char version[MAX_PATH];: G: P7 a5 H- f4 h2 ]' o% Y
  100.   LPUPDATEFILE file,olds;4 z# Q3 E# M% V+ i
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    . _4 m: d4 D' L$ o3 A
  102. 1 k+ Q% Y; X  K) m9 b
  103.   UpdateList.clear();
    ! G4 k( s, v2 v( m; B
  104.   UpdateFile.clear();' x# m+ z! e( T) u/ ?1 A
  105.   if(GetFileAttributes(filename)==-1) return false;2 E9 q  p6 T: ^2 Q6 l# V
  106.   if(!(fp=fopen(filename,"r"))) return false;
    , x! T) K9 n4 S
  107.   fscanf(fp,"%s",version);
      W5 E- P) u6 a8 h$ e
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }& A( v* C1 \  [. a
  109.   while(fscanf(fp,"%s",version)!=EOF)
    6 W/ ~9 k5 Z2 L$ w* H0 Z- F' U0 U
  110.   {  Z4 U$ Q0 c  h& W. @& i
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " e& S1 {+ w" y% @- R5 _. `# ~
  112.     fscanf(fp,"%s",file->path);
    ) u! Q" P5 ^. H6 M
  113.     ReadFileNames(fp,file->file);
    9 g: Y! `1 R  W! y" Q" P8 v
  114.     strcpy(file->full,".");
    & @9 V& Z5 |1 f) t6 o
  115.     strcat(file->full,file->path);2 R( p: v: n' K! [) v# }& G
  116.     strcat(file->full,file->file);
    : v0 o. e- ^- R" F- Z! Z/ O/ o! s
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ; N; L) Z/ ^9 z0 d8 M' o5 |
  118.     {
    9 `# S3 ]2 R. H- G2 @& Y/ X
  119.       file->vers=(float)atof(version);
    9 n* h; K+ k8 q+ X) ^
  120.       UpdateList.push_back(file->full);
    - O( W! }7 V% J7 c5 v5 T
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    - B' |. C' O2 H$ h% j" t* D2 Q9 ~1 J, L6 H
  122.     }2 N2 h3 y, D# l/ K
  123.     else
    6 R& {/ e  [7 {
  124.     {# ]* m4 F& [* e% \6 h/ m
  125.       olds=(*p).second;, w  q. j2 {. ?' R- D
  126.       if(olds->vers<(float)atof(version))4 d  J$ ~; ]. a% p& g
  127.       {
    ; }) e0 [/ U4 X4 j4 |  _
  128.         olds->vers=(float)atof(version);. A( n( w% ~9 |9 Y* [
  129.       }
    9 i% o0 \) z  B3 H+ y
  130.       free(file);
    . I1 v5 ?; f- i
  131.     }9 F! ~( D8 J4 q2 S) J: Z% k! [
  132.   }
    1 ~% b# C, h  B0 B1 \
  133.   fclose(fp);1 K8 z: h4 \% q- y: f- k
  134.   return true;' K0 G" E% W' _5 q
  135. }* [. `( ?2 _% s4 M; h
  136. 2 Q. M' j) W  N. w+ L
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    # Y, T* q1 I8 [. N) Q7 g: m
  138. {
    : _$ `) v1 n6 z+ f
  139.   TCHAR  szFull[MAX_PATH];
    " q* j" |2 G* }1 T2 d; [
  140.   TCHAR *token,*inter;/ P. ~' H) d  S% d: ?/ [& U
  141.   *szPath=0;
    3 ?5 r9 w8 J7 i; c$ n( b0 y
  142.   strcpy(szFull,szFullPath);
    ' l7 K% t/ `8 [) H# L
  143.   token=strtok(szFull,"\\/");
    5 ^7 A. U0 Z2 j: X
  144.   inter=token;
    % q( b5 Z5 a( T
  145.   while(token=strtok(NULL,"\\/"))
    # j- W1 x4 \, U; [* X& d8 T
  146.   {
    7 F" b1 S6 e% E
  147.     strcat(szPath,inter);
    $ e; |& i( T9 ^3 _0 D
  148.     strcat(szPath,"\");6 y) v5 Q0 k' h2 P
  149.     inter=token;
    ) {  _( |, R3 [0 F' ^" W
  150.   }
    . F3 g) L) f+ \% i. J
  151.   return strlen(szPath);' ?3 t  u; D9 f
  152. }! G4 j8 j7 f, `: J5 O- g1 _0 k

  153. 8 E1 s2 U$ j& X& L5 N3 G
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    " y. i$ M# e7 n6 X
  155. {
    ! o# S) U4 U: k' @1 ~
  156.   DWORD attrib=GetFileAttributes(Target);/ q8 |* l, S4 l  R# i" Y
  157.   if(attrib!=-1)* G5 S$ r9 _. ?+ [" [: U
  158.   {
    ) |) ~7 N- B, Q/ z" p
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    9 }/ e$ c, j! q% W
  160.     {. G' Q& Z( S! }9 T( U- c5 m
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);+ Z: H: t' n& R" A! j5 b; K( F5 c
  162.       SetFileAttributes(Target,attrib);
    5 k7 v. M& @9 z; n
  163.     }; ?9 K. \+ f% h3 R' i) Z
  164.   }
    % I7 O: p' M+ o/ m; a& G9 Q$ A. T' |
  165.   CopyFile(Source,Target,Erase);0 J1 q% z; V: K) O
  166. }! {. S0 L% a' Z. R4 J/ \

  167. & h/ p! W  x- S2 l2 X9 E
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & r$ {4 N; |: s5 d
  169. {# h6 t4 T) h* f" u& I
  170.      FILE *fp;6 |, ]. w& E. E# A7 x+ n2 _, a
  171.      char  szBuffer[8192];
    ! y' Z  D8 H9 d/ ]$ [& ?9 C
  172.   va_list  argptr;
    ( t7 k9 I, [5 u2 t
  173. / K  O1 |5 Z$ A! a: N
  174.         va_start(argptr,message);4 h1 O$ L8 ?' V( x' h$ [, E
  175.         vsprintf(szBuffer,message,argptr);# i% Y& b2 w7 w* j: ?! |/ a( H" n
  176.         va_end(argptr);0 K, z; k9 `- J0 r) T. Z
  177.   fp=fopen(FileName,"a");) _1 ?9 e4 A. i/ N: a
  178.   if(fp)- a: G3 l$ ^' k2 K
  179.   {
    5 e2 ]; q1 ~9 q* S  t2 S
  180.     fprintf(fp,szBuffer);
    & }4 C% q4 h" }: g& ~
  181.     fclose(fp);
    4 x6 t0 i0 W3 U6 Q+ I5 Y
  182.           _flushall();
    ( x+ p8 ?4 p) W: {5 p" v/ g) k
  183.   }$ X1 s8 ?! G% u8 L4 z
  184. }
    9 x6 P% U& T2 s4 P" u
  185. * {8 q. _& @+ n* Q" g. t7 p) G' u
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    " ^' M/ g' h2 R
  187. {6 R" D9 t( M# q" B2 I% t5 o
  188.      FILE *fp;
    & o5 q1 t  K7 c8 H3 o# I: h
  189.     DWORD  attrib;) A, f  c5 W' C  {6 `/ e2 z2 e3 ~
  190.   attrib=GetFileAttributes(FileName);
    , I: L' L1 |# ?
  191.   if(attrib!=-1)8 \9 s/ `9 R1 Q) f
  192.   {
    $ Z7 C. \) I( {, N* W( E
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);( J% r0 S- q7 H% x) D
  194.     if(!SetFileAttributes(FileName,attrib))
    9 l" l3 K& ~3 ]" q! j; \' n. P+ r
  195.     {( Y* Q5 F2 E# l& F8 c3 T6 ]
  196.       return FALSE;1 h, M3 K4 V- k9 O; p
  197.     }
    2 M. A+ s/ m" C4 p8 W- w
  198.   }; n8 [6 r, W+ z" i* ^
  199.   fp=fopen(FileName,"wb");
    ) p5 V$ _/ S2 u  ~/ z$ [2 ~, q! T
  200.   if(fp)
    ( `: c  Y" {5 A9 w! l0 g: k+ |
  201.   {+ n9 I; p* }4 H
  202.     fclose(fp);0 m! m8 }8 l2 U/ r) L+ Z' s
  203.   }
      X- c: a8 k% l4 l5 A. q# T. o
  204.   return TRUE;
    7 c9 H# S( H0 w3 w2 o1 p5 C- s
  205. }
    ) h* H2 X8 {) [9 d2 F; S4 {3 n3 J

  206. ( L7 O5 s* M( w0 U  K5 X
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    7 Y. v0 }7 a% _7 [$ {. A
  208. {
    - p* q) P# C  S6 K( ^$ |
  209.   char filename[MAX_PATH];$ y' j8 I, H. G% l
  210.   LPUPDATEFILE file,olds;
    7 J& d( }: B5 F# ^; l
  211.   std::map<int,CString>::iterator i;
    . {$ [# V( |/ c+ i
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; j- A. c; `. j( j1 c
  213.   std::list<CString>::iterator l;
    & z" g, ~% f! v& c4 T! J) ?5 i

  214. 4 C) d9 c1 f! {9 h4 q
  215.   if(bFirstUpdate)6 c) C% \  J3 V3 S4 q) }9 Q
  216.   {
    1 b4 {6 d4 A" U- h& W
  217.     dwCurrFile=0;
    ' Z9 h4 x" r8 }6 h5 @' [
  218.     bFirstUpdate=FALSE;
    5 v- h# m, R: {3 Y: G6 J
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; s; v8 d+ f1 P# T2 \: H# g4 q& J
  220.     {. W! Z0 N7 r% {5 v9 f$ N
  221.       dwTotalFiles=UpdateLocal.size();8 L2 F4 b% v: g. R- l" k
  222.       dwDownLoaded=0;6 K; j" @. C  |6 r# L
  223.       bSilentStep=FALSE;
    9 s2 e& i6 ]/ [7 P
  224.       bCompressed=TRUE;
    & {* E: f  M9 _
  225.       strExtLocal.Empty();0 Q2 A, m' J2 g, Z1 u, |& t/ r
  226.       strFullName=(*i).second;8 R% j! b/ i( P
  227.       dwProgramState=AP_CONNECT;
    & W  }2 S% I: P, a( o% ~2 t
  228.       return TRUE;1 R$ O; ]; S- s: ~2 ^- {9 P
  229.     }4 C2 h. c- f, O! k- a6 q
  230.   }; e" S9 P6 Q5 l; H& u! x3 n1 k
  231.   else if(bRestartUpdater==FALSE). ?* ^0 f- h# ^0 }4 r$ A. u. Z
  232.   {
    ! c+ s* o2 e: c/ @4 h. x3 f# S
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    5 ^+ A; e1 a9 i& l( c
  234.     {9 `' {, [( }2 p5 B, _  p+ ^( _2 ?
  235.       file=(*p).second;4 {" y9 e( Q( o1 K1 f
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    5 K7 P; q. U- w% Q0 N/ }
  237.       {
    1 ?0 U1 k* @8 U  f5 m6 [
  238.         olds=(*p).second;
    ) b0 D: A) Q/ Q" |0 t; F2 u
  239.         olds->vers=file->vers;
    9 Z! ^) t: w/ M. A5 r, L
  240.       }
    " I* u) }& B: h1 T6 r, e7 h0 m4 i
  241.       else! N- s* g: J" l+ a) v
  242.       {
    $ I' P1 ?& l; j0 j  T  j4 Y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 A0 u* }. z; h6 Y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    5 D3 F" D. J/ o5 e/ ^& V5 ^
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ' h- W2 m  \8 {
  246.       }0 A' M! B! z! c; H- @
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    4 i  A: J. s, B, h
  248.       sprintf(filename,"(%s)",file->file);
    / S- Z9 _- L5 P. m8 I' A8 `
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);2 Z" k0 b& m# g" G: G, u# A
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }" k; O, K4 F$ U+ h/ W
  251.     }' O$ O* g8 h8 |) H" V
  252.     dwCurrFile++;7 `6 p( U/ A. X1 N/ M
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    6 @+ [1 p5 e! l- d, N1 M  `
  254.     {' [' s! M* Q: A5 Z7 v- b
  255.       bSilentStep=FALSE;7 ?' v' H) O! X. B1 n3 V% Z
  256.       bCompressed=TRUE;
    + a% y$ Q9 _# N
  257.       strExtLocal.Empty();
    ( I! M5 Y; r- h: b1 L) l
  258.       strFullName=(*i).second;
    7 u6 ^2 h) I: |
  259.       dwProgramState=AP_CONNECT;
    0 f6 c9 ]! T3 Q5 N$ H
  260.       return TRUE;+ @: u; R# a1 s! b( L9 N. W
  261.     }& @; [9 n/ k' \) N
  262.     if(!bRestartUpdater)
    ( b/ S5 R- ?( e
  263.     {
    5 ~8 r: ~) I/ K1 @2 b9 ~8 Y
  264.       int iCurrSize,iFileSize;
    5 r# c0 L% j- U) f4 m8 v8 ?5 E
  265.       iCurrSize=0;  ]2 x1 S. C5 Q
  266.       iFileSize=UpdateList2.size();
    ) t  f, G$ a! R. g" W5 a4 Q7 h: n
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");  Q& U  s) n* Z9 w' m
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    8 A3 a9 R' R, _  g: l
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
      }: ?( _5 e6 `& J9 Q/ b
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" g/ c% {8 ]/ W6 _0 g
  271.       Fclearf(".\\update.dat");
    ; R; q' w! V; T7 v* n
  272.       Fprintf(".\\update.dat","Bloodyf\n");% `' ]8 @# \+ f2 B$ g, |. M
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)$ M5 r* G) [2 ^8 g! A' @
  274.       {: P( N4 v! X- i0 Q$ |/ U
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    % o" ^* t  F! c' F2 D/ {
  276.         {
    1 h7 S, k. ^9 _% T* D# v+ j9 i7 }
  277.           file=(*p).second;. G4 `6 h2 T% c' }  o- ^
  278.           sprintf(filename,"(%s)",file->file);. ^* Z+ u. B0 V8 w$ h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 @7 v/ ~7 k. @7 v1 Y% J' K
  280.           iCurrSize++;
    ; |* h) H2 W- u" n3 x: ^
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));- B3 E. h; {! }; W0 b; a# E  L3 i
  282.         }9 ?: T: K8 F( B  v7 l- @. W
  283.       }
    - W9 I- f6 a6 r0 t
  284.       unlink(".\\update.txt");
    * v( K1 r( q& e0 d+ s) }4 o
  285.       unlink(".\\update.tmp");( a+ ?) S7 R3 J' o: V
  286.       Fclearf(".\\checkversion.dat");
    " q9 J- a9 G, q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 q4 A+ b7 T! j* l8 Y# p1 K
  288.       if(UpdateLocal.size())6 |1 J. r5 y) t6 l8 k! s7 q  k
  289.       {
    9 O. n# F  u; N5 Y4 C8 ]
  290.         UpdateLocal.clear();# c6 f( i6 ^. `2 a
  291.       }9 f: `7 \# ?. i9 [3 J+ N* y$ l) |
  292.       if(UpdateFile3.size()). Y. F' E" J$ v* ^& d
  293.       {" ~8 [5 O0 V4 R$ t' ^- A
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ w, }' Z9 q5 Y
  295.         {
    5 X: m- [' [- \) F2 o  @
  296.           file=(*p).second;% n$ ?8 I3 o, ^& F% \- }
  297.           free(file);5 b1 _! H$ h3 N6 Z. S
  298.         }& p# Y& T9 {1 H: C# P5 m* G
  299.         UpdateFile3.clear();: r. t* Q9 i5 d" [8 Y& t
  300.         UpdateList3.clear();% o8 T& x- Y# x: o( \
  301.       }) ^  }1 e0 @7 _  T. S6 J2 n8 G3 D
  302.       if(UpdateFile2.size())
    ! o' ?9 I' a# T% r! l. J1 e
  303.       {+ p! [& A2 U$ T0 ^1 R9 `! t
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++): N& g) U$ v9 _- w
  305.         {& f/ p( C$ V  ]2 @# y2 _
  306.           file=(*p).second;
    6 Z2 R0 j1 Y9 z4 L2 x1 _/ }
  307.           free(file);' J% o3 q5 ~) h5 Q" Q+ ^7 u: C; ~
  308.         }
    / p! _2 n8 s- r# U3 E8 P& `
  309.         UpdateFile2.clear();2 S0 {/ |& D$ l0 ^) w% d! ?
  310.         UpdateList2.clear();
    5 F3 |" `" _. ^$ l
  311.       }
    2 I. |) q# R& n7 t
  312.       if(UpdateFile1.size())
    : ^5 B5 c) _, l& s* e2 l
  313.       {
    ' {) s. @. R6 k$ Z! ~, M
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    5 X4 |' n# n) R
  315.         {( t* ~- B0 m6 H& J" n( W& u
  316.           file=(*p).second;
    ( m  k6 d. f7 i
  317.           free(file);4 j6 s2 ^7 T$ b$ D* S4 f
  318.         }4 `& b; o. X2 a( j% C6 b1 C
  319.         UpdateFile1.clear();
    9 s$ {! C/ S# ^
  320.         UpdateList1.clear();
    5 \/ q: J. h, [5 a: \. M9 F/ T
  321.       }& j4 y( c  f5 k
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    5 k+ P2 n6 U& @+ v+ |5 A
  323.     }
    : T3 N' G$ ^& U
  324.   }
    ' P6 `- C+ }& F
  325.   return FALSE;
    : L, G# r5 _& z+ o
  326. }! g/ }+ S! \$ w! I3 ]& c; a" S
  327. ) P; K0 f5 z; J: `
  328. void CRevAppApp::ClearAll(void)
    4 r/ P: I3 n4 B; b
  329. {/ k# s, K# l& D# e
  330.   LPUPDATEFILE file;
    ' i3 V6 E5 s, q* k/ t
  331.   std::map<CString,LPUPDATEFILE>::iterator p;5 w( Z. `1 u% H7 R

  332. ! h* G& ?6 ^8 c8 s
  333.   if(UpdateLocal.size())
    , Q" p3 L) \3 z& N
  334.   {
    . c4 y& x6 ~: M1 ]  B! G. q' s, I
  335.     UpdateLocal.clear();# s9 A$ L6 l( v: x0 b+ q
  336.   }
    $ Z2 [6 m. j3 U9 l- z
  337.   if(UpdateFile3.size())" q: F  G6 g; k. {! l: u2 s5 b- |
  338.   {5 f4 c& I, r( F  v: W
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)3 H( |8 h) i4 w- b
  340.     {& ~4 a7 w; ?. J" z+ d
  341.       file=(*p).second;
    # R8 h; e: Z) ^1 D: a) |2 `$ B
  342.       free(file);
    % i& U$ x' a$ b. i( O
  343.     }6 g) e8 ]' V0 p% p- ^" E0 J$ |, K
  344.     UpdateFile3.clear();
    2 L2 h! ?2 G8 z
  345.     UpdateList3.clear();) [1 c0 E& D, ^& t$ N1 w/ E% F
  346.   }
    4 \: j1 x2 w( d: ]! i; z
  347.   if(UpdateFile2.size())7 _/ g6 {) ?8 c  l9 _
  348.   {! F1 d- Q- \/ e3 A% g' f
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 T! v+ Y  S7 B, {
  350.     {0 Y" S" M0 s$ Z% a/ ?
  351.       file=(*p).second;
    0 n6 |4 k" B1 x1 N0 C' I7 j
  352.       free(file);6 W% ]8 M! y/ f; `' E
  353.     }
    5 j9 n* u' q0 |( s7 V7 ^
  354.     UpdateFile2.clear();# w, A$ a! y3 j$ K
  355.     UpdateList2.clear();3 l# n# p$ i, i7 B
  356.   }' J9 R0 |' z: V/ T3 m: w# n
  357.   if(UpdateFile1.size())
    2 }/ j- `0 q8 {$ h+ H; f6 [9 g
  358.   {
    ; {& ]* H! W2 ~- D( V0 e
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ b- `% N  t3 S& d& p9 C
  360.     {7 m2 \/ e( n+ t+ l
  361.       file=(*p).second;/ \) y! T; T% P0 _0 O4 `
  362.       free(file);
    & x2 Q% o2 `- [7 ]. E3 ]
  363.     }
    9 W5 \/ A. s( n  C# e6 C( R
  364.     UpdateFile1.clear();
    6 ~9 Y, y" ]4 `
  365.     UpdateList1.clear();
    # r. a' c, N/ a# r# R# c8 F
  366.   }
    . _# b  K/ u) ~$ Y- J1 x0 b
  367. }  
    + m5 x9 S  G8 s* d/ O5 ^  C
  368.   
    6 G4 y* h; }! i  B0 w( |
  369. BOOL CRevAppApp::CheckLocalVersion(void)0 D2 `% [/ O1 v, ?9 H
  370. {
    9 `8 j$ T4 l9 l/ ^+ p- C
  371.   int c;
    6 m+ Z& C. M+ w) G6 `+ E
  372.   LPUPDATEFILE file1,file2;3 [+ x4 Q3 Q9 ^* W7 L
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;7 \( V  e* m3 [0 |, ~# H1 T: ^
  374.   std::list<CString>::iterator l;# c. |$ Z% P3 K6 h5 D* W/ K

  375. ) X9 V  B7 K5 j
  376.   UpdateLocal.clear();8 s4 L) R3 \3 `+ q8 Z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    5 ^0 U/ _4 S; ?% G4 ~
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);$ W4 }  P9 w8 l2 V
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    2 W8 X+ Y; f. m
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);( L' P) K  ^1 A$ }% {3 I
  381.   if(UpdateFile3.size())
    : p' \5 }/ B4 u0 A% ^
  382.   {
    - G; R+ y; R9 F3 m, \7 L6 }
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)% I$ x+ X- w! D& K: A- h5 L9 e
  384.     {8 B* U1 j$ I! P4 k! ~
  385.       file2=(LPUPDATEFILE)(*i).second;: u- ?* G2 q( l6 p# e: w
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 H( a$ b" e# L/ Z- |
  387.       {
    2 Q  L) l6 @9 M1 h  O* X) b
  388.         file1=(LPUPDATEFILE)(*p).second;( x& w+ O  c, U3 l! c
  389.         file1->vers=file2->vers;
    ; s; X7 X1 b' ~/ y+ O2 N
  390.       }6 h* h6 J5 i3 I& w+ H% r% t
  391.       else/ [0 |- d" }0 z  g
  392.       {
    8 \7 B9 ?/ u$ @( O. L
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 P" _8 e/ v3 `( K3 v. w( z) ~4 u
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));) b6 J2 P) X- C4 A( k- c
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));; p0 Y8 v+ O6 e
  396.       }& m3 i4 ~8 H4 R8 h
  397.     }
    9 ]8 e: X1 @' S( D
  398.   }  ^+ X2 R6 p8 v6 {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)* D2 A% Z9 ~, ?; ~+ s* k  h* K
  400.   {: }$ {$ w: y3 v* h# g3 a6 V
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    * x- f) I( U( s- a" r
  402.     {- u+ A5 |9 Z5 A
  403.       file2=(LPUPDATEFILE)(*i).second;8 P6 x. ~/ K2 x0 E" h. @
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      Y  M7 D3 j: a& A: {
  405.       {
    # C9 D  d# A7 M
  406.         file1=(LPUPDATEFILE)(*p).second;
    0 L/ H$ ^0 _8 @: |% V% Z
  407.         if(file1->vers!=file2->vers)
    4 ^0 }& F/ ]# u& q+ G
  408.         {
    / @+ D$ t2 Q! y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( T+ q9 W/ z& U7 _- l" Y  }+ F* i
  410.           c++;4 ]  [- B0 \( w/ D) c; e
  411.         }
    ! @8 Q! b* d  B/ y' T# c; ^+ B
  412.       }
    4 J3 k/ |1 T) q  |0 h+ S: s0 I
  413.       else& E  N- l8 q* W0 A
  414.       {$ W: l2 T+ h  \/ A
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# p2 Y4 u- o0 f6 W. y$ o; d
  416.         c++;
    $ N' H( P& \! d0 z' X# g2 e
  417.       }
    + N6 F, B  L9 d6 k
  418.     }
    9 ~: S9 C5 y& j* Y$ l- X; s$ J
  419.   }& W) Y$ l* F5 s  g! m- z
  420.   unlink(".\\DownLoad\\update.txt");3 f; b8 a6 v' P) _. c2 Y+ z/ H
  421.   if(UpdateLocal.size()) return TRUE;
    9 y1 ?) O& l$ [( D. j" p
  422.   else                   return FALSE;+ m7 E  d  {  J. _7 x
  423. }8 z7 H0 P7 `9 J8 _1 J' m

  424. . _" g9 Z1 \" g8 |+ }$ r/ q2 k* m$ `
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"% S+ H: Y3 j) G8 K5 u
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    3 k8 C5 n- u% C4 k7 ]
  427. ( f* ?* h3 L0 r) _, f
  428. . h9 n4 o. X! ?8 X0 _2 o

  429. & C0 z# V6 n6 P' H+ @. x- S
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile): a6 U" R  }8 |, \9 @
  431. {
    ; O. `; a3 T+ ]4 ?, g
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;: Y3 T3 y, g0 Z0 J
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! f# M; w4 A+ k! ?6 o$ a. `
  434.   {
    & H. \. J" O. a, `2 ^5 h
  435.     char szLanguage[50];$ v! L, W3 c3 ]) y# o
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; K' G) d7 N8 {, f+ k
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ L' S5 R7 s" T. m/ S5 t/ h5 u
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    : R" {. T$ T+ N/ P
  439.     else                                   m_iLanguage=ENGLISH;8 E0 ?2 a7 w( W! R
  440.     char szRegister[100];
      Y5 l$ m8 ^( m
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & H. y* G( @+ ^) V! q* _' ~
  442.     strRegsName=szRegister;* X( N. X6 \' w
  443.     char szPatchURL[100];8 c5 a9 D, V$ P+ W" X( H! [( E
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( a; s) `5 e' [5 h" y6 K0 Y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! s: [, r: q$ G* A0 l1 ~+ b
  446.   }
    9 I: w0 R$ W+ F7 h
  447.   else
    ' a' ?  Y' m+ ^% `  F) o; X
  448.   {
    1 p& T+ B- J8 S
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ ~# w7 R5 i( e# |0 e
  450.     strRegsName=DEFAULT_REG_URL;
    ' N' r& b) o1 s9 ^- g
  451.   }
    ( Y) l" e7 h+ Q& P$ \, S( ?$ f
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    7 V9 a' E; B- N  Y7 ~: ?/ |
  453.   {
    # O. r% m! @4 L6 o# Y9 o3 x
  454.     char szIP[50];
    ' f( k, _7 F+ n1 W1 t
  455.     char szDIR[300];
    ' k7 d' [# [! K" ^  V9 a& v0 A" O
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))( A" ?9 h0 g3 P3 P8 D
  457.     {
    1 L% F- k! r$ r. I: [
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    1 t% R9 i, v9 M  n& _
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    + ~5 C5 K0 \4 s9 T! q
  460.       strHostName=szIP;' R/ K1 {8 w8 P
  461.       strHostPath.Format("/%s",szDIR);# p7 {* c/ b" f& ^
  462.     }
    ) \0 ?" _& n* [) g+ f) B6 r
  463.     else7 p6 i1 w4 a' K1 b9 p
  464.     {+ p% g# k2 N! A# E/ Q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! `+ V# j+ O% _: A
  466.       {3 \9 B7 i$ F1 C, ]! H$ ~
  467.         char szLanguage[50];
    5 `# k: m# H% J7 R" M1 e
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 c# l+ k' `0 k8 B8 n
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; y. E4 v. [! S# y/ A
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ( j; Z7 r) p, ]3 l/ A
  471.         else                                   m_iLanguage=ENGLISH;
    ) |: x' |! w4 t: }1 q- B' c' \
  472.         char szRegister[100];
    ; e! [8 I3 X) P1 ?& q' T
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 z" D% w( y8 H  Q
  474.         strRegsName=szRegister;4 R' @  c5 S% \( `7 l
  475.         char szPatchURL[100];4 X# l. b' M$ V1 u
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. o- m! p; W# T# d1 Y; Y% f
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + R4 o. \/ Z2 y, R/ L9 }
  478.       }
    8 s9 P+ m% ~. |# |) i
  479.       else
    7 `0 L; }$ g: L# m( ?! T. I
  480.       {" \8 ^6 P2 Z: x% e6 ~
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ D) p$ L6 u. K# [. n
  482.         strRegsName=DEFAULT_REG_URL;
    4 o9 `3 J' {! L6 C+ F  ^6 K9 _( M; S
  483.       }
    ( X1 H; P2 j1 k( h5 I
  484.     }
    + J0 G! G- J( f, s6 X- r0 Y: v
  485.   }
    ; J% T% |/ |, ?5 L# T
  486.   return true;$ t" K2 G# Y" T+ E$ @
  487. }# F7 s& l: l! r( M$ r
  488. . _% [5 T0 B% ^
  489. #include ".\ZLib\unzip.h"
    ' t) ?. Y, r# C" i6 H
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);6 {/ |" M% i5 G, I/ [: `- W
  491. /////////////////////////////////////////////////////////////////////////////0 c! W, B& K& d2 {/ B
  492. // CRevAppApp initialization. z9 Y' f, a( ~* |- Y
  493. . B% Q  S& R. }4 F. B
  494. BOOL CRevAppApp::InitInstance()
    % m2 k' E9 H" P6 z
  495. {: W3 R$ C3 ?9 w5 ]! ?& C4 @$ d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];1 f3 k5 m9 X7 e6 M- n
  497. 3 |! n+ G8 s4 A
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);+ [1 m/ f& P7 c5 ?4 w. }
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)): q3 \* }' ^: E- S$ m0 V6 p6 v
  500.   {
    ) c+ r; i  ^% s) a2 N
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");* a, U# Y1 a3 @" z7 S/ }- y8 C
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 Q; U9 f, F+ Z2 k2 _  H
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    $ f2 W( I1 j, u! P1 l
  504.     {) }  S( P4 ?, {  H8 i3 n
  505.       strcpy(szPath,szPathTarget);4 h% I( d0 v; A* [- m
  506.       SetCurrentDirectory(szPath);
    + W( `, _; T7 m! G9 @4 \
  507.     }
    / d- K. z) @. x9 O/ H
  508.   }  x! ?3 N6 @# ]) |
  509. #ifdef _DEBUG; {' _& J  h, j/ a& P
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)). A- X* g1 `0 O" a+ p! ^! N
  511. #else* [5 M* O+ ]" A9 a. g% A% @
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 y, J. {. M0 I2 x+ _) [& A
  513. #endif
    1 g" D+ E/ C9 G9 F
  514.   {
    % @4 l0 u) S3 R/ }. f
  515.     char tempFileName[MAX_PATH];
    * U; V, z3 g2 @
  516.     strcpy(tempFileName,szPathSource);
    . I- ]* ]& O+ E3 W1 |
  517.     tempFileName[strlen(szPathSource)-12]=0;: M- U4 `- N) q/ a
  518.     strcat(tempFileName,"\\$CSUpdate.exe");& C' g% X* n+ b( {0 ]8 t. [
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 [$ n+ @8 m9 ^3 ]
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);, y& f8 N; d$ {
  521.     return TRUE;& b' R4 x3 k- N0 I% S0 W  U
  522.   }
    5 B  W4 B% g$ f9 ]
  523.   // Nuke 0118: Delete run.exe
    . p' Q4 i" a' _. E! e4 w4 v& N
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ( o& G; B  w5 G  V' `1 j  W' O! b& k
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");: u" d$ x7 R. n- R( ~2 L
  526.   if(!ReadCfgFile("Config.ini")): l2 s2 A7 Z; M& l% T2 P; h
  527.   {3 E, K! w- {% j2 L/ R
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    6 g5 B; d) P: u1 E4 [8 \9 j* G
  529.     return TRUE;
    ; J0 p9 f; S" {
  530.   }% t; ^) K: U! ?5 A
  531.   HANDLE mutex;
    9 ^8 d! L& g7 w" z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 O# v  u* a; P5 {# v  R! U
  533.   {
    : q) Y- K; n1 f3 d% o
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)) T9 I$ W. H1 S% P. l/ t
  535.     {) ?& }0 ^) G! E2 P
  536.       CloseHandle(mutex);8 a: p3 x' M  r- \
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " \+ y/ }/ S6 Q4 Y2 P# i1 A* Y/ w/ j
  538.       return TRUE;6 k  V; M( L, Q7 s
  539.     }7 \3 M. h& V/ K5 e
  540.   }  0 {# J9 [% y" ^7 \) N' l' V
  541.   CloseHandle(mutex);" z% e; H; C. f6 Z3 S/ g" q

  542. , a4 C7 o) p5 ?2 B) a9 Y/ X
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    * I. ^7 y- M2 t# B1 {4 l6 |

  544. : a- c; k' j) b% x5 P2 W% u) S" @8 X
  545.         AfxEnableControlContainer();
    . m1 k, r+ M3 I& j8 c+ T0 J: F
  546. * A6 t9 }( L( c( ~  @: Z1 J' W% }
  547.   bCanUpdate=FALSE;
    9 F+ g' ^3 F$ ^3 U& W$ A
  548.   dwStartUpSteps=1;+ [9 L7 M" |. ?3 q( U% N
  549.   dwProgramState=AP_NOTHING;
    $ S" U" K) H" y' h4 e) g
  550. * @' I9 g& w* a. y9 T& D9 q
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    9 R4 G1 k: s; f
  552. 5 j5 A! n0 k5 H
  553.         // Standard initialization  J* j! S1 M* W. K5 t& a
  554.         // If you are not using these features and wish to reduce the size; t* K- Q# \$ ?) _4 }- w1 ?2 ]
  555.         //  of your final executable, you should remove from the following* _" ]  _9 e% ]" N3 o9 ]/ i+ o
  556.         //  the specific initialization routines you do not need., {* S7 P9 T% W3 k: B/ o( F1 e

  557. ! o" R* F  r2 E6 W! J: m3 D0 t& x
  558. #ifdef _AFXDLL; \$ B, D0 h  ~1 l
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL3 R1 T% a" g4 K' l1 Y
  560. #else  c0 C# B" z8 E3 k% d% i
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically; r" u% a# j0 H! Z
  562. #endif
    % `1 i3 z6 p& N$ z! w
  563. % n4 S4 i: \% m! e: @
  564.   dlg=new CRevAppDlg;! \  o6 W: m" P7 h" N
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' M' w  `' c' E  }/ I1 t
  566.   dlg->ShowWindow(SW_SHOWNORMAL);# d" a5 h1 j& k" w$ T
  567.   m_pMainWnd=dlg;
    + b/ }3 M$ N; p% T+ r
  568. + a; t3 F( v/ t# Q  K
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);! F: _6 j$ M- R) Q  _7 V

  570. ( M$ c$ N  @1 Z  G
  571. //  GdiplusStartupInput gdiplusStartupInput;
    + |! h& o# \4 P
  572. //  ULONG_PTR gdiplusToken;
    ! P  \6 t* Y. y" }8 c* e; v
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    # Y+ u- B7 }9 J1 v  L1 h
  574. 4 l+ e2 p1 Q6 X; a) w
  575. //        CRevAppDlg dlg;
    0 @3 V8 h3 D7 [& W: r  }9 P
  576. //        int nResponse = dlg.DoModal();5 K7 h9 _2 \$ F/ P+ t: a* W
  577. //        if (nResponse == IDOK)1 ~3 O+ x/ I* x1 @5 X
  578. //        {
    5 ?: Q1 }$ [* U9 M) A: H
  579. //                // TODO: Place code here to handle when the dialog is
    ) ^" A4 Z3 V; W8 P; N
  580. //                //  dismissed with OK# j2 j/ q) }: x! R6 j/ Y& k
  581. //        }
    1 [' _8 k1 h4 g( p4 w, D
  582. //        else if (nResponse == IDCANCEL)* O  {0 N% R" Z  `
  583. //        {) W6 V4 y" e* q) }" d4 ^
  584. //                // TODO: Place code here to handle when the dialog is2 a' o) J0 X/ f# i/ c! i
  585. //                //  dismissed with Cancel( r8 E! \* m) \' Y1 E
  586. //        }
    # t" D4 j' \. e7 x; w6 H
  587. : [  ~8 p% k# o7 h
  588.         // Since the dialog has been closed, return FALSE so that we exit the
      f" \& R6 {1 W
  589.         //  application, rather than start the application's message pump.
    ! {5 @8 n; L8 |; ]7 Y* A5 H
  590.         return TRUE;, Q- ?# a# U& l1 ?/ {3 B; q
  591. }- ?' ^1 S% k- l6 V2 b! h' m

  592. * b! t2 X: \  L1 R+ B9 M
  593. char *CRevAppApp::strtok3(char *pSource,char *token)* W; ]- S; V8 T# R$ s5 Q( F
  594. {& w  {3 M  a- A" t9 w
  595.   int i;+ X4 p& y3 @! H5 }
  596.   char *szRet;# Z! M+ f* N  y9 t
  597. ) |/ p# z' A, e; s9 e
  598.   if(pSource) { itoken=0; sztoken=pSource; }; \6 @+ y0 r" ~% r
  599.   if(sztoken)
    ( u1 ]5 L2 R5 t  [; D) r
  600.   {
    / |& U. v1 e* @) s: {
  601.     szRet=&sztoken[itoken];
    4 H2 o1 _- B  L. _
  602.     while(sztoken[itoken])
    : U; T* i- I" ]9 h9 ?
  603.     {0 t( M' D* [" _$ W
  604.       for(i=0;i<(int)strlen(token);i++)5 G5 I, x; x0 W( M$ E6 X- Z
  605.       {
    & o  {2 D7 K3 a0 U; H% x& f
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])! g# H6 V1 V6 O, L9 A! Z# A- q# C  Y
  607.         {
    ; w( L1 |. z3 C9 @5 }# j; G6 R" O
  608.           sztoken[itoken++]=0;
    5 {# A8 F! D, D7 A- k0 @3 ]
  609.           sztoken[itoken++]=0;# s$ C/ R: ]; e, A2 S
  610.           return szRet;2 X- O0 Q5 w0 _" [+ S$ x) H
  611.         }
    ! J* o7 t8 X1 J- k. x% a* M
  612.       }9 g% m9 Z) g3 e! A" C
  613.       itoken++;  s; ^* H) f  V5 {, X
  614.     }. E) I) z8 }4 b, z# P
  615.   }
    5 B7 y1 o; X; N$ v5 f
  616.   return NULL;3 k' U0 R7 C3 e1 x" Q6 }" Z3 s
  617. }
    * |& F! p" P) U5 d' b2 j9 d) y
  618. . n2 m$ U! @  N5 q( B
  619. void ProcessProc(long Total,long Current)' J, ?# B6 Y; x/ b4 C
  620. {
    " m: K3 c% u: T, F) U# r
  621.         MSG msg;6 E( Z+ z6 h  e" F3 K
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);7 z5 G2 _6 {% V+ x
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ' J3 U4 a/ x* ^
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ' G$ X, Y3 Y% q
  625.         {
    7 M5 s8 Y& O0 w# O& M2 s# o
  626.                 if(!GetMessage(&msg,NULL,0,0))# b" {7 s9 y$ h/ [4 V9 c  ~
  627.                 {" K, P: U7 n8 J! |) x' _8 S. }3 E
  628.                         return;; c% B  z9 I& x; b# V" ~' j+ k
  629.                 }
    $ W$ D1 m8 x; b/ f2 w/ `
  630.                 TranslateMessage(&msg);0 S; }$ G' H8 \) M) R
  631.                 DispatchMessage(&msg);; W, C* b0 _% L7 k" A
  632.         }        ' j7 {+ Y4 ]& k& [
  633. }5 f+ q9 n) |" m7 g, c5 n! P1 o

  634. . s6 ~! t* M/ E6 A- z7 e
  635. BOOL bFirstChar=TRUE;: V4 ~( [( a' V% Y1 J+ W7 e$ M

  636. / }+ |8 [7 U- Q; x: w
  637. BOOL CRevAppApp::OnIdle(LONG lCount)" G7 I% E% H0 |+ X" h% [
  638. {0 M% w( H: h6 d2 E5 J4 `
  639.         // TODO: Add your specialized code here and/or call the base class
    4 F1 m  g' p9 ^* y1 ?
  640.   switch(dwProgramState)
    $ {, ^8 K, r. Y3 p$ v8 S
  641.   {
    # g; l& i1 h" A9 b" D
  642.   case AP_NOTHING:' K0 F* y3 w8 z* Q
  643.     switch(dwStartUpSteps)7 G  }) R* d- A- j9 g6 n" \
  644.     {
    / ~9 n: G) I; A8 v( n% U1 T( {
  645.     case 1:
    ; m  x, e; u+ g1 {& G- X
  646.       {! v: a; X3 O: p! U0 r5 P3 m/ P
  647.         int i;
    - B( e: r4 D0 w/ m1 H
  648.         CDC *pCDC=dlg->GetDC();/ A7 g. k4 P# Q8 A  A+ |
  649.         HDC hdcwnd=pCDC->m_hDC;
    ; t) j2 j4 A3 b. s6 G& l' w2 y
  650. //        Graphics graphics(hdcwnd);
    8 q1 i* g8 s3 R* {6 d- t
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");4 K0 ?  \8 M+ |, e( ~
  652. //        INT iWidth=bitmap.GetWidth();
    / F/ a9 u. c& h- d
  653. //        INT iHeight=bitmap.GetHeight();# \# e- l' x9 D. [% ^
  654. //        Color color,colorTemp;
    ; T+ |& [/ }5 r$ v  q" n3 o
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% c2 P3 e3 D4 G2 y* J
  656. //        {/ a8 I7 @; Y+ s9 Q1 d
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    6 X7 j1 Q3 r6 D. `+ P6 F4 v
  658. //          {2 d9 ^% j, E% l  c1 ~( r
  659. //            bitmap.GetPixel(iColumn,iRow,&color);/ t1 U' M& \4 a
  660. //            colorTemp.SetValue(color.MakeARGB(, j1 C* i: V4 x; p. g5 o; m
  661. //              (BYTE)(255*iColumn/iWidth),4 ~& G3 M% n: h! j- P5 F( i3 P
  662. //              color.GetRed(),
    / k0 ]9 `* B/ m# ]/ V5 d
  663. //              color.GetGreen(),
    # D5 U' V9 \. H
  664. //              color.GetBlue()));5 F3 r. ~) g' Q/ n0 j9 ~
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    - R9 u2 l' u* E7 C  j) W5 }
  666. //          }& G* l' y) l5 B$ y6 v& X
  667. //        }
    4 w. E. ~0 j2 n6 U6 S* [  P( A* |  m
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # j8 q* A$ U9 c/ n$ g8 k' b3 L5 _
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");% v9 L4 y$ \8 V. H/ z& d
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    0 [* U! z) b" @2 X! B& r
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 |+ R' I: w1 s8 a
  672.         for(i=0;i<240;i+=8)* Y% J4 B$ }: J
  673.         {8 D: [' W1 d8 r( Q( ^2 _7 I
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 n, z. u  b' u( H6 g. G7 W+ e
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  |1 N& W9 q; i+ F& y9 T
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 S) [. Z) Y# R% m+ L  G
  677.           Sleep(33);5 E: W# l  h1 W" s0 ]4 T/ G3 s9 t
  678.         }
    $ P4 v, C. u! G# a$ V. ~
  679.         Sleep(1000);/ t/ T' v/ W% Q, S; _
  680.         for(i=240;i>0;i-=8)* \4 \9 F+ u- |+ \- b3 K
  681.         {
    2 Z& x6 F4 h7 j( y6 B  e
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " t8 b2 L/ [& `& B: e& l& i
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 `' z5 V! h- B( A
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' {  l5 j8 v7 V7 z9 Z/ ^$ m
  685.           Sleep(33);
    0 A7 r. `) R* O
  686.         }
    9 \0 L% d% F! \
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    $ ^- |2 U% y$ y1 R  Q" E
  688.         dlg->ReleaseDC(pCDC);
    & h& s' A3 a2 P+ r& z
  689.         DeleteDC(hdctar);, N2 P! w/ K5 @* s  \6 w/ B4 B
  690.         DeleteDC(hdcsrc);
    % V, t$ v: I1 y4 J
  691.         DeleteDC(hdcorg);
    2 q# Y  p0 X! [. M" p
  692.       }; ^0 c' a5 p- C5 k/ J* G2 T
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);# A& {( q" n- U4 \6 l
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");; |+ }* D+ E9 l% d0 k; g2 q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");- W) l* m/ _7 P$ h% X& k
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");5 |8 e; T! J6 p  k9 z# t" v+ ^, |% |/ v
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  C4 F, @$ a. g; e7 v3 y
  698.       if(!Dn.Connected())8 Q- P% G9 x1 a/ ~7 y! u* j4 h
  699.       {
      c# f) X0 d. f) D- j- H, y; e. x
  700.         dwTotalFiles=1;
    " T, A( G- Y+ M# P) v
  701.         dwDownLoaded=0;8 _  J' W3 L0 B, z; `: A9 d
  702.         bSilentStep=TRUE;
    8 ~: W- n1 f6 C9 h6 p
  703.         bCompressed=FALSE;
    & @5 h0 G: `$ a; ]
  704.         strExtLocal.Empty();; g( ]  H  [0 r; e- o0 ~
  705.         strFullName="readme.txt";
    : }/ c: g5 P% c/ D8 }
  706.         dwProgramState=AP_CONNECT;. R7 I5 ~8 x* i* z- }2 E
  707.       }: K$ i. V' I2 `1 k7 X4 B
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    2 F5 o# ~" N/ Y' Z8 l
  709.       dwStartUpSteps=2;5 L2 U. f- f1 _( ^  |. s
  710.       break;
    5 |( V0 O* C: C
  711.     case 2:
    # r1 V7 L( v- S% A8 X
  712.       {
    4 G! p8 x3 b+ w- ^
  713.         int iEOF;
    - p/ ^2 V8 z9 T9 _, u* x2 R
  714.         FILE *fp;' w% V6 c- W* H- C1 j6 `* m
  715.         char szString[512];
    ) t; ]2 q. m7 a% o
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    " W* f3 y( C, [8 B' H
  717.         if(fp)2 ?& N! \. V; R+ k8 b( q/ f/ D
  718.         {" w0 B7 G6 R% D% `
  719.           do" C/ `- X' w0 N. g  N' `
  720.           {
    ) I1 Q8 i; L4 N6 j* ?8 y, T: p- V
  721.             iEOF=fscanf(fp,"%s",szString);$ ]/ s3 j6 C7 D
  722.             if(strlen(szString))/ s# Y# u3 |; ^$ V/ [; `. Y
  723.             {  Z$ ~. G7 \" z
  724.               if(bFirstChar)
    # t6 X; [  b9 n1 E3 H% X2 y7 i$ s
  725.               {
    / H+ c; v  M& Y1 t5 D* E4 ^
  726.                 bFirstChar=FALSE;9 P" h6 V5 P+ c* i6 i2 X
  727.                 bConnectIsBig5=FALSE;
    3 q: W9 E7 S% S+ c9 x  H. c5 p
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    & e  j9 Q' V3 y, ~2 [) I6 V! K
  729.               }% Y  u' ]0 |$ g6 ^/ V8 d
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));0 g* C) `% i& E- z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));8 M+ g* p: y  b, L
  732.               dlg->m_ListText.AddString(szString);4 \: h$ D; t$ i0 n$ O; r
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % T9 ?6 o- w% e+ ~$ O
  734.               *szString=0;( J' S6 z8 c: a) ^4 N1 u% A
  735.             }- }9 N- i0 Y$ o2 p9 J
  736.           } while(iEOF!=EOF);
    # P. a0 x# M. h( H
  737.           fclose(fp);
    & ]7 N- ~" a9 [  Y/ Y5 ^; H3 C  |! |
  738.           unlink(".\\DownLoad\\readme.txt");* W. u: W/ E" w- f8 d
  739.           dwStartUpSteps=3;+ z$ _. `% r, T
  740.         }- H  m: a+ U- q
  741.       }
    - r2 ?+ o9 l/ t3 E* F) A
  742.       break;: ]  ?1 {' D' |1 G! E% u
  743.     case 3:
    4 v1 N3 v9 v1 U1 [* r+ n. u6 S" g
  744.       if(!Dn.Connected())# ?  h$ y4 a' o+ b# ?
  745.       {
    % V) F  l; ~( Y: [3 O- ?  a4 L
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    . a4 D2 f6 S8 a! C# j2 Q  A* k6 i) g
  747.         dwTotalFiles=1;
      n1 s) F7 @% Y$ D. w1 c8 }/ n
  748.         dwDownLoaded=0;# E! g; V6 t: }) t& G' K
  749.         bSilentStep=TRUE;. D5 n+ G) n6 T# g
  750.         bCompressed=FALSE;: X* c+ f7 k" m" w
  751.         strExtLocal.Empty();% L' M+ |5 l" ^3 ]. Q. u- _6 c2 H
  752.         strFullName="checkversion.txt";/ h7 H% [& q1 `% X3 e, i
  753.         dwProgramState=AP_CONNECT;
    0 n( P# h5 @0 u0 X: e" Y$ Y2 f& d
  754.       }% u' [4 r1 g$ I' T
  755.       dwStartUpSteps=4;
    / {% [. e$ c% @, m8 S  j
  756.       break;
    4 m; s' y! p( c
  757.     case 4:$ `: h, S* Z+ d
  758.       {
    # W: [0 y  `, U' M! P
  759.         FILE *fp;- E* a" |% i1 |# [! V0 a# E
  760.         char szString1[128];- u% H5 A5 o& B$ n
  761.         char szString2[128];7 m# ], s- t3 q& G8 F# d5 l
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");) e0 [9 j8 V6 M, J
  763.         if(fp)
    2 A6 \$ b+ ~8 k3 @- q
  764.         {/ G8 `8 G! R  ^' n
  765.           fscanf(fp,"%s",szString1);
    - r# A5 X3 T$ S) x$ v, m
  766.           fclose(fp);( e) W4 b5 A/ m' N6 P) {8 ~
  767.           fCheckVersion=atof(szString1);! c  Z" O- P4 Y3 f7 w
  768.           fp=fopen(".\\checkversion.dat","r");$ @3 u" {! e" b7 E2 }3 d- q" {
  769.           if(fp)
    ' j& u/ D  v) L* K4 ?: I; d
  770.           {
    4 K2 {1 x# ^. O, P4 c8 U4 l' ~
  771.             fscanf(fp,"%s",szString2);
    8 p  Z; w- D5 r: D' M1 k; \
  772.             fclose(fp);' b. d2 E4 f: j$ O. l8 y8 d
  773.             if(atof(szString1)!=atof(szString2))' [' e( t4 P2 P4 i- E1 i
  774.             {
    $ i0 @0 v* I" [$ S/ x' }
  775.               if(!Dn.Connected())
    " c. O0 n0 |$ v: ?& c2 |) }) {
  776.               {
    7 P2 S- I; W! e' m! ^
  777.                 bFirstUpdate=TRUE;
    3 K# E/ a" w$ O! x8 M
  778.                 dwTotalFiles=1;, }( v8 ?1 C4 e' ]) A0 J. t; {
  779.                 dwDownLoaded=0;3 L: V- [' o. U8 W7 L, _3 Y
  780.                 bSilentStep=FALSE;
    # l0 |  D5 B- O$ Z& F3 r6 `
  781.                 bCompressed=TRUE;1 W( s2 w0 n- L. b4 J7 A
  782.                 strExtLocal=".\\DownLoad\";4 w6 H# O+ T5 E( H2 C
  783.                 strFullName="update.txt";) `# R# Z' F6 @" v
  784.                 dwProgramState=AP_CONNECT;
    ! {: {( |, ^: h0 v1 k
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% O/ U' j% l4 s! V# n  [; n5 V
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 A* p2 P$ b6 ~# g" Z
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");( F. v& p+ a0 ~- ?' y

  788. $ t$ d4 d# Y- o, m8 U3 m
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 m; c+ E. `9 T% ^' {0 @9 K
  790.                 unlink(".\\DownLoad\\checkversion.txt");' k. d9 D# e  s# e% n& f# z5 b
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' u4 ?) C5 P. x' P* I
  792.                 {
    * i  m1 x; j) H$ b/ T
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");9 G2 ]6 T# p7 s  E* U# t
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");2 P) h% e4 i& F- i- D( X
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");+ [4 N* T2 h* k: N8 f
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( l! P, h) E3 h  h5 ]) R7 M

  797.   Y; {0 B0 \! D$ `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");* O$ R2 ]! j) x4 `: I1 P
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& S8 ^2 |8 ?3 D5 m3 |, E
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 o2 }5 H$ B8 s: o* d3 Q3 {
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' H* Z8 i4 g- Q# J; w
  802.                 }8 H" t' `5 Z# T& ]
  803.                 dwStartUpSteps=5;9 A7 R' ]0 `/ R
  804.               }4 e* Z$ H$ E5 @* n
  805.             }
    6 ^* J5 n9 o4 f7 U
  806.             else
    $ I- R9 d2 {2 v: t+ r
  807.             {) f# d- e  P) p5 I1 n3 v
  808.               unlink(".\\DownLoad\\checkversion.txt");
    % c: D$ a3 h: O5 \* o* n# Y5 ^4 Z
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  S* x& P% ?& f' S  g) z* R
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - ]- u+ E' @; _# B* X
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    , K- T* y- T- N
  812. / `5 P9 B/ ^, }. X
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 C( Y' k2 Q4 N5 t1 I0 Z
  814.               dwStartUpSteps=99;( N8 `) i/ E( k: F: o! Q5 b7 r
  815.               bFinishUpdated=TRUE;
    0 r5 d; E+ @* j$ l$ v# b
  816.               bCanUpdate=TRUE;
    , R' Z- c1 c/ N" `$ ~
  817.             }' c5 n. X% Z) J; b$ `
  818.           }
    $ r' l( P" p2 n& n
  819.           else2 f4 }7 O4 \& M5 `
  820.           {
    - B# S1 f2 ~3 x7 n& \
  821.             if(!Dn.Connected())
    1 X) m8 c$ f! D" X. L$ k$ {
  822.             {- U, D- U* m0 x* W
  823.               bFirstUpdate=TRUE;* c. h9 r; e  r: n
  824.               dwTotalFiles=1;' z6 m6 v/ g1 I. c  U9 O4 N$ R( K
  825.               dwDownLoaded=0;1 a0 }& |" j6 @7 v; h
  826.               bSilentStep=FALSE;/ Q# M% _- r2 `' Q" Q6 C. [
  827.               bCompressed=TRUE;* V/ A& N! K" h+ C/ i8 {6 P
  828.               strExtLocal=".\\DownLoad\";
    # O6 E! b7 P3 m4 Z, e8 J+ t
  829.               strFullName="update.txt";
    9 ?4 G' s( A, y$ g( }8 G0 I
  830.               dwProgramState=AP_CONNECT;
    , J) a7 U# p5 Q1 b( u. d# O  ?
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      W& A5 v) B% l
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 a4 F+ `+ i8 e
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");6 Z- D' B+ \; F6 w) Q' V: S
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  s# S; s0 P; X' T
  835.               unlink(".\\DownLoad\\checkversion.txt");7 t1 w9 k! ?! M: J4 z
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)" I) \; Y8 W' ?* \( C
  837.               {
    $ t1 U' V( f( N2 o& @2 F/ I
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");3 ]6 W, k, \. X& W
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    / a( j  A/ j, I: t* [
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ; N4 e6 M0 j. }, L- f9 P+ b
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & f! _9 L. V5 M
  842.                
    ) W% z5 y- t' z5 o! ^9 X( l
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");& F  v, n  ]! c$ F
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) A6 N, y% p; O3 i* W! r: F/ g' O
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");* v+ f; I5 K* y- Y* c- s
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 n5 F5 K  u9 W6 l& ^8 w" |
  847.               }+ g, a8 ]* y; ]% ^7 w" b7 `' `
  848.               dwStartUpSteps=5;, Y- e( L$ f* c0 M8 b! L1 f- k* x
  849.             }
    * r# v8 `+ A  J& O. @
  850.           }
    7 [: {$ A* q5 n" H
  851.         }
    5 K4 ?  f8 q2 M; E& `- b
  852.         else1 i& j0 L6 K8 f% {' F
  853.         {
    ; }9 ^9 t9 R( D3 ~
  854.           dwStartUpSteps=3;# _2 M6 p! m; \
  855.         }7 ]7 i1 {  ?$ n3 F5 O
  856.       }( j# X1 _' ^3 h
  857.       break;
    & f4 p' i/ F0 G% {& N2 W
  858.     case 5:
    3 |6 N/ R% m7 o8 U" \
  859.       {
    9 q/ D9 S4 Y2 z  f& m# R, M% h+ s+ A
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)6 a# ?, H2 Y( q, @. t. n0 ^
  861.         {
    3 v: r0 Z# D! Q
  862.           int opt_overwrite=1;
    ' v, b, @; g+ b7 X) Q3 f
  863.           int opt_do_extract_withoutpath=0;
    $ Y. V* L, J( x7 |, P1 [
  864.           unzFile uf=NULL;
    7 J; b3 }! c6 p4 g: Q$ g! ^$ i5 u
  865. % S3 R/ f! N" Z/ B/ ^' f9 D( |% ]
  866.           uf=unzOpen("Wsa.zip");8 [% l& g2 z4 x3 a
  867.           if(uf)3 Y1 C; ~% Y! i: r' w9 ~2 s1 b
  868.           {  ^( ~+ O$ {  l& Y
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    , t* ~5 {, |8 W+ h7 Z/ L, `
  870.             unzClose(uf);/ L9 y8 c/ y& V" r
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");' b' M& e  J, S* X( g: c
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");1 F. Y, g; c; C7 q) B# K
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");  E, r: K7 h6 q, C7 _, U. ?0 B8 h- I
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 f2 E9 U, X/ U# o2 t; Q
  875.           }
    $ r7 o4 t& R  R2 l+ k, |. M
  876.           DeleteFile("Wsa.zip" );
    $ n% l; l7 Q& ]1 Z5 L
  877.         }
    & U' s' t  r& A) B9 _* F
  878. 6 O# T2 e" F  {7 _# {  y/ h
  879.         if(CheckLocalVersion())6 V- l' X; f. `) m
  880.         {
    1 v& k' Q, k/ u* R) d
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");5 H+ X: D) N& D" n
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    2 f  W# y5 s$ r0 ~: o
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");! B! _! r4 @/ u
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ a6 ~) L' X' O- g$ K; ~+ h7 I
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);/ v1 b" ~# q  N8 a. o7 G- p5 Y) C4 S
  886.           dwStartUpSteps=99;. p  |+ J0 [* d
  887.         }& T- ?8 v" O' P; s, K% P
  888.         else8 {4 U) o( {2 i  S* `! G
  889.         {
    " J+ P' q! k! r3 c6 `" \+ {
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      [2 ^  [% P$ F/ S4 _; d
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 s) ]8 i: v0 z
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 Z- i3 X5 `2 T, B; p7 X

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

# m& \% ^: j& u: o, Z2 T& I3 A
8 p( k' d% }6 Y

評分

參與人數 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, 2025-12-25 15:15

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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