找回密碼
 立即注册

CSUpdate.exe源代码

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

) B1 C, t* Y3 |4 A' \. f  b! |
  1. / RevApp.cpp : Defines the class behaviors for the application.
    5 R2 t% G; g$ d2 Q5 d3 C6 K7 o8 k
  2. //$ S& E4 j, o, [! |' v+ ~6 I
  3. ) [3 S- B  P9 l" u" M! u; P
  4. #include "stdafx.h"2 h. V! n; u/ e$ }1 B

  5. 5 A2 V) y" \4 M
  6. //#define UNICODE
    * G" V  h+ a/ f9 f( N
  7. //#include <gdiplus.h>( b8 L/ }  I1 K  W8 E
  8. //using namespace Gdiplus;
    5 A1 N% _" V4 |0 u( ~/ i6 \
  9. # W) [% S6 v$ N
  10. #include "RevApp.h"! r7 ?7 X3 [% J7 c! t% k* c7 B' {7 I
  11. #include "RevAppDlg.h"8 S# b2 h8 c2 A& A6 u/ A
  12. * i/ F+ J- Q! a) N& y& [
  13. #pragma warning(disable:4786)
    / a: y5 ^" @6 ^) z/ s* m- u* O
  14. #include <map>
    - p* f. p8 J& Y( P+ s
  15. #include <list>
    - B* {* B( w" H0 A: b
  16. #include <direct.h>
    & w9 j  ]# `  F: R

  17. # U* K  q* t2 A) H
  18. #ifdef _DEBUG
    # M( b( a' M- [7 d' w
  19. #define new DEBUG_NEW
    " T' U' t$ X+ U) g; `+ U, X) T
  20. #undef THIS_FILE
    - h9 z5 E; ~7 _, m4 D
  21. static char THIS_FILE[] = __FILE__;' l2 ?1 {, o9 n
  22. #endif
    0 z7 }& q, N( G, r6 p
  23. #include "SkinResDef.h"! J: Y# l' ~6 W" X) i
  24. #include "ChangeBG.h"
    2 Y1 l& l' ?1 H0 h1 v% N/ ]) h
  25. #include "AFXINET.H"
    1 C, c. p% e5 z3 @; Y% z
  26. 2 N+ K' y4 h: ?+ L' ~, B# r, q# f" s
  27. #define TRADITIONAL_CHINESE 01 c" `  j: H1 o
  28. #define SIMPLIFY_CHINESE 1
    " P* k, y! P# S  Q
  29. #define ENGLISH 2- N, O8 K5 F2 E% Q( a& T5 y
  30. int m_iLanguage = ENGLISH;
    3 l: k" G# ^9 t5 D& r5 M) x- c
  31. /////////////////////////////////////////////////////////////////////////////% L8 Q. \: `" L+ \) f0 ^  @0 y
  32. // CRevAppApp
    8 X8 L' n/ b& o* l0 p

  33. 8 v" I+ g( Q) T# f& m* _# w( r
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)4 Q7 A& h8 M4 C
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    $ ~, t9 a+ Z/ n6 f6 v! Q: i
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.4 f6 Q( N! i! E2 L- N
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!& i" w' W$ k7 ?0 i  v' A; d
  38.         //}}AFX_MSG  k! q1 Z/ A9 }  S$ l" f4 d. b0 U+ z
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)+ P7 r6 D7 F$ P! C: p
  40. END_MESSAGE_MAP()
    8 _6 G) e' b- Z6 {: P5 k
  41. 9 C8 i' ^" M7 o/ {& j' Y0 h
  42. /////////////////////////////////////////////////////////////////////////////6 C# N" v$ Q  Z0 U% }1 C% i
  43. // CRevAppApp construction
    0 v  S$ c6 a2 K) d

  44. ' j' t+ X0 k3 y1 f
  45. CRevAppApp::CRevAppApp()* D  {- q9 {( U8 L3 N4 t. Z3 w
  46. {
    % C, [1 o4 w9 @; \" Z: o
  47.         // TODO: add construction code here,
    1 W+ {; |- _+ F4 Y/ o
  48.         // Place all significant initialization in InitInstance' H5 {. k* f$ t' M
  49.   bDisplayIsBig5=FALSE;
    ) i5 R  N* F# e1 H2 R. E4 g/ ^
  50.   bRestartUpdater=FALSE;
    , e4 V* l; R" P* t* o+ w
  51.   bFinishUpdated=FALSE;
    ! g9 e0 w( E' g# w, ^
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;- `. ~4 R( p, D0 _1 k7 Y
  53.   InitChangeDataBig52GBKS();" r& ^, P0 }& a8 e# |
  54.   InitChangeDataGBKS2Big5();" k7 F2 Z5 U  M3 F" H, ~7 a
  55.         //* p5 a4 g; D  s7 U
  56.         bClickRunExe = FALSE;
      u) h4 P8 R+ T7 ]) a# u
  57.         //* E; U; a3 U* a
  58. }
    5 R$ M  W* M6 ^: Z6 }' u- h

  59. , b: |  |$ ~6 f8 X1 t
  60. CRevAppApp::~CRevAppApp()0 i3 x* {3 u" c3 r% K
  61. {2 Y' F9 P+ L4 W; ]3 x; c
  62.         // TODO: add construction code here,
    4 A3 Z. Y' w& j3 K4 O  L
  63.         // Place all significant initialization in InitInstance
    ' T' U  Z  ?) p) ?+ I' E/ f- T
  64.   EndChangeData();
    4 k3 {. ?9 l" K' c; y3 h
  65. }1 R7 V" V/ b/ P/ D3 v; _: w
  66. , [0 E. z- q! e$ ]' ]5 G' \
  67. /////////////////////////////////////////////////////////////////////////////9 {" J: E4 j8 I, S* j
  68. // The one and only CRevAppApp object: I. O% p* ^4 y" O3 _' _# D% l3 a
  69. 4 t. e7 G6 |! s7 g0 _5 }
  70. CRevAppApp theApp;
    * U  k+ v! F8 t0 N: R& J
  71. ! Q$ h& E' R, r$ b/ m' Q9 W
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    , R# X' L* I- j/ \: h7 e
  73. {: \# l3 d8 ]4 A- f( f* p
  74.   int iEOF=0;
    1 L* F7 P/ ]" f+ @: a1 H, I8 F
  75.   char szTempName[MAX_PATH];1 _4 c8 M* D2 H: P
  76.   *szFileName=0;( V, ~1 T0 o9 F
  77.   iEOF=fscanf(fp,"%s",szTempName);
    1 ~' H$ {$ f+ R5 U% O
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')2 T" i6 C# ^* L/ j4 N
  79.   {
    2 z4 {' G( x/ `: n' N  ^4 |
  80.     strcpy(szFileName,&szTempName[1]);
    ( ~. o, L) R8 L0 D" Q' X
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)8 @* N4 g7 H4 B4 s4 n, U
  82.     {
      z+ M  @5 c% G( @( v
  83.       iEOF=fscanf(fp,"%s",szTempName);
    , s; W3 Z' M3 `  F- `+ f
  84.       strcat(szFileName," ");
    ) a* ~: e# I% ^; `6 v+ E/ Y1 `
  85.       strcat(szFileName,szTempName);
    , E: i6 D! Y% m+ {+ a
  86.     }
    ) R( B3 s% v2 W# T4 i+ z# g
  87.     if(strlen(szFileName)>=1)
    ( C# ^0 c# F4 P+ b0 P# ?  R
  88.     {
    3 x! D5 U. O9 K$ I5 {
  89.       szFileName[strlen(szFileName)-1]=0;: d8 F  r3 X- A
  90.     }
    4 Y6 c- ?9 |; Y& I& w
  91.   }
    9 R8 \/ S5 L0 K3 M3 |5 q
  92.   return szFileName;6 p; p- d& p( I( |% d
  93. }: m" ]: |* I1 i. O* j+ l# o; D

  94. 7 e0 r. T, Z' V( Q2 d# Z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    - H& A/ B8 X, G; ?
  96. {
    - Y: B* ?  b* C0 D/ g; Y# G4 I
  97.   FILE *fp;! G5 J* Z( v2 c- u
  98.   char *key=NULL;
    , X6 F% s" W$ W7 y" c! H. C
  99.   char version[MAX_PATH];1 H0 M# y9 u) j
  100.   LPUPDATEFILE file,olds;" p  l: Q. s  l  O
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 k( L. x. ~( t+ S
  102. * n+ b' H$ ^( |4 ~' T0 S
  103.   UpdateList.clear();
    . V8 ?# C* L' A& {0 x% s
  104.   UpdateFile.clear();
    9 V% {+ n0 h6 q
  105.   if(GetFileAttributes(filename)==-1) return false;
      @6 G( t9 T: B; K0 B, I' m
  106.   if(!(fp=fopen(filename,"r"))) return false;  m' Y3 T! l; X
  107.   fscanf(fp,"%s",version);
    * K# p# ^: L( H# G* ^
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    8 z; M& p# L2 B! n
  109.   while(fscanf(fp,"%s",version)!=EOF)( o% ]9 q2 W. @# V
  110.   {
    3 e! u: p7 D, c8 h7 W3 }9 d
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ e, |8 J' Y( f  m3 z
  112.     fscanf(fp,"%s",file->path);
    , P" u- M" G: I# k. j
  113.     ReadFileNames(fp,file->file);8 t" S! o6 v+ j4 O3 |
  114.     strcpy(file->full,".");
    " g9 Z5 p" U, k& J2 R) a
  115.     strcat(file->full,file->path);5 w# [) f+ G  P: n
  116.     strcat(file->full,file->file);
    0 ]; }2 e0 M; K6 ?. t) T8 \
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())+ n1 `- H! y) M
  118.     {( j- D8 T4 b" [
  119.       file->vers=(float)atof(version);( z" l/ ~% y! v: [+ s2 C/ H
  120.       UpdateList.push_back(file->full);
    ; E% J( [3 d- ?! H9 T
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ' _: w) A, u; f; g4 I/ U. e
  122.     }1 d6 H) \; v) \! @6 ~7 O
  123.     else
    7 |9 Q0 @* z- S3 K
  124.     {2 ?2 u8 Z2 O; H  Y+ T/ u
  125.       olds=(*p).second;; y3 s5 w+ V" Z
  126.       if(olds->vers<(float)atof(version))6 A: |* i- [) y6 l" v, ?
  127.       {
    ! S6 A/ k. i: E3 _+ w/ F2 {8 }, v: \
  128.         olds->vers=(float)atof(version);! p5 H3 m. j  g
  129.       }
    ( I9 Q, l% L) A! G" H
  130.       free(file);
    : V1 M6 E6 N! h6 ^
  131.     }
    3 N" A; U% w( z7 X
  132.   }
    ) M: b! t! X) u( M/ ^# w0 a
  133.   fclose(fp);
    ! ?2 c& n: L/ x% {' {0 E
  134.   return true;
    2 l& h( l! }6 X% Y2 t1 w% s
  135. }
    $ |' L3 {/ p& f5 K* m$ }
  136. 8 A. J- C5 @: O) m; g# E
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  L2 D3 J/ g. \" i: C" j
  138. {- {5 B% n- Y2 L6 F8 o; v
  139.   TCHAR  szFull[MAX_PATH];/ Z. R, m7 P3 V6 c
  140.   TCHAR *token,*inter;
    0 `: m2 _% d# `  z+ i
  141.   *szPath=0;# W8 |/ s% H: y
  142.   strcpy(szFull,szFullPath);
    / y; N0 j  k: Z. o) h: u, b" `; ?0 g
  143.   token=strtok(szFull,"\\/");* E0 L8 h) z+ I0 r2 N
  144.   inter=token;7 N" h0 ?9 ?  f
  145.   while(token=strtok(NULL,"\\/"))
    , _) g" S$ R- n# S* I
  146.   {
    5 H$ v: F! S2 x6 }- B4 U9 o/ J7 k
  147.     strcat(szPath,inter);) P$ u1 H$ T% M+ c
  148.     strcat(szPath,"\");" k7 \0 [/ Q* L' J" P" a
  149.     inter=token;
    3 Y: N; w6 S- o! v  `% k) q
  150.   }/ f0 {( f7 U+ |& W8 g4 s  M
  151.   return strlen(szPath);
    " Q7 q7 T. u$ D; \
  152. }
    2 v! X0 S+ n" M. z7 |- t# S" A

  153. 2 r8 G4 G( z0 T0 X4 Y9 Q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)! H+ L- W5 \" o1 J+ L# Q& O6 O6 |% w
  155. {5 n1 b7 E$ W+ C$ e
  156.   DWORD attrib=GetFileAttributes(Target);
    , r* h; w1 ?. B7 p
  157.   if(attrib!=-1)7 p7 ?4 e8 I4 o# k
  158.   {
    * ?; [! I2 I5 g, z: f
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    " A) m+ u1 e5 Y. n$ X/ _$ O
  160.     {& ~7 u! U' ?* o0 ]' c1 I
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    % v& _' l5 N$ h/ j
  162.       SetFileAttributes(Target,attrib);& }2 Y" B6 H/ h$ i
  163.     }
    7 u$ \) M4 G2 H* ^
  164.   }
    7 q7 J; Q9 G. j' I( k6 k. x
  165.   CopyFile(Source,Target,Erase);% F7 }4 b5 R4 V5 j
  166. }
    " e3 g  \' L+ L8 v6 d

  167. ! k! E% O7 k2 x; B9 ^
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)$ d0 x; I! @4 R; [( d, L0 D' [
  169. {* d8 b  Z1 z+ D
  170.      FILE *fp;
    ! M8 {4 w! z( }
  171.      char  szBuffer[8192];
    0 L. M1 [4 v, [! O, A/ m
  172.   va_list  argptr;
      ?8 ]$ R/ J3 t+ ?

  173. % g: D4 x" M. g* [( i& b, n
  174.         va_start(argptr,message);
    - r2 C2 I5 o6 T$ }
  175.         vsprintf(szBuffer,message,argptr);7 j' d' B/ L/ \8 W* A9 H/ i% A
  176.         va_end(argptr);2 [8 q5 Q* E2 m* Q+ l
  177.   fp=fopen(FileName,"a");5 I- Y. L% j+ j8 `# c
  178.   if(fp)4 M( h. n  g/ K3 r
  179.   {# [7 v  O7 W/ S5 F, E5 O
  180.     fprintf(fp,szBuffer);/ ]  y3 n( j* b9 r4 W0 q
  181.     fclose(fp);
    9 Y$ W/ Z- P. t" z* R3 f
  182.           _flushall();2 m- L# |% y, Q
  183.   }8 I! I% p+ h5 r* P* f1 l  {& v
  184. }* `1 J5 j0 T  i' I- q; x. x) F
  185. ! c' N( j2 v8 {; X& B
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    , h5 _0 c& G- {1 [3 V) y
  187. {
    4 f) H: ?6 Y/ D% {* Q
  188.      FILE *fp;; k  G. b( j/ y. @
  189.     DWORD  attrib;( n- f1 W! k: l" s
  190.   attrib=GetFileAttributes(FileName);
    ( P/ Q0 c0 `6 u, p; K
  191.   if(attrib!=-1)
    % p: S" v& @7 c$ ^( s* t0 R4 V2 r
  192.   {/ ?0 x# z1 j& B$ C9 [* k3 e
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);7 G& ~5 x: C- A. \! {! k3 m
  194.     if(!SetFileAttributes(FileName,attrib))* T! y7 D$ S; O2 h0 N
  195.     {6 i; ~0 h; N; V8 u0 t
  196.       return FALSE;* R' k: W+ R3 K4 L4 [! G9 h/ n; g
  197.     }0 ]( F2 x# u! ?3 H
  198.   }- Z& V1 Y3 v, ~
  199.   fp=fopen(FileName,"wb");
    1 f: @6 U+ _6 J. ~* C; f0 K. R4 T
  200.   if(fp)+ y4 t9 \5 W7 h* ]! v
  201.   {0 d: x* p# \' L
  202.     fclose(fp);6 e6 `# W$ y$ y5 n. c
  203.   }& @+ T8 C% S& ?
  204.   return TRUE;
    0 @  j2 B0 m8 @( Z
  205. }
    4 g9 d- Q: x! O8 U- |

  206. 8 d6 B# [1 [/ S1 E/ W
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ K1 \- j0 I. s+ Z5 G
  208. {
    4 _3 `3 R" [/ w% f/ n
  209.   char filename[MAX_PATH];
    7 E" M5 E" ?) X9 h" @, V
  210.   LPUPDATEFILE file,olds;
    5 m. P7 t6 x  J; O2 f% k
  211.   std::map<int,CString>::iterator i;
    . p0 Y+ u; g4 L' H: ~* r
  212.   std::map<CString,LPUPDATEFILE>::iterator p;+ L5 Q3 m" h- u8 z$ A% d3 f
  213.   std::list<CString>::iterator l;( Y! a8 r- l# B7 u/ u
  214. 8 O5 b5 c: W( T% J
  215.   if(bFirstUpdate)
    9 |, ?. k# X  X7 A0 o; W# b
  216.   {
    3 W1 k5 l' O" z& Q
  217.     dwCurrFile=0;
    9 [" _7 ~$ ~8 \( O4 E9 F2 L
  218.     bFirstUpdate=FALSE;# r4 T' P  ^" N  n8 \3 p
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* g1 I6 Q/ _2 o4 ]
  220.     {6 F3 q6 N! {  V. v+ M$ j0 i1 }
  221.       dwTotalFiles=UpdateLocal.size();* d5 e! M2 [* x& P2 ~/ G6 n
  222.       dwDownLoaded=0;
    . x& p% C- R* {$ n' ^  S0 T/ ~
  223.       bSilentStep=FALSE;9 q1 o) I! _3 I2 p9 v
  224.       bCompressed=TRUE;
    6 J$ w, i, j1 d0 r8 b! t
  225.       strExtLocal.Empty();
    0 l3 m% ^0 d* _, A( G: I2 F
  226.       strFullName=(*i).second;
    . v+ `) T2 R- l1 U& Q* {
  227.       dwProgramState=AP_CONNECT;
    " b2 `. ~8 Z$ `; S5 K) i1 C
  228.       return TRUE;7 T/ p% _4 b; [" F( @0 j: l
  229.     }
    5 a  A. B0 P, C1 Z) B
  230.   }
    3 J' e1 ~! X4 W+ Z, g9 F
  231.   else if(bRestartUpdater==FALSE)9 V! J0 G8 y9 \$ k$ {2 q
  232.   {; v- g2 O$ }7 d9 b2 f+ f
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())5 J" ?  q/ z! u% I; a" A$ }
  234.     {
    7 {- V" Z0 `' {  Z
  235.       file=(*p).second;# \" Q9 o2 y+ M1 e5 K9 t* w/ h
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())0 c6 m& D8 G" G7 W5 e
  237.       {
    " s& ?8 u/ S, b
  238.         olds=(*p).second;
    / M: s# U0 n2 J0 m5 Q* z
  239.         olds->vers=file->vers;/ l5 }" W+ |% l( r7 N4 z
  240.       }
    8 ~' w: h1 a  I
  241.       else
    2 t: u2 p9 x6 @' Q" U7 X) X! P/ L* Q
  242.       {
    . J  T/ p* e3 n( @& m) B
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" }/ c7 l. h9 Y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    $ `+ \; Q. Q& R- Q4 d$ b
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    4 x1 V$ q9 t- v5 f5 Y. d
  246.       }: h9 H5 L4 u  Z" g" g) L1 X
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    % D. N7 \: P( C! q5 t+ F0 r: @  W
  248.       sprintf(filename,"(%s)",file->file);
    , }: y6 C& r8 ]
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / r" L( k) l6 L6 D- Z" c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    & V' f: b4 r) c) y& c7 I' b
  251.     }3 T# i- I, q* ^8 ^! K4 T7 b
  252.     dwCurrFile++;% a* {- A9 ^' G7 t
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 P: X$ U- s2 }1 C9 R1 S; x
  254.     {; J; D# h" h2 U9 O
  255.       bSilentStep=FALSE;
    ) \" P% T) u2 y3 N1 g
  256.       bCompressed=TRUE;
      e1 b, K' M" n$ Z* v6 s/ b$ f, S
  257.       strExtLocal.Empty();$ t. u, W+ ]: ~
  258.       strFullName=(*i).second;
    / v" z, N( K6 J0 y4 R3 ~; d
  259.       dwProgramState=AP_CONNECT;7 ]* o8 y/ \5 V; ~& X$ O" c6 K
  260.       return TRUE;+ t, ?* w8 @% D1 ?8 b0 A5 F, ~
  261.     }) A: c' T" f3 ?1 u2 j
  262.     if(!bRestartUpdater)2 G9 J/ G  A6 E4 g; o
  263.     {+ T' q/ @$ L) ?9 I, S2 x/ A: L
  264.       int iCurrSize,iFileSize;9 j# L1 L8 F  z6 g; _  J
  265.       iCurrSize=0;  k' |" y& U) S/ @  I8 R
  266.       iFileSize=UpdateList2.size();1 Q7 W6 F# k1 x" |
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");1 Z0 o# K/ l/ F* j
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");& o- l/ K7 H  [
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");1 w/ ^; o7 _  A9 J) o* L
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / x: ]0 Q1 N7 m6 Z- {; p4 U+ x
  271.       Fclearf(".\\update.dat");" {3 p- J* V( \/ Q6 v
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    $ F' @1 `( V* A/ R6 {, w/ w: ~4 R
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 q& m% m% Z+ }" o0 x4 X
  274.       {: \# p. U+ m' J3 m
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())( a1 S0 ]5 n5 f- q( H1 _
  276.         {2 o0 y9 Y. C5 E, o' l5 c' Q
  277.           file=(*p).second;
    , X6 b1 s. Y* j
  278.           sprintf(filename,"(%s)",file->file);
    4 }  y% A+ _+ L
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 h7 t# P" d- J5 k% m
  280.           iCurrSize++;
    " W  e( W' m. L+ a
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));1 M, O  @6 [$ H( F- F% R; v
  282.         }
    / e- X5 g* a: i: d" f2 y
  283.       }
    1 L% _& S6 F2 x) D
  284.       unlink(".\\update.txt");
    ) H# o) k! t+ t1 W2 T( }' ?
  285.       unlink(".\\update.tmp");- R) s9 M* W1 n2 h7 p8 b! l
  286.       Fclearf(".\\checkversion.dat");
    5 ?) v& q8 ^( ^: D) U" J/ K
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' Z8 {' \8 g; Z7 c& A1 c0 D
  288.       if(UpdateLocal.size())
    ) F7 n: f2 [1 o9 Z
  289.       {( ~( Q% r1 U5 P4 ]* H
  290.         UpdateLocal.clear();& Y; f, P+ [9 H/ g
  291.       }
    4 u6 v5 H6 s. f  @0 d
  292.       if(UpdateFile3.size())
    ' H2 @6 c; s0 i/ y
  293.       {
    . w3 U( ~7 m/ V
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # M4 r3 K; X$ x
  295.         {
    # \0 {% ]1 O8 k; T$ X: Y) D* Q
  296.           file=(*p).second;( X4 R7 G( ?6 R) D. Y" [. a, g- ?
  297.           free(file);
    : Z' h$ z# f4 S2 V1 k; r" [
  298.         }
    % |6 o0 v6 x" Q
  299.         UpdateFile3.clear();
    - C% U0 T8 O# i, F3 _0 B/ {
  300.         UpdateList3.clear();
    - g. R8 u  E  Z$ P2 L, V% D! K
  301.       }
    , [8 W/ `  X! f0 y& g3 ?% e% u( e
  302.       if(UpdateFile2.size())
      e+ t$ f1 p# A# m  H, z
  303.       {. E, `/ m5 e" Q$ o$ l6 [' E$ Q
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + H& E+ _) i9 }: t* p& ~
  305.         {" ^8 m/ s0 r& E. J
  306.           file=(*p).second;; `4 {  S- c; T; y: i- \
  307.           free(file);, G4 J0 }0 b* d) h. ~) v
  308.         }3 C+ U8 a. m6 B3 M- V
  309.         UpdateFile2.clear();% W+ j( B$ d& n( g
  310.         UpdateList2.clear();. \) S% V5 k1 Y5 C- ]/ p
  311.       }
    4 ]' ?* J) B5 H/ J" ?5 H7 z, W  I
  312.       if(UpdateFile1.size())  [/ v( I) A% O8 V3 k2 ~: i, r: w
  313.       {
    $ \: W$ ~1 N1 E0 A
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 q+ S& v- K4 b2 Z0 k
  315.         {) y8 f: J0 {5 z* I  T- g$ [6 u' Q
  316.           file=(*p).second;. b! T8 |9 C. e) y$ D
  317.           free(file);
    ) ^) z2 b7 C3 Q$ }
  318.         }
    : H0 a: @1 ?( W! H' F! p
  319.         UpdateFile1.clear();! I  f. i. z4 I9 Q4 `6 V  }3 `
  320.         UpdateList1.clear();6 P0 k/ y9 q3 D3 v1 |
  321.       }% y1 B' e3 {+ x% P! k1 c" R  I( Z
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    0 s2 ^9 X  e& y+ N$ l9 _( t
  323.     }
    4 N; ^. `' B8 n" i
  324.   }: V& Z* t/ H0 M( g
  325.   return FALSE;; f! }- K! |/ Y
  326. }( F( _6 D8 U% r0 _
  327. / S/ t/ i, Q) Y6 j1 X9 Z/ `% s
  328. void CRevAppApp::ClearAll(void)
    $ B. f& d7 i2 l5 _/ q  M
  329. {) l4 N  Z: k$ i4 A( s6 s6 \) F
  330.   LPUPDATEFILE file;
    : m7 _9 y4 I: S5 b/ w6 O( f; w
  331.   std::map<CString,LPUPDATEFILE>::iterator p;/ N9 g9 Y1 X# N& Q7 R& z* L5 l

  332. 8 Y5 U2 I2 V# C! \; J! [% H" @
  333.   if(UpdateLocal.size())* P6 l9 z( }8 ?6 O6 V- ]8 q
  334.   {4 V1 _$ e, C6 I- y0 W9 o
  335.     UpdateLocal.clear();
    6 E: R' r$ t6 i9 v" U3 d- B
  336.   }8 X0 }6 d" _! g, c2 P4 N# D  x
  337.   if(UpdateFile3.size())1 c0 u5 J& ]1 \2 X2 G6 t$ z2 w
  338.   {( V. ~5 Z" t+ J% h
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)3 `6 s8 \6 t; E" N1 I
  340.     {
    7 D/ z% t% s. y/ h: }5 \( q
  341.       file=(*p).second;
    $ Z4 P2 Y4 p; `- a3 s" @
  342.       free(file);2 V$ a( c( V1 t( o  i8 O! O+ ~
  343.     }
      i( @5 T; I* w$ w* R9 p8 Q! o
  344.     UpdateFile3.clear();
    # i1 ^7 F3 S& `3 k$ ^2 }
  345.     UpdateList3.clear();
    ; Q# Q  t/ ?5 ?5 e; Y
  346.   }3 {8 u: K" ]+ D  z2 C3 @% ?6 m
  347.   if(UpdateFile2.size())
      T4 \6 J+ }. k4 C5 V
  348.   {. a5 s9 e/ f3 U4 X
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " ]# N3 _2 g. \: n" B) i3 e
  350.     {# v3 t" P# Z: _+ J8 d9 @: m. w
  351.       file=(*p).second;* N- I! k0 R* R# Y' u1 g
  352.       free(file);; k$ |* Z+ F. l6 _
  353.     }
    4 Y" i( c2 j/ P; a0 u0 |
  354.     UpdateFile2.clear();3 f2 J! W8 {$ t) G$ X1 g
  355.     UpdateList2.clear();
    . @4 M% i) `1 D# d: R
  356.   }( Z) o& {! |* y8 g- Z) j& h9 E; U
  357.   if(UpdateFile1.size())
    - o0 [! M0 ~5 ~1 I
  358.   {- {. E9 g% s' n% H( U
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" v$ g! d4 b5 s- h+ E4 R
  360.     {
    ' A9 }) a# _$ y) T  B
  361.       file=(*p).second;
    . k( ]: P$ ~+ j& Q* l. U1 F
  362.       free(file);
    " o. |; l6 T, ^6 m+ g: S4 _
  363.     }
    2 I* y1 f/ m* w9 d
  364.     UpdateFile1.clear();
    & J+ {' L+ M% \; @! O
  365.     UpdateList1.clear();
    6 d+ A4 \6 U. E
  366.   }' C! O+ l7 u1 v% Y' G1 O
  367. }  1 v) S, ~- O! u; x
  368.   
    * l+ D- ?; n( H7 \$ L+ w7 j
  369. BOOL CRevAppApp::CheckLocalVersion(void)8 Q) ~5 v2 U5 K  v
  370. {% T% d4 T: p) y# L3 y
  371.   int c;
    6 ^9 _; Y' f& t0 z4 w; Y1 r
  372.   LPUPDATEFILE file1,file2;
    - \0 C0 u# F* ~9 j
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    + \5 O" R2 k& L* V
  374.   std::list<CString>::iterator l;
    ( C# T! G9 V+ i2 l
  375. 4 Z% _8 G4 D5 d& r3 n
  376.   UpdateLocal.clear();" ?2 A7 U$ |3 n8 ^
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    0 d" B5 T2 G+ {
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    2 G& w- {7 @* f' x- L/ e$ F
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ; \. y- O1 @4 L+ P9 C' J) x
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    7 o6 y% T5 [& S# e2 i
  381.   if(UpdateFile3.size())2 g3 f( u' ]/ F
  382.   {
    4 T( A' c/ c! `* E" r
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); v$ s+ \3 P" `, x9 P0 a
  384.     {
    1 Y' }. U2 f. x1 m" r8 ^
  385.       file2=(LPUPDATEFILE)(*i).second;
    ' L; u9 b9 f6 P- G; r
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) G5 ~5 |5 m+ n% x
  387.       {4 m- x. y6 x1 {2 c8 `  d; z5 k7 k
  388.         file1=(LPUPDATEFILE)(*p).second;7 Y3 w  @. O; W% O) d4 o8 S
  389.         file1->vers=file2->vers;0 G% S$ k: l  n* P
  390.       }
    . @# p1 D8 ], r7 a4 `  M
  391.       else! y, T" x8 M3 O8 K% R& v( k* {
  392.       {
    8 b* S7 v- s* t$ X6 g/ t+ m$ |1 F
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 @) Q9 J; N4 i" J. F
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
      i$ A# g7 u: S- w
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));8 u& C$ O3 K8 f8 J7 K( s# D. Q" N) p
  396.       }
    : J$ c: c3 l& t' b
  397.     }
    " }8 L# K1 w6 _6 Y# K* l' d9 @0 t* F
  398.   }
    1 v7 y8 }0 `# b* }, f# e9 C
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)7 d5 R; P' g2 k. L2 F0 P4 `
  400.   {
    ) h8 h& i0 w- j) v, m5 p4 A$ `
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()); v7 S" R$ M4 w: ]3 s/ M
  402.     {
    . n' f( X3 }% T  U+ f% u
  403.       file2=(LPUPDATEFILE)(*i).second;0 x. F% h( e+ t& w
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())7 ^5 J3 f' V1 S8 }3 d0 Y
  405.       {9 C) u" |- ]9 `! R+ U+ j: a
  406.         file1=(LPUPDATEFILE)(*p).second;
    ( \6 s+ Z- b) G+ J+ \
  407.         if(file1->vers!=file2->vers)4 f  @; F' w3 `, Z# P- J
  408.         {7 N2 U" D8 \& u; K2 ~* [) G3 M
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * R- r0 V. D* X) X9 v
  410.           c++;
    , `7 p6 G) @. @/ f+ V4 t  e
  411.         }. c) T( Z# [# ]$ b; M$ _
  412.       }
    1 _7 ]; \# Q; J8 U! C6 Q
  413.       else
    2 v! S2 v# O6 U9 J; a* `: ?! p
  414.       {
    " G# T  b& `6 C4 q% n" v
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 M% x7 j6 a5 t7 F; }! c0 V, u
  416.         c++;
      R. u+ [. r* `8 W0 a
  417.       }
    5 I1 e0 X' t) k! ?" g7 d7 R- s  p
  418.     }
    ' x6 k) Z: h7 e) E$ K( m
  419.   }
    : {+ j; ^  b6 d4 r1 x) G
  420.   unlink(".\\DownLoad\\update.txt");* F3 k' r5 A  ]; ]8 O# J& t
  421.   if(UpdateLocal.size()) return TRUE;% L  ?# G* k9 K: E
  422.   else                   return FALSE;+ i, s5 u3 H  L, N4 C% v
  423. }
    : Y7 y3 b- O9 U4 Q
  424. $ f5 a  I* \! X% s4 e
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/". j" @: ~" N( P+ t' g
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn") ^9 {4 i7 k- q& X3 y5 a0 A
  427. 1 |( D  \# ^% z+ p$ S
  428. * z8 }+ q: q2 v! l5 P, z) g

  429. / U- D$ ^6 l" J
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)3 |9 ]" v  S% O2 `% ?- _$ l
  431. {  C' {+ U- B2 T& X3 B
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    % w& ~2 F5 y  @5 W( m* H" ]$ s3 r
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( R4 `7 F  q: i" Y* \' w! i7 y
  434.   {/ p; c* ^/ Z0 \; V3 l
  435.     char szLanguage[50];$ g; |. ]$ D" G& h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      @3 r* i! ?  K: }: @
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' n3 b" d" U7 L
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. {- q9 {3 \" _5 q
  439.     else                                   m_iLanguage=ENGLISH;2 W! K5 ^* H5 T$ r- q, f9 p: n
  440.     char szRegister[100];
    5 z$ _/ }  O) z8 l$ V' |
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- |7 h5 l' [# a! n8 ~
  442.     strRegsName=szRegister;
    7 b1 z1 T) E  ]6 _
  443.     char szPatchURL[100];- L$ m! g7 u+ Z$ f# X* ~3 G7 v
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 G3 a1 e& \- `! {
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - A% D! T3 l" ^, E
  446.   }& N6 ?3 O" v1 Z; s" T
  447.   else
    # }9 a+ z, U+ n# }$ y% q, D9 M6 K
  448.   {: ]- T1 w; w; u1 U6 {
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 L7 G3 d5 p* W: x* G/ y/ E
  450.     strRegsName=DEFAULT_REG_URL;, J/ r9 _+ \5 R/ v% Z  P  a
  451.   }# l" `+ U9 i2 Y$ T0 V, c# g
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    . }1 r  u& `% f
  453.   {
    1 Y9 U3 M5 H8 z1 X& r
  454.     char szIP[50];- V0 S8 w6 c3 M# d- a# G
  455.     char szDIR[300];( x1 I% G5 `7 [, v, h; H
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    % ~# J1 |( L0 A" a
  457.     {+ L' _. C$ R: b3 Y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    8 @9 A2 ?7 U, {$ `3 I; d8 ~! Q5 u3 A6 r
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    9 E$ z/ C( `! w% M9 p
  460.       strHostName=szIP;9 d# g: H" }& a8 h7 F( t/ j
  461.       strHostPath.Format("/%s",szDIR);8 _- E" m6 g, N  P; G! j% |+ @
  462.     }
    ! e9 f/ B3 R( Q
  463.     else+ H  S( X& m0 U: I2 `2 K
  464.     {1 M8 L( i' ?5 m+ \' |8 ]7 w
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      l7 o: k! l* g0 i5 \+ ]; [
  466.       {9 t) H3 ~2 o, t: e% Z
  467.         char szLanguage[50];
    # i, k8 k# \* Z3 J
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 f) D0 F8 h1 H8 t* T& o
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! ~# ~6 q7 z+ l1 N. Y
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 [; E; s, q7 o. _7 ^( q
  471.         else                                   m_iLanguage=ENGLISH;
    , B5 z. q# p8 N3 y& u6 n% f5 M
  472.         char szRegister[100];4 n6 t  B& Y9 b
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " F$ ?0 N: G+ o! [: W
  474.         strRegsName=szRegister;
    3 C' [5 K- Q: {8 E" a6 h; A% J9 P
  475.         char szPatchURL[100];/ U1 s. l4 n, s9 {0 g! c" h
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - o* c; n% ^8 J7 v& X- i
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 M& a( b3 B) w
  478.       }
    5 H5 t; t8 G9 w. R
  479.       else
    6 h; W( y) q1 G- t1 P
  480.       {" ^) r& {7 |6 @; M1 Y3 i, B
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 [  C1 L% m5 ?5 L' H1 g3 o/ @1 p2 g
  482.         strRegsName=DEFAULT_REG_URL;! h/ m" u- i7 f$ f" X* N
  483.       }
    ; h9 Y4 {, R' M7 @  x' l6 A4 B& ^6 u
  484.     }
    ! s+ F1 {6 w% G# G* c$ D+ M1 N2 J2 T% H
  485.   }$ n/ j/ T- {! X' ?
  486.   return true;
    - ~4 ~% x; X: C. P2 J3 G
  487. }. }5 o/ m/ T/ k. b! a
  488. : a! T* a+ [& v4 M
  489. #include ".\ZLib\unzip.h"4 V* R0 K4 j2 y$ T
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    , L6 `, o" S- k% C! U; ?
  491. /////////////////////////////////////////////////////////////////////////////. W( c0 |) G# ?6 z2 S& c0 h( Q6 C
  492. // CRevAppApp initialization; K; Q4 W0 |7 O3 y% o& s
  493. 8 }7 W( y& j2 C
  494. BOOL CRevAppApp::InitInstance()/ t9 O) P( t+ m9 Q( h
  495. {
    $ Q# U; R3 W2 x5 q6 @
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ' h/ z) C$ l% T! o4 A0 R+ Q% K
  497. $ e: I- a+ o7 s. M
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);# }9 {( S. p/ o* u/ B; g$ v) }
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))/ T5 w) Q1 I$ G( @
  500.   {
    , K8 F& G" b1 ~2 ^
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");3 m: `$ a( W7 b, X3 S8 V" y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    / l3 [5 Y+ x# l, m$ i
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))+ y8 ^: T7 T& f9 W2 s
  504.     {
    ) j; O+ _- ?+ @- q0 q1 Z, j5 n3 P6 H
  505.       strcpy(szPath,szPathTarget);% a' O  g7 o) {7 A
  506.       SetCurrentDirectory(szPath);
    : A1 C/ w; U  Y
  507.     }
    ! Z* D% i1 m8 q# p
  508.   }' M7 D6 W8 d- b) x  N  H" O
  509. #ifdef _DEBUG( u: K; o" q' u
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    & b7 `! \1 r9 V3 x' w
  511. #else/ U1 K) M  S; e' g
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " F5 D1 t2 A, W- C* i
  513. #endif
    - t0 e& }( k2 F. p% X. V
  514.   {
    ) T; k6 I: b* z9 [9 p3 \5 h' D
  515.     char tempFileName[MAX_PATH];9 F. L! x. {( u; v. g
  516.     strcpy(tempFileName,szPathSource);- I  \( d8 v! _6 X$ n
  517.     tempFileName[strlen(szPathSource)-12]=0;, t# V& R9 @: s- E
  518.     strcat(tempFileName,"\\$CSUpdate.exe");! v3 P: J* S% g1 {* }
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    / p3 K# U* J" D: W
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    7 L4 w. }$ T/ Y& t$ g& ?( Q  R
  521.     return TRUE;
    + \$ P  V, ?' z* h
  522.   }
    8 ^( F% h% y9 f
  523.   // Nuke 0118: Delete run.exe, Y: N7 x# h/ K7 g! e
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    & j4 \( O7 e% `( t
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");' s6 g, l; ]3 t$ D# S
  526.   if(!ReadCfgFile("Config.ini"))
    8 Q1 c- Q4 u0 l' V5 F. q. k, |
  527.   {- V# a9 O3 z8 w- }# b' `
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);5 q1 C/ ?& J/ ]0 O5 K/ }9 h; Q
  529.     return TRUE;' T3 R9 U; K1 W. g& O
  530.   }
    8 Z7 ]0 R- ~8 S1 v
  531.   HANDLE mutex;8 ~. y" A8 ^& I1 S' n9 D+ z; N
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ; j1 x* H; J8 ^, u! l. H
  533.   {5 A8 t, _! h7 {# P
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    3 I! u; v# h% t+ i
  535.     {7 p0 ~+ R# X1 E6 e* l- }
  536.       CloseHandle(mutex);
    / k: a2 c; E' t3 Z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    / Y$ \: B* @! X  v3 h
  538.       return TRUE;/ ]% c0 R7 b+ V/ D& p
  539.     }
    9 i0 m5 V" |% V  m) N
  540.   }  
    + [, K5 U/ }( d) i6 n/ s# o2 b
  541.   CloseHandle(mutex);
    7 M" c$ j: e) n* N% p: s4 _5 _0 x

  542. ! ^$ b, O' ?3 n6 @. E  W
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);$ a, O- b, l+ S9 S# D5 x

  544. 6 H' A' i  g' A5 u. C. s, F- A
  545.         AfxEnableControlContainer();
    - \1 u, D% D: V0 b/ C+ @$ f( x
  546. ' @7 |* s& W+ D; M5 \( Q
  547.   bCanUpdate=FALSE;$ T8 E7 G4 ]: O8 s
  548.   dwStartUpSteps=1;
    1 @" r: f2 M) A, J/ {. `
  549.   dwProgramState=AP_NOTHING;0 p8 k0 H6 s8 W

  550. " n9 K' p, c& D& V
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" H  g) |9 v9 m
  552. 6 u' c6 o! j7 a: Z2 n! W2 s% \+ z2 U
  553.         // Standard initialization
    - m' R* D) E: B. q$ z
  554.         // If you are not using these features and wish to reduce the size
    ( Q5 e( j4 w: x% k( A6 T
  555.         //  of your final executable, you should remove from the following
    % e9 G7 d( i) R! B3 B) r
  556.         //  the specific initialization routines you do not need.0 r( |- h  j+ _; H/ F9 c
  557. 0 p8 q2 v* \- E* G
  558. #ifdef _AFXDLL! j4 O7 I' u2 y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL/ B; Y! r; M% T1 `) L. x' H
  560. #else2 E! a- p: _4 H3 S( v+ d. H* \* t& x
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( d; W4 X! V  W9 ]' Y' O
  562. #endif2 i, P: \7 w. T+ ~

  563. . p+ k* y8 M; [1 c& s
  564.   dlg=new CRevAppDlg;
    2 p& {) ^( g2 ]/ o7 a" |
  565.   dlg->Create(IDD_REVAPP_DIALOG);! \$ E, I$ d4 k5 d
  566.   dlg->ShowWindow(SW_SHOWNORMAL);% Z$ ^! c; R6 r+ e" k4 e
  567.   m_pMainWnd=dlg;
    : j) y  Z) L$ {: ?1 \* W) H+ x
  568. ) E  Z" d9 i6 X+ \7 m$ ^' ]1 M: d
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    5 g9 B, B3 n# t+ }

  570. $ U' k* k" X4 X6 a' y5 F0 g
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ' |. @, s+ Z. A
  572. //  ULONG_PTR gdiplusToken;
    6 i* F% W. l5 n; L1 c
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);1 J6 G# V& n- I- i! U9 |: m- o: i

  574. " g; h1 A; u6 W4 w
  575. //        CRevAppDlg dlg;- B, o3 b. W, ]* g; `/ N' P
  576. //        int nResponse = dlg.DoModal();: o. O/ y9 A& r4 G
  577. //        if (nResponse == IDOK)
    . l+ M, T& O: Y$ V$ b. k
  578. //        {
    . W5 C1 A9 d- `- ?5 y
  579. //                // TODO: Place code here to handle when the dialog is
    $ K3 e4 W& L  F' ]/ d* M. y; t
  580. //                //  dismissed with OK
    ' D5 R6 V2 j2 R1 B* m
  581. //        }
    ; G7 W% b% C9 Q5 s) p3 Y5 k3 I
  582. //        else if (nResponse == IDCANCEL)
    # ?1 K6 `" i# R* F; I
  583. //        {- J1 c, r" U; l
  584. //                // TODO: Place code here to handle when the dialog is
    8 v2 f4 I. Z7 T& s, R
  585. //                //  dismissed with Cancel
    / B, ?  {- Z7 d3 B7 ^5 y$ [* D4 |3 C
  586. //        }/ s+ _  x/ O+ f' s% p; {
  587. 0 X2 @; x! c) n! y: w  G( L
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    * }; b' ]9 b4 M
  589.         //  application, rather than start the application's message pump.7 [' [5 a) O( v0 `1 d
  590.         return TRUE;8 [6 Y  B& s. \" P; Z8 T$ z( P
  591. }" Y4 d$ w9 ^  @9 _
  592. ' M% z! G( K' E$ y! ^# e
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    & k* u; O5 @* m4 a
  594. {
    0 N7 u8 ~  t% m7 x4 ]" z7 n
  595.   int i;
    % Y4 k/ }( k  O
  596.   char *szRet;
    8 P. \! r2 p' t) }
  597. ! Q! ~( g% T" ~
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    1 C0 D! C: @; i% j8 b- v
  599.   if(sztoken). g5 F9 r) Q' x$ F8 f  n1 f
  600.   {
    ' i9 G  _, ^5 N1 l" x" B( E
  601.     szRet=&sztoken[itoken];
    / x; ~# l- M1 L6 H) Y
  602.     while(sztoken[itoken])9 b1 ~1 W5 t# e! f$ ?
  603.     {# p( D- R1 Q& l8 {9 z9 g% h) [
  604.       for(i=0;i<(int)strlen(token);i++)% S* p7 K8 s% K; o5 Q: r6 q: b
  605.       {/ c1 z9 c" ^0 a. S" C6 y3 R
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    8 e7 u4 ?8 O7 f# j* o# H/ T
  607.         {- ?# m/ @  E1 `+ f, K$ |# c3 K
  608.           sztoken[itoken++]=0;
    0 W: h- ^" N- E
  609.           sztoken[itoken++]=0;: V8 |6 E6 F! ~
  610.           return szRet;
    " e, a; I4 ?" E' ?, U/ B
  611.         }# P& O: }: o! l9 z
  612.       }
    ! d' }& |" w% W/ S6 A3 Z+ S
  613.       itoken++;& }; U5 W! O( f  p+ _9 s
  614.     }+ ]: i7 k9 f# `' j& n4 P2 _8 ?9 a$ l
  615.   }
    ! t1 _# @) F: D  ~, J8 m
  616.   return NULL;4 W: \- C9 T0 B% V+ F# f! U& q
  617. }
    / i% J( r9 D5 }# j$ y" K

  618. , m/ p- U; O1 _8 B/ J
  619. void ProcessProc(long Total,long Current)  {5 c' h) s( k, u, ?8 L6 m
  620. {2 ]8 ?' I8 G' {! N) I
  621.         MSG msg;" S! v% f; \% z7 P& x
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);" R1 l4 e3 A2 h9 ^$ ^& |, {
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    / X7 Z1 [. R8 O, l' I2 D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)): _0 o$ y) a  n8 m1 O
  625.         {
    # Y$ y! [& o0 f& X: O" ~5 `
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ' g+ h) ?, k/ U8 X6 a( F  R
  627.                 {2 c  g) b+ }; a/ o
  628.                         return;% H: f* E! H9 X$ V
  629.                 }% E$ t/ J' J, Q! z9 U. _1 C
  630.                 TranslateMessage(&msg);. w% ~. \5 ]6 K$ }1 t  U/ J
  631.                 DispatchMessage(&msg);
    2 Q6 W  K$ C+ t$ J( L0 A  D8 f9 T
  632.         }        1 P  @. ]  f: l" n' O5 n1 O0 k
  633. }
    1 b4 K# S, N/ n1 A8 Y2 t& e

  634. 9 l: p2 B7 k9 m  t  X8 H
  635. BOOL bFirstChar=TRUE;
    . x0 V. M8 {: d6 z& [: A8 P% \7 s

  636. : Z4 q7 C1 [4 e# d
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    2 m4 l" q  O8 [. J  j& _, ?
  638. {4 \6 I' H9 `8 _  Y( \
  639.         // TODO: Add your specialized code here and/or call the base class
    $ X7 q5 n% f& ]! n
  640.   switch(dwProgramState)/ h# _' n) `9 j9 M5 q
  641.   {( M9 \/ I" ]& k( d" M; t
  642.   case AP_NOTHING:
    + e+ T+ ]* X4 j6 j3 s
  643.     switch(dwStartUpSteps)0 K8 D) G- o; V: \% E4 ^  h
  644.     {% K; G; k) q4 y4 \
  645.     case 1:. ~- k4 _7 Y/ Y
  646.       {& h7 i; ?9 C. ^" H9 x: x
  647.         int i;0 [% @& l( E6 O$ R, C7 i
  648.         CDC *pCDC=dlg->GetDC();
    7 A0 \7 h' e! f! s3 W
  649.         HDC hdcwnd=pCDC->m_hDC;
    3 e1 {0 y! m8 @, ]: F3 |+ {
  650. //        Graphics graphics(hdcwnd);9 s0 q% T! |4 x, _' I- V
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    0 d2 V3 Z0 Q% J- e" O; k& L' ~
  652. //        INT iWidth=bitmap.GetWidth();/ k9 W& |- d" I( Z* U( |9 U2 Y
  653. //        INT iHeight=bitmap.GetHeight();
    # B: t. U5 n2 m  j
  654. //        Color color,colorTemp;
    8 {  f, }7 L+ B; j
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)( o( N0 y8 A/ y+ K4 b6 ^
  656. //        {
    * b/ B/ h$ t3 m4 |9 B/ z& N; d
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ! L( k; c& H0 t2 U
  658. //          {0 R; i2 i4 t+ z& |- j. A1 \# p
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; i& d! w: A7 p" Q2 O8 a
  660. //            colorTemp.SetValue(color.MakeARGB(
    + Z$ Y# s: i3 }! T& O, t
  661. //              (BYTE)(255*iColumn/iWidth),
    8 H6 C3 P/ l& j1 g- X4 u' T
  662. //              color.GetRed(),: K$ N3 N- H  V+ N2 b
  663. //              color.GetGreen(),
    ) L, w5 k5 f/ T) |0 m
  664. //              color.GetBlue()));
    * Z( C2 m/ G1 i8 P# R* }0 N
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    0 c- g" }* ~6 t  v& A
  666. //          }
    * @# s2 |5 A6 `& j9 I, a
  667. //        }
    / p6 d: N, O) V7 N) q; r2 T1 j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    1 k+ ?# Y: b% p- v3 l9 t/ L
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- Z$ U. t; s9 ]2 _4 Y! C# ]
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ) ?% Q4 E4 B  |3 x( D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");, d' f, e. @- A$ {% w
  672.         for(i=0;i<240;i+=8)" r$ p, p( f$ Z7 ^$ `
  673.         {, f* ~7 Y& W. n. w( \2 E: @7 G
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& u, i& N( i& C2 q, T5 N
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: @+ s! h& a" U9 c  B9 w) U( t3 E8 j
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # Q5 W2 T* w2 t. o3 l
  677.           Sleep(33);" V+ q. _' z! T9 ~8 E9 m
  678.         }, c/ x9 h% @" h) q
  679.         Sleep(1000);
    # d% B0 I/ R9 M) t7 V- b( k* X* h( R
  680.         for(i=240;i>0;i-=8)
      @2 ~1 v7 K" I8 N1 O9 u$ I
  681.         {9 s9 B4 p7 ?4 R& h/ _6 h9 A
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 [6 Z: q1 c& m, C8 d  Q& r+ q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " G  g, a: y2 t* h
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ i' T! y8 ^8 u  {* e
  685.           Sleep(33);
    ( T/ K0 @' g- Z
  686.         }3 g% [2 j4 ?2 f8 b* X: ?7 g* g% H
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    3 W' _6 `, f# j- H, _5 L' [
  688.         dlg->ReleaseDC(pCDC);
    . s, ?. g( B: o' n! V
  689.         DeleteDC(hdctar);
    * j( {- m0 }0 s& I' n, P
  690.         DeleteDC(hdcsrc);  t# r& K/ h1 S; |$ u7 p* H
  691.         DeleteDC(hdcorg);; V" r6 D4 O/ P) g
  692.       }
    # `! _# z+ p3 M. n. h
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);0 e3 h8 W' k/ y  e3 M. ]" e1 Y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    1 j% f* R/ w. @) x
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ( w7 z1 ]& Y2 A+ {% |9 ^
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    # ]- g6 _& H. A; W
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% ~& s. E1 u$ h, w% q" P. i
  698.       if(!Dn.Connected())6 D3 f, B7 w5 e: K% Y2 @  H
  699.       {
    9 z+ ?; R5 Z$ x: w2 k2 H+ D
  700.         dwTotalFiles=1;: {0 X- K* y( F: S. ~
  701.         dwDownLoaded=0;/ E8 @3 f! K9 p+ l9 T9 m, I7 n
  702.         bSilentStep=TRUE;
    : {! D1 [6 ~! c/ @. C
  703.         bCompressed=FALSE;
    2 ?* J- r$ z8 |* ?) Z" W
  704.         strExtLocal.Empty();
    4 Z1 z6 Z" J, _5 [- M# @
  705.         strFullName="readme.txt";
    4 X7 Z5 O. C. i3 \4 _3 J, K9 E
  706.         dwProgramState=AP_CONNECT;8 o/ ^/ M7 L& y5 V+ z
  707.       }
    5 V& A2 {, h, ]3 p5 m
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();% C) h6 E) D, }1 C1 b
  709.       dwStartUpSteps=2;% d$ }0 d2 W# _! F5 ]
  710.       break;! u% e9 v# x# n/ F
  711.     case 2:
    5 g5 `1 K+ _. M$ Q6 _$ j0 l
  712.       {+ T9 B% G0 v7 `. o9 Q
  713.         int iEOF;  q0 ^- H7 o8 e: R( w) S+ T9 ~
  714.         FILE *fp;1 x% l! u/ c3 A3 `) r) I
  715.         char szString[512];
    6 X+ d$ v; S! e6 P( F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 Z0 q) i5 I/ ^" V& C
  717.         if(fp)* p: Y  C/ \$ ?; T8 Q* o
  718.         {
    , U& P' v4 G* B6 e
  719.           do
    2 ?1 K8 W8 V- @
  720.           {0 Z) O- w% y5 ~5 w. t5 {; h, x
  721.             iEOF=fscanf(fp,"%s",szString);
    + A/ c% J6 G, [& j8 y3 |, m
  722.             if(strlen(szString))
    0 j+ w3 d0 c6 U* }3 C
  723.             {8 {, h1 @5 F4 A: x: V" b% }4 h* e
  724.               if(bFirstChar)8 f  j" g5 v! e2 e; R% q  f
  725.               {; e, r, n  G  ?7 J
  726.                 bFirstChar=FALSE;! |0 v4 m* e3 p( m
  727.                 bConnectIsBig5=FALSE;
    ( f7 Z0 C" E0 ~( R) R
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;: H; t5 Q6 K9 B6 i
  729.               }- j1 D& L* R. Z2 R- Q! E
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; c; v. u3 _. Y+ N- Y7 B
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    9 I4 g, \$ L, ~' t
  732.               dlg->m_ListText.AddString(szString);6 |6 V# J; P$ ?
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # w. ]: o8 ?! f1 L
  734.               *szString=0;1 w' `8 R" l1 J- F& w* F5 |
  735.             }, [6 R1 y& c2 ]# o9 C6 E5 |0 U6 j
  736.           } while(iEOF!=EOF);- \4 G( H# d' @) {5 c6 C* G
  737.           fclose(fp);- `# h, _* \, C: |+ q
  738.           unlink(".\\DownLoad\\readme.txt");+ |# l* f) |5 ^+ E+ {
  739.           dwStartUpSteps=3;& u1 z' q. T$ F; i; v
  740.         }1 C9 E( m& Z4 O( t8 T+ K  {
  741.       }
    6 Z! e0 \" n: e8 @" z( g( m1 s1 I
  742.       break;9 o- U$ P; \5 [; e1 E2 W
  743.     case 3:
      C) E2 _6 U! A. F( L3 L* X
  744.       if(!Dn.Connected())
    . Y& a! b" _) J5 }% b
  745.       {
    7 f# b  [- i9 I. ^! p: q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    7 w& o3 Z( K4 F) u9 ^
  747.         dwTotalFiles=1;
    ) o" E6 D8 A9 P# ?
  748.         dwDownLoaded=0;9 o# D: f/ b* d* ^3 g6 g. |
  749.         bSilentStep=TRUE;3 a$ C2 C$ o. a  p
  750.         bCompressed=FALSE;* ^, Q& s) e+ A6 E( v+ V
  751.         strExtLocal.Empty();
    1 M/ ~8 h% O0 g5 y
  752.         strFullName="checkversion.txt";
    : k  g+ p. I% n( m- R4 M0 H0 \
  753.         dwProgramState=AP_CONNECT;
    $ ^. O7 o7 b( A+ z/ F
  754.       }
    # {, m1 v: J0 l+ L8 w2 u" L# ?1 C4 c
  755.       dwStartUpSteps=4;
    # f' I9 `0 N  V3 t1 D( e
  756.       break;. q  W% ]) u5 v5 j
  757.     case 4:
    # t" o2 `5 `) I! f9 k; B( C6 o
  758.       {1 I5 g' q4 ?! e1 Z+ N$ F
  759.         FILE *fp;6 _; G2 o+ W# l: v* l
  760.         char szString1[128];. x% y- \- K$ Y2 B( S$ O0 `
  761.         char szString2[128];
    4 i1 c* {) V% q0 p8 Q
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");  O) ?" J% j$ J) J; e: s0 O
  763.         if(fp)
    " E1 n( Z# G6 S) q
  764.         {# r2 O; A" R( N" b$ [
  765.           fscanf(fp,"%s",szString1);- i+ I0 ?8 N' n+ k" f6 N! H5 M
  766.           fclose(fp);1 o) z3 _" C# R6 G  r7 L
  767.           fCheckVersion=atof(szString1);% D: c. c! h3 r: X$ h
  768.           fp=fopen(".\\checkversion.dat","r");2 A' n$ }. |& o! b
  769.           if(fp)( g- Z5 Y  L7 o
  770.           {5 x5 ]" i- z  \" m3 K& p  o; a
  771.             fscanf(fp,"%s",szString2);
    3 _8 w4 W1 y7 M/ J
  772.             fclose(fp);' D/ }" {. f1 A% D0 @
  773.             if(atof(szString1)!=atof(szString2)), [9 [, X$ C3 [& C0 w& N
  774.             {
    / L* v0 @7 t! [+ U( p8 R
  775.               if(!Dn.Connected())
    " j. k8 x* l; ?0 ]4 c
  776.               {( c% @/ k+ t  T( X2 w" [
  777.                 bFirstUpdate=TRUE;
    ) x7 e& F' ^( s& [
  778.                 dwTotalFiles=1;3 Y& s- ?% a+ j; p& Y# e
  779.                 dwDownLoaded=0;
    7 S0 R0 o1 X7 S  W
  780.                 bSilentStep=FALSE;
    4 p( q3 E4 F% J
  781.                 bCompressed=TRUE;' ]1 p# F# M  \/ p7 `+ e) k% `  w
  782.                 strExtLocal=".\\DownLoad\";
    ! P. U/ C3 q2 R( ^
  783.                 strFullName="update.txt";" Y4 c$ e! z" H9 K
  784.                 dwProgramState=AP_CONNECT;
    7 W% {8 N, O8 P2 V, L+ j' N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # C, K& \2 q; l) J/ Y5 f  Y- F
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 i1 Y& [* r- ]$ P# u, V' R
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");) c7 S9 F& R$ F9 R  a4 n. Y( D5 r( S$ ^; K

  788. - l9 a& b+ ?( B: G
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 X$ m5 K+ P3 N1 i5 o8 k  M
  790.                 unlink(".\\DownLoad\\checkversion.txt");$ M2 e( Q- H: W, Q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)8 K2 [6 ]" T+ @% j
  792.                 {
    8 E, M+ {( S0 N# H  s9 S3 f$ H9 Q
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");- {+ E2 ~: q3 o; x
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");& V, O$ O% |& P, Y3 r
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");6 h) m. r* T/ n$ R- \6 P
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & n8 n" V6 w2 j) X* I
  797. 7 R2 X: J2 b/ @; Z2 G0 m
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# ~0 m) L2 s" t9 X# U1 A. V" {8 a7 R
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + ^( ~7 y6 _( L+ _; n4 h
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! b4 m0 o8 A$ v3 U( F1 L6 q0 Y+ q4 c
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 v& L) g/ y% M4 X0 v# r0 u; _; J9 x
  802.                 }
    0 j8 D) }' o3 A% u7 I. \) l- m
  803.                 dwStartUpSteps=5;
    5 L* ]' n* a( `  j% e# Z
  804.               }
      l' T) q( _4 s
  805.             }3 G# K8 L4 ~, u2 Y5 D* f0 H: a
  806.             else8 y. \8 h4 T' z5 a3 X7 K* ]) j
  807.             {+ E& R+ N( u# J+ i9 ?
  808.               unlink(".\\DownLoad\\checkversion.txt");% B, F2 f: G3 c7 B9 x
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - w7 p* `, |% [! X# e4 ]
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 Z  o4 m) R: S# w4 c6 H
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");# e; f* F* \& J; `& C/ N& {! O
  812. ) L! A" `# O! M) V# e3 f; Y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 e( G5 T0 \  Z& R, C! S
  814.               dwStartUpSteps=99;
    2 z. h1 h" Q" y" S8 v
  815.               bFinishUpdated=TRUE;4 Y- Y$ }( I2 h4 F; M
  816.               bCanUpdate=TRUE;
    / d% U' t6 W3 ?4 y* z* c* T+ L
  817.             }, q, |, t! o8 E) e' p
  818.           }/ o5 q4 H9 s& M' y
  819.           else
    1 O9 v, q( g- s
  820.           {- D+ p0 a5 b; b. h/ u3 z+ L
  821.             if(!Dn.Connected())8 Y5 U5 C. K' d+ [: z9 x
  822.             {" }& R  r% Q7 l2 R  x$ b
  823.               bFirstUpdate=TRUE;! H5 A) S/ L, L6 v& V
  824.               dwTotalFiles=1;. D- o* M. V2 {$ _$ N
  825.               dwDownLoaded=0;
    7 z. Y- E& q  ~7 c7 T8 l
  826.               bSilentStep=FALSE;
    4 p& t: ?- Z$ K4 l9 x1 z  s
  827.               bCompressed=TRUE;6 v& u  H+ s; h1 }) M7 E
  828.               strExtLocal=".\\DownLoad\";% e% Z; j  ?, L
  829.               strFullName="update.txt";9 ?1 k- n5 j: J7 x- r( U6 k7 r/ R3 Y
  830.               dwProgramState=AP_CONNECT;
    - ~$ p0 e1 P2 y$ B% S7 n- P
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " M: Q+ H8 `& i/ B; y
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");! w: c$ v: a6 r& U7 i  i
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' r  a% l8 ]/ V, L' H
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      E8 H; L; }  X; A
  835.               unlink(".\\DownLoad\\checkversion.txt");4 L$ J: l& _! k/ t) \, N
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    8 Y7 x& G" D7 l
  837.               {& A" S5 B2 k: t1 n0 F
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");/ t  K) k# F/ B7 ]
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");" j: y) Q- [0 G2 s, e6 P# J
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");9 R2 r3 k- R/ h/ d3 {. f
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- f) k. g- p* o, z  A5 _
  842.                
    3 O  G3 I* y7 C3 X. {
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, D9 V4 K( Q$ @6 K  B. b, M: m  D9 E
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ p) `" ^! @( K1 s& D4 S: W- K
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; {8 i# P$ N8 b
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * V4 h( ?' c9 l
  847.               }( \' Z" B! H# M! U
  848.               dwStartUpSteps=5;# r- R  B0 |! r8 d) w% R
  849.             }+ c, _* C* z% a8 B8 l: b% A
  850.           }
    2 t0 y8 f9 Y' J) X3 E; g. E7 m
  851.         }, h  r. \  G' A% @5 P
  852.         else
    6 V2 p" }" w4 n
  853.         {
    9 }7 U' r* g/ x! }# w
  854.           dwStartUpSteps=3;7 U) K1 g1 v, {8 F; [
  855.         }
    , v  w* Z  D7 L
  856.       }
    9 f9 ^# e: L, S! Z* X
  857.       break;+ w/ a+ d0 X3 n/ d
  858.     case 5:; g2 C$ f! V% Q* B$ I# W
  859.       {
    1 H' L+ S9 e0 T7 u$ e
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)1 o: L$ F9 e; z1 y
  861.         {& k; [! {! S3 {) m- D
  862.           int opt_overwrite=1;
    9 ~, u, ?7 _/ g3 `+ M% `" ~
  863.           int opt_do_extract_withoutpath=0;2 p3 [* T0 g1 y0 U, ^2 N' {* o
  864.           unzFile uf=NULL;
    1 o' i1 y* \  ?8 N& H

  865. 1 T' e- a' S9 }: ~- R! Y
  866.           uf=unzOpen("Wsa.zip");
    * W3 A2 i; s& \) P, w& A" Y1 D$ c4 O
  867.           if(uf)' d* X5 m8 L8 F% ~' e5 u
  868.           {
    2 N* N6 o6 G4 W( G4 F) b% h
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    6 u( U) B" ]5 e; N3 ]' e1 b2 J
  870.             unzClose(uf);- e: [& s$ t# C+ E7 E( B
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");* {* J2 g; y/ k/ |# b( d0 \. r
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    % N, g* b( b( q# B7 ]/ h: N
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    , Q+ Q3 ?9 U* `3 U
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 _# _- |0 o% L+ T3 x
  875.           }
    . Q+ z& y" k& o% m
  876.           DeleteFile("Wsa.zip" );- J" e+ E- [" g
  877.         }
    # `: i: b' I. G6 i; v  h& r$ P
  878. ' k# n& |2 _* b( N7 B- e/ u
  879.         if(CheckLocalVersion())+ [) i# e1 Y1 q" F
  880.         {# k8 l2 _- }4 J; C( j+ s5 \. o& I
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    " o2 C- B) Z2 M! H- x
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
      M+ j- ~0 j7 L8 H3 a
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");" p" a: k- ]( Q+ w: g; C7 }
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' Q0 {" ~" g: t# a7 w' j4 }
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    . L. u# m( k; u) `; ^# i6 T
  886.           dwStartUpSteps=99;
    . J; L* _; g$ q/ o. O
  887.         }
      ?+ I1 j& p9 Q
  888.         else
    % R1 _1 Z) ^& o# Z7 J
  889.         {
    6 z) h8 {0 M$ r: l8 n" a1 r9 P$ i
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# b, b3 n4 b3 o5 h: P' h9 c* Z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    6 C  H/ p, |; a, w4 R
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");7 c) ~2 ^* Y  E3 l" o  G

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

9 R6 W% K: C+ T' Z( v# z

評分

參與人數 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-2 22:20

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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