CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
, @$ R$ E0 Y  ?$ N+ O* Y
  1. / RevApp.cpp : Defines the class behaviors for the application./ K( m. ]8 K7 y) p3 i: v
  2. //
    4 k& X6 m3 y9 u. X. d

  3. 1 H# e7 I7 d  U1 j
  4. #include "stdafx.h"
    2 S( j0 A+ W$ k

  5. % J* P& ~) n4 D" b" j3 x& `
  6. //#define UNICODE5 W; S4 N  P  H* l
  7. //#include <gdiplus.h>8 @- C6 Q" {1 z8 F
  8. //using namespace Gdiplus;
    6 S) w. n% @' d4 _' v
  9. , h' {9 z+ k* q6 J  s1 B6 ]! `
  10. #include "RevApp.h". ]- D- g. {$ t, j, @5 ]' G
  11. #include "RevAppDlg.h"# w- S. C9 S/ q% ]: p2 M+ [
  12. 6 x& n% L9 R$ |! W6 T% Q7 A
  13. #pragma warning(disable:4786)* h' }5 ^3 Z* h5 o# r0 w8 f
  14. #include <map>
    , Z4 r% y0 G' {+ b, D9 v# w# [
  15. #include <list>' p' H, l3 \* J4 L3 g
  16. #include <direct.h>
    4 O# ^8 ]1 f7 \9 v4 N, l
  17. + d2 s% f: p( a( w, F* T
  18. #ifdef _DEBUG
    1 ]$ s9 X4 p1 f( W8 E, N2 O: L
  19. #define new DEBUG_NEW+ L  b4 J/ \: `0 X2 X# b
  20. #undef THIS_FILE
      v7 n7 s* Q/ o# X
  21. static char THIS_FILE[] = __FILE__;! s. R3 y, t3 j. J3 _' @1 g
  22. #endif
    ) c2 R3 G' g, Y2 o) `8 C
  23. #include "SkinResDef.h"& K# L' I+ Y1 ]: U& C& m/ r; A
  24. #include "ChangeBG.h"' h2 `1 g; k& H( _; {$ q: k
  25. #include "AFXINET.H"/ d: Y7 L! ~$ R2 a1 \
  26. 9 g: \& O1 M; m- P; i
  27. #define TRADITIONAL_CHINESE 0
    6 V; l* U; Q3 G/ X# C4 o" {
  28. #define SIMPLIFY_CHINESE 1
    9 y: h0 W: {' s3 e/ w0 _  V
  29. #define ENGLISH 2$ R8 l& c( g+ T4 |
  30. int m_iLanguage = ENGLISH;$ l  k1 {8 R( [* X& g, x1 G
  31. /////////////////////////////////////////////////////////////////////////////
    5 t+ W7 H; X' c$ u) Z
  32. // CRevAppApp! b, M# A3 f! a5 g) F. e* g

  33. ! s& Z& z4 n& E- W8 Y' m' q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)  ?1 A5 H1 F# a8 i, F
  35.         //{{AFX_MSG_MAP(CRevAppApp)  A; q, P+ Q& Q$ l8 Y, ^( g
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.7 ~/ {% G2 S. r9 S& E
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!! |) |6 @8 Y# n  j5 w
  38.         //}}AFX_MSG2 ?& L$ X% f# v% j
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)( G' {" i$ o5 x
  40. END_MESSAGE_MAP()
      ^) U9 J/ ~. G3 m

  41. $ u# h' v" V' l1 U. G& w
  42. /////////////////////////////////////////////////////////////////////////////
    + j+ }& q0 Q% b( D* E+ G$ O
  43. // CRevAppApp construction
    3 \: [" o1 L# [/ D4 }( K

  44. ! Y7 S& g$ G* _8 E& U
  45. CRevAppApp::CRevAppApp(): o0 a' ?5 d9 {: n5 d# f. q3 i5 Y
  46. {
    2 h3 R& R' M. o$ p- C
  47.         // TODO: add construction code here,
    5 |" c1 b) H9 ]( V
  48.         // Place all significant initialization in InitInstance& K  i9 Z: q* w* c& V
  49.   bDisplayIsBig5=FALSE;; }4 @7 {2 Z' Z5 b2 z
  50.   bRestartUpdater=FALSE;7 T) E) k' r0 i
  51.   bFinishUpdated=FALSE;3 H* [  G" x( O1 ^- C
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;' E: T* }! I) u! Q+ }+ D
  53.   InitChangeDataBig52GBKS();
      f6 H" ?1 Y  h; d% O
  54.   InitChangeDataGBKS2Big5();4 D; [" k9 }: _# E. {! e; s& U
  55.         //
    , @: f# _" s5 f  ?- O7 R6 a
  56.         bClickRunExe = FALSE;
    4 k4 c4 a% }) u) E; P
  57.         //
    . y+ ~/ }* y! o4 k* V/ y8 W
  58. }( s( @. m; W- z/ `( Z

  59. 5 S: |% M1 w4 F, @% l% j
  60. CRevAppApp::~CRevAppApp()
    ' y* k. L, V5 X  h; w6 t$ N4 ^
  61. {& f: }" U9 S0 D. [3 j* v6 A* R
  62.         // TODO: add construction code here,
    " ~* [  E. _/ G5 C3 l- f  d
  63.         // Place all significant initialization in InitInstance
    ; e8 n& U& d; _
  64.   EndChangeData();
    ' [; m5 U" o! X7 t  r0 D' d
  65. }
    * v" N' r8 `1 z, r7 s
  66. 8 H4 |6 B/ c# d
  67. /////////////////////////////////////////////////////////////////////////////# E' D- [# g2 B2 |: z
  68. // The one and only CRevAppApp object& u) R" q4 m$ @- ^- M! f

  69. $ K$ u( H& f, k
  70. CRevAppApp theApp;
    4 S; D" ^  Z- ^* E# R$ B4 O2 q

  71. & h8 V% D: ]: J: a! l1 e5 E2 V2 ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    4 G7 K: P# r* [4 v) i) s
  73. {
    1 @) x6 N7 s5 B" ]/ I
  74.   int iEOF=0;5 l- g6 l$ X8 w7 Q3 p5 a+ `; r
  75.   char szTempName[MAX_PATH];( _$ d- h( ~- N" y
  76.   *szFileName=0;
    : q0 n, f- r8 e" W9 A: J" S
  77.   iEOF=fscanf(fp,"%s",szTempName);' q/ X3 n# n; c/ A
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    9 `/ u: x+ L4 P: o/ d+ p
  79.   {
    7 X, m# g" Y) B- I
  80.     strcpy(szFileName,&szTempName[1]);% v- j' O5 z7 q/ ?( L1 w) \% I& U- Q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)3 l5 m& \$ O8 W4 `
  82.     {
    ; T& F2 C3 c: S+ R  w/ [# M, U: w
  83.       iEOF=fscanf(fp,"%s",szTempName);/ w' W" K) Q; P* Y
  84.       strcat(szFileName," ");
    : L/ o1 J* `  y/ u2 ?3 _8 G
  85.       strcat(szFileName,szTempName);
    ! a& e1 q% r& v: ]: {
  86.     }
    / v$ }+ I4 e, Z8 ^  C
  87.     if(strlen(szFileName)>=1)8 L- d0 ?* l# g8 Z% ^  C" h
  88.     {
    " e% I- U/ _" j" S" U: H8 z' a
  89.       szFileName[strlen(szFileName)-1]=0;' Z' N5 J0 X' A% B9 E, i
  90.     }
    ; `: L  o0 P- `& r+ H# e$ U
  91.   }
    0 z+ x8 }. |9 w0 t& \% }' H
  92.   return szFileName;
    ' ^4 I) w9 E; y. I% w
  93. }3 K& V2 }3 O9 ]6 }# e" z% q

  94. 5 \! C; q9 V% W" U* E) I, t# V% J
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    : N7 b' a! `8 O' P1 _0 w4 g
  96. {
    9 _6 m$ r( [) z( \' G  ^
  97.   FILE *fp;
    & b" C" n( F1 q* X7 o
  98.   char *key=NULL;% G. z9 h  J/ P+ Q
  99.   char version[MAX_PATH];# }; y5 s5 X. H' d. c% ~7 }1 j
  100.   LPUPDATEFILE file,olds;% C' u' m. u" G' r
  101.   std::map<CString,LPUPDATEFILE>::iterator p;# H) \) A4 P9 g/ [

  102. + h% i6 ^, Y+ ?6 A: [( P# L  Y
  103.   UpdateList.clear();2 z! Z; }1 u" E, v. ^
  104.   UpdateFile.clear();
    ' Y5 `$ k$ ^* [
  105.   if(GetFileAttributes(filename)==-1) return false;( B+ h* Q6 o( W0 u9 j* Z* H/ g8 l
  106.   if(!(fp=fopen(filename,"r"))) return false;
    . \0 V$ m7 B& ~8 W. y7 c' d: Y
  107.   fscanf(fp,"%s",version);
    $ W6 n2 e4 a+ N% I! s
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ! V! P7 ^$ q$ _% a
  109.   while(fscanf(fp,"%s",version)!=EOF)9 k$ E+ E' v0 u: f
  110.   {
    9 Y3 W* L$ b1 i- a; T3 M, g
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 P% x7 D% _, |6 ~( S
  112.     fscanf(fp,"%s",file->path);
    6 E6 W) I9 B! i; k$ e
  113.     ReadFileNames(fp,file->file);
    0 x; O& D; U$ z, ?, o
  114.     strcpy(file->full,".");
    ; Q9 {9 A0 x2 r( l7 w+ b! B
  115.     strcat(file->full,file->path);6 N% |* L/ P% C2 [
  116.     strcat(file->full,file->file);) C& @1 H0 R1 V+ R. X  x
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- M  G2 |; X' j" U; k
  118.     {
    2 c7 E9 G+ s5 G. V
  119.       file->vers=(float)atof(version);+ ?# q" a+ S4 h
  120.       UpdateList.push_back(file->full);
    " W, a' k  L$ I  T
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));4 b7 n/ u$ I7 L8 c! z, I* |( r" O
  122.     }9 ?; F3 F* \! l7 x& b0 Z' v  k0 ~
  123.     else
    $ A$ ]/ J  d/ G4 v0 y6 K& ~) x
  124.     {/ d3 r+ A# A4 J; u" j
  125.       olds=(*p).second;5 T3 h. r6 B; e9 s, b. Z
  126.       if(olds->vers<(float)atof(version))# e& @$ i* S: j, u. \$ U$ S0 U
  127.       {+ T  l* ?4 U8 B9 c6 K8 d+ ?
  128.         olds->vers=(float)atof(version);+ C! L. h6 M/ r5 G0 V5 Z- V
  129.       }2 K# M' C+ Y+ @
  130.       free(file);1 Z5 v7 ^7 x* v) j
  131.     }6 A2 X# e- o6 h" k/ R6 ]
  132.   }
    % @% O, u+ X, P! ~# x
  133.   fclose(fp);) n3 w! A7 [+ f4 H
  134.   return true;
    2 u" E9 g  p  V5 i: O8 X
  135. }( Y  D8 T. S2 h
  136. # }9 @6 C# J* |2 _8 l1 s3 ]9 T" t2 R
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath). h) n# {) q2 [* l: S5 m
  138. {& |- l8 P2 @$ T
  139.   TCHAR  szFull[MAX_PATH];% D1 w+ B2 f, n
  140.   TCHAR *token,*inter;
    & e6 O3 K0 o* O3 I# T8 E& w
  141.   *szPath=0;
    + l' `1 W$ y1 ?
  142.   strcpy(szFull,szFullPath);. e6 {0 x: T; e- L& W5 H
  143.   token=strtok(szFull,"\\/");
    5 e, T1 [: C  V0 U
  144.   inter=token;
    " K! _* B0 V1 [" U
  145.   while(token=strtok(NULL,"\\/"))
    2 d/ e; J) J$ u6 v
  146.   {- I& I  [' L7 |6 y( m2 p* c
  147.     strcat(szPath,inter);
    5 J  ~2 |% V) ?# Z8 Y0 l
  148.     strcat(szPath,"\");& u  @2 @  q7 x5 f" D
  149.     inter=token;4 R, B  _4 E$ ^) F5 s4 j; r1 ^" L
  150.   }+ _5 r2 l( k2 {0 }3 ^
  151.   return strlen(szPath);
    , m8 P! l8 x# I
  152. }: [0 M3 f5 D  Q/ n2 F, S

  153. 8 o) @  S, k3 N
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)) n( i3 Q. D$ E7 h" |8 v
  155. {3 h# A. E' P' D# j
  156.   DWORD attrib=GetFileAttributes(Target);
    - L! _: V' V* E$ _" z: Z# ^7 a* H+ @: U
  157.   if(attrib!=-1)+ N  E& o6 ^8 S  o8 z* E
  158.   {" P6 @; }+ k$ m/ w6 `- P
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))) X" _' x5 `/ N4 t1 D
  160.     {# Q' p' Z2 L9 L3 \
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    / l% D1 \. A: x# _. e
  162.       SetFileAttributes(Target,attrib);, v5 B' \  k" z7 X+ T! {9 w
  163.     }" t% }% O3 J8 p  @0 B. B' \4 u$ N
  164.   }
    % o+ _" p; r3 v" ^# J0 m0 b+ Q+ i
  165.   CopyFile(Source,Target,Erase);' D/ ~6 V3 x5 W, x
  166. }0 A5 p: q! _- U2 F
  167. , K" S; N3 T3 U; C( Q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    * |4 x4 d: A3 e8 T- F
  169. {
    ) f  M/ l" Q; Y9 N! J: W9 }
  170.      FILE *fp;
    , C  [+ @# Z* g  r/ B% H' T7 e8 h1 C  P
  171.      char  szBuffer[8192];) H) ~. I. \" Q9 y7 \
  172.   va_list  argptr;$ q. i; O$ e3 C
  173. : i3 ~$ n! X( }& V
  174.         va_start(argptr,message);& b5 ^+ F1 ?9 b) J8 D; n; f
  175.         vsprintf(szBuffer,message,argptr);; Z" j) X- V$ T
  176.         va_end(argptr);8 A0 Y8 Z( H2 w/ w5 R1 G* c) O
  177.   fp=fopen(FileName,"a");. S0 k: e) A, j
  178.   if(fp)9 |* @% a* C; U, H
  179.   {9 w. @( Y* B" t  o% d5 K+ `
  180.     fprintf(fp,szBuffer);
    * M! {- O6 q6 ]; _- [: v: q3 c0 u
  181.     fclose(fp);
    , w6 g. t3 X. _; e; |2 t
  182.           _flushall();/ y6 Z2 |; l  a
  183.   }
    . a; T! g6 i4 U1 \& ]+ G2 ?) \
  184. }% U0 \6 |, \' O
  185. # y& K. M9 M& F5 d4 `* Q& P
  186. BOOL CRevAppApp::Fclearf(char *FileName)& _) n. \$ f3 p/ n
  187. {$ B2 Z: Z) e% N% O% R6 c) R
  188.      FILE *fp;
    ; d! }" \6 o+ R# B  X
  189.     DWORD  attrib;
    0 v# L! ?0 Q& n. z+ V
  190.   attrib=GetFileAttributes(FileName);
    4 x9 U  p9 _! }1 D: I/ i- F
  191.   if(attrib!=-1)
      |6 K& r, l$ a/ u6 C. d8 Q
  192.   {
    ' ^2 p6 x5 E* I! \- b9 o
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    7 W  U, ?4 d* v+ g( |
  194.     if(!SetFileAttributes(FileName,attrib))
    $ b0 p: ?2 l3 p. C# l/ a
  195.     {: s" l' i) {9 ]2 S  O
  196.       return FALSE;
    % o. I4 V9 |. j
  197.     }
    ! Z7 ]2 S: c3 b; C  g
  198.   }
    , Y2 J; ?! K( |# u; Q3 x  Y
  199.   fp=fopen(FileName,"wb");
    # ^! `8 h6 R! A, P/ W# A/ A0 U* c
  200.   if(fp)
    " i, z7 W" [/ d# x
  201.   {0 |0 v' b5 ~! S$ P& w. L3 Z! C! y
  202.     fclose(fp);9 ~" b! V/ x' t# J: U1 x
  203.   }4 U5 F( O0 S: y1 T+ e" v% R0 v
  204.   return TRUE;
    1 o( w6 [4 K! b" y% w5 q
  205. }
    ' T& N% U5 D+ E" f4 W
  206. # B8 k9 K/ {$ i
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ' R- l  Z1 x( n/ Y) _
  208. {
    + f1 \0 t* L) L+ J
  209.   char filename[MAX_PATH];4 j( T# }. ]- M) ]7 R- T
  210.   LPUPDATEFILE file,olds;* R& S' M1 Q9 V, y) {6 z
  211.   std::map<int,CString>::iterator i;
    . n, T9 m- i( O* h6 C8 {
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 s  q! C$ ]; v( b
  213.   std::list<CString>::iterator l;
    5 n" m6 y. o8 r( g0 ]

  214. 3 ~- c1 V5 _9 x6 U/ x
  215.   if(bFirstUpdate)0 h8 G4 K; _+ C; T7 q/ E0 W  Q8 G- A
  216.   {
    1 T0 x1 _8 L( H: O  f
  217.     dwCurrFile=0;: [  r. i: p9 _, t3 `: i7 i( V
  218.     bFirstUpdate=FALSE;
    4 W+ k/ P7 X( q; \
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    * F9 ~4 w5 i, f. }/ u7 H
  220.     {" w, H; e; v" }4 k5 }
  221.       dwTotalFiles=UpdateLocal.size();; k, M4 Q' S0 n. H+ L1 r9 S: O8 r7 H
  222.       dwDownLoaded=0;& b- y% A; v! K: Q0 ]2 K
  223.       bSilentStep=FALSE;
    0 b9 a) F' \/ G! s. @* l" H* h( }
  224.       bCompressed=TRUE;
    6 D. C( D% d9 \( i3 C; P
  225.       strExtLocal.Empty();7 e1 _/ |/ S  s, d% o; _0 p8 q
  226.       strFullName=(*i).second;! E7 }/ P/ i- m) X2 P# k
  227.       dwProgramState=AP_CONNECT;
    $ h" d6 {2 r0 C/ _: D. [3 d
  228.       return TRUE;
    / o5 W  e0 X6 d0 g+ @9 W
  229.     }) L# k5 v8 J4 P! W
  230.   }
    , G8 ]) u, s; I* O  d# S0 M
  231.   else if(bRestartUpdater==FALSE)+ B" U. a" C) V' h# }$ C# S
  232.   {% ]- r7 o" r, Q1 F% L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())  L4 h, z( p1 p! C7 K$ ?, n
  234.     {
    0 F. L4 |: B* J, V/ Q) g, f. r+ v
  235.       file=(*p).second;
    % g9 u8 ^# v  f9 t; {7 n" J+ C; N* f
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())6 `# j( ^5 S/ f. [
  237.       {4 o/ f2 k5 g, E
  238.         olds=(*p).second;
    & u8 B7 [6 b9 {; O: T/ V0 f- D/ ~! @
  239.         olds->vers=file->vers;
    # j3 P& y1 V) r' B$ _
  240.       }+ |" G) {" C* p$ g, w) @
  241.       else
    . j( `+ r; L3 L9 a1 r
  242.       {5 E. p1 o; ]* K- A+ v7 w$ m
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! `. }9 @0 T- K9 M8 e) Q" O
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    " }4 k4 _0 N9 c% N
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));/ ]  q8 \: Q9 d: L
  246.       }7 N' i  i9 Y4 m) R
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- w$ @4 j: W9 d6 `/ [, k7 d' u
  248.       sprintf(filename,"(%s)",file->file);4 [+ s- }" I- {3 _  e0 P
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' C/ \5 o) q2 r" L% c2 ]& a
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    9 I) _9 L% n- s$ Z; f
  251.     }6 t# r% y# \( |$ h% X3 t
  252.     dwCurrFile++;% f. z; W2 j% D+ p/ A9 f- l
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ! j; b* V$ H1 b7 z
  254.     {2 x) J" K: m' h  \* i4 L% b0 G
  255.       bSilentStep=FALSE;
    & f0 `. D3 ~# H% O. ^
  256.       bCompressed=TRUE;' f8 b+ r0 m5 X( @# {+ [/ Y8 }
  257.       strExtLocal.Empty();
    : N8 V% s9 j6 t* o+ D
  258.       strFullName=(*i).second;
    . ^" e: Z( s" ~, i8 `8 k
  259.       dwProgramState=AP_CONNECT;5 u2 ]* G* ^) ^' w" e
  260.       return TRUE;
    7 P$ g+ j$ J* o# L: w
  261.     }
    , w' d% }# q0 d( }0 ^& h) x4 c9 `  }
  262.     if(!bRestartUpdater)8 u  v0 n! l: u# s( D. m* o
  263.     {4 o$ a* Q$ j) j# J6 Z
  264.       int iCurrSize,iFileSize;
    8 ?6 b; x. p* t2 r, m1 Q9 Z: ?
  265.       iCurrSize=0;
    ! o+ V" W9 M+ g; ?- Q5 |; ~
  266.       iFileSize=UpdateList2.size();* H- K0 u" Q7 a$ L1 `
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");8 `1 {" P  v4 d0 v2 S3 N" c. G
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");0 [+ K5 {6 m; }5 u
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    $ N" t( z" k$ |) l/ C1 T' `
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& N* h0 e& h$ d+ E6 O/ u
  271.       Fclearf(".\\update.dat");& }, z% `# h; u
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ; k/ M! X9 v& G- o# t
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)* O( P  ^4 X5 b# l2 J
  274.       {
    7 Y$ {6 Q; N: E. }9 d5 s
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    5 c* P" N1 E+ o% F8 L* E0 H# Q6 u
  276.         {
    " p) O8 |3 [; U0 F  B
  277.           file=(*p).second;% z2 Q- x6 @) c
  278.           sprintf(filename,"(%s)",file->file);* U# B/ h1 R# w; A
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);" G5 w  o6 I1 i) u& }
  280.           iCurrSize++;
    ) \3 {. m: k6 o5 Y3 i" Z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));9 I# b% G3 e5 Z
  282.         }+ m; V( W& Z' `/ x
  283.       }+ x( Y$ S% u- R: D2 Y
  284.       unlink(".\\update.txt");
      j7 ?1 c# j% J3 _
  285.       unlink(".\\update.tmp");
    , T' x  d! O0 }- O" U0 {
  286.       Fclearf(".\\checkversion.dat");
    + h  m0 y: C# T5 \! n0 w
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);; n# Q# \* _: x' b$ i
  288.       if(UpdateLocal.size())3 J. N$ E) T) F4 e$ X. d
  289.       {# _4 Y' s( ?- g5 [: T1 b5 S  p1 O' Q
  290.         UpdateLocal.clear();8 Z* r  a3 `9 J$ L% @
  291.       }
    3 i5 u8 c: z2 \, S9 g- x
  292.       if(UpdateFile3.size())
    # t% L+ c! C6 \4 j2 }3 `, {
  293.       {
    / V" Q  ~- F5 Q  u
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ @# [& T4 {) H
  295.         {
    * m* m3 u; \! q, a& G# w
  296.           file=(*p).second;
    1 {' x2 [3 j; P5 y9 E# }
  297.           free(file);$ j6 w' I3 O. ?9 h0 {# L! v4 H
  298.         }
    9 J) p+ S4 a6 w9 x: i; y; Y
  299.         UpdateFile3.clear();$ V  z8 ]$ ^' m& s% v
  300.         UpdateList3.clear();1 p9 X/ A6 A3 o9 p) T
  301.       }/ F# D& N9 |- T5 j
  302.       if(UpdateFile2.size())
    5 {3 |8 i. n& }. w  n
  303.       {
    $ L: E8 p0 M+ n$ x* S) z5 c3 T
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * U5 y( j7 M. x+ s3 p
  305.         {2 G3 m" H1 ?4 ^* |! c- \
  306.           file=(*p).second;' z/ u2 l6 g5 d2 x/ g# L4 F
  307.           free(file);* K, c: b; g5 G8 |$ u1 e
  308.         }
    / ~3 q. C( v! y( S5 x$ W9 B
  309.         UpdateFile2.clear();
    " h3 {& q' P& f2 Q6 P: k& F# a
  310.         UpdateList2.clear();
    : W9 U8 C* Z" N2 h
  311.       }; K5 u  X2 R) }3 U5 Q1 f
  312.       if(UpdateFile1.size())& O+ C8 }8 d& A  y) {, n# n5 X: f% |, K
  313.       {4 }1 H/ o  `; v% V0 q
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 a2 Y6 z- r. u
  315.         {6 B# l* X9 N1 I3 F; c
  316.           file=(*p).second;6 t* O# R2 P4 g" ?" H" L
  317.           free(file);8 e  n* {' T# K  a2 l: @4 J
  318.         }
      w1 C, ^( E  L/ }, W) u  K
  319.         UpdateFile1.clear();, y% S/ U9 ]# B: X1 O/ }% @
  320.         UpdateList1.clear();
    8 b) c% Z% \. e4 u2 ^9 v
  321.       }7 q  }8 B. H* k/ o+ C
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));5 t% Z- h$ y0 i9 r4 }; b, @- x
  323.     }
    / I% d" e5 C$ ^8 j, c9 ?1 E/ O
  324.   }
    4 t! q9 A0 b! ^8 C
  325.   return FALSE;
    # N1 H" r; L9 r+ X! y
  326. }  M  e! s2 L: U8 ~! L( I0 p
  327.   R1 V0 H7 }" h  x* w- w/ R+ R
  328. void CRevAppApp::ClearAll(void)
    ) a* E) z  f& P4 G9 y: z
  329. {
      a1 U; R# ~2 J
  330.   LPUPDATEFILE file;# ]4 d4 w2 n, F- j' t4 ^" x
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 @2 \+ V: d* ~
  332. ; c" k; E0 A" A( z
  333.   if(UpdateLocal.size())
    . y4 b! Z6 y# O. J6 K1 z% M
  334.   {
    ; H) T/ j/ z3 J: A. Q' F, ]
  335.     UpdateLocal.clear();
    7 I4 W4 V( I. ]5 a/ I
  336.   }
    " ~6 f" e4 u" H* t" ?7 ]! {
  337.   if(UpdateFile3.size())
    ! q( {3 z; P& g- R2 Z6 H/ p" k6 {
  338.   {3 H) f2 A. }! G1 ^
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ j$ y* {5 v9 [/ a# O3 U/ A+ `
  340.     {
    ( n$ B$ r7 ?8 j" G. x& Y+ V
  341.       file=(*p).second;8 |7 @! W( U8 {' E
  342.       free(file);/ t8 Y1 ^" n5 P8 c6 E' ]; @
  343.     }
      @2 e. r( a+ z: x4 l! a- ?
  344.     UpdateFile3.clear();1 H4 v9 a& [. b/ p
  345.     UpdateList3.clear();
    2 K; _9 a) X0 \; Q
  346.   }
    + v; ^$ v( K7 g: D/ ?% c
  347.   if(UpdateFile2.size())/ I0 s2 k- G6 f" z/ Y
  348.   {
    + _" t; H) e, L  e1 N
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 H) ]: d/ j- k* c# O$ X6 Z
  350.     {4 F  E$ x6 A, a5 H' A
  351.       file=(*p).second;8 P8 v  ?' q  |7 m: }
  352.       free(file);3 y# C2 j$ k% ^& x
  353.     }
    - s- ^8 C5 ?3 j: H7 @6 b8 k1 b1 j
  354.     UpdateFile2.clear();
    : y- f9 n0 a% F0 W4 s' h
  355.     UpdateList2.clear();
    + ~- ~: L" S, K  X
  356.   }8 N# G4 h9 d$ h: }6 R
  357.   if(UpdateFile1.size())
    % h! A9 C2 b1 ?' {
  358.   {+ L4 k/ P2 P! g, d$ n
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    4 Q4 U! f+ ~, f. C
  360.     {0 a) a, U7 N1 k
  361.       file=(*p).second;
    1 N, S/ ^. B* {2 L) q
  362.       free(file);. w# P8 ]! ?4 l  h# }; |
  363.     }- L- r; A5 ~( M4 _* P) T
  364.     UpdateFile1.clear();
    . r* x4 r5 P2 s
  365.     UpdateList1.clear();. F9 \! L3 T2 a, N% |2 `
  366.   }) }. j; I. y( P
  367. }  ' ?* g0 S2 Q. u7 [* g6 g
  368.   
    $ R8 b' S' ]5 B5 _
  369. BOOL CRevAppApp::CheckLocalVersion(void). b+ I! }5 m. C, w# y3 m( V
  370. {
    + h* \' p. m1 J8 h9 h
  371.   int c;
    * ]$ w" A- Q+ e% P
  372.   LPUPDATEFILE file1,file2;7 e' x, M: T6 n
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    9 S; e( [9 K- _8 h
  374.   std::list<CString>::iterator l;
    ) J5 Z, d/ I% g% O4 F
  375. , N# x5 X# k! ~  V. _- ~7 y
  376.   UpdateLocal.clear();
    9 ]' U# t) [, G& j
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    / F& a+ z) r4 A4 }
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    2 y8 K% ~5 K) Z' c
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);7 x, J. o( x) T, S; F& X2 l
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    4 i+ i* b! l# D. v
  381.   if(UpdateFile3.size()): r3 A: m3 ^6 M
  382.   {
    * E! b$ a4 w8 D( x2 n% E
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    , a) G9 A3 f. X1 K# s0 H4 r
  384.     {
    ( Q! p! F5 {, x8 R" `: m" {2 S
  385.       file2=(LPUPDATEFILE)(*i).second;
    7 j5 x9 r7 `" {# }4 R4 B$ Y& v+ U
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 N9 ]- y' |2 `3 [
  387.       {
    & F+ ]# x. l2 W0 I. Y" k) n6 V+ c
  388.         file1=(LPUPDATEFILE)(*p).second;; Q+ ^4 R& k4 i
  389.         file1->vers=file2->vers;
      {" V% i3 f) g+ _& V
  390.       }
    * O2 u6 b3 k* F7 e) ~. \. P4 T
  391.       else
    ! P4 `% x+ H8 l7 ]6 T4 Y
  392.       {
    + H! N9 w" C) g* C9 R
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# \- f! T( V: ~
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    . C# }' m6 V& j% }6 R
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));: A# [. o$ y+ a1 \
  396.       }0 Q2 L, j. f) c: _
  397.     }: a$ G! z3 I- v1 r
  398.   }
    ' E: C3 H! a! z9 U7 q
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) O+ Y2 P" H- w/ G  {8 B; K
  400.   {
    ( x+ ]6 Q0 a% ^$ o9 Q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    6 l, l" d7 S% i' s; N$ i
  402.     {4 `2 G3 i& ^( A' ?4 ]: U
  403.       file2=(LPUPDATEFILE)(*i).second;0 @, z; p, N7 V  H0 U4 r
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / g8 Z7 @0 {+ i6 a! t
  405.       {
    ) x! H: J6 ^+ h; ]! U2 m
  406.         file1=(LPUPDATEFILE)(*p).second;
    # M/ c- Y/ ~- _. n8 U7 S
  407.         if(file1->vers!=file2->vers)
    3 q8 k/ \& O2 {, r
  408.         {
    ) L% y% `8 {1 ~
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' X2 ~" l# E, E; W* W
  410.           c++;+ s+ E% D9 X9 E. J% v: ]
  411.         }3 h, s4 U6 ]; O- O( P; s2 H
  412.       }- a3 A3 l  I( t( l3 P0 S) H
  413.       else9 W& S( ]5 }2 o! z$ b* N% I- a
  414.       {
    7 U9 i& q! K5 F, }4 w- [
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * R2 e1 h2 v% f, d4 W
  416.         c++;
    ( j0 _) W7 Z2 @" z# j7 |
  417.       }, `: V1 x' L: X' Q6 Z0 _* @
  418.     }/ p- W6 @; E9 t+ L" C
  419.   }
    / q6 W6 m. s: ?5 Q, f0 N. x! n
  420.   unlink(".\\DownLoad\\update.txt");
    5 H& l7 w/ a" B9 c
  421.   if(UpdateLocal.size()) return TRUE;
    ' m4 c& y; U3 U& A6 ^1 Y
  422.   else                   return FALSE;
      g5 }; k3 J$ v6 n- _  J$ x/ S0 a- M. a
  423. }- a2 R" ]" m; v( Z0 H
  424. ( W& \6 y/ n) I, l
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    $ B5 y9 t8 z3 b7 u' v6 ~4 _7 Z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    6 M3 p$ Y: H2 ?1 R7 r" \

  427. 4 Z+ W5 @* d5 i+ H

  428. 9 Q: K, I0 E& D0 Y* X. }
  429. : Y% b1 A8 T9 R/ I' K
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; A5 N8 @9 e. W2 n+ Z
  431. {
    6 n# E  E! n9 O7 x6 ]- m8 I) `0 ^. S
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    & L  Z$ i1 }. j2 b: f
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; U8 @2 l" f! S6 j
  434.   {
    6 ?( d9 |! ]6 \: c9 N
  435.     char szLanguage[50];
    # W5 m( U9 k7 B8 l+ J! {. ?
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 I' Q$ H4 R& I0 v/ H
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 \5 a- r: l& A) |9 P+ V
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 O0 J& p+ ?9 c3 S4 s# Q# ~; |
  439.     else                                   m_iLanguage=ENGLISH;
    ' W+ W, l+ ~( m  U7 R: `& h
  440.     char szRegister[100];
    8 i3 t( o2 ^) x$ }
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) j: [, j5 X# j3 t
  442.     strRegsName=szRegister;
    7 A' e/ d+ w8 A! o5 i
  443.     char szPatchURL[100];: O" y! Q) v* J  _- o. L  B0 J
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% L. E3 P% V6 {; O$ h: [# u' x# Z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ {+ w  Z9 T' t; q9 _
  446.   }6 v+ a$ M, z3 p  \, Z
  447.   else( s: w3 x7 k4 Q1 k' z
  448.   {& n, }" G5 o, I8 G3 l7 T, s$ j5 C" R
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 C: v  i" C' \( {; I
  450.     strRegsName=DEFAULT_REG_URL;, p$ s! C# R/ |' z( K' K
  451.   }
    2 c1 b9 u3 C# c/ m4 A8 l; V9 V/ t
  452.   if(GetFileAttributes("hosts.ini")!=-1)* W4 h: F! h8 A0 B4 N; W/ y$ C
  453.   {
    . y/ r6 j' }& v# J" B
  454.     char szIP[50];
    / `# ^5 _/ V$ B
  455.     char szDIR[300];
    . T  b# [1 z1 R! i5 C
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; Y' Z& X0 w5 L/ X6 P
  457.     {! B, v8 _2 r1 X
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");  @* v4 b! q, L' M( [1 U( E" I
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    * c* |( P" ^& ?! ]% h5 a
  460.       strHostName=szIP;
    ! H: j* S' p: P+ N
  461.       strHostPath.Format("/%s",szDIR);; B; [' U  u: Q/ Y
  462.     }6 m) i. H- N  ^; A' R' T
  463.     else1 v/ p6 T" |5 ^6 p
  464.     {
    1 c+ ]( Z3 z8 X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( _* F. ?. K9 A* V
  466.       {
    4 a$ F( {2 d6 r: T
  467.         char szLanguage[50];
    ' G% I( B: u3 l! l6 J: ]9 z& e: |
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; E/ U* ^# w- s# y& T: X" L- e
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    / V5 l2 g2 s: i
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) ^2 A/ o0 B( c/ ^" G3 v
  471.         else                                   m_iLanguage=ENGLISH;
    3 V6 b5 B) D  b9 z; P+ l% v
  472.         char szRegister[100];% r9 Q8 f# R3 f! o+ Y
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! s& C/ E% Y. a" ~( w
  474.         strRegsName=szRegister;1 G+ {; X5 M' w3 ]7 ?6 n
  475.         char szPatchURL[100];
    / M' S$ Y- ^2 c! J0 q! ~' R4 z
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 }$ v" }+ o/ {3 l# G
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + k2 F! I8 Z  h1 d" y
  478.       }! H/ m, f5 W5 ^* F" Z
  479.       else
    9 l1 E3 p2 X  V
  480.       {7 O; ^0 V/ S( Y4 J
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / a+ _2 J  R& Y) L/ d* ~
  482.         strRegsName=DEFAULT_REG_URL;1 B4 j3 b& z4 F, v) Q- W% g1 k
  483.       }: O8 F) ^9 v4 E# q. M
  484.     }& O% B) G- R4 r7 ?
  485.   }
    & d) y( R/ i1 G6 z
  486.   return true;
      T9 e1 D  }$ A9 T7 U
  487. }) d7 V& O; I! Z- E8 v7 A
  488. . o) Z+ Q. {( @& `2 H
  489. #include ".\ZLib\unzip.h"% B( \4 q) Z! n1 |( c# N
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);; e1 U$ M; l" U6 Q* p
  491. /////////////////////////////////////////////////////////////////////////////# ^* j% L' w8 D+ ?# g% F4 E
  492. // CRevAppApp initialization- Z' G( O! z; l! |; i' s

  493. ' B" r4 E6 z' m8 ^
  494. BOOL CRevAppApp::InitInstance()) C9 a: r4 O/ n3 t( u
  495. {
    ( M+ _+ F' ^+ c) ^+ y5 M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];  {, P+ Z! N2 z- M5 A5 A* r! Y
  497. : C* t9 B* R/ n$ h& d# m
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    6 e6 G, ?% {9 i) m1 o
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ; ?) Y9 p/ q$ [- w- h
  500.   {
    . P; N1 _- C$ ?+ n9 Y" D
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    6 D* T7 u! N9 u+ F4 D
  502.     GetPathFromFullPath(szPathTarget,szPathSource);* S* M1 v3 R  I8 T' L
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 E9 K; L6 a: a9 h$ s. l
  504.     {
    " N0 X2 \1 c2 m$ e; Y4 [1 P& A
  505.       strcpy(szPath,szPathTarget);
    & J, w8 J. d: J& `: ]. y! a
  506.       SetCurrentDirectory(szPath);
    9 @' W# Y. M# [* E0 |
  507.     }
    8 W% y' V# U0 J$ @5 g- J( w2 x9 B
  508.   }
    # m: o; `* U1 b- r" {3 \, A
  509. #ifdef _DEBUG
    + l) l* h4 d  [. _- [  U* L6 d
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) B6 d+ Y8 K. V* Q8 S! ]) j  a
  511. #else
    / e8 R! ]8 s* G, N$ ]1 y9 V- D. D
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    : c! D0 F5 a7 W1 W9 s
  513. #endif+ |: q0 q4 ]& ?4 X2 i
  514.   {; s, a+ C7 D: ]. Y) D/ a! f
  515.     char tempFileName[MAX_PATH];" {, W/ B. d0 Y* L0 t) w; g/ r
  516.     strcpy(tempFileName,szPathSource);9 E5 A! X! R% O* ?
  517.     tempFileName[strlen(szPathSource)-12]=0;
    & n3 M. X5 P1 W1 `& p8 s
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( g8 K( ^  k/ \+ C( J
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    / F' B/ l* B9 @; p* x* ?- D- Q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);- v" o1 G8 d, E; N/ r/ z
  521.     return TRUE;# h; {/ [: K$ T. |7 n" h
  522.   }
    ! t" D# t0 H' I6 o" q4 b
  523.   // Nuke 0118: Delete run.exe
    $ H7 n8 f/ D0 \
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    $ {, T; ?4 i- t9 F/ u! ~' z' n6 P
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");5 z* ]/ z5 b  w# U, J
  526.   if(!ReadCfgFile("Config.ini"))
    $ m0 Y- s" o& |7 l
  527.   {3 I! y6 {# c/ l
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
      r8 ?0 k/ D$ k
  529.     return TRUE;
    2 A. V( Q2 M# m! X
  530.   }: r! s" r/ f6 `! q3 Z, {6 E  t
  531.   HANDLE mutex;
    " |  k+ ]* L/ m/ P  p* P
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))0 ?$ _: K' E! z) r7 c
  533.   {
    & n7 J4 o, Z2 S
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    $ n9 z9 i: F& k; k0 _8 @8 C/ u
  535.     {
    0 Q( G' ~: R& h  o. u
  536.       CloseHandle(mutex);
    % k3 G8 k3 ?! ^
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    4 @  U5 i: [  V) G) h
  538.       return TRUE;3 |9 Z: O" N! w
  539.     }" U. l% s0 u; T' m/ A) {' W! G7 j
  540.   }  
    * |# ^# o/ i7 j
  541.   CloseHandle(mutex);9 P+ I1 ]0 T! U" k/ ~" Q& X- i. W* O! q5 s

  542. . |8 f& d$ X/ z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; R# y+ T; v# t+ v# C
  544. , E9 l; ?0 l. z( z
  545.         AfxEnableControlContainer();
    * `8 Y! G1 s- p, D
  546. 9 N) O& B7 K* B$ c% a
  547.   bCanUpdate=FALSE;
    4 ~! i7 c2 f/ s7 Z* v# }' J
  548.   dwStartUpSteps=1;
    2 l1 D4 _3 \: u! k8 ~0 E+ n
  549.   dwProgramState=AP_NOTHING;
    9 b# o! P$ W" z1 o- T, a
  550. - @) D: Z$ U4 P4 E% a+ W
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);% o# _6 O7 E" f; u- g
  552. 3 C% y. F; O" `# |. C  m5 E
  553.         // Standard initialization- V& r% ]2 X$ B: g: s
  554.         // If you are not using these features and wish to reduce the size& a# i# p: P0 Z  A% J
  555.         //  of your final executable, you should remove from the following  M9 @: Q( \/ `0 r- f$ a' p9 ~
  556.         //  the specific initialization routines you do not need.3 n/ K% g, s! p- d" M9 b

  557. * O8 [9 K" w- n5 G5 @
  558. #ifdef _AFXDLL0 h0 o/ _. Y6 a# L2 I2 Q- n
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ! i" g1 D+ I& c, G4 k* ^
  560. #else
    , w% n$ z6 `# [% q
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically3 K" G& ]0 U3 C/ c4 z4 W" i
  562. #endif; {: I. J6 K$ J! m+ k  \
  563. 6 s/ I$ j- ~  F, y
  564.   dlg=new CRevAppDlg;
    2 s0 h* e3 F1 m. E3 [
  565.   dlg->Create(IDD_REVAPP_DIALOG);9 q; T- q) Z' f6 |* x6 i$ f' C
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) m+ w$ n, V5 ?; o8 u; J
  567.   m_pMainWnd=dlg;/ {( i# I9 }6 d

  568. 0 s' j) `- r0 {7 K3 n/ G3 B
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    . U4 @8 ?% c+ }5 g

  570. ' P& ~. P; J! x8 ^
  571. //  GdiplusStartupInput gdiplusStartupInput;4 @4 Y+ ^; B# [" @- U- y
  572. //  ULONG_PTR gdiplusToken;, I& ]5 X! t  U; A4 w% ^# o
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    # N$ E% f0 h9 d4 Y+ u& p- Z
  574. 8 K$ M( g$ |2 {: ]6 v
  575. //        CRevAppDlg dlg;
    - N" b, p8 X, b+ T  u
  576. //        int nResponse = dlg.DoModal();: M7 \0 N# E* V7 C% F# r7 ?
  577. //        if (nResponse == IDOK)
    8 r9 k8 f: l- P- C4 l. M# u2 a% f
  578. //        {
    # |3 o5 }* _3 j; u' W2 F9 ]
  579. //                // TODO: Place code here to handle when the dialog is
    ) m" O) r4 M4 S+ ^& e
  580. //                //  dismissed with OK
    ! U, |+ h; [% U( S+ n0 {
  581. //        }3 o# C' M5 {- R8 }, @2 b
  582. //        else if (nResponse == IDCANCEL). y  o' `9 k" Z) ^( w
  583. //        {
    & R; H$ Q2 o$ W: V' H7 k
  584. //                // TODO: Place code here to handle when the dialog is
    5 M8 a9 S! h4 j
  585. //                //  dismissed with Cancel# d" ]) h  g  T1 Y( I, p+ ~' T( B, X
  586. //        }
    2 s& G: _- }7 V( |: g" G
  587. 9 K! y; F: L1 U  |; M
  588.         // Since the dialog has been closed, return FALSE so that we exit the% @# ]; q: S& k& O& [5 L
  589.         //  application, rather than start the application's message pump.7 u6 J9 o9 r+ q# p* J
  590.         return TRUE;+ a/ z/ X" c! X! o, `/ c1 v, t
  591. }
    0 F: c, x, B( o# ~
  592. . f3 z3 v2 ~2 F
  593. char *CRevAppApp::strtok3(char *pSource,char *token)* ^  O2 b, U! }/ T+ v3 [
  594. {
    , _7 Y- W; j7 I: a( @* e
  595.   int i;
    8 S* u3 c2 ?# ?. d' M3 `
  596.   char *szRet;9 s' ]: b0 a3 Q, r3 c* `( p
  597. % t3 h% r9 M) a! e5 |
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    $ K, C: Z6 H2 A
  599.   if(sztoken)$ m; V8 P! L% P/ N5 `9 L' @
  600.   {
    9 r, N+ @0 c( P, v0 f) N0 V( _
  601.     szRet=&sztoken[itoken];
    ( I" h4 d( E( E. q6 {& O4 ~
  602.     while(sztoken[itoken]): ]- C1 S+ e! f7 a
  603.     {% ^# H7 _; t( @; e' Q
  604.       for(i=0;i<(int)strlen(token);i++)
    , `3 l4 g" l+ L. G5 s0 J
  605.       {
    ! [6 K6 h: \' U) A. ]
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])1 t% J) n4 u) S
  607.         {; j& Z/ u! @; m( z) O% R. m8 y: p" s
  608.           sztoken[itoken++]=0;
    . ]* A7 n# h4 ^. H3 ^+ _
  609.           sztoken[itoken++]=0;) ]9 Y# L' M" l( w; C5 [
  610.           return szRet;1 g0 H) Z, N" I8 I* C" ~" \: I2 h
  611.         }
    ) q1 @+ z2 Z- _
  612.       }
    0 u  F; `( W* m! ]2 i2 Z
  613.       itoken++;) c7 N: l6 d* w7 e0 y
  614.     }
    6 `' R1 e4 G, G- _8 |8 i& G
  615.   }; y. g( g: v3 {. w0 M- y. r% t
  616.   return NULL;
    ' ]# u$ m. F% B9 a5 r
  617. }
    $ p( }0 u; K0 W1 p& ?% K
  618. 2 {; c' ?' z  T9 X
  619. void ProcessProc(long Total,long Current), |  ~7 a" R& V
  620. {
    , \0 ], e3 ^+ i, k& i  S
  621.         MSG msg;" X# g$ v( Y5 ]: T7 J4 M
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);5 j! R& `7 s9 s+ a/ @% f. n$ w
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));+ W) |: _0 [: H" t8 F- G
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 D& f% I0 j  @5 C
  625.         {
    4 e8 j1 _; d4 b0 B
  626.                 if(!GetMessage(&msg,NULL,0,0))
    5 u2 f  V0 e/ f& I" O3 M7 s
  627.                 {
    , H5 V' r; I$ ?" w: }3 C- j8 F
  628.                         return;8 y, A7 x8 s( L$ P# u9 g
  629.                 }2 u! V" N6 V/ Q! H) u* r- k& C  l
  630.                 TranslateMessage(&msg);5 y& A$ o/ W6 y  Y! ^- H$ |1 s
  631.                 DispatchMessage(&msg);9 n1 Q$ o6 h! C0 R
  632.         }       
    . C% n; L; Y# M9 K, E. f! E( W) ?
  633. }9 t, ]& N5 ~8 n! `

  634. / _) Q7 l" z8 Z0 U0 L
  635. BOOL bFirstChar=TRUE;( N# j  v3 }6 @: x

  636. , K- R3 Q8 m' L  M
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    / L  Q* x& g& v, O! m/ n* ~
  638. {
    ; o0 L( D/ g8 R0 @
  639.         // TODO: Add your specialized code here and/or call the base class; K: ^; }9 C  w9 u, C
  640.   switch(dwProgramState)
    & F9 I. u. U# j; z" Y
  641.   {
    ( S3 e: E8 Y; H( b4 g
  642.   case AP_NOTHING:1 \& F6 o0 d9 {* Q# Z
  643.     switch(dwStartUpSteps); O+ T$ O: n' }1 M( t
  644.     {# ?! v- ~( m: m/ {3 a
  645.     case 1:8 I$ h. Q3 ?  a& W. H9 m; M% c
  646.       {; ^( ?2 t* s. z' l
  647.         int i;
    8 ?' v! ~" R8 j& q/ @
  648.         CDC *pCDC=dlg->GetDC();
    , Z2 ?7 m* z8 s9 S1 L1 w& p( q
  649.         HDC hdcwnd=pCDC->m_hDC;
    $ J1 b/ m) W, F' Q
  650. //        Graphics graphics(hdcwnd);; [/ C! u3 S& c
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");; V" @( c# s  G2 F, B/ d
  652. //        INT iWidth=bitmap.GetWidth();  q6 q2 M, X1 ~! \' i1 e* y
  653. //        INT iHeight=bitmap.GetHeight();8 O+ v( H% W' r* O+ q% J
  654. //        Color color,colorTemp;
    ( i! ]# l: H0 f1 a/ ^, Z. c7 X( v
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)) y4 U+ p2 q3 D& @  N
  656. //        {  i& R* U! z- p7 P
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)& T) s; T& m) p) d2 v
  658. //          {
    0 \6 ~  b, |) O5 }( i4 ^' n* G8 H: l# \
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ' A1 Y* u) O8 i* P2 j% J
  660. //            colorTemp.SetValue(color.MakeARGB(7 z( F  `$ @* l2 `  ^0 F4 h1 b
  661. //              (BYTE)(255*iColumn/iWidth),
    ! P; P. t  _8 k+ p/ Y+ ~
  662. //              color.GetRed(),, n, j2 |3 f& R9 R8 L6 c
  663. //              color.GetGreen(),
    0 S% \+ e( A9 R- c& F
  664. //              color.GetBlue()));
    8 X  U$ F$ u5 b2 [3 d% H% Q5 H% [
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);0 [% I; F& T+ a* K( c
  666. //          }1 D7 `3 l8 E6 F# q
  667. //        }# c# s( Z6 F  w' N: H; y( v5 O
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 A) R, p. |/ N
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 l+ w, T3 A7 i+ X: G9 {% j
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    & G+ N1 a% j- U4 u
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 T+ F- ^1 H) J! G; [+ {+ V
  672.         for(i=0;i<240;i+=8)4 i: P' R# [. t; N- r# n$ K3 }
  673.         {- H( P( ]- G$ c2 h; D0 G% L& L
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" a* T4 L" R- z/ y. k' ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / N$ n& J8 ^( z0 q: @
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);1 N# _' X% ?' z
  677.           Sleep(33);1 x& i$ M; H. E% P3 _
  678.         }- w/ B2 Z, e( F) m* K% \
  679.         Sleep(1000);. S$ [8 f( E3 n+ ?
  680.         for(i=240;i>0;i-=8)6 s1 Z  m  o! O0 C* r- h7 m
  681.         {
    + Y1 ?( T1 D, c! i* ~4 \
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);- D+ t% X  Y& V5 p) M% X
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 z3 y5 G! I) ]* l7 Y% d
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; u5 j; @  C5 ?, b$ \  a$ U
  685.           Sleep(33);$ X5 ]$ ]1 \. U* r1 f- t
  686.         }
    " N0 }$ F. @$ i# n0 d' A1 }
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    . G* R  d' J! a: a& q! N% ~
  688.         dlg->ReleaseDC(pCDC);
    $ h* r! P% T9 G
  689.         DeleteDC(hdctar);( L  a2 @" h$ f3 P& u5 |' P# f
  690.         DeleteDC(hdcsrc);
    9 y7 X1 e( r" L; u- ]( M
  691.         DeleteDC(hdcorg);9 u" _6 d8 ?3 w0 l1 T5 d% L5 C
  692.       }. ?0 D( I6 F6 C
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);$ G# p$ D* }7 {
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");7 |, ~% Q, Z# D4 r( o& G. T
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    # m- T, ^' c7 s$ ~
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");& T8 G; t2 z5 E* ^7 y5 p" v! ~
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% Z5 b# r; W9 B+ S$ A
  698.       if(!Dn.Connected())
    ) }9 y( a4 Z( L8 z/ w, y
  699.       {
    1 S; G& i# s; u0 U& C, c$ D
  700.         dwTotalFiles=1;3 @4 h9 U4 y' U6 \0 Y& b
  701.         dwDownLoaded=0;
    * x. W, W% W1 d* S( x7 q1 C' p, r
  702.         bSilentStep=TRUE;
    4 s* q+ q$ f2 ^  R8 F$ z- E
  703.         bCompressed=FALSE;
    6 {" M" {4 \# n( j) ~3 _8 I
  704.         strExtLocal.Empty();& c+ j5 M- ^! A( I% Q! w6 e
  705.         strFullName="readme.txt";3 K' R& D3 N5 O% q/ }
  706.         dwProgramState=AP_CONNECT;
    $ p0 Q8 z, Q4 t! U- [7 i8 g# _
  707.       }. ^/ `& l) _- C1 n+ X& X
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ' ]* ]. U6 `0 h/ w* f8 O. j+ W
  709.       dwStartUpSteps=2;1 x4 \% {4 Y  S' V8 `$ y6 K- K
  710.       break;
    + F. g  C  ]. K$ J+ `. V
  711.     case 2:
    ! r" M5 `3 Z5 g. W
  712.       {1 u& J* P, m& p+ Y( L
  713.         int iEOF;, \7 ]/ G5 x' J& k6 o1 M7 l) ^0 {
  714.         FILE *fp;2 V6 z9 h# ~' ?/ j% x1 \
  715.         char szString[512];
    - F3 K+ Y% g5 i3 |6 A( ~& Z
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* A! |1 G% k) h
  717.         if(fp)
    6 y( |4 m1 z# ?5 o# ^; R
  718.         {
    3 B* a$ Y9 D& G/ B# }
  719.           do
      d+ C- o/ @" [/ }' s
  720.           {
    # C1 N8 C9 Z/ Q, Q# d
  721.             iEOF=fscanf(fp,"%s",szString);
    6 u6 B$ u0 T& @* |+ h. U
  722.             if(strlen(szString))! x- Z, s. T0 O! q( ]  d
  723.             {4 @. _8 R& C- o0 ]- t
  724.               if(bFirstChar)% |/ z9 K2 s) S4 ~* Y
  725.               {
    . M3 [: u1 N( J" x' x" C8 _. R
  726.                 bFirstChar=FALSE;+ |7 o% b, _/ S- k; O: |" u8 f7 Z* w
  727.                 bConnectIsBig5=FALSE;4 {" S( o# ?8 i0 L/ l3 g
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    8 z8 O; X9 X- c' G; W
  729.               }
    ! Q8 O9 z3 x# L' F" f: v# n
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; W. }* {3 c6 f0 {
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));& f- u  N6 _4 Z+ g0 H
  732.               dlg->m_ListText.AddString(szString);
    # a) p* K' {4 x- }
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ X+ E' `  b8 k, y6 ~
  734.               *szString=0;. N5 }+ X6 J0 I- S- f5 U+ W
  735.             }; Y6 [# a/ K* i% K+ o8 o4 ]
  736.           } while(iEOF!=EOF);
    % P. _, L' m8 {/ |
  737.           fclose(fp);
    + Y1 F; q5 G" d. r. J$ F
  738.           unlink(".\\DownLoad\\readme.txt");
    " }! Z2 [$ ~5 i: S% e
  739.           dwStartUpSteps=3;3 O( O7 Y7 y# x1 G
  740.         }9 `. `) `0 h/ z. S4 @
  741.       }
    - w# V: s8 y$ X) ?
  742.       break;9 h3 I! r& V* S2 |5 k4 |
  743.     case 3:
    ) d7 {  _7 K  E& ^/ Y
  744.       if(!Dn.Connected())- j7 @: m% K2 e- U6 A. r; l$ x( K
  745.       {
    # A. Y' ?6 Y0 `& R, h
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);+ X; l' U) C/ x4 h0 P
  747.         dwTotalFiles=1;9 e) E* A1 @" C3 L" J) N% x
  748.         dwDownLoaded=0;
    ! L- |% J( ^( Q8 s' B1 f
  749.         bSilentStep=TRUE;7 M5 M0 f" j- H7 a( t+ y
  750.         bCompressed=FALSE;' Z  m  p4 X5 z- ~9 F& x! {
  751.         strExtLocal.Empty();
    ! r9 Q2 F7 S5 u/ s  ?* m
  752.         strFullName="checkversion.txt";
    " Y" }+ t) Q2 I4 v! ^' s
  753.         dwProgramState=AP_CONNECT;5 q# S( F& }- V. Q7 u% |
  754.       }: R/ j& o; a& b" y: n7 V+ ]
  755.       dwStartUpSteps=4;% H- ]. O( N/ T  h- V! T$ m
  756.       break;- P9 P! k( c- X8 S
  757.     case 4:
      ^, z2 Z+ K7 u$ D' m, T
  758.       {4 w! ^+ h% [/ r% C8 K
  759.         FILE *fp;
    * S. j( g3 ?2 Q6 h) n! P/ I2 Q
  760.         char szString1[128];! `$ e) c+ q$ L" q
  761.         char szString2[128];; ^9 U4 d* K/ ?8 J
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    7 _) N) t4 y: Y/ ?5 t! k4 i
  763.         if(fp)
    9 F  x6 s4 C0 h8 \- E
  764.         {5 A; U- G  j1 U. ]
  765.           fscanf(fp,"%s",szString1);7 G: ~! x# k( Q* M) D) R
  766.           fclose(fp);; H; V4 y. A  X9 q9 R* D
  767.           fCheckVersion=atof(szString1);( u+ s/ r1 l. v
  768.           fp=fopen(".\\checkversion.dat","r");( V+ x( b7 x" V
  769.           if(fp)# a' H9 }+ C% |/ L
  770.           {) c. Y0 b9 V$ Y0 l  H
  771.             fscanf(fp,"%s",szString2);
    5 U& s" a. r& i% n) q* K
  772.             fclose(fp);
    * ]* V) n, \- g4 l
  773.             if(atof(szString1)!=atof(szString2))& v5 b' u7 D) z7 c! k
  774.             {
    7 H1 Z& {% l5 J! E' }* d6 Q% o
  775.               if(!Dn.Connected())* `* c0 F+ g8 n5 d! z+ @0 ~, W
  776.               {
    7 E3 R1 C; w& e8 I2 F1 N) p
  777.                 bFirstUpdate=TRUE;
    $ v+ U' C, f- N8 v/ S. D4 k
  778.                 dwTotalFiles=1;9 Q+ A, o9 I4 `$ c; ^, T
  779.                 dwDownLoaded=0;
    ! n$ j- O: u4 D* F: m( q  O3 f7 ~
  780.                 bSilentStep=FALSE;% Q7 [* \' p, \, l
  781.                 bCompressed=TRUE;
    % W$ {: ]! l& q( x. u) ~
  782.                 strExtLocal=".\\DownLoad\";$ X4 i/ n$ e. [' _, P
  783.                 strFullName="update.txt";" N6 d( `" k/ L0 w+ X# p
  784.                 dwProgramState=AP_CONNECT;, B3 {+ {6 _) h$ X: u" r
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: Y# |' o; x0 b) a# x
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 c  f- w1 I4 P( k0 Y" \& I8 k
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");# U: v) M1 w5 r) f! p! U

  788. ; s# J# B  P$ _6 j9 |% \. Y' j
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' t' H6 `0 v+ d7 z0 y. b
  790.                 unlink(".\\DownLoad\\checkversion.txt");# O, X% G# E4 g+ T. [
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ( r( c5 D, ~9 h7 ~
  792.                 {9 i+ f( V5 l# |  a  D5 k& i( ^
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");8 d, P: I/ G( v' S
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    0 Y/ a/ g5 K$ c
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    + f$ M1 G$ x& t* K; u, T
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 a' u0 {6 \$ @
  797. 7 {- Y; r' Y; l) ]" P) p# W: l
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    3 G* t7 L/ d1 ]' |, F
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* p5 ]1 c8 H+ U( m
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");8 G# }9 G7 Y5 z! \: J
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; u6 S# Y; I, R3 V  z
  802.                 }, P' {! Y/ t& K$ y$ Y
  803.                 dwStartUpSteps=5;; B+ K8 F9 W7 U* q! G
  804.               }8 p' _" `1 o: a: f8 B
  805.             }/ Z8 ~9 Q* }$ U1 O1 P- X1 B0 w
  806.             else1 d8 J/ _# @7 A! K: ?4 g, n
  807.             {
    3 O0 E5 m; {- L" `5 j, {
  808.               unlink(".\\DownLoad\\checkversion.txt");
    " A' x* i1 n' F2 O! I, J
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# v6 M* V- i6 R7 z
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 g! Y3 o+ `5 ~" ], S  {3 g
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 k: U5 v/ ~( S+ p4 W9 {6 C. i
  812. 4 \3 R2 q- j0 w3 K9 l) O. t
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ v& K% M+ N1 }
  814.               dwStartUpSteps=99;5 _: N: V4 z  T1 ~1 e+ T
  815.               bFinishUpdated=TRUE;
    , f* {' p% W; z& t
  816.               bCanUpdate=TRUE;
    6 q# |( m  h1 g- Y9 p( U; l
  817.             }
    : ^, Y# ]* t# g3 x  L7 }
  818.           }
    # ]) I+ K" q* \& B
  819.           else
    " |3 R/ ]% U' T" ]6 k7 ~
  820.           {; C1 C0 v" u9 N1 H4 q5 d
  821.             if(!Dn.Connected())% y( X( @2 g: Y4 A- n2 c2 i; B! o
  822.             {  g9 Z3 @& L+ L0 f0 ?% l7 o& \* B
  823.               bFirstUpdate=TRUE;
    & Q# Y- v( ]0 B* j$ I9 J
  824.               dwTotalFiles=1;
    ; ?9 `3 Y; X$ ^- E7 K6 E4 s
  825.               dwDownLoaded=0;
    & B1 X! r4 t* c+ ?! C
  826.               bSilentStep=FALSE;& l! F+ V6 @' s. z- {- a: I9 a- t
  827.               bCompressed=TRUE;9 |. y4 @8 p; v
  828.               strExtLocal=".\\DownLoad\";) W: |' y2 V7 P0 c
  829.               strFullName="update.txt";. G+ l+ X4 y( \# \
  830.               dwProgramState=AP_CONNECT;' _+ k- U. h; h& Q1 |# ?
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) `  k/ _- F* d" h* h
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( ]9 O$ C; q3 |# R( ]3 n2 f
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . p) L& y! d$ m5 T
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      h: B7 _% b/ F/ I7 [) |7 p
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ! {: P( `  P: l* G8 v; A
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    , t0 u4 F; n7 M+ c8 D2 \
  837.               {% n/ K$ Z5 A) h& H/ }
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");7 u1 j/ i; R& `( w+ E' T* Y* Y# T
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");4 u1 b; `8 {$ Y& P
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");; V5 Y5 J) z* J. H
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 W! h6 z" p8 j& ~% K
  842.                
    ! B3 `% S- U! w# v
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . _) ~$ H3 R# N2 ^% L6 ~
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 T! E# B6 l6 j0 C- q, `
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");, y6 {/ ]5 J" d% M! e
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 u4 Y2 H( m) B1 T! J
  847.               }2 s+ f/ v; m0 c
  848.               dwStartUpSteps=5;+ b; J+ l6 v5 [: \' n/ {, a
  849.             }
    # a! P* K) |- x& C* W- W" w: u0 T; r
  850.           }# m: U3 k. J7 S8 M/ L$ a
  851.         }( S2 k; `, g( y7 w5 j; H
  852.         else
    4 ?% R6 |; u) a
  853.         {
    - S3 _2 H( ^! J
  854.           dwStartUpSteps=3;. A/ U/ U, v  K1 W3 b# g
  855.         }; D  V2 w4 y3 D. H* l; G
  856.       }
      L& N# x! [( D- u& U: @6 G% I
  857.       break;2 P" {  M2 v0 m: n1 y
  858.     case 5:
    " w0 ^% {" ^0 J8 n. d
  859.       {$ z' |% Z# A5 j/ E* |6 S9 [
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    5 g% w* R! ]. y5 J/ z; ?
  861.         {% N: Z( @) Q6 N
  862.           int opt_overwrite=1;
    " Y0 w+ `0 U; [
  863.           int opt_do_extract_withoutpath=0;" F7 {& R7 D5 z( [9 O
  864.           unzFile uf=NULL;
    6 ~4 h: y% ?( G) i

  865. , i$ S( N- C* m0 B2 i; p0 p4 s/ V: D
  866.           uf=unzOpen("Wsa.zip");
    ; o& {! p, m, a
  867.           if(uf)
    8 t  X! h9 ?- x) c3 T! _
  868.           {
    # \6 L  i: G( A# n  i* t: E4 w' q) M
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 i! l; q9 U+ X) g; \
  870.             unzClose(uf);' j7 l( j' B* x& p5 C& I; {1 _
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");$ d0 V" y. }' ~4 E1 Q! L9 x
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");. d: t$ T: J+ |; s7 s# [/ Z$ E" v
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ( l. @/ L9 U" t* Z% t% l" N/ D; X* K5 B
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & z6 ?: e* K; d3 G/ _- {
  875.           }2 V, X3 r( |& ^- @  Y: K
  876.           DeleteFile("Wsa.zip" );
    ; T  p$ E7 M, \" O
  877.         }
    9 r1 x% Q* U6 P

  878. + S2 g. U. S! B% R: d8 j' M* K' u" h
  879.         if(CheckLocalVersion())
    8 l! V" ~- ?8 a' N
  880.         {
    0 S( U; W5 E6 I2 a5 b1 h1 x: H
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    & M: A& A* C/ N' B2 k9 R
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");9 ^: Z2 x/ l  |9 h% X$ O
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");/ P. _! @  c5 i2 u# k; Z
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . P: L! `9 }6 \
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    - S5 u3 S" K# @/ N6 `1 L+ `+ l
  886.           dwStartUpSteps=99;
    7 V( ]* I' G" W/ t! _, t' c
  887.         }. u% g* \# d( B/ P: ?
  888.         else. O4 p: ?+ \2 S$ C
  889.         {
    4 c+ W- G% ~7 e# g# a
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    9 }+ t0 V& \3 F6 }- T5 O) d, E) j
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");3 ~$ A9 i' `( z4 W6 j5 }& q! f% `
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    + ]+ n1 E3 V: J6 t) c

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

. `; a. r3 {: |7 q# W5 I; O! v5 J2 l- R" U

評分

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