CSUpdate.exe源代码

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

& `* f: h) C1 t4 a" ]
  1. / RevApp.cpp : Defines the class behaviors for the application.
    " J+ c) Q$ g7 v) w5 z: ~& }
  2. //
    ) i- x: d$ C6 O6 |' X' i

  3. ! c0 [4 M* O5 Q/ e5 s! Q2 _4 H
  4. #include "stdafx.h", Q9 `9 w- q9 E9 R

  5. 1 \7 }3 ?- E2 z0 X+ n
  6. //#define UNICODE
    " z; g* r8 c1 L. E
  7. //#include <gdiplus.h>
    $ k/ o0 h  T& u- r7 t% |
  8. //using namespace Gdiplus;
    ; n+ a! f. ?8 {: [! \: {+ [% J

  9. + c+ J* I- {5 L( U8 l  w3 S6 K! [
  10. #include "RevApp.h"; o% n. X3 q+ v+ ^! O, J
  11. #include "RevAppDlg.h"
    3 {2 V0 x8 S4 M5 a
  12. + q" g: d; f+ A1 t- {6 c
  13. #pragma warning(disable:4786)
    / ~8 R( F4 C7 ]0 k7 e
  14. #include <map>
    $ f; _- b' S+ O2 l, o
  15. #include <list>
    4 h  B! c, _! p) J! T0 X! P& {/ w4 }4 ?, n
  16. #include <direct.h>% l0 J$ L$ W: J6 c, ]

  17. ( Y8 Q6 I' c+ D( h1 f/ V) D% z) d9 ^
  18. #ifdef _DEBUG
    / q4 v" q# L. z( s2 ~, c* c
  19. #define new DEBUG_NEW0 g+ B4 S5 s  x; `5 r' K
  20. #undef THIS_FILE( @2 r. S) I" v
  21. static char THIS_FILE[] = __FILE__;
    ) c1 c) h6 R- n6 U4 n8 C
  22. #endif
    9 Y! q' x8 ]/ v% D
  23. #include "SkinResDef.h"
    6 |5 T$ Z& y( p( q& C# ?
  24. #include "ChangeBG.h"
    / E5 v! @. {4 h; ]' i9 i0 R
  25. #include "AFXINET.H"8 @- k6 @/ `' O3 k) Y' S

  26. 7 k6 o$ J! L) S7 [
  27. #define TRADITIONAL_CHINESE 04 O# p$ O' H: R  G, p* l% R7 G
  28. #define SIMPLIFY_CHINESE 1
    : g1 P- T1 D# J+ j
  29. #define ENGLISH 2
    $ ~' F& U8 j+ h$ @  G
  30. int m_iLanguage = ENGLISH;
    / j( i, l" X+ T+ l/ y; }
  31. /////////////////////////////////////////////////////////////////////////////4 i0 [% ~5 |6 C  g- k3 t* k7 B
  32. // CRevAppApp/ S0 |7 Y  w2 Z/ Y

  33. $ G, s9 G* g) O6 E9 u1 W4 Q; C
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 S4 U( Q* p7 |3 q5 b3 U
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    " t3 R6 Y; D: N
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.! L( q, Q: i, S/ Y8 a" t
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!3 ^  Q! [3 l2 z' `: K( y
  38.         //}}AFX_MSG
    2 U! a  a, {% {" v) J+ q/ r& A
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    % k* ^( R  [2 D% I7 A
  40. END_MESSAGE_MAP()2 Z# {) u" t# m2 J! O) `7 L! V, }
  41. * [6 R/ N4 M3 [4 d% b& u# }
  42. /////////////////////////////////////////////////////////////////////////////6 H, k4 \5 A. D
  43. // CRevAppApp construction
    # a/ N" A3 K% k3 ^& H

  44. 1 v; B3 R. |$ G5 ^# V
  45. CRevAppApp::CRevAppApp()1 T2 n5 X' Z8 E) Z
  46. {
    ( e' w( @( n) L+ h0 S  p: c7 O$ A7 ~0 K
  47.         // TODO: add construction code here,
    , l: p" b0 o# [, D8 r  ^. m8 T
  48.         // Place all significant initialization in InitInstance
    ) f$ G& }- c9 Q: V7 Q
  49.   bDisplayIsBig5=FALSE;
    6 W7 ]3 L9 ]1 \# s
  50.   bRestartUpdater=FALSE;; {# e; h/ Y! o; g/ W
  51.   bFinishUpdated=FALSE;
    ' M/ K& G3 c) k# o
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    # K, C5 Z7 t( o
  53.   InitChangeDataBig52GBKS();
    * C0 P* Z' e4 Y8 n! a5 P
  54.   InitChangeDataGBKS2Big5();
    2 E! }: }  C' W  T, j! {
  55.         //
    6 B8 v, l8 n: v, d0 M. j
  56.         bClickRunExe = FALSE;
    9 {. M6 s- W4 q, S
  57.         //- D4 e1 V5 m5 Y: Q
  58. }( Q9 x8 N- d0 X1 `# }

  59. 0 b& \' n' l$ t- k
  60. CRevAppApp::~CRevAppApp()* ~: g% `0 I: Y# ^3 {) q6 V6 X
  61. {- t6 I/ W0 X* s6 i% m$ R
  62.         // TODO: add construction code here,/ E4 M& n! r+ I/ }
  63.         // Place all significant initialization in InitInstance0 t. R$ j- S; U# Y- p6 g- J
  64.   EndChangeData();
    - q2 b+ T2 ^  X6 D4 H3 }
  65. }0 y; n' }  _. m9 G8 F& r7 t

  66. 3 c, p0 e6 D' {; W  {  f
  67. /////////////////////////////////////////////////////////////////////////////
    ( P: A5 s. v4 {( E
  68. // The one and only CRevAppApp object6 Q3 s, P8 c/ j4 Q

  69. 8 B0 X7 M# `+ W' t2 a8 U
  70. CRevAppApp theApp;( i+ u- w+ z( s
  71. - a! G) Y1 |9 {5 G# M& _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 |2 j% Z4 H$ l9 [+ E
  73. {
    8 D$ S& p# m  V6 r$ x/ n/ R3 `! r
  74.   int iEOF=0;
    ) }; o, H3 Q9 e9 A, H
  75.   char szTempName[MAX_PATH];
    8 m7 o0 U: i3 ~
  76.   *szFileName=0;
    . p# y0 u# U) M" {& o
  77.   iEOF=fscanf(fp,"%s",szTempName);1 W' _* x3 q' d1 W7 `
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    0 f  G  g  _7 v' Y1 m0 j3 [" g
  79.   {, P8 R7 e7 j& [
  80.     strcpy(szFileName,&szTempName[1]);; \1 X, _6 W/ |1 E9 }, Z0 u
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) F6 ~( g9 N2 `
  82.     {
    . [7 g; w! P6 R; i# h  U
  83.       iEOF=fscanf(fp,"%s",szTempName);
    6 J3 p: n: L9 f( e9 @
  84.       strcat(szFileName," ");
    2 o  x# v  W5 _% U
  85.       strcat(szFileName,szTempName);, c. D1 `5 R3 |/ d8 q
  86.     }( F, x6 f, s. p) G- o% n  j
  87.     if(strlen(szFileName)>=1)
      ~1 R) K* `. X! _2 h% R( L
  88.     {
    # {' n  K* C& Q0 F
  89.       szFileName[strlen(szFileName)-1]=0;
    % @9 e% F* i  k: r# {
  90.     }. ~: Y/ S: z+ K2 O' ]2 l
  91.   }
    - k' V: b" J5 ^# X: u, F( F
  92.   return szFileName;
    9 `- W9 B2 }: X" v
  93. }
    # k7 n" Q* ~1 X& j" z
  94. 0 O6 u' t+ ~  Q  v8 Q1 a% N: v2 h
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    # I% {7 q* X5 {% e: U8 T, K" h3 F
  96. {6 ?# M. j8 U5 R2 a
  97.   FILE *fp;
    3 Q4 @! P2 Q6 A6 F' K' E& l3 i
  98.   char *key=NULL;2 N% s& f* x2 |, s7 A( D1 E
  99.   char version[MAX_PATH];
    ! x9 M7 O4 B; L' s' Y' i
  100.   LPUPDATEFILE file,olds;
    5 V- [7 L& }7 r, N
  101.   std::map<CString,LPUPDATEFILE>::iterator p;3 E) e, }. E% v2 t0 i- B

  102. 6 }7 b6 P7 F9 t& \. _4 q6 e0 W
  103.   UpdateList.clear();4 N9 K( ~" j5 Q- d
  104.   UpdateFile.clear();
    8 H! E, V  Z- Z4 m
  105.   if(GetFileAttributes(filename)==-1) return false;
    8 i8 C& k6 T# d6 v# H; I
  106.   if(!(fp=fopen(filename,"r"))) return false;
    : h; v( a# ^( T2 |
  107.   fscanf(fp,"%s",version);
    : ^* a( a7 u8 Y+ M
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }/ H- ]1 L; H+ d  |4 `. ?
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ; r9 m& y0 ?) ?* o
  110.   {
    ! w! O9 j" \4 f9 c3 R8 F) U% I' a
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% b" `6 _; O6 z+ Y% ]/ u6 K
  112.     fscanf(fp,"%s",file->path);" @: m* H( J9 w# u
  113.     ReadFileNames(fp,file->file);
      [+ A6 ?" |/ T/ \$ `* r3 _
  114.     strcpy(file->full,".");) e4 |8 ~& l5 \
  115.     strcat(file->full,file->path);
    * D2 W- @3 }" w2 e. v1 O
  116.     strcat(file->full,file->file);8 s2 r' c" U$ X# d- q
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    5 s+ z% k7 [0 g, ?
  118.     {* n( b1 q( s: j: ]
  119.       file->vers=(float)atof(version);/ d- D9 T$ H, g2 ?) V
  120.       UpdateList.push_back(file->full);
    - o' y7 @2 v' z0 v
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));- t7 x. {! c: Z' F2 h$ O
  122.     }
    , y* {4 ]3 r* A2 g# c4 C
  123.     else
    & m3 d. f" K- p
  124.     {
    : d: i$ w9 V0 _# r/ X) L5 P$ ]  [' e
  125.       olds=(*p).second;7 y# N' k; J0 G* J7 V- F$ U7 l1 q
  126.       if(olds->vers<(float)atof(version))
    ; T4 I1 L. o$ a+ n5 i0 ]
  127.       {
    7 u0 t3 h/ [9 w+ r( R
  128.         olds->vers=(float)atof(version);
    % M4 t! b' `' _7 M
  129.       }
    8 i: A* C* n2 v7 `/ |
  130.       free(file);
    4 y. m$ `! A, M0 K7 R
  131.     }
    0 X& s* |/ G% W/ O  R
  132.   }
    1 i1 W' ~) x- B$ E5 {+ P! E; o
  133.   fclose(fp);
    % D% H8 B' J/ r; _$ j
  134.   return true;
    " j/ S9 Z5 X" K" R
  135. }
    / |& r8 M4 R: \. u- s' z
  136. " ]1 B4 \: s3 I) o
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)' j' x( ~, s7 W4 {( M5 A
  138. {3 W/ y* Y5 l# x- p
  139.   TCHAR  szFull[MAX_PATH];' N4 K! S- G7 a) s! z% G
  140.   TCHAR *token,*inter;) c2 F2 x, W: r. Q2 R$ y/ w
  141.   *szPath=0;
    * V% D$ P/ c7 x3 z4 t+ Y
  142.   strcpy(szFull,szFullPath);  ^0 ^: H0 u$ r6 @$ }& c
  143.   token=strtok(szFull,"\\/");
    ; g8 k( ]9 f1 c* Z: c" B! o7 n
  144.   inter=token;
    & L+ G7 E+ @! |: D4 B
  145.   while(token=strtok(NULL,"\\/"))
    : V6 u9 I  P2 Q
  146.   {8 D2 \+ t% M' O
  147.     strcat(szPath,inter);
    + w5 z  C+ A* V2 |( N& H
  148.     strcat(szPath,"\");
    1 l  S! X) q% a$ z" L4 I  Y
  149.     inter=token;/ j. Y6 R" I6 T( A* F0 ]
  150.   }
    , S- m  j+ y/ c
  151.   return strlen(szPath);
    7 E$ s& a+ l4 l/ o+ P; D! v
  152. }
    0 v: U# M3 g( j. ~

  153. % v# l- j6 G6 M' `6 b: ]* a- y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    / Q+ E. j+ O- x, u3 [
  155. {
    & ~' y& Z0 }8 \
  156.   DWORD attrib=GetFileAttributes(Target);
    ( Z) L# Y$ X, j* ?" W* ]; k
  157.   if(attrib!=-1)
    " u6 y9 Z" w- Z$ p& J. @: y! P2 d
  158.   {
    3 s1 Q5 ^& {$ y) e0 B1 b& }
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))/ \% j! n: S6 c7 D
  160.     {
    4 k$ V( @* @; U8 z
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    " g- w. N8 h# j% G$ n# o
  162.       SetFileAttributes(Target,attrib);. W5 g) M( X- }2 p: a7 D* P
  163.     }/ W- W3 W3 v6 X7 y# L1 T' j
  164.   }4 V) x/ w0 O$ U3 Q6 ?4 @
  165.   CopyFile(Source,Target,Erase);
    : Y% L7 s* q. R
  166. }! g$ \7 o6 _" F  w

  167. 2 i- ~3 D4 \# }7 g9 j
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)3 U8 x' n9 J/ H" T, j- B
  169. {* M' q! |- k. m- `; V, q' ?
  170.      FILE *fp;
    0 r2 F( {! f1 C( Z1 M
  171.      char  szBuffer[8192];
    9 @8 K" }# m! @! c5 f
  172.   va_list  argptr;0 }. \1 O- E2 s2 l7 j8 y+ d1 j
  173. ! _3 s2 m! U; i% e
  174.         va_start(argptr,message);
    ( X. t- s! o2 ^% A3 F' n% F4 k
  175.         vsprintf(szBuffer,message,argptr);
    8 n3 K# J: `4 ~# R: j4 o1 y( Z$ {
  176.         va_end(argptr);+ |" _0 P, q4 d8 A* `* l
  177.   fp=fopen(FileName,"a");; _) _. V; i2 `
  178.   if(fp)
    / d( u" z0 `& c7 R' S3 e
  179.   {
      s# m) V, g4 \! E
  180.     fprintf(fp,szBuffer);5 ?" d: ?1 K8 B% |0 K
  181.     fclose(fp);) m9 p8 U! C, A6 d" K9 ~. E
  182.           _flushall();1 }- _- ^  j+ N0 s7 ~/ B
  183.   }  Z# h3 g4 S3 X  A
  184. }
    6 m" B- M" k% o4 a- [

  185. 1 b7 `3 k% W6 |8 z) k% F% F/ |
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    + Q/ P* w! j  @2 Q. n- N* A
  187. {( @/ ~7 y5 O! P: w0 l
  188.      FILE *fp;
    ! U( T! X5 u. _
  189.     DWORD  attrib;2 n$ r/ F' f, B4 B
  190.   attrib=GetFileAttributes(FileName);& }& R+ a9 R  z( [+ o( ]& }3 p( ~
  191.   if(attrib!=-1)2 L' M! p( H4 M: ~; X( ?# T7 U
  192.   {
    6 U- I& T, o1 [4 G2 _% {9 P
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);* }- x# R* H2 W0 O
  194.     if(!SetFileAttributes(FileName,attrib))
    * B  e+ T/ T$ }- ^1 O
  195.     {
    * h. _$ |7 x! `7 I
  196.       return FALSE;% R# ~, j( W4 `, R# L, Z
  197.     }
    # M: r6 @6 F+ W
  198.   }( b0 o; Z0 n" }9 F% \( h+ U- n! M
  199.   fp=fopen(FileName,"wb");
    * H. i1 P; A: Z/ H; X6 c
  200.   if(fp)
    ' H& |" {. s& s2 |, i
  201.   {
    1 K! f- p9 J% U
  202.     fclose(fp);
    ( i- x- y2 a' W5 r: m0 s$ L
  203.   }2 M0 r$ B# a9 z3 f  o
  204.   return TRUE;% _6 q6 b7 W$ ~% ~
  205. }
    1 N0 @, B( X+ r: a

  206. % @2 c# j7 b/ ?+ r3 P% f7 N
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    7 }5 G- R& T1 ?- m9 s* I
  208. {. i" I8 j. A9 i7 B3 l) v# x
  209.   char filename[MAX_PATH];" t) l  W2 R+ N# [" J- }" H
  210.   LPUPDATEFILE file,olds;" E  H% v  ?9 Z# f& R
  211.   std::map<int,CString>::iterator i;) u( }  I/ P1 z5 ^: j
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; u" e" `& {& W
  213.   std::list<CString>::iterator l;. J- A; f. P9 j  z2 s' `
  214. + S2 L6 ?  T" K1 m7 ]
  215.   if(bFirstUpdate)( Y$ k: ~. s' `; r3 c7 f% p
  216.   {0 R; y( E1 W4 X% t- f
  217.     dwCurrFile=0;
    3 d3 L9 X' j. h6 f1 Z6 B6 r$ s" Q
  218.     bFirstUpdate=FALSE;
    6 X* M& t1 T$ _
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 G! }# w9 x# P. z5 l' _
  220.     {
    9 j, R3 h+ A! d
  221.       dwTotalFiles=UpdateLocal.size();
    9 O5 v8 _5 E1 V
  222.       dwDownLoaded=0;4 [, [9 A- R5 ^2 k4 e" F
  223.       bSilentStep=FALSE;4 P* e: Z( }6 k: n3 k' \+ n  s  A/ ]
  224.       bCompressed=TRUE;
    3 {% C6 F5 E+ c* u
  225.       strExtLocal.Empty();! x$ u: \9 N, F9 r
  226.       strFullName=(*i).second;6 ?: k3 a/ f0 \4 H# G
  227.       dwProgramState=AP_CONNECT;: ~$ ?4 N. u, l6 a1 x+ a6 E  m
  228.       return TRUE;
    ; z4 w# t5 i4 ?
  229.     }
    9 r: ?* y6 L. s3 x1 V: a, y5 m# u0 e
  230.   }
    1 ~3 P5 Y/ |( X! z
  231.   else if(bRestartUpdater==FALSE)
    6 X8 P7 K2 Y0 b
  232.   {" J4 l! ^* w2 Q. F% a
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())$ K# z9 y- b' v: c1 n9 A
  234.     {
    . @( F# R7 }6 t6 f4 l& i$ ~
  235.       file=(*p).second;
    * L$ Z( I8 |9 }
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())2 K% W# m0 `- i  L9 x
  237.       {
    " _8 \# f% J: D. l
  238.         olds=(*p).second;
    * L# d1 Z+ \& c, v  C% B
  239.         olds->vers=file->vers;
    0 u' ]# c+ [1 _: T0 K2 B5 z2 U
  240.       }
    - N# t- Y  H5 Y! \* ^* X' P
  241.       else+ K8 u. N8 A9 V4 [
  242.       {
    " Q# z/ d- {+ a7 b: [- c
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 u/ Y7 h* k, h- [7 f3 p
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    + L$ G& T0 i$ W5 c+ u9 A
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    8 [5 x  K) j+ b0 h
  246.       }
    7 }' j# Z+ n* m& G; b* H6 n  e/ u; Y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ! g: A8 g$ g# \' X. v
  248.       sprintf(filename,"(%s)",file->file);
    5 M2 z* p% W; u+ w! E- i
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 A9 S, L. j7 V2 I0 E8 l1 Y" _
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    0 F# O; l7 [" M: R9 R
  251.     }
    ; G3 i1 ]1 N* p$ J( [* _) g4 r8 O
  252.     dwCurrFile++;0 H3 O5 d# H$ ^: m. X" M
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& ]# h1 A, {/ Y$ E" j
  254.     {. x! R" ^4 N; F& m% d5 K
  255.       bSilentStep=FALSE;
    9 S" D7 X. w0 N( X( W: ?
  256.       bCompressed=TRUE;
    , p# ?7 p0 U/ t! i; U  k1 G
  257.       strExtLocal.Empty();
    ' C+ i( @2 s" O
  258.       strFullName=(*i).second;6 X" R! P3 |3 V; c; G- h
  259.       dwProgramState=AP_CONNECT;( V( @3 @) h8 H1 E
  260.       return TRUE;
    " R$ M: r1 Z3 x3 i
  261.     }
    * Q# ~# ]  P- }- S  Z! {
  262.     if(!bRestartUpdater), H/ r/ L4 F6 j# _8 f
  263.     {
    * b/ {0 q5 x4 q! Z# `( h
  264.       int iCurrSize,iFileSize;
    8 m4 E9 g* y2 ]
  265.       iCurrSize=0;
    1 K$ n' w5 m% W, c3 j( R6 e
  266.       iFileSize=UpdateList2.size();' m6 V# v) g- q+ O/ D9 Z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");8 n+ P7 y$ }- z" O
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");' i+ Z" b4 Q3 b8 v' s; k- G% i
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ' F. [* E2 w3 T7 T8 u4 [
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! g6 `  B. i% F" g
  271.       Fclearf(".\\update.dat");& D% B0 h, G& X" F2 L
  272.       Fprintf(".\\update.dat","Bloodyf\n");- |. i! |# \1 n! I  o! V
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) d* \* t+ K0 g! e! F
  274.       {1 o% ?+ ~8 t: I, ]+ \0 X6 Q: ^2 ~+ s
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()): ?7 l. b' w$ r/ N, q- Z
  276.         {! v  h/ k4 `, H4 }+ t8 C/ u
  277.           file=(*p).second;
    & Y5 t5 N; Z! }4 p+ o( n) Z  T2 Z
  278.           sprintf(filename,"(%s)",file->file);4 q2 C$ X6 H+ ?4 v) |% [; c
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / ]# e: ~' e+ [4 `
  280.           iCurrSize++;# |1 j0 Q* ?: g6 f1 t2 F& a
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));1 T% q' l" Z0 N. c
  282.         }
    7 ^" z' |2 y( R# E/ v; s& l
  283.       }( Z/ o7 e. ?% z( j2 k. l/ M7 o4 f3 l- w
  284.       unlink(".\\update.txt");! [. X0 n6 B' p
  285.       unlink(".\\update.tmp");
    3 h. C) m# d5 K; j" E
  286.       Fclearf(".\\checkversion.dat");) V4 |7 c' m& S" O4 t
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);( K% ^6 A3 t# n
  288.       if(UpdateLocal.size())' ^! s9 K: E& c+ m) P  G  {. A
  289.       {) z- f& N/ F1 [0 v, n7 f
  290.         UpdateLocal.clear();
    - f3 q" Q- w8 O+ b" W. e9 B6 l6 h7 ^
  291.       }
    ! h' A1 l' _! U/ S. b" z
  292.       if(UpdateFile3.size())$ J- _% y# S0 m" I  i
  293.       {% r7 V& i$ O# p/ j
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 g( |) y- B* h, Y
  295.         {
    ( o; ]2 x) ~, A/ B: U
  296.           file=(*p).second;
    , R9 o5 Y! f: y
  297.           free(file);1 H3 e/ T! m) c  c6 Y
  298.         }1 i4 a3 y9 p2 J; j: R  `
  299.         UpdateFile3.clear();
    3 {- t- v/ H! d
  300.         UpdateList3.clear();
    : w' k5 r! K  s& F3 }4 g8 Y
  301.       }
    5 \% p; }* D0 t* V& g
  302.       if(UpdateFile2.size())
    7 k( {6 b5 g1 s
  303.       {0 O, @% G$ U/ [! u' |2 G
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++): {1 |5 R3 r" C# C% E
  305.         {* ^" u8 y, Q! G1 F
  306.           file=(*p).second;
    $ z2 E; K( {7 u3 M
  307.           free(file);
    0 o! O% D+ ?+ O
  308.         }
    8 W8 H9 i/ Y5 o
  309.         UpdateFile2.clear();
    ' H0 g) W0 f" A3 f, E8 q
  310.         UpdateList2.clear();% d" I5 q1 @5 M8 a& F8 l$ ?
  311.       }
    / R* |/ |- Y- b1 d' \3 B" J
  312.       if(UpdateFile1.size())
    + k# O4 @* r) y. R
  313.       {7 n$ b: w- ]1 d7 G& `1 H; k! l
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . f; K$ o" T6 D" l4 X/ b
  315.         {1 ^$ V) Y0 p. _8 `( q; S# B2 j
  316.           file=(*p).second;
    0 |4 d4 z9 b; u; b" R, G" F9 p; s; i& v2 I
  317.           free(file);
    ' k7 X' k( j1 j, l+ L, l
  318.         }5 a1 Y3 P9 f6 s* ~0 V
  319.         UpdateFile1.clear();. P& q3 [) w/ e- f+ V( _
  320.         UpdateList1.clear();
    & K! M8 J0 k( J/ v5 R
  321.       }
    3 c8 }$ B9 P: \
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));: Q( }  V/ e! a0 C4 F
  323.     }5 q! o& a) R" g1 ]6 i; b. N" `* a
  324.   }, {- G. ^/ M- ~9 y3 S( p
  325.   return FALSE;
    % B+ H  R6 d; x  i# I  c6 G6 w: i9 p
  326. }
    8 `& A2 S8 K& {, z- S

  327. + u( B" T8 V' i  z2 g
  328. void CRevAppApp::ClearAll(void)6 m! J4 h2 H' b  d2 G5 _: f1 N
  329. {
    + b" d3 [$ ^" m7 t$ P
  330.   LPUPDATEFILE file;
    4 k3 l  Q7 d6 c5 N9 Y8 t. A
  331.   std::map<CString,LPUPDATEFILE>::iterator p;3 Q( F8 }; j7 b' J! V7 ~4 u
  332. # H, J! I* G5 j. O- x
  333.   if(UpdateLocal.size())
    7 J9 i* a/ C5 [" ?% O1 ?
  334.   {
    - V; |$ Y1 ^) _3 G
  335.     UpdateLocal.clear();6 g- d, Q: {9 ]3 }9 |$ z
  336.   }
    ! m2 R9 d& L5 u& c' [, g# v( x$ _" {
  337.   if(UpdateFile3.size())
    ! [1 w$ ^( _+ t! ?0 \$ X. v6 Y( q
  338.   {
      F- \( O  ]  F. v, g$ h5 j" u' \
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 @5 v% a$ g0 a% o3 e
  340.     {2 C* e: n* T8 O# G4 X
  341.       file=(*p).second;
    : m- J3 p2 M& _3 K
  342.       free(file);
    , k2 B, e4 ]- M) P& `+ e
  343.     }; f9 }4 e6 T/ W- w
  344.     UpdateFile3.clear();  B% Q  N5 v6 G" P
  345.     UpdateList3.clear();2 K. R6 U  g: y( R: u# ~
  346.   }9 o% V; y! b! i2 E9 T3 M/ @" X
  347.   if(UpdateFile2.size())
    6 r% ?' }  o7 F7 a3 ?6 F+ u
  348.   {  r8 ~2 K1 Q4 @2 D: Q4 v
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - D7 B' j) q' i4 h( z
  350.     {) f1 F+ e$ ~( T: r/ j- M3 Z
  351.       file=(*p).second;! Z) h2 @1 c  _1 W; e5 _
  352.       free(file);3 N$ D0 g0 L7 P, H
  353.     }
    $ ]# I/ l$ p7 w$ i" \
  354.     UpdateFile2.clear();. e' L: h( ~3 K6 K) D! B  R
  355.     UpdateList2.clear();8 q6 Z6 O  U7 p5 V6 z
  356.   }7 R4 N2 v; Y/ X# a7 c8 b7 h
  357.   if(UpdateFile1.size())
    6 J( N+ ^: H3 q7 k
  358.   {
    ; m, x" W. `+ Z& `
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& v) E3 k0 ?! d/ W) v9 Y0 \' E
  360.     {1 H- g" X5 v; H5 Q. s
  361.       file=(*p).second;
    . G- f2 _, j* N, y8 X2 U8 }
  362.       free(file);- R' n# @# V, [
  363.     }# L% E* ]7 y; T) u
  364.     UpdateFile1.clear();
    7 ?5 g# g$ J/ W1 h
  365.     UpdateList1.clear();8 S2 F: v1 G0 g; d! P
  366.   }
    7 Y  O" [# D& [% N- k5 n
  367. }  
    $ m- e  _# x. {5 @
  368.   
    2 P1 t6 ^8 I0 h0 j2 w1 ?
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 u$ b8 L" e! @& r
  370. {& o5 ?- e0 j' I& A" E
  371.   int c;
    2 V: W) l+ M" C5 X
  372.   LPUPDATEFILE file1,file2;
    3 G  w3 K5 Q  F% R
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;# y0 `$ r9 `+ Z3 Z" d/ [
  374.   std::list<CString>::iterator l;
    + W% s' N6 K1 l1 `  ~) c$ `9 |
  375. 2 U- e- o7 a7 W% ^8 p, F/ ]
  376.   UpdateLocal.clear();
    $ M& V$ F* z! b
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    & [8 ]) `) B+ q. o+ T$ h) t# M
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    8 W6 `" D* t2 Z( s& k
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);$ [! z9 ?6 ]- f# U: h
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);5 p' F: T2 ^7 c! s1 ^
  381.   if(UpdateFile3.size())
      w1 L7 i$ U$ j$ N
  382.   {
    1 N9 t( g& L0 F+ G
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)3 ~0 k" r# U! O# C) ?5 ?' P
  384.     {1 m& w2 P7 [+ E
  385.       file2=(LPUPDATEFILE)(*i).second;/ z" Q3 p. e  c/ U3 ~) ?' Z# l
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      f$ R+ v; ]7 |3 I) f7 J+ J
  387.       {( x2 [/ @% @+ x: K; y* v' a
  388.         file1=(LPUPDATEFILE)(*p).second;
    & ?+ T; j+ e# Z
  389.         file1->vers=file2->vers;' L8 K* [5 R& }% {$ h
  390.       }; S" l2 _6 S# ^2 R& ?6 g' l
  391.       else0 e! @! `+ q* y4 @) ~' _) S, d
  392.       {9 u0 S9 n% A$ V$ D% E6 y" T
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& Q$ s1 t5 ~0 a$ g5 j5 u) D) h
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! _9 p9 Q% [7 E/ N% x3 O% r
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ; L; i4 I' `2 x+ H4 Q3 Z
  396.       }2 w+ e3 [  p% Q1 v/ Y
  397.     }: ]. I6 p+ s4 _! q5 `) S; D
  398.   }+ {6 a( |% M& y, w$ M
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; Y! o3 ?% t. E5 `; ~" n' l
  400.   {7 I) }1 D. B. K9 E% T3 j/ G2 ^
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())' f) m) ]- }3 w3 h+ ~) |3 j" ^* Q
  402.     {4 s) z" H/ I+ @6 p
  403.       file2=(LPUPDATEFILE)(*i).second;
    1 n/ R5 q2 _/ H6 W" b# R
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 S* w0 O7 X8 @. K0 Z
  405.       {6 \2 a; X8 B) r) j$ v, K) v: C8 B
  406.         file1=(LPUPDATEFILE)(*p).second;
    $ W9 c# S5 C3 W0 X. S
  407.         if(file1->vers!=file2->vers)
    ! I& M3 I% i' w2 \3 A: ~
  408.         {% x" f4 Y, l$ j( W" w9 w
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 V5 l1 z0 @; P0 X: X
  410.           c++;4 |8 D7 L9 U; ~6 @7 G: _
  411.         }5 [2 y' T) X$ C# v
  412.       }
    1 m, i9 r  w2 r9 s1 v: _
  413.       else
    ! u3 X/ Z, v  ~, H
  414.       {
    & v6 x- ]4 e/ O/ ~/ F: V( B0 A
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 F  A! |9 u. u1 z- m
  416.         c++;" P2 l. p& ]4 `* n( f* i' f  d% _
  417.       }' Q) f+ J0 n" h3 f" S) w& L
  418.     }
    1 ?$ \! u' D; J5 |5 c& S
  419.   }& r% y. a- }* v& U# h# O
  420.   unlink(".\\DownLoad\\update.txt");5 b5 J9 |/ U% m
  421.   if(UpdateLocal.size()) return TRUE;
    1 H. M1 H) n" L, K2 d
  422.   else                   return FALSE;
    4 j, r; d, b  h* `! e& N, L
  423. }* N6 k  o: D$ o9 \- b; m9 |3 g* P" w$ l

  424. * ^) Y1 u& u+ q; q8 R, U/ a9 ]
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 {8 x* R+ {( y. A
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    , e  G, g. p4 @" S! {
  427. 2 G3 U; `; W  U* ^3 i8 t2 j
  428. $ C7 }5 Z- c: a4 B/ m4 {

  429. ) \7 o% |! F( ]8 w$ Q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    # t! T/ B5 ~/ G8 k8 I
  431. {- _1 v0 i; x1 n3 I4 b5 Y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    . v) A* u9 h, D1 x6 q3 O
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% P. b1 w2 a/ Q
  434.   {
      [; {" V% l* c9 [, o- ^
  435.     char szLanguage[50];9 S2 ?" i+ x, r9 J, \) }
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: I* C7 f" R$ _  ^
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + Z# s% T9 ?1 p# l8 j6 m/ q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;% y+ x1 p1 p. p9 b
  439.     else                                   m_iLanguage=ENGLISH;
    1 _9 O3 r6 m1 G9 I2 T( i
  440.     char szRegister[100];
    : K0 z$ v+ C3 Q+ f/ Y1 X* k
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 K" b; w' \: |( g( O1 R
  442.     strRegsName=szRegister;) M% l' X: j* t  [9 J2 f/ N
  443.     char szPatchURL[100];6 \' v" T1 W  A/ _/ S1 a
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . Z) G$ j: r1 ^9 @; Q, Y, c
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + n( B. k# e5 v3 r2 U' }+ w9 @
  446.   }
    : |/ A9 W! }- e( _( h# V( O5 m5 s
  447.   else0 T$ M/ c/ ], j) C9 G8 g
  448.   {
    % Q$ i: ]+ q1 G
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 G+ m, a- J$ r  a. S: b+ U
  450.     strRegsName=DEFAULT_REG_URL;  K3 L, [5 Z- z/ g4 g
  451.   }/ `" K8 B9 N9 n$ I
  452.   if(GetFileAttributes("hosts.ini")!=-1)) [! M# b5 ^' |) Y: }3 m
  453.   {$ r+ M' k$ Z! O0 h' o) e
  454.     char szIP[50];8 i( n  ?$ R) d8 o2 F8 L
  455.     char szDIR[300];
    * q6 `5 V7 W4 o  E2 U9 ?9 ~
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    & y7 T- L0 F, H' ^, J9 V1 K
  457.     {
    ) P1 q- y; f: z  n$ W+ u
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");9 o7 ~. R: i/ L( z8 c
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");2 {9 F; o& A! c' c% `
  460.       strHostName=szIP;+ }# m& t& n9 R0 v+ ~& a1 D
  461.       strHostPath.Format("/%s",szDIR);
    * U, o! g/ Z. p- u% o1 c
  462.     }
    ) L4 z. z6 y# x
  463.     else
    3 i. D+ D1 ^; D/ v
  464.     {
    # e1 C+ i3 F5 i. Y8 }+ H
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- i5 [- ?! q& X/ J7 h
  466.       {
    ; Q! o! A+ R' o! E& a  N
  467.         char szLanguage[50];! i7 r! W0 s+ M; l/ l
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 n+ B* P  `. u) \4 T
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ i! A6 u& `* s5 K% e  O
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, W7 F. W! {7 D  W; y
  471.         else                                   m_iLanguage=ENGLISH;
    ; w; R* b$ W  f2 ]: y
  472.         char szRegister[100];
    - j2 B" w. A5 g5 m0 q' p
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) @- q5 ]# ]6 t- Y9 n% ]
  474.         strRegsName=szRegister;
    % M+ D: d& v4 H* R  w3 W' |7 z
  475.         char szPatchURL[100];
    & M* Z/ G6 y& I: ]
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 Z) j1 k: }( o3 _. y; V( j
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 o+ n- b+ u9 S- T5 o% Y
  478.       }
    ) T& K* t) P8 a# p$ N
  479.       else2 P: ]4 _+ v% G# ~
  480.       {
    # |- o! J1 g* d2 E
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' P2 [2 `, V3 I" `  T3 r) I+ U' E! \' A
  482.         strRegsName=DEFAULT_REG_URL;
    ; r8 I# D* t  J( a! i- @# u/ m8 x" V
  483.       }6 T$ W; m7 Y; L4 M- a, @$ q5 r" p  H
  484.     }6 Y, o, p! Z" Z$ y1 W
  485.   }
    . w8 u" V9 ]0 \( }' ?
  486.   return true;! x* |  Y8 N( \5 |. i* S
  487. }
    + u+ _3 q3 u/ T( ]

  488. 6 u6 [$ m7 ]% D4 O
  489. #include ".\ZLib\unzip.h"
    0 S, d2 l0 m. b8 S0 I, u7 B$ G3 K; s
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);- s2 Y- @* B. P3 z) B  h
  491. /////////////////////////////////////////////////////////////////////////////
    6 n4 |( G, H/ j/ Y
  492. // CRevAppApp initialization4 H  a4 _1 N; K9 Y* C+ l/ J( L. u

  493. / J$ H7 e+ @( K
  494. BOOL CRevAppApp::InitInstance()% w0 ]8 U3 ]6 {$ T* x
  495. {
    ; s4 S2 R0 W' q9 b' D/ s
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];1 _: q; V) C  s

  497. - Y5 s# j/ w2 z" x& ]
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    2 {) }& m. e. A4 O
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)); _! j  A! k! `- L/ L
  500.   {- y/ W# w: \- V3 [8 P0 I, R
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");9 M) _' _4 f  ^+ w( W
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ! {. h! |* Y; k+ a# O  b
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ' D$ V8 f# G0 l; m. `) s
  504.     {/ `) l( o3 d. F) g: k5 a& d
  505.       strcpy(szPath,szPathTarget);$ x: x' u9 Y3 J
  506.       SetCurrentDirectory(szPath);
    % X, ?: W" g* r+ x" P3 j: O6 |. C
  507.     }! |& d1 X+ F' A0 m
  508.   }
    . Z, o: V8 q0 \7 t; I
  509. #ifdef _DEBUG) T- P2 x4 T) v! A0 U
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 Q0 g/ K# C* Z! l# w; |$ Z8 Q
  511. #else6 Q' J! L0 D2 b. H6 B
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 r; ?. n, Q- l! I  t
  513. #endif  J2 f8 q- M/ C$ O* N* @
  514.   {1 p; t: h. h5 L/ ]. G, ]7 z2 Z
  515.     char tempFileName[MAX_PATH];) n2 y( ~) W3 e7 {0 _, u
  516.     strcpy(tempFileName,szPathSource);
    ( z" {$ J2 k# k+ }1 V* i  j$ A
  517.     tempFileName[strlen(szPathSource)-12]=0;1 c/ A' g% A8 X+ S- }
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    , c7 `# f7 C2 m
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);* [  F/ R4 B0 o( O
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);3 U  U& _0 T( d2 b
  521.     return TRUE;* C! ]6 t) M/ _! t9 W
  522.   }
    # g: j9 w; _" Q1 w7 \5 k8 l
  523.   // Nuke 0118: Delete run.exe
    0 F9 o6 m, c7 h9 \. ?
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );* c( M! S; d' T" O, ~/ H
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");! d8 U; n0 _: w# ?
  526.   if(!ReadCfgFile("Config.ini"))
    # m% c3 u( y5 ]
  527.   {7 ?- r" r/ c" [* T
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    7 p- p6 a0 Z; |- b5 w
  529.     return TRUE;5 I+ J2 Q9 D) G" I' ]9 b) V8 S
  530.   }: j# o/ e4 K. Y$ }4 z6 S. g
  531.   HANDLE mutex;9 A! s7 H: B3 {
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")). l) ]' R# T) O2 M( O# T2 @
  533.   {
    * t' _: E. M: g4 p1 X" ], A& i& R6 W; D
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)) H: e, ?! t$ R- u
  535.     {+ d# T+ N7 L7 D, @! j0 R4 n( y
  536.       CloseHandle(mutex);# S- u3 H- Y: M- ?
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);- `2 L6 m8 o6 |3 [) M3 X/ @
  538.       return TRUE;/ R( E" B; x1 _* A4 |! P
  539.     }
    9 W; s- U/ a+ T1 i! Y0 g: h* n/ r0 @
  540.   }  - a, h& L* y  @$ f# }
  541.   CloseHandle(mutex);
    7 X) u+ p2 v# s8 h& V) L. b
  542. / s! X: ^) f2 e
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    9 q# o7 w- G- Y4 k. X5 l& c: M

  544. 7 k# }: N, f2 _# J' c5 z
  545.         AfxEnableControlContainer();
    9 D7 ?8 @0 ?6 ~! o) x
  546. 1 Z& X! M4 d8 ~9 g8 C
  547.   bCanUpdate=FALSE;, o+ G9 X( B9 Z4 k0 w
  548.   dwStartUpSteps=1;
    0 J* N% v# P; O( e: Z/ |
  549.   dwProgramState=AP_NOTHING;5 {4 O& M  p, u: C: D, y0 Z
  550. 9 ~& k! C% D2 ~! `+ n' D, U7 u- N
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);! B- R1 n/ A% e9 a

  552. $ ]) D$ g: O) g: k3 v
  553.         // Standard initialization
    2 @! K3 ]6 q2 k+ G, b
  554.         // If you are not using these features and wish to reduce the size
    ( w6 X1 e1 u: }- s
  555.         //  of your final executable, you should remove from the following' p# `* o* Q0 j! T0 F" ?" s, c
  556.         //  the specific initialization routines you do not need.9 K6 G6 Y. c! N$ C% x* D
  557. 0 N  W) }5 {3 I8 U
  558. #ifdef _AFXDLL
    + _( z! ^) P) w& C2 }" r) t6 x) P
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL: Y$ J) b; ^5 v$ X. Z& a
  560. #else: M6 O3 ?9 \* ^! C2 S
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ) y/ M  C  z' @
  562. #endif
      z; ]% Q7 n; z+ S$ @. t# _
  563. % u6 B2 e- ^' v5 N. u
  564.   dlg=new CRevAppDlg;
    . J# c% }& w9 O; D, M
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    1 a1 A& |/ g+ I. j
  566.   dlg->ShowWindow(SW_SHOWNORMAL);. M* r7 ~/ X$ Z& B% `
  567.   m_pMainWnd=dlg;1 \0 ]& B! f+ Z' h! Q
  568. & r  n2 t, u8 z: a' O, q
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);# S7 @& }( g) h/ O

  570. / ^1 f4 j/ P7 B& Y
  571. //  GdiplusStartupInput gdiplusStartupInput;
      M" I6 T' d! w3 q- P
  572. //  ULONG_PTR gdiplusToken;$ T) i( B  D! I/ W, t
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    # y% p' J8 c' h( [3 G, b, n

  574. , x8 v; Q9 z* M, \6 z1 G% R
  575. //        CRevAppDlg dlg;
    1 `, z2 h3 k: Q
  576. //        int nResponse = dlg.DoModal();' e* h0 K7 p0 L+ W+ }
  577. //        if (nResponse == IDOK)
    . J. l* l% x7 H
  578. //        {
    ) o  i! m( G! |% g" t
  579. //                // TODO: Place code here to handle when the dialog is2 s- ~% `6 W0 m: ?8 D0 E; B
  580. //                //  dismissed with OK
    8 u$ j* C1 C, u, W6 e9 m
  581. //        }" @: O- w2 @3 G
  582. //        else if (nResponse == IDCANCEL)
    5 W+ W/ I0 w+ m" u9 s7 I) e9 k
  583. //        {$ V6 w) Y; Y) g3 r) E. e
  584. //                // TODO: Place code here to handle when the dialog is9 c+ Y7 e! ]/ H* F0 E6 d& Y
  585. //                //  dismissed with Cancel
    6 R  l* x7 r5 |3 l- L# k
  586. //        }
    8 F2 ^8 i; W1 F$ U7 {+ Q% [6 e

  587. ! ]2 g& J& @4 C4 @$ l* k% h
  588.         // Since the dialog has been closed, return FALSE so that we exit the1 B7 _: S; l: g: D, _4 f% n  [6 `
  589.         //  application, rather than start the application's message pump., [2 M5 r/ B8 r5 c  M1 T8 b9 G
  590.         return TRUE;
    0 @$ {# y+ i+ c' `( c3 X
  591. }( H% a' E# E. t, r5 Q

  592. , T6 V# N# g8 R% `  I( I
  593. char *CRevAppApp::strtok3(char *pSource,char *token): m0 X! p* Y- D2 E5 w1 L% W( G
  594. {
    1 o7 I/ H- ^- I6 x7 g& x% q' Q9 X
  595.   int i;
    8 Y, E) o# ], M) s# p2 t
  596.   char *szRet;7 w: f6 L( Z/ ]" F+ [

  597. & y- k" W$ Z% E
  598.   if(pSource) { itoken=0; sztoken=pSource; }' [/ \+ l  g) P$ @/ D  R
  599.   if(sztoken)
      c* Y) m# q. Z/ T7 K5 t3 _
  600.   {
    1 t+ j1 Z' S/ _( @+ j
  601.     szRet=&sztoken[itoken];  u5 ^0 ]% v  @) u
  602.     while(sztoken[itoken])/ E" ]% i, w% E$ b& w
  603.     {
    6 E6 P3 ~- o& k! t4 W$ e9 `
  604.       for(i=0;i<(int)strlen(token);i++)
    ; c! L9 ?1 S" p1 ~
  605.       {
    : K9 t. u% f0 u- ^' m
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])2 S4 [& I$ [7 M% ?4 Z; M5 `" h) i
  607.         {
    / d! |* l* r6 ]7 `- Y; O1 z
  608.           sztoken[itoken++]=0;
    " X( C% q$ ~, t! Q( _: o3 F
  609.           sztoken[itoken++]=0;
    + l* f3 u  X% s
  610.           return szRet;
    $ J9 b2 |( K" g5 M# M/ n* S
  611.         }
    4 S4 `; ^, X* |$ q+ c% B; r0 r9 V
  612.       }
    4 F$ B5 ?. l% L3 ?. f( s
  613.       itoken++;
    : P' R" b7 ?" d0 [2 \
  614.     }+ w% v9 G+ x# Q5 X/ @, {% B
  615.   }! ^0 Q- H" m( ?  g: G; K
  616.   return NULL;+ T: {" D9 p; |! ]2 _
  617. }
    1 A- s3 ~4 ^/ J$ _& p4 _- w
  618. ) ?9 H( r9 n9 V6 H- a' N* l/ j3 u
  619. void ProcessProc(long Total,long Current): n3 K; ~, V/ S+ z5 h- t& _
  620. {) Z' z5 H" a) ?* }9 q- Z
  621.         MSG msg;
    , e" s4 l; R; N* ]
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " w0 h* D9 U' Q# u0 H: d
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    0 }% P# v  U7 p, j
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ( ?/ P* L: D4 @+ a9 C! F
  625.         {
    : S& `" m* v* p) J$ r
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - A7 x" x2 E# g
  627.                 {
    7 _/ L* a" q3 Y$ P0 L7 H
  628.                         return;/ T: r) @. M, E) h, ]
  629.                 }
    ; y+ w; i( `9 R5 x, C7 Q0 b( S; R
  630.                 TranslateMessage(&msg);
    % V8 [0 E( ]( A' @1 a: A
  631.                 DispatchMessage(&msg);
    2 L0 k: X1 ~, _
  632.         }        4 h. _5 v# q" d# p
  633. }! j7 F0 V# [0 g6 |
  634. - \8 [, O) U9 e: _- b- l) y
  635. BOOL bFirstChar=TRUE;; H& a6 ?- ~# K- ]2 M) R4 s
  636. / B# e  [1 k4 r, {
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ; F2 E7 a2 ]3 q' Q. q; J
  638. {& z) j4 l, w( @! |' j6 k+ W8 y
  639.         // TODO: Add your specialized code here and/or call the base class$ s0 Q% R6 R( q+ q1 ]
  640.   switch(dwProgramState)
    ) r1 w% H8 z# D7 y* |
  641.   {1 n- Q9 _8 i0 }
  642.   case AP_NOTHING:% f. q1 B- Q: ?& ]7 B$ [' w/ Z
  643.     switch(dwStartUpSteps)
    2 n' M- `3 g* A7 e
  644.     {
    & v4 ]7 R/ y, J# v# l( R1 D
  645.     case 1:- v) X+ `. i. i7 U& X/ f7 i) k
  646.       {
    : F+ W! p8 u8 Z: y4 P
  647.         int i;
    4 m& k! Y5 g& ^3 X  S. n
  648.         CDC *pCDC=dlg->GetDC();
    ; Q" [6 n- V/ x, e, r2 h( y
  649.         HDC hdcwnd=pCDC->m_hDC;
    / o! f2 T; [3 @7 }9 c5 F! m
  650. //        Graphics graphics(hdcwnd);3 ^$ J* z6 u- u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    3 R7 E2 b" n7 l% u* v# @
  652. //        INT iWidth=bitmap.GetWidth();
    . N: U$ s& t% }7 ?5 j: H! o8 b/ H0 R
  653. //        INT iHeight=bitmap.GetHeight();
    / ^4 s* r% w( ^4 t$ o
  654. //        Color color,colorTemp;' i# m4 g2 y* K" [, _7 \% Q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    * U( z$ ~" N2 c- }* x
  656. //        {
    6 ?6 ?# g  [( X# ?  n3 F5 t6 V
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++); C3 g+ U4 o6 L! c. E, x* M
  658. //          {! n, k: c' M. Y- T/ s
  659. //            bitmap.GetPixel(iColumn,iRow,&color);+ ^! F! Z; v% [3 U8 f4 }4 S
  660. //            colorTemp.SetValue(color.MakeARGB(: i8 k9 `" T1 C; Z9 r- }
  661. //              (BYTE)(255*iColumn/iWidth),5 M+ S3 Y3 p, Q, F$ S* L; I4 V. _
  662. //              color.GetRed(),
    + ~  s8 z: A* F* x* \5 p
  663. //              color.GetGreen()," V+ `3 A( G0 x) z* v4 L9 `+ \
  664. //              color.GetBlue()));
    0 X+ U$ m  X& N9 f8 x( {
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    * {2 E! w( [+ t
  666. //          }
    * n+ ^& r! L1 m; Q' E; @/ d
  667. //        }
    ( R( g: u( k  G8 r* f+ |
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    * V: @0 N8 z0 f3 ?9 y3 c
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; ^/ y! G5 e9 I$ \
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");- Y/ Z3 Q# s7 H& a; O( A( L; x
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ M3 A/ P; u; E" }. M
  672.         for(i=0;i<240;i+=8)
    4 |% Y$ J% [9 {6 U$ G6 G
  673.         {1 L, k" [; c! t3 j  U$ M% ?
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! o' y  e5 I! @4 t. @
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " e- [# ^6 G  ]$ B5 e# Q# V- o
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' m/ a/ d' S$ a+ B
  677.           Sleep(33);
    6 U0 e+ @. a- F' t6 I( \
  678.         }$ {! g0 g" n& M9 L: f9 h
  679.         Sleep(1000);  B+ r* N# k8 P' [, O7 o
  680.         for(i=240;i>0;i-=8)" _3 ?" W, {5 `5 d& f- w
  681.         {9 `) o6 h9 f1 Q. h0 \& c+ Z$ @7 m
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 _( y: ^7 B* B# u
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% g, ]: ~: q- V4 `9 H
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* Y& }6 K' u1 l0 ?; T+ \
  685.           Sleep(33);4 f! A6 v+ W  H1 {( W" b4 F
  686.         }+ U8 w5 |; [$ N1 b  y7 @. Q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);- M( O% D  Z+ k: V
  688.         dlg->ReleaseDC(pCDC);5 {- o( T/ o; w
  689.         DeleteDC(hdctar);7 [. b7 w; t1 h2 Q2 w0 o8 p, h
  690.         DeleteDC(hdcsrc);& N0 a% O) F) }" P# X3 O
  691.         DeleteDC(hdcorg);
    ) w3 H, c' h% G/ m9 K
  692.       }9 E! S8 k( I6 ?9 m4 p* p. l
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
      a* x( Z' u( z  [# L0 @6 ~/ r/ |
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ( p* B1 ]4 y  M# u8 j
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    7 }+ x/ y' P4 L: n2 r9 ?
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");7 _5 u+ k/ H) \
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 r' Q7 m- I9 l' Y0 g
  698.       if(!Dn.Connected())* e- @3 k% I, C8 Y/ U2 b( Q
  699.       {
    ) ?7 I5 V$ _. T, H4 z! P4 }3 K
  700.         dwTotalFiles=1;, ^7 B. N4 J- X, S5 f- |& e
  701.         dwDownLoaded=0;
    & I3 m& K/ n/ q
  702.         bSilentStep=TRUE;
    7 u5 `" `. P9 }
  703.         bCompressed=FALSE;
    / I/ n/ @8 j/ O5 G- n+ c  ?
  704.         strExtLocal.Empty();
    9 G' p' _, \' v- c( |! |
  705.         strFullName="readme.txt";
      Z6 [+ `8 D9 g  {
  706.         dwProgramState=AP_CONNECT;' S- I. B3 f3 G, c$ v; x
  707.       }
    ( j4 z. E; c0 b2 z4 {9 ?, Q' F$ j
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ' \) |& n: f4 e1 i% M; l% x. `+ I
  709.       dwStartUpSteps=2;
    2 Y- x, d1 f0 \4 H; [5 y2 a
  710.       break;, c9 J1 ]7 Y6 h$ ]9 B
  711.     case 2:2 [* t" E: K* A# c
  712.       {
    & P' k8 v7 a+ h3 @6 L! I" T: [
  713.         int iEOF;
    # \7 b2 T/ n# K0 k; k
  714.         FILE *fp;
    & q$ X/ t% |$ _
  715.         char szString[512];5 Y) z% g8 i. r( N
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    % y* o. x3 R1 r3 J8 t& }+ F3 i1 t
  717.         if(fp)
    . r8 z& ~6 B6 _4 D7 j1 f2 P0 V
  718.         {
    0 c6 S! g. d2 T
  719.           do7 |% r. {: s# k/ v
  720.           {
    # ]9 A; `+ P* V9 a( f  o3 r$ C# x! c
  721.             iEOF=fscanf(fp,"%s",szString);9 J: ^$ _7 W3 U9 n* e
  722.             if(strlen(szString))5 k  z; I1 N" m* f/ {4 ?
  723.             {0 d* @. T3 p) U/ A: ^$ }
  724.               if(bFirstChar)
    7 J+ n9 b+ R3 }; ^. i( s1 X8 b
  725.               {
    ' ^% j: z7 j) j! J0 @
  726.                 bFirstChar=FALSE;
    5 w0 z* l* h6 E  {. l: H
  727.                 bConnectIsBig5=FALSE;, U2 @" w$ t9 L) T
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;% V* m4 z' w+ p3 ]# T
  729.               }( m* ^2 a* K9 C& {+ D0 m5 P
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    * p3 ?+ {, r- j. V
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    * H- B9 l8 \+ E! O' r$ L
  732.               dlg->m_ListText.AddString(szString);
    # ^9 Q7 `3 l: n# p  ?+ J8 a* F
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ T( K, u& _$ {4 f' X; F. w
  734.               *szString=0;
    " F7 G( u3 z8 q! R1 d5 a$ @4 c3 q
  735.             }- \5 V: G# h5 U. h6 w
  736.           } while(iEOF!=EOF);
    / [+ L; R4 v& o* A
  737.           fclose(fp);
    ( C3 `4 D- o1 K: C5 ^
  738.           unlink(".\\DownLoad\\readme.txt");
    9 t- \# q3 G$ ^2 X$ Q0 t: A8 l
  739.           dwStartUpSteps=3;5 I8 \; c! y/ T/ w. U) c
  740.         }/ ]1 _" }, |4 m/ P
  741.       }
      t7 J* d% _+ r! Y9 B+ h' B
  742.       break;
    - z3 ?- G& T# {7 u0 u9 T; b6 r% y
  743.     case 3:+ n6 y" U: j) D# s- _
  744.       if(!Dn.Connected())
    1 w+ A+ b# ~; n; j
  745.       {
    ) x/ G" X4 _+ h. D. e
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 [6 {6 V1 U; \) t% ^/ u
  747.         dwTotalFiles=1;
    9 G' }5 n! U$ w
  748.         dwDownLoaded=0;
    3 s+ a: n& `! J; R& b4 ?; ?) V
  749.         bSilentStep=TRUE;# _6 N- j9 ^; a1 G& v
  750.         bCompressed=FALSE;
    $ f* V; m/ p) M% |" s+ U% Z
  751.         strExtLocal.Empty();
    2 m. ]0 I2 V9 i9 Z, T; `  K
  752.         strFullName="checkversion.txt";' z) \8 Y% L7 I7 ]. Y4 q: L3 C
  753.         dwProgramState=AP_CONNECT;
    $ b2 c2 }* c4 r! @1 P5 C: O6 t
  754.       }
    , e/ O$ X, p& ?( k6 A/ L: o
  755.       dwStartUpSteps=4;9 W9 N- l: h2 M" C- ^. d) ]7 v
  756.       break;
    9 B4 a0 I9 M$ Y
  757.     case 4:
    2 [3 U2 Z6 F/ P( s
  758.       {- U6 T; d5 B( j
  759.         FILE *fp;8 ^5 J3 o! L( {5 ^7 I$ l( c
  760.         char szString1[128];" t- Q6 B# K; n1 d7 I
  761.         char szString2[128];  S$ X# \) }2 A% n
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    6 Z5 s, Y3 t" V& T( H6 z4 z) q
  763.         if(fp)) z2 `7 w- f# T: M6 j1 Z3 X
  764.         {6 y6 W+ C4 E( u6 N- T+ f" s
  765.           fscanf(fp,"%s",szString1);
    . ~+ G' S* ?$ _" o, o
  766.           fclose(fp);
    4 S6 G; I4 l. i6 N
  767.           fCheckVersion=atof(szString1);- w! @1 p% q5 ]9 c3 f! p& l' O
  768.           fp=fopen(".\\checkversion.dat","r");
    & Z. B7 H, v0 z/ N4 H( E" s. n
  769.           if(fp)
    7 A9 l. K3 _4 T" Z
  770.           {
    / T3 @+ U' i, e4 D8 s
  771.             fscanf(fp,"%s",szString2);
    4 A7 s7 k1 c  e) I/ G. X3 k
  772.             fclose(fp);
    $ l- Q8 E- A" m- n6 I' j
  773.             if(atof(szString1)!=atof(szString2))
    ) Y  J- x* R6 S2 J6 B& R" A
  774.             {( b+ a4 m- {+ M& b
  775.               if(!Dn.Connected())7 R/ o' v$ D8 l( U/ f# f; a
  776.               {
    & W1 p1 S( X, h
  777.                 bFirstUpdate=TRUE;5 l  t. ^; t2 l1 h
  778.                 dwTotalFiles=1;
    4 i7 `% Y  }) z  H& o( H$ g
  779.                 dwDownLoaded=0;
    + b4 v  E" {- v$ T' X8 ?7 G
  780.                 bSilentStep=FALSE;
    ( h8 c  {8 `& f! a8 f$ o: ?
  781.                 bCompressed=TRUE;3 |  {4 T! R' L, D
  782.                 strExtLocal=".\\DownLoad\";
    5 R) Q; x% t  C
  783.                 strFullName="update.txt";
    6 Z4 B; s% B) x  N' M( E
  784.                 dwProgramState=AP_CONNECT;
    ) P% w: _+ x$ O% e. b6 b
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! |  }( j! _- l. G
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) Y/ l$ U" x( ~) t) l6 x& W" P* s
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");( e( Y# l. N8 Y* X6 e/ A

  788. 1 g# e6 j& X* `6 {
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- ]. ?5 Y) ~+ v4 Z. I
  790.                 unlink(".\\DownLoad\\checkversion.txt");1 t2 p. g9 ~- U# N7 r# f; Z
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)# X, R$ e' n( M# h+ V0 R
  792.                 {8 L$ Z* f  |/ |" Z9 t1 M$ u4 f5 y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");, J" t* x1 h: ?
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* @3 B3 R) q8 R2 y8 o& i4 n
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    % w  e& s3 c# n, ^) G
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 W/ v5 z6 b& Z. s

  797. : s8 h8 o! q- k
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 F- y# ~+ j$ t. t# ^6 ]- X6 w
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      s* u% H, R! N! x9 u# u7 z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    # }. M) }* {% T; e- k! b9 K& d: S
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# Z5 Z; }' O- ^  o
  802.                 }4 _/ n2 t% _4 m) s% \  s- W6 ]
  803.                 dwStartUpSteps=5;1 ]9 W' ?+ y2 u0 U: o" }9 M0 L
  804.               }
    9 e0 w- O0 n0 f$ Q8 n+ c+ i
  805.             }
    ( D# F8 ?: `* k! v
  806.             else
    . Z1 b/ G! [3 F) L; j
  807.             {
    3 W' |/ y) G/ \2 i. G7 K" ^
  808.               unlink(".\\DownLoad\\checkversion.txt");3 ?% Y  O& }! |$ x: T( R7 ^7 V
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    9 O6 {4 N0 x% c
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");2 Y6 P: Z% k/ V- C- r- C
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");# [+ C4 O' a; c0 {& w( w

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

! I' w4 q) _' R9 O+ o! U1 _5 a' i1 @2 F  W3 I; D+ [* O, o

評分

參與人數 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客服返回頂部