找回密碼
 立即注册

CSUpdate.exe源代码

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

0 u: p7 R: T6 w( m+ |' l  g
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ( ~  V; G6 V* z) z0 ?9 o5 H
  2. //( Z, h6 W( h+ R. M/ }3 \( b1 t
  3. 4 j3 w5 e4 j* u" ^
  4. #include "stdafx.h"* `. V5 f7 }: n' s% s! X
  5. 3 f' z5 L! D2 x8 e" q! v/ I
  6. //#define UNICODE3 K" G& \1 U7 a+ ^+ |- S, Z+ q
  7. //#include <gdiplus.h>% `) @1 F: D" D- u4 J" N
  8. //using namespace Gdiplus;
    8 s" a: [1 {' v* s& v; i3 d
  9. 9 K: E* c/ _# L) @
  10. #include "RevApp.h"
    8 j5 g5 S' L3 L% c. |* r
  11. #include "RevAppDlg.h"2 j3 M" b/ N) K/ x7 I7 o/ ?
  12. . t8 Q6 F5 u& |0 U9 w# R
  13. #pragma warning(disable:4786)$ l; G0 `% {# ]- p  S9 {
  14. #include <map>
    0 m% j! E) j4 g' ~# @+ Y) u$ a
  15. #include <list>7 k, U# I" G% D# H+ {" F
  16. #include <direct.h>
    : M0 g7 A& \' e9 u+ ?& A
  17. . d* Y: `' c1 ]
  18. #ifdef _DEBUG5 h3 d7 w( U% r; V5 Q
  19. #define new DEBUG_NEW
    + F( `- P3 y1 r1 H3 r
  20. #undef THIS_FILE9 a, [/ d& M, D9 o! {( f: ?
  21. static char THIS_FILE[] = __FILE__;0 _6 @7 l) h) k  w" h- R- r
  22. #endif! y& z/ J0 M# m8 k7 r
  23. #include "SkinResDef.h"
    8 {' ^0 [# i, ^" ?2 t$ T( S8 r
  24. #include "ChangeBG.h"& i( {0 v' l& E- {
  25. #include "AFXINET.H"9 q, ]- Q" g& q

  26.   j# \& j8 y/ r1 ?4 M3 W# V
  27. #define TRADITIONAL_CHINESE 0- @4 [1 P0 q& N( h) W
  28. #define SIMPLIFY_CHINESE 1& h* ^! V- S' q& A* Y8 ^7 c
  29. #define ENGLISH 29 J) n: ]4 i1 `0 o. D
  30. int m_iLanguage = ENGLISH;
    # a2 v, L* }" }9 |
  31. /////////////////////////////////////////////////////////////////////////////
    - x4 J$ ^' A6 P! ^$ m5 f9 h4 k
  32. // CRevAppApp5 a- O7 d9 I  D* z2 q

  33. $ b' G7 ^8 \( B5 C
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    " f, T, A" o. E  y# b
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    , U5 q2 A( S; [
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    3 S% [7 Q  H* `! C
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!' @8 t2 F  }) l/ C
  38.         //}}AFX_MSG
    8 g0 J, H& `. z( }5 ]! V
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ! Q2 X% f8 z, L
  40. END_MESSAGE_MAP()
    7 c& J5 w1 S( V& d
  41. 7 d% B" e  L; M9 ~+ M5 a
  42. /////////////////////////////////////////////////////////////////////////////
    . X4 c7 h0 w# G. U! M
  43. // CRevAppApp construction# O) i3 s8 D6 q" Z% g7 d" D* l

  44. # r9 ?1 F3 f7 j, h
  45. CRevAppApp::CRevAppApp()5 ~' D5 _1 \$ _* Y0 k: c( A
  46. {8 I6 w3 }9 D3 V; Q6 M4 ~2 N
  47.         // TODO: add construction code here,1 ?. t$ S0 Z4 b" n. G; ?8 Q
  48.         // Place all significant initialization in InitInstance
    $ e, c# }9 L* c4 x; i9 |! ^4 Q5 d
  49.   bDisplayIsBig5=FALSE;! D& f; O! c4 c: U1 E9 k! Z# K
  50.   bRestartUpdater=FALSE;
    : v1 R7 _6 q% J% P# y/ D4 b
  51.   bFinishUpdated=FALSE;
    ; p8 K( L' M9 u* z4 W
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;/ u: x8 T9 q/ R* N0 m. T, E/ R; H
  53.   InitChangeDataBig52GBKS();" z9 T/ Y0 k( ^5 \% ^/ c3 @
  54.   InitChangeDataGBKS2Big5();' `* N8 V1 {4 k
  55.         //) U" |" Z; E) Q, D* P& T% v' N
  56.         bClickRunExe = FALSE;+ Z- M2 G8 f3 G& F) ~! U; |
  57.         //
    ; i  l% s+ n( F) _  `) |: r
  58. }
    , e& B5 k# Z' K

  59. / {7 B; G! z( r2 J) z: ^
  60. CRevAppApp::~CRevAppApp()# S- S5 L: W1 g1 m% V
  61. {
      Y0 {; n2 _0 A( t+ P: G( U# r
  62.         // TODO: add construction code here,
    , `! F( p7 Z* j" r- y  X# ]. o
  63.         // Place all significant initialization in InitInstance
    * Z" T8 p6 a& E" D" h4 G2 g1 k
  64.   EndChangeData();" o6 w8 ?' V% V& S* o% |" i
  65. }7 l+ t) k9 n) `% H7 Q( R
  66. ) M4 T+ l9 o+ n4 h4 |+ X
  67. /////////////////////////////////////////////////////////////////////////////
    7 E0 y% W, ]- m8 @
  68. // The one and only CRevAppApp object2 I; ?' l0 q# V' f/ B
  69. * R8 Q* \$ Y# q. ]  s
  70. CRevAppApp theApp;
    $ E/ v" ?& q, H/ c2 h: A* }) J
  71. 2 S( t8 P0 |: f0 V
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)$ e! h  L2 b' N3 T
  73. {
    : I/ Q4 j/ a" J. x, ^
  74.   int iEOF=0;' p; e( @" F0 V$ J6 ]1 B) J+ h
  75.   char szTempName[MAX_PATH];* O. _, r3 f/ e6 o1 q0 H: R
  76.   *szFileName=0;
    4 M' P% o: x/ u& h# T5 b/ o
  77.   iEOF=fscanf(fp,"%s",szTempName);
    . h0 [, R0 O* `; q
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ; y1 v. V: E; T1 X- {( a
  79.   {
    3 Q5 D0 g4 C9 q, o
  80.     strcpy(szFileName,&szTempName[1]);
    - E  |: i" [  }2 E3 O* J" R' ?* U/ i1 h
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF); G! _" x/ j/ \5 `, W* H' t8 B1 y
  82.     {$ C- I2 y1 w) H+ f2 l
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ' P, L- }* X4 o5 h5 J% d1 B
  84.       strcat(szFileName," ");# o5 @& v" S9 N
  85.       strcat(szFileName,szTempName);6 `8 t0 O! z- f; o# S2 w
  86.     }
    3 Q6 J, X+ z5 Z) f$ i. F4 x; y
  87.     if(strlen(szFileName)>=1)
    % W; z7 s/ ?+ S% H$ ?
  88.     {
    ; A* r1 a# a1 o% \* ?) D( G
  89.       szFileName[strlen(szFileName)-1]=0;
    ) u; [1 Q; W' Q* i5 ^5 B) H; h6 M
  90.     }
    7 o4 x; |+ }1 _% X4 o
  91.   }
    * r0 P! r0 o- K1 C; r0 N
  92.   return szFileName;: q/ r0 T7 x1 g# R: L
  93. }: N* N9 V" o; A8 j
  94. ; i6 }# K4 P, `6 n
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)4 Q/ S1 S& b- O) @+ B" _4 ^
  96. {0 c5 i5 u  [2 w0 o
  97.   FILE *fp;
    ) }' _! @4 ?# P" \7 ~6 |6 K
  98.   char *key=NULL;6 P: A. w$ Z0 t1 [* A4 S* m1 C" n
  99.   char version[MAX_PATH];$ w1 z& d% ~4 p+ m
  100.   LPUPDATEFILE file,olds;
    : W- d( h. E9 {- F8 g  O
  101.   std::map<CString,LPUPDATEFILE>::iterator p;& q  P# L/ \: U" ^
  102. ! R6 l9 d6 V$ G7 w$ R, S
  103.   UpdateList.clear();
    ( }$ F6 Y$ N/ A% N* r! I
  104.   UpdateFile.clear();
    5 R+ j( [* c" N* I) ^
  105.   if(GetFileAttributes(filename)==-1) return false;
    ( H# z  q, H) K/ X
  106.   if(!(fp=fopen(filename,"r"))) return false;2 ^+ p( y8 H# x* L1 z, @- q" R
  107.   fscanf(fp,"%s",version);' e1 G- @1 X0 |% Z. s/ t
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    7 c7 L, p# G' E( }' Z/ y2 m
  109.   while(fscanf(fp,"%s",version)!=EOF)* T2 e0 ]; R. n. m5 S
  110.   {- G6 t2 R- Z: {0 _
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 B. `$ I& |) i; m* H& F- J
  112.     fscanf(fp,"%s",file->path);) G" E: A3 f3 ?: @' Y! w/ s
  113.     ReadFileNames(fp,file->file);
    ! t4 H. y+ l* ~4 B( H
  114.     strcpy(file->full,".");- c0 G5 z& d  x- V; q2 W7 Q4 {+ o
  115.     strcat(file->full,file->path);8 I6 n& v) \3 U. p5 T! w6 Z
  116.     strcat(file->full,file->file);/ e1 }; h) g" N) T/ X% O5 Y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    , I& s" |. O0 Y: Z
  118.     {
    1 O4 F& o8 |% h1 ^+ ]" v% x0 j9 p8 m
  119.       file->vers=(float)atof(version);
    " u, n& w, |% H$ I
  120.       UpdateList.push_back(file->full);
    8 |; S6 M$ k- B$ s. q9 c
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , y6 R% r% z# V: ~( j! q
  122.     }( u: _. Q4 A1 ?( D, S; Y
  123.     else3 S$ l1 U3 X0 d: W& r2 h. ], D
  124.     {% w- F9 ~; L: |
  125.       olds=(*p).second;
    / x: v+ a* V+ l3 }
  126.       if(olds->vers<(float)atof(version))# V% ~# T/ x: F6 o2 R" U% Z
  127.       {
    ( ]* t1 q( b* A. r* W2 `/ i
  128.         olds->vers=(float)atof(version);
      ]: \0 Q' Q* c. h* }  e0 J
  129.       }
    ) x( A9 ?9 _  ]
  130.       free(file);0 o" S& l  T+ p0 B. `& m: U& T- w
  131.     }+ }3 \- H8 a& B3 E- m" v
  132.   }1 [  ]$ d' p- H! G0 K+ X
  133.   fclose(fp);4 S2 j$ n- g! k' O
  134.   return true;
    ! K1 V, T6 A: y5 S/ d6 s
  135. }
    , I- ^0 P0 R% I- U* Y' A6 T3 t

  136. " U8 {1 E/ v% S/ t2 P2 p% H
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)) y! g) z, k% L% b+ Y8 T
  138. {
    . s/ ~( z9 Y% q8 c9 y! [4 H( B3 d
  139.   TCHAR  szFull[MAX_PATH];
    2 e. [8 Z3 q8 T
  140.   TCHAR *token,*inter;1 {) v2 l; y3 t+ c
  141.   *szPath=0;
    9 E* V' ^1 w( E3 e
  142.   strcpy(szFull,szFullPath);
    - q6 w) I9 h: ?8 ~8 J/ q
  143.   token=strtok(szFull,"\\/");
    / N& |- K! B* J2 I6 ?4 h
  144.   inter=token;# a( p+ U6 M. T* [3 a% ~3 S' I
  145.   while(token=strtok(NULL,"\\/"))
    - y7 u' z6 ?/ P" ^  ]: z7 m
  146.   {
    ! H: A% P- w/ y% K/ C
  147.     strcat(szPath,inter);
    ' t( l4 R1 o2 l# U9 `3 L
  148.     strcat(szPath,"\");
    & T' v+ W  n4 f7 J
  149.     inter=token;1 D& ^- a" F9 a# X2 [# Q$ d& S
  150.   }
    7 S6 A3 Y) z7 G+ x% A, n6 [/ o
  151.   return strlen(szPath);/ C; v2 s  ~4 v; K# Q) n
  152. }) ?4 g: U/ b6 Q, P+ M* T

  153. & l' F9 u! ?* Y  p5 M4 [9 k
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)7 K0 F4 V# t; q1 u& ~) K% r
  155. {
    * T5 Z. Z- |3 F& a* p3 R- x
  156.   DWORD attrib=GetFileAttributes(Target);
    , h+ n  Z2 X; S8 r2 D3 a+ \; P7 u
  157.   if(attrib!=-1)
    8 b# n. b  n: O8 k! w1 t9 Q# u
  158.   {+ c2 A8 ~+ Y' o) R% T/ }" y
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))# a0 v/ [& Q" z+ ^  G  R
  160.     {8 r# ?, k# Z/ A# Q; z# `7 f
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    6 H! M* m' F$ ]" m9 K3 ?3 M% b  R
  162.       SetFileAttributes(Target,attrib);+ O8 C4 S9 L/ `4 m& G6 \
  163.     }
    # P! E$ _. M0 H' S, n2 R# k
  164.   }
    4 y' Q! u/ P( j/ O& ?2 k1 X
  165.   CopyFile(Source,Target,Erase);
    " |0 a5 _1 X3 z' Y
  166. }
    3 H% D: O, G" `; z6 G, V2 {% u
  167. + \6 ^' ~: T3 W
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    , j* q" F$ E1 Q, k
  169. {
    # Z1 b' o9 Q) {  W
  170.      FILE *fp;
    ) n, C9 q- }; r9 {; I) h0 e% y! E
  171.      char  szBuffer[8192];
    ! e0 }4 i2 W' \$ }* f
  172.   va_list  argptr;" ]1 z; k! W6 X/ p

  173. 6 Z  T* }, L* F! d  q
  174.         va_start(argptr,message);
    1 a. Z  a- Y8 G2 V: S+ p
  175.         vsprintf(szBuffer,message,argptr);
    * T# |/ b% H% m/ w/ R
  176.         va_end(argptr);
    ) i* y$ F3 e7 F0 V' c/ d% ?
  177.   fp=fopen(FileName,"a");- D! u, Q4 J0 c
  178.   if(fp)' G5 N& M3 C/ c* g9 g
  179.   {
    5 s' Z3 R% `) t. y2 ]- \- q
  180.     fprintf(fp,szBuffer);3 G7 V$ T+ h$ O
  181.     fclose(fp);
    6 d9 D" K. Z6 P0 H
  182.           _flushall();4 y7 `3 S  l5 ?4 h* k
  183.   }9 n7 X/ c8 B7 u6 k; c3 B9 c! M
  184. }  G0 h6 P1 k! M1 J' L& w

  185. 7 i0 \' }( X+ Y; o8 h
  186. BOOL CRevAppApp::Fclearf(char *FileName)  Z! R1 W# E- j, {/ R1 q
  187. {
    $ ]: _8 y2 U, _. M" |
  188.      FILE *fp;
    - e  s' F. N( l9 C
  189.     DWORD  attrib;
    ; X/ j( Q& ?9 a' S# _5 p1 B
  190.   attrib=GetFileAttributes(FileName);
    ; o6 Z; e+ H& [$ H
  191.   if(attrib!=-1)$ Z3 X' G1 k( e0 E( x
  192.   {
    3 v  G; w$ C2 v8 n! X
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    % ]1 F8 A( E( v' C% H
  194.     if(!SetFileAttributes(FileName,attrib))# r, w( L! Z/ J; |) M
  195.     {
    7 j! L& {& X6 f0 y3 u
  196.       return FALSE;: C  H2 j3 M* t5 W' ~
  197.     }# L9 M8 G5 f5 Q8 t9 @
  198.   }  K  y/ \( b* ~: W* d# E& `3 j
  199.   fp=fopen(FileName,"wb");
    ; R! V1 ^5 J" _
  200.   if(fp)
    5 r% ^+ c- J5 j, p) A9 |
  201.   {
    % I$ a: t* t1 |8 \+ N( k4 @  ~
  202.     fclose(fp);
    ! {, A( d/ ^4 Y( d- S
  203.   }* v% A- P7 I* N( h0 Z# K+ Y
  204.   return TRUE;) P0 F2 l9 G/ M' d
  205. }
    - S6 q* h" m& Y5 Z

  206. " I. {) X' l# i+ Q
  207. BOOL CRevAppApp::UpdateLocalVersion(void), w  H( x9 }1 F, L( Z5 n- x! u
  208. {
    - N- [! w! S  K
  209.   char filename[MAX_PATH];% s3 O6 L" Y! ~; B. t
  210.   LPUPDATEFILE file,olds;* C4 n  M0 y& s! r8 G8 o+ J9 `
  211.   std::map<int,CString>::iterator i;6 r$ [* d+ G7 a( I
  212.   std::map<CString,LPUPDATEFILE>::iterator p;. K, J+ Y  H+ z9 I5 p! J8 c
  213.   std::list<CString>::iterator l;4 i- v& h+ V1 u3 G6 `
  214. : N1 g1 q- p7 s, B
  215.   if(bFirstUpdate)
    ; t8 A5 T2 U6 ?! F7 T/ h
  216.   {: U! m& n  d5 J1 ~
  217.     dwCurrFile=0;# A" x6 D3 g* X2 m* a
  218.     bFirstUpdate=FALSE;+ L+ }0 ?% R6 y! d1 U
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 k8 `% X& J9 J4 D
  220.     {
    , n, I' [. b, g, V9 U3 z4 g2 C3 ?6 x
  221.       dwTotalFiles=UpdateLocal.size();
    , J0 U" Y! m5 A! i
  222.       dwDownLoaded=0;
    ' i& e; p: F+ W) y
  223.       bSilentStep=FALSE;
    - C! t0 ?  j2 M" ~  K! s% Q
  224.       bCompressed=TRUE;
    2 d+ }) a9 y. j$ c+ i. E$ l  ]) m
  225.       strExtLocal.Empty();
    . a, @/ f+ Y" s
  226.       strFullName=(*i).second;
    % C0 {% ~+ V9 o: N3 N- v. J
  227.       dwProgramState=AP_CONNECT;- v/ @+ I- u; ^- k
  228.       return TRUE;
    , M0 C, F5 {/ b8 x" R8 r
  229.     }
    % D  ]% Q2 W& s8 r# m; H& J8 P$ l
  230.   }5 _) @9 n  N; m: D
  231.   else if(bRestartUpdater==FALSE)
    . l9 s8 ~1 r. n7 d/ g! `
  232.   {
    ( k2 c, H! i$ L" e8 f7 ]2 d
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    5 K1 j2 j7 x3 I9 N# L! U
  234.     {
    2 B, V# g# @3 }2 |% U
  235.       file=(*p).second;5 t6 A6 ^2 I7 c9 C0 Y4 T/ V
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())8 M' |3 c+ N2 N6 U
  237.       {
    / ^5 r; Z5 G& M. v1 }
  238.         olds=(*p).second;
    " ?/ a4 S! h( t9 [) Q
  239.         olds->vers=file->vers;
    ! d3 r# F8 z( n* d$ g0 S, G9 P6 [$ \
  240.       }
      D! r  h. _* a5 U
  241.       else
    : R* Z' p. d  c. L5 [) F
  242.       {
    " Y& t0 T1 W' N8 o  s* X
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , `& y- s0 F2 D7 n2 q* S2 }4 E0 @
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ( V/ t# C& a# F$ b3 N8 ~% J2 ~
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));+ W2 {" ?3 L; q& b4 }( m
  246.       }1 v, {! B$ Z# C$ z7 S/ b( F" r
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# Z0 \6 p; g) m7 R
  248.       sprintf(filename,"(%s)",file->file);- K0 ^1 [! \$ s6 d$ f+ K" r% t
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 r( {3 g; K( g* W) ^$ B2 D6 X3 y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }9 i2 \+ {4 g7 L
  251.     }8 z; D7 x$ v8 ?1 P& o  X
  252.     dwCurrFile++;. |! a( \! B" \/ b- r% p
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ d5 a6 X3 N0 C. l) Q- M" L
  254.     {7 J9 N" z0 g* f. K9 S+ Q
  255.       bSilentStep=FALSE;( D& b- h+ `' d
  256.       bCompressed=TRUE;, i" ]. i. b, }* l, h
  257.       strExtLocal.Empty();
    ( r- L4 r0 [+ s% a5 v/ _9 v# B5 ~
  258.       strFullName=(*i).second;
    5 k- Z2 z. P" k7 u; `, `
  259.       dwProgramState=AP_CONNECT;- X) n4 e& U8 t+ a6 _
  260.       return TRUE;
    ' r5 x( P4 ~* R" n7 \1 v% A" P$ ^
  261.     }
    & X( O" a+ G9 ~: `0 R! v7 {
  262.     if(!bRestartUpdater)# o1 g" m6 E" [' o
  263.     {; L3 b0 E5 H6 B2 c( e+ _
  264.       int iCurrSize,iFileSize;. Y% }' \" Q/ g+ c" @/ T
  265.       iCurrSize=0;
    - G% Y0 l; x  v8 o
  266.       iFileSize=UpdateList2.size();
    0 w* X8 Q0 H, z5 {
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % ^8 A" e) B9 o/ s
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    8 B% s8 |+ M" k9 \# D# h4 `
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    0 i; a8 n  D4 T* u" a) i
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 z8 F1 S7 X, H8 `- @" e0 d
  271.       Fclearf(".\\update.dat");
    7 z! z9 W$ i6 l5 l# w) l
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ' F# `4 h- f1 g2 u' ^
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)1 Y: W1 ^" o% C7 g) ?7 g
  274.       {, j& z7 v1 o1 D* \# i$ ]$ s# }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ; v9 M) r7 z$ y9 A0 v6 O  N2 r
  276.         {$ s. e$ c1 u& c2 ]% l9 l- ~
  277.           file=(*p).second;' o5 Z; W6 f8 ?! M8 j
  278.           sprintf(filename,"(%s)",file->file);
    - ^: V6 ^# N( {; y  p+ {
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; O! u  \% M8 U5 @7 L
  280.           iCurrSize++;2 {4 K% o! z  e% q# Q7 m4 `; e
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));* e' t# r2 V3 i0 O
  282.         }
    # i6 i: c) P4 h7 B# S' W. i
  283.       }
    8 |  j2 R! h" I0 c8 R
  284.       unlink(".\\update.txt");
    + M" g1 t$ \7 i3 j: u4 Z
  285.       unlink(".\\update.tmp");
      ~# {" l$ X3 Z- j) K& i
  286.       Fclearf(".\\checkversion.dat");
    6 s8 M. z* [; R0 N. |" h
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);" D5 [# Y2 i5 ]  n9 v" P( d4 W
  288.       if(UpdateLocal.size())
    / G5 \+ X0 Z+ F' s  B
  289.       {
    8 [7 }4 f- \( Q+ r) M
  290.         UpdateLocal.clear();
    6 G, A  A3 D' `5 {4 q5 W8 ]6 _5 \
  291.       }4 e# E. `7 Y+ p0 c0 H" v4 d
  292.       if(UpdateFile3.size())% t$ k! d2 N9 j- o: ^& t0 T
  293.       {
    8 M7 X$ [' y% U/ S
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); x3 b1 a& [) k  g1 F
  295.         {! C" d, D0 v5 N" H1 q
  296.           file=(*p).second;
    - Q+ j) j4 V. x/ X1 L8 U& S
  297.           free(file);' \. H9 v8 {5 ?6 m$ m# o- {3 M! u
  298.         }+ ~+ _! K2 S9 |
  299.         UpdateFile3.clear();
    ; m7 L' F5 t5 z
  300.         UpdateList3.clear();+ h2 }2 @# p! }! v
  301.       }% Q2 L6 ~# F( R% \5 o& R. l
  302.       if(UpdateFile2.size())2 o# T( }0 L3 T! V6 Z, A; h) l
  303.       {
    2 O. ^0 j4 V% V$ `# X5 i9 X/ I
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 m$ C) n9 T. J/ A9 _. u* X# U
  305.         {
    3 r, k9 S& }4 C  N0 E
  306.           file=(*p).second;0 }/ G( z* X/ q1 l3 L: C
  307.           free(file);
    ) s7 e" R7 ?! ^
  308.         }! t2 ]- N7 |: f
  309.         UpdateFile2.clear();
    0 E& p6 {7 b9 w
  310.         UpdateList2.clear();4 U' F7 Q0 o6 M5 Z0 S
  311.       }
    9 g. G+ T" V7 R5 o: C; A
  312.       if(UpdateFile1.size())* W; m! J1 ~$ \% `1 p( O
  313.       {; c% Q# z3 ~  K% J! [2 q4 ]: f* |/ q
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 F& u( b1 ]! x/ d
  315.         {
    1 _0 h. S( R( `/ C4 T$ u
  316.           file=(*p).second;7 \: b, A1 b& F* `3 z
  317.           free(file);
    : Z0 `( ]% e  C, c! e. U
  318.         }
    # G; x6 ^* P/ ~% [0 w, w0 U
  319.         UpdateFile1.clear();
    : O; ~1 ~# i/ A& J$ D
  320.         UpdateList1.clear();, s  F3 W' s" Q* _
  321.       }
    / B0 m3 C" k% T* W. ^$ ?( t7 _
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));& i/ l" R1 F% r+ n, e
  323.     }
    4 J* A7 T! [+ m5 t# C9 n4 R
  324.   }8 L. W8 X; f) e# ?; {4 r" Y5 _, n- l
  325.   return FALSE;; P% X6 u  s2 T) g2 J3 q
  326. }
    4 ]3 l7 i& E) S) r" @
  327. 8 x4 c3 M& ^. q2 k# ]  X3 k
  328. void CRevAppApp::ClearAll(void): F6 W" O* h3 j, G/ e$ C3 G
  329. {
    5 E; _8 U/ E5 E! ^
  330.   LPUPDATEFILE file;
    ( L) E& g+ }  M9 b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;  L" G" M  K2 H' F) r/ b$ c

  332. 9 W. ^: F& G' M
  333.   if(UpdateLocal.size())
    ! `" M. o. M& z9 J9 I4 H
  334.   {
      ]% Y; f* I/ {3 L/ k/ c7 \) s. ~
  335.     UpdateLocal.clear();8 A6 Y" s: Q1 s! e: V3 S
  336.   }* J( \. N' h# S
  337.   if(UpdateFile3.size())7 E: S9 D7 ?. o7 G8 l. w8 d
  338.   {
    ( S, g" B3 W/ p$ C, L* P2 l
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 e, W8 ]+ R& ]& N$ V
  340.     {
    % ~, d- z; Q3 i1 B7 A' P. Z
  341.       file=(*p).second;
    " `7 c2 p8 u( Q4 e. s
  342.       free(file);
    6 h7 w: f) {' ]
  343.     }  }- H- G3 W- h7 H8 J
  344.     UpdateFile3.clear();% p5 x; e, e; t, H) f; V
  345.     UpdateList3.clear();
    0 }0 m8 }9 H5 }. W! o$ |3 x
  346.   }
    7 m9 _3 W# K4 X' U6 @
  347.   if(UpdateFile2.size()), d+ o' W0 Y+ D& r6 i7 r, x
  348.   {- e& B/ p4 Z# e# T
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)5 W' T; g% N& T$ ~8 {
  350.     {
    8 {: Y3 Y' b, o1 r. T
  351.       file=(*p).second;' `5 C; x( J7 e5 R
  352.       free(file);
    ; l% z* s# S6 k2 `0 }
  353.     }7 K; w% `% u9 w8 u4 L
  354.     UpdateFile2.clear();
    ; t' E9 m. A1 P( w3 R
  355.     UpdateList2.clear();
    - r6 s0 C! n7 T0 H2 L
  356.   }
    1 h' }# ~3 H" g# C, H2 Y
  357.   if(UpdateFile1.size())
    * G  {& i9 A3 p# @, i' K! h6 P
  358.   {) Z% v4 i) l: w/ C+ y
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) I; L7 B. @$ w
  360.     {
    ; q# F2 d& p# X9 a
  361.       file=(*p).second;
    3 u1 S2 R+ B5 C  z9 W: O* i/ }
  362.       free(file);# C( C% {; o5 k/ `6 H9 S; j
  363.     }
    # x) T4 w8 C& c1 Y5 f! _
  364.     UpdateFile1.clear();. I0 X# D, B: `' ^( ?' X5 H+ t! R
  365.     UpdateList1.clear();
    3 ]! x! C. z* M' E' u. _
  366.   }- t8 f0 t) `7 r0 [6 N' I
  367. }  
      e1 j" t! _; {, i( W1 J% J
  368.   
    # ]2 h4 i& v3 p7 [
  369. BOOL CRevAppApp::CheckLocalVersion(void), @* z& F6 W3 V% ~( u/ T
  370. {& X0 c: x2 N  U8 B$ n  m0 s
  371.   int c;: C3 n! J) C+ v/ p+ D
  372.   LPUPDATEFILE file1,file2;: S0 @9 Q* N; C$ B
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;: l8 s  l" q$ U
  374.   std::list<CString>::iterator l;" r' ^! o6 p6 W3 u; \/ g

  375. - ?& \" P' I3 B/ H3 }- `( Z6 i4 E
  376.   UpdateLocal.clear();, {. C1 b, L$ z+ E7 w1 S0 Q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);. K& ^: A9 u8 Q; u# O: E6 h1 X' r
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);( Q: J& b" p" l2 u- x: @) q( I  `
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ! h1 j0 K- A1 i( l  t* t
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);3 f. C8 y9 D% t$ D9 j9 f. a* z
  381.   if(UpdateFile3.size())
    * k( O% }7 x8 X
  382.   {
      Q/ c; L+ O% s- d8 Z
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)7 Y: ]7 j' c/ u1 C' }9 d: k( N
  384.     {
      c' ^, y6 [- x; d2 l; U' }$ H
  385.       file2=(LPUPDATEFILE)(*i).second;
    ( L- r5 \% w6 U* Y
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 O& O5 r& l* w0 }
  387.       {
    ( g4 I5 F3 U; m% R
  388.         file1=(LPUPDATEFILE)(*p).second;7 A& ^4 m! e1 M0 X
  389.         file1->vers=file2->vers;6 d- d* M# Z- @5 T
  390.       }
    ; C5 S9 ?5 T" P7 R' s
  391.       else
      F" R' k6 ]% g9 i
  392.       {4 V3 _7 y, {! X- s. }- D
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ `5 [# I  I& S
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 h2 \* _% ?, M4 b
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));4 {" `' K: [, D2 D2 P! J
  396.       }
    / n; m$ \" k* ~5 C# I
  397.     }
    : y! \. T5 D. X% E5 z
  398.   }
    ! g. T3 W# i. H6 r- B$ \5 q
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)( E& a6 S9 h$ [, i/ s) m1 A
  400.   {) E( Z, T! V6 \  `8 ]3 a
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())7 S; s7 R1 l  N& `% U  w( a
  402.     {6 }, T% D: }1 c- o. `
  403.       file2=(LPUPDATEFILE)(*i).second;
    8 u: G; Y3 ^' c" n: X5 I3 n$ E
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' n2 l3 o. e6 M' S) w7 u1 V3 D
  405.       {
    " u* {9 Z8 c% P
  406.         file1=(LPUPDATEFILE)(*p).second;
    5 a) ?% K  }! T( @- y
  407.         if(file1->vers!=file2->vers)
    7 E& C* j" k+ \, D6 \
  408.         {/ S! @3 y, p' Y- d  X% s
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, ~4 }# y$ `% d8 o* F
  410.           c++;- A, B: o* Q: y3 \& s
  411.         }
    ! T. Q9 c# E' b+ M: p
  412.       }
    5 x2 ~8 e" U# R+ }' ^
  413.       else: w5 a' S: Q; ]: u$ }5 N% s
  414.       {3 P7 c- x# a, U8 A
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 X, [' S' f  j: y: ^
  416.         c++;
    5 ?" F; K& G& _, `4 C
  417.       }) E: w6 L; l9 H- Q" o. g
  418.     }
    . E# Z1 i( E) l4 z, O  L2 A+ |
  419.   }7 J, C* }% W  y; v  e
  420.   unlink(".\\DownLoad\\update.txt");
    ( ], K! \* d' u9 ~" H
  421.   if(UpdateLocal.size()) return TRUE;1 m( a$ J! [# s7 r7 `' b% H
  422.   else                   return FALSE;
    & g$ A# @, N; E* L( B
  423. }1 J, x5 G- k3 L( g( c

  424. ( ~" k  o5 s3 q3 L) d7 d: D
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    8 K# ~3 Q6 k, a! m5 D* [' @0 k1 y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"- V! g- P  V! G) j0 n2 W1 ?1 B! I

  427. ; y: \- C2 X" F0 B4 i

  428. 4 R0 B: ^& {7 b# w8 e: F

  429. 7 b  m1 U- s! J4 }; L
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)7 ?7 @  f* K: }0 x* [
  431. {8 x& ?" [  L# L: D
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( _/ }! B  w7 J! e6 a( M: w. i8 e; j
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 y0 M  L% ?. h+ ~, q4 Y
  434.   {
    , o0 ]2 P( o% ]; ~; O* k; x
  435.     char szLanguage[50];9 m7 n# F4 G" q3 N& J
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; O/ \8 _3 c2 @8 o  i- c
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + r: v+ F* f/ ?
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    4 C6 g, j7 G& ?. {* F
  439.     else                                   m_iLanguage=ENGLISH;, N- ]# F2 Z4 K3 |: S: B- @: {
  440.     char szRegister[100];) E5 m& b- D1 s- y0 {
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& `0 X' x5 ^4 G3 {8 `
  442.     strRegsName=szRegister;9 X/ h: Y: v0 N
  443.     char szPatchURL[100];
    : g6 A8 b5 v/ ~3 z0 x# D+ w
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 M* _; n3 `# j9 x, }1 @
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# w* o) w4 d( W* t: ~7 T
  446.   }( ^; T7 M- |* f6 m% W; ?7 `
  447.   else
      Y, P3 q; W5 l0 K3 [: C3 K
  448.   {
    3 E. a! L. J8 [6 J8 j
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! t/ ]7 |, x. |# _3 j8 S
  450.     strRegsName=DEFAULT_REG_URL;
    5 V9 Q+ ]- @  d+ R. p/ A4 H
  451.   }
    9 l$ {  m* |8 L/ N, G# H
  452.   if(GetFileAttributes("hosts.ini")!=-1)' x, H+ A( d. H  ^; n; h% b
  453.   {
    * t5 j# K( B( Z5 N  C/ M
  454.     char szIP[50];
      b6 I3 t; c% S) F, e; p
  455.     char szDIR[300];2 }% L. i5 `4 V4 P2 M3 o" A6 c, I, e
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% C) d4 D" T+ n8 W- B. W
  457.     {
    7 T2 p/ R! J% X# N3 Q/ L
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      m! ^$ j6 d( q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");. {* ?7 v2 x0 m, @0 s. g
  460.       strHostName=szIP;
    % L+ X: c* N+ K! ]* u3 ~/ ^% W. \
  461.       strHostPath.Format("/%s",szDIR);
    2 a2 \  F3 w0 U6 ^+ D' G
  462.     }
    + y. B  J! @$ {4 h+ @% S
  463.     else
    / w1 W' J  K& A+ l- _9 {
  464.     {- c. v( V8 m1 v1 C" M
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); r' V3 B; q- e+ a: S$ G2 d
  466.       {
    * d6 \% ~+ Q( C7 g9 _
  467.         char szLanguage[50];
    - [8 I4 i" g8 C4 H4 \$ l
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 @6 g0 x; ^1 T- v9 F" ?( d
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" j% V5 K4 g: M- B3 G. R, z
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 x  ~, K6 Q/ M3 `' ?
  471.         else                                   m_iLanguage=ENGLISH;- p2 {) O3 f. J$ |& G& ]1 C+ Y
  472.         char szRegister[100];
    7 b: P* K7 C; U7 `" Q% D4 f# f
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 N+ I1 n  Y& D  n' |
  474.         strRegsName=szRegister;- K" c" L0 k2 ~1 o1 v2 G7 B
  475.         char szPatchURL[100];3 C- X% m; L- d6 H( G
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");# k, R' k2 \, H1 e- ~
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 A7 P7 b; d9 }' |' J3 g% R
  478.       }
    5 Q- z1 ]% n7 g$ n4 _2 ?  Y9 B) _
  479.       else* n' ?! p- f  \
  480.       {8 U2 O! t' F2 n/ o5 ~' Q, k$ d
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; l0 i$ \7 m1 d0 K
  482.         strRegsName=DEFAULT_REG_URL;
    2 D* T7 _+ f2 V+ W: y
  483.       }
    ) r) V+ S: R* m$ D* o
  484.     }
    / i2 t+ z: P, v! `
  485.   }; J4 X) e3 f: H! l
  486.   return true;
    ) o. T% ?" v& O- i3 R% h6 ]+ T8 u  k0 l
  487. }9 r2 H1 h+ Q; X; u7 x7 e2 y9 }% N
  488. % r# m! W4 c5 J9 G& S
  489. #include ".\ZLib\unzip.h"
    * w+ G1 b4 [$ S# Q  i$ W* R8 v% R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ) `. K" {8 E# Y5 T. W0 v
  491. /////////////////////////////////////////////////////////////////////////////+ b, E4 ^5 i, M
  492. // CRevAppApp initialization
    , W, ~" ?' }# T2 W/ H: T6 j  E* G

  493. / Y+ t+ J& Q* f
  494. BOOL CRevAppApp::InitInstance()
    ; `- s4 F  Y, Q2 Z* s( B
  495. {4 h, g2 y: I2 l2 f9 H' {; t; j7 G
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];7 x+ p/ m: g& Y; o, H: T

  497. % Q5 E5 g2 L! b, J
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ' h+ J- N7 c7 X9 S
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))7 v. m; ]6 A# N6 K- B
  500.   {" @. S) u2 O3 K- M" b( X
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");& C% ]) T/ @0 J! g5 h$ m
  502.     GetPathFromFullPath(szPathTarget,szPathSource);0 |) z" i+ |" e/ U8 ]) v$ q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    3 i. _% j$ \8 g+ Q5 T( h
  504.     {
    # t! D% W7 e% U) A: M
  505.       strcpy(szPath,szPathTarget);8 l- H" @3 @3 m. q3 j3 e
  506.       SetCurrentDirectory(szPath);; l$ O7 \6 R& N" u- ~' S( |) X
  507.     }2 h& H1 h8 k/ w; e( B( E
  508.   }3 O) P2 e7 Y8 b  G
  509. #ifdef _DEBUG
    3 [% @, T- U1 S
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; y- H* f3 t: l# P
  511. #else: V% M3 w! b+ u
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    1 Y$ G* c! F* f/ L# D
  513. #endif; s: s" ]+ u! H3 Y3 |/ B9 x; j
  514.   {
    , _- ?. J  l! n; P3 w2 v
  515.     char tempFileName[MAX_PATH];$ c2 c0 B$ ?1 X% t
  516.     strcpy(tempFileName,szPathSource);
    % V  K2 q6 z& ], S- Z  K  z4 d( G
  517.     tempFileName[strlen(szPathSource)-12]=0;9 }- Y, |$ h7 l4 W' [: k
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
      J' v4 L. e0 v- p/ m
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);2 ^6 K- @: k4 ?% X( X) D8 T
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    $ y' r# L' f  D( ~( \, e/ _0 `
  521.     return TRUE;) {' r) w/ H$ `1 g& ^: P" u
  522.   }
    5 p0 ]- X* S" Y
  523.   // Nuke 0118: Delete run.exe" t/ u2 m- [- K0 K- S
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );% Y% ?  m9 m% g6 D
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    * [7 v% k4 M  R7 u3 R2 Y! X  D2 z
  526.   if(!ReadCfgFile("Config.ini"))0 H9 U6 k$ B: @- f# A0 d
  527.   {
    7 u$ M; L8 P5 a. Y* A2 a* Y
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    # a) ]* N3 S" y9 a- I
  529.     return TRUE;# w0 }) O  B! e/ k1 U) T
  530.   }
    4 P. S$ q' P' s$ ^  V, \) d9 o
  531.   HANDLE mutex;/ V, A) B8 @/ q9 \9 [8 _0 E
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 E2 T( ^) E$ n4 x& J$ Q) \
  533.   {
    4 y- R" g6 M% m- K
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)4 U, f. q, K! ]$ m& E) a5 q' `. N1 q
  535.     {% E9 `" j+ W4 n' f2 G
  536.       CloseHandle(mutex);
    7 ~9 W, B0 q' N! X% ^. s3 K( H8 |# ?
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    4 ^) h$ K0 D" u7 _0 c: y* S+ Q( V) c
  538.       return TRUE;
    : t5 |6 }5 ^. D5 g$ C2 [% C6 w0 R) z
  539.     }5 }5 L; s8 ~: k- P5 k# o+ u- ]  z
  540.   }  ( M+ @1 o6 i3 k; H8 V
  541.   CloseHandle(mutex);/ [* h: T1 G/ G7 b+ l- q, I8 H- p
  542.   a+ M' P& `9 j4 B" Q& }
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);2 p' F! |- V7 x, V7 ?6 ]
  544. : x+ Q( w% a* c; X9 L; r0 n
  545.         AfxEnableControlContainer();' o) F. S+ n3 d" U# m! \% X
  546. 3 X) ~& A" |  l' d9 A6 J
  547.   bCanUpdate=FALSE;1 u% p6 M5 }6 a4 u
  548.   dwStartUpSteps=1;
    ( r. e4 ]2 Y# e+ x
  549.   dwProgramState=AP_NOTHING;+ b1 u6 A8 x% v2 X2 b. c% z
  550. * j* `( F+ y9 c
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    1 i7 }3 N# y. m  a; E/ {
  552. ) P2 f) J$ r# w1 j. ]+ u
  553.         // Standard initialization+ Y8 ]/ c! B6 F. s
  554.         // If you are not using these features and wish to reduce the size
    & i# T! @& Y- J& X  l" z
  555.         //  of your final executable, you should remove from the following
    + ?2 g. U8 M. l0 u+ f5 v
  556.         //  the specific initialization routines you do not need.$ G  z" e% H/ `) O1 L9 H% v% H2 j

  557. 1 Q, ]5 z, n7 \5 T% s8 ]
  558. #ifdef _AFXDLL, ^* j8 A  y' }3 Y5 Q0 e
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL! g2 K( q9 p2 J" [& n9 ^, E" ?
  560. #else* C0 Y: J+ u8 f9 W7 ?) T+ c
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    8 Z7 V& o1 E/ I* Y- O" [: d; Q
  562. #endif
    3 D5 |4 S' G3 k7 j6 n

  563. - v1 J( T9 C3 {7 q% t
  564.   dlg=new CRevAppDlg;
    3 S, F  n. I. V4 p; G" i
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    + V# M8 @; G9 R  `9 M5 `  d3 N
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    & t, |5 g; y5 L  Q. i# b# N, [; d
  567.   m_pMainWnd=dlg;
    + s# F  l2 }: {5 K: ~4 g

  568. ) E" ?- s7 l# @. j3 C
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    1 q+ T) [- S: ~
  570. 8 N. e6 t% |7 ]* ?+ u4 \1 V5 z
  571. //  GdiplusStartupInput gdiplusStartupInput;  m, q9 H5 m& O* x
  572. //  ULONG_PTR gdiplusToken;. d) u" r; z' }
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    5 K+ ~, Z7 `1 m/ M% r) c

  574. " F0 l% W- f9 a7 v2 d- o8 K
  575. //        CRevAppDlg dlg;$ z5 N5 ~" m5 y' Y2 e1 ~
  576. //        int nResponse = dlg.DoModal();* M8 L3 r( }1 q- z3 ]( A- F
  577. //        if (nResponse == IDOK)
    ) z# N( y- r7 K# w% }# J9 p' C; b
  578. //        {
    6 \) l; d& c" T
  579. //                // TODO: Place code here to handle when the dialog is
    ) \, B1 X+ h: F# W' j
  580. //                //  dismissed with OK
    1 [( [8 s' J* e; z+ Y6 K  x1 E
  581. //        }
    $ n- Z% |/ f  b* |% i% \
  582. //        else if (nResponse == IDCANCEL)- |9 i) P. G  i$ m2 U- w
  583. //        {9 B  E& U& H& P: ]9 ?
  584. //                // TODO: Place code here to handle when the dialog is  h; n, g1 x& I
  585. //                //  dismissed with Cancel2 I. C# S# o# k/ v/ R
  586. //        }( y4 O0 x; ~; @. r* z, X
  587. ) d- q7 {  H3 g1 R
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    0 U8 c9 A% K. i, ]5 ^- Q+ b
  589.         //  application, rather than start the application's message pump.
    : Q4 Z1 e, `9 d8 @
  590.         return TRUE;
    , F! [" m8 @9 a5 K! v  j3 ?& y% M
  591. }, W. t  m& J  F( B1 L

  592. 9 A9 K* y; F( j- s3 h- s
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    " e2 P# {6 q; k" b, z7 C
  594. {
    $ o1 E- U$ O, p# ^2 w
  595.   int i;4 y" Y" X$ v9 l
  596.   char *szRet;: U9 ^5 ]% f) I
  597. 7 T' n" y% `4 p6 y
  598.   if(pSource) { itoken=0; sztoken=pSource; }. ?3 Z* G/ ^: Y" h% r% I: T7 g
  599.   if(sztoken): O- h0 c- |; c" R
  600.   {) Z9 l9 z7 Z! @1 d/ d9 \
  601.     szRet=&sztoken[itoken];9 s' [( o  m2 x& Z& l
  602.     while(sztoken[itoken])
    - }5 j7 z1 p2 ]5 [
  603.     {
    ; E0 O9 K- f( l& [+ x
  604.       for(i=0;i<(int)strlen(token);i++)' j; ~* P5 I) O: A2 z% h2 x5 }
  605.       {
    ! c6 g/ J0 M4 ]$ y( [" a
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    0 ]. @" Z+ D* y  N* v% B
  607.         {9 v2 ^) |5 B& ?( V" q% a; V
  608.           sztoken[itoken++]=0;& D* B; A+ `  {5 L1 l
  609.           sztoken[itoken++]=0;1 \& F8 N  u/ k- K0 [
  610.           return szRet;% v% {, |7 W5 ?$ i' ]
  611.         }/ ^5 p. j' G3 K7 Z8 v
  612.       }4 {2 Y  k, X: a1 M# Z% }
  613.       itoken++;
    7 Z; U  D& t3 t) |: |5 g  c
  614.     }
    0 [# N( H- R7 T: e
  615.   }" l" {. V/ d+ {+ K8 [; P# c. v
  616.   return NULL;: e+ q1 @0 `+ Z; L7 V
  617. }: d) q& G7 q. p: R' d+ ~

  618. # O  D3 i) G" E! b
  619. void ProcessProc(long Total,long Current)6 O) N' c( J: ]) K: F; \: ~
  620. {1 n2 j) R2 I& @0 q" k: @& L
  621.         MSG msg;
    2 }" c3 r" ^8 n' [+ l3 I
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ' Y* z* E6 u  |* k9 D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));# R0 [: \+ J' P0 c* o/ g, G
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))' c* v- u* {4 o
  625.         {
    - N9 E) W& ]' v
  626.                 if(!GetMessage(&msg,NULL,0,0))' S5 k, G/ I# w/ Q
  627.                 {. \9 M9 v/ z" S# C* ]
  628.                         return;. k/ o! p8 E6 V7 _& j. o+ E
  629.                 }- V  W1 q+ A6 O( M0 Z
  630.                 TranslateMessage(&msg);7 u4 S1 E% \& Q4 Y! T
  631.                 DispatchMessage(&msg);
    ) ~6 ]' l  h2 X; S# X/ z. K: q4 u$ j
  632.         }       
    ! q+ |+ K. H( ^2 L$ U
  633. }
    . ~! A5 `7 D8 V

  634. ' R! P! v2 R0 B" Q: W
  635. BOOL bFirstChar=TRUE;9 `! e2 [$ T7 B' B% i/ w
  636.   p) Z2 r( `5 N' i2 M; h2 v6 P6 r1 L
  637. BOOL CRevAppApp::OnIdle(LONG lCount)3 r9 u2 G* T' Z, Y8 [/ p
  638. {
    * W8 X" i9 k6 o! \
  639.         // TODO: Add your specialized code here and/or call the base class
      |$ P4 }% [( z
  640.   switch(dwProgramState)* v$ @7 K" \$ L, I2 f- O, O
  641.   {
    ) P. X# w, N1 ^, _# O% t
  642.   case AP_NOTHING:% s$ B6 U. O6 o% P5 w
  643.     switch(dwStartUpSteps)& z7 x4 q0 m' m) z: s/ c/ x1 i
  644.     {
    8 L( {0 v5 A' D* A' ^# \( T
  645.     case 1:
    $ y9 n; Z4 f) d5 k
  646.       {
    1 Q4 E3 w7 a* ~! u
  647.         int i;% M2 u6 m# D3 z3 u; B$ ]
  648.         CDC *pCDC=dlg->GetDC();& M: w; v) r2 v& P) L* q" @
  649.         HDC hdcwnd=pCDC->m_hDC;: k' y; |0 |4 [
  650. //        Graphics graphics(hdcwnd);
    ! v) A; U) Y7 C) k2 F$ X# }" y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");: Y- {! o3 L! M, \
  652. //        INT iWidth=bitmap.GetWidth();
    2 I" R/ [7 v) I6 C- H8 f
  653. //        INT iHeight=bitmap.GetHeight();
    7 J9 E. W% N) V5 ^- l
  654. //        Color color,colorTemp;
    & L7 j- p9 j, U1 i+ D
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ! [" `! N" J% s, b2 D% o
  656. //        {
    ; j! O4 b2 o6 l) W! z
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++): d# B- K$ N. j8 d7 a8 g" w( e) d
  658. //          {0 g" }& L, v5 X0 y+ T' ]9 Y; ?7 W  n
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    4 d0 \* K$ }+ W2 b! M+ u1 t3 ]+ B6 i
  660. //            colorTemp.SetValue(color.MakeARGB(- O( k3 Q/ n+ r, f9 H% @# y' l
  661. //              (BYTE)(255*iColumn/iWidth),
    2 E2 I8 \* I/ B8 u0 H+ ]6 B( C1 F
  662. //              color.GetRed(),8 G& _& a( D' K# a& R; Y
  663. //              color.GetGreen(),; K8 ?/ U' P6 M7 a* |
  664. //              color.GetBlue()));! S* ^* F& A5 g
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);/ O- C) u- ~3 ?( K6 R5 B
  666. //          }
    4 s$ \; ]8 T, a9 M9 W& A& r
  667. //        }
    , n4 W" s% b- g) h* k, u: [
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);: r) N; U+ z3 i! x; _
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 G. f6 T" H1 P8 B& }4 c3 Z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");  f6 G$ K% e% H, z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 [  e5 b" {" N" i- T6 y3 K
  672.         for(i=0;i<240;i+=8)
    . q8 u& w' a" x+ U/ k1 s  ^
  673.         {7 g/ g7 S  _' C, ^/ i& c( P1 s
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);# L6 }6 _) q/ V
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- F, c; Y! ^+ G4 f
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & ]2 A" ]# b% A* @
  677.           Sleep(33);
    $ K0 B, }. l: S' ~
  678.         }: m# M  T  x4 `1 D! e
  679.         Sleep(1000);
    . s' r( g' G' r
  680.         for(i=240;i>0;i-=8)
    1 \, G- T( {2 _- k
  681.         {/ [  o$ l6 U) Z, i: p2 c
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);8 d$ B" \$ I9 p  \
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- w- s. l& G# ]
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" [! y. s$ p( s5 x; ]( O2 I
  685.           Sleep(33);
    + G' ?" p4 e% e! n
  686.         }3 F1 D! V& D" b& W* {% ^  K
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ) ~9 {: l8 R: O7 n2 }( ~
  688.         dlg->ReleaseDC(pCDC);( h0 x! E( }# ~7 x& s7 k
  689.         DeleteDC(hdctar);
    2 |& L7 A* {$ y
  690.         DeleteDC(hdcsrc);
    4 w* {: ~' a2 t/ W9 A' k
  691.         DeleteDC(hdcorg);
      w1 V( M% n! u
  692.       }+ n  y4 K/ a- ^2 M: h$ q+ r, ^
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);6 {8 B8 J, e3 P4 D  F% O3 ?* I" @' ^
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  u9 S: W- Z5 v# F/ U; [
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    7 v/ y! ]9 D  U% R: x# x7 M/ P( ~
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    / D; L% i, E' T3 K) u6 E
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 N7 n5 Z' D' c# c; o# I7 y3 X& k
  698.       if(!Dn.Connected())2 u/ X: F( i; B- i
  699.       {
    " b5 z: Q. c. c$ w( T
  700.         dwTotalFiles=1;8 E- B6 N! A, v
  701.         dwDownLoaded=0;
    & B  `+ z8 N  W5 l- ^/ _
  702.         bSilentStep=TRUE;; E  b2 u; m$ v1 y6 h% s
  703.         bCompressed=FALSE;8 [* H, e5 h/ {$ _
  704.         strExtLocal.Empty();
    8 h5 [& X4 s# Y0 k4 o% b1 \! f
  705.         strFullName="readme.txt";
    ( q: a! U  {2 ~/ F. |2 Q* j
  706.         dwProgramState=AP_CONNECT;
    ; u" P5 o: b# O4 i+ {
  707.       }
    ! m5 T, w! a1 }; y7 R: i
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    3 |# B: _3 P8 h; h
  709.       dwStartUpSteps=2;
    ' l: U+ h2 p9 X* [: ^  q
  710.       break;; B$ e# j& Y# G7 }) ?9 z
  711.     case 2:7 ~( E& _* h4 x7 }9 z7 D9 d
  712.       {
    6 w' _# i6 d9 f+ W( ^& h7 l
  713.         int iEOF;8 P) v9 M! c" m' X* x
  714.         FILE *fp;
    ' o) \4 t1 q7 b# B) t% E( p
  715.         char szString[512];
    " }3 ~( V+ r7 y4 ^& S1 t3 W/ U8 P
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    9 R6 h2 p* t3 r9 l: I1 }
  717.         if(fp)3 A4 S( T3 Z, {7 \3 k
  718.         {" K! K) \) M$ p( `' z: z3 l/ S- V
  719.           do6 O" i; N, V5 Q6 t+ V
  720.           {7 F% E9 o8 w  K4 }" o$ M
  721.             iEOF=fscanf(fp,"%s",szString);/ t, {, E% N) R
  722.             if(strlen(szString))9 c# R3 E: d5 ^) L3 ^, l; H
  723.             {9 ~, o7 f( N, A! {7 ~
  724.               if(bFirstChar)
      V9 P% H* w$ a0 C( v4 B' J, ~
  725.               {# q/ v+ b$ v8 w9 ~
  726.                 bFirstChar=FALSE;
    ; m% C# v( {% L$ H  n& o1 b& {
  727.                 bConnectIsBig5=FALSE;! _- J( F/ ]  _$ z# H; w
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;6 r/ }2 G6 S$ y* {% y: a
  729.               }
    $ b0 \8 f# F9 h- Y9 J0 V
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ) |# V5 K6 M/ \2 B
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));. N% ~& T$ ]" ]! M
  732.               dlg->m_ListText.AddString(szString);! A4 }, h; m, N1 M3 Y6 d3 I  K: o
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ l: S1 c  |4 v
  734.               *szString=0;# G' b) P  J4 V6 d8 ?% @/ T& D' S
  735.             }
    / K9 v0 f. C4 u; k2 t6 W
  736.           } while(iEOF!=EOF);
    8 d3 i$ Z) Q+ B
  737.           fclose(fp);
    ( P1 N3 C% r3 z
  738.           unlink(".\\DownLoad\\readme.txt");+ V4 `, A% p4 ^& J& P: `
  739.           dwStartUpSteps=3;7 u5 r0 _1 k6 p4 A. k5 {' u4 x6 N
  740.         }
    7 R) q) X, }* H+ B
  741.       }* {7 e7 @, |) G
  742.       break;+ s) [3 I3 C  B
  743.     case 3:
    % \) J& ]; l/ R4 F7 y
  744.       if(!Dn.Connected())% P8 [+ C, k) ?5 k
  745.       {1 p" d6 q( ~$ V7 Y* m$ X9 D/ \! d5 G. |
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);. u7 n6 l( {7 t7 L( Q% D
  747.         dwTotalFiles=1;
    5 l" M+ n, C( \% v, v6 H
  748.         dwDownLoaded=0;
    * {1 k/ G1 {# X0 ?/ \' U% F: K
  749.         bSilentStep=TRUE;
    9 |, k! q8 B* u* U
  750.         bCompressed=FALSE;
    7 L# }1 x- N, X6 j
  751.         strExtLocal.Empty();
    : B3 G" w# T9 A3 X
  752.         strFullName="checkversion.txt";
    # U6 x' }& u7 b7 h: x( x
  753.         dwProgramState=AP_CONNECT;+ T+ N% B2 p' l& p3 J
  754.       }
    0 ^% m7 O7 c5 v2 }/ a: |# J
  755.       dwStartUpSteps=4;  B% K/ {& y; L6 Z' ?) l- f
  756.       break;
    # a6 Z2 v! w0 N
  757.     case 4:! M5 x3 ]/ B3 S! Q3 y4 A
  758.       {
    6 W- D9 j5 |; v- r! G% [
  759.         FILE *fp;0 m1 f# g* i. o' b
  760.         char szString1[128];1 R" L1 `  z) W! m: p8 U: U
  761.         char szString2[128];: I( h$ ^2 `, y! j) R0 D( ^0 x% {
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    / w; m; v5 l8 O) I5 \) g6 c* J  W5 y
  763.         if(fp)
    & d; ^  Q, G. T+ T. O$ `& c
  764.         {& U# }8 ~5 A2 D0 t/ C9 Z; N, b
  765.           fscanf(fp,"%s",szString1);
    & ~) ?( S7 I# }; q
  766.           fclose(fp);$ |+ i$ p  ?; i4 l9 U+ h( Q. H
  767.           fCheckVersion=atof(szString1);+ U: S  r" v3 S$ Z
  768.           fp=fopen(".\\checkversion.dat","r");
    : ?9 I7 g/ w8 F
  769.           if(fp)
    4 f' c/ C4 ?: N$ l4 Q% ]! m8 u4 \
  770.           {* G2 X6 @$ ?( Z5 h0 @/ Q
  771.             fscanf(fp,"%s",szString2);8 O/ S6 ^1 N- Z* J1 ]* }+ \) J* c0 T* f
  772.             fclose(fp);' @( P2 y6 a4 {& a* S* C% V
  773.             if(atof(szString1)!=atof(szString2))& p. o9 O. y! C/ U! I
  774.             {* q/ v; L1 c8 v2 Y, w; q1 f+ y
  775.               if(!Dn.Connected())2 V5 e9 p( b2 d* o( K+ e, p
  776.               {
    7 Y, e. q" M; l0 o2 ~8 |* t! W
  777.                 bFirstUpdate=TRUE;
    $ j$ u3 O7 {3 }" v
  778.                 dwTotalFiles=1;
    4 L& W$ z- j( X  ?
  779.                 dwDownLoaded=0;
    ! E" T5 t# {% L% X, p
  780.                 bSilentStep=FALSE;
    ( N' D4 ~0 g: ^; r
  781.                 bCompressed=TRUE;
    & ~6 g# H8 q: f/ y' A
  782.                 strExtLocal=".\\DownLoad\";; z1 N1 a8 j% s2 R: Z
  783.                 strFullName="update.txt";* ~. _6 V. |9 K5 [; l2 Z9 }  Y6 ^. H
  784.                 dwProgramState=AP_CONNECT;
    # v* U3 a2 v3 P5 R
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 k! Q5 Y$ G/ k  s2 P
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    : r6 ?5 Y  Q0 o1 l
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    9 T- N6 L. o. `- N6 q: u$ e

  788. ( o- c; g1 N7 h
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; t2 i5 _& Z6 g: u& Z6 d5 @
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    - L! F4 [$ S3 H4 D7 f$ S" ]
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ; x! \- z% ?: E, [; p; o
  792.                 {
    ) W( q5 a( {; d+ d0 {  d# g0 A
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    - H# G$ m, H8 z7 k) F/ B' e
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");- |/ l; T0 ^  m- o
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");2 r: E0 y& e' V% l- l; g. q0 r
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 i  J! z+ }/ ^8 O

  797. % h* u' z& D  M& n- W+ k
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' ^6 ]0 A* I7 |' o
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 N* T6 k" h3 ]) N
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    1 ~. A- o! O: Y* D* U: G
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( s& }6 V0 Z6 V/ Y2 v% a
  802.                 }# z! r4 e) \  r
  803.                 dwStartUpSteps=5;  A0 m! j7 K$ F5 {
  804.               }
      C+ ]! u2 A2 \" |/ w5 y
  805.             }, o$ G/ t' j6 I4 F- {' Y# o9 O
  806.             else7 c, P2 |" ?6 h0 T+ q- x
  807.             {: f/ n1 S* i" t: o
  808.               unlink(".\\DownLoad\\checkversion.txt");# P# m. L/ G( z. x  Q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");8 _) W! l2 f! P* {" T3 i1 h( t/ ~
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");2 K0 X. ~  ^3 G$ \
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");- B4 h/ D  a& J3 j7 w  D6 @6 h
  812. 1 B4 J: a) s3 |2 ], u
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  Q. Q1 ?7 f+ {3 `0 W$ y
  814.               dwStartUpSteps=99;6 h" j: V$ {/ R( ~& F# E2 W% _
  815.               bFinishUpdated=TRUE;
    : R! v  Z! l5 n
  816.               bCanUpdate=TRUE;
    ) e" T4 i  v/ k6 i8 k6 i
  817.             }! Y/ m# ^; |) k0 ~: y7 r: c8 p
  818.           }& L0 Q" y7 E* N. }, H- _
  819.           else1 H9 f$ h( q0 K8 {5 C
  820.           {
    / \4 i# {" z3 q; \( @/ `. q! [
  821.             if(!Dn.Connected())5 ^8 r, N6 F3 Y$ F$ K2 |7 Y
  822.             {6 {/ H2 _' |; {& C' `
  823.               bFirstUpdate=TRUE;
    & ]& \! L8 E0 M: U: R4 w, z" f
  824.               dwTotalFiles=1;9 J/ u7 Y$ w) S' @
  825.               dwDownLoaded=0;! s1 m+ _$ z8 U0 t
  826.               bSilentStep=FALSE;
    * g% P/ B7 m6 M! D. f6 m$ e$ ]
  827.               bCompressed=TRUE;0 @8 d8 C$ b$ ~' R1 v- s8 k
  828.               strExtLocal=".\\DownLoad\";/ ~" ~4 N: n2 n! ~/ X
  829.               strFullName="update.txt";
    . v  t' O$ V! W- R. B5 d% z
  830.               dwProgramState=AP_CONNECT;
    - V0 z$ `2 \( b3 f1 P$ ^0 l* u
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' e+ F, W- ^( |3 I/ A5 t  O
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% N& l% h% h0 e# e: h# s3 ?
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & z7 G" p8 D6 X  C/ |. k: T" P# F
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% p0 i0 n8 D  T% X0 Y7 O
  835.               unlink(".\\DownLoad\\checkversion.txt");
    + R, Y- s: }5 V- m* b1 z6 t
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)+ c& T6 G5 x! x0 A  J9 K8 V
  837.               {
      |1 h; t( X& y4 j- k7 T$ ^" J6 @
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    / p; V1 h7 n/ G/ }+ J
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    * h" l- W: \6 q3 G
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");6 K5 T" j/ H- I. f5 ^  t
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' R# f* h" y  u* C0 V
  842.                 5 o0 f6 k9 V' L" o& O
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 \3 A( Y! H% I* e
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");9 @4 A& s- n8 C# F, J
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ! A1 J( Q) z' E6 p
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - Z! H& t9 B4 F# e
  847.               }' x; m2 H) Y7 y/ [$ u4 {% [
  848.               dwStartUpSteps=5;: h5 K2 H9 O* C4 E2 X
  849.             }& V) G- A# k* m' k
  850.           }5 q0 t- D/ P3 @9 M
  851.         }
    2 B& g1 ~6 P& {- m( O. }
  852.         else
    5 [: a1 G& {- b4 N4 v
  853.         {
    0 `3 n2 ]! R; V0 d+ g
  854.           dwStartUpSteps=3;
    : E/ _! ~3 Z0 \/ f7 u' g6 e% F
  855.         }
    6 p) W, d  Z; Z4 }5 Q, r8 u' A4 g
  856.       }" L% D9 ?9 B8 F9 y) N& ]: E/ k
  857.       break;& r2 q, c+ V! n  }, k7 d6 _
  858.     case 5:
    / t5 g$ S9 E" w
  859.       {+ N9 R# r) h: ^* ~
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    " ^* q3 p: R) \5 m+ R: K
  861.         {, Z! w! Z. `+ R
  862.           int opt_overwrite=1;* g; W+ ^( y4 w  S! b% f+ r
  863.           int opt_do_extract_withoutpath=0;
    , }* a+ G9 m# U5 }1 e. u
  864.           unzFile uf=NULL;8 Q4 `! l- @& L

  865. . u1 I& S" |" Q& B1 d
  866.           uf=unzOpen("Wsa.zip");
    1 Z8 k4 s& }' \- k/ x# ]
  867.           if(uf)
    + D5 D$ f  E) \
  868.           {8 g; K6 v0 k( d, t/ |3 M  g
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);3 o3 s4 F) I5 w- ~9 C* y
  870.             unzClose(uf);" [! L8 d# V6 K; ?5 h. T
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");% V( z! V4 F; G* z& l
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ; n6 P$ K* g" N  t; \  \: t4 |
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");& i3 ^) ~0 Z) V, k* E: N
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / r- E% O: r4 c- v4 j
  875.           }
    ' d2 N  {% W# \3 e
  876.           DeleteFile("Wsa.zip" );
    " ^$ K' a0 X! L# l6 D
  877.         }
    ( d) l, X! E& ]( B
  878. ( l& \& T7 @% b# O* v- k
  879.         if(CheckLocalVersion())* o/ M) c% B2 a2 R9 {* p) w2 K( |
  880.         {
    3 V2 i2 j$ @( N# D# j) w, R5 x% o% j
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ; q: _2 f! X0 T2 X
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    . C* s. [" }3 p) `' Y! K4 a0 Y
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");; N9 H7 K, ^) p3 O* E
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- j& g; d: o2 @2 c3 p' H) s( p) a
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);1 ^$ c' C3 b/ [1 ]8 `- [  G9 A
  886.           dwStartUpSteps=99;
    1 I; C+ }; }3 S; ~" G# |2 X
  887.         }
    6 x6 X* ]1 C" ~* a; t9 W
  888.         else
    ( I/ W* `8 K! ~( }& z2 b, `
  889.         {7 ?1 v8 U$ o3 I: o+ H$ e
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ q& w$ ]  I) q$ m" a. I. ~
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 N" W3 Q3 Y( z
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");  i2 N- E' H7 e& v" O. O

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

! |5 u% l! z  v

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-5-24 07:54

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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