找回密碼
 立即注册

CSUpdate.exe源代码

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

* O9 a/ u# j0 n. a4 u: L! ^5 c( G" [
  1. / RevApp.cpp : Defines the class behaviors for the application.
    - l! _6 e( s9 _  L. x4 o
  2. /// H% R. J- t! l' Y
  3. , Z7 b* ^& [4 P" [& ~4 N' \
  4. #include "stdafx.h"3 V, H' X3 z! a3 }" g7 h

  5. , S( X; e% m& ]4 @2 Z
  6. //#define UNICODE8 Z% a, D3 |8 E, h
  7. //#include <gdiplus.h>
    ) B, D% l: U! H& e: U
  8. //using namespace Gdiplus;* S8 Q# `" D, U7 ~$ c' o! {

  9. 0 S& j8 J* t( l5 J/ i
  10. #include "RevApp.h"5 u3 n" {8 i8 Q- S. k6 I: t
  11. #include "RevAppDlg.h"! W/ o  s9 t5 Z  a
  12. ! U5 S& @  r1 ?* ?. S" r0 g
  13. #pragma warning(disable:4786)
      V5 C  n2 w( k9 W+ b( H; r
  14. #include <map>
    9 t; P5 k9 i' \: T! r
  15. #include <list>
    1 f7 d8 W8 T, j9 |* Z; a4 F, W
  16. #include <direct.h>" Q) _# j6 o) A1 e7 \

  17. - @, [0 M, G! @# t3 ?4 V
  18. #ifdef _DEBUG; `6 R# u+ g3 f$ m* W6 H7 p4 y! o
  19. #define new DEBUG_NEW7 v4 a) t1 ?/ @( O& H8 S: K
  20. #undef THIS_FILE
    ) u) x# s! }6 a8 l
  21. static char THIS_FILE[] = __FILE__;" ^# u1 E: [; r& |% P
  22. #endif
    6 p+ A5 I2 t+ d$ v8 r, L% g7 D
  23. #include "SkinResDef.h"+ _& M7 U% f! \& x! T% k
  24. #include "ChangeBG.h"4 x3 i4 C' s- O$ f( r, r
  25. #include "AFXINET.H"( q9 s4 W( T% E" f
  26. 8 F% f$ D$ F& \- j
  27. #define TRADITIONAL_CHINESE 03 q5 D. k5 O0 {$ E& Q1 P  l
  28. #define SIMPLIFY_CHINESE 1$ y. A7 q+ f& m+ {3 A! M  w9 T
  29. #define ENGLISH 2
    7 V/ v1 Z# `2 f$ w" o) `
  30. int m_iLanguage = ENGLISH;' `9 c" a9 m& ^
  31. /////////////////////////////////////////////////////////////////////////////
    + }8 j: F5 W2 a' @+ k. s+ |) y5 i# e
  32. // CRevAppApp
    1 j( o! H: u: Q- z
  33. " l3 B8 {' |  P
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 b7 ?# j5 u, M0 [! J8 g4 A6 q
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    0 o4 n7 Y1 S1 O1 p: B- u: v' M
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.- g  W; K8 f8 F% m9 F
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!; [) D8 C, y0 k* c
  38.         //}}AFX_MSG1 n; {: t: l9 O) q5 w
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)$ a" t2 m1 N4 t
  40. END_MESSAGE_MAP()
    ) r. [8 c7 D) `; G

  41. 6 ~8 a: n& H. |
  42. /////////////////////////////////////////////////////////////////////////////
    ) m  ?2 d# S1 T1 D$ o* I! e2 j' }3 V
  43. // CRevAppApp construction# [3 A- O7 I, d
  44. : N' l. g- K8 S2 d
  45. CRevAppApp::CRevAppApp()
    ( b) J( ?/ V+ f4 R2 H
  46. {7 W; t$ X, W4 K( [8 p
  47.         // TODO: add construction code here,  J4 z" F) i& ^. O
  48.         // Place all significant initialization in InitInstance! o- Z2 ~9 K; ~' N4 T6 C' d) `
  49.   bDisplayIsBig5=FALSE;
    ) {: E* J+ S5 t2 v
  50.   bRestartUpdater=FALSE;
    . G0 W( F0 l; S4 N+ _% W# e) R! I
  51.   bFinishUpdated=FALSE;
    $ w& ?1 s( j) h% S
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    - T' s5 X/ s$ s- G6 p
  53.   InitChangeDataBig52GBKS();
    & a* _+ `/ \/ d5 G: Y. E9 u
  54.   InitChangeDataGBKS2Big5();
    ' ]2 `9 v6 i9 f& L
  55.         //0 e# f# A2 S6 a% S/ b# d
  56.         bClickRunExe = FALSE;3 `. r( r' K; v: Y0 m0 O! ~7 ~" T- ^
  57.         //) }6 Q% f* `" |1 Z2 m, k$ [. o
  58. }
    - J8 X2 u: g+ q5 _' y+ T1 k
  59. * U9 B" U9 L; ?/ U$ C6 U
  60. CRevAppApp::~CRevAppApp()8 r/ c4 X- y& T! N3 ?
  61. {: a3 R) _" \0 O* z( y' Q
  62.         // TODO: add construction code here,
    . p& K9 \; v3 M6 N7 ~
  63.         // Place all significant initialization in InitInstance" Q% l5 w* K. ?8 n
  64.   EndChangeData();& `; @8 p" J8 c8 t) Q( E6 @* j' f; E
  65. }
    * o; H. ^1 a1 V
  66. 0 n  y1 n) G5 Y
  67. /////////////////////////////////////////////////////////////////////////////# H6 Q& K& m' }& A
  68. // The one and only CRevAppApp object7 M/ S) ?2 Q5 R# u
  69. ; F% i' _% }% w& t* c, W
  70. CRevAppApp theApp;7 l% t/ ]4 I2 @. t8 }8 O9 P
  71. " W" L( u# v' \5 A* q
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)* V+ U. i- Q( `7 e, V: s1 ]: y
  73. {$ d5 `4 K; s% S# ~4 L. B
  74.   int iEOF=0;
    0 D% M; q7 R( l' }( e6 z
  75.   char szTempName[MAX_PATH];
    ( S$ M( ^) s! H" H+ a
  76.   *szFileName=0;8 Z( h5 a2 S3 ^! m* B( S  I
  77.   iEOF=fscanf(fp,"%s",szTempName);
      Z5 x: D% h6 \( D" w7 r0 G1 H9 d
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    & b7 m. `# G8 W
  79.   {
    / B9 o+ u9 C$ A
  80.     strcpy(szFileName,&szTempName[1]);
    1 R& W2 P( S) y; S% z- v" v+ \7 L" Q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ; [4 W- l5 j# y4 g7 N- k
  82.     {1 N1 n1 A3 q9 ~# J% J
  83.       iEOF=fscanf(fp,"%s",szTempName);
    " r# @9 c  q" N! W
  84.       strcat(szFileName," ");
    % _) i7 `- o/ ?' v- Y, A* P; p
  85.       strcat(szFileName,szTempName);4 _: u  ?2 V; J; Y, Q* g1 J
  86.     }$ q5 w# e" s5 Q# k2 a1 W
  87.     if(strlen(szFileName)>=1)
    ( k* D& y* K9 ?
  88.     {) W+ H& H' c5 ^/ E- Y
  89.       szFileName[strlen(szFileName)-1]=0;7 H, V- E2 P, |9 W6 {
  90.     }% o0 c" u1 z1 ?' K, S( ~
  91.   }, P5 b/ l$ z2 D2 Z
  92.   return szFileName;2 K( G$ F. P2 q1 i
  93. }$ t/ |7 p1 Q& [$ s3 q+ |* ]# Z! W
  94. # U. f. M9 H- s& d* e) T! L7 @
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    3 }, Z) s2 v+ O- t) O6 J
  96. {
    # J) ~1 h$ z: A  A/ F2 R: u
  97.   FILE *fp;- A& b% K% M; G" ~2 x* d, l
  98.   char *key=NULL;
    ) G2 ~5 F6 U: i5 d  E) n1 h) b7 d
  99.   char version[MAX_PATH];) J0 j. M  j' n9 o! b8 r
  100.   LPUPDATEFILE file,olds;- Y6 M4 S& f4 M  q0 t
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    : l  |$ M4 f( `5 b" n! m

  102. 8 E  R' n' o4 _6 t
  103.   UpdateList.clear();# A  v( z- ^9 T/ Y
  104.   UpdateFile.clear();
    ' ~1 ]2 s, b3 y' R( A3 k, t* N5 I
  105.   if(GetFileAttributes(filename)==-1) return false;* ^/ r0 T: ~5 {$ X* f
  106.   if(!(fp=fopen(filename,"r"))) return false;; ^% n5 J/ Q, j5 s- U. k  }2 R
  107.   fscanf(fp,"%s",version);1 J2 ~; T: c& z4 I* m7 J
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    / m; v0 W! h9 i' e: h+ }( Q3 `& d
  109.   while(fscanf(fp,"%s",version)!=EOF): p8 V" ~9 H0 W6 j. G* ^
  110.   {8 {! N2 i( {( z( X# b3 s; q
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 r/ {3 r( R# w: V9 h6 x
  112.     fscanf(fp,"%s",file->path);
      b9 J  o2 B' T& j& v2 ]8 i; ^) k
  113.     ReadFileNames(fp,file->file);
    / o% c  S* B. D9 c7 |& Q8 `4 x4 r* V
  114.     strcpy(file->full,".");
      u% d" N; R4 r4 h& ]) K! I' Q
  115.     strcat(file->full,file->path);, Q1 B5 N' n4 I; U5 k2 g
  116.     strcat(file->full,file->file);
    ' X& O* A3 e; Q* c! l+ V
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    , y( P; L6 W" f! C
  118.     {
    * O; n3 m$ \  s, A2 k- j* g
  119.       file->vers=(float)atof(version);4 U) s$ Y& r( Q6 p6 |1 v
  120.       UpdateList.push_back(file->full);- V8 f  H" e$ W( X2 Y" k2 |
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));) b1 U& `0 ~2 K3 h
  122.     }; e" r! y0 R' N$ l
  123.     else
    ( ^  F6 V: B6 l: ?0 y
  124.     {2 ^& j6 N$ T3 }' A. F
  125.       olds=(*p).second;
    : l% V0 f  V: o8 t8 U- B5 b
  126.       if(olds->vers<(float)atof(version))
    ! W) V# l* s9 P7 K1 r) _
  127.       {
    ; R  E7 b! C9 _0 N
  128.         olds->vers=(float)atof(version);4 @- ?5 D4 C2 H' P. J3 e. L
  129.       }: P* F; D% @( ?& P" f! x( g
  130.       free(file);
    $ T, I. x! N, k2 c: Q* J
  131.     }
    1 O0 U" k6 c3 r# R" ^/ F$ a1 Y
  132.   }
    ( l; G  }& v; _3 c7 \
  133.   fclose(fp);
    % _( c. }- b# {& T& J9 @  d
  134.   return true;
    / @, @2 b4 c/ c' l
  135. }& @9 @2 Y! ?" ]

  136. ; W9 {9 d8 w% n9 j# U! I; Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    9 v( Y4 J/ g7 a3 _/ X
  138. {
    5 ]' L5 `7 _0 F& W& c7 [0 F
  139.   TCHAR  szFull[MAX_PATH];  f, R5 v( `! z% `4 l
  140.   TCHAR *token,*inter;
    : k3 }0 t1 b8 M" z
  141.   *szPath=0;
    ; ?# E" p6 C/ v' ]+ N& @
  142.   strcpy(szFull,szFullPath);# ^3 h9 }7 R" |' k( d
  143.   token=strtok(szFull,"\\/");
    6 [& H1 S9 I2 I' `3 H
  144.   inter=token;
    " t$ |1 f& X4 ?7 O. {
  145.   while(token=strtok(NULL,"\\/"))* m* I  y% `3 u, I
  146.   {$ v. U( Y: J4 j) A; I7 N/ }; k
  147.     strcat(szPath,inter);
    4 ], `" Y$ t7 Z, Z) E
  148.     strcat(szPath,"\");
    / v4 u* [, J- J% @8 `
  149.     inter=token;& A: ^& P5 E0 g( p' [9 a6 J
  150.   }* V8 B8 K% a+ |" b4 ?3 U/ u1 J
  151.   return strlen(szPath);- h. D7 {* G* u' w! R! T% e
  152. }( O- a2 Z/ u- [
  153. ' v0 s8 m7 B# M" w6 L3 Q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' r' n4 N) q7 v" g2 ~, a6 |
  155. {
    ) S. W0 n. ^+ U) ]  \- k$ }
  156.   DWORD attrib=GetFileAttributes(Target);
    1 ^: |2 h$ E/ C# e3 Z) V7 ?( m$ o
  157.   if(attrib!=-1)
    2 Y: A: ^1 W; u3 D
  158.   {2 ]3 Y4 T. s  l" Z% I/ G
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))9 P/ f/ C6 r2 f2 Y& B, o8 F
  160.     {
    7 G. I$ W; z8 l) F
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);# Q6 ]3 h/ E5 s2 J- s$ l
  162.       SetFileAttributes(Target,attrib);
    $ {: |- n# N5 n2 ~# v+ x' z, A
  163.     }) g+ F, i  H3 w7 p( w
  164.   }8 N" T. V7 U/ w, p- ]
  165.   CopyFile(Source,Target,Erase);
    0 L$ {( ?1 w4 Q3 Z# S6 Z: I/ Y
  166. }3 l* Y5 Q6 g; u: I- O
  167. ) p2 P: U7 L# D! k- D
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    1 }- B3 j0 \6 q# Q" b; f) S# ?) `- m
  169. {4 B: `2 y8 j1 l" V; n: U
  170.      FILE *fp;
    0 L( v5 B! ?8 h) p. T
  171.      char  szBuffer[8192];
    $ }0 _/ N! F' k1 Y& H/ [1 t+ G. Q
  172.   va_list  argptr;
    ) i0 ]: i9 |) u. @$ y  u5 E

  173. - R+ r6 r1 [6 ]& N) C* w. r
  174.         va_start(argptr,message);1 A" y# x7 Q$ b: X
  175.         vsprintf(szBuffer,message,argptr);  t1 x$ P6 Q* S" o
  176.         va_end(argptr);& ]) i. s0 S' x* K& W
  177.   fp=fopen(FileName,"a");; s* Y# F+ c" d, W& }1 N
  178.   if(fp)3 E3 ^& E# @! w( T- P, ?; E
  179.   {& j: q" w5 t7 x* Y/ {4 @/ c2 c
  180.     fprintf(fp,szBuffer);
    8 J: h3 E# ^; I5 K
  181.     fclose(fp);) A  _$ t7 A4 a$ b
  182.           _flushall();! x: I2 ^& c& G+ h, Q/ _
  183.   }
    & j: p7 N) x/ z' G
  184. }
    & Q' W1 S' ^  |* S; ~( a

  185. ! ]& H, x" ^2 j9 P
  186. BOOL CRevAppApp::Fclearf(char *FileName)+ b5 G$ z1 a! |" V- ]! x6 {% ^
  187. {
    1 H2 k  `+ j' @/ Z* d
  188.      FILE *fp;# t" L, p0 ?" U! v3 Y
  189.     DWORD  attrib;
    8 B) v$ p2 l2 c2 b; `- ]
  190.   attrib=GetFileAttributes(FileName);/ B# R% g- k0 ^  p
  191.   if(attrib!=-1)
    - P& x/ i4 s2 w
  192.   {
    " S+ v- @: `, R" a* f+ W" _
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    " f2 c3 h# S7 s& ^8 s
  194.     if(!SetFileAttributes(FileName,attrib))& ^) Z* a- S) d/ p6 m) m2 k- y
  195.     {
    / Z8 n% C! ^$ ?* C. O& z: F
  196.       return FALSE;% v* \; `1 Y4 X8 b: D( c% b
  197.     }
    $ \% A. I$ M. ^/ h) c" a. |
  198.   }# }: j6 ~$ O, G/ ^% J
  199.   fp=fopen(FileName,"wb");
    $ v- J1 `4 y- Z. ^' f
  200.   if(fp): O0 J0 i: e2 k  L! g
  201.   {7 ?- `: X  H! N' N' N& \! i
  202.     fclose(fp);4 U  I. B3 v8 q; Y# o
  203.   }
    , g" T. {' Y+ l' q1 A
  204.   return TRUE;( R7 \3 M- v% X/ `" t# C+ }& |! B
  205. }. k) x) {* i& g3 R' _

  206. / {$ u$ f2 c: t2 {. P7 y
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    4 d( {. q: E* C- m" C9 _
  208. {9 k! Y+ t& v0 h$ G+ j! J/ s
  209.   char filename[MAX_PATH];
    , N5 S* e" i+ K
  210.   LPUPDATEFILE file,olds;! x- Q7 I) ^" b5 P
  211.   std::map<int,CString>::iterator i;
    1 N  p) Q, P* T  ~8 H
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 ^2 v& H6 c6 f$ r! a; J+ k$ B
  213.   std::list<CString>::iterator l;8 q9 k: ]" B  H' x) `

  214.   a8 [! x0 C! W5 F
  215.   if(bFirstUpdate)
    # h, ]3 V6 M$ f  k
  216.   {
    & e9 V* B3 A$ F' V
  217.     dwCurrFile=0;* F9 i( s* Q" q1 ]) F% D9 k
  218.     bFirstUpdate=FALSE;! I4 Q: s; c8 Y9 @- l$ d) ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 b3 f3 N+ Z' r) P1 t* }& G
  220.     {
    1 [' k# i, y) H- t! b+ J# G
  221.       dwTotalFiles=UpdateLocal.size();
    $ [3 P5 n9 x! N' L. D
  222.       dwDownLoaded=0;
    ( ], |7 c! W: P7 h. x" M0 z; I8 l
  223.       bSilentStep=FALSE;
    / ?+ f7 ^% ^) m/ Z$ o9 a5 A4 C9 [
  224.       bCompressed=TRUE;9 a0 t* r+ u! E' o
  225.       strExtLocal.Empty();
    $ t; `# q5 D& T/ R4 Z
  226.       strFullName=(*i).second;+ h9 y. A7 X' @3 g" b& }  }
  227.       dwProgramState=AP_CONNECT;
    5 G9 A2 s6 E" A) c, h8 v+ p3 w  J
  228.       return TRUE;
    ; J' p9 ?+ M( g. b
  229.     }4 ]5 |0 U' R! f- N  B9 R
  230.   }
    : ~6 ~' p8 q3 d% }4 L; J, B: ?2 X
  231.   else if(bRestartUpdater==FALSE)
    . ?0 B$ [" z: x* {
  232.   {  E( O# k& ]5 M( o/ c2 R
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    & b/ Q  h. {& m" e. x1 {0 F
  234.     {
    4 |+ Y1 B. K9 R5 |
  235.       file=(*p).second;
    # f3 j% a" S& o
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ) R  y; d/ g. H5 U, q7 |' x. O
  237.       {
    9 L" b+ i0 ~4 K+ S+ V% y& }
  238.         olds=(*p).second;
    + \2 S- G' a* e5 y" l' F8 N* O
  239.         olds->vers=file->vers;
    6 x' w" ?; q9 n( }$ b. P" k
  240.       }
    ( p/ P) i! J7 g) B1 P
  241.       else' f8 Z! N+ c. S2 c# T
  242.       {; r- G' \, a9 |5 `: V  w
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % i; |2 D! N6 }3 s
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    , ^) V% v, ]( p) ]5 Y2 I
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    - M8 k/ Q& N8 X
  246.       }2 _7 v4 m! c/ O1 x, e: z7 q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");% _3 C( O+ \! b1 n! j" Y/ `
  248.       sprintf(filename,"(%s)",file->file);' y, U% p9 r% p7 E- p; f( ?( x
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# X  ?8 j8 c6 h! p" f
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    - p5 K+ c% K' l% Z; {0 W9 {3 ^
  251.     }
    - M/ `: a* u4 ?) ?6 H& p
  252.     dwCurrFile++;
    $ R7 A* @: V5 N8 m8 y) \; t5 ?
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 ^6 @/ ~1 T" z2 X& v
  254.     {
    ) H, ?  A% f: t# k! w; a3 j. ]
  255.       bSilentStep=FALSE;
    9 C+ h/ q; t, B
  256.       bCompressed=TRUE;
    : f/ s8 z% j& E3 S6 x* l- e- ^1 {# j
  257.       strExtLocal.Empty();
    2 M" K9 b: X; u0 N5 d
  258.       strFullName=(*i).second;
      `0 \- a2 ~' ]
  259.       dwProgramState=AP_CONNECT;
    ! L! x' P+ J9 x
  260.       return TRUE;
    ( S. T: y  N7 S$ v) g
  261.     }* p% \& F( ~. i: l' s& H
  262.     if(!bRestartUpdater)
      P. j4 _2 }4 p5 {: ^) @; [3 C5 ^
  263.     {
    2 F! r9 u/ `! L0 A7 c
  264.       int iCurrSize,iFileSize;) u% l# L9 y# z
  265.       iCurrSize=0;$ P& k0 a" x' o5 K* R( v2 ]
  266.       iFileSize=UpdateList2.size();5 |0 S5 D9 A! ^* e
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    - e. s. }9 Q& N" {
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");. A& C- T( I; u
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    $ ~2 T; S' y$ N" h, W
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : @2 o' M0 A& w9 C
  271.       Fclearf(".\\update.dat");
    " t+ C; P7 K+ t2 A3 W
  272.       Fprintf(".\\update.dat","Bloodyf\n");/ b% ]: F% l5 x9 y) i' J) r% _  l
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)* g. k% J% ^2 ~" F4 d
  274.       {( F/ o& l2 f4 ?3 _
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())! w; b* L; l* N6 Y5 L
  276.         {
    1 q& D$ U; a3 f3 O1 r6 O
  277.           file=(*p).second;
    $ G- P3 L! Q( G
  278.           sprintf(filename,"(%s)",file->file);( Y* ^9 T& @" [1 l
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " w. a, d" B, E2 R0 c
  280.           iCurrSize++;3 ^; A3 ^$ o% R3 _& o
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));1 t1 C7 Z( Q, t/ q. h
  282.         }
    $ j$ y: k( h1 Q% @& O; c8 D  F
  283.       }
    ' C* y4 t% n. s& l- Y$ P
  284.       unlink(".\\update.txt");4 [( R) @# I# _5 \& p$ b
  285.       unlink(".\\update.tmp");
    ; i) D) i+ }7 X1 _
  286.       Fclearf(".\\checkversion.dat");
    ' q4 P  ?: y. c! e* F# ~
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);; j% l3 E% w, q' R7 u6 f
  288.       if(UpdateLocal.size())
    + m, t" e; f4 \& }$ n  [/ Q7 m8 y
  289.       {1 ?* u/ J1 A: f7 n6 g$ b7 b8 Z
  290.         UpdateLocal.clear();
    ! l+ L0 D4 M' S$ E1 [/ p
  291.       }
    ' `: H* _* J; u
  292.       if(UpdateFile3.size())
    " R+ L% f2 X, |# R
  293.       {3 S2 ~1 x0 V. D9 j4 w: H  Z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 r; Q  v' f# [' @, y
  295.         {
    + K1 F3 m# o3 c& [$ q
  296.           file=(*p).second;5 C$ I+ ]( \; Q2 ~; [3 ?
  297.           free(file);0 v& b( @! r# @: V) v
  298.         }
    % ?, B9 \, e% v" v# \
  299.         UpdateFile3.clear();. K$ S+ N0 C3 Z/ w4 b8 K3 }
  300.         UpdateList3.clear();
    / w+ ?+ u5 S) s0 e! j- T
  301.       }
    5 r& J# M0 G" n) I
  302.       if(UpdateFile2.size())" |5 [5 l, t5 F/ `4 Y% U; {
  303.       {8 o* J2 k5 q' t
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 K8 Q0 m, K+ q
  305.         {
    2 f! ?/ P- T- [8 [
  306.           file=(*p).second;9 @2 U" D; j3 ^+ e- _( f8 N
  307.           free(file);" f" ?3 A3 c4 g. R) s! c% h+ g' _
  308.         }, A6 c# _6 P" V
  309.         UpdateFile2.clear();
    % }6 C+ n' o% T
  310.         UpdateList2.clear();
    : N6 {5 l9 o, j
  311.       }
    8 R7 k( o3 [; V6 [# ~7 n# B  B
  312.       if(UpdateFile1.size()): g2 k& o* X! x) i% g! e4 r
  313.       {
    - i9 o- w1 J# y$ N. x- e
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( D% U  m; }9 z" W$ T2 ~; x( v: y
  315.         {
    / _- B( M6 R- F2 t. x7 t5 m9 P
  316.           file=(*p).second;4 u8 \* _1 d* A3 J% w
  317.           free(file);
    ( a. y* ]$ V; t4 K/ B
  318.         }% x) ^9 I. e$ w( f; ^0 K
  319.         UpdateFile1.clear();2 N# v1 ~: t  T0 K: G
  320.         UpdateList1.clear();% l, Y3 {: P) w6 H8 f- g$ u
  321.       }) r/ A) m- K8 t3 g! E5 a
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % q; f+ H! S3 M; x! Y! E( b- c
  323.     }* A7 G4 Z# i/ g9 r  ]# {# \
  324.   }% `/ Y3 t7 d9 M$ i" Z; k) M- l
  325.   return FALSE;
    ) a$ z* O: Y6 n
  326. }
    , ~4 n: P, V# n5 T- _& W
  327. % R" h# N" `4 K9 K" R2 d- B4 Y
  328. void CRevAppApp::ClearAll(void)
    3 t2 e5 V% D0 R( g: ~/ x1 W
  329. {: N4 A* ]3 ^5 E/ O0 e/ l
  330.   LPUPDATEFILE file;, K5 v! V& L0 z, M5 V' E* X
  331.   std::map<CString,LPUPDATEFILE>::iterator p;; g, J8 d2 c% J+ P: P+ X3 n

  332. 7 \7 H& F2 y: T! X8 g( Y: q
  333.   if(UpdateLocal.size())
    * f, O1 J1 i3 D7 w+ z7 `# S
  334.   {
    ; O" z3 N; `! E- T
  335.     UpdateLocal.clear();
    2 v0 c1 j$ ^, ~2 N
  336.   }
    " ]2 N% d) R# b& |$ j3 `
  337.   if(UpdateFile3.size())
    % z0 w6 a( f3 B) N, y
  338.   {8 Y. E' X% _6 f( |
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    : J! m; s& B. w& N1 V' L
  340.     {- v$ Z& |$ g; P& R
  341.       file=(*p).second;
    ; b' i1 D* @& h4 D, V
  342.       free(file);" `' m* ]5 B+ {1 c& P# J
  343.     }: H. |$ y2 Z$ m6 ?0 u
  344.     UpdateFile3.clear();
    ; Q- i) N0 U: x9 V5 ?5 O8 @4 g; [
  345.     UpdateList3.clear();$ n" ]6 |0 @8 i2 \  ]
  346.   }9 Q+ B  t) j9 W7 a) b& n/ i5 `# n
  347.   if(UpdateFile2.size())1 R3 }3 U: f) b: v8 m! ^5 |
  348.   {
    6 x8 i0 n" u& G+ d4 Y* I4 q+ B/ t
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). a. n+ o* i' T) z
  350.     {4 g; H1 X' U# Y( u
  351.       file=(*p).second;( j  h0 y8 s' U% Z0 Q3 j2 w' N
  352.       free(file);
    % [2 N0 w. T& h3 T
  353.     }
    ! S1 ^! h$ s! G: g6 ^* ]
  354.     UpdateFile2.clear();8 w% @/ x( _/ N2 q& h  j! x
  355.     UpdateList2.clear();* w) Y! s' j6 W# R$ K5 A, z& c' `
  356.   }: q/ E, B. o5 r
  357.   if(UpdateFile1.size())7 i+ K% v1 M. X6 e7 `3 J
  358.   {
    3 {4 N2 P- q7 }
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 P, R. b: x+ _9 N' L" v/ d. G
  360.     {% ~# J9 p! m) J4 H, J
  361.       file=(*p).second;1 I; @9 O! P/ e6 w
  362.       free(file);
    / A3 o- ?( \- J) `1 d+ I/ B( V
  363.     }/ B  w4 b" `' i8 O! \4 f, y! J, n
  364.     UpdateFile1.clear();. Q/ s' m% U5 l' N, ]: l
  365.     UpdateList1.clear();
      d, ?( ~: t. x/ s' w
  366.   }" H- [& n  i" j+ D7 H+ p2 j
  367. }  ; k, Q" n( P& O0 N2 E* @! @' {
  368.   ; H; {0 B! ?( Q- r4 ?  n5 @4 C+ |9 E: F, M
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    . M# a8 d; M( Y- F9 z
  370. {
    5 i& J* o0 @/ o) i6 {$ ?
  371.   int c;
    3 x4 x6 E3 j  z$ q. R/ [/ q
  372.   LPUPDATEFILE file1,file2;
    / w- M& i# h& j! V3 ~
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;1 e8 `( u7 m3 R8 e* I( I5 \
  374.   std::list<CString>::iterator l;
    & a. ^: h: V3 r* q1 Z  Z

  375. 5 y# ^2 J# Y, c  i
  376.   UpdateLocal.clear();
    7 a; D- \: g4 z& ^  X
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    + e4 ?; }* g7 J, Y+ P
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    8 w, H1 g8 z2 [& F% C4 l+ b" h) n
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    - L5 A# Q$ E* ^! h$ ]: x! [2 m
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    4 X- k% e% t4 F  |4 z
  381.   if(UpdateFile3.size())5 v0 E9 d! z& C- Q
  382.   {
      S) W2 h4 E4 g
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)2 [6 E3 f' |' J' A6 v* v: c# A
  384.     {: H* \9 ]) |; Q2 x
  385.       file2=(LPUPDATEFILE)(*i).second;, r) E1 a7 `7 X+ d9 M4 E
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); C1 W; A. r+ U2 |5 h5 p
  387.       {
    / \( z5 Z" h% x! }0 F2 g
  388.         file1=(LPUPDATEFILE)(*p).second;: t8 ]' ]8 R6 |& j
  389.         file1->vers=file2->vers;
    1 x# W1 F! Z+ W1 q
  390.       }
    8 K; z- e2 n7 R3 l! _
  391.       else1 r4 e" }9 c+ u8 P6 s
  392.       {" N+ L' ?6 z( x" t
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 `; i9 H/ [' s; T0 q1 S% y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    $ b7 V$ ?* h0 f8 x
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    6 V: e* m$ H) Y5 n8 D
  396.       }
    7 ]7 j8 {; Y4 y/ ?; z! V2 V  b
  397.     }
    ( I" k4 S# h# d0 l  i
  398.   }
    & H6 I( U! D" b/ _7 p
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)2 ^! @. P8 C: |+ a; S
  400.   {
    3 K, d" \% O- v. s3 R6 p
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())+ b4 {' q  A! |
  402.     {9 f- f) p# j! K7 \  R
  403.       file2=(LPUPDATEFILE)(*i).second;. E, Y( R5 V* I3 b% S8 M2 d
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) J3 X; x# _3 p! \
  405.       {
    % Q+ _2 }% K' U
  406.         file1=(LPUPDATEFILE)(*p).second;* O6 f5 M4 L! u8 }% I
  407.         if(file1->vers!=file2->vers)# b. L2 ~) h& B0 l: u, X1 l
  408.         {; l3 b5 |! d# V' A+ N0 m
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 q4 k( v% F  h( s' R& P0 T
  410.           c++;
    - m8 d1 L% o+ a" i# L! |! z
  411.         }
    3 U$ Z) `$ c2 ?4 `6 ]0 x/ ~- P
  412.       }4 w1 L: M/ r0 p( _. m) W0 K7 _
  413.       else
    ) v; `$ U( u" y2 ?/ b
  414.       {
    ! w  e# i# a) O$ s. C# ~7 G
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 W0 P( W4 T& |4 u9 x% V% |1 S5 a
  416.         c++;
    " Q5 ]. B0 G" Z# |
  417.       }# n. `1 S3 c! I5 T( \" ]5 ~
  418.     }
    . z7 B* u" M7 w6 i1 s
  419.   }6 s" k# I3 e' P/ }# |( @& h
  420.   unlink(".\\DownLoad\\update.txt");
    3 a# V+ P, a( t8 n. j
  421.   if(UpdateLocal.size()) return TRUE;& U0 V' C' J8 |' T
  422.   else                   return FALSE;
    3 g; o' J% p+ b( R# u
  423. }
    7 f9 c2 D4 y; H6 [" Q9 p3 c
  424. 6 }) x/ c3 }( m3 v1 x0 `8 e: v
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    " g3 J* _2 v+ f6 P& x) W) D
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"3 E% x0 G* @9 ~$ h2 ?6 u

  427. 3 C3 g2 {* P$ z, O

  428. : z* P# ~+ }8 Y! n0 ~/ {+ n

  429. 2 H3 a* m. p) V7 [- k7 P: o
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    - I8 p0 {7 T* a& K; ]$ A" P; R% z! X
  431. {$ u# d0 Z3 X2 d
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;- K1 t: @: [" ]
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 m  @  ]( R( n, u9 d% g
  434.   {
    9 G5 Z- y2 F$ ^$ e
  435.     char szLanguage[50];
    9 ]3 D5 r* \+ g9 }, h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& G, M; [) c; k  f) r9 M
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 T2 y0 h, D3 E5 Q$ Z: A3 d6 H
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 [$ r- U: Y1 f7 _
  439.     else                                   m_iLanguage=ENGLISH;) z' O/ j. a* \8 E1 U
  440.     char szRegister[100];
    ; T: R( l. y: ]: `9 _
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- H2 Y% k/ _# S
  442.     strRegsName=szRegister;5 i, {$ Y* E7 O5 L) V
  443.     char szPatchURL[100];
    3 h) j  W- p8 `( e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. P8 H. U, f  V) J5 o
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ a" J: ?/ z+ a) j3 x
  446.   }# x* {6 W2 q$ M! Q6 W
  447.   else
    1 o; [: ?- f. C& [( N, q" G0 H
  448.   {
    3 l' }5 P4 e6 w
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 ^' n6 t- T. O3 u  C8 P
  450.     strRegsName=DEFAULT_REG_URL;
    6 I- g' o/ M* @: T+ T4 s4 q
  451.   }# E& n- l+ J- M& q8 V5 n( W
  452.   if(GetFileAttributes("hosts.ini")!=-1)4 Q/ _% e! W; {% z9 \7 {
  453.   {( V) Y+ X4 ~/ R7 v  Y' L
  454.     char szIP[50];
    " R7 E: W& {$ i0 _7 q: t
  455.     char szDIR[300];
    + H' v7 X5 Y! F, ?" n4 I& F4 S
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% {2 U1 M6 {6 p- O1 k, g
  457.     {
    ! |4 z& o. ?& P6 u
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");6 A' h+ a6 P! ^0 q. N
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");9 n6 y5 J; J: N& E4 F3 I, h3 |
  460.       strHostName=szIP;
    & i7 w; z( R# s( E* q/ z3 R
  461.       strHostPath.Format("/%s",szDIR);
    6 u" N. `2 S- Q" S, x
  462.     }/ Y" `, L: i1 R" w
  463.     else4 W: w& k9 Q% l7 f( ^
  464.     {
    0 l0 z8 V2 O7 n, }# Y6 `
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 c0 v  j" N- }% `
  466.       {" h: @) w% z) P0 E! S! ?$ a/ y1 A
  467.         char szLanguage[50];1 I9 y+ G- c0 [
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");7 y! Y5 X& V+ }+ [0 C* Z! E5 |6 y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; U8 j# W" f: p/ \) l
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 N6 S6 k! Q! E0 d% h
  471.         else                                   m_iLanguage=ENGLISH;) B$ g# i$ G' ~+ R  F: ^/ B
  472.         char szRegister[100];7 c! d6 l) P! y. ^8 ^1 m' g
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 [7 l8 n5 J. J# a- z
  474.         strRegsName=szRegister;
    2 K( \/ U4 N& W" G8 L. G
  475.         char szPatchURL[100];. y$ i& ^" I* p0 ^) |/ u
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 V. b! s" o! V7 r
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ c' l' m7 x4 H8 h
  478.       }* s* \0 ?& h/ V7 H
  479.       else
    ( D+ j' l( j; e2 v
  480.       {0 E) p4 Z2 {$ H2 j0 }. g+ K
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 v) Q0 c& j' O- W0 `( }
  482.         strRegsName=DEFAULT_REG_URL;+ \/ _  h  E& v1 E
  483.       }' d) i- S  b9 q  u$ @8 y
  484.     }6 L2 c& h, |" K: G1 d
  485.   }
    9 I; O6 }' k: a1 f5 P' u& Z9 J
  486.   return true;
    , I: N' E. N2 e9 E* A8 R
  487. }* ~& D. |9 `$ o7 u9 o9 a1 }3 X

  488. % d8 U7 C- t9 @& X
  489. #include ".\ZLib\unzip.h"* n& P" T' M  C$ q
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    # |0 Z0 R' E3 r; ~3 V
  491. /////////////////////////////////////////////////////////////////////////////3 G6 j4 P8 S2 C& [: M
  492. // CRevAppApp initialization
    3 C' t2 }" d; F! b' [6 M* E" Z
  493. ! e9 A! G4 Q- k7 a
  494. BOOL CRevAppApp::InitInstance()( S3 e) P  Z# D/ j' n3 C
  495. {& c0 H' P2 @- P
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];2 t- x3 L) t. _
  497. ' {' }& E6 H) d% T+ ^  ~- Q
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);* @; N# s& }. L3 D5 [! G2 @
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))0 S  [  ?1 |" c
  500.   {
    3 ~& U0 o2 _- {
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    7 p. e9 u5 C* N6 D0 ]) B$ B4 ]
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 c: N9 m$ H! a& P2 C6 P
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))' @% N1 w" k! O% q% n& m
  504.     {
    7 A# |2 L; r* H- _
  505.       strcpy(szPath,szPathTarget);
    + @1 \& k- C* P. h) D
  506.       SetCurrentDirectory(szPath);
    4 _: Z  m9 p& X
  507.     }1 w' V. e1 H8 H: M+ H! k/ B
  508.   }
    . s0 `! d; V* m. j7 z3 b  t
  509. #ifdef _DEBUG6 b$ c5 N3 f& N) ?0 X+ E
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 W& \" V! `6 Y" N8 X* G, ?/ b
  511. #else$ t2 L& I( x# i
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 ?% _+ z1 r  f+ O; w$ R* ~
  513. #endif  _7 U" _- W8 s* ?5 p' D* F& n
  514.   {. K2 I5 @1 [( A- T" k
  515.     char tempFileName[MAX_PATH];( P. y$ H5 n7 r
  516.     strcpy(tempFileName,szPathSource);
    ( w3 ?% L# y: b/ E4 J
  517.     tempFileName[strlen(szPathSource)-12]=0;
    7 K9 F9 b) W3 N1 a, g
  518.     strcat(tempFileName,"\\$CSUpdate.exe");. k# k- w. E0 U" {- Z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);% U# j% y+ w& d' ?  r
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);3 }" }* P6 n- z$ c
  521.     return TRUE;
    7 o5 r3 g9 B% P7 W- n$ R4 d
  522.   }/ o: l1 t( [0 z1 N
  523.   // Nuke 0118: Delete run.exe2 ^. r- n! L. w! h# q  r0 x
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );/ `4 ~( ^: D. N6 Y, \, I
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");, F$ j' H& l5 p7 e: B; f, d! U
  526.   if(!ReadCfgFile("Config.ini"))
    " n+ d5 u$ x4 {; ]1 m. y
  527.   {. u% [0 e! Z# p9 {  e) b( c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    , p) S5 S/ q2 V: b
  529.     return TRUE;' p  [5 K% k8 w0 [, N. A" a
  530.   }' O! p& p+ L5 L* [$ l  s" }
  531.   HANDLE mutex;
    : z" H- z% ^* N
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))+ F8 H0 L9 i3 `, K" y* _; X
  533.   {+ e! ~8 E. K+ N1 E, m$ }
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    2 r/ W8 ^! D# N. ]8 H) [# a
  535.     {
    5 _) K9 K  e+ z: M4 v# Y% m
  536.       CloseHandle(mutex);5 h5 J1 |( `! }
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);+ o5 l2 A* t1 `9 P; F
  538.       return TRUE;
    5 K. q" C) q( F1 x2 I
  539.     }; C# w: C! ^7 a; s, a& i
  540.   }  3 ~$ y( W# m3 u7 O6 Z, `- E4 e, W
  541.   CloseHandle(mutex);2 r7 |; ?% s: d  L

  542. ; `& n; R1 \2 M, S: t7 K, W9 `& c4 b* P
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);. m4 I; H% X! Y8 Q3 t

  544. 6 J% C+ z% S; U: r1 Q; p
  545.         AfxEnableControlContainer();
    0 N! R3 k  U, B) l3 ~8 O
  546. - H8 @! i1 V" S/ e, I
  547.   bCanUpdate=FALSE;$ [2 ]6 K3 b1 _
  548.   dwStartUpSteps=1;2 A7 o( j. F: N# K1 [2 Y
  549.   dwProgramState=AP_NOTHING;
    % s& \+ t+ H( |) w# I" z5 I

  550. . w& K# A4 N( v8 G6 n$ G' T  O9 Z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    : Q  s* {( Z- R6 D: H5 T
  552. ' L! z6 p" T! W8 v
  553.         // Standard initialization
    $ E3 u3 ]% @: Z
  554.         // If you are not using these features and wish to reduce the size1 y0 A3 \( ~- \3 |
  555.         //  of your final executable, you should remove from the following5 P! c' S, P! S6 B/ s$ Q; w1 G6 {
  556.         //  the specific initialization routines you do not need.; n2 K, p( c& \5 h! \$ @9 l
  557. " d" a1 [, V9 i5 ~1 w! V5 r) A
  558. #ifdef _AFXDLL- t- u  j. F9 O" ~
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL: @1 j2 J* C  ~. D2 V6 |
  560. #else
      J  o5 d( ]! |3 f( Z+ R) N. B
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically2 @( c3 M1 {! G
  562. #endif
    + h. A0 z; `& [
  563. , A  V+ P  x; |7 `/ O/ U
  564.   dlg=new CRevAppDlg;
    # f9 k; o1 U6 k1 C
  565.   dlg->Create(IDD_REVAPP_DIALOG);* B5 m# E, g! f
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    5 X& t& R' y3 [* x
  567.   m_pMainWnd=dlg;
    ( T1 H& b) {9 ]# t

  568. - w1 ~% x% o$ j: }; [- Y1 t. ?3 a
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ! ^6 p5 I' o& c# @
  570. # y) T1 l; D- i' B
  571. //  GdiplusStartupInput gdiplusStartupInput;
    " o% ?: H: j) R6 l; j* S2 @
  572. //  ULONG_PTR gdiplusToken;6 e6 o6 k% \: U; d; r+ b  E7 H3 [
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    2 E0 r# X% d% [+ h2 K

  574. 3 I& g# X: m+ z3 J. W: s( _
  575. //        CRevAppDlg dlg;: f! k; g  I! v
  576. //        int nResponse = dlg.DoModal();
    & l3 d* n3 k. M3 ]+ E1 D# @
  577. //        if (nResponse == IDOK)
    3 g$ m# Q5 n8 W6 C1 _; K/ @
  578. //        {9 U8 \& o( R$ V9 {( w
  579. //                // TODO: Place code here to handle when the dialog is( ?5 O' \8 V: ^6 y1 U: y; |
  580. //                //  dismissed with OK2 a7 k  @" o! s2 {
  581. //        }6 c( M; s# P$ n' a
  582. //        else if (nResponse == IDCANCEL)
    4 b& ^. \# @5 [
  583. //        {
    ! ^9 C4 e  O/ R- Q
  584. //                // TODO: Place code here to handle when the dialog is
    ! }! ?! S" p- k
  585. //                //  dismissed with Cancel
    0 S0 C1 w+ u4 [/ A0 W" n4 M
  586. //        }1 U. p& k+ c- m, N3 O* S

  587. 9 Z$ d, ]4 u: ~- `$ m
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    , T$ v5 l$ d1 L- ?
  589.         //  application, rather than start the application's message pump.
    1 C+ v8 j/ W# ]: p5 b5 {
  590.         return TRUE;
    3 |) s" L  t# O6 {
  591. }
    . p/ L7 v& ~! H8 @9 l$ e: W, }

  592. 6 x5 c% i- `+ J
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    / ~! k" e4 }$ y
  594. {
    - m6 q# T) Q9 k0 D+ t4 r7 n
  595.   int i;
    2 o# b5 i$ n/ e
  596.   char *szRet;
    " T) j# E3 e2 |1 M/ _

  597. / v0 K  |, H) H
  598.   if(pSource) { itoken=0; sztoken=pSource; }1 M* Z1 H& B' F0 ~9 f% i
  599.   if(sztoken)
    4 T" d, \, E/ ]% K3 s0 C4 R
  600.   {
    4 x8 V$ p% \- g& U- z
  601.     szRet=&sztoken[itoken];
    # P, h# O( I( N8 w2 k% R  l- T
  602.     while(sztoken[itoken])
      v6 _& A) o- Q" M
  603.     {- |) Y9 y9 a, x* t- Z' w- e7 }
  604.       for(i=0;i<(int)strlen(token);i++)6 @0 U; z9 G! q+ ]
  605.       {+ K% x9 f# v0 Y* m+ b
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ; S  [+ o- a1 w& W- o
  607.         {
    0 _8 m1 G5 U8 V
  608.           sztoken[itoken++]=0;( y1 ]1 `& o' I% D
  609.           sztoken[itoken++]=0;
    # C$ R# x4 Z' }8 N) O" j
  610.           return szRet;
    ) F. }+ I1 C; h: C( a0 q3 n
  611.         }
    % k/ A$ G. V; |. t
  612.       }; I4 c3 J5 ?1 H% D0 U" J
  613.       itoken++;0 I* `9 J% z3 Q4 ~1 t- O: Z9 h
  614.     }
    4 c% n" _$ v; Z) E8 I
  615.   }
    0 A2 E; T" N% }' @; ]2 h1 s- i
  616.   return NULL;
    ( }4 ~* B, _) R" d* s% G
  617. }4 r) T4 q7 [5 B: q( B% T3 N

  618. . F* J$ q% J! ]
  619. void ProcessProc(long Total,long Current)4 X9 P( n4 `5 Q
  620. {
    1 B& L6 g" |$ m
  621.         MSG msg;! t3 D7 L3 B( j% C) b5 v
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);* `# [" |) B; m. A
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ' i/ |6 D6 R; k, y. x7 s
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    4 P) |8 C9 {' f- p! Q
  625.         {* r0 E' M" G* {2 |* e) w
  626.                 if(!GetMessage(&msg,NULL,0,0)). S# `/ P; }0 A9 I" [- u
  627.                 {  B9 [0 L' x3 e' r0 M1 g# I5 T
  628.                         return;& x4 G+ ?. }% d/ }4 c+ X1 }1 Q' U; Z
  629.                 }
    1 _" c* H+ Z) n& Y% Z  J" S) [3 T# }5 n
  630.                 TranslateMessage(&msg);) q! ]& m1 v& ^' w) Y
  631.                 DispatchMessage(&msg);! j% A/ a+ s) {% _. o
  632.         }        , G4 e% Q, x4 l- {( k- `, C
  633. }1 j; s6 Y& o, M4 |# D% U# r+ r
  634. ! i9 h& O3 ^( D
  635. BOOL bFirstChar=TRUE;9 y, n$ u4 y: H6 c# C* E
  636. ; _$ ~- b/ J0 u
  637. BOOL CRevAppApp::OnIdle(LONG lCount)! O5 D; R5 _$ v
  638. {3 S) p! x0 \' a$ O& ]4 A
  639.         // TODO: Add your specialized code here and/or call the base class
    2 s  q5 @9 e' h
  640.   switch(dwProgramState)% w! m/ v" S7 D, |& i1 D0 @
  641.   {- H6 ]' Y' ?3 D5 @1 Q5 ?: l2 {2 o% `
  642.   case AP_NOTHING:
    7 B! c9 M3 h- ~6 Y# k# k/ S/ G* ^7 k# I0 V
  643.     switch(dwStartUpSteps)
    3 o6 b9 r  [) @
  644.     {
    8 h3 y, Z9 w: Q& k0 g* G
  645.     case 1:, ~, z% i7 m  t9 x. b" ~) P6 N' I& S
  646.       {
    ( ~6 X4 `2 s, ?. q7 B
  647.         int i;
      u; [3 A2 n9 N# D9 e. c3 A
  648.         CDC *pCDC=dlg->GetDC();/ J' i! d" d  E' H. ?5 M- p
  649.         HDC hdcwnd=pCDC->m_hDC;- Y6 w% D: x0 c( k
  650. //        Graphics graphics(hdcwnd);
      |9 K3 L! R6 Q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");( P4 P9 A0 C7 i2 A; ~
  652. //        INT iWidth=bitmap.GetWidth();
    $ g. y2 P* W! P! ]% D  w
  653. //        INT iHeight=bitmap.GetHeight();
    2 C7 ]; A& P; i6 ?) M9 D
  654. //        Color color,colorTemp;
    1 V4 T# j+ g4 i) [* N, F" |2 M
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)8 k$ c$ n% ^; L: u" A/ U: N0 Y( @- }
  656. //        {
    0 _2 t( O) G( I
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)1 }9 m* T, {" L; z0 t: M$ U
  658. //          {2 k) d* z! }% a& d$ f2 ?! A
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    " I& }/ y6 X" |+ K4 ?2 O
  660. //            colorTemp.SetValue(color.MakeARGB(
    + N2 ~$ j1 Z& N& j/ H
  661. //              (BYTE)(255*iColumn/iWidth),
    ; {4 y5 E% i- M5 x1 R
  662. //              color.GetRed(),
    , d0 U4 Q1 B; U( F9 ]
  663. //              color.GetGreen(),
    / _! O2 P0 B# Y4 Z( q5 J4 ]
  664. //              color.GetBlue()));' H5 d2 N+ l1 |5 f! m
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);4 ^+ T1 r2 @5 ?/ x1 ~6 e$ `5 [
  666. //          }0 v. f# H+ @8 ]0 c
  667. //        }
    % L8 _* b6 R& U2 M( S9 K
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);  F3 k! F8 ]' _1 P  K1 D# d3 X2 s9 {
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; x6 U1 V; {* U& a. f( H" J0 b% X* h
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    7 C8 _  Y6 F6 [: q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + ?6 D# K1 C7 L+ f
  672.         for(i=0;i<240;i+=8)4 i/ ]4 s; c7 h0 N  J# P1 f
  673.         {( x6 H" `& {$ G2 _' e
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);* r! m" f8 o8 G1 B/ O) ?
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : z( n& k8 D8 S7 ]1 O- Z( n
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% \" E/ ?5 ?- C3 `/ I, Y
  677.           Sleep(33);+ A# _  G% z) S0 T" H4 B
  678.         }# H" K+ ^) G5 e* c' X! A+ z
  679.         Sleep(1000);
    4 j) f# K' ^8 y9 {3 Q  I
  680.         for(i=240;i>0;i-=8)7 r0 G* q4 `$ M0 J& u. K
  681.         {. B' ]" b( D- l
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 Z8 m  ?% D4 C+ L7 V
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " v* b) w1 H* T% K  _- N9 e" ~+ G
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 E% m( u/ C: p  ^# _
  685.           Sleep(33);" Y2 l( K" C, g6 z- V( A) g
  686.         }: |; J$ ?$ E9 `
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);) M. v& i- Q, l/ d4 w0 V
  688.         dlg->ReleaseDC(pCDC);
    % ?2 r' q' k! v: c6 Y4 ], T
  689.         DeleteDC(hdctar);
    0 ~+ l. Y8 }( _5 r
  690.         DeleteDC(hdcsrc);; F  i# l3 r% g
  691.         DeleteDC(hdcorg);5 ~' f1 ^4 ?6 G0 o) o2 O- r
  692.       }
    & Z' V. h' f2 s0 e4 q4 t6 k/ f/ x, q
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    # q3 S( x6 D8 Q( ~. L3 a% P! h& `
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");6 T# D: ^% U: H; ^" _
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    , }$ h; a" u4 k! z2 q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");5 N0 I/ n7 o8 Z- V
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 |6 d: D1 `6 Y, q, B6 g& \; y
  698.       if(!Dn.Connected())1 w5 J1 d1 u  D4 Q. }
  699.       {0 E# x: j, C4 }/ K1 Q
  700.         dwTotalFiles=1;$ A5 i3 ~1 t1 M$ E1 n' A; S
  701.         dwDownLoaded=0;7 }5 U# m# M) H$ E% Q& S4 ~
  702.         bSilentStep=TRUE;2 @! K/ \. j6 Y4 c
  703.         bCompressed=FALSE;
    " @9 v9 Y3 l8 c0 t
  704.         strExtLocal.Empty();8 E4 |( _: f9 |8 |
  705.         strFullName="readme.txt";
    / D# v; |3 T$ d
  706.         dwProgramState=AP_CONNECT;  ]% e) p; V' r$ O
  707.       }( Y3 O7 h" n. H, h6 K
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();, c  q  h2 ]* N" D
  709.       dwStartUpSteps=2;
    , T8 D" f* s* G& R" J
  710.       break;4 u- {; H: j; o% m
  711.     case 2:
    $ Y$ o, B6 }1 t7 N6 N" {" w# T
  712.       {
    5 A! S; H% E8 V$ V" u
  713.         int iEOF;
    / n; l0 Z& \' Q$ V7 @" d- M* Y+ y
  714.         FILE *fp;
    8 C5 S4 b- v( S# a3 T8 [, V. U8 }8 k
  715.         char szString[512];2 E' o! s( ]3 W4 k" [/ g. D" A
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");. `! [/ Y# ~* H2 X% {
  717.         if(fp)2 ~0 W$ W1 t  S# u& V- Z4 R
  718.         {
    : U. [3 k$ \9 ?
  719.           do! z+ l& @# a/ {! g- I
  720.           {
      u& f/ P/ t, C6 c' V: C2 k
  721.             iEOF=fscanf(fp,"%s",szString);7 o1 d7 M; P% B  h2 k7 B7 Z% a
  722.             if(strlen(szString))
    " j+ m: J" p, D3 s1 O
  723.             {
    & a' ]' ], D9 f, ?) m. |% ~% V9 o
  724.               if(bFirstChar)
    ; D$ \$ u3 ^* l! u5 y# \# U" i
  725.               {
      C, H% J' P0 q* r3 Q( r/ R7 Q
  726.                 bFirstChar=FALSE;+ n4 l+ \1 S' c: N9 s6 W5 a
  727.                 bConnectIsBig5=FALSE;. k( S3 K' m5 U# E
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;% e" d8 e9 ^% E7 j* d! h+ D/ ?' A+ @
  729.               }2 q( L# K0 F/ h" ?- m1 D/ W* D
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ! s- _: K# b$ x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));* U3 F& @; e; ]- x
  732.               dlg->m_ListText.AddString(szString);2 s2 U. ?$ Q% _& Y1 L' c- D' v
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! J+ @& V5 D" n* O. P2 B  d4 s
  734.               *szString=0;* ?! P! i- f7 V/ P
  735.             }
    1 {9 [" a2 l- O
  736.           } while(iEOF!=EOF);$ ~; H0 @, y# H/ r5 S! L
  737.           fclose(fp);6 j* N4 b  g: \5 B) I- e
  738.           unlink(".\\DownLoad\\readme.txt");
    $ W0 f* q# K& S' J7 Q/ _
  739.           dwStartUpSteps=3;
    ! L. p$ D+ B- {
  740.         }0 j9 g! u9 @3 u: Q3 A/ H) r
  741.       }
    : Q8 y# U8 M, H$ s4 i/ E
  742.       break;; i; ]  `: G& ]% U2 }) l1 L  X
  743.     case 3:
    ( m  [7 g: i5 X6 l0 t
  744.       if(!Dn.Connected())
    ) `  K' p3 \' @' ^
  745.       {
    ; y5 |( t8 |% t1 c6 Z4 v7 u6 B
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    2 Y6 y! C2 W0 z% y4 p$ z; ]
  747.         dwTotalFiles=1;* B: r3 X; H* f  G
  748.         dwDownLoaded=0;
    - t* U/ J4 q# P- Y# y. l4 ?( @
  749.         bSilentStep=TRUE;
    $ k. u" ]- [$ T! O7 B1 O
  750.         bCompressed=FALSE;7 F0 X% r, W6 j# M
  751.         strExtLocal.Empty();
    2 Y; o$ F1 {8 f4 u3 D
  752.         strFullName="checkversion.txt";5 [! I5 \# a  V
  753.         dwProgramState=AP_CONNECT;" H" l' A8 {9 ~9 X' C
  754.       }$ t* I8 L! ]' }
  755.       dwStartUpSteps=4;
    ) ]2 g4 e) l+ m6 F) C* Y
  756.       break;
    ! a; K) p/ j, T% E: |
  757.     case 4:
    / t, V- h7 D( J% m7 E2 k7 T
  758.       {
    # d/ k( E0 V- n- W/ P  i
  759.         FILE *fp;- }, V( x9 G3 M9 X$ n6 `1 O3 j1 G* U
  760.         char szString1[128];& E# Q6 m6 Q& `3 e' c
  761.         char szString2[128];
    8 ^3 A; R8 u7 F% Y4 B
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
      K2 v, e0 Q/ u1 A" [
  763.         if(fp)
    . O# U4 o7 T/ ?, h& ]- C* E4 @
  764.         {* x1 }! k8 N3 h# ?  R5 `. A; I! V3 a, m$ d
  765.           fscanf(fp,"%s",szString1);
    # g$ X; a6 ~/ J
  766.           fclose(fp);% E2 u* P2 ], O+ \
  767.           fCheckVersion=atof(szString1);
    0 r) a1 }0 H: P  l$ _
  768.           fp=fopen(".\\checkversion.dat","r");! m: n, @+ H) }" I
  769.           if(fp)
    : K3 Z9 X: [' ], i! T" J
  770.           {: G9 X1 a0 `1 }  {& A
  771.             fscanf(fp,"%s",szString2);2 e% H8 N( Y  o" _
  772.             fclose(fp);
    & R5 T$ I% I, N! n3 v
  773.             if(atof(szString1)!=atof(szString2))
    $ {; e# b" i2 j% d. l, ?$ H' y, E
  774.             {
    ! d  E) \; }( n0 B; S8 m- |
  775.               if(!Dn.Connected())
    # Q. X6 k! K; W: W
  776.               {# E( z; P3 \. L0 e: f; i
  777.                 bFirstUpdate=TRUE;7 R* e8 ~2 G1 c; ?- I
  778.                 dwTotalFiles=1;! ]! b- m- @. Z' s/ J% z' g; o
  779.                 dwDownLoaded=0;
    # L) f* G& Z$ x4 k% l
  780.                 bSilentStep=FALSE;
    $ z  D0 o3 Z' e' t! d) }; y
  781.                 bCompressed=TRUE;6 e& W/ J5 T+ e- `. s+ x9 ]' Z( f
  782.                 strExtLocal=".\\DownLoad\";
    7 `3 N0 _4 f7 p* Y5 i
  783.                 strFullName="update.txt";1 Y% C! P" w7 M, j5 D; U
  784.                 dwProgramState=AP_CONNECT;
    ; P$ M7 S" b# n9 \, E
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # N2 ]0 q9 M5 E/ C$ x7 [+ y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 O- u- U2 F3 k9 V. T; ~0 v
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");; P' n3 Y2 t1 R9 x
  788. 0 a* A; y7 W! E) x5 m
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: I2 ^0 C+ c0 y+ s5 s% H
  790.                 unlink(".\\DownLoad\\checkversion.txt");2 ^2 J. B9 }  m; J0 v& p
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)3 d7 r: }4 _# c! e, g% a
  792.                 {
    2 q7 a9 y0 D! B9 }3 v1 ]6 x
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");- t; }$ L7 n! T  D
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    6 C+ d5 z$ i6 V' _! S# Q" b
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    9 l# w7 }, O' `, w+ p
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 `& M) D7 h3 V( s5 x7 j- w
  797.   p) N  C9 W! T" k7 n) F6 q
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # K" _' H) `9 B: I# X4 Q- b' G0 \
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ J/ r, {$ W' D7 D  k7 h# m
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");2 T" p" i2 i6 h% o
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) k9 p; _2 J2 a; }
  802.                 }
    & I( C% w9 R' Y5 M( n3 s
  803.                 dwStartUpSteps=5;7 L" I3 W; F7 F; a7 u. U7 f9 g) C
  804.               }
    # C# ?; c- W- T. M- `0 d) v
  805.             }2 C" w9 a5 h4 u! r5 |
  806.             else
    ' h' |  E. P$ G0 a/ X+ v
  807.             {
    8 W, l- x# I4 K( ]5 I! D
  808.               unlink(".\\DownLoad\\checkversion.txt");
    8 l  _% k0 ~. x1 t! I& @( p. R
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    . i) H: g. h+ ]' t+ V
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");! v: g7 ?1 y9 S8 S, ]% n8 A9 B2 T
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ! P2 h0 C) `3 k9 ~. X4 f
  812. 7 I- ^0 l. p- J3 c
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 K+ \( G4 J" e7 N( k  `/ S
  814.               dwStartUpSteps=99;
      i* E# x' D& w4 I
  815.               bFinishUpdated=TRUE;8 n0 j& n3 ~) I8 V
  816.               bCanUpdate=TRUE;$ ~" ?% D; i' u  M) a
  817.             }
    7 j8 l6 l7 N/ w' {; m8 I3 ]7 h
  818.           }6 }0 y1 k" R$ H, {9 @% h7 K
  819.           else
    7 m* m  n5 j0 ^
  820.           {% f5 X) W0 E2 j6 `' l
  821.             if(!Dn.Connected())
      Q" Q( F1 Q' \( U' E; A6 x% U
  822.             {5 L2 a" U) j! B+ _- ?8 b
  823.               bFirstUpdate=TRUE;  I4 q. b+ s& W, {- s# I5 c
  824.               dwTotalFiles=1;& ?. F( L% U) ~
  825.               dwDownLoaded=0;. x7 W- ^4 M  H1 C' W2 h
  826.               bSilentStep=FALSE;
    3 _/ z2 V; m& l& r7 U9 W- D
  827.               bCompressed=TRUE;; [2 R- I9 U- U" w
  828.               strExtLocal=".\\DownLoad\";3 T0 f; w+ k2 ~; s, k
  829.               strFullName="update.txt";3 C% X% u9 Q0 ]4 [4 N; U
  830.               dwProgramState=AP_CONNECT;
    ' @# h' j+ E' ]
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ Y  \% N0 ^5 o1 `8 n- g' r# a) T3 B
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) a: G" a: S) c
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");% F' t3 j* d6 P- k* N
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" @  S) Q+ \1 W" k9 Q
  835.               unlink(".\\DownLoad\\checkversion.txt");
    $ f5 O# {' S/ ~
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    # k" }' D: l: c. ?3 Q- {. ^7 _
  837.               {
      z  n: @* G3 N) P3 D7 G
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");. [+ v1 n0 ~: ?
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    - x: a2 A5 s( f
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    + s: c' K/ ]  p% e+ j' h8 L+ ]
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : o1 r6 f& N( |- G- X" c' q0 y
  842.                 - k* g2 `$ X: P; ?6 h/ @
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( _7 r+ Z/ U& k9 |* i; K/ p( M
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 `% \$ o+ \: v, [/ p1 a6 D1 D4 X. w
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    7 I2 H6 d# y8 x! _1 v' `: }
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 f. G6 ~7 Q* |7 O* Y) {, F% G
  847.               }
    9 \; k3 B- g: e8 N
  848.               dwStartUpSteps=5;1 l1 L, ^' m( x. Z# ]% X6 K  ?
  849.             }+ U) y+ o; z- B' j
  850.           }
    % P0 j3 C: f" l/ ]; V
  851.         }
    ) q& f; f/ [0 r$ c
  852.         else7 y& S+ Z$ {" B' P. v0 @) }$ c
  853.         {. I4 o+ q8 b7 U" s+ s9 R$ U
  854.           dwStartUpSteps=3;/ M8 A9 c, H& b: x
  855.         }
    0 [1 R% n& y8 k) E+ Q; u
  856.       }
    * `5 B9 \7 G8 J
  857.       break;
    * v2 v' H! a. m+ a) w, |
  858.     case 5:* `. H" p) ^$ m' L( Z. b7 b& m
  859.       {
    3 ?( p# [% [( v5 t7 F; u
  860.         if(GetFileAttributes("Wsa.zip" )!=-1); r( T; @9 g  k
  861.         {& K) b2 \- ?# x) _. E" k
  862.           int opt_overwrite=1;) ^3 I! ^6 o% ~$ b% [( Z9 E! P
  863.           int opt_do_extract_withoutpath=0;) ~$ Z' w, Q0 D! v7 u$ O0 H7 f
  864.           unzFile uf=NULL;, S9 `# y2 ]; G) t; l2 C, p+ }

  865. 7 [+ O' `( j% A! O* \  m4 h" {/ O
  866.           uf=unzOpen("Wsa.zip");
    ! \8 p, W" q4 i$ ~. t- k) l0 E
  867.           if(uf)% K7 u8 z% n: I  y% Y$ B' D
  868.           {
    ' }' O3 B( T0 d5 Q
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);( a  b: i, {- A7 q! l( J. }+ i
  870.             unzClose(uf);3 @% I: u2 g2 S
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");2 E- e9 `/ |4 U6 }4 Y& j
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ! M, o3 Y' \. T, a8 c
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");! c4 @5 H# ^, m2 S* \
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' [" j! ~* g4 S, y& \5 D
  875.           }
    / P/ B5 K1 x. J
  876.           DeleteFile("Wsa.zip" );
      o3 {  w0 z7 i
  877.         }3 K! ^6 j; i+ b& P! }/ E

  878. / U0 E* Y9 d% m
  879.         if(CheckLocalVersion())1 W$ i+ X+ ^( B& F
  880.         {3 I2 A' i$ r% R$ y: f
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    : s6 S% ^1 l0 U7 j
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");/ _7 I! @; ]+ i
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");/ b( \+ }( `$ [, O0 ^0 J: F" V
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# L( X! r1 I8 W. h: U- {* E3 {
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    0 [: _# r$ t* k6 N) I: q
  886.           dwStartUpSteps=99;2 M6 p( t( }2 W* Q! v
  887.         }+ n7 K# r& O& I/ u$ k& [# z
  888.         else
    / r" ?% d8 b3 c. s, U8 [$ ]& h
  889.         {! S1 b$ E" E9 y/ d/ x
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! w* R  u( m  I$ _
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");: q' I  a( ?% g8 l3 ~4 V$ `
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");- p( b* w- Y$ r

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

5 U7 Z; B$ d3 |0 s9 v2 p) H

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-11 08:52

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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