找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
( G: P+ p: |0 D# g/ C9 N; d! T
  1. / RevApp.cpp : Defines the class behaviors for the application.
    6 u+ D+ Z+ b) Q  D
  2. //
    , N! F. v+ T  C7 c  Y# }1 e: I: a

  3. 6 Z9 [: A0 e3 S# X% J
  4. #include "stdafx.h"& g0 f+ h7 p) F% n
  5. , Z: o% u& ?0 `1 J
  6. //#define UNICODE4 _; c& ~: B# p# ?
  7. //#include <gdiplus.h>2 b  {% |1 W2 H0 _! o9 G
  8. //using namespace Gdiplus;8 c' r; A4 N  f( {* U

  9. ) X# t" \% v+ P/ d" G* K
  10. #include "RevApp.h". M7 {* F* ?* H, _" ^1 P
  11. #include "RevAppDlg.h"
    ) w. q' J9 Z# J

  12. ( |8 d9 @' P9 m
  13. #pragma warning(disable:4786)
    : G- ^3 ?" N5 k7 S3 o8 V1 `$ w
  14. #include <map>! ^; C7 K' ]1 V  V  M4 P+ [' U
  15. #include <list>, h1 p  y5 G0 z# N
  16. #include <direct.h>
    $ A- w: U/ X$ L

  17. $ u& S3 v7 p4 b; q5 Y5 ^
  18. #ifdef _DEBUG+ w5 S# M6 w8 {  E/ }* l- \5 m
  19. #define new DEBUG_NEW
    4 B3 y" G* G5 _
  20. #undef THIS_FILE
    7 v7 U7 K# A$ ^+ }1 L4 Y' H' W0 I
  21. static char THIS_FILE[] = __FILE__;
    8 J: H. M( a( @% g
  22. #endif0 H, ]/ e( O: F" U
  23. #include "SkinResDef.h"
    6 T* \& M2 s2 l- m
  24. #include "ChangeBG.h"
    1 T3 H' Q7 }6 d- x6 \6 Q
  25. #include "AFXINET.H"
    3 c& d" M; Q6 @1 J# I& d- K
  26. 4 i1 |: T8 i' \% J, T# k
  27. #define TRADITIONAL_CHINESE 0( {7 j4 X" Q+ r# J9 a- e& }' i
  28. #define SIMPLIFY_CHINESE 1  W& X* Y; q4 W$ I
  29. #define ENGLISH 2
    7 i' W8 P' i. M5 h. y% p
  30. int m_iLanguage = ENGLISH;7 y, N# V2 M1 ^2 U4 {# Y
  31. /////////////////////////////////////////////////////////////////////////////
    7 `4 O% D: d$ O: X8 ~; S- ]$ j
  32. // CRevAppApp6 |. n$ j) t6 n) Y8 ]3 f- h1 l

  33. 0 h8 B, F0 h& D' s0 a3 D/ s1 M
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)9 s" v& {% p& y3 g* u
  35.         //{{AFX_MSG_MAP(CRevAppApp)( d' p  ?, Y$ P; e/ Q6 c' T$ g  F
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.; Z+ o  Q& q8 b% C  S$ F* A. G
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    * k. q" f7 I5 E) j9 l9 k
  38.         //}}AFX_MSG
    # N, {; K* M% P* A% V
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)9 F. p6 ^7 b1 y8 P; T9 O4 J
  40. END_MESSAGE_MAP()
    2 a' W) s; t0 ^5 S1 x
  41. ' F4 B9 k5 q; P% h+ H1 l  _/ p8 W8 h0 w
  42. /////////////////////////////////////////////////////////////////////////////0 `7 _# t+ H9 |1 T
  43. // CRevAppApp construction
    5 U2 B6 V- w" U2 n
  44. 0 w8 [, k3 X; s$ I( \& b
  45. CRevAppApp::CRevAppApp()
    ' H% k+ |' W. b8 N! o
  46. {) |9 i* ^; p6 ?! Q8 k7 q
  47.         // TODO: add construction code here,
    , L+ v  W5 R, m
  48.         // Place all significant initialization in InitInstance
    ) d8 W5 U. D% \) |
  49.   bDisplayIsBig5=FALSE;
    . k7 k+ i- r, M: F: @% _( Q' ?1 H% `% X
  50.   bRestartUpdater=FALSE;# Q$ |3 S3 s/ O0 R0 K. S
  51.   bFinishUpdated=FALSE;
    " D% K, z6 x! ^: p/ R7 X+ [; L, p
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;0 }* B$ n% G$ B9 ^
  53.   InitChangeDataBig52GBKS();: Y# `2 g$ s: j% T
  54.   InitChangeDataGBKS2Big5();) D- r0 ~+ Z6 ]
  55.         //
    . Y# t# b! n2 P) g+ _
  56.         bClickRunExe = FALSE;7 T" g0 H( \$ a* K% H
  57.         //8 y2 X6 b$ s. L2 x" l! G
  58. }
    ; R) M! n- D1 I# c. Q& w+ P

  59. 0 p) e% K2 S& i
  60. CRevAppApp::~CRevAppApp()% V* W7 u1 S( d1 s/ u* k" [9 P
  61. {
    4 @0 {4 t7 w6 t# Y# m- q9 T5 U: S
  62.         // TODO: add construction code here,' `2 l- i7 b- o+ j5 n& _( s! T
  63.         // Place all significant initialization in InitInstance8 j0 F9 @# e/ U) O1 s
  64.   EndChangeData();
    + Z0 I( j& S' p
  65. }+ b5 Z6 y, E( x0 W8 Y8 u1 J% G
  66. % u: ^( c& ?8 Q7 n6 y9 v
  67. /////////////////////////////////////////////////////////////////////////////
    2 U1 v' m# U( d9 l5 d0 [
  68. // The one and only CRevAppApp object
    " ^# |8 W  x2 i: h3 C
  69. 9 ]2 B& S  i9 G; N5 B: e
  70. CRevAppApp theApp;# H, ?& B0 g( ^7 r4 _
  71. $ [' }% \. M5 _) E. {
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)$ M. Q. n0 `6 \
  73. {
    ( ?) v* V6 w& H, M5 l# I, T' E$ Z
  74.   int iEOF=0;/ o. n) v$ }" ?( t+ L% p  L0 ^4 j
  75.   char szTempName[MAX_PATH];0 c" B; s# f6 m/ Z! j- T8 @+ a4 c
  76.   *szFileName=0;  d4 {6 B  X. l7 Z. w( y
  77.   iEOF=fscanf(fp,"%s",szTempName);
    , O5 h$ z9 E4 a: p/ y2 i/ f7 a
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    % o7 z4 G' X0 L$ L
  79.   {
    9 `: V0 V! t" Z9 v: }
  80.     strcpy(szFileName,&szTempName[1]);# H; L( x: c, j" x* C
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)$ y& n" |+ {! ?- {. D) R+ |1 O
  82.     {
    + r; Y& U* z6 `% ]3 j- T
  83.       iEOF=fscanf(fp,"%s",szTempName);
    . y. p% ~5 i3 P% U
  84.       strcat(szFileName," ");- O% [8 B& K" T' [  U7 ~, D! h/ Z$ h
  85.       strcat(szFileName,szTempName);
    ) I' V! d5 D# _: a  p" h
  86.     }; ]* a6 y: z. r3 [
  87.     if(strlen(szFileName)>=1)
    9 D2 o" u1 ^6 P3 X
  88.     {& q- b* [- [$ Y7 T! G
  89.       szFileName[strlen(szFileName)-1]=0;
    ' c- G6 G, a0 F* L( ^8 P
  90.     }
    2 j1 r: ^; F9 ?$ R4 q' E
  91.   }) g2 ?4 y0 v5 M) z
  92.   return szFileName;. `) {; P$ y' q5 A
  93. }
    0 ]( q" A. T" J7 E

  94. ) ?) G* G5 q' K( q3 @
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)) R+ M2 A, W+ K$ l2 V2 ^
  96. {0 J# a+ \% \% r* O
  97.   FILE *fp;
      F9 K$ D* \% i* n2 f+ E! H' e7 [
  98.   char *key=NULL;& [) b$ d% z# h8 C0 F1 X5 X5 P
  99.   char version[MAX_PATH];( m( _6 f/ X5 u4 e% f2 y* L
  100.   LPUPDATEFILE file,olds;
    & d9 [8 ~8 c% _$ |, ^; M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / w) E2 x. m6 {6 V0 j

  102. 3 ?! @& P3 u8 F0 n, |& n+ c
  103.   UpdateList.clear();/ c+ b# M. W: D
  104.   UpdateFile.clear();$ ~. f, b- u( E
  105.   if(GetFileAttributes(filename)==-1) return false;
    ' ~/ i( P8 h) x- h+ U
  106.   if(!(fp=fopen(filename,"r"))) return false;% y6 l; N9 c* x# O  Z0 n( s7 d
  107.   fscanf(fp,"%s",version);
    7 c0 T. q) j  A7 ^2 @4 k3 W
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }, b% l! ]% Z" D4 X( h; N+ [
  109.   while(fscanf(fp,"%s",version)!=EOF)
    6 k& W9 p3 f( [2 o, m/ z
  110.   {
    ' _' I; q) A0 T& m& [4 ]% \/ |
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. |' M7 B* K+ e& O) l3 g! U' U
  112.     fscanf(fp,"%s",file->path);7 G; P- [; d$ X$ N( ?* [: {  |
  113.     ReadFileNames(fp,file->file);
    / Z' j( l9 L" [3 i& {! @
  114.     strcpy(file->full,".");( h- U( n! B8 P( l( p; u( m. y, K9 N
  115.     strcat(file->full,file->path);+ e- }8 N* y9 k$ Z  p& C
  116.     strcat(file->full,file->file);  Q+ M1 }( |, |. O! f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ; x9 e$ i  o" E: {" t
  118.     {) x5 H5 ]' l$ f, q* R" K
  119.       file->vers=(float)atof(version);
    ! K4 A* o; ^- d8 x
  120.       UpdateList.push_back(file->full);- z/ N. x. a9 L' ?  s: @/ ]: H
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    7 C" R# Y# l" t9 J1 Y& w! R
  122.     }# F9 \( A3 J; l$ u8 b) N
  123.     else: W5 ~7 t5 I" n6 b3 S: G' U0 t. p- m
  124.     {$ _$ u. q; p' Z1 K" C2 Z6 N7 x; U
  125.       olds=(*p).second;
    9 d# h  \2 |( q4 u4 f- N7 ~# g
  126.       if(olds->vers<(float)atof(version))
    1 j, |' x$ u! X5 D
  127.       {
    + K2 i! b5 Y. C9 b( h, B! q' Q5 Y
  128.         olds->vers=(float)atof(version);7 B: X, q: P. W: d) z0 y+ V% V5 \
  129.       }
    % g3 f( ]3 C9 B6 z) y6 J. c
  130.       free(file);& e- q& j; ?( c+ ?8 e; K0 y0 b# `
  131.     }# u$ [8 A1 I( |  }" Z/ f& X
  132.   }
    ! V2 ^1 b1 ^' x5 s! o( a
  133.   fclose(fp);, }% `4 t$ u3 V* f0 N5 M" x0 {% B
  134.   return true;: ~+ d" B# i# h1 V4 G
  135. }
    ) Q% y6 u7 S1 u* m6 h, {' }) ]2 ]
  136. 4 `5 {+ C5 H3 K+ }6 ]
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    % Q+ N+ d8 \/ G" i" o
  138. {
    7 {0 \: P  X3 b0 N6 d3 b' D
  139.   TCHAR  szFull[MAX_PATH];( v; F, ?$ x3 E. H% [) p, k  g
  140.   TCHAR *token,*inter;9 h9 u% B3 j- H! e8 g! v7 l8 \9 n
  141.   *szPath=0;
    # [" o/ g5 @, p- J) E
  142.   strcpy(szFull,szFullPath);
    - }0 K! O! r9 j* ?1 f
  143.   token=strtok(szFull,"\\/");! F6 n. C- X6 J+ K" l
  144.   inter=token;9 j) V. P5 h) A/ ^- o: }3 P
  145.   while(token=strtok(NULL,"\\/"))
    6 f# i& S; a( }& V% o  `
  146.   {
    * A$ C9 k5 B  |% D( t/ x
  147.     strcat(szPath,inter);5 M/ f9 u- c+ o& f+ X
  148.     strcat(szPath,"\");
    0 X- H% F  M0 [6 Z- D
  149.     inter=token;4 a3 I5 a* c3 T6 O3 y( I6 S
  150.   }* t* O0 z# z5 z3 O) G
  151.   return strlen(szPath);
    ( ~" _6 R, N+ A4 Z
  152. }
    9 ?  K6 m6 J* a7 C7 `- W0 X5 [
  153. " y7 f" ?, h/ U& P7 v
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)! G, [& I! i' ]6 @$ o4 [% I7 o
  155. {* k4 i) z$ i, U# ]
  156.   DWORD attrib=GetFileAttributes(Target);
    , @' N3 w- ^) t9 F; ^: l
  157.   if(attrib!=-1)
    , P1 W% P& _7 k. G! B
  158.   {
    ) {4 b  l% E: H* b1 U6 u
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    * r  P. E) H' [  T
  160.     {
      A9 E( ]5 X; ]" v" H6 N
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    9 n3 J# P. f/ i- ~; E
  162.       SetFileAttributes(Target,attrib);
    1 T/ j4 e; H+ a8 y' G; n% x% _2 v
  163.     }
    . G2 E! L# B* h/ y4 [# P$ Y. J! @5 p
  164.   }8 {3 @* h; V: j. @+ D8 x
  165.   CopyFile(Source,Target,Erase);
    3 p: |2 S2 \# b/ o& g! i1 w
  166. }$ E4 B! F; a/ l
  167. 8 A( Y6 G4 \* }; Y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)( |3 M- W2 B/ F
  169. {
    , s- Z' e2 e$ t  v& |1 j8 U
  170.      FILE *fp;
    $ Y! C) C. m8 R9 R2 g" b8 M/ }3 r
  171.      char  szBuffer[8192];
      Q: ]6 V7 |, S  J
  172.   va_list  argptr;
    8 Q7 k' u  {. [3 c0 `
  173. 4 E6 l& I- y# ]. \; D6 T: c  N
  174.         va_start(argptr,message);. A$ W4 B' ]+ R  A; x+ g
  175.         vsprintf(szBuffer,message,argptr);
    5 P* b9 M% o# O8 K% L  J. N
  176.         va_end(argptr);
    / _& x# O* s( y( k- A+ [- I
  177.   fp=fopen(FileName,"a");
    $ b' I  A# G0 a4 _8 E
  178.   if(fp)5 W4 k- y: L; k
  179.   {& o5 r6 o9 ^  _7 C/ Y$ e1 A
  180.     fprintf(fp,szBuffer);
    8 h& c  [( [" S0 @: k' m# v) V
  181.     fclose(fp);# A* ?/ m; l# C
  182.           _flushall();7 P4 b, o8 J1 D: I  M1 Q
  183.   }
    6 A) Z( P  k$ |0 Z( ?* t" U+ l
  184. }: k  o# t' E4 M: f! ^0 O; B/ r
  185. # y* s3 W4 @/ r
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    6 U6 b) x! K! ?+ e- D9 x$ i% b
  187. {. G0 }4 y8 Q3 p  w4 f, |2 Z
  188.      FILE *fp;# O: a/ Q% P' C6 ?, s: m% T  I$ ^& p
  189.     DWORD  attrib;! l& _  R1 S- j- L! n% L+ a
  190.   attrib=GetFileAttributes(FileName);& N3 ]- _7 T3 }$ m9 P4 \) R; X  w
  191.   if(attrib!=-1)+ ^7 K' J7 s" F# d4 |
  192.   {
    6 h; h1 A) \" w# z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);! W& g/ f5 Y- L
  194.     if(!SetFileAttributes(FileName,attrib))# u+ }. H0 s7 h. T5 h; R
  195.     {& j& K' {) U' W  b" O  x* s
  196.       return FALSE;& P, Y" D3 o! h# y5 g
  197.     }( s5 |' k8 b$ i% W. E
  198.   }
    ) x- Q# B: d  w3 I- a8 _) ^. ?
  199.   fp=fopen(FileName,"wb");
    + J; F6 c( x. B
  200.   if(fp)
    ! _" G: S/ _8 W
  201.   {
    5 o2 Z$ Y" x, T
  202.     fclose(fp);3 C; K4 I; ?8 L; m4 x2 \( m) U+ D
  203.   }
    ! N. _% U. Z! r- ]" Q
  204.   return TRUE;
    ' ^) v4 ^1 l4 z- f
  205. }
    . t3 k6 C4 y8 d% i$ o4 ~# g

  206. # p% I) G7 G" e7 }
  207. BOOL CRevAppApp::UpdateLocalVersion(void)/ R" {5 N) f! I
  208. {
    3 w; O. @7 I, K  ?' w) f. i( i
  209.   char filename[MAX_PATH];
    1 L0 H) Q3 v( w8 B
  210.   LPUPDATEFILE file,olds;
    5 M+ Y, \/ E( `
  211.   std::map<int,CString>::iterator i;
    # J7 B# w# Y2 X/ V7 |  S! |
  212.   std::map<CString,LPUPDATEFILE>::iterator p;5 c% H- ~) j3 z
  213.   std::list<CString>::iterator l;4 g0 c+ K( s( b

  214. 1 g0 c0 \: d1 H& q, C/ [1 F3 r
  215.   if(bFirstUpdate)
    4 e, @( z. l) j8 K& j9 M1 T
  216.   {5 h8 K/ i# ?& \5 m. X% e# u* j6 t
  217.     dwCurrFile=0;
    ; {, F2 h. t6 L( t8 `- P
  218.     bFirstUpdate=FALSE;3 ?8 Y  I# p: o2 M6 E# K9 @6 r
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 `2 I; ?6 E- }
  220.     {7 T! u8 l9 n5 x: m4 Y# |
  221.       dwTotalFiles=UpdateLocal.size();
    : @% S$ M2 P  Q' O0 ]6 X6 F
  222.       dwDownLoaded=0;* }, u5 @+ y4 V7 Y! l& |  }& A
  223.       bSilentStep=FALSE;
    * T' {! y2 c6 W1 h, t( s( T
  224.       bCompressed=TRUE;
    - f! s8 i1 {; ?
  225.       strExtLocal.Empty();1 f( q& C% b, H5 ~
  226.       strFullName=(*i).second;: L4 _; p9 I. V& @+ s0 H
  227.       dwProgramState=AP_CONNECT;
    ; H2 \' A& q# x  r; z" D5 J
  228.       return TRUE;5 F0 n1 P; p( _* i" |
  229.     }! b+ P% @3 p# N3 F7 |
  230.   }
    * \0 f/ E. `, e, ~$ ?# C
  231.   else if(bRestartUpdater==FALSE)! t* b4 R. F5 v) s2 B. U
  232.   {
    : q- |6 \4 P) B+ H# l/ s$ B
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    . R9 A5 x. `5 H0 U" u  j; N2 F2 l
  234.     {7 ~. m# x6 j* A) I! Z0 Q6 B1 k: K$ [
  235.       file=(*p).second;
    9 U( J# L  v- |  Z
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())% Q# }8 P7 L. G( D
  237.       {1 ^7 T2 z- C/ C: \, v  u+ X/ G# Q
  238.         olds=(*p).second;7 N+ N$ E) W9 M3 V0 Y; \
  239.         olds->vers=file->vers;$ O- w+ _; U) E8 ?* p  j
  240.       }, k0 S: g- X9 z$ z7 h! _3 U& O$ f
  241.       else. G; ^% b) H% B! x' G
  242.       {/ z- ?0 V4 z/ ^- O1 @, m1 t
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- u$ z) E2 ?# y, J' ]/ T
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    & M- o" ^, p: W0 y7 F
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ) |3 y- s1 e, _( E4 }, u
  246.       }9 I* i  i' t4 @* t( k
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");$ Y' q3 K9 L- k! u, N& r
  248.       sprintf(filename,"(%s)",file->file);
    0 N; J0 u2 q  j+ p
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 d) [& n* _, h+ o6 g
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    6 H# m8 C- [+ C7 X3 N
  251.     }
    4 @7 V% P0 v/ M5 o0 Z  s
  252.     dwCurrFile++;. v3 k' m! a5 g6 N4 P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): a1 h; ?' R7 V$ x( A1 F- _6 z
  254.     {
    9 q3 B/ ]( Y, p
  255.       bSilentStep=FALSE;
    9 m' |% s, Y, `* D4 |
  256.       bCompressed=TRUE;9 a( i. X/ }$ q* t- g5 G
  257.       strExtLocal.Empty();5 Q. p" F: s" o
  258.       strFullName=(*i).second;
    ( N6 `& F1 D6 Z* i4 ]2 B- w
  259.       dwProgramState=AP_CONNECT;' `8 s9 S1 v& s+ y
  260.       return TRUE;
    9 `5 ]( P# h* t. q" l$ f
  261.     }
    ! G2 P8 G: I/ ?. {7 k
  262.     if(!bRestartUpdater)& U  `* F3 {  |( T* K+ ~' l* Y. T5 v
  263.     {
    1 h; h5 F. G4 c6 [0 k# a7 i
  264.       int iCurrSize,iFileSize;' F2 {1 d/ V( y0 }$ P: a( U$ Q+ r
  265.       iCurrSize=0;- o: I) o) p+ c3 S2 d" i0 U
  266.       iFileSize=UpdateList2.size();! s( m1 _9 l+ C/ ~7 p' E' ]
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");5 X8 Y! _- _( Y( g$ i- D8 ^
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    , _8 H5 o; H( o% _7 n% j# t
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    - K% m  C' ~7 `' l( \3 T
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 K( [4 v! S& g* W' Y0 l# ?! Q/ T5 u7 G
  271.       Fclearf(".\\update.dat");* e! N& Q% K/ x3 _( I
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    " }6 ]: X% s- O5 x: X- v
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)( ]: d" S  j9 B, y3 ?
  274.       {! u/ d6 |& l( M$ s# ]9 h; W
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())) g4 ]* _5 a) L
  276.         {
      `' e4 [  C; `$ M; s( @2 B) q1 h
  277.           file=(*p).second;
    6 Z# `% U4 b* @" B7 \* Q
  278.           sprintf(filename,"(%s)",file->file);
    ; H; K# [, M* V+ K4 L
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 v# w7 J2 r7 w, Z. d. k/ q( w6 x8 P
  280.           iCurrSize++;
    3 r( Y, x- [* t' O7 `
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ; n6 i/ N( |# ~' e) S+ G$ l
  282.         }$ V1 @5 \# S2 ]' k
  283.       }" V, X7 [3 |+ r" y2 E. [
  284.       unlink(".\\update.txt");  o) K. [+ y) |- m7 R
  285.       unlink(".\\update.tmp");+ W) }5 a" e6 p% w9 X+ D
  286.       Fclearf(".\\checkversion.dat");
    . [3 x( q* K7 V# \. {
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    7 V0 e  F6 H5 I) ~
  288.       if(UpdateLocal.size())
    $ a6 y" ^. z: o0 \* R* k
  289.       {7 N$ _  m! v  p( e; l
  290.         UpdateLocal.clear();
    + p/ z4 H+ ?0 Z8 M3 g$ H* `7 c
  291.       }
    . u5 y6 a$ i. D( s
  292.       if(UpdateFile3.size())
    3 I3 q8 t- x4 L. w/ g
  293.       {
    : q# n5 e$ K5 v
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 u; ?& _4 S, b& \& A( g/ e8 n
  295.         {
    + ]! E9 r! V' T2 t
  296.           file=(*p).second;
    8 @  C" G6 [+ J" ]0 Z7 A4 l2 D
  297.           free(file);
    6 I+ p: T! y( z  b5 c) A
  298.         }$ b6 z4 A  e3 t' ~( {; Y2 `
  299.         UpdateFile3.clear();
    . q) ]1 s/ }, t$ J+ B/ h
  300.         UpdateList3.clear();0 w* ~6 D5 D# r' F* J0 o
  301.       }
    2 O0 j  f0 ?1 F$ P: @
  302.       if(UpdateFile2.size())
    . K& j; `" g& T
  303.       {* D5 o- C- Y* _5 J1 P0 q
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 c, U( _( N# P
  305.         {
    + p2 L6 A+ S3 G$ T, ]# p( r8 ^
  306.           file=(*p).second;. F; t1 K* A' k7 ]' `4 i
  307.           free(file);6 G: w0 q2 c: w# c! d; g
  308.         }
    : i/ K5 t# c+ n0 ~& [0 e% {: \% O
  309.         UpdateFile2.clear();2 a  _( \. O  t3 r5 l8 l  }5 ?$ j8 T, U
  310.         UpdateList2.clear();5 @- W1 p+ X: J# p
  311.       }; j9 L4 j8 O6 L- ?8 J
  312.       if(UpdateFile1.size())
    4 y$ B% ?1 z5 t3 ~7 Y
  313.       {, g( [  D1 ?6 ]
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    * O' T; H( }7 e
  315.         {6 q6 f8 L2 ?: O' L% W, q
  316.           file=(*p).second;, T2 r  O* a- c4 Y( Z7 N
  317.           free(file);& v3 G+ J$ X3 x% Y2 ?
  318.         }3 A* A6 b# D& |0 A( ?  ~
  319.         UpdateFile1.clear();; O& w& M, }( o4 a$ C3 h+ D$ G- o1 A
  320.         UpdateList1.clear();6 k' Y, W2 i) N- `& L  z8 z5 K2 C
  321.       }3 W$ w  W. \% M6 @! X1 Q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));) ]6 f' u( i9 E$ ~9 z
  323.     }- h/ j/ G7 L* ]- X' d
  324.   }3 b; ?1 r4 d, J3 E: T
  325.   return FALSE;1 `6 {1 Q# a' J2 h+ b3 l
  326. }
    1 P& D2 C% Y& s7 [

  327. 4 O% `' V  K- }6 m0 {
  328. void CRevAppApp::ClearAll(void)  Z+ J  u* \4 R8 N& L5 p* o& g& e
  329. {
    8 |/ y6 J; ?+ k$ d3 Z% @
  330.   LPUPDATEFILE file;8 G6 C" e9 ^3 c* L8 x: G
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 g# G2 W5 g* D" T# k4 k- k

  332. / A9 o# a! `% T- Q0 g
  333.   if(UpdateLocal.size())
    ; P  r: p" s8 l/ {: v% J; U- C! a
  334.   {+ F0 X. z1 g& E2 }  K6 [' ]' T0 L
  335.     UpdateLocal.clear();
    7 B0 j4 i/ V. M. U2 z3 B
  336.   }/ Z0 d# Z" j% B" J; Q! _
  337.   if(UpdateFile3.size())
    1 h/ w$ h& M, c* U$ J0 h
  338.   {# |# h, B6 Q" _% [7 i
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): E/ q7 k! c1 t, u' e( N* C
  340.     {5 [3 {' F4 g; t. |  C( e
  341.       file=(*p).second;( Y3 P( C1 ~- V& d6 Y/ w9 O
  342.       free(file);
    . Q0 F; h0 L8 k& v
  343.     }/ v" R; R5 D. G0 W6 L
  344.     UpdateFile3.clear();
    " ?7 s6 m* v, u' b' M4 B: W
  345.     UpdateList3.clear();& O8 L, T  D9 D9 E
  346.   }
    % b/ G+ y6 o( J; p; ~6 M
  347.   if(UpdateFile2.size())& R/ i% R+ n! o3 ?+ v5 a  t
  348.   {7 U0 C/ _% r2 I# o4 c
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! a$ X9 u- C  [  c1 M! \
  350.     {
    ! N( u$ Y! n0 s; w
  351.       file=(*p).second;
    4 }7 T1 ^: w2 X7 z9 o9 `' w: s  b
  352.       free(file);$ j2 k; `& B& X* |, H- G* L
  353.     }
    ' x/ z9 U; x/ S, V  d9 }; z. a
  354.     UpdateFile2.clear();- ?3 h5 k6 I' ^* F1 c$ Y
  355.     UpdateList2.clear();
    / e% [# C$ N4 Z  B
  356.   }
    : L: O" C" |( e& V( i
  357.   if(UpdateFile1.size())2 F$ t( _& t% ^- k+ j6 D& c
  358.   {
    $ {& Z' p; d2 X9 T
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 e0 m4 Q) {. H3 c
  360.     {; k  X- M* E3 P  P
  361.       file=(*p).second;& s" E3 S& D* x% O" @5 K
  362.       free(file);8 H  q' z, Z/ r9 B: N
  363.     }/ Y& z( C6 q1 A! ~' g
  364.     UpdateFile1.clear();
    $ Z6 W& t! ]* @  a2 \* g) ~7 Z
  365.     UpdateList1.clear();/ N% J0 M6 o; r5 J% j
  366.   }' ^+ V0 |4 }- u6 ~+ |9 z
  367. }    k5 v3 \; f& S4 F2 g
  368.   
    9 _) v: a5 E; q" e) l% i! j/ ?
  369. BOOL CRevAppApp::CheckLocalVersion(void)3 C, I; u2 Z6 w/ C% G, `, z/ u& d
  370. {
    6 W, ?- ^" c7 t. B( P
  371.   int c;
    0 Q4 s' d6 H4 R9 X  D8 b
  372.   LPUPDATEFILE file1,file2;
    : P- [  I! K9 w# E" S6 J
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ! J" O1 \# [8 B
  374.   std::list<CString>::iterator l;
    1 g" P0 |  o* m

  375. : M. Z9 l* Z/ a- u/ @, ~# b& h6 L
  376.   UpdateLocal.clear();
      L, ?" d, \0 ?2 z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);; L" l9 m+ H) T! Z4 \' }
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);5 j$ O) l& V, I9 |3 @
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);9 g0 b/ ~7 z; r4 o2 s
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ' ~/ Q5 y; z7 b# A" L" T& i
  381.   if(UpdateFile3.size())8 j5 F, p2 G' w* J2 ]2 O
  382.   {0 {3 K- Y" D; W
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    # C. q# ?2 O5 U, B, }' M3 l
  384.     {, T0 |! _) F! F* _
  385.       file2=(LPUPDATEFILE)(*i).second;
    6 P) j0 K# O* F3 s& l- e: [' K
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' y/ D3 ?, F0 a* w
  387.       {. X( ^, N% y* G  C7 ?# V
  388.         file1=(LPUPDATEFILE)(*p).second;
    ( B6 m( N3 X: r5 f/ g
  389.         file1->vers=file2->vers;
    4 I8 u8 a& h' \& G7 v* B, t
  390.       }8 X( ^8 X/ A/ J# H& P, I/ Z' h
  391.       else
    8 I9 w$ r# q; y8 K+ K
  392.       {4 u! S* Z. ]5 ~$ G5 V  s8 G
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " I8 w/ s2 W2 ^8 u
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    % q9 s8 R$ w$ ~0 N0 T
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));' K& d) I6 Z2 W& b" ]" x" ]
  396.       }
    , D1 z5 M) h: R
  397.     }9 u- p+ T7 a6 B" v5 E
  398.   }
    " q% X0 t# u* t( A
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)6 S' r; g' Q& v+ [! T+ q, A
  400.   {/ b0 a* M8 u$ J- K6 d/ a
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ' H) l) n6 D, h3 j2 C( v
  402.     {
    7 Z% E5 u" O% M& x% Q" c& O
  403.       file2=(LPUPDATEFILE)(*i).second;* f. {5 T. F3 o$ h0 o( M
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 Y' W5 F" p8 H0 U0 v
  405.       {  |' \; }, P' U' E5 u4 t" q
  406.         file1=(LPUPDATEFILE)(*p).second;
      w/ E+ T7 b4 v6 K" b4 b0 V9 \
  407.         if(file1->vers!=file2->vers)/ e  _4 J2 P* K9 h
  408.         {" d2 y9 n: K9 o
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; J7 L) K) K; S+ e9 L
  410.           c++;) e  J5 _4 P" y* U7 `
  411.         }# U2 P( i" _" N; I
  412.       }/ e2 [; N5 d& X" L' c& J
  413.       else
      x  y7 _0 [1 S& {
  414.       {8 s0 m; q8 e" T/ x7 j' `/ b0 j- }) J/ c
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" v9 u- I' o! }9 X: ~" G5 u
  416.         c++;
    ' Z) |8 O) ?3 n( @" G( j
  417.       }" g6 H6 Y/ _% b4 b, B8 @+ b
  418.     }/ _6 |" k7 Q3 L& d% f
  419.   }' w7 }* ?$ x: @3 Q, E1 _
  420.   unlink(".\\DownLoad\\update.txt");! k5 N" t9 W- F/ U& n5 V
  421.   if(UpdateLocal.size()) return TRUE;$ |/ ]* p9 B+ m# F2 Q- `
  422.   else                   return FALSE;# {  @% r3 H6 M5 E5 p
  423. }5 H/ k, `: o7 c( g

  424. ' W: }1 Q; R3 y7 a+ f* S
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    - k! K( }# a. R( G* l) q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"* T) a5 ?4 A$ V! q) Z% x1 a

  427. ) ^, U$ V# |8 d& t- j# l

  428. # r$ a1 q* W3 S- J9 z
  429. 2 w5 x6 X( q9 {1 b9 b$ n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)6 f0 h4 ^# Y: o
  431. {. E4 ~' x4 ~' t- w; D
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;' Q/ R  K. x" U3 e, M# b1 B. u
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - B# Y$ s& m1 N1 b" ]
  434.   {
    * i1 w6 {5 V( `  Y
  435.     char szLanguage[50];% s0 ^  |- [. ~6 U# a; @2 O
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * s; ^7 K9 s* g4 a% X1 o5 m( \
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % {' m9 A8 P* ^% C& A
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' W2 k/ @5 f  J3 a, b4 v- S4 ^
  439.     else                                   m_iLanguage=ENGLISH;
    9 _6 P! L9 B, u' h' m6 M; b
  440.     char szRegister[100];% Z9 m: A$ @1 k3 e3 Q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . F: U  w( `. l
  442.     strRegsName=szRegister;
    2 |/ ?6 ]. Q; U6 D
  443.     char szPatchURL[100];
    $ C. i7 o5 v0 y. N+ M% D
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * t0 x/ }) V) X
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    . p% u. ~( w  w
  446.   }8 ~( Z* h9 {2 F6 ?( h0 h7 {
  447.   else1 Z  o5 ]/ @' i; M
  448.   {/ ?7 [- u& ]4 G
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( a1 [) c3 B$ c( D
  450.     strRegsName=DEFAULT_REG_URL;
    # C% q" {. Y- q7 W
  451.   }
    4 [0 X. s2 C/ _; N: n& \& x
  452.   if(GetFileAttributes("hosts.ini")!=-1)0 d" p% g2 Q1 o. B  B
  453.   {
    8 Z( d" w( R& u6 I/ s& v! A
  454.     char szIP[50];2 Z0 R, `) Z  Y
  455.     char szDIR[300];
    1 V1 q, A, I. O9 I& p9 B
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))6 X7 ^/ z9 u$ j5 r2 M2 N
  457.     {
    3 O# I; M" ~* L) k# R
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    # M* x  N$ A4 m( u5 Q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");7 P! M" Q  B" g8 C# X
  460.       strHostName=szIP;! ]5 B! T- o; H. L
  461.       strHostPath.Format("/%s",szDIR);) @% y  n" L  D& b  E7 k
  462.     }  \  X, o! Q; m% T
  463.     else; l% C! Z; {. E5 j# U
  464.     {4 m/ _9 W' A2 K" K" x4 k9 b+ W
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( O! A* _8 ]; I! ~/ w9 c/ Y( s" ~3 e. s
  466.       {! A3 }  }) ~; u/ n
  467.         char szLanguage[50];8 x3 C4 k8 {1 g3 Y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      h4 n6 D" s! F( |8 c
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- F- E6 W* B: U" [1 M
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; D- g! n+ B; j2 i! \- C
  471.         else                                   m_iLanguage=ENGLISH;
    1 q, `( d9 d$ [* J1 [% X) n& x
  472.         char szRegister[100];: o$ n& n' b/ c3 {
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    3 u4 ]; S0 L: J; k
  474.         strRegsName=szRegister;
    5 X3 ~1 l9 w" v0 q
  475.         char szPatchURL[100];
    7 w( ?6 @: b" ]- b2 b
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . t. @( J$ }0 T; L- s
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% m9 W2 u5 ^7 y7 d% P& W; ]
  478.       }1 v  j, s4 A+ {+ g
  479.       else
    $ c; Z8 I+ p$ t! r  y
  480.       {
    . f$ ^. n& M* r! a1 A6 l; l: [3 t
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! n! a- j- q8 |- w! }) s
  482.         strRegsName=DEFAULT_REG_URL;" e- E9 d# Q# F1 [/ ]% {* v
  483.       }
    " S+ j* L' D* V, ?& T; b
  484.     }
    : k6 T" b# b  l" V0 C
  485.   }
    % N6 ^( E5 y* I0 g
  486.   return true;8 k" i" c# k/ \4 {" b
  487. }1 C1 j4 d+ }5 Q/ R

  488. % o" b  s- G! C* o* ~& [7 ?% g
  489. #include ".\ZLib\unzip.h"  L5 N4 r# s: b; `2 W2 {
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 F0 Z# r- H4 M7 Z. b) B
  491. /////////////////////////////////////////////////////////////////////////////
    , F3 R2 w2 Y: Y0 w; Q
  492. // CRevAppApp initialization2 t) J# E% K: e' M7 R# b7 }

  493. ; T6 z6 y- Q4 t0 `) d4 r3 n
  494. BOOL CRevAppApp::InitInstance()
    & H& }' A1 r4 o" M
  495. {
    ) H6 `5 k5 x, ?9 \) m' ?, g
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];$ o4 y  F% o9 w6 Z" K0 c
  497. 3 y4 j% e7 h' \, H, L; f% A* J/ P
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);% F0 t- H7 P# E' @0 O: p' `
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))" a- u# N0 z' l7 F
  500.   {
    / y8 m5 @! H" B$ w  i
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");& n7 g! J5 P# E% ^1 D6 O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % S0 D; \0 G5 B
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))* ~9 T5 \0 C; C: O7 \5 Q; i
  504.     {
    - p: l( T6 r! _* w
  505.       strcpy(szPath,szPathTarget);5 k" v4 R; @( Q" F7 }" U' _! T
  506.       SetCurrentDirectory(szPath);, W' K$ _0 x% b
  507.     }
    / U- e" z- w: C& F
  508.   }
    * e$ Y: s9 n+ D2 X+ Q5 I& a! S& G
  509. #ifdef _DEBUG
    - o) v$ B7 u+ Z1 p/ Q2 j0 l9 r# N
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( |, {% V) }2 L7 g& B: V
  511. #else
    : O3 a% Q( v* I8 C0 p& U' g
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! }  J0 p  {5 o. q* G5 P2 ~
  513. #endif4 C5 u  G9 f) C2 ?" `5 `6 ]0 b& U
  514.   {4 P# ^: Q! s1 `, ?
  515.     char tempFileName[MAX_PATH];
    2 ~2 Y4 R/ T. }- _
  516.     strcpy(tempFileName,szPathSource);
    0 n. l$ b! @( ^' y5 U
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ' O5 I8 O4 D: F, T
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( l9 \3 L. T2 a
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 e3 |8 q- u7 |5 m# A+ E4 j
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ ^5 _7 n" Q' p' D* N
  521.     return TRUE;  A& e: ?# V4 |; \
  522.   }
    ' ^+ W5 r: T5 H$ s
  523.   // Nuke 0118: Delete run.exe0 F2 b# d, [  i; @4 @# ]
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );: H; L& d/ B( J; c
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");- G4 T; |: l" `
  526.   if(!ReadCfgFile("Config.ini"))8 e: a) L% X  x: G
  527.   {
    . k+ o2 R, K8 ], S
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);& k( m+ f" o; g5 @0 `
  529.     return TRUE;
    $ W% c  J4 ]$ y4 i- s, @% v( B
  530.   }
    % \- c( \: V' B. Q6 K
  531.   HANDLE mutex;
    & ?8 L& y3 n2 W. K! {
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))" P2 r6 B  ~3 C2 ^& V
  533.   {
    3 }  c6 p+ F) O1 [- a8 N3 z
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS); n* z$ N- r* q( b
  535.     {
    ; E# q0 D! @) M9 K/ ~: v
  536.       CloseHandle(mutex);
    ( o( }/ O' m" q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    $ b" v8 u; m, t& V, R- \; c
  538.       return TRUE;
    0 {7 x( z$ \+ G  M* Z" H
  539.     }2 @0 c' p7 q+ _  q" F1 b' c* E
  540.   }  3 j6 R3 V. ?# S. `' ~
  541.   CloseHandle(mutex);
    6 C( |# r- n# q3 }  B" U4 B  M. c

  542. ; e8 K' f. w& u
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);8 k) M/ l/ g3 k  }
  544. 1 l' Z0 `$ `9 H0 f: v5 n
  545.         AfxEnableControlContainer();# H- B6 d; s# p

  546. ( L* j0 ^0 w) Z3 \8 Y
  547.   bCanUpdate=FALSE;
    0 e8 T% p+ Z, j# v" M- ]- b' j
  548.   dwStartUpSteps=1;
    , D. v* ^8 c5 z' c: s
  549.   dwProgramState=AP_NOTHING;
    : h# s: w* l  ?4 H( `6 u
  550. ; v, y! ?+ |/ W9 ^
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    $ _6 h5 Y, U7 G5 e

  552. . t/ R# g$ J: d3 C" ~6 C  K
  553.         // Standard initialization
    # U' H! \/ A. S* D
  554.         // If you are not using these features and wish to reduce the size
    + ]5 {6 Y2 |4 ~/ J6 {( x, k
  555.         //  of your final executable, you should remove from the following
    0 j0 [0 Y0 [: K  W: |, }
  556.         //  the specific initialization routines you do not need.# S2 j0 I6 C2 w# e) G+ S- @0 [
  557. 2 [' N. F+ K1 i% L& @
  558. #ifdef _AFXDLL
    8 N1 u/ h  R3 h3 q
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    * g' y$ {' J: @, {: f6 G! T5 H
  560. #else
    4 x$ j3 Q5 E: }  x: B1 I" d9 L
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically* ~% J- w! H- S8 n; e% z
  562. #endif
    , h( Z+ z( e) B. z3 g: I

  563. ; c/ g! S* h# z% V1 N" m6 C
  564.   dlg=new CRevAppDlg;6 r  m* R/ K2 Y' h! z
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    / N$ f% `. a! K6 S& H4 g
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    * o% z# X! X6 t& @4 W4 C/ X! }* T
  567.   m_pMainWnd=dlg;
    ) g5 C1 I$ s9 S" E2 \0 _: J
  568. 3 r. v4 T$ E" p/ [" _  E
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);/ R1 q6 M/ t+ O1 T7 S' s
  570. ( V& g5 K, F- n- e% g4 j
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ( D3 ?$ d2 S! U, l
  572. //  ULONG_PTR gdiplusToken;7 Q3 f6 W9 N+ O4 ?1 f7 ]
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 \) w  p8 `2 n1 h
  574. ; V+ M7 r  |$ l) ~8 K
  575. //        CRevAppDlg dlg;
    - L* e- q6 f* u6 V4 m
  576. //        int nResponse = dlg.DoModal();! l- ~1 w, S6 ?- F
  577. //        if (nResponse == IDOK)
    0 F) {6 p" R: _; Z9 X. I; z
  578. //        {. @2 L) a9 H+ N4 p$ b
  579. //                // TODO: Place code here to handle when the dialog is
    " n7 f3 s8 N: s- }9 l( t+ Q: u2 f
  580. //                //  dismissed with OK
    $ x% P* e0 Z$ m. ^# c6 M& Z3 H
  581. //        }
    ( `# G. R3 X3 k0 M6 `1 L
  582. //        else if (nResponse == IDCANCEL)$ P) H0 Q3 s% {0 N1 V7 S1 n) m, h
  583. //        {$ z8 j" {; s2 J
  584. //                // TODO: Place code here to handle when the dialog is
    8 f* y1 f# z% |: n" [9 [; A
  585. //                //  dismissed with Cancel+ j0 E3 A" e: M* B6 u: n$ z
  586. //        }
    * v3 m! T0 |9 V8 y. y6 [

  587. ! `, v1 V4 q6 m! j6 U
  588.         // Since the dialog has been closed, return FALSE so that we exit the; `3 _/ c8 m+ s4 R
  589.         //  application, rather than start the application's message pump.
    # e& e$ N- r$ g6 s) C8 U
  590.         return TRUE;
    # u' D$ a% ~0 i; O% K8 r* s. z4 l
  591. }& L3 ^. h6 V" k  `5 X( Y5 b
  592. % R  B( C9 o% Z& ^6 w
  593. char *CRevAppApp::strtok3(char *pSource,char *token); h( z; D2 C/ C  q$ V+ q! z/ k  T
  594. {
    ; S! K, n. u9 M. }
  595.   int i;( L' X; J6 J( b  g+ u
  596.   char *szRet;' U6 \: u8 ?$ i, \- a

  597. ; E  v- g( d2 x1 H! X+ Q
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ; w' M+ |# I. t6 k/ q% p' d( J8 V
  599.   if(sztoken)
    : x) s3 V. g' C7 ?
  600.   {
    9 m9 B$ n9 U' m7 K: u0 O' C* s
  601.     szRet=&sztoken[itoken];
    : `6 U+ C8 t3 ^# L- J
  602.     while(sztoken[itoken])
    ) v1 }6 t3 A3 ]: v2 U
  603.     {
    2 ~9 J" M5 b: |) f
  604.       for(i=0;i<(int)strlen(token);i++)7 X4 @8 v' X" E5 ]6 |
  605.       {1 q+ F' i; l1 m
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    + X: q3 ^7 r2 K) y! t( A9 c
  607.         {1 Q5 c; e* |5 A" S3 t) O. h; O
  608.           sztoken[itoken++]=0;$ R6 A3 e4 r9 p9 q* D
  609.           sztoken[itoken++]=0;
    ; ^8 T7 \& Y# ?! G6 g
  610.           return szRet;- T" B5 ^1 o/ b+ D- p+ W
  611.         }
    # g9 D+ U3 L  \. b$ O
  612.       }9 Z! k3 q. I$ U
  613.       itoken++;
    : T$ K9 c, N0 l2 ^  H  c7 X, m
  614.     }1 k$ M& {) S: E% N3 h% c3 {/ z/ V: {
  615.   }2 Y# J' R7 s/ V$ [. @+ @& f
  616.   return NULL;
    5 j! j) M1 ?0 w  |! Q7 G3 s) [
  617. }
    5 e- u5 O' K8 T' ^9 {
  618. - L. e. B, x; u0 j: P! v( w$ f6 t
  619. void ProcessProc(long Total,long Current)
    3 v8 o( t& E. Y5 B+ b! W( d: N
  620. {
    + r# Z+ V8 s6 F, J, B
  621.         MSG msg;% G$ N" |1 M. a& J) ?
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    - T( S4 P9 f' c9 M& ]) j# x, L
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    9 F- J: s: [+ B" s9 I
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 Y, \! Q% w) U, J5 ]! k! u
  625.         {7 _; `8 x! }2 k
  626.                 if(!GetMessage(&msg,NULL,0,0))1 U1 k9 V8 B: x: L" S- G
  627.                 {+ h& H* s8 P5 [: ]5 }8 F
  628.                         return;
    ' o8 |; \7 h1 C( w9 X
  629.                 }
    5 |: L9 A$ O5 n% d3 P- n
  630.                 TranslateMessage(&msg);: b" U( x  G1 V
  631.                 DispatchMessage(&msg);
    2 ?0 _1 A" B" S* g# f
  632.         }        ; o- w: K! C, |
  633. }; w3 j8 N7 G9 f& l) `5 [5 c) P" P

  634. / I+ n, ]6 o- o3 h8 l+ x
  635. BOOL bFirstChar=TRUE;1 Y+ `9 {% P  o
  636. + j1 B1 v" x$ v  N3 Q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    7 B/ u  }: q" U; ]* d, j2 f2 ^. ?
  638. {$ \# k: \& [6 Y
  639.         // TODO: Add your specialized code here and/or call the base class6 k$ e! X9 |# K8 {
  640.   switch(dwProgramState)8 E% G# H5 Z) J$ H- [
  641.   {
    : Z: T2 c; c1 R3 g% M# [
  642.   case AP_NOTHING:- |- }4 z& a  |8 r
  643.     switch(dwStartUpSteps)
    % B" o. j- T# O3 U/ Y+ {
  644.     {
    ' V$ k# t9 D$ ^7 j9 ^5 e7 Z9 C
  645.     case 1:1 c. ~$ t) H/ K- F1 R) i
  646.       {
    ! e  M6 _! e( ~: ^3 B5 q9 f
  647.         int i;$ P/ [: K5 Z; g3 F+ ^
  648.         CDC *pCDC=dlg->GetDC();, @/ s7 K0 W6 v
  649.         HDC hdcwnd=pCDC->m_hDC;8 n" R" ]! i/ J/ H% G  p2 f
  650. //        Graphics graphics(hdcwnd);
    , ?: x6 K4 F7 D& r- H
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");3 o) j8 K! m4 r
  652. //        INT iWidth=bitmap.GetWidth();
    ) c( Q- \% H1 i/ Q" L
  653. //        INT iHeight=bitmap.GetHeight();3 n7 n( Z- u6 x7 P; \; s
  654. //        Color color,colorTemp;* N/ c3 _* z& `
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)6 x4 k+ M+ f; Z0 ~. M/ v( Q7 h
  656. //        {" D0 ]- `3 |; N+ L) q, C
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)6 d' y; j' V* ]6 x. v
  658. //          {$ w- g4 N! t3 M$ r. E5 c; U
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    , M  O2 R( P8 W* C$ y; w
  660. //            colorTemp.SetValue(color.MakeARGB() y+ M0 J/ b0 J6 C8 P* }
  661. //              (BYTE)(255*iColumn/iWidth),8 A; Q7 H" z4 ?" T& A. ^
  662. //              color.GetRed(),
    : p" q# f1 S9 G' q: P0 A5 r
  663. //              color.GetGreen(),( A9 p, A2 T( E* c! r1 z; L
  664. //              color.GetBlue()));
    # Q" Q; p: D/ t5 U2 L- ~" U+ ~/ `
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    - e2 _4 N- i$ Q
  666. //          }
    4 u" Z) W! W, [. x: X
  667. //        }
    / [0 \8 V' V+ Z  [
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    : e3 H0 j8 ^" a6 Q" B. v! L8 y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# `5 ?: J. G' c, e
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
      ]9 j8 S, t7 l" ]0 [( N; Q4 @
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 N6 [; i" O8 b# U; [
  672.         for(i=0;i<240;i+=8)5 y% G3 D- Y3 L+ [# l! Y% H2 K
  673.         {
    + G; d8 r$ _! h- Q( w
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # j9 W: |3 N1 ~  r
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 Y8 y0 m, I9 y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ w# h1 f2 V9 v" y
  677.           Sleep(33);
    6 Q; n; _# I  w" S0 Z
  678.         }
    , `0 k& B3 x( \# m/ @* J/ q
  679.         Sleep(1000);+ I: i) Z* o/ T- a' W/ L+ d
  680.         for(i=240;i>0;i-=8), d7 n$ B$ Q7 f  E  g& }
  681.         {) W7 y( S2 q! U$ G, \
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " R# P6 n% s* u6 S8 s/ i6 ^
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 h! I4 }5 ]6 [5 a# e# M
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " p+ @/ b( C$ X& f7 [, b
  685.           Sleep(33);
    " j+ R; Z2 U0 S& P" S
  686.         }
    5 l! S7 Q; w3 d
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);8 j- ], ?# |% }7 ^- H3 {" ~
  688.         dlg->ReleaseDC(pCDC);4 D# C% |5 {: d% r3 d8 J2 _* c$ ~
  689.         DeleteDC(hdctar);* M7 I/ s' s. d% B& _' ^
  690.         DeleteDC(hdcsrc);
      M3 `: n# P1 g; p4 G) N- M! T
  691.         DeleteDC(hdcorg);
    6 E, j5 x& G& H
  692.       }
    6 W$ A+ @. j/ R" A# ~6 u
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);' h7 A) X4 N% j' V  T+ R
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    # A  ?' T7 Q4 B6 }8 b: _- A& G
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");  C! m5 }4 }/ b, [9 Q$ L
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 e$ p: t9 i- {: _
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * d3 p& ^* ?. ~
  698.       if(!Dn.Connected())/ [. N8 q8 B3 _2 Y' o7 g) y
  699.       {
    4 r4 ?/ x8 C- r- z
  700.         dwTotalFiles=1;" E0 l8 d9 {$ J& |2 ]( T% V
  701.         dwDownLoaded=0;% r' y- s6 D2 M6 n1 @* Z
  702.         bSilentStep=TRUE;) l6 a" X3 ?5 l) {9 B
  703.         bCompressed=FALSE;
    ' m5 u% h2 G3 r, E# d3 x
  704.         strExtLocal.Empty();. T7 G: r7 D( @- x5 |5 \+ W' r5 _
  705.         strFullName="readme.txt";6 T- r9 o0 ]% F8 i) j
  706.         dwProgramState=AP_CONNECT;( e8 I0 E/ _4 D, ^  v4 y1 K
  707.       }9 W3 |8 K' a# q( J, E* S
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    9 q/ b2 z+ D. M$ c( R+ {" G
  709.       dwStartUpSteps=2;, g: c! \& z9 o! h: A% E0 z) H
  710.       break;8 ^' f  J# H) W) S
  711.     case 2:
    . \4 `- T+ A7 |) K7 i0 i
  712.       {# S7 \' e8 W$ c) S; R8 d
  713.         int iEOF;
    # f6 O& R/ L$ ?6 l0 a7 W
  714.         FILE *fp;
    0 k, o7 Y! x! ~: L+ a7 X- G: Q; L
  715.         char szString[512];
    7 d5 Y1 h8 E% S* J
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ! l5 t% l' D6 V9 o: y- s
  717.         if(fp)( K4 y- d8 U& r1 l/ v
  718.         {
    6 N8 ?. N0 S6 f4 s  Z& }
  719.           do
    # F4 o+ M* _0 m: Z1 W. Q. z
  720.           {. t7 Q% ~8 X/ m
  721.             iEOF=fscanf(fp,"%s",szString);" s, A* A6 d$ O9 j0 Q; Y
  722.             if(strlen(szString))
    7 o; G5 H8 }6 [6 v4 y
  723.             {$ @* q( I9 Z9 q/ X9 {4 N5 X2 j
  724.               if(bFirstChar)' e) E! u0 h, N6 x" E0 }
  725.               {( V! y8 h8 M& v5 J; L
  726.                 bFirstChar=FALSE;
    9 O8 ?- |5 ?1 [
  727.                 bConnectIsBig5=FALSE;
    1 t- v7 n+ Y2 K# M- E3 U
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    # k6 Y" x( @. r7 p4 Q
  729.               }; _8 j* X! T, z+ [' w
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));0 ^; ?2 q$ \. a3 o& f3 ~5 P2 z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    7 E: e" \" h/ _1 D% Q: [2 y  @
  732.               dlg->m_ListText.AddString(szString);( H; e% b: W9 N7 P2 q  ^
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* W- P6 m& z& s6 Y% _
  734.               *szString=0;
    % I# m  s3 X7 p
  735.             }5 |( y: c2 `5 }; T2 C- J
  736.           } while(iEOF!=EOF);
    : t" v' U2 }  p9 n) x" A
  737.           fclose(fp);
    . q8 r$ g! F0 Z" e5 j* m
  738.           unlink(".\\DownLoad\\readme.txt");
    0 L* ]# K5 X1 N9 S2 l& E" K
  739.           dwStartUpSteps=3;  G& o# f0 |7 \. r; j* W9 X
  740.         }8 ~$ b# j5 D" L1 C0 p, G$ B
  741.       }" v* K4 i9 _4 N5 u
  742.       break;
    6 e- |- g0 F6 @3 L# m( [) F' d
  743.     case 3:  f3 R" H+ o. `7 G+ ]
  744.       if(!Dn.Connected())% N( ?( T5 f" x/ U- z6 K& N' Z
  745.       {
    7 v9 |3 q' B/ {9 Z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);6 Q6 S! o9 f9 _: o' o5 N0 V) L3 Y0 b2 e/ \
  747.         dwTotalFiles=1;8 H4 k0 }8 [5 i+ q2 Q6 z% b
  748.         dwDownLoaded=0;
    & x& e" Z6 o- W
  749.         bSilentStep=TRUE;
    : j" G$ u( r; Q) y% H  _
  750.         bCompressed=FALSE;
    . i# W6 P9 B- P/ h
  751.         strExtLocal.Empty();
    ' D- U+ A' b3 K& n# r6 G3 l
  752.         strFullName="checkversion.txt";8 \3 @" V) u2 t
  753.         dwProgramState=AP_CONNECT;- x) ^3 C2 G6 ~3 D! n
  754.       }
    ) ~7 d7 `' x% x6 p: ~3 c5 f1 e
  755.       dwStartUpSteps=4;
    ; S1 |8 i+ Y" S, H6 U
  756.       break;
    ( L) c1 T) t7 n, v* ~
  757.     case 4:
    8 Y* G& I' V9 D$ E, y
  758.       {  v0 c" W% h7 L! C0 m
  759.         FILE *fp;0 V& f, X$ c( w% X+ n& N
  760.         char szString1[128];
    3 x0 W/ H9 F! h0 Z- R
  761.         char szString2[128];- Q3 F) {* l0 w; \
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    1 P5 k6 l  e+ P+ k+ |( Y4 s: N* ]
  763.         if(fp)9 S* a- |2 i  K( F
  764.         {
    8 \' `0 |& F) I' b/ g
  765.           fscanf(fp,"%s",szString1);
    6 I/ y. U; i! x; U3 N: o& s* o
  766.           fclose(fp);
    " |8 A. h$ T1 @  U. I/ g0 e6 X6 e
  767.           fCheckVersion=atof(szString1);
    : b7 ?2 ?. J  N: b
  768.           fp=fopen(".\\checkversion.dat","r");
    . E, b; y" H' o, H& N4 t) H) P- S
  769.           if(fp)* b9 {7 ~2 u, s
  770.           {
    ) Z9 _% b6 o# G8 {. [
  771.             fscanf(fp,"%s",szString2);
    3 o- o/ t. j2 p4 E) c& v
  772.             fclose(fp);
    $ I9 C. |" q5 K9 v
  773.             if(atof(szString1)!=atof(szString2))
    7 l$ K! L' v9 R2 t: s
  774.             {% r! \+ t$ o8 D+ u3 I
  775.               if(!Dn.Connected())
    7 x; R( c- |) H6 p+ [% }
  776.               {
    " l# Y& [+ A6 I# _. j& y/ j% r
  777.                 bFirstUpdate=TRUE;
    & E* H/ d* r3 q3 V4 m
  778.                 dwTotalFiles=1;# X3 y( k4 v0 \* _. d+ ?* z
  779.                 dwDownLoaded=0;
    - Q/ ]5 R* _+ e4 \
  780.                 bSilentStep=FALSE;( ~1 l4 t/ ~2 X: Q
  781.                 bCompressed=TRUE;
    6 Q( P  S" Y( c* t8 H. {* q
  782.                 strExtLocal=".\\DownLoad\";6 A( A0 d2 C% C' |
  783.                 strFullName="update.txt";0 k' g! e3 H: p* e( h0 ~! E
  784.                 dwProgramState=AP_CONNECT;: ~5 [2 N8 n' l, E% w
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' S( [3 d1 b5 Z$ N" J
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");& P& g% Z( V. i: f
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");3 t& j7 A9 U8 P6 N  F
  788. 9 `% U( Y: ~+ S4 |/ ?) T: S
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* r! r1 _# r5 @* X8 G( x* ~  R
  790.                 unlink(".\\DownLoad\\checkversion.txt");& H: a; W% V2 |4 ?# _
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    1 T) V7 I3 u1 c* U2 D: [( e
  792.                 {) @: W- c6 w9 L& q9 b) _# n8 U
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");) z* k4 M6 `% _) z3 y
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    8 z3 k7 ]! g5 Q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    9 q3 w8 x$ K7 _
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / j) e! k4 \9 `7 ?' V; O6 s5 R
  797. % P) P0 C2 l' z0 |
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 e$ p; H. K4 {! R! Q* P
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 r2 H5 H+ t2 D& z/ \" W
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 M5 B6 A5 \: H5 j* w
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 u) e+ m1 a" O
  802.                 }( [4 G) U- s* t, f) ?
  803.                 dwStartUpSteps=5;0 a5 l% }' S. @' |4 l+ o
  804.               }1 p+ U  Q, R# u$ V
  805.             }
    4 {5 j7 v  Q0 R
  806.             else* T. \& _0 f9 p9 ?6 s
  807.             {2 ?8 r- J% B( y  J( q5 z
  808.               unlink(".\\DownLoad\\checkversion.txt");
      u8 E+ ~. i7 k% ~$ c0 N3 w
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");) C/ @: }; a7 p( [' T" @/ R: r
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    & N! H2 A& N; p1 {& h2 Y
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");' W* A# M6 M& @- Q% j: G0 Y( f9 _
  812. 1 C1 ?4 H: T, |/ c& G! N
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( D( |2 j/ k2 D% y; F; B  u
  814.               dwStartUpSteps=99;7 D5 r+ W8 V+ k
  815.               bFinishUpdated=TRUE;
    6 y) ^% V1 [" ~! i2 w" \
  816.               bCanUpdate=TRUE;
    8 C/ e% a% K7 V/ x' j$ M( l) Y
  817.             }, a* O  m1 `: ]* w. R
  818.           }4 q2 ]# ~: {) P% I3 c+ T7 Y: T
  819.           else9 D& s3 z% d/ S/ E" n/ M/ d
  820.           {
    $ \' ]: i  Z) k! T  [% j) f
  821.             if(!Dn.Connected())
    & v9 g/ J: m  k2 F# I0 R
  822.             {( p1 z8 a3 Z. e8 n( Y
  823.               bFirstUpdate=TRUE;$ o# F4 l8 M6 A6 i# ]) U
  824.               dwTotalFiles=1;
    4 M( k& k' e' I5 d1 ?- {+ P
  825.               dwDownLoaded=0;
    1 W$ d# x' x* R+ o
  826.               bSilentStep=FALSE;
    6 w2 H: g& b6 u8 L/ C: I
  827.               bCompressed=TRUE;
    3 U+ V6 h/ M  `3 p, q6 W
  828.               strExtLocal=".\\DownLoad\";
    2 K! {& M8 m( }
  829.               strFullName="update.txt";
    ) E5 d" i3 W* d! s1 H. S" J9 p1 s2 E
  830.               dwProgramState=AP_CONNECT;6 _3 X( H: l. Z5 a5 g$ n
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    6 M' T! y' i6 [6 P7 E) K
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 w# m, }! Q9 W3 c' E1 i1 R7 Z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - q9 s2 v" Y8 [) O* H2 a. C
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , f, Y* d7 o: u* _
  835.               unlink(".\\DownLoad\\checkversion.txt");& F& i5 ~. a8 W8 w; `. t
  836.               if(GetFileAttributes("Wsa.zip" )!=-1); b( W% Z$ c1 o$ ^5 r
  837.               {3 ?8 T' j  T" u5 }
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");9 K# W$ F6 e; ]/ L/ f' b# \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");& H. _( J9 H  |
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");9 g' }* n: {% U! W  A5 g5 l# N' i
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' q5 q% g& J- I5 J9 B5 l, }- p
  842.                 " [- }% ^% c2 u* t
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# p: Q8 g& R& j& j3 Z, Z# S
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , P. ?& l9 u! Y2 z
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");; }3 a' O  ?' h! m$ r% h2 ~
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' [6 N2 n* s) F- H+ y* o& g
  847.               }2 C* \. B7 \! s& w3 ?0 u
  848.               dwStartUpSteps=5;& u0 {& j" \6 |; f  U
  849.             }: a0 G- R" [" g% Q6 q
  850.           }
    & j4 a) B: ]6 J! N
  851.         }
      _1 r3 \  |) ]
  852.         else
    2 O; y" S% d3 w$ X* o: V' a+ R( j
  853.         {" @! T, ?7 B$ l8 [+ j9 ~
  854.           dwStartUpSteps=3;
    ) e' g) D% g5 }* M
  855.         }/ U* U* H. E0 G
  856.       }
    2 l: R. e6 T# l
  857.       break;" F+ x( S0 t/ M/ o/ r: e
  858.     case 5:
    5 e& N2 J8 f; @' K9 R! [, c8 e
  859.       {
    . m3 S7 \- O3 K( h3 G$ g0 g  ?
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    # ]4 Y( Y* I+ O9 O! M
  861.         {6 F* m4 T) Z! F
  862.           int opt_overwrite=1;! j7 k* Z+ O- U) S* n. A
  863.           int opt_do_extract_withoutpath=0;
    ( z6 Q# E% Y7 f" k, N7 \
  864.           unzFile uf=NULL;
    ! P5 E3 A8 U2 j/ u' X" i

  865. 3 r1 Z9 ~5 j7 ~/ k$ t8 v
  866.           uf=unzOpen("Wsa.zip");
    . J9 A  Q( b/ ~! Z0 v
  867.           if(uf)( [! D! A, N. i: [
  868.           {8 |4 N2 \& h2 N
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);! g: {5 J  O4 P2 Y' p
  870.             unzClose(uf);
      B: R$ o9 M3 p& y0 T
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    . j7 T( R" Y& P' I
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    6 w1 Q# q  V$ K( |
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");) b1 \+ D  Q( M1 W  }0 u" U, k# h' t
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , S3 ^/ X) V9 L
  875.           }
    9 W$ x! \, c. x! n
  876.           DeleteFile("Wsa.zip" );
    " ~; v7 ^" m: C, G2 p5 @! u9 {* f
  877.         }2 Y/ x8 J+ `% L- Q/ q# [
  878. 6 v$ I9 Q; R2 A6 o0 D4 m
  879.         if(CheckLocalVersion())7 Q) v- t+ |+ s/ ~* y2 m  u
  880.         {
    0 ~0 j0 @& E7 x# z
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");9 k7 s6 k8 j6 g4 M$ }/ d. Q/ `
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    0 e3 v) c% d5 \1 y1 H
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ) w- Z7 t& Z2 C* S! y" P
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! m1 t7 e# M8 g4 x+ i, `
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    1 o* S4 O5 m0 O9 k8 I
  886.           dwStartUpSteps=99;5 ?: t4 `. J. u. A
  887.         }
    2 y5 p7 x* O& D! E+ a, a
  888.         else0 E7 Z) J4 N! J0 ]6 p
  889.         {+ k# _2 ^: Z0 N$ Z$ S- L1 `
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    4 ~4 Y# ]. A) j! U' ]! S
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. o* d  a; D0 ~
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    , D6 V, F; M' q9 z6 b

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

6 o  }* {0 l/ y% A8 [

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-14 19:25

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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