CSUpdate.exe源代码

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

3 Q; ~. y9 m# L) H
  1. / RevApp.cpp : Defines the class behaviors for the application." f8 G8 M' ^6 F
  2. //! _) d5 p/ H& S/ O! U$ g
  3. 8 }; @; c6 E, L! _( W
  4. #include "stdafx.h", S" K/ R5 I/ o  h

  5. 9 v3 v- `' [. G5 A* r
  6. //#define UNICODE
    3 F. t  {- `5 Z" H/ q
  7. //#include <gdiplus.h>2 H9 z- i' m. `! l. O2 ^! @7 O/ K
  8. //using namespace Gdiplus;
    ( p! S4 \+ P6 V! G  y7 p  M! ~$ M

  9. - Y/ G! W! R7 f; L. i1 Z
  10. #include "RevApp.h"
    7 x8 W2 ]5 w9 q" R3 B- O
  11. #include "RevAppDlg.h"! n  u+ R4 u" l6 t
  12. * h! L# f' k" v: ]& g/ {
  13. #pragma warning(disable:4786)1 x4 g7 u, q" N
  14. #include <map>. Z5 K/ l! u  `4 I+ w4 C* |
  15. #include <list>; H8 J$ x' }2 g
  16. #include <direct.h>, E, }  u& T" C; R3 f

  17. 5 }" M$ d; I( x4 W+ U! O! ~* z9 w
  18. #ifdef _DEBUG
    # y/ `0 p. ?, f  a( o5 J
  19. #define new DEBUG_NEW
    $ s- l7 h( d  x! L0 g
  20. #undef THIS_FILE
    + l! D: M0 J) ~
  21. static char THIS_FILE[] = __FILE__;4 r' N+ K: n. y
  22. #endif
    # ], Q0 V1 e% b: }1 a5 g1 {) B# H; n
  23. #include "SkinResDef.h"- h' Z3 G* L/ i  q& x
  24. #include "ChangeBG.h"$ {+ F* c4 V- e6 u: U0 O
  25. #include "AFXINET.H"
    : x, }3 L; H  f; Q5 n- a

  26. 9 W8 o# v+ `) [7 s9 G  ?% A1 v
  27. #define TRADITIONAL_CHINESE 0, M3 {+ f5 ~9 z! P" @' k7 _
  28. #define SIMPLIFY_CHINESE 1" l& c: U0 Z6 w
  29. #define ENGLISH 2! m: A  N$ s4 T0 E$ \0 S
  30. int m_iLanguage = ENGLISH;- k5 r7 \0 k' c* u( J
  31. /////////////////////////////////////////////////////////////////////////////
    3 u7 A1 ]$ n" q! X" `/ `
  32. // CRevAppApp  @4 c* e7 _5 c7 T1 |
  33. 8 D9 S! i- K: J
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    - f# ~* u5 x, G1 X
  35.         //{{AFX_MSG_MAP(CRevAppApp)1 c; [6 m& X4 T' }' w9 x: {4 G: b$ U+ y
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    4 J* [/ _! r& B4 t0 V
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    1 r, ]' }; i+ p8 h8 Z. S9 g
  38.         //}}AFX_MSG  u- \; C( @! u+ q. l, J& L! R( z
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ! M% k2 }4 C! x) v) ]" H
  40. END_MESSAGE_MAP()  {+ g5 i' x; W
  41. 5 J% a8 j# ^! W% x% @& L
  42. /////////////////////////////////////////////////////////////////////////////" P+ m; j: c- Q0 b/ c5 d9 [" g2 S% N
  43. // CRevAppApp construction0 S  j. q' V7 z9 T( D
  44. 8 K3 a% N& L; d  R% v" K7 Z( n
  45. CRevAppApp::CRevAppApp()7 [0 r) V$ s, r8 t
  46. {5 k$ a2 F1 R/ V2 p) w8 n1 F. v
  47.         // TODO: add construction code here,
    * v& _' V: {2 j6 [
  48.         // Place all significant initialization in InitInstance/ e6 E3 ]6 D! P8 m+ @7 O" N# A
  49.   bDisplayIsBig5=FALSE;
    / h! p5 X3 `2 R7 ]* y
  50.   bRestartUpdater=FALSE;4 v$ A$ ^' H% V
  51.   bFinishUpdated=FALSE;
    ! P' p* f$ G( D$ U
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    , A+ S9 t6 h" j
  53.   InitChangeDataBig52GBKS();9 m) ]; [1 U& n; y2 F
  54.   InitChangeDataGBKS2Big5();
    5 c8 M) g/ l' w/ z1 \
  55.         /// r# i5 _0 g5 u8 y  @3 ^7 F
  56.         bClickRunExe = FALSE;" |8 `7 R/ S, }
  57.         //$ {$ E, y: K/ _
  58. }) x& a  }- U( v% \) Q" n& ~
  59. 2 F' y/ t7 C: k4 _, c3 V* e0 ^$ W
  60. CRevAppApp::~CRevAppApp()$ T  A5 A" X# B2 k6 d" n
  61. {/ ]% a7 u/ [: S( h+ e$ {
  62.         // TODO: add construction code here,6 z3 C' v% t+ |. i9 D1 y
  63.         // Place all significant initialization in InitInstance
    . `" W( P9 o' b, A$ e3 |+ L* D- M
  64.   EndChangeData();. K2 T3 o4 X( _  H
  65. }: H9 {+ Y. o2 T" E
  66. 6 z" F- {7 S5 y9 B1 o& f9 ^' A4 N
  67. /////////////////////////////////////////////////////////////////////////////
    1 g' t" n$ ~6 p  [9 f
  68. // The one and only CRevAppApp object
    , U5 l" A8 L2 z: I3 B3 \0 ~( H

  69. " u6 f- t+ E/ [5 I+ t: ]2 N
  70. CRevAppApp theApp;2 J; ?. @8 u* o* r$ m
  71. 4 P5 v/ q1 T( {! p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)" ]# w$ J# q- d! E2 b7 d
  73. {0 A5 I& P- c6 Y$ |# q9 F5 \
  74.   int iEOF=0;  M6 Q6 @1 |' v. ?
  75.   char szTempName[MAX_PATH];
    ( m" Q. U  I: M( v( I( }2 [
  76.   *szFileName=0;
    ; u6 d0 ?) c2 y5 n; G
  77.   iEOF=fscanf(fp,"%s",szTempName);0 \0 @2 F$ y! P( K
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')5 `+ E9 S7 ]  j3 M# l8 x
  79.   {6 q7 w5 m4 @, ~- ^( W. g. {
  80.     strcpy(szFileName,&szTempName[1]);
    * V- D& h, n" g
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)8 R9 L1 y# D4 X/ @3 u6 `
  82.     {
      S" G7 U# t* a
  83.       iEOF=fscanf(fp,"%s",szTempName);- g2 t. w; p& \7 }- \  _
  84.       strcat(szFileName," ");# T- `2 z3 K$ q$ k6 m
  85.       strcat(szFileName,szTempName);
    2 A' ?/ L/ d1 q  W1 v0 V3 K
  86.     }+ I) ?. O' m7 s* z# j
  87.     if(strlen(szFileName)>=1)
    7 _" _1 b4 s0 ]- a* M3 E0 s
  88.     {8 |+ k" g2 \2 r! h
  89.       szFileName[strlen(szFileName)-1]=0;+ m, O% t' f' F% f& Q! b0 `
  90.     }/ r' B! k9 i  w5 T+ W2 ~
  91.   }
    " ^3 C' g' e$ \8 A
  92.   return szFileName;
    , [# y, O' n1 m
  93. }8 o. p( ]3 B) V8 ?* t

  94. 0 a! s9 ]8 |: q
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    . Z7 d# l2 o; ?2 X2 s' j
  96. {4 }* J) z& P7 {  l% l3 b- x
  97.   FILE *fp;% ?% R6 n+ u0 J5 C9 R7 E/ z' g
  98.   char *key=NULL;
    % x' [( W- b' I) H- l+ f1 M
  99.   char version[MAX_PATH];
    5 U+ [4 z  t: Z# g; W. [
  100.   LPUPDATEFILE file,olds;
    ! V3 h' x# _6 b% d7 h
  101.   std::map<CString,LPUPDATEFILE>::iterator p;# f5 M2 d% C, c4 p% A/ s
  102. ( a7 F  V; q) u, c; c9 W- @  Z& t+ i0 ?
  103.   UpdateList.clear();' f% s: L$ T+ ]6 v
  104.   UpdateFile.clear();; B0 n8 W  ^( k+ m
  105.   if(GetFileAttributes(filename)==-1) return false;
    / R. q; O/ L5 a) K3 M. Q3 C
  106.   if(!(fp=fopen(filename,"r"))) return false;: R, R  k! W4 |; P. P' e7 _& @
  107.   fscanf(fp,"%s",version);
    ( L4 ~$ R) t+ r& A
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ( v9 z/ k  o, f: x; @5 b5 m
  109.   while(fscanf(fp,"%s",version)!=EOF)3 Z% T8 A+ E7 V: h6 s$ b  a2 G
  110.   {3 x8 i; V2 V2 ^9 C; x9 S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 {9 Y6 Z% F7 [) ~) O7 M' E! _" C
  112.     fscanf(fp,"%s",file->path);# w: C! ?3 v8 |) U% D8 b
  113.     ReadFileNames(fp,file->file);
    . Z# z) d" O. o. C, u# u
  114.     strcpy(file->full,".");! y' E# {: z) T& P& E+ m
  115.     strcat(file->full,file->path);8 @4 X4 F1 y' E% w& V
  116.     strcat(file->full,file->file);
    / w. i% c% U5 z" r9 z+ B  R
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    - `: J3 _8 a& x2 P; L: B! Z
  118.     {! Q; A" p, F% n; H  `. Q4 o5 t" F
  119.       file->vers=(float)atof(version);
    0 y' i: ^- `7 K: Z0 `
  120.       UpdateList.push_back(file->full);
    $ L1 r2 @: S4 ^! T' a1 C
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    7 a1 U0 S( ]& C
  122.     }7 e  h) F$ S' s4 N
  123.     else
    ( z/ A& d8 g; s" m
  124.     {
      S8 t" [$ v6 _# C
  125.       olds=(*p).second;
    2 d' f/ A! g5 g$ {
  126.       if(olds->vers<(float)atof(version))2 q% v% c2 m! r' {6 `* M& R
  127.       {( }' F  x# h6 K6 {
  128.         olds->vers=(float)atof(version);4 \/ P( t& @$ |0 T' X
  129.       }
    & z! w8 O2 e4 B; ^1 z& T7 `, ~+ e
  130.       free(file);% \+ y5 m0 r9 _: c
  131.     }+ b3 D' i0 o. E  {" W# J. B; i  i
  132.   }
    + n2 {; O  ~2 H" B; C* H' V
  133.   fclose(fp);
    5 g6 O+ o- W9 v3 @  x, |4 M- v
  134.   return true;
    + p* j( {, c0 q2 D/ {, j
  135. }
    $ P* |+ g0 j4 Z( ~9 a9 u5 y, g: }

  136. ( m2 n$ c. t5 N2 {4 i4 u
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)3 r* c4 {- g5 }$ X5 ]* w; B
  138. {7 @: g% a$ o6 h6 q3 J
  139.   TCHAR  szFull[MAX_PATH];8 ?" d6 o9 A7 d4 i
  140.   TCHAR *token,*inter;$ F* K  i1 y% i" Y
  141.   *szPath=0;3 j* |+ }6 P) i+ l
  142.   strcpy(szFull,szFullPath);
    5 u5 G' \0 o9 `
  143.   token=strtok(szFull,"\\/");
      j+ ?) X, M, H4 T
  144.   inter=token;8 b+ n2 G' }; ~: P1 [6 N
  145.   while(token=strtok(NULL,"\\/"))" n. S& F" O* J( Y
  146.   {
    : [$ g3 g, N, W8 `% F5 c9 c9 o. y# P6 K7 T
  147.     strcat(szPath,inter);, Y- r. t, e+ w+ ]* s9 d3 |
  148.     strcat(szPath,"\");
    ; e* ]3 F8 g8 d- T& s. c
  149.     inter=token;$ t9 b5 R6 E4 ^4 }; f
  150.   }$ b9 A" I5 x% t
  151.   return strlen(szPath);# V; M! `4 |, X# Y
  152. }/ L) U8 z; K3 O$ `# y9 h) h

  153. 2 C. k" p* a5 ~  g8 @
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ( y& @# ~2 \2 H
  155. {8 w4 u6 X1 ^: T8 K% m- S; B4 c
  156.   DWORD attrib=GetFileAttributes(Target);6 f5 r8 D2 v% {
  157.   if(attrib!=-1). P5 I9 n+ n9 z+ W
  158.   {8 F" t: }# _% i1 ~5 F
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ a2 o6 E2 X# Y* u1 ^
  160.     {" E% U& c: Q' f3 h+ I6 {
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    0 g: r0 j0 Z( r) m" X) J" [
  162.       SetFileAttributes(Target,attrib);
    ; P' \! `; {6 |$ I
  163.     }
    9 @4 I# d7 M- L
  164.   }  Z( u' h( u' [- k* q* J& f* F
  165.   CopyFile(Source,Target,Erase);0 V4 h( @+ p! K* {1 H
  166. }! E0 q# P) B% e9 A0 J
  167. - c4 |9 F% N: P, P. G
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    - k- F* g9 N. n5 m8 {+ t! I$ l  z
  169. {
    8 y$ S5 ~  V, X$ }- r, W4 `
  170.      FILE *fp;
      U( R5 O, B" ~; ?
  171.      char  szBuffer[8192];
    , x$ s, H9 i+ k+ [. K
  172.   va_list  argptr;
    ' G9 \% g0 k# F! u5 U' y; u* }

  173. $ S+ V0 ]- u; P4 c
  174.         va_start(argptr,message);
    & `, z1 T8 o3 E
  175.         vsprintf(szBuffer,message,argptr);/ c3 l8 B( J* o0 {" |
  176.         va_end(argptr);# m; \" x& W. {6 L+ b2 s3 P; s1 F& }
  177.   fp=fopen(FileName,"a");
    6 p* ^; M& V+ r6 Y' |
  178.   if(fp)
    " I3 c  H, z' U* I1 i8 ?8 E
  179.   {
    % H8 \9 ^2 ?$ q7 v' ]9 C, Z) r& E
  180.     fprintf(fp,szBuffer);
    ) ~; G4 j. z8 }5 _/ a2 C: O
  181.     fclose(fp);0 @& D  R8 q4 c* G+ A' q
  182.           _flushall();# F0 D1 h/ e7 j0 |" p9 C8 a. P
  183.   }
    2 @0 Y5 g% U1 E! [! j3 P+ k
  184. }2 x$ j: F3 P9 j2 L  @: K

  185. ! q) V3 g7 w* e& Q8 P
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ! b/ I4 K+ K2 K' c5 b0 w
  187. {0 U- Q( u' `9 B3 v- Z3 @
  188.      FILE *fp;
    8 c' |, a0 _8 h, m1 ]- q0 h9 P
  189.     DWORD  attrib;  Q, P+ h, ^/ {! {+ t% {
  190.   attrib=GetFileAttributes(FileName);7 ~$ ]2 p7 j! M9 v
  191.   if(attrib!=-1)
    9 r% O8 A# S2 P: y0 p' a
  192.   {! g+ _" T' g: c% y% S% Q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);6 [8 n7 e( s+ D/ ^$ W3 F# p8 x# Z
  194.     if(!SetFileAttributes(FileName,attrib))
    / k  l$ u7 Y! B$ z0 X8 G
  195.     {
      Z" t6 D$ J, a  @/ ^+ _) o# _8 ]
  196.       return FALSE;
    1 C) H/ G9 h. d
  197.     }
    % b1 w( Z- O( u/ W
  198.   }0 B0 @$ N, Y% Q' W  A. S
  199.   fp=fopen(FileName,"wb");
    # S( `. U6 p4 R/ K6 H, [  ]
  200.   if(fp)( \) `3 c1 ]& a0 B  M7 g- [
  201.   {
    * g. f9 }$ O) e" A7 \2 E
  202.     fclose(fp);
    6 M3 |# T" e! P1 b6 Z
  203.   }# u" i0 v4 }; D: \  g' ^
  204.   return TRUE;
    * z2 @9 s* q& K9 D) E. T
  205. }
    / u: n. o! x: a! C; `* T

  206. 6 C) k. R1 G+ L
  207. BOOL CRevAppApp::UpdateLocalVersion(void)& ^% c' T' v+ C* v
  208. {: P! V, a$ D" S, H% c, O6 J8 }
  209.   char filename[MAX_PATH];; I# \5 Z9 l4 J# u$ z2 H; ^
  210.   LPUPDATEFILE file,olds;
    4 y3 D4 D9 {, w9 I) r! P- N
  211.   std::map<int,CString>::iterator i;
    & C- `5 D+ k$ W1 E
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    & Z  t* A. B% |; z
  213.   std::list<CString>::iterator l;
    , n8 Q$ q7 Z* }
  214. ' N& d0 L2 B% f5 P! @
  215.   if(bFirstUpdate)5 \. C" r8 a" b- t6 b
  216.   {& w" t) O8 P/ m2 Y( L- V
  217.     dwCurrFile=0;$ C: N* V) L$ v  S3 y! ]  C$ i) a
  218.     bFirstUpdate=FALSE;2 z" [. u! k! n9 g9 [/ e) V0 o
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 }: i7 K1 i7 Z* L. I3 x( i5 f
  220.     {
    - {! K3 _8 o, f
  221.       dwTotalFiles=UpdateLocal.size();
    - E' C: {; j* q( f; y! l
  222.       dwDownLoaded=0;
    5 K; m2 G7 r4 W, @3 c2 A
  223.       bSilentStep=FALSE;* L5 [4 S# i& l  [# }8 I9 g4 G
  224.       bCompressed=TRUE;
      Y1 f- B" R; E# U' e- h8 Z" z
  225.       strExtLocal.Empty();. o. R$ P; N* [
  226.       strFullName=(*i).second;
    / o3 P; D" M4 K. H* c
  227.       dwProgramState=AP_CONNECT;9 r/ S; a6 [& \, V  y( k7 l' ~
  228.       return TRUE;
    2 G' O3 x1 u6 T$ j! N) W6 K  D
  229.     }+ |$ a3 C- o1 c) K# u; R: O
  230.   }
    - t. V; _. I5 H3 U& c' v
  231.   else if(bRestartUpdater==FALSE)
    ; p. o! w2 e5 H1 ?
  232.   {
    7 b( `( w# a8 `  G: p
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())# `: i: z1 [5 U+ P. R& f
  234.     {
    1 E1 R- I2 q# q1 q" n
  235.       file=(*p).second;
    1 `4 t$ d$ @0 s. v0 Y; }7 x
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    0 O  M, f1 s( G; b! B
  237.       {3 K7 S, ~5 N* R; H7 U1 W; A, j
  238.         olds=(*p).second;
    # |$ Y* Y: f( S6 y( j- t  }
  239.         olds->vers=file->vers;2 E! }( V; r, {8 `5 U  _' q; h! B
  240.       }! u% J* ?% t& {9 j( w+ e, F# o
  241.       else6 ^" V" T4 a+ A& d- F
  242.       {3 V5 M6 Z, D$ T6 O; j
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  a/ k! `+ m; B5 A; D
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    - U" f% [6 x: x1 s
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    4 _, B$ }% E. J7 ^! u) C9 m' q
  246.       }3 w# S. H/ h+ j" B/ ?* D8 W0 S
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    - l8 a+ n' J0 ?% @0 m' s
  248.       sprintf(filename,"(%s)",file->file);: Z% K+ d3 ~; X& n/ A1 R
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 F+ U, p3 V7 u: E$ Y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    : u3 ^* d4 u( k( m
  251.     }) j* @& N% @! K) ]
  252.     dwCurrFile++;
    : Q4 {/ f' P+ J: u1 }* W# s$ w+ C
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - u; J& N& Y8 z) m9 v, |
  254.     {
    4 ]- v" f; }% W
  255.       bSilentStep=FALSE;* U3 {) `* W5 O
  256.       bCompressed=TRUE;, M. ?; E) P( Y% {
  257.       strExtLocal.Empty();
    * r: |* {7 ^! l! ?: h* |
  258.       strFullName=(*i).second;& z8 d: l$ ?9 d8 Y/ E
  259.       dwProgramState=AP_CONNECT;8 U, D& M% j4 ^0 W: l8 O6 k" E
  260.       return TRUE;$ P' P1 u( |% u  U8 T1 L- E( X5 A
  261.     }8 Y  L( U1 G7 `& u! W
  262.     if(!bRestartUpdater)- W0 A0 Y1 M" E6 d2 T( B
  263.     {
    / g4 A9 W6 t4 ^( P4 ~* Z
  264.       int iCurrSize,iFileSize;3 u: G! o* P" V* B
  265.       iCurrSize=0;0 B7 P% ]: T, P5 n1 O: p- C$ r2 l
  266.       iFileSize=UpdateList2.size();: s- T) R6 E# j8 o& s
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");% Z  l. ]  ?- h) P! `: z7 g3 y) P
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    $ W, v, r& C! r* n( @% \3 f1 o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");! Y* L2 e2 R1 @
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + C3 o  O, R1 c3 Y4 c3 C$ m
  271.       Fclearf(".\\update.dat");* k; X  U, ~  G6 F
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    + L# K1 b& Y% F4 |0 c6 ~
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)+ {# r! S% C! A0 O
  274.       {
    3 o. }9 }5 u3 D% L+ u/ E
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ' S: `9 z- b" s  a
  276.         {4 R6 U+ R+ p- E% ]: E
  277.           file=(*p).second;- E5 [6 U+ Y6 b$ W+ i
  278.           sprintf(filename,"(%s)",file->file);
    : B" j$ j! d, ?
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - k9 l, n! [7 E6 A( T1 A6 t
  280.           iCurrSize++;
    . X: B2 Q) n/ d* A2 ?
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));9 U5 S9 W! \! h8 r. S% u
  282.         }% y; W8 P$ h5 P; Z0 l& E6 m3 |
  283.       }
    6 L" t$ p0 Q( A3 H; d$ O$ r
  284.       unlink(".\\update.txt");# d) x! p9 |6 r& \' m
  285.       unlink(".\\update.tmp");
    5 X- |4 u, g9 f7 ?6 l$ h+ I, A- D
  286.       Fclearf(".\\checkversion.dat");, K* m% r( q( ^+ @8 {
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);8 F% \. q" f7 [& A6 z) S: Q
  288.       if(UpdateLocal.size())- |+ L% I& H# V, b# o
  289.       {
      ~7 x( U* D' P7 T8 b& g& A) t$ r0 L. h
  290.         UpdateLocal.clear();# t% S" [1 u5 N
  291.       }
    % C5 s- v2 a" j) n
  292.       if(UpdateFile3.size())! M# S& }- I7 F& l
  293.       {
    - F( B% s8 o. n
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & D$ N1 M! I1 ], B
  295.         {  m5 E+ ?. g2 v4 p9 N" {& _  }+ h
  296.           file=(*p).second;4 B* J/ _( z6 `9 g% K& P% @
  297.           free(file);
    " Y2 g5 U+ {5 s( K
  298.         }/ o# k6 _- u' }
  299.         UpdateFile3.clear();
    , J+ B  o; Z' r7 A: v, q& z' C
  300.         UpdateList3.clear();; e7 `+ d9 h, o5 ^6 h- y
  301.       }/ I" n3 m* j6 _0 r8 M
  302.       if(UpdateFile2.size())
    6 O) C$ K' H+ w
  303.       {- Z" C0 |+ a6 x/ D" }$ M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* z$ b0 {0 V- O( R* S& o6 g
  305.         {
    ( z7 m$ g" }: d8 W' U
  306.           file=(*p).second;
    & n% A, s6 J' @( o
  307.           free(file);& J" ~# ]& n3 K: Q* V
  308.         }
    9 d' w0 m$ f/ G& J6 k
  309.         UpdateFile2.clear();
    ) Y- L, a1 N& s/ w
  310.         UpdateList2.clear();! ~3 b6 C+ q1 X( J  \$ _
  311.       }% m3 c0 [7 L0 g3 J- m" q" |7 t6 n  ], R
  312.       if(UpdateFile1.size())
    7 q; a' L& B$ N1 [7 L. j+ }! Q
  313.       {  [- _) q# U. g6 |% ]" V, p
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 ?1 z( r4 p  m3 N9 o5 F0 B
  315.         {
    ! h. h; p: F7 U1 K. P
  316.           file=(*p).second;
    * e" o9 x+ z* x/ \
  317.           free(file);' y; S# U1 z+ G9 A
  318.         }
    1 l0 k/ J% n+ t- [
  319.         UpdateFile1.clear();
    ; U# A' ]4 p9 `9 s0 `# [9 ^% X
  320.         UpdateList1.clear();
    ( [* @9 }: R% r  c) k
  321.       }" W; E' M4 I4 j' I; }7 v
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));% d3 G8 |" r) f# w! b9 R% m" s
  323.     }5 _, I' Z' l" H; O% x7 l
  324.   }* }# g! V+ B0 a: Q" a
  325.   return FALSE;
    ; H7 a4 g3 s& I) r# C: Z  p: {& c
  326. }! W* r, j8 O" `% O, ]9 w
  327. % @3 d0 q* p! h& D
  328. void CRevAppApp::ClearAll(void)
    + x8 K( u9 h0 Q) m
  329. {
    $ k6 s9 I$ B# x/ W( X* K7 g) _
  330.   LPUPDATEFILE file;
    ) Q& S' b$ M0 j) I( A& B" F+ p
  331.   std::map<CString,LPUPDATEFILE>::iterator p;7 z6 Q- \0 R  d6 r/ ]* Z; d4 [7 `

  332. 6 a% X, R! i/ L- U$ l) {
  333.   if(UpdateLocal.size()); `7 y* \: ?# n" [1 s8 b$ e$ g
  334.   {" ]4 q1 e8 S# W2 M
  335.     UpdateLocal.clear();2 n1 _% J, L; h7 \  [
  336.   }
    7 S0 _/ M, c8 {: j9 |' j
  337.   if(UpdateFile3.size()): l# G$ j# w9 C" A
  338.   {6 u. J0 E! |" y, D" E! u& C3 H
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)3 {  ~: U. O  C" Y& n
  340.     {
    + q4 K2 i6 K; C. S3 G
  341.       file=(*p).second;( L: S& x& S& ], ~; l
  342.       free(file);
    - s; e- y- |& y2 R
  343.     }
    4 l+ l6 g9 J2 h3 n2 u' w4 n
  344.     UpdateFile3.clear();
    . V3 l  M/ H# g% B0 Y8 `# q
  345.     UpdateList3.clear();
    6 e1 j" q1 g  B0 i( G* r! k6 Z+ k
  346.   }
    * g1 a4 T% Q+ Q
  347.   if(UpdateFile2.size())) v+ d5 L) W) P, @; d8 Y
  348.   {
    3 p# s( ^8 U6 l5 |5 j8 B3 y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ; j' D0 w& `3 X3 V$ j# g# f- ^2 Q
  350.     {
    ' f5 E1 L% z, P
  351.       file=(*p).second;
    7 z1 k* i, u" o) D6 \1 k
  352.       free(file);
    2 X- E$ w- x' N% B4 t9 ?' @" `
  353.     }
    % p& V% k& {' V, f0 o: a0 n% b# u
  354.     UpdateFile2.clear();+ u: S3 N, V/ f3 D$ P  x  X
  355.     UpdateList2.clear();! g% {- H" z8 E# @1 t3 s2 _* T1 w
  356.   }
      y- E/ L# j! w/ M" u
  357.   if(UpdateFile1.size())1 k- @  a% B7 T2 I
  358.   {
    8 S5 w2 K( X  G
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- u) W% [1 D- ]8 y3 [$ @
  360.     {
    1 k& s6 M: S1 l3 O0 n" g. A
  361.       file=(*p).second;
    7 C) z( j+ f( E" c$ H
  362.       free(file);6 K0 K; }6 n' \- i. J
  363.     }
    " w" }7 s8 L" J1 s; T! `; u
  364.     UpdateFile1.clear();
    3 b( B8 U9 U/ G5 h# b, N7 [
  365.     UpdateList1.clear();& g$ a, o, m/ r* J2 r
  366.   }
    . ^3 F8 k/ {1 T: i7 b( [: {" o
  367. }  
    ; s4 ]) V. Y& h. q1 T; ?  F
  368.   ' }/ \! B4 _& h7 Z3 z' u/ ^5 G
  369. BOOL CRevAppApp::CheckLocalVersion(void), ]5 F3 h% p7 o# _
  370. {: M0 f; ~% `6 e. V) d
  371.   int c;
    1 h8 y5 K" F7 k& z
  372.   LPUPDATEFILE file1,file2;
    5 u4 Y+ o0 K8 P
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    + C( K( |+ t  y3 L
  374.   std::list<CString>::iterator l;
    3 H. p! U. [9 V5 ?1 k

  375. 4 F( `9 z+ f7 Y: I0 S9 c. j. m
  376.   UpdateLocal.clear();1 h5 |7 `; A' W: I& l- \
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 l: V( V. p6 W6 [3 `' V
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);' _$ s4 l* \: g3 t
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);" W/ V. {+ ~5 t/ ^) l
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);$ X* u( o+ G1 x1 w: \
  381.   if(UpdateFile3.size())+ M# n- w: m4 u. i2 @  @5 o
  382.   {
    $ g! I+ a1 V" T+ {& V1 a
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    / ^9 X: ]7 b& [3 y% W  s- i
  384.     {
    / M% H0 r( Y# V! G! {. _6 Z# H
  385.       file2=(LPUPDATEFILE)(*i).second;8 j6 F: Z7 \. y! _" H0 `
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) c' p7 x' y% d, n
  387.       {2 j# e; ~9 l& r2 A* `; X
  388.         file1=(LPUPDATEFILE)(*p).second;0 ]% ]( A5 ?9 J$ }
  389.         file1->vers=file2->vers;
    . F3 b" x+ ~2 c7 _$ q9 @. U- \1 {0 q
  390.       }' W) h8 k) p) S& M$ D& Z
  391.       else# v4 u3 w1 m3 w  C# ]' R) u
  392.       {
    , _. D, H# h. K) ~
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) U% N, p( y  n8 y& s+ N4 I
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));% a5 Z. q* w+ V
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
      v; y7 x3 V' c0 z# C+ T
  396.       }/ x6 ]* z# {7 ^8 C
  397.     }
    , X; G+ J4 Z8 x4 O3 W7 D
  398.   }% ?  d$ d7 K9 T! @+ O1 w8 _
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 g  z9 J6 H" P( F" {
  400.   {6 o9 o+ v/ q, C  [, @1 Q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())2 A/ F: K3 @/ `9 R+ g9 i. |+ y# i
  402.     {
    7 H5 [) |; Z# g( x5 I* O
  403.       file2=(LPUPDATEFILE)(*i).second;% D* ?1 C0 }+ J/ B: c7 a3 L6 G- o+ \! V
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; Y4 Q7 z# p* l2 c6 I& D+ W/ ^
  405.       {
    ; @7 F" m8 S( M3 i1 \
  406.         file1=(LPUPDATEFILE)(*p).second;: F7 u1 Z% C) o' c$ o) Y9 i
  407.         if(file1->vers!=file2->vers): q& r! `  }1 T! l: n) \) P
  408.         {
    ; ]" e9 h. y* G4 K9 m$ y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    9 O2 H# v2 S$ I$ K0 x3 {
  410.           c++;
    0 _7 u4 H: `; L
  411.         }$ _5 ^: Q1 D( @/ X
  412.       }) T( d8 w, s0 g# X. w- m* v( w' x
  413.       else+ L* o- P3 C" i9 {& Q+ p1 G2 {
  414.       {5 p% l* |; x$ ?
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) c) b+ `+ p1 ]) V5 r
  416.         c++;% B2 K. K# w9 e" F& |1 A, e. d
  417.       }
    0 a1 Z( V& P) L7 F) d/ w$ L# U
  418.     }$ M! ~' R5 P4 D+ ]2 D5 M
  419.   }
    5 C0 `: G/ i1 T/ A# z7 X
  420.   unlink(".\\DownLoad\\update.txt");2 e3 j) m3 L  N+ J, `6 L
  421.   if(UpdateLocal.size()) return TRUE;
    ; l: _- b7 _1 Q6 B
  422.   else                   return FALSE;/ M* [0 m& _& w0 l' w- y- b, Y) x
  423. }: k" `& g) Y' Y+ `8 K' N, h

  424. ' F- g! T( a; Z+ h; r( Z$ f
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    7 u* M2 C, C( z( n; _" {- s* L2 z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    / \5 M6 W* q( u4 j( L8 Y

  427. / u4 T4 V& I* Q6 `% Y' E: x8 r

  428. * B; r+ Y& D0 i' e6 U. H

  429. # Q$ j+ W. f" c/ u$ O2 q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    9 v1 ~& m" M; D) s, j
  431. {
    $ s" ?" Q+ d% r4 G1 ^
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    % |" r4 X  E  X, ]$ C1 O* v
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)+ ^& V5 ^# G: m( B4 m3 ]1 w/ O1 O  G
  434.   {
    7 j7 H2 I& J( r) @1 l  P, D
  435.     char szLanguage[50];9 F7 d- ~/ q4 c0 k+ d# X
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" {5 i* E8 W! s! _+ k7 S9 x
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 ^5 u2 r5 |2 A1 _+ M' H' j
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ ^# h  D8 O# A0 b7 Q" [- E6 l6 B
  439.     else                                   m_iLanguage=ENGLISH;8 c" u# s+ i/ H! ~  t, g
  440.     char szRegister[100];
    - u6 z1 N% B; j( f; T# [* l5 e
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 E; Q9 w. X/ q  \
  442.     strRegsName=szRegister;
    9 D1 u  `6 Q  c# N. C! J. T% n4 O! ]8 I
  443.     char szPatchURL[100];
    % [) I9 Z0 j3 b) V
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " ?1 l) l) _  v! g7 B6 G/ z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ k7 b+ a; i5 c* T  D( }
  446.   }
    . i& B8 \/ T& z9 b, |' T; S
  447.   else
    # i7 M+ n& H( \; K
  448.   {- c( O- t! W8 S" J2 F
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  P/ _) h  `1 H; M+ `; D# o; J
  450.     strRegsName=DEFAULT_REG_URL;/ b' m2 ?- \/ y! i/ S1 A
  451.   }
    0 M1 k, w* |1 d2 s- d9 B
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ! L& a- l6 A) ^! v3 C9 f& R1 p
  453.   {( d. g4 t3 C/ C
  454.     char szIP[50];
    9 i# y5 a* [+ {% d, A" t
  455.     char szDIR[300];. e0 t4 \  n! y* E
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")). I0 [5 E+ R, `! ?! h( n
  457.     {8 r6 Z0 {& g  B2 X$ M
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    * @  i/ F, \1 f5 W( q) b2 t
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: [6 Z1 X" k1 e1 k9 m' j+ V5 i4 {
  460.       strHostName=szIP;
      P! {( ^6 R' z$ o
  461.       strHostPath.Format("/%s",szDIR);2 E) a$ ?' A# \9 f; B( J9 }# ~! T
  462.     }, I0 |, h6 @; x6 k
  463.     else
    $ Q1 s5 Y! T" A$ v
  464.     {9 S, @. F- L4 u) A3 _+ P) ]4 o, s1 O/ e
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 L. X8 l. e1 Q1 X; k$ ]
  466.       {
    2 T" A) w( Y2 D
  467.         char szLanguage[50];; N" t. X" g, ?& ^& I9 |
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 P* {- p0 _" g# ^! K0 w
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    1 z, Y5 U1 k+ L8 y. Z/ ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 T2 |7 \5 M2 Q
  471.         else                                   m_iLanguage=ENGLISH;
    3 T8 E, V  Y% G/ C- H1 U
  472.         char szRegister[100];2 i# D5 S* E& b% f0 I% G
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . G8 t8 d* u5 x  g  r
  474.         strRegsName=szRegister;  @! Q/ n5 e% z+ `9 N
  475.         char szPatchURL[100];" H6 t9 N; ]4 M  X! z, U
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) c& V4 Q5 F$ \
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " k. _$ ?6 y" W5 k
  478.       }
    ( u- T) D' }. B' I3 o
  479.       else4 t2 d5 T1 _- f, q
  480.       {9 A# T# x! B/ C" ?0 c
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 s# s5 ]) y8 a( w
  482.         strRegsName=DEFAULT_REG_URL;2 Y3 @7 C) L. n! @
  483.       }$ g+ L* }+ E" H. }" B
  484.     }
    * F& A6 |, @# ~
  485.   }
    8 E! D8 ^$ H5 z9 C% B
  486.   return true;
    4 h. s- n- I0 o7 |8 |
  487. }& x: Q. x; e- \1 X
  488. + Z% r; X0 Z6 S- b& [$ R
  489. #include ".\ZLib\unzip.h"
    ) e! j% {4 u6 H; R5 i3 n( L  R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);  B# n+ D. e6 y& k
  491. /////////////////////////////////////////////////////////////////////////////
    : t  ]6 d% D4 S
  492. // CRevAppApp initialization
    9 G  }  ?$ b. V! O% _" q) c/ ]+ c) x5 E

  493. # G" H0 j8 @, W' f
  494. BOOL CRevAppApp::InitInstance()
    4 w7 X: T7 h- ?' |' J9 ]: G2 i0 G" x
  495. {
    : o+ l1 }: ?+ ]# Z
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    + Z: O3 c$ ^5 c

  497. 7 F* t. N  ~9 y( }9 I4 T
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);% s3 z  p9 {* O/ G: Z/ Z' Y$ I6 S
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
      v. ^1 n2 c% _* }# k
  500.   {
    6 i! z4 x' E5 W4 \: ?: Y
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ( h2 o8 D1 X+ a+ r
  502.     GetPathFromFullPath(szPathTarget,szPathSource);5 Z5 v: q6 I% B- `" M1 m
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))( D( j8 F3 C) e
  504.     {* N" _' j: v, M6 r" V$ R1 _
  505.       strcpy(szPath,szPathTarget);7 a/ \5 X2 B; ^2 p; ^
  506.       SetCurrentDirectory(szPath);
    0 w$ G& Z) ]0 T8 g: b& K
  507.     }( W2 }( J* ~+ @
  508.   }
    3 D% q6 q' B9 ~# w- H/ ?( M' \
  509. #ifdef _DEBUG8 [! ~7 ~; @. q# F/ L4 [# _7 l
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - x9 g% J; r. y- |! ?4 J* k
  511. #else
    , N9 E3 A* C. N7 k
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! L( O' V8 ^6 R
  513. #endif
    ; ~9 z2 _# N) j" |
  514.   {
    3 k3 `& c6 o- F; v# i1 S
  515.     char tempFileName[MAX_PATH];+ Q. g6 t: j/ L
  516.     strcpy(tempFileName,szPathSource);5 g0 f2 o7 x. k% T
  517.     tempFileName[strlen(szPathSource)-12]=0;
      U6 [7 [" `. l0 |$ {1 G, S
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    " a0 T) U% Q' c% Q# A
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);* E* y" v8 e/ q+ V  t* Z7 {0 M
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);% B6 h" k. ^/ ?' Y2 _+ I; J5 h
  521.     return TRUE;
    . h* K; Z/ I# S9 J' r' O& K
  522.   }
    ; ~3 ?) F& F. A1 S
  523.   // Nuke 0118: Delete run.exe/ o3 h, D! R9 s/ R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );9 S! ]6 e* x8 R$ Y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");+ C2 q1 r! G% {: I/ Y" I( M% I
  526.   if(!ReadCfgFile("Config.ini"))
    : D* e1 f& h9 N; C3 A% @# Z
  527.   {
    5 W6 E7 P5 p% n: f' e8 A
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    4 j) B) M: [* |
  529.     return TRUE;
    ' E0 S. K0 m3 t2 N" p1 q/ p, d2 w
  530.   }( h2 J, m; ?' w2 x! {4 g, x
  531.   HANDLE mutex;: E, B; L& v4 |6 {1 X
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))$ p1 w4 M8 Y& c$ z
  533.   {
    + D3 z2 g! b2 ~- ^( U6 |
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    : T  c' m: }9 E1 J% `. i
  535.     {
    - m8 W8 x/ p  C# R
  536.       CloseHandle(mutex);+ b5 y0 U- b3 F5 B. B
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);+ Z: R5 a. M" S( o/ x# k+ o6 \
  538.       return TRUE;( \. ?, Y- b. i% {0 U
  539.     }* c+ F8 j) v$ ]6 W
  540.   }    z6 G, h  v, S5 j7 l9 v/ @
  541.   CloseHandle(mutex);
    . U( g$ }4 l4 G* G% Y

  542. % w3 O7 C2 ~" g; r
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    6 v8 c' ?: l& g4 b+ l7 e

  544. * p6 Z1 @8 a" K1 R* ~! ]- c
  545.         AfxEnableControlContainer();% Z2 ]  w6 Y& n5 I8 D

  546. " I# ?) p! O% n1 u% \
  547.   bCanUpdate=FALSE;
    ' Z8 N0 W* d3 v. E  h) r
  548.   dwStartUpSteps=1;. o& s4 x5 v4 E. ~) i6 {* E/ V
  549.   dwProgramState=AP_NOTHING;& r8 w/ f/ j+ _8 M2 C, e
  550. 5 B$ W4 Z. F7 t* E
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    4 O5 ?" [, ?: r; i( _

  552. 4 Y. q2 b8 Q: T+ Z! |7 T
  553.         // Standard initialization5 R) V& ]. l1 `
  554.         // If you are not using these features and wish to reduce the size
    $ b' c- O5 {) U0 q/ s" ]( C
  555.         //  of your final executable, you should remove from the following
    4 A% i4 I8 `8 W1 g
  556.         //  the specific initialization routines you do not need.
    $ W+ E! q3 u7 k1 u: i1 b* B4 Z
  557. 6 j" _' u$ Y# ~0 d1 F- K
  558. #ifdef _AFXDLL2 ~. E7 }) g* A
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL" B. }4 F8 G8 g. T* q5 n5 J
  560. #else# ^9 T# q8 t  q& N
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ p( z1 q8 g  c2 {- k( l3 ]% Y
  562. #endif
    " ~9 F( b" ^4 Z! j

  563. - g, S1 z  ^( C2 ^. m8 j! \) D
  564.   dlg=new CRevAppDlg;/ S) y3 p. T, V: p
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' x& P# Y2 h  g; n
  566.   dlg->ShowWindow(SW_SHOWNORMAL);' l% A: P5 a1 R2 \6 [2 w! g! D
  567.   m_pMainWnd=dlg;! m! t+ }3 W, @* M) v: u- _4 q
  568. 8 \; w/ c: X$ K8 i
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    2 ~- L( }- t0 L  F" ~( ]

  570. , {& Q: }  e$ x" I5 }. @% c/ N4 v
  571. //  GdiplusStartupInput gdiplusStartupInput;8 D3 Q* {- O) e: e* J: f
  572. //  ULONG_PTR gdiplusToken;* o* ?  A1 S( I7 t
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    / }$ H- Y: J$ }* M) v

  574. , _- E0 `# T$ r4 A/ Z2 V
  575. //        CRevAppDlg dlg;- L0 B9 Q2 |' ]- O& v: {/ W, Z& S
  576. //        int nResponse = dlg.DoModal();3 W' w* [: X; y* _$ D: }* m
  577. //        if (nResponse == IDOK)
    : I" J& I; _. u9 X7 S
  578. //        {! C8 z0 i" m  A0 B; K- M8 p
  579. //                // TODO: Place code here to handle when the dialog is
    4 V5 V7 R0 i0 W7 H, r* U
  580. //                //  dismissed with OK
    * T, e8 m" }% K
  581. //        }
    / Q& w2 _- z: {; h2 F
  582. //        else if (nResponse == IDCANCEL)
    9 ~2 a- g5 ~! y% @5 k
  583. //        {( i' {. `% a& _/ R9 ^" f7 H6 v
  584. //                // TODO: Place code here to handle when the dialog is
    * t8 a4 [. a+ P% P8 _6 R( y
  585. //                //  dismissed with Cancel- C- Q! t. @3 {4 ]& B
  586. //        }
    , U2 J* W" d4 i5 o* t: z) ?

  587. . ?! w& J4 C# D4 f, Z
  588.         // Since the dialog has been closed, return FALSE so that we exit the" U8 k) W* `! [
  589.         //  application, rather than start the application's message pump.% e) z0 k. U0 n
  590.         return TRUE;: O; y1 B) a( [  w
  591. }
    6 V* s/ h6 w3 a, U3 K) h
  592. + U0 Z, A; j1 G  N2 b+ q
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    % s3 _; p; |* x# ^0 c
  594. {/ F; d3 u, P' [9 Q
  595.   int i;+ U/ Y6 C. b; P
  596.   char *szRet;, r$ Q* W& }  C. `5 [
  597. ! ], ^2 a" D- l& D* ~0 J
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    3 q" }( P4 ?. p1 n1 \$ ^9 H
  599.   if(sztoken)
    $ c3 J; U1 [) w. G
  600.   {
    $ c$ Y0 s7 R2 K+ J, f+ z5 u
  601.     szRet=&sztoken[itoken];
    3 ]1 D9 [8 X) @) y6 Q3 h0 O
  602.     while(sztoken[itoken])6 G( c  n$ @5 b
  603.     {
    ( k3 W5 M0 ^" W
  604.       for(i=0;i<(int)strlen(token);i++)" Q: y! B# U  I8 x2 W
  605.       {
    * G2 u0 d7 [# j3 S  o% I0 l
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    1 a' M+ w' Z* u* O
  607.         {+ p- `6 y' m* m
  608.           sztoken[itoken++]=0;$ u  X( h, @8 |& [# B3 e+ f; w+ \
  609.           sztoken[itoken++]=0;
    * u5 A2 O" d8 U
  610.           return szRet;
    7 n6 C8 H, i8 Z
  611.         }1 m' B* v! q8 F/ n) G, G: N
  612.       }1 Z! S$ k4 @+ \; b4 D3 T& O
  613.       itoken++;6 d# C2 t( Q" Q
  614.     }' M7 @% b& e$ Z3 J; F
  615.   }
    9 k0 ^4 b0 _/ F' U# Q" ^+ V2 c
  616.   return NULL;  D! u/ m% {; W* k4 b
  617. }
    : @% g  k! Q+ j$ u# p

  618. ' u' w% v% \  N! a  @2 X
  619. void ProcessProc(long Total,long Current)' W, X5 n6 `. v3 }; a0 Y3 r
  620. {
    ' H2 d! Q# N: H/ Z5 T- \3 \
  621.         MSG msg;9 x( Q+ q8 B$ g6 H* X4 m
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    : I, u6 a- m6 y5 V/ w  U; _* T
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    & s: B! k; @0 P  `, t/ ~8 k* E
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    % A9 Q3 P5 j  f: H4 A. Z, \% X+ i
  625.         {
    - _9 ~5 n& t( L
  626.                 if(!GetMessage(&msg,NULL,0,0))
      A  f) G% _" c5 D# {3 r/ k
  627.                 {9 L& U5 V) J& O; u! D& y* F/ x
  628.                         return;9 ]* C9 f, X4 g' c3 X
  629.                 }
    # _3 `! K* w- w' o5 ^) D
  630.                 TranslateMessage(&msg);* ~! r/ d4 }: N. k
  631.                 DispatchMessage(&msg);+ a9 Y( r) x. H7 \* V
  632.         }        - U4 f: G' j+ z* o
  633. }5 f; J  k8 I% w( X8 `6 L. g; j' q

  634. ' f0 ]0 Q2 b2 u
  635. BOOL bFirstChar=TRUE;8 R4 ?6 P* m3 f* @* A

  636. - X% c9 w  ]4 {
  637. BOOL CRevAppApp::OnIdle(LONG lCount)8 M; z, \" P/ D7 M0 n
  638. {
    % T# u( h6 t1 p0 t2 j5 v0 ~. ?
  639.         // TODO: Add your specialized code here and/or call the base class& W9 C8 v( z& u* f; V
  640.   switch(dwProgramState)
    ) Q* P; }  g: \" b! s
  641.   {5 r/ `- v  q" r. P
  642.   case AP_NOTHING:
    $ q# b- C. ~; ^" x; q2 ?5 L5 W
  643.     switch(dwStartUpSteps)
    0 j9 q" K, d3 {( v# u5 v. m# s
  644.     {, I& b( j& K2 H
  645.     case 1:* f- c7 I2 x8 }
  646.       {
    ; N; n0 N  P1 n$ E
  647.         int i;
    : ^& |0 h* r, s: z1 ~
  648.         CDC *pCDC=dlg->GetDC();2 X& a( J+ R, s, H* R% `6 ?8 c( w
  649.         HDC hdcwnd=pCDC->m_hDC;
    % a% G' C5 |2 p! g
  650. //        Graphics graphics(hdcwnd);
    : W' t( ^8 ^  q+ |& r1 p
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    , H6 [' D  t7 q1 O- Q3 Q) J' W& e8 u
  652. //        INT iWidth=bitmap.GetWidth();
    / L  }. K8 ^! A" [4 z+ @
  653. //        INT iHeight=bitmap.GetHeight();6 `0 b7 P7 A! p
  654. //        Color color,colorTemp;
    ' T" m8 E7 U6 D6 y; A3 ?  O3 \) V( w
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . D: j- Y8 q0 g3 R" x) U- @, R* E
  656. //        {
    $ M1 J1 S# P# u  c3 Q) ?; m
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    - j% [: L8 e( ^% W- y
  658. //          {
    ( f( a' C0 v2 D
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    9 g5 U: a6 Z" q6 B$ h) N5 }
  660. //            colorTemp.SetValue(color.MakeARGB(
      n+ d: ^4 m2 [
  661. //              (BYTE)(255*iColumn/iWidth),
    $ J8 s4 J% |8 W+ q; p
  662. //              color.GetRed(),* l. }6 t: k$ ?5 ~# l
  663. //              color.GetGreen(),
    5 V" a# d: u0 _5 q
  664. //              color.GetBlue()));- p% N0 v& f. R7 [8 y4 b8 k" t
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);& H- C5 `) d! y; U1 U' K, m
  666. //          }
    6 J3 _& f5 ]& a; j5 q! U% x3 n6 c
  667. //        }4 s% y! I( i% Q% K+ p- J
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);6 Y) W. ?) S5 P' _5 t7 ^; R
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ D5 Y5 M6 u1 \) _! U
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");: [( g% w" a3 k  o
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 m; [3 m+ E3 c: K
  672.         for(i=0;i<240;i+=8)
    7 {3 G. @% O* ?( e
  673.         {  q# a7 t9 L# i" h3 M5 F' W
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ n- a- f4 i* a1 j  |
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" u3 R+ H% Q, Y( x3 x
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 {4 w; d5 [& y* c; V' i0 j
  677.           Sleep(33);  Z  d  n; I6 I
  678.         }# d! j6 M, O; U; x3 H
  679.         Sleep(1000);9 A6 e) R4 R2 {! L2 X. s2 J
  680.         for(i=240;i>0;i-=8)
    * C& U. t& T( O& J
  681.         {' h+ C4 N. N0 F2 X8 j( J4 i
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 }8 p+ n3 T$ C5 x3 ~9 o5 c9 ?
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: O- @, v; j/ P' ]" ]# u; H# ?3 T6 n
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * b. T- r# ?6 a
  685.           Sleep(33);
    2 H9 G* e& E4 x* ?! J, x; L
  686.         }
    8 a: H/ W6 r8 R1 ^
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    3 C) C/ k' _6 E- e# \
  688.         dlg->ReleaseDC(pCDC);
    % L6 x7 ^) {! [" k! `) O
  689.         DeleteDC(hdctar);
    / O2 i1 U2 u& A8 h$ M* Y; L
  690.         DeleteDC(hdcsrc);
    6 [- @; A; B. l3 f) G; S: b( t
  691.         DeleteDC(hdcorg);$ \$ a' ~9 f8 [' Z  [
  692.       }
    ) p% p1 ]+ T& q. B! H
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    0 F1 p7 B1 I9 L; O: [. r4 r
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");5 n+ m0 {+ K( a  B
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ' t1 r7 m6 U, ^0 ?  D0 d- n
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");" m7 T) ?5 P  x; _# v7 z6 m
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# y  g2 O) W7 s, h$ ~% i
  698.       if(!Dn.Connected())
    % s4 s. [; @) x7 F
  699.       {6 M0 {: F0 g( A6 t: m
  700.         dwTotalFiles=1;% P( ]. U3 B& w0 ]$ A
  701.         dwDownLoaded=0;( s- [6 D- q) O- O
  702.         bSilentStep=TRUE;
    9 ?7 h9 X  [% j+ s& C) P& ?
  703.         bCompressed=FALSE;
    + i" c+ P4 a) u6 o
  704.         strExtLocal.Empty();
    ) r6 G# k' O, l* G+ n7 w/ n
  705.         strFullName="readme.txt";
    ' h* u8 s0 q% \
  706.         dwProgramState=AP_CONNECT;' j, v2 L4 g) O7 |
  707.       }& i( K) N( E$ P5 a8 q  M
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();* S/ l( G6 {; ^( a0 ]( l' O6 C& S
  709.       dwStartUpSteps=2;
    ' D9 _. l! k, N8 O
  710.       break;1 x* Q  w1 Q7 Q1 k0 E6 }; w, v7 ~
  711.     case 2:
    * u2 e7 A" R$ c+ k  Z6 w
  712.       {" B2 K, Q2 c9 F0 X: s
  713.         int iEOF;
    3 ]* i/ ]# `; u2 R; M3 z
  714.         FILE *fp;
    ; c+ u0 K5 R* ^
  715.         char szString[512];2 j) a) `$ X6 Q4 C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    / x/ G$ [  K; }4 C# B
  717.         if(fp)( G6 z3 V) Y. `) n+ O  Y
  718.         {& r5 H/ @" G2 [$ f6 C) J  Z
  719.           do; K1 f" o+ t' l
  720.           {
    0 s9 f% J9 P  S
  721.             iEOF=fscanf(fp,"%s",szString);8 G* b6 \' b# j, o0 x
  722.             if(strlen(szString))* X0 D/ N5 f  A# D4 E8 G  ?
  723.             {* T0 l" X8 T3 ?5 E4 U* [' H
  724.               if(bFirstChar)
    % x6 V* `0 u) `4 ~% d' ?0 V
  725.               {0 K8 f( g' F1 w2 G
  726.                 bFirstChar=FALSE;% d$ O& I! Q, j3 {. A( c
  727.                 bConnectIsBig5=FALSE;& f) y* ?5 d0 x& k9 m' h
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    2 R4 g- ^% i7 x9 q- M' A
  729.               }3 ?0 w% K! @* V
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    2 a9 y) n8 H& `% v% g# W' ?- b
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ' T: b* {" S8 u& N2 `* o
  732.               dlg->m_ListText.AddString(szString);( w$ m8 w, l! I6 a0 x
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . D/ ^4 N0 _! e7 ]% U* H
  734.               *szString=0;( z& m: I! {. ^1 T/ O! U2 C
  735.             }9 ~" B' g% G# ]! P3 D2 k
  736.           } while(iEOF!=EOF);% |" D, \; T, s3 O9 D$ Z* ]# r
  737.           fclose(fp);1 I/ ?' w. q+ Y
  738.           unlink(".\\DownLoad\\readme.txt");
    ; q5 f- W4 t3 W, G2 q
  739.           dwStartUpSteps=3;
    * @( ^% p% x0 f* }3 z& l
  740.         }
    - `. X' F9 q, c0 ^4 I
  741.       }
    ) y9 S& V6 u5 @. A5 p8 [0 F  E( u0 d) P
  742.       break;
    8 t# e% z- f! k8 h9 ~- W: r& A
  743.     case 3:5 u9 q7 S& `2 C) @% Z/ ]
  744.       if(!Dn.Connected())
    / E" n( C. w, i8 E
  745.       {
    ; a/ \. i/ u6 c4 H7 w3 m, s
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);+ V7 x# K3 F9 k) V( N) @7 y
  747.         dwTotalFiles=1;
    ( N2 ], J) R7 n
  748.         dwDownLoaded=0;
    : i3 h" y$ C/ g0 Y$ B
  749.         bSilentStep=TRUE;9 j* O( Z$ ]) F6 H" c
  750.         bCompressed=FALSE;: X- {; K9 s5 ~+ l( s
  751.         strExtLocal.Empty();( U, S4 N& I# z8 t  X- [8 X  I! i
  752.         strFullName="checkversion.txt";
    9 g8 ^$ F. G6 R( z: Y  _, g9 L1 O
  753.         dwProgramState=AP_CONNECT;1 O' b3 G% t; ]/ O! p1 f7 \! F8 W
  754.       }
    2 F; ~+ _5 b' V6 m3 X: \" U
  755.       dwStartUpSteps=4;
      v6 m/ `* L( n
  756.       break;
    5 R, t2 _, K7 C0 G" T
  757.     case 4:2 G9 @5 o# n& {1 H
  758.       {2 u: r" K+ |6 i/ ~' J* k
  759.         FILE *fp;( V& s2 {, f4 h: @) i
  760.         char szString1[128];- z# [5 N+ o2 O; C7 g7 {. @, D
  761.         char szString2[128];# D- ]- r3 G$ b
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");  W  e  t$ d6 P- V% U
  763.         if(fp)
    . M/ w1 w' J' H; K& u
  764.         {5 Y7 z( f' K  A. l
  765.           fscanf(fp,"%s",szString1);
    & s  ]1 r5 ^, z" D$ O
  766.           fclose(fp);' @( v" @8 [. o3 l+ u
  767.           fCheckVersion=atof(szString1);
    8 b6 z4 P8 @3 M6 [" l8 c/ w
  768.           fp=fopen(".\\checkversion.dat","r");* s7 p5 i- q+ t! z
  769.           if(fp). g9 }- f* O, T6 W
  770.           {/ v0 Y, G3 d' H
  771.             fscanf(fp,"%s",szString2);
    / e, F2 p- \7 ]2 E9 h
  772.             fclose(fp);  L1 G6 C$ [0 ]( {, W, c$ D
  773.             if(atof(szString1)!=atof(szString2))
    4 ~- o8 \1 G  V& ?* P* h
  774.             {
    * G/ b: U, C. Q! }0 R
  775.               if(!Dn.Connected())
    ( K4 A  `* ~8 W) @
  776.               {
    2 v: Z( g, |( ^2 _* p, `- G5 a" ?
  777.                 bFirstUpdate=TRUE;3 K5 I# r* c0 W6 B) f
  778.                 dwTotalFiles=1;1 `8 n- J1 Y! f
  779.                 dwDownLoaded=0;- X; y' O$ h0 b8 Q
  780.                 bSilentStep=FALSE;0 H3 }' o& y2 F9 d; m  _
  781.                 bCompressed=TRUE;8 c: |1 E; S9 D, J  F) @+ B
  782.                 strExtLocal=".\\DownLoad\";/ r' A" g/ k7 t) h
  783.                 strFullName="update.txt";9 G9 u  T% X9 K: R
  784.                 dwProgramState=AP_CONNECT;' W/ y  c9 V0 A! Q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    3 h& B* r$ B# Z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    % ^  \9 o0 W3 U& I
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");* l4 y0 K. W8 b
  788. - C) I' @5 V0 ?% j# e8 D0 B
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  b$ G% [0 T3 Y3 D5 z) s
  790.                 unlink(".\\DownLoad\\checkversion.txt");2 y* o; N. H# A# A
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    7 C, d& _- |8 y+ n" c. f1 q' c* w
  792.                 {
    - ~3 @5 K( x5 [' A
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
      j9 C. Q/ U& y
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    - s0 H! k% w& L* h* a! T
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ' A- x% _7 O# q$ K
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" p  e# Y' }( U. L
  797. ) T% k1 f& g1 I0 q% r5 J( m
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    6 j3 G- s& z) W: q: Q# M
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . U# ~& y8 ?6 z3 Z- K& G+ a) T
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    * V5 t2 R1 l8 J; [5 ^( U/ }/ A2 v" a
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 {1 j& B- P; h' k- }: V" T( R
  802.                 }
    , e; o  B! ?: l" S2 ]2 a
  803.                 dwStartUpSteps=5;
    7 w" b0 _$ X& E$ j7 x# z
  804.               }
    # E0 X1 ~, ^+ Y# [2 `1 q
  805.             }
    4 p3 F8 n" ]4 L% x, P$ o: W3 L, ?
  806.             else
    - ~. N. U, y: ?$ S& M0 D
  807.             {
    8 k0 M5 f; n+ G% R- w
  808.               unlink(".\\DownLoad\\checkversion.txt");/ D4 V, T2 K: w2 d5 ~3 [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    + n' v. E4 U, T) l, }5 K
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 Q! F( l: {& r5 k
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ) H& l' w5 r4 K+ M
  812. . z+ t! u, S1 c3 M; o
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  G( E9 z" P5 z; ]+ s
  814.               dwStartUpSteps=99;+ i2 S3 ~! ]0 R* v
  815.               bFinishUpdated=TRUE;
    7 B1 o' d: U; n6 a& [5 ]( w9 r
  816.               bCanUpdate=TRUE;! A4 D/ w7 V4 y1 A3 |. f
  817.             }; B7 o8 T" G: s$ L6 |' V9 n3 J
  818.           }
    ; U5 z, b% b/ I' D5 \' B. m& |
  819.           else+ u) g; y/ ]: i6 x  k5 M9 F+ l
  820.           {; @+ R; u5 E# V  {7 g
  821.             if(!Dn.Connected())& u8 f6 O  r2 W7 W
  822.             {
    % [1 `" u( P4 D3 d, b
  823.               bFirstUpdate=TRUE;6 l2 x( B" v/ F6 z# t, H
  824.               dwTotalFiles=1;* |# l! n. M& q4 M# ?# m$ r. p
  825.               dwDownLoaded=0;
    - _  }- t; T* \+ L6 W% q4 M$ {2 Q& x
  826.               bSilentStep=FALSE;
    9 P; F/ i5 M5 y0 w
  827.               bCompressed=TRUE;
    & W1 @' p  h* C$ Y& s- A- \1 S
  828.               strExtLocal=".\\DownLoad\";5 @" \% ~/ c& ^/ L/ {4 ~
  829.               strFullName="update.txt";# E) B/ q; L4 S
  830.               dwProgramState=AP_CONNECT;" O: Y. g! `* u/ q: S
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ M' a8 `# S; f2 K
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  @% Y! d) N% i) j7 F; u; J
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");& N" K; N9 G3 u; v, |
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: o; d( {0 h, e& x# c
  835.               unlink(".\\DownLoad\\checkversion.txt");; E/ X3 e; w: n& O9 k4 {
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    2 v- t$ ?, S2 F$ X
  837.               {
    4 S1 e" z; J' I& v# R6 z$ g
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");* p1 |% L" p1 k+ R! B9 l6 q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");9 ?) ^/ b) U( h$ o/ F8 A0 G6 X" _
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    + Y* C) S8 B, k0 z( f" @" m. M/ F1 ~
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' i- Z* {5 \4 `4 ^  O
  842.                 ( [+ m: {- F; U1 b
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' L* l- _- [5 f9 b, R' `
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* Y$ y" R; X4 ~0 \' ]) F% K
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");/ C! y! b4 @& r+ I7 |
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" z6 K' Z" s6 L  ~3 ~( }, g5 h
  847.               }
    * i! H: J5 O; A3 i
  848.               dwStartUpSteps=5;
    4 N$ g# s# g/ }: @! x
  849.             }
    7 e" p6 _7 w( o; b
  850.           }2 j. a4 L6 s7 f/ ^$ Y# U
  851.         }
    3 N: ~7 {: W0 I# d
  852.         else% O/ ?$ J/ {& L  O) u
  853.         {/ n3 U- _* }2 R$ ^5 T2 h
  854.           dwStartUpSteps=3;
    : h& k; \5 c9 R
  855.         }
    ) X& {9 Q" g. I$ n, m" `- d
  856.       }9 J( I: B& o& G% l& R9 l5 w
  857.       break;( `; _* _- p% D5 k! l
  858.     case 5:
    ( o( @$ R% S0 \3 I) j$ C; w% P
  859.       {/ r/ x. r9 u, }- p  {9 J- ~+ z' I$ R
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    $ N3 d* E, D) t  ^" s- F
  861.         {: ]5 {& X3 K( P
  862.           int opt_overwrite=1;
    9 G, O. `1 g, P+ N% C8 G
  863.           int opt_do_extract_withoutpath=0;
    & Q' ]# c! r" T+ r
  864.           unzFile uf=NULL;
    ; K# ~# G8 q7 ?" c" A" P: m& A+ ~1 T% G

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

4 b6 c- u% r2 \4 U& J+ ~0 h8 V: U

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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