找回密碼
 立即注册

CSUpdate.exe源代码

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

6 H. U$ C( _7 t9 J# H6 D
  1. / RevApp.cpp : Defines the class behaviors for the application.& E$ |( y1 `, S
  2. //- I# x* f- V: P- d( E

  3. 4 v! o  U, p, q7 V8 `; M( x7 Z3 Y
  4. #include "stdafx.h"
    / d, j1 [, i: f) s% R) }2 D3 a
  5. , r  [+ N) C( f. R7 N& ]
  6. //#define UNICODE1 C  V2 w  U4 S, F
  7. //#include <gdiplus.h>& w  Z: |$ r+ M7 l0 K
  8. //using namespace Gdiplus;2 V0 C- f6 a0 r) I4 X
  9. 6 \6 N6 n6 E) L6 A
  10. #include "RevApp.h"
    2 ]1 @. Z) H5 G: [6 {+ M# A
  11. #include "RevAppDlg.h"7 @! a4 ^2 S  d) L
  12. # E: X: ?! x/ s
  13. #pragma warning(disable:4786)7 }9 Q) {! ]8 T' @
  14. #include <map>
    ( M* t. f) u! ~' `' ^  S# W
  15. #include <list>
    9 |) p' l. F) o% ]
  16. #include <direct.h>/ S: M& L3 ]/ H9 m* M
  17. 0 n8 t9 b' d4 n7 V5 \0 Q! k
  18. #ifdef _DEBUG0 m9 d. A( J* n- ~" D
  19. #define new DEBUG_NEW
    % S" x5 I% d) V6 L
  20. #undef THIS_FILE
    ! H: S- L: i9 A1 K# z
  21. static char THIS_FILE[] = __FILE__;3 {" _2 |5 V( q6 u1 u- B
  22. #endif- g; ?8 @' I* u) Z
  23. #include "SkinResDef.h"
    - e- e% L9 F" H
  24. #include "ChangeBG.h"
    ' I! i: C7 L* C5 E1 S$ d% S  C: `
  25. #include "AFXINET.H"
    # a6 J* B, U, ~* j% J. o' k. q& _

  26. 8 B; s: V" K# v2 G# C
  27. #define TRADITIONAL_CHINESE 0& D" a  w7 f5 O8 R6 U& p) U" v0 U
  28. #define SIMPLIFY_CHINESE 1  t: R6 N# y4 W1 E; l
  29. #define ENGLISH 2  X! D. {7 g/ S3 Q, o
  30. int m_iLanguage = ENGLISH;
    / L$ I/ ], N: k
  31. /////////////////////////////////////////////////////////////////////////////0 K0 f, {6 ?( p: v7 ^8 e0 @( _/ O
  32. // CRevAppApp! T, X# {) H' q

  33. ; F3 J/ i6 }2 E6 X& c& m* S
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)( p9 \7 W, Q. b; {4 T2 _
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    % q) h) A9 @. T
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.: D* G) `; F* t$ @/ @
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    6 V6 \! P8 M# Y- f- [
  38.         //}}AFX_MSG  n6 n  B2 M3 S/ A3 j
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    : t7 [# X0 e; b' D! ]
  40. END_MESSAGE_MAP()0 F  J5 e" J* c3 G- ^) _9 P. T

  41. ! j3 j- @: W8 B- k& i) p( l
  42. /////////////////////////////////////////////////////////////////////////////
    4 A  W0 x7 Y7 o, t' @* N  B3 z
  43. // CRevAppApp construction% n- n5 ^/ Q! u% J

  44. 7 f) F' M3 S) L- T, N: {! S' ]
  45. CRevAppApp::CRevAppApp()$ L5 w* N: o& R: |6 f* Y% L
  46. {
    ) [9 Y3 B6 S! ~* @
  47.         // TODO: add construction code here,/ b, o- p" s+ L! z" C( t2 ?
  48.         // Place all significant initialization in InitInstance2 w8 k' Q: J" t$ D; T
  49.   bDisplayIsBig5=FALSE;
    2 U  `8 M( ~$ _; T( n6 @3 R
  50.   bRestartUpdater=FALSE;/ z3 m6 i0 |% k. u2 e( _$ {% a
  51.   bFinishUpdated=FALSE;
    . S( t/ k/ i1 ?- X0 y& K
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;) D- r& Z! S8 R" A2 U# _4 g
  53.   InitChangeDataBig52GBKS();$ n# U" ^( q! ~; w2 B7 ^
  54.   InitChangeDataGBKS2Big5();
    8 m, I$ F5 J! E" w1 ~
  55.         //
    ' f& a- j. q! G/ ^& U  m4 [& |3 ?
  56.         bClickRunExe = FALSE;! G0 D7 K& i: o# M& W
  57.         //
    * p2 f& o8 ~( V' g; K! B
  58. }
    7 T+ a1 Q4 M, E# ~
  59. & U* C& ?% P3 |$ V+ \. i9 a$ _
  60. CRevAppApp::~CRevAppApp()
    0 E9 d$ E# P& F) B  w
  61. {
    # V3 C0 ~* {- n1 M7 A
  62.         // TODO: add construction code here,
    9 f- c$ j3 t5 w! o+ z7 m6 r
  63.         // Place all significant initialization in InitInstance
    ! ^1 B( M0 D1 B* x
  64.   EndChangeData();( f) O, \2 a: [" g2 w1 |
  65. }
    + _: J& Q2 C9 n- P; ^; y6 y

  66. # K# X* a! I' `5 f
  67. /////////////////////////////////////////////////////////////////////////////
    # E( n  U, \) n9 _5 L: f
  68. // The one and only CRevAppApp object4 ~9 b* s8 t: q0 i2 z
  69. & G; u4 e1 E! T# }. C/ \
  70. CRevAppApp theApp;5 y, {1 L8 S. v: r# O% O
  71. 2 V: Q* `: r. D5 U' ?
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    * n+ L7 t& j  Q6 I
  73. {
    " i; a# u* O6 }' q0 m+ z% q
  74.   int iEOF=0;
    1 o( {$ A# T, |. ^
  75.   char szTempName[MAX_PATH];
    , F; J. {6 n6 U
  76.   *szFileName=0;' C6 Z: G% ~6 k. ]9 j0 b- I
  77.   iEOF=fscanf(fp,"%s",szTempName);* o- _' c8 E1 J3 f
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')7 Y& P* z6 f& o3 X
  79.   {
    + F" E: `" q3 s; I$ s
  80.     strcpy(szFileName,&szTempName[1]);& |2 `1 u/ P% [& S1 K: j7 Q9 V# i
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    + {) \3 V6 G- j- W. V( o2 `
  82.     {
    3 R9 m( W8 i, S4 K7 d9 `& Q
  83.       iEOF=fscanf(fp,"%s",szTempName);
    * Q$ N: @" Q; ]8 e
  84.       strcat(szFileName," ");
    0 x2 a1 ^: b8 W0 d% a
  85.       strcat(szFileName,szTempName);
    , [  ]* l0 ~; ^6 ^3 E
  86.     }4 [3 A/ R. r1 _' w8 M, A; g
  87.     if(strlen(szFileName)>=1)
    4 }* K. G6 {. R9 j
  88.     {% x/ l3 C$ F% |  ~; M6 H) ]1 m9 l
  89.       szFileName[strlen(szFileName)-1]=0;
    1 u. S7 {2 S4 v
  90.     }
    * z' H: [! V) I& J1 K! _) Y, o: e
  91.   }
    * o- A2 {% Y, }; Z! T; @% Z. o
  92.   return szFileName;( \. C& f: W) S) W" y7 R! O& {( y
  93. }
    0 g1 ~# r4 h3 u; y

  94. 9 U0 z( l. K, ~( N3 O
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)' J! Q1 a: Y9 ^5 J
  96. {7 f& @7 }' F- z
  97.   FILE *fp;
    3 u  u% v  O0 w4 y: o% v
  98.   char *key=NULL;
    4 I8 G9 I2 _4 {% w# V* K, p& C5 |
  99.   char version[MAX_PATH];
    2 c7 P5 O+ ^* b+ M! q0 H2 f! W
  100.   LPUPDATEFILE file,olds;
    3 R( J+ h3 F, j
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 W/ V5 V2 y- [0 h
  102. 8 U+ P# B! i3 r; U3 z! g5 a
  103.   UpdateList.clear();5 {# F  Q! I7 ?8 [
  104.   UpdateFile.clear();+ X% N' ~0 U( K
  105.   if(GetFileAttributes(filename)==-1) return false;$ L9 H2 @* L9 a
  106.   if(!(fp=fopen(filename,"r"))) return false;
      u* b4 T: S: ~: J0 x
  107.   fscanf(fp,"%s",version);
    ; v- n( O5 J" A7 y+ G  P. D
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    3 N6 `7 B+ b/ N" {: [: E
  109.   while(fscanf(fp,"%s",version)!=EOF)
    8 s, U* ]' `' R6 h
  110.   {7 Q$ v8 f8 r( D! a; M6 o& y3 u8 \0 Y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 X  J; h; X; ]. k2 A5 P
  112.     fscanf(fp,"%s",file->path);: Z0 D  t- {# `2 P" V+ K4 U2 e
  113.     ReadFileNames(fp,file->file);+ b; a, j4 r3 i5 e6 F) P* H* l% ~
  114.     strcpy(file->full,".");
    : _4 V# {5 C* C/ @* C
  115.     strcat(file->full,file->path);/ Q9 k) S/ {( s8 x; C
  116.     strcat(file->full,file->file);
    5 E, d3 ?4 v# w* O5 K8 Y5 h
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())1 N7 M2 @* I% Y# y- @* U# s' S' `9 b# u
  118.     {
    + e3 K5 s% F/ u: p  g7 ]
  119.       file->vers=(float)atof(version);
    2 `" e5 }8 Q6 n) _# E, b
  120.       UpdateList.push_back(file->full);
    + G8 s  l3 |! h
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));$ A* z2 V0 X" q6 y  x5 W
  122.     }
    5 ]/ k( |: E5 J* f
  123.     else% b7 `& j3 \1 S) q$ b$ T! K7 ~
  124.     {
    3 _: o/ g% h. @" I8 M2 I: L% U
  125.       olds=(*p).second;
    4 r- n; [2 A3 p, j
  126.       if(olds->vers<(float)atof(version))
    , g+ O5 M. m6 J, f7 e0 U
  127.       {5 R) [+ f) H6 E$ H8 H) V/ B
  128.         olds->vers=(float)atof(version);& @8 g! T' g8 C4 {
  129.       }
    9 `/ c% |9 A1 y& C( V- u' m2 |
  130.       free(file);
    ) k$ F& u' F0 ^" G: m, Z4 L" s
  131.     }% j1 J2 M0 J1 J7 [1 d( {
  132.   }' q5 z3 G/ X3 d! q
  133.   fclose(fp);
    ) S% |* u# l6 _4 o" D
  134.   return true;
    # v; Q6 e: ^, i7 w2 c4 B
  135. }
    # ]0 F% Z& e$ ~; t

  136. + f' P& ^5 I1 ~5 ]4 n8 A; u
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    4 c, B) v1 P$ n; B1 m
  138. {% c7 d' W1 p( `" K- _, Z
  139.   TCHAR  szFull[MAX_PATH];( |  J+ K, h4 R. N
  140.   TCHAR *token,*inter;' H- ^8 y/ {) M4 {( W
  141.   *szPath=0;
    ' @' i7 x6 U- q; Q. {
  142.   strcpy(szFull,szFullPath);
    : K; |9 x4 \; q8 J
  143.   token=strtok(szFull,"\\/");4 K4 K$ [' Y. U  i$ V+ h
  144.   inter=token;
    7 ^' g6 o6 d0 M# m9 Z* X8 o4 ?
  145.   while(token=strtok(NULL,"\\/"))' ]: @5 n+ |- ~' J& ]5 L
  146.   {
    6 g. X  y  ]* I2 O6 |
  147.     strcat(szPath,inter);
    - j/ Q3 C) s& j- B: U- ]/ b4 ]
  148.     strcat(szPath,"\");7 y7 p. t; X. Q) a3 @/ u
  149.     inter=token;0 h9 X8 ^6 y; {2 o- h! ^5 q9 [
  150.   }! s7 [6 x1 K# H4 M  j
  151.   return strlen(szPath);+ V+ |7 q* k% H$ y/ S+ t# j) k
  152. }
    ( v" N: u) G2 [1 ?7 R
  153. - D' d8 |" C# k7 u+ O5 x$ }
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    + }  w8 s9 U- _
  155. {4 x6 m7 H7 V- A( }- w$ E  X
  156.   DWORD attrib=GetFileAttributes(Target);; t8 }7 B, V: N, C3 Y% |/ G5 O
  157.   if(attrib!=-1)% u- `7 l4 M6 W- n
  158.   {' m, N/ z$ f8 t. G: u. A7 X
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))- A7 O5 [" D1 T9 `
  160.     {
    - R$ i, N# z1 c1 @: w% l/ n& x
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 F+ \  G% X1 P. t
  162.       SetFileAttributes(Target,attrib);0 E0 |- P9 u! s# Y* Z0 _
  163.     }) z  G+ e9 I, O3 G# D6 o- O
  164.   }
    : g! S6 H" \' J5 O
  165.   CopyFile(Source,Target,Erase);
      D0 z+ F% |% X- F6 d" U
  166. }
    : w0 D; @) o6 X5 @* f8 x5 d  e
  167. % i2 U# Q" \5 g* k
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    5 Q; D# ^* ?2 ~7 |  v9 o
  169. {
    8 K9 j- @) X& I4 r
  170.      FILE *fp;
    " {* X: t" }: X! ?/ D
  171.      char  szBuffer[8192];$ K! c4 e$ m5 r9 o% {' @* _
  172.   va_list  argptr;
    1 D& D4 C* ~4 [$ R2 H9 E" H9 ^
  173. : y7 {- H- w7 @; z
  174.         va_start(argptr,message);- b6 d1 E; s, @( G+ \! s
  175.         vsprintf(szBuffer,message,argptr);
    8 ]9 Q' n5 Z% Z5 ^2 x2 E
  176.         va_end(argptr);
    5 w; n" o) K9 T3 \8 j
  177.   fp=fopen(FileName,"a");
    6 R$ z2 t/ F7 p0 y- q' q% Q& J
  178.   if(fp)
    3 q% p$ b( {8 H+ p/ v! P3 N4 h
  179.   {" ?- r/ A" {( p/ z4 i7 H0 t
  180.     fprintf(fp,szBuffer);
    0 y5 y, A/ g' n( d+ H* J0 U
  181.     fclose(fp);
    ' b! E2 F5 T! _
  182.           _flushall();
    7 v. a3 a: b* W4 A3 G6 O
  183.   }6 {. W0 q: a) A$ d. {. l
  184. }
    " J& @/ B2 m3 t
  185. / {0 x; Z- x1 b: Y3 O5 ?* ?1 q
  186. BOOL CRevAppApp::Fclearf(char *FileName)6 _# n2 O5 g) U7 d* v
  187. {
    4 \) i# x9 S" X$ o6 J& a$ j# n' b
  188.      FILE *fp;; ]9 `0 t; J- S
  189.     DWORD  attrib;# N8 G! Z& o( d  A& V9 w0 e
  190.   attrib=GetFileAttributes(FileName);$ \( k% I$ n2 G8 O: X; n- t2 X
  191.   if(attrib!=-1)
    1 A" |$ m" h, w+ d9 F" V6 C- p1 p$ l  j
  192.   {% _4 P5 b- W" ^  T5 J
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      r3 d* k8 z) a# F5 Y% z
  194.     if(!SetFileAttributes(FileName,attrib))7 R/ ]1 i# b9 ~4 e1 V. Q! K
  195.     {' E! T& j. _) `: U  r2 P
  196.       return FALSE;% L2 C) o$ M& y4 j2 l$ e
  197.     }
      E- `+ N2 S4 w* P( g2 w. _
  198.   }
    8 L, B+ c7 o0 Y4 G6 k4 Q5 \
  199.   fp=fopen(FileName,"wb");
    / ^( d" _7 k- F" a  F  N1 A9 ]
  200.   if(fp)
    ( M9 Y* F& x; E0 j
  201.   {
    ; g, o- ~& b5 S4 @' w
  202.     fclose(fp);
    ; d- Y2 A: h9 }5 m5 Z
  203.   }
    7 d  W- h: q1 z% e2 a
  204.   return TRUE;
    $ E+ l6 {7 f5 c; Q: I+ E
  205. }
    8 i( b! @6 v9 N
  206. ; N$ K6 Q4 T# w9 z1 V
  207. BOOL CRevAppApp::UpdateLocalVersion(void): ?1 e' M& P, E  ]
  208. {) K7 f, o* ?7 l4 R
  209.   char filename[MAX_PATH];# U: h& A/ r6 f2 O9 E: s
  210.   LPUPDATEFILE file,olds;
    $ G& F3 [6 c: q
  211.   std::map<int,CString>::iterator i;2 C/ V# }2 E+ G
  212.   std::map<CString,LPUPDATEFILE>::iterator p;+ q* X. l! I' E8 ?5 v5 S4 _) B( K
  213.   std::list<CString>::iterator l;
    ' f. k) h" ~8 r3 ?# ~

  214. " f7 i) r" B2 `
  215.   if(bFirstUpdate)
    7 O3 w* E/ w; U% {1 F6 e
  216.   {, `$ a. Q# U- L" l; [" A) Y
  217.     dwCurrFile=0;* |( ?) v0 C1 z2 a; f" I' k
  218.     bFirstUpdate=FALSE;% `" O9 d$ O1 ~+ ?7 K' f' C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    * U+ W6 L$ @  {6 Z5 Q
  220.     {+ V/ @3 H; L0 O/ H# u
  221.       dwTotalFiles=UpdateLocal.size();
    ; z8 U8 j# f$ |3 w& c7 Z6 b7 y
  222.       dwDownLoaded=0;7 S( l# X& f9 [$ q7 `+ N; q1 d
  223.       bSilentStep=FALSE;7 |1 I; ~! E0 Z/ M- O& k4 P
  224.       bCompressed=TRUE;4 R$ y9 v; A3 W0 H8 w
  225.       strExtLocal.Empty();8 O" n) v& E3 _. h8 {' _. Z8 y) k  Z9 Y
  226.       strFullName=(*i).second;1 R$ B1 ^: \- K; b* c6 O
  227.       dwProgramState=AP_CONNECT;
    ( \3 y! T; [' w: h
  228.       return TRUE;
    # a% O( I* d! q( I3 \% W1 S
  229.     }
    " z' R9 i$ Q* _& N
  230.   }, a- l7 f, D, I  p, C+ [
  231.   else if(bRestartUpdater==FALSE)& @' o( X4 k) A9 j* s& @" z6 j' Y
  232.   {. k, y( s" {( }6 b* R8 ^4 k' g
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    $ Y( [2 G6 p# \. [6 y
  234.     {$ l  K3 C: T% F# k- |8 g
  235.       file=(*p).second;
    ; V$ [' }0 t# W4 F1 I
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ! d6 T2 X% [2 j! y  U3 o$ _% ?, g
  237.       {
    7 B8 p+ H/ o3 I1 H9 e1 l' c, D- }
  238.         olds=(*p).second;
    0 `% U- b5 {) K1 R
  239.         olds->vers=file->vers;! O. `, v0 v# h  l  P/ ?
  240.       }( N! o5 b5 A0 O0 U3 J1 z
  241.       else
    $ a( ?# H* \# M4 E
  242.       {' B) f! @2 V- i6 m
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / _2 G8 \3 {: x0 F
  244.         memcpy(olds,file,sizeof(UPDATEFILE));4 v0 L. e. j3 Z: L% A7 B* w2 ]
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
      n0 b7 Q2 `) Y  c/ g0 f7 Y
  246.       }
    , y' Q' @3 B; i* [
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");2 U" p& w" g1 a% o, Q8 c
  248.       sprintf(filename,"(%s)",file->file);
    , }2 T- U. A* W: ^; C9 Y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' k( A5 b2 X. Z- F8 y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    4 |8 B8 b) t: ?& Z3 M" k
  251.     }
    # b: I. k* E. B" M2 L
  252.     dwCurrFile++;% c  S& z4 d, [4 ~. X5 S
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& s0 V" o6 T9 u* a8 J( u
  254.     {4 ~1 k: H' |6 ?, f
  255.       bSilentStep=FALSE;8 P( y* G/ d' |% s3 W5 n
  256.       bCompressed=TRUE;
    ' I% r0 Z7 m2 Y" e' k  I- ]
  257.       strExtLocal.Empty();' N9 F: q6 v* I6 u+ t0 G
  258.       strFullName=(*i).second;$ @' ?3 l. j4 Y6 n  O
  259.       dwProgramState=AP_CONNECT;5 N( ~4 m: w) v* e( p& ]
  260.       return TRUE;1 f9 G- H; V* E& t9 R. R. |( D
  261.     }
    ( |# i9 y% Z9 u4 e1 n+ j
  262.     if(!bRestartUpdater)9 b2 N+ H0 L" t/ {- [
  263.     {* K7 t9 L% I8 R3 r* M  U
  264.       int iCurrSize,iFileSize;
    9 T1 Z! W. M  E) R  e
  265.       iCurrSize=0;( B) L( M$ Z+ e. s9 P5 m+ Y# ^
  266.       iFileSize=UpdateList2.size();0 W) |* J% ?! ]
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");, k1 ]! L  O: {+ d) P7 h
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");" j! ]  J6 h# A6 u) Z  r7 `
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");6 s7 F1 V& X* y$ v; W6 n' }
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # j+ k; u+ R1 E% i4 |
  271.       Fclearf(".\\update.dat");
    ! c$ Q1 X3 W3 \7 r* t& J
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * W4 y/ P: s, L, Y0 A) e
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 o; j' q8 g( m; B
  274.       {4 y  v6 q$ F6 S' o- g& i
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    / C' ]( N; |5 o% f
  276.         {
    " \" G* @1 s) w* b  I
  277.           file=(*p).second;2 C9 V/ `( S; o0 A
  278.           sprintf(filename,"(%s)",file->file);( \; J8 ^# i, w4 M8 R  E2 `- u
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 |' a% s6 Y/ {7 n. F; t& }" |
  280.           iCurrSize++;
    0 W# |5 M* Z# w
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));+ F8 y% e8 G* U+ `4 h
  282.         }
    ( V, R' T+ q# q& T7 B! O. j
  283.       }
    + D6 g1 K  M: Z6 q4 P
  284.       unlink(".\\update.txt");
    % I1 k) Z: M) U4 b
  285.       unlink(".\\update.tmp");3 \7 q! m8 Z7 W. V6 t  U
  286.       Fclearf(".\\checkversion.dat");
    1 J. F5 L9 s9 g: O1 h% y
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    % J5 ^* @: L* g0 N* n  C" s
  288.       if(UpdateLocal.size())
    ; _& M8 l- q* S6 y( y' R0 q
  289.       {; n0 N2 e( ?5 `) B4 k% P
  290.         UpdateLocal.clear();
    5 e3 w- b. w( l8 e" T3 h- o/ k
  291.       }
    . D: y9 q2 ]" w* V( f0 M
  292.       if(UpdateFile3.size())" h; v* U( V9 ~& V: q+ ~
  293.       {3 @2 Y, l! h: [) Y/ r
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 g5 z( E+ m8 }+ V+ j; G1 x
  295.         {# ]1 R% B$ d- C
  296.           file=(*p).second;: c) d: r; j& O' n
  297.           free(file);
    2 k$ m% a3 B( c1 ~: E: F, Z5 g) V
  298.         }
    ' `8 @: P  L# x& d
  299.         UpdateFile3.clear();
    % F4 V4 i$ V) [  Y- z5 |, B" l
  300.         UpdateList3.clear();" o3 g/ r5 d/ Y8 h+ o1 r
  301.       }5 c0 R7 R/ `" Z0 w+ v2 w. ~1 W9 m
  302.       if(UpdateFile2.size())# h- X4 {# z/ ~8 L( [) d; Z* C
  303.       {, X7 t- X( O: N9 |2 a6 |
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 ?% J/ w& d+ s- }% p
  305.         {- v, S+ o9 X" O' E6 I
  306.           file=(*p).second;; H) u" L1 \3 K) i/ D3 h  p- h$ h
  307.           free(file);. q- U1 `/ c* H7 j6 W2 ?: s5 i
  308.         }
    0 q8 s. B1 [& ^; q: \
  309.         UpdateFile2.clear();* q* \8 S# X5 R; u4 l2 v
  310.         UpdateList2.clear();
    & I3 q4 _; G; t+ G, h% _) Q
  311.       }( p' }! _  r; c! R
  312.       if(UpdateFile1.size())* Y/ b, [) u0 D: v* K6 S+ M0 H
  313.       {: |6 Y5 f* p/ t& R2 t; U0 [5 ?, d6 D
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* C  _( H" g2 p2 Q
  315.         {
    ; x/ y* ~- X4 C# m: _% F& Q
  316.           file=(*p).second;5 I; ^9 a6 g& z& P8 D9 d. x' Z1 W
  317.           free(file);. W) x; |6 e/ h7 n
  318.         }
    3 I0 T+ ]: t; `6 P+ ~3 ?
  319.         UpdateFile1.clear();0 M3 [6 c5 Y+ z" ~3 q! T
  320.         UpdateList1.clear();3 ?9 X6 I+ b: I8 I* E
  321.       }1 B( v: f9 ], K- f. b% l& e
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));5 b! H( r* r4 i
  323.     }
    $ T3 b, |( W% Y7 F
  324.   }( H  _) X4 j# c+ Z2 J
  325.   return FALSE;
    % J4 [# V# R! M" Z; L3 j2 g7 N
  326. }) @- m( a+ c- b: G( T

  327. * l" D1 u9 V! {
  328. void CRevAppApp::ClearAll(void)
    * z# m* c! p6 T/ ~& _
  329. {; T3 l6 }5 |2 v1 T1 A; [
  330.   LPUPDATEFILE file;9 I/ B( h4 U# s( ?) ~/ [* _
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( F0 m7 D% `) M) J: d- }1 X
  332. 4 u$ T5 P; O& d' I: S
  333.   if(UpdateLocal.size())3 h! L  P7 R0 P# X
  334.   {
    # x  j5 g" Q$ o/ a! @
  335.     UpdateLocal.clear();
    7 t. l8 z6 B. j+ m$ E6 }
  336.   }
    - |9 j' X! m  G4 ]
  337.   if(UpdateFile3.size())  V7 _- N! r) f$ i; d
  338.   {
    % G$ h7 t3 m5 h. f* w! F
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)4 B  K( i1 `+ H
  340.     {7 F' A3 Y  W$ p" n0 ^
  341.       file=(*p).second;: t) b& b9 Q4 g, J( k9 S, [
  342.       free(file);- O. h) F$ I" Q' B+ W7 Y$ D
  343.     }* I. p- {9 k0 u8 ^% x2 D
  344.     UpdateFile3.clear();
    0 Z+ u% Z- I3 W* N
  345.     UpdateList3.clear();7 R, W# F) q4 R) Q2 ^
  346.   }
    4 e& Y" Z* S8 o8 A8 J# S
  347.   if(UpdateFile2.size())' b$ c% k+ D/ _3 I; q5 F# Z
  348.   {- c7 c- d1 M% T
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( G1 m! Z  f! h: Z1 o0 O
  350.     {
    * t' D8 ]# n- F
  351.       file=(*p).second;; F5 d  u& u# b2 U
  352.       free(file);* W9 w& }; g3 S$ |& C
  353.     }
    " W/ p3 i' _. c4 n7 E% \
  354.     UpdateFile2.clear();
    5 w1 ], V" G3 v0 H/ k
  355.     UpdateList2.clear();
    , y+ a, [/ t% _0 k/ C% E
  356.   }2 b0 R; o6 F3 b2 L5 |. c8 c  K
  357.   if(UpdateFile1.size())
    9 p# x; x' ^. i: T
  358.   {' y( D6 H0 i2 G( e
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      C1 P' H9 o4 U
  360.     {( }# v4 |0 a( `$ Q. g. Q
  361.       file=(*p).second;
    , S4 g5 r# C& v; ?, f! H& U; r
  362.       free(file);
    7 p% f$ s+ t% q% h) J* ?  p
  363.     }$ d, \8 G, e! U
  364.     UpdateFile1.clear();
    , t9 C. |5 s$ s; q2 f: b% Q- K. N
  365.     UpdateList1.clear();
    . |# {4 C: }3 E
  366.   }& \, X" m% ~! }( g' ~3 I3 o5 T
  367. }  
    6 {: ^+ E$ e. G5 ^* i- N: M
  368.   4 n) {. G' U9 A9 t9 m# Z: q/ W
  369. BOOL CRevAppApp::CheckLocalVersion(void)( N" o' J  J/ n$ ^$ |
  370. {
    7 {1 T9 H2 h0 g+ Y: [  _) ?
  371.   int c;) r/ E$ T9 v1 u4 w! G
  372.   LPUPDATEFILE file1,file2;" |/ [0 S6 ?  G6 c- Z$ ]2 M
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    7 e# |( }( a# e, x" G& F: V
  374.   std::list<CString>::iterator l;9 ~, D) ?& a8 `' J% G  C% e

  375. $ ?" b4 t1 e) r' @' \
  376.   UpdateLocal.clear();
    2 h% J/ I& d+ A* e- r' Y; }8 f$ b
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);# G4 A/ l1 k" O! F* `0 r( v- a  t+ A
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);  A6 \/ @# r2 T8 Z2 K3 ^+ M0 B
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);+ P% H" l8 g9 D' N$ N
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);/ B9 S' t+ R; X2 i' `
  381.   if(UpdateFile3.size())& I/ _+ t3 C  u! z$ C
  382.   {
    8 j* p6 j5 r1 _6 ~6 a2 f& K
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    $ L/ N' f4 ]" `/ }! B$ w* }
  384.     {3 H: \5 r1 g7 v
  385.       file2=(LPUPDATEFILE)(*i).second;
    # |8 K7 |9 b. X$ H' {  e3 E
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 l" `" O, |3 M7 U5 L" {4 K
  387.       {
    % L1 H! D" l, N$ Z
  388.         file1=(LPUPDATEFILE)(*p).second;
      C- ^7 j( ^" `: Y; c. @
  389.         file1->vers=file2->vers;4 b# B& V7 p1 L
  390.       }$ S7 f2 ^$ `: ?& X
  391.       else7 F; W9 P' f3 N2 k, p$ i$ J
  392.       {1 g8 @& A9 s& v% _4 i
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% D% q3 N, n2 F/ \; P" R
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));2 H5 J' @( [# G  }6 x
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ( L" j5 W9 M; t/ I0 R  Y* z( Y, W& ~+ o9 r
  396.       }; n" d& a7 x5 C
  397.     }
    5 N3 E. b' I  i
  398.   }
    3 h0 X8 W8 x  ]5 C" J
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; t, Y6 c4 B' c# w5 G2 N
  400.   {
    9 W1 \5 x) d6 ^8 w
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    . t+ [# u! a* ?( \8 M" a
  402.     {
    4 l1 j, S# ?, j4 q
  403.       file2=(LPUPDATEFILE)(*i).second;
    3 A1 W9 s) z! p7 a. M; L
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 i* I3 W2 W% L4 Y
  405.       {9 V- }* R# Y; M0 }9 R" g4 I
  406.         file1=(LPUPDATEFILE)(*p).second;. _9 F% _2 h: \/ [3 x0 z' o
  407.         if(file1->vers!=file2->vers)
    $ ^2 ?' U( z, e' [1 ~
  408.         {7 g' U) _, m0 M( X0 a2 V# u
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 J* X. W* `/ |* h  A* g( O
  410.           c++;& k6 e* ]) q* w$ |% C0 A+ a
  411.         }
    8 k- b. u' Z6 R: k1 \+ a9 Y
  412.       }/ ]* x: }( K0 Y# o9 M
  413.       else
    / I: P; n% z. {$ ^  L1 Y
  414.       {# c6 B2 s8 s, d) G4 e' ~
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 C$ L2 s% r0 i2 k5 n
  416.         c++;
    ! L2 E4 T0 G# J; d/ d
  417.       }
    + {- B' a7 ?2 e( z
  418.     }
    - p* l. L6 j% N* `, I2 a
  419.   }3 L; c/ B& ?' h4 T0 \
  420.   unlink(".\\DownLoad\\update.txt");9 C: p) ~/ v! @# }& N# `- N: m
  421.   if(UpdateLocal.size()) return TRUE;  M5 L" X% T8 c6 X# i+ Q3 i+ Z% w
  422.   else                   return FALSE;! _- S+ }9 o% B2 m: M
  423. }
    * X) m& ~+ e& W8 O" \! x% s& }# b" w6 u

  424. 6 q* ~9 c% x, H
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"  j" \. J( r5 x) U5 V* U
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    " m" }4 ~0 y' |; B' y, i3 V; H4 D& u

  427. ! ]6 ~4 d- n! i7 G/ P* S- Z
  428. 0 a1 @7 q) E9 n% N( d0 V& y6 o
  429. + D" ?6 ]5 }# X# D* J
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ! ]: u& U& s" B+ h5 K, n& o6 f
  431. {
    3 X- a! H' ]. ^7 [$ o2 S
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;7 z1 k! G( L; }% D4 M/ ]7 c9 ]
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 y) `# C% {) Y7 E% i' v
  434.   {4 _% v* d6 _7 r  ], m8 R
  435.     char szLanguage[50];
    * Z! r# a% h1 u5 _3 {
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! @, r0 N% O6 \$ S2 A" p: ~
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 ^, a% M$ ~+ B7 X. N! ^
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;: ]  F- @8 l9 |
  439.     else                                   m_iLanguage=ENGLISH;( m, u, r( J1 T/ x8 y
  440.     char szRegister[100];/ `$ i. z% \% {" \6 g, P: s
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 u  M3 b8 d$ Y; R# Z9 G8 \9 s
  442.     strRegsName=szRegister;
    6 O3 S4 ]: I5 Z4 Q/ x* P3 Y
  443.     char szPatchURL[100];; c& @) r5 q9 N3 |
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 P4 ^2 P4 r, f: Z& Z1 ~' j
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);8 S. V: H& T5 x9 X1 @
  446.   }
    1 G8 q  p6 Y/ `2 B( w- d
  447.   else
    , F  z1 A) i; x" ?5 K) I7 c
  448.   {
    4 e0 w$ W7 t- B3 e/ T
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! S% u: ?+ B  e  z
  450.     strRegsName=DEFAULT_REG_URL;
    , M8 \& }2 n* z- V4 c7 |/ f
  451.   }
    ! v2 h; e0 F# N$ o9 z" q( v
  452.   if(GetFileAttributes("hosts.ini")!=-1)* [( c) g& A2 }0 J) d* P4 h
  453.   {' H9 I6 g& P1 K& Z* o5 f6 S9 y
  454.     char szIP[50];# K1 \+ |$ t5 B8 s# R
  455.     char szDIR[300];
    0 M' a, a4 @2 M/ h. L
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))) r; s* z6 M8 ]3 m' c
  457.     {
    2 o( q/ z3 h7 _* i3 \
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    % k; c# v6 i) [2 ^! Y. C9 a
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    $ o. e' }( E6 z+ R- U
  460.       strHostName=szIP;9 A: N! a3 |. ]: \" u9 Z
  461.       strHostPath.Format("/%s",szDIR);
    5 g/ _0 P+ w# j2 [
  462.     }5 N9 }6 @" \  z" b3 x( I2 \9 @: ^& D- n
  463.     else
      u' E" y# ~; ^. P8 v
  464.     {# r9 p6 q/ i% m3 t; A$ \
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% h5 l7 n! C( N4 e: D
  466.       {; ]5 t& K- v; b+ e6 p
  467.         char szLanguage[50];
    ( A2 r1 s/ D) d/ }8 z8 |
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    $ f0 s+ S2 B  i# C
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 \, d2 N; L5 B0 ?
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 P6 d  r+ [2 W4 s/ d# X  ^) ]
  471.         else                                   m_iLanguage=ENGLISH;
    8 I; c6 ~/ Y  f) I
  472.         char szRegister[100];
    # I6 F0 y4 J8 {% m
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    3 I1 v! F: G- r& ]8 s" m
  474.         strRegsName=szRegister;
    6 k- b+ @! I; d% Q1 V* W/ g2 [
  475.         char szPatchURL[100];
    8 T7 `% D# K6 x2 [$ ~3 w+ l
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; P4 a7 F2 p0 Q6 h
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ ]; Z9 N2 G* z8 F+ I- M, @
  478.       }
    , v6 s) Z/ N( q8 Q3 K* ]- i
  479.       else
    : z& }: V: d) ^5 a# O
  480.       {
    6 D/ q  P+ s( J, ]% q1 y
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);' N' }2 W- B, w" D
  482.         strRegsName=DEFAULT_REG_URL;) N3 |& n( ~( Q2 [! h  a
  483.       }
    3 ^( I% y* k$ t1 E
  484.     }
    9 |! H$ I( E$ @, h; B" o% J; Y
  485.   }; F9 c  F5 n  P3 I% Z
  486.   return true;
    # F/ @1 z7 o+ u. ^' E
  487. }
    6 K. J! ~* o3 ^# z: t! {3 U

  488. 3 b4 q) P  W' L4 V; v
  489. #include ".\ZLib\unzip.h"
    + s+ [% `' a2 v$ {1 p
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ( b1 H1 w7 q4 V/ x) r
  491. /////////////////////////////////////////////////////////////////////////////; b  c+ x/ O4 k  m$ `, l
  492. // CRevAppApp initialization
    0 Q/ k, q" U# ]7 @

  493. - d! ]. Y' a% z$ L( @! e$ o
  494. BOOL CRevAppApp::InitInstance()$ P. d% ?( c# ?8 ^
  495. {
    ) x% b2 l  O" h2 [) ?1 n( {7 C7 T
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    " m' u& {* ~* [, R, o) |
  497. 9 C: y) W" I( o- C7 y7 {6 I
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    , L! s+ @, E8 l! |: D
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    6 g! j% z6 U% ]
  500.   {  F% k* }  N2 Q% N1 z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    . H( `0 u7 E- }7 Q( e
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ) e6 A: _1 g+ R' @" @0 ]* T- R
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    / w7 w% T9 {9 O
  504.     {  m2 `& [( V2 H- S' a0 y% z) G+ \
  505.       strcpy(szPath,szPathTarget);
    2 [. L# ?3 P" H
  506.       SetCurrentDirectory(szPath);* p1 C& i6 h' s* H# U) P, M
  507.     }# W0 L9 {7 R1 f  R0 C
  508.   }
    7 i# v" m: q, g; _4 [* o& T, _* k
  509. #ifdef _DEBUG
    4 V& @7 v- t: ?. i& \
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& m$ O& k" i# K
  511. #else. `( ]: u5 R4 B  Q4 O2 d
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    7 ^% t$ j( q( Z
  513. #endif
    1 m. {: O0 e& O) t; ^) B1 {
  514.   {
    & U' m. n, i# R. a/ e, g
  515.     char tempFileName[MAX_PATH];
    : L' h3 S, q: d
  516.     strcpy(tempFileName,szPathSource);9 R# l. {+ O, z& t$ R
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 h, `' L) }4 y; x9 ]0 O1 U
  518.     strcat(tempFileName,"\\$CSUpdate.exe");. B9 ?7 o3 E# ~4 i9 c6 m
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    : E8 `# H) h' a; c
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    , v3 J- @( q+ F) i3 a
  521.     return TRUE;
    ! }7 I! X5 e, H: t% a4 O* C
  522.   }' X2 c. f8 V* V( R
  523.   // Nuke 0118: Delete run.exe8 ^/ u' v8 p1 `6 a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    : H/ A  n+ D) N1 f9 w
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");* E" }2 B* z/ W5 G0 |8 X4 Y
  526.   if(!ReadCfgFile("Config.ini"))
    + N- _  M' Y1 W" _6 Y
  527.   {& v  [' J2 |/ S; ~# r/ j" ~+ _
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ; [* y) G1 E( a) c4 G. K) q
  529.     return TRUE;
    6 Z( K( a/ I2 G" n3 L
  530.   }% m3 x: L( j- J3 A4 v
  531.   HANDLE mutex;3 w/ u: C' C- d2 P
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))1 K. Y8 z7 J$ M) }: D- t  V: P
  533.   {
    3 X& ^. l3 E; b
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ' a6 H) i% \; }# H- b. C! X% P2 b
  535.     {4 h# m# K5 S& j" Q$ R0 V7 D! o( y6 r& b
  536.       CloseHandle(mutex);2 ~" r9 h# F2 U
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    + _3 n1 Q: C) M! O5 L  T2 W: Y) ?* K
  538.       return TRUE;
    7 _2 L4 s) k  t  b9 z0 o
  539.     }
    & f$ N) \& m* b6 `' Y0 x
  540.   }  
    3 \4 h* o4 R- b% C7 [
  541.   CloseHandle(mutex);/ N0 E! ~' b2 F' p. D

  542. 7 b" i  F* Q  Z1 E
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    / ?! z) P2 ?+ e/ H" p
  544. , o( w% S- J- ]& r
  545.         AfxEnableControlContainer();
    ) n) s& }- C' [- A

  546. 1 n0 H1 O% H) J) N4 S; Y0 x
  547.   bCanUpdate=FALSE;
    $ Y" a/ I6 t, C4 r( s# v4 F
  548.   dwStartUpSteps=1;, e7 x7 {6 t4 Q. `& @
  549.   dwProgramState=AP_NOTHING;
    8 X% d$ }, O; W4 H' b
  550. 1 d* _1 z: H9 x' x9 e  P
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    - H9 N  @/ X: g/ ?( F

  552. ' m! X9 u/ _' }
  553.         // Standard initialization
    3 B" V" I3 `/ ]2 @
  554.         // If you are not using these features and wish to reduce the size
    4 ~- A! l' P" s# O( F6 i% E
  555.         //  of your final executable, you should remove from the following
    ' [4 Q( y: X0 E
  556.         //  the specific initialization routines you do not need.
    ! I2 [4 g' O' J
  557. % P% i. H6 n  h5 S9 [2 ]: m
  558. #ifdef _AFXDLL$ U# `) w6 y* d/ Q, \
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL- e2 R" y* K$ x2 ~, I' V9 k
  560. #else4 j( {2 v" R5 a* S* U* }4 }* i+ M2 ~/ W
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 f) ^; u3 J' w7 T+ z2 k
  562. #endif. t& r1 W0 x+ A0 g( X; O' f/ u

  563. , Y7 R, ~* Y3 k) [/ [
  564.   dlg=new CRevAppDlg;% F7 v# Z( }  x9 E! n0 Q. G2 y% _
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ; r9 H! {9 ]. x/ [; l+ ?1 ^
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    8 N7 @% e& b! e& R% a
  567.   m_pMainWnd=dlg;
    # }& y" r: G( o2 F5 q4 E; J, Z

  568. 8 Z  M$ |, y8 ?2 X2 C
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);% k% W8 M1 a8 ]1 q$ [$ r

  570. ) T& L3 w  ]# T/ z- j
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ( O" \- ~/ @- n+ k- W1 D  _( G2 g
  572. //  ULONG_PTR gdiplusToken;
    : i6 A) A3 R6 b% v( e
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);  ]1 Y1 Z6 o+ w8 c3 Z$ p

  574. 0 y8 x" Q: T1 P3 l- E
  575. //        CRevAppDlg dlg;
    " B1 x$ [/ r4 I" r8 j- a
  576. //        int nResponse = dlg.DoModal();! l$ O' @2 N* z2 O$ |) D& |
  577. //        if (nResponse == IDOK)4 K  `! i5 T- U8 E5 w: L
  578. //        {
    0 }! D/ W, e1 g. i6 B; d8 ~4 j3 @( y
  579. //                // TODO: Place code here to handle when the dialog is
    + n" K/ ~  f' i0 p! T5 |
  580. //                //  dismissed with OK* T% d3 h/ d" d$ }
  581. //        }' B! T: z, o8 h* e6 y; f
  582. //        else if (nResponse == IDCANCEL)( b$ N. D; }4 S- h$ U
  583. //        {; H+ l1 r+ x7 S+ }1 q
  584. //                // TODO: Place code here to handle when the dialog is$ `9 i4 d& }8 C0 G8 c: p
  585. //                //  dismissed with Cancel2 S6 L* d* b9 t( L# W& z
  586. //        }
    3 H: ]) r) d4 P1 O
  587. 9 k8 E, E) G  ~$ g: W9 }3 R
  588.         // Since the dialog has been closed, return FALSE so that we exit the& }4 i  L  a' k9 }& l" O) F# K# D
  589.         //  application, rather than start the application's message pump.& }, ?. o$ W0 w' ~4 L4 X6 D' y
  590.         return TRUE;
      m7 q: Y1 a8 L. G8 ~- |9 w
  591. }; l  C7 `: I( z+ f

  592. . ?. c" }' E! O3 d
  593. char *CRevAppApp::strtok3(char *pSource,char *token)2 \; l5 P; o  D
  594. {
    $ D) E- {6 L8 I' K, G, s& _
  595.   int i;3 s) T' g8 H* Z4 @' L% J6 ^4 e0 X; v8 G
  596.   char *szRet;
    3 b( }6 _0 t; m1 X5 D
  597. . I+ ^" K8 _3 Y9 ^, |: d3 X
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    - d1 R! R% I. I" \4 P$ H  u1 V& c# i
  599.   if(sztoken)
    ! s# o' B1 \- l# X
  600.   {
    9 F$ n3 G  D, u  c9 {0 e
  601.     szRet=&sztoken[itoken];5 S' v% v  l; B1 r) F
  602.     while(sztoken[itoken])1 c# w9 Y5 k* N' C) N
  603.     {
    , N( {$ {% I; i% f3 C% W% d
  604.       for(i=0;i<(int)strlen(token);i++)
    % @& d# o# h. r: o6 S- @9 Q
  605.       {" a( Z/ n; G/ N1 t0 [4 O2 P
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    5 H: O9 B8 m4 n/ S3 h: u
  607.         {6 ]! ~/ {7 s3 T# O, @0 o- Q' ?
  608.           sztoken[itoken++]=0;2 e' d% C! q0 Y5 g+ t
  609.           sztoken[itoken++]=0;2 j$ k8 o. c3 ]. V3 Z3 C, ^
  610.           return szRet;; M& @1 [" s1 b* f
  611.         }
    - \/ C2 e8 c+ m" n3 E% Z
  612.       }2 h# V* \0 ~8 H, P! M9 }3 h8 e
  613.       itoken++;
    ; j5 V/ p6 d+ m5 k
  614.     }
    1 ?' Z- X& ~) E- n
  615.   }9 |$ m, ]5 F- n1 @6 g
  616.   return NULL;
    ' W' {  g9 h* P. y% ?
  617. }
    4 c8 U$ i8 _! ~1 _
  618. - ]! G1 t; f* \2 R+ Y
  619. void ProcessProc(long Total,long Current)0 m7 U! ^. E; V
  620. {
    % [. a8 I( N) D: E! a- G: K8 C
  621.         MSG msg;( {/ O; C3 y! k4 i& H
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    7 `3 h: x4 Y1 g1 H7 h" Z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    % b6 X; ]3 S2 b  Y2 @! n
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      g- R$ O; V* g9 l; K+ L" y% r; E
  625.         {
    / k2 K" p: }2 [
  626.                 if(!GetMessage(&msg,NULL,0,0))' [/ B/ `7 L2 _
  627.                 {
    3 A/ e  j, m/ r, v7 z2 [
  628.                         return;
    8 b2 b2 n. i& o- t
  629.                 }4 w& G" K' {& s% O1 D% c9 ]
  630.                 TranslateMessage(&msg);
    % X) e# k8 s- S% S# L
  631.                 DispatchMessage(&msg);
    3 u! W& m" X9 h/ O' ~7 `
  632.         }        ! m# _0 H" }; d4 k; t( l
  633. }
    & j8 I' c) S! ]

  634. 1 ]. O% k% k/ `- ^: J. k
  635. BOOL bFirstChar=TRUE;  }6 O  g4 R( Y, h, [6 h

  636. ) }" a+ e* o+ S5 e. {
  637. BOOL CRevAppApp::OnIdle(LONG lCount)" W' P2 X* o: c7 e' f
  638. {1 w' `& i5 J0 P# s$ x
  639.         // TODO: Add your specialized code here and/or call the base class' M+ [5 R5 Y8 J, @* h
  640.   switch(dwProgramState)4 ]: g4 r, T8 a3 ^
  641.   {9 b6 t8 v5 B* \' c
  642.   case AP_NOTHING:, R) ]4 |! b0 ?- K) z( O
  643.     switch(dwStartUpSteps)/ \0 A7 N- g! I0 A& T1 K% @) p
  644.     {
    7 O' c0 z, G& r1 R$ t
  645.     case 1:
    ' ^/ \- e3 Q, R7 [
  646.       {; }( z) i! T0 q, ^% t
  647.         int i;1 n6 A) ^  H. A, j
  648.         CDC *pCDC=dlg->GetDC();
    2 w9 t4 x% f9 O& }* d$ {) f8 F
  649.         HDC hdcwnd=pCDC->m_hDC;. ^$ r& T/ v! }% O
  650. //        Graphics graphics(hdcwnd);, K  N6 n9 U! Q( k+ l7 I  e: L
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    7 l: R6 c1 d) t* i
  652. //        INT iWidth=bitmap.GetWidth();8 q1 Y  N1 ?" S2 d# |
  653. //        INT iHeight=bitmap.GetHeight();# S* }3 E! B0 k( p# R! o# d
  654. //        Color color,colorTemp;- w% m! Q0 N: y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    * ?/ w. P- U; F- ?1 G- M) ]( E
  656. //        {
    8 h- e% p5 v' F( T8 B$ c3 a
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % ~% s/ Y  t$ g
  658. //          {7 \/ Y7 B  x& t6 \. N
  659. //            bitmap.GetPixel(iColumn,iRow,&color);  r7 ^4 q7 t( x8 |0 D
  660. //            colorTemp.SetValue(color.MakeARGB(, c- A' Z0 h  ^7 l* D# I
  661. //              (BYTE)(255*iColumn/iWidth)," ^5 a4 u2 A! D  l1 @
  662. //              color.GetRed(),% x+ A3 F" D( t% `) F2 f
  663. //              color.GetGreen(),$ e3 r% b3 K$ s0 r
  664. //              color.GetBlue()));
    * V0 M; _, H1 q
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);) {; t$ v2 X" S
  666. //          }
    ' u( O( S  J  H; K( m# ]& }+ a9 B
  667. //        }9 M8 k- _2 g' I5 z! M6 _
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);: u0 t2 M, Q/ I( c
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 N6 j8 \5 p& K8 Y/ @& {5 @- u
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ w: E2 ^. P' ^. A
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ P& Y; ^: ?1 K( {
  672.         for(i=0;i<240;i+=8)
    + \$ g6 \2 y/ [3 K) t+ x
  673.         {
    + [  F7 y( Q" X0 D/ r
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . f) |( y' W/ X, l1 O
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 ]7 a5 _3 w* v7 j% T3 z
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- D9 t7 m  x# g2 T( d5 [
  677.           Sleep(33);
    6 O- q( V1 j3 x; Y9 @; Y+ w  y
  678.         }
    ) z, K  @- o* J( y; j0 W! @) y
  679.         Sleep(1000);
    " d) {1 h* ]* ^
  680.         for(i=240;i>0;i-=8)) U) C8 w5 C+ _, l! N  n
  681.         {
    4 v* K+ \/ l7 s" v" y
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);4 w  J# G( c* h) n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ) Y) ~" f; |% [: W
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : Y( l7 i6 L' L+ o7 M
  685.           Sleep(33);5 k0 F! v# K3 G5 o; ?6 ^, w
  686.         }* j- Y" U. d' _: @2 l' n9 t- i
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ! ?0 Y% g3 g# Q- p% K+ }. N
  688.         dlg->ReleaseDC(pCDC);
    , x: h# y# u* I& D
  689.         DeleteDC(hdctar);$ P$ ~- N7 n( U4 b  M+ p, \5 O! e) g
  690.         DeleteDC(hdcsrc);
    3 J7 e9 L' l: V9 c8 G( D
  691.         DeleteDC(hdcorg);
    - k; I" h; z6 {+ F2 r3 C  S
  692.       }% E5 |: \, h& g/ S  p% H
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);! d+ [. R! v- k$ g$ I+ j
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 p- L, ?7 X$ Z. {$ ]
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    1 \$ n! L& G, y3 |, z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ) ?2 ^. i% U  B5 Q; D5 A
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 Q3 H) l, k! Y+ W% |/ S: h, Y) I0 D
  698.       if(!Dn.Connected())3 C8 B% n- F* @* z. |) T3 M( @
  699.       {4 _; ^1 l1 v) C2 T% U3 @7 _
  700.         dwTotalFiles=1;
    $ l3 Q1 C1 S5 G( L+ K. s1 L
  701.         dwDownLoaded=0;
    " q; [3 j6 d  T) p
  702.         bSilentStep=TRUE;) t# s& n( F& ?% o! t4 Q
  703.         bCompressed=FALSE;/ l$ @/ v- x+ C
  704.         strExtLocal.Empty();% M& O# m& ]( C2 W+ A( }9 ^- W
  705.         strFullName="readme.txt";' L2 o( P# `; \
  706.         dwProgramState=AP_CONNECT;
    0 N6 b! s" \$ H$ K' ?% Z
  707.       }" r; W6 _+ L2 M1 J+ [6 \
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();5 K/ o. m+ E% P+ X  m5 P0 b
  709.       dwStartUpSteps=2;
    6 O- `& q+ s: [! \
  710.       break;5 l# R, D2 s8 K& d- j
  711.     case 2:1 {9 W: [% q' g  |* _9 S
  712.       {' }/ o7 r$ a8 v$ e0 c3 }; N
  713.         int iEOF;
    % ]* W$ ~: s) f' K& P- A
  714.         FILE *fp;% u' H$ j7 i" U& B' h. \5 T
  715.         char szString[512];
    + K! U! s8 W, |! Z; g' X8 n
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");! v8 V1 o" }. e* O
  717.         if(fp): H5 L# t* {  q1 ~" a
  718.         {
    , N2 ]9 O: \4 d4 A/ g0 y
  719.           do
    9 ^* V- {6 M$ e; M! b  a
  720.           {: _" x. h* Z& f' m6 w8 U
  721.             iEOF=fscanf(fp,"%s",szString);
    % Y7 _* G* |& @6 S
  722.             if(strlen(szString)). V8 r+ V. g+ s" C6 R* L* {
  723.             {
    9 R3 N" }) T2 g4 H0 C/ b+ `
  724.               if(bFirstChar)
    ! |- ?# O" C& W) V  v4 \* Q
  725.               {! V1 M  T) A3 T; N- L
  726.                 bFirstChar=FALSE;
    : \* u4 l; U7 c1 W
  727.                 bConnectIsBig5=FALSE;9 i. O6 s- L( K8 Y9 {( ]2 ~+ D
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;4 M2 }: E" @3 J' I7 O6 y5 y: }
  729.               }
    4 m; i, ^3 C! ]( K
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ' b6 ^- U$ D% |7 m5 R
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));4 T' S) D( O# N; _+ ]
  732.               dlg->m_ListText.AddString(szString);
    ; X6 ?2 R) V( o+ W  Q/ Q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 F4 ^5 I1 }6 m3 ^
  734.               *szString=0;
    7 P! {9 M# ^. v& d: H. m( |4 \
  735.             }. w/ s( x; x$ c. Z2 B
  736.           } while(iEOF!=EOF);
    ; H. a( i2 s% t6 {$ F6 ~: v. D
  737.           fclose(fp);
    4 T% L8 H) A4 }- n  }7 D
  738.           unlink(".\\DownLoad\\readme.txt");
    6 W7 C* k, ^; T. J, a3 X
  739.           dwStartUpSteps=3;
    ' {. e$ }/ ~6 f
  740.         }
    6 G) x. u% H: M" K$ }6 T1 i
  741.       }
    4 r; R, D# K6 T9 T8 J
  742.       break;
    ) ]: K0 b7 ^& j0 e
  743.     case 3:
    7 F7 k1 m2 ^+ J& q; Q
  744.       if(!Dn.Connected())8 l- a! T; F  v1 @& D6 E
  745.       {
    ) {+ S" u& P4 t# J3 T7 ?& a
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);6 \7 H/ I: Y. t3 c- a- H$ ~
  747.         dwTotalFiles=1;1 q( _1 }$ h) i. s/ }. e) k
  748.         dwDownLoaded=0;
    * J6 f1 w$ y" L3 H% K  b$ p( J, Y
  749.         bSilentStep=TRUE;( A7 f3 y( o& A0 \2 Y# |6 Q/ {% f( L' q
  750.         bCompressed=FALSE;
    : C# u' Y. Z% ~! s/ D, o/ W
  751.         strExtLocal.Empty();
    ) f) s8 H. W9 F8 z& q
  752.         strFullName="checkversion.txt";6 n/ ~1 U/ g3 r  A/ [0 Z* \
  753.         dwProgramState=AP_CONNECT;& h7 c5 l5 w' N* `" L/ R
  754.       }
    " n7 i0 m# J- z4 ~+ ~4 i4 P- V
  755.       dwStartUpSteps=4;
    2 J: W2 L5 h; Z
  756.       break;
    ) x" O4 b5 S" M. R. m
  757.     case 4:) q+ r. \2 s* s( o
  758.       {
    ) n4 a' K- A# r+ X- |% y6 Q
  759.         FILE *fp;
    % q7 _  @$ G0 m4 V9 L
  760.         char szString1[128];
    # l  F3 P: [7 n# J# s
  761.         char szString2[128];
    . H& S% X# ?' U
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");6 M5 v3 u" b0 U
  763.         if(fp)
    9 [9 L- _# [1 k* u$ n4 I5 V
  764.         {8 A) v7 F; M. s+ t& `2 c: c
  765.           fscanf(fp,"%s",szString1);* h0 c% z' S9 M; \% _1 j/ M! x4 y
  766.           fclose(fp);
    8 D, h9 s$ B1 ~" n  `$ o$ K6 A
  767.           fCheckVersion=atof(szString1);! O- w  `9 \+ w6 k
  768.           fp=fopen(".\\checkversion.dat","r");
    $ v8 L$ U. X$ w
  769.           if(fp)5 a, N5 v1 }7 P+ f- m8 }3 o7 G
  770.           {
    7 w- O9 E; Q2 c/ G* p$ H- \) h
  771.             fscanf(fp,"%s",szString2);
    ! i" ]- @5 k+ V, U/ L5 ?
  772.             fclose(fp);8 f: ~" i/ W+ y' u/ P0 [8 B
  773.             if(atof(szString1)!=atof(szString2))) X+ r5 ^; Q1 L- O( ~
  774.             {
    # q( I* m2 {- b! J/ f
  775.               if(!Dn.Connected())- [0 T  w" C5 t0 a- I
  776.               {
    3 v6 q# K8 K3 Y: E! N* G/ e
  777.                 bFirstUpdate=TRUE;+ O# z" Z7 E! Y" C- E9 B. L3 @
  778.                 dwTotalFiles=1;
    7 K7 [2 y- q, }2 X
  779.                 dwDownLoaded=0;; a+ ^" b% j+ O/ M: o, r
  780.                 bSilentStep=FALSE;( T6 P1 v8 y$ x3 k# k3 R
  781.                 bCompressed=TRUE;. A$ u2 j0 Q) Q* ~0 `# k
  782.                 strExtLocal=".\\DownLoad\";
    " M& K4 }4 L- F% l0 |3 O! X$ W
  783.                 strFullName="update.txt";
    - k) |; d4 c$ n3 c4 K/ Z
  784.                 dwProgramState=AP_CONNECT;- I/ L% n& g, B& m9 L
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , e' T: U: Y0 b- J! r; W) c) _
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- t& J1 H" u7 M+ U0 j; I
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");. [* l- i* B) D9 ~; U  e3 ~1 l

  788. - }# J: g, r: j9 w! p
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  O% v+ Z, \9 x1 O
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    5 i9 D0 o3 `9 V5 ]' P! x9 b
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)+ [9 a9 n# e9 u9 l% A
  792.                 {: D7 H2 E, ^% H( s4 v9 J: T$ E) ]
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");# L9 Y3 ]; N/ B
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");' a% j' e4 \  b1 E1 h0 f
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ' A! N  \4 l$ y2 e6 D
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , e, E. b4 }& h* [& Y; {; ~

  797. * |2 d+ T: i8 c% U, G
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , a* f7 k5 ?( c" K' I0 X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 B7 d" ^% q& m# R/ M
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( P+ m6 J7 }. _' \7 p4 }
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" `3 ?+ T, m+ r/ c
  802.                 }4 j4 ?/ M+ ^3 d
  803.                 dwStartUpSteps=5;
    % @/ J4 O0 A  t
  804.               }4 G7 r, c; T8 ?; S. g) e4 v
  805.             }
    6 C3 C6 K  Q: W4 i
  806.             else
    6 o0 G3 y" n# q
  807.             {; f0 ^: R$ Z: ]0 M
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ( V2 z& d* u/ v  j7 |1 n! o$ T
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");& p$ o- m* ~6 q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - @8 w9 \# e9 C% e
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    . n' l& _5 |9 @( y" f

  812. ( c& b- f8 O' Q: [
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 z1 |, ?7 C2 O5 Y+ U1 Z% O8 |7 `4 X
  814.               dwStartUpSteps=99;
    6 F. E" t  k, b6 z+ n2 ?$ M+ f
  815.               bFinishUpdated=TRUE;1 x6 N7 z  h& u
  816.               bCanUpdate=TRUE;4 m% w( f0 I  |( m5 `% E
  817.             }% U' R/ ^, `& ]; A
  818.           }6 m8 N) y9 E( s
  819.           else
    & d) h; t6 k' e& ~- V  U! m
  820.           {
    9 b" {' t4 w* ]4 K( b% e
  821.             if(!Dn.Connected())/ k+ C4 w% @8 r, T8 }! M6 h
  822.             {9 W0 r2 c. d9 N* G& x2 m" w( e" g
  823.               bFirstUpdate=TRUE;6 m  ^1 A, \' [% k; A( ~% W' K5 h
  824.               dwTotalFiles=1;
    8 w2 C, e- @& s' ^+ p5 c; y
  825.               dwDownLoaded=0;1 u" V/ z% v- }) Q: t
  826.               bSilentStep=FALSE;5 D- B5 j/ E7 ]/ k8 P
  827.               bCompressed=TRUE;3 t& R' ?% w; ~" s2 L1 e* W/ ?- l3 F
  828.               strExtLocal=".\\DownLoad\";
    2 v4 V- t4 Y/ [4 {# B" E
  829.               strFullName="update.txt";
    3 ?& {2 E/ f) B9 d
  830.               dwProgramState=AP_CONNECT;
    + h4 M7 s) q; x7 z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- W  P# x" {, s
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 U9 u% b4 S( \3 E3 U+ D( ~; m
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");0 ~6 X9 w8 @, S8 u) r; s
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  }5 _2 @+ u6 |% q0 Y; u' t1 ~
  835.               unlink(".\\DownLoad\\checkversion.txt");
      r$ c+ I4 Z5 b3 X, x8 a! e8 l
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)0 o7 Q' l8 |& U: Q
  837.               {4 S/ ]- @5 d/ Y2 _1 ]8 p
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    7 k1 Q: D+ J3 i; I0 |& ?
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    2 }6 o2 s! ?: C% T4 R
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    $ G* A( p9 K8 t0 I- z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 X( E( e5 u/ f& i+ F: ^
  842.                 2 k* p' Q$ ?& Y) C3 |- J+ a9 `
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");( i2 j, [" W8 d& f  u- l# \
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 A8 O% F  K5 O- l1 \# x
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");" o7 N) ~6 x( p+ S# W; X' ^# P+ a0 Z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ d. c7 @/ n; w% ]5 V
  847.               }
    9 {/ }- V! ?; H5 p  n; [, \
  848.               dwStartUpSteps=5;1 E7 D3 @) W; h( [) t
  849.             }! c5 h& W" a; Q+ A9 `5 j
  850.           }5 \$ P3 i  C! J. j: L5 u
  851.         }
    - M4 y" j3 }8 O
  852.         else
    ( k# b# }- R5 b& ]
  853.         {
    $ o- k4 d) z, f6 h$ b
  854.           dwStartUpSteps=3;
    4 x: c' q8 z- Y3 F) {3 }$ X9 Y
  855.         }
    . n" S. `) N' j9 Q8 q5 C3 u+ T+ Z
  856.       }/ a2 J0 B( G1 I9 b4 a* a
  857.       break;: l/ X; w: Q2 b3 u
  858.     case 5:0 V9 B- R6 B. Q3 x
  859.       {% d6 v8 v  P) F5 l. W5 `* n
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    + }0 E6 d/ x  p1 N/ r$ F
  861.         {( W/ W, t8 X. U8 f. Z- d" g
  862.           int opt_overwrite=1;
    . j: v; _' q, c% z2 ]9 q
  863.           int opt_do_extract_withoutpath=0;
    / v# R! b3 _* t& V+ a5 }/ R% l2 Y
  864.           unzFile uf=NULL;
    . C) N; ~6 a# ~9 d; d9 R4 r

  865. 0 q( I1 y( W5 K/ L
  866.           uf=unzOpen("Wsa.zip");. k3 d5 o7 f6 M. {, ]
  867.           if(uf)
    6 U$ m4 ^8 X8 ~
  868.           {  i$ M4 z8 Q' m0 N. |$ `& a
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 @2 i8 ~5 z) |4 }
  870.             unzClose(uf);
    $ p6 x, A3 X* D2 T
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");0 g3 B7 B7 o) R
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    9 w& [# f/ Y( x
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");! f0 ]4 ^  a7 v: w3 h- t( l4 M1 _, y3 B
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ ?) _/ H, {2 X$ C+ Z" x
  875.           }: |3 g3 c1 R2 G* A3 q8 J6 X2 u6 \
  876.           DeleteFile("Wsa.zip" );& A- f) @9 P  r6 }
  877.         }/ _; y+ q# u  J- T, D2 @

  878. ) Q$ C. F0 A4 m/ m9 a) B
  879.         if(CheckLocalVersion())
    - Z4 {8 v9 y7 P3 q+ U' a
  880.         {
    / B) v( X, I' H8 |; p& s! i
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");, `1 F2 \7 ]4 b6 h  P9 k
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");8 F* F/ Y1 _% p3 c) z/ l: {
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    , ~6 d& c* S9 \
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; F) L, G9 L2 b$ t* s% b, N
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    6 {4 }; K! E8 N" E) `9 x3 A: e7 o2 u
  886.           dwStartUpSteps=99;$ h5 T! C& ~! ]) z4 `* C
  887.         }& t' Y- n! f1 X; P- r* }. C) e
  888.         else! I4 l' l$ L* B( X# u5 O
  889.         {
    - i' `. P: i( l& }
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# t: x3 `& c- D  S: H6 w
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    1 Y3 T8 q; x0 p. W
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    1 I5 w9 q0 e8 x' R

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

% z( _: Z$ [4 V
6 y$ w+ h; V0 I& \( B4 n  w

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-11 08:52

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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