找回密碼
 立即注册

CSUpdate.exe源代码

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

; ]: d; q; d" Q* g$ A: Y6 S
  1. / RevApp.cpp : Defines the class behaviors for the application.5 `/ h6 p& \6 x$ B; G3 A
  2. //. [! M, {- w: g7 I* i

  3. 2 |0 z, J: F; j7 Y0 x5 W
  4. #include "stdafx.h"
    . ]( w: h5 Y# j6 @8 K
  5. 8 W" C/ Z! R- t
  6. //#define UNICODE2 a4 f9 T' k" E2 V
  7. //#include <gdiplus.h>
    : D: g% \1 Z7 @6 H) \- B
  8. //using namespace Gdiplus;- s3 M  |% m8 x6 a

  9. 5 ~2 N* p  |$ k5 Y1 `1 B& L$ F
  10. #include "RevApp.h"  a% T2 p9 O" k4 [1 C  k) N8 X) F' c
  11. #include "RevAppDlg.h"
    & G* ]7 I4 Q! i7 L$ `8 V5 x% C1 s
  12. 6 a; w! u' p9 v& Z; O8 h, \
  13. #pragma warning(disable:4786)+ F( L& W! e5 c3 ?& H& F
  14. #include <map>9 b0 i, c3 h9 ~8 @& j; x! F
  15. #include <list>
    - r9 n- R9 j7 O! l" s9 b# y
  16. #include <direct.h>9 D+ d( ~/ {1 D! U  [7 G
  17. 4 N) X9 g# }1 H; f( p
  18. #ifdef _DEBUG! Z3 q; m8 R* L6 N5 S5 _4 H7 X
  19. #define new DEBUG_NEW
    ! m4 C8 I* x0 `8 E4 s4 g8 i" a
  20. #undef THIS_FILE
    / u2 s- Q0 P1 o7 n
  21. static char THIS_FILE[] = __FILE__;" e) \+ O4 p7 `$ a; i9 z3 [
  22. #endif
    ) e3 j, u& i# |
  23. #include "SkinResDef.h"
    8 @& L( M" S# v3 ?  N, h
  24. #include "ChangeBG.h"
    , t7 Q' k" A) S! A9 r; l# ~
  25. #include "AFXINET.H"
    - E% Y4 a0 z" `2 N! G+ s

  26. 9 _, M+ @2 I5 U
  27. #define TRADITIONAL_CHINESE 0
    6 n( V4 x: `' p) s3 K# i( ?
  28. #define SIMPLIFY_CHINESE 18 J* }* W" m0 A+ Q' Z  V7 J% ^
  29. #define ENGLISH 28 [; q! F$ ]( g
  30. int m_iLanguage = ENGLISH;3 H4 ]9 ?" o: Q5 t7 s* Y
  31. /////////////////////////////////////////////////////////////////////////////
    0 c, M6 q- o, C& y1 w  B) J6 V) y
  32. // CRevAppApp" N3 z3 z5 h7 Y& ]% X3 }3 Z+ @# p+ {! [
  33. - ~* D* ]1 V9 j- I, V
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)0 C' m0 h4 d$ w+ n+ a7 m+ N4 M
  35.         //{{AFX_MSG_MAP(CRevAppApp)0 m; w: _. v; C% s
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.9 |: k6 m* v: }7 y
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    4 S% O; k* ~0 I" y' J4 p
  38.         //}}AFX_MSG/ y# L3 z* x# T
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    0 r2 l" ?' W2 y+ W+ c) N
  40. END_MESSAGE_MAP()
    . S& j9 R1 s9 V% g/ \
  41. % D* d" t2 {( l2 R. P5 Q( L
  42. /////////////////////////////////////////////////////////////////////////////
    0 g; q& B7 p: |( g5 n' Q* x' x( @
  43. // CRevAppApp construction' q; [! {5 V5 C0 t5 @0 C) u
  44. + r" @/ m5 P7 j4 G
  45. CRevAppApp::CRevAppApp()
    3 n9 `- o0 X9 N4 E% D
  46. {
    ) B4 A7 U+ E+ W+ [  s! j
  47.         // TODO: add construction code here,
    : R) D, }+ {. @. [" y9 K
  48.         // Place all significant initialization in InitInstance
    2 ]8 \  p1 M, H7 J' `. E
  49.   bDisplayIsBig5=FALSE;+ |5 V8 Z4 X# O! j
  50.   bRestartUpdater=FALSE;0 v/ X! r8 \( Q
  51.   bFinishUpdated=FALSE;
    ; Z( H+ O8 p9 }  C' a$ E9 d2 Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    # U! ?0 i0 G2 m" ^
  53.   InitChangeDataBig52GBKS();
    / i3 {( x) l( |: c1 P3 }4 J
  54.   InitChangeDataGBKS2Big5();9 c: C2 i, s' h. E
  55.         //
    3 h2 u4 K, l* S  s: a7 a
  56.         bClickRunExe = FALSE;
    ( R. ^" |% v) }5 o
  57.         //
    , V% D7 f6 H# A: T4 E' Z9 c
  58. }
    % }5 I7 S% r5 K: b  o3 b
  59. + \0 g! G5 i' K$ Z% Z
  60. CRevAppApp::~CRevAppApp()" m' v$ D$ W. D  T3 f/ h
  61. {+ q# G  b/ d/ d3 V
  62.         // TODO: add construction code here,+ h% }/ t9 D3 a4 ^2 T
  63.         // Place all significant initialization in InitInstance
    3 U" p& v" F' H1 J6 b
  64.   EndChangeData();- I9 C3 Z. g' N* A4 i- j& j% f
  65. }  |( U3 F. e: V9 L

  66. ; B  t& @# j0 Q4 d" F4 ?' z
  67. /////////////////////////////////////////////////////////////////////////////
      b! K7 @9 ~4 m- B8 e) F* p
  68. // The one and only CRevAppApp object
    / C5 c$ G% h# b6 b3 j' k

  69. ; O0 K5 \% z) {4 T# V
  70. CRevAppApp theApp;
    . k% m- Y" F! [+ o

  71. # m1 F( F. u$ }) Z" c
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)3 {" z- X$ F3 _. d# |3 v8 {' {
  73. {- a  o+ \' J6 _' q* a6 W; ~
  74.   int iEOF=0;* a# s2 L+ o# y$ [1 n
  75.   char szTempName[MAX_PATH];
    ) u- D" u6 W( K+ D
  76.   *szFileName=0;2 C5 t, W1 e  F9 |$ D* C
  77.   iEOF=fscanf(fp,"%s",szTempName);
      F" u5 G- C5 i: W+ m
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('). _3 Z) x( w  a6 l
  79.   {
    9 V+ @# a" F) o$ n5 `9 w
  80.     strcpy(szFileName,&szTempName[1]);
    4 E& d. h  H. `0 u" p' G5 k# H
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) U  C, C8 }" o3 F2 g7 ?
  82.     {
    2 I% L% e5 M+ y2 y' y
  83.       iEOF=fscanf(fp,"%s",szTempName);) U+ X& l( B. d
  84.       strcat(szFileName," ");$ S! T" d  }: D6 _$ c" l7 R! w
  85.       strcat(szFileName,szTempName);
    . e) s" h" ]3 V* o2 K$ B
  86.     }9 |+ u+ ]6 B4 @
  87.     if(strlen(szFileName)>=1)) z" e7 E8 a/ u% o6 i$ O; v( h
  88.     {: N, y: i/ G" h: T- b
  89.       szFileName[strlen(szFileName)-1]=0;
    % h6 r8 s7 n* f# F# h* S# g
  90.     }+ q% N( a7 T7 c" w7 p$ i- Y/ {& w
  91.   }; _9 G6 |( m& Z# V) F6 n
  92.   return szFileName;
    ; J, Y6 W$ Q- N5 D  B! b3 e
  93. }) P4 P6 t7 M  P# w; y' }

  94. # i. {6 w# C1 ~5 Y9 |7 p; \3 c
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    2 L* m  }( C; f* T( z0 k
  96. {! I- `! S% |; W! _. K% I: w" l# d
  97.   FILE *fp;: i% ^) e0 b) ]1 S) S5 }
  98.   char *key=NULL;* n7 e( U, o# _8 C. L
  99.   char version[MAX_PATH];. c4 B3 r3 h, }2 U
  100.   LPUPDATEFILE file,olds;1 m: R2 A% Y- [  q+ r
  101.   std::map<CString,LPUPDATEFILE>::iterator p;: j! `0 E, U, z; @! p! ]2 m

  102. + c$ K) ~) C5 g: Q: Y3 _4 J
  103.   UpdateList.clear();
    & p$ A/ m; f7 _/ Z& \$ [7 H
  104.   UpdateFile.clear();
    0 \! u( |' v- M4 r
  105.   if(GetFileAttributes(filename)==-1) return false;- H& n: A, \7 g
  106.   if(!(fp=fopen(filename,"r"))) return false;
    5 X+ w) Z. N/ i5 o: k
  107.   fscanf(fp,"%s",version);5 f3 F1 }! m# u2 v( D
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    3 S$ F5 S  ]0 f4 L7 l: a
  109.   while(fscanf(fp,"%s",version)!=EOF)- }+ q7 M6 N1 C- E6 e4 b3 C
  110.   {
      q7 T( y7 l7 g) `6 M4 C, P- V
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 P3 L0 t+ b# p" Y+ z4 I
  112.     fscanf(fp,"%s",file->path);
    8 d& U$ Z; v9 ^7 ^4 |
  113.     ReadFileNames(fp,file->file);
    . {3 k+ x5 \8 k7 m& A$ s1 y% v, v
  114.     strcpy(file->full,".");8 {7 o& y; ~/ Y1 _
  115.     strcat(file->full,file->path);. B9 |' p% ^7 D! K  k# X% o
  116.     strcat(file->full,file->file);% _* R: O! W8 E8 y( y& T
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())+ o/ _: W* G6 z2 a) r& g
  118.     {& a7 X: o6 a  ~+ D3 T+ v7 a0 f
  119.       file->vers=(float)atof(version);
    , N, @" R1 l+ Y! O$ A3 }
  120.       UpdateList.push_back(file->full);
    ( e) T0 B# s5 ~7 J4 ^( D
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));% w) s4 ?) x2 p$ d" ^# q& k- i' E2 c
  122.     }
    3 J, T, ~' N: c& z
  123.     else
    5 G/ _- K& C' z' |
  124.     {
    / [7 K6 D8 Z1 o9 A; B
  125.       olds=(*p).second;
    % C" [* H. K5 h: B
  126.       if(olds->vers<(float)atof(version))
    3 {' S; X4 Y5 j& H
  127.       {
    ) @. K$ k) S! s. e
  128.         olds->vers=(float)atof(version);# o9 A5 ]# Y8 v; \  \' H
  129.       }
    + d; X) K* d& J3 x5 n
  130.       free(file);
    * U9 G1 {$ O8 @- @; y) t* w0 C" m
  131.     }" m: S% }) O" L
  132.   }% ]6 D; A+ e. @  z
  133.   fclose(fp);  B, o8 ?) C4 I: L" J* x
  134.   return true;
    5 U5 L( v) j) f* ?# ^* H) W
  135. }
    2 H3 a9 ~3 Q/ O
  136. & t0 `2 X, _5 ]9 O7 C, K
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath), u. l" a; `' v8 \+ g  I
  138. {  p. R3 I/ t# Q. `. f8 l2 l
  139.   TCHAR  szFull[MAX_PATH];
      W& N1 b; r4 z
  140.   TCHAR *token,*inter;2 }4 t$ w' K7 ^( ?
  141.   *szPath=0;
    ; v8 N  _6 h' z- @6 b* K* X0 G& o
  142.   strcpy(szFull,szFullPath);6 M" o, Z& N7 Y1 Y& z& G) X
  143.   token=strtok(szFull,"\\/");
    : E+ @9 y( Q* l0 u+ i' F1 ~# Z% R
  144.   inter=token;  J$ r7 e1 r. z) L
  145.   while(token=strtok(NULL,"\\/"))
    $ c( y/ w: q/ ~! A8 n
  146.   {7 z. P) ~+ A; P$ R) l
  147.     strcat(szPath,inter);
    - W; H8 W) S) s- }8 G! H' o/ G2 v+ O
  148.     strcat(szPath,"\");
    - b9 d0 C2 f& k3 M: F1 a" h) g
  149.     inter=token;
    3 P, a1 n" Z- Z
  150.   }
    / l7 z$ |4 O7 @+ T) d2 z
  151.   return strlen(szPath);
    9 i4 r2 c' ^8 L0 D9 f& }
  152. }) r8 V; h2 ]/ P

  153. " [7 K  a2 {, [: O& b" n: C
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    + F' s/ o4 v4 K$ O6 O# u; }- x
  155. {
    ' Z( K! [: _( W: p- c2 H. v
  156.   DWORD attrib=GetFileAttributes(Target);" A/ C6 @$ x" Q' L3 ~) e& t% M% E: t
  157.   if(attrib!=-1)8 Z8 |) `1 p3 [7 a
  158.   {; _- X3 L# o( H% }$ \  r
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))% i/ {' S, _) |. B) J
  160.     {
    ( y9 k# A% ]% W! |% ?# y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);0 z% k" x4 Z: c' v' O. g
  162.       SetFileAttributes(Target,attrib);
    / b. }' g0 Q$ k. w' v! r
  163.     }7 k; V2 O* ?5 ?. U/ ?$ T, x
  164.   }
    5 E6 }& i6 ?8 \
  165.   CopyFile(Source,Target,Erase);
    ) {4 _4 x5 y, t7 A5 c: ]7 V" V
  166. }
      ^7 M+ b: M0 X7 D
  167. + B% |; p2 T( G4 D6 [/ G
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    % x8 ]  c1 g; I
  169. {
    8 Z) w, k& w" J. a
  170.      FILE *fp;, b% f4 ]& j* E. N( a
  171.      char  szBuffer[8192];2 P2 N% O2 ^# i) {9 d/ E8 N
  172.   va_list  argptr;
    ) O$ X+ B& b2 a
  173. 1 ~- e8 I) |. P( W' U4 R" e: f2 M
  174.         va_start(argptr,message);8 X  E& P3 e9 @8 c, p. J
  175.         vsprintf(szBuffer,message,argptr);' z1 P* h9 Y0 R! _
  176.         va_end(argptr);! |1 g: Y- s& ^' _( e  k* k2 G- j5 y/ ~
  177.   fp=fopen(FileName,"a");
    8 }0 c9 m  b$ @
  178.   if(fp)
    5 `$ `. E1 d+ n# n; A0 G  L, d( W
  179.   {2 l2 \6 Q: @, N4 g
  180.     fprintf(fp,szBuffer);
    1 R6 d/ P9 Z) E- X9 b8 n1 s4 F
  181.     fclose(fp);9 E5 U2 }+ U* o6 \7 f+ ?
  182.           _flushall();+ ~2 i% ~) X2 }! ^5 L. v
  183.   }
    ( K. d) \" r* t- Q
  184. }1 g& W' t# g1 B! p+ p7 m
  185. - i5 q, \, S9 O& ?7 a$ @0 w: y* I
  186. BOOL CRevAppApp::Fclearf(char *FileName): c5 S' a/ y. V" C, @
  187. {
    ( m  B# Z: q+ B5 A$ {  ]. a7 p
  188.      FILE *fp;
    - `- W* l; [( w$ |; s
  189.     DWORD  attrib;
    0 X. E5 H0 y- {% U. l0 @$ H
  190.   attrib=GetFileAttributes(FileName);% n7 b0 Q# [1 Z, Z% m/ p
  191.   if(attrib!=-1)9 ~! v% Q$ _$ L1 @
  192.   {
    , ?1 P/ L8 G) \% s. ^* {
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    : D4 n& b0 \& c3 U
  194.     if(!SetFileAttributes(FileName,attrib))# \3 i, F% J# P. y
  195.     {/ ~: C1 N. j+ P
  196.       return FALSE;( {9 R) B: t! @! l9 a6 j
  197.     }& ]- [' w! G" U; f. e& v) L0 {
  198.   }
    ' k; H' m5 e/ I! p) Q
  199.   fp=fopen(FileName,"wb");
    * B# e3 P% C; l/ _* b$ Q2 Z
  200.   if(fp)2 u; r# a6 {5 [, K- s  {. x& e  x
  201.   {. l9 D1 r: z& u: K3 t! o
  202.     fclose(fp);; v. V$ n2 `6 g/ ]8 U* J% \) {4 q
  203.   }
    * e0 h' [5 m6 c$ a' j9 p
  204.   return TRUE;
    & X$ ?! H/ L! S& C1 Z4 s
  205. }' V3 e* n. R# c) T9 a& G8 Q2 R

  206. % j* y1 ^! A) o( E% Q) m% Z" M/ p
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 l$ U* g- c/ ^
  208. {/ M' D" s5 @% h6 {
  209.   char filename[MAX_PATH];/ X% U2 `! ]" M" S6 O
  210.   LPUPDATEFILE file,olds;
    0 E. ~0 Q# D1 V$ E  V1 C& N
  211.   std::map<int,CString>::iterator i;
    % h! {4 E8 I  y6 i3 C5 {$ M5 i% J
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 k; Q& C% D7 ?4 M/ l' {( k
  213.   std::list<CString>::iterator l;: e# ]: s) |" R

  214. / X  r+ h. D; X% U# p! u
  215.   if(bFirstUpdate)) r/ {: g$ ^* N9 c. C. v
  216.   {
    ( `# n1 D& Z' k/ d
  217.     dwCurrFile=0;
    3 A' Y; r9 ]: d9 e$ I
  218.     bFirstUpdate=FALSE;
    ' l  ]5 s+ ?  d! z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# @8 u5 |+ H, k3 E- m5 ?; H) w& j
  220.     {
    . D& E% M3 Y2 P$ j( t
  221.       dwTotalFiles=UpdateLocal.size();
    - K6 Y4 {4 c7 C8 R
  222.       dwDownLoaded=0;5 \0 [" Q/ `! L6 m
  223.       bSilentStep=FALSE;
    $ r- T( ?; d% u
  224.       bCompressed=TRUE;
    ' Q8 w2 J+ X$ T+ T
  225.       strExtLocal.Empty();
    9 h& ]" @8 `7 n/ t- [: b7 n
  226.       strFullName=(*i).second;
    , U' E- w$ j& n  {5 z% m) k$ k9 V
  227.       dwProgramState=AP_CONNECT;/ T2 t5 y1 P4 n( s6 [
  228.       return TRUE;
    * ]1 ~) j. X2 [( d5 c
  229.     }* q- y; w" W0 g2 J% F" x9 i2 `2 V
  230.   }. g; M  e% G& Q
  231.   else if(bRestartUpdater==FALSE)
    - u7 |* N" ]. |7 y! L1 R
  232.   {% ~6 }  G  v+ F+ \& |) s
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())" F6 R" A: d( ^! F0 d, t1 v
  234.     {
    / S, R( o. m" E, i( j, H
  235.       file=(*p).second;
    2 u5 N/ a8 T- s7 ~+ G, ]
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    0 F, P# M: C. J
  237.       {' w* Q* p5 G4 S+ K5 P- d
  238.         olds=(*p).second;2 K3 a) z6 M* i* ~$ _8 \
  239.         olds->vers=file->vers;; m, i2 \9 U! ]3 h8 s* I; u
  240.       }- V" g2 A+ Z( t4 ?# O
  241.       else8 v) C$ ?' D5 H2 c# u( X& G
  242.       {: ?" k5 S; Y5 r2 L# F$ L
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ I) p/ f! j  w1 H
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ' V7 H( l  `/ y8 {6 K0 i# d
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));6 G6 G, o& v7 v2 U9 t, z
  246.       }
    4 n# n6 c( d% ]" p. A
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");$ y  K4 |: G( r
  248.       sprintf(filename,"(%s)",file->file);
    + Y& \  g: l" ?4 g
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ `' `* A. H& U' [
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    % Z- U( h. J5 J" ~
  251.     }
    # Y: N4 ]$ Z- Z3 C' S' j. C: a
  252.     dwCurrFile++;
    ) A4 F2 V/ y: \( q2 U
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% D/ Q, Z0 U/ N; N, t
  254.     {# K/ t# F  v& U; @# p
  255.       bSilentStep=FALSE;
      C, M1 w8 S" m4 U
  256.       bCompressed=TRUE;* v( i; N! k3 ]0 d
  257.       strExtLocal.Empty();
    " f6 K+ U& c2 e. X; h2 |, f# G
  258.       strFullName=(*i).second;: p, A2 T/ ~0 H% K
  259.       dwProgramState=AP_CONNECT;
    : ~( |) p0 z) t, ?, \
  260.       return TRUE;1 Q/ P6 Q, `& x* U$ M
  261.     }* k, L0 ?4 I4 u: G) x
  262.     if(!bRestartUpdater)  }# ]0 Y$ F, q( z7 R7 l9 H" |
  263.     {* t  o, P3 ], M) `+ p+ C/ x
  264.       int iCurrSize,iFileSize;8 Z8 E6 o3 k" m5 U9 z7 }% @; f. M, d
  265.       iCurrSize=0;2 I/ C. X5 u' h3 U8 M' v7 M* w
  266.       iFileSize=UpdateList2.size();
    + ^6 W; d6 v" Z# v
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");& J+ `( G/ r, T6 \9 a
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ! ~- `9 ~$ ^7 @* f4 V$ u& Z
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ( k4 \- S0 p* @7 }8 I0 D5 k# u( N
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; V- f7 P- b4 f: ~7 ?
  271.       Fclearf(".\\update.dat");$ T  v6 C8 b; W3 z
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    , o" ?9 t4 t# c5 y, L) I
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)' P5 Z/ L9 Z) `1 Q4 K
  274.       {
    ' Z5 V' Y/ C; G' {9 Q, p
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())$ e0 C# C3 {9 T$ A, C) d
  276.         {
      x% L1 d3 r( C: h+ `- r- M: H6 t
  277.           file=(*p).second;$ E& \: N# p! f9 O
  278.           sprintf(filename,"(%s)",file->file);
    ; Y. U3 f& f* H4 D3 a3 i$ ?
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 g& G* I& m) U$ I) S2 [
  280.           iCurrSize++;* I# X  I7 |3 a* G1 \) E
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));' n1 E& a3 `, x2 k! a6 R& z3 j
  282.         }
    - ]* x6 r, A! d$ u$ G
  283.       }( i' P/ W. k1 {: t) Y
  284.       unlink(".\\update.txt");; p- ?3 E( x" y. \. i( A
  285.       unlink(".\\update.tmp");( f! l" Y* H* C
  286.       Fclearf(".\\checkversion.dat");, F3 `) V7 ]. {4 G4 c2 [, A
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);- {. |# S# ~/ o" ^7 Q' ?+ Y# p
  288.       if(UpdateLocal.size())1 S( p- G$ S) |
  289.       {3 @  F; R+ a# V/ C$ c# ]
  290.         UpdateLocal.clear();( J/ K( N' W' a; I$ z
  291.       }. h; E, L+ q& f- G+ b  g' I
  292.       if(UpdateFile3.size())
    8 M% t: x9 w& R) x; i  z  K
  293.       {
    5 o- I0 `$ W( H/ B
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % c2 r5 R( e+ e5 _
  295.         {
    ; `/ G, a# e4 A3 ?# q
  296.           file=(*p).second;
    , P3 a6 c9 m/ _
  297.           free(file);- W& {2 g* B8 }
  298.         }
    & u2 M* y$ e8 B+ @5 ^0 c
  299.         UpdateFile3.clear();1 V1 m( c$ d+ m% g- H" ~
  300.         UpdateList3.clear();' g: d, r4 G3 t* _* ?
  301.       }5 b$ U$ S; e( B0 a0 ?2 Q+ K
  302.       if(UpdateFile2.size())) b; c( s" L; l) R2 u( ]
  303.       {" j/ k  a& w2 [  Q
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)5 @; |2 C6 _3 M: K5 D/ j+ f( ]0 g
  305.         {0 E. i# y: N  L2 u9 Q
  306.           file=(*p).second;7 k1 H5 ?+ n/ ?- b8 k
  307.           free(file);5 [' B3 A7 t& X
  308.         }
    7 v; E9 @% Q; q6 x& e
  309.         UpdateFile2.clear();
    8 [5 \0 P0 H- y) x
  310.         UpdateList2.clear();
    ; w# u$ v- m' T, I1 \2 L
  311.       }4 N: q5 ~5 I$ u6 J" W$ f4 i3 m! y
  312.       if(UpdateFile1.size())
    # q% ~( S4 O- [7 _( ^3 R# ]# }
  313.       {
    % a' E  L3 u/ M( P3 A# D) \" U
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ }% X) ~2 b  L+ [7 }1 V) n" |
  315.         {  j0 A) @* F  j$ q: ~. M& H: Z3 r
  316.           file=(*p).second;
    6 C- b/ k/ K; l# s3 l6 h6 G
  317.           free(file);
      Q3 d% \& Q7 G/ r' f
  318.         }
    " W8 o4 t* J3 ]) @5 ]
  319.         UpdateFile1.clear();1 w! b+ ^" }+ P" r
  320.         UpdateList1.clear();
    : g" ~/ U, G+ j, S& i( C
  321.       }
    . G: \6 U5 ]3 D) x! r1 `
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));6 i5 O) i5 k/ c/ t7 C
  323.     }
    1 x  r' x  j" t
  324.   }
    * J/ j" n/ m" O+ y1 |
  325.   return FALSE;$ `( d& B( P2 U3 G7 G! f
  326. }
    8 z  S/ k  A* A5 K8 v

  327. ! i( h" l" D; x2 O# L
  328. void CRevAppApp::ClearAll(void)4 C" ~  @5 @, _* [. K3 I# k& K. h: `
  329. {5 `& P7 \4 a0 \" V# t6 P
  330.   LPUPDATEFILE file;' }7 t; d( I2 O0 m- V" x0 l; `
  331.   std::map<CString,LPUPDATEFILE>::iterator p;* i8 d2 {) j; q/ q* r! J9 M
  332. # N7 \& F4 W1 I8 u' S- ~( z1 x
  333.   if(UpdateLocal.size())
    $ ], ]7 f3 Z$ }7 {: d: d* j9 c
  334.   {/ |; i; v. b( G
  335.     UpdateLocal.clear();
    8 Q$ `6 j& R2 J- k0 Q  h9 z
  336.   }' V; T: H$ Y  d
  337.   if(UpdateFile3.size())* w. U. ]5 ]: r4 N% C8 d) ^
  338.   {6 j& c$ O2 K8 U- b" b; |
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* R: \; v; r1 X6 t" K+ l
  340.     {4 z9 L! v! I2 x  {# O& D! x
  341.       file=(*p).second;
    ; }; U" P2 `1 V- E' s1 r
  342.       free(file);$ j. p% b! M0 W$ n# ~$ b
  343.     }7 H) \+ a' ]  x2 m
  344.     UpdateFile3.clear();
    3 Q- ~# Q# E# L8 m$ }
  345.     UpdateList3.clear();" H+ A! z8 C, M' K- m# l
  346.   }& Y6 A  z/ f5 K0 S
  347.   if(UpdateFile2.size())
      S3 ^" O8 B; D! D6 I) ?; @$ ]
  348.   {0 d* S' z' y9 X9 j0 X! o" o% v
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( W; ?- \! {& ]# x
  350.     {
    - Z, o0 F4 L$ `  f
  351.       file=(*p).second;: s, n( R% O: N! B7 e
  352.       free(file);
    + N6 j/ y" w4 x& u) T/ y- O
  353.     }
    ! {7 [% ?9 h2 Q$ q9 u- J3 ~! F
  354.     UpdateFile2.clear();! `6 U/ a+ U* v# B( s! y; w" g
  355.     UpdateList2.clear();' n6 q- o$ ^3 E, ]
  356.   }" X0 W" V4 a3 x+ e
  357.   if(UpdateFile1.size())! l$ W, e6 k- E6 P8 h5 d
  358.   {3 c3 b$ }* l) @% n
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , Z! `  N) \' m6 P  K4 N7 R
  360.     {
    ' D9 L$ ~& v2 Y2 e: V6 e
  361.       file=(*p).second;3 ?6 A! l% B, H$ e
  362.       free(file);. b" a+ b6 m0 B0 L
  363.     }
    + m- J# }. `/ c3 h+ s% x
  364.     UpdateFile1.clear();  z) D5 C7 C/ t! b8 k- S
  365.     UpdateList1.clear();/ R0 N* E+ D7 F0 Q+ ~3 C
  366.   }
    + Y( J3 w% Z2 G7 s. A2 N2 }4 }
  367. }  
    & N+ L9 H1 E* c- i
  368.   0 [, }) U' b( w( [' o3 ]
  369. BOOL CRevAppApp::CheckLocalVersion(void)) _& B) v+ `0 [/ I9 J, o1 C
  370. {
    : x) ^5 h" |" C: z  r) j
  371.   int c;
    8 b- m+ m" t8 @9 E! ]
  372.   LPUPDATEFILE file1,file2;$ a3 h& }- P' E3 u8 `9 j* Z% `
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    9 A5 j3 P5 p5 K: ~0 w
  374.   std::list<CString>::iterator l;
    & ]' X$ D: c( K6 a
  375. % n$ p# R8 }1 \: P: {$ ~( j6 q# U" `
  376.   UpdateLocal.clear();
    % V, i! T9 [' G, y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 p8 o$ N5 _1 A+ T* o
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);* V0 b+ T) C* q. b3 b+ T% V
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);) G  ^0 x6 ^9 z5 g$ {
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);" u/ o4 a5 @- [4 O; a5 u( `: S5 _" J
  381.   if(UpdateFile3.size())
    / T" ~& P* w' k) @4 W2 k
  382.   {8 A1 l0 a9 m1 b, p6 Q( O
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    : ~3 A& X( O7 ^- \% _
  384.     {
    7 k9 q  K& H! y( b6 Q9 W: B5 l  ]
  385.       file2=(LPUPDATEFILE)(*i).second;- l! v2 i+ U# i- [# s2 [
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 d$ I& z  e" H! e
  387.       {
    $ R  ?' J: d- G* w! @! R
  388.         file1=(LPUPDATEFILE)(*p).second;
    / r; |# r5 U) ^" i
  389.         file1->vers=file2->vers;
    / g$ h- J- i$ @" l3 ]" S- a% G/ l
  390.       }& D, T5 C1 V) t" R+ q' z$ f" d6 n1 M
  391.       else
    , i; D7 j2 Q, n: q7 f, t# S
  392.       {4 ~0 K) L; j  O9 G% Q4 \" Y3 y3 @
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' f) W: e& `! ?
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));: l3 p! j* Q/ c, l- Y9 ~
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ! L) N4 \3 q. W# W1 [
  396.       }5 ?" D' L7 m9 U/ a
  397.     }
    5 J' D5 B+ t; S# ~/ Z3 f4 Z
  398.   }
    $ Y+ j4 X4 z/ ]' B# q
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & e7 _; ]& J3 z: \2 I9 D) D) o6 Z
  400.   {& m" Z! r1 p1 P8 k
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())) F% t7 |8 t* l) L4 I6 R
  402.     {
    ! `$ v+ e- A" M- r
  403.       file2=(LPUPDATEFILE)(*i).second;
    % G4 y; A& }: }6 k8 n; b
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 C5 i/ @) K# v# Z* w4 e& L  E4 X
  405.       {6 x2 S4 ~' \& z) n. ?* Z& i) D9 J
  406.         file1=(LPUPDATEFILE)(*p).second;# a* ~  A# d, Y; j  w
  407.         if(file1->vers!=file2->vers)
    $ T) S1 J, e5 G- Q. @" X
  408.         {4 q$ p# }, o. B% w8 Y" O: G/ q# q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / \# c( `8 u& _
  410.           c++;0 f* }8 V! Q, ?* q) D5 s/ H7 P
  411.         }4 `/ L( e  Z1 m+ ~# F
  412.       }6 |3 h/ w/ {7 U; i; D1 {+ t' ?
  413.       else
    ) K! L: u$ @. h0 f0 x8 e3 I
  414.       {& o: F% c+ E% [+ C9 @! V
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * u( z) q' g( h& H' J; O) }) G  Y+ ~
  416.         c++;
    0 h3 T0 e6 L3 d" K1 E
  417.       }# L3 ]1 D5 `% S4 y
  418.     }
    * x& A. J+ ~; w' U: _& ^
  419.   }
    ' F4 ^% _' O( t! B4 u
  420.   unlink(".\\DownLoad\\update.txt");
    ! H9 r  W4 ]- X7 D1 g/ H& v' Q
  421.   if(UpdateLocal.size()) return TRUE;, B6 s; O5 F, J1 ~' [, Q3 L! v
  422.   else                   return FALSE;
    / ~& t. P# s  o6 R# a: g# ^
  423. }
    # `- u  `5 E0 t1 y
  424. , B% y. |) ~/ d( h  W
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"" x! I2 [% u$ z( c/ K4 {
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    3 B" O) _" G# S

  427. - I. |* s* W# i3 r$ _
  428. ; o/ N6 a' C4 D1 F9 n* {: P

  429. 4 |% g$ i( h, J+ F1 M  [+ l' Y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)' r6 _) {! J* I8 c0 w
  431. {  q+ a& D) K7 p
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;: W3 s$ P, A7 C1 i/ a
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)6 s* b, {6 _+ _% Q
  434.   {
    8 w# P4 ?& J7 ?; A4 v* y5 E
  435.     char szLanguage[50];! H  o" Y. S4 q* `& n: J
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 X9 A7 H& _0 J8 M
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' G: q) J5 q! m2 E4 Q. b
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . w9 d  M, b, `, f
  439.     else                                   m_iLanguage=ENGLISH;
    3 L8 c7 h, w' O+ U4 J* ~! F
  440.     char szRegister[100];7 ~* U: R: f  a4 o! k% f9 u
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ; \) E- Q3 n9 ~" W% k
  442.     strRegsName=szRegister;
    ; `* [# R$ p6 {$ A
  443.     char szPatchURL[100];
    $ @5 b# f0 l/ D; r5 A8 W; I
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 p/ x7 |, L/ D$ T$ F: B
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + x& Y' I2 F/ i' Q7 @; s* U
  446.   }
    ( t. u8 F1 K, l/ ^, H; q' w" q
  447.   else% q% I% S2 g0 E
  448.   {9 A9 B4 O1 a$ A* g
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) F& ~" F) Z+ }4 S
  450.     strRegsName=DEFAULT_REG_URL;+ I& N+ h* Z8 d% \
  451.   }+ d9 U, d8 a! x5 m9 A
  452.   if(GetFileAttributes("hosts.ini")!=-1); G5 g' R! f. |+ W! e5 \
  453.   {
    % M5 T* v4 k6 u+ x, A
  454.     char szIP[50];% e- L. ]; F: n# q+ X
  455.     char szDIR[300];4 N' L& C/ y9 G6 U5 {
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    8 c2 ?$ x4 p( [0 H% k) C, G# c* c
  457.     {. z, N& h. }1 V+ c$ N  ]( N  R
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ! C/ \/ J; B( R8 O& K
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    / ^5 e+ l8 N! {5 k0 ^
  460.       strHostName=szIP;& I% R* c' Z3 y8 N
  461.       strHostPath.Format("/%s",szDIR);
    , Q4 }4 j4 b' K& O2 V
  462.     }( @5 F; ]7 Y) ?1 X3 b# A2 T& s9 r
  463.     else$ q. w& S' K) }+ x
  464.     {
    2 x+ r- J! g2 H: o1 j
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% v' x: s5 p4 L" v* K9 R; P, [  y
  466.       {8 |, w$ ^5 |# K
  467.         char szLanguage[50];4 H3 U3 d0 ?; ^5 u
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    - a: U% Q  U$ P% X* C5 J
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! H6 X% Q2 Z& D' h6 b* Q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & H& Z0 t: E* b! w' }& x5 A
  471.         else                                   m_iLanguage=ENGLISH;
    2 E" H# Q/ @( o$ m# _
  472.         char szRegister[100];
    ' B+ i' Y" \9 H" l  L) K
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # l0 t7 s* D) s5 n! m, p
  474.         strRegsName=szRegister;
    1 Z9 G( N  O- K$ v+ c- e- a( S
  475.         char szPatchURL[100];
    5 e, t& N# ~1 Q
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / l4 I2 L# S3 w4 i$ [# [
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( r6 j+ L9 b# ^/ T
  478.       }
    , J$ Q5 J4 L- @6 m
  479.       else0 a1 I% o/ k6 i9 o
  480.       {
    2 k; T7 ~, }" n- ?. b
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    0 g/ O/ b+ A2 J" r7 R2 s& I
  482.         strRegsName=DEFAULT_REG_URL;9 r( C4 [, B$ B
  483.       }
    ! [7 o% }* y, B+ x* f  |9 V' R
  484.     }+ a; r  a, p0 z' U+ j
  485.   }4 p" s  P: q2 g
  486.   return true;
      h7 B9 o: p: ]) |' q6 n+ {
  487. }" o. f! K, x0 M* s. w% Y* e" V
  488. " O; y6 s- n5 a% Z
  489. #include ".\ZLib\unzip.h"
    0 I3 u  r3 y- {& e" ]
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);+ a+ B+ `( l% H7 q! G& n
  491. /////////////////////////////////////////////////////////////////////////////9 c# J8 o$ X' Y! o
  492. // CRevAppApp initialization
    1 c6 D8 O( s7 P: ]: y9 W, `
  493. 3 G: _8 {; {9 a: Y
  494. BOOL CRevAppApp::InitInstance()+ @" z% f8 f/ o/ i+ J9 K) f
  495. {4 c- K- r. b% x8 C; K
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];1 Z. Q( W8 j: A. ^

  497. - w) y+ j+ }* c2 o% {1 M
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    8 W% g" ^1 V, l; f+ |3 p% b6 f9 ~6 V0 I
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    & T7 T  Y7 Q- s0 O) \
  500.   {
    2 m' |/ ?# I* {2 f
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ; n& V2 W& V7 V6 B$ ]! z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    5 ?" I: Q8 O2 B9 I3 i
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ) A* y5 M7 k$ G! J! J% b
  504.     {% @0 k, e1 d" Q8 B
  505.       strcpy(szPath,szPathTarget);* B. @2 |2 n& X) j7 b! X4 e
  506.       SetCurrentDirectory(szPath);4 ^& S3 ]" W3 M; I5 M% z
  507.     }1 P% t7 g0 _) j
  508.   }& y; ]7 l* i! }% V/ z, A! J( ]
  509. #ifdef _DEBUG5 `: r, c* n2 \7 U
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    7 r& E/ a; P; j7 z$ m# D
  511. #else3 H: b. ^1 ^$ M3 Z+ F
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( g0 r+ T; w& v2 T
  513. #endif# q7 m. M+ K1 r: i
  514.   {$ z$ q2 U1 E9 [$ T- {# J1 G
  515.     char tempFileName[MAX_PATH];
    & n5 Z1 I" T2 h5 ?1 E6 g0 Y
  516.     strcpy(tempFileName,szPathSource);% G0 ^$ z* d, |: B) Y6 c7 V1 w
  517.     tempFileName[strlen(szPathSource)-12]=0;; @6 I- N3 J$ ?5 X8 {7 z' R+ I8 p
  518.     strcat(tempFileName,"\\$CSUpdate.exe");. n8 {$ o. C* S* K; I
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);: V" y# g/ r" Q: Q0 _# G9 |
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);! N4 i: B. S1 Z' s* N  R; ~
  521.     return TRUE;7 b3 x+ j( u/ r7 Z
  522.   }
    / q! z9 ~( k2 r8 ~  P/ U0 {
  523.   // Nuke 0118: Delete run.exe
    + K* s' _- [$ g% J) V
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );/ B. f8 A4 q3 B: p3 M) T
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");* i2 L, i$ p' S* l7 @- ~
  526.   if(!ReadCfgFile("Config.ini"))2 o' y2 y" L+ c/ Y$ i1 V9 a
  527.   {
    7 h3 ~$ H- l, Q6 |) d6 O
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    * z+ h  s. E) v& @- ?
  529.     return TRUE;
    1 z; q: `. H( E6 K
  530.   }( j; f8 I) x( \
  531.   HANDLE mutex;& h& r. z' K( l9 c9 z6 p4 t3 V
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))  W0 g7 D+ f8 W+ p" m0 `1 r( R
  533.   {9 Z$ \1 a8 k8 \" D4 m$ A; x
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    . z! i0 A" Y6 E* i3 V# |# o4 i7 ]
  535.     {5 O/ s4 w' x; Z1 a
  536.       CloseHandle(mutex);
    1 C5 G% C; X2 T  }4 n9 `$ i8 C8 N
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);) y; u$ w7 k! W" `4 O4 C
  538.       return TRUE;
    % f% k3 W6 E, S$ W/ v
  539.     }5 D* s6 [+ H! Q* n. h: S$ P0 g% X
  540.   }  
    0 ?* k* b. V" X) N8 @% B2 O
  541.   CloseHandle(mutex);' `% G+ D# r! \

  542. * c; y1 ^( O: \& o
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ' U' g4 h# [8 \
  544. ) a+ x( B- |3 H; G( H+ D4 W
  545.         AfxEnableControlContainer();/ {4 ?4 d& Z! b- Z
  546. 3 f- ^  H' j: t+ @) V3 d6 l" D
  547.   bCanUpdate=FALSE;  l; \1 ]! S7 ?0 O
  548.   dwStartUpSteps=1;2 W# e0 i* `# V0 d
  549.   dwProgramState=AP_NOTHING;
    & f0 h8 Q; T/ z# K* B) s

  550. 1 b% }' b! R( d" U+ D" P/ q  A. ~8 F  |
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ; {& s4 g* s7 h5 o7 w5 d/ t" I( a8 Q# _
  552. ! H( j% H( M% v& _' @6 Q
  553.         // Standard initialization( c4 f) W  V5 Y
  554.         // If you are not using these features and wish to reduce the size* u& [/ T# v& W) ~5 X! T
  555.         //  of your final executable, you should remove from the following" f! t0 V+ C- ]. j3 e6 i. [9 S! X8 i
  556.         //  the specific initialization routines you do not need.* `+ F7 ~1 E- A& {$ x

  557. , l* h4 G8 y. ^: Q
  558. #ifdef _AFXDLL
    1 U% E) i+ j* w0 {7 U% Y9 O
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL# r) P8 \, }2 q
  560. #else  G+ r: C# {4 I6 w
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    6 q6 ^5 a8 }# K) @
  562. #endif+ {. `7 n- k" C  E! [

  563. 1 \) k5 O6 D9 ]& P: Y
  564.   dlg=new CRevAppDlg;
    ! d, h. N' z! d4 \( U
  565.   dlg->Create(IDD_REVAPP_DIALOG);/ Z3 `) |  p1 _5 L3 k/ j+ b
  566.   dlg->ShowWindow(SW_SHOWNORMAL);& i& W3 a# c' e
  567.   m_pMainWnd=dlg;
    6 X# P- X0 U& h- x; V! J

  568. " ~: k  h* t% W, M( q& a) R6 k& Z3 |
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);" c  x( t1 l5 |" |- \
  570. 1 |2 w( I: x+ J, J- X
  571. //  GdiplusStartupInput gdiplusStartupInput;# S, g7 ^; Y  r$ F  q7 ~
  572. //  ULONG_PTR gdiplusToken;# h% Q8 M: ^5 D8 F; y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    " Z. C# L5 Z9 ~, D$ ]

  574. 1 z+ F, n: z+ t4 F: a
  575. //        CRevAppDlg dlg;2 P$ `+ S$ p/ K* u. `
  576. //        int nResponse = dlg.DoModal();
    / a+ X3 ^$ o( \$ H% b
  577. //        if (nResponse == IDOK)+ }' e; U8 W: h( Z! k2 h9 G
  578. //        {
    4 a+ D; [/ F! Y* ?2 X( k% F& I
  579. //                // TODO: Place code here to handle when the dialog is
    ( Q5 f8 ]5 U& f1 N% [
  580. //                //  dismissed with OK
    & h( a3 _- E% A" j- G% J0 T
  581. //        }
    , s3 l# q% m/ Z6 K" m5 x8 W
  582. //        else if (nResponse == IDCANCEL)
    ! x' N+ k' {9 v& x) F
  583. //        {
    % t! U* ]2 _9 [* l& U
  584. //                // TODO: Place code here to handle when the dialog is
    . a8 n% v/ H9 t& M2 Y
  585. //                //  dismissed with Cancel1 _7 D  h6 B: x
  586. //        }
    / A# `& E, S: b& b& b- i( P
  587. 0 C/ }" R8 K5 q1 y5 E2 b
  588.         // Since the dialog has been closed, return FALSE so that we exit the+ J1 P- e  v- f+ }
  589.         //  application, rather than start the application's message pump.9 z3 R+ O/ V1 ]: |
  590.         return TRUE;: b2 q6 _' r3 I: _
  591. }
    / |) Y  @' Y! E8 e, p' p

  592. , r2 }7 _; q& C. ?5 u* U6 m
  593. char *CRevAppApp::strtok3(char *pSource,char *token)" q6 r4 D! e5 m
  594. {
    2 J& y, E7 a* [9 U9 I% l
  595.   int i;- O% A3 P. }3 g8 X9 Z7 m# y: C
  596.   char *szRet;, p6 A) |: E. t+ P$ c! c# y. |. c
  597. , s* U, ?; ^% \, a, k$ F( n8 X
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    # w1 s, z3 J1 h- u
  599.   if(sztoken)
    $ F) g, T) ?' a
  600.   {- H, l; r0 t) o' j1 t) O: J
  601.     szRet=&sztoken[itoken];) s% C8 d0 j& ]) K8 y
  602.     while(sztoken[itoken])
    . ]. u, F  Y: e2 d4 h+ y* @
  603.     {4 K/ h. {5 S/ m
  604.       for(i=0;i<(int)strlen(token);i++)$ I' d0 E8 Z+ c6 _2 S' M! M. ]
  605.       {- H' q1 V" X6 c8 a9 B3 z8 o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])  E: l8 j6 {0 h: o: [5 Q9 y4 H
  607.         {0 J' B# S; B  F9 `6 _7 z1 N
  608.           sztoken[itoken++]=0;5 m  I( [6 y: }" H' [: q
  609.           sztoken[itoken++]=0;' r3 J( e2 z+ _' N
  610.           return szRet;, }: V" Q0 ]0 s" f8 I
  611.         }
    0 q2 o$ w( ~; [; h& b/ ^
  612.       }4 R! }  f2 o; J2 ^( a/ s: J4 a
  613.       itoken++;) n! [" X: ~/ i8 B
  614.     }' G# G2 `- |. y  A1 r
  615.   }
    $ @/ I3 }" Y2 l! q: a" `* ]
  616.   return NULL;
    - N  K/ s* A3 W& e
  617. }
    - r+ N- g' l. [1 `. b

  618. 0 X" j# Y$ z0 v* |1 Q  L8 b
  619. void ProcessProc(long Total,long Current)2 Q, Z- Q" k. R
  620. {
    : J5 }) o/ V& j; Y7 T) i
  621.         MSG msg;
    ) n/ O2 X2 Y; G$ y' h
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ ~5 r$ k2 i9 c3 L* W  B* ~; z8 ~& b
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ! K& X* x1 c- g8 K4 l7 F
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)). n1 p( j+ Q6 Z/ @+ t. X( u+ c1 Y# U
  625.         {
    % o. A" _# M5 U- s$ {
  626.                 if(!GetMessage(&msg,NULL,0,0))
    5 @& `% }: l0 o- E1 [" e2 ]% I% {0 e
  627.                 {2 p" W1 M0 R* g( \
  628.                         return;3 j/ {% y: a0 w# P' t
  629.                 }
    % `0 g- G! Q& @& D
  630.                 TranslateMessage(&msg);  y* R: S4 c: v
  631.                 DispatchMessage(&msg);
    / c6 n& [' |7 }6 ?! k
  632.         }       
    0 y' Q7 e7 F- w) G! h
  633. }
    2 p9 K4 o/ P( V, T' t1 V6 A

  634. 4 }* Q) _% X0 s$ }+ @# d
  635. BOOL bFirstChar=TRUE;" w7 C; ]; ~" Q4 b
  636. / H/ p% e( a6 `& Q4 t' n; |, p
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    * f% R. G; E2 L+ `. V2 N3 ?
  638. {1 |1 I3 j+ ^. d; K+ {
  639.         // TODO: Add your specialized code here and/or call the base class
    1 u- }9 u' x7 k9 [9 x
  640.   switch(dwProgramState)
    ' y7 n7 \3 p3 H' e
  641.   {! Q6 Y# ^2 E  T4 _6 h  t2 Z
  642.   case AP_NOTHING:  w" G3 w1 w! ]- I2 J/ {% A
  643.     switch(dwStartUpSteps)
    : g- a' X1 |/ x' x$ i8 x2 `
  644.     {; ?' y, e, O' U
  645.     case 1:& k0 ?9 W5 R. a, z$ v& Y4 w. o3 Y
  646.       {
    ) }$ ~7 _7 Y7 }4 k
  647.         int i;
    3 y6 z$ R7 a+ Z1 C
  648.         CDC *pCDC=dlg->GetDC();
    ' t5 u) S* C3 J: {
  649.         HDC hdcwnd=pCDC->m_hDC;5 {- b* w$ U7 u0 \  `, G2 G
  650. //        Graphics graphics(hdcwnd);
    1 M4 D" s" f+ \7 _0 O  [8 j
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");4 {8 E. N* s- k' ^
  652. //        INT iWidth=bitmap.GetWidth();
    0 S# {7 u2 `" b5 T+ B
  653. //        INT iHeight=bitmap.GetHeight();
    1 [' v4 P& A7 n
  654. //        Color color,colorTemp;
    ' A% _" f( q1 c
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)1 l( [) @+ a$ a! x7 k
  656. //        {
    ( L/ x$ j/ k7 G: Z& T# E
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    5 r4 ^& `8 K9 F+ V* R+ e5 c
  658. //          {4 J$ |7 N7 Q* M9 k
  659. //            bitmap.GetPixel(iColumn,iRow,&color);' @* U6 b' ?- ^% J8 O
  660. //            colorTemp.SetValue(color.MakeARGB(
    # Q* v' w# {6 X) X
  661. //              (BYTE)(255*iColumn/iWidth),' d/ e: H5 o* Z  v- r
  662. //              color.GetRed(),5 E, ^! w( }0 v# d4 [! q
  663. //              color.GetGreen(),+ C7 F8 C; s) k. P2 F
  664. //              color.GetBlue()));& b) t6 ^" ], Q1 d
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);4 J* Y) c6 c8 M0 s0 H# y% ^% `/ }
  666. //          }
    ! s& a$ V! k: E9 W; P  t. \
  667. //        }+ ?; V: b; {+ Z3 D0 [
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);' N: p; q  E) F8 [
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : H" d0 E: w8 b' L3 b9 J) r
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");: k8 G6 Z( K  H
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 t* S: l. T: ]9 g
  672.         for(i=0;i<240;i+=8)% W( ]+ u1 I9 b- P
  673.         {
    - s1 N: W9 o; f( M; g
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 R0 {1 z8 z# ], g# X' p
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 H- p9 A3 f- M2 B3 d5 d
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 ~' `+ H0 M; n  l8 e6 b
  677.           Sleep(33);9 ?3 N0 _, l) t* p5 ~* ]
  678.         }- k- Z9 Y/ T4 z  d
  679.         Sleep(1000);
    6 l1 O2 ]9 U7 z/ L
  680.         for(i=240;i>0;i-=8)
    # n. L# u! h9 |
  681.         {
    7 z; j+ [& F+ G: T0 ?0 B8 K3 c
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " A( Y. K- K" P
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! K" k" J0 B9 F& ]  e7 X- u5 T; c0 V. b( e
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 W9 Z( x! E8 C, S
  685.           Sleep(33);
    4 r. ~) R! ~; M  P4 U7 J/ c7 g" b
  686.         }. {% O, u3 c" N/ E% I' \6 E
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);$ c. ^% Y( H% L: u  C9 V8 ~
  688.         dlg->ReleaseDC(pCDC);2 r( V. G' t, v
  689.         DeleteDC(hdctar);& D9 v" _6 B2 |
  690.         DeleteDC(hdcsrc);! y, I0 Z5 K5 B3 Z% U, A6 P
  691.         DeleteDC(hdcorg);
    . `0 X* [+ P; n: z5 H% R
  692.       }3 T6 O+ v3 m- U6 k  i( B7 h" }7 a+ S
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);: \, J# E& X' b
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    1 q* O# I: h/ c
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    8 H+ J1 U; b! I2 ]5 [6 h( T
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ) @  ]- e8 ]+ F* }5 p* D8 I& D0 h; V
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - e% P  z; R  s# e! ]7 a* w
  698.       if(!Dn.Connected())
    ; W$ [+ I( `& [/ ~. r& }" m4 _/ I
  699.       {
    & L+ q2 n+ F9 _0 z7 }
  700.         dwTotalFiles=1;
    1 H7 E6 B8 A6 S% ~
  701.         dwDownLoaded=0;1 T. ?. F- g4 ^! Z, M- Z. f! r! ]
  702.         bSilentStep=TRUE;
    3 Z4 D1 I; Q1 i* {2 E
  703.         bCompressed=FALSE;
    7 Z# Q2 x: Q# L( e; Z! M! x$ v, h" x/ Z: r
  704.         strExtLocal.Empty();; ?- k" h& W4 q( @4 V: n
  705.         strFullName="readme.txt";
      \; M' K5 y! |! y
  706.         dwProgramState=AP_CONNECT;
    ( N; L0 ~4 D7 P# b; F& P) `
  707.       }
    4 V/ Q( r* s+ E+ v2 r( e
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();# D' R, D; ^4 p4 `3 X
  709.       dwStartUpSteps=2;
    + S4 `% H7 r3 s5 [4 @
  710.       break;. W4 Z/ N( `7 N0 [% f' |
  711.     case 2:' D5 e5 L7 w9 `+ @
  712.       {1 C$ ^( I  ^# ^4 d
  713.         int iEOF;
    5 C& V0 H7 |( K$ u3 A0 `
  714.         FILE *fp;
    / C% e6 F( Q( q& H, ?) Q* P
  715.         char szString[512];
    ) w# v( V9 J2 Q; A+ v
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 R6 A5 D9 h3 ^2 t
  717.         if(fp)- u. I( U( U- @9 ^* |
  718.         {
    ) [( h& W. c$ ]$ V' u0 M
  719.           do
    + }% n5 G& v% d* L8 K' p% n
  720.           {9 _- d1 b  X7 O& e
  721.             iEOF=fscanf(fp,"%s",szString);; z6 e( k( h0 V) `' k+ I" _8 M
  722.             if(strlen(szString))8 k# P9 G/ i: @1 |% V; l. \9 P
  723.             {3 f6 z0 M1 Z0 k$ E
  724.               if(bFirstChar)
    ! H# ^2 O% ]+ ~- I
  725.               {
    ( A! V$ ?% s0 }! Y8 z+ [& `
  726.                 bFirstChar=FALSE;, z& ]9 I5 \1 E1 R  K
  727.                 bConnectIsBig5=FALSE;0 e4 i: }! N% O6 `- C8 [! I
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ) w( v9 k8 j- @4 n5 I0 R
  729.               }
    1 `) b" p$ b0 a! q6 r, Q: d. e
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));2 _4 T( |2 V) C3 I1 l, V" k8 d
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    7 r! B( H: b4 g7 h( s& ?
  732.               dlg->m_ListText.AddString(szString);
    / m% M- r4 J6 h4 w
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! Y+ o2 l' R: \2 _0 S2 w$ H
  734.               *szString=0;, _# g: ?* B0 Y# u- F
  735.             }- ~: d& S: B* Y% F
  736.           } while(iEOF!=EOF);
    7 T. s% _, p6 j+ D9 B- ~1 q# f
  737.           fclose(fp);
    : V9 t% c! ~& K6 J# B* @" T" B
  738.           unlink(".\\DownLoad\\readme.txt");8 ]. I$ o3 Z1 t. n& F1 ^; m$ C
  739.           dwStartUpSteps=3;1 `, D( F' Y' O+ ]3 n1 w
  740.         }
    ! R3 M& b2 h1 W8 }: T1 X
  741.       }
    3 {" v# z8 x6 e+ Q% C* d* }, l
  742.       break;
    ! m2 ~3 H, |% G. Z6 Q; Q) C. h
  743.     case 3:& u/ n0 m! n; i( k  o8 O+ K& G
  744.       if(!Dn.Connected())
    - ^& N% l# `1 d6 A0 Q( S1 Q, w
  745.       {
    1 J/ S' M8 z8 a% N1 }- j
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    , D- c& E' o  ^- y
  747.         dwTotalFiles=1;/ D' k2 ~8 y6 X9 U% u6 Z: y
  748.         dwDownLoaded=0;0 T* v. {% _+ u. _0 z$ k8 P' G# i
  749.         bSilentStep=TRUE;8 i. C1 q! \! I4 n# Q
  750.         bCompressed=FALSE;: K3 a- n2 c1 }
  751.         strExtLocal.Empty();" Y0 h3 @+ {, t
  752.         strFullName="checkversion.txt";6 `- G+ r' g+ T2 @5 i5 e8 J
  753.         dwProgramState=AP_CONNECT;
    & W0 J1 h4 T: S! z& J. u! q
  754.       }
    8 l+ Y" ?4 I7 a8 K+ [
  755.       dwStartUpSteps=4;, |# q/ o% o6 A2 S
  756.       break;! U4 M5 w1 w2 K6 J; ]2 J
  757.     case 4:+ r0 ~, _9 S4 i+ G9 ~3 f
  758.       {
    6 ]5 M; q3 Y- [/ L7 Q
  759.         FILE *fp;5 b+ j9 U6 |4 X7 m( r+ `
  760.         char szString1[128];) `$ P& o5 b# S( l
  761.         char szString2[128];
    ' ~* l! V7 W1 [& ~
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    , ]1 a- v+ Z) \2 l: E$ K
  763.         if(fp)
    / k; ^  P2 ^; S0 `7 r# Q
  764.         {
    # L- e( s& t  b' S
  765.           fscanf(fp,"%s",szString1);& [3 \) n& }/ q$ f1 ?
  766.           fclose(fp);
    . r7 B: r3 ]" _  g) d/ \0 A
  767.           fCheckVersion=atof(szString1);
    " O- ^' n! }" u0 d
  768.           fp=fopen(".\\checkversion.dat","r");3 s6 h7 J2 d( A+ o+ v/ G0 n
  769.           if(fp), q- q0 Q* m! g. @1 t
  770.           {6 w% E# L) }3 t- b! O5 q% r9 a
  771.             fscanf(fp,"%s",szString2);2 k+ k: g2 U/ c4 W/ g4 D' ]' F7 u
  772.             fclose(fp);
    ' T5 \3 ?% |$ g5 M. n/ n/ C7 n
  773.             if(atof(szString1)!=atof(szString2))# d* F# B, P6 ~7 r% R8 U
  774.             {
    , h7 z/ W2 k8 f+ t, V3 b* z8 O* @) @
  775.               if(!Dn.Connected())
    9 ?( F: I9 C" T% p7 R3 R. q9 s( M) C3 `
  776.               {
    8 L5 G' `& j0 C. o( I+ O$ p
  777.                 bFirstUpdate=TRUE;. l- M7 T- S" Y6 X5 a
  778.                 dwTotalFiles=1;
    + V% O, a, m7 J3 F
  779.                 dwDownLoaded=0;
    8 E) i0 i/ k3 v" z7 f. u
  780.                 bSilentStep=FALSE;
    : O& X/ I7 K- d0 `- q
  781.                 bCompressed=TRUE;2 l: Y0 Q& `: A+ Y
  782.                 strExtLocal=".\\DownLoad\";& P( {) ]- n, ^: ]: [% k6 a% I
  783.                 strFullName="update.txt";
    0 J3 A6 g% ~' \. r3 _2 J) U- K
  784.                 dwProgramState=AP_CONNECT;2 c, z9 ~% ~1 I1 Z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % K' S" N) R, F, H( `: K
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , N7 e+ z. I) q) t- F
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 y1 e: p* G" B5 Z# ^% P5 h* a
  788. 5 {  f8 ]6 b- l
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( e; c* e3 b6 ?5 H4 m
  790.                 unlink(".\\DownLoad\\checkversion.txt");0 [( f& _' }; x
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    2 \0 d1 Q( ^$ o3 v% o
  792.                 {
    5 y! @& q; E+ ]* [
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");) F7 s) D7 y; d+ K: q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    " J8 ?# m/ z0 O$ }2 A
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");2 N5 C$ M; h: c- D7 i* |* h+ q2 e
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : A$ c) T$ {7 `) j0 t& w
  797. & k  h, {" R3 u( c" L* I! ^
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");& T5 j6 z# f9 R5 c+ M; P3 u/ Z1 u9 B
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* }0 T: S) n7 o0 i
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    + N$ J- J5 H# t4 @
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % c4 b' H" q3 B
  802.                 }
    : _$ W+ u+ {) p1 a( Y$ ~
  803.                 dwStartUpSteps=5;
    ' D# u) D3 o& n: B. B! y
  804.               }! j# w0 m# X( F& `: @- C! D7 T! p
  805.             }
    5 x* o4 i% ~' g% j6 ~' B+ q9 k
  806.             else
    1 T- F# t$ a* w
  807.             {
    9 T. K# q1 n) F7 C  ]2 H7 Q# m
  808.               unlink(".\\DownLoad\\checkversion.txt");- X" w. `2 E5 Q5 c8 I% h- l
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ ~- B1 k4 H- x5 _' A9 D/ ]; q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");/ N) `- M0 K- `* K  a; S8 D
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 f# c' _, M) \4 g( E

  812. * c  M( V- R$ M6 F' X$ L
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 u, k0 |4 H% P' O) X- V* _
  814.               dwStartUpSteps=99;% O! {2 _  A0 Q- O9 M5 H% \
  815.               bFinishUpdated=TRUE;9 j  a* u4 v. i7 Y* h
  816.               bCanUpdate=TRUE;) }, l( V$ a3 X/ [5 i/ I/ I
  817.             }2 f+ H  A% t  [) k6 U
  818.           }  r0 t9 }7 m! p. y4 x2 V- a: @
  819.           else
    , Q+ g8 Q- {) w" [1 d& N
  820.           {
    ; ]5 R! ]4 J, t! ]
  821.             if(!Dn.Connected()): l7 k" p4 q  c" J, a
  822.             {/ j4 r; f9 @4 ?9 h- D  @! ]
  823.               bFirstUpdate=TRUE;
    * f5 P. _; h1 l9 d$ ]: [
  824.               dwTotalFiles=1;) {1 O) r; A8 @+ n. ^; ^  N$ H
  825.               dwDownLoaded=0;$ C  E& b" Y. ~9 o8 R% o+ ^
  826.               bSilentStep=FALSE;& D. w; w  F% N9 w
  827.               bCompressed=TRUE;
    ' i7 u9 R/ A4 v9 R
  828.               strExtLocal=".\\DownLoad\";$ c8 K3 x; y  p6 w) d# f
  829.               strFullName="update.txt";4 R7 V, F; u( N: R; z% x) y
  830.               dwProgramState=AP_CONNECT;7 f7 Z! k: g0 j, Y: \# d3 d
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' u1 Q! A" t$ l) T% R2 o0 s
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 {/ P, ~( l, M" H
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ Z% D( t! p. Y* [4 l
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% [2 B5 p: f6 k1 s8 Q
  835.               unlink(".\\DownLoad\\checkversion.txt");
    6 m: w3 f% \; x4 w0 I
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)- Q$ {0 V+ H3 ]9 @
  837.               {
    7 A7 r5 R$ s5 d. V
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    4 `# g) F$ C8 Q* |- O# X' z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");" q& L: H! B$ s* U
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");  |8 y# |, m/ U' S$ l
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, g0 M4 T; R0 p, l% H
  842.                 " g3 _0 {' v7 m; [; M+ B& m+ R( \
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    0 i/ I$ T( O2 S' L0 [# s& ~4 s
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");; ~" D" L. {  m' n2 m: ]" a
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");4 Q3 Q/ W7 p, s) m
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) y: K. X( i% @- r6 C
  847.               }5 f; P9 W% Q$ E8 k
  848.               dwStartUpSteps=5;
    ; y. k6 X' X0 v( ]3 q* `# Z
  849.             }
    8 O' z' Z% E7 G% r+ N
  850.           }* h& a. m" q6 L4 b' u+ D) L4 U) x0 B
  851.         }7 `$ x( c% a4 K; [# \' K% A
  852.         else( N" Y( M: i( ^$ \& j4 @
  853.         {
    ! ?3 p+ l# Q6 b5 @
  854.           dwStartUpSteps=3;' o- `2 F( j0 s, J8 d, m
  855.         }: L) E1 k: K6 x- |/ {) {5 a+ g
  856.       }
    * m$ i! X/ l0 |" T, m
  857.       break;
    9 f3 `0 ]( P$ \. ?& ~
  858.     case 5:
    1 k4 J* z1 Y: b, p" P  ]8 Z
  859.       {
    ' m2 x; b' s+ {( ?0 {* m$ X
  860.         if(GetFileAttributes("Wsa.zip" )!=-1), K8 S- @7 j: u0 P$ @# M
  861.         {
    9 a+ s$ Z7 L; t5 j  c/ R
  862.           int opt_overwrite=1;+ q, I4 l) b1 t5 |; a  p; P) ~4 V
  863.           int opt_do_extract_withoutpath=0;
    2 _& [0 z. j/ l3 ]' f/ T
  864.           unzFile uf=NULL;
    8 ?8 Z  S* y$ p+ y
  865. 6 D* {: y- x% m4 {! G
  866.           uf=unzOpen("Wsa.zip");' U) {* g6 d4 W' }1 J5 v
  867.           if(uf)1 N8 A1 b6 Q  W( K
  868.           {
    - D; _1 H: y" ?) g4 e, ~: s+ _
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);* S7 q4 M# W. V% ~3 N
  870.             unzClose(uf);
    . }8 v. d$ r/ x$ i
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");# v- X" G9 Q. z2 ]5 o
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    . T4 C6 w1 m; q+ `$ {
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ' k- Y) L# O3 |- \( y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + O4 c4 X% ~, h
  875.           }
    6 v% l; k8 C( Y2 i2 x
  876.           DeleteFile("Wsa.zip" );0 t% g/ S! {6 i
  877.         }
    2 @0 x0 r$ |3 V% m7 u  k1 E

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

; L! t7 d5 F" I  ]+ ?5 g7 l3 T: h% R8 {

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-1 13:53

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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