CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
( Q& @: q4 P4 w
  1. / RevApp.cpp : Defines the class behaviors for the application.
    # _" I3 P% l$ M' Z: d" V
  2. //
    ; ]6 u  {; ~3 c: ]  C- L

  3. 7 m% ^  d" m4 v6 e* |4 C
  4. #include "stdafx.h"
    , x6 [- Y# x- l. b# Y* B
  5.   Q/ S( m; [- x
  6. //#define UNICODE
    ; d6 z/ S9 r" F4 ?
  7. //#include <gdiplus.h>
    0 p; K( H$ M5 O) s  |& N
  8. //using namespace Gdiplus;
    1 ^$ H0 ^4 \  d
  9. * D7 i5 k4 e) A! I. t4 p1 |/ J
  10. #include "RevApp.h"1 x5 b% [9 R: @0 |
  11. #include "RevAppDlg.h"
    - {  b0 y) _) j% O) s

  12. 9 G* K0 W' ?2 L7 A: N5 l
  13. #pragma warning(disable:4786)4 [- B7 {7 F: |/ `6 K  X
  14. #include <map>
    % ]6 j; g$ p8 M2 v; j9 n# f
  15. #include <list>2 e) h" i9 H" W8 ]) g! Y
  16. #include <direct.h>1 a, s0 N% i! i

  17. 7 X7 L% S+ K4 \# l- i
  18. #ifdef _DEBUG0 o! P+ s6 U% Z' {$ {
  19. #define new DEBUG_NEW
    " X' c. S- j: x4 G  y
  20. #undef THIS_FILE
    . A7 h7 G$ v( B0 Q+ M1 u5 o) V
  21. static char THIS_FILE[] = __FILE__;
    , H9 W0 a. e( r  p' k
  22. #endif
    3 H, N$ c7 d6 ]% y. ?  @
  23. #include "SkinResDef.h"3 q0 r4 V$ @: r# O
  24. #include "ChangeBG.h", |3 d% v2 U1 O) i, V
  25. #include "AFXINET.H"* h8 @  t% Y( {0 v! Q5 ?

  26. 2 G- L5 c$ E5 W
  27. #define TRADITIONAL_CHINESE 08 |+ \0 m& l2 s
  28. #define SIMPLIFY_CHINESE 1
    2 U5 j4 F; P/ H2 W4 Z
  29. #define ENGLISH 21 j  Z! Y1 r6 M& A* |4 a0 p% Q
  30. int m_iLanguage = ENGLISH;. E9 L  Z  V2 |* Z, h, S4 N
  31. /////////////////////////////////////////////////////////////////////////////) a# b' j& w' z
  32. // CRevAppApp
    $ ^) H) l, A. {; `; \" u
  33. . |8 S$ m# X$ E5 Q. E
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)2 N5 N! M# T% z
  35.         //{{AFX_MSG_MAP(CRevAppApp)$ U6 Q4 e2 Z' H+ Z; P3 M$ O/ f* p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    % m5 N( v! p6 J0 X! h# b
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    . k7 l: V+ {) H, f; e
  38.         //}}AFX_MSG
    2 L8 Q) }2 N/ A: ^  ~* a# ^
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)" x9 Z, T3 g6 r
  40. END_MESSAGE_MAP(). i' n0 n9 X: I3 k1 S3 u2 f

  41. 4 g% c! T, n4 ?- W3 p
  42. /////////////////////////////////////////////////////////////////////////////: W6 O/ A$ @: K) _
  43. // CRevAppApp construction% t+ n7 B2 I; n; X

  44. ! t9 K, ~( o5 |
  45. CRevAppApp::CRevAppApp()
    4 r: ~4 P" Z- k- D+ u' i' S
  46. {
    + M8 |2 _) H1 v0 D
  47.         // TODO: add construction code here,
    5 n) B- C( E4 S' t2 H0 a, z- e
  48.         // Place all significant initialization in InitInstance
    7 w2 L( H& q) _: m9 X' y
  49.   bDisplayIsBig5=FALSE;
    ' j7 F% L3 \- s' G( u* Z  Y
  50.   bRestartUpdater=FALSE;# V$ v7 e2 |+ D$ P: o
  51.   bFinishUpdated=FALSE;9 W* G7 C8 v+ y% n) n
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    8 h; _0 z- ?$ c
  53.   InitChangeDataBig52GBKS();
    0 T) f0 n. c9 ?+ Q9 A9 G6 {) P
  54.   InitChangeDataGBKS2Big5();# f# M) R, o  k
  55.         //$ f, S: k( c4 j
  56.         bClickRunExe = FALSE;0 l4 E8 v, M0 e2 B8 Q6 h
  57.         //4 u6 I. J- |$ d
  58. }' C, G5 k- H$ c8 H$ W
  59. ; W8 C7 n% o/ g, A# d- {! y* {% F" e
  60. CRevAppApp::~CRevAppApp()" `1 J% F( U5 A$ \+ }( S
  61. {% {; T# \8 t9 Q( a
  62.         // TODO: add construction code here,2 ]/ \% S, h3 t
  63.         // Place all significant initialization in InitInstance9 }% `$ e) f+ y! b
  64.   EndChangeData();
    3 |- g! T+ V0 v9 g% l/ V$ P
  65. }
    3 d/ g/ h0 u  a. f* |+ a( `

  66. * ?( A# a2 p: e2 s3 N6 E
  67. /////////////////////////////////////////////////////////////////////////////
    . c6 Z2 @+ N7 d' m7 T
  68. // The one and only CRevAppApp object
    - m$ e7 e/ Q. b4 G7 h

  69. % s# m6 n2 y2 b& `2 E. G
  70. CRevAppApp theApp;" @$ T4 B. C, m! T& {
  71. 9 a* C" C- Q0 r5 q! `/ L9 v
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)6 r  {  V' _% B4 J9 L  I! ]  h
  73. {
    2 T  ^5 j" I% y& R
  74.   int iEOF=0;
    2 M. f0 S6 J; t4 f! `, X$ y4 Q
  75.   char szTempName[MAX_PATH];
    8 I1 t. E: U, o+ G$ e# I9 f
  76.   *szFileName=0;& G- o: y$ Z; r9 N
  77.   iEOF=fscanf(fp,"%s",szTempName);9 ^; ?) k: R0 a8 P; S# u
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    . G  o  c8 Q3 n8 o* F3 u$ X# u
  79.   {6 X( V2 n9 }0 s* l& p6 u
  80.     strcpy(szFileName,&szTempName[1]);
    % ?1 T& v' y+ N6 I
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
      l9 n; k/ l3 h% I/ X8 e0 M
  82.     {
    % f. g$ O. _: t
  83.       iEOF=fscanf(fp,"%s",szTempName);
    * l( V4 \2 x, j7 _7 m( h; C
  84.       strcat(szFileName," ");6 D3 F8 P3 u( G
  85.       strcat(szFileName,szTempName);
    ; m1 }9 f) X+ S6 ]4 l9 d+ n
  86.     }
    . ?0 U" \+ H! ~( E) [
  87.     if(strlen(szFileName)>=1)
    7 x* e, e% C1 U8 U5 ]
  88.     {
    ' r! [0 w2 D7 [% [& y9 h  e# I
  89.       szFileName[strlen(szFileName)-1]=0;% F1 `6 E5 j4 V4 ^
  90.     }
    , _* _: |. Z2 J# V! W
  91.   }% J- U1 e, `6 k4 Q1 u) V' l  M
  92.   return szFileName;
    * c4 a) K& b- T% C- {7 |
  93. }" P1 W( d, V. O# z" l4 s( I
  94. 6 v6 }* B& Z+ S
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile). S- {6 B( g8 k/ ]  L& [/ ^, c
  96. {
    9 B* T0 V9 u& @- r5 z5 _
  97.   FILE *fp;2 Q  }" m! U2 W5 F, c
  98.   char *key=NULL;
    ( m: _9 o/ ]! @* n
  99.   char version[MAX_PATH];1 t6 N3 D$ j4 `- c
  100.   LPUPDATEFILE file,olds;  ]" a$ m, v% `& u6 R4 U: v1 A
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / C0 b5 v, l3 H! f8 e

  102. / n, f$ R( j! X* S2 @! I; m- J
  103.   UpdateList.clear();
    8 A" g9 ~1 b( n& \0 d% `
  104.   UpdateFile.clear();
    7 ]1 h3 P/ T- o/ F0 G" B4 A
  105.   if(GetFileAttributes(filename)==-1) return false;
    ( {$ {1 p, j" V. Y6 d! S5 R
  106.   if(!(fp=fopen(filename,"r"))) return false;  l. V% r* l. I
  107.   fscanf(fp,"%s",version);3 t3 m% b# b" W+ U8 {! C6 [
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    5 P; m1 J7 ^: C! k" q3 h9 O5 F/ @$ V
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ! L- |. v, Q% y
  110.   {* t3 K" F" m' ]6 X5 }& M) }" }1 `
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" J* S: L  s& e& v
  112.     fscanf(fp,"%s",file->path);8 f% Y( ]5 P& \8 U. A
  113.     ReadFileNames(fp,file->file);
    ; c% c3 F; I# {/ _7 x& w+ T
  114.     strcpy(file->full,".");+ P2 f% m! ~- N1 n* F, K: t/ ?8 |
  115.     strcat(file->full,file->path);9 X: G. F& ~. G
  116.     strcat(file->full,file->file);
    : ~( |# T# z1 f# ^) p* g8 v
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    1 W, D4 b- A% p6 e. }: ]- e( C
  118.     {
    / v7 p3 d% M; c& a& g- ]3 [- b
  119.       file->vers=(float)atof(version);
    6 ~) ^1 M: W. C& h) b
  120.       UpdateList.push_back(file->full);( j: `" V- T1 `
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ) o  j2 b! r, ?9 L. d3 {
  122.     }
    8 R1 c+ ]; M" O  U2 V
  123.     else
    3 D$ g: \* B4 p, X# I2 b( T
  124.     {3 d0 |; c( V4 h0 S& p8 ~5 d, \: P
  125.       olds=(*p).second;
    * I  q- e6 m1 ?4 F" Y8 }. g) q  u
  126.       if(olds->vers<(float)atof(version))+ S* R( E1 n, d% J5 n& p
  127.       {
    4 L2 t3 |$ P4 f- [
  128.         olds->vers=(float)atof(version);+ w: X3 o" Q, c) b, j
  129.       }
    , W5 W! S4 A8 r& A; k" ~3 g# |2 y& ?
  130.       free(file);) d$ d+ g0 J2 Z, n0 {/ `
  131.     }- ~+ s8 n" V% ?2 U0 t% M; S8 k0 ]
  132.   }( Y# c1 M* w% G0 Y& h
  133.   fclose(fp);& |3 _3 i, b8 q# i& w0 ?/ c
  134.   return true;3 \% x% G$ R, w+ P* G, ^
  135. }. J& T2 |1 q! R

  136. 1 |% ^  E3 @& t. g+ d  q
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    4 D5 ]( r4 u5 s
  138. {9 U! M( E' X7 N% o  m7 h/ W
  139.   TCHAR  szFull[MAX_PATH];- ?3 k$ y/ r3 ]' _# }) k6 z
  140.   TCHAR *token,*inter;; ~8 r0 U4 Z2 s% N- B
  141.   *szPath=0;* y1 y3 a5 R0 J8 b
  142.   strcpy(szFull,szFullPath);9 v/ }3 J7 l; |3 {
  143.   token=strtok(szFull,"\\/");
    8 E( I" K5 s1 U
  144.   inter=token;; ]$ L; p* s$ r
  145.   while(token=strtok(NULL,"\\/")): N9 i6 L$ f$ U) U& M
  146.   {- i- A4 n: H! M( n# `; D/ q+ [
  147.     strcat(szPath,inter);$ H! u, u9 e  F/ x3 ~
  148.     strcat(szPath,"\");
    3 \' [* q  u5 M) t' @
  149.     inter=token;
    1 T# ?9 k+ g) Q; a$ }& K
  150.   }
    " `; |4 u/ V5 u1 t2 N* X
  151.   return strlen(szPath);
    9 a) I5 e+ t, u% t6 \# I# a) |  h
  152. }
    9 d! w- E6 t( K! q, `
  153. ; T- [% D* Z9 ^6 k/ X0 j0 r. T
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    6 l* \( Z& M) q% f5 ^9 L# S* {, D
  155. {
    6 K1 {" F% o+ A' U9 b
  156.   DWORD attrib=GetFileAttributes(Target);
    9 K6 x: U4 ~3 Z, R5 F2 Z) `
  157.   if(attrib!=-1), a" r! H& m- P7 {
  158.   {
    4 x2 O$ a" ^; D9 R$ p1 m4 \
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    3 r/ b. ?& j$ m7 T' E2 S' r7 l% V
  160.     {9 m7 H% D0 F( s2 g$ p8 O1 p0 Y) L& X
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
      N% M4 ~+ l5 b" Y
  162.       SetFileAttributes(Target,attrib);
    $ C2 R8 p+ T1 V  g' R- v% W% u
  163.     }
    # V$ t( |; p( ~
  164.   }) a) k1 [: [0 f
  165.   CopyFile(Source,Target,Erase);! b3 [( z9 h- j4 e- ]
  166. }
      g9 B: V7 q! ?1 r( R3 N
  167. 9 }- X9 g5 v+ G9 ^: G
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    6 T" p: b* k% N% c0 R9 `
  169. {
    # W5 z: R$ T# ^% C- W7 D
  170.      FILE *fp;' X( K0 ?- Q, K+ C# H4 A/ ~
  171.      char  szBuffer[8192];$ n7 s$ G- c+ _: E
  172.   va_list  argptr;! i4 L/ s+ o5 Z: j; E3 x

  173. # `! H& D- Y2 p% N! j
  174.         va_start(argptr,message);5 \  ]  X. D$ A* t6 \# u. Y& H
  175.         vsprintf(szBuffer,message,argptr);
    3 h- z8 m  [2 p
  176.         va_end(argptr);, v/ K  M- o4 D. o( Z/ f
  177.   fp=fopen(FileName,"a");
    : Q7 V  f$ c+ Q  a
  178.   if(fp)" i0 {0 B4 h( @1 ^
  179.   {
    ) r; r2 }5 Z0 `5 D8 q
  180.     fprintf(fp,szBuffer);) [- v2 U6 S6 h& P( n# u2 v/ K. v
  181.     fclose(fp);7 R  a) z' D: q# Q! R8 h1 P6 q3 z
  182.           _flushall();
    ( A7 @& B, Y- O: F# v
  183.   }& p+ g8 `: P$ g- B8 [9 G
  184. }0 L; y" V9 D7 A0 R

  185. # d+ h5 X7 a4 C* z
  186. BOOL CRevAppApp::Fclearf(char *FileName)  t- L$ O* z9 K! |
  187. {
    9 B' S. D& r3 T: j# T
  188.      FILE *fp;
    " `8 ?5 M9 Z1 r4 {
  189.     DWORD  attrib;
    0 F$ b6 b! W  k; y* K- r
  190.   attrib=GetFileAttributes(FileName);9 L! Z, J: N3 |% Y9 ?
  191.   if(attrib!=-1)2 B5 K, Y: B6 j; f/ {3 M) K' V
  192.   {5 v  l( h) D/ T; X! @9 s
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      w' Z9 t4 T7 Z9 ?2 u
  194.     if(!SetFileAttributes(FileName,attrib))
    ) b& h8 }3 N+ S+ O) _9 R8 c
  195.     {* }, e: |3 L8 Y- m* A
  196.       return FALSE;( L* y- M6 `* |5 ~: v
  197.     }
    6 U$ b3 `4 W2 Q& w$ h
  198.   }8 C( F! R" x/ l% H" ]& S
  199.   fp=fopen(FileName,"wb");9 V' o+ j  J# g6 n
  200.   if(fp)2 I% s) \$ x9 H% _+ S
  201.   {1 e  `: ]+ H! e6 U
  202.     fclose(fp);- o3 ~6 n+ Y5 K' _3 T
  203.   }
    ! }' R0 r+ {4 a8 H1 s4 |
  204.   return TRUE;7 t9 s7 Z& C+ X  S5 Q& ]% x
  205. }
    ) o- f- }2 b7 ]" E% C

  206. $ r) _! G$ B" d* o/ X4 d
  207. BOOL CRevAppApp::UpdateLocalVersion(void)- ~& Y* W0 ?/ I
  208. {
    * z$ ^- R: c& z' X5 ]- v: d
  209.   char filename[MAX_PATH];
    . t. _/ L0 Q  [; ?+ @" |! l
  210.   LPUPDATEFILE file,olds;$ M) `0 a5 u" z. e3 S
  211.   std::map<int,CString>::iterator i;
    * y( l; N3 v* k: R4 M
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 L# ?; f* @, P- t- ~
  213.   std::list<CString>::iterator l;
    - j* p/ j" ]( a
  214. & i* N. y* d- a
  215.   if(bFirstUpdate)) g; b6 y5 \1 m: R& u3 T
  216.   {
    , {3 I+ r: f! a/ {
  217.     dwCurrFile=0;2 s! C+ J; M  A6 a
  218.     bFirstUpdate=FALSE;4 J0 V7 y3 f( U& z" S# r, a
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 v& {: e# W5 S% r" C
  220.     {
    0 c$ D2 M3 {% A$ R: r
  221.       dwTotalFiles=UpdateLocal.size();
    5 ]  O+ c- [6 }( l, g: g
  222.       dwDownLoaded=0;/ c5 I+ Y& }. ?2 G( ?
  223.       bSilentStep=FALSE;
    9 q8 Z7 e8 a- h
  224.       bCompressed=TRUE;
    $ y. n6 n3 M7 `% `: B# D/ c
  225.       strExtLocal.Empty();
    2 y+ I- i: H1 _2 B1 {3 e# u
  226.       strFullName=(*i).second;4 C9 |% r* F, c9 O2 J/ N" z
  227.       dwProgramState=AP_CONNECT;
    ( k) |' ^- T, O+ ~' V0 F* j
  228.       return TRUE;$ M& p: d) |% u7 b1 r3 S
  229.     }
    ; H, X; W5 [( M8 c& |2 F
  230.   }
    $ ?6 J* r( [8 G2 e5 h
  231.   else if(bRestartUpdater==FALSE)
    . m/ X0 {" ~0 w% P2 H% a
  232.   {" W4 X( d! w, l5 b/ G1 K
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    , ^3 M7 R6 C+ Z
  234.     {) |3 Q0 ^9 B6 R
  235.       file=(*p).second;* l1 d9 p! i& S$ G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    * i* }1 |1 |7 _: M; v/ r4 p
  237.       {/ ?9 L& `$ d3 \* a( j
  238.         olds=(*p).second;  r* g- L) W6 x/ h1 V
  239.         olds->vers=file->vers;* i' x8 y* @  C4 n" J9 S
  240.       }
    % X7 Y0 `$ t. T
  241.       else! d' h1 @7 _* s/ O& ~. K
  242.       {
    # e' T5 T8 D5 _8 y9 _
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ L- D% p' a; y$ p+ w, c2 l6 C& c
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    6 V5 T, [; @$ M) L
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    : i$ r, A* ?) ]5 ^4 I" e: z
  246.       }
    1 i8 [: `2 c. g+ o- S0 c
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");  T1 ?2 E5 ^* H  p, d7 V
  248.       sprintf(filename,"(%s)",file->file);2 w1 V) X2 G& b2 Q2 V' g
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 v* e" J" n2 t8 ^& C' ^+ ~3 w
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
      ~7 y" `% C0 M+ V5 i+ ~
  251.     }4 u8 X& S! T# i9 v3 Y6 M
  252.     dwCurrFile++;
    & B- F1 H/ r6 g
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) Y' J! `0 n& U# r
  254.     {
    0 M4 r: F% v& S7 {- V) K  J3 t6 P
  255.       bSilentStep=FALSE;" \6 e$ f6 _  ^+ f# W. \: x
  256.       bCompressed=TRUE;" U7 I# k! l+ N/ Z- _$ F$ y
  257.       strExtLocal.Empty();
    % ?' E( ]0 n& P. s- w& U: m
  258.       strFullName=(*i).second;& y0 T: n( T3 l& b! r3 f
  259.       dwProgramState=AP_CONNECT;
    - ]$ S* r& B& ^- g# T( N- `; _
  260.       return TRUE;
    + r$ W0 m3 J3 R9 P: e# j6 U- H/ T; [
  261.     }' ^( P5 p; P: U7 X
  262.     if(!bRestartUpdater)8 L* }! P: s( \/ o* p
  263.     {5 W1 p5 ~# b2 l5 B  N0 Y  j
  264.       int iCurrSize,iFileSize;$ [& Z6 |; `* [% ]
  265.       iCurrSize=0;" L! I* D9 U: D
  266.       iFileSize=UpdateList2.size();. _& B0 w5 N& J& w* o
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");0 Q4 i# a8 y% f9 ~( N* F6 h8 I6 h
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");& g. m: k! l" x+ R* j
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ! [" k' v' L5 m4 H
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; `6 `3 Q: l$ M8 p. |4 S
  271.       Fclearf(".\\update.dat");
    ! P/ }( r1 \. L: p2 [2 l2 }
  272.       Fprintf(".\\update.dat","Bloodyf\n");. Z8 R1 d6 B8 E0 k6 F. s- X
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 j5 Q" C- o0 u. T/ P
  274.       {/ u, e9 i5 j5 a( `5 o2 ~, X0 f
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())1 {7 `% _5 S5 i1 s/ K; F
  276.         {4 f4 w; q  o) r- R9 Y: |
  277.           file=(*p).second;
    - Z" V- m; R2 @# q7 B9 i* d  |
  278.           sprintf(filename,"(%s)",file->file);# w7 Q5 [6 E8 Q
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ R+ Y8 T4 F9 S! O6 q! F: N
  280.           iCurrSize++;
    6 O1 M- B' ^2 a* c
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));5 x4 ^* ]8 Z9 L% w
  282.         }
    / q/ A8 t, V' _9 T' K; l
  283.       }. K- g: [5 c$ v; w9 b# \
  284.       unlink(".\\update.txt");
    * n, B3 r- C' F
  285.       unlink(".\\update.tmp");
    # a$ k" g/ A# f; v
  286.       Fclearf(".\\checkversion.dat");  T. c8 {+ i+ G! \. F
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    $ ^- x  {" D7 [1 E+ q6 [
  288.       if(UpdateLocal.size())
    + ?/ Y5 K* U3 J5 y7 _, x6 n, @
  289.       {% f% w6 A& k. c: I1 n6 F+ n* O
  290.         UpdateLocal.clear();
    - f, x* q% D  H0 Z. r2 q" Z. Q
  291.       }" M% R7 z  y! R8 w7 g
  292.       if(UpdateFile3.size())
    ! m+ T9 c9 T- p. L
  293.       {
    8 S6 h# k* u) D1 B% m4 p# j
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 V: [( _5 P" m" a: Q5 U
  295.         {
    9 G; H2 _! N2 o: [* A
  296.           file=(*p).second;
    , h8 E0 ~0 G+ D: v* f
  297.           free(file);
    . V4 ?' L% T/ Y- p* C
  298.         }
    ! d  v; ~4 G: j- `+ J9 R
  299.         UpdateFile3.clear();
    3 Z) w$ f! F0 Y" l5 ?
  300.         UpdateList3.clear();& z; w; T7 ~1 o. K9 s. d: ?- D: F
  301.       }6 v  A0 X& u) q
  302.       if(UpdateFile2.size())( s8 Q7 y8 n4 Q2 U1 j
  303.       {$ h4 `" ?$ w5 d! s
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % s+ X% R. O+ I! H$ o4 b9 v
  305.         {
    $ B% {; V9 M5 K" U
  306.           file=(*p).second;7 K. a) b( L4 C0 W* s
  307.           free(file);
    ) T" M9 {0 M, f0 Z0 c8 d5 G
  308.         }
    + h" R+ }$ b: {0 A: G/ V0 a
  309.         UpdateFile2.clear();% h  C6 b: O! r- r  `4 ^
  310.         UpdateList2.clear();
    6 j. g1 F* ?' d3 E+ l+ V! c9 z5 k7 }
  311.       }
    7 v. E  j8 g1 l4 |6 \6 c
  312.       if(UpdateFile1.size())
    " f5 \- g5 I' V$ q; Q8 e
  313.       {
    0 u! Z: D7 h$ m8 @. T, p
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 |1 \2 }7 v+ ]3 }
  315.         {
    . S* i) X0 f) v" h' Q
  316.           file=(*p).second;
    0 L; }: P4 ^2 E( a
  317.           free(file);! E; a8 |0 r8 s
  318.         }# x. s' Z  c) ~* A' ?' \( |2 e0 p
  319.         UpdateFile1.clear();
    2 B( X' p, h) `. V/ M8 ?: Y
  320.         UpdateList1.clear();0 l5 m7 b; Q. Y0 C0 p' s
  321.       }3 `1 _; K+ I& M5 ?- G  m  u3 W5 R
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    + v4 D; b9 p8 }4 ?5 W' q6 f. v
  323.     }  H  c/ t; i. ]: T& p9 V9 p/ d
  324.   }
    * R4 ?9 J# s8 P  F& R! F6 b
  325.   return FALSE;% \. }5 W+ v. z) [" J5 _
  326. }- l' ~, P2 J' F( B# u

  327. ; W- N) d1 m* f2 F4 ]- n. V
  328. void CRevAppApp::ClearAll(void)
    9 q! c* H. \* G  Y7 W2 w  y  |
  329. {7 M/ E6 e9 S* ^! o
  330.   LPUPDATEFILE file;
    9 ]7 k" y+ ]5 T0 o9 v
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 n4 T# J$ a0 N& P  v# Y/ @
  332. 7 F. M7 P, U' f2 q  o! A+ T
  333.   if(UpdateLocal.size())1 b, u* J9 z4 E/ T  \  ^5 I& r6 x
  334.   {, t8 Y1 P- p7 \! h. N/ n
  335.     UpdateLocal.clear();1 K. b* q3 {9 z- L
  336.   }
    # G. Y3 \+ k, G& |
  337.   if(UpdateFile3.size()): ~, r! U! n# U" H
  338.   {( y3 Q& b; H9 ?/ ^* P) ~1 P& a
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), I1 `! L% n& a' s# R+ s
  340.     {! U& k! k9 I0 J& Z
  341.       file=(*p).second;, w  A5 U9 Y  c8 O$ G# _2 U) p2 ?; y
  342.       free(file);
    / }4 R! @3 G3 i$ Z
  343.     }6 Z, Q4 w: k  l! g% L- O! {' }
  344.     UpdateFile3.clear();
    % r! ]3 }3 q5 B4 J
  345.     UpdateList3.clear();$ B% l8 r9 a3 |8 f! ?& z
  346.   }
    5 Z1 P: G. D; q: M! E
  347.   if(UpdateFile2.size())3 B1 \% _1 I3 P
  348.   {
    8 Q4 A5 |; G" }  J
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)4 G  O0 |- _- W4 o
  350.     {
    $ s, b9 _$ v/ X* [( k
  351.       file=(*p).second;
    7 l' m6 v' m: p* d# T
  352.       free(file);/ @0 g0 M' x/ x9 r
  353.     }
    " W9 X. Y1 p8 x! u  b. ^9 ~. |. a
  354.     UpdateFile2.clear();
    / u3 I, a' {$ l; f
  355.     UpdateList2.clear();
    2 o/ p- [5 d+ F# i: ?$ J
  356.   }& h' ~/ K, f# u5 l: W3 o0 `
  357.   if(UpdateFile1.size())
      ^0 F+ x. \/ o$ w, Y
  358.   {
    5 \) i; ~3 S' S8 {& f! J' j  U" V
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # r& A8 N( u  B, K: x
  360.     {
    ' l8 ?. }5 T( t# ]/ y! X
  361.       file=(*p).second;
    . s/ u! S9 H$ G! E3 `6 {% T
  362.       free(file);
      Z* D# q" A+ \; y
  363.     }
    ' i% ~$ i: ~, @4 ~9 l1 g9 x/ l
  364.     UpdateFile1.clear();
    ) _; {6 k8 i( [5 u
  365.     UpdateList1.clear();
      R4 N, p/ D* r! |  a$ o# k2 e
  366.   }, w( T& b* t9 o/ I5 {
  367. }  
    8 L# s) v& R2 E0 V" [9 l7 Y: ^& |2 {0 _
  368.   9 m" H) r2 q4 T) F
  369. BOOL CRevAppApp::CheckLocalVersion(void)% m, P, X. A& U
  370. {* J( s9 _# p  b, M1 s
  371.   int c;
    ( r9 Q* ]( o. D+ G
  372.   LPUPDATEFILE file1,file2;
    * `5 A* y: N; Z3 c# p& g
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    * K3 D9 _* B1 k  F- j+ `
  374.   std::list<CString>::iterator l;; ^5 U0 a2 @$ [

  375. ( P; u! w: H; Y1 r
  376.   UpdateLocal.clear();  y' s* h0 Y9 R- D7 x6 R) e4 Q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ {: ^, V0 T7 J2 m. A8 Y+ K" ]' S1 w- [
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    . Z+ _: |3 \. a4 {: x: f
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);( t  S  }" n& {: D  _' D
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    2 J% f! B4 }# I
  381.   if(UpdateFile3.size())
    # g* O4 E, A8 w/ s% }
  382.   {8 U: Z1 h0 v7 T0 ^8 q. z3 R/ Q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    % s0 r. h& S; ^9 z: A
  384.     {
    9 {% P" j% X* ~5 ~+ a3 \
  385.       file2=(LPUPDATEFILE)(*i).second;+ Y( o, d8 m) F( J1 C7 d+ J
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 ?1 m. Y* R. {0 x
  387.       {3 N0 y. G& H! V: P/ Q3 D
  388.         file1=(LPUPDATEFILE)(*p).second;+ }5 r( Y9 z* Q8 o' E3 Z
  389.         file1->vers=file2->vers;" z, @5 |7 @9 q, A" a
  390.       }
    0 _/ D) T4 F* F$ a' F& P! H; M9 O
  391.       else, y8 R, p2 U2 f) R: D$ |) h
  392.       {2 }$ w, S. W) i% R! P
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " t- c% d) `+ i4 d
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));$ i* E# M8 h, e" C/ Z) I
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));) Q6 J8 h* _. P* A$ Q& Q" n
  396.       }
    1 A5 o8 y* ]4 u4 n! \2 E
  397.     }
    ) A$ @+ v  X" Q
  398.   }
    $ a4 }8 r! ~3 D1 M& {8 B
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 V% o7 s- @8 \8 B) d
  400.   {6 q$ R" \5 P& D( l* ]: I
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()). n9 L0 n) Y. N) ~% G( t* E
  402.     {
    ! D& g/ |& Z5 V& ~' p
  403.       file2=(LPUPDATEFILE)(*i).second;
    / @, r  ^2 h( V) J8 m' m
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 ?  l! O, E5 ~. g( W5 {
  405.       {
    2 }% f) l% O8 @8 V+ Z
  406.         file1=(LPUPDATEFILE)(*p).second;
    - [- U" Q/ t  q9 C% G
  407.         if(file1->vers!=file2->vers)- j% V- |- X# S" L
  408.         {
    6 Q( G7 @  ~9 V
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; J* c7 f! H) t6 _: q( X7 U5 [
  410.           c++;, d1 B& {9 o' b* g8 ?8 b
  411.         }  @! A% |1 o0 g# s( c; r: T
  412.       }
    ) J9 V* K: ^4 q7 O7 ~7 V
  413.       else
    2 w5 B; G: F6 f: N
  414.       {" q2 Q% O9 V; {, K
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( U+ ~+ E3 L6 v' v) s
  416.         c++;
    5 f, n5 G7 B; C9 l3 u
  417.       }
    9 a9 e7 }3 P/ H) ]$ B% P
  418.     }. n% T8 S4 T* ~3 P6 s4 i
  419.   }
    - S: Q; K, M7 ?/ [0 B
  420.   unlink(".\\DownLoad\\update.txt");5 y: v& M# Z( N  \
  421.   if(UpdateLocal.size()) return TRUE;2 o) R$ m* n" G- E
  422.   else                   return FALSE;
    - n: X, b4 P- R& F; O
  423. }
    ' B  o! J" T6 @( U/ w3 s

  424. # @# s2 b& T# q/ ^- Y- S! n
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"+ n  c0 n8 ?4 u% H
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"5 V0 J+ u# k) P7 X. F* z

  427. 4 b, F3 a  F- D$ x

  428. 5 K! c8 V- A3 e  V- N

  429. / `$ H& o/ [% G2 _5 A
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ( b+ ?/ P' e7 m) y# y
  431. {: K+ H) G7 E; [& a4 g
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;4 _( t' X+ B& C6 s; A' q
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; W( w' ^- @4 @
  434.   {5 j6 N) @. j2 C' i7 E% b
  435.     char szLanguage[50];  G6 z8 A+ H5 w
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . R9 a; \* f6 j1 s$ }6 z) U
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 F% Q+ _7 T( B9 a$ {+ `2 Y
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ E3 o8 Y3 a# I; S5 e7 a! q
  439.     else                                   m_iLanguage=ENGLISH;
    + z% o1 N# ]7 D+ V+ c# s* _1 [. \
  440.     char szRegister[100];
    4 e2 e  D  |3 `6 A" i( Y1 l! z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : q0 @/ T" ]; L7 ^$ P
  442.     strRegsName=szRegister;
    + t, v8 w7 Y8 g, l$ g. G
  443.     char szPatchURL[100];/ q* D" V0 ^" D- R
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ; D$ h9 _8 o0 n4 B. H
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# d) Y3 p  _  x% N2 z
  446.   }
    8 t9 K, L/ _% P$ z
  447.   else$ _% A8 p; N, u* f# p- `
  448.   {. u2 W2 E1 g+ p1 `( V) x7 i' `
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 U: U' ~  K  [( ~
  450.     strRegsName=DEFAULT_REG_URL;9 t4 W, `+ C5 y8 W: ^4 [: H7 s
  451.   }& J4 u4 A  w5 q  d! o- X# i7 ^
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ! A2 o* B9 W+ o: X$ g# k5 D
  453.   {
    8 M/ P6 u: U3 R0 S8 U) P/ r: o
  454.     char szIP[50];% p" d0 H1 m9 j% D
  455.     char szDIR[300];
    ; m( ?, R3 _# c  B6 Y0 b) {; K
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    : r6 T- E! s# n4 V0 [: H
  457.     {8 m, O3 i* C8 ], B3 n' Q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ; c% Z: ?  w( I4 T- [
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");$ @7 x& C% U' w4 O# p( f' d' u0 o+ B
  460.       strHostName=szIP;7 n6 R$ R) z* f% {( F) G  l. K- F* W8 l
  461.       strHostPath.Format("/%s",szDIR);: o( {* u3 E* |  h7 t
  462.     }
    8 W1 K; Y5 ^" x, I
  463.     else5 @& p! k9 ^) R0 r! A, I& [5 K
  464.     {' r# ], X; F# K1 y
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! S! W; s2 @) l+ T# z: l
  466.       {8 T5 K4 ~  z7 c# \# v) B
  467.         char szLanguage[50];
    6 g4 f3 ]# t0 ?5 K
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- P* b2 o' C( I% R+ i
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ p7 N7 L& ^: P- J
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# d5 _) j( ]* g
  471.         else                                   m_iLanguage=ENGLISH;$ T4 I. `( |  R: C; P) Q+ W# {; W
  472.         char szRegister[100];- z- k5 L( N& v; I. J/ d
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' |! S! W. O' p+ f
  474.         strRegsName=szRegister;
    - D0 V; b0 x( K' D0 {
  475.         char szPatchURL[100];, d/ r# ]. W6 v. Y  _4 U
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , G; Q, x$ k% h
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " F* r& ^: O5 d' f1 }) i% y
  478.       }
    ! |* z5 ^, i* Q( o
  479.       else
    5 G; `3 T% @7 Q+ K/ s
  480.       {; y6 w, i, f& ~& m6 U( V
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 `. ?& w* p  _4 e& t
  482.         strRegsName=DEFAULT_REG_URL;
    - j. j) k5 r( Y; m' [
  483.       }
    & _  D) e1 ^- f3 j4 W4 T" p' M
  484.     }
    7 Q0 ?* B% y8 ]5 E6 `
  485.   }3 |% g& t! R% O7 ?. I5 g, I
  486.   return true;, t4 ^/ g# ~; ?7 J, }$ |
  487. }
    8 h$ i3 F7 V: b

  488. 6 z* w0 c6 O8 j$ n0 F
  489. #include ".\ZLib\unzip.h") N) I% W- K7 {3 k+ F' A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);, H( }' `* P8 d& R, |! e
  491. /////////////////////////////////////////////////////////////////////////////* t6 B1 J, S' N
  492. // CRevAppApp initialization/ k4 P4 c* U# B

  493. 2 j. o. l: Y9 f" ~3 \8 C+ y
  494. BOOL CRevAppApp::InitInstance()
    7 D# ^7 Z9 C+ U
  495. {, Z3 z) _( M' G1 J1 |
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , a* V1 U$ V8 r  l( X

  497. 6 R" N* ]7 e* C
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);. B& t4 d/ J6 r6 r) c5 v1 v% E
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))  y& ^1 h. h) A: Z6 _, D2 z7 `/ s" s
  500.   {
    3 N# u% Z* d- M* T
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    6 j6 S  l& I, _: q' `& S
  502.     GetPathFromFullPath(szPathTarget,szPathSource);3 u4 H" Q7 }! D7 V# ]
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))4 B8 J$ q- C5 \, e3 Q
  504.     {+ D$ n* k/ n8 V
  505.       strcpy(szPath,szPathTarget);: g/ A* Y6 c' Y, G! Y
  506.       SetCurrentDirectory(szPath);& R! ]$ ^& H. T; `9 |) a( Z
  507.     }
    & d( c6 S' A3 f/ a
  508.   }2 n) E$ @3 m! X9 v8 M4 E9 W# }
  509. #ifdef _DEBUG6 T# L& [, j, |" C
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 Y' I" c) K' h
  511. #else
    / B1 i- L0 b5 P/ W
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 w+ m- p9 F! V. i1 u
  513. #endif
    8 {2 v' o4 H9 c2 [
  514.   {
    , f/ x" @1 h  U0 z, }$ w' o
  515.     char tempFileName[MAX_PATH];
    $ t" r9 k' ~: {0 d, o" r: _0 ?
  516.     strcpy(tempFileName,szPathSource);
    * d+ a& S& E' z( I0 C8 s- Z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ' w* y/ B, ^+ R% `8 u
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    $ |4 O0 H1 @* K' [& k7 K
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    1 l( [+ h) Q3 K( s9 w# A+ B
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);; p2 Z: {: f6 K& A" d: l5 M5 S- s
  521.     return TRUE;5 O- U! l) Q4 b8 U0 K; a0 y
  522.   }% ?5 M7 h" J7 q/ g+ F& Z
  523.   // Nuke 0118: Delete run.exe
    8 M& z0 X0 J* |& ~+ u0 a: F
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    1 }4 N3 @8 k) o7 l9 v. t
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    6 G0 g/ H+ o( j# z$ B  m
  526.   if(!ReadCfgFile("Config.ini"))4 @( `3 S! A, Y+ c, s
  527.   {# S& o/ n" Q2 U5 I) f( b1 R
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);/ N9 b' s7 f" T& ]0 r
  529.     return TRUE;
    ; Q5 Z& Q: H% f0 g9 P- T
  530.   }
    , C( q- Z. g4 u- |' t1 m
  531.   HANDLE mutex;! c# A: F% C# s1 W5 B" I+ \/ u
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    * ]* d0 w. _( Q+ w/ |
  533.   {  j) j7 K8 [9 I% i0 `  N( \5 a* ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 y5 M) u2 e) y
  535.     {2 ~! F5 u+ t) }* y
  536.       CloseHandle(mutex);* ^2 Y2 {1 H" z5 u3 W& X
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * N8 b; ]. [* _4 i3 I
  538.       return TRUE;; u) }! G6 p) [5 E0 h3 M& e
  539.     }) f* C* C7 L7 x; K! c( q' ~
  540.   }  
    * M& J) V0 ]0 ~( N: Q: ~2 {
  541.   CloseHandle(mutex);/ q: x/ }3 U- d8 i/ A
  542. 7 R, l7 H, j! g1 C
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);# J/ D+ G1 V4 D+ K2 x

  544. # v% e2 G& l# P" S8 F
  545.         AfxEnableControlContainer();
    8 j5 R) W$ M. q1 U+ |6 F
  546. / N) f  J9 a' F- U4 Y  D* n
  547.   bCanUpdate=FALSE;2 n% o5 ^" n" ]9 j! t
  548.   dwStartUpSteps=1;
    ' \. Z/ F' b( Z* q& r
  549.   dwProgramState=AP_NOTHING;
    1 R/ l$ n! R+ W- D
  550. " N8 u4 D0 ?) n  Y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);3 U3 N% W8 u2 M

  552. + G! q' {6 F3 i4 m
  553.         // Standard initialization6 k( {2 `; D. E5 D8 x
  554.         // If you are not using these features and wish to reduce the size" ]  b3 l8 B' m. K, c9 Z
  555.         //  of your final executable, you should remove from the following
    0 [0 t  D" L) S3 w
  556.         //  the specific initialization routines you do not need.
    ( u9 K+ r' k- ]1 f

  557. - E1 h2 K' ~. J
  558. #ifdef _AFXDLL
    ; n& T  l; x: J% Q
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 }8 y. Y9 l: d3 j8 m
  560. #else
    $ C5 }4 F" `( s# p! a
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically' Z7 ?7 n% b+ k% |( R' d* j
  562. #endif
    5 d* h% a- J5 I; D! p% V

  563. % r0 Y. R% a: M5 [
  564.   dlg=new CRevAppDlg;
    5 H4 K" l2 A; c
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    $ B+ X- @( E7 Q* p9 M. g% `
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ) B- }1 f8 Z. m; T! _# \& M% e
  567.   m_pMainWnd=dlg;; d& X1 w0 k/ Q# Y4 ^
  568. 6 a& H. D$ v" m) }
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    - M2 G3 ]/ l) l1 C9 I* E

  570. + r- _& r. x9 a8 z1 i+ X% Y
  571. //  GdiplusStartupInput gdiplusStartupInput;: p# S! I+ i- c4 u# b
  572. //  ULONG_PTR gdiplusToken;( K5 a( h' X% c4 m2 @0 \, M
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    $ `+ @4 W5 Y7 b0 s2 y8 K

  574. : A$ f, Q$ Q4 ?: i: u. r
  575. //        CRevAppDlg dlg;: _- h1 `% M* t; D6 L# f
  576. //        int nResponse = dlg.DoModal();, D' q, n8 u3 S2 ~% l/ B- ?
  577. //        if (nResponse == IDOK)3 H7 T8 j5 T4 h" _  Q
  578. //        {
    & s6 n' y4 r! `0 i. h( ]. g
  579. //                // TODO: Place code here to handle when the dialog is5 _& a7 U1 C0 f+ X( y* D8 F
  580. //                //  dismissed with OK
    $ z6 i9 ]) _0 r# l6 A2 W( q
  581. //        }& z. d3 K1 \; y4 }
  582. //        else if (nResponse == IDCANCEL)  `6 C% P' J/ w% r4 {! W
  583. //        {3 Q" Y' |. y7 h+ h$ Y' e+ }
  584. //                // TODO: Place code here to handle when the dialog is2 Z0 e) J- d! l) ]5 X  i7 K8 h
  585. //                //  dismissed with Cancel
    - I  J0 @  O6 d1 f  _
  586. //        }6 E# k3 w, [+ T3 R) r+ j$ y' L1 Y

  587. 6 N# t8 I7 ^5 e! B+ ^5 |4 z
  588.         // Since the dialog has been closed, return FALSE so that we exit the1 _) }# m( q* s# G/ o# v5 r
  589.         //  application, rather than start the application's message pump.' N" F7 f3 i. w! O8 z, V: Z
  590.         return TRUE;5 m3 x2 M6 |* x6 ~' ]
  591. }1 m3 a! S7 u. G3 |

  592. / t% E" ]  B+ H3 M) M; {; O
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    - n" b" k* _4 I* P: @
  594. {
    9 p( w: ^; F5 D
  595.   int i;( Q0 F; T! \6 w) O  a% K. i' X7 _
  596.   char *szRet;
    ( g4 B4 o2 ?: ]/ |
  597. % |4 {- x9 L1 x. }. @# c& O
  598.   if(pSource) { itoken=0; sztoken=pSource; }- e, X* ?" T& {0 Z7 {" u
  599.   if(sztoken)
    9 u; T( O: J9 H- m5 A
  600.   {
    ' V3 R' b5 P9 |/ c
  601.     szRet=&sztoken[itoken];; Z+ K- p. z* p+ W* o% c( \
  602.     while(sztoken[itoken])
    3 O  H, q, a( n
  603.     {
    , g0 D% z0 q( g9 u3 D# k* Z  T
  604.       for(i=0;i<(int)strlen(token);i++)6 N1 z9 D  L. t6 \
  605.       {
    ! ?) o  x9 B4 L( Z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    6 C) e& y0 j  p( B3 M8 ~
  607.         {
    6 z$ P! m4 ~. Z& `+ C7 B- b- B8 F
  608.           sztoken[itoken++]=0;
    % S; d  Z! S( J2 Z' ?7 [0 D6 ?
  609.           sztoken[itoken++]=0;
    * b3 u' _; G( g6 O; G
  610.           return szRet;
    ( `- \, B0 M' u0 Y
  611.         }
    ! ~! H- M& _$ k: T
  612.       }9 A+ }7 m6 z1 s# y3 ^
  613.       itoken++;2 l* U6 s  L0 o$ J7 x" a
  614.     }% t- q2 U8 T5 ?7 p# ~9 Y2 {7 [
  615.   }& r3 B' I+ P) C  O1 _
  616.   return NULL;& G' b# H+ k- O  F1 r2 V
  617. }
    + ]7 B. y% ^- f  z) o& G& ]
  618. . B2 [4 ^) R. g2 u0 f" k% C/ _
  619. void ProcessProc(long Total,long Current)) ?. A+ u6 e/ B4 H. ?+ m" \
  620. {
    $ u. e2 L: l2 e# }' r) U9 w
  621.         MSG msg;
    ' }" c9 `; A5 }) g5 d9 _! O' _. B- Z
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);& S4 ]0 f: U2 y3 ~. m
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - Z: @* V6 j) N, k& U( J
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    , e2 b) @9 U% x* c
  625.         {7 w5 B6 }& U4 D2 c9 D/ @
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ' u  q' j3 X; X
  627.                 {7 \5 g% f3 x; {8 K; f
  628.                         return;
    , ]0 K7 L/ A0 P5 f9 [
  629.                 }
    ; c7 z5 y& K1 X  b
  630.                 TranslateMessage(&msg);
    : Y- {" p- e- f" J
  631.                 DispatchMessage(&msg);& i/ t+ q+ P9 h8 `& |; F. _0 J4 X$ G
  632.         }        ; o3 y% {8 `; X1 `
  633. }& y1 O* S2 g- r

  634. : t- k2 \0 q2 P" X1 P4 E4 q6 w9 U
  635. BOOL bFirstChar=TRUE;
    ) U0 b. k" q, L6 a
  636. 0 [7 ?) T/ I) c- M! H4 J: j7 Y; |
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ y  X3 e  z  P1 p
  638. {: x  h, U% i9 }5 R  O
  639.         // TODO: Add your specialized code here and/or call the base class
    & }- o( k7 Z! T1 b8 H3 L
  640.   switch(dwProgramState)
    , M: L5 ?5 \; v0 T2 F9 J3 g1 n
  641.   {
    7 }+ d6 B4 ]+ H9 j3 Y/ [. r
  642.   case AP_NOTHING:
    & H0 e3 O) W( I* S
  643.     switch(dwStartUpSteps)  I2 U  @* S; @
  644.     {
    + {: v% s9 i0 F, Y4 g6 Q- J' J
  645.     case 1:
    & `8 B0 E" G1 y3 ^: M6 Z# ]5 m
  646.       {3 [- v6 _2 ^5 k" L, n; L
  647.         int i;' z" C' C% e" x3 Z
  648.         CDC *pCDC=dlg->GetDC();% @6 N1 |4 G3 b0 Z( o7 S
  649.         HDC hdcwnd=pCDC->m_hDC;  _& V2 P- |$ q0 G8 `3 u
  650. //        Graphics graphics(hdcwnd);, |2 }$ p- ?- |) f4 M
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");" c! `* D7 S/ Q: J
  652. //        INT iWidth=bitmap.GetWidth();
    0 {. Y% G6 j2 ~9 F' i& n
  653. //        INT iHeight=bitmap.GetHeight();6 q5 A1 u- }/ G$ w1 \; p
  654. //        Color color,colorTemp;  g8 l: e2 J3 z9 d, x
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)* K3 ?  K* n8 P2 G
  656. //        {1 @! O- h% ^7 W$ @3 L+ k
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % |8 Q3 Y6 k- l/ I4 a, t! c7 `
  658. //          {+ ?5 }5 n! l% n& {: j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    . E/ {+ C; {4 A7 o) M0 i; n& `( Y
  660. //            colorTemp.SetValue(color.MakeARGB(
    4 D: |9 ~: I* h
  661. //              (BYTE)(255*iColumn/iWidth),
    / W. g3 d8 |2 L! B* v0 O
  662. //              color.GetRed(),- _1 j' E. B* g- Z( {& r
  663. //              color.GetGreen(),% T1 l% N- W( [: Y& V4 U
  664. //              color.GetBlue()));
    9 t0 A# Z$ q+ N  J
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    3 q. k  ?, \' S- @, Y' @
  666. //          }
    # P9 Y' {3 t0 @3 A
  667. //        }3 H1 V0 `! w: U' \2 s3 @
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # h. `( s3 p8 B  r  c; Q' s* o8 n. x
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");4 a; T, ~/ c: i  i7 f
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");0 @- T9 c2 r+ E2 m: _& w% r8 F1 y
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 [' ~! z* T) N' u* K5 W$ A( I9 |
  672.         for(i=0;i<240;i+=8)$ k& z4 w0 J4 R0 Q3 {2 x
  673.         {, S4 C. b7 ^; J( }5 G! F$ `
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 H0 p# j# P; ?# O: w+ Q7 z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, a# g9 z4 b2 k! Z
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 d/ R- i  ^  J3 Q( E. z8 o& l
  677.           Sleep(33);0 Z1 a3 E( j) ~3 ~8 m. t
  678.         }( z* _! }, a) C& b, P
  679.         Sleep(1000);
    ) x. n9 r; x& R, D( {- p
  680.         for(i=240;i>0;i-=8)
    2 J7 R! z  i6 O: d3 m2 B! w
  681.         {
    % ?2 a& P7 g- Z. F9 U$ C3 k) e
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);- [. ^* c% r( E  S; G
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  i3 z, D& f* u; ^
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' }7 K' [% v6 M1 |1 {# Z! V( c) n
  685.           Sleep(33);
    ! E8 X6 a+ j- y* ~
  686.         }6 `3 J9 U/ x0 O4 R. F$ T+ o
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);3 @3 i% a8 o' ^5 E( V
  688.         dlg->ReleaseDC(pCDC);
    & G. M% k* o  b& _$ B
  689.         DeleteDC(hdctar);0 f1 d# a1 {4 P4 e. b7 ~) @: N& w
  690.         DeleteDC(hdcsrc);
    8 j1 Q% b6 g! [9 N2 K4 G5 H7 |
  691.         DeleteDC(hdcorg);
    + u2 a$ u" m7 d' C) o+ V2 w
  692.       }
    7 u$ @0 F+ Q( V6 t8 j0 F
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 {: m: o5 U! S" S% L
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");/ q$ P) g( M5 h
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ( l5 @0 O. F" H7 S
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
      X/ u, V- q0 w3 ?  l& B! z# `& i- |
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( }4 `* }9 F6 b7 |6 b
  698.       if(!Dn.Connected())
    " }( x7 b' I: j
  699.       {
    # ?! M  C. `2 {( t, L( l6 {; d
  700.         dwTotalFiles=1;  D; N, l% ?) W& B( m- P& k
  701.         dwDownLoaded=0;) c' ?; W* ]- B$ Y( y; B1 n
  702.         bSilentStep=TRUE;# z$ U; h& l  K- v9 ?( ?5 |9 g
  703.         bCompressed=FALSE;
      P) e3 V5 t# P6 U
  704.         strExtLocal.Empty();
    ' \' Y# B; P, R0 F- }' n
  705.         strFullName="readme.txt";
    8 H2 k7 ?' ]3 H. t: k3 K
  706.         dwProgramState=AP_CONNECT;
    & o4 S( x8 j) H* f; x4 w2 C
  707.       }
    . i( Z  {& d+ O4 e/ T' V
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();1 I, N& Z' |7 p& q( g3 |
  709.       dwStartUpSteps=2;
    , Y* G/ j% Y% O* h1 @5 {' {% ?
  710.       break;3 L2 K( x7 V# J! ^0 J7 a
  711.     case 2:% i. @6 Q" B* M
  712.       {* Z% q# W0 _" ^' g: v
  713.         int iEOF;8 q& A5 b$ T8 ^! e
  714.         FILE *fp;* I6 _' \# @. r$ f/ d
  715.         char szString[512];
    0 W, z2 R0 x9 J7 o  q5 u
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* s) C( v- e5 v! q; G) b) H
  717.         if(fp)& c5 O) ], o& A. R$ Q" f$ V% J
  718.         {
    / M& v0 @4 E4 H: d8 S+ ^$ {
  719.           do7 K# T# k0 c8 b
  720.           {
    : N$ L3 q; W# s6 d% c& C# {7 U) T
  721.             iEOF=fscanf(fp,"%s",szString);3 S9 |5 G) v# E- N; }
  722.             if(strlen(szString))% ?$ E3 A# f. _
  723.             {$ S/ ]6 I( n. I% s8 n
  724.               if(bFirstChar)* J" _4 z9 X& }8 J: v+ v: ~
  725.               {9 a6 u# ~9 J& `2 s+ \* H8 A
  726.                 bFirstChar=FALSE;
    * s) A1 a- S; y. Q. i" L, [
  727.                 bConnectIsBig5=FALSE;
    0 u; E6 L1 l! d( j4 G1 e, N0 J0 n
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;# Y1 E( ?5 P- I/ [& P/ v$ X
  729.               }
    # I: W& {4 }) y. C# n7 t
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    1 }% Y) f+ W- U( S$ O( z- W
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    $ D  i, S5 F- ^. }5 T
  732.               dlg->m_ListText.AddString(szString);& e" L* M8 ]7 m$ y" _( Y: O+ ~* _# Z
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  O8 ~. I; E1 f4 y: c) M
  734.               *szString=0;
    0 t6 G! L7 h5 o% _& {
  735.             }0 ]* Q& C- u" q$ W# k$ N
  736.           } while(iEOF!=EOF);
    - i) D) k# [- R
  737.           fclose(fp);0 k/ {  N' E: {. O" m
  738.           unlink(".\\DownLoad\\readme.txt");" O& G* i4 K7 h3 ?* H4 z3 m8 _
  739.           dwStartUpSteps=3;: x' J: v# c$ ^0 e* b
  740.         }( E9 p0 D: i# L- D- _
  741.       }" W( I. y  S% [3 u7 d) T
  742.       break;5 c6 i- [# O6 d" S. Q* ?  v
  743.     case 3:
    * [& Z/ \; h( b# ^, i
  744.       if(!Dn.Connected())
    : G- [% z! K$ u" V; r, e/ N* }1 |7 x
  745.       {
    * p! n% C! `8 t. z1 ^+ v
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    1 \4 A0 t7 p7 i
  747.         dwTotalFiles=1;% F. e; c" _& P. ~4 g' e; T& J
  748.         dwDownLoaded=0;8 T0 R; p) \) t+ \
  749.         bSilentStep=TRUE;
    5 B6 [4 n$ t, }6 P/ Z. F. g$ k
  750.         bCompressed=FALSE;+ V2 V0 f; W' R% J/ E/ \
  751.         strExtLocal.Empty();4 i+ A8 B/ Z! b
  752.         strFullName="checkversion.txt";& [( L" r( s% }+ D
  753.         dwProgramState=AP_CONNECT;& _1 O4 @2 u& n( F' L
  754.       }, m0 O* t) V& Q& D+ w
  755.       dwStartUpSteps=4;/ ]" \2 e- Y. O( {$ h: d
  756.       break;
    1 W0 E. z: O0 l3 ^& \" x
  757.     case 4:
    4 M5 c+ Q! I! l! X0 Y% H$ Z
  758.       {1 y! v$ ?! }3 h2 h) Z
  759.         FILE *fp;/ |1 C% X9 g7 E* Z: B4 m+ j3 h) P2 B
  760.         char szString1[128];- y: }  t* c# d" O" p' Y7 N8 z
  761.         char szString2[128];
    9 i  R6 C! c# z2 a
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");3 f6 q+ B5 M, I! T& {8 }/ T# r& h* s( j+ r
  763.         if(fp)3 N3 C, [$ P" O- g& o( M9 l" Q: W
  764.         {$ q. G- w! d% t- C+ a( L
  765.           fscanf(fp,"%s",szString1);/ \- A9 b. G7 g  U( \9 `6 M# X5 Z
  766.           fclose(fp);; E% s# s6 ~) c  \! _8 ?- P
  767.           fCheckVersion=atof(szString1);
    # K" C. o9 z$ C- k$ n! o; ?
  768.           fp=fopen(".\\checkversion.dat","r");* Y1 l' l& y0 `; H  q
  769.           if(fp)/ K9 B- K6 P) @& y+ t  k
  770.           {1 _8 u: M$ c) {8 _
  771.             fscanf(fp,"%s",szString2);' @' L, T4 f1 R1 l
  772.             fclose(fp);) j" E# \5 c# Y: t
  773.             if(atof(szString1)!=atof(szString2))
    ( N# A8 p; Z9 \* b
  774.             {+ g' ~; p. ?3 Q
  775.               if(!Dn.Connected())
    4 a3 n( J2 v  C8 @( g9 W* W
  776.               {
    - h$ J( ~& @2 v. O; X
  777.                 bFirstUpdate=TRUE;
    6 Q$ O4 p. ~) v$ j
  778.                 dwTotalFiles=1;
    - n# K7 k# S. n; l0 F- E( R
  779.                 dwDownLoaded=0;
    7 ~8 a! I0 p7 [; M
  780.                 bSilentStep=FALSE;8 l# M6 ?$ v6 n5 o5 _
  781.                 bCompressed=TRUE;
    5 C2 Y  @. B' q- b5 L
  782.                 strExtLocal=".\\DownLoad\";. y) ~8 Y( t5 E0 R1 F5 M7 W* p
  783.                 strFullName="update.txt";
    - I9 N4 J' ~4 j9 k
  784.                 dwProgramState=AP_CONNECT;
    5 C* P" }0 K8 m* x. Z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & G6 v7 h1 @& d* k; a
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , ?3 k( }, _& Y- a! U* s/ z
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");0 B" E, a7 I* \! z
  788. . N0 a  y* m' c8 l+ U6 P0 T, y; D& Z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 R& x/ Y* S; g# o, }
  790.                 unlink(".\\DownLoad\\checkversion.txt");, u9 b8 X, E8 P! t
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    2 x( `' k: R& ?' W+ K- w
  792.                 {
    ! Y: x/ I: b  N/ }0 j0 g
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");3 X( [( E0 M' y$ v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");7 T; b- k  T6 o( w  E
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    8 K: q% H6 v1 ?' H4 @9 @
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - |' e$ P; h9 U2 M! v3 ?
  797. 4 W: I, P! f" I* ^
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ q4 ?- p& I+ O4 N
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' {) b6 }0 }% {( J
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( _) x5 V# k9 E2 c% c, L8 y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! O$ p$ i+ @/ m3 w$ d
  802.                 }
    1 c$ X4 b2 t, w% Z. S
  803.                 dwStartUpSteps=5;  b0 w% [- H1 T9 a8 x
  804.               }
    : \. ~! b; _- G4 ^; t4 M
  805.             }
    & L9 O/ d: Q* t/ I; ^6 |
  806.             else6 B3 S4 l& g5 E( t8 P" h. S  D
  807.             {
    0 w9 P9 Y8 q  a4 @* x! M0 W! t3 N
  808.               unlink(".\\DownLoad\\checkversion.txt");
    0 m* l4 e# @1 d" `$ p, [) b
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");, \* ~3 C: W3 |& e
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ _1 I* L/ N/ `9 _: r
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");! V) n1 B# b  p$ m4 ^+ d

  812. - @6 k8 Y* B; \' {! j& a( ]
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ T: R$ Z9 ~( v2 Y& |: t9 ]
  814.               dwStartUpSteps=99;( s. [( X3 G% M% E
  815.               bFinishUpdated=TRUE;
    ( ]. z3 V9 y4 A* f$ t  d% ?7 U
  816.               bCanUpdate=TRUE;
    * C( J9 w7 Z4 h2 v8 s: c
  817.             }. Z( a' U. I! g
  818.           }! e: c2 W' q: `, q5 I6 A; }
  819.           else
    & p2 j2 n5 ~; |' y+ T2 {" O
  820.           {
    ; ?4 ]3 ?# V# d1 m6 i
  821.             if(!Dn.Connected())- p" M& M/ X8 D7 F. ?2 O$ W. d+ z
  822.             {
    5 d. ~! N( l5 e8 N) M
  823.               bFirstUpdate=TRUE;
    5 V0 ~, f4 a" F5 ~2 u4 ~# N
  824.               dwTotalFiles=1;
    ! z6 V+ \8 \7 b9 X; y
  825.               dwDownLoaded=0;
    9 F$ s4 W- P( [
  826.               bSilentStep=FALSE;
    : H! X, j0 m; `5 s- E% y& ?
  827.               bCompressed=TRUE;
    ! A) j8 E5 X& H* G6 q% h
  828.               strExtLocal=".\\DownLoad\";5 g3 R4 C0 x4 [' D1 ~
  829.               strFullName="update.txt";% f6 N  V0 i3 A/ U" O1 \
  830.               dwProgramState=AP_CONNECT;& {# ~4 n' M% h* A6 k" q) }3 p
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 j1 G9 W: s- R: U1 U2 t
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ z1 L( {5 n/ N3 H
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . j7 j# p0 P$ }1 x& m$ M
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + F" H$ G  X+ t8 @" }1 K% \7 X
  835.               unlink(".\\DownLoad\\checkversion.txt");
    $ X( T/ T& @$ R
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . y- u7 }$ t! t, f
  837.               {
    ' S! Z: X; ?+ e- K1 ?. |
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
      n+ @# W9 v! d- p" `
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    , y& ]3 C. I; M- d1 s' F* B9 Z2 ]
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    2 {" g" p2 s: G) c  s% \
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 w* q" V' t" |4 g' x& \: C
  842.                
    1 |6 _  v3 B8 k% k8 O4 I  ^
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    5 t$ k4 n9 x; F$ O- m% E
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 T2 L. t( M- p8 A: u! m
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");, W! i' G. Y1 T: s4 ]
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% A+ _8 Z1 j2 o* ~
  847.               }
    ) [2 w8 n' N6 y* e& s( s6 \. t/ e  Y
  848.               dwStartUpSteps=5;
      [9 M- W5 A% o
  849.             }
    4 l& s8 {) }4 L( N' h( z3 j& T9 f
  850.           }
    $ u# B5 v, Q9 I* t
  851.         }+ m, H3 T3 O; K6 ~' y
  852.         else
    - E2 a# ~- p4 H; f; w# n8 n6 S; O9 n
  853.         {( O: n1 B. _9 H/ a6 h0 ~
  854.           dwStartUpSteps=3;
    , f+ w. x8 l6 l+ k& o
  855.         }
    # L( Z  L3 T& f0 n8 V
  856.       }
    / w3 o0 v! \+ @: W5 p/ }4 f0 Y8 O) u
  857.       break;( }8 R. Y& H6 J" M" Z
  858.     case 5:! j6 s8 I  \; f, I* q; r
  859.       {
    5 \. [' F/ b) c7 L! o7 I9 S6 Q
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)- z' c  w4 h8 q. U& [# I
  861.         {
      x- S2 ~+ H( U
  862.           int opt_overwrite=1;/ y9 Q6 O. Y0 Z9 d
  863.           int opt_do_extract_withoutpath=0;: _9 }5 c3 j3 a6 l$ R
  864.           unzFile uf=NULL;% K0 o* \8 H7 s. ]

  865. ' s+ ~  K- Z7 v0 @; U2 I1 q% ~! [5 U
  866.           uf=unzOpen("Wsa.zip");8 y4 E% Z& p9 K! i9 T# R
  867.           if(uf)
    ! l  ?+ z6 v5 q
  868.           {
    8 I0 j" H5 n" R/ \8 Y' N  W5 y0 S
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);/ y# I8 N# k# ]$ N' a
  870.             unzClose(uf);
    4 P2 H! k. H; N7 N( @  u2 ~# i
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");/ ~9 r* L# _5 V( F
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    - U: P9 |) H# O
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    3 L  U! {/ d$ e9 o3 s9 T1 K
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* q+ \+ s( }9 D5 }7 I8 d' ^" {
  875.           }% Y! g6 U$ M! S' h; [
  876.           DeleteFile("Wsa.zip" );
    - P5 e! ~- C6 n" Y% ]- ~0 Y& Q; u: \
  877.         }1 g: t% G3 S0 H6 s4 m8 d
  878.   ]3 I( ?) K- ^. _* _/ {1 |
  879.         if(CheckLocalVersion())# Q' i- z% G2 b8 u
  880.         {4 X' L2 o! r. }7 @" q
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");$ L+ a# D; p, G6 m, Z" j$ G/ T7 G
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    : i8 l+ i) s1 a4 T7 ]6 {
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");2 ?: g! }/ X. B; D' x+ J. \* G
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 V# b- N. P- K8 v7 O
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);: W( \1 J7 s  o8 T
  886.           dwStartUpSteps=99;' Y- O0 v* s+ u* k9 O. P
  887.         }
    6 b5 s0 t8 N; Y6 y
  888.         else
    ; y' v, t( @4 U5 |. R& S
  889.         {
    , f! e$ Q9 |2 u' e' l& x
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");1 W7 Z  J# J& [8 z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' |9 Q; Y1 y  i5 g  M0 {
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");1 |7 R. @( V; z1 ]

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

; d. d" c  d+ U+ z: ?* ^1 P7 W, T1 I6 U, y: Q2 ?$ D# p% 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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