CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式

4 p1 s& O% d! w4 U
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , a3 `3 J5 _# e+ ?6 I
  2. //
    2 {5 Y( b* |3 ^/ m1 E* w$ _, D/ T
  3. ' {+ h4 \+ M! u2 `" Q+ e1 M
  4. #include "stdafx.h"8 d+ q% T" h9 N: x* C3 R: h, j" h# W

  5. ; E0 p, Y/ u) A# C( k" V
  6. //#define UNICODE; Y# p0 E/ Q4 c( ?
  7. //#include <gdiplus.h>; g3 @* {; N( U  l
  8. //using namespace Gdiplus;
    ' z8 Y% t0 G. o5 Q- |; B* F* K
  9. + J. T- O0 r/ V$ D' Q. L& W3 G
  10. #include "RevApp.h"
      @2 _4 `8 a) j
  11. #include "RevAppDlg.h"
    5 {; \9 O1 I5 P9 i+ @
  12. . h4 k1 R: A  n# X- Y4 [
  13. #pragma warning(disable:4786)% Q5 Q; p' ~6 E% \
  14. #include <map># l' j3 E, A. G
  15. #include <list>  K5 R9 L5 z" U$ X/ O8 _& U
  16. #include <direct.h>
    2 K1 n6 H1 j6 c+ }

  17. 0 Z# p# `' l& r8 u& t' r
  18. #ifdef _DEBUG
    1 y% }+ [; r5 I, e: m) S1 Q
  19. #define new DEBUG_NEW) J" ?. R% F" e9 R" F# t7 s
  20. #undef THIS_FILE" `7 m/ ?& k. M, B* y2 i, o
  21. static char THIS_FILE[] = __FILE__;
    . H3 m" r% r& T& P1 `; O1 a
  22. #endif8 c1 c" M9 K9 W- C
  23. #include "SkinResDef.h"2 v; \' j3 s) K/ `+ F  j
  24. #include "ChangeBG.h"
    0 X& W% S- G" `
  25. #include "AFXINET.H"
    0 J1 v6 l2 o0 S9 E4 Y
  26. 4 n  H# U, t2 X9 ^6 s$ D
  27. #define TRADITIONAL_CHINESE 0' l. z: i5 E- j
  28. #define SIMPLIFY_CHINESE 18 M; l, v# t! q/ q
  29. #define ENGLISH 2- Z2 V: V' E( b, `, E
  30. int m_iLanguage = ENGLISH;, {! n& D5 u  G% H7 {
  31. /////////////////////////////////////////////////////////////////////////////
    # Z- C0 l( e1 J+ P( F, }
  32. // CRevAppApp
    - s5 W& H# ^$ I0 R

  33. 3 J' r- i" a! u8 ?0 w  V' B
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)6 Y! r( a" a; L, D' {) D* I
  35.         //{{AFX_MSG_MAP(CRevAppApp)% C2 i$ m# m( ^9 _! Z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.2 D4 a7 z1 U  \5 Q- Y" E
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!% ~' }) Z$ }+ R$ P3 g2 y4 F
  38.         //}}AFX_MSG
    8 L1 u+ C' {. V
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)% t4 E) E" R, A6 p( z: o" m9 O- @8 S
  40. END_MESSAGE_MAP()
    + a' w% U: O" `. ~2 f: D. F2 G/ W

  41. + s% A; i% i; n& V  r
  42. /////////////////////////////////////////////////////////////////////////////
    8 t/ O4 |2 X4 ^/ R9 O0 d  P
  43. // CRevAppApp construction( |0 Q# P- Y) \

  44. $ ~% Z) t1 G4 R
  45. CRevAppApp::CRevAppApp()
    7 e# s) j* K3 Q" d+ J- W, R! J( x
  46. {3 u( i( W0 H. G6 \2 L+ ]- c
  47.         // TODO: add construction code here,0 [7 f# N+ q2 u5 V) ]& X" U/ k' @9 }2 J
  48.         // Place all significant initialization in InitInstance
    5 Q, d" N! p$ }  R9 e
  49.   bDisplayIsBig5=FALSE;
    - H% ~  I1 B+ h+ {
  50.   bRestartUpdater=FALSE;- x  }; J, Q2 b, p- w1 c  |1 r
  51.   bFinishUpdated=FALSE;: s7 P9 @) N. a7 E& |( A1 h, V
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ' k3 C! ]2 E! x3 U4 M3 Q
  53.   InitChangeDataBig52GBKS();
    " F. d' f2 ~- q$ v" y# W
  54.   InitChangeDataGBKS2Big5();
    ( G: ^" r! e/ T/ @5 R( U
  55.         //: l2 H% k! l7 v* I/ K4 {& b
  56.         bClickRunExe = FALSE;* T# k6 Y' @+ f
  57.         //
    1 U7 q! k$ B( n- m1 A
  58. }, t0 A- {* k* v& D1 h9 A, v

  59. # j+ f) F) c) ~
  60. CRevAppApp::~CRevAppApp()
    6 e0 I- G0 L4 B. S, I* E( R
  61. {
    , c: M# m5 [0 |+ W# H5 a4 _
  62.         // TODO: add construction code here,0 s( T9 T2 d2 M: ^
  63.         // Place all significant initialization in InitInstance
    , l" V& s# C$ J. q& e/ w( u
  64.   EndChangeData();, Z5 Q- N4 ~+ x( T# b/ t, s
  65. }
    5 n8 b3 O6 x% ~2 ]1 y7 ?

  66. 3 x  c* }$ h# J6 P% ^( G
  67. /////////////////////////////////////////////////////////////////////////////
    , ~7 [+ \% ?2 \8 m1 F
  68. // The one and only CRevAppApp object
    / W& P) |4 X. J

  69. & C* M3 `  g. c2 ?
  70. CRevAppApp theApp;. K/ w% t" P0 P3 ^5 M+ \  m

  71.   O! ^- h1 i8 {  ?- U
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName); L% q' d8 _; ~2 e! U5 ?7 F
  73. {# R7 y7 Z) A/ `
  74.   int iEOF=0;  k! A9 v# s2 J' R+ T
  75.   char szTempName[MAX_PATH];
    * I$ b& b4 \; E) s' I* p
  76.   *szFileName=0;
    " p, r* O8 D9 {+ k# K) Z" R, Z
  77.   iEOF=fscanf(fp,"%s",szTempName);
    : a# L5 @$ c7 [4 ?: |& E
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')* o, F% r0 j6 C( Y+ @
  79.   {
    7 m6 V+ F) _( Q" s6 b3 @
  80.     strcpy(szFileName,&szTempName[1]);0 f9 M# `% I+ J( U
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)4 E* z3 S6 z$ n/ {) v$ O) y
  82.     {
    " D2 D  }: P4 I9 d& k* d; A
  83.       iEOF=fscanf(fp,"%s",szTempName);3 t0 M6 U7 e+ G' @+ A
  84.       strcat(szFileName," ");
    % |- z  T/ \* G! }0 d- ^0 a
  85.       strcat(szFileName,szTempName);
    3 u. M0 b' g8 U
  86.     }
    9 m6 b1 a$ L- o- m' c# c
  87.     if(strlen(szFileName)>=1)
    3 x# m0 A1 W8 g9 ?
  88.     {
      P3 z) H0 A( o+ O2 X& b! B2 z
  89.       szFileName[strlen(szFileName)-1]=0;  [3 Y/ j0 y" V3 K5 `: q& x
  90.     }" q3 ]8 I" {$ F( w$ Z) G
  91.   }" P8 H+ a* J  `4 a% I4 r- f4 j
  92.   return szFileName;
    0 u! l' \: j7 Y
  93. }
    ' X  {, r, j+ [, T9 z. t

  94. 8 L- r- }+ d5 I. u  L
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    + c: E6 J) _, e8 h
  96. {
    1 ?* e" \  l; }! ?- U- A
  97.   FILE *fp;
    ! v  q* t, @  P6 l# M
  98.   char *key=NULL;
    + y  Q. [; l1 T0 g! d/ w  Y
  99.   char version[MAX_PATH];
    ( ^' b" v- J9 L  W7 q: |, H
  100.   LPUPDATEFILE file,olds;
    % ^5 [- F8 u  h5 R
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    : k' ]# Q2 l7 ?

  102. 1 V; ^$ w/ H8 n1 }
  103.   UpdateList.clear();
    + F; q- @( Z& {* L1 j! q
  104.   UpdateFile.clear();
    ' l" e/ J0 [- b
  105.   if(GetFileAttributes(filename)==-1) return false;% H% S( O: l1 n0 R9 g7 k
  106.   if(!(fp=fopen(filename,"r"))) return false;$ u0 u9 Y, d: C3 \
  107.   fscanf(fp,"%s",version);
      n" y# T: [* R4 {0 q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }/ t/ R' w9 d3 i2 }5 D$ i
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ; W6 s  I9 G; s1 G# t+ k+ |
  110.   {
    - L" ?5 Q+ f: p3 L' n2 J+ E
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# ]7 d, [/ X; q& B6 a
  112.     fscanf(fp,"%s",file->path);
    8 d7 \  M4 ?( F* h! |- ~  ^/ [
  113.     ReadFileNames(fp,file->file);
    * J1 ~' j5 H$ ?) b
  114.     strcpy(file->full,".");+ |3 m9 ]: y# L, \; E/ s
  115.     strcat(file->full,file->path);
    5 `: y2 V( T: [- B5 o& c* f
  116.     strcat(file->full,file->file);  L# H, ?" s) L0 ]6 P" ]' C. I' E
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())* n# n" G% N2 F# D4 h$ r3 C
  118.     {" F4 r8 e1 p/ {3 f2 x/ ]
  119.       file->vers=(float)atof(version);
    # L7 o4 }# I% U
  120.       UpdateList.push_back(file->full);; {) r" K2 K2 H# A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    $ s  r0 T; h8 M+ Q, B
  122.     }
    # F& N, s4 b3 `
  123.     else# b  H* l- v9 b4 G- _. R. h% I
  124.     {
    $ x) W8 y8 d' E+ ^
  125.       olds=(*p).second;
    . X& c7 _0 u! R: d/ v# Y" l
  126.       if(olds->vers<(float)atof(version))
      y! U( J" R- t' T( e* w5 B; L
  127.       {% `7 f+ p% h/ @+ Q6 y% S5 c; `+ r# E
  128.         olds->vers=(float)atof(version);
    3 v& n4 p# g. h
  129.       }
      m! X$ Q& ?. |, Y4 t( W+ s( ?
  130.       free(file);/ D5 I# {; ~* `
  131.     }
    ! ^) T& _5 \' V6 }
  132.   }
    5 ]. n( \' [" z" B9 j6 J+ k
  133.   fclose(fp);
    5 l3 f- J' y- e" [+ f
  134.   return true;
    6 F9 L1 w$ ?1 o, E! S, d$ R
  135. }
    * X# r! A# t5 K6 m
  136. 4 C. ~  t4 M, \
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    $ d8 O6 H! q  M. G; z
  138. {/ Y: G; `9 j. |1 j2 m% L
  139.   TCHAR  szFull[MAX_PATH];
    & V6 Y% q& K4 g+ R& U. T& R+ Z
  140.   TCHAR *token,*inter;
    5 d* \5 m8 p! X8 x, S/ q
  141.   *szPath=0;
    . R5 w3 K/ i. u  f' |' S
  142.   strcpy(szFull,szFullPath);
    # ]. b% E7 }" W5 v* `
  143.   token=strtok(szFull,"\\/");8 E! o: H2 K- t: x
  144.   inter=token;  N; R8 y' a8 `% Z0 H# R
  145.   while(token=strtok(NULL,"\\/"))
    $ T5 f3 ]1 g  l: D
  146.   {
    * e, R7 A/ Q: c: J! b: B: N
  147.     strcat(szPath,inter);8 A( a! m  o. O2 k1 s! [/ ]6 W5 {
  148.     strcat(szPath,"\");# N: y: U1 v: W0 w% O: J8 m
  149.     inter=token;( a/ i# l* J# @; J6 P- D5 `
  150.   }- @( x# E6 E+ Y3 S: y
  151.   return strlen(szPath);
    1 i5 O, @2 h4 _$ r% c
  152. }9 B- n6 a& t( q1 N- J

  153. 9 Q/ |1 L* G: N7 F
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    7 u  N6 e" }% w8 V3 x
  155. {
    ' i  }! y5 V$ \: c, d
  156.   DWORD attrib=GetFileAttributes(Target);7 E$ j& Z2 v: C' l  f4 F
  157.   if(attrib!=-1)
    8 B7 x6 y# x$ `7 q" m
  158.   {6 D8 e5 v+ k& n
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))  }" q& f, @: V5 O+ q$ Q6 g
  160.     {
    & s0 B; }) I3 M3 @
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    8 i$ V% z/ {  d' f
  162.       SetFileAttributes(Target,attrib);
    & g/ ~8 z* E' t* i& \
  163.     }  i+ K/ W) m5 W1 ^, Q
  164.   }. U9 R! _& `1 N/ d
  165.   CopyFile(Source,Target,Erase);( ^0 _5 P2 o9 [$ P& D5 d6 s$ s
  166. }; j% V+ @/ Q( \7 G- v9 b0 H
  167. 0 {+ v3 v. k; ]
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)/ {3 @# {  g% `# s  h4 R9 M, J) J
  169. {* f- }7 W+ ]7 i# p
  170.      FILE *fp;. ?# Y* j/ r" H2 c$ E% O
  171.      char  szBuffer[8192];& g: M$ a, ~' L; f  a* B& O
  172.   va_list  argptr;
    ' C. Q3 c# u7 p
  173. . P" D% M  F, Q# ?) x; l& ^9 c
  174.         va_start(argptr,message);
    5 N: A5 e' f+ I4 T+ y2 O1 ~# X
  175.         vsprintf(szBuffer,message,argptr);8 o+ o% o9 t  e8 `$ q' g& Y+ c# `- h
  176.         va_end(argptr);
    . [' g: D. E( b% Y
  177.   fp=fopen(FileName,"a");8 ]7 W: U$ I  g: e' B
  178.   if(fp)
    4 E+ u3 U) y; l( o& A
  179.   {
    ( A7 y; r# x( c4 k6 P
  180.     fprintf(fp,szBuffer);/ t1 e6 B7 j" ]" g# {( `  `
  181.     fclose(fp);
    2 _' n1 E% I1 J3 v8 n6 G7 S
  182.           _flushall();
    % r! P! u  _" z1 D9 P3 M( q* n, M
  183.   }
    ! ], n% B: [8 ]1 C! \
  184. }
    3 I# e# o/ }* ]7 K% q' z
  185. # b7 L7 P0 |2 T4 q& Z- N
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    5 F8 Q' Q2 `$ `3 N1 W, q- @$ A4 Q
  187. {/ Y; f! ?  L8 S. h9 B
  188.      FILE *fp;
    ) R; d  a, r0 [% `
  189.     DWORD  attrib;# |+ o$ W( T* i
  190.   attrib=GetFileAttributes(FileName);
      e0 |1 ?+ j, W7 D
  191.   if(attrib!=-1)
    ' _* V  f9 l6 [) J# j1 Q$ e! G
  192.   {
    3 X! L9 [" B- }- L  f
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ' F  U; u! L8 M0 H3 ^. e
  194.     if(!SetFileAttributes(FileName,attrib))
    & }% K+ F' b2 x1 a& q
  195.     {
    ! c7 r% Y. G/ y8 {$ v: D
  196.       return FALSE;* o( ?) W7 I2 B1 r
  197.     }8 I$ R! f5 Z% f( p9 q4 x% a
  198.   }
    - q: D" j) O* q# o: ?
  199.   fp=fopen(FileName,"wb");2 P. C2 F3 u2 [( K/ o
  200.   if(fp)) _8 L' b4 t0 P- Y) }: S0 W. ]; ^& b: B7 |
  201.   {
    . ~8 H( J9 H! A( i$ l# R$ m* g/ B
  202.     fclose(fp);1 }- P( H  R9 v2 N: S: E( f( p0 j
  203.   }
    3 D% F) l7 J5 X2 q
  204.   return TRUE;
    & ~6 M7 t" C/ x, J
  205. }" D6 _  R" c0 e; V
  206. ; d/ [, I2 c* U6 ^1 G/ h3 M2 N" d7 a
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ ]( t4 j" d! p+ i, ?
  208. {
    8 T* K" j2 N  }9 G2 d5 Q0 r* R
  209.   char filename[MAX_PATH];
    2 I4 @9 L* V3 U# K+ ^
  210.   LPUPDATEFILE file,olds;
    ; t  i) z: [9 _* ?/ q- V% L1 d
  211.   std::map<int,CString>::iterator i;
    5 s+ a5 m* [) W, |8 {  R1 o
  212.   std::map<CString,LPUPDATEFILE>::iterator p;- U6 D! d! g3 L  T' G
  213.   std::list<CString>::iterator l;  I' m  `3 n' \* q9 v4 t4 m1 A3 E
  214. : O5 F! Q& w0 K) K
  215.   if(bFirstUpdate)
    8 f: M0 n& @$ B; h+ g, T
  216.   {
    ; f1 V* p, M7 a" f$ z6 c
  217.     dwCurrFile=0;: H1 d! R6 a9 Z5 _) p9 v+ |
  218.     bFirstUpdate=FALSE;
    8 h6 z' p3 o, D/ s* S- C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 ~. {6 c: p/ c* @
  220.     {! S) N& c1 [" X* g
  221.       dwTotalFiles=UpdateLocal.size();3 O) ^6 a/ l' F
  222.       dwDownLoaded=0;& j' x3 A" [4 K0 `
  223.       bSilentStep=FALSE;
    + O9 }) M5 x+ x- K
  224.       bCompressed=TRUE;4 T) [& ?7 n' g# u* {% h* l
  225.       strExtLocal.Empty();
    * V  t5 a* A6 E5 k) G
  226.       strFullName=(*i).second;# |% \0 I$ s& E8 W. t* }
  227.       dwProgramState=AP_CONNECT;
    / e" t# M& r; \# u" p) G" @
  228.       return TRUE;+ R& _) }( I" _0 i, S- c
  229.     }
    5 f9 J- ?- Y9 c  f6 }+ m
  230.   }
      z/ D9 ?( C/ M% k
  231.   else if(bRestartUpdater==FALSE)
    ! B* j1 I, O9 V7 l% k
  232.   {
    8 M5 S' I+ c* b3 m0 N0 |
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ) [  C6 u6 Y% P$ C( L: I% f
  234.     {
    ' O, u# H" H1 V' g& j: ?, o- N6 m( o
  235.       file=(*p).second;
    # B* C% h5 j( G1 K$ [# c8 @% `
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    : ?8 A' }. a" |- i
  237.       {
    ( c/ w. l+ }/ ]% C
  238.         olds=(*p).second;
    & {( R8 r# `: [( L; f
  239.         olds->vers=file->vers;
    / ?! k- `: z% F) l0 k. M
  240.       }
    / x3 _4 K4 @7 F( e  {6 E" U- L- H
  241.       else
    * n4 C2 L  O3 b4 R  e
  242.       {' M8 [; P/ @3 e) P7 F2 k: r
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - N  H0 d( p9 Q! ]/ U7 ^: f8 m( w
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) T7 W( J6 Z: g
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));3 v0 ^3 I9 [  N1 C3 M- D1 U) A
  246.       }; ~; y5 N& B6 ~( k
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");9 ]; p' q4 A. Y9 L! ~5 `, {2 Q5 X
  248.       sprintf(filename,"(%s)",file->file);. G6 Y1 l+ L" b5 C
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);$ _* k3 S8 k6 ~6 h. g$ a+ A
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }# t3 H( ^& U3 V
  251.     }
    ) w0 i" a4 v: `- L3 w+ r- N
  252.     dwCurrFile++;
    ( J" J; O( v; |0 ~7 D4 x4 P/ H1 |
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 {8 ]9 j' i- r0 q9 I8 O3 Y6 a$ H
  254.     {
    ' N8 I6 @1 M- E- H& q
  255.       bSilentStep=FALSE;
    . `* x4 g. w: F9 D+ T* u" H
  256.       bCompressed=TRUE;$ y% g& g9 {' W4 e" |
  257.       strExtLocal.Empty();+ |1 Q4 H4 x# i- M( ^/ L4 X- G2 k, O
  258.       strFullName=(*i).second;
    8 |) @3 n0 ~. l" ~2 t8 [; B) U
  259.       dwProgramState=AP_CONNECT;
    + ?7 N+ i8 Z) W* n6 [+ K
  260.       return TRUE;
    2 D  c* J4 Y3 E
  261.     }
    ( t, x5 b/ U4 a$ i/ H: C1 w. w
  262.     if(!bRestartUpdater)$ E- m0 r8 F6 J7 Z, z2 T' a
  263.     {: d' W' g. q. Y2 z1 V
  264.       int iCurrSize,iFileSize;  x. F1 K7 y  U/ B5 f
  265.       iCurrSize=0;
    * [, f0 `$ C  W( \8 d3 ~* u
  266.       iFileSize=UpdateList2.size();
    : i" _0 b  T" }; @; D9 I& }
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");' V; P. T5 \$ c
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    & y* q; c, @" S9 X% Z, ]1 J/ c
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");; u8 k9 K" q8 U( |
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" e( I+ ?8 n% B& k( R' I! |  s
  271.       Fclearf(".\\update.dat");0 u# v4 D. d. h9 P6 X  r
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    & x( {# H' p: _& u. G
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # {1 I4 E$ `! ~0 G
  274.       {1 b+ w  {9 S; e' I! ^, o$ n
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())0 W# _/ t2 @* n* c" o; n
  276.         {
    * w* Q0 U- ]# x$ c4 w+ S: _3 O
  277.           file=(*p).second;
    8 z0 W, c9 e5 ]: a
  278.           sprintf(filename,"(%s)",file->file);
    ( t3 \" f' w' g$ y% n1 ?* D
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 ~& M& `" E' `5 r# b9 O" Z
  280.           iCurrSize++;
    2 B& C8 J3 |* h$ v! ?2 ~3 ]& q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
      h; `, S' p  Z
  282.         }. U: Y3 w2 Q( G- S
  283.       }
    $ N$ U: \9 _' t+ B
  284.       unlink(".\\update.txt");
      w& F0 y$ w' j" s' K* V
  285.       unlink(".\\update.tmp");
    ) C, l; G$ q4 S' y  t: g& C
  286.       Fclearf(".\\checkversion.dat");
    ; D, d+ ]+ U7 \
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);5 Q$ I/ ^( Z0 P% U' a/ k. |
  288.       if(UpdateLocal.size())4 _. @4 \& L+ \0 I
  289.       {
    ' \( C% g, t0 U3 ?, r
  290.         UpdateLocal.clear();% h; e1 m, O; l/ p; m5 B% C5 e
  291.       }
    3 d3 d" [) S# a: n
  292.       if(UpdateFile3.size())$ h: v/ X0 p+ v9 f2 ~
  293.       {2 c2 C: t; b0 J7 s+ W4 l
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 F$ R+ g: R; J
  295.         {4 j9 k; n; s8 `2 u0 i
  296.           file=(*p).second;4 c1 v& w, j  F+ s" K4 v
  297.           free(file);
    5 G4 j: n  C2 C' p
  298.         }
    2 t7 Q8 Y' G* B0 C# X7 G
  299.         UpdateFile3.clear();$ z% \/ x0 X; w; F* x8 k# g, @
  300.         UpdateList3.clear();5 _" u4 J7 [7 |" _; i
  301.       }
    3 F' _! T! I! d9 A% n/ `7 [
  302.       if(UpdateFile2.size())
    0 I/ t4 J4 z9 H$ v
  303.       {
    / P' j" p5 S5 g* C
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 I$ F$ N7 I  d3 S  \
  305.         {
    . C5 C" Y7 `1 Z6 _  R9 I$ e
  306.           file=(*p).second;
    6 W  c! q% S, H( x/ ~
  307.           free(file);
    & ^4 K, m5 F2 p$ K
  308.         }2 Y" [0 z  J$ H6 ?7 W+ F9 _
  309.         UpdateFile2.clear();
    : h7 f  P. \7 q* d! f* I
  310.         UpdateList2.clear();) F+ Z* `0 S; P' M
  311.       }
    ) K$ C* H: `$ ?) v0 }
  312.       if(UpdateFile1.size())$ z, O2 Z* j: y( l- ~: `( t
  313.       {; W" J7 T+ s: f' N+ f6 _
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ a  N/ m1 S" E0 ]8 T
  315.         {
    7 g- \5 b% p- W* Z: W; O
  316.           file=(*p).second;' f# E. g5 b+ c; w  t" t
  317.           free(file);
    0 d% f- `" X! G  `0 q2 Z. |
  318.         }- q( m) E) m# ?: C0 g7 e
  319.         UpdateFile1.clear();
    " |6 W( A( c; {0 Z6 d
  320.         UpdateList1.clear();
    " S+ b7 o; K. Q1 q# U: ^5 F& J
  321.       }
    0 m' W" S/ i5 q+ i+ A
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    $ s7 I8 l! s- N: w' S+ ^. W
  323.     }
    " ?+ h' I  }. v' d
  324.   }
    # ~* e: t. e6 W7 C/ v) M4 U' y' D
  325.   return FALSE;* N4 m4 m6 |/ L6 R; o, g& ^1 l
  326. }/ t2 K5 u9 {# O* V
  327. * f& L! @- h& h
  328. void CRevAppApp::ClearAll(void)/ b. S# {  O2 `7 _
  329. {
    . N6 Q8 _1 Y9 H2 a
  330.   LPUPDATEFILE file;8 x) d3 U: \' d5 p! W# `  S7 t
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    - U; c* ?9 ~2 Z! y

  332. : M0 ^9 k: y5 H# C0 V0 F
  333.   if(UpdateLocal.size())5 B( f+ C3 b9 G% I& A( Y* |* A
  334.   {; @* a* S/ s2 G( K, T( B6 g
  335.     UpdateLocal.clear();
    ) i, K7 _) {; G3 A5 J
  336.   }
    8 s" A5 e$ @* W) z" D5 M
  337.   if(UpdateFile3.size())4 f. M9 }5 v& v' l  t# J
  338.   {$ p3 \( [6 o4 E0 B
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)1 M# D. Y! s& L' d
  340.     {
    # @6 a' z0 V& k
  341.       file=(*p).second;
    - S1 _: Z. d1 c) Y& z) `
  342.       free(file);; W; K2 _6 Z& F- j5 v
  343.     }9 z# A- C9 Y! {0 s4 r
  344.     UpdateFile3.clear();
    . v3 }  o; Y1 }* b& P/ ~2 j
  345.     UpdateList3.clear();* a) j1 g# b# q+ A. I0 h. X% j3 N
  346.   }
      `) E% q( s9 O; [
  347.   if(UpdateFile2.size())+ i9 n! Y4 U- _& B2 Q
  348.   {
    7 h7 |& k: e6 `
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! z2 g$ M3 g0 T) U7 @3 n
  350.     {+ ^6 d+ F1 w' ~7 |8 g
  351.       file=(*p).second;5 R) Z8 n7 U) T8 i0 |8 j
  352.       free(file);
    - T  J7 N1 E9 h) D. |- S$ l
  353.     }+ b" Y3 r% N( P. ?+ f9 j
  354.     UpdateFile2.clear();
    1 A; b# m( E& `$ B8 o' C
  355.     UpdateList2.clear();
    0 T8 K* z% ~6 F  w# v( e; Z
  356.   }" `( y/ T4 Z4 K" C
  357.   if(UpdateFile1.size())- i8 ?3 r+ x' C& ~8 t: }
  358.   {
    0 Y% G* O* U; [
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ f' s% ~' j; Q; B- Q7 n
  360.     {
    / N6 R" ?# ^# ]- d+ `
  361.       file=(*p).second;' e( V# P0 W% K$ \( l# L1 W) D# |
  362.       free(file);
    : a7 `2 Q% D" A* w- L8 M0 f: }; x
  363.     }3 Z% l2 K& }7 w" o
  364.     UpdateFile1.clear();4 E- s1 d; Q' w( ~4 {
  365.     UpdateList1.clear();
    1 |6 E6 m& c, H. }
  366.   }" D, x  n! h/ T" |7 ?7 w3 E" e
  367. }  
    + u' k9 w" y0 L) R/ ^9 b
  368.     D* b6 S. S! l+ D: o
  369. BOOL CRevAppApp::CheckLocalVersion(void)' ]& z; U/ R7 h5 B* z* E
  370. {' w4 h& p2 s1 {. N$ b/ X
  371.   int c;2 L* B- j' _2 l  n% @0 ]
  372.   LPUPDATEFILE file1,file2;8 F- e$ h5 T$ B) p1 w6 ^6 E1 i
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    " W* ^: E- F' @; I8 I
  374.   std::list<CString>::iterator l;
    - [+ q  Q. P, k/ W& ?

  375. / S& Y8 p% K& T8 u$ G: J
  376.   UpdateLocal.clear();
    . _+ p6 Y( O; Q/ n& k3 o
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 q1 _+ K" o3 n, D- ~5 X' v
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);9 H& h# E1 S7 H+ D& }( U. a
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);6 f$ w4 u( ^5 q
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);* D4 ^+ N8 @* T
  381.   if(UpdateFile3.size())
    / S& b+ F$ h# v( `% S: {5 W4 J- V
  382.   {6 @' P% q: y# p' N* z" P! w. A% Z; W
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)# j6 ~5 b0 N9 b. e9 E
  384.     {  Z/ u& b. x4 @9 l# K
  385.       file2=(LPUPDATEFILE)(*i).second;
    * o4 U' Z7 j4 k$ p& R2 ]% H, l
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 S) U- [3 w6 {) a* o  }/ k
  387.       {
    ! x6 \) O3 [# R% m: f# {# a& h
  388.         file1=(LPUPDATEFILE)(*p).second;1 D- \+ [/ K- b9 R5 z5 |  Z+ y
  389.         file1->vers=file2->vers;: B" _* l- L- x/ n; T
  390.       }
    : h3 w6 k" Z8 d6 j, ^
  391.       else+ R5 l/ q# [5 A9 _; p  V5 u
  392.       {
    3 ~/ o8 g/ U' ]/ F" Q5 ?1 V
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 e$ F/ F& X& J6 v# t
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    / |1 V% A2 [4 K
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));9 y& n1 \4 D% ^) {) s7 g
  396.       }. Y( f' d8 X: A! u3 l& v
  397.     }
    ! G* V# n. N2 n  a  r
  398.   }
    0 l) j8 t4 G+ i  B
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & g+ A# j% ?$ k) j$ S- S$ y
  400.   {  y3 B/ |- A0 b+ U/ s9 E
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()): b* k5 T+ M6 h* T, v. f  N4 e
  402.     {
    ) l/ o: Z, E" A$ L3 T" i1 h" |
  403.       file2=(LPUPDATEFILE)(*i).second;
    ! y0 I$ V! L* u: ^: {* p
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 y$ m7 a2 {, j9 m# k8 ]
  405.       {5 ~9 C  G/ |' `$ k
  406.         file1=(LPUPDATEFILE)(*p).second;: M# ?. W0 \0 A2 t
  407.         if(file1->vers!=file2->vers)
    5 K# M8 j) r7 J) k" e* U( s1 m: I
  408.         {
    6 G3 j: t, z' t8 s* N
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& C0 n, p" w% S3 Z
  410.           c++;
    8 m7 `/ y9 g7 f$ _
  411.         }
    4 m1 f2 I1 m5 T( b
  412.       }
    ( F: t8 E$ N. s% X1 M# i  O6 W
  413.       else
    / \0 C' Q/ `& [1 X0 [. M
  414.       {
    7 }6 |4 C! G* u" ~7 L: ]+ |# E
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + C% M& }6 t9 `6 r) C* N
  416.         c++;
    " v$ O3 D8 c- [4 e
  417.       }
    1 k" U) y" C! V0 K$ |2 o" T
  418.     }
    7 }+ b4 b3 B4 {' r
  419.   }
    % R6 F+ ~. C% V5 ^6 U) b7 C# Z
  420.   unlink(".\\DownLoad\\update.txt");8 Z) C/ D: N% s0 D$ s' T9 S
  421.   if(UpdateLocal.size()) return TRUE;4 `! V5 q. L4 p
  422.   else                   return FALSE;' h+ [' E3 z: u! ^! T
  423. }
    6 `6 {: e. O# t. v

  424. * P+ b4 ]0 G) n1 W
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/". [* X8 B" \, f- @; t1 O) T  |/ l
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"' h1 L- n: C  ?6 D- i8 r1 B8 h

  427. ; L  f$ I& W/ ~6 J% J# ~
  428. 6 P, y! b/ Y+ c* m

  429. 5 M  w8 M2 V" ~4 t; K& q# r  A
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    , n: Y8 j9 c! g* l+ @
  431. {& X7 {  Y9 v1 a5 ]9 R% Z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 {( H" n4 n* Y" K# x( h& l- e
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    6 l# A0 s7 g" w, ^/ I% f
  434.   {: ?% l" s3 D/ I/ `+ G6 ^
  435.     char szLanguage[50];
    4 n6 O2 [: H  f, g) X- {8 t6 ^
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' R1 C0 P; b3 Z( ?* m6 [
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 C8 c' k  z: v7 {6 }$ o: H
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& {, Q$ i) L+ o# Y+ s6 t
  439.     else                                   m_iLanguage=ENGLISH;( t+ t( j. _- r6 V% [, a" e# Q, U
  440.     char szRegister[100];
    8 n* j8 O0 u( s% W# Q+ c9 S& x+ S+ C
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # _7 P5 B0 r" z: S- V/ E
  442.     strRegsName=szRegister;
    5 v. v5 V* ?) d2 z3 W
  443.     char szPatchURL[100];
    5 N& \; T+ \3 M& S$ A  g
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ _. Z5 R3 V* B4 A5 L
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! D0 R, l* ~6 J& P9 d
  446.   }
    ; h5 a! ]4 ?. `% m+ v
  447.   else5 u5 ?$ N! N+ [( V4 G
  448.   {
    # J& i; i% E: D" U2 @( N' U
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ C. n& ^0 t+ B) V8 o  `# M
  450.     strRegsName=DEFAULT_REG_URL;
    5 S/ ~! a' H- ~, A: Z' V
  451.   }) k4 f9 f- G9 Y/ u5 M$ F  C
  452.   if(GetFileAttributes("hosts.ini")!=-1)! P/ _4 J3 O1 i: u3 G
  453.   {
    ) L. r" E' T/ J+ H& M+ Z
  454.     char szIP[50];. s; L6 |) u9 j
  455.     char szDIR[300];& T; R9 g9 `' v* z/ H
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    7 ^& W+ o9 {2 f+ w
  457.     {0 ]- m, {, L9 n" \4 B) q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      O; p  ^- i% q& z' }2 O4 B. g/ x: Q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");  d# v6 j2 E; ~% Z" b# S3 N- O* x' P
  460.       strHostName=szIP;& u( O1 \: l- j# l; x
  461.       strHostPath.Format("/%s",szDIR);/ D/ {4 ?: a7 @' O. W9 J! ]  k  Z
  462.     }5 z4 `* c, E6 O' f  p5 `6 v
  463.     else
    $ `! a& U3 P4 C+ l; A5 o7 S
  464.     {3 y' |1 z' ~( {# }) ]
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 Q  M: B# |1 o" \/ O( g) @. H( k
  466.       {) i! ~: {" p  A
  467.         char szLanguage[50];" s4 N. i( T# u9 z/ {' r  i
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 ^# b0 H; w  x4 |# |. [
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % e/ `7 q' @# w9 q- i% Q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 O8 }- L2 M% Z/ y% n
  471.         else                                   m_iLanguage=ENGLISH;
    ' G7 V4 t8 x0 f! f7 u
  472.         char szRegister[100];: y$ l# O" C# X9 ~5 s
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& h4 _4 J- L1 P' B' w
  474.         strRegsName=szRegister;
    0 E- ~& y* f' l" A, m7 g
  475.         char szPatchURL[100];
    1 F0 r2 @, i* R9 F4 [
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% p) z' V6 A0 `5 ]1 }3 f$ Q- m  Q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      R6 X' ?6 H, U8 N9 n8 {
  478.       }1 `! {% a+ z/ H  `$ H9 [
  479.       else" c" T  w0 y9 p* p( T, d
  480.       {
    7 Z, y) X$ @4 \$ f' i' G
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * h) M5 k0 a1 w
  482.         strRegsName=DEFAULT_REG_URL;. i! B: }- ^1 J* o9 e" j$ ~1 z7 o6 H0 A! P
  483.       }
    $ S5 M7 X% N9 j- }( Z
  484.     }& }1 O( ]. G- j2 l, `  X
  485.   }
    9 q! }& e& }. c( ~# C
  486.   return true;! M* B( |2 F+ R. J. ~
  487. }
    & J8 Z, r4 W  W' R  a+ x3 E; i
  488. - e$ Z8 _9 x  d' f' `# K
  489. #include ".\ZLib\unzip.h"1 v. s+ ]6 [4 V/ o: R& n7 ^. r
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);" y3 F! n6 M: F0 q3 n- k
  491. /////////////////////////////////////////////////////////////////////////////$ ~4 i1 X- B& J0 E" O# ?3 b
  492. // CRevAppApp initialization/ {; J8 R+ b: y$ m
  493. " a3 D1 V: F. p$ w8 H7 p# S/ I
  494. BOOL CRevAppApp::InitInstance()
    ! E9 b) l. Y  n6 P) x: [6 V' }
  495. {
    ! }2 ~$ ]  {" |- K$ m, F, V* o% ^
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];7 S- U- H* R6 V

  497. ' l8 ^! g" Q% l# ]  A; }
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);# g5 t6 T  q. h  c* o, `1 i0 c
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    2 u% ]8 P7 h# n
  500.   {1 M" A: z2 n( P+ e0 F0 I
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    2 V6 t3 F- l% _( b  H4 T% L
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: g/ B( c0 G& G" r  q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    4 H) g' L* Z3 H; W/ q2 i
  504.     {, c, r9 F- ]8 a; {3 s' Q1 v
  505.       strcpy(szPath,szPathTarget);5 P: f/ I6 Q0 C* c/ |/ A. o
  506.       SetCurrentDirectory(szPath);. z$ ?' w; N* _% }+ o7 h
  507.     }+ Y9 x( N$ C; u& ?- E6 u
  508.   }! D, G6 A+ e) L/ Z" j$ l& B5 r
  509. #ifdef _DEBUG0 j4 J2 }: X% L0 r
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); G  ?. ]+ ^& X0 p  w+ ?. G! {" w
  511. #else
    4 c. K$ y5 V8 o& Q
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 o, \& K7 I* h. l( x6 u1 d
  513. #endif& C8 j; g* |' E
  514.   {
    0 U+ b( ~7 {1 @* ~. v
  515.     char tempFileName[MAX_PATH];2 Z- g. ~' w# \$ m$ F
  516.     strcpy(tempFileName,szPathSource);( N' t1 r9 F+ J( D) b  |
  517.     tempFileName[strlen(szPathSource)-12]=0;
    . p, ~4 y$ T+ x5 B
  518.     strcat(tempFileName,"\\$CSUpdate.exe");9 E" Q  O) G" Q8 }7 K( ?% Z3 O
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ! N1 Y4 o- K# e$ h& c
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);8 G- }. {; h$ G+ ?* X" }1 ]
  521.     return TRUE;
    9 h, w1 l5 r6 [( a
  522.   }
    % D2 p6 i4 h8 O7 e" M9 [6 C" F
  523.   // Nuke 0118: Delete run.exe
    9 {: x! Z* t6 I+ s. H
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );8 m. ^+ ^7 A) ^0 e  D# @/ v" L
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) E6 o* B+ m, Q  c( |) i
  526.   if(!ReadCfgFile("Config.ini"))6 _9 d" D* `/ G/ [% c
  527.   {8 U8 C1 P0 i, m, U" s
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);' L/ X3 y0 {9 P+ v( j# A  D$ r; T
  529.     return TRUE;
    + C% {- }) O, c6 x* U
  530.   }: K) f8 I* s+ T& |
  531.   HANDLE mutex;. D3 P' l& ?. K, G( f- D+ u
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))  n6 F0 e! p' u" Q$ ^$ ^' ~# r
  533.   {
    ) k. f2 d$ p8 E
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 H0 ]6 o; \% h
  535.     {7 `# R/ t$ B7 c* z4 H( Y4 k/ T
  536.       CloseHandle(mutex);/ {& F! d( g. b3 d" f
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);2 v$ {, k& {3 \5 _2 Q
  538.       return TRUE;
    9 Q  L( D) i5 Q: Z" A6 p
  539.     }1 V; y9 ]/ K8 ~7 v% ]: B4 Z
  540.   }  $ `3 V) W0 B1 V% a8 O  k' r( W, r
  541.   CloseHandle(mutex);, P' O% y$ l" E$ L" ?2 R

  542. 9 c8 o+ T7 b6 f
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
      B4 _( ]/ X' r* i1 F$ C9 a) W

  544. 6 d& l) \' w/ R; v8 ?9 o
  545.         AfxEnableControlContainer();; V6 `" d; ?  T$ T* m

  546. 0 @( q; h! w$ V3 `
  547.   bCanUpdate=FALSE;/ ^- C, q/ ~+ g: V% [8 r- v4 M
  548.   dwStartUpSteps=1;
    7 h4 }1 Z* q, c+ d
  549.   dwProgramState=AP_NOTHING;
    , V' A9 }4 F8 H9 W6 {

  550. 3 J, h' v; s$ ]+ u$ U- n* X
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);$ T/ Q& w: D- z1 M+ }) A) R) [
  552. ' I! P8 G* e1 P# t
  553.         // Standard initialization
    8 Q2 h0 K3 K# H' P- u
  554.         // If you are not using these features and wish to reduce the size
    6 C3 C& C1 v& H! [- S" G+ v1 {
  555.         //  of your final executable, you should remove from the following, Y: k9 N+ w( X% y1 l
  556.         //  the specific initialization routines you do not need.' L  n+ j, U3 N" X6 n5 I6 f3 }

  557. 6 K1 q8 T/ Z8 q
  558. #ifdef _AFXDLL
    ! o; Y1 V% Q) y, R3 m% D; d1 a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ; C- f. s  H2 H' U
  560. #else/ X4 @& _5 A8 o$ ^1 D6 n* O! u! X- b
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically; c4 V: k9 a0 o
  562. #endif
    4 Y5 r8 R$ d# W- \

  563. & M$ y; g2 F) Q! c) ?5 [0 r
  564.   dlg=new CRevAppDlg;6 P( g$ A% n8 \0 R2 G
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    9 Y- {) Z0 z1 p/ H! y( X) _- I0 i
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / d* r. z! Y! P" I
  567.   m_pMainWnd=dlg;
    6 y# H9 V0 P4 n6 q4 f
  568. * B$ m* y& l' U# o) ?# m
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);" v2 K3 h% }$ Z. F
  570. 4 n' |% m% _/ g- ?$ X. t
  571. //  GdiplusStartupInput gdiplusStartupInput;
    6 L. i& K4 c5 _( m5 m
  572. //  ULONG_PTR gdiplusToken;
    0 \3 d6 n5 D; v5 [  Z& o, t
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);( B& q: d& P" X2 g. R
  574. ; r1 t2 c$ u7 Z8 h
  575. //        CRevAppDlg dlg;+ B8 ]) N; ~, S9 p- o8 C
  576. //        int nResponse = dlg.DoModal();
    9 T& Y, l1 x" N0 R1 A7 m
  577. //        if (nResponse == IDOK)! I- r) [9 k1 W: H1 a' {
  578. //        {
    $ z5 Q  e! `6 Z& W1 Y% w' ^
  579. //                // TODO: Place code here to handle when the dialog is
    * l- p! ^/ Y8 }" G; D
  580. //                //  dismissed with OK# d6 O; J6 }4 T1 |( t; D4 y8 g
  581. //        }6 }& e# k& m5 c
  582. //        else if (nResponse == IDCANCEL)& o; z$ ]$ n/ Q4 w
  583. //        {) \/ f  @' p5 @
  584. //                // TODO: Place code here to handle when the dialog is
    9 f. E! j# m: n9 w# C
  585. //                //  dismissed with Cancel& R2 \" q) c! P6 @
  586. //        }3 B* j; X1 c/ m. ?

  587. " d% Y; \& Q9 [8 n3 T
  588.         // Since the dialog has been closed, return FALSE so that we exit the* e  s. V+ ^6 ]" P, a" K1 X& M; K
  589.         //  application, rather than start the application's message pump.. H1 u1 {: {" A
  590.         return TRUE;. N3 b' q1 J, e8 ^
  591. }, o) q& p5 O) D1 t  V; _' I

  592. ; D& i/ n0 r( t* ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ' l' v% U/ ~3 ?" A* O; ?
  594. {
    8 j& j% n4 ]2 g9 [
  595.   int i;, L( b" w9 b& G" ^+ Q& M. I
  596.   char *szRet;
    3 [0 }2 _) u; c0 W

  597. : v, J4 Q, r. Z5 [6 t2 k
  598.   if(pSource) { itoken=0; sztoken=pSource; }* q4 ?0 x, Z5 E6 ]) w
  599.   if(sztoken)
    6 F. m( V. U3 {5 C; |$ d
  600.   {  A; I# W* U( h; A7 Z
  601.     szRet=&sztoken[itoken];
    : _, O8 V2 {5 d" ^5 h
  602.     while(sztoken[itoken])$ t" y3 F8 D3 i9 D) L* \, D+ J
  603.     {! B$ R' i7 E  c- E- s9 j
  604.       for(i=0;i<(int)strlen(token);i++)0 ?! J4 W3 R5 h% C0 z; H
  605.       {
    . ]9 z: O8 g" z3 f
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    1 v0 N2 V. X: k1 _
  607.         {5 O* S# r; z) f! i
  608.           sztoken[itoken++]=0;& Z/ h& Q  j$ C% q* {& {7 P1 j& P5 h
  609.           sztoken[itoken++]=0;
    ; s( l* v+ E) w8 F, M; j" ?9 E0 Z1 K
  610.           return szRet;% K& I$ A) f1 g/ H* ^) l
  611.         }) v& k2 q6 c; N+ _- |% Q
  612.       }5 p2 ^$ T8 A7 Q, z3 c& a
  613.       itoken++;
    0 T5 K2 l3 ?7 l: _
  614.     }
    $ s/ J$ ?' m, N% }7 A
  615.   }
    ' r! t# e7 f& [$ e+ n2 f7 H
  616.   return NULL;' D# C9 D& T  o# ~: t
  617. }7 B8 W& D  g% O5 T, B0 X

  618. 5 `1 e% B# ?! I+ z- F) n- x; I4 _
  619. void ProcessProc(long Total,long Current)- [5 t- ~8 _! o* G( _% T  k% W
  620. {
    , o6 l6 r' e- u/ x1 P
  621.         MSG msg;7 d' ~' X: U! |& Q/ P  E
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);* e8 ~  u# J! S* Y) N' Y$ V  U
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
      ]: J; ?" M0 N4 j
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    # s3 V4 S/ c. P! E0 ]6 K3 `7 z# A- y
  625.         {5 e; X4 l% z+ z# `
  626.                 if(!GetMessage(&msg,NULL,0,0))( U/ T- A# v& \9 {! _# \
  627.                 {. [+ s( c& \$ R, Q+ b5 d8 D
  628.                         return;
    3 }+ v! g* c+ Z& Y
  629.                 }- ]% u, Z3 a; c6 `
  630.                 TranslateMessage(&msg);
    " n& Y6 k& z( q$ M# a3 R7 L
  631.                 DispatchMessage(&msg);
    + b- `4 s) z0 C3 Y' s
  632.         }       
    2 ]; `+ t8 [3 d$ h6 H9 l" n
  633. }8 e* r; }/ l; j2 s  J. X

  634. 3 [  h" C% X' h& @% j
  635. BOOL bFirstChar=TRUE;8 d# Y8 h9 {8 G
  636. 9 e- `6 `4 p; ]! }" ]
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    3 Q6 B% j  Z; U; T) O- L
  638. {+ K+ Y1 m$ |8 t4 l
  639.         // TODO: Add your specialized code here and/or call the base class
    ! w% r, J% F5 C# K  H% x
  640.   switch(dwProgramState)/ a: Q% i% d# g4 |* y
  641.   {9 Q" y9 s- ^& W0 Z: M( o
  642.   case AP_NOTHING:
    5 P) L( R3 Z" C; [
  643.     switch(dwStartUpSteps)
    + _4 Y  {; b0 }& W# m
  644.     {# X8 z. O# E* d, g7 J- \( D
  645.     case 1:4 f0 j$ v5 C! g- ^/ X' u
  646.       {3 k. {4 |* U  B
  647.         int i;
    " J. R8 t  D/ x$ ?: M4 l3 ~! w$ W- S1 r
  648.         CDC *pCDC=dlg->GetDC();" t" G. |2 ]& p. D/ E, r
  649.         HDC hdcwnd=pCDC->m_hDC;# k4 E0 W+ G# _+ y
  650. //        Graphics graphics(hdcwnd);
    . c6 A9 y9 X) C
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 w2 i& M1 o) R7 M" x1 l2 k
  652. //        INT iWidth=bitmap.GetWidth();1 H$ Q; Q# r& C0 ?
  653. //        INT iHeight=bitmap.GetHeight();
    0 Y9 T& N4 C6 c2 k$ r: n' f
  654. //        Color color,colorTemp;
    * D: j% u) K4 o0 N9 F1 a- v
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ' ~" h1 p- Y7 E' W9 ^& x" l. E4 d7 O6 j
  656. //        {- D* a# i, @' f: n6 k
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)) V9 l( Y+ Q! D2 w
  658. //          {
    & \; z' k6 b/ g" U* j4 R
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      m+ m: c# [) Z
  660. //            colorTemp.SetValue(color.MakeARGB(& R0 q, X9 p2 u0 f+ m2 U
  661. //              (BYTE)(255*iColumn/iWidth),8 W( B% E3 f4 p. b/ L% p/ f
  662. //              color.GetRed(),
    9 |! V9 s$ a0 n9 \( u% A
  663. //              color.GetGreen(),
    / [( s& {3 E% B* g8 d9 o
  664. //              color.GetBlue()));4 g7 O. K* M7 F1 u$ P
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) o6 W4 j3 y% q& w
  666. //          }* A( }8 s; @0 H6 w( _! Y
  667. //        }& h; v- A+ T2 h$ F" j% }
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    8 K7 B4 {' g& B7 w* w3 w
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 H) a' A6 U) C5 q
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ' S+ q5 N8 p9 P+ W4 H
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 A  n; N8 j& G& u
  672.         for(i=0;i<240;i+=8)
    - z# q) O9 ^$ j- I
  673.         {) D2 f. {! j+ N0 a% C, [
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ J) D4 }6 b4 r$ e  Q+ W, g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : e: \) v; |4 I# Y* B
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 p- p* ^8 _! l6 U# H( a% y
  677.           Sleep(33);5 s5 J4 g3 ]( Y  S9 e4 B
  678.         }
    3 K1 G$ I+ ?: Q! o# C: I8 S
  679.         Sleep(1000);1 A# K6 z$ t' E$ N* c
  680.         for(i=240;i>0;i-=8)
    ) u- N; q, B6 V( a3 M
  681.         {# k% {5 o& |. a2 `
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & [3 f+ d' t, {. u1 W
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % O* Z6 |' ]# E* W  a' p
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , y5 i* ^) l7 ]4 E5 u0 A1 o
  685.           Sleep(33);
    0 d2 f$ d0 a2 Y( V5 p; w
  686.         }
    . Y3 I# X0 `" ^' ]' J5 Q5 s( V
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( j1 ~0 C2 r: C' N& f
  688.         dlg->ReleaseDC(pCDC);1 y& b. Z! }# M6 r7 c& C
  689.         DeleteDC(hdctar);- L# L% T4 O% Z2 m4 k2 u
  690.         DeleteDC(hdcsrc);
    8 t0 O* W% X$ A
  691.         DeleteDC(hdcorg);
    9 e+ I+ ^+ M/ z2 M' F
  692.       }
      Q0 G: z- X1 a5 T0 @
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);* F% l. g# H; e2 v% x
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    & t' w( B( g7 Z# T+ l" b6 u
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
      Q0 X3 e- o( u0 `* V8 o. ?
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");1 O: B5 v$ M" r8 u$ |
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( Z# w6 V) S* X
  698.       if(!Dn.Connected()), x/ @2 k) {' T9 p
  699.       {; a! F, s1 B$ }6 k: g
  700.         dwTotalFiles=1;
    # o7 U' @5 t0 ^8 S# w
  701.         dwDownLoaded=0;+ r6 Q; u, u# t; Z6 W( H* A
  702.         bSilentStep=TRUE;
    7 v: i7 r4 S* S6 X3 R+ o  r
  703.         bCompressed=FALSE;
    0 ]0 X5 [" B$ [3 m" I2 S8 l- }+ [
  704.         strExtLocal.Empty();9 G% {* {5 V# @7 |5 s0 [+ E$ D
  705.         strFullName="readme.txt";
    3 C" A4 q6 x' a/ Z- G7 B8 X% \
  706.         dwProgramState=AP_CONNECT;, ~+ a2 |  I! F+ a0 D, V$ }
  707.       }
    % N$ I1 j2 L2 d0 C7 K
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();& ?- r8 Z1 V" x
  709.       dwStartUpSteps=2;
    - W, J% d3 O/ t) b% W' j& h: a
  710.       break;/ _$ h" [( X( N. [4 z& J
  711.     case 2:
    : ?. t) Q* j/ p1 \+ ^
  712.       {
    2 g, S; g8 {( h) ]
  713.         int iEOF;
    6 K% r3 C+ ^# Q( A7 T# w
  714.         FILE *fp;
    3 ?3 f) @, V4 R, \9 a5 q2 K$ e
  715.         char szString[512];1 {+ V4 q, @7 G& g1 @+ ~/ X
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");+ K& C6 I6 v0 H9 w: R6 D6 c3 A
  717.         if(fp)4 y' S. Z; V8 z; m5 `
  718.         {
    3 e) D7 {2 {/ h( d
  719.           do
    ) d3 {$ @, u/ [* N3 w9 m4 f6 x8 ~
  720.           {9 `& S* I( F4 y4 P" V
  721.             iEOF=fscanf(fp,"%s",szString);
    8 \  r+ t# ~8 T/ ]( N. `
  722.             if(strlen(szString))
    8 I' u' _( S2 O$ X) r6 w7 |& t1 U
  723.             {+ r6 q5 ~/ w1 }$ E: _2 M5 v
  724.               if(bFirstChar)
    # u; j  U4 {# [
  725.               {
    ; k2 L7 f; ~" r+ m
  726.                 bFirstChar=FALSE;
    $ R5 O2 j1 P" R  D4 `; P# l
  727.                 bConnectIsBig5=FALSE;- O$ u' z$ A" T0 _# v# j' B, d# K3 q) j' o
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
      F; w( g* m6 ]! e
  729.               }$ a: Z8 t. g( j/ g2 s" N5 t: Q3 x# Y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; f. t& l' R% b) ^5 S
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    % O! O/ Z, w3 v0 ^. K  R1 |% s
  732.               dlg->m_ListText.AddString(szString);# B( m! Y3 [$ S
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # c! N1 i0 J  S9 E: V8 x5 }' e
  734.               *szString=0;0 B9 X; ^4 Z' e- I; q9 v/ I% q
  735.             }5 s  W4 {$ x4 X8 h
  736.           } while(iEOF!=EOF);
    & P) _. P; e" U- v: D/ v5 f  M1 [
  737.           fclose(fp);  g4 @& T; I  Z9 B# t
  738.           unlink(".\\DownLoad\\readme.txt");
    5 V8 p0 e, P5 S. x
  739.           dwStartUpSteps=3;6 K0 u" j" R2 O
  740.         }3 a$ C: ~: P  D8 q3 Q# E* u
  741.       }
    6 \7 V9 l$ S% F7 H) d
  742.       break;; i" ?, t: G6 ^/ T& ^
  743.     case 3:
    + X! }, C9 |6 I1 o5 G+ t. P, R
  744.       if(!Dn.Connected())
    . _; C$ r& B2 B/ \2 x
  745.       {
    5 o* J: y: x' u  ?
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);1 h; e; ^. x, p$ S
  747.         dwTotalFiles=1;: Y3 p% ?+ [( s  Z: F  t& ?' \8 i
  748.         dwDownLoaded=0;
      j( I: {( P! U9 |: Y
  749.         bSilentStep=TRUE;/ {7 s. v0 |, L) Q  l% j% ^8 A. A
  750.         bCompressed=FALSE;
    2 `* ^+ i7 @' {- ]3 ^' z; a( g
  751.         strExtLocal.Empty();- |. t) M+ A/ C4 S: P! p  X
  752.         strFullName="checkversion.txt";
    ( B# }# a. j: A+ t
  753.         dwProgramState=AP_CONNECT;
    ) V6 {4 \8 v/ F9 d* v; ~7 E
  754.       }8 A+ d; O- J) P$ G% k2 g% L( W
  755.       dwStartUpSteps=4;
    7 m# x- _9 n) G& A% Q; i
  756.       break;8 n4 w$ @" \, K! l/ l- T7 C
  757.     case 4:
    & e  K2 T9 P% R$ k
  758.       {  R) Z& U' Z1 |6 n+ G( r8 v' K
  759.         FILE *fp;/ k- N, c9 o5 x" w$ t# x8 Q. ~* N. k
  760.         char szString1[128];
    : i" m% q6 Z/ z. J- S' m3 z: W0 ?
  761.         char szString2[128];
    8 j9 _: r& P# T8 X8 z
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    : E2 p2 Y) r) Z: L3 M1 J, U/ X
  763.         if(fp)
    ' |; a& x# v2 q5 J- M
  764.         {
    / Z8 r  t3 Z; H; i0 t( g# N3 c
  765.           fscanf(fp,"%s",szString1);- R8 I7 T4 _9 {* y0 c9 b+ L+ f; j
  766.           fclose(fp);2 p6 n5 k) G5 B
  767.           fCheckVersion=atof(szString1);: t7 b1 w4 C6 c3 I( z& i5 P
  768.           fp=fopen(".\\checkversion.dat","r");! d1 u# Q) N* B# A
  769.           if(fp)
    , Y( c1 N* R5 A% i
  770.           {( _. x" ~: N& O4 p
  771.             fscanf(fp,"%s",szString2);! Y2 M" c) V/ i! W: E/ q4 d
  772.             fclose(fp);0 F' N4 [* X* o) H8 a9 x5 B
  773.             if(atof(szString1)!=atof(szString2))) X3 m" N. O2 B
  774.             {2 B3 D% _5 r# @0 u9 ^
  775.               if(!Dn.Connected())
    1 `1 Z, M+ a: O  Y
  776.               {
    & X' O0 c# I* c1 p% N& |( B
  777.                 bFirstUpdate=TRUE;& e  q8 \* V% {) G
  778.                 dwTotalFiles=1;
    . x% v0 e& z: C2 l. P
  779.                 dwDownLoaded=0;8 U5 E, A/ r+ x& Q& R
  780.                 bSilentStep=FALSE;
    9 [) q7 w& b: U: |1 Y4 U1 i
  781.                 bCompressed=TRUE;$ n" P1 O4 u5 C% q
  782.                 strExtLocal=".\\DownLoad\";$ c, x& _( _, Z3 H! ]( p
  783.                 strFullName="update.txt";2 j+ [" A- k/ }' R' w! K0 N8 c+ G3 m" g
  784.                 dwProgramState=AP_CONNECT;. [( A/ c- x- H1 G' [7 S3 \" u4 J& Y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");6 N0 U0 U# R4 @+ e
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% j: l. G4 p" Z4 m+ g" ]2 B7 {0 S
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");3 b- F& N. _! k2 o2 K

  788. * ]- x( K0 t! z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' j! H& [" ?  e
  790.                 unlink(".\\DownLoad\\checkversion.txt");" f  [& `( I* C% x/ l( F* J
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    # z; G, [/ Z1 b" g1 v
  792.                 {
    & A( e, m- R  d0 e$ {! j
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 q- \: j/ E& f$ D" L& Y
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" S1 B0 w6 M- v4 u
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");- f8 @- g2 c( L8 j1 \: Y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " \( ]) W8 F' ~* h% o
  797. ) t, m3 ?9 t$ E$ R7 j8 f( k
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    3 O" l9 K0 @& |) R
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");; R; V7 h5 L5 I1 c- U2 }
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");* K' K6 c0 z9 C, }& Y9 c1 g
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 L7 @& p2 k; ]( p) J/ x% \
  802.                 }* n& [, T0 \, R# N; b/ _3 p7 w9 c7 W
  803.                 dwStartUpSteps=5;
    + A- I1 E( M5 w$ Y* ?% F
  804.               }
    6 C" k9 o' A& u- r. {# \6 B) j
  805.             }) B4 C) c' ^. P- i+ D: \6 ~
  806.             else
    1 K" V1 @" U  g- k1 }8 V/ G6 |- y2 f* k
  807.             {* _/ B1 R4 A: w% U4 `/ k
  808.               unlink(".\\DownLoad\\checkversion.txt");* r- D8 d- D9 j9 r9 g
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");/ J4 \# V7 N$ D$ w* o
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ t) ]9 Q& Z# w, X; O2 N( ]
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");, Z, h- m5 c9 ^
  812.   E, X9 T/ H' ^- ^! Y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* t1 O/ m' V* T& w. A  f  s4 n( f
  814.               dwStartUpSteps=99;7 |+ [1 r7 @' A
  815.               bFinishUpdated=TRUE;' h0 G; r. G9 @3 P7 T
  816.               bCanUpdate=TRUE;
    $ j8 R8 H& y. Y& Z: \
  817.             }! _0 H, ~8 ]! I
  818.           }
    % ^7 Q8 }6 k( B4 R) e
  819.           else. l  w  N2 Y; z4 @
  820.           {7 [! k0 l8 s' o5 Q
  821.             if(!Dn.Connected())
    ( [9 L: G) k+ {3 [* f
  822.             {1 y4 q3 h8 d3 a5 S
  823.               bFirstUpdate=TRUE;
    ) c2 L5 H" p. t: l7 V" Y
  824.               dwTotalFiles=1;
    " ]$ L) e; b" s; D: R0 e
  825.               dwDownLoaded=0;
    7 Q2 ^: Q( {1 y( r9 i  J
  826.               bSilentStep=FALSE;
    4 p2 g1 _: ~% f6 ~6 D
  827.               bCompressed=TRUE;
    2 s1 {# X% V& z, p( i
  828.               strExtLocal=".\\DownLoad\";( ]# Y6 Q& Z7 T$ m/ h' H
  829.               strFullName="update.txt";! h8 u! o. F" D" m8 I& D+ K5 v
  830.               dwProgramState=AP_CONNECT;
    " z: j, o& h  G( |& L3 N( B+ h
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  ^# ]* s; e+ a' S" g0 T
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 r/ Y7 |( u1 f) j. z# G
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , q- L: B$ C* F' s3 y% |( h- u
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 q" x2 h- Y# {" N. R1 h
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ! Z" D1 x; E# }, P! g1 M
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)/ f, X! W/ j- T) {/ B4 W
  837.               {
    , \7 [* M" D3 z, {8 X) W: Y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");+ s5 E! W0 Z; C$ u; S; }
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");0 M/ E& d) f; u% u+ h
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    2 V# @* e- \, \% Z9 {' N
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 e+ T( P% s0 e, s
  842.                
    % ~: N4 w. ]- I& ]
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");) r. q1 M6 T" ^8 l$ Y2 E
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 E% v1 T) A: {8 I
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    + Z4 f0 G: l2 L5 N
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 u* l& [5 [6 r4 Y$ a: a
  847.               }& y' i; Q% S! [9 h( h9 s. M
  848.               dwStartUpSteps=5;* Q; O7 R! }2 O( i
  849.             }
    # o5 A# I/ n( I! s+ }- ?/ z# t
  850.           }
    # |6 l8 r: j4 Z& B* y. h. Q5 h
  851.         }8 |' O5 a; [! |3 Q, {
  852.         else
    / A9 \$ F8 x: E& j9 e0 Y0 e# ^( W
  853.         {4 i8 V. ]. o: P! i8 X! Y( Y
  854.           dwStartUpSteps=3;
    9 L: [+ m; V5 R, q
  855.         }
    , C% O. Z# _+ R# K
  856.       }
    1 ?" s% R+ ^" p% P/ m. d
  857.       break;& s! X! }* D: T5 z9 E
  858.     case 5:6 ]4 \+ |( l& \' @
  859.       {, W* R# Z  T' G
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)) [7 z/ \% R  I
  861.         {" C7 t' H3 C+ x% G4 m+ K, u
  862.           int opt_overwrite=1;* t) U. b4 W7 o6 Y+ L8 R
  863.           int opt_do_extract_withoutpath=0;1 c/ d# K6 |' u0 }+ B
  864.           unzFile uf=NULL;
    0 f! T* b) M2 X9 T$ Q

  865. 9 ]1 K( g4 `: |7 y; W8 G# G4 m% ]6 J
  866.           uf=unzOpen("Wsa.zip");5 m8 M. e* R6 d! _. P
  867.           if(uf)% [& C5 _: C. G9 G
  868.           {
      W3 P) N$ g+ Z( l2 M% L
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    : C" H4 F* n/ `8 H+ ^5 [9 f' I
  870.             unzClose(uf);- W. Z$ `  \5 M7 v# o' W  K$ _0 W
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    $ |! O$ w# k. \( u
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");. n9 w$ R8 u6 V5 E! ?
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    4 R/ f. R* `0 L: i# B, |
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) n/ t$ f* q2 B" H
  875.           }7 J- h1 T4 G9 B( `
  876.           DeleteFile("Wsa.zip" );. }& q& u% P3 Q: E  y! X
  877.         }
    ( b2 u# @5 }0 I1 m$ R! W4 L

  878. , o7 p, q1 A+ |5 _% p4 r  _
  879.         if(CheckLocalVersion())) _7 D4 Q0 B  @
  880.         {5 I- g8 L: a8 j
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");4 O7 s5 y5 s7 q. r4 Y1 A
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");* a$ P$ U/ `0 p% u, i
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    " j7 I# d( S& O$ `
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! T& C9 N& K0 \4 P2 i1 Q
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    2 s) z& E2 P; H$ b2 D4 A! A. _
  886.           dwStartUpSteps=99;0 w7 o, \! e; c& r' N0 z* S
  887.         }
    ( o8 C6 R! W% ?9 c# |# d% t2 l5 |
  888.         else9 a1 h2 O( n. q) G
  889.         {) E5 {8 r$ q2 g4 a
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* U. \8 I: J5 O! K) c, j
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    0 m; `% G6 G" x+ r9 l/ c6 x" s
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 N( x5 [1 T: \& W8 l

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

" B2 D) u- {5 f1 p  v- }3 W

評分

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