找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
- ^2 C( ?' k: @  b! {/ u
  1. / RevApp.cpp : Defines the class behaviors for the application.
    3 o0 U7 k- ]5 [4 ^5 ?7 ^5 Q
  2. //! \' s3 I8 N. u1 e
  3. + F/ @1 I* c' E2 M# G4 X, V! T
  4. #include "stdafx.h"
    5 V9 c! h; D! P3 d' f/ w! T

  5. 0 {1 q- [; O: Q: @1 }4 I
  6. //#define UNICODE
    * {; ^% `+ q5 y
  7. //#include <gdiplus.h>
    8 ?) q% M1 F# m( p6 t9 h3 B
  8. //using namespace Gdiplus;. q8 [; G3 g) l( m4 N5 t, C8 F& k, \

  9. * I/ ^# g$ Q$ _0 ]
  10. #include "RevApp.h"
    * z4 D- y. J) T! {( U, N, x
  11. #include "RevAppDlg.h"
    # C  O9 c( b/ ~6 R. Q

  12. : I7 Y$ q+ A% b& B8 L/ A1 _
  13. #pragma warning(disable:4786)
    * {6 `1 A& c6 j: `9 `6 f/ O# o
  14. #include <map>/ ]+ G$ t: Q5 W* F3 H
  15. #include <list>, c" ]9 N9 O* V4 P$ V. c. A) `0 Y
  16. #include <direct.h>2 x" k3 W9 `% }1 o$ b
  17. 7 q1 O! v& ?3 j7 m: ~
  18. #ifdef _DEBUG
    - S, p6 g/ F7 N
  19. #define new DEBUG_NEW
    % {1 R  T- U  M* l6 P
  20. #undef THIS_FILE
    0 p3 ^( j( ]5 p5 b: p/ Q
  21. static char THIS_FILE[] = __FILE__;' S& Y# d+ I7 N- O- p' s/ Z- w
  22. #endif, Z1 o; t: m+ J7 C- }, k0 |
  23. #include "SkinResDef.h". s1 }  A) E/ e8 [0 J' K/ y/ L# P
  24. #include "ChangeBG.h"; w' W% Z1 D/ @; w- v
  25. #include "AFXINET.H", z3 n0 p2 o0 Z+ S; b7 F

  26. % D9 B. @; }1 }4 ~" _! b7 U# m$ H
  27. #define TRADITIONAL_CHINESE 0
    - c% T, U4 ]% C, z7 }) `
  28. #define SIMPLIFY_CHINESE 1
    ! ~* P/ x% o/ E$ y- \/ \
  29. #define ENGLISH 2
    9 V( k$ i9 J/ M4 T5 w. S, p1 T# b
  30. int m_iLanguage = ENGLISH;+ L2 L; J* u9 D0 s
  31. /////////////////////////////////////////////////////////////////////////////
    , K8 z# K5 I$ u3 Q) B
  32. // CRevAppApp
    3 V9 D9 s1 t& k: _' n0 a- o
  33. + p# X# w9 S0 C
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    9 J! z% r, c# P$ P) c
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    . d4 o5 w# S. N( F) [' z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.! z' N+ O7 a, e. o- j  ^- p' z1 C
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    # @$ f+ ]) r& s7 Z% ?+ x  L. y
  38.         //}}AFX_MSG& \( e" |9 S3 B
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    6 T# B. X) Z8 ]* [# n  t3 k
  40. END_MESSAGE_MAP()
    # X. @, E  y7 X: {. E2 r" q

  41. , S" d, d* p* l
  42. /////////////////////////////////////////////////////////////////////////////; i5 p0 [) a$ L- v, A: u! A
  43. // CRevAppApp construction
    4 a* D* z) Y8 N

  44. 7 d* q0 E. w$ L
  45. CRevAppApp::CRevAppApp()
    # e. l/ F+ u6 k1 P$ @7 q  K
  46. {
    6 o9 s4 l; i! k0 ]  t! }
  47.         // TODO: add construction code here,
    * A% s6 j. i2 ~+ W* t; ]
  48.         // Place all significant initialization in InitInstance
    * k; g" a, l: f$ Z$ ]( c7 P
  49.   bDisplayIsBig5=FALSE;
    $ C6 H5 M" `) h0 U/ a- L$ j
  50.   bRestartUpdater=FALSE;
    * Y$ e+ u' t& L  b  b
  51.   bFinishUpdated=FALSE;
    % F: o7 D! ]* T3 A: O7 S0 A/ Q
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;9 o  p+ Z( ~6 ~
  53.   InitChangeDataBig52GBKS();
    ' v) e$ u# f8 b
  54.   InitChangeDataGBKS2Big5();% s6 n- i- h- t+ p! G
  55.         //
    / ?8 t: r& g* Z" D8 J2 `' M
  56.         bClickRunExe = FALSE;+ }5 L* g3 Y. X( J( _. e
  57.         //
    3 o+ u  b' a# R4 n: I
  58. }9 n0 ~! J! L2 {8 D
  59. : Z+ B! z3 F& X. g; S
  60. CRevAppApp::~CRevAppApp()1 _, q/ o$ s% |9 O5 ~6 N0 v
  61. {
    & ~% h+ o9 L) P* Z6 r" O- g& D  W$ N
  62.         // TODO: add construction code here,
    5 m) o/ ]& N1 w* U) x' R) J
  63.         // Place all significant initialization in InitInstance
    0 E* N" F3 R/ R& n5 g/ w- c
  64.   EndChangeData();% v$ a. J( s+ e: Z" T
  65. }1 x% Y  |' B4 R% u& d
  66. ' |+ ^. X# h5 z3 k/ ^- s: C" ^
  67. /////////////////////////////////////////////////////////////////////////////
    ! l) {0 i' B5 M
  68. // The one and only CRevAppApp object
    1 X; z1 r& I4 d4 ^! y
  69. - _9 S- S: y6 V3 b; M
  70. CRevAppApp theApp;7 F( n1 [. k) E1 w7 N5 l& R
  71. / q0 X' u7 H  h$ Y7 s& S7 C; A, B
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)' i# J  F8 h5 Y/ Z
  73. {) J' K0 t& G$ G+ M$ A
  74.   int iEOF=0;
      l8 r( u5 B/ a
  75.   char szTempName[MAX_PATH];
    - t* ]0 a3 I/ c9 a3 i, {4 e
  76.   *szFileName=0;$ i! S4 X/ w; C4 E
  77.   iEOF=fscanf(fp,"%s",szTempName);- z  [, b3 n; d
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ) M$ P+ v% }5 m: E+ J+ h0 D6 R* s
  79.   {
    5 ~: O/ B6 w% H5 T' Y' }) A  |
  80.     strcpy(szFileName,&szTempName[1]);# t2 k5 P% j3 C) d
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)+ s1 |# c8 X7 B! j- C  @% o
  82.     {
    - O) Z7 c/ m+ _; V. v; T' \
  83.       iEOF=fscanf(fp,"%s",szTempName);4 F  q; s8 b8 ]! E4 P8 e1 U# c
  84.       strcat(szFileName," ");9 V4 X" F  u) m; y
  85.       strcat(szFileName,szTempName);
    7 d& u& b( x7 ^+ p% ~- U* |* N' `
  86.     }
    , r7 o& m9 @. C4 n9 s4 a7 j
  87.     if(strlen(szFileName)>=1)
    2 u+ Z! k5 q& G+ y1 R6 W: m
  88.     {+ y  M8 p$ C% E7 k2 E" V
  89.       szFileName[strlen(szFileName)-1]=0;
    + s+ M  x$ G0 U
  90.     }
    7 R& Y1 O0 x5 {5 b' S' @2 R* k0 A
  91.   }6 C8 D, @( U% d0 C' Y7 w
  92.   return szFileName;% U) K# N" D" a( g! i4 S
  93. }6 X; H0 w& F, z+ O, D' j
  94. 3 u5 i7 I7 o' b% n
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( `6 F! G% ], p) u9 A1 P
  96. {8 P9 y; e( i/ I% ~1 T( T
  97.   FILE *fp;, R  {" D& h; o' @! m0 ^
  98.   char *key=NULL;" d4 o4 q3 c- K& W- q; }
  99.   char version[MAX_PATH];" {* b$ R( v5 B  E
  100.   LPUPDATEFILE file,olds;
    5 ^2 U# l8 }6 Z; l& |! @* R* @
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    , d$ r$ M! j0 E' n
  102. $ o/ a/ o& T& H
  103.   UpdateList.clear();
    , O' c  F$ I9 d- n6 u
  104.   UpdateFile.clear();
    / p5 E- }3 n% \/ C( c6 E% g# L7 q
  105.   if(GetFileAttributes(filename)==-1) return false;
      L/ `0 t. x8 U3 D4 N2 d* h
  106.   if(!(fp=fopen(filename,"r"))) return false;: }1 J3 w$ \8 ?  _4 d
  107.   fscanf(fp,"%s",version);. }+ E% k- T' K7 c; b% t  w
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }! ^! U8 t* G; g8 I1 m. o2 B; I
  109.   while(fscanf(fp,"%s",version)!=EOF)! h& D' M: Y4 q1 d' R6 q9 `
  110.   {6 ~' b+ ^2 f" H! n* q" X: s
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " d  k0 T6 y) I& J" x& i- F' T
  112.     fscanf(fp,"%s",file->path);
    ' g& A' l) e- F8 l6 d7 h
  113.     ReadFileNames(fp,file->file);6 b) t4 @" v5 W4 P1 q1 [
  114.     strcpy(file->full,".");, t7 w5 j! Q7 b( j2 U
  115.     strcat(file->full,file->path);
    * I7 e, V4 Y6 Z) q9 e' W5 a
  116.     strcat(file->full,file->file);
    . B  {! W; r$ H
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())6 X  C* |  g, f" r$ m2 b+ k
  118.     {3 |9 J( |8 v! d* v/ ^8 I/ B
  119.       file->vers=(float)atof(version);3 E6 ~- y3 ~* \. |0 q; p. \
  120.       UpdateList.push_back(file->full);6 H7 N6 e! U7 W& |
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    # E2 L  O9 ~$ o  g3 m- a
  122.     }9 u) q# u) ]0 |+ o. ^4 ]
  123.     else
    / G$ T) P" D; @* h7 N7 I
  124.     {' V" M9 ?9 _" T! j0 ?5 k* o& K
  125.       olds=(*p).second;' o/ Q) ?* e2 P" C( C5 `& W
  126.       if(olds->vers<(float)atof(version))
    6 ]  O# j6 J3 Q2 T5 O8 F2 w; p
  127.       {
    3 |+ ~* P9 `$ J7 q7 i* V4 p
  128.         olds->vers=(float)atof(version);
    + B2 v! V. z: Z) U/ l: i, G
  129.       }
    " Y, ~' q) e1 y( n
  130.       free(file);. ^8 G9 a7 E, k. v; T4 O
  131.     }
    $ ?; ~! y0 d; B( d  m# g
  132.   }# Z8 i2 z+ j2 d5 [: [" f) b# p
  133.   fclose(fp);
    8 C. D4 H  c; G: r. }
  134.   return true;
    ! c& B0 E+ w% W1 d" Q- S
  135. }
      [' R1 \7 f1 H! {
  136. 9 ?0 s% v2 Q$ P8 V9 P/ n7 b
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ; N6 o* u( F& i* N5 l
  138. {4 m  ?7 B! B/ K$ B
  139.   TCHAR  szFull[MAX_PATH];
    3 f2 r4 G  P, D! N: O
  140.   TCHAR *token,*inter;
    . n* e6 `4 k$ E' p
  141.   *szPath=0;+ J3 K' a6 S& ]4 x  K3 s; S
  142.   strcpy(szFull,szFullPath);
    3 E8 e! ?* |" s8 v- T' M, o
  143.   token=strtok(szFull,"\\/");* T- J5 C4 p) W
  144.   inter=token;, @  ^% `5 N3 C
  145.   while(token=strtok(NULL,"\\/")). r, C4 Q* m2 ]7 K9 a
  146.   {% K+ e& w  m: f# E
  147.     strcat(szPath,inter);
    ; [% |" |( v# e& r, |2 Z/ T6 M: i
  148.     strcat(szPath,"\");
    2 f% {4 O2 h& P" E2 g2 m( J- }
  149.     inter=token;
    8 w0 S" q' H3 c  N- V. [( j7 P
  150.   }. ?2 e+ N! c4 i8 L% G( F- H9 e
  151.   return strlen(szPath);
    0 _: H8 Q  M- C* `- T
  152. }& H' \0 s" q, i. v8 P
  153. 9 C: V6 h. t8 i" q8 |# I
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    - {- M' s+ x4 o+ W+ c
  155. {
    6 R- S$ P/ _1 z. @9 M7 Y
  156.   DWORD attrib=GetFileAttributes(Target);7 ]0 [0 ]! e7 I! w9 r$ E- h3 ^
  157.   if(attrib!=-1)
    $ [: z* h1 ^- s" B% F
  158.   {7 s( e, ]& w  }' e3 W$ g. X/ ]
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ @& u% s1 S; v$ m, J0 Q8 l5 T* C- {
  160.     {- \7 Y4 h5 X7 v2 e* N5 _5 S
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);7 {- k; [. ^* a& \' p
  162.       SetFileAttributes(Target,attrib);
    . q$ Z& N$ N+ F& C, {
  163.     }% Y# n+ d2 u/ A: d" N
  164.   }
    / ~: a1 Z! k- L7 W$ `
  165.   CopyFile(Source,Target,Erase);! j0 G( p& }& ^+ h0 u
  166. }# l- p! S( X: M5 K' T; Q' M# T/ m

  167. " V  y6 V3 d0 `" t# B
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ' ~5 l4 \4 d' |* ^
  169. {2 m/ R1 u. N& M2 g7 h
  170.      FILE *fp;
    1 ]* L' M) Y' U
  171.      char  szBuffer[8192];6 Z% _; }- o* F; a, w( X) z& p
  172.   va_list  argptr;
      W; o# X- a3 i3 U
  173. " j! i% r- D' J) O, c
  174.         va_start(argptr,message);# C2 |4 Z3 e; u: h. J# s
  175.         vsprintf(szBuffer,message,argptr);* K3 q! x4 w/ z5 y
  176.         va_end(argptr);, O) Y( C) a0 h( @- F- a- m
  177.   fp=fopen(FileName,"a");
    ; ?* d$ s( c- K. X. G: r' B5 B
  178.   if(fp)
    3 T- m6 \7 y$ m
  179.   {4 M( q. c! Q5 O
  180.     fprintf(fp,szBuffer);
    7 a- d& ]7 K& b# [5 B- e+ v
  181.     fclose(fp);
    8 |8 ^( V' b9 f" `
  182.           _flushall();: M2 x6 f6 K& J' {; ?7 ]
  183.   }
    * v9 ?5 o$ \; T7 `
  184. }
    2 R& ~9 J$ `1 V# |' e3 c$ n# d8 w; i
  185. ; E# d3 M3 f; c# C* R. A9 c
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    # v) T' ?: a# V( g% \* t) j: n
  187. {% t( P, ^3 z- w6 d. w- m
  188.      FILE *fp;
    5 ^4 K7 H0 T5 G; f7 j& x3 y2 @" i. a
  189.     DWORD  attrib;* m2 ~9 L: a8 S$ ^9 }
  190.   attrib=GetFileAttributes(FileName);  E8 G! t1 f: ?9 W  V* m3 R5 k0 t
  191.   if(attrib!=-1)  f6 E6 I2 H2 _) T
  192.   {1 D, q3 ?4 r, c7 S8 _8 m9 Y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    + z  g$ D9 w6 a
  194.     if(!SetFileAttributes(FileName,attrib))
    - G, E! @7 y$ z* u/ A  u2 o0 U
  195.     {
    : Q" G9 L& w( R7 s0 i0 H! V
  196.       return FALSE;* a3 g+ F  D+ A
  197.     }
    * j9 I' ^5 {+ x/ v! X! ~
  198.   }
    2 D+ v+ }' r7 l  j6 j7 U( k/ ]
  199.   fp=fopen(FileName,"wb");3 A! r% a# `0 m( x, @3 w
  200.   if(fp)
    . v6 g9 |3 B1 Q6 w, Y# D
  201.   {
      W" R( @4 h) E# ?1 k
  202.     fclose(fp);
    6 c! d. a- H3 \, m( @8 j, h
  203.   }3 J8 y& X% N9 a; O: {
  204.   return TRUE;* y' Q! I# c  t: p0 B
  205. }" o6 S' A; T& i8 u

  206. 9 F6 z1 I/ m! `( @7 h6 s
  207. BOOL CRevAppApp::UpdateLocalVersion(void)0 v9 ]5 O; q# _  v
  208. {
    6 i; |* Y! [! o
  209.   char filename[MAX_PATH];
    ; H- I+ [2 _- d) A( e8 Q0 _
  210.   LPUPDATEFILE file,olds;' K$ W, i$ I0 Y, P+ g* o
  211.   std::map<int,CString>::iterator i;
      Z( D% c5 ~' s0 c1 l
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 g5 h# _' ~( X  d) _6 Q4 a3 L8 y
  213.   std::list<CString>::iterator l;
    ) r* n5 M' i# }5 k8 n2 n4 j

  214. ) K9 D3 ~6 X  @4 ]6 c, E
  215.   if(bFirstUpdate)
    / V5 J2 |2 C( k: h
  216.   {
    ) v/ z, s6 C$ q. c
  217.     dwCurrFile=0;
    3 z  a/ O. t. {0 B
  218.     bFirstUpdate=FALSE;2 G% V6 Z! D- P! q: M" S! O
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ d$ H- l; k, S( n' A
  220.     {
    " E4 f$ [- F! A" E0 s
  221.       dwTotalFiles=UpdateLocal.size();
    4 P: ^/ ?/ j/ O" q% S
  222.       dwDownLoaded=0;2 B" n; |/ d; \# r! i
  223.       bSilentStep=FALSE;
    " c/ c' g/ S% [7 w, w8 G. Z# [9 j: L
  224.       bCompressed=TRUE;/ G" Z! z7 e" ~
  225.       strExtLocal.Empty();
    % w( }( j, j4 s& R5 G9 j/ i5 [1 R
  226.       strFullName=(*i).second;9 E- F5 ~5 K3 \8 k
  227.       dwProgramState=AP_CONNECT;" Q: o6 q8 V, {: [% N2 A9 ~7 W
  228.       return TRUE;
    $ Q5 i* `+ p! ?1 i" ]4 z3 X
  229.     }- u4 t6 e6 O. I+ k# G4 C
  230.   }
    , V; L# N- J$ M0 C, b
  231.   else if(bRestartUpdater==FALSE)! g" H4 w! Y1 V
  232.   {
    " ?( A" C" r& p
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())( W/ Z7 V1 C0 s  u
  234.     {% r) @4 G' j  e1 G6 ^* Z1 j
  235.       file=(*p).second;
    5 X+ v6 g- r' x9 f
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    8 \; Q$ }1 F3 \7 h9 K- L$ N& W
  237.       {
    9 b( x( A5 M! C' u6 t( n
  238.         olds=(*p).second;! ^" M3 y0 v& w% `
  239.         olds->vers=file->vers;
    ) v- E/ i, m3 ?) q
  240.       }
    3 m$ U: [" H- j: l0 D
  241.       else8 E1 k) f% n8 V, f' c/ i9 ~# M+ f
  242.       {& ?0 k/ l/ d# Q# {
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . q* S/ u7 ]: A# e
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    : u* z2 S: s3 G
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ! T6 v7 v  m3 v9 G
  246.       }
    9 n- t8 y6 S3 ^
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");) ~7 m8 t* i) r0 [3 N& @$ U
  248.       sprintf(filename,"(%s)",file->file);  G4 c( ~7 b( o2 a3 a
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 L' l, r' W$ b& k. n
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }+ J4 t/ d& G  V6 r+ _# M: I; a
  251.     }
    ; Q+ L* F- u: m: N1 _, h! H/ e
  252.     dwCurrFile++;2 [) Y/ {, {& E" U0 ]8 P4 I8 i9 a& A( A
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 i% A3 g" }* o) `, l# [
  254.     {" i* X! [) P+ e4 D
  255.       bSilentStep=FALSE;
    , h1 {& g/ N4 ]: m5 O
  256.       bCompressed=TRUE;: _# {- I4 `5 |* h* n* s
  257.       strExtLocal.Empty();1 T$ D* f1 R# p# O* A( T$ G
  258.       strFullName=(*i).second;+ Q- r0 C' Q, C# n
  259.       dwProgramState=AP_CONNECT;
    0 `4 m% ~2 Z3 s. G) i
  260.       return TRUE;: A  F! m. T+ w: p
  261.     }# |1 k9 U2 M' A$ f& `* Z4 \, ?& f
  262.     if(!bRestartUpdater). T4 H. ~' O7 r, k0 P
  263.     {
    ' o/ s$ H! U; m+ f$ m: A) z
  264.       int iCurrSize,iFileSize;
    0 o  G1 W) W& O& R
  265.       iCurrSize=0;* X8 j6 c" ?# Z+ P* {
  266.       iFileSize=UpdateList2.size();7 r- c" r2 I& ^: T) }
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
      q1 K: i: N$ I( z  Y! s- F
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    8 @& e3 k+ s# n, h
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");; j5 b) Y; C+ L: w; c. y. W
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 M7 \" Q: w# H" m+ \. E, d
  271.       Fclearf(".\\update.dat");
    * D- v  ^4 H4 ^
  272.       Fprintf(".\\update.dat","Bloodyf\n");! z! ?4 @% v( m1 M+ \
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)0 G4 b2 |8 b+ m, _5 _. w" S# O* c# O* u
  274.       {
    7 A. D3 q  {: s( |, F* S
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    % N& F  d- H3 O# ]
  276.         {% ?& N/ ^* L& W4 s, s) o
  277.           file=(*p).second;
    # `/ n4 U  b+ \+ l% w# [; p+ O" p
  278.           sprintf(filename,"(%s)",file->file);3 V2 f5 X* o5 {: X( d. e2 Y) R
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: `# D# M4 C% }' r0 e3 U
  280.           iCurrSize++;. W( D2 `6 M9 ^- o. a4 r3 p
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ( q# [. c. p0 p( a+ \& j* y4 Y
  282.         }
    ) \* g' _) G/ q3 d  X) w/ {/ X2 Z
  283.       }2 N+ G8 W; S- z, ^! |2 {' R
  284.       unlink(".\\update.txt");
    1 [  Q& a# S! r# B6 O
  285.       unlink(".\\update.tmp");- x/ m1 {: O' q3 [  g9 s
  286.       Fclearf(".\\checkversion.dat");
    - Q7 E  v- a6 w& }' A) H* ^
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    0 ~7 o. R) Q( H$ v6 O
  288.       if(UpdateLocal.size())* K5 d' g! x1 H3 n- z7 }; ?% e
  289.       {
    , g4 f) c  D, j' R
  290.         UpdateLocal.clear();# W  e# h: s8 r. ]  ^
  291.       }
    6 |/ S( m# A' o: W( Y
  292.       if(UpdateFile3.size())
    0 o# n1 g6 n. M9 a2 @: j! b+ s
  293.       {
    1 N5 U( K5 m: H: {' B1 x) Q: a) S
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* S3 E) A: l! m+ [! A5 X% E
  295.         {! [4 |1 L3 l7 Z! X0 \
  296.           file=(*p).second;
    ; y& X) v2 t/ L) J8 ~
  297.           free(file);
    * w+ \5 f2 g/ Z! t9 W- E
  298.         }4 r; D7 m8 d/ Q9 k, o
  299.         UpdateFile3.clear();5 V5 N0 c( V* y, P* b
  300.         UpdateList3.clear();/ O$ ?0 a7 u; v4 @$ x
  301.       }
    : ~9 w* P& x' E% z+ _& {& }. n
  302.       if(UpdateFile2.size())
    5 Y) \- [3 v2 _( z7 J6 d! O2 k
  303.       {
    5 ?. o4 [, l& G, d4 E7 J
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)/ H  n: M% `# ^/ ]
  305.         {
    " b6 r  ~) k3 K- w) p; m" p
  306.           file=(*p).second;
    ! e" j" f/ D. t; U, a# T7 \+ q
  307.           free(file);
    ' I' M! c( b1 u
  308.         }9 r# b0 {& D; l( Z# _
  309.         UpdateFile2.clear();. s  F4 M2 W% k/ |
  310.         UpdateList2.clear();
    / `8 O  A1 V4 h! ^, E
  311.       }, D4 P7 N" o9 {" ]1 P0 l: O1 ]
  312.       if(UpdateFile1.size())" e1 E! m% k4 ~5 H- M! N
  313.       {5 G; |: J& v, m3 ^3 f
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 x4 \! s4 q3 c  ?- i+ z% W
  315.         {
    8 O& ^: X" L, q$ c0 l- C5 M
  316.           file=(*p).second;) ~. t' G% i8 c% ^
  317.           free(file);1 x2 _6 D: K. x* F: y  T9 Y
  318.         }4 O6 {1 G5 H2 c2 X" }/ \
  319.         UpdateFile1.clear();
    ; j% f& P+ }3 j6 c$ k
  320.         UpdateList1.clear();
    $ k$ P9 U1 w* t; F# ~' x5 o1 W
  321.       }1 x4 |8 i) q, V4 p
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    + y9 m8 N6 ^: K
  323.     }: R7 I+ C' A! i! ^
  324.   }
    ( k# N0 m. V% |) w& k% z% D/ B
  325.   return FALSE;- F0 G0 A' s# W% A: s
  326. }
    / w4 S! v, Q1 U9 S

  327. ) }, ?' K( `2 ^+ t
  328. void CRevAppApp::ClearAll(void)' l  j7 Z8 G/ P- Z1 ?. B( x4 U
  329. {
    ) N# ?% a8 R- x+ C* q3 J
  330.   LPUPDATEFILE file;
    # Z5 d1 ^) u+ k6 l
  331.   std::map<CString,LPUPDATEFILE>::iterator p;& ?. d6 \  p: [7 r* m1 H
  332. ( V0 B" X: a) ?6 @0 `
  333.   if(UpdateLocal.size())
    0 {' w- E2 s& s: K: A
  334.   {
    9 v" _4 [' N/ @7 [; {) G
  335.     UpdateLocal.clear();
    3 F  S& `# B- V. O2 i
  336.   }
    , [( B" I+ p- }% w' ?" F
  337.   if(UpdateFile3.size())4 R7 S6 A- z7 T! f: I+ b4 z8 G' ]; E
  338.   {
    1 Q- }6 L' {2 W3 x9 ^+ p
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    0 k9 j& u  M8 s( b  e0 [
  340.     {
    , |) q( ]) F% S' P
  341.       file=(*p).second;3 B6 I$ ]5 ~1 T0 b4 `1 D5 R& |
  342.       free(file);
    2 r0 V8 j! V; b9 S. [" A
  343.     }* n9 @9 {) `% W  @4 q; h6 H* c; s
  344.     UpdateFile3.clear();
    ! X5 h9 Q% C: a4 ^+ H- ?
  345.     UpdateList3.clear();9 ?9 s4 |! x& p% q1 Q
  346.   }
    2 t0 q& q4 V$ c0 }
  347.   if(UpdateFile2.size())
    . I  E1 f+ o5 N0 n& f& P7 f
  348.   {
    " q: |/ g) `  \
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % P$ K" X: m. b; u2 |
  350.     {$ n% g. j- L- Q2 m( I
  351.       file=(*p).second;2 p& ]5 s( j' f/ r! k5 q6 T
  352.       free(file);
    - ^: N- Q2 S$ Q6 d
  353.     }( D' G& S+ o9 J! o& T7 z! _+ O0 g' o
  354.     UpdateFile2.clear();
    ) j9 r1 r9 z# I
  355.     UpdateList2.clear();
    & q1 y- }9 O5 H  K
  356.   }
    9 e( q6 u4 ^; F9 c( D2 b
  357.   if(UpdateFile1.size())
    * t( B$ m4 P9 ~
  358.   {
    + M( ?0 x- J% V' ]0 P
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* t# P" N' ]7 P5 E) V
  360.     {* m$ h9 ~2 u* V0 {8 M. i; C' R
  361.       file=(*p).second;
    $ z- W9 E* ~* o$ V, o; I
  362.       free(file);
    - J, E9 _3 r1 L' W0 T
  363.     }5 G% C# X) ^9 v4 n6 N+ ^
  364.     UpdateFile1.clear();' {- k$ F' R. p1 R
  365.     UpdateList1.clear();$ [$ c  L8 P/ X7 n. V. M
  366.   }
    " w4 K$ ]6 O* L- W( \# J
  367. }  
    : o; L/ r6 S1 m* R4 C& e
  368.   
    $ {+ ^, S& O& H' U
  369. BOOL CRevAppApp::CheckLocalVersion(void)* e& i* c2 _& {* C
  370. {: L, l7 |9 {, s/ |& O  {' @
  371.   int c;
    2 }+ ]! p$ j5 g% m1 F& P: C
  372.   LPUPDATEFILE file1,file2;
    0 |/ p( \7 ~6 P5 L; T0 O7 {" l' ?
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    7 }. G( b. `3 ^$ y. @
  374.   std::list<CString>::iterator l;
    & x0 N+ a% C, d- U

  375. * v" `0 N3 k7 }1 X  X
  376.   UpdateLocal.clear();: |/ p" f. {3 @' J" `
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    3 Z$ F0 ~# h6 c  @9 U! l0 _0 Z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);" Y" V& m2 Y: v; n0 `! O" ]
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    / z, L6 H. X  i5 N! z$ r* [5 u+ M2 }% b
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);4 {$ w" J* x, ~0 c
  381.   if(UpdateFile3.size())# f2 M) i# S" |- R
  382.   {& E6 [4 P$ b* {3 d3 |
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)! a' o6 S: [" ]! K
  384.     {3 C0 X, Q; ~1 A! K! C
  385.       file2=(LPUPDATEFILE)(*i).second;
    ) b% H) v, j' K$ w) H
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()), R2 r, b8 y% {! b6 F4 I7 X4 K8 f
  387.       {
    6 v  O! E( J% `( X. q
  388.         file1=(LPUPDATEFILE)(*p).second;6 C& U) c. ~5 h& C2 O% p
  389.         file1->vers=file2->vers;
    ! D$ \& @  ?6 F" S: F
  390.       }
    ' d4 F9 z* ?7 o
  391.       else  [5 M& {& h, I8 [* @
  392.       {
    + c! v* f; i/ Q0 L3 C
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# H# S3 F; Y8 l* p. `2 D
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    " a! Q! J1 S7 x$ T
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));6 n" u) z" n7 m
  396.       }1 q9 ?' V1 M; e& |0 t4 p8 y
  397.     }
    & e& e5 D" D1 x$ l: d1 B2 E9 e
  398.   }
    . [# a' U9 l! n) s9 T3 g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; H5 N* p8 P3 r' e+ Y' R
  400.   {
    0 _: j5 a; W; ^) ~$ T
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    , r$ E1 V% v6 E. Z
  402.     {* S) u; u3 r: c- g$ K
  403.       file2=(LPUPDATEFILE)(*i).second;
      O: L- Y8 e7 [% R: g' V4 Y
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ `: S8 U  }; m6 x% P* b
  405.       {
    + F% t! e  y6 M* ~5 i& Y" I
  406.         file1=(LPUPDATEFILE)(*p).second;
    9 X5 X. N8 d9 i4 O
  407.         if(file1->vers!=file2->vers)
    ' J( C- F& T$ P# ?
  408.         {
    % R) L( n3 H/ S* |" d4 ?1 a/ O7 U
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 f4 O7 M( R5 j! a; x' U9 u
  410.           c++;
    1 y" \! W  w5 i1 w  a! P2 w% [$ i5 C
  411.         }: x, v" V6 O! s
  412.       }
    ) S: ~/ q8 V" a$ N+ A5 f1 m
  413.       else( n2 u+ f; A) C/ z, P7 L
  414.       {1 {1 P- t& i; n2 R" T0 Q
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));8 G" r5 A9 x0 }
  416.         c++;
    , l; b$ L) d( C) ^; ?7 w+ t
  417.       }
    , r* L& e: C3 c4 b* }4 A) w1 \/ h
  418.     }
    9 v& Q: u8 @* O8 n6 \
  419.   }& _+ o5 s) m! s1 A- |% J# K/ M
  420.   unlink(".\\DownLoad\\update.txt");
    - M' k( F8 A" B$ ~0 ?* `
  421.   if(UpdateLocal.size()) return TRUE;
    ! Z9 ]4 i! F1 o
  422.   else                   return FALSE;4 ^. I8 c. Z) g
  423. }
    6 U2 o, m6 P; I! E8 j% Y

  424. " @3 a: x5 J. o& ]$ H
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"; Y# K8 Z8 z: X( [9 I
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    9 |: Z" c4 M4 B" _/ [6 c, Z

  427. + h; T2 u1 q5 A/ ~4 y

  428. $ ?: t' X# E3 {% ?) Z! M& }" A
  429. $ W- h$ B! N5 I) p. |) N! M
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    " f' I: W( X% Q
  431. {
    * K( W8 q& S1 N( G1 D% ^, n+ }
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    % g0 y2 }& ]  w8 {+ x" \
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# p& k" a4 L5 H5 y# ?6 ]
  434.   {+ I) j# o  y( ?  k0 t
  435.     char szLanguage[50];
    9 r; _/ e4 s" D8 G
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 x& w  Z# O1 S
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 D  A$ Z2 [; E/ |0 Q5 X( n
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 Y8 a+ A4 @. Z# q) I
  439.     else                                   m_iLanguage=ENGLISH;3 V! O3 |7 g3 `8 v* M/ {" r! F
  440.     char szRegister[100];0 i: w8 x$ y, M) u
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : M& y9 ?2 Q0 Y% @; |$ {: V( U
  442.     strRegsName=szRegister;$ p% L4 v& @% P
  443.     char szPatchURL[100];: K' M+ g' E% U, j
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : ~5 \/ W! _4 x5 N! I1 L( O( M2 _
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 ~# w' S' \% q
  446.   }
    , p& _9 X7 {- \) k
  447.   else2 }. N, e7 F& T
  448.   {
    + M7 r  _6 S% F! `: W4 R
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    0 V& N9 l/ j% u5 |+ o
  450.     strRegsName=DEFAULT_REG_URL;
    1 X- o5 |: f% c) H5 r" Z
  451.   }
    * z7 H! ?7 i# u# f8 O/ q
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ' c* v# ^- L3 M1 p! C  v
  453.   {. i! t( Z) I* K; v9 p4 M
  454.     char szIP[50];, j: e- W6 \& _- S/ [
  455.     char szDIR[300];
    & G+ K0 A' o6 F4 y, j$ m9 O: @% \
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; o+ j. }& W6 j
  457.     {
    % k4 O8 ]# L4 ~9 Q6 t
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");- i+ n7 g+ O2 B* s( F0 P
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ; `2 M% d- ?7 {6 L# _- q+ |
  460.       strHostName=szIP;7 F2 P3 E4 o# N/ {/ Z8 t/ Y3 [- m
  461.       strHostPath.Format("/%s",szDIR);
    5 k8 a. @* B% M$ Z$ ^3 p
  462.     }" Y! G0 e' E0 `! d' H  t
  463.     else7 V8 T0 n* v3 n
  464.     {
    2 l0 @1 g6 G( m2 z0 L2 }: H
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . A7 Z' B( m& o2 z4 G2 h
  466.       {
    5 J3 ?6 D/ V  K# l/ o0 x
  467.         char szLanguage[50];
    ' ^+ S0 g  B0 P# F8 L
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 h$ g' D7 G9 C. ~/ ?3 Z
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 l$ D1 x: m6 U5 p
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* B. ]8 N* W/ o* o
  471.         else                                   m_iLanguage=ENGLISH;
    - T. _* u: r5 P) d
  472.         char szRegister[100];1 e% i' B8 f- S$ j7 G% Q# ~
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& E1 f$ {  [  c& n% z
  474.         strRegsName=szRegister;6 v( X0 e3 c: ~- L" Z( p
  475.         char szPatchURL[100];" F7 N* m" b( D* F; A0 W
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 W! x6 W) \; {1 I7 N
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 ^8 ^: e! W" S# ~  U0 t: V
  478.       }
    - E- a; G5 I. u/ e1 V
  479.       else
    / M$ }2 D2 i0 @5 ~7 T: j1 i- f
  480.       {! |! O9 M* B' y! `3 m
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % O5 s$ f) L  _3 O% v& {2 ^
  482.         strRegsName=DEFAULT_REG_URL;
    ! r0 V) ~+ o* i5 S
  483.       }9 Z& H% K. `! ]% P1 @
  484.     }2 X; U$ V7 W1 B1 S* s
  485.   }5 P, j5 _7 G8 w* n- U
  486.   return true;2 C, v) L6 \* y! \) l; _) x
  487. }2 {  s3 h- @5 G4 u  z8 R( ^: G
  488. # W, ~: Q" L. d
  489. #include ".\ZLib\unzip.h"9 h4 i6 d+ i4 m7 J1 B% R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);7 n3 ?( J8 C* e$ s
  491. /////////////////////////////////////////////////////////////////////////////
    # w7 p) X1 n9 @. N& ~! p
  492. // CRevAppApp initialization
    0 z7 B6 N+ B: q; j! h) v+ E
  493. $ d! h; q* g! y
  494. BOOL CRevAppApp::InitInstance()
    # x$ z. L% \. `  }3 x
  495. {
    ' ]  I) x+ \/ {2 I
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];" ]+ d. h2 `3 D  h
  497. 7 n) C9 {( e* a  O* \3 R
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);, I5 b: [* R; Y* q2 D6 \1 g
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))6 C, H; w- f: ^: _' G# Q+ [: Y4 z
  500.   {
    ! F2 |+ Y7 t  @
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");8 }+ W* v" k! m
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    2 g# n8 r5 m6 h
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    5 D& |. g* u, h' a
  504.     {
    5 `* ?" M, d/ Q4 W& q: J
  505.       strcpy(szPath,szPathTarget);
    9 v  f  u$ k% p( C9 n- \$ a# @
  506.       SetCurrentDirectory(szPath);
    4 t# Y% \# s+ R% a1 Q: A, P
  507.     }
    / G8 Q3 ~0 i, S/ f! U
  508.   }
    0 o/ |; y. H8 A9 G6 {
  509. #ifdef _DEBUG
    , I' Q- \& F! {% {
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ G3 @( F9 C' ~! L, ]$ `
  511. #else0 ]% @  s* T8 U* \0 B
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 h8 ^: l: i1 v# P! L% P, T( f
  513. #endif1 j3 C, \% ~! C( @' F  h! p. B  b
  514.   {
    6 m( U: n2 }7 k8 F: l5 @2 T1 m7 y
  515.     char tempFileName[MAX_PATH];0 e% G0 n. {$ y+ Y& ^
  516.     strcpy(tempFileName,szPathSource);& g" S2 }# T; n7 k3 W( Z; P
  517.     tempFileName[strlen(szPathSource)-12]=0;: n& G, U6 [- k/ p" p- E
  518.     strcat(tempFileName,"\\$CSUpdate.exe");3 o$ }  ~3 V, q" n0 W% Z7 p8 J
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    8 q5 E' s: V, D: y& x% M9 X
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);' X2 v2 h8 l# C0 x) o
  521.     return TRUE;, ]( s1 `3 _8 s7 O
  522.   }; k% x8 a, I$ B
  523.   // Nuke 0118: Delete run.exe# j. S/ K1 t, s; c( k5 K0 y
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );7 I4 L4 ^! \. ]4 a) X
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");0 Q. E% M  w. T/ X' X, Y
  526.   if(!ReadCfgFile("Config.ini"))
    7 ?4 N" j: C) t/ h) p
  527.   {& N7 R4 h8 v# h! i
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 ^; Z  w/ v4 f) h2 w! k
  529.     return TRUE;
    0 }! T, R0 ^3 W2 R" J. n/ z# {6 q
  530.   }
      Q- K3 @5 L% C# V6 u; C
  531.   HANDLE mutex;
    0 T' e6 s  G8 @1 O# ?
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    4 j. e' L0 C' ?! Y9 p
  533.   {
    ; O6 t) O. j' Z; C1 [: n# ~
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)/ _4 f* \5 e7 a$ z; o
  535.     {
    * O( e4 ]1 g& r
  536.       CloseHandle(mutex);3 B. [; I2 l+ @
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);, @) g* D1 y, a+ S
  538.       return TRUE;
    : f8 O8 Q# A% o$ T
  539.     }
    7 b; Y! N) g$ K2 O* X- q/ s
  540.   }  
    5 E) z( _5 q) e: }% O
  541.   CloseHandle(mutex);
    & |: \' w5 q+ M

  542. ! s6 v) f" O3 a* o% u3 p1 U
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);! S" P$ ?; d* Q) J8 F. M3 H- B
  544. $ k1 ~" b2 T  }0 k! Q/ W& C
  545.         AfxEnableControlContainer();
    ( ?1 K% {  Q1 e" S- K! F

  546. ) i7 k$ ~( D+ P9 E, O( s1 o
  547.   bCanUpdate=FALSE;
    0 o+ [* }0 e8 D0 I
  548.   dwStartUpSteps=1;: j% Q0 [" [2 Q9 T
  549.   dwProgramState=AP_NOTHING;
    - p1 c% a& K2 I5 S  B. U& u, j. H
  550. 9 Q1 W- |+ E2 c" }) I! Y! _
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    , E( l: j( F6 q% H' p! I) z6 E; p
  552. . D: ~2 L0 \/ N: b( d4 D$ e" P
  553.         // Standard initialization
    8 S7 f$ F$ F2 P. o
  554.         // If you are not using these features and wish to reduce the size
    1 G. d" L1 O# p3 i" s; q- ~
  555.         //  of your final executable, you should remove from the following, Z9 q3 p+ j6 F' J% G
  556.         //  the specific initialization routines you do not need.6 {9 S$ ]$ ^. w% c& x

  557. 2 u. A9 h; k# R
  558. #ifdef _AFXDLL
    . }+ F  ?3 U! s+ j! f
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    $ {) l- E0 Z0 C4 g' u
  560. #else8 i/ u. G3 t) {0 L# S; R( o
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically  z; t2 ?' F; ^) W; j6 H
  562. #endif
    4 I! A- X/ D9 `0 P+ C. B

  563. , w! m7 V3 k$ r4 G. @# j
  564.   dlg=new CRevAppDlg;3 d7 @: F8 J* Y5 o
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    1 J* q5 d: l) w! z! e& u
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    . A/ j5 u9 b) d: ~" M( o* \  n
  567.   m_pMainWnd=dlg;# s$ g- y# b5 h5 R# d
  568. ) d) I$ U6 N& s
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    / {( X, Y/ F! l7 H1 v4 h

  570. ( h1 s. X" O4 G
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ' v% ]3 M6 T. N" F& b
  572. //  ULONG_PTR gdiplusToken;; r. {8 x; t8 E1 u  S6 ]2 I) f
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);3 B, B0 h6 T* y# d; P9 b

  574. + J5 q. o& r7 y" R
  575. //        CRevAppDlg dlg;/ h- q  u, g) U- B
  576. //        int nResponse = dlg.DoModal();$ A8 ]7 Q! E: Y
  577. //        if (nResponse == IDOK)# H. H- K, Z( g( {+ n! K( z
  578. //        {
    1 c& P- I( \* _9 W6 S4 ^1 [* M
  579. //                // TODO: Place code here to handle when the dialog is
    ' [& X+ U3 E6 q$ e5 n
  580. //                //  dismissed with OK
    . s. O2 u. ~0 B, i4 T
  581. //        }5 |* g; d* ^4 n# [* A0 I
  582. //        else if (nResponse == IDCANCEL); P, @% i8 x+ @( c; u& U* Q
  583. //        {" N; L$ \' p, E3 o, ~) l* a
  584. //                // TODO: Place code here to handle when the dialog is# d" B+ M5 _6 P
  585. //                //  dismissed with Cancel
    $ p  \% I4 y% c, o  T
  586. //        }
    4 U' g* J( ^$ }/ T, g
  587. : h& f2 p2 E: l- r1 {. ]9 z. e- F
  588.         // Since the dialog has been closed, return FALSE so that we exit the$ R  G; d; z& `4 b0 f; a. f( k+ j
  589.         //  application, rather than start the application's message pump.- v7 w. ^! l  }$ D$ z' D" \
  590.         return TRUE;( \( P& t4 ^: U! f4 p& h* }( g1 v
  591. }
    5 \3 o) z/ G# j- j( M! D
  592. / v2 X. n- a' v! K! o
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 `/ T4 b1 L( T% I3 \# L; N& Z
  594. {
    ! C' X. C& }% C' B; v2 k. _- K& n
  595.   int i;
    : J' S* l' V% l6 h( n, ]& @
  596.   char *szRet;: O# R9 X5 g  {0 r
  597. ' P: g5 }( L2 {) I
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    2 ?* z" ?9 g! H& f
  599.   if(sztoken)
    - k/ p2 r2 d: }1 ~( s
  600.   {
    ' ?, e9 ]9 z" E7 D' s% |. ?  Z# J( t
  601.     szRet=&sztoken[itoken];
    0 P9 V: E, B1 n
  602.     while(sztoken[itoken])
    9 }. G$ A8 ?. D$ d# T# z
  603.     {
    ' V# B( D4 V/ P/ B3 R+ F- M
  604.       for(i=0;i<(int)strlen(token);i++)
    1 n/ \9 F( A* f( t+ }
  605.       {* e6 @  H2 T! c; U3 H0 r
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])2 N# v' O) V" H, F, L/ R2 C9 ~
  607.         {
    5 K. S: E% S" m. O" B
  608.           sztoken[itoken++]=0;* O9 w  T$ d/ ^/ A" Z
  609.           sztoken[itoken++]=0;( e- I& |7 ^2 T1 Z  w5 i. T
  610.           return szRet;
    $ ~2 K  _! F. C4 u; n
  611.         }
    6 g0 G4 A+ L$ ~
  612.       }2 R, ~( t0 R% a
  613.       itoken++;1 H0 M5 U- I! J
  614.     }
    $ u" [& @( I7 l4 i% n% T
  615.   }: V4 S0 \$ a1 }. j2 Y! d
  616.   return NULL;. r$ w- Z5 a! l9 ^' C! Z
  617. }! I) D7 @0 f& [" L
  618. 1 S0 M' p! l& Y, [" t( f  i
  619. void ProcessProc(long Total,long Current)
    ! s% X1 g  \3 l! e
  620. {0 V  ?! s9 ]. `' }. ?6 [( a
  621.         MSG msg;- {* e1 l: U: @, Y3 @
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    0 b3 j- y) b/ x7 @% _: K
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));3 u3 q* z  V4 E& T% r% [
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    , |3 H: i! H1 r0 O. g
  625.         {
    / C( X0 Y% q6 I! ?* t; ~- }
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - A$ L5 i. Z! {( ?& I( o0 k6 o
  627.                 {7 v! [* o6 c. V5 G
  628.                         return;  K' @8 Y& I8 ]' \* _  ]3 K/ u% z5 q
  629.                 }
    . c0 ^* s; \( A* P; C  g2 E
  630.                 TranslateMessage(&msg);7 I7 E# ~7 q2 v: F
  631.                 DispatchMessage(&msg);
    * i5 U. i$ y( F4 [  g( q4 ~
  632.         }       
    - w* V5 V- i( @/ O
  633. }
    , C1 c0 N/ y( \3 i: @( a

  634. # g3 ?0 j  f* }, T9 R7 W& p; [
  635. BOOL bFirstChar=TRUE;
    / j3 H, ]$ [; X4 S' d
  636. 2 I  c8 m. s6 R* k# |
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    : {. [7 M/ E! k4 b9 S, N
  638. {
      |1 ~4 f. S3 @( `, `( k) Y- ^- [
  639.         // TODO: Add your specialized code here and/or call the base class. i3 P( G& a8 R3 t5 g6 \% d, v' @$ O7 }
  640.   switch(dwProgramState)5 |% P% k- ?- D* `3 O/ v
  641.   {+ F9 h4 O1 N4 y  C; b5 {, R' H: X2 X3 s
  642.   case AP_NOTHING:" w& u1 T# G0 |0 m& T5 L
  643.     switch(dwStartUpSteps): l: @8 E3 e4 g3 t7 U) b9 |- d; x
  644.     {
    5 Y& M+ s, \. n1 O
  645.     case 1:+ X) h- B5 n( j# d) a! s( r3 u7 }- {
  646.       {
    5 b7 |9 T- t  S9 O1 e3 C
  647.         int i;
    ! `) W3 ?* H7 l& O4 {/ d. v
  648.         CDC *pCDC=dlg->GetDC();
      x9 ]' i+ L5 c' @+ O7 S; {( C; A
  649.         HDC hdcwnd=pCDC->m_hDC;( L$ E6 q- J: q$ \; c, c% z
  650. //        Graphics graphics(hdcwnd);
    & {) G' u( l& O; Z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");. _) s( e) ~% L+ g% v
  652. //        INT iWidth=bitmap.GetWidth();! A  Y" E& v+ U  T0 c* o4 s" Z
  653. //        INT iHeight=bitmap.GetHeight();
    ! @/ r6 I) K% c$ Z2 [  D9 E( {
  654. //        Color color,colorTemp;- Q% d- _( u0 T) h* h- f
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    6 k8 P! H7 e* q% v" v! `
  656. //        {( K4 B! p$ t# I+ ~
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++): {. _0 W! ?* I- |& F
  658. //          {5 @5 \7 X6 T: x3 Q3 U
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ' e& f) M0 l  {( J  o
  660. //            colorTemp.SetValue(color.MakeARGB(/ B. D2 w! H. P0 }/ \! ^! X( W
  661. //              (BYTE)(255*iColumn/iWidth),
    5 z. H/ m, X! u7 d
  662. //              color.GetRed(),
    ' u- U$ h6 d- z
  663. //              color.GetGreen(),( n6 x; O; E/ v: G( j! |  |" i
  664. //              color.GetBlue()));7 j' D+ b6 w  H9 O
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);4 n0 q: h, J& s7 x, Z( J
  666. //          }/ \. L0 G7 J, z) Y) u: g  e
  667. //        }
    ) _7 q/ K3 R$ @0 X7 a
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 q# W- y, \8 e- ^0 J  Z/ M+ i
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & S* [# \3 j6 T3 y. u5 f
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    6 G0 d, N7 e4 Z4 Q# M5 ?: r
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! s& O4 R- f: _# `
  672.         for(i=0;i<240;i+=8)
    & k- O# a9 `) a- \  `
  673.         {3 u& @2 Q) j1 B" r1 H
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 ]8 H% a; Z6 x2 W1 ~( M
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; J, P- r7 |! b  D, R" C
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 s1 Q6 U( {; x* A
  677.           Sleep(33);
    1 W: k* X/ E; s
  678.         }8 F) }2 j* q, _( a. D3 O
  679.         Sleep(1000);8 B/ H& u0 _/ H/ K
  680.         for(i=240;i>0;i-=8)0 ~9 w4 D" V; M) w% c
  681.         {
    " b3 b; ~0 V2 T, H3 [
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      G% Y* E( ~: o6 ]& G8 F" b
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    8 m8 x5 z/ }" t7 l+ ^3 v0 W
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ k& r1 X4 r( J- P- d; O7 R8 a
  685.           Sleep(33);
    5 t+ i' y2 d3 x  o/ f- |
  686.         }* o8 M# n+ y! C3 c& a, d$ {
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 y2 d7 t1 \& ^/ S$ F% i
  688.         dlg->ReleaseDC(pCDC);( I9 @7 X/ q, t& X6 p3 M& T
  689.         DeleteDC(hdctar);) g$ o7 x7 ?; w* _
  690.         DeleteDC(hdcsrc);
    6 d8 Y' x* _9 P0 c1 j4 n4 O7 w
  691.         DeleteDC(hdcorg);+ P- C  G7 @. l+ q, P
  692.       }
    + l  x, r2 _8 d, |$ d( g1 g% F2 F
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);: w1 d: m( w5 J& a9 `: a
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");6 Y7 U6 w0 q/ L
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");7 f: L/ p' z  C9 S! g  {
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    2 x& Z4 K  d" G
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + R5 }2 S: x& H$ E5 u
  698.       if(!Dn.Connected())
    ; b. r& [: g+ G$ @* G2 s
  699.       {, l2 n0 n  ^: F' k
  700.         dwTotalFiles=1;4 H6 `0 H) i; ^" L" U- g- x8 y
  701.         dwDownLoaded=0;
    ' S3 ]1 o3 ?  Z
  702.         bSilentStep=TRUE;
    ; h6 k1 C0 \  f$ N6 P8 k" k+ o1 z
  703.         bCompressed=FALSE;
    2 W# {) }" B7 y1 B" K& ^
  704.         strExtLocal.Empty();* w( n1 n& `) d9 k# O
  705.         strFullName="readme.txt";# b2 ?! d) t, t8 L' y
  706.         dwProgramState=AP_CONNECT;) x' h# P! R6 E2 Z( J! t
  707.       }/ h* V) n' I1 E" u, ~
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    7 D: X1 r  H1 _- L' c
  709.       dwStartUpSteps=2;8 X% t# w  j/ ^
  710.       break;
    . T2 m; L" `( k0 r+ F# j+ g
  711.     case 2:
    4 w4 z  d. u  w  h' R
  712.       {
    ! s3 ?! N" ~: u) e4 m) l
  713.         int iEOF;
    9 J& U5 \3 p# i, V
  714.         FILE *fp;
    : Y5 r% B6 S. _, `9 I' L7 u, P
  715.         char szString[512];
    6 O  E  i0 }& R) S- ?
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 P# j0 ^/ g0 s# |) K' v2 o
  717.         if(fp)
    3 _' a, }" ~7 M
  718.         {5 x. F- C! t! w8 ?1 T6 Y& |7 M
  719.           do
    & L& M: e. F6 j& h; q6 t" M0 U
  720.           {. j4 ~; f$ D1 m4 B  S8 D
  721.             iEOF=fscanf(fp,"%s",szString);8 r# I: S  ?4 y# _, C# `2 M6 \- r
  722.             if(strlen(szString))3 u2 i5 X1 G  Y1 ~8 w
  723.             {
    ! I( N: I8 L& m1 N8 s# R* K3 R
  724.               if(bFirstChar)& B5 _9 N/ b; J& Q' b; h/ `; `
  725.               {- s5 Y' ]& \; Z4 x
  726.                 bFirstChar=FALSE;
    9 y0 k7 o) C3 Z) J
  727.                 bConnectIsBig5=FALSE;
    * O( W4 l8 m) l" d& U
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;( ~7 ?" ?5 m' k* R
  729.               }4 H" {5 c. t$ X3 B" A1 Z
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    & y6 t! i. v5 K% n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    9 Y) d. Q- A1 Y1 c% k- S) l
  732.               dlg->m_ListText.AddString(szString);* }/ L; e- E$ W4 ?3 J4 g6 N* ?" R
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 D2 D3 R% q$ u5 d# D
  734.               *szString=0;$ [: F2 X% L' m2 x* L2 G/ P
  735.             }2 O6 i6 B+ ~3 {9 D
  736.           } while(iEOF!=EOF);
    & B. o" C# r0 r9 ]4 z; ~
  737.           fclose(fp);
      K; h1 W4 k# P1 Z8 E0 x4 ]5 _+ s
  738.           unlink(".\\DownLoad\\readme.txt");- ]: p, V6 m4 U: h+ O8 p4 v9 Z
  739.           dwStartUpSteps=3;
    # r# H! z  X! ]4 H1 P8 o( k2 Y; U
  740.         }
    $ p6 K2 u  q( f% ?7 V! i
  741.       }
    2 r' C4 Q+ t' Q3 ~$ f  |( I+ m$ i
  742.       break;  a1 @2 k* B8 o9 A2 B
  743.     case 3:; i& q6 w9 q5 n. ]) f$ ]1 ~& }2 _6 O( n
  744.       if(!Dn.Connected())8 H2 p. r* q9 c
  745.       {
    & O$ O! j3 L; H% B1 D- b
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);7 x9 h4 k9 j$ V; {, L0 M
  747.         dwTotalFiles=1;
    , W: Z; h- t5 F% @; b
  748.         dwDownLoaded=0;
    4 D) d4 |; H' _) f, K2 U
  749.         bSilentStep=TRUE;
    # Y/ A( B0 x) r
  750.         bCompressed=FALSE;* A' t* l  f0 S; |6 G* U6 a* w
  751.         strExtLocal.Empty();
    ' s3 F0 h4 a, G
  752.         strFullName="checkversion.txt";3 M& I  D* ~0 z" E3 o, ]+ a* B
  753.         dwProgramState=AP_CONNECT;8 X4 H, d% ?* p: b; T0 W7 V
  754.       }
    # |7 n( m6 x% x3 b8 j1 o
  755.       dwStartUpSteps=4;- }6 g8 A5 L, g- N' o
  756.       break;" m2 c6 m! j* @  A# ^4 j
  757.     case 4:
    $ L# y8 l$ E$ P% _! W9 U5 H. Y( t
  758.       {. P9 t5 i/ \: D7 Y  J" m" p
  759.         FILE *fp;- p* s" R. u, ?
  760.         char szString1[128];
    ( e* @, D) c' m  w2 f* V; ]- R# u
  761.         char szString2[128];( A- \& c& m3 e& j4 \
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");' ]) R  W% B8 C& n+ T5 |
  763.         if(fp)
    , M: v; Z$ x5 c, {9 ]
  764.         {3 s& ^7 T4 g. R! L9 l
  765.           fscanf(fp,"%s",szString1);6 d) Y- O/ J  N
  766.           fclose(fp);: D* E0 [& b3 {, w3 W8 _
  767.           fCheckVersion=atof(szString1);! I) T7 }1 H6 Y/ l1 ~" i
  768.           fp=fopen(".\\checkversion.dat","r");2 Q5 m) Z' b: j& o/ X+ w& w; r: _
  769.           if(fp)5 ^. F% c+ q+ O2 c+ {2 n( |
  770.           {8 i4 T" i# O; u. c/ v. q5 X
  771.             fscanf(fp,"%s",szString2);' L9 q7 C% M1 P$ O! _
  772.             fclose(fp);
      `* Q; U3 i# L6 |. M4 N8 d2 ~
  773.             if(atof(szString1)!=atof(szString2))! Y' V+ U8 }/ ?$ B$ x! j9 Y
  774.             {
    + f  F/ t$ E( M
  775.               if(!Dn.Connected())5 T8 i6 v& C- J0 `
  776.               {
      J# u( E; d+ A% t1 t7 A/ S
  777.                 bFirstUpdate=TRUE;' B9 Q$ X, n7 \% T) ?9 [- \# H
  778.                 dwTotalFiles=1;
    . S: B9 G$ K; b6 d% j% F
  779.                 dwDownLoaded=0;) e8 r; x6 j1 G
  780.                 bSilentStep=FALSE;, C( u' m; }( N& g# A5 @& e
  781.                 bCompressed=TRUE;2 y2 @' h6 e+ y3 p
  782.                 strExtLocal=".\\DownLoad\";
    - l, j# r7 A5 p0 Q6 }5 ]4 l0 j6 s9 y
  783.                 strFullName="update.txt";
    2 o# _* i! m. m. W1 q1 W
  784.                 dwProgramState=AP_CONNECT;, H5 F8 D" Q( L+ @3 v
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    6 B0 k! C) _( l+ k3 D* o
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ I7 D$ P$ [! D) X1 y" m9 F
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! B0 s8 L2 c+ C

  788. 0 Q: X8 U$ O, V
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. t# m8 q8 P: B1 S$ n0 }5 f5 r
  790.                 unlink(".\\DownLoad\\checkversion.txt");- I: X% K$ Q, ^1 R% Y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ) T% C/ c, q# [0 u$ s1 \, n# B
  792.                 {
    / X0 P- }0 g! v4 X2 i1 y  L& B8 u4 k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    4 O+ r) T0 @: |+ S: E4 B
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");( l  T9 J& g. i% H8 o6 Y
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");, m/ D2 ~6 e3 f: ~1 ^2 e: _
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! K, v, A. v3 L( m$ J" C1 ^
  797. " N, D- S6 B$ j" t. r1 _
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! [6 J! s4 E) }8 R% F
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 U  K- N( O1 ~& u
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    . ^& r+ J% k. T5 k
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . l$ ~& }8 n3 v, ?: g* O4 N$ e
  802.                 }
    : [- J/ r7 ~  V1 R
  803.                 dwStartUpSteps=5;
    + o8 L: U2 Q& U& ^
  804.               }
    9 k1 b1 p7 q- ?, F4 a) y: I, y$ ^8 `
  805.             }: p5 J/ l0 G9 H4 i0 I1 z
  806.             else
    & _) D( A5 G1 u5 r( I& |8 F# `
  807.             {
    * y) W) k( T' q! q  w% {
  808.               unlink(".\\DownLoad\\checkversion.txt");
    , l! t- Q, u- E! r) m9 k
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ b7 E! j; w( c
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 c0 _3 a" L  u1 o  T' l- O
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    5 Y3 W+ z5 o, ~0 _) E$ G
  812. 3 V2 z9 U; G* T
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ K: t3 a/ x: q- q6 {
  814.               dwStartUpSteps=99;
    1 k8 s3 m8 c) n& a3 _
  815.               bFinishUpdated=TRUE;  R) \7 A# u9 V
  816.               bCanUpdate=TRUE;& X9 u7 y; L& q; |$ q) d6 }
  817.             }
    ! j) _  r! S% V8 f0 W
  818.           }
    : P. @' o: ^5 K* z8 M2 \
  819.           else( u& V2 W% @1 ]* g' h& }* l
  820.           {: s- N- T* F! w- D
  821.             if(!Dn.Connected())  R) x/ X4 T- @& b$ y! M, L
  822.             {1 V: e7 Q  U7 y  W: i5 L4 @
  823.               bFirstUpdate=TRUE;
    $ V  e3 ~! e1 `$ Q
  824.               dwTotalFiles=1;: B: W; G* V/ H2 P3 p8 B, ~- t: x
  825.               dwDownLoaded=0;) r$ y; Y2 s, v  b2 [$ i1 w! V& x
  826.               bSilentStep=FALSE;# T9 ]+ s% h( R# S# ]& O0 T
  827.               bCompressed=TRUE;
    ( U4 W8 W% M5 Z! Y; p) q1 b. _
  828.               strExtLocal=".\\DownLoad\";" x$ y1 I" w9 m' b3 r
  829.               strFullName="update.txt";
    $ _5 R% [" k5 E# p& q4 N, y
  830.               dwProgramState=AP_CONNECT;, V/ A8 _% y/ w; _% r: G
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 Q( X) }! U( w8 z
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    + K, X' U- O. _. X8 U8 z/ x
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 r2 s, ^! v5 Y6 a1 ]) L7 J# }
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 }4 p: b7 U- W. U8 m
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ' x. D6 N/ h$ s) `4 t/ X) C
  836.               if(GetFileAttributes("Wsa.zip" )!=-1); m/ [1 Q3 n& M% U
  837.               {
    , ]9 R  Y) ~1 _" o
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");1 n8 b! R4 N' {9 R9 Y2 S
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    4 E# T1 ]% ~7 J/ M6 Q, n
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    4 O1 _7 `6 F9 ^8 S' M8 H2 m7 _
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 \" r4 @+ Q; ~; t  D3 W" I! P
  842.                
    ( o5 K* k7 N" q7 f8 H: O3 e
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . R; u" G/ a/ ]7 |
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : g1 g/ R: H7 s% t% O6 H
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ Q, c' t* `. _
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 k( t0 Q6 _, I  D4 D4 P
  847.               }* {' z) }8 I0 ?9 }1 Q. R) L
  848.               dwStartUpSteps=5;
    % T3 E* @' p' B7 x+ s
  849.             }
    * C3 n3 E  S  w% ]! O: ]. U0 w3 t  Y
  850.           }
    - K7 L( C" o0 d, ^7 D" u) `- D6 Q1 B$ T
  851.         }7 k; D% O3 U7 P. l1 ]! d  Y
  852.         else
    2 p2 M/ U- l. o9 D
  853.         {
    1 l; S. U  h7 Q8 s
  854.           dwStartUpSteps=3;
    0 {1 `9 t5 R* M  W" I& {! |
  855.         }6 M1 g: [) |( @6 ^2 I
  856.       }5 P5 n3 |% r* J4 }6 m3 o4 O% g' d
  857.       break;
    4 Q; |  p, S2 y& m6 B
  858.     case 5:
    ; ~* H5 G; O; A$ ]1 W& {7 M
  859.       {: v; c7 b% f# L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
      V7 C4 F- t4 N: {) b$ A
  861.         {
    , }  j  f+ ]( |2 q
  862.           int opt_overwrite=1;
    ' ]7 R1 i0 }4 G$ t8 Z6 L
  863.           int opt_do_extract_withoutpath=0;
    0 w7 ^# a3 u2 ]3 i7 P5 S
  864.           unzFile uf=NULL;7 [9 ?8 R! v2 H$ ]$ |- P

  865. & c6 f9 W: ^0 I5 q
  866.           uf=unzOpen("Wsa.zip");' t3 A+ |. n2 g+ g- ?* l
  867.           if(uf)7 G  O+ N) E" R7 w* Z: N( {
  868.           {! I3 Z6 i* ?5 S' i
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    / U0 N, s: P' h+ D6 g
  870.             unzClose(uf);
    4 `; c& I: j2 I% [  o1 L
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    0 H' U/ S$ e: N- @; |' J
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
      X* z/ u0 F- H5 a" `! n
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");$ E( I! ^+ V" @3 t0 e  w0 V
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ k7 q' v+ u1 f8 x6 w
  875.           }0 _- v: q. T0 D! j8 S
  876.           DeleteFile("Wsa.zip" );+ |3 W4 q6 g, f8 L" h
  877.         }
    : s! Q! T. ~; F( P
  878. / \6 l, p' P6 A6 U- _6 C
  879.         if(CheckLocalVersion())
    / e0 I+ p( ~- M" r1 Z
  880.         {
    1 A+ a6 r0 r. Q. i
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ) o$ E5 p* k' \- o: U! L: {
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    $ w$ A% \' }# g5 s
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");' Q, A2 u$ t) E( C- C& i  s
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; t) P1 W- z& r! O
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);  c4 c/ [4 C) R+ J1 M, b+ x
  886.           dwStartUpSteps=99;
    5 x3 J  A2 f8 O2 Y0 Y: `6 t& q
  887.         }3 w9 U% e( R/ t. v+ c) o! H
  888.         else  f: o1 c- N- y: G
  889.         {
    ) z3 B: }  `# {6 w* l0 o$ Q
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    # r# B3 G5 `( _& c
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");7 a" d5 A+ A* [1 @+ g3 `
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    1 g$ p* @$ ?( J6 J' e( H

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

5 o  K7 P3 s8 k3 B0 E# h- e7 ?
# w  u/ k6 d* M4 \2 ?" z9 l

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-14 05:32

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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