CSUpdate.exe源代码

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

4 ?  x# w# r0 Y: Y
  1. / RevApp.cpp : Defines the class behaviors for the application.: F8 i/ Y7 [  ^3 \- x) ]
  2. //& m; \5 n; K3 l

  3. 3 T2 @2 }/ u8 r# S1 u  K8 Z2 P4 E
  4. #include "stdafx.h"' b: G& R# r" m0 |# j2 t
  5. - R$ i* b% T3 }( c, c
  6. //#define UNICODE3 G  J( i6 v0 m+ O
  7. //#include <gdiplus.h>& ]& }4 z6 r8 w& G8 }0 K: c
  8. //using namespace Gdiplus;: f% r* s0 d6 B

  9. % {. r4 o4 L# q- I0 [' u1 M% a
  10. #include "RevApp.h"
    9 s; m- v7 M1 u( ^/ c5 m6 H+ J% f
  11. #include "RevAppDlg.h"
    9 p" r  \( m7 y' ]$ M, ?

  12. " o* c4 x( W" Y/ i8 b
  13. #pragma warning(disable:4786): P( O* v  ~# R5 |
  14. #include <map>
    . v+ i) P. N2 W( F$ T. r8 I+ M$ Y
  15. #include <list>
    * X2 N  ~4 o" D- Y1 `  U
  16. #include <direct.h>6 W# ~) U, h% o
  17. * _( U, f( U" [
  18. #ifdef _DEBUG3 l- D/ _; M+ Q0 h
  19. #define new DEBUG_NEW
    / `% G7 S! k' G/ y& Q
  20. #undef THIS_FILE6 Y: x3 X; l( V) Q1 t$ e
  21. static char THIS_FILE[] = __FILE__;
    , r1 n/ x0 |$ q7 e. i/ j
  22. #endif
    ) |) f7 g6 j  ~
  23. #include "SkinResDef.h"
    ' T0 O& E7 h6 C0 P# W
  24. #include "ChangeBG.h"; B( D; y; Q8 i. j
  25. #include "AFXINET.H"
    6 [0 [% v- n5 i% v& s+ m1 X; F

  26.   t. H% C$ G3 C, H$ A/ I
  27. #define TRADITIONAL_CHINESE 0
    0 a/ o; e3 |2 f  M  p& D. |2 ^0 L' T
  28. #define SIMPLIFY_CHINESE 17 X8 v' ~& z" D  n# x' G' E$ ?! p
  29. #define ENGLISH 23 [) H7 c) |% U( C% [3 T
  30. int m_iLanguage = ENGLISH;5 z1 k% C$ F1 w  V
  31. /////////////////////////////////////////////////////////////////////////////" s, N- Z, l2 G: ^
  32. // CRevAppApp
    , k" m; K* V  V: f$ h

  33. . \$ x- A8 m- W* [1 O/ t. |* P
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ! g4 Y% B2 t. g0 t; p
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    7 W3 O+ `! f0 U6 ]& \' T4 ^+ k
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.; D/ W9 _. P5 Q! `3 G9 R, U
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!! c- L7 D# J8 ^8 Y% l) a5 j% _
  38.         //}}AFX_MSG
    2 A- z% P: x' d3 C; ]2 t. j' [
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp), @% p4 Z8 J0 Y9 d" L
  40. END_MESSAGE_MAP()
    " q, O4 I. M! a$ F% S5 `
  41. / I, L4 f% l* c" M( q
  42. /////////////////////////////////////////////////////////////////////////////- `6 O& @$ L% v+ s: @4 u4 y
  43. // CRevAppApp construction0 ^  k/ n! \3 q& P7 U# B5 m7 k
  44. # F$ r- \; u( i  y' |6 W# C% Z" x
  45. CRevAppApp::CRevAppApp()
    % B+ p8 d' ~8 U# k0 [# ]2 k
  46. {
    * p! o7 _3 g1 {3 \. n/ X
  47.         // TODO: add construction code here,4 ]- l  U. ~8 \2 l( b
  48.         // Place all significant initialization in InitInstance
    7 O7 i! n' v$ n) G) Z
  49.   bDisplayIsBig5=FALSE;, f9 }* }( O8 Q2 V; |
  50.   bRestartUpdater=FALSE;; n; U5 I' ^1 z- b( v! Q6 a
  51.   bFinishUpdated=FALSE;
    ' S8 W) f$ l9 {$ b. y+ d
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;# l; a1 s  W0 }% }: O
  53.   InitChangeDataBig52GBKS();" Z% B+ E  J$ m  M0 g$ N
  54.   InitChangeDataGBKS2Big5();
    . `$ X! N4 q" Z/ Y3 k, n
  55.         //
      m( z) m9 j7 B3 H/ b% ?# P/ F1 N
  56.         bClickRunExe = FALSE;0 c) X7 W5 X9 M- T2 h/ E
  57.         //4 U. {, p* S  ?2 H# c. h: }0 k9 r
  58. }. S$ t% x% ?5 Q4 B* x& @& k! h

  59. $ B6 {( h, {, i3 L2 m+ q
  60. CRevAppApp::~CRevAppApp()$ m2 X$ e3 s/ ?: e4 @5 n) f
  61. {) M) X6 T9 {& D6 W* l3 @/ s* ~
  62.         // TODO: add construction code here,$ X8 }, N7 y$ {
  63.         // Place all significant initialization in InitInstance
    4 G. F9 q8 W( A! z5 B1 x9 s
  64.   EndChangeData();
    0 G' T8 C% }) `/ {  _2 _" }- }
  65. }4 W' \* o# D% l
  66. 4 d% J9 \' Z: F9 _
  67. /////////////////////////////////////////////////////////////////////////////
    ! C, X; C3 r' ~) j& }
  68. // The one and only CRevAppApp object
    9 c) I: R2 ~5 O: d& ]0 X) n( g5 }( ]+ L

  69. # [! N: f( @: }) }
  70. CRevAppApp theApp;" U4 y9 x) X) o
  71. * i) S7 i$ g1 z5 n7 {; K3 i  ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    - U7 k. K4 ^$ S2 z
  73. {
    ( k/ |' ?5 L0 ?- Q% @7 _; l
  74.   int iEOF=0;# `2 ?8 b$ C  v1 m! H( k
  75.   char szTempName[MAX_PATH];
    4 S: z: K9 ^# |
  76.   *szFileName=0;
    3 p) p" ?6 N; \$ @; Y* F2 z
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ) ^& F( C& B: U. @
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    2 z' x* i$ ~6 }7 H
  79.   {) R2 p& p' z) U$ U/ g/ @
  80.     strcpy(szFileName,&szTempName[1]);
    & J4 ]  ?9 R; X1 k3 ^5 D
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)/ b  n7 B' @+ B/ N4 x" V, W  v( E
  82.     {4 Z/ f  D+ ^4 \  G
  83.       iEOF=fscanf(fp,"%s",szTempName);5 I- ?1 F# Y# q+ X2 z( U. o
  84.       strcat(szFileName," ");
    1 E, f) `' \0 ~- R  `, C8 W' z
  85.       strcat(szFileName,szTempName);
    7 g& ~7 B7 f6 t% Y5 U
  86.     }
    ; A7 W( l; {  k. \" f: `( B4 ~! L; a6 J
  87.     if(strlen(szFileName)>=1)
    1 Y. ~# S7 k& `7 P+ x- `5 p
  88.     {
    ! `/ m) ^: y; q/ Y$ i: n4 f4 R
  89.       szFileName[strlen(szFileName)-1]=0;
    ; S- D' _! L3 t' d7 J$ ?
  90.     }3 E: b* l# O( W
  91.   }  j0 l. Z$ H2 Y4 g" @  @+ Y% s
  92.   return szFileName;4 q( D" _+ S1 J% h# r/ F' {: ?
  93. }! K' K$ N8 ]# H8 T( G* _& C
  94. " N% O$ C5 e( Z- S) {! B3 P6 Q
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)/ ^5 j( _7 W$ z% L6 d
  96. {9 C3 c% b2 b$ }& Y: B0 E) b
  97.   FILE *fp;# X5 x$ O/ `/ J
  98.   char *key=NULL;# X5 N# h0 e& O6 G
  99.   char version[MAX_PATH];
    9 t; ^# {7 ^+ b8 m  ^' `
  100.   LPUPDATEFILE file,olds;6 H$ E, K% S0 H, K8 D
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
      m/ R: u2 D7 {% k
  102. 7 d7 ?8 F4 _' D$ \: f  L
  103.   UpdateList.clear();
    4 X; |: `0 d6 J2 U7 T, |/ i, q
  104.   UpdateFile.clear();
    4 s; ~+ h6 \) D. i+ i. h2 ]
  105.   if(GetFileAttributes(filename)==-1) return false;
    % ~* U2 `/ r. s. [6 v% d6 r
  106.   if(!(fp=fopen(filename,"r"))) return false;
    + J9 c; O+ f, P9 ~6 ^4 r
  107.   fscanf(fp,"%s",version);9 w+ L7 O4 |9 M) U4 p+ v  g
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }% j: K. y$ @2 \5 }* J3 d# M- Y
  109.   while(fscanf(fp,"%s",version)!=EOF)6 a/ K" z  W& }+ F
  110.   {
    4 D* K! d* u. H0 V( O  g* F& ?
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( s/ S0 ^' n: s# [3 c$ H0 Z
  112.     fscanf(fp,"%s",file->path);. g! S4 \# R5 ~! l4 L; H/ c
  113.     ReadFileNames(fp,file->file);
    1 L9 J  i' ?  Q( J. ]- \3 k
  114.     strcpy(file->full,".");, Q& r4 l, Z9 g, {( r
  115.     strcat(file->full,file->path);
    , z! G" V/ k! P: e9 c$ T) T* j
  116.     strcat(file->full,file->file);
    - U& |9 |; I6 {* E2 S. R$ T. M
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    8 H7 O$ a- G  ]3 o( e0 N
  118.     {7 M: v- E9 d# m$ y% E8 r8 M( F
  119.       file->vers=(float)atof(version);
    8 i: z4 q" b4 ]% O: ~$ d
  120.       UpdateList.push_back(file->full);9 Y+ ]7 N0 B4 P$ }2 B
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    0 \# X, n5 B8 D1 K- `- u) z
  122.     }
    5 ~, g; h/ ~+ K9 n+ `! O; a
  123.     else
    % y+ w' R* _8 Z0 O
  124.     {$ H; A8 s; x7 M# E
  125.       olds=(*p).second;% e' _. O5 |- \1 N- I. w1 V$ N
  126.       if(olds->vers<(float)atof(version))8 A' ~8 L  f  W% G# h1 }9 a/ \
  127.       {" i5 I; N9 B6 Q3 A
  128.         olds->vers=(float)atof(version);
    & H- {" h# O0 g1 X; @5 \* M
  129.       }8 c5 {, A0 |- Z0 Y1 P; L! y
  130.       free(file);4 u8 X" {, h, N1 p9 K/ c
  131.     }
    % Z7 ^) _  _( [; q" b
  132.   }
    * }" V3 X) z, p  T! r2 Z3 O
  133.   fclose(fp);) G5 q! f5 N+ O, b
  134.   return true;
    & S  i+ C2 r$ t% D" k7 ^
  135. }
    - \, U5 P! {" K
  136. # I7 _# [, u3 f; U3 w0 W
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    . \4 l8 |# T: n: ?; m
  138. {
    ! v9 U1 ]4 @6 D/ b, x. @
  139.   TCHAR  szFull[MAX_PATH];. h/ M) g$ i% N- E: [* a" o9 d4 y
  140.   TCHAR *token,*inter;
    7 ]( w7 k1 k3 }- g
  141.   *szPath=0;% O9 p1 m9 w/ ^! t' b- @) v, \
  142.   strcpy(szFull,szFullPath);
    , j- q4 g0 E$ [: k- C) Z
  143.   token=strtok(szFull,"\\/");, b7 k7 Q( W6 D! ~) G8 s
  144.   inter=token;7 m3 X' R8 Q. p6 z" z
  145.   while(token=strtok(NULL,"\\/"))9 H* Q% G( |( J
  146.   {
    . Z9 `2 h1 _' n; q+ R
  147.     strcat(szPath,inter);/ _+ [# |/ h; _. |$ |7 z6 U0 ]
  148.     strcat(szPath,"\");/ |! Y8 b9 x6 n
  149.     inter=token;; o7 [/ {; j/ @# A. B9 i
  150.   }  ^6 p( [7 h5 d' a4 Y2 R( E
  151.   return strlen(szPath);; k' N2 [' O; {3 X- f
  152. }
    " h& l/ \" {  e# c

  153. . T& A7 `4 b$ \" P1 P! ]6 M) P
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)( a: n. c8 b- J5 W5 U2 q" p+ u( E
  155. {
    - ~9 G  P4 l5 N- s0 y" A
  156.   DWORD attrib=GetFileAttributes(Target);6 Y! m) o! u8 d, H; X9 w" I
  157.   if(attrib!=-1)5 d3 z: m" K5 @  _+ ]  k0 d$ b
  158.   {
    . Y* z0 B  T/ t2 @  @
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    & d7 R% s+ ?1 R! r& O9 k
  160.     {" t+ F5 J/ N( F0 V. j3 O) x3 E% J" q6 i, A
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);5 {) I+ \! r7 T
  162.       SetFileAttributes(Target,attrib);  `; ~9 L8 v+ X/ d6 p
  163.     }
    0 }" v- w2 o8 i$ W& H
  164.   }
    3 i: N  T3 J/ S9 }1 B
  165.   CopyFile(Source,Target,Erase);
    ; O! h4 H" a; _  d
  166. }3 f& w; Q+ b+ c$ r/ F
  167. 6 x6 y3 U( F6 H6 I6 Q, S8 d
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    2 L% i( d$ y& V! U
  169. {6 d0 ?% N8 @8 V* {
  170.      FILE *fp;
    ! `, f, q. t, n, n
  171.      char  szBuffer[8192];
    . C) _0 G  b- W& Z! @6 Z
  172.   va_list  argptr;
    0 a( \( ]6 `9 h9 V
  173. ! J* H. |9 ?$ @# h- s  f& E
  174.         va_start(argptr,message);, b  H4 o$ @! {% ]
  175.         vsprintf(szBuffer,message,argptr);
    $ F- c- \3 \' c2 H
  176.         va_end(argptr);8 b, e6 C, E8 g' B1 S' H' a9 Z
  177.   fp=fopen(FileName,"a");
    , Z% `3 k. I6 K
  178.   if(fp)
    2 ^! F$ b( W  Z" R) \9 B4 e
  179.   {
    * X2 S$ U1 M0 P. L5 `* S4 Q  V, d
  180.     fprintf(fp,szBuffer);1 r; i0 I, T4 ?" g
  181.     fclose(fp);
      Q# X, C: b, o9 B, c' I/ O
  182.           _flushall();
    + q8 X! f/ p( e! V* U4 q
  183.   }
    3 S# S- j3 ~: }2 Z
  184. }" O! T  }3 l3 E7 C
  185. $ l! g: }/ I% }. {# |  g$ H
  186. BOOL CRevAppApp::Fclearf(char *FileName)$ |3 |% V  J( r7 F3 l; G) V
  187. {# V  G7 q& K6 X: D7 C  R
  188.      FILE *fp;; W2 r' ^$ G9 A
  189.     DWORD  attrib;, f$ W: U- S. H8 {
  190.   attrib=GetFileAttributes(FileName);
    & Y* u5 I1 s) {: K# g' A
  191.   if(attrib!=-1)- `$ p* m' A  H' E; k: s
  192.   {, }( b5 n% B; ]! p4 R/ A3 E! \2 P4 b
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    8 w- p% x7 G5 S, ~% w9 Y+ }& b( B
  194.     if(!SetFileAttributes(FileName,attrib))/ Q) o* |; F# W, N/ _8 h
  195.     {. V  d8 [7 v6 T5 @% ]) W8 _4 I
  196.       return FALSE;# {% U+ j9 ?% d' B
  197.     }& t# j5 v; @# q9 {6 V; {6 [& [% {
  198.   }
    # s1 m; n3 v* d7 q$ f1 m
  199.   fp=fopen(FileName,"wb");
    + O" ~/ T' x- K
  200.   if(fp)
    * t3 d" F5 d* T2 r0 M1 P! V( O
  201.   {9 c# m6 W3 F+ h, B
  202.     fclose(fp);. X4 H& b- B# D; X& R" W9 T; d
  203.   }8 F+ B9 W% o( w  {
  204.   return TRUE;3 X6 ^4 E) @) p: ]5 d4 l
  205. }
    ) W# q! z( T+ x8 d; ^& L! ]; P" }' |
  206. 3 V, A) n- o3 q( z" Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void); j, ]3 x4 U$ d% Z) a: P
  208. {; C; S( D7 b6 x. Y7 o7 W6 T
  209.   char filename[MAX_PATH];
    ) n6 T9 A. n; U# |) F
  210.   LPUPDATEFILE file,olds;
    # Z, B. C$ D+ j
  211.   std::map<int,CString>::iterator i;8 e$ w$ @8 _& [7 L" B
  212.   std::map<CString,LPUPDATEFILE>::iterator p;9 R; R" @( K2 G/ n
  213.   std::list<CString>::iterator l;9 W% t) a9 ~) s" D+ l( ^
  214. 7 {- c3 M4 q$ {) B
  215.   if(bFirstUpdate)& q: ]$ ~: z/ V0 s+ p
  216.   {
    1 U( M4 T& n2 [/ ~, Z  E+ F
  217.     dwCurrFile=0;, w5 o; {( e3 g* ^! ^3 R
  218.     bFirstUpdate=FALSE;+ a! G# v, X: r( d# v# b
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  g# D$ T8 F' E: M
  220.     {7 e$ `9 a/ E( Z- H+ F) D
  221.       dwTotalFiles=UpdateLocal.size();
    ; |' u) c8 K2 F9 g1 @
  222.       dwDownLoaded=0;
    7 X' l1 r0 }/ R
  223.       bSilentStep=FALSE;' Q, d6 X) y5 L$ a+ H
  224.       bCompressed=TRUE;" Z* I+ d. q4 b& `
  225.       strExtLocal.Empty();9 K! i* l0 g2 S1 B& b  ~
  226.       strFullName=(*i).second;
      _) U" m0 Y  h3 x
  227.       dwProgramState=AP_CONNECT;
    2 a  ^. z' {9 G) X6 L2 B
  228.       return TRUE;$ N! p1 x+ {6 z% C; @
  229.     }
      ~5 y; X7 M; X; ?3 g0 h
  230.   }
    $ E2 F8 E1 x" a3 D1 Z& L" A5 k1 }
  231.   else if(bRestartUpdater==FALSE)* X' g0 E. a0 S; g
  232.   {: \5 f4 |: u+ d  Q7 G
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    2 n( c+ Q, w: f
  234.     {
    - e6 A% F; ~  o; F
  235.       file=(*p).second;
    $ G' Y: c. ]2 d& w% y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())6 y  n& \0 T; J; l
  237.       {
    4 v( E) a4 L- }
  238.         olds=(*p).second;
    & }; q* L+ P9 U' o& H; ^
  239.         olds->vers=file->vers;" ^$ c  z+ u% ^0 l8 a' g) y* T
  240.       }" w. K5 j# L8 h" a, F7 ]
  241.       else
    , i" M( J" H  Y7 P4 D
  242.       {
      ]  u  M/ u% J
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' p  m! m. n+ d
  244.         memcpy(olds,file,sizeof(UPDATEFILE));# c6 O2 b8 y4 w7 t- v
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));; k. m# F( [+ }- U& |) K
  246.       }
    ' F( V" L- J+ a& o
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
      V# j4 X1 y8 z2 K( [: U5 G% r. T
  248.       sprintf(filename,"(%s)",file->file);9 a$ F/ i: i) k$ u2 O
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ( q5 A7 d- e/ r- e# y7 M, |! O" S4 L
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ! ?7 j) |9 `" F: G
  251.     }
    3 S1 }( I) U- ?% s
  252.     dwCurrFile++;
    " p6 Z) i5 A! s/ b7 s0 i. O' ?
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    9 ?* M6 @- {6 ]/ t
  254.     {
      J7 u1 \8 U3 b* h" @
  255.       bSilentStep=FALSE;- q$ R  q. {2 ^' J6 W$ c1 D
  256.       bCompressed=TRUE;* l- {1 b; f- r+ P+ S' g6 V
  257.       strExtLocal.Empty();
    ( M5 d5 u. r/ L! P( \) T
  258.       strFullName=(*i).second;
    & M) z+ x9 z. ^1 O9 B, ~  ?# q& r
  259.       dwProgramState=AP_CONNECT;* ?4 _* W; h6 P& ~
  260.       return TRUE;' x( R( n+ H1 S% z# r
  261.     }
    & M. S6 Q8 m- \" I3 N  O
  262.     if(!bRestartUpdater)
    % T9 C& p; S0 Y: i8 s) e# X
  263.     {
    " ^, g/ k: p& c% ?8 I
  264.       int iCurrSize,iFileSize;" [* B- J; V& x6 o0 C; @
  265.       iCurrSize=0;
    0 X/ T* N+ i5 v$ L0 P! ^8 F1 V0 E! P- {
  266.       iFileSize=UpdateList2.size();
    " k# R0 p: U, t4 c9 p; h  k: l
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    7 F; T1 I( R  J+ o9 _- C
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    : P8 @0 a$ M4 g6 k. x/ Z
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");- X0 H( z. ?4 ^1 B1 U7 B$ g
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : p& V' A& _( n. k
  271.       Fclearf(".\\update.dat");) z/ m+ E9 r& u5 H1 Z, E9 p2 X
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ( D& F0 J7 f4 s% P7 }- s) m
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)1 O. W- _5 D, ~1 `) d% R, o, l" I
  274.       {* u* g$ G8 z7 f- P, O
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    3 z; C, `: w: U7 ]! l
  276.         {. k3 |2 [4 _4 x) u* C- e
  277.           file=(*p).second;
      \# i: @8 q) q
  278.           sprintf(filename,"(%s)",file->file);( c+ P) ~% ?; J5 c/ i2 R& \
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, _9 ?! X/ o% b: _
  280.           iCurrSize++;
    ! o" y9 I4 e3 M; t" C# T
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));7 a& }' M5 [, k+ D9 Z% a6 D
  282.         }
    2 f4 H/ ^9 e2 f4 A& Y
  283.       }
    & {+ E4 e1 U4 e
  284.       unlink(".\\update.txt");) T; c+ T8 ]% e6 E: l, _
  285.       unlink(".\\update.tmp");! }. q/ n3 D; l. x# k7 \. ^( ~
  286.       Fclearf(".\\checkversion.dat");3 a' B: I  }0 w# \. P
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    * E( M* C/ j4 q7 G8 N+ |) L! ]
  288.       if(UpdateLocal.size())2 x) _# [- W) T6 e/ x
  289.       {
    ' d3 G, G  J3 c
  290.         UpdateLocal.clear();
    3 u2 s1 b+ p. L8 h3 k
  291.       }) @: {- e! W' z7 ?6 _
  292.       if(UpdateFile3.size())
    " s9 O& u5 W" m  p
  293.       {
    6 ]8 l9 W! A' \2 W5 M
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 d# C$ t2 M# O
  295.         {/ U3 E$ ~# i  C' Q5 y
  296.           file=(*p).second;
    6 u, s" T, j" h* m1 f
  297.           free(file);
    4 |3 d/ N3 v5 z" }, @& e; V
  298.         }
    + w  u( Y- z: f6 D0 ^
  299.         UpdateFile3.clear();
    : p4 H! I( C8 R
  300.         UpdateList3.clear();
    0 `9 R. g) O& n7 [  @; s( C
  301.       }
    1 m4 U$ f  B7 o
  302.       if(UpdateFile2.size())8 ^1 {: |+ S/ f' H4 C2 k$ [
  303.       {
    7 Q( {5 v$ ~. I8 V0 P- H
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( t7 {3 }' S1 [6 }
  305.         {
    7 F6 X5 Z1 O! M/ I$ C7 f2 r
  306.           file=(*p).second;
    : e3 v; t, `: C! i3 a% p
  307.           free(file);) @. r+ U, C/ K5 e# x% F- l! d
  308.         }( W& N5 A5 _$ [3 D* e& t
  309.         UpdateFile2.clear();
    # n! D4 H7 N. J
  310.         UpdateList2.clear();# L3 g, k; J# o: G/ [& ^5 n
  311.       }
    : h) v, F, g% X" x1 h7 Z: p
  312.       if(UpdateFile1.size())
    # d  |8 _, r& B: j! {# s
  313.       {  Z1 [5 y+ M4 I  v
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++); B9 \/ o, f/ m4 f  k
  315.         {" n5 |. F' ~' A- U) h! E& c
  316.           file=(*p).second;
    ( t8 Z: @6 w2 i
  317.           free(file);5 N8 X3 z- [3 t( O/ a9 K$ A! A7 s
  318.         }
    ! k7 M: ]: s  D6 q! K
  319.         UpdateFile1.clear();
    % X) X+ L  D/ S. T0 x: d0 v
  320.         UpdateList1.clear();! X0 _1 z9 _  G% k5 B) x
  321.       }
    ( I# C- ]2 Y. R
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));, h' i0 l' X4 e: }! v* l1 O2 i0 R
  323.     }6 ]) _4 `% W+ l
  324.   }
    3 Z5 [9 [( b. {5 X% x9 s$ T
  325.   return FALSE;3 F, S- l0 F! p
  326. }
    & }* C6 a' j- @6 D2 d) W% d' G
  327. + d0 |# O7 @9 U! A* B& f5 g
  328. void CRevAppApp::ClearAll(void)7 I5 `6 o3 C- _! n# }
  329. {
    6 z9 X% o8 m* K% S, A; {# o* B: m# i3 e& J
  330.   LPUPDATEFILE file;7 L' F! J$ \5 m
  331.   std::map<CString,LPUPDATEFILE>::iterator p;9 p; q# z$ ]5 r. P% y3 r0 t9 L

  332. : x" J9 S/ w+ S: \8 a1 [5 h
  333.   if(UpdateLocal.size())& @( t9 x+ s1 _$ H$ }% N) c
  334.   {
    * [2 E# L# I2 h6 v6 m
  335.     UpdateLocal.clear();7 W( J6 N# d$ j% j1 B
  336.   }. B+ ^3 D7 c. }% E# g
  337.   if(UpdateFile3.size()). E6 J: \, h" ~6 C* c
  338.   {- h* K5 H' @) _% j
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    0 ]/ l5 I" p0 l. r$ U( y
  340.     {
    - j  W: w! r  W. C
  341.       file=(*p).second;
    ! W" y) g, q7 H6 `# y; G- A
  342.       free(file);
    $ Z5 J" G% P3 \2 u8 z5 u
  343.     }: s: A8 f0 c( I4 K* @
  344.     UpdateFile3.clear();. {, N$ S& I. t/ L; `
  345.     UpdateList3.clear();
    : K" {0 o- L+ a/ S2 k" h; d; u
  346.   }
    / e. q  n% x& X! l: c/ u9 n5 P1 s( E
  347.   if(UpdateFile2.size())0 ]- Z' H4 W# g7 c- ?( r
  348.   {& \3 f# T. S2 G; |6 l0 V9 w& V6 g3 d
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), i' Q0 N, o0 d8 h# a9 h" H$ c" x% x
  350.     {
    % x  m9 x- w; W* ?3 {
  351.       file=(*p).second;9 F5 W1 H* P. i3 V
  352.       free(file);# X' x- Z- I  y- y) X: \& q
  353.     }
    % Q, \- v. l. _; E/ j2 O; a
  354.     UpdateFile2.clear();
    ( ~* s  u9 o1 I1 ^
  355.     UpdateList2.clear();5 q+ K& L( i3 L5 {8 f7 U9 k
  356.   }  p: T+ z. F7 [3 L' _
  357.   if(UpdateFile1.size())
      |& {  J5 b! T: r. {1 V: ?; |
  358.   {3 b0 ]7 y2 T  j- j: {+ r2 K
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) |+ [6 w- ^$ v# a# `/ r, z
  360.     {
    * T; \, \6 g3 Q# k1 @" z4 i
  361.       file=(*p).second;
    + `% M% ~; r' o4 \
  362.       free(file);
    & R' K0 \9 `( l1 L; s( k% C2 w9 m# @& l
  363.     }
    & H7 y  x5 Z' y: t( y3 a5 V
  364.     UpdateFile1.clear();
    3 ]6 z0 ~4 u* d1 E0 n" h4 D
  365.     UpdateList1.clear();0 w9 I3 _# j, Z2 z, X
  366.   }3 ^4 h3 x( Q3 E. w( o9 \$ D
  367. }  
    - C$ c) Z3 O$ C# h/ x( i8 E" D4 Y
  368.   3 E/ T0 M: p7 o6 u, S0 \# b
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    5 Q) B+ y* J/ r) x
  370. {
    ; I, K) `. N; A0 r' S, t1 `
  371.   int c;
    ; T# B* e$ P0 ^& t
  372.   LPUPDATEFILE file1,file2;
    5 t0 M" R4 ]) n7 e* d" H7 \3 ]
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;* I, @9 M" L8 A  J, Y5 r
  374.   std::list<CString>::iterator l;
    3 T0 Y' l5 t5 r4 ?
  375. 1 f6 w& t+ s' ~' r; x$ `
  376.   UpdateLocal.clear();+ b& E2 W1 m7 W  W$ e. c2 \/ q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    9 b1 c" F% \( [: p" E3 Q1 G
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);! B/ x, d) [+ U2 k# i
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);% \8 q) f9 r" C" J( V  Z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    4 S: r! p* a2 W
  381.   if(UpdateFile3.size())
    2 m0 ~  L, Q- ~3 x8 Q  z
  382.   {
    * ^! {7 Q! L- Z% C' {, M  V5 ~
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    . I( @  k  R/ x3 B
  384.     {
    & `# j0 v, J; Y: o/ s
  385.       file2=(LPUPDATEFILE)(*i).second;
    + F$ A) C8 F- u. \7 f% g
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      _7 Z, \: G* }5 z/ n8 z4 w
  387.       {
    " T9 P5 F  F; i. M3 m8 t
  388.         file1=(LPUPDATEFILE)(*p).second;! u2 u3 T+ H% z; D( Z0 D7 l
  389.         file1->vers=file2->vers;2 z, f' g' z8 M1 V
  390.       }
    - x: q; H: x$ ^4 p3 p( ?
  391.       else4 d2 k4 c) b) c6 @7 Z. Q+ d
  392.       {
    " c% H6 h4 i0 F0 l+ z
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ S4 ~( k0 o( Q. k' f7 E
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));0 w# ~9 n  d9 e# H4 Z- R
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));; [5 t3 r% P- w0 [+ C# j/ O/ K* V+ J* |2 C
  396.       }
    ) A: t% g0 z3 H3 B3 Z( ?4 v$ b
  397.     }# A( o5 r. [7 N, r
  398.   }
      {& h: n5 D. I0 p
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)6 v. y/ @3 g4 _' |4 f, Z) g
  400.   {
      ?' r) z1 z$ y5 z! o7 t
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    % W, O, @! d4 K8 f/ ]0 P
  402.     {: d0 e1 R$ M; r
  403.       file2=(LPUPDATEFILE)(*i).second;$ Z  j6 q, k( s& U
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()): j4 q+ e) E8 p; `4 C) k
  405.       {
    0 z2 z3 i: V& n$ @6 ]- h. D3 X
  406.         file1=(LPUPDATEFILE)(*p).second;
    5 p0 m+ v1 A/ {$ l5 Y0 ^* u9 O
  407.         if(file1->vers!=file2->vers)
    0 Z' J) M3 q( W  _* N# y' V! f
  408.         {
    5 t' Q" Z7 Z; Q- L7 X$ i, `
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 J. R8 Q9 H6 O5 Y9 ?* R
  410.           c++;7 M& J' _: T3 E
  411.         }+ E) u* M7 J4 y- u( D2 K
  412.       }! |0 A4 N; C# c( i+ T
  413.       else+ u2 U5 G/ L! Z( ~# o
  414.       {
    ' M0 }# V! T7 v5 m  J
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: ^! {+ I( A. q& u6 i4 C1 n
  416.         c++;
    1 q6 M0 D" g. u6 ~% B! J9 m
  417.       }  t7 |6 y; `, h6 J
  418.     }+ h4 X; `0 L4 f- B' C# C! O
  419.   }
    + \" w& h8 K0 a! b8 v! v% X! ^
  420.   unlink(".\\DownLoad\\update.txt");
    : C: ?/ b  m5 j2 i/ [* s5 ^
  421.   if(UpdateLocal.size()) return TRUE;
    / K' X7 a7 S1 V" L- \8 |
  422.   else                   return FALSE;
    . ]# Q5 l% |9 k- ]/ f
  423. }# U% U# j8 O& C! G! F8 K# Q
  424. 1 C8 w) s7 I! h6 `) J' L  x6 h7 P' t
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    " D1 x! k: {! ]2 x+ Z, X
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    & t# |; Z) _6 H% i, k
  427. $ J5 ^0 P7 ]9 Z

  428. 5 x& B% E, A' W' [+ H0 U( i

  429. " s3 W* }1 s  ~7 ~' i5 y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
      O7 B, G" [  h# H4 G  F+ T  ?( @  f
  431. {# n1 C6 Q. f/ ^5 E5 Q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    $ L+ A7 P5 K+ ~$ v
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' J, [7 B# x" h
  434.   {
    . ^  N+ @8 [! n  [. p" K% k
  435.     char szLanguage[50];: w' S1 Y) {$ t) x  ]9 l0 z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& G% L6 R& w7 P2 e1 z3 r
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 J& B; ]1 ]* g' ?5 g( y, e
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 x+ F  c$ P5 s% D5 L6 O
  439.     else                                   m_iLanguage=ENGLISH;. F4 D" `* a' x
  440.     char szRegister[100];
    8 q* q. c6 S1 \) F# b3 O
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; @8 e% I3 @8 s! L
  442.     strRegsName=szRegister;
    : u" @( {' _* }" q9 \, ?7 O
  443.     char szPatchURL[100];
    - Y" G* o& a8 ^) D" S0 i+ e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " q/ M/ p6 p* F: v9 X
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 q$ N& B1 l* S5 y; z1 `
  446.   }) m" y8 D$ P) I) a
  447.   else
      k& a# y' q* P& j& N* R
  448.   {6 l2 w0 f& j. o
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 h1 {0 P/ z' l# [
  450.     strRegsName=DEFAULT_REG_URL;; ~& ], ]9 F! y1 u& M: y0 B
  451.   }
    # b; q: y! {: c7 s
  452.   if(GetFileAttributes("hosts.ini")!=-1)/ F5 A& ^9 u2 |$ v& n9 U( V
  453.   {
    2 X  Y2 c) T. _) t
  454.     char szIP[50];
    & _( P2 G7 N$ X0 r( B) l. z: }) a1 ~
  455.     char szDIR[300];
    ; S' n0 E+ G  O! [% I" x1 ?7 H
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    % s4 h: @9 o0 w  P) t
  457.     {8 r% o" e) @! }* _- }* u3 `4 o% G" R- {
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");, ~8 T. f, p  J
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    6 A/ Q; n8 L, H! Y/ N* O6 L* s
  460.       strHostName=szIP;
    3 N& T0 q/ f: c, u# o, N/ `
  461.       strHostPath.Format("/%s",szDIR);# M) q% h# i- S' @/ w! r2 L3 J" D
  462.     }+ ]: @+ k- w; N6 o8 B5 D
  463.     else1 n" }; F! q- c3 V" d; Z
  464.     {6 d, g+ B0 s- l( G; d, L  S
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- g; }  Q3 p" s! L
  466.       {
    * @' R  Q4 D# e" V6 k# F. M4 r, Y3 U
  467.         char szLanguage[50];
    & _2 Y4 ^, u7 j2 H) q
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");7 d8 V% v+ k4 M. d6 Z7 `
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# H: m$ ~& P1 Y1 I, |
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" d2 Y. `+ a* J* i+ o$ |# `
  471.         else                                   m_iLanguage=ENGLISH;
    6 G7 ]' Q4 D7 w( C: i
  472.         char szRegister[100];& s% }( [5 x8 L
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 ^$ }6 E, n5 c5 \& c
  474.         strRegsName=szRegister;* N* s3 ~1 Y1 s' ?5 [* X! S" `* v
  475.         char szPatchURL[100];6 V  l# W8 R: ?# D- C! S: ~$ l. w& R
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");& T4 m. x: I) F" ^- m0 k$ g1 a
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 ^/ G& Z: g/ ~* H
  478.       }
    ; s5 ?0 U! T& b) b$ W, ^* \) ]
  479.       else
    / w4 S. O. }& E7 ~" s7 w: y
  480.       {  e' g8 f& h' u2 R( g
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: h! N* }( e0 Z. L
  482.         strRegsName=DEFAULT_REG_URL;
    - j& \) m4 E6 N5 Y
  483.       }& p7 @+ F4 p9 W# r( e+ e
  484.     }
    ) @/ o' b; t0 U1 [- k2 }3 r( o- z
  485.   }
    3 {" ?, X" [# e4 A  n0 b
  486.   return true;
    7 y7 C  U$ ~* O2 D
  487. }
    , y2 r( U: f4 f7 ?* m0 Z  P
  488. # r$ K  E8 ~* r1 S4 |
  489. #include ".\ZLib\unzip.h"
    " {  \0 Q; K; s
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 ?; h; E- @: u6 d* ^5 J0 \
  491. /////////////////////////////////////////////////////////////////////////////8 N( H0 _2 [* N2 V
  492. // CRevAppApp initialization$ L3 ~# z7 C8 w; C! s2 o$ K  u5 e0 D
  493.   L' H3 ]+ {. k4 }* |# k  \
  494. BOOL CRevAppApp::InitInstance()8 t$ [% `! j, D% o) f3 u
  495. {
    + s) x4 O; x; c' @9 m; [$ T
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    & N: g+ j& x4 P" a: Y

  497. 8 _2 R0 Q; n) K) N3 ?" X# |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);3 m' W3 M- ~- ?: H0 K+ ]6 j
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))$ U5 j' O" g1 d# g- c, w) }' W
  500.   {
    7 l" {' {( z) I3 G6 Y6 A5 f
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    : E* E1 M/ \0 d9 V+ r. u5 w
  502.     GetPathFromFullPath(szPathTarget,szPathSource);  |3 o6 Q6 k1 Z  V' v
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))( a; l$ f( t6 l/ j
  504.     {6 g! }4 d  D9 i) w7 _, _. r! h: \
  505.       strcpy(szPath,szPathTarget);
    % Q5 o8 {. X$ y! D
  506.       SetCurrentDirectory(szPath);) }# t9 R8 P, v) @$ G% A
  507.     }
    + d2 r+ }$ N: @4 h; O
  508.   }
    - Q- c8 B# k( g! ]1 g
  509. #ifdef _DEBUG. v3 y  b4 C" z1 ^  V
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) }( h; |- j& o/ \5 z# ^6 X& {$ g
  511. #else- d! o- o/ ~! E/ ~2 Z1 ?
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- V. \7 W8 q9 G* ?2 `9 B$ o
  513. #endif
    ( a* D/ v+ W; y( s
  514.   {2 h2 j5 ^2 H5 @3 j( {( l4 T
  515.     char tempFileName[MAX_PATH];
    6 V% R1 ]9 F: O
  516.     strcpy(tempFileName,szPathSource);: \) L( W5 e, p
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( D! p3 G$ h8 h5 E+ |/ N" k
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    5 n* j0 ^1 i$ o! P
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    5 z+ C7 G: {0 ^+ f9 Y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ y8 p; Z' R2 j) S, C
  521.     return TRUE;' y' E4 B2 C2 {4 L7 q5 u& {
  522.   }( g$ y( z6 g+ [% ~( |: c4 T
  523.   // Nuke 0118: Delete run.exe: e; _$ Z1 K9 I! A
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );7 {0 x/ S: F5 N3 P) s& A
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
      [- D+ }/ A4 ~" ?
  526.   if(!ReadCfgFile("Config.ini"))& l6 T( ~+ D, Q0 L9 C
  527.   {! S7 n( b# V! s2 \9 V
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    0 {$ ~( M$ O1 i3 S! w$ j
  529.     return TRUE;
    6 W* n' I) m/ @; e. L! ?5 i$ X
  530.   }8 b: ?! V$ `6 s+ f
  531.   HANDLE mutex;
    ) y. R4 C& y. h3 [) M. f! V/ x
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 F4 h7 H: |3 L" D
  533.   {& o3 f' ?$ e2 L2 v0 V2 ?2 q
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)& \" e' I5 \0 j. N
  535.     {
    5 N) z6 h$ L' n9 \3 o  d4 f3 T& ?
  536.       CloseHandle(mutex);9 `8 Z% ^2 Y% G; l0 s! @
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * \3 T# H# [* N( t- c7 U' i0 H; c8 A5 p
  538.       return TRUE;9 k* q7 P7 ^5 n. v5 H, M/ F: Y
  539.     }
    ' r3 ^+ e, b; @% T2 v+ j- S
  540.   }  
    1 ]) I. A+ W( z* I3 v) x. E
  541.   CloseHandle(mutex);  Y# r* _" [1 j/ v
  542. ) R, t4 A* c; R' m
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    " i$ Z2 G. i+ v* F, z

  544. & ~" o# t9 x+ ^  k1 P8 n
  545.         AfxEnableControlContainer();
    ; h' s: U* r% |1 b5 O6 H) y

  546.   k& Y+ Q- _  K9 y- ]  n8 H
  547.   bCanUpdate=FALSE;
    ( y: k( e. }1 m
  548.   dwStartUpSteps=1;
    * X0 T' r3 a8 v$ n' [
  549.   dwProgramState=AP_NOTHING;3 ^5 S6 |3 g% |; `# J8 r  U& F( S3 Z

  550. 8 M: j8 C4 M1 B' h  D
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    7 c) p; n( L2 C: w; f
  552. $ c: y( M5 R, b6 |6 F8 E& ^
  553.         // Standard initialization) Y) R* {4 }2 E1 V$ M
  554.         // If you are not using these features and wish to reduce the size3 P3 y& P- S8 z; C9 ~/ K' ]0 J
  555.         //  of your final executable, you should remove from the following6 ?5 S: g+ C- a9 L* z
  556.         //  the specific initialization routines you do not need.* N! b" Z2 a  q  |' C
  557. " B2 R0 n4 T% a* p- \
  558. #ifdef _AFXDLL
    2 U4 |6 ]1 {7 _8 n& [: X
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ! I. ?1 R9 F4 ]6 {. ]
  560. #else
      }9 W% Q/ X# u
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    1 ~; R0 j6 z' l* t; |9 o/ }
  562. #endif) A- S+ I, f" d( [# f
  563.   l8 p" s% }$ h+ p/ L
  564.   dlg=new CRevAppDlg;/ W# z# k  L4 |5 A0 B
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    8 S) V5 g7 d3 i, E1 ^
  566.   dlg->ShowWindow(SW_SHOWNORMAL);  L% |- ^5 G2 {& j* ]4 r- K/ F
  567.   m_pMainWnd=dlg;2 ~/ T0 g  U; S0 b, z: Z
  568. " @& e3 G" R. T7 i
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);! [1 S, f, z7 q/ T$ M- Y5 o

  570. 0 w$ m2 i7 L. U3 D- P/ X
  571. //  GdiplusStartupInput gdiplusStartupInput;
    : Y3 a. M3 C* M3 S
  572. //  ULONG_PTR gdiplusToken;
      Z1 z% ~/ L" J0 W* G+ v" q0 ~
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);8 Y  ?# o2 `: h. y. o
  574. 0 {6 j3 z) ^& I& G$ n& v- K
  575. //        CRevAppDlg dlg;# o5 \6 C3 H8 G- i% k: a, D0 n/ z
  576. //        int nResponse = dlg.DoModal();
    / ]2 d% h) m/ y
  577. //        if (nResponse == IDOK)  g1 s9 t* T  E) N' Z3 |! e* E8 ]5 P
  578. //        {
    2 X1 V: A: A8 U6 |
  579. //                // TODO: Place code here to handle when the dialog is
    6 V( `& j/ p+ M& N; s/ \& u
  580. //                //  dismissed with OK
    9 R( c6 W6 b0 _( _/ ~. C
  581. //        }  N. z( P% n4 t, B
  582. //        else if (nResponse == IDCANCEL)
    1 b, y' s- j- C5 ?/ j
  583. //        {( H6 O/ P7 u/ {4 p' R' E8 P
  584. //                // TODO: Place code here to handle when the dialog is; u. J+ x# _3 G7 r
  585. //                //  dismissed with Cancel& L3 j8 M% V% [3 k0 }% ?2 ]
  586. //        }
    & ]8 ^/ x) j: ~6 ]  g& x

  587. 7 q. n1 R/ W5 D
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    % {9 t" }, ?7 h; V( b+ _
  589.         //  application, rather than start the application's message pump.' J/ l. A5 r/ d* U* d
  590.         return TRUE;8 d( E' t# Z! S# Z
  591. }1 m: B0 @! m% R
  592. & m7 T  e5 L2 e0 B& ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    3 U( f% e* p# R* E  d& }/ ?
  594. {3 h0 o5 k" Q& m1 [% }; L
  595.   int i;& k8 @2 U% _3 H5 ~3 `+ Y
  596.   char *szRet;
    - z9 |: o! e3 e/ m8 ]) r4 Y

  597. + {" S: e( m0 w$ c
  598.   if(pSource) { itoken=0; sztoken=pSource; }, c$ F" d/ b( _. V9 R
  599.   if(sztoken)0 w. `, K- Y  S) @) ^) [1 V+ r
  600.   {
    ! U1 c" U2 H7 u* c
  601.     szRet=&sztoken[itoken];
    " U7 L- O7 ~7 G. O. s# Z
  602.     while(sztoken[itoken])( O; E  P) v0 M. l- B1 z. q& n
  603.     {
    / q/ O, R  C. V/ a* z
  604.       for(i=0;i<(int)strlen(token);i++)
    2 w) L' }- Z! I, p$ n) J6 A
  605.       {
    ' x5 m; @2 }9 @: M% j- [: j, x
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])) O. z) V2 c9 ?( F& F
  607.         {
    3 `$ [1 e! P" s# `
  608.           sztoken[itoken++]=0;+ {4 D4 p+ d. \0 c1 z! g
  609.           sztoken[itoken++]=0;+ K3 f9 w7 ~4 x7 l  b* W
  610.           return szRet;
    % Y! D% i) ]; l% [3 }# |& _/ F
  611.         }
    ) J$ J. y6 A) m! q
  612.       }
    9 c1 i4 _. u- W7 s" N: Q- p
  613.       itoken++;
      G3 J. `. A4 H' r# B# V; E
  614.     }
    & U8 z4 |' O) J, ?3 z- a& O' F
  615.   }
    : ~( q1 m: e) o! s
  616.   return NULL;' V- o* g& V7 @5 z# U# B. d
  617. }/ q) X8 J9 I3 Z2 H9 e
  618. 5 c6 S/ P6 p) p. B
  619. void ProcessProc(long Total,long Current)5 o+ e1 |# Q1 Q
  620. {! S6 N- i) A3 A
  621.         MSG msg;1 _8 K. B& }# d. `# b
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    2 @/ X( E/ Q& J$ D' i) {( X& v; q9 r
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));* G: x7 H8 i+ z, {7 ~7 M5 i" q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    " r7 p& o7 W% z' N8 K
  625.         {$ z$ T- \( M% E) j0 z: n
  626.                 if(!GetMessage(&msg,NULL,0,0))* Z0 w; Q* J$ i/ w1 {3 E% ]
  627.                 {
    # S& l3 i" R) R. Q5 D8 B
  628.                         return;: H; ]& E# p2 E) s7 H; w1 Y
  629.                 }
    6 o3 k& o, |' S4 U, f
  630.                 TranslateMessage(&msg);
    / B& E0 O& ?. e4 C1 Q6 x2 t
  631.                 DispatchMessage(&msg);8 @" L  p% j0 `3 u0 U
  632.         }        , I* @( F  s3 h! w
  633. }  P3 i) k. U0 d5 _$ s: @
  634. * i" I( o5 z5 C7 J
  635. BOOL bFirstChar=TRUE;
    6 r& @$ h# K  s1 {4 f2 K$ L
  636. " C' a. j8 P9 c" @. E  c" D
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    9 w: W; R. A  z% w2 g. d
  638. {; N2 ^2 S3 l* l% l. u  m
  639.         // TODO: Add your specialized code here and/or call the base class
    5 R/ W( [/ Z0 M5 Y. _) M2 \
  640.   switch(dwProgramState)
    5 D  w) s+ @! j
  641.   {2 c1 C& \! B) D
  642.   case AP_NOTHING:
    3 d% s/ ~$ B/ @, ]# f6 D
  643.     switch(dwStartUpSteps)/ ^! W/ P7 Y7 v% U9 c
  644.     {
    - U7 u, m- t2 M- e
  645.     case 1:' W. K0 Z) g3 u4 R* e3 B7 n
  646.       {) j$ B3 I* j; F9 ]1 a4 z) X
  647.         int i;8 G+ C7 ?3 T; J$ k
  648.         CDC *pCDC=dlg->GetDC();! \8 T) ^- E4 p/ v# V. c6 l& x" X
  649.         HDC hdcwnd=pCDC->m_hDC;
    & K) l; b  G. z" ~* E  }
  650. //        Graphics graphics(hdcwnd);
    " N5 g: C9 A; ^
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");& b, M6 |) R+ d: t( _' i  W* \
  652. //        INT iWidth=bitmap.GetWidth();. M2 h+ e+ B& A2 y* r" E) D
  653. //        INT iHeight=bitmap.GetHeight();
    , B4 _0 {* H' u" d. ~. Q
  654. //        Color color,colorTemp;' P, W: h9 v1 \! _* v6 L( C  \( K
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
      a; S- _2 W4 {& Y3 P: O
  656. //        {
    1 K6 @& S0 r. i
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++); @& o; o# c" Q
  658. //          {
    8 m  z! k% }7 B# `0 m" |
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    6 [) c# G% v0 Y9 A& v2 }
  660. //            colorTemp.SetValue(color.MakeARGB(
    " ~+ ?' ^& D7 {9 v' q- q$ c
  661. //              (BYTE)(255*iColumn/iWidth),1 o6 [) M, ~. R8 i& a: n7 N2 D
  662. //              color.GetRed(),
    + {  D- H. I. t$ v4 h# i1 m
  663. //              color.GetGreen(),+ m& ~" ^& u" w, d! R5 O) C
  664. //              color.GetBlue()));9 y& h9 A' x! A, [4 }1 U3 E2 _
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    % }+ K$ F$ K8 l+ c5 C
  666. //          }
    ! Y% `/ A( G- w/ @( t' ]) M
  667. //        }' |. m) ^: \8 a
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    1 u$ x; @6 @! Z* q& ?' E& D$ s+ z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: D9 E6 W! C. ^! t4 _' |
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    8 X, ?  y5 }6 F
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* K, _/ D0 F9 k1 w& d' a
  672.         for(i=0;i<240;i+=8)
    " t( W# K3 \5 V% x# i
  673.         {
    2 N9 d8 P/ f/ @% Z: G
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( a5 [! h* {0 O3 n( ]- B
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" V9 w- p3 J6 p/ f: ^9 A# }: I
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; I1 p% M# [6 G& p; h% g0 K- f6 k
  677.           Sleep(33);
    9 l  O* x( }) W( p+ }" U  x
  678.         }  |: B0 D- X" x5 z' O. Y5 k3 a
  679.         Sleep(1000);4 k* i! o) G/ s' V4 p% f
  680.         for(i=240;i>0;i-=8)
    ( ?% I, Y! {6 b/ |0 w' H
  681.         {# T5 V8 O+ q3 l' D0 z) ?
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 n6 W& X; D! P% b" ^$ }) V
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * _  A4 G/ t4 m
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " n. h% X0 L5 g# z+ Q1 H3 O
  685.           Sleep(33);3 t) K, o; e) P8 ~  x0 g/ y6 n$ W
  686.         }
    3 K. w4 |" H% N
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 t2 E4 v1 P: T4 ^
  688.         dlg->ReleaseDC(pCDC);
    9 i, Q' R) t1 Z: @
  689.         DeleteDC(hdctar);
    * A' d; i' {# A. U9 Y8 m+ F: i
  690.         DeleteDC(hdcsrc);% m' D' j  s6 ^1 |$ ]6 r( B
  691.         DeleteDC(hdcorg);. k, ~% F$ P% Z+ t6 _
  692.       }
    2 K. A- V' @3 \( J" z' b6 H4 i" |& T
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    - B9 `& @% r( D- \$ V1 D
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ( ]; l& ?7 |( W9 |+ M" X+ t
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    # I* P7 v9 |9 p# p
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    0 N4 t0 Z. T% X
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      S' R" ]. V  b
  698.       if(!Dn.Connected()). G9 G7 ?) L3 m. A
  699.       {
    " i! p: U: {# g, A& {/ L
  700.         dwTotalFiles=1;% `2 Z6 K9 T3 b/ c0 s
  701.         dwDownLoaded=0;; u3 e/ v. h2 e/ a
  702.         bSilentStep=TRUE;
    9 R% I' K' {3 Z/ N
  703.         bCompressed=FALSE;
    ! V% b" I. [3 p9 @: N. K) {2 a7 ~
  704.         strExtLocal.Empty();1 ?' ]9 I4 X) F
  705.         strFullName="readme.txt";
    $ ~8 F, m* D9 `# N% s% Y. Z% o: K
  706.         dwProgramState=AP_CONNECT;' K2 V* D" H: [- G$ T0 _2 n$ S
  707.       }! P. s- t- r9 J: D7 e
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    + {1 Q; [7 T5 J9 P& B) p' r* w) {" Z
  709.       dwStartUpSteps=2;& W0 N% X6 m+ V5 X
  710.       break;
    - t# A! z' N* U/ c
  711.     case 2:
    ( Y9 B% [" l# Q1 w! k9 i8 P' D, f
  712.       {; g$ v8 f8 ~- x4 U# B9 A& l9 v
  713.         int iEOF;
    ' s1 s) @+ I' y2 [/ b8 ~' h4 ]9 ^
  714.         FILE *fp;
    , `1 c* Z3 ]* }7 H; `5 P9 e
  715.         char szString[512];$ K( x' X5 Y0 Z4 L7 L9 ^) I
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");5 |( R: B% H* r7 @; a# `
  717.         if(fp)
    0 m9 ?* q9 b1 ?! m9 j2 N$ l$ d, e
  718.         {
    % Y8 _! ?( h& D9 n5 D8 _4 ]9 \  I
  719.           do4 N5 P- P2 z' x! E4 x2 W/ f
  720.           {& g- Z, D2 u5 b$ \+ V1 B& a4 }. ]/ A
  721.             iEOF=fscanf(fp,"%s",szString);
    ! z  w: K- z" l) x5 y
  722.             if(strlen(szString))
    + p9 y7 _& J" `" q$ i) \: z4 b
  723.             {3 F% E7 w7 W. V% r6 P% i5 k
  724.               if(bFirstChar)  v+ W' w0 p+ L# y* S
  725.               {% w! j8 F  e% i8 h
  726.                 bFirstChar=FALSE;0 f; F6 x1 o* I! r& E4 \* h
  727.                 bConnectIsBig5=FALSE;
    ; V4 s3 _& n1 n3 ~2 |  o1 Y1 H
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    % H: C" q/ s. i( G
  729.               }% ?0 f, I/ \2 H- b: U
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . F! o: Z. x, I: A5 w
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));; z4 Z. I) |& d- @8 z
  732.               dlg->m_ListText.AddString(szString);/ C  }) F; r7 q( {0 f9 z4 h
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , s4 O3 B9 H$ D: g
  734.               *szString=0;
    2 d  i4 K+ x' V/ [8 S5 v
  735.             }  J0 N/ N1 ~6 ]8 E" ?9 i1 S
  736.           } while(iEOF!=EOF);, P4 }& ~4 ~/ [" X% N1 p
  737.           fclose(fp);
    6 z" [. B' c2 k8 \8 z+ Q) E
  738.           unlink(".\\DownLoad\\readme.txt");; O. g" x5 U  Q
  739.           dwStartUpSteps=3;
    ' S+ U1 t3 `" D$ e3 \
  740.         }4 \' o% N6 ~& B6 c. s# B5 a
  741.       }
    # c6 z$ F: S( ^+ D
  742.       break;
      A9 ^+ N8 C  R
  743.     case 3:$ M7 N' }/ d# b  B+ m& |
  744.       if(!Dn.Connected())6 [& \, A4 p* j4 J) |, I, k3 f& u7 O
  745.       {, e: p6 z" ~- I2 [+ Q' ]
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    7 }3 x: T% O- @! n& t
  747.         dwTotalFiles=1;5 |/ \9 c1 {* t& Q$ l2 l- O" M
  748.         dwDownLoaded=0;
    ' t: |) r) Y1 @! y6 g; ?6 C+ \
  749.         bSilentStep=TRUE;+ O! ^: ^9 \  f
  750.         bCompressed=FALSE;" s$ _3 [, T' x8 ?! G; \% u( Z
  751.         strExtLocal.Empty();
    ; A& F# T- u3 `! N) k* p4 \
  752.         strFullName="checkversion.txt";
    * _5 u+ G- i4 B
  753.         dwProgramState=AP_CONNECT;- {/ D! \5 K% |( _
  754.       }5 h, o6 B1 Y+ m* w( L0 u% g) j* `$ |/ n
  755.       dwStartUpSteps=4;
    $ i( E$ f4 f$ R/ _$ i
  756.       break;
    : Y# o; M) _0 H0 V
  757.     case 4:- D" I$ Q, `7 t& v
  758.       {
    : [+ N, L, s( C* R  c
  759.         FILE *fp;
    , V% R' Z6 {  o% {! w; y5 m" _& U
  760.         char szString1[128];
    / x4 W2 ~# H: l9 v
  761.         char szString2[128];
    3 g: \, R% o  C& w4 u  V2 R
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");8 g8 }3 r  u" S2 R' o% S) y- l7 F
  763.         if(fp)/ U! x' N& I) _9 p8 |2 b* p
  764.         {* B4 L' ~, i# W% Z- U  l
  765.           fscanf(fp,"%s",szString1);9 _7 \$ X$ k5 e
  766.           fclose(fp);
      B7 F8 s5 t1 C7 n3 g( w
  767.           fCheckVersion=atof(szString1);
    % j* W/ G( E. n( M; N. {( X
  768.           fp=fopen(".\\checkversion.dat","r");9 v6 c* l; D7 b! M5 ]) h/ Y, h* @
  769.           if(fp)$ ]$ }: g$ X! h7 O0 Z+ j
  770.           {
    1 x1 j$ J" L, K
  771.             fscanf(fp,"%s",szString2);
    % z9 w0 i) }* t8 n& g4 J/ }
  772.             fclose(fp);8 M" B* k7 Z# [# y9 a  ]
  773.             if(atof(szString1)!=atof(szString2))
    7 }5 z1 h" V8 w: Y5 K
  774.             {
    / U' E  @& Z) [" W
  775.               if(!Dn.Connected()). Z5 v$ y/ n# z* G3 E. B
  776.               {
    " B6 d0 J" r" t3 e& ~4 {
  777.                 bFirstUpdate=TRUE;
    4 d% g# g0 i  U
  778.                 dwTotalFiles=1;7 ]4 O: W- r' y3 y
  779.                 dwDownLoaded=0;
    ) E+ c1 Q; Q2 a  i8 [6 F
  780.                 bSilentStep=FALSE;
    ' _$ {) x% {  r$ g1 t2 Z& s# S* M
  781.                 bCompressed=TRUE;; i( J7 U# u: c( t" V) J4 P, A
  782.                 strExtLocal=".\\DownLoad\";+ t3 W. F- y: h8 M
  783.                 strFullName="update.txt";+ C8 X- f; s5 J( a. l6 y
  784.                 dwProgramState=AP_CONNECT;
    $ s4 V7 p" b1 a
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 C  x; I5 f* Q0 x3 T! z3 I0 R
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " |" B8 T+ |+ N' b
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");) O5 [* o( U' W4 a/ ^5 ^

  788. ! Y3 c0 _4 I& N3 S  k
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# n1 q% h# E4 ^* D5 Q( n1 H
  790.                 unlink(".\\DownLoad\\checkversion.txt");" m3 I2 M0 t) m2 F6 X8 l4 s9 a- P/ L
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1). Z9 ?6 V; \6 S, b$ p
  792.                 {
    ! T, }% a0 L+ t* b) X
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");/ U, i. ^; C+ i5 w6 D
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");. y- Q' H; u( {! h2 ^; Q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");2 r: y; w# ]1 v5 K
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 {6 F( Q) y5 P( o& y$ L: d  ]9 I0 U3 z
  797. $ `  Z3 K3 Q; ~
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & S  t: ~2 p' \' l
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ e4 s9 S, `+ u3 b8 i/ [1 Y; h- l
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    . d  G/ o1 ^, E  K! A
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 M# ?! u. b: p
  802.                 }. V4 k2 N- I: X6 a, H
  803.                 dwStartUpSteps=5;
    1 e# }7 i" K* |9 m
  804.               }
    4 v6 K2 I" [/ \1 q: ]! f$ r
  805.             }
    ; T* C7 `0 J2 R, o
  806.             else; @" D9 z4 m" o$ K! `/ O6 q2 W
  807.             {, a' Z0 i  w: m! w5 G/ ^3 ~4 s( n
  808.               unlink(".\\DownLoad\\checkversion.txt");8 v1 K% y- [9 g/ T  T" K  E, `
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    4 q: X4 ~% u+ r# t" a' [
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + t9 m2 M3 J* L% A& u- ]
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");6 n' S" C0 D1 o5 U, ^

  812. 2 e$ T5 I, Z$ M7 @# z& [, I6 E" F
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # \7 @6 d4 t( c* g
  814.               dwStartUpSteps=99;
    3 Q3 L/ ~' K5 J8 B& M
  815.               bFinishUpdated=TRUE;
    ; Y) S: @, E$ C* ]% |/ L& C
  816.               bCanUpdate=TRUE;6 W& R  t: q+ U$ E
  817.             }
    ' q( Z% R* d, S0 A/ \
  818.           }4 H# {7 p) p* H! b5 Z' t
  819.           else& G- S9 w2 u* e5 C
  820.           {: w) e* k4 ~& f0 p4 H/ D
  821.             if(!Dn.Connected())! k) H2 t7 N7 ?( ^/ K" v- _
  822.             {' [' Y4 h" W, f8 a6 Y9 g
  823.               bFirstUpdate=TRUE;5 D2 H# @) |+ M/ w
  824.               dwTotalFiles=1;, p. P. @* v5 v, c7 Z# l# J
  825.               dwDownLoaded=0;% a2 T  B7 U5 [, `0 R" T6 p
  826.               bSilentStep=FALSE;
    + I/ u/ u" h/ j& q- h8 F1 y
  827.               bCompressed=TRUE;
    / y$ p0 H* g# y0 d- f% f
  828.               strExtLocal=".\\DownLoad\";) a( [& z% T2 d! y
  829.               strFullName="update.txt";) R, ?# s( e. F
  830.               dwProgramState=AP_CONNECT;
    1 o; O$ K& Z5 j# X, E1 F( K
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( w) N: m( y2 l# K- g: G& L: I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 \0 I% s/ C" u, g3 h5 l; J
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % g3 O: i; y4 w, Y
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' {; \$ ~: O* F
  835.               unlink(".\\DownLoad\\checkversion.txt");! R+ l" E; C. {# A! o4 W  D3 Q
  836.               if(GetFileAttributes("Wsa.zip" )!=-1). s* z2 X! o8 V
  837.               {# _" o+ Y; p  Y: Z
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ; g$ ]8 c$ u3 s) v8 S
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    , ^) h( A8 G! ^) d  x$ }1 r, L
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");7 g2 M7 u  U$ t5 ~5 _6 {
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ n( ^1 H# Z' I& V' n
  842.                 ' z2 @. a, Q3 E; ]6 u9 n
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) k& r6 ?. R" D) X6 t3 J
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");( y/ t0 p9 X* p, l) a: s
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 B) K; l% q% u% ]' G6 U: p
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % F% s2 |. W. k* ?
  847.               }
    - @7 \# u2 N% Q* ?
  848.               dwStartUpSteps=5;
    ( o8 G+ j( O, M$ L, c, G
  849.             }
    : X3 J4 ]) U7 @, o' Z8 \$ {  B- \
  850.           }
    3 ~2 k) _4 }1 f; l, Y8 Q
  851.         }% b: ?2 b7 x$ b- H# a* v+ ^
  852.         else# }" U3 q! S$ ~$ o' p
  853.         {  W3 B9 W3 f  @) b
  854.           dwStartUpSteps=3;
    2 _5 _/ v& j; H3 A
  855.         }
    + q# \5 B4 ^! P+ g# T& M, }
  856.       }2 u* u4 d) r8 u$ H4 C; o- q
  857.       break;
    ) m- `; K1 q( e+ y; t5 l6 p( \! U
  858.     case 5:
    ' X+ K; C% i2 z. R% A
  859.       {  [8 K7 o5 W: g4 t7 O
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)' A, O2 n$ ^1 m5 K2 |
  861.         {7 l$ w) i0 }0 y% S& p3 W# |
  862.           int opt_overwrite=1;
    ! J6 R+ M8 c9 i# g$ X2 l; J
  863.           int opt_do_extract_withoutpath=0;$ C+ F1 {7 F% P% I- X4 ?
  864.           unzFile uf=NULL;
    ' i" o" `2 H4 W& _1 [& X8 P* O

  865. $ f/ N9 z# k% V
  866.           uf=unzOpen("Wsa.zip");
    1 W! I# X0 W. r4 P% H
  867.           if(uf)
    * I1 s8 J5 u, f& g+ n- C
  868.           {- F/ M3 m7 j' k4 H4 ?7 c& z
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    % J; `: c/ I0 I; N* a
  870.             unzClose(uf);
    ! ~& d) B& Z* S1 U/ _& S
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ; }6 o% D5 }. F
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    7 r' [: S& [) @! N5 Y9 c' h
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ; w# c2 \" x- V1 V" ^' Q  ~: d
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 D) \8 O, @: B1 V( p
  875.           }. i% I, ^- L) C" ?) P
  876.           DeleteFile("Wsa.zip" );+ X% M; t3 n9 `0 r
  877.         }' y( m8 \: T! ^7 k7 W% C

  878. - n  H$ s# W( C( l  X9 H
  879.         if(CheckLocalVersion())2 L3 B" t- ~4 w% d3 Z' d+ Z
  880.         {
      i) k$ M0 F, U8 k1 i
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");# X& k+ M8 }/ E) p* {/ R" U7 i
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    9 h) L& T* t- F
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");5 {4 |8 H8 u, ^
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. Q' C' a3 A7 g( Y. Y2 O2 r( L
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);% K& e6 {( ?& h* }+ D& |; S5 _3 V
  886.           dwStartUpSteps=99;
    " L& K% H$ \, y" q
  887.         }7 _8 Z! J& W! y9 x5 T" A
  888.         else) a5 t% b9 S) y8 B& G
  889.         {
    1 B2 G2 ?0 }; e1 y) q& n
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");& o- G4 e; E7 |1 Q4 ]3 ~
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");% j9 U* K* A4 L- @
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    . _2 `1 L! I6 e# T

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

  a$ Q4 q; n! b  q, Y; h
( D9 W# h+ C1 M

評分

參與人數 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客服返回頂部