CSUpdate.exe源代码

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

) U7 H! h' Z( O! F( i1 P$ _
  1. / RevApp.cpp : Defines the class behaviors for the application.
      N  j3 c4 s+ Z7 {/ h
  2. //$ G- L! ^! K9 H
  3. / s* z' `4 x. |- \
  4. #include "stdafx.h"4 {5 l  r4 P' x6 m2 S& d
  5. - W& N( l- j6 ^+ G
  6. //#define UNICODE
    ! m! y' ?- s( Q( E0 v. W# P. V! T
  7. //#include <gdiplus.h>
    & [+ A; p7 ?/ Q9 g+ A9 \0 g
  8. //using namespace Gdiplus;. X0 C. w# U0 E0 N
  9. $ R& n( R1 O* L
  10. #include "RevApp.h"! S5 u/ ~7 d" ~5 f9 u% V
  11. #include "RevAppDlg.h"
    ) l  o, R& H- [1 h$ [; v' O; S

  12. ; m. K) p, ^2 s/ c! x) H0 }/ f$ T
  13. #pragma warning(disable:4786)
    ) [( r8 m# G# V6 a) c
  14. #include <map>" y/ T: o& d* f2 N, j. Y
  15. #include <list>
    1 Y( g6 Q2 D9 l4 P( _  @4 `
  16. #include <direct.h># y8 X# ~) M' e& M! N

  17. + {4 [' n5 x% Q7 F
  18. #ifdef _DEBUG
    8 G1 {% _" j+ f
  19. #define new DEBUG_NEW4 q4 ]; r7 W& k% b
  20. #undef THIS_FILE6 _6 j$ h8 n2 K# k: V; l" l  z
  21. static char THIS_FILE[] = __FILE__;
      x" o1 {0 a% `# Y1 _
  22. #endif
    * g$ [: m! m" j4 A
  23. #include "SkinResDef.h": h% _% y% z6 j, ?) G
  24. #include "ChangeBG.h") g$ h' Q6 x4 |$ \8 i4 p- p
  25. #include "AFXINET.H"3 ]. ^' [+ Y0 N4 K, V* K  F
  26.   _  n$ R1 P6 K% D0 [3 B
  27. #define TRADITIONAL_CHINESE 0
    * c& R. ]. U/ X' L  s$ V
  28. #define SIMPLIFY_CHINESE 18 M5 G! l% t4 U' z; |# F" t* w
  29. #define ENGLISH 2
    - G0 R  ~7 M/ e0 Q
  30. int m_iLanguage = ENGLISH;
    : O0 ?5 {% W( q( u4 E2 \
  31. /////////////////////////////////////////////////////////////////////////////5 ?* o8 {1 U3 F+ p) o
  32. // CRevAppApp
    ! `/ e. M; S" k3 b/ R1 I) w
  33. ' Y, B# C( H. l3 a; ?; G
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ! g3 s# b; s5 |' ~
  35.         //{{AFX_MSG_MAP(CRevAppApp)  |8 d8 b4 e8 A/ q  ^
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    1 j. R# G; G6 ~
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    3 m( x7 g/ C' Z$ Y( y) ^" U
  38.         //}}AFX_MSG7 ^. q" T8 d% y8 Y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    5 E3 S/ X' j" d) }
  40. END_MESSAGE_MAP()* u% j! @. @# o- W; b% `% R8 [
  41. ( N4 w. [5 b9 m$ E
  42. /////////////////////////////////////////////////////////////////////////////; v: t2 i5 k3 \& T
  43. // CRevAppApp construction, m8 Z2 a0 A, q. p) y
  44. 2 [1 {  M4 Q0 n  n8 x9 G' s
  45. CRevAppApp::CRevAppApp()
      v. ^4 X! Z" Z6 R6 C
  46. {! K6 ?# x6 b3 O; Q- V
  47.         // TODO: add construction code here,8 A  B* ?$ d, d5 K
  48.         // Place all significant initialization in InitInstance) Q3 H8 X+ X6 ^5 c" n( Q9 u. Y
  49.   bDisplayIsBig5=FALSE;
    8 {6 l5 o+ |" I9 N' d: ~
  50.   bRestartUpdater=FALSE;
    6 X7 t' g1 V! y2 S9 b: O
  51.   bFinishUpdated=FALSE;; V  S: x1 B- ^
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;1 l; \; D  L& F
  53.   InitChangeDataBig52GBKS();
    + U, y. ~. ]" @0 M9 g: b
  54.   InitChangeDataGBKS2Big5();
    # Y3 F! Y2 h; b7 m# w# M+ P
  55.         //" R3 i' _: E/ U, L. ?- Q
  56.         bClickRunExe = FALSE;
    6 l& l2 ]7 p  N: y) K  g2 q! L
  57.         //! ]' d: [: m2 z7 X) e
  58. }# L  Q! p: F* \1 A( i" E0 a) L* `

  59. : V, F# H2 Y( B  x, y+ A
  60. CRevAppApp::~CRevAppApp()/ ]! \3 t1 a/ i4 d9 _7 ^2 m  S
  61. {
    . ]4 [! }6 J2 h) m' Z8 V
  62.         // TODO: add construction code here,2 |8 r; x9 b5 u5 ~& d/ n
  63.         // Place all significant initialization in InitInstance& i$ U% {4 ?7 H. s& x
  64.   EndChangeData();% B; \; D# o7 f% R; |1 b' y
  65. }$ _) e5 L- D3 j- w' `( Z
  66. % C7 s8 O0 k5 |/ s& f
  67. /////////////////////////////////////////////////////////////////////////////" g, Q1 p/ ~) ?) j2 D  T
  68. // The one and only CRevAppApp object
    3 }( C* u, B8 t: {+ M. ~$ w; {
  69. % ]) G5 G. k8 w& C) U$ K; E; ?
  70. CRevAppApp theApp;! w$ c2 f% B( [6 i4 _* I4 u
  71. / F0 [$ P8 a0 ]+ ?. ]
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    3 H5 `7 P% b3 l% O( ~
  73. {
    1 Q1 I. @6 m$ T2 f! q6 t
  74.   int iEOF=0;0 }7 v) L5 B  A3 I+ E
  75.   char szTempName[MAX_PATH];
    * J6 L; T6 j' p, x2 e
  76.   *szFileName=0;' ]7 ]8 K% l4 B! I0 A
  77.   iEOF=fscanf(fp,"%s",szTempName);1 R3 O! `# ?5 H( L3 {" K1 \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')+ P* R" q% d! I
  79.   {- _+ Q$ u% G5 i& W! c' V& }
  80.     strcpy(szFileName,&szTempName[1]);' Z: z/ c# f: `* ?+ u
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): Z" ?* r" b; y
  82.     {/ Q! b6 S) @  k
  83.       iEOF=fscanf(fp,"%s",szTempName);6 J1 X1 P5 s# ]* y9 _- ^8 ^. F
  84.       strcat(szFileName," ");
    + S8 d0 V& ]' C2 ^. v
  85.       strcat(szFileName,szTempName);
    7 E# j7 R; G( o5 [! ^2 B: @, `$ N
  86.     }" x, H' ]" l# J; L6 a) S
  87.     if(strlen(szFileName)>=1)
    ) t$ I9 }+ Q  e! t& @
  88.     {/ C  M4 x, p8 L& s. Y
  89.       szFileName[strlen(szFileName)-1]=0;
    9 b( j9 C, N3 W: O* M
  90.     }
    " E7 l8 `, K1 t8 |& i8 f
  91.   }
    0 C; ]( f. R; K) F& {; N8 k
  92.   return szFileName;
    : N% `7 d: f' K% ^0 L
  93. }0 ^, ~1 Z) U, N* F5 w

  94. ! m, Y$ B6 ^5 N  m
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    3 P3 v  b/ ^5 L7 u
  96. {
    ! E5 a. u) u) d7 J$ X" I4 I
  97.   FILE *fp;6 F0 ^8 W5 T7 Q! j
  98.   char *key=NULL;$ r2 c# ?$ Y' y3 ?' j
  99.   char version[MAX_PATH];  l, g& b& }% v
  100.   LPUPDATEFILE file,olds;  y! s. C% T" a, d2 b; M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;, K- v3 t6 R  v7 o, ^  u& w  J( `

  102. : D6 Q7 J2 ]2 c1 R+ }/ X) \( G# x+ x
  103.   UpdateList.clear();
    2 i1 o9 m* P: t# f7 y  x, p! R4 P
  104.   UpdateFile.clear();2 }+ y" y' e* s7 s0 [; u
  105.   if(GetFileAttributes(filename)==-1) return false;8 E9 n# D" s) x, s/ L
  106.   if(!(fp=fopen(filename,"r"))) return false;
    6 c7 N: x& ^7 \0 J0 G; D: F
  107.   fscanf(fp,"%s",version);
    $ p: ]& D" E8 K, L8 R
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }8 Y& |  o+ D* S& Q6 m
  109.   while(fscanf(fp,"%s",version)!=EOF)0 U# U7 D8 F, K7 Z7 |  z. T8 z- ?
  110.   {$ `* O) n9 {5 s5 W& m/ a9 m6 X
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . ?$ a% r9 c) r" d* j4 J2 U
  112.     fscanf(fp,"%s",file->path);
    7 x6 ?1 }# ^7 I/ y8 ?1 p3 m
  113.     ReadFileNames(fp,file->file);0 j* J2 d$ L. l8 M: e% U
  114.     strcpy(file->full,".");
      c& V% P! X1 @+ X
  115.     strcat(file->full,file->path);
    - f, m8 i! _4 s% S/ N" V& h5 F
  116.     strcat(file->full,file->file);2 v7 O3 |; z3 B# D! r* F5 O
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()): @$ o1 Y$ Z6 Q* U" y- }7 p. h
  118.     {
    0 C3 h; s' P; m5 Z
  119.       file->vers=(float)atof(version);
    1 V- _6 N: c1 \, P
  120.       UpdateList.push_back(file->full);0 h) C, N9 A% }0 P3 L" n! i
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    9 n3 Q- m7 h: C3 P4 P3 t, I* @6 a
  122.     }3 _' u* X) R( |- w. I0 ~2 a9 ?; E
  123.     else0 E" A2 m6 }' g5 B) X
  124.     {: t5 }( G6 e+ K* N& v- U; J$ P
  125.       olds=(*p).second;
    0 a, e) k* x8 M! N
  126.       if(olds->vers<(float)atof(version))) S$ u/ {8 E; L1 Y$ Q* c; e6 C
  127.       {$ l6 z0 H$ D9 ?
  128.         olds->vers=(float)atof(version);
    : u; i0 n4 X2 ?& P. n* d  K
  129.       }
    - ~  t% ~( P0 H2 D( S8 e1 r# J/ B
  130.       free(file);, j5 n0 c5 H1 E5 z+ [( a
  131.     }
    ) c% l4 G" |& [, n8 \
  132.   }
    7 P% J7 Q' D. T, X
  133.   fclose(fp);8 e6 _* [( J) m* @! \' a' Q, y* r
  134.   return true;
    ) r$ _+ a5 L& C6 V0 r
  135. }
    1 H  a, H" F/ X
  136. $ Z* k7 x6 }1 V" m; k) S2 I6 C
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    4 x" s* x7 [9 ^
  138. {
    * c9 p/ ?5 N& m7 j9 C# Z
  139.   TCHAR  szFull[MAX_PATH];
    8 f) P+ J! P( h) Z. H2 o7 N) G. N# i
  140.   TCHAR *token,*inter;
    # F1 t. j; Q3 @" L& K* V
  141.   *szPath=0;
    7 T& |7 p! C8 A
  142.   strcpy(szFull,szFullPath);* X5 W) r) ]) W) u* ~
  143.   token=strtok(szFull,"\\/");
    % a1 a: u+ e8 K6 t! ^5 g' X
  144.   inter=token;$ G! S5 d# I& t4 b) ^+ F
  145.   while(token=strtok(NULL,"\\/"))# g: S' K4 r: [4 g
  146.   {
    0 i: J+ ^; \# B. K
  147.     strcat(szPath,inter);% J1 J5 ?' p! B! e, v! y( ^4 b3 N
  148.     strcat(szPath,"\");  G( e8 J) `# }& _, H0 e
  149.     inter=token;4 I. |5 _" Z2 ?/ g1 S8 r
  150.   }
    , j' \7 x2 q- C( \& I% c0 ]
  151.   return strlen(szPath);' {; O6 R6 d3 [  u- u
  152. }
    ! y: F! a4 U( U# M( I& f5 k+ j) d
  153. " U5 n: P. k( s) V/ {/ s* c
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    6 l+ j& b# w$ d5 a  Z. C( D
  155. {
    : i/ H5 |. K( x1 Z3 u! J1 w1 {% a
  156.   DWORD attrib=GetFileAttributes(Target);
    ; W8 K4 a, r8 a; [
  157.   if(attrib!=-1)
    , b4 {: \9 G7 z
  158.   {
    % u- R3 u1 T, c( [: R( z  n
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ) K2 n* z/ H4 p6 d
  160.     {
    6 N$ I3 N: U- E4 p; C7 p
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);3 ]( i+ R9 ?8 m' ]* b! O9 a
  162.       SetFileAttributes(Target,attrib);- R8 _/ [+ L7 R7 |9 \
  163.     }* I8 Q4 P. ]* v+ D* `# f; L
  164.   }* l3 }" S4 o: t
  165.   CopyFile(Source,Target,Erase);
    , {- I: ?( A+ Y
  166. }( D8 t$ S, Z' f6 r1 e* I3 A
  167. ( ~8 K2 a4 J- F2 f
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)3 Q3 o* [; H0 K8 l3 c( p# v
  169. {
    8 Z& g9 P, f6 s+ ]! |
  170.      FILE *fp;0 W5 x3 G" X4 X; N8 N
  171.      char  szBuffer[8192];
    # D  S+ N) A# e/ `  |5 y: c2 G
  172.   va_list  argptr;* y7 \( V2 B) ~6 Q5 F" E( I, ?
  173. 8 h8 Z1 n& b& O7 e; D3 Y
  174.         va_start(argptr,message);
    5 W; {# D# |: G$ e+ O; c
  175.         vsprintf(szBuffer,message,argptr);
    ) t9 [7 g/ k0 A. s( N9 P/ y
  176.         va_end(argptr);
    ) V% e, j$ V7 t! M! P+ k
  177.   fp=fopen(FileName,"a");% h# ]) A5 a; A: I, e! a
  178.   if(fp)- A7 c4 U; ~7 ?& M1 a
  179.   {! N6 [! q  H2 ?, X+ @( b7 L& e
  180.     fprintf(fp,szBuffer);6 }9 U6 l2 V5 P. E3 E
  181.     fclose(fp);
    : H7 z0 Q  n6 u% n- m0 U6 ^/ z
  182.           _flushall();! ~  v- R! d: z5 E# O1 B
  183.   }
    / P6 E: j8 B( g: n- B, w" Q5 U9 c
  184. }6 i. R% W. x4 A% V! e, I

  185. 6 z+ M* X1 N2 [- E0 N% F9 U
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    - s; L3 f) l; Q! Z/ {8 X
  187. {
    6 z: h* \5 U( j9 k
  188.      FILE *fp;' {+ G0 ?2 C0 D, I$ I6 c
  189.     DWORD  attrib;
    + g, Y" K* y, o. ?) O; ^2 y3 M; u; ^, e, h
  190.   attrib=GetFileAttributes(FileName);
    # O$ i2 P  p3 V( z2 I: s
  191.   if(attrib!=-1)
    : z0 f$ i4 w' I7 p" ?
  192.   {, h" y. A5 j. d3 X5 I5 L8 Z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);9 G$ P# r5 r0 n; V: W
  194.     if(!SetFileAttributes(FileName,attrib))" U; d$ d0 {& x( L+ W# T
  195.     {
    ) R# n$ w8 g- X$ w7 h% C; [$ E! K, k4 v
  196.       return FALSE;
    " p1 f, |! @+ \7 \
  197.     }
    5 w5 T9 F3 A( ?7 I; o1 T. o: k. b" o" C
  198.   }* T0 |  w3 \4 a" l* e0 _" O' F6 i2 A
  199.   fp=fopen(FileName,"wb");
    # I; \0 ?! U6 I. X
  200.   if(fp)) @0 |. `, x' G- f2 ~
  201.   {
    3 j7 J7 s) d1 \- Q" R1 t
  202.     fclose(fp);
    % t* A  Y3 r/ A1 U( T( e/ P) j
  203.   }& m# E# n9 i' B/ e
  204.   return TRUE;
    5 F, Z) R% i" e& n9 ^
  205. }- U9 B+ P6 E) J4 b# Z( R( T( T

  206. 2 d  ]8 I6 U0 o& V
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 M7 w2 b2 ~' r, m  K, {& p
  208. {6 s& ]% j. n. g3 `
  209.   char filename[MAX_PATH];
    2 N" H  \0 Y* U) W' v  e: B9 B
  210.   LPUPDATEFILE file,olds;3 }3 `- T% D# S+ W6 z+ m; ^
  211.   std::map<int,CString>::iterator i;6 ?$ O% Y3 A" N. C- G8 g
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
      f0 \- a6 F' M7 [
  213.   std::list<CString>::iterator l;6 D5 c( f6 c9 N" j

  214.   j1 `# I/ |3 i5 h# e: q
  215.   if(bFirstUpdate)( {: {" A2 R9 S  @+ s
  216.   {6 r) P# I) i" C% d/ i" L+ p
  217.     dwCurrFile=0;- s& G* b3 L5 o, u% Q% s9 U
  218.     bFirstUpdate=FALSE;$ ]3 y2 X0 f( [( V7 z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( P2 O6 g  h( S
  220.     {
    ' U7 k) A5 ?; Y- s/ P
  221.       dwTotalFiles=UpdateLocal.size();* b' V* h4 {) \) `. ~2 U1 p( R
  222.       dwDownLoaded=0;
    6 c+ C4 O3 p0 z8 u) p% v
  223.       bSilentStep=FALSE;; l- Q/ ?+ X, A# i' u$ X" K
  224.       bCompressed=TRUE;$ o. N: ?5 ^7 `, x+ p
  225.       strExtLocal.Empty();+ H5 h  w% o. D8 ?8 n& f) h: P
  226.       strFullName=(*i).second;
    4 P* y# N& d8 y1 s, U( M+ F9 ]
  227.       dwProgramState=AP_CONNECT;5 w$ _* l2 \, Z2 h* Y% T2 g9 o' P& j
  228.       return TRUE;0 ^1 v( c' n% h, U& v
  229.     }9 E$ [3 X! ?/ w, h( P! Y7 x
  230.   }. ^: {* @) A2 i: _) `0 N
  231.   else if(bRestartUpdater==FALSE)2 j' Z5 C- P9 M8 q% ?1 P' A
  232.   {3 j$ `8 a# @3 R& M  n  p
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())# @# _8 e* _. z
  234.     {
    + g$ T2 i! Z1 [) J
  235.       file=(*p).second;' }8 |6 V) K) K8 Q' [) R
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())! O7 ~1 d- |4 F
  237.       {
    1 F/ V/ X* C% ~/ l/ I5 O6 c
  238.         olds=(*p).second;. \* {: I' Y; N# g* \+ {! ?6 E
  239.         olds->vers=file->vers;0 A# {  k9 b' U
  240.       }
    - y/ L, [1 s/ i& c+ u
  241.       else
    ' X( _5 i" T/ Z3 }7 W- x2 q
  242.       {0 h. s( g9 l5 \1 m) r
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 \6 t) A1 @/ J/ u, u
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    8 s7 H$ q, ^1 \0 T* c% U
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));7 J- n' M! e; A$ `1 q6 H# j
  246.       }
    & g* b3 S! \( B% {' ?+ t
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");' z( `2 G! b3 ?3 H0 X
  248.       sprintf(filename,"(%s)",file->file);
    8 ]5 Z4 V  K* c4 X+ y, h
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 q4 X! G3 x* {- E( f3 z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    9 S- k! I9 R' z% G  D. r5 l: a$ Z2 Q
  251.     }
    ( K$ c5 L5 h6 ~+ T2 R" u  B8 M& M
  252.     dwCurrFile++;
    : K# Y& r0 r, X
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 T, x. \3 V* q* O- K. E
  254.     {6 E: H! M: C/ g2 c+ z
  255.       bSilentStep=FALSE;' j7 t6 W5 ]/ C: o& U3 P/ G
  256.       bCompressed=TRUE;: G  c+ w+ {; f1 ~) o
  257.       strExtLocal.Empty();9 o! k# A8 V0 ^
  258.       strFullName=(*i).second;
      o  `1 }) @9 _! R9 r5 t3 Y
  259.       dwProgramState=AP_CONNECT;
    $ K# L% @4 g& R# B/ I  \* x4 v$ q
  260.       return TRUE;
      l) p' R8 E" k; M5 k
  261.     }
    " [! M2 f$ C# C- O% `
  262.     if(!bRestartUpdater)
    % @# M9 H/ S- T: L% [
  263.     {
    9 q; K. I5 i) G5 H0 @* m7 O
  264.       int iCurrSize,iFileSize;# T1 r2 {; J4 L( z6 c: b! D$ X
  265.       iCurrSize=0;# v# l& Y% W% Y) n
  266.       iFileSize=UpdateList2.size();
    6 T) p" j( V: b/ [. r( j  r
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . t0 E' e3 j- o. }0 O& ]
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    3 P; J% K! I. B# Q& ?
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");" F8 B9 O  H" W: |
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - }) C# z. g2 s* Q- F9 J
  271.       Fclearf(".\\update.dat");
    ; A3 E5 H# ^- b" U' B4 A
  272.       Fprintf(".\\update.dat","Bloodyf\n");6 o% E" ?7 a9 ?: x% R% N
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)  d- t0 \$ [8 ]+ p' ?0 d
  274.       {( k# r; h+ b: V5 Q
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    " i6 C% o$ d% o
  276.         {
      J: R, O' T1 L9 r5 A0 @
  277.           file=(*p).second;) I; A, x3 A3 j
  278.           sprintf(filename,"(%s)",file->file);2 v. m/ q. R6 D; ~+ {
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 K+ N7 h, N) c6 b4 _
  280.           iCurrSize++;% |9 r% T, U+ ]" @' ?4 Z% R2 A' S
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    4 t  |  \% B; I' {0 t2 H* A
  282.         }
    ; p% n& h7 E/ O( F0 {) {
  283.       }  o5 x$ N( y  ^
  284.       unlink(".\\update.txt");
    ' F1 w1 W( P: m! O: t4 x% s
  285.       unlink(".\\update.tmp");& ?% h- i, c6 z% O" a
  286.       Fclearf(".\\checkversion.dat");
      f# C3 t- b! ?: ^
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);2 q/ G+ v8 T2 k
  288.       if(UpdateLocal.size())" s' g) v) h# W" R, R0 i. W" [
  289.       {
    - }2 u+ g' o: k: T# V. T6 Q
  290.         UpdateLocal.clear();
      Z  @, I+ h4 N/ T3 s
  291.       }2 g" ?: }  z( E. @0 c9 q! D: R6 S" l: S
  292.       if(UpdateFile3.size())
    5 O$ N$ f( u  J: _0 e' M3 Q
  293.       {
    ( g6 H) W  M% P- [' r: g2 G9 Y' N
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & ^& A0 |; k0 L
  295.         {
    . P& q1 f+ A( Q; k( N2 C
  296.           file=(*p).second;) W% V5 X  I3 ?
  297.           free(file);
    ! ?; n& r9 G- q* a+ y  G
  298.         }  u' L7 `7 x) E! O
  299.         UpdateFile3.clear();
    9 ~3 d, \3 o4 o% |, F
  300.         UpdateList3.clear();4 {; H7 M$ Y" H% h3 `& J
  301.       }8 @4 a2 K4 O, R5 C
  302.       if(UpdateFile2.size())' X9 ]" Y5 @: C5 }
  303.       {5 J0 @) x% b. q) }
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % X, [" D7 ~/ P' K! {, `5 j( ]1 [
  305.         {
    1 ]( y9 \2 X1 v
  306.           file=(*p).second;/ B: R2 T/ i% }4 D
  307.           free(file);
    - @, Y. \8 y8 Q* x1 U
  308.         }+ z, d2 J6 u( }+ H& i  V( t" e
  309.         UpdateFile2.clear();( M1 I, Z# H7 \0 ?% k+ E6 p: o  e
  310.         UpdateList2.clear();3 S' A9 ?% A) d8 I
  311.       }+ Q3 I7 P9 ?( o5 q  I
  312.       if(UpdateFile1.size())
    ' h6 {& j& t/ m# z9 z$ C  r5 B
  313.       {
    : k9 Y$ ~9 c9 Q3 t: ], `$ \& E3 a3 H5 E
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( J3 O$ C" Y" A. b& r# e: S: Y
  315.         {
    . N4 v4 t; P4 B$ J8 |8 d1 L6 l
  316.           file=(*p).second;1 E' c' K$ K/ b0 t! I
  317.           free(file);/ Q/ X# f9 ^: c
  318.         }
    , P' k8 s  l) v# a1 g% L- o& {, ~7 Y! H
  319.         UpdateFile1.clear();1 }* M8 O% s# I8 ^
  320.         UpdateList1.clear();
    ( R3 k; d2 a' R  ?- T! n5 E' w
  321.       }
    . x: t+ @/ q1 J9 Q" D
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! [7 [: N9 T" E$ W. f
  323.     }! s# n! i. a; }- l) {. Z% [
  324.   }
    4 P  M( ?' x: s  M# @
  325.   return FALSE;5 Y3 a; r. m7 U0 y/ R
  326. }8 Z3 T0 G: X) {3 J, `
  327. % K+ {$ `  [% h- S4 T5 V# Y* B
  328. void CRevAppApp::ClearAll(void)
    ( X3 s8 e+ F  ?- t* y/ T& j% d8 f
  329. {
    - i6 Q0 ?8 x2 ^: ~' u, V; N. T
  330.   LPUPDATEFILE file;
    " L& j! T9 i' ^
  331.   std::map<CString,LPUPDATEFILE>::iterator p;( m! \4 p" L* q! R: [- {
  332. & k$ K( V$ v; J
  333.   if(UpdateLocal.size())
      T, p1 r* q6 c+ E  ]: O" B
  334.   {" a/ q2 r5 A8 G
  335.     UpdateLocal.clear();4 Q3 W. c2 q% t
  336.   }
    7 r' l$ M5 _5 n6 f  q
  337.   if(UpdateFile3.size())
    % _3 `% X6 f$ I- }& Z9 x
  338.   {( R5 Q- s" K8 s( _& K
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + {" O5 c+ N, N+ g* q
  340.     {
    0 X! M: V- _5 G* A* ?" M
  341.       file=(*p).second;5 b8 K0 S4 l( o+ C
  342.       free(file);
    2 Y% {  D0 k: P3 s, Q. p! p
  343.     }1 D/ P: |9 X) I7 o/ ~" V
  344.     UpdateFile3.clear();/ {' j7 W+ x$ o
  345.     UpdateList3.clear();
    ) H/ B4 n# t$ f% E7 }
  346.   }( |" E# I: b# ^! X' c0 K
  347.   if(UpdateFile2.size()): z5 s1 J. O8 v7 _: i# ~
  348.   {
    * G6 U; M1 q9 v5 T) [/ c
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # Q* b  o* L* {/ K: N) n
  350.     {; M2 R- k- d4 N' A; x
  351.       file=(*p).second;& R5 l; W5 N9 N% R2 Z0 }# b  G, X
  352.       free(file);" G+ @  d# x% \: N. ~
  353.     }& W+ g) T9 f: @; p2 C0 E
  354.     UpdateFile2.clear();
    / d# }! o, v, I' y' Q5 O" d$ c
  355.     UpdateList2.clear();4 ^- F. B5 P6 i
  356.   }5 C9 s( }# @5 a6 f1 |& b, X4 r! E$ a
  357.   if(UpdateFile1.size())+ t' ]0 `/ c+ b7 D
  358.   {
    2 E. E6 E1 n4 O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    " M7 F+ M# \/ {$ V' Y
  360.     {0 w5 E3 D0 y* h! M: {3 e# ~; \! v
  361.       file=(*p).second;
    + H+ ^7 {: N9 f9 n" B* m
  362.       free(file);0 o7 |% H, H9 e
  363.     }
    4 G2 P6 ^! q. R* \# T
  364.     UpdateFile1.clear();
      x1 v9 d; q5 L9 A$ e9 `3 U/ q; N
  365.     UpdateList1.clear();
    9 L. u  D/ d& N( D  T
  366.   }% P5 Z6 |; s& N# o# w
  367. }  % {5 l) Y. i. ]$ r( Z" w5 t0 v
  368.   % p: g. ~+ C9 L
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    & E) b; e. n# j
  370. {
    % t0 P6 y  w- S8 T2 R5 \! V
  371.   int c;5 H) r& V2 @2 K/ M4 u
  372.   LPUPDATEFILE file1,file2;
    ! {* R- @4 b; |! y* [/ K
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 `. k: v8 a7 y* F6 d% o. _) o/ o7 x
  374.   std::list<CString>::iterator l;
    5 z" Q. ?" L9 ?0 P& S. z4 \6 [6 b
  375. 3 z& w+ s* s; W: @0 @! M5 C
  376.   UpdateLocal.clear();
    + S# o5 a* m8 J+ S- i) m
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);! i. Y: @! ^% E, j, M, i
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
      X9 v' s" `4 h+ M
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    3 E* d* ]5 {6 l
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);# r; ^+ Q# S9 j% a7 d* G8 k
  381.   if(UpdateFile3.size())
    * ~0 b( p: P9 m& p! X/ G2 }
  382.   {
    , b6 g7 j3 S; e5 N3 |
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)! ], D. ?3 }  `( I/ g
  384.     {( A5 d; N9 {* z* n! i
  385.       file2=(LPUPDATEFILE)(*i).second;) B/ e2 r  {( L. M9 r& f' f
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 Y, p! G$ q' F
  387.       {
    & s3 O! R* R3 Y# G
  388.         file1=(LPUPDATEFILE)(*p).second;
    / ]# t, C; B+ d, k& U* ]
  389.         file1->vers=file2->vers;( l; R2 O: a4 d% r
  390.       }0 ?3 B) z1 s5 `& g7 o4 ^
  391.       else
    9 t) K2 y$ e# S$ |" Y
  392.       {
    ( i* d; e, A0 ]3 I3 z
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& v- Z+ }$ `# |* v
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    * w' L7 b  v9 Y5 r9 e9 F, m
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ! v1 m/ Q: B" I3 ~
  396.       }
    8 D, b5 _. p2 ?6 i# q$ c
  397.     }0 }( K1 C' p1 g4 ~: j$ R
  398.   }
    9 G) r  t) e8 W# @" l, l9 e2 Q
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)8 f& k* J$ C5 T' x- m
  400.   {* j, V) }& n5 {3 b, U8 C' v
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    % c, [+ w! K- @" `' X8 O' ~
  402.     {% S) P9 k& d& d' k- v
  403.       file2=(LPUPDATEFILE)(*i).second;- ~, ?' _) o% g& w/ R- }
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 n) n6 ~# s# A& E) ~
  405.       {
    4 g& d1 n: h3 F) k% U  b! G
  406.         file1=(LPUPDATEFILE)(*p).second;
    3 e( W5 {0 v7 [% n: ]7 P# R5 p
  407.         if(file1->vers!=file2->vers)
    . c. B& y! u  T; s" T* N  ?- ^
  408.         {: ]% {8 Z0 t3 b& o, q% p
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # w: k5 D1 u. b2 [
  410.           c++;
    9 K2 V% R5 ]; @8 U: R) c: g8 W, G" m
  411.         }
    7 a' [, R5 g' h8 v: u
  412.       }5 S: G+ c% k7 \8 M( C% f2 k# U
  413.       else
      @6 m( p) W/ ?6 \- Y
  414.       {1 |* f4 [( C7 C, ^
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 N5 k2 b# q) m2 r% a
  416.         c++;. E. ]$ |# @, D# k
  417.       }
    8 N% u) J7 L% x
  418.     }
    ) A$ ]2 y" u- X; a# d$ d, n- S
  419.   }
    " w+ w' L) C2 l$ x; e
  420.   unlink(".\\DownLoad\\update.txt");6 `- D+ G. `9 s4 D6 e: D9 j2 g
  421.   if(UpdateLocal.size()) return TRUE;
    $ b4 W9 e7 K9 D
  422.   else                   return FALSE;
    ( h* F  w! V' ~" K$ m
  423. }
    8 V4 o- b: S+ c3 }
  424. & c% Q* n% c$ m0 V. B$ ?+ }
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"/ k4 E% G- E  q' S3 Y- w
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"# v/ c4 i3 x/ o/ @

  427. ) K7 E' s0 U, T0 x5 _7 k
  428. + f+ S4 H# g  G. \: b7 `: l- p4 o
  429. 3 l  N! S7 _0 C0 x
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)9 m# n0 w! E% I/ C- {
  431. {
    + ~* j# @' C( J) U
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;4 h9 F' s, ?( S
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 U  ^0 e) G% k! k
  434.   {) a: t- f2 C. [, v1 K& b
  435.     char szLanguage[50];
    : @% R! z6 e3 F
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 _0 q! j" E, j9 c& r
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; y0 m2 V2 a* `, _
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . D9 u8 F, S" I  \: ~, k
  439.     else                                   m_iLanguage=ENGLISH;! ^  H% ^- [' @, ]0 p& |9 v( q
  440.     char szRegister[100];. g$ _$ A; {. Q$ P- }; v6 T' k
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & ]0 @. Y! S- Y9 M( w2 e
  442.     strRegsName=szRegister;# g0 y6 q# ^& b$ n  Q8 q
  443.     char szPatchURL[100];- z: r; X+ B* O3 K; k& v: ~
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' D# Y8 i0 D" X6 T  j
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    * ~) K- c# F. l6 p7 c1 v
  446.   }7 z. S  w* {$ |( j" H1 _
  447.   else
    8 N: x% {4 z! S; s! z- i: r
  448.   {
    1 f$ Z0 ], ^" H8 S& ^( L
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ U) [0 }8 e& \! X
  450.     strRegsName=DEFAULT_REG_URL;
    : W+ ^; [6 a" A+ {! k7 J
  451.   }
    1 F$ C. f; c7 T6 {7 w
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    # _8 F  s* M; C/ X6 L( x
  453.   {2 o( Z9 c1 y1 o; i% F6 H: I
  454.     char szIP[50];0 D  `. \8 L% P3 y/ \
  455.     char szDIR[300];; G8 ]) j0 v+ A1 I
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
      e7 J) e9 U  h* _, Q) H, y
  457.     {
    6 T3 L) {1 G7 h
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ( F) m7 p! g  C- L
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    4 d& P7 x9 j( A5 s& p; @' K5 K
  460.       strHostName=szIP;
    . D4 j  c3 c  ~* B% M/ v+ n
  461.       strHostPath.Format("/%s",szDIR);. l% G, @: M3 |( j/ ^' S. G0 ~
  462.     }
    : G9 j" Z1 @" ]1 u" ~
  463.     else
    " h3 x4 |+ {  T  j1 }% X
  464.     {
    - ]+ _2 G0 U( o8 P; L9 W
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      r, V; F& o7 Y" G8 \
  466.       {
    ' ]% k) u5 S: _  Q: @
  467.         char szLanguage[50];
    $ F+ p9 d/ }! t- A% h4 t' I
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 _7 U$ i9 l7 ~! V% M
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ( A) l" m. W, }9 H
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) ^; ]9 @, w( o0 S0 U2 p
  471.         else                                   m_iLanguage=ENGLISH;/ ^) `; p5 `* ]4 S' h
  472.         char szRegister[100];
    - `; i: R' g! ]; B. T6 M7 r
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 A% Q9 z1 S5 F/ t+ r+ C
  474.         strRegsName=szRegister;: ]4 J0 Z2 H4 Q5 C$ ?. P" d5 u
  475.         char szPatchURL[100];
    $ e& l: V% I: C
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    & o7 p) Q, P: O8 L
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 z: A- _' _; W; b0 K4 Y! X
  478.       }- t" h$ h0 v8 Z  Y
  479.       else& x6 W: W- }" H- v  V$ r9 [3 m+ ]
  480.       {
    ! ]# D* m. M) q/ ?0 J0 S
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 \  Y+ u8 \+ \) ~* |
  482.         strRegsName=DEFAULT_REG_URL;, ~3 y' Z/ S. B& p
  483.       }
    3 X% K. O* j: K$ _* ~
  484.     }- ?. x2 N# f/ O
  485.   }( E; Z# G7 N, A0 b
  486.   return true;
      q7 j  d- U+ d* _
  487. }* m4 T. k. T' e1 A6 d
  488. * X, w! l" B  Z* X
  489. #include ".\ZLib\unzip.h"
    # u, v9 a% m# o) d) Q9 @% n
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    + s8 W% q9 P7 g4 w% {
  491. /////////////////////////////////////////////////////////////////////////////
    8 ~. @2 U3 }' X% W: w6 T
  492. // CRevAppApp initialization$ A7 @8 s0 ?$ t/ t0 E6 C

  493. 1 }8 k6 J8 p5 ?* a+ w
  494. BOOL CRevAppApp::InitInstance()
    . L7 f* a9 ]/ T$ \- T
  495. {) f6 e% v+ Z4 n! A9 z. ^' D& V: J* ^
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    & q# e3 q% [; P

  497. 1 n5 V, S2 m/ w" u9 q% I6 s: F/ }
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);  @( P# L0 Y' y& H
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))- T* l, H; f0 F) i# Z  {5 s
  500.   {
    - M  d/ f4 @1 l9 w8 E
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    6 [' t& v+ S( L
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ; e" T2 r; {4 N: T- _
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))3 w7 g0 j) t, w' _
  504.     {
    + x5 D: [/ s4 @7 |- _3 ~+ S' N
  505.       strcpy(szPath,szPathTarget);
    1 o9 y! ^1 E% X) |8 I4 j9 ]
  506.       SetCurrentDirectory(szPath);% I* ?6 k+ j6 V. z# [8 h1 N
  507.     }% t; t' n- b' S# i3 @% _4 I7 F
  508.   }
    6 ~* }! J5 n5 v* C% W5 M( p
  509. #ifdef _DEBUG
    . u) _( B8 G) @, b- p' s
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)): g! @$ ~+ C  H' b, _
  511. #else
    ) h- B# W) X! q5 G( v( d9 ], E
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ' y& }# e6 V; Y: P" |
  513. #endif0 A, a: X$ ]# P3 R( U
  514.   {
    : A1 f6 j" v4 m. t4 f/ H9 \
  515.     char tempFileName[MAX_PATH];; C) r& A4 A6 ~3 E/ {1 w1 W' n7 T
  516.     strcpy(tempFileName,szPathSource);
    1 |; O6 c" v8 h5 U. ~/ n8 B
  517.     tempFileName[strlen(szPathSource)-12]=0;
    $ \+ P# [' R8 o2 t
  518.     strcat(tempFileName,"\\$CSUpdate.exe");, ]( F; u/ U: h( A! K( [6 k; }
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);9 v5 X, b; t  O0 ~( ?6 L1 c3 R
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);# M" k& ]! \+ ]6 g' p; H& M7 G
  521.     return TRUE;
    * c7 n$ g7 s  U1 L& V2 V
  522.   }; ^: C$ a* l' J0 f
  523.   // Nuke 0118: Delete run.exe, O8 l) B0 j( i0 \0 |# t
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ( n" P- _9 p0 K0 H  {3 ^' ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");" B: Y4 M2 V! k: |% ?; Z% C
  526.   if(!ReadCfgFile("Config.ini"))' O1 ~( I" R( L7 ?
  527.   {! `, ^! Y! d5 s1 P
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ) q7 p1 d, s. g4 y1 c' \
  529.     return TRUE;
    # |! |9 @. c* Z4 C
  530.   }% o% o* G* d$ b! B' S
  531.   HANDLE mutex;
    . u, x+ h4 c; A$ k% [
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    # K: l  z6 d( S) l" e
  533.   {
    2 V$ L0 @6 C3 c4 _) E+ D
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)4 ^9 ~5 ]4 y: d( a6 y8 ?" g* M
  535.     {$ Y* y) o" F# T/ x  X& q
  536.       CloseHandle(mutex);
    2 g( h+ I2 ]1 M& ]- I
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);+ U: f4 Y6 z1 T0 k$ T* @
  538.       return TRUE;+ p, g/ c* j- C9 X) c
  539.     }
    + e+ J( y3 w; R
  540.   }  
    / A( K* m2 J: f% b/ b4 m
  541.   CloseHandle(mutex);
    : D  C; D* \. K( Y; m
  542. , b" p! b( K2 F+ v' J1 ^: z% N
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);+ z) ?" t/ {' ?% e. H, v+ R

  544. : F) R: B0 j5 t  W
  545.         AfxEnableControlContainer();
    % J- K8 H2 _1 f9 e5 Y# ]

  546. 5 N9 \5 `2 m# I
  547.   bCanUpdate=FALSE;
    * f' n) N8 k) ~4 I0 s6 r
  548.   dwStartUpSteps=1;; q! j  ~2 Y1 u' E
  549.   dwProgramState=AP_NOTHING;( @% l4 w) J( p$ W& M: N: ?
  550. $ z2 B; Y* K: P
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);/ m/ s" b# |3 O
  552. ) }; x/ L* S! i2 p. {- q$ Y/ z- z
  553.         // Standard initialization" @3 u" H: T; `% i
  554.         // If you are not using these features and wish to reduce the size
      I) h5 {3 Z8 B: V0 t0 D, h
  555.         //  of your final executable, you should remove from the following9 h* y# g9 a& h% {- H+ m/ J
  556.         //  the specific initialization routines you do not need.
    6 g3 O/ k; }) n3 |2 @

  557. % H, u' a8 Q) {  C  X, t% E1 A
  558. #ifdef _AFXDLL$ U4 p* t7 x% n# N5 r8 [# g6 L( w5 h
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL6 @$ B& o/ J( ]
  560. #else4 H2 v( u8 L6 U3 g
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    , m3 B. P6 P, F+ Q' w% y
  562. #endif
      T; N  f! g7 c5 J# ~! h/ n; M

  563. ( a% ]$ P; z! J! ^& h% ?+ Y
  564.   dlg=new CRevAppDlg;
    0 K. f/ Q) Y5 A9 v% H6 G' \
  565.   dlg->Create(IDD_REVAPP_DIALOG);2 q. M3 ]1 \# m9 B
  566.   dlg->ShowWindow(SW_SHOWNORMAL);! r! L' m+ [/ p, u' E
  567.   m_pMainWnd=dlg;
    7 f" N. e8 o& I4 f  p- \

  568. 2 b  A5 {* T: w& l0 G( J. k$ {
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 _  ?8 \' @, @# C, r5 k
  570. 1 n! D2 b/ a0 S) p# S- g
  571. //  GdiplusStartupInput gdiplusStartupInput;8 V5 ^8 O5 T* F1 n& d9 E( i
  572. //  ULONG_PTR gdiplusToken;
    3 N. t$ Y! A; x1 w0 Y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    6 s+ U" Q% q  O# }5 S+ y7 t" U

  574.   m1 e9 t  k' ?% F
  575. //        CRevAppDlg dlg;
    : A3 @/ H4 A" p2 q, U
  576. //        int nResponse = dlg.DoModal();
    ) `, J4 _1 P$ Y, e
  577. //        if (nResponse == IDOK)
    8 {. ^% y8 D8 z  w
  578. //        {; X3 o4 F! P( o( ~# S/ q
  579. //                // TODO: Place code here to handle when the dialog is
    3 j" X2 v& }0 Q/ F/ @( k
  580. //                //  dismissed with OK$ e' d* m4 A8 }; `; W, t0 J: Y
  581. //        }' x, G8 m5 T" ]+ U6 n
  582. //        else if (nResponse == IDCANCEL)
    6 V8 U# g" N# M$ P$ G$ {2 l
  583. //        {& H* V- A" ]+ O2 ^
  584. //                // TODO: Place code here to handle when the dialog is, I3 R. p# ~) S4 J+ _* g+ O* j; C
  585. //                //  dismissed with Cancel6 l& E1 I9 R6 R
  586. //        }! Q, s- I" A# i9 t

  587. ! I( p- n- e1 s
  588.         // Since the dialog has been closed, return FALSE so that we exit the! Y; \* }. A8 E  O( c
  589.         //  application, rather than start the application's message pump.% o! O( P( B. }) y2 t1 k
  590.         return TRUE;$ t6 ]0 f! Z& K; F- s
  591. }& w; j2 ~: ~3 A5 Y9 p/ S
  592. 2 O1 }; C& g6 {2 U
  593. char *CRevAppApp::strtok3(char *pSource,char *token)/ x$ x" `! q( ^: \$ c% p7 a* T, _
  594. {4 M3 _' N" F3 a5 n" @% Y: c
  595.   int i;0 A$ k$ ~1 r% ~
  596.   char *szRet;
    0 {" ]# C: |/ p/ r
  597. 8 R8 U! E' t  h5 r" d- O
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    + @! i$ v( [5 Y$ I# d
  599.   if(sztoken)1 `8 R  s* [- E% J5 s% c  u
  600.   {
    ) |* W1 a3 U. J
  601.     szRet=&sztoken[itoken];
    6 ~% ^) _* ?% {. C- v
  602.     while(sztoken[itoken])
    1 @; d( z  C2 M3 c; I6 q
  603.     {4 O, R. A6 z* a6 m- j6 x) D, q
  604.       for(i=0;i<(int)strlen(token);i++)
    ! k/ e" x3 g: U. N
  605.       {
    1 t3 D* p6 B  ^8 J
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    9 c- g0 z" k: U: q; z& ^% s) c) Y5 C
  607.         {6 t) y, }  q9 g( d3 I; h
  608.           sztoken[itoken++]=0;2 O- J( l  x) @2 X0 ]
  609.           sztoken[itoken++]=0;% j  S- X' d3 t0 @
  610.           return szRet;
    " @% p4 v9 N" L9 p
  611.         }: D# K  r/ R, X& P5 S& K' i
  612.       }3 F) p( `  g' E8 r  }! c1 \, R6 u
  613.       itoken++;
    6 a' N4 O8 l" G. f9 p
  614.     }
    9 C7 D1 X- n! o0 J
  615.   }8 ?$ @' W; b  W1 Z0 x  h7 X- i
  616.   return NULL;  n" ]( D6 u  z' G4 L
  617. }  u7 {8 P$ Z: G
  618. 7 P# ~5 M. M' U2 @
  619. void ProcessProc(long Total,long Current)
    / M9 `) S; d9 x7 l4 h9 Y0 b/ T8 f3 J
  620. {& ^0 _- f- K% s6 r
  621.         MSG msg;' O' d; K0 Y  a: ~% u2 I
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);+ M/ O! X! p9 i" H
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 V" P1 t+ n; l1 A. E9 ^: t
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ' x4 T, Q6 `: c2 Q- J, h6 d
  625.         {) `1 ~4 `. y6 B/ x
  626.                 if(!GetMessage(&msg,NULL,0,0))
    3 `4 E+ A; E% k0 d9 w4 @6 l! H- Q
  627.                 {
    : C0 Z' D# E5 g. U5 I- Z
  628.                         return;
    3 m3 x2 t7 V) z" _- _$ D
  629.                 }2 {9 J) l: h8 B  g  `. o
  630.                 TranslateMessage(&msg);
    ! M5 w; N% n! r8 E, d+ r4 ^
  631.                 DispatchMessage(&msg);9 E3 D) H4 u/ f7 @9 R, B1 V, o9 J# J
  632.         }       
    0 B; j; ?/ o: j) v& O
  633. }
    6 i+ p/ B" H* G3 Q
  634. 7 J% r4 U7 D3 `' K) M' @3 H
  635. BOOL bFirstChar=TRUE;
    8 n* z( @8 `+ B" w6 j
  636. ! c" W6 ~& ~" V: N& g) g
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ! h0 J* P+ c$ m# a& Y2 ^; I
  638. {8 f( g8 E" `' [3 \9 R0 T% ]
  639.         // TODO: Add your specialized code here and/or call the base class6 z. K$ r6 M3 }/ u
  640.   switch(dwProgramState)$ Y& ~# w* W+ e; r# R) H. |
  641.   {
    " n8 y7 Y; b. l. w4 g# r8 {/ S/ H
  642.   case AP_NOTHING:: ~. U( e2 l- e. a
  643.     switch(dwStartUpSteps)
    ' g7 F1 H: k$ c
  644.     {, x  k4 i) M- _! p( V) J5 |
  645.     case 1:
    ! H- b. W5 M* A" \" u! `- f' g# o
  646.       {" ?) t) g. r8 f  s
  647.         int i;' ^) X; g+ _9 a- K2 j
  648.         CDC *pCDC=dlg->GetDC();
    % ?& P$ R$ Q1 k3 ^) P) T0 ^2 }
  649.         HDC hdcwnd=pCDC->m_hDC;6 }. k, U- M* }6 F
  650. //        Graphics graphics(hdcwnd);
    ) A  P5 d+ n6 ^8 c0 [/ j
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");9 F9 n9 J7 }! d8 I6 b+ O
  652. //        INT iWidth=bitmap.GetWidth();
    9 r/ f6 a8 n) i: r
  653. //        INT iHeight=bitmap.GetHeight();7 u- L+ [2 y  U0 X
  654. //        Color color,colorTemp;$ }8 T& J6 ^8 W; c# E5 _
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    8 q9 V! f- t1 x0 r9 ], i, `3 d- G1 W
  656. //        {% f8 d2 G3 B! z, d" L5 d; N8 r
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    . F/ `0 V& h* l5 I$ f. T2 u
  658. //          {! y6 b- ]# h  V( Q" c- V
  659. //            bitmap.GetPixel(iColumn,iRow,&color);: {7 @+ c" K* J! c9 @, i5 c$ t
  660. //            colorTemp.SetValue(color.MakeARGB(, G. I* [& B* {6 f6 C
  661. //              (BYTE)(255*iColumn/iWidth),
      f6 ]. l+ I' A! [9 h0 M2 |5 P
  662. //              color.GetRed(),9 @1 E2 S% }% e8 b
  663. //              color.GetGreen(),
    " v9 S- ^- \% ^6 `, d+ ?
  664. //              color.GetBlue()));3 t) \- e* p; }; G6 a$ B4 A# Y" R9 x2 g
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    9 O4 ]1 s) t. ?5 L" m
  666. //          }
    4 H# @! ^7 p/ `9 S2 k4 F
  667. //        }
    * X3 S/ I' e: Q
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ) k) j7 L0 `' U# w7 O$ _9 A
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 M9 p! s) O& T4 U5 l/ O0 L8 v5 m
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");% p  M2 S% {' o8 ~$ Q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - q1 A; K& U  e9 C& ^& t3 x
  672.         for(i=0;i<240;i+=8)
    - ]' X+ t1 y( e+ ^( A
  673.         {: N( q( T, Y' I/ F8 {
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);# e4 X+ A. f6 |! o5 b5 o
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; C6 p! G2 I' C5 W& O) ^4 \
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , Y& i( z+ b2 B" E+ @( v
  677.           Sleep(33);
    # ]% w' O" K6 E' g3 U" y5 ~1 K% l) |# v
  678.         }7 {. R2 L) e+ M# x& U# q: k1 k
  679.         Sleep(1000);
    . [6 k+ F. p4 p5 l! `
  680.         for(i=240;i>0;i-=8)# U$ n$ `' R* z6 V& V
  681.         {
    . e, v# z$ p$ `: W. i4 f0 `0 O/ K
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . e" i, k; e& T) D3 _6 ]
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, o# W, e! J; f' {, A" {& q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. r, k! Q4 Z/ ^  l$ Y( q& x1 k4 r+ `
  685.           Sleep(33);
    8 R: S( o0 s$ g2 C
  686.         }
    5 I' v  B1 O5 I
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);3 S& M. p) }6 b* r5 ]/ F
  688.         dlg->ReleaseDC(pCDC);
    4 L; S5 C  H  u4 c
  689.         DeleteDC(hdctar);7 ]/ G. b/ |  R/ B( s
  690.         DeleteDC(hdcsrc);) i8 o) |: I8 e2 z  W4 e. L) \
  691.         DeleteDC(hdcorg);
    ) B4 ^" y+ G; A3 X
  692.       }- f7 i) f9 n0 P! q/ P: _# U1 p) }
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);* A2 W! M, b. u) r  Q
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");" z1 c/ c$ }+ _
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");# j7 H8 f* c# }( _; K% s; v
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");4 r2 D& Q! F$ r
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 j6 V, w# ~# A1 s& r
  698.       if(!Dn.Connected())6 A2 s2 T6 Z# N/ s. e8 ]5 z8 M
  699.       {
    . M+ o/ m0 B( _
  700.         dwTotalFiles=1;, z; }7 Z' Q# A% I9 ]' U2 Y
  701.         dwDownLoaded=0;
    3 Y4 c) f  X* s8 }0 c. C: N- O
  702.         bSilentStep=TRUE;6 q2 y# c% r/ T+ w- Q  x
  703.         bCompressed=FALSE;4 |0 P2 B. v0 i5 H$ j8 e
  704.         strExtLocal.Empty();
    ; g) I6 ]0 ~9 e& i+ |
  705.         strFullName="readme.txt";
    7 ^( w8 n* ^8 J; j
  706.         dwProgramState=AP_CONNECT;' M2 C, Z/ C: \
  707.       }
    ! I8 ?, v" e7 k/ D  |, V0 e+ ^% o
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();8 ^1 r7 t& @+ K! }+ l2 B/ G4 Y
  709.       dwStartUpSteps=2;
    $ u6 c2 x' H3 S; O8 t/ T* ]+ k* ~/ x
  710.       break;5 Q% n+ T2 Z0 a- X5 w) u0 i7 y
  711.     case 2:
    * r! G% }8 n* Q) o
  712.       {1 y' I- o# L. N1 C
  713.         int iEOF;7 ~( V  g# c" \; y% H9 S/ d
  714.         FILE *fp;
    7 ?) Y! {" m4 k: k$ D  [6 J
  715.         char szString[512];
    & }9 [5 d3 y$ t
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");- ]8 w: x" ]0 L0 F6 L* c' g
  717.         if(fp)$ |% j% N5 L0 b" _1 x
  718.         {
    2 {' N! s) c2 p) h  L
  719.           do& V3 W; l2 n4 E' H4 k+ p
  720.           {
    % `! ]2 Y; ]0 Z( h7 ]$ a( k0 {
  721.             iEOF=fscanf(fp,"%s",szString);
    # a% x/ p5 F: n
  722.             if(strlen(szString))+ z; F/ n6 m: l  ^5 ^
  723.             {/ @7 G/ P5 L/ w
  724.               if(bFirstChar)
    1 M; ^; C: C- i
  725.               {+ b" t, Z. B8 I7 l
  726.                 bFirstChar=FALSE;
    # f+ h( d4 I4 |* D! S; C
  727.                 bConnectIsBig5=FALSE;
      X0 D# \% ^5 _& g
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;* F% Z8 v5 }) e* i
  729.               }; ?4 b6 }8 b. Y* `3 F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    : z( T  l0 M- J  g
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));1 A- D- }6 u" P# O6 o
  732.               dlg->m_ListText.AddString(szString);, b0 e' W" r9 R' w* E% K
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : r9 d6 ~0 R3 n9 W) \
  734.               *szString=0;
    ; r+ D3 T, Y2 u4 I4 |5 p
  735.             }: k% ?. C. f* t: a8 p
  736.           } while(iEOF!=EOF);$ Q) t  k1 O8 o& I6 f/ {* C
  737.           fclose(fp);
    4 S0 |& X2 ~* M* _; L4 N
  738.           unlink(".\\DownLoad\\readme.txt");0 C- Q; K2 H4 a, p9 y% i
  739.           dwStartUpSteps=3;" O% t) y  K9 }  }
  740.         }
    # B, P) r( b5 F5 B" L; ?
  741.       }% k5 R& i+ \8 P
  742.       break;
    ! R. w+ c. W% ]
  743.     case 3:9 N$ {5 F$ r: x; l9 v8 X% R
  744.       if(!Dn.Connected())
    6 V7 m( L8 D3 X6 v
  745.       {6 n* u; N" T0 h$ u$ s" O4 Q* Y6 V
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);0 q7 S* c1 z: x  W6 g2 Z4 a* P
  747.         dwTotalFiles=1;
    ) z2 _) A: u/ f+ k( M6 i0 P2 F- ?
  748.         dwDownLoaded=0;' A' |% C5 L: d
  749.         bSilentStep=TRUE;
    7 W' }: s+ ^) w3 B" U
  750.         bCompressed=FALSE;
    $ _. B7 z6 Q1 c! K9 q( F" i
  751.         strExtLocal.Empty();, b( E$ E, s% F6 d" E& I6 j0 {
  752.         strFullName="checkversion.txt";
    6 r2 V) _$ y6 B. g9 z2 ^. h9 q
  753.         dwProgramState=AP_CONNECT;
    0 L. ~  g( m, Q5 w1 [0 g
  754.       }
    ; Q2 v  U/ @5 W: n  m( A
  755.       dwStartUpSteps=4;
    * z9 @  p$ X$ f5 p
  756.       break;
    + |/ Z& M0 Z' J9 M  n: ^' M
  757.     case 4:8 c8 n1 G6 X& k1 L; m  A* ^& j: T
  758.       {$ a% Z. n/ ?( d% t
  759.         FILE *fp;% v% E+ I" J$ k$ V$ d+ j" U  K
  760.         char szString1[128];% M8 _' w  N& B  D, p
  761.         char szString2[128];
    2 \6 H- L* g+ z% X/ v2 j' w
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");$ q3 b5 d4 V1 ]' v7 V  G( O
  763.         if(fp)
    3 A/ B% q" {4 P! D6 F. \2 ~  m* g! b  _
  764.         {
    , P+ L; l! Z+ k" _. F) Q- f
  765.           fscanf(fp,"%s",szString1);
    * s, _* Z3 d% o. ?6 R/ X
  766.           fclose(fp);
    , o* i' p6 u* ~' R4 U
  767.           fCheckVersion=atof(szString1);
      J$ Y5 I1 |9 x, O9 j( p
  768.           fp=fopen(".\\checkversion.dat","r");' [. D" G( ^' v) \3 c' W& s
  769.           if(fp)
    & A7 D. B2 }) r" k' q4 N
  770.           {8 E9 K% J, }' q# F
  771.             fscanf(fp,"%s",szString2);- Q7 L* z/ {2 J! v
  772.             fclose(fp);) `: b' `# I3 ?5 C7 y
  773.             if(atof(szString1)!=atof(szString2))
    , d3 M5 E/ j# V
  774.             {" _2 B% q6 R8 U- L& O% ]
  775.               if(!Dn.Connected())' |) h0 P% F% S+ D" J7 Y  {
  776.               {4 z3 Z) e/ N  i7 s; @' @
  777.                 bFirstUpdate=TRUE;
    ; F7 I3 T8 d3 J. h
  778.                 dwTotalFiles=1;
    ; K" E$ P0 C2 F; F  ^# K
  779.                 dwDownLoaded=0;
    0 f8 F  j. a/ G
  780.                 bSilentStep=FALSE;0 ]2 X/ g' {4 F0 I
  781.                 bCompressed=TRUE;$ d( `* F! i4 b( M  n
  782.                 strExtLocal=".\\DownLoad\";7 _+ w7 H* ]* w) T
  783.                 strFullName="update.txt";
    4 k. h: Y9 \! U; Q4 Y
  784.                 dwProgramState=AP_CONNECT;
    9 j6 V% A7 k! x1 d' E
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      i- u3 G6 w2 ^: H
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");6 h. M& t$ k9 o7 Z
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    # ~' H  j; @( b- ~5 s# a

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

評分

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