CSUpdate.exe源代码

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

: e- r6 c0 e; x' B6 S* g
  1. / RevApp.cpp : Defines the class behaviors for the application.( [. k. U- L0 p0 l7 q6 j
  2. //
    2 A! |( w( k0 x) F2 o# R& a$ S
  3. ( x7 d6 r  d0 E7 T
  4. #include "stdafx.h"3 Q  p2 I: [& s; a9 B) B9 Q4 u' [8 \
  5. ' I+ \3 m7 V& a$ r+ |
  6. //#define UNICODE7 s- W8 _) S- l. B" ~1 R
  7. //#include <gdiplus.h>$ _0 e1 k/ f: N9 m- G% p+ ^4 z
  8. //using namespace Gdiplus;
    ' G( }( S* H; d% }
  9. & h3 e6 U1 A0 y# E" e& a
  10. #include "RevApp.h"
    * i, G9 c7 F+ @
  11. #include "RevAppDlg.h"" n) f% }& I' B  v
  12. * E) M; ?+ z2 j* c
  13. #pragma warning(disable:4786)
    5 z$ O6 @  B. T- z! T6 ?- G! v
  14. #include <map>$ s  t, o: o# g) T9 ]
  15. #include <list>& s, u. p5 r" \' {% g
  16. #include <direct.h>. j! k* u: ?0 ?+ P* c$ i/ P. O

  17.   D: [! b3 R9 m6 ]
  18. #ifdef _DEBUG+ y7 Y% w2 {( l) X8 M9 T
  19. #define new DEBUG_NEW% @8 y5 i7 v; |+ R; F% b
  20. #undef THIS_FILE) Y0 A5 ]0 j$ L: ^$ L0 h$ [
  21. static char THIS_FILE[] = __FILE__;! H0 {* W3 [! \  M
  22. #endif% I  E3 k, L% c/ W
  23. #include "SkinResDef.h"1 }3 o# Q  j; G
  24. #include "ChangeBG.h"5 h6 }! K# D: [5 t: N( D* Y- I
  25. #include "AFXINET.H"
    7 a- Y" \5 w: l1 r) p
  26. ' A/ }- x, M3 I8 x6 \7 D: U
  27. #define TRADITIONAL_CHINESE 0
    ) N$ V4 n% ^# l' @3 Q
  28. #define SIMPLIFY_CHINESE 1* E3 c1 @3 C# I% R
  29. #define ENGLISH 2: t6 P* ?$ e" V+ R4 K
  30. int m_iLanguage = ENGLISH;
    " {. \$ [  _0 c5 ]# G
  31. /////////////////////////////////////////////////////////////////////////////; @% w0 `  s' C1 ~5 l3 E
  32. // CRevAppApp2 m/ ]9 {' \, F) L; U

  33. 0 |) c8 B% X8 i8 x. Y: \3 j
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" R! p6 Y" N/ a3 L* N2 ^/ N
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    5 Y6 d( {6 Y* p) u+ k% I
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.) O1 K6 J1 Y9 K4 @( N
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 j& B# T) c2 L5 Q. {
  38.         //}}AFX_MSG; e( J4 X  w% l$ i- `* m4 G# L, M
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ( J' A9 J9 u/ }% d! [. {. r
  40. END_MESSAGE_MAP()
    ! F: t" j$ H% o& E4 \0 E  k
  41. 3 o( ?- T9 m, E: a# n5 T
  42. /////////////////////////////////////////////////////////////////////////////
    ( s! p! ?* W0 c* M1 q
  43. // CRevAppApp construction
    : {% P/ Y* m6 `/ B8 _1 A6 P4 I
  44. / x+ \7 }8 i/ Z3 F% q  e
  45. CRevAppApp::CRevAppApp()5 C2 Y$ Z( N8 ^0 q7 V  F! \
  46. {
    9 e+ W% _: }( I  s
  47.         // TODO: add construction code here,
    . g; V+ o' b  V9 g  h- {8 r
  48.         // Place all significant initialization in InitInstance
    . [% ~/ k8 k* Y) r& r7 {
  49.   bDisplayIsBig5=FALSE;
    % f6 F6 y  s; B5 f
  50.   bRestartUpdater=FALSE;/ ^+ I# ~( `3 L# G# y3 z
  51.   bFinishUpdated=FALSE;2 t1 R7 [5 @4 R% B
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ; R5 Z2 t9 n4 N5 A7 L( g5 R) B
  53.   InitChangeDataBig52GBKS();
    * T2 ]& b+ g+ h
  54.   InitChangeDataGBKS2Big5();
    . }( p; C3 @/ O* s
  55.         //. R! g2 {5 a9 l& q1 l7 i8 w  `
  56.         bClickRunExe = FALSE;4 D" e% J% v6 Y; U" ^" j
  57.         //
    # K- i6 H/ b, W6 G# Q
  58. }
    * C0 h5 `) A1 Z1 H$ I+ J3 P' X/ g
  59. ; z! [9 L+ o4 H0 S  Q6 q
  60. CRevAppApp::~CRevAppApp()
    . d$ P7 ?$ ?& F  A2 M: U) Q
  61. {
    * N0 [4 e+ \; m% M8 ^% ^# g
  62.         // TODO: add construction code here,
    & I8 d2 i9 h  G, k- w
  63.         // Place all significant initialization in InitInstance
    / y, g# s% n9 k( [8 R
  64.   EndChangeData();& I% ^2 p: m& E+ E) @* ^
  65. }
    2 D# I8 ~+ g) B$ ~, F5 R
  66. ! T/ W/ [3 ^5 s1 z* i& r9 N/ z$ z
  67. /////////////////////////////////////////////////////////////////////////////4 k! T+ X: y0 }; p4 c; l0 z' M* ?
  68. // The one and only CRevAppApp object) s  q* p' m/ S8 `4 H3 r

  69. 0 D1 b$ |( u# X& D+ K! A
  70. CRevAppApp theApp;
    7 l$ T! }- W! I1 O2 e
  71. - B  q& k$ Q2 u: z+ e8 E
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    * |' q! \4 s" k# o1 s2 a# [" y
  73. {
    0 E9 c2 {. d' v! J6 S! V
  74.   int iEOF=0;- w. C/ }) C7 Q
  75.   char szTempName[MAX_PATH];
    , f% w( T) O6 T. }
  76.   *szFileName=0;1 J& R8 M: v! U6 Y8 O* b, k
  77.   iEOF=fscanf(fp,"%s",szTempName);
    1 v4 G' \# C9 |3 J2 D% [. |0 P
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    & y& [! v: @% g$ s+ j
  79.   {
    2 ]+ T6 D- F1 y1 y3 p* u& V+ @, K8 l" ~
  80.     strcpy(szFileName,&szTempName[1]);
    9 H; }$ P. p6 [! f$ d  D" Z% F
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)8 p3 F( N) H: B3 |- w6 ]* H, [
  82.     {
    9 P* E7 `4 R9 b
  83.       iEOF=fscanf(fp,"%s",szTempName);
    % l7 E, n; K1 Q* P
  84.       strcat(szFileName," ");' v+ I8 U. ~) w, X( W& W
  85.       strcat(szFileName,szTempName);
    ) ]* H4 J" l' A) s, O$ ^
  86.     }
    / P5 D2 y# F8 r& m/ n
  87.     if(strlen(szFileName)>=1)
    4 N3 H1 @3 c. q5 K( l. |* k( i$ L
  88.     {
    5 l/ \+ Z. ?: J9 a3 h
  89.       szFileName[strlen(szFileName)-1]=0;
    7 I! g: w1 z* i) a0 Y
  90.     }- L3 F. C% J( d5 [+ `9 u: `$ ]1 ?$ N6 ~
  91.   }
    4 s% y" p( p; x. {3 K  f
  92.   return szFileName;
    ; y# w, G# }$ v8 I0 S- n0 [* }4 Z
  93. }
    : @$ ?/ ^: F3 G& l7 m- k3 k  ^4 _

  94. ! ~1 \' d5 s7 a" _: B
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ) h9 \. K6 T. M4 p$ C/ Y+ S
  96. {
    , O/ C% V  [5 b# H
  97.   FILE *fp;
    % K( a8 g2 C4 n# s
  98.   char *key=NULL;
    # [3 u4 w2 J4 G: M
  99.   char version[MAX_PATH];4 i) b9 p, |( a" E! @; g/ ^- K
  100.   LPUPDATEFILE file,olds;1 ^$ n* O! K8 Z) d0 ~7 X/ J7 p
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) b6 b( l4 s9 B2 V9 p
  102. 4 [9 x% p# }2 R5 [
  103.   UpdateList.clear();
    " \+ N; ~7 x0 z# U7 c
  104.   UpdateFile.clear();8 a1 }( U0 t. w& q* B2 g( M
  105.   if(GetFileAttributes(filename)==-1) return false;; Z6 e6 h) Z) A4 S; m
  106.   if(!(fp=fopen(filename,"r"))) return false;
    0 K; `9 v( K4 B6 h5 s
  107.   fscanf(fp,"%s",version);
    * ^" v, F* t# r# S. N
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    0 l4 J( `$ L. N( L; ?
  109.   while(fscanf(fp,"%s",version)!=EOF)/ {& \9 x% R* i& W8 D: F
  110.   {
    , {8 z3 w4 l! Y2 k! u
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 V2 U) R2 [/ P! t
  112.     fscanf(fp,"%s",file->path);) P; t  S7 B: J1 w  e5 P( l/ R
  113.     ReadFileNames(fp,file->file);
    ! i1 Y. P7 U. e0 b- P9 D, D
  114.     strcpy(file->full,".");: t) }' F- n4 q' X$ n
  115.     strcat(file->full,file->path);" r% h6 N6 y4 z. |
  116.     strcat(file->full,file->file);' E- [3 T; s% S3 V2 H0 e4 Q
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    / P: [; V' G: E0 k
  118.     {9 `7 v7 x% k5 d) Z8 m+ J! J6 H6 F7 @
  119.       file->vers=(float)atof(version);
    . V# c4 ?7 f4 S* J% `7 c% b
  120.       UpdateList.push_back(file->full);
    4 Z0 {- v- k$ M6 U$ E! n8 r
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));0 S3 _8 _  J% B$ w* |
  122.     }
    ( p/ N; P$ t0 M
  123.     else
    ! J3 [! h8 P$ L* q4 u3 G6 t) k0 G
  124.     {
    % x7 z# D  V+ ^1 K3 i8 Z' s1 ~3 Y
  125.       olds=(*p).second;- q% ]6 Q- O2 Y
  126.       if(olds->vers<(float)atof(version))# D+ p$ g3 N: X$ G4 ?( O' L, y
  127.       {
    ) e5 |# t! l/ @# w) v
  128.         olds->vers=(float)atof(version);# z+ S. w# ]' t2 `5 V, }2 O
  129.       }3 w9 R9 |4 t( Z; n7 c6 P( x
  130.       free(file);
    # ]! B. e6 i! |* Z5 y; t2 V
  131.     }( L# z7 `. k- l$ A! X7 W
  132.   }( D& Z9 d/ M/ \" C& E! z1 X/ [" i
  133.   fclose(fp);
    1 F7 `, p. o0 Z2 \
  134.   return true;9 o# E5 |! z. ]6 l6 e$ X
  135. }2 _, s, D1 m( I6 F9 Q6 {
  136. & w/ o& q- \# W/ Z3 G
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ( `) x; z- a- r; I
  138. {  g! }, `8 w8 D* }& t/ o7 N
  139.   TCHAR  szFull[MAX_PATH];, Q  N% A6 e- _; F) j
  140.   TCHAR *token,*inter;7 R# z4 f/ O& i7 m5 V3 Q; {
  141.   *szPath=0;
    ) ?+ H9 _6 E+ t. L' H
  142.   strcpy(szFull,szFullPath);
    6 v$ Z  e0 r" X2 t0 l4 }$ Q# _
  143.   token=strtok(szFull,"\\/");5 q2 _( M# ^2 k
  144.   inter=token;
    $ {- z& r: c' v) w7 C4 d* r
  145.   while(token=strtok(NULL,"\\/"))
    / c6 b0 Z" e6 p% Q
  146.   {& C0 x7 D' z9 T& d5 P* s
  147.     strcat(szPath,inter);
    3 {! Y+ N8 q7 U# ?! R7 N1 \$ z! o
  148.     strcat(szPath,"\");5 E8 G* Q2 Q- ]4 y' g
  149.     inter=token;
    0 D+ Z, X* x) _
  150.   }) y3 h2 T9 U+ r0 @) `
  151.   return strlen(szPath);
    9 A, R  i; O# g. N( i
  152. }
    9 m, h$ U- q3 H' H5 i  r4 H  ]
  153. 6 u* d- _; g& V9 t" T. G, _& S
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)0 k' t( z, G2 [
  155. {
    4 N9 {# ^/ I) _: F+ k1 O0 \* I
  156.   DWORD attrib=GetFileAttributes(Target);7 |1 S# y3 O) p3 ^! U" _
  157.   if(attrib!=-1)
    : w, `1 j8 E, M6 `  I$ M* M- R
  158.   {' R0 H+ w. O1 \" |3 ]+ i& O: Q, a) Q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))) c% e6 e# ]3 U- I- I
  160.     {- c, Q0 p* c6 b1 t( H; |- f
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);) I# [8 s, a, e4 B7 @) ~% r
  162.       SetFileAttributes(Target,attrib);7 T- |) ?2 s" g, `; B1 m) @  |% B
  163.     }
    1 a5 w8 N) N9 e( ]& g5 X
  164.   }
    " y* i1 y( r: P8 s
  165.   CopyFile(Source,Target,Erase);
    ( o7 B9 v0 |; c, ?
  166. }; }6 P  ~, u& N) h3 q. B( L) [
  167.   z, S5 v1 C# {( b0 _
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
      P. b/ j4 h+ |4 C2 u6 x6 Q8 n
  169. {6 E7 R6 {5 z9 h, i% Z/ y
  170.      FILE *fp;- n2 @2 p3 T8 O
  171.      char  szBuffer[8192];
    ( R5 p/ o  |5 B/ E  F& d- h
  172.   va_list  argptr;
    - ?- X. i' c0 @0 @

  173. ) X/ h0 B3 K5 Y, K' \+ v2 Z' ]
  174.         va_start(argptr,message);2 S' i( y2 N% F$ n+ Y" Y2 q
  175.         vsprintf(szBuffer,message,argptr);
      [. y* E* P9 y, e- D: t# B
  176.         va_end(argptr);
    / a$ j, V# U; X1 _3 A( F2 D
  177.   fp=fopen(FileName,"a");+ o6 t; }- n2 u: ~, J( p( w6 l
  178.   if(fp)
    4 f7 `: p8 `6 r* b3 n7 }3 ^
  179.   {
    . O7 j$ w  y4 K8 L, i
  180.     fprintf(fp,szBuffer);
    6 j: b3 b) [- _/ y* v1 d  |
  181.     fclose(fp);
    & B7 {! o( [7 N3 R0 T
  182.           _flushall();
    , W2 i& ?& ~+ p! Y. L
  183.   }
    " D2 |: P. G* s9 ~) c5 c) D
  184. }
    6 H  C! @5 }8 v! w

  185. # E- y7 z, A& d
  186. BOOL CRevAppApp::Fclearf(char *FileName)% [/ ^6 _/ L- H
  187. {
    $ [. H9 s; m. I, n, f6 w; j5 v& v
  188.      FILE *fp;! z6 M0 m6 R6 y  g% o) J
  189.     DWORD  attrib;' }6 d6 ?; w3 F- s$ X
  190.   attrib=GetFileAttributes(FileName);
    ; s) ?3 d- f1 B
  191.   if(attrib!=-1). A& m( R! C0 O+ D* X# u0 e' ?
  192.   {
    $ N4 _/ n8 ^! U  }% k: N
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ! \. F! O- P% @0 `* z
  194.     if(!SetFileAttributes(FileName,attrib))
    7 |" J  f8 q5 T  j& ~1 \
  195.     {
    5 d* q. Q- M0 H" M5 E! k; ?
  196.       return FALSE;
    ) t# j& |, V3 r/ X) q0 F9 I
  197.     }! x8 p0 Y4 F$ E8 S3 q$ k6 k5 C" Q+ j  g
  198.   }
    4 h7 W( r# ^) E- W
  199.   fp=fopen(FileName,"wb");
    7 a; H! g0 v- U! w
  200.   if(fp)
    $ a  K, r% u6 `5 n
  201.   {; H/ }  k9 x  Y4 M& W
  202.     fclose(fp);
    # G6 C& Y# m! M7 F
  203.   }
    / X: I5 u9 a% X. J
  204.   return TRUE;+ t! L; W- s& S0 R
  205. }2 M  b0 L( [) B: E9 C; T
  206. 3 o, k  T; a. V7 d: j, \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)0 X( Y. d% N# e+ ~0 F4 n
  208. {9 h0 s( T0 y) |9 K) C
  209.   char filename[MAX_PATH];) q0 s+ {- z" W# w* D- d. V  d
  210.   LPUPDATEFILE file,olds;
    4 C9 P* W, I; D# W
  211.   std::map<int,CString>::iterator i;
    " {; J, M3 {* j: d1 [0 O
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' c7 t3 ?5 B! i1 M& A
  213.   std::list<CString>::iterator l;
    $ l+ Q" E; @! {, ?5 D
  214. 2 \" F! R# \6 n5 z
  215.   if(bFirstUpdate)1 Q# \$ a& O; _- q. {1 }
  216.   {, d$ B5 @7 ]9 L8 m
  217.     dwCurrFile=0;* _  l, X: L- f( `3 H8 A8 X9 F/ F
  218.     bFirstUpdate=FALSE;
    & p# L- [; q/ g1 X' |. I; U
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): C0 z9 v% n6 c( W' Q
  220.     {
    ( Y2 \6 [# w' k$ L1 g3 G* ?+ \
  221.       dwTotalFiles=UpdateLocal.size();) i  W3 h: o; I0 m
  222.       dwDownLoaded=0;1 [5 I* C; ?- l- ?1 P
  223.       bSilentStep=FALSE;
    / ~* l0 y: D2 V/ d2 W/ _
  224.       bCompressed=TRUE;
    - |- h* g; n' R* E& K; n
  225.       strExtLocal.Empty();
    ( q# C* f; N6 N7 C5 F
  226.       strFullName=(*i).second;
    # \, d; S. \: m4 n: P& [
  227.       dwProgramState=AP_CONNECT;4 I! D- b; m" j
  228.       return TRUE;
    3 h2 S+ E6 A5 p$ U2 N1 C  {
  229.     }* B) u& l8 F' H. O
  230.   }/ N4 ]+ Q* g% r0 P
  231.   else if(bRestartUpdater==FALSE)
    / j6 J9 i1 a* j- d8 A5 t
  232.   {1 ~2 x6 w; N3 \
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ' P4 \. o* Y, D; z8 y! R( c
  234.     {2 x0 j5 T$ s) u$ Z% q; s4 T9 y0 m
  235.       file=(*p).second;
    % z- V! d; u- r$ x* o6 V
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    7 p( }1 C) f: _7 H- X1 X- Z
  237.       {
    . |4 }3 C, y. r5 K  U$ Q8 ~
  238.         olds=(*p).second;
    , Y+ G# d- X( y( U- k% ]8 u- `0 \
  239.         olds->vers=file->vers;4 G! s6 o; U: t. x3 M
  240.       }
    7 r3 X6 V9 ^* ]9 G+ Y
  241.       else9 g+ S6 [/ S3 ]% i& ]3 ]. H& r
  242.       {0 J; x2 F$ ^' W# @$ ]
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ U+ Z! j0 y" n& s. c5 r
  244.         memcpy(olds,file,sizeof(UPDATEFILE));; X* b1 p4 H' H9 v3 G. y& U  @+ t
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    " M2 I5 x( d0 U
  246.       }
    : q% O. C5 ~  m" M1 |4 ?
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");" W& B, R( |& F% J2 Z# n4 `
  248.       sprintf(filename,"(%s)",file->file);
    2 ^. J. A1 k$ m' h& K: a) G7 k
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& \% ?. s' K$ ~7 p
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: ?7 L) v* D& Y1 A* u
  251.     }
    $ p, ~, M/ r0 @7 s6 G
  252.     dwCurrFile++;
    + e9 F7 `3 C7 U6 a0 q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 `* I% l, W# x' {% M
  254.     {
    7 G+ k1 Y4 |& W6 [. c# V! h
  255.       bSilentStep=FALSE;
    % g( p: b; c1 h. Q* ?$ j7 R' f
  256.       bCompressed=TRUE;
    2 F2 s" Y: F6 L
  257.       strExtLocal.Empty();$ G* b. X- @" o
  258.       strFullName=(*i).second;# S* x- e! E6 x9 I: j
  259.       dwProgramState=AP_CONNECT;( n' X; T% m; c( Z. Z/ S5 E
  260.       return TRUE;7 H/ s" a% _2 @* g. S
  261.     }$ K6 o9 Y2 w5 y8 _2 p; w  ?; _! B( h# ~
  262.     if(!bRestartUpdater)
    4 }' b. H; _* G+ s) J) p5 ^
  263.     {9 j- i7 N* ^7 k6 F$ i6 u6 j4 e
  264.       int iCurrSize,iFileSize;
    6 k4 |4 J/ i) x. s
  265.       iCurrSize=0;
    % m4 t! x. J! b7 M, X6 l9 W
  266.       iFileSize=UpdateList2.size();! X! w1 c: A- f+ p& x$ w8 A0 G
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");* I$ {' ]/ u* n  S; W9 x
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");" o5 z7 `/ q: S& m
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    2 u7 X1 V, l. \# w
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 a& R% ^) I; u! E2 N! ~1 b
  271.       Fclearf(".\\update.dat");
    6 R3 {: K: K, d
  272.       Fprintf(".\\update.dat","Bloodyf\n");" d: A) N. T% t6 _$ W' O( _
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)' I- C3 A0 l4 Y3 c/ F6 T; f9 `" G
  274.       {: B# g) i+ R# Y  e: |4 ]
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())8 R! W: x4 a' a2 w9 w& F
  276.         {, A; w% ^+ a/ {& x; q! G
  277.           file=(*p).second;( }0 w/ _  Z1 Y8 C: }  \. i
  278.           sprintf(filename,"(%s)",file->file);
    % Y& m8 F% x% E& I
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& A$ e' X" q3 V# R6 P! b  |- V
  280.           iCurrSize++;) G7 q1 }, w1 T  z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ! u: s, y, i, \# y: e, v
  282.         }
    2 z7 }% J+ ^8 Z) b
  283.       }0 g' Q  w0 X2 K* ^5 |" Q$ M
  284.       unlink(".\\update.txt");8 f5 D, b4 V9 T$ u+ H2 @
  285.       unlink(".\\update.tmp");
    0 Y" S# f9 T( R' U8 Y
  286.       Fclearf(".\\checkversion.dat");0 n- F4 w8 Q4 \0 ~4 Q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    " r: o9 `; k# t( \1 P8 h. W- v
  288.       if(UpdateLocal.size())
    ( e* H: x) j, P$ P9 X0 r- b
  289.       {
    " G9 H" s1 {$ `' r) V$ y
  290.         UpdateLocal.clear();
    9 x" X, a9 H& S
  291.       }3 R" I- `( U  y1 O' }  u
  292.       if(UpdateFile3.size())
    ' M$ R5 D) G7 \' o( I' c
  293.       {. X4 l, Y5 k: _) L- `
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 Q8 k7 B$ V; T( t3 S
  295.         {  g# y4 \$ b& L- d) i; j' T
  296.           file=(*p).second;
    9 x& Y  g9 a; J, |) O% T9 d3 U
  297.           free(file);0 S* L1 l  J& c
  298.         }
    & u" q# C5 Q$ J
  299.         UpdateFile3.clear();" y) M: w1 `: @9 W- k
  300.         UpdateList3.clear();
    - \+ P5 r2 Y* E- y! ?8 K
  301.       }  o5 p0 O3 Q: O& p1 ]6 W, o
  302.       if(UpdateFile2.size())# G* `- p# g3 C  m$ X7 ^2 K5 F
  303.       {
    6 ~9 N) N; H: @4 o. v+ L
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' v9 C" A6 S: f& a/ R! o
  305.         {0 h" Q4 E! v# I4 p% a5 C$ b
  306.           file=(*p).second;
    , c8 c8 |: N. H# K6 ?
  307.           free(file);4 U8 R) P9 h3 Q% Z( e
  308.         }
    5 J0 m6 p9 V9 L6 e
  309.         UpdateFile2.clear();+ f# n( c' ~6 }- q( E' {$ t, `
  310.         UpdateList2.clear();7 \$ F4 ]: z3 P$ q& R9 \0 s
  311.       }. }0 E2 F/ g# x! K" V2 G1 B
  312.       if(UpdateFile1.size())
    + W( X: ~  v, u3 w$ J7 W' [2 i
  313.       {
    & E; E  Q# C0 B/ X
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& J$ Z& K: W( [7 g% I) z
  315.         {% o( s, |( Q5 w& g2 m3 j
  316.           file=(*p).second;
    9 w( X' y. @0 ?4 \) f
  317.           free(file);# F  n6 }# F! R; y1 k
  318.         }$ ?% E# i8 }' m' E" G7 W( G" t
  319.         UpdateFile1.clear();
    7 C4 T: r* y. |  ?/ m+ b4 A- L  z0 B
  320.         UpdateList1.clear();
    : Q: Z5 `) t3 F
  321.       }0 U% b, S4 K& L4 A2 I
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));1 G  D$ D" d/ O( V
  323.     }7 z/ Q6 n2 Y) D% p2 Z; J
  324.   }5 b* e+ l+ `* F; S2 {9 q, e6 p: P
  325.   return FALSE;
    " ^; C: R  J8 K& x" b" L. E
  326. }' n5 |" c  t: @( e+ F
  327.   a# Y7 D" v( q2 x
  328. void CRevAppApp::ClearAll(void)! V$ g: r# y0 i7 `
  329. {
    + v2 L$ k$ r8 I/ U
  330.   LPUPDATEFILE file;
    ) a4 X2 M( Z& @+ S* E/ h7 m
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' Q9 K3 x2 d6 J0 Z/ \

  332. + ]0 X, N* j9 D, Y. `( \: u/ C: H* R
  333.   if(UpdateLocal.size())+ c8 z: {, N* C5 e; A
  334.   {8 K" F9 Q% s% u0 A9 t. Y6 \! \; S  z3 H
  335.     UpdateLocal.clear();6 o) `. h$ |/ \* ^( T9 R7 D3 B0 r! a
  336.   }3 t/ x* @  y. J: h3 c: _% f- I
  337.   if(UpdateFile3.size())
    0 J, o# w3 u* A2 F/ D$ v  S
  338.   {
    * l2 j0 b& h7 C* j& }$ J; _
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ {5 ?* g$ O) Z1 e0 \
  340.     {, \6 K( n" N4 h3 b7 J' j) C
  341.       file=(*p).second;
    $ o# V3 A6 S3 i
  342.       free(file);
    $ n7 w& D; P. b; u5 R
  343.     }$ K- e# [' y* K% M0 K* i. B
  344.     UpdateFile3.clear();
    * [) `+ g/ Y) j5 D# L4 I
  345.     UpdateList3.clear();/ h: D( h9 M6 o* l5 `; z5 ?* f
  346.   }
    , _9 D* g! D% x' w
  347.   if(UpdateFile2.size())6 z% w( a( \% D8 O
  348.   {
    2 {7 K% C7 ~4 n9 m6 y1 p
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ c( U6 h. F: p3 D7 N
  350.     {, C! q: ]* @) F+ h  P
  351.       file=(*p).second;
    # q# w/ |  ^2 P2 l) v
  352.       free(file);7 Y% y8 S6 V: M9 r
  353.     }7 e0 F6 T  w7 a$ g) v
  354.     UpdateFile2.clear();
    # \9 b' q* n% |( n& O+ ~0 W6 q
  355.     UpdateList2.clear();3 `1 ]3 ]$ L: K, x7 |* G
  356.   }
    2 v$ d) r3 v2 |; h
  357.   if(UpdateFile1.size())+ l7 j' S- a( g6 N2 o
  358.   {- a3 ^0 H9 V8 u5 X) R
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ G; A, z( P- {! a
  360.     {( ~# p8 q  i! [" u2 F# E
  361.       file=(*p).second;& b, G; m6 @1 h! s. u" j
  362.       free(file);5 f8 i) O% l' T( `, Q: U
  363.     }
    ) Y, D3 g4 K& v( _, J. \7 W
  364.     UpdateFile1.clear();8 L% E8 j$ h$ a1 Y3 b( U
  365.     UpdateList1.clear();
    ! @( j5 S/ l1 V! J% V; O$ |; \
  366.   }
    + w+ h& W6 K% h+ D, z# Z
  367. }  * S$ F* }2 h/ n' U8 S: |5 a+ p7 S" O4 y
  368.   9 O, q% |  y( U/ b2 P+ p) t) N! e
  369. BOOL CRevAppApp::CheckLocalVersion(void)7 |& O/ a* q- B' K
  370. {4 y$ Y. ?' ]0 W  u( ]
  371.   int c;
    % J( D# A; A! t. F5 a7 m; {1 u
  372.   LPUPDATEFILE file1,file2;! B/ i; h& F% X. O6 T$ m8 F
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;% N% D7 ?1 [, ]# h3 u- Y8 n
  374.   std::list<CString>::iterator l;
    # x4 ?5 D; z" O+ F

  375. 2 [  l9 l. `% s3 J, m. S4 V
  376.   UpdateLocal.clear();
    8 ?) f2 H0 P8 T  ?! Z: z4 \' [
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    4 A+ |' c8 C( V3 j3 _
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);4 H# ~" ~% k6 J* X
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    4 p& B' l: b& ?# o: \# C3 ~: s# s, g' z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    " f- l! t. z) L  Q1 g8 g
  381.   if(UpdateFile3.size())
    9 K8 A" j; f3 m! E5 u
  382.   {5 H/ `2 n0 N7 y6 a
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)" Y6 M$ o- n$ Y; {) G' R- R" ?# L& n
  384.     {) q( @( [) |- v: C0 R* l
  385.       file2=(LPUPDATEFILE)(*i).second;8 l( }2 h& \, B, b/ v- i
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 `2 c, k# Q" {8 I4 K
  387.       {
    2 e( U* [5 a7 U; f2 U
  388.         file1=(LPUPDATEFILE)(*p).second;
    ! k5 D; @$ X& J6 z& [3 K" |/ X
  389.         file1->vers=file2->vers;: j/ b: ?/ Z8 C$ N
  390.       }1 B+ W/ s) F) J  K
  391.       else
    - d  `9 L: D- \1 p3 b$ c
  392.       {. Z0 ]) p8 d/ A  Y' i& i. h
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 h0 n8 s% x4 _/ r5 b) ]
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - @$ B" v0 |; A) |7 s
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));" K, [9 @' i+ E, D
  396.       }7 v; f( i: I+ c! P+ n6 b4 g
  397.     }
    / T/ i% j: B# t% ?' C: B+ g
  398.   }2 D$ A/ P  {& r
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 ?' J( y9 z  ^0 T2 Q
  400.   {/ B* U. ]: o6 G  y5 t2 v
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())1 j6 i' [# n5 L4 d
  402.     {6 f1 H" a1 E+ r6 K: }! y4 S
  403.       file2=(LPUPDATEFILE)(*i).second;
      c& [, S- T! D! n% a
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - C3 ]+ P0 Q  @) D! v- a
  405.       {
    7 R, J8 N; e1 Q' u8 J: F7 L
  406.         file1=(LPUPDATEFILE)(*p).second;5 C' `* k4 K9 \' J7 ~" ^' e. Q
  407.         if(file1->vers!=file2->vers)  S* m5 K9 v8 Z7 @& T7 E" @
  408.         {% k6 b2 ^  v; }& X2 D( c, {$ ^- ?8 K9 _
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    9 Z+ z3 d: ~2 S" m# k) R' {
  410.           c++;
    % [* J% n0 n  L/ }
  411.         }
    5 U, [! G+ m0 g% v
  412.       }
    9 N7 [1 K* Y6 u2 p, J
  413.       else
    % h( H* D( \. X6 n
  414.       {9 N) Q' V' k6 }: G
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    6 {6 n1 _1 Z' P# H+ l# o: x
  416.         c++;1 l) Z: \7 \0 |! F" s& Q5 f7 U
  417.       }
    ; ]4 ~  D0 e8 }. z2 V
  418.     }$ b: i" c$ J, ]# C6 N$ h, a
  419.   }
    9 n/ l, _0 P- L7 I
  420.   unlink(".\\DownLoad\\update.txt");5 T, C) g$ @7 Z& n/ V
  421.   if(UpdateLocal.size()) return TRUE;+ z$ I/ r8 M/ c( V: _
  422.   else                   return FALSE;4 z6 L1 }* l6 Z- b! f
  423. }4 ?' ]0 v% ~- v0 D( ]8 u9 X& x# ?
  424. . o2 y3 J9 y+ C! }3 }
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"  X0 b, V% p3 ]# ?3 [
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"5 L! c& Q: L8 E/ |) o9 ]; o

  427. 5 B/ b' o# M+ P# _

  428.   x4 P/ p6 X2 p6 e: ^
  429. ; j( v' R, R4 H" H+ v2 m( Q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 p- f. ]7 X) D3 m( I
  431. {
    0 Z% S5 V1 X- J# D) [* P- ^
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    9 o0 R, H2 c& F( B3 A
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" n" E  r/ L$ ^6 Q
  434.   {0 {& R, c0 h( s4 z: k
  435.     char szLanguage[50];
    $ ~( q" ~: M+ ^4 t' m: A
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + @9 g# Q- Z' i: W8 B
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    - s3 s" y' z/ B2 `% _5 ?' h
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 e1 t: I" y# C' @. ^) }
  439.     else                                   m_iLanguage=ENGLISH;7 L* [- j, ^1 O9 [' ?; @
  440.     char szRegister[100];
      m# e0 H. G" @! W6 n" N0 a0 R! E
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / S/ J  F( U# J# g4 e( y& e
  442.     strRegsName=szRegister;
    6 @7 Z0 R. M* P
  443.     char szPatchURL[100];
    # y0 f3 w8 W6 Z: ]3 k
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' i4 u0 k, U( `+ F5 Y5 \: a$ P, U3 Q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 v. p: Q8 G! c4 N1 w  {
  446.   }) R  R% r+ G% D+ U1 B7 M
  447.   else
    # E8 ?* J0 n! U2 N3 u' U
  448.   {: v, R2 G$ {. b: x( S5 y# R# Z( Z
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ; `5 H) Q$ P# S* B- p4 t* M4 l
  450.     strRegsName=DEFAULT_REG_URL;4 F8 i8 t1 S/ T$ y, e
  451.   }6 m0 _( }. ~' A' v% q  `, Y  s: b
  452.   if(GetFileAttributes("hosts.ini")!=-1)0 |7 U& a" v% _* j0 |4 R
  453.   {6 B; d5 B! n5 m
  454.     char szIP[50];1 p" W6 S# j) {- {. R. ]
  455.     char szDIR[300];
      D: \+ @+ Q4 c$ ^! M$ [8 P& I
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    , I" a$ ]0 h' T1 `4 Q
  457.     {5 Q, }5 X. ?. `# T$ l) }! T; L( p: N
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");# m% J2 b7 @; ]- |" l1 a6 d% u9 w$ [+ W
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    3 u; o- @. v, Q' r) W- z
  460.       strHostName=szIP;
    $ j* w( a- s( \9 H' o! Y. S
  461.       strHostPath.Format("/%s",szDIR);8 O8 [; o+ g0 l3 l3 L) {7 N
  462.     }
    / O* s0 s( }% K% ]/ @1 ^! x8 K; j
  463.     else
      i0 `8 \6 A% i! Q- R# V2 ]" A' |1 Q
  464.     {
    / I6 i) T/ H' j, T
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * F; t% R- p3 h0 [  ~/ N
  466.       {
    0 t) Q  ]6 o9 h# e) h" ]7 M* K
  467.         char szLanguage[50];
    ' C+ @" T5 ]' w! ?" M) O5 E, R& h; u
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 |. z  W6 B; t- w
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : O( i% k! y. {7 i
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' Z  V/ X# X) T% g
  471.         else                                   m_iLanguage=ENGLISH;8 i( U5 D8 x. P
  472.         char szRegister[100];6 W* y, f9 ]0 q# {
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");$ c2 B, G4 q3 L8 x4 a+ ~6 u* Z
  474.         strRegsName=szRegister;
    & c/ T) a' V" l5 p, p! V
  475.         char szPatchURL[100];
    ) o$ o7 X( _% }6 g
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 r- j$ s5 i/ z/ J
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , L2 N( _  b2 {( S5 V4 }0 ?8 z
  478.       }
    ' g: v) X9 g6 @6 v* h! R
  479.       else( r) ]/ Y6 J8 D8 R0 R0 b
  480.       {
    3 ?4 W" s/ j0 u# b, q. e& S$ {2 L
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( M# ^% |4 G7 e- R
  482.         strRegsName=DEFAULT_REG_URL;! P7 u9 g# u& l6 v# z! z. c
  483.       }
    6 b" p. Q4 }" A7 i1 V
  484.     }& ~3 v0 B" Z7 K7 Z: C6 Q7 S
  485.   }7 Q6 F8 v* x. |
  486.   return true;
    5 d# U. ?+ Q, H$ D( ?: L
  487. }
    9 y& {! K  V( ]. n

  488. $ G0 E) z% u0 z; ~: U& C: C6 e
  489. #include ".\ZLib\unzip.h"
    ' w1 X4 }6 b/ G- L+ C1 C
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 j6 D% h( Y9 }/ v8 V
  491. /////////////////////////////////////////////////////////////////////////////8 Q9 j( A; _1 [, S1 t8 H
  492. // CRevAppApp initialization
    ( I* I# l) q+ W+ Y/ ~* K$ s
  493.   ~7 n' B  |5 u- |4 |0 R: j! E6 O
  494. BOOL CRevAppApp::InitInstance()% [1 l, W$ U0 e& h" C
  495. {% N: w( Y* b2 o+ q) M% _6 l$ T
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    / h8 v6 t# F1 {0 T: `

  497. 7 {, c* A, H0 X3 l
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);; A& f6 _, b, z" D. k  M4 e
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    " e, C9 s; r8 ^1 ?/ y+ t; t) G: O
  500.   {
    ; k# }2 @; Q& y/ g1 K+ F
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    5 `8 i- v4 O2 ~9 Y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % B4 Y9 p. O! \9 A6 R1 X
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))6 }: Y5 v4 ?7 e( ]
  504.     {
    2 K4 z; Q- I- M  K- h
  505.       strcpy(szPath,szPathTarget);
    4 ~4 [! g  t( x4 T$ p5 v  O' Z1 }
  506.       SetCurrentDirectory(szPath);8 [( }% ^6 z; S  F8 h
  507.     }- |% W+ K) m& {: Y4 m. I
  508.   }: _2 p, g' `. q
  509. #ifdef _DEBUG3 d# @. U5 O( e" Z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" U8 d$ @* F+ k  g% Y/ B
  511. #else8 U6 t# H, b% S& N" |2 C# g
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); Y/ z  _& c4 H* Y; Z+ ]/ X
  513. #endif2 I$ c, w& L; g* O
  514.   {9 u. m- ?; U  i1 Y
  515.     char tempFileName[MAX_PATH];
    " l" n# @2 r) x3 w1 h3 w* ^
  516.     strcpy(tempFileName,szPathSource);
    3 g' b5 ]) w6 I; h  e, e
  517.     tempFileName[strlen(szPathSource)-12]=0;8 z$ P# Y' t! w
  518.     strcat(tempFileName,"\\$CSUpdate.exe");8 E0 v& q# o* U* x+ f7 e
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);" W7 w0 S3 T* j" Y* G
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    2 R, f* L2 J1 D
  521.     return TRUE;
    - g% P, \' c3 J
  522.   }8 i' K7 l' X/ L9 V! s- V( ^& b
  523.   // Nuke 0118: Delete run.exe6 S# e, \# Y* P4 M7 v7 c/ z6 L! m& b
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );. r2 @: e) z8 L( O9 a9 N% ^
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    7 ?/ L+ T. ?. A2 q
  526.   if(!ReadCfgFile("Config.ini"))
    . v" w* y4 \+ d# S/ _$ p1 V
  527.   {
    ) q& B- ?: m* t4 W1 A
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    " i0 m( p) F. O/ G& a
  529.     return TRUE;- F" `% c$ G: \% S/ v
  530.   }
    $ i( B# x8 {, O- N
  531.   HANDLE mutex;/ r/ q; r) C+ B/ i) u  y& p
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    - r8 X' [  i) O
  533.   {* C3 N7 `/ G, |4 f4 Q
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ! F" M9 ?+ Q( y: S7 S, t# j+ q9 I
  535.     {
    6 g6 R  f: X/ s6 a/ r9 r
  536.       CloseHandle(mutex);
    + a  W7 \+ H' j6 H. @7 x
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    6 J8 o+ h, g$ T; t9 W+ l
  538.       return TRUE;. X! V4 }+ M* Z( g$ w
  539.     }! r+ I. d$ k/ O9 B. }. T
  540.   }  
    5 ?( A. J7 O( ?- V& V5 X8 z1 A
  541.   CloseHandle(mutex);& z+ ~2 G( U) b- Z3 Z: ]
  542. ) X: R% H, H& \* A4 E
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);4 `2 f+ A2 P: j1 i% k- v: \2 J

  544. + ^- L5 ?/ L6 }/ [
  545.         AfxEnableControlContainer();  P1 W8 c3 ^3 Z3 D

  546. - ^5 O, w  F$ w( _
  547.   bCanUpdate=FALSE;1 D% t" D+ F* B2 _, d" J8 W5 R
  548.   dwStartUpSteps=1;
    7 ?/ Q' }. S. u! K5 c. x# f
  549.   dwProgramState=AP_NOTHING;3 P5 F% P8 }' M( O! G2 K  x
  550. * g% c/ M+ q6 u5 x; ^8 j/ I3 i
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);& `3 S8 {5 C1 t# O0 t0 M
  552. 3 T! i3 K6 G2 g+ z
  553.         // Standard initialization
    $ l7 T4 ]0 R: d( @
  554.         // If you are not using these features and wish to reduce the size
    5 C; x+ }  F+ d
  555.         //  of your final executable, you should remove from the following
    $ }5 J) Y3 [9 q( U) z2 Y
  556.         //  the specific initialization routines you do not need.! y" a& F9 I/ Q
  557. ! ?5 I0 [. ]1 G6 Q0 r5 a
  558. #ifdef _AFXDLL( U1 y1 ?7 e; k* }* r, v( |! q
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    % E7 ?' D& x9 v4 A- D- C
  560. #else) y# z- p) z- s2 A
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ u+ a# D0 p  x6 z1 A' r! T  U
  562. #endif
    1 @$ n6 m5 y8 R

  563. 6 h% t- b; K2 {' u3 S! h6 |
  564.   dlg=new CRevAppDlg;6 ?# y! W1 k* x$ P( `
  565.   dlg->Create(IDD_REVAPP_DIALOG);# h9 G+ Z+ E# l! v. r& q* k
  566.   dlg->ShowWindow(SW_SHOWNORMAL);- ^* b& c7 y: h2 S4 I5 k+ M) C
  567.   m_pMainWnd=dlg;- k5 D! D/ F+ A# D% ^& y
  568. & V* G  i$ C: m9 r/ O5 U
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);+ i0 L/ v. e$ ^6 d& {. f' h/ J
  570. % ^! h" ]+ E: v. h
  571. //  GdiplusStartupInput gdiplusStartupInput;: ^7 C- H+ z3 ~$ b, |+ b
  572. //  ULONG_PTR gdiplusToken;
    % V. k% N2 f/ y8 _9 ]
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);0 r4 G$ @; [9 O

  574. / `2 |0 {2 k3 a/ j6 D3 R" Z& G
  575. //        CRevAppDlg dlg;
    $ m) K- _3 C! o$ V3 p
  576. //        int nResponse = dlg.DoModal();
    7 W! V  c, \7 ~0 ~' F" B$ N
  577. //        if (nResponse == IDOK)9 n6 G0 e5 r0 K) p3 ~+ @
  578. //        {2 ?5 {0 k; y) k! D1 v% [& f5 e
  579. //                // TODO: Place code here to handle when the dialog is* A' y& [( z, x0 A& \% B* Q
  580. //                //  dismissed with OK
    7 q" @' t, l1 o% {: r
  581. //        }, m; K  H! @! V$ e6 ~* o
  582. //        else if (nResponse == IDCANCEL)
      @' z# {4 }  S; ]! z: T
  583. //        {7 p3 l. s5 R7 j# @5 ?: v  r
  584. //                // TODO: Place code here to handle when the dialog is8 w- V/ \( w* ^. g2 E
  585. //                //  dismissed with Cancel
    + D1 I' a' W$ v
  586. //        }& h0 {9 Y/ d7 p2 i6 Q0 \

  587. % x; U1 A& l5 Y# y: M
  588.         // Since the dialog has been closed, return FALSE so that we exit the4 L" |8 }' {4 B! K
  589.         //  application, rather than start the application's message pump.
    $ A; @" s( d* j/ Q. q
  590.         return TRUE;
    , c+ |% Y5 y. [0 M
  591. }
    % R( |3 s# }$ D. O3 u

  592. ) n- L! Y) q$ I4 Y) Z
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    9 V$ F( w$ N$ x8 I: L
  594. {
    0 k6 q! Z; V7 R. `8 a2 A- u2 C$ ]9 w
  595.   int i;0 C! e1 ~; i/ \9 q. j# }
  596.   char *szRet;
    / U! D1 n; G( }# d6 @  \

  597. ' P0 Z+ R( @/ p  g
  598.   if(pSource) { itoken=0; sztoken=pSource; }) w8 g3 l5 M& ^+ t4 _; K
  599.   if(sztoken)
    + U0 {' E# f+ I" W( A% Q& `
  600.   {
    7 v, V: W$ f+ n
  601.     szRet=&sztoken[itoken];* Q$ n" @. n) z: N" |) y
  602.     while(sztoken[itoken])* T7 Q; W# U, Y+ H! `9 e. L' o
  603.     {
    + {$ k  G- P: P; I& h( @
  604.       for(i=0;i<(int)strlen(token);i++)1 o6 a# {, I  Z+ E1 a( B" \. Q: @5 E" X
  605.       {$ }. }! V. r" X2 C
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    6 r* y/ q2 g% {3 O" d
  607.         {
    ( r! x9 h6 b9 J0 n
  608.           sztoken[itoken++]=0;, S' j: U% D$ A) j
  609.           sztoken[itoken++]=0;
    5 P& z( D% {9 B+ U+ y
  610.           return szRet;% a' Y3 v( ?9 a% K7 T
  611.         }* j: P4 B- ^. N% }
  612.       }( O1 ~/ Z0 n$ m3 V: f
  613.       itoken++;
    4 ~" l3 ]( H' I  U( Q- ?
  614.     }
    $ K! p& ?" q! B$ }; z0 |
  615.   }& S/ Z1 A; L- s! X
  616.   return NULL;
    0 y" W2 Q  H6 S; c) s
  617. }% W$ P5 C+ s3 ]0 a; D3 N
  618. - a$ a0 c2 `+ X
  619. void ProcessProc(long Total,long Current)2 j' [" ]0 Z- P9 d
  620. {0 X# v! I7 H4 K5 a* J% Z6 [
  621.         MSG msg;
    7 u4 G( ~! A8 |
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);0 `- F: K. |: n$ {
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    0 j" p/ a  [9 }5 c: W
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    # ^+ D/ V1 u* W$ c0 Z4 A
  625.         {$ J- [* |+ m- O9 S, f8 X
  626.                 if(!GetMessage(&msg,NULL,0,0))
    / Y) L9 p$ o% A- i
  627.                 {
    / v9 X' J: \9 T& j* R
  628.                         return;
    . r: |4 V$ ?( u. W* V" W7 g
  629.                 }
    ; a! F4 \! P& C+ _4 a
  630.                 TranslateMessage(&msg);6 d% p. Y/ \' T  ^1 s/ I) M
  631.                 DispatchMessage(&msg);
    - h& P' M+ b1 O1 E0 t
  632.         }       
    1 g/ [* ~- a2 b
  633. }
    # V$ |- Q0 t* X# y: ]8 S' {
  634. 7 [; W; |. R8 E3 N
  635. BOOL bFirstChar=TRUE;
    , ^; X  ~& g: L5 Y8 B  E
  636. * A2 @. m' |4 Q3 j+ [2 H
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 z1 L- o  l2 n. `
  638. {7 O" F% y& N* V" u9 x1 p
  639.         // TODO: Add your specialized code here and/or call the base class
    & N; K3 e% b- z
  640.   switch(dwProgramState)
    - r! ~' n' [- H* @, `2 z% n3 Z2 p
  641.   {9 ~1 n$ ^, l5 U4 {- `0 c
  642.   case AP_NOTHING:
    $ ~" K  e- W5 K
  643.     switch(dwStartUpSteps)& p- N: X% N" ]+ b( r$ k
  644.     {
      i6 w3 {% T8 J% s: e1 y- i
  645.     case 1:6 P* q) ^% m( G' a; [8 G
  646.       {
    ' S7 b/ ]: i, ^4 o4 z! t4 {
  647.         int i;2 T3 |. d% n& o4 R
  648.         CDC *pCDC=dlg->GetDC();, v( Q# i9 S0 w7 X, f8 a
  649.         HDC hdcwnd=pCDC->m_hDC;" K" x7 e6 }# l2 u" A3 k
  650. //        Graphics graphics(hdcwnd);
    7 e/ J3 w& h7 V" l
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");! z% x; a& t, M' `5 L1 @
  652. //        INT iWidth=bitmap.GetWidth();
    4 a: s: B$ V, @  Z
  653. //        INT iHeight=bitmap.GetHeight();
    1 j! y$ D* J) ^& a
  654. //        Color color,colorTemp;
    ) ^2 X' y; R6 W$ x$ H9 P. n
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)' I' ?! q: U- [8 A  k
  656. //        {
    / y  N% h: J8 K& a$ R" F/ t, p
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)' V0 d% |* T( i* D# P" V* N
  658. //          {& G# x6 D8 i1 N5 E
  659. //            bitmap.GetPixel(iColumn,iRow,&color);# L% U+ t# S* S( r1 u8 ~, v2 c
  660. //            colorTemp.SetValue(color.MakeARGB(# W! H: q- R  a9 G' |0 X
  661. //              (BYTE)(255*iColumn/iWidth),
    ! U( W; I. D( N7 u$ \# J
  662. //              color.GetRed(),
      K0 O$ U/ z% C3 w; {: M0 r
  663. //              color.GetGreen(),( ^2 l1 _( x9 X3 b0 T
  664. //              color.GetBlue()));
    3 S& e" O2 P: ]* y: f6 [. S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    7 |+ i4 X/ f) F% h5 w
  666. //          }4 E9 i) C! z! b+ r
  667. //        }9 M9 }# L  }, I! R. V& L% b; `
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ; T7 J. d: D8 v$ G3 G$ p
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");, V3 C8 f! R- e8 E' i) K
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");% m* o+ b: X: l6 \
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 @7 _% W- M7 d
  672.         for(i=0;i<240;i+=8)
    1 ^: h1 J; S. j) Q) {+ E9 T
  673.         {
    , v' o2 }- i& @) K8 Y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ _& [+ n* R3 \5 g8 \
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' i4 T8 y. e2 Z% X
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , w% D" l2 b' ?) I( u
  677.           Sleep(33);8 l8 T  \8 u7 ~, z/ X% T2 M7 v
  678.         }
      f+ N7 }) t2 Q$ {6 `! ~3 Y
  679.         Sleep(1000);
    , L- }3 r; Z, ~( _2 M3 ]6 H
  680.         for(i=240;i>0;i-=8), e' _' O) a! q( G+ ?
  681.         {4 p- ~* m9 ], E1 |" i0 l" h) E/ M' R
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);4 d4 G/ C* x; G6 `5 N
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 \  S4 |- j3 g. d
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' l0 h' Z' x5 O! T) f# g2 ?
  685.           Sleep(33);
    ; s: ~& d- i" B# A! @( ^1 B2 G3 H# X
  686.         }1 y7 Q. l) e$ K( `' u7 Z# m( S! S
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    $ j/ ^% N( t& i7 o4 M% H
  688.         dlg->ReleaseDC(pCDC);
    : V: Z* r5 \- J* R
  689.         DeleteDC(hdctar);2 e  a  c3 p7 {% z
  690.         DeleteDC(hdcsrc);
    ! v8 H& \' a' D* c5 u; f  e
  691.         DeleteDC(hdcorg);% Y3 v  H* V6 h# Z+ w2 b9 V' i
  692.       }& \2 m% _3 b: ~
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    " Z7 I6 z/ q6 N  _! A, V
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");# @% a8 S, ?2 C' T! x7 f
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");1 l7 M9 M7 |, D" d/ v3 {* g
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( r5 F" K' i% V: M' R# G; |$ r& a
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 j! ~* X# y4 M, _% f7 w
  698.       if(!Dn.Connected())
    / w% \1 _+ J" e0 q4 p, _
  699.       {
    3 s3 |5 Q% {7 ^2 S8 I, m! e
  700.         dwTotalFiles=1;4 @) j) V- S. [6 U0 j- R+ \
  701.         dwDownLoaded=0;
    8 _& E9 t& A- t% p& g0 X( G( S7 p
  702.         bSilentStep=TRUE;6 n: r; a  J& P  @" B5 z
  703.         bCompressed=FALSE;/ i0 H' V3 g6 Y- w7 X
  704.         strExtLocal.Empty();  [* o9 S, U! E$ d
  705.         strFullName="readme.txt";3 T0 K* ^* f7 e, z4 ^1 A
  706.         dwProgramState=AP_CONNECT;
    * z. R0 f$ j) M+ V9 a
  707.       }2 M: U2 I9 P, Z1 r' v. x
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();7 ^) ?3 Q% I9 U
  709.       dwStartUpSteps=2;  k) R2 x' T0 r/ _
  710.       break;0 C% P. M/ `2 D2 J" o
  711.     case 2:
    7 K6 R2 Z4 F9 {# q
  712.       {
    - B) _$ L  @/ e- s5 }( a
  713.         int iEOF;
    3 T5 U/ t; d9 b+ U3 }% t. R
  714.         FILE *fp;( [: h! Z6 X/ ?; V; y2 s
  715.         char szString[512];
    . w* Z* f& v0 h4 t8 B  C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ) q0 f* t: \" |$ L$ |# S5 z- p
  717.         if(fp)
    - A( h( @9 O4 y( |
  718.         {
      ^) Z5 z8 d7 a: p. v4 r
  719.           do4 ]1 a* t$ t' W
  720.           {
    . x2 L! m- |# k! @- h+ n+ P# [' I
  721.             iEOF=fscanf(fp,"%s",szString);
    ; k  m. W2 J' D7 v6 c: K
  722.             if(strlen(szString))9 O# [; A* m; w, {
  723.             {: k6 J  W& _  t3 o3 b; d; L
  724.               if(bFirstChar)
    6 k6 E* k. M2 U4 Y* y
  725.               {
    # P- ^9 p. J8 B+ ^
  726.                 bFirstChar=FALSE;' @' ]# w9 G7 w+ p0 C% B6 ^
  727.                 bConnectIsBig5=FALSE;4 k; w: O8 G0 a& v5 S" ^
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    6 H- V* \2 E2 k3 P# _
  729.               }. j# _& z2 j$ K! t! x. a+ o- F1 U
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 M# m+ ~* g" c' b0 _
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . V2 z0 S" Q- n8 ^# W/ R
  732.               dlg->m_ListText.AddString(szString);4 v! e7 N% }9 g. `5 n% x
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 Q' u, g& e; E
  734.               *szString=0;
    . h+ Y6 o7 }; K- S/ L
  735.             }
    4 U3 u! D5 ?! V4 m
  736.           } while(iEOF!=EOF);
    / q% u5 B7 H/ O8 ~6 z
  737.           fclose(fp);
    8 [3 d+ W2 C* P* W5 O* v- V1 m& W
  738.           unlink(".\\DownLoad\\readme.txt");
      ]6 i  i9 d2 F5 v- N/ x/ @. B8 Q
  739.           dwStartUpSteps=3;& F$ A4 T4 l. Z
  740.         }
    ( A4 f6 j$ ~: t5 D
  741.       }
    1 C; M4 C6 k8 e! e% ^
  742.       break;
    3 e9 Y" @9 a, U# m; w" B
  743.     case 3:
    7 s( X% P& ]5 R1 J6 O9 u2 n9 f
  744.       if(!Dn.Connected())
    # |1 J+ K# p2 O1 R
  745.       {
      J, `$ }! F1 F; _
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ; c' L: a( l( A) q8 ?) T
  747.         dwTotalFiles=1;
    / o2 o1 Z) L' K# s" d; L  e
  748.         dwDownLoaded=0;
    * d* P, y) r* B5 n- e
  749.         bSilentStep=TRUE;
    0 }8 C/ `  d' {/ ?5 n
  750.         bCompressed=FALSE;6 f, z6 N$ b- ~8 I: z1 H/ b
  751.         strExtLocal.Empty();& Q& p& {  o! [" B# t
  752.         strFullName="checkversion.txt";3 `# Y$ t; C$ q# f/ G) y
  753.         dwProgramState=AP_CONNECT;) O, H9 W" Y- p4 [
  754.       }: i/ p  X. Y' j6 o1 A: ^0 J% K
  755.       dwStartUpSteps=4;
    - o+ d, ~% B9 r1 |& t6 H0 f% Y
  756.       break;7 f2 o  C6 [! n1 h
  757.     case 4:
    # v! L0 z, a- P$ c+ C
  758.       {
    ; p5 m. h7 \- @* k& ^
  759.         FILE *fp;7 c! d# v- Z4 }6 Z0 O2 R" ~6 S
  760.         char szString1[128];
    4 A2 `& U# ^, q! B! _) s
  761.         char szString2[128];: b5 a1 D, [5 B" F1 w5 O" G
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ( d! e9 J2 ?/ _9 e7 s! }. U
  763.         if(fp). V8 B6 }# l7 Q# [
  764.         {" c% C* b3 t, n  b. L9 b
  765.           fscanf(fp,"%s",szString1);/ A; y* u+ r' v
  766.           fclose(fp);) w9 n9 J4 `  i: ~+ L) o! {
  767.           fCheckVersion=atof(szString1);
    1 W1 D  L( s6 f( h" `
  768.           fp=fopen(".\\checkversion.dat","r");3 ]& S9 q$ ?9 _/ ?, W( N+ N
  769.           if(fp)' g- @" o* E: H. b) [
  770.           {' l' x5 l  _: ~$ V8 y* |
  771.             fscanf(fp,"%s",szString2);0 G* k! ~* d" k& c7 y9 h
  772.             fclose(fp);
    2 a2 Y- q0 k2 D, A
  773.             if(atof(szString1)!=atof(szString2))4 D  t* e3 Z  U4 u+ l( ?2 U$ _. x
  774.             {
    & i9 ?) X3 B4 H: G/ m. X  n
  775.               if(!Dn.Connected())
    7 ~4 s, I% a( p* {+ z$ h: _' }1 g
  776.               {5 Z. X! Q5 ]! W/ {4 i9 Q
  777.                 bFirstUpdate=TRUE;9 w* [5 u3 Z' l8 v  G
  778.                 dwTotalFiles=1;
    ; p; `- Q! u/ x+ T" N
  779.                 dwDownLoaded=0;
    & k( y0 \  b5 i/ Y8 u
  780.                 bSilentStep=FALSE;
    + j% r# e2 x- w1 S7 h4 Z2 \
  781.                 bCompressed=TRUE;
    ! M2 |8 h9 x& e( Q& b+ {  \
  782.                 strExtLocal=".\\DownLoad\";% B/ [. A# g5 e  b0 g4 c
  783.                 strFullName="update.txt";$ n( M/ \1 I' n3 ]7 u, Q, ^
  784.                 dwProgramState=AP_CONNECT;
    " P8 [1 ^) S5 d+ J" x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ {* z% J9 w3 P- g* z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" v; F5 {8 J8 E0 X
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");, ?& b0 C' K; A* m$ v
  788. 9 z3 G! s4 l1 _" m
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; z+ D# X% O) c* ~" i
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    $ T7 w+ E( C9 ?2 C1 B+ s4 {
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 {' M8 `1 R! [( V
  792.                 {
    . [( d* }/ B0 g  W6 \
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");8 s: g9 x. n2 d1 k7 D
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    9 L, @4 d2 p* P5 @( s
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
      M. ?* b+ K; @
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 y6 l% R( `( h- I' t- r3 O
  797. 0 M1 U, N# H2 |5 m  K; x
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- _: `6 x% `: p/ ]0 Y0 V
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 [: J  P$ V# X3 u+ \
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    - {9 L- i. o9 C3 ?& \/ o$ l
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 r+ x5 T% l0 x8 e2 I# q
  802.                 }
    8 Y* A) ~" V. t
  803.                 dwStartUpSteps=5;
    * i% v- c" Q2 \3 P# P$ M" A+ p
  804.               }$ M6 [, F6 @* b' v& a4 s
  805.             }8 c8 \3 H* T- O
  806.             else- U( p+ y2 ?* h0 p
  807.             {  p! \" ~4 g( z! d" E5 W. _& U
  808.               unlink(".\\DownLoad\\checkversion.txt");4 u, ^+ E7 I3 P/ `2 E, _& `9 {/ \
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      W8 |. D% ?9 d2 y4 P8 i
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");) B# o+ b5 C0 D; u# i, b7 c* X) u
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    7 \7 _  A- o! ]" D* @+ L
  812. * w9 P+ Y- v( y' E  L  @; {( ~7 r
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ T; E+ c* H$ w5 n+ W' B+ N1 c
  814.               dwStartUpSteps=99;5 Q4 {: E% p, ^6 B9 x9 A" _
  815.               bFinishUpdated=TRUE;) x( T0 X9 V# b% B% Q- Z
  816.               bCanUpdate=TRUE;4 Y# S' k" W4 p" v& X9 T
  817.             }
    ) Z% J$ g7 z  U% g# r0 T
  818.           }
    " A6 M, g; K. u# n0 R( @
  819.           else' ~  q! T8 A  ]# m/ m2 X
  820.           {, S# N5 X# U' c# z
  821.             if(!Dn.Connected())
    7 D; C% S7 A* Q( ?
  822.             {* L1 H7 l% N! _5 a& f6 K* K1 m
  823.               bFirstUpdate=TRUE;
    " n1 o7 ~# y0 i( A2 U+ ?- j
  824.               dwTotalFiles=1;
    1 \- F$ b& t% g. ]
  825.               dwDownLoaded=0;1 H9 d5 s5 h- j3 u' F
  826.               bSilentStep=FALSE;
    1 p" P8 s+ A9 [$ |
  827.               bCompressed=TRUE;/ K$ v2 n& C7 I! `! g) z5 f
  828.               strExtLocal=".\\DownLoad\";2 ~4 @) n1 C. E; V3 i7 K
  829.               strFullName="update.txt";
    4 i' l2 Z8 T: f
  830.               dwProgramState=AP_CONNECT;
    6 ?( T2 P2 z" |' K( a1 \" _+ u
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" k$ |. r0 ]' l; Q3 K  G
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 t& `' ^( w7 x
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    0 y2 s* t5 i! Y/ j* B1 b2 U
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# |" ?6 z+ r7 w
  835.               unlink(".\\DownLoad\\checkversion.txt");; |  ?! T# |' J- j% z2 r: K, D2 W( N
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    # p/ q3 I5 U  H' i- V5 B5 Y
  837.               {
    . J. z9 H- }/ u7 k$ ]& p* \% D; O
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");  B; D7 z2 {3 {& i5 N9 s% F
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");) V, H, `  _( k0 A$ z; \  f: ?
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
      W% i8 [: X7 r$ Y. r  @! a  `
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 ^* y  T8 X- F# v4 F+ v2 H
  842.                 ! x! n+ u+ a% Y: x" i
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 z7 f. Z7 {9 N$ S7 N
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # C9 E! v- H. [5 O
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");% `8 U) o  n+ P* L
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - }& X* v5 v! O& M! F: v0 T6 k3 V. `
  847.               }9 I: Z3 X" ]$ d4 w
  848.               dwStartUpSteps=5;
    2 k+ ~" j0 H' T* w
  849.             }
    / a  P* d" y: p% `* A
  850.           }
    ) r! a/ ^; h9 `5 w
  851.         }0 s0 V# D5 K" e" A! t
  852.         else
    9 B' D4 C; M3 q, R$ a% I6 @
  853.         {
    : _: _, g9 u. i2 f0 s/ L$ Z
  854.           dwStartUpSteps=3;
    & x0 s. P) P% u6 x/ Y! }- H# }
  855.         }
    $ O7 L1 b+ q- |! Y& a$ y
  856.       }5 ~3 w; K6 `6 O2 M0 j
  857.       break;; ~& F) a8 N: _+ C7 u0 V% V& h' w, G
  858.     case 5:0 c6 E% ~+ M3 t6 }, C5 X( f
  859.       {
    5 w( z/ z. M9 J. k8 ]- @
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    & ~0 X7 n0 u1 x  p6 i% a
  861.         {
    . C  K1 A5 d0 b% @  O; n6 y
  862.           int opt_overwrite=1;$ J7 L! J$ f5 [9 a
  863.           int opt_do_extract_withoutpath=0;: i' g1 p9 ^* m. K' [3 i
  864.           unzFile uf=NULL;2 Q1 N3 w7 R6 i) J5 `
  865. 9 \6 \( B8 X/ i9 f7 e, w
  866.           uf=unzOpen("Wsa.zip");
    - N: B. Z6 m' n; r- `
  867.           if(uf)
    9 X# s/ n) M( D6 Y$ f7 l, D! a, }
  868.           {) u; h8 a% h5 Q' C( E5 i8 u& x6 h/ Y
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ) `. B! _4 w1 Z( X$ I
  870.             unzClose(uf);
    $ \. g- K2 @+ Y2 B2 U
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    - l+ K/ C# ~6 q& ^% I
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");, H; T  ^$ e1 Z
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ' Q; R6 ~8 d# o( ^* G: X) |
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 m4 h6 Y" j! {  G! j7 E, H% t( p6 i- F
  875.           }
    % `. M, a$ ?; B
  876.           DeleteFile("Wsa.zip" );
    0 Y+ K# \$ c3 q, O
  877.         }: ?, @. F5 x& f. \1 q9 G
  878. ( V3 ]  M0 ?( i. ?4 C0 p4 p
  879.         if(CheckLocalVersion()): h1 q% d5 }7 i3 A  J3 v) X# `
  880.         {
    7 z+ _5 Q( s; R# d% a3 r" ~3 `
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    8 @$ {4 o! {2 [0 W* Q) `8 K
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");# ]% l# ^2 s) q$ ~  V& S% F
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");2 d# Q) L, i$ [' n
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , H+ b2 B. L7 X+ F( f9 O4 _
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);. \# W( \6 Z9 k; t- ^) M1 T
  886.           dwStartUpSteps=99;' y/ B% d9 H6 C' X* F0 z/ U
  887.         }
    9 t1 O5 h- x! w. {
  888.         else6 [6 J$ i1 M& v1 S, l  ~
  889.         {
    / z+ \1 S  I. @5 Y1 O9 k9 U
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! O8 k% _+ x- C; ~) L! G& V' D
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");3 I* Z& ]. j1 b) E
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 F; G4 W  x/ K" `: |# H

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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