CSUpdate.exe源代码

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

5 h: I9 b/ _! U( \* z' h: Q$ Q
  1. / RevApp.cpp : Defines the class behaviors for the application.2 Z6 m- b; ]- d0 X' h% i$ r
  2. //& j: f  {7 a, k6 z$ S* b. D
  3. , z6 h/ @% b) w0 b, f9 Z/ u6 n
  4. #include "stdafx.h", y" n( L% N& X' L8 v2 X; m1 \* K
  5. : k1 H1 N+ ?- L/ {. C
  6. //#define UNICODE
    $ H. H7 L8 e6 H5 A
  7. //#include <gdiplus.h>
    ) Q- |% k5 F" \( f5 S
  8. //using namespace Gdiplus;
    0 ~2 ~( \* I8 B) g/ v
  9. " v/ X- S) o2 s+ c4 c
  10. #include "RevApp.h"- ^+ \: y6 P& [9 B; b" A
  11. #include "RevAppDlg.h"
    / B- c% o% B* E

  12. / y# B9 U; K8 H( q, n2 d- t
  13. #pragma warning(disable:4786)
    9 }6 V& `2 j& f% \. q/ B6 w$ c
  14. #include <map>5 P( Z! Z5 {7 k+ K1 v! Q2 b& x) L
  15. #include <list>
    $ y% W+ @7 O4 J
  16. #include <direct.h>
    4 V; G4 \1 m# S& B" c
  17. + K, K1 b% X8 d6 @
  18. #ifdef _DEBUG' T& ]1 j. D& S$ w4 U+ q/ f5 X
  19. #define new DEBUG_NEW
    7 o% t% T+ X3 Y! U# J$ [9 g! u
  20. #undef THIS_FILE
      `+ G" u4 D$ s/ K
  21. static char THIS_FILE[] = __FILE__;
    7 ]7 s1 A- F7 W& D8 ]; \) `0 B7 i1 M* g
  22. #endif
    + c& |& `& U  p- M! {
  23. #include "SkinResDef.h"
    & [0 M; o$ |7 q9 {
  24. #include "ChangeBG.h"
    - @% N9 o/ C: m/ s' f0 S3 n: C
  25. #include "AFXINET.H"% m7 ^4 \) v0 ?, t/ ?( s, k+ q
  26. 3 d- r! W8 s/ n" f8 y
  27. #define TRADITIONAL_CHINESE 0
    ; C" [0 l4 o  v+ s' D0 F& B
  28. #define SIMPLIFY_CHINESE 1
    2 q( u1 j4 {) R; S5 k& S
  29. #define ENGLISH 2
    + v! f% q) N; J1 H% D: w9 z
  30. int m_iLanguage = ENGLISH;: ^/ i6 a0 N- Q9 z- S  i4 D
  31. /////////////////////////////////////////////////////////////////////////////
    # H+ A7 {& Z4 z8 V' y# p
  32. // CRevAppApp. e  h& s2 I# a  `+ y/ S% b$ r1 o

  33. 7 O& S. a; G1 r
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)* N) i0 K  U( }
  35.         //{{AFX_MSG_MAP(CRevAppApp)6 n1 r6 }1 N2 D0 I  R& J* N
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.7 p/ ~! I* m) r# s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!6 ~) N# [. R: D, y
  38.         //}}AFX_MSG  J4 e' u+ n, F$ I, ?2 f
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)* M, W0 m/ y8 c- @1 {( J; Q9 x
  40. END_MESSAGE_MAP()$ q3 \' u2 l; X, @
  41. 8 q# L) c4 M1 H$ ^( C- o  @
  42. /////////////////////////////////////////////////////////////////////////////
    ! J/ E8 k# y4 O
  43. // CRevAppApp construction- H  ~/ A8 a6 n" z/ C/ a+ ]) L

  44. - L* `3 _" e# X, a3 b& B% \$ D
  45. CRevAppApp::CRevAppApp(): N' o1 n3 b( `
  46. {
    / U2 a0 B( `" i) [
  47.         // TODO: add construction code here,9 D! ~) t/ i2 L
  48.         // Place all significant initialization in InitInstance
    9 E8 w% W5 Q( s9 b' `* ^$ w% j% G
  49.   bDisplayIsBig5=FALSE;$ X& C  b% j' O! Y* v. ]) Y" ^& z+ T
  50.   bRestartUpdater=FALSE;6 z! H" B: |, _; c' q; q" o
  51.   bFinishUpdated=FALSE;1 f/ G' c! ^! k$ M0 y  ^
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;2 @' ]& a) q( a, C% y
  53.   InitChangeDataBig52GBKS();, j" d1 s/ a* b/ W  s
  54.   InitChangeDataGBKS2Big5();3 P7 ?4 @* c  _3 w0 R
  55.         //& q8 \9 `9 i( s4 L  r
  56.         bClickRunExe = FALSE;
    / [/ b+ {7 t  B% E/ U4 w; J5 h( H
  57.         //% X; @- `6 B& X2 Y
  58. }9 ^9 M! E- A% @, \2 N9 h) m
  59. " H/ K* J$ F9 }
  60. CRevAppApp::~CRevAppApp(): P! l% Z7 a8 q- ^8 a2 z3 I3 D
  61. {. B$ ~$ a" J, C, C- Q
  62.         // TODO: add construction code here,
      E! B7 T( [' e/ A9 n4 |
  63.         // Place all significant initialization in InitInstance4 R% [; B  }! Y. d6 k7 d
  64.   EndChangeData();; f' q2 Z' S* x6 B& z
  65. }) K3 \- d" p1 P# h# A" L

  66. 8 X' _6 i" b* E5 Y
  67. /////////////////////////////////////////////////////////////////////////////
    8 D, ]$ M* u; c, i& \/ [, r" `, t
  68. // The one and only CRevAppApp object% ~, |  d$ c* \; e
  69.   E/ m. I# L5 W
  70. CRevAppApp theApp;
    # ]: d' v8 e; B: m
  71. 1 U. p$ i1 W( f. n
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)+ h! g2 U9 x' Z
  73. {3 b* z$ K4 B9 P. ^* @, o
  74.   int iEOF=0;
    & |4 P" A! k$ w  X
  75.   char szTempName[MAX_PATH];! H2 v" l1 _% [  S9 f1 _( v
  76.   *szFileName=0;
    : L* ~- D0 n' P& D0 W3 Q# `
  77.   iEOF=fscanf(fp,"%s",szTempName);
    1 @3 I+ d6 s. F) `, A- j9 A# w5 C
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    3 W8 J3 S! \& H* _, B% k0 z
  79.   {
    % V: `0 _  g& q- K3 K% z
  80.     strcpy(szFileName,&szTempName[1]);+ E& N; @& |6 e; n1 O$ K
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)1 o0 G2 y( I8 e; j; J0 @; \
  82.     {
    2 ^9 y% ?2 T! I' C# a0 V
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ; @: Z- L- z4 o
  84.       strcat(szFileName," ");0 ]# z6 j: a3 c6 G* T! z4 o
  85.       strcat(szFileName,szTempName);
    ; S. Y5 u; I% f9 O
  86.     }
    & z* Z' b. X  ^- P" f
  87.     if(strlen(szFileName)>=1)8 @% e4 |( I$ v( s; q
  88.     {
    / ^# w  M3 s2 s. T, @5 x
  89.       szFileName[strlen(szFileName)-1]=0;
    # Q5 p- T- D/ ~! J$ B) S
  90.     }
      s  c7 N6 ~! l( N0 `. A! w
  91.   }( Z- f* ^2 e+ T% T
  92.   return szFileName;
    " s# w7 ]8 K% u1 \; N0 \- y$ e1 h
  93. }* D% k; t, {  _
  94. 3 D8 h& k& o, }1 ~" w* E
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)1 A' u; Q/ G7 o' n
  96. {
    / j: m7 P3 ~: [8 q9 g( S0 i2 I% @
  97.   FILE *fp;
    ) V( c) R! b; c& f9 a9 x
  98.   char *key=NULL;
    * c) K& @2 L8 A: t2 L7 O5 w
  99.   char version[MAX_PATH];3 r' j4 R5 ]# T8 n: s$ ~. R
  100.   LPUPDATEFILE file,olds;
    8 v6 F: N# M( t; k: t+ U' J
  101.   std::map<CString,LPUPDATEFILE>::iterator p;! a1 |- R' s/ ~

  102. : [6 o1 ~4 K$ N
  103.   UpdateList.clear();" ?3 k5 T1 P& q5 z* h1 y
  104.   UpdateFile.clear();
    + e' A  E( ]! X0 Z( N8 N, m2 r9 U
  105.   if(GetFileAttributes(filename)==-1) return false;' T) Y$ W; Y8 @1 K% L' Z
  106.   if(!(fp=fopen(filename,"r"))) return false;
    8 M1 r; P7 _& S4 `: [. x8 ^0 \
  107.   fscanf(fp,"%s",version);5 H& `) M5 t8 s* g
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    5 y" v: u2 e7 P. p! g
  109.   while(fscanf(fp,"%s",version)!=EOF)4 N& n& L6 c7 Y% j3 [2 u
  110.   {% i9 X2 s2 n+ f( S# J8 k) V
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 F; O- ~7 ^# K4 g! `6 f
  112.     fscanf(fp,"%s",file->path);- ]; N- Z% \$ W4 Q* i' g+ e1 @
  113.     ReadFileNames(fp,file->file);/ |$ t7 l# i% `! H( R
  114.     strcpy(file->full,".");
    % [$ Q  {& Y3 ^( T' z
  115.     strcat(file->full,file->path);! R9 l2 z! e5 I/ Z
  116.     strcat(file->full,file->file);
    " g/ g  u: U# e% [
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ) K' [0 }# }4 O$ e, z9 y
  118.     {
    8 ^& V( L8 Z# X  w4 e' C9 ]7 D
  119.       file->vers=(float)atof(version);
    3 `+ U5 B$ S. }/ ?7 J2 B6 M
  120.       UpdateList.push_back(file->full);! x1 v* ~7 F# {, `- B; s1 I
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));" q# V  U/ Q- @' H& K$ F% H* x
  122.     }
    3 O) P6 }. c2 N! K( c8 K9 w
  123.     else
    9 n9 A: {* C( R* H9 y3 R1 R$ n" a
  124.     {
    % m# z5 f& r% A7 P, [
  125.       olds=(*p).second;
    6 {- x( q7 q8 L) I4 w
  126.       if(olds->vers<(float)atof(version))
    : o8 c2 T" P( ?$ T; l
  127.       {1 w1 s+ P, d5 X/ N/ J+ i( p
  128.         olds->vers=(float)atof(version);
    0 y" {$ \( K" n
  129.       }
      \! z  j9 |. c' m5 g% M- g
  130.       free(file);  Q  B" j. D0 x
  131.     }
    ! {- f" Q( i3 b% u. J' Y' F6 i
  132.   }( l" g) V. w- H
  133.   fclose(fp);
    : w% y7 N3 ^% D5 Q
  134.   return true;. ~/ R  H3 U8 G
  135. }$ l" C: D2 B& L; g  S+ G2 M
  136. 3 k. m) F# m. T& O, A7 _, x
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath). M# K$ u  G- b6 B4 b. K# ^7 w4 |- [
  138. {0 S! n& D& a  A* y+ j  X: ]
  139.   TCHAR  szFull[MAX_PATH];% J$ T+ f) a- ^& B" B, N$ q
  140.   TCHAR *token,*inter;
    3 J( e% |7 V7 @. b8 W  I
  141.   *szPath=0;
    8 }6 ?7 S3 b% V% M
  142.   strcpy(szFull,szFullPath);7 H( Q  c  a. O9 s; s' a
  143.   token=strtok(szFull,"\\/");
    ! a. F4 R2 d1 i- u7 U
  144.   inter=token;# Q( W: A3 M6 t+ @8 p
  145.   while(token=strtok(NULL,"\\/"))
    2 u3 Z3 M9 {1 u
  146.   {: N% l! p$ S- o% x7 A. _
  147.     strcat(szPath,inter);7 i" ?4 T! b# K# n. a  ]
  148.     strcat(szPath,"\");
      N  U; t; T* {+ p# V1 e
  149.     inter=token;3 j, f, K' S& b
  150.   }& F5 C) T. c, X, ?. z' c9 S
  151.   return strlen(szPath);
    1 q$ ^8 ^4 k/ C! _: D3 f
  152. }
    - f' l( F1 a# Y$ [/ a; [

  153. " u+ f: Y: |6 r: s' G4 Y; @9 Q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    * R' M: J/ s. r9 @
  155. {
    ( u: z# H' W7 i# @* d! T
  156.   DWORD attrib=GetFileAttributes(Target);/ J* d9 ~% w8 E4 f9 Z
  157.   if(attrib!=-1)
    % y) ], i, w) ]) |! }  v
  158.   {
    3 P2 t% t- h+ b( U. d4 k9 J
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ) A- s! _2 M3 n
  160.     {8 f5 H9 o9 J! k& r
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    5 d1 v  `# @* ?
  162.       SetFileAttributes(Target,attrib);9 A) \. O6 X1 X4 {3 ?
  163.     }& J0 I4 o' C8 E- Q4 e
  164.   }
    . x3 Q2 ?* c7 E7 D9 }
  165.   CopyFile(Source,Target,Erase);, Z( o1 X, m+ l. D
  166. }
    : f+ i, d1 u9 i0 h% ]/ j& e
  167. 1 T6 _( P/ u9 h' X6 z! D! F( [
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ( j! }$ b0 r2 M$ c8 w5 B% ^( A
  169. {, U( r" s0 _( a6 _7 w
  170.      FILE *fp;
    " f6 f& C& k) ?! U* |/ K  N% ?
  171.      char  szBuffer[8192];" a7 c+ m$ d$ R* S, ^! K: a0 X
  172.   va_list  argptr;
    9 M5 {5 _6 C8 W7 E8 n
  173. 5 F* M8 \! c) r9 P" ~, D9 D
  174.         va_start(argptr,message);
    3 d$ a! ~0 N: H4 `$ V* g2 I; \: ~
  175.         vsprintf(szBuffer,message,argptr);
    - d) ?6 h6 H% z
  176.         va_end(argptr);* e* i" \, \0 D: f# g8 J4 |' i
  177.   fp=fopen(FileName,"a");; K2 E/ V0 X6 N% a3 ]; i$ c6 Z
  178.   if(fp)
    & R6 {9 f: J7 s2 n( Z. s6 ]6 L1 ?
  179.   {+ f0 f+ V, V8 ^4 k9 o1 O- f
  180.     fprintf(fp,szBuffer);
    2 N: u, m) N6 U# v
  181.     fclose(fp);  x  e# w( w4 s& Q1 J
  182.           _flushall();
    9 u5 `  s9 b6 ?6 b1 q
  183.   }
    / r9 j6 s9 t- r0 z
  184. }
    $ R- q4 A5 F) z# u5 O, R) W! ]# C
  185. $ d* b! e! h; w
  186. BOOL CRevAppApp::Fclearf(char *FileName)# l. X9 m; P6 B! q
  187. {' e# N9 i1 u; W0 k- x% O9 m( z
  188.      FILE *fp;) n: \( F  d' ?3 g- ^, U
  189.     DWORD  attrib;
    ; L, |6 f- W. `% B# b/ @% z0 W! q
  190.   attrib=GetFileAttributes(FileName);
    ) s" b' s) o/ u* |) M+ J
  191.   if(attrib!=-1)* \1 C$ j, ^- b! A- Y: r2 _
  192.   {3 ~! ]4 N+ L5 q+ l" e
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);  u2 j4 Z: e' |/ p/ J( t6 v
  194.     if(!SetFileAttributes(FileName,attrib))
    4 r4 z+ ^9 a6 t" M4 y
  195.     {. c  q7 C% E% N! [: C, D4 c
  196.       return FALSE;  u  O+ S" U/ ]9 I$ R
  197.     }
    5 }* V$ C2 n' m3 k
  198.   }( H# h( k" B) {
  199.   fp=fopen(FileName,"wb");
    ! L. U3 d& X6 R9 r
  200.   if(fp)4 i% q  B; ~8 U$ g
  201.   {$ ]. [6 j) c. p) I  }
  202.     fclose(fp);
    1 T1 T$ G4 ~- u5 \
  203.   }8 e' F+ [/ D6 h
  204.   return TRUE;
    ; {: c! v+ U# \  d+ ~0 Z
  205. }3 R# \/ ~# X% q& P

  206. " x: L7 J7 [* p- {' r, s" _
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 P8 Z4 K1 }5 X) s5 I
  208. {, b$ N' |9 [  _/ W$ J3 W6 H
  209.   char filename[MAX_PATH];. @+ [1 }& F0 X6 V: }
  210.   LPUPDATEFILE file,olds;5 _/ {0 [% t& u; c" A" N
  211.   std::map<int,CString>::iterator i;7 ]0 \. B7 H5 s
  212.   std::map<CString,LPUPDATEFILE>::iterator p;" F+ I$ e2 V2 k, s% m  d
  213.   std::list<CString>::iterator l;
    " e* N4 r1 g6 l+ z. [/ ^% Y

  214. 3 E9 A3 H  {; D) `; z% Y
  215.   if(bFirstUpdate)+ T2 H6 ~6 k2 m/ u8 @
  216.   {
    2 a* D7 l0 V) A4 ^
  217.     dwCurrFile=0;
    ( F3 I- w% d' c& r/ A# |
  218.     bFirstUpdate=FALSE;
    % c' Y5 W5 d* ~1 X$ U
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 y6 y% J3 n" b- g* |% y
  220.     {
    # _, {' h  h9 e  y
  221.       dwTotalFiles=UpdateLocal.size();
    $ k) h% O- I0 z( {3 v  t) L
  222.       dwDownLoaded=0;: I& G/ j% g2 r2 S$ f- l/ U+ K
  223.       bSilentStep=FALSE;: L" ]& o* C/ {( h1 q+ a' T
  224.       bCompressed=TRUE;
    / K+ m9 ~+ [: `5 q$ y0 K$ z
  225.       strExtLocal.Empty();, c9 c; V: o5 \, b# M1 e# g
  226.       strFullName=(*i).second;! a1 @3 e: p) t0 W# C0 W1 u
  227.       dwProgramState=AP_CONNECT;; r7 c5 p8 w  h' x
  228.       return TRUE;
    ' u" `" B7 s# C. P- M
  229.     }: h/ a" s/ ]' A  T6 Z
  230.   }
    ' u9 Q6 p) u% p. |
  231.   else if(bRestartUpdater==FALSE)
    ' L- J" p8 V( G/ d, w% x
  232.   {7 O0 x' W8 v1 \
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())7 g+ Z# G; l) ^4 n5 K- ]
  234.     {3 h, H( w2 g5 a9 p2 j
  235.       file=(*p).second;: |. T5 w% z  S- @' t4 c
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    : A* e% I5 m7 A+ V+ U
  237.       {
    ) Y* b- L- Y, g- Q) ~
  238.         olds=(*p).second;) d. r( ~! L$ G% T) Y
  239.         olds->vers=file->vers;6 t( d& D# N; H4 E
  240.       }9 Q$ T: }9 ~' K9 l
  241.       else
    2 V9 i' Y9 }+ H0 s# h0 O! Q
  242.       {( {5 l, K! t2 n1 Y" ^4 {
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 |. F& N$ C) a3 ~2 \- }" N
  244.         memcpy(olds,file,sizeof(UPDATEFILE));1 z# b1 b! f4 U2 r. [" i
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    1 H; n& C  x5 M7 a) M# ~$ F4 @9 z
  246.       }& [- F- P1 q, Y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");9 p! ^1 U" \- c0 n. x
  248.       sprintf(filename,"(%s)",file->file);3 e' _5 |4 r% L" G4 U
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    . r4 U, P3 f  E0 m. }! \
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }( f) f6 f% Z/ |0 n
  251.     }
    * R* i% D8 A" i
  252.     dwCurrFile++;
    3 D! z! J: n% e5 b
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 o+ s. W5 m9 r# j* n# s# ^
  254.     {
    ' N8 A  l4 v+ F# I" j' t) F
  255.       bSilentStep=FALSE;: y1 _& r1 p- t& i& x! M
  256.       bCompressed=TRUE;
    9 h0 z) z0 [% x. l* h6 [
  257.       strExtLocal.Empty();" ^0 e" R+ {( x' g# t( l* u
  258.       strFullName=(*i).second;: g& r+ F  z/ j
  259.       dwProgramState=AP_CONNECT;- Y# d/ Z$ k+ Z6 [7 N6 O( _7 g9 J
  260.       return TRUE;) {5 W# A( P  \
  261.     }0 A( m9 c$ k! r& u5 v' Q
  262.     if(!bRestartUpdater)
    2 i. Z/ ~, J) N3 O- ~
  263.     {) w4 \/ n$ F. p% L
  264.       int iCurrSize,iFileSize;1 I" Y5 z# e3 ^2 s! L/ C0 G. q+ n
  265.       iCurrSize=0;5 X- U. ~2 K7 d  A4 q
  266.       iFileSize=UpdateList2.size();0 }3 m! Y0 j0 C, o# w1 Y# ~
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    5 E. a& i4 Y% R; H
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 y2 G5 o8 t8 h" O, o/ y. u
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");" f3 F$ O: i$ S6 A: Z7 I
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( }* Z( s6 |( e; B5 w7 K
  271.       Fclearf(".\\update.dat");
    # C; |! E+ D& `3 l
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    0 o/ y; u' j, n$ @
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)6 i- A7 w. d8 t6 H, T) h' H
  274.       {" o4 [+ x; p( g& q3 H# o
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    % N) Y5 w( g' x8 V
  276.         {
    3 \5 d  H$ W5 V) s* Z" O0 q3 K8 l, Y
  277.           file=(*p).second;
    # [8 l) W/ Z8 n! }; u" J
  278.           sprintf(filename,"(%s)",file->file);  L/ m4 M: t! R" o$ b$ n0 V- j
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 P  Z9 t7 u/ E
  280.           iCurrSize++;
    , x3 P, m+ V# W8 l  N
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));+ Z! A! q$ j# c2 {* X' H& C
  282.         }3 k: \0 T2 k' @. x
  283.       }
    : B) X; g9 S/ E; S6 t: O% s$ y
  284.       unlink(".\\update.txt");
    ( O  v; @* {" M8 p3 I0 T+ z
  285.       unlink(".\\update.tmp");" d( i6 c$ f; f
  286.       Fclearf(".\\checkversion.dat");
    9 }0 Y; v% @" ]  _1 ]
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    3 u9 h1 f2 x9 x$ L3 k6 d
  288.       if(UpdateLocal.size())
    " `$ [' v! ^; {* v% J6 h# Z
  289.       {
    $ Y% v7 E0 V2 _
  290.         UpdateLocal.clear();2 w( h0 r8 I; C& ^2 T1 i( s! [1 E
  291.       }
      T6 V5 [( o! t8 R8 @2 `
  292.       if(UpdateFile3.size())
    5 X: i4 ]& [5 ?
  293.       {" y/ W6 K. E6 R6 N
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ \9 s5 ~7 }) |' P) {1 v/ ]2 n! g  u
  295.         {
    ! [3 I4 H  V# `' u
  296.           file=(*p).second;
    / x2 G. R. A5 B! C% H( g1 A
  297.           free(file);& Z4 l7 P) f6 o! T4 e$ h
  298.         }
    $ F  p, o) Z( [
  299.         UpdateFile3.clear();
    ) C8 w- ~# e* b0 M% x
  300.         UpdateList3.clear();' ]; ?$ `/ |- E( j8 R8 n
  301.       }
    ( j* f5 V$ K5 Z, Y
  302.       if(UpdateFile2.size())
    ( M0 K8 k; }( N6 s
  303.       {
    , i* N6 D) R3 _; T0 P' }5 I/ w
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 m) N7 ~' s+ ^2 A4 X0 W+ m/ l
  305.         {& U6 H( H+ @$ ~  Z! s
  306.           file=(*p).second;
    : {/ V+ V2 b  P, ^  A. i
  307.           free(file);. `" p+ P5 [4 [* z, \2 Z2 c  L0 Q
  308.         }
    ( v4 }, m3 O, v- G1 J7 w
  309.         UpdateFile2.clear();( r6 w" u& r6 b2 L8 {7 m& w) t; G
  310.         UpdateList2.clear();
    7 x# W6 s) J( r3 Q
  311.       }
    : n7 U$ l; P; Y' ]% U" ]' P* A
  312.       if(UpdateFile1.size())
    % V7 `' v, o  C
  313.       {
    & v* a9 L: s- ~
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    % }0 L/ U3 ~" e5 f  d& z6 R9 C1 d
  315.         {
    ! F" c3 c% B2 F# H1 ^" P- q
  316.           file=(*p).second;5 }1 O, f+ j) u, r( k
  317.           free(file);% u# _) D# Q) x. W! Q
  318.         }" O" r2 v1 H8 g* c. H9 L
  319.         UpdateFile1.clear();
    ; _3 Q/ [* Z( n6 J
  320.         UpdateList1.clear();3 @: k* R  A8 C9 D& \0 D
  321.       }
    " h  \+ r% A8 ?8 {" p# G* h
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    + M  e) w9 U+ ~, F0 K
  323.     }3 e: [# v4 K( v# Z' Y! J+ H& g* \
  324.   }1 m/ W/ ?+ |. ?' h3 o
  325.   return FALSE;1 n6 K: R7 q5 G
  326. }
    " |6 @3 c, P, {9 Z/ n  `( H9 W3 I

  327. 2 `5 D1 Q- k  P7 v3 w* {1 Z! z
  328. void CRevAppApp::ClearAll(void)) E$ [! M2 V( u+ D
  329. {4 @: ]1 M0 i( j" Q, c0 Z- @2 W
  330.   LPUPDATEFILE file;
    ! J$ a' D& s  t& q# c
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; ?' z' y! ?/ i2 r

  332. ' i; a+ u2 }/ c
  333.   if(UpdateLocal.size())1 g: w+ o5 d/ Z" e. y  k' v
  334.   {0 l+ e' N3 b4 V9 k: h# P; D' a
  335.     UpdateLocal.clear();
    7 y2 h* e7 W2 H6 w; ]* Y" r  Z# W
  336.   }
    ' ^9 a' v9 @5 f+ H; I
  337.   if(UpdateFile3.size())7 ]# Q, m/ y. l  a0 _2 I" [
  338.   {* P- k6 J, f- m: I
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 e  C$ I+ P2 @+ C' U5 [1 S
  340.     {1 n( |, F* Z$ T0 e  `6 y0 ~; E
  341.       file=(*p).second;
    " |/ A% [8 q3 t; X8 R- A5 R( z
  342.       free(file);
    ' }" m' ]: c, k( e& p2 L" j' h
  343.     }0 g9 `8 A& Y5 N: d  `& i
  344.     UpdateFile3.clear();
    2 d! `4 n( }+ u# _
  345.     UpdateList3.clear();
    5 R# n" \- E5 U, X
  346.   }
    ! U4 a$ _! x' K
  347.   if(UpdateFile2.size())
    / n2 @& ~, y4 B$ c4 o, E" ~0 g. r/ {; {
  348.   {1 n# c: T% C# p& J% C  {6 H1 B6 ^
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " Q* r: t9 o, ~/ S& d: n
  350.     {
    0 d+ U1 u  C5 y# T! n2 A$ R  m
  351.       file=(*p).second;& @2 v) h! }7 T# ^) O
  352.       free(file);
    * @  c# j1 Y4 f8 I6 I/ e
  353.     }$ H. T/ U" c9 H$ {
  354.     UpdateFile2.clear();
    # _2 }$ j6 Y" f9 Y4 _4 ]9 {
  355.     UpdateList2.clear();
    5 k1 f" R4 Z) b& K9 w# |
  356.   }5 j0 Z: Q+ Y2 e
  357.   if(UpdateFile1.size())2 m: a4 B& d! Z- K6 d
  358.   {7 S/ B" ]. ~) ?, v
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' }! l: P0 G1 R$ X+ l5 C! V
  360.     {) Y! I9 Q' {! S) G
  361.       file=(*p).second;
    : R+ e: I5 [9 C% ~* }2 O5 R
  362.       free(file);
    8 w0 [8 H5 ?+ a! `
  363.     }
    2 Q/ |* R* w4 t- F5 d+ w6 s
  364.     UpdateFile1.clear();2 N( b) U5 ^. s  a% C  j! Q8 C
  365.     UpdateList1.clear();
    9 L0 Z  i( U2 G/ `! b
  366.   }3 w) g) l9 Z- @$ C
  367. }  
    ! L1 g2 @: E2 d8 T6 ?+ I
  368.   - b9 |4 W4 o# f% l
  369. BOOL CRevAppApp::CheckLocalVersion(void)  z0 M$ q6 H+ @' t- [
  370. {
    " ?; {% m$ W! Y+ @1 b5 r2 D
  371.   int c;
    ) @; {* u. ~% q4 I/ H. X6 j0 [
  372.   LPUPDATEFILE file1,file2;4 M; h. s( ?. k
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;0 N# D( d0 t% C* _' r! w  x$ d7 L' ?9 B
  374.   std::list<CString>::iterator l;. X8 d8 t% ^. \* x$ L: Y

  375. 1 p* |" U- y: y2 D
  376.   UpdateLocal.clear();
    % d4 w+ {+ w- K4 G
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    0 v" x2 _5 n5 Z+ w
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);2 v) D4 R* |8 R( \  j
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
      N: b' x3 ~( ^6 _- s% w
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);/ _; I5 d6 |* |2 {8 Q2 G
  381.   if(UpdateFile3.size())9 ~, P8 w+ J/ S1 p9 F4 O
  382.   {" V2 j0 w. J( a/ e; E* H
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)# [% C( H) e" E$ b3 C; g
  384.     {: J7 U2 @' H0 {# t" C
  385.       file2=(LPUPDATEFILE)(*i).second;) W" `& d0 s1 U" d0 j# Z" u, n6 j1 R/ s
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + }: j9 V5 o& o  n- ~/ L
  387.       {
    4 V' d* X" u* _0 o, S
  388.         file1=(LPUPDATEFILE)(*p).second;$ @( }/ o& p- Z& A0 J3 B0 `
  389.         file1->vers=file2->vers;' l# u8 I, ?7 l# G
  390.       }
    + \+ [. X% v  a" V+ K
  391.       else
    . S" i5 b2 P5 d/ h* |, S
  392.       {
    % n) C4 ]  V: M4 X# V6 R. [' A
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 L0 p% x) R- ?" v
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    $ {8 {" T& S/ r
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& h9 i0 t- B! S2 ]' ]% F
  396.       }
    2 p5 V  G& v9 C1 R; ]. w( b
  397.     }
    : d  _5 W4 s7 T( I) v
  398.   }. X& Y# r) C( p. x
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( o8 K) s3 S4 Z$ j
  400.   {" o2 t! q7 a7 o- [+ g
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ( J1 I, z: I- t: `
  402.     {) S5 u. D; n5 ]# K/ ^! K6 V; H2 j
  403.       file2=(LPUPDATEFILE)(*i).second;
    # ?7 q: U/ i" _4 ]7 h7 O; a! Q% r) p
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 r' s. C. b/ S/ K. z/ h1 C
  405.       {
    + G0 M: Z& }9 ?  P
  406.         file1=(LPUPDATEFILE)(*p).second;$ O- o* @6 ?# B2 ?! r
  407.         if(file1->vers!=file2->vers)' a3 l  U9 e2 i1 @( d/ P
  408.         {9 j0 H' l: M; E6 Z$ A# Y: A6 J& A
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 c" l& j6 q* v2 g1 p
  410.           c++;: Z3 N. M! d6 D/ V; W
  411.         }
    ; Y6 _) Z4 x2 `0 k1 @- l
  412.       }! h# w" K, U9 a, J
  413.       else
    # ?! h& Q! p& R2 P* {
  414.       {
    # y% H2 c' r8 k% M: V
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, c" b: |9 j& I/ ?7 d
  416.         c++;8 r  R8 P) q' |2 ]7 S# S# @
  417.       }
    * T; s( \. h9 E( H
  418.     }9 z+ b# O# q8 q' U$ C+ V' R
  419.   }  ~/ S% R0 |7 w- j% ?, h
  420.   unlink(".\\DownLoad\\update.txt");9 R4 [7 l8 b0 q, {; `
  421.   if(UpdateLocal.size()) return TRUE;; \0 K6 P1 O; M% I
  422.   else                   return FALSE;( c3 w& P8 a9 O2 ^1 c% q
  423. }
    1 U  o5 [# i6 [8 l

  424. " w0 i0 |5 ]5 ^' R! y& a/ V
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ! a& b  B# R9 P5 }, f: U. K
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    2 N4 S4 c- N! c2 l* F, _
  427. $ K" `% X1 K( R# }

  428. 3 v# U" z* T) Y+ c9 P0 v; K2 `
  429. 0 d/ |5 n% v: _# S& u2 r
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" J) E4 t! z$ o1 y7 T
  431. {% G3 u4 K$ w8 M2 v8 L# W" U
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    2 Y6 \& ]/ F  J, x
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): g8 M) w9 @" `( U8 l3 J0 M
  434.   {
    ' ~5 W3 w+ G/ w% T6 \
  435.     char szLanguage[50];
    % |  }0 U& A7 Q/ A  H. F
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . V! r/ F+ C/ u* [, D$ U
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " F* @" n  k0 {2 Q; k
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- A2 w3 L+ K4 [- G
  439.     else                                   m_iLanguage=ENGLISH;  ^( q( E' ~# Q. ]- w9 Y
  440.     char szRegister[100];8 E3 ~+ p8 _7 W2 ~  y7 m
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; F# b2 f3 t9 q
  442.     strRegsName=szRegister;
    0 P0 R! h7 Y7 _1 c5 U1 I  X) [% D
  443.     char szPatchURL[100];! V  o/ f* X; {5 S: P
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ! W; Y# H! u5 h( m" }0 t4 y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 t8 F6 S8 `( h) O1 K- _; k7 t
  446.   }
    * R. V% _0 U' O- I' D, O5 s! G
  447.   else
    ! w6 I0 o  V  k. C
  448.   {
    # ?) |: _3 Y" c- B) ~! Q
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);+ X" Q5 y& z( `$ y. M' T5 R; w
  450.     strRegsName=DEFAULT_REG_URL;
    " U; c4 J' w  R, {/ Q
  451.   }+ ^7 @; \% D) `0 n) H7 M" D* q; A
  452.   if(GetFileAttributes("hosts.ini")!=-1)& S9 Y& C- o$ Q0 x
  453.   {( d" A$ Y  q9 k7 @8 r
  454.     char szIP[50];: H$ P! R  ]( p9 W% G5 z( n
  455.     char szDIR[300];
    * _, ?. a& k" B; D# q, x) q
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))  @5 R: K/ N7 l# I, w
  457.     {
    ( t7 H2 o8 f' H" H
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      E9 j2 P" p3 B: H: ?
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    6 m+ v  w3 z5 f( z, u; w* e" s
  460.       strHostName=szIP;6 l: ~' F4 W. E! ^3 d
  461.       strHostPath.Format("/%s",szDIR);
    4 d1 m* D. b3 U  U" c
  462.     }0 X  W; e) }+ [4 e
  463.     else
    & u) O, z! M5 p9 ~8 f! ]
  464.     {+ a- M( p" A7 x# W# r! |" y8 K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# s: |" V% k* `. U, `" `! J# E
  466.       {
    4 }6 }4 K) H5 e. b3 A% \
  467.         char szLanguage[50];
    2 {4 ?; ^# l" A/ b# p5 d% q
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& v. x* d  [/ r9 Q4 Z; @. e4 p
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 ]( ^! A% u9 J9 s7 }
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      M/ ]6 X/ y4 H
  471.         else                                   m_iLanguage=ENGLISH;! t4 `7 l! `! ^# _$ L* J1 e/ y
  472.         char szRegister[100];
    ! {' z! D2 z$ ]2 q2 C  F
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 L2 d' k9 N7 U6 Z$ W! t1 B
  474.         strRegsName=szRegister;5 W. @6 d' b' H
  475.         char szPatchURL[100];" g& t; \+ e& n0 Q4 c
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* b9 I, f1 o- L6 G; k
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      w& e" ^# o3 o/ V6 p
  478.       }& Q  M, r8 z, E3 B
  479.       else& w3 @# f9 U4 R  H  P& @+ e: F" d
  480.       {( J- i" d% M; E+ B9 f
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & T2 r0 @& E" m9 ~8 [9 Y
  482.         strRegsName=DEFAULT_REG_URL;
    ( }# q2 Q2 B9 f$ j! G
  483.       }8 D9 x6 S2 T/ G
  484.     }
    , E# [" C! O8 Z- f& U7 H
  485.   }3 w% ?9 U2 H  i4 E9 e% ~) v! U* m% I
  486.   return true;
    " e& z! t) ^" f" I1 F( e6 s  v
  487. }! I9 P3 P  `; i) k; A1 U4 W
  488. 3 |# @4 _% F! S, Q9 D: C! d
  489. #include ".\ZLib\unzip.h"
    0 `" i# I7 \# I+ ^9 v
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 t9 V- C3 ^0 P$ L
  491. /////////////////////////////////////////////////////////////////////////////$ r0 K" k1 H7 @1 Y) j
  492. // CRevAppApp initialization  B: H. O* @6 u+ V) w2 t

  493. 0 T- [" h1 ^1 E' p; Q; U) c. f( C
  494. BOOL CRevAppApp::InitInstance()
    " {: K" I5 y* {, S
  495. {
    0 v$ c3 D3 y& r7 D; G4 M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];$ y$ N* @' i0 l& p# b2 D6 y, @
  497. 4 E% f3 k' R9 K( b/ U& b4 C7 `
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);; L" i9 u- p; a5 c! t" t3 _( n" Z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))9 A* f# M) h7 ~6 B( h
  500.   {
    ' M$ A$ }5 H( P. P9 p" f. r
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");6 H1 H8 ~& M9 @: v
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    1 T# v/ f  P6 P) ^
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    : P) S5 h& k) J% T; v* F% T0 ^& e
  504.     {$ \( f: K$ E; V, V" ?2 j" V. y, h& S
  505.       strcpy(szPath,szPathTarget);! H! T4 T) k4 f
  506.       SetCurrentDirectory(szPath);1 T2 b  g" v4 x0 q. P& n3 U3 J0 y/ A
  507.     }0 W* v& R6 J$ e0 N% N7 i, ?% c
  508.   }* c5 X8 V: G3 U: [
  509. #ifdef _DEBUG; K/ r; ?; ]# @9 Q9 ]% Y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 o  W# }0 y% R, V
  511. #else9 N2 U) I/ u) W9 B# g" \1 D
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))# u. i( N" a: G$ @5 o
  513. #endif: l4 r" ]6 {" G' y- M. A* l
  514.   {: Q5 a3 E7 i8 ~3 R2 J. _* F. U
  515.     char tempFileName[MAX_PATH];3 a4 J' n) g7 T/ ?: s
  516.     strcpy(tempFileName,szPathSource);2 Y; k+ t4 x/ h" a
  517.     tempFileName[strlen(szPathSource)-12]=0;
    5 M) R+ g% b5 x* J7 b0 h
  518.     strcat(tempFileName,"\\$CSUpdate.exe");* d  ~/ ?+ r0 X: J& ~
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);& E% o' O4 ~  D9 G4 l- ?% `
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    " q) M  D, n2 N# R
  521.     return TRUE;
    , W6 m2 c! q& k. ^% T! c$ g( k
  522.   }# a; o1 E, h" ]  y9 j4 J! v  i
  523.   // Nuke 0118: Delete run.exe6 R7 D6 [7 \! c, d5 u
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );8 \" Z, P2 b6 p* G3 N. Z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");& L& ?  a- F7 E8 Y5 t
  526.   if(!ReadCfgFile("Config.ini"))# y. X; Y; M" u5 a5 _: J; X. B% M( v# ]
  527.   {3 ]$ T( s1 \# e+ I' o
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    # C/ a& ]% L- o$ A( ?6 O) r
  529.     return TRUE;
    : r+ l2 v# C" j7 P
  530.   }
    ) a) o5 l+ J! k
  531.   HANDLE mutex;
    1 {: |- E: Z# v' X/ ~9 F! X
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 B( R. T! X; _* h5 _
  533.   {# [2 W+ F; L: N
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    2 }9 w7 g, R" h0 D( g
  535.     {
    " o' s+ w! U1 @: i, ^* q
  536.       CloseHandle(mutex);
    . f' m3 O" u' H$ y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    4 O; v, K$ g$ h  ]. u  p
  538.       return TRUE;
    9 p1 J6 @$ H! X
  539.     }
    ; L! `8 x; [$ N/ Q+ Y
  540.   }  3 S2 h# j4 g2 H
  541.   CloseHandle(mutex);( A# D! L% ?2 i* g) C( O& j

  542. 1 L2 b9 V" j2 X, r: f3 @, K8 \' @
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);7 K( r! G% }: u& N6 G
  544. 7 D( H4 P- k+ T/ d& ?* `
  545.         AfxEnableControlContainer();
    4 q/ Q. B. U" K- k, d7 o0 v

  546. . ~, N: n$ ~( R# z! u* u# y$ {0 G
  547.   bCanUpdate=FALSE;
    - i( j6 T6 k& m) ?! t/ {$ g' N
  548.   dwStartUpSteps=1;
    * |/ _& y+ c% J; I( c; w
  549.   dwProgramState=AP_NOTHING;3 M0 T7 X: F. ~. l

  550. 0 p5 N; i9 @( W* {" m
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
      c0 P# [0 `) g1 Z3 {

  552. . @% [" i! ^; v, R: Z7 m  [
  553.         // Standard initialization
    , l- o) l4 q( q# L
  554.         // If you are not using these features and wish to reduce the size. b! ^6 m6 |; E
  555.         //  of your final executable, you should remove from the following+ e4 H" U( W2 `/ l; D% ]4 b) W; S
  556.         //  the specific initialization routines you do not need.
    * q6 _5 u* F6 l; r
  557. # d/ k! G4 `% c% V" s1 q- Z
  558. #ifdef _AFXDLL
    $ R5 ~$ \7 k$ R7 D; ?9 V3 v% \' v
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ! d! O! n, l+ J3 x) e2 e6 T3 k; D
  560. #else
    2 j7 R) m7 Y; H: H6 G5 s$ K
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    # R% v* |- d8 i, d: L0 s& n0 v
  562. #endif
    3 w9 F3 ], r; X+ U$ p% e  ?9 m
  563. / ^: p% z# j1 ]6 }6 p/ g, g
  564.   dlg=new CRevAppDlg;
    ; p2 e( O3 ]# W
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    % O- V- b( z# o% J9 g$ M
  566.   dlg->ShowWindow(SW_SHOWNORMAL);# P( d& y% {  X9 M( Z4 l
  567.   m_pMainWnd=dlg;
    7 C' i$ p) K) o: ^4 e( ^. A
  568. . R- X' u3 T1 r8 R( E
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);( n& O  }5 x: O+ U7 X: ~
  570. ) ~3 O& U+ a8 e. z# i3 P3 E
  571. //  GdiplusStartupInput gdiplusStartupInput;: d* I6 D; H* K1 `4 W& R$ h
  572. //  ULONG_PTR gdiplusToken;8 A) ^6 x! ^9 U1 z
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    6 i; l1 g+ n+ w- \
  574. ( f/ e8 ?: b/ |) b1 ]0 m: {
  575. //        CRevAppDlg dlg;
    - k! X8 ^8 \6 j" Q; A2 Q7 g/ _$ l  Q
  576. //        int nResponse = dlg.DoModal();; S, y- a+ B9 o! l( e3 H  a# d
  577. //        if (nResponse == IDOK)3 W) H+ i2 k: m2 T; m, H$ |
  578. //        {8 b6 ?7 o# o- u8 b0 a
  579. //                // TODO: Place code here to handle when the dialog is
    , p& l, {- y& R3 I& `2 M; e0 S9 s
  580. //                //  dismissed with OK
    7 n: x9 Q# k/ ^6 g' c1 K1 S: O
  581. //        }
    , j- Y, q4 k- C# N9 P
  582. //        else if (nResponse == IDCANCEL)
    / Y4 C- {9 j, G0 j0 b2 J7 N
  583. //        {9 ?2 o* d' |( W6 T; @! m; F
  584. //                // TODO: Place code here to handle when the dialog is
    * `' e8 k$ g5 ^, r( Q" m
  585. //                //  dismissed with Cancel
    ) n) H& C1 g" I; k5 |" X) i
  586. //        }& E- {. |( F( q8 G! A+ [

  587. / }/ _& {8 S- d' i  O4 U1 [5 b
  588.         // Since the dialog has been closed, return FALSE so that we exit the. l4 S8 b3 V9 K' c0 B7 |  a  P9 Q. V
  589.         //  application, rather than start the application's message pump.
    ' Q  @0 ]" L/ R! h- @9 \( Q
  590.         return TRUE;
    # y- k. V+ ]! n4 l6 X
  591. }2 H" X+ w% j$ L- m5 @

  592. 0 S' j! ^7 g: O1 F3 G( o+ U
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ' \! n. J0 {2 t7 M4 @
  594. {2 X; h3 l* Q+ F+ q8 N2 F
  595.   int i;
    1 I; J) A' i4 J! P$ B: ]! V
  596.   char *szRet;1 p* @! H; e5 z3 L  \: s$ x
  597. $ r+ ~' p+ {2 \3 G- c. g
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    6 s8 |3 P3 g& p
  599.   if(sztoken)* ?  {% c! X7 y
  600.   {( y, G& I8 X/ U- J. M
  601.     szRet=&sztoken[itoken];* \1 \, @2 e8 C' h& @% v
  602.     while(sztoken[itoken])# L: C% l5 p" Q. d- ]# p0 X4 ~, E: O
  603.     {
    , L9 a6 q. p3 s0 A0 k. W
  604.       for(i=0;i<(int)strlen(token);i++)7 g; r8 |! j, [8 _+ d0 z+ v
  605.       {
    ! n9 L+ i+ A. @, v
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ) G0 a& g9 y; M. i+ s
  607.         {, C0 a. m& ^3 s6 d
  608.           sztoken[itoken++]=0;9 |% c  R7 i/ m
  609.           sztoken[itoken++]=0;# v# m; E; q5 ~7 f% z
  610.           return szRet;
    . h. n- F& e1 t: I
  611.         }
    # m) G4 {. c! P  o: p  [
  612.       }
    + Q7 e1 R% e+ a/ F; Q$ I4 \
  613.       itoken++;
    ( _  e( o/ h: v  i- n. a' Z$ `( i
  614.     }8 i* G8 e0 m/ `, m4 x
  615.   }
    1 T. K3 y$ A- x: E0 w( x
  616.   return NULL;
    0 ?; i; }' L1 S6 n
  617. }
    ; k  s+ X4 x, J8 ~- ?

  618. / }+ n* n/ }# Y% R: Z
  619. void ProcessProc(long Total,long Current)0 X3 Z+ ]! W# H
  620. {
    7 ?- V1 ~6 M, x' B9 ~: S: O
  621.         MSG msg;
    ; w- @! p  E, Y# r! v! T$ C# E
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    2 q7 |& A4 ]8 N$ e% n# I$ r
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));# ]/ R8 x1 p0 \
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))+ O: L1 K! R7 U
  625.         {6 C# p, E$ X# k( u. u, Y5 u
  626.                 if(!GetMessage(&msg,NULL,0,0))# Y$ {* d1 C4 w7 u- ], {
  627.                 {
    ) Z4 c) f0 |9 N! @8 E
  628.                         return;
    0 ]+ I5 q- f7 l3 k6 x
  629.                 }
    - z7 `  A- B# {& n# L# ~
  630.                 TranslateMessage(&msg);
    . j: ^' l7 [1 P) x- O0 t4 S3 K! c
  631.                 DispatchMessage(&msg);; z# y, M7 l5 ~9 Q* I7 Q1 t
  632.         }        % j$ [3 \- d1 F' e
  633. }, h# D( b- y0 j" G8 s4 P: [
  634. 3 S1 Z2 O* u. E+ t1 {! L1 R
  635. BOOL bFirstChar=TRUE;9 C- i: y3 X( C! X* z
  636. ) W$ q* s( i0 p& e
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ) q, N2 q: a" a* p* Q) }
  638. {
    " C9 W! Z/ I- P; Q" J  B
  639.         // TODO: Add your specialized code here and/or call the base class. j& Q- F6 z& G9 w; `
  640.   switch(dwProgramState)- l  v- t$ Y' i
  641.   {" Y& l% @- ~2 _$ P8 ?4 j
  642.   case AP_NOTHING:
    - L& |% v' w9 ?$ i3 e) y8 ~
  643.     switch(dwStartUpSteps)- G% M& D  K0 T" V
  644.     {
    7 i; w8 [8 {* B. |. G7 V# L
  645.     case 1:
    % m' m& x( v. _+ ?0 x
  646.       {
    $ |- ~* C+ }9 E  u
  647.         int i;
    # r: y4 U* _# U& O$ f
  648.         CDC *pCDC=dlg->GetDC();% x$ D% q$ }4 H4 |
  649.         HDC hdcwnd=pCDC->m_hDC;
    # p3 u; e3 f1 Z  ?$ N$ S
  650. //        Graphics graphics(hdcwnd);! o: |9 F+ s( Z- X$ ^% {
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");; h( d3 M% H( |8 }& w- Z1 D4 h6 [3 M
  652. //        INT iWidth=bitmap.GetWidth();, ~/ j( c4 a2 ?& d
  653. //        INT iHeight=bitmap.GetHeight();
    # I4 n9 Y3 v! ~# T5 s2 d
  654. //        Color color,colorTemp;
    # E/ E6 ]/ i' V! f. W0 {# q: e! @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    0 x- f% @( O4 F% S& q: E" q' F1 B
  656. //        {+ p; L) B$ @/ y5 f) G
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    , K& @' v! w6 g( J) f7 b
  658. //          {' @1 R# t3 U" I  r1 W
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; _- \3 h" S3 z$ p5 f
  660. //            colorTemp.SetValue(color.MakeARGB(, O4 i6 u( @0 H
  661. //              (BYTE)(255*iColumn/iWidth),
    8 v. E( b% D7 ?/ p: _+ U
  662. //              color.GetRed(),# r& [; _9 E  d: ~8 p
  663. //              color.GetGreen(),' U5 I  @2 i; T; O+ G  c* M
  664. //              color.GetBlue()));3 y6 A" `! n5 F; A. w
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);3 L$ V6 X. a  C% {; t. |; ]
  666. //          }% e; m  U6 ]- i% e3 O
  667. //        }' B* v% U0 g) N2 n
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);! M/ ^9 R* J: j% L2 I/ I0 H+ s) T
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # d' U: v8 _4 J3 B: Q
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ( z0 p0 e5 Z& f! D9 m) Z5 A& ^( K' W
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 d- b/ B8 f* y: {
  672.         for(i=0;i<240;i+=8)5 e1 b! M! x6 a+ E: I- c
  673.         {5 b' ?. `+ `. ?: f9 I( q$ l! n( m
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ {/ f/ X5 w# B. ~. i
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 [8 B) b9 v4 b. w5 F" m8 }5 A
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  b+ E; y  G9 h! w% S1 X, n! g
  677.           Sleep(33);8 S/ W6 Y+ M9 u* I" [% @" a
  678.         }
    4 F& M' ?3 N8 n2 ]
  679.         Sleep(1000);
    $ _$ D0 K3 N. T7 a1 |
  680.         for(i=240;i>0;i-=8)
    , c4 v8 e% m# C4 f1 i% k: K  f4 X, ~
  681.         {* F/ t. r' I; W: t4 O
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( M' J. ?& W. a0 |# L8 Z0 u
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    8 c: i$ {# u! I! u: u- D4 [0 g
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 L' Z7 y" @& W) q5 _
  685.           Sleep(33);5 X/ H  B, U7 C2 v
  686.         }* Q( W/ Y( ?! V8 H: j
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);+ R1 d6 r7 T% r5 M  J
  688.         dlg->ReleaseDC(pCDC);
    9 z' L' ^3 b6 [7 s1 f& j
  689.         DeleteDC(hdctar);9 o! r# }( B5 r+ W: i4 u
  690.         DeleteDC(hdcsrc);
    9 e+ C' O2 ?3 h# Y* E
  691.         DeleteDC(hdcorg);4 a6 ~5 x$ W* `+ U) q
  692.       }5 ^/ D  p! D* E9 [
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);" y% u9 ^- z, f- w' t6 B
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    7 ]; x2 t( c6 d# l! ]
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    1 b& W$ {9 B, q$ C
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    3 s- b4 N- |7 g/ y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; [/ f' K6 F  l3 C; B
  698.       if(!Dn.Connected())
    " [8 d3 J3 k' w* ^. X- d
  699.       {
    7 N" C! h+ C. S) T% l
  700.         dwTotalFiles=1;
    & S3 X  }% a! S0 D$ I4 p
  701.         dwDownLoaded=0;
    5 z4 [3 X! Q' L7 v& \
  702.         bSilentStep=TRUE;
    ! J3 Y# C5 R/ B9 x$ V
  703.         bCompressed=FALSE;0 z) E; z+ R( P: U
  704.         strExtLocal.Empty();) n8 }2 [/ s. D: r
  705.         strFullName="readme.txt";. h/ |+ v5 C2 m8 l! Z& `7 l3 r
  706.         dwProgramState=AP_CONNECT;
      ^* J" c, c# F! p0 }
  707.       }
    ! D6 b  j6 P  H) o4 m$ V$ B% T
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();$ u" Z6 Z7 U9 h! j  e! K
  709.       dwStartUpSteps=2;4 {; Z& v9 C$ U) h9 f. e' e. [
  710.       break;
    4 F# s- G! o6 v( B( g8 |  G( L
  711.     case 2:4 R- \8 P0 z+ ]5 |6 C5 A5 Q" @8 M
  712.       {
    & Y+ ^# q- U; s* x! v
  713.         int iEOF;
    . ^4 A. ~! F: ?9 i9 f& A. S
  714.         FILE *fp;3 B' K: d, I( V- u% C
  715.         char szString[512];. z( Q9 v; ~6 ~% j$ h2 M4 k
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    - K; h0 N* m- o2 V
  717.         if(fp)5 a, C% T2 u$ i7 u5 M. g
  718.         {) V: b  `! m1 [
  719.           do' F% |7 Z$ u& c, |
  720.           {
    * b3 T$ k- d% f, a2 x
  721.             iEOF=fscanf(fp,"%s",szString);
      B% r1 N! P7 G, |% ~
  722.             if(strlen(szString))" C: e5 f! A, v/ D8 L
  723.             {+ z$ \1 c7 ], i5 d5 ~* _
  724.               if(bFirstChar)
    + e5 P) I/ E8 I( {6 y! g+ R
  725.               {
    , c8 b0 I6 A" d6 l" x5 o# D
  726.                 bFirstChar=FALSE;, I$ F9 F, P9 D
  727.                 bConnectIsBig5=FALSE;# ~! ]4 a# F; h
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;- O  r/ k( {  _/ }3 Y$ v  Z0 ^! ~
  729.               }
    ) G2 v4 Q2 q- s7 ]
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));( {/ u! Q& _  u$ U% G
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    8 K* l# O- S: _( ?, s1 {
  732.               dlg->m_ListText.AddString(szString);  ~2 a7 K1 U4 a
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ ]1 h: A7 T+ Z3 }
  734.               *szString=0;: k7 M) D- J( f* ?5 R2 w) E/ E
  735.             }
    ; D9 P6 Q8 C3 J, U; B' e  @
  736.           } while(iEOF!=EOF);/ s2 Z- {4 }& S$ B
  737.           fclose(fp);
    3 {6 w: K( v( @  @% S
  738.           unlink(".\\DownLoad\\readme.txt");
    , P4 K4 D6 X6 E" [
  739.           dwStartUpSteps=3;- h( P. [% G) q* X0 w
  740.         }
    " i/ z8 |( J6 }: t8 X
  741.       }
      k+ j. B1 K1 j
  742.       break;5 M0 {5 m& j! E/ `  Y
  743.     case 3:5 F" X& ?2 `" _0 J; b; s* C
  744.       if(!Dn.Connected())
    2 }$ I# O2 [& {  y; A0 k$ O
  745.       {" h3 T7 W  j: J3 e# q! {5 g: |& J
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    - D: C& s  n2 c
  747.         dwTotalFiles=1;
    7 d5 ?. u2 a- f2 ^7 t- p# t/ N
  748.         dwDownLoaded=0;
    ; o% ^2 x9 P7 U! L5 K
  749.         bSilentStep=TRUE;
    3 k( z  G" M8 X5 u7 _1 ?
  750.         bCompressed=FALSE;) c; W2 g6 H  C' V8 f
  751.         strExtLocal.Empty();8 |* e8 p! c% c2 P* O
  752.         strFullName="checkversion.txt";
    0 s. b+ d# _1 h8 R/ A
  753.         dwProgramState=AP_CONNECT;
    3 q! C! p, C( g
  754.       }
    , j* p" F# e/ r+ o% K. _- N6 C8 f
  755.       dwStartUpSteps=4;
    ( U; o! M! R, M2 E5 u+ j1 ^2 C
  756.       break;5 j+ O  I& ^+ i) ]5 R
  757.     case 4:: \' P3 j  l# S$ h% m/ R2 e
  758.       {8 Z8 o5 B, Y+ ^+ k4 x
  759.         FILE *fp;
    . `" p1 e9 o% Z- b5 I3 B
  760.         char szString1[128];: C  d# w' _# P! \) @6 [
  761.         char szString2[128];
    . ~& q1 w5 m" s1 M; H# {
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");& n) V1 h9 R2 I
  763.         if(fp)
    9 V  w) D0 {! @* @# F6 N
  764.         {( n1 R% [1 @8 C% l; c1 a/ I
  765.           fscanf(fp,"%s",szString1);; Y! r' U5 d' e% Z' S! h1 V' _7 u
  766.           fclose(fp);  i# t0 ~* Q  z' r4 N+ R
  767.           fCheckVersion=atof(szString1);
    - {- F) {: s: g
  768.           fp=fopen(".\\checkversion.dat","r");
    6 Q, `+ t3 L8 v' \3 w+ y% H5 X2 J
  769.           if(fp)
    % k& X  Y) F7 c" Y4 O$ k
  770.           {1 Q- R% B+ M2 G2 g
  771.             fscanf(fp,"%s",szString2);6 M; q6 u+ |  L3 C$ Q  U5 q1 r, s# \
  772.             fclose(fp);
    % g* v( p, p9 u% W7 Q& e+ m" t  i  B
  773.             if(atof(szString1)!=atof(szString2))4 ^4 b4 {. l2 h0 A) |: e6 E
  774.             {) L6 N8 s' X& m6 S
  775.               if(!Dn.Connected())" A! C) B9 @* t5 A
  776.               {
    ; G. M2 B4 g5 K8 m; w
  777.                 bFirstUpdate=TRUE;' F& }( E5 T3 _5 u# F) l: g
  778.                 dwTotalFiles=1;
      t4 s# a  ^( W% ]
  779.                 dwDownLoaded=0;
      o" G2 Z$ t- @  ~' Z7 W' @
  780.                 bSilentStep=FALSE;
    1 O9 M7 P$ R5 P8 s$ Z
  781.                 bCompressed=TRUE;
    ; f3 e9 d3 d8 `2 K
  782.                 strExtLocal=".\\DownLoad\";3 K% }. y) C2 \! `6 r8 b
  783.                 strFullName="update.txt";1 y9 D" ~  ]* P2 a  b5 v& K! ?0 a  h
  784.                 dwProgramState=AP_CONNECT;
    6 o3 Z1 |' ]1 R
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ' `* g7 o5 z" R8 f# G, H
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , z# b: }' ^5 f8 E7 c
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % g# D0 V5 Z0 ]( h, Q

  788. 3 N6 i6 H2 U! A3 S! ^% z6 c. I
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( ~, W+ X2 ?# Q7 p5 f: G
  790.                 unlink(".\\DownLoad\\checkversion.txt");1 v1 X, s  V; X' U! C6 m9 u* J; w4 ~
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    6 c4 L. D8 P4 u3 o% ^7 X! u- d' M
  792.                 {8 d: N6 N; Z1 p
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    " ~6 N2 C7 c8 k* u0 Y# v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    . X7 }( r2 W( v
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    1 h2 H, n/ R- t; e% R* k
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" K5 o7 q; t1 F/ ~$ Z% Y3 u" n
  797. ; `$ R6 k3 ?- |- u
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - r: _& O9 [: \, O( x' [
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");# p4 e) f% j) K" w) A& H* G+ A
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");( G# P: M9 e, E- |1 I& [
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' k/ q/ b3 T  o  t! r
  802.                 }3 u( _- j2 a+ p$ l4 ^& _& c
  803.                 dwStartUpSteps=5;) a1 E/ j* U2 V& Y9 d
  804.               }) l: ~! {+ J3 w4 U; V& K: X4 l
  805.             }
    ! T. Q, G+ W0 k
  806.             else# u7 p& k7 A+ Z) a2 i
  807.             {
    & U8 J2 `# X) k) ?: B& A
  808.               unlink(".\\DownLoad\\checkversion.txt");
    / Z, Y9 T7 e/ r) F( S- o& y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    1 l. Q6 o6 @, K( F# ~
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 G2 F; k4 _* }, L8 K4 I8 D
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");- Z6 e9 \6 Y4 w. L
  812. $ y& Q2 u: y$ G* o; R2 s  c& v7 o. o' a
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ j& U2 @1 x) I9 r6 Y6 \( \* T
  814.               dwStartUpSteps=99;9 V* ]7 C! d) H! i
  815.               bFinishUpdated=TRUE;
    $ ?5 `0 ^  L9 L& P0 A6 F
  816.               bCanUpdate=TRUE;
    + {, ]3 [# r+ ^+ P9 E, z  N' @
  817.             }
    * D5 a  g' n: D* S) y
  818.           }( a) i4 D1 z- r' @% D0 x
  819.           else
    , G$ t$ F$ F  q1 x
  820.           {
    . j" N& m! a" b7 S
  821.             if(!Dn.Connected())
    " ?2 i, e. n, L/ ^
  822.             {
    2 s" ?! M# |3 }! ?$ V4 `
  823.               bFirstUpdate=TRUE;5 N( T" V+ k7 M/ {
  824.               dwTotalFiles=1;
    - A! u& L2 p8 s9 }
  825.               dwDownLoaded=0;% Q0 b, Q$ e* D. L& ^/ [4 p* [
  826.               bSilentStep=FALSE;
    7 r# E  {+ w- f0 S) y
  827.               bCompressed=TRUE;
    0 H4 }1 y) T4 [: c( [0 E9 b1 s
  828.               strExtLocal=".\\DownLoad\";1 E! O' O3 r. J9 O- Z
  829.               strFullName="update.txt";- x% y, ]! S- d( o4 x
  830.               dwProgramState=AP_CONNECT;! n5 i' X. b2 A/ F( V& ^& ~# T
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ; J- K2 D( }' ^0 i* }
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 O& o9 c+ i2 \* V% h! C& y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");6 K& M6 ?  P% U' p5 z4 a0 s
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  u, ?$ Y5 D/ l. q
  835.               unlink(".\\DownLoad\\checkversion.txt");
    * n' B4 p1 a9 g( C0 s) u
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    1 A3 W" M# \. F' m" m
  837.               {' _" Y" S, b8 S$ r" C  z0 N, D7 n
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ' _- S/ F) h8 I' Q0 @/ o% \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ; F6 I+ J! @9 `8 M; ^. t- f
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");+ ~; T7 b+ G7 }) x
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 f* S1 U9 a' r, x! y+ E
  842.                
    & f- v& U% V, l
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% S# x$ U1 \8 g8 h$ L
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      d+ L, l9 q. W* k2 G+ @* ~6 `
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    9 l5 D5 h1 B+ H, ~
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 @& g8 _, O4 F# P0 r% l5 k( y! I
  847.               }4 E# \4 c( y# J& e
  848.               dwStartUpSteps=5;
      E% g$ c; o( [5 a, O% C- D( c
  849.             }8 G8 F) h5 i9 P! l. U2 Y5 e5 d* z
  850.           }
    ; e6 a1 J, {- Y7 I3 n! N, l" S
  851.         }
    . `0 k2 q! u! h
  852.         else' F* q6 T+ v8 F) C
  853.         {
    4 Y5 T1 n0 m5 k
  854.           dwStartUpSteps=3;
    7 k: o& c+ G, W7 H6 @+ M
  855.         }- H  b$ W+ R5 [  i! F
  856.       }( V2 s6 B" o/ x! w0 P) z; t, Y
  857.       break;
    5 I/ n! i/ ~, m& o
  858.     case 5:
    * t6 w# P. ^- i# M7 T1 H6 E  g
  859.       {3 D; o- b1 k4 l5 S3 _
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    4 A5 P" Y& f7 ?5 e* v1 J
  861.         {
    ) R+ {, d5 G+ Q* U9 x
  862.           int opt_overwrite=1;# a7 C" V% |- S4 f
  863.           int opt_do_extract_withoutpath=0;4 h* b: S- u/ p% J$ _  d+ d- Q
  864.           unzFile uf=NULL;0 G2 m! y, O$ }+ {2 c

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部