CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
. b& K. y$ _) [$ {2 j
  1. / RevApp.cpp : Defines the class behaviors for the application.% M' q; {* [9 Q8 ~7 B
  2. //
    ( _4 i/ q) R1 u/ d- H
  3. # f- P3 N: @: V0 j3 ^0 v$ G
  4. #include "stdafx.h"' r' M0 t: Q' O# j+ s

  5. / ^& E& k% U# G
  6. //#define UNICODE$ E7 w; L# g! j8 D
  7. //#include <gdiplus.h>0 |/ A: G! \, |9 T7 k2 p; u# H2 |
  8. //using namespace Gdiplus;
    # x+ W3 i3 Z: x
  9. 7 ^: t, `- h5 l  O5 q, Y
  10. #include "RevApp.h"
    7 q6 k" h. Y9 W/ L: n" `9 ^
  11. #include "RevAppDlg.h"
    ) n. A) O- A- M+ b) _
  12. - p" N* v; X3 R7 _1 s9 u5 ~
  13. #pragma warning(disable:4786)
    / b  Z/ n. m& I2 u* z7 K3 O
  14. #include <map>
    , N  }  T- R) h) {, C
  15. #include <list>7 i2 c% B% Q5 _
  16. #include <direct.h>- y# Q( h" K" o7 Y: S: u) u4 j

  17. + Z# x& y9 `# {8 ?  Y
  18. #ifdef _DEBUG9 x& t2 J$ ?; p# x
  19. #define new DEBUG_NEW: i: a! _1 t9 z% y8 {
  20. #undef THIS_FILE- V& ]1 c5 N* k; E" F
  21. static char THIS_FILE[] = __FILE__;
    - u7 \; t3 L, [% _
  22. #endif3 i& V- k$ m2 X/ p. p! X3 n% w
  23. #include "SkinResDef.h"3 I- a% u( `1 M7 d$ ?) p. D8 t
  24. #include "ChangeBG.h"2 B% F" {3 x/ a4 `: Y
  25. #include "AFXINET.H"
    9 X' r! X$ ^2 G

  26. 0 ~% ~, U& i$ T1 q
  27. #define TRADITIONAL_CHINESE 0
    . A" f1 @' g" S7 C0 w
  28. #define SIMPLIFY_CHINESE 1! B# n' {! O6 h$ e9 n& w
  29. #define ENGLISH 2
    : k: i0 V1 @- x5 P0 n
  30. int m_iLanguage = ENGLISH;
    # Z  c- ^4 [; _2 \5 I2 k( w2 p" Z
  31. /////////////////////////////////////////////////////////////////////////////$ O0 g  V8 B+ U
  32. // CRevAppApp
    $ ^. u+ O; F& P& W* h

  33. 4 C6 z! B. \1 W9 z! V
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& F: I+ U# L6 i. w- X; u9 ^" f* X9 Y& a$ B
  35.         //{{AFX_MSG_MAP(CRevAppApp)! Q  Z6 f% Z8 b* E0 I
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ; E$ x  j$ V* a' {
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 a# b. j& ]3 {+ o' w  G3 ?
  38.         //}}AFX_MSG: Z# `# L+ ^, e2 q9 A
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    3 O& b& t% K+ N( f( ~' X! ]! ^; @
  40. END_MESSAGE_MAP()  ?  Z% l1 r. _" m3 R/ O1 |$ c
  41. + d( e3 [: K  M
  42. /////////////////////////////////////////////////////////////////////////////
    6 `: S& f; k( V7 x( Y
  43. // CRevAppApp construction" o& x) u4 G7 \5 A% B( D6 s4 u2 S
  44. # i) Z* g$ n9 V3 j2 i
  45. CRevAppApp::CRevAppApp()
    ! J) ]$ p% R9 C( r( A: C# Q
  46. {( X' ~1 ?, A8 E
  47.         // TODO: add construction code here,1 ?( X, F, I, e+ |, A: ?# m# o$ O5 \
  48.         // Place all significant initialization in InitInstance
    ( f' R/ Q6 Z$ P4 ^8 G
  49.   bDisplayIsBig5=FALSE;
    ( s2 h9 C- ^+ \+ q6 q; U4 J+ _
  50.   bRestartUpdater=FALSE;
    ; I$ l  q, E! Z& J0 q& P7 w& G
  51.   bFinishUpdated=FALSE;
    % K9 D0 J: a) Y6 g( w* l
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;- \' j" C2 j! _% w& z2 j7 `
  53.   InitChangeDataBig52GBKS();
    + o) a; r" C( y
  54.   InitChangeDataGBKS2Big5();
    + a+ S8 |8 Q, m% _( y7 G
  55.         //+ v( a0 g5 \) j. }. {7 Q
  56.         bClickRunExe = FALSE;9 k" o9 l" B! _5 u$ X
  57.         //
    - b) E0 x& O( X9 ]9 o: C  F0 L( K3 `
  58. }1 H$ ]* E6 v( X+ J: D

  59. $ P* i7 B, r  t( H
  60. CRevAppApp::~CRevAppApp()
    6 b8 d( \( ?. k& H) m* Q7 c
  61. {, j5 z: w4 y: y$ k* R7 m
  62.         // TODO: add construction code here,# n% ]. ], N- A2 O
  63.         // Place all significant initialization in InitInstance$ I) Y4 J: r* L) k: q" X
  64.   EndChangeData();
    & `4 ]5 S+ Q8 R# V2 N5 k
  65. }6 }% K9 w  u7 d/ v+ I
  66. - T, s( _; ?8 ~! S6 J& T
  67. /////////////////////////////////////////////////////////////////////////////
    7 c, y6 S' t( q3 v
  68. // The one and only CRevAppApp object
    / x2 s0 J4 N6 Q" M+ b  ~

  69. # D% V: _* Q2 T2 J7 F
  70. CRevAppApp theApp;/ \+ _6 _  {6 i
  71. ; N, ]" w. H: `, T3 l7 ~( s6 E+ B
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    2 w$ @9 ~' X3 j3 j) {
  73. {
    - d4 h) l4 [# ]+ f+ O) V
  74.   int iEOF=0;. O1 G7 i& s6 d
  75.   char szTempName[MAX_PATH];: Z. c; N* L: p1 r$ X' ^( R" X) b; H
  76.   *szFileName=0;
    & @) B. ]- ~4 R" d% E9 P9 U1 I
  77.   iEOF=fscanf(fp,"%s",szTempName);
    + }8 N9 {7 G+ X
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    5 e; D, v' F0 v1 P6 J
  79.   {
    , b  ~, V; k0 @- s9 q% a8 f& b( s
  80.     strcpy(szFileName,&szTempName[1]);5 q; F3 }' o4 y$ o5 }& R) t7 D
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)6 @- U) N7 B; U0 T1 U
  82.     {! Y; ^. S" k& ^, v. d
  83.       iEOF=fscanf(fp,"%s",szTempName);
    7 J: \. W; p+ [3 @: k
  84.       strcat(szFileName," ");
    & W: H- E/ k! l
  85.       strcat(szFileName,szTempName);
    2 D6 C* l$ N5 h6 b! j
  86.     }
    0 c' c9 W4 k1 r6 H
  87.     if(strlen(szFileName)>=1)
    8 x0 C  w, |8 ~! x
  88.     {6 s! B- }3 ?6 H- @1 ?+ E
  89.       szFileName[strlen(szFileName)-1]=0;! I, G- E6 W- {
  90.     }
    * ^% D7 |- ~  |) W2 J  g" }3 |
  91.   }
      g, [) O# s, V2 ^8 x/ W
  92.   return szFileName;
    " D, c4 C8 e/ o0 J( r
  93. }
    8 e5 h& i" S* |: ~

  94. - x. @$ k* a6 @9 W6 s% g) X! \
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    : K4 T9 i" L5 S
  96. {
    % l! S4 `5 ?1 ]* l
  97.   FILE *fp;- V1 U: A- V  @0 b
  98.   char *key=NULL;' V2 i/ ]* o4 d( ~% B" E4 P
  99.   char version[MAX_PATH];- @7 Z/ O0 n8 E1 C9 c
  100.   LPUPDATEFILE file,olds;
    : A, I2 ~1 E* W9 a, u( H- ?3 `" ~
  101.   std::map<CString,LPUPDATEFILE>::iterator p;  R3 X& q0 i  @* r' s

  102. * F6 N4 |) _/ e8 F: X: Z7 o0 h8 c
  103.   UpdateList.clear();4 T6 _2 Q" O1 ]* C! ^
  104.   UpdateFile.clear();
    5 t" \; L0 L* m# d5 \) i+ `
  105.   if(GetFileAttributes(filename)==-1) return false;$ `. e$ d" }4 p
  106.   if(!(fp=fopen(filename,"r"))) return false;) P5 k/ ]4 l& k$ F$ ?: y: P
  107.   fscanf(fp,"%s",version);
    . C, w+ y9 E0 A3 U/ r
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    $ b5 o+ B& k, ]! K
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ) C- [2 T3 b) b
  110.   {
    : j* t4 Y$ b% h( R$ g
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 H1 Z, i& L- N' A) t2 Q4 `( ~
  112.     fscanf(fp,"%s",file->path);7 z" Y3 _. ]4 p/ s) H2 I2 z# C
  113.     ReadFileNames(fp,file->file);
    8 B/ V. I" A) r5 W! Q
  114.     strcpy(file->full,".");
    ! {9 S, O/ N: t6 K9 P+ B$ V
  115.     strcat(file->full,file->path);
    ( K, g$ E5 P9 W. w# x
  116.     strcat(file->full,file->file);2 J3 T8 d- G" M2 i  J6 `& F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())! K4 q$ _- B4 {& |4 K: j' Y
  118.     {/ t$ N8 I; Z- k+ a
  119.       file->vers=(float)atof(version);9 _( ^0 z0 b/ }6 Q; b
  120.       UpdateList.push_back(file->full);* {  b% @: H& ^5 W& n
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));  X" b1 P2 h' M
  122.     }+ U+ \9 ^# _8 a
  123.     else
    ( T! |! ]6 U! g, n( }) j" w; A  h
  124.     {% I4 y( R+ Y) r3 s  v) f
  125.       olds=(*p).second;
    ; e: n4 M( o; L( y4 S8 H
  126.       if(olds->vers<(float)atof(version))
    $ v6 Z" q  S5 Z- C) B
  127.       {& Y# b) g: M; I, a, T5 r: @5 [
  128.         olds->vers=(float)atof(version);
    8 ~) H, w% A& d
  129.       }
    " P) [" F! Z. g0 ?1 m% f
  130.       free(file);
    3 W1 c3 ]6 o; V! k
  131.     }# j9 j4 d7 q1 n% S
  132.   }
    4 K' q+ w+ B" P, e2 \) c
  133.   fclose(fp);
    0 H. u/ f, F, i
  134.   return true;
    $ B0 }) [2 _! y- L# u& M* l" C
  135. }
    ! {- |; K) Z4 t, a# \$ v- N* o
  136.   Z4 n, q* Z5 m" p) {* w0 c6 o; L5 E
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
      C/ K8 p. s- A7 `) T  p6 J, @
  138. {
    & G! {+ K8 l# w& R: b
  139.   TCHAR  szFull[MAX_PATH];3 f, c7 |+ a. Q6 j, N. s
  140.   TCHAR *token,*inter;
    # T- \' o6 c" N# O, H. T
  141.   *szPath=0;$ s; b* n! T6 R5 H! P- i
  142.   strcpy(szFull,szFullPath);* c; C" q& R8 m
  143.   token=strtok(szFull,"\\/");$ I8 o0 Q) m) ~* U
  144.   inter=token;: N5 d: w2 O- j
  145.   while(token=strtok(NULL,"\\/"))
    9 v0 K# [6 o0 A
  146.   {
    " h! j6 a9 r  d9 [2 G0 m% f3 o! T
  147.     strcat(szPath,inter);
    5 [! w3 V+ r1 z
  148.     strcat(szPath,"\");8 j& S2 l) L2 g+ a
  149.     inter=token;  @) {' l+ R( E& H+ j
  150.   }
    2 ^0 V& Y) n, A3 d/ E* _0 O" {
  151.   return strlen(szPath);$ n4 {8 P' K& r& R" p6 d
  152. }& l( P, }+ L* F  ~
  153. 4 D0 r3 k; `6 f& V0 z7 Z+ X
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)% Q& z) Z8 [# N; y$ b
  155. {6 F; E  i. F' Q( P
  156.   DWORD attrib=GetFileAttributes(Target);
    # S* B2 _& L6 M$ X
  157.   if(attrib!=-1)+ \7 w  j+ b6 K& K6 v; X- n& h
  158.   {
    / ?% I4 m) F# e+ V' R
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ o" E+ y3 `4 z+ p- A
  160.     {( Y' y4 o0 \5 [4 H" T& o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    / }  S( Z2 B  Z2 _1 [6 k+ F  E* X
  162.       SetFileAttributes(Target,attrib);1 s0 m, z# B. H( S' J( W; l
  163.     }
    # }; p9 b+ l" V2 G6 |
  164.   }
    ( k" ^% Q, I4 T9 J- w/ R& e
  165.   CopyFile(Source,Target,Erase);
    $ B) u/ a9 ^, N3 H& H# a" V
  166. }5 q9 S- B9 A0 `4 f6 A' B1 ^

  167.   y/ a" K, e+ y/ J- n9 d- r% c; K
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    - C( D% g, I/ Q1 w6 Q$ q
  169. {4 u3 ~8 i- n8 U" y3 ~) T
  170.      FILE *fp;
    ! Q. [6 I; X& d% z' N7 r
  171.      char  szBuffer[8192];
    4 ~% `# f1 y$ Z0 r
  172.   va_list  argptr;
    3 _/ s( Z7 c# C7 K, v4 f$ |' n' I" q
  173. 6 z/ e, r7 b/ n  A3 L- @
  174.         va_start(argptr,message);
    ; o6 w2 o1 V0 P/ Y) l# A( }
  175.         vsprintf(szBuffer,message,argptr);# q' Z6 b+ T6 W" R9 r
  176.         va_end(argptr);, u+ \: ~2 O6 W2 C5 R$ s
  177.   fp=fopen(FileName,"a");
    ' t. \% V* X/ v$ b7 @! f. V
  178.   if(fp)5 ]# d2 o8 k( ~6 t& X, T2 [
  179.   {. ^0 b+ {9 U, t5 ~
  180.     fprintf(fp,szBuffer);
    * P# I6 U9 L! `& W' ~( G; E+ z
  181.     fclose(fp);/ `6 ~0 h# A, C6 ]4 I( B- E
  182.           _flushall();
    & m8 s2 m' E; ~0 F  _
  183.   }
    , ~4 @1 X: H3 R
  184. }
    ; _5 g2 H- I: _* L6 t: K) D0 T- o
  185. & M- F4 p; ~$ r; z" k. F4 D, T
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    $ D7 t; e# J$ Y/ N  }
  187. {' t: ^& ?0 u' S3 q" Y1 v
  188.      FILE *fp;
    5 B: M/ D, z9 s
  189.     DWORD  attrib;
    ) C4 u6 {9 H/ t* w9 D
  190.   attrib=GetFileAttributes(FileName);( X# t$ X& e+ S# ^' K8 f7 U
  191.   if(attrib!=-1)4 i) M/ m9 x- D- C0 M  Z
  192.   {
      J) p9 J8 Z. ~, k+ d
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);5 u2 K0 _+ V6 l
  194.     if(!SetFileAttributes(FileName,attrib))% R+ q4 `; p6 h3 f: T( T8 N
  195.     {1 n9 K& ]6 b5 G
  196.       return FALSE;% L$ H2 i, N: `! b/ T; A
  197.     }5 _+ L" C( g$ @$ H1 E6 t
  198.   }
    5 w# ~; x( l3 X; M$ k
  199.   fp=fopen(FileName,"wb");
    * W/ F1 H& s# J: X0 q
  200.   if(fp)0 m7 f( `: ?; {3 ]6 S2 d9 ?8 ]) |1 u8 _: x
  201.   {+ d  \; {- n' z; e$ d
  202.     fclose(fp);" O: e$ z8 I2 a* f7 T3 o
  203.   }  r5 R$ @. Y- ]! t' o$ R/ {- O
  204.   return TRUE;
    7 ^( w, w3 a! H9 H& ^( g% a
  205. }
    - [+ ?# F; h/ B0 |1 N

  206. 9 W: q5 l, r( [2 d6 L6 I
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ) @! y! M! t& p+ t3 C3 r, j! m
  208. {
    8 h0 \! M3 l. ?0 p4 `$ @
  209.   char filename[MAX_PATH];+ f$ V% v7 `) R' N% p/ N
  210.   LPUPDATEFILE file,olds;
    ) a* \  M6 }5 p6 d1 ]  o
  211.   std::map<int,CString>::iterator i;' {' S% j9 O2 D* S( P; m
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 ?9 G* u/ v- ]; c! ?4 W' e
  213.   std::list<CString>::iterator l;
    - c2 s; v- s; Q+ M% @8 k3 Z* B
  214. $ M5 h" g- N) u" R
  215.   if(bFirstUpdate)
    ' t! X4 @0 [1 }7 G9 o
  216.   {
    ( e3 Y4 V3 k* d: D7 Z. B
  217.     dwCurrFile=0;
    . t" i7 V  B" Q" Y% @) y- W; N
  218.     bFirstUpdate=FALSE;
    5 d- d. y  S0 T& |
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) T. ~4 B! d! L3 y' z9 z
  220.     {! \( J' |, c, z0 k. y- G+ @
  221.       dwTotalFiles=UpdateLocal.size();/ j: C; _& G* m* Y/ {/ u/ b
  222.       dwDownLoaded=0;+ z2 i1 M; ?( e7 o( E, p& e
  223.       bSilentStep=FALSE;1 _  J4 J) V0 A4 h( y
  224.       bCompressed=TRUE;, L$ j4 N  I4 u5 d4 {' `3 J+ }6 L
  225.       strExtLocal.Empty();& m# o$ F( r5 K  g
  226.       strFullName=(*i).second;
    ; \! c5 J& W- }0 [  T: [! @
  227.       dwProgramState=AP_CONNECT;
    2 c3 k4 A# y2 i) ]5 D! {
  228.       return TRUE;: B  p, k6 o, j8 y& Q" a
  229.     }0 e9 `& p$ S4 t/ N& e
  230.   }
    6 g5 u4 |( {4 K- N1 V3 ?& b0 i
  231.   else if(bRestartUpdater==FALSE)6 w: [3 b/ Q. |* K0 W7 t3 b
  232.   {1 _& I2 v) L/ W- k6 Z+ E0 X" t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())1 A  S3 ]% g1 {! |! Q! D
  234.     {
    8 B9 n4 \! |: l) s! c7 Q
  235.       file=(*p).second;
    % P' P2 w8 |# B+ r! o2 L# o3 W% R
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()), O6 s9 G+ |' g% j+ }8 S$ N
  237.       {/ L4 {2 c$ x, f8 C* k# L
  238.         olds=(*p).second;
    9 W0 G$ I  r- Q
  239.         olds->vers=file->vers;: }5 S) P6 X0 a' k2 t) W& b+ A
  240.       }- V0 S: B9 a; V; d! w
  241.       else
    . K# D) Q6 c& L% J  i* z
  242.       {+ `% x, e% F7 K+ E8 O1 Y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % [* B1 z" s2 F2 B+ z9 \
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    - s8 h% |  d7 Z$ M) C0 R" v
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    : @% l( F3 u4 g- ]
  246.       }( A2 J: r) F$ O7 V# J: B
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");, J; m( T1 _/ g6 t4 n% y7 n
  248.       sprintf(filename,"(%s)",file->file);# {2 A! f  a' ?  i
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! B( a8 M* Y/ c6 P) Z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ! s: P$ W- |2 x: N+ T: S9 U. W9 u
  251.     }2 J2 O. |/ L6 L' S4 z% K" x
  252.     dwCurrFile++;
    ; c  }) @/ Z- ]& u) B6 A
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ r7 k5 p% m* \; s/ g
  254.     {: u/ T4 b# U6 j5 s8 a' l5 g4 y/ f
  255.       bSilentStep=FALSE;* b9 c1 ~, N4 o, L  n
  256.       bCompressed=TRUE;
    ! C4 F, C- \4 d; |
  257.       strExtLocal.Empty();; h* f- L; g& g" T! I3 D/ g. T1 K
  258.       strFullName=(*i).second;* W2 B& t( ^$ T/ @
  259.       dwProgramState=AP_CONNECT;
    % y4 J$ E* ^' Z
  260.       return TRUE;; a. A; C8 K! F8 V; s
  261.     }
    ! s! m% @& E! V% A8 D
  262.     if(!bRestartUpdater)
    ' W6 ?2 T0 a& H9 r
  263.     {4 E% J( {5 S" o3 ^5 U
  264.       int iCurrSize,iFileSize;  W- t# S3 e: o
  265.       iCurrSize=0;
    * z3 p; p& _' t
  266.       iFileSize=UpdateList2.size();' u- ~2 ]9 G$ m) y
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");- _" h7 X& |' j% M
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 @  s: ?* m6 J7 J; h& u  c
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");- x( U& d8 u. f: B" S  F* G, N
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 n0 B6 ^' a, N: T  B( W4 o, w; \
  271.       Fclearf(".\\update.dat");  u$ l5 @2 S- o/ K  S: A
  272.       Fprintf(".\\update.dat","Bloodyf\n");  f) f- [' Y" u0 P
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++); o# U5 A/ ]; u3 y
  274.       {% J* R) Y  Z5 ^5 L
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    8 X! o/ `% F+ J9 f# K3 e6 y- d" I
  276.         {3 D% @' K. l9 d4 e5 ~% ]
  277.           file=(*p).second;
    ) m6 S" i2 ?* |3 Z, o; g( u
  278.           sprintf(filename,"(%s)",file->file);
    6 w7 A/ y6 }# f9 B8 s# c
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " B! x+ R6 }* h# @+ n
  280.           iCurrSize++;
    # W2 ^+ ?/ L8 ~# O5 p/ E  }. s  X
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    0 W& {) q0 P' b( c/ X1 U0 I
  282.         }& I, c  M8 _# N9 {+ }8 R  O
  283.       }4 ]' B( F  N5 M- u5 u  I0 w: U
  284.       unlink(".\\update.txt");
    6 B; z/ `+ `; k" V  M
  285.       unlink(".\\update.tmp");+ H7 w5 t" X2 v) N- q8 \. h
  286.       Fclearf(".\\checkversion.dat");
      ~6 x" `/ R8 G
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);7 ~+ g8 H1 r3 F+ \& T- Y! j: t
  288.       if(UpdateLocal.size())
    4 v6 i$ C& ?% X" N, b
  289.       {0 p: r8 W2 \1 I) M# f
  290.         UpdateLocal.clear();
    % D/ p. m3 x: u) v# F8 y
  291.       }
    6 h4 o2 @. X2 N4 }. ^, m/ |
  292.       if(UpdateFile3.size())% s- C" p! s; G4 L# I' n
  293.       {
    " n0 K2 r9 E4 |; F" i' }
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    : @$ a* E+ g2 L" y# [& K) D
  295.         {9 a( E0 {" F4 l5 [* ?
  296.           file=(*p).second;, H" a( S$ q( d$ \& ~' t
  297.           free(file);
    6 d* i/ f2 {8 ^  b8 A
  298.         }
    ) _5 [/ [' ?4 H. f) q( ]( R
  299.         UpdateFile3.clear();! l9 r9 `8 d3 `: L& }& s6 Z0 w% y
  300.         UpdateList3.clear();
    4 U- T/ R7 A+ r1 ^, ~
  301.       }4 X1 L. m1 |; K! H' U  C
  302.       if(UpdateFile2.size())
    1 Q# [1 z- c. C  D. d
  303.       {
    * O0 i) d* O2 W) g& X! `
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' B' y' o9 `6 k( ^: V- ]: l
  305.         {) ~+ @+ }' M" |9 E$ p% q4 p
  306.           file=(*p).second;7 w+ }! O; R6 F' @+ H
  307.           free(file);
    ! _. D' F2 O, e
  308.         }5 Z9 ]- r8 A4 _# {9 |# p. Z
  309.         UpdateFile2.clear();
    ( ?* y8 B1 d; w* u# n. w
  310.         UpdateList2.clear();
    - w6 [' \4 k8 `* A
  311.       }: p# p2 A' p- X) y
  312.       if(UpdateFile1.size())3 _6 I. a3 l) z5 ]
  313.       {
    . _) v4 ^6 H5 S. [! K; p' s1 u" Z9 u- L
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : G. t5 l8 x# D, Y' |
  315.         {
    9 L/ a, R0 {1 j2 _
  316.           file=(*p).second;: @7 f. S# B6 i1 V) G' ~& y- H
  317.           free(file);  T& q8 p- ]) V9 N3 V
  318.         }
    6 _" m- ]) T" z4 H$ i7 Y* F
  319.         UpdateFile1.clear();) x9 w+ n- L2 [6 J$ s: K+ A. U
  320.         UpdateList1.clear();
    9 b( I2 A3 c7 _! R& l$ m" ]/ P, b$ e
  321.       }
    " [6 X! V  d1 o$ u
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));- G. A7 y1 D) I% J6 n, v  v
  323.     }. A4 s! {+ O6 o( l9 U- d" f5 }
  324.   }3 _, y/ E* p; i. G  X: ^3 v  u, e
  325.   return FALSE;
    / z  d! v$ C: A3 T/ H+ c/ G( @
  326. }& Z- S% I3 L0 Y: Y2 f& _1 }/ ^3 k
  327. , s5 Z! ^- H. c" ~9 W
  328. void CRevAppApp::ClearAll(void)
    - M) G- G+ `" J) ]" d
  329. {
    / k/ U' F9 ?: Q4 ]
  330.   LPUPDATEFILE file;9 D: O$ f6 [6 y) a
  331.   std::map<CString,LPUPDATEFILE>::iterator p;5 C% [7 }8 A' B9 H

  332. . \0 D+ j# A7 j
  333.   if(UpdateLocal.size())( L* p  U" L. j
  334.   {
    6 @- X5 @1 d7 A9 G6 s
  335.     UpdateLocal.clear();
    : I1 f; y' _0 F5 Z
  336.   }
    4 i1 c  F/ ]/ {2 `9 M7 U: e* C
  337.   if(UpdateFile3.size()); M8 Q% ^* X2 z) a5 Z! P
  338.   {) |1 c! e  ?1 n) j, @1 ^# P
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , t% D7 [$ q4 p4 q: C
  340.     {
    & O/ J# \5 u& z6 y* c7 `. b
  341.       file=(*p).second;
    ( s* V/ G3 t- Z. ~" N" G- e  f
  342.       free(file);( ?* T& l# z6 b1 ?* B6 w* u: z3 v
  343.     }+ D% q$ O, D# O) G1 b
  344.     UpdateFile3.clear();- ~5 @  j" p+ R) W. Z. C3 O% ?
  345.     UpdateList3.clear();3 ?: j8 N' ?' y5 B
  346.   }
    & _: k* V2 k  ?
  347.   if(UpdateFile2.size())1 H: C4 _+ ?2 K; }# V, B6 F
  348.   {
    & M; h+ r1 a- \9 U( m2 [4 K
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / e/ m- U* K; d: L6 _  s
  350.     {, R, }" l- P/ o8 f+ w8 w3 X6 Y
  351.       file=(*p).second;. ~. ?2 ]2 s3 }' J1 m2 m1 }
  352.       free(file);- [( @6 E  y+ {$ _
  353.     }9 X  R( @7 S3 t2 q+ S$ f2 w' P0 z
  354.     UpdateFile2.clear();( V0 i; w+ B- B# F. F
  355.     UpdateList2.clear();
    - u# W2 z2 c2 R8 X+ N4 l2 _9 e  p' Q
  356.   }% W% N' U! n5 g, A8 q9 V
  357.   if(UpdateFile1.size()): t5 L* O& P* a
  358.   {
    & Z7 X" ~" s, X1 k8 t8 R
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 y% c6 S; F6 w( V# q
  360.     {
    8 ^* c( i& J- }9 T9 B
  361.       file=(*p).second;! ^4 m, r, v: c6 c9 {
  362.       free(file);( g% b* x3 `5 O5 T* R0 {# f& Q' W
  363.     }# r! X7 T9 t( s& @" d
  364.     UpdateFile1.clear();
    3 A! y" d5 s7 F3 o3 i
  365.     UpdateList1.clear();
    & P0 y/ _  N3 S1 F, l; H$ ^  e
  366.   }
    ( l8 Z: _1 W0 W, w% Z/ C3 C. F0 A* S
  367. }  
    , S/ N; Q) x6 E2 [+ g7 y/ v
  368.   
    : S% N/ o2 A9 R! g
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    * N# E8 V5 C3 f  w
  370. {
    & L9 g. O* i# u. B$ T* D8 J
  371.   int c;7 C4 j$ w4 @7 j
  372.   LPUPDATEFILE file1,file2;
    5 ]) d6 ?: K! @7 x) g9 {# p' Y% C
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ; X% L" h. D8 }! G+ |( @' q1 V- T
  374.   std::list<CString>::iterator l;! b! E7 e4 ~/ v* O  a

  375. 0 M. d; C3 C! T2 L6 F9 I# X( a
  376.   UpdateLocal.clear();
    $ q! e4 b  `" r: m2 P3 B
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    % n/ D! b5 y$ L+ D
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ! b- O5 |* K% [$ Z' c  e
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ' v. [& ^1 ~/ f7 X
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    % y5 h! `0 L6 `5 W0 l) Q
  381.   if(UpdateFile3.size())2 m# ~/ f3 F- \. o
  382.   {
    % [3 S4 j8 {/ R+ |& t( G1 A1 a
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    + ]4 i+ X! b% X
  384.     {9 w( c. U# q5 n% t/ Q1 P0 R
  385.       file2=(LPUPDATEFILE)(*i).second;* `4 X* [$ C7 }: X  Z* D# j
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) [5 S1 m& {$ H; G& C
  387.       {
    1 ?# o7 b& O9 W/ E! v1 M
  388.         file1=(LPUPDATEFILE)(*p).second;
    ) j3 X9 B, Q( c% Q
  389.         file1->vers=file2->vers;
    6 q2 m+ a1 y% ^! X+ t3 @* U' Q) v
  390.       }8 n' L+ Q4 f, ]& x* ]
  391.       else9 }% p( Z0 F& P2 S7 P
  392.       {# C9 L4 d9 g0 R; j
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 q  T2 D4 U* k* }0 S9 |
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ! p3 D$ q0 u$ P
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));( g5 X( Z1 R- y
  396.       }2 c; p' T- \' @: H/ P
  397.     }
    / ?3 U- V) u- c3 ~. c  ^
  398.   }
    % h. A5 M2 H' c) A9 y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , W6 x5 S# t2 Q* R
  400.   {9 A0 y  Y+ W) Y$ D- l# ?
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())! Y# w/ k9 P$ E+ \( y2 v
  402.     {
    6 e$ h+ P/ f4 ~& X
  403.       file2=(LPUPDATEFILE)(*i).second;* w4 e" w3 A! f0 M
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# a3 Q" L6 p8 N% R
  405.       {5 f; ~9 D- C: g1 t! r' x
  406.         file1=(LPUPDATEFILE)(*p).second;
    ; ]7 \& Z# A/ S7 y9 u$ W  X) `( w
  407.         if(file1->vers!=file2->vers)& A# @: F8 \' Y$ j
  408.         {
    5 a& w- W! m/ \0 ~
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ `. ^* j. P, }2 w0 n2 q
  410.           c++;
    / U# V6 K6 F1 D3 q6 X2 T
  411.         }9 R6 ]: u( l8 E. K' {( _* }5 j' C' D
  412.       }
    ! X/ e6 {' y, H. W9 w( T2 [% T
  413.       else
    + a- J5 [" F6 A. M# b
  414.       {" P  o  h% M$ @  ?7 p0 p2 r2 g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 C4 {1 Y! s; x3 s3 @
  416.         c++;9 u( K5 [7 D* I6 }7 _7 D, n
  417.       }
    9 ^; {# q0 s: ~0 L  P# ]- b
  418.     }
    7 `' L; N" Q& z8 b
  419.   }
    ; M* I+ {( P; N5 y6 ?4 E( u; U
  420.   unlink(".\\DownLoad\\update.txt");5 O# M# J* X. [% F3 y9 I
  421.   if(UpdateLocal.size()) return TRUE;  ]" }' e( |2 X+ W
  422.   else                   return FALSE;
    ! B7 r- F2 s7 }+ f5 O! R# y5 q, R
  423. }* F$ A) i: L2 c) a2 `
  424. ; Y. }" r" a4 V: Y+ ?; ]4 M1 |
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"& T" J, R" l! X
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    & [  R8 R* E& I0 @+ Q, ~
  427. ( ?8 p, C; v. e
  428. ) D. ^( u  q, E1 P5 U/ p! J
  429. - b: v$ x5 Z6 o. m" ]$ I. w/ B  M
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ) v: \, l. X, f! H
  431. {
    + w: |% x: A6 U% l+ {
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ! M+ C7 [, \) C* K2 w* B
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 W& g% `, @) P! @8 R
  434.   {
    ' i9 {5 H3 p7 T& J
  435.     char szLanguage[50];
    " N; r( z2 H: t- V/ q* @9 F
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" Y' o9 X! H+ z7 E3 t8 u
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* d. S. w$ F7 d8 Z$ t5 g
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ I9 Z( Q" J% r) ~$ x
  439.     else                                   m_iLanguage=ENGLISH;& S; E0 S/ s$ b- s) w
  440.     char szRegister[100];
    + O! G0 P7 b1 A. }
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& I) B9 \7 a; t
  442.     strRegsName=szRegister;- C  I; a' E6 n# _
  443.     char szPatchURL[100];9 q' y. y8 W+ s+ R4 V  i2 {; @
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");, U6 z; g0 F3 Z" B+ \. W
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , A" u# Q4 v9 S2 a6 ^- R
  446.   }
    , r5 U5 l1 O; K2 U8 a
  447.   else7 X. O* w/ _7 v/ k0 t' [9 F- Z
  448.   {3 O4 H, _' B8 i8 {& p6 A6 ^
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 t# f: H4 A) J+ r# B* {* _6 ]/ d
  450.     strRegsName=DEFAULT_REG_URL;2 f! k0 x4 j+ ^  M- [" Y2 [' k
  451.   }- d0 a; q5 o' f1 \5 E  }9 F
  452.   if(GetFileAttributes("hosts.ini")!=-1)
      F5 D7 u: u7 b! Q
  453.   {
    5 J" W0 }' ?/ [. W, s
  454.     char szIP[50];1 x/ N: g6 Z  V+ `, i; e9 z" K
  455.     char szDIR[300];
    8 E, v* q8 r: L+ K# {
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")): ~* G- f* i" A% p% Q. s) i
  457.     {' x  _; u3 i4 S- G$ F& x" V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");0 `$ c( R2 @+ y$ b( N2 r
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");- H6 l5 F# v% z( h3 ^5 I
  460.       strHostName=szIP;
    ( f5 P4 c1 Z1 N6 z8 P
  461.       strHostPath.Format("/%s",szDIR);' |  V" L$ X% q" S5 ?2 l& n, W
  462.     }
    9 t* ]) m9 @; S9 k( r  f
  463.     else
    2 ^6 P/ a; i" \2 Z  r' {
  464.     {
    9 L; ~% n+ f  v* \) p' @
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % _: x1 s9 p& |( I: T
  466.       {
    ' n- f" G4 o( J% k$ u' g9 n
  467.         char szLanguage[50];  @7 y$ E9 v2 P: }/ m
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    % E7 D. @% x; q( u, |) Z4 \0 @4 _
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; j4 o; c6 d* l" n" L" I9 u
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 v3 q1 n' E# w
  471.         else                                   m_iLanguage=ENGLISH;3 G$ W6 r8 n. F6 x& R7 j8 V
  472.         char szRegister[100];
    % y5 e# V3 Y( S
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! f+ z) U+ L1 z. D# M% E
  474.         strRegsName=szRegister;
    6 `) B* b/ O) U( M3 g% p" D1 b
  475.         char szPatchURL[100];; q- x' E) q. ?  o: i
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! u: O  \6 \1 n  v! [) L
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & @, ?' u( S  D5 W9 c$ J
  478.       }* l1 {- t; j, w8 d
  479.       else1 s+ F7 c( _8 m5 z( ]. H. g: m( M  L
  480.       {) B+ p2 X0 E( X/ ]
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 C. t1 ]# V2 n( h4 G: O
  482.         strRegsName=DEFAULT_REG_URL;: ~/ }# K; X" t6 Q4 f6 u
  483.       }6 u' e  t* m3 q
  484.     }+ N  y: W2 H- H; _" D1 h& L# `# M
  485.   }" `, M1 ], [& n4 z/ t/ w  b. m
  486.   return true;
    ( q7 W: W5 P# R4 K& O
  487. }2 b; ]2 J& X! O2 r

  488. % T0 F/ [$ d( s* i* H
  489. #include ".\ZLib\unzip.h"
    5 _$ F6 z6 C+ q/ j+ T5 t
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    7 o8 H% c; H# l" `
  491. /////////////////////////////////////////////////////////////////////////////
    , `) g6 I" d8 n% W: v: I  z9 i" p
  492. // CRevAppApp initialization
    - o- f# s9 L9 F: M. I0 m
  493. # Z. Z: \& T% Y. \0 _
  494. BOOL CRevAppApp::InitInstance()+ U5 i, C9 `/ Y, s; v9 l( a
  495. {: p8 i" Q0 C  B# T0 n
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ; f$ p8 P& w3 I" t# X
  497. ( Y* i1 Y: _! {$ E- ~5 Z! s
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);% Q" r9 \  U- a' t2 ?+ n( g" T
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    3 k( K1 C0 m8 z  P( q; I
  500.   {
      V' k3 x: n7 q, Z* ?
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ; K# I6 M$ s: `6 D( ?2 X
  502.     GetPathFromFullPath(szPathTarget,szPathSource);% Y$ N% |9 {  n% o  z0 `* C; O+ K# O# c
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))' d) k# [5 z* o6 Y( ?
  504.     {
    % k3 k! P2 n% q0 K5 g4 C
  505.       strcpy(szPath,szPathTarget);
    & Q/ e( r/ A' ~) Q. B
  506.       SetCurrentDirectory(szPath);
    - s) G# N3 I* t* a- n7 {+ ~
  507.     }
    5 A6 M3 ]4 B$ W/ k- q# m& `
  508.   }$ f7 X! p" ~) @+ U
  509. #ifdef _DEBUG
    * C; N5 J( z9 L/ ?+ k
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    7 b- B- Z  g) T! g$ M
  511. #else) H& l) s) c0 H! W* `  ]. B2 U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " g0 n: G: t/ ]
  513. #endif( b' @9 b- F& \1 U: Y1 X
  514.   {! A+ O! {8 @. o& D+ Y3 u
  515.     char tempFileName[MAX_PATH];, R) c% s. Y7 j! G1 `
  516.     strcpy(tempFileName,szPathSource);
    " V2 i  e+ C& H& e7 g* i) |+ @4 X
  517.     tempFileName[strlen(szPathSource)-12]=0;8 w5 y6 i9 r2 d
  518.     strcat(tempFileName,"\\$CSUpdate.exe");0 n3 n5 [& t4 G" Z% R. C
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);3 a' o( A$ k1 Y4 H" p
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    7 g! ^, m" Y4 A0 b. R# B
  521.     return TRUE;
    . n5 B9 ]; g# O" b
  522.   }
    ! x/ t/ i4 d% a% }' A: g4 T. s
  523.   // Nuke 0118: Delete run.exe
    % F0 @  A- W" N8 m) E9 m; n
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    1 K4 a. ^# {1 l$ H4 x
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");6 e! d7 B7 ?' G0 E( h4 Q
  526.   if(!ReadCfgFile("Config.ini"))6 R6 w  G6 T: p3 X: `
  527.   {8 `# C; b$ @5 F* O' j
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);3 A, m/ m/ S( A: o% Y$ h
  529.     return TRUE;
      P& }9 i5 v) m$ {7 |
  530.   }
    7 c: ~4 ?  S: a7 [
  531.   HANDLE mutex;+ f- Z, A/ ]! r0 I6 Q4 I
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    1 D3 ^8 ~. t( ]8 `! a5 [- O: U5 E1 z
  533.   {
    / a  n: ~- n5 \9 R7 Q, E2 X. }
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)2 L6 a, h5 p, `2 q6 l8 Z
  535.     {
    3 Q/ n" i) C8 {" {
  536.       CloseHandle(mutex);
    / Q) X  b9 ~7 V# @( ~) G# W
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);, T( e# X! V+ k3 g% M) s
  538.       return TRUE;! ?8 |0 O# t3 E) C( }# R2 [# A
  539.     }
    8 u2 J% q, x6 J# u& V- N
  540.   }  
    6 N  u) E2 Z1 n" K  {# q
  541.   CloseHandle(mutex);
    # o6 r: S& h: |' C0 @
  542. 7 B7 j8 I, h! h- I8 L* A
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);0 W( N5 I4 \# M( m8 x0 s4 v
  544. 2 ?4 n0 R- t/ K! `. d; ^0 F
  545.         AfxEnableControlContainer();/ V4 F1 a/ B! n2 ^

  546. & s% n. D# y# Y& k+ A1 ?
  547.   bCanUpdate=FALSE;
    ! I8 j9 X$ @' B$ E( _
  548.   dwStartUpSteps=1;+ L, H5 f- Q) \6 i; @
  549.   dwProgramState=AP_NOTHING;
    ; o/ Y2 D4 Y# p2 f+ g# x
  550. " P7 W) M! [  D$ M& F( x2 ~# {; C* ]
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    % a' b+ H- J$ v/ Q
  552. $ d7 v% [' e+ K* F2 t! \
  553.         // Standard initialization' d/ @- n; ?. }, s; Y5 h6 K, D
  554.         // If you are not using these features and wish to reduce the size" I, R8 i! B! r. y1 H
  555.         //  of your final executable, you should remove from the following5 [8 X- ~5 [' E7 d+ Y- ?
  556.         //  the specific initialization routines you do not need.: w/ l2 a% W# N3 P& k! b

  557. / q% q' e: l8 a  @7 K4 }! B
  558. #ifdef _AFXDLL
    8 s3 \1 S, q, b* C2 N% I
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    * b4 D( h; d: y# K- }- g
  560. #else
    & e1 ]& @9 J& z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically  f+ J& `1 @! y
  562. #endif
    ' N2 g/ _# f; W; V3 G% D- K
  563. 7 V5 p# X" Q, M4 @$ g$ ^
  564.   dlg=new CRevAppDlg;
    $ D9 g+ k' Z2 d, U# G
  565.   dlg->Create(IDD_REVAPP_DIALOG);; f; I) s/ j) g
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    3 g+ C- N- S( {
  567.   m_pMainWnd=dlg;3 h/ s1 }- Q3 T5 U0 y1 h

  568. & [4 z) z4 t9 L
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);9 l/ B. B% U1 @2 [( U( [# A
  570. : V- c, d" ^" w8 e6 u% j4 F
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ( w  e; j9 c8 [8 @) u3 p. F* X
  572. //  ULONG_PTR gdiplusToken;( z5 R  I, ?7 {- W) _! n, P, D$ B
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ) ]1 R9 S7 j: |2 A; s/ _

  574. # Y& g! c* ]! z) }
  575. //        CRevAppDlg dlg;
    7 A, B" n' A; x: k' O
  576. //        int nResponse = dlg.DoModal();
    " u% Z! q/ w' v1 B: E3 p+ R
  577. //        if (nResponse == IDOK)
    2 N' v! x' Q5 A5 I& Y& J7 o0 v
  578. //        {! g( z! V- ~" e! W, J
  579. //                // TODO: Place code here to handle when the dialog is
    ) O0 Y, w, Z. {, ^7 X* M* h* j1 A, C- d/ C
  580. //                //  dismissed with OK
    ; l# r- f" f, h" |- U+ s) T. l
  581. //        }
    / D+ H5 n. W, N$ J! O
  582. //        else if (nResponse == IDCANCEL)/ {. `- `! n- m
  583. //        {7 l# p7 \4 \3 X* i' x/ q9 F
  584. //                // TODO: Place code here to handle when the dialog is, A. H7 l. C4 J4 h2 Q
  585. //                //  dismissed with Cancel
    * L- J/ S8 ~! y' G% Z1 x+ b
  586. //        }
    1 u8 F4 o+ a5 c% N8 W1 j
  587. $ N/ q1 }2 L) `  u) y+ i! w
  588.         // Since the dialog has been closed, return FALSE so that we exit the$ p" |7 ^" e$ y: u% E1 z( s3 R
  589.         //  application, rather than start the application's message pump.; l1 x5 p- I% H3 i! h# ^3 x
  590.         return TRUE;
    6 e+ e* U# ]6 m* n! v; l
  591. }
    ) O8 d! {9 n: g3 f
  592. - Y$ F& f" G( G, U, U# f
  593. char *CRevAppApp::strtok3(char *pSource,char *token). J/ p1 c3 ^* x8 d
  594. {% {7 g; S; H$ Z9 C
  595.   int i;
    # L! X+ A, M" L( Z
  596.   char *szRet;
    8 l/ L8 {7 S- B. R
  597. 7 T" o6 a0 O: h
  598.   if(pSource) { itoken=0; sztoken=pSource; }8 `: K3 Z- P6 o: q
  599.   if(sztoken)/ T- s0 A6 {! {& S, H$ |1 `
  600.   {
    , ]' C6 J& T; p' o) L
  601.     szRet=&sztoken[itoken];9 [9 {& g/ H  F4 z9 J
  602.     while(sztoken[itoken])
    / L  f) O: Q% c2 Y- P% t: i
  603.     {# x. K- u/ F$ [
  604.       for(i=0;i<(int)strlen(token);i++)
    6 v0 N, \0 i' I- d& D( H" @- H
  605.       {
    3 G8 t3 r( A  W! V
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]). [6 ~& j& E3 w2 y
  607.         {
    7 O0 T* X( }% b0 q( J
  608.           sztoken[itoken++]=0;. e1 f6 o9 [. r* t
  609.           sztoken[itoken++]=0;
    2 f7 Q+ x( L7 d. n9 c0 q+ B
  610.           return szRet;, A& p5 L7 p' w) a3 h& R
  611.         }0 l! r3 [, w* S/ ]+ s
  612.       }" @8 A, t  f  p# G6 z: |
  613.       itoken++;) p- i) i0 |" V$ D
  614.     }
    ) q" ?, q1 {* Y% u
  615.   }
    1 P) u. ~% `* q
  616.   return NULL;1 ^$ C# R- [1 r9 M
  617. }
    9 l- V( N4 i2 y6 |. p
  618. 6 @: x2 v4 Q# q, S9 L
  619. void ProcessProc(long Total,long Current)" i* m! D5 F8 a4 p; ?
  620. {
    : g0 `' Y' u3 v0 _. v8 d9 |
  621.         MSG msg;( y2 b0 e4 w9 O, S2 G
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    8 p2 C, p8 R# m! C& o
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    , c( h3 C) `3 y0 y% f  T  s) T
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)), j: b& e* C/ C1 z9 G% F
  625.         {
    : d+ E6 i# D; Z( ^! F1 d, }
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & X3 |* F; h. `5 W
  627.                 {' P) r' d/ x# ^' O/ o
  628.                         return;
    3 N% W- i9 f6 Y# Q
  629.                 }
    3 o6 b  `9 k7 _
  630.                 TranslateMessage(&msg);
    . B% F* J" d  m$ a  j  S+ d
  631.                 DispatchMessage(&msg);
    : Q- M+ O3 t2 S2 E( Q
  632.         }       
    % k  \+ G2 m/ J6 O% Q+ P
  633. }9 h/ ~+ f# b0 n9 L/ s9 @) a8 I5 u

  634. ( h1 |4 z  r: m7 ^4 O2 V+ B
  635. BOOL bFirstChar=TRUE;2 Q/ ~* v. j# O# u) B: u6 m
  636. 6 n* w( {% o) w& k1 {
  637. BOOL CRevAppApp::OnIdle(LONG lCount)7 V4 M' g" a8 t
  638. {0 L: l: ~, l$ j" ~( E" C. U; v  G% o8 j
  639.         // TODO: Add your specialized code here and/or call the base class
    3 R2 v! P* C; \# e) I+ [# g
  640.   switch(dwProgramState)
    7 e5 S: I" o8 S9 K  \
  641.   {
    2 J5 X: N3 d8 k, J; b8 K
  642.   case AP_NOTHING:- ^) S, \; z+ L8 ]
  643.     switch(dwStartUpSteps)
    ! [- t3 ]4 j  c* ~3 k
  644.     {; i- b1 S" Z+ k' M7 D
  645.     case 1:, }$ K) W& A5 \* V0 c4 A
  646.       {
    + O, I8 }/ s. F+ M
  647.         int i;
    $ }  E6 ]: V2 ?
  648.         CDC *pCDC=dlg->GetDC();
    ; j2 i2 ~1 P2 x7 @& q0 y7 Q
  649.         HDC hdcwnd=pCDC->m_hDC;
    1 N% j3 r1 J' ?
  650. //        Graphics graphics(hdcwnd);
    ; g4 J: T. F) ~( ^8 [
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");) e2 G9 u' b3 q1 z6 X
  652. //        INT iWidth=bitmap.GetWidth();
    , q" A- g( ^( v6 n1 x2 @
  653. //        INT iHeight=bitmap.GetHeight();& O/ d& p3 n) g0 x5 [
  654. //        Color color,colorTemp;4 g: K0 `  m1 b5 e0 `; g) k
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    , X3 c) D% U9 |: h* z) p
  656. //        {
    * U2 c% A) E. ?( [
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    + s- h. M- N8 e& N! E( S! G
  658. //          {
    $ k+ u2 R5 f' v' V0 m
  659. //            bitmap.GetPixel(iColumn,iRow,&color);( M7 Y+ N' ^$ ^& |
  660. //            colorTemp.SetValue(color.MakeARGB(5 [6 s' K+ W5 _0 o+ J
  661. //              (BYTE)(255*iColumn/iWidth),
    # T3 z, k7 |; O: v8 y% [
  662. //              color.GetRed(),4 r. J1 s6 U, C
  663. //              color.GetGreen(),, y3 p' X' ~" r/ x
  664. //              color.GetBlue()));
    3 D- \# C- a- G/ K5 X- `3 Y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);3 Y5 r( R* ^2 @
  666. //          }! \5 g* ]+ E0 `  c" W
  667. //        }# p7 u  [* o3 g4 l# H: x8 |; I
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    2 O* U# X2 T# s4 a
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # O" K0 S$ V5 K% s- ~
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ L' B+ R6 w1 o- i/ G  E# u$ C% ~8 }
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# x3 _/ W: o- E# N) p& d
  672.         for(i=0;i<240;i+=8)
      r, t6 {- w+ g  u% W
  673.         {& F# |3 V1 ]# y  m$ @% q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 ^/ \7 Y! ~! q+ L4 U$ J$ f
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 Y) O" F5 F& I( P
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);2 o9 z* l/ u# C3 o5 i
  677.           Sleep(33);
    7 h# a& g5 t  X) X2 Y" X# `; F) w5 H
  678.         }
    $ `2 W. Y3 V5 h0 g+ }1 Y: P# ?& I
  679.         Sleep(1000);2 O+ y  @/ r8 d) Y9 |
  680.         for(i=240;i>0;i-=8)8 A& C. o; L. R# E/ Z3 R  M7 x
  681.         {% `7 n) Y7 X6 {
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; W8 X6 J  }4 E! z
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 E) e- L9 o) t$ N6 ^) R
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: X5 h: |2 P# S0 q5 r  ]' y
  685.           Sleep(33);
    4 {2 t+ s1 P0 }/ @3 O) C
  686.         }' q$ b+ i) i  _( K# ?( N( i
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);+ z% j- j! b' Q. X
  688.         dlg->ReleaseDC(pCDC);) z! g; b: `% L3 i! W6 Q
  689.         DeleteDC(hdctar);
    * Y1 Z, t) U6 Y$ n& z
  690.         DeleteDC(hdcsrc);4 ~% ?2 u6 P' g
  691.         DeleteDC(hdcorg);
    & ?3 g: N' O0 @3 J
  692.       }' c3 _. c2 K$ p. `8 w7 X
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);' i4 A9 s7 F1 {* @
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");; c6 _1 [! V5 I, x2 b! [
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");: {& E% I" ]* Z2 ]' K3 B4 G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");% A: h0 k5 t1 E; V$ S
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' n% S1 w: D% W% I
  698.       if(!Dn.Connected())% R1 U8 v1 r6 n& q2 I
  699.       {
    8 I# V, V* V; Z7 D; m% h# T
  700.         dwTotalFiles=1;
    / T# l0 g5 W& x
  701.         dwDownLoaded=0;- M; G$ |$ T* }8 D& i5 l& M+ Z: U5 R
  702.         bSilentStep=TRUE;- _" g4 b) L  g4 H$ L8 a2 b- I2 l4 L- [
  703.         bCompressed=FALSE;$ m' `0 {9 k$ H- |9 f1 i3 L
  704.         strExtLocal.Empty();; b4 M* G8 Q0 d/ D
  705.         strFullName="readme.txt";! T6 i1 j2 h% b  ~0 E# I
  706.         dwProgramState=AP_CONNECT;* L9 m; A( h( a' [8 f4 z
  707.       }, }& j/ |" f% p; q. _0 T4 x
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    5 v: u1 \3 f( y0 ]# o' Y
  709.       dwStartUpSteps=2;6 Q; z9 I5 C& k& r! e( I  z- C
  710.       break;
    # E' U. w) @% B) ?
  711.     case 2:- {* k; b9 u$ P0 F
  712.       {
    3 S1 A8 ?6 w: [6 a
  713.         int iEOF;% |# \/ N2 h5 A( v- u
  714.         FILE *fp;6 ?  C! E% n( f% C- j
  715.         char szString[512];6 y, J! S4 B2 t4 j
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    : }4 J) n2 ]' X# L- e) V  R' k7 D
  717.         if(fp)3 M& X% s0 r: _4 I; w! j& N" X
  718.         {$ v* z/ v0 Y: y) T
  719.           do
    ; z- Z( b- @6 c  U' P* \
  720.           {( i% h5 ]5 j' v1 k
  721.             iEOF=fscanf(fp,"%s",szString);
    ( t3 }+ K* _5 A8 O$ A, M- F
  722.             if(strlen(szString))
    8 _2 h( x" z# r" f
  723.             {- U, n( m8 r* I8 y2 Q+ a
  724.               if(bFirstChar)1 ]4 V0 ]; S1 y. P8 X! e
  725.               {
    3 @- O- \) M9 x1 e4 |* |* c
  726.                 bFirstChar=FALSE;, O" a" @7 l# m5 [4 [2 W( o5 c
  727.                 bConnectIsBig5=FALSE;
    ! A2 X! g# W5 v- Y4 T* C3 ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    & Q0 `% M' b) Y5 k. m: z4 C
  729.               }
    3 j; I# s) O: {3 F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    4 V- C5 H, D9 P/ \; T- O
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));% ]! S0 E/ M* X( `
  732.               dlg->m_ListText.AddString(szString);
    1 ], O/ _& W3 {: U7 Z# S5 a, {( X/ P
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: U% Q$ A+ _" J5 d$ S
  734.               *szString=0;, ~+ e4 k) _" t
  735.             }
    ) f2 y' X& {+ u, B: g, \& N( p: N
  736.           } while(iEOF!=EOF);
    ' @# S# `; A! q* O% P
  737.           fclose(fp);
    ! G8 w6 v9 E$ n. H, X  N
  738.           unlink(".\\DownLoad\\readme.txt");  _9 M- U" C4 O  P7 f
  739.           dwStartUpSteps=3;' f) z+ p: ]7 e% x: R
  740.         }
    8 ^& r% h1 t* j7 i/ R/ t$ T7 k# b
  741.       }6 s/ O* O3 O: J( K$ E/ v
  742.       break;
    2 Q" A0 S/ e8 _" E/ f( c2 ]
  743.     case 3:
    7 {1 z3 q& {+ x' r0 x, J
  744.       if(!Dn.Connected())( ^1 N" C- D) ^3 j3 ]
  745.       {1 @, O) x: [, x2 i* D' O: J
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
      R& K1 k3 X) m; r5 o- e
  747.         dwTotalFiles=1;
    : u' ^: l+ v+ E: B8 P
  748.         dwDownLoaded=0;
    8 y8 q$ H& r% j1 @, c
  749.         bSilentStep=TRUE;1 c- f. g% l, c8 v# A. [
  750.         bCompressed=FALSE;9 E. X. W$ {# z% X! p8 q3 t3 L
  751.         strExtLocal.Empty();
    3 t& q. I! ]' f  I5 T
  752.         strFullName="checkversion.txt";$ _7 @" Y+ Y8 N# S. b3 X4 `" R0 n
  753.         dwProgramState=AP_CONNECT;7 ?# C- \, E9 Z5 ?8 Y" U
  754.       }
    6 [* c  y, W% g- x1 z5 K$ E4 i0 ^" @4 C- ^
  755.       dwStartUpSteps=4;
    , e; U' \2 |* {" K
  756.       break;
    + f. d# k( r7 ^" k+ _5 y% z
  757.     case 4:1 A- r" |: b. R# X7 h5 a9 x5 V: d
  758.       {
      x3 B5 B7 \2 h8 g' h
  759.         FILE *fp;
    + f$ t5 C2 K8 y7 }  q9 G
  760.         char szString1[128];# [( q# E1 @2 T7 J: R- ^  W% C* t
  761.         char szString2[128];6 B9 h5 a. S# ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # \- f5 L: a: P" D
  763.         if(fp)3 k1 L1 ~& g7 Q/ c2 F' q6 ^
  764.         {, {9 S% g8 R+ R% K6 y- Z' v
  765.           fscanf(fp,"%s",szString1);, x, t: f: V+ t6 `9 S3 ^, ]5 Q
  766.           fclose(fp);4 M8 ~. }) r7 a
  767.           fCheckVersion=atof(szString1);5 }/ \* S! m$ y4 c# _* _5 i! N4 ~
  768.           fp=fopen(".\\checkversion.dat","r");
    + _* ?% P1 w/ W) E; t
  769.           if(fp)( @5 n( ~/ w, D! l  X7 H
  770.           {
    % U1 B# B+ K3 I2 q
  771.             fscanf(fp,"%s",szString2);* j8 y! _# S" N) T) d) h+ Y
  772.             fclose(fp);: i0 }/ j5 u0 _) ~0 H# l( S" Z/ ^
  773.             if(atof(szString1)!=atof(szString2))- o) o: _, k7 X! \/ Z- r
  774.             {
    . z! p) c2 a: x4 ]  S5 e
  775.               if(!Dn.Connected())" ^+ Q& B- S( G$ i* s% d
  776.               {
    & _4 ?# W$ I, e0 e& e. g& F7 r
  777.                 bFirstUpdate=TRUE;% V7 ^' C& L% D+ M0 a( e; C
  778.                 dwTotalFiles=1;! j$ t0 s, J) U( E5 |! p4 Q5 B
  779.                 dwDownLoaded=0;% i& W; @' I0 D- b) E4 o% e
  780.                 bSilentStep=FALSE;
    % g4 X; e) T7 u# D+ `5 p' [8 |5 v
  781.                 bCompressed=TRUE;8 T; Z1 O0 u. a
  782.                 strExtLocal=".\\DownLoad\";! i  f0 f/ X9 R' a
  783.                 strFullName="update.txt";
    6 b" J) X, D, @$ T- ?6 b
  784.                 dwProgramState=AP_CONNECT;
    ) P9 i% h. ?- m; x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & l' v. ~, ]) A1 B% ?7 L( q
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 @" ^* U* Z; ?' M8 T
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");' r% @4 [/ r: e* f$ R4 `' }/ z

  788. : a' h# _5 N+ l+ J% G
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ N. J1 i( E/ g" I/ E
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    / L( Z* c; J0 u- p3 `7 i
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    + M0 k& M0 p  p+ A
  792.                 {% O: Y4 V; N/ z& \2 K
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    0 Y: ~  j, ?( s- v3 a; t
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* Y& R. V0 ^' U) u# K, }
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    7 _. Z- n. I5 X' Y7 r
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 q$ h1 F) e9 R2 {3 }; P$ @
  797. # w3 R! x/ V6 [! F& D1 }5 ~
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' i7 s+ U( C4 L: R8 m3 M3 V, C
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ) X' y* _6 H/ c7 y2 @
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");4 m4 r: ?/ \: H, w( M. D( y5 j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ n* u. }; W/ t' B( ~1 P9 r
  802.                 }
    0 K  E$ O0 g1 Q2 o3 _; _* U9 G
  803.                 dwStartUpSteps=5;
    , J8 s1 ~9 @5 H2 v/ ]/ m4 r
  804.               }
    3 T$ n) |7 C' k, `
  805.             }
    " D# P" s. B% K) C/ u* [4 @( _
  806.             else, R$ s+ `0 V7 F6 r  ?+ P
  807.             {5 D" ]5 ^0 l: G7 V0 y) ^
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ' P. l7 V% X( Y: b
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");6 e, `0 b; \) M1 c6 X
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");, G1 z0 Q" q# V# z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");3 A$ j( c! I7 `6 ^+ l
  812. 9 T, A5 ]; ?, T8 P
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 e1 S* M  Q2 ^4 L
  814.               dwStartUpSteps=99;
    " ^/ e; l6 `! B. \9 ~" y
  815.               bFinishUpdated=TRUE;
    & t+ v9 [, ?& \. b2 X* L% x9 J
  816.               bCanUpdate=TRUE;
    " w' V7 Q+ Z* f7 ^2 v9 B1 Z0 @
  817.             }( N8 R  g1 m, c
  818.           }
    8 P# \& ^0 E6 {; W- q* t
  819.           else, t$ A- \, A! A1 O4 w' i
  820.           {
    & E& y, {9 @) P, n* y: W( l* J
  821.             if(!Dn.Connected())! ?5 B/ S0 S5 k1 K9 G2 i# r6 u8 o$ q
  822.             {
    4 v3 c  e) d$ z( V/ `6 ?2 p
  823.               bFirstUpdate=TRUE;
    2 m$ K5 X' K; S2 g
  824.               dwTotalFiles=1;6 F/ H+ G# g2 j# m+ G/ H1 A
  825.               dwDownLoaded=0;* T5 I* ~. Q+ S; P, c0 h6 v% G
  826.               bSilentStep=FALSE;* `4 H1 r3 d) K- o! X& l& M  Y- Z
  827.               bCompressed=TRUE;% j/ G4 Q9 T; P" e/ z/ D
  828.               strExtLocal=".\\DownLoad\";" X& d0 f6 Y5 b+ T( a; x
  829.               strFullName="update.txt";
    5 o- t! s2 `: H
  830.               dwProgramState=AP_CONNECT;' ?/ T! [7 `, j
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");& C- a$ b9 p8 h7 I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    % c% R8 Y2 d* z8 Y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");( t8 l8 B7 O2 Z' v4 R
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ q0 k  L6 _8 _" L* s7 {0 M  ?
  835.               unlink(".\\DownLoad\\checkversion.txt");
    5 T: u0 S2 p9 j2 S1 I! g3 K0 h. S
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)9 K$ b& p6 ^; P. }( r, J
  837.               {, s4 |5 y8 f/ b, X
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    5 x5 V( R# G( l/ B' I
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
      d7 o/ j' V9 D+ H( z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");. d6 g0 e: u/ u9 R4 G
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 C: K$ z5 Y4 R9 S
  842.                 $ i  Y# B6 v. |2 W% g1 ]
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      q) A) W5 \8 `2 z* z2 R5 [
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + }5 J: j% X$ m( a# s) _
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    . F9 |/ `3 Z' T" X
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # l9 i$ |: }' U; W& l
  847.               }# ^( |# j: X$ S" z' J% o
  848.               dwStartUpSteps=5;
    $ F# \+ m8 d8 X* O! u/ T6 ^
  849.             }
    * {3 i8 n& W' O# s* M
  850.           }& L- }+ H, ?& E3 \3 |
  851.         }+ ?" s) C' U+ ?6 v
  852.         else% ~& A& Y; x  O3 m
  853.         {
    ) m5 g) x) r6 Q' I4 r6 S7 H) O7 A
  854.           dwStartUpSteps=3;6 H' L% k" y" ?8 U7 Y' [  ~
  855.         }
      ~; F$ `2 b9 H" F
  856.       }7 i+ G; K1 ]& J& I  J6 u. Z- p
  857.       break;, l$ x4 t- Y% t+ M2 F' C
  858.     case 5:' Z9 a# E! B1 f& |4 U1 {+ l+ G
  859.       {0 Y" ~! @/ v; p: }% }3 ]4 G
  860.         if(GetFileAttributes("Wsa.zip" )!=-1); Z* C. g& J2 S* W3 [: C
  861.         {0 f7 A! q- r5 f
  862.           int opt_overwrite=1;/ m: Y3 `& J7 c9 j, l
  863.           int opt_do_extract_withoutpath=0;
    . f$ q/ j" ^2 z1 Z# j% w
  864.           unzFile uf=NULL;
    : E  l5 w9 L7 g7 i' `( x. A

  865. # S( T3 d( {2 r, F
  866.           uf=unzOpen("Wsa.zip");
    / \4 F' L1 g& o+ w) z, W
  867.           if(uf)
    , e/ x. P8 |& I2 A/ W! f$ J
  868.           {
    + e7 z$ `% u! W, u1 J- ]
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    6 ]% H3 P# a" R2 n6 {
  870.             unzClose(uf);
    3 U+ Y% i% F# |8 W( B+ O
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    / f( W1 o1 S; S' N4 Q5 F% H+ u
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    " z0 @* U- @& x
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");. e! }- w4 s: }7 d0 W; [
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 s+ Z( Q# @! _2 T! H# y2 m
  875.           }
    " h! R/ v; V+ A2 G: C9 o
  876.           DeleteFile("Wsa.zip" );" V6 N9 t8 `) O9 x4 g+ b
  877.         }% x: G; h- D( k% B" b4 ?+ @
  878. 3 U1 B2 ^0 n# U; H9 s% f- L4 c
  879.         if(CheckLocalVersion())
      n0 D, X* K, Q9 r+ B8 C
  880.         {
    . Q# p) Q# r, z" W( b" _6 t  ^
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");$ g2 k2 l6 L( b8 A
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ( r+ A0 W# V$ B; L% F* e& D5 f9 H' [9 W
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    2 g! {- j  Z0 f) o; V; p* ]
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % a7 P' N) _/ w/ V9 M1 q
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    1 N- p# j. Y0 @
  886.           dwStartUpSteps=99;) {5 L- c& r: W3 n) i% M* k
  887.         }" e5 ?7 L: u3 Y9 D/ l
  888.         else
    1 v) n8 {, f6 t5 ]
  889.         {
    ) A! v2 z/ d7 S. J  N" F
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! ?% r5 c; V& \3 s
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");3 w: D& l3 U# a1 ?' m
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");( [. x" S$ Y0 c: p0 l: J

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

; `$ {! k; B& ^* A: C

評分

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