CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
8 I+ H+ y& \/ s% Y; L
  1. / RevApp.cpp : Defines the class behaviors for the application.
    2 N8 O# w4 @' O9 w- C  ?
  2. //
    1 H8 N- s$ `" h) n+ X3 S

  3. - i7 w2 M* ^3 I' c8 D, I
  4. #include "stdafx.h". ^* x, h) l- E( p/ [$ z! P
  5. 3 f4 A" F! F! X3 @* u3 D" |9 ?
  6. //#define UNICODE
    - s: _6 z% {/ b/ b) r6 _
  7. //#include <gdiplus.h>
    - T4 T9 Z; s+ j- m
  8. //using namespace Gdiplus;
    9 \) ]+ l9 \/ U' p
  9. * R# M6 y4 [/ o- c0 U' I
  10. #include "RevApp.h"
    ; w$ f& T) N; x" e3 G( @' j% @% k
  11. #include "RevAppDlg.h"2 N! o  _5 M& @

  12. & t" B! r7 T( t
  13. #pragma warning(disable:4786)( J, Y& ^) e: A8 D/ Y, i
  14. #include <map>) ?7 e6 Q  u5 |: E
  15. #include <list>* s3 k' c' @/ B  g7 A
  16. #include <direct.h>+ U! I% O" u3 G  X  p9 }

  17. % L2 K- U3 W+ h% w0 @5 P& n
  18. #ifdef _DEBUG
    ( R2 t0 F  E/ h1 t6 y& U' E* A7 I
  19. #define new DEBUG_NEW# i% k7 m1 x8 W$ ]
  20. #undef THIS_FILE  N( e* I/ J- U; a' s. Q/ e0 K
  21. static char THIS_FILE[] = __FILE__;3 X0 j. L7 ]- v! ]1 X. l& U- Y
  22. #endif4 T  p& T# ~2 T3 h, Q, B: z5 ^' h
  23. #include "SkinResDef.h"
    , c) z8 y( U6 R! S' m; d- W# x
  24. #include "ChangeBG.h"
    / ?! m6 T2 z$ u1 w$ u( z8 G
  25. #include "AFXINET.H"
    8 J  s& p% E' S

  26. + M# p# v" P% p- ^
  27. #define TRADITIONAL_CHINESE 0
    " e6 w+ S/ B% J4 x
  28. #define SIMPLIFY_CHINESE 13 b& f/ y& ?) B
  29. #define ENGLISH 2
    ( u: g+ m& l# ^6 |' w* m9 i
  30. int m_iLanguage = ENGLISH;
    : F& W; |6 i  K( w  }) q% L" I
  31. /////////////////////////////////////////////////////////////////////////////
    ; q7 W* A1 t( Q, L
  32. // CRevAppApp0 `  G- }! e# D# [" `% V0 K+ |
  33. & b9 T9 W6 u" P  ?
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    6 ?+ r& `& x+ p% A  K; Q
  35.         //{{AFX_MSG_MAP(CRevAppApp)4 g- g* i4 ^& }, U
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ' K! \! I6 Y9 ]. I; ~9 Z0 g; `
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!& o, C6 ?$ g' Q! S, \. T
  38.         //}}AFX_MSG
    " D2 V1 @# I# e% J% y" p% n
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp): |& h* I& p' ^
  40. END_MESSAGE_MAP()7 f. O* c; G& {* W
  41. $ X& ?+ k/ U0 p6 L+ I! f
  42. /////////////////////////////////////////////////////////////////////////////
      T0 Z% V2 d: O$ U$ o1 F
  43. // CRevAppApp construction
    / P( m4 T! v' ~& i& I
  44. . M) o$ x" f3 @/ R+ W1 z0 M
  45. CRevAppApp::CRevAppApp()
    $ L5 p8 G; d3 B  ~3 L1 D
  46. {
    3 O2 x# O$ j* V2 b9 j6 O6 ]5 d
  47.         // TODO: add construction code here,: v9 k$ H3 `3 J: d. z- d  m
  48.         // Place all significant initialization in InitInstance8 n2 `4 O/ l7 K9 |4 W* U: t
  49.   bDisplayIsBig5=FALSE;
    7 ~8 }  ?2 r4 {% t- C9 y7 k! C3 z
  50.   bRestartUpdater=FALSE;* t. _% H+ b; v  j( l! w$ l$ Q
  51.   bFinishUpdated=FALSE;. L* f+ O' |! d, U) W' F( ^
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    7 S- _2 _: ]! H  M: Q4 Z
  53.   InitChangeDataBig52GBKS();5 l" q* D6 k1 i5 H
  54.   InitChangeDataGBKS2Big5();
    " Y/ h) b/ n, p/ @  e8 I
  55.         /// m4 i- |$ a0 y. G& t+ L
  56.         bClickRunExe = FALSE;
    ! T) K: L: r; H; ?# L5 w
  57.         /// \) ~" b+ a+ \6 [
  58. }0 o8 y$ r3 Z$ x. D

  59. 1 Z0 O, x7 G% u7 C  V1 p/ e
  60. CRevAppApp::~CRevAppApp()
    6 J& F# J, Y9 Q" w% V# e
  61. {
    4 X+ |$ J: T0 }* N) F
  62.         // TODO: add construction code here,
    5 w, H+ k4 D4 z' u9 h
  63.         // Place all significant initialization in InitInstance1 l7 {+ p+ R+ e4 a0 p2 o; v
  64.   EndChangeData();9 ~9 K* Z* ^$ [+ p
  65. }9 U4 j& Q) v9 k. _; u, @

  66. 6 p. b6 C( h. L0 W
  67. /////////////////////////////////////////////////////////////////////////////# J: F) b5 ?. g+ Z+ _( |0 m5 i
  68. // The one and only CRevAppApp object( A  k4 l+ A# r2 H9 w
  69. ' F6 D5 s- p5 q7 S: \3 x2 [3 [
  70. CRevAppApp theApp;3 a5 u3 g2 ^6 n

  71. 6 d6 Y  v4 W# _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)4 b, d; v5 k. q2 T7 B
  73. {
    9 |" C& G' L- d
  74.   int iEOF=0;
    . k% i5 d, z; u1 ?
  75.   char szTempName[MAX_PATH];
    ' _3 @! Z# v$ S- I: P$ N
  76.   *szFileName=0;
    % F+ F, ?( e/ ?1 q8 f. w, K# R
  77.   iEOF=fscanf(fp,"%s",szTempName);& M+ t! a3 L8 \- y, X0 R
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')# m% Q# f( b5 C$ J- n2 L
  79.   {& x+ W+ ]' Z. o7 @  M! w6 m. C# B$ P
  80.     strcpy(szFileName,&szTempName[1]);
    - X! g+ p* J/ D9 V2 Y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ' M0 {; c( O  t, i& e
  82.     {
    6 k# X' C) y) @) k/ K9 F3 g
  83.       iEOF=fscanf(fp,"%s",szTempName);
    9 W1 f1 u. p) Q3 C( d
  84.       strcat(szFileName," ");
    ' B3 g( Y. E$ H1 g, j6 }! `
  85.       strcat(szFileName,szTempName);
    2 \( b/ f- V$ u4 O0 z
  86.     }6 l# f3 [/ t4 Z$ M
  87.     if(strlen(szFileName)>=1)' Q% {- K' F( w/ b- P
  88.     {0 t" y* W: K2 Z. y$ ]# i; R
  89.       szFileName[strlen(szFileName)-1]=0;: c# Q( @: c$ [9 a
  90.     }5 ]* J# x! h  y, D/ ]
  91.   }
    5 B+ U- D4 }$ A0 {: e3 M
  92.   return szFileName;
    , R6 y; b8 S( s5 |; U& m1 X" e5 F2 Y. r
  93. }
    - p# @8 {- [4 c! q
  94. ' j& c8 J, I2 w! ?2 A/ S* t5 @0 p
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile). h7 b% Y" U5 w# M- w
  96. {# ]3 e6 U6 O; D; r( z
  97.   FILE *fp;8 B6 s8 n- B8 z( L- e* F2 S% h- u  K0 n
  98.   char *key=NULL;" j; |4 u( S8 e, h& a% [9 `
  99.   char version[MAX_PATH];2 S. Y% D* G+ {. o+ w
  100.   LPUPDATEFILE file,olds;
    % x! k1 |0 p0 J7 h4 t
  101.   std::map<CString,LPUPDATEFILE>::iterator p;: |! m$ V- {* f1 a1 E  s

  102. 4 P" R' c+ B3 W* O7 Z
  103.   UpdateList.clear();
    ( B8 N- |* a/ j" b# t# e. @8 g
  104.   UpdateFile.clear();
    " h$ j' l& J8 B
  105.   if(GetFileAttributes(filename)==-1) return false;2 V$ c- R7 [& ?6 F
  106.   if(!(fp=fopen(filename,"r"))) return false;+ e0 J" B2 Q  G4 @4 u1 q! a
  107.   fscanf(fp,"%s",version);' d% _( {/ D/ t& A
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    + J5 P. @5 T0 m7 f2 W9 k
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ' ]+ Z( _+ _1 O- m" x
  110.   {
    ! D! P4 ?- {  ]4 }/ y7 z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 _* c7 C2 X& n  \4 X8 }
  112.     fscanf(fp,"%s",file->path);: C4 O9 t* V* c4 R. R
  113.     ReadFileNames(fp,file->file);
    9 z# f! O/ d6 U9 J: f
  114.     strcpy(file->full,".");
    * L0 p$ c  a- l" b: J# d4 J# i( Z( J
  115.     strcat(file->full,file->path);3 Z; U! X2 r1 [- R
  116.     strcat(file->full,file->file);$ [* r' x* g( q7 F4 O: v
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())4 y5 K) o4 c3 V; m8 J
  118.     {' P. G8 E% H2 w4 {( M/ v
  119.       file->vers=(float)atof(version);
    3 z  Y3 z* v! t, A
  120.       UpdateList.push_back(file->full);0 i- I0 Y+ n2 i8 d
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));3 k( A) H; }! L% T3 P
  122.     }$ ]- @: u, L6 ~2 v
  123.     else9 b: h, ~+ S  O3 @- U( p
  124.     {
    $ @6 f5 Z8 l  i: `0 N' N
  125.       olds=(*p).second;$ ?( m# b+ P3 k+ s, C7 @1 X
  126.       if(olds->vers<(float)atof(version))* k, ^/ u& g. K8 @% \, \1 ?4 V- t
  127.       {( ~5 r: @6 {0 M" Q; }6 g
  128.         olds->vers=(float)atof(version);
    " \8 F* A8 e1 X; S: B3 A
  129.       }
    9 P6 R* v  g% g$ O4 e
  130.       free(file);
    9 ^' O/ M# p# h
  131.     }% X; ^1 E2 T7 y) `
  132.   }
    5 |, u  N* I$ @( i, m2 O9 }
  133.   fclose(fp);
    6 Y5 h7 s5 I" h6 ^  U
  134.   return true;. z5 Q9 X' w# m
  135. }
    / h# P1 t& [# O# u& U% v) a, a

  136. / g' n( \# d$ p+ t& z9 Y/ _
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    1 Y1 P  f3 `, W1 {! V( J7 G
  138. {5 I# N) H3 Y3 m: I5 B/ |7 i" `
  139.   TCHAR  szFull[MAX_PATH];
    / a. n; M1 S+ U
  140.   TCHAR *token,*inter;) p! Q7 g" c' e+ G' B8 |" e
  141.   *szPath=0;
    ) b" \9 ^) v- X& j4 `' R: u; B) f5 U# }
  142.   strcpy(szFull,szFullPath);, {1 Z5 y! q+ s- a1 d) e+ X) O
  143.   token=strtok(szFull,"\\/");- [  p' d! ]; ]
  144.   inter=token;" A, W7 B& w  l1 N+ S
  145.   while(token=strtok(NULL,"\\/"))+ h* V$ I+ R7 c
  146.   {/ S# e7 Q& d/ ^9 u
  147.     strcat(szPath,inter);
    4 f* w. K7 R7 y  ?  {# y3 l
  148.     strcat(szPath,"\");
    0 {. @: [. w( g
  149.     inter=token;
    ! N% c; G+ {0 ]. K; ?
  150.   }
    : }" l, e& m$ L  |9 B
  151.   return strlen(szPath);
    - \9 S* F3 c0 A2 v  s
  152. }
    % Y$ a5 }& }+ H* O: E% s7 i4 U
  153. ( r( V5 _$ K7 ^9 ?+ u4 N
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)9 ?+ ]+ s: j0 \  ~. d
  155. {
    # K: N1 ]! q- c
  156.   DWORD attrib=GetFileAttributes(Target);2 P% j2 E) l# C$ X
  157.   if(attrib!=-1)  b( b7 X) S' |8 O- `3 P
  158.   {# _  Q1 @' }. w1 s! z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ( ~( f. @0 z9 E9 a' G& c) e
  160.     {. q( j# T) S. M: S  @% c  l5 a
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    , ?8 h) p3 \/ c5 g; j
  162.       SetFileAttributes(Target,attrib);% R- }  l4 r9 v& M' x
  163.     }$ k0 X# W$ E. E- b
  164.   }; w2 g! {. k3 {& x! l& {" u+ G2 F
  165.   CopyFile(Source,Target,Erase);
    4 ?! b% y0 ~6 G" F
  166. }* p# M. R. H0 f3 ]- O/ h

  167. 2 G" i! V- g0 y, M0 K
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    $ X5 ]% _, F' R" l$ }- {
  169. {
    5 \1 c2 u: t$ Y2 D; _" D( V+ y
  170.      FILE *fp;& s; g: B( A3 M0 K
  171.      char  szBuffer[8192];, k# B+ W0 L6 g* V9 J" o; s
  172.   va_list  argptr;
    ! ~/ S  U* P0 l1 r" W7 e' v

  173. ( }; u& U) o7 i) ?; A" A
  174.         va_start(argptr,message);
    , z+ C% d: z3 S( V  B
  175.         vsprintf(szBuffer,message,argptr);
    2 j6 \+ A$ \  B6 u" m7 P
  176.         va_end(argptr);4 X, |" d. {. q2 x. u* r/ a
  177.   fp=fopen(FileName,"a");8 p5 R5 q3 e2 H
  178.   if(fp)$ M( M$ g* z+ |( Z- \
  179.   {# h. z: S4 A- ^" ~4 }& C3 h
  180.     fprintf(fp,szBuffer);
    9 r& F+ f2 j& L7 s3 d( y1 ~
  181.     fclose(fp);$ m, M7 Q* c8 `% c% `# f
  182.           _flushall();( E" J  R" ]) y' \# \/ T* ]0 [/ Y2 w
  183.   }- W3 e! \( p" N8 b( _/ C% R7 f
  184. }
    9 |/ y) A0 J. O" x8 _! N7 u, d+ j

  185. 7 ^) Z$ J4 E9 D' f' `, {
  186. BOOL CRevAppApp::Fclearf(char *FileName)+ L. ?7 s8 ^4 `
  187. {+ {  @& f! k! }  l, l
  188.      FILE *fp;) q1 j, C& V& r/ \4 G% }
  189.     DWORD  attrib;
    " S9 o! H8 `! h% R2 P0 t
  190.   attrib=GetFileAttributes(FileName);
    - M! j* S- `; c  `: _$ p
  191.   if(attrib!=-1)
    + O$ h0 `+ K+ p: B
  192.   {% P0 r% p& d* f* t0 }, x
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);: R7 w+ N) Y5 k( X0 V) P& d0 ^
  194.     if(!SetFileAttributes(FileName,attrib))
    ! G9 P6 y9 v) f
  195.     {
    , y* A6 b' C. w
  196.       return FALSE;& b3 M+ z: w2 r  n5 L& t+ j
  197.     }5 N" q/ b0 A0 I' J
  198.   }( f1 {& r# ]& d2 d, O
  199.   fp=fopen(FileName,"wb");
    7 H, W) R6 W' [  c/ o! C( c
  200.   if(fp)
    . z. M" \5 Q4 _, I- L! \* I
  201.   {
    # |% V6 |& p: T. O" Y1 A
  202.     fclose(fp);
    8 Z# P: R! M% h' u, E% g
  203.   }9 S+ s6 x- r! g( ?! `
  204.   return TRUE;0 P6 z2 `: C7 D0 f0 I
  205. }
    & u4 q/ E2 J/ y5 W6 r! `+ p0 L2 r0 F9 t
  206. & i" b. h/ N1 k4 ?* x+ W, c2 [
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 M5 z& d& w) s3 P6 `5 X
  208. {
    - V0 S5 K. o: E; }
  209.   char filename[MAX_PATH];
    ( w6 y+ J# A# ^" d! l8 w6 _
  210.   LPUPDATEFILE file,olds;
    & {# d% l2 z0 m2 z2 i2 o* _) I& W- o
  211.   std::map<int,CString>::iterator i;
    ! X" ?1 k  R" n8 V% B
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 o6 _0 e) |3 _2 P7 k* J  W! y! B
  213.   std::list<CString>::iterator l;
    8 |' a: U: k6 V3 t* A. x* {
  214. " h# ]" H& l( a
  215.   if(bFirstUpdate)
    & D4 G& O' [4 S& D
  216.   {
    1 L! V/ x! \( L8 _/ V
  217.     dwCurrFile=0;3 e* p( S+ V5 ^9 s
  218.     bFirstUpdate=FALSE;
    * A- k/ h& ~- M( W
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 k$ I: q5 ^" \5 e0 b' Y4 j
  220.     {
    + h8 P1 D! ?  ]6 f& i+ G
  221.       dwTotalFiles=UpdateLocal.size();
    ; s- b1 f' ]& q1 J! ?
  222.       dwDownLoaded=0;
    ( B) C0 X7 U7 U
  223.       bSilentStep=FALSE;
    ; G8 K9 E8 Z) m8 P5 P! B7 j
  224.       bCompressed=TRUE;' H# S3 g& N0 ?% ?" f0 E
  225.       strExtLocal.Empty();( K! J6 V$ d. l5 }0 |* I9 p- |
  226.       strFullName=(*i).second;' _) [7 E, l) Q" j
  227.       dwProgramState=AP_CONNECT;$ R2 s9 k2 ], L
  228.       return TRUE;
    $ N0 [# r/ v$ [
  229.     }5 ?" B, |2 S+ q4 ^1 X
  230.   }+ \6 T% p: Q: m! G! I- E$ J! e
  231.   else if(bRestartUpdater==FALSE)
    7 C; M% ~1 L: {+ L# b4 x
  232.   {
    8 j+ v# k. b4 e8 z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())! w+ N: O0 }* f: v5 A1 H. {. t; ^
  234.     {4 B( P+ j+ Y4 X) k7 U# w
  235.       file=(*p).second;7 [, R! z# e+ T% e
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())1 x% C- g: ]* Q7 x8 K
  237.       {0 E& b. P! C) l1 p$ R) v  L
  238.         olds=(*p).second;4 X4 r7 P) z  G5 d5 Q9 e
  239.         olds->vers=file->vers;
    0 v3 C) x6 X9 |# Z. J1 P" K6 W/ a
  240.       }9 M, g+ F! S) J
  241.       else# C- ~# e. b+ P5 I8 x% m: F
  242.       {
    , T) J% F( ^, r
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 I* g$ ]8 I6 N3 h4 ^- n
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    / p5 M% A6 Y; Q; o/ y5 o% M) g
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 G; u: M1 M3 F  ?. A' |
  246.       }, ^% ^% Q. g# ^/ K! R
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");* s3 n  }- S& Z( M! J& F
  248.       sprintf(filename,"(%s)",file->file);
    $ Q5 X" ?2 e: d& E! m4 a- K  R5 x
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( l0 m/ C' W# s% [& t* i
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }) k9 N$ u1 U/ c& M) R
  251.     }
    ! s0 ^' m# i( \5 l6 A- X6 ^
  252.     dwCurrFile++;  o/ z! _& a) j0 o) U/ l
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 B: s# e" R" a) y9 m
  254.     {9 {9 W+ x2 H$ J1 L- H
  255.       bSilentStep=FALSE;/ _' i' m6 q8 y- c2 U" a' H. H
  256.       bCompressed=TRUE;
    $ z% u" F$ b9 a8 d  D% l
  257.       strExtLocal.Empty();; ?4 C* Q) @* ^1 o& j0 V
  258.       strFullName=(*i).second;
    + K- g. R: {) H6 \* S9 B, o& Y1 c
  259.       dwProgramState=AP_CONNECT;
    ) o+ n: k! [5 H8 C3 w8 j8 ?$ b# V
  260.       return TRUE;) P! ]9 `7 i: O1 |# h
  261.     }7 H' y& N* d2 S7 h6 _8 E1 h
  262.     if(!bRestartUpdater)
    " ^+ l3 L* _& `* R0 j+ [: g
  263.     {
    4 m# Z2 @8 n" W0 k1 z1 w( M6 }
  264.       int iCurrSize,iFileSize;' b6 K% s1 l) y
  265.       iCurrSize=0;
    , m0 ^$ B! N( x, {" A
  266.       iFileSize=UpdateList2.size();7 v8 c0 Q3 _+ g8 Y& s7 f/ T
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");8 j' x* T+ i) V' {
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    # h+ P5 m, G1 w, r6 A" v
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 g5 ?3 E8 N# p+ h3 K
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 D' z7 b: J# R( j$ J7 r
  271.       Fclearf(".\\update.dat");
    % Y3 i( u5 Y: b
  272.       Fprintf(".\\update.dat","Bloodyf\n");, g- J. j5 \0 F, j0 \+ O/ x
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)' N, ^& z. o9 t0 D1 c% Y
  274.       {
    9 X# U, U( m# R$ d3 Q9 g! w
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()), k/ T! K* K9 n3 r; C! e$ s/ r
  276.         {
    1 J" m: Q$ Q. ?
  277.           file=(*p).second;& R, v" R5 V( n8 O  H. c
  278.           sprintf(filename,"(%s)",file->file);
    9 l' g( [; g& q* {6 Y7 `
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) E* C& Q  L4 w
  280.           iCurrSize++;
    5 m) P1 \" g5 X4 N- l; ~" v0 Y  h
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));! a1 Q9 k& }2 {; x, x. I
  282.         }
    6 w$ I& a1 @+ \- l" [. M7 G
  283.       }
    , T1 Y3 Q( e% q( `* l4 ]
  284.       unlink(".\\update.txt");' ?" u* p& Z% g' e8 t# K
  285.       unlink(".\\update.tmp");
    1 i5 G  I  \! t- ~' W7 f4 I
  286.       Fclearf(".\\checkversion.dat");' I( U$ Q/ e$ B; c3 B% h8 ^9 C# o; Z. ?* n
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);( l  z  |  i8 ~# B; y: J' [
  288.       if(UpdateLocal.size())
    / q: T2 S& S3 Q3 s# i- I
  289.       {  j# w3 K4 S3 j$ _4 P: p/ A( g: @
  290.         UpdateLocal.clear();
    + U7 b3 B- t2 K6 A
  291.       }
    2 ^, a) @% g4 y
  292.       if(UpdateFile3.size())
    ' p0 T; ]  W" X0 O
  293.       {) f% g4 W7 d* e8 R# p$ q* d
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 ?; s+ \3 m" h7 A3 }
  295.         {% ~6 f4 x+ F2 @# ?. u
  296.           file=(*p).second;# M$ y. Y/ L3 ?( @& z1 l* L
  297.           free(file);
    1 ~8 E" _4 L0 v- D6 M: b. \
  298.         }
    ; {+ {% [/ h4 k: l
  299.         UpdateFile3.clear();
    * V0 U- {. ?0 h% K* |
  300.         UpdateList3.clear();
    : p& @" e% ~5 w% l
  301.       }; U. K/ r% m: Q
  302.       if(UpdateFile2.size())
    ( e& ?- @5 _! }0 }% m$ i& f( J
  303.       {
    # F# c, d: I$ Y* Q. G2 }, V! n
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 a5 s. W) j+ j) _3 B( ^9 C6 K, N
  305.         {3 U: Z1 y+ u' W* V
  306.           file=(*p).second;" |- T5 n; q% ?) _! L
  307.           free(file);
    6 X* r- o) P% u) {3 P
  308.         }) o: V7 E! l! _' [7 N* @
  309.         UpdateFile2.clear();
    * q- R, g( j& R9 l
  310.         UpdateList2.clear();8 ]' w* s, [! j2 D. _
  311.       }
    : b8 d1 u7 |- i' a5 @* J. [+ I  N! K
  312.       if(UpdateFile1.size())4 @5 m5 Z/ Q# Q/ Y
  313.       {
    . [7 f2 l5 r! D, s$ K+ K
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& W( `2 ^( _( q9 F2 U
  315.         {
    : L$ b5 X, K' m: j- x* j
  316.           file=(*p).second;
    ( |) s7 |8 x) u7 n8 Q
  317.           free(file);4 U% `( U/ z( o8 j; Z" v% |& X
  318.         }& u  N" \3 R, E" y' H( ]
  319.         UpdateFile1.clear();
    * |$ V3 T: N7 V6 a+ s9 f& @5 ^
  320.         UpdateList1.clear();
    ( `7 `; V3 b. T) }5 N3 U
  321.       }- k' F# |7 h& A
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    - b7 O; `, Q- Y0 B  b# y$ @# q
  323.     }5 W- [7 g  C& e. t% e
  324.   }
    6 y$ _% _0 Q1 T
  325.   return FALSE;* d" w8 x* h; }  D0 c
  326. }
    : o2 n- P! f+ z; C" V6 x. S
  327. / S, [: E: M) N  J
  328. void CRevAppApp::ClearAll(void)
    ( ?1 r, e" e8 g. B
  329. {9 Z# ~% B3 Q6 r  {
  330.   LPUPDATEFILE file;
    7 t/ k/ E5 c0 j2 `
  331.   std::map<CString,LPUPDATEFILE>::iterator p;5 I- @5 p+ M+ L/ a2 s* D
  332. / Q- Z* Z, M; l- h% L* ~
  333.   if(UpdateLocal.size())0 c  \8 `5 G$ r- d, O+ y1 S3 M
  334.   {% X3 F& G4 \' f' l- x* k0 I; L5 m( @
  335.     UpdateLocal.clear();
    4 K# C6 w) }0 [  ?; `
  336.   }
    4 u, g+ K0 G6 |& L" N$ S
  337.   if(UpdateFile3.size())" Y, [& }, ]- E, @4 b' H" t
  338.   {# g- x& ~9 N9 o0 P+ H
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & i- F9 i$ p3 T; J( [
  340.     {& ~8 G1 {" o, r6 \$ ]
  341.       file=(*p).second;
    ( @$ g# V: r+ u' r
  342.       free(file);" j+ _! }! k" ?% j0 |1 x4 q+ [
  343.     }
    ' p/ u2 S/ ~1 {# H
  344.     UpdateFile3.clear();) o/ X) p* o/ @0 z
  345.     UpdateList3.clear();8 g  [' c  ^8 }& l( d" O' c* s
  346.   }& X' B" g9 @8 N% s; A; J
  347.   if(UpdateFile2.size())
    ! E- A( Q: T2 |! l' M
  348.   {/ `+ R- X9 v& Q* v  d
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 E2 E. U0 _" _/ ^. ]$ ?
  350.     {
    ) l* R' H7 ?" u  Z
  351.       file=(*p).second;9 z+ Y8 ~+ B+ n* A! Y: i8 K
  352.       free(file);! p5 V7 a- Q6 Q3 }- d, o
  353.     }
    $ J5 ]& h- s: |) Q& R
  354.     UpdateFile2.clear();
    6 K6 j9 ~$ ?7 a9 b0 M4 R
  355.     UpdateList2.clear();
    2 c) q6 S" u1 F/ F3 R8 g
  356.   }
    , I( w0 H3 E# c% Q) a+ p
  357.   if(UpdateFile1.size())
    ) I0 K0 J2 v4 `7 K+ q/ Z7 |
  358.   {+ v! y2 u) R/ I# w
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" S, Q+ A. S2 E
  360.     {
    # [1 f7 o) N, Z0 K
  361.       file=(*p).second;
    $ r: K# H- [# v9 e2 ~' ^! B( k7 M
  362.       free(file);5 F7 [: x  h( W, T# p  W) H! _8 p! g
  363.     }
    4 Q1 w6 z4 L, V
  364.     UpdateFile1.clear();+ |, O& I. _' N7 P1 ?$ {+ f: ^8 b
  365.     UpdateList1.clear();& U6 r( R  n6 c  F4 f/ F
  366.   }
    # J! Y& W) V) ^
  367. }  7 ~6 W8 I& c, j
  368.   , u; F2 B1 p! a% J
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 E5 ?. k: L7 ^3 @
  370. {+ s( f5 \+ n" r% M
  371.   int c;
    2 G. M) p6 Z# D6 D3 y
  372.   LPUPDATEFILE file1,file2;) R% a: y# m! b3 f! k3 Q
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;* W# N" }1 z. A+ ^" q7 b
  374.   std::list<CString>::iterator l;2 `, R/ B: P! B+ T* O( L9 @
  375. 7 X7 l& ~9 Y! J/ \, \; M5 _
  376.   UpdateLocal.clear();8 H6 w# X( y& F9 ], K4 _4 j5 A$ B( D
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);/ n8 f- a+ ~7 _/ v
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ [8 [3 z% g$ |: `0 C4 {% @. c! E0 M
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    . L1 e2 O- T$ j* ^
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);) y6 ~* c# W# |7 m
  381.   if(UpdateFile3.size())
    / ^7 U( v" T! K, u
  382.   {
    ( S3 N0 h2 J0 O) Z6 A6 n
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ) i5 C) c- C# Q
  384.     {" j7 F, D% N' t7 Y3 b( t+ u
  385.       file2=(LPUPDATEFILE)(*i).second;
    ; m7 S+ ~7 c7 ?. b. Z% K1 k1 G
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* s' d0 j7 S+ k0 W
  387.       {# E8 S* u4 t# c, B
  388.         file1=(LPUPDATEFILE)(*p).second;8 j" L* ?& \7 Q5 G
  389.         file1->vers=file2->vers;
    * N6 ]- D% x: }' I; W3 M2 _6 G
  390.       }
    / K7 @$ N0 j( a) N0 H7 [3 t, b
  391.       else6 V9 I* a6 C1 o/ m+ \
  392.       {
    3 q) y& t2 _( V6 J0 c8 h# g1 H5 T
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 i6 ^6 B; P3 x/ \4 F, _; e% t
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    , M0 p; {6 b' q+ H
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));7 b8 d6 |5 n9 W. q6 [$ Q
  396.       }
    ) f; r. O% k5 {5 I
  397.     }
    8 n, k! R3 K9 q1 z1 u
  398.   }
    ( j8 V( p# c. `5 I5 v
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; k! e* A" N7 Y' C+ k" j
  400.   {7 R8 D  H  w' T" r
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    , w; d5 Y" D/ R$ q
  402.     {& X& }! o) p/ w' J( ~
  403.       file2=(LPUPDATEFILE)(*i).second;! N5 j* d9 H4 k) O
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    # b- g- s2 Z& H4 I7 D$ k0 ~3 @
  405.       {
    ' H' o! r' s1 g/ ?" R3 B/ `( p
  406.         file1=(LPUPDATEFILE)(*p).second;
    1 t. C* J4 d: Z" k0 ^$ r3 q
  407.         if(file1->vers!=file2->vers)
    * u8 P9 [: z, m6 J
  408.         {
    7 M7 J3 \2 }. s. M7 Q6 [
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 O. h( L  V# W8 v/ ?" C
  410.           c++;
    / K; b& z0 b. G6 M& u* W! Y0 Z
  411.         }# w$ d  y. B/ U/ b$ V. t9 |
  412.       }7 P) ~, i( w1 {7 H; ~
  413.       else
    5 |* V! H. V) d" ~
  414.       {
    + ^  P" x7 W0 \' c
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. Q# ~0 X3 S' S. Y$ ?0 s4 s
  416.         c++;9 \8 g9 s' H. p! B" Y4 j  R1 m
  417.       }# D6 _5 H) g# n7 n9 [3 G5 ~
  418.     }
    ' T* l6 V1 @' I9 ~# T
  419.   }
    : s' m# ^% l# E! ^: r
  420.   unlink(".\\DownLoad\\update.txt");
    # U, @# u6 R+ q
  421.   if(UpdateLocal.size()) return TRUE;; h& S+ t; a* K+ k8 D
  422.   else                   return FALSE;; x7 g' O: P6 e) \& m  G
  423. }
    / Q* C, g2 {9 q# p) W  F) Z
  424. $ F- q7 V- }/ U0 G9 p/ T
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"1 \0 v' s% E8 o3 X$ h) ?
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    9 E0 v2 w8 Q& {- n/ d$ n  Q

  427. ; K" U& v' }& h1 _/ H

  428. / B; B, \5 B* C% }

  429. 9 k2 L& o) m+ A) G0 T( j* q# y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    0 I% }$ s6 H, o5 L. e& W, T
  431. {
    1 X+ S% g5 b6 q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    . p, W9 d; j. H! F5 [
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 C. j( D; B/ ^- W8 A# b9 q& F
  434.   {) R6 m, G+ O7 A  u; v4 q6 w
  435.     char szLanguage[50];5 t! |4 |6 X- t5 H
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! U0 k' g! G: P+ v0 U( O+ Y% C
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ u7 ~9 Y1 G+ x1 F8 ^% G6 g
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 ?& C% J; ]3 _
  439.     else                                   m_iLanguage=ENGLISH;
    2 U4 ?) F$ G: \" ]6 q" _! _. b
  440.     char szRegister[100];
    7 _4 F7 h4 x. m6 T' A
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" s! z7 v/ r6 M7 u, N" C8 ]* W
  442.     strRegsName=szRegister;
    / S  k+ \* Y1 G" U
  443.     char szPatchURL[100];! a- I& y. ^5 C# d& y' H
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' v, g# F# |( J# H) Z, Y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; E" n( _" K. g/ [2 n
  446.   }) b" W% K) n, |0 h6 m* W6 C* |
  447.   else' P( L" _1 `5 X4 Q
  448.   {! x! v+ a# F4 L2 F' d9 o
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( J1 V3 P6 q) R6 e8 _
  450.     strRegsName=DEFAULT_REG_URL;5 j; |6 [9 W4 f4 D
  451.   }6 X. c" h4 d0 A: P+ K
  452.   if(GetFileAttributes("hosts.ini")!=-1)7 |7 ~5 z2 A9 s/ M4 k! S2 [5 P
  453.   {* n# ^% |; y0 U- B
  454.     char szIP[50];) T' t0 @: {, d/ U( `
  455.     char szDIR[300];  l2 E& ?0 ?2 j! A$ }2 P9 l" h
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))# T  t  h( Z0 t6 m  e
  457.     {. a' y. s* z. N( U9 M; ?
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");3 Z* B4 M* m! X, l) Z7 c  Q" P, {
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");& b5 N8 n  u3 B( ?" S  x
  460.       strHostName=szIP;& B/ b8 [" Z& w& b$ W8 [8 ^0 E. O
  461.       strHostPath.Format("/%s",szDIR);9 F/ q- p0 Y# v+ O0 v7 M3 K
  462.     }. v8 k9 w9 K( X/ l( N. Y5 ^) Z/ r
  463.     else
    + A' P' r6 ~4 k2 P& H+ w  E& ~
  464.     {" I4 z7 y+ F- i$ S6 Y; d
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ t; d$ l3 I  v3 Q" g' y: z- R
  466.       {/ f9 n1 t$ \4 n( v/ D
  467.         char szLanguage[50];/ i3 ]1 x- b# T) Y% W$ B  w& Z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    $ M& M1 z  A4 n! f' |0 U
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* J* \& W/ J- C. ?* ?% k! h
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 `9 F3 b& {; I* M8 _: j: F2 G
  471.         else                                   m_iLanguage=ENGLISH;. w/ u1 w7 s0 G, v0 ~
  472.         char szRegister[100];
    6 s8 Y. P! G+ y0 {
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ l& ]6 k( S: M5 _  y) j; r8 P
  474.         strRegsName=szRegister;
    - L2 y% z9 N; X! w  L3 `
  475.         char szPatchURL[100];
    - d" x' \) }5 ]0 W+ v% _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ e5 r3 l9 ]" N" a: y# `6 J0 r
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & c: t. f% D' v6 \' L  L
  478.       }
    % K* K* D+ ^+ z/ F6 P6 W' M' |2 k
  479.       else
    4 B0 O$ i9 Y" {$ d/ i0 C
  480.       {3 ?2 i4 m# e9 a
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);" h+ \# s! @) N- m) T+ z! t
  482.         strRegsName=DEFAULT_REG_URL;
    ; }$ `% f) j( [6 Y
  483.       }
    - J$ K& G3 O# F
  484.     }
    1 Y7 t. O$ V: H0 e
  485.   }
    : }; ~# z/ D! `& k" P
  486.   return true;
    + B3 A; ]# E& F% d& F) `: n
  487. }
    / C/ ~. I' _; X' M
  488. 6 ~0 i- @/ S& }
  489. #include ".\ZLib\unzip.h"- M" w, L+ j6 _, V$ ]  v
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    % ]8 }6 f/ V( R4 W$ J2 w9 F
  491. /////////////////////////////////////////////////////////////////////////////8 m- k7 C" z0 A- P
  492. // CRevAppApp initialization
    * J$ F" b5 n) Q

  493. $ S+ N' |: j9 ^5 t, }! d
  494. BOOL CRevAppApp::InitInstance()$ r, f8 |' c0 q$ V7 n: j1 o
  495. {
    " w# {5 c, N- _3 h( T' Q" x+ \
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    . X7 R4 j% k' Q, k6 t
  497. + K5 ?; r- q; ?7 K+ q, N: G& J
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);5 U. O% F  W, s, q4 Q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))* e  U7 o% ~6 T( G9 U1 d
  500.   {" f# A: P7 t+ B7 ^* u7 v0 _! k
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ! W, j. Y& _/ z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; x4 }0 k) r1 _  N0 L- Q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ' M$ Q' ?5 f# _; {
  504.     {
    7 j+ F. ]" u9 J0 l
  505.       strcpy(szPath,szPathTarget);7 h8 S3 y* ?; s" H% Z* q5 S" ^
  506.       SetCurrentDirectory(szPath);
    ) _( L' k! [7 f- S$ I
  507.     }- W& }4 t# d2 q7 z, Y$ R
  508.   }
    - W2 o; ~. ^9 Y; m0 Z% U
  509. #ifdef _DEBUG7 B4 A: B) B, ?( P- s" d& \$ x
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ L7 ~& _+ z+ g- ]7 X  W
  511. #else
    ' ~6 I$ ~1 a; h7 E- j2 p5 U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " f5 w3 a& g' N0 j5 u/ T
  513. #endif: c3 z, a" Y- U# q7 @2 z
  514.   {
    " K; E5 Q! o" H+ M; L; E
  515.     char tempFileName[MAX_PATH];
    ' ^! c. y2 b. o, |
  516.     strcpy(tempFileName,szPathSource);) H  L/ c$ Q# S1 s+ `$ {" m
  517.     tempFileName[strlen(szPathSource)-12]=0;) n0 h5 ~9 o# e3 ^( e
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    5 S& V3 r: P. @, S
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);4 ~8 j& z; F) W) n+ i
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    $ \& ?5 V4 T1 o: _$ a
  521.     return TRUE;4 \+ a0 R" p  k( y* B: [, b, h
  522.   }
    0 K; R9 C0 I7 }: Y% D
  523.   // Nuke 0118: Delete run.exe  X& I& ^! U5 x7 j+ N2 |
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );+ m) p) N5 D" o7 ]
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + r& C' F8 J! W3 t8 e
  526.   if(!ReadCfgFile("Config.ini"))% a5 P' `$ l& ?3 Q+ l
  527.   {  U8 T; O8 H  ?5 T2 j( C, }
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);" X- ~/ \. T' ~. C
  529.     return TRUE;
    / W2 ~' q; u8 b' |! \" k4 O
  530.   }+ v9 ?- T* `) C1 m; H5 C
  531.   HANDLE mutex;
    * w' ~' ^, c* T+ ]' _1 f) n
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))3 t1 S# m* K! b9 D
  533.   {
    * I" i4 Z% S0 @5 R
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    2 C$ T6 p! w9 `" L  r
  535.     {# F3 {% e6 Q3 ~4 I5 b5 J
  536.       CloseHandle(mutex);
    1 O6 \7 F' Y+ Q5 Y# s& I( A1 F
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 \2 {) ^: G! {1 E! n! ~5 c* b
  538.       return TRUE;  s7 h/ S' @* h( M
  539.     }
    5 [: ]7 ~; V; p3 G
  540.   }  
    ( l9 h( M5 r, M  t5 p, M: Z; N: @" U: U/ n
  541.   CloseHandle(mutex);% }& i& l* J  G  j

  542. ( {2 y2 Y" M. H/ L1 o4 W% Z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);8 R# ?2 f/ a9 b3 Y1 l

  544. * y& K3 s( s, Y& n/ M# T
  545.         AfxEnableControlContainer();7 _! Z4 |4 e4 @& ~4 l: E: O3 K1 ?

  546. 3 m1 C% Y6 `$ G; I. |1 V& ^. j
  547.   bCanUpdate=FALSE;
    7 S# n  x0 t2 O* @" I) s: B
  548.   dwStartUpSteps=1;* {3 p# m+ `0 u0 I: U- W7 ?" |
  549.   dwProgramState=AP_NOTHING;- t1 J! I0 p( R" ~2 h, h! s

  550. ) ?  p7 a5 c# Z. x
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);; k$ F* }/ v, ?! P
  552. 5 f7 o, Y: a  [0 V
  553.         // Standard initialization3 P8 m/ M2 r9 k5 S
  554.         // If you are not using these features and wish to reduce the size- I' m8 @2 F% F
  555.         //  of your final executable, you should remove from the following0 Q: u1 d; Z5 c" A
  556.         //  the specific initialization routines you do not need.
    % X) s" z; d8 `" U" l! k) J

  557. - A  u6 ~1 Q' Q
  558. #ifdef _AFXDLL
    - _3 {. t7 ]; _* V* t3 Q6 |. k( P  n
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    2 e$ A" h+ M& m
  560. #else
    & r1 g. u6 ^: i* R1 x
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically" @5 T8 L9 d$ c/ r5 G
  562. #endif: \- T& t0 m/ H- J

  563. " s" v9 C4 q8 x  c
  564.   dlg=new CRevAppDlg;
    & e% x  n! [9 F6 t/ n3 L2 [
  565.   dlg->Create(IDD_REVAPP_DIALOG);/ j# b# T* v; r0 ]7 o7 h. ], u8 W% b( p8 J0 n
  566.   dlg->ShowWindow(SW_SHOWNORMAL);, m$ D5 s' y+ V' ?
  567.   m_pMainWnd=dlg;- `9 n- u0 u; b5 q

  568. % W' Q" p: K' j& F. p
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 _! V5 t( N8 w% @( q
  570. 2 Y. G. m: c5 Q2 m8 D
  571. //  GdiplusStartupInput gdiplusStartupInput;
    6 w% T9 }7 y) B8 t4 g& I1 o5 G
  572. //  ULONG_PTR gdiplusToken;" @* I9 [4 o( M! E  A
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    5 @# o% ~3 g8 v3 }; c8 {
  574. ) ^2 b. P/ r5 j! Z- m; t% F% J$ c
  575. //        CRevAppDlg dlg;% p  p; c8 g4 z$ T
  576. //        int nResponse = dlg.DoModal();
    7 |' j! @9 G7 E1 b2 P
  577. //        if (nResponse == IDOK)
    . U  ~6 {7 p; x  G; q6 G
  578. //        {
    7 D: W- B( U# {. X; b1 f
  579. //                // TODO: Place code here to handle when the dialog is
    4 Z: c' g: e, X+ `2 k( K+ c4 w
  580. //                //  dismissed with OK
    ; U& M0 W. [# z! s
  581. //        }' j! b. m0 C8 ]7 q" |/ f, Z
  582. //        else if (nResponse == IDCANCEL)
    9 {( c- |5 }5 M0 r4 l) @5 y& O% U
  583. //        {8 w3 T' k& c) d- h& G5 s
  584. //                // TODO: Place code here to handle when the dialog is
    $ ]; y0 c, k' T% y" X4 a, |
  585. //                //  dismissed with Cancel
    ( `* [1 v$ L" o) A
  586. //        }
    8 E9 n7 X# F/ D4 N' C; ^
  587. , k# u; w5 U! ]) L- @; y9 W2 b
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    8 g: t% i8 H* F: G  X7 H0 S
  589.         //  application, rather than start the application's message pump.
    , Q* G- v3 G( R3 A1 i6 H
  590.         return TRUE;2 V* c2 l7 X! a% |+ l: O
  591. }# o( n( S7 h5 g% O/ O

  592. * n$ E" c: S1 d# `2 m/ R' `0 i' [
  593. char *CRevAppApp::strtok3(char *pSource,char *token). T1 [% p! U/ R. h
  594. {
    0 N) L9 A6 B5 L: q) _/ }. t1 N
  595.   int i;" L1 g* h9 c: Y4 [8 `6 D
  596.   char *szRet;, s' J7 z5 d! u9 F& S& e  c1 z

  597. 1 j/ z* ?5 w  V8 i. ~3 S( O
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ; ?) ?" t7 }8 G- T
  599.   if(sztoken)% D6 s* K: e( ^+ i5 d; t9 M
  600.   {" I& a5 y, _, q
  601.     szRet=&sztoken[itoken];3 e, q+ q: g$ |
  602.     while(sztoken[itoken])) b2 |$ P: F: K  i2 i' ~5 @
  603.     {
    ( s/ w6 H0 L0 `9 ?
  604.       for(i=0;i<(int)strlen(token);i++)* g( g& ~7 {$ d0 }
  605.       {
    9 x( P, l# q0 ^4 C, J* t4 G
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    8 C$ Y" Q" k5 j, L# W- P# O" i6 h
  607.         {4 N7 m& k* o) ~4 S2 C) O
  608.           sztoken[itoken++]=0;
    % |1 X1 P- f  F: u1 d3 S
  609.           sztoken[itoken++]=0;
    7 c% H' P. }" s+ G! E# I
  610.           return szRet;# |8 T+ v: v( p# O
  611.         }
    ! d0 s- J$ d* N  m
  612.       }5 g3 y$ o' V& L4 c+ l. O$ k. w
  613.       itoken++;
    5 G* v9 k+ N- w$ Q2 Y- |
  614.     }
    ! ~7 e0 G7 r6 Q5 x
  615.   }
    6 {3 O) Z2 z- {. k, T2 W. ]  ]
  616.   return NULL;( T0 f. _+ e8 J$ M2 k6 v* {
  617. }0 K% ^" |6 d" `

  618. ) \* O& M7 ]) _; O. Q6 j/ }
  619. void ProcessProc(long Total,long Current)  `+ B, v1 ?' |6 g3 V' u
  620. {6 @  f3 @- T' I
  621.         MSG msg;
    8 R( j8 C3 j1 Q1 m
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);( i0 H( f1 @+ n8 L$ L4 r
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    4 F7 U5 u2 R  o
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    7 t* C5 l$ s' |
  625.         {9 e7 |* E" E  c: L# f, Z. r/ L/ K
  626.                 if(!GetMessage(&msg,NULL,0,0))
    + M& r) i! z: `; q' g& P$ u# }, M
  627.                 {
    - P1 g) z3 b8 c( @
  628.                         return;
    5 @, [0 D6 e/ R- g
  629.                 }3 s# A3 c+ S- W8 |
  630.                 TranslateMessage(&msg);
    3 ?" C3 ?5 @8 d3 z& z# c, j6 u
  631.                 DispatchMessage(&msg);
    * _1 j' m, D  N, t4 l
  632.         }        . U. _  \0 ?. K# v6 e
  633. }
    2 T  C# y4 G( m% ?# U& U
  634. 2 j) \/ D/ z2 V7 H! c( r
  635. BOOL bFirstChar=TRUE;
    $ H9 S: L) m1 X6 Q, H

  636. : q* i$ V2 D& i2 d1 Y* G# b
  637. BOOL CRevAppApp::OnIdle(LONG lCount); {& L7 U) x! O+ [! }+ a
  638. {
    0 k0 W& {( I% w/ N. E/ i2 G7 Y
  639.         // TODO: Add your specialized code here and/or call the base class
    . F1 \" Q0 Z. D7 S
  640.   switch(dwProgramState)! J; s% A$ p$ V9 c7 a( h1 N
  641.   {
    2 s% E9 P, R8 n5 g3 [& i2 ]
  642.   case AP_NOTHING:: A0 J+ a/ J. m8 z7 K
  643.     switch(dwStartUpSteps)
    ' u, z' u' m  Q4 V4 n1 p5 b
  644.     {
    2 M6 s4 m, j, Y6 j6 F7 D8 _% F
  645.     case 1:
    : A, _, w* f; i( P) V; Q' ~8 [
  646.       {
    . ^2 W% `6 l+ y- y; d1 v- M
  647.         int i;. D3 n+ `' R! a8 u7 R) C: c
  648.         CDC *pCDC=dlg->GetDC();: P9 E+ b! g. @
  649.         HDC hdcwnd=pCDC->m_hDC;8 S' [- G' q! Y! u9 i4 N
  650. //        Graphics graphics(hdcwnd);( I6 D( c1 D4 ?9 W% `, u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");0 A0 R  d" F7 w# B/ I# k5 `
  652. //        INT iWidth=bitmap.GetWidth();
    . f" y5 ~$ I. ^. `! ~
  653. //        INT iHeight=bitmap.GetHeight();' Q) T8 G0 F5 I6 h( D
  654. //        Color color,colorTemp;
    ' h% V' j9 I/ ~# K
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)( V2 l6 I! s# l) n$ p  N. C9 l9 Z; F
  656. //        {. [6 E1 ^" W& b7 @
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    9 q7 z* P/ ^' z4 p- U
  658. //          {; Y0 `  O0 L8 N7 n" M+ k$ S% s
  659. //            bitmap.GetPixel(iColumn,iRow,&color);! Q: n$ _% s. T+ T+ b2 j
  660. //            colorTemp.SetValue(color.MakeARGB(% E% f; \: [' t, A5 e4 H; U* F
  661. //              (BYTE)(255*iColumn/iWidth),7 v: D- C3 V& b1 J0 o
  662. //              color.GetRed(),
    ' l! T  o- `5 B, s" ?$ G
  663. //              color.GetGreen(),+ {: d: P( h; K2 b- Q0 S
  664. //              color.GetBlue()));1 e# `5 Q( C6 B" u0 m7 Y. z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    $ p3 W' V5 ^/ N* J
  666. //          }
    9 G# k  E: H3 |% f2 D+ p8 g4 n  ^/ U
  667. //        }/ G- K. a" I" r  B, E# w# J, U
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + D5 }* Z' c6 H, v
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ x" ]0 B$ ^" ]( U! D$ T% w; c2 G
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");6 P6 \8 J+ W; x; y) X
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 `( |% U9 @3 ?  T; [3 w% {
  672.         for(i=0;i<240;i+=8)
    # R  G5 O$ w% B
  673.         {+ {, G- [: j( j, P; `: ]
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! D9 A# Q! T" p) s) ]8 b4 C; k
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 w8 Y& E7 d' q3 P( {( e$ ~
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 M  L: d* S6 I$ Q- c
  677.           Sleep(33);, X- G5 R- {6 h6 x: R. L
  678.         }3 H2 a+ A2 N' D7 ?" n
  679.         Sleep(1000);4 L. S  F9 C- x: G8 g# Q* N" B
  680.         for(i=240;i>0;i-=8)" N( B6 m. O7 f8 C' @
  681.         {3 W- D5 b; [& }4 j5 D# b% N, n
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' a3 ]# q8 _3 @0 c4 b3 W
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & ]6 k5 f( N- G8 S2 y
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      {) f0 D8 Y( j. b: C
  685.           Sleep(33);
    ) o1 V, `% O& T5 X% o5 i; z) l
  686.         }0 X  V: @" [, r! v, b! ]3 P% |* q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ' G2 @$ S/ J/ q  c8 h/ _
  688.         dlg->ReleaseDC(pCDC);/ h2 s- h  c& q+ e$ r! Q! J
  689.         DeleteDC(hdctar);
    1 x: g0 V- K+ m' [" x5 |, F
  690.         DeleteDC(hdcsrc);
    , p& k. `1 G- E  U$ Q
  691.         DeleteDC(hdcorg);; b( f, Z0 A1 r! y  e  ?
  692.       }
    7 {) k8 P. e  c& v4 ?9 v  ?% ]
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);- h2 S! |( s4 L$ [& b  O5 s0 l
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");5 w0 x1 y; L* R' U- t8 k5 W
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");' x8 D2 N3 L" S0 g
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    * Y& t; k2 Q# L3 o
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & u- b( L$ I. X2 @) J
  698.       if(!Dn.Connected())
    % g7 Q7 y6 v* E7 t6 y& U
  699.       {
    3 Y5 Y4 \( r# Q0 J
  700.         dwTotalFiles=1;* H3 u  t+ S5 @. v# T; E
  701.         dwDownLoaded=0;
    # M" _/ P: M8 q. q1 A  [  K
  702.         bSilentStep=TRUE;  p8 e# _, S0 m( b$ \: P3 i
  703.         bCompressed=FALSE;
    4 I& c! A8 ]% J3 L2 `3 J
  704.         strExtLocal.Empty();& e6 m  L9 U$ ~9 F8 P, A
  705.         strFullName="readme.txt";# Q! z# X1 Z* U4 l
  706.         dwProgramState=AP_CONNECT;
    ) n3 l9 |* }; ~0 C5 w! y
  707.       }
    ( z1 P1 N; q/ m/ R4 _1 f
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();5 `1 x, ^5 q% j
  709.       dwStartUpSteps=2;" x" c8 m  ]; }. U. |2 G# U
  710.       break;5 n, P2 W% H/ }
  711.     case 2:/ H1 K9 G( a; f
  712.       {/ u& f! [# V7 K$ M7 r6 u0 E
  713.         int iEOF;9 D7 H" B1 o5 t6 \$ s
  714.         FILE *fp;
    1 M& F7 p* r- p1 s2 k9 c
  715.         char szString[512];
    7 G/ b; w% {/ m/ Q, C- A$ C3 \" Y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    + x' b* q% K1 _4 E
  717.         if(fp)) u7 d" @! z4 i5 U5 [3 P- S- W
  718.         {% Q0 G0 i  ?  W7 v1 U+ K  C# c! _
  719.           do+ P1 z7 A- b2 [7 P. D7 W% w# \
  720.           {
    % `6 ]! d' Y( C6 Z
  721.             iEOF=fscanf(fp,"%s",szString);
    # K9 h$ X( r0 H7 z
  722.             if(strlen(szString))
    ' w* b& v' O/ ?- J$ a4 ~) G
  723.             {
    : L8 \. \, d0 ^5 ^4 X3 }) b! e
  724.               if(bFirstChar)
    * I5 d5 N0 s+ N/ i3 k8 i' {
  725.               {' F9 r- _4 _$ r' i  Y
  726.                 bFirstChar=FALSE;
    ; s- E9 q7 I  w# x0 {+ U
  727.                 bConnectIsBig5=FALSE;
    9 \- m, _& f# S1 L. P
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    3 O8 H6 ]8 `8 j% V8 c
  729.               }  G0 W! h/ Y: A7 {! X
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; i' \* p$ d' D5 ?" }
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ! m* x( A& z& N
  732.               dlg->m_ListText.AddString(szString);
    " `2 R' {5 q6 ]
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - k/ B0 ~) k+ {. ]( f8 @6 A
  734.               *szString=0;2 m% ]' ]$ o: p0 l$ |, _
  735.             }9 o$ ]) L  W8 I) L- S$ V6 x/ \# f
  736.           } while(iEOF!=EOF);
    - m: k6 f% F1 c
  737.           fclose(fp);
    ( F5 |4 C4 v- t
  738.           unlink(".\\DownLoad\\readme.txt");# k- d7 o- F- _. \6 u7 \- u6 d' B
  739.           dwStartUpSteps=3;
    ( L" c+ N6 @  N
  740.         }: t# X( a; ^+ x0 M0 m7 H
  741.       }
    ) L( x5 ^4 |; Z) n% k+ R9 z
  742.       break;. Q/ a$ x. C$ G" I4 J  g
  743.     case 3:  l# {) N- _8 L# i- z2 v% x9 r( {
  744.       if(!Dn.Connected())
    5 w/ B! ]  n# I. O. B% H
  745.       {* }; p$ [6 X8 x# R+ v( I
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);, a) \4 A& @3 ?
  747.         dwTotalFiles=1;0 r$ A( S6 d- i
  748.         dwDownLoaded=0;. u4 w* \( G* x$ x5 N
  749.         bSilentStep=TRUE;
    $ s) H3 v# e2 s+ r1 y
  750.         bCompressed=FALSE;% j/ ]4 I9 _+ A+ v5 `
  751.         strExtLocal.Empty();
    % k  G: f9 E$ F4 `3 W# Q/ A
  752.         strFullName="checkversion.txt";! x5 u' ^- A/ _: R3 `
  753.         dwProgramState=AP_CONNECT;
    8 Y/ [$ k0 ~3 j1 G( ]
  754.       }
    ( |5 Q+ o; E. T! T7 x
  755.       dwStartUpSteps=4;
    9 y8 ~: h3 {9 B
  756.       break;! S( B% a' H5 d- l% X) `: x
  757.     case 4:
    ! i5 p8 C# D8 Q- i" V+ h
  758.       {/ Z' A2 `- w1 Z
  759.         FILE *fp;+ |5 r% k( p" L" r
  760.         char szString1[128];. n0 w/ V0 A/ i
  761.         char szString2[128];. U) I0 g9 r9 y' U( W
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");* ^; j- J! |5 W. h
  763.         if(fp)( {* p9 S7 I' D) e" H- Q
  764.         {2 C( v0 l5 J/ b7 f- ?4 J
  765.           fscanf(fp,"%s",szString1);
    1 ^* C) O9 `. \1 M( u9 v. t
  766.           fclose(fp);- D, B# h2 w  |, ~. ^9 Z2 u7 r; F
  767.           fCheckVersion=atof(szString1);
    6 j  S" |3 X: _6 A; `2 i3 E
  768.           fp=fopen(".\\checkversion.dat","r");, {5 p( ~4 c* N' P  K9 p6 f
  769.           if(fp)
    ' g- E' h; C2 J. ~* v
  770.           {
    4 \& F, [8 d. i3 `
  771.             fscanf(fp,"%s",szString2);
    2 ^: D$ _+ D; M6 B/ Q) q: Z5 X7 h2 h) f
  772.             fclose(fp);  C/ u' Y) N5 |/ S5 y
  773.             if(atof(szString1)!=atof(szString2))
    - ]" R2 E( y3 a& ^: I5 o
  774.             {+ h7 m' J  H- p$ f! t3 T6 h
  775.               if(!Dn.Connected())
    4 k  j0 o+ o; b! U6 v& T
  776.               {
    6 k9 m2 [1 {' r3 V; K& N
  777.                 bFirstUpdate=TRUE;  ~5 b$ H9 v3 {' l, A2 B& ]. j
  778.                 dwTotalFiles=1;
    2 T+ T" ~* J9 ?6 t  Y
  779.                 dwDownLoaded=0;3 r$ s, T: o6 F" @- ^* S* ]8 x0 N6 O% q
  780.                 bSilentStep=FALSE;
    % A$ ]8 B* _0 b( @
  781.                 bCompressed=TRUE;0 I2 }3 h& V& K% Q% ~# p8 v
  782.                 strExtLocal=".\\DownLoad\";
    + ~0 A+ s) Q  U1 y: k! ~' ~5 K7 u
  783.                 strFullName="update.txt";, r& s9 X+ G+ ]& S' I
  784.                 dwProgramState=AP_CONNECT;, a9 D' g: P9 [+ B
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    6 W( f: v6 q  I0 l
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  s/ l" v9 R& |
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");% ^4 F* t+ G  N8 O* D

  788. - s9 f4 n2 L2 e/ w3 T
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % T8 v. a0 O; J9 ^4 S, H6 H# z
  790.                 unlink(".\\DownLoad\\checkversion.txt");" ^' z% m! q4 p; O  I5 g5 ~7 v
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)9 l: w9 m. A- v/ l
  792.                 {
    " t9 S- Y& ~5 C! x$ N
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");  B6 _' k7 S* _- ?
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    # R8 d8 j0 r! I% Z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    $ z* o7 Y8 U0 R  b2 l
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " s# H. {* T1 ?+ g
  797. 3 h8 @  Y! k  k, C
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");' @2 q& E* C; X. q- X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");5 s, \' k" h; ~7 c
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");) p) f- O) |  N- j% N9 G
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 i5 l+ n& h3 Y" X; J
  802.                 }
    - b7 n6 W+ c) \5 s: Q: D
  803.                 dwStartUpSteps=5;! X& z3 o' t" C( d
  804.               }
    2 r4 W/ n! s, O2 P. {' j
  805.             }
    , a& h1 B& Q: V; l& O' @
  806.             else
    3 z9 Z4 Y8 L4 k" S# M. o( q
  807.             {
      Z/ u% F7 K7 j9 }
  808.               unlink(".\\DownLoad\\checkversion.txt");' L0 ^) w9 I, h4 c# J6 a0 \( j
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ [4 P6 l3 M7 D" C) G* Q; Z- W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- @3 \1 ~9 u' N0 v) L9 C
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");7 V# y% x1 g% g  y+ ^# j+ K

  812. 8 S+ [. G+ ]6 f) X$ N; R
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , ?7 a, r) s1 p6 d& j
  814.               dwStartUpSteps=99;0 N7 E% I+ s  Q% d' I7 H
  815.               bFinishUpdated=TRUE;* v* t8 K: T5 U. U* z& j
  816.               bCanUpdate=TRUE;
    - x! F7 G) k. q5 _3 W
  817.             }0 v5 `( {# k- q' N2 {
  818.           }) R3 E' y1 A; I
  819.           else$ d  A0 o8 \( ^: K& P
  820.           {
    - o/ p2 x2 D, ~6 K( \9 i0 S
  821.             if(!Dn.Connected())6 r# x7 R0 r5 \" d$ E
  822.             {
    5 A( G  W; x7 W
  823.               bFirstUpdate=TRUE;; z* Z! P; `( V) S: ~2 M
  824.               dwTotalFiles=1;
    7 [( v' f7 }9 b
  825.               dwDownLoaded=0;. N+ {( K# W/ G4 @, `, k
  826.               bSilentStep=FALSE;4 M3 [# Z/ Z6 Z1 b
  827.               bCompressed=TRUE;" W% U& t! m- O3 C
  828.               strExtLocal=".\\DownLoad\";
    " O, \1 i2 e. Q/ D) Z% R" n1 x
  829.               strFullName="update.txt";  Y; C7 O) b2 a
  830.               dwProgramState=AP_CONNECT;
    ; w1 V+ ^1 g. Z  v, \$ F5 v& w
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    3 S, L6 i6 @9 I, V, }) `6 U: }4 Z4 [
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 n4 }2 W! i1 J: g
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 d4 @. u& N7 _" k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ |2 e7 C8 d& d5 N: `
  835.               unlink(".\\DownLoad\\checkversion.txt");
    - u8 t9 z4 y. a4 X
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    $ T1 o6 I' E1 E$ w& s2 U! P5 G# Z
  837.               {
    ) _1 T# H5 [! D) j" T
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");7 k( J. k, p3 q9 T" D6 S
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    $ w, v. q" Y* f! w0 Y/ Z8 y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    # Q) g" p9 Q) y. J6 U$ R. Z8 j, j
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # V2 t4 j; j  h. k, d
  842.                
    ) ?4 z, t( @7 O$ h5 O3 [
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) p, V( f! q. W" \3 R, R# P
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 z) \1 Q6 v! R, ^  Q# @( p
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' a3 f/ ^( _8 E3 `* v; \" o: O
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ H$ \* D1 Z8 ^. }9 J# a, E7 i  |( {
  847.               }9 [& x. v2 p+ H# X% O
  848.               dwStartUpSteps=5;$ g7 P* a" q2 @6 ?2 Z
  849.             }
    0 o5 k! ^$ D+ d
  850.           }* E7 `. {, w# U1 V( F
  851.         }
    & Y# F! M3 V8 E/ f! ~
  852.         else
    . K' d$ w& [' Q9 |* |1 M& a
  853.         {9 A" b0 a3 e0 e" E  l+ C; x8 o
  854.           dwStartUpSteps=3;
    7 b" _) D1 v; q" X$ _( l, T
  855.         }
    / y" E0 g! E8 g7 K' j5 i- ~9 E
  856.       }. Y# i. @, @  G9 h
  857.       break;
    $ R* l$ J6 C: k, b: T' k+ h
  858.     case 5:* G6 H! b: i: j" d/ g/ D
  859.       {# u; i# X# X- M+ f  X2 o
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)( P1 r8 Q6 g' ^9 U+ F2 K* H; H
  861.         {% I! \3 n, C( r0 P5 N1 z" Z
  862.           int opt_overwrite=1;) B# w4 a+ m, N: J
  863.           int opt_do_extract_withoutpath=0;! Y( }! O" c$ p8 k2 [8 U8 S# H' A
  864.           unzFile uf=NULL;# T. `3 y  k  X( c+ V
  865. " w  \; |2 d6 \# C+ q7 r0 j
  866.           uf=unzOpen("Wsa.zip");
    % O  ~% w, G( L/ T. g. f# l3 f
  867.           if(uf)
    & s0 z: W; M+ P6 W8 R/ ?9 v
  868.           {* x  m" E7 a* D' Q2 o
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);, E4 J" T' n0 ~  m# @9 w# |: s
  870.             unzClose(uf);# u. b+ B) B9 S0 t6 l' X
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    * A" ]5 w5 r1 X  _9 g3 s
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    - r9 W6 V8 A5 B! }) \
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");, z. A+ B! n8 v
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, q0 Z! `" o  q8 T
  875.           }6 }8 {5 I# V$ O
  876.           DeleteFile("Wsa.zip" );& f+ O, g( p" {
  877.         }
    9 y  T0 N2 [$ D7 `1 g1 K; e+ V/ I
  878. 1 @% R' l( g  f, S2 O7 R4 u
  879.         if(CheckLocalVersion())
    + J0 L' H: O: l- J
  880.         {( X7 R! k7 s( z% O' _9 ^% M& e
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    . m. r3 [0 S; T: R0 ~' N
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    3 e; ~8 n8 }+ v3 H9 g
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");: K# n! u/ Z4 J& C
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - \6 e- r" s2 H, b* q: n
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);) h) ]3 C' O- [7 [; [
  886.           dwStartUpSteps=99;
    & x8 _5 H" |% }# r" Q
  887.         }
    6 [; R3 q# Q+ \7 I# ]5 t* D* u+ A
  888.         else
    7 D0 h: N$ ^  e% J0 Y+ n, c, f: j
  889.         {$ |# L! y9 x+ b+ k+ w6 k  q( D
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    2 J9 T9 h3 b. O% F$ @, \6 l, L
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - e# {2 I& ^( R% J2 b, k
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    8 H4 ~. c  A* R  q1 p3 T

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

& O4 w# B5 {1 G) s

評分

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