CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
( t: B  G2 }, Y
  1. / RevApp.cpp : Defines the class behaviors for the application.
    7 ?6 m* j0 ~+ X, K+ i) ]: W0 E
  2. //
    : N! ]7 M  O$ W% B5 r9 N
  3. 5 ?& o# B6 h. s# B9 E
  4. #include "stdafx.h"
    ( h& F7 P8 ~. [: i% @5 v) V
  5. & ^- k+ G5 J( x) J9 P* r
  6. //#define UNICODE. x# u/ i3 Q. \
  7. //#include <gdiplus.h>  z' L8 b% e! b7 w8 s3 P
  8. //using namespace Gdiplus;. D0 x5 ]3 w* F# f0 j. Z+ w

  9. * M  G) C9 P, S
  10. #include "RevApp.h"
    9 N+ _1 W1 h' R" S  q. H
  11. #include "RevAppDlg.h"2 t* W5 m8 w* I% o  {" D

  12. ; D% V- h( {6 [0 Y0 N7 G
  13. #pragma warning(disable:4786)
    , H7 l& A/ r  _: x/ `7 O7 V
  14. #include <map>
    : N6 G( y# Q  J
  15. #include <list>3 S. D8 i, o1 J/ {( Q+ ]1 A
  16. #include <direct.h>4 j+ \8 H8 L+ u  ^0 D' r. X# h
  17. * h1 F% L/ S/ J+ i' r
  18. #ifdef _DEBUG
    9 R  v, k4 u% d& ^' Q
  19. #define new DEBUG_NEW
    9 j" L; n; g1 I; N
  20. #undef THIS_FILE& }) ]2 O: k* [. d* G
  21. static char THIS_FILE[] = __FILE__;- M* d. x; f, B; r
  22. #endif
    ( j, y% ]) D) Z) _8 V
  23. #include "SkinResDef.h"- g* @: u; ?& ^& q" t
  24. #include "ChangeBG.h"
    & }/ A% [- ]* k4 X- o) D# z
  25. #include "AFXINET.H"; U4 ^* A8 I$ I  \* X; D1 k% u5 `: |

  26. 1 ~. W9 B, a7 L; z# Z% @7 F: z# Y0 H0 o
  27. #define TRADITIONAL_CHINESE 02 P8 T) f7 z" ~) c. X
  28. #define SIMPLIFY_CHINESE 19 s- p4 m7 v; s
  29. #define ENGLISH 2% g. H. S/ N; s2 J
  30. int m_iLanguage = ENGLISH;
    " B7 s4 o1 d0 Y+ z
  31. /////////////////////////////////////////////////////////////////////////////
    , @' Y0 R6 f# r0 {
  32. // CRevAppApp
    . o8 `  g5 x5 Y4 \4 Q( |

  33. * a! ]6 d7 Q" p4 D( X
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)9 U, x8 F% T% Q4 w5 A1 r0 l
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    . s; D8 T* \' T
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. |% q' {, \5 Z
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!$ c/ W, g1 i4 q; d% o
  38.         //}}AFX_MSG
    ( B- o  R: f, O" |6 u
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ' W  R- W: K( j" Y7 R0 S, U
  40. END_MESSAGE_MAP()3 x9 p  r0 b1 K& _! F2 b

  41. . w8 w7 J: t  A( @; z
  42. /////////////////////////////////////////////////////////////////////////////
    + w( O+ b+ Y3 e0 y6 X7 d
  43. // CRevAppApp construction  N- E% X5 N. I: L2 X: O& r
  44. 5 e1 x; Z) X! ~1 R0 _" X) ?
  45. CRevAppApp::CRevAppApp()) F+ B0 i; ]8 ?5 B. O& v% ?
  46. {$ G* c, J, {5 q6 v3 F4 X
  47.         // TODO: add construction code here,0 h% I! g* q- P* I* J1 K
  48.         // Place all significant initialization in InitInstance) Z; d) f! i! b1 t5 G7 u
  49.   bDisplayIsBig5=FALSE;
    $ P2 l5 f: p. K1 U" b7 K. ~- h& m! N
  50.   bRestartUpdater=FALSE;
    . r" ^8 m& v8 l
  51.   bFinishUpdated=FALSE;
    9 v+ Y$ n! C. g" f0 _: b. K# Q$ D
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;+ d% E, w, U* }8 y
  53.   InitChangeDataBig52GBKS();
    4 {9 Q. [: z9 r
  54.   InitChangeDataGBKS2Big5();) A+ Y, o% G: q/ E9 |
  55.         //7 e- w7 j8 f& m
  56.         bClickRunExe = FALSE;% b' h; N. |5 x( y
  57.         //6 u: r! L: Q4 V) U* L
  58. }2 D8 }3 s4 V5 j2 T8 z* }

  59. 4 _% {$ U$ X# \% _9 G9 k$ E
  60. CRevAppApp::~CRevAppApp()
    ' {+ ?) X, `7 V/ B0 ?4 e. S# P" L7 x
  61. {# d% j# f+ J( j
  62.         // TODO: add construction code here,
    ' |3 r, z: }8 s* H2 X. Q
  63.         // Place all significant initialization in InitInstance
    ' n, p2 w; |7 T6 _6 F
  64.   EndChangeData();' G( Y8 D6 S0 q: h( }1 |6 \
  65. }3 |! V- i8 A7 |5 }8 Q

  66. ! G- }% @* D; \# Y
  67. /////////////////////////////////////////////////////////////////////////////
    5 a! v. L5 E1 T" S4 I3 t$ g
  68. // The one and only CRevAppApp object0 B2 i( z0 `. N# `
  69. 2 D  R  ]8 b. t% Q& J8 ]
  70. CRevAppApp theApp;
    " m7 Y6 b, ~$ t, p, [

  71. 1 y/ f& k; k/ Y" o7 C* ]
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)" s7 l6 o% z& u
  73. {
    , v% u5 ^9 K: Q2 q
  74.   int iEOF=0;
    " `1 W1 G* m0 h- \' o
  75.   char szTempName[MAX_PATH];
    " c, \. a4 [, O2 P
  76.   *szFileName=0;5 g, s# T" A: P. g1 M% W
  77.   iEOF=fscanf(fp,"%s",szTempName);4 p; u; C0 U( z
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('): t6 `, |2 A% y$ F. ~4 [# X
  79.   {
    4 t+ k3 t( J* b' ?
  80.     strcpy(szFileName,&szTempName[1]);5 v# k" l& i1 ?6 m* ^3 C1 I
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    6 i# H! a$ j! w3 i2 ~4 Y
  82.     {% H. ?, J$ @" ?2 M
  83.       iEOF=fscanf(fp,"%s",szTempName);6 J+ V, T+ \' Q
  84.       strcat(szFileName," ");
    , x% O# f  G) ~7 b& W# A
  85.       strcat(szFileName,szTempName);" C. T1 \4 G3 {7 |
  86.     }
    * Y2 f0 _6 p: I* z0 a
  87.     if(strlen(szFileName)>=1)9 T: ~* K- ?5 t
  88.     {' q+ M3 F8 u+ o$ G
  89.       szFileName[strlen(szFileName)-1]=0;
    1 v3 i# Y$ e# \+ J
  90.     }1 X$ W; a* q1 P5 Y; _
  91.   }! n6 u- W; M) U
  92.   return szFileName;
    # H' x% V9 \- G- b
  93. }
    - z: L" P$ W0 p( ?! ~- ^/ m9 j& j

  94. ' U, D, n$ q/ [( i, E% k1 s
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    0 \' d" I6 y( l4 P
  96. {. ]% k- O: o0 P6 X& P% x
  97.   FILE *fp;& w% W" F7 M' K# X2 Y" n: c
  98.   char *key=NULL;2 z2 F. p. H! h, M8 |% q) H6 e1 E
  99.   char version[MAX_PATH];
    % |; n# p6 T5 n
  100.   LPUPDATEFILE file,olds;0 c; I+ ]( P' C( Y  H
  101.   std::map<CString,LPUPDATEFILE>::iterator p;3 B6 E  ?  A! h! F5 ?
  102. 3 O+ U# z+ z1 X  b
  103.   UpdateList.clear();* C1 m+ {" W; \7 B/ A/ T* `
  104.   UpdateFile.clear();3 d1 M1 a1 a8 B" n* K! W
  105.   if(GetFileAttributes(filename)==-1) return false;" J$ L% x, {: s3 z$ F8 l# P
  106.   if(!(fp=fopen(filename,"r"))) return false;
    4 t$ w. a- p+ e( D  ]* J! K3 D
  107.   fscanf(fp,"%s",version);
    . v  K1 W9 R0 @' {( h+ g
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    * L8 I* i1 |( y# O4 [
  109.   while(fscanf(fp,"%s",version)!=EOF)2 h, B5 Z" f/ x" t" u
  110.   {) |& Z% F& P; P3 T/ a
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % j% ~0 T/ X6 j. M8 i2 F
  112.     fscanf(fp,"%s",file->path);
    2 B% w- q2 t* L! T: h" p' ]
  113.     ReadFileNames(fp,file->file);
    / I6 _9 b( n6 k& U6 m$ P0 x7 @
  114.     strcpy(file->full,".");
    7 R/ ^7 ^4 w* d1 t* {
  115.     strcat(file->full,file->path);3 n! a; N2 Y# g% @6 o! r( g
  116.     strcat(file->full,file->file);: @9 ]! k4 n( g4 D( B  U
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
      T0 ?2 ^* F* _2 k0 Y& l) v
  118.     {% n9 n/ \. H. I/ _  Z1 ^
  119.       file->vers=(float)atof(version);
    + U- J* I# r6 L2 i3 }+ |
  120.       UpdateList.push_back(file->full);# T, i& ^& H# {6 c$ {
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    : B3 C/ U. _3 h
  122.     }0 t4 {( J. {% m; Z8 F6 K$ J7 W- k
  123.     else
    $ I6 p1 u' a6 ?  b
  124.     {5 W) b3 [3 Y' e' k* a9 ]
  125.       olds=(*p).second;
    ; B, V2 \7 A7 @
  126.       if(olds->vers<(float)atof(version))- o: W+ h$ }! {" W- Y
  127.       {
    ' F& f8 ?' O- W2 ~3 n" _
  128.         olds->vers=(float)atof(version);
    2 t( a0 x( W2 H' g: f( P4 t
  129.       }
    ) D# x+ ^2 ]7 V
  130.       free(file);
    ! s' L& L/ Z, W# ^
  131.     }. N. K7 d4 l! {2 w2 F2 l
  132.   }
    5 Y( u) _( @; y
  133.   fclose(fp);8 z$ _/ E+ y( Y1 y) ~
  134.   return true;
    * P- q6 j" ~+ `
  135. }
    & b; Q# @* j0 s- U8 ]' N

  136. 9 t0 `  J+ r1 ]
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    0 E" V: k! n0 a# {0 O/ B
  138. {
    9 S( \" ?0 S8 f' a$ j2 y
  139.   TCHAR  szFull[MAX_PATH];2 s+ I$ R8 w7 Y
  140.   TCHAR *token,*inter;
    0 x, H: O; _4 P* n7 `
  141.   *szPath=0;
    ; N+ Y; ?% {: y; K! _
  142.   strcpy(szFull,szFullPath);
    , J1 @0 C* j3 r
  143.   token=strtok(szFull,"\\/");
    # n- k! {& f4 Y
  144.   inter=token;6 H* P1 m) j$ m' }0 x- m
  145.   while(token=strtok(NULL,"\\/"))
    4 x" s- f" C0 E0 i2 E
  146.   {/ g0 O5 X6 w# ]5 ]. r- A1 b
  147.     strcat(szPath,inter);
    , k5 Y3 U6 I' V/ l7 b1 w8 f5 |& N9 X
  148.     strcat(szPath,"\");
    9 J& F- k; t1 u% s. Z" L( K
  149.     inter=token;( j" K/ Y: _" [+ u* h: |' L- M0 F
  150.   }
    , C0 t6 n( i' m8 `
  151.   return strlen(szPath);6 A8 P0 Y1 s* v" F9 c$ t6 T
  152. }
    2 L4 `# A% ?4 v& u( f& N* ~+ b/ N
  153. , z/ f3 C  v; p& x7 q: K2 U4 ?
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)8 I+ ^; H5 R  A9 t  c3 o' l& ~
  155. {6 q+ E0 h. j- ^$ D# K
  156.   DWORD attrib=GetFileAttributes(Target);& V" o$ y+ H7 x$ T  L, f1 i: i
  157.   if(attrib!=-1)
    + F8 ~7 @) W' b: n
  158.   {: u$ E- j, p5 n% N
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)); K; A, v% I# A( l
  160.     {
    ! W5 @* z1 r; @2 g7 e7 @& `5 b# |% z
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);2 g: I8 L7 f2 ?5 O/ G
  162.       SetFileAttributes(Target,attrib);0 y' L% D. H( i  r7 l. J
  163.     }, l! S/ ~' t! \: q. x! m8 ~
  164.   }( P+ Q9 y7 \$ \- E0 d
  165.   CopyFile(Source,Target,Erase);9 l, `. y% K# j1 \
  166. }
    + y1 D) s2 Z* Y! A+ \; g8 |
  167. # b7 J& g/ {7 _' A& s7 x$ ?
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & ~- C4 `" ~/ t- z
  169. {
    7 F# G/ z, i: I8 q
  170.      FILE *fp;
    8 o: [  g0 K- B2 Z: X+ O
  171.      char  szBuffer[8192];" }& d* L% t4 L* m
  172.   va_list  argptr;+ n* R; Y3 `) N+ r+ C0 d2 X# T

  173. 6 |7 j  U7 w# _9 }
  174.         va_start(argptr,message);) `/ a3 d( A9 v: u( |- U
  175.         vsprintf(szBuffer,message,argptr);
    & J8 N8 Z( |* Z7 p
  176.         va_end(argptr);3 E4 j8 K8 i6 p
  177.   fp=fopen(FileName,"a");
    : d( G; W! t/ G/ U0 E  ]1 X
  178.   if(fp)
    - |* }# }7 f9 q
  179.   {4 R) j/ V1 c! \7 C% z
  180.     fprintf(fp,szBuffer);% v7 N& z# ^3 }3 j' f5 k! O+ ?" o
  181.     fclose(fp);
    / ~+ e  h" F& |) z* L0 L6 i1 `5 y" L+ a
  182.           _flushall();
    $ A% A; \/ w6 @* r! i# k2 k. s% a
  183.   }% T+ o' h3 O1 J7 L7 {" C; |$ ?
  184. }
    - u3 d, F3 u$ x' |9 @2 [: ~4 |! X) |

  185. ; {7 @2 f/ g+ q* [
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    9 b4 n  _# |- Z+ E
  187. {
    ) l2 H5 |( w: W; ?( n7 m
  188.      FILE *fp;4 f) ]. Q+ _2 Z3 P' Y( E+ Z6 b
  189.     DWORD  attrib;
    . L5 f4 G& t' g9 f
  190.   attrib=GetFileAttributes(FileName);, m. _- t# v( D' Z( h* l
  191.   if(attrib!=-1)+ o' D' y8 h0 k# }8 m
  192.   {
    * i8 B! l# l  A0 M
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);# \6 G# X( q6 }" T4 y
  194.     if(!SetFileAttributes(FileName,attrib))8 W% b1 a  J" \" J
  195.     {
    4 N7 C. Z  ^8 E+ [% S& p5 M
  196.       return FALSE;
    , N, G$ n5 t7 ]9 r; S! _! X( ?
  197.     }
    , m+ p% V% Q( P
  198.   }
    ) A, u! U9 h! m7 @( R% ?9 C
  199.   fp=fopen(FileName,"wb");1 Z  t/ {) w2 ]4 x* {8 ^7 U, j
  200.   if(fp)6 C% ]' R; g  N/ b% o6 R" @: _
  201.   {! j0 `- h& ]' l" H+ g
  202.     fclose(fp);
    7 V' q' y) m+ Z5 {) k
  203.   }
    3 D2 o0 p0 \: E) B( l
  204.   return TRUE;
      f7 v( P4 [5 u8 y9 b/ s& M
  205. }
    ' J' r) I7 Y+ u6 l: \
  206. # N" W% L& y4 I+ D2 e' e9 W
  207. BOOL CRevAppApp::UpdateLocalVersion(void)* \5 o9 L# @& J' w- D( m
  208. {0 x6 Y+ e: K: ^. z) H7 |' Y+ ]
  209.   char filename[MAX_PATH];
    * Q# ~' S% a; F2 R
  210.   LPUPDATEFILE file,olds;7 K0 `' U9 y( v! X3 v0 `
  211.   std::map<int,CString>::iterator i;
    4 g1 w5 B& ?. g) o1 ]
  212.   std::map<CString,LPUPDATEFILE>::iterator p;- f- v- ]4 E; K) k% v1 a) ^2 N9 n
  213.   std::list<CString>::iterator l;7 p: c) ~. V5 R, U& O7 E+ W2 A4 a

  214. 4 @7 N( |# {0 U1 t0 _
  215.   if(bFirstUpdate)
    * Q( k2 Y' T4 A+ d+ o& w" E3 e
  216.   {
    7 v& P3 w# F0 X) }4 H
  217.     dwCurrFile=0;
    6 B/ N& c+ a4 E  ^' {
  218.     bFirstUpdate=FALSE;" r2 Y$ D+ \+ Q- Q# O
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( O8 a/ q+ P9 p; c& N
  220.     {
    . l# N  b8 C' @- X# z- a
  221.       dwTotalFiles=UpdateLocal.size();
    5 `, T3 |2 b  ^3 R; ]5 H
  222.       dwDownLoaded=0;" e! s' M% Q) Z  c. y$ r/ V8 f7 c$ W
  223.       bSilentStep=FALSE;
    ( i% j% y" o# `! Q) {% d9 f
  224.       bCompressed=TRUE;
    . i, `/ p6 F5 `( R+ H- h- c
  225.       strExtLocal.Empty();
    - E. l+ ^7 ?# [. K* B3 s
  226.       strFullName=(*i).second;
    # C4 W- H  y0 u1 A- T6 M( C( o$ i
  227.       dwProgramState=AP_CONNECT;: D% i% n) ?1 N, S: D- Q: J6 W
  228.       return TRUE;! p2 b; \, w  ^) M
  229.     }2 {  t! Q$ }4 {8 v! y  E9 H
  230.   }" v5 L; m3 @; L. l9 \
  231.   else if(bRestartUpdater==FALSE)
    " [( ]# e. V1 c4 E6 L3 m5 E% f
  232.   {
    . j7 r9 |( j8 w& g* X" e1 r) M
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    % |' @! ^7 t% O
  234.     {* S. v7 B7 ?  D+ `
  235.       file=(*p).second;- {; m/ Y" @+ [- V
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())& e2 b6 d$ Y) W9 f/ L; ?
  237.       {$ C4 L4 A4 |4 O
  238.         olds=(*p).second;$ p. q! I2 {' L) K8 \% N( \* O
  239.         olds->vers=file->vers;- D0 T! E6 C1 o  f" q
  240.       }
    1 ]% {( _; V# S, e' C
  241.       else& i8 N2 J- @( g' y5 I/ \
  242.       {
    / A0 W; _" K6 i5 s
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. K9 F3 s" @9 Q2 ~
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
      G& m0 g! }  |+ j
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ' W1 F3 e! A6 w3 h/ P) c
  246.       }/ Z# g. W. o" ?9 U5 O3 g% y, H. P
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    % D+ w  K/ r8 _' |: I- ~1 h) I0 X
  248.       sprintf(filename,"(%s)",file->file);
    ( Y  w) D  e3 L, \
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    4 G, G' d* L# D! [. y, R) z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }# A: [$ g, W' l+ r% v5 q
  251.     }/ |4 x3 ?& F& p2 k7 X
  252.     dwCurrFile++;
    + F+ k2 }0 L$ c$ w# A, }" ]: ]% I
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 s6 X  z0 n* P6 s
  254.     {
    / X5 n! P0 k4 [7 {: u# b* a% Q0 d0 G
  255.       bSilentStep=FALSE;
    8 a. t3 y# K( @
  256.       bCompressed=TRUE;) T# [( n, m) P. P& m( o) l, T  s
  257.       strExtLocal.Empty();3 S7 H2 j" H7 U
  258.       strFullName=(*i).second;
    1 j' H9 J9 I; b: _; I  I2 L7 o+ F
  259.       dwProgramState=AP_CONNECT;$ }2 D" g# l5 [1 [- p
  260.       return TRUE;/ W7 H3 M; o3 ?9 Y/ g/ ?
  261.     }' G; e# Q* T( I* B/ m% }6 A8 X7 U; D' {9 ?
  262.     if(!bRestartUpdater)& b& z/ R8 j9 H0 h1 q9 q% d
  263.     {
    # W0 n! q+ t1 y
  264.       int iCurrSize,iFileSize;" \8 D" m* `2 g: `0 Z
  265.       iCurrSize=0;
    ( X8 F' k( T' j6 e# X
  266.       iFileSize=UpdateList2.size();
    5 h, ~, T( |8 r! X
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ! U* t9 w6 G1 C+ f1 N" f, F6 G
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");6 T: G: ?- `5 F3 v! c( W
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");( K2 V& z3 y3 Z- D. N, D
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % p7 `( j: n: f, g0 n
  271.       Fclearf(".\\update.dat");9 ]; w% {# S' s1 E: p' t8 q
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    : N+ }/ L+ ?! y. T, L/ h" V5 ?& u6 ?
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & S' ^+ {8 e2 ~) K  [! g8 e
  274.       {
    0 |7 ^# C* F2 m. M. h1 b# s, A
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
      O& h( o" y, s: o& X: ~2 x
  276.         {
    / P7 E: Z" \8 l/ [8 M
  277.           file=(*p).second;6 X. Z/ p2 c1 E3 G; I3 i
  278.           sprintf(filename,"(%s)",file->file);4 p  E+ g) h/ y6 S" i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % _  x; }$ J) H0 O5 v
  280.           iCurrSize++;9 F8 d. x$ w0 i6 w  E0 N+ r5 s
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    8 b4 S6 V3 \  l6 [* E! W4 N
  282.         }! h. m. E' J( h" U2 R  R
  283.       }
    - b2 B, w7 s" v) S* m* R4 O8 t
  284.       unlink(".\\update.txt");8 `" f7 b" x1 r% J/ ^9 C
  285.       unlink(".\\update.tmp");
    $ @1 X. y2 |. i9 W/ a
  286.       Fclearf(".\\checkversion.dat");
    5 @0 _. s- b. y4 c  s: i
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);9 l/ i. `2 Y( g  A) a
  288.       if(UpdateLocal.size())
    . v6 [; U0 u2 X" h/ I; D
  289.       {" {3 y  c1 l; p6 k/ c
  290.         UpdateLocal.clear();
    3 o4 r* Z. K1 u8 a6 B$ r/ `7 O6 f( q
  291.       }, g9 c) w% w9 w7 r' ^  V
  292.       if(UpdateFile3.size())
    1 Y' g. k* E, @
  293.       {7 }: }3 \( _" e% `/ Z2 l
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ T9 r# e% W3 Z7 ?- q
  295.         {- e: L6 c! W5 u7 Z/ |" [+ g% @
  296.           file=(*p).second;% \3 {# ^! L% r1 h; j+ K
  297.           free(file);
    2 k+ N7 u. r8 b, Y5 q1 v) a
  298.         }! ^9 u# @; x# d+ C( H7 f4 u8 Q1 C
  299.         UpdateFile3.clear();
    6 y% @5 H' i; `4 }$ E
  300.         UpdateList3.clear();
    5 t  n) |' S+ \6 ]$ u6 l
  301.       }( ^- N. Y/ n& r
  302.       if(UpdateFile2.size())
    0 H! Z& \  h* {
  303.       {6 P2 e' s% p: ]
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- I* C$ J( x1 b% Q" w' i; p) _7 X
  305.         {
    & q6 y4 F; M1 f, s4 x
  306.           file=(*p).second;
    4 R: L$ E$ E" a' ]' d/ h7 t
  307.           free(file);
    " l- N0 Y4 c, W$ s
  308.         }
    ( y/ d* |; u$ h# U
  309.         UpdateFile2.clear();
      m0 g1 v2 r# M$ I4 f9 b0 T
  310.         UpdateList2.clear();8 d7 M# E# d, }0 b. r
  311.       }! \& b0 `) k4 ^1 V; t
  312.       if(UpdateFile1.size())  Y' n! ^7 d8 q+ l( f* Z
  313.       {, e4 U( o; f( V$ b9 n
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      Y( W% L7 D- H: W, i* i1 g
  315.         {
    . m$ H2 g! L( X3 g8 q$ w
  316.           file=(*p).second;! `- g+ m: u- w9 x0 S7 Y9 g* E: D8 A
  317.           free(file);) Y. u/ M7 p& H6 J9 a
  318.         }
    0 s& f: ?+ P" o- r
  319.         UpdateFile1.clear();
    . h3 W4 F$ d, c) t: U
  320.         UpdateList1.clear();* ]* h( ^3 G( b2 Q: ^8 B
  321.       }8 P% a" P' G8 Z% m* T
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    + q  V1 n1 O# |+ {
  323.     }* C0 v2 }6 n/ _' X& K1 \0 {
  324.   }* i8 n/ A: t3 k, e7 h- K' {- ~
  325.   return FALSE;. v+ u7 B; W  r6 Y: {$ _" E
  326. }' `! d2 ^! X# L7 U

  327. ' q9 X6 M9 c$ F9 q: D+ K7 b
  328. void CRevAppApp::ClearAll(void)
    # P3 m4 c% y8 Y6 F8 t/ {5 {. q1 Y( s
  329. {" k/ s9 c/ t' f5 h! e. |
  330.   LPUPDATEFILE file;
    9 S+ x% S2 V* l& Z9 _1 g! j
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 z8 P1 L% N/ D
  332. : D; r5 j+ h9 [+ h7 O
  333.   if(UpdateLocal.size())
    0 G6 K* F) j! |
  334.   {8 @+ `/ ^. U) t; G% F. X# d
  335.     UpdateLocal.clear();
    2 `- Y4 V" Q" v
  336.   }% a$ I3 O  z3 Z( J; ?
  337.   if(UpdateFile3.size())
    1 u) ^! A! o( z
  338.   {% A5 P) g: L$ b+ S
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ( u' `3 x% a7 f: K# p, _; ]
  340.     {: S( }# _. D& F, `3 Q( }* S
  341.       file=(*p).second;1 ?$ W6 o* z4 L" Z9 K% W7 K
  342.       free(file);
    ( g# P5 j6 o/ A: i1 ]
  343.     }' X. n$ B4 C7 K+ ~- h: n" ~3 k
  344.     UpdateFile3.clear();. X3 r% x. D$ M1 O" q8 i  p9 q# x
  345.     UpdateList3.clear();
    0 ?( o6 a* ?1 U. X
  346.   }
    1 {9 Q% G) e& E0 O( W
  347.   if(UpdateFile2.size())9 _* P' b( \7 _) U9 `  O5 o9 F
  348.   {4 ^, F/ d# K: Q3 r( ?/ Z/ X) Z( c
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' q, l! s5 B! `- Q
  350.     {$ q) l3 f+ N$ `+ t; f  v8 i
  351.       file=(*p).second;0 F% o3 y% t: e' D* @: K
  352.       free(file);- n# s; ~: {" _0 j8 u  L1 R+ `- F
  353.     }3 \6 P' x; ~& R9 m& y, T6 _4 n
  354.     UpdateFile2.clear();' X, K1 |$ f8 K* C( c  Q; D4 b! E
  355.     UpdateList2.clear();4 }9 \4 O0 g% @1 y' X
  356.   }
    % P/ p) j( L% U8 L. d
  357.   if(UpdateFile1.size())
    2 U2 |; J9 I0 g1 i* f6 k# q
  358.   {
    6 R% T8 |% i* i% D; ~2 F
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . _. u# D) s1 e5 d+ K
  360.     {% A# ]+ N4 x; a% Y8 z
  361.       file=(*p).second;
    $ }0 Z1 Y5 ^" r6 e# j
  362.       free(file);
    8 X$ \! c+ `; M) E) \- L  V
  363.     }
    9 n- v+ u! D$ F: A( z$ s
  364.     UpdateFile1.clear();4 Z2 v% l; [' P  T% m6 U
  365.     UpdateList1.clear();
    % C) I% J4 T" j! ~1 X" A
  366.   }
    & D8 r" b  r' D
  367. }  6 V( l8 D( p7 T( O
  368.   # N4 z  s4 a+ e+ d' z
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    + @# ?) \* A+ P
  370. {( q" e; R" Q" l; T7 ]: U
  371.   int c;
    $ a/ d& U; j- i1 J( K9 C  x2 A
  372.   LPUPDATEFILE file1,file2;
    + `" ?4 P3 ~( c
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    & ?1 [! S2 P7 }& f  r8 C% G
  374.   std::list<CString>::iterator l;
    1 _" ?, j4 @# o" q/ K! I; x4 ^3 \; q7 W
  375. / g7 B7 F( H0 J& X' E9 Z* J
  376.   UpdateLocal.clear();
    ; }3 ^- ~9 Y, H! S7 }- i+ Y! e) ?- s
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);  b* i, y$ _* W
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    $ U, Y5 C0 ~' O# E
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    6 C0 O, q6 d# ]' w: W+ \
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);0 d/ F; h) A; k8 {8 y
  381.   if(UpdateFile3.size())8 K. O3 q- _8 W
  382.   {
    : w  T0 x5 {: g' i. w3 g% d
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    8 O4 s- P8 ]" v
  384.     {
    # R9 n' d/ d3 @% i
  385.       file2=(LPUPDATEFILE)(*i).second;
    , r' q! l; u& X
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    # q5 R) ^+ Y% n  b
  387.       {& Y8 y, Y- K- m) ~
  388.         file1=(LPUPDATEFILE)(*p).second;) \2 ~! {6 b  `1 `8 s
  389.         file1->vers=file2->vers;
      [8 D. O# t% H
  390.       }
    ) }/ a1 D8 W! n  |6 U& O
  391.       else
    8 Z: A! Q" w0 u9 `8 k2 Z
  392.       {) H8 o$ q! [5 p4 b
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ m4 i: v9 \$ y. [
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));9 z2 P7 n: [3 D) G) h# w0 H
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    5 G8 o6 F/ [2 Q) }
  396.       }
    3 Z5 `( P* V' c* @1 x( h
  397.     }
    / }$ t$ Z# H9 s2 j/ }0 S1 n
  398.   }7 `/ I$ [, B" }! @: g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)- y, P; X* ?  ~- Y" [
  400.   {
    + ]$ X  ?" M$ P2 T/ ^. V  {+ _
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    4 X' J: k# a8 x, ~; _
  402.     {$ @1 L, q7 x0 r3 `
  403.       file2=(LPUPDATEFILE)(*i).second;! H) Z/ w* @# N# A/ {% N
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 D$ R, A$ P  e% t2 W, g6 Q  \
  405.       {
    0 M; Z" Y. n6 S5 j
  406.         file1=(LPUPDATEFILE)(*p).second;
    " F. \7 m6 P6 ~. l; a* N1 D9 f7 _
  407.         if(file1->vers!=file2->vers). q4 k2 R- [2 `$ d1 W8 ^# S$ e
  408.         {! @4 {$ M2 b7 L
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- D2 ]: [6 }5 x, t% J) a% |
  410.           c++;
    ( J$ r8 p( m. @6 f( R
  411.         }* h7 b$ ?/ E' S3 N+ R# e$ [/ r
  412.       }
    2 X  D; t% L8 A; h/ L, V! |; w) [( @
  413.       else+ h! j2 ^7 {# y9 P9 }! A4 n, Y( d
  414.       {
    " d3 Z: q* q0 G. ?; y% K
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    . r) T* B1 i/ w! c) a7 R, m# W
  416.         c++;
    2 `; L' g9 Z: W8 s: E+ B0 V
  417.       }, n1 o: V, E! F% W/ I  u
  418.     }2 n; n7 `) p# M
  419.   }
    3 C0 @8 S; N  Z" k- k: e  D
  420.   unlink(".\\DownLoad\\update.txt");
    / M' M/ Z$ q' j4 X$ @
  421.   if(UpdateLocal.size()) return TRUE;3 K4 w& v  H: T. _4 X. C
  422.   else                   return FALSE;
      @7 C5 E4 g% j
  423. }
    0 k6 W4 b2 G1 ?/ ]; C8 T2 \, V
  424. ' p# w) C% ~5 w3 i
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"- r8 [9 A# r- E! P2 n5 Z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    2 z; m7 E% I9 @3 F" w: X- K
  427. 4 W  Z3 V) d* Q4 k1 C9 x* K
  428. ' [! U7 f' R' p; Y$ b% A5 F
  429. ( W# V1 o  X! k8 H
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)  p8 n. M3 v3 a5 W5 G/ g" Y' W
  431. {
    3 F  M) j6 p! }) J0 z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;/ p* m, w/ x1 U
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" x: ^# \( T: m5 t, o8 Q1 Z0 k
  434.   {
    9 L6 }5 L2 H- y. w, s$ [7 N
  435.     char szLanguage[50];
    % Y, [/ C1 X* @& p6 M4 S) b' |" {
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( [- K, \" h( z. @. W# z3 ?; ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; l  A9 {' Y( `+ o8 k( `* D! F3 K  r
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 J, N/ }. x$ i; w
  439.     else                                   m_iLanguage=ENGLISH;
    4 u: @2 ]* L: \4 Y  K' Y$ g
  440.     char szRegister[100];
    3 u) f3 d' _) w) Z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% U) o: U  x5 H  U0 w7 }* S$ B
  442.     strRegsName=szRegister;
    ( \' X' G; F4 T0 h5 U
  443.     char szPatchURL[100];
    $ v& }; j  V6 s
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , Y+ u0 K, M# D7 B
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 F4 a0 H0 p9 u$ @6 o
  446.   }
    # O, b1 I, T0 U) F) ~! ^; J8 O
  447.   else* }  z: H* Q" `2 s9 W* q
  448.   {
    7 M/ J5 _: [9 U: ?% H5 x
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 w6 H2 R7 j: D8 Q( {/ T$ Z
  450.     strRegsName=DEFAULT_REG_URL;6 M; A- ~5 Z0 Q$ F7 ^2 S
  451.   }8 q' h+ k+ }2 E) D/ _# z6 v
  452.   if(GetFileAttributes("hosts.ini")!=-1)5 C5 }! R& x; @# u2 e
  453.   {4 p4 Q2 ^) \5 W1 @5 S, l
  454.     char szIP[50];* Q" F. Q: R! W& W
  455.     char szDIR[300];1 A$ z, e6 D6 S, |1 M
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    , d  m, E0 D0 {& U! g" Q) o  R
  457.     {
    . m# d: \. K: g  P6 C& E3 C7 a
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : A" {1 E# E  {: b
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");' Y) F  M1 }# ~6 Q4 }3 }+ J
  460.       strHostName=szIP;
    / J6 `5 @4 T$ M5 D; ~' K6 P- ~: X% Y
  461.       strHostPath.Format("/%s",szDIR);8 J- N" Z- m: X6 B
  462.     }" C# m  k# o2 P& _3 s" X9 ]. V
  463.     else
    * X9 N/ O% w+ p; w. n( m+ Y  @" D) y
  464.     {# |- Z: Y( \7 \# B; S8 b; _0 p
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      w+ y" \: h0 i0 m# b
  466.       {6 N3 S6 \. N5 K
  467.         char szLanguage[50];6 t5 f! Q, |# o4 l  \/ P
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 V9 f, h) ~( m3 v+ f# e
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. d9 J4 N% l$ \( U+ s# m: W
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 G5 |/ l- n  ]: u
  471.         else                                   m_iLanguage=ENGLISH;
    1 F) x2 c1 u. Z  x! e; j
  472.         char szRegister[100];
    8 P  W- q: l) }/ _2 S
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' l7 P+ i7 [! o' R
  474.         strRegsName=szRegister;9 y) E+ E7 j( K2 N8 u6 k/ I
  475.         char szPatchURL[100];
      A& Z6 Q3 I9 I7 |) f
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ c) B  R* ^- y6 k7 f7 p2 [
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 {5 R) e# {+ |- t2 W( a6 R, X
  478.       }
    5 W! i) R- a) |* l
  479.       else, Q4 A  @/ V9 n6 |
  480.       {  H  v7 [2 M% l
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);* U% p, o6 |, Y% J9 M' J( v' ~
  482.         strRegsName=DEFAULT_REG_URL;8 R$ Q: \5 ]8 g& Z- K3 g; x
  483.       }% x. ^2 {) S7 f+ K) z; }) a
  484.     }" B& s4 d" X+ a# D
  485.   }, F8 S; W# ?$ J1 w5 Q
  486.   return true;
    9 v) y. C5 M. ^( Z# a4 L- f8 r2 t
  487. }- k/ n" U. M7 q! y$ R

  488. ' o9 |0 D+ K6 g, n6 m$ r2 O$ `
  489. #include ".\ZLib\unzip.h"
    + f$ U  u; Q* Q1 G: J
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);" c* E! r6 K7 w- g3 N
  491. /////////////////////////////////////////////////////////////////////////////: h8 b: }7 m) b9 c  ^
  492. // CRevAppApp initialization
    # a( w% `; f; q8 U4 f  M: e! E4 p3 n

  493. 3 r$ C4 \6 p$ W; A/ P5 X7 v
  494. BOOL CRevAppApp::InitInstance()
    / U' {+ ~! ]  p: D* p
  495. {% {4 S1 [/ H9 ^# I, N5 {! z
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];  Q- s+ I" p7 H5 ]" s

  497. 5 r5 E; L  q7 g% |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    4 A# ?, \0 F" v$ g, v) E/ o
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    $ V' |, Q! d9 o4 K) ?* Y
  500.   {9 Q6 ^6 X. j9 J  z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    2 k) C9 N$ l  J! d
  502.     GetPathFromFullPath(szPathTarget,szPathSource);+ N0 e% s; B, X7 k1 g
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    $ I! |3 {5 ]# F. l2 ^, W
  504.     {
    0 i& ]6 P/ u' s/ _3 O' r4 v
  505.       strcpy(szPath,szPathTarget);% K+ ~9 t! F' o$ S7 I
  506.       SetCurrentDirectory(szPath);
    : T9 m; g# Q9 }0 k" c# Y5 M
  507.     }) A! [; [6 u) k
  508.   }) n  d% W! N1 z7 T" d1 I8 G
  509. #ifdef _DEBUG' W! l0 V' _" m
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * D! F# s+ |  |: Z
  511. #else+ v- h9 ]- r% o- H* s3 r# ^
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  K+ |8 B# `! e  B
  513. #endif& v' y. p3 `6 i, g- K
  514.   {! r5 X7 G& i) g$ \  `+ d, c6 w. Y
  515.     char tempFileName[MAX_PATH];# M5 s/ S5 m& g, P' b1 {
  516.     strcpy(tempFileName,szPathSource);% H3 C: }- T) d1 ~, ?6 |2 G! r
  517.     tempFileName[strlen(szPathSource)-12]=0;
    8 i% r2 J; l; p, O2 R
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    5 u$ Q0 s, u" |
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ) G! q) L5 N9 _# `
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    $ Q$ @& N& v3 V# k8 x  |
  521.     return TRUE;
    # {8 q6 N* G, V
  522.   }
    / |- M& I1 t# t
  523.   // Nuke 0118: Delete run.exe9 ^  m: j) |" l! V! p5 x# X
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    3 z6 D* G6 _( Y& n4 j
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    * D$ i" d  p1 h7 P- d! a; w0 o
  526.   if(!ReadCfgFile("Config.ini"))
      s3 \' y2 X; J! x
  527.   {2 C( ^* z" @  h2 M; X4 Z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    1 u$ p: G2 x$ o4 n
  529.     return TRUE;2 `7 f, q/ w2 @+ \  J# k
  530.   }. K. O/ i: M: D# h% U5 m$ h" @
  531.   HANDLE mutex;
    ( C6 A. b/ L6 V" K) Q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    8 \" _; C4 S$ L5 |
  533.   {. }. I( x8 |2 F$ C
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    6 J# B# W. p: O; n4 Q' M7 m
  535.     {* G& k  c# d( |1 m! @( w/ c& a4 D
  536.       CloseHandle(mutex);
    / L% S# q" G- Z% v* f( E$ [
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);$ _; M9 _5 Z3 }' N
  538.       return TRUE;/ L3 ^% {6 Z9 Q' Q' d
  539.     }. ~' O( D+ u- w" B+ S
  540.   }  
    & j% U# c5 s1 N; |
  541.   CloseHandle(mutex);
    ( R* Q9 U$ O7 a9 z9 J
  542. * s0 U" v4 E" L6 g* r
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);0 F- g) Y8 m! @7 S* A' @3 s
  544. 9 I5 X# d7 m5 |$ C; H5 D+ h
  545.         AfxEnableControlContainer();! ]- I/ h! c3 e8 y
  546. $ J" a% D5 N3 c
  547.   bCanUpdate=FALSE;" e' n) {; h" l! o4 y! ?4 R
  548.   dwStartUpSteps=1;
    ; \/ G" a: ~, S& H+ p, P
  549.   dwProgramState=AP_NOTHING;9 W9 P3 v. w" q5 k

  550. ( |/ U7 x+ d# K. j# M% e. Y  T
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);8 k: D4 A; U' q3 J" x4 \
  552. 2 X$ b; Y3 ?2 y% _7 @5 I
  553.         // Standard initialization
    - m4 a& y& j6 V: Y7 u
  554.         // If you are not using these features and wish to reduce the size9 w# `3 a& l! ]: |
  555.         //  of your final executable, you should remove from the following. U7 I* t6 a% x* X' ]! n5 `9 e
  556.         //  the specific initialization routines you do not need.
    4 ]" s9 z/ C$ m/ d; _( j
  557. 4 E: o7 K$ {6 S* f
  558. #ifdef _AFXDLL$ {' u6 q0 R9 P5 _! _) ]
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 ?& K% v; P7 H" b' O; x
  560. #else9 g, U0 z9 n; M" T% i/ h
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    8 V6 e: S: N6 x
  562. #endif
    / E5 b9 I0 f$ C# C; j# i5 w7 I
  563. $ _% x- E1 o4 w1 t4 ?6 a
  564.   dlg=new CRevAppDlg;4 x( o& n# a# _1 s. n% }
  565.   dlg->Create(IDD_REVAPP_DIALOG);/ h5 Q; _) @1 ~( q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    3 ]" y  u7 x. N6 e8 F: N/ |
  567.   m_pMainWnd=dlg;7 w& L2 K' p/ N- P- |% c
  568.   N$ b/ M" O; M6 G8 u
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    7 [; h- a& v" }0 d8 v9 Z* E1 I

  570. ) l+ ?% D1 t+ B
  571. //  GdiplusStartupInput gdiplusStartupInput;
    : u5 R. y2 d) X$ ~+ Z" z, L% y
  572. //  ULONG_PTR gdiplusToken;
    . x7 N6 p  a3 F& J" p* N4 w: y1 V% }
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    # d$ ?5 v2 j. E

  574. ) ^1 @( P0 E! {: M/ N% K* f
  575. //        CRevAppDlg dlg;
    . N& d% p$ x/ [- j: S
  576. //        int nResponse = dlg.DoModal();: }' {. B, _2 _
  577. //        if (nResponse == IDOK)# L$ ~- ]& r7 ?5 t  F  J
  578. //        {
    ; j) e: x6 Y( K  U$ `: {
  579. //                // TODO: Place code here to handle when the dialog is
    ' X* D: j, u/ t
  580. //                //  dismissed with OK
    9 _+ `; s! c8 y: o5 }; H1 K. A8 ]
  581. //        }
    " W2 {. |# S+ D# e4 B1 a
  582. //        else if (nResponse == IDCANCEL)* W( J6 R. _% \5 s) g
  583. //        {( q9 v3 _: d8 S$ }, z
  584. //                // TODO: Place code here to handle when the dialog is( Z- y% X  G* {' F: D
  585. //                //  dismissed with Cancel  v3 w; ~( F7 a+ b. F& n8 d
  586. //        }& x; O4 I2 l' `. k

  587. " D8 c9 |; N( f; S! c# Y
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    " `5 [; I* ^( Z7 W2 A
  589.         //  application, rather than start the application's message pump.
    + [! d, U4 P) f7 h7 v- K
  590.         return TRUE;
    - \( L) X/ }3 {0 c4 Q5 X5 K& G
  591. }, ~  |: ~! f4 M) {
  592. 8 K; b5 W8 P/ ?
  593. char *CRevAppApp::strtok3(char *pSource,char *token); d; T0 z" U. W, W; d- D8 O
  594. {
    0 h4 R; F; j9 ]( [- }: }
  595.   int i;  ?- A$ Q! z: T
  596.   char *szRet;
    - Q& r6 b  A  S& c

  597. 1 I; z; ?/ d1 y1 L2 G  r" b, _% F
  598.   if(pSource) { itoken=0; sztoken=pSource; }) O" j* s' t( q7 ]
  599.   if(sztoken)4 M! R7 R+ r' L5 o: L
  600.   {
    ) E! h4 ?" _. P
  601.     szRet=&sztoken[itoken];' o0 W6 X8 y; P. t( i) G4 f
  602.     while(sztoken[itoken])+ O$ k" k$ f- P* X1 j( |
  603.     {
    9 M/ n  w+ h9 ^% B. o4 r
  604.       for(i=0;i<(int)strlen(token);i++)) m3 z0 ^, H1 H4 R" \
  605.       {. i+ H3 [) A$ `$ X, [& Y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])2 t" U& V% R! X* p2 S
  607.         {
    9 m1 W; `! f) f, E1 o4 w) j+ K
  608.           sztoken[itoken++]=0;; W/ z: T* g# z" q+ _1 x$ ?0 T. ]
  609.           sztoken[itoken++]=0;9 G: w+ m' J- Z( O3 N5 R9 j
  610.           return szRet;  V! a3 N. _: X
  611.         }
    . c  `& [. [: j6 E$ U
  612.       }
    9 Y: Z( A4 k: U5 G
  613.       itoken++;
    % ~+ W+ W, N$ Z% H0 c/ X$ N! o1 m
  614.     }
    % t6 D3 c- Q7 n! I- O8 j
  615.   }: x! I+ P1 d6 F
  616.   return NULL;
    ; u5 Z. f5 W" E" m8 L$ A
  617. }
    / Y- A# J" F* u! y& w8 V+ Q* h

  618. / t5 ?: ]5 e4 w$ G3 V7 c9 w1 T) i1 }
  619. void ProcessProc(long Total,long Current); m" L* h3 L2 `
  620. {
    , v, [7 x* S. K# {: y) k9 ]/ u
  621.         MSG msg;
    : G6 v, L) q  W% s0 e6 ]' h: F) R
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    3 T7 M6 ?7 L4 \- r' {
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ) Q$ B' h" J2 _9 a  h, D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))) b6 c, j6 b  d$ M- t) d& w
  625.         {
    2 ?0 {- Y- {% x+ w5 @' y# @( D
  626.                 if(!GetMessage(&msg,NULL,0,0))
    6 U, X3 O) Q& V5 l# f2 w
  627.                 {4 a6 t/ l3 ]1 c5 X: ~8 c, [
  628.                         return;
    5 z: j- W. W3 @: \$ g5 _9 z
  629.                 }* v; D7 B/ R9 M0 E* I% U- T3 p2 `
  630.                 TranslateMessage(&msg);
    ; I2 t* |8 M: h% V; f
  631.                 DispatchMessage(&msg);
    . b8 Y4 u" c& w# t
  632.         }        . H7 [6 n4 Q6 c9 }/ u
  633. }8 E& G7 c8 c7 I! L
  634. # Z8 c5 ~% d+ c& s
  635. BOOL bFirstChar=TRUE;
    1 I. i+ K  X5 j& m0 c. C1 }
  636. * l2 U8 G2 y' X( m7 }; L- {4 p
  637. BOOL CRevAppApp::OnIdle(LONG lCount)0 K4 x8 R8 e& p; r* a  A  Y+ R
  638. {% ~6 \2 o! J. ]% P9 E% E
  639.         // TODO: Add your specialized code here and/or call the base class: P7 |, Q- J1 x! T
  640.   switch(dwProgramState)9 J, c2 g' d! D7 }' W
  641.   {
    ) h$ g6 N. X9 n* w; A
  642.   case AP_NOTHING:- ^2 c5 l' r0 \2 T9 x
  643.     switch(dwStartUpSteps)
    : X2 F: ]3 m" e; Z( U
  644.     {7 r2 c+ |" w* Y1 x* g% l! R
  645.     case 1:
    - ~1 `# t! l" h4 s- Y1 W) ^% F0 l) M
  646.       {/ {9 E% O1 ^, I0 y
  647.         int i;8 y) J2 {! p. ~! \" O& @
  648.         CDC *pCDC=dlg->GetDC();
    ; F; I8 L( v- ?8 Y
  649.         HDC hdcwnd=pCDC->m_hDC;
    . Y& A' X/ z7 g/ j# F
  650. //        Graphics graphics(hdcwnd);+ z" @+ c4 l. F: X5 m! y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");0 B' H; N$ W, K
  652. //        INT iWidth=bitmap.GetWidth();
    4 b  z# e( V% ]8 ]1 P
  653. //        INT iHeight=bitmap.GetHeight();# L1 R/ h5 K, V2 k; A8 D% y3 V6 ?( v
  654. //        Color color,colorTemp;# V1 O: _7 Z4 z. z) k; g
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    4 _1 Z  N9 o) p
  656. //        {3 _1 [2 l: o. ^) U/ \$ c. b# \0 J& ]
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)% X! P: N: O7 A, Y
  658. //          {# r8 L6 H2 q9 B. s/ C- _$ Q  D# e
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    " G, G# `& Z/ |. q  ^6 W
  660. //            colorTemp.SetValue(color.MakeARGB(, H5 {7 ?* w# ]# T. C
  661. //              (BYTE)(255*iColumn/iWidth),
    1 f. f# c1 d* c
  662. //              color.GetRed(),
    & }) L1 Q) @8 w6 K# j# V( t. M
  663. //              color.GetGreen(),4 Q4 o9 c3 [& D' `% ?, v1 F
  664. //              color.GetBlue()));; j3 n0 Q. f: u6 J& h
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);8 W0 \$ y# Y2 ~2 U$ b
  666. //          }" y; h. ?" q: _1 A6 N2 Z
  667. //        }; G4 I: J- D% u8 R( s" k: [/ |$ N
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    5 p  D9 x3 p. K2 l$ l) ~
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    6 W$ ?. k5 Z4 u8 H5 g9 g- ]
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    + I  b0 Z. \( L
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");4 r9 _& D3 u9 \
  672.         for(i=0;i<240;i+=8)( L' D  Q8 K1 ]1 ^: `1 B3 h
  673.         {1 X( I3 F# p8 [; r/ L( ^8 ~3 p3 ^
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% `, }! T9 G% l& q9 l' [
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: P) a+ K# P( A$ I% i& d6 q
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; w( i" N) K$ {( r7 ]7 \
  677.           Sleep(33);
    , Q* X1 P6 l! B; M$ x1 E$ B
  678.         }* {# w9 s% D9 ?7 t2 b
  679.         Sleep(1000);- F# m+ O5 E8 l! r
  680.         for(i=240;i>0;i-=8); S- m7 R* @8 b3 h* [
  681.         {$ N  v$ t! l' V0 y) O: P
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);3 s( W# l8 |: M
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 J* X4 I" [) N+ j; U, f+ x
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);8 J/ P# @: ~, b; B4 @" A' H) j
  685.           Sleep(33);
    & F2 Q/ ^! J5 A' I0 t
  686.         }4 l; @4 j' \$ V9 C: R7 E
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);. e' L1 }) L0 _$ l- T5 l% s
  688.         dlg->ReleaseDC(pCDC);
    / `1 O) m' X" B; _: i" |
  689.         DeleteDC(hdctar);  F' n' h, z1 d/ K. z6 z( r
  690.         DeleteDC(hdcsrc);9 b& A* U. h* _
  691.         DeleteDC(hdcorg);
    ; t  R4 [, t) S7 Y9 o5 v
  692.       }
    - q- V# v& Q0 l- p! i( D& [
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);$ B/ F& P% l2 G) E
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 ^9 S0 {. u5 q/ `/ s
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");5 _+ _$ {* |9 [. Z! \& J9 ?0 s
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");2 ?/ Q8 F* g" h  t3 u) }
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# a. j" o  s( W; Z. p- B1 ~2 p
  698.       if(!Dn.Connected())4 F$ _8 m2 r; P% i
  699.       {  v9 t0 e1 h/ x
  700.         dwTotalFiles=1;# B8 a, f* ?# F7 h3 @- x
  701.         dwDownLoaded=0;
    ; G: j  L, n3 a" V
  702.         bSilentStep=TRUE;1 R3 A, U7 H1 ~/ c: N
  703.         bCompressed=FALSE;4 K9 {* W; N) g
  704.         strExtLocal.Empty();
    + A) {6 }4 u. J% N
  705.         strFullName="readme.txt";9 ?4 ?/ U7 W5 c& H5 P9 m8 [1 ^
  706.         dwProgramState=AP_CONNECT;: X! u* w- L" {9 A
  707.       }
    + H8 \8 c0 M5 a0 c7 b/ Y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();) [7 l  w, I3 @! _. `! `, g+ E  w
  709.       dwStartUpSteps=2;3 r4 r# D6 ~" m' _* y
  710.       break;$ V0 r! G9 h/ }" U# |
  711.     case 2:
    - z8 K1 @: [3 z( v- a
  712.       {
    : Q2 R: Y' n4 j  Y. F
  713.         int iEOF;) @1 N% I  _( O; j, ?( P" }) ?
  714.         FILE *fp;
    3 |2 j/ x- i, k4 A
  715.         char szString[512];( e7 c  _5 W# f7 Y& {
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");% Q- e: m7 Z: }# s
  717.         if(fp)4 p- V9 D8 ^- f* H" j9 M9 Q& g
  718.         {
    1 J. |% P' L. _
  719.           do
    , f! _+ p3 ^' f% P) |
  720.           {
    , C5 [* X2 w0 r) @0 I& P
  721.             iEOF=fscanf(fp,"%s",szString);) t) T+ P" j# b5 Y% j
  722.             if(strlen(szString))
    ! p- P# _' I: x
  723.             {& u% ~0 G% V9 Q: \1 i! @. j  U
  724.               if(bFirstChar). i3 ]/ @9 ^  Y9 `1 A
  725.               {
    , E) E1 R% s" `% U$ T; b  ~  q8 F
  726.                 bFirstChar=FALSE;
    # R( f2 e' c0 T0 y; G. h
  727.                 bConnectIsBig5=FALSE;
    / k4 j- J6 E+ M. I: f: u; v
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ( C/ P4 @% M5 h6 N8 Z
  729.               }, z- E' n, B$ Z3 g7 C. [/ _
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));1 j2 J1 B* P& Q% x! b
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ; {3 Z, K, q0 S( Z* y
  732.               dlg->m_ListText.AddString(szString);9 J8 i. N/ _+ a, y' m% q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' [$ G" q; [6 B+ T
  734.               *szString=0;1 y5 L$ \  I( e9 F' b* e3 f5 Y
  735.             }8 `9 D$ b3 u/ w: l3 L
  736.           } while(iEOF!=EOF);
    ; B3 J. }7 w& s1 c
  737.           fclose(fp);# ?( Z( v) n8 O1 d- _  `
  738.           unlink(".\\DownLoad\\readme.txt");
    - i* K- [. B# d/ J$ `" H# d
  739.           dwStartUpSteps=3;, [* ]4 o+ P) z0 @
  740.         }
    / J/ s2 b$ n! k4 X" R% A: X
  741.       }
    - R, _0 }* R, L& {5 x$ C
  742.       break;
    1 q8 `6 i! f) p$ N/ Y6 U5 I
  743.     case 3:% }& F: x% `; I
  744.       if(!Dn.Connected()). w" s0 y& K, g5 K5 q
  745.       {
    % N/ e7 g. w" X$ d1 H7 a+ x
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  _/ x$ ^# }7 a0 e# K2 [1 ~
  747.         dwTotalFiles=1;
    ( i1 G4 I! R% [, ]3 R3 O
  748.         dwDownLoaded=0;4 e4 }: T( j# \0 P- B/ W  G( X
  749.         bSilentStep=TRUE;
    ; u$ R2 ?1 j1 M2 p5 y) n& p/ v
  750.         bCompressed=FALSE;
    2 s5 a1 x+ V9 g4 I6 g4 a
  751.         strExtLocal.Empty();
    1 ?* C) \' J9 s% T
  752.         strFullName="checkversion.txt";
    1 B" G$ P' m4 m, b9 u+ ?
  753.         dwProgramState=AP_CONNECT;' u& s+ W) O% \5 r' ~9 Z5 A; a
  754.       }7 O& a. P  t& Z0 O, o6 M- L$ r+ z
  755.       dwStartUpSteps=4;# F. M4 V! Y; g* C4 p+ T$ e
  756.       break;
    1 n. o! T/ p3 b/ [9 b8 J
  757.     case 4:
    ! X' m; n& a3 d8 d: b% G" d
  758.       {2 r( S- D. R' _- r8 Q! N
  759.         FILE *fp;( m. c9 p# g) _
  760.         char szString1[128];
    2 X6 F8 ?% ^  O! c' N, Z4 v+ |7 B5 e
  761.         char szString2[128];, M9 x9 y' P4 k; u2 L  X! {+ P5 x
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");1 d/ H! j' j( W, z
  763.         if(fp)& K. v, [6 w* `3 c4 f5 n
  764.         {" {4 w( v' l) A
  765.           fscanf(fp,"%s",szString1);
    ! N% @* y) B) n1 `
  766.           fclose(fp);
    : n& Z4 k. b) m1 @2 A
  767.           fCheckVersion=atof(szString1);9 G8 j- t" T6 U: x$ C+ }! H+ |
  768.           fp=fopen(".\\checkversion.dat","r");9 o0 f0 x8 Z8 d7 ]3 `
  769.           if(fp); U5 n( a: |" g+ S
  770.           {
    + e' C7 Y/ W2 F/ \+ |! Q
  771.             fscanf(fp,"%s",szString2);9 q/ h! m; {. k% y% N1 D, H* r' r6 w
  772.             fclose(fp);
    7 y8 _  T7 @6 p+ N9 d& z5 f
  773.             if(atof(szString1)!=atof(szString2))
    ' W9 e! m6 C5 s# x' l+ i4 Y6 `  W4 c4 a
  774.             {' B9 b; K" o; t( s! E3 y' O
  775.               if(!Dn.Connected())
    + W' ^* P# F5 ]) f! O& O0 D' u7 U  R
  776.               {
    " l2 B( Y* B% W+ ?. {
  777.                 bFirstUpdate=TRUE;
    ; Z1 q* n0 S6 b6 X3 m  W( R; S
  778.                 dwTotalFiles=1;- v5 s8 v& y' D1 X/ ^5 L1 n
  779.                 dwDownLoaded=0;; [. U- C" F( H2 A' H
  780.                 bSilentStep=FALSE;$ Q) i& a4 j: N
  781.                 bCompressed=TRUE;
    1 R) j% o' o4 Z2 S/ F
  782.                 strExtLocal=".\\DownLoad\";) Q6 P8 w& \$ d  M- B% q) z
  783.                 strFullName="update.txt";
    6 R0 w5 `( H7 O& |/ \1 b8 l
  784.                 dwProgramState=AP_CONNECT;
      C2 g6 h' w6 I  W( |
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  R6 a- {+ W' j7 K' q
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");1 K5 S1 J6 n* N% Q( B
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 ^: O# j$ G6 N. z1 I6 M
  788. 1 f% r0 V  N" V( G! ?
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & G! M. k2 C9 y+ c
  790.                 unlink(".\\DownLoad\\checkversion.txt");% T$ x% K8 t& O2 N- I: I
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)3 }7 A" ]( @; m% y7 j: b6 e0 n
  792.                 {# u. W6 W  O) W4 w, n
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");9 w' Z3 G3 B8 T- i. s
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");9 _- h+ W1 S: q( ^. m5 D+ g1 y5 }5 @
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");/ }) d: q/ o- X1 _; [5 x1 A
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" `0 ~. n9 H/ N( Q: i$ C

  797. 6 i+ h- k! _' j4 o; q
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  o- n, ^( E* e1 N! p9 @" {
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* D, i# e" _% g" K  |
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");* G8 c  E% J7 I1 D' b
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , `1 C" S$ `4 i7 J6 i/ C
  802.                 }6 I3 f' V) M# O. t
  803.                 dwStartUpSteps=5;
    6 `  y( ~& s2 B4 X4 E# J+ C
  804.               }
    5 c0 _6 O1 @# `6 W7 r8 j
  805.             }
    - O8 C1 C! p7 }3 q! I
  806.             else% i. i$ P: j! B% }% s# b
  807.             {
    8 _, ]1 k  Z% ]; T
  808.               unlink(".\\DownLoad\\checkversion.txt");8 i/ o) |- z; U
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");/ Q1 N- O5 i9 q% h
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& q& Z% h0 w# u7 E6 e, n
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");7 f( i  X  k! J# z0 f& x
  812. ' `9 t9 d* B4 i# b3 w
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . \0 {3 X5 n& T/ F3 G: w
  814.               dwStartUpSteps=99;
    8 c  U+ V' q: X1 F
  815.               bFinishUpdated=TRUE;
    4 z+ p& g7 |; W# E5 `* z8 b! v% V
  816.               bCanUpdate=TRUE;# H8 g# s  W0 z4 q/ @" O
  817.             }
    $ _) b+ H3 ~' R; b2 C8 ]: @" J
  818.           }7 b  o$ |: \; [7 ?4 A' I
  819.           else- o8 l5 c( S0 u
  820.           {' {8 {! d" P4 Y8 ~5 o
  821.             if(!Dn.Connected())9 o1 R% s0 o4 b
  822.             {
    7 J4 r; [7 J0 o; ~# {# H
  823.               bFirstUpdate=TRUE;
    4 m% x* [" o# C: t0 S
  824.               dwTotalFiles=1;: b2 d# o$ E1 q3 D! ]
  825.               dwDownLoaded=0;. U8 z1 {/ T3 F% U3 ?% O4 k6 l  k2 r' z
  826.               bSilentStep=FALSE;; T2 g& k% _5 A; V) i% N! D
  827.               bCompressed=TRUE;8 Q6 g4 Y3 x& W& e7 O2 C
  828.               strExtLocal=".\\DownLoad\";2 b, q' {: [5 V8 ~, P- `, o4 d
  829.               strFullName="update.txt";4 Q9 |' L: E* k9 F, m
  830.               dwProgramState=AP_CONNECT;
    ! H% O3 W3 f8 K/ E7 J0 W
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , a- Z- S+ q" O$ k) d. o8 }
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 {, R1 s, j/ X- }
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; ~' `  g8 {+ ]. ^1 G! c; E$ S
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ L: o1 i1 {/ a" j4 N8 f) I
  835.               unlink(".\\DownLoad\\checkversion.txt");' c5 g+ {! o3 S+ p  k6 s
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)# h$ n" s2 H& l, x- W" z0 w7 t* V
  837.               {4 O+ u, Z) Y4 T+ p2 K  X
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ! h' f  E7 ~! v6 I2 `$ O
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");: {5 I$ ]( S8 V$ v
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    : l: @  L* `+ [6 y, U
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) `7 ^  y3 N2 P( P0 S7 F7 _
  842.                
    8 c7 w' o& }( R( N9 l
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % T7 u5 p5 h3 s' s" I4 X
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 V; i2 t2 ]' a7 ^5 W7 T/ @
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");3 f9 E- r9 q1 O( [
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' f* C" C0 n" @7 b
  847.               }
    + u! L# k7 r* Y) ?' l4 U2 v
  848.               dwStartUpSteps=5;6 c) J: Q( J) ?# P9 W" e0 E
  849.             }
    , c9 b* T" V: P2 J& A% W9 @
  850.           }% Z9 R( t9 a! v
  851.         }8 I# p1 j$ F# m/ d+ D! h: l
  852.         else
    2 ^6 k' q2 g% Z+ P- n/ ?2 F3 Z
  853.         {& D# Z2 t/ A% R7 `
  854.           dwStartUpSteps=3;
    / [2 S, f" |- Z
  855.         }  Z0 h" t* l4 q. J
  856.       }
    * d" @  o2 m7 B( H, L/ e) N
  857.       break;
    2 r! c6 Y+ k) ^9 w$ g5 z; w
  858.     case 5:2 r2 T+ F. x0 I9 v* k( _) u& e" `
  859.       {) c2 w( M, s6 V9 x4 N( P& Q
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)2 r7 r7 i  V3 K+ t; ~) {
  861.         {2 H- x+ d: t& J: j$ |9 Z% e8 w
  862.           int opt_overwrite=1;) p8 Q5 U* T/ u; ]; }# q
  863.           int opt_do_extract_withoutpath=0;; E, I8 y7 D) P% K; h
  864.           unzFile uf=NULL;
    9 ~. Q) _* Q4 ~
  865. 3 b  L* v; h- |( P
  866.           uf=unzOpen("Wsa.zip");# v. L5 t8 \- c# o  X6 j( G* Q
  867.           if(uf)  s9 O: B$ z# C% N3 m- a1 c
  868.           {
    4 Y( ?3 F; z4 Z  h
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);+ T! Y* d9 G' g: M7 ~8 y
  870.             unzClose(uf);
    ; F6 Y! j. v. I$ O- `0 u% Z) I1 Q( W
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    0 q6 |3 h: U4 o& a' r
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    / Q5 D  V  {  v5 @' M/ y
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    * D6 S8 q  D$ ?4 I$ ^1 c
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( s2 u* l" Z8 Y, e
  875.           }
    0 Q; l, M' z1 [, v
  876.           DeleteFile("Wsa.zip" );
    . o( S0 X8 q, M' T2 k1 [& _
  877.         }/ {, q: B! o, D& Y9 n. h- }5 A

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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