找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
& S' j/ V0 r' J" T; z2 W
  1. / RevApp.cpp : Defines the class behaviors for the application.* y3 o: J3 H- _. w
  2. //0 i/ R) `2 ^! w3 ^- H

  3. 2 `8 J4 E; e; ~/ J4 S: p( j
  4. #include "stdafx.h"
    ! {) Z) m) Z6 [
  5. 7 }( G2 {2 E! |( Q% A+ M9 [. y: t+ f
  6. //#define UNICODE% @) g0 B& ^: l: N7 b
  7. //#include <gdiplus.h>/ d; F; Z/ m& K7 I# G# \
  8. //using namespace Gdiplus;
    ; M1 F4 n$ R4 s  V: w

  9. 5 d/ V' i0 I. M( Q) g7 z- R
  10. #include "RevApp.h"
    1 c- _* I* T8 b. {& z5 ]2 p
  11. #include "RevAppDlg.h"
    7 R) l7 J" Y8 a$ S
  12. * h! J, A9 b1 K
  13. #pragma warning(disable:4786)
    - |2 u# n( W5 c# z2 Z' |0 s* C
  14. #include <map>
    . N# ~2 q* j  i( n' ~- }
  15. #include <list>
    ' t" I) y) Z5 |- D. U
  16. #include <direct.h>
    ' j% d% L8 W. S" o4 N0 T* z

  17. 1 m. G" T; t# G" e/ l8 S
  18. #ifdef _DEBUG
    1 V5 R! m/ G' ]6 S! G* ~4 l3 J
  19. #define new DEBUG_NEW
    % [3 O$ c+ B, g. Y* Y- J9 E
  20. #undef THIS_FILE
    / U/ P( B; E+ c/ p& B7 y* ]4 t
  21. static char THIS_FILE[] = __FILE__;
    / a3 @1 G8 x/ H
  22. #endif
    ( x5 e! ~  D2 T( V% M
  23. #include "SkinResDef.h", k# A9 q% r* E9 i2 d
  24. #include "ChangeBG.h"$ H7 K' V9 I7 q# }
  25. #include "AFXINET.H"
    5 M$ ^! A+ z& C. I2 {
  26. : K9 o$ L9 h: B, d. c, l2 j
  27. #define TRADITIONAL_CHINESE 0
    0 c' e/ m7 y/ B) I, D
  28. #define SIMPLIFY_CHINESE 1
    , P! O+ W$ Q; |2 n% l+ e8 M& i
  29. #define ENGLISH 2( d4 j/ s; O! O  B  l4 J, P
  30. int m_iLanguage = ENGLISH;8 ~8 c2 G, f$ E3 D! U+ V4 e* h
  31. /////////////////////////////////////////////////////////////////////////////! x' F4 ]9 A8 j: l& h9 Y3 w! k' e
  32. // CRevAppApp' L# t9 W% p) I+ i  {

  33. 0 F/ Z4 `, D' s* N: u/ e
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    . P9 x! k% }( R
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    - a$ T* I4 i7 r4 Q2 g( S( D' D
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ( e1 T! |& ?/ J0 I
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    2 `6 o4 a5 U7 J% @2 w
  38.         //}}AFX_MSG
    7 k& a! d* b7 ~
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)) K; V4 F$ |- i
  40. END_MESSAGE_MAP(); j6 V1 ^3 d8 ~$ q

  41. # d! a' g- j4 D3 t2 A
  42. /////////////////////////////////////////////////////////////////////////////
    ) Y- Y+ }1 i1 @) @: J" D8 E1 h
  43. // CRevAppApp construction& l( _0 l; G) R! w

  44. 6 t/ J& m9 S* a8 L; y
  45. CRevAppApp::CRevAppApp()+ Q- v/ P& M% O
  46. {# `( z- y# i6 a1 V' T: a
  47.         // TODO: add construction code here,% @/ Y3 K1 D- Y& n) j: v, p. h5 i2 b
  48.         // Place all significant initialization in InitInstance! u, }3 T+ O7 |: @
  49.   bDisplayIsBig5=FALSE;
    9 @" K# s( c7 \* J& T. N) ]. h9 y( n
  50.   bRestartUpdater=FALSE;
    . Z5 B- u. @4 ^, h4 m9 e
  51.   bFinishUpdated=FALSE;
    # |: i( c: {3 K1 R2 ?
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;' B  s6 z7 K0 {
  53.   InitChangeDataBig52GBKS();
    # Z1 s3 y& ?& N
  54.   InitChangeDataGBKS2Big5();
    ) h( Z  ]1 \* X) b8 O8 K) p
  55.         //
    * j6 V1 c- U, }* B2 S
  56.         bClickRunExe = FALSE;; w; h( [+ s1 D
  57.         //
    ( T4 f9 E) j" c0 W! Y; a, S) o) i
  58. }
    % S6 e& P8 L+ N' \5 R9 ~

  59. & O/ u: ^- L9 ]1 D4 X$ d
  60. CRevAppApp::~CRevAppApp()2 M# H3 Z% {+ F" R
  61. {9 O/ K1 @5 T% ], U9 x2 s
  62.         // TODO: add construction code here,
    9 Z( H9 v6 E$ }% S2 z% t
  63.         // Place all significant initialization in InitInstance
    0 p6 I! p8 U- c9 Q
  64.   EndChangeData();
    , z4 L3 `2 |( Q) H3 [
  65. }5 e6 \. Q3 e" A3 h
  66. + `9 P; i% u6 @# H+ e: \
  67. /////////////////////////////////////////////////////////////////////////////0 \, q8 t  k# k+ C  E% a. `
  68. // The one and only CRevAppApp object
    6 H9 G) W8 i$ P% L# G% t. G3 i9 Q

  69. - u- O& O) R6 w5 f- p9 h
  70. CRevAppApp theApp;6 |; v) t( |& E# h2 e  w- D
  71. 8 j. W" \" \4 j0 K( F  H
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    2 Q" F- n' t, G9 F8 b! i4 i
  73. {
    3 b: C8 R( {0 I* u
  74.   int iEOF=0;
    1 }6 [2 S$ g% H1 g4 C  l
  75.   char szTempName[MAX_PATH];9 o* k. ^7 ~) k9 B
  76.   *szFileName=0;
    9 r9 u( }9 \* r
  77.   iEOF=fscanf(fp,"%s",szTempName);( Z. ^4 m, O+ }: e
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    9 P# j. E" y+ B" G* x( \( P" `
  79.   {% ~6 H) h8 w# f0 H8 O. A% N5 c- k
  80.     strcpy(szFileName,&szTempName[1]);
    & U. j7 d3 G* Y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    / ]+ o, A" `8 T# J4 }2 i1 u
  82.     {0 E4 j: `/ x$ @8 F
  83.       iEOF=fscanf(fp,"%s",szTempName);# @. U( o' q3 s' K4 L. s  i# `
  84.       strcat(szFileName," ");9 f! q( \7 l6 j# a; h; V/ v
  85.       strcat(szFileName,szTempName);8 F: _; K/ \- y- O- H
  86.     }
    & ]. @! L6 m7 U. u! v
  87.     if(strlen(szFileName)>=1)8 x& k5 K) z$ u. L4 O  Q
  88.     {
    2 o; G% F# w. Y
  89.       szFileName[strlen(szFileName)-1]=0;
    $ v- w5 o( f) u, Q
  90.     }, o' g& [0 V% p% f3 v
  91.   }
    " S% Y0 Y: ?0 U- q! l+ X
  92.   return szFileName;" a/ e1 N" T, P( o
  93. }. _1 }% k3 B- D/ A4 ]+ e0 A
  94. 4 E2 B/ p/ {1 Y, d) V. B% a
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    , V, j4 P! _% P3 q' b: ^! z+ T
  96. {! }$ e% F+ Z8 n8 b) b' a. t$ C
  97.   FILE *fp;1 N; z( [1 c8 J% a* T4 P5 v
  98.   char *key=NULL;9 V( M9 F2 W: l# _. {  E6 }
  99.   char version[MAX_PATH];
    6 o  [* `( _8 O
  100.   LPUPDATEFILE file,olds;+ f) ]9 z! a$ ~% f8 L+ U! G  f/ _
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    , n! N/ M# V2 A* n
  102. ; H0 y0 M3 G. Q' M+ w6 T7 @
  103.   UpdateList.clear();/ S9 c! W# f6 G% U
  104.   UpdateFile.clear();
    % o0 D4 M; Z1 @& V
  105.   if(GetFileAttributes(filename)==-1) return false;
    8 O) Z' ]" @! \
  106.   if(!(fp=fopen(filename,"r"))) return false;6 F8 h7 h* `2 W9 ~
  107.   fscanf(fp,"%s",version);+ k$ Z- A/ ]* z* W
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }: m& @: X5 ^" _
  109.   while(fscanf(fp,"%s",version)!=EOF)
    8 j5 Q9 K" v# e, s, I
  110.   {# l, |  I* t( }! `# B
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 X4 L6 o) ^& E/ D! o
  112.     fscanf(fp,"%s",file->path);* n' N$ A& h" f" K; _, S. D
  113.     ReadFileNames(fp,file->file);
    $ c. P7 x2 u) u; U
  114.     strcpy(file->full,".");
    ; C% r0 D' ~  m5 a' f
  115.     strcat(file->full,file->path);
    0 a. y1 q5 y4 B0 z& H' d, Z
  116.     strcat(file->full,file->file);
    , M5 A! ~% y  T: ^3 {1 m
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    * R& b1 L9 P3 q5 }3 Y
  118.     {
    " x4 E9 ^) v. ]' B$ w; x6 w
  119.       file->vers=(float)atof(version);( N) b: N4 _% M* ~% b" Y! m* E/ q
  120.       UpdateList.push_back(file->full);
    0 _+ T% ~0 G  a! {1 c4 z
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    2 ?: k+ p7 m9 h3 T( r$ C2 P
  122.     }& o2 ]: |; W" l9 n1 E3 Z1 _
  123.     else
    3 ?2 `0 G9 l2 u7 O* e) b
  124.     {( f9 Z  P; Z$ I
  125.       olds=(*p).second;
    & n/ z- v/ q# y2 J0 m+ ?. F
  126.       if(olds->vers<(float)atof(version))
    5 K- X& m: O5 ^0 \
  127.       {
    . ^* R& \8 a* D+ k
  128.         olds->vers=(float)atof(version);
    % z* {5 R3 C3 u
  129.       }
    8 C) W$ _( r1 @8 l; H2 K: [# r
  130.       free(file);% W# R) x7 C( n% d! j2 j5 |* ?
  131.     }
    ) j9 o7 i/ ]: t5 U. B" y" u
  132.   }
    " B" L: `4 f7 x; Q4 s' k0 I
  133.   fclose(fp);: N, C' x  g4 f/ Y9 r( @
  134.   return true;* A. }0 j/ R2 H  E
  135. }6 m0 l1 e) p! D( Q! N

  136. " v( r# E0 d+ O4 _/ V/ J1 ]* Q- R
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)+ X8 c/ o' U, n9 l; X
  138. {0 d4 F' X  I  Z* e6 m* f! E
  139.   TCHAR  szFull[MAX_PATH];, P* @* u. a! r7 O% P
  140.   TCHAR *token,*inter;, ]9 V* J. w8 c
  141.   *szPath=0;- G$ t, s  d  Q
  142.   strcpy(szFull,szFullPath);
    * R* `: F& m' o  _" G
  143.   token=strtok(szFull,"\\/");5 t9 u; h) U: S( I. I. P
  144.   inter=token;
    , D) R0 c3 P+ g, F" m0 _% t# G
  145.   while(token=strtok(NULL,"\\/"))- [+ r, F( p; D" {  _
  146.   {
    % r1 C% u& y( c- G) F, n6 S
  147.     strcat(szPath,inter);. k! ?- l8 B8 x( s' I/ ~, y' [
  148.     strcat(szPath,"\");
    / D5 Y7 e2 m, t
  149.     inter=token;
    6 L$ b$ {: G1 i% A/ G9 Q
  150.   }$ e! ]) K6 B0 O" x9 P/ A0 \
  151.   return strlen(szPath);
    ( [# @( s+ y2 E  ^$ Z1 k
  152. }
    9 g1 M  m% R7 C6 X, b( U/ S
  153. ) p1 ~5 O5 p0 R# A7 t( `6 {
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 V+ y5 O2 F7 _
  155. {
    " `% q5 z0 ^/ n0 g- i, V
  156.   DWORD attrib=GetFileAttributes(Target);) a$ `. N6 E2 \5 M: O
  157.   if(attrib!=-1)& K3 m6 b% p# ], q
  158.   {& a* B5 q8 q6 h4 O( t
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ( u' F9 M* \) S/ Y
  160.     {2 o+ R! h. d3 ~) X( y( X2 O; j& k( J
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
      o- }2 t+ N: Y
  162.       SetFileAttributes(Target,attrib);
    0 j  h) L2 v1 ]+ Q1 ~0 |+ F
  163.     }) k" T0 y( K( ]
  164.   }
    / ?( [6 I3 `9 O: J# m& ^* b7 K
  165.   CopyFile(Source,Target,Erase);
    5 o: N5 r0 s, k& P
  166. }
    2 _+ l3 I( u$ J  q  u0 a1 V

  167. & Y. G- o$ u: N4 f8 m  l
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    * Q5 w: m* R/ e. k, z
  169. {2 {2 q9 l& M2 I# {' S( g' e
  170.      FILE *fp;
    , v# T, A: {- s+ x  o9 ]' }( z
  171.      char  szBuffer[8192];
    $ L* A" r0 A! L( ?
  172.   va_list  argptr;
    0 u: N8 A+ x) m+ V8 h6 p

  173. 1 L& `, X; A! i/ X
  174.         va_start(argptr,message);3 G2 A; T$ L0 I4 `" m3 n% I
  175.         vsprintf(szBuffer,message,argptr);/ R( h4 {1 L' |2 T
  176.         va_end(argptr);
    + U" H/ A$ E: ^7 }( T6 |
  177.   fp=fopen(FileName,"a");7 M6 F& I* [  x' e- M
  178.   if(fp)
    * ^. P+ \# n5 f8 E: b, m1 I0 A9 E
  179.   {0 G1 O# u! i9 _3 x- \4 N8 l- h* X$ d
  180.     fprintf(fp,szBuffer);
    2 {$ B: \( N* ]3 a* _3 ]
  181.     fclose(fp);
    4 f; H9 `2 ~% d  {& T
  182.           _flushall();
    / q  x% n( d- J7 O
  183.   }
      m) ~& Y7 I: _! |8 D" m9 b
  184. }" `% `1 F) J! |" x, k9 U/ I0 ^7 y
  185. 3 `) w& k8 |, F; `$ W# q  u0 T7 i2 v
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    . g' ~1 r& C- |  \% ~
  187. {4 I, p. }- p8 P' N. Q$ `9 a- o
  188.      FILE *fp;1 b/ b# A- W5 O7 w9 D/ W
  189.     DWORD  attrib;
    5 @9 l4 ]& |7 i1 X% S9 d
  190.   attrib=GetFileAttributes(FileName);1 L( _  i. Y2 t- r- M& Y0 m" }
  191.   if(attrib!=-1)
    % p7 h  R- s! a! i
  192.   {
    3 C$ v4 r! y' n6 g! ?
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    9 v8 W# N, k% R! p6 S
  194.     if(!SetFileAttributes(FileName,attrib))4 {( w) }, L' D* [4 M1 S
  195.     {
    0 i9 ~3 }( k/ f6 D2 ]' T
  196.       return FALSE;
    * n! I' z0 A* N* T' e
  197.     }
    & H& j- }2 V8 q1 D, @9 k
  198.   }
    4 d" j/ R6 M: v0 e" M
  199.   fp=fopen(FileName,"wb");
    * Z, @/ ?) n6 J1 Q+ N! X( J# @
  200.   if(fp)
    : \4 `0 A8 V2 N/ e& O
  201.   {
    . x6 l0 B7 ^: L& S' F7 `
  202.     fclose(fp);
    ) B8 h8 k& j( O  `& Y: ~
  203.   }
    " m8 Y7 @2 I& r* e! j  M
  204.   return TRUE;4 u' W& ?. r2 H9 g/ f
  205. }/ ]! a9 E% k# C! C2 c
  206. / m6 k: q: C+ |$ N
  207. BOOL CRevAppApp::UpdateLocalVersion(void), c7 I5 i  q& [2 g9 ]  S9 o
  208. {' g/ o! L; M) L+ e
  209.   char filename[MAX_PATH];2 ?. C, ~+ o& k
  210.   LPUPDATEFILE file,olds;+ |5 d0 {2 X- P+ M3 \  j' w8 Q
  211.   std::map<int,CString>::iterator i;
    8 r* w  w7 r0 \) {2 x; [7 J
  212.   std::map<CString,LPUPDATEFILE>::iterator p;  e9 d1 L6 m; \( g
  213.   std::list<CString>::iterator l;
    0 x: I9 i( D6 j
  214. $ s% [" _7 G1 ~5 t0 `, z
  215.   if(bFirstUpdate)" i- d) ~7 y+ x+ U4 ^9 b$ b
  216.   {
    5 N; b4 d8 c$ [6 w0 l' F9 S
  217.     dwCurrFile=0;/ i$ Y1 H4 Y/ f6 L
  218.     bFirstUpdate=FALSE;
    1 o% M$ W; b% [5 G, U1 S( t. N
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    * l! c+ n$ S+ T, V0 Q
  220.     {
    1 E3 b0 D' h$ r2 Z9 [
  221.       dwTotalFiles=UpdateLocal.size();
    ! o' Q* b; f( `/ `
  222.       dwDownLoaded=0;4 U" ^% `4 M) C5 i+ U3 B) {, c1 E: z$ H
  223.       bSilentStep=FALSE;
    # T# z0 O4 s) ]( r
  224.       bCompressed=TRUE;; ^' m# i  r) i
  225.       strExtLocal.Empty();- U+ `* V& P1 x: ~
  226.       strFullName=(*i).second;
    4 s5 }2 E! u" u3 ]$ f
  227.       dwProgramState=AP_CONNECT;
    3 D2 D' {" Q3 `3 T! G/ a
  228.       return TRUE;
    " |  d& x4 Q! \6 L& P
  229.     }
    ! g/ q) \7 W. G! Q9 I  B" B5 n9 G
  230.   }8 X5 _& O0 L$ h- t2 N/ E; h; Q
  231.   else if(bRestartUpdater==FALSE)
      H2 A. W; M& E' H/ Z) ]9 X' F
  232.   {
    2 L% u- ^* q5 x8 y; I0 K* J* g
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    7 M6 x% a1 z, _  b4 b
  234.     {8 i# H3 q6 D& Q0 S" i$ t* `
  235.       file=(*p).second;! v& ?- B5 {2 f0 L
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())- \( N  d: X" \1 T3 z( {
  237.       {! {2 ]* S" K5 T. ~/ O$ i
  238.         olds=(*p).second;
    % O) r# i7 l: Q( {3 p% h3 Q
  239.         olds->vers=file->vers;
    4 l' ~1 n) B! r& i* `! b, n
  240.       }
    6 {  v4 s/ D! U2 ^! X+ K
  241.       else! }" M4 Q5 _( Y8 T$ A
  242.       {
    . c  N: m6 x& L& J
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 W: L  c1 M& {7 ~9 n
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ k2 `0 d& d! Y1 p
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));8 w% [) T- ~  m7 a7 k% {
  246.       }4 G" m+ |3 j2 z! W9 e
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    - [3 {$ Q' ]- S) A
  248.       sprintf(filename,"(%s)",file->file);
    & I3 k9 z. P  B
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ( B, Z& Y+ D! Z( q8 f3 r6 ^
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }) X* w+ M& l0 ~5 e+ s* O% ~! g
  251.     }
    : e# N5 E4 r% |; u6 h1 d
  252.     dwCurrFile++;
    8 b8 n; X' }% U/ N, j5 K6 H
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). X9 z9 ?! \" C2 q4 }9 N  G) c
  254.     {! K4 v( S( m* j& R5 e
  255.       bSilentStep=FALSE;  ^! [4 Q/ e+ a5 V9 S% O
  256.       bCompressed=TRUE;
    ' |; |7 I* x$ A) `
  257.       strExtLocal.Empty();4 A1 E8 D7 {% u/ E1 d
  258.       strFullName=(*i).second;1 c; Z2 l' A; P  K  l4 Y1 s* b
  259.       dwProgramState=AP_CONNECT;/ }$ u- O0 d$ F; k
  260.       return TRUE;6 [; h' |% s. i! D# c5 k3 [: c4 b
  261.     }. B( n* l, J: `2 x1 V+ h8 i
  262.     if(!bRestartUpdater)( o( ~/ B$ W  h' q# g8 A4 i9 V
  263.     {
    4 k4 S7 l; G; I8 X$ J3 E/ O1 {
  264.       int iCurrSize,iFileSize;
    : R. @- K  [5 o- t+ B
  265.       iCurrSize=0;' T# }: _  f- _0 I
  266.       iFileSize=UpdateList2.size();
    1 {: R: T" ?) u( c5 |
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    $ x9 ~  x+ X1 m6 F
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");) Z8 }, ?. G9 q, w, u* b
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    2 I+ R+ d1 F# M$ S% ]- c! Z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 m+ |) |* h4 ~7 M" r5 e3 W) C" O: ?
  271.       Fclearf(".\\update.dat");
    ' G! j, U5 {9 g, {
  272.       Fprintf(".\\update.dat","Bloodyf\n");1 ^0 o+ I+ Q0 p! g
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)' r( p' F4 \1 j0 w  `+ [
  274.       {2 c, X4 r* I" }& M8 Z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())  G* g3 m8 I3 W& }! w9 d7 \
  276.         {
    , y0 P4 T+ B$ Q, z4 x# ~  k6 E
  277.           file=(*p).second;8 f' q) p2 U6 h" N+ a' o
  278.           sprintf(filename,"(%s)",file->file);* i; ?* h3 f2 h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  S; X. E8 r8 S0 Z% B( W
  280.           iCurrSize++;
    5 K( P/ l- W$ _6 r
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ; U7 L4 t4 z; `/ `& V8 X+ V( |
  282.         }3 f. B! H( K- D' T
  283.       }0 w" B5 e$ i3 }5 w* w( R) @' V
  284.       unlink(".\\update.txt");
      W0 b! a* k: K* ^# `! m
  285.       unlink(".\\update.tmp");
    / r5 ]( d# Q8 b8 i% I
  286.       Fclearf(".\\checkversion.dat");
    " c9 N# T: i* l* h1 j
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);; A- L7 e8 E: y" s. O% I3 v$ }3 l! C
  288.       if(UpdateLocal.size())
    4 w" p4 I; a7 ^% Q9 h. L
  289.       {
    - ]% q% Q8 P* L2 M; P
  290.         UpdateLocal.clear();
    4 I0 m) e* ?1 D* r6 H1 p! |0 G" S7 S
  291.       }
    ' Z6 |+ i, P: V8 v( K1 v- ^, Q" ]
  292.       if(UpdateFile3.size()); Z$ k- x. ]! q( W/ {& h
  293.       {
    $ C& c1 m/ Y, o1 O) U3 A5 o- ?" {
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 o, p3 d6 b* C
  295.         {
    9 X5 o& |+ [" z: E% v1 U
  296.           file=(*p).second;
    ; T6 Q( I# x! Q" O8 E
  297.           free(file);2 H" @% u/ F2 X- a4 c3 T
  298.         }
    6 r9 m1 B9 g6 o; X$ C
  299.         UpdateFile3.clear();  W( k! V/ H. E0 f) W. t/ Z
  300.         UpdateList3.clear();
    ) P# j2 Z9 t4 W% f0 ^. H
  301.       }" ?9 h8 D2 U* V3 |2 }- k3 R2 g
  302.       if(UpdateFile2.size())( W2 |( E- N$ g5 l* S6 M: t$ w' W
  303.       {0 [" z! ~! [6 R/ e9 D- p" t2 b
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 B( g4 R! r  f' `  O; k6 Y, B# f/ M
  305.         {. l; S. i1 d. B. }; Z1 l
  306.           file=(*p).second;% y4 p3 j4 f; K" @& R7 p
  307.           free(file);
    , \3 C6 h( F# I) J: {
  308.         }
    $ E: |5 u9 g3 W5 h
  309.         UpdateFile2.clear();
    , F: Y1 e/ J  ]  o
  310.         UpdateList2.clear();# E: l4 _* b! \2 P) w
  311.       }) k# d( M4 o* c3 X% D; U
  312.       if(UpdateFile1.size())
    1 r8 O4 W% V2 L4 f3 N2 E0 F& m- c
  313.       {
    + o) h  u5 r0 B. T. Q- m% T
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 j7 l1 k% U8 k  c# P
  315.         {+ H$ L0 L9 w9 a
  316.           file=(*p).second;5 Y/ o, J" e* N) [
  317.           free(file);) u8 a6 k+ s3 S8 ?: Z9 p7 E+ y
  318.         }
    , K2 o$ g! T1 O( Z- K
  319.         UpdateFile1.clear();/ R' Y# X+ }8 Z; P3 E5 O2 Y% X
  320.         UpdateList1.clear();, s8 \- \3 `" O5 ?  p
  321.       }
    & z  I9 `+ p  L' g
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    2 w  y! q$ B+ m1 z1 x- b$ [( F+ g
  323.     }
    # g' f% I* Y& {
  324.   }
    4 K. x+ o3 _- e0 ]; t( {$ d
  325.   return FALSE;9 O, T5 w6 b* M+ q. A" V: I
  326. }
    5 z9 K+ J/ p  F! u4 e6 E; k
  327. ! Y- T3 W; ?6 i9 ]$ ~/ y
  328. void CRevAppApp::ClearAll(void)) |2 O" n: y- g' P' q
  329. {
    1 K7 m2 m% v  n
  330.   LPUPDATEFILE file;
    - R% }* h& [* K4 `* P: H
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; s. F! `9 x: W/ y$ `

  332. 5 H- l' a# a  T- o6 R
  333.   if(UpdateLocal.size())
    0 d) t  K& c+ m2 O1 j
  334.   {
    4 X6 ?" m& Y& V
  335.     UpdateLocal.clear();5 T+ `" U2 _: L% n( l
  336.   }
    ! Y: c3 I1 L9 C# {/ y
  337.   if(UpdateFile3.size())
    ) A) @6 b  C% m: U
  338.   {
    / V2 V, y* D7 G, W/ e9 y. I  L
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' Q* z" ~2 j0 a
  340.     {9 a3 v" l2 e/ I, f9 J; O' x
  341.       file=(*p).second;* Z! S- \1 Z# h0 b$ X7 Z+ ~( h
  342.       free(file);
    - U  m, I- r0 l
  343.     }
    " j- X1 D5 S: j% W1 U/ G3 s0 e1 |( ~
  344.     UpdateFile3.clear();& x/ M0 s- A, d, `# I
  345.     UpdateList3.clear();
    1 G! |' O4 Z# b( M) I; ~
  346.   }' Q: q* \% \8 c- e2 I6 Y
  347.   if(UpdateFile2.size())# E* c+ d& y/ J: X
  348.   {
    % o; ^; B0 v! K/ N- j7 m* U5 }
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      J; A; @: U8 o- r
  350.     {2 Z5 F& J  b  Z  F' s: g9 W( E/ ~
  351.       file=(*p).second;! m2 |0 ?+ }8 G
  352.       free(file);
    8 E. B* M7 f6 U% C) E+ @
  353.     }' Z" c: X7 f/ Y  P! B, s3 f
  354.     UpdateFile2.clear();# |* u, I+ ?$ G  h# L( G9 s7 n8 K
  355.     UpdateList2.clear();
    & P, b9 |0 q' B- v( s
  356.   }& C* \. Y2 W5 G: \5 {( p! c) c# O* O
  357.   if(UpdateFile1.size())6 c" s" o3 p) l+ \2 f
  358.   {) s6 x4 i6 j' h8 @
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ I2 f. S1 Q$ ?: B' I  {
  360.     {
    9 R& n8 l8 h5 h/ z3 Y
  361.       file=(*p).second;
    / X8 n! i. r" Y1 c/ v$ y
  362.       free(file);; N" e( E8 B( L' F* Q' _
  363.     }
    + R+ d% w" [. d* o, x! B7 j! P
  364.     UpdateFile1.clear();3 |& j+ i3 w# P+ }6 d
  365.     UpdateList1.clear();
    ; x/ R+ o; D0 [2 y% K0 q
  366.   }# B$ E* N3 `% Q' M$ Q5 `
  367. }  
    : `: S+ Z! p6 h" ?4 h/ l7 h
  368.   7 y4 W+ C% [& F! {  X$ R- F, O
  369. BOOL CRevAppApp::CheckLocalVersion(void)8 \/ J0 k& }1 J# P
  370. {
    4 o, H0 ?6 t0 V. @
  371.   int c;
    # C8 ]3 L% s& t- }* t5 F
  372.   LPUPDATEFILE file1,file2;, u1 B+ b: c, }
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;* s/ {% a* H/ \/ B/ _3 K5 u9 j
  374.   std::list<CString>::iterator l;7 _7 [* P2 Y) a! L( k2 N# g
  375. # R) u1 t% V  E. z8 a
  376.   UpdateLocal.clear();/ V: Y( w0 T& n4 _8 L7 D! T6 J
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);$ q- u+ i9 n/ ?6 U) ~$ a
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);2 T* n4 H. R  j
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);% B, J$ k. v9 `- D
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    % H) k' e' ]' c3 b3 w; t* C* r0 K
  381.   if(UpdateFile3.size())% U) x! M- L" P9 |8 {, m
  382.   {! H! A5 [( h2 _7 n
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    % Z8 L7 h. _2 `; }
  384.     {
    $ b1 ?* M- n) S5 j# [! O
  385.       file2=(LPUPDATEFILE)(*i).second;
    7 \9 U( G  ]7 I* l
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ W# e3 O' U3 L. a+ E
  387.       {5 r* U0 y9 i+ o7 S( x: O  e
  388.         file1=(LPUPDATEFILE)(*p).second;; K- {) X) W3 i/ J# ~6 ~" n3 M3 W
  389.         file1->vers=file2->vers;/ R" k% i& `4 `0 }9 |" _0 R
  390.       }2 ]# z9 N  U# G* k2 `2 c. O
  391.       else
    - `% w4 v3 i/ X; @( d; E$ [
  392.       {& m9 \( x$ }. Q4 t& I5 c
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: H5 `6 r+ y; Q: A/ E8 F5 `
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - R9 s. m3 {1 f* A2 I
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    : x9 w  K! r4 ~
  396.       }
    7 h4 O8 K$ d0 D  K7 e" U$ B
  397.     }
    5 y1 W$ z- h& ^! {
  398.   }
    ! f, f3 w  ~1 ]
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)0 S! Q' J5 `! \
  400.   {
      V: X2 f) q0 B& }& n8 r* }: O
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())! T3 c+ J5 A. E; z
  402.     {
    8 m7 u4 H- L7 S/ O' K+ N) C
  403.       file2=(LPUPDATEFILE)(*i).second;  F+ w* o5 _( ^/ x
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 J* }( K2 X4 b' U3 ~8 _
  405.       {4 q6 ?1 i& Z, @/ k  n% D! F9 v' e
  406.         file1=(LPUPDATEFILE)(*p).second;
    # U' a+ M( M& P6 G
  407.         if(file1->vers!=file2->vers), |  ?; y  L5 M! m& s3 m
  408.         {
    4 p8 t" B4 Y0 Z" b- T+ ^
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! ]' _2 l6 e% v
  410.           c++;
    . z. e  z9 R. J& f8 s9 e0 H
  411.         }8 r6 g8 `, T; v7 I
  412.       }
    ( l; s# k: q3 W9 ]
  413.       else; j& h$ H* W3 V9 h
  414.       {0 Q8 m: B4 Y# S+ K- R9 P7 i' x
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 A  f# W* H1 x) n* m; K+ _
  416.         c++;
    ' }; d& c# }# L$ {
  417.       }
    ! O5 T1 V- a, S3 {& J! x# e
  418.     }
    $ a' N9 l* |* p1 l5 X2 Q  l- a# F# }
  419.   }6 |' |' f, ]4 j, s5 d& V" u
  420.   unlink(".\\DownLoad\\update.txt");
    3 _' F6 A8 R7 y1 Y2 }7 d
  421.   if(UpdateLocal.size()) return TRUE;6 n" U1 S6 w/ {1 C6 {6 N
  422.   else                   return FALSE;" K. ]" x7 v0 E. n
  423. }
    5 M# o# b. _) {

  424. 2 v- z. Z$ J6 N8 b$ g
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    . a: H+ R( ~* z% }8 ]2 I
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    & Y6 q1 ?( w, r$ m3 N

  427. 5 X# t/ v% D" h+ |
  428. , U& H& x- q' @9 M' Y5 z) H0 B

  429. 6 n& H5 e7 l! Y5 Q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    7 w' f& \, Z$ K
  431. {
    1 h. V! x7 m8 d, N* b
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;# ^% o* t0 B/ Q4 `% y/ L
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 F' Z" D  p* c5 }: w  L! f: x$ {
  434.   {* q7 u' }9 B/ ]( J
  435.     char szLanguage[50];0 M$ ^" Q% Y0 h. p( k1 c: Y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 j2 s2 I9 x* x6 `, l- u& ]- M# I
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 o3 G' ^$ \! W- m+ @; D7 f" @& i
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 A( v: u! _& H* N8 S# |( p+ Z
  439.     else                                   m_iLanguage=ENGLISH;
    ( t+ |* z+ I3 M
  440.     char szRegister[100];
    / Q, Z* K; ?0 d& S( H9 u4 w
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - G# J+ X9 X$ A. x! h! h
  442.     strRegsName=szRegister;7 j. e0 a' x. U$ @3 H4 y
  443.     char szPatchURL[100];
    " ^& `' g) ^. L$ Y1 J  }$ f
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 B# c- f0 Y' Q. H+ V! ]
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 {/ o: k3 x( g
  446.   }& }3 {! U+ g/ r5 m3 Y2 k
  447.   else" f  P. K+ [" d; A. |2 i
  448.   {
    . z5 F4 {6 C9 S  k0 v9 I: b
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);. [! l; Z' E5 C* c' E$ R
  450.     strRegsName=DEFAULT_REG_URL;* V) O: ]! ]& q) q8 C
  451.   }
    " z* U+ E2 S: m& B) }0 J, @0 l3 j
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    8 ?! z' f* ]+ }7 @, ?
  453.   {( i/ L. @7 a8 F3 n* S7 H. E
  454.     char szIP[50];1 R& _, J; ]0 j4 l; o
  455.     char szDIR[300];8 C/ `. O$ z* w
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    6 D9 w" e+ q1 A3 \$ r
  457.     {% ^0 {, \2 N- I- r, f! a
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    + X& e# F4 E) e8 p! P
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ! O9 w- _5 ?( Y$ G8 h, K  Q; H5 U( v- ]
  460.       strHostName=szIP;
    4 f  m3 B- O5 {+ ]5 }7 }
  461.       strHostPath.Format("/%s",szDIR);. l6 n2 r# t3 u  C
  462.     }
    , ^7 C8 z# ~" U% _0 |
  463.     else
    - x, k; q# ]( Z; J
  464.     {% i' N7 s1 u7 i- ]0 Z7 r1 K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)5 h  T6 D* a/ U* H- m- \( C, I2 J
  466.       {& Z* ~0 E# R* g+ l9 z1 s" i
  467.         char szLanguage[50];
    7 ?* A0 A/ X5 D2 k; ?4 y3 N7 Z" q
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : m0 v9 [& e5 y9 W6 Y+ m  c6 I" I
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ `. ~/ _2 l  \5 \6 ~8 R
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ J, E5 u/ _) P
  471.         else                                   m_iLanguage=ENGLISH;4 t0 u) U. l$ R) n
  472.         char szRegister[100];
    ; l7 e2 s6 x( Q; w# A
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 r6 }" T$ l. H  p7 L; f9 F
  474.         strRegsName=szRegister;' G3 W3 i8 H$ `
  475.         char szPatchURL[100];$ ^9 }, g6 Z9 Z
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( N" p; K& p$ r3 Z( F8 ~6 ]
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' L" Y3 V+ N5 K) T, z1 j+ N% J. e4 [
  478.       }
    & H( I& i% A- g+ g, [/ s8 ~) V1 r
  479.       else
    ! P- i  l5 _8 z8 z! q6 @
  480.       {: I! x3 p; K1 p
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , |7 y" x; g- H
  482.         strRegsName=DEFAULT_REG_URL;
    & m) {3 P. m6 p9 |# {. Q
  483.       }" b3 n2 V# t6 ^% F
  484.     }( H! H  }: n: p( ^2 ?; h' A. f
  485.   }
    0 q$ _* G9 O8 M
  486.   return true;
    ( U) t6 j- u) u1 l0 ]
  487. }5 L7 q4 @: }% P) ~8 Y1 A
  488. $ Q4 A8 `, _0 R2 m# q4 L  l8 U
  489. #include ".\ZLib\unzip.h"" D" o/ \  a# {1 i
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);9 p* u$ K) h* u) ^1 c+ O
  491. /////////////////////////////////////////////////////////////////////////////1 w' y7 W7 O% d2 w
  492. // CRevAppApp initialization6 C% |+ x8 o6 c/ I' s

  493. 4 O" }) q$ W+ ~2 O
  494. BOOL CRevAppApp::InitInstance()
    ' T/ o6 j0 i4 F/ m
  495. {
    # V: g1 K7 ]3 a, Z
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    + g! Z5 }9 \! K5 t1 n8 L
  497. ) W1 k( R8 q4 j- a( x+ z; e+ j
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    & \- Q. d9 s6 k1 Q+ l
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))- `0 N6 w: [3 Q) m8 j
  500.   {
    5 e3 c2 d; R0 _8 e1 P
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");8 b  _2 D# F8 ]0 u/ O& K# M7 x
  502.     GetPathFromFullPath(szPathTarget,szPathSource);$ k0 d& o+ A& k
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))1 M: K; w- N1 [& S3 X
  504.     {
    $ [6 y+ S" Q  w" `5 K7 z
  505.       strcpy(szPath,szPathTarget);9 Z- F6 c& Q' S
  506.       SetCurrentDirectory(szPath);/ B. N+ g2 N% ~) [3 f# R: h
  507.     }
    0 K4 a) d1 w/ @) ?( f' R, n( ^2 f
  508.   }0 m0 u) d% V- ]" h
  509. #ifdef _DEBUG+ S5 \8 r) H! C; g
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 d$ O/ ?6 C* `4 X- x
  511. #else
    : x) \7 @$ L1 |! S: l
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    0 L1 u9 Y4 E/ @% d0 _
  513. #endif
    ) k4 }# w6 ~& r& z9 W  ^
  514.   {9 T5 a: ^2 T, F5 _
  515.     char tempFileName[MAX_PATH];1 [9 J7 g" l: R; m# R; ?* _# f: Q) _6 x
  516.     strcpy(tempFileName,szPathSource);
    3 ]0 m- a0 I* |9 X& \6 K' c
  517.     tempFileName[strlen(szPathSource)-12]=0;
    - [) U3 ^( `9 R3 p
  518.     strcat(tempFileName,"\\$CSUpdate.exe");9 z1 @( I2 k5 r! |1 h4 s
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    , o6 V" z; `8 m& `: C" @/ G
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);- f% I- J- P+ k4 Z0 |
  521.     return TRUE;6 `" t$ F, Y( Q0 I
  522.   }
    / [% p; L0 Z. l4 I
  523.   // Nuke 0118: Delete run.exe/ V2 w- _& M/ p
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    # W& n, p1 p* a1 y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    4 g! w7 m- H* [1 K+ f  J
  526.   if(!ReadCfgFile("Config.ini"))
    2 x" t( Q6 F+ P$ f1 ~: S' |
  527.   {
    / s9 L6 e5 W  K* W' L: Z2 Y
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    - [. M% x0 K9 V9 f) C  ?( B
  529.     return TRUE;
    6 _' U$ i# h3 c  Y& P3 L
  530.   }
    4 q8 i1 U/ l3 `8 v  O/ T' K
  531.   HANDLE mutex;
    3 Z% ~! f' R1 z6 C; a) F3 e
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))+ I- [2 l- x6 c3 R
  533.   {' K) X  Z% d3 K0 O. e5 [4 l
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    1 M: K1 A) Q$ f$ c& w1 f& ~
  535.     {. E5 p* p8 Z/ T
  536.       CloseHandle(mutex);
    ( E2 |/ T* o% T6 o9 o# q% @
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);4 R4 B8 g( s8 V! Q# o
  538.       return TRUE;: K1 i  Q9 c" m4 H; F
  539.     }
    3 [& V* T4 w1 H% D6 P- j4 w; J9 W
  540.   }  
    $ p$ s+ \* q9 J6 v- n4 t
  541.   CloseHandle(mutex);2 T% |0 e2 ?$ S( F% g7 A$ S

  542. 0 s8 J3 L: g5 W
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);/ z5 i! n7 t: s( R( _& A

  544. 8 j/ e. i3 ~' g8 x1 [# Z
  545.         AfxEnableControlContainer();$ d# y% t/ v4 v  p8 ]4 p/ P

  546. $ t/ N! R, I! y4 q+ @# s
  547.   bCanUpdate=FALSE;  |- G" a4 O: w- }0 P  ~
  548.   dwStartUpSteps=1;, l4 u6 o. o& f* c" J
  549.   dwProgramState=AP_NOTHING;- K  h3 m6 T) g! J; j
  550. ! h( d2 {! B8 J! o( `( ~9 d) b2 ]
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);& @9 R) ?) r& I" l& D; t0 m8 H! u

  552. 6 ~  Q  l; d* u" z7 \' G3 Y
  553.         // Standard initialization! S- e5 v3 j1 ^$ `$ R
  554.         // If you are not using these features and wish to reduce the size0 y% G! Q5 s* o9 A
  555.         //  of your final executable, you should remove from the following% T* w: R4 b" [* ?% G
  556.         //  the specific initialization routines you do not need.
    % F' D$ t5 d( c
  557. 3 ?. G4 y' F" k
  558. #ifdef _AFXDLL
    3 J  j5 X/ q( E8 }, z( T; K" K
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    & t+ \: V: u+ }0 Z+ P+ }
  560. #else
    ) e* h* \5 |8 a& C  h, a8 j
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically# W7 D* q0 T* w3 N7 M
  562. #endif
    8 [, Q+ V3 G2 A

  563. % c) m" [( W! s  _- k
  564.   dlg=new CRevAppDlg;
    3 r3 [: c. D, ?4 U( ~
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    7 ^! P4 v0 z: z! L" `
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ! L- L7 I+ a2 z. I
  567.   m_pMainWnd=dlg;  M8 z5 ^( `: {! v* w- g

  568. 9 S1 B7 h% b4 }
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);$ u& @0 H, ?, U( H
  570. 1 P7 o6 z% n0 `& Z& m2 n
  571. //  GdiplusStartupInput gdiplusStartupInput;5 d$ [6 r8 i1 {1 ]  [
  572. //  ULONG_PTR gdiplusToken;5 p1 G& N4 O1 d7 Q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);8 X6 |  l0 W+ a" h/ l- W+ o
  574. 1 K  q. t3 h/ D9 a
  575. //        CRevAppDlg dlg;4 n% o) |4 g$ b3 q9 D/ s5 J, R# k
  576. //        int nResponse = dlg.DoModal();
    3 @9 s5 L" S# e+ t2 K# [
  577. //        if (nResponse == IDOK)
    3 G1 ?* Q* l6 C+ `' M' @
  578. //        {3 ?( p0 [7 f2 X8 r( F" S( d% O! ?
  579. //                // TODO: Place code here to handle when the dialog is; Y: z  G* H! o* @
  580. //                //  dismissed with OK
    , h4 d6 C2 I6 o2 G2 n6 g
  581. //        }
    + X) H( A  U6 h2 x: l3 W" K
  582. //        else if (nResponse == IDCANCEL)
    7 {7 t  E2 v! w
  583. //        {4 b9 ?% s; Z0 W! M! M1 K5 N- k* V
  584. //                // TODO: Place code here to handle when the dialog is/ L9 d1 t3 C6 Q+ |( ]
  585. //                //  dismissed with Cancel/ t! U$ b* J6 x: M' Z
  586. //        }
    , ~1 H/ a& J6 W* j& I
  587. - `* X  u# w/ ^% u
  588.         // Since the dialog has been closed, return FALSE so that we exit the+ l, E9 u0 i9 {) k9 r
  589.         //  application, rather than start the application's message pump.
      C5 {; R& A1 H* a
  590.         return TRUE;
    7 F1 G4 J! n: I. `% ~- {7 L, Y* ]
  591. }: v8 x  d3 g8 Q, b

  592. ' ]# W; S& R+ n
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    7 a4 Q3 \1 E* d3 l4 I, ~
  594. {
      E) X; u) g. `. m0 R
  595.   int i;5 E$ w" U1 ]9 f& U9 U
  596.   char *szRet;' O9 i$ A9 R  V5 v/ [+ L( K
  597. 7 O0 L: w% N6 b8 ]! y% l
  598.   if(pSource) { itoken=0; sztoken=pSource; }0 @+ \/ g7 d- q( c' `  }6 B
  599.   if(sztoken)4 W4 x" w7 L( s9 c! G
  600.   {& i7 l) n4 K6 m) r
  601.     szRet=&sztoken[itoken];) X5 o9 Y# W; u+ i7 _( P0 F
  602.     while(sztoken[itoken])
    / B; l& q7 Q1 z. _3 B
  603.     {
    * ?* y) y5 W3 A- m$ j6 L
  604.       for(i=0;i<(int)strlen(token);i++)2 t0 u  w# {; m" v$ i6 s5 D
  605.       {5 @! F9 D7 [% b& b
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    . |" J7 p$ D' d4 ?
  607.         {
    . Y9 k3 O' ^8 {3 b6 ^0 c
  608.           sztoken[itoken++]=0;
    5 }4 |4 O$ Z. Z
  609.           sztoken[itoken++]=0;
    . W6 v- O+ w. u( J) f
  610.           return szRet;5 `$ V2 ]  t! p0 n% U
  611.         }  T. Y. Z8 v1 B$ Q
  612.       }- m( B4 Y( \2 L( z$ C" {
  613.       itoken++;
    " o. {1 p! u; [# m7 B1 e+ E  K0 R# }
  614.     }
    5 q+ i! X0 H$ X1 u% {5 m
  615.   }
    % _( P0 x$ A# }" Z$ h4 u
  616.   return NULL;
    : s0 n: {2 R5 l8 x
  617. }& Z1 p- c' s9 ]$ ~4 d
  618. ; q9 o1 q4 `: _
  619. void ProcessProc(long Total,long Current)
    ( @9 E1 ^2 g, p: k  X$ j
  620. {! h4 X" t" N3 W9 U# M
  621.         MSG msg;; ?) J+ Q- Q) J
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);0 ?& A; N+ `. {0 W5 S/ U+ Z8 N
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));2 J& w0 n  `  f( D3 s  o
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))" o# e( k# u0 u0 ~' m
  625.         {
    9 J9 B2 y8 z; g( s# W) s$ R) Y& Z
  626.                 if(!GetMessage(&msg,NULL,0,0)), a2 t9 v5 t- i# g: h
  627.                 {
    6 T- x, W( u: M  g1 t; ?9 ^% l* J& m
  628.                         return;
      O0 k: s/ H. l& Y/ C9 m% \; I& k
  629.                 }
    5 I% m- h5 c' c3 w
  630.                 TranslateMessage(&msg);
    0 w6 ?  y; z5 S# h1 z1 j) ~1 T
  631.                 DispatchMessage(&msg);& g0 c& i$ V# {! _
  632.         }        - ]0 ]% }! g8 {1 q2 k. Q# ]7 j
  633. }( C7 h$ ]' U/ c5 a" G1 ], X2 r( D
  634. 9 M. H# v% z9 I' a2 K
  635. BOOL bFirstChar=TRUE;
    + d* O) I' J! x7 R( r6 V4 a* g! H

  636. 6 ]8 E& a7 D% C
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    2 W: E/ q* Z9 U1 e3 Z  i3 h( o3 q+ n
  638. {
    ) x2 s* e; C, c. T8 B' h8 l- J
  639.         // TODO: Add your specialized code here and/or call the base class
    5 V; }/ Q3 q8 b% N8 B: V  i
  640.   switch(dwProgramState)
    : n& B& R7 e8 Y  f
  641.   {. H. y; S. X8 l' s3 @. `; l
  642.   case AP_NOTHING:
    : T; a2 E1 p- J6 @- m+ e2 T; O
  643.     switch(dwStartUpSteps)7 M# I, }/ m; `% s
  644.     {
    , q: t1 S( U& I6 G( G+ {# I; n
  645.     case 1:) W, v  W; x7 h1 r# W( M! c
  646.       {- H  K7 l  ^* |0 i; t
  647.         int i;
    , f% D8 X# H) p/ G7 [
  648.         CDC *pCDC=dlg->GetDC();
    0 l8 K0 O; _# W
  649.         HDC hdcwnd=pCDC->m_hDC;
    7 r& e4 t7 K4 o* Y
  650. //        Graphics graphics(hdcwnd);
    8 E( i  {+ p- |- I2 j) W
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");3 s. l; u" ]5 j8 L8 X+ ?
  652. //        INT iWidth=bitmap.GetWidth();+ r0 c0 W4 l9 g" i& Z5 J. f; L
  653. //        INT iHeight=bitmap.GetHeight();
    ( D. I, L+ `8 ~
  654. //        Color color,colorTemp;2 D% E& m2 O7 ]5 {
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)# ^0 J! _  N1 ]
  656. //        {. X0 u6 g# h8 }) C# P8 U1 Q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)1 r! [. o& O4 l( a3 x
  658. //          {
    # M- S. f: y) d+ v# {* E4 W6 A
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    $ F) r, ^" E4 a* a/ W5 g
  660. //            colorTemp.SetValue(color.MakeARGB(
    ' O( c. O! {. @. J5 x$ Z/ O
  661. //              (BYTE)(255*iColumn/iWidth),$ z, C( m7 C  P7 b7 I9 N; B3 c) H* {
  662. //              color.GetRed(),
    ! I1 h& e4 S( E
  663. //              color.GetGreen(),4 S8 Y& Z2 V" r% s$ K5 r
  664. //              color.GetBlue()));
    5 k" J5 h- A  e2 s
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ' m! o) ~9 k% Q7 U5 _* X# E
  666. //          }
    ; X/ ^( D5 Q1 [* e9 S
  667. //        }, G% i2 i6 A% D; g+ u* B
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);& `! x7 I' u0 Y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & j) L5 j9 Z5 K" B: R5 G% w7 h
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    8 o5 I. p- C/ g  _0 k. i1 q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( V" P! c6 `  n7 f
  672.         for(i=0;i<240;i+=8)) F: G! D8 T9 B9 s7 p
  673.         {
    # G/ v$ |3 H& _' [  h8 O% U
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " H* H5 V. c# j- ?/ ?! P
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);( \7 D8 b2 Q3 w; I; q
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- E( ~% g4 q2 M" c
  677.           Sleep(33);
    2 H) E0 L( J$ W
  678.         }
    - d7 {) ^( s; s, h( m* x
  679.         Sleep(1000);
    8 c3 Y+ u  f4 C
  680.         for(i=240;i>0;i-=8)
    + @5 N6 `% A3 y1 i, v' h2 r- z
  681.         {' B. H! j* W  g4 I2 J# l
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # a6 {0 V* ?2 w. v3 a4 z/ f
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 B1 G" x$ G+ T3 Y
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);9 @! M6 G; i: d- J
  685.           Sleep(33);+ |' p7 a& E! h3 P4 f1 m
  686.         }4 l7 _1 [3 e! a5 o2 T6 A
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);9 r5 Q# e: Z/ o/ _# b9 m% s+ @: }1 O
  688.         dlg->ReleaseDC(pCDC);3 d3 I$ M/ y" _/ h3 _2 V
  689.         DeleteDC(hdctar);& a" w, `0 L; b7 }" c$ j& Y6 y
  690.         DeleteDC(hdcsrc);; P) X4 B. Q% b! n; u8 T7 K7 M
  691.         DeleteDC(hdcorg);
    9 R* S' d; h4 r6 c# T4 Z6 m
  692.       }
    ' u. O( T+ `8 n( e5 O
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);4 Q3 n5 ]; K4 ?$ B% D
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    : R8 \5 B) e  |+ d- k9 \
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 N) y0 n4 o2 d- O
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( e8 p; w( r0 s* {/ U
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' Z' \* M6 J1 S9 }/ H  \7 l$ u
  698.       if(!Dn.Connected())
    $ j: |4 L( E- |4 z% S
  699.       {  ^! |8 k7 c+ S  g6 L( q* N/ i0 r( K
  700.         dwTotalFiles=1;
    2 u9 U: m8 F3 b' X
  701.         dwDownLoaded=0;
    0 ~1 b* I6 J6 _) u3 B. P
  702.         bSilentStep=TRUE;
    5 n5 e% s* R6 I9 z3 O; y
  703.         bCompressed=FALSE;
      A$ t' u; H* H, q
  704.         strExtLocal.Empty();
    ' z" b$ v1 v7 N
  705.         strFullName="readme.txt";
    7 w4 E) r5 o- W; H9 k
  706.         dwProgramState=AP_CONNECT;& Z: p9 Q7 D, ?! X7 r5 D& j; `# Y
  707.       }
    8 G1 {8 I5 G& J7 M) O  G
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();; l4 J  W# M. g8 @$ u
  709.       dwStartUpSteps=2;
    8 ~( O4 e9 [: c8 ^
  710.       break;
    & x  {% G! }  d5 Q: e
  711.     case 2:
    ' e& {: O' e# z/ o
  712.       {  H/ d+ s* v9 H
  713.         int iEOF;( b- X, h1 R8 q- |5 S3 _
  714.         FILE *fp;# I5 f  |7 @$ d% f- \8 m
  715.         char szString[512];2 {5 w, Z7 [7 \2 H9 m, p+ A5 f' g
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    / m1 C3 C6 \  M( d; @0 D8 b
  717.         if(fp)
    4 j8 Q! \; |, ]* k( q
  718.         {7 j: g3 \& E  U2 M; B! n
  719.           do5 t7 p$ ?# P" c) f4 U
  720.           {
    ) J7 f) H0 _, u& l+ g- x# b" S
  721.             iEOF=fscanf(fp,"%s",szString);
    6 h. r9 W8 U& a  L4 a
  722.             if(strlen(szString)). J9 p) L% B* l! W6 I( l% O
  723.             {
    ! @1 X, ?+ V2 Z3 @
  724.               if(bFirstChar)
    + U& J8 @% a0 j" A* {
  725.               {
    ) G' x. }! ?; A" A. g, s+ z7 u
  726.                 bFirstChar=FALSE;
    5 {  X6 j2 i9 \) w
  727.                 bConnectIsBig5=FALSE;; V& Q9 ]! M! Y" S& h
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;  K% j! h, ]% [! f( P
  729.               }
    $ l; S, N( Y! [/ q0 j
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));) v7 u( L( ^. _; i. J/ i. T& i2 [
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . M9 T" p3 J$ v. S$ s8 z
  732.               dlg->m_ListText.AddString(szString);
    - Y5 ]( ^% Y, B0 N0 W
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : s, z- k( K' M7 e. i
  734.               *szString=0;
    + z; ^" K+ y8 m; {( H: Y
  735.             }) ?8 a( ~& [' b( ^0 a
  736.           } while(iEOF!=EOF);6 |; ~! _6 Q8 z2 k+ |: g, V
  737.           fclose(fp);' q2 i! N4 h& K, y% i' S
  738.           unlink(".\\DownLoad\\readme.txt");9 o0 q! d: E& e. N8 Y5 K2 R
  739.           dwStartUpSteps=3;0 q/ A! r& x% S0 c4 \1 `
  740.         }& p7 W7 F" d+ \; R+ t$ p& n) y' I
  741.       }
    0 g& L4 Q; t: Z* C
  742.       break;0 g% d' G2 D# X& J5 Y& y
  743.     case 3:/ u! Y, J6 |! V0 @
  744.       if(!Dn.Connected())
    " O( _  Q% o6 z. w0 m7 g! a
  745.       {! u2 c. @% S( a7 H" p! @
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);0 Q5 s, M  _- ^3 C
  747.         dwTotalFiles=1;" ^" _1 X0 F. Q/ }+ d9 u
  748.         dwDownLoaded=0;/ a& p1 _. u4 z+ N8 A
  749.         bSilentStep=TRUE;# l8 G) n* |/ g: i
  750.         bCompressed=FALSE;
    3 B( E, N' [. v9 E% W- l6 J6 B
  751.         strExtLocal.Empty();
    8 c8 e, b' K8 I
  752.         strFullName="checkversion.txt";5 F! M% o" l) ]4 s0 u
  753.         dwProgramState=AP_CONNECT;' @7 g6 W4 Q0 O, S- A/ n
  754.       }
    $ y# L5 j. J4 j- Y
  755.       dwStartUpSteps=4;
    7 B( ~; O$ c/ }) _. R7 h
  756.       break;
    ) G# v7 D- I$ J3 N( q  I. L8 }# @
  757.     case 4:
    ) [. k( S3 X3 A3 n8 l. U" L
  758.       {
    0 ]& T3 P4 @: `5 A# B$ _8 t! T2 z
  759.         FILE *fp;
    3 P: P9 d) w  q# X9 g
  760.         char szString1[128];* u) l/ _1 v( C6 p& b# B# M0 s
  761.         char szString2[128];& q0 f- C4 x5 a/ x' }7 j
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' ?4 A3 _9 I- n0 w3 L
  763.         if(fp)
    : m5 p3 }8 M$ Q2 Y/ ]
  764.         {
    8 s3 y0 Y" b; P# d" j* t
  765.           fscanf(fp,"%s",szString1);4 x& |+ r; s1 W
  766.           fclose(fp);
    ) @/ C# V- x  W7 X  E, V- `4 P
  767.           fCheckVersion=atof(szString1);
    7 ?+ S+ {% ^3 _
  768.           fp=fopen(".\\checkversion.dat","r");
    ) ]* B& Z$ R% N6 |2 D' {
  769.           if(fp)
    * E8 v& ~  V" u. X: U: K2 z5 w
  770.           {  ~3 E  T& a! I& v8 i; z$ x* T
  771.             fscanf(fp,"%s",szString2);
    ) d7 ^) I+ s5 U2 q+ ^
  772.             fclose(fp);) x* S" S8 Y3 \- n8 N/ a  T
  773.             if(atof(szString1)!=atof(szString2))
    5 `: D6 X) ^3 o3 Z, A1 i8 L6 s! p5 o
  774.             {
    $ y2 u7 H+ g5 E7 ^$ {1 e
  775.               if(!Dn.Connected())6 B: a) i0 X. K6 p; r" b4 n
  776.               {
    & n/ Y) b2 p3 ^# u  ]' z
  777.                 bFirstUpdate=TRUE;
    & y( Q7 Z+ Q! D; Y+ e
  778.                 dwTotalFiles=1;; t2 n# d- W* j  E& l; {6 M
  779.                 dwDownLoaded=0;
      b6 e- Q. e) N, E: C
  780.                 bSilentStep=FALSE;/ ~. y2 }) x2 H7 S( }# d. Z5 n8 o
  781.                 bCompressed=TRUE;
    0 R# ^0 K- u4 @2 v4 S& M+ A" b3 w- g
  782.                 strExtLocal=".\\DownLoad\";, \  V# ]3 ~  u! |/ U6 I) n& Z9 {
  783.                 strFullName="update.txt";
    2 o5 Y* {0 w7 T. }/ w! _
  784.                 dwProgramState=AP_CONNECT;
    8 p+ I+ a2 l6 j, p
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 b" [3 c0 p# v8 d9 m  q
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");+ ]1 R+ q5 z% u- R6 H9 Z# L
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : `: F6 ~' M% T2 C7 g
  788. ) }2 t: b/ j8 u$ ]& m
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* y! |" ?9 A  b+ J4 V& X5 }
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    4 B6 j+ `7 T0 F# b$ f- c
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)- {! k, `3 I" }8 y2 q) Y
  792.                 {
    - c) y/ x& G9 g. r& n3 {6 V* r6 A
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");& z! m/ J' m  I: i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ) ^1 v% ]" R* W. _/ x/ y
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    - Y% s/ U% A; o( ]+ C
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " i0 X! K& ~. p3 b

  797. " \3 m7 k! \3 X9 @* ~
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) q3 `' }7 k# c% [- C. D  }7 o
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 N" S' K. R. {7 g
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    / Y& _4 _2 u9 P
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 F! ?; s  l0 @
  802.                 }( J  H& y' e% `5 P$ f
  803.                 dwStartUpSteps=5;+ M" k9 H- l) ]1 |
  804.               }- T; O$ }# P3 ~0 ^+ W
  805.             }7 ]$ z% P/ ?/ Z: W
  806.             else9 W4 P" ?% y2 @" x4 C1 Y9 a9 q
  807.             {
    & B! @% I6 b# v  E+ J5 k7 u+ b
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ( `1 C  _6 q3 Z6 ^1 w# K4 N
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 ^; b& w; a0 K) ^; ~( D" y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    " f6 l# P! }! ?% G3 i' f
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");( ?6 l* z% \2 s# }2 C
  812. ) C- O! r( v9 P6 ~2 ], J) V
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% C2 l, b4 T6 j, ], A
  814.               dwStartUpSteps=99;
    ; X. L! T2 O: u7 ~6 c
  815.               bFinishUpdated=TRUE;( f& |8 c  z3 R& B1 ~, c2 h
  816.               bCanUpdate=TRUE;
    0 {  x6 @. c$ y# }+ K; \8 v! \
  817.             }  s0 W. R9 E9 w* K7 B* O$ a/ f) {6 s
  818.           }3 \  {1 ~3 s, Q- Q! y* g
  819.           else7 V( S9 u7 R, [1 F, J
  820.           {* S# S5 ~5 F+ h) }( _& j3 ?
  821.             if(!Dn.Connected())" R% [. k7 V$ L$ W" }* |
  822.             {
    ) D' M/ s0 ]+ K) i4 D9 U
  823.               bFirstUpdate=TRUE;
    * r9 y+ _) s9 p9 L3 E
  824.               dwTotalFiles=1;1 f% i! {  P( Z: d4 {5 t- _5 I
  825.               dwDownLoaded=0;7 |1 [  k8 @1 X  h2 `- T2 D1 J
  826.               bSilentStep=FALSE;
    - H1 [% [, ?6 F( W( N
  827.               bCompressed=TRUE;
    6 m& O4 E# P5 G% W6 f" l5 s, B
  828.               strExtLocal=".\\DownLoad\";
    & q! E( s3 x. o& r' G. _  C' h
  829.               strFullName="update.txt";" c" @) {5 h: t7 Y5 ^" F
  830.               dwProgramState=AP_CONNECT;
    8 v: F" d" r3 f: d: O! u
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 E5 p4 Z, v6 H5 w
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , C4 W6 B( n1 x# B% E8 `
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");, B4 p/ d! B+ M$ B
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 T5 y- @. o, H! f* B3 ^9 ~! N
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ( \# h+ q$ g3 G9 E8 A3 Z6 s0 ?. H
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)% v) C: y4 `; }& }* y( l
  837.               {6 u; H* [2 K/ E( Y# M/ W; m
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");. |4 Y8 @) q4 L' f0 p
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");! k) ]) I. b9 k/ E: T2 x
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    6 ?  ?) ^0 t$ N6 a0 T
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ c5 ]" L/ [$ \9 Z( u
  842.                 / U6 Y+ H' P+ B- N: C4 i
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      o3 M  a* ~6 U. [6 J
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . P# e- z' S5 f- b' ?; U2 k
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");/ N( ]1 e; u- f+ c$ o9 [; ~
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % u8 F) q2 ~( Y6 L- t& L. E
  847.               }- I$ M6 P2 l- i/ I+ s. I
  848.               dwStartUpSteps=5;
    ( N8 d6 i* X% V# W
  849.             }" l" v9 C' ]/ W. [; i1 W8 D0 ~" E
  850.           }
    7 R% j6 A. [3 t1 x, W0 q
  851.         }
    * m" x6 v1 K4 P
  852.         else
    7 c: @" S, G+ S" B- p/ [7 T
  853.         {
    4 H3 c0 j( K% N1 ?  a& @
  854.           dwStartUpSteps=3;0 T8 ?" }1 z! K. H4 L
  855.         }
    8 L. `8 o$ Z; M3 ~* u
  856.       }
    2 x0 O# j( h; y0 G( N
  857.       break;/ ~: H# \2 F' O
  858.     case 5:
    4 }. z: O/ u$ w6 h$ P$ m& n/ W
  859.       {$ I1 H0 a; Q" Q* ?; Q
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    , D2 H( W& b; E- K/ P9 G. n  w
  861.         {
    2 o0 Y  \, k& u. h( H0 q
  862.           int opt_overwrite=1;% n% g/ Q$ W4 u
  863.           int opt_do_extract_withoutpath=0;
    & [+ g$ d) a8 Q* `4 F
  864.           unzFile uf=NULL;
    2 y+ F$ c. F6 {* H* ]5 k

  865. 6 h5 v- q0 y; W0 X
  866.           uf=unzOpen("Wsa.zip");
      k% f: G/ e1 K3 ~' C5 Y& @0 A
  867.           if(uf), ?* l$ X- A; [" G5 W% h5 A
  868.           {
    0 P% q2 I: ^0 p7 {4 D4 [
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 {! P) K3 t" j0 @& d" ?
  870.             unzClose(uf);
    : r$ k8 b* L6 Y& E( l# `7 ]) S& S/ X
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    % `. b7 l2 s7 X: @3 I& W6 _
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");4 J4 t* E2 K8 ?( c
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");' u- Q1 s. @- w' S: `
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " d5 z3 a( m9 ~8 j4 ?, _
  875.           }+ t$ t' o3 Y- p6 L" c: e, {6 O# H
  876.           DeleteFile("Wsa.zip" );. ?, v0 [% ~, q
  877.         }
    ' n5 ]; r) O/ x( i4 X; h) D) y

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

評分

參與人數 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-7-18 10:15

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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