CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
1 r' S) ^, Z  O% I+ T0 Y& ?
  1. / RevApp.cpp : Defines the class behaviors for the application.! `. D7 _- R" H
  2. //
    ( F' ]6 P2 ^0 W& b; m* w7 ]

  3. ! A* o$ a! P; T6 C9 ]5 D8 `  @& P
  4. #include "stdafx.h": t* L) g5 J" W) e2 m: o% P

  5. : }2 o2 ~% `0 ]9 u( M
  6. //#define UNICODE
    + p' l/ d7 s9 x
  7. //#include <gdiplus.h>
    1 _" D9 o+ r) ?( ]8 u1 R9 D* c$ R
  8. //using namespace Gdiplus;  k7 g  v/ W4 |7 i
  9. 6 p; H: h' R* L1 w3 j: b
  10. #include "RevApp.h"5 c% y0 p( r" S2 Q; J7 c
  11. #include "RevAppDlg.h"7 ]$ h  L5 \, m; I5 ?$ T3 q

  12. $ {9 j( }& h0 |$ R4 d3 f) ?0 [6 p
  13. #pragma warning(disable:4786)
    7 s- G- p. f" m& P2 f, w
  14. #include <map>, \: \+ L0 q& q: G
  15. #include <list>
    ; ]( Y( p, h5 q- s6 s. N
  16. #include <direct.h>
    * v* b( o5 P  A( G3 p

  17. 5 H$ {1 M$ h; g7 L8 J
  18. #ifdef _DEBUG
    / _' y/ w3 F' }. S
  19. #define new DEBUG_NEW, e. d( [: Y0 z& |( J! F$ ]
  20. #undef THIS_FILE
    ' t2 P& }! [; q1 x8 E5 x* N
  21. static char THIS_FILE[] = __FILE__;
    5 ^5 O' e, h- v( o& {" d0 h
  22. #endif
    ; z& Q5 E+ I4 }3 G! C
  23. #include "SkinResDef.h"
    ( f* ?5 Z# q6 o% M
  24. #include "ChangeBG.h"
      p) P: S9 |! D7 ~
  25. #include "AFXINET.H"
    # L/ g4 W1 I6 Y; x/ H" \

  26. % s. _% i+ g. t: D7 {
  27. #define TRADITIONAL_CHINESE 0
    2 [& K& L3 k9 x& e; w
  28. #define SIMPLIFY_CHINESE 1
    " g, v" r  I! O8 m: t. x1 f2 j1 |
  29. #define ENGLISH 2; a3 C& Q9 h, Z1 ~
  30. int m_iLanguage = ENGLISH;! L, ?0 _7 W2 Z# |. j
  31. /////////////////////////////////////////////////////////////////////////////7 J1 x( L# i- T9 C  c3 W% U
  32. // CRevAppApp# `$ x3 x& N/ H3 `% J' I" K5 J! L! ^) \
  33. % b* N& r3 _( t% t
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)8 i0 c4 i" v- T
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    6 w6 _9 a% u0 S7 E4 z+ o5 k6 J
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    2 k5 {% ^- ~$ Z" K. U1 Z) }5 L
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    * m, ]# x  H6 K' F+ a! G9 \2 ]) l
  38.         //}}AFX_MSG; a8 V/ i) y- S- M6 K
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    2 I! ?6 @# q2 ?
  40. END_MESSAGE_MAP()! L! o. u8 V4 a8 a6 d8 X6 V

  41. 8 y7 L1 }+ T7 R5 P  z. M: u
  42. /////////////////////////////////////////////////////////////////////////////. a9 q- K& Y3 {+ D
  43. // CRevAppApp construction! ~: k% @9 b! d& J' Z5 B- A4 Y

  44. $ f  X" Y4 u2 r) D" A4 C5 }+ `! V+ o  }
  45. CRevAppApp::CRevAppApp()
    # Q" Q0 f3 q! z% a2 e0 E* C
  46. {
    , u8 G* _, }" o4 y/ P+ M
  47.         // TODO: add construction code here,5 }9 g) Y* ^! H
  48.         // Place all significant initialization in InitInstance; _8 W  Q  x( N0 k
  49.   bDisplayIsBig5=FALSE;
    4 T) d( p6 a% m6 X7 U
  50.   bRestartUpdater=FALSE;+ b! J! \* _" M- a$ V
  51.   bFinishUpdated=FALSE;( J+ ]% j8 d: Y3 e( e9 ]# g. D4 e
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;0 Y! ]7 E( K" M* a0 l2 y2 {
  53.   InitChangeDataBig52GBKS();
    : Z2 N: V6 e  l9 k6 ~0 \
  54.   InitChangeDataGBKS2Big5();
    2 S, S9 N" c: h; O( n! T5 {$ q- G& `# G6 X
  55.         //( s$ U0 r$ s) @) N5 @  H( m
  56.         bClickRunExe = FALSE;, V' p. y) ]5 b0 Q* t3 [: _# w4 B
  57.         //
    . I+ O2 \0 ^+ h
  58. }/ Q2 w; @9 k3 Z' K

  59. 8 t8 }1 R' W7 V% }/ W
  60. CRevAppApp::~CRevAppApp()' v# Y7 g( B% s" W
  61. {
    6 D9 U+ R* q; |0 ^! f/ v3 s! [
  62.         // TODO: add construction code here,
    $ p9 n  s9 V+ M% K1 ?, E
  63.         // Place all significant initialization in InitInstance
    " I1 h) w4 S" E9 m, P) ~5 }
  64.   EndChangeData();
      u3 R: t/ q0 q: r% e
  65. }9 x, Y) I- G, _( j0 t" {
  66. 5 g4 X* H  p$ y1 t1 e4 G; y( C
  67. /////////////////////////////////////////////////////////////////////////////7 {/ Q5 b- m! O, D. a
  68. // The one and only CRevAppApp object
    ( H# X" I: C  N2 o, S  L( ^

  69. 4 Q3 g* E& _- X
  70. CRevAppApp theApp;
    . u. w( O+ h, h; E0 B

  71. " A" [7 {6 b. J' S$ @  e! m
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)- N" q' T% p7 V* |7 g: A" M( c3 x
  73. {
    0 F' H! [: {7 L8 E4 Z
  74.   int iEOF=0;
    9 B! {, G0 I, `: E9 I3 U
  75.   char szTempName[MAX_PATH];
    * s+ g3 g* e4 w1 F/ K
  76.   *szFileName=0;
    ! Y! B1 f" t- Q# v0 A
  77.   iEOF=fscanf(fp,"%s",szTempName);
    " H/ G$ r7 G$ B# c' c
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')8 y/ F- s; Y/ q, O) L6 `5 o6 J
  79.   {: b. W# U- I$ s9 o
  80.     strcpy(szFileName,&szTempName[1]);- I/ i# ~+ A) T7 n2 V! x
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    6 n2 u. Y- B7 f6 O
  82.     {
    ' @* K/ U# S' |/ Z
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ! U- `2 B; _) W3 |0 D# }
  84.       strcat(szFileName," ");0 W9 m$ k3 X5 [$ k' }9 q1 N
  85.       strcat(szFileName,szTempName);' L: K& D( G& I
  86.     }
    9 n) A, J# @8 m$ w$ S, c2 g# H
  87.     if(strlen(szFileName)>=1)
    + A  k" k5 b7 E. P# \2 j5 i9 x
  88.     {
    , O$ ?/ @- o& x1 {+ R
  89.       szFileName[strlen(szFileName)-1]=0;; X# [! n7 C5 D! a, C/ r
  90.     }7 ~2 _# ?" z3 I8 U2 B- b
  91.   }
    ( n" Y9 T: {# z/ @
  92.   return szFileName;
    , }+ i+ W2 D% K7 F$ s; P2 m# E- Y
  93. }
    4 {3 n/ W  q3 R; o- D# x
  94. # ?3 P- v- ~# I
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)! K# [; a  F* b; Q& h
  96. {
    ' ~& }2 j( c0 x7 t! A" g: v) Y) ^
  97.   FILE *fp;" U. D- W; O; j- X
  98.   char *key=NULL;+ R7 J/ r) d# {
  99.   char version[MAX_PATH];
    5 @8 s1 W8 i6 w8 `4 o
  100.   LPUPDATEFILE file,olds;. i" G+ ?) d8 @+ z8 A/ y# V
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    * y5 d0 {' c8 o; W: V6 m6 Q
  102. ! s. ~0 T! @, D6 {
  103.   UpdateList.clear();! K# ~6 l) `) [
  104.   UpdateFile.clear();
    4 L" @3 q# n3 T/ i0 h: w
  105.   if(GetFileAttributes(filename)==-1) return false;  n0 x' ~/ R$ M2 D" E4 V
  106.   if(!(fp=fopen(filename,"r"))) return false;8 G1 ?  M& ^" s/ B
  107.   fscanf(fp,"%s",version);6 z) k& [# E6 ^' _) G/ Y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    0 o  N* q9 d/ ^/ |% B
  109.   while(fscanf(fp,"%s",version)!=EOF)* D$ W# X: M- E* B- w6 c4 Y
  110.   {' {+ B1 i3 X& P! v
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' v# @  m' o/ h* ]
  112.     fscanf(fp,"%s",file->path);
    % s/ \) U! w/ u. W. `
  113.     ReadFileNames(fp,file->file);
    ' e7 l8 S, g! ]- p1 h
  114.     strcpy(file->full,".");. M% I$ x; y+ O
  115.     strcat(file->full,file->path);  W! g- W  p8 W1 F' M
  116.     strcat(file->full,file->file);$ z9 W& h# \/ j& M* F& i
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
      B" h1 A7 ~/ R8 F* D( R
  118.     {
    ; J* a3 e" ?& R, f/ a( W( t
  119.       file->vers=(float)atof(version);, P6 z3 p; L" z9 V
  120.       UpdateList.push_back(file->full);/ o0 G  ?( L) M
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    + r% }" n7 V2 w2 u+ ~
  122.     }9 {1 P1 y  p& S9 Y
  123.     else, _$ g" ]1 @6 I
  124.     {
    7 w; s- l/ C+ H
  125.       olds=(*p).second;
    7 ?! x# Y# |" Y! b
  126.       if(olds->vers<(float)atof(version))
    $ G& C/ {' |, `0 c6 J/ Q
  127.       {# w1 I. y4 {  B9 U
  128.         olds->vers=(float)atof(version);/ O4 h; `3 e- d' H' r8 u7 H
  129.       }
    + C8 e: p. u8 i6 `+ V5 `4 j& S
  130.       free(file);4 u8 L2 D  J& o' V- B
  131.     }
    ' v* z  ^$ l5 N9 {) Q3 g
  132.   }- [/ c, A/ R' c2 m& o: x7 \
  133.   fclose(fp);0 `# k, d9 R0 ^' ^
  134.   return true;
    " H  H4 D8 J$ N; J
  135. }
    8 c' {0 X+ u* u' p: d3 O! A  E# Z

  136. & D  F) o3 o) f) ?
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    0 u7 z8 \1 k5 b7 A( o( \
  138. {
    0 A. p: Q4 f1 q5 g5 i1 n5 B$ ^
  139.   TCHAR  szFull[MAX_PATH];% S& G) X; v1 I! ]# U- j
  140.   TCHAR *token,*inter;$ A) R- y6 h+ O' [4 q) C* X  a+ Z: q
  141.   *szPath=0;! a' q. N' `6 x# P; H
  142.   strcpy(szFull,szFullPath);( m& U# C0 ]5 ~" o6 O: O, a
  143.   token=strtok(szFull,"\\/");  e5 q1 {; {8 }' ^/ g
  144.   inter=token;! G# z; d7 ]! Z
  145.   while(token=strtok(NULL,"\\/"))0 z7 J5 M0 C! n% m* m
  146.   {, W6 B' B9 K) z! |) F# B
  147.     strcat(szPath,inter);7 q- v0 c8 s3 `, L$ ^% q5 n
  148.     strcat(szPath,"\");
    2 ]  F- s9 P; B5 A/ m
  149.     inter=token;
    1 N+ a  F& e- z2 J. a% D0 L4 P) \2 w
  150.   }, U8 b" v8 F. G) a9 X5 W
  151.   return strlen(szPath);
    + W/ `/ s; x$ `% t( Z
  152. }
    8 ]/ p; E/ N! _% X5 L$ i
  153. * T4 w- n" ?: j1 N5 o. W; ~' _
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)* z+ Q; [" g2 n% V6 H( S+ J! ?  p$ N
  155. {! Z8 |, }1 a. J9 N: ~- L$ Z$ D8 u
  156.   DWORD attrib=GetFileAttributes(Target);6 e6 W9 C; z9 g3 u
  157.   if(attrib!=-1)
    & p* r/ I: H9 u4 @3 P
  158.   {
      Y+ ~2 o+ v3 d) n
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))2 G% r' F1 T; P7 ^
  160.     {
    # p" k7 w3 p/ \. _+ o# S9 P9 u
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ' x/ h. B& M% Y4 `# l4 a
  162.       SetFileAttributes(Target,attrib);# C8 o5 Q) v5 H9 n, x" P9 g
  163.     }
    2 T/ r9 C8 n# r( b# S# P
  164.   }6 G, H3 G( a% p) _/ Z+ M6 Y
  165.   CopyFile(Source,Target,Erase);7 M2 b/ x0 A& d  `/ I$ ]  N6 y
  166. }
    ( N+ [5 @# u1 Z7 l
  167. / M  W3 R2 i6 |+ g
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)5 D9 x% c6 b. j. b
  169. {
    - g6 c- L8 r0 J" `3 Z9 Z" c4 Y
  170.      FILE *fp;( d  I9 |8 Q1 b- X. K6 P" M
  171.      char  szBuffer[8192];% X9 y! _6 [3 {
  172.   va_list  argptr;7 T8 a0 P6 T$ P! ^! N8 k

  173. " i, L$ O3 J( R: O: ^* ?4 _$ a+ d# {: x
  174.         va_start(argptr,message);5 |8 X" \& d1 L3 J5 D8 U( o
  175.         vsprintf(szBuffer,message,argptr);1 k6 b$ Z  p* s! d
  176.         va_end(argptr);
      ^( v" Y0 H. ?6 H7 N- p5 n% c: W
  177.   fp=fopen(FileName,"a");9 P3 V* E3 @1 o" |0 V( V$ [  _  s8 Y5 S* I
  178.   if(fp)
    5 L# e& P* w: [' ?, d+ V9 G7 J5 ?1 ~
  179.   {, j. n; {" x1 K6 W) H- }7 A
  180.     fprintf(fp,szBuffer);
    5 [5 f0 g5 B+ T" k
  181.     fclose(fp);
    2 U- l1 [$ K3 ~& z; d' w* d, G7 l
  182.           _flushall();8 l) g. L5 |  i/ I& `
  183.   }
    ) \* z8 ]2 k% V  g% I8 F$ D& O
  184. }
    0 Y' y9 U0 E5 k% P: a7 M- w6 x

  185.   i1 \: O9 j/ `! B4 A9 {! c
  186. BOOL CRevAppApp::Fclearf(char *FileName): C) B. q! d& d4 O4 A8 y
  187. {$ C. ~" e# e) v% R, V& q* e( p
  188.      FILE *fp;
    0 U2 e- x0 R+ |6 X. z) U! ~, W
  189.     DWORD  attrib;2 Z7 \+ ~. ]1 C. f
  190.   attrib=GetFileAttributes(FileName);/ z2 K% j' |" q) P  ?6 _+ T7 x& z/ y
  191.   if(attrib!=-1)! L* \9 u! F( L* b. G& Z" ^
  192.   {% a9 b& i) {' [& ]! f! z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ) R0 G& b8 H# P. J
  194.     if(!SetFileAttributes(FileName,attrib))
    % E: B3 O2 b8 B4 z
  195.     {' Y5 i& i* K, K" o: J6 _! H
  196.       return FALSE;
    % N* ^; M+ M! e5 n, L8 `
  197.     }
    5 D7 M9 x8 m$ _5 A
  198.   }+ k$ s- p2 G; v. l) E1 n) U
  199.   fp=fopen(FileName,"wb");/ @% x, T( J7 u- l4 F' \
  200.   if(fp)
    ' Q0 g1 l3 G: z9 w
  201.   {1 c! F% ~) e* ~4 u3 {# Q4 b
  202.     fclose(fp);3 O: E6 s$ i) G. d& x
  203.   }  M# t6 C( r# k# G, O
  204.   return TRUE;. q3 i" _* ~- m( |' z3 @0 ?
  205. }
    7 u/ {; s7 `! l5 y3 L9 V6 ]
  206. % T- f- [1 a' }: \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    " }  Q* Z7 q  z) i; `: n
  208. {: {: L2 E  W+ G5 A3 G
  209.   char filename[MAX_PATH];7 V- p: r) o- [) X- w5 i
  210.   LPUPDATEFILE file,olds;
    - e0 Y" [3 x8 C+ }$ S0 @
  211.   std::map<int,CString>::iterator i;
    2 @  U# ^# [* i+ j, O9 ?3 F# R2 W
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    * a) `# u  z: R7 a: k6 z
  213.   std::list<CString>::iterator l;
    9 e! R% b7 e( {5 F  a0 [5 f

  214. 0 j; H5 A+ l% a5 V8 V
  215.   if(bFirstUpdate)
    / R0 O5 [8 j4 e: K* E
  216.   {5 z' @: S( D  j
  217.     dwCurrFile=0;
    . u  E8 R* H' \
  218.     bFirstUpdate=FALSE;! w: i- s, [: n7 ]) Q2 O0 C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 z3 c- m* c  c) c( i" ^
  220.     {  e& Y4 z) P0 a" d  Z1 Y# |
  221.       dwTotalFiles=UpdateLocal.size();: A( z8 I# \" P) B( R, E2 O
  222.       dwDownLoaded=0;  \. ^0 B2 r3 I5 W& o$ _: c8 V
  223.       bSilentStep=FALSE;! ?0 {3 p; Z3 R
  224.       bCompressed=TRUE;3 M: {# J, r' h% B+ k% H2 l
  225.       strExtLocal.Empty();8 X( \; z1 h1 |- }% m: }$ d
  226.       strFullName=(*i).second;1 ?, s3 Z; u# i7 V
  227.       dwProgramState=AP_CONNECT;
    & i  c- b' D3 Q
  228.       return TRUE;& p# @+ _. z  e: O7 }" W# Q& c
  229.     }
      \1 L# b# L5 Q8 X/ H; X7 e; A
  230.   }! M1 I' j# Y4 l9 o
  231.   else if(bRestartUpdater==FALSE)2 n8 }- O2 o3 r; L5 C
  232.   {
    7 b/ |9 a! p& p: k" d2 \
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    4 {+ Q1 }) y$ G/ z8 |
  234.     {: V" c! M3 x. _3 Y. w- h
  235.       file=(*p).second;% _. U" A& a# @
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())) @3 ^% y8 h' r3 e! z" C
  237.       {
    / W3 M9 v, L7 Z4 d9 X2 j
  238.         olds=(*p).second;
    + F5 ?( V0 v6 C' Q
  239.         olds->vers=file->vers;
    , ?8 e9 q& A% M/ j- ]' |
  240.       }
    5 N- q1 T2 x" c8 Y; k' _
  241.       else! {2 O" Z3 u* q6 j
  242.       {
    & u. D: a0 D0 r+ n% t
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; c  k& W9 v0 c
  244.         memcpy(olds,file,sizeof(UPDATEFILE));7 o; x$ W: R- x
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    - B* W" V& F! ?! |  \, B& |2 [
  246.       }
    + M" l8 m2 p1 @2 i
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ( l/ p5 Z7 H( S+ ]3 \1 e- H; P
  248.       sprintf(filename,"(%s)",file->file);
    ' y; L! J) \9 a; Z4 A5 ?/ K. i2 o; [0 f- F
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 R9 T0 F$ m8 k) m$ `
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    " P% n+ Q2 Q8 h
  251.     }) u( a. ], ^  T4 n1 a1 z
  252.     dwCurrFile++;
    9 s4 m5 t: ]) P; h
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 P, l$ \" \  i
  254.     {
      I& }/ n1 P" {, l0 T* j
  255.       bSilentStep=FALSE;6 `5 B" B" r; M; ^8 g  _4 Z' a
  256.       bCompressed=TRUE;/ W$ B1 f) D5 i$ e7 A+ V
  257.       strExtLocal.Empty();
    7 h, I* J/ f8 x0 ^- I
  258.       strFullName=(*i).second;
    " _" D9 t9 }! {, n8 K
  259.       dwProgramState=AP_CONNECT;
    # f6 X' ^: j  L& l" ~. ?! D5 r/ b
  260.       return TRUE;
    " ]( J/ u  m1 d. n) E2 W
  261.     }7 ], s) [! I+ v! T  V# @' n
  262.     if(!bRestartUpdater)8 `+ e6 a$ ~, t. j) D! ?
  263.     {; A& ]' j8 H: _% g9 a& k7 Q& v
  264.       int iCurrSize,iFileSize;5 }/ w' Q0 ?4 O" ?% M
  265.       iCurrSize=0;
    & f8 _' m4 u" [! W1 z
  266.       iFileSize=UpdateList2.size();
    # X. \0 w- t8 t( _7 I- C. D
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . J- u* n$ t2 b) o
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");- C2 J3 \! |' }8 r4 h1 g4 O
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 k6 e' U0 H! O5 w
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! }. @1 a- J% w/ ~% m9 g
  271.       Fclearf(".\\update.dat");$ }5 G/ N7 b8 `% z. o
  272.       Fprintf(".\\update.dat","Bloodyf\n");2 Z8 g) w9 e0 c( [$ l/ Y
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)5 C7 \9 q5 D2 [
  274.       {& o* C5 N7 ^' m3 c. G
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())9 X+ Y( j& R, U( X3 i! o5 B* g, P' Q) C
  276.         {
    $ i3 I4 ~% }2 [) e
  277.           file=(*p).second;4 R$ ?3 L! ?0 t. _3 t6 X
  278.           sprintf(filename,"(%s)",file->file);* B$ Y# C, t# }& I, r. f
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! _! @$ L$ @/ ~8 @
  280.           iCurrSize++;
    6 O; U5 y3 p. g, a: N; l
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));/ l/ ]1 u, H# S* q: q+ r
  282.         }
    8 [4 A, s' G6 n
  283.       }
    : l2 N. @/ E. I' v  F# k  l
  284.       unlink(".\\update.txt");- P2 j. r3 K; _% Z" ~& z' U
  285.       unlink(".\\update.tmp");
    8 x; Q7 _2 t* S0 G; h
  286.       Fclearf(".\\checkversion.dat");
    7 p3 p: Y/ T, u# I
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    $ ?, `! S+ I* s
  288.       if(UpdateLocal.size())5 m% ?! t$ ]4 E2 r7 Q/ Y
  289.       {' s( N. `( M8 A1 [, o
  290.         UpdateLocal.clear();
    * F; j2 F( v5 D$ i0 o9 Z
  291.       }
    , |, h+ X5 _, `  i1 F% R- [
  292.       if(UpdateFile3.size())
      @5 ]' A+ T' ^
  293.       {
    $ Y2 c* }3 D  L
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). H' Y8 }8 R) w6 |4 [; z
  295.         {2 ~, K/ e: w4 W% y' y+ B' G6 h
  296.           file=(*p).second;
    6 K6 L# h, j6 e4 h0 C% I
  297.           free(file);
    4 t) {! d# p9 E* P
  298.         }" y! Q/ o' a# o1 {3 H
  299.         UpdateFile3.clear();; b/ ~$ d6 j& d; f4 H
  300.         UpdateList3.clear();
    * y5 b# j+ V% Y' H2 M8 ?
  301.       }
    3 Q- o$ e, }9 @3 H
  302.       if(UpdateFile2.size())  Y5 h/ p8 Z/ r: s7 P5 A" m
  303.       {! Y0 A) F# L$ C" r0 |3 b) S
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  O2 Y, j, d# T/ J
  305.         {
    8 ]- |) z& l& L8 r
  306.           file=(*p).second;5 a& u- ]2 |3 t3 ?2 Y6 ]6 q" a
  307.           free(file);1 |/ z' R2 K0 Z! T' u! W
  308.         }7 [- \. P$ e  _# F
  309.         UpdateFile2.clear();" h3 ~8 c1 l5 e$ L
  310.         UpdateList2.clear();) _  s8 {4 b2 l% N$ ]2 ^0 G0 W
  311.       }
    5 K" w& C6 W2 k0 Y
  312.       if(UpdateFile1.size())7 {! T+ i7 g" |+ ], l
  313.       {
    # g& k2 b1 Z7 J; f: t. N" I! V+ p3 M
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) r3 c5 P3 [" t) b  |& v
  315.         {/ ]9 D( Y1 n2 s( e3 X/ [( ~
  316.           file=(*p).second;
    ) J# b) [/ U: @" f9 |1 Y6 l& Z+ i
  317.           free(file);
    + [$ Q8 H8 q0 F4 s3 E$ \; n" Z9 a& L
  318.         }
    + `' T/ W  p, y7 X3 K
  319.         UpdateFile1.clear();/ L4 t8 t( _) [5 l4 q3 R. N
  320.         UpdateList1.clear();6 @; P4 e# T' W: W, f" n/ l
  321.       }
    : M3 ]' R% }5 W  J
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ! `$ M; M: k( B, n
  323.     }. X5 w# o8 |4 f! i; r* n3 \
  324.   }/ O" U' P# T( e6 D- F9 A2 ~
  325.   return FALSE;
    - L  ^& a# X. [( C, F
  326. }/ P" K0 F: g$ q5 p& F

  327. 4 ^8 ]4 j8 n7 Z2 @  I- R
  328. void CRevAppApp::ClearAll(void)
    . B4 T$ T& U8 V$ l6 E
  329. {
    & ?  X: L4 U2 Z* U* E
  330.   LPUPDATEFILE file;1 B+ ]' D* j, T' J; ~$ t
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    # C1 b0 O( g9 l- S, H$ T

  332. 3 {3 Y5 x3 @2 g0 n0 [
  333.   if(UpdateLocal.size())
    / ~5 g* W" z) y1 \
  334.   {
    ( k% V% }/ [, P1 q6 _- G
  335.     UpdateLocal.clear();
    * J' H  S, E6 q; k+ R( z' h
  336.   }
    % I* F+ m$ ]' L! A+ j+ u& K
  337.   if(UpdateFile3.size())/ w& N- ?% }9 w# m" @3 y! Q$ y. {
  338.   {
    & U! b  n, X: h
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 g  Q6 V9 p/ b7 `; J4 s! f
  340.     {- G6 f  w$ j' ~
  341.       file=(*p).second;) m2 E& l1 f' ?. l3 Y
  342.       free(file);) V$ M6 X* ?  {( i7 U+ F' M
  343.     }
    : y4 a0 ], G9 C) u  V* p5 l
  344.     UpdateFile3.clear();6 D. V: I3 X2 C: g) E
  345.     UpdateList3.clear();
    ) u0 T- Q5 g) J5 C7 g/ C
  346.   }
    0 Q: t( L' |( ~
  347.   if(UpdateFile2.size())- B/ h  T1 |# \
  348.   {
    ; a6 Y8 M1 P* s, h
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ v6 j5 N. Z3 e8 z# j4 V) V$ k
  350.     {1 B# ~4 n5 v  x$ ?. W7 R# B$ o/ z0 i. a. C
  351.       file=(*p).second;: }( ~6 G# r* g5 t4 P
  352.       free(file);
    # \3 `- R$ Y8 V; e& y  H
  353.     }
    ) a- o& G' R$ t9 q3 l
  354.     UpdateFile2.clear();9 ]+ c; e& C, ]* t7 Z' i7 t
  355.     UpdateList2.clear();
    7 d8 ~" H6 }4 k- J5 {8 Y
  356.   }
    ( l2 D; S0 a2 v5 M' l0 I7 l
  357.   if(UpdateFile1.size())$ E/ B  ^; V" y6 I- W4 P% a8 s
  358.   {
    , p4 E2 j3 z- @* W4 g3 h* v
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& @" S" p) y  J" `, S# r
  360.     {
    9 o+ N* F6 }5 O  a/ j
  361.       file=(*p).second;  S' D5 d  R+ B! B/ \( o
  362.       free(file);
    8 ~1 L& s9 D' |! y, I
  363.     }" _$ b4 N4 [- b
  364.     UpdateFile1.clear();6 w3 w( y4 e2 \+ f0 v
  365.     UpdateList1.clear();
    - N, k3 Q' R* M( `
  366.   }- ^9 O8 \& x' ?; K1 f9 M
  367. }  
    4 ~6 ]1 ^( o6 v1 t0 p- K$ _3 r
  368.   
    6 {" z: G$ o3 Y/ @' O4 U7 p( `8 Y
  369. BOOL CRevAppApp::CheckLocalVersion(void); P! T8 h( X" v/ D5 f/ Z
  370. {6 k% Z$ G: X2 J( y# |) r; J
  371.   int c;
    5 L& {2 t8 b5 ]6 n1 k, S: c
  372.   LPUPDATEFILE file1,file2;
    . w- t6 }- g) o( j( l
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;& [% P" H: c% ^
  374.   std::list<CString>::iterator l;
    , P; y- K: f! ^. ~5 @

  375. # x  z! d! B1 B( y2 C
  376.   UpdateLocal.clear();
    8 Y/ `1 F' x7 h# T6 V1 q5 j
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);0 ^' P3 z+ A0 Q. b& a3 m
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);; {' k' R) y% F/ D4 i+ u! s( n
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    7 G4 f5 m5 `- N0 a
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);5 n' _% u( T' F5 ^4 A, E* Z" w
  381.   if(UpdateFile3.size())
    , I, @4 V/ G- O! W, T- p
  382.   {1 Y2 d2 o; ?' y( ~# U: c# l
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    5 d" u8 b0 w# d
  384.     {, a1 o% \! [% D2 b5 S' R1 R
  385.       file2=(LPUPDATEFILE)(*i).second;' b/ |* L  e3 z, o
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 p- }' Y, Q* ]1 W! f
  387.       {! K" ]" z" f$ n# G6 s. I( r& x
  388.         file1=(LPUPDATEFILE)(*p).second;
    , u9 a5 E0 _" ?2 |5 V" _( p
  389.         file1->vers=file2->vers;, F/ N9 M1 J" m0 R- c. ~
  390.       }& l  s8 M! ]# N. _% _. W/ `$ j
  391.       else
    3 r$ i* X# t, G9 ^% w# |
  392.       {& R( C7 G3 B, R: n( r( A- {
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' x5 S" ]' q' W% u( ^  L
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));+ H$ ?" [3 q6 \
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));! G- n( h: n3 e1 ~3 h. f
  396.       }
    / R8 z  E' k& w
  397.     }/ ], l/ l. @6 j$ S
  398.   }
    / }/ ?% G- ?/ f  ]
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% z5 K; l7 K/ P
  400.   {) \$ d/ n1 @! \( Y7 `
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    2 Q0 p, c: {/ E/ x
  402.     {
    ) Q2 g" b0 I6 \% f( k
  403.       file2=(LPUPDATEFILE)(*i).second;2 y0 n5 D- X7 w' \
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 S# P$ p! ]* Z% O: S1 {) e
  405.       {
    7 c& u2 d. H; ~7 E2 o. C
  406.         file1=(LPUPDATEFILE)(*p).second;! a* u3 a. e( M
  407.         if(file1->vers!=file2->vers)
    8 ^& G% }0 z3 ^5 U' t
  408.         {+ K8 D& Y3 o' S7 m/ y6 v4 v  e
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / O: W* }* n$ `# g! I
  410.           c++;
    8 w. `& u( W* {4 C" l+ t5 F2 Q
  411.         }* n( |) J1 J0 Z+ @
  412.       }4 s0 r3 K, E; F  v! n. {
  413.       else3 C5 T& P) T2 _+ E2 u6 M
  414.       {
    5 m% x8 ?0 A* m2 f3 R/ P# f" H
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 o( H4 F9 b  v3 z
  416.         c++;
      L% l1 c" A& t6 F6 @
  417.       }
      U1 h! p7 I( P; |& R  e
  418.     }/ `) u" K. M& n) ?6 r* @
  419.   }) J; ^4 w5 [# N- B6 X1 G+ W
  420.   unlink(".\\DownLoad\\update.txt");- a* A; n! E& o& \) z3 U
  421.   if(UpdateLocal.size()) return TRUE;4 u+ V+ i4 h' i
  422.   else                   return FALSE;" m  T* H, t. A% ?* t6 S: t
  423. }
    - a- I4 X0 n  b* G, X+ K
  424. 9 G9 |4 q. l- W+ ?; K6 `; f
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"$ j+ d- d* K6 ^5 g
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"# \& o2 O2 a# H4 c/ E
  427. 6 X, U- \7 A; {& Q! {

  428. 2 T) @% y* r1 s+ V, M  Z
  429. & \( _  i: |8 N
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)0 C$ r+ l* S5 O7 y* V  r, \
  431. {. W* n" y; g) P, g
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    2 d+ }/ }. o3 y$ \* H! h
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 U" a+ k2 g' N) s% Z8 W" b& E
  434.   {
    : I, ^. N2 f3 {
  435.     char szLanguage[50];
    7 _: o" B7 c4 q; X9 B4 X
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & a, S/ u/ a5 `
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : a" }8 F+ p$ s& r% |
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 C- b$ \& \- z5 F8 B
  439.     else                                   m_iLanguage=ENGLISH;4 y1 Q5 ]7 y) H4 c6 ^
  440.     char szRegister[100];
    + s: U9 t8 I/ o" A2 v2 r! I: L
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% C" ]0 A& v; F6 }
  442.     strRegsName=szRegister;
    ! ^: M. K- z) Q) m- r7 }
  443.     char szPatchURL[100];; l2 I/ r( j( p) D, i8 N
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ L% |$ Q9 h8 A7 N
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    % d& b: D+ J/ M. n4 W$ j
  446.   }, S5 f# n; M) l5 w+ k$ \
  447.   else' h8 `7 q+ ?$ q6 o. Q
  448.   {8 w& U5 W* u, s
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 {* h; p$ O$ }8 d
  450.     strRegsName=DEFAULT_REG_URL;+ X% A8 Q7 N2 J: z
  451.   }! O5 n+ n+ N8 E, ~' o0 B7 y* b
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    4 i. Y. a. T9 ]& n3 e: ~
  453.   {* Y! A4 X/ t$ C  K
  454.     char szIP[50];
    , [6 H9 E" }# v/ g. A0 i
  455.     char szDIR[300];( `6 a7 B7 l  G& T; q  r  M
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ) D  D9 H! }! n1 @
  457.     {
    1 z( D! c2 f* c8 s+ P# z. o, h3 n
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ! Z/ U7 G: U* z! G( k
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");, y- {) m- Y. u, a
  460.       strHostName=szIP;
    7 j6 a8 }4 `! P& y6 u: E: d
  461.       strHostPath.Format("/%s",szDIR);
    / }6 Q. R5 W! ^% d
  462.     }# g; v+ M9 f7 w
  463.     else! T# k, o" f8 D$ g# e! a
  464.     {
    : l+ C, c8 J  t. k/ [  o3 t
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 t* ^# f7 _: j2 r
  466.       {# B! x/ F1 Z; o
  467.         char szLanguage[50];
    4 l! A* E& p, ?! J, C- z3 e! d
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( Z, @1 V+ P! E0 \+ j
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % ~0 ?* R0 D( ^" o2 n: I9 Y" s% K& @9 |
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 q2 u' f' a5 n; B
  471.         else                                   m_iLanguage=ENGLISH;" I5 _) ?2 ~, q
  472.         char szRegister[100];9 M0 M! o7 m) W; `3 ]
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' j! S7 z" p7 Y7 |" x
  474.         strRegsName=szRegister;* W$ n$ g- N, ~
  475.         char szPatchURL[100];) T7 ~2 p$ m; p( W" L9 T6 m
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 `2 p5 B* N" g$ o! E% X  H
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);& Y2 }- x9 X4 p8 I
  478.       }
    4 F: s: A4 S9 [
  479.       else
    - @+ X5 U0 X, z' W* ?5 {
  480.       {
    ' _1 K* B* v, h
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);! D) r9 X2 A1 H4 `; P1 Q
  482.         strRegsName=DEFAULT_REG_URL;
    - W9 t& M+ t' U) O
  483.       }
    & b5 W. |; t+ {5 U4 y
  484.     }) m3 ^! r! B8 K0 G/ a+ Q6 U" j
  485.   }
    8 `6 x( X8 w+ `( U' u
  486.   return true;* K" v$ a; o* j5 O; @: \
  487. }
    ; ^4 o6 R* o9 [
  488. # Q" o; f) N; _9 u; W
  489. #include ".\ZLib\unzip.h"( j$ m% @" D% Q' k; l1 Y2 ]" H
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 E% j/ s0 l$ ~2 M: X6 U. D
  491. /////////////////////////////////////////////////////////////////////////////
    # E$ \/ N1 E6 e5 I* K1 ^  V8 H7 |
  492. // CRevAppApp initialization* _( J) H$ `( e5 r( b8 \
  493. % z3 O* E, O% e$ Q2 `
  494. BOOL CRevAppApp::InitInstance()0 M! ^6 a8 c" z* l5 z
  495. {
    $ a; w3 y. A6 }0 P
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];! Y6 W7 f0 R2 B8 p; y# Y) f
  497. $ ?0 F& x. q! A: z5 ~
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 v0 I6 G2 m6 I  D
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    " a$ t( D- ]  b5 q% O6 Y: P
  500.   {
    & U$ l5 z, y; c/ }" [
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");3 r4 V6 f8 S/ M! l' h
  502.     GetPathFromFullPath(szPathTarget,szPathSource);5 S: ~* U. I/ n3 w
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))). L( N: v% o) c  d
  504.     {8 x' ]. U* ?3 P6 F) F# t
  505.       strcpy(szPath,szPathTarget);
    7 Q: V+ o2 [0 d4 G+ o
  506.       SetCurrentDirectory(szPath);
    6 v4 H: u, I/ ~0 c* v- A5 A/ {. s
  507.     }* H/ S! o/ n; U5 }$ x' m: }) v
  508.   }
    4 r& Y0 i" s$ N# H4 E
  509. #ifdef _DEBUG
    : y4 [. k6 F+ x, T7 H4 W
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; W: ~  M) {0 D: N  r6 x1 D
  511. #else
    8 U* i$ g& {: @: Q/ A3 k3 X
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    : c- X6 S, L# s2 A: R
  513. #endif- t( a8 s' J$ M& e
  514.   {6 u! V( k2 ~- A6 w! W
  515.     char tempFileName[MAX_PATH];" r, d7 m  v& T; A4 H! a
  516.     strcpy(tempFileName,szPathSource);
    ( f, a: s6 @- x* o( |; E# B" X
  517.     tempFileName[strlen(szPathSource)-12]=0;
    4 h: a4 D) g, C4 S& w- `0 e
  518.     strcat(tempFileName,"\\$CSUpdate.exe");% q0 |) g$ P# ^' s7 u
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    - [8 e# N3 r1 ?2 ^
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ r9 K: K! |% Q0 l$ a. C
  521.     return TRUE;
    + S. t) w2 P3 L5 z7 r2 C6 ^
  522.   }
    $ d! q2 v. m! |
  523.   // Nuke 0118: Delete run.exe
    8 P/ q/ P( T1 r- F5 f8 E/ a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ' U+ x, u, F% t$ D+ m
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");7 E4 X6 Y5 i) Q  g
  526.   if(!ReadCfgFile("Config.ini"))
    0 M* Y' P* o2 O* T. m( V
  527.   {3 C8 [9 R3 K" ?: `* A7 O; O8 A, X& G5 z0 d
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);1 v" C. h0 ]2 U9 v* y! z
  529.     return TRUE;
    7 t7 @9 ^# [% K* ]' z3 T" {* E2 o' [
  530.   }( r( T% {% Q+ k* v% G% ^% c
  531.   HANDLE mutex;: w& X2 I1 p. o* ~8 Q' R9 O* B
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 n/ u5 c  b- \, B5 k
  533.   {$ r9 w' l7 _3 ~9 Z
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ) L- ]! o1 x* R# K6 w+ k+ S
  535.     {/ ?/ B. M4 [1 F+ M# P
  536.       CloseHandle(mutex);
    4 f$ V- C1 V" f0 {! r+ l% P1 K* p3 H
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);+ k$ H! t& I% O0 z
  538.       return TRUE;
    ! y4 E7 ~0 a. J6 W
  539.     }
    4 m7 Z$ A) G. O
  540.   }  ( J8 X" N! E: ?1 e1 m: L  Y# _$ X, x
  541.   CloseHandle(mutex);
    9 E0 K3 k5 q. C1 Y

  542. + a0 w" F  Y9 c1 a* {. t
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);9 y! [% P4 S- ^4 Z! h5 z9 ~. |

  544. / L2 V. E6 p6 R! [! Y% Z
  545.         AfxEnableControlContainer();2 H+ [% w$ u1 k9 u5 k
  546. - V/ l3 |3 W6 [# `9 E$ _/ L
  547.   bCanUpdate=FALSE;9 l) x7 g5 e* y/ I9 S% O0 u
  548.   dwStartUpSteps=1;0 J1 W" j( d  y' i( B7 d
  549.   dwProgramState=AP_NOTHING;/ D6 r; A4 ~9 o# d5 z/ V. v
  550. / \$ a, ]3 I0 @; W; Y! ~& ?
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 T! z2 w4 y5 s. I
  552. $ w5 d5 L! o- F8 e3 U# M
  553.         // Standard initialization
    7 `, f" F4 x  W2 p
  554.         // If you are not using these features and wish to reduce the size/ i. v7 m  q% @4 O# Y! e9 K
  555.         //  of your final executable, you should remove from the following; Z! R* `  F4 q4 _
  556.         //  the specific initialization routines you do not need.
    * R& Y# r: b8 F3 L3 A4 r
  557. 1 l* m6 V5 M- v+ }" w
  558. #ifdef _AFXDLL7 s/ O: x3 i' L9 J# P
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL6 C& m( X& q- a, ]3 u6 h! _5 d
  560. #else5 g& Z# k, l9 q& A( T$ M7 b0 [
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    % z$ A, z& {% V+ |' C) U2 [
  562. #endif
    $ Z5 Z: M0 m5 m3 `

  563. 0 E) [8 G: p# ~- C9 A( N8 [
  564.   dlg=new CRevAppDlg;8 D; E# z5 w' g9 A
  565.   dlg->Create(IDD_REVAPP_DIALOG);/ v: m+ \3 U. @- n. |
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / C4 e1 {7 [/ |1 m$ Y, F
  567.   m_pMainWnd=dlg;
    / G0 m! A! r0 n- n
  568. ! b) _( q/ u# M9 ~* G
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    & _7 Q; _; f: j0 H$ d

  570. 6 b) i' P' x& F6 g1 N9 V. r: `
  571. //  GdiplusStartupInput gdiplusStartupInput;
    2 I! w- E: E. w& n0 E! T' y9 k
  572. //  ULONG_PTR gdiplusToken;& |: g1 n/ O$ n! P+ X; V
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! f" j6 s* s: a8 y
  574. 0 J( Q, Q; @. _0 _' _
  575. //        CRevAppDlg dlg;
    + W- W# Q+ `* Z5 r4 I; |
  576. //        int nResponse = dlg.DoModal();4 a6 w5 [4 l2 W1 c* Z) n2 H
  577. //        if (nResponse == IDOK)  h! z& o6 X+ v" H9 R
  578. //        {
    ) e' U$ ~# M7 q/ `, W7 o
  579. //                // TODO: Place code here to handle when the dialog is
    5 S( e3 W! `8 n; f6 A; ^' p
  580. //                //  dismissed with OK) ~9 F3 r3 x$ [
  581. //        }& J! F- Q7 x; a2 `" G" e
  582. //        else if (nResponse == IDCANCEL)
    : |1 F9 Q8 p% S+ {
  583. //        {
    & g+ R7 t  n- F$ ~" `# a' f0 C
  584. //                // TODO: Place code here to handle when the dialog is  y0 T# ~1 V/ I7 N2 v4 x& t) ~5 S% @
  585. //                //  dismissed with Cancel
      h. R5 T- B3 ?! l7 R5 @
  586. //        }; n! o" @' m% n% r" R2 F8 g
  587. ' Q, W# Y8 \' h, X
  588.         // Since the dialog has been closed, return FALSE so that we exit the
      y' U0 e. O: T) S3 H) V; p. \0 h
  589.         //  application, rather than start the application's message pump.* o+ L& u. Q1 t3 a+ j
  590.         return TRUE;( Q) i2 B, j4 m0 V  h4 ]. d
  591. }
    " K! D* R0 H( j" A, Y

  592. / q8 b  {; J+ }! H# z( I9 }
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    2 G8 |. A1 Y. x- X) y  ]9 o  u% }
  594. {' ~9 v8 l' W: V+ Y. m9 z0 ]
  595.   int i;/ v5 P2 y- D# ?  N) R- k" f
  596.   char *szRet;6 A" m2 e& Q( O: O

  597. 4 A6 P7 M! D; R6 W9 P5 b
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    + b  {1 h2 b8 @& d
  599.   if(sztoken)
    ' Q/ G/ R0 C. w! V) _, Y
  600.   {
    % G( N6 L& ?- x' d% p
  601.     szRet=&sztoken[itoken];: }, h' E8 T4 J8 e) k# h% y
  602.     while(sztoken[itoken])
    ( G/ H" m$ q' I: |& N
  603.     {
    ' z. w0 t6 V6 R7 `% W" Y
  604.       for(i=0;i<(int)strlen(token);i++)
    7 d% q( r5 _* n+ a. X
  605.       {
    ( u- z# j) @+ S9 [
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])/ O9 g4 O. a2 T; |0 a
  607.         {$ @9 p# y  G2 |  u/ `" \
  608.           sztoken[itoken++]=0;
    # ]( W% d; t( J4 n& C# b4 M
  609.           sztoken[itoken++]=0;& G8 m- ]/ ]& p. a
  610.           return szRet;5 {% v$ @- ~% H, u6 d' W
  611.         }
    5 x5 S! a" b. |/ r) p% D
  612.       }* \0 s( A- C$ J8 J* R6 \  G
  613.       itoken++;
    ) `* T. S7 A) J( X
  614.     }
    4 H/ z# `8 x2 l: d+ m
  615.   }
    . }6 R' {6 R* V5 F- J* [% m
  616.   return NULL;4 T* ^3 Z' j) f, C
  617. }
    ( l  S, B% P7 ]7 c5 z

  618. # N+ `6 J/ x4 J- s/ y0 n: _1 D
  619. void ProcessProc(long Total,long Current)
    2 M9 J; ~2 g. A8 D
  620. {. q0 l- f% V4 O3 T7 c
  621.         MSG msg;
    , h. c! ]/ Y3 b
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    - Y2 [. P* J; _2 k3 L$ B5 G
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - Q* z, [  {5 {: Y- u
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ' p. `; \$ K$ I2 U1 S2 ^8 T; }
  625.         {) r& x  E1 V6 ]- P$ O: F" g
  626.                 if(!GetMessage(&msg,NULL,0,0))
    9 v' l1 W2 N. {$ Y
  627.                 {1 ^6 `/ t- C" K" m1 Y
  628.                         return;7 l7 a% x7 l0 ?. u2 |
  629.                 }
    2 F4 F$ l# L# ]
  630.                 TranslateMessage(&msg);
    ( \+ U3 _+ Q& D" h8 z
  631.                 DispatchMessage(&msg);
    - j2 r9 @7 A6 S9 a# C
  632.         }        1 X$ |0 s/ s  t$ Y. O
  633. }8 a6 F7 M" q* W& U* L
  634. ) i) q7 T; G6 Y* _+ K
  635. BOOL bFirstChar=TRUE;5 t' s- p# \* J% E
  636. 4 L8 k( P" K6 M9 q3 Z
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    1 J+ ]: Z; ]$ t: k. @* V0 v1 O, n7 u
  638. {* z* b! V5 G& G* n! A, l, R7 U  u
  639.         // TODO: Add your specialized code here and/or call the base class
    2 {9 c6 r8 u2 w! O
  640.   switch(dwProgramState)
    & s/ R) j! S# \5 U
  641.   {7 U# a5 ^" V; O0 b; q, w6 F) J/ V( o
  642.   case AP_NOTHING:( F( F3 D' v4 P
  643.     switch(dwStartUpSteps)2 O. K5 _, l, e* _7 Z' d
  644.     {" [2 d; [3 f, ~* _+ I/ ]9 ~
  645.     case 1:9 a5 j8 [" k, U8 J, i# W6 h8 c2 ]- q8 H
  646.       {+ Q. D0 n* N; ?0 \9 m- Q
  647.         int i;/ R1 k5 T' y5 W6 j; V( ?
  648.         CDC *pCDC=dlg->GetDC();
    $ i6 ?' m8 t( l7 G
  649.         HDC hdcwnd=pCDC->m_hDC;) V8 C3 l5 ]# I: |
  650. //        Graphics graphics(hdcwnd);
    . f: T; x: b5 q1 s& U6 X) s
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    4 N, [# V6 ?  Y$ h
  652. //        INT iWidth=bitmap.GetWidth();
    6 r# l" L/ B9 q! h- m1 l
  653. //        INT iHeight=bitmap.GetHeight();
    $ Q9 _/ U6 b3 n; N' C3 C) P
  654. //        Color color,colorTemp;5 s- U6 Q9 p" r' Z9 L- |1 p
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    6 b; ~: m1 p: |9 X- Q/ \4 D$ G( I' O
  656. //        {3 I) @" Y2 D  b" r, ^$ J
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    8 |) z1 u7 k/ k# h3 Y. c
  658. //          {
    ' C$ U" B- `" G+ u( C7 c2 l
  659. //            bitmap.GetPixel(iColumn,iRow,&color);/ N3 |& _6 d! G, l* U% Y9 l
  660. //            colorTemp.SetValue(color.MakeARGB(
    , c2 T) `! M4 }  m; b6 a! b/ y
  661. //              (BYTE)(255*iColumn/iWidth),
    0 Q( f; l6 z% j
  662. //              color.GetRed(),
    7 S1 b) f( }3 Y8 [' R; Y3 b
  663. //              color.GetGreen(),
    ! B6 B* f4 B1 A6 E1 I% ~! i6 \! Z
  664. //              color.GetBlue()));
    7 H) k, `$ s4 j' E
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);1 @6 W0 J; ~, L" [' k7 o5 Y2 o( H
  666. //          }
    * ?' |- Z* W3 P( y3 Z
  667. //        }/ z8 o# o: w& x* P: P" p, A
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    - m. T4 ~) x: f) P
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / b# L1 }# ~+ m; m! j( l  z/ ^+ f9 }
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ' H% \( y7 U& u3 b
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; e, l7 o6 U8 e8 G- n) T3 e7 Y
  672.         for(i=0;i<240;i+=8)/ r6 S+ d) F/ v, S
  673.         {  o- e, z) @) m+ ^! |( A
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! y0 l" z: \) g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; Z/ v! B8 E+ I+ z- S
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , E$ g) c. ?2 C( C9 p4 b
  677.           Sleep(33);
    4 k/ ]$ g7 U* \. m( ~
  678.         }5 I# b% n5 {. J" t
  679.         Sleep(1000);' Q& k: n5 M' l" i* \7 b: J
  680.         for(i=240;i>0;i-=8)
    ' Z; B4 r9 Z2 p" D/ ~. G
  681.         {
    . D5 K3 J, g1 O. H
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& I' h. E  l0 H5 C9 g% D
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    2 R2 ~4 M( i; o/ ?- E! f# R
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 M# B, I, b* q5 k/ W3 ^# s% X
  685.           Sleep(33);
    * O: U$ Z6 k0 b9 A
  686.         }" [/ v! E$ R3 m
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    6 R8 x4 Q; H6 c2 q
  688.         dlg->ReleaseDC(pCDC);, {+ C6 d( S( T5 d
  689.         DeleteDC(hdctar);2 m& h' M: g: J8 z7 N) H+ R9 [
  690.         DeleteDC(hdcsrc);; S7 a" z9 ~' j, z) s( i% g* q
  691.         DeleteDC(hdcorg);
    / q1 y& _( E2 Z8 x
  692.       }
    . K* Q4 m/ x% [  s  B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);7 i, m& ]- T; w) x
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' ^; L. [. e; u% q. `, z  J; C! n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");) ^* D$ z6 L# a; f8 v
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    , {8 H! D, @. F/ g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( O! O5 k7 l' L& |
  698.       if(!Dn.Connected())
    ( U1 y6 g& D3 f- F: R9 G
  699.       {" D) T$ _- c1 a
  700.         dwTotalFiles=1;
    1 Z5 P; N# C* o" f2 z, x3 |
  701.         dwDownLoaded=0;
    5 V2 R) w5 |3 E! c1 v1 F6 V
  702.         bSilentStep=TRUE;. n% H* ]3 W. B
  703.         bCompressed=FALSE;: d% v0 h) k: q; _
  704.         strExtLocal.Empty();+ Q8 E1 f0 q6 r2 Z8 l6 Z
  705.         strFullName="readme.txt";7 R  `0 D" C/ G) O7 s
  706.         dwProgramState=AP_CONNECT;
    # H+ f; \7 a, F8 r' s8 P
  707.       }) M) v7 u. s: x+ T' h  C* @5 F6 [
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    : [8 ]9 O) |$ y- U8 m
  709.       dwStartUpSteps=2;
      _3 o4 ?2 ~/ T5 [0 @
  710.       break;
    / u- {9 R$ M! q: G2 \
  711.     case 2:0 p2 z" [3 G# w0 B
  712.       {3 r: @$ u; d6 j! i$ x" ?' G
  713.         int iEOF;
    + n, u. J1 b* Y3 W
  714.         FILE *fp;
    7 R8 z" P. h& |
  715.         char szString[512];
    4 d% I# c9 {% s/ g: ~4 l
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    9 k/ M: V% x/ b" j2 F( {- j' O4 ?
  717.         if(fp)4 F, e; o5 ]7 n9 [/ a$ ]9 J
  718.         {' q0 ~* G! \4 W( t( x+ x9 U; y
  719.           do
    ( d4 k+ u- g4 A# j! ]* t
  720.           {3 ^. A& P6 G+ |  I5 W' G
  721.             iEOF=fscanf(fp,"%s",szString);3 X$ ~) b! Z, w6 V& p# ]3 S5 \9 c
  722.             if(strlen(szString))
    0 s) h$ |& N1 a6 ~% Q; X# ~
  723.             {2 i1 L* V9 @# M! M1 q% v- Q0 a4 N
  724.               if(bFirstChar)) C4 d. {  w3 `4 V. K. O
  725.               {4 B# h' j1 s' }% o
  726.                 bFirstChar=FALSE;
    & K! O# B0 t* X- |' I. B, e% U
  727.                 bConnectIsBig5=FALSE;, B3 k* T/ \; u
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;7 M- |& p5 h( T1 R
  729.               }
    + Z% C/ S. k% u: W! e  x2 |
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    2 m1 p) l" o! n2 B
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
      I7 j. @* e1 S7 C) O0 w: D# O
  732.               dlg->m_ListText.AddString(szString);
    ; C, m- m9 i( ~* J  X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  l( M, g9 I* N  J% M& Z5 O
  734.               *szString=0;
    3 b+ y1 }" |1 Q+ ~9 m6 T
  735.             }
    % K6 ]" s5 p* Y" e7 ^* ~
  736.           } while(iEOF!=EOF);. B' q- Z3 S% l8 u( C% C
  737.           fclose(fp);2 l/ c$ ^( S% G  q0 d% b4 a( O
  738.           unlink(".\\DownLoad\\readme.txt");
    , C7 t4 I3 Z) L5 `8 P) ^
  739.           dwStartUpSteps=3;
    - ?# F4 C" d2 X( L  \
  740.         }. X+ K2 U" F& x" u! G
  741.       }
    0 ^8 N0 I# W! Q4 r0 h2 W- I, _
  742.       break;! z7 W3 ]5 a' l& `
  743.     case 3:
    6 M; N. D; l: @# v7 b: F6 w5 j" [
  744.       if(!Dn.Connected())
    $ i, s4 {7 j' {; t0 [: _: g
  745.       {
      p4 e( V) ~/ F
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    3 k: t2 @; e: p; _/ e. E# L4 X
  747.         dwTotalFiles=1;
    7 p% F8 n4 u1 `8 Q4 }" b% G
  748.         dwDownLoaded=0;
    : m( [3 t( C# W7 U+ }* p
  749.         bSilentStep=TRUE;
    ' |% o5 u+ ?$ q, B  c- t. f: Z
  750.         bCompressed=FALSE;
    9 p& B1 P# i/ X8 Q. ?
  751.         strExtLocal.Empty();  Y5 h2 Q, Z: ^- D5 q/ z# P
  752.         strFullName="checkversion.txt";
    ) }0 {4 }& q' V: h
  753.         dwProgramState=AP_CONNECT;
    6 N# n" [- d5 y2 f: _6 f7 B
  754.       }/ A4 Y5 s. [1 c3 @# x
  755.       dwStartUpSteps=4;( n0 G9 j9 ^3 Z2 d# S+ r
  756.       break;
      g1 D8 ?! J7 z+ n. Q) P+ R5 [
  757.     case 4:
    6 k, P3 o2 I0 g+ _+ y& H" E
  758.       {
    3 f' s, Q0 @- Z
  759.         FILE *fp;9 A9 M* `0 \  S: q9 L& G
  760.         char szString1[128];
    5 j/ S6 W0 q2 q2 q$ |
  761.         char szString2[128];
    8 j4 V0 e1 v( o: r4 F
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
      u2 e  S7 d! k; T# W& C. S
  763.         if(fp)
    , H* x5 G; E& E! u# X
  764.         {
    2 W$ W; u/ X  H( ^. a
  765.           fscanf(fp,"%s",szString1);
    % q+ y# J& v. a# B$ s. p0 E6 t# B
  766.           fclose(fp);( {- Z* w+ O/ [. h5 q( p1 C5 X
  767.           fCheckVersion=atof(szString1);
    2 I& h, P: p, t$ S
  768.           fp=fopen(".\\checkversion.dat","r");  l- _4 c) }6 x( y8 M: b7 X$ @
  769.           if(fp)1 |: e8 Z$ }& P/ }6 W$ n
  770.           {
    * t: I. i0 I6 z7 v7 m+ j
  771.             fscanf(fp,"%s",szString2);8 ]- r/ p' P& v9 ?: k. R
  772.             fclose(fp);
    7 w* D0 _( ?% A5 R6 I8 {  B9 H; _
  773.             if(atof(szString1)!=atof(szString2))# O7 y5 D- l) u, y
  774.             {2 M  h$ T4 \$ ^8 j
  775.               if(!Dn.Connected())6 s$ y- A: t. Y8 Z9 E3 }
  776.               {
    7 B: f' s! G7 f
  777.                 bFirstUpdate=TRUE;5 E3 Q2 Z& k% d% ]: n
  778.                 dwTotalFiles=1;
    , |: t, Q9 p, w* Y; \* n
  779.                 dwDownLoaded=0;! n8 g7 A& L3 [# R$ e% _" C" M
  780.                 bSilentStep=FALSE;
    # k/ d4 i( C6 P
  781.                 bCompressed=TRUE;
    7 l( \2 X/ @2 h% r5 w/ q
  782.                 strExtLocal=".\\DownLoad\";' o2 X- C8 S7 @8 q, Y  W) G3 B
  783.                 strFullName="update.txt";( S) j1 N7 m6 w2 z) l
  784.                 dwProgramState=AP_CONNECT;  }5 w  F+ C; A3 |+ V8 o
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");8 m- n1 n% ]4 f, J1 B! _" z" ?; e$ e, B
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( c1 m& K$ j7 G4 S( D
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 {5 K; J: Y3 I
  788. ! O% \8 b8 g& T9 u
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& L( b% @5 c- N9 X
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    9 l5 \. R9 P: A, i% D/ U  _
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' D; D3 @" k( Y
  792.                 {
    " E6 Z1 z; o' K' X7 C8 b
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    $ _4 |8 e4 m4 J, i+ {4 G7 c
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");1 J1 W  K; o, r, m5 y. l5 R
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    , o, e3 P, V+ p7 ]
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# A) U/ u1 ^+ T: t, z1 M; e' B
  797. 5 `+ B; @7 A0 A1 s1 }
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / S* U  C! F8 o  |# X6 ?
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");( C+ A! O" d  E0 }
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! ?: {- T3 I& S1 x$ u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      V* S3 C. V! _3 K* u) E
  802.                 }: x4 q2 y' t3 j. Q, ?
  803.                 dwStartUpSteps=5;% Y% j) d8 i# j% v& M8 h) O
  804.               }
    " J5 l% w0 g1 }0 ~
  805.             }
    1 ?: e& S$ T9 c: Q- I8 m" O' I. x
  806.             else
    ! ~; m/ ~& C' J; `( p9 ?- r
  807.             {2 {+ p7 s$ q0 c$ @( {% U
  808.               unlink(".\\DownLoad\\checkversion.txt");! Q5 p( O$ S8 z4 l& x  w$ |
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : L% B7 i, |5 G! c5 l; |8 x, C
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# J3 W* K2 I+ v" ]
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ) Q- @- }) L; e
  812. : R! G9 H+ E( t9 @
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 y$ j& w! G) `5 M
  814.               dwStartUpSteps=99;8 p" m; e; m# x" w0 b
  815.               bFinishUpdated=TRUE;
    : Z  \8 i, U. O3 C/ {% G5 B- h0 l$ S
  816.               bCanUpdate=TRUE;
    + M0 ~9 F. r% i$ i  T7 N
  817.             }' o; }+ M0 {6 H3 R
  818.           }; [  M" Z1 B! r' W$ v
  819.           else- x! u# c! A9 K: a
  820.           {
    : r2 H# Y  b2 [3 d  R8 m
  821.             if(!Dn.Connected())% @7 v  ^- a. ~* F
  822.             {
    & ]7 u( f8 L, V% [$ F
  823.               bFirstUpdate=TRUE;
    + V$ g; X  i  B
  824.               dwTotalFiles=1;
    , b8 o' y, r7 A9 G5 W% _
  825.               dwDownLoaded=0;
    5 O$ j- D2 T" z# q5 {# k1 K
  826.               bSilentStep=FALSE;
    . E2 K. j9 p6 o& p, U% f; \
  827.               bCompressed=TRUE;% P! C" U. ^( S; }2 a' O, b1 i
  828.               strExtLocal=".\\DownLoad\";. f! T1 \' a; ]8 b8 V
  829.               strFullName="update.txt";) h* O' ^' q: y2 S& |% @
  830.               dwProgramState=AP_CONNECT;7 e- f! N3 B7 ^$ j( Y
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 O2 ~3 t3 ?: ?
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( C" H9 {& Q* m" e" ~1 Q
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");* N( {. G/ i/ Q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 @$ U' G- `9 @+ B/ L9 d% X
  835.               unlink(".\\DownLoad\\checkversion.txt");
    8 m# G& Q6 N7 t! M
  836.               if(GetFileAttributes("Wsa.zip" )!=-1): t8 V$ S$ G; U' O& _/ N& _" B' B
  837.               {
    . Y  T6 V* @1 r6 y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    5 y/ t8 `$ y( k# [+ Q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");' Q) g3 s1 e" b* {3 b' u
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    0 _: v. l# J! _  r1 @: f8 ?
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) B, g: u5 `  E: p
  842.                
    1 x) ^$ T1 J$ b7 U9 J# b
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");& Z- o* \9 T( V! z, Q- {! X* `3 \
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . V* U) |" m$ P) J! h3 Z3 R
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    - I) O( O* E4 Z5 t
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. P4 L# ^6 W7 X$ Q/ c
  847.               }( E- Y  q9 ~" y0 y
  848.               dwStartUpSteps=5;
    ' d- r6 H2 ~1 V+ r. l# @9 Z1 }* C
  849.             }# u' r# [) @- }5 V* P  \; l0 F
  850.           }
    0 {3 T) b9 X* Q6 v9 d
  851.         }
      ?7 X3 D' w5 @& i. O
  852.         else
    9 O+ w" V6 m3 R$ Y- l3 Y
  853.         {" s5 w7 K" ]4 `( K8 \6 N1 W: L
  854.           dwStartUpSteps=3;
    * T4 k& G/ k9 N$ o# c1 o
  855.         }7 N5 Y, `/ {6 [: h: }
  856.       }
    1 b$ B& l- a2 |, ^& I4 Z7 ?
  857.       break;: D: v; o. Z* x! D. Z% L9 j' ?
  858.     case 5:' P5 I1 v; w- ^
  859.       {5 ^+ G6 i/ N. K9 l" w/ Q
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ' V- N1 V7 ^/ J6 l  x
  861.         {7 ?8 ^0 K8 g, q1 V4 w% A
  862.           int opt_overwrite=1;
    % W1 l  Z9 @$ i  I; H+ Y5 a
  863.           int opt_do_extract_withoutpath=0;" Z6 L: s  F% t7 v5 e1 t0 F( }) r
  864.           unzFile uf=NULL;
    ! m# Z6 I+ I8 H2 j$ r+ r

  865. 9 Y3 S# y& f: A( x8 Z
  866.           uf=unzOpen("Wsa.zip");$ j: b' S+ Q% F9 s: S
  867.           if(uf). ?1 c- r! m1 H* {" n: }
  868.           {$ f9 ^/ E( Y6 H  _; @( L( t
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);) U& R: p3 i9 U" S
  870.             unzClose(uf);
    $ T6 W9 c6 H2 C: n7 H
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");( O/ s3 N+ P! |8 B. \" P: e
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");8 q4 ]4 m4 T7 E5 z3 M" m+ k+ b
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");$ [" U- S  r& K. H1 E' E# N
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 l9 w: c6 W: `" ~" V
  875.           }9 P; w: c- p3 X6 M5 d
  876.           DeleteFile("Wsa.zip" );: q; A, @3 i4 f' k* i8 e
  877.         }
    # u+ h8 _- u' M
  878. 0 @6 O! O$ U) Y3 l
  879.         if(CheckLocalVersion())' |$ w6 T6 x; v. b  `, a2 J
  880.         {
    % P5 ~$ }# J4 e6 g6 M
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");* p- J& _3 h0 k7 b9 y3 @
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    . R# U, T: C1 J$ n1 ?: J0 a4 D( B
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    9 Y( A) D/ i' P" w. H, Y( h3 a- M4 K/ ~
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 _8 m; I  ]( W
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);: C7 {: z( O2 ?9 b
  886.           dwStartUpSteps=99;& f' R# X6 Q; c
  887.         }
    4 ^5 O2 c2 m, D
  888.         else
    2 Z* j, m' k2 ~6 x8 p( t
  889.         {, [' I9 {0 `$ T  u+ }7 v
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ u6 g; z0 X" x1 `" w/ D
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    0 b) h& c# ?- J& r) c
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    & Z, U, Z6 O3 _, Q

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

/ n( _# |6 ~2 A# _
7 p0 g2 q4 U! a

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

寂寞在_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客服返回頂部