找回密碼
 立即注册

CSUpdate.exe源代码

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

2 \6 p2 Y2 w0 G; W) H( O
  1. / RevApp.cpp : Defines the class behaviors for the application.2 M3 ^7 {% |) i; |% ]
  2. //
    & E: J0 V' [' V# h! T+ r2 B! I
  3. . s' @) \% B, j, M4 \9 _
  4. #include "stdafx.h", I3 d) R- B5 i3 z

  5. 1 W! z- B$ A$ B1 c; Z
  6. //#define UNICODE
    $ h0 m4 @4 h( R
  7. //#include <gdiplus.h>  g$ a& e( g9 f0 T, ~7 [
  8. //using namespace Gdiplus;
    : {& E! U9 ^" G( [$ m& l
  9. ; }: Y( u" H  S
  10. #include "RevApp.h"
    ! G/ H& _. \# N2 L: {% J
  11. #include "RevAppDlg.h"
    * t  q' u& ^( c9 W1 _9 n# V# Z

  12. / v% K- Q: R& X, @/ c" S- _$ u% ]
  13. #pragma warning(disable:4786)( B  h4 ?# N( R+ ]4 ]
  14. #include <map>' M, L% p& D" v6 e. C* w2 w) e
  15. #include <list>
    " K) j4 B4 d7 I) D: a: g* o* r4 U8 u
  16. #include <direct.h>
    . Y" Y& n2 z% \# x* S

  17. 5 R+ u$ p: v4 x1 n$ |% T: K5 E
  18. #ifdef _DEBUG
    ; _3 a# Q7 z: z: N3 e4 A6 X9 b
  19. #define new DEBUG_NEW
    * L1 t% u2 _2 V1 R
  20. #undef THIS_FILE
    6 H; L) D( f; c& J5 g+ c
  21. static char THIS_FILE[] = __FILE__;. d, U# {$ P% G7 ]
  22. #endif
    # r% A' {- M( ]; f- ^# q' F
  23. #include "SkinResDef.h"
    3 K$ C' e% C9 x7 T9 x+ ^* P( v
  24. #include "ChangeBG.h"
    8 u; A. a& [. n* \- G: R
  25. #include "AFXINET.H"
    ' ^% \+ j& Q# u2 {! G8 R

  26. ' g& ^! T( p/ Q' U- S" c
  27. #define TRADITIONAL_CHINESE 0% R  W: U) N1 O7 B' `
  28. #define SIMPLIFY_CHINESE 16 `% p% u" I2 b1 H
  29. #define ENGLISH 2
    % {6 n( ~+ d. |" W4 `
  30. int m_iLanguage = ENGLISH;
    # y, y2 d. r; t1 i% M
  31. /////////////////////////////////////////////////////////////////////////////
    7 V: F- ^1 d7 y* d
  32. // CRevAppApp
    1 ^- d# h2 _& O9 f
  33. ; Y' _' l: [+ r9 v8 {2 o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    2 V2 k5 K7 `) z1 v! u  \0 Y2 Z4 Z
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    " E7 r. V% k0 b' E' \* P2 R9 Q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ; |( _6 R& `/ W/ S! D
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ' h) b7 [% b0 B- ~; z- y" x
  38.         //}}AFX_MSG1 Z* x% d( q4 \: r1 p
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp); q2 p3 [$ G6 z1 Y& w
  40. END_MESSAGE_MAP()
    ; w! F8 T) P/ r" A: S
  41. 3 r: X3 n- F; M. A$ l$ t
  42. /////////////////////////////////////////////////////////////////////////////6 w. a9 k% m" [7 r
  43. // CRevAppApp construction
    1 y9 {# |$ `* P. V* @8 H$ \

  44. 6 N  T% ]( J  @/ F1 Q1 [7 @& \
  45. CRevAppApp::CRevAppApp()
    ) b( l6 |& b$ C5 |: D' U9 s
  46. {: I% D# P' v# Q' c7 \6 h3 v5 ~/ R
  47.         // TODO: add construction code here,# m& K) d$ G  [+ g- [
  48.         // Place all significant initialization in InitInstance
    + j' e( V8 t" \  t' f
  49.   bDisplayIsBig5=FALSE;3 u" K1 `6 y+ j2 V  A
  50.   bRestartUpdater=FALSE;  b* B; k' r% {; i+ k/ v2 e7 @' u6 b
  51.   bFinishUpdated=FALSE;
    ) v9 X5 x. A: S. w
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    4 S2 Z9 {2 }' F$ [2 h% J
  53.   InitChangeDataBig52GBKS();  _8 [* I( y2 z2 O$ U* W
  54.   InitChangeDataGBKS2Big5();1 h) h! D9 q5 W# q9 z1 t# U
  55.         //
    5 e) `: X/ m4 v8 k
  56.         bClickRunExe = FALSE;+ a# k9 q* l9 `/ S5 X7 I3 t& I
  57.         //* P+ ?" R1 R5 }/ R8 |7 R
  58. }+ A' v$ P. c8 F4 s1 ]0 v

  59. - Z% `  j! s) W! ]+ V
  60. CRevAppApp::~CRevAppApp()
    3 S2 \, x* Q, B  U: r7 X
  61. {) R( j$ F* s* U( E3 F) s' B
  62.         // TODO: add construction code here,) h( w. e+ I  t
  63.         // Place all significant initialization in InitInstance
    7 r$ k+ e  F% d% D: ^& h" ~
  64.   EndChangeData();" |9 j* c: H8 [4 Z8 x6 K
  65. }
    6 V5 S- Y& p3 r) t

  66. ) u9 w* Q' j3 m2 v1 _
  67. /////////////////////////////////////////////////////////////////////////////
    3 L5 O6 ?9 J. L. y
  68. // The one and only CRevAppApp object9 Q  b; s6 i5 P4 L" K

  69. " w) t( d6 S& ~5 g7 l1 V& G
  70. CRevAppApp theApp;
    ! b# v% r$ l6 y/ P& m  q: K& J
  71. , g+ [# v6 f3 x" b5 V8 Y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : J# B- |) D! @; i. j* b4 d
  73. {/ C" e4 P$ w5 _7 B% u
  74.   int iEOF=0;
    2 Z3 k, I8 z' D: N
  75.   char szTempName[MAX_PATH];
    ' ]5 [; R2 b' C$ Q9 S* i4 X
  76.   *szFileName=0;
    # p9 i9 U2 q5 D' S, Q) U
  77.   iEOF=fscanf(fp,"%s",szTempName);
    + r' I9 d+ [; d# u) x0 Q9 S
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')) `9 U) h. g, o; Q0 }8 c1 U
  79.   {
    - E2 N% A$ {9 `+ ?! f
  80.     strcpy(szFileName,&szTempName[1]);
    6 M1 O+ a. G4 _8 U
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)  z' i7 [1 K5 y0 n
  82.     {- N0 S1 P6 A8 ]$ F$ ?% @: i
  83.       iEOF=fscanf(fp,"%s",szTempName);$ {$ f5 t4 f' }2 K
  84.       strcat(szFileName," ");" i, I: C) l; _% I3 ?
  85.       strcat(szFileName,szTempName);1 C: X, J9 U" W  o" u
  86.     }
    0 N6 K! q; M; F# }
  87.     if(strlen(szFileName)>=1)
    * e1 F  O/ V6 D7 d5 D
  88.     {! W7 x; b! A4 ?
  89.       szFileName[strlen(szFileName)-1]=0;  K+ E4 x5 a# ~* y. [' v5 `( T
  90.     }
    0 S7 |6 I9 u* d. i' p# {/ }) N
  91.   }9 A- e# i0 h6 }  a% G
  92.   return szFileName;
    . C" I1 n2 ?. s+ f; E
  93. }6 o" u$ B. }3 R4 a

  94. , \5 o+ e: h# f6 N6 P- q+ a0 K2 o
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)2 L" N" R+ T# P) V* n- P5 ?  z
  96. {4 ?$ Z& |0 G. X# N2 {8 Q
  97.   FILE *fp;& i5 }# T6 m% {; p8 `9 @
  98.   char *key=NULL;0 {1 y3 F+ i/ J7 L1 ?) W
  99.   char version[MAX_PATH];
      _8 `6 J! m! l5 G
  100.   LPUPDATEFILE file,olds;
    ; W. `5 [5 D1 d  C. C8 o/ @# h2 h
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 Q, g/ i6 d( ~0 K# ?
  102. # y7 c& j. V" c& j. J
  103.   UpdateList.clear();8 }! l: a2 X9 b. s9 R4 B7 ^
  104.   UpdateFile.clear();
    ! N* [! |' S' t
  105.   if(GetFileAttributes(filename)==-1) return false;) |; Y  H* P# O. c4 b/ D
  106.   if(!(fp=fopen(filename,"r"))) return false;% R/ S/ @$ |6 r  D5 p2 n
  107.   fscanf(fp,"%s",version);
    . R- K8 p' ^7 J
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    , C# [" A5 s' C% o
  109.   while(fscanf(fp,"%s",version)!=EOF)
    3 t  u9 _9 t! `
  110.   {
    ' I: ^0 T4 u- @! s6 F$ ]
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! `; d7 ^2 F) E! E$ \$ l1 s
  112.     fscanf(fp,"%s",file->path);7 Q' P9 x( X0 i9 o% P$ x: X! j1 s) s
  113.     ReadFileNames(fp,file->file);' _1 T$ W8 {, s( ]- J
  114.     strcpy(file->full,".");: i& Y5 m2 ]9 V4 l9 c- a# I
  115.     strcat(file->full,file->path);" }: W. ~9 W: Y' W
  116.     strcat(file->full,file->file);
    8 `7 O( Q, K+ q: T$ m9 F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    1 P) q, J5 I& w% j# E% z
  118.     {
    $ w: M4 o, L# s! O8 Z
  119.       file->vers=(float)atof(version);5 _5 W: J9 m5 f) D  V
  120.       UpdateList.push_back(file->full);- x2 }' w' h+ ], m8 h" {6 ?
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; d, o8 B$ ^9 |( v2 L( z; t" Y
  122.     }, j9 W: e- I3 D; ~# ~9 r
  123.     else
    " C2 N7 }+ r; w! C( M* Y
  124.     {: ?9 a* R" ?8 @  q
  125.       olds=(*p).second;# _$ S- d, w" M* K3 N8 R  n3 b
  126.       if(olds->vers<(float)atof(version))* x* ~; ~7 Y: B( T, @* b
  127.       {! U3 r: w  X4 q
  128.         olds->vers=(float)atof(version);2 {4 D) o5 i: {' o. [) n& J2 \
  129.       }
    ' ]" d" E& _" M7 }9 h1 s- J+ s
  130.       free(file);' l" j9 o: P! y+ s& A
  131.     }
    - O" l/ p6 i  E  }& m  c% b! v+ H' |
  132.   }& c8 L0 c: k4 Q
  133.   fclose(fp);
    " ]1 G; {; U* C. ^
  134.   return true;: i! r5 L. n5 H" V9 e( \, w" ]  P  O
  135. }( _7 q# ~! l, t* x1 C  m+ o

  136. 9 q' J7 c" V- d' k
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath); P+ l: _% s" _! I7 i
  138. {
    / L  Q, J& Y7 A* {
  139.   TCHAR  szFull[MAX_PATH];0 T4 P" R& v9 W7 C5 i) D8 Z9 f
  140.   TCHAR *token,*inter;
    . k/ j" N. C3 C
  141.   *szPath=0;
    4 ?2 t. x" W: K+ l6 x* {
  142.   strcpy(szFull,szFullPath);
    8 ]8 l+ o  Y; Q1 Z6 l! R
  143.   token=strtok(szFull,"\\/");8 }* i. F- P1 C  m( [
  144.   inter=token;
    % E) F1 i( ?1 q; x
  145.   while(token=strtok(NULL,"\\/"))
    , B6 K6 T$ }, u# w8 l; A
  146.   {) J5 X: D+ ?% m  y, n) m
  147.     strcat(szPath,inter);
    " U7 a" @: A+ t+ A
  148.     strcat(szPath,"\");" o- z+ |3 F; |/ W9 H5 `7 i
  149.     inter=token;' F+ Y) Y  u) s8 \# S
  150.   }1 i5 {; J; A# i) Q( r& ]
  151.   return strlen(szPath);3 x# c4 k! ?) d4 N
  152. }) Y5 S' r$ F- _( |2 p  S- i

  153. 2 z& E7 m# N( B8 V
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    : K% W( z% O" l2 I
  155. {( d0 W/ i! F0 @& ~! B) }" U' x
  156.   DWORD attrib=GetFileAttributes(Target);( N8 ]! O4 P4 N+ [) V
  157.   if(attrib!=-1)
    7 H1 P  _; t$ D
  158.   {
    # s! m+ N; L3 c* G4 N- `
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))0 ]2 Z  {. ?1 X  @0 ~! F2 y
  160.     {
    ; V+ H" \8 u( v& ?, u
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    8 l; t0 T4 K' M
  162.       SetFileAttributes(Target,attrib);
    , f$ U: r# |" \+ h. N7 T
  163.     }
    ' o/ }  [) ]6 P9 s
  164.   }
    * I, B( N* i* l; O" s
  165.   CopyFile(Source,Target,Erase);
    ' J( z4 M% D3 \& _
  166. }
    # {# W# T& k# M

  167. & s0 s( B" M5 }8 H
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...). \# E; I$ P/ u" X% W+ [
  169. {
    : K$ V; Z4 W& @2 H
  170.      FILE *fp;
    / z0 Q: M2 ?; L
  171.      char  szBuffer[8192];( p5 c7 ^8 c5 K0 T/ N
  172.   va_list  argptr;. k6 V7 v8 \, q- b
  173. : k; d/ ?$ A- N# N( U( h  Z
  174.         va_start(argptr,message);: N5 k1 b8 {! V
  175.         vsprintf(szBuffer,message,argptr);* y; S; l9 O( R& I+ {
  176.         va_end(argptr);# U* O1 {0 d' K; R
  177.   fp=fopen(FileName,"a");
    - o) m* ^% S9 _' I* C) a
  178.   if(fp)0 y" E2 ]# w: E; ]  m' N
  179.   {
    0 J& U; u5 F$ h5 G
  180.     fprintf(fp,szBuffer);
    ; p( A# L( t/ X. A
  181.     fclose(fp);
    2 n" M, r8 R* K& x
  182.           _flushall();$ s8 I) v- K% r# e8 r
  183.   }* H0 d( `; g+ F2 @! A
  184. }
    : A6 Z; j6 ^; K# }

  185. 1 U$ \% I, {. L& j0 o5 e5 K9 u) @
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    / O" X' w( \# L) L" w- _/ i
  187. {5 s) ~; a) Q9 Q0 ?; Y; f1 n
  188.      FILE *fp;
    - H* r5 Y+ G( n) s2 k) o) e
  189.     DWORD  attrib;8 o6 p% h1 U, w, u( J
  190.   attrib=GetFileAttributes(FileName);) `. ?' z2 L, P) z
  191.   if(attrib!=-1): z! s2 G; \! u
  192.   {+ w; a  m: J* v& Y& r
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    6 ]3 p2 C& D7 B
  194.     if(!SetFileAttributes(FileName,attrib))- X" E1 ~4 X8 \* ?3 D
  195.     {
    * }( r. Y; }0 \; {: v6 @: \; d
  196.       return FALSE;( b- r  d) U  r# c4 {0 W
  197.     }8 j0 E, v5 v3 n' a
  198.   }
    5 n6 J/ P+ a4 ^7 ^  m* ~
  199.   fp=fopen(FileName,"wb");  s8 j+ o- p1 E2 k4 y- c, n( C
  200.   if(fp)
    / a" k: J- n* I* ?. b  I3 C- o
  201.   {5 }9 m7 ?% g7 }' w
  202.     fclose(fp);) K* z: T8 ^- j/ b( _, Q
  203.   }
    8 x) R1 |. a2 t9 _) ]2 l
  204.   return TRUE;1 K. p1 f6 U- L" c
  205. }
    % a' U+ h- @3 m) r* j

  206. 4 D7 ^$ v. Y( T# G* v
  207. BOOL CRevAppApp::UpdateLocalVersion(void)( O$ B' w! b$ N, S$ U3 [4 \% R
  208. {0 l8 B7 o8 v& D
  209.   char filename[MAX_PATH];0 Y( A- s$ Q: R) V3 t
  210.   LPUPDATEFILE file,olds;- l; g4 O/ ]& ]: S
  211.   std::map<int,CString>::iterator i;
    . f2 R* G* d# _8 U) t) x1 X1 P) c  p
  212.   std::map<CString,LPUPDATEFILE>::iterator p;/ j, j4 P8 K7 u. j  _
  213.   std::list<CString>::iterator l;
    % f$ c# N! T5 \

  214. ' `$ O0 M8 p  W6 p( Q& {: Y
  215.   if(bFirstUpdate)
    5 ^! t0 P- V0 j* s4 A2 t" g1 w8 w
  216.   {# Z6 O0 N* ~, F8 [" M
  217.     dwCurrFile=0;1 ]# K  F- l; ?, l: s
  218.     bFirstUpdate=FALSE;
    ) w0 [, L- n; |8 |
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 [5 `# ]! j7 I1 q1 W  q
  220.     {
    8 G/ N/ ^; y/ T6 O" W9 D# K
  221.       dwTotalFiles=UpdateLocal.size();" ^2 y1 j$ B: Y! {/ s
  222.       dwDownLoaded=0;+ ]$ [$ j4 ]. Q+ x! `
  223.       bSilentStep=FALSE;
    2 b7 E0 s: r( |
  224.       bCompressed=TRUE;2 E; D" b' X* k# L% G9 L8 ?% f
  225.       strExtLocal.Empty();
    0 n. X7 |( \1 ^( A. [' s" S4 h
  226.       strFullName=(*i).second;
    ) e& l, w* X/ I' y/ o
  227.       dwProgramState=AP_CONNECT;
    * ]2 I( I6 x* f4 c( F% B. A- Y$ U
  228.       return TRUE;, L3 n1 n. H- Z% `
  229.     }
    ( @- `% X; B1 U) O  x/ ]' {: o
  230.   }$ W% N) ?  u: _  V- h% ?0 N' P
  231.   else if(bRestartUpdater==FALSE); @  ^' }. P: w+ _7 F" G: r0 l) i
  232.   {8 `9 z3 [, r4 ^8 U; k: G3 ?7 Q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()): g6 J3 W; X% a$ W9 y
  234.     {
    ; ~. j2 d$ r2 ~6 t
  235.       file=(*p).second;0 V- `: e9 L4 I
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())9 }# T6 n" a, ~! H+ N1 b. v- ?
  237.       {9 w( |5 V3 j0 e0 o0 d
  238.         olds=(*p).second;
    # L% X; V+ C. d1 d9 X% P0 M  Q
  239.         olds->vers=file->vers;
      _4 E3 ]4 K% d, u
  240.       }) U; T) _2 T) e
  241.       else7 }# y" f( h7 e/ K5 Q, L! x0 N
  242.       {
    * J5 M' V5 U7 Z7 k9 z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, T6 ?6 D1 T6 b. j3 G5 \
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ' b) n, N& e% O* g/ H+ Q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    8 g- H2 G4 z* V- @/ V: ]+ J
  246.       }8 A# d% y+ Z2 d* i9 m+ j
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");) e: o* f2 M* D  n
  248.       sprintf(filename,"(%s)",file->file);" M0 u0 K% b% {" a3 C! [/ I& I
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      g9 h7 s% v- M
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ' |7 ?; `( B, @" [  u1 e% V' p! C
  251.     }8 k* ?( @5 @' y; X4 m
  252.     dwCurrFile++;6 b1 c3 E; }& E! Y
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- l1 w) J3 R7 Q& A/ p: i! H
  254.     {0 k7 A' g! l& X) W/ I* X. t
  255.       bSilentStep=FALSE;+ _/ t( J6 t  `( h
  256.       bCompressed=TRUE;
    7 j" O) \. S. r3 G0 J
  257.       strExtLocal.Empty();% c8 p& W9 l; S. Y4 j
  258.       strFullName=(*i).second;$ ~: D: W1 g' d' Z. k, R
  259.       dwProgramState=AP_CONNECT;
    5 |; g9 y9 B# z7 ^4 K; [4 D% ~* ]
  260.       return TRUE;- A( T4 Y# K# H; [% q: r
  261.     }. h8 i/ u  p7 |: P( z/ f2 X
  262.     if(!bRestartUpdater)9 w" Y' X2 e# M' w# c5 y: m
  263.     {
    : Y0 r2 c5 t' ]' A$ i+ A+ O
  264.       int iCurrSize,iFileSize;% A: j7 r1 m) R2 A  n9 {" n
  265.       iCurrSize=0;! Q  U1 }' U( Z; W$ r/ j
  266.       iFileSize=UpdateList2.size();
    " T& t$ i0 j* F/ }. U7 k7 \
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    & F- o) f' g7 x3 h( s7 r8 X' i
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    8 O. J" F$ F* R$ n# s8 ?% x! Q2 K
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");4 D' [$ v# c  @
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; m1 ?( H9 V, p3 S: y  i2 ]; a) W
  271.       Fclearf(".\\update.dat");
    5 k( }- m, w5 V2 o& }, v) T
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    : b1 {1 [9 ~, o  Q  s( y: F/ T
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) P. m2 i: r$ w' J' t: Y
  274.       {8 w- A# r' U& G$ N: ]
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ' ?4 Q- i, G/ ]) f2 O3 W& A4 A
  276.         {+ @% g$ N- A  S$ z
  277.           file=(*p).second;
    # p7 Z- j" D; b0 F
  278.           sprintf(filename,"(%s)",file->file);: B8 m3 f' V1 t6 D4 v" R+ U8 v
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & E  Q) q3 J: O3 V  S  c
  280.           iCurrSize++;
    5 d/ j" |0 {5 B9 }
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    & `# H- D2 |$ i) A1 Z! m: n& D* _
  282.         }6 A6 \6 Q& o; _
  283.       }
    / F' p3 H! B- b
  284.       unlink(".\\update.txt");
    7 n) b" M$ ~5 ^) b% O
  285.       unlink(".\\update.tmp");
    % T7 t3 t! T' c" h+ S+ m% P: q9 b
  286.       Fclearf(".\\checkversion.dat");
    - P7 |/ Q, i: J: E$ W) F
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    4 @, F1 K- x- {( P
  288.       if(UpdateLocal.size())
    " e6 t3 d0 X/ S
  289.       {
    6 Z# O3 w) o% C2 y
  290.         UpdateLocal.clear();* W6 U8 o+ w4 _0 `7 q2 }% n
  291.       }
    ; E& y  w7 A- X9 M! E9 v9 k) P3 G
  292.       if(UpdateFile3.size())# K# N1 v$ V6 x: Y% C
  293.       {
    4 Q& N+ g1 I: Q) r, h' W
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' L" f# W0 _( Y6 ~5 B  X( p
  295.         {7 e9 |) q7 d3 p/ o8 i
  296.           file=(*p).second;2 q9 T; n: C% u2 Z9 d
  297.           free(file);
    $ ~/ \- {% A, R; Z/ q7 m; s
  298.         }
    & t- \: w* }5 p) e2 O, q4 U/ x
  299.         UpdateFile3.clear();
    2 t' M4 v$ H- J+ r
  300.         UpdateList3.clear();, M+ ^' a! S. w1 ?+ j
  301.       }
    2 x& h4 Q' k. P0 k& h! p
  302.       if(UpdateFile2.size()). T/ Y% k4 T3 i+ n: D
  303.       {8 f& h% A( ~9 W- _# k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 Z) \# X$ v; b/ L
  305.         {
    + J% Z* o$ F$ z2 G1 z( z
  306.           file=(*p).second;
    # `; J9 a+ B( s) m6 e) ^5 f
  307.           free(file);
    : {: Y$ T& E, ^1 e( L) S
  308.         }
    * l2 s% t- J7 {3 B9 |3 I
  309.         UpdateFile2.clear();$ R/ R' J$ o) O: A7 I# t
  310.         UpdateList2.clear();
    " r, \6 A; h3 @* H
  311.       }' i; E3 u0 B6 X5 f) ~$ K
  312.       if(UpdateFile1.size())
    2 _" X2 K! }; {2 p# w: `- d
  313.       {5 h/ W% T5 X# K, ?+ {$ J; K6 }, y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    % Z* U9 Q: X+ |# H. x
  315.         {
    : }9 `  {. G9 h3 y# y. z7 g
  316.           file=(*p).second;9 b( M/ C9 ^  o8 C
  317.           free(file);
    - z2 G2 P0 F# f5 w' b+ `* k; ?8 R4 d
  318.         }, Q6 Y) ^/ r4 R; B4 I) W% B
  319.         UpdateFile1.clear();
    : y* C- p8 b* i) `( C# f
  320.         UpdateList1.clear();! ?1 f- P: s. s
  321.       }
    5 _- a7 |/ B+ _# P5 Z, F0 @
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    " G/ H7 m; Z1 }1 K6 J1 ^. ?" a
  323.     }" L: p  r  o( m' E# I
  324.   }
    1 E6 e6 h9 r1 q9 b6 x1 h
  325.   return FALSE;; Z" H" o5 Z! w( T" z
  326. }
    6 _1 |5 W5 B) l+ R2 G
  327. 0 v3 ]! L& H- J5 q/ Y6 V
  328. void CRevAppApp::ClearAll(void)
    " X% Q0 X' d- k. f6 p5 C+ `& v
  329. {1 ?* M8 X, l) R4 c. y
  330.   LPUPDATEFILE file;
    $ s3 `5 O8 \& y; G) X( h( r
  331.   std::map<CString,LPUPDATEFILE>::iterator p;( r* l9 _; `( T5 L9 h- Z3 l  U
  332. ( \- i7 W6 {5 d) p
  333.   if(UpdateLocal.size())2 {9 B1 t- {/ C- n2 D. g; O
  334.   {/ u( x, |+ ?/ x; _+ r# j! ?: w
  335.     UpdateLocal.clear();. M/ R! Y* }7 p6 ?
  336.   }
    ' k2 z2 R+ ^6 \1 u
  337.   if(UpdateFile3.size())
    4 B$ l" [* F: }* A$ b8 \
  338.   {
    / ~/ Z; L% I6 ^1 x8 H7 g8 I3 K
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)2 x8 r2 X0 g7 ~6 W* G4 ~& S# K
  340.     {- Y* T. K( G+ U4 P/ t3 V7 _3 |
  341.       file=(*p).second;
    * G9 M* H& Z. {7 i3 e/ T
  342.       free(file);& ^/ v% z2 O8 ], Z
  343.     }* T5 ~* a) @+ o. y$ u
  344.     UpdateFile3.clear();
    / f# `7 {) c* X
  345.     UpdateList3.clear();
    ! d0 x( D# y' c* Y7 ?" l. j2 q
  346.   }6 x# o0 y! z9 d! m6 h" V
  347.   if(UpdateFile2.size())4 Z7 E) q: Q( X2 x
  348.   {6 W& U9 f# _! m0 p
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); i7 J, ?  R! M4 V# f& W$ ~
  350.     {
    " u. J& C" b+ R( Y6 a: O9 U6 `
  351.       file=(*p).second;
    * ~) M  p0 C. y) O6 v/ S
  352.       free(file);5 L* L, Q3 |# T) L5 N$ t9 \  s
  353.     }' Y4 D$ A# W* s) T; S
  354.     UpdateFile2.clear();& c  p7 I2 w$ I, T( f
  355.     UpdateList2.clear();
    % P7 G. [$ A: J, ^: @: a; Z
  356.   }- E7 W8 z! f% ^8 {/ a; L
  357.   if(UpdateFile1.size())( A+ J- T5 V$ W, j% x; h6 Q  u. |
  358.   {# q2 B7 a+ \% u2 Z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 o# N; f0 @* f; k7 ]0 e
  360.     {) z8 F: d  H- X) B1 _, Z
  361.       file=(*p).second;2 m# ]5 C% i; g2 }( c0 g- J9 _
  362.       free(file);5 X$ j0 b+ Z: a9 i8 @
  363.     }& ~1 U0 s! Z. U% b& Z, X
  364.     UpdateFile1.clear();
    1 Y% X# E) d+ h+ \; W' X) X1 {$ j
  365.     UpdateList1.clear();/ |+ c( h8 N- H2 z
  366.   }
    7 K7 v# S) s9 l' Z5 R3 }
  367. }  / \/ Z& [: m- \% n9 y% n$ J7 q$ l
  368.   ( g" u" v2 I- ^  {7 s# f' B2 f
  369. BOOL CRevAppApp::CheckLocalVersion(void)# M( Q! G6 x. y9 d/ Z$ q
  370. {, V6 |2 m$ {( \& M$ I' W
  371.   int c;& ]4 l' j- d+ v: y6 [+ A/ D
  372.   LPUPDATEFILE file1,file2;8 h4 f! g6 m- M* s2 W
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    + F: `) H6 R0 Q5 @, ^8 y/ U8 u! K2 R
  374.   std::list<CString>::iterator l;2 G+ O2 f& a. L7 @2 F; ~

  375. / d- ^' s" \$ e0 Z% l1 `
  376.   UpdateLocal.clear();
    6 `" L6 j6 |1 k* a+ a
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);! L+ k3 Y* q; Z/ ]  v
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    1 h5 s' k) {/ C8 ~
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);) Q! c) C& `# W8 I7 C$ z$ V0 |+ R
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    8 a9 C- z5 p' O  H+ x9 O
  381.   if(UpdateFile3.size())
    4 x6 n8 V7 o2 k  j9 c5 v3 Z$ g
  382.   {
    3 @: i, t- v2 W4 {
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)$ I/ Y4 u( y# w% A
  384.     {
    % o4 Q" y* d, b
  385.       file2=(LPUPDATEFILE)(*i).second;
    ) _3 z5 S" g2 A2 w
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    . _! E" s, B% J- c% S5 \1 @( F
  387.       {
    # ^, O5 H  ~& u/ n
  388.         file1=(LPUPDATEFILE)(*p).second;. i+ j7 a2 h; a
  389.         file1->vers=file2->vers;
    % p5 j$ c, a! r7 ]8 x
  390.       }8 `" W# |5 n, p$ U- u- U: H
  391.       else, f$ e3 \9 @4 P2 p  }" h& t8 r- ~
  392.       {
    9 K: C0 y  i9 H  v- F
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 H$ H* C: r% B6 l# [7 Y, n
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));7 a; Q7 F% C5 Y1 j! b' ~
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));% q7 o' `, Z* N& y$ x' V" G
  396.       }! f# t4 @; Y+ U+ Y  d
  397.     }. S/ x$ y) m1 E6 ~0 L) M
  398.   }! j& h3 z% r4 X
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)  ?+ `' h4 P, Z/ f2 t( [+ w# |$ |
  400.   {/ N3 ]6 Z0 z' v$ V5 z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ' `7 I$ R  J. J- K1 ^5 a
  402.     {  S: z" n& \  @- T
  403.       file2=(LPUPDATEFILE)(*i).second;9 Q" f7 W! C4 r& q; g3 p2 R: k; P
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); }1 {" B$ X- ^. }# p# z2 ~- A
  405.       {6 y) f" g8 `7 X$ n+ p% {
  406.         file1=(LPUPDATEFILE)(*p).second;
    0 |* c9 _) `; B) T9 m  P7 _
  407.         if(file1->vers!=file2->vers)/ ^8 [5 s- \. \" \3 e
  408.         {6 i3 x* j9 [; k
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 R  i- l- U" F- G
  410.           c++;) N% u) U: k/ H* j
  411.         }6 }4 w1 y" T- V; L
  412.       }
    , o* ~7 N, a2 M8 Y- r
  413.       else
    5 p: h# i% V# g( O4 p/ ]  `; Y" ^
  414.       {* [) [  [# X. w+ x0 i3 G) Q
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ D& U. O! d/ e5 N7 ~- h7 o* s
  416.         c++;# f  c* x* q8 F$ z9 j
  417.       }
    " V. n7 h. p9 }* `( l2 o
  418.     }
    " O# f7 w, D$ J
  419.   }
    7 k5 u) k' V& _- z% v/ ?2 d
  420.   unlink(".\\DownLoad\\update.txt");  D% z, ^7 z9 j7 Y4 M: v5 V
  421.   if(UpdateLocal.size()) return TRUE;; \/ M( H7 s$ n$ v" X" J9 g: Q
  422.   else                   return FALSE;
    : l+ \6 w9 G0 |+ c+ Z4 N
  423. }
    9 K: c) p5 \3 S5 k! D
  424. 4 U7 @- b/ V" R; A% m/ T
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    , H  {. F) ~9 e' Z6 M
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    5 l  p; O# k9 t) ]$ _  g& I

  427. " l4 ^1 ?  e- K) l6 @! U
  428. ; t/ v) p$ m4 j+ y  q( y
  429. ' f/ ~9 s; o& y7 g: `( h( H) q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    9 v- e% u7 H1 F* W6 I, ^7 F
  431. {
    7 f4 L7 {  T( J3 o8 u
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    9 s: q# o- G, l
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ _+ ]1 ]! t( d8 X
  434.   {
    ) |5 `8 ^* [& P' _
  435.     char szLanguage[50];
    / w0 ]& S% T& H" b
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");4 m9 H9 _2 E0 s: l1 v1 @
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 _  f! M+ E4 V! H8 e- T
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 R8 s. J3 \8 b# ?2 C  |8 Z$ ^
  439.     else                                   m_iLanguage=ENGLISH;5 c6 N' K* g$ T* U3 Z# O0 j0 B
  440.     char szRegister[100];
    ( @" z& V# h( w5 A
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  A0 j' V* Q. O9 c
  442.     strRegsName=szRegister;9 x3 J8 s1 L$ `/ O2 ~, a" H# f
  443.     char szPatchURL[100];- C' ?& ^) i1 b3 Z$ r, d: n
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; E/ s2 N. j/ N" Q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - C  z; o$ U4 W' N
  446.   }) t8 f) A* ]' T2 R8 r
  447.   else
    2 \% B1 [( f' w8 m
  448.   {
    8 }9 A2 Y% D9 W  `; i
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - D, Y. }8 M4 i/ m; H
  450.     strRegsName=DEFAULT_REG_URL;8 y' T0 ^' f( a. q5 y! t% p( F
  451.   }8 l4 m" e  N# K  Q# F5 x# g5 F
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    : o- o9 Y+ S& f7 @' d" G1 U) O
  453.   {
    & O) {5 t- I7 m
  454.     char szIP[50];9 D/ a& Z: h3 W6 W. j# \+ @7 }
  455.     char szDIR[300];
    # i" J" Z/ M) }' `, H/ K, k
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    3 i/ a9 ^% ^5 v# T+ d( j+ t
  457.     {4 I/ n! r  s6 d' e: K: m$ V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");5 \6 d1 s$ M/ e3 f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    & [% t! k/ Y) A! G+ P
  460.       strHostName=szIP;* C2 L) L' R4 V% A
  461.       strHostPath.Format("/%s",szDIR);
    * y; S  h4 ~4 k+ i' e& ?9 I
  462.     }/ T' Q! A1 n) k
  463.     else7 M( _& C$ G% o
  464.     {
    7 G& y- P1 s4 A1 j! S3 g
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / z* x; P, b8 ^) Y
  466.       {
    2 c5 E# @+ e/ X: I/ d
  467.         char szLanguage[50];* X0 T6 N0 H3 {0 Q+ N9 ^( N
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + m9 Y- Y) _/ S6 ~0 g
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 Y  {4 E- `3 v4 @; i' l$ C; |
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; d9 c9 T- P" b. L1 a
  471.         else                                   m_iLanguage=ENGLISH;8 y* I8 O* _' K0 P3 J9 E: o
  472.         char szRegister[100];* r+ @: m  V0 N" J5 ?8 f/ ~
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 V6 G* j8 N# h5 P0 V. B
  474.         strRegsName=szRegister;
    $ s/ q! K, ~+ O2 f" p$ t- g) G- q3 s
  475.         char szPatchURL[100];, ~* b+ C! O) R3 o
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 {5 M7 W8 \+ g8 q: B
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 W  C: q( e+ Y' |, y/ z( H- q
  478.       }
    - e8 S9 f. u% x. J% t" }
  479.       else
    9 M/ X2 ?1 L+ t( `, c$ I
  480.       {5 }' O+ s* y) e' d- t4 |
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 d- d7 ^: T, U4 Y. S
  482.         strRegsName=DEFAULT_REG_URL;+ r! x, A. G4 s: l& r
  483.       }
    . g0 K! K7 r* C  r+ H4 S) B4 F
  484.     }3 @$ C' ^) ~- A; q& d
  485.   }
    $ D* f  j) z* N  k
  486.   return true;
    & m: k+ |) U& Q4 k% G
  487. }3 u7 \6 v/ D% r) r6 M3 {
  488. / ^" }) @9 s4 N  D1 }1 @2 |) y
  489. #include ".\ZLib\unzip.h": L, y* j! X" n0 [# _( D2 \
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    5 f6 b. K: i8 ^
  491. /////////////////////////////////////////////////////////////////////////////
    ' V" G9 N, [. P) Q2 }
  492. // CRevAppApp initialization
    ' D. U3 }( n  s' W* }% O( H% {
  493. - V4 y( M; W$ n
  494. BOOL CRevAppApp::InitInstance()
    7 Z( A# f  ]  G
  495. {
    - J* {0 L' q# a* p
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];: y4 ]$ R# ~  u  ^" W
  497. ! H7 A: p9 V0 d; p8 V
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    5 u4 L; p: k: r7 j' ?* t0 I
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))# D; H% I5 f( k) U. z
  500.   {8 N+ l9 c5 I5 g& i% t
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    + K5 s9 @- s% E6 Y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    - _/ \" H4 z) t
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))& A) y2 ^- M* Q$ \9 c: x
  504.     {2 f# F$ @9 S" B2 D
  505.       strcpy(szPath,szPathTarget);
      K% U4 Y6 `) Y! L
  506.       SetCurrentDirectory(szPath);
    + m: \) g1 _  V' a
  507.     }
    : D& ~: h; i5 h# C% I
  508.   }
    6 ~, k: {' g! {( o8 F) L+ V
  509. #ifdef _DEBUG2 n( }& Z/ s& |' s" U& K9 I, H
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" k6 P& e6 p5 A" v7 g
  511. #else. x& \% }* Z! J% G  o$ b: S0 {
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + @" C. P# T; w1 J7 V5 R1 q' f
  513. #endif
    . s7 H, t( l% K9 S  F
  514.   {+ c: T9 w7 c/ q  O0 X
  515.     char tempFileName[MAX_PATH];5 E8 T3 d' b0 Y/ m7 u6 p, j
  516.     strcpy(tempFileName,szPathSource);
    - Q# m, h) ]- ?( W8 K& k8 w6 @! p+ @8 _6 k
  517.     tempFileName[strlen(szPathSource)-12]=0;) ^) q9 H  t  o' b/ N6 A5 \
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    4 |3 ?  H# F: b) p7 H
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);9 w0 y1 b6 k# d
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    3 C4 {& Z$ @) S  m
  521.     return TRUE;8 O/ z6 b* J; C9 c7 q/ e
  522.   }
    / N' b$ _, K; s# R& ~3 ]
  523.   // Nuke 0118: Delete run.exe1 V% N6 C- I7 t3 k3 F
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    & e$ B1 ~! Q1 ~. G3 ^' D( M% O
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    , a  j1 M# X; M
  526.   if(!ReadCfgFile("Config.ini"))
    ' j. @0 \! e: e; f
  527.   {
    # F: Q2 @! ?1 o- z: t% D0 f
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);' g6 i  R" C0 M
  529.     return TRUE;
    , _( R# [+ {, u
  530.   }( E" O& H5 [4 T5 t1 b
  531.   HANDLE mutex;
    6 ?# n4 m$ B$ V& f. Y
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    4 u$ n2 B0 \/ \7 Z) r7 ^: Z6 h, W; C
  533.   {
    2 `0 K3 W$ |& G( n  C
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)- V( H' _! q7 A2 s2 X' Q, @
  535.     {
    ' ]8 q1 u& G4 ^) Y9 a9 N# I
  536.       CloseHandle(mutex);
    / h+ T- Z0 x  i( F3 b, `0 B
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! a& L0 J1 |; c
  538.       return TRUE;
    7 h  ]) b2 K( s$ M. ]/ l: c
  539.     }
    - I# ^% ]- U8 ]& [$ `, u6 F6 c( Z
  540.   }  + `/ t: Y6 y$ y8 O# z* S6 }
  541.   CloseHandle(mutex);
    * N: {& L9 [! D" {
  542. ' r: @" b/ M6 i% H
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    & L. e, H' e# X" x/ Z

  544. 7 e  [+ Q6 h$ r
  545.         AfxEnableControlContainer();
    + k7 U2 T" x6 r6 d( A
  546. & ^0 l: q- b  {8 F9 Y9 Y4 W
  547.   bCanUpdate=FALSE;
      _: ~) M  A# C) R
  548.   dwStartUpSteps=1;  z& V/ t9 Q2 _) F, v) s
  549.   dwProgramState=AP_NOTHING;
    9 ?" s' W: @6 O9 h
  550. % b: K) y+ X( d- q/ Z5 T
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    % k% k' X4 q1 p4 r: t' K

  552. ; Y2 G- u/ H! J, o
  553.         // Standard initialization0 j4 H# J' t) C- B* K; u& h
  554.         // If you are not using these features and wish to reduce the size  |: M* t7 P  t+ p6 E
  555.         //  of your final executable, you should remove from the following5 D$ n# l& R3 h* n( o# `* Q
  556.         //  the specific initialization routines you do not need.3 ^, F1 P) H( I  R% A' i! _6 V: Q
  557. + T  _' Y( h! B* Z1 v
  558. #ifdef _AFXDLL
    8 Q1 w( u. K9 H4 Z, o2 G/ ]0 {# X
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL- ?( R% p, ^$ ^  o0 \# u0 W4 T
  560. #else$ Y) h( C! I0 [" k7 b& C
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically8 h) f+ i7 Z0 o- n' M+ x$ i
  562. #endif/ [3 I: e; n- a* m3 {# F
  563. 9 l: }0 x. T6 ^9 i, w
  564.   dlg=new CRevAppDlg;9 B( h( Q5 ]; H( H7 x1 {& C
  565.   dlg->Create(IDD_REVAPP_DIALOG);6 N( O5 p4 ]/ g6 K" [4 \" j! b# k0 |
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    : K% E" y. J& x9 h: A# A% @# K
  567.   m_pMainWnd=dlg;: q- q! \& v) t; F
  568. " F: U/ n( u4 |) Y( }" b
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);4 {& t- q+ u, S) p
  570. / _# ]8 e% k. {1 Y8 J' n2 h
  571. //  GdiplusStartupInput gdiplusStartupInput;. T( r$ |! F8 r; V: s
  572. //  ULONG_PTR gdiplusToken;
    6 d, j9 X8 K1 s8 K5 S$ b! f
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ( g. Y7 ^* P1 ?& g: r7 e2 {7 z* K

  574. 4 @6 e3 P7 O$ \% z! b. B
  575. //        CRevAppDlg dlg;
    - H6 k) D! M4 O1 T) g/ b
  576. //        int nResponse = dlg.DoModal();9 F' U1 H! `+ v' b+ g7 q" c
  577. //        if (nResponse == IDOK)8 t' R; ^# K: v) C, r7 J. Y. T
  578. //        {
    ( `. J. P* s' ~2 T
  579. //                // TODO: Place code here to handle when the dialog is
    7 M6 H' I3 e0 i) j4 [/ n
  580. //                //  dismissed with OK
    ( s3 z( Z$ }7 ?3 }8 h2 g- K) \
  581. //        }
    ) i" N2 t. V7 {8 L: W6 t
  582. //        else if (nResponse == IDCANCEL)) W0 b2 k: V& `& q6 [4 H. f+ j: h
  583. //        {
    8 e% i% x. w) x( d9 c8 ?0 w9 `
  584. //                // TODO: Place code here to handle when the dialog is  s' ^8 K5 `2 g$ D/ X- M: u0 T, ~
  585. //                //  dismissed with Cancel
    ; H$ X/ ]' N( V& O9 J8 S
  586. //        }5 e  s- Y2 E$ j6 _7 o% F, \

  587. 8 n5 b2 z5 [* h, C0 `* w9 k0 I% Q
  588.         // Since the dialog has been closed, return FALSE so that we exit the8 X$ ?' v% R( a' ^+ ~# B4 P; F7 I9 s- L
  589.         //  application, rather than start the application's message pump.5 t9 N( \% ?5 w. G& F
  590.         return TRUE;# A' C5 l% j2 @% U
  591. }
    1 }' A" J- u# Z$ K0 ~  {  h8 g

  592. ( f* R4 r5 c" w  h0 G. X
  593. char *CRevAppApp::strtok3(char *pSource,char *token). C, r7 w( D2 P# l4 ]& n0 k, h
  594. {/ C. l+ N' d  ^% t6 ]7 i0 k; M  K2 }
  595.   int i;$ o% D& n3 }2 W- \2 X) A4 D
  596.   char *szRet;; g' X* ]) j, i- s& n3 F% j

  597. 0 r. W0 }/ J" e. l4 a: y
  598.   if(pSource) { itoken=0; sztoken=pSource; }; V* V" a6 t( _* F
  599.   if(sztoken)
    ! ~: R' |- J  ~" [. G
  600.   {
    9 v( W  k4 J7 B% Z, b% l! m
  601.     szRet=&sztoken[itoken];- e; d9 H: w1 \5 k9 d
  602.     while(sztoken[itoken])
    4 P; Y. B7 o* j# D8 r  c3 @
  603.     {5 ^  v& Y5 G8 [) g! r1 b
  604.       for(i=0;i<(int)strlen(token);i++)
    % W( s2 J/ f% N# p( v
  605.       {# p: _0 K0 ?0 }4 t6 H! a
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    1 c% v  @7 t- m0 b
  607.         {
    - h* |; a" \5 ^6 a3 c
  608.           sztoken[itoken++]=0;% _! P% f' \4 f& J; `- u7 J
  609.           sztoken[itoken++]=0;
    3 B! \- O, R) F6 R0 P" c9 B( t. d
  610.           return szRet;2 h0 c6 b' j( P- Q2 d) X# G
  611.         }% P0 u8 T: x% i) F' l0 |
  612.       }0 P& \" Q, z" Z% ~, w. C
  613.       itoken++;6 H2 ~* q2 B7 Q" `/ Y* ^5 \- Y
  614.     }
    & I$ p! l) ~1 Z- |8 ]4 m
  615.   }
    # o% E) q# z0 U; S& r" v
  616.   return NULL;4 g1 h+ `: w) o& z3 r5 e
  617. }
    % @# R3 R+ i! D/ M) Z5 h+ b
  618. 1 x1 M9 c, \, m
  619. void ProcessProc(long Total,long Current)' H% S: `. |5 ]  ~' }$ O% j
  620. {
    / c4 [; d4 z! Y! N" N% Q
  621.         MSG msg;
    ) E% {% ]" |& ~, S# \
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ( {# n7 T+ @8 q+ q; z; q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    4 L6 d, c/ c. B3 h( O; z* f
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))1 v1 {5 }- ]: u, I( u- `
  625.         {
    - F9 C! [" d; Z/ }) }
  626.                 if(!GetMessage(&msg,NULL,0,0))7 R: T+ q  S3 m, K0 Z! @9 L  q
  627.                 {
    " M. X5 ~0 s9 y/ c8 y& V
  628.                         return;& P" M: m( H5 ^- I
  629.                 }
    2 [) z% }$ s; B/ w
  630.                 TranslateMessage(&msg);5 U, C; u4 o) V2 g; d/ M
  631.                 DispatchMessage(&msg);, `/ j+ L* t; f
  632.         }        0 W% q( F$ n& [& e" z
  633. }
    ( E5 M+ N$ ?+ D6 L* b; o& s

  634. ( e3 B2 Z- p8 }7 T- o( ?
  635. BOOL bFirstChar=TRUE;
    0 X9 _& i5 x) z: u/ H" l& y
  636. 4 f$ Q) ?6 Q9 W5 D2 W4 @
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    9 O3 i" A& w0 V. Q
  638. {( f& x( K! ]4 q0 M) P7 b/ f
  639.         // TODO: Add your specialized code here and/or call the base class  v; l! N! O2 o: v, `. I# _' X
  640.   switch(dwProgramState)- o, p' \4 f3 j- S& M
  641.   {0 T+ R$ T' w) T* D2 p
  642.   case AP_NOTHING:
    & V; t3 R( x* x6 g: o7 W
  643.     switch(dwStartUpSteps)
    " z5 H) m9 m& U& k* U; S- d
  644.     {
    # f( G9 p: n  s7 k' w6 e
  645.     case 1:# _  ?+ `8 `1 t, T: E4 J
  646.       {- ?: z5 i9 F/ M1 R6 N3 {
  647.         int i;* z' W8 ~& ~% V1 U$ T. I# |, B
  648.         CDC *pCDC=dlg->GetDC();
    7 q6 W/ L1 p. [% c1 v
  649.         HDC hdcwnd=pCDC->m_hDC;
    % o- K+ T9 `2 H' p2 z9 Z( Y8 s% C3 C
  650. //        Graphics graphics(hdcwnd);
    $ z! K8 J: M% V2 `+ d8 D, S
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ; ?' w! ~7 {# y  w4 p5 H
  652. //        INT iWidth=bitmap.GetWidth();
    7 }( |- B% q/ d
  653. //        INT iHeight=bitmap.GetHeight();# {6 K3 O$ `0 y! @* {, L$ v# L
  654. //        Color color,colorTemp;  e  R* r7 O9 ^& m) F
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    0 t  r. A# t5 J+ W
  656. //        {
    % j- K/ v# p% w+ |5 w6 s
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)( p8 ]* r5 O- ]2 b1 Q2 A+ T- ^& D9 k
  658. //          {' K0 }/ V1 a/ U2 m- _& ^3 d* U5 Z% L
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    1 O+ K2 L4 B: y  `- A
  660. //            colorTemp.SetValue(color.MakeARGB(7 q7 e  H4 Q; m; L; D+ ~
  661. //              (BYTE)(255*iColumn/iWidth),
    6 J* e" q% C# ]1 v8 B; q
  662. //              color.GetRed(),' r/ k1 {' E4 H( d) T
  663. //              color.GetGreen(),
    ) W) }' z" B2 j1 E% o1 A
  664. //              color.GetBlue()));
    ( r$ L' a) q& O1 L
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) f% M3 M) G$ @- T0 \. s( g, D
  666. //          }
    ' J9 R3 u. G! N3 N3 K& h9 y) Y4 p
  667. //        }
    + C/ A3 X9 {8 \% P# |5 X
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);3 }9 O! c- N  H( g
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");% i: z) l& X- i' |8 w1 s
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    7 J  f/ t' q; E) T0 a9 R& |1 ]
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    8 I. b3 h! I8 n6 Z
  672.         for(i=0;i<240;i+=8)
    8 ]& z; ]  W- s: @7 ~
  673.         {
    9 p" B) w( z- A1 S) t6 K
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);* \5 {! o2 d& o+ a' Z0 x0 C; s
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & _8 z2 O4 U* E1 b! i5 u
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);9 }. u+ K4 i  [3 W2 F* W- y$ P! w
  677.           Sleep(33);
    7 p5 M6 y/ v  _3 `9 h
  678.         }
    : p8 X# l1 n& X8 p6 _
  679.         Sleep(1000);
    6 k; U. `4 B$ n) s
  680.         for(i=240;i>0;i-=8)
    0 X' d- ^' `- @- W+ v8 R& M8 H: n
  681.         {
    7 X5 ^, H; ~5 e- z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 \9 d7 _; I9 X4 x5 _2 B
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 p" r3 {" o: y$ ?
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 t8 n* Z( N5 o# g1 q1 G& r
  685.           Sleep(33);
    3 H7 `0 \( G- ~+ c# I
  686.         }
    3 x2 {  T8 }, g8 C
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);1 {% d, ?7 r4 K8 h% `. N; G- {2 u
  688.         dlg->ReleaseDC(pCDC);( e& I3 q; ^& O5 O3 ~
  689.         DeleteDC(hdctar);
    ; X& L; R2 f; o; E5 {; t
  690.         DeleteDC(hdcsrc);/ ~, u2 I: I4 r
  691.         DeleteDC(hdcorg);
    9 S% Q" ?! b4 _
  692.       }
    + S, g$ [5 h# t8 m! m3 N1 ~5 f
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);1 g8 ?+ y% L5 J- n, P
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");5 {/ p! V7 K/ m  z+ }  W7 J9 p- f
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    # o* G  @$ Q! S: B6 z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    % h( @, f( g& {* N: ^* q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" Q8 x4 G$ O+ i0 Y2 L
  698.       if(!Dn.Connected())
    & l* F2 R2 j) n, U
  699.       {
    * L; Y7 q  l$ X( J* }5 W
  700.         dwTotalFiles=1;
    - ~) X2 R: n" T5 I3 V* ?5 C+ g1 x
  701.         dwDownLoaded=0;! F4 N4 W6 m( G1 p9 r: L0 i  e% k
  702.         bSilentStep=TRUE;5 w. ~. p* @: R' ]8 _: u8 E
  703.         bCompressed=FALSE;' q) Q4 j7 Q3 s/ x2 t! L
  704.         strExtLocal.Empty();
    % C+ u) {/ m9 f6 D
  705.         strFullName="readme.txt";
    ! t# Y7 D4 P( m! ]0 m  _0 h: i
  706.         dwProgramState=AP_CONNECT;
    * ?( B$ T) H2 V. P3 v2 K+ Y
  707.       }- {6 ?/ J/ y3 m  E6 j, l
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();. u( I0 z# q8 @2 |
  709.       dwStartUpSteps=2;( H) H+ |) x# s5 r. O
  710.       break;# Z- z  f  V, y) A. z
  711.     case 2:0 C  h$ r  j5 E; W
  712.       {4 e' b4 Z# L- f
  713.         int iEOF;
    + }6 A+ u) V$ f  u, i
  714.         FILE *fp;6 e) B$ z# s8 |, L
  715.         char szString[512];
    0 y7 ?) I6 i/ n/ \8 H
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");4 b: o1 D- y6 \0 v% [
  717.         if(fp)
    + T" C& ~. ~5 }* E
  718.         {
    1 \* f. v& v! W5 g
  719.           do
    ( n2 t' ^, W2 |" L% O$ V$ x8 ~1 D  f
  720.           {7 n  Q+ n! O/ l9 g1 X* a. P
  721.             iEOF=fscanf(fp,"%s",szString);* n' J5 G* Y1 K
  722.             if(strlen(szString))
    # V( ~0 {; s* W$ z( Y
  723.             {
    # e2 e$ P2 T' _
  724.               if(bFirstChar)
    3 V0 |- h% D, l% i! j7 _9 t
  725.               {
    1 m) c- k6 C8 j) c  Y1 b& B4 a
  726.                 bFirstChar=FALSE;# F2 {. ~7 \8 R( N4 U
  727.                 bConnectIsBig5=FALSE;* D4 E% P. O7 L4 E: j
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ; `# H; V  w' X% s; j6 {
  729.               }
    , i2 S* ^6 U8 i' U& {9 S& T% w
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));* h' s3 z9 S6 c* s( h
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));$ ^, G. |" d$ ?6 K* H- i. i% d. M
  732.               dlg->m_ListText.AddString(szString);- w* h; d$ U* C8 X8 o1 P# W$ M
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% k, j; S( Q% n1 F/ Q
  734.               *szString=0;
    ! R8 K7 T. f" z2 n! o
  735.             }
    2 Z4 ?% m; I- J2 L! o% G  U: o
  736.           } while(iEOF!=EOF);
    - p/ i4 [  c# M5 u# J- j  r5 c
  737.           fclose(fp);6 o0 g6 Q( M* w* W2 K
  738.           unlink(".\\DownLoad\\readme.txt");
    + s5 U. N8 G) o
  739.           dwStartUpSteps=3;1 F7 i( r4 E2 \; C5 F6 M
  740.         }' E3 r% ~  M. I" b2 C
  741.       }# d$ {# R' |. I+ N
  742.       break;* b& n/ a8 v, t% \$ V  ^7 E: C0 V
  743.     case 3:
    0 d; F" x# d9 H- B  u0 D
  744.       if(!Dn.Connected())1 m+ X5 U1 a* y2 a
  745.       {; d' V( Q0 \; W, ~
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);1 b3 V% p" [4 N; d
  747.         dwTotalFiles=1;0 I: o8 e9 L  ~+ d. ~8 B
  748.         dwDownLoaded=0;
    / J' b6 _/ _- M" U
  749.         bSilentStep=TRUE;) S+ y  y. G' b7 b: u
  750.         bCompressed=FALSE;
    " J4 f/ v7 ^: D* k9 A4 ~
  751.         strExtLocal.Empty();
    , `8 v3 `. U; `8 D2 V& V1 Y" X. d8 e
  752.         strFullName="checkversion.txt";
    8 M0 Q* u- D: s6 X, p% U
  753.         dwProgramState=AP_CONNECT;8 f( q% D% g0 Q. V. h
  754.       }+ e& p: C8 x9 K5 q0 c
  755.       dwStartUpSteps=4;
    ; t$ I  X* r& z( M! x
  756.       break;
    2 F8 q3 w1 e% u2 p
  757.     case 4:" `% V" t) Q5 z' d1 C0 i4 W7 O+ L
  758.       {
    ; c5 ?* v; h9 `# D; o& I2 O
  759.         FILE *fp;7 [2 j: W' T; i' ]" b/ E* r
  760.         char szString1[128];3 p9 }1 s2 G, W3 Z  Y% M4 _
  761.         char szString2[128];7 m; s2 [4 S9 c) K/ A' s1 o/ R
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; N+ @6 W2 o2 N: G/ u/ }# O/ ]: Z
  763.         if(fp)
    ; i- [5 w" ?; i# f9 b$ d
  764.         {
    ) }& w* Q( i; c4 @* C
  765.           fscanf(fp,"%s",szString1);/ o9 P7 W7 T  s' r3 Z5 D  |: o
  766.           fclose(fp);- ~4 V2 W  D; V, T
  767.           fCheckVersion=atof(szString1);
    " b; h, }% @' V9 X5 o
  768.           fp=fopen(".\\checkversion.dat","r");
    0 x( g4 ]# e+ I! \9 f! Q- ^7 |
  769.           if(fp)
    7 r* h9 e" E9 T: F
  770.           {
    " c- w1 u" _; R" Z
  771.             fscanf(fp,"%s",szString2);
    , z/ K- f. X( d5 N
  772.             fclose(fp);
    / t; ]+ F* Q7 x: I
  773.             if(atof(szString1)!=atof(szString2))
    & ?6 k2 Q" h" P  |3 T1 E
  774.             {
    9 M2 v* C; }' s8 ], h- ]* [
  775.               if(!Dn.Connected())  N. J2 B7 G; w' Y$ }: t& \
  776.               {# C+ n- I  K' F+ K  a. b* q1 P
  777.                 bFirstUpdate=TRUE;
    . L. ]( u! c- M7 D2 \, H
  778.                 dwTotalFiles=1;. T# ^6 @7 V7 u$ C
  779.                 dwDownLoaded=0;# I0 g" O2 z" a! F3 u: c
  780.                 bSilentStep=FALSE;
    . y) w" O9 E" O# U
  781.                 bCompressed=TRUE;) k7 Q. I; E8 k8 r$ ^# \
  782.                 strExtLocal=".\\DownLoad\";
    9 w' `# j$ j. |% k
  783.                 strFullName="update.txt";
    4 z. Z, x1 b! A& `: }
  784.                 dwProgramState=AP_CONNECT;' }. M! q+ O6 Q6 I; S4 z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 S# m1 A$ k# m5 v) Y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    # y# ]" d- E( C! {3 N
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % \9 n" g. R5 M% x  ]
  788. / I# m( F3 J5 j* G; U5 i- e
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ t" q( @- ~. a8 ]6 s4 y
  790.                 unlink(".\\DownLoad\\checkversion.txt");8 B. H! e# E; M1 R' L
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)- W5 A" t2 H" Q# }, L
  792.                 {
    4 e+ V1 z7 W5 y4 |0 S! J
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    " `/ e# Y* `' D0 ]7 {, s
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");; t  \. L& N, D1 U1 G; ^6 S0 X
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");" s& U8 J! x! ~/ Y' H
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! M0 D: ^* S8 J3 u+ |1 B

  797. / e6 t1 N7 F$ P6 |- r
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- s' L0 u7 ]$ B0 y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ s( x" i' Z# z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");8 ?! m  b6 |6 I7 n( f6 o
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : [+ T$ t& Q1 U
  802.                 }3 Y! \1 Y$ o! G2 g3 ?
  803.                 dwStartUpSteps=5;
    , @- y0 V+ n3 e1 Z& h' n4 X
  804.               }5 E2 G8 s: y& _7 M
  805.             }  L2 `& D( |+ X/ g% k$ |* j, Y
  806.             else
    - u4 t( t6 B$ E# P6 G- H
  807.             {& N, n- N( s0 S& u
  808.               unlink(".\\DownLoad\\checkversion.txt");# J- g; u& D" M" E( p: |: O
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");$ o- f" w2 h/ {- C# ?/ s7 J
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");9 a7 S8 {) W) ~
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 O" ]0 S' m! `8 ?" e
  812. " H+ \3 B, u+ q+ D7 c& R9 a
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 R$ F, Y% f2 B' I4 x
  814.               dwStartUpSteps=99;
    ' f3 Q+ c6 s6 [. R, L0 Q; f; z
  815.               bFinishUpdated=TRUE;
    " ^& ]6 H7 D; B3 M
  816.               bCanUpdate=TRUE;6 Z9 v0 g3 [) A4 K
  817.             }
    # y0 R/ g% V9 d- J' b
  818.           }( ^, N, q/ m' `+ D
  819.           else. n) F8 N/ w) |
  820.           {& v9 u$ e8 X3 g; f; Q( K  N
  821.             if(!Dn.Connected())3 g) f( m1 [: I9 p5 w* r6 S0 T2 Q4 Y# _
  822.             {" l; C8 a" r$ R, N8 X8 E
  823.               bFirstUpdate=TRUE;5 ~% h. [8 ]9 K
  824.               dwTotalFiles=1;: G% F7 |6 E: @0 r7 h; D
  825.               dwDownLoaded=0;0 }$ o2 V/ Y! l3 f! S+ z# |/ D; n
  826.               bSilentStep=FALSE;
    ; x$ q' ?- L" j5 j7 b) O5 ]
  827.               bCompressed=TRUE;/ o/ J# c8 L1 e, ~+ }' q) @
  828.               strExtLocal=".\\DownLoad\";0 ~9 k6 X9 f# p/ Z! Q3 ~: \& x
  829.               strFullName="update.txt";1 N& i  I0 Y* D) T
  830.               dwProgramState=AP_CONNECT;" P, J6 W' p, v7 \# _% e
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 i2 n9 o7 d- }1 w0 Y. H6 ~
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    . E! v) `3 v3 o2 D& {6 {
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 S  n1 {. p4 n
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , e) b! L! x- N
  835.               unlink(".\\DownLoad\\checkversion.txt");
    7 {; m$ X& F& ?  C
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)* ]2 d, b4 P0 R1 \2 Z  @, d, J
  837.               {
    # z# j. y7 t7 e% G) a5 J! N9 W
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");% v# j) K. V0 s  L, _
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    . x0 w: V* p, w2 I- e
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    3 o, T& w3 a) ?0 c/ a+ Y9 d4 C4 b
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* l6 w# c# v- u
  842.                 : ]8 Y  u3 I+ G% U: g% n3 ?/ _, ?
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 @; l  z" p  d. A
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    / c4 w5 M. h2 L* i
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");% @& f3 z' p( S; D: J
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 c+ y1 i1 [5 c5 _$ C( _4 v- }; q  e
  847.               }
    . R# m0 ^# X( l0 x7 o2 u
  848.               dwStartUpSteps=5;
    4 X8 T+ V1 [8 ~5 h7 F
  849.             }, L* n4 H# |# A3 m7 M7 p
  850.           }  T$ W% P2 X+ Y
  851.         }
    9 D( ~9 [3 @* u3 z3 J
  852.         else0 ?% R; N9 O$ K. f7 C
  853.         {! Z8 e6 Q" ?( f8 a) {4 r
  854.           dwStartUpSteps=3;* W9 P) B) ?9 D* U
  855.         }  w  N0 W5 T. M# [# Q/ x
  856.       }3 x0 S* o- T( `. L# K
  857.       break;- ], g( u  w1 V! {
  858.     case 5:
    * z1 k3 t! H  [
  859.       {) o$ x/ b$ }! f) |' B4 U* G
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    . G! ~' J3 V5 b1 o
  861.         {& a: Z0 v% ~. M5 s% \0 c0 U
  862.           int opt_overwrite=1;7 @6 v2 A, M2 a0 ]
  863.           int opt_do_extract_withoutpath=0;
    : X) @& W( u/ @' ?
  864.           unzFile uf=NULL;
    ' z4 {: L4 Q' p& W, h; [# \

  865. % Y8 j* O; ?! R4 {0 k
  866.           uf=unzOpen("Wsa.zip");2 u4 }1 j3 J! R& s: u1 }! t* N
  867.           if(uf)2 H4 h, T8 r3 ~+ O8 }$ c" ?4 W
  868.           {
    : p( v  [) J4 n% ^3 n
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);: c7 W8 z5 ^5 {
  870.             unzClose(uf);3 i3 m& n6 g1 _4 ~5 P
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");5 n9 Z) [$ {" [3 ~4 W! a: V
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");  d% j8 M; n: ]& o1 X
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");+ P7 z7 S1 w* n2 p0 L3 g+ i. o
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  y4 l& E( \" a# m6 R# G. v* J% n
  875.           }2 P' P9 O  |0 W  m2 v$ O8 T- {% R( c
  876.           DeleteFile("Wsa.zip" );
    % b' x2 G& _% y% S, V! j- G
  877.         }
    4 b$ {5 x7 W) }( X4 F/ W

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

評分

參與人數 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, 2026-3-7 06:24

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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