找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
. p* u1 G% E! o, g: O  ?
  1. / RevApp.cpp : Defines the class behaviors for the application.
    2 e. O9 v8 o9 x1 D+ J  t1 q. X
  2. //
    2 C+ B/ ^$ b/ E2 e, E5 p

  3. 1 z2 Y7 \4 H) {9 E! i
  4. #include "stdafx.h"$ A- \  N8 `* F, j# Z& a
  5. / y% [7 V" v! w7 `9 c7 x
  6. //#define UNICODE9 V& Z# p; A+ R9 D$ h  f8 w
  7. //#include <gdiplus.h>
    2 w6 m  p, S  Q$ H6 |, _
  8. //using namespace Gdiplus;
    * r$ x7 H5 I) w8 z) y$ O" l5 t4 Z
  9. 0 j3 r( p% f! h- h$ W
  10. #include "RevApp.h"9 @9 e( C2 ?" f3 a( @
  11. #include "RevAppDlg.h"
    " A% p( W& _; ~
  12. 6 a% d- h8 [( X2 h, o
  13. #pragma warning(disable:4786)" n' u+ g0 C3 f/ \5 W4 F
  14. #include <map>7 O5 H8 P7 R$ u
  15. #include <list>
    0 F. Z  d& o9 y5 D4 `- T* m
  16. #include <direct.h>
    3 X7 \# e% C* W8 s$ F8 B
  17. % X8 l/ K4 p- U" p0 w% o9 z
  18. #ifdef _DEBUG
    : Q2 K0 b7 k3 ]1 [9 \# I0 M  F
  19. #define new DEBUG_NEW
    ) s: o! v( T* F) ~& i2 T# m
  20. #undef THIS_FILE& V3 i2 [% I+ t9 R7 d5 W3 J0 y7 ]( z/ O
  21. static char THIS_FILE[] = __FILE__;+ l1 _1 R7 f+ i% J
  22. #endif  z/ s1 p4 v' l3 b
  23. #include "SkinResDef.h"
    5 Y, J6 w* c1 g* Q
  24. #include "ChangeBG.h"
    0 K0 d: V+ N5 L. J0 U
  25. #include "AFXINET.H"
    : u' v' [7 M) j2 X$ S% \% ]
  26. 1 b8 j1 O, N: e; _
  27. #define TRADITIONAL_CHINESE 0
    0 b! U. B/ R& ~5 n
  28. #define SIMPLIFY_CHINESE 1
    , U* n; e. N' x! z, n4 A5 n* b
  29. #define ENGLISH 21 {( w$ I2 }1 P) B1 g
  30. int m_iLanguage = ENGLISH;2 @2 e/ S7 d0 H! X
  31. /////////////////////////////////////////////////////////////////////////////  q9 F0 i# s  d# R& T/ ]' i
  32. // CRevAppApp
    ' ]: _6 \) J) Y1 n. [% U
  33. - K: H7 y; H  r; z, X
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)- Z$ t9 P! K/ \8 e5 i
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ' I7 x: c/ t' o. V9 e% i
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.8 t/ `5 K* Z! I; J( H
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    % w* r7 O8 T9 K! @% B
  38.         //}}AFX_MSG8 [$ A! b" z) u, D! Z/ e
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    & N, S4 u( @  C$ S7 K+ O
  40. END_MESSAGE_MAP()
    " \1 ]0 T: g& u# {; r

  41. $ c+ z3 x. Q+ E3 P* P$ @5 t
  42. /////////////////////////////////////////////////////////////////////////////! R8 Y, g+ D' C0 r0 [6 L
  43. // CRevAppApp construction
    0 n7 x" D; v4 O  C8 v# L9 i7 p, h

  44. % n4 [* o( y% s# t3 |, f
  45. CRevAppApp::CRevAppApp()* A0 n- t5 m" [
  46. {2 M) G1 o; J# I) y4 k$ c' k# q
  47.         // TODO: add construction code here,
    , E) h3 L) d* }' n9 b
  48.         // Place all significant initialization in InitInstance
    9 c9 _. b0 E) J7 ?+ d( z1 d
  49.   bDisplayIsBig5=FALSE;1 z8 J. T1 v  m. Y# P% z
  50.   bRestartUpdater=FALSE;& x& o& e9 E8 d. F8 R
  51.   bFinishUpdated=FALSE;. z$ K* \4 q( ~6 Y. @% U
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    . w! l( R* w0 R5 H9 J, }1 [3 O6 t
  53.   InitChangeDataBig52GBKS();
    $ g0 P: z* s" m% p3 p4 c
  54.   InitChangeDataGBKS2Big5();
    6 U4 m$ z! R! v. b
  55.         //
    5 Q! n; Z6 p  a; o( b
  56.         bClickRunExe = FALSE;
    7 M5 ?9 I( X+ R# U: Y5 v) D7 l' o
  57.         //+ ~9 l1 k$ l- n$ y
  58. }
    " R0 o  c% s' f

  59. 0 j+ U5 w1 Y) [
  60. CRevAppApp::~CRevAppApp()
    ! L8 F6 _0 [. H
  61. {
    6 z4 S; d7 \' C% Z; q
  62.         // TODO: add construction code here,& `* @3 w- E& }' ?5 B7 W- r
  63.         // Place all significant initialization in InitInstance/ n1 E5 y; x# y5 x* v/ V
  64.   EndChangeData();
    * B" c  V9 R/ m: R" J8 d
  65. }$ [" [+ t1 E2 V! C5 O/ C; E

  66. : I' ~. @, ^- i# v% h
  67. /////////////////////////////////////////////////////////////////////////////
    4 ^. Q, h$ a6 x4 T
  68. // The one and only CRevAppApp object" s2 ^% |" T9 ?+ `: P! }8 C5 a
  69. ; d7 K( m! i. K! k. V7 L
  70. CRevAppApp theApp;7 m9 b7 v( H7 M1 c9 }: B
  71. # L- Q. y0 Z; S. M; Z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    1 f. s. G8 w/ z6 y
  73. {" o# E- m6 E0 f! ^& }- C
  74.   int iEOF=0;
    & i; Q  R0 {, Y& i) r' s  X% m
  75.   char szTempName[MAX_PATH];+ t0 ]) Q# P0 L
  76.   *szFileName=0;
    % T( q& n9 [1 D3 y& D' T: Z9 u* I
  77.   iEOF=fscanf(fp,"%s",szTempName);
    8 P8 Z7 K! g4 J
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')8 P0 N2 O4 E; p1 j* [9 n
  79.   {0 |8 O& a  `! e$ Q6 z
  80.     strcpy(szFileName,&szTempName[1]);( n) F: q$ ^3 V2 T! r
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)" k3 I; M  i# e  U0 S7 H
  82.     {2 u3 m4 c) D  O! l# @# J) {
  83.       iEOF=fscanf(fp,"%s",szTempName);
    & I6 Y- K" H' e/ y% L2 g
  84.       strcat(szFileName," ");
    9 u' Y" q' F# O+ T0 m3 g
  85.       strcat(szFileName,szTempName);5 g- Q/ w% n6 m! z& `5 D7 ~
  86.     }$ W! X; e, e0 d( A" g9 t
  87.     if(strlen(szFileName)>=1)
    + n( ^; R. p/ i; ]
  88.     {( z* x2 a* o3 b: S' @6 t
  89.       szFileName[strlen(szFileName)-1]=0;. ~' D* x/ z7 @* k) u; ~) ^
  90.     }
    ' Z7 G1 u8 g$ @
  91.   }
    7 v6 U- Y9 M3 R' q& o, z" |. m" B
  92.   return szFileName;
    . q: r8 |) T9 |2 J4 K; C
  93. }
    0 D! S7 G0 `5 f2 m. I( D
  94. ) J- T! d6 S: z9 C7 n8 \
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)& ^- e2 S. h2 |% s8 _4 g
  96. {( G: ~" p. C. |/ T& Z; a8 Z
  97.   FILE *fp;
    ! i9 F6 {& P; f: A- @9 y0 W
  98.   char *key=NULL;
    ; L3 l! d+ A. ]/ J% J7 t0 r
  99.   char version[MAX_PATH];
    ; }. S2 R$ d4 P: E
  100.   LPUPDATEFILE file,olds;
    $ _* d! k$ f4 Z3 d$ G8 c- R! y/ u
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / q+ |' a! ~: l! F9 J3 r3 b, t
  102. $ l0 r6 ^' P. y6 Q
  103.   UpdateList.clear();9 K. g- I+ P  P6 e% v' P7 F
  104.   UpdateFile.clear();
    6 Y, I6 x$ [. j3 ~
  105.   if(GetFileAttributes(filename)==-1) return false;
    & Z8 y9 I7 B: N( N
  106.   if(!(fp=fopen(filename,"r"))) return false;
    1 ]9 }- ?" j9 n2 ]5 ]3 y- [
  107.   fscanf(fp,"%s",version);8 K# x- i, h3 @* ~
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    : F3 D: l- _* v, M% g; N
  109.   while(fscanf(fp,"%s",version)!=EOF), M2 b' s; L( u. Q3 Q
  110.   {
    # Z; n# x& X% D" |1 ]& {
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 L! B8 ]: W# ]5 U2 r4 ^. k( q: j
  112.     fscanf(fp,"%s",file->path);& Y* m) b3 ]1 B% u  |
  113.     ReadFileNames(fp,file->file);
    ; C; g0 x9 U1 _5 j. x( X
  114.     strcpy(file->full,".");
    - b7 e  c$ F: {. D
  115.     strcat(file->full,file->path);1 @( w) G; B8 i0 K, `9 Z' G: @4 a1 B
  116.     strcat(file->full,file->file);% x0 H9 F' U  j7 B' v( C2 a- u
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())' n$ ?/ \# C6 E& B" t
  118.     {2 r* k" `# R1 l2 B0 N) m
  119.       file->vers=(float)atof(version);0 r3 t7 j5 w* \0 c3 X4 S
  120.       UpdateList.push_back(file->full);3 Z2 O: a9 ?1 W! z
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; G: c) }$ ^9 ?( q6 F: l% C
  122.     }# d+ o1 n! B6 l
  123.     else9 i" `  f' D: g9 ^6 d2 x
  124.     {1 @. ?, D4 e$ l
  125.       olds=(*p).second;8 @7 D/ t1 \! M9 i
  126.       if(olds->vers<(float)atof(version))
    ; {9 s# i# R  \+ S+ c
  127.       {
    : I2 p6 p( T; U8 h% f- ^# m- D
  128.         olds->vers=(float)atof(version);) S" m$ ^/ a  P+ t: W9 Q
  129.       }7 k) o* T  Q2 G1 Z5 W3 x% d, q
  130.       free(file);
    4 `4 U' ?9 A7 \! k1 C; {: B: G
  131.     }4 q" w& p( z. ^& d( {3 A: @. q
  132.   }( }. S/ i0 b- \1 h2 U
  133.   fclose(fp);
    , g4 Z. U7 O0 R( s% n! ^
  134.   return true;, ]; n0 L9 V. _" w0 ^1 C' z4 [. c  c$ R
  135. }  B( F6 [+ n- H4 m- j$ y
  136. 4 b' y; g6 D1 n  \
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)3 L( {( p7 ]/ k' T7 o& S/ G
  138. {
    ! k- |4 j; Z( u8 Z: O
  139.   TCHAR  szFull[MAX_PATH];0 E! C9 k4 `$ L+ F4 x' u  U
  140.   TCHAR *token,*inter;# ^0 H, K$ [) O$ J) Y5 s7 t* O* V
  141.   *szPath=0;. {+ M& ~1 P8 r' I# e  }) a
  142.   strcpy(szFull,szFullPath);. p; o- P9 t* w" U, n% F; T
  143.   token=strtok(szFull,"\\/");+ c2 X" M+ {0 w% x& g7 J
  144.   inter=token;+ l0 S7 L+ R" l, Q% V% _- ]7 u
  145.   while(token=strtok(NULL,"\\/"))
    0 d  n5 D: o, {/ f2 a
  146.   {" }. ?/ p2 U; z5 g2 @" c+ o
  147.     strcat(szPath,inter);* D$ Q$ r  h0 P# _/ J2 w; S
  148.     strcat(szPath,"\");
    ( ]  p/ ?1 D" e' i6 l: ^0 l; p
  149.     inter=token;! q& ~. L6 K; V  q
  150.   }
    , {0 h& ?4 C/ w$ A1 C1 B
  151.   return strlen(szPath);, q! A$ ]6 Y+ j. u1 [9 J
  152. }! I5 e" ]" _5 s( J
  153. 8 }/ P! h; d$ t: L( {6 i$ U! O
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ O% q3 f: i+ z# V: T
  155. {
    2 C+ w# e' z' u* ~0 N5 B5 u. H0 |* L
  156.   DWORD attrib=GetFileAttributes(Target);
    ! K$ E$ n) B5 m) ~% g0 F5 }3 y
  157.   if(attrib!=-1)
    3 B( `- h" p& k
  158.   {
    & s% T% l3 ~! b! q8 i9 R
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)); Y' T; J  F, s
  160.     {" R& y' s$ x! Z6 U2 \
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);& r4 z* y7 o/ [$ G
  162.       SetFileAttributes(Target,attrib);
    1 u. l+ Q$ D( r& Q" V( v  A
  163.     }
    7 l. U9 ?7 q% y  u4 _
  164.   }
    $ `+ l* B1 S8 w5 J5 K0 ]/ {
  165.   CopyFile(Source,Target,Erase);
    ( R/ s. @: U4 H
  166. }
    * \, h8 a' Y9 w. [$ g4 Y! i, L: ?
  167. # A6 K6 i: X4 M4 i
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)6 S  E7 S# x3 w1 x. l! ^/ u
  169. {$ |1 C7 n0 z6 O' T" I  a
  170.      FILE *fp;
    " Y, M2 g9 H" Z' N, P. X
  171.      char  szBuffer[8192];) R- J6 ?2 I! m* X  x' t' x
  172.   va_list  argptr;
    * W* ~1 H. e; d$ f" e  B

  173. 5 X" a  A' [4 c0 b  M; y
  174.         va_start(argptr,message);
    4 B; Z' D. `7 p) U( B2 h
  175.         vsprintf(szBuffer,message,argptr);
    5 {+ V- K. L4 a8 A% E6 Z
  176.         va_end(argptr);, S8 o" a# l, z
  177.   fp=fopen(FileName,"a");
    : Y  E! `2 K1 K
  178.   if(fp)
    0 W, d1 p" l+ A4 ^" V) |$ r9 T
  179.   {4 |: W. h3 S) E- g
  180.     fprintf(fp,szBuffer);
    * n3 I# p' i5 j' L1 T
  181.     fclose(fp);
    2 P1 h1 o# R! ?1 G: S& Q, e' }
  182.           _flushall();
    ! f) V! l! ^" H4 E
  183.   }
    7 y2 t: V. b% f
  184. }; A' {/ K+ y) R3 I# J
  185. 5 G6 p& |" s& a( B1 y* x2 `2 \! x
  186. BOOL CRevAppApp::Fclearf(char *FileName)
      s0 G6 f+ t+ z3 `
  187. {! V0 c/ N- v* o! D6 N" ]" ~
  188.      FILE *fp;( f$ W9 [, B& `# ^
  189.     DWORD  attrib;4 n  V0 D/ }, z6 ~0 Y% Z1 H; h
  190.   attrib=GetFileAttributes(FileName);* M9 t+ U1 l+ e: o
  191.   if(attrib!=-1)
    * Y: g; |/ E" d6 A$ y
  192.   {
    / y2 h2 b% i; r5 Y' Y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    1 [0 o- w" l; G" O- i- p
  194.     if(!SetFileAttributes(FileName,attrib))
    & |. l; l; [4 ^' u! p8 S
  195.     {& C; \# n$ h2 E6 X
  196.       return FALSE;
    : n! w5 T! f3 y# Z9 U
  197.     }, V9 S! t5 q: P2 p% s
  198.   }
    1 }' i0 L7 ^" s7 D
  199.   fp=fopen(FileName,"wb");
    9 M$ v- B6 K6 U( f
  200.   if(fp)
    + x, A4 G8 T& _4 A6 P3 m# T+ W
  201.   {4 N- @; g) z- C% \/ x
  202.     fclose(fp);) E+ [8 G8 ~  d& X/ ]
  203.   }
    , \, `" n. ^- L" H+ c& `
  204.   return TRUE;
    3 @* Q! p) P/ h4 ^- i. Z& [" {
  205. }
      O) j  b" G+ D2 c) ?
  206. ) d; L" {' a# \: T  u
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    . ]# z/ ?; n8 ]6 m! G6 O
  208. {) b9 F* n4 v# F. O
  209.   char filename[MAX_PATH];4 b9 p  b1 M7 x. b4 J! `3 t
  210.   LPUPDATEFILE file,olds;
    . Z  k1 S6 S- _) o
  211.   std::map<int,CString>::iterator i;
    ( ^# E/ o% t+ i: O' I" }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ b8 ^! s# f+ X5 @
  213.   std::list<CString>::iterator l;4 H; {8 r5 s9 e

  214. & ?- E+ s( `' L8 S9 @- y1 x3 k: Q
  215.   if(bFirstUpdate)
    ! ~* z- d2 b; E! N/ ~
  216.   {
    ) B' V, ^  b1 p1 a: o3 S5 p
  217.     dwCurrFile=0;
    & B* D6 W- `6 k; P; h' @
  218.     bFirstUpdate=FALSE;
    - U$ b3 L1 u. w* \( x' L! \' t6 O
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # O2 g% z: U! E' |* a7 }
  220.     {
    ; \1 m/ z  E% P7 P$ }3 d. H" V! k0 T
  221.       dwTotalFiles=UpdateLocal.size();
    / a! ^) i3 B8 C
  222.       dwDownLoaded=0;
    8 m+ ]% _& F* s! q3 p+ Z
  223.       bSilentStep=FALSE;
    2 M$ E$ s% V" C
  224.       bCompressed=TRUE;6 T% L5 \; W  [  F+ V% L- p' V
  225.       strExtLocal.Empty();
    * J  x. o' j4 c5 F6 r- Y# q
  226.       strFullName=(*i).second;6 v3 ]! U# N7 r2 C) |8 n
  227.       dwProgramState=AP_CONNECT;$ A8 \4 c+ n( Q1 b9 Y( V7 f. j
  228.       return TRUE;
    % F( B/ S) a& s1 |) p/ ~. j% A
  229.     }' k5 n+ D; C' S- D
  230.   }
    ; `1 |4 K. u+ ~
  231.   else if(bRestartUpdater==FALSE), s. y' d% F$ W$ b
  232.   {
    . T8 C+ _7 l0 |8 R5 {6 o( y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())5 E5 Y, O) Q+ \) n$ u
  234.     {3 C, I$ I& w8 J  M  r1 s
  235.       file=(*p).second;
    , Y9 U" Y6 Y: W5 q* J2 ^
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())0 M6 n$ ~+ j5 o5 s: J
  237.       {
    + d6 j: K4 y: B- i3 N
  238.         olds=(*p).second;
    # Z6 p7 X# w) T% m1 q
  239.         olds->vers=file->vers;
    4 S/ J1 i* z. F9 ]1 P
  240.       }1 L$ c, j8 J+ \. _  u& d8 _
  241.       else/ l& @" b: o3 G
  242.       {* ~% ?6 \( O6 U" k/ z+ }& G
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* a% R( E% A6 I2 N& ^
  244.         memcpy(olds,file,sizeof(UPDATEFILE));# `* h8 M1 t6 f( g
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));0 X, E1 b' p% v2 N! a* s0 A  c
  246.       }
    5 t- i5 ^+ j! l$ p" M
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");9 T: J3 ]- R' Z  m8 g- G/ ~
  248.       sprintf(filename,"(%s)",file->file);* T* T$ O" h7 ^5 x! q- t: e; S
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 G/ b1 \: B9 D0 U9 Z  d+ ~
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }2 z2 {. u6 L0 V- J; L
  251.     }. L/ i4 W# o8 u1 K( F* s
  252.     dwCurrFile++;
    5 d2 {" \& N3 h& I; c# o( b6 ^
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    9 A- }& C9 l. r9 w
  254.     {
    ; C$ i4 Y- @; T# D; c- W
  255.       bSilentStep=FALSE;
    , N0 j, t' p9 L# Y+ u  P; Y7 M
  256.       bCompressed=TRUE;
    6 l" l/ o  T; g+ t# w, ?, |- x
  257.       strExtLocal.Empty();
    4 \; n: Z$ ]7 l3 L" H
  258.       strFullName=(*i).second;* A3 W. O& l* X- W' m
  259.       dwProgramState=AP_CONNECT;
    % P, J( x. E' G% W; u3 @1 x
  260.       return TRUE;
    4 M& d/ Z8 s7 n* o1 y
  261.     }
    ( L' _* B5 h' y
  262.     if(!bRestartUpdater)% G' ?3 V' x$ M7 _0 K
  263.     {
    ; S2 m9 i& u" _/ ]) S  c* m7 M
  264.       int iCurrSize,iFileSize;% \+ P0 c- C! G2 i) t+ v$ I
  265.       iCurrSize=0;3 t# D- q9 `+ t
  266.       iFileSize=UpdateList2.size();
    1 p! T0 a1 k8 L4 d7 L
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");, W. t$ @+ j' l2 X6 ^
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    7 _$ V" k+ L; j/ {' u6 a
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");5 y6 j0 H& U! T: ]: `3 o  e- M
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 m9 @! t: [$ O: E
  271.       Fclearf(".\\update.dat");  A" X5 G, [$ O5 ]4 v5 \2 ]1 m
  272.       Fprintf(".\\update.dat","Bloodyf\n");4 h5 t9 Z0 p! `# e" `1 T
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 ?$ J6 H7 o% v& ?" M
  274.       {, }2 h* N  }- r8 O& [, e* E
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())! A: q  ?$ ?9 i) M
  276.         {
    ( f' z2 O* e$ x/ ~
  277.           file=(*p).second;+ j# ], P  H/ k* @
  278.           sprintf(filename,"(%s)",file->file);
    * g" y3 l# u1 U( i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) U& G) f7 |( n& w# }0 ]
  280.           iCurrSize++;$ k3 r$ `7 P  q: \( Y$ O
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));' r" O# m& A$ n
  282.         }5 p6 M5 @3 s- v; ?& l
  283.       }6 }+ t) j$ w$ }- I' F( m3 F
  284.       unlink(".\\update.txt");1 r+ l3 C' R4 n: v; r
  285.       unlink(".\\update.tmp");/ r9 C, R* T: U$ y
  286.       Fclearf(".\\checkversion.dat");4 {+ t* D, V) y) @! E, U
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);- `$ W+ e, h1 i0 S: K6 B7 [
  288.       if(UpdateLocal.size())
    $ t* o8 h6 V: O; c$ T1 I2 q
  289.       {4 P9 Q; O1 r: }9 \/ K- G
  290.         UpdateLocal.clear();
    / N7 I5 H7 w7 @: Y9 U# M0 l1 r
  291.       }
    ) W  h7 V' ~2 w: n7 F# e+ Z
  292.       if(UpdateFile3.size()). E) U/ R! ?3 r/ Q0 [: }
  293.       {
    & C+ u7 @$ }1 k' o2 S
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 X- ~) N- g. H9 n+ Q2 x
  295.         {5 H! C8 Q$ L! Z) X
  296.           file=(*p).second;) _  E1 I0 u& @0 n& q' v
  297.           free(file);# \  f, V' t0 O) S( B
  298.         }' b+ l& c2 u5 L7 |, R8 q8 c2 X  G
  299.         UpdateFile3.clear();
    : z  `/ ~+ a0 T0 v# {0 D- S
  300.         UpdateList3.clear();
    ; y0 X& `  n9 Q! Y* i
  301.       }
    ) {0 F. A" B+ u; j( W
  302.       if(UpdateFile2.size())7 }! c5 N8 D9 s2 N+ h# C/ r; \
  303.       {" i0 d' p) a- g+ h" n% c; S
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 u0 y: g7 }9 q) E1 b4 n0 |
  305.         {/ U* p4 u; ]. T, a/ K
  306.           file=(*p).second;, H: ]; f& y; m
  307.           free(file);
    / P+ l/ J8 |+ }0 z
  308.         }" U/ b: M5 O1 N
  309.         UpdateFile2.clear();
    3 d4 {" _3 m5 J# t) b$ m
  310.         UpdateList2.clear();
    0 k# |+ t; d4 ^: g" k1 f, `
  311.       }
    ( C( I9 W6 T* v' O5 \
  312.       if(UpdateFile1.size())
    $ s& |, N- n5 j1 V; h. K# ~
  313.       {
    ; }  }- D7 D$ q# f) \
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; _5 H/ Y; R* @8 |3 @" R( L# r+ l- E
  315.         {
    3 m( I7 B, \( v
  316.           file=(*p).second;
    ' z) D4 I! f: B; y. M1 q
  317.           free(file);" [8 C2 h! I5 Y1 `1 {
  318.         }
    ) n& D; @( N0 S& g4 o- ]
  319.         UpdateFile1.clear();
    0 n4 \/ i  q; d
  320.         UpdateList1.clear();3 A% B* }8 U4 N- T2 h* T6 R6 o
  321.       }
    $ Y8 n' r4 W% T" h/ w% d% |
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    " z6 R* ]$ |: @8 F: \3 C  s1 ^1 N
  323.     }
    - a/ x0 }5 M, @4 L( `& G
  324.   }* z* B8 m% ~" z* r" }) Q
  325.   return FALSE;
    ; ?0 ?" u4 K+ M6 l3 b1 ]
  326. }2 _9 ~% ^, L7 `2 C$ n0 o) d% T$ b. d

  327. ( S0 J1 n, `. d# |' m
  328. void CRevAppApp::ClearAll(void)
    * C# Z- c0 h5 U$ x  Q% u; J7 r4 L7 \
  329. {
    * [5 W* S1 P+ k/ b! `! _
  330.   LPUPDATEFILE file;% B. \% C3 i: x+ D6 Q/ y% g
  331.   std::map<CString,LPUPDATEFILE>::iterator p;1 g; j/ g7 _- o' J- W3 T- C" V- h

  332. . @& U0 o% r7 D9 l+ m
  333.   if(UpdateLocal.size())$ i8 e' H( J% n- j: f
  334.   {# ^1 i6 R4 N" n
  335.     UpdateLocal.clear();
    ' m( p3 v, k  A
  336.   }, }  V2 J8 m' J$ K0 T
  337.   if(UpdateFile3.size())0 E/ p* I  @* s: }
  338.   {
    4 x* R5 y$ P8 o4 X# L
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ k& A* Z$ l8 Z7 r* K& j. [% L5 K1 h0 |
  340.     {8 S- R" S3 V4 c  x+ _& @& N4 Z
  341.       file=(*p).second;+ G) M7 ^8 |0 d: u+ B
  342.       free(file);
    ( U& O' j. S$ G: h4 _% T
  343.     }, o; }! e) q( l
  344.     UpdateFile3.clear();
    : N/ D& N9 D2 _8 j/ `3 t% w
  345.     UpdateList3.clear();! t9 S8 o# n& J, ?, H
  346.   }
    % g  _3 ?& k3 u5 [; ^) b6 [
  347.   if(UpdateFile2.size()); ?1 c# J( O6 J: C& F1 N/ q4 Q
  348.   {
    0 \, j0 p' O9 W6 `! G3 s
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % `5 V/ h  l! _, X! O% [% U
  350.     {1 y1 k+ j& U9 m# M
  351.       file=(*p).second;  M) ]6 p8 f0 z! X$ r
  352.       free(file);( D% I  ~- _  p$ `7 k; Y% T! C3 j
  353.     }
    1 ]; ]! l" I- C9 W: Y+ y+ I" @' w
  354.     UpdateFile2.clear();  q& ~6 j: l0 E, {9 ~& @. P& Q' f/ n
  355.     UpdateList2.clear();% I$ F: M8 H1 w8 y5 p) U
  356.   }
    - L. M3 |2 O* t7 [  e, [7 o) r; y
  357.   if(UpdateFile1.size())
    # }2 P6 K. V4 T% h0 n
  358.   {
    9 F9 x' [( B: a% q( C
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; `/ b- T. \* G" [4 B( r
  360.     {
    2 t) s/ ^' D) W& m
  361.       file=(*p).second;
    * p  R. ^3 A* i. ~5 k  s
  362.       free(file);
    ; ?' k3 _+ }1 S9 i' \
  363.     }/ Q* E& R3 \2 d+ T
  364.     UpdateFile1.clear();
    / x; f6 E" c9 |3 v& r
  365.     UpdateList1.clear();$ I6 Y+ @7 m+ k5 e7 ~! h( V3 i9 z4 ?
  366.   }) T* U% ~  r& Y* ?# C$ W( W
  367. }  
    5 l" j( a( Q: \1 n3 T" n
  368.   
    . V% D- T1 a  B& _$ I) e
  369. BOOL CRevAppApp::CheckLocalVersion(void)5 n# V9 t( D# F. H
  370. {
    , f( L: @* ^& l; S+ t
  371.   int c;- C2 i: Y( B3 _
  372.   LPUPDATEFILE file1,file2;1 `2 u4 y9 S. n9 A5 ?( w, _3 |
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ) e% T3 R  y& A* V* Y
  374.   std::list<CString>::iterator l;
    0 L3 W; y9 U: q2 W! {( t) t
  375. 8 A) j1 [' x" M) }) G
  376.   UpdateLocal.clear();
    ) w! ~1 l/ d" N
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);! f" A( a* R6 y4 E4 Q5 R
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    / N( U  T. B2 @, N# {" F/ i: A
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);7 d5 ?! Y3 h. W$ J; \
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);! n( p+ ~2 X8 y" z
  381.   if(UpdateFile3.size())4 M0 M1 D7 F0 d  t- U6 Y7 p& R
  382.   {
    2 _) i. Y1 h& J$ b$ u
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)* w# \' Z% w* w3 u! S. g# q
  384.     {
    5 C2 T' y* ]" k3 H# c- \, J
  385.       file2=(LPUPDATEFILE)(*i).second;3 R' X, N" G. w! X- C) O& z
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& B) R) t  s* R: g. U; J+ S/ n
  387.       {
    ! r% _) d2 e" }
  388.         file1=(LPUPDATEFILE)(*p).second;3 V# l& w" u) `. z7 S8 f
  389.         file1->vers=file2->vers;1 j* T9 p4 y% V& R8 c. I
  390.       }
    4 h) O' [! r! ^( y% Y8 w
  391.       else' i- b$ [5 A) S6 e) a+ W* W% n
  392.       {
    ! m( Q# ?3 h  @4 X: B. o# x
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - {% a% J5 h" }, r; Y. [# @
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));0 J1 ~) b. o0 L; O3 j& h* z: r
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));. [9 X6 V. R" n& L) x% L$ T+ d
  396.       }
    $ E" T8 u/ M) k9 H/ n. i) x
  397.     }6 [# L. b3 R, r( s- E) n/ u: G; H
  398.   }
    & l# ?; v8 P# t1 Z" V6 O% X$ ~3 ^3 _
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 ]& k5 O5 g. c# A
  400.   {
    ) a) U; c% I/ j" N, W/ ~, J
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())9 i8 `, S9 R: r2 s' f
  402.     {
    , R9 D. H% [; \; m
  403.       file2=(LPUPDATEFILE)(*i).second;
    / h; r/ h2 n4 e/ x9 _) P
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())7 {6 z3 \5 G$ D' c% ?
  405.       {
    " L- P$ D7 q2 ^* l6 G& K, R/ p4 ^% y
  406.         file1=(LPUPDATEFILE)(*p).second;
    - w  c8 U3 E% D3 K" R" o& s( b+ D, V8 B
  407.         if(file1->vers!=file2->vers)% b/ {# ?. z1 x( L
  408.         {* N% l! Z' A* {9 h  r
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: l  J+ j6 m& q5 Q# l! x
  410.           c++;9 F; |) F! H! q7 q* Z, U5 m2 D
  411.         }
    + e6 l) ~( g9 [' o* z
  412.       }; E& B1 \5 `. y8 R6 u3 i
  413.       else
    - v- Z; C& G( |! \: `" z: l- \/ V
  414.       {
    , Z0 p* U+ n( V3 g; A
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 ?$ }6 h6 X! w' {3 Q4 m
  416.         c++;
    # }  I; _' j% n2 n' y' M2 D" D- ^
  417.       }
    / m6 ]' n  J  j. T4 ^
  418.     }+ y7 \5 ]5 z0 B
  419.   }
    9 O1 X) n! b  z
  420.   unlink(".\\DownLoad\\update.txt");9 X# U0 l1 T0 g7 K
  421.   if(UpdateLocal.size()) return TRUE;
    5 [) s8 H+ M9 V6 c: y7 ^( R3 e
  422.   else                   return FALSE;
    ) Q+ Q1 c- A/ Q( m9 r
  423. }
    : E! h6 |8 Q. a8 X  d4 U0 J7 M- ~

  424. * c2 L$ j! R4 S4 o. L6 w0 Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/") J- K; [* Q( Z# u
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn") p, V7 D/ p5 ~# U! `

  427. % R) L" {, m8 N5 p
  428. 8 k! M9 j% y% p
  429. 7 Z/ W- \. ^1 `1 `. p* ?/ a
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)# b7 L7 O1 ?# p7 Y- I, u
  431. {# t$ m; Q/ R3 i( t5 q  {" d
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;) Y5 I' {$ [8 O2 D/ r3 M! L4 y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / d! x& V" I+ H' H5 h, B4 p9 S
  434.   {
    6 ^. I9 K* ]6 J: ~- P' {
  435.     char szLanguage[50];
    ) G% M* y# |* |# u+ R/ h9 h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ }: _! l$ F# W" f' N, u
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ Y& u) ^( r% ]1 [( E8 J
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 O% _* q' U+ i. N5 Z
  439.     else                                   m_iLanguage=ENGLISH;7 U+ j0 Q; ]  T( |# B0 \
  440.     char szRegister[100];
    7 d/ U' s; W3 x5 N0 f
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! h# \3 V$ f6 e4 c( W
  442.     strRegsName=szRegister;; N6 U! P/ {, ]3 g
  443.     char szPatchURL[100];9 W) i. P" o, a8 Y6 T2 }: F( G
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 m- }% Z3 u; u: T  D# I; W
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* W0 K: E# w3 J. G7 s4 D
  446.   }
    # G# X4 H; g, O" m) k
  447.   else
    / T2 `' {) M. q0 u! N
  448.   {3 M% h0 L( ^  n6 b* D( B
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      s* i0 E1 E( I
  450.     strRegsName=DEFAULT_REG_URL;6 S; O: y7 Y- Q& x4 C
  451.   }
    ) C" d: M  f3 Y9 J/ n; E9 `6 N
  452.   if(GetFileAttributes("hosts.ini")!=-1)0 @$ O, {- _+ R' I% _% r# `& M. l9 Q
  453.   {
    : b: q+ [) K1 J7 D9 h8 }( s
  454.     char szIP[50];# \) a; T1 A3 `' N3 }
  455.     char szDIR[300];
    + i! W2 F5 O0 |' u1 r
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; c5 c. u" M6 B9 X- D: ~8 v
  457.     {& @. o5 x. M: N' L: m
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    1 I( r8 S2 D( e
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");% _# _3 d; m+ p: r+ C5 P3 l! q, I7 R
  460.       strHostName=szIP;
    ) g- X& V) \3 @2 |- k# X# y
  461.       strHostPath.Format("/%s",szDIR);6 Q2 A6 K1 \! e" u
  462.     }5 O. y% C8 F1 Y. _3 X
  463.     else
    ) ]5 n. D2 W, `9 a
  464.     {
    % D* M' e- X8 T! P) @" h; R( e
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " H' \7 w! A8 D# r+ Q2 o9 L; I1 @  u
  466.       {
    ( p& |; a! c2 H; [( D- @
  467.         char szLanguage[50];
    1 m+ e( j- L- p
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      H5 e) s! K- l
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& t0 z! Z" \: N- S; w' j* ]
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + H# j* R. q( `( v
  471.         else                                   m_iLanguage=ENGLISH;
    * w' S3 C2 t6 N8 K$ g8 B3 r
  472.         char szRegister[100];$ |* ?1 r2 g' n: Z# _: O
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 N" _5 x* ?$ I" i, F9 }
  474.         strRegsName=szRegister;
    5 q, L  h, x: G# ]; C& X
  475.         char szPatchURL[100];
    # d) ?1 _7 B9 L$ t% x" V5 D
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' g( S: ]& Y& U2 Y7 Q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 Q2 Q- C1 x* F4 }: v  F, q9 q
  478.       }/ N1 O3 G) ], g8 T+ V
  479.       else8 Y0 ^+ l% D0 p* ?5 {) p
  480.       {
    : V9 ?7 I" q: ]( L
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) `, Y# f2 T/ T' O3 Q& s
  482.         strRegsName=DEFAULT_REG_URL;2 y  P7 O9 }- u7 x& E$ c
  483.       }. Q' @% ~9 s" U/ l) U% I
  484.     }
    ) w$ f5 e0 r0 \  k' b
  485.   }
    5 Z) s" h: w6 E. f
  486.   return true;/ v1 r/ u  u6 K
  487. }+ ^1 x3 Z  z7 J8 l1 f! l

  488. 8 k1 L5 G, [3 U8 T& y! g
  489. #include ".\ZLib\unzip.h"
    9 ~$ d0 \3 C- g, Z2 Q8 V% {
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ( Q- p- `  y* w
  491. /////////////////////////////////////////////////////////////////////////////9 c, c2 M2 _7 j9 f2 I/ t
  492. // CRevAppApp initialization
    2 R3 O' `4 j2 C! ~' }& S
  493. 2 l+ g6 p1 v+ u
  494. BOOL CRevAppApp::InitInstance()6 b+ g" T5 p" v4 }3 F2 G# T2 ^
  495. {
    " |8 J( {1 Z! ~" U4 J
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    # z; n, ]4 x" N

  497. - {% i! `9 r2 Z6 a* U: W
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    6 K: K3 d6 B' P8 L
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))2 a3 q* W+ m0 p. W% ~* ^+ Q
  500.   {
    1 K8 I  {0 a8 U) ?  J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");: Q  o, ~; c. O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    5 W0 c$ ^4 E6 H' ~
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))6 q+ x& ^! P* r. a6 k; g
  504.     {
    - f+ [7 `. T( Q
  505.       strcpy(szPath,szPathTarget);
    ) Q# L& f% u$ \/ \8 _1 W
  506.       SetCurrentDirectory(szPath);
    9 c: P! Y9 E. Y: n+ a1 d( ^( ^  G
  507.     }
    2 W1 c$ I; s: c2 L$ [6 j- K
  508.   }
    6 F- ^, g: E6 ], r0 p2 X% ?( [1 B
  509. #ifdef _DEBUG
    4 A5 o4 Z- a. s; z2 \; Y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + b5 D" @2 `8 Z3 t
  511. #else2 {3 q* k7 F$ l* Q: G
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% x% y+ a8 s( n4 ^+ g; @
  513. #endif
    ( g- `+ C$ ^) S( Y6 T2 ]% f
  514.   {
    # f4 C  V/ y7 j. r
  515.     char tempFileName[MAX_PATH];: I$ C+ g& e% W5 G+ q/ K
  516.     strcpy(tempFileName,szPathSource);4 b3 n& {' H5 _5 x6 X! K) x* ]/ b
  517.     tempFileName[strlen(szPathSource)-12]=0;( M: Y7 p! A$ d6 T1 C
  518.     strcat(tempFileName,"\\$CSUpdate.exe");* d* R  P" U4 q; Y
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    / v+ ?8 Q8 U! [( q$ [% ~
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);, X# \% T: a' n  y. x* h. C8 \3 {* E
  521.     return TRUE;0 d; W* d3 I0 J. I8 |5 z$ h
  522.   }
    : ]0 Y0 W. |# t* A1 D, N6 I
  523.   // Nuke 0118: Delete run.exe6 g2 e9 ]. ~4 k
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    5 |$ O3 J  o$ S: b$ y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");3 t  f7 N  P1 x& Q
  526.   if(!ReadCfgFile("Config.ini"))
    ( c& t9 A' g2 |% V8 I$ j( _
  527.   {  z; {4 u# |* H) c. X" r( t
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);* Z* q( {; x( {5 q: g. M
  529.     return TRUE;' P- o% v: q/ v1 m. V# g& U7 y
  530.   }1 \  x& }( E& _) l* ^6 c+ v
  531.   HANDLE mutex;" z% h3 F) l( E7 {9 H5 u' F$ D  W
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ! D( I4 P  V# M* [
  533.   {
    - ~( k* l( M$ H# G! X
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ) {8 h3 H8 e- @/ I, t
  535.     {: U1 B# O* X" K3 w
  536.       CloseHandle(mutex);' D" I0 T$ g/ q0 q+ T
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    , x4 H6 S' s, v2 V) Q+ _( {8 l
  538.       return TRUE;
    0 z2 X* D+ j  @5 p
  539.     }7 [( U7 W: i7 o5 E: n/ @7 E1 W) G
  540.   }  
    + t4 |3 X, Q1 b& b' ^) a  Y
  541.   CloseHandle(mutex);
    . F. t9 E0 U2 E6 y
  542. $ Y% y9 Z" j% u+ P  z; H# P
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    % g( Z3 N1 j* |  W0 k6 l' _
  544. / |9 J: G& L7 f) |; w3 b2 Q3 ~
  545.         AfxEnableControlContainer();. G" ~% K* H& r1 F3 S( _! Y

  546. 2 ]0 I4 w/ E6 v% g6 x: [
  547.   bCanUpdate=FALSE;3 V. O" Y  S5 A! L  D9 K+ |% K3 S
  548.   dwStartUpSteps=1;6 \5 J# M. N$ @- m! R0 x
  549.   dwProgramState=AP_NOTHING;4 i, I6 E- h6 ?4 G+ Z4 w% _

  550. ; b& V) r2 r* p
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);1 W& p7 `8 R: ]+ k/ O4 S

  552. 7 Z  m% f) ^0 X" H; p
  553.         // Standard initialization
    1 A$ q1 f9 b+ N. J
  554.         // If you are not using these features and wish to reduce the size: _! s5 H) K! \+ k, M% k% t
  555.         //  of your final executable, you should remove from the following6 v# H; I5 @! R6 T5 N- Z+ [# h
  556.         //  the specific initialization routines you do not need.: |* l4 I' e& s4 R  X1 e. j

  557. / X* @8 R8 B, G& [# S, X4 @5 l1 @
  558. #ifdef _AFXDLL
    5 l& }' u0 g! `0 r
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL3 Q" v; i0 ~; p4 [5 r5 x
  560. #else7 l+ u$ x( U5 ]  v; I
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically/ v1 k" C. t- N- w: w
  562. #endif
    8 r' T& w! N8 b& S5 y

  563. ; S2 Q7 R) ?: q* Y
  564.   dlg=new CRevAppDlg;
    ) I, W0 M( e5 K: i( X8 k
  565.   dlg->Create(IDD_REVAPP_DIALOG);/ Q3 b' C: _3 O' ^+ Q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) e" C+ H2 H( `1 N2 r
  567.   m_pMainWnd=dlg;
    ! F) Q- u3 y8 {2 t( Y1 K$ Z

  568. % y6 Y3 [5 P+ y( P
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ' Y) V2 J0 X: J
  570. ( M+ A  M, C4 p: i, }/ g; Z, l
  571. //  GdiplusStartupInput gdiplusStartupInput;
    4 v; b: U+ M* A' k6 i' B* l, f+ Q
  572. //  ULONG_PTR gdiplusToken;
    4 t7 O/ r) V0 t& w  i# _
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    * b* R3 Q8 g  c2 Y9 r$ M6 B
  574. 6 H: Y' b% D( C( X
  575. //        CRevAppDlg dlg;
    2 ^) K8 e1 t" ]2 M
  576. //        int nResponse = dlg.DoModal();
    1 m8 k5 c' B5 ^
  577. //        if (nResponse == IDOK)
    5 v. ^' P6 P; j+ H+ c5 n  K
  578. //        {8 b2 M3 c+ A' B6 z) m$ m
  579. //                // TODO: Place code here to handle when the dialog is6 z( B% _% o6 e1 D* @8 Y# Y
  580. //                //  dismissed with OK% W/ r3 A3 M0 N. f- f8 U
  581. //        }( X; X6 k* a$ ^  p* O
  582. //        else if (nResponse == IDCANCEL)
    ) }3 [. M: y# y' T
  583. //        {: E8 Y  \; J9 f# u8 @: ^
  584. //                // TODO: Place code here to handle when the dialog is
    8 Y: _' b/ @2 w3 b4 ]& e( \1 R
  585. //                //  dismissed with Cancel
    , W9 n7 M8 o; _. x2 r
  586. //        }
    * D) m( f" g7 w$ a* ^
  587. 8 N1 r3 q1 R# G1 w4 o
  588.         // Since the dialog has been closed, return FALSE so that we exit the% E  i! v2 ]0 r: K! j4 N
  589.         //  application, rather than start the application's message pump.( }2 P2 n& ^8 V; z* G! l( L# N
  590.         return TRUE;  b# T' D' U% A
  591. }( @, X% k2 V0 ~: t8 g7 B1 e

  592. ' J$ U) Y# g# ^* ]
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ) U# K8 u& j# e5 X6 @$ D
  594. {7 n5 Y) _- b  N3 M  B
  595.   int i;
    : ]4 u6 v$ z; y0 T3 b; y& @8 }3 `
  596.   char *szRet;! u8 K7 r( I2 N- H% U8 O2 [+ ?' P
  597. 9 m, Q, W" I- y- s5 t. x1 i" v
  598.   if(pSource) { itoken=0; sztoken=pSource; }% S, @: Y+ d7 C" M/ L
  599.   if(sztoken)
    5 J9 M* x/ B3 s! h% x
  600.   {
    - I5 d9 M7 |' V! R- t3 S
  601.     szRet=&sztoken[itoken];2 e" w1 x7 K# k( K% t3 x) Z
  602.     while(sztoken[itoken])
    ! R, o) @7 k0 J! A* M7 S
  603.     {6 [( h3 V6 G3 @- H: `
  604.       for(i=0;i<(int)strlen(token);i++)+ C7 O4 A5 p0 V8 J9 x1 L& d
  605.       {
    4 ^- F. `" N8 z5 h0 k
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]). C2 s2 e8 v+ p# K0 `) n
  607.         {4 p7 N0 U7 Q, v( P
  608.           sztoken[itoken++]=0;6 R9 x0 @0 w; U. Z. c
  609.           sztoken[itoken++]=0;
    ; n4 ?! p. h2 ]4 l- z  r  j
  610.           return szRet;
    , n; @" Z* M0 ^* J: L, j
  611.         }# S* D1 I5 q* [, a0 V
  612.       }
    2 J7 B2 Y" O; @
  613.       itoken++;
      F6 G  S1 {& f( ?  ?. _0 u+ T
  614.     }
    8 P- F* d: b( R) J2 ?1 o" a
  615.   }
    : f9 @8 t  G5 c/ I: k4 e# L* H
  616.   return NULL;
    ; n# M! Y. _. W  P4 l. z- a# A4 O% t
  617. }
    6 R- M( {; |9 I" F/ d  j2 ~9 e

  618. * q9 F% |( T1 f7 o
  619. void ProcessProc(long Total,long Current)
    1 h7 P8 ?5 y  u, D8 Z4 u
  620. {
    5 [+ d1 c* J# X" Y
  621.         MSG msg;
    ; v# k6 I* a7 F. \
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);; `# a% G$ Z. N) z' X$ }% K
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    % ~% u. Y4 v; s- S
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    3 a; b- V. h8 S7 }& S
  625.         {
    & S; A( `. u7 y2 h! r* U
  626.                 if(!GetMessage(&msg,NULL,0,0))
    * z( j; E0 E, w/ D
  627.                 {. q- P1 G4 _; k( k& o( V
  628.                         return;
    6 _  U% J, K& s- l2 }2 I. H$ B
  629.                 }
    9 h2 e* `( r( ~# D
  630.                 TranslateMessage(&msg);
    5 l1 u$ y! P- d* F, p% Z% @
  631.                 DispatchMessage(&msg);5 J  W) \, H' g" ^! |# y% C/ G
  632.         }        1 H" @% R$ w: o
  633. }
    4 y# n" }) W  g

  634. ' W5 W' v% n0 i; d7 ?" Y' H
  635. BOOL bFirstChar=TRUE;' j' |  n' v5 b8 X

  636. 8 u5 h8 {7 v* O. d- _0 w9 p5 w
  637. BOOL CRevAppApp::OnIdle(LONG lCount); |2 z; m/ ]& X" b
  638. {
    ( {3 y5 e! A+ ^0 u4 T
  639.         // TODO: Add your specialized code here and/or call the base class: }8 R# T# A# g7 m& A9 d
  640.   switch(dwProgramState)
    " {  H' M) j. H, j( Q9 d; Q: d
  641.   {& f3 v! P7 `& {  L2 q' L
  642.   case AP_NOTHING:
    8 @( O# g" q3 T6 C+ L4 j
  643.     switch(dwStartUpSteps)
    ; f- e& y* T% D. x& n
  644.     {
    0 |5 o* C, R9 ^* r
  645.     case 1:
    1 {  x7 r/ g: }6 k
  646.       {
    / m% B  Y0 Y8 }* W) Q1 V, z* A
  647.         int i;
    2 |2 U( _% z. ~# C
  648.         CDC *pCDC=dlg->GetDC();
    7 a; I2 W) s. O/ {6 D1 Q' n
  649.         HDC hdcwnd=pCDC->m_hDC;
    3 R, P! Y! W5 J+ t5 e
  650. //        Graphics graphics(hdcwnd);
    , T1 B) g  I# l) V# L% v8 L4 X/ ~
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    - D% j8 F; Y! W  ~5 m9 O
  652. //        INT iWidth=bitmap.GetWidth();( M$ f$ x/ b) ?) {5 P' l( [/ g
  653. //        INT iHeight=bitmap.GetHeight();$ R- v% X9 `2 O, ^- S
  654. //        Color color,colorTemp;
    / d: M" J, `. p  O7 _/ t" u# E
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    8 B- Y0 E" Q" f1 c  @
  656. //        {/ Z" G4 {* S" Y  s+ N
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    & S* j# O" l: x2 _9 }7 _0 O; r. s
  658. //          {' o. a8 p( C8 m1 ?4 x  K# X& K
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    5 u7 N  J4 I! w# B8 A$ X# U* j* x
  660. //            colorTemp.SetValue(color.MakeARGB(
    8 k& I- W' i* B) H) P
  661. //              (BYTE)(255*iColumn/iWidth),
    # n  E5 I9 q+ I! t' x( V
  662. //              color.GetRed(),+ o, U: b' r: t0 ?
  663. //              color.GetGreen(),5 N: D2 j# K$ o$ ]
  664. //              color.GetBlue()));- W9 A, ^- z$ s6 S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);( @- @5 w) a$ i8 Y) G6 m4 d
  666. //          }/ y% S( c. ~! \
  667. //        }
    0 d  x3 p' s* u- E; P' h; `
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    & f! o) x, {; M0 n. U/ U2 c
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    8 q8 y: ]! o) f; @; P) Y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 U" n8 E" f7 G
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . ]4 l2 P6 n3 W
  672.         for(i=0;i<240;i+=8)
    # O+ i5 A7 N2 |. m0 B2 W
  673.         {3 W# Q, r$ B  |( ^. ]1 M
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) |, T, e! M  M* o& z- v1 d+ t; g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 Z5 L( r' z  t( H% T8 m* r% V
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    9 e& d, v/ E/ z9 ~1 r8 V, {
  677.           Sleep(33);! g# l, N6 F4 c, ]
  678.         }% c! n+ R7 m7 ^( E$ B( K3 G
  679.         Sleep(1000);: K) R) h, g; }, ^) R
  680.         for(i=240;i>0;i-=8)
    0 \1 ^) A# |* z' A7 S! g2 i
  681.         {+ u: L) m1 {( L" c4 O) {
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);+ M0 g) I+ z3 p! C& S+ j
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);' V5 R! ~+ B4 Z7 U  ]/ G
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; k. w& y: g% U3 j
  685.           Sleep(33);$ d6 o5 X$ R4 e1 F# l0 T
  686.         }
    & ]1 G, _! q8 u" v& d; e/ g( B- |% N
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);7 J, N. A6 l) \
  688.         dlg->ReleaseDC(pCDC);( }3 c/ z/ Y# Y. O/ x! d9 N
  689.         DeleteDC(hdctar);
    0 _% `3 e5 W. ^( P* u" P
  690.         DeleteDC(hdcsrc);+ x! J* q3 `4 y2 B
  691.         DeleteDC(hdcorg);
    4 u: F, R/ m/ a1 ~9 t% z
  692.       }
    8 `* L7 l* {2 g- q6 ~" n2 Q
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    1 X, B* p$ z% Y/ d! k0 n
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    0 w! X* i( @# C1 ~: \
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 }4 z- B$ W0 M2 C
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");. @6 `6 [+ s# J* g  v2 p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. Z! g, s% T2 H/ i& G
  698.       if(!Dn.Connected())
      Q& [) ?6 O- _. ?2 q2 o  k! N
  699.       {  `2 C6 Y1 k" L7 ]/ p3 L. k
  700.         dwTotalFiles=1;4 m$ L  d, [+ t4 V1 a$ z# h7 K! S
  701.         dwDownLoaded=0;
    7 B2 J. d  K4 u) x8 @3 |6 k& M" w
  702.         bSilentStep=TRUE;) v9 [9 g  M0 R! s  w. i3 u# u
  703.         bCompressed=FALSE;
    : b8 o9 J$ [* t# a$ F5 H
  704.         strExtLocal.Empty();" [% R% x* J& h
  705.         strFullName="readme.txt";
    % D1 x: F) A! Z4 x( E
  706.         dwProgramState=AP_CONNECT;
    5 ~! f+ w# s, a% P
  707.       }
    2 W$ @3 y' {8 j2 P2 @+ r! a# T' b
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    & \5 Q4 h3 V, }/ N  X; `: ?
  709.       dwStartUpSteps=2;
    * I. Q- G) |. z
  710.       break;
    ' Y9 m# C6 J  E, ~% w- M
  711.     case 2:$ C0 U% c% x: f3 {: T  v: `# J5 b
  712.       {8 \- M2 s! `% X; ~
  713.         int iEOF;
    7 ]3 \6 q0 N/ M- l9 K
  714.         FILE *fp;
    3 B8 L4 i" ?" V: _, R
  715.         char szString[512];
    ! C! e- e% V" A$ r
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' M/ \+ I: I  a! A
  717.         if(fp)4 i( \# f) q% Z' a2 o6 |$ R
  718.         {- E0 L) [. S1 ?* ?
  719.           do
    ) m$ R2 m" z* o: {7 ]$ v' g
  720.           {
    * }" m- O0 @& K% D) {- g
  721.             iEOF=fscanf(fp,"%s",szString);7 X& z, D) m' J- u
  722.             if(strlen(szString))
    ' t; F/ N8 }2 [# q
  723.             {2 I. m! _+ q; E
  724.               if(bFirstChar)0 W/ ]9 U7 H& R! K9 W1 m6 ~: a
  725.               {& l; }: s  }" o% l9 p
  726.                 bFirstChar=FALSE;& Y1 \. I* A# T+ W
  727.                 bConnectIsBig5=FALSE;
    * H4 m9 E& y& ^7 B9 W$ C0 o) s
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    1 Y8 E2 S# r$ z: V. {
  729.               }
    * h; S: w* \5 O5 F5 o6 L& W
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    0 F: a3 y. ~$ m& i
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));2 {! e* l: ^- Y, l' y5 p% c
  732.               dlg->m_ListText.AddString(szString);
    " u" R' T' v6 e6 H
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + h% x' R9 s2 d2 b. z8 Q3 l
  734.               *szString=0;
    7 b3 d3 d# _4 g5 H! Q) m
  735.             }  q3 @% @9 r- i- J
  736.           } while(iEOF!=EOF);/ f, T& u  M& m% y  A
  737.           fclose(fp);
    ; @  a# v! M% w5 u, T
  738.           unlink(".\\DownLoad\\readme.txt");- X' j- A$ \! ^3 d- o2 E& G
  739.           dwStartUpSteps=3;9 U- r/ i/ z/ }9 D- h' i/ P5 K
  740.         }( ]+ o) y+ g+ r6 s7 x) ^
  741.       }
    2 m' l& }3 U" D# j+ I& H
  742.       break;
    # r! J' G2 W) r/ D
  743.     case 3:) {" c* B+ g& z
  744.       if(!Dn.Connected())
    , s" o5 u2 ?, k
  745.       {* o2 ^  D2 N( r5 L' ^0 W; l
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);, X0 @% c0 {' o3 k9 n1 k
  747.         dwTotalFiles=1;  |6 k; `, c) O; H
  748.         dwDownLoaded=0;
    . `6 G6 L' x& e- @5 a4 T6 b
  749.         bSilentStep=TRUE;
    % P6 w* d$ V  m. _, \9 [3 }
  750.         bCompressed=FALSE;' L: o9 g( K7 f2 C
  751.         strExtLocal.Empty();
    & l+ b/ F4 p, C' O* S, l
  752.         strFullName="checkversion.txt";% g' X: Q. I5 ]; X2 K0 ?7 ~
  753.         dwProgramState=AP_CONNECT;
    3 b0 Q' d# |' N, c% N$ ~3 o
  754.       }
    ; ?, v4 m$ [& B' p0 _
  755.       dwStartUpSteps=4;
    / L1 O( P( J% E: S, k  p# X
  756.       break;
    0 }! v  j' q5 k/ @7 X
  757.     case 4:
    % _* X4 i: h2 A1 f9 k6 s1 ]3 M
  758.       {
    0 J# k4 V2 T  T& q
  759.         FILE *fp;  b/ M1 b! N, t8 y
  760.         char szString1[128];
    ' S8 ~4 _/ q; [; s' P
  761.         char szString2[128];
    2 n( C' o1 y# r' A" E/ H7 {
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");) V; R% J$ _+ Y( J5 S  v/ \: f
  763.         if(fp)
      K# o2 P6 p9 b
  764.         {
    3 |+ t8 w7 c, w6 e! x# X0 E0 l
  765.           fscanf(fp,"%s",szString1);$ c. i: _% b4 K# _: g0 t* \8 }4 y' B
  766.           fclose(fp);
    $ S$ z1 Z) F" J7 y( K0 l7 j
  767.           fCheckVersion=atof(szString1);6 z+ @& B0 C# B, r" B$ V( K! c" F* G$ C
  768.           fp=fopen(".\\checkversion.dat","r");
    9 ^+ w( g% Q- l4 k; M
  769.           if(fp)6 {- o7 E9 D2 D) B
  770.           {' \* O" N, m2 d% e' H( _% n1 ]
  771.             fscanf(fp,"%s",szString2);
    * G8 l$ B9 R* O+ f8 R  H
  772.             fclose(fp);
    $ A, T# i4 F# ?, m9 z9 w7 J6 n
  773.             if(atof(szString1)!=atof(szString2))7 b  i2 c2 X4 h1 j
  774.             {
    2 C3 M& O7 c) Z, \
  775.               if(!Dn.Connected())
    0 e8 _# I7 s  E$ b% Z9 e; Y
  776.               {7 _( j# c; q  [6 V7 \  L
  777.                 bFirstUpdate=TRUE;9 \4 Q7 j, V& Q) ^
  778.                 dwTotalFiles=1;0 X- p! R- D& G# E3 T" c$ K
  779.                 dwDownLoaded=0;
    * O" ~4 B+ C8 ^, k. c; S
  780.                 bSilentStep=FALSE;' P' h% x" R' \, f: {
  781.                 bCompressed=TRUE;' J# t( n7 Z( [
  782.                 strExtLocal=".\\DownLoad\";
    ! W0 l& n- \" n# z  _
  783.                 strFullName="update.txt";
    3 k0 |/ S4 d) v9 }6 m7 N+ I
  784.                 dwProgramState=AP_CONNECT;
    5 p3 F6 D$ u* A9 F0 N/ B
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 w' D3 D6 R: Q& {: A8 e: Q4 A; @) _
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / ?% I4 u  ~: G. U9 z3 G' W
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
      N! d; x  m5 g: l6 Z4 D& R
  788. 4 F1 R! ]+ s1 z) h7 g/ e
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! H  M  [$ x! `
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ! f+ b9 c$ A+ X
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    - {8 D$ u0 G/ o0 Y1 R
  792.                 {1 ~8 Q0 F* W4 Q1 |' j/ c
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");( {/ p  h* ]1 A3 O; b+ f
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");5 [7 ~" I9 _& S* h4 s0 j& M' q# J
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");% s- C+ t6 ^3 ^# b# L5 p. ^
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 W# }3 _+ H/ ^2 B* W. B
  797. / V! h. u# S( [- B- r+ k
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ a, t; [4 c& ?1 W, V
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" W% A0 ^# h. S8 N; s
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    & o: d" D$ B. Q$ G5 K; c' p$ N
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 U+ V. s* y% k
  802.                 }
    8 e% s1 j5 k1 Z
  803.                 dwStartUpSteps=5;: l! `9 u( \5 w% K( {/ e5 Q
  804.               }
    % F- V. o) }6 k4 m3 i
  805.             }$ K$ E7 U# h3 y
  806.             else
    5 l$ m3 X4 d) g# [1 T* ]9 B! S) t
  807.             {
    9 v; O; G) A0 g- S* e4 ~9 f
  808.               unlink(".\\DownLoad\\checkversion.txt");4 P* T  l7 e6 x+ q7 p
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      U% ~; B! g3 [( P6 c6 E7 L# V
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 o: \6 y: n2 s0 ]1 ?2 m6 \
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    * T$ u; C3 A  h8 I5 r
  812. . ~6 O3 a6 |# l% H8 E
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) m& t- ]' ?: U. s+ Q9 Z) R
  814.               dwStartUpSteps=99;; p- K7 e% D4 a* {/ ]3 b
  815.               bFinishUpdated=TRUE;
    % b: W, c/ g# G
  816.               bCanUpdate=TRUE;
    ; D( K' v6 Y( d7 S: S) T8 i! F
  817.             }
    . @* f& C. K+ ]9 n& A6 _
  818.           }  C( P8 P/ i; ]$ e9 u3 R
  819.           else% m% Q! A7 t# Y6 @  |' P/ n
  820.           {4 E7 T8 r4 S% a
  821.             if(!Dn.Connected())
    & b0 K1 |- }: F6 J! ?7 h- W
  822.             {
    + K, J+ Y2 O" ?
  823.               bFirstUpdate=TRUE;6 j0 F% i" m2 C( Q4 c
  824.               dwTotalFiles=1;
    ( H( K- c; Q3 m$ o$ l' C* D% @
  825.               dwDownLoaded=0;( x( I. Z. m% x  ~" W5 Y4 o
  826.               bSilentStep=FALSE;
    8 ]4 A, z9 {" J9 N' k
  827.               bCompressed=TRUE;
      R# V% I# K, E8 L2 j& w
  828.               strExtLocal=".\\DownLoad\";% U- F3 x" ?) Q: d1 ?0 z: J/ t
  829.               strFullName="update.txt";
    ( _3 i; W/ k( W; s# T
  830.               dwProgramState=AP_CONNECT;! z; f" f8 r8 i! k% C6 i
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) h5 \; m3 x4 m2 d- z; C
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      G1 A0 `" d" R1 N9 C; T
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    9 [' L2 ^3 o- ]4 _' Z+ H
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ }# D* |8 }+ ]/ A8 u
  835.               unlink(".\\DownLoad\\checkversion.txt");, y+ R/ M) ^6 ^" K, T
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)/ q& T0 F2 n: L( W; ]5 t4 Q$ w
  837.               {
    + o# V# `/ m* F, p( y3 q4 k8 V; {8 B
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");9 B: A: Q9 |' ?2 x# v$ L
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    7 X; Y. ]" w; s  q* ?" W
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    . H& Q8 x# C' f. e
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ l- I" C8 R) ~! g! Q) H" M6 Q
  842.                
    + Q3 ]: h( ]. F1 Q, ]
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " r; ?8 j" ~. b) l
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 r0 T; G4 R, I# k7 T/ d
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    " O# k5 I; V/ f
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 ^7 w- G$ E, w
  847.               }
    9 X$ k/ H; [: {/ h8 k
  848.               dwStartUpSteps=5;
    5 m! |8 U- o2 p* l: m3 X
  849.             }. m6 c" _4 e$ z, O, c8 f5 E
  850.           }
    ! r( d  W9 R1 \! [
  851.         }
    + x9 W2 S( N5 X! H4 n" A
  852.         else
    8 W( o& N$ S- ?3 @
  853.         {
    4 L1 Y6 k2 i$ t/ R( L/ e
  854.           dwStartUpSteps=3;
    5 ~, h0 I& @0 d
  855.         }8 L$ c0 b" t. M0 C) a: k
  856.       }
    8 v* t( R7 M; G$ V' z% r( p$ J
  857.       break;8 L* e- j& B/ W" {( j( S0 s7 j
  858.     case 5:9 W+ W4 F6 [/ ^& Q: W0 a& L
  859.       {; y# p$ T/ [3 F* N/ e5 r
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)" j! K- h; Q, G3 o' Y. W; O
  861.         {/ z% A) ]% X# K
  862.           int opt_overwrite=1;4 ^4 q* E* `- H- \
  863.           int opt_do_extract_withoutpath=0;0 g5 E' U) U1 M5 K9 q5 }
  864.           unzFile uf=NULL;2 e1 r, A1 w4 j) z' j% Q" p

  865. / N. ~( w2 I. e( ]$ U5 q
  866.           uf=unzOpen("Wsa.zip");8 ]$ b1 E  v: h9 v' K- \" U
  867.           if(uf)' f( I4 a" S9 Z5 J! Q( B
  868.           {. x! I: `1 z) i) T
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    - x9 N' V8 Y: ^) Z  I
  870.             unzClose(uf);
    ; i" z6 _9 q+ J' ?
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");9 ]& P4 k* B5 ]2 L- ?
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    2 w: @9 ~% z* U9 V* _: B, r. ?6 X
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");% T9 b& }! Q$ R: Y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# t0 O" v4 F# `5 I8 T
  875.           }5 ^, V  k. K0 T. p
  876.           DeleteFile("Wsa.zip" );
    + d, f3 |$ L/ T# Z0 V8 y
  877.         }1 C. z. ]: ~7 I6 ?& I* o* N
  878. " q6 O/ K7 f4 ^  M) }3 |8 l& l
  879.         if(CheckLocalVersion())5 C. W9 P) z, R/ o' n
  880.         {/ k& y& J  _+ i  i
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    0 O) y+ g1 o9 X+ I3 {
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    # g1 q* P" n" z, e( y( `
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    + G& ]7 ?( z$ a/ A# V
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ n" w$ ^  `1 D+ F: F; p! Z# v
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    % x3 W- ?, q& z5 r$ Z0 a# [! l
  886.           dwStartUpSteps=99;- M8 \8 h' c% b( m# L: P
  887.         }
    , S0 C' L8 b4 x
  888.         else
    * N! S% V" K# u! X) b4 n
  889.         {
    * C7 o: u8 _8 j1 J% X
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    8 ~* z2 F' W. i! k  k! I: D6 a
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    7 z- L: V7 G; I* s: J1 [; E
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");' o+ E. T* b3 h2 F( P

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-21 13:37

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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