CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
# n' E! T8 B( t; H( S: q
  1. / RevApp.cpp : Defines the class behaviors for the application.
    " y7 {' `4 E0 m1 o8 R2 H
  2. /// p- u# c) f8 o  C! T" R+ W2 X

  3. 4 t2 c; z; ~5 b. B2 o* T
  4. #include "stdafx.h"
    $ \- f- k  X' O; S# C

  5. + g! s& q9 @4 o4 r3 t: v
  6. //#define UNICODE
    5 y/ o" e$ W" h' \5 M
  7. //#include <gdiplus.h>
    - k" H& d( U$ U- B  u# h) w4 P
  8. //using namespace Gdiplus;
    4 \/ X% B5 v( M
  9. ( X. y4 p: Y! L- I# t5 T
  10. #include "RevApp.h"
    ) u- I, ^* [, B) Q# h& Y
  11. #include "RevAppDlg.h"
    ; n0 c9 y3 s+ `  M
  12. . k1 b# C9 \' ?( @# T7 J
  13. #pragma warning(disable:4786)- g% X! u+ `% H2 F' h4 i$ S
  14. #include <map>1 X0 @4 _  H$ i" `0 D1 _) Q
  15. #include <list>) @/ _& \& n# B9 |' l
  16. #include <direct.h>& _  a; N3 D% i2 o. x' \1 d
  17. 0 e/ e) A) n7 _+ ?6 G! S
  18. #ifdef _DEBUG4 X7 z" t  X8 Z+ v/ ?
  19. #define new DEBUG_NEW4 Z! C/ |" Z+ G; ?- @6 l) T4 G  s9 H9 k
  20. #undef THIS_FILE; s$ J& k" o1 G
  21. static char THIS_FILE[] = __FILE__;% d" U! L; Y8 u& U/ s0 ^: D
  22. #endif
    0 S. p8 h0 G1 `* ?+ X/ Z1 F
  23. #include "SkinResDef.h": c7 X8 I$ O& w& o6 E5 m, u
  24. #include "ChangeBG.h"& C; j1 g! F( p9 k/ ]
  25. #include "AFXINET.H"5 t- i4 ~. M0 f$ L+ g2 r
  26. 5 a0 J  L7 I) g3 }+ j1 V
  27. #define TRADITIONAL_CHINESE 0( y9 O9 x9 V1 X- K) e
  28. #define SIMPLIFY_CHINESE 10 r1 Q7 e, x7 K. q4 C0 D( j/ Z
  29. #define ENGLISH 23 u1 {0 Y  y% K3 Z; q% ~
  30. int m_iLanguage = ENGLISH;% [# n) `7 ~$ x# _. g1 \$ E  e- d
  31. /////////////////////////////////////////////////////////////////////////////! J- T% u8 B4 N3 @
  32. // CRevAppApp& L' w: h2 v* u3 E

  33. + Q9 o* E% W( q, S6 S  W
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    5 P% W: `* }: k, B# C' O) r
  35.         //{{AFX_MSG_MAP(CRevAppApp)/ \% B7 B. }; x$ ~4 B* p8 e: \
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.' {! V4 e0 v: X; l
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    1 N1 {4 q, G0 `, ^' N. |
  38.         //}}AFX_MSG
    ; Z6 b. l8 z: U$ x8 @( d1 u
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    3 O& _3 T4 d4 S9 J' [8 S
  40. END_MESSAGE_MAP()
    9 U: T% }; x- o, ~7 V( p3 U

  41. & ?6 h4 ]$ [8 ~. O0 B7 k% V) m8 y
  42. /////////////////////////////////////////////////////////////////////////////
    2 P! P5 {, S% {' p9 q9 I
  43. // CRevAppApp construction
    & e$ O* V1 l/ I2 g: j; u  E
  44. ( u! `. k2 C, K* R. x/ N
  45. CRevAppApp::CRevAppApp()2 L1 F7 r, W8 T
  46. {( N0 c3 H+ o4 o* t+ {% ]3 N+ e
  47.         // TODO: add construction code here,
    4 w* ^. \) u7 {& o$ V
  48.         // Place all significant initialization in InitInstance6 N) Y/ U, `. ?6 T8 o6 A, |: |
  49.   bDisplayIsBig5=FALSE;
    2 P" ]; W' T! D2 U0 G
  50.   bRestartUpdater=FALSE;( t* r1 l  J( K6 m8 \" k3 l
  51.   bFinishUpdated=FALSE;0 b5 N: [9 L6 F! d4 u
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;% n' G  D6 G! ?
  53.   InitChangeDataBig52GBKS();
    4 K2 C: |4 X& r5 ~' R+ Q3 R
  54.   InitChangeDataGBKS2Big5();
    2 P( R! Z- F0 Y+ m) u) F. T
  55.         //$ v! f  x. ?; s
  56.         bClickRunExe = FALSE;
    * q+ e* y7 }3 D# V: ^$ m/ i  L
  57.         //7 p, z1 C( j/ ]8 n
  58. }
    , q: L* ^) r9 a, s8 B( L

  59. * \+ Y2 K1 o3 W9 g$ \; v
  60. CRevAppApp::~CRevAppApp()
    4 I/ T! M! g, X- m5 R, `
  61. {, T$ c# l) i/ z
  62.         // TODO: add construction code here,
    # ~( @1 D) g9 ~' y8 N) b
  63.         // Place all significant initialization in InitInstance  V! m. B, ?' m
  64.   EndChangeData();- S. i+ \' ~0 J, N- F, D2 N8 V
  65. }8 e& |, ~. h0 [$ B: i- [  p9 b

  66. - @+ c, @9 ]# {5 _
  67. /////////////////////////////////////////////////////////////////////////////; J% O6 l6 L9 U4 r6 p
  68. // The one and only CRevAppApp object0 ?  i# a7 m, m7 v' z- I6 v1 F

  69. % }1 d( t  _, B- O
  70. CRevAppApp theApp;
    7 a( @. n( w/ V  D* s. U
  71. ' I2 s0 W: g* g- A9 k$ Z6 p0 w
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)7 _; H* E0 B  [+ [3 N( r
  73. {
    8 l2 E: m9 W2 @1 G  f0 F; ?( H3 P
  74.   int iEOF=0;  {+ S# Q% ^* w! u) T* b
  75.   char szTempName[MAX_PATH];
    , k9 w' D( V, t* B/ W
  76.   *szFileName=0;
    9 f/ q* V: N/ M5 h9 x
  77.   iEOF=fscanf(fp,"%s",szTempName);+ l1 M( @, I/ J6 u
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    9 [: w  e# g. ^4 k6 A& C  U
  79.   {
    / B6 W  N* m" z% N$ F1 f: C
  80.     strcpy(szFileName,&szTempName[1]);5 T$ E0 O! C( E
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    8 s7 Q* w" n; y# C; c1 O
  82.     {
    1 `2 ?; g0 O/ D: X
  83.       iEOF=fscanf(fp,"%s",szTempName);: b) O. i# O# h
  84.       strcat(szFileName," ");& A+ B  E, _: R- h' R/ K6 ^
  85.       strcat(szFileName,szTempName);
    2 o) [8 }7 ^: C8 _" G9 H) N
  86.     }# }: _3 ^* w! O, s( O0 E
  87.     if(strlen(szFileName)>=1)2 O' F, Y" ?  I% s
  88.     {& Y9 h9 s, L, D/ q! y! R
  89.       szFileName[strlen(szFileName)-1]=0;' x  k1 Q8 }7 g& ~. q1 j1 X
  90.     }
    . t: F. z) J' }3 F$ j+ v! B% q/ a
  91.   }+ ^% L( K! g' |7 N1 n0 f+ f7 D0 U
  92.   return szFileName;
    / G: E2 S2 J0 J/ H
  93. }
    * {4 h" p) B) N1 W. t
  94. 6 b/ b/ C6 v3 I+ g: A$ v
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    3 d0 e' `; O/ |) ~2 m% I+ W
  96. {# W2 G. q& Z; Y/ i
  97.   FILE *fp;4 R, i' j+ ~( b: b' N$ t
  98.   char *key=NULL;/ |9 {5 D4 z! J/ X8 j0 V
  99.   char version[MAX_PATH];
    ; ?/ H: n. w, i3 D1 u( r
  100.   LPUPDATEFILE file,olds;0 H2 H) r2 M6 M: O5 X/ G% K
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    + U0 V7 A6 S* p+ @7 _( M

  102. ; R% t$ I9 B3 S: A. m9 J$ R
  103.   UpdateList.clear();: @7 [# S7 H6 O# Z
  104.   UpdateFile.clear();4 R9 p3 w- x, [/ U: ]- ^
  105.   if(GetFileAttributes(filename)==-1) return false;+ ]  E- d; _) x% `1 z- a3 t
  106.   if(!(fp=fopen(filename,"r"))) return false;
    8 n1 Q, G9 }1 Q' A4 b: A! K. G
  107.   fscanf(fp,"%s",version);
    ! v/ q" R+ I/ c& l& s* L: m  V
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }1 |- N, r0 r! Z& h6 T
  109.   while(fscanf(fp,"%s",version)!=EOF), l0 ^5 |' r% D7 \7 r2 l. I3 E4 d
  110.   {- V. \4 w7 |1 X0 {6 n: c& r
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 P8 \% C4 V  k. c5 g2 }) U
  112.     fscanf(fp,"%s",file->path);
    9 z0 `9 r& C+ Z. B4 U
  113.     ReadFileNames(fp,file->file);: }  n8 m) D9 `! R  {1 H% ]0 c
  114.     strcpy(file->full,".");
    ; A5 d( u' Q, c! Y. X0 z3 e
  115.     strcat(file->full,file->path);
    8 F2 a) s# C1 F( s1 Y
  116.     strcat(file->full,file->file);' n/ F& C' u, n2 F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())# V, y, s) p9 Y+ H- f% R
  118.     {( ]% i, i& F/ {" T3 h
  119.       file->vers=(float)atof(version);
    & e* w; U7 R$ p! R, |
  120.       UpdateList.push_back(file->full);0 F3 f+ p7 x! A# j3 r4 l" V
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ! ?. F" F0 ~( c
  122.     }$ k/ P- b9 r: k3 G1 v, f$ ~: I
  123.     else
    3 y5 t8 o4 W: X; W( b/ h% {# }
  124.     {
    - B4 u5 g+ \3 d; o
  125.       olds=(*p).second;
    & o5 O0 y9 g5 X2 s# ]8 z
  126.       if(olds->vers<(float)atof(version))
      j, o- V' M! g. T
  127.       {
    7 s% R2 t; {8 K- h% m
  128.         olds->vers=(float)atof(version);) f  m* r! [0 q
  129.       }
    ) f: [& q! [9 n( {2 N: z5 e
  130.       free(file);' ]3 Z. U! o" S7 T: w( d4 l8 F3 L! s# D
  131.     }
    1 r! P: f7 p2 h; \
  132.   }. e3 X& L/ a* r8 c: n* W) ~
  133.   fclose(fp);1 I5 ?! \# w8 L& i$ E" _, S
  134.   return true;, w6 T# W+ Y" O: u
  135. }& p$ A) ~  r5 _5 \1 @

  136. , X  z: _; w+ r* a
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    + V# i2 e, o* \$ ?6 T2 A- O
  138. {9 u4 _, X8 U- A4 K
  139.   TCHAR  szFull[MAX_PATH];
    1 I- T/ m6 m3 S
  140.   TCHAR *token,*inter;
    4 i  D( [- I9 P1 [# i; t0 b
  141.   *szPath=0;# L/ {% I( I% b/ H/ [  r' M# R
  142.   strcpy(szFull,szFullPath);
    # ?" b% I: ^  h: }
  143.   token=strtok(szFull,"\\/");
    ! F, z. h1 S# B5 _  G
  144.   inter=token;
    & ^% Q8 ?# z; C+ x
  145.   while(token=strtok(NULL,"\\/"))
    8 C9 @7 T6 e# B; \, e2 x9 a
  146.   {
    7 `" f9 [2 R  Q! |- Y
  147.     strcat(szPath,inter);+ m" P* ^) F- F5 {3 d  J
  148.     strcat(szPath,"\");; k! L# Z$ [! z4 c
  149.     inter=token;0 t- G! T7 f2 A, k5 m5 h# L
  150.   }8 Z& U4 z; M/ W2 X, \! T% _
  151.   return strlen(szPath);, m- |6 Z3 B5 D; z' {7 ?
  152. }
    2 B- V  Z' `/ s1 A* d3 o; C8 X7 @5 ~
  153. $ l1 V: n  v) S) C  o: C
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    / a: z7 v5 T& `
  155. {8 R0 i5 w; w0 K6 ?+ f! c  J
  156.   DWORD attrib=GetFileAttributes(Target);4 X# R1 L4 s& N" k' W0 J  k1 \* Z
  157.   if(attrib!=-1)
    / |/ Q- S/ g" M* `2 D) z4 P
  158.   {* ?4 I1 A( y9 u1 h
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))- N4 l% H, T5 e5 b6 {/ D& `
  160.     {
    . v1 n) h4 _/ ^9 x$ I
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    7 e; |; P# n& Y/ L. s1 j9 Q" O
  162.       SetFileAttributes(Target,attrib);' X/ A) g7 V; T  T) V/ `9 u+ s( t5 U
  163.     }
    & g4 {8 n0 c6 O  s& A) Z
  164.   }
    $ g+ J' \1 E0 o8 G; n6 h6 l' ^( G
  165.   CopyFile(Source,Target,Erase);
    & _8 w7 u& K- Y: ?5 I, d1 B
  166. }
    " Z2 P3 i, y) B0 j" I1 p

  167. $ J) K4 \! C$ {; t% B. E
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)$ z* g# A3 K& c5 z/ H$ c
  169. {
    1 U6 g+ \. V* j1 S: Z& P3 O
  170.      FILE *fp;! Y7 m1 D( A6 \+ v# p& [2 N
  171.      char  szBuffer[8192];
    $ U( u% C) Z. \! }; D# H
  172.   va_list  argptr;7 _1 e( J7 O# F/ D& o: i+ R

  173.   ~; C, O- F6 {) a( l# v
  174.         va_start(argptr,message);! d7 b# E  m& a5 [& U
  175.         vsprintf(szBuffer,message,argptr);4 p+ f7 g" g. v% m5 m
  176.         va_end(argptr);
    - ]6 H: r( M, c1 C* A% R' Z/ t
  177.   fp=fopen(FileName,"a");
    : d# ?3 c9 r% B  e- n/ f2 h
  178.   if(fp)+ ^3 z; M1 Y( {
  179.   {
    " U0 E- W+ @" w0 R
  180.     fprintf(fp,szBuffer);
    $ E3 l9 u! o# O4 L- h4 G& \
  181.     fclose(fp);7 i) g5 h3 Q# o5 I6 o; E
  182.           _flushall();
    - m, Y7 e, K: G$ ~, `1 [9 L
  183.   }
    9 R% H( m0 I3 W3 @  X& d1 z
  184. }1 t9 r6 ^: D- u3 H9 X
  185. ) a2 E2 c/ v! P. e
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    5 l# O! j, l/ x( i3 j: i5 ~
  187. {8 k5 @. c9 u+ e' n8 I
  188.      FILE *fp;2 F! _& `8 S, E' d
  189.     DWORD  attrib;
    - u% K3 g/ [. s6 h: C
  190.   attrib=GetFileAttributes(FileName);
    / U" N4 y9 d" p6 t& A7 \4 P
  191.   if(attrib!=-1)
    : B+ ]0 S2 o( o! ?5 K3 r
  192.   {1 T2 @5 \, M9 |& G7 z8 Z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 W4 r" }2 U4 b: z, C
  194.     if(!SetFileAttributes(FileName,attrib))# D+ b' u% p$ G* O
  195.     {
    & Y1 E" h- @8 l& u* s8 g  [
  196.       return FALSE;
    2 Y) _) V, P3 v
  197.     }* {* v. H/ p# M' r+ t) t- t8 ^
  198.   }7 Y4 S, Y6 w5 X; O/ T# p1 m0 [9 X
  199.   fp=fopen(FileName,"wb");, M4 @6 w, f* _7 t/ k: p
  200.   if(fp)
    3 t: M. v- \( I
  201.   {3 A/ f4 ]( z. W" |, u+ D
  202.     fclose(fp);
    ! Y4 V" n2 b/ v9 Q+ J& _
  203.   }
    1 `- g$ d0 h8 r$ N) V, u( L
  204.   return TRUE;
    . p) v5 n- ?0 G: R
  205. }
    , O# K3 a; I8 u0 W6 s3 h

  206. + G# w1 s9 @. }0 u& @
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ; G/ N4 ?. b% V4 U* o6 e
  208. {
    6 g( i  e6 E( K  q4 U$ C
  209.   char filename[MAX_PATH];9 P$ p  E( {9 r& V0 l! `- Q
  210.   LPUPDATEFILE file,olds;7 n5 r$ d/ w) m3 ~& u* A
  211.   std::map<int,CString>::iterator i;
    , C( b6 x; {7 P' E( c
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    . }8 P& Q# W1 S3 a9 [- e# O* @. G
  213.   std::list<CString>::iterator l;
    5 ^8 w* X( z+ h! b
  214. ( x0 I. ~% d) P) K- }. V1 K
  215.   if(bFirstUpdate)
    4 Z* [. p% |( r. g7 h) C0 _. P; b# N
  216.   {# b, e( R0 o- T/ {# C) s
  217.     dwCurrFile=0;: c& @4 O; S' l% w1 o3 W4 e
  218.     bFirstUpdate=FALSE;& a% i( n9 d  k; w& B+ S  {. C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 z" U  p* @  ?0 l# X8 a8 B
  220.     {
    5 V% G: O& W& e9 w5 _" W5 a
  221.       dwTotalFiles=UpdateLocal.size();/ U; d, v" Z5 }" h( u. `
  222.       dwDownLoaded=0;. E9 A& S6 J5 v& `1 p
  223.       bSilentStep=FALSE;2 ^# k% a7 Z' g/ @
  224.       bCompressed=TRUE;
    : C5 i& {$ p- ?2 V0 K
  225.       strExtLocal.Empty();
    5 X/ H2 U9 a. c- u
  226.       strFullName=(*i).second;
    . B' \$ c- O0 u) C
  227.       dwProgramState=AP_CONNECT;+ B/ f4 R" s# u) k2 g) w3 X5 i
  228.       return TRUE;% X* G' {' o  T
  229.     }
    $ [: b6 t3 A- I, n$ _
  230.   }
    ; e) i3 _( [% Q; n' q+ ?
  231.   else if(bRestartUpdater==FALSE)8 d% H, T; s; o* [0 D
  232.   {) g' \- S7 T2 d; |
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    3 B! d  t; P7 {
  234.     {* C4 {; j. L: U0 C; q4 _5 Z( l! @
  235.       file=(*p).second;
    / Z5 y4 |1 O' W3 e
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    % `4 z& T* Q6 b
  237.       {
    ' ^! b( X7 h2 h8 `# j
  238.         olds=(*p).second;
    6 Q2 H$ y- B8 T! |
  239.         olds->vers=file->vers;6 z. u& ?# b+ e9 Y
  240.       }
    9 [9 r/ _) ^' _( a5 v/ U% p; a; l
  241.       else4 e/ T4 @4 V3 f
  242.       {) V1 Y  }2 N) w" L
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( J( g/ o2 u4 m3 ?+ X
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) k' x* W$ m6 e8 [6 [" D$ _% w7 R
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ! m2 B7 u/ `1 u- _* I
  246.       }# _/ `* t0 Y7 g
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    * Q4 `0 C1 ?  H7 s, }  Y" e
  248.       sprintf(filename,"(%s)",file->file);
    ! {9 P* f0 Q/ g* M3 o& H5 L
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 v  B% Z2 W8 h* a
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }  w! h, X0 m" P' ^/ a
  251.     }. C9 ^  F& o3 u4 @
  252.     dwCurrFile++;- \( k- L7 T7 T% K- O
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 Z" s) X9 ^* \  B8 s
  254.     {
    - I% n+ [+ o" O  w9 S, c0 `
  255.       bSilentStep=FALSE;
    + B( Z! {- p5 O+ V8 h4 C0 b1 R& e
  256.       bCompressed=TRUE;
    - F7 _5 K% r. d) w; D
  257.       strExtLocal.Empty();' d* ~- p4 r( X+ K! v9 z
  258.       strFullName=(*i).second;- L4 F' r& e3 i" @/ f* u% l  q
  259.       dwProgramState=AP_CONNECT;5 ]# j7 L0 p3 f5 D
  260.       return TRUE;
    + f8 d& Z  A9 Z' D/ U) a& C
  261.     }) k1 a! g& `4 {3 q+ `, E
  262.     if(!bRestartUpdater)
    & Z  t1 P8 E: o& f# p+ x, o  b, o
  263.     {6 e! F( u1 I! L8 ?, W
  264.       int iCurrSize,iFileSize;$ O% @" Q% V$ t0 A' J7 J
  265.       iCurrSize=0;
    ( [; P  o7 s; `0 Y/ p; L* {
  266.       iFileSize=UpdateList2.size();
    4 h* D: D% j" p! W+ Y( e: Q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    3 r! w+ f0 F! \( A* o- t" _
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");$ `( ?& s) {0 D
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");- }* ~5 O! u7 T, z8 V/ m$ Q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 c9 l; w5 A! S" W
  271.       Fclearf(".\\update.dat");5 T% }0 B' H: j5 @
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    # y2 m+ |& S: X- X+ k7 x
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)( B$ [; @6 u# F- p
  274.       {$ ]8 y' z8 z) _; t' X
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())2 y; ?1 `( c+ E. f
  276.         {
    . B" p, d2 j0 ^2 r& r0 Z- A
  277.           file=(*p).second;
    ! v: w. Z! C3 H. T# f  q
  278.           sprintf(filename,"(%s)",file->file);
    & G. A% D6 n4 X# i2 A/ A, X
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, ]) P# d# o% c8 Z% O1 N& x
  280.           iCurrSize++;+ x9 A7 E3 c9 \% d7 q9 _
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) o6 F- n' v. u. {0 n7 s2 D" M; \
  282.         }
    / ?3 X* l2 o. s7 A
  283.       }
    3 m) f! J  X. t* b- b
  284.       unlink(".\\update.txt");
    7 s# a7 `7 |; i$ t0 h9 n0 J1 T' C
  285.       unlink(".\\update.tmp");7 n2 h; ]3 d7 \8 Z8 ~. Q
  286.       Fclearf(".\\checkversion.dat");
    ) N, K- m1 U. z$ m
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);: v' n, M% `$ h9 q
  288.       if(UpdateLocal.size())5 @9 H, f; }# o. x2 b
  289.       {
    # Q0 d! S' U) \1 }" l
  290.         UpdateLocal.clear();) d- X+ o9 |1 n$ c
  291.       }
    0 d$ O- S* C# k8 v5 K2 e0 t' C5 o
  292.       if(UpdateFile3.size())
    . T5 R. y; a2 U* a6 ~0 f! n
  293.       {7 s# C2 V7 ^4 i% j0 C- W
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 Y) T9 Z% \" Q$ {5 M
  295.         {
    1 F2 j. y9 J2 U- x3 J2 z, F  F# q
  296.           file=(*p).second;0 C: ?/ b% L7 L7 D" P
  297.           free(file);' b$ ~8 O* p. b' h2 L- h& F3 `: r
  298.         }' p- M& U# F' s2 V; D- D
  299.         UpdateFile3.clear();
    + P, q' [9 b" j0 j' {3 E6 a
  300.         UpdateList3.clear();
    , W  j/ w, I/ a: p8 C
  301.       }
    1 @0 N8 F, b8 W' f% ?2 n0 L
  302.       if(UpdateFile2.size())
    # m4 m8 n8 g5 t) @2 C7 N
  303.       {
    $ ^  ?: s+ W0 j" U. V$ M) M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ H+ C9 O6 F8 z: f. I8 a
  305.         {
    $ V. ]1 p% J/ q" _% q  L
  306.           file=(*p).second;- z) K% P" ^0 C% A+ T* M' Y) u, [  Q
  307.           free(file);
    ) j3 f! b" N  p8 B2 {+ L; m! M
  308.         }
    0 h1 `; g' B5 g1 [
  309.         UpdateFile2.clear();
    / h  j9 e# i, L" x9 A2 [2 P( p7 b1 z% I
  310.         UpdateList2.clear();
    ! |/ ^% G% a6 H. [
  311.       }8 t* ]( e( F; N: @
  312.       if(UpdateFile1.size())$ U+ V4 u5 B/ @5 H* u
  313.       {
    3 t* J1 T( I: I. \+ @5 C/ x* l
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' S: {9 w8 C+ @/ D' i
  315.         {
    " W$ y& ]- G( @* b( _
  316.           file=(*p).second;
      F. O" W! j2 @# N" ?
  317.           free(file);" P* @4 M4 U! v. d9 O
  318.         }
    ' k" o3 G$ a; j" \4 C& H
  319.         UpdateFile1.clear();
    8 E" P9 G. t# {6 e
  320.         UpdateList1.clear();
    / [9 X) a+ h% Z/ b+ c) D5 `. e
  321.       }' b# H3 n  Q- J( t1 B5 {6 y4 z  j
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    . k3 ]. ^0 h: ?% P- m
  323.     }
    ! v* P6 {. j0 @& O3 L* y' W% `
  324.   }
    : ?% C* P4 \" U9 j+ N( ?' I; G* v
  325.   return FALSE;7 m8 N) b1 t+ Y/ ^( S& \
  326. }& C& ?4 [8 c: ~, `
  327. 9 ~6 T* B, Q+ {3 V# ?6 N
  328. void CRevAppApp::ClearAll(void)/ Z9 s) ], g8 L+ y7 {
  329. {
    6 s+ I9 g7 ]& I" F2 i
  330.   LPUPDATEFILE file;6 e4 A/ v% ?: c0 h1 L, _* B
  331.   std::map<CString,LPUPDATEFILE>::iterator p;( c; K; o4 ]& @' F( v
  332. 6 G+ ]- B5 y* a2 P  X
  333.   if(UpdateLocal.size())
    , Z4 t" ]- R, {5 g0 ~8 c
  334.   {
    ; T( E$ m; _' ~3 \) B, k; s
  335.     UpdateLocal.clear();) m( Y2 J4 x" u* X& i4 g/ @
  336.   }7 \; w/ U2 q1 H) z2 V
  337.   if(UpdateFile3.size())
    * Z( K& _! F1 N: |5 |
  338.   {
    6 U, u3 k# n, }  J9 f- N' _
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 b8 I4 {! P( f* R- A  Z* [
  340.     {
    0 h- J( @/ f- R
  341.       file=(*p).second;# W% O8 O! w/ M/ n; _' R( Y
  342.       free(file);
    4 b5 ^  a0 J2 ]+ h
  343.     }
    : p& f( j  p' r4 K2 g/ c
  344.     UpdateFile3.clear();
    3 o  {4 H+ ~/ d4 G0 d* i' [
  345.     UpdateList3.clear();+ e# X6 T7 n, a! n. J/ o+ \
  346.   }- T! b* W% ?1 F9 q
  347.   if(UpdateFile2.size())# p4 U' B  o2 n2 |( [$ j; [' K0 n
  348.   {% v- y6 S) _1 ^& o: |
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)/ n( a- k9 J: i+ R3 ~4 p
  350.     {8 l+ i9 C! V* J8 @, o' |: f
  351.       file=(*p).second;
    / Z+ H# U# ?( s7 K$ i+ w
  352.       free(file);  W  M$ @8 O8 z0 W. k0 g$ C! F
  353.     }: T& Z0 `, i) _6 W' H- g
  354.     UpdateFile2.clear();
    5 D" a6 T/ I, y: I( S1 a
  355.     UpdateList2.clear();; `7 g- h' |8 Y/ F4 l
  356.   }
    " O, C$ t( F! c$ C/ e5 q
  357.   if(UpdateFile1.size())
    1 Q( K+ Y. Z+ ?; e' |% K
  358.   {/ h6 J! W$ R6 B, h6 u1 {$ O1 ?
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% \3 M( K* n& s- u. }% H
  360.     {8 h" x$ T7 z: W( N% K! ]- w
  361.       file=(*p).second;6 _  a2 g2 Q1 {1 F
  362.       free(file);- l5 K6 q5 Q% m- S% ?% j* Y7 C; L" H
  363.     }% o, Z+ Y% ^4 }' g/ v' z9 m5 q
  364.     UpdateFile1.clear();" b3 M, L* [8 F; m- i9 J% k
  365.     UpdateList1.clear();, ?- i  }) \, C" X0 z
  366.   }
    7 Q! E0 F: X8 c& f
  367. }  2 k$ J0 b% f5 o& B% h! d8 @
  368.   - I0 c4 k. v; _* v8 S  c4 T
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 k5 }, n8 A9 Q5 {' P
  370. {
    " S8 _" R6 F' Y) [/ V: S
  371.   int c;& ?% T$ i5 ^" K7 i9 }' s& z
  372.   LPUPDATEFILE file1,file2;- P  h( \8 u8 E6 k6 B1 p6 M
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    3 J, Y6 |! r  T3 b) V3 o
  374.   std::list<CString>::iterator l;
    # W1 J6 `1 S6 @6 Q! r; p/ {
  375. 3 t# H# ?9 M+ [# o6 f# R
  376.   UpdateLocal.clear();) |5 B9 p5 j( y3 l/ P" m
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);) ~% r, X- z) R
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    2 ~! C8 c- [6 R2 z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);  V4 |+ x2 M3 z$ D2 a! v
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ) c- T, i5 I! r
  381.   if(UpdateFile3.size())6 Y2 \/ ^3 E0 ^. c9 a8 ~7 d
  382.   {! l2 F) O( V0 d& F: f, @2 E" F: u
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)* D! [/ G+ A* L0 ~. x. n6 [
  384.     {
    ; f6 z7 B8 d5 f( G  _
  385.       file2=(LPUPDATEFILE)(*i).second;8 r) P8 Z8 b3 r3 T+ L
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). [0 ~2 M) h9 o, P
  387.       {0 _/ }, E' J3 c8 c( O) z- `
  388.         file1=(LPUPDATEFILE)(*p).second;% a3 m9 i+ }, T. l* R4 s4 l
  389.         file1->vers=file2->vers;4 t5 P$ d( ~: i9 ]& V: a0 x1 ^- S
  390.       }1 u) Z# y6 T  b7 `
  391.       else
    9 o" Y# Y2 z: @9 Q6 y+ v7 a
  392.       {, B- Y( a9 b% b% ^( y0 j8 F% x2 L
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 o/ z% @2 ^% A- y$ O
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));' p  y& O  L: U6 J' u# m& D
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));$ `2 x0 {1 {+ V7 [6 [/ L4 q
  396.       }
    & D* N& B; N1 A% \2 A5 N
  397.     }
    ' f6 }  s/ G/ I5 t, V1 B; ~4 C9 E. @
  398.   }. [6 e( _& g; X: ?& I, m; A
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! S7 M! S% J% b
  400.   {
    . t4 [% `# o% A+ o; `
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    8 r' @' R* b1 E: S) }, _
  402.     {1 ~9 j, A, e. |, h- r, [2 O
  403.       file2=(LPUPDATEFILE)(*i).second;
    # R. t0 M0 ^9 E9 V3 c9 L. A8 E
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    & W2 _2 l$ q8 e4 Y& [3 e, {
  405.       {
    , S9 N4 G7 k' X9 L" r/ H5 h7 N
  406.         file1=(LPUPDATEFILE)(*p).second;
    8 U: D" ]+ I3 ~
  407.         if(file1->vers!=file2->vers)
    - S% h$ p' u4 v
  408.         {- o/ {# D6 t$ m0 ?
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) V! m" W6 o6 k$ U2 ^$ Y0 A  y6 j/ d
  410.           c++;
    , `+ B! s9 D  o( Y3 D# E
  411.         }
    8 I$ |& k) V8 n7 z1 J
  412.       }
    - l. ~; I; F+ ?9 h! A
  413.       else( j" C) ~: K7 W: l: `$ h
  414.       {5 G2 w. X! i5 F& S& ]- s
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));8 H% O4 M% z9 l6 V. {  s
  416.         c++;
    ( }5 C" ?3 l9 i% S$ s- V, _3 R
  417.       }+ |! X: g4 J: z; h( \
  418.     }# A+ d- X0 H- ~5 C: O% W
  419.   }
    2 d# N- q8 d" y6 r1 M9 h
  420.   unlink(".\\DownLoad\\update.txt");& h) U6 k; c: }# [
  421.   if(UpdateLocal.size()) return TRUE;/ [! c4 E9 L" s2 [0 a2 ~" D& |1 Y4 i2 ~( S
  422.   else                   return FALSE;
    6 ^! ~6 m6 v% ^+ M4 e- H6 m# V) X
  423. }' T1 J8 `/ Y8 T) ~* x, t0 C1 v' L
  424. $ v, v3 A  y5 x. D1 h0 U
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    9 `# [0 y- @5 ]6 k+ y: x9 B
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"7 E& d5 t' ]6 |- \! \$ {# H
  427. 2 b6 `1 N. R" N( I( G
  428. ) k1 Y2 J* b4 D* [9 g; Z
  429. 5 j( {& u& i0 u' Q8 A% c
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)! y, h& p- q* D3 i3 e6 c2 l  e
  431. {
    - @0 C0 {1 t; R. p& n, J
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    0 `9 o( L0 \; S0 S! O/ z/ B1 q! |$ Y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' o5 a* m+ Y2 n0 W& i
  434.   {4 V, c% R& r. r; o" n! [
  435.     char szLanguage[50];3 G/ S& v# X) l
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");. J2 s1 {9 W) N" D1 H0 ^3 A
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 K5 Y7 A0 V+ w9 D+ V* w% V
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, E: a  W8 O0 M3 n  L
  439.     else                                   m_iLanguage=ENGLISH;
    ' ^) P" I2 T+ X$ N
  440.     char szRegister[100];
    ' T( o+ O8 P, K* _
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% E- z9 z" j+ Z2 o+ Y' q
  442.     strRegsName=szRegister;
    : H! Y& {+ i6 U' Z5 e9 ?1 Z& S
  443.     char szPatchURL[100];
    : f7 C9 S0 M! H: b
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + F8 g& H1 l  v! J" I
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 X0 A: e$ o8 c8 w8 [
  446.   }; A% y8 n; g- y( ~* N
  447.   else; y+ J' ^. Y* E# c: A+ L
  448.   {: ^( C5 T9 g7 A+ M5 `
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + a3 _( u1 p* N' U' H
  450.     strRegsName=DEFAULT_REG_URL;' Z+ ?0 ~3 U6 R
  451.   }
    & w/ D3 e8 ?) g4 G+ }
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    6 j# f1 J3 ^2 x# O; v/ h6 x/ W
  453.   {
      Y9 ]& n5 g/ Z0 R8 F- P! k0 a
  454.     char szIP[50];" |+ Y" n+ e# p
  455.     char szDIR[300];
    7 V$ @% O3 f. f% w
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
      D. j8 `& t2 E% }3 F4 Q$ `( _
  457.     {% _# D2 x8 D( u8 D/ Y9 ]
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    7 m4 ?& G* _/ Y1 X2 }
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    0 L. o6 ?( W1 l
  460.       strHostName=szIP;
    ) _# ]7 [; [! r  u7 N, |, o. }
  461.       strHostPath.Format("/%s",szDIR);+ p# o1 g+ |6 x2 h" p: P  \
  462.     }
    ( e" q* J' j. m, H% ]- S6 p7 N+ d
  463.     else
    . M" w% Z: x, A0 D* k
  464.     {/ R# Y8 A7 `" P; N9 l- p$ u! G
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , @3 M3 O4 a' v# g) O$ ~, Z7 D- I
  466.       {5 [& X& o  l  l# J7 n
  467.         char szLanguage[50];9 ^" c1 J" O2 `& e' A8 t" I
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 s0 ?; t3 @& j& [
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % j1 l9 z7 t" K9 B
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) i  f* b. p8 ~( e+ a$ N. b+ J
  471.         else                                   m_iLanguage=ENGLISH;: v: G! e' D2 Y5 e) D
  472.         char szRegister[100];6 |3 [3 [  b- c  X: E1 }* @1 F  w: w( x+ b
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");# [. X: ]0 X* O9 W! v; z
  474.         strRegsName=szRegister;
    8 t$ T/ M3 z# k9 j! L6 V3 G
  475.         char szPatchURL[100];
    $ J3 K2 @, l  R2 G  |5 I7 f. R0 h
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( R; ]& E$ r+ n2 M7 S; N" W6 U7 r
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- P3 r0 E$ Z# ~/ @6 ~
  478.       }
    3 g5 x1 h. B* L# d& z6 U/ u
  479.       else2 @8 H. G6 _/ I* T+ x4 ]0 H
  480.       {  I8 J, D0 f. V$ j
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( h; v7 n& ~$ N+ ]# h
  482.         strRegsName=DEFAULT_REG_URL;2 [" w0 V. V' v$ O5 x7 q
  483.       }* [: A, f$ Z( p, z- J/ S' M! L
  484.     }( ]5 {1 @  S! m4 A
  485.   }
    9 o  M! I6 w/ ?
  486.   return true;
    " h( d" l- L# w1 r% W4 E* m
  487. }0 l3 A  z! w3 F2 Z! K9 S8 w
  488. ) a# h5 y$ K3 u4 G8 E' N/ w
  489. #include ".\ZLib\unzip.h"
    1 j7 e# F- p. }+ u0 C; n5 W
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    3 m3 W4 Z- [  B" C9 f, a) S
  491. /////////////////////////////////////////////////////////////////////////////
    2 a+ S/ L) ~) T
  492. // CRevAppApp initialization
    ( c& l6 y; G( Y' }

  493. 4 {! |% s1 H( h0 }& e0 e9 Y! R
  494. BOOL CRevAppApp::InitInstance(). b+ M" D9 D0 F2 a/ x  p- R
  495. {* f& g6 G$ N6 W( t5 ]/ N4 b
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    / D3 Z7 n6 |# A* \, o9 m
  497. / q, {4 b0 X, O) s& {: G$ ~" Y
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    $ [: l9 c$ l. f& C$ X. L
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)). A6 C( s, ~) g: E7 J
  500.   {! b% W# O8 b2 o4 R: x
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    * r2 C) ~- u5 D) Y3 Q- p' j" Q! `7 y7 y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);$ m5 Q: X7 B' s% A# z- d( S( Y: B
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ) U' y( T# A0 {. ^
  504.     {
    ) C# V) ^1 w7 Z
  505.       strcpy(szPath,szPathTarget);
    - k6 k& f$ n2 w6 t* d. c. i
  506.       SetCurrentDirectory(szPath);( |0 \9 B7 r3 ^- Z) Q
  507.     }$ M; @& h5 m& \; \% O
  508.   }
    $ a7 I0 ~9 w; u
  509. #ifdef _DEBUG7 X$ _7 |7 }$ C  |" I- a! i
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! m' z9 C) _; y) h& M/ i
  511. #else' c0 L" U3 |  F# l8 Y4 g- R
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      z9 I6 w( V6 b* o1 c+ F/ |2 _1 _
  513. #endif! m% \) u1 ?  M; H( Z1 m# k, }
  514.   {
    3 T! w# F; V. R$ v# E8 L% _% r
  515.     char tempFileName[MAX_PATH];
    9 G8 Q8 c: L/ f0 [/ s! C
  516.     strcpy(tempFileName,szPathSource);, R5 z1 B- g- _6 D$ f/ d8 ^
  517.     tempFileName[strlen(szPathSource)-12]=0;
    # A5 `8 }5 q/ y( m  T
  518.     strcat(tempFileName,"\\$CSUpdate.exe");. a  ?- C$ l* O% t8 t: p% |! n
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);% Y' a: D6 w8 ~
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    4 H& i# c, o4 o' E7 l0 |$ T9 U
  521.     return TRUE;8 b- n+ W  h) Y: }, q4 t
  522.   }  p$ w2 Z9 J- q% h/ C" b  D
  523.   // Nuke 0118: Delete run.exe
    0 u: i) j* f! A6 s+ M- M5 l
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );$ h( R. v" C$ u, ]0 ]( b8 {$ H9 ?
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");5 {; q8 j9 b2 _; X5 \& O3 |
  526.   if(!ReadCfgFile("Config.ini"))% y" b: d( W7 f4 C' Z* c
  527.   {. ~+ C/ D6 Q3 z3 ?# }  A0 g7 d
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ! @) g( q: J# N1 T4 D
  529.     return TRUE;
    . c) k% I. x2 g" b4 u& s7 j
  530.   }( T0 m! c. f. u$ v1 ^$ O& @
  531.   HANDLE mutex;# b9 t9 S- Q  I! b% b
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))7 I5 S- D. S  c. \% D+ ]$ s6 f
  533.   {
    2 C% ]1 P3 U0 L9 ^7 g' ^7 s
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)! e) z8 T) F4 e7 {- D! O0 p
  535.     {
    1 B5 T. Q, ~% ^
  536.       CloseHandle(mutex);7 f) U( g3 |/ w& d; M; h
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
      P- P1 F: Z0 J/ o" n# o9 u
  538.       return TRUE;0 E1 B% g  e/ v* x7 J7 Q
  539.     }
    # b& o* K7 Z+ I9 y% a
  540.   }  
    + c& V4 i7 E9 M3 v: C2 }" ?& L
  541.   CloseHandle(mutex);
    $ B' h+ l- A, `/ N! Y  }/ m  a4 h7 E
  542. 6 n6 R7 K/ g( V! N7 t" c8 `$ ]
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    . }, e% x6 k7 N2 k( U
  544.   }8 N8 D8 o7 R# o
  545.         AfxEnableControlContainer();
    ; V  ^; m& J. X7 j/ z% Q
  546. ' X. e  O* j$ y( `6 U
  547.   bCanUpdate=FALSE;; i& k8 E* K# m) W  [
  548.   dwStartUpSteps=1;
    & W4 I& H% R. p/ t" I5 ?% _
  549.   dwProgramState=AP_NOTHING;
    7 x; v- w3 K6 U; `+ u% I9 Y
  550. 2 T/ Z, G0 ^: _& v& V
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);5 q, P5 A" {% I" P' V

  552. . m! c$ [, J5 R" v
  553.         // Standard initialization. i& c2 ~4 N- g/ K
  554.         // If you are not using these features and wish to reduce the size
    + x2 y. j0 G" Y1 N& G
  555.         //  of your final executable, you should remove from the following, N/ S2 |, D; u3 W: _! H# s
  556.         //  the specific initialization routines you do not need.% l0 Z3 _! Y! r5 i3 B
  557. # B& Z& G0 J% v0 G1 b
  558. #ifdef _AFXDLL
    ' ]5 d/ C% r' _
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    / v" J; j& l' v+ M* k
  560. #else
    1 I; m4 [) G' v
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    . b' M' b) {4 v! e
  562. #endif
    ( x" \0 K% J9 {, F* o9 W4 b6 i
  563. ! |) V) u8 I2 m  r: p$ ^( ]" }
  564.   dlg=new CRevAppDlg;' f/ o; @; d# i
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    & n; {. J* ?+ F
  566.   dlg->ShowWindow(SW_SHOWNORMAL);* Z4 t7 S* H5 p2 o* {- W! R3 Y
  567.   m_pMainWnd=dlg;/ ]$ T+ ^* S9 L# M! `
  568. ( O" G# A( ]* ^
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);- x. e4 h# S$ N5 i
  570. % j: c! v$ ~& N, Q2 |  Q$ F
  571. //  GdiplusStartupInput gdiplusStartupInput;1 b- J, ?+ W/ o5 A, Q3 ?
  572. //  ULONG_PTR gdiplusToken;; c+ d( P: f% `4 ?6 }6 M1 x' T1 s1 J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);) q9 _7 G* r# f% _) Y
  574. : u+ {; l2 F; m: a- G% R# Q; F
  575. //        CRevAppDlg dlg;
    7 E' `9 r8 Q" `* v& M  u9 L
  576. //        int nResponse = dlg.DoModal();8 h7 b7 w2 `' g% L
  577. //        if (nResponse == IDOK)8 R; U7 k, z8 _. R# l+ R
  578. //        {( ?4 Z/ }' J% d4 S& i- `
  579. //                // TODO: Place code here to handle when the dialog is* s; r* ~9 n% {  M/ v- N
  580. //                //  dismissed with OK
    2 a( R1 M2 X! X7 N" T
  581. //        }, l! z: Q( `5 n/ A/ k( R7 X& F
  582. //        else if (nResponse == IDCANCEL)
    % H8 P" D4 I$ |6 K5 J2 R: O0 ]
  583. //        {
    ( E$ R- T7 [$ ?- W' ~# p
  584. //                // TODO: Place code here to handle when the dialog is9 c7 @# R% [; c3 E1 i! L5 ~0 k
  585. //                //  dismissed with Cancel: U; G% F# `' r, w- @
  586. //        }& I8 i7 h" B" _8 E* Z, ^+ R
  587. 8 [1 w9 R" Q4 V& R4 R: W
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    , {* Z) E& @2 c" \' |* N. p$ W
  589.         //  application, rather than start the application's message pump.
    7 c; k9 K  W/ P0 Z
  590.         return TRUE;
    6 P6 I% O- f1 _* `# S/ o7 Y
  591. }
    1 @. S# W3 S% c; G9 B# O; O

  592. ! Y' b6 t% U6 K$ M( w0 a0 h
  593. char *CRevAppApp::strtok3(char *pSource,char *token)1 e( I4 M, O5 u$ s, H
  594. {, q! X0 o  T) t5 M/ R# d
  595.   int i;
    ! R$ {& T* I& D) \( ~; v5 l1 Z
  596.   char *szRet;
    / |% J* a& z' F% }" l
  597. + k& _& x, K. ~- Z
  598.   if(pSource) { itoken=0; sztoken=pSource; }% t! x+ Q) s/ `) {
  599.   if(sztoken)2 I; n5 T' c: s& z% l) X- p9 ~
  600.   {6 f! ^2 l/ y* t) L6 M
  601.     szRet=&sztoken[itoken];; k9 |- J4 j; n( U
  602.     while(sztoken[itoken])/ z( i5 M3 L) g$ A+ n, R
  603.     {
    7 f1 P) x  o7 C( t: {+ C2 l
  604.       for(i=0;i<(int)strlen(token);i++)
    + N) ]4 e6 K9 T: b
  605.       {8 g1 c1 q/ d* v" C+ `$ ^; m# q
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    - e7 z" U! s: H" l- v2 d# q
  607.         {
    * u4 Z: u6 c1 r4 r" |4 t/ W1 n% q
  608.           sztoken[itoken++]=0;
    # z0 [" ?7 Y- B5 \9 o8 _$ {
  609.           sztoken[itoken++]=0;
    - }" N! H. r* L
  610.           return szRet;; t7 M( R6 R! N' ^, G, ^0 Q
  611.         }
    : L4 P( T* `" q8 h( O
  612.       }* K# ?. I6 ]0 @  m5 S
  613.       itoken++;: ^- v* M/ k6 \3 P$ b1 d; s
  614.     }
    - W; M; ^9 s! t$ L& J% _0 `
  615.   }
    / G9 K9 \* D5 E: }1 _
  616.   return NULL;) x6 c: J/ b* Y. D
  617. }5 M; a2 v1 [: a7 b  O/ h! ^

  618. . y# T/ x( E8 `2 {3 r. r, S
  619. void ProcessProc(long Total,long Current)+ U7 @" h. h) j9 D( R) P% N. d
  620. {
    + z6 f- n0 b/ G5 `' A1 t3 [
  621.         MSG msg;; F! @. a0 I0 @8 O& }
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    . P) S' z3 R0 m% l0 z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));2 G* v7 f* e# t7 N4 x1 b0 o
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ d! q3 u0 b! ?, |4 V. Q
  625.         {8 [$ R% c! G* s+ i2 k
  626.                 if(!GetMessage(&msg,NULL,0,0))
    # L# M# ^5 s" v/ a: l
  627.                 {
    ' ?2 \% e( G# P7 Y
  628.                         return;9 O) X7 {# s' T6 Z$ d! o
  629.                 }
    % @: I) K0 L* n8 H
  630.                 TranslateMessage(&msg);
    ) ^4 R# z/ k/ S$ c+ B! @4 Z1 P* A
  631.                 DispatchMessage(&msg);2 [8 j' P& |0 N% f+ r/ J) c& ]$ l
  632.         }       
    ) P" p1 f; W4 y- M6 L1 e
  633. }
    9 P" T4 G) J# \# ~3 _5 Y3 V3 z
  634. 0 n: k  i+ d0 U; d
  635. BOOL bFirstChar=TRUE;+ K  }5 y  ?- J  U! \
  636.   c; G0 m6 L4 c7 W9 i7 m% j5 z( b5 g
  637. BOOL CRevAppApp::OnIdle(LONG lCount)4 }% K  A1 a& Z" D
  638. {
    ) h7 w- j3 p- y9 A; y4 r; y
  639.         // TODO: Add your specialized code here and/or call the base class
    * ?/ ~8 A+ d0 e8 P
  640.   switch(dwProgramState)
    $ A( x" W# ]: d/ e
  641.   {( V" S) J2 X0 W, U
  642.   case AP_NOTHING:
    7 z! d0 X6 P1 i# {8 ^1 K
  643.     switch(dwStartUpSteps)
    6 A# d0 g5 ]4 `, m. m, Y
  644.     {0 d4 l, G! \$ ^, D5 C- i0 }
  645.     case 1:1 g* h8 ^4 p& v" N
  646.       {
    9 K0 }7 X7 d" Y! X
  647.         int i;
    . d: n4 I4 j8 H' w- }
  648.         CDC *pCDC=dlg->GetDC();2 d6 g2 n3 Z$ n" H3 n4 d. J
  649.         HDC hdcwnd=pCDC->m_hDC;
    . l# M6 t* u. H3 f
  650. //        Graphics graphics(hdcwnd);) o- d3 T! r6 B1 z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");9 B" d) k# p/ k
  652. //        INT iWidth=bitmap.GetWidth();
      |  f: [( a2 @+ x+ E
  653. //        INT iHeight=bitmap.GetHeight();6 ~7 O. C, r) s
  654. //        Color color,colorTemp;. K1 L2 d3 I: [: x. L" Q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)9 X& Q$ C8 p2 @# u7 O3 X" U
  656. //        {5 C( p4 Z5 ?7 M$ E7 b
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    0 @0 S+ n5 V% a3 e3 I8 a
  658. //          {7 |) Y/ Y; `) G/ F
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    1 m* m9 n- ?$ t3 z! U6 {: {" G
  660. //            colorTemp.SetValue(color.MakeARGB(/ ^9 t' n0 x7 `* l
  661. //              (BYTE)(255*iColumn/iWidth),7 p4 Z6 g/ H: i: r/ N7 K
  662. //              color.GetRed(),' D& a" \9 p$ L$ l
  663. //              color.GetGreen(),
    ; J+ {) N0 @% W* d, g: H
  664. //              color.GetBlue()));6 L4 f4 O% w/ [% c* A
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # ]$ W/ f! m8 T) Y5 K
  666. //          }) E" p# B$ ?, G1 }' o6 B
  667. //        }/ k' _, F6 v. S+ h! c
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);# A( M; a5 @, z1 Q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 a" U+ R: {6 w4 T
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ) @8 D; K4 `6 P/ z9 A& d* m/ S
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' \5 [3 V5 w& E+ n
  672.         for(i=0;i<240;i+=8)
    4 V: N) }7 [" s1 Z1 h: h
  673.         {1 S: V6 h4 ?6 E4 b+ |8 ]
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 s: @5 u0 ]0 J( f7 |
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 U, q! x1 A9 I' a2 x/ \. b* o0 k
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);1 }' q" k, t2 w$ [7 e
  677.           Sleep(33);
    & c( n: G$ y  o5 f! @% ~7 [
  678.         }3 y$ _; E3 E! u3 u: g: G
  679.         Sleep(1000);
    : s2 O9 L5 ?( ~/ O" m- _4 p+ f0 q
  680.         for(i=240;i>0;i-=8), _9 Q2 c+ O5 j! }- t! y8 ~; a
  681.         {
    - K  w  J% R. B, Q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 h, u, [* K  k7 z3 S) B
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 g1 d& \$ q' b2 m8 [2 A4 E
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : p5 j7 x0 A4 h  ^
  685.           Sleep(33);: a% T: N6 q% d) U% \; }4 X" _
  686.         }
    $ [' T, q2 D( g9 i6 q% [
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);. ?( Q6 x! H, y( o
  688.         dlg->ReleaseDC(pCDC);3 X3 Z; V( e) I) M/ c" H1 z
  689.         DeleteDC(hdctar);
    8 b& M7 m; ^; f5 J5 y
  690.         DeleteDC(hdcsrc);( m" n0 G, h' O/ f
  691.         DeleteDC(hdcorg);
    ( h0 B1 ~1 J0 o$ V
  692.       }
    ) B1 w( F! O' _, y% S
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    0 I  D! J" X2 q; j* U# Y  X& L0 P
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 ~4 r% R6 N7 n2 t3 n1 v1 U$ x4 K- v  z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    1 S1 M8 B. M. M* [# A+ S1 w
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");" @0 r* E9 Q9 q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 X$ W+ m+ U/ W+ U
  698.       if(!Dn.Connected())6 A! ]" S- n/ t; f" u
  699.       {2 N& G" G' z0 N( D' a0 C, G
  700.         dwTotalFiles=1;! _" M) F$ u3 {$ a) ~
  701.         dwDownLoaded=0;% D) F( ]0 _% ^% e4 d! W9 h; o
  702.         bSilentStep=TRUE;. p3 ~" O' a. Q# @1 M. Z. H8 c
  703.         bCompressed=FALSE;
      b1 N/ X  A6 e! P0 v: Y* j6 b
  704.         strExtLocal.Empty();
    4 Q: j" e8 m* ?
  705.         strFullName="readme.txt";6 s) _, a( u& C
  706.         dwProgramState=AP_CONNECT;4 ^, D! ^9 y6 j9 B. C+ K
  707.       }$ H7 ^, x: ^: h1 @/ M8 ^8 p6 Q! u
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();7 s' B0 t( |; ~
  709.       dwStartUpSteps=2;5 ]) l/ V* ]& I+ F% H3 t
  710.       break;
    : n% f3 s9 i6 R, B
  711.     case 2:2 g8 r. ?$ h1 l, Q/ w- }5 `. M
  712.       {8 L* K/ F% Z- P3 b& x
  713.         int iEOF;: j8 u. ]7 a$ p+ ^$ K
  714.         FILE *fp;
    8 p4 P8 F* X6 m& s
  715.         char szString[512];
      }) F# w: ?' D
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");! B4 E- v3 x( J& |  f1 M( D( w
  717.         if(fp)$ d* V: F6 D& O1 o! B3 h: q  a, i
  718.         {0 f/ N& V# A; s8 P& A
  719.           do
    : f7 i; G: Q! F0 _$ V: [0 J
  720.           {9 y  ~/ ^" w0 I& C2 O
  721.             iEOF=fscanf(fp,"%s",szString);
    / c3 B' Y: O! k: N+ U
  722.             if(strlen(szString))
    % w! j6 i- G$ ~- U" ~- K% o: }
  723.             {: _3 |- q! w3 [
  724.               if(bFirstChar)
    8 F* ~5 A& s4 a: L3 J; @
  725.               {: m: x# D" O9 L2 k. H6 F4 C
  726.                 bFirstChar=FALSE;
    ) L# W) T' k4 `5 a2 V' W
  727.                 bConnectIsBig5=FALSE;8 N) D& p; |- D" N* L5 m; _6 f
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;% r1 Y5 Q7 k1 o) Z" S9 m
  729.               }( ~( T5 \+ H$ a7 j% t# M
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));3 K: b2 R% _, o& n: w
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    / T4 j) w" i- E* _. d) W3 n
  732.               dlg->m_ListText.AddString(szString);5 z8 G2 R9 J8 y5 _* s  X  q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' K+ J! R: t( x
  734.               *szString=0;
    7 x5 W" `( L& B- ~% p# }
  735.             }
    ' z5 r& c3 C8 U8 i' r
  736.           } while(iEOF!=EOF);
    ( `5 {+ a1 w3 ?9 y7 F0 b
  737.           fclose(fp);- ~5 I; @- n/ x: d8 p
  738.           unlink(".\\DownLoad\\readme.txt");
    9 M4 ]5 S+ s* y0 X% t1 S
  739.           dwStartUpSteps=3;
    ! F) w% c! A* Q" N4 D
  740.         }
    1 c/ }6 t- K0 g; a/ T2 y
  741.       }2 c! @- e+ t% I* _) F8 E, U) \
  742.       break;: P& `; n- t2 l3 B# A* T  l
  743.     case 3:
    ' h; j* c4 b+ x0 |: L/ ~5 t( Y( \9 E
  744.       if(!Dn.Connected())0 ]* }, I1 Z- W: N
  745.       {
    ( s( K) q, t$ h0 [/ Z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    9 o- g" ?1 ~& E
  747.         dwTotalFiles=1;
    " y5 O+ |6 U/ B: q
  748.         dwDownLoaded=0;
    , u) y' A. v+ n3 ^  q
  749.         bSilentStep=TRUE;7 ~; w8 t5 }: m
  750.         bCompressed=FALSE;
    * t2 c4 V+ r7 J, a0 e: A; K2 Y3 y$ }0 N
  751.         strExtLocal.Empty();
      ^1 Q  A7 J* N# B, g$ U/ R
  752.         strFullName="checkversion.txt";) D# O0 |6 W$ s& `+ R& c4 s
  753.         dwProgramState=AP_CONNECT;
    * E) E) v4 Y7 P( k
  754.       }! ?* u2 k% C9 `6 K1 G+ O
  755.       dwStartUpSteps=4;
    0 z; j4 _7 Z% F. J
  756.       break;
    : x3 w. f/ V* e  s2 U9 }6 R! T# g
  757.     case 4:
    2 u/ m0 G+ m9 f+ y9 F8 j4 g
  758.       {4 T4 S& x( j" S! u' J8 m" q# U
  759.         FILE *fp;
    * b( u( y- o5 u* f0 I, ^9 P
  760.         char szString1[128];+ i  W& D/ \" x% T0 a
  761.         char szString2[128];4 q8 t1 z1 C4 a" N
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    9 h8 K4 o& j3 H1 M( D' Z% g
  763.         if(fp)
    & @" u  V: V3 `% {% I
  764.         {" I- z$ p) A7 I0 k' G7 ]. A
  765.           fscanf(fp,"%s",szString1);/ [7 Y8 C5 j: o( r* y
  766.           fclose(fp);  z1 {0 u# A% M2 c4 @9 v
  767.           fCheckVersion=atof(szString1);9 K3 S: n# T' d2 G+ q% W
  768.           fp=fopen(".\\checkversion.dat","r");
    * a' b, W- a2 Q6 f( E% a+ z
  769.           if(fp)) j4 z3 T/ P0 w' C" f7 U0 W
  770.           {3 l0 L) y, G# J5 m' `" C( ?+ h8 J
  771.             fscanf(fp,"%s",szString2);0 l5 I* s' v( F2 M
  772.             fclose(fp);
    6 Z$ i9 y: z5 K3 }& I8 n
  773.             if(atof(szString1)!=atof(szString2))% F6 T! r3 c* D. j7 {$ U
  774.             {
    " I0 O4 d; `0 [1 ?
  775.               if(!Dn.Connected())9 L# ~6 H& ^! H8 g  I. _; O; ]
  776.               {1 ?' A7 P; G  x
  777.                 bFirstUpdate=TRUE;' T: ~& w; {2 U* }' z
  778.                 dwTotalFiles=1;9 s3 e  [$ S) X5 v. Z
  779.                 dwDownLoaded=0;) y8 _0 d3 E9 h7 ^8 p
  780.                 bSilentStep=FALSE;3 J& ~6 T, ]1 k7 [& X
  781.                 bCompressed=TRUE;' U5 n/ O* Q" Z
  782.                 strExtLocal=".\\DownLoad\";
    9 K0 g0 E9 f. r. y, H  [
  783.                 strFullName="update.txt";9 j8 k- Z# e9 F$ m" X$ f( u
  784.                 dwProgramState=AP_CONNECT;" k; ~" ^' p" C# ?+ D. x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, k+ q1 b9 R3 i  Q/ t, S
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 _, K; {+ z- y% J+ X" M+ U
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");( t, J0 s1 |/ X/ C/ s( n4 g

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

; E4 L& h  N7 W$ R2 T6 [3 A4 d* A: E. U+ ?! i( n/ V6 K

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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