找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
* m% H; }& b7 I' b( O
  1. / RevApp.cpp : Defines the class behaviors for the application.
      u1 h4 v+ H& K/ N  D
  2. //
    ! E* D  e& H4 P
  3. * B! M, D. z' {" g
  4. #include "stdafx.h"
    0 }1 F! U9 J* o, y8 L; W5 M7 o# w! t- }
  5. . z2 O' c8 t) h3 ~/ o
  6. //#define UNICODE, n7 M7 D! p2 s% A) z3 j7 T
  7. //#include <gdiplus.h>
    8 W$ D; K2 H: j
  8. //using namespace Gdiplus;! q$ S0 K$ u% v+ G

  9. * l: ~* l+ U4 @
  10. #include "RevApp.h"* P8 Z+ O' b8 S/ G! |
  11. #include "RevAppDlg.h"# [2 r' U# F$ E9 K; v+ m, w! W

  12. 6 g% H6 S8 o- T) ]8 k* U
  13. #pragma warning(disable:4786)
    * e+ w) Q7 S3 o, `6 n
  14. #include <map>
    9 L: z2 P9 s8 G" v8 @4 j. U4 i
  15. #include <list>4 S- @- Y7 d# W) U8 I9 [9 p( v
  16. #include <direct.h>7 Q; A; N) b9 _0 g; U6 T9 L4 Y% P0 j

  17. , O# K. h5 l' x* V
  18. #ifdef _DEBUG
    - n* R* ]# H+ C& p9 ?
  19. #define new DEBUG_NEW' f2 I0 @9 b/ ~$ U# v" @! q
  20. #undef THIS_FILE
    ) ]1 Y( s0 B. `& r# H; X* @/ ?3 M
  21. static char THIS_FILE[] = __FILE__;' O) ~2 a. k( e2 V
  22. #endif
    " j, b" H5 O; G( H4 G$ k  R
  23. #include "SkinResDef.h"" P( K3 R; \  b0 v8 Y  F0 w7 A
  24. #include "ChangeBG.h") L" t' B3 @7 g4 ~
  25. #include "AFXINET.H"4 j# B* w, m# R/ O+ I% ]

  26. - \  M2 K, h, |
  27. #define TRADITIONAL_CHINESE 0# T: F  F  c) \# Q
  28. #define SIMPLIFY_CHINESE 1
    1 q: K% U& X% f) E4 s6 m
  29. #define ENGLISH 2& N; X9 g9 U1 e! R; B) ~
  30. int m_iLanguage = ENGLISH;
    5 E4 f+ e, Y' H; V9 C
  31. /////////////////////////////////////////////////////////////////////////////0 g* \- ~2 X! b# |) s0 L
  32. // CRevAppApp
    0 {! ?$ t8 D4 J6 M

  33. 6 Z% ?. i* g' C
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    : S( ?# Z) A# n4 y- u
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    0 q* m+ P) c6 f6 E+ x1 l
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.9 D; f" T9 U& M& E* u6 V+ ]# L
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!4 H4 k0 z. K: Z' H
  38.         //}}AFX_MSG) s# |' f+ D8 |
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
      P5 N- a) F9 t4 P3 g
  40. END_MESSAGE_MAP()
    4 I( }7 p0 w. M0 S

  41. ! M0 p  X) E& l
  42. /////////////////////////////////////////////////////////////////////////////
    * o) C) c" J+ t  L
  43. // CRevAppApp construction0 Y; g9 O& z0 h+ X

  44. 4 C% W# h& z6 q+ Q8 ^2 P9 x1 a
  45. CRevAppApp::CRevAppApp()
    & t' d3 |; e6 B' ]7 q
  46. {. s- F% Y6 Y0 o# a
  47.         // TODO: add construction code here,
    * w9 V' t* H4 U7 y, K
  48.         // Place all significant initialization in InitInstance
    7 V0 p4 I: t& `1 o/ ~9 [3 m: Y
  49.   bDisplayIsBig5=FALSE;+ a! Y: F) r: q4 N2 R
  50.   bRestartUpdater=FALSE;
    : s+ U5 E  G8 I, ]1 N% A. S) L
  51.   bFinishUpdated=FALSE;+ Z6 d; ^) L9 u8 R
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;  E7 Y! a3 C' q, A' h; x  X1 W2 u9 j
  53.   InitChangeDataBig52GBKS();
    " W7 `, r: D1 Q0 d: L
  54.   InitChangeDataGBKS2Big5();) x( G& b: S5 G) V: _' N; `
  55.         //
    1 O, N2 c- p  n
  56.         bClickRunExe = FALSE;
    $ x" D7 W. a; \
  57.         //
    7 x! y: a" l5 `/ W8 ]
  58. }7 C& G: ~- t! l0 u' j) p

  59. / B9 d1 b2 {5 |8 H' J: r  O
  60. CRevAppApp::~CRevAppApp()
    ( d: m) Q2 ]$ j# U. s- X
  61. {
    8 a1 ?: s# x6 s
  62.         // TODO: add construction code here,$ @% k/ d& N8 u+ b" _- q
  63.         // Place all significant initialization in InitInstance
    6 e" G* @0 t: i. h$ z$ W
  64.   EndChangeData();
    ; x# }' P8 p1 H5 ?% o+ @9 U
  65. }- J5 H# R# y& A2 M. m/ v

  66.   B6 H" l, X) Y; E! v
  67. /////////////////////////////////////////////////////////////////////////////
    0 F/ |! Z( ~9 }: Q
  68. // The one and only CRevAppApp object8 V. [* O7 W1 O# b! t0 N
  69. 0 v2 D) T" O. X+ E5 x# X, }  `
  70. CRevAppApp theApp;
    6 N: u( t6 n. G" t4 i' ?

  71. + e3 k+ f/ B- o$ {/ f9 G
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    3 c& `8 z/ I# d  K: J4 h
  73. {, L8 ~5 t) P$ r4 S3 E$ n
  74.   int iEOF=0;; _  J8 f) Y" g6 z# K7 P1 o+ Z
  75.   char szTempName[MAX_PATH];1 F1 w+ e& i. G( M
  76.   *szFileName=0;! O. u: ?: C9 e) x
  77.   iEOF=fscanf(fp,"%s",szTempName);
    " y1 M. [! y" W% R( K% E
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ! i& Z% t& p+ P/ s
  79.   {
    ; I: `4 q; u" j4 \
  80.     strcpy(szFileName,&szTempName[1]);, U! n. z# n4 |  e# y; i) L# T
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    + c3 @4 @! t( g+ q. \) x
  82.     {& T* s9 U' s8 J5 ]: P
  83.       iEOF=fscanf(fp,"%s",szTempName);3 H1 }0 E6 r/ T
  84.       strcat(szFileName," ");/ q5 R. ?9 ~  b0 g0 n; M, B/ @
  85.       strcat(szFileName,szTempName);( {7 j9 L$ z# K6 P" i7 |$ P) L) |
  86.     }5 X& z! w! ]$ G# y  @' v" R1 M5 ~5 x
  87.     if(strlen(szFileName)>=1)
    5 G9 E1 [. `+ O) D0 l
  88.     {$ [: v* J+ [( V+ B* j# q* a
  89.       szFileName[strlen(szFileName)-1]=0;
    # T* t: I3 q; s& u" n: y
  90.     }( B% @8 P3 Y* P/ z
  91.   }  A+ G5 {: N0 z; q+ p; B
  92.   return szFileName;
    4 ?" Y+ Q8 s9 E& J6 S/ y
  93. }
    " f0 ]+ Q# P# _. w/ E$ f! L

  94. 4 v: f* L7 z' w% @: `6 o, |
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)" I, C5 `6 [- d7 f2 x) U6 c
  96. {
    4 o) G+ j* F2 ?( y
  97.   FILE *fp;
    4 a1 H+ s' b$ X2 \5 a9 \, @
  98.   char *key=NULL;
    ; ?- _; K+ h2 ?9 ?  E: [" O: Q
  99.   char version[MAX_PATH];
    & v6 a% R; d: p3 b
  100.   LPUPDATEFILE file,olds;8 a2 B+ i6 p! I
  101.   std::map<CString,LPUPDATEFILE>::iterator p;5 A3 ^% H0 x5 [! t

  102. 4 h  }: Q4 ~" y- I. {
  103.   UpdateList.clear();* Y0 w2 ^9 h% t
  104.   UpdateFile.clear();
    . ^* `. h4 Z6 K2 @% O& ~
  105.   if(GetFileAttributes(filename)==-1) return false;
    0 Q! B' Q/ s. m' O
  106.   if(!(fp=fopen(filename,"r"))) return false;3 X9 L3 L, Y7 o- e0 X0 f4 v
  107.   fscanf(fp,"%s",version);
    : N% O" o- i' }
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ; g" n' t% \& a7 q
  109.   while(fscanf(fp,"%s",version)!=EOF)
    : w& G3 s, r* N% h$ z
  110.   {5 u/ _6 b2 C8 C( f6 b" |4 Z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. I# c) p7 a0 h! l
  112.     fscanf(fp,"%s",file->path);" b' N* z# V6 [; z8 J' g
  113.     ReadFileNames(fp,file->file);& c% v! q; e1 b, e$ |; L
  114.     strcpy(file->full,".");# ?) B* q) P0 K% j6 c" |
  115.     strcat(file->full,file->path);7 F# i, U% s% n5 Z0 _3 S8 n+ q
  116.     strcat(file->full,file->file);. d* a! Z% {5 X- f9 ?* P
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ( a. Z. E" b- g' J
  118.     {
    ! d* A8 D" T% N- [# f' o
  119.       file->vers=(float)atof(version);
    * a5 U; B3 B, Y2 d- [
  120.       UpdateList.push_back(file->full);
    8 E' h; A; |, t/ p
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));" \- c. k( {5 Q( Z1 f, D
  122.     }
    5 k8 M$ a+ ~% `5 k  c: P1 k4 R
  123.     else
    ! ~6 S9 @/ y" _& ~
  124.     {
    6 j% i5 G  y6 f7 L
  125.       olds=(*p).second;/ l$ L8 F3 ~" P0 G- |; E4 }% z
  126.       if(olds->vers<(float)atof(version))- s: w& L, B. i" z" F7 ?
  127.       {
    # g& C3 y) t# \  I( O/ M$ m- W' J
  128.         olds->vers=(float)atof(version);
    , Y4 c% o7 Z! w  N, k
  129.       }
    ) W* P. t5 w( S
  130.       free(file);7 @+ S" n: }+ i+ t3 x9 P" k
  131.     }8 _) o1 E8 @: L( C7 ^. L& b
  132.   }
    / k1 Z' a' Q- r, F/ x4 N
  133.   fclose(fp);$ b  _0 w% o) U% t) V' \% E
  134.   return true;
    ; Y# J4 i8 u- f- {! k  r/ A' q5 }
  135. }( @3 f* `! F/ e1 k+ J) C
  136. 1 p! C% o& s1 _" c! [. p$ I
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)! N. ?- Q3 J; k- t$ x) h8 f
  138. {
    1 G; w, Z+ V7 N0 O& m+ n
  139.   TCHAR  szFull[MAX_PATH];3 |0 J& O/ E/ U3 Q9 k
  140.   TCHAR *token,*inter;- ~" k+ \- f/ k% e5 l
  141.   *szPath=0;
    * z/ F: q  q5 y1 k# N# Q
  142.   strcpy(szFull,szFullPath);
    $ H9 K/ c5 Z* f$ W
  143.   token=strtok(szFull,"\\/");
    , p/ a) q: W6 G
  144.   inter=token;: X) @9 Q( z/ E
  145.   while(token=strtok(NULL,"\\/"))! X. a( J  O) ^& W' I
  146.   {6 P% t/ f+ N% J/ E
  147.     strcat(szPath,inter);
    . k2 ^) F) @$ O7 G9 V# |. d
  148.     strcat(szPath,"\");
    8 y& t" U/ ^+ Y/ R  e" h' V
  149.     inter=token;( b9 d8 u# [3 H  ?
  150.   }# W# V9 I- m- e, ~3 N( f1 t3 v$ |
  151.   return strlen(szPath);
    ) S; d" N& _3 U
  152. }
    ) z. \0 O6 M0 V( I3 k+ ^

  153. - \* `/ ?: ]- N: b2 h
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)7 E, K3 B$ V( x3 K! d$ e2 l( L* z
  155. {, m6 ?3 l; Y+ F9 v
  156.   DWORD attrib=GetFileAttributes(Target);
    3 O! A1 J5 r- N6 J
  157.   if(attrib!=-1)
    8 t2 X! X3 _  A9 e" ^2 D8 b9 C: b
  158.   {; T  E$ m; K) N: t" `
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))) X+ @  f) F" ]0 X; u8 a+ F/ M
  160.     {4 d4 W9 r) Q( b, |" B* a
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ' x3 ?, N: Z- n& X6 U8 e% T
  162.       SetFileAttributes(Target,attrib);
    + w) m3 |9 Q  I$ b" k
  163.     }
    * ^) M# p, a% T- ?, ]
  164.   }; [' D5 _( {' V# k
  165.   CopyFile(Source,Target,Erase);. {; [! s' ~4 C- Y( R0 I
  166. }
    9 ?. _/ |; |$ u* R' p0 {1 s$ k5 W
  167. 7 l+ C9 b- s7 y* F* l' ]
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)' C& \% R# Q0 _4 f7 o3 _3 w5 O7 G0 I
  169. {
    3 \% K1 y4 f5 b! {% W; J
  170.      FILE *fp;
    1 F4 r/ S& {+ d# `
  171.      char  szBuffer[8192];
    - f. }- S# R& r# p* d+ v% L
  172.   va_list  argptr;
    7 U9 D$ m( e( c7 p$ U
  173. " b2 |) v! X! L/ @5 C! O
  174.         va_start(argptr,message);
    ; k7 q* |7 T8 W5 G* y0 K
  175.         vsprintf(szBuffer,message,argptr);
    4 p( U( j8 n$ ?. O& m
  176.         va_end(argptr);
    , n* @4 \( M2 `* w8 [2 {
  177.   fp=fopen(FileName,"a");
    0 D+ P  P8 |: }4 _8 ]+ }% [
  178.   if(fp)
    0 }( R2 T  ?* U& E7 W) V4 ~3 h
  179.   {3 V# V+ j3 e2 L0 z
  180.     fprintf(fp,szBuffer);
    - ?8 |0 |* h& [5 Y. t
  181.     fclose(fp);
    ' }! k3 T8 w+ Q( ^3 z& u( E, {7 _
  182.           _flushall();
    ( _) }& X$ X; B* B  ?
  183.   }
    % g( V/ ?9 F* c6 M/ [# G( B7 n
  184. }
    + q: M9 v' `$ E/ i, r1 O

  185. $ u8 J3 g( Y0 q
  186. BOOL CRevAppApp::Fclearf(char *FileName); ~& t7 ]( F, y$ Z' \$ N, v
  187. {
    + g" x. X$ Z3 ~- Y/ r8 B3 n* V
  188.      FILE *fp;
    8 c. ~5 c9 g! T) Y! `
  189.     DWORD  attrib;
    $ d( @2 x. F/ ]$ I1 v; H
  190.   attrib=GetFileAttributes(FileName);
    $ a  f" `& _; i- }! o
  191.   if(attrib!=-1)
    5 ^1 z8 u1 P: }- B' P1 ~
  192.   {
    ! Q6 W. O4 g1 |( p1 i
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    0 z. O* c7 |; U2 x% e
  194.     if(!SetFileAttributes(FileName,attrib))0 l/ e3 c% }* t" W$ h
  195.     {
    + [. }  X$ t8 r4 K9 q% g
  196.       return FALSE;
    # ^* {$ q, f. `  z* y2 p; \. |
  197.     }
    1 G: X- }1 s& V! m' }
  198.   }
    3 c! [! [& z& N7 f5 x' q
  199.   fp=fopen(FileName,"wb");3 B( J, F; [' s" ~. z' R
  200.   if(fp)3 C4 z) |1 s2 s6 x; S: P  g' @
  201.   {! a. N% J, S, |' y
  202.     fclose(fp);3 z+ o% }8 k0 j. @6 |- C
  203.   }
    + Q6 H# z: b  L, k, S: Z: _( ~$ A
  204.   return TRUE;
    3 L# H( o: E) s  _
  205. }  Q. x0 O4 c  ^: g
  206. & Y& s) o; `2 Y5 p/ r* c2 ]
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ) @. }3 I) y# A/ `- e
  208. {3 B0 ~& `( J; I' s$ @( G
  209.   char filename[MAX_PATH];
    ; w+ g2 `% P) r' R
  210.   LPUPDATEFILE file,olds;. I' D; ]1 n& r1 s" @- w. M
  211.   std::map<int,CString>::iterator i;" s3 A% ~& \$ B) {+ J3 Y$ l
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; b1 k% ~0 b6 j5 V8 ~  y
  213.   std::list<CString>::iterator l;
    1 O8 ~1 M! |* Y+ _. C3 C# P* Y& q
  214. 6 C! r' [  x8 u* B* ^; V
  215.   if(bFirstUpdate)
    7 g4 L: ^% O" F6 J- I
  216.   {: w! h; }5 V2 k9 Q* g# \. A
  217.     dwCurrFile=0;
    6 n( N3 v0 u! P/ b8 p4 z. M
  218.     bFirstUpdate=FALSE;6 N5 R; x$ Q# J6 ?
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : Z% c" Y8 q, j+ P8 q* P- f: g
  220.     {
    4 B$ j$ t4 s5 @# K; Y1 M' H0 Q0 e
  221.       dwTotalFiles=UpdateLocal.size();% \  p" y. |, Y9 `$ w4 E* H* ?: ]
  222.       dwDownLoaded=0;
    ( P4 E3 ^! W9 {9 m+ G
  223.       bSilentStep=FALSE;
    / D# y- e0 a0 j. x. q
  224.       bCompressed=TRUE;
    - y' C/ G' L5 D  ?0 g+ p8 w
  225.       strExtLocal.Empty();
    - C0 T, _+ _  V" ?9 _( m+ y& w! D2 r
  226.       strFullName=(*i).second;9 P: i; @5 C' f9 I
  227.       dwProgramState=AP_CONNECT;8 x, a% ]* H1 H, e( b0 N
  228.       return TRUE;2 l# a8 ~4 I5 s1 f; g( [
  229.     }
    & ~. M2 a/ Q# s1 E1 e
  230.   }
    + Z6 n; D/ W5 W  A1 A4 T
  231.   else if(bRestartUpdater==FALSE)
    & O4 |; K8 T2 m8 @7 I7 g9 z
  232.   {
    + Q8 ^$ r; `9 A& ~4 H9 O* O8 L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    . m% E$ k/ Z! u4 N; y! t, r$ q
  234.     {
    " Z' ?$ v, [  x4 [
  235.       file=(*p).second;
    " r( o7 q' y/ |% L$ x& n
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    , t+ O. n. q2 X! s4 A
  237.       {
    9 \: H; Q- q+ ]0 y9 ~: K# _3 g
  238.         olds=(*p).second;% c5 }  t+ k6 s: ?. }: v
  239.         olds->vers=file->vers;
    . N& {! P" E( J  V, N+ g2 Q; M
  240.       }5 K1 D6 {" P7 n
  241.       else! |6 f7 @' d+ H: S
  242.       {# h! q! P, O9 a4 B
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 c2 \6 g, y8 v
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    2 C3 X, f+ F% `% H5 K" C! f7 S( P% f
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));; l1 W- ~) Q. a
  246.       }
    1 S# X% e" ^) R5 p8 k
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    * D/ j0 g! Q! ~) F
  248.       sprintf(filename,"(%s)",file->file);1 M$ u& V6 w7 _& r& h
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + }* t/ E! ?  X; h
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }, `  G8 o$ m0 I; o1 h
  251.     }
    ; R( D9 f: w6 G$ K
  252.     dwCurrFile++;7 S. X, o0 z1 ?, m+ J! D$ H
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); l. ]( C2 I* ?( V& O8 W
  254.     {
    & a$ ^' l3 x0 r$ h- W
  255.       bSilentStep=FALSE;
    " O! ?  k6 T4 O" A) u5 P- P! `
  256.       bCompressed=TRUE;% ?: d( x! U/ Z
  257.       strExtLocal.Empty();7 E7 S, A0 D( P2 W8 U
  258.       strFullName=(*i).second;
    0 @4 Y. k' L: v" C3 o6 T
  259.       dwProgramState=AP_CONNECT;
    : d' f7 `& _9 C! U
  260.       return TRUE;! j/ v' V. O: b: j# G* D! J; n/ t
  261.     }
    3 ]9 z3 x* M- F' @2 U
  262.     if(!bRestartUpdater)
    6 f, h; I! g* H. |) p2 j" p
  263.     {" v  B9 x( M1 P& c7 k. c3 \, B
  264.       int iCurrSize,iFileSize;* i; \9 z9 }4 X8 e2 y/ h# _
  265.       iCurrSize=0;
    ( w+ [! R- G6 l+ C. }* a
  266.       iFileSize=UpdateList2.size();
    * x7 J2 a; j  n9 j( o# Q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");# R6 t* j* ]5 b) k4 X& M
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");& z) c0 k) V/ W7 [2 N0 M, D
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");- O' s4 ?1 X6 U5 c
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& S: c/ h9 {0 o
  271.       Fclearf(".\\update.dat");8 e* N1 |0 D3 t) G8 ]8 j& P
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    & f- C4 i' j% }; `2 s7 Q8 _
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 y% N8 j/ N8 W- z/ V% z
  274.       {
    ! Y$ j, r1 ^5 y2 f! d
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())+ W/ L7 d" O: u$ w8 o) g) `, c
  276.         {7 ?9 a1 O3 s% n6 E
  277.           file=(*p).second;
    7 M8 ?' e# p& d) i! p! [0 w% q, u
  278.           sprintf(filename,"(%s)",file->file);7 }+ F$ Y% l% y7 F1 D0 ^) ~+ f, @
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' b% \3 @8 R, P  K
  280.           iCurrSize++;4 n- [7 p7 L5 Z2 [
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    + h( m- {4 z" L' K6 \
  282.         }" Y5 K: q0 W, D' A- y: Z
  283.       }6 ?& k9 j. z$ y) m
  284.       unlink(".\\update.txt");
    ( `7 l4 m9 ]: f8 c$ h
  285.       unlink(".\\update.tmp");
    * {% p' Y  O, |  U
  286.       Fclearf(".\\checkversion.dat");  y! C; O0 X: w8 D3 N* U+ ]6 T0 _; P
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    # n0 v0 U8 M2 k4 F
  288.       if(UpdateLocal.size())% I; o2 z) M0 |; s6 C2 U
  289.       {' L, v# k7 o% O) e
  290.         UpdateLocal.clear();1 M: p2 L' ^* k
  291.       }
    8 \, I- w5 N) b2 T& Z1 ^8 B1 S1 N
  292.       if(UpdateFile3.size())
    ; Z9 [3 `, `  K5 w1 E4 I0 [9 d
  293.       {0 ^8 F2 v$ y. q$ B* X& |$ S% X* |
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) F% Y4 \0 J2 ]/ N% i3 ~8 u6 \
  295.         {3 D7 E- N1 n5 E  ?" l
  296.           file=(*p).second;
    6 g2 j5 q+ o) c6 f& G# _
  297.           free(file);; }' c" _! F' A4 @9 u- O4 Z
  298.         }
    4 ^& U, K5 n1 E# ?
  299.         UpdateFile3.clear();
    / s2 n  G5 E- n" {$ \
  300.         UpdateList3.clear();
    7 e7 s; d8 V& P! S1 U  }) b& p
  301.       }8 l4 L+ ?4 e, f9 u$ `& `
  302.       if(UpdateFile2.size())
    ( O- w2 ?1 K; |* b+ c  p! X: y
  303.       {9 _/ x! Z* f& V4 c! Q9 i
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 V6 b, P& t+ @9 H5 R- P8 A1 Q
  305.         {2 n5 I$ p9 R0 d& Y
  306.           file=(*p).second;
    / D5 |! a6 B% O7 y0 q3 O, X5 s: @
  307.           free(file);
    8 L; u8 @" H# R' e, `/ d. X4 @
  308.         }& I% P) }) D" R0 F
  309.         UpdateFile2.clear();
    7 }% L! S$ ]- t( `2 \4 C& q/ @' }
  310.         UpdateList2.clear();
    % N$ O, f! p( ^( M
  311.       }
    9 O6 y8 L2 t  K% l0 d  O
  312.       if(UpdateFile1.size())
    ( P7 k/ c4 O. n9 Y* k6 e$ O
  313.       {
    " W* W" g; M+ o: _7 ?' A/ l
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + [' H" |6 g( t5 H# Z. [  D
  315.         {! y( n: X1 i2 X8 k7 c; _3 V9 J3 q
  316.           file=(*p).second;
    2 a) R% l$ f) L  N6 o) X5 s2 Q
  317.           free(file);
    9 E2 T+ s& ^/ L" r5 M! a
  318.         }( p  v8 T, q1 @4 K, R
  319.         UpdateFile1.clear();
      ?$ W7 t4 `- {  f- ?
  320.         UpdateList1.clear();
    ) t5 ?  A9 H! Z) P& p' r- v, V8 Y& o
  321.       }& h( [' {; W3 P
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' y7 W% t+ p* `& X" J
  323.     }+ ~" a1 K8 I! ?2 c2 F
  324.   }
    * C3 a8 L  p! x# Q
  325.   return FALSE;
      I1 e& B: f7 w7 Y7 L) [
  326. }7 [# N+ e" `$ l; |6 m
  327. . _) V6 U: h  J: U0 L' ^
  328. void CRevAppApp::ClearAll(void)9 S8 a, q5 }/ A" v6 f0 R: {" K
  329. {1 F- @% a+ p: U, d+ S6 b: q
  330.   LPUPDATEFILE file;
    1 a6 j5 P8 U) b0 ?# J, N& l4 x2 c" e
  331.   std::map<CString,LPUPDATEFILE>::iterator p;/ z$ P- |+ Y. m; B  [
  332. 6 n" o* D  m, T+ p1 k
  333.   if(UpdateLocal.size())$ B9 x* \8 B$ q1 z6 q5 J# _
  334.   {
    3 E1 x+ B/ @$ m8 \
  335.     UpdateLocal.clear();
    9 \, V4 m7 {9 ~; p  s
  336.   }9 Y3 N/ j' ~  o
  337.   if(UpdateFile3.size())* H8 I' |3 s% J
  338.   {) w  C/ K5 E( j3 h6 i8 q
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 M1 G3 [7 N( A
  340.     {& o3 z/ k3 ?5 }5 n5 E9 X' ]
  341.       file=(*p).second;
    ' A5 {7 n7 b9 |2 X+ B" v6 ^
  342.       free(file);9 ?( w9 r1 Y- w
  343.     }" V! I) g; D( T1 Z" z
  344.     UpdateFile3.clear();) _" @. z3 [( I
  345.     UpdateList3.clear();7 s2 L, ^7 e$ H' Q! }' H& q
  346.   }7 L  k5 g% I7 L- {# ?
  347.   if(UpdateFile2.size())
    6 y, P/ {( R( g, l8 a! Q2 ^
  348.   {: t! F' Q% b3 }; L9 z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    9 Q4 Z+ f9 f- e' [+ N
  350.     {0 C8 ~9 D8 W, g7 @/ t1 T
  351.       file=(*p).second;) @5 ]1 {. U% L) q& h  S. \" I
  352.       free(file);# A/ j5 u" e: x
  353.     }
    4 I  i! E! Z" b& S
  354.     UpdateFile2.clear();
    1 u8 p0 t6 o; ?9 |
  355.     UpdateList2.clear();0 w( z/ q& q0 o
  356.   }
    % Q8 i5 B/ a2 b9 W! M& L. G- O
  357.   if(UpdateFile1.size()); ?& ^7 z# k4 z( {2 x
  358.   {! U7 C. t  G/ m7 n6 b7 j  [% I6 @5 g% G
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ b) D; K+ x( L+ S
  360.     {) `/ Y/ \* F8 \' Q0 T
  361.       file=(*p).second;, r, m& B, f, P4 a/ q: c9 C/ v6 g
  362.       free(file);7 d6 d* K* K* c  _: G
  363.     }" z6 c; N5 K+ I) ]" d
  364.     UpdateFile1.clear();( y; n" j! h* o* _! m0 L/ T
  365.     UpdateList1.clear();. E( I- l/ e4 c! I. V' j3 U
  366.   }
    . ^9 O; R" R- Q" i4 A# [" i
  367. }  
    & t% _6 \! a& m8 x+ h; k4 H" U* y
  368.   
    & {& a9 h4 a8 B' ^! Z/ w3 g
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    . `3 {# Q" ~. K" Y+ R
  370. {
    . N6 ~0 ^0 O5 L# s
  371.   int c;
    ; U3 J0 R$ Y  g
  372.   LPUPDATEFILE file1,file2;& p, l/ i2 k& G9 h  H% t4 n% g
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;5 A/ Z* U2 Q' J  o  a% F( s- ^) r; Z
  374.   std::list<CString>::iterator l;
    . J- ~( f# h( E/ n! x
  375. 8 \, b$ [8 l% Z3 k
  376.   UpdateLocal.clear();. U2 N1 n" e) g
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    : R; U! b2 g2 H( p
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);' z6 n$ U. l6 v) f; `7 h
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);; L2 r/ N4 Y0 u3 `
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    7 p4 j' Y& N  e& R1 E
  381.   if(UpdateFile3.size())
    " Q" L, ^# c4 X
  382.   {
    * I3 |: i# B0 M
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)( Z% i/ M. x! W* D9 s
  384.     {5 R1 _/ G* z" R9 R! f6 v
  385.       file2=(LPUPDATEFILE)(*i).second;
    # f3 d( }, w: _: F
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ `5 K- ?( ^! l5 ^* D
  387.       {% v/ ~- Y% n6 i( B; s- z# o
  388.         file1=(LPUPDATEFILE)(*p).second;. R' X% Z3 {, \" z& v# q
  389.         file1->vers=file2->vers;  s/ p  x+ Z$ S9 f, r. I
  390.       }
    , M7 s& p4 U. b, ]! c) Q+ ^
  391.       else1 Q- K8 [. d, M0 S/ u+ G
  392.       {0 F' P8 M3 X/ L' i8 k3 _
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 t# `: {2 B3 O+ |. @  Q# Y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));3 e+ Z7 F9 Q' B, M
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    , f. U% s- R. y- [
  396.       }
    1 F" T# |, L9 g- V0 v
  397.     }; b  v; l# r# u; }1 d2 o
  398.   }
    & Y; t% {: P. e% P1 R
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)3 o5 W5 I& E2 v' |& D
  400.   {; A0 \/ K3 X) a5 Q  L! s6 v
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    3 Y9 h: u/ p  h1 K
  402.     {, i0 ~) E6 o8 _+ F6 M5 e/ _' P
  403.       file2=(LPUPDATEFILE)(*i).second;
    * S, X" s& Z: [- G9 Q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()): ?' d3 c& a# z1 ]6 {
  405.       {/ k5 X8 t2 F2 q7 z
  406.         file1=(LPUPDATEFILE)(*p).second;
    2 ~+ P5 q$ Z6 }' |% p! d' J' H& |
  407.         if(file1->vers!=file2->vers)
    ! f% K1 C  F" {/ @' \6 M5 g
  408.         {
    3 o5 B( x& x2 B# H1 o; {% D
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 Z' E8 B+ e9 o' K
  410.           c++;- ?) S1 |" o6 O: A" S0 _- x% ]: H
  411.         }/ b8 K/ Y. Z& S. S0 B) ~* j, c
  412.       }
    . X! z1 k. I; N+ ~
  413.       else, p7 E2 d+ L7 e: K% |, K) S
  414.       {# f' q: ^' \) s8 B) p4 p
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 y8 g1 k( n" y
  416.         c++;
    + h7 S4 u7 [' v6 T4 F
  417.       }$ I1 i: S, M6 p, X$ O
  418.     }
    . A! u3 u+ g, u6 e! g* ?/ k. Q6 Y
  419.   }
    3 U  v/ t$ E8 Y
  420.   unlink(".\\DownLoad\\update.txt");$ U& A) [( T. \; t3 I5 G+ f! `
  421.   if(UpdateLocal.size()) return TRUE;0 v4 C0 S7 H, L; Y$ Y
  422.   else                   return FALSE;  E: w7 y. c/ m# m" h& c
  423. }4 @5 f7 B. ^' R) s4 e) J5 N: Z
  424. / p7 e2 d: ^0 z/ B0 c7 L
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"1 K" Q0 E! u, u" ?
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    # p0 ~* g" u$ Z! v- F, a; g  @

  427. 3 ]8 \0 D: f/ N+ M

  428. $ ~8 @* P9 V' E6 w4 n
  429. 5 Q9 V- D( L/ [
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; `4 L$ L3 b& G3 r( a! E! M
  431. {
    # E# [* V2 b5 b" Z/ F" `4 y% W7 y! E
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;' D) I+ U8 B4 O5 A+ k' o  {
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ g4 e0 a- O" B0 e
  434.   {& E4 J) [, E' l2 M* e1 G# K8 S
  435.     char szLanguage[50];
    2 l- R& g% _; P
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 _  i  z3 U5 y- x# v, b; s6 H
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, R! J! h# a8 L6 N
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 D0 ?" _  f+ i
  439.     else                                   m_iLanguage=ENGLISH;: Q* \3 h- E. L; Z3 Q( j
  440.     char szRegister[100];
    1 B, V$ T4 U: L2 r' Z* M
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ \! H8 l9 u" a' D; ^
  442.     strRegsName=szRegister;) l/ K/ Z. R  R9 @& W5 F4 T
  443.     char szPatchURL[100];) B# I7 Q* q5 A6 Z+ g2 Y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- ^' s% m1 k  n, w$ ?5 G8 w, l
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 \2 Q% w' Y- p9 ?3 w" e
  446.   }" e2 _& @! n' b6 y1 z5 R( \
  447.   else6 n' A! v8 o! L3 z" J0 N% H
  448.   {) i5 r6 X9 O9 N( M/ |
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - ~9 v2 |+ S8 k
  450.     strRegsName=DEFAULT_REG_URL;4 G  L* c6 k! ]2 h; t" n
  451.   }' F2 @$ U$ z" r
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * ~  b& ~% T# c$ }! U
  453.   {. P1 O9 \+ ~6 f: I/ T
  454.     char szIP[50];
      l" X7 F/ P" J2 B5 M, }
  455.     char szDIR[300];% V) E' E) ^, e$ E( k
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    9 M# s) r+ G; w( C
  457.     {' W# y  e1 @! a4 P6 w6 x; M
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    3 r( O0 Q8 J1 h3 I7 v
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");% l  N% M6 w+ U% {/ N
  460.       strHostName=szIP;
    ' B5 S' j4 g* A% P5 h) @# y
  461.       strHostPath.Format("/%s",szDIR);8 s; k0 q9 u& O2 V% H
  462.     }
    4 j: @2 s1 b' [# f, H2 ^! N+ y8 [
  463.     else' v, i# [& [* h" _
  464.     {0 b$ m; j& U- A- x( J! b
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & O6 B1 w" v+ i0 k! f( C4 T6 g
  466.       {
    ' h  V% G2 h8 _
  467.         char szLanguage[50];0 u; M0 U9 Y( Y+ F
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 W1 s3 c/ i7 E& d5 I* G0 f3 N
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 B* z" y) m! J
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' U3 I. C/ G2 c% T5 b1 P; X
  471.         else                                   m_iLanguage=ENGLISH;3 v" A  _) O" X! H) q4 |" k
  472.         char szRegister[100];3 q9 k7 l# f6 ~7 m5 ?9 q# Q8 x
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , B8 M: [$ F" V" Q# E
  474.         strRegsName=szRegister;. n, y- O# |  [% Q, P5 Q
  475.         char szPatchURL[100];( ~1 C0 R- \) ]" n. ]+ \( ]" G; Z) d5 B
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / a6 r, n8 B, L
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: G! u: L0 f& e5 M' w7 a1 Q4 `2 G
  478.       }) k+ X/ Z& b0 h, g+ t! K$ c
  479.       else8 U! ]# X" `+ N- j7 ~2 b
  480.       {. x/ t! i3 `% ~; [6 @6 }
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 b# M% y( Q) p# G! S8 d. [
  482.         strRegsName=DEFAULT_REG_URL;
    7 `( O  Q0 s2 U% h1 V) s/ b% r
  483.       }
    7 d+ \7 ?, z. C; h( x
  484.     }) R+ I4 a5 }9 a7 q
  485.   }& d* A  R6 A$ S8 T$ T. Z
  486.   return true;
    + {  x5 d7 b( r; }' M
  487. }
    6 z  U* G- C" A9 [9 \/ |$ Z

  488. . d8 \) @" R. g4 A" _! A- i
  489. #include ".\ZLib\unzip.h"8 c2 C- H/ \% W! o
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);+ r2 T3 p- e/ Y  F
  491. /////////////////////////////////////////////////////////////////////////////. b$ t* d$ |% K2 G8 Z
  492. // CRevAppApp initialization+ Z" s. B/ d& D, G

  493. . W# {+ o. b" e; P" B
  494. BOOL CRevAppApp::InitInstance()
    ; d& I1 s1 D! V% a2 z
  495. {  {. L+ |) {" c  N7 I* U; P6 z$ w
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];% v0 x( T; z# |8 o$ U

  497. ; Q( u" w7 l% ]- R8 t- y" B) ^$ i
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);; ~) f8 D/ t0 M! C/ m/ G9 Z/ b
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))! w" y8 ]7 P3 r8 p; n  d
  500.   {
    , `! _! `& Z, R* ~
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    . e, R, C9 i( ~, }% V, T- H, s6 i
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    , Z1 U' l/ a+ U2 K
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    $ A+ N: Y1 X' r) u: u+ j8 |- [
  504.     {
    5 J! V! i: c* {1 d, _1 X; E, k
  505.       strcpy(szPath,szPathTarget);7 B& m; A+ e3 Y
  506.       SetCurrentDirectory(szPath);* _8 U: u0 o! s7 k1 u1 P" ]2 L/ y
  507.     }
    $ D9 A+ r: ~2 [* u
  508.   }
    ! r: L6 R0 l3 c0 v6 j. r
  509. #ifdef _DEBUG
    . K& F. m, A8 ]
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 m6 `) G% r3 z' Y1 ?. E
  511. #else
    - k" h( V: C" O: L$ o
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * k0 {. P! O& i1 C
  513. #endif
    " w, W( [& Y. c
  514.   {
    . g, @" w- y0 y) T, x
  515.     char tempFileName[MAX_PATH];
    % r5 v, U" |& k, E, `" i
  516.     strcpy(tempFileName,szPathSource);
    % v: n1 x+ o5 t' o
  517.     tempFileName[strlen(szPathSource)-12]=0;$ l2 Z9 D) o) O6 k5 }+ L/ r
  518.     strcat(tempFileName,"\\$CSUpdate.exe");3 G! [' V, @7 v; ^$ j
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);7 d- `0 f, n2 [' N0 M) ]
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ' [0 \- M% {. I& ~5 y: G$ z
  521.     return TRUE;
    * D9 s6 T- |- T/ c: K  l
  522.   }
    : [) f! x' k$ @. g7 e8 @
  523.   // Nuke 0118: Delete run.exe
    7 i- x" B6 Q2 y0 B
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );+ w' t8 f0 ^6 D, E
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    : M3 u: z  @+ |# G5 h, n! Y
  526.   if(!ReadCfgFile("Config.ini"))
    . Y* j- ~# x. Y/ w0 B9 D8 a8 f' I
  527.   {
    , k. S1 m9 @' `+ J3 e$ O1 q" `
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);0 a4 R2 y' c6 q5 k2 e4 k
  529.     return TRUE;7 ]% A# O  s& |1 t5 Z2 i
  530.   }
    + V$ G5 j" Q2 C) d# t, C% G* `
  531.   HANDLE mutex;
    - L) n) M3 q1 z/ ?2 U7 P8 H5 o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 c! _% M2 ^0 S/ ]+ ], j
  533.   {
    / _  L6 W1 h/ O+ g' W7 t/ o- b
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)' N* W0 T1 k# L) D. R  B9 @
  535.     {
    2 R8 M; @0 \7 G/ K# p( O& ^4 i
  536.       CloseHandle(mutex);* d. m9 e0 E# t' O
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);# t* a. R' j' Y+ u% l
  538.       return TRUE;
    - s) D. A' [7 p, x5 o
  539.     }
    / c" r( }/ h& F2 l/ J, }/ n1 \4 ?
  540.   }  
    : I6 N5 V( z* t4 M
  541.   CloseHandle(mutex);+ O2 S2 |, {$ s$ [7 G5 @1 `. L0 n: J
  542. $ [- h1 \) Q5 Z! K
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    7 T7 N8 ~& X, ?; W; K
  544. 1 y" t; t: _% T5 t, g
  545.         AfxEnableControlContainer();
    ' `; W+ \7 ~& n: ?3 n2 `
  546. 8 ]; Y0 U! S) U( K
  547.   bCanUpdate=FALSE;
    1 a' ^  z" u& S. v* a: Z- B, z
  548.   dwStartUpSteps=1;
    ( P3 U9 S; J0 K( W) K; l) \
  549.   dwProgramState=AP_NOTHING;
    # ^$ C# H  {) V$ ^3 l/ K* |, L
  550. # r; u: W3 a. R* q7 P! s3 b
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ( C4 d, B' f  P; \3 M" p3 K+ f
  552. 2 Q7 e/ ^8 l- m
  553.         // Standard initialization: e1 |$ x0 U) V! T4 _
  554.         // If you are not using these features and wish to reduce the size
    4 ?6 X* x) _$ q5 l* d3 x' w
  555.         //  of your final executable, you should remove from the following; D5 }# ^4 v& z7 j% w2 z
  556.         //  the specific initialization routines you do not need.+ b4 C/ n. [- Y" L. w+ M
  557. 4 V* ^' [3 U3 A
  558. #ifdef _AFXDLL9 _5 f) S2 _8 P$ |: X. m, Q
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL0 q1 {0 H4 b5 p3 e
  560. #else! c. l- H/ E9 K- H! f
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 P. @+ m/ I! H& O# l2 [. ^
  562. #endif* H& o& V4 Z4 T. h% M, [- p; L
  563. 1 ?* q, \$ [2 O, M
  564.   dlg=new CRevAppDlg;& O9 V& m8 H; ^# y: [, p1 r
  565.   dlg->Create(IDD_REVAPP_DIALOG);9 _0 U8 E6 i$ j
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) |$ s% b/ |9 d% ~; N
  567.   m_pMainWnd=dlg;
    3 i5 x# T% ^1 Q% y6 L
  568. 5 y9 e$ Y% p# g! Y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);; Z2 R$ K. w" H2 i5 O( [. i8 f
  570. # Z* G( P' T  p- Z' J
  571. //  GdiplusStartupInput gdiplusStartupInput;
    / L- N) m4 W1 o0 W$ D$ n6 h; N
  572. //  ULONG_PTR gdiplusToken;6 w( n2 j/ [" f% C* a
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! R2 U3 {. C& Z% A
  574. $ t8 q. M4 F* a, w, E4 M
  575. //        CRevAppDlg dlg;9 e* P! X0 U: N! X8 Q
  576. //        int nResponse = dlg.DoModal();
    $ ~6 H1 t+ u2 L/ g( e
  577. //        if (nResponse == IDOK)
    1 \8 H8 I, Q" z  C
  578. //        {- ~0 U4 ^5 o) X  @
  579. //                // TODO: Place code here to handle when the dialog is4 E' U$ Z( i4 R$ a* Y7 _% }
  580. //                //  dismissed with OK
    . s( b8 h$ M; _1 |. o3 B, C2 ?4 e; ]( \
  581. //        }0 j" E& u8 V: D& n; V9 M! C  i
  582. //        else if (nResponse == IDCANCEL)
    : g. x7 I0 z2 H0 @/ {  [
  583. //        {
    1 G' T* s. _( \# t, o9 {4 ?+ [9 T6 n0 K! J
  584. //                // TODO: Place code here to handle when the dialog is
    7 H! B. q. P+ b/ l6 w
  585. //                //  dismissed with Cancel
    : Y6 Q4 V5 q1 q/ F* t7 o/ N
  586. //        }
    " n1 r0 F% S$ @
  587. # K$ `1 J* m3 R% D& o1 J( g1 x
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    - {) n. U* F, ~) H
  589.         //  application, rather than start the application's message pump.4 m# d& ]" B+ i1 O- k- y0 i2 c
  590.         return TRUE;: D+ J- K* R8 z, ]& Z: f, [
  591. }5 M% U$ p2 Q8 Y1 i. Q4 W
  592. 9 B9 i  ~( c) J( G+ D1 D3 `, h
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 C/ k8 @$ \( _1 `
  594. {, \# a4 I7 o, v2 P/ p& l
  595.   int i;9 f& b' }; h2 l
  596.   char *szRet;
    ) T) i; q& l, s: D7 x
  597. : {, r+ U3 `* T7 W
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    1 @' @* M1 a9 D+ v- P4 w4 s
  599.   if(sztoken)1 {' M' n+ A) Y* c8 M9 g% @: S& `" E
  600.   {5 E; H; e  \, V  i& U- N5 v( O
  601.     szRet=&sztoken[itoken];
    & N9 Z* F; [$ }
  602.     while(sztoken[itoken])
    2 V: ^# h" Q2 |5 I1 K
  603.     {# Y* T, ]/ f- E* X4 W- T
  604.       for(i=0;i<(int)strlen(token);i++)8 f+ n& g8 C  ]. F) z% g0 y% L
  605.       {
    7 @/ s1 {: |: @5 i7 H- x, o8 q
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]), j+ A6 F( k9 ^$ a
  607.         {6 X3 l- _  f9 Z
  608.           sztoken[itoken++]=0;% L- b# H  X. A
  609.           sztoken[itoken++]=0;
    3 Y$ j  q: p' e$ |6 D5 y# ~9 D4 R
  610.           return szRet;
    1 k1 s7 |) s( `
  611.         }
    1 ^3 H: X! n1 y/ e) h
  612.       }* \5 X2 k: P) {
  613.       itoken++;' G- [$ B# l1 q! o  {" v6 l
  614.     }
    * }3 U7 K: w$ X0 \
  615.   }
    9 }) t( H/ y: P) F& T/ N6 V+ j
  616.   return NULL;
    # }) W4 T* k# V& }" |6 z$ i! G' R
  617. }  _$ U8 h4 i; |0 c  |; O& R# a

  618. # T. h% l" U: r, s1 {+ X; p2 n7 J2 ~
  619. void ProcessProc(long Total,long Current)6 x+ v  x. g4 u/ j  Y8 K6 V
  620. {
    1 G- S/ V$ F3 T- s
  621.         MSG msg;! }. h; v+ L5 U4 u% B, k  W1 u
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    . U* O: b! f, f% ]" t9 k3 }
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));* Y0 `: Y3 o5 x1 Y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))4 I* `0 R; L: d- A. x
  625.         {
    * r0 w6 h4 y% t; q
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ( _0 q/ i' z6 n' H7 i' q
  627.                 {
    # |* ]* r, m: m) Q% B7 \
  628.                         return;
    - V0 _  j1 I9 G+ O4 a$ L
  629.                 }- N3 V7 y2 }) r) {5 k
  630.                 TranslateMessage(&msg);" r: p! _1 T) h# I# n
  631.                 DispatchMessage(&msg);
    / c  W% p0 D; Q
  632.         }       
    " v: u/ B/ r" |7 X
  633. }
    + B  x+ g: }- T

  634. " ?5 E1 H% g7 h  h- h
  635. BOOL bFirstChar=TRUE;: N& ^3 [; f: O
  636.   L, y( A* ]! g% P
  637. BOOL CRevAppApp::OnIdle(LONG lCount)) d+ Y% N: r- p0 t. M4 w* M$ R
  638. {( `4 F5 ]5 S, V- J! o* y
  639.         // TODO: Add your specialized code here and/or call the base class
    . _# i+ [+ N; [7 u5 \5 S4 X
  640.   switch(dwProgramState)/ n6 s! V; n, |* w; t
  641.   {
    ( g  ^5 J" K5 M$ i/ S
  642.   case AP_NOTHING:
    - F. j* s6 ^! @5 |6 T; d+ c$ @
  643.     switch(dwStartUpSteps)
    % O- ?$ C1 l% g: h5 E5 T; `
  644.     {6 [; T( A9 i7 U  Q  Y. u  J' c
  645.     case 1:6 ~) O" W) z+ v5 Y2 Z+ O9 f
  646.       {3 P  @* K" I% R  V8 k
  647.         int i;
    - h3 M" I2 L7 ]0 B, ?
  648.         CDC *pCDC=dlg->GetDC();( n1 I, w- n* C# f6 n5 I6 @
  649.         HDC hdcwnd=pCDC->m_hDC;6 u/ @8 ?7 q& K+ D% ]- ~
  650. //        Graphics graphics(hdcwnd);
    ; N4 g/ t2 N7 f: I" S& _
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");5 {4 R/ I  b/ U( Z
  652. //        INT iWidth=bitmap.GetWidth();+ ?6 {4 x, Z9 V$ ?) o
  653. //        INT iHeight=bitmap.GetHeight();
    : ~4 o' a- e+ _4 ~( u: S
  654. //        Color color,colorTemp;. O8 S( d: s9 `+ K3 E7 M
  655. //        for(INT iRow=0;iRow<iHeight;iRow++): _' Z5 P4 \, E' F+ X! [7 x6 Z, D9 Y
  656. //        {
    4 ]# P. Z5 S8 D( g- b$ K
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    . ?9 V7 \3 f7 L7 q' _( U
  658. //          {# E4 h% F" ?. ^  |
  659. //            bitmap.GetPixel(iColumn,iRow,&color);: B  Q  }  a( S
  660. //            colorTemp.SetValue(color.MakeARGB(5 Z. Y: l2 }9 Y! T4 p
  661. //              (BYTE)(255*iColumn/iWidth),
    ( _$ T$ _  Z. f5 _1 r
  662. //              color.GetRed(),
    * l# @; r# n2 q& p, `" Z
  663. //              color.GetGreen(),( `% E9 D* N( [8 f
  664. //              color.GetBlue()));
    8 a( [# D2 k# A
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- r# ]! v; i7 I2 y4 b* z
  666. //          }
    ' m; r7 }1 G2 s% v2 G, A
  667. //        }
    ; J6 Z* d+ u7 \, a( h. `+ \
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);. N5 d; C$ w$ y2 w# k
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' g- ?" q& h  x( g  i5 ]* s
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    " k  E3 Z7 u( m) z$ N* V
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) F4 f  D: g* J  [% V5 u
  672.         for(i=0;i<240;i+=8)
    & R" D. i- _$ K
  673.         {. W, ^% S5 P, P1 ?) J9 U2 K& B
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; Y( R( g) O7 ~/ `# P4 [
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  H  `, v5 r. }6 z) o( b
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' b+ q, `8 \1 g/ m# P, D
  677.           Sleep(33);" W. M; H& k/ S2 F7 y+ G% n/ U
  678.         }& B6 u- c0 h  `; F* W, H+ s
  679.         Sleep(1000);4 x: q6 \% @! C0 N
  680.         for(i=240;i>0;i-=8)
    ( q3 b( j; L2 _0 r% Y+ N; q
  681.         {
    2 L, N5 W4 C/ G/ l; o) J
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! b+ g. O8 e/ ^+ \& v& k
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    2 o5 A- O4 e" p$ `2 {( s+ R
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 n9 ^3 K+ B9 v  H& x; a9 C8 Q
  685.           Sleep(33);5 N% K3 k; m& W) C
  686.         }
    ) q! I4 P; S: x) d; S0 f, h! o
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    4 @! }4 c) w  y2 l0 V( C# a
  688.         dlg->ReleaseDC(pCDC);
    ) a- c; [( _! K! C  c. z
  689.         DeleteDC(hdctar);
    0 [. w7 \6 f# A/ i: |
  690.         DeleteDC(hdcsrc);) l4 T' t2 e5 y$ }6 _
  691.         DeleteDC(hdcorg);
    ) H; W, w+ x+ ~4 |8 d' m1 |! V
  692.       }
    - [7 |6 ?  w. _* a9 e
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);/ I1 C. v9 B2 U- u
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");2 Q/ {) A+ D/ V
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 {! y$ B' b/ F' U, F
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 z; Q$ G; ]0 U5 U1 s6 O5 U
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 ^; d, }: u1 l7 H
  698.       if(!Dn.Connected())
    0 G* e4 z" f9 H, B" R
  699.       {
    ! X0 j4 B) o2 Y4 v4 u, p3 |& N* M
  700.         dwTotalFiles=1;/ F9 ]. N1 P  {
  701.         dwDownLoaded=0;
    ; O% }4 {$ H1 M! F3 m" j7 i2 u$ k
  702.         bSilentStep=TRUE;
    % C4 l6 ?! K! N9 w- n2 X
  703.         bCompressed=FALSE;% _/ m( D  U- v8 g9 Q: d3 v3 J" u$ \
  704.         strExtLocal.Empty();; g8 y* I/ T1 w8 U1 p6 t
  705.         strFullName="readme.txt";
    3 X+ e4 P, V+ u0 M1 q7 [2 Z9 U
  706.         dwProgramState=AP_CONNECT;
    . ^( d& Q8 I% J" a
  707.       }4 V6 P3 H6 T3 b) i' X' d
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();4 C8 Y, v: u- J: z
  709.       dwStartUpSteps=2;
    0 H8 @( y4 z% F) w6 G, t6 f
  710.       break;
    - g: V- x+ `% ?2 J1 L
  711.     case 2:- t; v! ~3 z  p  w  h* N, g$ |
  712.       {
    9 [+ d' e1 O% h* W( M( k4 t, F
  713.         int iEOF;
    . k% L% E2 S. G
  714.         FILE *fp;' z/ I- D. a3 y9 N" o5 `) w
  715.         char szString[512];& Q1 d) W) R- v
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");" m# |9 {! I# J9 c, ^& u9 A! V9 o$ H
  717.         if(fp)
    ( U8 l! p+ r% X9 p7 L) M% g
  718.         {+ |: D; U- |8 R
  719.           do+ g8 \4 C) X1 M
  720.           {
    9 G' x" O3 d& U1 m% o
  721.             iEOF=fscanf(fp,"%s",szString);/ F6 V4 S* X1 V# i( C) _
  722.             if(strlen(szString))0 Q. ^) Z" B' h, q5 V
  723.             {. q8 ]& @+ R9 ]9 M( t
  724.               if(bFirstChar)
    ( ^  J2 G( Q9 @2 b) Q4 X( T
  725.               {" `1 x6 b" D" F: n2 @( r0 }7 p1 a
  726.                 bFirstChar=FALSE;# t+ Q: b/ J) z# j& j) O
  727.                 bConnectIsBig5=FALSE;
    $ n2 z* Z' p: x, c, c
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;$ @$ q1 t! N! ~( i" i3 y
  729.               }0 h6 m0 O& H/ {+ c, J
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));  H6 X6 b3 K* J/ e" _7 q4 U6 M
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    # L7 I+ K' F7 r/ y, h: T( z7 D
  732.               dlg->m_ListText.AddString(szString);8 c1 h8 `: G$ x3 Z. H8 o
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 o; R3 ?) v% g5 f3 C' ^
  734.               *szString=0;
    * v2 U9 |0 g+ O! m) J
  735.             }  F4 U) U) M$ }$ h2 o: E2 }8 H
  736.           } while(iEOF!=EOF);
    8 Z" p5 C1 _3 }7 W
  737.           fclose(fp);& U1 T# S# \7 }) u. W0 L
  738.           unlink(".\\DownLoad\\readme.txt");! g  U, I* C" I" ^7 U: t. P
  739.           dwStartUpSteps=3;
    + |9 p. w1 o' n1 h8 Y4 B5 ?2 G
  740.         }4 Y# r  c; T$ W, v
  741.       }
    - Q3 p, c6 g6 y8 P* |
  742.       break;; T) z! e" b+ r' q
  743.     case 3:
    2 G. \1 `9 E) B) ~% N* [
  744.       if(!Dn.Connected())
    * E; ~+ P. q/ t4 l' n( V
  745.       {* m% s* {. S5 t" ?! ]
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);1 ^* b, R' M" g" m
  747.         dwTotalFiles=1;
    / ?) s3 w; o- V& n! ?
  748.         dwDownLoaded=0;! b! _3 r  N$ E! q: g, {( ~6 e8 O
  749.         bSilentStep=TRUE;
    6 `0 T- D* r" N& m
  750.         bCompressed=FALSE;
    8 x7 [3 U2 _* f$ E7 u7 g# c  p
  751.         strExtLocal.Empty();2 H8 V5 p; `! s7 l2 C+ J
  752.         strFullName="checkversion.txt";0 ~8 A7 O$ J# e) B. [
  753.         dwProgramState=AP_CONNECT;
    $ ^) ]0 K7 p8 f, }2 N
  754.       }
    ) A, ]  e& P- ?! U
  755.       dwStartUpSteps=4;
    % c2 u# l+ L. K" W, e
  756.       break;
    ( w' g3 v+ j1 T8 W9 I: M
  757.     case 4:
    ) X6 _1 [  w0 Y! H0 u# ^# V* A
  758.       {
    1 d* [: W+ P* S) G# h; d& i$ c; G4 t
  759.         FILE *fp;1 ^$ }2 p* ]0 |6 a* F
  760.         char szString1[128];* F- }2 |( N5 D' d3 R% C$ E& Z
  761.         char szString2[128];
    ' _7 z, C3 j9 t9 z8 K; a# E
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 k9 N" `) h7 O! y1 P
  763.         if(fp)
    ' z( v. ~7 i2 i1 F  `8 W
  764.         {$ X* A: Y- p" r* E) w
  765.           fscanf(fp,"%s",szString1);
    4 e, \; C! _. L+ @; y' x
  766.           fclose(fp);
    + }3 K6 V8 }3 h1 _' l
  767.           fCheckVersion=atof(szString1);! F7 f# x0 N/ |
  768.           fp=fopen(".\\checkversion.dat","r");+ S) f, d7 R- d; \" x8 I
  769.           if(fp)+ o0 h7 O) k" J* W& M' B
  770.           {
    1 ]( n+ Y7 m5 T
  771.             fscanf(fp,"%s",szString2);
    " t6 I/ Y. n! n4 h& y& g
  772.             fclose(fp);9 F9 X% n/ }( i3 M& l
  773.             if(atof(szString1)!=atof(szString2))- z, W" d4 @/ ?; x, B/ f' v
  774.             {) G2 E) _) {( z
  775.               if(!Dn.Connected())- D$ J; F" v% _0 a# g3 {% P/ f
  776.               {4 I0 ^' ]' }4 n
  777.                 bFirstUpdate=TRUE;
      b$ n! Q( e4 S6 k" c" |* I9 @- q8 f$ L
  778.                 dwTotalFiles=1;
    / c( \+ K: v! \8 z
  779.                 dwDownLoaded=0;$ P5 F% ]2 x: o+ R  E4 T
  780.                 bSilentStep=FALSE;
    . E3 d: C9 |! `' w2 C+ G/ f
  781.                 bCompressed=TRUE;. G) @, P8 ]' J2 d1 m0 v
  782.                 strExtLocal=".\\DownLoad\";( R# }' P+ y/ U  N
  783.                 strFullName="update.txt";  l" X4 u9 b8 R" R8 _
  784.                 dwProgramState=AP_CONNECT;" b7 V% e6 f: R5 i, T' I
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");( x* }' D. d6 [/ r, D9 a
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 U' O8 G, s; o' B
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");+ T8 [% M4 w+ u

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-13 01:04

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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