找回密碼
 立即注册

CSUpdate.exe源代码

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

5 q. R4 S* L" O2 |2 K$ c
  1. / RevApp.cpp : Defines the class behaviors for the application.6 o1 K3 e% j. g1 Z/ U3 u1 I& Q2 [$ `
  2. //& z+ V) ]2 P9 q: V" T% Q3 U0 K

  3. 0 q7 @( R' I- ?! I* T$ z' q
  4. #include "stdafx.h"
    . D4 \1 x: u$ x; R! c6 ]6 v/ J! ]$ R
  5. % C. c. @& {# @: ]) h
  6. //#define UNICODE% b- r( p7 W/ K) |5 X- W% r; j6 F9 F
  7. //#include <gdiplus.h>7 ?/ A+ A! c. y* w
  8. //using namespace Gdiplus;
    ( J" V8 k6 n: z/ |0 F5 E

  9. + {5 C! d9 e! \% f
  10. #include "RevApp.h"
    $ I. }! ^2 G( F5 W, w
  11. #include "RevAppDlg.h": @0 n$ S8 _" T( x2 j8 o! L7 ^
  12. 2 D/ _4 m1 Z+ o+ Q9 s
  13. #pragma warning(disable:4786)3 V1 u: |9 j4 \! P& v7 f$ N
  14. #include <map>
    # R' A; T/ K4 x" Z+ V9 A2 g, E
  15. #include <list>  j+ p+ l7 p: B1 N: f
  16. #include <direct.h>
    & S  d# M7 _1 J3 e4 k
  17. ; L" }$ r3 z% c8 }, w" e, h
  18. #ifdef _DEBUG; u" `+ W) `, J/ P# w2 T3 u
  19. #define new DEBUG_NEW
    ! s0 Y  Z9 l. x+ v0 Y" N- O3 u
  20. #undef THIS_FILE
    2 P+ r! M& R9 k+ s6 I
  21. static char THIS_FILE[] = __FILE__;9 K& O, B  d% m0 T! u3 Q
  22. #endif
    ( `# m& K: d! H- C7 \/ Q7 \
  23. #include "SkinResDef.h"' B- f3 s+ f) V- I5 B' s7 \
  24. #include "ChangeBG.h"8 K2 ?" M) j+ \$ C/ H% m
  25. #include "AFXINET.H"2 y7 g2 _7 A* n. P5 C0 X

  26. # J5 z# h. [& U% C1 b
  27. #define TRADITIONAL_CHINESE 0& b, k3 j3 ]$ T$ q5 \& [
  28. #define SIMPLIFY_CHINESE 1
    % Y4 R# n& N# y7 J. y2 N6 t
  29. #define ENGLISH 2
    / v$ H$ J; R% `. p5 K; O8 L$ b
  30. int m_iLanguage = ENGLISH;3 x* D8 j3 }- U' L+ H
  31. /////////////////////////////////////////////////////////////////////////////
    7 ^3 y5 ^$ r4 U- V. B/ ]
  32. // CRevAppApp# b$ r! `/ _5 N7 a

  33. $ Y8 o4 {4 X. U1 g( f- f0 I. f5 ]. p
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)% I6 v1 p& R  a0 W1 K; f8 j
  35.         //{{AFX_MSG_MAP(CRevAppApp)' o$ p. T) \* O4 A9 O8 I& Q1 R
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.- V- |* p7 T( D+ O. }
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!3 G/ y' E( {3 S! B2 W
  38.         //}}AFX_MSG( Y+ [6 [- B# f
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)1 j( N& f5 ^; H
  40. END_MESSAGE_MAP()# |8 ?6 }6 R& U  i

  41. " s) ^) t( I8 U( t5 u0 P" _
  42. /////////////////////////////////////////////////////////////////////////////  ?+ I8 W& E0 T6 |0 W5 L
  43. // CRevAppApp construction
    0 X) N$ A! B9 K2 K& b) w3 `

  44. 7 H0 H0 U( U, J5 d. P
  45. CRevAppApp::CRevAppApp()
    , s  e" c: M6 E) {" b- S
  46. {
    # B: W7 s7 _3 ~+ l( C2 ?
  47.         // TODO: add construction code here,
    0 |- V$ D1 g! n3 K) F6 y
  48.         // Place all significant initialization in InitInstance2 e0 n' I1 V4 r. H7 C5 F
  49.   bDisplayIsBig5=FALSE;& C8 W- g  D7 R
  50.   bRestartUpdater=FALSE;
    ; c; y* s( j4 q4 Y
  51.   bFinishUpdated=FALSE;9 s: `% p; D$ \& E% u4 p$ W7 c+ r3 v
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;+ a) z5 K0 v- g. E  `/ x& }9 o4 z# p
  53.   InitChangeDataBig52GBKS();
    ' {1 G& u3 G' U8 [
  54.   InitChangeDataGBKS2Big5();
    0 f$ E% P8 V, t/ r) c8 R5 f7 ]/ V- n3 i
  55.         //
    / K2 H. R# M  w% o; d+ l- G
  56.         bClickRunExe = FALSE;) U, C1 q1 @: M  I0 M% p$ h+ B
  57.         //
    8 u3 m$ r# b- \$ g
  58. }
    , t; _/ U' R# d8 N" g* F' u1 i
  59. ) M* W# h1 \  G9 D
  60. CRevAppApp::~CRevAppApp(); Y; N  y' k* P3 E
  61. {
    8 ~3 J6 D3 h' d0 H' P/ R
  62.         // TODO: add construction code here,
    6 F$ }- d, Z0 s7 i) c! E* ~1 J7 \
  63.         // Place all significant initialization in InitInstance
    0 @4 d" Q3 `( ^* i4 C# m! F
  64.   EndChangeData();/ B: B1 f+ {" ~/ q+ s4 a1 V$ r
  65. }
    ) e; e3 L" C& f- ?# [8 s
  66. , v/ U( c! _0 _
  67. /////////////////////////////////////////////////////////////////////////////# Q, |' W  z; D% G1 \
  68. // The one and only CRevAppApp object
    1 B& \; O5 \, k

  69. " l  B% Q, Q& t1 c& W9 r
  70. CRevAppApp theApp;0 c. ^; h7 J5 E' T% F

  71. % m$ @+ [8 J  A
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)8 j* }- i: S- W4 D; u2 B
  73. {4 p4 p! Y) X) F& L# _
  74.   int iEOF=0;* d" E" q' T! v, M0 i: G
  75.   char szTempName[MAX_PATH];5 j* I  o( ^4 }
  76.   *szFileName=0;
    # b+ z% y- m  ]4 v1 V: F
  77.   iEOF=fscanf(fp,"%s",szTempName);5 n" V; Q1 B) Q% V) _$ d4 `
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    2 W6 N& M3 I% C( M2 Q5 D
  79.   {
    6 L# H$ [0 h" R
  80.     strcpy(szFileName,&szTempName[1]);
    $ e/ h  x# N2 e& b
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)# i) M1 u7 E' Y; M
  82.     {
    ( v1 C6 g5 r8 K3 ^+ ~
  83.       iEOF=fscanf(fp,"%s",szTempName);" L0 A2 R8 }& p: H  {1 C
  84.       strcat(szFileName," ");# I- B8 R  g; i/ C8 U, ~
  85.       strcat(szFileName,szTempName);( r# \7 q# d- g3 Q6 o! S
  86.     }. K. h6 y! c# h
  87.     if(strlen(szFileName)>=1)
    - N" H7 P  z: [! t0 }( z" D
  88.     {  `4 G' d. ?+ Y/ o
  89.       szFileName[strlen(szFileName)-1]=0;
    + a  \6 o/ x+ Z1 c9 `: E' C7 Z( G
  90.     }
    . ]% G8 E5 K. |1 u3 R0 @* I7 v
  91.   }5 ?/ Z  @, v# h  k5 J, k9 D% v; C
  92.   return szFileName;
    ! p' G( X& B; ~3 w1 v: L: q! T
  93. }
    , i# b3 j# R. |' ], ~8 ?# [6 F  B7 w+ W

  94. / E2 r9 N% N+ c- \( c
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    % d% a) I9 b! z
  96. {
    4 H% }, K) A8 H0 Q% ^/ Q% A& F
  97.   FILE *fp;! x+ J6 S$ {  g" t  t. _6 n
  98.   char *key=NULL;
    " P3 {, [1 ~/ q. y* _
  99.   char version[MAX_PATH];9 F; c5 E) V% ?
  100.   LPUPDATEFILE file,olds;
    9 A& g$ A, r' o' e- z, u; L) m
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( D( l1 s% |" D/ z  }. Z
  102. ! I: n$ |2 A& p( c- g
  103.   UpdateList.clear();$ w8 r  n# h  u% |, g
  104.   UpdateFile.clear();5 Z8 X" }: M! b
  105.   if(GetFileAttributes(filename)==-1) return false;3 Z# u; I6 x+ @  ]3 Q, T
  106.   if(!(fp=fopen(filename,"r"))) return false;5 O/ ~/ T, P9 x( k
  107.   fscanf(fp,"%s",version);
    2 E* f! N! {, ^2 t- t$ C
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    5 r4 S* }) |' C; M1 W- K& T$ y
  109.   while(fscanf(fp,"%s",version)!=EOF)
    0 X2 y5 i! n4 T6 s0 F- j
  110.   {+ C' C1 c  A0 R. B2 @; Z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ I( n) [* |" C/ L) T# X7 S# {! J" ?: u; U
  112.     fscanf(fp,"%s",file->path);! X  A3 E+ I8 O% J0 k
  113.     ReadFileNames(fp,file->file);, n. y' z* p  M6 Q% p
  114.     strcpy(file->full,".");2 }3 J# v9 w2 y' O3 C( Z; E
  115.     strcat(file->full,file->path);
    9 Y9 D: h- C* o4 K* P
  116.     strcat(file->full,file->file);
    2 L! I  [- L, E! U
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    & m1 t$ X9 g2 `" O3 u, r0 O3 M5 [
  118.     {
    5 m. |( l; `, ^0 S( [( E) H
  119.       file->vers=(float)atof(version);3 J9 c  ~7 L! f& a' c
  120.       UpdateList.push_back(file->full);3 {' C6 W3 l: \: R, h% A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));" Q% s! B9 R2 J4 ~) [- Q- m
  122.     }
    4 p. R& y" Y4 n' t; x- Z0 J
  123.     else! `$ \8 ^2 ^4 {7 y# b0 t# J
  124.     {
    + G: S5 D! u* X+ Z" C4 S! B" C
  125.       olds=(*p).second;
    5 K, R0 S/ f* x2 o' v
  126.       if(olds->vers<(float)atof(version))
    7 B' J9 h  N4 b4 T0 i% z6 f' f$ g
  127.       {7 ?" `* A$ ^9 ^0 I* e6 J+ L
  128.         olds->vers=(float)atof(version);
    % V8 T, r( E8 }8 k- G
  129.       }
    0 W8 [* ?6 |3 r% m
  130.       free(file);( V2 k! V7 n  `2 W8 L& \0 s! d
  131.     }2 D$ l" ?( ~8 h8 U( @( O
  132.   }, f/ ^1 G+ t7 s% r- n' g1 |
  133.   fclose(fp);
    8 }& s, `% S5 g1 X( @
  134.   return true;# f/ P$ c$ M# ~* s5 d
  135. }6 L# }: J& H1 ^6 `. L/ R, ~
  136. / C" R2 x# \1 ]5 @6 H. z% M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)! T; u4 J* p3 J/ P* j8 C" d7 h( I
  138. {) U. Z  d; e5 t5 j6 H6 f4 A( g$ O
  139.   TCHAR  szFull[MAX_PATH];
    " P8 O: }1 u: X5 U2 P) a+ P* g
  140.   TCHAR *token,*inter;  _' ]* R0 X# G- _
  141.   *szPath=0;8 ^8 A% k5 }1 Y& P6 R% T
  142.   strcpy(szFull,szFullPath);
      P$ E- @9 [, c2 |0 Z3 w. i3 Y
  143.   token=strtok(szFull,"\\/");
    & H& c2 L7 d7 i/ s
  144.   inter=token;  g6 u* h$ A) |! Q7 V/ n* O
  145.   while(token=strtok(NULL,"\\/"))2 s7 O7 P+ b3 G! p% p5 A& E( A
  146.   {* `5 ~+ @: ^7 f2 X
  147.     strcat(szPath,inter);
    8 P& p4 m& ?* P; a
  148.     strcat(szPath,"\");. _1 [( r  f6 X+ i
  149.     inter=token;
    % s& ~+ w* r2 Y8 ~. H; F( I
  150.   }. N# q- l8 S+ j* C( E
  151.   return strlen(szPath);( K, A9 ]9 R) G  k4 ~& K# w# |
  152. }2 v# b: A8 e' p
  153. : E3 N) M( E" \1 e- O
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)0 N4 o# m8 {+ S- u5 L. |' t& t) C7 E
  155. {  K. w& I7 Q8 D- W" l
  156.   DWORD attrib=GetFileAttributes(Target);
    ' S2 S1 L7 A8 U; E2 i  o9 Z1 o
  157.   if(attrib!=-1)$ E. `6 |2 o% H7 s+ ^1 Z5 I+ R8 U
  158.   {
    ) T0 Z9 Y- W1 b7 q! i, x0 n
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))6 [  q# I- ?& V
  160.     {1 y' u- ^8 H7 Y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    6 V" i' U$ U/ N
  162.       SetFileAttributes(Target,attrib);/ \+ H5 |- P+ O; C
  163.     }
    " z% {6 ~. f# [! m  ]/ k  ?* Z3 s
  164.   }
    % c, D+ X: R: Z' d" ]' o
  165.   CopyFile(Source,Target,Erase);
    ; j4 ~+ d0 N/ ~2 i0 N. r
  166. }, ]1 Z* y: c0 ~% X6 u& m! ?4 }

  167. + U' s; k7 {- \
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & `' u; L5 R1 c* ^$ R
  169. {+ O( f, L7 C! Y1 s1 B% J
  170.      FILE *fp;
    + y$ f/ `0 x2 ?1 |) R
  171.      char  szBuffer[8192];" k; T+ T2 T" Z
  172.   va_list  argptr;
    2 X, M; h$ q( h/ z6 G6 \! ~

  173. " H( K6 a2 p% D& y8 j* }. Y
  174.         va_start(argptr,message);
    ( c3 U( E4 C. u+ ?1 _) n# L
  175.         vsprintf(szBuffer,message,argptr);  r; B$ P( p9 C5 n: I( \
  176.         va_end(argptr);
    5 g2 ?( g' x) n/ Z/ }+ J
  177.   fp=fopen(FileName,"a");( K8 ]! g. g, `1 L, F
  178.   if(fp). X* f9 C& R; O6 g; j5 }
  179.   {0 R. W! M! j& ?* }7 n$ i
  180.     fprintf(fp,szBuffer);
    0 S$ ~+ R3 s/ U1 S2 e- }& [2 F1 b
  181.     fclose(fp);3 o; U2 x" u; J
  182.           _flushall();0 u/ f8 D4 ^" C- {
  183.   }1 \! E, d3 }6 q' m9 G, Z$ b* X
  184. }
    2 O. v% Q9 D5 @; q5 ^5 t( {( }

  185. : @; F. h+ M# l/ S
  186. BOOL CRevAppApp::Fclearf(char *FileName)" w& x- c% H2 V! e" r
  187. {6 A8 ]0 Z  i  M% u# `% U0 f3 C
  188.      FILE *fp;
    $ F- v* }$ Y, d% z8 E9 S
  189.     DWORD  attrib;
    2 X  j5 B8 F0 K' l+ U
  190.   attrib=GetFileAttributes(FileName);/ t' G' u: E0 o- X8 r
  191.   if(attrib!=-1)
    , F# \( q8 T4 B2 ~0 p
  192.   {& `( T! B- I2 E) P7 |
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);* p6 O9 c: t! e; R
  194.     if(!SetFileAttributes(FileName,attrib))4 `; R7 ?/ X6 d7 B# |7 k
  195.     {
    ( U& D' j0 S7 \; z6 X; N1 W
  196.       return FALSE;
    + D; r2 j0 H" x
  197.     }
    5 H% l5 f; h+ M) C- Q
  198.   }
    1 N5 l" r, U. u7 k+ b
  199.   fp=fopen(FileName,"wb");8 M, L1 ]- \4 x$ Y6 A
  200.   if(fp)
    , o2 W9 {, _; B! a0 a5 e  G1 x
  201.   {
    * g( [; m! Y6 H7 H+ ?. ?6 A/ m' P
  202.     fclose(fp);; l# Y0 ^7 M+ B/ l$ \1 B
  203.   }' K2 ^3 E8 `. c; ^5 q
  204.   return TRUE;
    . A: O! W  t3 l
  205. }. N! S4 I- ?( H" v0 {. y
  206. / P1 n  d  b2 a* W
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    0 r* l5 n3 }2 A; z- J2 A3 F
  208. {+ N3 ~5 T% W" N- B4 [' \4 S
  209.   char filename[MAX_PATH];8 |5 {7 E4 A) S. L1 l
  210.   LPUPDATEFILE file,olds;$ ]: d  m% f6 G+ }8 y
  211.   std::map<int,CString>::iterator i;, g- r$ ~9 O- u6 |( `# K2 C4 b
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 |" n# C: g: r2 p& a
  213.   std::list<CString>::iterator l;: }' z, V) g- e. Y. j
  214. - I0 S1 t0 [5 m
  215.   if(bFirstUpdate)) J: x2 k, ]" v8 K
  216.   {
    5 C! j$ B2 r, r- i7 d1 T2 ~7 X
  217.     dwCurrFile=0;
    ) T7 F; ^( f% z% U
  218.     bFirstUpdate=FALSE;
    . b3 t6 w$ _0 ?4 C3 L( v( P. a
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - W" ?% U. s7 _- t9 Q
  220.     {
    $ v/ d% H# I. j& q/ R
  221.       dwTotalFiles=UpdateLocal.size();
    9 {+ Z0 Y, X! y4 A* L8 a$ W5 r  D
  222.       dwDownLoaded=0;
    : Z( _' ^) i4 X8 @" @* o% }% B
  223.       bSilentStep=FALSE;
    , g7 w6 ]0 ~2 e4 b# u* u
  224.       bCompressed=TRUE;
    * t( _+ e. a1 m+ p
  225.       strExtLocal.Empty();" Z( d; {1 Q3 v5 d/ w
  226.       strFullName=(*i).second;0 N" K+ V2 M* x( F5 v
  227.       dwProgramState=AP_CONNECT;
      d/ O, P: U' ~
  228.       return TRUE;
    % _! _/ }( s" }( x6 s1 v0 w: ~8 N! x. ^
  229.     }0 J5 f. j+ k( C7 j9 `
  230.   }
    ( m  {" m' G5 |0 M; @% U% }
  231.   else if(bRestartUpdater==FALSE)# ]8 t, n$ F+ N8 V
  232.   {3 E$ r3 k$ T7 X. }8 @
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())  S1 U$ o" V. Z9 W+ ~3 U
  234.     {* O3 {& ?- u* R  P* K
  235.       file=(*p).second;
    / G, A+ P2 J* v; ~1 w+ }9 K3 _
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())9 V" k/ Q! f7 c. H& N; E
  237.       {% ^3 V$ j4 f: l% _) |+ |
  238.         olds=(*p).second;# J" t. @2 w( y( T% ~. |/ _% g
  239.         olds->vers=file->vers;' F0 c1 j( X0 a7 E" S( C
  240.       }
    ! X/ A9 l+ n2 }, e  g
  241.       else# p5 Q" G, E0 c  [  H7 J9 ^, I. a
  242.       {
    ; ~! [! O: Q( b
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- N8 V0 H8 k1 ~1 A4 p6 |7 t
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    2 M' M6 ~: J" M  E8 M
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    3 Z; z6 p. j' B
  246.       }1 Z" B8 u2 N4 E" S
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    % N' ]/ B5 N4 [
  248.       sprintf(filename,"(%s)",file->file);+ @" g2 }. ~. k$ N5 N, d  ?$ F% D
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 Y( e3 L2 X8 ~  u
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }+ @9 Y5 q- ^6 m0 T$ q& y; ]
  251.     }
    % L% \6 k1 |, w. y
  252.     dwCurrFile++;
    2 H( }2 f& d5 S; g& J: q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): @- P; C; Q/ S
  254.     {
    3 W* [4 P( V& t. C, v
  255.       bSilentStep=FALSE;
    * y7 N6 p+ i; G& O% w
  256.       bCompressed=TRUE;
    # m6 p- }) q6 c3 u2 d. ^" E
  257.       strExtLocal.Empty();
    : i" t" O$ q% C3 [1 y' e8 z4 M
  258.       strFullName=(*i).second;
    # u! w4 ]+ S" e9 V- G
  259.       dwProgramState=AP_CONNECT;
    ) h% G- o% t" P1 K$ E
  260.       return TRUE;9 g6 F0 J; T6 M2 d" [, r/ k- H
  261.     }6 q% ~' x* x8 [7 V. S3 n: ]
  262.     if(!bRestartUpdater)
      _# y' y$ R/ m+ `6 z: {/ K0 ]2 F
  263.     {
    & b* E+ {3 E, Z" P
  264.       int iCurrSize,iFileSize;
    % C7 f5 I/ G3 E; n+ L6 K
  265.       iCurrSize=0;1 T* S5 g- h/ {1 K% }
  266.       iFileSize=UpdateList2.size();' c6 Q0 A. M$ X) u
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    : \9 N& |" g5 |8 S# z  e3 C
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    9 c# s# V9 j9 o1 x( Y, i1 p
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");5 h) }# f2 I, \! n0 J
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; a8 m) C: t6 h* ?' c2 p
  271.       Fclearf(".\\update.dat");- p3 B9 _8 A+ |$ k& ], U
  272.       Fprintf(".\\update.dat","Bloodyf\n");" s9 \2 Y. ^0 m+ G/ W# a& d( H) i
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)6 I% W% w& u4 h; H; B2 ?" g
  274.       {
    ! M$ [4 u- {' b6 m" Q6 p
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    - W) @* C5 V- Q' ?0 X; L
  276.         {+ D. Z2 e% S4 z3 f
  277.           file=(*p).second;1 k5 j" t8 p; E4 E0 o# F
  278.           sprintf(filename,"(%s)",file->file);1 K* J2 F4 X, o6 K
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      {2 W  v( F- s3 [& _
  280.           iCurrSize++;
    : z- [1 O* d- r1 }7 e7 w
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));, G# ^' v9 e5 T0 @* Y5 m
  282.         }  U% A, R; |4 P  W$ E+ s' J
  283.       }
    / L2 J$ @  l3 ]& w
  284.       unlink(".\\update.txt");
    ) l* h* N, F8 A5 p$ m
  285.       unlink(".\\update.tmp");
    0 b" T* p4 P/ W. }) }! Q
  286.       Fclearf(".\\checkversion.dat");# o  K2 k1 W7 P" \. G3 U( B
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    + X/ _) j" P- c% R4 p! k
  288.       if(UpdateLocal.size())
    ) {  c& o- n3 x* ^
  289.       {' Q5 U  ]. v4 C- W! N) _& k
  290.         UpdateLocal.clear();
    5 K4 y' ^8 J2 x5 R) z( [
  291.       }, L( S9 R# o6 O7 p9 o/ a4 q
  292.       if(UpdateFile3.size())
    & N4 g0 G2 R4 h; a+ k' C; v
  293.       {
    1 o* ^) I! _3 Y7 q$ o* t( G$ p# z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' b9 n1 ~- s7 F* ~  ]# o( t! b+ k9 W7 Z* `
  295.         {: K3 p. m1 ^8 L
  296.           file=(*p).second;
    4 t; D. N# u( g  r5 o
  297.           free(file);4 T" S: }6 e$ r
  298.         }3 \9 \' F0 [* B6 f& I* d: E" H* h
  299.         UpdateFile3.clear();
    7 I: q) Y4 a0 c, F
  300.         UpdateList3.clear();
    & r0 I& b9 @' V3 b  m: J, a; p
  301.       }
    & E" X- z) ?- _% O$ E1 i! H. i
  302.       if(UpdateFile2.size())
    4 ^5 Q- f) m+ g1 r5 ^  n5 [0 W
  303.       {
    7 {+ c$ c3 v: M; _) V" ?) P' }) w9 j
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)) [+ G- ]) o6 K' r4 {! v3 |- x
  305.         {- C. X9 g$ b9 x, _$ y+ Q, v( S+ ~3 t
  306.           file=(*p).second;
    & }( a) o( n: o5 m+ K& W: f: u1 ]% A
  307.           free(file);; \4 ^' U. ]2 `* b7 c2 ?) e# _
  308.         }, n& Z8 w$ J7 L# Z9 x5 _
  309.         UpdateFile2.clear();) d. P2 A2 x2 K. f+ z0 v4 s  E
  310.         UpdateList2.clear();
    ) ]3 K: ?/ r* ~) W, X
  311.       }
    0 ?8 W: M  B  l* F/ R
  312.       if(UpdateFile1.size())
    . |9 t7 M& x& f0 P5 {8 _+ O6 Z! S
  313.       {7 q8 n1 ]/ {5 s- N0 o$ {
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , {. \9 c6 }- z) N% r2 n
  315.         {
    7 j" ^" D" l& e
  316.           file=(*p).second;
    ) E% l8 l5 W( m8 M4 _
  317.           free(file);, O! U' {8 n2 b! p5 f6 s7 b- m) S
  318.         }
    & _& q0 H0 t3 G% f, b
  319.         UpdateFile1.clear();
    + Y2 s  ?) X: d& S. K8 j1 t8 h) I
  320.         UpdateList1.clear();
    . E! q) {( c, u
  321.       }
    0 o8 L+ f" ]+ T, l% p, D
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));$ U* P1 C/ V1 O8 }$ [/ X2 R
  323.     }
    ( c6 b/ S/ \5 U+ H5 ?4 z" ^
  324.   }
    & }' P3 X% X: o1 Y5 `" W3 x/ y; w& l7 y
  325.   return FALSE;
    4 g4 I. _& y; z, @1 h
  326. }, N- ?6 l2 l' n9 n
  327. ; b% N0 w+ O" x* n1 g& C; [7 c* ^2 g6 W
  328. void CRevAppApp::ClearAll(void)
    + U. U; [  h) Y5 Z& Z1 E
  329. {$ ]+ }6 D9 a& X8 U, z( F' h2 D
  330.   LPUPDATEFILE file;
    , ]* _+ e6 d5 L! C& u
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    + d7 g, O9 c* }  `+ V' m
  332. : g0 W! g) _: d. m: a
  333.   if(UpdateLocal.size())
    ; E& w, _, O' X& Q& ^/ u8 t! ]" H
  334.   {
    : Y; D  o6 A0 }6 _" W
  335.     UpdateLocal.clear();9 F) |: P9 k2 X$ `6 e8 r
  336.   }; O' Y+ s: \* X* o/ [
  337.   if(UpdateFile3.size())  t/ u0 j+ L" F$ P
  338.   {
      n( L7 O( P+ ?) q$ g( O0 l
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . W7 h3 J% M  I$ L) w. M7 X% t* Y
  340.     {
    + o$ u4 h8 K6 l
  341.       file=(*p).second;
    - [$ g; r/ m7 ?1 u7 Z" M0 S
  342.       free(file);
    , f- e9 }& ]# h, @& ?/ _  F8 V
  343.     }
    . M  M3 ^4 S9 O6 e6 P- V. s9 l
  344.     UpdateFile3.clear();
    ( {" P& ^) X$ v. }, X8 B
  345.     UpdateList3.clear();( i: I  }( {' L' ^
  346.   }/ U, p9 q+ i  N1 V
  347.   if(UpdateFile2.size())& y8 y# y7 B) x% m) i
  348.   {
    + ?7 e1 S2 G0 D8 w+ g5 J
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- V8 P$ F% O1 C
  350.     {
    & U( b$ x# c$ a+ T6 ]
  351.       file=(*p).second;
    ' s, r0 P, l' e7 E! r
  352.       free(file);- S: n, i; D: i; Q, r
  353.     }
    9 {1 {4 L! }* T( x( f& u, s0 l
  354.     UpdateFile2.clear();: H. I, m4 x. H4 H0 ~. w; i: B5 V- x
  355.     UpdateList2.clear();
    " i2 P3 l1 s& F7 z
  356.   }
    0 F. v3 ~& z$ u
  357.   if(UpdateFile1.size())# L) p7 b+ S7 K5 ^3 Z" n! |
  358.   {2 o9 \$ v! h* e0 L  a- s/ s
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% H* Q& X; x$ N( Z: P( s; E
  360.     {! P' b* R# G: U8 e, Z
  361.       file=(*p).second;/ |  Y& p; _6 L
  362.       free(file);
    - w; \) Y& R& }( i  V% X
  363.     }5 t+ b- t6 n2 b4 a5 s5 A
  364.     UpdateFile1.clear();( s; ]: ^) E. U8 }7 Y5 c
  365.     UpdateList1.clear();
    # g7 h5 |2 m6 ~) T& ?
  366.   }
    ' i, |% Y( ]/ h/ ]4 d5 K
  367. }  , e: E/ d: r" h3 f4 R3 g  N3 {
  368.   6 s2 T0 V  h" \- h
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    2 L2 p% N& w/ M0 B0 a
  370. {
    $ G; O9 G9 r1 Y' k% U& z, o. _! y
  371.   int c;- X9 p2 g8 V7 M% s% |
  372.   LPUPDATEFILE file1,file2;  N9 {* W% R8 s1 P) ]5 k- k
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , E! ^: q, H" [9 K9 E' f; f
  374.   std::list<CString>::iterator l;0 o( V8 g" V( s( F3 g% N6 @+ B
  375. * D8 S( G* @& d" L3 f: Y% J
  376.   UpdateLocal.clear();
    : D( M! ~  N, g  S
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);4 W! b' e' ]& [8 W
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);6 S* v2 q. H0 [" H7 n
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    4 a6 x8 y! F* D" @) J8 R% T6 \- s
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);1 A! l, a2 J0 [
  381.   if(UpdateFile3.size())3 z* f9 ?$ ?6 c6 O6 ^2 G( i% N
  382.   {
    ; l0 \6 @7 h( |0 T  s
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    9 y6 [. @; @2 K# M
  384.     {
    2 p; p+ q6 Q( D& {8 k  @- G
  385.       file2=(LPUPDATEFILE)(*i).second;
    3 j8 D- |1 X2 j: P% }4 r
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * r8 N1 ]* V, M* f# J
  387.       {
    0 n! Q( ]# c4 J6 D+ E* k& g# `
  388.         file1=(LPUPDATEFILE)(*p).second;, X" o- b8 R6 P  `* D
  389.         file1->vers=file2->vers;6 M) d2 U3 ~- l- C9 g6 I+ K
  390.       }9 g% X# Q4 M, Y6 A9 B
  391.       else$ a+ _' b- f% c1 ?
  392.       {
    9 o- z* u3 x) v6 R8 R- a
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# S+ |. j8 E" j; c4 o2 `# ^
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    : Q% n3 t$ L9 C: \; N
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    3 u  U) S! l. c5 \; p- i* H4 D
  396.       }
    . ?' r( q# s/ W; R% R+ d5 ^
  397.     }& v* r2 R2 g) B0 N
  398.   }4 q7 s4 K- |: C8 \( U
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 `6 p5 w& T" b5 R) w+ ]& v
  400.   {0 X, x5 K  D2 X( j4 J; k
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    . `% H+ B% ]* p4 e$ Q- p9 ?1 l
  402.     {
    : Y+ v9 i7 p9 u0 F# y* v! p  J& m
  403.       file2=(LPUPDATEFILE)(*i).second;  Y7 E1 B3 Y; `2 ^0 r& I! T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 K+ S  `6 h2 @* U
  405.       {
    ' I8 Z3 p3 G  v. X  ]- z
  406.         file1=(LPUPDATEFILE)(*p).second;
    % y6 p4 \3 K# m' ]
  407.         if(file1->vers!=file2->vers)
    " Y6 R% l) [; i1 S5 @2 S
  408.         {* a2 w2 E* w1 O# q$ d
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, G2 S1 Y4 {$ Q3 u9 r( u, Q- t
  410.           c++;
    $ n% n& K! k3 g, @$ Y% P
  411.         }" B, s7 {  ~5 x4 Q. v8 `
  412.       }5 d  G! N. z8 A5 H! b" f( d: B
  413.       else
    : z7 j$ Y: H/ L
  414.       {6 A0 E" k2 ^. J; C$ A0 r; w- u
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' G8 R7 u# s& [3 n2 L
  416.         c++;. Z! t( G. [+ |, Y
  417.       }" [# }' Z9 ^6 x% B' b
  418.     }
    ( J+ d( U4 Z6 B) E
  419.   }
    ! e. A4 y: i+ ^: C: O
  420.   unlink(".\\DownLoad\\update.txt");- p( L3 V' f2 V5 y5 L
  421.   if(UpdateLocal.size()) return TRUE;0 o/ z- Q: K& M3 r2 Y9 \# a. z
  422.   else                   return FALSE;8 z5 f' d# U5 J
  423. }! \* |$ {7 t0 Z8 ]! o

  424. 1 B. d/ J) G3 F4 p" ]
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"2 ?0 Z( \& J: z# R6 B& h: Y/ S9 @
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn": R. q  ?) Z5 m6 g3 Q: H

  427. ! a4 A) a! n+ _) p
  428. . i9 \* j. B9 C" Q( r7 v
  429. 5 q7 s* J8 z- E& \  Z0 X0 h2 L' ^
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    6 v1 e, b0 q( {  H/ n9 f$ G3 d
  431. {( L- `9 n) k6 h4 c" `( g- b
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    # I8 b0 P* C  p
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & L6 \7 V' r$ f4 F0 H% q* Z+ }
  434.   {
    8 g3 z; b5 w$ K1 k" D
  435.     char szLanguage[50];
    % M0 _( k8 v2 c- q' P9 V* a
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");4 f* F. W( _1 _: |/ w/ M8 h
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 u  B# @9 I& F6 }
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  h  ~6 W  c! Z5 C! T" E! J6 Q  e3 U; t
  439.     else                                   m_iLanguage=ENGLISH;; [2 A/ n" X, x7 z6 j" Z
  440.     char szRegister[100];
    ' }6 k+ O8 g0 L' A/ H. c. a9 c
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ; J0 r) w) T% x& ?. f
  442.     strRegsName=szRegister;
    : I# Q$ t! ~: @3 y
  443.     char szPatchURL[100];
    9 u& S3 f0 t5 L: \- j4 f: S
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 `4 q8 T5 {# @- R5 ?
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) k( V6 D0 i2 [+ G$ I% R- z
  446.   }
    $ d: J7 U( `" {9 |
  447.   else; G1 o# O3 h8 }2 D9 e! \+ _+ D: c
  448.   {3 ]; L" J, A( ~9 d5 o  N
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ r# X, t# Q/ y( `% i/ K6 }, Z
  450.     strRegsName=DEFAULT_REG_URL;' A/ |+ l0 k+ h  \( W3 E' |+ v
  451.   }! T  J$ y4 Y9 q
  452.   if(GetFileAttributes("hosts.ini")!=-1)! X4 @% Q% h: Z" s: M) k' G
  453.   {
    # k( ^# D* N/ k# o
  454.     char szIP[50];. n2 ?9 d7 b5 a9 ]4 D9 N9 [7 g
  455.     char szDIR[300];5 @. R+ v4 N) S0 ]/ d+ A  {
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")). B: w9 E. h( B" I( \0 Z% o
  457.     {* K  P& o3 f0 u7 m
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    * C# L6 q8 R) R8 e7 U
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    7 R$ e8 u1 ^, N% [
  460.       strHostName=szIP;
    . {! @6 w6 U# n) c( W
  461.       strHostPath.Format("/%s",szDIR);8 z' a. Y" t; Z
  462.     }3 R# b) Q3 _/ C' [( I7 e
  463.     else
    8 k7 v! ^4 E- Z; e) t) S% q
  464.     {
    5 ]7 Z' B& v) n. B& ~
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 o+ `- ~* r1 {# Z, t
  466.       {$ D( p4 L' l- a- ^6 `9 L2 m( T
  467.         char szLanguage[50];
    - t, }1 O8 g& p: N
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    $ M, {6 |& M! T% h+ z% z$ r
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  r) V- s) V$ z( ]2 Z
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 r( I$ \- E) D
  471.         else                                   m_iLanguage=ENGLISH;
    ; n0 n$ A$ j$ Q9 w% }! a! }' x5 ~
  472.         char szRegister[100];
    3 l$ w3 @5 L& Q; E
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , A' i! N, Z& k5 t# {, [8 f
  474.         strRegsName=szRegister;# w) S* I& r  r( w" L- N
  475.         char szPatchURL[100];
    & u% l" Z" q( S. D) }: n* d- h" Y- D
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 M) D+ X( f& [/ @
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      D3 s; m% u) D3 ~
  478.       }6 v& J4 D- q/ |
  479.       else% Y: ]1 J/ v3 a: ]  Z1 J
  480.       {! b; U1 {1 `; |9 \$ R+ G1 D3 h% D+ B: ]
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' w/ U- E) P) F3 l
  482.         strRegsName=DEFAULT_REG_URL;
    # V; o$ B6 @: d
  483.       }! _1 w4 Z0 c; t6 u8 b
  484.     }
    ; m; i5 O6 @& \7 q7 `" E3 L1 S
  485.   }
    5 I. l' v7 n$ @$ k! v5 a1 L
  486.   return true;( B0 \) h$ J: w/ I
  487. }
    % e( U7 S% l/ H, r0 O% W+ J
  488. / O6 m$ f( ^, m2 I( a- k
  489. #include ".\ZLib\unzip.h"
    % n+ Y( X; ?; M% l' y
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    1 Y, y1 |; w! Z
  491. /////////////////////////////////////////////////////////////////////////////
    ) H, W+ A  S7 `
  492. // CRevAppApp initialization
    # J) b& B; {4 U' m; @
  493. & g6 ~+ h0 ?# Z0 B8 S
  494. BOOL CRevAppApp::InitInstance()7 X7 V! U3 D) ^" i
  495. {
    , l: N8 @# `1 t/ E3 n5 ^6 Z3 L4 s
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ! N. p) V8 A. E* \- a. Q& _

  497. 1 S, f9 m0 ]0 g1 G  w, P# {
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);9 C! H9 @5 j! W  }, C6 C/ r
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))' n* @- t4 m. W2 F; C+ L% f( Q
  500.   {
    7 }  g. M) B, D
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");  J+ ?8 W0 G2 O; X# k( i* V0 B
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: L- D1 Z$ i0 t8 k
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ; U' j- \" ^# A$ U3 ]
  504.     {! h) f( w7 ]1 I$ v/ Y# b
  505.       strcpy(szPath,szPathTarget);" j8 J7 L9 s' {+ I
  506.       SetCurrentDirectory(szPath);
    7 g1 C! ^% f* h# j
  507.     }6 c# z$ J7 w9 ~- e# V2 d9 ]
  508.   }& _; \6 f, p& b) Y
  509. #ifdef _DEBUG
    ; \" g5 ?* u: i7 L2 o* c& o
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % k$ d3 Y( Y2 n$ v% l" h
  511. #else7 ~* U+ c. T1 L& U" t
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) H% k& c$ ]* |9 z6 S- t
  513. #endif
    % R1 L" x6 V6 q$ T
  514.   {2 z7 G' L. d3 w' C
  515.     char tempFileName[MAX_PATH];
    1 ^* G& r: l5 V7 c
  516.     strcpy(tempFileName,szPathSource);7 ?. b. Q/ i7 c: b4 w
  517.     tempFileName[strlen(szPathSource)-12]=0;# a7 L" O% z9 s$ X  m1 y( w9 \: @
  518.     strcat(tempFileName,"\\$CSUpdate.exe");  U8 R3 i: @" l" `9 n# z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);' }% l. {8 _* a* {- J
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);) j# t5 |. B" v$ ^" H0 G  F
  521.     return TRUE;" f! W( l- t' E/ j
  522.   }
    $ J- x2 _- O5 U4 m$ P) f
  523.   // Nuke 0118: Delete run.exe
    - m  N* N' h3 a7 q' ?
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    * _" u8 P# Q* d9 }  e( Z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    " [% \5 ~9 I0 f) v# d
  526.   if(!ReadCfgFile("Config.ini")): M; l( E2 h+ N  G1 a9 T/ {0 I
  527.   {
    0 W. u/ T7 v# s
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);7 s) Y. S1 l6 F/ w8 P# n; M
  529.     return TRUE;
    ! w6 \5 D: m+ J+ `$ ?' ~( |% r
  530.   }
      h7 I) ]- A. M/ Z
  531.   HANDLE mutex;
    # N9 N' R. X  E  C1 G1 n4 m4 @
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ' S! o4 I1 f0 c) w7 ^% m. [
  533.   {' O  W) ^7 F( [/ E( x
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    $ j( g/ {9 Y5 r! |. b
  535.     {4 {: Z( v' M7 l7 X
  536.       CloseHandle(mutex);; l+ H. j1 `( S9 x% q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);$ d; Q, d1 M5 }5 H2 r" R- h
  538.       return TRUE;$ N! l/ h2 M3 X6 v
  539.     }
    5 {' _* @+ R8 a. _
  540.   }  ( L2 {( @' l% p! ~$ ~. @# l
  541.   CloseHandle(mutex);
    . g* `) O" v) w( u" m; b0 Q9 E
  542. ) E8 d6 O& z$ ]; y2 P" [
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    # ?( T$ q* \7 n- L" r! q

  544. " a9 t: ^- g! Z+ v
  545.         AfxEnableControlContainer();
    $ T% f' @1 w6 x5 v  f
  546. / Z, A6 i1 r/ ^1 E2 J4 p
  547.   bCanUpdate=FALSE;
    1 F; x+ e$ m2 N2 |7 q) S! p( d  q
  548.   dwStartUpSteps=1;# P$ H$ a5 D4 M5 G" ]# J! z
  549.   dwProgramState=AP_NOTHING;5 k# |& O  L4 f0 T" v0 M
  550. 2 |* H- }; D! E" s% @+ m
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);/ A( d0 K9 z% c0 a. r
  552. 9 [& ~5 ]( q4 H, ]9 q. Z
  553.         // Standard initialization( _2 a$ ]: v% _8 A6 U. c2 X( a1 r
  554.         // If you are not using these features and wish to reduce the size0 O8 X2 o& {) l3 {) N
  555.         //  of your final executable, you should remove from the following% R2 v$ \6 C' U  M; [
  556.         //  the specific initialization routines you do not need.( O: c2 a- _7 n! [

  557. 9 S6 U" I4 Z" ~; S
  558. #ifdef _AFXDLL1 J/ Q- \( L/ j; t9 {; ~. _
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    9 S3 _- s) z; Y
  560. #else$ O. Q' C7 I2 Y6 {
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
      J* \2 `: r1 t
  562. #endif( q& e: j4 [' ~" U

  563. 8 Y# a$ i5 Y% Z, D0 N! j
  564.   dlg=new CRevAppDlg;
    / W7 l' H; t7 q. H; ]
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    . i; B7 F/ A; [4 Q+ l
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    & i. ?* R3 J7 O& T% T% k0 E- B
  567.   m_pMainWnd=dlg;- P2 Q3 ?) e7 N0 O1 _
  568. 8 b4 p+ N" w* x! w- [9 B# S  L
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);; A: A7 I4 e! L3 f' Q9 o: r( a

  570. : K/ U! f4 d- k) x" O* [
  571. //  GdiplusStartupInput gdiplusStartupInput;
    * E- w. L7 t5 ]
  572. //  ULONG_PTR gdiplusToken;
    ' N6 s/ p* ^, [/ t8 h6 b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    - z: y6 d; e' f9 t! {
  574. $ c7 C8 K# }& B2 q5 c
  575. //        CRevAppDlg dlg;
    ( w3 b+ y; y$ d4 b
  576. //        int nResponse = dlg.DoModal();
    2 s9 s  V0 N) z. {5 ]
  577. //        if (nResponse == IDOK)7 }# z* T& }, F* _
  578. //        {' x! V5 {) E5 S3 R3 Q" F/ J/ i
  579. //                // TODO: Place code here to handle when the dialog is
    4 o1 k" j3 r' `7 F6 X" e
  580. //                //  dismissed with OK
    + e) u1 @) _7 e2 K/ ]+ o  i
  581. //        }
    $ u6 n8 H& g" k6 Z
  582. //        else if (nResponse == IDCANCEL)
    2 S8 v' ~! Q: e! S5 M3 P
  583. //        {/ S- i% @. U9 J# q/ h  Q
  584. //                // TODO: Place code here to handle when the dialog is7 ]) w0 h/ D% v' i! O2 C
  585. //                //  dismissed with Cancel
    $ I( y# y: F# ^9 G4 W% M! q
  586. //        }
    ; ?4 h: Q4 r4 W3 w
  587. / ?$ z) y/ v2 @" O) s- y
  588.         // Since the dialog has been closed, return FALSE so that we exit the  J* j2 z9 o) J. T
  589.         //  application, rather than start the application's message pump.  M  c4 n% E3 O9 ]
  590.         return TRUE;$ T( d8 |5 g4 ^. E" w
  591. }
    ) V" S9 b" b' Q( k1 B) n

  592. 5 G" x1 |9 c7 R" B3 _
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    9 W3 F& B$ x, y% I( G  @3 q9 Z% D, Z
  594. {1 v, D/ Q/ r& K
  595.   int i;
    " k( ]( H+ \4 z+ e5 M
  596.   char *szRet;, j8 u6 E6 l+ A

  597. 9 u  d, b  ^7 W7 x/ ~$ T
  598.   if(pSource) { itoken=0; sztoken=pSource; }; B3 O4 Z' `" V4 u+ O5 I4 @
  599.   if(sztoken)( n$ Q% w$ R" f- C: J- j- G
  600.   {2 s) K/ y" T  l8 N# R& ?
  601.     szRet=&sztoken[itoken];
    1 N! [: c4 x" r7 E: r, s) j) Z
  602.     while(sztoken[itoken])
    * [1 h  i2 a& Q) W! A, b, C
  603.     {. k6 u$ M7 ~/ o: a
  604.       for(i=0;i<(int)strlen(token);i++)
    - c8 f/ o+ b) ^4 k, Y! C
  605.       {( o; |" r% i: q, h4 W4 @% `
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 R, u! G0 ^# D6 m$ z- W8 q0 ^/ u( C
  607.         {
    ! r0 j% r% a) c: ]% ?
  608.           sztoken[itoken++]=0;  H2 Z' v, e* M4 a( O9 w3 J) z
  609.           sztoken[itoken++]=0;
    % w& V) C' v' p0 `' a. w% S2 p; T$ s
  610.           return szRet;
    $ Y- b  \& G# T. N/ [0 N
  611.         }
    : ?  k9 G4 `" ]' D
  612.       }% f: T8 K: F0 Z% X, U+ k0 ?! D6 S
  613.       itoken++;
    0 L3 I& @- M4 k2 Z5 {& P( J
  614.     }; \3 o% v3 n5 `5 g
  615.   }3 Y9 m" N2 ]0 Q: m( O
  616.   return NULL;9 U. k; X5 ^# u' d
  617. }! {( U3 V# c2 n" b) y

  618. 5 p- O  T% v2 }6 _" L: f) Z) g9 a. O$ Z
  619. void ProcessProc(long Total,long Current)- i' ?$ c6 Q& o2 w- D5 F* J
  620. {
    & h3 e. q; [& L2 s% F- k
  621.         MSG msg;8 K5 S. w  W" ]6 [. F* r* i
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);! h7 N# t+ G; V5 _$ Z) ~* ~  g3 {
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    , J7 U6 E$ f0 J8 [  k) d9 t* H
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    9 ?: D# ~# m: v/ ~( l
  625.         {( g- {! s) h4 ~2 u
  626.                 if(!GetMessage(&msg,NULL,0,0))
    8 ]$ @4 _7 T# a! v* Z1 @4 {
  627.                 {
    1 G% J6 |" @! _/ \# f
  628.                         return;  m3 {6 u. e' p. Q
  629.                 }" g- _1 X0 K5 K$ g  n
  630.                 TranslateMessage(&msg);
      Y/ ]4 A  W" d+ D& g4 I
  631.                 DispatchMessage(&msg);) e& b8 y0 _3 P1 D) v/ U# @# U0 D# o
  632.         }        6 e. D' w# P0 [: o5 S
  633. }' C1 T( q" d- Z# r+ q* _& |. N
  634. : ^2 S! n- l; M
  635. BOOL bFirstChar=TRUE;) D  H4 u  x, F3 H
  636.   i2 [0 Z5 t, w2 W. T9 w: |
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    $ t. _" ]5 k! K% f
  638. {1 [( _" F* @" {5 `
  639.         // TODO: Add your specialized code here and/or call the base class
    8 z7 N* n8 L, e/ b" w
  640.   switch(dwProgramState)" V( N6 m4 _* w9 B0 u# W$ `' L
  641.   {
    + c; ^+ @) d- z, L, s1 F' w
  642.   case AP_NOTHING:( s# _0 a5 e) f. a# n( \# H
  643.     switch(dwStartUpSteps)" ~# f2 P) R8 l. z# _
  644.     {& R2 ~9 l8 N: q* x. h+ M9 @* b
  645.     case 1:
    " n5 Z3 [, R9 B$ \. [: e7 W
  646.       {
    % u- s* E; [4 R0 V7 E) U9 Y
  647.         int i;
    , k, k2 s- D1 F+ L! A: H, V4 A1 [
  648.         CDC *pCDC=dlg->GetDC();
      \- v1 z" ^. d" v
  649.         HDC hdcwnd=pCDC->m_hDC;
    ; O' J% Y& y; }' L8 j; r% t2 d: Y
  650. //        Graphics graphics(hdcwnd);
    , {# Y! ?( M3 R% k& a2 }
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");" I$ D" i* Q7 d9 W3 b% b
  652. //        INT iWidth=bitmap.GetWidth();
    & a! x+ S5 Q- E0 w; C
  653. //        INT iHeight=bitmap.GetHeight();
    $ p1 O' {# P7 t  y1 i6 x6 z3 p
  654. //        Color color,colorTemp;
    * r6 |4 v; H9 F, ?
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% M. Z# n( G, S- L* g& F/ p& I
  656. //        {& Z" M! @* J/ Q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % J7 v' w( Q* O
  658. //          {
    ( l% E* V% }) q& R; W. L5 A" y* F
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    3 N" s) B( ?3 P8 o3 m
  660. //            colorTemp.SetValue(color.MakeARGB() Y  E: w6 h* G' ~/ ^
  661. //              (BYTE)(255*iColumn/iWidth),
    9 B" [7 u8 N7 \9 h: s9 e: }/ E# i
  662. //              color.GetRed(),3 T3 X; J2 g- a; Y. o4 r: \; I
  663. //              color.GetGreen(),( C& h4 t5 n9 @) g$ M* O
  664. //              color.GetBlue()));
    ) u7 _7 H1 }6 f+ S; E6 }( I; O
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);& a6 @; C* `6 B% ~' y9 {
  666. //          }! S% j/ E; x1 y: R. ^2 u9 _+ M( ~4 E
  667. //        }7 X* W) p/ o7 G4 v
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);6 q- c# H& }% A9 b  b4 n
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( W% f( v5 i6 |! ~
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    6 i& g1 \" _5 c" u
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % x0 s% f6 a0 Y
  672.         for(i=0;i<240;i+=8)
    7 i8 V! K1 l1 E4 w
  673.         {9 R  g% H8 k  G+ j9 ^3 u$ J
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 C, i5 D! J! V+ U
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - t3 H% m( v7 Z* \" r1 h/ M
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; c  k+ Y" T- l# ]7 s6 Q+ s
  677.           Sleep(33);: C4 w* C) v* p: n9 @7 e$ e# [
  678.         }
    9 }  |8 s" ]0 Q. P8 C/ D; E: o: _
  679.         Sleep(1000);6 G8 Y% r, g0 O# e
  680.         for(i=240;i>0;i-=8)) A, q" v3 F0 I2 W+ W9 Q
  681.         {8 ?+ u. d5 v1 j5 L9 `
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( ~8 ~4 s' p  i3 a& l: [" q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      p: w- m. B4 g/ p) {
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % u2 B: Q3 ?+ L9 \
  685.           Sleep(33);
    ) p! n1 S6 h' u/ ?3 O1 q
  686.         }
    % ^  n2 f8 v& H0 {8 Y0 Z( N; H- t
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);4 W+ O: |% W" \1 Y0 g
  688.         dlg->ReleaseDC(pCDC);
    ( ]0 E2 V  }& B
  689.         DeleteDC(hdctar);
    3 g* I7 a2 o# H5 C, H2 Z: h
  690.         DeleteDC(hdcsrc);
    8 q0 M* J: T: b, x7 n# g' [4 O
  691.         DeleteDC(hdcorg);! t2 S& ]% M8 E0 l4 j7 ~
  692.       }
    & r9 j5 S4 R" l: p1 q/ U, u- g* t
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    2 v' B) Q2 Y; X, }9 f% c# Z0 {
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 [* O6 b. e: l* v4 O
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ! e0 i% k' I) l7 I6 X1 g% O
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    $ u3 ~. O( ?2 x! d, B  m. @
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 ~8 z! D* V0 O# j5 a
  698.       if(!Dn.Connected())
    7 M+ B9 I- c0 L  c4 s' n
  699.       {. @: M* R) [8 Y# p  W! s7 S
  700.         dwTotalFiles=1;$ j2 S( b- R2 h3 {; `& r
  701.         dwDownLoaded=0;; F1 Y+ M- [  d7 i
  702.         bSilentStep=TRUE;1 i$ a. |; h; I/ d7 x
  703.         bCompressed=FALSE;
    ; ~+ [( Y' F& r+ E* g$ A9 c" I" i
  704.         strExtLocal.Empty();
    6 U4 X" r6 {5 w- b, r7 D/ l
  705.         strFullName="readme.txt";
    $ M& L) q' L& F; a* H, b1 f8 P+ Q
  706.         dwProgramState=AP_CONNECT;
    ( p& i- ]4 a. u/ O- W
  707.       }
    5 W; P' J1 a* `5 D
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();7 s/ k) p; _9 N1 g& s
  709.       dwStartUpSteps=2;" J* F2 r9 T/ y2 s- Z' I/ w
  710.       break;
    ( Q# l! B; o$ O, @0 }
  711.     case 2:
    ) y4 U' M) V4 j# R' I6 h
  712.       {% S6 m" \: E3 N* k1 |6 S; {0 u9 I
  713.         int iEOF;8 i6 K( h4 ~' ~' R; g6 W+ R
  714.         FILE *fp;
    " |, b7 e; N9 w" O" X4 c( ^* B
  715.         char szString[512];4 ?/ V! w7 T! l0 e. ]; ~
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 w. G  z- x/ K% Q4 d" f
  717.         if(fp)
    . ~' N6 T. w& i; X0 f
  718.         {% e6 y5 ~( F$ f; f9 ^
  719.           do
    9 F# r1 ?  N8 H
  720.           {
    ) ~6 o+ j$ `, s# |5 {* z+ x
  721.             iEOF=fscanf(fp,"%s",szString);$ O5 r  Z4 c/ s
  722.             if(strlen(szString))
    - x# q# D3 h6 _
  723.             {$ M- k7 r& Q6 q# c( T
  724.               if(bFirstChar)
    5 |/ H/ @1 ~: ^5 h' ~; T
  725.               {  X) w4 {' t  s6 p" N! a, z0 ^
  726.                 bFirstChar=FALSE;5 m0 k" ]5 \0 j& v9 ~7 u$ p- t; a
  727.                 bConnectIsBig5=FALSE;5 F; E% e! ?3 R" `# o2 p8 s8 E& ?! W' z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 }0 f- o! O2 H
  729.               }
    + u. t2 G! X( a% k  r9 _$ j
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));% e/ }) C/ W" k  n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));9 p" U/ X7 R9 p5 h! S3 o1 }
  732.               dlg->m_ListText.AddString(szString);
    4 q: X$ q* ^: w% p  {) y* [" I2 f
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 K" E- z8 _! j: I6 R, O
  734.               *szString=0;8 a* E+ \1 @+ j# q3 F+ A) _
  735.             }- k( ]5 F' N- k% I
  736.           } while(iEOF!=EOF);7 W2 L( y/ c1 ~2 |
  737.           fclose(fp);% R  W# H% r/ [$ a
  738.           unlink(".\\DownLoad\\readme.txt");
    ( V0 o* \/ I7 W9 P7 r
  739.           dwStartUpSteps=3;
    ( S: Y2 V2 ~& \- K0 `
  740.         }
    4 e9 C/ Z1 ^- y9 n( u4 d4 P
  741.       }
    ! M* h, Q/ O  P  _, G
  742.       break;
    3 N% r8 n! ^+ o. L
  743.     case 3:
    & J# Y* b  c( j' @  J
  744.       if(!Dn.Connected())
    ! Y- W( A: [6 a& d# j/ D
  745.       {
    # R! C8 a" w( H# ~# `
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  w4 q8 ?  F: R$ I
  747.         dwTotalFiles=1;
    ( d  s7 |" h3 }0 W/ I
  748.         dwDownLoaded=0;
    1 @* L: G3 [3 C" G3 ~/ X* l
  749.         bSilentStep=TRUE;9 j& I! F  P& \3 k, M
  750.         bCompressed=FALSE;
    ) w2 x6 a1 E4 S3 M9 Y
  751.         strExtLocal.Empty();9 ]$ S0 N: G( b' \7 v8 G. C8 w
  752.         strFullName="checkversion.txt";
    ( ^2 L$ j) m. z. H) x- e, I0 c# w
  753.         dwProgramState=AP_CONNECT;
    ' y8 v% }% G( z9 W. ?! L' P
  754.       }6 {) M5 Z% Z& V! d/ [' w+ `
  755.       dwStartUpSteps=4;
    8 H. ^9 s! `0 s) c, {, _$ u4 H
  756.       break;& y2 x* F2 E; @# S( l, s: c5 `" |
  757.     case 4:
    ' Z2 _+ C' |, o; \0 ?/ r( w2 w
  758.       {
    5 S, a7 Z% M/ X2 y+ u9 C/ U
  759.         FILE *fp;
    % V1 `, J# p. J4 L0 H7 j! Z/ ]3 p
  760.         char szString1[128];) ?5 e  N# n( C. B
  761.         char szString2[128];& o9 x+ i1 K1 o& m3 A. T$ X
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");  _, M+ |% B% `( d  }
  763.         if(fp)0 D, p! d, x8 Y$ h' {- C
  764.         {
    / ?  q: L# B# y2 v
  765.           fscanf(fp,"%s",szString1);: S- j" u' L9 P' Y; ]- c) W' x8 g
  766.           fclose(fp);; f" f/ A. I2 n& r4 M* t
  767.           fCheckVersion=atof(szString1);& W+ j+ f7 G; w( m' @
  768.           fp=fopen(".\\checkversion.dat","r");6 c( j9 A3 z/ J" o
  769.           if(fp)) X4 [8 }8 a. c: ]& B3 c
  770.           {. V0 ]% w& m; N  I
  771.             fscanf(fp,"%s",szString2);! i5 E' ^; x( |! {+ p4 V. W# ^
  772.             fclose(fp);1 _( V# ~0 `! `
  773.             if(atof(szString1)!=atof(szString2))
    4 D2 ]% O1 v7 t1 G6 R: ?
  774.             {1 Y2 ?" a! X" P" W$ V  ^
  775.               if(!Dn.Connected())
    ; q1 D% U1 J" }
  776.               {
    ' v' C" `% ?1 X% P& {
  777.                 bFirstUpdate=TRUE;) K! R; u/ E& ^- M% r5 I
  778.                 dwTotalFiles=1;* G( y0 g5 \3 ~. x! v
  779.                 dwDownLoaded=0;
    $ B) N! b) O2 ?( P$ [
  780.                 bSilentStep=FALSE;4 z$ o' O0 \& q; p& g2 f8 F1 L1 |* _% a
  781.                 bCompressed=TRUE;
    1 z4 P2 R* G/ v6 _( U
  782.                 strExtLocal=".\\DownLoad\";
    " M! M6 Q/ ~1 }+ f: J3 F/ S6 ]
  783.                 strFullName="update.txt";( K/ A) U3 W% s2 o9 K
  784.                 dwProgramState=AP_CONNECT;
    - W# o1 j7 k6 L0 t6 z0 v8 s
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) A- N( _: ~7 E& b$ o6 ], F
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ; s) v4 w. b) B* Z5 j
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");" E7 L9 V+ r) P" e3 Z/ j4 v

  788. # f2 \& j! @7 w* Y/ B8 X& G
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! S6 M; P5 t# u/ a$ ^
  790.                 unlink(".\\DownLoad\\checkversion.txt");* m5 t4 O1 P0 a' a9 J9 s" r
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' u9 c2 K2 {( ]' I% B9 O
  792.                 {- K- s8 S/ e& ]1 i& H
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");# A1 [3 C& b- X: a+ m
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* A7 G$ Q) @) B
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");% E0 ^" w- D0 v  ]
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # Y. L3 n; X! |: F  d. O# A
  797. * w! p' N# |; H! O2 E) m
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % V- E2 B: i$ U5 E& Q4 J  x8 c
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");9 L2 J# O. w0 X
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");* l: x  e; C. i, q/ u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - y" Q9 c% w" Q/ c  i2 o
  802.                 }
    ' P( r2 T: V' [; ~% V. x
  803.                 dwStartUpSteps=5;
    1 ~" \: L$ B1 H6 f! b2 \, [
  804.               }
    6 K6 H" y/ q* R
  805.             }
    8 X& [" J; O3 y1 ?- s
  806.             else6 ?: R( X2 G8 y+ L/ R' W" t! f
  807.             {: F. J+ f) ?/ l+ X& Q
  808.               unlink(".\\DownLoad\\checkversion.txt");: Z& W6 p( @  m; l/ ]
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");' Y6 Q6 ^8 a$ ~9 R+ U0 R
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    8 w( n: b- l( G; ~& s
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");$ }! I2 ~; m2 m9 j

  812. + M2 p/ t7 @$ a3 x, o
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; p. y7 n# B/ \0 ~
  814.               dwStartUpSteps=99;& x& |6 z% @! Y% |1 _5 d5 q! l
  815.               bFinishUpdated=TRUE;
    ; P* L- @7 e* M' O
  816.               bCanUpdate=TRUE;
    " b# O+ l8 p$ N9 Z; X8 y9 K1 O7 S, {
  817.             }- |, O( F6 }( {# ?
  818.           }7 ]# p0 X7 t" z8 D  S6 z  J; k2 U
  819.           else9 y# ^: ^6 I3 @# a, q
  820.           {+ z. k2 A1 R+ L! ]$ {
  821.             if(!Dn.Connected())
    % O: u2 m7 p3 U* f6 @
  822.             {
    9 \6 R# z$ p0 T* u
  823.               bFirstUpdate=TRUE;  N6 z3 G* p! d
  824.               dwTotalFiles=1;3 s# s  y6 j2 y1 m' K  M( `) u+ T
  825.               dwDownLoaded=0;
    + {* f# x; j. T$ Z) [+ w( U2 p- d
  826.               bSilentStep=FALSE;+ o3 t1 C; c6 W% }
  827.               bCompressed=TRUE;  w3 ]" i% _" Q) A
  828.               strExtLocal=".\\DownLoad\";. Z2 Q( p. S! B, J
  829.               strFullName="update.txt";- Q, t( B* \$ O$ O
  830.               dwProgramState=AP_CONNECT;
    + S. G4 ?5 I! D' {9 g! B& C
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * ~! U6 ~' v: x: r; R
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) E" V4 N" d) o+ M# \
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");5 |. Y: ?1 q" O4 q, ~
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 {0 M  w. U7 R' e
  835.               unlink(".\\DownLoad\\checkversion.txt");; H2 r1 V9 l0 ?* M  X4 F
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)2 x9 z$ g; r1 h3 O& r( w- l
  837.               {/ H  u  }; @, ]6 Q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");' K5 l% o* C, g5 ]* ~
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");3 e# z) Q, i: ^9 w
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    " Y) `. A$ l5 B
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & v/ C" H6 }# [6 I: U
  842.                 2 w7 @/ y1 z7 {# \& R
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 `7 Q) V# \" j0 N3 p1 E. H% S
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& n2 E$ k- k6 ]  k5 Y( U8 l
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    + g$ g, r& x6 w; j# |: W/ Z  I3 F
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : ^- q& G! j0 W
  847.               }( U. y/ V6 M4 [
  848.               dwStartUpSteps=5;. Y; M& s/ ~0 M( I8 S8 T4 ]
  849.             }6 f2 m, b' z4 E7 P- [) L
  850.           }( q, M" |+ a( Y8 H
  851.         }8 ^' Z' V- l" K' y% ^
  852.         else0 C- q5 [9 b6 c
  853.         {; c+ ?; d4 D; G' Q' U, U) k6 U
  854.           dwStartUpSteps=3;
    ) {: R! b+ f3 s" q9 Y3 u
  855.         }4 C$ q' X7 r" Q" |+ @6 q$ s9 u
  856.       }
    & x7 t/ z2 x# [  t
  857.       break;+ ]% V! R1 P* Q3 v3 n
  858.     case 5:: e7 @: b/ ~. ]9 E
  859.       {3 K, r) R. }; F  o% ~
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    0 m5 i1 Q: m, [# Y/ O1 y
  861.         {# A* a" h/ h0 p
  862.           int opt_overwrite=1;
    7 c* [$ I2 U8 D
  863.           int opt_do_extract_withoutpath=0;3 |2 w+ u$ I. ^& k% _/ F3 [4 y: @
  864.           unzFile uf=NULL;
    # C" q! e0 r/ K  W' A

  865. 4 ?, w- U. L# v9 D1 ?3 R
  866.           uf=unzOpen("Wsa.zip");
    5 Y0 q' S$ `& p' y
  867.           if(uf)
    # r4 d( P7 V( g
  868.           {; N" M0 d+ s) k$ C
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    7 a  q6 H% [) X6 v3 [. E9 J# X$ i
  870.             unzClose(uf);
    & G- q" l3 [! z5 }% U
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ; h* F5 y9 }% [4 U1 r1 I
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");5 r( g5 Q* p9 m# w" X
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    " d% L6 P1 [& b8 t
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ q4 m& C* d% s9 R. {2 n7 {
  875.           }
    8 U- i! V+ ^9 N$ _
  876.           DeleteFile("Wsa.zip" );2 T7 \5 G( H* G: q% [1 z( I
  877.         }- H( v+ R+ H! s2 d4 d

  878. ' P" Q8 L4 z" @  h% @
  879.         if(CheckLocalVersion()). ~, L! f2 x+ F- A4 R! O" Z: L
  880.         {9 Y" F" Y  L' o
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");: m: v. j& ^" q2 o5 P
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
      h# I0 Y4 n' X' T' n# T, r& ]  n
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");$ \3 X+ u% ~8 K5 o
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " q6 A4 R' {# [# N& g4 B: w
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    2 v4 K) f- D7 ~4 G/ \
  886.           dwStartUpSteps=99;
    * w& w! e' m# V: a. f0 X: E% u% b
  887.         }+ m% \8 i6 T/ O# h0 o# ?" s/ r
  888.         else3 T8 e) X  p6 N7 V
  889.         {$ n( ^3 O( L8 I) k1 ]# Z/ o2 E
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    & j+ M: B; d) k$ Y. ^
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    5 F7 k, L4 O& m; X1 O7 K
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    - w8 A( _& [, r5 o

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

2 ^, ^/ j' U1 y! `# I

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-17 22:12

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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