找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
" P. _8 n3 j9 f. W6 u/ _1 C: }
  1. / RevApp.cpp : Defines the class behaviors for the application.
    # k4 u9 \; @. A$ b0 c8 Y$ L9 S
  2. //0 E) ~& F6 O. p/ z9 E( ?4 M
  3. 8 N) |/ k# O! v4 P
  4. #include "stdafx.h"
    2 }' x1 e8 x* U/ O" R& C! C4 U
  5. 9 @& O  m7 C3 r7 V1 h7 `
  6. //#define UNICODE
    ; N) z' `3 Z1 c- Q# U
  7. //#include <gdiplus.h>
    . N: J$ J# h& ~6 Z
  8. //using namespace Gdiplus;
    8 Y( {/ Y  U4 V+ K

  9. " c/ b" L2 y( [6 [* O
  10. #include "RevApp.h"
    9 V7 ]' C5 H; F' U  M4 ]% p, e4 j
  11. #include "RevAppDlg.h"+ R5 @5 I+ c. ?! J! T
  12. 0 R$ r6 L! K, E& O
  13. #pragma warning(disable:4786)0 [$ w' t' B2 v( H) g8 N( R
  14. #include <map>
    : M1 M+ {: H' G: j
  15. #include <list>
    4 N! b, W* |* Q- i: U2 E2 k/ U
  16. #include <direct.h>
    ( ^, o3 u# f" j7 ]
  17. 3 Y' T. h+ y  |9 P& }
  18. #ifdef _DEBUG3 a4 \) W; B' x6 R% D, [
  19. #define new DEBUG_NEW# M" g  X8 V% Q- \. g
  20. #undef THIS_FILE
    & X4 ?0 M4 a* B
  21. static char THIS_FILE[] = __FILE__;
    / ?; Z3 N6 p2 Q2 n
  22. #endif) t: L3 ~" ^1 s  G0 p
  23. #include "SkinResDef.h"( T* S- |) z" i1 [0 }
  24. #include "ChangeBG.h"
    1 V2 ~# K3 h$ D
  25. #include "AFXINET.H"3 m, g% f5 J( N* ^* @

  26. 4 g8 }" n$ J  S4 Y' r( M$ i
  27. #define TRADITIONAL_CHINESE 0
    & |+ X  H7 A! P5 \; x0 M& {
  28. #define SIMPLIFY_CHINESE 1. k& N7 [1 ~+ U: R/ {% B  _5 }( [
  29. #define ENGLISH 23 r5 ]- V; I* t( A
  30. int m_iLanguage = ENGLISH;# O' K9 J& M; p' O0 v8 w9 R
  31. /////////////////////////////////////////////////////////////////////////////
    - d$ g+ H1 i. C8 i6 I
  32. // CRevAppApp/ Y3 B% T2 C" W: C$ X1 K# k1 G8 B/ W: z

  33. 3 ^, i9 Z1 K  K1 Y9 s
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)4 A  c& N0 X9 c9 ?: k. q5 g
  35.         //{{AFX_MSG_MAP(CRevAppApp)' t9 u6 S2 r) u& {$ m
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    6 }/ \+ P$ n6 [) Y* c
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    : L8 e# L) T- D' E
  38.         //}}AFX_MSG5 l5 d; z: g+ |, V$ f0 c2 _* r
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)0 Q6 \9 i; _" u/ c
  40. END_MESSAGE_MAP()
    ( `. M* \5 Y. o8 D" ~0 O% o
  41.   Y- a5 y% p2 P7 @) B3 j7 P
  42. /////////////////////////////////////////////////////////////////////////////
    3 X6 q8 w& d: }" }: e- }
  43. // CRevAppApp construction
      H: G1 }% B8 B7 l4 n: m0 g
  44. / D  [/ g$ v3 {9 \& |: s. |  b/ a
  45. CRevAppApp::CRevAppApp()
    2 V4 j; M) i, }# X4 _
  46. {$ T  ~# t  S: f0 m& p+ J: j& x
  47.         // TODO: add construction code here,
    2 `+ W% F( W& o8 a4 F# J8 _
  48.         // Place all significant initialization in InitInstance
    ! n6 P% `1 }' ~* t* P' H
  49.   bDisplayIsBig5=FALSE;
    6 P2 ~% E% p0 g! {
  50.   bRestartUpdater=FALSE;+ f& R' A7 O/ F% O
  51.   bFinishUpdated=FALSE;
    4 a( j$ ?: w& p- L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;+ X  i% g6 _* \+ `
  53.   InitChangeDataBig52GBKS();3 P6 @# X2 O1 m6 u
  54.   InitChangeDataGBKS2Big5();) z! D) \1 \7 x8 g. Z
  55.         //
    6 m& ~; A$ `9 B8 k# _( F
  56.         bClickRunExe = FALSE;
    & p9 l! `( \. |) X/ O- s4 ]0 X9 u
  57.         //
    1 X' V+ F; V6 _; M
  58. }
      y- N# n- b3 U2 b. d1 z4 k! [

  59. 6 X% d: ~) N$ u1 g; J7 C
  60. CRevAppApp::~CRevAppApp()" b# b) r  @4 s' X
  61. {
    ; N' w7 J& U$ o0 Q% k; p( X
  62.         // TODO: add construction code here,
    # V4 a. a8 @- s6 ?3 b* r) t
  63.         // Place all significant initialization in InitInstance( {" {* J/ @$ B; m5 @
  64.   EndChangeData();
    9 E; f3 _( T) W& h, b4 t+ A
  65. }* Q' i, n$ ~0 [. w5 y8 L" d
  66. ) A* j5 S4 s" W+ m- G8 h7 ]% S6 S2 `
  67. /////////////////////////////////////////////////////////////////////////////6 M6 |( N' U/ O
  68. // The one and only CRevAppApp object# m5 A4 ]+ F0 u$ {. I
  69. : l  W& H; b8 D$ Z8 k
  70. CRevAppApp theApp;' \/ }% K5 z, k+ e$ Q7 M6 J

  71. ( F7 k, |1 a& G, _8 r
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    3 A- D" ]: i9 h: E: T
  73. {  [/ `7 B( M; d+ Q4 ]" m
  74.   int iEOF=0;
    : _5 K; L5 z4 ]: Y% E
  75.   char szTempName[MAX_PATH];
    : _* T( F' m5 V2 A4 `+ H
  76.   *szFileName=0;7 H2 Y+ R+ U& h% y* [8 }6 r
  77.   iEOF=fscanf(fp,"%s",szTempName);
    - e  Y9 R! U& n* @- a3 q' I  m* p5 i
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')+ E! j0 I' u8 G
  79.   {' D/ Y6 i0 r% _
  80.     strcpy(szFileName,&szTempName[1]);
    2 c( f1 ?6 P+ Y  d# T# i
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & b3 P  q5 l" i$ \3 O9 T
  82.     {
    ( r7 {) W2 ?8 U% O5 H
  83.       iEOF=fscanf(fp,"%s",szTempName);% ?1 [7 d  }; `. u
  84.       strcat(szFileName," ");% P) |5 m" C2 z) R
  85.       strcat(szFileName,szTempName);+ A0 y+ J. M9 _' @
  86.     }
    ! _2 D8 {7 _3 n6 g$ P5 x5 \
  87.     if(strlen(szFileName)>=1)4 ]& t  `' g4 |' f& ~4 V% m
  88.     {
    # ^& ?* T4 B+ d4 G" ]4 B
  89.       szFileName[strlen(szFileName)-1]=0;
    0 n# w  h' P. v* k& S  M
  90.     }
    % Y9 h+ O8 z0 n% h" e
  91.   }, _! y# t; J! V, l" u* c; v
  92.   return szFileName;
    0 {+ Q  h6 s+ t: n( K
  93. }1 T" F( u: \% j8 G4 }" k

  94. * I7 n& V1 Z2 O/ a# _1 M3 \
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ; m  d5 x) V6 ^9 A! q2 b9 z
  96. {
    * ?: h: P, a8 }! C- q% A9 N
  97.   FILE *fp;
    0 g+ U( r9 Y- H( |$ B- a- u5 b
  98.   char *key=NULL;- r' p: U$ g$ V3 }1 ]; ?5 V) V
  99.   char version[MAX_PATH];
    9 [2 Q- [$ ]- g  @- M
  100.   LPUPDATEFILE file,olds;
      f# r, g4 }5 G, _6 V7 }
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) o- e! z! b: @2 ], h  ]; e/ b

  102. ; e5 r9 ^: K; F3 P  x
  103.   UpdateList.clear();
    ; \$ z) L$ k( ^0 O+ C% g- s
  104.   UpdateFile.clear();3 M" L6 Z. R' r4 V+ l3 ]$ H/ g4 l
  105.   if(GetFileAttributes(filename)==-1) return false;
    7 X( J! h  y; |5 }
  106.   if(!(fp=fopen(filename,"r"))) return false;! l1 o) D. `; |6 c! K4 n1 M# L
  107.   fscanf(fp,"%s",version);
    5 i( q0 I  E7 h! j6 C8 n8 L+ r
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
      j3 e$ p9 {2 m- W& T
  109.   while(fscanf(fp,"%s",version)!=EOF). e/ y* ]1 A  w6 Q3 z& `' k
  110.   {+ v; S# u; s: X
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; h4 i0 O9 c+ _1 E3 N. b
  112.     fscanf(fp,"%s",file->path);
    6 G  W0 G# O* h' D
  113.     ReadFileNames(fp,file->file);
    . ]* d8 }% u) S& T# q
  114.     strcpy(file->full,".");: ~6 Y/ A. |/ p* T9 @
  115.     strcat(file->full,file->path);) s1 C9 v% c1 ]4 `
  116.     strcat(file->full,file->file);3 P# D# ?! v8 w( K9 r& V
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()); R- g  T6 |- u* Y0 @  w
  118.     {
      A  \. v! b/ i* o( s. G
  119.       file->vers=(float)atof(version);
    , D3 B! Q: x; d. O$ i
  120.       UpdateList.push_back(file->full);
    6 k5 W9 d! y2 C/ e  T4 h2 f9 h
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));6 j' P' e8 T, G% n0 \3 H
  122.     }+ o  }! g& M7 O2 J  J  S' t6 K3 O
  123.     else5 f' ]7 s2 {2 i; r) i3 C
  124.     {
    1 ^$ J4 E. h9 V9 l& u
  125.       olds=(*p).second;2 f3 F; d. ]& O
  126.       if(olds->vers<(float)atof(version))
    / X# o! X0 ?" ]& x8 h4 B5 @0 G
  127.       {) [0 l7 y! r$ v! u$ P
  128.         olds->vers=(float)atof(version);" W2 j& x) r3 j: }& R7 L/ }- I
  129.       }+ Q& e6 o/ H) {* G
  130.       free(file);
    2 P: U: L; k; w* M" o
  131.     }
    $ K+ q3 O/ @- \# j+ {& A) x  R2 r
  132.   }
    . j/ y6 ^$ ^- m% P
  133.   fclose(fp);
    3 M6 F0 G! @( ~. v' ]
  134.   return true;
    $ s% o" |/ `- w) c! O
  135. }: L* o% y" U5 ]; h( |' ~7 @6 @5 j
  136. 4 ^# v0 a( f1 D  ^, m$ a
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    + @- |: s: n, A# w
  138. {+ l5 o: V/ T2 _9 B
  139.   TCHAR  szFull[MAX_PATH];: S; R7 V  t5 Z4 \
  140.   TCHAR *token,*inter;' Q  \4 E) G' k) F* w$ z  u8 |
  141.   *szPath=0;5 T$ u' B! q  ^# _2 I
  142.   strcpy(szFull,szFullPath);2 p$ x+ z8 [+ s4 G2 V
  143.   token=strtok(szFull,"\\/");
    5 x- @1 |! ]% q  D% G) Y
  144.   inter=token;$ F; Y+ H* }1 L" d7 P2 _
  145.   while(token=strtok(NULL,"\\/"))1 a, q/ I$ `* n+ ^" z
  146.   {  H2 `* \9 P, V' F/ O
  147.     strcat(szPath,inter);
    0 s5 L( S% M5 M+ t' E; y" ^; Q$ E
  148.     strcat(szPath,"\");3 ~& |- m( `7 [. w7 J' E& i8 j* k
  149.     inter=token;
    5 [, b& a. j- R. k: \# u; p
  150.   }8 d6 I8 t& x+ {" d
  151.   return strlen(szPath);% m* c7 C# N' K7 E! n. ^
  152. }
    & n- @! {. O- p5 v

  153. / L1 b# d5 J' I% m
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    % b- |/ |/ o' T
  155. {
    % J& j1 ?9 d3 S* i
  156.   DWORD attrib=GetFileAttributes(Target);% L5 E- g5 q9 ?
  157.   if(attrib!=-1): h2 z7 M" ^& ~2 y1 n
  158.   {, P( ^5 b- s9 H0 a) ^1 a5 j7 \
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    + W7 W' e! m* X# ]: \% K
  160.     {5 \* U& G5 o$ r! j1 L" K
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    - D& C( X2 ~5 |& s% t2 r$ _, m+ m
  162.       SetFileAttributes(Target,attrib);
    5 v1 ^% ]6 Q9 u5 q7 a8 y5 ]
  163.     }/ J+ W! N- b7 M7 p* @+ O
  164.   }
    , K6 K  m0 S& `0 {( A, l
  165.   CopyFile(Source,Target,Erase);  @- p, {" u* A1 R: ^; I, U! @) _
  166. }: k+ w$ S4 a9 C0 z: j
  167. & S8 q* e% [" B3 `. p2 n: S6 Q0 q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)$ @# {* r% |9 S0 ^: y6 x8 B
  169. {
    9 g1 Q6 Y9 C3 n* [( ]
  170.      FILE *fp;6 \, t; `0 s1 N; E% I
  171.      char  szBuffer[8192];1 F, ?  Y+ Q2 q- Y
  172.   va_list  argptr;
    ; r* @% A, i+ C4 P& P+ U. i0 V
  173. & m5 n! ]  d# P/ O
  174.         va_start(argptr,message);
    - G; N3 Q: z8 |6 A3 c
  175.         vsprintf(szBuffer,message,argptr);
    ! ?: W" C7 Y! J, Y& ~
  176.         va_end(argptr);" A2 p8 k& z7 ?# f
  177.   fp=fopen(FileName,"a");0 f0 b- k# k4 _6 w8 P8 J
  178.   if(fp)
    , x9 G& P9 O2 ]8 Z
  179.   {
    / J$ C, ]% ]: f# ^5 W) c
  180.     fprintf(fp,szBuffer);
    - G3 F% h7 {1 X/ @7 e
  181.     fclose(fp);3 o  S, V* |# G7 |- l, P
  182.           _flushall();
    8 q& Q' Y; E; c' @
  183.   }
    3 f3 ^9 l: {$ D$ N
  184. }
    # Z1 s" I9 D: b% V) G1 p

  185. ; Y' R4 ]* a2 p1 |) _8 V
  186. BOOL CRevAppApp::Fclearf(char *FileName). G0 S8 N& |1 t# X3 H; n* o
  187. {0 Z3 x/ ^9 J. ]5 Q
  188.      FILE *fp;
    ; M" m. T' `( h, O; F3 c8 C" @
  189.     DWORD  attrib;+ A1 T9 p, t# A6 C1 U6 H
  190.   attrib=GetFileAttributes(FileName);1 G; P4 S" p) F5 w2 ]9 ^: x
  191.   if(attrib!=-1)
    " w% j# I$ M: k+ ?3 a
  192.   {
    * V  e/ T- b/ |8 b* q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    / j$ r/ I* q2 O! V- x
  194.     if(!SetFileAttributes(FileName,attrib))3 h/ _% Y# f) i# S
  195.     {
    + L' u: D5 e2 J, T# I: s2 G, M$ I9 v3 `
  196.       return FALSE;
    2 e9 y, ]- r  G% m; H
  197.     }
    % B) e2 I5 b( n
  198.   }
    : L; A3 ?' b3 G. N2 {( h' B0 a0 r& x
  199.   fp=fopen(FileName,"wb");
    ' w/ G3 i: t0 P0 E/ W
  200.   if(fp)# g' F' w7 ~' y0 ?# d9 T" P- r5 l- U! d
  201.   {& D2 l7 k+ t( @
  202.     fclose(fp);$ @0 ]0 e3 x$ X
  203.   }/ I- I1 w& u$ R7 E5 O
  204.   return TRUE;6 @0 q/ ^+ z$ u4 {& Z5 T2 ~0 o  E8 `
  205. }  i  C8 s# d- \% m, ^3 \

  206. ! u& U! j5 J0 @
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ( h, p! @1 L; G! A* b5 Z% }% E9 ?
  208. {
    ' p$ B# O; t# u& g3 U
  209.   char filename[MAX_PATH];
    9 w: I& C% L, z$ v# O) j
  210.   LPUPDATEFILE file,olds;
    ' K/ Q* e* @# [% I0 d& l! x
  211.   std::map<int,CString>::iterator i;
    % b* ?2 {1 u; [3 N
  212.   std::map<CString,LPUPDATEFILE>::iterator p;, Z( @; f" M7 B6 Z( U1 ~
  213.   std::list<CString>::iterator l;  n1 R0 x, i( g, G2 {

  214. 4 C$ S  O" _9 e! U2 f; m6 y
  215.   if(bFirstUpdate)3 X* `; S$ r/ X( q" k
  216.   {
    3 U- p  t1 U& ?7 d, D
  217.     dwCurrFile=0;4 G5 m& S0 y- V
  218.     bFirstUpdate=FALSE;  X: o: i& e/ t2 \! d! E0 I3 l+ V
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): y6 @- R9 V+ a" `5 o$ ~
  220.     {
    ! J; ~+ T' a3 C: h  u
  221.       dwTotalFiles=UpdateLocal.size();" W% R/ t' m" i
  222.       dwDownLoaded=0;
    ! a: R& Z- ^' `) z8 W  w- @
  223.       bSilentStep=FALSE;. ]" I9 {/ B+ c+ J9 q$ R
  224.       bCompressed=TRUE;
    & y# f$ u9 w" b' q- \' L
  225.       strExtLocal.Empty();  I+ T0 f$ Q- r; n* B
  226.       strFullName=(*i).second;! ]! q2 S7 O2 P) {/ S
  227.       dwProgramState=AP_CONNECT;
    9 N% t- |8 P  K3 m
  228.       return TRUE;
    ) _/ h7 u* k. {6 X* j) n8 r
  229.     }
    . I# N- w( D5 E8 B( u
  230.   }: R) P  N& V  q4 A8 A7 v
  231.   else if(bRestartUpdater==FALSE)
    ! z+ ?2 F" ~- ~/ k* w' P
  232.   {
    # J% q# a" I/ Q$ [
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    - Q3 T0 W3 ?* ]0 L" `; l
  234.     {
    3 `# ]! h9 E5 T6 e
  235.       file=(*p).second;
    9 U  Q4 i1 }. _' E
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    9 {! R; x. t! p: `$ p+ X0 w5 I
  237.       {
    ( Z( S7 Q" F- k4 U9 N
  238.         olds=(*p).second;5 Y1 o( o2 Y& r" P7 |5 a% I" A) k" p
  239.         olds->vers=file->vers;
    3 R0 _8 a3 N0 ~# G; s
  240.       }
    7 m, G8 Y% r& U. N. h& o! c
  241.       else: C/ Z! F; [) |/ v3 V+ N
  242.       {
    ; s, [6 G+ G, W$ r, |+ t% ~+ e
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 w/ v! }1 g: n1 E, Z5 i2 Y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    3 F; s9 }4 A1 D. a1 }  z
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    7 P+ H0 Q# n$ @  p; N
  246.       }
    2 i- ]; o/ g& N& f  {
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");" L( `1 K3 w# [7 M1 A3 _
  248.       sprintf(filename,"(%s)",file->file);2 E4 M- |8 l( |
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # R* C- l# }& A  C* n) }2 C$ x
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ; `! y6 f2 t# \- \  \, a3 s
  251.     }
    9 y! N' v1 I0 e1 k
  252.     dwCurrFile++;
    6 Y( E$ @0 m/ m. j* u7 o/ k
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 e, w3 U7 z& j4 ~
  254.     {
      m5 [5 |7 l5 R5 K
  255.       bSilentStep=FALSE;$ f1 O+ ^; [/ p6 }  m5 e
  256.       bCompressed=TRUE;% T  K6 l' e9 c. W; m3 q! `3 M
  257.       strExtLocal.Empty();
    ( O) f4 k8 K: o7 ?$ n# d$ }5 a* x
  258.       strFullName=(*i).second;$ N. l: Q6 Z& H1 k
  259.       dwProgramState=AP_CONNECT;  ~/ H6 {" h( N7 j' R- \& Z" Q% o7 T  g4 ?
  260.       return TRUE;
      F8 y! j, o# v3 S( a
  261.     }5 \% n: ]; s6 u! }# q
  262.     if(!bRestartUpdater)$ u- \3 k$ t% p) Z5 ^1 W% p
  263.     {& K2 g' j3 r7 ]8 u: l! Z
  264.       int iCurrSize,iFileSize;
    + U, \3 {" D; a4 X) x4 D
  265.       iCurrSize=0;
    3 G- M7 R8 C: a, l% O+ Z
  266.       iFileSize=UpdateList2.size();
    * ~# h7 G  q! w
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");3 M+ M* f% n# I( N2 W6 S& W
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    9 ~2 |8 k7 z5 z' [" J: h) B( _
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    * A- F, k$ w/ [9 c% r
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , G5 T7 e& t3 {; `9 e% a
  271.       Fclearf(".\\update.dat");' Z2 C: U/ C3 U9 ^# t3 }9 g/ x
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    / S# S! h1 p$ A3 c9 A
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++); o3 {: S2 j1 t* r9 J6 F
  274.       {
    ! X' @! n. x# ?7 E
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& F4 a) Y/ A  u% E5 G
  276.         {
    ; e: q& N) V9 K: d
  277.           file=(*p).second;
    4 a7 P' U# p; L6 c1 k. ?* @
  278.           sprintf(filename,"(%s)",file->file);
    & B' z) }9 P* D  q+ b, I. }3 J
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);" K0 t# [6 k4 F, r0 U3 e5 I/ g
  280.           iCurrSize++;6 @5 L9 R" V$ j/ I8 v; ]- |
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));/ ]& p8 g" \$ K# n9 V
  282.         }
    % X! s! l, s: M7 v6 z: O
  283.       }
    ) X7 U$ H! J9 q+ b1 {# K
  284.       unlink(".\\update.txt");
    # g6 j/ [' l7 d* Q) u* c
  285.       unlink(".\\update.tmp");' A/ m$ S/ n5 ], g: x8 r+ S5 x
  286.       Fclearf(".\\checkversion.dat");& F$ w' o1 A/ o1 c6 s, X
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);# F* n- J2 k! @  e
  288.       if(UpdateLocal.size())
    9 R: e) o& R" z: T1 w
  289.       {8 b5 [9 x8 ~1 |3 R- r! v5 C
  290.         UpdateLocal.clear();
    + X7 E0 U; {/ `! C" F& C
  291.       }
    ( \. I0 v: C( D& f' @4 r
  292.       if(UpdateFile3.size())
    0 O, B/ Y# r! E
  293.       {
    " S0 Z9 m2 l; F9 X0 B: J( @+ F
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - S5 Z3 G6 @1 L+ G
  295.         {* N2 a- J- ?% q* ?; s! _+ h
  296.           file=(*p).second;
    # ?; r& _7 E2 N
  297.           free(file);
    , f  E9 W) @( V" U. G5 o. E
  298.         }4 Z% p8 N  ^) k' l. L1 c
  299.         UpdateFile3.clear();# A, H4 `$ p* Z0 @' d" d+ T$ G
  300.         UpdateList3.clear();
    + o# ~6 i1 _; }$ X7 Q
  301.       }  M+ N( B8 |/ a2 l+ N: s/ A8 q1 n
  302.       if(UpdateFile2.size())
    * D. O8 t. N- z
  303.       {' g) f# c0 b9 @& \( P; _: a1 k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! v7 ~0 L. u2 C
  305.         {# m4 ~; k. ~( \+ F
  306.           file=(*p).second;! I- V* f9 y' a! q* J, K  v4 y* F+ W6 q# [
  307.           free(file);
    0 Q3 s* k) c7 p& r0 G' ^. A2 p9 `# T
  308.         }' u, z  Q6 M& p* s# k4 Q$ S
  309.         UpdateFile2.clear();, Y0 c$ U) T: B* K; p/ E( F
  310.         UpdateList2.clear();
    ( I! j+ U, _; D5 G4 w. L2 v3 `+ }3 }
  311.       }
    $ ~( M4 a% a* c6 S6 t8 A8 x- S
  312.       if(UpdateFile1.size())
    4 }9 K- ?% R& ]/ d1 a8 q1 |+ D
  313.       {
    " N' I2 l9 N* |9 g
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% S9 O% t- W2 W2 ?' T* V5 f
  315.         {
    / Z- w  z5 K7 W6 G- O, B
  316.           file=(*p).second;
    % v% d) z: p/ I; x2 ]0 ^
  317.           free(file);
    ' _( L/ x1 Q8 h+ j5 c9 B# B
  318.         }
    ; ]' K9 k( j9 `" l3 A
  319.         UpdateFile1.clear();
    $ h8 j% }5 _  F' l; J% M1 i- @4 v
  320.         UpdateList1.clear();$ [3 Y6 K4 r1 c* W% H0 m/ W- x- u1 Z
  321.       }
    ( ^7 }+ S8 M( b- Z
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    3 K3 d' s" \- r' z+ m! U
  323.     }
    3 @3 ^5 b/ Z+ ^3 N/ f6 O; @
  324.   }
    9 L5 o& A3 c3 m. a
  325.   return FALSE;
    4 ^5 v; ~+ _+ S
  326. }; j4 i+ \  j/ I& e( D/ d9 B
  327. % s6 B9 s' y9 s2 G' X/ s5 `( x
  328. void CRevAppApp::ClearAll(void)% \8 n: u* T# k; u* |* @, V) |$ |) a
  329. {
    6 q9 {' ]' p: l0 X% j" v9 B/ D& Y
  330.   LPUPDATEFILE file;
    1 v  n) s0 d5 S1 U) q0 t
  331.   std::map<CString,LPUPDATEFILE>::iterator p;9 _0 P4 c2 ?; `+ T3 C, L! V
  332. 0 M5 H* d" r) o; o4 `
  333.   if(UpdateLocal.size())) Q0 c9 i$ I8 u5 O- L
  334.   {
    ( h7 G$ c6 g; L$ f2 X* B: C* b
  335.     UpdateLocal.clear();" Y2 x8 O% C$ K& H. K$ Q
  336.   }
    7 }  u0 U5 J+ Z% M, d
  337.   if(UpdateFile3.size())
    $ p# \& n0 U* Y+ F7 j( u3 g' L: f
  338.   {
    ( C* Z" ]2 h* t6 ~
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % z/ m6 j% b9 G/ O6 g) d* a
  340.     {% c8 b5 t2 Q5 s+ N/ z# ^9 h
  341.       file=(*p).second;* w5 e4 O1 r$ K3 R
  342.       free(file);
    - V1 x0 J. p4 ]6 e" Z8 h$ J
  343.     }
    # C2 T5 c9 l* r9 h2 G3 |, g
  344.     UpdateFile3.clear();+ T! O6 W: ]9 D
  345.     UpdateList3.clear();7 }: S/ D/ q" g" m6 K1 Y
  346.   }
    8 d- u5 U0 s( o5 H
  347.   if(UpdateFile2.size()). d1 D. g: K' @+ \+ q8 X4 `
  348.   {
    # ~8 C# f2 W$ v+ Y  @" n, h, F
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); P) x/ ~7 g4 f
  350.     {
    * Y$ V) e$ s2 \' U1 w  e( Y1 ?5 c& }: y
  351.       file=(*p).second;
    4 E7 }9 ?/ \( [
  352.       free(file);4 y5 b6 u! q0 v/ A7 [  f+ y, A/ x" m
  353.     }7 d2 ]" L0 x/ w* c
  354.     UpdateFile2.clear();# ]( ]& L9 f1 U9 q  ?" l& {
  355.     UpdateList2.clear();4 d. q7 Q7 F* \$ O7 Q
  356.   }' |9 ^( M/ o( y; b$ w# x" b2 o# }2 b
  357.   if(UpdateFile1.size())* f/ J/ j+ C7 D3 `+ K5 u& w) @' b
  358.   {
    2 I6 m/ ?* n' O* ^
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : N' l6 e* E/ o3 o: ?( ~4 K
  360.     {
    6 d0 O: {. J8 W1 l! e
  361.       file=(*p).second;" P( m) w7 j$ I  z! L
  362.       free(file);0 `# b" q0 i. w, ^& F
  363.     }6 W3 d- T0 c; `% m2 ^' w  C: f
  364.     UpdateFile1.clear();+ m$ l' |& A, k$ n. b
  365.     UpdateList1.clear();
    + l. i9 K  U# l( T3 D! w
  366.   }
    3 T) ~' F+ t. |, o0 f2 O( y
  367. }  9 }  R# u4 Z, v1 w2 c. l
  368.   
    ) B* H. g, B4 r* q9 ~9 t! y
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    % V+ t1 d! {0 k! J. j2 S
  370. {
    0 X! K" |0 ]# B/ Q' x+ K; o$ I% Z/ ?
  371.   int c;
    . W5 ^% c) t& V! P
  372.   LPUPDATEFILE file1,file2;0 X+ f, T. e, s( ^5 t4 w( d2 r2 c
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    . r9 {) g' x9 i8 `4 Z4 y/ O
  374.   std::list<CString>::iterator l;
    1 }% V$ G2 S1 Z+ |

  375. # E* h# M! B4 @
  376.   UpdateLocal.clear();2 C3 z6 I" ^: r& w8 P
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ) q5 k* o, V) E6 [% l
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    # K$ Q$ _% c8 J0 \8 l
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);5 f) h8 a+ ?" U6 F1 t4 C& \
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);5 `1 N2 ]- i6 L8 L; |# U
  381.   if(UpdateFile3.size())" E& N' R5 n3 r
  382.   {
    " E6 c! }/ T" }9 G4 e
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    3 C1 ], N# J% C8 J% ]
  384.     {6 {5 h- {1 X: F# M1 R
  385.       file2=(LPUPDATEFILE)(*i).second;
    8 E; S/ h5 _6 \2 @. g
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# f2 O- K' \. J' ]2 b6 c. y" R
  387.       {
    3 G: z5 S: |) o- h! G+ n
  388.         file1=(LPUPDATEFILE)(*p).second;
    1 P' R! s- G7 E% z6 [/ |( b- y# L* W
  389.         file1->vers=file2->vers;3 W1 t1 J: u7 y. B5 n4 C8 T; S
  390.       }" G( a% k! K4 P" {0 N& C
  391.       else
    / x) R! f, l7 O  |$ A
  392.       {
    , `  \4 l6 D9 R/ w2 i4 b' S
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( w" b" g2 T9 m; i
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));& v2 t/ \) r4 e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));6 l2 c& q( D9 m* E& o4 Z& q
  396.       }
    $ ?2 |# p1 k6 Z# a' `! O
  397.     }; a- I5 n; B& h6 `, L5 ^
  398.   }
    3 C% [; N+ H* N& |! u
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)+ a) k6 C" ?" d# n8 `# u9 ]$ _
  400.   {
    ( }8 b$ U- g$ C2 l# Q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
      S% m. e- u1 \' V0 X6 J
  402.     {
    & p: z) C- Y( w9 {
  403.       file2=(LPUPDATEFILE)(*i).second;- d. I" S0 X: S0 g
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ R; h; C+ _" ?0 t$ H* A! Q
  405.       {
    & Y+ x' r8 j4 f  {5 }( I) P' d
  406.         file1=(LPUPDATEFILE)(*p).second;+ ~1 E% |/ w7 c6 C7 N
  407.         if(file1->vers!=file2->vers)
    6 ~7 [3 M  s* F1 j# c: N
  408.         {
    ' |$ w2 Y1 Z) s7 i$ v
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 S* O1 w- i0 E3 U4 @2 ~" O
  410.           c++;1 d% ?; P; q9 R% H3 m1 _1 @
  411.         }
    9 B$ p! F+ I/ h9 N: e
  412.       }& C2 _  U0 l; T
  413.       else
    0 q. Z, C5 a& u7 o
  414.       {) Y5 [4 Y7 a/ E" d( @! z
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 S* h- h, q# b( @
  416.         c++;
    - Y+ V" z! I. y  {
  417.       }
    , a/ U! ]9 W5 x% a
  418.     }- ?0 W) r* Z: u' I& l" |( L
  419.   }
    : @5 _* F. ~+ r  \1 P
  420.   unlink(".\\DownLoad\\update.txt");) X0 c# m5 Q! Q* U) A
  421.   if(UpdateLocal.size()) return TRUE;6 z9 j" T; `. d0 H' h
  422.   else                   return FALSE;
    # l( j: w2 S5 Y" d/ M- }- q6 d& E
  423. }
    + R9 R. r# t, k% {, J2 U8 p
  424. 0 E, i' v1 s; T7 j
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/". A8 T1 `! D# L! \& k/ U
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"% H3 p8 o$ |  X) j7 x/ H

  427. * X0 K# Y, y$ S' U! H& S

  428. 1 _9 Y, ]% s/ ~6 B9 t# k
  429. ; D/ V. N- Z/ Q$ @% a
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    - Z% g- M# v0 _2 m
  431. {; V$ R! D3 S. P5 M8 B8 Q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;' [8 u, Y- w- k9 F
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    + A4 U8 Y3 h, F9 J
  434.   {
    ) j; b, A( E2 h# g: P
  435.     char szLanguage[50];( H! V, o: E6 g4 Z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' I- [8 ^5 q2 w4 J$ g" @
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 g# W1 g0 O/ b- B: k5 l0 _
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, \! Q; @' \: m
  439.     else                                   m_iLanguage=ENGLISH;( {, y, V1 A5 d0 f; n$ l
  440.     char szRegister[100];
      \& `1 N0 R2 A$ \+ X/ D+ M
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " @; V7 }/ m9 l
  442.     strRegsName=szRegister;
    0 T  y8 K  `3 M
  443.     char szPatchURL[100];. o8 w% `- e2 |' m2 `. l
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + ?* M! |# a: ]% j( I4 ~4 F& b+ Y4 {  [
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; q* X- K3 j' q8 o6 C, q$ O: w
  446.   }1 K' i& ~" f0 ~6 B
  447.   else9 h- j5 Z& `' G, F+ h; R: P
  448.   {
    " c2 \: J( v9 S' [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / z5 ~$ }' W1 Z5 S
  450.     strRegsName=DEFAULT_REG_URL;) g0 V* D0 g' J# _5 a! L/ T- ]
  451.   }# e0 F. ^* P  T" ]) h. Y. ^
  452.   if(GetFileAttributes("hosts.ini")!=-1); M! U- P% o, Q
  453.   {
    % D$ I  _/ Q* k) c
  454.     char szIP[50];# f$ q& {" E! u% t8 ~
  455.     char szDIR[300];$ x/ i4 Q0 m4 }  V  D3 A9 R+ @2 t! F8 F
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    9 l- K; o  V  p* x9 M' T8 s/ f' V
  457.     {; z! B$ e9 {! B8 q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ; M) L' m/ z# J4 f, x  ~, T- [
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");! L. _: J  f6 ]; d7 J: w: o+ t
  460.       strHostName=szIP;
    5 G0 D. p  A: J% d' {
  461.       strHostPath.Format("/%s",szDIR);* v7 h; K( p$ {1 J9 p- a# G+ K
  462.     }+ E  s( F; Y% n
  463.     else& u; ], D+ l6 c' G, A# D4 @4 A% n
  464.     {' e. K6 h! i1 g
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% o% B# p) S6 W" r& j$ r/ o3 T
  466.       {
    $ d8 o/ I* ?& d. ~
  467.         char szLanguage[50];% [  U: Z. T1 e) d
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( B& r: i# M4 P7 e  c: U0 }
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' V! w0 x- Z5 s, z, b% O  i$ |7 ~) J
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & C7 t$ H5 q9 ^
  471.         else                                   m_iLanguage=ENGLISH;
    6 X: |4 u! a. o2 j' Q
  472.         char szRegister[100];. {% k/ n- ?5 t
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 {0 w7 Q+ t! p
  474.         strRegsName=szRegister;
    . P- u! ?# E+ L6 u# G! v8 Q4 Q5 {3 ?
  475.         char szPatchURL[100];5 H! D" J- e( P6 A8 M# \
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");, U3 @! f( N% @3 t
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# ]+ i$ j. a* m- Y( I
  478.       }
    2 n6 V8 `9 F1 w& }2 ?8 j
  479.       else
    / _, q0 P! h' N/ l; g
  480.       {
    6 A7 l" [- l2 i1 g
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' I# _7 s& p( H: }% }4 \
  482.         strRegsName=DEFAULT_REG_URL;
      {5 w* t( j* W, m# }5 B$ g
  483.       }
    $ z7 f: L" {  W8 K& f# ]$ g
  484.     }# ]$ a* k& R* k% S
  485.   }' u4 `8 X! g; B8 o0 |, e2 w
  486.   return true;
    ) M8 Z* X+ G. J: r' J; Q
  487. }
    4 a" T( h, I# W0 Q5 W
  488. ) ?: ]1 Z/ h9 {5 ~3 Z
  489. #include ".\ZLib\unzip.h"
    - M. V2 }; c6 a: w
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    + m; _! b1 w' b( D1 e( {& k
  491. /////////////////////////////////////////////////////////////////////////////+ @- z  y0 P- A$ n
  492. // CRevAppApp initialization
    2 s; J) ~: n+ u+ V- T2 j1 [
  493. 4 A$ \2 `- R/ m  M) @9 n
  494. BOOL CRevAppApp::InitInstance(); {$ ^0 V2 @. I4 i: @2 }
  495. {
      i6 |* O' G8 x0 o/ f8 [& i
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];( \* B* A  `3 F. \: A* V6 {- p

  497. ' ~9 m8 D. G. y4 |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);! T  m4 b. C) z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)), T' E, q5 w7 m6 W( i, A
  500.   {1 A; T" \2 S9 q) t+ |+ A5 |
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");, _6 g9 k6 u; ^0 X  e
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ' |- A0 Y) I6 r% N, Y# g! Q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))8 t" N, |$ t$ h6 U1 \! o5 b% @8 H
  504.     {
    % e6 m% L9 L0 O: k
  505.       strcpy(szPath,szPathTarget);
    ( J+ x7 y2 f6 E
  506.       SetCurrentDirectory(szPath);! k9 F' k0 E8 T$ e6 T
  507.     }
    4 H2 g) l0 T1 Y" P9 n" k9 n
  508.   }
    % c3 X- x) I! `; f( V
  509. #ifdef _DEBUG' G: z; D( V- i/ a: [6 e1 N
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))* f$ i" f. Z6 I, N; n4 B$ b! I
  511. #else* z# |) b& i1 _# l) E5 d, }% W2 v2 r
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( V) T' {5 V$ i2 S) a- H
  513. #endif, d. v6 G" }$ s4 b# e
  514.   {! O+ |) a9 b6 J4 y# _% }
  515.     char tempFileName[MAX_PATH];, @0 Y! G+ z$ H$ }& ~, ~/ e
  516.     strcpy(tempFileName,szPathSource);0 q3 ], j* _  B% O' V) v/ c7 |
  517.     tempFileName[strlen(szPathSource)-12]=0;
    4 p6 d9 T& P9 w& r9 u
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    - X* I. [4 c9 j6 V
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);5 \  `  z6 ~) r0 d2 ^1 U$ _
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);$ x) {) V+ H+ T( K$ D
  521.     return TRUE;
    & [# U$ J( }+ R+ Q, d
  522.   }
    ) @% a% }* D2 C$ M+ n
  523.   // Nuke 0118: Delete run.exe
    8 D1 i7 w& o  ?$ N* F$ s
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );* F6 \/ {% s1 X, }0 I* Z" X
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");1 n% {0 g0 D% Y: m5 C, V9 Y, `
  526.   if(!ReadCfgFile("Config.ini"))
    , Q8 n# G: L) T
  527.   {$ y: l8 C# J, u) m8 p8 `3 o
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);: r2 ?# X( @: l. k% q
  529.     return TRUE;
    ) `4 [: k' z$ e: O5 L6 n, q
  530.   }
    , }+ z2 I1 ^) y) ]7 n8 O* m
  531.   HANDLE mutex;
    - |4 V3 w7 {8 ]' u
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))7 L  ]* m& y) P2 f9 B
  533.   {
    % K" H2 M# O1 {  A0 `) |6 F
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)3 g6 ]' Y8 m+ Z+ }% o
  535.     {
      z( e6 D5 H- t( c' t* w
  536.       CloseHandle(mutex);
      ]/ G5 j8 v$ }* j% r5 g
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);6 k  P" Z4 a/ p% z+ |  f9 J
  538.       return TRUE;* o; X6 c" e* ]. T: Y" t
  539.     }" _: }, [8 q7 c+ j! Y
  540.   }  
    2 b) P& p. z6 y  s* Z
  541.   CloseHandle(mutex);4 D3 t/ `# K& l5 S
  542. " {/ E0 B" _' Q4 J+ F
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ! n7 i* [. @" ]* L% m
  544. ' w8 k8 Q9 k- T
  545.         AfxEnableControlContainer();
    8 s* o. O) U  A

  546. : z4 v4 J4 l' A2 B. `7 a& u
  547.   bCanUpdate=FALSE;9 b$ z" v2 w5 ?1 }* c* }; E
  548.   dwStartUpSteps=1;5 c$ N9 b+ t! Q$ U
  549.   dwProgramState=AP_NOTHING;! j+ z' |9 D9 j7 V# L
  550. - Y8 U6 U& w# s* o
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);1 E, C$ G0 k4 r$ u' @
  552. $ N- y) |) g, N; F2 z0 L
  553.         // Standard initialization
    0 [& \2 L8 b  {2 q3 I
  554.         // If you are not using these features and wish to reduce the size
    0 r. o2 _  L5 C/ A! {
  555.         //  of your final executable, you should remove from the following4 j! ^9 k& b& c0 k( f  b: A" L1 X
  556.         //  the specific initialization routines you do not need.
    / W& O; Y# ^1 x, P6 r
  557. 1 I8 P5 s8 h/ G: x- t, f2 r; R
  558. #ifdef _AFXDLL
    & g/ }0 {/ _* C1 s2 P  _: u
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    5 Z$ p/ D" Z, f6 {1 R& Y0 ]7 {
  560. #else
    2 _5 [" C1 b+ e" u
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically* _/ s& z# G0 T+ S5 ~$ b4 s& P
  562. #endif
    6 V, U$ \0 {( G8 _5 i: L& O
  563. * o* k6 q3 B1 ^2 w+ Y8 r
  564.   dlg=new CRevAppDlg;
    + l  L6 g- ^2 Y6 N9 i$ F
  565.   dlg->Create(IDD_REVAPP_DIALOG);7 u1 F3 U. y* Y* `2 a% d
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) N6 {+ i6 A: C$ x" [! l
  567.   m_pMainWnd=dlg;7 a( F" s' e! E, j+ W
  568. 6 p; ?% K. d0 r9 X( \1 ]. }
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    8 r' _% \# x- H' y5 q( S
  570. " z9 d* a( v' ~$ V4 g( e) D
  571. //  GdiplusStartupInput gdiplusStartupInput;
    2 ]( _7 L  s5 E: N6 f9 \" z& C( w- n
  572. //  ULONG_PTR gdiplusToken;/ R3 i) h+ r5 P( o
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    5 q& Y6 n3 t$ n: ?0 \4 S% _

  574. 4 C6 u6 M5 w& {$ ^
  575. //        CRevAppDlg dlg;- q# `- b! z+ `: L
  576. //        int nResponse = dlg.DoModal();
    . R+ k& y5 C1 ]/ e
  577. //        if (nResponse == IDOK)" j% E/ L1 I7 E# o  A9 b0 r
  578. //        {0 Z; I3 i8 q* Q1 V2 s3 _# L
  579. //                // TODO: Place code here to handle when the dialog is
    ; ^' n: q9 L* b7 }7 t6 _
  580. //                //  dismissed with OK5 V) D" Q  f6 l& v! b8 L3 R
  581. //        }, `3 |) v! w+ c& f( y6 e
  582. //        else if (nResponse == IDCANCEL)3 J- b, X" J1 |) n
  583. //        {
    9 j9 J; d# t1 S. Z( B
  584. //                // TODO: Place code here to handle when the dialog is* H% A7 J  S: E% k5 ]
  585. //                //  dismissed with Cancel
    2 w, h4 M, b( x5 C! S$ |: p3 b5 o
  586. //        }
    1 L' ~( c1 W' }6 t. R& X

  587. 0 j  Q5 i* l' M# f1 w
  588.         // Since the dialog has been closed, return FALSE so that we exit the$ H* g5 |0 h7 S& v+ j, m/ ], N
  589.         //  application, rather than start the application's message pump.
      M2 B- E9 B6 t' b
  590.         return TRUE;
    + |/ O# p% |/ @3 ^( [7 Q( m
  591. }
    + c7 n2 r7 B- v% g8 f
  592. 7 f9 |" A5 {+ O0 i2 H- U& `
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    9 X+ K) ?  c6 n0 ^8 f1 y7 q
  594. {
    5 Y! P" X- A" H. m7 G2 S
  595.   int i;: }8 A- L9 z" {4 ]
  596.   char *szRet;" _. W) I% w. F$ M! m, Y, ]+ ]
  597. . O; Y# d& d9 q8 \( {1 E
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    3 C) G1 ^5 g! E2 u0 o3 X
  599.   if(sztoken)5 m+ F' I7 a& d
  600.   {
    ) b! ~* C8 ?$ Q& T. g
  601.     szRet=&sztoken[itoken];
    & S/ G% i9 p& b. I8 }, F1 s
  602.     while(sztoken[itoken]): E' K( T. m3 u: o% A, k
  603.     {, Z2 Z6 X  k& y$ x1 f
  604.       for(i=0;i<(int)strlen(token);i++)* x" R  [0 ?+ a7 E8 F2 o
  605.       {# L. d, x' s: J% R. m* x
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ; A* p  ]. w% E0 n- X, f
  607.         {1 J8 p% J- V  w+ Y. C6 _" q
  608.           sztoken[itoken++]=0;
    ; G- x( B; f  ^2 F
  609.           sztoken[itoken++]=0;
    6 a) z( K7 p. ~' q# s7 w1 \
  610.           return szRet;
    5 x9 v# K0 w) A) r; T
  611.         }" ^' C) f. k$ O' q+ Z8 |
  612.       }
    ! b+ a- Z9 c! y6 M
  613.       itoken++;
    - p+ X* D# ?5 y1 o- H1 D  I& H( ?9 D
  614.     }
    ' `2 o% E0 v8 R5 I+ b
  615.   }
    2 Z  D+ S) g# u9 s5 Q
  616.   return NULL;
      s# C3 c: i* B/ Q, L2 b, E% w
  617. }  }" H+ ?% y7 u3 s7 N

  618. % s! l3 O3 S/ j0 G
  619. void ProcessProc(long Total,long Current)* u4 X1 b: c0 T
  620. {
    ' \. m' x3 V3 c8 Z6 E
  621.         MSG msg;
    1 e- b' ]( v  X
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    6 N9 {' q! f& F+ \9 J
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    0 U9 M6 d$ u/ \% r
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    2 J* L( I$ W% b9 G
  625.         {- h6 i/ h! |# H" N) v0 ]
  626.                 if(!GetMessage(&msg,NULL,0,0))
    . f3 B: ]: r. H0 c4 C
  627.                 {6 `( l( ^9 l! S* @
  628.                         return;
    ( N9 `$ U2 v, M
  629.                 }
    7 T% F( G- U! z0 B, ?: a
  630.                 TranslateMessage(&msg);
    6 @/ o) x% L  }( y- [7 b
  631.                 DispatchMessage(&msg);% [( H1 F! k' X
  632.         }       
    / }' ~$ k" ~. Z+ N: g
  633. }$ z6 _4 b% z7 d) p+ l9 q, P7 S( B

  634. 4 t6 e' }" F% F. P( k) U. t
  635. BOOL bFirstChar=TRUE;
    1 R/ k& }0 r- @& ~7 X# }

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

+ T/ ?9 S. T0 _3 V' R5 D5 l7 X! b4 C% C* t% f8 P+ x

評分

參與人數 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-2-21 12:47

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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