找回密碼
 立即注册

CSUpdate.exe源代码

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

" \$ K( R# d  C
  1. / RevApp.cpp : Defines the class behaviors for the application.. C; f* _, H( U
  2. //
    2 W& R" t. D& E( S) p

  3. - O1 K; Y4 ^9 m
  4. #include "stdafx.h"0 t5 ~. ^+ {$ `' Z, O

  5. ' _( j! d& N  S: t. W) U
  6. //#define UNICODE
    * U$ I6 t. Z6 N! s# ?+ j
  7. //#include <gdiplus.h>" Y2 q6 |, U+ |. f! `4 w; M
  8. //using namespace Gdiplus;
    . {$ Z% A, ~9 _$ C) p
  9. & |  g7 y7 z& P& t
  10. #include "RevApp.h"
    : x' t+ ~2 N. m3 \# d& ~
  11. #include "RevAppDlg.h"
    2 f5 I1 d: n: c' q

  12. ' z/ Z& h9 j3 b- z) K, _& |
  13. #pragma warning(disable:4786)2 Y! r! G" S: t" x
  14. #include <map>
    5 E6 _2 o& k# Y* u
  15. #include <list>+ C( J$ B6 U! q8 k) ~  w0 G7 ^
  16. #include <direct.h>( g6 Q# H$ f$ J) A
  17. ! V3 q) {, x  x- [+ z' e9 n
  18. #ifdef _DEBUG
    $ d' I  K/ [' P- }1 B5 K  @
  19. #define new DEBUG_NEW0 J( P! U' Y. A) ]7 x' g  q
  20. #undef THIS_FILE
    9 }! [, o' q- s+ F
  21. static char THIS_FILE[] = __FILE__;
    7 Y' D  k6 r% i/ s! o  C
  22. #endif
    2 }5 d6 ?+ b  A& W+ Q" D
  23. #include "SkinResDef.h"$ i. X& p/ C/ O
  24. #include "ChangeBG.h"( C$ v; |3 E0 m% r2 D
  25. #include "AFXINET.H", \4 n: d, Q# T& Y/ {

  26. 4 b/ Q; T) i6 g2 t+ K0 b: D
  27. #define TRADITIONAL_CHINESE 0
    . \. S" _+ ~* D6 m2 x
  28. #define SIMPLIFY_CHINESE 1
    % D; H+ D0 G* g/ k
  29. #define ENGLISH 2# H9 e9 {' G1 l" Z" R/ c
  30. int m_iLanguage = ENGLISH;
      f, X/ Y. k8 r! `; m
  31. /////////////////////////////////////////////////////////////////////////////
    6 x% ^# n7 @) n4 j2 T$ r! T
  32. // CRevAppApp; x' _. ^& Z" V1 H! v

  33. 0 R, J, l5 ^  @+ }
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! a( B% l9 l: G# _; \! v2 M4 S$ A
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ( U) M' {; N+ f5 E
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.4 ~8 |; N7 T2 P. m
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    0 w3 t: t) P$ x9 v3 s
  38.         //}}AFX_MSG; }6 k9 _% j; y- g4 `! ?7 q$ c8 ]
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)4 B* j6 D$ q/ g) U& n
  40. END_MESSAGE_MAP()1 d0 _6 Q/ g, [+ D
  41. 8 D5 j  S3 Y/ M
  42. /////////////////////////////////////////////////////////////////////////////
    , A3 r0 U3 x8 r3 F0 S9 h$ t
  43. // CRevAppApp construction
    1 h# ~( a& |: q! p9 p* j

  44. 6 u# {; X$ O3 a
  45. CRevAppApp::CRevAppApp()
    6 |6 m1 T7 D! m9 h: \/ C
  46. {
    * b- D) G8 X$ q0 {- }- x$ o
  47.         // TODO: add construction code here,
    % \$ V1 c' k7 T. f, V
  48.         // Place all significant initialization in InitInstance
    * p0 |  ?9 ?- l9 `
  49.   bDisplayIsBig5=FALSE;' Z9 ]0 m, \$ \% Y* |* W1 L4 W
  50.   bRestartUpdater=FALSE;
    * S- Q- f$ u; e* n5 j
  51.   bFinishUpdated=FALSE;' ~. V; |8 y1 [
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;8 v! d, q4 |; V1 ]* Q6 P0 H4 O; J
  53.   InitChangeDataBig52GBKS();- n1 d1 ~8 i8 ]7 }
  54.   InitChangeDataGBKS2Big5();& v& V) p; A( h1 [; W
  55.         //
    3 R* }5 N: H# B1 e& {
  56.         bClickRunExe = FALSE;
    ) S4 D8 j+ \: t$ p* f3 L4 b
  57.         //9 u) A; B7 o$ L0 P5 K* J
  58. }( U' v# G( ]# t' m, C0 B
  59. 3 R( }: s3 r. `1 C
  60. CRevAppApp::~CRevAppApp()
    # m, l+ x: e& O8 L4 J
  61. {+ Z6 Q5 H; ?, t- ?+ @  ^# C7 ~
  62.         // TODO: add construction code here,0 X( I4 D4 |6 ~" T4 c7 E! y, N
  63.         // Place all significant initialization in InitInstance, A) A0 P& R& U9 i
  64.   EndChangeData();
    . c- P' i! U; x% D7 K3 |9 {
  65. }
    : P. o7 |- Q7 U- W1 ^/ \: j

  66. 4 b5 C: W6 b: T0 C' L' Q( x8 f! O3 f
  67. /////////////////////////////////////////////////////////////////////////////1 o5 }6 H) i- B! W3 }7 a
  68. // The one and only CRevAppApp object% {8 Y3 L& \* }: l! t) v+ ?0 T

  69. 8 @8 G$ v) I+ K5 G8 m+ a' q
  70. CRevAppApp theApp;! i( J! ^4 D8 ^. p$ n
  71. * I: a" s8 h# U9 e* {% v* U, v
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)4 q* d" \8 L- u% e
  73. {
    / t7 K7 A2 o/ K: z& z  r
  74.   int iEOF=0;
    " r- p0 \) o6 D! D  k2 t- b# Y. c" e
  75.   char szTempName[MAX_PATH];! B: Y# d* }. W; l9 r
  76.   *szFileName=0;
    8 V9 J% i) M# L4 \
  77.   iEOF=fscanf(fp,"%s",szTempName);0 I6 [. I# F0 E  r0 T. R& o
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    2 U$ q, g2 a- \, S/ F
  79.   {- h0 e5 i7 ^+ a- x% K( X
  80.     strcpy(szFileName,&szTempName[1]);
    7 q4 V  s9 _9 e. I
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ) {. b6 M2 ~) o+ N/ M
  82.     {
    4 U7 b8 z3 P# Z1 Z9 l9 F% i
  83.       iEOF=fscanf(fp,"%s",szTempName);
    . _; U- K; h& B2 s6 t
  84.       strcat(szFileName," ");& {! p" N3 M0 s) N
  85.       strcat(szFileName,szTempName);& M2 w6 }: r. A" w$ f9 R- q' {: V
  86.     }
    1 f+ }! `" d* k5 `7 g
  87.     if(strlen(szFileName)>=1)5 V$ h" ~& R) u2 D! Z& D: _6 p6 R
  88.     {" G7 |% t7 w" a3 o# G- k. o
  89.       szFileName[strlen(szFileName)-1]=0;
    6 v+ _2 c& @+ {7 S9 T% m
  90.     }
    . q, ^2 e( k+ p+ u6 R8 }  r, u
  91.   }: S; `; c+ ~$ T" q# B( P
  92.   return szFileName;
    5 Y* [$ V! g" O' w* S- w
  93. }
    / j1 k6 d* \1 Q& }$ p7 w7 \

  94. 2 x. D4 B5 y9 N+ e& r
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    6 d/ k+ L3 q  H2 a, f: Y' j
  96. {8 i6 J1 O" Q8 }: Z) h* T% k7 u+ W: J4 x
  97.   FILE *fp;
    . c2 k8 K2 o/ y* F+ Z% J
  98.   char *key=NULL;/ \0 q1 y1 N4 ^4 `9 ?5 t+ ~
  99.   char version[MAX_PATH];
    6 I) _  @& b9 E, a3 b1 |! e
  100.   LPUPDATEFILE file,olds;. F: {% y0 P7 m- i
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 m' W. }. d! z6 L) j8 K

  102. 5 o4 [1 {  W- h! r6 l! t5 W2 |/ d  q
  103.   UpdateList.clear();
    ) ]3 {" r) E( |' P
  104.   UpdateFile.clear();2 G% \; `: I4 T3 {1 F) n
  105.   if(GetFileAttributes(filename)==-1) return false;
    " n. t9 d( F4 _0 a" f. N
  106.   if(!(fp=fopen(filename,"r"))) return false;
    & }1 Q- B' W( }4 S/ P6 r
  107.   fscanf(fp,"%s",version);# p/ c, \) O7 p
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }# |$ h) j6 c! Y9 Q  i$ [. l
  109.   while(fscanf(fp,"%s",version)!=EOF)" X; h- z! a9 a/ _
  110.   {
    9 Y9 v7 D( `6 p4 Q* j2 g. S7 i
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! B  o% ^, h/ S+ ?0 F. H  l
  112.     fscanf(fp,"%s",file->path);/ n" @  A+ S, z; S4 j! i& g6 e
  113.     ReadFileNames(fp,file->file);
    4 M& L* y2 n% \5 M3 h
  114.     strcpy(file->full,".");
    5 m4 @; v  a: Z4 ]+ Z; e# K: f7 x6 y
  115.     strcat(file->full,file->path);
    ; a) ]. E, `1 F2 d* L7 G$ }
  116.     strcat(file->full,file->file);8 `/ ]" v3 E, y: u8 d
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())$ T1 G& i* `4 q; P0 M1 \/ h. V
  118.     {
    4 L# f, X$ e; O* ^% ?; o( W# B
  119.       file->vers=(float)atof(version);
    8 B  {4 @8 S1 p* g! a7 h$ I4 X
  120.       UpdateList.push_back(file->full);
    : Y  Z9 q7 c/ X. e# }5 m1 n. C
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    2 R8 e9 @) N6 A9 J# G/ F2 n  |
  122.     }
    ; I1 f. }1 ^! W, h  r
  123.     else6 g, X5 x; `6 y8 h, D  }$ e
  124.     {
    , o, J, o2 z1 ~2 q6 w
  125.       olds=(*p).second;
    % Q- g) a0 I& S9 C
  126.       if(olds->vers<(float)atof(version))
    * a' G3 f+ c3 j1 l3 d7 m3 B
  127.       {
    ) j& b1 O. l  W! k. y2 n, ^( ]
  128.         olds->vers=(float)atof(version);
    * {3 f* ^' W+ {, b# \; ]. T. X& L- q
  129.       }
    / A& Z2 l. v) o9 A% n/ U9 z
  130.       free(file);
    / [' G: Z+ g" J! ^! ~3 X# e. l
  131.     }* R. f" V) E% i: p) C
  132.   }* N) G- w6 ?5 i# H# {
  133.   fclose(fp);
    & J" w+ R0 ^) Z/ k. n. j
  134.   return true;! N# s, ^+ p5 u/ @1 P
  135. }
    : p$ N8 z4 m, f2 k; d4 `! c

  136. 8 r# T% w$ `$ K$ M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)8 w, W! g. v/ T/ z% r/ d; q( h0 l
  138. {
    & v+ ], F9 X/ ]9 |2 ~2 i7 T
  139.   TCHAR  szFull[MAX_PATH];& f' `+ p5 i! m) {; W' R1 g
  140.   TCHAR *token,*inter;
    8 ?# U) S& Z) E7 z4 p
  141.   *szPath=0;
    5 x; f1 _; D  l# v5 C. r
  142.   strcpy(szFull,szFullPath);
    ' o- i2 t+ V9 Q* [$ e9 X$ f& O
  143.   token=strtok(szFull,"\\/");
    : I; `. u; C0 p; l( D
  144.   inter=token;
    3 v: D) N8 s% _. W. \; o$ P& [$ Y% Y
  145.   while(token=strtok(NULL,"\\/"))" M# k0 U  h- m/ s4 M* x# m, w
  146.   {9 i1 q0 h4 V& X, E# Y
  147.     strcat(szPath,inter);
    . M; e0 j% d) ]6 N( ^8 ?$ ~& @$ R
  148.     strcat(szPath,"\");
    1 S0 O: A& h* T/ V# T
  149.     inter=token;0 J# J3 P0 z+ u' c
  150.   }
    ' z6 x% a! s6 F& M" X' b
  151.   return strlen(szPath);2 ~) R+ `; J9 z) R
  152. }! Q$ E5 p" F6 _* G1 B

  153. 6 i3 a0 y& U2 w+ c
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ( [+ L5 q- o4 I$ l% x5 _
  155. {! E- u, k7 ~' }* {: k
  156.   DWORD attrib=GetFileAttributes(Target);
    & Y. F4 |; Q$ r0 Y
  157.   if(attrib!=-1)0 ]; C2 W: V  a
  158.   {
    ( c7 y7 p$ w  W# V+ f# `
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))4 D- d; \) x/ _9 b9 a, w  Y
  160.     {
    : M5 \! r9 Q; h9 ]4 e
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);/ J+ q$ |7 J. Y: ]: k, A
  162.       SetFileAttributes(Target,attrib);5 x6 ~) I3 |+ W
  163.     }/ G- F' D9 L1 B
  164.   }
    3 H+ ^! a; t3 c1 Y" i1 ^5 R
  165.   CopyFile(Source,Target,Erase);
    , v/ G3 |; e8 n( i8 P
  166. }
    2 [' s8 i7 a7 q$ n6 I) J" E

  167. 9 {! [5 |. E$ r0 k" C. Z# @
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ; R6 I! j. H& T0 ?, \4 w
  169. {6 q/ r; h5 I) {: d: |
  170.      FILE *fp;6 G/ ^* k# L6 ~5 v0 ~
  171.      char  szBuffer[8192];( F1 W. y$ Q" \1 C6 u) W
  172.   va_list  argptr;
    ! d% N4 o' f2 ^7 M1 G9 t

  173. 3 q0 {" _9 w( C8 G5 d
  174.         va_start(argptr,message);. X* D4 `+ ~: V) A
  175.         vsprintf(szBuffer,message,argptr);% D) E; A4 M3 f# y7 l; F
  176.         va_end(argptr);
    . u( j! n0 v# Z& S
  177.   fp=fopen(FileName,"a");! m% c: b7 H2 E) `: c" W
  178.   if(fp)
    # t* r$ ?) {* A9 r
  179.   {# d7 }0 R2 Y' w3 l$ ]- y$ W
  180.     fprintf(fp,szBuffer);
    . X3 Y7 v: J" T2 x/ }& z
  181.     fclose(fp);
    ) ?2 a7 F0 j) S0 |( `: W
  182.           _flushall();
    ; a0 w7 q9 [: a9 e, H+ e
  183.   }) R' j' N/ _! r. f& ~; V, J
  184. }/ q: r. r3 T# E0 j2 f9 N

  185.   Z: S+ O3 D+ x' j; R1 F! R$ W' ~
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    2 m6 ^. j* n4 J0 r5 E* F
  187. {
    8 p* @0 r* {0 q1 X
  188.      FILE *fp;! x' r/ ]. |. u, J: q
  189.     DWORD  attrib;9 L% R# K5 x" ^; w3 U5 T
  190.   attrib=GetFileAttributes(FileName);
    + e# |- x2 C4 Z3 b/ W/ ^
  191.   if(attrib!=-1)
    ) y' B; r; z. ]* h6 A# m% D
  192.   {$ `5 P3 Z0 H6 A7 ^4 A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ! P' G  {- L# w3 p
  194.     if(!SetFileAttributes(FileName,attrib)): c- g2 k+ M: f' w( c* M5 j
  195.     {8 m/ H4 k4 U- I+ s
  196.       return FALSE;
    & Y/ M9 O0 ?, }% L) B0 J5 ?, D
  197.     }
    * d" l$ |$ S0 p! ~) A; r" f7 y+ _
  198.   }
    ' y; t7 H! W1 ]. K3 G9 R
  199.   fp=fopen(FileName,"wb");# Q1 D# B7 E3 K& Q/ I0 N! z7 h
  200.   if(fp)
    9 S) S+ n- B; M
  201.   {1 i  {$ m9 L: r7 [  l+ l) |- F# I
  202.     fclose(fp);( x6 n* b) I# |6 O4 j1 C; [1 W7 X
  203.   }
    $ y/ Y) }* R7 _. ]1 e& a
  204.   return TRUE;
    $ m. `) Y& Q8 D- |$ Y
  205. }
    + O" p" O* t. k: k: s

  206. - p- V  |: P6 R3 e( I) s
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    7 M" Q3 o8 B& ]$ b$ i
  208. {
    ( F; {& g, r8 g( V: B2 |
  209.   char filename[MAX_PATH];" ?3 Q) l) v  [4 L5 z
  210.   LPUPDATEFILE file,olds;1 U& P# k- B& W! P
  211.   std::map<int,CString>::iterator i;
    + |8 h9 {, m) i4 e% x6 ~
  212.   std::map<CString,LPUPDATEFILE>::iterator p;- _$ L3 t5 R; Q: K6 [7 u* L6 W2 h
  213.   std::list<CString>::iterator l;
    & f3 [$ ]# c  p, l* B/ e
  214. ( P# `* [# W$ j, T1 o
  215.   if(bFirstUpdate)6 ?) q% |6 S0 r. Z: P* O
  216.   {
    ( j: ^' h2 f' P
  217.     dwCurrFile=0;
    ; Z( T' s/ r) N+ Z2 ?5 A
  218.     bFirstUpdate=FALSE;
    + b( |3 |8 s4 t& V+ R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) Q! }% T. K$ N9 V4 B5 `8 A% f' O
  220.     {
    1 ]9 T& Y; B* O# T' n* _
  221.       dwTotalFiles=UpdateLocal.size();
    7 m1 }+ {* B6 u- U0 [0 s& @
  222.       dwDownLoaded=0;
    0 q' D% S5 t  k
  223.       bSilentStep=FALSE;
    - {1 ~1 B; i6 _
  224.       bCompressed=TRUE;
    . `' N9 A, x( E* Y  P
  225.       strExtLocal.Empty();
    ! ~. m1 y5 T/ i2 A. }( `& P
  226.       strFullName=(*i).second;
    ' l) A) G" n; g
  227.       dwProgramState=AP_CONNECT;+ G5 Z6 Z4 Q; r& r3 |/ ?. S) `
  228.       return TRUE;
    # v4 x# O1 c3 D; W
  229.     }( b- V2 [1 i7 V/ f# |
  230.   }
      o( ]( I9 C# ?+ o9 d
  231.   else if(bRestartUpdater==FALSE)
    $ J) d! u! H% ~
  232.   {; `1 J- B4 t' U6 ~! V2 L! `
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())3 x0 W" _+ X! Y, U8 D
  234.     {
    ) W" a1 ~! l4 u7 b) i
  235.       file=(*p).second;1 ~" B- A2 z5 Z) ^! Z( u
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()); v" k" `- g3 D4 d0 X! i
  237.       {
      }6 E( j7 ]; E  d" Z* g6 P) _0 E
  238.         olds=(*p).second;
    : X* I) Y  Z1 Y& ^! T& U8 Q
  239.         olds->vers=file->vers;3 T4 {( r+ _8 |5 q* K4 S. J
  240.       }
    9 R3 e6 v! y4 S1 e
  241.       else, O6 \1 ?7 D, w% U/ D& P' S
  242.       {
    0 c! H, a& w' t+ Z% O+ G
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- Z# Z, d2 G  @) H
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    / o6 w- y, F* w: R9 D( O! S- _4 s
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));' A# I  L$ h! n
  246.       }& W+ x! X$ ?1 ~' C7 ^1 w$ `
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ! h; I& J1 Q6 ]) q: u6 R% p
  248.       sprintf(filename,"(%s)",file->file);
    8 B" R- ?8 M* A
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 g3 d! O  @4 F5 \8 \( @( ]. ^
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }5 W8 C' X2 m) ~6 Q$ D' o/ }, j
  251.     }* o' r. m8 W5 w
  252.     dwCurrFile++;1 F- r( k& a" I3 Z
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! g; o% |) U2 k8 C
  254.     {  Z9 w' w" q0 t8 f1 w1 O2 a- {
  255.       bSilentStep=FALSE;
    1 w2 D. X* S3 k
  256.       bCompressed=TRUE;
    1 A0 U( w) [+ k2 m, k/ q0 s) }9 s
  257.       strExtLocal.Empty();
    1 Z' L; v2 K. R/ C8 N. [& b
  258.       strFullName=(*i).second;
    ; K1 Z% d7 L& W3 m2 a+ n; S4 V
  259.       dwProgramState=AP_CONNECT;2 e! A- P3 N/ a' @' ]1 `- S  A3 t5 {
  260.       return TRUE;, K# s3 d, r4 }' q
  261.     }3 t0 a. p( Y' ~
  262.     if(!bRestartUpdater)* W+ Q7 p) j! @4 A* [
  263.     {3 z3 k& _: X5 H/ |& P3 {$ C
  264.       int iCurrSize,iFileSize;' N0 u: C$ [: g
  265.       iCurrSize=0;( J0 Y) o7 l5 ^2 E
  266.       iFileSize=UpdateList2.size();
    1 S( J1 i& `+ ]' @+ H# j
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ) P* Q3 \! U& B; L1 ]3 d. z# H8 n
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    , V$ m0 q: x/ ^# P, |- ^
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");% f: a# D4 \1 m) N4 W* }
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# d- F2 ~. ~2 {9 [& I/ S
  271.       Fclearf(".\\update.dat");% c) F% ?  T3 d
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    6 Y% M8 h4 D5 b# }0 x: ^! x
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)7 r% ?1 V. ^( A" V' E* `) X
  274.       {
    : C% ~+ Z7 M# i8 w
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())8 G7 J- t  V$ `
  276.         {
    , G$ f- o) W0 ~" h  Z
  277.           file=(*p).second;
    2 D. U) k& O2 ?8 G& G3 ^
  278.           sprintf(filename,"(%s)",file->file);
    , _9 F6 u0 Y2 ~
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 h2 B6 N  f0 q
  280.           iCurrSize++;
    2 [& V: o  t1 Z1 J3 |
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    + e# [( I" w6 H: v3 W
  282.         }2 i; R6 x' a' t- D/ |8 x; r) h
  283.       }& m& H! }. F0 x/ a
  284.       unlink(".\\update.txt");
    2 u% O. A: P0 B, s' u
  285.       unlink(".\\update.tmp");
    ) ^8 m  F( b) M" q! c
  286.       Fclearf(".\\checkversion.dat");
    3 D% k; v; y1 t: N+ r* t9 k: O. ]
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);% H* L8 n9 Y) {
  288.       if(UpdateLocal.size())
    ( V* P. n! F3 ^  u. M8 d7 a( }
  289.       {
    9 H: e$ x2 U% ?! ^6 ?4 ]2 q
  290.         UpdateLocal.clear();
    ' T3 Y: }. `3 }9 @0 N6 y8 V1 p
  291.       }& h" a$ _2 i) G' v, \
  292.       if(UpdateFile3.size())
    7 v9 d2 j$ _0 s
  293.       {/ N& [: Y1 C, N! s- @8 `5 A5 g
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + n& D* \, j4 C! _0 @6 B2 B
  295.         {2 q  m: y6 p' R3 d# _0 c1 q
  296.           file=(*p).second;% O$ w3 j7 m0 M! w
  297.           free(file);0 @% A* G" G" x  e, f' G
  298.         }) h" S# b( t* k' E' m
  299.         UpdateFile3.clear();( q3 P- t* w2 r
  300.         UpdateList3.clear();/ _( ]  T$ j- j6 b
  301.       }
    1 }1 e" |* V3 e+ G
  302.       if(UpdateFile2.size())
    + G' x$ K9 s* F3 y3 F
  303.       {
    ) b; ~! d3 a/ t. `
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : ^7 l& |  q6 X
  305.         {# d( L1 b) x  m8 F' ^/ ~
  306.           file=(*p).second;
    ' a0 D( t8 y8 U- B
  307.           free(file);" W9 I9 n6 w8 K1 J) p  H
  308.         }, _1 N3 c' |/ j9 v
  309.         UpdateFile2.clear();) z2 ~' P% o3 E/ e+ R+ ~) p; j
  310.         UpdateList2.clear();
    - E: i' b! x3 ^, v* f6 G
  311.       }
    ' b8 V4 t  N: ]  K1 {8 Y* ^
  312.       if(UpdateFile1.size())
    3 Y$ |5 x# [: G1 z: ~
  313.       {
      a0 S" N* Y: u# p" {
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- ]. s  b6 |/ E1 w( J
  315.         {
    ) q5 D% A" M1 Z
  316.           file=(*p).second;. s/ [' `% i9 y  H* m
  317.           free(file);+ C# D, }1 S, D% T) b" V4 w
  318.         }
    # i  B# c# M: s4 n
  319.         UpdateFile1.clear();
    " L' W6 R, ?5 ?" z) \9 Z! J
  320.         UpdateList1.clear();; \8 W8 d+ I# P* n
  321.       }' t5 v" F; _9 \6 V
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    7 q6 C* n, j2 N$ o; z7 ?0 W
  323.     }
    5 A4 v9 b, g: |* `4 f) ^" r3 L' Z
  324.   }
    % a; [) W, H- Q
  325.   return FALSE;
    2 M* x5 U2 e: G! g
  326. }
    + z& o7 U/ r* c( O* _, _

  327. ; l: b+ K! B& w- D  i/ q5 a
  328. void CRevAppApp::ClearAll(void)
    + U0 C: @% _8 n% Q* `
  329. {$ N' d/ c# @& q  @* M
  330.   LPUPDATEFILE file;
    ( {6 [8 Y7 y5 R
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    % {8 u: {" f4 J7 K) j. K6 ~
  332. 5 D1 m9 u! k5 Y0 s' D
  333.   if(UpdateLocal.size())/ I1 X: u7 B9 ]
  334.   {7 I5 }6 v, O1 z: L3 E* G3 X
  335.     UpdateLocal.clear();
    8 ~9 u+ X( ~/ [6 W# E5 t
  336.   }- ?2 [' l7 Y! t; |, h, i
  337.   if(UpdateFile3.size())# ?' Q; l2 [9 {: N+ T
  338.   {
    8 K5 v" d3 i2 U$ a, B: a
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), ]+ N4 K, Y" S/ a
  340.     {
    : S! ^+ \2 z3 h. r9 V  z# W
  341.       file=(*p).second;
    $ L$ ]* R) g5 ?; q
  342.       free(file);
    , y( ]4 G( N  E- B& U
  343.     }7 l7 ]0 Q' o- k% f
  344.     UpdateFile3.clear();/ q# v' x) w! H3 G( N& q
  345.     UpdateList3.clear();
    2 j) J: d  f" x. X! M, j8 O# k
  346.   }- n' N+ u# g2 J
  347.   if(UpdateFile2.size())
    1 _' y, k. G9 P( E6 n7 @1 I' v4 C
  348.   {
    # D- Q% q) |% I! w. u
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " w+ ~4 h2 s0 Q( r8 Q6 D2 T. K- A
  350.     {
    $ L9 o# g; e" `: ]
  351.       file=(*p).second;
    2 I6 R, |- ]5 r1 _) e
  352.       free(file);
    ' |7 f9 V- y; X1 i. w
  353.     }$ n! B6 ]. v- Q# Q$ T) ^0 W2 m4 N" B
  354.     UpdateFile2.clear();
      V% A4 G' W/ P% L2 M' n
  355.     UpdateList2.clear();
    ( f/ N/ r6 g" Q9 h% [9 [; N0 j
  356.   }
    ) r4 Z5 y) R, H& C0 F5 V6 o' o3 x
  357.   if(UpdateFile1.size())
      ?! X) A8 H$ R) B" m5 f# G4 `- V
  358.   {
    : A1 y/ C' D: ~" Q; ]" ~2 R
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    " V2 ~. X% W  R
  360.     {1 g' P2 P' A5 c+ A' L5 M4 g5 \
  361.       file=(*p).second;2 W% o( Z. r& A& U3 h7 v
  362.       free(file);* I( u7 w3 C5 r0 T
  363.     }
    ( \4 U1 \! k1 ]! V& A) e) o# g
  364.     UpdateFile1.clear();& p( C/ \3 ?* m* b1 i& ]! F
  365.     UpdateList1.clear();3 G& P' t: Z: t. I  ]: g2 y% P
  366.   }
    4 K! z* s$ V. h/ K/ K3 {( n
  367. }  4 y3 E( h1 ~7 b& j( G  Z, I+ O  }, q
  368.   
    / u- q1 \! Y9 b. v8 D+ A
  369. BOOL CRevAppApp::CheckLocalVersion(void)6 B  n3 `- q1 L6 [( a9 b
  370. {
    0 a! a/ e/ }4 i4 g
  371.   int c;& _) h: ~: @9 @' Z' w$ N9 R" K: U
  372.   LPUPDATEFILE file1,file2;( f/ {8 j2 m# b% r
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    & S8 C1 w  R3 ?+ k. f
  374.   std::list<CString>::iterator l;$ Z3 T0 Q# n( ]2 s
  375. - h$ U7 D0 {" F
  376.   UpdateLocal.clear();4 R5 q: V9 Y+ p
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);' o& t( q# P( `$ A0 _( O& Y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);# [# C# `  G  `: e
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    & Z. M& C) o( l. f) I$ q! F3 r
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);. G% m$ n# ^6 {; ?9 u
  381.   if(UpdateFile3.size())+ O2 j& v/ y* A- ]
  382.   {0 {3 S$ r" g% c
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); p7 ?7 }2 d9 f# b) n
  384.     {3 U; T* N$ d- j8 k% Q
  385.       file2=(LPUPDATEFILE)(*i).second;$ \! x7 t6 J, H$ [7 H
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ q" U' O! y1 j/ [
  387.       {9 ?# R4 i2 R" E4 D2 j
  388.         file1=(LPUPDATEFILE)(*p).second;) I/ T# M6 m& i. q, w
  389.         file1->vers=file2->vers;2 G; z$ ^1 L/ L2 P1 K& K
  390.       }4 ]  ]/ x: ~. s) A/ \+ s
  391.       else
    * W1 |8 U6 z# m1 M$ Y( F
  392.       {) p% _3 Q$ e2 R
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; p' D8 `9 }# {. [! C
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    % H: ?$ K; j7 l0 z3 \
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    : w1 |; k* a5 Q8 g
  396.       }
    3 d0 x& p. K, P) P( U9 @* _/ V9 y
  397.     }& ^3 U' y( E/ m2 B3 p
  398.   }
    5 c" |8 H7 ]8 P5 G
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++): o8 K6 p5 x/ ~/ |
  400.   {
    # L* M5 g( c& O* `+ k
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ! n" E) _  H: A( M
  402.     {# b3 m) t- ?" f  c0 m
  403.       file2=(LPUPDATEFILE)(*i).second;: I7 ]* d7 S: F: T. K  X5 x* d
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" [" J1 r9 D4 m6 V
  405.       {
    $ d2 X) J  O/ t
  406.         file1=(LPUPDATEFILE)(*p).second;- O- U; [, x3 y1 P! x9 S
  407.         if(file1->vers!=file2->vers)
    # Q" ?) Y" L& O% I1 G4 C3 I
  408.         {
    1 P# a' [: B5 w3 x
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, c" I; p* k/ X6 C9 S- K6 c
  410.           c++;
    # ?' f! Z6 U& A8 ~1 G
  411.         }
    ) D6 G( C# @! y1 i2 q
  412.       }
    4 t& ]- b& B4 d1 ~& U
  413.       else7 a8 c( `/ C/ ?
  414.       {  U% I; E! c- e
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    9 H6 C* f" v% t0 y4 p3 M: D5 t
  416.         c++;
    9 \/ W. S% `- E( C6 R
  417.       }4 i$ Y" C" Q; P. D
  418.     }
    . x/ O7 F: a0 a. [, I
  419.   }
    * z) I" B5 [8 f9 `. z, E; a
  420.   unlink(".\\DownLoad\\update.txt");; u+ I5 B  Y. r: [! N1 h% a$ E
  421.   if(UpdateLocal.size()) return TRUE;8 q; d* W2 V( c1 y
  422.   else                   return FALSE;
    5 b9 v1 A+ @) t2 |; V. V% O; R
  423. }
    - S& {5 h) b, t

  424. 8 i- ]. p5 n( t8 `: B- N* n( `
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"/ Y, G5 d- ?4 g- V0 G, l
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    6 J- A. L1 v7 X$ }1 l6 h
  427. , e* G& y/ u. Y! W- a# ]" |+ M; Q; f

  428. # h" s) k. v- ^' a

  429. # j. O* Z$ w( _, w' E
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ( ^: b& S& |% n' c+ r! t
  431. {
    ) v. X" Z/ \" K$ g$ g6 T! I
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( Z. Z# a- D* t; Q
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)6 H5 t. s- T+ a5 J: T
  434.   {
    , ^+ b! r3 ]; X( X7 e7 w% T0 k/ ~- o  {
  435.     char szLanguage[50];
    * g: J  C& T7 e0 |& S; r
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( W4 N7 }% D- g# y6 G' r
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; Y* _0 q8 ~( T9 v
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & ^3 j6 s) ^9 t, a9 x5 c. w. X
  439.     else                                   m_iLanguage=ENGLISH;  q: ?! J# H! o1 ]5 L2 j$ I
  440.     char szRegister[100];
    ) T3 m# x- ^, r8 J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - u. ?  Z0 F! {% o$ H
  442.     strRegsName=szRegister;7 V* F% L4 ]5 ~7 W0 l
  443.     char szPatchURL[100];
    - B/ K7 D8 \3 t" s% c1 n3 k
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 g* b8 k5 [* C5 i
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* e: m4 s0 X' v3 K6 i
  446.   }
    + ~9 a$ v. \3 |# `9 ~
  447.   else5 u0 f5 s6 b/ W
  448.   {7 u3 E! h0 `4 e2 Z! l! i, Q3 `& ], N, A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( M  W6 L7 F0 _. L# Z& B7 |
  450.     strRegsName=DEFAULT_REG_URL;
    ! f4 P! U# o  Q
  451.   }
    & T4 s7 N( z6 A, Z% x$ N6 |
  452.   if(GetFileAttributes("hosts.ini")!=-1)6 G2 \9 \9 x% F% ]9 w7 ~' i4 w# ?* n
  453.   {5 j* x+ f( _/ o0 x$ ]- _
  454.     char szIP[50];
      Z; B1 L. s/ ?) w
  455.     char szDIR[300];
    0 B/ {! l+ S# }6 R; o: B
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))/ J- H% [* |& ~% o$ ]2 o% f
  457.     {
    ' B/ K% V+ q1 T4 X4 Z
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");7 x4 x; s/ z: `
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ( S5 e% d) t5 x7 G0 q! L* p( c$ w6 j
  460.       strHostName=szIP;# V  r- H( a- {& Z% ]1 Z0 x$ z$ Q
  461.       strHostPath.Format("/%s",szDIR);8 {( p5 g- ~3 m, z2 H! ?3 g4 f" L
  462.     }: o+ [) T" `( I- s# O# ]) Q2 S
  463.     else
    . g( B" m% g( f" C6 O2 p
  464.     {
    / U1 n8 ~, ]( z2 O
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% h& f- ]8 l- y& ~
  466.       {
    " n5 a' A7 e: Y  n0 M
  467.         char szLanguage[50];( Z( j; N) l- {- z3 q! o, G& v
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; W% S7 `! H- b( ]
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 N  l1 q. k( j, X& u
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 F4 S9 G3 F2 G& w7 `
  471.         else                                   m_iLanguage=ENGLISH;
    - ^4 o( B, G2 Y5 k6 u
  472.         char szRegister[100];, u# H8 m1 ~2 r  |( g
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");3 j" c6 j+ s  o3 k3 B; V( S$ e- J
  474.         strRegsName=szRegister;
    - _" W7 L& L# W3 [2 V4 @0 n
  475.         char szPatchURL[100];
    3 K+ c) {$ A  ]$ D$ d, _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , i3 S' s% e$ @
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);0 }2 k  O; S0 l7 S0 i0 b
  478.       }: U, q" o( Q4 ]
  479.       else
    ) I2 B) s' A' @! ]- @" W. m
  480.       {
    9 I, c, K' j; N8 s9 o- ?1 Y8 y8 |' v
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- |$ d! f. d' \( f4 S$ P
  482.         strRegsName=DEFAULT_REG_URL;3 _. h2 q, \: O
  483.       }# S- V9 q. K' ?7 n
  484.     }$ N3 \: h1 A& |8 `
  485.   }+ X2 c$ O# J: M3 ^: _) a" W5 U
  486.   return true;
    ; b& Q7 W8 e. ~: @9 ?! L3 @
  487. }
    : |( i* J0 s" k3 j2 K
  488. 4 b0 m  [( y& k/ o" _- F# n/ E
  489. #include ".\ZLib\unzip.h"
    ! \: M7 e( z% c/ _/ ^
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 i" ]1 u) R- r& j4 F! h% _
  491. /////////////////////////////////////////////////////////////////////////////; H5 I) H% T& U5 d+ O, H
  492. // CRevAppApp initialization0 H: @9 D) j2 W# ?) S( [

  493. ) r/ R8 k9 X9 _; ~& w3 j! x% K( p
  494. BOOL CRevAppApp::InitInstance()
    0 R. H7 V* ?* Y+ R. M" c
  495. {+ e6 ^5 L" {' x: G$ y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];) c# n3 j# q# L% x( Y
  497. % I% U2 Z! {8 i& F
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);5 |/ n  O$ p4 }# B8 e$ i3 c
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))2 `" b5 [0 G& F+ c$ y0 h: r
  500.   {
    , c4 Y  @; l: ]& J% R
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");7 G$ K) s- r" a% P
  502.     GetPathFromFullPath(szPathTarget,szPathSource);" K9 I5 H, y1 F
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))6 x, \! C/ ~2 \
  504.     {
    : l, E. c9 F$ P3 m/ b! w
  505.       strcpy(szPath,szPathTarget);" N7 l- V3 j: R7 U
  506.       SetCurrentDirectory(szPath);/ f1 f1 _+ \* T. M& L; g
  507.     }
    0 U0 T9 E0 }+ p+ V0 r4 C% l; \, V
  508.   }$ y6 @3 }# Y* k8 Y2 D+ s3 p# Y9 K
  509. #ifdef _DEBUG* B6 t! v# M2 Z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ p* u; q0 w( s7 B, |, s. W* Z3 i
  511. #else
    % J- e  Z; w# V0 p
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 a! c* J; U( F) \
  513. #endif
    # n6 f5 k% e( Y' R& t( o
  514.   {0 b4 `# p& c1 j" ^0 L
  515.     char tempFileName[MAX_PATH];5 ^" S$ `6 r* w9 E. S
  516.     strcpy(tempFileName,szPathSource);
    - h6 W8 A- o( z/ C2 \( F- h
  517.     tempFileName[strlen(szPathSource)-12]=0;) N0 A5 t: v$ z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    2 Q7 O1 K# B8 u) B* q1 u8 V% z1 ^
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);2 J8 P9 L4 V: i) H4 r/ h
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);) d$ x9 I" U  U( \* V; Y
  521.     return TRUE;
    $ \/ W- K$ L2 {
  522.   }9 \" n9 }. a* ?
  523.   // Nuke 0118: Delete run.exe
    9 }$ z5 T8 C- Z
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );5 Q3 y: u4 y) `5 d' @( }
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");! H1 c: p/ u( R- @4 L* q2 p% r+ \' ^& R
  526.   if(!ReadCfgFile("Config.ini"))7 f# c/ w( ^1 ]9 a! F- s& S
  527.   {
    # f: h2 Y$ p8 d' K7 t) ]; C) J# J
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    7 D! A7 i3 r9 E: P
  529.     return TRUE;
    % l! i# L& h! M1 n0 i; r6 L
  530.   }$ I( C. ~: l" }* R5 n0 c
  531.   HANDLE mutex;
    9 y% ]/ r( a& `
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))2 Q5 i  I/ A. r8 s
  533.   {
    ; a! k8 i6 I; o) L7 f) Y( w1 D
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    0 y0 i3 a% j( s8 b; U
  535.     {. \! l0 s0 A! j8 D
  536.       CloseHandle(mutex);
    / ~6 x8 f: @+ I
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    , R1 I* E+ F; C
  538.       return TRUE;" H% h* Y, ~1 I2 a' m
  539.     }$ ~) z! I4 ~9 D$ ]" r
  540.   }  4 n& v( \+ P# M
  541.   CloseHandle(mutex);; ?* v) ~. ~6 \$ O9 j

  542. 1 L2 P0 e9 ~" [) f  R
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);- X" f( J6 _! I% S
  544. ; J/ R4 Z+ G! p( `* H. x- s0 n6 l! _, E
  545.         AfxEnableControlContainer();
    ) L2 u9 g* V5 U2 C& ?4 C- E

  546. 9 Q! c# e* d; ?8 ?" N
  547.   bCanUpdate=FALSE;
    2 d) a2 b$ _, k! Z* Z2 r9 h
  548.   dwStartUpSteps=1;$ Y# m' {: c4 o0 x4 c3 s
  549.   dwProgramState=AP_NOTHING;
    9 z( B; k( w- S/ f: {3 F& H' q) y

  550. & a2 n5 y# E/ o" h7 P2 l+ w+ z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 k6 y2 x; d$ I

  552. , b3 C" e2 K' ]( |. b/ t
  553.         // Standard initialization1 I* A2 X1 `% N% p
  554.         // If you are not using these features and wish to reduce the size
    & m0 z( ^: Q" D6 D0 H
  555.         //  of your final executable, you should remove from the following" |9 v) t  R, g8 Z
  556.         //  the specific initialization routines you do not need.
    1 E2 \  H7 g+ j" l. v2 H; V) d* h4 b

  557. ! w' i6 C/ _) X9 V- f; n3 {1 u
  558. #ifdef _AFXDLL
    ! n  H' r; ]7 d! `
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL; c  y+ l2 V1 m! ?6 ~
  560. #else
    & k* U0 n3 N1 |& ^
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    & Z4 z9 i5 g, ]5 a& T/ s) C
  562. #endif5 E9 f! }8 O. U( D

  563. " o" x, E) P* }2 v, x
  564.   dlg=new CRevAppDlg;% C9 V$ f4 L' m) N3 u; |
  565.   dlg->Create(IDD_REVAPP_DIALOG);5 z7 s2 u9 P* |4 a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + t' V# T" T0 r+ P' w
  567.   m_pMainWnd=dlg;% t! o1 k5 o6 R" E+ A( G7 _

  568. 5 k( c9 H& V( y0 v2 k1 y3 T
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    6 l! x- Z/ z+ ~: s- I$ {' i
  570.   m9 d- _6 d4 b6 k$ A
  571. //  GdiplusStartupInput gdiplusStartupInput;+ s+ Q2 M  T6 _4 Z9 @
  572. //  ULONG_PTR gdiplusToken;
    % A+ r: b# x8 h  }9 b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);; S- C/ i: M2 f( Q* v! C  N' c
  574. 9 L0 t' [0 e( j& T/ G  O
  575. //        CRevAppDlg dlg;, N8 q9 w3 ?) m( O) d! `+ ?8 }
  576. //        int nResponse = dlg.DoModal();3 A4 x! p# x; P  S+ A3 R, e
  577. //        if (nResponse == IDOK)& `& F, f  A! r, l6 n& K( J
  578. //        {  B3 b5 n, F/ ?* _8 v; U- X( [
  579. //                // TODO: Place code here to handle when the dialog is: u1 k4 c. Z1 C# f/ O
  580. //                //  dismissed with OK
    7 T' s9 k# x3 k4 V) M
  581. //        }
    ; w, ~1 Q+ ]# N, K! Q. }3 c& W- [. H2 X
  582. //        else if (nResponse == IDCANCEL)
    0 [0 `  Q- d+ I0 |" }! ^
  583. //        {# ]4 d; j7 d( ?% G" n
  584. //                // TODO: Place code here to handle when the dialog is
    8 O8 ?  _1 M& _6 v  T+ c
  585. //                //  dismissed with Cancel
    * [7 z4 [, @3 \: R: d0 }# \
  586. //        }- _2 j! E. W9 t! j
  587. 9 Z5 I' l$ {, e) o
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    - B+ R% q  j0 F# c' P' x* F5 O' L/ d
  589.         //  application, rather than start the application's message pump.) _) E; d( W4 ^+ p2 {$ d4 ]
  590.         return TRUE;
    $ X. U2 U. Y& Q3 j/ U, _
  591. }4 R& G- v( R' `' U' ]7 u* |
  592. - ~* F/ W2 ]4 l4 k
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ' Q& Z- o- p* O, S
  594. {# \% s$ @# r9 t/ ^4 @8 i
  595.   int i;! G9 n, A1 ^( [; r; F& z
  596.   char *szRet;
    , L- L& f) m! ~- \  ?7 S& B4 U

  597. 4 N8 B" v- p/ J& q% }! M
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " Z, j+ v; n9 k
  599.   if(sztoken)
    . X2 y! _% X& O  N
  600.   {, Z+ {9 P8 m2 f& v- ~4 @
  601.     szRet=&sztoken[itoken];
    ; `+ }' ^( |; B( p, y
  602.     while(sztoken[itoken])  g$ ~  M5 b; O( }+ y$ q
  603.     {
    3 z) y. D  r( d/ \# m; E0 H, T, ^
  604.       for(i=0;i<(int)strlen(token);i++)
    4 w- N9 A. f6 N7 k2 h
  605.       {
    6 w- C' \( Q- s) e3 L
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    + r3 h; f: e: h" }  k* Q
  607.         {
    - t- `2 v! _" v& T
  608.           sztoken[itoken++]=0;
    4 [  k; p' }$ }% X
  609.           sztoken[itoken++]=0;3 r/ _8 t+ e% v: H; V0 J# a$ e
  610.           return szRet;& F; F, Z/ P% e- E  b. `$ y0 ~2 ^! }) Y
  611.         }0 `1 s# p) |  Q9 F
  612.       }7 |3 R+ z1 A2 W2 M4 v" Q- t
  613.       itoken++;6 d; ~, r  c+ z6 f
  614.     }) N3 R( l& h" [- J/ J
  615.   }5 ^. D2 f! H0 R, T
  616.   return NULL;1 E" F" c1 Z! `: ^4 }
  617. }
    4 _5 c7 A4 D+ b( P* ?2 h' ^

  618. ) d8 c/ o4 j' j7 s  O2 `5 N
  619. void ProcessProc(long Total,long Current)
    , |! I- U7 L3 @+ F% s; v5 |7 A
  620. {
    & j5 ~: Q" m6 @8 [4 k
  621.         MSG msg;, A1 |) I# ^, E1 I) V, m' M2 u
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);3 {* V6 I8 Y7 k. ~/ u2 A
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ' r- q1 S. S% r% E. P
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))! d4 ~% J' L  Y! M/ F3 ^
  625.         {* V, X* l3 p: |' g" N
  626.                 if(!GetMessage(&msg,NULL,0,0))# I) X# a+ @; Y9 x1 ~
  627.                 {5 {) J: ~( S8 S! N
  628.                         return;3 o7 C8 Y% {: _8 [3 C: {
  629.                 }* _* |% u  k3 [5 E7 |" n7 }
  630.                 TranslateMessage(&msg);
    * c1 H9 ]' y# N3 i" _
  631.                 DispatchMessage(&msg);
    , f4 \2 \0 X% @8 H: t: e" _' h
  632.         }       
    ' c9 N: l. W) a
  633. }
    % F3 }2 b; ?  }% s0 h) s, r$ B
  634. 3 K& g( j: U( g/ E- O, F
  635. BOOL bFirstChar=TRUE;" J6 r+ h3 j7 w, `
  636. 2 K9 ?5 N' d* X; ~. Y
  637. BOOL CRevAppApp::OnIdle(LONG lCount)" v( Q5 y$ b1 s9 B, p5 r
  638. {" e2 O$ ]7 L5 |0 m4 U
  639.         // TODO: Add your specialized code here and/or call the base class: k0 p% E, ~* _* i5 h7 G
  640.   switch(dwProgramState)
      i+ I# v) Q: I. s: Y# T* ]
  641.   {+ `3 f, ^3 F0 n) M; n  ?: M
  642.   case AP_NOTHING:
    - r1 ?) K+ z% u
  643.     switch(dwStartUpSteps)
      ^1 r* W2 j, r5 C
  644.     {
    , C, T/ O3 \" G" u
  645.     case 1:
    : z0 t- k7 s! L1 @- P- w8 L
  646.       {7 f2 f9 N$ ~; ?- a
  647.         int i;
    3 v& A* y7 O* ~, Q- t; `8 u
  648.         CDC *pCDC=dlg->GetDC();) T7 W% Z0 w; D0 F  @9 P/ F
  649.         HDC hdcwnd=pCDC->m_hDC;6 ]: `8 B6 w. f4 j8 B( F) j
  650. //        Graphics graphics(hdcwnd);
      m# n* N7 H) W' T2 I2 ?2 C% |
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");2 e, o; t/ ~4 h1 i8 D, t
  652. //        INT iWidth=bitmap.GetWidth();, g6 ~' }" C( x  W) B8 W
  653. //        INT iHeight=bitmap.GetHeight();
    * O8 U$ F6 u. @4 D# u7 ]
  654. //        Color color,colorTemp;
    : l% w3 Y. m7 A: J2 c0 A8 Z
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)4 R' K& ~$ O- f* J# n, ?& \
  656. //        {
    $ y2 M! y' y& F7 e
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)1 L! b; U9 E" E- q, T0 u+ m/ k9 z
  658. //          {% w% A. ^; `6 K1 H
  659. //            bitmap.GetPixel(iColumn,iRow,&color);9 n1 Q$ D2 P& @, p1 v3 J. J1 [
  660. //            colorTemp.SetValue(color.MakeARGB(6 }9 w' @) G/ A% n+ f* d! y
  661. //              (BYTE)(255*iColumn/iWidth),) e7 D1 D; X& v. b* q8 e$ s- v
  662. //              color.GetRed(),
    % s/ j. @+ `5 y" ?0 p" s
  663. //              color.GetGreen(),% y8 R, {+ l) O+ L
  664. //              color.GetBlue()));
    ( ^$ R" s: ?3 ?$ `
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);5 G, j3 }( B% q/ ]: v' x8 `5 g; X
  666. //          }
    - P, x$ s/ l# z% t0 H
  667. //        }
    , S6 {9 o  x; X- y' |1 @3 _
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 N) \8 c2 F5 @  G! i6 C
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # X' ~9 D/ h- i  Q; x+ ^" o
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    / K/ j  v  Z, W+ V9 [2 P/ [
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( V7 i- k/ J8 k: R. j' [9 B# B
  672.         for(i=0;i<240;i+=8)9 d" w/ \6 W3 V
  673.         {0 m7 F- B9 t+ A  L; M( F; v
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : _% d4 u% k8 i- ]: ?
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; h! W& A' n5 L- J$ S" W' F# i, \
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);, o) W5 k: D% {5 \
  677.           Sleep(33);9 L1 x7 I9 K8 i4 U' d& |# w, [
  678.         }% ^4 M, V9 c2 H% N1 T, Q) O0 c8 @
  679.         Sleep(1000);
    % x. P# i) [1 Z; I/ P
  680.         for(i=240;i>0;i-=8)
    & u# M$ o# }" \
  681.         {
    * y% a$ H2 q; N  O. g1 S4 P- @
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # p% B' J( V# a0 B
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      T% E: _# i! i  y( ~) M
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);2 J( c% s; S# U# j9 n
  685.           Sleep(33);
    . U: [- \! c, p7 [3 k" w& T
  686.         }. b% C0 W6 t- L
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);5 P( W1 A. s2 B! B9 m: L  v
  688.         dlg->ReleaseDC(pCDC);
    : o- ]! ]7 c& P  z$ e7 ~
  689.         DeleteDC(hdctar);
    0 O) o1 E# ^' p- W0 b8 v4 X
  690.         DeleteDC(hdcsrc);# ^; q0 j1 c* I! l
  691.         DeleteDC(hdcorg);5 T- \  `! |. n
  692.       }9 ^: l& G* M* |3 H0 z% ]) D+ n
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 M4 S) r6 {& O7 e5 N
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    3 k4 I. O/ [! T4 S! O7 s
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    8 ~% u$ q( a/ r( n
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ; B1 x# A3 Z  Y; p5 u
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 N  h/ u: ^: m& p/ q9 E; C. ?
  698.       if(!Dn.Connected())
    6 q! M# c: f5 ?/ l2 M6 P! u. w
  699.       {# Q$ y8 s! ], n) ^5 g4 O; ]
  700.         dwTotalFiles=1;% _/ N# X; F8 P! s7 e) v
  701.         dwDownLoaded=0;
    5 F) H4 T4 J8 m: @! I( _# i( q
  702.         bSilentStep=TRUE;4 Q- L5 @$ K% q( }8 M. i3 b
  703.         bCompressed=FALSE;
    " }- O# q/ {1 c1 d" e; u* _( c
  704.         strExtLocal.Empty();3 ~) _: ^* C3 Y+ w
  705.         strFullName="readme.txt";2 O/ h5 t- T' [, a2 a) U" A$ J
  706.         dwProgramState=AP_CONNECT;
      V8 d* f# s4 I9 _
  707.       }
    % [# \. ~( Q, g$ Z1 r
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();5 j. ~0 @+ X+ c, k  E
  709.       dwStartUpSteps=2;
    5 y5 F% A7 G. L+ m( A
  710.       break;
    6 x9 O& {& Z" F0 k+ q- p& H
  711.     case 2:! P  b7 f5 j/ x/ V
  712.       {
    ) @. m% I% X# ~) v& `  y
  713.         int iEOF;
    . e6 R$ V! F' |+ m8 r9 [. Z
  714.         FILE *fp;
    4 ^: R4 w0 b! R  R
  715.         char szString[512];
    ) T6 v3 c9 L0 S9 H- l# j# t* G
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    & T8 {" u7 R; J" N8 L
  717.         if(fp), V7 r9 O6 J9 V4 \$ A
  718.         {
    $ V' w+ S# ?; b
  719.           do; j/ f( x( p3 |
  720.           {
    4 l8 M' F' G4 }7 P
  721.             iEOF=fscanf(fp,"%s",szString);
    1 g4 O1 E1 C5 v. }4 C/ i
  722.             if(strlen(szString))) v* X% c. W" T1 J# q
  723.             {1 e$ z% L2 X* n
  724.               if(bFirstChar)( }. i7 j. M0 C
  725.               {
    ) g. U# {0 v- a- r" C0 F5 |
  726.                 bFirstChar=FALSE;
    ) L, p) }9 q- x/ ?2 A
  727.                 bConnectIsBig5=FALSE;& B' _$ ]+ V8 n! Y1 W
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    & A! Q: i6 Z/ Y+ c4 g8 b+ l
  729.               }
    9 d# k7 W0 _5 \
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    : W# [  I$ u6 h# E6 D$ S: t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));0 u* Y) E# l. J8 o
  732.               dlg->m_ListText.AddString(szString);
    " s3 ]! o( [/ `7 v: ?6 w5 [
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & V( \* f) e+ x. g
  734.               *szString=0;  v( A7 `9 \, x4 q
  735.             }
    # ?) Y, |8 u9 b5 v
  736.           } while(iEOF!=EOF);
    ! c- ^$ T/ |# H# K/ h
  737.           fclose(fp);) J! E$ `, H  D4 `) \- \1 T7 j
  738.           unlink(".\\DownLoad\\readme.txt");
    - w( f- @) H% a3 k; x$ e2 ?
  739.           dwStartUpSteps=3;
    ; {: Q1 T9 e% [: k- f/ B; B
  740.         }
    6 O& Z# Y2 K, f  Y0 x+ {
  741.       }9 e# J6 k1 v% `, z$ A
  742.       break;
    . o+ Q; l0 c2 T# I6 r
  743.     case 3:0 F! ~0 d' J4 R" D  K" N
  744.       if(!Dn.Connected())) N4 J0 {8 c; c" f0 B9 m0 X
  745.       {
    . r5 q& a) _& M: G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);0 f! _/ `3 u8 ~0 @
  747.         dwTotalFiles=1;. Q, p, k" U. q
  748.         dwDownLoaded=0;
    " F  W/ r0 l  P/ {" J) F
  749.         bSilentStep=TRUE;
    ( P1 ?9 U9 d5 y+ c+ g7 C! \' Q
  750.         bCompressed=FALSE;; {8 u2 [7 i- i- C/ z
  751.         strExtLocal.Empty();
    4 l. ~; C' d7 s$ f' A7 H7 U- z
  752.         strFullName="checkversion.txt";, T' t) C/ [  z+ r' t
  753.         dwProgramState=AP_CONNECT;
    - P8 O9 r3 p9 u& p* E* e
  754.       }, q5 y0 @3 d2 C
  755.       dwStartUpSteps=4;
    . b& ]2 f$ \/ |
  756.       break;
    9 F  B6 E% v+ w! X( P7 G/ _$ L: r
  757.     case 4:3 I9 I3 c$ }9 q! @; u
  758.       {
    6 H9 W# c3 x7 c2 p) T* {
  759.         FILE *fp;
    & b, b) K3 q2 ?( g. @. h
  760.         char szString1[128];. @3 u; X4 T8 Y" H; E: X, |* R9 Q5 i
  761.         char szString2[128];$ H9 M- M# A7 {8 x# X9 b
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");7 L0 ]2 v% M5 I1 i8 g+ _. t9 _
  763.         if(fp)
    - k, u' z& ]4 F8 ?7 z. b! s
  764.         {
    4 B. [- u  F1 N! |7 J# O. [. N+ M% P( {, V
  765.           fscanf(fp,"%s",szString1);
    ; q: [7 u- a0 n% w4 P
  766.           fclose(fp);. c+ ]: i0 J5 k) C
  767.           fCheckVersion=atof(szString1);  I6 e6 l) A( i% s& N, e
  768.           fp=fopen(".\\checkversion.dat","r");' G- L- R2 I" d$ u
  769.           if(fp)7 R! j6 D. H9 G6 {9 s' Q
  770.           {) H+ d8 }6 y8 E
  771.             fscanf(fp,"%s",szString2);' Y& \( T( X9 j. j: x& X4 i/ d0 S
  772.             fclose(fp);1 M# \8 x! J7 g7 Q" b" K
  773.             if(atof(szString1)!=atof(szString2))
    , }# O/ T0 x: L! T/ I
  774.             {
    5 {- P$ Y, ]4 x: D. R
  775.               if(!Dn.Connected())
    . y$ V. ^- `5 ?. P: g& ]1 s- S) e
  776.               {2 P* a, [. S9 t: \  q- U
  777.                 bFirstUpdate=TRUE;
    7 ?! M- ^! M+ C7 s9 x3 z
  778.                 dwTotalFiles=1;
    9 V. Z4 [2 q  N& R0 L
  779.                 dwDownLoaded=0;# ~$ M1 m: A9 }. d* }
  780.                 bSilentStep=FALSE;9 u4 f: E$ {3 B4 O
  781.                 bCompressed=TRUE;. D$ F7 s/ d# A& e. a% k: O
  782.                 strExtLocal=".\\DownLoad\";
    & a; b) E6 }$ t: {* \+ `! ]
  783.                 strFullName="update.txt";! J4 R. w* b$ P& ~* ~1 p, h
  784.                 dwProgramState=AP_CONNECT;
    ( j/ D# N  K/ E. `# w# D' c1 @
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  |( r& j$ P4 E) m
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");& K6 L) w/ O  r
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . i- n) i$ t; Q+ r2 t2 U9 c. y

  788. ; x" r4 k5 i- `* ?% g8 F
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; ~, X8 z4 F) y1 D
  790.                 unlink(".\\DownLoad\\checkversion.txt");" P! z0 l6 i: V+ r
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    : z, |: l/ R- ^# j7 V
  792.                 {
    0 P) x+ R# V) Q9 T% J
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    # v! x: V9 M! w- H  D
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");( i9 g3 P" m$ h( i, K
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    9 N6 A( D# w- N- F. o1 v2 O- _
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # S* f% _+ Q2 T% ^( ]
  797. 5 Q7 a) g( L1 {, T
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 t, m1 V0 ~9 ?; g. T+ r3 \
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 N6 `" F  ?- @. }5 f
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");, k% N1 N* @, V! b  ?
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : I: j+ U% K+ l) u0 V
  802.                 }- |( Z% D8 _0 ^$ l, l
  803.                 dwStartUpSteps=5;4 l: D0 a2 n1 K2 t6 U2 f
  804.               }9 o' P) `- }' \9 W' |! c
  805.             }+ k( F+ ]8 @: i% Z
  806.             else4 b! `: f' e% e7 W
  807.             {
    3 D7 t$ j* C3 r& K
  808.               unlink(".\\DownLoad\\checkversion.txt");
    & C+ v+ P4 x3 X
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  r! c$ {7 p) x7 r/ l* h
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' h4 _  m* E5 V; [) h0 Y
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");6 z! R% E, q/ Q5 A

  812. 2 m9 \5 _, `5 @, E7 ^
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: y9 B/ A+ Y3 N0 o
  814.               dwStartUpSteps=99;; r  @: Y# l7 h1 b
  815.               bFinishUpdated=TRUE;
    ! n0 k3 ~$ {% F# n5 D; K
  816.               bCanUpdate=TRUE;
    2 g6 h' E7 Y- G( A' s4 J$ q
  817.             }
    : o) Y0 s6 j4 V- C' ^9 j6 ]* F
  818.           }3 W8 E1 k2 O* }: C: ]; ]9 u
  819.           else
    ( |; d) G4 P3 C2 ^
  820.           {
    / U8 g3 G3 K4 c
  821.             if(!Dn.Connected())
    6 G# V  @0 s0 b7 T6 W
  822.             {& @, F0 }# S  u- w
  823.               bFirstUpdate=TRUE;! u! N# |6 |  z$ p' s1 V
  824.               dwTotalFiles=1;& D: C  \, X5 S- ]/ |
  825.               dwDownLoaded=0;
    % ?) n0 s" V, k3 Y0 e" H* H
  826.               bSilentStep=FALSE;
    ) c% M! n! h0 ^/ \' K0 ], O7 Z
  827.               bCompressed=TRUE;  H5 _( {8 O& n% M9 Y/ l
  828.               strExtLocal=".\\DownLoad\";9 P4 V3 Y; F8 [: W' Y3 a' K3 R
  829.               strFullName="update.txt";7 N7 `1 s  X" Y' J) d
  830.               dwProgramState=AP_CONNECT;
    3 f) X3 w, a1 a% k. I2 G. J4 `5 q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");. T  g- e1 r6 U. M. _
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 V0 U# a! Q8 r' e
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : Q) G/ ?  @  Z
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 |0 ~: p- J$ Y5 ?8 Y: \
  835.               unlink(".\\DownLoad\\checkversion.txt");. {; J/ A& b" ]' \
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ! n, d2 v( z# N* t! v
  837.               {
    % i% h1 R( N( T" X! m- a7 s
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    - m5 O! p( T, ~3 S9 j* z5 z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");) {% S8 R; @; Z  ?
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    0 _' ]+ E- e/ u; b, x) A7 i
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % N; R1 Y; o3 |4 m# S3 ^1 ]/ C& }7 f
  842.                
    " N- F# |3 K( G" \+ w/ V- w5 v
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, i  D5 `  u$ f! }$ e
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. t% j9 N+ O, g) U
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");# K  ?$ ?( z# c# ?. }
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 H, }: ~" R6 F8 F9 t& F, C
  847.               }
    3 {  a  I9 p+ w0 f: r( [; H: V5 f: Q
  848.               dwStartUpSteps=5;  y( R* b6 @; ]  g8 t2 {% L
  849.             }
    $ I6 O9 f+ }8 `
  850.           }
    0 ~. _4 W5 Q0 X5 [) \4 I8 V7 H
  851.         }
    ) e* W, U6 U  k4 p$ g* U  B
  852.         else8 h' H# w3 N6 H) S0 O3 `% A
  853.         {; L0 ?0 b) o* y* e2 ]7 u
  854.           dwStartUpSteps=3;6 D3 g5 N% M& ?- u# ~
  855.         }
    , @8 |0 C# D; b& D3 |/ X- j* \6 p2 p% I
  856.       }
    % Q" G8 w9 Q8 g8 L
  857.       break;5 U9 `% L8 \( C/ M; B6 ~! A
  858.     case 5:0 f5 d0 R# d6 t# B- c
  859.       {
    8 F9 T" `) X7 l8 U+ l1 R1 T
  860.         if(GetFileAttributes("Wsa.zip" )!=-1), }* g$ J8 }* Y, Y7 b, Y: J. n
  861.         {
    & X! ^" V$ ]; _  W& |, m3 V) t
  862.           int opt_overwrite=1;
    * F7 Z  G: v+ F/ w9 c' q
  863.           int opt_do_extract_withoutpath=0;
    " z' k7 q# o- ~, u1 n  u* U7 F
  864.           unzFile uf=NULL;. X9 Z. a+ a; ^6 M2 f) d

  865. 6 o9 s! V& r2 _9 y( z
  866.           uf=unzOpen("Wsa.zip");1 d9 h) ]0 g6 E2 v* n# q
  867.           if(uf)
    2 y6 a# \  d- |0 _6 ]- t3 S3 a! P
  868.           {* y/ }) m+ o$ T8 ^3 ^- A# d8 }" ~
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    + W5 p: W+ M: J, h" I, q
  870.             unzClose(uf);* A; A3 R4 B5 j! z. k
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");9 X; m% s' d. a5 a) n% k
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ; `. G. L. m/ C  ]" U
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");  f- Q3 Q3 i2 Z& a( f' p4 e% e
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : e6 ]2 `! U/ v2 n3 k2 \' a/ b
  875.           }
    $ }% b& q6 ?( B, I( ]  W7 @4 G
  876.           DeleteFile("Wsa.zip" );
    ' N, X5 P0 a8 H  N% A8 j. y
  877.         }
    8 Q2 F# z4 p0 A! y; [7 G2 D1 O

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

. h" C' g; V: ]9 h
+ a3 T0 P/ \( r; R: g: Z

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-8 00:01

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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