找回密碼
 立即注册

CSUpdate.exe源代码

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

& b- Y6 V& g) {, P! ?' \" G" e
  1. / RevApp.cpp : Defines the class behaviors for the application.
    6 L4 M( ?" |# m, p8 R
  2. //& x- D5 W) M7 A" \! G8 |, ~

  3. ; N6 P% q3 l4 u1 X* e( A% d) l: R2 b
  4. #include "stdafx.h"
    7 {/ W- T( X5 Q1 L8 \% O  C4 T7 }
  5. " a* P) C0 x6 B) k  q4 x7 i
  6. //#define UNICODE2 R6 ~( D- f' |0 C- F
  7. //#include <gdiplus.h>
    3 o8 _5 r6 u. ?1 d: b- p
  8. //using namespace Gdiplus;
    6 H' G& @7 I( ?1 J( D3 d* P7 j3 F
  9. : ]( a5 J! [% E9 r
  10. #include "RevApp.h"+ D; C* ?" c( A: _
  11. #include "RevAppDlg.h"! w5 P8 Z, N$ w$ ]1 u/ W( T8 \7 p

  12. 2 n+ R% R1 a; r5 ]
  13. #pragma warning(disable:4786)$ u7 I1 n- e) v* B& B. |
  14. #include <map>" C$ T$ R! _4 d" j$ Z' E6 z
  15. #include <list>
    & q* a8 l3 c) Y; k
  16. #include <direct.h>5 {2 L& ^% D$ a9 t# r

  17. . b- _: T0 m+ s" u# j6 Q: s4 i
  18. #ifdef _DEBUG
    3 C  \$ |" b" v% o% S) y
  19. #define new DEBUG_NEW* d- q! z* Y. W/ \5 u& B! N% j! _
  20. #undef THIS_FILE2 n8 [8 Q: d$ R6 g6 r
  21. static char THIS_FILE[] = __FILE__;7 v3 v" a1 b  D2 r
  22. #endif* X* S8 n. Y/ V; S# }
  23. #include "SkinResDef.h"; _/ {7 I) j3 v: x8 K5 l& {
  24. #include "ChangeBG.h", V1 y9 z+ P8 O, z$ L7 `
  25. #include "AFXINET.H"- g0 E2 s( T0 \) f4 \
  26. ( e: j, R1 a6 s
  27. #define TRADITIONAL_CHINESE 08 O" e! r# T$ x  }$ y& L
  28. #define SIMPLIFY_CHINESE 1
    5 N" V- a1 W* R6 l) q. u, N
  29. #define ENGLISH 2
    + T) M: F- V  [9 @. w% X1 c
  30. int m_iLanguage = ENGLISH;' e& p: A9 M8 a- M6 d2 N; g
  31. /////////////////////////////////////////////////////////////////////////////
    , C5 H8 p3 R" |* m) o
  32. // CRevAppApp  A& s* y- B5 H4 H+ W0 s

  33. " F  n* f4 {& p7 {
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ' i+ S" {. D2 U6 e7 c" a1 ^3 H
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    : o8 v+ K  d9 i  q7 r, h
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.$ Q8 K: o" M6 {7 v9 V7 A9 q# m! c
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    . ~( ^$ ]' ?0 ^, }. e' S! j
  38.         //}}AFX_MSG
    $ |& A- L5 J  M! h4 v: F# F/ N
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ! N* a# i# \  k4 d  f0 E4 w
  40. END_MESSAGE_MAP()3 ]2 m1 ^" }# |) f! V( l: B
  41. ; ?5 k6 q0 ^, {! \" Q3 v" p
  42. /////////////////////////////////////////////////////////////////////////////
    1 z, I6 S3 k8 ?$ ^% [( l
  43. // CRevAppApp construction; x; c- s# z" n* |' P: q

  44. 8 ^' c4 a" ]( F, O
  45. CRevAppApp::CRevAppApp()9 c: m" S: y9 k" U+ j, @* m
  46. {* ~" B4 P& o: X  H  d6 h
  47.         // TODO: add construction code here,
    ! T( ]) B8 E* D+ R
  48.         // Place all significant initialization in InitInstance' g* G$ r: H# D
  49.   bDisplayIsBig5=FALSE;; S, T; t+ e1 n9 X# r3 k
  50.   bRestartUpdater=FALSE;
    9 W+ N! I8 \! e/ L! u8 F
  51.   bFinishUpdated=FALSE;. A: P9 r+ ?+ I, m, R& {( D
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;$ e- X& I8 ?- S0 l
  53.   InitChangeDataBig52GBKS();1 w6 K5 C' y1 e& M: n' Q
  54.   InitChangeDataGBKS2Big5();
    + I2 Y3 J1 w" q) P+ A9 W. P. {
  55.         //- j( V1 a3 u  H  w* p, \
  56.         bClickRunExe = FALSE;
    . T+ v+ X/ G0 }' _4 D/ K5 r; E
  57.         /// o1 g3 c# _" O
  58. }* x$ Z3 D* |, {* V$ s0 }
  59. / @+ U; |7 S0 [5 g- [( I+ A
  60. CRevAppApp::~CRevAppApp()9 }5 C2 h3 H8 m' ]
  61. {2 X2 }, @8 b0 K7 Y/ ~" V  e
  62.         // TODO: add construction code here,
    ( Z/ m/ @$ S% L) h
  63.         // Place all significant initialization in InitInstance: i5 T- d+ H4 @& Z) a& N/ ]
  64.   EndChangeData();& d1 H" i! T- ~8 x. p5 H! s
  65. }
    * t- X. ]5 e  A# V+ ^/ N
  66. 9 w& M" R$ g! B
  67. /////////////////////////////////////////////////////////////////////////////; x! K7 s3 A5 N' U3 e% u9 Y
  68. // The one and only CRevAppApp object
    - V& e4 Y! A4 {; S" S
  69. , ?9 _2 Z/ x. Q, l
  70. CRevAppApp theApp;
    1 K8 G; B  p6 [3 j/ c
  71. , V) E! V* V  J. b2 s
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    1 b) [' T% W/ G, o- Y6 E
  73. {' q/ e, |. A  F$ C# B) k& v
  74.   int iEOF=0;
    : ]5 q/ G. c7 G5 k" E
  75.   char szTempName[MAX_PATH];
    " [2 c& c8 L8 r3 r& Q# Y8 z; Z
  76.   *szFileName=0;
    . [- H' b, t1 J) @1 N6 F
  77.   iEOF=fscanf(fp,"%s",szTempName);
    : T$ ]- z1 Y9 U' c' G2 M/ v, A
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')5 k# y( \. T9 M8 r" K
  79.   {* `0 t0 x+ C6 C' R5 T% l
  80.     strcpy(szFileName,&szTempName[1]);/ }9 x: O' G, R, c
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)7 W) K1 G, [+ v$ v- R7 y+ G0 Z5 H& Y
  82.     {
    ) O: ~) I% |! g% u
  83.       iEOF=fscanf(fp,"%s",szTempName);
    0 M3 D7 K) R3 i% K  X- j
  84.       strcat(szFileName," ");
    & k5 k  U2 x- U4 G
  85.       strcat(szFileName,szTempName);
    ( N( K1 f. {  V5 {# b% E
  86.     }: o. v2 b, ]- j) k  I- k2 {$ r2 R$ w
  87.     if(strlen(szFileName)>=1)
    ; b% ]6 s: W5 k- R
  88.     {
    $ E  v8 _- ]. Q6 f
  89.       szFileName[strlen(szFileName)-1]=0;8 U. k3 c$ N3 d' ]
  90.     }
    / x7 l5 t! ~* g  N
  91.   }( ^* ]  m" e1 E# c6 ?
  92.   return szFileName;
    0 g$ o5 o! w6 p. N5 _1 ]1 p
  93. }$ g" |4 M% c% X

  94. ( v  r" @0 O( d/ c+ v
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)# G+ c  _% E5 P5 B
  96. {
    0 K3 E) k, }+ y/ `
  97.   FILE *fp;
    8 J, S  S+ O  y% z. P6 l
  98.   char *key=NULL;4 _* p8 k2 h0 ^  i
  99.   char version[MAX_PATH];5 j) q& @; n) u9 Z9 p: Z! B: ~* ]
  100.   LPUPDATEFILE file,olds;- E( z% P2 _) j7 x6 M" X! s8 j
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 n7 E5 {8 p2 O' R5 a5 [" `) Z) H

  102. 2 ^. d9 F6 A8 s/ E
  103.   UpdateList.clear();
    6 A' W; l8 D6 [) d9 e
  104.   UpdateFile.clear();% i. u& f4 L9 Q" E
  105.   if(GetFileAttributes(filename)==-1) return false;( |9 A; g8 f5 i5 y
  106.   if(!(fp=fopen(filename,"r"))) return false;4 `0 h1 i" \3 H# b
  107.   fscanf(fp,"%s",version);0 m" p8 d) }% T$ w. O
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }" \5 K7 n5 f! _' R; j
  109.   while(fscanf(fp,"%s",version)!=EOF)
    0 z# v' u8 w  F7 m9 D! ~4 H; T
  110.   {
    . p' h, O- J! @4 E& [  e
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # ]3 n, V1 y- @
  112.     fscanf(fp,"%s",file->path);, a+ d: Y/ [2 o. e
  113.     ReadFileNames(fp,file->file);
    # w4 x% g  n* a
  114.     strcpy(file->full,".");
    * i( z5 z0 ~) E  K  V
  115.     strcat(file->full,file->path);  e# X. r1 f9 J9 f
  116.     strcat(file->full,file->file);- a5 E7 b0 Z3 A5 G! u4 B3 s/ L
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())3 x5 _/ R# t5 J! J
  118.     {
    1 L6 V& u1 ?& ^
  119.       file->vers=(float)atof(version);
    2 N, n4 c9 u* @  o) J
  120.       UpdateList.push_back(file->full);
    ; v( o- v8 [3 I( P1 {* C/ c; @& h
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; q0 {+ ]: q  b+ O, n8 L  H6 w
  122.     }1 H% _: ]+ o  v. o! \6 c
  123.     else2 q; j% }  {: g. O0 A0 B
  124.     {
    , _( n  R. h9 j/ r! Y
  125.       olds=(*p).second;1 K) u, o' U' O: z/ \- X* L
  126.       if(olds->vers<(float)atof(version))
    8 Y& h" j$ q  d3 y* i4 V) `9 e
  127.       {! L5 o1 r5 a$ \9 B
  128.         olds->vers=(float)atof(version);
    5 t' H) J" o# l  u% C+ n, W$ c
  129.       }( I! ]# N& v7 @. d& n
  130.       free(file);2 w  H& y4 b3 W0 r
  131.     }; K. J* ~% D: H# w
  132.   }8 N' r! ~. H9 i; D& a3 _% S
  133.   fclose(fp);
    ' q! J+ ?3 o7 s$ U  l
  134.   return true;; x) j0 _3 M( i, n9 k3 p
  135. }
    ! a- K6 \# ?/ _: U0 ?5 C

  136. . k, K& p, z" C, ]4 j
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    8 `- Z- |1 e+ E; X1 E
  138. {
    , R. R& ^4 j2 X; I
  139.   TCHAR  szFull[MAX_PATH];3 h; K4 f$ f2 v1 T5 q$ P
  140.   TCHAR *token,*inter;- K) t5 V/ I7 [8 l8 x
  141.   *szPath=0;
    ' w7 T, p' C, ^/ B
  142.   strcpy(szFull,szFullPath);
    ; U. z! X' B& f( ]: t
  143.   token=strtok(szFull,"\\/");
    ) Z2 I. Q0 i$ e( b/ }6 t
  144.   inter=token;. \) U- x5 `& a3 L9 I- P7 A# u3 d
  145.   while(token=strtok(NULL,"\\/"))
    ) N4 }" O! A. m7 Y7 G
  146.   {; a; V! V$ a: K$ [& a& ?/ Z$ m
  147.     strcat(szPath,inter);; c, v, Q* x) W' T( g
  148.     strcat(szPath,"\");
    , F# v7 S" h& t9 @6 U
  149.     inter=token;
    # ]) x8 \6 I9 @$ H
  150.   }
    & s( e0 u% K7 G+ C+ E' ~
  151.   return strlen(szPath);" [& v$ \8 O" f$ o+ d+ U$ I3 c
  152. }! t& J1 e$ x: B' j9 H( ]

  153. * n1 b% p$ x: F8 ^1 z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    4 g! Q# ?# a  d- S* o; @9 |0 B
  155. {- Z4 {4 U; g4 d% n" G
  156.   DWORD attrib=GetFileAttributes(Target);7 e# F' Q5 Q# g7 q1 G: l
  157.   if(attrib!=-1)! g, M& K9 ?1 f( b. [( k/ E3 j
  158.   {
    8 F" g; k4 b" p$ L! c2 W7 m! l
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    : F( Q9 e- T: U
  160.     {
    $ D+ l7 m2 z6 \) o7 l
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);: D, g$ H+ A; m7 t4 z; s2 _
  162.       SetFileAttributes(Target,attrib);* w# i$ O6 z' C: D3 p8 M6 K
  163.     }, c; |) c% D) o' F  H/ _& [' j) v  g: N
  164.   }9 o' c) U# H3 ~
  165.   CopyFile(Source,Target,Erase);' M9 {- Q' U0 z
  166. }
    8 t) |# c$ A+ V2 Y

  167. $ O2 U+ K$ ^1 }2 K/ z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...); ]+ v, E. i4 g; o4 R$ R# i
  169. {6 A5 e# F5 Z& a) X8 I' E0 Z' z
  170.      FILE *fp;
    $ O; n# a  J" D- U7 f
  171.      char  szBuffer[8192];
    ' X6 U& Z. ~- y4 D# N; \, F
  172.   va_list  argptr;( D; j* g% L5 ~. P
  173. 5 l% x5 o7 W1 n3 o6 H
  174.         va_start(argptr,message);/ ]4 |! Y7 v/ v. ?% |) q
  175.         vsprintf(szBuffer,message,argptr);/ G# M/ [' @- j5 `  g
  176.         va_end(argptr);) s. R) O" J7 k- u/ _3 @2 d+ S
  177.   fp=fopen(FileName,"a");3 w/ c/ P; {$ u0 z
  178.   if(fp)
    % ^0 M& m3 [( k
  179.   {! @0 d6 X0 C" U. h; s4 S2 b* s
  180.     fprintf(fp,szBuffer);- V( v+ p, y6 w# W+ y" g. y
  181.     fclose(fp);
    6 q1 A( R0 M+ ?* X2 P, _3 _
  182.           _flushall();
    # _- v; q6 I4 @9 v
  183.   }
    % p+ K0 Y6 I4 c! e5 ~4 @
  184. }( d4 J% T) R$ f  X' u, K7 T
  185. 3 V8 c7 L' g% ], H2 Z
  186. BOOL CRevAppApp::Fclearf(char *FileName)9 r& s; D; c; d/ ?4 }, B2 T
  187. {' y3 s  T2 h2 [( D4 n* u
  188.      FILE *fp;& ?$ _: X7 D" ^6 p! j; K
  189.     DWORD  attrib;
    * a" E5 k& w6 I& ]& m4 N9 J
  190.   attrib=GetFileAttributes(FileName);
    , l1 n/ J, ?( C) J. a7 ~' F) w
  191.   if(attrib!=-1)4 S8 J" n& Z' H4 n3 L" B5 Y+ d
  192.   {" }7 P$ |2 s: a
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);5 i. g8 A& `) e  I0 @7 p4 y
  194.     if(!SetFileAttributes(FileName,attrib))
      L& L  \- g$ B* z4 `
  195.     {
    2 e$ I  |1 v/ {8 ^# c# H
  196.       return FALSE;
    9 J. k0 C! u! q7 Z9 F
  197.     }
    5 e# \* A2 r' q3 ]
  198.   }# I+ p( `8 R' M1 t  b
  199.   fp=fopen(FileName,"wb");: h( w; [! Q/ A2 H6 u3 [
  200.   if(fp)
    8 s4 _' Q; q! T
  201.   {
    % l. {/ g7 V' w, X7 h" S
  202.     fclose(fp);
    3 f" j' N! S/ ^$ h
  203.   }0 \$ {  O5 U( D4 c* q& x9 S5 `. y
  204.   return TRUE;/ S2 P$ H, {9 O: D) E
  205. }
    , v+ E+ g# p6 l! y- z, |

  206. . D4 A( J3 H; [
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 _9 \0 b2 Z+ `' H* K: d" A
  208. {' F/ [. v. A- Q6 o- C" L
  209.   char filename[MAX_PATH];
    3 C3 q; t5 B, r3 ~, [- T, E
  210.   LPUPDATEFILE file,olds;( C  `1 t2 Q* Q* y; E9 g
  211.   std::map<int,CString>::iterator i;
    & c; i' J* G6 _6 k/ q: Q
  212.   std::map<CString,LPUPDATEFILE>::iterator p;( s- \$ E- P7 ~. ?0 }' c
  213.   std::list<CString>::iterator l;
    ) {5 v4 X( N. i2 C% J

  214. * q& n/ h! B  K5 X8 \% s
  215.   if(bFirstUpdate): N, ~/ d3 s3 z7 W/ c
  216.   {
    ! P( s6 H* m5 f7 @3 O# C! I9 t+ S' G
  217.     dwCurrFile=0;
    7 `- |6 o% P. K1 V( V3 ]
  218.     bFirstUpdate=FALSE;( |4 @7 P- N# v8 Y+ z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); {; s. t' k) a6 H& @0 H; |
  220.     {5 t. O/ Z1 _% }! ?9 n5 ^
  221.       dwTotalFiles=UpdateLocal.size();. f6 k( v3 {% h: S) |0 J
  222.       dwDownLoaded=0;5 j# g( F8 L  U; B6 q# f4 W
  223.       bSilentStep=FALSE;8 |- Z/ S# `3 x1 b# \( k4 C
  224.       bCompressed=TRUE;
    $ r+ Y$ i/ _0 L* i* ^
  225.       strExtLocal.Empty();
    ( x- N) N5 T, E1 e
  226.       strFullName=(*i).second;( G- c# v/ g4 h
  227.       dwProgramState=AP_CONNECT;8 D" ]* T( w" u6 z2 L
  228.       return TRUE;
    ) u, b, V' L% H
  229.     }/ t1 k, V! y- N7 w  J5 f" Y
  230.   }% X2 p/ w; _# i& S! O" B
  231.   else if(bRestartUpdater==FALSE)
    ) T& F/ q* k3 I6 k: i. `
  232.   {
    0 M* ^. j" [8 ~' J& D
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    6 ]  y1 U* q: I. ]) k0 t+ O; k
  234.     {
    - d3 B. ]- s0 q; w
  235.       file=(*p).second;
    1 I2 x6 A" q5 ~- f
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
      d. E# l& w5 |' u4 H/ C6 D5 y
  237.       {
    4 A* L0 G. n# V1 n: @/ H
  238.         olds=(*p).second;
      e/ ^5 {' a- N. T) b5 ^
  239.         olds->vers=file->vers;
    9 [9 b' I' k% b. T' i
  240.       }
    : S6 u' G1 o( S/ w" q9 e2 r! F/ Q
  241.       else
    : `* ^9 {0 A$ F! a2 r% f0 }# S
  242.       {
    3 e5 ^8 ^) J6 M$ G# d6 l
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 G8 g& j7 y" [$ k6 U" `8 B
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    7 F5 C% V! E2 v% d2 H8 Y% x
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));+ ?; b6 F) O1 d8 ~. x
  246.       }: ^, Q1 Y& B* \3 a7 ~( M, x3 [  L
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ' a! D/ r6 ^: n
  248.       sprintf(filename,"(%s)",file->file);
    ! i) t) Q4 x- t- p
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) A1 Z: @( Q/ _  J( [* g1 y8 d
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }+ Y# `% O3 R9 ]' Y" k6 q
  251.     }
    - i( `  Z% o2 g6 i- \  _
  252.     dwCurrFile++;
    - @6 K, p, _/ u
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / _5 Q: J; g  Q* r
  254.     {
    9 g- Q/ l& ~: Q8 L8 r1 B  s: c9 K
  255.       bSilentStep=FALSE;
    # G5 k9 ^3 L0 G* ?4 T( `5 n, v4 X9 U
  256.       bCompressed=TRUE;0 a! W) L! g2 a
  257.       strExtLocal.Empty();) j' c" W6 G& }# ^9 Y0 _
  258.       strFullName=(*i).second;
    . s, G; M7 X5 m; l$ I" A3 v/ A8 n/ N
  259.       dwProgramState=AP_CONNECT;7 \9 |+ k- M8 w' n  N8 `# K
  260.       return TRUE;
    / x* r7 \6 x9 S8 }
  261.     }2 J1 Z( v4 ^: c7 @/ D
  262.     if(!bRestartUpdater)% q8 V* m. V6 ~: k3 r+ F6 s
  263.     {% W. W8 n" t& Z/ A( k
  264.       int iCurrSize,iFileSize;5 s+ t3 g6 I0 h
  265.       iCurrSize=0;
    ! ?- N- g+ A( ^5 K# [" k
  266.       iFileSize=UpdateList2.size();/ Q# U. ^# i% j* D$ q  y/ n5 t/ k
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ! L3 R, X& @- [9 l" r! [+ Z4 S& H
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ; k5 {+ g# |, F, t* t+ \
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");6 l6 X1 y8 J1 w1 g8 @1 `6 B
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& p  I6 @4 p/ ^4 Z& m3 O
  271.       Fclearf(".\\update.dat");
    2 H( e3 m. ], p/ R6 f8 E  N
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ) T2 Z- L* O1 M
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)$ p5 L# {# e( D# @5 N7 @2 ~8 ?
  274.       {
    5 Q7 M$ ~4 k! s0 |$ @& H  ~
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())  ~6 r8 a4 H5 k
  276.         {) |' c! o3 |: K" F$ @" F7 ]
  277.           file=(*p).second;
    ) Z3 V2 O. r, s9 V1 E) y
  278.           sprintf(filename,"(%s)",file->file);- ^8 U& J- q$ s9 e: U1 g
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 X* ~7 r2 e5 b: ]. a4 w
  280.           iCurrSize++;8 R4 Q' C; P( r) ~, C
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    . K3 v/ o" D3 L" p) m" P# z
  282.         }
    , E( u) m( s' w- I4 ]- G$ r* m
  283.       }
    * |& ?/ _( [0 ]- M
  284.       unlink(".\\update.txt");
    7 o: H- N( f( F0 ^
  285.       unlink(".\\update.tmp");3 x! o% E. L1 o7 _0 |& u
  286.       Fclearf(".\\checkversion.dat");1 X$ }8 q9 C- V0 l- K0 w
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);# T' Y$ X$ X/ v& |. [9 t, r6 U
  288.       if(UpdateLocal.size())
    ' N5 `) K* L. L2 a# f3 ?
  289.       {4 _+ M) I* H4 g. O$ a, T5 U! Q
  290.         UpdateLocal.clear();
    ; K5 e; @1 D$ k- m$ t' x
  291.       }
    + V# Y  k8 u/ V" F( f. K
  292.       if(UpdateFile3.size())# I. b% R  J" K8 a6 `5 {8 T) Y
  293.       {  V) \3 Y* V2 k
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 R& w4 d/ C6 D. \3 D) q
  295.         {
    5 t3 L/ R. q  }
  296.           file=(*p).second;  E5 y3 |6 w* `( |" f
  297.           free(file);
    ; o7 m; I& y" C4 |
  298.         }
    3 V7 A2 j+ |! _1 V# Z
  299.         UpdateFile3.clear();
    ) B  ~" V6 G% g; K# [
  300.         UpdateList3.clear();
    9 ?5 O0 B# D. N1 ^+ ~" ?' J
  301.       }
    5 F$ A, P& P+ H
  302.       if(UpdateFile2.size())0 ~4 A  y( U1 G
  303.       {# W( E; A" Y7 R, \; u
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) u% |1 C: w0 ]8 `) s4 V
  305.         {3 }' Y% @- [5 T
  306.           file=(*p).second;
    % @5 J2 M6 }$ q! O" X7 o
  307.           free(file);6 k5 m( z- @9 o, `6 c8 D1 E5 p
  308.         }8 R, q% ^$ X: @- c' `
  309.         UpdateFile2.clear();7 X# W9 P9 \4 A+ ~2 P
  310.         UpdateList2.clear();0 T# F. [3 a* r
  311.       }6 n- R- j3 @$ Q; [& y6 ?
  312.       if(UpdateFile1.size())
    ( Y" _! z6 k! Z0 W
  313.       {
    * V" b4 h/ Y8 R- ~( ^
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). G2 Z9 e# _9 q6 h( N
  315.         {+ S% N* E+ `+ G8 V$ F, B6 n
  316.           file=(*p).second;9 E2 {; T) b" x' T) w% e' `
  317.           free(file);0 ~1 D$ {( D  J2 [0 K) R) Z
  318.         }9 F: b% E7 {) V
  319.         UpdateFile1.clear();! u# n* ^0 K! |  r& l4 D
  320.         UpdateList1.clear();  P4 M4 r% X8 U( y/ ?5 Q
  321.       }
    9 u7 o2 q3 B4 d% a
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; W: k  }3 h' m
  323.     }$ ^) E4 q$ @8 `  F5 w3 Y# S' X! L8 m1 O
  324.   }& d" v& k: V7 b
  325.   return FALSE;
    % b* y1 |1 j* G! ?, w6 S
  326. }: _+ \3 F4 `$ Y* M) w3 E( S# j

  327. $ r! F+ B1 Q0 _; i+ }/ ]
  328. void CRevAppApp::ClearAll(void)
    # b; R8 a8 X9 y' Q0 G6 \9 h/ {; @
  329. {
    + q6 I% f  m2 D- `( P
  330.   LPUPDATEFILE file;
    % D, G7 `) |" {4 V' Q. h# p
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 p" S3 s/ u7 Q3 \7 K- `3 q

  332. % T. J$ J! `) s4 v
  333.   if(UpdateLocal.size())
    8 V/ V1 }1 \. a3 A4 S0 _5 R
  334.   {
    7 ]- z* m% w% ~" S1 _
  335.     UpdateLocal.clear();
    1 ^% T# L4 g) ]8 u9 d4 ^* y8 \
  336.   }
    : }; a, s! ?1 x' h
  337.   if(UpdateFile3.size())& K! w( H3 q( y0 O" L4 v. J
  338.   {; l3 V. ?4 A# ?: ?/ w1 N
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 U6 r+ A$ K7 z" E
  340.     {4 c7 p% A3 K% f- V( Z% ?7 U
  341.       file=(*p).second;$ @* m& s1 J( V4 C8 ]* N# W
  342.       free(file);" ]6 r. x2 T( X
  343.     }
    # n* ]' Q$ C4 b
  344.     UpdateFile3.clear();7 i) s! w' u7 l% g
  345.     UpdateList3.clear();5 |9 k/ e- x+ I0 e, |! z( J+ c" z
  346.   }
    " U! h: j% y" q: S
  347.   if(UpdateFile2.size())6 |9 ?# W. ~. x- J, [1 o
  348.   {! j: x* h/ T9 V% v; J. ?# c" a
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)5 l3 ]: J* C" h
  350.     {/ ^, O5 R9 g( B4 u0 P* U$ o, c
  351.       file=(*p).second;
    / Z! S6 ?' H2 H& Q
  352.       free(file);1 d' [8 u# H% O+ z& v* X2 ?4 F3 L
  353.     }2 i+ i/ A2 I4 L/ @4 O
  354.     UpdateFile2.clear();
    ' M  n0 j* W* c
  355.     UpdateList2.clear();7 V4 B  v6 e# q( z; ^( r
  356.   }* v! t6 t& X, g2 Q
  357.   if(UpdateFile1.size())
    " C0 A6 \) W4 a- a( s
  358.   {
    5 H! u6 t" h% O, g0 d% o6 I
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 H2 x& |6 z$ |  w% `+ c8 V- ]0 f
  360.     {
    # t9 o$ f1 o+ x! @
  361.       file=(*p).second;
    ( W9 A5 R( L& d8 l
  362.       free(file);+ c  z* Z# \7 B) ]4 k9 i; E
  363.     }- |- u+ S0 e$ I+ K
  364.     UpdateFile1.clear();
    8 \" @. S" ~8 C; p3 H% F  x
  365.     UpdateList1.clear();5 P  r& z) x) k; K% ]  I! I7 L
  366.   }2 e5 n# n4 s# _* e
  367. }  . Q% |6 K8 |7 i3 t( M9 g
  368.   
    / y3 h  j$ ~* p; B; f
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    4 y4 v0 x; X6 l- z8 X* N' b
  370. {
    " b4 Y/ ?3 d  G5 y# b8 r; l
  371.   int c;
    0 M: m' i& T* k& \. V
  372.   LPUPDATEFILE file1,file2;$ E- {% X2 }0 h
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
      @, z* g7 I& I# L+ ]9 d9 ?
  374.   std::list<CString>::iterator l;
    # X: O, p! O2 r4 ~; X

  375. : w5 Z6 ]# j* m
  376.   UpdateLocal.clear();- d; [  l0 x  Y; ~. V/ M
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    7 g1 b9 d8 Y! G0 W8 h+ C
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    % O2 w5 w5 O; v- ?
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ! G9 O2 c# R/ p7 A' `# j
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    $ y8 m0 {4 w* l6 Y9 e
  381.   if(UpdateFile3.size())
    0 ?, S( L( `; L4 n3 q, _
  382.   {
    1 G2 q! G" Y! w3 Y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    * x( M* I9 a$ r, B
  384.     {
    4 \; P$ {/ Y3 a2 Y: g
  385.       file2=(LPUPDATEFILE)(*i).second;6 \  Z/ k# f  Q& X# V2 d) n
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 x' y2 ]: E0 _( W: B& p
  387.       {
    . t1 J" e% e' t, r% R% x+ o
  388.         file1=(LPUPDATEFILE)(*p).second;" e3 N7 k, A' ?- V- s1 T! S
  389.         file1->vers=file2->vers;/ d7 J) z! {4 }/ }1 x  s: H' T
  390.       }
    4 r: H  w" k1 |) _+ V# R
  391.       else
    8 O  T& |$ C* `- {
  392.       {
    $ m1 ~. _" j+ U2 ~. s) Y, v9 H
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 a9 k4 i% q  B$ \
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));; Z0 e# p( ~  L. N1 r5 `5 y
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    & i. a0 S. \, b& J! ~* H5 i4 {/ {. U
  396.       }
    / T5 j6 D3 v* p8 h& g  S
  397.     }
    : G, G) d& n, c# t6 Z
  398.   }
    8 \7 @4 J! F; R7 L+ w
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 ]3 g/ k/ a" R* |6 a
  400.   {
    ) ^* X" W* k6 h: W& K% l
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()); h+ y. n/ e) {9 _2 c
  402.     {
    + ~- h- o  D3 B5 \; v! K7 {: e
  403.       file2=(LPUPDATEFILE)(*i).second;
    ) F5 f0 J6 P+ o& f" l! t
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* J7 l; T) F- {8 u/ f; t
  405.       {
    1 v% h5 b' o: C+ n
  406.         file1=(LPUPDATEFILE)(*p).second;
    $ \$ n$ I/ V2 |, C
  407.         if(file1->vers!=file2->vers)2 X0 Y- X' X7 M. B# u
  408.         {
    ( x# ^7 q# S0 F* S7 n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 `* r5 N4 n, c& w/ Z5 v7 P( `
  410.           c++;9 o) K( a* g- y2 m' I& J5 ~
  411.         }+ [1 X2 a6 |+ j: h0 q2 p4 J+ a
  412.       }
    6 {6 z$ e% @$ Z6 \
  413.       else1 o$ g# I0 _+ U9 i& Z  g/ S& j
  414.       {
    : {4 x+ w. H+ L6 ?; D. S  M
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( T( m2 x0 s% W9 \5 r/ Q; ^
  416.         c++;$ [% E6 `- b0 q' y
  417.       }
    / ~1 F: r  P3 |0 H2 D' Y$ T) D
  418.     }
    5 j) m3 J' @* C* h8 h1 u8 v
  419.   }
    : u, s) C  n1 g. [# r8 `
  420.   unlink(".\\DownLoad\\update.txt");
    . ]8 i8 b. e8 n+ V3 |
  421.   if(UpdateLocal.size()) return TRUE;
    # ]& ?1 o+ D0 _. V
  422.   else                   return FALSE;
    & w8 \5 t. @: z
  423. }
    ! v5 u# ~  `. g0 G. G5 x/ x
  424. - B8 _" j# ^9 z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"; ~- B' O0 n1 o5 }
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn") h" c+ m  }% M( c+ n

  427. / L+ X+ W. ]' G& |' D, c7 `5 {
  428. ) I* b$ P- ^) C

  429. & Q' e9 [8 w2 z( w
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)0 v6 p3 ~2 O% w, u8 E: |0 L8 S% G
  431. {1 w$ `( P7 Z1 h+ x# Y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
      F) s& T8 X* S' u
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    6 X. c8 l% u, ?; g  K7 D
  434.   {+ w6 S/ ~4 a1 Q0 }7 K
  435.     char szLanguage[50];9 q3 n0 A- Y3 _- Z/ @, K$ j
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 P+ G/ y/ a8 }. Q5 u
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 @4 x. Z7 W5 _; H* e
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 e6 l1 J, P3 `7 W6 g8 P! d  R
  439.     else                                   m_iLanguage=ENGLISH;  A; i- {6 t1 W5 q2 Q" ]' _3 p
  440.     char szRegister[100];
    / y* H1 y: l" r4 z6 m0 i+ a
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 O7 R* i; G6 j/ X4 X- v; s
  442.     strRegsName=szRegister;
    6 G6 Q( i0 v- l: A- K
  443.     char szPatchURL[100];
    ) d# ^! Z* {0 i* {" u3 S8 X
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) ]5 _1 D/ J1 D, P; s
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( s8 F* r4 s( M: B7 G' r8 [+ X* i/ r
  446.   }/ K4 M9 C3 p* w# ?5 r6 n
  447.   else0 l/ I% n% ~& |1 S
  448.   {
    5 m! B  x; X& P. I' o) [# k
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ _6 `: z# t5 F! S: Q9 j
  450.     strRegsName=DEFAULT_REG_URL;
    # q& b& ?7 g3 k; K, K
  451.   }0 Q/ p/ r% u: d+ c' U# _" q
  452.   if(GetFileAttributes("hosts.ini")!=-1)) a8 i6 c$ n; c. u/ ~- M
  453.   {7 r( ?1 R; h' o) B! U+ w# W, U
  454.     char szIP[50];
    # s) K; Y0 X8 H) m& Z" `& ^# \
  455.     char szDIR[300];
    ! l/ ~4 s0 U9 [9 O. w
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")). g" k( j( R; b5 S  E/ @
  457.     {: H- i6 b; q: p. m3 ^3 \7 _: P4 P
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");% T' _9 b8 n1 ]2 p9 s( I* `, h
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    1 u8 r- k# J+ L( b
  460.       strHostName=szIP;* {& ~5 q* U3 M: t4 x; v
  461.       strHostPath.Format("/%s",szDIR);0 l. ]1 o5 ~& y/ D# i7 M
  462.     }, H* Q/ c$ ~" g- M
  463.     else
    7 m6 p& v, T# o$ ]3 G, ^
  464.     {
    6 q- q3 m- ]- M0 v) U9 Y1 p, G
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ `. M9 D3 d% ]$ g- w
  466.       {
    1 M- r- ?& o) @! v4 ?* m& B
  467.         char szLanguage[50];5 l/ X# x% }0 R! K
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' T( z3 C+ V6 @; f
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    / _2 E0 i0 C$ }3 j) h* z2 ~
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 v6 ~0 e) f6 ^, {" f, L; k; R  }
  471.         else                                   m_iLanguage=ENGLISH;
    5 R) ?4 ?' j% a6 f, c) @
  472.         char szRegister[100];# U5 P" O- @0 o6 K1 A7 d
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! `, K; P5 e% t
  474.         strRegsName=szRegister;
    - a9 e( U$ \$ w  _! Q) j
  475.         char szPatchURL[100];
    " G- A/ L9 }( q
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : c8 ]8 i5 _6 J' {
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);7 p$ c, v) l% N) ^4 x0 @$ V9 l' y0 e" N
  478.       }: m4 C* O* I9 r" u0 D8 P# @* K
  479.       else5 c- ~8 U* q# w) |
  480.       {
    . i8 S8 |, r' b" Y3 W# f
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( |. `8 A* I9 W2 m4 c
  482.         strRegsName=DEFAULT_REG_URL;
    # ]5 }3 P. h1 h0 @2 [8 P: i
  483.       }
    5 Q* g" ^% Q$ {; K
  484.     }
    $ {+ |; I5 r! ~) C4 E
  485.   }
    1 a* T5 \' \# G; k' d. W) J1 j
  486.   return true;' T7 c- c; D* M6 i) |
  487. }
    5 k2 W9 z7 m3 R9 K. Q3 t

  488. 1 Y3 a2 n8 q1 L. C
  489. #include ".\ZLib\unzip.h"
    3 ^( u( G) J- u5 y
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    + ^8 V7 t$ e+ t2 V
  491. /////////////////////////////////////////////////////////////////////////////$ S% k. |- ^$ i2 m, i7 {5 @, \
  492. // CRevAppApp initialization% ~, U* s' }+ a& E+ `9 c( J% g

  493. 7 v* f& o+ N; K6 x- z; o
  494. BOOL CRevAppApp::InitInstance()
    5 f" ?4 }: J% K7 ?" [9 N
  495. {! j1 K3 F. [& }% c; m$ a' C& k! I
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];& ^3 M8 F* H+ N' v

  497. / X' S* _5 ^% {% R& ~
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    / B" W6 W" N9 X9 @1 M' x
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))! P% j  y! |" F' J, v/ R# ~
  500.   {
    2 H( w/ {# c: L6 a# i. f9 l
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");' m5 v1 C1 C5 D& W2 B. x% a
  502.     GetPathFromFullPath(szPathTarget,szPathSource);/ A5 g' P2 \' H1 A" v
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    3 w% |3 t  s+ t+ |2 `( A* k$ g
  504.     {, T. c, e" j( z- s7 o
  505.       strcpy(szPath,szPathTarget);$ |$ ^( [* F$ n6 ^
  506.       SetCurrentDirectory(szPath);$ j4 \0 A8 u5 h4 C* B
  507.     }
    * @; p4 u$ P: D) s* ], }9 E
  508.   }0 }7 q) ?6 P" \4 B6 e4 K" c
  509. #ifdef _DEBUG) g+ f' O0 b" ~
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! o8 h9 e$ V$ o* [
  511. #else
    # [! i) b$ J1 p4 H
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ O8 r$ q* h0 k& ~* B1 w0 B
  513. #endif
    , ?" ]$ |% v# H: p
  514.   {* H0 t* G2 w( |4 I- i! R: k& L
  515.     char tempFileName[MAX_PATH];
    3 @9 J* K8 k7 _  B, A
  516.     strcpy(tempFileName,szPathSource);. `) b( @9 o6 }
  517.     tempFileName[strlen(szPathSource)-12]=0;4 S3 K( v! `  q! h8 Y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    6 m/ Y: j0 D0 ]1 }
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);/ J* w5 L) W% ?; v- O: X
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);* j; P+ T9 V( H  w/ m
  521.     return TRUE;$ A- ^- [# M  e# g& }. R: Z
  522.   }. ~( R% b9 J3 M0 v. T8 G2 D
  523.   // Nuke 0118: Delete run.exe1 I& i' |& A1 D, S
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    7 D0 X2 P( w' r" A3 k
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");/ |" ?! M, R1 K
  526.   if(!ReadCfgFile("Config.ini"))' F) o8 R0 h) a) ?! ~! G+ R9 q
  527.   {$ F  D$ P; ?6 K7 _' ~" }& P, W
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    , U: L0 e* c! `; G
  529.     return TRUE;$ \! s; ]! H/ K  R; M% Z
  530.   }
    3 H+ K( N! @6 Z
  531.   HANDLE mutex;
    ' M0 o$ C" z: _& p( n0 i
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    : F/ t4 ^4 Z, }
  533.   {5 b' Z0 Y9 w1 J" t. l' T
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)" y$ i* J8 @. ^1 O
  535.     {7 L% |6 z3 h% e( a, C. s& O2 Y" h
  536.       CloseHandle(mutex);
    # [* F& Q* ]4 m9 s
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);6 P( v% T  S& e" t0 q
  538.       return TRUE;
    5 @1 w% v6 X1 ^8 a- m9 e
  539.     }+ X+ }! p6 v3 y& f. j/ c5 V
  540.   }  
    0 T' X$ E) x/ m- C  j5 M" Q
  541.   CloseHandle(mutex);
    6 l& I5 F* W# a2 h
  542. 3 O0 @- h/ d: T
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);# L4 H# U3 r2 O$ f8 ~; D3 v- l: m
  544. ) J! _7 X0 ?$ v9 r4 }( c/ i+ `
  545.         AfxEnableControlContainer();$ R& r$ {2 C7 a

  546. * `4 G2 [4 F) M2 t, t
  547.   bCanUpdate=FALSE;
    , C6 {, p* `! l- ^
  548.   dwStartUpSteps=1;
    : b& Y: l. V# c" j" m6 {* R
  549.   dwProgramState=AP_NOTHING;
    + ~5 ]0 J3 m7 t) O
  550. ! u7 }+ k6 @% Y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    5 T& @/ o" H5 N; w, i0 L, h
  552. ( ^) X$ u* ]$ `- H- H7 Z% Z
  553.         // Standard initialization9 F+ y6 h; H, v4 I  [0 M6 @
  554.         // If you are not using these features and wish to reduce the size
    5 @+ b# h5 l# }
  555.         //  of your final executable, you should remove from the following
    & l7 C% o1 m5 Y: E* ?; x& K7 R
  556.         //  the specific initialization routines you do not need.1 Q3 _6 [, l7 S. @

  557. 3 J" R, g2 @8 Q4 h. a9 e
  558. #ifdef _AFXDLL
    0 S4 w* @7 C6 A5 A) D, E6 j
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 }, r1 y. x" \% ]
  560. #else: w0 ]* _4 ^  G7 @: ~' s. P1 o
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically0 Q* P, L: n- T( ~( }( \- C* ^) J
  562. #endif
    4 d# |; t+ R# A: h* k: I

  563. # u& R' n$ _% Y( p
  564.   dlg=new CRevAppDlg;2 o8 T0 m, h3 Y) X/ ?
  565.   dlg->Create(IDD_REVAPP_DIALOG);0 V3 n5 {% a+ @
  566.   dlg->ShowWindow(SW_SHOWNORMAL);* o6 O) F7 L# Q" `$ _6 {$ |
  567.   m_pMainWnd=dlg;
    # U) @# J, P' E9 c: |" ~9 c
  568. # p! Q! y5 C4 {; V# I2 r( O3 y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 b* e7 a! M0 A* h
  570. 5 H& F9 E; w, ^+ Y
  571. //  GdiplusStartupInput gdiplusStartupInput;
    1 k, m. g  Y' c
  572. //  ULONG_PTR gdiplusToken;
    : u% X$ j" H9 @! ~" M  p% O  ^
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    - g3 N# a/ f. `9 e
  574.   |( k3 |2 W; r& e# j4 Y% s* }9 {
  575. //        CRevAppDlg dlg;2 _- A1 d  }% [: j- M- |
  576. //        int nResponse = dlg.DoModal();
    5 x( b4 D& n* d9 Y2 o
  577. //        if (nResponse == IDOK)
    . Q' ^. a' B& p9 y4 i
  578. //        {
    * C3 k2 d2 e3 f% x* W* e& `  ]# q( B
  579. //                // TODO: Place code here to handle when the dialog is5 b, C. G& O; O4 W
  580. //                //  dismissed with OK+ A" V- Z( f: k3 c
  581. //        }
    . y3 b5 w; L+ s# ]9 O; M' [3 ^
  582. //        else if (nResponse == IDCANCEL)
    ' |5 T) F) ?' e$ Y4 f( U3 w  Y! C/ d
  583. //        {6 r) X' X/ x! o3 c6 N
  584. //                // TODO: Place code here to handle when the dialog is3 S2 w( a! a1 U
  585. //                //  dismissed with Cancel
    9 |& B  P8 E& Q1 p0 o1 f
  586. //        }' S8 C2 ~4 w$ x/ C" o9 G

  587. 6 k7 Z1 b% d! h9 M. l' A9 v0 H7 E
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    : `! v, w5 o& Y" B4 M& d: D" L! L1 Z
  589.         //  application, rather than start the application's message pump.0 B8 [7 o: O" p! A% O3 A) r
  590.         return TRUE;
    ) x  L' x/ {- O
  591. }. G3 m/ s4 D# d9 \; R& F! v/ E
  592. 7 O3 `, W' [2 A; a) W2 ?+ G  _" X
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    + u% f1 C* \- P& R; u/ _0 [& Y
  594. {  L# G1 D5 [& B* K- Q! j: u1 t
  595.   int i;5 X6 h+ a, o9 e, H5 }9 W, f4 Q
  596.   char *szRet;# h1 N9 [' F: \6 x

  597. ; I/ _# v! H- k' L' @
  598.   if(pSource) { itoken=0; sztoken=pSource; }) C1 B. O' k5 `5 e4 S" N0 G- `3 T
  599.   if(sztoken)6 ?8 o  ^0 V$ k- }" G: f8 C9 `
  600.   {1 b' _( J) |' f+ U* A; w
  601.     szRet=&sztoken[itoken];& F% f3 q+ Y8 b( k
  602.     while(sztoken[itoken])" W* ?7 d- Z8 n$ D! u; ]
  603.     {; Y5 D2 P5 @  v$ k  h$ [1 P& t
  604.       for(i=0;i<(int)strlen(token);i++)
    - t6 ]6 {5 e6 ?( h+ _
  605.       {* H$ T! g' f7 [9 I6 y& I% Z2 ]" \6 w
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])1 Z+ j: }! G6 k2 g; E
  607.         {
    7 Q5 c$ K! j0 {. [4 R
  608.           sztoken[itoken++]=0;
    - n1 t' j$ g- j) {0 X; E2 o0 d4 z
  609.           sztoken[itoken++]=0;
    / J2 ?3 T" ?/ W0 N, l' w3 W5 K
  610.           return szRet;  I, V" o( ?3 P/ b0 c1 c; D( A
  611.         }1 L/ a! _5 ]( s) g- D4 L5 G) [* U
  612.       }
    . ~9 g! g2 [6 c$ m; c! K* w
  613.       itoken++;
    : H' R# `! L/ t+ F' B
  614.     }7 P, ?7 E$ f% j+ h
  615.   }* K/ J4 N. {- Q6 \5 N9 Y/ w# J/ C% D% b
  616.   return NULL;
    4 L$ G8 D: v+ ?8 Z) ~& }
  617. }$ W6 a- N& y# z# ]1 s6 D7 N' X
  618. $ `, |+ \& Q5 i, @# ~
  619. void ProcessProc(long Total,long Current)
    $ J  d9 z5 \! H* }
  620. {8 J+ e  J- O2 S9 h! X: H
  621.         MSG msg;
    / S4 t8 V" ]! b! Y" D' @9 L
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    9 E, F& X' a: L- O. D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    " `6 d; j8 j4 Z6 c- M& B
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))% h! O+ Z4 V9 z/ x9 D# K
  625.         {
    1 B1 N; B6 [. t6 u
  626.                 if(!GetMessage(&msg,NULL,0,0))  a6 h8 x) _1 Y
  627.                 {$ A4 |7 p2 U6 N5 C/ o, J1 m8 K
  628.                         return;
    - E) ]/ G0 Y' t  J+ a+ @$ D
  629.                 }- x" i: `8 g2 l  o: u+ K
  630.                 TranslateMessage(&msg);
    * E* X7 Y! ]- e& J
  631.                 DispatchMessage(&msg);
    5 ?1 K* r8 U; K- L6 V7 ^4 f
  632.         }        2 [( \. u  \+ L
  633. }" s) t3 O8 c9 D0 @2 M% E

  634. ; v$ @' U: Q8 V1 t
  635. BOOL bFirstChar=TRUE;# b9 L  b& z  ?- G  |
  636. , E$ A2 \8 n8 U5 S$ _
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    7 V5 ]$ E+ }; B1 L
  638. {/ D( r* c% c/ R8 ?! g- T2 o
  639.         // TODO: Add your specialized code here and/or call the base class" p' l$ I* a1 y- Q6 l, s% ^
  640.   switch(dwProgramState)$ l" x8 L, w- ]* R+ d" v
  641.   {
    ' j, X: s, K+ k( I* q: t. o7 b
  642.   case AP_NOTHING:( q9 E. h0 h( c  x6 O8 I
  643.     switch(dwStartUpSteps)
    % n5 z. `. g2 l3 n/ ?5 t
  644.     {- k- T1 V9 X7 v( U, X
  645.     case 1:
    & f& I5 w* n$ a2 o3 {0 H
  646.       {
    . _: n  t/ w/ \- K
  647.         int i;. Z8 ^; L& G+ e2 z( X5 B
  648.         CDC *pCDC=dlg->GetDC();# U1 v, Q  c" A9 G4 R$ F: @  t
  649.         HDC hdcwnd=pCDC->m_hDC;6 D: p" U- L& A" R5 O8 U- U' y9 F; A
  650. //        Graphics graphics(hdcwnd);7 F5 b5 B+ r+ z- ^
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    5 R( C2 b7 `7 Q  H/ p
  652. //        INT iWidth=bitmap.GetWidth();
    ' `9 u1 E2 d- x+ x+ e% N3 T( h
  653. //        INT iHeight=bitmap.GetHeight();0 L2 `+ y5 f% Z/ G
  654. //        Color color,colorTemp;3 r' C1 j  \& f, d4 @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    9 A% ?1 g) o4 @/ x1 d
  656. //        {4 L  X3 A7 }. F& G
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    9 z1 J, R$ o2 Y6 `
  658. //          {
    8 t4 ?0 g$ N! h+ o% t
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    , \/ D" ~1 w$ \) |
  660. //            colorTemp.SetValue(color.MakeARGB(5 t" r+ I: e4 y" V  T) Y; o% h
  661. //              (BYTE)(255*iColumn/iWidth),
    , z4 T; ^! ?, V. k+ k
  662. //              color.GetRed(),- Z+ t' I8 {6 }- J" S
  663. //              color.GetGreen(),
    ; W$ O7 O( ?- C) ^
  664. //              color.GetBlue()));1 |. _- t* l! o9 y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
      ^: q1 O7 s! w- C2 X
  666. //          }
    ' P5 K* B  R$ j+ |* l% U3 E
  667. //        }. ~( T* i+ ^( f& t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    . X( J6 l+ P; [, {" s/ x
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" p# g* {0 l) U: F" Y: ?  W
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    . r0 m: ?( f, Q5 S1 |- R" a
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % @+ `; ?* }9 B5 [% P+ n( N
  672.         for(i=0;i<240;i+=8)
    ( z; E9 o; J% h1 S9 m
  673.         {$ J3 \0 [; K* W+ Z' N; j# p1 E( f
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 a& R* \0 K$ j  ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . S6 I9 ~+ {& k! M3 ^# T/ c$ r
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: e9 z) G* e+ }/ x
  677.           Sleep(33);9 T* Y; q+ Z! E! O! i
  678.         }, C! h$ n" j& Y6 ]( V
  679.         Sleep(1000);
    8 L9 A! O& H& S  M- O% r% r  a
  680.         for(i=240;i>0;i-=8)3 l0 r- \# n& K* }- I# R0 V6 u4 K5 a
  681.         {
    3 O  _: Q, v: {/ S1 x* R
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 z1 q* }, |4 B
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# I8 }7 a1 G% j1 i1 m/ d
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& F+ R4 r1 W, o& T) _2 f
  685.           Sleep(33);8 j" r. c1 q- A9 V/ _
  686.         }
    6 T" P2 \0 t6 x% K+ y  e7 O
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);; s, o9 F: v7 s2 q. ^
  688.         dlg->ReleaseDC(pCDC);
    4 g8 q3 r8 O6 `0 l+ O. I
  689.         DeleteDC(hdctar);
    ' U3 f1 P% Q* K. ?
  690.         DeleteDC(hdcsrc);5 c/ U& J( t( |) e
  691.         DeleteDC(hdcorg);9 L5 j' \( S0 S( A* X
  692.       }) e4 _: }6 h1 X
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    7 e/ r! v: V8 {8 M5 Y5 i! ]5 K
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");5 Y0 i4 U6 @/ g# {  D0 ^
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    2 ]9 w2 N" _8 q/ S! U  b
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");. q" Z  c" p% J; e6 A
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, a2 C3 H9 h/ `+ g4 A0 d' e" N
  698.       if(!Dn.Connected())
    ' r7 H" o0 Z: c/ `1 e: [6 H! g
  699.       {8 u" W! R" v& S8 C; o0 N
  700.         dwTotalFiles=1;
    3 i1 y. \, f- T0 A6 u  ]9 d5 V" i7 f$ w
  701.         dwDownLoaded=0;) A2 r$ R/ p' M( M) `
  702.         bSilentStep=TRUE;$ r9 k2 p3 E2 s8 s
  703.         bCompressed=FALSE;
    / A! W3 u& Q, H( C0 G; ?
  704.         strExtLocal.Empty();
    & g1 K$ J  M4 }, v7 d( i) t( |
  705.         strFullName="readme.txt";
    # h; X% L2 M! A* U/ o) w
  706.         dwProgramState=AP_CONNECT;
    9 }2 X0 n1 r# l0 K- i
  707.       }( @$ T, E( R' X/ E
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
      Q  t' R7 \+ R4 L
  709.       dwStartUpSteps=2;2 E- K2 u7 o8 B3 O, q2 G: b. f
  710.       break;
    ; N& x2 ~" B& |% K& c* y
  711.     case 2:9 _: ^% P& k9 \6 S9 n
  712.       {
    ' V" h3 F, j8 @1 B, y
  713.         int iEOF;6 |$ ?+ }0 [1 r( z0 ~. s& g! M
  714.         FILE *fp;
    - z6 \# v/ `3 H# l9 \7 y, O
  715.         char szString[512];2 O5 H7 Y# E! ?; K% h
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 a/ i9 G$ f5 i" J
  717.         if(fp)6 j9 d$ B4 v. R& x6 c
  718.         {7 ^: h$ p' e5 |" S$ ]- [# w  y$ [7 h
  719.           do
    8 Q2 |1 m6 f7 G1 ?* x+ u3 E8 A/ y4 p+ V
  720.           {
    - t4 m; p/ c  Q/ f) L1 k
  721.             iEOF=fscanf(fp,"%s",szString);
    7 [# {& M0 {1 q- [9 O6 B
  722.             if(strlen(szString))3 G+ K8 v. o6 G$ O6 V! x0 t
  723.             {' N- B" k+ ^/ v8 z) c+ y: X
  724.               if(bFirstChar)0 Q$ Z% F; ]/ A  ?3 U3 K
  725.               {
    9 Q: \8 ]9 j* a2 w& b4 e# \) \8 t
  726.                 bFirstChar=FALSE;
    8 K% {, U9 ~  Q. z/ {
  727.                 bConnectIsBig5=FALSE;0 h8 ]5 A2 ]+ s0 ]6 |
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;  d2 L4 j. |" v/ R$ L
  729.               }
    , M) U7 P' [/ H0 q5 y+ t" L# |2 `- ^0 G
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    1 |" J- O6 j8 H$ o4 {/ l
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));6 @" g) K( }+ E
  732.               dlg->m_ListText.AddString(szString);
    - ?1 ]6 x; j! b5 l
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 }, B, F2 V1 n9 ^& j# Y
  734.               *szString=0;
    , J9 X4 R% H+ E/ f: F& t, [/ y
  735.             }" G" X! O" [0 E- q* N
  736.           } while(iEOF!=EOF);& x- h3 }/ s5 M
  737.           fclose(fp);/ X5 [5 W! R1 W8 P% [2 s' O6 ?
  738.           unlink(".\\DownLoad\\readme.txt");
    " a: m/ x  U! i, f8 Z
  739.           dwStartUpSteps=3;: m1 C0 x1 ~3 u4 E
  740.         }
    6 b- q6 p6 N8 ?
  741.       }4 P1 j+ Z- @0 \4 [+ c3 {0 E" b# q
  742.       break;
    , X2 Q' s8 \8 e
  743.     case 3:
    ; w6 R( `$ v  x7 a: m1 _% l
  744.       if(!Dn.Connected())
    ) D# M2 I+ Y+ p
  745.       {- o! y9 {7 a: x2 K
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    * o; P' D/ m; m& _
  747.         dwTotalFiles=1;! p( [; Q3 j, I3 ]  n% g/ Y
  748.         dwDownLoaded=0;- G5 [5 ~* H8 N3 T/ Q
  749.         bSilentStep=TRUE;
    1 i& j* A& y$ K0 E" I. i' f
  750.         bCompressed=FALSE;. i5 _$ d9 M# V: U. b
  751.         strExtLocal.Empty();. _4 s6 L. a$ y
  752.         strFullName="checkversion.txt";
    + Y' V) \) v% J1 }6 }' w' q
  753.         dwProgramState=AP_CONNECT;6 j; ~, X+ g) K/ x
  754.       }1 R% _+ x7 A: R- S- o+ _- }
  755.       dwStartUpSteps=4;
    : q% u: X# }' {3 ]  r
  756.       break;$ Y6 v8 B* J4 L; H0 p
  757.     case 4:% f$ Q3 g- S/ M' f8 {/ @6 p
  758.       {
    ! i1 m4 [0 g: U+ E+ Y2 N
  759.         FILE *fp;3 j9 g% Q" b& m5 h# }$ J9 j
  760.         char szString1[128];4 [6 e# O' f; [5 r
  761.         char szString2[128];
    2 h3 @9 [: W2 a# P3 @3 l+ T
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");- A+ Z( U' N  v$ u
  763.         if(fp)3 X3 o1 s. b, i; y4 ^0 [9 w
  764.         {9 v7 y' J. R0 z  I7 l; p
  765.           fscanf(fp,"%s",szString1);4 R% L1 i8 d$ P( J0 ?$ h
  766.           fclose(fp);
    - r% |. `3 E  v0 j4 @
  767.           fCheckVersion=atof(szString1);
    * c: e4 A8 @. a. d1 A
  768.           fp=fopen(".\\checkversion.dat","r");4 f7 ]1 U5 j" `2 Q+ Z
  769.           if(fp)
    9 O- a1 Z& Q4 `/ A# h/ t% a8 A" L
  770.           {; L3 s3 m. m% p( d, a
  771.             fscanf(fp,"%s",szString2);
    . O, n% t$ Y( a* \( F3 r. ?& s2 z
  772.             fclose(fp);: U! \7 b  _( U
  773.             if(atof(szString1)!=atof(szString2))( D% M4 M! f% V& ^
  774.             {
    ( v! a7 f9 ^% r; @9 u
  775.               if(!Dn.Connected())
    ( L8 @  t0 x' v3 [7 |: B- d- r7 v
  776.               {4 g" I6 U5 b3 K0 \  i; A, U
  777.                 bFirstUpdate=TRUE;% O+ ]9 S. A) e' ~
  778.                 dwTotalFiles=1;: F7 o4 h& |1 I
  779.                 dwDownLoaded=0;1 K5 ?$ ?7 D1 j( y; T& a
  780.                 bSilentStep=FALSE;
    * J. U4 w: B* X3 P" s9 }( |$ T4 F
  781.                 bCompressed=TRUE;
    0 o* _; p  s9 o7 N6 {1 x
  782.                 strExtLocal=".\\DownLoad\";( ^9 b( s7 M6 N9 @5 V/ q# {0 I7 d
  783.                 strFullName="update.txt";! H& u8 x+ e2 X& M
  784.                 dwProgramState=AP_CONNECT;
    # y! Y+ A) U; y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* j0 f/ j& L! X
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( ~! w7 X# o! _
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & T; z- {, z% c
  788. / Y: R# r( F2 E, C7 N0 l, e
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  ^4 J" O$ l6 @2 U. W6 M
  790.                 unlink(".\\DownLoad\\checkversion.txt");1 Q  b- {9 x( ^: t% Y" B* s
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)0 P& E8 A$ [1 m/ Z* m
  792.                 {9 [! m+ F8 {- q) D5 x4 n5 B4 q
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");3 }) e' E4 _% p1 i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");' b9 G) }5 D! V: p) ?1 D
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    4 r6 u( R1 x3 }3 t
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% t4 ^. i" |* N1 U- X

  797. % N! B8 D3 @0 u) r
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 t$ l1 A5 |5 ?9 H/ q" n# z
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 i  Y0 k, j; ?3 G* ], f% n& m
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");4 Z4 q% Y) X& b
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / a. E& j- r1 b3 B9 B1 ^( o
  802.                 }6 C4 e; F' }7 C, W
  803.                 dwStartUpSteps=5;
    # q, L) c& w: N$ G  F6 T# X8 ~
  804.               }$ n( |( F- h. D2 Z: E8 B
  805.             }3 R0 D0 @+ c+ w  t% s: h3 l
  806.             else# M; d" I1 o3 `( o
  807.             {
      r6 }9 ?2 S- F6 N1 F& ~
  808.               unlink(".\\DownLoad\\checkversion.txt");: M' O9 e1 n% A9 U) e
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");; O& V# M  I1 I8 v  t2 P
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");  |! s9 P3 J# R
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 r& W1 P. t: S  H. L5 M& J# V

  812. & n4 d) C/ J8 {/ {: m
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 {/ P& o/ H/ b8 D( H5 I
  814.               dwStartUpSteps=99;4 f' F/ @9 k, W" s. `+ `9 C8 C
  815.               bFinishUpdated=TRUE;
    & T, F2 g% F, S8 B" P2 w
  816.               bCanUpdate=TRUE;
    ( C" Z2 {$ R% }) u) I' q, g
  817.             }2 G* ?7 j# Y2 v0 A
  818.           }
    6 b3 t  R: H7 {  Y6 c! x
  819.           else4 q) K% x1 s  P, }8 s  ~- }5 I
  820.           {3 y' z" U/ u# t- A
  821.             if(!Dn.Connected())4 \  u( n$ l9 z/ Z7 K7 q+ a! Z: b
  822.             {
    5 \9 u; L9 W. o, w. H2 R- b" W
  823.               bFirstUpdate=TRUE;
    " e$ Z2 P. H6 i; O) ~( e) A" ?
  824.               dwTotalFiles=1;; j4 I( N  C, m) K. W
  825.               dwDownLoaded=0;
    & }4 ^" Q; \( S9 H. E. V( o
  826.               bSilentStep=FALSE;9 L. `2 N' X* k  ?0 ?$ p
  827.               bCompressed=TRUE;0 c( b) y1 C0 `8 I' w# _$ N
  828.               strExtLocal=".\\DownLoad\";
    6 e. P$ B$ {1 R7 g. m' Q! }
  829.               strFullName="update.txt";, n" J* Q9 j0 v( N' @
  830.               dwProgramState=AP_CONNECT;, H* B. U( r' ?! B9 R
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 |- W: K4 ^. A% K5 `
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! _& D0 P+ ^, M) u+ x; j; {- G/ j
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");# E; x' J* v% E( Z
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 F, \) z; f8 M: O- z
  835.               unlink(".\\DownLoad\\checkversion.txt");
    / T3 f) ]7 v6 P3 P% ]
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)- q$ W) K( q: {, _0 z
  837.               {8 e7 m0 ^" V/ N: Y% P# Q/ [  ]( y8 w* n
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");& q! Z% C* Q. o/ o* y0 \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    " ~7 N; {& J3 P& J$ |* x: |. d: \0 S3 U
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    * A9 R$ R. u3 b* F+ z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , m& h1 I7 O$ p5 y
  842.                
    ; y7 A$ e* A) H6 _( `  ?% p9 H7 I7 s8 C
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");+ X+ W/ E" s+ n9 Z6 X# z
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . N  h  U9 L" y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    # C6 {4 p3 u* A/ H. M8 T0 ]8 ]
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, N" _% r# p0 u$ t0 R
  847.               }
    + m" v- k! j# G; k0 ~' y6 i
  848.               dwStartUpSteps=5;
    5 Z9 P/ p: S5 A' g7 w3 j
  849.             }
    " h" P9 ]5 \# w. w5 q
  850.           }! L$ P& Y  y4 |7 u" n! X  f
  851.         }
    0 s. }& P) e: O% E, {
  852.         else- p& J4 v! _& n( L8 v: ]: z
  853.         {
    ( E4 p2 J% F" g+ \& L
  854.           dwStartUpSteps=3;
    + D; v. |$ L% g2 D8 ]; `, ]4 u! U0 y
  855.         }
    9 j+ H" r! z" y7 Y  Z
  856.       }
    # X3 @; g0 |0 R( L/ h  C5 R  _
  857.       break;
    1 d4 H2 Y6 W$ v& c
  858.     case 5:1 A7 Q/ c) U7 [
  859.       {1 j. a- s1 P7 w+ j6 p
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    6 F$ `* z' H! U+ U& A7 v9 ~* _
  861.         {
    8 q! o7 g- C/ \- P" R" A
  862.           int opt_overwrite=1;
    % P5 j" C3 t+ ^' a9 I. b0 c
  863.           int opt_do_extract_withoutpath=0;, X8 Z' I% @9 V4 z8 y
  864.           unzFile uf=NULL;# Y3 o! W& D5 @& i- s% V

  865. * O0 z: W: O! `
  866.           uf=unzOpen("Wsa.zip");
    ; e4 Z! H$ q% t6 E: P% d
  867.           if(uf). E8 k4 k* f- X3 m9 X( |- ^8 D
  868.           {
    7 K! G8 @# M+ u3 L0 h+ J
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    1 N: Y, C! O* j" b
  870.             unzClose(uf);' u$ ?0 Q. R4 A" Y4 |* K
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");  h' {1 }  K+ P1 ^: C3 e
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    , r5 {+ ?# i1 G2 M* n: x% f" s
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");8 E7 T4 ?7 b" `& O9 {
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 B* q! G' ?( v& v  v# p0 a* j; g' U
  875.           }
    " V4 @, X/ v1 v/ d
  876.           DeleteFile("Wsa.zip" );
    1 U) R( }$ Z  l; O! u
  877.         }
    " e7 w# ~/ p& }- S- [
  878. $ f& |+ W+ i- P- g. n5 y
  879.         if(CheckLocalVersion())/ A8 P/ V  Y$ _. {4 ~
  880.         {
    ( N7 ]. j3 I( H) I# K1 h  _
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");! N; K# l0 H2 ]6 q  l5 Q" X7 f, s; ]
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");( w$ j4 S+ O: Z7 c3 y' C  g
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");) E, v8 k7 m* j
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( f$ J! Q: O* v; x. L, m
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);% T% C; q( I# |" C% f( ]
  886.           dwStartUpSteps=99;
    0 c' i0 V% B3 `$ T6 _9 Z& [; J# l
  887.         }
    1 l" r/ u! y( o$ S
  888.         else1 f, s6 B. m. ]
  889.         {0 l% ]" S8 R9 w2 q$ j) B
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  P1 ?+ J5 `/ M
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % G5 k+ p0 A. |
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");- f7 A1 {* a, o3 K: _

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-23 01:50

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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