找回密碼
 立即注册

CSUpdate.exe源代码

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

$ d. ~& Y0 j8 N9 W8 v
  1. / RevApp.cpp : Defines the class behaviors for the application.
    * y" j' d! n0 ^3 J
  2. //
    # C: h4 S6 N! d" ^
  3. # x. i/ |6 j! `/ d2 G
  4. #include "stdafx.h"" u0 U7 a! @1 Q( \* S

  5. * ]3 `( F4 a4 n( g- b; S  ^, [
  6. //#define UNICODE) v3 z, W, C* x+ m$ }' N
  7. //#include <gdiplus.h>; B2 J4 g2 q' V" W) {
  8. //using namespace Gdiplus;! ^, k$ b; f, v

  9. 6 L% f, W' a8 }
  10. #include "RevApp.h"
    ) h% E2 X- q* x$ p9 e+ [
  11. #include "RevAppDlg.h"
    0 T( M! p/ U& @$ M  [8 T( v+ q

  12. 8 d2 k$ p8 X- h; ^& R9 n
  13. #pragma warning(disable:4786)
    ; ]) N) p0 ]7 g9 ^8 H# K
  14. #include <map>& Z7 f( K% Q' W) |8 |
  15. #include <list>
    % P/ `8 T& |& g/ s  g
  16. #include <direct.h>- }: P4 f9 Z! o, i5 t  B. w9 G+ E
  17. 8 a% {9 x( E- T; k3 W7 d9 D( w3 d# I
  18. #ifdef _DEBUG7 e8 t& p) k( q) B* z
  19. #define new DEBUG_NEW
    6 K, R: T/ v* y* o5 H% s' `
  20. #undef THIS_FILE
    ( A1 U$ t* P: c) o) J+ P
  21. static char THIS_FILE[] = __FILE__;& E2 l* z& _0 L8 d7 ^) _2 E
  22. #endif- G! m: v, k; o8 p5 i4 A
  23. #include "SkinResDef.h"
    & O" D9 l4 s: D: q5 n+ c# ]
  24. #include "ChangeBG.h"4 K) ~4 u8 A8 X- ?6 O' a/ S0 A
  25. #include "AFXINET.H"
    & j# f. C4 n; I* J2 s# K/ _

  26. 2 s, O+ n0 v9 E
  27. #define TRADITIONAL_CHINESE 08 ~6 V) C, O6 s$ O
  28. #define SIMPLIFY_CHINESE 17 _3 ^1 ^6 s4 @; ?4 S5 a
  29. #define ENGLISH 2
    ! c. H+ P$ S- m, |! E3 A
  30. int m_iLanguage = ENGLISH;/ d. ^. W- X3 H+ f8 J
  31. /////////////////////////////////////////////////////////////////////////////
    3 K0 T% q7 w! J
  32. // CRevAppApp
    8 e5 ~% ~" _' Z1 Y3 _: X

  33. % s! N$ Z+ E& D/ s- ?
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    - b7 L, o* D. ^
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    7 o" y* A2 ?1 E, V) A
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    " G% b% @- c& d, z3 s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
      q3 S# ?3 X/ z0 ^
  38.         //}}AFX_MSG
    ( L! v- R9 H+ R
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp), U5 z) x' s! N- y5 u, [+ b# s& t
  40. END_MESSAGE_MAP(); X" x( \, s8 W) L+ r; i; h

  41. 4 n, @! u8 Z, m2 I; ~
  42. /////////////////////////////////////////////////////////////////////////////
    1 L3 f; Z2 Q, q- E2 D2 d
  43. // CRevAppApp construction
    $ |2 r6 j7 ^% @8 t/ s
  44. + w1 t7 j3 J" S  g9 g3 s
  45. CRevAppApp::CRevAppApp()$ ^' \% C- A4 S9 D7 i% |; ]
  46. {
    - n! s. {0 W2 Y
  47.         // TODO: add construction code here,
    * {* f0 S, d' ?1 a0 S7 S
  48.         // Place all significant initialization in InitInstance8 \  Z$ g, j  K  s! j9 W& b( H
  49.   bDisplayIsBig5=FALSE;7 ]; l8 W0 g( }0 v4 C
  50.   bRestartUpdater=FALSE;4 q# |2 F7 b& w" N9 X$ O" C
  51.   bFinishUpdated=FALSE;
    : b+ L7 T" @" q1 X% L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    3 Y# x% X+ ^  V. |! Y; Q
  53.   InitChangeDataBig52GBKS();
    # I+ k0 I+ j; V+ r: T  r
  54.   InitChangeDataGBKS2Big5();
    + S4 u. x" W: s' b; F
  55.         //
    * }6 \; l& a- z4 @  ^( E/ c2 f; p
  56.         bClickRunExe = FALSE;/ `! l% u) C8 b& g7 t7 n$ {8 ?
  57.         //6 q0 ~1 X2 F9 k  y% V# d: T6 o
  58. }
    3 j. Q$ {; V$ a$ ?
  59. & z5 q2 D  g  h( e6 k
  60. CRevAppApp::~CRevAppApp()# x* ?( T! O1 T
  61. {
    . A) z! }- u# @2 v( [
  62.         // TODO: add construction code here,
    $ y3 _* U+ R6 h6 P
  63.         // Place all significant initialization in InitInstance/ e/ p  ^; b2 M/ Q+ c
  64.   EndChangeData();+ e6 h6 U1 j$ O
  65. }
    & U2 M1 ^8 W6 A' f& u
  66. / d$ }: D) `9 D# E' U+ w& m0 t
  67. /////////////////////////////////////////////////////////////////////////////
    - }0 e- y& Z+ v! Y% C* ~
  68. // The one and only CRevAppApp object9 W  n, g5 O3 M9 \5 B$ L# \7 C5 i
  69. * H4 k* ^/ C0 g7 G: d* Z
  70. CRevAppApp theApp;
    . P+ Z0 Q5 z+ y' ~2 i
  71. 6 J. n) B) `1 x8 R# h; q* K8 u5 j
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    2 Y' V1 f; P2 v  i( w3 Y% S/ }" t
  73. {
    1 u" Q& B" v$ V; c/ y2 \9 I
  74.   int iEOF=0;8 }' X. \! D7 P, {% R' G
  75.   char szTempName[MAX_PATH];
    5 I  h7 w! s- C1 E$ Q7 `5 H9 V
  76.   *szFileName=0;; r; @: j4 {' o. C2 I# s
  77.   iEOF=fscanf(fp,"%s",szTempName);
    + F# g6 c3 w. [! h; C" Q
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    * o( s* n. m+ \# L! R- _( d
  79.   {
    . T4 `+ w2 |+ c: C2 j# p0 q
  80.     strcpy(szFileName,&szTempName[1]);3 {2 O; ]0 P& _+ a- G+ a
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)9 w% f: A' s+ J( S( m
  82.     {% b4 I* q+ H3 n/ K
  83.       iEOF=fscanf(fp,"%s",szTempName);  N1 g. `, Q9 B0 m7 r
  84.       strcat(szFileName," ");
    * C" z- e, j7 ~
  85.       strcat(szFileName,szTempName);
    4 A7 F9 Q9 L( \3 @- {/ M
  86.     }
    9 Y0 \' \$ Y4 k  Z! i1 R
  87.     if(strlen(szFileName)>=1)
    ! e- }, G" O3 B1 Y
  88.     {9 Q8 J% I) p  h8 x  o; b
  89.       szFileName[strlen(szFileName)-1]=0;7 k) g7 @* F5 L* Q
  90.     }
    4 V, H8 g  G! j  q; z* K2 S5 ^
  91.   }
    ! @7 _" k8 @2 Y
  92.   return szFileName;. x  P; F" _% H2 P
  93. }
    3 b6 f) E  l0 w0 T9 B$ Y
  94.   g$ q1 R4 o4 H$ J
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    8 ?  f& e, d3 k$ p: ?/ @3 a
  96. {/ h0 }" Q- z  j) _1 T
  97.   FILE *fp;& v1 ~7 w4 Q. \8 w* e
  98.   char *key=NULL;3 {. l$ n3 ~/ G: G  s! Y
  99.   char version[MAX_PATH];
    ! G  k4 t+ z0 L& y" t5 m5 n' {" a* p" `
  100.   LPUPDATEFILE file,olds;" ^6 H6 b- \! A. R( B% f1 T% D
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    - `: ^. B3 h9 l0 t) m: g+ O
  102. # g) p2 l4 b9 x3 T
  103.   UpdateList.clear();
    ! B, r7 Y# a; K  Z3 x# m
  104.   UpdateFile.clear();
    6 \' ^3 G4 ~+ V. r  ]+ w1 h& y
  105.   if(GetFileAttributes(filename)==-1) return false;
    4 M3 M. }- c- ?' Z  j
  106.   if(!(fp=fopen(filename,"r"))) return false;& F4 D7 U/ P! G
  107.   fscanf(fp,"%s",version);# H- d4 x7 ]; [+ s
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }! c7 C" E% B! r' U, F2 {* `" e
  109.   while(fscanf(fp,"%s",version)!=EOF)3 {- O, L2 Z9 G/ a0 Y) a
  110.   {% ]- _* w! c$ ]" q4 }
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : C& V, k- t% I- k
  112.     fscanf(fp,"%s",file->path);- r% @4 D; T8 p9 h3 F6 K
  113.     ReadFileNames(fp,file->file);
    9 H& k5 V; u7 @3 V1 }3 Z1 T
  114.     strcpy(file->full,".");
    ! A; K1 M& i6 Y- A
  115.     strcat(file->full,file->path);2 x6 g# Q& D7 i3 i& f& l; q" N7 d
  116.     strcat(file->full,file->file);" E! E! `* f% |* I5 p9 z6 |
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ' S$ f  h+ h; J- e9 U" E
  118.     {
    / v% P: Q8 g1 k
  119.       file->vers=(float)atof(version);
    1 O9 E, E; Q3 T/ k3 j# ?
  120.       UpdateList.push_back(file->full);: ]4 C9 W( e( z: p4 j0 r) ?0 V" s
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));: i! A% y0 n/ k6 ?0 e
  122.     }
    8 x/ S/ m( N* |' t
  123.     else
    % H' |7 F3 B; I! n9 A
  124.     {' I1 }: G1 m- U6 m( \
  125.       olds=(*p).second;
      \; l0 A8 y6 I
  126.       if(olds->vers<(float)atof(version))
    ; O9 ~! Q5 e+ R( ?" r
  127.       {6 z/ }2 o  W9 w) s7 Z4 s/ r
  128.         olds->vers=(float)atof(version);  y5 P+ |9 G5 J" r1 g/ Z5 `
  129.       }& f& O- m& [# O& e+ i
  130.       free(file);- Z) i* m; O! X  z/ L' N! {. P: `
  131.     }: U, s. S6 m- ?' Z
  132.   }
    3 L  F# a2 {9 K7 D# w, X
  133.   fclose(fp);
    7 j2 r! ~" u& Y
  134.   return true;2 c) n. a7 `- x
  135. }) r( c5 a3 |3 f. `7 Q; q/ C) ~
  136. . ^" `8 t7 _0 u6 m( `6 U' D) u0 l
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    1 S3 X; h8 X( R+ D. ?4 `
  138. {! P; _6 V5 V: S3 e+ p! t
  139.   TCHAR  szFull[MAX_PATH];3 m" C8 b4 l: e
  140.   TCHAR *token,*inter;& Y6 d) g0 N, X2 \- f
  141.   *szPath=0;
    . Y" B# k8 E" Q6 M
  142.   strcpy(szFull,szFullPath);& p! Q0 l! \. K
  143.   token=strtok(szFull,"\\/");- I8 Z9 P4 C0 W* ?9 C* a3 N$ L
  144.   inter=token;
    , B" C3 \- [+ s9 m4 u1 K
  145.   while(token=strtok(NULL,"\\/"))
    & l7 O- q9 J) }( ~8 c3 z
  146.   {) m) p- H, }) F+ z  m6 k: h* k
  147.     strcat(szPath,inter);/ x2 |6 c& S/ ]# j2 N$ @, q( I& f
  148.     strcat(szPath,"\");, t3 ~7 I7 A+ k- I
  149.     inter=token;' V% v2 `  V* E" m4 w/ H; }
  150.   }" K9 j4 L8 p" ^7 R1 u0 u! m  \
  151.   return strlen(szPath);! e2 f- g+ e5 s: W
  152. }- s1 _' v' M) H6 A4 k$ U8 h
  153. 6 Y5 X  u9 H5 i* A1 W
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    5 n4 J$ \8 m! U" `# o8 X' }8 }
  155. {) e- e, g+ s* i; V' V! m; Y
  156.   DWORD attrib=GetFileAttributes(Target);
      G2 F* i( f  @, S( e: j
  157.   if(attrib!=-1)( E3 C6 e) A% ^, K
  158.   {
      ^7 b) v8 v; H: J2 q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ( f& h, l3 p9 k8 P( j
  160.     {0 @& K& y# p& V; p5 {" l) n, O4 B
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);. e4 Y6 F6 }7 N9 n& }9 _
  162.       SetFileAttributes(Target,attrib);
    % p0 u* i7 n/ S! d) ], {! X
  163.     }
    4 j. e4 j+ L5 P5 U6 y8 o) t
  164.   }! ~. y2 N; @" P' {2 T# F
  165.   CopyFile(Source,Target,Erase);
    2 }* L. q0 e3 c
  166. }' U! r8 W: G, Q
  167. $ c3 `  k! t* B; o8 V: L  R' q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    2 g8 S9 C, o3 F( o( v
  169. {
    3 y; D0 n$ r: U. o" b$ N' ^
  170.      FILE *fp;
    * i$ r6 Z/ c& o' t5 T
  171.      char  szBuffer[8192];
    : ~( q& x- u0 |2 X
  172.   va_list  argptr;, V$ ^) l8 a" M
  173. 8 V0 F  d& z, U
  174.         va_start(argptr,message);/ S7 N8 k% h% ]! y
  175.         vsprintf(szBuffer,message,argptr);
    5 G- x) O3 v$ K4 [) g2 M
  176.         va_end(argptr);
      s& k; i: A/ b4 @9 J: X
  177.   fp=fopen(FileName,"a");6 e: f& W: d" T! L
  178.   if(fp)
    / V3 R0 o* C; T9 t! z
  179.   {' e3 d3 i' t) ^* i" e
  180.     fprintf(fp,szBuffer);
    2 |7 }! x9 b" f. L* d5 \  Y
  181.     fclose(fp);) W4 Y. j- w6 K5 n3 N+ W9 e9 Z! D
  182.           _flushall();2 K" M8 x0 `" k/ H8 F( O) U
  183.   }
    . Y4 j& Z; Z& ?' {
  184. }
    1 a: q+ `: Q; w1 O, Z
  185. ' a, V0 I$ q5 K
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ; d: J# q/ ]- d" ]9 G  O) M3 X
  187. {/ u, l- m' w8 {* @. \4 Y8 M$ H/ L
  188.      FILE *fp;) {7 I2 Y/ ?4 _* ~4 w4 k2 E
  189.     DWORD  attrib;. \. p5 d( Y7 \/ i. C) B
  190.   attrib=GetFileAttributes(FileName);6 p  b! z; }. q$ |6 H; Z
  191.   if(attrib!=-1)
    # a7 J* s2 v1 F  s) f. J6 f
  192.   {4 }$ C( w- b2 O7 o* z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);6 ?6 T2 N( N/ L1 ?" D/ [
  194.     if(!SetFileAttributes(FileName,attrib))
    - A* E) L! P8 L% k6 O
  195.     {
    " G7 t1 Q9 L9 C4 t
  196.       return FALSE;
    0 F  H8 _' b6 o, s( ^1 K
  197.     }
    " B4 ], N1 k; v3 T9 V8 O
  198.   }3 O+ ?. R7 r% t
  199.   fp=fopen(FileName,"wb");
      t, B+ |6 d; a" b: ~* s6 M1 |
  200.   if(fp)
    , X  b8 j+ R* ~! h: L/ R
  201.   {
    ( y. T( y. {' j4 J, z4 e) h
  202.     fclose(fp);
    ; T# a' _. X4 U: t
  203.   }
    3 T, v6 J, p& V# }3 H  Y
  204.   return TRUE;" @; b0 S' j  O6 ~9 @
  205. }
    " `8 u3 M" Z# i; S

  206. 3 h. j, I, w$ J8 I$ t. @; r- ]
  207. BOOL CRevAppApp::UpdateLocalVersion(void)& o) m9 g$ G/ a7 ]
  208. {
    - U4 m5 o2 u* W- Y4 a
  209.   char filename[MAX_PATH];  ~& D8 j. i' N+ U' p) y4 W3 k/ i. u
  210.   LPUPDATEFILE file,olds;* q  j* e& |# i. Y4 O; @8 E
  211.   std::map<int,CString>::iterator i;
    ' l8 a4 m; N5 A- ?  w. ?( X( z
  212.   std::map<CString,LPUPDATEFILE>::iterator p;' N' f! C. E. y
  213.   std::list<CString>::iterator l;
    " E+ R2 n4 G/ E( V* A' l

  214. * @) |$ i) e' Y- [
  215.   if(bFirstUpdate)
    ' v/ K  z* C* C7 S
  216.   {$ G7 a. t) m+ w7 S
  217.     dwCurrFile=0;, {7 X! D& y) Q; ]3 H
  218.     bFirstUpdate=FALSE;
    9 r* C' b& f5 d% A7 X& ]
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ! f* i( Q4 z) X, d/ d3 f5 N
  220.     {
    8 R* N/ T1 d" n$ v5 c- D- q
  221.       dwTotalFiles=UpdateLocal.size();/ a5 \2 |0 f7 A, w% P
  222.       dwDownLoaded=0;% u- d# w) z$ R
  223.       bSilentStep=FALSE;
    : m/ L7 v- n# u0 h, h8 r
  224.       bCompressed=TRUE;$ [* v2 \2 B+ v5 Y9 {
  225.       strExtLocal.Empty();: N3 |( l' ?/ b, O
  226.       strFullName=(*i).second;; D% @7 u$ [. t) p9 v6 X9 y
  227.       dwProgramState=AP_CONNECT;3 _' q4 L/ f' v
  228.       return TRUE;
    : \$ R# Y( K$ w2 [: Y; u
  229.     }
    / c' T4 g7 X7 u) Q, U
  230.   }+ o% {) z; q; b2 Y% N. b
  231.   else if(bRestartUpdater==FALSE)0 O; V* p8 \! T+ Y2 v- a
  232.   {
    ' L0 _8 k5 z* X! q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())/ z" F! E4 j+ N; ^' W
  234.     {! _1 o4 M  g, A/ r6 v0 a6 U
  235.       file=(*p).second;
    ) h2 {$ j* N" T7 B: Z1 u9 X8 M
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - v, G) `! t. y" r' K
  237.       {+ V  Y' ^; e8 F3 E  H" v3 ?. q
  238.         olds=(*p).second;
    % B! V& e& D) g) }9 t
  239.         olds->vers=file->vers;
    6 I3 M# ?5 e. ^
  240.       }6 O/ Q4 i6 e% o# g  C
  241.       else
    - R0 j- m1 o; x' M/ d( ]
  242.       {5 c' `% e. E, q0 a
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 p- ^( q) z, H+ L( p$ h$ A$ n
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
      E0 ?' n( m( t) V0 j6 F* S( e# @" |
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ; S; _/ C8 [( k! H9 H
  246.       }
    / ]5 w6 q7 e9 Y6 b
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");6 A# }5 O+ t7 x( L5 K( L& r
  248.       sprintf(filename,"(%s)",file->file);
    $ s% B6 y, y; R0 }0 Z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 Z: W0 O( z$ v
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }0 ~6 Z: s* U) x+ X* k" d  j
  251.     }
    * I0 d4 J# Y' e7 x) J- b3 F! {3 r
  252.     dwCurrFile++;5 S5 R$ e6 ~( U* K( f$ Y; F
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- o; ~5 L2 Q; {! A. z- ]; ^
  254.     {# y0 z4 S& {) J+ K
  255.       bSilentStep=FALSE;
    0 Q! q: n* H$ u" k5 t# y0 z
  256.       bCompressed=TRUE;
    7 j0 R+ i  B9 v
  257.       strExtLocal.Empty();: J) [% k. S+ C: u
  258.       strFullName=(*i).second;
    ; p* V+ `# [- g. q: ~$ N. z0 T5 S
  259.       dwProgramState=AP_CONNECT;$ T' W& x& O% _$ o# g' w8 H
  260.       return TRUE;$ N$ q: M1 ?$ J+ f! b, v
  261.     }
    ; R# j/ v5 r+ ?4 r7 g% d
  262.     if(!bRestartUpdater)8 a! P3 n% E! n7 J8 P5 |8 P1 w$ f% S0 W
  263.     {+ G$ P. R0 Y3 s) L: \5 U4 Y
  264.       int iCurrSize,iFileSize;
    2 `/ D2 Y6 h+ P3 |
  265.       iCurrSize=0;' N& w3 a$ L; Q0 K5 N7 b, G6 X
  266.       iFileSize=UpdateList2.size();
    * M4 ]0 ]( T; g* k  R
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");& s4 a+ H& l1 S6 {0 `$ @
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    3 m, ?6 `5 _1 ]. Q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");) U; I8 k; ^% z+ W; H
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) y& e5 O# D$ ~, U6 C  d- ^
  271.       Fclearf(".\\update.dat");
    ) [! Y( Q4 {0 m* t2 v
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    $ h8 {. C$ U9 V6 B5 J  z3 e
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++), F5 A+ Y) A) r3 h0 I, s9 \% L
  274.       {
    4 s2 T, Y% f1 C" `, E8 d- A, a# S
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    " [5 l: @7 e9 U+ B; Y! m
  276.         {+ `% n6 b# B0 t  a8 n# C: F
  277.           file=(*p).second;3 m% |( u6 O8 p  U( g# w0 H) ]
  278.           sprintf(filename,"(%s)",file->file);
    2 C. ^( c/ _$ u% T* ]$ J
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / Q& [' i" H' T
  280.           iCurrSize++;
    . \3 k# f: L3 L% v
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));, t! ^, j% G5 N2 W6 U
  282.         }
    $ ?5 s# l7 Q* H7 A! Q9 |
  283.       }( q4 d3 O! n8 }- I2 E: v
  284.       unlink(".\\update.txt");0 b  ~$ j1 u& X4 a) g- u! K- q
  285.       unlink(".\\update.tmp");' `8 b' b. I' G* Z
  286.       Fclearf(".\\checkversion.dat");
    3 Q# T( t) G" ?# \" {# V  F1 n5 E
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    9 k8 d% ?- @6 k2 r7 B% J* q
  288.       if(UpdateLocal.size())4 E# p' P! w0 ?3 `! ~9 E4 Y: Z
  289.       {
    $ J) B8 l7 [4 n9 m/ V" ?# h
  290.         UpdateLocal.clear();1 h2 {+ T) u; n# ~: w- ^
  291.       }; e6 x& ?- }4 v( c* i  h# q
  292.       if(UpdateFile3.size())
    ! F1 V3 `( ~( z6 V0 G# Z% Q
  293.       {0 B, @* d" P! u
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * `% i5 J0 L: H: O3 @
  295.         {
    + f1 Z& T8 q6 \, y
  296.           file=(*p).second;  X/ B5 ~' Y$ }% _% |
  297.           free(file);
    / Y- X) }8 e5 h4 A# D) }8 ?0 M
  298.         }" d* k: U1 O# |/ k/ ?
  299.         UpdateFile3.clear();& N. I5 @, O' V! A" i
  300.         UpdateList3.clear();; ?0 G9 l& B* l: }
  301.       }) C7 D& E% c8 }, D2 f
  302.       if(UpdateFile2.size())3 L+ i% K& S8 p
  303.       {
    ' p* k9 t& w4 M- I/ s5 |
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). k/ G3 v  [; n0 f5 S* C, n7 ~
  305.         {
      g& P: i' Q9 ]9 X" k5 z
  306.           file=(*p).second;/ N# T5 A0 S% f4 t# z
  307.           free(file);" K) l3 a# j( ]5 D
  308.         }
    . p7 \4 e# {* Q6 h3 x) @! [
  309.         UpdateFile2.clear();5 `1 O9 W* }9 D+ g9 f
  310.         UpdateList2.clear();2 f: O5 M! @3 n
  311.       }
    4 G; u8 F) v; \& E# e
  312.       if(UpdateFile1.size())3 F. u& Y- ?4 c+ F* U+ g5 ?* z
  313.       {- F2 D! B& _% I6 G8 U+ L
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 S& f, ]3 W( K" a8 Q
  315.         {9 e2 G/ U4 x. V
  316.           file=(*p).second;
    % m/ C3 z# G! _) f
  317.           free(file);/ |3 ^" ^. ], J# S1 A& i& A6 P
  318.         }
    ) i. `+ c; V' |& ?- K3 C
  319.         UpdateFile1.clear();
    , C" Z8 o7 q" t6 o; O) _4 H
  320.         UpdateList1.clear();1 u* Q- X( y( J6 {& e' E( w- ?
  321.       }" k8 i' i  b( T4 H0 b5 z! `
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % v$ a. H9 n( Z) H+ C0 E
  323.     }7 M; i/ |( d- z
  324.   }- M3 R" V6 }' u: `; @0 x6 @' h
  325.   return FALSE;
    ( T9 b6 J. S% o' y
  326. }
    3 M  |/ n: r- k* ~9 \8 ^$ c( S
  327. ! ~0 f- q% {" v8 A7 A" J
  328. void CRevAppApp::ClearAll(void); B) O7 R2 Q! r8 P; @  b; F! k
  329. {
    3 Z# }$ v0 T2 f2 x
  330.   LPUPDATEFILE file;
    : {! l: \0 I& x# F8 d
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    . `. W9 D. K0 l$ v

  332. 3 G/ P4 v0 O8 }
  333.   if(UpdateLocal.size())3 Y3 f7 Y$ ^: a& Y
  334.   {: J" z; I- k; Q& `9 i7 W
  335.     UpdateLocal.clear();0 K5 v8 s$ O" |9 P) ]
  336.   }9 ]' u9 D( |) t. p  u" M
  337.   if(UpdateFile3.size())
    1 U3 R% C8 ^7 `8 F- V
  338.   {
    ! M+ ^5 G1 w- u7 {( O. L& n; s' @
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)4 ], \- k: V: J6 Z5 a
  340.     {& Y/ f# ?: b3 t/ G. y
  341.       file=(*p).second;2 T) c) K) `4 v( G) m+ Z
  342.       free(file);7 J; u+ B  a4 O6 w! U
  343.     }# b" }( ]3 B5 q- r' e  T6 B
  344.     UpdateFile3.clear();
    6 d6 H) i: q* R) |7 t$ C$ r3 s
  345.     UpdateList3.clear();% j6 Z6 Y# V' G# ^+ G8 r
  346.   }
    ! o/ ]2 k2 }& M6 P7 c8 u
  347.   if(UpdateFile2.size())! }! P& G0 E2 P* Z
  348.   {/ E3 J* n8 k- b: d  ]
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ p7 P( s5 m! v+ d3 a& j
  350.     {( J1 D/ u3 n" r
  351.       file=(*p).second;/ `! R. [7 z' x8 Q2 b  t% v
  352.       free(file);* n6 o# {5 E  `; a/ A4 g- H& z
  353.     }
      F( M; \5 Q# @9 J
  354.     UpdateFile2.clear();6 o% q$ _6 B5 w. a
  355.     UpdateList2.clear();# r4 u% F0 c; M4 B% Y6 S3 F
  356.   }! E0 A: g0 s/ l% W" F. k- y
  357.   if(UpdateFile1.size())* i5 g: b% g8 n
  358.   {
    : ]: T% z! l% H
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    5 Q: P! l. V6 m+ b# U
  360.     {; w& F- x7 D! r& `
  361.       file=(*p).second;7 I1 s9 K* d+ d& D6 H5 S
  362.       free(file);2 n4 ?( }2 v$ ?; U3 o) R
  363.     }
    7 A2 u& q0 G; L% w
  364.     UpdateFile1.clear();" ?% L- E8 B1 W1 X, a" |. n
  365.     UpdateList1.clear();
    7 d9 Q# A. `/ y2 i5 h: c
  366.   }
    5 O2 i. V/ R2 f+ K
  367. }  
    ) \2 [* z! A/ i2 R3 B
  368.   " h, C5 _5 `$ L- C" E
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    $ Q% }+ Q! k" U; ~! G
  370. {
    7 {$ ]9 {" L0 X
  371.   int c;
    & ]" F% s+ u/ S' `/ e$ Z
  372.   LPUPDATEFILE file1,file2;
    9 _' W% ]( W5 \8 h; B3 J
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;% `2 o; p* o) r5 ]2 J
  374.   std::list<CString>::iterator l;. [' y' V$ G0 H. F4 v  w0 l* O9 P: E

  375. 9 W0 T* l: J, K* q) S4 v' {/ E
  376.   UpdateLocal.clear();8 x# y8 x% U6 ^0 q6 l- G' n
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ' ^6 ?4 w4 `  z# K' o8 s0 ]' T, v
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);, U4 S0 \$ Q0 E3 A8 T, }/ n9 ?. F
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    / S# o. _# k- ?6 }& \4 Z  f
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ! @# S8 l3 p8 M/ [0 U
  381.   if(UpdateFile3.size()), T8 _2 m) q/ O
  382.   {9 W8 V" A5 j: F- z
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)% y0 v$ f! V! ?. S
  384.     {
    4 p2 Q0 p5 p. K$ l; f
  385.       file2=(LPUPDATEFILE)(*i).second;9 f) E4 y: I5 N1 A. x& ]  T( W
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 m* \2 d1 M1 e- w. O! [* r
  387.       {
    - C5 W) h+ V6 `6 \- t9 H
  388.         file1=(LPUPDATEFILE)(*p).second;
    . k# f# s  ?3 C  O! c
  389.         file1->vers=file2->vers;
    ( e/ @2 v6 [& U+ W) O
  390.       }
    % L4 Y6 z; V7 \) u3 g5 l' z" b
  391.       else: G5 m. Z* D& Q9 O; H1 ?  M  O4 C
  392.       {
    ! J( m( y# k, i* S& V" M
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + k0 `( Q* V" B
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ; \' c2 @9 `/ W$ W
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));# [: P9 z2 K, l0 ^$ K) W
  396.       }
    8 K) @! z. y3 c2 r
  397.     }6 ?  Y, A+ }# l4 N. r
  398.   }9 E8 V/ s4 R2 y% u
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ' u) B1 K; v& R, M3 r2 x
  400.   {
    6 o; J6 |/ S6 C1 y
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    0 n, p2 R; e) Z9 K: _8 }
  402.     {6 {$ C" v+ U8 o# q- _
  403.       file2=(LPUPDATEFILE)(*i).second;6 _) K1 Y" `- _: h
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())% [# Q" h! q3 h+ Q) J
  405.       {
    0 C! A- V2 y$ a8 r( Z
  406.         file1=(LPUPDATEFILE)(*p).second;9 Q3 X+ U' D: R
  407.         if(file1->vers!=file2->vers)
      R7 T' j# r$ G
  408.         {
    ! p& d9 e. ?( v/ q  s# l+ N
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* J8 H1 ]( ]) L; D% D" W
  410.           c++;
    $ x: }5 e( z4 k) K
  411.         }- p5 f" k2 z) U1 `* C; i9 i0 c
  412.       }% R0 i; }, r' X- |, h* J. {$ X
  413.       else0 U$ L. @7 i& m8 K9 m# B" k
  414.       {6 @4 J5 j& y9 O  o4 G8 F
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 Y. k0 @/ t% ]' a( q; Q  W
  416.         c++;& X1 Y9 v1 j& `
  417.       }, p) l5 g5 t& G- E) `- Y
  418.     }9 W& s4 l. p! j2 x8 v% |* C
  419.   }3 t. t: \9 t, M4 t9 Y+ w
  420.   unlink(".\\DownLoad\\update.txt");7 \- d4 Y$ G! j, P6 Q
  421.   if(UpdateLocal.size()) return TRUE;
    ( b& u7 T9 T: K# ^2 H
  422.   else                   return FALSE;
    2 d1 q4 @8 B5 Y( h. B% ]) u
  423. }& Z  c) r8 u2 f! A

  424. ' b+ t+ E6 L1 [9 Q
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/") I& N6 f9 b8 b$ i
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    8 G/ B$ C2 i% c

  427. 0 d7 c( o" a  S
  428. " J8 ]4 r$ A' G& |

  429. 1 l- E  D7 F/ Q2 H
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)6 @  q( q* C0 j5 X$ C$ F
  431. {( I% Z" g3 k, a9 S
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;# `: }  _; e& {9 \
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)/ N. N5 X; z5 {9 Q! x: H
  434.   {
    8 Y9 J0 n  F" E& W. s' M0 ]
  435.     char szLanguage[50];& J6 ?3 l6 ~2 q. Q: ^  ]7 q% S
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 R  f! k3 R3 Q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    6 M5 R& U! k5 h8 U- O& K; k
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 O8 u. Y7 }+ l$ p  |8 F' A
  439.     else                                   m_iLanguage=ENGLISH;" H) S/ k& q" f: g- V
  440.     char szRegister[100];
    6 N& P7 @9 ~* _  X, A
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; I: g/ r& y; m% u
  442.     strRegsName=szRegister;7 G8 B1 I6 m, s0 g) w
  443.     char szPatchURL[100];
    ' @5 N1 {. w$ f; m- }
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * k/ }( u7 ^( }% L. p- N1 b+ P
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , n+ M2 W( ]/ \/ c7 {$ R
  446.   }; k+ V" J  L0 ?
  447.   else6 l! J+ K  Q: q: e, y5 ~& U7 ?* @4 P  `
  448.   {
    8 @+ s) x+ C8 v' i
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);0 V# \2 \2 {( ^6 K
  450.     strRegsName=DEFAULT_REG_URL;! N$ s6 A7 B9 Z2 N* t, t' G
  451.   }
    0 Z9 N6 f, n9 S* d2 ?( ]5 V
  452.   if(GetFileAttributes("hosts.ini")!=-1)1 g- b/ g$ t/ D- W& D( T2 P
  453.   {
    ! P; |2 @& \; j6 }9 K4 E
  454.     char szIP[50];
    * n& E! C8 m. o/ g: v* M& Q) S# i
  455.     char szDIR[300];
    4 Y# x- x* G% m) p$ \# L' ^# O- G
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))4 N! B( ~4 q5 i( R
  457.     {2 I0 d8 m: F3 e6 C0 y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");9 x) h5 I0 g; P
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 y6 G3 q+ Z4 `* p0 e$ x7 v. ?' c  L
  460.       strHostName=szIP;
    ( b% V0 [9 J7 c
  461.       strHostPath.Format("/%s",szDIR);, _/ k" g8 `/ w( E% k
  462.     }
    9 ], z. U) c7 k! J9 F* ?& D
  463.     else
    . ]( A; j" |6 ]& ~6 @* r: s
  464.     {5 p/ `: c8 c0 a4 |6 |7 m
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1). F5 q. X9 H" W8 Y* T! b
  466.       {1 x/ q0 r% S; J. [% o: m1 u
  467.         char szLanguage[50];
    ! O0 l% u+ @! A2 Y" c9 N
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 R# o# {2 ]- Z" S
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ D8 l2 d5 w3 M+ b
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 f- j- F: u" t8 v5 g. M
  471.         else                                   m_iLanguage=ENGLISH;" X0 k2 p  q6 n
  472.         char szRegister[100];" c! o9 E7 l( K0 J) E7 N9 K
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- _& N8 z- k' a$ ?& E
  474.         strRegsName=szRegister;+ y8 v' @* }( W) S8 T2 T) O, Z0 `( U
  475.         char szPatchURL[100];/ h5 ^3 w) Z, D1 |, z
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ O! j* O# P' c- J
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) H0 n+ e2 V, e3 G$ \
  478.       }
    / f) l- j" ]5 c9 `
  479.       else, J; c& q7 S4 z* E$ N6 F
  480.       {/ c/ Y$ B  p% h8 z7 [+ V
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & N: U6 i+ H8 g( Z3 h- ]
  482.         strRegsName=DEFAULT_REG_URL;
    - |5 K% J6 h, j; N
  483.       }
    $ C. I) l: C+ F+ H' o
  484.     }
    5 e9 B  v- v0 ?, |: C! M
  485.   }' ~9 C7 l( P& i* x0 w* m% h* i
  486.   return true;5 o0 a- _& b" v+ n- \2 s
  487. }
    ; g# L8 \6 `- v$ b0 j* h0 {

  488. ( h. Y! D! D) k5 c7 x* z$ r
  489. #include ".\ZLib\unzip.h"/ k4 w7 I$ m! Y9 l$ j# m
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    " D( A3 ~9 z& j) ^- J
  491. /////////////////////////////////////////////////////////////////////////////1 `$ G9 o% ?  X  j
  492. // CRevAppApp initialization
    2 W+ ~& \( W, x& o1 Y' v
  493. ' U- U# N8 n# _. E9 m3 P$ J2 j6 \
  494. BOOL CRevAppApp::InitInstance()
    $ D# C5 x# I; }% r/ t, G% e" Q
  495. {9 b6 M7 P; A4 b0 P! g5 F
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];& p5 ?" K& b& |* @3 U6 O4 s! G' @9 s
  497. " O& u% r/ f' M4 C1 u* k+ p/ ^
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    . @, P4 v5 R$ S1 x* n9 Z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))8 X8 F* i. r1 E/ X& D# [6 x( u# J7 a4 v
  500.   {4 z( l3 U6 h4 c4 Z) Q4 Y9 S! j9 @5 U* n
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");: r" L/ ~9 @) ^1 A
  502.     GetPathFromFullPath(szPathTarget,szPathSource);0 \0 j5 F4 B- U1 h8 J6 \
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    / E: V9 \9 T- f# s- Y+ C+ R
  504.     {
    % e9 g( y" n! r8 P: N- @( M
  505.       strcpy(szPath,szPathTarget);
    7 w7 f% h( N7 V1 N& t4 b; Z
  506.       SetCurrentDirectory(szPath);4 M9 I2 j  _5 a5 B+ U
  507.     }
    3 ^/ F- M, e! D9 G$ K
  508.   }
    . L6 X; H( [- I' z: I
  509. #ifdef _DEBUG& a0 r0 G# o. Q% M. n! t
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 H% Y: v' }; {3 D' J4 L. j
  511. #else
    3 C$ h' U6 w" R* f! b9 A  U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" x# w2 s& A' C
  513. #endif
    , Q3 v! {" {# f' E, n) h
  514.   {% A! `# K% g1 e9 h
  515.     char tempFileName[MAX_PATH];
    ; b( K( L( ]: u  H4 F2 k0 c3 C
  516.     strcpy(tempFileName,szPathSource);6 ~& s) E2 z8 E3 N  z. Y1 c' S
  517.     tempFileName[strlen(szPathSource)-12]=0;
    , N9 y( y* R6 f& W
  518.     strcat(tempFileName,"\\$CSUpdate.exe");! O4 R0 x8 y1 O$ ?: `* R/ c3 v7 v8 E
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);% @* T5 S: Z4 }; U* n) L# d( ?1 d
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);0 H" P, ]5 |6 z: B
  521.     return TRUE;9 P6 D% c( S$ e) {  x" u" ?
  522.   }  O2 i% A8 _; f6 U* s$ m  h! M
  523.   // Nuke 0118: Delete run.exe
    ( e$ g0 K9 O: E! |
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );6 k. B) o& Y7 `" N' X! g
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");3 e$ u$ L3 K! O% `. w$ e
  526.   if(!ReadCfgFile("Config.ini"))
    6 w" r( ~" [2 u% `) U+ j+ f* r/ f
  527.   {. `3 S4 ?: }; A1 e
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);) R- l/ ]' j4 |
  529.     return TRUE;
    5 u0 o/ c5 E6 t- S8 t1 d
  530.   }4 r1 u: F' Y, ^, D/ l9 a
  531.   HANDLE mutex;
    * x# ]+ Y5 v6 E! P8 d# Y
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")); u& Q8 |+ n2 j% G5 d' D
  533.   {
    3 y! K7 L1 y& R: M( K/ L. P9 Y
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    # Y( g" v1 W5 `: A9 Q
  535.     {
    8 E9 a3 v; D# {  ^7 Q- q
  536.       CloseHandle(mutex);
    , \$ S: l3 ^) z/ s4 C- J9 V; v0 `
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. W& G4 v# {! @9 F. v0 [2 J- l/ s
  538.       return TRUE;. q  e1 W+ P$ \; I- U. E
  539.     }
    + q( s5 V' U6 r" Q' c2 c
  540.   }  
    - ?' D: N# @/ g4 t/ I) {
  541.   CloseHandle(mutex);
    5 i: }- C3 L. e) h7 }

  542. 9 |% E: o/ ^& ~9 H) V
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);7 s; T- X- p* W4 w
  544. - `  B5 D5 V( t9 u6 K4 N
  545.         AfxEnableControlContainer();6 X. Q2 C+ Y" [6 V. u' L
  546. ! e7 x+ T4 l+ D5 B7 L7 ?) F
  547.   bCanUpdate=FALSE;: y! Q. D( A; n& ?2 Y4 c: g7 K
  548.   dwStartUpSteps=1;0 |- s9 x, R2 V  X% U
  549.   dwProgramState=AP_NOTHING;
    ' F' \2 H" O3 F* \; P+ H$ y
  550. " _3 \8 f! q2 x6 E8 b- `
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
      ~0 ~4 n1 M2 A0 X7 V
  552. ; x  W: w& r: {+ `. X/ F/ f
  553.         // Standard initialization' e% C" y/ q2 S+ X, g2 B
  554.         // If you are not using these features and wish to reduce the size" H- N. c( z- r
  555.         //  of your final executable, you should remove from the following
    6 L& ]% [; f3 i7 G2 M. z
  556.         //  the specific initialization routines you do not need./ `, m( L2 t5 ^, {; J5 Z
  557. * n0 t& |1 T" }& P+ ~3 L9 T+ l
  558. #ifdef _AFXDLL
    ( `  ^8 [; U) I6 ?* P
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL# n* g2 ~$ l5 P6 i3 y
  560. #else4 i  E/ e" R2 S5 v3 q; ?
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    / W6 M/ ]7 o4 Y2 @' f! [
  562. #endif3 |5 H3 N: k8 z( X4 B7 d

  563. 1 h# \* p" o+ W% V% u9 N& C  L4 g' I  b( f
  564.   dlg=new CRevAppDlg;
    1 Q  n, u  x* @' @7 U$ h
  565.   dlg->Create(IDD_REVAPP_DIALOG);, ]! ^5 J- `+ x# S& Q: q& |" y
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / I& J/ M$ J$ {& }( I
  567.   m_pMainWnd=dlg;; q! }1 L; \+ q' t9 n; K. y% H

  568. 5 b& W( ^/ |) C: X
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    4 s6 v5 h8 Q  f$ g. E

  570. ) i1 n6 N/ d% _- l, m7 h
  571. //  GdiplusStartupInput gdiplusStartupInput;
    % r8 {) _) q6 c( b& G) ^! e
  572. //  ULONG_PTR gdiplusToken;3 ]8 W# q3 ?# W
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);3 w4 Y( H: s5 R. K4 k. }

  574. : v- @: z, I+ ~% Y
  575. //        CRevAppDlg dlg;1 j& K# E' V4 U$ K; n
  576. //        int nResponse = dlg.DoModal();& \( v& V# u: n' d, L% I- g1 r
  577. //        if (nResponse == IDOK)7 X* H- s$ s- k/ O& [9 @
  578. //        {6 P  P1 e0 ~  f' ]8 Q
  579. //                // TODO: Place code here to handle when the dialog is" ]$ o7 {5 w7 h( k
  580. //                //  dismissed with OK
    " S3 p; {5 Z$ m
  581. //        }
    , g- H, ~- q7 N3 z% V
  582. //        else if (nResponse == IDCANCEL)8 A7 N/ e' y2 z' F/ Z6 h. N
  583. //        {
    , J5 f% ?  ]! Q$ D: `: w- N/ ?
  584. //                // TODO: Place code here to handle when the dialog is2 |! j4 [) D! C& H$ S2 C0 B
  585. //                //  dismissed with Cancel" F- ]4 R+ \2 J3 z' m- D* p2 O
  586. //        }
    * Y8 k2 x9 |7 l8 z6 p1 F
  587. 8 P, I* k% R6 `1 Z2 k
  588.         // Since the dialog has been closed, return FALSE so that we exit the/ }* q$ W: p* C4 x
  589.         //  application, rather than start the application's message pump.
    : B6 j1 s9 `& U
  590.         return TRUE;1 S( K1 O; H* ]3 p; d5 v
  591. }* H% _  S4 J! t# }! ]/ L( k5 Q

  592. 0 N$ c3 }/ E8 G' O( R3 C+ k
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ( ^$ M- S8 M) ?
  594. {( w2 Q% d. Y$ S# \
  595.   int i;' S! m- M9 l# k% I6 A, [
  596.   char *szRet;
    5 w- P( c  @7 A; C$ a8 {7 ~

  597. ) u" q  T. y* B. B  O( _
  598.   if(pSource) { itoken=0; sztoken=pSource; }, P& [: j# A6 Q: u) G; i
  599.   if(sztoken)2 p% Z1 G# t0 q! F' y: m1 u. t+ d
  600.   {+ ^; i3 O! y3 `8 v. d
  601.     szRet=&sztoken[itoken];
    8 m5 J& d( q! r% m! Q  U
  602.     while(sztoken[itoken])
    - S: X# H+ D0 y; X, r. O* y5 b- D
  603.     {$ |# V: u- C8 j* m  d8 v
  604.       for(i=0;i<(int)strlen(token);i++)
    " Y7 k; [$ @" r; ^2 a: A1 M
  605.       {0 g5 {* m2 o' {, W
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])" K# X6 o/ M' s+ H
  607.         {
    1 Q+ s4 W5 ^0 v8 Z2 u$ G% e% e
  608.           sztoken[itoken++]=0;$ C9 s7 M. V/ ^6 r2 X! X& G( y; p5 Z: w
  609.           sztoken[itoken++]=0;( e! k" N( O" c6 S  q0 y2 L# }8 a& @) Z
  610.           return szRet;
    ' [8 a" r6 e; Y9 d: C/ a0 ?/ V
  611.         }
    $ Y: {. w/ ]# W+ l' L" k
  612.       }
    ' D) g, `9 m1 s+ `& R7 w/ F
  613.       itoken++;- v) v; s% a4 k* e8 r. ]4 x
  614.     }
    $ C3 ?/ v& m5 q5 W. y
  615.   }
    % C7 s5 y+ t0 V3 N; B' j
  616.   return NULL;" E; G+ k  M8 G* {; h2 p
  617. }
    : F  u0 U3 c. l" a2 J

  618. 3 d& p5 _0 X6 w% u
  619. void ProcessProc(long Total,long Current)
    / L9 S' U8 S" i1 i
  620. {
    7 W. _( p, J5 p* E* G7 j" J, b
  621.         MSG msg;, @" |" q; i+ c- l% {$ H
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);1 a6 v% H/ H4 m
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));+ y  p, q5 _/ |- Q0 i
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ( Q9 E& C6 ?# i. a* w8 P
  625.         {9 |. C7 [. V% D9 F$ h, j2 L+ L+ Q
  626.                 if(!GetMessage(&msg,NULL,0,0))5 W. {; q) Y8 H' E
  627.                 {  F! p  W; i+ q0 [1 g
  628.                         return;( ?& |4 h8 J7 E$ \7 h3 U: Q
  629.                 }% o0 f# K0 U9 p1 h3 _- }& @5 |
  630.                 TranslateMessage(&msg);$ k8 y- y5 Z+ [" G5 o7 o
  631.                 DispatchMessage(&msg);
    0 G5 W" e  T9 G+ M7 I' g
  632.         }       
    ) S+ P, u6 m8 g
  633. }
    + l1 B( q- g- N2 V/ V" g( j8 `3 j/ w

  634. 1 e5 }8 K- V. y: X, h
  635. BOOL bFirstChar=TRUE;
    2 }, O) Q' Q, }6 V: a. v, k
  636. 2 s5 l+ q* t6 E! T0 b
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    8 {3 S8 b' q* H2 o3 f+ m
  638. {
    . h! [' V0 `8 z5 f7 w+ k7 _
  639.         // TODO: Add your specialized code here and/or call the base class/ l9 }5 k# X  s) q! b5 M. A% ^. o* u
  640.   switch(dwProgramState)
    4 h9 h' p, t$ z  D6 a" J$ B9 ^
  641.   {
    - @' i0 ]) |* C, }' R
  642.   case AP_NOTHING:+ O6 {0 V) \4 S3 i0 w
  643.     switch(dwStartUpSteps)
      @( W8 s9 D; C$ Z, J
  644.     {7 j: d  M( C. |4 K9 V! b
  645.     case 1:, T- C) {2 G+ G+ U
  646.       {) }. ]2 e7 ~' {/ ]% q
  647.         int i;3 g/ N+ Y" Z9 A+ |$ R* }
  648.         CDC *pCDC=dlg->GetDC();2 i0 m1 w' C! H! h3 q1 S
  649.         HDC hdcwnd=pCDC->m_hDC;8 c( o9 x( s; v- H& h& e7 ]
  650. //        Graphics graphics(hdcwnd);
    5 k% Y+ n8 u4 I
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ; x2 G3 p! e2 O4 q, }% t; p
  652. //        INT iWidth=bitmap.GetWidth();# Y' Z( Y4 g9 S9 _4 M' X, E& l- p
  653. //        INT iHeight=bitmap.GetHeight();
    6 b8 r5 Q. N- I. z, K
  654. //        Color color,colorTemp;' r1 \2 Y- H0 G* @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)  \$ t1 y, M) m$ j
  656. //        {+ T! @2 I' `6 D
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)% F. Z2 N) k3 R7 B; |  |
  658. //          {
    0 c2 g: x8 t+ _+ w# P
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    4 v" X2 C7 Y" A( \& X: {& e9 m
  660. //            colorTemp.SetValue(color.MakeARGB(+ |! p0 c  _+ {9 T) P, m
  661. //              (BYTE)(255*iColumn/iWidth),
    1 Q4 W: z/ L3 m
  662. //              color.GetRed(),& u9 L! i: W. R/ c7 O
  663. //              color.GetGreen(),/ ^# I4 R- F$ I6 i, ?- k& y3 C
  664. //              color.GetBlue()));2 m% `& r' ~! J3 a
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    % q$ B8 u3 z- J$ R
  666. //          }
    - Z1 x9 ~2 P( Y/ P9 J. N
  667. //        }! }7 B( _- w) W' y3 Z( e
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    4 l$ \0 N, `# r& i$ h8 ?. c2 W3 E
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: P/ k# K8 h* t! M# t5 `
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");# s$ z5 x: h* {5 _6 s0 ]1 \) _
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");) e, D+ J1 v' Y  h2 M
  672.         for(i=0;i<240;i+=8)
    5 I( K- v( }6 L4 X' I! z
  673.         {+ ]: b% t- `% w2 p2 u+ N
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 w( \4 z& K6 C3 \3 u1 Y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& e6 I; D* h9 |
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);2 s* V0 }' X: r! E4 D
  677.           Sleep(33);
      w! t1 U2 w3 M1 g  H6 ^
  678.         }) M3 D. N- e8 e- d! M$ }
  679.         Sleep(1000);
    ) h+ O" b; D# x/ a- ?7 T; M
  680.         for(i=240;i>0;i-=8)
      v( e' Z5 N$ P' E1 n2 i7 b
  681.         {0 i5 d/ p" |0 _0 o
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: u* m) k! T% s; K) p
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . U* |# ?3 y+ x% o5 Q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* ~9 x8 l9 G0 ]. \& X/ a' M# v4 z
  685.           Sleep(33);& [% U& u7 j! M  l+ }9 e
  686.         }
    ) S: {9 o% g* n/ p
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    - l8 ?/ N& ]4 U
  688.         dlg->ReleaseDC(pCDC);) c8 t1 s5 U2 L* d( `2 x; }
  689.         DeleteDC(hdctar);  L4 W  S0 K5 ~/ O' i8 Q$ x
  690.         DeleteDC(hdcsrc);% c* ~4 F8 H2 f2 g3 c
  691.         DeleteDC(hdcorg);
    ' H' K$ r! i" b7 w$ J8 d5 U" s
  692.       }
    , @, k, Q7 v) Y0 n& R
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    6 y7 x1 D' g5 l( u% E, R$ O# ~
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");( X; ?+ C1 }+ S
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");2 @/ u/ }9 l2 E, I
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");  n# W/ B5 V5 |0 ~+ p* I
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 j8 K3 Q* \& V, Q
  698.       if(!Dn.Connected())$ {' A6 [0 [/ ^
  699.       {
    ' K# H8 ~- }; x
  700.         dwTotalFiles=1;
    2 |! q/ y) {- I; w3 S- c) H4 P7 [
  701.         dwDownLoaded=0;& k: e5 U$ _! M" h1 `3 Q
  702.         bSilentStep=TRUE;
    # h- q% ^2 H+ g+ v% ?
  703.         bCompressed=FALSE;5 X9 r5 }4 X) g, r1 q. v9 D
  704.         strExtLocal.Empty();. Y! v2 m  V3 r- `8 g; @
  705.         strFullName="readme.txt";% ]/ k2 E4 U+ v* G
  706.         dwProgramState=AP_CONNECT;9 ]0 T2 f8 D/ \6 ^  c
  707.       }! M; G( r3 f5 ]( k( N
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    5 E, w5 c" U1 g  J% s8 G/ |
  709.       dwStartUpSteps=2;
    ; k3 ^1 m- t9 F! r
  710.       break;4 |* o+ O+ V$ T+ p1 N
  711.     case 2:, }  i4 f% a, |4 O0 k, [  _# l& [
  712.       {/ g* U$ o- ^  _, B/ z5 ?) ~
  713.         int iEOF;
    % T: ]! R% c' [$ ]# R. ?+ Z9 v
  714.         FILE *fp;; H& K3 q" e0 g$ f, ^) H( t, L
  715.         char szString[512];( s* A( D4 `) ?& G) V
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    8 O+ r3 u4 m2 e
  717.         if(fp)
    : E3 R2 c* b5 m3 t
  718.         {# P) w  C/ D- f5 ^4 j3 @$ {
  719.           do  x/ v; u6 C; Q, d
  720.           {  v( T. f5 ]  i% M0 l
  721.             iEOF=fscanf(fp,"%s",szString);7 X( d& R" v* W: k6 i) f
  722.             if(strlen(szString))
    0 e  e2 T$ T  L  t5 X: C, Y
  723.             {
    9 H6 `/ z( u5 B  Q( D* ^) Q
  724.               if(bFirstChar)
    $ Y* w- h/ \- d
  725.               {/ D6 d0 y  Y* K7 q; _! F
  726.                 bFirstChar=FALSE;2 @4 T$ u; w7 t) T
  727.                 bConnectIsBig5=FALSE;
    ) u# u4 \& [) u- u1 k
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    3 @0 S* W3 G, q
  729.               }
    3 \' I. a1 U0 D" N6 T" C
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    / L/ Y- i& S2 Q0 C5 n9 p1 [
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));4 Y: d( I" ]6 r, J& C, x; i3 M; B# H
  732.               dlg->m_ListText.AddString(szString);
    2 h& H' I3 V3 r3 E9 C
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; C3 ]' p7 k. l2 h" A. {3 V
  734.               *szString=0;
    8 H. J! h; J9 l' U
  735.             }
    7 {9 O0 ?2 z) O3 L4 k. `- I+ T
  736.           } while(iEOF!=EOF);& ?, x& s& X' k  g4 M4 R7 s- E* b; a. a
  737.           fclose(fp);
    # h) E% D  H- C# G+ i% {
  738.           unlink(".\\DownLoad\\readme.txt");
    8 j, O. c4 S! q7 y; s9 I# e
  739.           dwStartUpSteps=3;. k  f7 T; V- u& `0 x
  740.         }7 U1 C( p- l7 @: ^% i$ `" B6 \+ ?
  741.       }
    7 v0 n1 K. B- }9 L9 w) L
  742.       break;
    & I/ q/ s: Y* r7 Q+ Q+ M
  743.     case 3:
    % n: z( B4 O9 N- Y% u5 z* A
  744.       if(!Dn.Connected())
    ; O7 a% O' U9 m- C* W. X' @6 z
  745.       {
    * \+ c0 A! v4 N' d- P2 Z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    * r' O/ f+ r6 P8 \1 u
  747.         dwTotalFiles=1;
    : g4 r' H' b! ^' C& C3 J
  748.         dwDownLoaded=0;) y  ^" p8 I& ^) O0 ?! J) ?& X7 A
  749.         bSilentStep=TRUE;
    9 \5 Q$ O9 e* \- }: v' G6 i" l
  750.         bCompressed=FALSE;
    * q8 B; U4 P' U0 l: W1 R
  751.         strExtLocal.Empty();
    2 Q. A, J% S3 D, Q* u9 z( O" ]+ B
  752.         strFullName="checkversion.txt";1 W& f  O* X  Z" V! [
  753.         dwProgramState=AP_CONNECT;. i" P  k' K. r
  754.       }  [* a) o3 U1 d# Q
  755.       dwStartUpSteps=4;  L. `  @' c3 q' C' M* q
  756.       break;
    2 c2 [. c! {2 y& [- J# d
  757.     case 4:
    " U0 m& V1 ~, t! D0 }
  758.       {
    1 x, z( I  o. L- s
  759.         FILE *fp;; m! @: E0 ^# Z& H3 D( ?5 T
  760.         char szString1[128];
    $ X; v$ o+ E! c# K
  761.         char szString2[128];
    # \4 g7 M. O2 F3 `. X# y# x
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    . Y# S: K( \) O" Q# k) Y
  763.         if(fp)4 w. b. q: L2 m
  764.         {
    2 f5 p3 p' M/ N: u9 U, h: @
  765.           fscanf(fp,"%s",szString1);& a# g& M0 Y2 A$ z
  766.           fclose(fp);! J: v* [: o! b4 p
  767.           fCheckVersion=atof(szString1);& I- a3 v; j9 Q/ S2 p
  768.           fp=fopen(".\\checkversion.dat","r");
    6 F( r- g( V7 p+ `- I0 i0 A
  769.           if(fp)
    7 G' m% }* c9 y  A! P0 Q0 D5 {: C0 p
  770.           {
    * S  p, Q* r# t# e8 d3 v* c2 ?! D
  771.             fscanf(fp,"%s",szString2);3 Y: U( h0 l; Q/ {, E
  772.             fclose(fp);! \' T; ]; J* E. J1 u
  773.             if(atof(szString1)!=atof(szString2))% C& r1 w% c; L" K3 Z; n8 g
  774.             {; H2 K8 w/ g( n: @4 Y$ n$ E
  775.               if(!Dn.Connected())3 {7 T/ K) n+ j
  776.               {* g6 D* ]- f- e4 h; O/ v; p
  777.                 bFirstUpdate=TRUE;
    - m+ g4 Q/ o$ N
  778.                 dwTotalFiles=1;
    2 J/ S! G, y% y7 `# y* z
  779.                 dwDownLoaded=0;" x4 W' }- M& e
  780.                 bSilentStep=FALSE;
    + F7 l- P2 ^% \& s$ M* a* r# r
  781.                 bCompressed=TRUE;7 _2 f8 @  n4 {; z, P0 r
  782.                 strExtLocal=".\\DownLoad\";$ d3 `! A2 t8 A
  783.                 strFullName="update.txt";4 K& z' g9 p# X: W
  784.                 dwProgramState=AP_CONNECT;2 a3 U5 \" C! H  q( E* z! p
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 J) c% b8 b/ }1 N
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    % R. z. u1 P6 i1 `
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");5 O2 ]' \1 j; D5 v" X& }4 a9 f- P$ _  o

  788. 6 R% j7 m4 \$ F6 N$ \# o: S5 ~/ h) A
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ O3 ~3 D/ _+ ?3 R% L+ z7 ]% R
  790.                 unlink(".\\DownLoad\\checkversion.txt");0 v; J$ x7 L* ]' ?8 i  L
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    # q2 F5 o7 i) A, R0 [& g5 [! Z
  792.                 {( w' @( k: g( e% e7 h6 {& B1 W5 E7 ]2 m
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    % f" w8 y2 @5 I# [* k
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");9 t7 R* }# o% e4 v' B8 e
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");2 F: a( L2 [4 O6 Q# j. z( y) |
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 @1 w* t$ b2 r
  797. - H/ t) v# n: K2 M) E* c
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! |2 K6 }, \) z3 C$ t8 l  s% G0 @3 b
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 W' A5 o8 T+ ~5 I! O
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ! _2 g: ?3 }' v- u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + J: U5 R* r2 k# `+ H
  802.                 }* |3 }7 G: ?, F4 a/ r  V
  803.                 dwStartUpSteps=5;' @+ d6 T4 n8 M0 x$ k  }
  804.               }
    * M$ ^  U1 q  H$ O- r, r" ]0 y
  805.             }6 t" U7 P) k$ {. I) ?
  806.             else
    5 v) F+ M* b' `6 x4 Y
  807.             {! ^8 O8 d% U% l* j) D
  808.               unlink(".\\DownLoad\\checkversion.txt");
    4 O, ~  j( e! r! u4 Y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");( ?, S; f9 T* Q1 F% C4 ?" d
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    0 ]; P+ V3 \( V2 J7 o) h" l+ i
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 Z' X% h) D$ M' i
  812. ) G; \! ^1 Y$ M9 n' J
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' E3 [# x4 V% ]
  814.               dwStartUpSteps=99;; _! C4 l9 _( d" Y
  815.               bFinishUpdated=TRUE;
    $ ^# v6 O' f4 K% u' A9 x9 X
  816.               bCanUpdate=TRUE;  p# `! |, N, w
  817.             }
    6 f: F+ i1 X9 ^) J/ U  f. v
  818.           }5 n) e2 W/ c: D3 t/ q% T
  819.           else3 n' s  L2 X& e. E( ]$ ]
  820.           {# v2 `1 `  J) M6 }
  821.             if(!Dn.Connected())
    1 F6 M3 d  f  u
  822.             {
    / n8 b9 X& ]" _9 a# o4 E
  823.               bFirstUpdate=TRUE;
    & |, v1 h, w. z4 Q& f
  824.               dwTotalFiles=1;
    $ c( @, q+ E+ y) ?& Z7 j% i% z
  825.               dwDownLoaded=0;; [. T5 |3 G- M' x5 _' O
  826.               bSilentStep=FALSE;1 G5 S. i$ U% d1 G/ P
  827.               bCompressed=TRUE;
    1 a# J$ l! |0 I5 C" t, g
  828.               strExtLocal=".\\DownLoad\";
    ) J0 _# X. [* H% ~! U. s
  829.               strFullName="update.txt";' I# w! Z/ m: A) D5 j5 s' R( }# L
  830.               dwProgramState=AP_CONNECT;
    5 \$ P1 R# C$ ^4 D
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 O. h3 i% J% q
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 n# A$ ^# W2 S& i, [& ]
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");% |" X! q9 |  ]0 H
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # r% y; G. L1 f+ _$ J$ W: [
  835.               unlink(".\\DownLoad\\checkversion.txt");
      k! k1 B& Z, f& }- {8 J
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)6 a; \; D( F  p; |  p* [& n- }; H1 z% E
  837.               {) `& ^1 m' C3 q( `1 d9 {. a
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");" w6 O3 E; a0 b# t6 a) B
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ; u# h" a8 w  x: Q3 ~
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    3 W( s3 R6 T  U" b8 q$ Q% o, @% H
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- _' R+ x. k: c5 ?! w
  842.                
    ; `- l( k5 o7 K) X' M# u) s' L  S
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 N: W5 Z) s9 P) L& A: z7 u' j
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 Q9 p1 M7 }7 w: ]7 c5 s3 \, Y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    . v( U8 K& ~! X& N' i9 J
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 d0 m! k+ K+ a; `6 A- N7 a
  847.               }
    + n% `9 J- R' k0 p
  848.               dwStartUpSteps=5;. m5 R& J/ _7 n) I' V0 z8 |6 C0 a
  849.             }
    ) L! S( e9 e4 s3 p7 X. N; y6 E2 A
  850.           }# c. D0 l# U8 K0 n
  851.         }
      X* S; ]! e/ o8 U7 Z* T' o' B/ z
  852.         else
    ) N* C' N5 d$ C% K) T2 {
  853.         {
    4 j& ~2 m1 ^, a/ a
  854.           dwStartUpSteps=3;7 m  w8 s4 U5 ~) Z, R! E( [. Q
  855.         }
    * O; t5 D* f- P, t0 }. j7 k
  856.       }. G4 V2 K4 I* B: W: d
  857.       break;
    1 n( p' F  P/ }' r8 p+ s: k. |8 G
  858.     case 5:
    ' o! ^6 r/ j' Z4 q/ `
  859.       {
    , I0 X5 n4 o- }! b3 a
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)2 w( S, |7 Q8 T5 V) o8 r, k
  861.         {
    " o2 V2 S; f( l; u1 u& c; o- p  p
  862.           int opt_overwrite=1;
    ' G: M0 t) @6 E5 n
  863.           int opt_do_extract_withoutpath=0;
    0 f: h! S' X& G# J' X- f
  864.           unzFile uf=NULL;
      B7 `- T8 b6 m$ g7 ~* I

  865. - J1 `! U% D/ w0 h) }
  866.           uf=unzOpen("Wsa.zip");
    , E  \* j7 U7 [( b- }
  867.           if(uf)7 `; x) V* G) v) C5 Y
  868.           {
    0 _* a* Y  J0 S! t1 Y( E
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    5 T! s) L* o" A
  870.             unzClose(uf);! l1 }: W; o  a2 V5 d
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");7 i. p/ H$ ?$ V0 p2 n. Y( d7 g; P
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ! _; Z0 M0 n/ }( D2 j
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");; H: p% \/ `5 X2 _
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, {! G" w" \8 n& Y
  875.           }- ^- o$ h4 _. a3 J6 o
  876.           DeleteFile("Wsa.zip" );
      r6 {8 U( A4 w/ e. I% B0 t
  877.         }
    , D2 b* v) |- V+ j0 I2 s* p
  878. , }# d8 u: W6 c: A: I2 E7 E. [; {
  879.         if(CheckLocalVersion())+ k  j6 m9 [  V
  880.         {% n( s# Y8 C* a* t3 I! N; E5 A
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    " }' F  B) M: C* o6 w
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");; a5 g4 M& e  w$ x5 S% ]# H" f
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    5 c. x& z; X1 s7 W% Y3 ^% V
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      c! D" P) U, @7 I, o
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);4 R4 z$ Z% K" o8 T* t1 ?
  886.           dwStartUpSteps=99;
      r" X4 j/ J; {- c% A
  887.         }
    ! P) j6 R/ c) h; Q: V
  888.         else
    & e. t7 u9 [) C: s6 p( ]! U8 `
  889.         {
    7 c/ S' T( J1 c6 ~
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 W8 l% S' N# z0 e3 u
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" H4 o* q# E& p( G( e( E
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ! q6 _; }: q; t+ ?! j

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

/ [8 M3 ?& G" a0 {
* \  X3 O6 E: p) 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-11-27 00:57

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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