找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
; U  q* X! X$ p* f1 O4 t  I5 `8 a
  1. / RevApp.cpp : Defines the class behaviors for the application.! P# H! N0 H+ R+ b+ j, a
  2. //2 q6 A% i% E0 O, J& |) r% B7 P' K
  3. + |  P$ G, ?8 M
  4. #include "stdafx.h"/ w; k3 }. M. x9 {; z7 {
  5. 1 F6 F  K6 h- @& y* l. ~! a
  6. //#define UNICODE, h! O8 n/ p; `& O
  7. //#include <gdiplus.h>
    & ^8 J, X% x( Q' R1 d% P
  8. //using namespace Gdiplus;
    5 Q1 J* T. m: a9 f7 ?& E! Y' {
  9. , [" Y; a( A9 J/ r$ j# ]; S
  10. #include "RevApp.h"* ]) Q3 B% G" l
  11. #include "RevAppDlg.h"
    * `2 B$ m. B& W- o  h/ Y/ L) s8 d
  12. ; Z/ L' |5 j# m9 ^$ |4 F
  13. #pragma warning(disable:4786)$ [$ {* E; k2 Z* y; W4 m' m5 a
  14. #include <map>
    8 ?. \7 Y9 M# b
  15. #include <list>$ m, |! T( y9 V. e! g: d
  16. #include <direct.h>2 `) I6 h* v& p# ?
  17. ) u8 G" O6 @7 }8 K
  18. #ifdef _DEBUG
    ; k+ p7 M4 R! l+ z( n, F
  19. #define new DEBUG_NEW
    7 L9 b' a+ l+ i! N* n
  20. #undef THIS_FILE2 {% ~( q  B/ A! j" v! p  K
  21. static char THIS_FILE[] = __FILE__;9 c7 o0 J& [# {& T- w
  22. #endif& P/ P0 ?9 ?/ Z3 Z2 K# |
  23. #include "SkinResDef.h"0 o' i# l! |4 v4 Y* i7 u: w4 x( V( i
  24. #include "ChangeBG.h". f, R: N+ Z( w; U$ b, d. {
  25. #include "AFXINET.H") y2 D2 r$ k0 t7 d+ `0 I! ^5 t$ `

  26. $ `, D7 `3 r$ u9 B/ j5 y; Y. o
  27. #define TRADITIONAL_CHINESE 0
    ! R7 r8 e. V% A7 b) D- M' |% E1 R
  28. #define SIMPLIFY_CHINESE 1& r; y/ N1 u3 L2 u. j' }, a
  29. #define ENGLISH 2
    ) x' O' N# X5 m8 t9 y
  30. int m_iLanguage = ENGLISH;0 a) l! A0 ?0 _/ d1 @2 j7 E
  31. /////////////////////////////////////////////////////////////////////////////
    , k! E/ x2 p* t' O: J
  32. // CRevAppApp8 T! j. \1 o1 j( E5 ]6 ~) }8 Y
  33. ; M1 H3 f& E( Y  q5 \4 M
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)0 L+ y: N0 r; x& N
  35.         //{{AFX_MSG_MAP(CRevAppApp)+ E* r# Z1 k+ o) w0 }3 P$ B
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    + R) D/ B* _3 J# P
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
      a. v; R! Z2 S5 x, x9 q
  38.         //}}AFX_MSG7 q7 F# j: l# J! z" I
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)# p7 R5 N' A' h2 @! c6 @; j( ?
  40. END_MESSAGE_MAP()( J& u9 m4 o; D2 F3 v: U; s5 W1 Q/ n
  41. ; h8 |: r, e$ s2 P
  42. /////////////////////////////////////////////////////////////////////////////
    % M1 ^  e; K" L/ G
  43. // CRevAppApp construction
    5 J( J( T7 o3 ~" m

  44. ! n, ?& o% ]2 i8 B9 @
  45. CRevAppApp::CRevAppApp()6 q+ v7 d! h1 D
  46. {
    ) ^8 a( ]+ O; G% e2 s1 t% x/ [
  47.         // TODO: add construction code here,
      O9 O8 `$ g" Y  l- G
  48.         // Place all significant initialization in InitInstance1 n7 i* _- t. o. I( u
  49.   bDisplayIsBig5=FALSE;/ S# P7 s7 Y- H( X" ?0 f$ g
  50.   bRestartUpdater=FALSE;
    9 F. W; o$ e3 y# X! k. L
  51.   bFinishUpdated=FALSE;
    : S4 [& k) U% T% h. V7 s6 Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;( o& @9 R7 ~% A' Q3 {
  53.   InitChangeDataBig52GBKS();
    $ e. Y$ n% w- t: [1 ?: g: F
  54.   InitChangeDataGBKS2Big5();! h8 f+ M7 h$ {6 W4 H+ t
  55.         //! Q& R5 s! i: p
  56.         bClickRunExe = FALSE;
    ) {% x3 h, E" r8 B
  57.         //% }4 r% @) y4 O9 v
  58. }
    5 P7 I$ n0 J# z/ x5 B- x
  59. 2 d% @, @# S$ t6 N4 M  H2 Y  N
  60. CRevAppApp::~CRevAppApp()
    % R% v6 }3 Z% r% o2 G. Z$ ?
  61. {4 \5 f: H" _# s- M
  62.         // TODO: add construction code here,
    2 h2 P* h3 h/ O) O9 J  E# G
  63.         // Place all significant initialization in InitInstance
    ) f8 K- r# [% U+ w$ t& c* Q0 |
  64.   EndChangeData();
    ! [: @* O+ f( ^- t
  65. }
    # f( W; T0 ^- x0 ^0 @6 I( F
  66. $ W1 R. a! e" u9 ~* Y7 z
  67. /////////////////////////////////////////////////////////////////////////////
    2 f$ d, R7 y1 g( U) t8 x
  68. // The one and only CRevAppApp object
    : M! o2 c* a6 ], m

  69. / q! Q  I; J" ^9 h  D
  70. CRevAppApp theApp;+ k  V; T- O  ]3 O
  71. ! ?& P; {  G5 @/ T% s* {
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    / N2 \" a# n5 Y) t: Z8 P
  73. {
    8 h* g6 z! ?6 W: E5 L: v, Z
  74.   int iEOF=0;
    9 t2 J; \3 ]- I9 s6 M
  75.   char szTempName[MAX_PATH];9 t; j4 l) K& z  j2 o. J5 }
  76.   *szFileName=0;+ ?( u( c  |- K' }5 B' f" s
  77.   iEOF=fscanf(fp,"%s",szTempName);
    & q. Q3 _4 `( T1 ~3 H
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    / z, D4 x; Z. X' [2 s7 s
  79.   {
    8 t) d  }# n5 c; B* p, M
  80.     strcpy(szFileName,&szTempName[1]);
    1 Z% y0 J$ @/ w$ _" J
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)7 r7 x- \( ?* {
  82.     {( n7 g& S& L1 @" E) L# h; R
  83.       iEOF=fscanf(fp,"%s",szTempName);- v$ a' o: i6 ?1 u& _9 x* s. l
  84.       strcat(szFileName," ");4 T5 e& S) \" n2 h/ P
  85.       strcat(szFileName,szTempName);
    : W+ V! X, y& x- F8 Q
  86.     }; L# r6 B- q, u8 F
  87.     if(strlen(szFileName)>=1)  E) }! `& \) l, o
  88.     {9 y' s7 H7 Z$ m3 E6 F$ M8 {4 y
  89.       szFileName[strlen(szFileName)-1]=0;: [2 @4 A+ g4 Y/ m+ }
  90.     }6 M, w) ~) D9 g) G2 c2 ]9 B( k* M
  91.   }2 V0 D- o1 @) z! j
  92.   return szFileName;
    / I+ X) t* r9 p
  93. }+ s) F. v0 R' G$ z$ [

  94. * ]: X9 B- `( w
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    - Y5 r5 a. d, @0 r
  96. {0 n; ^4 v" p5 `9 |6 F# p
  97.   FILE *fp;
    , x1 h% q  `# }3 k% C  g
  98.   char *key=NULL;% V: Y  X! x) d3 b+ B
  99.   char version[MAX_PATH];
    ) t( r% ~9 t7 Y' V5 T
  100.   LPUPDATEFILE file,olds;
    ( ^4 ?7 e+ a1 F+ e& F) d/ ?
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    : b$ z. @1 W" o  @) w& u+ i5 n' m. k

  102. ! R2 `7 K2 ~: `
  103.   UpdateList.clear();
    2 g0 w. K! V# f) I
  104.   UpdateFile.clear();" O- x2 \' V! d% E/ b+ c
  105.   if(GetFileAttributes(filename)==-1) return false;
    0 |, q" @2 r- Y4 u
  106.   if(!(fp=fopen(filename,"r"))) return false;/ }* j2 ]2 m" Q3 Y, d  E
  107.   fscanf(fp,"%s",version);
    5 l) u( L5 b9 H, g4 ]! C) G
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }3 D0 ~% Y' e2 L2 R! `- R
  109.   while(fscanf(fp,"%s",version)!=EOF)4 |  `! j+ g4 R, |* ]
  110.   {
    $ Q9 x; a( a! b- Y" U" n. t' j
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 {& \5 I- R$ u' ^! ?0 b
  112.     fscanf(fp,"%s",file->path);
    - a2 v  D( f4 a- d  d2 q9 j
  113.     ReadFileNames(fp,file->file);
    7 e; x8 s8 _9 Y1 }
  114.     strcpy(file->full,".");! _4 o) W5 Y; |( ?
  115.     strcat(file->full,file->path);
    # ?6 _$ _. _1 j. \  L3 Q
  116.     strcat(file->full,file->file);) O6 |! `6 }  R7 `- A# o! n8 l) J  {
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    * z; C: n" v2 r& i
  118.     {
    3 g7 b2 e* Q' }: Z" q' m" B7 g
  119.       file->vers=(float)atof(version);- S& H0 h0 I9 d  B$ B. ?
  120.       UpdateList.push_back(file->full);
    + d3 p! |2 I, Q" k
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));3 {6 J- i- H4 U  @& g
  122.     }0 A" \3 D6 b( T* M/ B
  123.     else
    9 j+ w" T! x* S) D: |+ I7 A0 n
  124.     {
    ( t, O. G+ H& O( [( P# ~
  125.       olds=(*p).second;
    8 V  L! y& P* z/ d8 l, o$ Q
  126.       if(olds->vers<(float)atof(version))
    8 L. Q3 U- y3 l
  127.       {
    / X7 Q% o5 [/ f8 F2 }/ d
  128.         olds->vers=(float)atof(version);
    : m5 z* {& q7 u; o0 Q- |
  129.       }
      Y' x2 S% x9 K. @9 b# j
  130.       free(file);1 S2 E; A# Z3 \" {( p
  131.     }$ K" E) U& G0 W& ]
  132.   }- h- h# L; H! k- `, f
  133.   fclose(fp);, w. _: I, U) o$ {- L( r  A
  134.   return true;# q2 o1 x5 l; n" B7 L; W
  135. }+ z: K( D7 U( s7 o
  136. " U2 w# R) z  J9 k
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    : w* e4 i& V4 d
  138. {
    8 N* ~# w& o) U% v) C: b
  139.   TCHAR  szFull[MAX_PATH];
    ) H& A9 X2 q9 S9 S/ G' X: @, t1 ]
  140.   TCHAR *token,*inter;
    * e7 }, K, D; T/ v! p" e- F! A# i
  141.   *szPath=0;
    ( Z+ M+ R' a1 h* N) }- G+ R, [, B; T
  142.   strcpy(szFull,szFullPath);8 e' w6 }6 h% D5 B
  143.   token=strtok(szFull,"\\/");
    . t$ u  ~6 o( \$ O4 z
  144.   inter=token;+ I5 k' A5 B; M1 m
  145.   while(token=strtok(NULL,"\\/"))
    * L2 y6 @3 e( L
  146.   {8 E; N9 Q. R* Y
  147.     strcat(szPath,inter);$ }0 j  r3 f7 z8 B6 A, }
  148.     strcat(szPath,"\");
    7 V. I5 _# U  ~
  149.     inter=token;
    , ^7 ?8 K3 N1 c
  150.   }
    2 Y) Y, B+ M3 I! x5 V/ X" d
  151.   return strlen(szPath);+ k4 N$ Z- y$ `( d( `! E; P" q
  152. }
    % l: k( N% y+ J( Q2 I

  153. 1 I8 M+ `  n; _/ `. e/ Q: t, \0 @4 w1 ^
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    # h" g! @2 p7 z" Z. W# K8 @" P& h
  155. {
    1 X% a; r  i  ]* r3 N( ~
  156.   DWORD attrib=GetFileAttributes(Target);
    ( r) s+ B' j  `: ~( E2 J2 v
  157.   if(attrib!=-1)' _4 Q/ ^; r/ w7 @- U- U+ y
  158.   {: O! Y4 Q; a5 C
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    1 o5 E" ]1 `1 @' H5 [' H% w0 I$ |
  160.     {
    6 E. r4 T4 f! q3 m' K* I8 q5 h
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);3 F$ a/ }1 }$ H- Q3 i! _" k/ Q
  162.       SetFileAttributes(Target,attrib);* w( J1 m, `0 c) p) t
  163.     }
    * t: c. @; J& s. n6 U& [6 m) S3 q7 H
  164.   }+ b: I5 F0 A7 r6 v& l5 ?& q& u7 K+ s0 s
  165.   CopyFile(Source,Target,Erase);
    ; X8 |1 h/ W7 f* t
  166. }! L1 V" T" x$ A3 i- J; o2 b7 i' v

  167. 7 M5 M$ M! P- q$ q2 G: M: P
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ A8 \9 o4 B2 m% x) m2 O
  169. {: ^& ~, O( w( ]8 s9 f2 Y
  170.      FILE *fp;$ G' v& h, ]% P8 [7 |
  171.      char  szBuffer[8192];
    , Z5 Z* G' q5 H4 v4 D9 W
  172.   va_list  argptr;
    ' N$ p. |1 O+ N2 \+ O0 f

  173. & Q, k3 q% v6 d5 W) S. \1 I2 s5 Q
  174.         va_start(argptr,message);. W# P* V' H3 R8 s. [
  175.         vsprintf(szBuffer,message,argptr);
    3 r$ _7 p3 s, C: e
  176.         va_end(argptr);, R/ t/ Q: w& [0 r6 i. |5 k
  177.   fp=fopen(FileName,"a");, d% [; }0 e7 @9 h4 k5 Z
  178.   if(fp)8 Y: t9 B' m3 y' b" z+ t
  179.   {
    - A) i0 g$ Z6 k$ w! ~
  180.     fprintf(fp,szBuffer);8 L% L& y( n5 K3 d& T7 r
  181.     fclose(fp);
    1 f+ u6 ?( f. L* l( {2 z& z
  182.           _flushall();) @2 y# [' v1 l
  183.   }7 o+ t2 P. p8 e6 {/ O2 Z  G
  184. }
    1 V! V) m2 y5 I3 N9 H2 s( \

  185. ) B* K( r2 {  J
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    2 w2 n; F1 H- r8 M0 n% X
  187. {3 s' D8 E  c* W0 v5 c# U
  188.      FILE *fp;% ~' L0 ?$ w* A
  189.     DWORD  attrib;
    & l! D7 C' L1 y4 C3 H5 X
  190.   attrib=GetFileAttributes(FileName);
      ^. T3 w' ]6 W' Q; R5 x8 B
  191.   if(attrib!=-1)
    ! i6 W- k: O7 G3 Y0 n9 f& J( C
  192.   {
    1 p/ A: y# l! X
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    , i# @' w/ M( W$ I& Z0 X
  194.     if(!SetFileAttributes(FileName,attrib))
    & O6 z' _7 h+ n: ~$ ^: {% R
  195.     {" F0 U* d9 w( v. d
  196.       return FALSE;
    0 n# ^) p8 [& V9 F$ ~2 t
  197.     }
    : B6 K$ m/ m3 {$ k
  198.   }
    % k) b5 y4 F% o& Y' D5 p* x
  199.   fp=fopen(FileName,"wb");
    4 c1 k- U+ c4 b$ F; W$ L
  200.   if(fp): i. G7 X4 B9 _) ~, p+ P" y
  201.   {( b6 k7 }# F3 z% d
  202.     fclose(fp);) r8 B, l/ q% k4 |
  203.   }% o# d* L; G5 R7 i+ U8 O+ Y
  204.   return TRUE;8 z. J! o5 S" `6 o# U
  205. }
    + O! w4 C+ F8 j
  206. 8 ^1 f4 f* B  e6 e! i- ]
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    , x/ }. |+ j! O7 i! T( U
  208. {( V  a; V/ U) d+ \' M0 q- ~
  209.   char filename[MAX_PATH];
    5 n% M: w& x: v# @9 B
  210.   LPUPDATEFILE file,olds;' F. \4 X( `, M' N3 J
  211.   std::map<int,CString>::iterator i;
    7 y6 Q0 W1 v) q& c. N8 D) _
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' f9 K3 S$ k& }
  213.   std::list<CString>::iterator l;
    ' E1 R+ z1 d3 U; G) J

  214. / a3 S& r8 |% l  a6 C+ w- V
  215.   if(bFirstUpdate)
    5 n0 _1 W1 x9 \% u2 \8 K
  216.   {
    4 ?% ~9 B5 ~4 g6 p9 J
  217.     dwCurrFile=0;
    3 O% P( K' ?# g8 M: q* j2 S
  218.     bFirstUpdate=FALSE;
    $ R7 i5 P' i0 v
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      W. }" n% F! ]$ T% c. C, {" o
  220.     {( a( P  i2 z- m8 d) m
  221.       dwTotalFiles=UpdateLocal.size();( T. X/ t* x4 C$ @! S" X
  222.       dwDownLoaded=0;
    ! b- f7 v/ U# ?1 o) y2 Q" ]( k
  223.       bSilentStep=FALSE;
    7 Q- I6 @/ M! H1 y* c( [/ G
  224.       bCompressed=TRUE;" E$ W' M' `* M( Y. j6 T) f' O
  225.       strExtLocal.Empty();
    : T* r3 e( ], g) `' |. p! b. r
  226.       strFullName=(*i).second;
    " H+ C7 q4 M& z3 H
  227.       dwProgramState=AP_CONNECT;2 S# O9 N- y7 E+ b# i; C
  228.       return TRUE;
    9 E5 {/ K/ D' ~6 K6 @: i( n* k
  229.     }
    2 Z( ]% ^3 Y, T. Z! y: i
  230.   }
    ; @# p+ f' _0 m% _- S7 F2 P
  231.   else if(bRestartUpdater==FALSE)
    . o( ^9 m7 a, |) w! R
  232.   {6 T* Q# z/ y; r! |7 M
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    4 f+ c$ \2 C$ @- [( \5 y6 P; [$ Y
  234.     {: g9 w) s4 i; D' c% L$ K0 f, x, k
  235.       file=(*p).second;/ x0 S6 ?" v: a* {# {! z/ z
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())2 J- y/ d: A5 m
  237.       {
    8 y7 |5 h% g4 s5 j' `; J9 [
  238.         olds=(*p).second;
    " C1 f: g+ w) A" `' q1 I
  239.         olds->vers=file->vers;
    # O1 G* d' p1 }0 h6 @. q( l- G
  240.       }
    - ?2 m5 ]* A. F) l2 J* \
  241.       else5 I, ~7 I6 E+ {
  242.       {1 {% O# Q4 _6 V. b0 T# L
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : N* a9 I, r; W+ F2 V0 u
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ; A9 ~9 ~& d7 _- n
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));" G! b# j) R, r
  246.       }0 r$ @) k! W" J" V6 Q9 x1 a
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");/ q* z$ g0 }# k6 i- [% h7 S
  248.       sprintf(filename,"(%s)",file->file);
    $ `- Y* }) h6 m+ q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 X  C- o: z! B* x7 \" r
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    + q6 |7 c# x% R. T- ^7 _0 k
  251.     }' l" h5 p- A0 X8 ]! I
  252.     dwCurrFile++;* Z9 v+ E" d( P3 p3 T. w
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # E% Z( D" X1 d- E+ R% S! g+ @! G
  254.     {. y9 e! y5 j9 I8 T1 x+ |( M
  255.       bSilentStep=FALSE;
    , E9 U& _3 J4 |1 h7 |5 U& J0 d
  256.       bCompressed=TRUE;, Y  a) S# \# K- m: d- Y2 u" L( B) l9 N
  257.       strExtLocal.Empty();& C1 Z, w' C0 T4 t6 G: o: n: r
  258.       strFullName=(*i).second;
    : U7 N. N! p1 ?3 h" X/ Y9 i3 b
  259.       dwProgramState=AP_CONNECT;
    $ Y' r( s& c' z& _% _. |
  260.       return TRUE;5 ]/ H5 [$ R1 T8 {
  261.     }8 [* ^1 c, t5 }) F/ a
  262.     if(!bRestartUpdater)! y& `! t; p( B! v% ~% H2 d7 _3 ]
  263.     {
    # S" j$ F& O0 `) z3 J1 v  U
  264.       int iCurrSize,iFileSize;' E. X& p' i  M) Z% K2 `8 p
  265.       iCurrSize=0;
    ; _4 X: c9 z& W3 z
  266.       iFileSize=UpdateList2.size();
    / H' I8 ^3 i, [6 X
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    + r2 I8 ?) {! G* }7 D8 W! y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");0 ~" z2 q. _/ v# [1 i2 G# \
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");: R% N/ }% d4 p% I7 z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 {8 x# W5 P" h
  271.       Fclearf(".\\update.dat");& {# T" \; q" ~7 L) i* z6 M
  272.       Fprintf(".\\update.dat","Bloodyf\n");/ C6 ~  a% C$ |
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % B# C6 X1 z! ]; d2 U
  274.       {% {7 a3 {5 Z% y) J9 R9 d
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())7 n) z) r# I9 a# g$ }
  276.         {
      ~! L/ o' |. a7 r  \% Q9 L$ F7 o5 m1 m
  277.           file=(*p).second;2 l' E% [, l! k9 w& i
  278.           sprintf(filename,"(%s)",file->file);2 o: Y+ j( G, X, G
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 e2 _2 V0 Q9 a
  280.           iCurrSize++;
    ; J! o/ Y, k+ @, E$ ?% r
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));. c; L" B7 U# a% I$ v; S* D7 a2 Q. J* _
  282.         }
    4 e2 s+ I+ C- B* G
  283.       }
    / [% l) V+ r! _
  284.       unlink(".\\update.txt");
    * r# \+ J  J+ v8 |3 b
  285.       unlink(".\\update.tmp");$ Q7 S5 N. Q+ y( f. v, Y
  286.       Fclearf(".\\checkversion.dat");
    3 |. ~% t! C, c: a1 R
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    0 t& I$ N2 W- Z
  288.       if(UpdateLocal.size())" g+ [( Y0 e& v4 k  l' H0 f' `) M
  289.       {
    4 C6 u% D0 s2 u. h' d
  290.         UpdateLocal.clear();3 b  a9 Y$ u! d
  291.       }
    2 v2 E5 `- {) O# l" b9 j6 \
  292.       if(UpdateFile3.size())# F& p0 I$ L, a, D* D
  293.       {4 M- Z" \; F  U4 `% d; Y
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + x& S; N# w7 z! R
  295.         {
    , f/ g! M8 ^, c: X; d' j7 c- r- M
  296.           file=(*p).second;7 I  ^: W, T; C( R$ q
  297.           free(file);7 j/ j8 l0 _( P7 R4 `6 D) |
  298.         }5 x$ j5 ~! M- |3 g. m" L' N0 u
  299.         UpdateFile3.clear();
    9 K3 r" j, P3 a" ]: v# F! F; x& x
  300.         UpdateList3.clear();/ d& w9 n9 |7 o' y
  301.       }3 k' }( A2 I* {/ c  p+ A; H7 p
  302.       if(UpdateFile2.size())) u7 e6 |  M  b2 K" j2 m5 c
  303.       {
      V8 {: i0 |+ A
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / D3 d8 W% G5 i( `: w, H  E) |
  305.         {) c* V- t8 J& S
  306.           file=(*p).second;
    4 a9 H- w8 O5 c: Q- D- k) _9 Z! {: V
  307.           free(file);. }7 q* H  X6 w
  308.         }! y  ^1 @6 `. j  Y
  309.         UpdateFile2.clear();2 ^2 R+ \% B, ?
  310.         UpdateList2.clear();. A; V' D! Z5 H9 Q! L0 X6 s' c
  311.       }9 D: F0 C3 `5 @; r' `4 K
  312.       if(UpdateFile1.size())
    ( x% `6 d( b* e% H7 J3 l
  313.       {  h+ S7 M0 Y' H2 k
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 z8 F- \% E+ i) r" b* A+ k, O
  315.         {
    1 A4 r7 D$ j5 C8 f
  316.           file=(*p).second;# P& `: ?/ ?" G3 g9 o+ f
  317.           free(file);
    ! \6 B9 Q/ i1 [- O4 Y
  318.         }0 H. R5 E0 v% r- `. }6 U
  319.         UpdateFile1.clear();3 ]# Q: X6 \( |0 ?4 `
  320.         UpdateList1.clear();
    " x7 j7 |! \, F' O. _
  321.       }$ N% o, f( m; j  o* Q- h2 O
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    : X( \- x! I1 G' E4 O$ J6 s" \
  323.     }
    0 F& g% V$ K: l1 R9 Z! r
  324.   }* f9 \+ y0 C2 e
  325.   return FALSE;
    ! @/ h0 a% }5 x9 \/ o  @  E
  326. }
    ) \  T* z, o! l" Q- t
  327. & m# B3 r  \0 R; ]- y
  328. void CRevAppApp::ClearAll(void)2 t9 c* B2 f( K) W9 M% Y
  329. {" i' D& \( Y2 v6 U- ]% [; i
  330.   LPUPDATEFILE file;9 z; _, B1 Z0 O8 F* J, t/ ^2 W
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 i) M% m( H. T5 Y

  332. 3 X- ^5 p  p# M, T' k1 N' r2 T
  333.   if(UpdateLocal.size())# {$ D4 r) U3 a) x# j
  334.   {
    3 a2 q* I) ?  P8 B( y: P/ {9 J' w
  335.     UpdateLocal.clear();
    - x' k4 S  i4 V' p( J
  336.   }! F) M* C4 Y8 @0 A) F& z. L
  337.   if(UpdateFile3.size())
    6 U6 u6 w1 r, T5 }
  338.   {* n% [/ @! C8 v8 o
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)4 }; p4 m6 A: g( [  g' c
  340.     {
    6 H6 p% T# U3 }& s
  341.       file=(*p).second;
    + y8 ^* t8 U/ W6 o6 y  A' c2 z
  342.       free(file);* O  h* \* X- Y' V; w: r( }6 i
  343.     }
    ) I1 B! F$ w/ k! l2 b$ L4 U1 ^
  344.     UpdateFile3.clear();. I5 r/ _9 V* K/ D8 w8 B
  345.     UpdateList3.clear();
    # ?9 Z! y% v- @  x# [& ~
  346.   }! n1 K* N" J0 Y" L0 b  h
  347.   if(UpdateFile2.size())
    * ^9 O" V8 ~3 i) A. g  w
  348.   {: \; i2 p( U2 i- k+ _) k
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)/ z- s2 w+ _' I
  350.     {% v; [# z! ]8 H4 j1 O
  351.       file=(*p).second;  U, a8 C8 b; T7 _, I4 h
  352.       free(file);- e. L: J* c7 U' I/ ]
  353.     }. V* G# ~! b1 K8 b
  354.     UpdateFile2.clear();- f$ U8 p4 a4 g( D
  355.     UpdateList2.clear();1 p+ v# |9 b& Z0 j8 z
  356.   }. v0 _# C! w* C! D7 R3 m
  357.   if(UpdateFile1.size())
    , o$ n* X' }% D
  358.   {. C2 V) c- S; R  m7 q2 W7 O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ! V$ t6 W$ F3 b
  360.     {
    ' p" ^3 r$ W: R( u
  361.       file=(*p).second;) n8 N2 }( ^8 s: X( t+ i2 _
  362.       free(file);
    * R/ M+ m2 j) }
  363.     }
    6 d4 t! [2 {$ }4 y" ?9 Z/ a9 a& [3 I- v
  364.     UpdateFile1.clear();
    * _+ M$ _; v" {5 t* M8 ~  H
  365.     UpdateList1.clear();1 X. M0 @7 a" G! T
  366.   }
    8 E* U3 `. C7 s- s
  367. }  
    7 V5 e9 |- W1 w6 \8 Q7 f
  368.   8 T* S+ [$ T* t0 r. T
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    $ o& ?& f+ ~- n( K6 t- }
  370. {
    $ L! z* f# T! w- W' L  i
  371.   int c;
    - N3 O: W( V" u% Q0 P
  372.   LPUPDATEFILE file1,file2;
    : e- z$ M! z8 q0 I
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;: h& g9 P8 \3 K- R0 c$ \
  374.   std::list<CString>::iterator l;, ~$ h( g1 s5 C$ p4 q9 A

  375. 4 Y  z; D, }/ g: g
  376.   UpdateLocal.clear();2 t7 `; K$ r  S$ c9 D
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ @' L2 N* D7 M5 A$ N5 q4 c' ^3 \
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);' j( a1 E' s) e8 X) K
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    & [3 F7 ]( Y0 H" a+ ~1 M8 J$ {
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ( u2 X7 s  o/ P$ x4 b1 U
  381.   if(UpdateFile3.size())+ Z- D& Z/ I( O' }
  382.   {
    % M% A  }6 I  X0 k2 s* C$ J, M
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)6 I" j5 ~6 u/ k7 r: i
  384.     {% e3 M) u" ?' A9 K
  385.       file2=(LPUPDATEFILE)(*i).second;' g- W/ z; D& P+ d- \7 _4 y# D5 |
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" p. i) z: m3 h0 \$ _6 Q
  387.       {6 ^7 `: i" q) W8 Q4 a
  388.         file1=(LPUPDATEFILE)(*p).second;7 G- }2 g; ^4 o- ~7 i
  389.         file1->vers=file2->vers;* `6 V  U! p; u9 C
  390.       }& Y! V2 A4 Q+ c& `* w
  391.       else
    , F; e: j; |) j2 J9 p! M4 n0 V
  392.       {% j9 W9 P! Q4 [& M* i0 b8 e/ y
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* ?# ~& K, o" l+ D8 y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));3 [& n% K& l0 D' k
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    9 b( H% I6 P" s4 _9 z: L
  396.       }; ~8 A7 c% Q5 v& `
  397.     }2 W7 e5 r3 K- i! A" A! a
  398.   }$ y$ m3 ]$ g2 @$ u* r) h' m
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , i* o$ ]% Z0 N/ [  e
  400.   {
    6 k& M1 K4 q1 j( {7 L  I5 J
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())0 }- G3 l' d) m
  402.     {  d2 i6 u$ ], Z+ ~- x. I" u) `& f
  403.       file2=(LPUPDATEFILE)(*i).second;
    , m. }! C' a7 I; a# A0 C
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). E; m2 F. q4 P' |( ?" n4 o, r! I
  405.       {
    / `4 N) I( _  E4 q
  406.         file1=(LPUPDATEFILE)(*p).second;
    * t- R( i4 H: L1 j: X- g% j
  407.         if(file1->vers!=file2->vers)
    / L2 n5 f% I  P4 ]$ [6 W
  408.         {$ v# l+ @/ }! E- u; _0 `2 z
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  l; M& P) E% j. k1 }  z4 @" D( ?
  410.           c++;; r! K8 z; l# i) |1 S
  411.         }  \3 t' V1 n4 w2 _+ z
  412.       }
    $ p. m% s! B0 n1 s7 }8 O
  413.       else0 l5 Y# n) z( D, Q
  414.       {  E4 B# T1 U# P/ z+ z0 P
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / S2 C* R. }; e! p
  416.         c++;
    & g  t8 a: W$ Q! n( |
  417.       }
    ; t4 T5 s6 L  H5 H2 O- F( w4 V" q
  418.     }
    , |+ R; {$ E8 E, n
  419.   }' B% [/ p# J  T% N; `, _6 ~
  420.   unlink(".\\DownLoad\\update.txt");3 [9 y+ f; \, E7 W! G8 O+ \' }( d% n
  421.   if(UpdateLocal.size()) return TRUE;& Z* O2 \6 Y) n9 ^: e* j' N. e6 R) Y
  422.   else                   return FALSE;$ l( \" J' C6 D( e
  423. }
    % ^- a6 V' A% ?" c" a2 a
  424. * d: e0 r2 R+ }: @& P+ f( c
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    " G' G  e& ?: K. J' z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"& y1 X" D3 {. C0 Q% n, k" p; X

  427. ; G0 j1 @  j: y) j6 u

  428. & m) u3 I0 R5 n3 q$ y( T3 ]: q" A

  429. 3 A% p( ?: D6 j
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)6 q% z) L1 u3 F: i" A( v  ]; k
  431. {
    * Z: _- V( Z* }. @
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    $ s1 T$ R& ~7 F& s- J0 s
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : \% n6 c) Z! ~0 K
  434.   {: ^9 @7 A: Y2 J0 ]  q2 K/ ]
  435.     char szLanguage[50];: }0 U8 J2 @* f) P9 T  G& Q9 `
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 M! p+ |- p2 V/ q+ l
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ c( {, o, {4 a
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & e0 c% T& u4 z
  439.     else                                   m_iLanguage=ENGLISH;- m! n$ Y3 O9 y: m
  440.     char szRegister[100];
    7 \- Y# p* J8 {2 o3 q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ( M# R  \" B$ [' q
  442.     strRegsName=szRegister;
    7 j  ]. N$ l4 }1 Y
  443.     char szPatchURL[100];
    7 ?* @. |1 w5 p0 N+ x
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      W( P6 O) [8 p
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ; r* ^5 V% f) o4 i
  446.   }5 U' Q" g3 e3 d: n
  447.   else, F! C0 s$ X. t, p
  448.   {1 s; G( ^$ a% @
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; e! s4 u, @  N& |/ v- U5 L
  450.     strRegsName=DEFAULT_REG_URL;
    8 e: `/ _* u) d7 c
  451.   }6 b: c0 m: G+ ]# T
  452.   if(GetFileAttributes("hosts.ini")!=-1)$ A' N; ~+ v" U& E7 U2 Y
  453.   {* Z( w9 v* |5 Z8 O
  454.     char szIP[50];
    9 J, N  z; b) I& U0 O* P! l: z
  455.     char szDIR[300];
    $ G: L6 l" u+ C8 k# g
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))  T3 L# }$ g1 v) e- a* e; G
  457.     {
    . S3 I+ y* \" m  I) H
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    1 f0 v7 k/ B' _) `* e
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");6 ~# `! @. P4 c/ q" S1 I3 d
  460.       strHostName=szIP;
    - u$ ^# e5 f* k) z& ?) n  q% c
  461.       strHostPath.Format("/%s",szDIR);4 w- s+ T! _4 S0 {
  462.     }
    ) P. Q2 ]6 ]  m1 T/ `: D# e6 k
  463.     else! M. Z$ c/ U7 C& }/ W+ q. r7 Q
  464.     {
    " p  o8 ?1 ^$ `
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), G, c: @, u) ~3 U
  466.       {
    * k  Z8 e- s$ t  @4 f6 f
  467.         char szLanguage[50];
    $ W1 L4 ~* _) c+ u- C
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, w( d: E% f" z, S, x/ P5 Z' ]
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 r5 s) I6 N5 \8 l+ l* H
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 Z# O5 j3 O1 i% f0 Q" H- k
  471.         else                                   m_iLanguage=ENGLISH;# L# z0 f) s* G, `( D8 O5 c6 s
  472.         char szRegister[100];
    4 \7 W0 ~+ t6 S  ?% }: m
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 \; h. b' [  {: k
  474.         strRegsName=szRegister;1 q* R  F( `+ d% N  m. b
  475.         char szPatchURL[100];/ q- R$ x+ _( \: L# H8 d
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 a7 g& s; o4 `& o5 \4 H
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% v5 F. U$ B: r& V' d
  478.       }* |3 u, H( u& ^* `) I' V) i7 \
  479.       else: ]2 n; W' f: p$ O
  480.       {
    4 z# [5 a8 D6 r  ~
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; g0 H+ L  ~/ V9 H* g; b
  482.         strRegsName=DEFAULT_REG_URL;% t5 F4 e5 i  D6 j9 t1 Y: \) I
  483.       }% p; L1 ~* v- O% r( \
  484.     }
    + v4 f3 t& C( q  u  b: X. `5 X
  485.   }
    $ S+ i" D* N1 C1 r5 h3 x
  486.   return true;
    1 W% o# A. A; K% x  ^2 {( }
  487. }+ F4 d8 l: }8 ?
  488. . L- S* c7 ?1 Y5 Q
  489. #include ".\ZLib\unzip.h"
    / X* Z% C( `( I0 E
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    7 f& ]- H5 P+ E
  491. /////////////////////////////////////////////////////////////////////////////
    & o5 L& S6 c& d4 o' K% \
  492. // CRevAppApp initialization: J- A. c7 r6 t/ f  T/ G+ E

  493. ( p2 G9 f- }5 R( |2 `& l( }
  494. BOOL CRevAppApp::InitInstance()
      [8 |6 I% m! x! z
  495. {% J9 N, \; K6 b( I
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];2 E- s. [8 ]. ?6 G' s1 t# |

  497. ! U8 w+ D3 m+ D. _5 [
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);! f0 |% w! v. q2 Q- |& ]
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    8 _' X9 q+ `  c( q# J1 }2 O
  500.   {
    9 G6 @4 U- b) `6 Z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 c% L" M: T' W! T1 ~' ^! w) v
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    4 h% T6 J4 O% P$ Y, d
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))6 X7 u) Y- ^5 L
  504.     {
    & l$ K" h5 n+ \1 s' q" v' a, X. p1 Z) @
  505.       strcpy(szPath,szPathTarget);
    / D. B/ B- k. ^3 Y% r" W& y
  506.       SetCurrentDirectory(szPath);+ z; s6 g/ c1 V% [
  507.     }7 Y: p: f8 @, v: j( R7 m" k7 X( F
  508.   }
    . \. F* u- H7 D2 ?: h) y
  509. #ifdef _DEBUG
    0 E: b- U  H! t- }
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& u4 L4 A# o6 j% x: Q
  511. #else
    9 K* G- {' q7 f. A7 C7 e
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 m/ z+ o" u( G/ A& n" a
  513. #endif
    7 I1 w, N) j1 Q) v1 d& t7 Y) p7 d
  514.   {
    ( |" x+ B& Q4 Z+ x
  515.     char tempFileName[MAX_PATH];
    + y7 G6 ^9 e& `- `: R
  516.     strcpy(tempFileName,szPathSource);
    " T5 b1 F# K/ ]; ^6 t. {
  517.     tempFileName[strlen(szPathSource)-12]=0;
    " h3 |9 }9 A5 G- b2 |% j4 w& q
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    $ ?0 x, N; ^* T8 n( e+ \
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    * d( u' {: L% }: K: M7 J; f
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    + C$ k/ p* o% `0 q0 r! `
  521.     return TRUE;
    $ C& _, H- C5 }4 C8 I- ]) a4 Z
  522.   }
    3 ~$ y2 s" Q$ R* A: \
  523.   // Nuke 0118: Delete run.exe4 ^6 N; `1 W, W1 a; q8 I- b
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    * G! Y6 b' V* {7 Q; l0 j
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + U/ P0 v3 F& y! z- {
  526.   if(!ReadCfgFile("Config.ini"))( F( ]# T6 ]  B5 V
  527.   {# n1 o1 ~) ?/ c% d6 F: j
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    2 J# Z5 t# M* W, F
  529.     return TRUE;' r6 }. Z7 x8 |4 E$ i
  530.   }
    6 s) g  n8 P* d( _4 v9 b( p
  531.   HANDLE mutex;
    / }& S$ V/ z; d; i
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    . Y4 O/ p/ i1 e) P
  533.   {
    ( N" n' {- B- i
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ' M8 c5 n+ d, W
  535.     {! S# d, ?3 n" U  P  |3 }
  536.       CloseHandle(mutex);# m6 h; H. S% J( O7 ^0 a
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);/ R0 Q! J6 Q" h* n; D5 e# s; D
  538.       return TRUE;
    & C, z4 t9 `. _2 T7 J
  539.     }
    # ^. f: L- F1 k) L' z% S: z* W
  540.   }  ; n6 b1 f9 M6 i! l" |- \
  541.   CloseHandle(mutex);
    : q0 s; h8 l  Q: T: b& o- L

  542. ( @, s% J# X8 J! j2 x
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);. u/ Y$ \6 C5 N: S, a' u! B
  544. ( G. O9 m- m8 ~- i0 P8 ?* ]2 V
  545.         AfxEnableControlContainer();
    3 v* s0 U# h3 a5 H% V

  546. 4 O  {- Q' l' y3 O$ G8 ~
  547.   bCanUpdate=FALSE;8 s9 U( l& ?, U" b
  548.   dwStartUpSteps=1;
    / ]* z& w' T2 Y1 [; i  m& t* y1 U# [
  549.   dwProgramState=AP_NOTHING;
    " X# l" X0 x- _- o* Z, h7 `" S, D+ L
  550. # l3 Y4 J6 ]& m& ~  Y9 Y8 }
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ; W7 A4 ^& r0 l! Z: a
  552.   k  \' C8 R$ g9 G
  553.         // Standard initialization
    6 W: U  k$ _6 V, r4 K# ~6 W: a& Z
  554.         // If you are not using these features and wish to reduce the size
    8 K$ t; J8 K& G
  555.         //  of your final executable, you should remove from the following
    ( E1 ?' h( r% Y4 o: C
  556.         //  the specific initialization routines you do not need.
    7 X# c: w; @) H5 q

  557. % ]) I! l8 @: E& ^2 J& `2 G
  558. #ifdef _AFXDLL: U) a9 {3 w0 r6 ]5 R1 D
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL, F% W3 t3 b4 F* U; y  ?% a
  560. #else
    + Z5 G& l/ L3 m0 L0 V9 r2 o1 s% o
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    # a& q) U5 c2 }$ a1 E
  562. #endif4 f8 o0 Y5 F3 Q9 i% a/ c4 d) m+ _
  563. ' S% x1 B" T5 _3 `
  564.   dlg=new CRevAppDlg;8 j  e3 G  \1 L3 d( \4 t
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    0 X; k2 B% ^. ]- F* q2 `
  566.   dlg->ShowWindow(SW_SHOWNORMAL);( u* y. \& w5 z4 b, z1 [5 w; i$ L
  567.   m_pMainWnd=dlg;
    , H' j2 P/ P& t: g( C, Y

  568. ! t4 M; B# [% s& ?& R1 F  y, V5 f
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);: `) k% b; |) @  R" n, ]' p& z" \' j# c8 p
  570. ! u: i+ m1 b3 j8 m) m- ^' |
  571. //  GdiplusStartupInput gdiplusStartupInput;8 K, j7 ^  J* x- Z' T
  572. //  ULONG_PTR gdiplusToken;
    " x* r$ |  P6 J( j/ i
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);  O5 v, E- O) Z1 y8 c3 Y: F; K' S

  574. 1 ?* _6 u) j: O: m" s
  575. //        CRevAppDlg dlg;# }+ ^; A3 h: R- _) U; E- e6 e7 b
  576. //        int nResponse = dlg.DoModal();- j) A, `) c' B) S' `6 o
  577. //        if (nResponse == IDOK)
    # r$ j0 Y. j# O4 _' y( ?
  578. //        {' m" u: N8 o% t  N; }. s
  579. //                // TODO: Place code here to handle when the dialog is2 Z8 `" o/ c- ^5 Y+ i+ {' @# N
  580. //                //  dismissed with OK
    * g2 [' H' a. v
  581. //        }( l- ?) C  Z. _& n( ^& p
  582. //        else if (nResponse == IDCANCEL)
    - a! I" N" U& {  [# F8 E* u
  583. //        {
    : ~+ j: Y7 x) _2 r5 o
  584. //                // TODO: Place code here to handle when the dialog is
    & \5 C5 Z' h6 }
  585. //                //  dismissed with Cancel) P1 |8 s( }9 p4 h; ~+ t& J! @! }
  586. //        }
    " ]9 j$ G$ b: F+ o$ @) e; Y  u& h

  587.   P# L% q$ I- D
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    * g' X% B- P. e9 d
  589.         //  application, rather than start the application's message pump.& y7 ^0 V: X8 e( U* @% \
  590.         return TRUE;+ n5 Y( d3 e' C/ _$ x# p
  591. }
    3 z" }1 X( Y& W' [4 H# z- m5 W
  592. - U2 K0 o  s6 T3 S" G" X
  593. char *CRevAppApp::strtok3(char *pSource,char *token); x) b! m  k' `
  594. {
    1 K& V* H$ ]1 b& z" X% G+ I. Z
  595.   int i;4 j4 [0 a4 F- l3 K+ s
  596.   char *szRet;; d1 ^! c2 }: s
  597. % ]& U! p' o- f; ~
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ) T2 O, o! Z( z3 c9 G4 x& x
  599.   if(sztoken)
    . ]( Z/ A7 b8 {- a9 L/ f2 h
  600.   {
    5 M% [$ i* v! J6 v: B
  601.     szRet=&sztoken[itoken];  _$ p; ]1 p( w$ T% K
  602.     while(sztoken[itoken])" T4 `* C+ n( E0 M
  603.     {- [" g4 k5 C6 A& h/ _8 [3 g
  604.       for(i=0;i<(int)strlen(token);i++)# _( O0 Z& @$ T1 R0 {
  605.       {' s- ?0 T" P* S; J3 s. k& y( L
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    4 b+ b9 N0 i+ p  T$ q7 t' q
  607.         {
      J1 P4 }/ C: J* M7 a, R
  608.           sztoken[itoken++]=0;
    1 Z7 @/ Q: p+ t! @  Y9 s
  609.           sztoken[itoken++]=0;
    1 e2 d8 S, C# |. b5 [2 O
  610.           return szRet;) ^: w0 G0 I6 J. k8 [; @
  611.         }+ W2 A" w+ E6 m) @9 U
  612.       }
    ' ?: P2 e  s! }( }( C
  613.       itoken++;2 e3 d- ?  X0 J' }! P1 d
  614.     }; J& u! _  ]4 }- N8 F4 L
  615.   }* w/ g, K2 M6 z8 E; ^
  616.   return NULL;  L1 v6 d+ j$ R6 V
  617. }
    # b! s7 l& v, {  t: Z
  618.   R* `/ C/ e+ q/ Q; [
  619. void ProcessProc(long Total,long Current)- i% M, q+ P2 U3 r
  620. {
    4 Z  u# ?5 k  l
  621.         MSG msg;$ w, K( a+ y& e8 |: d
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);9 R' z0 }5 W6 M% o" ^
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));3 r7 E" s) l- {3 o: p
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))! o* ~7 }/ T( B/ s( B! B
  625.         {
    3 V: d/ ^# E; X3 {8 _( ]  f
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ( r4 c9 c8 Y% t- {6 t
  627.                 {
    + v2 g7 g4 |! Z% }
  628.                         return;
      l' X7 G$ o" ]7 O8 _% J! N% B, i
  629.                 }1 t" o! o2 T' s  R$ Z
  630.                 TranslateMessage(&msg);
    ( h$ n2 A+ i' h
  631.                 DispatchMessage(&msg);# f) y) }' v( V, T& K
  632.         }        ' U: G6 \% N, S" t
  633. }
    ( {( p1 l" v! H9 _! |$ l! P

  634.   w* ^/ s' n; e, U
  635. BOOL bFirstChar=TRUE;
    * o1 A% V  g4 t. n! W' A

  636. ' R+ q" s/ C1 `% r7 }
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    . ]8 X% n: B8 y
  638. {% i. [! F7 Y' }$ y
  639.         // TODO: Add your specialized code here and/or call the base class7 P% h1 W' m$ Y/ _% o
  640.   switch(dwProgramState)
    3 \  E+ P- H. B
  641.   {
    . O' e# L; V  m0 d2 w) s
  642.   case AP_NOTHING:: y1 F5 z; ]: X6 V2 a: c  b. O0 A( [
  643.     switch(dwStartUpSteps)
    0 a3 G' E' h( P$ p0 ~
  644.     {" B5 s, d* e$ r  ~( v
  645.     case 1:3 d; [5 k4 n' r4 T$ ^
  646.       {
    ) Z) t' Q1 B' C: x; m2 A
  647.         int i;) f" P: N+ R, {2 ]6 J1 B
  648.         CDC *pCDC=dlg->GetDC();, B  q/ p+ u; [( m# v) Z
  649.         HDC hdcwnd=pCDC->m_hDC;
    : Q2 E6 ~* H. h1 N4 ^6 L, `6 |$ {
  650. //        Graphics graphics(hdcwnd);2 C0 W, h) R# I" Z  `3 h
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");2 C* U( \% Z! B. t8 f' m
  652. //        INT iWidth=bitmap.GetWidth();7 ?( S. J  c2 P" u. y* w' G/ N
  653. //        INT iHeight=bitmap.GetHeight();7 \  M; G( Y+ a- d
  654. //        Color color,colorTemp;) h2 R8 H0 W9 H) J" _+ ^
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% O/ B/ T. @& H, ?+ H- t
  656. //        {4 l6 a1 s8 ^( s% J: k
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ' b1 {. ^3 [- M: j/ K, Z6 [% m
  658. //          {
    8 y4 ]/ F  N7 J& b& f6 @
  659. //            bitmap.GetPixel(iColumn,iRow,&color);5 T$ N9 u$ _) ]1 U* Z% e" ^& x( W
  660. //            colorTemp.SetValue(color.MakeARGB(
    + S* ^& Y" \8 |$ E* E
  661. //              (BYTE)(255*iColumn/iWidth),$ H- W+ i" @- f
  662. //              color.GetRed(),$ e! F. k2 I, {! W
  663. //              color.GetGreen(),
    ( C8 v  Y8 ?+ {1 J1 s
  664. //              color.GetBlue()));
    6 V. w/ s7 ~# }% [1 @
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);( `* |* F6 L, r8 p. y
  666. //          }
    3 B3 g6 L6 U1 E1 Q) m0 f
  667. //        }/ J* Y) {% l, u- s
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ! G  y1 d5 b) g2 B8 D! j$ H( c
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 T3 {- g# t7 D! }% \
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");) u/ ^2 p8 q% F0 X- @' T- X# q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; K1 F/ V) c! r& Y0 `/ X& ^" a
  672.         for(i=0;i<240;i+=8)
    5 {) b6 P5 T3 o+ R0 T3 ~8 l
  673.         {
    1 Y  ?" m) z/ |* a& E7 t
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' d2 u5 {& s- k8 J4 k  Q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);$ |2 J1 R0 A$ G2 t8 `& E: s
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 Q& P( ]. n3 s" |( ~; F
  677.           Sleep(33);
    , x* O( m8 n3 C
  678.         }5 C6 A4 X; N# X, z' k( ]
  679.         Sleep(1000);
    # ^! q% R9 {# ~2 g
  680.         for(i=240;i>0;i-=8), H, o+ `" R' D
  681.         {
    3 `; z: s, |# Z& o6 t) L% s
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ E( i& ~( U) Y- k) R; ~
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' M, z" R4 }( o0 m  U9 z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);! {- f* t( N. g& A* o
  685.           Sleep(33);. D% E( u( t% y8 B4 c6 _
  686.         }2 }2 w1 f0 j( [( T$ k
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    2 g+ f/ Q' T1 n% r4 J9 [3 x/ c
  688.         dlg->ReleaseDC(pCDC);3 X( r# R9 y7 p6 {: v3 I" m8 I
  689.         DeleteDC(hdctar);
    , ?9 X1 O, g, J( b
  690.         DeleteDC(hdcsrc);
    3 J6 y; l6 L7 _5 C: r* A" s
  691.         DeleteDC(hdcorg);
    9 I8 \  r9 W" g- \( k
  692.       }& s: t: I& U- i1 x# m
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    " U! a, F/ e  |2 t, r' D& M  |
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");" C% [$ j8 H* w5 d; n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, {9 K  D4 D" o7 A9 O4 i
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- w; {! ?; f; E0 k
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ {( m6 h2 M. N; E6 b4 a
  698.       if(!Dn.Connected())
    9 m# h; I+ B, j( d4 c
  699.       {( ?5 k9 ^/ p8 J" e/ O* [( _, j
  700.         dwTotalFiles=1;2 r. N: ~+ x, Q- w7 w
  701.         dwDownLoaded=0;
    ' E9 k# V* i0 a: I
  702.         bSilentStep=TRUE;2 ?8 v. F1 u& V$ q; y2 r
  703.         bCompressed=FALSE;9 {3 ]8 \+ J, x2 n
  704.         strExtLocal.Empty();
    / L, R! b0 W4 I% S; Q5 \) W8 Y
  705.         strFullName="readme.txt";) h9 W, o7 |' _  n& H
  706.         dwProgramState=AP_CONNECT;# j% X# D) i; q3 u
  707.       }
      r. y! O, T% F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();/ T8 o3 m; K! C
  709.       dwStartUpSteps=2;
    ' m# P; \- q* Y2 V7 I* T
  710.       break;
    7 K6 L$ u1 D6 u, M6 C! Q* j7 D
  711.     case 2:0 x$ {/ m% Z5 B2 X2 N# J: e% o
  712.       {
    " @( ?4 J" _; D' M
  713.         int iEOF;
    1 g$ O  z0 B' t' X9 v; J
  714.         FILE *fp;2 X5 m/ f1 ?% F$ ~
  715.         char szString[512];
    0 S1 Q& B+ B" Q! j1 Y$ G
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 q% t  [$ W* _5 P/ G* y* S
  717.         if(fp)
    5 F) L! c; L9 Z6 a6 [' {% D
  718.         {
    * D- v. c' B, L8 x/ D
  719.           do1 e# n; D3 d! H4 j( [! N
  720.           {. W/ \. B6 ]8 V% s) y+ g; }
  721.             iEOF=fscanf(fp,"%s",szString);
    $ c1 F( ^7 q5 ?* I
  722.             if(strlen(szString))* l& p+ v* W! C$ e
  723.             {- w2 ]6 L! D' e
  724.               if(bFirstChar)
    , A# x) P+ b" U8 }" s
  725.               {! J3 ]& e% g( B! y: H) n. G
  726.                 bFirstChar=FALSE;& B9 }! `9 ^+ K& B# O) j6 Z
  727.                 bConnectIsBig5=FALSE;8 G$ F/ e9 I2 N
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    & t6 F, H+ M/ A8 E. c
  729.               }
    * O' `) e5 W7 K. V) _! c
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ) \  D- J, L7 i2 Y) X5 t8 ?6 G/ W/ h
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    , Y! N; {$ c) [3 K3 Z0 n$ T1 |
  732.               dlg->m_ListText.AddString(szString);3 ?- f+ b  Y# d, k& ]# x9 o
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' w8 w; [8 \' m/ ?* n7 k
  734.               *szString=0;2 B) [' E6 Z$ ?6 N# U* \
  735.             }$ J: O, d: ~$ C: P2 i# w
  736.           } while(iEOF!=EOF);
    4 H2 q& |# i% M5 a% I4 F
  737.           fclose(fp);
    # t" H; s& `! H0 p* @8 L
  738.           unlink(".\\DownLoad\\readme.txt");1 G# s" N0 ?8 ?) l% n7 N; y$ y1 W
  739.           dwStartUpSteps=3;
    ) }) u5 m! k+ |* ?+ ]
  740.         }
    % \8 L+ D) R6 e5 V: d
  741.       }% g$ o) f" }- A6 _8 ?1 I
  742.       break;
    % J' p, s. @( s9 r$ j/ l4 s
  743.     case 3:
    ; d& l5 |+ n6 T: l6 q0 E
  744.       if(!Dn.Connected())4 [/ e5 i+ k$ k9 n* d! S/ c2 p
  745.       {9 }, j( \5 t" k6 e
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);$ D3 {" G4 d0 L, n% V+ ^' V
  747.         dwTotalFiles=1;3 J$ p0 K- s0 F, e
  748.         dwDownLoaded=0;
    0 V) J1 u% j* p& u) b- c) A
  749.         bSilentStep=TRUE;
    6 X3 P' S4 G3 W7 H$ v& t& g6 ?! ^
  750.         bCompressed=FALSE;: u$ I! P) ^) H" B0 [0 ~# Z* ?6 N! h* V& G" j
  751.         strExtLocal.Empty();
    / U: X- y" c# b) U1 {
  752.         strFullName="checkversion.txt";% r+ w! c' n- j& ^- X4 e0 }
  753.         dwProgramState=AP_CONNECT;; `7 g) E- O3 X- U& ^3 i; c4 l/ o
  754.       }. y6 A/ B  L0 I8 P
  755.       dwStartUpSteps=4;/ b0 |% a+ |5 z7 Y
  756.       break;
    9 J* j3 l) d( O9 X! g
  757.     case 4:4 T: b& I2 _& v% K1 t$ f& m
  758.       {" ^$ @3 [$ d" `1 z9 O3 T2 p) D
  759.         FILE *fp;6 [! T1 s7 u; m  B0 R1 G+ G2 c  Z
  760.         char szString1[128];: z+ w; W9 z; T0 c  P- N
  761.         char szString2[128];# b) q& ]' g3 R( d) p( {; I
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");9 o. H& n5 u6 W
  763.         if(fp)
    6 J% N3 }4 J' g, R
  764.         {
    0 J0 l, m% B4 H+ L2 j. O7 J. d& ~
  765.           fscanf(fp,"%s",szString1);# `$ M$ O" ]( F' J1 f3 S# [
  766.           fclose(fp);- R! h1 @( Y( P  U' c
  767.           fCheckVersion=atof(szString1);- u+ I" |, q+ G! d1 L8 v" u
  768.           fp=fopen(".\\checkversion.dat","r");
    2 h( Y* |) c- v
  769.           if(fp)
    " c5 y; z. ^) L. T
  770.           {
    ! C7 R" A) J" k0 @; V/ r# O( |$ k
  771.             fscanf(fp,"%s",szString2);
    5 ]! o) G- Q% f. A
  772.             fclose(fp);6 S! r" D4 K. g# [! \; R
  773.             if(atof(szString1)!=atof(szString2))
    0 ]4 Y' u. Q: q
  774.             {. P; O: v) Q  @  d
  775.               if(!Dn.Connected())
    : j, Z) M) z; z/ P- j* A; X+ W" O
  776.               {  H) U' b6 s' c- w! }$ c
  777.                 bFirstUpdate=TRUE;
    9 P1 c* w# j% Q0 J; G+ C" S$ G5 s8 W
  778.                 dwTotalFiles=1;
    " H8 P0 o8 X% a& C7 U
  779.                 dwDownLoaded=0;' ]4 G7 u; e; j3 m4 \9 h
  780.                 bSilentStep=FALSE;
    ! v! P5 d0 P1 `+ B. V7 b
  781.                 bCompressed=TRUE;2 W$ ]7 @& L2 |
  782.                 strExtLocal=".\\DownLoad\";2 _% M0 _9 n3 Q8 z
  783.                 strFullName="update.txt";' H2 Y; N* X0 o5 A8 x) a
  784.                 dwProgramState=AP_CONNECT;
      R% ~' L( F; a4 `! a4 _: ~
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) x, G0 y% z% ?. B. N
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " U/ T8 h  N, N, }5 m
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");5 L& r: O  D; ?' `% I, Z
  788. ( P3 W4 `# K; e. @1 }
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 o! ~: V, q3 i) Z. V! h: {
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ) J( S7 t0 o* V$ ~' z
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    " `( O$ _  ?, y; N1 K# g: \" [) r
  792.                 {, I6 F1 L4 t9 n1 i% V% z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");  G# C; i7 E$ Q  G
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    / c- a% ]% U3 P7 X9 M( y
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");0 `8 t# O# E- ~% p
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( h8 N( \* |9 G( ~3 k

  797. % n  p7 l0 ^5 V" |0 S8 S
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( f5 n) v( O+ ?- U; H4 d
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. ], x6 Q) }8 M/ u
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");+ j3 `4 }( ~, r+ W7 h" W* j  m# h
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* a) g; ~- N* O$ {. A6 I
  802.                 }" N9 c6 q0 z- E- g
  803.                 dwStartUpSteps=5;! w1 G1 j/ _6 G. `
  804.               }
    $ c* ^" _3 G' b- }/ J+ t* n
  805.             }# u2 d: q9 V/ Y/ a2 v+ m
  806.             else3 b& w0 Z6 q8 V9 v5 U: [
  807.             {
    7 Y8 O9 o) s2 M% A9 y
  808.               unlink(".\\DownLoad\\checkversion.txt");* i% K8 \9 ~% O1 P" m) a
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ f4 \6 Y/ V/ V6 k3 q8 V
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");6 [9 A6 F2 w5 v4 I6 @
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; r( ~# X) s0 t6 M  `
  812. 7 ?' I3 E" ]7 f4 n6 d2 a
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 U) ?) y4 a6 _, s4 s
  814.               dwStartUpSteps=99;9 }) U3 t% f5 V( {. t, y
  815.               bFinishUpdated=TRUE;
    . f& M$ j$ B, }& T4 i
  816.               bCanUpdate=TRUE;
    & C" i9 B8 U3 s5 u
  817.             }
    1 R- K2 H% M! E& x/ t9 k  |
  818.           }5 q' h- Z+ ]: Q- I2 g! K: l: q
  819.           else, K! V+ A5 ~% E) h8 M6 G- w8 P8 h
  820.           {! Q% C+ f; G+ A& u( v" H/ p' e& m
  821.             if(!Dn.Connected())) N/ H( H* e) u; _+ }4 R8 u
  822.             {) |" l$ d/ n+ A% O+ c  a. ^
  823.               bFirstUpdate=TRUE;
    ; J% V$ C  L, U6 D* i' U& l1 {' M
  824.               dwTotalFiles=1;
    9 q) o1 j6 G3 I2 _5 z- r
  825.               dwDownLoaded=0;8 P- c8 p* K+ q3 u
  826.               bSilentStep=FALSE;
    , y& c/ U! I! \$ F
  827.               bCompressed=TRUE;
    - l' K, }* s  O# F9 ?) V# `. {
  828.               strExtLocal=".\\DownLoad\";
    7 y2 y. I& d& t8 D# C
  829.               strFullName="update.txt";
    + ?; h* ]+ Z) x) ^4 n+ f
  830.               dwProgramState=AP_CONNECT;; S, @8 g  A- @3 _3 |% [5 z/ P  q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) J$ k: p. {  i2 u. @0 Z+ l
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 d6 B5 \: V# k8 H; a
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : S) M+ u1 O& @& ~3 |
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / K) Y" V4 @" ^) v$ _) G2 \3 S. k' V
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ; ^3 e( ~, C( O/ n
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    5 z- e6 B. X7 r8 g
  837.               {  d- T6 Y' [2 i: \( G: S
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");1 A0 E. _/ Z# X  u2 \# @4 ?4 S1 w9 ?
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    0 V/ Y2 `/ U% h( s
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    , Z' R5 r. a. N3 x# Z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : @% ~1 L) s; X4 n
  842.                   Y0 C+ S# U0 Y; _6 j. M5 Q
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      v7 u, ]  c0 m  `: `6 b  @
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , L1 u! Q! {1 D# {8 u+ S
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");6 g8 R  u; A) ]) I. Q6 t2 G( C. L
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( C' Y( f( g5 y" y
  847.               }
    & V8 S/ k- M  h! ~
  848.               dwStartUpSteps=5;
    6 |1 W2 }$ p8 j* V9 Q: T6 T9 m) i
  849.             }7 `& ^% C6 s' u2 b
  850.           }
    6 G" A- h+ W5 A2 V
  851.         }# q; v, [8 K; r) \; s  |+ i. D
  852.         else, C) z( C6 k' Q/ m% z& W+ x
  853.         {
    9 i6 l' a9 s$ c, m- {; L8 q
  854.           dwStartUpSteps=3;
    $ N- T1 x' G# a1 W( O6 {, e
  855.         }
    - Y3 l3 ^) \, r4 O' H8 {+ C2 g0 \! T
  856.       }: }1 {* {' c; V( l
  857.       break;
    ( T( _7 P" _* A$ ^7 ]! n! |# G
  858.     case 5:3 L3 {* u1 {' ~4 ~! Y5 f  M
  859.       {/ X# n: x' q, b, [0 ?; ]* d
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    % ?$ c" O2 H! Z* |5 _
  861.         {
      v4 k4 }" {/ O5 u# z! e4 A- y
  862.           int opt_overwrite=1;$ R! Z7 w% L$ j# X9 Q
  863.           int opt_do_extract_withoutpath=0;
      g) P/ e( g$ g3 L  O
  864.           unzFile uf=NULL;
    : _  t6 m$ J4 G6 L
  865. $ N* I3 O0 A# V( v- q( z4 W+ j, F
  866.           uf=unzOpen("Wsa.zip");  ^! a# k3 r" Z/ B) U# T
  867.           if(uf)
    % [5 t3 X6 |; c  M
  868.           {7 A8 {6 ~: q# w% A( E$ T
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ! b& X: Q2 k& b+ V# Y; q3 X
  870.             unzClose(uf);! o+ o! m  z& P( }- w
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");( z- [  D/ p2 B9 h+ K$ ?4 }$ b$ y
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    / p7 Z* B* F' W) H. J  a6 b
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");* y: s- W; U& Z& ~8 t
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: V+ q6 q  R: H
  875.           }
    + m5 t2 l# ]# W- M2 c; ~
  876.           DeleteFile("Wsa.zip" );# V% r, H0 z( _: V7 R0 c( m+ r- L  j2 A
  877.         }+ T2 g! w4 n' @. d3 m

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

& W6 R/ }. y+ c* Q5 f$ q& s1 A, l/ w9 m( H0 I! f0 Y9 B2 R9 R5 Y- c. ~

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-11-26 12:37

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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