找回密碼
 立即注册

CSUpdate.exe源代码

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

& M: W# Z9 L" W& g6 [0 K1 P* h
  1. / RevApp.cpp : Defines the class behaviors for the application.! `, T0 r6 L, }+ L' q7 w  Y& f) m/ T
  2. //
    / N1 H* q" u, [7 W

  3. - S9 l' B) @5 e& \9 T
  4. #include "stdafx.h"
    9 V3 T6 d7 v8 u. b1 G
  5. , @5 [$ _  y' E: X
  6. //#define UNICODE  ~3 \" }* P+ m0 Y& @1 y2 ^) M4 S
  7. //#include <gdiplus.h>
    ) l7 y- s4 f* X4 `9 A
  8. //using namespace Gdiplus;" r7 r& K5 b4 g) S9 k! b, Q, ?/ m
  9. % \5 J+ }% P4 K/ U
  10. #include "RevApp.h"
    ; T& k- [" ]4 Y. q9 o- M
  11. #include "RevAppDlg.h"% P8 ?/ k4 ]& O
  12. 0 G; K" I( b& g" [  L
  13. #pragma warning(disable:4786)
    2 J- S* C: b0 c* b: [
  14. #include <map>
    ) R( O5 O9 \5 p0 u  \- z" I
  15. #include <list>
    & e) T) ^4 R9 l* N2 Z: k# ]
  16. #include <direct.h>
    / S+ V7 ^5 e6 s( H; {! k  i
  17. 3 A0 s7 [5 x' }
  18. #ifdef _DEBUG
    & C+ b5 }. r# |; j/ Z" H) u
  19. #define new DEBUG_NEW/ U. R  w2 Z1 I0 i& H$ y5 `
  20. #undef THIS_FILE( {# P4 G# W( j0 H
  21. static char THIS_FILE[] = __FILE__;% N- v; Z) n: ~/ @7 K
  22. #endif
    ' e9 S9 o: B8 }0 |# T5 E9 G1 o
  23. #include "SkinResDef.h"( C% V  g* ]2 D
  24. #include "ChangeBG.h"
    * [& r+ q4 N' k6 P& ?
  25. #include "AFXINET.H"/ W+ |/ U& B, ~$ h1 A, E

  26. 4 d/ [3 h3 ?# \* t
  27. #define TRADITIONAL_CHINESE 0
    8 u. J+ M" }0 L) A+ V
  28. #define SIMPLIFY_CHINESE 1
      q! P- X6 @8 I) N/ K
  29. #define ENGLISH 2, n( q# W4 K: A3 F& h2 C
  30. int m_iLanguage = ENGLISH;( D: N( b7 s: ~$ H! z# h4 A! S
  31. /////////////////////////////////////////////////////////////////////////////
    ) J; g7 }' t; \/ p# U
  32. // CRevAppApp/ A1 X3 s! {7 E7 B

  33. & h% }; \! a+ P/ K/ p( P! A
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    1 `: j$ q1 g  ~5 s& G& M
  35.         //{{AFX_MSG_MAP(CRevAppApp); v4 G* d' c, d: @2 q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
      ?, m2 `. M: a; k% V6 E
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    " q. Z% w3 }: ?
  38.         //}}AFX_MSG: t* h* q  c8 g4 ]
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    : Y; U8 k( w* H, l
  40. END_MESSAGE_MAP()
      `# W) q' E: f: d) ^
  41. 3 D! V6 }' b4 T
  42. /////////////////////////////////////////////////////////////////////////////2 P5 a$ V$ Z; U" V/ E; o
  43. // CRevAppApp construction3 _/ r7 U0 {" B! r/ V+ d4 C, I  f

  44. ) x7 D% M  u) e5 B
  45. CRevAppApp::CRevAppApp()/ c) g( Y6 k4 B1 ]* J) v* c
  46. {
    2 {) j# \. U! v# G5 \
  47.         // TODO: add construction code here,
    # g. A: v4 A* E8 _' X: d; y
  48.         // Place all significant initialization in InitInstance
    - w$ r) {! p0 Y+ _
  49.   bDisplayIsBig5=FALSE;, b& n! z( A# E' o
  50.   bRestartUpdater=FALSE;
    / w1 ^7 \$ N8 }. {' V
  51.   bFinishUpdated=FALSE;
    9 |+ J# k- M9 P1 U, t/ X
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    + |) s8 Y3 I/ q+ u3 H. ]8 H
  53.   InitChangeDataBig52GBKS();
    - [$ a: a# ]) [1 D6 h) I
  54.   InitChangeDataGBKS2Big5();. H; F( ?% j' u# a
  55.         //2 Z( I- X2 [  E( Y5 o
  56.         bClickRunExe = FALSE;
    + p0 {6 g$ D0 ?5 ]" |
  57.         //
    3 T; ]8 h2 C) {3 o3 u
  58. }
    & k- s, S2 d+ b7 _8 ^) t

  59. 0 L+ a5 o) r9 j# f& b
  60. CRevAppApp::~CRevAppApp()/ E9 q7 ~, o9 H4 {' k! x7 W
  61. {" l9 m1 w- `: u8 Q4 ?
  62.         // TODO: add construction code here,! `* b4 \0 A5 v/ ^
  63.         // Place all significant initialization in InitInstance# k4 ]2 O& A/ s
  64.   EndChangeData();' d$ y" B! R1 i2 }  H. l7 Z# i
  65. }
    ; @6 ^* ^+ o4 m% y7 l
  66. % O; B) }/ M( y3 p
  67. /////////////////////////////////////////////////////////////////////////////2 X* H( t( u3 e1 s
  68. // The one and only CRevAppApp object6 r, ]0 z1 e) t1 |" y: R3 H
  69.   T  B/ ]% f0 h  R; K5 `1 A
  70. CRevAppApp theApp;5 R1 [3 o4 h# a! F/ J0 A8 g$ X

  71. 6 P" Y& `" o# Q4 s2 S
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    4 q' k  B* K9 q
  73. {
    1 s: {% I3 Z2 n5 A" a& K+ r
  74.   int iEOF=0;
    ( b, H' J; i( Z4 b. |1 ?
  75.   char szTempName[MAX_PATH];8 R1 W3 i% G# y; M# g
  76.   *szFileName=0;
    ) R  d  q" E) G4 o
  77.   iEOF=fscanf(fp,"%s",szTempName);5 i' Q9 q  L* K1 X. h
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    0 N; b, c7 x/ S, Z1 s$ l/ l
  79.   {
    & a3 V$ W- b+ M  L+ P% w4 H
  80.     strcpy(szFileName,&szTempName[1]);/ w! L. U* z6 h( C0 S$ K' X! W
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ! j$ r7 b( h+ L& E8 r7 a+ H
  82.     {  k4 X% @. R+ T2 v
  83.       iEOF=fscanf(fp,"%s",szTempName);
    - q* R) D6 W1 R1 @! a
  84.       strcat(szFileName," ");( U, L/ q$ Z/ x  z2 Y, \
  85.       strcat(szFileName,szTempName);; Y* S& H. s; v+ U% U& O; D4 _1 k
  86.     }8 k' H% p' T& Y
  87.     if(strlen(szFileName)>=1)
    ( A, w6 Z3 ]' \* s
  88.     {
    5 n- K5 X+ V! A. H* M
  89.       szFileName[strlen(szFileName)-1]=0;
    ! X6 P% L) E/ o4 y7 `! `
  90.     }/ x: s. c) U9 k, }
  91.   }
    3 d6 A" o7 E7 D; J, S( E2 X
  92.   return szFileName;& s4 d2 ]+ J  r: X
  93. }
    % ~) P/ j' H7 g) ^& W
  94. ( e! c  J4 v2 {
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    / ^5 h& p0 r9 P* w& \
  96. {0 v) X) S2 Y- u: E+ E9 `- i
  97.   FILE *fp;& r2 s$ i% R9 ^4 g3 g; ]# x' E; u
  98.   char *key=NULL;! l! Z4 u& \& s8 e  y
  99.   char version[MAX_PATH];
    0 e$ c2 f7 Q2 H  m- G
  100.   LPUPDATEFILE file,olds;8 S3 h9 O2 j+ F" Z1 G# o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;2 Z- X8 E+ x; ?, A7 l5 F$ m% `
  102. 6 o3 E4 K1 t8 v) b1 n
  103.   UpdateList.clear();
    & b9 M5 _9 P* Z
  104.   UpdateFile.clear();  l1 b9 l3 v! A# s
  105.   if(GetFileAttributes(filename)==-1) return false;
    , g7 l3 A! o2 J8 X
  106.   if(!(fp=fopen(filename,"r"))) return false;- e0 [, U% s3 X6 [- x$ Q& q4 n# N
  107.   fscanf(fp,"%s",version);! n7 X& l$ Y- I6 y9 b# r
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ; {3 e& i" _( O& C
  109.   while(fscanf(fp,"%s",version)!=EOF)3 b8 a6 Q$ |: ]
  110.   {2 B; {1 P4 }! W; I' d$ K( h
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 R$ B' f$ h. f
  112.     fscanf(fp,"%s",file->path);
    & f6 f0 r' K  r4 C2 W6 J( I
  113.     ReadFileNames(fp,file->file);
    + P- o. k3 F' Y* R- R
  114.     strcpy(file->full,".");9 X8 B( P8 a% N/ e3 u
  115.     strcat(file->full,file->path);3 N6 d; B, ?( g- Y  ^( y3 v$ B# i
  116.     strcat(file->full,file->file);. A8 r8 H( ~2 g. t9 U3 y! D
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    4 m) @* O& @" g0 y( X' D' H
  118.     {
    : Y; s6 t$ ^% ?1 ^/ A5 q! i
  119.       file->vers=(float)atof(version);
    ; O1 ]7 e# z1 s4 i: `; L
  120.       UpdateList.push_back(file->full);1 l  b+ d  H8 e
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));' D- e" u- G4 h  }/ J) \
  122.     }
    + e1 a3 J, [* O
  123.     else( {9 S7 K: ~& F5 t1 m8 x3 q
  124.     {
    * n$ O5 q/ Z0 B$ u9 s6 q  }
  125.       olds=(*p).second;
    5 P; }. F2 E% B) ?. {* `
  126.       if(olds->vers<(float)atof(version))6 n  V+ K. M& W1 i- Q) u7 R
  127.       {
    : s( x. [6 @. j
  128.         olds->vers=(float)atof(version);8 v# I( |! c" `% U. ^9 w7 q5 F% v
  129.       }0 H! q& O0 p  ^
  130.       free(file);
    4 T2 P: D5 C( @9 v1 \1 ]: O
  131.     }& J: x/ B* z) L2 `. u$ R1 J+ L
  132.   }
    1 G& X" a% ^- ?. o
  133.   fclose(fp);
    , H) L2 v. V( g  m7 b
  134.   return true;# O, \9 M/ C# q; ~3 b
  135. }
      t( D& C( t* |1 g5 I3 t1 d
  136. ' _# A! n4 i! j# Y9 d( Q
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)0 T1 V3 |$ w; i; i& Y7 q! q
  138. {
      }8 ]( U! N3 m
  139.   TCHAR  szFull[MAX_PATH];
    7 z0 D: N1 d) H% }- i, E
  140.   TCHAR *token,*inter;
    6 Q9 j; s# L1 s) p9 B7 @+ }0 y
  141.   *szPath=0;
    - S& b) m$ @9 c9 J$ c2 j! U5 p+ O
  142.   strcpy(szFull,szFullPath);
    # W+ H3 ^% ]3 P6 ?2 B
  143.   token=strtok(szFull,"\\/");
    ' _; G- T; K5 o  ~* N' X! L
  144.   inter=token;
    8 ]0 Q- N" n0 ^4 h1 g1 V- U- b
  145.   while(token=strtok(NULL,"\\/"))
    ; k+ Z% S$ y* R9 {8 C* h: E$ A8 i/ v
  146.   {
    # X% m/ _& ^6 @5 P+ f
  147.     strcat(szPath,inter);8 K1 n6 x% ~( r* T& G
  148.     strcat(szPath,"\");" s) H3 o) {) O5 o- m
  149.     inter=token;+ U, |/ x( L* w) \
  150.   }
    ! ^- j% h8 m7 [' [( U, X9 _
  151.   return strlen(szPath);* m2 [: M# _. j2 [" [$ z
  152. }0 H  i. ]" O4 |) L

  153. 6 X  \8 X8 D& f& k+ _. M. Y+ \
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)% Z! f) v2 h$ S$ v4 q' e' r
  155. {6 b( e* P5 I3 a1 o
  156.   DWORD attrib=GetFileAttributes(Target);
    8 k% C. w' j' Q6 i' I" [
  157.   if(attrib!=-1)
    / o! V  g4 P+ V- L
  158.   {
      b7 \/ m/ S2 |4 Q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))* Y5 l& N( ^3 }) l7 Q5 o5 z9 Q+ ~2 b
  160.     {
    4 _' z% h& o$ d& ~( b3 w
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);) p6 {- J9 q1 Z! l
  162.       SetFileAttributes(Target,attrib);
    6 I0 x$ L+ o) R- f
  163.     }
    , w9 ?: r$ q+ g
  164.   }
    ! l, b7 o2 q. O
  165.   CopyFile(Source,Target,Erase);
    4 o; }% k! w9 Z% c# T3 t; @/ P
  166. }1 {' t* s1 q2 W1 A  _2 C

  167. , I; Q5 X; \! @. C/ y) {
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)0 n; B1 m' l' a9 i1 \: e
  169. {7 q$ C1 U+ x: x7 @! c
  170.      FILE *fp;4 U6 N. M1 K3 F- q1 Y
  171.      char  szBuffer[8192];
    6 [$ H- \+ k+ ~4 O
  172.   va_list  argptr;. O# V/ B6 N; p2 _/ L) ]8 _6 l% F
  173. * p0 r4 }% |8 g8 S
  174.         va_start(argptr,message);
    9 N3 d/ \/ ~$ n9 b3 r% t
  175.         vsprintf(szBuffer,message,argptr);
    # L' Z+ u  m9 E! t6 g  d
  176.         va_end(argptr);4 x3 o/ @8 y5 C; C" t% Q) o
  177.   fp=fopen(FileName,"a");
    # [# v! K  L0 \% z
  178.   if(fp)
    ! V" c4 W" i! Q: y2 ~+ }
  179.   {, O( `* {2 D& O: }7 a& ]  R: O
  180.     fprintf(fp,szBuffer);  z* T% S. a: c  M% v3 _
  181.     fclose(fp);
    4 I) [) o1 l+ u+ q" L( E
  182.           _flushall();
    " n" V4 b8 d9 A2 O$ L
  183.   }# t4 `  M* l" T% {3 o9 Y! a2 U: \+ B
  184. }" J) ?! b# X, J
  185. * @' t, y6 H. k, }: @. h
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ( m9 u3 I: x0 S# x% m# [! `
  187. {
    # X6 y6 |" \5 O) f% @: @$ p8 q
  188.      FILE *fp;
    8 f7 i; i( Q+ H7 B0 [- ]$ z9 t
  189.     DWORD  attrib;
    / S. a, y# I' ?
  190.   attrib=GetFileAttributes(FileName);2 Z' C, G) D3 j- A5 z5 x$ K% I
  191.   if(attrib!=-1)
    8 @" Z8 {2 d' _4 y* w
  192.   {  V3 s- H: T& ^3 e2 ?
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);" S, H: _1 h& U  d. W; k$ p
  194.     if(!SetFileAttributes(FileName,attrib))  O3 v% r. ~9 x/ @3 o! r+ d
  195.     {
    " I- ^8 x5 }0 ?2 L5 f& k9 |
  196.       return FALSE;
    : p! t" @& n' H' T
  197.     }
    ) M  x5 z$ w/ ~; }' p5 V8 h
  198.   }
    8 }. D* z: Y+ `" C- b+ c3 s" ^9 n
  199.   fp=fopen(FileName,"wb");
    ; \5 I4 b: t$ w: ~3 Q+ q
  200.   if(fp)
    - X) \3 x5 i, y  a
  201.   {
    ( I- S% Z2 z' Q5 ?( B
  202.     fclose(fp);
    : N9 V8 f1 {" y3 `, E2 G
  203.   }) J( f/ ^& z# y
  204.   return TRUE;
    # v5 P! i$ Q+ o
  205. }) U3 f' @5 t) t: O' u3 f: F8 i
  206. * y/ W; S& U$ i. A
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    " X/ D! N: U$ j+ t/ S, k, l" h
  208. {7 h: j) C+ Y+ Q# C) [
  209.   char filename[MAX_PATH];
    ) y. Y2 b" O- G0 T8 j
  210.   LPUPDATEFILE file,olds;% d; K7 o1 s5 s# ~
  211.   std::map<int,CString>::iterator i;
      U) m) Z$ a/ w; b
  212.   std::map<CString,LPUPDATEFILE>::iterator p;: b! [. v& r" q( g
  213.   std::list<CString>::iterator l;* r+ q8 }0 u& w) K

  214. ; Q* e% ~; n6 _6 _; T6 o/ j
  215.   if(bFirstUpdate)
    ; W" i' V9 U, ]" N# |$ T4 N. ^
  216.   {
    2 @( v7 x! L5 d* b6 M0 @" z: `
  217.     dwCurrFile=0;$ H! y2 o6 h1 l* d' j8 a: Z
  218.     bFirstUpdate=FALSE;
    0 M. k. z' X! M9 U" C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())' D" B2 I' {( S2 d
  220.     {
    / o( N* O7 t$ o0 z: c
  221.       dwTotalFiles=UpdateLocal.size();
    5 n& ~+ V) C, {
  222.       dwDownLoaded=0;$ U) A- Y) e$ J. h: U
  223.       bSilentStep=FALSE;6 g) i6 o4 U  g
  224.       bCompressed=TRUE;
    ) S5 C' y/ T2 |- ~6 b
  225.       strExtLocal.Empty();
    ( v8 G+ ^2 p9 `. n
  226.       strFullName=(*i).second;$ E6 O2 ?' `1 H4 H
  227.       dwProgramState=AP_CONNECT;
    3 ~: E) M/ S" C/ h1 ?( Z
  228.       return TRUE;
    % Y9 c0 h/ Z8 E+ j. i
  229.     }, F  A8 q" S+ _, o( P/ B7 ]! h- \
  230.   }" h; B7 N" Y  U
  231.   else if(bRestartUpdater==FALSE)8 Q+ m! s+ E4 ?7 {0 w
  232.   {
    : n0 y# i& r. z% Z* e; `: m# L! X
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    7 q* e% _0 _3 D5 \1 M0 x* P
  234.     {
    : V. V/ o* r4 S
  235.       file=(*p).second;1 L" z/ n1 A, z6 V! D: a$ V' l, |
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    % `% r$ x! k% p+ g) Y
  237.       {
    # p0 y" R! `' Y* R1 T  ^+ I, J" e
  238.         olds=(*p).second;
    $ F' M' w- g' H  \: O, @- I) P3 X/ v
  239.         olds->vers=file->vers;
    . c4 p; L' f8 ?7 {1 k3 |5 v9 P
  240.       }! ?3 E5 B) d9 m/ j% ]
  241.       else
    3 d/ q" E$ i8 y7 h/ z8 W) j
  242.       {
    5 r) K( X' m+ ~. f* C9 l
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' f9 a5 B- \5 I* y- _. l0 ?9 ?3 h* T
  244.         memcpy(olds,file,sizeof(UPDATEFILE));' Y  K* Z- x' ?) p6 l2 O" `
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ; b2 M, z, U3 `. ]# h
  246.       }
    1 }: m* z7 o* c, l: T
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    % J( b  d8 C6 }/ r
  248.       sprintf(filename,"(%s)",file->file);# v' y9 n  [/ c, k9 g
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 Q: P- G4 f; {, q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    : c0 j3 C; S% `* z
  251.     }7 c5 V& T% j8 Q. J( x2 {) @
  252.     dwCurrFile++;
    5 a1 x: y; @! t; ?5 n6 Z0 u( T" I
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . o( g3 j4 Y. c
  254.     {8 ~: B; b$ @% ]9 ]+ i& Y
  255.       bSilentStep=FALSE;5 [! C5 {' Q& k3 ]6 c8 C" P
  256.       bCompressed=TRUE;
    2 v8 U1 e0 R7 z' H3 m
  257.       strExtLocal.Empty();- a* s, Q1 Y! A1 S
  258.       strFullName=(*i).second;
    6 q. ?* N( F9 I5 N" k4 m- D! L
  259.       dwProgramState=AP_CONNECT;
    4 L% m" v0 D4 b. [; P. |
  260.       return TRUE;
    ! M* Y. b  d7 D
  261.     }
    ' l+ B- t8 X7 c3 @' M7 w* F! A
  262.     if(!bRestartUpdater)& |) K8 n3 k: u& G/ c) s
  263.     {
    + R4 C8 F% k. e' }- ^% q
  264.       int iCurrSize,iFileSize;
    . ?& I. S* S$ y- o5 \( m! C' g: M
  265.       iCurrSize=0;  f2 {( T3 V0 ~
  266.       iFileSize=UpdateList2.size();/ a- E  Y9 T; @; L" @6 p( o1 H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % y* |- K! L4 @4 q2 w8 y+ F
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");6 O4 M8 w, m- a8 q8 i! c+ R
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");* \6 A, a7 X% m6 [0 E9 `
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - e* ]4 n( ]" p2 r( }
  271.       Fclearf(".\\update.dat");
    3 f5 U" q$ f5 [2 g8 b$ r1 ]/ J& J
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    - u9 }9 M! a: W$ X
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 Y/ t# W; c" {& v: x2 `
  274.       {
    " x# P" f$ w  e( f. i& R; N, R& X
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    1 B. j0 U5 E$ E- ]& {* X
  276.         {$ s$ l  `. [& O! b9 V9 E
  277.           file=(*p).second;
    + G9 n5 j. ^, ~+ M, ~. s
  278.           sprintf(filename,"(%s)",file->file);
    ' M2 W7 C" g/ Z3 c
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) Y* m! U/ S+ B% t+ D6 a* Z9 j, b
  280.           iCurrSize++;
    & a0 C6 h4 D$ i. V  C
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    : w2 W) f0 h( A# Y. n3 U) t
  282.         }
    4 W9 k+ ?. v6 c
  283.       }' o+ w% {6 Z% U5 }9 r! V
  284.       unlink(".\\update.txt");
      s- o2 u+ E) M" R- J8 J( ]7 _6 |8 r* B
  285.       unlink(".\\update.tmp");* R- b; f) H7 [7 l5 I1 X5 {+ _' |
  286.       Fclearf(".\\checkversion.dat");
      T- r! G% ?3 H: s# B# J% n- ~% q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ) a7 x' m% p3 A5 ]* t+ A  @6 M
  288.       if(UpdateLocal.size())% s% V1 a& Z8 O1 A/ E" {
  289.       {- l8 |4 E7 H! W' l2 d8 s
  290.         UpdateLocal.clear();
    1 h. X& Y$ L9 t
  291.       }
    9 \, b& F* V' [
  292.       if(UpdateFile3.size())! C7 q7 r+ D4 V
  293.       {/ W% t" M1 b9 Z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 h) g+ w6 _) }6 j
  295.         {4 M- s: b- q, ?! a1 \8 n3 c
  296.           file=(*p).second;) j0 `) K& u7 w
  297.           free(file);
    $ K' _+ M( t( t
  298.         }
    1 s9 f* s& s. Q
  299.         UpdateFile3.clear();' o- h$ P9 ^* d3 F* V" W% C. a
  300.         UpdateList3.clear();$ L4 x$ N4 ^2 n. ?) y, Q( j; i
  301.       }
    ; v7 |; l; f/ d+ r
  302.       if(UpdateFile2.size())
    6 N4 P$ N3 D% o  |6 k: s3 C) E
  303.       {
    , q, c4 z" E/ w( D1 z
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' G+ R1 f6 [- ~( ~8 d$ g0 G2 ~9 d
  305.         {: e# L: x6 R0 C: i% E
  306.           file=(*p).second;4 a; P8 P' ^0 L% |0 p- F. U
  307.           free(file);1 n9 f: B% q+ B0 b& w# U9 b+ h  S
  308.         }$ C/ L) o# @5 u: E- m6 c( Y
  309.         UpdateFile2.clear();+ g+ h" F0 d( G) z" N/ l8 e
  310.         UpdateList2.clear();
    ) I' E+ n8 P0 w8 \! B3 R/ F' A) u; v
  311.       }
      w( M. p/ C4 Y/ D6 C2 c- v( i
  312.       if(UpdateFile1.size())- S4 {8 L: h. M1 g3 d
  313.       {, u# T4 o4 b/ v1 H" k
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ \9 y( I6 R# I& k
  315.         {
    " d' e1 r3 J( M' k/ o* g# S; i
  316.           file=(*p).second;
    % I1 s& r$ g& H! r/ E. h, ?! s
  317.           free(file);
    1 _$ o1 U: ]/ g1 t3 ^; f$ `
  318.         }
    - m+ Y3 _/ L( {2 e& Q" z
  319.         UpdateFile1.clear();
    - f7 z' _: m5 h& i  Z- S% ?  \0 \
  320.         UpdateList1.clear();. G6 z9 V8 U$ p. G: w% a" W
  321.       }
    , s7 d3 X( p6 }# l2 D$ u* N
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; }6 |, i, d, d4 t, _7 w; n# s/ L1 {
  323.     }
    : v: P# j0 V# k$ X; I- r
  324.   }
    4 i1 A8 |: N. T, o9 G
  325.   return FALSE;
    1 \8 _  j1 [+ n% w. y" @
  326. }/ O9 y: {3 @+ s  c) x+ Z

  327. 2 d5 e% H5 D: M/ S5 R' v
  328. void CRevAppApp::ClearAll(void)
    4 w. d3 S- A7 A( C% P
  329. {
    ( Z5 K5 W+ }; c, c2 I) ]6 m
  330.   LPUPDATEFILE file;' c$ ?; l2 J, l+ k5 Q5 T% R
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 S. V, ^8 x8 b3 ]& Q
  332. 0 t) |3 O# o3 c3 D+ i
  333.   if(UpdateLocal.size())
    % x% r! E6 H, ]1 _9 d5 l" Z
  334.   {
    % O- e( E2 b& w+ F; u* [7 I
  335.     UpdateLocal.clear();
    8 c  l: G: ~3 H; y/ S+ W' A
  336.   }  w! r# e1 \* f9 X1 M
  337.   if(UpdateFile3.size())
    9 U3 N1 s  S( e+ L0 V
  338.   {$ Q0 Z2 H; ~7 L" K$ k* ~& X
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ p  C2 T* F  q: K0 T( D
  340.     {6 C% Y8 M, [: d0 ]$ ]! t7 h; @, i
  341.       file=(*p).second;
    " e( Z; a: Q7 T8 R$ o) E6 J' W
  342.       free(file);& ~* r! e3 q" C+ y# x# a
  343.     }
    6 `- S' O0 l& C$ J+ l* f
  344.     UpdateFile3.clear();
    & ^5 ]8 T: p* |/ u0 O
  345.     UpdateList3.clear();
    0 o( [! j4 \$ o, [' w
  346.   }
    5 h& x  n8 I# k1 C4 ]! H
  347.   if(UpdateFile2.size())
    + E* ^  Q* x4 b: O. N
  348.   {0 q- i* J4 _4 g4 g+ N9 k4 e
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ C; H; j6 e8 W- Q4 w" c" H
  350.     {
      _. K+ f3 e% E, w  K, z
  351.       file=(*p).second;9 x% g' P. y0 w& o2 ?5 `6 t
  352.       free(file);& k+ _& y* g+ R4 [8 L: C
  353.     }, Q3 d$ r0 c, r2 {2 D" z8 o- V6 h/ v
  354.     UpdateFile2.clear();
    $ p3 ?, X) Z$ B& h" I3 l0 Q
  355.     UpdateList2.clear();
    ( T" g; L* M3 E" K% Z1 h" o
  356.   }" O0 }% s0 C: z3 z
  357.   if(UpdateFile1.size())
    0 `( ]1 Z2 _* o" I7 r
  358.   {
    6 O4 Y2 a8 E9 T2 B8 x
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& f# j) H) y" D8 y/ Q: T! x
  360.     {
    % W7 X$ S. L' n; @- V
  361.       file=(*p).second;
    / ]& }( i' e8 i0 E+ Y
  362.       free(file);/ v% C+ Q* Y. _
  363.     }
    ; _+ W  t* g" A! b- l2 K* q$ ]& r
  364.     UpdateFile1.clear();4 n$ k' ~  I* O/ I/ F8 Z# s) d
  365.     UpdateList1.clear();! E' H. @: g" g/ b% x- a* B9 N& L2 K
  366.   }
    ; R. W6 l& ]: @% V% n6 g& j: w0 V5 s
  367. }  
    $ K, p% N. F8 z% u' }' \. v7 [
  368.   
    . y! T# P3 W, g9 i" c
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    4 ~3 m/ b$ f. d4 g" P9 x
  370. {
      I. x5 B4 P5 \9 X7 Z1 I. ]
  371.   int c;
    * d. j& \7 N) t
  372.   LPUPDATEFILE file1,file2;. q( H  d" x" h
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    # J; Q" K! a/ y% z
  374.   std::list<CString>::iterator l;. T( d- Y- q9 |
  375. $ L+ F6 V+ @7 W# A0 f
  376.   UpdateLocal.clear();- r" t* r0 x; t8 v
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);; L" d  l2 e1 R: T
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);4 Q- I4 V$ z3 L. Q% A/ Z% \
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);+ {! i; `' n8 a6 u* Y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 v; _( [  t# y' X9 N  c. @
  381.   if(UpdateFile3.size())
    2 K; }8 h( l* g  s8 ~9 }5 N
  382.   {+ n% [" C! `% a" `. E% K
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    : K8 T* `- I( A0 O/ j& L
  384.     {
    ' T. ~$ p8 [" S) X& O; b1 Q
  385.       file2=(LPUPDATEFILE)(*i).second;
    5 |2 z4 b) L9 @4 E- D
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 s! T4 V3 W  C( R
  387.       {
    # `; m# X% Q/ i
  388.         file1=(LPUPDATEFILE)(*p).second;
    4 \$ J, ~3 }8 g9 D6 R
  389.         file1->vers=file2->vers;/ q7 P$ }( }2 O; A
  390.       }# b% ~5 @% K% \* D( |2 s9 l$ a. \
  391.       else
    ! e2 e; P3 O# W3 _' T$ I) S( q
  392.       {& T5 i0 {9 F+ p1 s
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) _" y( H2 }) @9 O% m! Y3 e: b
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));' m7 w$ B- `; n, Y& ~9 w! M7 o
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    " ]6 D4 U9 {% D% e
  396.       }3 B& z3 d. H5 R- ^6 j  Z  d. f
  397.     }
    ( |1 V. X- E5 [2 F
  398.   }: z8 I8 ^7 Z" j. h
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # B. `1 F9 Q' }; t: k: E9 ]
  400.   {
    9 O; d5 ~* e* ~/ j' M% ~
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())% \9 x) L/ E2 S7 r0 K
  402.     {
    ! Z0 j' s8 u( K" g) `! \
  403.       file2=(LPUPDATEFILE)(*i).second;
    , X) A% [% G+ }& b6 V' G6 O1 D
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! g% G6 w" K4 R  ?" @
  405.       {
    ' g2 T5 ], c% w8 ^, P9 T
  406.         file1=(LPUPDATEFILE)(*p).second;3 ]  K7 v( R# ]$ `' `
  407.         if(file1->vers!=file2->vers)5 D. `: H. x4 m' T; w6 W
  408.         {2 t2 [. G) V  M0 H  J5 u- k$ |5 f* s- n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" x. z( W# Q3 B: ^
  410.           c++;
    1 j, u3 O4 K0 w% n: k5 r
  411.         }
    ' c* X4 q8 p8 Z9 y
  412.       }5 A  `3 u* b' S8 W1 I; C
  413.       else
    # ?+ Z$ M  j$ j$ ^6 \3 C) z
  414.       {
    8 d8 f& K5 B- b4 y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 q$ }# ^* o! U) Y" q
  416.         c++;
    % r5 i$ A. h9 o. t% J
  417.       }
    8 S7 g& m8 L* `7 z2 ~# @6 d( f' `
  418.     }* E, A) e1 T9 @/ |. a
  419.   }% b$ g6 j' h- m" J4 K: s
  420.   unlink(".\\DownLoad\\update.txt");2 w. S1 G- _- X1 W
  421.   if(UpdateLocal.size()) return TRUE;
    1 O9 c3 |; Q* G
  422.   else                   return FALSE;
    & T6 i6 p4 m$ C1 L6 ^
  423. }
    2 }4 {2 w3 q# D& {2 I/ u, P
  424. $ m3 b, e) R# @' ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"+ l+ ~9 @) t7 a  Y  Y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"9 \/ C: G' @+ g$ n0 e% ?* ]; F

  427. % ~9 Q  L; z+ r8 h

  428. % h' z( J! A. p/ m! z5 G2 J

  429. 9 {" J# ~& Y; U' i9 K1 F1 n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    8 \" \$ Y& m& o% l  X2 x) G7 ~
  431. {4 b8 M& Q5 n; r
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
      `9 g, @7 H# n: a1 D: s
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 @8 ?5 ?0 E+ f: c5 Y  Z% ^4 U
  434.   {
      u& j: b, ~; x( R8 V) W3 v
  435.     char szLanguage[50];) p8 T# B: r1 ]8 |: y* C8 F
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! r7 N3 {5 u2 V% n) P
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;1 F' |/ c& _" _( t  a/ |3 n. P
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' b5 {5 D" y( N) s9 w
  439.     else                                   m_iLanguage=ENGLISH;
    ( k1 g5 }4 |" ?, w! h# n# t: @  `
  440.     char szRegister[100];2 o! Z% [/ o" c( ~1 z4 F
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 Q' K  }% |( l! I% V
  442.     strRegsName=szRegister;
    " H. k( o. ?; \$ P( q
  443.     char szPatchURL[100];
    2 U) g: B3 j6 ^3 A; h8 m" E
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");  T$ |3 c, t6 j( F& x- u
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " w% `0 o% c" x0 S
  446.   }
    . n- |1 M" f  l2 n4 r% U0 R: F
  447.   else
    % M8 a" R: `. n+ s
  448.   {
    % `/ ~. ?0 G" Q1 z, x
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 T0 v8 B: W2 x9 c% R3 b5 y9 R$ R
  450.     strRegsName=DEFAULT_REG_URL;8 t( X" n! f4 A( }6 J* u. D( D
  451.   }* R& v* d! f; I0 ?/ I' u+ H
  452.   if(GetFileAttributes("hosts.ini")!=-1)! L4 b, X- K" v4 D8 ]5 U4 }0 c
  453.   {
    + A# U6 K: f( E; Q5 p
  454.     char szIP[50];
    4 g& @+ S! S* E; @' E- H# s0 S
  455.     char szDIR[300];
    7 A8 z% K* N1 M# E0 Z) t" r
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ) s1 N3 @8 O3 Z1 s
  457.     {0 P/ L# N. I/ n3 G) r* a
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    3 x8 Z8 l, ?" V# z0 h# [1 f, ^9 o
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    : }2 s5 b1 e* l, _) n+ \6 Q- c: h
  460.       strHostName=szIP;
    ; h/ w0 M( Z  X' m. B; y* x
  461.       strHostPath.Format("/%s",szDIR);; u. ?& q! O4 G4 u2 E1 R& |1 W
  462.     }# o. d) N) T( f9 v& H
  463.     else
    $ U' X3 O# M6 j( L! p/ ^
  464.     {5 y! t3 p/ W) ]! _
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( a7 P2 E" s5 H- G; M8 U
  466.       {
    - ^. a: G4 q% q* }* k' f8 s
  467.         char szLanguage[50];
    ! L5 p( f4 X, T% V9 P
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    $ o+ ]. p# O; s$ T& W: D" V
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ( g0 y  k5 a/ C2 |0 B! C( ]
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;7 s- D- M! N0 e3 h2 i7 i; `( K
  471.         else                                   m_iLanguage=ENGLISH;
    6 U% ]% _$ A- ?2 j7 j. j
  472.         char szRegister[100];, c+ p1 P+ H, o' c: i& v& o/ I
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . V1 ^5 Z( w% y  Y
  474.         strRegsName=szRegister;( {, z" W) f  c1 @; ?# W
  475.         char szPatchURL[100];
    ' w6 C$ q* H9 p0 i" X/ S
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' M& P4 b! n& Y' T0 b4 P
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* A% F& V* g" n4 E- j: c
  478.       }
    * ]1 q8 R  h& w. _0 Y+ U
  479.       else
    + O( G" C5 m1 ~( q( E7 _
  480.       {
    $ Y9 m5 \9 m! A8 ^
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 a: I9 y3 M' v1 w  B; {" M) W
  482.         strRegsName=DEFAULT_REG_URL;
    1 a8 t1 }& {; n( M
  483.       }7 g! F8 v+ G2 z: b* f/ D
  484.     }/ O- \9 Y- L. p6 X
  485.   }
    2 `, W9 @! ~9 s2 k2 R
  486.   return true;' c! |. ]. J5 r8 C9 m  j
  487. }
    - ~" u* M' E# W/ X) p* l
  488. ( s1 A' \+ I4 d4 ]) D, o/ I
  489. #include ".\ZLib\unzip.h"
    , q7 H. I' I) y, }$ Y1 M
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    - i; J$ G) A4 d' [5 I5 i; q
  491. /////////////////////////////////////////////////////////////////////////////- {9 a4 C( s1 Y, r
  492. // CRevAppApp initialization9 h0 _. F2 g8 k* t+ N4 \

  493. * n; |4 D% h% K2 e% l8 t, U
  494. BOOL CRevAppApp::InitInstance()! i9 G8 y$ j# R3 Y
  495. {
    1 [0 U4 y) {2 B& \6 R
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    + o9 v9 j% ?4 i0 W. J( S

  497. 4 ?9 ]& U. d: s& t
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    9 ?; u8 `) ~: z1 S
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ) h; a9 F6 X% K6 Q, T( l
  500.   {
    + A+ J  ]$ d7 ~
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ' W3 K& i  _* _9 n
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ! z6 g% A/ a: ^  B) ?9 G1 A
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))5 m+ P) V2 V% ~& E# q
  504.     {2 V4 r* g  ?! [! L
  505.       strcpy(szPath,szPathTarget);( C: Z) G( }( N6 ]' h& J
  506.       SetCurrentDirectory(szPath);
    ( \  d: m+ I- ?3 H" v& F
  507.     }
    % j  H7 Q3 y; y' v# g
  508.   }
    # r4 K2 T* k. I' Q- U+ C0 i. `0 e" ^
  509. #ifdef _DEBUG
    ( w5 D7 ]' @( j3 p6 c/ c& q
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" {: \, x; O* X6 A9 X
  511. #else
    , l1 A0 k$ w4 G& \6 K2 F' g* U! K% @) o
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 Q+ V* e. t& z; M" W3 B( t
  513. #endif5 C0 L) x( F7 u; F' @& u
  514.   {7 \: I8 D3 Q; m) u* K) f5 \7 t) T
  515.     char tempFileName[MAX_PATH];
    - h; R+ Y+ X/ ?$ W
  516.     strcpy(tempFileName,szPathSource);8 f3 W( B1 e( ^! c# |7 ]
  517.     tempFileName[strlen(szPathSource)-12]=0;+ ^4 j( D8 R$ U1 O; {- n  S% D" y7 D. [
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    * K7 w- A4 T2 u" b
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);( z! Q. w) h: @' z) `6 A
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);1 \/ h4 _* D9 E  T1 e
  521.     return TRUE;  n3 _6 B# u# N3 X" \
  522.   }
    . n. \7 h4 g  S1 f  Y& H% |# A
  523.   // Nuke 0118: Delete run.exe, M( X* R' c' a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    - I' F. i4 i% R4 _9 S) C
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");' t! ?+ [* i2 u6 s' Q% `
  526.   if(!ReadCfgFile("Config.ini"))
    ; w9 v+ g& @% v5 P
  527.   {. h+ ^" }8 I- i$ J; V
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    & I  J3 i7 r# J1 j
  529.     return TRUE;2 O; y5 B# ?: S+ D* n0 B
  530.   }
    ! o" z1 F8 E/ ^9 F, E
  531.   HANDLE mutex;
    ; p! x- K9 v5 R8 L' f0 f8 p9 z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    : @2 W# v! t% S1 V8 O7 x" i6 \: I
  533.   {
    # @" y+ _# |9 m$ N% y& \! L1 o( e
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ! P0 g, [! `: r0 i2 n; W$ a
  535.     {5 Y6 {  i& D9 S1 E7 n; o% j' ~
  536.       CloseHandle(mutex);
    $ l# q$ ^  c2 t. |. |
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);& q5 C/ B* U+ W# y
  538.       return TRUE;
    8 ^) G# I8 y7 C) F; O: {* M
  539.     }/ \/ S% E- m6 m+ d: ?% ~
  540.   }  
      x, {* I2 T1 d+ c
  541.   CloseHandle(mutex);7 I2 V) S; ?) |" {# d# O& T( G

  542. ) I+ o. a$ j7 F/ g( g
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);3 C) \5 f! i" n/ H' y7 m
  544. 9 R5 E0 L. D! p$ H* W# ]
  545.         AfxEnableControlContainer();+ I$ M- A9 h  q8 O* H; |5 S- N

  546. 0 [; p, Y* I6 ]1 S
  547.   bCanUpdate=FALSE;
    7 d+ v6 D7 X# [- i/ F+ n  ^
  548.   dwStartUpSteps=1;
    + W1 ?! R2 _( U9 [1 }; l
  549.   dwProgramState=AP_NOTHING;7 _% g- j3 _, z. j
  550.   T* H; {0 \9 t
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) A  t6 ?/ b9 R& _
  552. : U% x( m, ?* \" @
  553.         // Standard initialization( `' }; p0 p2 Y* m$ y" j4 D! Y" l
  554.         // If you are not using these features and wish to reduce the size  T. d" B3 A- z0 o
  555.         //  of your final executable, you should remove from the following
    5 ^7 G: b7 }) |( y/ b" R
  556.         //  the specific initialization routines you do not need.' f* G  y* W9 R/ `9 \" S+ o

  557. 3 z0 v9 C" W. v1 l* C" H% m- }
  558. #ifdef _AFXDLL9 |+ W! `5 M1 k- R) O0 U# k, u0 L4 x
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL/ A8 X6 v% Z! R" a. d. ^
  560. #else
    4 w/ d- V$ ?( t1 t
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    2 b3 B% W- z1 W' _7 f6 L( e3 q/ M4 I
  562. #endif, D4 e  u, X# _- q. e5 M1 O1 {
  563. ; h# C" M8 S' N5 y
  564.   dlg=new CRevAppDlg;7 q, a5 y. P8 u! l5 s2 y$ l: Q* \
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    6 |* y4 X& k+ M; v
  566.   dlg->ShowWindow(SW_SHOWNORMAL);; h6 ^1 ?1 u! X& O  D6 G1 k
  567.   m_pMainWnd=dlg;
    7 P6 A3 G7 U# V. i% w& ?

  568. % F9 ]+ M) J; n
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);# ]7 Q4 o" f1 u3 @3 [6 z- |

  570. 0 s  }$ Y" r6 I  I/ k% S
  571. //  GdiplusStartupInput gdiplusStartupInput;' H: m# @8 u- `5 P/ _/ S
  572. //  ULONG_PTR gdiplusToken;5 K, V2 m! x# V+ u/ L
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);4 X" N$ F2 Y1 }( l* e$ |9 f
  574. ) D( |4 G! B: |0 r
  575. //        CRevAppDlg dlg;, X' N5 R2 l, K7 ~
  576. //        int nResponse = dlg.DoModal();
    % W" q+ @7 P. }; I& k$ b
  577. //        if (nResponse == IDOK)
    ' Y: u5 Y) B! Q
  578. //        {# C: {% M0 w! E, r9 h; L' R9 p# Y
  579. //                // TODO: Place code here to handle when the dialog is
    . J1 s6 f  X8 B
  580. //                //  dismissed with OK
    2 Y* }5 [$ }4 D! W! o/ K4 [$ v5 D0 @
  581. //        }
    9 N; A8 ~% t# l8 C8 }* a
  582. //        else if (nResponse == IDCANCEL)
    7 K3 j& D& c. Q4 c+ F2 k
  583. //        {$ z' U$ E( f8 h) x' @: A% M. w
  584. //                // TODO: Place code here to handle when the dialog is
    9 ]& Y0 u5 V* ?% P( c9 l" L
  585. //                //  dismissed with Cancel
    ) s4 H# g& O: h9 `
  586. //        }
    # `. u( v7 H6 t& x4 v9 j9 P( ^0 @

  587. 9 D& a8 v& W: j3 \9 h3 U
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    0 d# H- U0 L  n/ h; M0 D
  589.         //  application, rather than start the application's message pump.
    * k  M* k! f. Z
  590.         return TRUE;" L! U- i6 l7 x8 e' m; I
  591. }
    ; A/ w2 t8 s' M+ X# H* j' g
  592. 1 H% W" j2 O6 K5 J6 B
  593. char *CRevAppApp::strtok3(char *pSource,char *token): V+ m% ]& O& s# e6 H" q" V) a
  594. {
    5 z. J; s" ]7 E+ W
  595.   int i;
    4 P" c/ W$ z. u- `
  596.   char *szRet;2 V: }  @( `  M/ c

  597. & E4 K4 m; @3 ]
  598.   if(pSource) { itoken=0; sztoken=pSource; }8 ]# F* j& v) ?4 X7 Y. x4 i
  599.   if(sztoken)& @7 @, `5 D* {# Q- b
  600.   {
    / [7 i" a9 W7 X8 H9 r0 v4 m
  601.     szRet=&sztoken[itoken];
    8 C8 t+ k0 ]1 l" h8 K
  602.     while(sztoken[itoken])
    1 k8 @8 ]: _5 ^* g. l' R& {/ L2 M
  603.     {9 U+ R/ ]3 [1 f) N% N
  604.       for(i=0;i<(int)strlen(token);i++). r; z  e; U6 p! h
  605.       {5 h- _0 t6 @5 a( v5 l# l
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    , x8 M: t* X* Z
  607.         {
    / w# D7 F/ [$ }* p
  608.           sztoken[itoken++]=0;! b5 L5 Z2 c7 U  K. c) v
  609.           sztoken[itoken++]=0;
    ' x) J( a8 ~: a
  610.           return szRet;4 ^$ s) j& E, Y+ }& R
  611.         }1 _1 l8 `6 x9 _3 _5 ?
  612.       }
    , {/ M: @' ?( H3 `/ W
  613.       itoken++;. f$ O+ H9 t2 u  d  [+ p! |1 P6 a4 }
  614.     }
      P- j8 `8 Q+ A" w
  615.   }6 v2 N) j  s5 ^
  616.   return NULL;
    ' ^5 B& ?1 R; G& k' t5 d, ?
  617. }
    # F$ f0 L4 @/ ]9 r: C
  618. ; t3 ^' E" f$ j; l
  619. void ProcessProc(long Total,long Current)
    1 Z% {# Z  T' S4 O5 i/ M: ^) j) c
  620. {( l& ?+ f5 ]; w
  621.         MSG msg;( k: B4 p5 b+ ?$ r& w  I# w9 n& f- T
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " }- g+ u5 o5 j" X1 }; |
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));! L6 r8 M% W1 C' X, p6 I. K
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))- H8 g, c' |4 `  y! o* R
  625.         {2 q. J1 r% m8 o2 v/ R2 [' {6 E" {
  626.                 if(!GetMessage(&msg,NULL,0,0))
    9 P" z  x: j  z  Q8 B1 k' |* x
  627.                 {+ e0 _4 ]& ~+ l2 X) @. Y/ I" J
  628.                         return;/ a. Y( s7 ?  u
  629.                 }
    4 W1 o4 I& V& ?$ S1 s5 c
  630.                 TranslateMessage(&msg);
    + g2 a. @  Q( ?: x: K
  631.                 DispatchMessage(&msg);# Y$ ]& y* I1 E* H7 B
  632.         }        ' D% v! {! H  G% c  z9 G( i* p( d
  633. }$ O+ [2 [/ C# n' `) O
  634. " h+ j% z! g& B  M
  635. BOOL bFirstChar=TRUE;! B& J  ]3 A3 D, i8 U/ Z1 j

  636. 5 _- b' H4 L. }2 w0 K
  637. BOOL CRevAppApp::OnIdle(LONG lCount)- r( U, l: A% P2 V0 J0 t/ I8 ?$ a
  638. {& k7 Y9 M; R3 N6 y4 y, g
  639.         // TODO: Add your specialized code here and/or call the base class
    ! @/ `- `7 P) {
  640.   switch(dwProgramState)
    # S, ]- N# r8 L; F" W! ^: B
  641.   {
    7 Q# H7 ?$ n$ a7 \+ h* \0 V2 @, y
  642.   case AP_NOTHING:
    / O! l' q" D: r; ~/ r' C
  643.     switch(dwStartUpSteps)+ W/ {: Z0 H' q  k
  644.     {+ X4 H7 @5 E5 f. _( j
  645.     case 1:% i& l4 L; ^+ P! e/ N: j
  646.       {! d+ A. B6 M& x4 b
  647.         int i;. d) B0 X$ Q6 |1 y6 ?, H
  648.         CDC *pCDC=dlg->GetDC();' @) a3 w# P1 u$ H' F. R
  649.         HDC hdcwnd=pCDC->m_hDC;
    . {2 h" H. ^' v1 d- ]' ?
  650. //        Graphics graphics(hdcwnd);. U- K& S0 F" [. S
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");5 s1 x7 v7 c" I* X0 p
  652. //        INT iWidth=bitmap.GetWidth();
    2 h- y/ B; h% T) c/ W
  653. //        INT iHeight=bitmap.GetHeight();) I, O5 ~. w1 f
  654. //        Color color,colorTemp;
    4 B  {0 W* T; q  q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    3 J: m4 L% \7 C% N% C2 s* o. K% [$ o7 F9 l
  656. //        {
    1 i- s" E& O, |/ P+ B. b# z, l/ B3 B' g
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)9 W+ n" w  E. T! t
  658. //          {/ T0 `" d3 q2 B' [: j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);& ~4 o/ V6 T$ B- V1 z4 b
  660. //            colorTemp.SetValue(color.MakeARGB(9 s3 B% r) H. n9 T
  661. //              (BYTE)(255*iColumn/iWidth),. }! \3 X7 I! y
  662. //              color.GetRed(),
    ; d6 p# g2 [) v$ B3 N
  663. //              color.GetGreen(),
    2 w; ]# J- j; Z1 n: X1 O. X
  664. //              color.GetBlue()));  T! H$ b: R# r* h+ Z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    2 a$ b$ b! b4 o6 z+ y/ B
  666. //          }4 T; @. i! T6 A+ o- o
  667. //        }8 l, x, s/ ~4 V- ^4 G
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    " q  J) C3 A" a9 n  W1 ]0 Z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! u9 w6 S  |4 C1 w' U
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    6 C/ {+ _0 F% h5 Q) j4 X
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! B" V8 G: s% P/ k2 S" d
  672.         for(i=0;i<240;i+=8)) ^0 s! Y4 W+ A" _
  673.         {
    ! o" Q+ |, F, b8 O
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% f8 B% B) c9 G
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      D0 u) V3 H8 \9 ?1 R: K) E
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- I; S  C" M: K
  677.           Sleep(33);
    " r2 A- m$ d5 V" a, m1 u7 A
  678.         }
    , ]# e4 e0 ~- b% ~. \1 }" Q
  679.         Sleep(1000);8 A1 m/ i" Y% ?3 j; T
  680.         for(i=240;i>0;i-=8)3 O9 w; N) ]( \
  681.         {
    0 i( A* s: I* t. f
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);* s, w- k' f7 D$ v4 K
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);1 L! ]0 D+ X4 V8 @9 N
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + t. C! `( \5 Z. v) X# ?- K% l
  685.           Sleep(33);7 n" ]% k; B& H
  686.         }
    3 u2 \! V/ \! s
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);) T+ Y0 w6 j. I1 |+ n
  688.         dlg->ReleaseDC(pCDC);; D- |- r" m) ~" e' K% y* N
  689.         DeleteDC(hdctar);/ h* h( z4 A. w( {/ W
  690.         DeleteDC(hdcsrc);4 u. `! T+ p: M1 J; O
  691.         DeleteDC(hdcorg);
    & i0 J+ t  j" ?+ p
  692.       }
    / j! k6 I. I, @
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ' G2 e2 U8 V7 x
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");# ?# r" J( ^4 H  Z$ n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, J4 s* A! m- Y* Y8 @
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 K) }# |, E0 z# [) T  c9 e' ?1 w) [
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & O' v) ^  _4 h) y
  698.       if(!Dn.Connected())# p$ M8 t: K# t6 S2 z7 h
  699.       {( [& V, r* S9 I3 ?1 G
  700.         dwTotalFiles=1;  v2 S$ A5 S9 p. C7 {) U6 b
  701.         dwDownLoaded=0;
    4 K. `9 i& U$ x& ]7 R7 \
  702.         bSilentStep=TRUE;
    + L5 o$ c. g; r- ]
  703.         bCompressed=FALSE;) C+ A' u* U* X' D  w  W: T
  704.         strExtLocal.Empty();5 U# [* J9 k* @" b
  705.         strFullName="readme.txt";5 l  a& a# L+ k2 S5 _  S* K
  706.         dwProgramState=AP_CONNECT;4 a5 p3 |) Y  h
  707.       }
    7 l5 q* T( ~! N! k0 x
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();, M: \1 a: @( [/ N
  709.       dwStartUpSteps=2;
    5 _: s3 l3 y) O* C' q8 }% ~6 Y, B
  710.       break;
    ! {1 v7 v% |& I) o
  711.     case 2:
    & V6 g  H! @$ B) \( {- G' C
  712.       {& z5 A  s3 D9 v+ d% S5 Y& H
  713.         int iEOF;/ `  T8 Q& n- k) [  J# J
  714.         FILE *fp;8 k- u  |) D' }+ u+ t. m
  715.         char szString[512];
    9 B$ C6 s1 W& k/ t. |$ y( _3 j1 E
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");" Y6 O! [5 f& @( e$ h4 `$ E# s% s
  717.         if(fp)
    ' _3 ]+ b& [9 k0 o5 ^
  718.         {0 q4 n* T$ ]: L8 ^
  719.           do2 a' Q9 {$ S4 c1 }: j7 i$ o
  720.           {
    # N# ~5 ]! g0 ?; `, Y; C
  721.             iEOF=fscanf(fp,"%s",szString);$ t9 p% E4 {! ^- s7 b" [- y
  722.             if(strlen(szString))
    ' m/ Y  \& W, f1 U; }1 q* t; d
  723.             {
    5 u! x9 u0 u; a: ~9 c4 O7 l
  724.               if(bFirstChar)
    ) h7 ~5 h3 H9 O: ]: o7 M9 A
  725.               {
      K3 w/ E1 Q: n8 h& [
  726.                 bFirstChar=FALSE;
    9 a$ M8 N( h4 Z
  727.                 bConnectIsBig5=FALSE;) w; U4 {+ |5 I& E' M! y
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    $ ]& w) D% S9 o
  729.               }! J; m" a4 F, B6 m+ p
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . P7 b6 k  I- s, z+ m  h+ P2 ]0 P3 z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ( Y' S% _( |" |" k
  732.               dlg->m_ListText.AddString(szString);! [- w1 z# g7 k5 g4 i# ]3 p
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ x* N2 z4 P! }& P: P
  734.               *szString=0;% I; n. [/ i7 H5 E. Y: K
  735.             }
    5 y  j6 S" e# ^5 p1 D
  736.           } while(iEOF!=EOF);
    & Y8 g9 g0 T2 ]8 x. f! T/ F) B8 o
  737.           fclose(fp);: X8 L) ^7 D' J2 x: X
  738.           unlink(".\\DownLoad\\readme.txt");* a0 \5 w1 j1 ]; G. n3 Y' @
  739.           dwStartUpSteps=3;
    ; Q' R* B! q3 Z& b& w& {2 |/ |
  740.         }
    # H* ^6 Z! [8 o6 |4 C9 ~0 d
  741.       }
    1 E4 B* L$ K* L
  742.       break;
    $ o9 N' X; u5 H$ x
  743.     case 3:
    & U5 U# u0 V! _' Y4 ]' o9 f5 w
  744.       if(!Dn.Connected())
    ; v, a1 p' ~/ N: |/ z* P5 T
  745.       {4 \' |( k- o0 u9 ]- I) `8 C" m# I
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);2 O/ R$ _: N& S7 z4 F4 V9 B8 r
  747.         dwTotalFiles=1;
    ' U- ?6 U: \) R5 T0 P1 t" _$ ^* i2 [
  748.         dwDownLoaded=0;
    3 u) N" L" |3 \/ y# ?! i* U+ N9 u% ~
  749.         bSilentStep=TRUE;
    2 Q7 K  G1 l; O$ k. O, o( P7 n, @
  750.         bCompressed=FALSE;. S4 O( o% [3 k8 u; B" D7 B  `7 d
  751.         strExtLocal.Empty();/ [& }* Z% F% Y- n: V% [# @
  752.         strFullName="checkversion.txt";
    ! b1 p# e/ u: Q$ \& W) {9 w2 g/ m
  753.         dwProgramState=AP_CONNECT;
    $ N) {8 `+ V& j: f5 S
  754.       }
    * F* {( R8 h, [; W
  755.       dwStartUpSteps=4;
    4 a& F5 K, [8 P  k& Q/ n
  756.       break;
    & u7 m7 K( t. C" B+ L3 w1 ?
  757.     case 4:  C. ?/ h6 c0 p  q! B! N5 W7 _2 \
  758.       {8 ]' ^- J/ D7 w+ j* g/ P! \$ n
  759.         FILE *fp;0 R8 |3 Y' H- c! h6 y) c3 l  V
  760.         char szString1[128];+ N* C7 ~) l, y
  761.         char szString2[128];
      l' l6 r$ R: r- D; u
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");. h! s& {" m2 F4 Q$ |* o
  763.         if(fp)
    $ ]: a( U5 n( L' P# ^$ a
  764.         {
    / i7 ?* {2 {+ `% ]* Z
  765.           fscanf(fp,"%s",szString1);1 k+ r- E; V( i" s- B% x
  766.           fclose(fp);! @: ~; ^) m1 ^- ?5 y- ~
  767.           fCheckVersion=atof(szString1);
    ; {+ k" c3 A) S4 `
  768.           fp=fopen(".\\checkversion.dat","r");* }# Z  g! i% m$ \
  769.           if(fp)/ J: b9 p. n, H7 g0 H4 q
  770.           {: \; v& i$ _4 f5 B! t
  771.             fscanf(fp,"%s",szString2);
    % Y& q3 ~4 W- r& }
  772.             fclose(fp);
      g0 G$ Z# ]* j, h, P
  773.             if(atof(szString1)!=atof(szString2))9 G4 _; T0 L3 d- w1 _9 Y
  774.             {) l% u. S7 W7 n
  775.               if(!Dn.Connected())% Q7 {( Q9 A9 Y& Y# Z
  776.               {0 m  d( `7 f2 L
  777.                 bFirstUpdate=TRUE;
    4 Z+ ?4 e4 ^) i; b
  778.                 dwTotalFiles=1;
      o0 E( k) |! R; A6 q4 N: `
  779.                 dwDownLoaded=0;
    + }1 D8 c8 p) z8 g, q* S8 x
  780.                 bSilentStep=FALSE;
    2 M6 t- @/ s# R' }1 N7 g
  781.                 bCompressed=TRUE;
    + I4 j) E* @' u. v3 h( s! D
  782.                 strExtLocal=".\\DownLoad\";
    0 Y# n& B0 K- o7 `
  783.                 strFullName="update.txt";
    3 p0 O8 @/ \% c* J9 x5 x
  784.                 dwProgramState=AP_CONNECT;
    - i5 Q' w- d! _5 u2 n
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% _5 b; _: Q3 e5 w9 {
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 B7 [8 L; U8 x& L& n6 }6 `
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");6 u5 g+ q7 p( }9 H
  788. : j$ g9 Q* u" L0 j5 l. N8 z3 ?4 w8 s* G
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 g- f6 h0 S$ H: A5 k& s
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    % Z8 Z  a' T4 T+ E0 A" u3 V/ x
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    " m9 G! I( F0 ^2 f
  792.                 {: S$ X4 V+ K$ R& R# O9 _
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");6 t# S* `5 z6 X( Q1 K# I- g6 u
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    $ P" E; t+ [& i" m" m+ t( d
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");0 a$ G3 }6 l7 u8 x
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " s' _- E3 }; ~3 X# W
  797. % I* m6 {2 S: J' L5 h
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , p* ^0 U8 B, p1 B7 D
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 c8 R) \# s* T9 y. U& P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");. r+ N! P: u% F# P
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ M1 q" @) k4 _7 F  m
  802.                 }
    % \, M& O7 i* }9 C1 }9 c, K
  803.                 dwStartUpSteps=5;0 r/ B: n1 ?6 l9 U- x
  804.               }1 ^! \7 A8 O+ u% N6 t2 u
  805.             }7 B* O4 j" {# D/ N  y) \' y  G
  806.             else4 U' Z$ F. M" d. A* n6 @+ E
  807.             {' M. X4 Q& C6 ?+ N* O
  808.               unlink(".\\DownLoad\\checkversion.txt");
    * p, |% E, W! ?! x) j) f
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");7 X9 Z  W9 n6 A  e; h/ E* ?% M3 I
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ! w* V3 M; a1 M0 N$ b/ p* L! D
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");/ ~- u5 S5 Z8 @
  812. * \0 O: F# q2 E2 L
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* C+ F+ c+ Z1 d$ n1 L" w) ^
  814.               dwStartUpSteps=99;
    6 p6 g1 d4 \2 d4 m! t
  815.               bFinishUpdated=TRUE;
    0 q* G1 O0 l! ~( J4 x. d
  816.               bCanUpdate=TRUE;5 u+ B' Z1 e. j+ O
  817.             }
    " N$ c5 s4 j- ~
  818.           }
    # o% v/ Z; J1 B3 Y& u" m% `
  819.           else
    2 O; s* Z& G* s: B4 [
  820.           {
    7 H3 [$ G8 ]1 Z- _; U0 S! M
  821.             if(!Dn.Connected())
    % J4 W( v' K& _1 |. t7 G) U3 L
  822.             {
      v# P$ l; G+ M3 X! S0 P' t
  823.               bFirstUpdate=TRUE;2 l0 C$ m/ j7 P/ H8 R6 P
  824.               dwTotalFiles=1;
    : a) A- B8 n; m7 N% M
  825.               dwDownLoaded=0;& {- F: v, i! P) t% g
  826.               bSilentStep=FALSE;
    6 l5 z- K2 _2 Q4 N, K) ]1 V
  827.               bCompressed=TRUE;9 X9 \+ Z' M+ R/ M1 G, c# \9 n
  828.               strExtLocal=".\\DownLoad\";
    2 e: e9 T9 l, S( }, A4 y, R% [0 V
  829.               strFullName="update.txt";
    ' T4 I& o2 q6 z+ Y" j
  830.               dwProgramState=AP_CONNECT;
    1 l3 V" d& i' `( ]9 r$ f9 A
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , V$ u% B: O8 h# }  L$ m0 R
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 \+ i7 \  I7 T; d
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " l, B! k& u$ t
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ r2 z$ e- X* X! }! G
  835.               unlink(".\\DownLoad\\checkversion.txt");
    & k2 N5 H9 Q* C7 c
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)/ \% S( x- ?2 z
  837.               {
    # G1 O9 Q) O( O8 x
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");/ e' H* x$ x( w3 m) O& ^& C
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    3 R% m- c3 x4 ]& v' _
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");) a- A3 H: t' D* s9 h) f* b
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 S& d% o' u; d4 f+ t" J3 E6 A
  842.                
    ' y4 S% Z# A( _" j- ?, p
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 Z) i0 o5 l, K9 v
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    9 \0 f3 }* s! n8 J% B: C" x. b8 I' u
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");* C, Y8 F! u) o$ i5 Q& G$ Z) Z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      b. p" K% R2 a0 N8 ?; X. w
  847.               }" U8 g! h5 ?. w& R9 F( h9 l' d
  848.               dwStartUpSteps=5;
    ; _& j# g7 x7 _& x8 i5 B' C3 ]8 d
  849.             }% {* J  Q" V: ?
  850.           }
    % ~, a; ~" U0 i! m' V
  851.         }5 D7 j& |* @7 K' y, I3 {
  852.         else
    * g5 D/ C# b+ |; H7 e( c
  853.         {
    $ {; m2 z: @! ?1 k5 C' c9 _* @
  854.           dwStartUpSteps=3;8 Y# w5 P: q4 B1 Q8 Q
  855.         }
    2 G, a5 J% [* c
  856.       }
    ; Y/ [: S7 F/ a6 s- u* |" e
  857.       break;
    2 @" y9 q! u& a- e; N
  858.     case 5:
    + p" D: Z0 T- |( \
  859.       {
    + G- p5 P" B6 {) [% g* [! O& s
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)! V+ ~& b2 P! g. S& @
  861.         {/ }$ i1 @; A, F9 g' m) z# u) v
  862.           int opt_overwrite=1;( q0 K. M$ T: Y* Q4 U( ^0 Q
  863.           int opt_do_extract_withoutpath=0;
    # V1 {1 k3 {' `$ H# T
  864.           unzFile uf=NULL;
    . Z2 j' F! p# Q2 {" \: k& d

  865. ) p4 B& m* }% g3 O$ S! `) w
  866.           uf=unzOpen("Wsa.zip");) P6 R) f7 X; Z% V0 \) K! N
  867.           if(uf)
    * \: Z7 `- b- m  |1 t
  868.           {3 v" C/ G# c, X0 Y4 S8 \" u
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);( b' T1 A3 w, ^( K$ R
  870.             unzClose(uf);
    + V9 Z8 z5 \, a; A$ s
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");' }5 r4 K& L  }! D. r2 B8 H3 J; ?
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");0 o5 L9 o2 ~. O: Z& p  D
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");, ?( M; |; D  H
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 }! H- E# c: s7 X
  875.           }
    , r7 o( o' y3 H/ D* S' X* o
  876.           DeleteFile("Wsa.zip" );
    + B5 _' B5 J/ y! j$ x* B+ G/ [  ^( o
  877.         }
    " `6 p: i' m  `

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

! }! z; s$ Y9 z* Q7 I3 {% B9 b+ j

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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