找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
" P8 }4 T% m: H: y
  1. / RevApp.cpp : Defines the class behaviors for the application.
    " ?0 R' c+ \2 [. d3 L! E1 p5 F
  2. //! u: A1 j) n5 ^" C# z# W% x  _

  3. 5 L% Y" c+ Y, r
  4. #include "stdafx.h"
    : ]4 Z+ z7 {* d- [2 g8 i8 p

  5. 5 v+ l' a/ V! S2 d% K/ W  d
  6. //#define UNICODE/ R# t) x' z+ P1 u& U
  7. //#include <gdiplus.h>
    ; Y7 f0 O% a# g/ P
  8. //using namespace Gdiplus;
    8 N# k" a! m6 S0 ]3 O

  9. % ~9 k: m/ d7 r$ b; ~. k0 \, Y8 k
  10. #include "RevApp.h"
    , l* k. Q! }! a; c4 J
  11. #include "RevAppDlg.h"
    6 G. r3 d: \9 I
  12. 6 H( r& z& N8 N! u5 q
  13. #pragma warning(disable:4786)' E- j# |- d( v; Y+ j6 s
  14. #include <map>
    & O1 l1 N# p5 k$ `! W
  15. #include <list>
    ( U6 [7 @) d1 a/ Y; [. C7 R0 J
  16. #include <direct.h>
    3 n9 `4 d. J4 i* _' X
  17. % p& L; n, T  w3 ~$ f
  18. #ifdef _DEBUG
    5 }: y2 d1 A) E
  19. #define new DEBUG_NEW
    & T* n* |+ Y6 Q! R
  20. #undef THIS_FILE- x# H: o, N) `
  21. static char THIS_FILE[] = __FILE__;
    : a% l' p* P* I5 W  \) V4 G" }
  22. #endif
    3 u6 ^3 |% p. f, P" [5 T
  23. #include "SkinResDef.h"5 n5 M2 u$ s( w4 N; P7 C1 }
  24. #include "ChangeBG.h"
    $ u( H; ^7 n1 C3 ?3 f9 w
  25. #include "AFXINET.H"+ H$ ]5 g* _1 z1 J8 `9 }  `2 g/ J
  26. 7 T6 O( y9 r9 H
  27. #define TRADITIONAL_CHINESE 0
    * J2 A7 J9 G/ j# M- G
  28. #define SIMPLIFY_CHINESE 1
      Y* U- g! p) `( s3 A- M
  29. #define ENGLISH 2
    6 b* k- N6 m& q4 ?( X$ F
  30. int m_iLanguage = ENGLISH;  ~- i5 q9 ~9 ^0 p. U5 y6 q7 R
  31. /////////////////////////////////////////////////////////////////////////////
    , i* ^: {  `3 |7 K! ~3 |2 i0 ^
  32. // CRevAppApp# v! _  A1 u  v% X  \7 |& q; y& F

  33. $ F" c1 v  I2 o5 }* j3 o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    , `1 Q6 w  S# q* _4 v8 f4 l* w
  35.         //{{AFX_MSG_MAP(CRevAppApp)  d8 j' A+ |0 M, c* D+ x6 }
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    1 C9 T% J: f# b4 y* w7 d- Q; A
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!! I! }/ y* y* m
  38.         //}}AFX_MSG
    . {7 `4 J' h  F! v: L. x  J
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)+ `8 f! F% q% x) T$ M- s7 {  e- P
  40. END_MESSAGE_MAP()5 F( ?: V& v( @9 I+ R1 j
  41. 1 P# l! {" _+ [6 p4 q/ S3 J
  42. /////////////////////////////////////////////////////////////////////////////
    7 @( {$ C3 b  w& T& k
  43. // CRevAppApp construction7 U" h+ f' h# A) B$ ?* Z- w9 w' o- x* P

  44. 6 e( ?! O; e. s# q" Y# N7 x
  45. CRevAppApp::CRevAppApp()
    0 i: P6 ]) Y  m% k. g8 B- D
  46. {: e& a7 g% ?6 V
  47.         // TODO: add construction code here,( c; v9 V' o+ Q7 @( j- D
  48.         // Place all significant initialization in InitInstance  ?& X& \$ H0 Y: S' t% H3 ^& y
  49.   bDisplayIsBig5=FALSE;+ j! w8 N' |& I1 `1 ~1 a1 ]" L
  50.   bRestartUpdater=FALSE;: x% r/ X( p1 j
  51.   bFinishUpdated=FALSE;6 y' O! Z9 k, w, G' x
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;. |; T( v9 [2 r/ d6 p6 i  U; a
  53.   InitChangeDataBig52GBKS();& n, v& Q/ Z6 m0 R
  54.   InitChangeDataGBKS2Big5();8 L: _& `: Q. c  ]# n
  55.         //
    0 N, P; J5 o' a6 t! T
  56.         bClickRunExe = FALSE;# _. q- u7 H1 z
  57.         //
    " E4 H* _) [6 [- O3 O0 [) V8 F6 D
  58. }
    % L6 _; B* G5 i: R; k

  59. 0 M. d  u1 ~7 q3 x' E; U
  60. CRevAppApp::~CRevAppApp(): y. @2 _+ P, c* w2 h4 p0 h
  61. {- e- ]6 |2 j! l5 |/ V
  62.         // TODO: add construction code here,
    * k0 I( v: L+ f9 D; |
  63.         // Place all significant initialization in InitInstance1 K+ o- ~, B/ F
  64.   EndChangeData();
    / y9 q/ B  X- M1 I
  65. }% D, T1 N2 u3 v) B) j
  66. : R; o4 @/ b; ^3 V4 W, ~9 w
  67. /////////////////////////////////////////////////////////////////////////////! s' m8 c9 C7 Q2 j4 z
  68. // The one and only CRevAppApp object% o/ D% \, k+ I( W7 t

  69. . t4 ~. V* S, v# m
  70. CRevAppApp theApp;9 J6 |3 b$ r6 G7 x+ l
  71. 8 ?2 S5 @  Z# _  T, g
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName). D1 P2 B& s5 l) \
  73. {) f- p! d! Z1 l
  74.   int iEOF=0;. S* V$ M( c" z5 M5 @
  75.   char szTempName[MAX_PATH];1 d: f. o  ~7 F
  76.   *szFileName=0;, ~" w+ i- {' n& Q1 \! W1 u
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! G5 v1 a. l: e8 ]3 c1 w- l  F
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')( W$ C1 u! U! P7 S
  79.   {
      x6 J: `( J5 M1 n) F2 A- p
  80.     strcpy(szFileName,&szTempName[1]);4 B2 e& ^4 @) Y9 k
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)6 W+ r+ N0 k1 u( |# f7 q/ D2 O
  82.     {
    2 Z6 n" G. s; ]3 U
  83.       iEOF=fscanf(fp,"%s",szTempName);. w9 A8 e' _3 q3 }3 g# Z
  84.       strcat(szFileName," ");
    / C; H1 E/ |5 c7 [9 u% i
  85.       strcat(szFileName,szTempName);5 L; b4 n6 g3 _8 u  `* Z
  86.     }$ n- l* A" H9 ?1 _/ H; U
  87.     if(strlen(szFileName)>=1)
    3 }* C9 {* o2 |6 ]. {" S
  88.     {
    # z* J: K! W! m5 _: m4 N6 V
  89.       szFileName[strlen(szFileName)-1]=0;
    4 e" n3 d7 p6 F$ v
  90.     }8 y( Y! J  }% f& R3 W2 q7 I
  91.   }3 s: f6 v3 b* ^& ~/ r$ b4 N5 G
  92.   return szFileName;
    : F6 g- y8 i% W6 p+ Z$ H' U
  93. }
    ! y6 T1 |9 L/ I) Z& @1 }! p+ u
  94. 9 j# Q) Z7 S3 q. u  ?
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    9 Y* @/ _, u) T- l* N8 t, A' O1 a
  96. {
    ( Q. ?6 S* \, Q0 }! b8 P
  97.   FILE *fp;
    # p9 ?* U. w, b8 Z# d( e6 j
  98.   char *key=NULL;7 k3 D$ a. i2 J0 l
  99.   char version[MAX_PATH];% e0 W! m0 t% T4 q8 x. M
  100.   LPUPDATEFILE file,olds;
    ! f7 Q: u$ w% g4 E
  101.   std::map<CString,LPUPDATEFILE>::iterator p;- c3 V" ~2 H/ w/ Q' G$ d/ M$ _7 K+ @

  102. 5 m  K7 @- `, S$ _  g( o1 g" M+ y
  103.   UpdateList.clear();
    % n5 R' E! f$ B' C& a7 \1 d: L7 P
  104.   UpdateFile.clear();7 `7 ^/ V8 a; W; W; m
  105.   if(GetFileAttributes(filename)==-1) return false;
    ) j9 a8 B! G  O/ D! t
  106.   if(!(fp=fopen(filename,"r"))) return false;' M& n2 o8 U; s: N5 X7 u9 }
  107.   fscanf(fp,"%s",version);8 u  o' e' r0 ?( l* i
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    5 T- M0 O; E% k* s, l  O
  109.   while(fscanf(fp,"%s",version)!=EOF)% v) \5 ?7 f0 K- f$ k
  110.   {
    2 V5 }8 o5 X4 V7 h
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # U0 N. c. O- `2 D' X9 I5 m2 G& X
  112.     fscanf(fp,"%s",file->path);0 A8 K/ T4 o* t2 u8 ]& B& u
  113.     ReadFileNames(fp,file->file);
    ( Y/ j9 W7 C. ?$ ~
  114.     strcpy(file->full,".");# V, b2 g8 G$ k/ V
  115.     strcat(file->full,file->path);( ]8 E7 j5 T  z1 E% e
  116.     strcat(file->full,file->file);
    * Z: n+ ?7 v7 @+ W4 E) [
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())* [2 S7 D6 ~% i. ?8 b' J5 o# Q
  118.     {" V/ h& a8 v4 _9 N# v2 W
  119.       file->vers=(float)atof(version);
    ; _# G5 u5 ?6 V! g) E
  120.       UpdateList.push_back(file->full);/ `; P! X. d( g0 }5 Y- O0 v0 L$ x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));' |6 {% O: M9 f3 y) N6 \  [+ K
  122.     }/ C1 a4 r% V) X6 K# c# u. C
  123.     else
    % P  e! J9 O% Y% L/ S8 e% k
  124.     {
    : j; n' D* O3 \# I+ V
  125.       olds=(*p).second;
    ! [5 B# w; y$ o( V( D+ d5 v* F
  126.       if(olds->vers<(float)atof(version))
    ! D9 _8 l3 t/ |/ ?' q: I- I
  127.       {/ x. e7 [- x3 p9 K' Q% h* ?; P
  128.         olds->vers=(float)atof(version);
    6 ?. O' g8 B$ P5 r0 R. |- i( o2 r
  129.       }, x# |/ w6 P+ A2 K( X/ q& D7 O
  130.       free(file);
    ; s* F: W% n1 y; \" e* S( u6 X9 o( o
  131.     }/ g  P3 f& N! m0 B0 H" m3 l8 ?& r
  132.   }* G% S; t% G1 u- h. W5 F6 p, x
  133.   fclose(fp);
    . L# v. j9 \3 V& V
  134.   return true;
    0 s) j) L% `3 `2 C! T9 M9 y0 T
  135. }3 a' L3 \+ F" F

  136. ; G5 S0 k7 U; B3 F) W3 Z+ c8 u
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath), L" l1 V1 g- p2 y7 d
  138. {
    4 K1 `( O7 l6 z% \. S
  139.   TCHAR  szFull[MAX_PATH];
    / M# v1 p4 J% h) Q
  140.   TCHAR *token,*inter;
    : e& O5 [$ I) t" @- X3 m
  141.   *szPath=0;$ V2 V) t& ~; a! T
  142.   strcpy(szFull,szFullPath);
    : y' x) ~7 ~+ D# W$ V' X9 S. m/ k
  143.   token=strtok(szFull,"\\/");( q- b6 I* ?  M  t
  144.   inter=token;! M! F- _% a( p4 ?) o, S
  145.   while(token=strtok(NULL,"\\/"))
    - P  }2 ]+ I0 ^7 ~2 Z
  146.   {) p2 f; ?0 D5 x  d, W: T/ d, U9 }
  147.     strcat(szPath,inter);, t' T4 U/ h( u% N4 X9 [
  148.     strcat(szPath,"\");
    6 I( k9 N4 {# T7 y. v5 B& \/ j; ]3 s
  149.     inter=token;
    : X! l- m; @  k: v: M( H2 [
  150.   }
    : Y2 A2 a7 U. f" k& I
  151.   return strlen(szPath);3 d. I) D/ p! g9 s! c" \
  152. }
    6 k. q1 S5 w1 U" Y* L& _8 n
  153. 3 y8 u$ u. ?) j) u2 k1 `' W  z  n
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ( V: B" d, _2 X- \( D
  155. {. g4 \, I8 @4 J  ]$ G8 F! N
  156.   DWORD attrib=GetFileAttributes(Target);' f* K" |7 ~# Q$ e! P3 ^
  157.   if(attrib!=-1)$ Q' ~; f0 F- F$ i) B; j) Z4 V
  158.   {- y8 G7 f( L( l" ^" n9 q2 W
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))' }0 i0 }$ K8 C( e/ L
  160.     {
    $ G- H  N3 K6 h
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    " h' H8 t& J% d+ s7 w  p  {6 T  Z0 q
  162.       SetFileAttributes(Target,attrib);
    % U$ P4 Z0 `1 V( t) Q9 n) A
  163.     }% z3 N; @3 i8 {! C9 x$ P
  164.   }
    5 X6 Z; ]) a' H6 D  V
  165.   CopyFile(Source,Target,Erase);' R: d: V5 N9 z& c. j
  166. }
    - |$ c' G( I" f4 l7 ~

  167. * e: c6 S/ J# S" K5 `$ D; C
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : f; p; A( ^. d9 ^; @& A2 ^# i
  169. {
    $ k6 R, Y% h/ a( S7 T
  170.      FILE *fp;
    2 B+ F6 S# S% a$ Q* F
  171.      char  szBuffer[8192];
    5 ]/ v& l0 P3 ]5 K
  172.   va_list  argptr;" ^2 |; n6 K5 P; j+ F+ Y; ?
  173. + Y" E8 @3 j) W: A
  174.         va_start(argptr,message);! `7 V( }6 ~/ j/ G" W  w* {# c
  175.         vsprintf(szBuffer,message,argptr);
    6 _/ I# q0 x6 c, a% S: G: S2 _" z& l
  176.         va_end(argptr);
    ) f2 _2 F3 ~/ ]2 z
  177.   fp=fopen(FileName,"a");- J1 i- d, s$ i' Q! [: X( v
  178.   if(fp)
    6 T6 ~. z4 Q' ~' s) q
  179.   {5 g9 L7 y8 T9 {( O: m0 Y
  180.     fprintf(fp,szBuffer);9 ]- I1 ?! H  T& H# ~% l6 o* h
  181.     fclose(fp);( T6 m) u% Q4 v) ~+ V5 C
  182.           _flushall();, ?' u4 y! f; q' t: v8 c
  183.   }# _, K4 c/ z' H) V; c" N5 D
  184. }0 r! K6 @5 N0 q
  185. ) ^& z0 ~- \0 \2 u% z
  186. BOOL CRevAppApp::Fclearf(char *FileName)( Z- J3 Q  M. \0 ]9 P  {  A
  187. {
    ! _, B+ D# m: t1 F+ }7 @& d7 w
  188.      FILE *fp;( h5 Z! d. X* W
  189.     DWORD  attrib;
    1 x7 k% \9 G" Z1 f8 V( f/ E4 F$ H
  190.   attrib=GetFileAttributes(FileName);1 r8 W% q. P9 ?9 `4 y' S
  191.   if(attrib!=-1)
    + J5 H; g, B! d. O+ i
  192.   {
    9 ?0 a7 ~% D" C; h+ X
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    8 u4 }' _9 B0 B8 y% e
  194.     if(!SetFileAttributes(FileName,attrib))
    2 R7 @  a- v# Q4 Y7 [# Q
  195.     {5 o  i: _& |$ [# _8 g
  196.       return FALSE;/ g$ S# h0 p$ p8 N" u/ V
  197.     }
    0 I$ j" ?; @, Q2 e
  198.   }
    7 |3 \+ X) ~9 K' i1 M
  199.   fp=fopen(FileName,"wb");
    6 Z: g1 ^! X2 B% j5 ^5 s
  200.   if(fp)7 O) q+ a+ Y# N% g, u: @6 m# ]4 F
  201.   {
    : a. X6 V/ J( q/ Z
  202.     fclose(fp);
    ' W' i" N2 ~5 Z8 W- ]
  203.   }$ z- B! E$ k5 Y4 |" M/ A3 X
  204.   return TRUE;! ^: L- S3 ?$ b3 ^4 p
  205. }
    # ^2 M! c8 j. z- W, v: U: }0 v

  206. & Q9 Q) _* Y! C* Q# L/ u
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    " j: Z( y* T/ {  h
  208. {
    , q8 s/ b7 S) p3 l2 x" k! e! D; w
  209.   char filename[MAX_PATH];
    0 l' |9 |& p, q
  210.   LPUPDATEFILE file,olds;+ k' f* G1 @9 l. F* R" ]! Y
  211.   std::map<int,CString>::iterator i;
    7 y3 p( M( m, J) J7 M% B) H2 |) e
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    / k: u$ e& V2 I
  213.   std::list<CString>::iterator l;
      @3 p4 @7 p( _; S$ q( f, C

  214. ) u; p. c" T4 T# t6 [8 H4 F; S
  215.   if(bFirstUpdate)! f; J. M- @3 ~! `8 d4 |5 @
  216.   {+ ]/ z0 R- K6 l: \7 r
  217.     dwCurrFile=0;
    & p) r& \# H; T4 I/ B
  218.     bFirstUpdate=FALSE;! ~- T/ u0 v# j- y) X) y0 Q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 |( ]- K* x* i$ T- V: Q" E0 V
  220.     {. u! X, d( B7 \3 y7 i: P6 Z* x
  221.       dwTotalFiles=UpdateLocal.size();
    8 C+ w; Z8 K# z' U7 f. f
  222.       dwDownLoaded=0;. j# d; C  R3 v
  223.       bSilentStep=FALSE;5 R% f  M# Y$ e; L0 C7 v  t3 {
  224.       bCompressed=TRUE;! U% o3 g' K  T; w- S) Q5 d: W
  225.       strExtLocal.Empty();5 `  H+ Y8 N* }; t
  226.       strFullName=(*i).second;! j6 x# j* O/ @/ ]- s
  227.       dwProgramState=AP_CONNECT;; S' U: ~' j4 @' i9 v
  228.       return TRUE;4 b& N' A4 J5 Y8 w  ]5 N- Y2 P: B
  229.     }
    # {$ Z/ x  b; X2 r9 s) b- V  z
  230.   }
    7 @9 b. s# D, r. k8 n, k
  231.   else if(bRestartUpdater==FALSE)9 T* u5 O* r* y! a$ r+ ?
  232.   {% \" Q5 S% o+ \
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())! o) I& p' L9 m1 Z
  234.     {
    # _3 `3 i8 I* g; U7 c0 l
  235.       file=(*p).second;8 q2 m6 B: }: M. {  F5 S/ Y) ^- q
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())6 s, ^/ W5 W: _; m6 p
  237.       {
    % Y4 p3 x* U" u2 H& g
  238.         olds=(*p).second;9 r, l0 I' h, ?6 `! g
  239.         olds->vers=file->vers;- l5 Y2 ?* z$ S! G
  240.       }5 n& ^  {  W& W, M
  241.       else
    / G, a' a; k# C0 i
  242.       {
    0 _0 _7 A2 p, l' w, _, q
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 T/ O# ^' f* P9 G* }7 }
  244.         memcpy(olds,file,sizeof(UPDATEFILE));- X; `8 {( V5 e$ t: {
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    1 b  D2 B4 B1 I; u5 _: W3 ]
  246.       }7 }+ J+ b- d2 d& ]/ M
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    4 }5 r0 I0 P  `3 ^& [
  248.       sprintf(filename,"(%s)",file->file);
    4 j+ E; P  v# J/ I( M  A
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* Z- W8 |& ]- |2 r8 B, U- q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }% c$ ^8 @  K' m4 X) R( H
  251.     }; y) Z3 B$ D/ S. D& t* L; s  {& Q
  252.     dwCurrFile++;% C' ]8 g7 S. Q9 ?! C! t
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): q4 g: d, N8 k5 n
  254.     {4 }. {8 P" v6 M, P
  255.       bSilentStep=FALSE;+ L: d" {: g5 N& Z+ B
  256.       bCompressed=TRUE;- P6 Q/ U1 s; a* S
  257.       strExtLocal.Empty();
    % C4 O; @& ]* a9 n1 p3 A( f8 }: j$ Y
  258.       strFullName=(*i).second;
    6 T& Z7 q% n8 K1 |2 N! P5 N( B" g
  259.       dwProgramState=AP_CONNECT;
    % i* |# E2 y, t) x. |4 o
  260.       return TRUE;2 N" ?, y7 ?+ \% f1 t7 [' [
  261.     }# `( B" l" }8 b
  262.     if(!bRestartUpdater)
    $ E2 {; ^$ }9 e
  263.     {
    : v. g0 c& c; x" h. m4 ~' i
  264.       int iCurrSize,iFileSize;
      A$ F! j  S# S9 i! c2 S
  265.       iCurrSize=0;! h; u" N; O, G/ D
  266.       iFileSize=UpdateList2.size();- u+ }4 F1 ~# a6 i+ @- |5 ?
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");! w% d8 B. ?7 h# R: n! [
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ' @! Y  L* n9 x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    $ D9 l! z$ H9 E/ n1 {2 N
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% V* Y( ]1 l  E
  271.       Fclearf(".\\update.dat");
    ! w5 _* Y9 j) i) d  Z
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    9 @/ m- R- j' s: {. ?
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 e- z( C3 x! s+ W& j
  274.       {
    ! `- a3 H4 e! I
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())7 N8 {  g. \. }& }4 N/ R: o0 c! q
  276.         {
    - R; @- w- W7 _5 J" Z! M( r
  277.           file=(*p).second;, F3 O1 K/ J; T) n# p, ?) R
  278.           sprintf(filename,"(%s)",file->file);$ x+ L  E2 @* `6 ~/ K1 D  l
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 i) {: g* R; M5 l7 B+ t
  280.           iCurrSize++;9 K% F$ }) ?+ I3 E, R
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));1 `( w! z, t, O9 o" j9 L
  282.         }
    3 h" \, G7 {4 Q- ^
  283.       }$ T0 }) u5 Q' G; X* m" P9 I
  284.       unlink(".\\update.txt");$ P7 S. m0 t! O$ B6 ]3 ~( r& x
  285.       unlink(".\\update.tmp");
    . }+ D" x- a* N& ~" i  {# `
  286.       Fclearf(".\\checkversion.dat");
    / {5 X/ S, f! g+ q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);! s- O9 b( ?' H; q+ i% _3 S
  288.       if(UpdateLocal.size())
    * i9 \7 M2 I6 f: }
  289.       {
    ; S# c2 ^! V7 G2 G- P& }
  290.         UpdateLocal.clear();
    ( t. o5 G3 J; n! H6 b, I
  291.       }4 }0 {6 @5 o3 M5 j5 k5 a3 }/ k9 _
  292.       if(UpdateFile3.size())
    7 e: M" h! Z7 U8 \% k
  293.       {) g) B6 v6 i# ]
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 \) z: V. {2 U& r! {
  295.         {' R% e* M+ h2 S
  296.           file=(*p).second;
    2 K# v; D* K2 h- d+ Z0 }" T7 z
  297.           free(file);8 _$ j! W4 D, H) o* @1 j
  298.         }7 V; u& @! w$ a$ T2 {0 K: }# p
  299.         UpdateFile3.clear();
    / q" `3 u& c4 F% G
  300.         UpdateList3.clear();* ?" z) h' x3 t) E% i" f
  301.       }
    1 c- o0 c. u+ y7 ]- e& Z7 w
  302.       if(UpdateFile2.size())  N8 h- v# m) F2 b  E
  303.       {
    + u$ V, T- {8 R1 w& O5 I
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ V$ R2 a5 v# B, S  U
  305.         {0 |8 ^0 y: w5 z7 `+ r/ h  C; p
  306.           file=(*p).second;: f  r8 _: j5 J/ L5 v
  307.           free(file);
    ! O1 l9 B) L9 N: [& W: o% l5 G
  308.         }( D* D, }: [+ ]) M/ t
  309.         UpdateFile2.clear();
    ( a' F; i3 ]; y/ ~- f( }' {! J
  310.         UpdateList2.clear();5 j8 T. O) n/ x+ y/ }
  311.       }
    : {7 S. t; e+ H' |/ x. K
  312.       if(UpdateFile1.size())
    % e) K$ V5 p" B" X/ G8 t- C# w: g
  313.       {
    % ]; R) T% R0 y4 t$ u
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ! ?# y; {, b  U5 v
  315.         {9 X% `: J7 m" b" p) r9 H2 S
  316.           file=(*p).second;
    - a7 j2 z) Y: r5 X2 Q* j9 N
  317.           free(file);
    / B' H& [) \# K
  318.         }7 y8 B. n# U1 N
  319.         UpdateFile1.clear();
    / n! d. Q+ w! V% @8 I" [7 i
  320.         UpdateList1.clear();9 Z: b2 h1 a2 v: @  z$ u
  321.       }
    6 }8 s2 X! p! V. m+ p- m; O$ V7 [
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));" B6 B. A. `7 e" A- a
  323.     }
    4 f1 O  S) E+ d
  324.   }- ~( r' f  b. T( s) ]4 K1 e/ q
  325.   return FALSE;
    ' w7 p' U' G: Z4 W
  326. }& r5 R  k& a3 [
  327. / ~! p+ M" T) y1 f; c& q* n5 s7 N6 Z6 s
  328. void CRevAppApp::ClearAll(void)
    : W9 w/ f+ x( e
  329. {
    ; y2 w* u+ o8 w6 ^: U' Y: ]- Y
  330.   LPUPDATEFILE file;
    & ?3 r: ]3 L0 g2 y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;' P( j* O8 g" v. k
  332. * K0 k, Y* @% v. x% d2 q- h9 p
  333.   if(UpdateLocal.size())0 W: t+ r1 V* l; A" I- N$ z
  334.   {
    * Q0 p4 W% W5 c* |
  335.     UpdateLocal.clear();
    7 D( U9 S/ N3 U0 A
  336.   }
    5 s( |$ X5 |4 ^( L, v; l$ h. `& M
  337.   if(UpdateFile3.size())1 ^' k9 j2 [3 g0 H9 i
  338.   {
    % Y- n. l6 ]+ x" @4 Y7 c3 a
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 P4 ^3 M4 I# t" j$ R
  340.     {
    - v- ~, j" N( _+ u) H3 e* s
  341.       file=(*p).second;  f& U. }, P. `/ b
  342.       free(file);/ M7 f+ n1 ]: \+ ^8 p# [4 D7 V2 L
  343.     }
    9 @% G" z# M' F& `0 t
  344.     UpdateFile3.clear();! p* P- T7 D! i
  345.     UpdateList3.clear();
    3 y! c5 u4 ?/ {4 ~
  346.   }
    $ q8 T' J4 Y/ p9 j, o% E% {
  347.   if(UpdateFile2.size())' ]7 C  O0 Z- {- A/ t1 z
  348.   {
    ! ?& X5 w7 ]3 O3 F& B8 R' P9 n
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( Y, i) u) \4 c( z
  350.     {
    " I) _: N3 ]7 J" q$ R
  351.       file=(*p).second;7 @5 Q! N! D$ }% B- C- d+ ?
  352.       free(file);
    , U0 ^/ N2 V* Z# A! n1 e$ @0 i8 V
  353.     }* c9 ]0 T+ w, L8 F  ?9 K+ D
  354.     UpdateFile2.clear();5 c1 l  a& O3 ]& h
  355.     UpdateList2.clear();
    7 K, r) k' y! H6 c8 M" O
  356.   }
    5 o) p6 a' B& r1 f
  357.   if(UpdateFile1.size())
    6 y  {7 ]1 z8 d% q, ~% [
  358.   {
    ) }) y# \& K& \0 |" Q: ^
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # O. r* k" U( Y7 w$ w
  360.     {0 R  e" [8 a7 k( x
  361.       file=(*p).second;# ^1 J. d4 Q( W6 m) l! Y
  362.       free(file);
    6 M8 e7 P/ m- j/ w. u- g& G
  363.     }
    8 y# i- v  Q1 c
  364.     UpdateFile1.clear();6 b  `, m: e* r- Z6 H3 m
  365.     UpdateList1.clear();( t( z* p! A$ r( u0 X5 g
  366.   }
    % N' ~- @4 p! x' Y
  367. }  6 e. Q- V; f% d  r- y* _9 K1 J- K
  368.   1 R  T7 V4 |0 C2 ^4 N
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    1 y: Y& t9 I. J' ]& K& G9 [) X' {
  370. {
    9 s% u8 n, ~9 T( P* d$ X
  371.   int c;
    ; E1 I2 x! B2 z" s" T$ B
  372.   LPUPDATEFILE file1,file2;! z2 W4 _, m9 t' ]
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , b# g+ V! E( J1 z, J8 O1 |
  374.   std::list<CString>::iterator l;
    ( c# w1 S' T, A5 T
  375. ) s+ _& E7 G/ M# E* _
  376.   UpdateLocal.clear();' \/ K1 d9 Y. _
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    : H5 _2 s0 E8 D+ I) r! q
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    6 x4 ~- H1 P9 H8 b
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    4 H1 @/ w) W0 F. I) {, \9 l
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    0 ?7 p( t: D$ `' T0 x- {
  381.   if(UpdateFile3.size())! e3 r) a6 x6 [' r( p( D( `
  382.   {. j. f2 T8 T1 L& ?" U. o
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)9 J7 }9 W6 ]) f$ J5 J4 x: `
  384.     {
    % q' J! v1 M; A; m9 S# I$ R
  385.       file2=(LPUPDATEFILE)(*i).second;  [2 l1 J8 ~: V* s9 V
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())2 v$ `7 O) x/ X: H8 c. [* N( @+ k8 f
  387.       {
    * Z- |5 N  B* m* t9 K
  388.         file1=(LPUPDATEFILE)(*p).second;
    / c! s& }# N" z8 U; }# F2 S
  389.         file1->vers=file2->vers;
      I; k" [  l9 j& ?  b5 c  @$ i
  390.       }( O! e1 e* U( |; m. q  _
  391.       else; P1 _" T9 F( c6 j5 _7 \
  392.       {8 `1 v1 @. G. b9 |& F. N, K
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( @! A; p! S6 W
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));0 i1 K4 e& q, o! c7 O
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    + F* K4 J& R" A# S7 h
  396.       }, y. U3 J, s# n/ y* N4 Y7 T
  397.     }
    ) }6 x1 k# j' W, C) r
  398.   }
    ! a7 M/ w$ [% J9 ^, I- K
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)5 R/ s5 O/ @- {; `5 r
  400.   {
    7 J+ c) }7 c9 R1 Y5 ^1 d) G. \* O4 Y
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())  F" W/ i6 X1 o% w0 R; V
  402.     {6 m0 F# \/ f- H6 T
  403.       file2=(LPUPDATEFILE)(*i).second;" z# ]1 V& g0 k7 V4 X( B
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())/ o# G; W" V1 i9 S# W% _, \  q5 M
  405.       {- w0 F7 V+ y0 _7 ^# j) M3 ~! r
  406.         file1=(LPUPDATEFILE)(*p).second;
    8 ~, Y  J+ X& N' D" |. u9 Y7 U
  407.         if(file1->vers!=file2->vers)
    . X$ u: I' j7 u) @+ r7 O# j/ s
  408.         {
    : e- h9 S$ `* v9 m
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    9 h- V7 q5 X+ d, C/ h3 o3 Q
  410.           c++;% J' T2 n5 d2 }$ |, G" N  P) J
  411.         }
    . Q0 N8 M& l1 p/ D& s6 w
  412.       }2 a% w6 Y1 }. @1 ~
  413.       else
    4 q2 f8 c' K1 L* r! ~( ]+ U
  414.       {) Y- R) k6 S$ Q  a# @5 Y6 U9 A
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 M( @6 |3 h! j( r
  416.         c++;
    + h; f8 L4 C+ I* p+ c
  417.       }% B! M0 U6 D7 C4 ?2 ~
  418.     }; T3 X" j" g# K2 b
  419.   }
    6 ?  U8 B, z: e4 [$ u) f
  420.   unlink(".\\DownLoad\\update.txt");
    & n* z4 [! R+ ]
  421.   if(UpdateLocal.size()) return TRUE;
    3 I$ }, j; {5 O1 G8 ?
  422.   else                   return FALSE;# [9 Y  L; Y( x
  423. }
    2 \8 S8 d) ]8 h6 d5 k
  424. 8 Y9 B+ j8 b/ T) v; x9 R; ?
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"; H& l" O% ~5 E) ~' s( [' Z4 ]6 t
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    : I# B0 |0 _' l1 w5 F
  427. ! k' y0 [, d9 n5 m) M

  428. % ?5 J$ p. F- `2 h
  429. 5 }% f8 L2 ?: B7 o
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile). M) j1 M8 D$ L9 L; w6 a
  431. {) J0 ]9 e  C8 W1 g4 W/ c
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    2 p8 T0 r) X! E  x' M: U7 \6 |6 F
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . i2 K) A: U3 G
  434.   {& n' A' b4 A, P; w; d+ ?1 ^$ i
  435.     char szLanguage[50];
    4 Z; z1 f" X$ R$ T
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 ?+ U2 W9 C- M6 C
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 t# \! i  S# Q+ _2 o6 P
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, l2 c$ E- d0 [
  439.     else                                   m_iLanguage=ENGLISH;& ^5 c" p0 C9 U# }/ O* l5 s( N0 ~8 x
  440.     char szRegister[100];
    ( S+ K- H9 ~" q, q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & @! L+ Z. [" S$ D
  442.     strRegsName=szRegister;
    & E6 W2 ]7 F) s+ c
  443.     char szPatchURL[100];
    . N2 K; B, v" V& y2 `1 ^3 ?
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 k$ r9 c9 j$ F6 _  y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , Q  p6 i4 {+ R$ Y4 w6 ?" X, {
  446.   }
    4 d+ Z2 I# s/ }& ~4 S
  447.   else
    $ N; W  I* T; W
  448.   {
    : l  g) E( h2 q3 p& |; [/ C
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);. I# R; A1 V8 q( r) t
  450.     strRegsName=DEFAULT_REG_URL;
    ( [( t2 ?1 Y. a- I2 l. S
  451.   }# I) @' j( ~! C/ R; C7 s
  452.   if(GetFileAttributes("hosts.ini")!=-1), W2 S; W' P% a/ b  u  O
  453.   {
    4 o! N; c8 O8 `  P
  454.     char szIP[50];& o! A$ }6 g* L8 o0 S  a* H: p
  455.     char szDIR[300];
    " f/ |$ z: X/ i) p' E2 \9 |8 w
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; d% R  g' D; p& p
  457.     {
    2 m. V9 f8 S, C8 I; s6 k$ n
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");& q3 {5 ?/ @* F
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");3 F+ h0 t; I5 Y7 T- S* B  Q
  460.       strHostName=szIP;; h/ M7 p6 G/ H: x1 E
  461.       strHostPath.Format("/%s",szDIR);+ \$ y3 _5 A" h% H3 a' k5 H  x  i
  462.     }- t. V7 ~2 T$ F0 u. M* g
  463.     else
    * B7 c8 P; e5 N& A/ P% Z
  464.     {
    + ?2 x. r2 S$ k/ w/ R
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    + b% L. b1 P7 n5 L, U% N5 W
  466.       {1 }" l+ v% t& O# B8 r2 }
  467.         char szLanguage[50];; Y. o' j) ~. i
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 M" \! F" [0 X. Z
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& c1 J; s! }: [# {
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ( n, L( |8 U4 D7 v5 |9 ]( P% f4 n
  471.         else                                   m_iLanguage=ENGLISH;
    7 N0 I9 [. C' F5 A
  472.         char szRegister[100];
    3 V5 C/ V$ j4 t  e9 ^: e0 Q+ ~4 `
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 Z; [4 e3 T1 I
  474.         strRegsName=szRegister;6 T! u9 Q( s3 \0 e& a& |0 p9 a
  475.         char szPatchURL[100];4 g% l, [# }. u: x  K- S. v4 R9 L
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 a. N) J' A8 b4 {
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 N$ h" f. i( n2 ^9 n
  478.       }
    - W/ \! u! k; ]
  479.       else: l( [4 ^) R/ z% Q2 [3 e1 n
  480.       {
    9 {/ X: j0 s! \2 }
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; l0 E# C" f' v& q' V! C
  482.         strRegsName=DEFAULT_REG_URL;; Q4 o* a# ^+ Y
  483.       }
    . R; O  S' b+ Y" l
  484.     }
    ( v: [1 E# H2 Y" ?5 p3 h% z! ?$ l
  485.   }
    + @5 h( {4 p) c( }4 R+ L
  486.   return true;1 w2 G. y+ T0 u; N- I7 C
  487. }& F3 h. D  ^2 |8 C8 I! \) q

  488. 6 m# e  G* q" l8 _8 w6 I9 }
  489. #include ".\ZLib\unzip.h"
    8 I' R/ m5 N' A( u7 g+ s( v
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);# q/ o1 `, S9 \$ e
  491. /////////////////////////////////////////////////////////////////////////////
    7 B$ o3 \/ f; y0 d( {. F9 B/ r
  492. // CRevAppApp initialization- V9 R3 v$ j0 D5 ~
  493. ! d$ w& Q9 m& g2 y7 I. L0 Q) A
  494. BOOL CRevAppApp::InitInstance()6 U: c- [: p7 c  o  r: G
  495. {7 [* w3 x. k2 W5 X( \! K  Q! d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ' W' a0 `( z, A1 }, F/ L' {

  497.   Y+ d' ]& O$ x; L
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    , E0 J& }5 V( @* d  i  d+ Z5 y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))2 R- g& E: c" d5 O) E0 t2 M
  500.   {
    " a( T( |. [$ S7 t
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");/ R  Z$ _6 F9 [# R' u  o  ]1 F
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ; v1 f3 E1 b) g: d" y+ x5 k7 P0 r
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))# Q, _3 K& a0 F8 ]
  504.     {
    5 P) \% L1 L/ W- D
  505.       strcpy(szPath,szPathTarget);; V6 V2 X. |: ^% ^7 {2 a6 p
  506.       SetCurrentDirectory(szPath);
    / w9 C" B2 i, ~- w. i1 j2 y* o' B6 I
  507.     }) Y. ^* v. ~  V
  508.   }: B1 p' H3 b, H
  509. #ifdef _DEBUG, K& J8 C' \! p# \8 f* t
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% m5 j: N" k4 L
  511. #else
    ' R% Q3 _( i0 Z) m; w( y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    7 \4 U$ j: ?) G# e
  513. #endif
    1 C& q- l% w. j$ M: d
  514.   {; q% {, j1 O1 C& K" m/ r
  515.     char tempFileName[MAX_PATH];
    / o% e7 f2 }) v( `/ q  l, C
  516.     strcpy(tempFileName,szPathSource);! Q% }" L( Z$ y5 |: ^
  517.     tempFileName[strlen(szPathSource)-12]=0;$ w4 [% b& \0 f
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    5 E6 {/ d) J- W+ i2 ^. e+ \0 z' J
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);+ h/ a! q9 f$ Y* A5 R
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);; i+ U% M- j" ~) j8 z) C/ @8 D) G2 R
  521.     return TRUE;% X. M% K( I5 V1 P! l
  522.   }5 e+ Q0 ^/ Q- w$ ~& B
  523.   // Nuke 0118: Delete run.exe2 `5 o2 a& X+ Z- U6 F. I
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );, B4 Q/ `, {! y/ M* }# o
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) B6 n! `2 l, R1 q
  526.   if(!ReadCfgFile("Config.ini"))
    ) Z8 b' H8 S0 d- U- d6 V
  527.   {* V) t: A8 m7 c2 v3 x0 g$ w
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    4 H. f3 q: Z& M3 E6 G4 e% p
  529.     return TRUE;+ R' w( D$ Y* K/ R
  530.   }3 ~* V+ h% r: u% H$ q5 `
  531.   HANDLE mutex;
    ) N) W' O- w% P9 B7 n. e
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    - t5 i) P' v7 M* Z
  533.   {
    3 u7 l9 U7 ^% J- A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)% u( E# A6 e" b7 G4 [+ V
  535.     {
    5 K- A9 L$ i+ l- S
  536.       CloseHandle(mutex);+ S3 @  ?4 k/ O# P
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * G/ x) y. Q: o; ]% ^
  538.       return TRUE;- V' L5 ^4 r5 @- s; S, d
  539.     }( R2 J+ q7 K* p  h: i( P
  540.   }  
    " y4 f3 v' ]" z
  541.   CloseHandle(mutex);" {! L" X: A, d) |9 ?+ x

  542. & }& ?/ B0 ~8 F; `4 m
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);$ e; H. X+ t) h& e

  544. 9 c3 w! ]- P3 m8 W2 r! b
  545.         AfxEnableControlContainer();
    5 u0 J  x- X9 f. J$ [
  546. & y; v6 |1 g) _; m
  547.   bCanUpdate=FALSE;9 l( [8 N- C+ w8 |4 [
  548.   dwStartUpSteps=1;
    2 P8 L8 y! C5 V7 x8 E* u1 w  _* ~
  549.   dwProgramState=AP_NOTHING;
    " J8 B, U$ n9 h, |; S3 l

  550. ) N5 g' o$ r5 |5 S5 X
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);/ F1 n9 f. V8 x( m' ?& ~' Q

  552. # Q% V+ u8 a7 {, \
  553.         // Standard initialization4 P% t1 U. x+ j% u9 M
  554.         // If you are not using these features and wish to reduce the size
    ) H. R& o' S; f
  555.         //  of your final executable, you should remove from the following
      A/ `4 W5 O0 l+ K2 X
  556.         //  the specific initialization routines you do not need.
    2 b" g" H. k& `4 z

  557. ' w  p3 u" k/ v: S
  558. #ifdef _AFXDLL, J+ C0 i& s- h" E. ^
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    3 c0 \/ O7 o/ r
  560. #else
    / f" E, `) d  t$ M0 {
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    " S/ r, V5 \8 \% A
  562. #endif) k- U0 Q( P: F
  563. 5 Q; q2 e, @; v% g4 z! V
  564.   dlg=new CRevAppDlg;* Z5 D1 c/ }* S9 b
  565.   dlg->Create(IDD_REVAPP_DIALOG);5 O) T. h- C7 B6 k/ Q) h( N
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    : o0 ~1 Y# d8 I; @1 f
  567.   m_pMainWnd=dlg;
      J! t, J+ p  k
  568. 2 D! |7 a( z1 }, ~( b
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    * X$ _, y2 r  k1 n' t# @3 x
  570. " s  ^' i# V- j" {( p  J; I
  571. //  GdiplusStartupInput gdiplusStartupInput;
    8 c9 ]+ E. X. d' \1 Z
  572. //  ULONG_PTR gdiplusToken;
    / b+ g3 z+ i7 H, F
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);, K1 \7 {, A. }; I( V

  574. , Q) _9 _( X* v2 |/ p3 o! e3 r$ E8 R
  575. //        CRevAppDlg dlg;
    / H1 q0 E7 |& ?1 @8 y
  576. //        int nResponse = dlg.DoModal();
    ; ?' q& @  M8 n, x) H
  577. //        if (nResponse == IDOK)! ^' E# W/ Z. A8 D0 R
  578. //        {* `, Q9 J3 d$ w6 X; j
  579. //                // TODO: Place code here to handle when the dialog is
    & \( [  ^1 C6 U6 Y& v( V* R  O
  580. //                //  dismissed with OK. ]; L* g2 c2 [8 {; y/ Z* j
  581. //        }+ `3 X5 [! H: F, I4 h! t
  582. //        else if (nResponse == IDCANCEL)
    1 J2 ]( L! e$ m3 A$ v2 K1 F1 @
  583. //        {
    8 N) \, `/ Z8 z5 O/ W$ U" _7 V+ M/ ~
  584. //                // TODO: Place code here to handle when the dialog is
    . L  T5 r. I" H4 y& {
  585. //                //  dismissed with Cancel# U/ F2 P4 Z  r2 b- i
  586. //        }
    8 P: F/ C! o) o
  587.   r+ Q! f/ D  o& X
  588.         // Since the dialog has been closed, return FALSE so that we exit the% ]* i1 p# B0 @, Y
  589.         //  application, rather than start the application's message pump.
    % t1 x' A5 }# z. ~
  590.         return TRUE;, Z3 q8 m5 @7 L3 w6 q5 p5 }
  591. }
    ) M6 \9 I. g5 @( Q7 [

  592. % u0 a0 O4 B8 X3 C9 J# e" D
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    1 O% W2 n0 p3 h/ \5 p; U% Q
  594. {+ L1 c# @- r8 z$ z8 N( i5 x7 `' [& w
  595.   int i;6 m; k4 o2 j( g7 ^) k6 f4 o$ h
  596.   char *szRet;; f. P. V- B. a2 ?
  597. ! y9 c+ b# r! _8 O4 |) u
  598.   if(pSource) { itoken=0; sztoken=pSource; }! d( D4 s* S2 Z8 l3 K. i
  599.   if(sztoken)
    1 X2 @9 R0 j5 k  }0 n% ~. P, w
  600.   {& j% R+ h! S2 g8 N$ B  U, W4 E  J
  601.     szRet=&sztoken[itoken];
    0 H- X" ?2 p% g- R: Y- M9 C
  602.     while(sztoken[itoken]). {' h' X* h% t, @
  603.     {
    ( D- n" S8 b+ i/ i# T2 ~/ L
  604.       for(i=0;i<(int)strlen(token);i++)
    6 Q, |: z% M+ x+ w
  605.       {
    ; r7 g+ G- d2 g8 {2 e) q. R- a
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
      P4 C" }# ?! B: E) D
  607.         {
    4 y% B$ V3 f" i% `
  608.           sztoken[itoken++]=0;* U$ T8 `1 C; F1 O4 [' O+ R) ^) m* \
  609.           sztoken[itoken++]=0;
    1 s$ Q) C! o/ ^1 W- z% {, P+ }& _( R
  610.           return szRet;
    6 ]) i3 U1 h4 P" j/ N1 B; y% S+ T
  611.         }1 ^! X# [. T- g& u
  612.       }4 }' c6 I% S% j% Y- X7 B
  613.       itoken++;( M8 \& ]5 z" j6 J0 N
  614.     }
    , s  G/ y9 }' `
  615.   }
    4 x, m$ d  h7 i% d: z) B4 s
  616.   return NULL;
    , p- }9 G4 {% U' F5 J7 I0 a
  617. }
    9 U3 [$ r8 P9 N% T3 v
  618. + z/ ~; _( B0 b$ N8 [; G
  619. void ProcessProc(long Total,long Current)
    . ^+ y& ^, r, m; E% R" Q5 k$ ]
  620. {6 [6 }# M9 I* U1 h* ?
  621.         MSG msg;
    & |8 P( y! E, E0 F
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    + k) R& |! J) i+ B
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));9 B# O9 z7 j. u. r' U  _
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    8 L# i% v/ e1 ^9 g' u& f+ [9 m6 g
  625.         {  D  ~1 m# m1 E6 V0 D( l2 K
  626.                 if(!GetMessage(&msg,NULL,0,0))
    4 x* A- h1 d0 }- D8 T
  627.                 {
    $ y: e+ i" e- s0 p/ ~' `( l
  628.                         return;4 u4 q! t( p/ n; O
  629.                 }
    & I7 _! i2 X0 h9 E
  630.                 TranslateMessage(&msg);4 Z6 z: D3 n0 v0 P8 k( A/ ?% s1 g
  631.                 DispatchMessage(&msg);
    ' V/ U2 \# N1 K# j. M
  632.         }        9 }- u9 P8 h: X! u
  633. }* O: \" z5 z: {* Q* M7 [
  634. , ?% N5 H7 s6 |
  635. BOOL bFirstChar=TRUE;
    ) c9 z& ]7 H- z( y
  636.   ]5 T$ E, v1 v, i# P. J; p
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    # d/ u5 F" W3 A% S4 ~( ^  X1 m
  638. {
    + T8 {6 [) S8 N( k  ?2 P
  639.         // TODO: Add your specialized code here and/or call the base class$ M/ r( ~6 m2 x7 u) W
  640.   switch(dwProgramState)
    . Q: W+ U" o9 s$ V
  641.   {
    ! |) M# C) M/ M7 Y! w0 C* l
  642.   case AP_NOTHING:
      F( o" G2 P+ t( ?) m7 Y5 C- |
  643.     switch(dwStartUpSteps)+ h( T8 [; {- d& s" b
  644.     {
    9 ^/ F7 n  T6 ^/ ~+ j1 A- S
  645.     case 1:
    # ?+ B4 P- W; C; Y% D
  646.       {8 y9 }2 t" N0 @
  647.         int i;# `$ E) A3 }  q& f, ?
  648.         CDC *pCDC=dlg->GetDC();
    0 U, B2 a2 i. I
  649.         HDC hdcwnd=pCDC->m_hDC;% x% u3 n) x  A" i% C
  650. //        Graphics graphics(hdcwnd);
    2 ]: c9 I; @- Y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");6 u& n/ }4 H! Y! e- T$ q4 b( a, T5 S
  652. //        INT iWidth=bitmap.GetWidth();2 p: h& T# y$ H
  653. //        INT iHeight=bitmap.GetHeight();
    / e2 L4 A6 P! P
  654. //        Color color,colorTemp;
    ) V" R4 b$ u% l# j9 J
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& p2 ~4 f2 o6 M! O- b$ q+ k, n
  656. //        {
    1 S" l% n8 v9 P! a
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    8 p8 b9 ?& ]$ N7 x9 U
  658. //          {
    3 r. E3 T3 w0 `( g% J
  659. //            bitmap.GetPixel(iColumn,iRow,&color);% s1 e2 c. s8 A$ }( A( \( c% O7 B
  660. //            colorTemp.SetValue(color.MakeARGB(3 S' v5 i7 O3 p" X, h4 f
  661. //              (BYTE)(255*iColumn/iWidth),2 h8 O8 c: n) _9 q5 A
  662. //              color.GetRed(),
    # m3 i8 z1 j3 Y) B9 r% t: D
  663. //              color.GetGreen(),
      s: |5 e) i* B( `# v
  664. //              color.GetBlue()));5 c# q+ h" z; y, U. l
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);( D1 r+ T  _, l3 w1 X5 Z9 B
  666. //          }
    7 a; ?4 f& L5 b
  667. //        }! S# X: K( Q& u, `
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    - E( |5 p, ?7 D% o
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: A% V6 z* m% w' r; K* U" s5 G" a
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    0 _9 x) B; I) H0 H5 }4 ?
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; s3 k( G2 x' ~  R5 }/ E
  672.         for(i=0;i<240;i+=8)
    & V- @  j& Q+ g0 V, d' x7 E, v7 v
  673.         {; f- u  D) q  G$ i: L+ m5 Q% C
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) ]+ z3 G# Y; P# `- ?% ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 \* f* p7 {7 X7 T  @0 `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : e! p9 y2 N/ d  ^8 X0 F
  677.           Sleep(33);+ p! E- w  v: n/ e) z( d( N
  678.         }* T! O9 [, q; b8 M9 T7 v- R' V  F3 |
  679.         Sleep(1000);
    & \9 V. Z; L: i1 d; w" s
  680.         for(i=240;i>0;i-=8)3 A" x/ B0 n* K+ j
  681.         {& E6 w. ~, a& t9 `; p! t& R8 x/ E
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 ^( ~" v) k' ]) T8 d( S9 N
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % b  z. F1 k0 Y1 {
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: J7 L3 p4 o% G- r+ S: d* b
  685.           Sleep(33);4 [8 ^. S! _+ ^9 B) Y6 Y* e
  686.         }  B  D, U& O9 O& s
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    5 h$ Z# }$ D8 t: J9 \
  688.         dlg->ReleaseDC(pCDC);
    * k' e9 F5 r9 R/ U% W0 Y0 I
  689.         DeleteDC(hdctar);
    ) A8 H" [) q/ c3 s- R
  690.         DeleteDC(hdcsrc);+ w- k5 Y; F3 E5 a, Q
  691.         DeleteDC(hdcorg);  l1 e% ~, t$ i7 _5 h* z
  692.       }3 X9 x9 h8 y6 n$ u. Z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    * d9 j0 D2 K+ J( c
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");5 A# I3 @- D  y; j6 m
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");' m% X2 @+ ?% W, ?- V& E8 J: C3 E+ v
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");2 V- x) U. H7 H- i. X. B( S0 }; v% \3 ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & ]7 g4 p  s* Y9 x: t: _$ D7 z2 }
  698.       if(!Dn.Connected())# ?% ]/ ?) A8 y7 Q
  699.       {
    2 h4 h! Y7 }7 W4 W% j4 P
  700.         dwTotalFiles=1;$ B/ a' v, ]4 s: `4 e' d
  701.         dwDownLoaded=0;
    9 L# |7 e: v) u/ ~! s
  702.         bSilentStep=TRUE;
    , X" u" v: Z1 w# r3 \; G1 p% f& {+ e# L
  703.         bCompressed=FALSE;/ W* ~* ^$ l8 t9 u5 n* y% y
  704.         strExtLocal.Empty();
    4 J4 }+ _& N8 ]) O# o- i
  705.         strFullName="readme.txt";7 y8 Q1 G) r( W# `+ k0 m- Z% e
  706.         dwProgramState=AP_CONNECT;
    * L5 k4 i) C4 y7 t) O- a
  707.       }
    2 s% P, M, Z8 J, s
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    $ s8 @& K, k9 A: B
  709.       dwStartUpSteps=2;
    ' l$ D- Z  n0 `/ z
  710.       break;
    6 P* j8 v) y: z; o. X) i: ]
  711.     case 2:
    1 @0 h' H1 W, U/ v$ Q6 \5 e: O. z0 R
  712.       {
    # {  S2 W3 U6 j6 W
  713.         int iEOF;
    & W1 \7 p' M- t* R6 Y
  714.         FILE *fp;
    . j/ X! v$ s' `
  715.         char szString[512];
    ' K4 o  X/ T% J, y5 q/ H
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");1 c, y" N8 r) \( l. N9 J
  717.         if(fp)
      X* U6 r/ w- {( L8 R6 i8 F  Z6 V& l
  718.         {( }, Y' W% @4 e! j) C5 ?( l
  719.           do5 e, I& D; f& X+ {9 G8 o3 {
  720.           {- L: G  V8 V5 \) M+ m" _
  721.             iEOF=fscanf(fp,"%s",szString);+ m# o+ q  }+ I4 C- C/ U% M/ ]" c
  722.             if(strlen(szString))
    ' X5 I4 w% Q! U/ j% x# u7 E
  723.             {
    ! R9 t3 {* @( _
  724.               if(bFirstChar)2 L; f# _' t% J% |; Q: g! B
  725.               {% I5 \! y; \* f/ z: R  A
  726.                 bFirstChar=FALSE;5 }+ ?/ b" `: T' j: b4 |4 I
  727.                 bConnectIsBig5=FALSE;- J1 B7 \( p7 T* d1 }
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! K$ y* Q0 f3 o3 y) o0 W5 t8 B) U
  729.               }& x" i% [* G1 D9 X# T. P( J4 Q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));2 ]6 k; |. ?; D6 h1 J
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    & y, Y+ x# J# x/ W, y
  732.               dlg->m_ListText.AddString(szString);
    1 R6 e* h, X$ m
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 k6 F/ B: g- a# c* [2 Z( b6 z  m
  734.               *szString=0;
    - c+ T3 u( Z$ Y' K& c  m
  735.             }
    0 \  }3 ^4 g) G% F# }
  736.           } while(iEOF!=EOF);. k9 X& \$ B$ V% r1 Z
  737.           fclose(fp);
    * h2 w4 m+ y" d7 [$ ]- w! T1 b+ _; Z
  738.           unlink(".\\DownLoad\\readme.txt");
    - F3 T/ Y* a8 A# {, g
  739.           dwStartUpSteps=3;
    0 U7 [) e/ ^# @. j# Y( N- `
  740.         }
    : v; n  {7 Q; b( [" j8 O4 d
  741.       }
    7 P$ P! G$ P$ Y* G9 @& S
  742.       break;
    % r% J( s$ u8 u2 Q* c2 e" o
  743.     case 3:
    / A( d6 D5 n9 I$ c6 J' j# V3 _
  744.       if(!Dn.Connected())
    3 x$ {( M9 J" E0 S  b
  745.       {
    6 h5 G) f* f* S4 S7 S* M2 o. ]
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);! H& b7 a* q4 E- @8 P1 Z8 f
  747.         dwTotalFiles=1;
    4 I( S$ p' I  D4 v
  748.         dwDownLoaded=0;2 Z9 z" p4 h% E9 s, A* s
  749.         bSilentStep=TRUE;
    ( W1 J6 T3 F) Q* F- g6 m
  750.         bCompressed=FALSE;3 o$ K4 _5 l. L4 g% u( ~
  751.         strExtLocal.Empty();9 W" }2 m3 k  R
  752.         strFullName="checkversion.txt";
    4 u+ A5 C0 @, `. y1 q+ e
  753.         dwProgramState=AP_CONNECT;
    ; o9 {9 s& U( \- w1 m2 H
  754.       }
    8 W- U4 U" y4 }4 M* Y& k
  755.       dwStartUpSteps=4;
    ; {/ V( T5 E# }" }) k$ d0 H8 q
  756.       break;
    ' R& [7 X2 z* t5 E5 e# g1 w( G
  757.     case 4:& y' v; S! n( F0 A: Z; G
  758.       {$ Y" g6 |2 {! u' W% _) c
  759.         FILE *fp;
    ! q4 t8 a7 E, y1 U
  760.         char szString1[128];
    . d/ v7 a: \2 |* o/ m# F- j
  761.         char szString2[128];" a) h7 @4 ]' i8 K# T
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    & Z! ^/ r) m' E7 S' ?) h$ y
  763.         if(fp)
    ; k& T* }6 ]' l& `. X# r
  764.         {1 O1 z6 n  O+ T" W5 D
  765.           fscanf(fp,"%s",szString1);
    9 e) K% U" W2 ?  K4 p
  766.           fclose(fp);5 M: L6 @3 d! C0 x3 S. I# g- q
  767.           fCheckVersion=atof(szString1);9 U2 D' T) g4 A5 L  P: x
  768.           fp=fopen(".\\checkversion.dat","r");! I5 i1 D0 B9 i0 H
  769.           if(fp)2 T& s. y1 j6 i5 s3 f) H
  770.           {
    : F, R3 e) C. I
  771.             fscanf(fp,"%s",szString2);2 i  O% D2 Y+ h9 b) `
  772.             fclose(fp);
    # V' x1 c3 @6 E% [$ U
  773.             if(atof(szString1)!=atof(szString2))
    % v5 }- i+ b; ], O  h( q
  774.             {
    $ c9 g4 j1 G# D' q4 @& \; Q
  775.               if(!Dn.Connected())7 P/ F# v: Q( y7 J5 `0 Y0 l
  776.               {
    9 B( k9 `7 S" {' N, ^- Q
  777.                 bFirstUpdate=TRUE;
    2 V# y* p5 E9 Z& M# b! I
  778.                 dwTotalFiles=1;6 M; ?& J( C" C- ]
  779.                 dwDownLoaded=0;
    ! @0 O7 y+ \& r, z; D: D% R
  780.                 bSilentStep=FALSE;5 \5 |$ `3 O) q) L* S0 l/ P
  781.                 bCompressed=TRUE;& H2 L8 x# T' n% h$ h
  782.                 strExtLocal=".\\DownLoad\";. T/ C2 H8 _0 Q/ h& d
  783.                 strFullName="update.txt";* c  w, f; r# ~- k: r& O# y, L
  784.                 dwProgramState=AP_CONNECT;
    & q7 K) x8 K, ?7 w" x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 o$ N& g. ?) _& A4 Y3 a3 _
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 p7 P' m5 B9 a. b$ `
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 C' w0 z1 l$ e# [
  788. - @9 }9 C! L; T! y. l5 t
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: L- ^' P; f9 E8 C+ J
  790.                 unlink(".\\DownLoad\\checkversion.txt");! d4 d1 ?* F  ?. l2 L: Y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 s. n* h) Z* X0 i
  792.                 {
    1 C" a  Q) k( k2 `% H" @
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : Z, o7 @$ s, r0 s
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");! ?9 e4 Q0 ^/ e0 {; b
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");, g% b0 t  r9 ]  T3 ^
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + n, P8 A+ a: f  Q: X
  797. 4 k( M- B' P0 m3 r9 }, Q
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * t0 x) F* b, p. \5 e" q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 e4 ^" j, I: u9 O( R" E
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    - j. S9 G8 e  F7 I
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 l4 B! \7 W( U
  802.                 }# s* R* y) b1 Z$ p% V
  803.                 dwStartUpSteps=5;. z$ P1 G: T. Q& {* ?6 }' `
  804.               }
      ^4 t6 Q: L0 \; L' o7 w
  805.             }2 I5 \3 D" q2 c4 b4 n$ c) l* N& b
  806.             else
      D3 S+ p5 l/ o" |( o3 y' [4 E
  807.             {
    % d- u: _! T0 R+ Q) n
  808.               unlink(".\\DownLoad\\checkversion.txt");: k; K1 r  S* M' p: {
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : R5 F1 s# b& V. q$ ^+ a
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");9 o6 f6 a  g# T9 ~4 b$ v  {0 [  l
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");' |- |/ M$ o, q3 C
  812. 7 `1 @4 B: I6 H& G
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # R* w. B& S5 ]/ x
  814.               dwStartUpSteps=99;
    ( T2 d3 ]4 h9 w2 n9 q
  815.               bFinishUpdated=TRUE;
      g- C* X. _' g& x9 h) H
  816.               bCanUpdate=TRUE;; z0 x1 c$ ?, r
  817.             }
    ' [% j) R' I9 ^$ k' I% v8 \1 @
  818.           }
    6 R5 `. x0 L3 W, b% }
  819.           else& m, n* N# E( q/ ?. g5 c4 U
  820.           {9 |- ]2 {2 [- D/ [% Y, X6 Z9 F! M
  821.             if(!Dn.Connected())
    # U# e+ k2 `3 N* z/ B0 X. _7 j* Z
  822.             {8 l' p2 @3 e/ ]
  823.               bFirstUpdate=TRUE;. A" |/ x  U, D7 X0 A
  824.               dwTotalFiles=1;: F( V' @, {1 M1 {$ Q
  825.               dwDownLoaded=0;% ^; A1 r6 V; w# O* f' q# G; U
  826.               bSilentStep=FALSE;
    % g* s: O- @! T) L5 }
  827.               bCompressed=TRUE;$ c0 T( a, U. m, L
  828.               strExtLocal=".\\DownLoad\";* }' _' y; |! l4 V4 a7 `
  829.               strFullName="update.txt";
    $ @0 `( ]: q# ~4 J
  830.               dwProgramState=AP_CONNECT;
    # d% N5 i& Q- R% U; _7 U# A  I6 X
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      S: ~9 w( [9 j/ o  K. R
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 V& ]  z% E, |4 a
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " ^# p8 d# ~; Q6 N, }7 }
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # ?6 v9 z; B! J. W6 m8 Z: K  c
  835.               unlink(".\\DownLoad\\checkversion.txt");* q( a; p: d) C: o4 S( |# {9 W
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)' }0 W8 L7 m. ?8 B& j
  837.               {) \9 F) L3 j$ Q' P3 d$ R( T
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    & A+ q$ S/ k( d) d8 Y1 X
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    8 M' E9 d: i& E" j9 H- C0 ^
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    1 R* l1 p( B  G# o6 D  ^; }
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 W* e! X/ \0 ]' s# q
  842.                 7 W& D' Q2 p+ ?- z+ p
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 p! i$ ~7 ~  t+ {1 U8 Z
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ O$ F  Z7 t. a; o5 Y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    * i9 t5 p- U5 G9 N" \) U9 r
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & q3 X! T0 |! G' d) r# j  \
  847.               }1 G1 Z" F  m7 Y( P: U: r6 H1 s) L
  848.               dwStartUpSteps=5;8 Z& W7 Q% A& d* w$ w
  849.             }. z, Q7 G! ^- A! {1 f; K( e
  850.           }
    2 m$ m9 T9 s+ w+ H# J7 n! S) x
  851.         }
    3 v# b1 @' l2 @1 Y- h
  852.         else
    , G) E# c2 a% Y! V' @) v8 \
  853.         {
    # [- u0 D! [& U3 }1 M! ], C
  854.           dwStartUpSteps=3;
    8 j+ v, u( n/ ]# c6 c
  855.         }
    & E/ v  E' e; g. a; i
  856.       }
    8 W& P) t% {+ \
  857.       break;9 Y2 P0 h1 W& M+ n$ Y- x& G
  858.     case 5:
    * e" r) D* y" _+ j/ S. @& G
  859.       {
    # E+ D5 X6 ]" N8 `3 N& B& Z: f& R
  860.         if(GetFileAttributes("Wsa.zip" )!=-1): R. {, g! R0 m& ^: R5 y
  861.         {
    ( m. q! C. e  p- j8 p7 [
  862.           int opt_overwrite=1;6 G+ X% B, E1 r% A5 x5 t' L8 |
  863.           int opt_do_extract_withoutpath=0;
    6 l7 \6 p8 I& N
  864.           unzFile uf=NULL;
    + B* r( L+ B" R0 t# O6 D

  865. . i# f& |# h$ y( R9 b3 g/ ]$ c5 i
  866.           uf=unzOpen("Wsa.zip");9 Y$ L) S+ `. {2 h2 a6 }
  867.           if(uf)# h( s8 G7 x% n( z: t, L
  868.           {8 N  [: a8 s& f" @
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ' V5 _6 b* x% `# l. e' h2 W
  870.             unzClose(uf);
    4 Z" E! y. m, i/ ^% `. s3 S( S
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    4 \3 K0 ~) C, a- P1 }  R* J
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");- z. s0 s  r- t$ D: }
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");- L# a2 t: p" q+ r8 u2 M* K7 U
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 F9 L; P0 X& Y
  875.           }
    " P" _% {: A* ?
  876.           DeleteFile("Wsa.zip" );) ]! r( b- U6 O3 N8 ^! i
  877.         }
    2 C: z- ^* y4 C0 Y. ?

  878. 1 p; ^: c8 ?8 T9 p
  879.         if(CheckLocalVersion())
    $ [+ n( Z9 }$ n$ N
  880.         {
    & `4 ^; z0 e6 \6 d1 q$ W
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");' [- ~/ _5 T& i
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    3 p( @1 M8 _" G4 ?: L; k
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");0 `/ F4 K' z7 I" U
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , D9 `- q  [) C$ ?
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    , L' ]# q" y$ Z0 u
  886.           dwStartUpSteps=99;) z% g/ L- r( j" B+ g9 y
  887.         }
    7 m+ y- j" _2 x9 V! N
  888.         else5 b# e2 N% i8 ]& |" K3 _: \1 J! @
  889.         {6 D  j; y/ G9 ~( W
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    % k1 z2 S5 m* V. o. J  I# v6 N
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - q' W) _6 o  k) i9 b
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");  ?# N% ~  a& }

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

1 I7 ?0 _8 F9 O( q( r! d2 Y0 F; T& b: a' y/ _. j

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-10 06:40

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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