CSUpdate.exe源代码

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

# L3 `; T# v6 l7 A
  1. / RevApp.cpp : Defines the class behaviors for the application.
    9 h: }6 [  ~" j* c9 t  r5 `
  2. //
    9 \5 c+ r) l8 Y6 P7 a( @

  3. % h! {1 F* Y6 N' {9 B
  4. #include "stdafx.h"
    ) j% Z1 r* Z6 }3 X1 d: ?

  5. 2 w" E% Q) T1 d# t0 B3 l- X0 }
  6. //#define UNICODE
    + O' d0 g% j% s2 T9 t/ w% l
  7. //#include <gdiplus.h>
    3 Y0 I4 }& e; |; a
  8. //using namespace Gdiplus;
    4 i5 b/ z3 V! H: g7 M
  9. 8 ]1 x8 I5 b4 X4 f# O
  10. #include "RevApp.h"
    + U" M  a' u$ y9 G
  11. #include "RevAppDlg.h"
    7 @9 ?, g( G1 }- ]0 H2 _

  12. & ~7 V- b7 _  A+ x- V
  13. #pragma warning(disable:4786)
    % f* S' W/ @. ?6 a0 G
  14. #include <map>
    ! M3 j8 B: `3 ]. ^& k9 r" [
  15. #include <list>! o; |2 I/ w( h. `2 b
  16. #include <direct.h>1 }$ L/ J4 [! G" P! Z
  17. - K  R0 ]7 y) L2 U2 H! V. z
  18. #ifdef _DEBUG
    , z3 N( }, ?' U6 t6 `* i/ c- N
  19. #define new DEBUG_NEW/ \" u* K3 p! Y+ q, O7 w' s
  20. #undef THIS_FILE
    + u/ Y- m) J* e: I) s% H- @' R
  21. static char THIS_FILE[] = __FILE__;  Q! R) x9 E- V! `6 F' c
  22. #endif. l" J8 X5 o* y) j) [- _9 j: q
  23. #include "SkinResDef.h"
    3 r) z$ h/ s: ^4 \  \, E
  24. #include "ChangeBG.h"
    ! @) }/ c' B8 G1 T( _
  25. #include "AFXINET.H"
    * t$ K. _1 }: w5 U) `6 i* }
  26. 2 Z4 y0 S' s" w% v
  27. #define TRADITIONAL_CHINESE 0* {5 Z. |8 F" G( R( W' M+ {
  28. #define SIMPLIFY_CHINESE 1, q) @2 R" |3 N: O( r- M' b
  29. #define ENGLISH 25 z# Z: X9 Z: O$ }$ c" w* {* t
  30. int m_iLanguage = ENGLISH;
    / G4 |/ V: N' i6 D0 P& b" c5 h
  31. /////////////////////////////////////////////////////////////////////////////# W) x# k, T' }6 v; I6 {/ r  M, H
  32. // CRevAppApp
    # R5 B! S1 `$ ^6 E
  33. ! Z, X- i1 S! P- i8 c( Z
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 C6 y, z6 z! G7 V" [
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    2 i* E6 g6 R, l, t6 x
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    % l9 B, G( P) K9 `8 M
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ( I5 p+ f& e9 e: a& T
  38.         //}}AFX_MSG
    6 W2 i( ^# K4 x; o5 i, `3 x( `  h
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp): L( W4 i4 c3 _6 G3 o4 I
  40. END_MESSAGE_MAP()8 `4 x/ f% {9 u7 k' F8 R8 p
  41. & R0 y" C( F7 ]6 z0 M6 M$ {
  42. /////////////////////////////////////////////////////////////////////////////
    - g+ v! p& J8 {7 G5 I7 m
  43. // CRevAppApp construction( ~# j6 ?- H5 n! i

  44. ' k3 x. M; D7 w+ i" }
  45. CRevAppApp::CRevAppApp()
    3 Q1 w) u  B; n1 H  @; u6 T
  46. {# J& x5 w5 {: n* j; Y' Q8 z( K
  47.         // TODO: add construction code here,0 A/ t5 ?2 h/ S5 B9 `; Z
  48.         // Place all significant initialization in InitInstance- F3 i" g: @# m# T7 |
  49.   bDisplayIsBig5=FALSE;
    % H" u' W4 X' Z" V0 `
  50.   bRestartUpdater=FALSE;. q$ `: V- [+ Q
  51.   bFinishUpdated=FALSE;0 j" S. l, q2 ~/ ^, e) v
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ' N% f; ]) u0 f; v2 n& ^
  53.   InitChangeDataBig52GBKS();
    2 z8 a2 ~2 j2 t0 [* @
  54.   InitChangeDataGBKS2Big5();" n' I  t! _+ q
  55.         //6 m- H/ G$ N6 }+ A
  56.         bClickRunExe = FALSE;
    0 E; S8 P( ^4 x! e, h  Y
  57.         //
    , K8 D7 I9 x; S) ?0 X; e& m& u
  58. }2 Z* ]* r* A, P# x; v7 g

  59. / |1 E8 H7 x! ^5 c9 {
  60. CRevAppApp::~CRevAppApp()/ i0 X5 p  ^/ v% ]. L- @
  61. {
    : e. X: }6 a! {
  62.         // TODO: add construction code here,
      M( X# H+ j" E$ r& h' |
  63.         // Place all significant initialization in InitInstance
    ) T0 h6 |" K2 D4 d4 w" z1 g
  64.   EndChangeData();9 k. D% U3 T! e
  65. }2 @" u- v- Z( s+ o

  66. % O9 V( o  l3 T: B! ^. ]) H
  67. /////////////////////////////////////////////////////////////////////////////% H% D7 z6 ?. f' A) H. H
  68. // The one and only CRevAppApp object
    2 p1 I% M' I( c

  69. ! h: s. V  S: S5 L
  70. CRevAppApp theApp;/ X, V% t  B" M& v) {

  71. 4 M$ `) w, ?) H. R3 s; w; m
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    2 M1 m! h, k7 {6 _- F+ m
  73. {# b9 w( g+ W* R$ ^
  74.   int iEOF=0;/ h' x: M: a1 H
  75.   char szTempName[MAX_PATH];
    . ?4 G: j  Y- k; ^( v3 n9 Y8 o
  76.   *szFileName=0;. x$ G/ V* O) w8 c
  77.   iEOF=fscanf(fp,"%s",szTempName);4 u: ~5 D$ i' e4 r1 x( r- q
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    : |+ a; z" ~3 \# s
  79.   {
    + p: M; R& l- D. R4 _3 |
  80.     strcpy(szFileName,&szTempName[1]);7 X1 U' _" }5 e7 [$ \
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ! W7 c- ]% }& B1 o/ W- j4 `
  82.     {4 t! @! T  L, H
  83.       iEOF=fscanf(fp,"%s",szTempName);
    : A# I, b4 F( E$ c
  84.       strcat(szFileName," ");9 d0 b% d/ u7 S+ m" ]  E
  85.       strcat(szFileName,szTempName);5 U' [0 t5 s4 b" M3 j+ x& O( I
  86.     }5 i0 z3 l. r, V
  87.     if(strlen(szFileName)>=1)
    # ]/ Y' @' _% I8 n
  88.     {4 @) L9 k: K& q. y' m" n
  89.       szFileName[strlen(szFileName)-1]=0;
    / `9 f. l! ]- V" m: u& K
  90.     }; ^2 D+ Q' d+ g0 h3 |
  91.   }5 I  B: k, j/ z
  92.   return szFileName;
    " i1 l4 i$ ^3 H2 ~. S2 P1 T
  93. }
    ) M6 w# ^% d# [' V

  94. 0 y4 j6 ?# l# R+ i0 [& a
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    : b! k& m' j) {9 o# e5 g7 ^& P
  96. {1 Y2 M/ d1 m# z1 y
  97.   FILE *fp;
    ( w2 x2 }! {1 y) j0 c5 Z8 p
  98.   char *key=NULL;5 d0 N; Y/ D1 R' O
  99.   char version[MAX_PATH];
    - `; m2 T3 \$ _2 v3 Y
  100.   LPUPDATEFILE file,olds;" o2 r- e# @$ k# A* U$ A
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 j( z9 D0 a. ]# k; F/ _
  102. , j+ r4 t& o/ v: O- s2 q3 B
  103.   UpdateList.clear();; ?4 ^: R9 R( Q- @/ K
  104.   UpdateFile.clear();
    ' y5 P8 }6 A6 E
  105.   if(GetFileAttributes(filename)==-1) return false;
    4 a* O1 m. O4 Y5 T
  106.   if(!(fp=fopen(filename,"r"))) return false;
    $ g1 Q' Q7 Q7 w" j3 _5 D' p/ I# v5 d
  107.   fscanf(fp,"%s",version);% p" K$ A8 A$ y5 C! n1 O
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    % [" Y5 _5 h6 E+ l, B
  109.   while(fscanf(fp,"%s",version)!=EOF)6 f9 _. Q5 q. F" }4 v( R8 n! ?
  110.   {! @5 u0 r# [- U+ v& H" z. J# A
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % Q3 B, W/ }1 }) P( s
  112.     fscanf(fp,"%s",file->path);
    ; u5 L* o6 ~! R" `4 V# Y5 |
  113.     ReadFileNames(fp,file->file);! j( w0 g- G3 X2 i6 {( q7 O
  114.     strcpy(file->full,".");
    . s5 ~3 o2 U, q
  115.     strcat(file->full,file->path);
    " U. _$ i9 N$ _
  116.     strcat(file->full,file->file);& u! E  w. y$ A) `
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()): Y3 e9 D/ K) ?8 g0 K( t
  118.     {: q, H  J1 D+ L7 J" t7 \! ^
  119.       file->vers=(float)atof(version);8 i- z( l- H4 _/ m( K
  120.       UpdateList.push_back(file->full);' r/ R( W; R; X2 n6 E4 L
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));. w7 c$ f" F5 z( J
  122.     }. ^5 |$ h+ D" H0 t, @
  123.     else5 ^4 }3 L' h- N, A- j
  124.     {; ^  n- Q1 _! I2 P# p5 i7 A
  125.       olds=(*p).second;3 L: E5 g8 Q# @9 d" f, }
  126.       if(olds->vers<(float)atof(version))
    9 @6 E' Z! c6 B, u4 K' S& k0 ~7 h
  127.       {
    $ N5 x. F3 y/ I1 l/ @& N8 ]* |) u
  128.         olds->vers=(float)atof(version);$ M( G0 g! h1 _, {
  129.       }
    ( M# U! N# E7 {  }" @
  130.       free(file);
    9 t2 I; i) X4 V0 w
  131.     }) L* A5 m; [* S0 v, A3 M0 m
  132.   }
    0 j( w) S; u, z$ m1 E' f- j( a6 Z
  133.   fclose(fp);6 o. }3 Y+ ?6 _' @( X
  134.   return true;
    : I& }2 D$ n6 h- }( ^% i
  135. }; k9 a0 A/ M) i) K3 C8 `
  136. 9 m7 L6 Z  H* y; I
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath): l2 u4 @4 a: u" `7 ^# }
  138. {
    0 V9 s$ o9 v8 X% c5 [
  139.   TCHAR  szFull[MAX_PATH];
    $ w. ?/ {5 V, K
  140.   TCHAR *token,*inter;
    , [$ z# Q0 n: `- p6 }' W
  141.   *szPath=0;7 z0 @- B) \5 \4 |
  142.   strcpy(szFull,szFullPath);
    , i0 ?! d' t$ E* m/ V8 X, u. b
  143.   token=strtok(szFull,"\\/");2 Z) D4 C0 L9 L. l9 G9 H
  144.   inter=token;
    1 N) J/ @' \' V+ S. @
  145.   while(token=strtok(NULL,"\\/"))) Y0 Z, C0 h) C1 }1 W
  146.   {
    : G' G* M% U0 f7 t* l# l  v( @
  147.     strcat(szPath,inter);
    / b1 |$ _$ L9 o+ \
  148.     strcat(szPath,"\");* z* M/ P9 v! Q- \1 p# @4 u* H3 S" p
  149.     inter=token;" |! x7 @! J) t: J& {6 \
  150.   }
    ! e# H7 @- n1 y! _
  151.   return strlen(szPath);! ]% O+ I2 H( L, i' q" b4 m6 Z
  152. }
    1 Z$ y4 q% {- I9 Q1 x0 r. @

  153. : ~) O4 E9 O3 }1 E5 W
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)7 E9 ]7 H$ ~  Y7 `6 t7 F
  155. {
    ) m+ D7 P& R2 D  G! o% @
  156.   DWORD attrib=GetFileAttributes(Target);
    6 n' P3 H& v$ u4 F; E' p
  157.   if(attrib!=-1). d) o  N: z, e8 \9 \* O- Q: ]/ F2 k
  158.   {/ g% ~# L2 d$ a: {
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))6 Y1 ^- V& z2 K
  160.     {
    4 }/ @- K3 N) e5 m
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ! I% [1 p; _+ g
  162.       SetFileAttributes(Target,attrib);
    2 J* U9 i) v( }% Y3 l+ h
  163.     }4 p/ F- f0 u: Y/ h' i! z7 {% u
  164.   }
      D' ?6 W( O  d& @/ D+ K
  165.   CopyFile(Source,Target,Erase);9 t0 a4 G3 N8 x: I0 ]
  166. }
    & H% Y3 D+ j, P

  167. + s8 P: s: g1 ~( n
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)5 u$ M1 T) W% _! O3 M" _
  169. {
    / q( ?- o4 q' r+ j# R& R3 O# B3 `, C
  170.      FILE *fp;: t7 w* v1 }. D/ P( [
  171.      char  szBuffer[8192];) P' m) o9 q2 j( Y
  172.   va_list  argptr;
    1 \9 I0 f$ g# R" q" B( \4 O

  173. * J1 Y/ u1 ^5 _
  174.         va_start(argptr,message);$ f6 B! |9 p! N2 O
  175.         vsprintf(szBuffer,message,argptr);  B) d: \3 M/ ?& Z: [
  176.         va_end(argptr);' J0 {) @! o' C2 Q
  177.   fp=fopen(FileName,"a");
    ' D+ M( e  g" U. n4 s0 e
  178.   if(fp)0 }1 a* u6 w6 @: t% ~, H  d
  179.   {6 Y, y" j5 x% @& c" }- U9 f
  180.     fprintf(fp,szBuffer);
    & P- |5 B) ?# ~' ?3 I7 T
  181.     fclose(fp);- j1 {. l8 L" f; B7 o  b: s
  182.           _flushall();; n8 @% m& K3 L6 Y. B" W
  183.   }+ u; E9 S0 {" v# z
  184. }
    ; ^+ a  Y2 [9 }8 l
  185. ) }) ^/ ?3 C8 T, m
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ; `; W+ e) p1 |  r  |- U0 p
  187. {7 G8 {3 y5 O% H7 ]! p1 Q( u9 l
  188.      FILE *fp;
    7 y! }9 \! ?4 S+ ]
  189.     DWORD  attrib;% l  h7 |, \8 Y% b) ]) w* ]' W5 X
  190.   attrib=GetFileAttributes(FileName);
    8 X- V1 {1 e. C
  191.   if(attrib!=-1)  c8 X6 C  r& D" ^$ M
  192.   {
    ) P/ M8 X" c( l' C2 N- x6 N* N
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    3 [# z+ b. i0 Y( S3 q/ {2 ]
  194.     if(!SetFileAttributes(FileName,attrib))
    9 ?8 E3 w4 l7 ^& R' W7 d
  195.     {3 ~6 ^$ L' k7 j
  196.       return FALSE;. Z, x5 R0 E, B& Q  u6 K6 t& B( Q" T
  197.     }
    7 R& @3 j5 Q% v5 n
  198.   }
    8 S5 b$ l+ `7 P* w; z2 b
  199.   fp=fopen(FileName,"wb");
    $ Z9 n9 C3 s" Z. Z  t, \
  200.   if(fp)! a# B( }: V1 @" C7 Y  d- ^- C
  201.   {
    * n' ]3 n: ?0 a/ i" G, ^7 }
  202.     fclose(fp);
    + v* p! C' O8 ~3 c$ e
  203.   }1 h: D9 z8 {6 G0 o* m
  204.   return TRUE;8 ^+ z0 s& E2 X& R8 x
  205. }( ?5 E8 D" e4 {9 Z- U

  206. ! Q, j: d* P/ X( |6 V" ?( K
  207. BOOL CRevAppApp::UpdateLocalVersion(void)/ x% {* N6 S8 x6 h
  208. {
    + E4 w4 C& Z! k1 y6 }
  209.   char filename[MAX_PATH];
    . A/ w. I9 I9 K  b- ?7 O2 U( M. S( W3 J7 w
  210.   LPUPDATEFILE file,olds;
    : k' A& f; G$ |) M, Q) B/ g
  211.   std::map<int,CString>::iterator i;
    & d9 G! w3 ^; K; m' |
  212.   std::map<CString,LPUPDATEFILE>::iterator p;& q# s5 d0 k) A2 v7 q9 l
  213.   std::list<CString>::iterator l;
    ( Q( B5 b) w( [6 f. c6 |% A5 M) j

  214. + L' `. ~" n3 a! B: Q
  215.   if(bFirstUpdate)% o9 f9 }* h" V$ z
  216.   {
    8 \1 R+ C0 |6 y* W3 n2 V
  217.     dwCurrFile=0;0 {; m7 J' H5 B# j/ L
  218.     bFirstUpdate=FALSE;
    7 ]) L% C' u- V* v' _% k
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    * y4 m) O0 f* D  A7 `4 y) N/ ~5 h
  220.     {
    2 Z, i! \" K9 ^! D, x
  221.       dwTotalFiles=UpdateLocal.size();
    5 ?9 {; J: j& l3 v5 d; M& W
  222.       dwDownLoaded=0;
    + c1 @  U1 L9 s+ {
  223.       bSilentStep=FALSE;' }8 `2 O8 W' }; c, u
  224.       bCompressed=TRUE;# T+ r6 V8 v, j  L1 {1 M! u
  225.       strExtLocal.Empty();2 W% l, j: x4 F5 s5 H6 D
  226.       strFullName=(*i).second;# o2 Z! M. ]* _) B" y0 N5 |' O5 C! A
  227.       dwProgramState=AP_CONNECT;9 Y! I* J; B( ?! a- K
  228.       return TRUE;
    , f0 X& m0 c: O: R3 A0 o( O, e
  229.     }1 ?8 F6 C/ _: h2 Q
  230.   }& v+ p% m! Z, k- R1 H! }1 D
  231.   else if(bRestartUpdater==FALSE)
    $ D: D  U$ }7 Y. B, [
  232.   {* d' D) T4 y$ X( g
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    9 j+ V" [. P4 O1 g( l* C" @2 K! t
  234.     {
    ' t$ D) m6 k) |& Z( J* W1 O/ n
  235.       file=(*p).second;
    , z/ w8 B( f* L6 p
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    + g& w, ?$ s, L
  237.       {0 C2 _/ ]/ \* R, t6 r/ Z5 Z
  238.         olds=(*p).second;" ^- R0 D$ ?. U( ]& v" A( I# D# `4 [
  239.         olds->vers=file->vers;% ?3 t0 S% q: t2 P/ N# h, y
  240.       }
    6 z8 C/ t8 \2 k$ s
  241.       else
    6 d9 q9 J6 v$ h; B0 O
  242.       {
    4 i# Q. I" ^, P6 u
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % p/ ~8 N% x) p; p3 G
  244.         memcpy(olds,file,sizeof(UPDATEFILE));1 t' d' D; j; Z6 _8 L
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));3 ?# M6 c1 k  d" V0 P
  246.       }0 d9 W7 _- K" d# l
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# R! I3 v0 V, c6 A
  248.       sprintf(filename,"(%s)",file->file);
    ) _0 j9 m9 |9 z0 R: a
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 W# K% M/ I7 r) t3 ^& y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ! @$ ]- j  d  z; q) H- h0 W# X
  251.     }* o4 p5 Q) z0 E$ i- T/ @+ Y8 r; Y
  252.     dwCurrFile++;8 |* f! s' W) P' z4 s/ ^) j
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / H& M0 e9 q9 G0 i7 m4 _
  254.     {
    0 @; F7 Q' w& B7 a
  255.       bSilentStep=FALSE;1 B  k" B5 T8 K# s
  256.       bCompressed=TRUE;/ I/ z, U5 l- e& B9 ~
  257.       strExtLocal.Empty();( {9 d% }5 q' X$ }# z5 [) ~2 k  P3 q
  258.       strFullName=(*i).second;7 x. M8 p4 G- A9 [6 ?
  259.       dwProgramState=AP_CONNECT;
    ' E4 g5 N( i5 [" _+ R( n/ H# o
  260.       return TRUE;# X8 o/ B: o  V
  261.     }8 E/ B. N* b( C. R, y
  262.     if(!bRestartUpdater)
    . n- T* c& B# C2 R
  263.     {
    1 t$ z6 [* U0 ]1 Z0 d5 v4 ?" X
  264.       int iCurrSize,iFileSize;- V5 I$ G7 f/ R, C" D- o
  265.       iCurrSize=0;
    + k, I( d6 p# }& s1 b# Y
  266.       iFileSize=UpdateList2.size();
    5 p2 R) Q" D$ @. \, v
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ! S8 R8 u& a# z6 _' @. ]
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ! G2 P# R% r$ a) J" |- {& O
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 v% H* Q, D, H5 N
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; Z. Q: R) J! o3 B% \: ]
  271.       Fclearf(".\\update.dat");
    $ I' C& {: @1 r. _9 {& e2 K
  272.       Fprintf(".\\update.dat","Bloodyf\n");+ F4 c* s' \3 u4 f2 I9 s! E
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)1 k8 P) ]$ Y% I4 L& R  ~0 U0 v
  274.       {( J3 [) ]6 y+ v
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    3 ^/ l& I. \' v' Z3 @
  276.         {- I4 ~3 P$ l* w, Z$ {: A% Q
  277.           file=(*p).second;. @# ~* i( ]6 @( [( ]0 K" D7 w$ D
  278.           sprintf(filename,"(%s)",file->file);
    9 p: X+ B% E4 @; I- E  i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);9 L5 N; @" Q" H# \- L$ a( S
  280.           iCurrSize++;5 L, H8 X: U( |* _
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));; D6 o9 {* G" Y
  282.         }: ~; k0 h9 f/ H0 f
  283.       }7 ?% o) P2 E. A
  284.       unlink(".\\update.txt");1 ?2 A2 d" a" s
  285.       unlink(".\\update.tmp");
      s8 o( ^6 B- _6 A9 ~1 ], L' z
  286.       Fclearf(".\\checkversion.dat");
    2 c& }( m( l+ l) [/ T7 D
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);2 ~  P( }4 l! {9 O
  288.       if(UpdateLocal.size())
    " o, b. I5 p. O( R/ O' X
  289.       {4 K2 b4 ^2 y. a7 s4 R. r
  290.         UpdateLocal.clear();+ M# T: v: t7 k# @8 A, ]& l% E- Z
  291.       }" H9 x, B* E9 g) \; G5 X
  292.       if(UpdateFile3.size())
    , y1 H  z( Z9 A, y# s
  293.       {
    # m2 X' u; h) |$ C) S* m5 R
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  B) x0 t, L, N/ k
  295.         {
    ; I9 c9 C5 Y( p" S
  296.           file=(*p).second;) ^/ q! r1 ]/ j: N
  297.           free(file);3 k$ W2 L; Y  Z  D$ A
  298.         }. Q) u7 y0 J3 r4 d! z7 q( V; f: D
  299.         UpdateFile3.clear();, j! R- z5 {9 {" B
  300.         UpdateList3.clear();
    + _# `& X( W( |& }# W
  301.       }  M* F3 x6 g7 Z2 d. T
  302.       if(UpdateFile2.size())
    : g6 f) w, A$ E# T8 B' D" d: W
  303.       {5 k. h0 S$ `8 `, Q. ?- B, {
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# I1 o. a5 h/ _7 M4 h
  305.         {' ~& F2 v: ~1 H
  306.           file=(*p).second;
    & M8 y3 t  h' \* w( c2 M6 y
  307.           free(file);* Y* G0 h. i" U. w8 F$ c
  308.         }
    7 e4 k) X! ]5 V6 ?- \1 m( e6 R
  309.         UpdateFile2.clear();* }* z0 i- x! L. w6 ?1 C9 H" p3 R: y- D- V
  310.         UpdateList2.clear();
    ! n% t! R0 W: z3 v2 B
  311.       }& D: d2 ^! T8 p
  312.       if(UpdateFile1.size())  g0 E  I' p4 ^7 U/ t% K, {3 _
  313.       {
    & [+ [+ d8 A& [& S  Q
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; Q; H  w+ e) ]: ]" \. F
  315.         {8 `" h5 I! k9 l' X/ ]! M: c
  316.           file=(*p).second;+ c5 o( \/ w3 {* |. `; z
  317.           free(file);: L% Q4 Z. {  x4 |; R
  318.         }
    . c- w0 ^, q9 S+ t
  319.         UpdateFile1.clear();, K- b! x& r2 x
  320.         UpdateList1.clear();
    * u( l" P( D1 J# l8 `
  321.       }2 p& ]5 k+ w! @+ z/ F
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    0 E5 F, n+ L" \* z0 F
  323.     }
    - C7 p2 x! D! {2 \  j
  324.   }" ^$ h$ f5 W) Q0 N
  325.   return FALSE;
      J) n! Z8 d1 t; m& @2 t3 ^2 s9 K9 b9 Z
  326. }4 _, l  k' T; t0 o

  327. ; V' i6 i/ \  A# d
  328. void CRevAppApp::ClearAll(void)
    $ o/ r7 h) J) k9 {/ h- C, E
  329. {
    / l2 T: C5 l6 a8 e
  330.   LPUPDATEFILE file;
    2 J% x5 g/ ?' W. o0 j8 E
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    & G% j0 @. s( s+ f' m7 E4 q& L' I

  332. ' |4 d) Y6 S8 W3 Q
  333.   if(UpdateLocal.size())7 {: Y3 r# t/ ^( Z6 W
  334.   {
    $ _, M  J' K+ l% B0 e4 t) y4 {
  335.     UpdateLocal.clear();
    9 [. I* D: Q5 H; m
  336.   }
    # K$ o1 {' _) v/ e! R2 I! \2 T
  337.   if(UpdateFile3.size())- y- z8 k1 k9 G# e7 s
  338.   {
    * G6 N- `' `8 G
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 C: ~$ c; x- w" d9 b
  340.     {
    5 J! @; n% `  p  V1 j% _( g/ L3 _
  341.       file=(*p).second;
    8 J, @7 J2 s1 g( H7 V
  342.       free(file);
    1 ]9 Y! ?5 f9 ]1 o+ p
  343.     }3 d1 B8 J2 ~$ m/ M  Q
  344.     UpdateFile3.clear();
    ) G5 u. S% V8 Q1 ]! H
  345.     UpdateList3.clear();
    ' T+ w8 r) X$ i) H
  346.   }
    & m+ b2 D& M; w3 O2 c' r- W- U0 a
  347.   if(UpdateFile2.size())& P- ^' w9 n  d" ~' i3 r
  348.   {  E/ K0 l, S, I! z8 ~/ T
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    2 T& Q& Z1 W: P% C! `1 {$ c* U
  350.     {
    6 R& h! v7 n+ l) e
  351.       file=(*p).second;- w2 s) y9 {! A1 u
  352.       free(file);
    - e$ g' ^, A+ m, `1 o1 S
  353.     }) [% W: a6 q' V; P! E( k1 E
  354.     UpdateFile2.clear();- Z! S7 o6 |! v3 [9 m
  355.     UpdateList2.clear();* j$ ^% I6 [' b8 g
  356.   }, l  q& A- @$ R. U- t  B$ @
  357.   if(UpdateFile1.size())9 u/ v8 I: W0 P3 Z& x0 f
  358.   {
    3 p& `1 [+ I3 g- {  c  l
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# b8 b1 D2 M8 A5 O) V4 ~. z
  360.     {
    + L; I/ x! H- u( |, n! S  d. i# y
  361.       file=(*p).second;
    ! D; B* Q: s8 F1 P) b1 ?% v) z% @
  362.       free(file);( b8 v* f5 Q) K& Q9 S
  363.     }% {" `: l+ V  L0 [
  364.     UpdateFile1.clear();
      x' d, k" @' G6 @
  365.     UpdateList1.clear();7 w4 o% t; [$ x
  366.   }
    " X' @5 j2 P$ O. E: Z) D; T1 M* g4 x
  367. }  - T* B+ T* Y! M5 Q
  368.   . w; |+ D% Y2 t0 N( T' d
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 `1 u/ ~. S) r) U
  370. {
    ! \" W# Y! ~: M8 X$ i8 L" \+ s
  371.   int c;
    , Y# m# J7 u! l- X
  372.   LPUPDATEFILE file1,file2;
    8 O- ?0 I0 I# X8 i- F* F
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;0 }6 U7 h" q8 [( p; K# q. w
  374.   std::list<CString>::iterator l;
    : W% F1 @! \% X$ n# a
  375. + Q  ~, V  V( U& V  B
  376.   UpdateLocal.clear();
    6 z( V# r! M' `# l0 e0 ]
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    9 p# c6 o+ Y1 U
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ K& L5 K# f! F$ Z& ^( m
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    # G/ Y  A/ c- I/ u3 d- Q; h% W- \+ x% C
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    - X: V" \3 L- o3 w/ F+ q- d
  381.   if(UpdateFile3.size())
    - a3 ~2 J# m3 h4 v( o
  382.   {
    ! y0 H. B  v! f- T
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ; z  t; o, X; r# k# _  E  ~
  384.     {
    ' I9 f5 J  l$ h+ K5 S' R! ~
  385.       file2=(LPUPDATEFILE)(*i).second;
      l) P, i- d" i
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 l: J! Q1 [8 k/ D# v! p9 g2 h
  387.       {
    ( s4 n: Y! q9 q( T4 B  c) ?
  388.         file1=(LPUPDATEFILE)(*p).second;
    7 i& j" N; m8 L$ O
  389.         file1->vers=file2->vers;
    & k2 T0 e2 z( ]. k
  390.       }; \+ e& U2 J' i6 M
  391.       else8 x5 Y# B7 Z5 p
  392.       {
    " m0 |& K+ k) T2 u, m" L- j
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + J4 J  l, l& \" v' D3 ?
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - X% F% s* L( A% j# v1 X. B) K
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    0 p1 c# S1 R2 a% _9 G0 B, O$ l
  396.       }% M" o1 b( |+ A4 i! m
  397.     }
    3 X# T3 h5 V. c$ G1 e6 X
  398.   }
    2 y7 N0 E: O7 b1 u
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 k" [! @- ~7 ~: K( R2 D
  400.   {# I# G3 l& C% W
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())* }' l, c( u0 f5 K
  402.     {
    , e! U1 I0 f: z8 o. h
  403.       file2=(LPUPDATEFILE)(*i).second;
    ! i: i( R7 z) k
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ w% A0 ~% b0 L- a- h7 ~- a; \
  405.       {
    $ I0 a* Z5 G1 n. I
  406.         file1=(LPUPDATEFILE)(*p).second;: g8 E9 w1 v1 U( |0 F0 Z4 W
  407.         if(file1->vers!=file2->vers)
      I. e* j# y- C& Y/ X* y! E
  408.         {8 @2 I1 Y5 C4 B; T; `( Q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 t! R* v6 N, v* @9 A, {" V  o5 I
  410.           c++;. ?* z+ O$ ~$ b/ S
  411.         }
    8 b! v0 }3 F0 ^8 g; ~, j1 |1 J
  412.       }3 D6 ]2 U7 [/ A  o
  413.       else" G5 D& m7 }) ]; X6 N
  414.       {
    8 r- ~9 M0 A# r
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 [, d' _; M$ E# c& b. K4 D
  416.         c++;+ X/ M8 H: g( c3 B" V) F1 o/ @% k6 M
  417.       }
      ]# Q$ U6 v. P# ]" s
  418.     }+ n0 p- H! B1 k6 Y& K: {& j$ c
  419.   }
    $ h" v  _2 h$ o" \% m
  420.   unlink(".\\DownLoad\\update.txt");- w1 i( z# K2 G2 j- s, A0 b# K
  421.   if(UpdateLocal.size()) return TRUE;+ H7 t4 p4 M, t
  422.   else                   return FALSE;
      b' i& h0 E  u& K8 \1 ^; b' l
  423. }
    2 W% W3 V) B* l2 S$ {

  424. + e+ R7 H9 K: b& e8 I6 h
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"$ J6 W" |$ O$ ^! K
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    0 M# c" ]$ C  U# g
  427. 3 f7 t' G" u* E  f- O
  428. 5 d8 \! _9 M  j! H5 R1 B6 ]$ f
  429. ' _9 r* n7 u/ w+ I3 m3 A& Z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    2 Y2 N* [/ V7 l" j' N$ z! |' z
  431. {% ^( [# y( O: O1 K
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    / ]# {5 C, y$ r( R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 W8 Q8 g. `# O+ x2 o
  434.   {$ l# Z* @: D  ^  k* U* |' V
  435.     char szLanguage[50];6 O+ {( D0 c5 B. l% L# _0 f3 _
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' l; w; l2 ~# }* q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; G( `, Y. s( y, k' t3 l
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . c! U1 }9 _9 b8 s: l! h; n% ]" ^
  439.     else                                   m_iLanguage=ENGLISH;
    4 B' D+ x, \- R  V' W; T
  440.     char szRegister[100];
    0 D' N/ V. v; E4 n- K8 P6 u3 E' ^
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . q8 n0 K8 h$ z" T% l2 B7 ]3 C
  442.     strRegsName=szRegister;
    " q8 J/ _  S) s- K
  443.     char szPatchURL[100];
    " I/ f3 |% H0 a& C5 x
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 E7 u* Z1 L+ m2 I0 A
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ [/ G% J- h, Q' T* o9 E( Q
  446.   }
    7 l8 z7 E- F' h6 X( ]
  447.   else* a- [1 a6 G% m" _' q. x
  448.   {' u0 i0 P5 {3 X
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# c( o9 k* M# _, p$ _& \4 b
  450.     strRegsName=DEFAULT_REG_URL;6 y1 E* |' _( s0 y5 J, l% j  j
  451.   }5 l( H& F1 e0 J0 A
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    " \7 ?- B. P% W
  453.   {
    , n/ m: A& b9 z) R
  454.     char szIP[50];
    7 ]- j' e, V* q% F  K7 b
  455.     char szDIR[300];, R5 v0 ]# E  x$ k6 i( W
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))4 S5 C3 L, Z7 v9 k" E" q) N
  457.     {
    5 x$ [3 X) _) E9 Q. D2 a
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");2 N( x9 |0 Q( [
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    4 z, n# |! f/ n
  460.       strHostName=szIP;/ G" C0 w0 R+ {9 A
  461.       strHostPath.Format("/%s",szDIR);, t5 K/ I# V: b7 H& L: E
  462.     }$ v6 z4 m& j; c& q# q: d
  463.     else
    0 R2 F. Q( H% S! B$ W9 t
  464.     {2 u& V, X( L( [# e% w
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 s, u0 V" m+ m  d5 z; ~7 Q+ [( P
  466.       {
    2 d. F. q) [0 [9 O3 I( R8 i5 r; U
  467.         char szLanguage[50];- j5 d7 X3 l  P4 \, W
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' F9 D$ u. h* g8 s! f
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 n$ @( S2 c, @+ ^, G6 b2 J' b
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 L& M. `- I1 n$ j+ I4 s
  471.         else                                   m_iLanguage=ENGLISH;
    ( x/ O- Z4 h1 |
  472.         char szRegister[100];/ y& b& A5 ~4 ]( Q2 b) C# |% ~9 q, H
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" |# d) {: z3 _
  474.         strRegsName=szRegister;
    * k" w% w: [$ h# h; ]
  475.         char szPatchURL[100];0 ?6 P) k5 u2 D$ a+ |' ]
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ s5 g/ f1 a8 q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 U% o& p' E! R5 E9 n
  478.       }& g- k" f/ c4 W& Y$ w
  479.       else
    ! |( N; T: V5 I+ x0 T
  480.       {* \- f. o3 }5 Z8 p7 E6 a
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! G+ V0 R% Q2 w: x6 x! t7 h. g
  482.         strRegsName=DEFAULT_REG_URL;+ f7 c9 N; T5 q4 ^' |+ r
  483.       }
    " g0 l  u% C. S9 h- X
  484.     }& d% ?: [& \4 [2 t+ Q* D
  485.   }1 s& H' }! c" A+ ^
  486.   return true;# K; z- _$ ~3 L
  487. }
    * v6 \9 \# K' U* f

  488. 5 j4 E, p" C4 }" n9 m
  489. #include ".\ZLib\unzip.h"( \# k# f" Z) [' E5 R; m
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 k1 l! d& z# I8 T! g: D$ F# t
  491. /////////////////////////////////////////////////////////////////////////////
    3 o7 g; u; g5 l7 K- L
  492. // CRevAppApp initialization+ p/ ]0 m$ |8 w/ b8 H8 `

  493. 2 O) O$ N$ D) {/ l5 W! n9 d
  494. BOOL CRevAppApp::InitInstance()3 ]  _6 J$ Y& \2 v; ]7 i. h. c! s0 Z4 |
  495. {
    , ?" E1 x& Q$ s7 K
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    $ i) S  G$ Q+ J% |

  497. ) W. H* d: o+ K, T# Z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    $ x9 Y- e5 w- W4 S8 J% d
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    4 Y; h- b8 @* |# O; B; Q
  500.   {4 b% ~* M8 |0 z; q1 P
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 Q5 Y8 O  X/ ?# K, l- d3 I# q
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    4 j$ |1 o2 M! \0 b" x0 `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))/ k4 y6 @0 p: I
  504.     {) i$ U5 i3 `% [2 M" ?6 R) B
  505.       strcpy(szPath,szPathTarget);1 [8 ~1 T2 R8 [+ D% K7 Y* T4 p4 L' D
  506.       SetCurrentDirectory(szPath);
    & ^# ?+ L; d) O0 }* V% v
  507.     }; o# X  t- u! b9 R
  508.   }3 s: G1 K/ y3 I, t8 p& y! t  |1 p
  509. #ifdef _DEBUG2 Y) l1 I9 R+ b# y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  @; w3 y& X7 B8 ?4 M1 E6 A/ N7 R
  511. #else5 |! P  w/ [6 U6 `( W0 e
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" m. ?  a: I# `7 K: q9 C8 E
  513. #endif5 n1 B! j( X9 e6 x7 d- d; {  e
  514.   {
    + j* D# v+ f# u9 r
  515.     char tempFileName[MAX_PATH];
    9 `5 x1 G, r4 T1 V/ @& Q
  516.     strcpy(tempFileName,szPathSource);2 P6 U7 k7 j  q5 F
  517.     tempFileName[strlen(szPathSource)-12]=0;
    * j7 K: a' z' X
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    * K/ K. d! e2 _; b5 o. W
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);0 g" x4 [# L+ i  E' e
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    : [1 z' B, N) M
  521.     return TRUE;$ x# x/ Z6 v2 G/ N$ ^" \
  522.   }
    ; g- {; `4 K' Z$ l: ~
  523.   // Nuke 0118: Delete run.exe
    ' l# y5 @! F) m. e
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    0 g/ |, A0 d# H! l( O) ^2 W
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ! k; E+ Y+ w1 t  w  u& {9 X; F
  526.   if(!ReadCfgFile("Config.ini"))
    0 R% }& L  ?/ N$ g
  527.   {
    " q0 A  T6 i% c6 B! A9 c6 p
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ! ^$ k  n3 \3 W$ Q0 H) |/ E/ a8 d
  529.     return TRUE;+ T* \: N* A9 F
  530.   }; E( u. a) p, o* |8 i, O
  531.   HANDLE mutex;
    4 N. r; ?; m# y0 R7 T
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 j" Z9 J3 A7 a9 Y
  533.   {
    ; i8 r* m6 n! Y, y( ]
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    2 J) W* x; `; x& ]1 H7 P
  535.     {
    ) R) W( u, e4 a8 S, N( i0 X4 |6 S
  536.       CloseHandle(mutex);
    1 v, Z) d0 g8 {
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);  X/ T7 y: `  v1 x
  538.       return TRUE;* ]( k6 S- `/ ]* p; A
  539.     }
      k; \3 d6 f; Y, x3 d+ t0 ?5 D
  540.   }  : L) D; E6 y& A( G$ e+ v( r7 X
  541.   CloseHandle(mutex);* j. w8 u0 L$ {# X( j+ R
  542. 2 @0 W& x/ j: t+ R
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    / n0 E! w- h% @. [" g/ V4 y

  544. 0 V5 U! s0 G7 z) ]
  545.         AfxEnableControlContainer();
      |. p8 B& ~+ u9 `. x/ l  W% f: _( i
  546. , \0 E7 {. p1 u! y  B
  547.   bCanUpdate=FALSE;
    # Z0 b% c" Z: ^( _7 B0 r
  548.   dwStartUpSteps=1;
    1 a' U& G& V* o2 G/ T: r* d% R
  549.   dwProgramState=AP_NOTHING;
    ) y% A/ }5 u, h

  550. . z0 I) r7 R9 b
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    % t6 p% w" O: J% u! N+ Q
  552. , E% S- j/ c$ k- [, Z
  553.         // Standard initialization- o, c- @2 }8 ]
  554.         // If you are not using these features and wish to reduce the size
    , J# R! X+ {7 ~2 T) [
  555.         //  of your final executable, you should remove from the following
    ( [) {$ S; i/ {) j; c4 W
  556.         //  the specific initialization routines you do not need.# w. E- H$ I3 E2 Q
  557. & E/ p0 G( L! J
  558. #ifdef _AFXDLL
    / @* m; ]' M: w' n) N3 L
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    4 g4 u: n/ B% ^
  560. #else- f, A. L( |; A5 D$ y+ |
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically0 K0 N1 z+ z! w3 z5 \
  562. #endif
    ! S# E5 W4 u8 x

  563. 8 a( |- Q' }/ j1 Y) }% z
  564.   dlg=new CRevAppDlg;
    " n- o" n; f( B/ q
  565.   dlg->Create(IDD_REVAPP_DIALOG);+ M# V2 R# ~7 p/ b
  566.   dlg->ShowWindow(SW_SHOWNORMAL);; k' q& M7 Y, W( H* o. y
  567.   m_pMainWnd=dlg;$ Y  d( m: B" K- w6 U* }7 z
  568. " c% r4 T* N5 G1 ?
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    * y$ v; W3 x# c7 h5 h
  570. ! F6 d9 O6 L1 r2 j7 J
  571. //  GdiplusStartupInput gdiplusStartupInput;
    * W9 d' J6 t$ c) W# m2 [# N
  572. //  ULONG_PTR gdiplusToken;' _! X9 I# f$ s* c( L, ?2 M+ |
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    , [1 h! g. C5 e, ?, G1 c6 q

  574. % j' \/ a4 v+ J+ o
  575. //        CRevAppDlg dlg;. Y; l6 G$ o1 ~4 x& X6 P
  576. //        int nResponse = dlg.DoModal();
    $ d8 r/ @# q/ h0 @' s% B
  577. //        if (nResponse == IDOK)) C9 k9 M7 Z9 C/ d# W
  578. //        {% n& ]; y- d/ x) [7 M2 ?: c% J
  579. //                // TODO: Place code here to handle when the dialog is
    ' ]# q: Q. F7 H6 F2 x6 v
  580. //                //  dismissed with OK
    3 N* T7 B) g4 z7 d$ u
  581. //        }
      ]1 g- d) n% }: F9 B! p
  582. //        else if (nResponse == IDCANCEL)
    ! e- {' I/ V9 P  z4 ~9 O
  583. //        {
    7 ]9 _: v  L8 p! k
  584. //                // TODO: Place code here to handle when the dialog is5 u8 E8 E: F* @
  585. //                //  dismissed with Cancel
    1 W) K5 L7 X, U$ P  H$ B  G5 ^
  586. //        }
    $ `6 I3 g2 @% G

  587. - y  a0 l/ r; |+ o! K- u
  588.         // Since the dialog has been closed, return FALSE so that we exit the. p( i# v! J6 ~0 r, T
  589.         //  application, rather than start the application's message pump.
    $ p; e* H& s/ h9 W
  590.         return TRUE;' F1 A7 V# B: g! e/ y
  591. }
    ; `  u* `- v& w. E0 ^$ i

  592. . s7 I+ e3 @0 a. g6 L! r) x# Y* C
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 x" Y* L4 e! i; N
  594. {
    - I* f& H$ S6 H6 E3 b: Z; v/ v6 T/ |  u
  595.   int i;
    9 k( g+ e$ B0 }9 X# }" h# F4 b
  596.   char *szRet;2 o3 q9 d3 M- i' v! q$ D

  597. / ^9 L. m8 t5 x$ c: }
  598.   if(pSource) { itoken=0; sztoken=pSource; }: @; y% F6 x( \( i; C( d5 x
  599.   if(sztoken)
    , K$ `3 c1 K3 i. D' A9 y* a6 Q
  600.   {
    ' O2 [# ?- W. V9 ]$ v
  601.     szRet=&sztoken[itoken];/ s/ z6 g! |% R2 p+ x$ z
  602.     while(sztoken[itoken])* T) I  C/ l$ Y' d- C
  603.     {
    : @' B$ i6 b/ k. |
  604.       for(i=0;i<(int)strlen(token);i++)6 ~  P) w) m6 O- I6 P5 @: G+ Z9 A
  605.       {
      F: I; M% |+ T7 H2 t: R
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])% L, I, I- Q. B4 u& [9 h
  607.         {6 ^+ ^! w% Z9 \1 L, X
  608.           sztoken[itoken++]=0;
    ( A+ D: K. c" O! E( H+ r6 l
  609.           sztoken[itoken++]=0;7 d* J6 D6 v) F. ^
  610.           return szRet;; c" N/ q- l0 ]7 I
  611.         }4 M! g* l) V6 P4 v# r
  612.       }1 i4 Q: `/ b4 h( W
  613.       itoken++;9 @: x2 ^, D) f
  614.     }
    & W, B8 P" b; `1 w: h2 O* j2 O
  615.   }- V8 @  I+ Q2 a1 T
  616.   return NULL;& y7 K- r7 C+ I8 s6 K3 V1 b2 H
  617. }! v: S/ q. p: }! P0 z6 Y4 I* n

  618. . x. k5 v1 ?  X1 h6 ^
  619. void ProcessProc(long Total,long Current)
    + S6 K0 d9 W, X) T0 w
  620. {
    3 C3 c( r" ~. Z3 i; `
  621.         MSG msg;
    4 Z) z0 Q0 m# b5 }0 Z; \
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    3 b+ r& V: Q. Q1 c& ]- D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));% \6 i6 u1 n4 C# Q1 Q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))2 g4 b* Y6 m7 @% M
  625.         {
    $ z/ V! e9 n8 Y  a, E+ ?7 O
  626.                 if(!GetMessage(&msg,NULL,0,0))' q+ m- N% o! P
  627.                 {
    ) n) K, k$ M$ Q
  628.                         return;1 y9 k5 k3 a. g% s1 o7 F5 a
  629.                 }
    % M5 B/ z- _& ~8 {- Q4 K* _! F
  630.                 TranslateMessage(&msg);7 D7 }  ?2 H* {+ q
  631.                 DispatchMessage(&msg);( R' O8 Z1 O8 v4 U5 _: W
  632.         }        3 u/ X4 W% b, e6 p' s2 Z
  633. }
    6 E5 C6 {! e3 R2 h/ e! N& W

  634. 9 D- u8 n0 s$ v& f6 Z3 C$ T! p
  635. BOOL bFirstChar=TRUE;
    2 i+ Y3 j0 v& a0 S

  636. 7 D+ l, N( ]' r
  637. BOOL CRevAppApp::OnIdle(LONG lCount): D& J& j/ E; G6 [  @+ }
  638. {
    ( @7 C% E& t$ M' i
  639.         // TODO: Add your specialized code here and/or call the base class
    . K* N' z. k* \4 Z! o6 `* \4 N
  640.   switch(dwProgramState)( I4 W9 y: Z8 @
  641.   {) J% [- }1 Z; d! ]0 A: r' @& ~; Q
  642.   case AP_NOTHING:" w! o4 W% r7 E6 H7 l
  643.     switch(dwStartUpSteps)
    6 u5 R/ z& Y8 N0 N1 O& ]6 ~
  644.     {" K4 F' T. u+ ]; ], X3 a
  645.     case 1:1 J1 U' J# p7 |( v$ }/ {4 e
  646.       {
    " T0 u$ X( p8 U3 F# ?% M
  647.         int i;
    1 ~7 V3 |: u2 S1 i' [
  648.         CDC *pCDC=dlg->GetDC();
    8 f2 \2 T/ v1 |
  649.         HDC hdcwnd=pCDC->m_hDC;
    - U/ k' V' q# d: d
  650. //        Graphics graphics(hdcwnd);
    . l2 Z9 D* g# R0 {  g' D
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    3 @1 x5 \+ k- m+ k9 c, a4 m
  652. //        INT iWidth=bitmap.GetWidth();
    0 [5 O9 j4 P" H1 I* ?( M. x
  653. //        INT iHeight=bitmap.GetHeight();2 ]/ @+ l/ H4 V8 i7 U
  654. //        Color color,colorTemp;
    7 z) \. ~9 [2 `& a! d. a9 m6 c
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    - w, @$ e: P) ?. y+ k
  656. //        {
    % a' L' X' W6 C) E
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ; ^& G! S4 M& o3 S1 N
  658. //          {8 x- Y- G6 f" s
  659. //            bitmap.GetPixel(iColumn,iRow,&color);" _" w( |. A/ m  G7 S; o9 z
  660. //            colorTemp.SetValue(color.MakeARGB(
    * r/ E3 \, y6 k. a/ _
  661. //              (BYTE)(255*iColumn/iWidth),& o  e: _( R" ~1 G! }
  662. //              color.GetRed(),2 L. k( R4 d1 U# h0 ^5 A
  663. //              color.GetGreen(),
    2 h+ t: S4 K2 B- |" N8 l( [
  664. //              color.GetBlue()));  l/ ^3 G4 n& \: s
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ' x- i9 @6 x% |
  666. //          }. N5 ~8 G5 I, q5 n  [4 r  F/ ~; n
  667. //        }
      c) ]! i/ y5 k& A4 X3 c
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    / _( K( l7 G4 f
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 c$ q3 ?# O/ U; r9 g: e% n' t2 Q1 P
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 D2 t: i2 u$ K( Q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 O) n' u2 \* m( z5 [8 D
  672.         for(i=0;i<240;i+=8)  r1 Z8 ^2 s8 ^) Q# w
  673.         {
    # e; P: F( Q4 p# B. X
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: Z0 v! {" i6 T. Z2 Z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + k5 {. o0 q( d+ d4 d
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / f" T6 b8 s! e- q& V* }9 O, o
  677.           Sleep(33);7 ?9 H+ V& b* A4 l3 B$ |
  678.         }
      V4 j9 f% }' s: ]: I* B
  679.         Sleep(1000);
    % `5 U/ ]+ e' r/ F0 a' K. d6 Q
  680.         for(i=240;i>0;i-=8)
    3 a* c, v% u( Z* b
  681.         {* A; r- k; j4 M  N. F: z1 A
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * t* s7 i" j5 f6 X# W1 Z) h
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % w4 L  a6 @$ G
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 U% a! Q+ j! A% z1 `! F/ S
  685.           Sleep(33);, H+ ]1 Q# a8 n' T6 }$ O* @8 c
  686.         }  W1 W# a7 I$ q2 U5 u
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    - `+ L  a- I9 E4 o
  688.         dlg->ReleaseDC(pCDC);
    + b9 |5 I: {- E* K. P4 }
  689.         DeleteDC(hdctar);
    ) |; O7 A( n0 ^
  690.         DeleteDC(hdcsrc);
    , x4 i" q5 ^  G
  691.         DeleteDC(hdcorg);4 _- B/ c9 M( U; i5 e# {
  692.       }" W2 V* ]* ]- r/ s
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);% b% x$ ~4 x2 j- N2 l3 V
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");+ m% C0 b+ ^$ S7 E
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    0 v1 ?/ l$ A5 R0 H; Z: \8 Y9 p
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");+ @1 Z6 Y1 l* q& E6 K- Z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 P' C  u! R6 M
  698.       if(!Dn.Connected())5 q; z1 O+ `5 r
  699.       {
    * p5 c# n7 B& R: c9 w9 }  h
  700.         dwTotalFiles=1;
    2 h" o$ U; C( v- ?3 _4 F4 u
  701.         dwDownLoaded=0;% o  f3 d. }' O  V
  702.         bSilentStep=TRUE;
    & Q/ K; ^3 \$ `; o
  703.         bCompressed=FALSE;0 t. |3 y5 m5 b" e3 K2 ]
  704.         strExtLocal.Empty();
    - U2 Z2 f# {2 Q7 n
  705.         strFullName="readme.txt";
    ) h8 o9 V' [" \. Y7 a7 o8 ?  o
  706.         dwProgramState=AP_CONNECT;
    ! [& h5 _& f- h6 z
  707.       }# x* @* P) o- [( b5 M% ~  ~) S
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    8 f- v7 F! X) d* j8 q, p
  709.       dwStartUpSteps=2;' M! E1 [! K6 A2 R% u7 Z: v7 D9 g
  710.       break;2 I" A3 A% k9 I) X- {0 a
  711.     case 2:- y2 u3 ~5 C. ^7 _" G
  712.       {
    $ j7 V6 }% N) l6 V
  713.         int iEOF;
    5 A3 W! E  D, i) L1 i7 [
  714.         FILE *fp;# ~* e+ a; x$ v9 D9 x
  715.         char szString[512];
    ! B# l. o( f6 J3 y5 o
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");8 {: W! s6 ^# G, z9 w
  717.         if(fp)
    4 {- G, i9 e; U+ D# x) {7 ]8 ]3 H
  718.         {
    ; H8 D1 |9 W4 x, x
  719.           do9 o+ J! n# t9 m# W$ f: \
  720.           {$ X0 b- N5 O9 l3 O0 {' V
  721.             iEOF=fscanf(fp,"%s",szString);
    # Q) o4 T* S- w  L0 n) ]) g% j
  722.             if(strlen(szString))
    ( y! o, m( S9 l0 ?
  723.             {( Q; s+ q8 \4 u* u, Y, q
  724.               if(bFirstChar)! F( _* o$ F) m/ `
  725.               {
    4 |& ]: }" ^% W5 M
  726.                 bFirstChar=FALSE;
    8 I0 P5 C1 W/ r% O. i; j
  727.                 bConnectIsBig5=FALSE;/ f+ a. N5 g8 ~. p: }0 D
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    - H5 T- J4 O8 I: H& }$ ~
  729.               }
    " `5 _4 ]( W/ Y' d, a6 w
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ) C2 m& Z2 H0 l* P3 K) O; ]' i
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));" m: k2 n% m2 w$ D7 u
  732.               dlg->m_ListText.AddString(szString);
      w9 D7 U! C0 _1 ?
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( h9 P2 w! }1 A
  734.               *szString=0;
    0 g9 ]# U& P+ T% o; N
  735.             }
    4 B, r; F- Y/ u( k, t! k
  736.           } while(iEOF!=EOF);6 v5 l, c) h1 W/ l6 r
  737.           fclose(fp);
    4 C  x* ^" {! r9 p$ @8 U, [4 ~
  738.           unlink(".\\DownLoad\\readme.txt");$ z# N; S; w3 H2 V" L
  739.           dwStartUpSteps=3;
    + X8 n# P; b9 V9 _* t
  740.         }
    % ^) \; B5 Z" A+ z* `. e
  741.       }  Q4 a# T. h9 q9 w) g  g
  742.       break;. u! F8 Q7 T4 H* P$ v8 A6 A
  743.     case 3:
    / I. d) v$ T/ r( S9 m. o5 k  M. i
  744.       if(!Dn.Connected())
    % s$ S( x4 P0 t  n5 J# q5 V
  745.       {8 ?" G9 U) \# e  n9 L
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    8 V1 `9 h9 b. Q$ z5 I, H
  747.         dwTotalFiles=1;
    ( G7 k( p# U8 ~+ }# y! B
  748.         dwDownLoaded=0;9 T& N" A7 u- m' h9 E4 j
  749.         bSilentStep=TRUE;/ t+ W& P7 ^5 j$ N; ^
  750.         bCompressed=FALSE;7 v& ]+ G2 u9 z) R# P8 n( O" ~
  751.         strExtLocal.Empty();  w5 y0 M; ^! _7 L
  752.         strFullName="checkversion.txt";, _( R0 i2 S2 v" p( s( g! u
  753.         dwProgramState=AP_CONNECT;
    1 _0 v$ p/ {6 k# v4 @
  754.       }: b4 @5 h9 O8 c: }: ~5 \* d) L
  755.       dwStartUpSteps=4;
    ! l, s5 |* g' z" \
  756.       break;
    , }7 {! K% @* X6 u# y, g
  757.     case 4:
    + k( F; |. N! |
  758.       {
    % ]- c' ]; {; V& f
  759.         FILE *fp;
    1 Q! E0 c. G3 o/ A' h' l) ?( g
  760.         char szString1[128];* E" K  L6 ], [& a3 n4 p
  761.         char szString2[128];
    0 `7 U" ]) ^' @; _8 v4 {, f& s
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");4 d3 M4 \' v9 o
  763.         if(fp)4 A, o, s4 w0 h
  764.         {
    5 \9 K: p2 G- @, q4 k" N
  765.           fscanf(fp,"%s",szString1);
    5 T9 e8 _: s" |3 L
  766.           fclose(fp);2 ^! z& X9 L& V9 H! l
  767.           fCheckVersion=atof(szString1);
    ( w5 Y& W, r% J; X3 h: M
  768.           fp=fopen(".\\checkversion.dat","r");% ^9 U8 y# n- V1 n. Y2 d
  769.           if(fp)
    # k/ c/ \% Y( t% B- z, A+ A1 n; N
  770.           {
      F; ~9 l0 a4 ^! K* u& V
  771.             fscanf(fp,"%s",szString2);
    * M, K3 r* k# s% }; p
  772.             fclose(fp);) Q9 m/ u7 K  G6 ?0 {4 J
  773.             if(atof(szString1)!=atof(szString2))( W9 n1 c: j0 \9 ^
  774.             {
    " |' G' f6 b& c& t4 F0 r7 s1 O, I
  775.               if(!Dn.Connected())  Z, E$ ?+ I" D3 m! u! i# m1 L4 L
  776.               {( w$ J* ^7 t. D; N* i: {  z
  777.                 bFirstUpdate=TRUE;
    & p9 t' s! r1 j# |, B
  778.                 dwTotalFiles=1;
    ( L1 |8 {& L  C$ A1 D
  779.                 dwDownLoaded=0;
    ! e2 r- v9 \5 Z: H- l- E% `8 G; V
  780.                 bSilentStep=FALSE;4 u+ E$ n4 x! M" u! W
  781.                 bCompressed=TRUE;0 x2 n7 H& p* q5 B( o2 M
  782.                 strExtLocal=".\\DownLoad\";5 y2 E. q7 h2 S  R5 G6 \% z3 `
  783.                 strFullName="update.txt";/ O$ [1 W" K" H" A$ o
  784.                 dwProgramState=AP_CONNECT;4 |; B/ {. {) I3 a: u
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- F. W1 J' W2 V* Y; a
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 {- S7 f7 x$ X: ]
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 j; V. J9 p2 V; e8 k" @

  788. 9 v8 T8 K  P# E2 ^
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* a# j7 r9 R8 i: Z& R
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ) K' ~! L! P) v7 E: b0 [* t' ^
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    7 G: c$ T1 t  y  @  L+ D
  792.                 {: J- G" N6 Z% I9 w- b. I. i, t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");& w% M/ K+ Z; L
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");2 J. _& A9 D+ j0 ^! M# }6 U) K8 j
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");9 o& Y  n# v+ c' y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) t0 A1 u6 {/ w' ?$ n3 y1 s# J, X
  797. - _+ @! @& @( o4 u: g! q
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");& u. Y2 q. X. x5 x
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: n. p+ \2 Y7 O7 |- H
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");- Z6 p- V; |- v2 q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) x1 @3 w* Y  w& w' O, X
  802.                 }- J$ U" s" n8 w$ C9 A
  803.                 dwStartUpSteps=5;
    7 g' ~- ?' A7 j7 P2 ?" ~! h" A" t  C: O
  804.               }
    / Q* P4 [8 A8 C4 M, c/ G+ k
  805.             }6 o& u- I8 k8 d" v, h
  806.             else
    . [$ S9 Z$ C  ^) N, Y  A5 a
  807.             {
    ' b- d6 V0 v- |6 U/ K9 d
  808.               unlink(".\\DownLoad\\checkversion.txt");
    , |% J& l  R2 B1 l# b: v
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# g% v5 J: x' w- [6 T
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- q" c- k/ b* Q5 Z( W! R  b
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 X+ r# v7 S9 n4 v" _/ I

  812. ' o& i9 z: t' I
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 K+ d0 u. _. j; o5 ^0 P; _
  814.               dwStartUpSteps=99;; \3 @; `, k1 O
  815.               bFinishUpdated=TRUE;. {# k7 H/ y3 K2 D. d+ L
  816.               bCanUpdate=TRUE;: E# o8 x( o, i4 y
  817.             }$ g7 C" R8 I3 j$ y! X
  818.           }* v& \+ E) r, X) u. Y$ F
  819.           else
    % Z/ |0 s- f! r4 n$ C$ g
  820.           {
    8 V) X* j( m; H5 ]! I  T
  821.             if(!Dn.Connected())
    / o2 ~7 X' J6 d/ F  j7 G
  822.             {1 T, b5 ~9 Y/ v  Z" f3 Q
  823.               bFirstUpdate=TRUE;
    , C3 h% w& y/ _
  824.               dwTotalFiles=1;
    " G; Q. D# I( ^  i8 T1 r
  825.               dwDownLoaded=0;
    8 F4 ]- b2 S5 |: o6 s! t
  826.               bSilentStep=FALSE;
    ) C( D7 @, Z0 E
  827.               bCompressed=TRUE;
    3 F' u0 u5 r2 [4 U( S  `' g3 T
  828.               strExtLocal=".\\DownLoad\";
    * s' o- |# z$ Y% {; w6 f/ l, Y
  829.               strFullName="update.txt";
    3 x% \% j( P' G$ |5 l( ~" ]
  830.               dwProgramState=AP_CONNECT;' B+ u2 J% W& K* I% G2 y+ G  K
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    0 O: y' N6 i: c$ n
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, {0 e) Z5 f, d+ j1 U8 o" s
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");+ [2 L2 `1 O6 O8 @
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 d: ^5 y: x+ l) ~
  835.               unlink(".\\DownLoad\\checkversion.txt");9 F. |" Z1 }3 X  n& U- ~$ A; w
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)& \/ `. P- U9 O7 }3 U
  837.               {& }# G9 C( z$ p! [' r
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    + t3 _/ N0 M3 o( k
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    . e! N2 E3 d1 Z! Q) Z4 ]- x8 c4 _. {
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ) {; b0 q8 A7 R
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 ^3 x" f8 x' x/ \6 u
  842.                
    2 B2 ?4 r% ~& ?3 C
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 B, |3 x) E8 K% V! o; G3 }
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");( j* Z  ?. ?- G0 D
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    : G2 d7 ~) p- d) I5 U# M% t, E
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , d9 @. g: a4 K- w( s$ H) i
  847.               }$ \* Y1 Q; V* C3 H
  848.               dwStartUpSteps=5;- \# l$ J: }, G$ R) {' R
  849.             }
    - t4 `. o# S; ^$ L
  850.           }! D' _' E) h8 b- `3 I: X
  851.         }, n& V, m- d! B. R, W. U3 z
  852.         else( e5 @: k' n. j8 n" H
  853.         {
    ! x: z+ ~4 Y& X: @, G! z: u, Z
  854.           dwStartUpSteps=3;
    0 n+ j, m2 A4 m/ |# q$ Z
  855.         }
      u- K& B. {& f4 s9 R. ^2 W
  856.       }
    * q: Z' X( ?: y' t
  857.       break;
    + d1 \8 |' f! T5 ~  ?% N
  858.     case 5:& o; I- o: M5 P1 D0 Q. T4 W. K' k
  859.       {" `- k; i/ ~2 x8 Q$ s* H( u2 Q
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    , w/ `; j/ |% k5 S- R3 Q9 j
  861.         {5 J/ U  s7 r5 ?+ a; m  v
  862.           int opt_overwrite=1;
    9 U; A$ r8 O- g. W- ~
  863.           int opt_do_extract_withoutpath=0;, G$ t. G7 u; L* m  R; ~+ f" Z
  864.           unzFile uf=NULL;0 E. X2 H9 h8 ]9 [  ^% n
  865. : O1 O0 M/ |- X5 w
  866.           uf=unzOpen("Wsa.zip");9 M# j$ F# ]- A4 ^/ ]+ l  Y" m- i9 u& |: V
  867.           if(uf)
    7 K$ v$ j& b$ q  w* Y
  868.           {% p; c/ c) }9 O% @. d2 t* r% M2 {
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    / l( [3 o( Y& Y. y0 y" {2 }' u8 r  j
  870.             unzClose(uf);4 P; f2 H% e9 I
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    * _; F( \. v# }! U' P3 A" e
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    8 {6 w5 d; x. J/ K& Z% [: Q: Q
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");8 F8 W+ o4 d: G+ f% P' w
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. F1 s, }6 ^+ ^* U7 b
  875.           }. S2 }% O& }; n8 h+ k/ Y! k
  876.           DeleteFile("Wsa.zip" );2 P8 s2 c9 o/ }3 W# `
  877.         }/ `2 M+ v" t* t# ~2 s, y3 a

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

, C4 I) B1 y# {; @8 S; A- H& ]. G5 q) z; N

評分

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