CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
0 r* L4 n# R5 S
  1. / RevApp.cpp : Defines the class behaviors for the application.
    2 S5 O0 w$ a- l+ P
  2. //3 o% V2 b  e6 r$ w' X
  3. ! ]! v3 j' U2 L; W6 x
  4. #include "stdafx.h"6 ~9 Z* h! q/ _/ K3 s" C

  5. 1 c* ?; ~0 P! [0 z8 @# b
  6. //#define UNICODE: |' }$ S( B) z# l; a4 j
  7. //#include <gdiplus.h>1 S0 T/ ^3 R1 F8 }6 Y3 d; ]+ c# F
  8. //using namespace Gdiplus;9 m& d$ D* e+ v) f- {6 k' ?
  9. ! s% y+ w  g( [( I7 p+ T# q
  10. #include "RevApp.h"
    2 x) ^8 @' ^( I( ^- l$ v
  11. #include "RevAppDlg.h": w- p1 s. j2 e; N6 K/ ]

  12. 2 y0 J0 n, J, Z4 E- y. K
  13. #pragma warning(disable:4786)
    0 M+ {& d: k! j- q4 ]
  14. #include <map>
    6 D" l) e& x+ k( Q
  15. #include <list>& k9 O( N* ?( f. s- ]) a; y
  16. #include <direct.h>
    ( g, a1 I! F  A8 l' q/ B8 W

  17. ) U  K0 P$ o" d& {; R. R
  18. #ifdef _DEBUG; l- b9 u6 k% }3 L4 h
  19. #define new DEBUG_NEW- G9 C* [$ ]  {5 A. N4 j' ]: `
  20. #undef THIS_FILE
    2 p! T1 q+ O9 Z. a1 f
  21. static char THIS_FILE[] = __FILE__;
    8 j2 y# L* [: G/ u( L4 G" R/ K
  22. #endif3 u' J9 C7 X2 h9 b
  23. #include "SkinResDef.h"- s$ b7 t$ ]+ k$ N4 I1 g5 ?7 Z
  24. #include "ChangeBG.h"! I  v. ?3 H' v3 s- o' v/ z+ O  g1 d
  25. #include "AFXINET.H"2 Y; N' N% V0 r8 Q# Z+ r

  26. # f# r8 m8 X9 V7 X, p  e
  27. #define TRADITIONAL_CHINESE 0* I9 p6 M: h  `; j8 Y
  28. #define SIMPLIFY_CHINESE 1
    ) G0 b- q- Q$ |7 j, P- F: w; {8 P
  29. #define ENGLISH 2
    : p8 u' {& Y2 @0 Q; x+ ?
  30. int m_iLanguage = ENGLISH;
    ; g+ `6 K& V6 z) G
  31. /////////////////////////////////////////////////////////////////////////////6 Z4 W. S, t, V0 O* c
  32. // CRevAppApp, ~# u1 L; K6 W5 ^' ?
  33. ( D5 T# H" X! Z8 B* h( o) P
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    : Q2 s6 s- M) F. A+ K
  35.         //{{AFX_MSG_MAP(CRevAppApp)( m$ [" ^% g5 C; [  Y% C  h
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    : a3 S( |$ ?: K5 ]/ s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!0 [" W6 v) {: E; o
  38.         //}}AFX_MSG# L' ^. _% }& N7 [
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    6 h7 ?8 L* o( D; p5 V( d$ ?
  40. END_MESSAGE_MAP(). I8 V, Z6 i3 a

  41. + G1 m8 s5 n" e* n
  42. /////////////////////////////////////////////////////////////////////////////
    ( I- i8 t6 F: g$ l- R. u# w
  43. // CRevAppApp construction" ]; N7 s7 P" S3 Y) X# C  o# X

  44. 7 g( P8 a) t: w9 S  o: s. T
  45. CRevAppApp::CRevAppApp()8 S' x- P9 y4 F% G0 S
  46. {; o' f" r& E  c4 Y
  47.         // TODO: add construction code here,
    ( M5 F: s& ]: E) e
  48.         // Place all significant initialization in InitInstance
    * t; \* L: [7 w, I6 R# Q) Y. w
  49.   bDisplayIsBig5=FALSE;- |& K) `, _! O! p% L' \1 Z3 @
  50.   bRestartUpdater=FALSE;5 _6 {: y) b, f- o- E
  51.   bFinishUpdated=FALSE;5 }9 s/ Q( ^) N) E# T  @0 \
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;4 \/ ~' L0 X3 y0 p! |  e- ^
  53.   InitChangeDataBig52GBKS();  T! G9 B3 n9 f. C. ^% _
  54.   InitChangeDataGBKS2Big5();! g- x- P4 F1 E1 Y1 _1 T  ]  D( u
  55.         //
    2 t/ U  F  z! p) p* y/ Z
  56.         bClickRunExe = FALSE;
    0 l9 |7 R! O5 v
  57.         //
    " ]" q6 x- P! X: j
  58. }  O' X, a; w" v% U- V

  59. 2 H4 O3 D# S' u( R
  60. CRevAppApp::~CRevAppApp()6 o" \  {* S; y7 n$ B
  61. {1 [6 @/ {$ r9 o" W( ]
  62.         // TODO: add construction code here,' j' b1 `/ a) j6 X4 S* h$ W# K
  63.         // Place all significant initialization in InitInstance
    7 A' K7 Z9 [: ^
  64.   EndChangeData();
    5 \* U* r5 k* b; R
  65. }& n2 e2 {0 Z( W3 e+ w7 A& b

  66. & q; `8 E& w6 P* J: P
  67. /////////////////////////////////////////////////////////////////////////////; x' [# B2 U+ I) Z3 e- |
  68. // The one and only CRevAppApp object7 \: `' T& Y1 v0 @

  69. ; q: b8 {( X& O3 e- `
  70. CRevAppApp theApp;# t1 L. |7 Z( H" t7 e
  71. , W  r' F) k& W: E( @( a* f- N
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)% O$ A+ g! R3 L
  73. {  e1 ?5 ?. d- Q, q
  74.   int iEOF=0;
    2 |% g. ?$ x0 K4 v9 ?' {& b+ ~" u
  75.   char szTempName[MAX_PATH];1 J, e) c% X4 x2 P% M( W+ c
  76.   *szFileName=0;$ d7 g4 z% k! t  Y& Z+ v# [. x
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ; @& L: g3 Z3 ~
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    * ^* O) d* h  R
  79.   {
    - W; _! W3 y( o% Z5 T4 W& {8 l) u
  80.     strcpy(szFileName,&szTempName[1]);1 m! Y3 r' Y7 E* {. A; b" n
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ) u8 w& L, k8 C6 [. Y  r, l( [
  82.     {
    " r5 `+ U% E  u5 b% W
  83.       iEOF=fscanf(fp,"%s",szTempName);; r/ h/ E& ]* [& i* Z( ]
  84.       strcat(szFileName," ");0 N) H: [% C: h# U; }2 q: B
  85.       strcat(szFileName,szTempName);! U; N- e. R7 [) Z
  86.     }
    , V5 l9 u( e% A9 s
  87.     if(strlen(szFileName)>=1)
    , [9 G) R, Z- ^* E$ n+ J
  88.     {- y6 {3 K$ V8 o6 E: N9 V' ?
  89.       szFileName[strlen(szFileName)-1]=0;
    ' K" _& q! h/ L  r
  90.     }6 }4 C! V6 _6 t5 \" \: b
  91.   }
    ! K+ b# [$ l! ^* u
  92.   return szFileName;
    ! @, T# J3 u/ ^) q2 {
  93. }
      F1 x$ @% r$ f4 k6 W( s$ v
  94. + M' {; `+ R# \- E3 L
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)5 o, s: r( p; D* |' ]
  96. {
    ! M, p  |! A( k% U9 `
  97.   FILE *fp;
    # z: q% O/ Q( B1 \4 E$ P/ e
  98.   char *key=NULL;6 q" t) [  Q- m$ B+ `5 U0 j7 O
  99.   char version[MAX_PATH];# s) a7 Y8 g5 m
  100.   LPUPDATEFILE file,olds;
    . Z, _/ R4 h3 [7 X1 z& D( ?+ b0 f
  101.   std::map<CString,LPUPDATEFILE>::iterator p;# G5 h: X% J, @5 j- {/ e( U! |8 ?

  102. : M8 a& b' S+ m: n  I  l. z
  103.   UpdateList.clear();% J1 n' b* P6 \& \9 R! p
  104.   UpdateFile.clear();4 @, P  _, J* A. R+ |4 J
  105.   if(GetFileAttributes(filename)==-1) return false;# }4 S, ~' W6 W& u1 T# s" z! n
  106.   if(!(fp=fopen(filename,"r"))) return false;
    0 p  y" R/ S  ^( N5 z2 U& h
  107.   fscanf(fp,"%s",version);9 n" q: h, L6 p7 S. v
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }) f( |, H% A* g( r
  109.   while(fscanf(fp,"%s",version)!=EOF): j: H* D1 H  j- `
  110.   {# ]; d+ [3 P2 K' `
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& q$ A+ t3 O, }1 Z$ [0 c7 k
  112.     fscanf(fp,"%s",file->path);
    ' G0 k% n9 F8 O0 t3 \
  113.     ReadFileNames(fp,file->file);
    0 d' R4 Z% H8 f. l+ J" U# C
  114.     strcpy(file->full,".");
    " k. R" U1 ]/ K; A' ^
  115.     strcat(file->full,file->path);
    : y0 a' ]9 |$ q/ z2 k  v! z/ y% p
  116.     strcat(file->full,file->file);* J8 r% U4 v7 K8 I- e" {- q( @& }2 K
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
      r& B; F- |& m* D; n) P# s# t# ]
  118.     {
    : T5 v# k, }0 K6 |/ V
  119.       file->vers=(float)atof(version);
    4 M5 `' O) k; p# o
  120.       UpdateList.push_back(file->full);
    ( i  j  Z+ R2 b: J6 _2 m
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));$ A: g4 G/ ?, e: [5 H2 q( j
  122.     }
      P7 X2 J: n4 B4 v' V; P
  123.     else
    2 l$ T: c: }2 W  S/ W, A9 U
  124.     {' C' |! w: c, q
  125.       olds=(*p).second;5 M3 t3 _+ O1 `1 M
  126.       if(olds->vers<(float)atof(version))
    " Y/ h! R2 D5 F( ~- I! U
  127.       {
    / k$ D/ j& w9 u2 X
  128.         olds->vers=(float)atof(version);7 H& j& z. o/ j1 _- b
  129.       }) ]' V% Z$ u9 P2 X. w: Q
  130.       free(file);# G+ l6 I  o# g
  131.     }
    * [8 g, ]% F, f
  132.   }0 _$ |# F" y- c6 w$ S
  133.   fclose(fp);
    + \& ?5 n8 Z& u) C! I
  134.   return true;
    6 Y. y! T* ^4 X' T7 c
  135. }
    ; j0 X9 H4 X0 s) `3 Z6 n

  136. : l) d* l0 L" Z4 v& V
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    . X- x% Q9 |5 v. u( t, p* E
  138. {
    0 b0 x1 D9 s) B3 ]# a
  139.   TCHAR  szFull[MAX_PATH];7 ~6 u  U0 R. |+ R
  140.   TCHAR *token,*inter;& U2 J+ x* Y3 o0 n; ~, t
  141.   *szPath=0;
    9 p7 C# Z0 V+ N6 y
  142.   strcpy(szFull,szFullPath);
    " h/ N+ P, z! y- \& N
  143.   token=strtok(szFull,"\\/");
    2 p+ j" w: X: i. A# @
  144.   inter=token;! a+ e0 C- a0 C" A; L9 n
  145.   while(token=strtok(NULL,"\\/"))
    ( b8 H) w% u2 Z2 [
  146.   {
    , ?4 B7 h/ q* b& w; R
  147.     strcat(szPath,inter);
    2 P+ P, d' N1 V- @  K
  148.     strcat(szPath,"\");
      h. C# U6 ^3 U) U0 s8 Y& {6 z* h
  149.     inter=token;6 m* ?# @7 N4 r7 k4 X- n
  150.   }
    0 ^' q0 s+ H3 k  S: K
  151.   return strlen(szPath);9 n. {3 a& y' X; b, ~/ d
  152. }
    # b: e4 g3 q4 ~

  153. 9 q& L4 o- w9 a8 D% \
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
      i) v. ~* f) e# L4 D
  155. {+ n, r; O* [$ e# o
  156.   DWORD attrib=GetFileAttributes(Target);
    1 j8 i8 |" J/ j2 \9 G
  157.   if(attrib!=-1)  W! q/ S3 D+ x5 S) G$ I  l6 m; ^7 R
  158.   {; Z4 }) d9 ^" F; ?4 P; o. {' u
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    & F0 h; a4 }; k. Q' K
  160.     {
    8 ?6 j  I6 f4 d! ~
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ; E7 ?4 m4 l0 f8 r) G# }( k/ b
  162.       SetFileAttributes(Target,attrib);: ^3 x" S7 g% }/ d
  163.     }
    8 e8 t" L) d/ T4 Z$ r! s. ]
  164.   }& t+ R* `( G9 f; ~
  165.   CopyFile(Source,Target,Erase);4 H) S6 i: c9 Y! u2 J
  166. }3 F/ a' C: t! _- Z0 h6 x1 s% s
  167. 0 j6 V$ P  ^  ?. S4 H. W
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)3 t1 V, s. z* q/ d9 o! e; v& S
  169. {0 h* C, t3 C% ^  y* E
  170.      FILE *fp;. h5 h+ p$ K& H( {( J' ]
  171.      char  szBuffer[8192];9 f9 N9 q) b; t9 q# A+ r+ h
  172.   va_list  argptr;
    0 r  b" i. _: P/ Q- I* G
  173. - }! |, ?  T, h  ?$ t! _
  174.         va_start(argptr,message);7 p+ q9 J1 h, I  K
  175.         vsprintf(szBuffer,message,argptr);
    ' t& u$ S' n2 ]+ ]
  176.         va_end(argptr);& q- `$ `2 U& V- R5 a5 c
  177.   fp=fopen(FileName,"a");, g; b, z& V; u3 o# l. b. ]7 o
  178.   if(fp)
    % B3 A3 @. f$ O+ I9 l# m  t# ]
  179.   {
    6 ?' f2 u# Z+ y1 c$ D- U. y
  180.     fprintf(fp,szBuffer);. d7 W* f6 S; U$ o! N. n
  181.     fclose(fp);
    5 F; i; k, e3 J" r- x
  182.           _flushall();
    ; h7 |: @5 P- o
  183.   }
    * Q: C# a, `) B( A# P
  184. }
    & p+ L+ s$ q3 O5 I
  185. - `. `. {7 W$ @2 j5 k8 U
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    , f1 K, u: A- O
  187. {4 p5 R8 ?; |5 N; R2 U5 ^
  188.      FILE *fp;
    & B# K7 S, S0 a, M) A, C! q0 T
  189.     DWORD  attrib;9 Y9 s: k/ W+ e/ j+ p% h+ u
  190.   attrib=GetFileAttributes(FileName);( j; j( ~  U: Y7 A  A$ F4 F! |
  191.   if(attrib!=-1)
    5 d$ d, U1 w7 A" K
  192.   {( \0 [2 q/ G! F, Z+ W/ i; z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);" S/ r: `5 Z* f2 q
  194.     if(!SetFileAttributes(FileName,attrib))7 g8 V% w, `. K, S1 I
  195.     {
    . M1 r, k8 t& I5 M6 @
  196.       return FALSE;
    . r) {/ f4 Q/ d- _; x
  197.     }
    : B/ n9 U7 g6 _) W# {
  198.   }
    1 _# X9 Q2 q9 Q9 u3 {
  199.   fp=fopen(FileName,"wb");
    5 P5 y4 d! V  r& A& a+ H# d
  200.   if(fp)' t# s% }% Z; Y
  201.   {
    " _& O1 r5 }  j! P* |- c% L
  202.     fclose(fp);
    5 t4 Y5 v3 Q, O3 u9 w# m; T+ P
  203.   }
    3 |  b) M) j+ i$ G; u
  204.   return TRUE;" f2 B5 j' e6 c. h  }3 U6 x( m; S
  205. }' J) A( w8 ^) Q

  206. * t9 ]7 ~) L% d' u
  207. BOOL CRevAppApp::UpdateLocalVersion(void)/ v& ^/ m$ b: d4 \$ Y: b! H
  208. {  w6 d& N/ s# b
  209.   char filename[MAX_PATH];
    , C! c1 t% o) r' p1 L) L
  210.   LPUPDATEFILE file,olds;: s% r% K- K* ?; P3 A
  211.   std::map<int,CString>::iterator i;  |, F0 y& z  o8 K+ I% S& {
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 F3 x' t' U0 d. a$ l1 g! A& ~5 v
  213.   std::list<CString>::iterator l;
    # `1 u! Y/ D& h! i4 b8 k

  214. : X, Q- O$ x3 t9 W- ]( o) k
  215.   if(bFirstUpdate)
    , L5 L" D* x$ d2 a
  216.   {
    ( d4 L- b: Q" F3 |6 G& `
  217.     dwCurrFile=0;
    6 g9 Y3 K, E* K4 @1 X8 ^
  218.     bFirstUpdate=FALSE;
    $ e5 R3 j  V" [& F+ l8 e/ V! v
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / w0 k4 u' A* x' I. G# S
  220.     {( w0 E) y( [% H, [* L5 M5 E
  221.       dwTotalFiles=UpdateLocal.size();) N3 g4 ~4 M; g# U; s2 _
  222.       dwDownLoaded=0;3 ^/ F8 w2 u0 T% u$ I- q9 f+ w( \
  223.       bSilentStep=FALSE;
    0 `2 n, h( z4 `0 d
  224.       bCompressed=TRUE;+ O, t3 M3 M& Q- m( P- n( U: e; O$ p$ ^
  225.       strExtLocal.Empty();
    3 D2 ]% R" k4 W4 [8 W1 b
  226.       strFullName=(*i).second;$ O- E$ O% L& n& i) i# p# l
  227.       dwProgramState=AP_CONNECT;4 _- g/ K8 T( W0 p8 a, @
  228.       return TRUE;
    ; ]7 s) w! p' \
  229.     }" X& U4 i. T0 X
  230.   }( h$ d3 X& J4 B) d$ h% B! O
  231.   else if(bRestartUpdater==FALSE), c* q4 s# I- `& a% R
  232.   {
    . Z, x- V1 C0 K. q! z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())6 E; A5 l( T4 Y0 _' p0 c
  234.     {
    % A7 U7 l  A+ L2 \1 q5 r. Z6 h  W
  235.       file=(*p).second;
    3 a, c0 l( k, k' J/ a  v& f' u! Y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())* K' ]; `5 N. Z0 o; w
  237.       {" T9 i+ M8 O( ]) ~+ g1 _/ R  d2 Q
  238.         olds=(*p).second;
    2 U; q9 X- `8 Q
  239.         olds->vers=file->vers;
    $ N7 k# i% }' @
  240.       }
    5 q+ m' Y. u$ R* w
  241.       else- K8 X  S, N- B" Q8 ?2 B
  242.       {
    ; F4 U6 a7 Y: Y, A3 [  v+ g
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 x6 U7 y; a3 P' x! G
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    6 G# Z" x, @5 m" t: P0 D( x. A; \
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    / f1 Y0 |5 H3 y5 D; R$ N5 a: g% n( u
  246.       }4 E. j2 v  Y5 y$ ?/ V0 r5 K7 y3 }
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");+ r5 L! Y, b1 H8 W' a" Q
  248.       sprintf(filename,"(%s)",file->file);5 S2 k7 Z  t+ S* c' V
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " Q5 a9 a' X) b
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }. f) G& T# b  K
  251.     }( Z, ^2 I3 ^1 ^, k5 T' K
  252.     dwCurrFile++;
    / e" y& L" \1 w; P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 W: L% Z" `% p1 \% f3 w
  254.     {
    - b- f$ e; E% ^
  255.       bSilentStep=FALSE;7 p, w# Y$ Z8 t" `. ~) Y
  256.       bCompressed=TRUE;! S1 U, A2 Q) K3 l
  257.       strExtLocal.Empty();- |. b! l1 S5 v* j6 @
  258.       strFullName=(*i).second;
    3 \4 O8 B# F* ]5 {4 u+ @- u& `
  259.       dwProgramState=AP_CONNECT;1 {5 D# C1 r8 k$ B3 X
  260.       return TRUE;
    * v( d# o1 ]9 T, q: g+ q" ?( D
  261.     }
    . S: v2 c$ G& a" d8 N) u
  262.     if(!bRestartUpdater)* q  z, d& x2 l2 [5 u. P
  263.     {
    ) I7 F  y& J8 J9 D
  264.       int iCurrSize,iFileSize;+ {. X2 `) @6 C( K
  265.       iCurrSize=0;6 y' N4 P" s1 [
  266.       iFileSize=UpdateList2.size();0 ?2 ^9 O4 N3 O! q, Y3 b2 T" f$ `
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    3 t; o6 N- z) o; `
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");: j4 z  K. h: T: d* |3 ^0 J' e) k! W1 K
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
      T0 K- \' O0 Y- C7 f1 O- ?
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" U3 J# M# ^' I' t- k) T
  271.       Fclearf(".\\update.dat");
      q4 r# A2 u& D4 C. o8 A
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    : K1 D% Z* O. B( c, L" S% W
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . d5 q) n# O  N1 i; ]8 A" D& C( ?& o
  274.       {
    & `: g& ^% ]2 f! W) }, D
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())' _% [" t* Y1 O9 Z5 P; w
  276.         {
    5 u% l% E' I3 L  e6 w
  277.           file=(*p).second;
    # p, ^0 l, [% c& O* H" H
  278.           sprintf(filename,"(%s)",file->file);
    6 u% W; A& @1 @8 Y- I
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # e4 G$ I9 `2 B5 f7 J% r
  280.           iCurrSize++;& ~; e( |4 S5 @4 u7 o
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    4 c9 p8 s3 X5 L; s3 _* w" `
  282.         }
    9 M8 b( m( _2 |
  283.       }+ o+ f7 Y9 @2 s0 D0 S' k
  284.       unlink(".\\update.txt");
    " |' q: c6 S; ], A
  285.       unlink(".\\update.tmp");
    8 s6 l' r5 {% z7 H" I1 ?
  286.       Fclearf(".\\checkversion.dat");5 l" T/ |0 J* N* G$ V9 a
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);- n5 Y& R- K* b2 R4 K1 {; r
  288.       if(UpdateLocal.size())
    : \* w( b. X' B! N$ ^6 ~7 Y
  289.       {
    5 h8 Q' Z. r; E! U# o* T
  290.         UpdateLocal.clear();0 r8 S+ U- a5 D& l; Q! N% x, M
  291.       }. V5 a: [4 o1 J2 j* ]8 Q+ A
  292.       if(UpdateFile3.size())  J! o2 o! o; N" X2 D
  293.       {
    3 ~5 R9 d5 n" P
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , n3 j% S9 L, p5 j# B( i
  295.         {  n) M) g& D. _. c
  296.           file=(*p).second;
    7 T2 d3 ]$ y' s5 Z9 |( i/ a
  297.           free(file);3 k( d' `$ V8 U
  298.         }
    ; W2 \8 _, M" U2 R
  299.         UpdateFile3.clear();; P4 H' D3 j6 e4 M* r5 Q, _  h
  300.         UpdateList3.clear();
    - U& k9 A" b0 K" I0 C
  301.       }1 E: \' b# |  m4 V$ c
  302.       if(UpdateFile2.size())8 M3 T& ?9 c' S/ X
  303.       {
    6 F7 e% s7 I# n. l% G
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + O- r$ j* r5 t7 ^
  305.         {4 g4 m) @' c6 C) j# [9 _* C& Z
  306.           file=(*p).second;! ^3 B! C+ U7 N& c9 j5 P
  307.           free(file);
    7 S0 O$ f! ?$ _9 x+ u1 E# n& \
  308.         }
    - M% ?( r+ z% I, G: u" @8 b
  309.         UpdateFile2.clear();
    ) \4 ?, @! k( w& T) G1 Q
  310.         UpdateList2.clear();" H3 K0 ?; D0 s0 ]! j- s
  311.       }
    + C( {" X; ]$ x+ M" N
  312.       if(UpdateFile1.size())4 {$ t" S+ U8 `& c
  313.       {
    ( y& [3 c- |! \2 K2 y! i. H
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  P* @+ Z/ P9 J1 V+ L
  315.         {
      j  X) S$ H9 d' G; y
  316.           file=(*p).second;
    0 ^! A; h! x) X: ]' v, _
  317.           free(file);
    3 P, f! X; ~6 _5 M) U
  318.         }' Z* A% E9 l, E" N. x
  319.         UpdateFile1.clear();9 W3 L1 r; I4 v1 n7 b7 O6 j
  320.         UpdateList1.clear();2 R! M. `& k8 E3 h- N# M# m
  321.       }
      K! t  ]1 [. ^7 \
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    $ P7 K& W* c, ]/ D* H  U
  323.     }( y( i) ?  s3 I! A0 B+ N. R0 A) t
  324.   }# j: y7 g2 d8 o4 g. t
  325.   return FALSE;
    5 F* E5 N6 E; g
  326. }
    $ Y. W# o5 B% h# c* C+ }2 }+ g
  327. , C% \( t7 t) x# N. Q5 B4 \
  328. void CRevAppApp::ClearAll(void)
    . B1 P+ x' P$ y
  329. {
    0 {4 S$ N2 I" @! t7 w, U4 Q, J8 V0 b# l
  330.   LPUPDATEFILE file;5 U0 V) w/ q2 S: Z4 x7 R) ]
  331.   std::map<CString,LPUPDATEFILE>::iterator p;0 {; O8 I) q' X7 U( f$ F, p: B

  332. 6 ?4 h7 S9 U% m. t
  333.   if(UpdateLocal.size())
    5 X, _* H+ p, V8 z. [
  334.   {
    * O- N3 m) U+ X1 P6 M4 \2 e
  335.     UpdateLocal.clear();
    4 k9 f9 }+ T, ?& C8 e# U1 Y
  336.   }6 ^, o# G' A7 V$ _( P) r& B
  337.   if(UpdateFile3.size())3 a" Y& b8 s, ?
  338.   {$ l- p9 n/ E& [$ q. W
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 d! m( V2 d8 R1 h/ k5 ?/ X
  340.     {
    8 L* G& A& ]6 a& b4 K  g  b
  341.       file=(*p).second;
      ], n3 C2 d2 n: _4 f
  342.       free(file);
    * P8 w/ E" Q/ f4 y; ?9 o
  343.     }
    4 {4 j6 {# g7 F
  344.     UpdateFile3.clear();9 _' o; X( z$ [! N
  345.     UpdateList3.clear();
    6 J9 D8 J; r: c
  346.   }
    0 G: a9 _0 `% r
  347.   if(UpdateFile2.size())+ I- c# i- E% M2 l6 j3 k3 J
  348.   {
    9 n4 G$ p0 N, M; U- t' I
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' O8 t: D5 Q/ C7 V9 P+ p
  350.     {9 v! g( I& y* M, r! T
  351.       file=(*p).second;  e2 W5 @3 j: d- O* P+ x. D( @
  352.       free(file);5 F. J1 b+ m0 m; H8 ^
  353.     }
    8 |6 v+ W3 `# d+ T
  354.     UpdateFile2.clear();3 D( K5 `. M% `3 W; O3 h/ q2 N9 D
  355.     UpdateList2.clear();2 x: H' L. w+ V- @
  356.   }3 \, N! Z- y6 [- T0 M3 O
  357.   if(UpdateFile1.size())
    & k# c# ~! u1 F6 q) p
  358.   {
    : V. C( C$ z- E; k! A% m. [
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% H: y$ p! O5 u8 E# H$ N
  360.     {+ X$ r) I3 l7 K' Q' Z
  361.       file=(*p).second;/ l& f$ r' V8 U0 m: g
  362.       free(file);
    & K# b; }) w. M( F  B1 w
  363.     }
    / R, w& Z  \( D& a3 U# S4 x4 @/ B
  364.     UpdateFile1.clear();9 x6 @! }" v' Q. \- Z( `! w
  365.     UpdateList1.clear();
    5 u% K" [4 t( [% k: H
  366.   }4 [- k1 W- U9 Y
  367. }  
    % H& ^  s0 f5 A6 V
  368.   
    9 C5 S# l: P7 r$ Z6 `: M
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    * d* n% P) X) L! T2 o% y$ O
  370. {4 f- a3 ]" g7 q4 e2 a
  371.   int c;" c* K/ Y# C& W5 V
  372.   LPUPDATEFILE file1,file2;9 k$ N: y9 `2 P! e4 ^
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    % L9 i( }1 t0 V1 H
  374.   std::list<CString>::iterator l;" g. O# y( t5 c0 H( ?
  375. ) }' `) N1 A+ I, e9 n: A
  376.   UpdateLocal.clear();
    # P5 F$ y0 c' {  I! u2 H
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ' i8 u/ c. S8 v5 t" m
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    . h7 c. J0 G) Y; z* s7 {
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    . e8 y/ e% U9 G: c
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);% e2 A2 U; O( J
  381.   if(UpdateFile3.size())
    * c$ _7 T, }/ q; L
  382.   {( Y- q2 U! G( [9 y8 u( g
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)! U; B. Z$ e' u% [6 B/ [( I5 T4 X
  384.     {
    ) {% _' V, g  L% L
  385.       file2=(LPUPDATEFILE)(*i).second;
    # \$ x: Z! i- o! N2 t# Q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 q, a! `  q& w7 [4 @8 v  J
  387.       {
    1 s2 R' X( N3 e6 U! ]4 M
  388.         file1=(LPUPDATEFILE)(*p).second;
    , o% O3 Y) _: B, G2 \) z
  389.         file1->vers=file2->vers;8 s: M. O; ]2 I; g
  390.       }
    ; Q, B& y7 z0 L; H9 u
  391.       else$ J- g* ^7 K! l- ~; B. M. A7 ?
  392.       {! d: b+ V: D+ N9 E2 ]
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' x! y4 ]' j$ c7 M' D
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));+ H/ J3 ~0 l1 m) p) r" }
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    * J) s9 @5 s+ B* t9 d
  396.       }1 s3 p6 I0 l( W9 L" @& R9 }
  397.     }3 a/ S0 N8 K" T7 J2 J
  398.   }
    4 v0 F. ^( i3 s4 W1 N/ N/ y+ d: |- ^4 Y* g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)' |* B* T6 R3 J  w& h, L$ L& s
  400.   {4 R. A0 a  {* o/ \: Z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    & v" ?, P5 `4 @- l- d( ~0 a- J
  402.     {7 n0 V" ^1 L$ w7 Y, C+ f
  403.       file2=(LPUPDATEFILE)(*i).second;2 z3 E. X+ Z0 d+ X* V1 z
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 Q) y$ A4 v$ {4 s: ?
  405.       {
    1 _  u% b( o4 {* S  Z6 y3 Z
  406.         file1=(LPUPDATEFILE)(*p).second;
    $ k* Y6 |- C1 d1 D% O
  407.         if(file1->vers!=file2->vers)
    7 P5 P0 b3 |9 E# C  f' K: q3 `% k% I
  408.         {9 f( m4 s1 e" o) ^7 t* i- _! t
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" g( i8 C6 w( t2 j, a5 p
  410.           c++;+ _: L3 s: }3 B( v
  411.         }
    $ A/ [5 O$ u8 h+ }+ H
  412.       }
    * e6 J, j% |& A: P7 i+ T! T" [
  413.       else, v0 m5 `, L# [) G+ [6 p2 n
  414.       {( e0 A4 Y' H; I- a3 h
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& c5 X9 N! X# n5 s
  416.         c++;  \, `8 R3 M+ ~/ B  P
  417.       }
    ; M; v! a  d) g; o
  418.     }
    : ]+ L4 R. A8 V/ c
  419.   }
    & C( j* p+ {# I; S( e
  420.   unlink(".\\DownLoad\\update.txt");3 r' P6 }: t& E. q
  421.   if(UpdateLocal.size()) return TRUE;
    $ j* H) V: O1 D
  422.   else                   return FALSE;% l% T" q3 _, [' `$ P
  423. }' O5 U  k) D# V- q1 u
  424. , Z/ Q( L: e+ s& V
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    : r- O, o( g& {* R2 W5 S( c) X
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"# W, I# j- H  Y' b7 l# l
  427. ( n+ `5 U8 c; l6 ~* a

  428. & f6 Q; H6 ]' P5 c  B$ h
  429. . H) X) ?3 @( o: k7 G1 z) b
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)3 P. I. C& u5 N, l
  431. {
    / K) y0 k: t  N% r4 V$ g( \# f; F
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    1 D, n7 E1 h4 a! s. f# H3 u
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * L3 k/ Z  h, m7 M
  434.   {0 L) S  Y/ v1 K, u* p
  435.     char szLanguage[50];8 @8 i, \5 ^( s9 Z& l0 n
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    % Y- A% r1 [' e7 c6 h1 f: Y4 i6 l
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . c0 p( j5 ]/ {$ y( j. I
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;: [; \% b7 W" g" X; V; i" [) ?
  439.     else                                   m_iLanguage=ENGLISH;) Q% _$ g7 h/ U, `; I8 ~" Q3 n
  440.     char szRegister[100];0 a8 X5 X: s" y; `
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      V5 z4 }/ [0 D
  442.     strRegsName=szRegister;
    ! s# G* v" ~1 K/ x- c
  443.     char szPatchURL[100];6 i. G4 ^3 K0 W& X3 h3 a
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 V. b- K7 W: U8 x! l; M- R
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! p9 B. g) u3 @4 ?7 U+ _6 V: m
  446.   }
    : Z/ P  Q6 d& ~! ^. H
  447.   else
    4 I4 T# I' F# e# R' ^7 w9 R
  448.   {: P$ Q/ v! N- {, }( z! m( K
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 C1 x- v3 N3 v; b8 H/ A
  450.     strRegsName=DEFAULT_REG_URL;
    $ J" c# U# R2 _* P5 [! d
  451.   }5 k; O/ C) I+ D5 l$ }
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    1 D9 Z  N5 j2 E& D$ d
  453.   {! G' `5 v. V$ W' i8 B0 ~
  454.     char szIP[50];
    ' T! s4 G% C8 q" M- l
  455.     char szDIR[300];" n. c& L3 E8 |+ E. l' T
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))6 }* e8 u* g! _; a- _7 E
  457.     {
    6 e& a6 _( z. C3 o5 y* r  o& V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");, `6 ~! K8 j# I' Z: R  y2 k! a6 x$ `: L
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    7 P' k% J3 z5 ?" |" K
  460.       strHostName=szIP;% r0 `1 h& U3 Z, z
  461.       strHostPath.Format("/%s",szDIR);
    * i. E/ b4 Y6 i- @" E* R' f3 D6 p
  462.     }
    - e+ ]9 @) I2 r! i3 T  c
  463.     else4 \4 P' k& ?, v! Y( \
  464.     {
    7 r4 j# S* n) `: W5 R/ ?+ |% [6 r# g
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . y9 c& @5 }) K3 E
  466.       {& d. o' G$ q; z6 j9 A; j7 t, G
  467.         char szLanguage[50];
    $ S8 P; C: p+ V; O
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 h% B1 l) d* Q4 |8 X( e
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 _& |: e/ e3 I
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) {& t( Y6 j# A/ ^+ L- n& p
  471.         else                                   m_iLanguage=ENGLISH;
    # T1 T: M' E0 ]0 j% c! P7 T
  472.         char szRegister[100];
    ; y' B# u) P) N6 b
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");0 `  x. u2 B2 S" W& C+ v
  474.         strRegsName=szRegister;3 p1 v' c- e8 t. Z# z5 \
  475.         char szPatchURL[100];% K" G6 n# w* c# J2 K" k
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ F& x7 [$ `0 q  G9 Y. f( u9 a
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: C6 A: Q+ B5 t5 y( T* ]2 A
  478.       }, A' z7 |  @- m- f/ O
  479.       else
    & Y# i1 g4 ?+ r6 u* N4 U9 h8 [9 w. W/ e
  480.       {
    & }: m2 `( k. ]. C/ Z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) V7 F$ D3 r3 O+ d% y% ?
  482.         strRegsName=DEFAULT_REG_URL;
    1 ^! s0 x) O$ [: e  u
  483.       }
    ! N, R# O9 y8 m$ n, h4 w
  484.     }
    8 e, d3 w! @, n& ~
  485.   }
    * P; d) ?. x! R  G% X
  486.   return true;
    7 _7 C. A" a. z% u+ q8 e' d: G
  487. }
    ; S2 {3 x; u# T

  488.   v4 K2 c" k$ u' B2 k2 m' j
  489. #include ".\ZLib\unzip.h"
    " f" b% v2 t( Z  |5 Q7 I' x
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);9 i; a" W. d: m+ h1 E0 G
  491. /////////////////////////////////////////////////////////////////////////////
    0 S) s7 y9 h# u" A" R& a
  492. // CRevAppApp initialization2 H& {0 l/ l# {5 p$ g
  493. ! ?: m6 a# d, {% V; ?1 Q
  494. BOOL CRevAppApp::InitInstance()% |/ A% L: h6 S4 l& v3 w7 D
  495. {# w# x/ o& i- s+ `( j  m1 {
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    / ^. o/ \' A0 Y) K! D# z+ k. G% I
  497. 1 T. F) S2 L6 E# |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    % o) s. M% f; [- J- l
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    % ^; {9 n$ ]7 p8 L" x& T; y
  500.   {7 t' K2 l0 `; P  t
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    2 N9 e" a. `; _
  502.     GetPathFromFullPath(szPathTarget,szPathSource);6 \- d/ f: c! Z9 h8 V
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))/ a- o! K2 S4 f0 a9 |
  504.     {
    ) i/ Q+ c! s& y
  505.       strcpy(szPath,szPathTarget);) i* p8 h7 m5 ~( O8 i  l0 ~4 i$ F
  506.       SetCurrentDirectory(szPath);
    6 X0 a3 m" ]' G5 `9 f' Z* T$ E  y" i1 I
  507.     }& [9 Z# U0 G3 t6 ^9 B
  508.   }4 N# @# t9 O4 d: v! y/ o
  509. #ifdef _DEBUG
    8 V% H. a: O6 F) k% M
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    : U% y% c' S- b2 V. b: S9 D' d3 `
  511. #else3 }- J0 k4 o" \1 L
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 ^" P0 F1 y1 c
  513. #endif5 B1 w/ }4 t: e! n, x; e
  514.   {
    ; d- U, m+ }$ n4 I2 ^
  515.     char tempFileName[MAX_PATH];1 }3 `: U& z7 k
  516.     strcpy(tempFileName,szPathSource);
    4 K: D8 M; ~, G' p1 }7 u. w. ^
  517.     tempFileName[strlen(szPathSource)-12]=0;7 Q: u3 C+ N3 ?4 X5 e" b  v
  518.     strcat(tempFileName,"\\$CSUpdate.exe");; ?, _) e6 F) }! s$ `3 ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);. t/ B- f1 F$ \0 D" I0 I
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);  U. Z3 n8 S+ x  O. x& ?0 i+ E
  521.     return TRUE;
    - d" @7 ?3 O* \* ]5 s
  522.   }7 o  b9 A& B6 E( R' A6 p: V8 C
  523.   // Nuke 0118: Delete run.exe5 a( f8 F* O- j; G" Y7 B
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );! [  m7 A; I  n! |* r, K) O
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    * I8 d! |. m3 w! e/ ~! H
  526.   if(!ReadCfgFile("Config.ini"))
    * Q5 k* o) p, a1 n# x9 X
  527.   {  O7 b" h% t5 y' Y3 ^, S
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    4 P0 W+ u8 L0 I$ m; O: O
  529.     return TRUE;
    & \  G& T2 V! n$ y2 H9 y
  530.   }  ^; b7 ~8 d0 {" Q, U9 y) m. E
  531.   HANDLE mutex;) ?4 i9 l0 V" y
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% |* l4 N' {9 F( U( A
  533.   {
    6 u8 ?. B  q3 x! X/ j
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)5 n# b* {% e0 R+ p0 `. J; K! }
  535.     {
      ~6 v  m, J7 v# ~/ K
  536.       CloseHandle(mutex);3 t; ^$ [0 z1 e( y) }5 ~$ i
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    : Q/ t# r0 i& v6 `) D' l
  538.       return TRUE;
    / }/ T0 ]: K  @5 A+ N
  539.     }* E' p) `/ h3 y
  540.   }  & w* w; j/ G! |' s
  541.   CloseHandle(mutex);' j9 P9 R/ u, o0 N. D* Z

  542. ' N& T# N: S1 T6 j. C$ Z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( `. I# l* m: G

  544. - o) k7 s7 R) A3 J6 A9 D( W
  545.         AfxEnableControlContainer();
    + L! P  J& _- d; O) L
  546. 8 P7 _" ]! h2 ]
  547.   bCanUpdate=FALSE;) Q) L8 d7 _5 ^( x  m2 V
  548.   dwStartUpSteps=1;
    " w  |3 b$ s/ G9 s( b& ]% E" j
  549.   dwProgramState=AP_NOTHING;% w! B+ L7 o! a$ Z
  550. ; r. w  n2 x* h9 ~+ |
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    3 e  i, p  \6 U1 @& m  _
  552. : T* ^# ^) |  t$ J
  553.         // Standard initialization! H- M, _1 j- |* Q; N' B
  554.         // If you are not using these features and wish to reduce the size
    8 m2 R# V7 t. X' m
  555.         //  of your final executable, you should remove from the following
    : l- s0 b9 o2 {; t
  556.         //  the specific initialization routines you do not need.
    ( t" K1 |# ?: Q$ U6 p

  557. 2 R# j& ^/ W+ `
  558. #ifdef _AFXDLL9 X! t" q4 m" t9 s. K- b
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL' G3 Z9 y& t- b& y
  560. #else
    2 S) q) Y  _6 h* n3 U& c
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically. N$ H6 ~. T. N* O8 b
  562. #endif" U. Y) p, x1 s- p. \. t

  563. 0 G9 U, i6 z, R- e/ G7 j& ]
  564.   dlg=new CRevAppDlg;; y) n* b) r& P: O2 _4 W. O9 R: r
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    8 R( F4 p  s; m  D7 E( J9 _6 J1 j
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    * d9 l" y6 o/ B8 Q/ A. o
  567.   m_pMainWnd=dlg;  x( M' G2 c! ~. v

  568. 5 T: i5 `5 I' C( r/ c) ^
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);8 g4 e. x6 c# @% j5 S7 E

  570. , V7 F: |  a6 n, Z6 Y8 m0 e3 I
  571. //  GdiplusStartupInput gdiplusStartupInput;: M' \" ~  K- O. R' i1 ^6 V
  572. //  ULONG_PTR gdiplusToken;
    & g8 G9 \6 l4 G( U( _- u
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);- M1 s) m8 k6 a0 N$ Q
  574. - e7 U& z7 k$ D+ V6 e* R
  575. //        CRevAppDlg dlg;- w' |2 M3 {# Z2 X& K: v$ A
  576. //        int nResponse = dlg.DoModal();7 Y5 G2 \: ^$ [
  577. //        if (nResponse == IDOK)/ Z9 |$ y; l9 [; M
  578. //        {
    4 V& Z/ J7 t8 {' o1 U5 Z9 |
  579. //                // TODO: Place code here to handle when the dialog is) c8 b& a  c# [5 _
  580. //                //  dismissed with OK7 R1 {1 m. y/ B! x
  581. //        }9 B1 V2 `6 t- |0 [' W+ O
  582. //        else if (nResponse == IDCANCEL)
    1 C/ x. }/ X6 i. g& d" X; b% E
  583. //        {
    & U" e# `" p; @, a
  584. //                // TODO: Place code here to handle when the dialog is
      }3 y. f4 u" a2 O# K. R( W! u8 D
  585. //                //  dismissed with Cancel2 S+ e' A' s1 o" `
  586. //        }& J& W5 b' K1 F# Q
  587. * L% z$ h/ e/ L& y* h8 i
  588.         // Since the dialog has been closed, return FALSE so that we exit the/ @' N8 `1 P) ]; t) C) T/ p" g- ^( f
  589.         //  application, rather than start the application's message pump.
    ! c4 M" l, J0 k0 p' {
  590.         return TRUE;. k/ u- s% d# c# ~# x
  591. }" `0 E2 n- u: a9 [5 F8 E

  592. # s6 O& V3 S0 {
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    & A4 ~+ M  F0 I% w# X6 Q5 y$ A
  594. {
      N" \" ^+ F. t% i, O5 F! h
  595.   int i;
    - x8 b- d- x+ D; I# y- p
  596.   char *szRet;2 c* n; E1 z$ n

  597. " r, Z9 `& G7 w/ z4 z* k
  598.   if(pSource) { itoken=0; sztoken=pSource; }! y2 y- S5 k% A' U$ u0 I
  599.   if(sztoken)- i  W' W$ k8 g- Y
  600.   {9 b# ~  r5 e% y8 s7 r
  601.     szRet=&sztoken[itoken];' e# @: `7 Y( x- |  }; Y) W4 B' o
  602.     while(sztoken[itoken])( q% q+ l: Q5 d) H% V( m
  603.     {. n' L- [& Z- C0 m/ S( `
  604.       for(i=0;i<(int)strlen(token);i++)9 y2 S1 \+ w6 R" e& ?
  605.       {
    ; `9 R2 T1 o! |/ \5 G8 G% q, N
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    8 h, N, [, I7 F& Q. n
  607.         {
    5 O. V% k4 Q4 R+ f; F
  608.           sztoken[itoken++]=0;& t# s5 H0 _6 U6 X
  609.           sztoken[itoken++]=0;- \4 ~/ Z3 {9 i
  610.           return szRet;
      S" T, b, G1 x
  611.         }
    8 a4 O4 N* q6 J# a" r" ^9 w  v$ j
  612.       }
    6 L% X8 K1 }0 C4 J2 b  m. [9 t3 l
  613.       itoken++;
    / S1 B4 r: V7 h1 Q' a; u
  614.     }
    - ^; ]/ r- O* k# W
  615.   }! Z% d5 _0 F8 k( j8 m/ |
  616.   return NULL;7 z( |  g( E9 P; I- t
  617. }
    & _5 r+ {7 V5 X# M
  618. $ K9 ?1 N, ^; N4 W( {" U
  619. void ProcessProc(long Total,long Current)
    3 A, q, ?* ~8 Q6 g; [1 E* b
  620. {
    : k7 |+ @$ L4 y" s" H: K" x
  621.         MSG msg;
    6 t2 _1 h! u# k4 y* Q' Q8 ~7 q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);$ r( a" t0 V- ^" a( c6 v
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    9 I5 ^: u1 r  `, C# x- z3 u# E/ ^1 u
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    2 L) t2 P% `' b# n9 k
  625.         {
    + j9 E: n2 P4 C- c1 M2 a
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & _/ [, l' q# n) ~; b* ~' u
  627.                 {/ D4 X- ^- }2 z
  628.                         return;" \2 K2 D  x6 \! t
  629.                 }+ k" k8 z1 T  c, P. B
  630.                 TranslateMessage(&msg);
    & ^# g1 W, r2 E! J( ^
  631.                 DispatchMessage(&msg);5 G/ |# X, f7 a# [8 q  C3 g
  632.         }       
    ' H2 l9 c5 p+ X3 u0 m3 a: n
  633. }/ [- {8 ~. [% ?, J! G4 [
  634. ( O1 L7 p' v' a5 f- \1 l
  635. BOOL bFirstChar=TRUE;' s; |, n" ~: Z. ~5 t" i/ F# X
  636. 9 @! \$ h) g$ Q7 z; o
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ! i' J& z9 M- V" a4 T$ U
  638. {
    8 X+ H/ u: i4 e8 Z
  639.         // TODO: Add your specialized code here and/or call the base class. u, E& ~4 |+ ~2 N' Z& k
  640.   switch(dwProgramState)1 z6 R; c6 C/ p0 G5 P3 s+ R
  641.   {
    0 i2 q& H1 I) j1 Y" c$ h
  642.   case AP_NOTHING:+ a0 j1 t1 J4 |( Q; V
  643.     switch(dwStartUpSteps)
    ( Y0 d# d5 v; D& Q
  644.     {
    & I  ~$ g/ [+ Y3 l7 Z
  645.     case 1:
    ( f5 e5 O2 ^3 u; M' }5 |# ?. ]0 S
  646.       {
    , e5 j1 q- ]$ H" }8 J
  647.         int i;8 S) H/ j; d3 D7 L! Q# o, s
  648.         CDC *pCDC=dlg->GetDC();
    0 [* k3 `' s8 c9 G/ C1 e
  649.         HDC hdcwnd=pCDC->m_hDC;
    8 u* d  S4 p- w; s
  650. //        Graphics graphics(hdcwnd);
    & t  r; q0 u7 b3 r8 W
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    * N$ t' \5 w3 `
  652. //        INT iWidth=bitmap.GetWidth();' I& Z  l9 a( F+ Z4 Q0 V7 j- O' t/ ?  e
  653. //        INT iHeight=bitmap.GetHeight();/ a2 B) b+ p4 V- b. |) v$ i1 V
  654. //        Color color,colorTemp;
    - r/ H  v8 C. |. Z8 |4 P+ x" H6 j
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)8 Y* p/ J2 v4 n- n/ j; A* S+ R7 r
  656. //        {
    4 r+ j1 N1 m4 b/ ~' B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    " @8 y4 {( _* O: j
  658. //          {& g' t7 w: f4 f+ {1 k
  659. //            bitmap.GetPixel(iColumn,iRow,&color);" L+ X( ~' g% w5 ?
  660. //            colorTemp.SetValue(color.MakeARGB(3 {9 X# }5 x7 v  t
  661. //              (BYTE)(255*iColumn/iWidth),4 n* C- U+ K  K! ~
  662. //              color.GetRed(),* r) K  @& p' l# r$ L
  663. //              color.GetGreen(),! [# W- ^& i1 t' w+ ^" X  z
  664. //              color.GetBlue()));6 J( |& K& T, H1 h
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ! N% \, @  Z4 c; K
  666. //          }2 q( S& M7 A/ m/ ?3 L9 D' S
  667. //        }
    6 b0 q1 \/ s. k. @: V
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);: F: [2 ?- r- B9 L( G% J4 |  \% V
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 B& H  F& L$ b" D
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ; w" w, d7 h5 c* G1 M7 ~
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 t3 _8 [! m, ]* i6 F
  672.         for(i=0;i<240;i+=8); P2 k  j. F5 u% L) s
  673.         {) E. j8 \. j$ k4 h) [
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 Q+ k% Y& h& l* n# M7 t  }8 J
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , O% V, y9 ]/ F" i6 [
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);2 ]2 O' c0 Y" i  _5 X1 J
  677.           Sleep(33);
    8 p( Z+ U4 r5 S
  678.         }1 ]& @( y1 V' z- [  f
  679.         Sleep(1000);& ?! Y# @7 {4 e, d$ e  B/ A
  680.         for(i=240;i>0;i-=8)6 t, f2 H( h, D8 r# |8 D- ~
  681.         {
    , z& t2 A  w7 O4 n9 d# W# U  z: x8 J
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ( i( A& ], v/ _8 r$ W2 N
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & A) a& S: ~( y! ?% V5 O/ ^
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. l5 R2 x. g: C" m3 X% G' ?# l: h' @
  685.           Sleep(33);- \5 V! b9 B" J# X6 l9 j! h
  686.         }
    " w  \! y6 {8 b, {/ d' Z5 P
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    # A- I+ G# x- C: ^
  688.         dlg->ReleaseDC(pCDC);
    8 a  u# h8 h; Q, R. S
  689.         DeleteDC(hdctar);- {! J% k4 {- \8 \: W" S
  690.         DeleteDC(hdcsrc);
      y% R! v! |3 Q: n& v
  691.         DeleteDC(hdcorg);
    0 V2 r8 @, O# p5 ?; g: M0 R4 j
  692.       }+ G( t. g: r' R
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    . _- n2 t7 h( e4 \9 N1 i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");( r6 O2 K. l4 B6 Q; n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    5 W, G) \" G8 N9 E, w% {: e. G& H* R
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");# r0 W& d% _  Y. V. D/ U
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* y# P' M  ]* F) _& T
  698.       if(!Dn.Connected())8 d  z; P2 i! i7 c+ z8 S
  699.       {
    - M- z& m4 s. g5 ?7 L# t- M3 D
  700.         dwTotalFiles=1;& n5 v6 D. y3 w" H& x& L
  701.         dwDownLoaded=0;, w( P# t% l  G7 `9 R/ g
  702.         bSilentStep=TRUE;
    . R$ K& ?! f% [! \, N# U
  703.         bCompressed=FALSE;5 f& I! X) I0 \8 s4 p! p5 [
  704.         strExtLocal.Empty();
    " c3 B! }' n6 I% ?$ H2 X# o
  705.         strFullName="readme.txt";
    " Q/ E" K9 r% {/ \% c8 [
  706.         dwProgramState=AP_CONNECT;
    ) d% O) ~  e6 ?" J9 K! f7 F
  707.       }4 w( ~& D9 s$ m) k3 e2 D+ H
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
      F2 q* Y" z' w" ]+ @
  709.       dwStartUpSteps=2;5 f0 P: z/ {3 [  {* f5 R0 ?
  710.       break;# I- X, _  N6 C9 R4 @, V
  711.     case 2:$ t8 ]1 q) d& K; g2 o! ~4 G
  712.       {
    + j3 O; u9 @( a
  713.         int iEOF;! L. E* O) ]1 A
  714.         FILE *fp;
    : s. \4 R. h9 j+ L
  715.         char szString[512];8 N. u. i0 I% v1 U" P
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");$ T) O6 [6 \: E, u
  717.         if(fp)5 _+ V* L( u; c+ a: F
  718.         {
    2 t7 `  C) G6 o% D# Q
  719.           do' _3 e0 p" t7 b$ s& @: P$ ^$ n
  720.           {
    ' E+ X: a; b* G+ F" R1 H
  721.             iEOF=fscanf(fp,"%s",szString);
    ) y" k! P# F0 s" m" }
  722.             if(strlen(szString))0 F# Z5 P% z& C% E. }
  723.             {* T( i/ w2 W# M$ I" g
  724.               if(bFirstChar)! Y, F- D# D8 Q- z
  725.               {
    - n7 p( \9 u& W
  726.                 bFirstChar=FALSE;
    : Y- O/ ~8 Z1 o- t* K( c1 }
  727.                 bConnectIsBig5=FALSE;
    1 \* C! W, S, V2 a
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;$ G9 `8 I1 \* ]' r/ H
  729.               }
    ' U8 j) s3 P" W& X& }, C2 P
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 W- k9 f  F- J
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));  i. y& x' j% M* f3 G+ p
  732.               dlg->m_ListText.AddString(szString);
    $ j- p7 s% i/ @4 G  R2 _
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% ~  D  ]) g2 g$ b
  734.               *szString=0;
    " r9 r6 E' S  R/ A) P+ d+ G
  735.             }
    6 j$ A" {! ?! A. r4 `0 Z0 l
  736.           } while(iEOF!=EOF);# t% T/ W/ K" t, L8 t7 j
  737.           fclose(fp);% J$ I4 c) u6 X8 B0 L8 W2 ]
  738.           unlink(".\\DownLoad\\readme.txt");
    2 |- O! d+ U9 Y' f* ~* P
  739.           dwStartUpSteps=3;; D% O; N; x- O0 G- w8 r+ l
  740.         }
    + J" a6 c6 b5 R8 E  i
  741.       }
    8 z$ q4 @6 }( X1 W# P
  742.       break;8 r  o1 Y% V2 |$ T4 M8 P; O
  743.     case 3:
    % P2 M+ e# b$ [0 m' d6 q' n
  744.       if(!Dn.Connected())
    ( m5 z+ V/ P% ]  n
  745.       {
    ) g- d; s3 L- X/ I$ T% }
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);) q* X) x3 h. `8 l
  747.         dwTotalFiles=1;% ?9 `. J  ~) Y/ }
  748.         dwDownLoaded=0;8 T1 Z$ |" P; i$ V  l  f, T9 W
  749.         bSilentStep=TRUE;! l; Z" K6 Q% D2 }- K9 z
  750.         bCompressed=FALSE;
    - h' ?0 m% [9 I$ @" r
  751.         strExtLocal.Empty();' l2 c- @& K/ @8 q8 x% n  s8 d
  752.         strFullName="checkversion.txt";! ]1 _6 q) v# U
  753.         dwProgramState=AP_CONNECT;+ t$ T0 Y( i! b, c/ g; k
  754.       }
    2 N6 O4 l7 H" V4 f) L7 H, O
  755.       dwStartUpSteps=4;+ p: T0 I' R6 L% P5 n7 K
  756.       break;
    ( Q8 q& @5 c0 T8 A6 O4 \+ z" F0 a* Q
  757.     case 4:
    # G# F4 G) F" [) A8 T3 c
  758.       {5 |" q% i7 E5 F8 D' ?7 O& [/ S" S
  759.         FILE *fp;* p3 Q3 @* [- h  D1 {- Z
  760.         char szString1[128];; ~, q5 B% n: T9 g/ e8 z
  761.         char szString2[128];8 o6 R, X& K% L( G; L) b0 {0 N
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
      \- U# L. F) U* n2 D; H& i
  763.         if(fp)8 c! ?: Y  ^) p4 v% j6 J" o: j8 {
  764.         {8 R2 [6 F9 p, X0 z% E
  765.           fscanf(fp,"%s",szString1);
    4 c- ~& S0 z# _+ G  q1 z
  766.           fclose(fp);0 R% ~# W5 |; B& D7 X
  767.           fCheckVersion=atof(szString1);
    4 _$ U6 G1 A6 b4 L& R! G
  768.           fp=fopen(".\\checkversion.dat","r");
    9 _- e  I$ r2 G8 z$ W" O" N' g% N
  769.           if(fp)( ^# d  {. S4 C  F! t3 w  y
  770.           {) \0 }0 y$ {$ S. Z9 F( |) s: R
  771.             fscanf(fp,"%s",szString2);0 N# i3 F4 E7 T2 K9 P; ]1 Y
  772.             fclose(fp);
    : M* ?0 {1 K$ V0 ^9 y' K' U
  773.             if(atof(szString1)!=atof(szString2))
    . u' d/ X! e, W* ^9 @
  774.             {
    % e6 B! {/ ~6 b3 z6 N
  775.               if(!Dn.Connected())1 [+ y( N: i- x/ o* T+ P  G
  776.               {
    ; T8 I- [8 C: z
  777.                 bFirstUpdate=TRUE;
    " S8 q% @& Q2 ]0 M# n6 b6 F
  778.                 dwTotalFiles=1;, P+ F( C$ J$ ^* b
  779.                 dwDownLoaded=0;
    % S6 d9 E% ]0 S+ h1 Y) C
  780.                 bSilentStep=FALSE;( n# ^4 U4 N( T/ H1 w9 e9 ~
  781.                 bCompressed=TRUE;
    & I/ c/ n/ K( w- ]% ]
  782.                 strExtLocal=".\\DownLoad\";
    7 ]- P7 w  s( Z& o2 ?
  783.                 strFullName="update.txt";7 }" i+ b: a* y; z( b2 O3 K8 _  f
  784.                 dwProgramState=AP_CONNECT;7 r( e0 Q3 o1 x* K/ J% N& ?
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    6 }3 s. |3 y( f
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & O% Q  {3 [% ?# S1 `+ K( a/ E5 O% C
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");  v* }* m( q- u- P6 m6 ^1 k4 X
  788. * n" g3 e% g; h. P8 Z% y2 a
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 G* t; h$ Q% I$ X& ]1 ^8 M( _
  790.                 unlink(".\\DownLoad\\checkversion.txt");: A& Z; c/ b" M" e
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)) Z) D5 c$ L' @, C# ^6 O
  792.                 {6 \3 z. t* e3 r' x0 p
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    $ V, n* z" N9 x8 @4 }1 X! X
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    3 n, Y/ L1 f1 ]% [
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    2 L( \8 U' h# Q0 P: w" C
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 W5 s9 r) R5 e/ h0 n

  797. % F! y0 m) f8 D
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");+ k' V: m% F: b
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 e9 l7 a% P( J* s* J- z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    " D0 _! E- T+ }/ v
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 `% p1 z: T$ ^* K  h
  802.                 }
    & e! c$ ~3 s& c0 c3 g
  803.                 dwStartUpSteps=5;
      f% q8 B& k; u, i, d' m8 q! I& a
  804.               }
    / C$ M, E( d0 m; n
  805.             }
    5 ]2 h: @. S- }0 u$ B
  806.             else: T7 i. M' f# C9 ]7 g
  807.             {
    : Y& z0 I; B1 i/ j: S) z, F) C
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ( ]0 u  P, S: S$ h. g% T0 R4 y1 |& h
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");' L2 w0 S0 a* D( S5 \; t" `
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 s8 S8 J1 a3 T! Z, e
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' K* L0 g5 b8 [3 _
  812. 7 u4 i- y' r+ n: H
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 K  G. v+ z2 |2 ~
  814.               dwStartUpSteps=99;
    ' c. m2 {9 j, I8 |- f% L" O
  815.               bFinishUpdated=TRUE;0 R* Y+ w2 h% |! ?1 E8 a+ a
  816.               bCanUpdate=TRUE;
    + g: a, Z& r. D6 o4 I
  817.             }
    & ^2 j' z& E3 n! J& o+ V3 `3 n
  818.           }
      u* N% A6 O7 Y$ H1 g2 F
  819.           else  n! d$ K9 h+ Z4 m& _; F4 v0 e+ g
  820.           {
    5 `/ C2 N% q, G" h
  821.             if(!Dn.Connected())
    : |7 Y* ?. j) u/ T) u) ~1 v/ Z
  822.             {
    & E' y) p2 k' j0 t$ ?$ F' C( E6 J
  823.               bFirstUpdate=TRUE;
    / Y; p8 ~$ C( a) I( @5 c
  824.               dwTotalFiles=1;
    - M" u* W, U- ~7 a* E) D2 t
  825.               dwDownLoaded=0;
    ' x& ]5 d2 |' V- Q5 Z
  826.               bSilentStep=FALSE;
    , S9 ~7 f" Y2 G' I, Z5 |) X
  827.               bCompressed=TRUE;
    # h- N. J5 ~# W# {
  828.               strExtLocal=".\\DownLoad\";
    # E. `  Q5 b; e! s' w
  829.               strFullName="update.txt";
    , d$ f  w# f1 i( M; m/ w5 d& D% J
  830.               dwProgramState=AP_CONNECT;# }4 D4 x; d' A9 c# l
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' e0 T" I3 X7 K" b& L" _
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 e5 Y% [- C: o; A. m8 I
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , u; o" K  r/ W/ x! N
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 ~( P! ?; l3 {; D% W
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ! F  {- Y# w5 u  S8 f
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    & M0 m; P; _6 F, e. t* e+ j+ F% X
  837.               {
    2 n% c% w; g$ S4 x9 h
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    . u& y2 u8 z+ @% Y; y- b1 X' o. Z1 g/ R
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ( s5 W* ~$ s& w% R" ^! K, g( q- K% s
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");  y3 |4 T# U  t% w8 `( b
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & A  O+ W3 l' t# S6 Q
  842.                
    ( @& ^  |$ n& A2 @
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");( v8 v0 O" D0 p7 c
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + ]* W* }% [; ]9 s( p: W
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");7 k2 \9 [5 i# f% r% F( G. z- D
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# p0 a+ g0 H) a; `$ f
  847.               }
    + x8 v8 K/ F9 k# h* J& A, c" t' i" B" }
  848.               dwStartUpSteps=5;' X- F# ]: [- @  V2 k
  849.             }
    " O6 b) H; D% g5 s2 @
  850.           }
    2 t8 y5 O8 W2 s4 J& D1 |7 `
  851.         }" u: |- [% f& [' V, T
  852.         else
    , n' j& W" x7 ]. d" l- h* V
  853.         {( V6 b& |" v( c0 _' h. W, W; r
  854.           dwStartUpSteps=3;
    1 q; ^& t% @! E. T
  855.         }
    + y) S6 E# F: j) S' Y5 B. q2 R2 }
  856.       }+ t1 E  y. @. v0 c; H
  857.       break;' J: H& q' q( G( d& o% }9 ^9 v
  858.     case 5:
    ! m' X2 n6 ^+ m$ Q- O  n
  859.       {5 ?* R$ }4 ^. Q6 {6 ?$ u  l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)# X5 i( p7 q3 ^% H% }* P8 m
  861.         {/ N" F. I8 q8 _9 u  P+ E6 u1 Z
  862.           int opt_overwrite=1;
    / @' Q/ {, f  d( _
  863.           int opt_do_extract_withoutpath=0;
    " m7 ^, I+ g: E7 A
  864.           unzFile uf=NULL;
    9 n% @" K+ D( ]: b6 e& d

  865. ' C1 Q' G6 D5 ?- L& ?! k
  866.           uf=unzOpen("Wsa.zip");: G% z8 b; ], b, B2 V! T7 s+ g3 v
  867.           if(uf)
    5 H8 s0 U  m( o3 Z, b4 I0 M) x
  868.           {
    - c1 k% O; Y# \' ]
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);8 B4 n' }. Y( b1 X7 U1 \
  870.             unzClose(uf);' M- r) c( Y3 S
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    4 p  v0 v, d  G) X6 B+ a
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    / z9 W6 {9 Y9 F% N' f0 ~- f' }
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");& E- D1 B0 l9 {, S6 z- Y) }
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; M3 _4 p3 r" A3 y3 u
  875.           }
    ' Z/ D3 e8 y; s0 ]
  876.           DeleteFile("Wsa.zip" );& `# y; q5 ^' k; o/ Y8 P
  877.         }. J9 N2 d$ H/ Q9 }

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

評分

參與人數 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客服返回頂部