找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
' {; k( K, h0 d- B4 Z: P
  1. / RevApp.cpp : Defines the class behaviors for the application.2 k/ P7 ?/ x0 |( Y+ B* ?
  2. //" u) J' I! x1 o8 k9 D& E
  3. 5 F$ Y( Z9 [. Y4 V6 S  N9 ?& H
  4. #include "stdafx.h") b; m: p+ G+ V7 z. A9 Y0 v

  5. 6 s1 ]6 [+ I% Y. ~+ V
  6. //#define UNICODE' t3 W( i$ V& {( v  z
  7. //#include <gdiplus.h>
      S4 s# m) d- u( a, j. e
  8. //using namespace Gdiplus;
    0 q( K1 r: W& S4 h* c+ E
  9. % ~* @3 f) e. A5 D, H8 S  H
  10. #include "RevApp.h"
    6 t! F, A& P' ~" d( t4 T) a7 D
  11. #include "RevAppDlg.h"
    9 h8 f7 S" B2 |/ P& U

  12. 1 \+ _5 u& K& g$ _5 ^
  13. #pragma warning(disable:4786)! E/ v8 X1 \, i; H# _% J
  14. #include <map>/ b9 d, C; d8 {' |
  15. #include <list>
    ' X. \1 w( c& x. E
  16. #include <direct.h>
    9 W0 N# `0 S& V( V& G6 |/ K  f
  17. 4 H" L# p6 i7 i/ ]8 I4 G
  18. #ifdef _DEBUG& q& Y5 H" R0 u( D! T
  19. #define new DEBUG_NEW
    ( f8 B2 ^  O" v
  20. #undef THIS_FILE$ e$ q: i2 {" }* a* n3 E6 m
  21. static char THIS_FILE[] = __FILE__;6 V' r( u/ k( a  ^
  22. #endif
    + y" B# l% V! |% T$ t
  23. #include "SkinResDef.h"
    4 T5 @$ g3 }" i5 b  a  g1 [4 J6 t
  24. #include "ChangeBG.h"% Z+ P& y  j' D5 s
  25. #include "AFXINET.H"( X+ l1 u" v) R6 {# @

  26. % @! K* X# @* M5 i0 `; o7 a
  27. #define TRADITIONAL_CHINESE 0
    5 x. I4 L. V) E& x- F' {/ Z6 f
  28. #define SIMPLIFY_CHINESE 1
    ' j+ B' s9 F, a! R0 |3 N
  29. #define ENGLISH 2
    ( F! s6 V& _; _- P3 r: k
  30. int m_iLanguage = ENGLISH;- X& f  B4 W+ L7 Y' x
  31. /////////////////////////////////////////////////////////////////////////////; j# N0 ]  [6 ~2 ?8 u4 I8 c
  32. // CRevAppApp
    / O) M- }" j( |1 I
  33. , J/ V; p$ i8 E9 ?. n! z0 N  [+ |
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)4 g1 H! O+ P. `, y' U6 x8 @
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    6 ]6 Y4 q. [8 s* B$ J
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.9 o7 H$ @$ K0 z+ T( Y' d
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!: }3 B- \6 a% Y' ]! t
  38.         //}}AFX_MSG9 J7 E% f" A. t' u7 p$ L
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)/ b: O  Q( ]* A
  40. END_MESSAGE_MAP()
    3 P% w% Y9 w1 N: l1 t4 k2 R1 G
  41. 1 S. E" I8 l; t8 {) y% T
  42. /////////////////////////////////////////////////////////////////////////////, c4 I/ B) c: i: b
  43. // CRevAppApp construction
    4 [( ^& E; K, x: v+ G8 y
  44. 3 D2 x* U, f% Q" f
  45. CRevAppApp::CRevAppApp(); U6 _! n$ z% H/ x4 g
  46. {( w; c% q8 `& [  `
  47.         // TODO: add construction code here,
    5 J- w+ g; T) ?, ~+ k
  48.         // Place all significant initialization in InitInstance
    2 \4 R0 K% M7 e" \. k
  49.   bDisplayIsBig5=FALSE;+ g) a/ P2 h0 F# z6 t" t: U
  50.   bRestartUpdater=FALSE;
    . k. X8 z0 O, i: h! C  V
  51.   bFinishUpdated=FALSE;8 ~3 g( {- P/ T
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    , X3 b: j# e. J8 r( h+ Q# V& n
  53.   InitChangeDataBig52GBKS();( \/ [: V, _# A+ \1 C+ z' I
  54.   InitChangeDataGBKS2Big5();8 L- S* ^8 h$ f* a( H- E" ]
  55.         //
    6 Y/ k% ~( R! Z, Z+ d/ X2 q
  56.         bClickRunExe = FALSE;
    : {( i  |5 ]' S' S5 ?
  57.         //8 x4 a; S1 R& Z9 @
  58. }! J2 L, ]* W# {) o+ O5 Q

  59. ) }. h: U. r8 k- R
  60. CRevAppApp::~CRevAppApp()( r& k: {& ?4 U
  61. {0 q% V) p( \+ `/ X# D
  62.         // TODO: add construction code here,6 b2 Y' [9 x# t6 V! Y5 v" d: `$ N
  63.         // Place all significant initialization in InitInstance+ D2 b* e0 l; W* X; z
  64.   EndChangeData();
    1 N1 K0 R& f; [" o! c
  65. }2 Z% k0 a2 w3 L" i& j' N
  66. 6 o4 E% X; F2 K5 G/ P7 B7 q7 R
  67. /////////////////////////////////////////////////////////////////////////////
    0 X! F! |/ R& I* }* P
  68. // The one and only CRevAppApp object, K7 ?% s: Q  m: ]" j$ U

  69. * i* {& v- b& P5 r2 J+ M
  70. CRevAppApp theApp;( @' l/ ~  S' K7 _' z: e3 V

  71. 3 i: {# N! u1 V" d& ~
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)% m7 t4 t* A# w4 D/ h8 `0 ?3 h
  73. {7 X- P# w( O& M9 D$ j+ F
  74.   int iEOF=0;
    $ p* R: L: ^* V, M) J
  75.   char szTempName[MAX_PATH];
    8 j! |. ]" ~. Q1 T" y
  76.   *szFileName=0;
    % M* g5 ~' H: G
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ' T* I* j% y5 N5 k8 S
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    0 M7 k5 b. A! a; r8 P# T+ r( E
  79.   {
    5 K/ I6 V! {. _% ~$ p
  80.     strcpy(szFileName,&szTempName[1]);
    # J! _6 |0 M: ]
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    1 g& ~$ k" u( d$ m. l7 t: M
  82.     {, a+ L3 q$ n6 H; l0 I6 R9 r
  83.       iEOF=fscanf(fp,"%s",szTempName);
    6 f+ R. K5 {, d- A1 j8 z
  84.       strcat(szFileName," ");
    ! Y* z' h! L. o) c' c% g4 U7 J* `4 s
  85.       strcat(szFileName,szTempName);7 e1 _$ @9 C+ P8 |
  86.     }  h5 ~9 }0 M3 ^; L
  87.     if(strlen(szFileName)>=1)
    / l! I( s- Y) P/ c
  88.     {2 v  Z" F. l' O/ v! J  ~0 u$ @
  89.       szFileName[strlen(szFileName)-1]=0;
    ' B" W( y% J$ c2 O# H
  90.     }6 c6 X8 y, J, h& d& b
  91.   }" ~" U# f; S: ~) ]! E" U2 `
  92.   return szFileName;5 \2 D) }# \  Q$ ?* d7 @2 v4 v7 @) d
  93. }
      G; p  J  ^, N: H0 e7 d+ ?
  94. 1 `! ], G5 E9 S$ I* {5 G
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( u: C! ^! V) x  X0 A0 j" C2 r
  96. {
    8 P" B' _9 u& M1 K+ g$ Z
  97.   FILE *fp;6 J9 s" L  y0 c
  98.   char *key=NULL;
    / r' ~' s7 d  M# ^
  99.   char version[MAX_PATH];
    2 y/ n0 ?5 L* i. [
  100.   LPUPDATEFILE file,olds;( J7 B" w* k% D# l
  101.   std::map<CString,LPUPDATEFILE>::iterator p;9 C1 y/ K+ m$ l3 X2 N8 d/ {5 T

  102. ) w( k2 n- f+ M' Z( ?2 G: }. S  @
  103.   UpdateList.clear();! c' |9 s4 w  _
  104.   UpdateFile.clear();
    ! D! V& }, u# Q; G1 x
  105.   if(GetFileAttributes(filename)==-1) return false;3 C. |" k! N' S# U" x( ~
  106.   if(!(fp=fopen(filename,"r"))) return false;
    . t0 w) F. L& n* e
  107.   fscanf(fp,"%s",version);
    . j& ?$ C3 l8 j9 ?
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }+ [9 \& S$ Z7 G1 y/ d. ]  f$ q
  109.   while(fscanf(fp,"%s",version)!=EOF)* ~( |2 w: h* j0 |; b
  110.   {. k& @, i- N3 a
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' O/ k0 h, k+ s0 |
  112.     fscanf(fp,"%s",file->path);
    4 v2 P: @+ M. i, b# M7 @
  113.     ReadFileNames(fp,file->file);
    ; F) j5 h4 k& o/ Y) a5 G- q
  114.     strcpy(file->full,".");" @. H0 I! G3 y
  115.     strcat(file->full,file->path);9 p6 @$ m& ^1 {$ s
  116.     strcat(file->full,file->file);
    : G4 b! B  j: x! \- ]* n
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    / C# }' t& @$ e) G/ [4 d- A7 h
  118.     {
    5 \2 B" a1 m$ ~
  119.       file->vers=(float)atof(version);" s; b/ U. R( y/ z
  120.       UpdateList.push_back(file->full);
    ; a7 o; _! b. f
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    3 `3 \, `+ G8 h3 o  r. L+ ]2 r
  122.     }
    ! Q: e$ D/ D. \( T& p
  123.     else
    5 K$ K' f9 F" r/ L+ B: V
  124.     {
    $ U$ Q' _# e, \
  125.       olds=(*p).second;5 P0 _3 s7 x7 U
  126.       if(olds->vers<(float)atof(version))1 G2 @' b$ c8 H, t; e7 I$ x# A
  127.       {
    # s, k# w0 h; j
  128.         olds->vers=(float)atof(version);" A! o. r. }6 c  a/ e  G4 ~- ]
  129.       }
    % A" N4 V. P+ @/ Z) E. F) x
  130.       free(file);
    " w" B- c' s. ^0 q: W# y- w* |
  131.     }
    . Y% f2 c' ^; }3 t. _; q
  132.   }" S2 w6 h" Q8 P1 s
  133.   fclose(fp);
    * C4 U$ C# F0 {0 p, d# ^
  134.   return true;8 E. p0 Y6 X1 _! i
  135. }
    4 p; Q. o% Z/ g
  136. , `* J! H* K0 M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)2 J; z& g# S. N2 \6 h9 o5 t
  138. {2 y. Q; i4 y9 [4 F: w& I
  139.   TCHAR  szFull[MAX_PATH];
    & E* L% Y7 n$ [6 X) w1 o5 B
  140.   TCHAR *token,*inter;
    - E% b0 g6 U1 Y* H* V, J: S4 C
  141.   *szPath=0;
    $ [0 `% A/ p1 P# u
  142.   strcpy(szFull,szFullPath);
    ) D3 {1 e2 G% n- ]) W
  143.   token=strtok(szFull,"\\/");4 L" f  \( a. l4 O6 x) W' b" L
  144.   inter=token;
    # I7 l( }6 b1 i: `; H8 f, K/ K
  145.   while(token=strtok(NULL,"\\/"))9 K$ |; c8 L" Z/ W  U6 W. U& J( {/ x4 K
  146.   {% g1 X, z6 k3 I3 P
  147.     strcat(szPath,inter);8 m( ?3 x# R- H
  148.     strcat(szPath,"\");
    2 q& T- B' u5 @  {5 K2 L
  149.     inter=token;" M; |% e0 A/ {
  150.   }
    + Z* p' l, Y) U3 h0 }0 {" a
  151.   return strlen(szPath);1 y$ u* \, ?& E3 Y) E2 d
  152. }  p0 A# I1 B- G# P! G

  153. 1 O$ f- x4 J/ m5 Y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 Z& o, \9 _; F4 P
  155. {
    / J, f8 }& Y6 R! Q: C
  156.   DWORD attrib=GetFileAttributes(Target);
    9 P/ x3 |+ a8 e5 x) z  o( J
  157.   if(attrib!=-1)# G( U9 T4 _9 r0 r5 ~* L* O
  158.   {
    * T# l/ r  h7 C5 j. ^* l
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))/ `1 P# i% H  }0 p3 I% R5 H0 J# L6 v
  160.     {; d+ \8 Y( M" k' X6 i. P9 X
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);% ~( _( r2 u+ r" J
  162.       SetFileAttributes(Target,attrib);3 }0 o4 |' n  {2 l6 C0 q/ s1 G
  163.     }
    8 ^. P* d, @# N8 x/ f  W- T
  164.   }
    ' F2 w8 l6 U3 Y8 A' v2 g+ h6 U! X/ {
  165.   CopyFile(Source,Target,Erase);
    9 A" q1 e3 l& v. P2 J  I
  166. }
    / v; e' y' q: Z( _
  167. ' h( R7 B4 L! d0 ]- M
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ' h8 `! t; ^8 r" W) k/ C2 e8 l
  169. {
    8 ]% O9 ~$ a' B) k
  170.      FILE *fp;
    * v: C3 G5 t& F" y2 x3 v4 l
  171.      char  szBuffer[8192];3 u; {; l8 ~$ J& [
  172.   va_list  argptr;5 d% h' d2 T; ]2 }. {' z! Q, T

  173. 9 b5 O  b3 d* \; [+ w2 z8 p
  174.         va_start(argptr,message);
    9 P/ [" B# s/ o8 r) x0 d$ l
  175.         vsprintf(szBuffer,message,argptr);
    3 L! u, ~* T0 S/ D6 ]* P. y( z: D
  176.         va_end(argptr);
    9 l. j+ T0 Y/ q
  177.   fp=fopen(FileName,"a");
    # L# `% L  U$ \5 I& E
  178.   if(fp)
    # b4 n' q% Y# c) e& j, Y9 @
  179.   {
      c" i; m  r; x0 @# z1 \
  180.     fprintf(fp,szBuffer);
    ) \! t$ B/ b/ u  T: y" K- o; C* e
  181.     fclose(fp);
    0 G: H  o' X+ S4 C6 D
  182.           _flushall();
    ( w7 @; S" @" i# Q
  183.   }$ k( S4 w8 b( c9 z" E& }6 Y* I
  184. }+ ?8 X; N# n5 k: C, x* S

  185. # n' B& m; b# b& {  i! s" ?3 K: ]
  186. BOOL CRevAppApp::Fclearf(char *FileName), [3 F" n: r/ V% o1 e& Z
  187. {
    " a! ?: u  e2 b; k% B3 N
  188.      FILE *fp;+ K$ A9 k4 N2 @
  189.     DWORD  attrib;9 Y# K$ \/ e) z. A
  190.   attrib=GetFileAttributes(FileName);# B. k6 ?' V  B; d% `- t
  191.   if(attrib!=-1)/ _& d0 u  r, N8 n+ ~8 k# `
  192.   {# a- z" c' ^, R( K* I: Z  y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    8 t% }/ l& F, p
  194.     if(!SetFileAttributes(FileName,attrib))3 d3 G6 T( S' K
  195.     {3 Z) V/ B  h2 P
  196.       return FALSE;
    # G" Q( x% {3 o" c. e# c
  197.     }$ y$ [% Q8 H1 ]7 L6 ]1 ~$ t: {; b, ~
  198.   }4 j' Y% w$ _: b7 B* s. j! B% f
  199.   fp=fopen(FileName,"wb");9 {! q3 \  D. v* j: J
  200.   if(fp)
    * ?8 @8 y$ p( m) N) ~  O/ n+ e6 C0 S
  201.   {1 n2 L$ q2 J: H
  202.     fclose(fp);& `3 |0 ]! a: R* I
  203.   }
    " D& E$ `) P7 E- c9 S  C! S) B
  204.   return TRUE;
      p9 z& K9 @) w" t
  205. }
    : d" _; ^! I; o! A+ Q7 M

  206. * f; }5 m, T4 b/ Y& O; ^# Z+ o& ~" k
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ c# m# ?0 y! I; J3 i* @% Z' H! R1 n1 Q
  208. {
    + a9 l' h& q+ ^$ P& J0 S
  209.   char filename[MAX_PATH];
    ! b& s* [8 m% w5 W4 @/ I
  210.   LPUPDATEFILE file,olds;0 b5 ?2 c6 q$ ^6 I
  211.   std::map<int,CString>::iterator i;3 ^. s1 i- ?1 U) _: Z8 v5 x2 _! e; |
  212.   std::map<CString,LPUPDATEFILE>::iterator p;1 G9 S3 r5 z6 t4 T
  213.   std::list<CString>::iterator l;; k! O! R  m- V1 v+ k/ N
  214. $ N: J1 @. b( R. `
  215.   if(bFirstUpdate)
    ( E* s; A! y4 l9 B; T+ X: F$ |+ E
  216.   {# T' C+ ]7 ^% N& W" @2 V# ~
  217.     dwCurrFile=0;7 Y# N/ L9 v9 E- I+ h: k4 U- A
  218.     bFirstUpdate=FALSE;2 v) w  f, t& B
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 Y  f8 g+ T/ ?1 Y& z; g3 }- E+ V* d
  220.     {; g! [0 Z5 Q) o
  221.       dwTotalFiles=UpdateLocal.size();
    . z- _0 t- i$ m) M$ P' r1 }  s
  222.       dwDownLoaded=0;9 c& ]- Q- H* }! O1 ?
  223.       bSilentStep=FALSE;9 g, A! E/ j& U$ \( I, d8 S8 `0 n
  224.       bCompressed=TRUE;
    : D$ Z; C5 R0 a. T- _
  225.       strExtLocal.Empty();  A3 p' D5 j: d4 L* C
  226.       strFullName=(*i).second;4 z+ f& {6 H/ c
  227.       dwProgramState=AP_CONNECT;- Z7 p7 A, X& w6 V8 c9 l  u* V$ U
  228.       return TRUE;" H: J: z5 r% X/ G: m4 @
  229.     }. O& X2 w, G- Z3 G) k! T0 O
  230.   }
    - K% c- A7 O; _* i# l
  231.   else if(bRestartUpdater==FALSE)/ Y- H: t/ \* v) Q9 ?
  232.   {
    % m8 G) ]/ d7 j, y+ t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    + A* k) M3 K3 ^$ o6 k  S
  234.     {3 s& i8 q$ k5 F9 f. Y
  235.       file=(*p).second;
    , G2 o/ R+ O: Z
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())) k) T+ u% Q5 a$ \2 M6 M
  237.       {2 F& u; T) q% G* R- n$ N5 m0 c
  238.         olds=(*p).second;
    ; K3 ~% x. f. ?0 [3 \
  239.         olds->vers=file->vers;
    . M/ M# E2 Y7 H9 ~* X
  240.       }7 d% b* k1 |0 ^2 o' A% F; N
  241.       else; v" F' _; ~5 D2 W# h9 P/ q
  242.       {2 _7 \/ Y* k& ^* x) s
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ K+ @8 V9 r# _4 {8 A+ i
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    . S1 k6 N+ P5 T* B
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));4 K$ s/ g' q' p+ h- e  c+ ~6 D
  246.       }* k) ^" C" e8 Q0 g
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");6 r2 ^1 ]  o7 f5 O0 ]3 M+ l  _0 I
  248.       sprintf(filename,"(%s)",file->file);
    # U" K3 b0 q3 j% A$ J9 R
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / G- O/ B- j2 g4 [3 ~
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }4 Y% G4 i* L0 E% a$ ~
  251.     }
    ' C5 J6 o. M5 A
  252.     dwCurrFile++;
      @2 B' I0 T3 G
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ u, D) S! P/ c
  254.     {- o5 V6 ~2 f9 x) m
  255.       bSilentStep=FALSE;
      T. U& U8 F3 n) S5 e0 g( n$ m
  256.       bCompressed=TRUE;
    7 F9 G, d, h# a( F
  257.       strExtLocal.Empty();
    , r0 _7 }& ~) C" z& x% t! P
  258.       strFullName=(*i).second;
    * C6 W. |3 q( `3 a. t2 o5 D% j
  259.       dwProgramState=AP_CONNECT;. g" g+ r" N, c) d2 Z
  260.       return TRUE;
    " g" l4 O* d/ @7 ?, a) b, [0 u
  261.     }
    % p( u  T0 ^  [
  262.     if(!bRestartUpdater)" r. C& M; ^0 A8 T5 ]. i9 H7 _
  263.     {
    ) {8 a. c& m- \0 @
  264.       int iCurrSize,iFileSize;& w0 y9 ^9 I+ y) k
  265.       iCurrSize=0;7 B" e: S+ T% [3 j, z9 U0 D8 Q7 W
  266.       iFileSize=UpdateList2.size();
    1 X* T: R  }# @- g' P. a
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");' L5 I  p+ n$ A' y3 v4 r0 |3 D" {
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");6 t- G& }) z3 U! a
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");& `( N4 j( c$ r- R
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # Q& G2 g/ B. @$ j* [! e
  271.       Fclearf(".\\update.dat");
    / J* p/ q5 N4 l  }& |
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    " j# C, O- z% P* M/ i8 o9 r$ d
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)1 }7 ^: B% A* ?
  274.       {4 U& H" R3 _2 x2 @
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& q+ u$ t: q% ^( h: s5 k  f% s( `
  276.         {
    ) _8 w( k9 b; P( R
  277.           file=(*p).second;
    + Q) ?/ S! g% y
  278.           sprintf(filename,"(%s)",file->file);; ?/ Q' G% g6 U; S* A8 [
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ ?+ y* U: @. D2 ?4 s1 q
  280.           iCurrSize++;
    8 f! c1 D5 _- X+ P0 H* G: F( k; W5 I3 h
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));$ c% `1 x! P2 G3 ^
  282.         }: @. z" _; I( b
  283.       }# a# l; n- g, a9 m
  284.       unlink(".\\update.txt");. g* I0 D/ K) x! b# B0 s
  285.       unlink(".\\update.tmp");' {  W2 _1 Y6 k5 X7 R( H  I. H
  286.       Fclearf(".\\checkversion.dat");. \9 `) T  H! O; ?; @2 X6 p
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    5 t% n/ \4 I( i3 `2 `: ?
  288.       if(UpdateLocal.size())
    # r7 k; [2 ^( a- ~) @
  289.       {2 ^5 B* B' q- @) ~+ Y- v' x! r
  290.         UpdateLocal.clear();6 H! \: M" a& b
  291.       }9 d; I9 r+ D8 z
  292.       if(UpdateFile3.size())4 }9 n% |: l' s
  293.       {- z" w/ f' {9 d# s8 o) i% c
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' D- O/ m  Q+ ^
  295.         {& T/ K" H! x# O5 d" U: P
  296.           file=(*p).second;
    7 O4 O1 b, k) C( x; c4 S) o
  297.           free(file);
    2 N/ T2 P4 l  p. a" S8 `* l- E' z
  298.         }3 b1 n0 U9 e9 |8 ^9 c' n
  299.         UpdateFile3.clear();) P* u$ h% o% S% T( K1 R
  300.         UpdateList3.clear();4 |; T! O; Q: v* f# B7 s3 ]: B
  301.       }
    + l6 l7 O' X; E* N7 W4 G- }0 h/ ~2 ~
  302.       if(UpdateFile2.size())
    ' |" Z% {- s" I* J/ g! U$ T
  303.       {' O1 B8 D0 d# s7 |2 t; T; [
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 n2 G; y+ g2 R" Z
  305.         {
    & S# X& `' ]2 Z3 w" Y" _, s9 P
  306.           file=(*p).second;" O) e& x1 Q& P% ~
  307.           free(file);
    " v  V+ L- t0 Y5 d' O* m5 E
  308.         }
    4 M3 I5 Z8 |% y* M
  309.         UpdateFile2.clear();% G& s) Q3 |( R. n- F3 x' G
  310.         UpdateList2.clear();
    8 u3 z- G" V0 x/ @( o
  311.       }6 ?) X) @7 s. ^3 A& X
  312.       if(UpdateFile1.size())3 n! O, }$ h  I, ^$ A
  313.       {
    2 O" F% v: N* K/ _1 h7 C; Q3 z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 w9 z# P- S' b% b' P& J9 q- Y
  315.         {
    / o% Z% o/ B& e3 D1 B7 F2 b
  316.           file=(*p).second;: a$ N% {! Y5 k: y7 J4 @
  317.           free(file);
    / Q5 F5 P2 n, \) U. e! t8 L
  318.         }
    + Q/ ]/ t/ F' B( v
  319.         UpdateFile1.clear();
    & {. O$ E2 i+ ?$ T2 Z/ A" ~
  320.         UpdateList1.clear();
    * I* C% \& }* q& n) H. T+ `
  321.       }
    3 S& Q# U3 d; e" z( Y9 l
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));, X$ I7 N  K) O, x, c9 Q9 t
  323.     }
    7 D2 T  j) S4 C  N( C
  324.   }
    * s2 G+ _0 F+ X" o  J3 q% Y* @. p4 W
  325.   return FALSE;
    " O$ @+ o, s% O* _( j
  326. }' S+ O8 V# I8 Z6 l4 @
  327. 4 A4 K/ s( J* V  `5 O5 g7 c
  328. void CRevAppApp::ClearAll(void)" S9 S: y! {4 \1 @5 q
  329. {
    6 y: W; ?1 D' D* K# Y5 a2 @. U
  330.   LPUPDATEFILE file;. R3 y. E% S" w* G
  331.   std::map<CString,LPUPDATEFILE>::iterator p;' n" t* ]/ ]' O3 {  L+ P
  332. ! z! l0 o9 z1 Y; r
  333.   if(UpdateLocal.size())
    ( C4 J9 m6 O3 E2 j
  334.   {1 y& J. g* h! q" K) H1 O
  335.     UpdateLocal.clear();& \' o2 q4 e* O) V% _: `# I
  336.   }, M! H: ^# ^- G! m
  337.   if(UpdateFile3.size())7 ~7 d2 f) c. Q7 o; {
  338.   {, j; {- k% q# T, Q* l& C
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  x* W. @& M0 h* g! v" v6 H1 X: e. s
  340.     {
    + u0 l- o3 F1 D+ O% D& A3 c5 d
  341.       file=(*p).second;% \# g. Y. a: N  ~# h; t
  342.       free(file);* `. o5 O7 G' w  z) F/ w
  343.     }
    4 I' A+ @" I4 a- G, A" P" N. N
  344.     UpdateFile3.clear();
    4 L0 Y' f: ]6 z5 b/ A# {  W
  345.     UpdateList3.clear();
    % e6 ]) j0 I! q! i9 I
  346.   }4 {% \" _6 e0 G4 w9 P+ P" n$ s  z1 }
  347.   if(UpdateFile2.size())
    ) q& v! x/ h" }
  348.   {
    7 y: f9 E0 G+ V/ |4 F" s) m
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% ^& C1 L7 J! ^! n
  350.     {
    * u; v! y+ v0 d* }
  351.       file=(*p).second;1 g3 y9 ?" |( J4 i
  352.       free(file);
    , S  D; J" L7 [6 T5 ~
  353.     }+ ]+ B8 I7 B) h( N
  354.     UpdateFile2.clear();
    - `1 _& k( F1 A$ D/ _4 y; A
  355.     UpdateList2.clear();  G/ c" T% t  q
  356.   }
    4 q7 x' `7 q# W' |* ?" q0 N
  357.   if(UpdateFile1.size())2 U# x7 l6 h( |$ p7 @1 u' y
  358.   {
    " B$ ^# a5 r# y( @. v
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* r5 H8 y$ X2 k$ R& C, p
  360.     {
    & P0 R/ x9 V$ c( f$ A
  361.       file=(*p).second;# J: o; X( O# B6 [- L5 t: J
  362.       free(file);' X5 V6 n' o* @6 P
  363.     }
    ( I, C9 T( }  B  R& K' y3 i
  364.     UpdateFile1.clear();5 |$ u1 \2 k7 V8 r5 @! d  X! m7 A) \
  365.     UpdateList1.clear();  i# e, h) G, P9 B
  366.   }4 u: a! p% n8 G5 X5 Z& L& |* E4 |5 @. f
  367. }  
    ! y3 p9 i( n/ Q, L
  368.   ; G2 N# r' I" I  `7 E) g! s
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ( A/ r2 A* T7 E* A- u0 M
  370. {
    7 ~& Q9 n7 ^* h  I: |0 P) H
  371.   int c;8 {0 V9 N0 g$ G( `- N
  372.   LPUPDATEFILE file1,file2;# r, z& P% x7 q, u# Z+ ~0 o( @" S" U
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ; E$ U2 W7 X3 A( c' P+ A8 C
  374.   std::list<CString>::iterator l;) E# E% ^# A% ~, }
  375. 9 H. p' ^$ e* j/ l! Y4 k4 v4 ]% ]
  376.   UpdateLocal.clear();
    ; e+ o& n! A) V- f- w. n
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);# s0 m) g: ^7 m' M. K/ F7 W. `
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);( ?; M# ]7 y4 f2 g+ b6 [3 n7 H
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);0 X: E1 V0 f" E2 p0 w2 y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);, a. B& S! _( M/ c
  381.   if(UpdateFile3.size())
    5 R3 O# h* d) w% W4 ?9 M
  382.   {. W/ X4 M6 E% r7 v
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)  d. z& c3 E8 q. H
  384.     {# r% Y" ^8 Y  I9 D% q; S
  385.       file2=(LPUPDATEFILE)(*i).second;
    ( R! X7 @+ [& k* }
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 h! |; f9 \9 p" L: ~9 |
  387.       {
    5 U3 t2 U0 w0 X$ k- \( v
  388.         file1=(LPUPDATEFILE)(*p).second;0 p6 M/ U4 m" \9 c0 L2 h' @
  389.         file1->vers=file2->vers;
    ) `+ p) g& C5 ?- E
  390.       }1 |# z) G7 s" K$ @. f( f4 j( g
  391.       else- _+ @5 w% H. l: ?% J/ n
  392.       {
    0 ?! P+ l6 J0 H" N- T
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 [5 H" [% j4 T3 _
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    " T9 _+ C( k2 e& @: ^( ^' @
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));; F/ y% F( P5 R( x. Z, X9 O# j9 {
  396.       }0 a' [( A+ D; Q% R. M
  397.     }
      F9 |9 @; H0 Z1 e/ G: S( N3 `0 U& N
  398.   }
    + _8 W. A8 `2 \2 D+ b
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 h! Q- Z+ z4 }  y  n
  400.   {
    " J. C3 v" u! w/ i" z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())7 A8 S& i, h, L; t
  402.     {$ b* l4 C- T" x. }/ g9 _
  403.       file2=(LPUPDATEFILE)(*i).second;" P  |4 h, _& q! B
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())% y) q- D& |  V/ H- d$ c
  405.       {
    6 v6 X- x. r6 j
  406.         file1=(LPUPDATEFILE)(*p).second;6 G& Y! O9 y6 d8 d, f
  407.         if(file1->vers!=file2->vers)
    " i0 |% D; D4 R, B- o
  408.         {
    % ]# O: `8 N/ ~  A% g# B0 h% a3 G$ i
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ p: z, t) D) u5 n' f
  410.           c++;
    * |, l' V' n) S+ |2 k+ y
  411.         }
    5 V& H/ _8 @/ M( I6 k
  412.       }
    6 Z4 t1 g  L2 E
  413.       else6 a* W3 y" m3 s& T! W: v
  414.       {
    2 f+ x7 I' @8 F" \$ L; L, B/ C
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& y" Z" J/ G& D2 r4 a+ @  w
  416.         c++;
    $ `7 {1 R* u4 A$ A# T
  417.       }
    / z2 ~, a  S) k6 H
  418.     }
    6 |/ B7 D* W6 k$ ^0 [  L0 l1 {
  419.   }6 T, T. w! x/ G9 g7 y
  420.   unlink(".\\DownLoad\\update.txt");
    " q0 B: r9 s" _7 k/ @& u& U4 ^
  421.   if(UpdateLocal.size()) return TRUE;
    : u9 a9 E5 O( L$ A" ]
  422.   else                   return FALSE;( k/ _# g0 t$ G9 E5 W: N
  423. }
    ( O" q# Q0 A) k

  424. & S5 y) r0 I9 A- i1 l! [8 L% T" p
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"# _- b$ ~" ^" Y! V. n) G0 ]
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"3 n' T0 ~; V* T1 W6 D3 y# M
  427. 9 _7 x3 l& l" T3 Z( ^0 l" G

  428. 5 B. _+ B' C, S. q. K' |( K

  429. . ^) S* V# X- w- ~+ A( S: z2 c
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    + i0 X6 k% Z( [) |5 C
  431. {
    ' x% c* {& m) u
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    , v6 f0 W6 S# F/ M, m6 P! v9 e# y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 w9 x; t0 E' u# t2 U* [# P
  434.   {
    / f* ^' Z+ n, ?/ y7 o5 _6 U
  435.     char szLanguage[50];- J1 D7 G7 y' d. a) ]' I
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& r3 z% M# o! m1 F
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& v* I* d" E* A  x! ]: K, y: d
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 x. [  t* `' n9 d7 o. x# X6 S# z
  439.     else                                   m_iLanguage=ENGLISH;/ e! p# q+ [2 f' \+ q2 X. `
  440.     char szRegister[100];
    , p+ k6 {$ K% Z2 S5 h
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");$ p  `2 D$ r& Z, K1 `! Z2 j
  442.     strRegsName=szRegister;
    + s# q# Z0 y+ h3 s' {6 o
  443.     char szPatchURL[100];( `6 l4 t: H8 ~* d: {7 q& z
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 X( Q* ^: s3 |
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 \4 d( g: Q  {2 G& ]8 d$ S7 X
  446.   }! V. o7 H# r( t. T9 y& R
  447.   else
    4 `6 {9 G4 `3 A" {2 O0 ^% @" R
  448.   {/ M! c8 b0 T! s% z6 n' |
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) N; e" n' ~7 l4 V8 j
  450.     strRegsName=DEFAULT_REG_URL;7 B" w  j8 j8 x9 p
  451.   }4 z" @4 k. G/ ?7 c  @0 V* M* J4 }$ [; k
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    2 [+ f# G0 I2 B8 P7 P2 `: l3 Y
  453.   {
    ( l& M2 g8 k; p" g" {
  454.     char szIP[50];
    5 o. ]9 B8 [$ W/ P; Z
  455.     char szDIR[300];4 c4 v7 C% g0 H
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 G% I0 }) g- e2 o; m$ C7 G4 d
  457.     {
    4 A- H. X- s( D; I& A7 L3 d
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");) @7 R4 ?6 n4 _0 v3 a3 U
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    * g/ X9 \1 S* M) v
  460.       strHostName=szIP;
    # h+ P" ?1 |  g3 g. u! }
  461.       strHostPath.Format("/%s",szDIR);
    / F! o! \( O# s% u/ ^0 }
  462.     }
    5 n# W9 b) s; x2 z& i# h. b
  463.     else
    2 P% {  e, d+ _+ [" A/ C6 O$ A
  464.     {
    ! K! T% m9 `% ?" L4 r% i: U$ I
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ! C" y8 n( m5 _  H' m, z( `: k( q
  466.       {
    : d) |/ P  M& k2 b9 m* q8 T2 x
  467.         char szLanguage[50];) F$ l" d7 c  [& G, z, z1 X& n
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 G1 R2 d/ X9 ]9 [( }8 I  `" U
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;5 I6 ~( b) L( l9 Y2 K
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  T8 T( l- ?& i& K. k+ M: o
  471.         else                                   m_iLanguage=ENGLISH;. z: Q0 e( o9 Y9 F
  472.         char szRegister[100];! ^8 l8 a% s  k4 C0 H
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 F" T* _4 o& W2 M8 F2 ~
  474.         strRegsName=szRegister;* z' C0 v' b$ ^# U$ |
  475.         char szPatchURL[100];) |: N& H/ z5 Z2 o8 f# v
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 ^! B+ `# l3 Y: C; \1 x
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & z! [4 v6 i6 l7 z
  478.       }7 k2 D; t9 T; D% U( M! N
  479.       else$ @; G8 n8 A& a! d' Q% I. h
  480.       {
    * a( e; `0 ]; O8 e7 t. `9 _
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 H# Q) U& p  o( q- B) u# k
  482.         strRegsName=DEFAULT_REG_URL;2 d1 A; ?6 W6 \, J5 R. @( [
  483.       }
      u! Q+ S' X. z  B/ _3 H
  484.     }% L, y5 ?4 k% T9 {7 a( B& N. ]
  485.   }0 D, a1 _, D0 Y
  486.   return true;8 ~: {8 z4 }$ y  k! j. G" f$ C6 w0 N
  487. }
    " {! R! N0 F: E0 U+ p

  488. 5 _) H- y8 W5 `; h% g: ?
  489. #include ".\ZLib\unzip.h"
    # \& D* E6 O6 V' b6 m* T  K
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    - k- Z- l6 ^* T6 Q) v# @3 H+ w. m
  491. /////////////////////////////////////////////////////////////////////////////' ?2 o8 r- D* x* k# S( n7 q. Y
  492. // CRevAppApp initialization0 W5 k1 w9 t) K3 ]8 W' @( d! q
  493. ' z& B8 k$ t4 z7 c
  494. BOOL CRevAppApp::InitInstance()
    3 B" _( @# R, ]5 |9 Q, \5 T
  495. {# c9 A& `1 N, B7 |
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    9 m# f' |; K) K+ Y$ B

  497. 2 X" n) Z& a- \) s4 X6 U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);$ ~2 ^) K6 A/ [2 z* z: G
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
      u2 {& v* q9 X5 n: t
  500.   {+ J6 D9 \- t1 I+ E1 U' T* ^5 G
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    3 G4 o) T! ~0 p' x$ n5 z+ G
  502.     GetPathFromFullPath(szPathTarget,szPathSource);0 Z. ^" w3 E) G& U0 T/ g, u& O" O
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ! t6 q) X6 w% L! j! a
  504.     {
    3 K8 l2 w. R- A/ y/ J, g5 n* @+ P
  505.       strcpy(szPath,szPathTarget);
    # ]4 Z" n1 g7 q) U5 w4 O3 c, E* z6 d. h
  506.       SetCurrentDirectory(szPath);& z; a# B/ ]( s5 J
  507.     }
    ) ]) n. H1 i  j! T; f' \- }1 Q) J4 b
  508.   }% s7 b4 I: n6 Q. G
  509. #ifdef _DEBUG
    # G9 ^% ^* C# f# M6 M+ g
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! s( [7 h2 A+ V5 r
  511. #else
    & a& S6 J( e* _) @% C! ]
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))* j) a/ G0 F. E
  513. #endif2 U" A3 u2 `! |5 B8 C" B, O
  514.   {
    ! D3 C  e# @% I2 M! H
  515.     char tempFileName[MAX_PATH];) ^6 H) y6 H9 k2 m
  516.     strcpy(tempFileName,szPathSource);
    , M  O$ o$ v- j! j7 m* h& K& Z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    8 L- S* S" w3 \9 [8 ~2 A7 V
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ; z: c) ~( Z7 u( H3 |1 _& _
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    $ N  O! _+ B% a$ N! I( q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);4 y9 M- s! n! i' }- N
  521.     return TRUE;+ m$ P6 Q: T' s. b
  522.   }
    5 \' a0 X- K6 S( C+ O9 C
  523.   // Nuke 0118: Delete run.exe$ o8 f1 ]) u6 [  O+ b( A& s
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );4 r8 S- s7 Y6 Z- `
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    3 L5 d% f- T. M  Y
  526.   if(!ReadCfgFile("Config.ini"))
    9 C- J' D5 F9 `6 p
  527.   {" e* |, W1 a" E: J9 r- W8 N
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    8 r' f) p2 W. l7 s3 T
  529.     return TRUE;
    / M6 U* Q% V6 y7 t5 [2 @
  530.   }! ^6 H% h& W# t& x6 Y3 k
  531.   HANDLE mutex;" M+ P( D$ T, u* ?* b+ h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    7 W8 K+ O: E! g0 t+ p1 N
  533.   {
    . m3 A  a) o: y/ ^$ o
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    . I; C8 U: N) ~- s- ~1 x# m/ Z  I
  535.     {
    " ^- q' ?4 t! T' R" d+ y# c
  536.       CloseHandle(mutex);! N% ?- ^" p0 Y$ y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " y: l2 |! ?$ Y4 z
  538.       return TRUE;
    8 V! {& K' }& i& ~+ l
  539.     }6 [( C; j) c# t# a
  540.   }  
      _% S+ T" G0 S) r( g: w/ g
  541.   CloseHandle(mutex);
    ) n' |6 C' q3 E/ S5 m9 `& n% A3 R8 l
  542. # x# W5 R) x) n+ f  B8 F% V
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    2 z& W) w  F( ]
  544. 1 i2 s: ~, A5 }1 ]9 P) E; f
  545.         AfxEnableControlContainer();
    - n4 [4 j' p9 s0 ]: f$ L

  546. ' x- R1 r* G/ W# e4 L% _, L
  547.   bCanUpdate=FALSE;
    : b/ Z8 I. S9 s7 ~
  548.   dwStartUpSteps=1;# M3 @1 H% F+ P- Q1 `1 j0 R
  549.   dwProgramState=AP_NOTHING;% C$ f& [9 w3 {5 I0 w' ?

  550. 7 J2 p' m& [5 o& {0 s1 x
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);$ x- ]7 z$ G! I
  552. ! b: T4 w4 K  G+ F8 _. B% e
  553.         // Standard initialization
    : n( S9 ^8 a! j$ L9 ?/ u5 C$ s; T/ P
  554.         // If you are not using these features and wish to reduce the size
      X0 P4 C3 L+ p  X
  555.         //  of your final executable, you should remove from the following
    + Q9 b3 h; p7 j+ x. L
  556.         //  the specific initialization routines you do not need." H& j" |% f! L9 B
  557. 9 @- f9 @' V# ]" G" w# I1 D, R
  558. #ifdef _AFXDLL
    1 M+ L  t* L6 _
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    6 t. @! L  O+ ]4 Y) k! o- ?( [
  560. #else
    ) v  V8 J) v- h6 K/ i" r. r
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    , Y8 W% u* Y0 R+ T$ r" D
  562. #endif/ O6 e  r; T6 A/ R1 I6 d1 {3 g; ~
  563. 8 L- m" h# F4 U
  564.   dlg=new CRevAppDlg;
    , i5 W" J  j8 m& l; H" r
  565.   dlg->Create(IDD_REVAPP_DIALOG);2 v8 X: ~( w( b- G. P, e
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ! o/ m. s* O& c4 J& q7 s+ F
  567.   m_pMainWnd=dlg;
    * X# Y# B; \! f* |* y) T

  568. 6 j  S% D5 D, M7 K+ s
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);. e+ v. i- x% _. v9 l/ u# m/ y5 n
  570. ! l5 L3 K- L3 P2 {
  571. //  GdiplusStartupInput gdiplusStartupInput;- _# R6 W1 [) p
  572. //  ULONG_PTR gdiplusToken;
    * `  F: G* i& X
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
      A3 l4 t+ y0 {" y9 A
  574. & K: Y( x2 y7 O- M" X
  575. //        CRevAppDlg dlg;
    $ @2 ?2 V+ w1 ~% ]. D
  576. //        int nResponse = dlg.DoModal();
    / t- d# y8 M) m' o
  577. //        if (nResponse == IDOK)
    " G. `! ~. }$ U* V
  578. //        {
    ( }$ J, ]8 }4 ^/ r
  579. //                // TODO: Place code here to handle when the dialog is5 {0 J$ D) P" ]! W, R! _/ c
  580. //                //  dismissed with OK
    # ^0 ?+ l4 s( O/ K
  581. //        }
    . I* H6 B! V  y
  582. //        else if (nResponse == IDCANCEL)
    1 [9 b3 P4 B: r5 u4 W6 t, d5 c
  583. //        {
    2 r& y! h0 Q9 C% m
  584. //                // TODO: Place code here to handle when the dialog is' \  [8 R: G% v
  585. //                //  dismissed with Cancel& s; R) U) a, {7 }* O
  586. //        }
    ' U* n8 _- V6 M* B6 F

  587. . u9 m* L. A& @
  588.         // Since the dialog has been closed, return FALSE so that we exit the# @0 A5 G! R" h0 l8 ?% y8 w
  589.         //  application, rather than start the application's message pump.# i* ^8 E8 x' o* O! M
  590.         return TRUE;; b. e' }9 ^- A  O
  591. }  h5 U4 ]6 P1 f

  592. 5 g2 e0 p# B$ d' |7 M  C
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * P: z$ [  v2 \- z( T
  594. {2 S5 P8 q7 N* e  g
  595.   int i;; g9 B2 E% z" N9 \" q% ^
  596.   char *szRet;
    : n' Q4 Z4 `0 @. c4 v
  597. " V! X, h! `* M) ^4 y
  598.   if(pSource) { itoken=0; sztoken=pSource; }( V$ B& x- Y/ y) y; {4 Y
  599.   if(sztoken)
    1 D) \# T  {% n3 P$ b& ]
  600.   {
      X5 ^1 J+ M/ @- x
  601.     szRet=&sztoken[itoken];# g8 _( R$ Z, {3 X2 r* M% O- X& R
  602.     while(sztoken[itoken])
    " V% k' |+ M& x! ]5 Q5 [  X1 a) }
  603.     {
    " z6 j6 \8 p: r
  604.       for(i=0;i<(int)strlen(token);i++)- z& K% ~" z! E. J1 }, n" J5 r
  605.       {
    * i2 r9 A. g. _, r" }
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])7 q# W1 w& j; s2 w; m7 i
  607.         {) Y, Z. q  x$ W
  608.           sztoken[itoken++]=0;& t; U, z. I: ^7 c4 p
  609.           sztoken[itoken++]=0;+ Y" L: W! ]; Y' G( y1 E. ?
  610.           return szRet;
    + z5 A2 o" Z% D# o
  611.         }
    ; j) p8 @5 s1 ^4 O- K
  612.       }
    4 B; d  q$ ^0 }+ u  b3 m. b
  613.       itoken++;
    . A# P  [6 v+ j+ y8 |4 [, c1 C* {! \
  614.     }9 d8 E$ g/ D9 \/ [, I; g$ ~
  615.   }9 H0 n* x. l, o' z- k
  616.   return NULL;- I% D' V2 ^, t+ O' E' U
  617. }' ^+ T! M6 B! i- f. z

  618. 8 u4 s5 v9 s: T( }2 J
  619. void ProcessProc(long Total,long Current)* S1 a. H/ @4 ]9 m/ |2 j
  620. {
    % I# m, r7 Y0 ]" P3 q
  621.         MSG msg;3 Q+ c# [4 H1 f$ a" d
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    : j0 Q9 ?* m7 `6 b5 j: \
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));0 Y* D; m5 g+ U0 j: Y* ]) M$ U# s
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))& K. H; [8 S6 x8 y0 f5 p
  625.         {
    9 T! C+ B. `0 P! m: l7 V7 K3 d
  626.                 if(!GetMessage(&msg,NULL,0,0))" P0 Y+ X0 M" u6 L  I+ ?- B: Z3 l% O
  627.                 {# b' r% z9 N# K; L
  628.                         return;
    3 w( R$ a6 ^; }) v# W# c
  629.                 }
    3 F! P2 b) b! m  T
  630.                 TranslateMessage(&msg);; L& r1 ^/ ^% }
  631.                 DispatchMessage(&msg);
    2 Y2 v3 C" a) h3 l, R/ w
  632.         }        6 b0 G% V! D3 }5 D/ @
  633. }
    9 s/ j* i0 t% l  K: `1 {' Z2 [

  634. 3 B- u, ?$ Y) g3 M6 g4 E3 R
  635. BOOL bFirstChar=TRUE;7 D1 }, b+ n+ G5 g, H

  636. 5 w/ V/ V, v) {7 S( B7 D) x' R6 W
  637. BOOL CRevAppApp::OnIdle(LONG lCount)- U% l+ z' ]; {& N/ e4 t
  638. {/ u2 W7 T: Z. u) b2 j% s& C
  639.         // TODO: Add your specialized code here and/or call the base class  O. R; _8 b: x+ B- B* k/ U
  640.   switch(dwProgramState)
    $ I  M$ a9 q5 H, U2 M5 g
  641.   {
    9 c0 h4 t& \0 Y
  642.   case AP_NOTHING:& m0 u+ {9 c% x
  643.     switch(dwStartUpSteps)
    - _) [8 c9 s* i" z* S' q
  644.     {3 a2 Y# e& i4 ?3 o5 E" x# A
  645.     case 1:
    . e( N& c5 p  \- Q8 P% X& a
  646.       {
    1 D, i+ d0 I( e( a$ g1 n4 p
  647.         int i;
    3 v1 t3 e, a, j  c; z- _4 O
  648.         CDC *pCDC=dlg->GetDC();3 C$ N1 {9 V3 t! l* H9 b/ s( @
  649.         HDC hdcwnd=pCDC->m_hDC;, f: F5 s8 D7 h
  650. //        Graphics graphics(hdcwnd);
    7 T+ q- _3 ~8 C1 z' z( m+ _
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");  ?& @- D0 ]5 t) F! [7 }9 G
  652. //        INT iWidth=bitmap.GetWidth();
    7 W8 L+ v8 A9 R: E9 s
  653. //        INT iHeight=bitmap.GetHeight();" W: X/ Y6 t+ q1 i0 A4 r
  654. //        Color color,colorTemp;
    7 D8 G0 G) X: p5 i/ C. u* ^1 I
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)2 }9 G, n  T" C  I
  656. //        {
    8 r( V1 M0 t  U+ s$ J2 P7 t
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)3 N1 R0 `& V6 X  H, ~( b
  658. //          {
    2 H4 C3 b5 l, [0 s, e8 Z# i
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    4 {  P% K/ q# Y
  660. //            colorTemp.SetValue(color.MakeARGB(6 M# X/ T! |0 T; n+ r3 m3 C* h) G
  661. //              (BYTE)(255*iColumn/iWidth),
    & k# z2 _$ E! Y5 v' J1 G
  662. //              color.GetRed(),
    " ]# x" h. f; V* {5 b7 ?6 F- H
  663. //              color.GetGreen(),
    6 [& ^& D1 R6 J, ~# }
  664. //              color.GetBlue()));4 A% Z4 \4 ?# j  t$ O" \$ ^
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    , ^( \; \! i0 O7 c3 @
  666. //          }
    , ~1 p- P$ ]" x- K' ?" b+ g
  667. //        }) U0 w6 g" ~7 H: X+ Q/ \1 ?, r
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    . k8 e7 X' X" i0 k+ v
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 d; L4 j  @' h9 y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");8 F, _  l( ?. r! z8 Q  ?2 \
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");4 A: q' O1 u& J) N6 B. r2 |0 w
  672.         for(i=0;i<240;i+=8)
    8 Z) I$ a8 k, e0 w
  673.         {
    9 |4 P- u: Z+ Z( [+ j; S
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; o5 I: i" c0 e! a/ S7 W
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ f6 R' B6 c, f1 G7 a1 S) A
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    2 B7 A3 y6 e" j- R. W( H# p
  677.           Sleep(33);5 a  H+ [7 \) t
  678.         }
    - D5 f& P' }6 e, |( w) v
  679.         Sleep(1000);+ [0 r( p+ z, @$ b' T% x
  680.         for(i=240;i>0;i-=8)# ^% F4 {/ r; N3 z3 Z, c* o
  681.         {
    ( R) y# |( _( O
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);1 ~1 ?" W0 q; e8 Z1 Y  m$ @; X* A
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 h& P! e& R$ j+ t+ n4 |: S
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & V4 i4 n! N( J2 n
  685.           Sleep(33);
    ) ?# c( q- O" @# ^  M- F
  686.         }
    # z3 A$ r. d: s! F0 ?
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    , P# e2 X: _. I# B" K
  688.         dlg->ReleaseDC(pCDC);
    ! f* ?7 K# L: U- u  `- @
  689.         DeleteDC(hdctar);5 c1 t7 x$ c: u; Q4 ~
  690.         DeleteDC(hdcsrc);
    ; Q& _  q. a4 V. t$ q, ]( g1 `/ B
  691.         DeleteDC(hdcorg);/ ^3 q, z4 ?6 H4 d8 l9 Z% l
  692.       }
    ; U  f% s' m7 m. F# b8 C8 B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ' D$ i1 [! |0 N8 d5 F9 D! z
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    5 ~9 I5 X0 \5 K
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");( E+ s2 p+ v! k* D' M+ Q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");3 h$ a) P$ _0 `' X& {# ~2 d# n
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& C2 P5 |% X8 k
  698.       if(!Dn.Connected())
    3 T! ^) r; O6 R9 h3 o
  699.       {
    * h, w3 ~  |/ d4 v( l) K7 o
  700.         dwTotalFiles=1;5 J& Y7 Q3 D9 Q
  701.         dwDownLoaded=0;
    4 G3 `4 e. T9 _- w) |1 B: e) r
  702.         bSilentStep=TRUE;$ b  e' o0 [, g  [3 p
  703.         bCompressed=FALSE;$ g; ]/ g5 z4 k
  704.         strExtLocal.Empty();9 a- O, p! p5 Z9 K4 \. ^
  705.         strFullName="readme.txt";
    % ]+ A! i4 k& m7 G* Z
  706.         dwProgramState=AP_CONNECT;. y8 ~: u- e1 o  n3 @- i. N  f
  707.       }/ m2 l  ~! }2 S; x1 Y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    , j8 N# ~/ a) ~6 @
  709.       dwStartUpSteps=2;% h- w' `- D2 d  M
  710.       break;- j+ v  ?8 u; p: w
  711.     case 2:; }$ z( y, F" E; h; V3 J2 y: u
  712.       {
    ; Y( t8 E' v% P& F9 _, \* W
  713.         int iEOF;& G, i. d# S. j# a" c
  714.         FILE *fp;
    2 |3 ~, ?+ I% z
  715.         char szString[512];
    1 Q5 }! h; k* I  M. `
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    6 Q  j- g& X& X# `
  717.         if(fp)
    6 C  W4 {; D+ N: j9 @- r1 b
  718.         {, ^$ y3 E; y- O+ z5 @: h6 u
  719.           do
    4 H3 p! H! j7 Q5 T& {2 \
  720.           {# t6 D% I. _; }8 V0 f3 m
  721.             iEOF=fscanf(fp,"%s",szString);
    , }: W5 D  q4 n# _# q+ A
  722.             if(strlen(szString))
    3 s8 }% o. T$ ?% t9 i. g
  723.             {
    0 P% E5 p! W" m' j! Y
  724.               if(bFirstChar)
    . U. E* L# [' m: d! G) N8 D! ^
  725.               {1 @- T2 u% X2 I6 ^
  726.                 bFirstChar=FALSE;
    5 r; D% w$ v. [  G- c
  727.                 bConnectIsBig5=FALSE;+ ^1 z8 q+ F4 s! V) m  X4 G" S3 x$ Z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    4 e4 D1 }' O1 ^1 K
  729.               }* d- E  P- {, Z* K6 T7 a- [# Y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    4 |  U3 J+ z9 e" c) r5 Z* D! v
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));9 m' u7 X" A4 X/ G
  732.               dlg->m_ListText.AddString(szString);
    ( j9 h" S$ j, @# p% S: o2 h
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / ^* f' m# y, V, @: r
  734.               *szString=0;5 i+ i2 ?9 Q* j; v3 [
  735.             }
    / z6 u' ~* ^+ c6 K
  736.           } while(iEOF!=EOF);
    * P9 ?7 L% |2 i1 Y
  737.           fclose(fp);# C, p* O, n/ c
  738.           unlink(".\\DownLoad\\readme.txt");
    ; E, I, n% l# j, g
  739.           dwStartUpSteps=3;% u0 |0 W: e5 P
  740.         }
    # e5 u2 {& i: r* m+ l" _
  741.       }
    ! Z4 c! q1 B8 w, |5 K
  742.       break;
    , s6 V- Y) X0 f, x. D- m9 M
  743.     case 3:2 b6 l) l: n: }& Z5 i- [
  744.       if(!Dn.Connected())
    ' H7 x2 C& X- t7 p4 M" E* I
  745.       {
    + q; Y( j$ h% N% Y, T  `
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);7 b) b6 o4 o: l4 l6 ^3 _/ j( t& y
  747.         dwTotalFiles=1;- Y3 v8 I4 a& x! K, F9 v; x  G
  748.         dwDownLoaded=0;; \- X  f' z: X. y2 Y! n' r
  749.         bSilentStep=TRUE;/ a0 W' Y$ i+ V/ D
  750.         bCompressed=FALSE;
    3 y( J3 L6 G" a& U/ _1 k
  751.         strExtLocal.Empty();0 J) n9 T% j3 c) ?5 j9 Q( y% C
  752.         strFullName="checkversion.txt";
    # z, U! c9 j# \9 g* v& T1 q& X! O
  753.         dwProgramState=AP_CONNECT;
      P/ B0 A% ]( y) W: p& o
  754.       }
    3 @' G5 |0 g- F8 m! k9 D
  755.       dwStartUpSteps=4;
    : v8 Q8 ~( \: H8 b
  756.       break;
    9 M! y4 A  j; q' X7 f( X; V
  757.     case 4:8 P/ d. D, v) B/ m  a; b
  758.       {5 H2 v+ v9 p3 r! o" x" q* N# s8 j
  759.         FILE *fp;* P0 {: h1 d) l! G* a
  760.         char szString1[128];
    & K7 K: j8 y6 q+ R8 i# X  M  w+ Q
  761.         char szString2[128];! x2 D/ Q0 I" [- a# o7 H: x
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    0 T+ R' v' F# X' P: w$ p- Z* a
  763.         if(fp)
    $ c* I/ |& L9 h) P2 T1 K
  764.         {9 c, l- U: a) R8 d" \& ~
  765.           fscanf(fp,"%s",szString1);& B8 S$ F, A# m- r8 {
  766.           fclose(fp);
    & ?8 W& @  t& ?, v  ?
  767.           fCheckVersion=atof(szString1);
    * j% \/ Q- D# \; r: v( s' U
  768.           fp=fopen(".\\checkversion.dat","r");% T& Z/ H# V. T
  769.           if(fp)
    $ V* t0 C4 H# S6 f: d
  770.           {
    " I# r5 u1 d, ~9 I: T
  771.             fscanf(fp,"%s",szString2);
    5 w( n$ q7 _2 R6 p! c; [4 d
  772.             fclose(fp);0 _1 F8 M% C' ~: z0 e8 b
  773.             if(atof(szString1)!=atof(szString2))
    ) l/ \; i) ?! e7 _0 P
  774.             {
    + H* L, ~: e; b1 F# `6 k
  775.               if(!Dn.Connected())
    3 {- @' C, v0 z, G" L: i
  776.               {
    ) S  H- x$ i' w( M  h
  777.                 bFirstUpdate=TRUE;1 F1 x# j* _) S/ h9 s9 z
  778.                 dwTotalFiles=1;
    1 x# \; d  [* X. G) v0 J
  779.                 dwDownLoaded=0;/ y% Z) ]2 [  L7 g" b5 g! J
  780.                 bSilentStep=FALSE;
    0 L- k+ `* G6 [* [/ ^, g
  781.                 bCompressed=TRUE;
    ' }& f5 ~$ U7 Y! d0 `
  782.                 strExtLocal=".\\DownLoad\";
    # w7 O+ `4 k5 @7 [# P
  783.                 strFullName="update.txt";+ l: U& d" K1 `9 @) U: O
  784.                 dwProgramState=AP_CONNECT;$ h9 K$ }) R& C4 @  H5 x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + c1 D$ N7 J2 E# r$ l% f
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / K( F) p( C; s8 w" P) O
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' p% s) N' }. G, Y
  788. 1 N3 O" N. j. a' r2 E& d9 @6 T
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ H6 |* ~- m% {3 I
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ; Y# o. y, I8 q* _/ F! F9 V
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    * f" Y0 S2 w; G  U$ h5 {( m, d
  792.                 {# p; o6 H7 W3 i8 [
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");+ {' c8 I1 p& U' w* O' D( Y+ ]
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ( N& G/ [$ A6 U6 ~! j# A1 _1 i, [
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ; g* h# N# T2 r* ^/ x1 e. l. C; c8 J
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 W8 u" _7 Y( L2 C! q0 c# r# T

  797. 3 \9 ?) V/ Q" x2 v
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");6 {0 Y' e+ `  n: B1 v
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ( D: f( b1 i# ~
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");- C$ c7 w9 e; F5 r# z/ |) F
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* I6 Z& Z& F) U$ h# J0 A2 r
  802.                 }; J; [  o9 {4 n( ~: Q
  803.                 dwStartUpSteps=5;( n' M0 e3 R. B/ x. X% m' ~) c! T
  804.               }3 ]1 }2 J2 e. r" j: M
  805.             }6 T# \, j0 G0 a# a/ x
  806.             else4 ]) q% O9 M; x# L+ j
  807.             {
    2 j7 O2 s7 R/ |- z$ E+ y/ h  L
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ) D# U# D. H$ T$ S. s7 P7 r
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# ?; y4 Y) u: y# h( r
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ N8 t! C2 r3 T
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    - S' g' w3 T, q  E9 X2 S* i

  812. 7 x; z  d. j- A' P" F1 S
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 A/ ]& D' ?7 c8 E: s
  814.               dwStartUpSteps=99;
    ) `1 U& F7 t  @1 D: ]
  815.               bFinishUpdated=TRUE;
    - J( T+ {! R/ ?
  816.               bCanUpdate=TRUE;- r! d# o: A0 r) v
  817.             }
    & H* u' ^3 b0 P- [; K
  818.           }
    * N' H8 {1 A$ S/ M; n4 G
  819.           else* C9 d- p" |0 E4 y* K0 \
  820.           {
    1 ?% Y" p' p% e3 \/ z% W& ?- m1 e
  821.             if(!Dn.Connected())
    1 x3 a* A1 p! J: C8 C0 V0 L
  822.             {
    ' |, ^* p7 t4 ^
  823.               bFirstUpdate=TRUE;
    4 j0 p7 E. y. ~+ L
  824.               dwTotalFiles=1;
    / t0 Z% M+ o7 X% n" l) {$ W8 t" {5 x
  825.               dwDownLoaded=0;# z8 }, Q2 T( t+ R% h' N1 m% O0 q
  826.               bSilentStep=FALSE;
    * s; \3 e; }* U/ _+ T$ P
  827.               bCompressed=TRUE;1 j2 ~  ^) M* J& [6 B; ~
  828.               strExtLocal=".\\DownLoad\";8 E* }7 ~( i9 |- E7 E2 e
  829.               strFullName="update.txt";3 \7 b5 p+ {+ ~# n6 v
  830.               dwProgramState=AP_CONNECT;% l9 u" b4 v, u% b2 |  b  D9 Z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    : i! m+ [6 A/ ~8 B2 u
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% v* F3 P& j8 s+ F/ l
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) c; J# _) J# g
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 c1 L8 n+ O3 r0 ~
  835.               unlink(".\\DownLoad\\checkversion.txt");' Y9 z0 T- R! T) K/ \* A
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)8 X; \6 ^, y# u0 R# s+ h+ |' [% C
  837.               {
    * n% E, X/ v/ \' z  L. d3 I
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");9 ~7 e7 I# Z" L0 H0 s
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    1 _% p4 e) E: A/ y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");5 s, M4 Y! F" ?9 v* ~; Z& ?" K
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. F# B, `* u- ^
  842.                 2 `- A4 A6 y, ]1 N2 H' ]
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    5 }( A# `! o1 A2 P3 \. Z
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * X2 n/ x/ r. P1 @, G
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");, g+ }3 _, H& ~) c8 y- b
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      \' F* t! i( h  H! b* u
  847.               }
    9 |9 _  o, W! B  a9 |
  848.               dwStartUpSteps=5;2 ]5 M2 z( }; M, j% T
  849.             }/ f1 M& K* W* N! c* G5 x9 s
  850.           }5 _7 A3 i1 V8 @8 X) f3 f) J1 M7 Q0 R! G
  851.         }
    , o. ]' F3 v0 D% z" b+ a
  852.         else! E" N  W/ \3 P" H6 x8 v8 M4 @
  853.         {
    % }2 {  j0 L% ^, f  d9 |2 q' n
  854.           dwStartUpSteps=3;7 N, [- T4 V. x& T
  855.         }
    ! H. K  m  w, J6 I& A  B
  856.       }$ E3 x$ U* _: r/ d  f
  857.       break;  t& [8 O0 ]5 b& U. N, o
  858.     case 5:) N: M' \) E1 r3 V
  859.       {
    - v' A( g$ ~5 i9 H9 b& n) f5 ^4 W- {
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)# E9 H1 y3 x! A; W7 o  \$ k
  861.         {* r7 U+ h, o. j& W
  862.           int opt_overwrite=1;8 Z) h. R$ T" N( v, c& f
  863.           int opt_do_extract_withoutpath=0;% p* I2 h; _7 s7 \% V& [
  864.           unzFile uf=NULL;
    7 x# a; n7 l7 g
  865. . W. o. }, _& n# d3 B* i2 a6 U0 r
  866.           uf=unzOpen("Wsa.zip");: S7 N& a* M/ J
  867.           if(uf)
    / w  N' G& M7 q8 U* z$ P
  868.           {
    $ p7 {# A& p0 V& w3 l4 K
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    $ ~( e! a6 \% z3 K9 n. N  ?
  870.             unzClose(uf);) S* Y. S8 V+ n
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    & I3 b; }6 E- L1 h  n: w  O
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");9 {1 v+ j# _! r7 }' J$ i* e6 k
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    3 h- y1 p# H; }$ Q2 r/ [  E
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 b! o1 g" d- `" P( `9 d+ g
  875.           }
    ; d* R% J' Y6 x1 A/ P
  876.           DeleteFile("Wsa.zip" );
    , Z$ `+ C( H# ~* J* w& S+ L  ?
  877.         }
    . n7 M/ I2 z! a% \3 D1 ^
  878. / k# a' Q. |, I. c7 t% u( r
  879.         if(CheckLocalVersion()); C2 j5 ]. @( m  s3 D- c7 G, I( u
  880.         {; U/ T8 b. l5 K9 |
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    - r0 x) R0 w7 K' a- c: u
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    - b) W; K8 W8 E
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    1 _$ V+ _& i4 ~0 b$ p' S1 m+ |1 a
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 u7 l( E7 j0 M- a3 y8 q
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);& e5 g, T6 ^7 \" d( k( Y
  886.           dwStartUpSteps=99;
    ' D) z5 ~; f2 u! T
  887.         }
    . ]. b0 G" Z% z8 l* x6 q
  888.         else9 c, w0 w+ A2 f7 g
  889.         {9 L& o# I! X) E# _0 e) W7 p
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    4 \, I$ v* v5 X( ~
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 E0 Z# t" l  S% [$ D
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");% i3 R( D% [$ N" d0 Y! D

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-18 08:26

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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