CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
) Q9 U" I: z8 z6 N: `0 w0 i9 R) z
  1. / RevApp.cpp : Defines the class behaviors for the application.
    9 z2 R9 q! Q1 I0 R. _! _. z
  2. //
    * t" @! X, K( q/ k( h; |
  3. ; M( E0 J0 x$ h) D& f5 W% d9 Q
  4. #include "stdafx.h"+ T7 f/ q# L2 W; ?3 D4 X* o( j! q

  5. $ X% k/ Y/ d: O( _' N( n+ B
  6. //#define UNICODE, r9 `: X! w4 {) \4 \5 `
  7. //#include <gdiplus.h>0 l& @. O6 I0 m" f! q) E, b
  8. //using namespace Gdiplus;
    6 E, L4 O, I# [5 m( M: M* \' ~

  9. ! U4 o# T& w7 p8 r7 B; h+ ?2 ^
  10. #include "RevApp.h"! q' b3 q& @+ W
  11. #include "RevAppDlg.h"/ J+ i" x" i' g. x, O" f1 j- Y
  12. ! c/ s  k( a+ }
  13. #pragma warning(disable:4786)5 R+ R; U& N$ A% x0 _5 t, e
  14. #include <map>
    : O7 Q; M3 _1 H& a6 C
  15. #include <list>
    + c2 J. t/ i, K+ y- Q8 y% x' P
  16. #include <direct.h>/ i+ s' W1 ^& J/ T! H

  17. 2 U8 e. ?) I8 T0 A! B- `! R
  18. #ifdef _DEBUG
    ) x6 d7 M( C( p7 G
  19. #define new DEBUG_NEW) I2 T9 f' s' ]% B3 {
  20. #undef THIS_FILE
    " U; u) A6 U( ?* T' J; I
  21. static char THIS_FILE[] = __FILE__;
    0 h5 h+ I/ H. b5 u5 B! t: n  I
  22. #endif
    7 h" d; C8 \, W' k& d( ]- v/ k
  23. #include "SkinResDef.h"
    - {1 @+ e5 ?* e1 o9 m4 H
  24. #include "ChangeBG.h"! q3 ^$ i8 S3 T9 N
  25. #include "AFXINET.H"
    $ }0 k+ m( G/ w+ W" `

  26. 6 q1 t+ L2 B6 J" a9 ^9 R5 p$ e" S
  27. #define TRADITIONAL_CHINESE 0" K2 t2 c, _4 }7 j; c
  28. #define SIMPLIFY_CHINESE 1# F" L5 `+ O$ [
  29. #define ENGLISH 2
    & }, C( \2 Y: Z9 T$ |0 A  l
  30. int m_iLanguage = ENGLISH;
      b( A1 b7 o3 K
  31. /////////////////////////////////////////////////////////////////////////////
    3 v, {; h7 T, P$ }: e
  32. // CRevAppApp0 a. m9 ?! ~: j& E
  33. ( U: Q$ e: w) M7 \# ~+ f  G4 o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    , f1 ?9 y, L4 c1 i
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) I' S" u4 B! c# k5 ?; k
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.( i; C+ C3 ~7 N; T
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    2 H0 w2 L  q7 D' J; c4 ?
  38.         //}}AFX_MSG5 I3 I  z* M- G8 h' J5 D7 T% b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)( [) h2 [% q9 W7 h! y  ]" g/ {! f
  40. END_MESSAGE_MAP()  O$ i" t6 v* Y" m0 R. a- s
  41. % A: `3 Q9 X( [* S
  42. /////////////////////////////////////////////////////////////////////////////7 j. H8 G6 i0 t! U
  43. // CRevAppApp construction2 [9 X) Y) P/ ^
  44. + T; [% I  E6 D7 p) p% M. g, m
  45. CRevAppApp::CRevAppApp()
    0 S2 E3 Q$ r# ?/ g! t6 j* B
  46. {3 P/ z, i3 d* ]6 i
  47.         // TODO: add construction code here,+ Z" C# u4 i8 K! S, r' U
  48.         // Place all significant initialization in InitInstance0 K* ~  ]1 \, S, O4 n5 Y
  49.   bDisplayIsBig5=FALSE;
    $ M+ o6 Y+ F" H7 P
  50.   bRestartUpdater=FALSE;! E+ n6 A3 K: `! [0 `$ j7 P
  51.   bFinishUpdated=FALSE;" M: y0 y+ k, T
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    0 E5 ]0 U( |  Y7 \  D5 v
  53.   InitChangeDataBig52GBKS();
    1 y4 K+ @: o- I% F, Q& K* ~
  54.   InitChangeDataGBKS2Big5();9 r6 _" U2 [) {0 o
  55.         //
    . C0 O' i3 P0 O+ ]) G
  56.         bClickRunExe = FALSE;& d$ S. ^5 [9 q$ f3 b2 `! f
  57.         //. ~$ L$ V3 A5 l
  58. }
    : b. v0 x* C& ^( V& y3 g. M; ~

  59. & I7 d/ ^! w& o; b! S: o( ]7 Y
  60. CRevAppApp::~CRevAppApp()
    ( {/ [/ g" B2 n; K* \* _
  61. {
    / E( x$ G' Z( U+ a- W* w0 y  z4 b
  62.         // TODO: add construction code here,
    " n) n1 y* A2 M
  63.         // Place all significant initialization in InitInstance
    : Q7 A+ e: }2 b7 p% J
  64.   EndChangeData();
    7 e/ b3 i2 U2 Q+ e# u
  65. }8 `  n0 ?* e. p5 h

  66. 5 @& v. M% }$ D9 E7 k
  67. /////////////////////////////////////////////////////////////////////////////
    . t/ D6 i( K" S- H3 e6 @
  68. // The one and only CRevAppApp object
    ) r7 x3 w8 L5 {' e( X
  69. # p: F( I" O5 S
  70. CRevAppApp theApp;1 r; N. g3 E; ~: }3 o$ W
  71. ) @1 J* P  s+ m' f
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    + T* }0 G! s) f% M' k
  73. {( M- c2 H7 x% n  z/ [
  74.   int iEOF=0;$ g5 H, |! o! F+ k4 X- H
  75.   char szTempName[MAX_PATH];& M8 J0 x7 Y: @: \1 L/ l- E. M
  76.   *szFileName=0;% k9 U% e) h0 K' U, ^2 R% y
  77.   iEOF=fscanf(fp,"%s",szTempName);
    3 J$ }' K% d4 h9 k7 k# [  |' Y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('), x( j( ^" ]$ e9 ^
  79.   {( G" o/ O/ I  }! o1 k
  80.     strcpy(szFileName,&szTempName[1]);
    0 u8 z7 T9 M& e8 B/ b
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    - r$ \0 e- T% L1 x9 n% M* l
  82.     {0 U7 M6 K0 R0 a/ j& y8 _* }
  83.       iEOF=fscanf(fp,"%s",szTempName);( B  x4 I$ A8 _- |5 C" e  l4 N
  84.       strcat(szFileName," ");3 O" [+ Q5 ]6 c2 ]; i: P
  85.       strcat(szFileName,szTempName);
    ) t3 y9 G& R- E$ L* u
  86.     }6 p' W; O( t& V1 L# e
  87.     if(strlen(szFileName)>=1)& _4 f. s( T. V  a, f' s
  88.     {
    ) R- B7 k. x; Y7 l
  89.       szFileName[strlen(szFileName)-1]=0;( n8 s; r% Q6 M) K2 W7 s
  90.     }
    3 `1 K' m# H& D& z$ P1 Q
  91.   }0 e/ z+ A$ H9 W$ Q" w! C; g/ \) b
  92.   return szFileName;1 }5 P+ V7 s6 W
  93. }
    " x6 C8 ]4 W$ F# e9 H

  94. + _; g% m2 ~# |9 z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    : Z: c# L$ c' i8 M, K" `' O
  96. {
    % d# J) |: i8 H- d/ d
  97.   FILE *fp;. v7 q& l5 o  A' a9 E" t
  98.   char *key=NULL;( Z4 K- C. U7 {+ T; F: e1 Y
  99.   char version[MAX_PATH];% t+ m' H+ j; }- u4 ~
  100.   LPUPDATEFILE file,olds;, l2 O( X/ g+ g2 c: j
  101.   std::map<CString,LPUPDATEFILE>::iterator p;5 @! x, N0 f+ L7 @' I  g
  102. 9 G' ^% p0 f4 j7 i3 N1 S) N
  103.   UpdateList.clear();
    . h' v) s! d, P* G1 q- [
  104.   UpdateFile.clear();" ^: P$ q, O8 J
  105.   if(GetFileAttributes(filename)==-1) return false;
    4 D) B( o& p2 P# G. M- {, C
  106.   if(!(fp=fopen(filename,"r"))) return false;
    * ], u! O) X! y  J2 D' s# _
  107.   fscanf(fp,"%s",version);
    ( Q* k9 p6 G  n1 b8 y2 r3 E
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    6 t7 n- V# M( h0 Y& D
  109.   while(fscanf(fp,"%s",version)!=EOF)! |& M, d- r0 `+ u8 k4 i3 P- ], o6 F
  110.   {
    $ s# K4 w" ?! Q* i3 A
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 W' p, M' F" w# D8 |* [+ D0 c
  112.     fscanf(fp,"%s",file->path);4 o; ~% t% H1 I% y* p: F
  113.     ReadFileNames(fp,file->file);4 t4 w; N2 m3 l6 A/ C7 [4 X
  114.     strcpy(file->full,".");
    / {. M" y6 F9 G( t/ I6 r3 C: [
  115.     strcat(file->full,file->path);
    : ]0 m1 E! U. M9 C1 d
  116.     strcat(file->full,file->file);; \! @$ L3 v- |9 v
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& F  O7 D7 B# C, t
  118.     {
    $ s; w( p  h$ k
  119.       file->vers=(float)atof(version);
    * w" \4 B- x/ u7 {  O, m
  120.       UpdateList.push_back(file->full);2 h1 ~7 k2 ^8 p6 s( Y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));& o  h( K2 \0 t% J* U
  122.     }7 }7 M! f; b( Y
  123.     else
    & m* A" ]3 X5 S# o
  124.     {
    % y, G# J% @% l1 K; ^9 u% n* e
  125.       olds=(*p).second;! L9 D: {5 |% z$ P& b
  126.       if(olds->vers<(float)atof(version)); t- y) K! t% U/ ?1 C! f& u& f2 n
  127.       {
    ( c. z$ R( r5 V' o
  128.         olds->vers=(float)atof(version);
    % q1 R) I3 A4 z- b7 Q. S1 u
  129.       }
    * ?5 T9 |% b- v& f4 l- O3 t8 L9 R
  130.       free(file);
    5 ^/ s, _+ g( s* y7 j% Z
  131.     }. n2 t$ y3 E( {6 k7 m1 A+ R
  132.   }
    . n7 |, a/ j/ y5 [; [* O; @
  133.   fclose(fp);# R9 o1 J. H: P6 z. Q2 i
  134.   return true;# G9 K- ?: o  @  i
  135. }( f; G) w' y5 o0 Z

  136. * k( G/ g. F& k
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)8 E& b& F7 \  l+ W/ Q) P$ ^4 N; o
  138. {! f5 @0 l& P  I
  139.   TCHAR  szFull[MAX_PATH];
    1 X- a" ^, ]2 n- Y/ H# L4 b0 P
  140.   TCHAR *token,*inter;
    # X! [* f0 m. a" F0 Q: R0 t
  141.   *szPath=0;
    % v$ M7 c- p5 F9 L
  142.   strcpy(szFull,szFullPath);7 ]: I: F/ W* E% k
  143.   token=strtok(szFull,"\\/");
    : r0 Q8 b" D5 |; M8 O; c" C
  144.   inter=token;/ S' Z1 V- A  n1 i) }8 I1 f9 @
  145.   while(token=strtok(NULL,"\\/"))1 s# _1 ?3 z4 w1 `
  146.   {4 p. o. B$ J! r( O' H9 r% q
  147.     strcat(szPath,inter);+ V3 y7 h7 t2 E2 {% U+ Y
  148.     strcat(szPath,"\");
    6 Z" v: H, N- f) C/ ~
  149.     inter=token;
    4 l! h* u& I# z; x
  150.   }' w, c0 H( k4 i  ], c( d. s
  151.   return strlen(szPath);0 i: g) I! x( p& l; g2 e
  152. }" d% Q8 ?. k' j+ O; [% P: u

  153. - j4 @9 k/ c8 B3 `- A- o- K1 E7 x! ?- E
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    " K- h4 u; o, G/ c5 G! m7 n) ~
  155. {
    8 ~, Z! w/ F1 P# D, |/ n
  156.   DWORD attrib=GetFileAttributes(Target);
    / D& c3 Y1 g- Q" m& O) E+ z
  157.   if(attrib!=-1)% H# l3 Y# }3 V4 v7 k! l. M4 j  ?
  158.   {
      i4 I+ \6 `  b
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))1 P! F3 x" }6 M9 z
  160.     {- V1 ^  z! V! q; u, p7 _6 O2 ~
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    , S* t+ z, n( c- X
  162.       SetFileAttributes(Target,attrib);" L+ w6 N1 u+ N, G+ a" N
  163.     }$ [" n7 C  y1 z' I
  164.   }; }# m4 r( `6 k. X4 v, z5 `9 ^
  165.   CopyFile(Source,Target,Erase);, V/ i* h* `: s! [4 H
  166. }# X# T! ?  _$ a# E
  167. ' W, @& D$ w$ x4 U' |( |; n
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)/ \4 S1 M$ ^9 u
  169. {
    & e! m$ s: A+ z+ |1 P# ]7 W& e
  170.      FILE *fp;  c* S9 B9 l# ?* q4 E
  171.      char  szBuffer[8192];0 I2 @( i  H. k% d2 I
  172.   va_list  argptr;
    3 c) j" }5 @/ t5 |9 B
  173.   Z6 H( i1 X- j$ ?  u9 n
  174.         va_start(argptr,message);
    3 X- x: L' C" W1 r+ Z; m( l$ ?& x/ H
  175.         vsprintf(szBuffer,message,argptr);
    & V3 Y9 G% q/ l* i
  176.         va_end(argptr);
    5 P. U6 y- @( R% m; y
  177.   fp=fopen(FileName,"a");* S4 |0 u& T7 G! M+ |& ~- s! `
  178.   if(fp)! m! D0 O; S8 M
  179.   {+ M( J) M; U" ?
  180.     fprintf(fp,szBuffer);
    . D, M" k% P( e. M' v; t
  181.     fclose(fp);4 F4 l5 v* f1 s+ K0 o9 K1 ?5 v
  182.           _flushall();
    0 `. R$ c/ o2 M4 I- Q* D
  183.   }9 D  S7 `) o1 {3 \# V  D
  184. }
    $ b7 Q* M3 i  }+ G, R+ Q
  185. 7 l% k: O; ?: d
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    5 X: W: m3 @# |# s* t% c/ I6 m+ [
  187. {* j6 X+ Y: p( x6 Y8 M1 W# W
  188.      FILE *fp;* Q1 e! r; @! u5 b2 {
  189.     DWORD  attrib;' c. {/ h) M8 ~6 }4 _
  190.   attrib=GetFileAttributes(FileName);+ Q( j* p' _* R$ v; a7 O5 U) |
  191.   if(attrib!=-1)
    ; k: ~1 X: d+ K  ~) c
  192.   {
    " ~1 b- ]( E: }
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ( w" L) a' j' g4 P4 X' O! K
  194.     if(!SetFileAttributes(FileName,attrib))  l3 |' g! E4 _9 k+ n' f+ O
  195.     {. z- {  {2 d+ I8 \0 b8 P
  196.       return FALSE;
    2 g$ M* {( M" L' p, H
  197.     }+ \' H" ]9 D5 A  U
  198.   }
    : G/ w2 ^0 f3 o
  199.   fp=fopen(FileName,"wb");+ V! _# F+ x; u# \3 g
  200.   if(fp)' _( n$ G1 N' r
  201.   {+ {3 \* `5 [: @" N
  202.     fclose(fp);
    . X  k5 }6 d9 E/ r3 S6 j- _  i
  203.   }2 Y# i" y; S: r4 j& x" _
  204.   return TRUE;. ]7 t5 i: {/ }# J8 a% N
  205. }
    9 }& N; @: z% P( c2 C6 \+ [
  206. 6 {& a$ P* F, L8 ]2 u' q' R
  207. BOOL CRevAppApp::UpdateLocalVersion(void)' j. f# N0 G& Z9 O# k2 b" l
  208. {
    9 ?( `3 n& |* C: Q
  209.   char filename[MAX_PATH];
    & Q  }$ ]- W# d$ I1 ~6 r: x
  210.   LPUPDATEFILE file,olds;/ @- v" S7 s" [0 C
  211.   std::map<int,CString>::iterator i;( X: Z7 |& _! M
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    / u0 }- i& L0 y: b9 h5 e4 D. j3 j
  213.   std::list<CString>::iterator l;' m; ?+ G( Z6 ?+ B/ v( o  N5 g

  214. 6 n$ u+ N% O3 e' I
  215.   if(bFirstUpdate)
    - u9 ]# Q) Q- a6 n; N3 v! o; I5 ?
  216.   {
    1 o( `( k7 y' `# ], t
  217.     dwCurrFile=0;8 @2 O2 W4 P+ A; K0 O
  218.     bFirstUpdate=FALSE;
    5 Z7 x2 ~8 A8 w8 \: Z9 t
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      A$ K1 M  \  N7 g( A8 O, b
  220.     {! z8 N- h! I# j
  221.       dwTotalFiles=UpdateLocal.size();% u4 j. D$ n4 N' ^7 T
  222.       dwDownLoaded=0;+ O- z- }+ h& }; q8 O! n3 B& S3 Z
  223.       bSilentStep=FALSE;
    1 I* D" _2 n2 D2 _' R# N' k) d* K
  224.       bCompressed=TRUE;
    & T- A9 B. r2 X' J- b
  225.       strExtLocal.Empty();
    9 ]3 _2 \9 V; ^. l0 D( w
  226.       strFullName=(*i).second;2 ]. Q' E1 g% z" I( D2 h. H3 ?2 B; D
  227.       dwProgramState=AP_CONNECT;# C/ }" R4 I- j3 R& K6 k
  228.       return TRUE;7 K/ h4 a" ]- y- w: @
  229.     }
    & q' ]1 v/ I# u* T7 G2 l
  230.   }7 o, M" e9 m/ ]& _" B2 N4 b% Z* f+ L
  231.   else if(bRestartUpdater==FALSE)
    - N! D5 J! p5 ]5 Y: R
  232.   {4 c  n1 K  Q, `/ {( N& g
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())( Y3 D, k' s9 V. }0 a) |# i
  234.     {$ D6 p9 l* H2 A# d, d" j6 R% Q
  235.       file=(*p).second;6 |$ P+ I* B0 F( a
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    1 b! k3 h/ I' O( E+ O* f- y. i
  237.       {
    3 }7 P  q6 M+ \# t. E+ C( V
  238.         olds=(*p).second;
    & x' s$ Z" O: I
  239.         olds->vers=file->vers;/ z- v6 t6 l! a5 h7 p: o- Y% t
  240.       }
    8 d+ M- {  ~7 N$ h/ W
  241.       else6 X: I5 N9 V- b* |; v
  242.       {' g9 C0 {( f- S1 K$ e
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; O9 ?& \1 J$ \5 q
  244.         memcpy(olds,file,sizeof(UPDATEFILE));1 q* f# m5 V# Y5 ~% _5 k( ?2 }
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    % N; m. E8 o& V6 z- m( S
  246.       }
    1 p' ]4 I1 F- I" O4 C1 P* _: M
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");: Z$ V( K% O& q; V0 ~
  248.       sprintf(filename,"(%s)",file->file);+ H! ?5 q8 _; P: ]8 r
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& U) B6 i1 h! L7 r% M1 i
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    : C. @, ^% V  F5 x. Q! c/ P) H
  251.     }& V; k( Q5 I. r, H2 h3 D
  252.     dwCurrFile++;1 p& r6 ?5 t3 f0 B
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : p9 h+ s5 V3 O( h
  254.     {9 F0 G  Z8 |9 s7 l
  255.       bSilentStep=FALSE;5 P' e7 b1 y: G( C" Q) S/ m
  256.       bCompressed=TRUE;
    2 H  V+ j) V, \- c5 s: y
  257.       strExtLocal.Empty();) k0 F3 a3 d  w5 U
  258.       strFullName=(*i).second;3 u! @2 ?. v% t$ Y6 R  d- t
  259.       dwProgramState=AP_CONNECT;
    8 E: x- A/ J  `( c1 B% [- N6 i
  260.       return TRUE;1 L  L/ F, A7 @( P% y* @$ e! I- G% e+ g& ?
  261.     }
    # M- I4 ]" c, S
  262.     if(!bRestartUpdater)0 Y7 B; v3 \& Y
  263.     {
    / Y% n9 y0 S6 |  p. Z8 T
  264.       int iCurrSize,iFileSize;3 p) j& V) t2 Q9 ^1 K: F. U% b) D: K# G
  265.       iCurrSize=0;
    , x) s4 O3 @; D; y9 g$ c" F
  266.       iFileSize=UpdateList2.size();
    0 t% w9 i# ]3 t3 Y9 J) h
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    " U0 u) e+ y2 P& [5 `( b. v4 P+ M
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 k* F" p* L' c5 W, y; L
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ; y/ i- L2 U* Z- a5 d1 @- o0 Y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 Y3 S2 \" q( M' X7 t2 Z
  271.       Fclearf(".\\update.dat");$ v* l. T$ w  g7 R3 I
  272.       Fprintf(".\\update.dat","Bloodyf\n");) U+ I, Z/ a, l# Q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 Y" d) w' p) D
  274.       {4 g9 l! C" n9 t0 ]
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    0 h. j5 Z, `, J. |# @  T
  276.         {( x+ g2 f5 v1 q  Q7 P
  277.           file=(*p).second;$ P1 y5 e; C! o2 Q" t3 I8 P% T
  278.           sprintf(filename,"(%s)",file->file);8 C5 A( H$ y4 j2 A6 I
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + G) x$ C9 Q' B
  280.           iCurrSize++;
    # ?- b& F, U+ N( N& P9 P0 S
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));; v3 g% D  M$ H
  282.         }
    ( T4 ^5 g/ X' I* O4 Y
  283.       }
    " z8 f) e1 B# I" T( K/ Q7 l1 w
  284.       unlink(".\\update.txt");
    + V1 z" p; s% A1 U9 o4 |
  285.       unlink(".\\update.tmp");- |/ F* k+ D/ Q' q0 \
  286.       Fclearf(".\\checkversion.dat");( W6 Q7 H* k8 ]! o7 k
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    . t1 w' Q+ ?. ]( P( a
  288.       if(UpdateLocal.size())
    + l# q$ I+ Y" ^# W5 L$ |
  289.       {
    . K$ E0 L/ `+ z1 F2 S; ^
  290.         UpdateLocal.clear();
    % H& N) |* J- _$ r* Y1 o1 J
  291.       }
    8 K" k5 g/ e0 o0 g+ [  ?
  292.       if(UpdateFile3.size())
    5 R6 _' _7 E8 B" Q3 }
  293.       {& Y+ Z% q5 B4 t4 V
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) y( N4 o5 j  b6 g& s
  295.         {- ]: j& Q4 [" A1 ?- |; ]
  296.           file=(*p).second;  Z% e: Q6 w! ?/ S3 A5 p# f
  297.           free(file);
    1 n- @* H# A0 y$ e
  298.         }
    * Q" J1 I4 a; r5 C! M  S- z1 _
  299.         UpdateFile3.clear();
    / K1 V( v. U6 i  Y( _; Y/ F# [) ], o
  300.         UpdateList3.clear();3 {* t4 p$ e' `& f+ v# p7 I$ x
  301.       }+ i& w! q* L4 [2 b7 B, p
  302.       if(UpdateFile2.size())
    7 V5 i. |) ~$ a2 Q
  303.       {5 A# T0 i3 l' r! P" M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 K; ^3 M' ]4 \9 [& {1 m2 n
  305.         {
    6 p' p, _& o9 t6 u" a$ x- o
  306.           file=(*p).second;  l# R' c1 H# V% G, G
  307.           free(file);# F3 w4 d- [) \) R
  308.         }6 h( H" q; ^( ?) V% P! ], o$ O$ g
  309.         UpdateFile2.clear();
    - n0 D1 o8 g; l
  310.         UpdateList2.clear();
    $ Z& i  O( b# s; }
  311.       }
    ( P2 h2 R- r3 Z- j  K1 K
  312.       if(UpdateFile1.size())
    $ n) ^( G+ k' ^4 ^9 P) K
  313.       {* K( k- k; U4 k- A7 Y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# V+ C% q* s) R; N0 x' G
  315.         {
    0 P: q3 E$ e, G3 z9 A% M
  316.           file=(*p).second;' ^$ J( I1 w6 ]! `( J( i1 N
  317.           free(file);# g7 U! b/ J' C. e) B  t, q
  318.         }
    3 c' M6 i0 Z+ p3 Q+ h1 D% Z
  319.         UpdateFile1.clear();* b3 ~/ U8 }0 L* F: ~
  320.         UpdateList1.clear();
      i# S% k. w) h3 M
  321.       }
      k9 D! x: I0 {
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ h1 I4 T. v: y8 j  d8 o1 n
  323.     }4 L+ p+ j- J! M
  324.   }5 S8 C# y7 k7 @7 }& Z* `
  325.   return FALSE;
    7 _& w' H$ }4 l) H
  326. }
    : a2 Q' X+ H1 K

  327. # z0 L0 a; A2 P
  328. void CRevAppApp::ClearAll(void)
    ' _! ~( h$ v- \( M! c/ K. K3 b' f
  329. {
    1 G! H4 @3 o2 Q" G- _# c
  330.   LPUPDATEFILE file;
    4 ~+ Z# D$ }# \& h
  331.   std::map<CString,LPUPDATEFILE>::iterator p;* p+ Z, X5 ]  o2 t0 l/ w

  332. ; |3 O; X( s  Y- r2 P
  333.   if(UpdateLocal.size())
    + y( a* B) O  `( q
  334.   {
    ' d" u* v3 |, }- Y( S  n
  335.     UpdateLocal.clear();8 L2 }' X: X5 i  C0 j; Y3 j
  336.   }
    . }6 i! v9 Y: G. U
  337.   if(UpdateFile3.size())  c) P( k, d- p# s8 t  G$ N
  338.   {
      \4 \" D9 s& f4 [  A8 `* M
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# g& z! U* T- ~9 r, g
  340.     {
    - x& }/ x+ j: l
  341.       file=(*p).second;( l1 }* H1 a  V7 T+ Q- z
  342.       free(file);
    / j7 U4 l- m6 [3 d
  343.     }
    8 Q6 o: r' Q" R7 H+ a* m# }
  344.     UpdateFile3.clear();
    2 r. Z4 \' k% _' i- f
  345.     UpdateList3.clear();
    . r, |0 ~0 B! L' K3 ]3 ~" j* v
  346.   }- t& a- ^4 y2 [! ]! r
  347.   if(UpdateFile2.size())  O2 i: X: X1 G6 C  C1 _2 J# i+ j
  348.   {1 B0 _" _$ l1 U# g* r: [% k
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / j  V& s, f  W: W& C
  350.     {6 f1 v! k( E( L) H! ^
  351.       file=(*p).second;
    7 z1 u% V0 {/ ^  B
  352.       free(file);' r* `) R% V- d; ]3 p9 Z
  353.     }
    # u) o2 |' [8 A1 ^, k$ `' j2 M7 G( X5 \
  354.     UpdateFile2.clear();4 R; S7 K+ H7 `! ]) l1 Z
  355.     UpdateList2.clear();
    : o$ n8 {8 o5 M5 [
  356.   }& m8 }( ?# B' ?4 J
  357.   if(UpdateFile1.size())3 L# ~/ V' K0 c$ `( C* A2 _
  358.   {
    / n; w  B% q. @$ {3 }
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 ^  B" y& z0 I; Y, A
  360.     {6 L- I, _4 Q4 \5 x  Z
  361.       file=(*p).second;# J( D* D( o+ W$ I6 W
  362.       free(file);
    , g6 y$ c  i4 O" U& J
  363.     }5 ?3 L% p, k3 z
  364.     UpdateFile1.clear();5 L, ]" V  `# j6 T/ L' G* t
  365.     UpdateList1.clear();; y4 p' _2 ~  k
  366.   }1 \5 V# y6 d" A9 X
  367. }  4 q% n" W8 c# g5 y
  368.   
    ( H( ^! T2 r. k7 v' X4 ^" {
  369. BOOL CRevAppApp::CheckLocalVersion(void)5 b3 E* Y" K* ?8 B) n
  370. {
    # H2 D2 Q- P! I6 k) H. ^- @+ M3 V/ W
  371.   int c;
    1 T& R0 b! Y6 C' x3 V
  372.   LPUPDATEFILE file1,file2;
    ) D/ p7 G- l3 [
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;% M: g  D( I+ B; E! V5 P+ v1 v
  374.   std::list<CString>::iterator l;6 H6 Q4 U, {8 y" d6 d, J; n' {+ v7 f
  375. 9 k% L8 L) v6 N/ U
  376.   UpdateLocal.clear();
    ) o" b# j9 c. Z4 J9 o5 k/ j
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    / \, l/ A' S8 F% Z9 g/ Q) t# D
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);% \; G0 w8 q! b* L
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    5 L6 ]$ O" D% @# \& ^
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ! J9 W! X/ r5 [% ?! y
  381.   if(UpdateFile3.size())
    1 l6 q9 ~9 t1 J
  382.   {5 T  u+ k8 I" e$ A- U
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ( ~! ?: M2 r+ K9 ]: s
  384.     {$ {6 D' e; s- z9 U1 h
  385.       file2=(LPUPDATEFILE)(*i).second;
    ( ~6 {: K+ Y& _4 h6 `
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 u7 O0 A* j1 V7 w& E, W1 Z
  387.       {
    ' O' z4 {& Q) h$ X3 v# i  b
  388.         file1=(LPUPDATEFILE)(*p).second;
    $ S# H5 |) C6 ?" {( l1 p8 a
  389.         file1->vers=file2->vers;5 n: I3 t" G+ S" s6 c, z
  390.       }
    % A# i8 L4 Q3 \* i  ]
  391.       else" |5 }9 P! N! c2 V- ]! h
  392.       {
    2 \4 ~! K& k/ K+ ^8 ~7 U; A
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) J, |# S5 z; u2 F& Q
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    / ?, Y% A. p( }
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ' `9 L7 k+ _  N& [7 g
  396.       }  Q% P2 v" y3 A+ C6 w
  397.     }# o3 P4 @- N" r( L
  398.   }/ [7 ^+ }' W+ ?* e/ g2 [, K, v) Y2 N
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)7 N" P  H. W, E: q! C" z0 b
  400.   {, C% J. _1 U5 ]
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()), T9 M/ H  Z0 c# S. o- Z8 k7 Z- ^
  402.     {
    2 q0 E1 s& `0 S: d
  403.       file2=(LPUPDATEFILE)(*i).second;
    2 ]9 f1 {  M$ d# [& T2 ~5 _  P
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())/ x2 O- t1 N/ K! h1 q2 c/ J
  405.       {
    ! _% L& K. U7 B) B
  406.         file1=(LPUPDATEFILE)(*p).second;
    - n6 ~% V8 R3 T; O* [3 k9 N2 Y2 v
  407.         if(file1->vers!=file2->vers)6 U7 [1 }, a: Q" C' j" x
  408.         {2 J, |* b' p5 W" w8 U* u
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
      z& z: r) n: X4 q* Z6 W: _3 x
  410.           c++;
    3 I* e' w" d! d5 T: k7 |% D
  411.         }! }+ j/ V: ~0 n% N
  412.       }
    . ~+ L- V; n( L2 K
  413.       else
    % V' q" ~; l5 C- y* n& e& k
  414.       {' L& s+ |8 v( H: r
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- _* v( J4 m# J% `  k
  416.         c++;3 S, u7 {8 u2 N: v
  417.       }
    * v0 _  ?+ i/ _+ Y) b7 P* M: e
  418.     }7 u0 T. F1 x; O& C
  419.   }4 Z+ j8 }0 p) ^4 q5 `7 J
  420.   unlink(".\\DownLoad\\update.txt");% h$ U7 B7 j+ ^( t
  421.   if(UpdateLocal.size()) return TRUE;
    / ?( i; k) y; w. }- M
  422.   else                   return FALSE;
    0 b  w9 [% I% G% D/ Q5 Z4 D
  423. }
    % T$ f* r1 j3 }+ I
  424. 4 }2 Y4 c. U9 J3 Q
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"0 q, G! U# j3 ?, z! Y2 j; Q- @
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    $ U' a, D9 T; t5 K

  427. 9 R' N) }7 {6 D, l" @8 K
  428.   w& U& Y2 I' ^) ?( V6 U: h
  429. 1 Y' z& H  q7 y7 e- ^
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    . G4 \6 y; j" p  D3 G
  431. {
    * R& ?1 P7 d' N* _  d" F) }
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;5 E" u5 S* u$ \% a
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    6 U9 m; \$ D$ ^& G6 x5 ^# {
  434.   {
    , k' I. ~6 X7 {
  435.     char szLanguage[50];
    ; q0 ^! T1 R+ }
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " O2 b4 [& A( A# g+ R
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 \0 x; g6 k; L7 ~" p, Y* d, z
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 p: C/ _- F& ^! E3 g
  439.     else                                   m_iLanguage=ENGLISH;: l/ C- P/ w2 Y. g
  440.     char szRegister[100];. l: ~) K9 Z2 q; Q. Q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 J3 R/ s; D3 e( @0 a% g
  442.     strRegsName=szRegister;! o/ ]4 k5 u' ?( `
  443.     char szPatchURL[100];
    8 I3 Z( a# h$ l5 H0 n* [
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");2 Y+ T" s" J) ~" F' Y6 k
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / P  O, m  [0 N1 I' P! M
  446.   }
    - K8 w0 r2 }% Z. U/ ]3 ?! L
  447.   else
    5 R! l9 F1 A' Y, k  u, F3 l( E
  448.   {+ i; r3 i$ ?, W" w
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      n. m' P. u- I+ K5 W
  450.     strRegsName=DEFAULT_REG_URL;
    9 H6 h. M$ `: p4 d! B; V2 B8 G
  451.   }
    # X1 j# w2 T5 }+ \4 S0 s! j% w2 Z
  452.   if(GetFileAttributes("hosts.ini")!=-1)
      |( x# @8 G1 {) J3 ]# ^" n
  453.   {; W. g9 V5 S* S# m4 Q* R
  454.     char szIP[50];6 |& K. k2 o8 h- }
  455.     char szDIR[300];
    * v. T& K& F: k) i7 H: _
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")): \1 v# W# `3 }
  457.     {
    % }7 ]0 l7 I% z6 x
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");! U" M1 c+ k7 U# f, \
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    , X1 C# P- w! X! L" E
  460.       strHostName=szIP;' ^9 H  n( C. _
  461.       strHostPath.Format("/%s",szDIR);; {) K) ~1 \3 w- x
  462.     }# G9 h- N& g$ r9 q
  463.     else5 ^/ ~2 G* w/ {! |. e' A
  464.     {
    2 H# z' h9 H; P9 q6 @# v
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) K7 q' _0 g) s2 o
  466.       {
    ; i) I7 N4 i; Y$ T
  467.         char szLanguage[50];* D- w% z- X5 l  O* M
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" B8 m: Y+ M" V
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! N. s* r8 A/ Q# G4 h7 t+ a
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 g" X4 Y! w/ U) F$ F/ t
  471.         else                                   m_iLanguage=ENGLISH;0 p! m9 v% ~7 m$ Q$ u8 W7 n
  472.         char szRegister[100];
    ( Y1 `( A% x; c$ o3 a/ f9 i
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- H2 ^4 X8 Q8 \+ m  S
  474.         strRegsName=szRegister;4 o% {. ~1 [3 v3 M# ?3 |) @0 j( x
  475.         char szPatchURL[100];. q+ V- R: r9 k$ L, v5 x! l
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- o# }) S" `/ p0 M6 Q. u
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 |8 s# Y7 R/ X( O, M  ]0 p
  478.       }
    # V3 X( B# h5 Z
  479.       else' n' Z2 g" P) \, j" O! Y
  480.       {
    ( p$ q0 {" Q" ~3 e. ^3 H  y
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ; G" q2 T% U1 k% C5 R8 Z: I
  482.         strRegsName=DEFAULT_REG_URL;; Q, t: \' x! g  a! f/ L
  483.       }5 D" B) \8 P/ O  t* v
  484.     }9 `2 R3 d! r. D! u, F" i8 Y. `% Q8 {
  485.   }" }0 t' ~/ w4 |2 H/ g( W( B+ L
  486.   return true;
    * `( B3 t6 S3 Q+ i3 r4 z5 e) ^
  487. }* j  o+ O: M" ~
  488. * R+ O2 d0 L' J+ I4 K; n3 C8 f
  489. #include ".\ZLib\unzip.h"# x! V) f1 X  j. ^/ v
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ; g# F) T+ p7 h* H+ u( B
  491. /////////////////////////////////////////////////////////////////////////////
    / S+ U0 C) a8 b( j4 H- o% I
  492. // CRevAppApp initialization
    $ C8 g: o5 O$ q7 R! ?' B1 L
  493. ! m6 X7 x" e7 h, E4 m: \  d9 J
  494. BOOL CRevAppApp::InitInstance()
    , {  y7 i1 Z$ ^& e# t
  495. {6 z4 a9 p* h" E# m0 k! b  O) F
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];( C" B: B( p* F. Z- G4 @: x
  497. ( o5 v  P  G4 x5 y/ [7 x% ]9 M% }+ D
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);5 B* V& G* N- `2 o/ V/ I; e3 f) y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    0 G+ E( C2 t* j2 e8 }& C; f. }$ c
  500.   {
    9 D% T1 Q. X8 D& K  h) z8 l5 s
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");9 t  ]. g) }0 A. T  ?
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; T7 D: }# p2 A) F+ y4 h3 q% t2 w
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    8 {( s( w* m: `8 X9 }3 x2 v3 J: `+ N
  504.     {3 x7 t( E( R7 u6 U" a
  505.       strcpy(szPath,szPathTarget);
    ( A6 F$ N, M- ~4 I. o7 \/ w- f
  506.       SetCurrentDirectory(szPath);( R4 ]9 @& I* K1 X0 I
  507.     }7 g" ~7 `5 j* ]9 }- a& I
  508.   }9 S  f  g7 N1 Z) V9 J+ M
  509. #ifdef _DEBUG
    1 x% U, S. I2 y/ T% |7 {$ D
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) P2 r$ O6 S6 k1 y% ]8 h) s
  511. #else
    . g; V" b  ~3 x+ U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)), \9 J  f$ R1 j/ R% I
  513. #endif6 L8 c, H! w* |; M" N- G
  514.   {
    : e& [2 ]4 _# z+ g+ @3 h
  515.     char tempFileName[MAX_PATH];" ?4 s2 I0 h' t; l6 G( [
  516.     strcpy(tempFileName,szPathSource);$ s& C4 ?; X7 E7 l5 h2 ^( L3 L
  517.     tempFileName[strlen(szPathSource)-12]=0;  T7 ]0 ~  T  D% _! Q3 l' \
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    , L3 d4 M0 W$ w3 H( k1 G
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    - C( ?& X& a5 u6 ~, q2 F
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);3 I1 ?" U2 b8 R( Z- i8 k9 a; i
  521.     return TRUE;
    & }! O3 q* {% ]9 l% [2 O! J; z
  522.   }
    ; [* B1 }) d( k7 G
  523.   // Nuke 0118: Delete run.exe
    ! |* Z7 F: J* J6 Z4 e; A5 Q
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    4 X% u) T( S7 M2 g6 n
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    6 k; ~1 E+ [5 B( k
  526.   if(!ReadCfgFile("Config.ini"))0 j# `. V  m2 t2 P
  527.   {! ~  p# ]0 f; p
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    : e4 @. s) b+ ~. x. h- [7 p( ]
  529.     return TRUE;5 Y* `2 g: w& t3 p3 T' C2 {7 {
  530.   }, A( ~9 X2 b" Y, m4 D! o/ b1 e
  531.   HANDLE mutex;
    3 }- a$ z* [+ N" I$ C
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")), n9 d6 }% b# t4 u% q
  533.   {
    ' n4 q% R& D8 m
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    0 L: B; t9 @7 _8 i1 M
  535.     {8 u  {. @' b7 T. b
  536.       CloseHandle(mutex);
    9 I: U( b4 _: ~2 u
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    7 o4 S7 o3 g: V, o5 @& U  t: V
  538.       return TRUE;. H9 g! e% ]3 M
  539.     }
    . y7 N. p9 T# `
  540.   }  ) W% V4 j; X9 Q
  541.   CloseHandle(mutex);2 Z6 E5 G2 V6 c* _1 B
  542. ; N& w; o! F8 j% `$ |
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( R( o1 G6 p1 f

  544. 8 {/ L+ o* H. w; P) |( b; ?
  545.         AfxEnableControlContainer();
    5 v, D* G0 e; b5 R# k% }: M
  546. 6 K; b, J* Y/ ^4 L% ^
  547.   bCanUpdate=FALSE;
      c/ [0 A4 D% ^# D1 ?  G
  548.   dwStartUpSteps=1;
    8 P) k- `, l' M$ w
  549.   dwProgramState=AP_NOTHING;* m. M$ c$ E7 t; E1 b$ k5 [

  550. 5 ~. B( Z$ W5 T+ R
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);, f& F; i" h' @6 A6 k+ U/ c
  552. - w! r# G' T7 l$ q" M4 u$ A1 C/ I
  553.         // Standard initialization
    ) c0 q2 D/ L' _$ T% j
  554.         // If you are not using these features and wish to reduce the size6 |4 H$ ?6 i5 [2 a7 x5 l* }" q6 S
  555.         //  of your final executable, you should remove from the following. Q& F1 U' r/ w# k# f
  556.         //  the specific initialization routines you do not need.) Y5 d+ ^3 n8 Q1 Q! E
  557. + C9 @( B+ z3 q. T& _3 l
  558. #ifdef _AFXDLL9 M0 g- D' L9 w# s9 b. {# k" R
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL( y% s9 O( ?, T4 n" Y# |
  560. #else1 A! }/ {' `# s- X
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically% Y& }! e7 R1 w( O) `- [! j: x
  562. #endif0 E: `  D2 U4 c& R/ ]2 e- {

  563. 4 g0 i( `5 F! ]9 D7 i
  564.   dlg=new CRevAppDlg;! b5 O4 p$ c- \$ B
  565.   dlg->Create(IDD_REVAPP_DIALOG);: B% V8 Z, W9 U! ~3 ]1 W& D
  566.   dlg->ShowWindow(SW_SHOWNORMAL);1 A1 G) Z( C. q1 P" j8 U
  567.   m_pMainWnd=dlg;8 P, {3 ]! l* z0 z& V( `0 y; h

  568. ; q4 T9 l# x; x, J: `8 }
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    $ k* @3 `/ u8 O

  570. " L% h  R4 G' t3 h9 `: @
  571. //  GdiplusStartupInput gdiplusStartupInput;
    & h: ]  b5 y' C
  572. //  ULONG_PTR gdiplusToken;
    5 i- V, L+ y8 H" e& Y' I' R- T
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 b8 l1 M, x6 A% V$ Q, D0 L

  574. 2 ]' z1 A% S( u3 k8 d3 k, m! {$ N7 a
  575. //        CRevAppDlg dlg;
    8 W: m/ l; n" x  Q9 z2 `4 R
  576. //        int nResponse = dlg.DoModal();3 o. I% [6 o0 [
  577. //        if (nResponse == IDOK)  k0 J, Z# }5 J' R( R0 a( W8 x
  578. //        {, O- _& s9 Q. b* Y
  579. //                // TODO: Place code here to handle when the dialog is. z' U4 i9 y2 j8 q
  580. //                //  dismissed with OK1 w! v: O1 j, m1 W  K6 I
  581. //        }
    , U7 w  a3 a6 p0 q
  582. //        else if (nResponse == IDCANCEL)7 m8 N5 B1 K. k3 o& A8 n6 x0 ]
  583. //        {+ ^1 [1 a% E) _, o
  584. //                // TODO: Place code here to handle when the dialog is
    4 m( }) _- V: s$ S1 t; r/ C
  585. //                //  dismissed with Cancel
    ( M8 `4 m: p( l, I
  586. //        }
    / A0 d$ E1 C9 T% O1 t$ F4 T
  587. ! g& h* `/ N8 c9 _
  588.         // Since the dialog has been closed, return FALSE so that we exit the; B  M/ D" P6 X+ s: x
  589.         //  application, rather than start the application's message pump.
      x$ D+ b! _& q/ ~
  590.         return TRUE;
    6 j/ l- {3 |! w
  591. }7 ?- `0 W- L& @

  592. . J$ W# @# k+ H" A+ |0 b! U  N
  593. char *CRevAppApp::strtok3(char *pSource,char *token)" u' `2 p0 v9 @: `  j
  594. {
    1 f3 n: S* X1 k# V( s3 x$ h
  595.   int i;
    * Y8 j: a5 H7 O, h, ], e
  596.   char *szRet;
    $ i( T! h" D4 w( K9 ]
  597. 9 W) a9 _% S5 g! @! B- A5 d
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    - t8 U; h  R- l- n( n
  599.   if(sztoken)6 t2 G3 b* O: l
  600.   {
    ; W3 }7 M" d5 P3 ]) a  b( A
  601.     szRet=&sztoken[itoken];
    6 }' q7 H4 d( B/ q
  602.     while(sztoken[itoken])( e. n5 L/ g7 E& H+ e# a6 e0 S
  603.     {0 V& D( r* Y3 _
  604.       for(i=0;i<(int)strlen(token);i++): ]6 L; c- H( P; _' Y3 W4 W
  605.       {4 w( F" {5 C$ H  W2 i/ A# Y% ]  F5 ]" m
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])1 V; v( g* G9 B) J
  607.         {+ L: w) S! O, i
  608.           sztoken[itoken++]=0;& t  p; N, I7 e) i
  609.           sztoken[itoken++]=0;9 x3 T$ c! g0 b0 ~" Q1 c7 G3 R. r
  610.           return szRet;) }& k$ v% A9 K/ U4 A/ L
  611.         }
    / F; x. o: h8 E) ]; P. S) W  r7 c
  612.       }
    , k% P/ O& Q$ j7 _# f
  613.       itoken++;
    9 O1 {6 S3 A+ y5 w  o
  614.     }" ]; X) ]% s9 B6 N* L; h$ y1 Y
  615.   }
    3 R% S9 W2 p+ e+ d* t
  616.   return NULL;% K/ Q4 @  T' d5 s
  617. }
    9 r% L7 F* {& g2 ]2 @0 o6 Q8 @
  618. ( }! s0 h' V+ ?' [$ \: e
  619. void ProcessProc(long Total,long Current). P3 n' {$ }% i- O$ I# C" c( [- B2 A
  620. {- z* K0 S+ l" P7 h8 {! W7 O
  621.         MSG msg;: z1 ]/ X; E$ t$ k; ]8 T
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    6 Z! h% d1 o5 P+ n  M' i  V  g
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));1 ?: J# w4 `* D: r
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    1 O) Z/ t4 V+ j5 E( L# h2 t
  625.         {5 ~7 m3 l2 F: _$ c* C
  626.                 if(!GetMessage(&msg,NULL,0,0))5 ]' C1 v! }% _2 v5 b
  627.                 {1 N! f! Q- S/ ?1 ^" `
  628.                         return;
    , q  n) G5 @  R. T' d
  629.                 }# }6 A: j5 ^5 f8 g
  630.                 TranslateMessage(&msg);
    ) i- F5 J5 e) n# k" s0 f
  631.                 DispatchMessage(&msg);+ B- l, a- ~1 }3 V4 n. G' r
  632.         }       
    , {% G9 L! ]& j8 o& C7 T6 p: j
  633. }. }" a/ {8 U  B) F& X9 o; v

  634. ) u6 w1 [: t9 g" q. |
  635. BOOL bFirstChar=TRUE;. D% G/ N0 q/ i8 R" C) r$ h
  636.   ~2 E, @/ e9 g& r- }% w3 [! @+ s, H
  637. BOOL CRevAppApp::OnIdle(LONG lCount)' C- f8 J9 R$ F- C% e5 i4 {8 U
  638. {
    6 G6 R3 K$ U( Y9 ^
  639.         // TODO: Add your specialized code here and/or call the base class
    4 }5 ]+ ^. }0 i, l8 Z! J
  640.   switch(dwProgramState)
    & M8 G4 {. q9 Q1 V9 {! L
  641.   {2 h: @1 H7 W8 C) V! V
  642.   case AP_NOTHING:
    1 c6 L9 g* N' Z
  643.     switch(dwStartUpSteps)
    # B/ p+ N7 J: |7 ~, h5 C% F
  644.     {% C% K1 a6 M4 G) J+ u1 I  v( [
  645.     case 1:6 [" W$ R" f# ?* W& K. p6 p
  646.       {6 b8 A; W$ Q0 ]  m3 P4 K0 c$ U4 \0 g
  647.         int i;, T: ^% p  j8 M7 X
  648.         CDC *pCDC=dlg->GetDC();
    1 d* y* v- L" m3 m& D( d6 M0 V
  649.         HDC hdcwnd=pCDC->m_hDC;  N* h7 W; l1 e
  650. //        Graphics graphics(hdcwnd);4 @/ f# Z, e- j+ w7 @
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");% c& x- S( u. t6 i0 n
  652. //        INT iWidth=bitmap.GetWidth();# A8 A  P2 y+ \0 {
  653. //        INT iHeight=bitmap.GetHeight();
    & w/ F) e0 h" w( {3 {5 i
  654. //        Color color,colorTemp;6 A8 r" m4 c! ^3 T) C( n. O" W( @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    3 u" `# j- G+ m, r  E
  656. //        {; {/ g$ {. P' w( r+ R+ z
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)' N2 Q: Q  G, v5 @6 U
  658. //          {
    3 B. B; Z7 s" t0 g) u; W
  659. //            bitmap.GetPixel(iColumn,iRow,&color);1 I5 v' @7 a5 z
  660. //            colorTemp.SetValue(color.MakeARGB(: T& Z3 h7 E- P& b( F
  661. //              (BYTE)(255*iColumn/iWidth),3 J3 Q; q: H- {- z9 f# ?3 L
  662. //              color.GetRed(),
    1 m1 |( @6 y7 G4 e4 S
  663. //              color.GetGreen(),$ q& [1 R$ P0 f
  664. //              color.GetBlue()));1 i4 C1 R4 Y, V! {
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);! M- p2 u7 s# R4 p& E
  666. //          }% h3 [, u# f' z4 n& @, r) u
  667. //        }  d' M7 B1 Q; ^8 c% K1 l
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # \# J2 q4 X! l' |# [- F- Y: m8 V
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' x. t4 j, L. [0 e
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    9 l8 D9 a2 Z- F. a
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' s3 y2 l, a' Y; {7 T9 o( Z0 v0 g
  672.         for(i=0;i<240;i+=8)
    ; ]+ h' h/ Z& M
  673.         {& t7 P( h; |& \, b: h" Y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 X, S, J3 v! z: k
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ {: J4 l) }. C7 w5 N8 [/ R$ f. \$ U
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    2 T. \  \" M7 v5 T
  677.           Sleep(33);
    + C/ S0 m6 U4 s9 J  S* P7 r
  678.         }' P# c# \: ^5 O8 P& U$ [
  679.         Sleep(1000);
    7 p! u! |/ u; Z3 w' j  @  [' ?
  680.         for(i=240;i>0;i-=8)! I0 {! q1 t% _
  681.         {
    : d* p1 D' e* N3 Q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : I3 A& X' _4 S& _* Y' ?) ]- X
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 M& E- q6 n2 i; `3 t, j9 @
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# K; B# t0 _+ \  F, S
  685.           Sleep(33);
    ; A! h& [5 F7 @+ _9 X
  686.         }
    + k$ C6 f& `  A9 a9 c  z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    4 Q; Q! e; ^& `! v- q7 w
  688.         dlg->ReleaseDC(pCDC);
    - j8 D7 K$ J$ J( Y/ j# Z) R
  689.         DeleteDC(hdctar);; K$ f. \7 S- R0 G
  690.         DeleteDC(hdcsrc);
    & C8 A6 p* o' y1 L
  691.         DeleteDC(hdcorg);
      I! f! Z* Z4 ~$ ^+ Q% v& S
  692.       }
    : L6 G5 U  F( }
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    4 y' P7 {% V. Q
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");9 r, X  ?" C7 @
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");: q* w- R2 A: ?8 \7 y
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    8 U0 U" f3 g, s  n; X- c
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " \; ^) f% z# |' ^5 P( O5 s
  698.       if(!Dn.Connected())
    4 w" v6 |( ^' o
  699.       {3 x8 S) ?% f( [8 {* o
  700.         dwTotalFiles=1;
    $ V6 M6 {( c" N- ~6 y( |
  701.         dwDownLoaded=0;
    : D% O0 q# v0 l/ k& f6 P
  702.         bSilentStep=TRUE;
    * _/ }" I- q( x5 w" Q
  703.         bCompressed=FALSE;
    7 ]9 ^' }$ y1 C2 N2 J" e* e
  704.         strExtLocal.Empty();
    - s9 Z! `9 ~+ j+ {& \0 I9 ~. k. j
  705.         strFullName="readme.txt";
    7 i2 M+ k7 H0 i) n7 h& X
  706.         dwProgramState=AP_CONNECT;2 H( R5 C) u5 A. D2 q0 Q' w# Y
  707.       }9 f& c, t$ a8 m0 \$ x: @7 o
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    6 H/ J) [' g! ]/ w- A0 |
  709.       dwStartUpSteps=2;& H2 _( J  H% d8 H0 A$ p5 H1 J! E  o
  710.       break;2 ?% ^2 [3 \) F( u
  711.     case 2:
    5 s' g, l5 }7 m" t$ x1 T9 S
  712.       {
    , G6 E: B3 N5 N4 Y
  713.         int iEOF;
    9 Y+ h( k1 ~: g8 ^) L/ u0 I/ X4 m
  714.         FILE *fp;3 z" G/ p# `4 u4 m* [: l; r
  715.         char szString[512];" u( ?1 i6 Y! f4 b5 i
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    % g8 Q: J8 @2 x; f, ?# {
  717.         if(fp)
    " y  W8 L) d' o8 ], B
  718.         {
    - w3 m2 x/ n5 j4 R6 b
  719.           do
    ' h3 V* e: I  ~" @# u+ y
  720.           {" A% D) h9 W0 \+ ]# D4 h: V" W5 ~
  721.             iEOF=fscanf(fp,"%s",szString);
    : A  r1 I9 ^# O* `( L
  722.             if(strlen(szString)). ^5 c8 X' z- t' H  G, Y6 T
  723.             {
    8 [4 x8 ^0 R" O. T* z4 ?+ A
  724.               if(bFirstChar)
    2 h6 o5 Z9 Z  A& S: l* l! E/ ^3 c* E
  725.               {
    / P2 ^% U$ z' G. F3 e0 ?; P
  726.                 bFirstChar=FALSE;/ ?) v4 s- J4 M5 u" `
  727.                 bConnectIsBig5=FALSE;1 Z' O: Y8 j: t) V" s9 y/ b
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;  c( ]5 l& m4 Y; i3 \
  729.               }5 x  J' z" \6 p  w0 m  O
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ) A, {2 X1 {* w5 q3 n# z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    $ S: B) k8 q. d- B
  732.               dlg->m_ListText.AddString(szString);/ q- _& Z7 z$ O8 |" F
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 T/ r' m* G  F% R; r6 @
  734.               *szString=0;( y' b  W9 J4 p( i/ y3 A! M! \7 n0 u
  735.             }
    / ]& d1 D" P8 T& H3 G" W2 F
  736.           } while(iEOF!=EOF);" E" F- T6 |* T+ |1 \* _* m
  737.           fclose(fp);* j  }8 M0 k9 f6 U( m4 m8 p( V
  738.           unlink(".\\DownLoad\\readme.txt");( J4 }7 L% h: i
  739.           dwStartUpSteps=3;
    % ^. B5 u( r& h% S9 \
  740.         }
    ) ^1 f: u* ?+ D# W/ }9 a% S% g
  741.       }
    , A" k9 c5 i% A; z! a- p/ m
  742.       break;
    3 x0 E* \$ Z$ R- M
  743.     case 3:# z4 G  b0 d& b- t3 x3 R; e
  744.       if(!Dn.Connected())
    ' `  ]# T7 A( r1 F# h$ Z& ?  j
  745.       {; `6 `# v# B: u2 Z) E  y  [2 X% t" W
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    . ~0 r$ G3 B( z% L3 Q7 k% o0 z
  747.         dwTotalFiles=1;! g# q8 u! l3 F
  748.         dwDownLoaded=0;
    - p2 `0 o' Z1 ^/ y* H3 Q8 B
  749.         bSilentStep=TRUE;
    8 g4 }. K, L- Y# X/ l3 g: Z
  750.         bCompressed=FALSE;# K2 s% o7 a! i) C  `
  751.         strExtLocal.Empty();
    . n& l5 W+ l. K" T6 D8 U
  752.         strFullName="checkversion.txt";3 F% Y/ c- W2 I7 V) d! w6 p
  753.         dwProgramState=AP_CONNECT;+ D  j* g% u& S0 Z$ `, J3 Z: _
  754.       }
    8 V4 s( [( C# k- @, t
  755.       dwStartUpSteps=4;
    ) m& v/ h7 q9 `: B
  756.       break;
    9 V9 s' G5 T' |6 U7 n) D
  757.     case 4:
    + Y  |% g: z/ C" y
  758.       {
    & G& b; U& u& F
  759.         FILE *fp;
    5 L2 D( a" I# z
  760.         char szString1[128];4 u' P) }  Q; ~$ p8 L
  761.         char szString2[128];
    4 G# D  _) m; |% C3 _( ?  r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    + m! ~( G6 Z+ H0 ?6 U  v8 R
  763.         if(fp)& o- q9 |' G( x9 Z
  764.         {
    # y: Y+ @6 K. w
  765.           fscanf(fp,"%s",szString1);+ M' w. u. l/ E# t- ]
  766.           fclose(fp);: b, N% a1 o& W4 g1 f* \
  767.           fCheckVersion=atof(szString1);1 v, h- |5 Y1 q- P% k* K: D
  768.           fp=fopen(".\\checkversion.dat","r");) c- l5 _+ i3 j/ V
  769.           if(fp)
    5 D" f& S9 D& h0 B2 ^) P
  770.           {* U! B- ]9 o! w+ R0 b* P
  771.             fscanf(fp,"%s",szString2);
    ! Y. V( n- W% X4 t' ^+ _
  772.             fclose(fp);2 K% a8 o; t6 z
  773.             if(atof(szString1)!=atof(szString2))
    . c* Y5 s% |/ n9 @& B9 T
  774.             {8 q: X5 C) b+ S( B7 ?
  775.               if(!Dn.Connected())7 h* J+ c: p9 Q  h
  776.               {
    * L8 e1 [( _8 m5 G  J
  777.                 bFirstUpdate=TRUE;7 r8 w4 }! s3 }2 N' ]' f! `
  778.                 dwTotalFiles=1;7 i- x  j. ^3 x+ g2 s
  779.                 dwDownLoaded=0;; ]. K( b4 G; u: v+ P' [) I/ `+ V
  780.                 bSilentStep=FALSE;
    ) y& G5 I5 C, {0 z1 J: ?* H/ l1 X! q
  781.                 bCompressed=TRUE;
    , D4 S( l7 h5 d8 h1 I6 c
  782.                 strExtLocal=".\\DownLoad\";
    ! ^$ x9 U; t+ E7 P4 d, W, Y* {
  783.                 strFullName="update.txt";) E/ I$ S5 L- i3 m5 x- _
  784.                 dwProgramState=AP_CONNECT;% V/ b* p; Y2 D: L; B' F
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 W, |  Q$ l( g$ ]
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / S- W4 X5 h" {: c
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");7 f& O; a: d6 a5 ^/ I
  788. 1 U' B% P. Z  Y. N( B
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 I/ y9 a8 d* O( B( h' ^8 m
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    0 Z4 p" r* s/ a# p, Z
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' f) ]. h0 _: |0 R, Z& t
  792.                 {8 e  y1 O- N5 H" Q
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    2 y* J. E; b( `  [4 g
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ! L2 C7 ^: ^" ]1 r! e, e  T
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");$ s: u: v/ d0 `0 f& R
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # E: A9 \2 ~) n5 s' X

  797. 7 c/ k" |, G& x2 g0 T: r$ h
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");0 Q3 l- A6 @: j3 g0 e" \
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 W1 J6 y! c+ A& a3 p. V! g, I
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    9 q8 C0 h1 F" u8 @2 y0 k* ?$ x6 V
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) {- u' t/ w4 {$ {$ R5 o5 {4 J
  802.                 }
    * Y! |! O, \" v# L
  803.                 dwStartUpSteps=5;
    ! t( J( i' E/ P$ P# Z3 h8 P
  804.               }. _0 r/ G% Z3 U$ |9 q/ ]) H' J
  805.             }9 b5 R$ J* U2 n+ G* T
  806.             else
    % Q  t4 _3 I( N& g9 k& b
  807.             {
    & U) ~. p7 O) Z: ~# `8 z# c5 H
  808.               unlink(".\\DownLoad\\checkversion.txt");
    & e" _9 i- r1 ]! v& S. O% W
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! E7 a& F, \% l7 a
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 x' F1 g; o# ~! k" w3 N
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    , h( F8 U2 ~( j# ~. n8 N
  812. 3 ]$ Q+ r; a' [8 ]$ V
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% \+ G3 K! N/ o5 a  d5 a8 S
  814.               dwStartUpSteps=99;1 I7 K7 \8 I2 @* K4 I
  815.               bFinishUpdated=TRUE;
    9 u- @- \' Q2 `6 C
  816.               bCanUpdate=TRUE;  M8 s! ~% h6 e* F& @3 r) F
  817.             }
    0 t8 v7 t- y  ?) F( E& h
  818.           }
    2 x0 s8 p& D8 ]) u
  819.           else& z: K( u" }. e8 X' Q0 Y
  820.           {) a. v" ?* B. k0 B" D: J# N: v
  821.             if(!Dn.Connected())6 E. g" I6 i5 y. U5 m
  822.             {& g# H6 x0 y1 b) I( v0 J0 h; K* d
  823.               bFirstUpdate=TRUE;
    # g3 n: J0 ~" R0 Z5 L. A, m
  824.               dwTotalFiles=1;& ~/ O% v$ W& Q4 o0 e2 B+ g
  825.               dwDownLoaded=0;. C3 R1 }4 y/ D/ I  \6 r, X4 f7 D
  826.               bSilentStep=FALSE;
    & R. b7 G0 g) d; ^
  827.               bCompressed=TRUE;, k8 s  ~3 e; Y' y; e" ]  U% r
  828.               strExtLocal=".\\DownLoad\";
    0 e' `6 f" g" H
  829.               strFullName="update.txt";
    6 {( f+ p8 c6 ^5 K
  830.               dwProgramState=AP_CONNECT;
    6 u  c/ f  i; v- ~0 m: u3 n9 ?
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" P9 X' m' p" u! f3 v8 p) m. H+ j
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    # x% o3 q* M6 ?9 m
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ( _/ F5 N- H9 l/ K
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & h. R. j( W- A+ W# i
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ; z0 P; G* v5 n$ s3 u( @5 v
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ) M6 P# p8 [$ a* b& \
  837.               {; _' C' [/ I: v# G  g$ A9 s
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ) X+ C1 ?5 R1 {
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");% q! ^) V  t: {2 h3 |0 n
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    . f6 W( |1 h( N4 W- U
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ v6 y$ Y0 c4 f5 {- `8 d& P
  842.                
    2 b- Z! [% g8 D' c  ~8 s3 U0 f/ w
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % f. O/ `5 C) q! g! n
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  g, f+ X" r& ~) ^
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ! h1 D, f* n6 M* F# {& K
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 `# E) s2 I( W/ ?% K& a
  847.               }; f) U: r( N# O& ?7 R, `, R! C
  848.               dwStartUpSteps=5;# }% k8 h2 o% C+ W; m- D
  849.             }
    6 l: g) M' A6 b: c
  850.           }
    . T' p+ z* G3 _( }
  851.         }  F* X" |& f' ~, ?% j. I
  852.         else1 ]* A8 G6 \; |% G
  853.         {$ X( E% h5 E+ Y( a- }* ~
  854.           dwStartUpSteps=3;& Q/ ~* ?/ B  U2 i, ]3 Q" \
  855.         }
    8 {$ I3 j8 p4 \  J
  856.       }& w2 B- e/ t9 Z/ B! A
  857.       break;
    - L* Q2 v& K2 f9 d; b7 Q: o
  858.     case 5:; [" L. _3 e7 B* _$ A  X) }
  859.       {, b1 p- |) y3 O6 C% m
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)9 u9 p' k- u5 e; u+ P9 v
  861.         {
    " Y; W+ Q  H1 o& Z- x9 p
  862.           int opt_overwrite=1;
    1 o+ z; p# E# b! ^6 A7 Q
  863.           int opt_do_extract_withoutpath=0;
    & l, Q  y2 B, K2 \1 P3 P
  864.           unzFile uf=NULL;1 u2 J# h+ s4 |! x
  865. - I$ a" ^+ k4 w  E. ]' N: J+ N
  866.           uf=unzOpen("Wsa.zip");1 ]; T* v( a' S$ Y. B8 r, @
  867.           if(uf)9 |7 S0 o( R/ f5 {: S2 ?8 R2 @
  868.           {; ]  g; D- x3 I
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);. M5 f. m8 ~* U) A7 p
  870.             unzClose(uf);
    1 s( x: h% V+ [  h3 G
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");9 _# B4 a% B7 a' [8 P
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");7 P2 k7 ?! W( t9 O
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");$ s& Z4 P, D; i- F/ ]+ i# G$ p; @( ^
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 ], N$ ]5 l# J5 O$ R# Y( A
  875.           }
    3 p8 E; T6 w! B3 J
  876.           DeleteFile("Wsa.zip" );
    1 K2 R6 A( c9 A/ o, E1 ^
  877.         }
    . j0 a- n) S$ j( i9 h

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部