CSUpdate.exe源代码

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

( s( m- D% S8 G( J, E0 g
  1. / RevApp.cpp : Defines the class behaviors for the application.. m/ [' J! d  c7 V! A
  2. //  N0 T0 ?1 V/ I* Z) K- k

  3. $ v/ l8 G5 ?9 t9 s- L  z
  4. #include "stdafx.h"1 a  U# G0 ^4 @( l4 k

  5. ( e( z4 t2 f3 C
  6. //#define UNICODE& `& T+ _, i7 G. Q/ ~1 o
  7. //#include <gdiplus.h>; [8 Y7 ~: U9 P1 j' H2 P8 x" N
  8. //using namespace Gdiplus;/ o) y. x4 D7 A2 I  q" m) h+ c

  9. 9 x% M) X( n$ n7 Q/ }) g. X! u. F# H
  10. #include "RevApp.h"
    + Y  e# T( Y( b, f( d) u
  11. #include "RevAppDlg.h"6 _* I$ v) t0 |/ L% \5 I
  12. 6 R+ g2 u. m8 `7 B. l" X
  13. #pragma warning(disable:4786)4 i. f. z1 |& B' A3 p" N; X
  14. #include <map>. r8 d; W! M( d: K6 @& ?
  15. #include <list>' h- a6 s. J; D4 Z+ ]
  16. #include <direct.h>
    2 N6 s" ^) J' T# b7 W$ L

  17. " q# T  w. h6 c5 X! Q- e
  18. #ifdef _DEBUG
    ! B: u3 D& U; l& y
  19. #define new DEBUG_NEW
    * a! b- M! ^0 j/ S
  20. #undef THIS_FILE- @7 J6 X3 [" _; F
  21. static char THIS_FILE[] = __FILE__;, i; }! N, d& M1 j  f. X
  22. #endif
    " Q' m: i) Z3 a, w- n, Z
  23. #include "SkinResDef.h"
    5 `2 L  v& y0 x0 F2 w" F$ b
  24. #include "ChangeBG.h": k8 f+ M8 j: x1 K2 h
  25. #include "AFXINET.H"6 I/ c. Q2 D  t  X0 [5 i# \% I) r

  26. ( v5 u7 S( d( p, p* ~. s$ D
  27. #define TRADITIONAL_CHINESE 0
    3 p. }) V6 R; O$ G- x
  28. #define SIMPLIFY_CHINESE 1
    % V- U7 h' F$ N3 J1 s% Z  w
  29. #define ENGLISH 22 Y+ Y: X( U3 R
  30. int m_iLanguage = ENGLISH;
    " _* F% h+ a# Q* @8 a& }+ M; S
  31. /////////////////////////////////////////////////////////////////////////////
    ! m9 B* z" h; o. s" {) U1 E" J; g) H
  32. // CRevAppApp. R5 F8 a$ S" d/ x5 P- i+ N
  33. 9 g' b! V% t9 N( Y8 t# L0 L  x7 y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)1 @, G* e. z  i6 W' s( p
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ; w$ M# a* S) B
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    7 K2 `7 k; j# x7 C. J
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    7 a6 w7 i% \" i( r/ \
  38.         //}}AFX_MSG
    7 T, A. F& p7 P/ g
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    6 H3 F9 y2 P) ^
  40. END_MESSAGE_MAP()
    6 q  Y/ V4 h/ g9 D6 U

  41. * g: w, g6 ~$ t% Y' ]
  42. /////////////////////////////////////////////////////////////////////////////1 M1 B% _# _3 E1 S3 g! W, \3 @
  43. // CRevAppApp construction, u: {# e5 u$ X+ p, U

  44. & {2 z9 L/ U: f1 p, j0 q: Q
  45. CRevAppApp::CRevAppApp()
    7 g+ z4 h- w, ^5 _8 E
  46. {! {1 q" S* c: ?8 ^
  47.         // TODO: add construction code here,* P- V0 K. b2 g! D" i
  48.         // Place all significant initialization in InitInstance3 E1 D5 n! x( K; v: k4 T# B0 r
  49.   bDisplayIsBig5=FALSE;9 w! j: x3 w1 }. k, ]. E/ b" u
  50.   bRestartUpdater=FALSE;
    + I5 G9 @, m  }' y8 T+ r1 |; q' b
  51.   bFinishUpdated=FALSE;
    ( h+ e1 f! i" f* S5 ^
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    $ L1 s! X1 B& F
  53.   InitChangeDataBig52GBKS();, N# [% V; V; f% y( U4 j) d
  54.   InitChangeDataGBKS2Big5();( O7 l8 _( N* j9 C  b$ I
  55.         //' w: J) H1 L0 v, e9 n& Y1 y) y
  56.         bClickRunExe = FALSE;  t6 `3 x+ t* C$ h0 F% a; Q0 h
  57.         //9 i9 I4 d, n0 K' n1 S
  58. }
    , r8 z7 {% T( z  c9 R, {0 ~5 F! K% }

  59. 3 X1 M, b7 @9 U2 }2 Z
  60. CRevAppApp::~CRevAppApp()  G% b$ |; z% a* N& M' ?2 A& Q
  61. {% v: ]) p0 }) Y( @. X( C: W
  62.         // TODO: add construction code here,
    " G+ _' y( t, a& o) A
  63.         // Place all significant initialization in InitInstance4 T9 D7 s: \% y1 B" I# c3 H  |  l
  64.   EndChangeData();
    / K9 H0 ^) f* c( v( |2 b
  65. }
    3 [; \/ ^( H' ^6 @- F( |
  66. ; Q1 W1 |2 E* ~: b! x( W
  67. /////////////////////////////////////////////////////////////////////////////" n' i  D! J$ h
  68. // The one and only CRevAppApp object3 j7 w4 W: V/ E8 L8 T7 G

  69. 3 W# o# k! \7 u) ]# J* F4 ^
  70. CRevAppApp theApp;. Z; c0 Q* P. G" \% V+ T! O* H: e
  71. - _4 g7 m( R/ z) |: g3 W
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)! x' I; C1 ?/ C" [3 h
  73. {# W/ m# e' A7 D7 J3 q% i% W
  74.   int iEOF=0;- }* H1 e( G3 W- a% g9 Z
  75.   char szTempName[MAX_PATH];
    7 G$ r7 @& N# p
  76.   *szFileName=0;8 P0 F3 ^: a6 }, `  q, g' a
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ; o, W' V9 I; u* X$ e& |( @. x. F
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')+ x& ~7 r; e7 m; S5 v
  79.   {' w) R5 P/ ^/ m4 O5 _
  80.     strcpy(szFileName,&szTempName[1]);3 _/ g2 L4 V2 _+ C% q) e$ |
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)* j  Z+ N3 K" g0 b
  82.     {' P; T. c3 d& Y. r6 I0 l9 V# s3 O
  83.       iEOF=fscanf(fp,"%s",szTempName);
    % p1 x% s: t! i5 z4 ]2 h
  84.       strcat(szFileName," ");; a+ O' M9 g% L) w0 p5 g
  85.       strcat(szFileName,szTempName);" u2 @% n1 P2 c& z3 P$ _5 @
  86.     }, _' h% ^! R( o- ~$ M
  87.     if(strlen(szFileName)>=1)
    . u* G* a# S, N- e" D3 B8 {
  88.     {
    7 ?1 ~1 S2 Q8 P1 l$ m* @2 x+ S
  89.       szFileName[strlen(szFileName)-1]=0;
    & k" `! f" S- e. ?/ ^
  90.     }8 P. G' }/ P' H1 j. P
  91.   }: @0 h3 |$ p2 Q0 u; z, a! Z
  92.   return szFileName;
    ) R1 U7 n4 W5 ~3 G
  93. }6 A" h- X% P9 m5 b+ A9 _  w1 e8 Y" m4 o5 N

  94. 9 T: L6 Z% W6 Q8 h1 L& b3 X
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)# o2 Z* z$ H( X( i9 o- C
  96. {
    " P! J& R) V, L+ I
  97.   FILE *fp;! B" t  ~; W9 g/ c$ Q, R
  98.   char *key=NULL;1 E+ p* u+ |3 H, V9 a
  99.   char version[MAX_PATH];
    # k* p6 T6 ^  |& ^" D% \
  100.   LPUPDATEFILE file,olds;4 a$ b" A, r& l  k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    # R5 ~; W6 Y- i

  102. ! T; V$ ?& k0 J
  103.   UpdateList.clear();% o$ N8 N& x( V
  104.   UpdateFile.clear();. w. W" O8 @' z9 H
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; Q) N  T; L# Z* r. G/ J  Z- c
  106.   if(!(fp=fopen(filename,"r"))) return false;9 |6 f. Q' S0 n! Z
  107.   fscanf(fp,"%s",version);
    ( P8 d2 S- b6 I0 }. W! ^
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }' r( o- S5 q3 K% ^* r9 @) }. N
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 d/ o, F% n9 K8 ^4 X* N
  110.   {; w; J+ P- J7 W. ]( s# Y1 a- b  c
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 M$ a/ z& Y  ~* F6 C5 v* A
  112.     fscanf(fp,"%s",file->path);
    ( E. V& E. h% ~+ J
  113.     ReadFileNames(fp,file->file);' }" L1 x. v% s8 k; }6 m
  114.     strcpy(file->full,".");0 w8 ?7 Z" _3 v1 m7 z# E" O6 N9 c
  115.     strcat(file->full,file->path);
    8 {; N5 k7 F' x
  116.     strcat(file->full,file->file);
    5 V" h& \" T& c# Y3 n
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())2 Q% Y; t9 A6 o5 C- z  a
  118.     {* q+ n0 o5 f1 `1 W+ g/ {" D9 [
  119.       file->vers=(float)atof(version);
    3 `% J- O8 w8 T9 p/ M/ b5 N! `2 V* c
  120.       UpdateList.push_back(file->full);' D: }( A( x0 d/ E( @, K
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    " {8 D9 S9 V8 k/ \  l! g3 Z
  122.     }
    " S" w2 l* [9 B. b4 ]. w6 Q; l# L% @
  123.     else
    3 A/ W6 d( C, f2 ?. y6 n% E) w' {( i# x
  124.     {
    . {% z% r/ o) S4 F1 c5 q
  125.       olds=(*p).second;2 Y% J! C3 ]( M9 ?% G2 j
  126.       if(olds->vers<(float)atof(version))
    4 s* ~; z) y3 U# ]
  127.       {6 a; p1 V; o( O: ^: i4 {% g
  128.         olds->vers=(float)atof(version);8 A) m, I0 v; {$ @0 M* [
  129.       }6 o' `# x& m* G/ V, ?7 k
  130.       free(file);
    $ i' Y' j, J7 ~. j6 a: w. b
  131.     }( C8 v& S! k! `
  132.   }
    . O, }+ t& h( B. \9 `3 y
  133.   fclose(fp);
    % ~" ^' \* ~0 N+ g. @- A" j6 B8 B- ~) w
  134.   return true;7 Y' a! x; w5 b. y( A7 C, [0 Q
  135. }
    3 k1 [" |8 S3 }% M. Y) Q
  136. % }) H" T# p) s0 }
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)4 K$ x5 k9 b, D1 i( G
  138. {
    ) ]' }. A) `) D5 r9 z, N
  139.   TCHAR  szFull[MAX_PATH];
    5 k2 `/ f5 a$ ~7 E7 ?
  140.   TCHAR *token,*inter;9 z" z* A: P- a) n, m
  141.   *szPath=0;% o) Y3 c4 @! l  O- Q
  142.   strcpy(szFull,szFullPath);* A; ]8 S3 n9 Y$ ^* O, v/ B! Z! K
  143.   token=strtok(szFull,"\\/");. a. e1 o8 t9 Y; t* r
  144.   inter=token;
    % d0 Y/ _, j; Q6 x/ T
  145.   while(token=strtok(NULL,"\\/"))
    6 F' E4 T2 D) @( u
  146.   {
    % r; E4 j  U" W* ~" ~1 R* T
  147.     strcat(szPath,inter);
    2 z. h- o! S7 d5 [8 n
  148.     strcat(szPath,"\");9 O( ^: m* R$ {1 C$ j5 Z
  149.     inter=token;
    ' Y3 G" q  t5 f  q+ z9 [
  150.   }# k+ A1 Y/ q  Z# D' \/ q8 i
  151.   return strlen(szPath);
    - L; T1 I8 r0 v- ?6 I" c/ V
  152. }
    ; p' b+ D' [6 F) @% V1 B$ l
  153. & U+ R, l% j  q$ n4 h$ x
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    : ~) @2 g. X; Y4 Y) O% `
  155. {
    2 i5 ?: p7 f9 T# v" Z
  156.   DWORD attrib=GetFileAttributes(Target);% ]) j2 X( a+ |3 N2 }
  157.   if(attrib!=-1)
    6 o, e$ v1 N! A, e0 ^  d4 [1 l3 r
  158.   {
    ' k  G2 ]- M9 o+ q2 B
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    5 ~, \, z3 E' [5 k
  160.     {8 p  @5 E# E$ Z; a. [
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);4 |! y, h, ?3 M' R+ w3 ?
  162.       SetFileAttributes(Target,attrib);7 t9 e& h1 `1 Q4 ?
  163.     }
    6 Z8 P$ w" J/ T+ W
  164.   }
    ; t4 p/ K( b( W. r8 }5 T1 R
  165.   CopyFile(Source,Target,Erase);% N& e1 S, s  W- ^& C
  166. }
    4 P* B3 v6 r4 ?1 o1 p  o$ x% U5 E
  167. 4 V7 y  ^/ n: p! q/ q  C
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    $ {7 A3 X$ e, M9 k
  169. {8 A, h6 B8 F/ n( H/ g; q
  170.      FILE *fp;
    3 p# [' X1 ^, F6 C
  171.      char  szBuffer[8192];
    1 [  ]* n0 A9 P% W
  172.   va_list  argptr;
    # {( j1 q3 O  _5 }! z3 m

  173. ; q) u  T# z; t! f
  174.         va_start(argptr,message);3 t: k8 J4 [7 @9 u( e  }" _
  175.         vsprintf(szBuffer,message,argptr);& O+ u0 L4 w. ^0 G: _
  176.         va_end(argptr);
    / V! U: p7 d! ~7 ~7 K- c
  177.   fp=fopen(FileName,"a");
    : ^& |0 x5 o- b; o/ q
  178.   if(fp)
    $ A, H7 G3 A; [, C0 p3 @
  179.   {
    : M7 p: Z, N9 j5 v
  180.     fprintf(fp,szBuffer);9 v9 K6 I6 g8 O
  181.     fclose(fp);; Z; v9 \$ ?' {# R
  182.           _flushall();
    # m; q( P% E* U2 o$ @% [
  183.   }
    . Y: U  Z7 ^9 w9 b+ r. [
  184. }/ Z+ a( s& y8 A( }. _+ @1 s$ y
  185. ) N4 c* O1 J, J" _; M) S
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    4 N: N: X  s6 x  t% j( u
  187. {% N. R! b" M1 I: v: x4 k
  188.      FILE *fp;
    1 K" q; J( U" j% t: i, e6 d
  189.     DWORD  attrib;4 F2 L, ]5 ]5 G9 R9 P
  190.   attrib=GetFileAttributes(FileName);4 l1 d1 O. W* x) b* F7 z
  191.   if(attrib!=-1)) y8 {' F' E+ O1 i5 L9 L5 J
  192.   {; v9 i2 C9 p3 e1 R* }1 Z& ~+ e
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);9 T% g! j7 `5 E/ k3 b- ~4 T' L* ]
  194.     if(!SetFileAttributes(FileName,attrib))
    - `5 h& A* `! N" E) E. h* k
  195.     {2 m4 I! d0 G2 o/ Z" j& f* K; l' K0 f
  196.       return FALSE;5 K3 N4 A6 X3 k# @/ H0 V4 L
  197.     }, L0 X  G8 J) Z, c2 s
  198.   }
    / F, l. H2 h) T
  199.   fp=fopen(FileName,"wb");2 ^/ c* o( L" I& Z
  200.   if(fp)  v2 k* H; N" A0 X9 n4 e- J' G
  201.   {
    & W% {: P/ C! g: W0 n9 E
  202.     fclose(fp);
    " _9 ~, S+ J* j6 m" p; [, W
  203.   }/ N+ L# z6 K- F7 |
  204.   return TRUE;2 m1 J' e0 R4 t8 k4 @, N) W* j
  205. }: O: a- j$ t1 T/ \
  206.   N) _" H7 O* m5 i* O4 X) H( P
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    9 g3 q6 @9 P  P7 D
  208. {
    / D5 C  [: V( j4 m1 ~
  209.   char filename[MAX_PATH];4 t7 d" ?+ Y: e/ E% h0 W
  210.   LPUPDATEFILE file,olds;+ T0 r9 t5 s: N+ ?8 h% D
  211.   std::map<int,CString>::iterator i;
    6 S4 w% z% b7 _$ p+ W' a
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! E$ ~) s' m: L
  213.   std::list<CString>::iterator l;$ d: Y: `" z) i3 n( ^
  214. ) J) b: N9 G# x' g# q
  215.   if(bFirstUpdate)- L/ @4 ^3 w( \8 R8 J6 x
  216.   {3 G7 ~# g: c3 t; f, z7 I! m
  217.     dwCurrFile=0;
      C+ N/ W. P! S' N; J" K
  218.     bFirstUpdate=FALSE;3 [7 F+ c# c  ?5 J) ]1 c
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 L1 p4 ^0 M+ V, j+ O7 s
  220.     {
    4 B& D1 o7 Q8 E( v* @0 r: s2 t. M
  221.       dwTotalFiles=UpdateLocal.size();$ Y" v5 P% O2 u0 U
  222.       dwDownLoaded=0;
    ; E5 ~+ P( f% |& \! o' v  [2 M
  223.       bSilentStep=FALSE;
    % @. L  w7 o. X: N4 P
  224.       bCompressed=TRUE;
    ( Y5 w' x0 d/ a7 r6 G3 L" K1 T& }
  225.       strExtLocal.Empty();
    4 F  q- p7 b( j" |& A7 h
  226.       strFullName=(*i).second;
    # N5 y' B6 Y7 p
  227.       dwProgramState=AP_CONNECT;
    ( K5 B, M+ U# i# G* G4 k
  228.       return TRUE;" H& `& _6 p" Y8 ?
  229.     }4 f: D4 J' P9 i3 Y
  230.   }
    0 @7 H# l& w: O5 Y
  231.   else if(bRestartUpdater==FALSE)
    . R: n  i; Y: F& Q; F& n
  232.   {+ \5 \, l4 m, P; D# E
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    - w: G# k4 z3 c
  234.     {
    ; U& j( n9 [6 j" o) f
  235.       file=(*p).second;
    4 N1 X( ^1 O( C# y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    1 }: P8 S9 \/ S4 n  z- |
  237.       {! p  o) I2 e  k0 {
  238.         olds=(*p).second;
    2 |/ y0 P, }8 @# Q2 t6 S
  239.         olds->vers=file->vers;. `( t7 e9 T3 S9 c
  240.       }# w% Q! p" t) w/ `
  241.       else
    + C  A. Z! m; v. _
  242.       {# n/ s( J3 m, Y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 i; ^' h3 E, D0 Y8 M
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    7 Z9 L( B9 k$ _9 `% c: E& ~
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));9 Q: K; h( V5 S( R
  246.       }
    1 W5 P! G" s( \) ]. B
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");0 H5 |' L+ D9 h
  248.       sprintf(filename,"(%s)",file->file);
    ' W- K5 P7 c" g1 J: [7 n
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / i) O" C9 F# ~; j6 O" z' }
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    6 u( g" ]( M8 v1 Q( k3 Q
  251.     }
    ; e2 h1 z+ p7 H+ B( }9 H# _! Y
  252.     dwCurrFile++;. u9 E' g# A8 _# j6 \& f
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - f0 M5 H4 h. i! R6 ?0 J# F4 s/ y
  254.     {) m! Z' c; J0 M" K, M/ V
  255.       bSilentStep=FALSE;
    + ^4 j6 J9 r1 D: k* }8 `
  256.       bCompressed=TRUE;7 T) X& x0 U$ }1 f1 e  {" v+ F0 w
  257.       strExtLocal.Empty();" ]4 r- M3 t" c0 }2 z  ]
  258.       strFullName=(*i).second;3 a' q6 h3 b# l
  259.       dwProgramState=AP_CONNECT;( m% g& \# z3 ?* Z1 x3 s3 z
  260.       return TRUE;
    0 Y( p' w* d. S; I; a% i
  261.     }) z- I- n: n* J. G3 q! s
  262.     if(!bRestartUpdater): z; Y! @. N3 M& P
  263.     {3 n, E4 a; h4 {
  264.       int iCurrSize,iFileSize;
    % i3 m% K% q3 m8 r
  265.       iCurrSize=0;6 U( |$ q6 n# \- p4 R* z( C. p
  266.       iFileSize=UpdateList2.size();3 I+ `/ G- [: W7 O2 j
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");2 z0 w7 L5 x- j  O# C" v1 x
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");& D  o- q) c  Q+ M  S% }
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");. @/ N! p+ k4 g. |
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 }; I% `5 v; L; H& l- b( K& I- A1 C( k
  271.       Fclearf(".\\update.dat");
    $ @6 L2 M( j7 T8 l0 j  A
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ) x4 F- R, |' f
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 P7 R+ k- J/ ?& N# G$ ^
  274.       {
    9 |: R) v" a( L2 k8 r
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    " }( B; S  t" I$ f
  276.         {, V! T( e3 s" [: M9 v
  277.           file=(*p).second;
    1 `- n( `7 u# P
  278.           sprintf(filename,"(%s)",file->file);8 ]  d  ?0 C/ a4 ^; G4 F3 e
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 u& y5 w' I8 ?* _7 Q
  280.           iCurrSize++;/ c* _) P& \6 p: t+ X  g# O
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    7 f$ a/ w/ K9 B7 J3 m9 r9 Z8 V
  282.         }
    & R5 ]- E6 ^. B4 q' |( e
  283.       }: A% W, c% o* X3 P# X+ }+ @) K
  284.       unlink(".\\update.txt");# ^8 k; V" J0 o$ [+ G( U
  285.       unlink(".\\update.tmp");
    - g! q# u2 y% j7 L0 h/ o- C
  286.       Fclearf(".\\checkversion.dat");5 W8 V+ [/ g9 s8 J) F$ U0 C/ F
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);5 _  c6 N. p  d; f# t! `) v6 v- I+ K
  288.       if(UpdateLocal.size())
    6 J" h+ i! T1 D/ [' V2 S" G
  289.       {
    6 S  _/ L& V, J+ H9 z. j8 o
  290.         UpdateLocal.clear();
    ; A" l" @. C! U* z( v' y
  291.       }5 z; s# R8 ]/ ?* x) l
  292.       if(UpdateFile3.size())
    ; F5 z& j- o& |3 G( U% f. B
  293.       {
      F# ~6 ^0 M3 s" C2 M5 i% p
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( b6 Y" @, L. q5 d. t* ?
  295.         {7 T8 |" p1 h1 [) T
  296.           file=(*p).second;
    ! i% b* u8 s  T3 K
  297.           free(file);
    $ U5 O+ G% w0 [5 x  {
  298.         }  L6 i, A1 V1 P- s
  299.         UpdateFile3.clear();: S) o5 }: b, A' P0 `: s* F
  300.         UpdateList3.clear();
    . d. Q, u  T6 q2 e( P6 y
  301.       }
    8 G2 x) T# f( F4 n( a, \
  302.       if(UpdateFile2.size())
    ; W" |/ l9 _$ l6 }9 q" _9 Q
  303.       {2 L+ y2 s7 ~- {; f: M& N% B/ `
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 [# ~6 P' o& N# ^
  305.         {
    " N, o: X9 `7 X8 O- {, ?( R
  306.           file=(*p).second;$ f" [" M- J7 {- S% R$ @0 P
  307.           free(file);* f9 k4 ^0 K3 E# @1 Z# w
  308.         }
    , W) g) P  D- W: P
  309.         UpdateFile2.clear();
    8 V6 Q1 p3 V! H8 ?, i1 {& |
  310.         UpdateList2.clear();$ C) {4 C- f; H. Y- z9 @" r+ J9 j
  311.       }
    9 Y8 H3 m7 F: b: B8 [/ {
  312.       if(UpdateFile1.size())
    6 n+ {  ]' U+ m
  313.       {9 p9 h* o9 ^8 _1 p
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    4 I+ w# ~. T+ l; F( X2 p  l6 M' `
  315.         {" _5 v& {/ k  Y  o7 \2 B5 [
  316.           file=(*p).second;0 L* f( ~9 O6 l
  317.           free(file);" G% P& G/ ^, b* N6 d2 Y; c
  318.         }. Q* Z9 O, S8 x7 Q2 A8 ^
  319.         UpdateFile1.clear();8 ~/ D/ @) T& _
  320.         UpdateList1.clear();; R3 p2 ~# G8 w
  321.       }
    5 {  D/ c6 Q* E0 }* i
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));$ s8 Y' r# j8 Y
  323.     }' L: u7 D( b. A# g7 Z: M
  324.   }
    + `1 T% R2 L2 y, x2 f2 [/ X# ~
  325.   return FALSE;" E2 n3 [* b2 }; M8 U& `
  326. }! Z+ d# o* u- G. w5 Z) s7 u) {
  327. 0 a) {& e( Z0 W1 B
  328. void CRevAppApp::ClearAll(void)( [; p9 L  \) E2 x( L5 O" Y
  329. {
    0 g; k) P( X# w
  330.   LPUPDATEFILE file;
    * U# S( o  o8 j+ e, l# B
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    , P: y% n2 k; Q1 v1 ^, p& s

  332. 8 ?) w' O& b* r! z. a; t& I
  333.   if(UpdateLocal.size())
    : l; U3 b  }5 R: }
  334.   {
    " F, \  H, \5 i$ x5 T+ J
  335.     UpdateLocal.clear();. H/ k7 P. j  Y  y' E
  336.   }
    : b4 [6 V! t. f+ P# s& S
  337.   if(UpdateFile3.size())/ q% f1 c0 x. [
  338.   {# U3 i4 b7 i  B- f, f" H+ a
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 r/ \/ r; C! d  T; g) D; k* o" [7 N, O
  340.     {
    . Z0 Q) H# s& ^# z! z
  341.       file=(*p).second;; ], U: n! j8 ]+ q! y7 y# o
  342.       free(file);6 b( I3 [- f6 W( l0 ~4 x. |" O
  343.     }
    9 B: Q+ t/ s) ?  m" D% }: T
  344.     UpdateFile3.clear();6 L1 O; [# l! y; O3 s
  345.     UpdateList3.clear();! _: ]  G7 o0 @5 D& H! {% a* c
  346.   }$ }$ C6 }; m( `. _0 X* u& \6 h
  347.   if(UpdateFile2.size())& O( Y& `( y2 w
  348.   {6 I( D$ ?" [3 O/ Z4 O1 g
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" `3 f/ l' G0 D% \7 @
  350.     {. F0 M' C/ g; B5 u; \. N
  351.       file=(*p).second;
    ) a" U: h9 P: a
  352.       free(file);1 j7 F4 c! d3 q2 Y! K; I' h# w
  353.     }" B8 y9 l0 V# a1 Q
  354.     UpdateFile2.clear();$ M+ }1 c. r& e' B# s7 z: `
  355.     UpdateList2.clear();
      x$ X: R/ r  o% f$ l8 y
  356.   }
    6 t% c' \7 J" t9 p6 Z4 C# d
  357.   if(UpdateFile1.size())
    ' C$ t" \. `, l4 p- m7 j- X
  358.   {
    " f* A" U" o5 k2 E
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), h9 p1 ?- o: b# |# v/ c
  360.     {
    & ]/ A4 d6 @/ S
  361.       file=(*p).second;
    8 u7 |" Z  F* [* C
  362.       free(file);
    : L% X9 a. N  m' |! C
  363.     }
    " x/ D) K4 K; p! [& o9 a! F) v8 O( e; i
  364.     UpdateFile1.clear();1 o. g# k+ P4 y8 M% Y5 f' H
  365.     UpdateList1.clear();
    4 r4 w0 v% m2 K9 I! g
  366.   }! E# x$ M9 y% v" A8 d- B
  367. }  
    2 u0 T8 _! W0 z) x" ^
  368.   
    9 B7 H! m' ~5 F- T
  369. BOOL CRevAppApp::CheckLocalVersion(void)- v! O3 \. A  l0 _
  370. {2 G: \  Y4 `8 l: N8 `7 E5 i
  371.   int c;, `1 O& u* K) K- y: L
  372.   LPUPDATEFILE file1,file2;6 P- q, c" @& [( c2 \6 d
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;5 @3 M$ I1 M7 j6 c" \- {6 c: o
  374.   std::list<CString>::iterator l;( c, b2 q' c3 _. l0 g9 B; s  a
  375. ! j7 M% v6 Z: _" d& Z8 {; P
  376.   UpdateLocal.clear();
    . B( `9 H0 Z9 t$ \0 Q2 ~; Q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);7 `5 z5 G' D: e8 ?/ n# M
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    " p2 f4 g( z! J% c) `" V" Y
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    8 D9 f8 y: a! |# ^5 s2 c& p
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);( e, s: O$ H% ^! B
  381.   if(UpdateFile3.size())
    2 \8 [% {* D: j5 X4 Y
  382.   {
    ' x. {0 V4 D6 h$ c6 W2 B
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    7 C' Q/ l! R: E
  384.     {
    9 f# g+ g3 u% ]2 x8 z7 {
  385.       file2=(LPUPDATEFILE)(*i).second;1 i$ H: N2 G; a; M  u, x: T
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  r; P6 o+ V  Z; `$ d7 r1 }
  387.       {' G2 T% b& H4 e" y2 x( r
  388.         file1=(LPUPDATEFILE)(*p).second;
    ( \, j- r4 j+ m; L
  389.         file1->vers=file2->vers;1 x3 T, H! O( N" e& Z- h
  390.       }
    + Z, H$ E2 c  s1 K/ R' I4 y: o% d7 x
  391.       else
    . U' f% Q6 O! T* r6 P/ r
  392.       {
    % c, {! b1 p2 c8 w9 S' v  D
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 B2 ]% |! `$ e5 I2 T' I6 t4 a
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));6 S: [0 `: p( ~' ~% }. W
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));; Y6 N1 Z8 ~( z' l- z
  396.       }! L% o% v, o: S6 Y7 D, c
  397.     }
    # M# \6 @8 ?. `# V
  398.   }1 D+ S1 W9 `' f! I  @/ _
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # y% o# f% ~4 t$ j/ Q. w6 X' Q
  400.   {
    & t+ F1 V. r6 {) S
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    6 c# Q# X$ f. |# F
  402.     {
    $ k2 [- S/ `( s& a3 [" o: o& Q# ?
  403.       file2=(LPUPDATEFILE)(*i).second;# h  T# r6 x5 g3 A9 T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + \6 C4 U' q+ t
  405.       {
    ' W! d0 p8 A1 C2 V5 a5 z4 b
  406.         file1=(LPUPDATEFILE)(*p).second;) t+ e0 r, Q. U/ i8 E( U4 X: @
  407.         if(file1->vers!=file2->vers). [. l2 P6 b' {* }5 l
  408.         {! v* {; U2 L9 ?
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 }4 b! v. F) {
  410.           c++;; G3 Q2 e8 v; k9 d# y3 F  q% e" b
  411.         }
    $ T8 @2 ~5 w4 v( ~; n* x# x
  412.       }
    ; X' @7 X' j( z% r+ |: y1 r
  413.       else
    + ]+ V+ a) J# Y  o6 X7 F
  414.       {
    # Q) l+ b* l, ^" g/ ~. R9 G7 P
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  \0 J3 l; t, D$ h( g# q
  416.         c++;; p6 Q# J: c0 `8 h
  417.       }$ M, [8 w' `' O: c3 M
  418.     }
    - G; o; b7 X, i$ u' k
  419.   }
    ! J  t- d' I9 \; N) A2 ~
  420.   unlink(".\\DownLoad\\update.txt");/ C9 i; \) h% G2 N% P8 ~
  421.   if(UpdateLocal.size()) return TRUE;
    % s6 n) ~8 Z2 [7 @$ J0 O
  422.   else                   return FALSE;
    & ^2 U. p7 d2 P* X2 k
  423. }, t5 R, i1 u7 G# |) {- |% I

  424. 2 O; \1 X. G& Q" Z% _! N* h1 `! H
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"1 X# S+ {1 ]) u; I
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"" A6 r# }" V8 E" h' I

  427. 8 h& r% M' w/ K

  428. ( [) E: p* k+ ?+ _

  429. ) e0 Z4 T$ c9 _8 T3 z! Z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    4 g' q- K" }+ S3 p" A0 D7 I. t3 ^# K! j
  431. {6 W7 w' c: C  ~  p, |: p4 j( Y9 p
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;% c# l: V( z1 G6 l# z
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      O/ b2 e% ~8 f
  434.   {
    3 b' ?9 b( `8 I* I3 n% Q* f
  435.     char szLanguage[50];' |4 W) O( `" x- S% F
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 M, p  r7 o! o4 i8 L" J( V
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " H0 Y! l3 [3 s7 L, E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ @; d& k9 h7 {5 g
  439.     else                                   m_iLanguage=ENGLISH;
    : h& h4 ^% \. G# u9 m
  440.     char szRegister[100];2 r9 b5 B% b" X' w- c
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      {# ?1 R) Z5 T, b, C
  442.     strRegsName=szRegister;
    5 d& p& ^( z, Z
  443.     char szPatchURL[100];! B+ a6 H( w. S3 @! C( z3 w4 V' y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 S$ N% ?& Q, e' Z1 w
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      K0 k- v- R( J1 h! _' I/ \
  446.   }
    2 {& \" s5 P0 ]5 O
  447.   else+ I3 E6 `- G- T  d- k& t4 O* g$ s
  448.   {. {$ ?1 `: H2 S% \( u9 l' C; p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 }5 A( ^, U  P5 [( p' r: |8 \% k0 B
  450.     strRegsName=DEFAULT_REG_URL;2 w6 Z5 S: C, f2 Q% \1 T
  451.   }8 i' {/ v8 R& T5 M; N1 F; w& [
  452.   if(GetFileAttributes("hosts.ini")!=-1)/ K0 H* G. Y; ~9 L9 J
  453.   {
    $ k8 V, M% E6 i0 d8 ]- ^, ]/ M5 v
  454.     char szIP[50];
    2 ^  X$ G' h) z2 `0 q
  455.     char szDIR[300];
    - O- Z) {. ]4 m
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% b# l9 |! O  D  F( {; ]
  457.     {$ V. n+ h4 {( E: d4 o( J, i1 T
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    - J4 h# ?# Y/ ]% q% \6 [) G5 Y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");( ~0 N; n. ^7 v% X, M
  460.       strHostName=szIP;
    3 d8 r+ l! {' u. O
  461.       strHostPath.Format("/%s",szDIR);9 M2 x% V# N# n: B
  462.     }
    * l/ t* y% K6 G! z+ p. J+ |
  463.     else
    " Q( |# a- Q; M8 P$ t5 Z7 A: @9 ?! {
  464.     {  U9 _* E% {& c3 b
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 x3 m# C2 X/ P% f: e( A" J
  466.       {+ v8 t# ?) z6 E( L3 a
  467.         char szLanguage[50];
    7 ^1 r8 \, c# y6 C9 j$ y9 C
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: [! `7 ?1 ?; i9 e) j* A
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ p$ L9 |& z3 x
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 v4 v1 v# H5 \: L7 U5 D
  471.         else                                   m_iLanguage=ENGLISH;! O& H( m! s% k" w+ t
  472.         char szRegister[100];* i" Z0 [1 K& S0 C
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) z! o" s5 x& k+ V# r
  474.         strRegsName=szRegister;
    7 Z7 K7 Z8 M* s4 M4 {( T: Q, q
  475.         char szPatchURL[100];
    9 `5 i' r3 B/ Y! O) V1 W
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % S9 W) b7 s8 J' p, u2 R. z! d# p' W
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);! F' A* J3 S7 k$ I
  478.       }
    : @) @: e2 [4 h3 ]3 @$ X4 d
  479.       else/ u4 t4 H. h  K4 _7 |
  480.       {+ [+ z4 X5 k) V
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . l8 d- ], V1 w5 M
  482.         strRegsName=DEFAULT_REG_URL;
    7 N1 W8 |1 ?: I7 l4 M9 r, R
  483.       }
    1 f2 _# A7 ?5 q. H# ~
  484.     }
    . X" d2 U- g. u" D8 i  ^
  485.   }; h9 B0 G+ {+ }4 v' l8 y
  486.   return true;
    , K2 s. P+ @* j! O, a% Y
  487. }
    5 R$ z& T0 X2 j4 N
  488. 5 u1 q* R9 L& k  J
  489. #include ".\ZLib\unzip.h"2 L  V4 m4 [9 m7 o$ I% ^
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);" S! P! [6 L! y+ H2 {
  491. /////////////////////////////////////////////////////////////////////////////1 l: J5 A* x2 D
  492. // CRevAppApp initialization
    6 f6 O& ?7 ?0 [
  493. ( \; L2 O0 C" a  l9 X" R1 P
  494. BOOL CRevAppApp::InitInstance()
    - P8 e* p8 Y, `" [  s# P
  495. {/ Q6 E  L2 Z' O8 W% u  W' P
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    7 ]9 a: p) w1 f: N, U2 A: c

  497. / O8 k! j/ W$ w( {  h1 V
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    + n6 x% ~: T- O% `
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))# W0 e7 b# X$ u5 O- [
  500.   {' F# ^( S) m/ ?) E. ]
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    " B- H" m: L* G- o6 s# w( o$ i: W( @
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    6 O) n# t2 \/ |
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))+ \" N9 O& C; y. I8 H) }
  504.     {* O; _' s5 q4 Z
  505.       strcpy(szPath,szPathTarget);; f% b* e3 P5 z) r  ?3 N1 |
  506.       SetCurrentDirectory(szPath);6 M: f! G; @2 [  U% N/ t4 K
  507.     }3 n6 j- n0 O9 P
  508.   }4 B4 r4 D+ P9 V% d$ U! d
  509. #ifdef _DEBUG
    * b) |! E. Y$ v" f/ ]
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 A8 W3 S/ c/ Y/ g' O. f
  511. #else5 i7 t0 A& K, O. [" T9 Q: c1 B/ f
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 b9 [  z* r5 ^# X* D) P
  513. #endif
    * v9 h  k3 ^/ f  y1 ]4 Y" G
  514.   {2 \- n9 k3 e5 p. r
  515.     char tempFileName[MAX_PATH];
    2 c3 e4 a4 N! ^$ s5 H8 k4 _
  516.     strcpy(tempFileName,szPathSource);
    4 y! A8 i  a% x# c* Y
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( j8 Q3 R3 d* G
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    5 [" t( }" g& D7 x
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);! x  q) M0 ]% N* R
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    $ D% j  o( T0 h; i' d
  521.     return TRUE;
    ' J+ a+ c5 o+ @" K
  522.   }. b/ z# F8 y- G6 Q" _0 P( ~- ^/ F
  523.   // Nuke 0118: Delete run.exe
    3 {7 o6 A5 g- d# X* J. S4 ]1 A
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );- d5 B$ Q5 m0 L/ r4 i2 M" ?+ o
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    , H! m3 r" W9 G$ Z% \
  526.   if(!ReadCfgFile("Config.ini"))! b, {( ^$ f5 z: F& A1 q7 w0 y
  527.   {
    8 D+ N9 u% h" E7 Q2 h
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);3 p* |- m) P/ B  _1 I
  529.     return TRUE;( o8 N9 b* F4 ~% i* Z' H
  530.   }
    ' S  e4 c  B7 d
  531.   HANDLE mutex;  E/ F( w% ?" h$ K6 S1 @+ Q' Q  I9 H
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")): b. l% ~% ?$ m8 q# d
  533.   {6 L1 M/ o, r& u; D* k: F
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ) R# ~2 G8 q4 D% e
  535.     {& u$ }, n* L+ y  f6 y" G5 T$ l
  536.       CloseHandle(mutex);
    & \( n# ~: w1 |+ h# T
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);6 Z0 ^' h5 o0 e7 k, {
  538.       return TRUE;$ T% j: s3 _7 C6 D8 V( \
  539.     }
    / m8 J! x; x! {+ B
  540.   }  
    3 ?9 G7 V! P, t  S1 X7 ^8 ?3 ~: T
  541.   CloseHandle(mutex);
    3 M2 k$ R) k0 Y4 E# Q& V$ e
  542. 6 P) A3 v! c5 c6 j. y- d3 G
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    8 P6 i) b% S% ~' r% A( I% l

  544. ) W/ M* e  j- \, p1 j6 {# b
  545.         AfxEnableControlContainer();3 A: Q. r5 s' [" u5 C$ Z8 Z/ }
  546. ) v) m: `- l( ?: s) E
  547.   bCanUpdate=FALSE;2 `; l$ U6 y; Z$ U3 A) x0 C
  548.   dwStartUpSteps=1;
    6 |3 k, c. o/ o% C$ L
  549.   dwProgramState=AP_NOTHING;6 x( @3 E) I7 |" _8 X

  550.   C0 Z% @* y6 A) c7 v
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);- `! s; {" A, e+ X
  552. & X. J6 E5 R9 z  m
  553.         // Standard initialization
    ; s' i" U! ?, a$ Z1 e. x' Y& |
  554.         // If you are not using these features and wish to reduce the size
    , \: ]0 c" z" Y+ y
  555.         //  of your final executable, you should remove from the following) W; X2 I* l! H4 D2 V
  556.         //  the specific initialization routines you do not need.
    6 ^# C/ w$ R4 n( f' g* T6 ?
  557. & h: O: `& b7 d8 v
  558. #ifdef _AFXDLL8 W" }8 Y2 T: W9 f
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL3 T. P3 r( J1 _! e% F$ x+ |
  560. #else0 B' j( T, e# q4 Z, P, g/ x
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ b7 I9 _) f' ~+ L9 b: h$ m( [
  562. #endif
    4 D$ Y8 ?0 q! ~
  563. 3 l8 @$ X0 Y5 A8 ?
  564.   dlg=new CRevAppDlg;
    : N( f$ [! b) z: L4 R1 b
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 {3 p% U: ]* k; k
  566.   dlg->ShowWindow(SW_SHOWNORMAL);# M; Q7 _7 m, o% h' x
  567.   m_pMainWnd=dlg;
      |) m& R, Y6 F( `$ M6 k7 ]0 R
  568. 0 m/ u- ]! V6 p% X+ d3 e' h
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);* J& I( K4 ^5 K, G+ t7 A8 u
  570. , U: H9 @# {" w3 ?' C4 Q1 N1 D
  571. //  GdiplusStartupInput gdiplusStartupInput;# z/ v( a4 t( ~& x/ }) U. B
  572. //  ULONG_PTR gdiplusToken;
    - k0 {& s6 q& l* p9 ]
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ( p; D5 Y0 [. f/ d

  574.   {1 V9 s: Q7 i; _9 N
  575. //        CRevAppDlg dlg;
    ( t0 o+ u" x6 {
  576. //        int nResponse = dlg.DoModal();, x8 I7 ?. G: z( ^9 }: M( Q
  577. //        if (nResponse == IDOK)5 o! \6 X: P5 s- d6 @3 B
  578. //        {; m3 f4 S  d: L( c6 Y3 u( i0 ^( y, [
  579. //                // TODO: Place code here to handle when the dialog is
    " J  R, Q% T- [' L# s3 t
  580. //                //  dismissed with OK! j) N# I0 q- K( R: B/ P# `! v
  581. //        }, W, {) }2 `: L. l% m' S
  582. //        else if (nResponse == IDCANCEL)
    4 T* S, j9 b, |
  583. //        {
    $ ?: [! U% [+ u
  584. //                // TODO: Place code here to handle when the dialog is$ p8 {4 l0 i5 O5 {/ S9 ~4 c; \
  585. //                //  dismissed with Cancel
    * V" X5 i0 I1 M% ?8 ]# D" k
  586. //        }$ ]# h6 _) Z" h: V4 B

  587. 0 d6 @" h' X, G- u
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    * L2 [; g9 ]" I% ^) I
  589.         //  application, rather than start the application's message pump.
    6 c  J$ ~8 k! r+ s; y$ X
  590.         return TRUE;
    , t+ o* `* v3 @
  591. }4 m1 x4 b* g3 m% |# t: D- r

  592. " Q! L' I9 p: m4 S2 Q- z4 P  E9 d
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    0 P* ?9 H" s" [4 x4 r* F
  594. {
    % n, G* `; Y3 u" z; F9 M
  595.   int i;3 G/ T0 R4 y/ i
  596.   char *szRet;
    6 y0 a" v5 ~* _" |" z+ x
  597. 5 z' ~! @  h8 p( n
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    4 |2 j3 A1 ^5 [6 x: C' C0 v( v
  599.   if(sztoken)9 v4 B2 k2 W6 Y# A; K  _6 N
  600.   {+ s# c  z( _9 X! X+ F
  601.     szRet=&sztoken[itoken];. ]9 p. W1 U* _; s
  602.     while(sztoken[itoken])
    3 C8 _! f3 j  q. S* {) P+ P
  603.     {. H2 b: m6 W6 o1 {+ u2 S
  604.       for(i=0;i<(int)strlen(token);i++)% i6 |/ @5 ~/ v6 r! M
  605.       {
      ?7 n8 k5 m% W8 J4 @/ e. Q
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])& ^: N# I$ h6 E
  607.         {/ }" ^: p+ M: ]7 U- }0 l% Q
  608.           sztoken[itoken++]=0;! o, m5 |3 ~0 s9 _
  609.           sztoken[itoken++]=0;
    & Q" Q* s$ }5 S. Z$ z
  610.           return szRet;2 h8 S# }+ l& I& l
  611.         }4 z9 g/ r1 a# }& v" i1 P8 k) b; ]
  612.       }: {, _% |% d& j1 L! g7 V) P
  613.       itoken++;
    ; E: S" v! T0 w/ c) `* W
  614.     }
    - T+ Y; t" C% z0 p# ?
  615.   }; m) V* R2 E- k! I7 U
  616.   return NULL;
    4 t- T! H# D, o. j
  617. }' A# a' G& P9 c& o5 s

  618. * h  N# P5 x0 n; p+ m/ I6 `8 Y
  619. void ProcessProc(long Total,long Current)
    " L& B6 U/ M- ~- `; @
  620. {, Q% J# f5 }+ a* b2 G
  621.         MSG msg;6 P$ `: b& s5 b' f# ^8 z" F8 E1 Y
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    & I- D# L8 N5 e2 G) D, j
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));- W4 Y- ^0 V0 P1 Q9 _- l
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))7 v1 t% V! e) V; k
  625.         {
    5 o7 q) l7 g+ g; _
  626.                 if(!GetMessage(&msg,NULL,0,0))0 L4 Q+ u1 _' s
  627.                 {$ V3 o5 c3 y. |2 o7 o
  628.                         return;
    - w! _" r- \' R4 |$ S1 G1 C
  629.                 }
    . F5 _; A0 p. e* v/ q3 t: H
  630.                 TranslateMessage(&msg);
    : e' o$ B, \/ m- X8 C" q! c
  631.                 DispatchMessage(&msg);. i9 R% }% N. v2 b' T' K  `
  632.         }        6 E. q! |* ~) s2 W) [
  633. }
    & Z8 u+ p& S9 k0 G; J; d
  634. 4 R* E: n1 m% {0 o8 R2 s
  635. BOOL bFirstChar=TRUE;
    5 F9 Z( M" U# b" C- r9 p

  636. 8 I! N6 Q* p" C" e& A/ y+ k
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    , ~4 I8 Y1 ?3 V& l, A
  638. {
    , ~; ~. @" J8 `% C( g
  639.         // TODO: Add your specialized code here and/or call the base class4 s5 \" N8 o8 P6 x8 h- |' V8 v2 I
  640.   switch(dwProgramState)
    * L6 O/ {! S8 L$ G' l
  641.   {
    ) X7 K+ J$ h+ D, {, h. g
  642.   case AP_NOTHING:
    ) j7 c/ ~* s. T7 U* h
  643.     switch(dwStartUpSteps)2 j' p$ w, _$ k& N
  644.     {
    , ]: c) ^1 O9 l( x0 h
  645.     case 1:5 m. d3 Z+ a, o: I$ `3 f
  646.       {$ O+ E& X. F& Z+ x# M. N, Q
  647.         int i;
    : s% r' ?  x6 x2 g, V$ _& }3 b0 x
  648.         CDC *pCDC=dlg->GetDC();% ^8 Z- C: X4 C: X
  649.         HDC hdcwnd=pCDC->m_hDC;, M1 u& I7 B2 ^6 w9 |  W
  650. //        Graphics graphics(hdcwnd);
    # o/ Y7 {" V, T/ J
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");- w; r& X1 ~+ y, r' b* `$ }
  652. //        INT iWidth=bitmap.GetWidth();
    + n6 l3 M1 f: z$ u  K2 H
  653. //        INT iHeight=bitmap.GetHeight();
    % _+ l" M% U) n1 r3 d. F! z
  654. //        Color color,colorTemp;( D/ Y8 t$ O% o/ q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    8 C7 ~% e0 r$ z
  656. //        {6 _! M* [6 _6 n9 x6 U
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( x4 `* v; g+ U2 P: B
  658. //          {
    1 z: H; e5 ]& A$ U7 R
  659. //            bitmap.GetPixel(iColumn,iRow,&color);& ~' ?* C4 ?9 {$ P$ J( Q
  660. //            colorTemp.SetValue(color.MakeARGB(; U. R/ k+ U) z
  661. //              (BYTE)(255*iColumn/iWidth),
    2 c. O0 {7 {1 I; m7 @
  662. //              color.GetRed(),& _2 u( L* C0 ?4 e
  663. //              color.GetGreen(),
    - \8 `& m, i( ]+ i
  664. //              color.GetBlue()));
    . D% r3 s: V7 q) [3 I
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);3 x; E$ j& x$ Z& v! s" d! v( ?
  666. //          }
    3 Z& Y% C; x1 {5 e4 }6 V
  667. //        }4 b) a4 }* c# A
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    & }  w/ f# j! S4 j+ S8 |2 ], {
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / p- k3 K2 Y* i2 ]: E$ w
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    0 ]) i! D) ^! [$ B$ e  S1 z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( D1 r! }( R& |
  672.         for(i=0;i<240;i+=8)
    ( g  }) W+ P. J, ?) I/ X& b  I
  673.         {  Y4 o0 u+ r# F! _' e5 w9 ?  c) B4 u
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - C$ k5 w' o/ j
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ D9 j7 @% N; i6 n$ q: K
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& Y+ @2 @* [3 }1 h$ u. J
  677.           Sleep(33);& C1 ]) G$ [2 i# e: d. [- m' v% c
  678.         }1 @8 K0 A0 V. q7 e0 e5 O9 i9 O
  679.         Sleep(1000);
    3 R# [+ ]0 B" \
  680.         for(i=240;i>0;i-=8)
    ) i7 ~' C1 a6 S4 p) ^
  681.         {4 k3 {$ z5 f( |+ T0 S  Y( a  l( h
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) Y6 v% z: @2 R' t1 @" R% B
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, m0 t: `2 s" b5 X( J/ d  g
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ X, Q- b6 W4 g
  685.           Sleep(33);# f' O& n; R4 V% K
  686.         }% ]  h8 d" K; t9 V6 [8 z1 N* Q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    $ d6 y! c3 X0 z/ A% _
  688.         dlg->ReleaseDC(pCDC);  o* K. T& {6 E/ O1 D, A
  689.         DeleteDC(hdctar);
    4 |( M) d  N& ]3 T" Q0 p, T* a
  690.         DeleteDC(hdcsrc);
    # }5 m' X* U3 ~8 v% J5 A
  691.         DeleteDC(hdcorg);& i# t# ~! U" m/ v* B
  692.       }; {2 ^  H5 x1 Z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);  B; t% m& B& H* W. H
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    0 g4 g5 M* B6 N: ~* }$ x& ^. X
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");1 I) m- p  E" t% k
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");, Z+ P& @% a2 O0 R  k% t
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# k* @1 A9 {2 L
  698.       if(!Dn.Connected())6 A. n. K: h) a, s4 {8 ^# t& P
  699.       {
    ) c  U6 H( F' Y& v' Q
  700.         dwTotalFiles=1;9 C% f+ |% ~  @  h4 t1 y8 q* M
  701.         dwDownLoaded=0;
    6 K8 n& I9 B8 d9 `6 {5 U5 i4 Y
  702.         bSilentStep=TRUE;
    ' Y4 i0 ?( f4 F# E
  703.         bCompressed=FALSE;
    5 m1 {" A$ u9 S" s. |& g) h/ v
  704.         strExtLocal.Empty();3 S# k4 y4 |$ q7 i; I; f
  705.         strFullName="readme.txt";. z& W2 h0 ?3 k* s4 V
  706.         dwProgramState=AP_CONNECT;0 P! _: ]1 ?2 H! Y
  707.       }
    ; c6 I* n& W, r- V. }* v
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    * g9 a& \5 h- `+ q  M
  709.       dwStartUpSteps=2;' Y3 c* H! P  G
  710.       break;
    " m8 D' _& B+ L9 W
  711.     case 2:; J2 W/ v1 N% t/ k1 P  M& `
  712.       {
    " u3 i% `, c# r& g  W
  713.         int iEOF;
    " a$ Q0 L8 p/ S0 ?9 y
  714.         FILE *fp;
    : f3 W+ W7 D) d. o0 Q: n$ ~
  715.         char szString[512];
    0 g' d$ `, ^5 j: z8 b
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");. C; W2 I; p2 `) A- w
  717.         if(fp)
    & Z* H, X5 g0 ]8 [! J  W
  718.         {
    ) n( g* ?$ p3 Z% J. ~/ i
  719.           do
    1 D1 k. D" K9 N
  720.           {
    / H& [) z: L; K6 s/ E
  721.             iEOF=fscanf(fp,"%s",szString);5 X% u: G: W/ j1 d
  722.             if(strlen(szString)): H; G9 ]. C8 Z+ B& q2 i
  723.             {( K+ q' j  g* w: l* Y+ N) S  M
  724.               if(bFirstChar)7 N" @9 P; [3 w
  725.               {0 j% Q. g: |/ T( e
  726.                 bFirstChar=FALSE;" N- T4 M/ t0 V& M7 y# q
  727.                 bConnectIsBig5=FALSE;
    / O) C$ ~$ `8 y' Z! a6 t/ a
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    - p4 B6 ~. ~- v& H, [
  729.               }
    1 A: ^# X8 h' g4 r
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    % m0 N! p' v4 N$ Z& E( b/ ^
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));/ V  T( X: E3 u  G, Z4 w9 I
  732.               dlg->m_ListText.AddString(szString);
    & i& U& b! U. W+ Q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: F. Q- P1 p7 ~7 r# P# U0 x
  734.               *szString=0;) k- e: \- f# s! c4 ~/ P9 D' V9 H% B
  735.             }$ n: K1 q$ Z' R, g7 P& S( Z
  736.           } while(iEOF!=EOF);* Q1 p, F! f7 i5 p9 Z6 ^% ?, y* j
  737.           fclose(fp);2 {! r4 z5 c8 S  b
  738.           unlink(".\\DownLoad\\readme.txt");
    # b9 r) \. y7 j$ h. T9 b, X
  739.           dwStartUpSteps=3;
    ) o7 n5 Y2 r# ^* o
  740.         }
    5 d% n+ }% }5 S6 M5 d/ w5 }/ i
  741.       }8 r3 ^& l/ c+ `* d1 m) N! `
  742.       break;
    3 c% @8 b4 Z- k( {" L4 F, X- M: |
  743.     case 3:
    ) t/ r' {/ f8 j5 p6 e5 l
  744.       if(!Dn.Connected())
    5 ~/ D$ G  S$ ^9 I
  745.       {, h0 _8 ~- S6 E
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    $ c$ ?4 J# D2 P) h. s0 r1 L
  747.         dwTotalFiles=1;
    1 v3 F  }0 g6 F2 y
  748.         dwDownLoaded=0;
    6 X& {  m# H, Q9 k; i7 V. I4 o
  749.         bSilentStep=TRUE;
    4 h! w/ g8 P% U- C* i( H
  750.         bCompressed=FALSE;$ [, S$ ?6 l. {: B' _) \- L
  751.         strExtLocal.Empty();& b6 Y, G: p" P! H
  752.         strFullName="checkversion.txt";7 o! v+ G9 L6 E7 U  h
  753.         dwProgramState=AP_CONNECT;7 \! ^6 a% o; D! F& F2 C
  754.       }' H7 C0 B" J1 i1 a2 w" Q) ]
  755.       dwStartUpSteps=4;
    : ~5 x* O8 E; s4 v' t* [
  756.       break;
    5 }: e5 z: O! h* s
  757.     case 4:
    ( R# H" v2 L+ c! K9 |4 h$ h
  758.       {# E# ?3 Z5 D( H7 ~0 q- p6 v
  759.         FILE *fp;8 E) h' J6 y9 a# x" l8 Q, [' }
  760.         char szString1[128];' U' J- r  l% Z# t
  761.         char szString2[128];
      u6 \: b* K  E3 q( B. v* ]
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    3 K; O  b; C" W! b8 Q) ], K- P
  763.         if(fp)
    7 |: \/ [2 f, N( _+ c9 M# e
  764.         {
    4 b, h; Z& m0 l, t# V, ?+ N
  765.           fscanf(fp,"%s",szString1);
    6 m& c9 d4 h1 e  J- {, D9 _
  766.           fclose(fp);
    / f) G2 j" M, _& u( n6 O- B
  767.           fCheckVersion=atof(szString1);
    * `3 _+ z/ ^# A+ p
  768.           fp=fopen(".\\checkversion.dat","r");7 m' Z# L2 R6 t2 M* a  F3 N
  769.           if(fp)
    1 `+ y5 i. ^9 ?' Y1 l: J  Y
  770.           {
    8 t2 S# q6 I, _5 z$ C- L3 t2 {
  771.             fscanf(fp,"%s",szString2);
    % P. |; U; F2 r& g: c8 h
  772.             fclose(fp);
    . a0 \: j' P) g7 f
  773.             if(atof(szString1)!=atof(szString2))7 Y2 b- B: q# X( R8 x4 P( E
  774.             {
    . ?; d2 x% n8 N7 e
  775.               if(!Dn.Connected())/ W) V! T6 w/ K. v
  776.               {
    ! s3 A, \. z+ ~& H2 d$ [. [- |7 y3 Q
  777.                 bFirstUpdate=TRUE;: c7 z8 R( @& f. [! S
  778.                 dwTotalFiles=1;& q' S2 \) D+ f3 m! j' m
  779.                 dwDownLoaded=0;
    - r+ |  g' N) J; X! u2 v
  780.                 bSilentStep=FALSE;8 n/ `5 T5 j8 h2 {( M
  781.                 bCompressed=TRUE;
    0 G% @  r4 _/ z$ ^5 U) c
  782.                 strExtLocal=".\\DownLoad\";3 V6 V0 E; t) s/ v
  783.                 strFullName="update.txt";- `% {4 S; D/ t1 V0 _7 [
  784.                 dwProgramState=AP_CONNECT;
    $ ~# S7 T: M* y1 h" t8 s
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 o0 `! p; v1 M
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 _" j% S9 Z. w  ^/ _) n
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");, c4 g8 K4 ~; U

  788. ( j; B8 Z; H, s, y+ p
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  _8 x9 n/ O5 N$ X+ C. D
  790.                 unlink(".\\DownLoad\\checkversion.txt");+ [! p  T) L/ Z, o
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    . Q4 R" K. J% y. b+ P( |
  792.                 {
    0 w3 D5 W; M7 D' P
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : t# a: g% C% L, [/ `/ H4 Y
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");. r& V+ ]% j7 X2 D8 ], _% z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");( Q. m: p$ F& i) [: B
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  V+ _5 d/ K5 V9 v
  797. / }/ f4 v/ }( v7 M  S
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , {( H) v  n0 f
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& q- e5 d. d0 b* ~0 K- K
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");1 Y6 ^$ a, k0 P" V/ [
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : U# R; \/ _. a1 L# Y: q
  802.                 }$ v1 R, |, ?( A/ _
  803.                 dwStartUpSteps=5;
    $ B; P6 Y- ~6 e
  804.               }
    + A/ j" Z9 h/ ?; e
  805.             }
    " R  Q, N9 k( a" \# m9 h; m% r7 p; F
  806.             else
    3 V' i7 e3 i$ z+ l- r
  807.             {
    4 L6 }6 @+ X& a2 {+ G
  808.               unlink(".\\DownLoad\\checkversion.txt");
    & t7 A" Q+ _2 H
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");" R: q2 b! c$ a6 r8 [
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");0 i1 c* b: `7 o: m! D6 p: O
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");7 q9 L. t- t0 c

  812. * r# ]/ I+ q; ^* |* n
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! w8 C' F4 l$ r& i8 v
  814.               dwStartUpSteps=99;
    1 L$ t: {( I8 J. A( J
  815.               bFinishUpdated=TRUE;
    0 H" L9 F. F; D
  816.               bCanUpdate=TRUE;% B4 \# r% O% O4 N; t
  817.             }8 g* x. b* J3 A6 b- w8 G
  818.           }' d3 ^* u. [" H: n+ j" Q
  819.           else6 Y# y5 K+ I8 L8 ~
  820.           {: |5 X' [# p: ~0 S1 i( T
  821.             if(!Dn.Connected())6 `" j& w$ s0 u7 m8 b( W  }
  822.             {# r0 N# t) ]( P2 J6 ^4 j0 c% t4 z
  823.               bFirstUpdate=TRUE;, ]3 G  a9 {# n# {( h. M
  824.               dwTotalFiles=1;6 R0 @& L3 D2 t% W( I
  825.               dwDownLoaded=0;8 r+ \7 g! J% `& M6 J# O$ a5 P$ T
  826.               bSilentStep=FALSE;+ s9 ~% O$ D4 I6 @
  827.               bCompressed=TRUE;
    : n1 P' F/ l" ^) k, Z
  828.               strExtLocal=".\\DownLoad\";, ]% w) c* m3 |7 W  S- E+ P
  829.               strFullName="update.txt";7 s: H; `0 `0 A& s6 d
  830.               dwProgramState=AP_CONNECT;
      c% R' z8 m- h5 _1 @; \. q4 m/ e
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");# s% m/ [& @4 t  U- W( o! Q
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - ?6 f+ w$ C% F# C1 e# v  l$ E& b- N. q7 F
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");- H6 ]4 T- v9 T' A- R! J
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & O; Y6 |# I7 s+ Q+ N  o
  835.               unlink(".\\DownLoad\\checkversion.txt");! j0 d% _! x* L2 s" H/ G
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)2 z; Q3 ]- `) O( z  u
  837.               {
    % C7 v9 O1 Q  K
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");  g$ z3 G: \9 m5 y0 h' [% Y& ?
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ( G* s- y* Q; X8 C, p, t
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");2 p) K( v0 [. I2 s( J; |
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 B5 o% V, a0 @8 c
  842.                 % ]  X4 Q3 I: ~# X! f% {# |
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 D& X" p: ^5 }) |0 K( [2 L
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    8 m9 f& M' ?( S6 J" `" ~
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");8 x3 c' F5 {+ [# ^% U
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' W, r  v8 r( R3 V4 T
  847.               }
    * j& W4 J7 g$ e& \% l' O
  848.               dwStartUpSteps=5;5 g3 B2 d6 D$ l( M
  849.             }3 Z( U  e: L2 r6 @( N
  850.           }
    6 I- q8 {5 s! g) F. a) s
  851.         }  R1 S# Q" v7 y0 B
  852.         else! k0 O6 O' d0 B2 N
  853.         {+ i. H" U+ H7 @. w' z
  854.           dwStartUpSteps=3;  O* ]- v* ]/ x- U* Q4 N8 A4 [
  855.         }, f  i" z) l4 s/ m: G
  856.       }7 A2 r* b+ X, Y" x$ J
  857.       break;, _4 q% ^9 V" i* ?3 b0 c
  858.     case 5:- I$ y6 A6 p* C5 G4 K6 s, }
  859.       {
      d2 r0 o8 K5 h9 o" |' V, w
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    , t" r3 X3 k+ T$ k
  861.         {' p/ b8 d" P* ^  B
  862.           int opt_overwrite=1;5 ~8 S) m4 ?2 E- U, b2 q
  863.           int opt_do_extract_withoutpath=0;6 I! {% X& K& |3 D
  864.           unzFile uf=NULL;
    ! Z! Q. }5 M! \0 E7 b. @- _; E
  865. " C( _" Z7 \) r+ n2 F
  866.           uf=unzOpen("Wsa.zip");
    $ ]# x0 @4 `0 ~% Q8 L
  867.           if(uf)# k+ o- L- g4 ~( J: r: y
  868.           {
    & R2 E1 g# t; K
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ' n1 V2 @9 d0 x7 P6 [$ ^, K
  870.             unzClose(uf);& ^$ ]! l/ n8 q$ u. K
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");3 \" h) O  U3 _7 J0 j' O
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    9 ~5 h! Q- n5 v1 Q# \* ^
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    % z7 o% [" g6 G# r" g
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& p5 m  u  d3 U% y! ~
  875.           }: e* I# k, B# i* a: X# m0 u8 s) s
  876.           DeleteFile("Wsa.zip" );
    . A8 }4 x: o, {2 P# b/ V8 f
  877.         }
    1 r% j" s5 y- u; M# N; d
  878. : V! s" E/ L7 Y  G
  879.         if(CheckLocalVersion())
    $ t9 l9 D( C9 g0 d/ c
  880.         {
    ) g" k) u: l4 K
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ' F( W3 g: U7 j1 |  ?# V! Q
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    / z( v" ?! [- d0 b
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ( x7 G8 X; {" V" k
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : T' w1 Y3 R: Z5 \9 ]& S
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
      C0 r; m: D( u- P# c7 f3 w
  886.           dwStartUpSteps=99;
    + Z" j9 f4 F. U- M9 }- U) k7 k
  887.         }& N3 X6 u" I  ^7 w8 w7 S
  888.         else
    ( ~6 C) n: z+ E
  889.         {
    3 s! m7 o# z" i- a$ S4 u5 W2 d5 M
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: T2 y- V8 p' T  r
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");  T8 ]8 h1 m3 J3 z3 d
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    , E- u- @( R% W. B6 E

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

) H9 e6 E) E' b5 l# f, L% V5 l8 L, p: a$ q+ m) u* ^

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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