找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
& L" [0 Q- L" u) z
  1. / RevApp.cpp : Defines the class behaviors for the application./ M1 J. M: e& U# @
  2. //& E! j9 l: F$ i" X7 j
  3. $ M' P! n# Q3 w( q9 j3 Y9 P, u
  4. #include "stdafx.h"
    % |9 F3 ?! j! M' Q1 k7 Y$ u% h

  5. 6 t' x% a9 a* r) @! \: Y
  6. //#define UNICODE
    ; }% B0 \% K8 M. x
  7. //#include <gdiplus.h>) ]) b5 O1 Q/ @7 W* G; f4 ~
  8. //using namespace Gdiplus;
    1 c2 I! C8 z# F9 q, y6 T$ R
  9. : f3 t, V- m, X$ I/ ]
  10. #include "RevApp.h"
    . V; r" W# {! [9 w4 |9 b' ]* B
  11. #include "RevAppDlg.h"
    $ U$ _; b8 g; q5 |, G, e: u; {

  12. ! G9 Q- B7 M" p( @4 I; g
  13. #pragma warning(disable:4786)' z* b/ x% [' x4 S9 [: L* p
  14. #include <map>/ Z9 O  @" g- ~: |
  15. #include <list>' \) A& |$ a3 z, n
  16. #include <direct.h>
    ! y/ M3 u& u2 k* i8 U; U# k

  17. ( U# c4 V' E! a: h4 M& t& R' H
  18. #ifdef _DEBUG
    " p$ N( z; ]. g, f( E
  19. #define new DEBUG_NEW
    - \( k4 a' I/ F; s) b+ b
  20. #undef THIS_FILE! j$ O+ N7 a: h' J, }
  21. static char THIS_FILE[] = __FILE__;. o5 i0 F$ g' i; |
  22. #endif5 @. j; p! u, L9 n, i
  23. #include "SkinResDef.h"
    8 E) k, L7 M+ m4 a( ?6 k
  24. #include "ChangeBG.h"
    7 w: @& G  d3 g! g
  25. #include "AFXINET.H"
    6 A+ ^/ a( w# b) m

  26. $ ~0 ?3 ^  G8 _7 m
  27. #define TRADITIONAL_CHINESE 0
    . s9 C+ J) b& D4 {( N9 D
  28. #define SIMPLIFY_CHINESE 1# L0 W- {; r, m2 }
  29. #define ENGLISH 2
    # M6 G, L' w" z; }$ {) x
  30. int m_iLanguage = ENGLISH;5 @0 \. k) [) S! k
  31. /////////////////////////////////////////////////////////////////////////////) @6 ?$ s/ e: c3 l
  32. // CRevAppApp4 q$ d" V8 l8 ?' f2 N5 k% t
  33. 3 o# A4 V6 K8 L, k4 h2 U
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)' {7 [0 y6 t7 y% b0 W2 A) y( }
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    . f4 p* `) I. J
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.) J5 R# @: ~: h6 p, {
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!9 p# z0 a- s- r  O- N! |( m/ \0 e: \
  38.         //}}AFX_MSG
    & K  k$ ?+ c. ]- B3 {
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    , m* i& I9 S- i$ f, k" v, n
  40. END_MESSAGE_MAP()( v& t+ p' o" a6 q1 [: L% o3 l

  41. ( p  S7 O! X1 T3 ?' L5 H/ Z; T
  42. /////////////////////////////////////////////////////////////////////////////3 O6 x+ f0 n9 y9 [- D& e0 @+ x
  43. // CRevAppApp construction" i5 H# Y  t- @. Z. m; {, u
  44. $ M0 U! i/ s! ~8 K0 [5 d) i
  45. CRevAppApp::CRevAppApp(); ^/ l2 y# V% p7 i- h5 D
  46. {
    : b5 b) e( D. K! J  X; `
  47.         // TODO: add construction code here,4 |9 ?% |' e9 b. w; [
  48.         // Place all significant initialization in InitInstance
      l8 i) f8 E: _5 f
  49.   bDisplayIsBig5=FALSE;
    5 N9 Q4 h) S9 Y/ q  b6 x
  50.   bRestartUpdater=FALSE;6 \( ?3 k0 Z5 x& y1 w+ B) E
  51.   bFinishUpdated=FALSE;
    % E: G# Y" m% W& B" P8 Y9 y2 k
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;9 k/ ~6 {' |4 R
  53.   InitChangeDataBig52GBKS();
    5 [$ B: h* X  q; o& F$ S  A7 M
  54.   InitChangeDataGBKS2Big5();' g/ f/ H4 T- [. |, H9 a
  55.         //+ x5 ]0 \( p2 o: L0 M
  56.         bClickRunExe = FALSE;
    ! c( E4 \1 g  Y; }1 R
  57.         //4 ]+ l" K: r1 W- t1 \
  58. }0 q$ A5 r0 \# c8 s
  59. $ I: `4 N/ L& |; [2 q
  60. CRevAppApp::~CRevAppApp(); b5 ~  E, ^) r) Y; P% U) w
  61. {
    + b# R# |7 Z- b) X% C8 L
  62.         // TODO: add construction code here,  y& }( G, t+ ^' Z) p. H4 D
  63.         // Place all significant initialization in InitInstance* E0 h5 D3 Q8 w9 ^
  64.   EndChangeData();
    . X3 d# [& K% O$ y6 q) |" C6 l/ k
  65. }- [6 s( e& ]1 z+ @& K/ ?9 T8 v
  66. 3 S" l" {7 ], N8 v" c
  67. /////////////////////////////////////////////////////////////////////////////
    & L" }( l! n  W
  68. // The one and only CRevAppApp object$ V9 O/ e! ?5 O
  69. 8 A- ~% z/ \: V) B5 C4 I
  70. CRevAppApp theApp;! S6 ~: f" c" T0 n# M
  71. ) U# h* _& {% p# \
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    6 B8 ^6 Q4 q! q
  73. {# E5 O7 l1 ?7 Z  L+ u1 @
  74.   int iEOF=0;8 e4 ~# ?/ G7 l' `5 i  b! k
  75.   char szTempName[MAX_PATH];' F) b4 X' F' R6 P4 i: e
  76.   *szFileName=0;
    5 M- B" h$ _' j4 z4 k' j7 R
  77.   iEOF=fscanf(fp,"%s",szTempName);
    2 U0 r; S2 Y7 o2 e
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')- S2 h7 D: ]$ D% ?- I  E8 p
  79.   {
    ! L0 _6 n  t+ E/ m, }
  80.     strcpy(szFileName,&szTempName[1]);
    ! N. B6 Y8 n# x$ M5 s
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
      m4 \; F1 `9 R* e! W5 B
  82.     {
    $ z, J" r5 h$ a+ B' U+ e2 i
  83.       iEOF=fscanf(fp,"%s",szTempName);7 i0 N# s0 B9 m3 F
  84.       strcat(szFileName," ");5 H$ W4 Y2 ]7 P2 R( P8 |% u
  85.       strcat(szFileName,szTempName);; H, v. }; X, z2 a
  86.     }
      s3 p) D' U& l5 Q) p9 K
  87.     if(strlen(szFileName)>=1); u* q# v% b  s; |' x# ^: A
  88.     {
    2 Y6 g# @9 m8 y; A$ H
  89.       szFileName[strlen(szFileName)-1]=0;
    & I/ d, M3 A6 f, N- R' j0 u
  90.     }
    + G5 b+ L& r, Y! a7 ]
  91.   }) j/ f3 S  E! n  A8 C0 g
  92.   return szFileName;
    % o/ P$ u' {0 q' I* a
  93. }8 A5 M. w7 C8 g8 t( |: G/ {7 v( |

  94. . ]1 D/ o+ \! x% {& i1 b
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    - }5 w3 t8 A" l6 L' S2 M5 y+ ~0 q$ B
  96. {
    2 {' U6 b0 E+ \- M
  97.   FILE *fp;
    6 I& ~6 Q0 |2 w) X& C
  98.   char *key=NULL;: _# r5 ]% ~  t% h8 z+ F: N$ i+ _# w
  99.   char version[MAX_PATH];
    8 y2 n* S2 T, H- d5 q: y6 ^
  100.   LPUPDATEFILE file,olds;
    8 Q# w' S$ E! `  W8 J
  101.   std::map<CString,LPUPDATEFILE>::iterator p;' w# W' H7 [# u/ G. e: ]
  102. ! l' g( |! V6 x$ B- r) Q
  103.   UpdateList.clear();6 U; u) `2 N- c1 r2 o! K# i
  104.   UpdateFile.clear();
    $ n1 I6 y; T  q4 C; C
  105.   if(GetFileAttributes(filename)==-1) return false;* I6 {; ?# z" g+ w$ i7 |% I5 U
  106.   if(!(fp=fopen(filename,"r"))) return false;
    4 C& n, K9 a0 T+ V. S, a$ I- x7 h- q
  107.   fscanf(fp,"%s",version);  T9 e9 Q: y! a/ G7 M
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ) d; z4 s) Z: q
  109.   while(fscanf(fp,"%s",version)!=EOF)/ T  h, O' d5 E7 Q1 ?" ]
  110.   {1 b% P( m0 q5 c5 ^3 i2 F; i
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & |) B) \6 L* ~
  112.     fscanf(fp,"%s",file->path);
    6 _. J- Y, J$ X
  113.     ReadFileNames(fp,file->file);) t: E, W; S# @- @; v/ E
  114.     strcpy(file->full,".");5 L! a" \1 X4 c9 s
  115.     strcat(file->full,file->path);+ d( y4 e# F: V" p8 W" s! y
  116.     strcat(file->full,file->file);
    3 U7 F# q$ d6 d0 j/ G, G2 Q" `
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()), ]# l- O% y3 r$ o* W. l( u
  118.     {
    $ a: G1 b! g5 e( n. e' ~$ {3 o
  119.       file->vers=(float)atof(version);
    1 }/ e0 H7 H* L5 \  v9 s
  120.       UpdateList.push_back(file->full);
    # z3 @8 [$ ^8 W
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));! M# h( R* g( \, y& Z8 U. J
  122.     }  X$ a6 |$ W6 c8 |; F
  123.     else6 B. z7 I* D! @0 t8 v9 ^
  124.     {
    7 Q0 S$ b( c9 c7 N. K5 ?8 q
  125.       olds=(*p).second;
    ; m8 `/ c! C0 A7 ?# m2 h# ]& N, ^
  126.       if(olds->vers<(float)atof(version))
    - a/ |# H- P* s/ O) F8 e; ^1 p- {
  127.       {, B$ }- R/ P  A+ o; u- J: z0 C1 p
  128.         olds->vers=(float)atof(version);
      I6 m. k/ E7 f5 E
  129.       }# i, H1 L3 p; w; [. v% [3 E
  130.       free(file);( g! t2 \2 i6 [  X) z, a
  131.     }  C4 L4 p% j; Q5 T; b
  132.   }* A/ R/ U; R: Z9 V+ `
  133.   fclose(fp);
    + @' x& ]* u  X9 P7 t4 Y6 L
  134.   return true;
    " a0 ^  q* U. n  }1 Q7 g* l2 H
  135. }6 p) i" r+ R( {, W

  136. . r6 ^8 b6 O5 n2 S, V( z; d" B
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)/ u% }1 @/ V" m5 c" ?4 D
  138. {$ |- J& d9 o. F
  139.   TCHAR  szFull[MAX_PATH];
    0 B& k, j8 Y. P' ^# `7 H' }
  140.   TCHAR *token,*inter;2 O( }9 K! X$ @& v* s4 ^
  141.   *szPath=0;- H( |, V# ~8 m9 v; J) C5 Y! K5 o
  142.   strcpy(szFull,szFullPath);
    / b' N* A, G+ l0 B3 P7 ^) b7 o
  143.   token=strtok(szFull,"\\/");
    ' T3 O2 r- P8 u& W
  144.   inter=token;
    9 w- t( ?/ S% l
  145.   while(token=strtok(NULL,"\\/"))
    - \; B1 l2 n% D$ u! J6 g
  146.   {
    7 Q# z3 _  ^, H/ S: w
  147.     strcat(szPath,inter);. _3 I% j0 e# ^! s
  148.     strcat(szPath,"\");
    $ W% K2 c) s. [+ C
  149.     inter=token;
    / T/ d/ b- Z; O4 \) j' X+ V
  150.   }
    / [+ p. a  c* T  u: f8 q2 A
  151.   return strlen(szPath);
    5 ]. n( l" v2 N$ C
  152. }0 P, U' H4 j) m1 }1 H; h6 S

  153. ! O) s' v0 E0 X7 M2 w
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase). j1 x0 [4 b, h9 A% ^
  155. {6 d7 x7 I* F5 u, P! t3 l
  156.   DWORD attrib=GetFileAttributes(Target);! Q+ |9 P9 j: u! @, k
  157.   if(attrib!=-1)/ o$ ~& x$ ]1 l
  158.   {
    % X# X6 j2 a) `% ~5 p4 h$ B
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))2 F; B) O; O2 G4 N8 A+ ~% d8 Q( x
  160.     {+ V' A2 \( i& X5 P. b1 t$ ]
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);* S2 o( p' V- B% [' B2 \
  162.       SetFileAttributes(Target,attrib);
    1 T6 P7 z& z+ ~; l! ~- V
  163.     }
    1 i( y9 {5 f7 y  {0 l4 a) v
  164.   }3 B# u4 n( Y. x6 A5 j' A
  165.   CopyFile(Source,Target,Erase);
      M# E' O( N, a6 U$ R2 l. Z+ |
  166. }  Y. a) D7 {- z" c5 ^3 q2 v
  167. ; K7 T7 S8 b1 j
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)  K. |( K$ X, t$ w4 i
  169. {/ u4 Z/ ~1 t/ D. p5 N9 i- R
  170.      FILE *fp;$ g$ f; K0 o' Y" B7 I# t
  171.      char  szBuffer[8192];6 ^. d4 F. i" x( S& k
  172.   va_list  argptr;4 ^9 E! ~  \3 E9 k5 K

  173. 6 L: P8 Q+ Z( u4 Q
  174.         va_start(argptr,message);: T$ h+ \) z1 j) D" C3 {/ B* r. X) i
  175.         vsprintf(szBuffer,message,argptr);( d( ^% P  y7 x5 {# x% w
  176.         va_end(argptr);
    ' S# p1 I/ E2 H
  177.   fp=fopen(FileName,"a");* x  F5 D6 O2 t: {# {. M* x  H2 X
  178.   if(fp)
    ! f8 h& h# S% R# }# Z
  179.   {
    ( z& ]9 y4 W# l/ ~4 h' ^
  180.     fprintf(fp,szBuffer);3 e  |# V3 [/ m1 _. B
  181.     fclose(fp);6 P! A* f* w. r+ R0 G
  182.           _flushall();9 _- W) P* P  p0 t8 k( @1 q
  183.   }
    : ?, l/ ~5 Z5 ^# l5 R
  184. }
    4 b/ _) @2 Y# n) f6 e

  185. 8 v* T% i& x, Y  e  a# w
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ! d$ i9 Q" ^. L: k4 B" ~
  187. {# u5 |! w3 ~* A# r
  188.      FILE *fp;
    1 ^3 G9 ~+ t# O: L4 Y* u
  189.     DWORD  attrib;; E3 A7 P0 t! B4 f* u( W0 u8 f2 D6 R
  190.   attrib=GetFileAttributes(FileName);- x- k1 B6 k1 f* C  t6 V9 z+ \
  191.   if(attrib!=-1); r! n" B: a- q7 s3 i
  192.   {" t4 V3 S; a8 F* x2 j/ G; G) G) h
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);4 o5 p9 Q9 q6 j, K* s# ^
  194.     if(!SetFileAttributes(FileName,attrib))
    5 `! p* h6 l) P& @
  195.     {
    # M$ {# g( e4 \- q3 X
  196.       return FALSE;) @4 |" P7 O  n: q$ C6 I7 X' T1 A# v
  197.     }
    7 H. O* `  W* y' _: h
  198.   }
    % b. s0 ]% F3 @; m8 W4 F4 j0 _5 Y
  199.   fp=fopen(FileName,"wb");
    1 G5 U) E2 e6 H$ k
  200.   if(fp)+ K0 O1 D& i( R$ }/ q
  201.   {
      p# m+ a% T* l, Y7 _- R0 ~* F
  202.     fclose(fp);9 F" c4 M' B' c( B# F, [8 Q
  203.   }
    & N9 l7 d5 E, P1 A& w7 S* |6 x
  204.   return TRUE;- ]" G; Q5 n5 D1 x% R
  205. }
    : v' i  A6 u, T
  206. 9 d* [* _/ b- \5 g# a% U
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    $ F, }4 D2 l8 D% g- }# {
  208. {! q; |8 Y# t4 l
  209.   char filename[MAX_PATH];
    0 D% T2 L- z9 ?0 M! f
  210.   LPUPDATEFILE file,olds;( M0 K' Q, P8 Q& ]$ u- F- T4 s
  211.   std::map<int,CString>::iterator i;, i% x- }/ u, F4 a# I- H" [
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 _; n$ V8 _' t
  213.   std::list<CString>::iterator l;0 C0 i* S/ \$ C

  214. & W9 Z1 W" O( ^1 i2 F
  215.   if(bFirstUpdate)
    8 Q, K6 `, P  }) T- k, z
  216.   {
    ; i& [) Q, p" \. N$ ]
  217.     dwCurrFile=0;
    - P/ n1 M2 I" K0 H- N9 g. R
  218.     bFirstUpdate=FALSE;4 Z3 X' r  `# L- _" f8 [- J
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 K4 f% g; \9 P7 Y1 P
  220.     {9 l, {1 p/ |, o1 t
  221.       dwTotalFiles=UpdateLocal.size();9 r' Y  R7 G2 o" T! B
  222.       dwDownLoaded=0;
    2 w4 X2 [0 @4 _0 |. \8 M; ?  y. {& ?
  223.       bSilentStep=FALSE;! l9 _4 E/ C5 N
  224.       bCompressed=TRUE;
    $ r! |: d( H; j+ a& O3 F, ]% f1 W
  225.       strExtLocal.Empty();
    ; J5 h! V8 w7 S% y
  226.       strFullName=(*i).second;: o' a; }! Y9 z. }; R* ]
  227.       dwProgramState=AP_CONNECT;/ u) M3 y; T' q( D% h$ h
  228.       return TRUE;! C7 a3 N) U1 K# T* c  P% P  {
  229.     }4 r/ x* I! }* n5 m# s
  230.   }
    , a" k# D. ]; ?; l2 G" u5 n
  231.   else if(bRestartUpdater==FALSE); A2 i( u0 S. \$ Z" f6 L" b
  232.   {
    " z4 e* D6 j" e) W' w, p2 E
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())3 d' N8 B, c6 C8 \$ \7 T& p2 F
  234.     {' `3 {* O3 M8 z# J* G6 o
  235.       file=(*p).second;5 l/ o. X1 W; O: Z
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' x" U5 t, u8 g9 r: b' Q
  237.       {3 j1 A+ w) W" ?2 w
  238.         olds=(*p).second;9 F4 y" L1 B0 e
  239.         olds->vers=file->vers;
      ^4 |; J: P: G9 ?- k* @& a
  240.       }- m8 q+ E7 ^0 R( v
  241.       else
    $ O9 O' Z  R$ r2 t2 E6 V
  242.       {
    ! y" h2 M: n/ J5 @
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 K4 ]8 C- h5 ~* ^
  244.         memcpy(olds,file,sizeof(UPDATEFILE));: Z1 I0 f1 N5 q/ S; ]
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));8 q+ |. L7 R, l  B  h8 J
  246.       }' v( q$ a3 h5 c0 ]+ {
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ; u, v% |4 d6 x6 l( ?# |
  248.       sprintf(filename,"(%s)",file->file);
    0 [2 a( ^# a( J0 c8 I3 k/ Z, ~' E
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    . X: h. ?' W/ T2 k, S6 z! y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }; U0 n: ~% W* M9 I6 b* H, Z
  251.     }7 E* l# s. v( U  x' t
  252.     dwCurrFile++;
    ' X) v- u+ C* G3 z3 Z# ~
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 B0 h# l& b0 A8 L1 F+ b
  254.     {2 x  y5 }; Z% \* X' y7 r+ P
  255.       bSilentStep=FALSE;& l. I) U3 }5 U7 e* I
  256.       bCompressed=TRUE;
    1 [& O* o' v: O1 v9 Q% }3 _) x/ E, s
  257.       strExtLocal.Empty();; m2 z( `9 h) X: Y1 k9 m
  258.       strFullName=(*i).second;, Y# _6 v# M# v2 f9 n
  259.       dwProgramState=AP_CONNECT;7 S. o6 J$ T1 S# R1 g% R# ^/ Z% b% X
  260.       return TRUE;
    8 t; Q: `$ b' p; o: S' _
  261.     }+ ^7 Z0 P* s1 `% X9 Z, B
  262.     if(!bRestartUpdater)
    9 G+ x) q5 Z3 d4 `1 n
  263.     {
    , d. V( X* u+ X* I  [3 o. T5 z
  264.       int iCurrSize,iFileSize;
    7 x* L6 v! o/ H4 q' I
  265.       iCurrSize=0;
    ; w8 ~' ^/ X6 o3 K
  266.       iFileSize=UpdateList2.size();; f4 _  C  e! S- S
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");& l% o# P. V# p6 B* y/ i
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    7 j: f+ j0 M$ y& Q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");3 s  R; \4 m6 `  k) t# ^2 d
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      ?3 |% ]& J0 n6 q% Q/ t
  271.       Fclearf(".\\update.dat");/ p8 ]  b6 L% ^- ]# B9 ^2 D
  272.       Fprintf(".\\update.dat","Bloodyf\n");+ X3 i2 C) r* L. L. u* `
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 h& {6 G9 g# i9 A! y
  274.       {
      I3 W# L" Q$ d1 U8 j! f: X
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 e8 P& n( L+ m
  276.         {
    ) j3 n/ o$ o, X* Y
  277.           file=(*p).second;
    7 Z8 H0 ~- T# N. c! l( I0 [- J
  278.           sprintf(filename,"(%s)",file->file);
    4 G$ `* u" j% z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, V7 E" H7 U) r, N2 G+ R/ T4 M1 L) t7 E
  280.           iCurrSize++;
    5 R$ U) z8 A5 O5 P2 P/ P
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));6 Y- I! W# X" n# K# {/ R/ t
  282.         }
    % ~9 E, N2 y! i* k% _
  283.       }# U  y! [, z+ u4 J
  284.       unlink(".\\update.txt");7 S& p  a  `( j2 O: R& x, M( {
  285.       unlink(".\\update.tmp");
    5 m; o( z' f7 {. X$ |" T2 a3 q
  286.       Fclearf(".\\checkversion.dat");" ~4 \$ [/ ~, R6 g; b
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);6 o. _' t) k' _, r5 Y5 A- L
  288.       if(UpdateLocal.size())- d4 H& r; s1 z8 }- A7 S% I
  289.       {
    7 O2 \3 ^7 m& Y* u1 C
  290.         UpdateLocal.clear();" P! `6 [9 X8 Y% C5 H# ~. u
  291.       }6 J4 E8 l/ F0 R* \! m! B4 d' k
  292.       if(UpdateFile3.size())8 a; a1 d! f2 h/ {; U
  293.       {5 h9 A. @; J) x/ |6 N8 z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' m1 @/ d8 u+ F" z2 |# ?
  295.         {
    8 H; B( v* w0 i* A8 u
  296.           file=(*p).second;
    7 U9 E& B4 e, p4 B5 Y5 i9 f5 j
  297.           free(file);
    : q/ l0 Z4 H% c% c+ E6 t) ]
  298.         }
    / B3 N# D; W% M3 z) E. o3 L
  299.         UpdateFile3.clear();# _- d  u6 y* i9 D
  300.         UpdateList3.clear();
    , B9 ]5 v8 u0 a- ]
  301.       }1 Z) `% w; I; o3 o" S5 j
  302.       if(UpdateFile2.size())
    ) X2 i- @' x/ {
  303.       {
    " V- ]. G8 K/ U
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" e$ I3 v" t0 R0 r2 s
  305.         {
    # V& y  [0 E- N+ M, \
  306.           file=(*p).second;6 n$ k2 I' ^3 i
  307.           free(file);
    * q0 {  P  ?& @9 ?6 R/ A
  308.         }0 A; a: [9 Q% G$ G9 t) H
  309.         UpdateFile2.clear();
    5 e2 H2 U, e) h+ B! Z
  310.         UpdateList2.clear();$ B. j2 n7 m  v& m! u1 Q
  311.       }$ N  ^: Q5 n* O. D  o
  312.       if(UpdateFile1.size())! V2 s! J) q$ @& w  I; d
  313.       {) n6 y' D* t/ i  G& m4 D
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 `+ m' z7 y1 ?; \: ]3 f
  315.         {
    # z8 Q2 r' \- u7 @
  316.           file=(*p).second;% l* r# L! z/ v0 U/ y  @% u' X
  317.           free(file);
    5 _8 k$ P& a* N$ \* b3 ^% j
  318.         }
    * W7 `9 b/ |4 q4 b- |& ]$ a
  319.         UpdateFile1.clear();3 {: Q* q+ `- |' T( c1 B
  320.         UpdateList1.clear();% s' L, m+ m9 W: e
  321.       }
    7 P& d. @# p9 S+ i4 n# }
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 [& x$ @0 m# s; C
  323.     }
    / P9 S8 u6 {* p, n
  324.   }0 h- U$ F# u0 Q- K" c
  325.   return FALSE;, ~- u6 E0 j! i0 b2 Q2 L
  326. }! x# s; w* B+ J2 Q4 q
  327. 7 z, b9 Z$ x6 q1 ], a
  328. void CRevAppApp::ClearAll(void)
    7 M5 ^" o4 n7 x. p! }( a
  329. {3 l: N7 Z9 q9 D& }
  330.   LPUPDATEFILE file;
    ( R8 O% x# P$ z0 e7 e) E
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 W5 ~$ f2 F: _2 G
  332. 2 Q  ?" j4 v1 Z+ h, S
  333.   if(UpdateLocal.size()); O0 Y$ j1 d- G
  334.   {4 V4 _. O% s. _2 V1 y( b4 h
  335.     UpdateLocal.clear();
    * b' u  C' ~- ~# b
  336.   }
    $ M. c! P, J" x% }1 {
  337.   if(UpdateFile3.size())
    , r4 l! G! X) w# @1 l
  338.   {
    4 g& n; v# e2 v4 ]( c
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 D. l9 B, i+ R1 }
  340.     {3 p  X* D# v2 B
  341.       file=(*p).second;' @- x- a/ l4 w3 s" L# Q
  342.       free(file);
    7 u+ J1 B8 V) ~9 o  p
  343.     }  G, v! X6 [  a0 Z" L3 h" i1 K
  344.     UpdateFile3.clear();' u' l9 X: T' K+ U5 _, Y0 `( _* s
  345.     UpdateList3.clear();
      u, d+ R7 |0 N/ s- t9 D/ h
  346.   }5 e% l* w3 e+ ^! @- G* T1 S
  347.   if(UpdateFile2.size())* s' v' w' m6 h4 s$ |0 x
  348.   {$ Q' h0 q$ `. s) b
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ; Z  F+ M8 V1 s5 \, m0 W  S
  350.     {" k6 J: i/ x: Q* D
  351.       file=(*p).second;
    ) ?) Z7 a8 i$ d. |& q! o
  352.       free(file);
    1 I! [3 S' U3 B7 I2 L" l  _  u8 x
  353.     }
    # O1 [! u/ V! w& w  C3 A- W& r
  354.     UpdateFile2.clear();
    0 ]5 F- |) A5 M1 a! Y- e& j$ a
  355.     UpdateList2.clear();
    3 y- `  s: ?6 |+ ?
  356.   }0 L- }1 N) g/ k6 b7 G" |1 T0 k( y8 @
  357.   if(UpdateFile1.size())
    , r1 ~' S* ~3 _9 ~- a5 a
  358.   {
    " D( a0 N; i) Q5 J4 W8 x9 @6 r
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) B; S& C6 o6 V
  360.     {1 s0 Q5 ?2 P1 b
  361.       file=(*p).second;
    2 t+ b; }* \) {/ A- \7 e" V  M' u; y
  362.       free(file);
    ' `1 |, l. C6 u; q5 H* }% Q
  363.     }
    # [2 m5 d/ O9 H
  364.     UpdateFile1.clear();
    4 f- {  U4 m; L. H
  365.     UpdateList1.clear();
    + Q! g3 b2 \% ]3 ~+ k8 j/ P* k! o1 p
  366.   }* L/ X7 W  L; n& V
  367. }  # c, Q9 z- @. a/ I
  368.   
    . L+ o" r* N$ }& E( G8 g
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    6 y- P- |+ y# R% u; t# N$ E' C
  370. {
    ' q2 `; j3 Z5 \  d
  371.   int c;: y$ \3 B" f' A
  372.   LPUPDATEFILE file1,file2;
    * ?; B; l% p' X/ J3 l0 x
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
      ~3 U+ r! c6 i: }
  374.   std::list<CString>::iterator l;
    2 k" t: O5 E4 n9 i( J: d

  375. - U4 c" T9 O9 u; ~1 b3 z. X5 }
  376.   UpdateLocal.clear();
    2 u7 ~  z( f3 N* M# w, U
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    . [4 a, Z  _0 x
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    - H. B2 E% f) d
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);, N1 h" r3 K, f' o8 U
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    1 |( \. x+ W  K3 J# b, q! S
  381.   if(UpdateFile3.size())
    # L9 I7 f% Q7 m4 C! J# E
  382.   {
    6 k) u1 E4 a( p9 {  R8 `6 f
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ; X* F, a1 Y- U2 A2 T( K
  384.     {5 M  @  g, v! @, R
  385.       file2=(LPUPDATEFILE)(*i).second;2 Z  y5 P  Q& r0 p7 f8 E* S* x
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 o! s/ L& ^2 B: S) n
  387.       {  x; Y8 y+ P  u/ d
  388.         file1=(LPUPDATEFILE)(*p).second;0 n) F  {' W; l
  389.         file1->vers=file2->vers;" @( G+ e4 v. N5 V  v
  390.       }. V9 n) C, w+ ?4 z9 H" w3 P
  391.       else1 H$ u3 n: g/ l& z: \
  392.       {
    5 e9 W- i, B7 ?/ T, m
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% z: q/ h7 }4 f1 }# I8 l5 s
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( g! L, G" M5 S2 p: U. O/ z5 P8 X- c) m
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    & s3 W- `+ P8 G
  396.       }8 l* n' {2 u0 U+ |; v. g
  397.     }
    2 u8 X/ A  m% }7 V  s6 W6 L
  398.   }6 A3 h# k0 M' C" d( ^
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)/ e" q* a5 s0 j6 b8 w. Q2 F2 W
  400.   {% T+ d6 M1 D  i- R( M2 r, n( m
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())9 ]  y4 Q- H# c5 D- N6 Z: }
  402.     {$ |4 Z( x- @2 `( F8 g
  403.       file2=(LPUPDATEFILE)(*i).second;! e& E* r! g( w+ B( g+ T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * i1 K4 q8 `- o! z3 y- F" h
  405.       {5 u2 L) O& V' Y' w
  406.         file1=(LPUPDATEFILE)(*p).second;
    + v5 J3 Y* m7 b* y. k3 q
  407.         if(file1->vers!=file2->vers)% Y" b% V) X7 q1 ^4 n7 L
  408.         {
    . ^& r/ Q  s) g, [
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ X5 D3 V, u6 D& G* k' y
  410.           c++;
    ( I: b* T, N6 q6 Y8 V# }$ P
  411.         }
    " G3 |9 E, R9 y( k* r7 f) Q
  412.       }( I2 s, e1 h6 y
  413.       else% ^6 M3 G9 H) u# ~7 g- {1 a
  414.       {* t$ i2 B* L% r, ~/ f
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & T  d! `9 c/ W
  416.         c++;
    6 M9 k% D. m1 a3 m* `
  417.       }5 S% Z# n# b. c# z' s
  418.     }4 J% W' ]. c/ W! L, B. t/ F' p
  419.   }5 ?( O; f9 n+ C5 r9 ]
  420.   unlink(".\\DownLoad\\update.txt");
    & k7 D# F* K" |9 c  T3 v
  421.   if(UpdateLocal.size()) return TRUE;
    * \1 b8 I7 t9 @" R' t  d/ [
  422.   else                   return FALSE;
    3 r9 H2 D# E- u
  423. }
    0 w9 l& M' O- Q4 w+ V8 Y5 K

  424. ) j9 |. o% l: U, Y  g
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/", ]7 ]9 ~0 N9 k( ^; U) h/ Z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"7 u- E9 D: T( _( C0 Q; J
  427. * @; B# B( ^) _; q9 ]. N& N
  428. 9 M4 K( U. N( [+ \( \
  429. ( b  v" a* v$ K* c
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    9 C. A# P% ?! n: T+ F; z  q
  431. {% B( L2 Z4 M, B. {7 R; o) E
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;% X8 o, P% g  g% _
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - [- _2 C7 v# y
  434.   {1 e% T% {/ B( l: a% D
  435.     char szLanguage[50];2 z5 Y2 Z+ i" a
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      L( _1 m' \: h1 T, T& L( g# l
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    - D! W' r3 h+ h# P, q' W8 H
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * n+ g  X% z; B+ R9 f+ Z; L
  439.     else                                   m_iLanguage=ENGLISH;
    ; b" v, ^' W, Z0 j
  440.     char szRegister[100];
    3 U1 r: e- p8 @+ ]7 V
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % B' b- z/ m! s5 k. `0 m2 ^
  442.     strRegsName=szRegister;
    , S$ p& _7 Z# u) Z2 f' X. n
  443.     char szPatchURL[100];
    ! n3 a0 O+ p0 ?" E( }# p
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ E4 F$ Q8 Q* O% z6 U: P- G6 a
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 v7 Z3 U6 ], q& v' h
  446.   }9 X0 E3 S/ @! O3 b& B9 v6 _7 P% S
  447.   else& L9 G' n! {9 A6 o/ J+ x9 o- I, B
  448.   {
    4 [2 P0 J0 A2 w% ?) p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % n* N0 C; p  ?! \( q9 T9 r; c# d
  450.     strRegsName=DEFAULT_REG_URL;) r  e% Y% m" F5 u1 \3 @
  451.   }
    ( w& i! C5 G& A$ o7 A& ]
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    $ O  L4 ?9 u9 ?0 Q
  453.   {* S0 W' p+ s# F! P$ h; Q
  454.     char szIP[50];
    ' C& G6 T" t& R
  455.     char szDIR[300];( i7 ]1 s. L1 g
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))0 w, p& k! N; R* g
  457.     {
    ; V2 I6 w2 M6 l; m: a4 ~( k
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");( @9 K  e- f. J0 j' O" I
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    8 U7 C& d* l; b/ u
  460.       strHostName=szIP;
    & D4 }8 f/ J0 w$ L7 C6 {
  461.       strHostPath.Format("/%s",szDIR);* S9 M, K* x+ P; H
  462.     }
    ! f( Q- Z0 J+ M: h& n1 [
  463.     else
    / J! X3 b9 u0 H) S* F
  464.     {
    8 a* m2 O9 z" r5 x  e5 n: D. f: T
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); l' ?: h; Q  B7 J2 P& t, t
  466.       {0 m, Y' g; m8 `
  467.         char szLanguage[50];
    , Z- {6 c- F* `7 k/ [
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 V, h  U8 W0 u0 T1 Z& n  {
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * v0 }* N5 D. E% i8 t
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 h# z: v3 S5 z( V6 }
  471.         else                                   m_iLanguage=ENGLISH;1 Z3 k# z# y, ?+ s
  472.         char szRegister[100];" `5 c' d; S/ r% `
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! o! i) H  W* w7 ]' n# Q
  474.         strRegsName=szRegister;
    6 b4 U4 B! [1 X( b" o' x
  475.         char szPatchURL[100];: Q  k* z: ]1 T6 I
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 F2 r2 e, s: `: T
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ \- s3 C: t; S) c" ]
  478.       }
    " }6 l5 [2 m  ^) l$ G4 D* D( u3 A
  479.       else
    " w& A. q) b# X4 f
  480.       {
    2 a; `4 M2 p2 h- t- q! z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) v! @3 P3 P+ u: J% g
  482.         strRegsName=DEFAULT_REG_URL;* U2 ]3 Q* y* D9 m& `
  483.       }
    - V$ H' u1 g. f6 S3 Y
  484.     }6 _" Z3 `8 Y: E* m5 E% r5 ]+ O
  485.   }
    / g. z0 n6 O; _9 r6 m  T$ d
  486.   return true;2 F: }  p- h+ m' }4 ^1 n) B
  487. }
    0 l- J$ @( W. e+ V2 e9 p- x2 ]  m0 U/ ~
  488. ) q' R4 b# g7 J( H) m1 H
  489. #include ".\ZLib\unzip.h"
    ! S1 v, x1 b0 M+ I( i$ R* i
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    0 s3 N  I( F! H$ ~2 _3 I1 N" k
  491. /////////////////////////////////////////////////////////////////////////////8 W* n" J. a$ d/ M# {
  492. // CRevAppApp initialization
    & p' @5 }& V* K2 [* k

  493. % [9 v" y& M7 j( s
  494. BOOL CRevAppApp::InitInstance()
    5 v: L1 E  Z! Z
  495. {
    + `, z: r& |' V3 @# R
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];3 Y! \' W0 q* N6 x0 ^

  497. 2 A* Y& i" M- O5 A2 ]7 K6 m
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);' O7 {( ]) B' J
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))/ N4 o* d0 \& V2 q/ ^/ N
  500.   {/ _$ K" e$ v2 L! F6 C( w0 F0 x
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    1 ?( s6 b) U9 j7 c% `) j+ H9 G
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    0 I. K0 o: p/ O8 n
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" G! D, c2 i" S" N. U7 r+ y& v) m
  504.     {
    9 K7 C7 {9 k+ y
  505.       strcpy(szPath,szPathTarget);
    - y9 F' W6 B0 \  f* G! J
  506.       SetCurrentDirectory(szPath);, c: ^3 U" L; i$ K/ P$ s3 l4 f1 ]
  507.     }
    . Z" L* Z% W7 I. \7 O$ X& l1 g9 m
  508.   }
    ; E6 ^( ^: ~% v9 X% X0 R
  509. #ifdef _DEBUG% s2 c0 q: z, S0 J
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / y  \% z7 ^' B: S# a, B# }. A7 X. M
  511. #else3 H0 E! S( ^/ g3 \- o5 I
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) d: V! }6 }3 z
  513. #endif
    ( w( ~0 G& ?' M0 \% O: Y0 I
  514.   {
    # `0 T! F- G4 L2 l
  515.     char tempFileName[MAX_PATH];
    % t3 N& F" x, ?9 Z6 c& z& S
  516.     strcpy(tempFileName,szPathSource);; B9 R8 a$ z; @2 P1 ?
  517.     tempFileName[strlen(szPathSource)-12]=0;
    $ E* D) _. t3 @0 z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( H; e7 s6 ~. L! x* D- v5 \8 `
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    , E, r& D5 r+ L3 E
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    7 X) W/ Y8 ?7 \# ]; E5 ~
  521.     return TRUE;6 d5 M, |4 b! a8 l: h- `4 T: O
  522.   }
    # K$ e4 G( `: U0 y
  523.   // Nuke 0118: Delete run.exe: g& x- [% t/ P0 d0 u
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    + N- h/ @5 z$ a! u
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");  M: c7 I! S+ r( A, h  d! N0 S
  526.   if(!ReadCfgFile("Config.ini"))# Y0 d" H; q  f% `2 d
  527.   {0 s) I# }; [+ W7 R
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 k, R3 O7 r! B; Z4 B' U5 t
  529.     return TRUE;
    8 Z8 X. a$ I: A
  530.   }8 n% O% r( p. T
  531.   HANDLE mutex;
    6 Y5 H2 u$ h, J+ y$ A# W& x4 T
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    5 G" |% v% i8 S5 o8 C" P2 k/ u
  533.   {
    1 P- O: U- D3 \' G3 [
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ( x* m# X$ f+ {: F
  535.     {& p  V+ K, d2 T2 K
  536.       CloseHandle(mutex);; g1 s/ k6 q5 c) e+ C) W" T
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    $ P7 V, U, b+ g
  538.       return TRUE;
    ' t) b8 z3 {4 L+ D2 k, `9 B! W
  539.     }
    % A4 h5 _8 k& O" A$ V$ z- e6 S; E
  540.   }  / X' G% c( l' e* _# H) _& ]* m
  541.   CloseHandle(mutex);
    ' V, J3 j: ^  u4 f, |% d

  542. * O; _% q# k+ d0 e! V( j
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
      p$ }* T* i- l4 ^

  544. / @; }( s8 ^' L4 O- m+ X8 T
  545.         AfxEnableControlContainer();4 N% r1 x( @/ s
  546. - x% \  L! ]6 O) M
  547.   bCanUpdate=FALSE;0 x# f4 {4 X, r( Z7 _3 ~
  548.   dwStartUpSteps=1;
    - Y; l4 V2 n# O. K3 |  G+ ?
  549.   dwProgramState=AP_NOTHING;! w7 ~+ `* p; A5 N) T4 F1 o
  550. # n% [( P" I, K$ R( q
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    , q2 u) Z, t# ~' O7 O
  552. : r5 ?  M) `5 f
  553.         // Standard initialization
    # E6 U1 n$ {3 }% a. Z
  554.         // If you are not using these features and wish to reduce the size+ [5 p. C: r( ~4 r3 b
  555.         //  of your final executable, you should remove from the following
    2 t$ ^  z6 w7 \1 I$ G" @7 V4 f
  556.         //  the specific initialization routines you do not need.
    5 v4 N+ D0 k$ Y$ d/ A/ Y2 E
  557. 7 c: r" S! Y8 f; i7 y
  558. #ifdef _AFXDLL
    - L8 ]/ w, [* D4 n# Y! B+ W3 k1 t
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 K( E& B" m. a* s& O+ A( s
  560. #else+ _! d; c9 `8 d7 x
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    1 m9 i; [0 I: _0 l2 c+ c
  562. #endif, V; h& I+ {' B* f

  563. / x& a" K. g# j8 o( ?+ w
  564.   dlg=new CRevAppDlg;. L+ {7 z; l1 N
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ) b' B5 B2 t) H# z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ! W* [1 `5 {1 U" u/ X
  567.   m_pMainWnd=dlg;
    " ^  r, _( _) B: q2 H! ^

  568. & k! J6 d/ I3 ^! N7 ~' I
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    , U+ |6 k5 M- r" J4 N2 z

  570. : `- w4 Z, t; R+ ?! j
  571. //  GdiplusStartupInput gdiplusStartupInput;9 U9 H, M+ S( l
  572. //  ULONG_PTR gdiplusToken;9 n0 E1 x3 ^  j' z5 G
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);7 Y3 e6 M  T8 e0 W9 K

  574. ' w5 u+ ?) h- f: Y$ e' ?) T
  575. //        CRevAppDlg dlg;* R; R$ F  H# [8 E3 g/ j, S
  576. //        int nResponse = dlg.DoModal();9 J+ Z) Z6 N# _* S
  577. //        if (nResponse == IDOK)5 ^: }: T/ s2 u1 h% R+ K
  578. //        {  Y; I# g( S2 u2 ]
  579. //                // TODO: Place code here to handle when the dialog is
    / L* X6 O( o/ w2 K, }- R0 L
  580. //                //  dismissed with OK
    ; |# Y. z# a2 \/ {% u6 p2 q. k
  581. //        }
    8 Q! t8 `+ ]# [7 N  W
  582. //        else if (nResponse == IDCANCEL)
    $ D. e1 Q3 u; d/ p# A
  583. //        {7 A* p3 W, U  w. H! V3 @
  584. //                // TODO: Place code here to handle when the dialog is
    ( a1 P+ U2 `. }* f; j2 {7 P: N
  585. //                //  dismissed with Cancel
    ( t+ g3 N1 @" @: l$ _% W% c
  586. //        }2 w  ?  d7 S# P& d" X: ^  U1 a; h% w
  587. $ I0 N  e% l! `( Q
  588.         // Since the dialog has been closed, return FALSE so that we exit the0 J4 _) c% _( d& Y
  589.         //  application, rather than start the application's message pump.' H: o* Q" t5 L0 w) E& x
  590.         return TRUE;
      k( m9 D, e/ Q/ F- W
  591. }4 q, R! f( y) y
  592. * z+ n4 C: Y* m
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    " F. }, L: J; w8 e' x3 k
  594. {; Y' n* a9 w8 Q* F! m
  595.   int i;
    . e' p! j& p3 G- u, T. m
  596.   char *szRet;
    # @& A. v) m1 k3 J0 Z' p8 E
  597. % a: E/ h- l' g- U8 C- [6 i
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " \+ q% ?, `6 W' d! F/ j
  599.   if(sztoken)
    1 ^$ F" q% V% _+ M. N& A$ L9 n
  600.   {; I: p9 l5 ?7 [5 K1 |9 \
  601.     szRet=&sztoken[itoken];
    8 `0 e1 q4 ?5 c; H- ~, O# U, ^7 v
  602.     while(sztoken[itoken]). B- z$ i. x9 u0 O; W8 C
  603.     {$ ~; _5 T' R& C0 ^( S# ~. \- x  a
  604.       for(i=0;i<(int)strlen(token);i++)
    7 n4 N6 ]7 o  B9 n
  605.       {
    2 _; N* \4 {0 W5 d" ]; \$ L+ A3 L
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    6 q+ R* p' z. p. p& s; Y
  607.         {9 V4 g" t9 _, A" e
  608.           sztoken[itoken++]=0;5 B2 R9 X3 W! C0 \. Z3 W
  609.           sztoken[itoken++]=0;8 o) }* z* c; D" V: x1 m( x, H
  610.           return szRet;
    * W2 k) Y( d8 ^1 ]  K; \/ C
  611.         }
    7 E( x: B7 D9 f1 ~: x  Q: P
  612.       }  q. l6 }! {- X7 x
  613.       itoken++;8 X- ^  I$ Y4 b* y6 }, r2 s
  614.     }
    ( x" \6 Z  Y# {1 D2 \& P7 W% J
  615.   }! i* G  Y, i% P  ~, g& h" {
  616.   return NULL;. h) e; }5 b9 N2 |& ]/ e( Y& ^/ m
  617. }6 s! W4 i  j- E: }
  618. + Y( K) v; Y( J* t
  619. void ProcessProc(long Total,long Current)
    ( u6 _7 J  V: O' Z& B
  620. {
    / {* h. N( E0 f7 W4 p) o5 ]
  621.         MSG msg;) Q# ^. i$ R: Z7 n
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    4 X0 r1 v: _" w# C2 ^% c  _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));9 n( p: {9 D8 q% U$ j  R. r
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    . p6 e3 H8 t' J. ]: ~3 U  O
  625.         {
    7 G- e, n1 r: f& q( O* D; ~
  626.                 if(!GetMessage(&msg,NULL,0,0))0 ^, n8 h2 U  l# B. Q, K
  627.                 {
    6 i6 y: L4 Y% y
  628.                         return;
    + a5 D2 f) d$ b
  629.                 }5 I4 w3 d7 g! h! p' m
  630.                 TranslateMessage(&msg);; I6 a' \6 ]8 m: B
  631.                 DispatchMessage(&msg);. J6 H/ e* A% E% `) S! i- B9 ^
  632.         }       
    ' S* {- s  b; F4 _' u" a) }
  633. }
    6 |  g! W! v- ]* X3 A. K& W' y/ e
  634. ( x7 X- G/ y7 T% ~# u
  635. BOOL bFirstChar=TRUE;/ Q3 \3 m- ]  G4 ^" T  @
  636. $ `3 ?5 {8 [$ u2 a4 I$ ^( F$ q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    8 v1 s4 J: Q' S! {  H4 y
  638. {- A& c; m$ A9 S( s: m, y
  639.         // TODO: Add your specialized code here and/or call the base class8 T# F6 d2 E% _) P) {, B% S
  640.   switch(dwProgramState)
    " w$ X( a5 h3 V! @3 B# N( N+ t
  641.   {' D! s7 f3 X3 Z% s* ~( t0 k6 ]
  642.   case AP_NOTHING:8 Z& S9 J0 g/ A6 m# S- U
  643.     switch(dwStartUpSteps)5 C6 t$ n- e% \6 f6 y: {6 A' {* \
  644.     {
    ' r+ ~' v$ T: w% m6 P2 d* \- Z
  645.     case 1:
    * ], E. D/ Y, A
  646.       {
    , C% d. Z$ o/ a8 d% a7 i) \' r$ W- _+ {
  647.         int i;: R# s' i+ V2 L% }2 |5 ^1 G3 d
  648.         CDC *pCDC=dlg->GetDC();
    . y( n8 i% V$ {4 Y$ p1 q+ j' D; Q
  649.         HDC hdcwnd=pCDC->m_hDC;. l( ?- k0 I6 W% ~  [' J
  650. //        Graphics graphics(hdcwnd);, L, c8 c' w' D( L# s
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");3 t! O0 O0 G, W' C4 a
  652. //        INT iWidth=bitmap.GetWidth();
    # @! D0 }; v4 A6 z+ f8 h6 }
  653. //        INT iHeight=bitmap.GetHeight();
    ; ?  j! t' y& z) O9 Q9 S( a4 M
  654. //        Color color,colorTemp;+ ?. J* A# \8 _$ d2 }
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)7 J' |% [* A- B3 \; i; w
  656. //        {
    * D# }9 z5 N  j# `( v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    & t0 r% V/ v% Y9 v' D
  658. //          {2 r6 b' h6 d  Q
  659. //            bitmap.GetPixel(iColumn,iRow,&color);" T  ~" O5 I2 _! S
  660. //            colorTemp.SetValue(color.MakeARGB(
    2 e' ~; M' h$ }6 k' G' Y
  661. //              (BYTE)(255*iColumn/iWidth),
    5 A1 ^( n' p( G" |3 O% M, t' y
  662. //              color.GetRed(),
    7 w0 x# X* k* @: e; d5 D4 V1 `$ e4 |
  663. //              color.GetGreen(),4 K- z2 ^% }( v6 n( {! F& w
  664. //              color.GetBlue()));
    , j" w& _# L" D6 P3 o7 v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);2 S  D6 u: F) \* B+ B  W
  666. //          }
    0 x. V! [6 I( b' D2 S5 o
  667. //        }9 N3 M: i$ e+ A  P; m
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);# t' v% ]! c% g( i
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! J) {" M0 T* _% w4 ^, n) g( h
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");" V9 _; A' @* r4 s
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");) E' Q- u. \& T/ w) T
  672.         for(i=0;i<240;i+=8)4 @) H4 _! p+ N% v& G# i/ V( }
  673.         {
    6 T7 u9 q- w, g" V# J% o
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # q$ V+ d. n2 S9 B( t6 r" n+ ]
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' J+ U, y# q- z; l$ z9 H
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : ]. r. M; V+ G1 M- H; o
  677.           Sleep(33);  k: k# \( [' ]8 y. e/ f2 q1 s( V4 F
  678.         }# r- y: C9 L5 m
  679.         Sleep(1000);. B% @  t1 q+ y" c2 r. K
  680.         for(i=240;i>0;i-=8)/ H( Z$ q+ x7 ^1 z# ~
  681.         {
    ) }$ P- K9 {% E9 W% ?0 e+ s2 P
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . }8 ]3 D3 ^9 \' E% Z4 e% Y! ], H
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 `% i) M6 J. v& N8 p8 s, M
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 \5 C- E- t7 ?* a
  685.           Sleep(33);+ I3 }( y4 h- v; k7 `9 `9 q
  686.         }
    7 C9 H- R- E" n9 I9 {% P( E  Y+ }
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 F9 C) `2 ^: B7 _7 o5 w6 I
  688.         dlg->ReleaseDC(pCDC);& u. t: U+ B) w7 z( h
  689.         DeleteDC(hdctar);
    8 f: }+ A7 x% R# [
  690.         DeleteDC(hdcsrc);
    , u6 f! N$ q2 `* h5 `
  691.         DeleteDC(hdcorg);
    ! P9 c' u& ]- `, {4 p
  692.       }& F8 Y( f  `: T1 z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);7 X9 v9 X9 |$ b0 D" \: P
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    : c: l% A0 y0 B3 T) p: _
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");3 @" T4 Y7 J4 R
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    : d# m  {; C; B8 y" b$ y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & T% ]3 m3 D# P( I
  698.       if(!Dn.Connected())
    ! _: }4 }6 M: K% w) l* v* m0 p, ^& x
  699.       {( s. ~$ w& Z0 k- O* F
  700.         dwTotalFiles=1;# a9 x" ~& _3 s4 h4 P# P6 W4 o
  701.         dwDownLoaded=0;+ `  U, R8 J& V$ z  t  V  s  F% X
  702.         bSilentStep=TRUE;
    ! g% J+ O$ N" J$ M1 M8 `
  703.         bCompressed=FALSE;0 R  N& S4 H5 i  x6 n
  704.         strExtLocal.Empty();
    $ B5 M; [" V& r/ {& v3 b( z
  705.         strFullName="readme.txt";. v/ s% l8 x( y
  706.         dwProgramState=AP_CONNECT;
      V6 @" P$ M6 A9 d, Q% N, e  i7 W
  707.       }. z9 D0 W9 c2 I
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    - \! @7 s6 |, q8 r: X. V
  709.       dwStartUpSteps=2;
    0 h6 u' y* V; v* j, \
  710.       break;
    , [! V) t' z! a) b6 E
  711.     case 2:
    * p! v) Y1 Z9 {8 O; K0 \1 e% y  w
  712.       {, I; L2 ?: W! \0 N& n8 P& x
  713.         int iEOF;8 p+ \" z- D: W3 l7 e1 J! b
  714.         FILE *fp;* K% Y, U) O0 \9 R. M, a
  715.         char szString[512];6 }* k( P: H% N
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 Q+ `; n5 d$ s. @
  717.         if(fp)7 Y( i$ z" T- [# L! B
  718.         {
    8 V% e4 A' ?2 v; S! G* K) _& i
  719.           do0 O; _) \6 x" e5 u- P
  720.           {0 ]& M7 w7 {5 t5 y8 j, N  r# E
  721.             iEOF=fscanf(fp,"%s",szString);% @2 d1 d& g  {# H/ _$ B" ^
  722.             if(strlen(szString))  J$ ^3 {+ i3 [+ @% p
  723.             {$ O' m9 H9 C" m9 i+ q7 F$ @/ g7 O
  724.               if(bFirstChar)5 Z. n5 P# `) [1 x  a" [
  725.               {
    9 T# @9 H1 _+ i: ^
  726.                 bFirstChar=FALSE;
    : x& k2 |, h1 t& e! k* W0 G" ?
  727.                 bConnectIsBig5=FALSE;' E0 \# y6 g  i2 E3 E8 j9 I! \
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    6 K( C  `4 v, @1 e
  729.               }
    9 u7 @; d$ U8 Z' C4 e. o- V+ U  t
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    + _  L- C; {; h0 n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ! |, R- t2 A0 h( e) t# W
  732.               dlg->m_ListText.AddString(szString);
    9 t& L& V! x  M' H6 u; [3 P. q9 L2 G& x
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 I3 I4 |0 e1 W' g/ H
  734.               *szString=0;
    + _) L' s; Q3 Y: T' O
  735.             }
    4 [# ~1 z+ O" w3 x, E2 c# b$ l4 e2 |
  736.           } while(iEOF!=EOF);0 G. j! r0 o+ l9 s! x
  737.           fclose(fp);
    5 p7 u5 C0 x8 y8 ]
  738.           unlink(".\\DownLoad\\readme.txt");
    ! w' K; j- x; j" P
  739.           dwStartUpSteps=3;! [4 U& ]+ v9 b; ]- ~
  740.         }- L- x; t  B; H) S$ n
  741.       }
    0 c+ h. R: v. Z1 V$ Q+ z
  742.       break;
    % _& w! \7 w( v3 G# d
  743.     case 3:) z! a1 \8 @0 Y$ G5 U- H" Q
  744.       if(!Dn.Connected())8 d( d: Y' N9 w6 u; \
  745.       {/ B$ M* w& ]" r, s. A
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);( y7 j2 ~! p' ]1 Q7 X
  747.         dwTotalFiles=1;* s- P9 ]0 O" Q, n4 u& j
  748.         dwDownLoaded=0;1 Z5 g2 @6 T* l' v6 m0 K
  749.         bSilentStep=TRUE;8 |# e9 P* D3 P
  750.         bCompressed=FALSE;
    ! a3 x: q. m9 @, o4 m- v
  751.         strExtLocal.Empty();
    ) ~% U+ ]5 |9 O
  752.         strFullName="checkversion.txt";9 J: k1 B3 W! t: I. l5 w
  753.         dwProgramState=AP_CONNECT;: t1 w+ J8 H; j' Q- A
  754.       }" G2 x5 i, ]5 C; F* f/ J3 a
  755.       dwStartUpSteps=4;
    + \/ x$ X: y# P( v- E8 G
  756.       break;9 f* Y8 s9 c- A) j
  757.     case 4:
    : W( y4 W* ]4 ]5 ]
  758.       {
    0 i0 }! `% R7 U3 T0 p$ I( b
  759.         FILE *fp;
    ' R* S: f5 L- X  ^. Q3 I
  760.         char szString1[128];+ A8 r: [  C& b5 |/ M- _% V+ A
  761.         char szString2[128];
    4 r( Q' Z4 P  l3 n+ B0 H  s
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    5 V1 Z' V4 M5 b6 }4 D$ z
  763.         if(fp)
    ' A% r6 ~6 M) w+ X; c  i$ [
  764.         {- `7 T, Q3 j% Q' h! [/ o: s# y
  765.           fscanf(fp,"%s",szString1);
    / R+ x" ^" ?& N
  766.           fclose(fp);8 A4 o! a  \4 h: j& c
  767.           fCheckVersion=atof(szString1);5 U+ o' L4 |' s. o
  768.           fp=fopen(".\\checkversion.dat","r");) I( G! c& u: p$ q
  769.           if(fp)2 |' \. f2 Q( l, U
  770.           {3 f  j7 f2 q3 S) q) C" D2 m; w
  771.             fscanf(fp,"%s",szString2);0 h) E6 c4 j5 c2 m% M" e3 E
  772.             fclose(fp);8 H( ?5 y" _% u
  773.             if(atof(szString1)!=atof(szString2))) o% j& u) \3 Y# p+ h! A; }
  774.             {
    7 q$ \, s! L9 A: o. F8 d
  775.               if(!Dn.Connected())
    ( o0 D  x1 V; K. v5 ]5 r, t4 @
  776.               {3 U" P7 |4 t( K  l
  777.                 bFirstUpdate=TRUE;0 ?  R$ k0 Q1 D: j- M% T2 u$ Z8 l$ @
  778.                 dwTotalFiles=1;. b0 _: h. o3 M4 x6 B1 x
  779.                 dwDownLoaded=0;
    . F" Y  d# j1 l
  780.                 bSilentStep=FALSE;
    - p, X' q. E/ J4 X3 R# t
  781.                 bCompressed=TRUE;
    8 M, w2 c: h4 b
  782.                 strExtLocal=".\\DownLoad\";+ B$ S8 P8 D8 y6 r
  783.                 strFullName="update.txt";
    2 C8 R. _+ v6 g! ^  l- v
  784.                 dwProgramState=AP_CONNECT;
    8 q+ i( M' S% s: {8 c
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ d/ e- o0 N9 }' }- h$ t( ^6 w
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 ^' ^" C/ Y/ g5 _1 N
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    # E+ m' u. F* {

  788. $ j) D" Q. z; y5 X3 T
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 Y: @) |% _: K% s$ |
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    / h0 V# }; a& A# r% G9 W" v. s$ G
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)7 M& s+ K. G; l8 |
  792.                 {
    ' z! S* ?/ a4 i8 p/ p3 u, v
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    6 b0 s- U4 a) ^' w1 \9 n
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    $ `5 H2 p- X2 `
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");/ D/ T5 n" _6 h8 q3 n
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ H' [; U9 p, f1 p$ o

  797. + m: a" P5 ~2 A/ B
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. d# h  b' C( E: n
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 C* o4 p3 I# r. R) |. c
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    % B6 o# H( C7 ~" g: Z& o
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 d0 |* r# W& T3 G& u. Y
  802.                 }
    % u8 h% T: r; n1 I3 _
  803.                 dwStartUpSteps=5;
    ( u" K$ j  t" l" a
  804.               }) U1 _2 Z9 Y0 I5 J/ Q! H
  805.             }1 }& K9 v$ Z+ o. C6 G
  806.             else% ~, t; I, j; J7 J+ @
  807.             {7 s) ^# j; ~6 O6 z: D
  808.               unlink(".\\DownLoad\\checkversion.txt");
    * A- Z# S# w6 r8 X
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    5 ]! z5 l7 d+ w9 f5 g% b8 H' q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / v9 Q: u7 \$ N$ n* b- T2 g& O
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
      d! n' j( h$ u; W/ u3 M3 N1 d
  812. , f- |0 i/ B! o9 Y8 m
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' A# X( ~; S& o- Y2 `
  814.               dwStartUpSteps=99;  f$ E5 v; z2 U; W) j7 t$ Y
  815.               bFinishUpdated=TRUE;
    5 j5 \+ s  n2 j2 c
  816.               bCanUpdate=TRUE;
    ) |7 j% |: T) f' W/ ^
  817.             }: ~+ b) y! p9 {7 \0 H# H* n$ o0 R! d4 E
  818.           }5 I- q2 K0 }2 @/ e+ w9 {
  819.           else: j$ W. P+ t& [1 i0 S- N) m% z
  820.           {
      f) Y4 E4 n: \0 T! r4 e
  821.             if(!Dn.Connected())* e7 P* x% A  a; L
  822.             {" g" x( D+ V0 y; D/ M5 T
  823.               bFirstUpdate=TRUE;
    2 ^& N2 z0 j/ O  b
  824.               dwTotalFiles=1;* @& d; u8 v/ A. {  `
  825.               dwDownLoaded=0;3 t! E& O6 g+ }5 g& R" ]
  826.               bSilentStep=FALSE;# H$ ^, b! u; _+ D
  827.               bCompressed=TRUE;6 c+ \1 ~. D  T) e! r7 s7 u% N# q
  828.               strExtLocal=".\\DownLoad\";
    ! q: R% L/ j2 N  ?" R
  829.               strFullName="update.txt";2 ^3 G5 Q4 _- a# S, ~0 h
  830.               dwProgramState=AP_CONNECT;# d  q8 ?3 c' J2 B: I
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( t% ]1 a: ~0 a8 G# {. ?+ A
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");6 [' ]5 t8 h  `
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");8 z8 j- ^2 k% l4 m5 C
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - ?# l  V& @# C$ @$ n& U& I, L
  835.               unlink(".\\DownLoad\\checkversion.txt");$ a" v) H- K+ Q& |6 T% A& i0 `
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)7 u  |* T- k1 \! L1 B' `
  837.               {
    / x+ y! K* `* o; p
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    7 ^6 D% h. l' V# X$ s
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");2 m% x( y3 F3 ^; K: v
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    1 n; V, l% Q2 A3 E; e) v# P: Y" c# e
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 z8 K- q! m( v/ g, F) X
  842.                
    + r6 T, E$ p! C$ V# `
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");* a  N0 c% M/ T- ^4 ]4 d8 Y) r: d
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 t7 F4 H$ w; }: ^( Q& [
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");/ w: h; `# n( n
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( Q9 T7 l4 d/ g( U
  847.               }
    : N: n3 c0 i! d( T# X* l  b
  848.               dwStartUpSteps=5;* z, n( V5 N! ?* _) I- S5 ~
  849.             }
    3 ]" J% {1 V! u
  850.           }
    / k& m& `0 P" p. ^- k
  851.         }- x, s, f9 l* O  n# h7 c
  852.         else
    7 w2 t2 ~. U# b4 I) T
  853.         {
    7 {0 f$ r0 T4 |. Y+ k! v
  854.           dwStartUpSteps=3;6 F# a2 _; N( T& J8 @  W
  855.         }9 i# m) f. A5 `
  856.       }2 s, K! I3 X" y, r$ G# f) b
  857.       break;" v8 a( r! _3 i
  858.     case 5:3 d! h5 d7 E8 S/ \
  859.       {
    ) y: d1 I: l& ], m' x2 F7 p) s
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    9 @6 }6 q$ s5 ]$ ~
  861.         {
      u6 Z' [9 c% f5 d6 N
  862.           int opt_overwrite=1;! y! k  R: C: T8 Y8 F# x
  863.           int opt_do_extract_withoutpath=0;, A( J  [) T- K3 N/ I* c
  864.           unzFile uf=NULL;/ u2 f. W+ {$ F5 S0 j% Q( W

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

! B! l. i4 s; F7 m' ~& k* u' @0 W+ {' L

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-17 15:36

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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