CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
( e$ F7 o0 p* ?7 |9 J, x
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ( Q6 {) h1 F7 H0 g5 u6 G1 c/ f; c
  2. //
    $ a0 |. u! J& @* t. e& Y
  3. 4 d5 p) n( F( \" a0 I2 Q9 x- l
  4. #include "stdafx.h"  d& }; i- @3 i$ K

  5. ! N7 x) G( j1 @* L' D, X
  6. //#define UNICODE, v9 r+ P" W6 i5 U  L
  7. //#include <gdiplus.h>
    0 R6 \% i: o3 d! C' N  \  \# Z; U
  8. //using namespace Gdiplus;! ^, j$ L& ?9 u1 E/ A( Y; @
  9. ( k4 [& g# L8 U  Y$ ]- P
  10. #include "RevApp.h"- E- N; |! V4 k3 w
  11. #include "RevAppDlg.h"
    8 [9 _. \* B$ X

  12. - h% x3 Y; B* H/ q5 E
  13. #pragma warning(disable:4786)/ Z4 t6 ^( p! u; h: w# {
  14. #include <map>
    6 t: m, b4 H' d8 Y/ E3 |; O: k! [% X
  15. #include <list>+ o0 ~' N' Z) f1 o' P% |% n
  16. #include <direct.h># k+ \2 C- x9 x7 J9 G
  17. * q5 v7 O& X/ l: s! S  H# @1 H
  18. #ifdef _DEBUG
    , \9 U1 F0 ]7 T. w
  19. #define new DEBUG_NEW( T' Y5 p( {0 b, O
  20. #undef THIS_FILE. i; A- {6 E6 a7 H8 G4 r4 @
  21. static char THIS_FILE[] = __FILE__;
      Z9 ?. y9 N8 V6 ^- B
  22. #endif
    4 U8 D- ?$ u' O, S) U' ^. ?
  23. #include "SkinResDef.h"5 u2 j; O$ ]" O3 r  \* X% r5 M
  24. #include "ChangeBG.h"
    . v: }7 ^# U$ {6 {/ D; g5 u
  25. #include "AFXINET.H"2 V. W, \5 L( w2 ^4 W1 O- C

  26.   |, ^) p: e1 G, s+ O* V; ?( o% d
  27. #define TRADITIONAL_CHINESE 0
    5 Z0 t7 y) h2 r# k
  28. #define SIMPLIFY_CHINESE 14 t- J, C9 X% f
  29. #define ENGLISH 2: w( |, V% D( m& E& o( g1 K/ Q
  30. int m_iLanguage = ENGLISH;
    " U3 O+ ?' b, [7 h% g7 T* j
  31. /////////////////////////////////////////////////////////////////////////////
    2 Z9 m- R6 T: Z2 Y9 C
  32. // CRevAppApp) F0 G1 J* G9 E
  33. # g) w" g5 Y0 }7 s
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    : g2 [2 p$ @  N* B- W6 a' _+ i
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    . ~/ W: \) ^3 b- @* H( g9 w" h  t. t! \
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.$ s6 i+ a, H+ ^8 b
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
      @# t' g1 ]& I. q& v: T
  38.         //}}AFX_MSG: F  B0 L. |4 ~4 w# b7 I( C
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    . N- W; g  H# s/ u- x
  40. END_MESSAGE_MAP()5 r! V( K9 v0 d) ]) K* V' x3 @

  41. ) W2 @  B& P1 A+ W9 K0 p0 U6 o
  42. /////////////////////////////////////////////////////////////////////////////
    * V6 F# @* G3 d/ Q- D4 J6 Z
  43. // CRevAppApp construction
    * y& ~: v1 z" K; o& l; Y) j& G% \! R

  44. 1 S% `% q9 c$ N& F) `. U) T( b* ]
  45. CRevAppApp::CRevAppApp()7 e' {( c3 F& P
  46. {. o  G  C3 @, v2 x
  47.         // TODO: add construction code here,' R( N- k. K5 a" l' x9 T' x) O9 Z
  48.         // Place all significant initialization in InitInstance
    ; k  `2 k4 \5 Z9 J% u% ^1 ^
  49.   bDisplayIsBig5=FALSE;, [% l2 E+ S9 V. W5 K
  50.   bRestartUpdater=FALSE;
    1 N2 {2 K# r% C+ q3 O* w) m1 M
  51.   bFinishUpdated=FALSE;
      s# Q1 b) c, t0 j
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;. l, ?! f4 O- o  E1 X
  53.   InitChangeDataBig52GBKS();
    , n1 z* a" s( {7 N% A
  54.   InitChangeDataGBKS2Big5();
    0 z7 E/ k% D7 _$ S
  55.         //3 ?# k5 r( o8 L7 Q7 j5 u0 n' m' p& y
  56.         bClickRunExe = FALSE;$ [! D( b) X) o; W5 r* H& X. r2 n
  57.         //
    " g6 [7 d$ D- p" N4 v6 a$ l- o  s
  58. }
      b1 E* X- |# F% _

  59. 1 Q) h' h: \+ K; b3 }
  60. CRevAppApp::~CRevAppApp()
    8 w: @. b0 O5 G# Y8 m8 e
  61. {; T& T2 M) I( m0 U
  62.         // TODO: add construction code here,
    - Y  ~. X) G& k7 T) ?
  63.         // Place all significant initialization in InitInstance) F% L4 [& A! @$ a- E
  64.   EndChangeData();1 \. W/ j9 t# e- ?( L2 J8 s) ~2 E, Q
  65. }
    : Y+ F( E0 n2 [; H2 b2 F
  66. . g  l# t0 C# ^) A
  67. /////////////////////////////////////////////////////////////////////////////# }* L" x3 ?) S  r$ Y' Q
  68. // The one and only CRevAppApp object
    / D  `, g1 O3 A' [% ?6 g. R

  69. " U1 Y. D/ `6 T3 W  s! R5 P7 `, {1 c
  70. CRevAppApp theApp;$ p. A6 I8 d3 {  d

  71. 4 V# l+ F2 g2 a$ K# w
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)+ O- ]& M* a, u6 q* P
  73. {1 w0 |( W  m0 X
  74.   int iEOF=0;  L$ X  l: B& e( W% n  H
  75.   char szTempName[MAX_PATH];
    ) w3 s2 @5 L4 r! Q
  76.   *szFileName=0;0 }3 t$ z7 v4 `( F. Q
  77.   iEOF=fscanf(fp,"%s",szTempName);
    " l. t$ ]; g$ R' v' L% A7 F, B( P  K
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')4 _+ Z/ G, L. x' A+ ~+ S/ E1 o3 E* i
  79.   {
    4 E4 L! T! H0 H% ?8 Y& V" o  h" E
  80.     strcpy(szFileName,&szTempName[1]);
    & h7 k9 L4 x% u* v% g8 E) [
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    # J1 A& V+ ?3 ^! a+ g' G" ]
  82.     {
    3 |% S* S' i2 _, T( H
  83.       iEOF=fscanf(fp,"%s",szTempName);: g( M1 f9 h# e! B7 x, X
  84.       strcat(szFileName," ");
    ) ?5 a: u2 f1 ^* X& S, l
  85.       strcat(szFileName,szTempName);
    0 L0 E/ H  h  }# z
  86.     }4 E( Z* o0 S0 \' r/ A2 Y
  87.     if(strlen(szFileName)>=1)6 ?6 z5 }# c: I0 _0 }0 M2 D
  88.     {
    , v4 W  y. l% j8 c- X' i
  89.       szFileName[strlen(szFileName)-1]=0;  n1 M- n1 V/ Z. L9 ~
  90.     }! f9 Q. C+ h7 H2 Y
  91.   }
    6 C( ^& Q( V2 D  v2 L! K
  92.   return szFileName;
    - `+ ~4 j+ y9 j6 G
  93. }1 R$ ]& ?5 M4 Z  E

  94. ! Z  I! A6 i/ d) P: i
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile), A6 _6 x( z, u7 ]1 k
  96. {, i* n  [8 h! l) g/ ]  F7 c
  97.   FILE *fp;
    / R1 w  ^8 |0 v! w8 y7 s4 Y8 }. t7 Z
  98.   char *key=NULL;
    6 _! w( U2 ~+ X
  99.   char version[MAX_PATH];& O0 h2 P; ]7 r' P& d2 c# v: B
  100.   LPUPDATEFILE file,olds;
    9 B4 e) I+ F3 o: q+ o4 c2 n2 P
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" X& I: E! b! a% Y2 a# C

  102. % x6 m. _# `9 w% ^6 m
  103.   UpdateList.clear();$ P- K% I6 x4 f# c! C1 ~
  104.   UpdateFile.clear();
    2 U; U0 j1 z% Q( g
  105.   if(GetFileAttributes(filename)==-1) return false;$ n6 O( u7 r/ _+ x
  106.   if(!(fp=fopen(filename,"r"))) return false;5 t& @5 B, U  J
  107.   fscanf(fp,"%s",version);
    9 C" \- X/ {. P$ L9 W
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    $ e: {5 w- v% a+ W8 |$ C! v# T
  109.   while(fscanf(fp,"%s",version)!=EOF)' F. o* ~! e' N4 E) r, g4 l1 k4 [) C
  110.   {
    6 d4 G3 |; ?1 ^
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , h+ Q9 G  D# ?) q! y
  112.     fscanf(fp,"%s",file->path);
    2 r/ Q/ ?5 v1 O+ T
  113.     ReadFileNames(fp,file->file);% ]- v  D' g- e5 r6 D8 S
  114.     strcpy(file->full,".");
    . o. `* L+ |( \5 E' _' D. h, V
  115.     strcat(file->full,file->path);
    5 B0 L9 w3 a1 F" b1 q3 b
  116.     strcat(file->full,file->file);; d/ G( ]8 e- }1 ~# o6 c6 E
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()); B- Y) Q- S7 o. N
  118.     {( a( ]# I! V$ _8 t' h' @
  119.       file->vers=(float)atof(version);
    - x3 V3 x4 l% e  F- h8 [7 v
  120.       UpdateList.push_back(file->full);
    7 [7 s8 ~/ G+ }* o/ f& t  s0 U" {/ `
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
      U! e! W/ l; f9 I2 z! M
  122.     }
    $ }% \+ Y1 K0 o8 J' \* l; T
  123.     else7 x3 i- c+ y7 ^% x
  124.     {
    ! u  E" \0 d6 ^6 D8 {
  125.       olds=(*p).second;7 e7 e$ r! `2 E) C$ l! t$ W/ A
  126.       if(olds->vers<(float)atof(version))
    - i; n1 Y0 E/ w+ Z
  127.       {! m  G3 S. V8 ]$ B
  128.         olds->vers=(float)atof(version);; S+ ^/ A( X; {! f& ~
  129.       }2 A, ?1 c2 O( H+ }7 u
  130.       free(file);
    : s: G4 s, P3 m. u# V* T
  131.     }! S0 y( J" z+ y' y* A" t
  132.   }
    ' L0 b! p8 Z. ?5 U+ D
  133.   fclose(fp);8 D2 ]4 a, F3 @; ?
  134.   return true;, T" k2 ]- }/ `2 w+ w; T
  135. }& N- W# l1 Z- d) S8 J
  136. * Y1 M7 o4 B- O) E* \0 }7 ^2 l
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ' w8 g2 a% ^& W' D
  138. {! G# f  x$ d9 \
  139.   TCHAR  szFull[MAX_PATH];8 [) y3 C8 V+ m3 J& D6 |, I" V
  140.   TCHAR *token,*inter;7 O+ t; ?. H" f3 o$ U( N/ M
  141.   *szPath=0;
    . s" T% _( c. R3 z6 V
  142.   strcpy(szFull,szFullPath);& E+ r7 R3 T/ }' R. V5 I
  143.   token=strtok(szFull,"\\/");
    9 I. ^0 S6 y* m) X3 R, `
  144.   inter=token;' B0 U# B# s% R- ?, ^
  145.   while(token=strtok(NULL,"\\/")); n$ ?( G# Q) ]) [2 w6 P$ ?+ T
  146.   {
    + J1 w3 G6 U" S, b) d
  147.     strcat(szPath,inter);
    + ^* `& D( ~4 w+ X  K" o
  148.     strcat(szPath,"\");& d3 q3 [4 [+ i0 e$ j' _9 `
  149.     inter=token;
    . r. M1 O0 T' S, Q
  150.   }
    & _4 J6 _$ e% U: p) V
  151.   return strlen(szPath);
    $ l$ P( |* {6 p/ ~
  152. }% Z  r# @$ d9 }# {: \/ A

  153. : v- o6 i( f. F, s% L9 ^& N$ i. j
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); _2 k5 r4 o; c7 q
  155. {! {2 ^* M" W# j- L
  156.   DWORD attrib=GetFileAttributes(Target);" |2 p( ~# n( c6 k6 h' [8 o
  157.   if(attrib!=-1); m& R$ E3 C6 L1 C: C8 w
  158.   {
    $ K9 j0 X, F$ b' p3 R
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , u% h9 N# F& G0 k& a
  160.     {: w4 z6 `; f1 J9 W! a" ^* Z
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);! Z8 ?; ^4 U1 o3 h! h
  162.       SetFileAttributes(Target,attrib);
    - I  Z" C1 Z! |( D* S/ z5 }7 n
  163.     }, K7 x$ X( ~6 L
  164.   }: D9 n" s' k/ J$ W% A( v2 l3 L
  165.   CopyFile(Source,Target,Erase);
    & j/ C/ z9 w. r* t1 x' Q4 _. ]
  166. }
    8 L7 `9 i+ P" c- p
  167. + G( ^1 \5 y/ i& m' |- f5 P, n4 U; e$ \
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & ^+ {% h' ?0 [" T5 Q6 ~  R
  169. {1 s' n. c& D0 I
  170.      FILE *fp;" P& I' \3 ^6 B: e/ V; A
  171.      char  szBuffer[8192];, h) m* P+ a0 `0 N& J6 W; _7 Z
  172.   va_list  argptr;3 N' [5 h8 b( C. w3 J, Y
  173. " ~4 E& K5 V6 O
  174.         va_start(argptr,message);
    $ [: w7 a6 t/ s4 c- E, d7 |; M5 k' u
  175.         vsprintf(szBuffer,message,argptr);# m8 I2 j! Y; e/ B
  176.         va_end(argptr);9 ?. i7 c7 O. Z2 M( p
  177.   fp=fopen(FileName,"a");
    7 x4 f- M( ?* K, F: M4 ^
  178.   if(fp)
    " l9 m" g# }; r
  179.   {  ]) _* h5 ]3 J* Q! F2 k1 q
  180.     fprintf(fp,szBuffer);
    # U' M9 ~& t+ h1 ?; o. H
  181.     fclose(fp);& m; h/ |. ]6 ]' `& K8 {
  182.           _flushall();
    # p. j( z1 d- K1 l# Z
  183.   }
    6 Q" k- h& a# D- B4 R
  184. }
      `# v1 H( J. O5 p. J0 h5 G! d

  185. - L) t6 K3 Q2 q5 X
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    7 N+ r, r3 s( O( Z
  187. {6 F$ @, h; y& G( E5 l
  188.      FILE *fp;
    * m) V# ^7 P8 T5 A. h0 X
  189.     DWORD  attrib;
    ( E* ^5 |9 |" l( N6 _$ S7 z
  190.   attrib=GetFileAttributes(FileName);
    - |. F6 ^/ k+ b/ z+ X. A/ d
  191.   if(attrib!=-1)/ \% _) ]+ T6 H4 L- L
  192.   {$ t( z+ j2 R$ C9 o
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    * G# L9 k5 B, t
  194.     if(!SetFileAttributes(FileName,attrib))# u" M. b! x: l8 Q( h
  195.     {
    " Y" n+ H8 z7 C: _# e
  196.       return FALSE;
    ( t$ e% d; C* S9 P0 J% o& k6 \
  197.     }
    * b$ U6 M% z. c  f/ C/ e, _4 I
  198.   }3 T; E; W3 z6 G4 p& v# c3 V* u
  199.   fp=fopen(FileName,"wb");+ v8 g/ R- r2 n5 s1 B
  200.   if(fp)* Z' }- p5 S! Q1 W: Y
  201.   {
    , q+ X/ R0 [9 t& y9 X" S
  202.     fclose(fp);3 u! d8 z( c4 w/ B
  203.   }
    $ ?- P" `% V/ r* X; C' U" h
  204.   return TRUE;
    ) w  z, z* i+ \6 o9 N4 A
  205. }
      m, s! o' T9 h% t; h2 u

  206. 0 [8 o( j4 y( B8 P& ^5 }5 s" F
  207. BOOL CRevAppApp::UpdateLocalVersion(void)- c4 M& q8 W, [5 i; V9 G0 h& O
  208. {
      E, g  l2 X1 j9 \
  209.   char filename[MAX_PATH];
    - m9 V  ?2 ?  S% P
  210.   LPUPDATEFILE file,olds;
    ; x  o) ]6 ~1 l0 J3 [
  211.   std::map<int,CString>::iterator i;
    / V. J# e8 t' {
  212.   std::map<CString,LPUPDATEFILE>::iterator p;. _+ P' Q% n( {+ E- q
  213.   std::list<CString>::iterator l;/ \% H7 j' E8 F0 n

  214. ) j, q. K- V" b" O/ j% f
  215.   if(bFirstUpdate)
    5 m; w1 @1 [  U$ s$ C0 u3 L
  216.   {
    ! ^7 T0 N. W- q
  217.     dwCurrFile=0;
    , F" s8 [' E: q* m+ B8 U
  218.     bFirstUpdate=FALSE;5 t% e2 ^) J" w+ H6 ]
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ D. Q$ n" O6 A" R  ?
  220.     {. `! V8 ^! E9 v+ ]! S! b6 g7 ]$ `
  221.       dwTotalFiles=UpdateLocal.size();
    2 J. m) n4 u# b
  222.       dwDownLoaded=0;
    : r) Q- q. h0 g3 C9 o4 [
  223.       bSilentStep=FALSE;8 O. H2 I+ p) a# z/ u6 R3 W4 J
  224.       bCompressed=TRUE;
    5 ]6 Z- v6 M7 T% l
  225.       strExtLocal.Empty();. h4 q/ j* B3 u
  226.       strFullName=(*i).second;" t3 N& Q6 P8 e3 ^3 q" M6 i6 c$ H  R5 j
  227.       dwProgramState=AP_CONNECT;- Y' C# ~# R* T, J, N- L: X
  228.       return TRUE;5 R% [* E5 O5 |
  229.     }
    : ?# y0 `/ q) X, U
  230.   }- F) R0 I) {7 k% `
  231.   else if(bRestartUpdater==FALSE)) X3 w! {  w6 i8 j( s
  232.   {" b5 s3 e" {% o+ `& f" k; z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())  p& b# G0 Y# P- L; G  w
  234.     {" a% K& m; l( r3 i- p% t
  235.       file=(*p).second;) ]; ?  p! d+ v: u: G% D  l
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())+ ^2 V6 D  ]) z/ S! u
  237.       {
    , ]; j) S- w, d/ |$ b
  238.         olds=(*p).second;
    & }$ W8 b- r+ N$ G1 }& e
  239.         olds->vers=file->vers;
    $ |( f" n1 `; B7 d# [4 g. i1 Q7 Y0 a
  240.       }7 Z" Q$ {, X$ n+ p( b
  241.       else  R4 I8 h9 E9 g$ T6 V
  242.       {
    ' w7 S4 p4 t  I
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- Y7 z( I4 @2 `* `" E- A
  244.         memcpy(olds,file,sizeof(UPDATEFILE));' p+ ^8 U6 E8 V/ _! {) C) }; r
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ; O/ n: e' o; X
  246.       }& n: y. n0 k, c, S
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    1 G4 T& B0 X+ Q7 E! ^9 \5 f
  248.       sprintf(filename,"(%s)",file->file);
    , Z# O: `( @4 B7 K! e
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * d( I6 n# ^  p/ q1 w
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    7 k( Z6 p3 e# b6 Y. z
  251.     }, z# u9 ?' R, I. m( ]
  252.     dwCurrFile++;8 X, K% X0 W! Q6 x9 |$ @" ^" E0 {
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ [' t  ]( F5 ~9 d/ p
  254.     {
    7 I/ Z( {, D, a
  255.       bSilentStep=FALSE;* A# ^$ F* H+ d4 V3 c6 K, @
  256.       bCompressed=TRUE;
    ) d0 p( P$ p2 I# S2 m" D
  257.       strExtLocal.Empty();9 y+ A- o5 F8 Y. K
  258.       strFullName=(*i).second;! }. b1 y$ ?- ^8 c( e8 ?. k
  259.       dwProgramState=AP_CONNECT;
    ! ]: H  l: h) f2 y  @
  260.       return TRUE;) u; w* x: G* `- o1 u* e7 c& }
  261.     }
    9 H5 Q, K7 K  d) V. @
  262.     if(!bRestartUpdater)
    2 _2 {0 \1 h7 i% ~% g( H3 @
  263.     {
    ( B- j2 E: I; Z5 [0 P7 Q4 {
  264.       int iCurrSize,iFileSize;9 F  j* Y; z/ p9 v
  265.       iCurrSize=0;8 M  O. \1 j% H+ p4 Q( |3 v; v
  266.       iFileSize=UpdateList2.size();1 b: C) {6 u# G. a, V' o& F
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");* K! M! Q8 i2 G! X5 H! [) Z. q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    7 d# W6 T1 R/ I: T6 d5 f
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");; }! @3 J6 F5 v+ z8 e
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % `1 k2 r6 P1 j, M
  271.       Fclearf(".\\update.dat");
    1 H9 n; z2 j/ t( I& A
  272.       Fprintf(".\\update.dat","Bloodyf\n");" W; n. G3 ?- K1 z) u
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++); |. M9 T. m1 n. L( p: R
  274.       {
    6 k; V4 ~' n+ N, a" T! |$ f& Q
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())4 {$ ?5 [6 q! _, X4 E5 d3 T0 k+ e
  276.         {0 u7 s1 C& t8 _- K* B6 r! g3 q' u
  277.           file=(*p).second;/ f" s9 y5 N6 F' H$ {4 w
  278.           sprintf(filename,"(%s)",file->file);+ f* G" }2 e/ D1 ^6 H
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # u1 D2 i* k" z( `: j# i
  280.           iCurrSize++;
    & c- `% m0 D  q/ _2 Z, R+ q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));; ^! Q- ?* f* W/ v
  282.         }
    ) ]$ [) U2 n% S
  283.       }
    7 Y: J0 _4 C9 W) M& s, m
  284.       unlink(".\\update.txt");
    8 n9 p" f! q4 X% y# c' L9 I
  285.       unlink(".\\update.tmp");5 {" d, {( Q9 W2 k- ]: `+ ]
  286.       Fclearf(".\\checkversion.dat");
    1 ?( s6 b9 a% ]1 W3 s1 o3 U* m
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);9 J7 H" m5 z- r5 x5 G) F
  288.       if(UpdateLocal.size())
    ( w4 X; C; g6 S3 |. x, U
  289.       {
    / L' F2 i& _* O% @# Y* J/ @
  290.         UpdateLocal.clear();
    : t" p3 y/ ]0 B% a: F5 N/ b
  291.       }' [1 ?6 A2 |/ m! u8 ~  O
  292.       if(UpdateFile3.size())- N7 K) Z7 E) E1 }
  293.       {
      y  g& A- h% K0 t) ^
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ B8 M- Q: N" h) i$ m( b: R/ k
  295.         {
    . N  |, x0 H$ f3 k/ D, _
  296.           file=(*p).second;
    6 O2 b# f+ |% V1 K
  297.           free(file);
    1 \3 R1 ], m, X3 ~, s, [6 `, T
  298.         }
    0 W3 m: a, ?( Q, M! Q' }
  299.         UpdateFile3.clear();
    3 ^& p3 x( X! D7 _9 A+ A
  300.         UpdateList3.clear();
    / G% `% A5 ?8 C; F
  301.       }( {; T6 G+ \. G4 R, f# p; q) f/ I
  302.       if(UpdateFile2.size())/ S" v9 Z: w: [
  303.       {" {3 |6 @- \% O6 C6 L8 P; i3 s5 m
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * }# X/ F" b# A0 l
  305.         {1 @! k# {5 E- d* {, P
  306.           file=(*p).second;  A0 B5 [' I8 R
  307.           free(file);
    9 U7 L$ k0 b% x8 T) f$ U
  308.         }0 Q9 l8 l0 F6 b+ [! w# w
  309.         UpdateFile2.clear();
    0 r# l) u; ?# @( I; j4 C) C4 b
  310.         UpdateList2.clear();
    * t+ f8 |7 c6 X2 f, A
  311.       }  R# ]% [7 o: A4 ^* R0 r# \6 V
  312.       if(UpdateFile1.size())
    / m' V- t5 ^1 M' r* p; g
  313.       {
    & t; V$ L. v2 ?: Z/ g
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - I9 L/ e- x! e1 [
  315.         {
    # w! P% |* [/ r
  316.           file=(*p).second;+ S! _; Q  v/ t+ V5 f2 M
  317.           free(file);
    ( ?/ ]; u. V7 U2 N% @5 A
  318.         }& d) x4 K1 [; i* H& X& j9 H
  319.         UpdateFile1.clear();
    / L1 r" j) q; d. _; f6 p
  320.         UpdateList1.clear();
    5 i/ u, X- S" `
  321.       }' F5 h) p6 Y4 ]! |
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));7 d) R4 `, C  l. j6 X! e
  323.     }2 X% a& y3 C$ H8 o1 w3 {
  324.   }+ f$ v' u' e3 l, U5 M! v
  325.   return FALSE;
    3 [; |# b6 V% J- f) r
  326. }3 |0 B6 U1 f7 |( F* k9 a8 M
  327. $ X4 n# G) a( K/ i$ N0 H9 ^3 n$ ]& d
  328. void CRevAppApp::ClearAll(void)9 k7 R2 _& U% O) L3 k/ H; i3 i+ x
  329. {
      e% b8 m8 U" h8 E2 s: }# n5 u
  330.   LPUPDATEFILE file;
    , r1 W; b, `4 N
  331.   std::map<CString,LPUPDATEFILE>::iterator p;4 U( L+ R& M& r
  332. / F( M3 J$ S% x5 r
  333.   if(UpdateLocal.size())$ a& v3 r1 q+ T( r; @
  334.   {7 x7 M6 j3 U+ K2 a0 X
  335.     UpdateLocal.clear();% }' e6 x/ y; S
  336.   }
    , m* u: ]& l3 w5 t
  337.   if(UpdateFile3.size())# e+ w7 P  V. [, `' F! b
  338.   {. W9 @4 M+ `) T2 s% R7 W
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); d9 \* }: {* j2 @2 j
  340.     {
    5 z0 ^, O4 }* l8 j- D# a8 i+ A7 i
  341.       file=(*p).second;& c. H0 R# \, W9 \7 y
  342.       free(file);
    9 y% ]9 d! X' j1 p
  343.     }) k' T1 q% v  x, Y
  344.     UpdateFile3.clear();9 Q+ W8 z* o! g% r0 p3 I9 A
  345.     UpdateList3.clear();
    2 H, N1 e3 ?2 ?6 f* f* Y
  346.   }. u7 R# b, }' `1 a& }" H
  347.   if(UpdateFile2.size())( J3 a7 d# W% ^' h1 |; R4 M0 l( M
  348.   {
    0 u1 e5 X* g( p+ A6 V# Q/ u) M
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ X% c! O* B" Q" Y: z. H$ A
  350.     {& p% A8 }# R  e2 m* O8 A
  351.       file=(*p).second;0 u" ?$ K5 p0 L* x7 y
  352.       free(file);3 d6 d7 @7 w6 X( E8 V% u% I
  353.     }% u7 u) E8 G2 F* g; P8 C
  354.     UpdateFile2.clear();
    $ v' \" I+ P  w3 _2 Q  N/ ~# x
  355.     UpdateList2.clear();
    2 {$ d9 t9 z7 m2 I9 Y2 N
  356.   }- Y5 I9 p" `# x! i. W$ Q
  357.   if(UpdateFile1.size()). R# x$ Z' g2 O* `: {- d
  358.   {
    3 ~( Q' s8 g' m8 I3 j
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 b- C2 Z9 M% |/ r. m9 L
  360.     {
    1 F6 D( W3 m" B
  361.       file=(*p).second;
    9 y6 v, D- @% c# S. r! s
  362.       free(file);
    ( b! y( \2 @6 s0 l. I8 w0 _
  363.     }
    ( G8 H# @! Q7 x
  364.     UpdateFile1.clear();* W) n/ _1 z5 A2 O! `, [
  365.     UpdateList1.clear();
    ( f. y5 A8 [) c* l) T+ E7 M+ W
  366.   }: s# M; l- q* U$ Q' ^
  367. }  
    , {" n% k5 t0 ?# \% o4 p+ k
  368.   
    ; d% p- P; |3 n# U9 I- j! Y# O2 ]' P
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    7 ?2 L' o* f9 y- P3 D# n$ q
  370. {
    % ^3 B" L" Z8 T) C: z& ?& O
  371.   int c;
    3 K) G2 i& a  f* P1 x
  372.   LPUPDATEFILE file1,file2;! I) C! p1 ^% J/ m" g( Y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ; `1 Y& S0 t/ Z1 j
  374.   std::list<CString>::iterator l;2 u8 ^3 o: u% O$ u; t
  375. 7 r0 \& N3 I' K& n% Y) C$ W
  376.   UpdateLocal.clear();
    * s  d9 D( ]+ o; C# X: P  K
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ; Z5 b5 Q; w) L, I4 p- T
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    6 s5 a% R) C% s0 T
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);5 T$ H5 o* [- u+ X  G0 G  V
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    8 y2 k- c6 ?7 e5 e, p# _, A
  381.   if(UpdateFile3.size())
    ( W+ W' D; h, g
  382.   {
    * Z, e/ e. D/ p6 }
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)7 u% ?+ |3 w3 S( ?1 Z: b8 J
  384.     {: f9 \9 T1 L1 P7 p' a1 {: w3 ^
  385.       file2=(LPUPDATEFILE)(*i).second;
    % p/ K) p6 r5 Y! ]
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    & [: T; v. W3 O8 V2 e5 }
  387.       {) t9 y1 s8 C6 ~6 ?9 o1 s+ |9 z+ r& o2 N
  388.         file1=(LPUPDATEFILE)(*p).second;
    & `; ]$ [$ Q4 E
  389.         file1->vers=file2->vers;
    / H6 N0 @8 }/ U/ q( V
  390.       }
    - l' ^! `1 ?/ j& e- ?
  391.       else8 t% \  ^- T& Z$ Q7 P
  392.       {
    ( T# H9 N" N  c: l6 h) O$ o' x
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: }) n% h( s0 t8 J! q' h
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( g$ \. N3 m& r3 f6 }0 g! T
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));9 S# z, J2 U9 S! d/ P& ~  u
  396.       }
    ' N) y" C: J$ h# g
  397.     }: f2 U8 D4 H0 l' W2 g1 s
  398.   }# G$ j+ ^! i. U7 R, M
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 ]1 K  W6 b0 {; V- e0 }
  400.   {
    $ G% S! [2 a# H# ^
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())/ B& _% U4 X4 W2 M6 `2 `
  402.     {5 f  @" S  l8 F& {* c
  403.       file2=(LPUPDATEFILE)(*i).second;
    * ^* n5 z* n9 r$ S
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * X7 ?" {  z3 e2 O# \8 X7 h
  405.       {
    4 f; M0 v# G3 F2 L7 o0 ^( l, \  Z
  406.         file1=(LPUPDATEFILE)(*p).second;
    3 ^  g  U6 F! s5 ~% @
  407.         if(file1->vers!=file2->vers)( U9 q: G4 T4 U
  408.         {0 i" R# c# ~$ q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & o1 s8 ?* q, D5 q' {7 m! V9 V
  410.           c++;
    ( o' \1 m- ?( C9 H6 y2 }
  411.         }! |9 N  r, \5 c* I3 j
  412.       }$ z# r1 _9 d3 N, W! T& H) W
  413.       else
    1 m" o+ b9 B% h1 Z0 T' i. c# O; M
  414.       {! a/ u1 Y  l  H
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ; W0 X& F$ D) V2 [- R: Y! e
  416.         c++;
    1 h, O0 z) M! D+ `/ F8 w
  417.       }( o6 x. A# q5 [6 A) Y0 R
  418.     }
    & J* A6 X$ g; F8 K4 E* y
  419.   }# m. H" V8 o  U
  420.   unlink(".\\DownLoad\\update.txt");
    * Z1 D/ f  q6 x, a
  421.   if(UpdateLocal.size()) return TRUE;
    ) d; c( @' f! w" |( |  p
  422.   else                   return FALSE;6 U9 v& D$ `: `. n: w  o
  423. }9 ^) L- D! S. E* X  x/ B

  424. # Z7 S; ]0 r2 R6 y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    , W5 b4 m: a( Y4 E: j
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"* P# H8 b1 s  }1 J: ?" V' o

  427.   H" h1 K4 F* v4 D  V3 Z2 P
  428. " S" @9 S5 m; E3 F( d
  429. $ O: f: r2 A* C& [# J) _' m
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)6 ?6 }2 N- }3 Q7 T4 U
  431. {
    , F, o6 S" K5 F6 M3 ~
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;7 F& e8 }2 r! E- |/ Y1 y1 _  \) H7 T
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 l. z& F( S' H2 ^* A) f4 I% \
  434.   {
    * W/ d6 J& b* X
  435.     char szLanguage[50];
    : L" ^% A& r# ^* q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ) W; D5 \2 B* G. B$ Z" `
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! L. y) Q5 t* K- k- E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" j, d& T6 F8 A
  439.     else                                   m_iLanguage=ENGLISH;
    - n: F; ?+ U. h( y+ h
  440.     char szRegister[100];
    5 R1 r, c9 V0 P4 \4 M
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: a* E3 r2 E$ y% K1 R+ o2 U2 n  A
  442.     strRegsName=szRegister;
    2 t' `5 E6 h0 f/ X1 h
  443.     char szPatchURL[100];
    . i; f; B" ~- X  z' @+ W: D' Q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + a% c" N% L3 v
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ r: D. ~, H, r0 E& F8 @. q
  446.   }, z$ \4 N8 A! Z" c% ~/ E& j
  447.   else
    7 S4 h7 R( W' l  B/ G% [
  448.   {6 `- z& {( H+ y+ e# r& `8 b. o
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    " p6 k. N9 b" w* q: _, b
  450.     strRegsName=DEFAULT_REG_URL;
    ( ~9 v8 h! U, k* r* ?
  451.   }) @3 ^8 E7 e( U$ k9 F
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    5 Z) \" H# J$ q) a; Y. B" \
  453.   {
    : ?- m% g: T9 t+ L( g
  454.     char szIP[50];; E8 ~3 W% p) E' O, d
  455.     char szDIR[300];
    , ~. Y) s0 i* ?" H# y
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))' w* b$ e7 Y5 h) }
  457.     {
    & b& s9 c/ Y; p& R: E7 G
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");" N0 b+ y, ?4 f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: }. V! k$ }; U5 q# j8 D; g! D
  460.       strHostName=szIP;
    / m, [5 j. A4 w
  461.       strHostPath.Format("/%s",szDIR);
      W6 q, E3 \' c1 N3 [
  462.     }
    : O* h& U+ @( ^$ `* r
  463.     else
    ; |: u2 {, P" p% G
  464.     {
    3 h1 T$ T( Q6 s9 z0 F/ U( h
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): _% O! _2 ^9 i# a% `1 ?+ N/ M
  466.       {
    6 s* }3 B! I  {( }
  467.         char szLanguage[50];
    # g* V" N1 }: a5 `1 k+ p3 Q
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( L" P: k0 u7 Z( z  Z! Q: _1 b% W
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    1 M1 X# |! F* T
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, m: M6 I2 r& ?3 q% H) J
  471.         else                                   m_iLanguage=ENGLISH;) u7 P9 A+ X, J6 i# e* O' D1 D
  472.         char szRegister[100];
    6 K1 c) f/ Y5 t% c6 V. K: j
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");( |# w9 T* c. J. O+ |
  474.         strRegsName=szRegister;
    : w$ v! o% o3 \
  475.         char szPatchURL[100];
    4 T( U) g8 f9 m* w0 W5 i
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( c  s+ ^# c9 c
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; @6 D& {+ w7 ^4 q) ~* G; P3 a
  478.       }: {$ w5 _" V+ Z; g3 E! x
  479.       else& K1 v4 p# f2 j1 b( R
  480.       {6 f" d0 ~! t* _( P  o  z( b  k
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 m1 f& d+ G8 t7 i5 n: W
  482.         strRegsName=DEFAULT_REG_URL;
    * b- u$ X3 q( S! M, E: h& [( n4 Z
  483.       }
    % P) p7 |( C) M6 J
  484.     }2 W4 i* d0 [3 I0 p, w1 A
  485.   }
    ' T) I: h! p# O4 D
  486.   return true;2 ]4 r3 N9 P; @4 Q' V% z, V! M
  487. }
    3 U  P9 i, R' I( p# R& @

  488. 2 g6 t3 k, |& k; U# t4 Q# @
  489. #include ".\ZLib\unzip.h"6 Q' C7 D. h3 D7 J, l
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    + w5 T/ K9 [3 h
  491. /////////////////////////////////////////////////////////////////////////////4 b9 q2 Z. Z$ e+ L, B8 h% P6 X
  492. // CRevAppApp initialization
    % `& f, T3 r$ E) x2 j, h

  493. ) O$ c4 S% f: D0 O; A( S6 \& w. l0 S! e
  494. BOOL CRevAppApp::InitInstance()2 n  a/ @# U3 I5 T. `
  495. {) W3 V- e& Y" I  ~3 v
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    3 l7 M; R; b$ F
  497. 3 C' t. C- [4 [0 E$ c6 `
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    / W+ _+ p" D' f& U! w& |! t& K
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))4 `7 N9 C4 _) ]3 W: {
  500.   {0 Q1 u" I( W) m. ^$ {2 x
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");9 z6 I& M' |" n# d
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    # |% @! ~$ _9 c: @5 R0 `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))9 p9 z" r2 d4 d" D
  504.     {
    + ^7 Z& w: @7 a  f$ f
  505.       strcpy(szPath,szPathTarget);
    5 Q+ @/ t3 ]3 v, C
  506.       SetCurrentDirectory(szPath);- K% L- S& w, {
  507.     }4 f+ D  W* |' i9 R
  508.   }
    # b( P! p9 h( B
  509. #ifdef _DEBUG8 k) T) Q# y9 }( f. u* O7 T2 V
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + X( A! }1 A# Q2 U" Z
  511. #else& ]# `; w% w; d' y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)), N: E0 K# t# v6 {8 k' E7 p
  513. #endif
    ' v+ m4 u% g' R6 X& i& h" o
  514.   {) c$ c5 _' d2 v  e% u
  515.     char tempFileName[MAX_PATH];
    ! I% O5 J# Z# E! X
  516.     strcpy(tempFileName,szPathSource);
    & d9 U/ h  W, ^6 N6 r9 g! T
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( S5 t) J  d/ E( U; Y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    1 T5 |$ D$ O0 {4 \: Q
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);3 k+ W9 ]( W' O1 N
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    1 Y- h$ T6 L7 P' \' T
  521.     return TRUE;: ~+ }6 l/ I: t! ]$ q, E4 V
  522.   }! f8 O+ u( ]1 N8 A' Q, ?
  523.   // Nuke 0118: Delete run.exe8 I) [+ z# N3 v$ L: _
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );' |' ^3 X) E$ f4 }* z( l% ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) h( j% F+ i1 a: }3 K  L; G7 U
  526.   if(!ReadCfgFile("Config.ini"))
    1 z$ t, b% {6 I+ r5 j# u
  527.   {- ^) c& p5 ]  l  I" x2 e
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);: |, I8 W& k# \6 ?6 f0 M1 ^
  529.     return TRUE;
    2 u9 k% |( I, n' h, Z0 c+ ?9 ~
  530.   }+ f8 e, K4 W: k1 B
  531.   HANDLE mutex;
    - h' z! D; c8 p4 Y3 O( O
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% V" Y, U6 @# X; X& |
  533.   {8 J9 ~, R1 A  Q9 I5 P/ o- i+ a+ ]
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    + z) L  ?% w0 [. @/ h) p1 ~1 Y
  535.     {0 l% m' r5 x' ?4 n  Q
  536.       CloseHandle(mutex);
    0 ^& e  j- o# i2 z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    0 F" l% t; L  f9 X3 q; R. X
  538.       return TRUE;
    $ v% k( w' \! i& v
  539.     }7 r. m  V- l. c" H
  540.   }  
    . R# o: ^" ^% g+ _
  541.   CloseHandle(mutex);  r3 S) N, B( ~; z' x& B

  542. 2 Y! r" q: f' K$ b, ~; }
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    . q. L& f; y! V( h0 a" l9 Q7 S

  544. ; o' ^9 O8 w$ p! y
  545.         AfxEnableControlContainer();
    5 F9 R" s* q. c# H* l# @& @
  546. & J1 f- C/ ^* T7 [# U2 a
  547.   bCanUpdate=FALSE;
    - w) |& Z, q, ^/ y, d; H
  548.   dwStartUpSteps=1;& ]5 K: o6 ^$ u
  549.   dwProgramState=AP_NOTHING;
    3 w3 v' m8 J2 j0 I% f7 x5 U: D
  550. $ t# x/ ]7 g9 N+ A( w( t9 X
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);2 I) K2 i4 ~: n+ ?( m+ a

  552. - X! v$ n5 g- |# o
  553.         // Standard initialization1 M7 M; t! `! m+ y+ ?
  554.         // If you are not using these features and wish to reduce the size
    8 P; C+ P* r# X7 S* V6 i
  555.         //  of your final executable, you should remove from the following# z& Y8 {$ M( ^# K4 x3 ~7 q
  556.         //  the specific initialization routines you do not need.
    : w! j' P* c/ [

  557. " j4 L7 f' S: k$ Y7 P
  558. #ifdef _AFXDLL  d1 U& M4 b- I8 ?1 ~% \
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    , K- k2 n  j* y  ]* y) v
  560. #else5 _$ j( R1 e! |! M# J3 I* n
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically7 s$ F3 _/ z+ N4 i! e
  562. #endif' a5 J6 f# l' c+ T2 U/ x/ G

  563. . y, N4 z+ F& M/ [( G7 R/ ~" b
  564.   dlg=new CRevAppDlg;
    # @, G6 O/ g( Y1 h+ M$ o( J
  565.   dlg->Create(IDD_REVAPP_DIALOG);7 T5 E8 R9 j2 ^: o  X5 \
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / U1 V; F8 T% ?
  567.   m_pMainWnd=dlg;) D# R; h8 x% I- \/ R- o9 q
  568. ; d5 ^# W& ]/ ?0 K: b- v! g2 R  ]
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    2 q/ a8 h/ h  z4 S" j0 \
  570. : V5 @( y' b+ p$ N* Q& N
  571. //  GdiplusStartupInput gdiplusStartupInput;
    $ M( q9 ?% Y. A' b& z* ]: w1 J7 y+ }2 W1 R
  572. //  ULONG_PTR gdiplusToken;0 F2 ^+ L# K9 N0 a3 E+ _4 N
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    / C6 N0 P2 g8 U& b

  574. # I9 {4 i5 l: ?3 e  _
  575. //        CRevAppDlg dlg;% B4 n4 q6 t& A7 W0 z4 |( q" ~
  576. //        int nResponse = dlg.DoModal();& a$ G  y( y; I- |* p- k
  577. //        if (nResponse == IDOK)
    4 x9 K# R# T& |% f8 K0 Q
  578. //        {
    / D' b9 S; y" S
  579. //                // TODO: Place code here to handle when the dialog is
    + `6 E2 T' N! k2 N5 D
  580. //                //  dismissed with OK# D; F8 C* f; l* R
  581. //        }
    # b& C; ^. A7 S( O1 }
  582. //        else if (nResponse == IDCANCEL)/ l4 J0 _( J& R; }3 {- m
  583. //        {
    & C4 K; t$ l+ j) @' r  Z0 Y4 R- U
  584. //                // TODO: Place code here to handle when the dialog is0 C! i7 j1 X+ A, h- ]- C. C: @3 I
  585. //                //  dismissed with Cancel/ T# w8 V# M, ~& J, {
  586. //        }) \5 z+ `1 M. m. h
  587. % s9 {4 D8 e% x0 }! H
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    4 i$ e7 f* g4 q9 C% v4 h( o! x% O
  589.         //  application, rather than start the application's message pump.
    + H% T+ R$ Q5 b6 F0 Z
  590.         return TRUE;' J) H0 L* o8 Z4 C: e1 {
  591. }+ i) [  U6 e% E3 \. ^  ?

  592. 2 p( g: v' B0 O
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ' p% Q2 g# p9 O0 O" [, ~% G
  594. {
    . Q  |- O8 e! w8 z  e
  595.   int i;$ ?1 |5 M# i) E; q
  596.   char *szRet;6 w5 P' r9 g1 h7 T; b
  597. 5 e: D0 ^0 G% w; R
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " h( p" B( w6 e/ u6 e
  599.   if(sztoken)/ A$ t6 N' c  h, M! k, G0 A
  600.   {% N- {1 _) I6 v% \; E2 N2 L- [. N
  601.     szRet=&sztoken[itoken];. i5 {) t% Q* o+ i2 X
  602.     while(sztoken[itoken]), W2 N# o  X. O4 V5 E" s2 v
  603.     {/ y3 f5 v: U" D3 _
  604.       for(i=0;i<(int)strlen(token);i++)
    1 A% K7 `6 D# q' s. ?: h: u
  605.       {7 R! `/ N: ^; ~/ }- O* ]- {
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])8 c* v0 p! e  K9 ^& w
  607.         {
    / t  B1 E, x5 L# l7 I8 Z+ b' {
  608.           sztoken[itoken++]=0;/ Y6 V2 m/ r1 W0 G
  609.           sztoken[itoken++]=0;
    4 }- \9 V5 L0 x% {, Y
  610.           return szRet;6 f; L+ x, t1 W: ~# v2 W- D
  611.         }
    % r/ A3 b3 r9 x' j3 R# _& a! W: _* E
  612.       }
    / K" ^( M$ T  d. c4 w3 n: g* `5 y
  613.       itoken++;- l1 d8 h8 p# x: V- Z& Y
  614.     }& d$ f1 t4 |, q8 S0 g1 T, G9 H
  615.   }
    8 y: A. a& R1 A! e; o
  616.   return NULL;% q" g) h8 m: O1 N  X: W+ I, R  @+ M& n. B
  617. }: c* p3 u& Q9 _8 {# E2 `9 [1 u
  618. " ?. N0 q' H4 I, i4 v# b
  619. void ProcessProc(long Total,long Current)
    ' D) C1 t  U& I8 m# d" S8 T) [
  620. {
    7 x) g2 K! J4 K4 r* e
  621.         MSG msg;
    , n2 Z" |* m) O, ^- v# i8 q6 n
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    3 l2 d4 v: d6 r; A4 d
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));" _& [/ Y+ }5 j. t1 N4 ^
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    , p0 E5 K+ o% q8 w" d. R: k, ~* Z
  625.         {& V) z: \" u3 |. m2 `- l3 c/ V
  626.                 if(!GetMessage(&msg,NULL,0,0))8 S! E' o, Z% M' c0 n
  627.                 {  |) A6 S3 d( C' B0 y
  628.                         return;
    , f9 Y: }; _. ]3 t! g
  629.                 }
    $ ^4 J  O. S1 I, K
  630.                 TranslateMessage(&msg);. x+ \: |8 _/ j% Y0 q/ M& E
  631.                 DispatchMessage(&msg);5 x" A/ _4 b+ T: o$ n# m8 I' X
  632.         }       
    9 g/ j! q% S# w' N, b; T4 v1 x% p
  633. }! R( f  H$ T# w, s) z  {
  634. + l# x8 o4 W1 x$ ]9 \; O
  635. BOOL bFirstChar=TRUE;2 D) S  N, y" S& q) |

  636. 9 A8 I, E, H1 r! _" b6 d4 D! V
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    3 N3 r7 a# {# b; z
  638. {
    " O$ j1 L% O7 U2 A! I
  639.         // TODO: Add your specialized code here and/or call the base class
    8 |; e# ~. ]' x, M# W% m
  640.   switch(dwProgramState)
    6 Q2 S8 W; k- c2 W2 G3 E" Y
  641.   {. E9 M8 I- I. u0 d
  642.   case AP_NOTHING:
    5 r* s6 w# q2 I. D
  643.     switch(dwStartUpSteps)
    # e8 ^3 Z, x. F7 ]+ B' d7 g& W. H* o
  644.     {7 E; h/ A0 a' Q' _# a0 M
  645.     case 1:% R3 ^3 s: I& S2 ]- Z. W9 w* u( T! I
  646.       {
    ( G7 t8 h# _; m7 ?0 \
  647.         int i;5 U3 Z' z& F3 Q7 @  i, `( y
  648.         CDC *pCDC=dlg->GetDC();
    ! O4 _2 A# ?+ [8 a: K1 @4 N
  649.         HDC hdcwnd=pCDC->m_hDC;
    . s# [2 \. t: l- L) G8 j, @
  650. //        Graphics graphics(hdcwnd);
    2 X; `' @  N) y% v4 [8 b: u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    3 q$ |6 E3 U. u3 e
  652. //        INT iWidth=bitmap.GetWidth();9 \- Q, ~- ]/ g, X7 j! T
  653. //        INT iHeight=bitmap.GetHeight();9 d* t' `, N# |% H
  654. //        Color color,colorTemp;' x) [$ V/ c6 d- n" i9 C
  655. //        for(INT iRow=0;iRow<iHeight;iRow++), \6 z' J# H# A) F, I, ~- ~7 R+ A
  656. //        {6 _) x4 R9 m, `# G9 i9 d
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)* |* H, l5 M4 ~5 c
  658. //          {, M+ @, d' o: h! T5 E8 ~3 Y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    6 Z, y, z" d0 ^( f+ \/ w
  660. //            colorTemp.SetValue(color.MakeARGB(+ x. q1 {1 E) I% Z. O3 L2 c8 i
  661. //              (BYTE)(255*iColumn/iWidth),
    + r1 q. H  _1 L4 i
  662. //              color.GetRed(),
    3 u0 X# A* j- g# A* S
  663. //              color.GetGreen(),
    $ p8 p! l6 F  ~" X% r- J
  664. //              color.GetBlue()));# D' z; N% _4 |
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    * {3 j) |( c0 ]& P& t4 `
  666. //          }
    7 L, d/ j( t. J
  667. //        }. u; h6 K) Y9 G
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # ^5 @8 `) P& G& K: K3 x
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , a- F, }1 l8 i
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");# u5 S- ^- o9 L# F7 e, W
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) ?1 q$ d1 p* c: c6 `
  672.         for(i=0;i<240;i+=8)3 f& o4 W& t0 [3 J
  673.         {5 p# ?* O  [" v
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 r4 A* F. q! S0 W* F1 B% P
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 w2 V3 X! q9 V- P
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  _! A! }% f& R+ c  V3 ^: N
  677.           Sleep(33);
    4 C8 [  F& P3 j4 k* w) R8 ?
  678.         }* U2 X' Z# s) S% ]; Z; `) ~6 y7 z
  679.         Sleep(1000);
    - U( [1 d$ e7 X" m- D
  680.         for(i=240;i>0;i-=8)5 K8 K1 O2 h! K4 W5 ]
  681.         {
    1 L: n: a6 G5 I. {. W
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 i! N* y7 Z7 C1 h! u. _) x/ ]
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % [: _9 j- ~& R3 y- s# e$ p3 G
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 b7 W0 o# X5 M( ~: h. u3 e! J7 R
  685.           Sleep(33);% S& I& c- v. A; G% g# W; p
  686.         }
    ) T8 y& O" x3 _: m9 a
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);- |$ v$ k, u: X3 \" Q
  688.         dlg->ReleaseDC(pCDC);7 J. G1 T. L5 j# N6 j6 y, E& S
  689.         DeleteDC(hdctar);
    . s& b3 ~9 r& P2 i4 L+ S: q
  690.         DeleteDC(hdcsrc);
    & [8 @' j/ P; N6 m6 Z5 a" L) w
  691.         DeleteDC(hdcorg);) L/ r- s, s2 T  X- o' o
  692.       }
    ; x' U8 W( y2 q# M" E( I9 G, |
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    % C9 t) D8 y: u6 i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");) S. A& N8 T" q5 U1 }$ x
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");/ _4 S; \9 [4 _8 P1 r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    , o" V  f. [; G4 [" `; ]) Q+ N
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # ]; m! L& _7 s
  698.       if(!Dn.Connected())
    3 S9 q' d$ Q7 k& I) }7 Y
  699.       {
    * U% J' c3 G+ g  S  m0 x
  700.         dwTotalFiles=1;9 e$ Y* y6 h4 V5 M
  701.         dwDownLoaded=0;
    0 U" {' ]; I4 Q
  702.         bSilentStep=TRUE;+ F$ i5 {9 F6 l- d$ P* W
  703.         bCompressed=FALSE;( y8 e6 W# u+ @5 i+ l4 ?
  704.         strExtLocal.Empty();
    / B% c9 V; P/ V
  705.         strFullName="readme.txt";( J' |+ B6 Z$ M7 N
  706.         dwProgramState=AP_CONNECT;
    1 c/ d1 h) W% ]# m. f4 C
  707.       }  E" g4 N/ {& A& u+ y- E# v6 x
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();! F  L$ c( r' v+ F8 W
  709.       dwStartUpSteps=2;
    . F- a. R4 ]4 @3 B# ?9 ^# t
  710.       break;  e% k) @) F; a$ E6 t/ l4 f
  711.     case 2:/ C: I5 m+ {3 a) Z' \) t& o
  712.       {( K+ _  e( z/ L0 U! p: i- Y; J* H
  713.         int iEOF;
    " M% Z; u! B! b- N: {# ?8 K
  714.         FILE *fp;" o& B; H- L. a
  715.         char szString[512];
    : g6 l. e; `  z9 Y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");0 r  e) P0 _  {5 Y4 D/ J
  717.         if(fp)& y! v7 L. f: C  ]8 t
  718.         {$ r% L! I% j! h- N# L" f% T6 a
  719.           do* s* J# [. e# a) N& m# T+ R
  720.           {: ^  M+ m$ s0 k" `
  721.             iEOF=fscanf(fp,"%s",szString);: P3 e$ u6 V) J3 ?3 L  d, d% U
  722.             if(strlen(szString))8 B# T% M8 i( B
  723.             {. l% ~2 Q" @5 \+ E0 j2 f; l
  724.               if(bFirstChar)/ v; }9 Q$ v* Q* ?0 J6 @
  725.               {" j) F7 [4 Q3 S& p7 m: K* R* k
  726.                 bFirstChar=FALSE;; a" w5 u8 H6 m
  727.                 bConnectIsBig5=FALSE;
    4 V% y( t: C6 @& M1 W: C
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;, M7 g( C9 K0 |/ {/ S
  729.               }
    9 C8 s' g( z% t9 \. a
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ! p/ a( Z3 A! ~: C$ i' T: t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));! a) ^' a0 u  j
  732.               dlg->m_ListText.AddString(szString);
    - c, }2 w# _4 S9 _
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 T* u: ^, O8 q- w; D
  734.               *szString=0;
    - d: K+ r% D1 ~
  735.             }
    * d1 s0 ^/ z1 U& [
  736.           } while(iEOF!=EOF);0 z; a+ T) g) _
  737.           fclose(fp);
    2 G9 c. ~( v1 T
  738.           unlink(".\\DownLoad\\readme.txt");
    4 y, C& H+ R1 j+ B% t: u" t
  739.           dwStartUpSteps=3;
    8 B- j3 N$ M2 [- i" C* F
  740.         }% E. J0 {8 n7 Y+ r
  741.       }
    " Q4 X  o/ m/ V& f1 L) _
  742.       break;) y; l, b" M" |  k, a; `9 e, @
  743.     case 3:! O3 p! a0 z, k& D
  744.       if(!Dn.Connected())
    2 Y% f. t- o" S" B) h
  745.       {
    8 u& I1 }( C8 t6 \$ T: ~
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);% f- e6 P; |2 N- L
  747.         dwTotalFiles=1;
    . s7 E1 t+ A8 O+ @( U
  748.         dwDownLoaded=0;
    * ?# F5 L  u. D" E
  749.         bSilentStep=TRUE;' |9 k+ c' ?: O6 q8 A4 O
  750.         bCompressed=FALSE;
    ' U8 X; d% y9 w1 c
  751.         strExtLocal.Empty();  m: G; p) x. U% i: S8 T% o4 z  g/ j
  752.         strFullName="checkversion.txt";, i' _# p* y! D
  753.         dwProgramState=AP_CONNECT;& ]8 ^0 ~6 z7 a
  754.       }3 G2 u. {6 k" j5 R) z
  755.       dwStartUpSteps=4;
    0 J6 U5 [, o' l* o
  756.       break;
    " H# ?3 q- _7 K7 m7 N) G
  757.     case 4:
    * `7 D6 _7 \$ _. U; q! \0 e
  758.       {
      T: A) D, y8 _/ i) l0 c
  759.         FILE *fp;
    ) G& j! Q6 g" D( D
  760.         char szString1[128];
    # S; Z, R8 A% ~$ o9 u8 Y/ v2 |0 I4 E
  761.         char szString2[128];
    6 |8 Q9 K! x3 M
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");3 P; q3 V, A0 N+ q" [
  763.         if(fp)* w9 Q8 U' _7 T+ _9 n' N) ~4 n9 Q
  764.         {
    : G6 G5 S5 p( l, ^" B
  765.           fscanf(fp,"%s",szString1);) K9 n  c& a3 K5 i0 c. T( Y7 d, ]
  766.           fclose(fp);
    + K. Q# |! i+ [2 i. o4 f
  767.           fCheckVersion=atof(szString1);# L! P7 F# {" b+ ]  t) E
  768.           fp=fopen(".\\checkversion.dat","r");- }+ A: ?$ \! o$ `/ E1 \0 ^* F
  769.           if(fp)
    ) T/ @, W9 z7 K' p/ U$ P  F
  770.           {4 c1 @) E% f0 \
  771.             fscanf(fp,"%s",szString2);
    & h! |% z) ?" }0 V! S
  772.             fclose(fp);7 q* H: L+ |( {
  773.             if(atof(szString1)!=atof(szString2))" l! |# S7 j, T5 {0 I, L
  774.             {
    " A! E0 p6 {- E$ T/ _& Q: g! d6 ~- r3 M
  775.               if(!Dn.Connected())( H. D0 \3 i2 _5 Y2 U/ Q
  776.               {
    / e" W& ^8 _: T; g# u- G7 \
  777.                 bFirstUpdate=TRUE;$ p9 X5 M. ^  W" f( |  h1 |" ]+ w
  778.                 dwTotalFiles=1;
    3 C( W3 x  ~" [; W
  779.                 dwDownLoaded=0;
    ! j* \  ^& f& W' F. D3 z6 c
  780.                 bSilentStep=FALSE;
    ' t+ N: z$ N* ^. X
  781.                 bCompressed=TRUE;
    ; u0 T5 N- J* F4 U4 t2 S
  782.                 strExtLocal=".\\DownLoad\";
    . i* i' W' x$ R7 e6 W/ A
  783.                 strFullName="update.txt";9 h$ m/ r& s6 b# M  B0 k6 I8 Q# S" Y; k
  784.                 dwProgramState=AP_CONNECT;
    / ~0 Q4 F# T9 n2 C0 T5 B8 V/ h
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 [$ p: Y' |9 }5 \$ _3 O
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, I7 C: M& ^3 P7 l& O7 H
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * e+ K6 o7 g, r% Z
  788. , R+ s6 h# d0 W& I4 n$ m, L- F
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / ]/ \9 P7 ?8 E" A3 x( b6 [& O
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ! K. }' T2 Y- Y6 ^
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ' F6 _, B% @! u9 g+ W; \- V, S
  792.                 {# J% ^/ j3 u) @: h5 ]
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : U7 H% M- d. s5 ~! `( k& M
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");) ^# B: C3 E( K7 _
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");  G: z7 }& e4 b" \+ f$ `* |
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 \* [1 p2 _2 A, G# _" C3 g! Y1 a
  797. " W4 I2 f: A  P( |, K' t! ^
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 V, y7 k5 Q& ~9 N# c0 ^( Q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 B5 _4 j, [! |) q5 U
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    + s& h/ m, W( M8 u+ ]9 s5 r7 x+ ~
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      @5 r4 ~  G$ X& N: v+ c9 Z) T  R
  802.                 }3 H8 n9 F0 L# ^" N! H9 b
  803.                 dwStartUpSteps=5;* ~2 X3 a  U. z; S
  804.               }, _3 y% o4 @, ?: T* m
  805.             }5 Z9 b- o1 ]( ]* P' B
  806.             else
    . z1 D+ ~. b2 P7 g, p  J
  807.             {+ }' s) h/ I& b7 d2 [/ s# J+ x
  808.               unlink(".\\DownLoad\\checkversion.txt");; g& r& T5 h. D# ]" U& e8 W; d) m) S& m
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");' R7 D0 d6 Y* ~! R/ E
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ) D$ g; x' C  J) j8 S6 ~
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; ]8 o  D2 e' e9 w8 ~& u$ p3 }2 x( O8 z% F
  812. 3 C9 _* B0 @! ]) n" x/ w
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , o: U# Z. {. g7 w* p7 I4 |2 o+ F0 [1 d
  814.               dwStartUpSteps=99;
      o( {3 j; A  Z! `0 F. B. Z) V0 A7 y
  815.               bFinishUpdated=TRUE;) g) A% t; P! j0 T% |; y) Z5 V
  816.               bCanUpdate=TRUE;
      l" E5 X* L0 d
  817.             }+ m* X, F+ Z: \! T5 \2 x& G
  818.           }
    9 i* Q. E* H7 W6 ?( v7 q& ~+ c
  819.           else
    * t  d" u: B& s* x8 l! T7 w- y* N
  820.           {
    + l, F: A5 E* x- Q& F: p
  821.             if(!Dn.Connected())5 h5 w8 m; N$ I* i  C6 h: }8 K' |
  822.             {7 }/ d, I' ]9 L% r1 }2 B% ~5 _1 Q2 J
  823.               bFirstUpdate=TRUE;
    ! B1 {& H% ]; A/ @4 [- Z
  824.               dwTotalFiles=1;  }  x# \* W- H# B( z8 b+ G
  825.               dwDownLoaded=0;3 P" h/ P& ^9 E) w1 b7 V
  826.               bSilentStep=FALSE;; R( W! A  f- k" [3 a% X& i( e
  827.               bCompressed=TRUE;
    9 L) c& B! d' C3 ]7 l0 J
  828.               strExtLocal=".\\DownLoad\";7 i8 ~5 L% B* c
  829.               strFullName="update.txt";4 f- v# w# p/ s- y) W
  830.               dwProgramState=AP_CONNECT;
    " e5 i, V6 F( S+ B  c6 x
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 G9 B3 R7 y$ I! A2 K
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , W! a2 |% B9 a' p7 o
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & L, L6 [9 P" p$ S
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) M7 W1 y1 r  w
  835.               unlink(".\\DownLoad\\checkversion.txt");3 I5 t/ h1 R, G* Y0 E* y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1); n/ h- z% h# P6 ^1 w
  837.               {
    . G% U) a0 g0 a) x3 N+ L9 T) }
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");1 l( ?' F# q( k& Y- ]& c
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");! g0 y  O  e' [9 C& e; ^5 J
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    8 @8 g7 ~# F4 G& T5 ]
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! u% D8 ]. P5 h1 \. i+ I2 j
  842.                
    $ Y8 T4 c4 ]$ O4 c) l+ }, g
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; d! L  b+ E& M: |
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 E9 ~. H: o7 j
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 ?! x) e# Z- I! d6 j
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  u- ~' L; P5 l% v0 Z
  847.               }; k/ x' x4 L( z9 o7 |/ W& n( f7 [
  848.               dwStartUpSteps=5;
    - e% j$ W3 K# k( E6 ~: |
  849.             }4 f( L5 ~! n1 k0 H+ Y$ I1 o+ `
  850.           }
    / O8 ^. W6 H# |
  851.         }
    # ^" s) T; b: i; g  U, X: a- N- e
  852.         else9 X$ u& s  w2 y: H
  853.         {1 L9 K& J' K0 y: S" \
  854.           dwStartUpSteps=3;
    ' q3 v+ A% i2 a* W% E  K
  855.         }& v9 ~- H( O. A+ x. L- _
  856.       }
    & ~% `1 C2 i4 e0 N$ H! Q
  857.       break;
    + G6 Y( ~5 q, ~8 Y
  858.     case 5:% e5 y0 \; K! O4 s, l' S( R
  859.       {
    : T1 H4 C) k* O) ?7 Z+ U
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    2 j0 E( U% m) X4 ~, ^" y
  861.         {
    + ~6 m" F" R  ~9 x, H, W
  862.           int opt_overwrite=1;: G, v9 y1 a5 l8 h- C# L
  863.           int opt_do_extract_withoutpath=0;3 O9 f" l: k! o/ U. e: O
  864.           unzFile uf=NULL;' V4 i9 m6 j' p& ]1 Y1 [& p: a
  865. ; X$ m: b7 x% \/ D( N6 [
  866.           uf=unzOpen("Wsa.zip");3 a  s9 F# a' p* B
  867.           if(uf)7 W% L# e8 k( F9 p/ o0 y
  868.           {
    ; _5 l& t9 X1 a# `
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    . u) y8 D& F: s' ]7 K& n
  870.             unzClose(uf);
    5 |# l+ S( Q! Z( I
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");+ p, e" j- l7 m
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    % d, e$ o/ \! Z# n
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    & l) L" i- ?( H7 o
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& l4 [. i& o$ d9 S8 m9 w
  875.           }
    & C1 }' [+ C0 }* ~
  876.           DeleteFile("Wsa.zip" );- g2 E9 k; o4 ]( n
  877.         }$ N9 [; X& h8 W3 k+ k: N% c
  878. - J0 \# }1 R0 Q1 s
  879.         if(CheckLocalVersion())
    * y2 w/ B% ^4 \  V
  880.         {
    7 k; I/ B  L* S* C3 e+ ~
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
      G5 f  _" N/ p) D  D4 |
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");5 d6 @9 M0 a9 p/ d, F' @
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");5 \8 w4 Q& @2 V) d1 u+ ~
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) @+ c) o3 u) R6 p1 N" |( {, q' c6 j
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    / O& V5 Y( f$ p% Y1 M. Z
  886.           dwStartUpSteps=99;2 r/ k% N! b: R$ w; S( T" M
  887.         }2 k6 M. Z- f  ~! T1 c: e# P' E- ]
  888.         else+ `+ a2 d4 r% t! W7 C( {. O) q
  889.         {1 U$ |; j0 K6 f2 _. [5 L; x. {
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");( P% N9 ^; Q2 C% X5 S' \
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    # C6 Z" ^2 `7 Z3 f) B/ Y
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");( \% I) e( K0 m3 }) Q
  893. $ Q. ?! o" P/ }
  894.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 Y3 A& e; b6 _& L6 [
  895.           dwStartUpSteps=99;
    $ E1 m& N' @  ~9 D, u
  896.           bFinishUpdated=TRUE;+ O# }( C3 ~5 i- x8 E
  897.         }
    8 v4 j. J( Y* @. }# O( f/ P* I$ u
  898.         bCanUpdate=TRUE;% ?6 h" G7 I: {& Z0 T7 \/ v
  899.       }
    " f* I- }* s0 k2 E' l2 A
  900.       break;
    : `/ l7 m* \  c! q: L  R! v
  901.     case 6:/ r- D7 R* Y) d2 G+ m' \- k. f. D
  902.       {, T' \0 q1 T% @1 M7 {
  903.         if(!UpdateLocalVersion())
    * o0 z/ w# z( L* P: T# o. w
  904.         {
    # t2 v9 ]3 B' M! ^
  905.           if(bRestartUpdater)
    / p1 n& v+ f8 c
  906.           {
    8 f( _" J8 K2 @* R% ?
  907.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);( Z2 y) S) A- \. V) b9 S$ D
  908.             else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
    1 G1 r/ `. h! d7 a
  909.             else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);
    ) x$ m' @6 O/ A. n9 Q3 W
  910.             DestroyWindow(m_pMainWnd->GetSafeHwnd());5 j% V: s. v9 }# T. x- k
  911.             dwStartUpSteps=99;2 d, m: q/ D& I# Z$ ?4 {
  912.           }0 u2 R) M, w2 l
  913.           else% c  {/ y+ ]6 t! t' ]* F
  914.           {
    ! _2 C- O& o! r2 t- v9 E+ H- y
  915.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈竒ЧΘ.....");. b+ x8 ^% }! L% i
  916.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新的资料已经完成.....");5 V; M  ?  P" R$ |" s. x3 `
  917.             else                                                      dlg->m_ListText.AddString("updated file ok.....");
    % s# b' |: E# `$ e3 e
  918.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      l$ S* z  s. D% f
  919.             SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,0,0);3 v0 k% S' Q% d: N+ p
  920.             dwStartUpSteps=7;3 e' W0 F" J. @
  921.             bFinishUpdated=TRUE;7 X4 W1 Y! q# _  l/ x+ w$ T
  922.           }
    : k3 g+ S6 k+ D* `9 ?8 [
  923.         }* ^5 H2 L4 K# E: {& M
  924.         else
    1 \+ @$ H/ x+ y" S- C. c' ?
  925.         {; _1 }, N- z1 l1 H4 t) J9 E0 o7 {
  926.           if(bRestartUpdater)
    - [- L2 {% t4 L" G
  927.           {
    : ^. F' A- e" f4 A& n" u8 q
  928.                                                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);
    6 P+ P/ Q" K2 T
  929.                                                 else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
    " e+ Q% C! i7 @3 _7 y
  930.                                                 else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);& r% L9 V( f+ @# T* p
  931.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    + }7 w) l. l! V% C
  932.             dwStartUpSteps=99;/ @  A( \- y6 q  {- B
  933.           }
    9 m; ~; h# O, m8 K. F4 n
  934.         }8 c6 i* w2 q5 }8 z7 N; Z
  935.       }
    ' D( P/ P" t7 \8 w4 Y9 K
  936.       break;" M# z/ G5 M" o9 g, i
  937.     case 7:
    " g. X5 i3 H2 b2 G
  938.       {# o' `. S* ?1 x' p& z
  939.         char szExecuteFile[14]="Bf_Client.exe";$ y3 j, |: _# c: c7 @
  940.         if(GetFileAttributes("Run.exe")!=-1) strcpy(szExecuteFile,"Run.exe");
    $ t& ^9 u8 z: k* b, U; @' F
  941.         if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);, J; d2 v0 z5 S
  942.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated2",NULL,SW_SHOW);
    ! ~: B3 V3 _: M- \% f
  943.         else                                   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);
    ( q, d( B; W# ^: X/ n& E0 x7 [
  944.         DestroyWindow(m_pMainWnd->GetSafeHwnd());
    " j" a- }+ c$ ]/ c) t# w
  945.         dwStartUpSteps=99;
    % |" ~/ N, R& D" X+ }3 {! a
  946.       }
    : j+ c, j: ^, q& A6 J
  947.       break;3 D9 b7 X0 T3 \/ K5 h8 h
  948.                 //add by cece7 |, A1 `# [4 a
  949.                 case 8:" ~, ?5 d! h' Z" y! K; r
  950.                         {  C& \* Y: `, R3 o) E# N6 a. i
  951.                                 if(!Dn.Connected())
    ( n: N9 I' f& M8 W6 \5 Q
  952.                                 {
    ; s, A; H" L1 U$ f# |: A
  953.                                         dwTotalFiles=1;
    6 r8 M3 t5 a) U; o
  954.                                         dwDownLoaded=0;
    $ h8 n% c! C- k5 u
  955.                                         bSilentStep=TRUE;
    # D* ]2 |8 B3 ^
  956.                                         bCompressed=TRUE;6 l5 z( [6 F5 \% G: R. l
  957.                                         strExtLocal.Empty();: ?4 j6 E. L5 M
  958.                                         strFullName="download/CRCTable.txt";
    $ p7 Y3 ]( y$ a+ h4 t+ F
  959.                                         dwProgramState=AP_CONNECT;
    # P) M& x3 s/ R' a% i$ n+ V6 h
  960.                                 }
    ! Z! K8 m9 s* D* [4 ~5 u
  961.                                 //
    # T6 q. A7 k, f1 j
  962.                                 dwStartUpSteps = 9;
    6 V! {: _. [$ z/ ?" B) I/ `
  963.                         }
    . ?; S% O. h/ L9 }. ?* ?: J; Z  w
  964.                         break;  z: \6 R) e$ F
  965.                 case 9:
    ! v2 L+ t' T5 t4 ]2 Q
  966.                         {
    4 P$ Z& \3 L0 Y2 z3 {: I
  967.                                 if(!Dn.Connected())0 v2 u& |) t# R7 }0 ?, K, \
  968.                                 {" V0 B) S- _! r( l' ^  g; l. ^
  969.                                         dwTotalFiles=1;
    8 S6 F' r1 S+ N' C/ Q8 y
  970.                                         dwDownLoaded=0;
    5 y& y' e. Y3 \: [5 y" w
  971.                                         bSilentStep=TRUE;
    3 J9 @, t$ H  ~  L" f& P
  972.                                         bCompressed=TRUE;: \$ L: Y/ m: k1 n3 w1 u, P
  973.                                         strExtLocal.Empty();' w+ M! G6 M: G" ]  b1 \
  974.                                         strFullName="Run.exe";
    ) h4 }" ^  }) x- t% N6 a
  975.                                         dwProgramState=AP_CONNECT;; }. {5 p! U& t) r
  976.                                 }$ P. F7 ^9 G& n6 a& D: P1 h
  977.                                 //
    9 n/ e$ c7 d: C3 n: `1 v4 N
  978.                                 dwStartUpSteps = 10;: k6 u( n3 y+ k, V1 T% D( m
  979.                         }+ b/ u, \3 p6 g: r4 w/ x% b2 f
  980.                         break;" |5 y  o/ c  G/ `; M/ _7 Y0 Z$ h
  981.                 case 10:* H) X$ d, _, G9 V1 s1 [
  982.                         {
    ( p& k, i6 l* F
  983.                                 if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);
    " U) V4 N: O, B: \0 l, t
  984.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open","Run.exe","updated2",NULL,SW_SHOW);+ a7 D* R: x4 S* Q% V9 g
  985.         else                                   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);
    3 J& J5 f! n; Z/ q  M$ ]
  986.                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());, Z3 n- P% |+ A, p
  987.                                 theApp.bClickRunExe = FALSE;
    " [% w0 H9 k6 Z8 [2 T& l
  988.         dwStartUpSteps = 99;
    5 D* l5 ?4 Y& @0 |. |" F$ j
  989.                                 //' M; S, \9 P+ k
  990.                         }
    " Z. \! `/ u8 t( ?
  991.                         break;
    7 }5 v. Q1 v$ \. M* o0 O% r6 C
  992.                 /// |, L" g$ ~$ Y9 T
  993.     }
      K7 m/ _8 V. ?5 j
  994.     break;& X8 x& E! ]5 T9 I6 j9 {
  995.   case AP_CONNECT:; M9 p1 j: p- }4 p! Q' N
  996.           if(Dn.InitNWSSock(4096,4096))
    : V" C& S$ d6 y& T
  997.     {
      O$ d: I, D" ^5 b
  998.       char szPathName[MAX_PATH];
    # l5 t( E# ~( w4 b% o, r7 {2 L0 s0 J
  999.       dwLastSize=0;
    7 S# h/ Z! ~5 d3 O8 d
  1000.       GetPathFromFullPath(szPathName,(char*)(LPCTSTR)strFullName);
    % _3 a& y$ A) F9 V8 a& j
  1001.       strFilePath=strExtLocal+szPathName;" q5 p; i+ c( e( S
  1002.       strFileName=strFullName.Right(strFullName.GetLength()-strlen(szPathName));, R2 C- b9 @0 f- u; ~
  1003.       dwResumeNums=0;1 J7 Z, v( D% [5 k
  1004.       CString strTempName;, H  {, W. c. J' o/ m; S
  1005.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);
    . ~: p) f8 B/ Y
  1006.       CString strCountData;
    3 O' @( t: R& C: q/ W. `; p- F
  1007.       strCountData.Format("%d/%d",dwDownLoaded+1,dwTotalFiles);
    * o( m% N- c2 z0 }
  1008.       dlg->m_FileNumber.SetWindowText(strCountData);7 E2 h: P: b9 d4 U5 d7 e# F
  1009.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    2 t6 L: @3 Q/ F: B) y
  1010.       if(bCompressed)
    ' Z+ J+ b6 L( h1 z; ?3 {3 E' g. P
  1011.       {
    % [4 X0 V! r4 ]0 L( Q
  1012.         strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);* I  o: b. S8 M' q; }+ P! T1 a; ~
  1013.       }
    7 D0 G+ ]2 _) S2 w! g( ?4 l3 l: X" b
  1014.       else
    ( P% @" t9 B1 S2 ^5 z6 O
  1015.       {
    / X% d  l  h+ I7 F) l
  1016.         strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);; U3 _- ~0 @# B1 }, _6 r8 m6 q5 Z: ~
  1017.       }
    - u/ s9 l3 A$ G% E/ N2 e- w5 Q
  1018.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);
    ! x: `0 b, ~6 e
  1019.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());. C+ J/ [2 S; d  s% \
  1020.       LastTickCount=GetTickCount();
    # O8 K& d: u+ E4 I0 G8 L3 s. i$ ^
  1021.       dwProgramState=AP_SENDING;) w( n: ]" S: G/ N% o5 s
  1022.     }
    % F/ Y( O- a8 t2 L3 z9 `
  1023.     else% w" H* s* W4 C9 V" g: x
  1024.     {
    $ \' v$ r! M& v2 `1 E0 G: E9 d
  1025.       Dn.QuitNWSSock();# @( \" ?$ K3 Q( r. Q; s7 y5 V
  1026.       dwProgramState=AP_NOTHING;; c9 L# C7 k  F& D& j
  1027.     }- c, g1 \, C5 c* x7 t& s
  1028.     break;
    - V6 f* b4 H) S% M
  1029.   case AP_RESUMED:
    ! ?8 \; ^* }: B* P5 n3 n1 z# w
  1030.           if(Dn.InitNWSSock(4096,4096))
    ; s! M. |3 M' a: P8 m
  1031.     {
    2 E4 X' K0 f2 g4 w% g+ D8 d
  1032.       dwResumeNums++;
    " c' ^. _& a7 j; C  S. ^1 Y
  1033.       CString strTempName;
    / U3 `+ X. O" p8 P* H! y
  1034.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);0 l/ W$ W, P6 a- G: J
  1035.       CString strCountData;
    7 K* D  `( q0 h
  1036.       strCountData.Format("%d/%d",dwDownLoaded,dwTotalFiles);
    * P( x& a7 l3 w5 n
  1037.       dlg->m_FileNumber.SetWindowText(strCountData);+ [7 {1 M' d( F2 V7 x/ s
  1038.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));. B; l# V% c' w5 F* P# L9 }8 L
  1039.       if(bCompressed)+ l( `6 b3 D/ O& L0 I% Y9 F
  1040.       {
    2 P! A- \; b: e) t# _; m
  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);) `! p0 d4 W) L
  1042.       }6 A, k9 Y) s+ `- Y/ c
  1043.       else
    ! B! D. d7 S, g7 f& Q' x, v
  1044.       {- Q( P! N. Y+ Q  G' v
  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);) K$ D4 ^* k/ R  }9 |8 [' A  e
  1046.       }1 c% J2 M8 S' X6 H
  1047.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);
    6 a7 b+ O, Z( g1 m; x0 ]4 c
  1048.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());0 c: F: h2 w# A4 L2 y  t
  1049.       LastTickCount=GetTickCount();" S& c8 `* X5 N  D
  1050.       dwProgramState=AP_SENDING;
    ) R. S% d5 e$ L' |
  1051.     }
    + p3 z! e) i$ \3 `) M% ^% p
  1052.     else# L) F3 d+ T9 X! h6 K
  1053.     {& e' v! F0 A" \( Y
  1054.       Dn.QuitNWSSock();
    - |7 I% @7 S  @
  1055.       dwProgramState=AP_NOTHING;6 g% s4 a; Z' c$ L9 d5 g
  1056.     }6 u6 i) n  I8 P( i5 U- P
  1057.     break;
    6 F+ l, l6 ~8 D: \* S' y
  1058.   case AP_SENDING:. ?! m' o2 H  U. T
  1059.     {
    ; M& q8 x9 [& n4 O: j$ z/ S/ f2 P; o
  1060.       DWORD RecvLen,SendLen;
    1 x! z4 b. b9 H8 |( f7 V$ b8 {& x6 M
  1061.       if(Dn.NetworkLoop(RecvLen,SendLen))7 Q# v& c! w( U  R9 u+ {
  1062.       {
    ' z; o+ \3 r$ D! Q, a
  1063.         LastTickCount=GetTickCount();$ S# S! O2 [/ m- D, k: U& n
  1064.         if(SendLen)
    0 _5 `" ?0 m& E' J! u
  1065.         {: R) B7 t& u+ I( A( ?5 \
  1066.           bReadHeaders=FALSE;
    ' N+ E1 k; G* q7 X
  1067.           dwProgramState=AP_RECEIVE;
    # B! g% l. K$ z( \$ y' h# x
  1068.         }2 W1 @/ _: N" T* \
  1069.       }
    0 q8 \8 L% O8 O, w# W& e# ^
  1070.       else( s" K7 Z8 v, X7 A, g
  1071.       {" O) k. w9 ?. Z6 y) i
  1072.         if(GetTickCount()-LastTickCount>3000)& S' J+ L8 B4 b( x4 m
  1073.         {* y: ^6 O7 z5 w6 R! e
  1074.           Dn.QuitNWSSock();' e( f) \, z, `' J& _
  1075.           dwProgramState=AP_CONNECT;
    ' f. Q. q4 |: A+ V
  1076.                                         //4 N, p3 _' ^1 i$ i$ q) ~
  1077.                                         static DWORD s_dwCount = 0;
    , L5 b0 h1 U& [' y
  1078.                                         s_dwCount++;
    2 ]$ e* X/ u0 m/ H6 i! X4 A8 l) x/ Q
  1079.                                         if( s_dwCount > 10 )
    # G; }1 r: I% n- E: o. H
  1080.                                         {
    + {* o: t+ l; w: H/ G0 w3 E" {
  1081.                                                 if(m_iLanguage==TRADITIONAL_CHINESE)   MessageBox(GetActiveWindow(),"硈钡穝狝竟ア毖叫浪琩眤呼蹈砞竚   ","Error",MB_OK|MB_ICONERROR);+ a" `" j, ]9 l, q8 Q1 M$ H* @8 D
  1082.                                                 else if(m_iLanguage==SIMPLIFY_CHINESE) MessageBox(GetActiveWindow(),"连接更新伺服器失败,请检查您的网络设置   ","Error",MB_OK|MB_ICONERROR);
    ( Z( O# f# p) r5 ~
  1083.                                                 else                                   MessageBox(GetActiveWindow(),"Connected Error, Please Check Your Network Status   ","Error",MB_OK|MB_ICONERROR);
    1 x2 V5 l& k9 p7 k; E
  1084.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());. b3 T9 N& `2 H6 N; A( G! L+ A
  1085.                                         }
    6 `. Z- z2 U) m+ ?) W
  1086.         }/ }' h9 l# Z2 f3 a, H6 |6 }# s
  1087.       }9 `- m* k' V4 O. [
  1088.     }8 Z: D. I* |1 S' k
  1089.     break;; L; a4 V: @  A
  1090.   case AP_RECEIVE:' |! l; P  J/ Z/ N* `$ m; \/ v1 d
  1091.     {( `* v3 B0 ]6 l& @6 Q# N" L
  1092.       int Count;
    7 _& f, L4 c( a0 P+ {  n
  1093.       DWORD RecvLen,SendLen;8 ]1 X8 o- ^* n7 c+ q7 J
  1094.       if(Dn.NetworkLoop(RecvLen,SendLen))0 K5 d& R2 K) c7 u
  1095.       {
    ; Y/ T" {% s/ b% ~2 w4 e2 I+ K  ]
  1096.         LastTickCount=GetTickCount();
    ( W/ u  E) x6 i2 k: o/ f/ z1 I
  1097.         if(RecvLen)
    / M' D2 @6 p, ^# w6 l
  1098.         {* H9 c: K) e7 h/ Q
  1099.           if(!bReadHeaders)
    ; J5 [9 V+ G, _- J9 G5 C9 J! U
  1100.           {( K% y2 E% T7 q7 K# x, q
  1101.             char *token=strtok3(Dn.szRecvBuff,"\r\n");
    9 {( {/ a: l) Y5 O3 B
  1102.             if(token). G' O; S- z! o. _( w& P1 r( [
  1103.             {' w' V8 k( e9 }( P
  1104.               dwFileSize=0;4 b+ H1 M& H: `- O+ _0 L4 ?
  1105.               for(int i=0;i<(int)strlen(token)-3;i++)' {' M6 ?! Y+ q0 z% h) |
  1106.               {
    4 B6 v5 N$ d; U1 H% B* \6 ]
  1107.                 if(!strnicmp(&token[i],"206",3))' o/ d! ~0 k1 a
  1108.                 {8 v$ }; c5 P5 A
  1109.                   if(!bSilentStep)
    * i& i" W9 m0 U4 G' l
  1110.                   {2 }( @( c1 F, }" [6 b
  1111.                     CString strTempName;
    ) U# t8 S; J+ _, x* E/ X
  1112.                     strTempName.Format("%s.....resuming(%d)",strFileName,dwResumeNums);$ ^' _3 Z0 W4 M( f, S& H! b% X
  1113.                     if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);5 i, o6 D6 D  q: S
  1114.                     dlg->m_ListText.AddString(strTempName);9 Q4 a2 ]% _# v2 t) z. X- i
  1115.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ z' Q8 T; Z/ s# @5 A1 b
  1116.                   }8 Y, D# @; \3 J3 t
  1117.                   bReadHeaders=TRUE;) `/ F7 r, E5 v2 P3 b
  1118.                   while(token=strtok3(NULL,"\r\n"))
      J9 p5 s4 U+ a0 M6 E
  1119.                   {0 L. p! {: x: k4 \, r$ U
  1120.                     if(!strlen(token)&&dwFileSize)$ ^' a4 @0 x! X) o. R5 i6 h
  1121.                     {" P4 v! d1 c. ~0 n- s& l  o
  1122.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;
      \1 ^4 V& W' O
  1123.                       if((int)Dn.dwRecvLeft>0), v# [) E6 K3 B5 p2 g( T
  1124.                       {
    4 P% q' G6 k0 O: ^+ h
  1125.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)1 z2 I5 r  R. w% b' M
  1126.                         {
    4 }" }  ]4 m& f7 ?
  1127.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;' `2 b5 [0 Z/ l* `) K  c! W6 y; o
  1128.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    * q2 t8 J+ D" R8 Q
  1129.                         }
    * p8 X8 G8 C+ l* `+ h
  1130.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);
    7 h  {$ p( @9 C# S( t3 Z' |
  1131.                         dwCurrSize+=Dn.dwRecvLeft;: u0 J, E5 h6 w2 Z7 ?
  1132.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;2 b8 l5 s) Q- T
  1133.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    / u+ [& b* w1 C. |
  1134.                       }( A7 v4 F6 E! x& j! y: A9 ]4 |& }( X
  1135.                       break;
    * I/ t) V2 B  ~( D. Q, F
  1136.                     }
    ' \5 T* }( Z( l/ k+ H3 L% \4 J: X
  1137.                     else$ J% A2 L6 o# _; {
  1138.                     {- d. b1 p; p# o# U
  1139.                       if(!strnicmp(token,"Content-Length",14))
    1 }" C. V9 A6 ^# Z" l
  1140.                       {0 O: z; Q9 G$ [( B
  1141.                         if(!Dn.szCompBuff)8 K3 Z1 \& E. P! A+ `0 k' Q
  1142.                         {# A& g& C1 H7 j5 ~: y7 y
  1143.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;' {6 p8 d4 P: P1 u! m
  1144.                           Dn.szCompBuff=(LPSTR)malloc(dwFileSize);
    3 b, q3 P6 A& U2 A) v- _
  1145.                         }
    $ T! h: f, p/ R& W+ d3 t
  1146.                         else if(dwFileSize!=dwLastSize)
    " q; o  p  v3 f# N' H, `
  1147.                         {
    3 I4 W! Y7 T. H4 O1 |! K
  1148.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;6 i( ^" U( v0 [8 t3 y' B
  1149.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    , E, d4 G  b6 {1 c: w, c
  1150.                         }8 v5 F' ^0 O6 E& g& U
  1151.                       }
    # Q  e* c* m, A8 {, d" w
  1152.                     }
    $ _: d, i- d& b# L- X+ L
  1153.                   }, Z, u9 k( Q7 O4 X1 C. o1 @
  1154.                   break;7 o/ e6 ^2 u+ N+ Z
  1155.                 }
    4 U1 p' V; m8 ^( G. {
  1156.                 if(!strnicmp(&token[i],"200",3))4 s* {; N' D# T# j5 N- P
  1157.                 {
    . P& L1 q' M4 O: ]
  1158.                   if(!bSilentStep)
    7 s/ [& k8 g9 k3 T
  1159.                   {
    6 `* ~3 e, [6 p; c6 M6 B' x
  1160.                     dlg->m_ListText.AddString(strFileName+".....downloading");
    - Z# ~+ s+ s) o5 z* J
  1161.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 P0 E$ i: I/ U- w. M9 P6 f* [6 i
  1162.                   }
    3 I3 x1 H( z2 {* I
  1163.                   dwCurrSize=0;1 a( Z$ ?1 f1 |  f
  1164.                   bReadHeaders=TRUE;- g0 Q  d# H% Z; C1 f* U0 M
  1165.                   while(token=strtok3(NULL,"\r\n"))
      x4 |! I( G, d7 m/ X' z  N0 n
  1166.                   {
    9 h5 m4 l, g6 G6 G3 @5 W
  1167.                     if(!strlen(token)&&dwFileSize)
    ) L' H' ~7 @: X8 d
  1168.                     {
    2 k' G; A, p  V2 |( b- Z
  1169.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;0 f0 W! s  e' a- b- m& }
  1170.                       if((int)Dn.dwRecvLeft>0)
    & s6 w8 O& t2 {% G6 }
  1171.                       {6 c7 c6 A8 F! e- Z5 O$ S. G
  1172.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)% c+ r3 s6 Y2 I( z, K4 Q8 ~
  1173.                         {
    7 B! K" K$ }/ p* t
  1174.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
    * M) O' Q/ w! W. g
  1175.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);* \9 H; }: B) H* m4 S0 p
  1176.                         }
    # M& ]/ y' m- T! a
  1177.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);
    ' |2 Z" A; G* E  x7 R4 k
  1178.                         dwCurrSize+=Dn.dwRecvLeft;2 [* f' D, c. }: \
  1179.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;
    * T$ l7 a; S9 D3 s5 t+ _6 L, d
  1180.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;+ v) k( `% K/ f0 a0 W9 v
  1181.                       }
    1 M3 c$ f- l- U: o- t: V
  1182.                       break;- ?5 u! W( D0 G( ]' d- F. {2 G$ O
  1183.                     }5 E: ]* ^9 K* g/ }1 B* M8 Z
  1184.                     else
    $ d, ?; `) V( i5 c. D3 D5 Z  i
  1185.                     {
    8 S% b( e" v: K# n' _
  1186.                       if(!strnicmp(token,"Content-Length",14))
    # M# B' c6 h3 I% a7 g0 O3 f4 c
  1187.                       {
    ! \) Q; ~8 J/ {8 c
  1188.                         if(Dn.szCompBuff) { free(Dn.szCompBuff); Dn.szCompBuff=NULL; }
    - N& O- y  y1 c& p. v. g/ {
  1189.                         dwLastSize=dwFileSize=atoi(&token[16]);
    $ V6 B9 T% Y' R& A, f1 A1 v: M
  1190.                         Dn.szCompBuff=(LPSTR)malloc(dwFileSize);* W6 m, Y& P& F2 e* b. L+ J
  1191.                       }
    6 ?* Q2 T( [( N: p* \+ G
  1192.                     }
    3 K  _! q6 {: {5 G  b' A% D
  1193.                   }- C$ J  v! s" Y) g2 x' d& e% g
  1194.                   break;
    : g+ @; ^: \" x1 ~# z0 @8 E
  1195.                 }
    , k( K  {# g# l% A+ U
  1196.               }
    " G! \/ y1 I  p* |8 x6 J$ z
  1197.               if(!bReadHeaders||!dwFileSize)6 o( v0 Y2 z2 t! k
  1198.               {
    5 C! P9 f# e* O6 l2 l3 @  r: C8 s' j
  1199.                 // Wrong Header or Reading File Size Error7 E+ u$ F6 P" X, i
  1200.                 Dn.QuitNWSSock();
    - [, o1 D( h/ G1 |/ O
  1201.                 dwProgramState=AP_NOTHING;
    $ g7 K7 y+ V2 D8 S/ w
  1202.                 CString strTempName;
    / Y8 W: V4 n) _5 M" C; Y  ]9 }
  1203.                 strTempName.Format("Navigate %s File Error !",strFullName);
    8 ], P, w* B0 f9 T* P
  1204.                 MessageBox(GetActiveWindow(),strTempName,"Error",MB_OK|MB_ICONERROR);
    , C. V, |% @4 X+ u4 Z0 w) M% u
  1205.                 bRestartUpdater=TRUE;
    - u) |* w7 {  p- G
  1206.               }
    7 j, U- c& \5 Z2 O; C1 }  V
  1207.             }
    4 ^0 p, r1 b& J( E  d* a
  1208.             else
    ! M1 Z0 I/ a+ K, e
  1209.             {
    4 F9 J$ V- Z1 n9 G
  1210.               // Have No Header
    0 m; q4 V/ F  U9 ~" \; ?
  1211.               Dn.QuitNWSSock();
    $ M( q% c1 u+ A: S5 s( o5 H) |
  1212.               dwProgramState=AP_CONNECT;# u$ F$ k, s3 o9 V
  1213.             }
    % s3 u. _/ I6 {. u: F( b
  1214.           }
    7 ^9 x) }8 p( X. C5 ^9 B& D% n. [, R
  1215.           else
    $ E' `  c2 T$ X' s" _
  1216.           {3 g" N; j& ]3 }
  1217.             // Reading File From Web0 q4 ]* u; g& i
  1218.             if((int)Dn.dwRecvLeft>0)
    3 \# I- x) W- K$ u# ?" N* @- }
  1219.             {3 g4 M* ^: N3 K1 E9 C. b
  1220.               if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)& a7 \7 G0 u5 z3 \
  1221.               {
    6 c2 _: Z  o. U  A
  1222.                 dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
    * A& a+ e1 x' Z2 w7 W
  1223.                 Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);* x( d& A, d. k9 S/ F2 v
  1224.               }! d# X! N& Z- \" x' z# r  q' `4 f. a
  1225.               memcpy(Dn.szCompBuff+dwCurrSize,Dn.szRecvBuff,Dn.dwRecvLeft);1 `' b& R/ u! W
  1226.               dwCurrSize+=RecvLen;
    & i2 i' J+ X6 W5 r% L  y# H3 v
  1227.               Dn.dwRecvLeft-=RecvLen;7 B5 |# C6 c4 U
  1228.             }
      U4 ~" K1 s. X8 Z9 M
  1229.                                                 dlg->m_Process2.SetPos(100*dwCurrSize/(dwFileSize<=0?1:dwFileSize));
    0 d: @" i( f0 K' s% c
  1230. //            int iRate = 100*dwCurrSize/(dwFileSize<=0?1:dwFileSize);
    & F& w3 f! Q, D# T
  1231. //            dlg->m_Process2.SetPos(iRate);- m" u  q: k+ l( `5 J
  1232. //            if(iRate < 0)   iRate = 0;
    9 b, a$ t$ r6 |
  1233. //            if(iRate > 100) iRate = 100;
    ) T# z5 I0 F; }' o& D1 E* ?
  1234. //            char szShow[5];. z5 M  ^4 T, A/ f3 G
  1235. //            sprintf(szShow,"%d%%",iRate);
    ' p  N3 {" g" A( c$ R5 H
  1236. //            dlg->m_SingleRate.SetWindowText(szShow);0 Y0 {9 z3 a3 t0 X
  1237.                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    6 S6 R& ]0 P/ K6 Z( K' U' X
  1238.           }" z) t& J: \+ Q0 {) @2 Q! u; O- o
  1239.         }# ^4 Q4 _9 m, M9 s
  1240.         else if(dwCurrSize<dwFileSize)
    4 t  |6 q1 p) L0 e% M+ W) Y
  1241.         {
    8 T3 k! e* V+ Z' a6 Y
  1242.           // Disconnection But Size Error5 `" S  M2 \+ y& J
  1243.           Dn.QuitNWSSock();* w! j" \8 R. o! Q
  1244.           if(dwCurrSize) dwProgramState=AP_RESUMED;
    9 V0 x. k$ l+ x7 R+ C; m
  1245.           else           dwProgramState=AP_CONNECT;# i/ z2 h3 X1 R3 o& I! A# V
  1246.         }
    3 K5 V% N) |4 j! b
  1247.         else4 L( [  n; ]; R: W" Z6 g
  1248.         {' C8 g8 j- X0 o; v. ?
  1249. SaveFileJump:* K9 M3 V, U2 B# G, I: x8 y% i
  1250.           // End of File and Disconnect8 v" l# T6 c5 P3 ]; Z
  1251.           FILE *Fp;" u; s, G7 S- A
  1252.           char szTempName[MAX_PATH];
      A& Z, c( s) B  S5 Z7 Z
  1253.           strcpy(szTempName,".\\DownLoad\");* D) V8 z3 p( c0 n, I7 G% |1 Z
  1254.           strcat(szTempName,(char*)(LPCTSTR)strFileName);
    2 T' N% _0 X. {+ F4 Q+ M: \/ c  H2 w. S
  1255.           if(bCompressed) strcat(szTempName,".zip");
    & r. `% v2 Q, S! ]8 B
  1256.           if(dwCurrSize)
    2 i3 m% ?1 k, n2 ^
  1257.           {9 ]5 o- Z3 t3 h
  1258.                   Fp=fopen(szTempName,"wb");' b) c9 {0 l3 _; ^! ~* @
  1259.             if(!Fp)
    3 Q) @; E: S5 V
  1260.             {
    1 C. q$ ]! V+ q+ e' \
  1261.               _mkdir("DownLoad");* _! j* D1 j2 x" y6 ]0 k
  1262.               Fp=fopen(szTempName,"wb");
    3 u: p: l6 _" u$ ]$ ?* \
  1263.             }! `$ U9 K6 [& a) y* P5 ^
  1264.             if(Fp)2 Z/ R# |) G; @' L  Z4 u1 V, W
  1265.             {. o3 o3 Q6 }9 _
  1266.               fwrite(Dn.szCompBuff,1,dwCurrSize,Fp);, I4 s- q4 h9 b  d" q+ z1 W6 R
  1267.               fclose(Fp);5 m. x6 I" v1 f; J
  1268.             }: s' g0 B) M% s1 ^* Y
  1269.           }
    , B/ e3 `" E* ]6 {
  1270.           if(!bSilentStep): u0 p! \2 F2 T' t4 F/ ~- ?
  1271.           {
    / s9 q: T5 d3 k% m% S+ W6 C
  1272.             if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);# ~, d2 {) Z; A$ u7 v1 }
  1273.             dlg->m_ListText.AddString(strFileName+".....saving");
    " @5 n9 ^) D; z& h$ [' `) \" W8 k
  1274.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , Q3 Q4 ?: d+ Z& Q7 i( p' o7 `
  1275.           }
    3 I! X+ }9 T/ x6 C) [& C
  1276.           if(bCompressed)* {- n. Y9 J. v) v  |- X+ m& p! ~, a, q
  1277.           {( r* Y: |6 `' S0 m& D
  1278.                    int opt_overwrite=1;6 e  I4 s; e/ x4 _" _9 v/ F; p, i
  1279.             int opt_do_extract_withoutpath=0;2 ~/ t5 ~3 A, F: c6 l
  1280.                    unzFile uf=NULL;
    7 v! b- X# e. m# Z5 `% n$ b9 A
  1281.                          uf=unzOpen(szTempName);) F1 I8 d/ X4 f: }2 s4 U' s
  1282.             if(uf)
    8 S" ~1 m) i) N7 L# N# W# H' G. M
  1283.             {. m, o, c: t2 U9 d9 {$ V% [% T
  1284.               if(!bSilentStep)3 d5 L7 L4 R( T6 [6 s4 q! _
  1285.               {
    * X/ w* J0 O/ ?0 [' I9 f+ Q5 o
  1286.                 if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    + g6 B3 A% z& r$ P# ^$ l* n" i
  1287.                 dlg->m_ListText.AddString(strFileName+".....extracting");
    . o9 I; \  U  b' V6 D
  1288.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( e$ h/ p: j0 Z. Z7 i
  1289.               }
    & S/ a& x  l& u0 {
  1290.               if(do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,(char*)(LPCTSTR)strFilePath,NULL)==UNZ_OK)
    1 B% d. D+ u* B' H; U( e+ E$ p
  1291.               {
    ) X0 {2 N4 b$ a
  1292.                 if(!bSilentStep)
    . `. |1 q, U$ n
  1293.                 {" E2 N- f- [5 G
  1294.                   if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    5 k! l/ H$ h% `: |# H
  1295.                   dlg->m_ListText.AddString(strFileName+".....done");
    3 D( C/ A8 C7 `! |  V
  1296.                   dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 @3 }8 n0 j! `4 l1 l- J! t
  1297.                 }1 @5 U4 O/ V) @& c0 F5 w1 e
  1298.                 dwDownLoaded++;
    & b4 e0 D( Y+ j% {
  1299.                 dwProgramState=AP_NOTHING;* ^0 N* c9 M! D# A
  1300.               }* G; i% j' ~9 D
  1301.               else
    6 y- n6 E  F$ a8 [' `- B7 C
  1302.               {
    / R+ A+ t! \' X
  1303.                 dwProgramState=AP_CONNECT;
    # n, `5 t2 f# q& o9 h
  1304.               }% X; g2 |; `# c: W2 F
  1305.                     unzClose(uf);( }$ c1 @7 x5 z: _
  1306.             }
    # S/ p6 q- S7 a1 v! g
  1307.             else
    4 [0 B; C+ b$ @. v0 Y& D& T1 x
  1308.             {
    - K$ }# v8 \* @9 l1 y
  1309.               dwProgramState=AP_CONNECT;" T# y* c: b- L8 C' L' ?4 f( D
  1310.             }% j& e" T1 s' x: \5 X$ U
  1311.             unlink(szTempName);% {4 M6 _$ N8 Y! l9 O3 O
  1312.           }
    : c9 Q9 n7 H7 U7 H
  1313.           else$ h% c2 E) V, d
  1314.           {
    ; R3 J3 Y, {1 ~$ T
  1315.             if(!bSilentStep)
    ) D) `# v# a* b! @5 \
  1316.             {
    ; r1 d& X$ M, f6 b
  1317.               if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    : ]8 A) {% _9 K/ t" W- z9 @4 S! l7 @/ X
  1318.               dlg->m_ListText.AddString(strFileName+".....done");8 `8 t! @( u! t# {) ~! u' ]! t
  1319.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , ?& J3 b* y7 f, b- p( L* B- R, i6 P
  1320.             }  G5 l/ \5 f+ `: Z8 B& e" H- T+ N  F
  1321.             dwDownLoaded++;
    ' a$ l# |, g/ s' {
  1322.             dwProgramState=AP_NOTHING;
    , a  S' k$ w. V4 s1 _
  1323.           }
    ( g6 [7 ^& c: d/ O
  1324.           Dn.QuitNWSSock();+ f: _# b! q1 _. V4 U+ z7 {
  1325.         }
    - F: X/ T% {) b8 C0 M. y
  1326.       }# F" v5 t7 t& K3 b6 ^
  1327.       else% }8 X1 [" A" a7 k% _
  1328.       {
    $ F: d. G7 z2 ^/ Q2 `
  1329.         // Connect Timeout$ u4 X4 r# n5 q, W* r2 L
  1330.         if(GetTickCount()-LastTickCount>30000)) ]+ q2 D# u' @9 c( s! E
  1331.         {9 T; b' ]9 h7 @- K+ |
  1332.           Dn.QuitNWSSock();
    ) |+ ^; j! p6 s, Y
  1333.           if(dwCurrSize) dwProgramState=AP_RESUMED;) d8 N, Q2 z& C
  1334.           else           dwProgramState=AP_CONNECT;
    - H0 U' t9 E; A( h
  1335.         }
    $ p3 A+ E- f6 @7 s/ c
  1336.       }
    - E  J7 }" o$ `& Q; B6 x
  1337.     }
    ; A5 H& }4 R+ Z) K- a6 d6 G6 s
  1338.     break;
    2 c6 c$ i7 @; a0 k- X
  1339.   }: I. }7 B' X. U) ^% Z4 \
  1340.         return CWinApp::OnIdle(lCount);; n" C4 c8 l( F2 a' Q
  1341. }
    9 \. ^" t$ w: e! A9 F& p
複製代碼
其实登陆器也就是这么一回事儿……# M2 o7 Q  m1 V! K: S
附件有编译教程和源码2 r9 [2 K; \( E4 R- b  T! K/ \- J
遊客,如果您要查看本帖隱藏內容請回覆

! q& U6 O0 c$ a
4 O. i0 C" i: G! l( g0 F  x

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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