找回密碼
 立即注册

CSUpdate.exe源代码

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

3 u6 Q: l2 L6 c
  1. / RevApp.cpp : Defines the class behaviors for the application.
    % X  J3 y$ }# S
  2. //
    8 \+ e) P9 X; v8 N1 [- `

  3. 6 R; S( n2 S* l! ^& T
  4. #include "stdafx.h"
    0 s1 G* Z7 l+ p* \
  5.   e; |9 l* o9 D7 v' t
  6. //#define UNICODE9 e3 X. @* o( b9 b. U0 P
  7. //#include <gdiplus.h>
    & b$ G7 s1 X8 Q# b
  8. //using namespace Gdiplus;
    ( k7 h# M! U3 z6 c9 c% ^3 V' k8 v
  9. - s" D. ^% ]6 S6 \% o$ Y: L# I
  10. #include "RevApp.h"
    / j" a% A/ k( Y/ y& T$ Y- I$ `
  11. #include "RevAppDlg.h"
    ' F% e; [0 a* `% `, ?" \* M

  12. : Z8 z+ T3 [! B% P/ L4 q
  13. #pragma warning(disable:4786)# R2 B1 x6 G7 _2 F! z+ ^# h7 G1 l
  14. #include <map>
    / d) ~$ i! k4 H6 C
  15. #include <list>
    ( ~, Z1 m& ~) C
  16. #include <direct.h>  {/ `7 P$ U  y" k' {

  17. : ~5 @/ S+ K8 G2 s% \3 \0 q
  18. #ifdef _DEBUG# B5 E5 L3 {. B4 P9 _7 C; ^3 s, [
  19. #define new DEBUG_NEW
    : j1 @/ V) Z: q* Z# Y
  20. #undef THIS_FILE. d: k: h) l1 R$ W' W" w' g$ F
  21. static char THIS_FILE[] = __FILE__;3 N& z; h( W: d/ Y) j
  22. #endif! O) w6 T0 V( x3 c) |
  23. #include "SkinResDef.h"- H9 T9 ~2 ?& u7 H
  24. #include "ChangeBG.h"8 i# [$ l6 C/ p) A3 z$ k2 O* v: L2 S
  25. #include "AFXINET.H"" K5 r. [. I9 z& V0 P# f7 _
  26. / v" F& \9 ^& C4 I( D& C' g9 \" ]9 H
  27. #define TRADITIONAL_CHINESE 0: c) @8 t! J  `( J
  28. #define SIMPLIFY_CHINESE 11 I, o# A5 L; B" }9 Z
  29. #define ENGLISH 2
    / ^  a" B, N- c+ L/ ~7 c2 R
  30. int m_iLanguage = ENGLISH;2 R6 q3 z' `- a6 W/ U5 l, A! v
  31. /////////////////////////////////////////////////////////////////////////////
    " |) B5 N/ D* W+ @
  32. // CRevAppApp
    # B9 X/ }1 k; |) i0 e  J4 P
  33. * t+ @% f3 o/ m+ u
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp). g, w) N6 O4 u9 Q# F  P! V- ]
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    , J/ D" a4 j8 ~/ B# C: k4 s  l
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    1 h( K- t, [4 M% i& c) c; t7 D
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!0 }1 l  V0 V7 z. H9 T( w! D  R
  38.         //}}AFX_MSG% F1 I8 O" \" a0 C8 g/ h6 G
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp): H, ]9 l# l9 J  H/ D+ F" {8 _; I
  40. END_MESSAGE_MAP()
    + U8 ~0 D. h6 H. o7 E: ?

  41. ; I% {6 X, f1 |( q6 Q5 X
  42. /////////////////////////////////////////////////////////////////////////////7 _9 q7 U' b2 ?/ s- D1 h0 k# ^
  43. // CRevAppApp construction
    2 }! Y) B. I3 Q& H1 p4 y- @( _# p

  44. ) l) c) C7 r# z
  45. CRevAppApp::CRevAppApp()
    " s/ v6 w8 G, @6 m2 u
  46. {- \$ @9 s# e( \+ b8 C5 |
  47.         // TODO: add construction code here,
    3 H* N/ }) w; p6 }
  48.         // Place all significant initialization in InitInstance2 k7 g; E, R; s& N+ R# ?  h
  49.   bDisplayIsBig5=FALSE;
    2 s) t; V! `$ l, y: n2 F- ]8 ~
  50.   bRestartUpdater=FALSE;' h, ?, R: K/ Y1 O+ Z
  51.   bFinishUpdated=FALSE;
    / q$ t* T' A" r" M$ q
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;, H) d/ ^3 K0 [0 m4 E: `
  53.   InitChangeDataBig52GBKS();. C" K0 q% Q' a4 _! O
  54.   InitChangeDataGBKS2Big5();
    0 K& u: }1 B9 t' d
  55.         //' `: P" @2 w: }+ l8 d# }3 V  y/ `6 M1 i
  56.         bClickRunExe = FALSE;" ?8 F1 o6 D5 n1 u7 }
  57.         //
    / r; w& `9 u6 r# e8 ?6 ?) X
  58. }
    / }' ]. v9 j6 R- X) D7 Y4 s3 Q

  59. - b- J4 r2 v! |1 V, L7 C
  60. CRevAppApp::~CRevAppApp()
    ! ?5 P3 x6 M# r
  61. {4 v9 R! e- Q. @! y
  62.         // TODO: add construction code here,$ a. `1 F9 E& \" I1 X, r! x
  63.         // Place all significant initialization in InitInstance* B4 V; S2 q$ r* t) u0 w
  64.   EndChangeData();' @: w1 z) l% z9 X" J) y
  65. }
    5 \2 e6 n, U) J! T8 C

  66. / B' O/ {, `; b2 V
  67. /////////////////////////////////////////////////////////////////////////////
    8 {& v# e* t1 S
  68. // The one and only CRevAppApp object
    9 S( v: L+ B6 [5 R4 y
  69. 3 Q; Z4 }$ s6 h% c
  70. CRevAppApp theApp;
    . y) j9 m/ o2 [2 k$ l

  71. 2 G; V0 l9 Q/ t- U8 W0 d4 `% D+ ~2 r" H
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    2 g; e% ~, r; |3 _- P
  73. {3 O$ H- Y% e  ~
  74.   int iEOF=0;
    " ~1 I8 x4 I4 @! K  h
  75.   char szTempName[MAX_PATH];1 o3 T: K3 `6 A; y0 L1 @) a7 q
  76.   *szFileName=0;0 v! r% ^& N  K. M$ b# z
  77.   iEOF=fscanf(fp,"%s",szTempName);' S( [$ R, N7 Z6 P( h: U9 x5 c
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
      O" s/ L5 f) D" ?" E) {
  79.   {8 l$ R7 [# q8 A
  80.     strcpy(szFileName,&szTempName[1]);
    9 a# c" i& W4 n/ X4 {  {& C
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)+ Q( T9 P% }0 G2 T% t
  82.     {) }& ^% F9 ^- C' s: n4 a; {
  83.       iEOF=fscanf(fp,"%s",szTempName);% b% w9 Z1 {% K9 A4 d& O
  84.       strcat(szFileName," ");
    % d! ]5 M# B/ o  Y7 V) q. @
  85.       strcat(szFileName,szTempName);; `$ z1 A$ k+ _
  86.     }
    4 k& G$ |5 W& T- w$ `/ C3 B% |
  87.     if(strlen(szFileName)>=1)4 P. X4 H. M, H% Z; ~* o& K) R
  88.     {! k- h4 Z" D# T' d) e
  89.       szFileName[strlen(szFileName)-1]=0;
    ; u7 h/ A9 i; J
  90.     }( i) m# n4 Z0 R8 n/ b! S
  91.   }6 B! f$ g* e" Q$ G; A5 q: g4 E
  92.   return szFileName;
    & z% [9 [" D% x' Z
  93. }. r' m; O6 ^: i& i

  94. : C3 j( b: P" O$ v5 H7 }+ H9 @) N3 C
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    4 \' r  c2 e, S6 o& n
  96. {2 p  V1 G. A6 J+ G0 {$ ]4 X
  97.   FILE *fp;
    6 B) P* Z4 r1 U2 L% u' H' |
  98.   char *key=NULL;
      }0 p0 a5 s2 x' V& k* W5 M
  99.   char version[MAX_PATH];
    . h5 T5 _+ I+ y. y1 H6 H
  100.   LPUPDATEFILE file,olds;
    # L6 p1 Y% C3 G+ ?* N# F
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
      g0 _7 O4 d( e$ g! c: k& q

  102. 4 z: P& q# r& Y9 W: C9 S0 w" @+ z
  103.   UpdateList.clear();8 s0 z( Y+ |7 I5 {
  104.   UpdateFile.clear();
    1 U, |4 b9 T9 B6 Y
  105.   if(GetFileAttributes(filename)==-1) return false;2 S1 [3 `) f1 y' w( }3 @5 H
  106.   if(!(fp=fopen(filename,"r"))) return false;' N) I3 Q: i; S# m0 Y7 P
  107.   fscanf(fp,"%s",version);
    ! @" s/ S& Y0 R3 t  T# g
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    4 ]& {8 ?0 l7 f# l) |$ ~; z
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 d# B. D+ ~9 g( c% F( i
  110.   {
    $ e9 R4 K6 k8 o* D# I
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; B3 ^' u0 R0 l' l
  112.     fscanf(fp,"%s",file->path);8 e1 q' x* G: e8 B4 ?
  113.     ReadFileNames(fp,file->file);8 j+ @8 l2 e7 q+ z- u
  114.     strcpy(file->full,".");
    8 w: j8 O( i, y5 q5 e3 l
  115.     strcat(file->full,file->path);3 }) m9 J8 h1 K9 ]1 m
  116.     strcat(file->full,file->file);7 y# j" l1 a/ {( y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    % a$ [' i+ e1 @* t1 T& }
  118.     {+ m9 J+ a# f7 J/ s& _: D  j) o, ^
  119.       file->vers=(float)atof(version);  ?' r: l: m; B7 Y6 P2 U# B( Q
  120.       UpdateList.push_back(file->full);
    - E2 D2 D- y4 A! L8 r) w
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ( ?- o+ h3 C2 V6 P8 {
  122.     }. P. e  n2 Z, {0 x1 k. N
  123.     else2 Q0 o7 N* s5 i- z# m& `& P
  124.     {
    2 n* U/ k6 W1 y6 k, B" c9 u
  125.       olds=(*p).second;7 m$ N* K. d; M7 K
  126.       if(olds->vers<(float)atof(version))
    1 i( e' e9 Q2 d3 Z2 l5 X5 \
  127.       {) B9 F9 W3 l/ I& x
  128.         olds->vers=(float)atof(version);
    5 J% w/ O& j8 P4 ^) n+ A
  129.       }2 N% F, M9 ], w  j1 j4 s2 {
  130.       free(file);
    ; [5 z' U2 X# q. G2 M0 G
  131.     }/ C  r& }- s( r1 k
  132.   }
    0 R% l2 |; p; b) x$ T
  133.   fclose(fp);
    $ G: ^9 g, w) ^2 n( D6 e; s( K/ D
  134.   return true;+ Z/ @9 _, T* q; t" ~8 F& N& v
  135. }* B; m' F! k- G' k' C5 \

  136. 4 b. W2 x# m; p5 W' A" i
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  g4 X: M, d+ ]& y
  138. {
    * R: P6 m" ^/ v1 M$ s# o
  139.   TCHAR  szFull[MAX_PATH];
    & ~4 C5 B; R- J) a' n  Y
  140.   TCHAR *token,*inter;
    2 L8 H- X3 O1 S% s
  141.   *szPath=0;
    ) ]8 ?- k$ o/ j) r
  142.   strcpy(szFull,szFullPath);
    1 Y" P/ d9 Y8 p0 p! t* R; F
  143.   token=strtok(szFull,"\\/");$ n7 w0 h# x* ~; _
  144.   inter=token;
    1 Y# y- m( q7 `. Y1 q# ]
  145.   while(token=strtok(NULL,"\\/"))
    8 l8 y: p$ n$ L' H  W' L4 B' y% }0 E* o
  146.   {
    9 s# L/ F) x# X# H+ H; K
  147.     strcat(szPath,inter);
    : f4 q, t( N6 u) G9 O
  148.     strcat(szPath,"\");
    / W& f" b1 m  O2 \0 h: d
  149.     inter=token;
    3 \3 r7 v- Y( [4 I9 A9 |! y
  150.   }
    ' N9 H9 p" P9 D: E) L; T3 B3 J
  151.   return strlen(szPath);, _  R. C( _% {0 C2 E6 Q
  152. }
    ! K7 u7 w. W6 w% T4 b# s0 z
  153. 0 s& V% x& Y( l9 B2 t
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase). P, K8 b8 W) c5 B; j6 N) M& U
  155. {2 T. d  |( H" j& W7 X, X3 {4 e9 `; N
  156.   DWORD attrib=GetFileAttributes(Target);; `5 Q- j# c) g- `0 v3 Z4 B
  157.   if(attrib!=-1)
    : \" ]4 N) p$ h& h, I% {4 j
  158.   {
    + Q% l4 t1 m  \+ D" a/ @
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ( x4 @7 e6 C! B" K! X4 o/ \, \# J
  160.     {0 j0 Z% _2 b0 H7 U" U1 V
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    5 Q% t1 d1 G  W' s" f, z) `. [9 K7 p
  162.       SetFileAttributes(Target,attrib);3 o9 M5 d  }8 a" H0 t' \- x+ _2 b
  163.     }
    " P! p: V1 H  u  V. h+ F7 }6 {; O% x
  164.   }
    . [% p$ |( }7 V, |& r. t+ q
  165.   CopyFile(Source,Target,Erase);
    % p  X( ~" O4 `4 g9 g; m8 m+ q0 g
  166. }! H- k5 S" h+ J- T9 ~" x% ?

  167. / B  W9 E; ?. P% K
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    / A1 w; z$ j3 w  ]
  169. {% P) X1 o( n* V$ r; ?* P0 S
  170.      FILE *fp;
    : _: W  U2 _; x1 K+ I, e3 Q
  171.      char  szBuffer[8192];
    0 a: ^# a9 i# w. D
  172.   va_list  argptr;
    8 x) }" i9 G8 T1 P4 o2 Y
  173. 8 f+ N9 D# }* V5 {9 e) e& v
  174.         va_start(argptr,message);
    8 ]7 Z6 }" Z- t2 n0 V
  175.         vsprintf(szBuffer,message,argptr);' g' k2 Z1 x7 G0 P' k
  176.         va_end(argptr);
    % a# ]' I2 q  R/ O3 q' [8 y: g
  177.   fp=fopen(FileName,"a");
    5 |8 h' b5 v2 ]. P; s
  178.   if(fp)! P  R1 p( ^; ~% m5 {/ `8 {' F
  179.   {
    ) X, Q, s, l  g6 X5 R% |: C1 c) N
  180.     fprintf(fp,szBuffer);& r! ~' d5 j; t& S
  181.     fclose(fp);
      y& H$ \- M2 s  F! J
  182.           _flushall();
    6 U& ?4 D) T3 l% e+ t  y' }, f
  183.   }/ F  Y1 e. h# l9 T
  184. }1 y5 F5 c3 @1 B/ t6 z4 K

  185. 0 Q1 t5 R" @! B7 v- f7 R0 \
  186. BOOL CRevAppApp::Fclearf(char *FileName). o0 W2 H  I3 h: n  K+ ^
  187. {* M! C' E5 v- k$ q% M8 A7 w
  188.      FILE *fp;) W; |8 i) X! f, b0 W
  189.     DWORD  attrib;
    1 Q; V$ B3 ~4 A
  190.   attrib=GetFileAttributes(FileName);
    8 {% L/ D2 Q. _. d; V% k) E2 I
  191.   if(attrib!=-1)
    5 F( c9 p& g0 F, I8 B, ]' P
  192.   {
    7 Z& x: Y  D# V8 M. A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    4 {/ q, K- M, B$ }! a. U
  194.     if(!SetFileAttributes(FileName,attrib))  s4 N" U1 _0 }, C, y
  195.     {' F# S! c4 s: Z9 b
  196.       return FALSE;
    6 B2 W( R2 A5 d, P  v
  197.     }* L0 z1 n7 U% j
  198.   }
    * Y4 Q* ^& ?* D# b
  199.   fp=fopen(FileName,"wb");3 P+ b# G, L4 o3 E' ]
  200.   if(fp)
    7 i4 B7 F# Q8 f' \) |
  201.   {# i8 q  H( F" i  w/ y
  202.     fclose(fp);
    7 \" j* [' {9 Q7 M; H
  203.   }
    / j) [/ o0 G5 Z2 K2 I
  204.   return TRUE;/ a4 E2 S+ M9 p" \' C7 R
  205. }, B7 O7 v9 ~  O. R
  206. 5 W( r7 R) w; u: g+ x
  207. BOOL CRevAppApp::UpdateLocalVersion(void), h" z5 f2 F6 J, T4 j
  208. {  K$ u3 h  v# k- \" Q2 ~
  209.   char filename[MAX_PATH];3 p: z$ b2 [  I# A, y
  210.   LPUPDATEFILE file,olds;
    : f5 S& G: T6 ~7 B
  211.   std::map<int,CString>::iterator i;. C( i9 k4 c0 t8 r( Q% [
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) x6 l6 N+ [( F+ B- ]; [7 p" W
  213.   std::list<CString>::iterator l;- `. \% V* s8 O$ Q8 M5 _4 ?

  214. , i1 r  a) P1 ]& c. R
  215.   if(bFirstUpdate)* K4 x! Z9 ?7 N- h
  216.   {
    5 j* i7 W3 o: T0 f' Z+ t
  217.     dwCurrFile=0;
    & K7 B4 \8 L. ^& P
  218.     bFirstUpdate=FALSE;* l/ w9 a# N/ f1 Y8 B9 z( w
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 ~0 ~3 Q. ?( O1 @! j# Y$ ~
  220.     {' l5 f) I1 N6 x2 k% S# u, `
  221.       dwTotalFiles=UpdateLocal.size();
    % I: ?& L1 T" D$ k& x
  222.       dwDownLoaded=0;
    / ^! G7 ~1 A6 Z/ o
  223.       bSilentStep=FALSE;
    / [  o6 o1 v. O8 O4 m% ?
  224.       bCompressed=TRUE;- N" }  ]" q/ L" J2 g& ]- S
  225.       strExtLocal.Empty();
    : r! p, U! V8 i; g6 l6 F! i
  226.       strFullName=(*i).second;$ Z, e! y9 K1 ?
  227.       dwProgramState=AP_CONNECT;" g+ C4 j* C# Z- b; E
  228.       return TRUE;
    . v& ], h7 H) \/ ~# _' {
  229.     }7 h) C; M. h5 D$ b5 g# m/ Y1 L
  230.   }. u  a* z, v* j: v; [( N' T
  231.   else if(bRestartUpdater==FALSE)9 `: R; A; k& N* y) w* q' B. E4 o) m) q
  232.   {
    6 \' |  d$ M% Q! W  ~3 A
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())$ h! q: v6 K! Q# i- W( S- t
  234.     {0 G& }5 |$ K8 h8 `7 ?
  235.       file=(*p).second;
    + Y" k/ [1 Q7 P2 Y4 D4 ^5 u
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())$ R1 N: N- R' l4 p( r, h1 J" I
  237.       {
    ) ]5 G% m9 q# y1 V8 `- N# z
  238.         olds=(*p).second;+ I2 `- A* d+ }& W
  239.         olds->vers=file->vers;
    : G9 L6 m0 g+ l6 E
  240.       }( d+ _5 ]' i9 [/ [! A9 U- J
  241.       else
    ! Z/ b* V& n2 w! S0 p
  242.       {
    . P7 |6 L1 Y. Z* M6 Q# X  K: }9 a
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 b* [) g' r; o. e7 f6 }- V9 d" g
  244.         memcpy(olds,file,sizeof(UPDATEFILE));6 l0 x* X( g+ [
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));3 Z0 C& T& m* {8 U' G& e- d1 j: I
  246.       }
    7 X3 _, p% {% z9 f; c! p- W9 @6 B% Z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ) a$ N7 \% Z; a# e
  248.       sprintf(filename,"(%s)",file->file);  n7 L: n9 V% E1 Y/ A6 f
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( A9 r9 ~4 T6 i; u+ C1 H2 A
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    3 X; Z8 h. a4 I. T% m+ u
  251.     }
    5 J1 o. Q% l" J. \
  252.     dwCurrFile++;
    6 F/ s% ?7 N; _
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . g& d7 L' T$ {1 u9 k9 t
  254.     {
    8 Y: x$ t1 ~% Z( @7 f* A# ^
  255.       bSilentStep=FALSE;
    7 A+ n7 q9 ~# c, Y+ s0 H9 W9 v6 k
  256.       bCompressed=TRUE;2 N9 P6 _: p4 @9 Y# E0 T
  257.       strExtLocal.Empty();
    $ S9 G4 R( p/ x0 S+ Q: A8 L9 W
  258.       strFullName=(*i).second;
    9 z, g& W/ X' `# |& H
  259.       dwProgramState=AP_CONNECT;
    8 U% A' o* }6 l5 T6 C0 g5 m
  260.       return TRUE;+ d" D0 P& U" a8 B# k1 e- W
  261.     }; _7 @  E$ Y$ ^1 G3 O
  262.     if(!bRestartUpdater)& Y% O! r( A5 L
  263.     {; @2 l' g) y; G7 d( c, v
  264.       int iCurrSize,iFileSize;% h" p! }5 `8 V0 R. a9 p
  265.       iCurrSize=0;( b% v, [( A4 _. Y. r* k" \
  266.       iFileSize=UpdateList2.size();- n8 P8 ~/ `9 X6 |/ h+ b
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");& Y/ G5 _1 }/ _. M  x$ H' k# z
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    / i; E& s( y' K8 z7 F" T
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");  n5 w' a. ?9 g3 Z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; _/ X* W+ J1 l% V
  271.       Fclearf(".\\update.dat");
    ) w1 B; \1 b) Q1 K
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * W' C: v8 `1 S$ t1 m
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)$ b. \2 ~4 N) C2 x- l$ j- `
  274.       {
    ! c. t* e% J$ [* f
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    $ @2 J+ r/ N- p. n; q
  276.         {
    ) F8 t4 F( q# g" `/ h" `& S: x
  277.           file=(*p).second;
    : V- m: o7 |# \9 H
  278.           sprintf(filename,"(%s)",file->file);
    ; i7 v  @, X& d0 j! P+ h" U
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / S) M: l$ N2 C' j1 _+ b
  280.           iCurrSize++;) q5 v7 y, o. D" L' v. h
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));3 }1 L9 f! W5 e$ g; i, L
  282.         }" W& ~  {; q4 |2 G* W
  283.       }
    * n. B  [% [7 j* N! M9 G0 m
  284.       unlink(".\\update.txt");
    $ j) |/ `) }  m1 s. Q8 g! Q. }
  285.       unlink(".\\update.tmp");
    % H: r4 E' l) {, t/ E# J# n
  286.       Fclearf(".\\checkversion.dat");
    % y; t% ?2 z6 f* N, W- e5 N
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    5 [( H. O% a/ R6 `' H
  288.       if(UpdateLocal.size())- ^$ b2 y- D1 @* W
  289.       {! B2 G- m0 O5 @. }% R. M% O
  290.         UpdateLocal.clear();8 N. y6 t2 r: h( W3 w
  291.       }
    ; ^2 s+ q. P, ?0 E$ \) T
  292.       if(UpdateFile3.size())
    & R2 u8 @9 \" ]' h5 a! k
  293.       {- v6 E7 l0 o; y
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) F' y. D+ ^# }* l% I7 j( c; S
  295.         {
    ! v5 T$ ?0 C6 {3 L
  296.           file=(*p).second;4 C: v- I, w5 a2 B! r) d* L; ]* p% Y
  297.           free(file);/ v- [9 B0 y" Q
  298.         }' y5 g' V7 L. a. I8 d3 e) d
  299.         UpdateFile3.clear();
    7 l# Y0 a0 s5 J0 u6 g
  300.         UpdateList3.clear();
    3 E0 I, s9 l0 u5 ^
  301.       }# L- ^, U+ S% Z* Y% x3 |4 b7 M
  302.       if(UpdateFile2.size())
    1 h. E8 i3 L% f) @& n9 _* l/ }
  303.       {- H- @6 [. i4 F" ^/ \1 Y6 H, W
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 t( W) T4 `6 I& N" x1 J* ]2 a' x
  305.         {
    % a; b0 ?  L# b9 M5 R; X6 O
  306.           file=(*p).second;" G- S4 b3 B+ y7 x
  307.           free(file);
    ; j& q! ^; E" F' Q# v
  308.         }* A" R% S$ H' j: x8 `' Y. `
  309.         UpdateFile2.clear();- E) n* ^% c) V1 n' R# _
  310.         UpdateList2.clear();
    8 {! X) W8 u& L0 Q7 w
  311.       }2 K# [! b- U# K: t3 N/ ~
  312.       if(UpdateFile1.size())! L3 O- H- ?8 C
  313.       {
    / m$ a0 |+ j& X" B9 o% |
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), f0 c( ?( G0 s2 M" }: G' X
  315.         {; I) @3 j* e1 z  ~* D
  316.           file=(*p).second;
    & f3 S: X) Q7 r
  317.           free(file);) {* `) J- Z* S
  318.         }
    ) _6 v! S- U8 V' \6 }! _
  319.         UpdateFile1.clear();
    . i" t1 c- p* d' ^' X. y. b
  320.         UpdateList1.clear();
    3 e( M  H1 k) A
  321.       }* ~% B  o" G) h6 W/ O8 h& R- p
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));9 n4 g8 I7 u+ }) K: P* G2 }
  323.     }
    + B' C) y7 L: x
  324.   }* C9 [  [. {7 q
  325.   return FALSE;" n! A# D5 V  E( Q& c* Y& S- ~% `! x
  326. }5 }6 R* t: q$ ~+ g6 i/ M
  327. ! U' a0 q7 d9 K8 r: B8 g
  328. void CRevAppApp::ClearAll(void)8 N" {/ a% Z% p* R
  329. {/ y1 ^, a6 T' t) j
  330.   LPUPDATEFILE file;
    # s0 f6 x% C" o: I# K
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    + l! Z0 L$ ?! V% B

  332. + h: l2 g( g; q) t9 F# A3 Z
  333.   if(UpdateLocal.size())
    ' \# m5 E3 V' B' h7 N
  334.   {) z. N" h2 \% d% T
  335.     UpdateLocal.clear();0 p3 p& r$ @( ?% P% Q' H) t( z
  336.   }( ^; ?* h/ D2 U6 k  e
  337.   if(UpdateFile3.size())3 h7 m; H8 K% L( e) G+ x+ U, Q
  338.   {
    * h1 a0 M* G0 G) v
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # ~* B- L! d6 Q
  340.     {8 U; K# _9 P9 g
  341.       file=(*p).second;2 A/ J; ?+ [/ e. a9 X* {0 V4 S) J
  342.       free(file);
    / v( t5 w' P# L4 R" ?4 N
  343.     }. m8 o3 v  a/ ]7 T5 p
  344.     UpdateFile3.clear();
    $ \( t/ r5 L+ S( D
  345.     UpdateList3.clear();
    ) L4 {; }& k) b' x. K& ?
  346.   }
    6 ]& g! y; |$ D9 m6 j7 t
  347.   if(UpdateFile2.size())
    5 a1 P+ T3 \/ r3 E
  348.   {
    5 _: L- w  m8 K4 }9 _; n
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    3 f! i( ]8 x: G9 z( @
  350.     {9 D$ J. V0 ]" F5 r8 x$ N% @
  351.       file=(*p).second;
    7 C$ X9 v# V- r! ^
  352.       free(file);& z) W0 T' k. G' [  E  J2 e7 m; v2 X0 d
  353.     }0 Z5 s/ c9 M+ d2 o: j
  354.     UpdateFile2.clear();
    ; `! ]2 A7 m- A, l1 C4 M* A0 {
  355.     UpdateList2.clear();2 N9 D% @3 |3 j& L1 x% [
  356.   }
    7 k4 d- f6 x9 H( S5 G1 I* f
  357.   if(UpdateFile1.size()): I3 M( V/ o  v8 c+ y
  358.   {/ d7 v, F" M6 i
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* N8 v& F$ x5 {, X
  360.     {: ^5 E# c( Z* t# ]& ^
  361.       file=(*p).second;
    5 P/ W5 e4 f9 y  Q/ k
  362.       free(file);
    5 L4 X( U. e/ G) Q- H
  363.     }& t9 }1 |+ |8 x" D- U0 I, }* ~
  364.     UpdateFile1.clear();9 B# e+ o; `5 |3 {" ~; k
  365.     UpdateList1.clear();
    3 B0 D; D! a! [
  366.   }  D* b3 ]7 J. D# a; K
  367. }  * ]# l( j: i2 {7 ~: q( H* D
  368.   4 J$ N1 U* t; P8 K; j
  369. BOOL CRevAppApp::CheckLocalVersion(void)% D% Y5 n- w* @7 P9 ]
  370. {! W$ x# y5 [  u* k$ A6 t7 Q
  371.   int c;
    % z: A6 q+ m( k$ r# [& W# f
  372.   LPUPDATEFILE file1,file2;
    " }/ f* y- Y4 I& T7 p8 n( \& R
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    & k, }: h8 D$ g
  374.   std::list<CString>::iterator l;' q7 ]8 ]2 {* U7 g9 v3 K
  375. + w; u/ g, g0 V7 _* z' O: S
  376.   UpdateLocal.clear();  Z/ B  a* K4 O' u3 b
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);4 _$ [7 P9 b2 ^+ i, u0 k
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);6 L, K+ V3 H' r5 T; H+ g8 p
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);0 |! S4 _9 z$ Z4 P( P
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    9 T/ \3 [7 b# k( q6 p9 V- B
  381.   if(UpdateFile3.size())* k' K( A" S  l+ I
  382.   {  ^7 B/ r$ n# a( I( v! P
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    & O: k. i' S2 C& u* g. G, P% c+ Q
  384.     {
    3 J0 \: S! D' f
  385.       file2=(LPUPDATEFILE)(*i).second;
    9 }3 V1 o: P& `$ w
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 k+ o0 b8 A2 K; V2 T5 A! Z  S
  387.       {
    ' l/ k. q# D# d6 h  X5 Z
  388.         file1=(LPUPDATEFILE)(*p).second;
    ) Z, P. B( a5 `4 e) y# X
  389.         file1->vers=file2->vers;2 ~2 r, y9 y( |4 j0 ?% `; N: V
  390.       }
    , ^' @) F5 [8 d& N7 U$ [. L
  391.       else  r# d6 I) o; ~- x0 [4 ?  k
  392.       {& `, H* Y1 j" D
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # `3 j; ^$ W5 N; y$ g: X- g
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    5 k; y! `. N1 ~) @( f' u( [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));+ G# l- B0 U. w% G5 I, j
  396.       }1 k/ n4 [8 z& U! o4 E" k: |) d
  397.     }, D, \' h9 k! {8 W  b
  398.   }
    * Y, O- S7 X- `9 w& e5 G
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " D; F2 _" J+ X# Q
  400.   {" {6 W1 @0 w+ Q) i
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())7 W- `6 [8 C2 x, z8 P
  402.     {
    1 F' }; x# }8 q1 T2 X* K. C, O
  403.       file2=(LPUPDATEFILE)(*i).second;( P$ A$ u, H4 |, s/ e. C
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())- O5 j( g5 N8 ^% U& B. y1 B
  405.       {
    # D/ a5 x& A0 d7 p" H4 {) G! m
  406.         file1=(LPUPDATEFILE)(*p).second;2 z) K/ s4 K1 Q/ n/ z+ l( d" F5 F! {
  407.         if(file1->vers!=file2->vers)" q2 A, r7 F, K! w: z
  408.         {
    & G: ]( d' ]# y9 t; f
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& O  S6 D* b  Z: T9 l9 |
  410.           c++;
    & _, L: S: ?5 v( E( d2 G
  411.         }
    0 P" S0 j: V2 Q' \
  412.       }4 k5 j! B' f, [$ l: `/ i# W9 L% M) I
  413.       else! {5 H. n- `2 j( X
  414.       {
    - [" z! N) l! i; g4 T
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- S4 b2 K; K' E" U5 H
  416.         c++;, l9 O. d* |' ^4 z7 X
  417.       }' W$ J) o8 `: e, t- g7 o9 m# o0 x) ]
  418.     }
    3 a( E( i2 u5 {8 d
  419.   }
    ' ]: \( e, C! W! W
  420.   unlink(".\\DownLoad\\update.txt");
    $ b; C$ N" ]' O# u: f
  421.   if(UpdateLocal.size()) return TRUE;5 `. S0 a1 m& J; ^' ~, J2 z
  422.   else                   return FALSE;8 f( b- m7 B  J  x! v4 c% H
  423. }$ o) i6 G) a. Y( M$ m
  424. . G5 M7 f6 {1 O6 _8 j. X
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 m) H( C( X, i6 T* Z5 c
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"# [/ o- n, |- \0 ^% c
  427. % Q5 L4 p3 G& N+ c! W

  428. : U# |. u/ D) |  Y2 L4 D2 s/ h

  429. : A$ v5 d& i9 |
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)9 O' ?7 Q5 C  E6 C6 @; j
  431. {
      k& K$ }0 v- M6 h/ E# F) I( J
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;. k: {4 _: J0 t2 N$ g% T9 ~0 v
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 D) X. B" X7 f
  434.   {
    % M& a: F# ?* I* r
  435.     char szLanguage[50];% a$ Q, i, Z2 K) O3 t
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! v+ d* z  s6 ^# v
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- k4 O0 {* w/ V
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # d9 u# Q6 F' A
  439.     else                                   m_iLanguage=ENGLISH;
    $ _& M" v4 h$ `1 M/ U: }; f; }
  440.     char szRegister[100];
    " x0 f7 j" W' B9 E
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ l1 z' x+ }# z* P! g# L2 {4 e
  442.     strRegsName=szRegister;
    3 o. R# d6 }, X( P+ N9 w$ q$ @
  443.     char szPatchURL[100];: }0 @4 E  i: m3 s$ m
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 B2 U! t. v  A  |1 J+ O% |# \# a" r
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);& M5 B( V' C& L0 c; t
  446.   }. V8 U3 J7 u3 v) r
  447.   else
    7 z: L; {" t. c  p! M; j) o
  448.   {
    * C; S3 G! B0 v# X9 L! r
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% H/ ?0 b/ e7 S5 s: L5 K8 T
  450.     strRegsName=DEFAULT_REG_URL;
    4 K, j1 w1 c+ T" o1 g: Q$ G$ [
  451.   }
    : F; A, p: O$ L
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    / m! K" B6 h& l* Z
  453.   {
    : ^# O$ E4 ]# f  t: z) M/ ~
  454.     char szIP[50];" S% [0 U. j" J* `, H/ N2 ^# m
  455.     char szDIR[300];
    2 D( q7 r' ~' U) z1 g' F6 M( R( F" Z
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))6 I' T% F: U: v$ ?& B0 k- I0 d% H
  457.     {
    1 Y$ {6 U' N2 _. m; V, F% H
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    3 w" U* L" c. B3 p$ s1 \
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");7 g, H+ g; O; Y) O- D: ^
  460.       strHostName=szIP;/ {- ~0 N' q& J
  461.       strHostPath.Format("/%s",szDIR);/ ^* ^0 L4 Q  Q' u8 \; `; X1 i
  462.     }
      r6 L9 \& v2 f7 l$ e: N# x
  463.     else) o! T# x+ O# V% `4 N5 k0 g1 }2 _
  464.     {3 e! g8 a. }, V' _8 |" {7 {  J
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 r. I8 j/ X- v; k7 Q) G/ d
  466.       {
    " m9 H5 R% k4 T1 L/ T
  467.         char szLanguage[50];$ Y8 ~' f' T3 y) i
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% D$ Q: `7 W$ Q, |
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  W# Y0 ^; z* }& x$ X2 ?
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    9 v! x1 s! a' Z
  471.         else                                   m_iLanguage=ENGLISH;
    3 ?) Y9 r4 Q8 b4 O
  472.         char szRegister[100];- C7 D7 ?$ o$ |; C5 B& p2 h
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 K5 V$ c$ w9 A, D, }
  474.         strRegsName=szRegister;8 G4 u7 i( J1 {3 H
  475.         char szPatchURL[100];9 f! P! l6 {5 f1 N6 n8 M
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");& n2 a0 y. m6 p% {! {
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; A+ N# S0 ]( J
  478.       }' c8 J* F  o& z
  479.       else
    & X% }0 |4 `4 r; G$ J# n' ]3 U
  480.       {3 c5 L1 z. i* }" t
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 D+ V" B1 X, _0 t1 K3 F7 O9 r
  482.         strRegsName=DEFAULT_REG_URL;
    1 O, [; n  t9 y' f( Y
  483.       }$ u8 i7 c$ J1 C! e
  484.     }
    + e0 v4 t2 \0 s4 l
  485.   }# c+ ]4 g5 E( B2 W* u5 {7 G
  486.   return true;
    4 k! L! @8 e, z1 X% l
  487. }
    4 }6 ~/ U4 {" N2 K$ C
  488. # Y% _; b( J3 d& o. }
  489. #include ".\ZLib\unzip.h"
    / y3 r+ ?5 C& O5 O' W
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    - ~! m" }' w9 O" e4 a
  491. /////////////////////////////////////////////////////////////////////////////
    3 ~7 f- Y$ h5 y7 Y
  492. // CRevAppApp initialization- ^! X. I; Q! F5 b4 S+ F) D

  493. 7 b) [/ D$ a& e7 }/ Q5 H+ d5 \
  494. BOOL CRevAppApp::InitInstance()
    0 }5 h0 F) |7 @7 [8 \2 M8 S
  495. {( j! s+ Y. e8 ^# E$ r
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];3 N$ G" R4 Q# b/ [2 M' G1 [
  497. 9 \$ x/ x6 W3 g; q% e! e; M+ ?7 f
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);3 u$ l* w6 d6 |. Z+ Z: q: P' R
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))5 R) u4 s# V& d$ n* j; g
  500.   {' V4 z8 ?0 b# o  I6 f
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    1 |' X, c2 N2 k- M, E
  502.     GetPathFromFullPath(szPathTarget,szPathSource);' |- S# E2 C7 S& F! F1 S
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    / A/ ^& [7 k( ]- n
  504.     {4 p# K; N: T# A1 q: I) r" E
  505.       strcpy(szPath,szPathTarget);" A/ M: E! n( A" K; M  m  J/ }  j
  506.       SetCurrentDirectory(szPath);) q5 g- p; L. k4 }# Y
  507.     }
    2 Y: m- }& C7 k' J1 {6 B: K: L
  508.   }
    $ L8 }2 y- |( C4 F( r: u
  509. #ifdef _DEBUG
    0 p8 G  S5 \2 |, v. |5 K+ ?& ^
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); k' r) c$ X* j5 \8 F0 O
  511. #else* r  n( x8 w5 p' d+ j  f
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- ~, \) Y3 ~0 \, i; k
  513. #endif: U: q/ Z+ y/ T1 |5 n3 y
  514.   {
    7 y9 S1 e2 F# r# P7 A% M. x9 m
  515.     char tempFileName[MAX_PATH];5 N+ M( @# D" m* |/ Z- i
  516.     strcpy(tempFileName,szPathSource);$ N6 _: p0 J" \& K
  517.     tempFileName[strlen(szPathSource)-12]=0;$ a' Q- p/ e- e7 n4 f/ I. @+ ]& b
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    " g. q5 L; `0 x/ a
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    8 y6 ^: o4 a2 s# G! U5 i0 |
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);; w0 s7 B! H0 H5 Y6 U
  521.     return TRUE;
    . Z, W! Y# ?# R  S+ A% h7 r0 j
  522.   }; m2 e: y- Y. |5 C: {, r6 c
  523.   // Nuke 0118: Delete run.exe! u" l0 p' Y8 l7 R" y" k) K% l
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    , A( q4 z" {' ~; k! v
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    . y9 S! n  n' B4 v# Q, m1 y# {
  526.   if(!ReadCfgFile("Config.ini"))$ s% K! n7 k! n# c% z0 h
  527.   {' i  {9 U. h$ a5 Y& K
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ) ]9 x+ Z' S7 M4 g7 a  ^( D# [( M
  529.     return TRUE;3 p! t0 H' J0 g- y% @3 a
  530.   }1 @: H8 }" ^- F
  531.   HANDLE mutex;: O! H) I5 U; U$ k
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))) X$ Y  N+ D5 D
  533.   {" {) r9 p- `. L
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ; d1 w2 ~& C: @& j  `8 [* w# q
  535.     {# X& i  b$ S2 H& y
  536.       CloseHandle(mutex);- J$ ?' O4 h6 V( \3 a) |, f& s
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);, {6 p9 c2 ?% \" W% t# r
  538.       return TRUE;* |( ]0 v7 F8 f  k# n
  539.     }8 u8 g, ^9 B; F2 P) S5 S
  540.   }  
    , `" U4 P: r9 ~$ Y1 |6 A- [
  541.   CloseHandle(mutex);
    9 p3 X$ p3 j% S8 T6 U; d* V7 d; P

  542. # X8 l. x2 f9 `$ I
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);3 ~5 Z) ?, u5 {2 y" m0 P
  544. ' N9 k$ Y4 h. Z! h$ w
  545.         AfxEnableControlContainer();# J/ W8 Y: x* X8 B. Y
  546. 5 N( |; f# J' s$ Q; }% |3 f! s
  547.   bCanUpdate=FALSE;
    1 ~- g( `. r$ i. m' X
  548.   dwStartUpSteps=1;  v3 }0 A: b& i7 V4 G
  549.   dwProgramState=AP_NOTHING;5 q3 P/ O" y+ K1 V, N: U1 F- E
  550. % b8 X- o: u' ~  o1 [
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    4 w  j" ^. E8 H( C

  552. / K3 x0 O; M% V0 t& S" s
  553.         // Standard initialization7 `7 R+ e, Y4 M! p
  554.         // If you are not using these features and wish to reduce the size* c, a5 W/ M( Q( e6 W
  555.         //  of your final executable, you should remove from the following3 s; C- {3 |+ c6 Y! W6 M
  556.         //  the specific initialization routines you do not need.6 f) t  q0 M: f

  557. $ y: u  P& f4 S7 X( r7 r5 o4 v; K
  558. #ifdef _AFXDLL
    ) X+ @! h0 Q! A6 c
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    + g( f! v6 Z6 D7 I
  560. #else6 n: A: u. z; e# c- O5 H% J7 l" u
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically6 Z6 ^- N7 y/ ?! R0 e
  562. #endif
    . W% E- k0 d. `0 L
  563. , u" c: X1 Q, z+ g( G
  564.   dlg=new CRevAppDlg;" j, @. ?8 p1 h; \/ d* }7 Y
  565.   dlg->Create(IDD_REVAPP_DIALOG);0 b* @1 g& w! D5 t; {# ^
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ( S) `/ n5 n$ C2 y% v1 T
  567.   m_pMainWnd=dlg;3 M; h& b7 O+ x/ H
  568. 1 h1 u7 S# |- }, E! g  W' }5 K. ^
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);% ?$ e: ~  |9 ^1 C6 `" K4 j$ c

  570. ; \* d$ N; N. c" U) N; v
  571. //  GdiplusStartupInput gdiplusStartupInput;
    & }' S! o; ]$ E4 ]# l
  572. //  ULONG_PTR gdiplusToken;- P1 V1 }; b. L5 g4 Y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
      {1 ]- u- W1 P  c% b5 g
  574. * t* a. f5 C! K3 a9 s
  575. //        CRevAppDlg dlg;; h* `! _9 m" O/ A6 x& R
  576. //        int nResponse = dlg.DoModal();6 G1 X( |% ~; v- V/ T1 \% k3 s- O
  577. //        if (nResponse == IDOK)
    & B; t1 B& o2 ~) ]. C
  578. //        {2 x. f$ P2 c1 ~& t
  579. //                // TODO: Place code here to handle when the dialog is
    # P; Q8 l& S. z
  580. //                //  dismissed with OK  x1 Y7 j" V3 a+ Z
  581. //        }
    " Z& i7 e( N: B
  582. //        else if (nResponse == IDCANCEL)' w* @/ Q+ D0 Q$ Y; o$ o0 A! C! U. \* x
  583. //        {
    " j2 t2 G* o" ]  f# V0 E, Z2 _( l
  584. //                // TODO: Place code here to handle when the dialog is$ R& X# Y' Q) C+ S- `
  585. //                //  dismissed with Cancel, l7 r# Z% W+ n- @1 C0 r6 K+ ?
  586. //        }: Y& s, v# m+ [. X! t

  587. 0 [$ e$ O# x) J: l, v7 `
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ( ~4 w. N5 K5 I- o6 t' }
  589.         //  application, rather than start the application's message pump.* i( X4 a0 A4 u  r7 q
  590.         return TRUE;
    9 w4 \1 r4 r& K' Q
  591. }
    . \6 O0 a& y3 u1 ]

  592. , y$ m0 Q6 k. Q" i8 Q& h; i( d: T
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ) j; {3 \0 f1 A2 `- H7 P9 p7 \; O
  594. {
    % o/ M; T6 \  L+ V, f3 r5 h
  595.   int i;
    . a& @: U$ A" W1 K3 r
  596.   char *szRet;
    ; w8 I! R' i7 E7 Z5 d# U: z8 y$ [

  597. : x$ A4 F( j4 u* S" M# b
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    % w* ~# `4 O0 p) D4 n1 g; Q
  599.   if(sztoken)$ O. ~0 K# U# I: V' i' @- D  O: V
  600.   {0 l. M/ f9 b8 }5 @
  601.     szRet=&sztoken[itoken];8 P, S, \) O9 R9 o
  602.     while(sztoken[itoken])8 r( m) K$ |+ M+ d6 c" v1 p; o
  603.     {
    + g' Z/ ?& l7 f* M6 H7 B' v
  604.       for(i=0;i<(int)strlen(token);i++)
    ; f9 C% j+ J3 f2 T0 c
  605.       {
    / @3 F# w3 j' B) o# [
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])5 M) W, L7 P2 A! Z: n: S
  607.         {
    1 e+ K! U  b, `3 F0 y! d
  608.           sztoken[itoken++]=0;
    5 S6 v/ G/ Y  ~
  609.           sztoken[itoken++]=0;5 v7 r' o7 l6 [/ h+ p$ Q7 g3 ?
  610.           return szRet;
    2 _+ x1 K( n' d" j  m# `
  611.         }& d1 e2 j& A! A, a9 ?# R
  612.       }
    8 a; w( S+ H# C  V
  613.       itoken++;8 k( J: A2 Y8 V# J8 @6 A
  614.     }( }4 [# J' Q4 |9 X. \* G5 m8 P
  615.   }+ G4 C% @5 P1 ^+ @# J
  616.   return NULL;
    3 d& j/ {+ b  a7 A* B" o1 D6 v6 l; S
  617. }
    9 ~( ^- ^, E; I4 R8 Q, \  x

  618. # A- W; P8 L$ U. f. h
  619. void ProcessProc(long Total,long Current)
    ; v3 O7 m* E8 m) a/ |- X( }
  620. {
    * q7 p& B9 a/ e* Z+ j. p; v9 u- O
  621.         MSG msg;
    7 V; s' i1 z5 b9 E7 ]$ ^
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ x; b9 p3 a% g9 e+ b. p
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));7 r) U8 a+ V* U& ^8 y" ^$ I' [: `
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)); `; a9 V- X0 A6 s6 X+ Y1 ]6 E: p
  625.         {. s/ O; `3 \; Z, r4 }; W
  626.                 if(!GetMessage(&msg,NULL,0,0))
    8 Y: r- ^: x  ~9 [0 q. B& |* j
  627.                 {7 _' e1 I4 z: B1 e0 p
  628.                         return;
    ! K& {/ V* ]3 J
  629.                 }
    % I. v9 h0 v- ]- d4 y
  630.                 TranslateMessage(&msg);# P: I4 }; J$ ~
  631.                 DispatchMessage(&msg);5 C5 o1 f: U) W7 s! f) ?' {/ k: G
  632.         }       
    8 U  m" s' F& d7 N. |
  633. }
    3 p- z2 r# y  z2 Y6 Y& B. Y
  634. 9 Z/ A) ]1 l. @* L% W+ z
  635. BOOL bFirstChar=TRUE;
    % p( |4 ]6 K- a9 c
  636. $ _0 C# k3 ]# R
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    % u1 K1 p  M; F8 A
  638. {2 @) P5 {) W  F, d7 _4 j+ E" |+ Y
  639.         // TODO: Add your specialized code here and/or call the base class
    7 c9 g1 U4 X' d" Y, L; ~9 z( D  L
  640.   switch(dwProgramState)/ R% t7 F" V' Z) |0 L
  641.   {
    / m% a2 z; z0 T/ V! z
  642.   case AP_NOTHING:
    , P) r$ x5 K) a5 A6 V, C# q1 j
  643.     switch(dwStartUpSteps)' [- w* P7 P+ Z) Y- A1 s
  644.     {
    , G7 ]- a2 Y$ B
  645.     case 1:
    & _# g5 e1 s2 J3 g5 `/ i3 f6 t5 n
  646.       {
    . @" j2 _. b5 B1 V( e5 w
  647.         int i;
    + u8 l+ j$ C" ^2 d
  648.         CDC *pCDC=dlg->GetDC();* n( j5 y' v  S) x
  649.         HDC hdcwnd=pCDC->m_hDC;
    : _, V# H! K8 ]$ m" }) Z$ N- r: x; [
  650. //        Graphics graphics(hdcwnd);/ X% l) U5 q5 J1 Q& e
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    : _7 p" O$ O1 s# n0 v8 ~
  652. //        INT iWidth=bitmap.GetWidth();1 e/ P. ?; W8 Z5 F5 W8 U
  653. //        INT iHeight=bitmap.GetHeight();2 w: A; f5 z" _- R
  654. //        Color color,colorTemp;
    5 j0 U4 l2 _# i( f  v7 t
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    - b( b, e, r' m" _6 ^
  656. //        {+ i( @7 Z' U( U" q6 y1 p; F
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    7 m" ~% E8 l8 i2 Y
  658. //          {
    0 {( q2 F8 k5 y( y) R8 W: X. Z: B9 U
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    4 a# @- g2 K. v1 P
  660. //            colorTemp.SetValue(color.MakeARGB(  h1 P' T- ~9 D1 i: a7 I3 S
  661. //              (BYTE)(255*iColumn/iWidth),
    . L* C  ]; X, O0 Y3 y, V. w) C
  662. //              color.GetRed(),# \3 \  a- U4 n9 V9 O7 o; O
  663. //              color.GetGreen(),/ t- y, t' A5 Y9 ^1 S4 A
  664. //              color.GetBlue()));/ E( e5 W4 d1 I0 U# u/ o5 S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    + H8 s0 K0 q" j+ G/ a
  666. //          }
    $ N8 @: ]: y: Y5 f
  667. //        }
    / C; \3 f+ u* b* o: O" T! u
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);2 c5 a7 _  K  f) l4 `0 v
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . j6 D2 q7 r% N) p% [, y1 r
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    + w( }: _2 s! C' N& C
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
      F  @' D) P# ^0 p% f9 R& l
  672.         for(i=0;i<240;i+=8)
    2 U2 W3 C6 @0 @
  673.         {
    ' U9 I' o+ A7 D4 L+ R1 g5 y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 H( w  R5 v4 L
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" H, F9 r# o0 H, e% j. v, z4 x
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 ?& z% L6 G8 ]3 V" K
  677.           Sleep(33);& B# J, G* H1 L7 a
  678.         }
    7 U2 I9 `: b, l9 P: C. D9 W+ t
  679.         Sleep(1000);
    7 `8 j8 p) J2 B
  680.         for(i=240;i>0;i-=8)" l2 J2 d; h& ~8 z; ^
  681.         {
    6 |* C8 h3 D9 f# j) A: x
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% r' O& s3 \4 f" O' h! R
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 E. E" _" S. r  [4 s: x. H3 c( z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / A; a9 P- H, K0 N$ u
  685.           Sleep(33);% u( `2 a; i  L0 U1 i- _9 L
  686.         }
      z6 Z' t8 o; ]. ^) r( n# o
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);- ], ^4 t7 A' x4 n
  688.         dlg->ReleaseDC(pCDC);
    1 @/ b3 F6 P* W1 w+ W5 y
  689.         DeleteDC(hdctar);. ]# w% |( r3 s7 M0 `
  690.         DeleteDC(hdcsrc);8 L, [. e& |" J- L* `
  691.         DeleteDC(hdcorg);- K  k$ L: `; p) I6 J5 M
  692.       }
    ' x: M0 h( ^7 Y4 b$ {
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);, d$ q5 F7 D& G
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 |8 v6 V& W; I3 |3 b$ Y" Y
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    $ ]7 H: Y& R, b9 y8 e
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");$ g0 z% C$ y7 b
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 z' q& w) m8 Z( m
  698.       if(!Dn.Connected())
    ! Q/ V; ^/ E3 F" Q1 P
  699.       {- j# q; ], ~5 f
  700.         dwTotalFiles=1;8 T  z0 U1 U' k
  701.         dwDownLoaded=0;
    # @3 J- F' ]$ G
  702.         bSilentStep=TRUE;
    + w- u. Y, i9 U6 K
  703.         bCompressed=FALSE;
    + ^1 X0 g- ^3 Z# @& Q& ~% ~
  704.         strExtLocal.Empty();/ `) f/ i/ X0 Q8 {
  705.         strFullName="readme.txt";; u% d. ~: R: t! P1 u* A( @
  706.         dwProgramState=AP_CONNECT;- G$ R9 V! r4 P$ i# a% T
  707.       }9 z! M; J3 r5 l2 [& h
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    4 O, N) J: G: |& b0 ]
  709.       dwStartUpSteps=2;* @0 q! Z" @" }$ `
  710.       break;6 U8 {$ Q) b5 V$ i5 e9 ]9 ^
  711.     case 2:8 C' n% ?# s  S! L: h1 T! W
  712.       {
    - V+ h# N8 a/ ]2 p# l
  713.         int iEOF;
    ) q3 m. v- x, b, B
  714.         FILE *fp;& ]0 X: }& c* e8 }
  715.         char szString[512];
    2 o6 X4 r7 _: a8 I9 h+ [* H+ j, [! e
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");4 g, L& U: n& s5 j6 U
  717.         if(fp)1 c! y: [% P) {: L: u  i4 S: o, l. j
  718.         {: l4 u4 Y2 S) x+ B% E
  719.           do
    2 @& p" s7 \, j; v! T# [5 O
  720.           {
    5 X2 f$ a" t' G  B9 J
  721.             iEOF=fscanf(fp,"%s",szString);
    4 M) h" Q$ p. _
  722.             if(strlen(szString))8 d+ [7 W% C+ d6 }+ E
  723.             {# p% t/ e/ M/ r8 c3 A" A  z
  724.               if(bFirstChar)" ~, d6 p/ Y: |, c2 i9 j9 w
  725.               {. o; L, e# R0 b2 q, r! |1 y
  726.                 bFirstChar=FALSE;2 B; F; e! \5 R9 n* [# S4 R4 u( z
  727.                 bConnectIsBig5=FALSE;, x* q1 @) |. [
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    . t7 R. M& b4 H# {- K7 s! u
  729.               }
    3 A& f6 u  W5 ~
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
      c. W. B9 l7 e7 {3 K, k
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));% X% L' k. R2 I# i
  732.               dlg->m_ListText.AddString(szString);; x1 O" n5 Q  ^
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% g# i7 i; E4 N& |- j6 r
  734.               *szString=0;
    5 ]# M0 {3 c: @5 ~) r
  735.             }
    8 ?. O4 |( @4 H1 p% u, b. P
  736.           } while(iEOF!=EOF);
    4 c6 |- F. I2 ^( B( |: {9 F
  737.           fclose(fp);  p# o( J7 H$ @; v6 _' D1 N
  738.           unlink(".\\DownLoad\\readme.txt");  W0 a* X* J/ T& b3 l) J: j
  739.           dwStartUpSteps=3;3 S" z. o5 D. U) M; \( U) W2 ^
  740.         }; d$ v/ h, u3 i' b) z
  741.       }
      P2 Y" j* R- k8 r+ Y# M
  742.       break;0 r- E7 F8 q# g5 S
  743.     case 3:1 N5 O2 G! S( R3 U: X
  744.       if(!Dn.Connected())
    1 ~0 I. d6 d6 S8 q5 X# ~+ o
  745.       {5 i* u8 N1 R; L) [/ t4 U- c$ K' P
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);8 L) s9 `6 u1 b' H( Z
  747.         dwTotalFiles=1;
    ; }% E& k8 H; j1 C! r! _
  748.         dwDownLoaded=0;
    ! e1 d1 P: y! H/ Y
  749.         bSilentStep=TRUE;
    / S- u% A* @5 q3 l! g
  750.         bCompressed=FALSE;( F: h. J% M# n7 l( ?" _
  751.         strExtLocal.Empty();
    + i$ L! `& v4 E7 q* d6 B4 t: I& B
  752.         strFullName="checkversion.txt";
    3 c, a& E4 W" J2 |2 c
  753.         dwProgramState=AP_CONNECT;. t& g7 W1 Z7 m# P& |* Q( W# n% S9 T# a& t
  754.       }2 U1 ?  p8 B) m
  755.       dwStartUpSteps=4;
    & b( k2 k4 |, z& ^$ ]2 p
  756.       break;
    3 C6 q- ?6 f% y1 C! ?. Y
  757.     case 4:2 B. d% d7 B4 |1 y
  758.       {
    4 q- I, Y4 h3 C6 z  ^6 C. O: ^$ D
  759.         FILE *fp;% {9 A, e8 J6 r: w# }# y
  760.         char szString1[128];" P/ G$ v0 V3 I4 |
  761.         char szString2[128];
    % \4 r+ u6 V6 T8 N
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # j- p3 e' b8 Q0 `. X- `
  763.         if(fp)1 M. l, \) D/ N6 r
  764.         {- M: {7 l8 n8 s* B  n
  765.           fscanf(fp,"%s",szString1);
    ! j$ @5 U3 o6 ?8 a5 q# b4 ]0 J
  766.           fclose(fp);
    8 m1 ~+ R, y( K3 C! T
  767.           fCheckVersion=atof(szString1);
    ; \* a  Q. a- Z, y: }
  768.           fp=fopen(".\\checkversion.dat","r");
    . x( U# r2 s8 Q2 o! ?: l* O+ j
  769.           if(fp)0 e% r6 a3 S  Z6 x( f& p" {
  770.           {7 c% |2 z) T0 [9 g' i6 W% ^
  771.             fscanf(fp,"%s",szString2);' F& V# g7 z' F6 g. P
  772.             fclose(fp);; a5 t- _  `1 @5 L1 r$ ~
  773.             if(atof(szString1)!=atof(szString2))& w. u/ O5 v6 r% J4 W* |2 n
  774.             {( J7 u# C. ?- j) _
  775.               if(!Dn.Connected())
    4 G! y) b$ M5 m$ u
  776.               {( J+ P% R# m& `- K5 @" o0 k
  777.                 bFirstUpdate=TRUE;
    # H  x; ]7 O! _5 S3 O3 G
  778.                 dwTotalFiles=1;  Q# z( q( |8 d9 q
  779.                 dwDownLoaded=0;4 ^/ j/ x6 w) M" K" D
  780.                 bSilentStep=FALSE;
    ! z* X7 `7 Q- [6 }
  781.                 bCompressed=TRUE;2 f# D' F0 R. i2 ?7 C8 {9 d
  782.                 strExtLocal=".\\DownLoad\";  N( q" g( Y+ q, [
  783.                 strFullName="update.txt";
    / ]; g; G" L4 R! W- @6 J" L
  784.                 dwProgramState=AP_CONNECT;
    8 U  {) ?' @9 r6 [/ y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    : v+ {- t8 C7 u+ n) J
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 e/ u0 |( I1 R5 y6 H1 p9 Z
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");% f% ~" L' O& S6 V5 r; y

  788. & n' G# g6 ~! b
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! U, N, E# {1 O7 s3 i% D
  790.                 unlink(".\\DownLoad\\checkversion.txt");/ ?' v  e; K2 f3 ]
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)5 t8 ?) o, N  Y' j" A* M
  792.                 {
    . C$ Q3 [7 G" g/ P( q6 l' j
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    . l3 B  N1 k3 s
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    & k0 @: l  `- d) f& I0 O
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");, a8 h' T9 Y( o
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 f  Q- j0 S; C& B' J: D
  797. ; w- ^- `( E* s, h
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ I% g8 \8 |( _9 y# J: I- K
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . a3 t2 D6 m- _, X; }
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");3 f. V0 u, O2 O) c* s
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : C8 \/ J: ^# T1 h
  802.                 }; P, K  X" d$ J" O4 s
  803.                 dwStartUpSteps=5;- v8 w# n6 ^' }8 K# n$ W2 d( s4 _
  804.               }4 @! o8 @; ]8 s6 @
  805.             }
    * }* ~& t$ ?3 |3 a' n% L
  806.             else% V6 y' F: h8 p5 ~& h
  807.             {
    3 b" j) [+ F3 ]' w9 [
  808.               unlink(".\\DownLoad\\checkversion.txt");; P+ W& K2 T% ?
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# t6 x  u/ h" p6 X$ b/ C* K  Y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ L% z/ b9 b5 U" S) x+ T& V
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 T2 f; e1 O$ X/ N

  812. 5 w, ]5 W/ n; X
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . V; u+ I5 p% U  B/ Q9 a
  814.               dwStartUpSteps=99;
    ! D6 F4 {1 L9 {8 C* u- Y* ?
  815.               bFinishUpdated=TRUE;( @; v6 g0 [9 U( b3 [) X) d6 N
  816.               bCanUpdate=TRUE;7 J4 i6 d; ]+ ?) w- F1 y' J
  817.             }: L7 B* T$ ?% n& `# w
  818.           }2 `2 j# t, M4 i4 F) I
  819.           else& d$ q& T) P! F* z( f
  820.           {
    7 M# \2 i! ?8 t5 o# @8 l
  821.             if(!Dn.Connected())
    7 ^% ^( q; W8 k. B  ]4 T& E$ Q, v6 M* ~
  822.             {. X9 S) I# W, Z# T
  823.               bFirstUpdate=TRUE;% |6 ]6 z" q6 K& x4 |3 W( ]
  824.               dwTotalFiles=1;
    / p. }0 I- H+ ^2 v( Z, M
  825.               dwDownLoaded=0;
    % f: I5 K7 q0 ?' |$ M0 [9 F
  826.               bSilentStep=FALSE;3 U  \/ `! n) B
  827.               bCompressed=TRUE;5 ~. I6 O& K5 L
  828.               strExtLocal=".\\DownLoad\";4 M$ G) g0 u9 {* d* l
  829.               strFullName="update.txt";
    7 u$ c7 g0 g0 J6 k: ^4 U! F
  830.               dwProgramState=AP_CONNECT;" C; o) k, z: x/ O. D. e
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # ^( O: V8 K5 ~% w4 h+ {
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( a& @4 c, _4 [4 X
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 b3 s% N3 ~8 d5 C
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # N) P4 P! u& E  {* |7 X
  835.               unlink(".\\DownLoad\\checkversion.txt");; K& p2 x/ s  v8 [2 P
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)* j  n7 @( Y- q) r* g
  837.               {
    9 A# w4 n" G' ]2 ?( l* z) Y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");8 }( M  L7 k$ m: O& i( w
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");; i+ u6 J4 f% q" _0 e/ [. d6 O
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");# k& J# a5 T0 w! x& A
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - ?) Z+ J0 H1 ?) x: n* L
  842.                 . c- j& g: P' `" |
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - }$ J8 J( {% N6 t7 n& G
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" t* b* O2 m; h  H! c
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");8 F: k: W0 k7 M' ~$ B5 c) e
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : \) o: \3 g& o! G  [- S. R% y# k8 L
  847.               }) x2 T/ s+ S! k6 M* T& F
  848.               dwStartUpSteps=5;
    5 O& O# M" b+ d- ]1 M% D
  849.             }
    # i  c' S+ \7 Z# {% B' u$ A
  850.           }6 p/ i& U4 O+ S) z, {2 i6 q
  851.         }' `  c  V9 p7 a0 n
  852.         else
    ( }; @1 z- u  B. e% s$ P1 p% L1 ~
  853.         {! R' {, p. [$ w
  854.           dwStartUpSteps=3;
      T8 P: ]0 B! j
  855.         }- V; ~0 ]3 f/ B1 w" R
  856.       }
    ; z( Y3 @: ]# `5 I; F) m! e0 B
  857.       break;4 ~! N6 S. k; {9 L( l
  858.     case 5:. n& b5 f/ }  g( ?2 t, {9 C
  859.       {) F. N. F& V( |7 X6 U  f
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    : R% z& U; \& p+ w
  861.         {& Q9 x0 w5 {% e' N# j9 F4 j
  862.           int opt_overwrite=1;
    + i; w8 F  ~! h
  863.           int opt_do_extract_withoutpath=0;4 C# r3 {1 f) I  r
  864.           unzFile uf=NULL;9 P7 y8 F& z; O4 z6 q- ]/ P

  865. " Y% M2 C7 G4 E; T# r+ m
  866.           uf=unzOpen("Wsa.zip");
    0 W% I" K$ r( K5 {# c3 m
  867.           if(uf)6 s/ d, E8 M! `0 P* `" @  _
  868.           {
    + ^3 {2 E+ @1 ^
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);0 ?. y- K  O) k3 ~9 `- T7 y
  870.             unzClose(uf);
    & \+ v8 {) v, c; c" r$ j1 c6 y
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");  ~8 Z. T6 S0 Q+ L; u7 \
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    8 C! I* t& Q& N) v' ~
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");* B* ^- @& q/ ^& M
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% x# j- S7 G$ E
  875.           }
    9 B% _/ b5 r# }7 Z9 k1 }
  876.           DeleteFile("Wsa.zip" );
      S0 z' h3 h$ v5 `3 {. V' ~+ ~2 ^
  877.         }
    6 ~' U: w6 Y. m( B3 x

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-4 23:12

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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