CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
: w3 H3 p$ K+ ]  |0 m
  1. / RevApp.cpp : Defines the class behaviors for the application.) @" i9 m0 G. v# V
  2. //
    % }9 N0 B1 e; c  k, ?0 C" E

  3. . x0 z  h$ U! \
  4. #include "stdafx.h"9 E0 \  z) q% c. ?
  5. - D3 w/ l  m0 A6 z* u7 w; e; R# C
  6. //#define UNICODE
    # g" z& V  {1 k, t
  7. //#include <gdiplus.h>9 Q. b$ @* x" X* ~; }) {6 o
  8. //using namespace Gdiplus;
    ! q# x8 \3 A" x2 {( X; {6 q1 r
  9. " Y: I" h$ r! u3 }
  10. #include "RevApp.h"& t7 d. b" x0 ~/ n; ]
  11. #include "RevAppDlg.h"
    5 {1 V9 q( n% W' X2 @. Z

  12. % ~7 R! L+ X8 f
  13. #pragma warning(disable:4786)
    ! b, u- R% q# E! V# l% q8 H# b
  14. #include <map>" K! k) y  G' H! l5 k1 ^
  15. #include <list>
    " I0 M6 x7 ?1 w' f( I
  16. #include <direct.h>- p, f; t% ~/ R! }0 |3 _/ m; o

  17. ) R) T1 p; @7 \0 ^% l; [
  18. #ifdef _DEBUG
    1 ?2 X. T+ v( i( C
  19. #define new DEBUG_NEW5 a6 @  N: A6 y6 i
  20. #undef THIS_FILE
      [* X) c" F( R+ j/ J5 Y' I
  21. static char THIS_FILE[] = __FILE__;
    4 {0 a6 Z& L# Y- a# i: _
  22. #endif
    * O% ]1 m, U& f$ L
  23. #include "SkinResDef.h"2 g3 s4 f# D2 J* f6 Q% Q! l. f$ k, ]
  24. #include "ChangeBG.h"
    * |) `2 z* I4 v5 W
  25. #include "AFXINET.H"' _) M6 h* }( U) \0 d: j6 _3 v

  26. $ D; k5 F7 l; f+ n
  27. #define TRADITIONAL_CHINESE 0
    ( s+ C; {$ v/ i0 ~8 ?( Q9 N/ w# c
  28. #define SIMPLIFY_CHINESE 1
    , }/ v( M+ p) p2 P' Y, h
  29. #define ENGLISH 2) O. n  B! r$ V- B, h+ v5 p
  30. int m_iLanguage = ENGLISH;, r" w1 t/ a/ ?# U
  31. /////////////////////////////////////////////////////////////////////////////
    ! l  L. I# b2 }( w4 }; x. ]
  32. // CRevAppApp
    & F5 J" Q! t2 m6 n" e' L5 g- e9 p
  33. : e% C7 c8 S, P6 ~0 M. Y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ' Y+ k" j0 G! J& z/ L6 m0 v8 O- q! z
  35.         //{{AFX_MSG_MAP(CRevAppApp)) o0 B& S4 }1 T* h% W
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    0 c9 q. {% P7 e" s- A2 s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!$ D" ~* `5 N) ~6 s) D1 D% J
  38.         //}}AFX_MSG! }( I$ [6 V$ L4 U! B2 A
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ! X8 i# s2 w$ n1 O- @1 `5 d6 [3 x) z
  40. END_MESSAGE_MAP()
    % Q7 I& Q5 }3 M/ c

  41. " K! \; q$ [+ ?  X" b( X: x
  42. /////////////////////////////////////////////////////////////////////////////
    $ D. m& s# v, Y0 P6 N/ {  ~
  43. // CRevAppApp construction- Z/ }5 u: ?+ ~  d& S) L
  44.   m( d% m- J% B$ @
  45. CRevAppApp::CRevAppApp()
    3 o! K9 k( U( b7 c
  46. {
    " n3 K# F2 v; Y0 Z
  47.         // TODO: add construction code here,7 {; J- [% l9 k+ X% O
  48.         // Place all significant initialization in InitInstance# v' O+ y& U5 m9 U) k- u/ M
  49.   bDisplayIsBig5=FALSE;- p, H! `: I/ B8 y# W) E# D# G
  50.   bRestartUpdater=FALSE;/ v1 c+ _* a* ?! x# H! ^4 l4 Q$ S/ I
  51.   bFinishUpdated=FALSE;
    3 c1 s0 M8 G6 L- w6 r* S9 I$ F
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;7 |  v  X, P, c. w" Z
  53.   InitChangeDataBig52GBKS();
    4 V7 N+ l: h% Y, r7 h6 J
  54.   InitChangeDataGBKS2Big5();
    - Q' k7 B) T( {5 G9 \
  55.         //: [2 C% ^+ U8 C2 T% p
  56.         bClickRunExe = FALSE;
    - X) R5 o5 N6 p/ Z
  57.         //
    , s5 m8 J! c' f* X
  58. }
    % n1 }8 G! f+ W1 G  m& {0 s
  59. ! o" P  j! R" _8 o4 A% d( E' W
  60. CRevAppApp::~CRevAppApp()
    , X9 D+ b: D' A  ?3 {
  61. {$ a  I$ F: d5 V2 O
  62.         // TODO: add construction code here,8 J1 U' e* D. ]$ B- r( H1 ?
  63.         // Place all significant initialization in InitInstance1 e: a7 ?% I. w0 N# _! ]
  64.   EndChangeData();
    ; _0 ~; U  y( A! E4 Q7 ~! E6 J
  65. }
    9 c, u# v2 c. g
  66. ; T( h% \+ W5 ]# a. l/ M
  67. /////////////////////////////////////////////////////////////////////////////
    2 K# E+ r! a9 u! F. V+ A
  68. // The one and only CRevAppApp object
    ' r& A" \( G; h5 Q7 B$ S
  69. - z6 r# ]( E  K- K7 c$ u! g% ]
  70. CRevAppApp theApp;  f3 i6 b3 s' \) y" D# \

  71. : x" u/ s$ N  w: U5 Y1 ~
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)" z8 j, T2 U/ e2 a! I/ [
  73. {! f* {  j, ?; k' @& p" @  z! C: G
  74.   int iEOF=0;; S0 g: K# @; S
  75.   char szTempName[MAX_PATH];
    * I* n& c$ O6 X9 w. I# C- ^7 r
  76.   *szFileName=0;
    2 ?2 A! B+ R, |& W
  77.   iEOF=fscanf(fp,"%s",szTempName);+ t& s, B7 @" E8 j0 n
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')5 c# n- U/ O4 f* A6 J  t
  79.   {
    * }% ?3 ]0 R* V' n) p: U8 S# P' N: U
  80.     strcpy(szFileName,&szTempName[1]);* J6 o9 B+ D- Z1 B) N& v1 R
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    # G3 r+ H( J* r. }
  82.     {
    2 D7 |% ^7 [% P# Y6 c& S+ p* s
  83.       iEOF=fscanf(fp,"%s",szTempName);
    & ~- l% Y( N. {0 V* u5 @
  84.       strcat(szFileName," ");& J  }& K, M9 i& |+ N& E! T7 Z
  85.       strcat(szFileName,szTempName);
    / ?$ P0 u/ X1 D$ j
  86.     }' i  U/ G3 ]- C) j: W* e, ?
  87.     if(strlen(szFileName)>=1)2 R$ w& G: C" m( ?
  88.     {5 j$ W/ G- k" S6 C8 v- s
  89.       szFileName[strlen(szFileName)-1]=0;+ b8 X% Q7 q. d# R0 }
  90.     }
    ) |. b% m8 B( z7 i
  91.   }8 i4 G0 a) f" ~& T5 I; {
  92.   return szFileName;
      J' l% Y/ k( R# @# e6 _
  93. }
    : }& L; N. \( s( m" V8 t* l
  94. 9 v4 Z8 k# X9 Y6 K1 c
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    " O' ~/ e' e+ x5 w
  96. {
    ' G) [% K2 y# L% X- V
  97.   FILE *fp;
      V& G. c% c" M( a! \
  98.   char *key=NULL;  p4 _9 p( J& o/ u
  99.   char version[MAX_PATH];
    8 c; L' x0 d8 h% l0 p/ M2 t
  100.   LPUPDATEFILE file,olds;
    % L& y0 a! B# `* f
  101.   std::map<CString,LPUPDATEFILE>::iterator p;9 f+ T; O, Q- G6 c, e/ C$ n
  102. : [! L9 U9 g: u
  103.   UpdateList.clear();
    ; \2 e% h$ p1 C1 q- G  _
  104.   UpdateFile.clear();
    : b3 ~" C" X. b; {
  105.   if(GetFileAttributes(filename)==-1) return false;" ]+ ?0 J1 b, g! Q' Q) `' Q
  106.   if(!(fp=fopen(filename,"r"))) return false;
    # t+ ^9 d' i3 |# _8 G
  107.   fscanf(fp,"%s",version);
    . x( s# b) B& S
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    5 m' a# d: c. V# P/ d
  109.   while(fscanf(fp,"%s",version)!=EOF)3 V5 m8 P* N) i% k7 ], h
  110.   {
    : G* Q4 V6 }$ r  _9 k1 {: U; x
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - C; E+ H* F" T9 w! N% u3 D  d
  112.     fscanf(fp,"%s",file->path);
    0 g$ C( J* c* o% G( q$ C
  113.     ReadFileNames(fp,file->file);5 {$ R* R& r% x1 M) ]+ u8 e8 k1 b
  114.     strcpy(file->full,".");
      @- n, ?  V$ ]6 m
  115.     strcat(file->full,file->path);" a) A2 v3 ^6 B; W
  116.     strcat(file->full,file->file);
    ' s9 K# y- c4 Z3 A, ]
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())" ^0 |8 R6 b; a
  118.     {
    / ~! [0 i9 P8 C8 X8 O
  119.       file->vers=(float)atof(version);) {7 }% n) L- r6 M/ A0 t7 b
  120.       UpdateList.push_back(file->full);- y: u, ^( o" j- {
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));& y' f& a" P& M$ X- k/ _
  122.     }
    + I( N* i, H! t
  123.     else. }5 @6 w9 o0 F" Q- m- C( Y
  124.     {
    % K# K0 U, w4 b! z* l
  125.       olds=(*p).second;
    - R1 @0 u4 g7 {) P
  126.       if(olds->vers<(float)atof(version))% j$ w7 w  ]; C6 ]9 W
  127.       {
    + r) V+ d9 }! K  j
  128.         olds->vers=(float)atof(version);
    8 j1 X$ P; ]% [0 @  T' b5 ~5 f
  129.       }
    , M! B% m/ W7 q! i
  130.       free(file);
    5 R. t7 F8 ^' r, J* e( t; h0 \
  131.     }
    7 E! R8 `; c/ \# a( Z+ u( X: k
  132.   }
    , \. P1 o' C) C  {
  133.   fclose(fp);
    9 E# D" J, t' ~2 w5 _5 x* t
  134.   return true;  [$ `, o1 x$ k( Q6 @
  135. }
    $ J6 u8 g) c3 k7 k
  136. " A" r  {1 v* R7 U4 C6 J0 `
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ' j4 Y" a/ O3 L* X
  138. {
    9 j+ N# ^$ n2 M! [! U! a
  139.   TCHAR  szFull[MAX_PATH];
    : q2 t3 U; w0 d1 ]
  140.   TCHAR *token,*inter;1 k! b" ]8 T; _- G
  141.   *szPath=0;
    * h4 v4 v* ?8 X6 b5 V4 e
  142.   strcpy(szFull,szFullPath);
    ( Q8 A* h9 H! \6 a1 Q  r
  143.   token=strtok(szFull,"\\/");1 d, R5 O6 |- c( v% |/ \/ j) F" A* S
  144.   inter=token;4 w( g& W; t  w3 E' r1 ~, J4 h
  145.   while(token=strtok(NULL,"\\/"))8 z+ z1 n9 V1 h, M& {
  146.   {; O$ [% x! ]# A: C* q
  147.     strcat(szPath,inter);, ^/ K; ?* M( R* x
  148.     strcat(szPath,"\");# ^- _/ T: R/ K' R6 e, Z
  149.     inter=token;7 N5 W+ |1 {* \  F
  150.   }
    1 ]% F" y7 E  m/ k" d5 \
  151.   return strlen(szPath);$ z" {/ n3 @9 X/ A" a
  152. }3 `' B( }2 u/ W1 X8 L

  153. $ ^$ W8 _! E; h' o+ d+ |
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)6 r* C3 Y+ Q' v( }2 Y: o: v& z+ M  [
  155. {1 B% T* J+ l, Q0 s
  156.   DWORD attrib=GetFileAttributes(Target);
    - I! a; U' r4 R4 c* W+ K
  157.   if(attrib!=-1)" }; {5 ~; K4 y: _( z) w; S! W
  158.   {! L& c* T+ U! K; D$ a/ D
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    & m7 X8 v8 f4 _; O7 E/ ]
  160.     {
    % @/ m. x4 v& |) T+ t4 i
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    0 }5 L* r$ ^0 n7 b+ O9 U% c
  162.       SetFileAttributes(Target,attrib);$ [9 |/ g7 p' J& _. t
  163.     }
    / ~& W% _" X8 ^8 J
  164.   }% O6 O2 R# X, R2 _' r
  165.   CopyFile(Source,Target,Erase);
    2 R6 p7 ]6 V2 J$ H) n% R6 S1 G
  166. }
    . J5 I( x4 h, f" f2 |% H: S
  167. 1 ~/ c' m+ \/ K& v, [3 H
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
      X( h( z5 {3 c- v
  169. {
    $ _% c5 E  p, L- |) K! y' b
  170.      FILE *fp;
    9 ^) p. O2 O) }0 D
  171.      char  szBuffer[8192];
    7 O/ U$ v1 |3 B8 T' O: d+ G6 u# P+ F
  172.   va_list  argptr;2 r3 i; M1 _# N) o: p  w* \8 @& T1 R
  173. 7 O$ s  ?0 \) P9 a3 I" R8 O
  174.         va_start(argptr,message);
    , @* ^( r1 x: j% m7 p4 ^
  175.         vsprintf(szBuffer,message,argptr);
    8 I5 \2 @; X" ~, [8 e% D
  176.         va_end(argptr);5 J4 h% T& L' H7 ]
  177.   fp=fopen(FileName,"a");
    ) e& _7 r0 a' ^+ s' K0 ]
  178.   if(fp)
    " S0 z! D/ k, W3 d* ]
  179.   {2 J' U2 Z! y1 d
  180.     fprintf(fp,szBuffer);& n! |" q' L5 D- |/ Z
  181.     fclose(fp);0 s/ }- X6 [" i" f# b- k0 `
  182.           _flushall();1 m% R4 E3 e  M$ Y% r; j& B) X
  183.   }
      ^5 O1 X! ?; e# U3 P
  184. }
    " c* d$ c: x0 \
  185. & N* v8 p8 l+ V! }8 P; w
  186. BOOL CRevAppApp::Fclearf(char *FileName); |5 w7 p- e6 C2 A
  187. {+ P2 v* M& h8 _, P! F3 J# f
  188.      FILE *fp;
    * t7 m6 |" H8 q
  189.     DWORD  attrib;
    $ k0 e2 w% O  a  w; G' @' L/ ?  }
  190.   attrib=GetFileAttributes(FileName);  r1 t% C: R+ W1 n- \) ]( W/ x
  191.   if(attrib!=-1)' t5 F+ K9 z) U6 @
  192.   {
    3 [, u+ {3 p& K
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 T9 g! [9 J# E' F# [" o
  194.     if(!SetFileAttributes(FileName,attrib))
    / V8 o+ f5 _2 Z6 I9 k
  195.     {
    + K' L, [. R3 @5 ], w
  196.       return FALSE;1 I) V( |* C! H6 M
  197.     }* }$ P5 ]! k4 |& `% D
  198.   }$ A; D0 p7 N  q
  199.   fp=fopen(FileName,"wb");* I3 z+ ]  D$ Y5 M8 j
  200.   if(fp)
    + t" a0 U4 q' {- X/ h; h
  201.   {. }" g! z# V) l: k2 |
  202.     fclose(fp);& o( i) @4 p6 E' _. b9 y; d
  203.   }
    & D; Z. y' c7 N" g' s6 J* `' \% u$ u
  204.   return TRUE;
    . @( O4 m" c) @4 E1 f& s
  205. }
    ' @4 P3 w+ G- G6 T  {4 h  J/ U3 P
  206. 4 y+ Q7 N) Q3 A/ W5 W; @  Q
  207. BOOL CRevAppApp::UpdateLocalVersion(void)4 v. h8 V! g2 j/ N# `
  208. {
    ; D/ p+ g+ d! F
  209.   char filename[MAX_PATH];+ l) b  i1 j& d$ u! B3 n1 O4 H
  210.   LPUPDATEFILE file,olds;' j& s  C0 F4 I( C" V: C
  211.   std::map<int,CString>::iterator i;4 l: I3 {# t( ]7 O4 G& ]3 {) k% l6 X
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    , H1 b3 f* k+ @6 f
  213.   std::list<CString>::iterator l;; p" p6 D" @/ C+ D. `& P( g

  214. . @* O5 h- U; u  o/ C  s& F0 a4 X
  215.   if(bFirstUpdate)" D0 U# e& p/ \0 e# x
  216.   {
      t& {) I+ }) |% ?, K& F
  217.     dwCurrFile=0;
    2 C2 m' Q: O1 A: k
  218.     bFirstUpdate=FALSE;, V. c" ?/ i$ C0 x) t
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + Q( `4 B4 Q; H2 U3 v6 o
  220.     {
    2 d. Y+ f: Q' y2 |
  221.       dwTotalFiles=UpdateLocal.size();
    $ P  f' M6 v4 Z# N- O
  222.       dwDownLoaded=0;
    2 X! I1 z2 o6 {4 e
  223.       bSilentStep=FALSE;: k' h: V9 Y  f% Q7 v
  224.       bCompressed=TRUE;
    * q- n7 ]% ]; P; D# D: \
  225.       strExtLocal.Empty();
    / g% i$ d7 _  N: F
  226.       strFullName=(*i).second;
    - h* @* T4 d  p3 j1 ?
  227.       dwProgramState=AP_CONNECT;
    4 k4 J/ @  U% y* S& c- ^
  228.       return TRUE;
    ) M' O' p+ X/ e! I( u; [9 a. A/ e
  229.     }
    4 Q9 O: n* k5 s5 }; H0 c- v9 ?
  230.   }4 B8 u' D1 Z( g  ]
  231.   else if(bRestartUpdater==FALSE)4 ?  B5 i/ ^% W
  232.   {
    ( b1 K4 N2 s- z/ Y) p
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    4 k! h( H" |6 O! k0 s9 a) D
  234.     {. u! G* j  x3 G; }
  235.       file=(*p).second;
    5 d5 H$ ?8 ?3 O
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())6 \5 c8 v; A' {  p
  237.       {
    : O' u5 {/ H9 M" t0 Q+ C
  238.         olds=(*p).second;
    - l8 P  A1 a0 I9 z0 k' E3 p. Q
  239.         olds->vers=file->vers;8 K& E3 R9 j, v+ s: {
  240.       }
    # |$ E7 V& Y% c. R: s9 |+ Z  t( T
  241.       else
    % Z0 j8 q" w/ {& L
  242.       {
    * m/ ?" r6 S" n
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 Q3 L& J% l) r- c" S
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    1 L9 s/ M2 @) i/ ]  ^$ c
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    & W0 k" h$ j( q* Z, r
  246.       }
    + f0 I$ K$ `& D3 n: Z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# U: q- j0 q: ^7 o. ]6 [
  248.       sprintf(filename,"(%s)",file->file);
    6 W8 ~0 a3 ?1 Q0 o/ ?' S. _
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 ^! N! n( v1 l* X9 W
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }1 o% K: i, Y4 u: w; e9 p
  251.     }
    6 \# w4 g: y4 d& J: Q
  252.     dwCurrFile++;
    6 n, P& \$ T1 l+ q  a- M
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 W5 c; _6 r) L+ e4 E8 |: S
  254.     {
    " d/ k" u6 o+ u6 p% h  f
  255.       bSilentStep=FALSE;
    - R/ k8 y( m0 x; S/ J
  256.       bCompressed=TRUE;
    $ H, N+ ]: u. m
  257.       strExtLocal.Empty();: P! w9 d# D/ n" ]! Q5 R
  258.       strFullName=(*i).second;7 k5 ?1 A5 i4 P9 x6 M$ z: `
  259.       dwProgramState=AP_CONNECT;4 |& h4 H9 E) \# t$ w# d: y/ X
  260.       return TRUE;, V$ [8 R: S2 s4 U
  261.     }  ]8 u! v& W: s2 Q9 d# g2 k" i
  262.     if(!bRestartUpdater). ?' W( l1 [: V% L0 X" J* O7 ]- Y7 }
  263.     {% C% Z2 H' i7 G2 p5 l3 P
  264.       int iCurrSize,iFileSize;4 C4 g( {8 |6 O6 \/ L- T3 c
  265.       iCurrSize=0;  w2 V. p, I: x( I, T
  266.       iFileSize=UpdateList2.size();
    - }; x- O  J3 A5 P# `% \! w$ r
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");2 {  I# M; o4 R' o: y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");1 o4 F7 M, |; n1 Y2 L) h; n
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");3 m) O3 v4 K! Y! l( h0 `8 L7 q3 v
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 i9 }8 ]& y0 J; U+ y4 g
  271.       Fclearf(".\\update.dat");3 q1 D4 E+ L& b" b0 f8 {
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    " l6 G; V! t! C2 s: @- |+ t
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 p, F2 p$ D( ?" D! H: V
  274.       {
    " X6 Q' R7 Q9 z: a7 a& [: Z4 K
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    / W1 V( d% K5 S: [4 [# r( {
  276.         {
    4 m. Z5 D' T; A8 ^: H+ G
  277.           file=(*p).second;# p( W7 {0 C( r$ a
  278.           sprintf(filename,"(%s)",file->file);
    & [9 x' h9 g& a5 M* v
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; `% J7 Y  i; }8 l
  280.           iCurrSize++;
    9 i! p3 l: e6 `
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: N) U9 K$ l9 ]2 l( e3 R. f
  282.         }
    ; f1 f; O* Q  D% R  f, u/ O, T
  283.       }/ L. H/ G/ n6 ~. m1 T5 ^5 Y6 G% K
  284.       unlink(".\\update.txt");
    . v- L3 }2 O! x8 j$ W: T( v( b; S
  285.       unlink(".\\update.tmp");% Z! ?+ C  b3 k8 |1 ~
  286.       Fclearf(".\\checkversion.dat");
    3 c0 w4 B: i- C, c
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);) ~, c' o& Z9 ?7 U# @" q
  288.       if(UpdateLocal.size())
    , Y. ?: L) _- ?6 d- Z; R
  289.       {
    & y3 W8 D( Q% }" S7 A3 p
  290.         UpdateLocal.clear();
    " {" W1 i% L3 j5 l1 e7 z
  291.       }
    - Y4 q2 r  h0 M4 ^4 L
  292.       if(UpdateFile3.size())8 G+ D; ?+ o: x4 b
  293.       {
    ) `; u! {1 a2 Z' o2 [" T
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- L6 U5 C5 [5 [; Q) S- y' ?
  295.         {
    8 H5 l& h$ H5 S. e& O. J7 @
  296.           file=(*p).second;
    1 P* @' G( a" p
  297.           free(file);
    3 Q/ i5 m$ \8 t1 G' k% E* Q
  298.         }1 n8 _0 |  ?+ c9 J
  299.         UpdateFile3.clear();
    , w) `2 [* j5 M; @5 Q  j; }. G# e
  300.         UpdateList3.clear();3 u3 ?2 p7 R% G1 j
  301.       }  k9 q% n& u+ E! j- u2 Z( J
  302.       if(UpdateFile2.size())
    # t: _3 J5 r9 n6 Y+ W; h* I
  303.       {; x7 K$ L  m0 \2 N1 @3 T
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : k9 L6 w) G0 b, |9 L# F8 y
  305.         {4 s5 f4 B# X2 c: `
  306.           file=(*p).second;
    $ b, m6 v$ |1 K  \- T
  307.           free(file);  @6 P1 T- k( e, a, |
  308.         }$ n- }) n: ]8 @6 w! T! Z
  309.         UpdateFile2.clear();) y% d4 q* R8 `# i
  310.         UpdateList2.clear();
    9 R* e0 ?4 \9 H! W
  311.       }
    $ x! y* B$ Y0 N! \* m9 G
  312.       if(UpdateFile1.size())/ R! ~* j$ s# n; T! s
  313.       {
    * i& `; t7 S3 H7 Y  K- r! I5 M3 j; d
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% t9 P+ x/ b% V9 |$ \' N
  315.         {
    ; G" N( Y% r" F  c: S% w  ?
  316.           file=(*p).second;
    % k, y* `0 z1 w- u
  317.           free(file);
    . L8 i0 F8 I: m1 @1 y- h
  318.         }
    ) r! }8 s" z. ]+ A5 v
  319.         UpdateFile1.clear();
    7 i& }- _5 F! x( L- ?" L
  320.         UpdateList1.clear();
    ! [$ F, ]6 _. @5 A$ m7 [+ x3 `: E
  321.       }
    # n% h% ]3 F! q5 D4 \, K! D
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));# O9 n5 Z4 O, l6 F
  323.     }$ B% ?% a; H# d0 p8 g3 c0 J
  324.   }
    ( j6 D/ q# ~$ H9 m
  325.   return FALSE;  ^3 ], s) r$ k5 M, w, X' J
  326. }
    0 ]2 q" O3 D1 V& o

  327. 4 G! p! s) A( G' D8 t, b
  328. void CRevAppApp::ClearAll(void). [7 U/ R: R! }- A
  329. {
    # f7 `' w6 [+ m! K9 R6 o2 S& B
  330.   LPUPDATEFILE file;5 A8 |7 A7 s1 W8 F  q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) z. Q' J: ?; P5 ~- R/ l
  332. + g9 H+ \, Q6 h5 [
  333.   if(UpdateLocal.size())
    : P6 p$ a$ D4 O
  334.   {& S/ p) s$ o# c% Q8 f3 k; b
  335.     UpdateLocal.clear();
    * D, d' D' ]3 n
  336.   }% M' ]) G0 Y6 N8 U0 K: P$ x
  337.   if(UpdateFile3.size())3 R& x0 _. g# J( T# e
  338.   {5 y. a# L, N. x* j( K
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  L4 q, {- y- f7 Z) o; J
  340.     {0 P; W: x3 o* o' X
  341.       file=(*p).second;
    7 T- }: [/ B. I; G& Q$ P
  342.       free(file);7 _! V# f4 j+ q% o$ u% i. a
  343.     }
    / ^! ~7 e9 q$ ?8 W
  344.     UpdateFile3.clear();% Q9 s& ^: |5 m. w
  345.     UpdateList3.clear();
    " J( Y5 }6 O0 h& k$ i
  346.   }
    $ v2 A0 ~8 F) W! v$ J6 ]4 H
  347.   if(UpdateFile2.size())1 z: Q4 E- W- L4 Y+ L* h
  348.   {
    ' U) b1 \. T* E7 m1 e! J
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 q/ n) s( C2 S
  350.     {
    2 \5 p; L" F% A9 Z
  351.       file=(*p).second;7 s5 m5 \) Y/ e: o: g3 r5 a
  352.       free(file);
    0 T' ~- ?3 `5 ?+ p; \
  353.     }9 ^% t+ x0 t* \* n
  354.     UpdateFile2.clear();
    9 s. p6 Z' Q& ?2 l' B
  355.     UpdateList2.clear();6 C% l* D/ D; s9 u; T1 P
  356.   }
    . U& d# y6 G. `; p) l
  357.   if(UpdateFile1.size())
    . o' G+ I8 N. u3 m! `; c
  358.   {
    + ?8 K3 O0 T1 K) R& a
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - z" q6 k. ?2 `0 I+ y0 ]; t0 A1 I' o
  360.     {9 f" U* n! l+ C3 p" @2 X
  361.       file=(*p).second;2 e+ ^. x7 B" R- D+ m6 z
  362.       free(file);
    + x5 r, @) q1 l- f- |0 U& R
  363.     }" X+ X& a9 ?6 t
  364.     UpdateFile1.clear();
    : k+ ^# V9 W' T
  365.     UpdateList1.clear();3 I6 ^+ z. j0 j  i9 @6 Z
  366.   }
    $ E, T( J, O+ O6 O2 \
  367. }  
    / A% F+ H$ D7 I7 K/ d' m, F
  368.   6 @1 V' _* z" N4 f
  369. BOOL CRevAppApp::CheckLocalVersion(void)% ^( |( `2 i) I- a/ H1 w
  370. {8 @' X2 n( t; \* h+ `$ `
  371.   int c;- z! f6 P$ W1 i2 O  i
  372.   LPUPDATEFILE file1,file2;. V# E1 S+ [+ @4 Q
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;6 m- x0 k+ w9 J' `8 H8 _
  374.   std::list<CString>::iterator l;( J2 ]2 ]( d8 M( m
  375. $ ?$ g& C5 V$ j/ m0 N9 q
  376.   UpdateLocal.clear();
    0 J( j6 y# `/ G" }
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ! }# \# u9 d: L2 V/ A& w
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ) ~& _% h3 I; x& e" [+ _
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ( O- N' R, t) R! r0 q) c4 Y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    & [7 c& J+ X. M9 C8 N
  381.   if(UpdateFile3.size())
    % O  z& X. P# l- {1 X6 g9 e
  382.   {! v! q& x% g1 z& W7 Y' R9 q; [  U
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    9 Z7 g$ \" d" W6 u, m, I) R2 X7 ?$ ^. g
  384.     {  a  o* M+ I3 p# F7 z
  385.       file2=(LPUPDATEFILE)(*i).second;
    0 M: E% X! M+ y- C5 _3 E  O3 A
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + \. a$ ]6 J5 L  H9 d) L  Z, X: q
  387.       {
    # o8 C: ]% m5 `' X
  388.         file1=(LPUPDATEFILE)(*p).second;
    % d, T4 c% e5 r
  389.         file1->vers=file2->vers;
    7 ^* T7 v( |$ v. }
  390.       }
    0 s3 E" A7 \! m
  391.       else
    4 Z5 r" @( X* y
  392.       {
    , W  X' ]$ \8 O' T7 ^8 i" p
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 T3 }; D  r( C( S
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));6 w) V( }3 R4 w1 n( b
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));$ a2 {* z' J& ?
  396.       }
    . a4 @! E$ K' i# b$ }
  397.     }( `2 d9 D5 h- ^1 H2 t! |2 n4 C; C
  398.   }, E! }* @( M* p9 z  E
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)# E2 ], l1 d0 ^0 ~# K
  400.   {! T4 x5 v  g5 _" j) T
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    5 A( T6 X; p/ {; J% a, I4 w
  402.     {# j8 B# Y/ }! d7 S8 m/ k
  403.       file2=(LPUPDATEFILE)(*i).second;, o. B. x% q( p5 s6 {" Z
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' [6 S- S8 {! f) F0 S: `8 z/ k8 x
  405.       {( p$ z/ l5 o% c! ?/ j4 U! j
  406.         file1=(LPUPDATEFILE)(*p).second;
    0 c. [# @1 S, I# i/ k. r
  407.         if(file1->vers!=file2->vers)( p0 j5 v% {$ W2 s5 j
  408.         {
    - ~0 v( e0 S" y9 s  ?; C
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% G, ]. q/ o- s/ C
  410.           c++;2 g# L% c+ h; S) Z' f3 k2 T
  411.         }
    3 O9 U% E+ V* B/ l- b% _
  412.       }
    ; Y0 V6 D" L3 q# z
  413.       else! B2 r% T! h0 M: J
  414.       {$ y3 F0 W# L! O) w/ \
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" [$ C3 i! O. S
  416.         c++;: X& J% a' `5 u% P; Z3 L8 D  L
  417.       }, A9 t9 ]: B6 c' d# a8 K" M- y8 t
  418.     }
    $ N2 `6 }+ A5 X- Y
  419.   }( ?) p9 n' X9 I8 E6 P
  420.   unlink(".\\DownLoad\\update.txt");
    : I. O& |/ L- X; S9 I8 e4 j% a
  421.   if(UpdateLocal.size()) return TRUE;
    , I5 V) I. Y1 G+ W8 U, A% x2 A
  422.   else                   return FALSE;
    & n6 i4 ~( i. p( P4 \1 [
  423. }0 [4 z& e. u! Z1 D8 {3 L
  424. / \/ w% E5 x* M2 D$ j6 j4 L$ v( m
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ) n: B% T9 S/ o/ J9 H
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"$ d- b  \- E$ T+ D$ `1 g  f
  427.   a; ^+ C) d+ ]; ~
  428. 1 n2 f) z, J" g5 [( V, [. n! a
  429. , O( L' T1 n2 F( F
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
      c% V/ v  b: H# D8 d' T- a1 c7 z
  431. {! W$ o" q# [1 s& u
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    6 e9 ~( r. @$ ?4 M8 I$ P
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( L0 _9 p+ _6 p( O  y# D% y( a
  434.   {
    + t6 U- r# t) e8 R6 P
  435.     char szLanguage[50];
    " x' a* P- p, R( i& g7 l& T2 s
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" C; E# y; p$ |1 K
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 K$ R0 b4 i0 @3 {
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" x& G* `) h: Z! g* Q
  439.     else                                   m_iLanguage=ENGLISH;
    - C+ W8 Z* W( c% F
  440.     char szRegister[100];' x" W6 Z1 d) H' e& B
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 R9 H# O$ t* K7 q! i
  442.     strRegsName=szRegister;% f3 \3 e7 H% S, c
  443.     char szPatchURL[100];
    ! c9 E2 e: F7 u& |
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # f' e9 m. ?3 e
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 X1 j3 p! M2 {: v4 X& V4 p' u: R
  446.   }
    " y) @# T' e1 A  J/ V" ^, o$ c# B6 ?
  447.   else
    , O0 P3 T, m* S1 G+ ?5 o
  448.   {
    - |7 j7 R8 @5 e$ A# A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + D% o9 s& p( i0 Q
  450.     strRegsName=DEFAULT_REG_URL;' D9 L) d* i9 A( W9 x& u
  451.   }$ e9 L! x6 f6 O( @
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 A0 x3 B( j9 u
  453.   {# z) b, i" a# @
  454.     char szIP[50];* U. {' ~  B- o. C) U
  455.     char szDIR[300];
    4 d- t& [! i! c- A) t& H& r
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))# r! f1 j+ ?% g) I8 D/ G. N8 @
  457.     {2 M# p7 Y1 y8 c1 ]/ i7 w
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");/ u" e9 X4 \$ o; a
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");) H' _# I2 S2 G
  460.       strHostName=szIP;
      f5 W9 o3 b( p* i7 c; _$ Q
  461.       strHostPath.Format("/%s",szDIR);4 L+ w. ^5 }% r0 x; W. D0 L! i
  462.     }
    ' C) P& S# ~- f6 |3 e; o
  463.     else
    2 e6 ?! C. `8 b" T
  464.     {* ~4 A: B9 B' t. {: |
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* K) ^' ?; R6 e$ m5 m: r
  466.       {. M% b' o5 P1 ]7 A7 G2 u
  467.         char szLanguage[50];
    & E4 E3 V/ v) u! Y) U
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& M) }3 B( J8 `
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * g6 J0 ~* ?0 |! O9 X
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 P- B! t0 P" E/ l
  471.         else                                   m_iLanguage=ENGLISH;
    5 f, I- J. O. C( q" _
  472.         char szRegister[100];# X3 b4 B( M4 \) _3 E
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - u2 W( S# S  X
  474.         strRegsName=szRegister;5 _, v$ H* ?: ?$ O, t" n
  475.         char szPatchURL[100];
    ' d6 @; A4 r+ G$ e0 y  }
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; H: K# z1 A4 U+ Q5 L5 n' X
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* K( p8 y( E4 V! p
  478.       }. C+ I6 S) ~5 @) M: p8 _/ J( _8 p$ }
  479.       else; h" g7 G1 f7 W* U- Z( Y6 l* v1 E
  480.       {- J& E0 W9 J7 \' k# g+ B1 X& B
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - T( l/ ]4 {7 ?
  482.         strRegsName=DEFAULT_REG_URL;
      d) ^; I4 l# X- ]& i, P
  483.       }9 e; }, T* a$ u6 _" i/ Z3 @/ a+ S
  484.     }
    / A3 ~4 B8 n$ }7 T; [& [* L5 O  t
  485.   }& M- j- a& l* Y4 ?
  486.   return true;
    ' i1 v/ X% @- u, \
  487. }
    6 n  z% n8 |4 t/ Q! V
  488. 0 k0 S- G# L! j* x6 L) a9 w
  489. #include ".\ZLib\unzip.h"
    8 Q3 d# e% L9 g3 u
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( {( o( Y8 |5 g4 ^; c9 f
  491. /////////////////////////////////////////////////////////////////////////////
    : t" R: _7 H4 L8 V
  492. // CRevAppApp initialization
    ) K! K7 a6 i; e3 P; e
  493. 7 j3 h) d! c, D1 n0 c% L
  494. BOOL CRevAppApp::InitInstance()' [7 ~1 z+ a$ ?; K" m$ C
  495. {
    6 }+ L# G! }; f+ Q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    . h- x4 K7 O! f, C, H

  497. ) g$ A3 H' g: l# S! J7 v7 u: s
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);; X- H# c# d  X& f+ W* f
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))& b  ?. K$ r' d: c
  500.   {1 F/ {# l* D: e" X0 e/ ^
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    % C4 U: q# j# E2 S
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    2 y) J0 L: Y* q, M; F4 i. {
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    . n) F& y: ~* ~6 P1 o1 s6 c
  504.     {, b5 z) Q! F' k* w$ r" a" b( d( F
  505.       strcpy(szPath,szPathTarget);
    - y( u$ }7 c" a
  506.       SetCurrentDirectory(szPath);
    / E" c- C! V; W& {- w5 f
  507.     }5 u2 N+ H  _+ e- B
  508.   }& j3 s0 W/ c$ }& ^8 ?4 B6 X( L6 p
  509. #ifdef _DEBUG  G! k6 L" A! c; d" a+ G+ Q
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    : O( }: }/ Z* C$ p0 d, ]
  511. #else; L# X4 y" f! P7 J5 G, y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( ~" g! V+ z0 k- B) P* @. Y
  513. #endif) ^6 H6 n4 d0 q* t$ y4 h
  514.   {
    ! D7 z" Q. ]  A' p8 l7 w* \5 ^
  515.     char tempFileName[MAX_PATH];
    ! F3 L$ d8 g- C# m% z
  516.     strcpy(tempFileName,szPathSource);
    8 f5 g, t' J. }6 j/ |
  517.     tempFileName[strlen(szPathSource)-12]=0;
    2 b* v8 U0 Z" {/ H- ?
  518.     strcat(tempFileName,"\\$CSUpdate.exe");0 F3 D# F- _6 ?
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    6 @5 \2 \. d8 Z& o! w% r$ S+ A
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    : [5 a/ m4 I% j5 i$ c$ _
  521.     return TRUE;5 t' |2 I# {. q$ G( `
  522.   }
    ' M8 K- R# r! m  n( k( I+ M
  523.   // Nuke 0118: Delete run.exe4 Q- z& l9 z  j6 U3 n8 K
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    $ g  L8 ?$ s5 T) A2 e5 L  v6 z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");8 a8 I( O# ^4 |" [* A; A) ?9 O
  526.   if(!ReadCfgFile("Config.ini"))
    ( l4 i1 }0 N& ^" C* ]
  527.   {7 y0 h* \. z: X" `6 z9 E( D
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    + Y0 M/ n( i) @1 W+ I4 o. l+ p
  529.     return TRUE;. ]& N7 @+ j0 i4 q* U0 h$ V
  530.   }, q. L7 h- R, v7 U9 }
  531.   HANDLE mutex;
    9 T# L% L' ^% A1 X1 v
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    / J  t, E* X! K: t, y/ Y& u9 Q
  533.   {' M$ j5 X+ I, t+ l
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    & s5 D1 E- n: l; ^4 s! ^' o
  535.     {6 C5 h' f! u$ C
  536.       CloseHandle(mutex);3 y$ q# x' }0 m5 I* b7 k+ X/ U
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);2 Q" {1 H0 l0 P& o# O# c
  538.       return TRUE;; Z5 R2 l1 u4 h: v3 x) `; O0 z
  539.     }
    ; [0 ]3 z; {% ?/ s8 W8 {
  540.   }  
      G2 a% i; Z( ]# e1 ^
  541.   CloseHandle(mutex);: U+ j% L! G1 Y2 Z3 j% G/ {

  542. + e0 R+ t' L' ]) B' w- H+ Y2 V$ D9 K# e
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    # j5 v+ x5 ~; G- e, K5 ~
  544.   a; ^3 v: O" V# d
  545.         AfxEnableControlContainer();
    0 a. e9 B1 Z. g( d4 ]. f. m* k

  546. $ C: j; t8 n0 z2 s7 b# W6 Q3 p
  547.   bCanUpdate=FALSE;2 b. ?, g  j6 I& N* j
  548.   dwStartUpSteps=1;- o. U" l' F4 U, Q4 f9 |
  549.   dwProgramState=AP_NOTHING;
    8 Y/ Q' ]5 R: L7 w% A

  550. " r' M& d3 b2 e. {
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 F) \; @' z! B( P' C% P9 o0 A

  552. : e3 i( M5 a6 e8 g
  553.         // Standard initialization/ t! A% @0 _, g( [) P
  554.         // If you are not using these features and wish to reduce the size' W- u. [9 Z7 Q1 {; d1 X
  555.         //  of your final executable, you should remove from the following0 J7 A  B" `& a" g  `
  556.         //  the specific initialization routines you do not need.
      y; Y0 K& Y0 e+ }# o) p

  557. 2 l7 }  n6 r& Z: i
  558. #ifdef _AFXDLL& s# F9 V. m$ n. X
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    $ d* H% o1 [2 I
  560. #else* x* T" a2 @% v/ v* V) p
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically- ?# [! g5 }7 g0 f" D8 A- A1 `  i
  562. #endif# n9 N' n1 E5 c5 V% t  P, ?, Z
  563. 6 q$ \8 h. w; j# h' T
  564.   dlg=new CRevAppDlg;
    + f7 c+ ^) W  i. O& M- H$ G' G4 r, j
  565.   dlg->Create(IDD_REVAPP_DIALOG);, |: d9 W( L5 H* r( J
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    * T0 c* P& j+ A$ o, W  I
  567.   m_pMainWnd=dlg;9 j& r6 w. N( G$ k
  568. + }" M( }+ F* Y& ?% o: f' v: i; R
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);* U7 a, Q6 a9 l: K+ l
  570. 2 s2 w: Z* h- T" C
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ( y% w0 E1 U. U  ]' {
  572. //  ULONG_PTR gdiplusToken;
    5 f! M( M: s+ ^4 M& \* ]4 K3 r
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);, V& T% t3 }6 _9 [
  574. + t( Z/ q7 a. c
  575. //        CRevAppDlg dlg;* G6 r- k# Q/ G
  576. //        int nResponse = dlg.DoModal();1 L3 j$ L0 d/ l0 E$ M
  577. //        if (nResponse == IDOK)) f# o/ `4 [' V3 w" v
  578. //        {
    ( R0 F9 c/ w8 J/ V1 J! G
  579. //                // TODO: Place code here to handle when the dialog is
    + R; I5 M3 W0 m4 Y/ `
  580. //                //  dismissed with OK0 P. l) [5 [" x& _
  581. //        }
    ! x9 g3 d0 b. [+ N0 R* K# E0 F! a0 M
  582. //        else if (nResponse == IDCANCEL)& }5 V$ A+ E2 M& b: f3 T
  583. //        {: ^% g- ?/ C1 G5 B( c. a& p- W: R$ k
  584. //                // TODO: Place code here to handle when the dialog is/ g% V- ?. N& s, I! w% s* Q( z1 B! N1 u
  585. //                //  dismissed with Cancel; S- ~- G  s2 {5 }4 t# {
  586. //        }
    . q/ `/ G/ F; |8 P

  587. 3 i# t. A: @: r4 M, u; M8 U
  588.         // Since the dialog has been closed, return FALSE so that we exit the/ z" y+ {) D$ T8 L% E( f$ }+ w+ {3 v
  589.         //  application, rather than start the application's message pump.( s/ G; U! ~: \8 c) ?
  590.         return TRUE;3 z$ v& c3 b$ e
  591. }' N7 N* Q+ w9 T# i7 I. P
  592. ! Z+ V4 p' P0 M1 z2 y+ M6 U7 A8 N) t
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    : f& Q# W' v+ V, z1 g4 a: c$ L% U
  594. {/ n9 V6 E7 C) w; L$ k1 {+ V( n! u
  595.   int i;: W; b2 Z6 D8 h; p9 F6 M8 f
  596.   char *szRet;
    ) i  N. R7 Y2 s
  597. ; S" O3 `+ ^3 O; B: ]8 K- P
  598.   if(pSource) { itoken=0; sztoken=pSource; }* D! S0 e5 W! u' E
  599.   if(sztoken)
    4 b0 u4 D) u4 g. U9 t
  600.   {
    , e, r7 ?8 `" R3 \7 t3 D! h
  601.     szRet=&sztoken[itoken];
    7 H5 N5 v4 M, \' n
  602.     while(sztoken[itoken]). p+ X$ c0 y( v8 w+ G6 T  ?6 i
  603.     {
    ' A+ y, u* k0 v( ~- V! M/ Q3 O% a
  604.       for(i=0;i<(int)strlen(token);i++)
    ( n. k: r* i# w, O! p- \, M5 x4 F
  605.       {
    $ z! h8 V$ E6 w8 `/ l1 j. x
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    3 }. w! }0 y8 n' }# w
  607.         {
    : M8 ?( m, m6 o2 z+ |/ j# Z
  608.           sztoken[itoken++]=0;
    ! L# b( a. I* x
  609.           sztoken[itoken++]=0;9 g8 Q2 u$ A  `% P4 D
  610.           return szRet;  @6 J8 P& a0 L. H' [
  611.         }+ Q6 B- A0 w7 L2 B# E& R3 L9 C
  612.       }/ G7 J; r$ c/ j+ X4 P
  613.       itoken++;. D% t- C1 |7 k. z) O
  614.     }& G, y$ w' C! Q6 R; a
  615.   }
      j# P( d8 b% }- i6 K8 @( C
  616.   return NULL;7 k  g/ A( F: ]7 c* i$ q6 X
  617. }
    # g3 q. V& y( K1 B

  618. 9 ]) H$ {+ o) N: C& `5 I
  619. void ProcessProc(long Total,long Current)
      m( \4 N; g6 n' W) b
  620. {" B3 h9 f4 t4 H( r1 E8 F
  621.         MSG msg;
    ! M& W. e/ b" a- I5 c3 N) l
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    * E1 _0 U, a: p4 R+ S
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));/ b8 D6 _: n: O( Y3 y# i6 }7 G- F
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))5 ~7 _- C- I( w
  625.         {+ ?# h5 T8 \- [) D0 o) e4 I
  626.                 if(!GetMessage(&msg,NULL,0,0))
    5 j& u. u  i0 D1 I9 L7 M7 x
  627.                 {
    9 R. ], f) {/ o9 e  H( p9 D" w
  628.                         return;
    6 c; M$ ~( g) o% u$ O
  629.                 }
    - d: L; R1 \+ ^; v
  630.                 TranslateMessage(&msg);
    3 i& J4 }5 e1 o! Y
  631.                 DispatchMessage(&msg);1 Y9 i* o3 u4 k, r' B7 \+ Q, H' A
  632.         }       
    6 x# m7 u" p  J" l2 e2 m
  633. }
    ' n& L4 m  d2 X
  634. - j) M9 {! J' ?: [5 r! l
  635. BOOL bFirstChar=TRUE;6 D' z% R5 h7 d4 ]
  636. $ X9 u  w7 V  k; ?
  637. BOOL CRevAppApp::OnIdle(LONG lCount)! P8 \4 y- ]9 ]' v' I3 b3 T$ _
  638. {
    8 ]& @3 [) T/ x& R
  639.         // TODO: Add your specialized code here and/or call the base class3 L& U) l! y& D8 A
  640.   switch(dwProgramState)6 K& c8 J! e$ x  R: @! w
  641.   {: G5 k, q+ t) r" ~, C8 |& ]
  642.   case AP_NOTHING:
    7 n* `9 N4 P7 L
  643.     switch(dwStartUpSteps)  o; J/ f. T/ C% V
  644.     {% ~# t% t0 a7 {1 [# K
  645.     case 1:
    " i; x% K$ Y3 _0 n( A- \  M$ J) g
  646.       {
    % {6 ?0 m, {1 B2 O. u! @7 f
  647.         int i;" k8 q/ o# `& T! v6 P
  648.         CDC *pCDC=dlg->GetDC();! I) V" w% V- p3 K1 m0 T& d; e
  649.         HDC hdcwnd=pCDC->m_hDC;
    ; h5 i8 I+ A- W, F* v2 m
  650. //        Graphics graphics(hdcwnd);
    ( B0 a& U$ y6 B; m
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    5 ?9 Z- |" b7 n
  652. //        INT iWidth=bitmap.GetWidth();: G, R3 _. x- q
  653. //        INT iHeight=bitmap.GetHeight();8 m$ E9 `" q% N
  654. //        Color color,colorTemp;/ e' Q: ?( b5 I' s% ^" X
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ l' r4 h7 @8 u5 F3 i1 n
  656. //        {
    8 z  K3 h3 ^) Z
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)4 E) e( _" V2 P( M- P
  658. //          {7 T) V3 v# ?5 R' p1 n3 j- J$ e" F
  659. //            bitmap.GetPixel(iColumn,iRow,&color);9 F1 k: C. c0 K# `) e
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 ]9 X3 l! c* v: Y) @
  661. //              (BYTE)(255*iColumn/iWidth),
    + v- D2 k/ S9 s! E
  662. //              color.GetRed(),' a5 k$ g- J$ o( k
  663. //              color.GetGreen(),
    0 ~0 d! p7 O+ k: M. l) I
  664. //              color.GetBlue()));. s( [$ v3 x( |" W& K% ]- }: G+ F' T
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    & {; P# I; [9 x) r6 S( _
  666. //          }6 e& G8 N, u) ]$ {. q% f
  667. //        }6 z4 T6 w7 Y6 r
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ) }; U: R. w1 G% F3 {5 x
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' y" j2 e1 B/ m) r
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    : O5 |; X3 y' N+ s6 O
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 z5 m( f+ \, `  |& j) m
  672.         for(i=0;i<240;i+=8)- \3 }, U) c6 X7 A+ ]
  673.         {
    , u2 u* {3 |* y# |
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      I- S0 _+ z5 I
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);' }# s  B4 F6 ^6 {$ g! `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 h6 R# b6 z( N) Z8 K" ^1 K1 s: d
  677.           Sleep(33);8 E  ~; p3 \& J  O1 N- N1 {
  678.         }8 E! l  U! _( A* q2 {
  679.         Sleep(1000);
      D. t( o6 ?3 z5 e" v: v0 t, e; r
  680.         for(i=240;i>0;i-=8)
    - V" @: D9 Z' h. d. T  T2 _
  681.         {/ _3 _7 J$ _7 Q0 F
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 C( h' A, I5 L) A; S) R& g
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      }( v& s4 Z: T# c
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 s% G6 N0 }5 t
  685.           Sleep(33);& o; I; ]; e$ n6 ^& K5 N
  686.         }2 ]4 _0 K7 ], D7 V8 e
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    : c) u6 |& Z; \% T6 J( C
  688.         dlg->ReleaseDC(pCDC);
    4 U9 ]% F: P! e4 E& N9 y3 U
  689.         DeleteDC(hdctar);: Z$ `0 k+ O2 r. N: l. h; |
  690.         DeleteDC(hdcsrc);% A) A/ v" g7 Q1 i6 b# j( {, ]
  691.         DeleteDC(hdcorg);4 p9 u$ I0 Y" ]: n: |( K
  692.       }8 Q" y7 c2 M$ ^% ?% }5 E
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ) d; S; }! m' Q  q0 y% ]
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");; u+ q, O9 \+ D% R5 L* P3 \
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ; ?3 V. i6 Q' J/ ^5 W
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    $ x9 s# q7 N$ @) w! S' ~6 @6 j9 ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + r) ~: f& a/ W: T3 V- F
  698.       if(!Dn.Connected())4 l# O6 I; k; j/ ]  T
  699.       {
      i1 R  h3 _$ C* C
  700.         dwTotalFiles=1;
    ' {) q; W: L  E; x2 i- ]4 Z4 s
  701.         dwDownLoaded=0;3 T' V9 n* T1 e+ T: @) S& L/ ~
  702.         bSilentStep=TRUE;
    : I' N: z6 W7 ?2 m8 d+ A
  703.         bCompressed=FALSE;
    0 K% O& h* n4 M6 c  @
  704.         strExtLocal.Empty();
    : ?4 m5 F# J) l$ @) X0 e. z! M0 P" L% _
  705.         strFullName="readme.txt";0 ]" b4 m; R8 _  q9 i
  706.         dwProgramState=AP_CONNECT;( }% U1 H1 z# p( Y# D' w* v, f
  707.       }0 c0 ^: H4 z8 [
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();9 q; ^2 V  X3 \+ f8 {: e+ W
  709.       dwStartUpSteps=2;- i5 E5 q7 s) c
  710.       break;
    # l& s& y! L  o! t* `. n/ u  Y
  711.     case 2:
    & _' w" u; A" U  U3 }0 m+ R& O
  712.       {2 X6 a$ j2 ]  a
  713.         int iEOF;1 M( P3 d1 y6 ]& e7 v$ l; S8 t
  714.         FILE *fp;2 R" K0 X2 m- B* [: b
  715.         char szString[512];6 c4 E9 T3 b5 \  L5 E
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");# X" W  b. J6 w5 z
  717.         if(fp)
    / p* e$ T3 \7 L4 c& V0 }- L- j
  718.         {8 i+ i4 a% P1 d8 r
  719.           do
    5 z2 ?) s$ D  ~5 ]( Z" x
  720.           {
    : Z$ j' x5 c" R) |& F% v- k
  721.             iEOF=fscanf(fp,"%s",szString);
    ( W& k" e% E0 d. \- }3 @& k( t
  722.             if(strlen(szString))" h0 o9 `  @# M9 i
  723.             {
    - V( X) H' v8 P
  724.               if(bFirstChar)
    ! y- @8 f4 ?! Q* F4 A
  725.               {. X4 s+ {% V' ^0 A, h' F* J
  726.                 bFirstChar=FALSE;4 X( q+ R! s( M8 c( S( ?/ A
  727.                 bConnectIsBig5=FALSE;
    + w% ~7 @8 E7 ^1 F! C
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;- ?4 \6 D+ v; v' m. I) X6 A
  729.               }- z% J/ B% t5 M/ H/ B4 Z+ x
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));# @  Z* Z) @3 f7 @- d
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));2 ?: M. q" M9 Y+ s- ~
  732.               dlg->m_ListText.AddString(szString);
    5 \5 M) g- {6 `4 b: ^
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) B+ S9 S: K9 t, H
  734.               *szString=0;' l) h  m8 v4 r7 u' _$ g
  735.             }1 z# x1 A# ~+ S$ M5 _6 _; b
  736.           } while(iEOF!=EOF);; m' K2 |. E8 u0 G5 T7 o) `
  737.           fclose(fp);$ \( p/ c7 Y( X% c, ?
  738.           unlink(".\\DownLoad\\readme.txt");4 {4 e1 C5 Q# J% v) L( _/ M7 z7 e
  739.           dwStartUpSteps=3;
    9 G, ^8 g. S( {" d2 q' P
  740.         }+ g4 d- E0 i; t
  741.       }/ D/ ]  s, Q( D1 `7 C
  742.       break;
    4 i5 _1 z, w. K% q
  743.     case 3:, ]- p8 d4 |) R
  744.       if(!Dn.Connected())
    $ i( a8 |& S8 U- S$ T+ _( z
  745.       {: [8 g; `- O8 V2 p4 L" o. [/ c
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);+ @8 c2 [& _% z' |1 l
  747.         dwTotalFiles=1;
    + u0 e8 N$ Z  m' b* y
  748.         dwDownLoaded=0;5 Q2 T0 s/ a$ |1 L% ]4 u
  749.         bSilentStep=TRUE;0 S, }$ p: t, Y0 d! c- E' A1 u
  750.         bCompressed=FALSE;
    + A1 y7 [4 ]" B8 Q# e3 Z
  751.         strExtLocal.Empty();% V; `1 u# M* Z3 |6 Q' k: \
  752.         strFullName="checkversion.txt";3 \% P* ]: ?- U  m2 ~% B
  753.         dwProgramState=AP_CONNECT;
    ( q4 r3 y( j9 m2 s* c. J! C4 I% m
  754.       }
    + p* Q* G8 ^9 w) i  t( v
  755.       dwStartUpSteps=4;
    , e" b/ a' x* F/ o
  756.       break;' W' w- _* |9 |7 f( E; r
  757.     case 4:
    1 r1 |; f; L+ b$ ^& F0 }" Y
  758.       {; r* [; A* ?# }, ?
  759.         FILE *fp;5 W- a' |  M! S# D0 |8 U0 \( z& {
  760.         char szString1[128];
    8 c( B; e  \- d4 w! d
  761.         char szString2[128];
    ' \% A9 L5 P# R$ X6 [" ]* `( Z
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");5 M9 G8 H0 K1 w6 n2 U
  763.         if(fp)
    * g8 X4 }& Q2 |- n3 w. a
  764.         {" s- K5 L0 @/ _/ T& G# u
  765.           fscanf(fp,"%s",szString1);
    ' E) \4 v; {# ?0 _  k
  766.           fclose(fp);
    9 a) B1 ~4 G2 i6 B8 e
  767.           fCheckVersion=atof(szString1);
    % X0 l6 _( R5 z& v! Z+ l4 x3 K: F) }! v
  768.           fp=fopen(".\\checkversion.dat","r");+ o- _& [5 H& l( J8 ]
  769.           if(fp)5 O  Y7 I+ a, X, T! |0 J
  770.           {2 [$ N* q% k4 X- \4 l
  771.             fscanf(fp,"%s",szString2);
    2 A: ^$ e: w; ~2 q0 O
  772.             fclose(fp);1 d: o4 r; N7 h$ B) d$ O3 V9 }
  773.             if(atof(szString1)!=atof(szString2))' E2 F& D4 h5 N
  774.             {
    & l: i! n. M- {' k. y9 q
  775.               if(!Dn.Connected())
    ) D  G( ?' [/ Q6 C( A& u
  776.               {
    " Y) l1 c5 n* e' B, Q1 U
  777.                 bFirstUpdate=TRUE;3 I! C* x5 @: B. V8 G
  778.                 dwTotalFiles=1;
    ) k5 w. v' x/ D( K- F' `0 G: ~! Q
  779.                 dwDownLoaded=0;2 k6 R) @8 i+ W6 G
  780.                 bSilentStep=FALSE;
    ' O9 J6 T. L7 e0 D" ?9 X! `
  781.                 bCompressed=TRUE;
    % _3 V2 n9 R# I
  782.                 strExtLocal=".\\DownLoad\";$ S. y* N# f, P1 m
  783.                 strFullName="update.txt";
    ! M+ G% a! _1 ^' {; f& c5 z
  784.                 dwProgramState=AP_CONNECT;6 m3 k" Q* r8 T. [
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) V7 C7 G) U: J2 l) ]  Z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  q* c  s8 t  h
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . [9 z0 Y# N0 h- @1 {( k

  788. 1 b, d  K' l9 D7 @6 a0 U
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 x! T! j! K9 G) F3 Z
  790.                 unlink(".\\DownLoad\\checkversion.txt");! _* I8 c  c- j8 Z5 w
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' ]% c: l! _9 o% ^3 d
  792.                 {$ G4 }, d2 N% i, b5 P! N  X
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");/ e, @! D- ?( G1 e' t
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");  B& U3 C( @! L
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");+ h* K4 r% }2 Y0 E8 O" a
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 ~0 {4 B0 ~, C- `- Q

  797. - c+ q( V7 z- A# l
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 u! c  y$ v9 j
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; Z* u8 h3 p1 l4 ^6 V
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 K5 `7 H2 a( Z* O9 u7 v" M
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# O' Z5 s. [8 h3 g+ B
  802.                 }7 A( |; X( R1 O; o- @
  803.                 dwStartUpSteps=5;
    0 T% S# [* q3 D; W
  804.               }
    7 H5 K  t% J& X0 O1 t1 a
  805.             }
    . t. d: z- |( D9 G* S0 F/ M+ \
  806.             else
    # z3 K4 a. |3 H5 ^8 X6 w
  807.             {
    - O4 v# |/ \; j: ?" c* Y. R
  808.               unlink(".\\DownLoad\\checkversion.txt");
    * b8 O( C) W/ s/ G7 j9 s
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 _! F- b( y" W1 @  ]# s) O/ w
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    1 v. B, g% a$ B( H2 ?
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");9 B( x5 C5 i# m+ ~2 D1 A

  812. # a3 o6 s2 }$ p: g! R2 J( g+ |& i6 L
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: z: ~2 x, x2 u8 l% C
  814.               dwStartUpSteps=99;) D' [: P  d9 r
  815.               bFinishUpdated=TRUE;8 J( `; v9 `4 j" ]: P! A# c
  816.               bCanUpdate=TRUE;
    " B+ ^# P- O, R
  817.             }
    8 r% n' f0 R% ~2 p* B
  818.           }
    : i' |% D$ y( {! h8 i
  819.           else
    2 I, c9 C0 F; F: d
  820.           {6 u. a3 v: ?: _# n4 @+ @+ U7 E4 w
  821.             if(!Dn.Connected())
    ' M- r. V' x  Q: t
  822.             {
    # s! r' q3 h9 P7 r
  823.               bFirstUpdate=TRUE;3 [( c/ i3 I5 a: s, |
  824.               dwTotalFiles=1;. m% L0 H9 ~2 P# J8 F  u5 a
  825.               dwDownLoaded=0;
    7 l. w; K9 K9 |& T5 F
  826.               bSilentStep=FALSE;
    ; t* y  {  [# I4 H  |' Q# h
  827.               bCompressed=TRUE;
    ! r3 K+ z) D& l2 K1 Z5 D6 m
  828.               strExtLocal=".\\DownLoad\";3 r7 _- {8 i- ]! Z, [
  829.               strFullName="update.txt";( h& G& i9 P- R0 z
  830.               dwProgramState=AP_CONNECT;5 G; {- \% ]" m4 m2 v8 X; ^
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- A: C8 u7 h6 q$ Y; m' l
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" b8 _1 r9 C  w9 I( C- Z" X
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 U+ P1 `$ [. r: G/ x0 Q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; t' |4 X- J0 X( P  W
  835.               unlink(".\\DownLoad\\checkversion.txt");. V! y1 R' n6 {* z
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ' O- N4 w- A' y* m2 Y( p2 S- Q
  837.               {8 I2 N( m) @8 d
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    $ s+ g- k3 f3 ^# U$ }$ K
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    & s0 p$ w$ ^( Z: \- f( e  B: x! P( a
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    7 g6 ?, X: K+ |  D( U
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) n; K+ I; |" P0 t; L
  842.                 * X/ h" o" c2 c; Y& q- l2 ~. T. V
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 y2 v; u2 f2 I6 O2 B
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * C7 e: s, j; N1 k3 o: u5 Y. L7 ?
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");- r* m& Y6 U  f
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# [5 A% E9 l- X
  847.               }
    ( o% w: o& `1 a) Z- w( `7 o5 m
  848.               dwStartUpSteps=5;9 j. b4 T5 M0 W3 ]5 a
  849.             }
    . N0 _/ T' e& R. r7 _
  850.           }+ J6 G& _; k7 U$ @5 B" t" o' n, H
  851.         }* F  Q+ a- W% i1 V
  852.         else
    ! e9 ~6 h1 c* m& o# ~$ N5 M
  853.         {7 D2 r( c8 l( B+ v
  854.           dwStartUpSteps=3;) t8 H. @# M4 J( A
  855.         }/ n% |% o+ j5 e, Q" }. Q3 ~
  856.       }3 O9 L+ ^! g* m! m& e
  857.       break;2 q+ E/ S: K* I  O) d6 E# ]4 B0 _
  858.     case 5:& c# q: W+ b8 ]3 Q4 {
  859.       {( s. u( h' p: O$ L, }& g' T
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)% E  Q, Z4 u: ?4 w# a; U& w
  861.         {6 d' e- v  V; O" F1 H+ u  ?2 n
  862.           int opt_overwrite=1;
    9 R0 W7 j9 \  I3 i
  863.           int opt_do_extract_withoutpath=0;8 O- a" l0 o( f  P
  864.           unzFile uf=NULL;
      A  H+ f$ Q  r6 k  y8 U( ?7 f
  865. 1 {4 R1 _1 T- b( f; B, @
  866.           uf=unzOpen("Wsa.zip");
      |, N8 r8 d% G4 u4 ^
  867.           if(uf)
    . s6 l* N4 e2 \' F/ O9 d& `! d, C& J
  868.           {/ H- p$ r* L1 J$ J+ X
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ! ]2 l  K' t: T* C8 u
  870.             unzClose(uf);
    $ u5 P9 z/ {; G  N
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");* o+ j2 s8 l2 ?! Q- A% E
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");! U& b5 @! u5 c/ X& C; x
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    / w. B5 N/ U9 G9 E% ]) P; d
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% k+ F  u8 K# p; k( d5 d
  875.           }
    4 R/ I$ T* A+ _3 P0 a( M6 R% \
  876.           DeleteFile("Wsa.zip" );  n! m( I' W: y! E
  877.         }/ j. i) f. J1 t/ C# m2 L

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

! e: a& c7 j8 V3 Z

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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